Merge ../org.eclipse.datatools.enablement.oda
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..910710c
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+releng.new/build/**

+releng.new/dev-eclipse/**

+releng.new/dev-target/**
\ No newline at end of file
diff --git a/.project b/.project
new file mode 100644
index 0000000..3ba0b83
--- /dev/null
+++ b/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.build</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/.classpath b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/.gitignore b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/.gitignore
new file mode 100644
index 0000000..6ec8be4
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/.gitignore
@@ -0,0 +1,4 @@
+bin
+download
+*.jar
+*.zip
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/.project b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/.project
new file mode 100644
index 0000000..08c062b
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/META-INF/MANIFEST.MF b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..65109dc
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %plugin.name
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui; singleton:=true
+Bundle-Version: 1.0.1
+Bundle-Activator: org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui.Activator
+Bundle-Vendor: Eclipse.org
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.ui;bundle-version="[3.3.0,4.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.3.0,4.0.0)",
+ org.eclipse.datatools.connectivity.oda.design.ui;bundle-version="[3.0.6,4.0.0)",
+ org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample,
+ org.eclipse.ui.navigator;bundle-version="[3.3.0,4.0.0)",
+ org.eclipse.datatools.connectivity.oda.consumer;bundle-version="[3.2.2,4.0.0)"
+Eclipse-LazyStart: true
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/about.html b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/about.html
new file mode 100644
index 0000000..129db9d
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/build.properties b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/build.properties
new file mode 100644
index 0000000..3f6e715
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/build.properties
@@ -0,0 +1,9 @@
+source.. = src/
+output.. = bin/
+bin.includes = plugin.xml,\
+               META-INF/,\
+               .,\
+               plugin.properties,\
+               icons/,\
+               about.html
+src.includes = about.html
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/icons/datasetpage.ico b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/icons/datasetpage.ico
new file mode 100644
index 0000000..69f4ae1
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/icons/datasetpage.ico
Binary files differ
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/icons/new_db_element.gif b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/icons/new_db_element.gif
new file mode 100644
index 0000000..1d459ce
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/icons/new_db_element.gif
Binary files differ
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/icons/profile.gif b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/icons/profile.gif
new file mode 100644
index 0000000..6b86d07
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/icons/profile.gif
Binary files differ
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/plugin.properties b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/plugin.properties
new file mode 100644
index 0000000..ba81984
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/plugin.properties
@@ -0,0 +1,27 @@
+###############################################################################
+# Copyright (c) 2008 Actuate Corporation.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#  Actuate Corporation - initial API and implementation
+#
+###############################################################################
+# Plug-in Configuration
+#
+oda.data.source.id=org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample
+parent.category.id=org.eclipse.datatools.connectivity.db.category
+#
+###############################################################################
+# NLS strings
+#
+plugin.name=ODA Databases Profile Sample Wrapper UI Data Source ODA Designer
+newwizard.name=ODA Databases Profile Sample Wrapper UI Data Source
+newwizard.description=Create a ODA Databases Profile Sample Wrapper UI Data Source connection profile
+wizard.window.title=New ODA Databases Profile Sample Wrapper UI Data Source Profile
+wizard.data.source.page.title=ODA Databases Profile Sample Wrapper UI Data Source
+profile.propertypage.name=ODA Databases Profile Sample Wrapper UI Data Source Connection Properties
+wizard.data.set.window.title=New ODA Databases Profile Sample Wrapper UI Data Set
+wizard.data.set.page.title=Query
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/plugin.xml b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/plugin.xml
new file mode 100644
index 0000000..cd50ff8
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/plugin.xml
@@ -0,0 +1,205 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+
+   <extension
+         point="org.eclipse.datatools.connectivity.connectionProfile">
+      <newWizard
+            name="%newwizard.name"
+            icon="icons/new_db_element.gif"
+            profile="%oda.data.source.id"
+            description="%newwizard.description"
+            class="org.eclipse.datatools.connectivity.oda.design.ui.profile.db.wizards.NewDbDataSourceWizard"
+            id="%oda.data.source.id">
+      </newWizard>
+   </extension>
+   <extension
+         point="org.eclipse.ui.propertyPages">
+      <page
+            name="%profile.propertypage.name"
+            class="org.eclipse.datatools.connectivity.oda.design.ui.profile.db.wizards.DbProfileEditorPage"
+            id="%oda.data.source.id">
+         <enabledWhen>
+            <instanceof
+                  value="org.eclipse.datatools.connectivity.IConnectionProfile">
+            </instanceof>
+         </enabledWhen>
+         <filter
+               name="org.eclipse.datatools.profile.property.id"
+               value="%oda.data.source.id">
+         </filter>
+      </page>
+   </extension>
+   <extension
+         point="org.eclipse.datatools.connectivity.oda.design.ui.dataSource">
+      <dataSourceUI
+            id="%oda.data.source.id">
+         <newDataSourceWizard
+               pageClass="dummy"
+               includesProgressMonitor="false"
+               pageTitle="%wizard.data.source.page.title"
+               windowTitle="%wizard.window.title">
+         </newDataSourceWizard>
+      </dataSourceUI>
+      <dataSetUI
+            supportsOutParameters="false"
+            supportsInParameters="false"
+            initialPageId="org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.dataSet.page1"
+            id="org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.dataSet">
+         <dataSetWizard
+               class="org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizard"
+               windowTitle="%wizard.data.set.window.title">
+         </dataSetWizard>
+         <dataSetPage
+               displayName="%wizard.data.set.page.title"
+               icon="icons/datasetpage.ico"
+               wizardPageClass="org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui.impl.CustomDataSetWizardPage"
+               path="/"
+               id="org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.dataSet.page1">
+         </dataSetPage>
+      </dataSetUI>
+   </extension>
+   <extension
+         point="org.eclipse.ui.navigator.viewer">
+      <viewerContentBinding
+            viewerId="org.eclipse.datatools.connectivity.DataSourceExplorerNavigator">
+         <includes>
+            <contentExtension
+                  isRoot="false"
+                  pattern="org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui.filter.commonFilter">
+            </contentExtension>
+         </includes>
+      </viewerContentBinding>
+      <viewerActionBinding
+            viewerId="org.eclipse.datatools.connectivity.DataSourceExplorerNavigator">
+         <includes>
+            <actionExtension
+                  pattern="org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui.filter.actionExtension">
+            </actionExtension>
+         </includes>
+      </viewerActionBinding>
+   </extension>
+   <extension
+         point="org.eclipse.ui.navigator.navigatorContent">
+      <commonFilter
+            activeByDefault="true"
+            description="Filters out this ODA DB Profile Category in Data Source Explorer"
+            id="org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui.filter.commonFilter"
+            name="ODA Databases Profiles Category Sample Filter">
+         <filterExpression>
+            <and>
+               <instanceof
+                     value="org.eclipse.datatools.connectivity.ICategory">
+               </instanceof>
+               <test
+                     property="org.eclipse.datatools.connectivity.category.property.categoryID"
+                     value="%oda.data.source.id">
+               </test>
+            </and>
+         </filterExpression>
+      </commonFilter>
+      <actionProvider
+            class="org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui.filter.DbProfileActionProvider"
+            id="org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui.filter.actionExtension"
+            overrides="org.eclipse.datatools.connectivity.ui.dse.actions.ProfileActionsActionProvider"
+            priority="lowest">
+         <enablement>
+            <and>
+               <instanceof
+                     value="org.eclipse.datatools.connectivity.ICategory">
+               </instanceof>
+               <test
+                     property="org.eclipse.datatools.connectivity.category.property.categoryID"
+                     value="%parent.category.id">
+               </test>
+            </and>
+         </enablement>
+      </actionProvider>
+   </extension>
+   <extension
+         point="org.eclipse.ui.handlers">
+    <handler
+            class="org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui.filter.AddDbProfileViewAction"
+            commandId="org.eclipse.datatools.connectivity.commands.addprofile">
+     <enabledWhen>
+      <or>
+       <with
+          variable="selection">
+          <count
+             value="0">
+          </count>
+       </with>
+	   <with variable="selection">
+	      <count value="+" />
+	      <iterate>
+	       <or>
+            <and>
+              <instanceof
+                    value="org.eclipse.datatools.connectivity.ICategory">
+              </instanceof>
+              <test
+                    property="org.eclipse.datatools.connectivity.category.property.categoryID"
+                    value="%parent.category.id">
+              </test>
+            </and>
+            <and>
+               <instanceof
+                     value="org.eclipse.datatools.connectivity.IConnectionProfile">
+               </instanceof>
+               <test
+                     property="org.eclipse.datatools.connectivity.profile.property.categoryID"
+                     value="%parent.category.id">
+               </test>
+            </and>
+           </or>
+	      </iterate>
+	   </with>
+	  </or>
+     </enabledWhen>
+     <activeWhen>
+      <or>
+       <with
+          variable="selection">
+          <count
+             value="0">
+          </count>
+       </with>
+	   <with variable="selection">
+	      <count value="+" />
+	      <iterate>
+	       <or>
+            <and>
+              <instanceof
+                    value="org.eclipse.datatools.connectivity.ICategory">
+              </instanceof>
+              <test
+                    property="org.eclipse.datatools.connectivity.category.property.categoryID"
+                    value="%parent.category.id">
+              </test>
+            </and>
+            <and>
+               <instanceof
+                     value="org.eclipse.datatools.connectivity.IConnectionProfile">
+               </instanceof>
+               <test
+                     property="org.eclipse.datatools.connectivity.profile.property.categoryID"
+                     value="%parent.category.id">
+               </test>
+            </and>
+	       </or>
+	      </iterate>
+	   </with>
+	  </or>
+     </activeWhen>
+    </handler>
+   </extension>
+   
+   <extension
+         point="org.eclipse.datatools.connectivity.oda.consumer.propertyProvider">
+      <dataSourcePropertyService
+            consumerApplicationId="%oda.data.source.id"
+            providerClass="org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui.impl.ProfilePropertyProvider">
+      </dataSourcePropertyService>
+   </extension>
+
+</plugin>
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/ui/Activator.java b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/ui/Activator.java
new file mode 100644
index 0000000..4a243e8
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/ui/Activator.java
@@ -0,0 +1,80 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle.
+ */
+public class Activator extends AbstractUIPlugin 
+{
+    private static Activator sm_plugin;
+    
+    /**
+     * The constructor
+     */
+    public Activator() 
+    {
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+     */
+    public void start( BundleContext context ) throws Exception 
+    {
+        super.start( context );
+        sm_plugin = this;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+     */
+    public void stop(BundleContext context) throws Exception 
+    {
+        sm_plugin = null;
+        super.stop( context );
+    }
+
+    /**
+     * Returns the shared instance
+     * @return the shared instance
+     */
+    public static Activator getDefault() 
+    {
+        return sm_plugin;
+    }
+
+    /**
+     * Returns an image descriptor for the image file at the given
+     * plug-in relative path
+     * @param path the path
+     * @return the image descriptor
+     */
+    public static ImageDescriptor getImageDescriptor( String path ) 
+    {
+        return imageDescriptorFromPlugin( getBundleId(), path );
+    }
+    
+    public static String getBundleId()
+    {
+        return getDefault().getBundle().getSymbolicName();
+    }
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/ui/filter/AddDbProfileViewAction.java b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/ui/filter/AddDbProfileViewAction.java
new file mode 100644
index 0000000..9f0e291
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/ui/filter/AddDbProfileViewAction.java
@@ -0,0 +1,65 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui.filter;
+
+import java.util.ArrayList;
+
+import org.eclipse.datatools.connectivity.ui.actions.AddProfileViewAction;
+import org.eclipse.jface.viewers.ViewerFilter;
+
+/**
+ * Extends the DTP Data Source Explorer's Default Add Profile Action
+ * to filter out the Databases Connection Profile wrapper type from the DSE.
+ */
+public class AddDbProfileViewAction extends AddProfileViewAction
+{
+    private ViewerFilter m_dbProfileFilter;
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.ui.actions.AddProfileViewAction#getWizardSelectionFilters()
+     */
+    protected ViewerFilter[] getWizardSelectionFilters()
+    {
+        // overrides base class method to provide an additional filter to 
+        // hide the Databases wrapper profile type in the DSE view
+        ViewerFilter[] baseFilters = super.getWizardSelectionFilters();
+        return appendFilter( baseFilters, getDbProfileFilter() );
+    }
+
+    private ViewerFilter getDbProfileFilter()
+    {
+        if( m_dbProfileFilter == null )
+            m_dbProfileFilter = new DbProfileCategoryFilter();
+        
+        return m_dbProfileFilter;
+    }
+
+    private ViewerFilter[] appendFilter( ViewerFilter[] filters, ViewerFilter moreFilter )
+    {
+        ArrayList mergedFilters = new ArrayList();
+        if( filters != null )
+        {
+            for( int i=0; i < filters.length; i++ )
+            {
+                mergedFilters.add( filters[i] );
+            }
+        }
+        
+        mergedFilters.add( moreFilter );
+        return (ViewerFilter[]) mergedFilters.toArray( new ViewerFilter[ mergedFilters.size() ] );
+    }
+    
+}
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/ui/filter/DbProfileActionProvider.java b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/ui/filter/DbProfileActionProvider.java
new file mode 100644
index 0000000..eab6543
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/ui/filter/DbProfileActionProvider.java
@@ -0,0 +1,37 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui.filter;
+
+import org.eclipse.datatools.connectivity.ui.actions.AddProfileViewAction;
+import org.eclipse.datatools.connectivity.ui.navigator.actions.ProfileActionsActionProvider;
+
+/**
+ * Extends the DTP Data Source Explorer's Default Profile Action Provider
+ * to provide own extended action(s).
+ */
+public class DbProfileActionProvider extends
+        ProfileActionsActionProvider
+{
+    
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.ui.navigator.actions.ProfileActionsActionProvider#createAddProfileViewAction()
+     */
+    protected AddProfileViewAction createAddProfileViewAction()
+    {
+        return new AddDbProfileViewAction();
+    }
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/ui/filter/DbProfileCategoryFilter.java b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/ui/filter/DbProfileCategoryFilter.java
new file mode 100644
index 0000000..2827b0a
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/ui/filter/DbProfileCategoryFilter.java
@@ -0,0 +1,65 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui.filter;
+
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.CPWizardNode;
+import org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.Activator;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.ui.navigator.CommonViewer;
+
+/**
+ * A filter that hides the ODA DB Profile wrapper in the Data Source Explorer view.
+ */
+public class DbProfileCategoryFilter extends ViewerFilter
+{
+    private static String sm_runtimePluginId;
+    
+    public DbProfileCategoryFilter()
+    {
+        super();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+     */
+    public boolean select( Viewer viewer, Object parentElement, Object element )
+    {
+        if( ! (viewer instanceof CommonViewer) )
+        {
+            if( ! (element instanceof CPWizardNode) )
+                return true;
+            
+            String wizardProviderId = ((CPWizardNode) element).getProvider().getId();
+            return ! getRuntimePluginId().equalsIgnoreCase( wizardProviderId );
+        }
+        
+        if( ! (element instanceof ICategory) )
+            return true;
+
+        // filters out this oda data source id in the DSE
+        String categoryId = ((ICategory) element).getId();
+        return ! categoryId.equalsIgnoreCase( getRuntimePluginId() );
+    }
+
+    private static String getRuntimePluginId()
+    {
+        if( sm_runtimePluginId == null )
+            sm_runtimePluginId = Activator.getBundleId();
+        return sm_runtimePluginId;
+    }
+    
+}
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/ui/filter/package.html b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/ui/filter/package.html
new file mode 100644
index 0000000..bbe5564
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/ui/filter/package.html
@@ -0,0 +1,37 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+
+This package provides an exemplary implementation of an ODA driver's designer 
+that adopts the integrated ODA Database Connection Profile framework.
+See the extensions defined in the plugin.xml.
+It contributes to the ODA framework's UI pages for an user to create an ODA 
+data source design that links to a DTP Database (JDBC) connection profile.
+<p>
+Its scope focus on designing an ODA data source connection.
+It uses the auto-generated ODA data set designer page, included for demo purpose only.
+<p>
+
+<!-- Put @see and @since tags down here. -->
+@since DTP 1.6
+
+</body>
+</html>
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/ui/impl/CustomDataSetWizardPage.java b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/ui/impl/CustomDataSetWizardPage.java
new file mode 100644
index 0000000..d707c8a
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/ui/impl/CustomDataSetWizardPage.java
@@ -0,0 +1,396 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui.impl;
+
+import org.eclipse.datatools.connectivity.oda.IConnection;
+import org.eclipse.datatools.connectivity.oda.IDriver;
+import org.eclipse.datatools.connectivity.oda.IParameterMetaData;
+import org.eclipse.datatools.connectivity.oda.IQuery;
+import org.eclipse.datatools.connectivity.oda.IResultSetMetaData;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.DataSetDesign;
+import org.eclipse.datatools.connectivity.oda.design.DataSetParameters;
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.ParameterDefinition;
+import org.eclipse.datatools.connectivity.oda.design.ResultSetColumns;
+import org.eclipse.datatools.connectivity.oda.design.ResultSetDefinition;
+import org.eclipse.datatools.connectivity.oda.design.ui.designsession.DesignSessionUtil;
+import org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizardPage;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * Auto-generated implementation of an ODA data set designer page
+ * for an user to create or edit an ODA data set design instance.
+ * This custom page provides a simple Query Text control for user input.  
+ * It further extends the DTP design-time framework to update
+ * an ODA data set design instance based on the query's derived meta-data.
+ * <br>
+ * A custom ODA designer is expected to change this exemplary implementation 
+ * as appropriate. 
+ */
+public class CustomDataSetWizardPage extends DataSetWizardPage
+{
+
+    private static String DEFAULT_MESSAGE = "Define the query text for the data set";
+    
+    private transient Text m_queryTextField;
+
+	/**
+     * Constructor
+	 * @param pageName
+	 */
+	public CustomDataSetWizardPage( String pageName )
+	{
+        super( pageName );
+        setTitle( pageName );
+        setMessage( DEFAULT_MESSAGE );
+
+        setPageComplete( false );
+	}
+
+	/**
+     * Constructor
+	 * @param pageName
+	 * @param title
+	 * @param titleImage
+	 */
+	public CustomDataSetWizardPage( String pageName, String title,
+			ImageDescriptor titleImage )
+	{
+        super( pageName, title, titleImage );
+        setMessage( DEFAULT_MESSAGE );
+        setPageComplete( false );
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizardPage#createPageCustomControl(org.eclipse.swt.widgets.Composite)
+	 */
+	public void createPageCustomControl( Composite parent )
+	{
+        setControl( createPageControl( parent ) );
+        initializeControl();
+	}
+    
+    /**
+     * Creates custom control for user-defined query text.
+     */
+    private Control createPageControl( Composite parent )
+    {
+        Composite composite = new Composite( parent, SWT.NONE );
+        composite.setLayout( new GridLayout( 1, false ) );
+        GridData gridData = new GridData( GridData.HORIZONTAL_ALIGN_FILL
+                | GridData.VERTICAL_ALIGN_FILL );
+
+        composite.setLayoutData( gridData );
+
+        Label fieldLabel = new Label( composite, SWT.NONE );
+        fieldLabel.setText( "&Query Text:" );
+        
+        m_queryTextField = new Text( composite, SWT.BORDER
+                | SWT.V_SCROLL | SWT.H_SCROLL );
+        GridData data = new GridData( GridData.FILL_HORIZONTAL );
+        data.heightHint = 100;
+        m_queryTextField.setLayoutData( data );
+        m_queryTextField.addModifyListener( new ModifyListener( ) 
+        {
+            public void modifyText( ModifyEvent e )
+            {
+                validateData();
+            }
+        } );
+       
+        return composite;
+    }
+
+	/**
+	 * Initializes the page control with the last edited data set design.
+	 */
+	private void initializeControl( )
+	{
+        /* 
+         * To optionally restore the designer state of the previous design session, use
+         *      getInitializationDesignerState(); 
+         */
+
+        // Restores the last saved data set design
+        DataSetDesign dataSetDesign = getInitializationDesign();
+        if( dataSetDesign == null )
+            return; // nothing to initialize
+
+        String queryText = dataSetDesign.getQueryText();
+        if( queryText == null )
+            return; // nothing to initialize
+
+        // initialize control
+        m_queryTextField.setText( queryText );
+        validateData();
+        setMessage( DEFAULT_MESSAGE );
+
+        /*
+         * To optionally honor the request for an editable or
+         * read-only design session, use
+         *      isSessionEditable();
+         */
+	}
+
+    /**
+     * Obtains the user-defined query text of this data set from page control.
+     * @return query text
+     */
+    private String getQueryText( )
+    {
+        return m_queryTextField.getText();
+    }
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizardPage#collectDataSetDesign(org.eclipse.datatools.connectivity.oda.design.DataSetDesign)
+	 */
+	protected DataSetDesign collectDataSetDesign( DataSetDesign design )
+	{
+        if( ! hasValidData() )
+            return design;
+        savePage( design );
+        return design;
+	}
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizardPage#collectResponseState()
+     */
+	protected void collectResponseState( )
+	{
+		super.collectResponseState( );
+		/*
+		 * To optionally assign a custom response state, for inclusion in the ODA
+		 * design session response, use 
+         *      setResponseSessionStatus( SessionStatus status );
+         *      setResponseDesignerState( DesignerState customState );
+		 */
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizardPage#canLeave()
+	 */
+	protected boolean canLeave( )
+	{
+        return isPageComplete();
+	}
+
+    /**
+     * Validates the user-defined value in the page control exists
+     * and not a blank text.
+     * Set page message accordingly.
+     */
+	private void validateData( )
+	{
+        boolean isValid = ( m_queryTextField != null &&
+            getQueryText() != null && getQueryText().trim().length() > 0 );
+
+        if( isValid )
+            setMessage( DEFAULT_MESSAGE );
+        else
+            setMessage( "Requires input value.", ERROR );
+
+		setPageComplete( isValid );
+	}
+
+	/**
+	 * Indicates whether the custom page has valid data to proceed 
+     * with defining a data set.
+	 */
+	private boolean hasValidData( )
+	{
+        validateData( );
+        
+		return canLeave();
+	}
+
+	/**
+     * Saves the user-defined value in this page, and updates the specified 
+     * dataSetDesign with the latest design definition.
+	 */
+	private void savePage( DataSetDesign dataSetDesign )
+	{
+        // save user-defined query text
+        String queryText = getQueryText();
+        dataSetDesign.setQueryText( queryText );
+
+        // obtain query's current runtime metadata, and maps it to the dataSetDesign
+        IConnection customConn = null;
+        try
+        {
+            // instantiate your custom ODA runtime driver class
+            /* Note: You may need to manually update your ODA runtime extension's
+             * plug-in manifest to export its package for visibility here.
+             */
+            IDriver customDriver = new org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.impl.Driver();
+            
+            // obtain and open a live connection
+            customConn = customDriver.getConnection( null );
+            java.util.Properties connProps = 
+                DesignSessionUtil.getEffectiveDataSourceProperties( 
+                         getInitializationDesign().getDataSourceDesign() );
+            customConn.open( connProps );
+
+            // update the data set design with the 
+            // query's current runtime metadata
+            updateDesign( dataSetDesign, customConn, queryText );
+        }
+        catch( OdaException e )
+        {
+            // not able to get current metadata, reset previous derived metadata
+            dataSetDesign.setResultSets( null );
+            dataSetDesign.setParameters( null );
+            
+            e.printStackTrace();
+        }
+        finally
+        {
+            closeConnection( customConn );
+        }
+	}
+
+    /**
+     * Updates the given dataSetDesign with the queryText and its derived metadata
+     * obtained from the ODA runtime connection.
+     */
+    private void updateDesign( DataSetDesign dataSetDesign,
+                               IConnection conn, String queryText )
+        throws OdaException
+    {
+        IQuery query = conn.newQuery( null );
+        query.prepare( queryText );
+        
+        // TODO a runtime driver might require a query to first execute before
+        // its metadata is available
+//      query.setMaxRows( 1 );
+//      query.executeQuery();
+        
+        try
+        {
+            IResultSetMetaData md = query.getMetaData();
+            updateResultSetDesign( md, dataSetDesign );
+        }
+        catch( OdaException e )
+        {
+            // no result set definition available, reset previous derived metadata
+            dataSetDesign.setResultSets( null );
+            e.printStackTrace();
+        }
+        
+        // proceed to get parameter design definition
+        try
+        {
+            IParameterMetaData paramMd = query.getParameterMetaData();
+            updateParameterDesign( paramMd, dataSetDesign );
+        }
+        catch( OdaException ex )
+        {
+            // no parameter definition available, reset previous derived metadata
+            dataSetDesign.setParameters( null );
+            ex.printStackTrace();
+        }
+        
+        /*
+         * See DesignSessionUtil for more convenience methods
+         * to define a data set design instance.  
+         */     
+    }
+
+    /**
+     * Updates the specified data set design's result set definition based on the
+     * specified runtime metadata.
+     * @param md    runtime result set metadata instance
+     * @param dataSetDesign     data set design instance to update
+     * @throws OdaException
+     */
+	private void updateResultSetDesign( IResultSetMetaData md,
+            DataSetDesign dataSetDesign ) 
+        throws OdaException
+	{
+        ResultSetColumns columns = DesignSessionUtil.toResultSetColumnsDesign( md );
+
+        ResultSetDefinition resultSetDefn = DesignFactory.eINSTANCE
+                .createResultSetDefinition();
+        // resultSetDefn.setName( value );  // result set name
+        resultSetDefn.setResultSetColumns( columns );
+
+        // no exception in conversion; go ahead and assign to specified dataSetDesign
+        dataSetDesign.setPrimaryResultSet( resultSetDefn );
+        dataSetDesign.getResultSets().setDerivedMetaData( true );
+	}
+
+    /**
+     * Updates the specified data set design's parameter definition based on the
+     * specified runtime metadata.
+     * @param paramMd   runtime parameter metadata instance
+     * @param dataSetDesign     data set design instance to update
+     * @throws OdaException
+     */
+    private void updateParameterDesign( IParameterMetaData paramMd,
+            DataSetDesign dataSetDesign ) 
+        throws OdaException
+    {
+        DataSetParameters paramDesign = 
+            DesignSessionUtil.toDataSetParametersDesign( paramMd, 
+                    DesignSessionUtil.toParameterModeDesign( IParameterMetaData.parameterModeIn ) );
+        
+        // no exception in conversion; go ahead and assign to specified dataSetDesign
+        dataSetDesign.setParameters( paramDesign );        
+        if( paramDesign == null )
+            return;     // no parameter definitions; done with update
+        
+        paramDesign.setDerivedMetaData( true );
+
+        // TODO replace below with data source specific implementation;
+        // hard-coded parameter's default value for demo purpose
+        if( paramDesign.getParameterDefinitions().size() > 0 )
+        {
+            ParameterDefinition paramDef = 
+                (ParameterDefinition) paramDesign.getParameterDefinitions().get( 0 );
+            if( paramDef != null )
+                paramDef.setDefaultScalarValue( "dummy default value" );
+        }
+    }
+
+    /**
+     * Attempts to close given ODA connection.
+     */
+    private void closeConnection( IConnection conn )
+    {
+        try
+        {
+            if( conn != null && conn.isOpen() )
+                conn.close();
+        }
+        catch ( OdaException e )
+        {
+            // ignore
+            e.printStackTrace();
+        }
+    }
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/ui/impl/ProfilePropertyProvider.java b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/ui/impl/ProfilePropertyProvider.java
new file mode 100644
index 0000000..54b23bc
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/ui/impl/ProfilePropertyProvider.java
@@ -0,0 +1,46 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.ui.impl;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.consumer.services.IPropertyProvider;
+
+/**
+ *  Sample template implementation of IPropertyProvider that gets called
+ *  when a data source design is exported to an external connection profile.
+ */
+public class ProfilePropertyProvider implements IPropertyProvider
+{
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.consumer.services.IPropertyProvider#getDataSourceProperties(java.util.Properties, java.lang.Object)
+     */
+    public Properties getDataSourceProperties( Properties candidateProperties, Object appContext ) 
+        throws OdaException
+    {
+        // exporting data source properties to be saved in an external db profile
+        
+        // makes a copy of the specified properties
+        Properties profileProps = new Properties();
+        profileProps.putAll( candidateProperties );
+        
+        // TODO - adjust the profile properties returned to be saved in an external connection profile
+        
+        return profileProps;
+    }
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/.classpath b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/.gitignore b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/.gitignore
new file mode 100644
index 0000000..6ec8be4
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/.gitignore
@@ -0,0 +1,4 @@
+bin
+download
+*.jar
+*.zip
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/.project b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/.project
new file mode 100644
index 0000000..dcd43da
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/META-INF/MANIFEST.MF b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..df029a0
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %plugin.name
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample; singleton:=true
+Bundle-Version: 1.0.1
+Bundle-ClassPath: .,
+ src
+Bundle-Activator: org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.Activator
+Bundle-Vendor: Eclipse.org
+Bundle-Localization: plugin
+Export-Package: org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample,
+ org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.impl
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.datatools.connectivity.oda;bundle-version="[3.2.2,4.0.0)",
+ org.eclipse.datatools.connectivity.oda.profile;bundle-version="[3.0.7,4.0.0)"
+Eclipse-LazyStart: true
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/about.html b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/about.html
new file mode 100644
index 0000000..129db9d
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/build.properties b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/build.properties
new file mode 100644
index 0000000..6e16e40
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/build.properties
@@ -0,0 +1,8 @@
+source.. = src/
+output.. = bin/
+bin.includes = plugin.xml,\
+               META-INF/,\
+               .,\
+               plugin.properties,\
+               about.html
+src.includes = about.html
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/plugin.properties b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/plugin.properties
new file mode 100644
index 0000000..0a7453c
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/plugin.properties
@@ -0,0 +1,24 @@
+###############################################################################
+# Copyright (c) 2008 Actuate Corporation.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#  Actuate Corporation - initial API and implementation
+#
+###############################################################################
+# Plug-in Configuration
+#
+oda.data.source.id=org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample
+parent.category.id=org.eclipse.datatools.connectivity.db.category
+#
+###############################################################################
+# NLS String
+###############################################################################
+#
+plugin.name=ODA Databases Profile Sample Wrapper Data Source Runtime Driver
+data.source.name=ODA Databases Profile Sample Wrapper Data Source
+data.set.name=ODA Databases Profile Sample Wrapper Data Set
+connection.profile.name=ODA Databases Profile Sample Wrapper Data Source Connection Profile
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/plugin.xml b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/plugin.xml
new file mode 100644
index 0000000..1971252
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/plugin.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+
+   <extension
+         id="%oda.data.source.id"
+         point="org.eclipse.datatools.connectivity.oda.dataSource">
+      <dataSource
+            defaultDisplayName="%data.source.name"
+            driverClass="org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.impl.Driver"
+            id="%oda.data.source.id"
+            odaVersion="3.1"
+            overrideExplorerFiltering="true"
+            setThreadContextClassLoader="false">
+         <properties></properties>
+         <relationship
+               relatedId="%parent.category.id"
+               type="wrapperOf">
+         </relationship>
+      </dataSource>
+      <dataSet
+            defaultDisplayName="%data.set.name"
+            id="org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.dataSet">
+         <dataTypeMapping
+               nativeDataTypeCode="1"
+               odaScalarDataType="String"
+               nativeDataType="String">
+         </dataTypeMapping>
+         <dataTypeMapping
+               nativeDataTypeCode="4"
+               odaScalarDataType="Integer"
+               nativeDataType="Integer">
+         </dataTypeMapping>
+         <dataTypeMapping
+               nativeDataTypeCode="8"
+               odaScalarDataType="Double"
+               nativeDataType="Double">
+         </dataTypeMapping>
+         <dataTypeMapping
+               nativeDataTypeCode="3"
+               odaScalarDataType="Decimal"
+               nativeDataType="BigDecimal">
+         </dataTypeMapping>
+         <dataTypeMapping
+               nativeDataTypeCode="91"
+               odaScalarDataType="Date"
+               nativeDataType="Date">
+         </dataTypeMapping>
+         <dataTypeMapping
+               nativeDataTypeCode="92"
+               odaScalarDataType="Time"
+               nativeDataType="Time">
+         </dataTypeMapping>
+         <dataTypeMapping
+               nativeDataTypeCode="93"
+               odaScalarDataType="Timestamp"
+               nativeDataType="Timestamp">
+         </dataTypeMapping>
+         <dataTypeMapping
+               nativeDataTypeCode="16"
+               odaScalarDataType="Boolean"
+               nativeDataType="Boolean">
+         </dataTypeMapping>
+      </dataSet>
+   </extension>
+   <extension
+         point="org.eclipse.datatools.connectivity.connectionProfile">
+      <category
+            id="%oda.data.source.id"
+            name="%data.source.name"
+            parentCategory="%parent.category.id">
+      </category>
+      <connectionProfile
+            pingFactory="org.eclipse.datatools.connectivity.oda.profile.OdaConnectionFactory"
+            name="%connection.profile.name"
+            category="%oda.data.source.id"
+            id="%oda.data.source.id">
+      </connectionProfile>
+      <connectionFactory
+            name="ODA Connection Factory"
+            profile="%oda.data.source.id"
+            class="org.eclipse.datatools.connectivity.oda.profile.OdaConnectionFactory"
+            id="org.eclipse.datatools.connectivity.oda.IConnection">
+      </connectionFactory>
+   </extension>
+
+</plugin>
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/Activator.java b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/Activator.java
new file mode 100644
index 0000000..b2c4ae0
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/Activator.java
@@ -0,0 +1,70 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample;
+
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends Plugin 
+{
+    // The shared instance
+    private static Activator sm_plugin;
+    
+    /**
+     * The constructor
+     */
+    public Activator() 
+    {
+        super();
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext)
+     */
+    public void start( BundleContext context ) throws Exception 
+    {
+        super.start( context );
+        sm_plugin = this;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
+     */
+    public void stop( BundleContext context ) throws Exception 
+    {
+        sm_plugin = null;
+        super.stop( context );
+    }
+
+    /**
+     * Returns the shared instance.
+     * @return the shared instance
+     */
+    public static Activator getDefault() 
+    {
+        return sm_plugin;
+    }
+    
+    public static String getBundleId()
+    {
+        return getDefault().getBundle().getSymbolicName();
+    }
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/impl/Connection.java b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/impl/Connection.java
new file mode 100644
index 0000000..76d678c
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/impl/Connection.java
@@ -0,0 +1,119 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2008, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.impl;
+
+import java.util.Properties;
+import org.eclipse.datatools.connectivity.oda.IConnection;
+import org.eclipse.datatools.connectivity.oda.IDataSetMetaData;
+import org.eclipse.datatools.connectivity.oda.IQuery;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+import com.ibm.icu.util.ULocale;
+
+/**
+ * Implementation class of IConnection for an ODA runtime driver.
+ */
+public class Connection implements IConnection
+{
+    private boolean m_isOpen = false;
+    
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IConnection#open(java.util.Properties)
+	 */
+	public void open( Properties connProperties ) throws OdaException
+	{
+        // TODO replace with data source specific implementation
+	    m_isOpen = true;        
+ 	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IConnection#setAppContext(java.lang.Object)
+	 */
+	public void setAppContext( Object context ) throws OdaException
+	{
+	    // do nothing; assumes no support for pass-through context
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IConnection#close()
+	 */
+	public void close() throws OdaException
+	{
+        // TODO replace with data source specific implementation
+	    m_isOpen = false;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IConnection#isOpen()
+	 */
+	public boolean isOpen() throws OdaException
+	{
+        // TODO Auto-generated method stub
+		return m_isOpen;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IConnection#getMetaData(java.lang.String)
+	 */
+	public IDataSetMetaData getMetaData( String dataSetType ) throws OdaException
+	{
+	    // assumes that this driver supports only one type of data set,
+        // ignores the specified dataSetType
+		return new DataSetMetaData( this );
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IConnection#newQuery(java.lang.String)
+	 */
+	public IQuery newQuery( String dataSetType ) throws OdaException
+	{
+        // assumes that this driver supports only one type of data set,
+        // ignores the specified dataSetType
+		return new Query();
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IConnection#getMaxQueries()
+	 */
+	public int getMaxQueries() throws OdaException
+	{
+		return 0;	// no limit
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IConnection#commit()
+	 */
+	public void commit() throws OdaException
+	{
+	    // do nothing; assumes no transaction support needed
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IConnection#rollback()
+	 */
+	public void rollback() throws OdaException
+	{
+        // do nothing; assumes no transaction support needed
+	}
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IConnection#setLocale(com.ibm.icu.util.ULocale)
+     */
+    public void setLocale( ULocale locale ) throws OdaException
+    {
+        // do nothing; assumes no locale support
+    }
+    
+}
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/impl/DataSetMetaData.java b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/impl/DataSetMetaData.java
new file mode 100644
index 0000000..fb9c7e0
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/impl/DataSetMetaData.java
@@ -0,0 +1,163 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.impl;
+
+import org.eclipse.datatools.connectivity.oda.IConnection;
+import org.eclipse.datatools.connectivity.oda.IDataSetMetaData;
+import org.eclipse.datatools.connectivity.oda.IResultSet;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+/**
+ * Implementation class of IDataSetMetaData for an ODA runtime driver.
+ * <br>
+ * For demo purpose, the auto-generated method stubs have
+ * hard-coded implementation that assume this custom ODA data set
+ * is capable of handling a query that returns a single result set and 
+ * accepts scalar input parameters by index.
+ * A custom ODA driver is expected to implement own data set specific
+ * behavior in its place. 
+ */
+public class DataSetMetaData implements IDataSetMetaData
+{
+	private IConnection m_connection;
+	
+	DataSetMetaData( IConnection connection )
+	{
+		m_connection = connection;
+	}
+	
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getConnection()
+	 */
+	public IConnection getConnection() throws OdaException
+	{
+        // TODO Auto-generated method stub
+		return m_connection;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getDataSourceObjects(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
+	 */
+	public IResultSet getDataSourceObjects( String catalog, String schema, String object, String version ) throws OdaException
+	{
+	    throw new UnsupportedOperationException();
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getDataSourceMajorVersion()
+	 */
+	public int getDataSourceMajorVersion() throws OdaException
+	{
+        // TODO Auto-generated method stub
+		return 1;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getDataSourceMinorVersion()
+	 */
+	public int getDataSourceMinorVersion() throws OdaException
+	{
+        // TODO Auto-generated method stub
+		return 0;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getDataSourceProductName()
+	 */
+	public String getDataSourceProductName() throws OdaException
+	{
+        // TODO Auto-generated method stub
+		return "ODA Sample Databases Profile Wrapper Data Source";
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getDataSourceProductVersion()
+	 */
+	public String getDataSourceProductVersion() throws OdaException
+	{
+		return Integer.toString( getDataSourceMajorVersion() ) + "." +   //$NON-NLS-1$
+			   Integer.toString( getDataSourceMinorVersion() );
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getSQLStateType()
+	 */
+	public int getSQLStateType() throws OdaException
+	{
+        // TODO Auto-generated method stub
+		return IDataSetMetaData.sqlStateSQL99;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#supportsMultipleResultSets()
+	 */
+	public boolean supportsMultipleResultSets() throws OdaException
+	{
+		return false;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#supportsMultipleOpenResults()
+	 */
+	public boolean supportsMultipleOpenResults() throws OdaException
+	{
+		return false;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#supportsNamedResultSets()
+	 */
+	public boolean supportsNamedResultSets() throws OdaException
+	{
+		return false;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#supportsNamedParameters()
+	 */
+	public boolean supportsNamedParameters() throws OdaException
+	{
+        // TODO Auto-generated method stub
+		return false;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#supportsInParameters()
+	 */
+	public boolean supportsInParameters() throws OdaException
+	{
+        // TODO Auto-generated method stub
+		return true;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#supportsOutParameters()
+	 */
+	public boolean supportsOutParameters() throws OdaException
+	{
+        // TODO Auto-generated method stub
+		return false;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getSortMode()
+	 */
+	public int getSortMode()
+	{
+        // TODO Auto-generated method stub
+		return IDataSetMetaData.sortModeNone;
+	}
+    
+}
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/impl/Driver.java b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/impl/Driver.java
new file mode 100644
index 0000000..3f30e11
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/impl/Driver.java
@@ -0,0 +1,95 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.impl;
+
+import org.eclipse.datatools.connectivity.oda.IConnection;
+import org.eclipse.datatools.connectivity.oda.IDriver;
+import org.eclipse.datatools.connectivity.oda.LogConfiguration;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.util.manifest.DataTypeMapping;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ExtensionManifest;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ManifestExplorer;
+
+/**
+ * Implementation class of IDriver for an ODA runtime driver.
+ */
+public class Driver implements IDriver
+{
+    static String ODA_DATA_SOURCE_ID = "org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample";  //$NON-NLS-1$
+    
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IDriver#getConnection(java.lang.String)
+	 */
+	public IConnection getConnection( String dataSourceType ) throws OdaException
+	{
+        // assumes that this driver supports only one type of data source,
+        // ignores the specified dataSourceType
+        return new Connection();
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IDriver#setLogConfiguration(org.eclipse.datatools.connectivity.oda.LogConfiguration)
+	 */
+	public void setLogConfiguration( LogConfiguration logConfig ) throws OdaException
+	{
+		// do nothing; assumes simple driver has no logging
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IDriver#getMaxConnections()
+	 */
+	public int getMaxConnections() throws OdaException
+	{
+		return 0;	// no limit
+	}
+	
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IDriver#setAppContext(java.lang.Object)
+	 */
+	public void setAppContext( Object context ) throws OdaException
+	{
+	    // do nothing; assumes no support for pass-through context
+	}
+
+    /**
+     * Returns the object that represents this extension's manifest.
+     * @throws OdaException
+     */
+    static ExtensionManifest getManifest()
+        throws OdaException
+    {
+        return ManifestExplorer.getInstance()
+                .getExtensionManifest( ODA_DATA_SOURCE_ID );
+    }
+    
+    /**
+     * Returns the native data type name of the specified code, as
+     * defined in this data source extension's manifest.
+     * @param nativeTypeCode    the native data type code
+     * @return                  corresponding native data type name
+     * @throws OdaException     if lookup fails
+     */
+    static String getNativeDataTypeName( int nativeDataTypeCode ) 
+        throws OdaException
+    {
+        DataTypeMapping typeMapping = 
+                            getManifest().getDataSetType( null )
+                                .getDataTypeMapping( nativeDataTypeCode );
+        if( typeMapping != null )
+            return typeMapping.getNativeType();
+        return "Non-defined"; 
+    }
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/impl/ParameterMetaData.java b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/impl/ParameterMetaData.java
new file mode 100644
index 0000000..815d52a
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/impl/ParameterMetaData.java
@@ -0,0 +1,108 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.impl;
+
+import org.eclipse.datatools.connectivity.oda.IParameterMetaData;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+/**
+ * Implementation class of IParameterMetaData for an ODA runtime driver.
+ * <br>
+ * For demo purpose, the auto-generated method stubs have
+ * hard-coded implementation that returns a pre-defined set
+ * of meta-data and query results.
+ * A custom ODA driver is expected to implement own data source specific
+ * behavior in its place. 
+ */
+public class ParameterMetaData implements IParameterMetaData 
+{
+
+	/* 
+	 * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getParameterCount()
+	 */
+	public int getParameterCount() throws OdaException 
+	{
+        // TODO replace with data source specific implementation
+
+        // hard-coded for demo purpose
+        return 1;
+	}
+
+    /*
+	 * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getParameterMode(int)
+	 */
+	public int getParameterMode( int param ) throws OdaException 
+	{
+        // TODO Auto-generated method stub
+		return IParameterMetaData.parameterModeIn;
+	}
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getParameterName(int)
+     */
+    public String getParameterName( int param ) throws OdaException
+    {
+        // TODO Auto-generated method stub
+        return null;    // name is not available
+    }
+
+	/* 
+	 * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getParameterType(int)
+	 */
+	public int getParameterType( int param ) throws OdaException 
+	{
+        // TODO replace with data source specific implementation
+
+        // hard-coded for demo purpose
+        return java.sql.Types.CHAR;   // as defined in data set extension manifest
+	}
+
+	/* 
+	 * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getParameterTypeName(int)
+	 */
+	public String getParameterTypeName( int param ) throws OdaException 
+	{
+        int nativeTypeCode = getParameterType( param );
+        return Driver.getNativeDataTypeName( nativeTypeCode );
+	}
+
+	/* 
+	 * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getPrecision(int)
+	 */
+	public int getPrecision( int param ) throws OdaException 
+	{
+        // TODO Auto-generated method stub
+		return -1;
+	}
+
+	/* 
+	 * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getScale(int)
+	 */
+	public int getScale( int param ) throws OdaException 
+	{
+        // TODO Auto-generated method stub
+		return -1;
+	}
+
+	/* 
+	 * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#isNullable(int)
+	 */
+	public int isNullable( int param ) throws OdaException 
+	{
+        // TODO Auto-generated method stub
+		return IParameterMetaData.parameterNullableUnknown;
+	}
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/impl/Query.java b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/impl/Query.java
new file mode 100644
index 0000000..f5c3ba5
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/impl/Query.java
@@ -0,0 +1,390 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2008, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.impl;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+import java.sql.Time;
+import java.sql.Timestamp;
+import org.eclipse.datatools.connectivity.oda.IParameterMetaData;
+import org.eclipse.datatools.connectivity.oda.IResultSet;
+import org.eclipse.datatools.connectivity.oda.IResultSetMetaData;
+import org.eclipse.datatools.connectivity.oda.IQuery;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.SortSpec;
+import org.eclipse.datatools.connectivity.oda.spec.QuerySpecification;
+
+/**
+ * Implementation class of IQuery for an ODA runtime driver.
+ * <br>
+ * For demo purpose, the auto-generated method stubs have
+ * hard-coded implementation that returns a pre-defined set
+ * of meta-data and query results.
+ * A custom ODA driver is expected to implement own data source specific
+ * behavior in its place. 
+ */
+public class Query implements IQuery
+{
+	private int m_maxRows;
+	private String m_preparedText;
+	
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#prepare(java.lang.String)
+	 */
+	public void prepare( String queryText ) throws OdaException
+	{
+        // TODO Auto-generated method stub
+	    m_preparedText = queryText;
+	}
+	
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setAppContext(java.lang.Object)
+	 */
+	public void setAppContext( Object context ) throws OdaException
+	{
+	    // do nothing; assumes no support for pass-through context
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#close()
+	 */
+	public void close() throws OdaException
+	{
+        // TODO Auto-generated method stub
+	    m_preparedText = null;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#getMetaData()
+	 */
+	public IResultSetMetaData getMetaData() throws OdaException
+	{
+        /* TODO Auto-generated method stub
+         * Replace with implementation to return an instance 
+         * based on this prepared query.
+         */
+		return new ResultSetMetaData();
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#executeQuery()
+	 */
+	public IResultSet executeQuery() throws OdaException
+	{
+        /* TODO Auto-generated method stub
+         * Replace with implementation to return an instance 
+         * based on this prepared query.
+         */
+		IResultSet resultSet = new ResultSet();
+		resultSet.setMaxRows( getMaxRows() );
+		return resultSet;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setProperty(java.lang.String, java.lang.String)
+	 */
+	public void setProperty( String name, String value ) throws OdaException
+	{
+		// do nothing; assumes no data set query property
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setMaxRows(int)
+	 */
+	public void setMaxRows( int max ) throws OdaException
+	{
+	    m_maxRows = max;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#getMaxRows()
+	 */
+	public int getMaxRows() throws OdaException
+	{
+		return m_maxRows;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#clearInParameters()
+	 */
+	public void clearInParameters() throws OdaException
+	{
+        // TODO Auto-generated method stub
+		// only applies to input parameter
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setInt(java.lang.String, int)
+	 */
+	public void setInt( String parameterName, int value ) throws OdaException
+	{
+        // TODO Auto-generated method stub
+		// only applies to named input parameter
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setInt(int, int)
+	 */
+	public void setInt( int parameterId, int value ) throws OdaException
+	{
+        // TODO Auto-generated method stub
+		// only applies to input parameter
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setDouble(java.lang.String, double)
+	 */
+	public void setDouble( String parameterName, double value ) throws OdaException
+	{
+        // TODO Auto-generated method stub
+		// only applies to named input parameter
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setDouble(int, double)
+	 */
+	public void setDouble( int parameterId, double value ) throws OdaException
+	{
+        // TODO Auto-generated method stub
+		// only applies to input parameter
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setBigDecimal(java.lang.String, java.math.BigDecimal)
+	 */
+	public void setBigDecimal( String parameterName, BigDecimal value ) throws OdaException
+	{
+        // TODO Auto-generated method stub
+		// only applies to named input parameter
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setBigDecimal(int, java.math.BigDecimal)
+	 */
+	public void setBigDecimal( int parameterId, BigDecimal value ) throws OdaException
+	{
+        // TODO Auto-generated method stub
+		// only applies to input parameter
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setString(java.lang.String, java.lang.String)
+	 */
+	public void setString( String parameterName, String value ) throws OdaException
+	{
+        // TODO Auto-generated method stub
+		// only applies to named input parameter
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setString(int, java.lang.String)
+	 */
+	public void setString( int parameterId, String value ) throws OdaException
+	{
+        // TODO Auto-generated method stub
+		// only applies to input parameter
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setDate(java.lang.String, java.sql.Date)
+	 */
+	public void setDate( String parameterName, Date value ) throws OdaException
+	{
+        // TODO Auto-generated method stub
+		// only applies to named input parameter
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setDate(int, java.sql.Date)
+	 */
+	public void setDate( int parameterId, Date value ) throws OdaException
+	{
+        // TODO Auto-generated method stub
+		// only applies to input parameter
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setTime(java.lang.String, java.sql.Time)
+	 */
+	public void setTime( String parameterName, Time value ) throws OdaException
+	{
+        // TODO Auto-generated method stub
+		// only applies to named input parameter
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setTime(int, java.sql.Time)
+	 */
+	public void setTime( int parameterId, Time value ) throws OdaException
+	{
+        // TODO Auto-generated method stub
+		// only applies to input parameter
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setTimestamp(java.lang.String, java.sql.Timestamp)
+	 */
+	public void setTimestamp( String parameterName, Timestamp value ) throws OdaException
+	{
+        // TODO Auto-generated method stub
+		// only applies to named input parameter
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setTimestamp(int, java.sql.Timestamp)
+	 */
+	public void setTimestamp( int parameterId, Timestamp value ) throws OdaException
+	{
+        // TODO Auto-generated method stub
+		// only applies to input parameter
+	}
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setBoolean(java.lang.String, boolean)
+     */
+    public void setBoolean( String parameterName, boolean value )
+            throws OdaException
+    {
+        // TODO Auto-generated method stub
+        // only applies to named input parameter
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setBoolean(int, boolean)
+     */
+    public void setBoolean( int parameterId, boolean value )
+            throws OdaException
+    {
+        // TODO Auto-generated method stub       
+        // only applies to input parameter
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setObject(java.lang.String, java.lang.Object)
+     */
+    public void setObject( String parameterName, Object value )
+            throws OdaException
+    {
+        // TODO Auto-generated method stub
+        // only applies to named input parameter
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setObject(int, java.lang.Object)
+     */
+    public void setObject( int parameterId, Object value ) throws OdaException
+    {
+        // TODO Auto-generated method stub
+        // only applies to input parameter
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setNull(java.lang.String)
+     */
+    public void setNull( String parameterName ) throws OdaException
+    {
+        // TODO Auto-generated method stub
+        // only applies to named input parameter
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setNull(int)
+     */
+    public void setNull( int parameterId ) throws OdaException
+    {
+        // TODO Auto-generated method stub
+        // only applies to input parameter
+    }
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#findInParameter(java.lang.String)
+	 */
+	public int findInParameter( String parameterName ) throws OdaException
+	{
+        // TODO Auto-generated method stub
+		// only applies to named input parameter
+		return 0;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#getParameterMetaData()
+	 */
+	public IParameterMetaData getParameterMetaData() throws OdaException
+	{
+        /* TODO Auto-generated method stub
+         * Replace with implementation to return an instance 
+         * based on this prepared query.
+         */
+		return new ParameterMetaData();
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setSortSpec(org.eclipse.datatools.connectivity.oda.SortSpec)
+	 */
+	public void setSortSpec( SortSpec sortBy ) throws OdaException
+	{
+		// only applies to sorting, assumes not supported
+        throw new UnsupportedOperationException();
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#getSortSpec()
+	 */
+	public SortSpec getSortSpec() throws OdaException
+	{
+		// only applies to sorting
+		return null;
+	}
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setSpecification(org.eclipse.datatools.connectivity.oda.spec.QuerySpecification)
+     */
+    @SuppressWarnings("restriction")
+    public void setSpecification( QuerySpecification querySpec )
+            throws OdaException, UnsupportedOperationException
+    {
+        // assumes no support
+        throw new UnsupportedOperationException();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#getSpecification()
+     */
+    @SuppressWarnings("restriction")
+    public QuerySpecification getSpecification()
+    {
+        // assumes no support
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#getEffectiveQueryText()
+     */
+    public String getEffectiveQueryText()
+    {
+        // TODO Auto-generated method stub
+        return m_preparedText;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#cancel()
+     */
+    public void cancel() throws OdaException, UnsupportedOperationException
+    {
+        // assumes unable to cancel while executing a query
+        throw new UnsupportedOperationException();
+    }
+    
+}
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/impl/ResultSet.java b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/impl/ResultSet.java
new file mode 100644
index 0000000..9ce9702
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/impl/ResultSet.java
@@ -0,0 +1,334 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2008, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.impl;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+import java.sql.Time;
+import java.sql.Timestamp;
+
+import org.eclipse.datatools.connectivity.oda.IBlob;
+import org.eclipse.datatools.connectivity.oda.IClob;
+import org.eclipse.datatools.connectivity.oda.IResultSet;
+import org.eclipse.datatools.connectivity.oda.IResultSetMetaData;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+/**
+ * Implementation class of IResultSet for an ODA runtime driver.
+ * <br>
+ * For demo purpose, the auto-generated method stubs have
+ * hard-coded implementation that returns a pre-defined set
+ * of meta-data and query results.
+ * A custom ODA driver is expected to implement own data source specific
+ * behavior in its place. 
+ */
+public class ResultSet implements IResultSet
+{
+	private int m_maxRows;
+    private int m_currentRowId;
+	
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getMetaData()
+	 */
+	public IResultSetMetaData getMetaData() throws OdaException
+	{
+        /* TODO Auto-generated method stub
+         * Replace with implementation to return an instance 
+         * based on this result set.
+         */
+		return new ResultSetMetaData();
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#setMaxRows(int)
+	 */
+	public void setMaxRows( int max ) throws OdaException
+	{
+		m_maxRows = max;
+	}
+	
+	/**
+	 * Returns the maximum number of rows that can be fetched from this result set.
+	 * @return the maximum number of rows to fetch.
+	 */
+	protected int getMaxRows()
+	{
+		return m_maxRows;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#next()
+	 */
+	public boolean next() throws OdaException
+	{
+		// TODO replace with data source specific implementation
+        
+        // simple implementation done below for demo purpose only
+        int maxRows = getMaxRows();
+        if( maxRows <= 0 )  // no limit is specified
+            maxRows = 5;    // hard-coded for demo purpose
+        
+        if( m_currentRowId < maxRows )
+        {
+            m_currentRowId++;
+            return true;
+        }
+        
+        return false;        
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#close()
+	 */
+	public void close() throws OdaException
+	{
+        // TODO Auto-generated method stub       
+        m_currentRowId = 0;     // reset row counter
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getRow()
+	 */
+	public int getRow() throws OdaException
+	{
+		return m_currentRowId;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getString(int)
+	 */
+	public String getString( int index ) throws OdaException
+	{
+        // TODO replace with data source specific implementation
+        
+        // hard-coded for demo purpose
+        return "row" + getRow() + "_column" + index + " value";
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getString(java.lang.String)
+	 */
+	public String getString( String columnName ) throws OdaException
+	{
+	    return getString( findColumn( columnName ) );
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getInt(int)
+	 */
+	public int getInt( int index ) throws OdaException
+	{
+        // TODO replace with data source specific implementation
+        
+        // hard-coded for demo purpose
+        return getRow();
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getInt(java.lang.String)
+	 */
+	public int getInt( String columnName ) throws OdaException
+	{
+	    return getInt( findColumn( columnName ) );
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getDouble(int)
+	 */
+	public double getDouble( int index ) throws OdaException
+	{
+        // TODO Auto-generated method stub
+        throw new UnsupportedOperationException();
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getDouble(java.lang.String)
+	 */
+	public double getDouble( String columnName ) throws OdaException
+	{
+	    return getDouble( findColumn( columnName ) );
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getBigDecimal(int)
+	 */
+	public BigDecimal getBigDecimal( int index ) throws OdaException
+	{
+        // TODO Auto-generated method stub
+        throw new UnsupportedOperationException();
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getBigDecimal(java.lang.String)
+	 */
+	public BigDecimal getBigDecimal( String columnName ) throws OdaException
+	{
+	    return getBigDecimal( findColumn( columnName ) );
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getDate(int)
+	 */
+	public Date getDate( int index ) throws OdaException
+	{
+        // TODO Auto-generated method stub
+        throw new UnsupportedOperationException();
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getDate(java.lang.String)
+	 */
+	public Date getDate( String columnName ) throws OdaException
+	{
+	    return getDate( findColumn( columnName ) );
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getTime(int)
+	 */
+	public Time getTime( int index ) throws OdaException
+	{
+        // TODO Auto-generated method stub
+        throw new UnsupportedOperationException();
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getTime(java.lang.String)
+	 */
+	public Time getTime( String columnName ) throws OdaException
+	{
+	    return getTime( findColumn( columnName ) );
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getTimestamp(int)
+	 */
+	public Timestamp getTimestamp( int index ) throws OdaException
+	{
+        // TODO Auto-generated method stub
+        throw new UnsupportedOperationException();
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getTimestamp(java.lang.String)
+	 */
+	public Timestamp getTimestamp( String columnName ) throws OdaException
+	{
+	    return getTimestamp( findColumn( columnName ) );
+	}
+
+    /* 
+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getBlob(int)
+     */
+    public IBlob getBlob( int index ) throws OdaException
+    {
+        // TODO Auto-generated method stub
+        throw new UnsupportedOperationException();
+    }
+
+    /* 
+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getBlob(java.lang.String)
+     */
+    public IBlob getBlob( String columnName ) throws OdaException
+    {
+        return getBlob( findColumn( columnName ) );
+    }
+
+    /* 
+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getClob(int)
+     */
+    public IClob getClob( int index ) throws OdaException
+    {
+        // TODO Auto-generated method stub
+        throw new UnsupportedOperationException();
+    }
+
+    /* 
+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getClob(java.lang.String)
+     */
+    public IClob getClob( String columnName ) throws OdaException
+    {
+        return getClob( findColumn( columnName ) );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getBoolean(int)
+     */
+    public boolean getBoolean( int index ) throws OdaException
+    {
+        // TODO Auto-generated method stub
+        throw new UnsupportedOperationException();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getBoolean(java.lang.String)
+     */
+    public boolean getBoolean( String columnName ) throws OdaException
+    {
+        return getBoolean( findColumn( columnName ) );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getObject(int)
+     */
+    public Object getObject( int index ) throws OdaException
+    {
+        // TODO Auto-generated method stub
+        throw new UnsupportedOperationException();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getObject(java.lang.String)
+     */
+    public Object getObject( String columnName ) throws OdaException
+    {
+        return getObject( findColumn( columnName ) );
+    }
+
+    /*
+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#wasNull()
+     */
+    public boolean wasNull() throws OdaException
+    {
+        // TODO Auto-generated method stub
+        
+        // hard-coded for demo purpose
+        return false;
+    }
+
+    /*
+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#findColumn(java.lang.String)
+     */
+    public int findColumn( String columnName ) throws OdaException
+    {
+        // TODO replace with data source specific implementation
+        
+        // hard-coded for demo purpose
+        int columnId = 1;   // dummy column id
+        if( columnName == null || columnName.length() == 0 )
+            return columnId;
+        String lastChar = columnName.substring( columnName.length()-1, 1 );
+        try
+        {
+            columnId = Integer.parseInt( lastChar );
+        }
+        catch( NumberFormatException e )
+        {
+            // ignore, use dummy column id
+        }
+        return columnId;
+    }
+    
+}
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/impl/ResultSetMetaData.java b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/impl/ResultSetMetaData.java
new file mode 100644
index 0000000..06718c6
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/impl/ResultSetMetaData.java
@@ -0,0 +1,122 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample.impl;
+
+import org.eclipse.datatools.connectivity.oda.IResultSetMetaData;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+/**
+ * Implementation class of IResultSetMetaData for an ODA runtime driver.
+ * <br>
+ * For demo purpose, the auto-generated method stubs have
+ * hard-coded implementation that returns a pre-defined set
+ * of meta-data and query results.
+ * A custom ODA driver is expected to implement own data source specific
+ * behavior in its place. 
+ */
+public class ResultSetMetaData implements IResultSetMetaData
+{
+    
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getColumnCount()
+	 */
+	public int getColumnCount() throws OdaException
+	{
+        // TODO replace with data source specific implementation
+
+        // hard-coded for demo purpose
+        return 2;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getColumnName(int)
+	 */
+	public String getColumnName( int index ) throws OdaException
+	{
+        // TODO replace with data source specific implementation
+
+        // hard-coded for demo purpose
+        return "Column" + index;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getColumnLabel(int)
+	 */
+	public String getColumnLabel( int index ) throws OdaException
+	{
+		return getColumnName( index );		// default
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getColumnType(int)
+	 */
+	public int getColumnType( int index ) throws OdaException
+	{
+        // TODO replace with data source specific implementation
+
+        // hard-coded for demo purpose
+        if( index == 1 )
+            return java.sql.Types.INTEGER;   // as defined in data set extension manifest
+        return java.sql.Types.CHAR;          // as defined in data set extension manifest
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getColumnTypeName(int)
+	 */
+	public String getColumnTypeName( int index ) throws OdaException
+	{
+        int nativeTypeCode = getColumnType( index );
+        return Driver.getNativeDataTypeName( nativeTypeCode );
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getColumnDisplayLength(int)
+	 */
+	public int getColumnDisplayLength( int index ) throws OdaException
+	{
+        // TODO replace with data source specific implementation
+
+        // hard-coded for demo purpose
+		return 8;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getPrecision(int)
+	 */
+	public int getPrecision( int index ) throws OdaException
+	{
+        // TODO Auto-generated method stub
+		return -1;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getScale(int)
+	 */
+	public int getScale( int index ) throws OdaException
+	{
+        // TODO Auto-generated method stub
+		return -1;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#isNullable(int)
+	 */
+	public int isNullable( int index ) throws OdaException
+	{
+        // TODO Auto-generated method stub
+		return IResultSetMetaData.columnNullableUnknown;
+	}
+    
+}
diff --git a/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/impl/package.html b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/impl/package.html
new file mode 100644
index 0000000..0cbb5aa
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.oda.jdbc.dbprofile.sample/src/org/eclipse/datatools/connectivity/oda/jdbc/dbprofile/sample/impl/package.html
@@ -0,0 +1,37 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+
+This package provides an exemplary implementation of an ODA driver's runtime extensions
+that adopts the integrated ODA Database Connection Profile framework.
+See the extensions defined in the plugin.xml.
+It adopts the ODA framework to define an ODA data source type 
+that links to a DTP Database (JDBC) connection profile.
+<p>
+Its scope focus on supporting the design of an ODA data source connection.
+It uses the auto-generated runtime classes of an ODA driver, included for demo purpose only.
+<p>
+
+<!-- Put @see and @since tags down here. -->
+@since DTP 1.6
+
+</body>
+</html>
diff --git a/examples/org.eclipse.datatools.connectivity.repository.file/.classpath b/examples/org.eclipse.datatools.connectivity.repository.file/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.file/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/examples/org.eclipse.datatools.connectivity.repository.file/.gitignore b/examples/org.eclipse.datatools.connectivity.repository.file/.gitignore
new file mode 100644
index 0000000..fe99505
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.file/.gitignore
@@ -0,0 +1,2 @@
+bin
+
diff --git a/examples/org.eclipse.datatools.connectivity.repository.file/.project b/examples/org.eclipse.datatools.connectivity.repository.file/.project
new file mode 100644
index 0000000..894a21c
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.file/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.repository.file</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/examples/org.eclipse.datatools.connectivity.repository.file/.settings/org.eclipse.jdt.core.prefs b/examples/org.eclipse.datatools.connectivity.repository.file/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..73f4382
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.file/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Fri Apr 13 14:14:14 PDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.4
diff --git a/examples/org.eclipse.datatools.connectivity.repository.file/META-INF/MANIFEST.MF b/examples/org.eclipse.datatools.connectivity.repository.file/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..d45b98b
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.file/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Connection Profile File Based Repository Plug-in
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.repository.file;singleton:=true
+Bundle-Version: 1.0.0.200802261
+Bundle-Activator: org.eclipse.datatools.connectivity.repository.file.FileRepositoryPlugin
+Bundle-Vendor: Eclipse.org
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.ui;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.datatools.connectivity;bundle-version="[0.9.1,1.5.0)",
+ org.eclipse.datatools.connectivity.ui;bundle-version="[0.9.1,1.5.0)",
+ org.eclipse.datatools.help;bundle-version="[1.0.0,2.0.0)",
+ org.eclipse.help.base;bundle-version="[3.2.0,5.0.0)"
+Eclipse-LazyStart: true
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/examples/org.eclipse.datatools.connectivity.repository.file/build.properties b/examples/org.eclipse.datatools.connectivity.repository.file/build.properties
new file mode 100644
index 0000000..6c480f3
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.file/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               icons/
diff --git a/examples/org.eclipse.datatools.connectivity.repository.file/icons/local_file_repository.gif b/examples/org.eclipse.datatools.connectivity.repository.file/icons/local_file_repository.gif
new file mode 100644
index 0000000..309c5e9
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.file/icons/local_file_repository.gif
Binary files differ
diff --git a/examples/org.eclipse.datatools.connectivity.repository.file/plugin.xml b/examples/org.eclipse.datatools.connectivity.repository.file/plugin.xml
new file mode 100644
index 0000000..0d89970
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.file/plugin.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension
+         point="org.eclipse.datatools.connectivity.connectionProfile">
+      <connectionProfile
+            category="org.eclipse.datatools.connectivity.connectionProfileRepositoryCategory"
+            icon="icons/local_file_repository.GIF"
+            id="org.eclipse.datatools.connectivity.repository.file.connectionProfile"
+            name="File Based Connection Profile Repository"
+            pingFactory="org.eclipse.datatools.connectivity.repository.file.FileRepositoryConnectionFactory"
+            propertiesPersistenceHook="org.eclipse.datatools.connectivity.repository.file.PropertiesPersistenceHook"/>
+      <connectionFactory
+            class="org.eclipse.datatools.connectivity.repository.file.FileRepositoryConnectionFactory"
+            id="org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepository"
+            name="Connection Profile Repository Connection"
+            profile="org.eclipse.datatools.connectivity.repository.file.connectionProfile"/>
+      <newWizard
+            class="org.eclipse.datatools.connectivity.repository.file.NewFileRepositoryProfileWizard"
+            id="org.eclipse.datatools.connectivity.repository.file.newWizard1"
+            name="File Based Connection Profile Repository"
+            profile="org.eclipse.datatools.connectivity.repository.file.connectionProfile"/>
+   </extension>
+
+</plugin>
diff --git a/examples/org.eclipse.datatools.connectivity.repository.file/src/org/eclipse/datatools/connectivity/repository/file/FileBasedRepository.java b/examples/org.eclipse.datatools.connectivity.repository.file/src/org/eclipse/datatools/connectivity/repository/file/FileBasedRepository.java
new file mode 100644
index 0000000..f046cdb
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.file/src/org/eclipse/datatools/connectivity/repository/file/FileBasedRepository.java
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * Copyright (c) 2006-2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.repository.file;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileMgmt;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+import org.eclipse.datatools.connectivity.internal.repository.ConnectionProfileRepositoryBase;
+
+public class FileBasedRepository extends ConnectionProfileRepositoryBase {
+
+	public FileBasedRepository(IConnectionProfile profile) {
+		super(profile);
+	}
+
+	protected Collection loadProfiles() throws CoreException {
+		File repoFile = getRepositoryFile();
+		if (!repoFile.exists()) {
+			try {
+				ConnectionProfileMgmt.saveCPs(new IConnectionProfile[0],repoFile,null);
+			}
+			catch (CoreException e) {
+				// we can eat this since we'll be flagged as read-only
+			}
+			return new ArrayList();
+		}
+		return Arrays.asList(ConnectionProfileMgmt.loadCPs(repoFile));
+	}
+
+	public void save() {
+		try {
+			if (getRepositoryFile().canWrite())
+				ConnectionProfileMgmt.saveCPs(getProfiles(),getRepositoryFile(),null);
+		}
+		catch (CoreException e) {
+			ConnectivityPlugin.getDefault().log(e.getStatus());
+		}
+	}
+
+	public boolean isReadOnly() {
+		return !getRepositoryFile().canWrite();
+	}
+
+	public boolean supportsProfileType(String providerID) {
+		// we support 'em all
+		return true;
+	}
+
+	public boolean supportsCategory(String id) {
+		// we support 'em all
+		return true;
+	}
+
+	public File getRepositoryFile() {
+		String fileName = getRepositoryProfile().getBaseProperties()
+				.getProperty(FileRepositoryPlugin.FILE_NAME_PROP_ID);
+		return new File(fileName);
+	}
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.repository.file/src/org/eclipse/datatools/connectivity/repository/file/FileRepositoryConnection.java b/examples/org.eclipse.datatools.connectivity.repository.file/src/org/eclipse/datatools/connectivity/repository/file/FileRepositoryConnection.java
new file mode 100644
index 0000000..d16736f
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.file/src/org/eclipse/datatools/connectivity/repository/file/FileRepositoryConnection.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.repository.file;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+
+public class FileRepositoryConnection implements IConnection {
+
+	private FileBasedRepository mRepository;
+	private CoreException mConnectException;
+
+	public FileRepositoryConnection(IConnectionProfile profile) {
+		mRepository = new FileBasedRepository(profile);
+		try {
+			mRepository.load();
+		}
+		catch (CoreException e) {
+			mConnectException = e;
+		}
+	}
+
+	public void close() {
+		mRepository.dispose();
+	}
+
+	public Throwable getConnectException() {
+		return mConnectException;
+	}
+
+	public IConnectionProfile getConnectionProfile() {
+		return mRepository.getRepositoryProfile();
+	}
+
+	public Object getRawConnection() {
+		return mRepository;
+	}
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.repository.file/src/org/eclipse/datatools/connectivity/repository/file/FileRepositoryConnectionFactory.java b/examples/org.eclipse.datatools.connectivity.repository.file/src/org/eclipse/datatools/connectivity/repository/file/FileRepositoryConnectionFactory.java
new file mode 100644
index 0000000..6ae8bbc
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.file/src/org/eclipse/datatools/connectivity/repository/file/FileRepositoryConnectionFactory.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    rcernich - initial API and implementation
+ *******************************************************************************/ 
+package org.eclipse.datatools.connectivity.repository.file;
+
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionFactory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+
+
+public class FileRepositoryConnectionFactory implements IConnectionFactory {
+
+	public IConnection createConnection(IConnectionProfile profile) {
+		return createConnection(profile,null,null);
+	}
+
+	public IConnection createConnection(IConnectionProfile profile, String uid,
+			String pwd) {
+		return new FileRepositoryConnection(profile);
+	}
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.repository.file/src/org/eclipse/datatools/connectivity/repository/file/FileRepositoryDetailsWizardPage.java b/examples/org.eclipse.datatools.connectivity.repository.file/src/org/eclipse/datatools/connectivity/repository/file/FileRepositoryDetailsWizardPage.java
new file mode 100644
index 0000000..0ea71aa
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.file/src/org/eclipse/datatools/connectivity/repository/file/FileRepositoryDetailsWizardPage.java
@@ -0,0 +1,161 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ * 			IBM Corporation - defect fix #213266
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.repository.file;
+
+import org.eclipse.datatools.connectivity.ui.wizards.ConnectionProfileDetailsPage;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+public class FileRepositoryDetailsWizardPage extends
+		ConnectionProfileDetailsPage {
+
+	private Text mPathText;
+//	private Button mEncryptCheckbox;
+//	private Text mPassword1Text;
+//	private Text mPassword2Text;
+
+	public FileRepositoryDetailsWizardPage(String name) {
+		super(name);
+		setTitle("File Repository Details");
+		setDescription("Please specify a file location and password, if desired.");
+	}
+
+	public String getFileName() {
+		return mPathText.getText();
+	}
+
+	public boolean getEncrypt() {
+//		return mEncryptCheckbox.getSelection();
+		return false;
+	}
+
+	public String getPassword() {
+//		return mPassword1Text.getText();
+		return new String();
+	}
+
+	public void createCustomControl(Composite parent) {
+		Composite content = new Composite(parent, SWT.NULL);
+		GridLayout layout = new GridLayout(3, false);
+		content.setLayout(layout);
+
+		Label label = new Label(content, SWT.NULL);
+		label.setLayoutData(new GridData());
+		label.setText("Directory Path:");
+
+		mPathText = new Text(content, SWT.BORDER);
+		mPathText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		mPathText.addModifyListener(new ModifyListener() {
+
+			public void modifyText(ModifyEvent e) {
+				handlePathModify();
+			}
+		});
+
+		Button button = new Button(content, SWT.PUSH);
+		button.setText("Browse...");
+		button.setLayoutData(new GridData());
+		button.addSelectionListener(new SelectionAdapter() {
+
+			public void widgetSelected(SelectionEvent e) {
+				handleBrowse();
+			}
+		});
+
+//		mEncryptCheckbox = new Button(content, SWT.CHECK);
+//		button.setText("Encrypt");
+//		button.setLayoutData(new GridData());
+//		button.addSelectionListener(new SelectionAdapter() {
+//
+//			public void widgetSelected(SelectionEvent e) {
+//				handleEncryptChecked();
+//			}
+//		});
+	}
+
+	private void handleBrowse() {
+		FileDialog dialog = new FileDialog(getShell());
+		String path = dialog.open();
+		if (path != null) {
+			mPathText.setText(path);
+		}
+	}
+
+	private void handlePathModify() {
+		validate();
+	}
+
+//	private void handleEncryptChecked() {
+//		mPassword1Text.setEnabled(mEncryptCheckbox.getSelection());
+//		mPassword2Text.setEnabled(mEncryptCheckbox.getSelection());
+//		validate();
+//	}
+
+	private void validate() {
+		String errorMessage;
+		String path = mPathText.getText();
+		if (path == null) {
+			errorMessage = "Please specify repository location.";
+		}
+//		else if (mEncryptCheckbox.getSelection()) {
+//			if (mPassword1Text.getText().length() == 0
+//					&& mPassword2Text.getText().length() == 0) {
+//				errorMessage = "Please specify a password";
+//			}
+//			else if (mPassword1Text.getText().equals(mPassword2Text.getText())) {
+//				errorMessage = null;
+//			}
+//			else {
+//				errorMessage = "Please verify password";
+//			}
+//		}
+		else {
+			errorMessage = null;
+		}
+		setErrorMessage(errorMessage);
+		setPageComplete(errorMessage == null);
+	}
+
+	private ContextProviderDelegate contextProviderDelegate =
+		new ContextProviderDelegate(FileRepositoryPlugin.getDefault().getBundle().getSymbolicName());
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+
+	public void createControl(Composite parent) {
+		super.createControl(parent);
+		getShell().setData( HelpUtil.CONTEXT_PROVIDER_KEY, this);
+		HelpUtil.setHelp( getControl(), HelpUtil.getContextId(IHelpContextsRepositoryFile.FILE_REPOSITORY_PROFILE_WIZARD_PAGE, FileRepositoryPlugin.getDefault().getBundle().getSymbolicName()));
+	}
+}
diff --git a/examples/org.eclipse.datatools.connectivity.repository.file/src/org/eclipse/datatools/connectivity/repository/file/FileRepositoryPlugin.java b/examples/org.eclipse.datatools.connectivity.repository.file/src/org/eclipse/datatools/connectivity/repository/file/FileRepositoryPlugin.java
new file mode 100644
index 0000000..d6ef992
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.file/src/org/eclipse/datatools/connectivity/repository/file/FileRepositoryPlugin.java
@@ -0,0 +1,53 @@
+package org.eclipse.datatools.connectivity.repository.file;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class FileRepositoryPlugin extends AbstractUIPlugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.datatools.connectivity.repository.file";
+	public static final String FILE_NAME_PROP_ID = PLUGIN_ID + ".fileName";
+	public static final String ENCRYPT_PROP_ID = PLUGIN_ID + ".encrypt";
+	public static final String PASSWORD_PROP_ID = PLUGIN_ID + ".password";
+
+	// The shared instance
+	private static FileRepositoryPlugin plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public FileRepositoryPlugin() {
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static FileRepositoryPlugin getDefault() {
+		return plugin;
+	}
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.repository.file/src/org/eclipse/datatools/connectivity/repository/file/IHelpContextsRepositoryFile.java b/examples/org.eclipse.datatools.connectivity.repository.file/src/org/eclipse/datatools/connectivity/repository/file/IHelpContextsRepositoryFile.java
new file mode 100644
index 0000000..a128a62
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.file/src/org/eclipse/datatools/connectivity/repository/file/IHelpContextsRepositoryFile.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.repository.file;
+
+public interface IHelpContextsRepositoryFile {
+
+	/**
+	 * TPS_helpKey_constants_for_plug-in: org.eclipse.datatools.connectivity.repository.file
+	 */
+
+	/*
+	 * FILE_REPOSITORY_PROFILE_WIZARD_PAGE = the wizard page that collects details for the
+	 * file repository profile
+	 */
+	public static final String FILE_REPOSITORY_PROFILE_WIZARD_PAGE = "FILE_REPOSITORY_PROFILE_WIZARD_PAGE";
+
+	/*
+	 * FILE_REPOSITORY_PROFILE_WIZARD = the actual New File Repository Profile wizard
+	 */
+	public static final String FILE_REPOSITORY_PROFILE_WIZARD = "FILE_REPOSITORY_PROFILE_WIZARD";
+}
diff --git a/examples/org.eclipse.datatools.connectivity.repository.file/src/org/eclipse/datatools/connectivity/repository/file/NewFileRepositoryProfileWizard.java b/examples/org.eclipse.datatools.connectivity.repository.file/src/org/eclipse/datatools/connectivity/repository/file/NewFileRepositoryProfileWizard.java
new file mode 100644
index 0000000..93430a5
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.file/src/org/eclipse/datatools/connectivity/repository/file/NewFileRepositoryProfileWizard.java
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.repository.file;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.ui.wizards.NewConnectionProfileWizard;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.swt.widgets.Composite;
+
+public class NewFileRepositoryProfileWizard extends NewConnectionProfileWizard
+		implements IWizard {
+
+	protected FileRepositoryDetailsWizardPage mPropPage;
+
+	public NewFileRepositoryProfileWizard() {
+		setWindowTitle("New Connection Profile File Repository");
+	}
+
+	public void addCustomPages() {
+		mPropPage = new FileRepositoryDetailsWizardPage("detailsPage"); //$NON-NLS-1$
+		addPage(mPropPage);
+	}
+
+	public Properties getProfileProperties() {
+		Properties props = new Properties();
+		props.setProperty(FileRepositoryPlugin.FILE_NAME_PROP_ID, mPropPage
+				.getFileName());
+		props.setProperty(FileRepositoryPlugin.ENCRYPT_PROP_ID, Boolean
+				.valueOf(mPropPage.getEncrypt()).toString());
+		if (mPropPage.getEncrypt()) {
+			props.setProperty(FileRepositoryPlugin.PASSWORD_PROP_ID, mPropPage
+					.getPassword());
+		}
+		return props;
+	}
+
+	private ContextProviderDelegate contextProviderDelegate =
+		new ContextProviderDelegate(FileRepositoryPlugin.getDefault().getBundle().getSymbolicName());
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+	public void createPageControls(Composite pageContainer) {
+		super.createPageControls(pageContainer);
+		getShell().setData(HelpUtil.CONTEXT_PROVIDER_KEY, this);
+		HelpUtil.setHelp(getShell(), HelpUtil.getContextId(
+				IHelpContextsRepositoryFile.FILE_REPOSITORY_PROFILE_WIZARD,
+				FileRepositoryPlugin.getDefault().getBundle().getSymbolicName()));
+	}
+}
diff --git a/examples/org.eclipse.datatools.connectivity.repository.file/src/org/eclipse/datatools/connectivity/repository/file/PropertiesPersistenceHook.java b/examples/org.eclipse.datatools.connectivity.repository.file/src/org/eclipse/datatools/connectivity/repository/file/PropertiesPersistenceHook.java
new file mode 100644
index 0000000..2cfa89d
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.file/src/org/eclipse/datatools/connectivity/repository/file/PropertiesPersistenceHook.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    rcernich - initial API and implementation
+ *******************************************************************************/ 
+package org.eclipse.datatools.connectivity.repository.file;
+
+import org.eclipse.datatools.connectivity.IPropertiesPersistenceHook;
+
+
+public class PropertiesPersistenceHook extends
+		org.eclipse.datatools.connectivity.PropertiesPersistenceHook implements
+		IPropertiesPersistenceHook {
+
+	public PropertiesPersistenceHook() {
+		// RJC Auto-generated constructor stub
+	}
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.repository.uri/.classpath b/examples/org.eclipse.datatools.connectivity.repository.uri/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.uri/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/examples/org.eclipse.datatools.connectivity.repository.uri/.gitignore b/examples/org.eclipse.datatools.connectivity.repository.uri/.gitignore
new file mode 100644
index 0000000..fe99505
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.uri/.gitignore
@@ -0,0 +1,2 @@
+bin
+
diff --git a/examples/org.eclipse.datatools.connectivity.repository.uri/.project b/examples/org.eclipse.datatools.connectivity.repository.uri/.project
new file mode 100644
index 0000000..280a940
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.uri/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.repository.uri</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/examples/org.eclipse.datatools.connectivity.repository.uri/.settings/org.eclipse.jdt.core.prefs b/examples/org.eclipse.datatools.connectivity.repository.uri/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..73f4382
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.uri/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Fri Apr 13 14:14:14 PDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.4
diff --git a/examples/org.eclipse.datatools.connectivity.repository.uri/META-INF/MANIFEST.MF b/examples/org.eclipse.datatools.connectivity.repository.uri/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..337939a
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.uri/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Connection Profile URI Based Repository Plug-in
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.repository.uri;singleton:=true
+Bundle-Version: 1.0.0.20081014
+Bundle-Activator: org.eclipse.datatools.connectivity.repository.uri.URIRepositoryPlugin
+Bundle-Vendor: Eclipse.org
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.ui;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.datatools.connectivity;bundle-version="[0.9.1,1.5.0)",
+ org.eclipse.datatools.connectivity.ui;bundle-version="[0.9.1,1.5.0)",
+ org.eclipse.datatools.help;bundle-version="[1.0.0,2.0.0)",
+ org.eclipse.help.base;bundle-version="[3.2.0,5.0.0)"
+Eclipse-LazyStart: true
diff --git a/examples/org.eclipse.datatools.connectivity.repository.uri/build.properties b/examples/org.eclipse.datatools.connectivity.repository.uri/build.properties
new file mode 100644
index 0000000..6c480f3
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.uri/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               icons/
diff --git a/examples/org.eclipse.datatools.connectivity.repository.uri/icons/local_file_repository.gif b/examples/org.eclipse.datatools.connectivity.repository.uri/icons/local_file_repository.gif
new file mode 100644
index 0000000..309c5e9
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.uri/icons/local_file_repository.gif
Binary files differ
diff --git a/examples/org.eclipse.datatools.connectivity.repository.uri/plugin.xml b/examples/org.eclipse.datatools.connectivity.repository.uri/plugin.xml
new file mode 100644
index 0000000..40d2b2a
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.uri/plugin.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension
+         point="org.eclipse.datatools.connectivity.connectionProfile">
+      <connectionProfile
+            category="org.eclipse.datatools.connectivity.connectionProfileRepositoryCategory"
+            icon="icons/local_file_repository.GIF"
+            id="org.eclipse.datatools.connectivity.repository.uri.connectionProfile"
+            name="URI Based Connection Profile Repository"
+            pingFactory="org.eclipse.datatools.connectivity.repository.uri.URIRepositoryConnectionFactory"
+            propertiesPersistenceHook="org.eclipse.datatools.connectivity.repository.uri.PropertiesPersistenceHook"/>
+      <connectionFactory
+            class="org.eclipse.datatools.connectivity.repository.uri.URIRepositoryConnectionFactory"
+            id="org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepository"
+            name="Connection Profile URI Repository Connection"
+            profile="org.eclipse.datatools.connectivity.repository.uri.connectionProfile"/>
+      <newWizard
+            class="org.eclipse.datatools.connectivity.repository.uri.NewURIRepositoryProfileWizard"
+            id="org.eclipse.datatools.connectivity.repository.uri.newWizard1"
+            name="URI Based Connection Profile Repository"
+            profile="org.eclipse.datatools.connectivity.repository.uri.connectionProfile"/>
+   </extension>
+
+</plugin>
diff --git a/examples/org.eclipse.datatools.connectivity.repository.uri/src/org/eclipse/datatools/connectivity/repository/uri/IHelpContextsRepositoryURI.java b/examples/org.eclipse.datatools.connectivity.repository.uri/src/org/eclipse/datatools/connectivity/repository/uri/IHelpContextsRepositoryURI.java
new file mode 100644
index 0000000..94912b8
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.uri/src/org/eclipse/datatools/connectivity/repository/uri/IHelpContextsRepositoryURI.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.repository.uri;
+
+public interface IHelpContextsRepositoryURI {
+
+	/**
+	 * TPS_helpKey_constants_for_plug-in: org.eclipse.datatools.connectivity.repository.uri
+	 */
+
+	/*
+	 * URI_REPOSITORY_PROFILE_WIZARD_PAGE = the wizard page that collects details for the
+	 * URI repository profile
+	 */
+	public static final String URI_REPOSITORY_PROFILE_WIZARD_PAGE = "URI_REPOSITORY_PROFILE_WIZARD_PAGE";
+
+	/*
+	 * URI_REPOSITORY_PROFILE_WIZARD = the actual New URI Repository Profile wizard
+	 */
+	public static final String URI_REPOSITORY_PROFILE_WIZARD = "URI_REPOSITORY_PROFILE_WIZARD";
+}
diff --git a/examples/org.eclipse.datatools.connectivity.repository.uri/src/org/eclipse/datatools/connectivity/repository/uri/NewURIRepositoryProfileWizard.java b/examples/org.eclipse.datatools.connectivity.repository.uri/src/org/eclipse/datatools/connectivity/repository/uri/NewURIRepositoryProfileWizard.java
new file mode 100644
index 0000000..a299aa1
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.uri/src/org/eclipse/datatools/connectivity/repository/uri/NewURIRepositoryProfileWizard.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.repository.uri;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.ui.wizards.NewConnectionProfileWizard;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.swt.widgets.Composite;
+
+public class NewURIRepositoryProfileWizard extends NewConnectionProfileWizard
+		implements IWizard {
+
+	protected URIRepositoryDetailsWizardPage mPropPage;
+
+	public NewURIRepositoryProfileWizard() {
+		setWindowTitle("New Connection Profile URI Repository");
+	}
+
+	public void addCustomPages() {
+		mPropPage = new URIRepositoryDetailsWizardPage("detailsPage"); //$NON-NLS-1$
+		addPage(mPropPage);
+	}
+
+	public Properties getProfileProperties() {
+		Properties props = new Properties();
+		props.setProperty(URIRepositoryPlugin.URI_PATH_PROP_ID, mPropPage
+				.getFileName());
+		return props;
+	}
+
+	private ContextProviderDelegate contextProviderDelegate =
+		new ContextProviderDelegate(URIRepositoryPlugin.getDefault().getBundle().getSymbolicName());
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+	public void createPageControls(Composite pageContainer) {
+		super.createPageControls(pageContainer);
+		getShell().setData(HelpUtil.CONTEXT_PROVIDER_KEY, this);
+		HelpUtil.setHelp(getShell(), HelpUtil.getContextId(
+				IHelpContextsRepositoryURI.URI_REPOSITORY_PROFILE_WIZARD,
+				URIRepositoryPlugin.getDefault().getBundle().getSymbolicName()));
+	}
+}
diff --git a/examples/org.eclipse.datatools.connectivity.repository.uri/src/org/eclipse/datatools/connectivity/repository/uri/PropertiesPersistenceHook.java b/examples/org.eclipse.datatools.connectivity.repository.uri/src/org/eclipse/datatools/connectivity/repository/uri/PropertiesPersistenceHook.java
new file mode 100644
index 0000000..e5b8c77
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.uri/src/org/eclipse/datatools/connectivity/repository/uri/PropertiesPersistenceHook.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    brianf - initial API and implementation
+ *******************************************************************************/ 
+package org.eclipse.datatools.connectivity.repository.uri;
+
+import org.eclipse.datatools.connectivity.IPropertiesPersistenceHook;
+
+
+public class PropertiesPersistenceHook extends
+		org.eclipse.datatools.connectivity.PropertiesPersistenceHook implements
+		IPropertiesPersistenceHook {
+
+	public PropertiesPersistenceHook() {
+		// RJC Auto-generated constructor stub
+	}
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.repository.uri/src/org/eclipse/datatools/connectivity/repository/uri/URIBasedRepository.java b/examples/org.eclipse.datatools.connectivity.repository.uri/src/org/eclipse/datatools/connectivity/repository/uri/URIBasedRepository.java
new file mode 100644
index 0000000..3178e49
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.uri/src/org/eclipse/datatools/connectivity/repository/uri/URIBasedRepository.java
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.repository.uri;
+
+import java.io.File;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileMgmt;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+import org.eclipse.datatools.connectivity.internal.repository.ConnectionProfileRepositoryBase;
+
+public class URIBasedRepository extends ConnectionProfileRepositoryBase {
+
+	public URIBasedRepository(IConnectionProfile profile) {
+		super(profile);
+	}
+
+	protected Collection loadProfiles() throws CoreException {
+		File repoFile = getRepositoryFile();
+		if (repoFile == null) {
+			// Houston, we have a problem here
+			return null;
+		}
+		if (!repoFile.exists()) {
+			try {
+				ConnectionProfileMgmt.saveCPs(new IConnectionProfile[0],repoFile,null);
+			}
+			catch (CoreException e) {
+				// we can eat this since we'll be flagged as read-only
+			}
+			return new ArrayList();
+		}
+		return Arrays.asList(ConnectionProfileMgmt.loadCPs(repoFile));
+	}
+
+	public void save() {
+		try {
+			if (getRepositoryFile().canWrite())
+				ConnectionProfileMgmt.saveCPs(getProfiles(),getRepositoryFile(),null);
+		}
+		catch (CoreException e) {
+			ConnectivityPlugin.getDefault().log(e.getStatus());
+		}
+	}
+
+	public boolean isReadOnly() {
+		return !getRepositoryFile().canWrite();
+	}
+
+	public boolean supportsProfileType(String providerID) {
+		// we support 'em all
+		return true;
+	}
+
+	public boolean supportsCategory(String id) {
+		// we support 'em all
+		return true;
+	}
+
+	public URI getRepositoryURI() throws URISyntaxException {
+		String URIString = getRepositoryProfile().getBaseProperties()
+				.getProperty(URIRepositoryPlugin.URI_PATH_PROP_ID);
+		return new URI(URIString);
+	}
+	
+	public File getRepositoryFile() {
+		try {
+			URI repoURI = getRepositoryURI();
+			File repoFile = new File ( repoURI);
+			return repoFile;
+		} catch (URISyntaxException e) {
+			// catch and throw the exception?
+			return null;
+		}
+	}
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.repository.uri/src/org/eclipse/datatools/connectivity/repository/uri/URIRepositoryConnection.java b/examples/org.eclipse.datatools.connectivity.repository.uri/src/org/eclipse/datatools/connectivity/repository/uri/URIRepositoryConnection.java
new file mode 100644
index 0000000..6476d89
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.uri/src/org/eclipse/datatools/connectivity/repository/uri/URIRepositoryConnection.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.repository.uri;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+
+public class URIRepositoryConnection implements IConnection {
+
+	private URIBasedRepository mRepository;
+	private CoreException mConnectException;
+
+	public URIRepositoryConnection(IConnectionProfile profile) {
+		mRepository = new URIBasedRepository(profile);
+		try {
+			mRepository.load();
+		}
+		catch (CoreException e) {
+			mConnectException = e;
+		}
+	}
+
+	public void close() {
+		mRepository.dispose();
+	}
+
+	public Throwable getConnectException() {
+		return mConnectException;
+	}
+
+	public IConnectionProfile getConnectionProfile() {
+		return mRepository.getRepositoryProfile();
+	}
+
+	public Object getRawConnection() {
+		return mRepository;
+	}
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.repository.uri/src/org/eclipse/datatools/connectivity/repository/uri/URIRepositoryConnectionFactory.java b/examples/org.eclipse.datatools.connectivity.repository.uri/src/org/eclipse/datatools/connectivity/repository/uri/URIRepositoryConnectionFactory.java
new file mode 100644
index 0000000..6503532
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.uri/src/org/eclipse/datatools/connectivity/repository/uri/URIRepositoryConnectionFactory.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    rcernich - initial API and implementation
+ *******************************************************************************/ 
+package org.eclipse.datatools.connectivity.repository.uri;
+
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionFactory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+
+
+public class URIRepositoryConnectionFactory implements IConnectionFactory {
+
+	public IConnection createConnection(IConnectionProfile profile) {
+		return createConnection(profile,null,null);
+	}
+
+	public IConnection createConnection(IConnectionProfile profile, String uid,
+			String pwd) {
+		return new URIRepositoryConnection(profile);
+	}
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.repository.uri/src/org/eclipse/datatools/connectivity/repository/uri/URIRepositoryDetailsWizardPage.java b/examples/org.eclipse.datatools.connectivity.repository.uri/src/org/eclipse/datatools/connectivity/repository/uri/URIRepositoryDetailsWizardPage.java
new file mode 100644
index 0000000..c0d609c
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.uri/src/org/eclipse/datatools/connectivity/repository/uri/URIRepositoryDetailsWizardPage.java
@@ -0,0 +1,120 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.repository.uri;
+
+import org.eclipse.datatools.connectivity.ui.wizards.ConnectionProfileDetailsPage;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+public class URIRepositoryDetailsWizardPage extends
+		ConnectionProfileDetailsPage {
+
+	private Text mPathText;
+
+	public URIRepositoryDetailsWizardPage(String name) {
+		super(name);
+		setTitle("URI Repository Details");
+		setDescription("Please specify a URI location.");
+	}
+
+	public String getFileName() {
+		return mPathText.getText();
+	}
+
+	public void createCustomControl(Composite parent) {
+		Composite content = new Composite(parent, SWT.NULL);
+		GridLayout layout = new GridLayout(3, false);
+		content.setLayout(layout);
+
+		Label label = new Label(content, SWT.NULL);
+		label.setLayoutData(new GridData());
+		label.setText("Directory Path:");
+
+		mPathText = new Text(content, SWT.BORDER);
+		mPathText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		mPathText.addModifyListener(new ModifyListener() {
+
+			public void modifyText(ModifyEvent e) {
+				handlePathModify();
+			}
+		});
+
+		Button button = new Button(content, SWT.PUSH);
+		button.setText("Browse...");
+		button.setLayoutData(new GridData());
+		button.addSelectionListener(new SelectionAdapter() {
+
+			public void widgetSelected(SelectionEvent e) {
+				handleBrowse();
+			}
+		});
+
+	}
+
+	private void handleBrowse() {
+		FileDialog dialog = new FileDialog(getShell());
+		String path = dialog.open();
+		if (path != null) {
+			mPathText.setText(path);
+		}
+	}
+
+	private void handlePathModify() {
+		validate();
+	}
+
+	private void validate() {
+		String errorMessage;
+		String path = mPathText.getText();
+		if (path == null) {
+			errorMessage = "Please specify repository location.";
+		}
+		else {
+			errorMessage = null;
+		}
+		setErrorMessage(errorMessage);
+		setPageComplete(errorMessage == null);
+	}
+
+	private ContextProviderDelegate contextProviderDelegate =
+		new ContextProviderDelegate(URIRepositoryPlugin.getDefault().getBundle().getSymbolicName());
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+
+	public void createControl(Composite parent) {
+		super.createControl(parent);
+		getShell().setData( HelpUtil.CONTEXT_PROVIDER_KEY, this);
+		HelpUtil.setHelp( getControl(), HelpUtil.getContextId(IHelpContextsRepositoryURI.URI_REPOSITORY_PROFILE_WIZARD_PAGE, URIRepositoryPlugin.getDefault().getBundle().getSymbolicName()));
+	}
+}
diff --git a/examples/org.eclipse.datatools.connectivity.repository.uri/src/org/eclipse/datatools/connectivity/repository/uri/URIRepositoryPlugin.java b/examples/org.eclipse.datatools.connectivity.repository.uri/src/org/eclipse/datatools/connectivity/repository/uri/URIRepositoryPlugin.java
new file mode 100644
index 0000000..1f81451
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.repository.uri/src/org/eclipse/datatools/connectivity/repository/uri/URIRepositoryPlugin.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.repository.uri;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class URIRepositoryPlugin extends AbstractUIPlugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.datatools.connectivity.repository.uri";
+	public static final String URI_PATH_PROP_ID = PLUGIN_ID + ".uriPath";
+
+	// The shared instance
+	private static URIRepositoryPlugin plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public URIRepositoryPlugin() {
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static URIRepositoryPlugin getDefault() {
+		return plugin;
+	}
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/.classpath b/examples/org.eclipse.datatools.connectivity.sample.cp/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/.gitignore b/examples/org.eclipse.datatools.connectivity.sample.cp/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/.project b/examples/org.eclipse.datatools.connectivity.sample.cp/.project
new file mode 100644
index 0000000..b78945f
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.sample.cp</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/.settings/org.eclipse.jdt.core.prefs b/examples/org.eclipse.datatools.connectivity.sample.cp/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..73f4382
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Fri Apr 13 14:14:14 PDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.4
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/META-INF/MANIFEST.MF b/examples/org.eclipse.datatools.connectivity.sample.cp/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..2ef89b0
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/META-INF/MANIFEST.MF
@@ -0,0 +1,22 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Plugin.Name
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.sample.cp; singleton:=true
+Bundle-Version: 1.0.1.200802261
+Bundle-Vendor: %Plugin.Provider.Name
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.ui;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.datatools.connectivity;bundle-version="[0.9.1,1.5.0)",
+ org.eclipse.datatools.connectivity.ui;bundle-version="[0.9.1,1.5.0)",
+ org.eclipse.ui.navigator;bundle-version="[3.3.0,4.0.0)",
+ org.eclipse.ui.views;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.datatools.connectivity.ui.dse;bundle-version="[0.9.1,1.5.0)"
+Eclipse-LazyStart: true
+Bundle-ClassPath: cpsample.jar
+Export-Package: org.eclipse.datatools.connectivity.sample.cp,
+ org.eclipse.datatools.connectivity.sample.cp.ui,
+ org.eclipse.datatools.connectivity.sample.cp.ui.actions,
+ org.eclipse.datatools.connectivity.sample.cp.ui.handler,
+ org.eclipse.datatools.connectivity.sample.cp.ui.properties,
+ org.eclipse.datatools.connectivity.sample.cp.ui.wizards
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/about.html b/examples/org.eclipse.datatools.connectivity.sample.cp/about.html
new file mode 100644
index 0000000..1b7d275
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/about.html
@@ -0,0 +1,28 @@
+<html>
+<head>
+<title>About This Content</title>
+</head>
+<body>
+<div>
+<h3>About This Content</h3>
+<p>May 2, 2006</p>
+<h3>License</h3>
+<p>The Eclipse Foundation makes available all content in this plug-in
+(&quot;Content&quot;). Unless otherwise indicated below, the Content is
+provided to you under the terms and conditions of the Eclipse Public License
+Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available at <a
+href="http://www.eclipse.org/org/documents/epl-v10.php">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation,
+the Content is being redistributed by another party (&quot;Redistributor&quot;)
+and different terms and conditions may apply to your use of any object code in
+the Content. Check the RedistributorÂ’s license that was provided with the
+Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source
+code in the Content and such source code may be obtained at <a
+href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+<p>&nbsp;</p>
+</div>
+</body>
+</html>
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/build.properties b/examples/org.eclipse.datatools.connectivity.sample.cp/build.properties
new file mode 100644
index 0000000..7dbd707
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/build.properties
@@ -0,0 +1,11 @@
+bin.includes = plugin.xml,\
+               icons/,\
+               about.html,\
+               plugin.properties,\
+               SybaseLogo2_black_sml.jpg,\
+               cpsample.jar,\
+               META-INF/
+
+jars.compile.order = cpsample.jar
+source.cpsample.jar = src/
+output.cpsample.jar = bin/
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/eclipse3_2_support_readme.txt b/examples/org.eclipse.datatools.connectivity.sample.cp/eclipse3_2_support_readme.txt
new file mode 100644
index 0000000..0702efd
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/eclipse3_2_support_readme.txt
@@ -0,0 +1,20 @@
+################################################################################
+# Copyright (c) 2007 Sybase, Inc.
+# 
+# All rights reserved. This program and the accompanying materials are made
+# available under the terms of the Eclipse Public License v1.0 which
+# accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors: Sybase, Inc. - initial API and implementation
+################################################################################
+
+To make this sample work in Eclipse 3.2.2, you will need to do the following:
+
+1) Change the Versions to Match for the Eclipse Platform dependencies in the
+	Manifest editor from 3.3 to 3.2
+
+2) Remove or comment out the sections of the plugin.xml headed with:
+ 	NOTE: This is supported in Eclipse 3.3 only
+ 	
+It should then compile and work in 3.2.
\ No newline at end of file
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/icons/file.gif b/examples/org.eclipse.datatools.connectivity.sample.cp/icons/file.gif
new file mode 100644
index 0000000..6b86d07
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/icons/file.gif
Binary files differ
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/icons/file2.gif b/examples/org.eclipse.datatools.connectivity.sample.cp/icons/file2.gif
new file mode 100644
index 0000000..485440f
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/icons/file2.gif
Binary files differ
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/plugin.properties b/examples/org.eclipse.datatools.connectivity.sample.cp/plugin.properties
new file mode 100644
index 0000000..500801b
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/plugin.properties
@@ -0,0 +1,22 @@
+################################################################################
+# Copyright (c) 2005 Sybase, Inc.
+# 
+# All rights reserved. This program and the accompanying materials are made
+# available under the terms of the Eclipse Public License v1.0 which
+# accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors: Sybase, Inc. - initial API and implementation
+################################################################################
+Plugin.Name = Connection Profile Sample Plug-in
+Plugin.Provider.Name = Eclipse.org
+
+Extension.PropertyPage.Name = File Server Example Properties
+Extension.ServerExtension.Name = Sample File Profile
+Extension.ServerExtension.Category.Name = Files (Example category)
+Extension.ServerExtension.ConnectionProfile.Name = File Server Example
+Extension.ServerExtension.ConfigurationType.Name = File Path (Example configuraiton type)
+Extension.ServerExtension.ConnectionFactory.Name = java.io.File Connection Factory
+Extension.NewWizard.Name = File Connection Profile (Example)
+Extension.NewWizard.Description = Create a sample file connection profile
+Extension.PopupAction.Name = Sample File Action
\ No newline at end of file
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/plugin.xml b/examples/org.eclipse.datatools.connectivity.sample.cp/plugin.xml
new file mode 100644
index 0000000..047ff88
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/plugin.xml
@@ -0,0 +1,244 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+
+   <extension
+         point="org.eclipse.ui.popupMenus">
+      <objectContribution
+            objectClass="java.io.File"
+            id="org.eclipse.datatools.connectivity.sample.connectionProfileSample.contribution1">
+         <action
+               label="%Extension.PopupAction.Name"
+               class="org.eclipse.datatools.connectivity.sample.cp.ui.actions.SampleFileAction"
+               menubarPath="additions"
+               enablesFor="1"
+               id="org.eclipse.datatools.connectivity.sample.connectionProfileSample.newAction">
+         </action>
+      </objectContribution>
+   </extension>
+   
+   <extension
+         point="org.eclipse.ui.propertyPages">
+      <page
+            class="org.eclipse.datatools.connectivity.sample.cp.ui.properties.FileProfilePropetyPage"
+            id="org.eclipse.datatools.connectivity.sample.ui.properties.fileProfilePropertyPage"
+            name="%Extension.PropertyPage.Name">
+         <filter
+               name="org.eclipse.datatools.profile.property.id"
+               value="org.eclipse.datatools.connectivity.sample.fileProfile">
+         </filter>
+         <enabledWhen>
+            <instanceof
+                  value="org.eclipse.datatools.connectivity.IConnectionProfile">
+            </instanceof>
+         </enabledWhen>
+      </page>
+   </extension>
+   
+   <extension
+         id="fileProfile"
+         name="%Extension.ServerExtension.Name"
+         point="org.eclipse.datatools.connectivity.connectionProfile">
+      <category
+            name="%Extension.ServerExtension.Category.Name"
+            id="org.eclipse.datatools.connectivity.sample.fileCategory">
+      </category>
+      <configurationType
+            name="%Extension.ServerExtension.ConfigurationType.Name"
+            id="org.eclipse.datatools.connectivity.sample.pathConfiguration">
+      </configurationType>
+      <connectionFactory
+            name="%Extension.ServerExtension.ConnectionFactory.Name"
+            profile="org.eclipse.datatools.connectivity.sample.fileProfile"
+            class="org.eclipse.datatools.connectivity.sample.cp.FileConnectionFactory"
+            id="java.io.File">
+      </connectionFactory>
+      <connectionProfile
+            category="org.eclipse.datatools.connectivity.sample.fileCategory"
+            configurationType="org.eclipse.datatools.connectivity.sample.pathConfiguration"
+            icon="icons/file.gif"
+            id="org.eclipse.datatools.connectivity.sample.fileProfile"
+            name="%Extension.ServerExtension.ConnectionProfile.Name">
+      </connectionProfile>
+      <newWizard
+            name="%Extension.NewWizard.Name"
+            profile="org.eclipse.datatools.connectivity.sample.fileProfile"
+            icon="icons/file.gif"
+            description="%Extension.NewWizard.Description"
+            class="org.eclipse.datatools.connectivity.sample.cp.ui.wizards.FileConnectionProfileNewWizard"
+            id="org.eclipse.datatools.connectivity.sample.connectionProfileSample.wizard1">
+      </newWizard>
+      <connectionFactory
+            class="org.eclipse.datatools.connectivity.sample.cp.FileConnectionFactory"
+            id="org.eclipse.datatools.connectivity.connectionFactory.pingFactory"
+            name="Ping Factory"
+            profile="org.eclipse.datatools.connectivity.sample.fileProfile"/>      
+   </extension>
+   
+   <extension
+         point="org.eclipse.ui.navigator.navigatorContent">
+      <navigatorContent
+            contentProvider="org.eclipse.datatools.connectivity.sample.cp.DirectoryContentProviderExtension"
+            id="org.eclipse.datatools.connectivity.sample.directoryContent"
+            labelProvider="org.eclipse.datatools.connectivity.sample.cp.DirectoryLabelProviderExtension"
+            name="Directory Content Extension (Sample)">
+         <enablement>
+            <or>
+	            <and>
+                     <instanceof value="org.eclipse.datatools.connectivity.IConnectionProfile"/>
+				     <test
+						property="org.eclipse.datatools.connectivity.profile.property.id"
+	                     value="org.eclipse.datatools.connectivity.sample.fileProfile"/>
+	            </and>
+               <instanceof
+	                     value="java.io.File">
+               </instanceof>
+               <instanceof
+                     value="org.eclipse.datatools.connectivity.sample.cp.DirectoryContentExtension">
+               </instanceof>
+            </or>
+         </enablement>
+      </navigatorContent>
+   </extension>
+   
+      <extension
+            point="org.eclipse.core.runtime.adapters">
+         <factory
+               adaptableType="org.eclipse.datatools.connectivity.IConnectionProfile"
+               class="org.eclipse.datatools.connectivity.sample.cp.FileProfileAdapterFactory">
+            <adapter
+                  type="org.eclipse.ui.views.properties.IPropertySourceProvider">
+            </adapter>
+         </factory>
+      </extension>
+      
+      <extension
+            point="org.eclipse.ui.navigator.viewer">
+         <viewerContentBinding viewerId="org.eclipse.datatools.connectivity.DataSourceExplorerNavigator">
+            <includes>
+               <contentExtension pattern="org.eclipse.datatools.connectivity.sample.directoryContent"/>
+            </includes>
+         </viewerContentBinding>
+      </extension>
+
+<!-- This action provider will override the Refresh action
+for File profiles to pop up a simple dialog instead of actually
+refreshing the view
+	NOTE: This is supported in Eclipse 3.3 only -->
+
+<!--
+    <extension
+         point="org.eclipse.ui.navigator.navigatorContent">
+      <actionProvider
+            class="org.eclipse.datatools.connectivity.sample.cp.ui.actions.RefreshOverrideActionProvider"
+            id="org.eclipse.datatools.connectivity.ui.dse.actions.testbed2"
+            overrides="org.eclipse.datatools.connectivity.ui.dse.actions.RefreshActionProvider">
+         <enablement>
+            <and>
+               <instanceof
+                     value="org.eclipse.datatools.connectivity.IConnectionProfile">
+               </instanceof>
+               <test
+                     property="org.eclipse.datatools.connectivity.profile.property.id"
+                     value="org.eclipse.datatools.connectivity.sample.fileProfile">
+               </test>
+            </and>
+         </enablement>
+      </actionProvider>
+   </extension>
+-->
+
+<!-- This action provider contributes an overriding Refresh action for 
+directories appearing in connected file profiles -->   
+
+<!-- 	NOTE: This is supported in Eclipse 3.3 only -->
+
+   <extension
+         point="org.eclipse.ui.navigator.navigatorContent">
+      <actionProvider
+            class="org.eclipse.datatools.connectivity.sample.cp.ui.actions.RefreshDirectoryActionProvider"
+            id="org.eclipse.datatools.connectivity.ui.dse.actions.testbed3"
+            overrides="org.eclipse.datatools.connectivity.ui.dse.actions.RefreshActionProvider">
+         <enablement>
+               <instanceof
+                     value="java.io.File">
+               </instanceof>
+         </enablement>
+      </actionProvider>
+   </extension>
+   <extension
+         point="org.eclipse.datatools.connectivity.ui.connectionProfileImage">
+      <profileImage
+            icon="icons/file2.gif"
+            profileID="org.eclipse.datatools.connectivity.sample.fileProfile">
+      </profileImage>
+   </extension>
+   <extension
+         point="org.eclipse.ui.handlers">
+      <handler
+            class="org.eclipse.datatools.connectivity.sample.cp.ui.handler.NewCPSampleHandler"
+            commandId="org.eclipse.datatools.connectivity.commands.addprofile">
+     <enabledWhen>
+	   <with variable="selection">
+	    <count value="1" />
+	    <iterate>
+        <or>
+           <and>
+              <instanceof
+                    value="org.eclipse.datatools.connectivity.IConnectionProfile">
+              </instanceof>
+              <test
+                    property="org.eclipse.datatools.connectivity.profile.property.id"
+                    value="org.eclipse.datatools.connectivity.sample.fileProfile">
+              </test>
+           </and>
+           <instanceof
+                 value="java.io.File">
+           </instanceof>
+           <instanceof
+                 value="org.eclipse.datatools.connectivity.sample.cp.DirectoryContentExtension">
+           </instanceof>
+        </or>
+	    </iterate>
+	   </with>
+     </enabledWhen>
+     <activeWhen>
+        <and>
+           <with
+                 variable="activeWorkbenchWindow">
+              <test
+                    property="org.eclipse.datatools.connectivity.workbench.window.perspective.property.perspectiveID"
+                    value="org.eclipse.ui.resourcePerspective">
+              </test>
+           </with>
+           <with
+                 variable="selection">
+              <count
+                    value="1">
+              </count>
+              <iterate
+                    operator="or">
+                 <or>
+                    <and>
+                       <instanceof
+                             value="org.eclipse.datatools.connectivity.IConnectionProfile">
+                       </instanceof>
+                       <test
+                             property="org.eclipse.datatools.connectivity.profile.property.id"
+                             value="org.eclipse.datatools.connectivity.sample.fileProfile">
+                       </test>
+                    </and>
+                    <instanceof
+                          value="java.io.File">
+                    </instanceof>
+                    <instanceof
+                          value="org.eclipse.datatools.connectivity.sample.cp.DirectoryContentExtension">
+                    </instanceof>
+                 </or>
+              </iterate>
+           </with>
+        </and>
+     </activeWhen>
+      </handler>
+   </extension>
+</plugin>
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/DirectoryContentExtension.java b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/DirectoryContentExtension.java
new file mode 100644
index 0000000..0f586cc
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/DirectoryContentExtension.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.cp;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.ui.IContentExtension;
+import org.eclipse.datatools.connectivity.ui.ManagedContentExtensionBase;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.internal.WorkbenchPlugin;
+
+/**
+ * @see IContentExtension
+ */
+public class DirectoryContentExtension extends ManagedContentExtensionBase {
+
+	public DirectoryContentExtension(IConnectionProfile profile) {
+		super(profile, IFileProfileConstants.FILE_FACTORY_ID);
+	}
+
+	public Image getImage() {
+		return WorkbenchPlugin.getDefault().getSharedImages().getImage(
+				ISharedImages.IMG_OBJ_FILE);
+	}
+
+	public String getLabel() {
+		return "Directory Content (Sample Extension)";
+	}
+	
+	public boolean isVisible() {
+		return true;
+	}
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/DirectoryContentProviderExtension.java b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/DirectoryContentProviderExtension.java
new file mode 100644
index 0000000..1ca8439
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/DirectoryContentProviderExtension.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.cp;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.sample.cp.ui.FileContentProvider;
+import org.eclipse.datatools.connectivity.ui.CommonContentProviderBase;
+import org.eclipse.datatools.connectivity.ui.IContentExtension;
+
+/**
+ * This class implements the navigatorContent extension and supplies workspace
+ * resources.
+ * 
+ */
+public class DirectoryContentProviderExtension extends
+		CommonContentProviderBase {
+
+	public DirectoryContentProviderExtension() {
+		super(new FileContentProvider());
+	}
+
+	protected IContentExtension createContentExtension(
+			IConnectionProfile profile) {
+		return new DirectoryContentExtension(profile);
+	}
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/DirectoryLabelProviderExtension.java b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/DirectoryLabelProviderExtension.java
new file mode 100644
index 0000000..81e99ff
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/DirectoryLabelProviderExtension.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.cp;
+
+import org.eclipse.datatools.connectivity.sample.cp.ui.FileLabelProvider;
+import org.eclipse.datatools.connectivity.ui.CommonLabelProviderBase;
+
+public class DirectoryLabelProviderExtension extends CommonLabelProviderBase {
+
+	public DirectoryLabelProviderExtension() {
+		super(new FileLabelProvider());
+	}
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/FileConnection.java b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/FileConnection.java
new file mode 100644
index 0000000..63dcfab
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/FileConnection.java
@@ -0,0 +1,96 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.cp;
+
+import java.io.File;
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.Version;
+import org.eclipse.datatools.connectivity.VersionProviderConnection;
+
+/**
+ * @author rcernich
+ * 
+ * Created on Mar 15, 2004
+ */
+public class FileConnection extends VersionProviderConnection implements
+		IConnection {
+
+	private final static String TECHNOLOGY_ROOT_KEY = "fileSample";
+
+	private File mFile;
+	private Exception mConnectException;
+
+	public FileConnection(IConnectionProfile profile) {
+		super(profile, FileConnectionFactory.class);
+		Properties props = profile.getBaseProperties();
+		String path = props
+				.getProperty(IFileProfilePropertyConstants.FILE_PATH);
+		if (path == null) {
+			mFile = null;
+		}
+		else {
+			mFile = new File(path);
+			if (!mFile.isDirectory() || !mFile.exists()) {
+				mFile = null;
+			}
+		}
+		if (mFile == null) {
+			mConnectException = new Exception(
+					"Specified directory does not exist.");
+			clearVersionCache();
+		}
+		else {
+			updateVersionCache();
+		}
+	}
+
+	public Object getRawConnection() {
+		return mFile;
+	}
+
+	public void close() {
+		// Nothing to do here. We don't really open anything.
+		mFile = null;
+		mConnectException = null;
+	}
+
+	public Throwable getConnectException() {
+		return mConnectException;
+	}
+
+	protected String getTechnologyRootKey() {
+		return TECHNOLOGY_ROOT_KEY;
+	}
+
+	public String getProviderName() {
+		// We'll use the OS name for the technology type
+		return System.getProperty("os.name");
+	}
+
+	public Version getProviderVersion() {
+		// We'll use the OS version for the technology version
+		return Version.valueOf(System.getProperty("os.version"));
+	}
+
+	public String getTechnologyName() {
+		// We'll use the JVM name for the provider name
+		return System.getProperty("java.vendor");
+	}
+
+	public Version getTechnologyVersion() {
+		// We'll use the JVM version for the provider version
+		return Version.valueOf(System.getProperty("java.version"));
+	}
+
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/FileConnectionFactory.java b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/FileConnectionFactory.java
new file mode 100644
index 0000000..019a58b
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/FileConnectionFactory.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.cp;
+
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionFactory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+
+/**
+ */
+public class FileConnectionFactory implements IConnectionFactory {
+
+	/**
+	 */
+	public FileConnectionFactory() {
+	}
+
+	public IConnection createConnection(IConnectionProfile profile, String uid,
+			String pwd) {
+		return createConnection(profile);
+	}
+
+	public IConnection createConnection(IConnectionProfile profile) {
+		return new FileConnection(profile);
+	}
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/FileProfileAdapterFactory.java b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/FileProfileAdapterFactory.java
new file mode 100644
index 0000000..0a1e5d9
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/FileProfileAdapterFactory.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.cp;
+
+import org.eclipse.core.runtime.IAdapterFactory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.sample.cp.ui.FileCPPropertySource;
+import org.eclipse.ui.views.properties.IPropertySource;
+import org.eclipse.ui.views.properties.IPropertySourceProvider;
+
+public class FileProfileAdapterFactory implements IAdapterFactory {
+
+	public Class[] getAdapterList() {
+		Class[] c = new Class[1];
+		c[0] = IPropertySourceProvider.class;
+		return c;
+	}
+
+	public Object getAdapter(Object adaptableObject, Class adapterType) {
+
+		if (adapterType.isAssignableFrom(IPropertySourceProvider.class)) {
+			final IConnectionProfile icp = (IConnectionProfile) adaptableObject;
+			if (icp.getProviderId().equals("org.eclipse.datatools.connectivity.sample.fileProfile"))
+				return new FileProfilePropertySourceProvider();
+		}
+		return null;
+	}
+	
+	private class FileProfilePropertySourceProvider implements IPropertySourceProvider {
+
+		public IPropertySource getPropertySource(Object adaptableObject) {
+			if (adaptableObject instanceof IConnectionProfile) {
+				final IConnectionProfile icp = (IConnectionProfile) adaptableObject;
+				if (icp.getProviderId().equals("org.eclipse.datatools.connectivity.sample.fileProfile"))
+					return new FileCPPropertySource(icp);
+			}
+			return null;
+		}
+		
+	}
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/IFileProfileConstants.java b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/IFileProfileConstants.java
new file mode 100644
index 0000000..87197de
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/IFileProfileConstants.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.cp;
+
+import java.io.File;
+
+/**
+ * @author rcernich
+ * 
+ * Created on Mar 15, 2004
+ */
+public interface IFileProfileConstants extends IFileProfilePropertyConstants {
+
+	public static final String FILE_PROFILE_ID = "org.eclipse.datatools.connectivity.sample.fileProfile";
+	public static final String FILE_CONTENT_EXTENSION_ID = "org.eclipse.datatools.connectivity.sample.directoryContent";
+	public static final String FILE_FACTORY_ID = File.class.getName();
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/IFileProfilePropertyConstants.java b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/IFileProfilePropertyConstants.java
new file mode 100644
index 0000000..814197d
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/IFileProfilePropertyConstants.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.cp;
+
+/**
+ * @author rcernich
+ * 
+ * Created on Mar 15, 2004
+ */
+public interface IFileProfilePropertyConstants {
+
+	public static final String FILE_PATH = "filePath";
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/FileCPPropertySource.java b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/FileCPPropertySource.java
new file mode 100644
index 0000000..00566c8
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/FileCPPropertySource.java
@@ -0,0 +1,116 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.cp.ui;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectionProfilePropertySource;
+import org.eclipse.datatools.connectivity.sample.cp.IFileProfilePropertyConstants;
+import org.eclipse.ui.views.properties.IPropertyDescriptor;
+import org.eclipse.ui.views.properties.PropertyDescriptor;
+
+/**
+ * @author brianf
+ */
+public class FileCPPropertySource extends ConnectionProfilePropertySource {
+
+	private static final String P_ID_FILEPATH = "org.eclipse.datatools.connectivity.properties.sample.profile.filepath"; //$NON-NLS-1$
+
+	private IConnectionProfile mCP;
+
+	public FileCPPropertySource(IConnectionProfile cp) {
+		super(cp);
+		mCP = cp;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.views.properties.IPropertySource#getEditableValue()
+	 */
+	public Object getEditableValue() {
+		return mCP;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.views.properties.IPropertySource#getPropertyDescriptors()
+	 */
+	public IPropertyDescriptor[] getPropertyDescriptors() {
+		
+		IPropertyDescriptor[] superDescriptors =
+			super.getPropertyDescriptors();
+		
+		List descList = Arrays.asList(superDescriptors);
+		ArrayList fullList = new ArrayList();
+		fullList.addAll(descList);
+		
+		PropertyDescriptor desFilePath = new PropertyDescriptor(P_ID_FILEPATH,
+				"File Path"); //$NON-NLS-1$
+		desFilePath.setCategory("Core"); //$NON-NLS-1$
+		
+		fullList.add(desFilePath);
+
+		return (IPropertyDescriptor[]) fullList.toArray( new IPropertyDescriptor[ fullList.size() ]);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.views.properties.IPropertySource#getPropertyValue(java.lang.Object)
+	 */
+	public Object getPropertyValue(Object id) {
+		Object value =
+			super.getPropertyValue(id);
+		if (value == null) {
+			if (id.equals(P_ID_FILEPATH)) {
+				return mCP.getBaseProperties().getProperty(IFileProfilePropertyConstants.FILE_PATH);
+			}
+			else {
+				return null;
+			}
+		}
+		else
+			return value;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.views.properties.IPropertySource#isPropertySet(java.lang.Object)
+	 */
+	public boolean isPropertySet(Object id) {
+		return true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.views.properties.IPropertySource#resetPropertyValue(java.lang.Object)
+	 */
+	public void resetPropertyValue(Object id) {
+		// Do nothing
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.views.properties.IPropertySource#setPropertyValue(java.lang.Object,
+	 *      java.lang.Object)
+	 */
+	public void setPropertyValue(Object id, Object value) {
+		// Do nothing
+	}
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/FileContentProvider.java b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/FileContentProvider.java
new file mode 100644
index 0000000..9248a6e
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/FileContentProvider.java
@@ -0,0 +1,111 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.cp.ui;
+
+import java.io.File;
+
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+/**
+ * This represents an existing content provider used for working the object type
+ * representing connections for this profile (java.io.File).
+ * 
+ * @author rcernich
+ * 
+ * Created on Mar 15, 2004
+ */
+public class FileContentProvider implements ITreeContentProvider {
+
+	/**
+	 * 
+	 */
+	public FileContentProvider() {
+		super();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
+	 */
+	public Object[] getChildren(Object parentElement) {
+		Object[] children;
+		if (parentElement instanceof File) {
+			File file = (File) parentElement;
+			if (file.isDirectory()) {
+				children = file.listFiles();
+			}
+			else {
+				children = new Object[0];
+			}
+		}
+		else {
+			children = new Object[0];
+		}
+		return children;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
+	 */
+	public Object getParent(Object element) {
+		Object parent;
+		if (element instanceof File) {
+			parent = ((File) element).getParentFile();
+		}
+		else {
+			parent = null;
+		}
+		return parent;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
+	 */
+	public boolean hasChildren(Object element) {
+		return getChildren(element).length > 0;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+	 */
+	public Object[] getElements(Object inputElement) {
+		return getChildren(inputElement);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+	 */
+	public void dispose() {
+		// Release any listeners. Other cleanup.
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
+	 *      java.lang.Object, java.lang.Object)
+	 */
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		// Register listeners on newInput, remove listeners on oldInput, other
+		// initialization.
+	}
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/FileLabelProvider.java b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/FileLabelProvider.java
new file mode 100644
index 0000000..2558abd
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/FileLabelProvider.java
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.cp.ui;
+
+import java.io.File;
+
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.internal.WorkbenchPlugin;
+
+/**
+ * This represents an existing label provider used for working the object type
+ * representing connections for this profile (java.io.File).
+ * 
+ * @author rcernich
+ * 
+ * Created on Mar 15, 2004
+ */
+public class FileLabelProvider extends LabelProvider {
+
+	public FileLabelProvider() {
+		super();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
+	 */
+	public Image getImage(Object element) {
+		Image image;
+		if (element instanceof File) {
+			File file = (File) element;
+			if (file.isDirectory()) {
+				image = WorkbenchPlugin.getDefault().getSharedImages()
+						.getImage(ISharedImages.IMG_OBJ_FOLDER);
+			}
+			else {
+				image = WorkbenchPlugin.getDefault().getSharedImages()
+						.getImage(ISharedImages.IMG_OBJ_FILE);
+			}
+		}
+		else {
+			image = super.getImage(element);
+		}
+		return image;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
+	 */
+	public String getText(Object element) {
+		String text;
+		if (element instanceof File) {
+			text = ((File) element).getName();
+		}
+		else {
+			text = super.getText(element);
+		}
+		return text;
+	}
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/actions/RefreshDirectoryAction.java b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/actions/RefreshDirectoryAction.java
new file mode 100644
index 0000000..7fb6b4e
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/actions/RefreshDirectoryAction.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.cp.ui.actions;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.ui.actions.ActionContext;
+import org.eclipse.ui.navigator.CommonViewer;
+
+public class RefreshDirectoryAction extends Action {
+
+	private ActionContext context = null;
+	private StructuredViewer viewer = null;
+
+	public void setActionContext ( ActionContext context ) {
+		this.context = context;
+	}
+	
+	public ActionContext getActionContext() {
+		return this.context;
+	}
+	
+	public void setViewer ( StructuredViewer viewer ) {
+		this.viewer = viewer;
+	}
+	
+	public StructuredViewer getViewer () {
+		return this.viewer;
+	}
+	
+	public void run() {
+		IStructuredSelection ssel = 
+			(IStructuredSelection) getActionContext().getSelection();
+		getViewer().refresh(ssel.getFirstElement());
+		if (getViewer() instanceof CommonViewer) {
+			CommonViewer cv = (CommonViewer) getViewer();
+			cv.collapseToLevel(ssel.getFirstElement(), 1);
+		}
+	}
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/actions/RefreshDirectoryActionProvider.java b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/actions/RefreshDirectoryActionProvider.java
new file mode 100644
index 0000000..6db3dbe
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/actions/RefreshDirectoryActionProvider.java
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.cp.ui.actions;
+
+import java.io.File;
+
+import org.eclipse.datatools.connectivity.ui.navigator.actions.RefreshActionProvider;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.actions.ActionFactory;
+import org.eclipse.ui.navigator.ICommonActionExtensionSite;
+
+public class RefreshDirectoryActionProvider extends RefreshActionProvider {
+
+	private RefreshDirectoryAction addRefreshAction;
+	
+	public RefreshDirectoryActionProvider() {
+		super();
+	}
+		
+	public void fillContextMenu(IMenuManager manager) {
+		IStructuredSelection selection = 
+			(IStructuredSelection) getContext().getSelection();
+		if (selection.getFirstElement() instanceof File) {
+			File file = (File) selection.getFirstElement();
+			if (file.isDirectory()) {
+				this.addRefreshAction.setActionContext(getContext());
+				this.addRefreshAction.setViewer(getViewer());
+				manager.appendToGroup("slot3", this.addRefreshAction);
+			}
+		}
+		return;
+	}
+
+	public void fillActionBars(IActionBars bars) {
+		bars.setGlobalActionHandler(ActionFactory.REFRESH.getId(),
+				this.addRefreshAction);
+        updateActionBars();
+        return;
+	}
+
+	public void init(ICommonActionExtensionSite config) {
+		super.init(config);
+		makeActions();
+	}
+
+    /**
+     * 
+     */
+    private void makeActions() {
+		this.addRefreshAction = new RefreshDirectoryAction();
+		this.addRefreshAction.setActionDefinitionId("org.eclipse.ui.file.refresh"); //$NON-NLS-1$
+		this.addRefreshAction.setText("Refresh Directory");
+		this.addRefreshAction.setViewer(getViewer());
+
+    }
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.actions.ActionGroup#updateActionBars()
+	 */
+	public void updateActionBars() {
+		this.addRefreshAction.setActionContext(getContext());
+		this.addRefreshAction.setViewer(getViewer());
+	}
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/actions/RefreshOverrideAction.java b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/actions/RefreshOverrideAction.java
new file mode 100644
index 0000000..b4a913b
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/actions/RefreshOverrideAction.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.cp.ui.actions;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.widgets.Shell;
+
+public class RefreshOverrideAction extends Action {
+
+	public void run() {
+		MessageDialog.openInformation(new Shell(), 
+				"Override Refresh", 
+				"This action has been overridden to pop up this dialog.");
+	}
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/actions/RefreshOverrideActionProvider.java b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/actions/RefreshOverrideActionProvider.java
new file mode 100644
index 0000000..29151db
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/actions/RefreshOverrideActionProvider.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.cp.ui.actions;
+
+import org.eclipse.datatools.connectivity.ui.navigator.actions.RefreshActionProvider;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.actions.ActionFactory;
+import org.eclipse.ui.navigator.ICommonActionExtensionSite;
+
+public class RefreshOverrideActionProvider extends RefreshActionProvider {
+
+	private RefreshOverrideAction addRefreshAction;
+
+	public RefreshOverrideActionProvider() {
+		super();
+	}
+		
+	public void fillContextMenu(IMenuManager manager) {
+		manager.appendToGroup("slot3", this.addRefreshAction);
+		return;
+	}
+
+	public void fillActionBars(IActionBars bars) {
+		bars.setGlobalActionHandler(ActionFactory.REFRESH.getId(),
+				this.addRefreshAction);
+        updateActionBars();
+        return;
+	}
+
+    /**
+     * 
+     */
+    private void makeActions() {
+		this.addRefreshAction = new RefreshOverrideAction();
+		this.addRefreshAction.setActionDefinitionId("org.eclipse.ui.file.refresh"); //$NON-NLS-1$
+		this.addRefreshAction.setText("Override Refresh");
+
+    }
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.actions.ActionGroup#updateActionBars()
+	 */
+	public void updateActionBars() {
+	}
+
+	public void init(ICommonActionExtensionSite config) {
+		super.init(config);
+		makeActions();
+	}
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/actions/SampleFileAction.java b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/actions/SampleFileAction.java
new file mode 100644
index 0000000..72f9aea
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/actions/SampleFileAction.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.cp.ui.actions;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IActionDelegate;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IWorkbenchPart;
+
+public class SampleFileAction implements IObjectActionDelegate {
+
+	private IWorkbenchPart mTargetPart;
+
+	/**
+	 * Constructor for Action1.
+	 */
+	public SampleFileAction() {
+		super();
+	}
+
+	/**
+	 * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
+	 */
+	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+		mTargetPart = targetPart;
+	}
+
+	/**
+	 * @see IActionDelegate#run(IAction)
+	 */
+	public void run(IAction action) {
+		MessageDialog.openInformation(mTargetPart.getSite().getShell(),
+				"Connection Profile Sample Plug-in",
+				"Sample Action was executed.");
+	}
+
+	/**
+	 * @see IActionDelegate#selectionChanged(IAction, ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+	}
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/handler/NewCPSampleHandler.java b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/handler/NewCPSampleHandler.java
new file mode 100644
index 0000000..a0802cf
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/handler/NewCPSampleHandler.java
@@ -0,0 +1,24 @@
+package org.eclipse.datatools.connectivity.sample.cp.ui.handler;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+public class NewCPSampleHandler extends AbstractHandler {
+
+	public NewCPSampleHandler() {
+		super();
+	}
+
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		Shell shell = HandlerUtil.getActiveShell(event);
+		MessageDialog.openInformation(shell, 
+				"Overridden by Sample CP", 
+				"New profile handler was overridden by the Sample CP");
+		return null;
+	}
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/properties/FileProfilePropetyPage.java b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/properties/FileProfilePropetyPage.java
new file mode 100644
index 0000000..d3322e0
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/properties/FileProfilePropetyPage.java
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.cp.ui.properties;
+
+import java.util.Properties;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.sample.cp.IFileProfileConstants;
+import org.eclipse.datatools.connectivity.ui.wizards.ProfileDetailsPropertyPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+public class FileProfilePropetyPage extends ProfileDetailsPropertyPage {
+
+	private Text mPathText;
+
+	/**
+	 * Constructor for FileProfilePropetyPage.
+	 */
+	public FileProfilePropetyPage() {
+		super();
+		noDefaultAndApplyButton();
+	}
+
+	protected void createCustomContents(Composite parent) {
+		Composite content = new Composite(parent, SWT.NULL);
+		GridLayout layout = new GridLayout(3, false);
+		content.setLayout(layout);
+
+		Label label;
+
+		label = new Label(content, SWT.NULL);
+		label.setLayoutData(new GridData());
+		label.setText("Directory Path:");
+
+		mPathText = new Text(content, SWT.BORDER);
+		mPathText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		mPathText.addModifyListener(new ModifyListener() {
+
+			public void modifyText(ModifyEvent e) {
+				handlePathModify();
+			}
+		});
+
+		Button button = new Button(content, SWT.PUSH);
+		button.setText("Browse...");
+		button.setLayoutData(new GridData());
+		button.addSelectionListener(new SelectionAdapter() {
+
+			public void widgetSelected(SelectionEvent e) {
+				handleBrowse();
+			}
+		});
+
+		initControls();
+	}
+
+	public Properties collectProperties() {
+		Properties props = new Properties();
+		props.setProperty(IFileProfileConstants.FILE_PATH, mPathText.getText());
+		return props;
+	}
+
+	private void initControls() {
+		IConnectionProfile profile = getConnectionProfile();
+		Assert.isTrue(profile.getProviderId().equals(
+				IFileProfileConstants.FILE_PROFILE_ID));
+		String path = profile.getBaseProperties().getProperty(
+				IFileProfileConstants.FILE_PATH);
+		if (path != null) {
+			mPathText.setText(path);
+		}
+		validate();
+		setErrorMessage(null);
+	}
+
+	private void handleBrowse() {
+		DirectoryDialog dialog = new DirectoryDialog(getShell());
+		String path = dialog.open();
+		if (path != null) {
+			mPathText.setText(path);
+		}
+	}
+
+	private void handlePathModify() {
+		validate();
+	}
+
+	private void validate() {
+		String errorMessage;
+		String path = mPathText.getText();
+		if (path == null || path.length() == 0) {
+			errorMessage = "Please specify server path.";
+		}
+		else {
+			errorMessage = null;
+		}
+		setErrorMessage(errorMessage);
+		setValid(errorMessage == null);
+	}
+
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/wizards/FileConnectionProfileNewWizard.java b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/wizards/FileConnectionProfileNewWizard.java
new file mode 100644
index 0000000..aacc248
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/wizards/FileConnectionProfileNewWizard.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.cp.ui.wizards;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.sample.cp.IFileProfileConstants;
+import org.eclipse.datatools.connectivity.sample.cp.IFileProfilePropertyConstants;
+import org.eclipse.datatools.connectivity.ui.wizards.NewConnectionProfileWizard;
+import org.eclipse.jface.wizard.Wizard;
+
+/**
+ * @see Wizard
+ */
+public class FileConnectionProfileNewWizard extends NewConnectionProfileWizard {
+
+	private FilePathPropertyWizardPage mPropPage;
+
+	/**
+	 * 
+	 */
+	public FileConnectionProfileNewWizard() {
+		setWindowTitle("New File Server Connection Profile");
+		setNeedsProgressMonitor(true);
+		mProviderID = IFileProfileConstants.FILE_PROFILE_ID;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.wizard.IWizard#addPages()
+	 */
+	public void addCustomPages() {
+		mPropPage = new FilePathPropertyWizardPage("propPage");
+		addPage(mPropPage);
+	}
+
+	public Properties getProfileProperties() {
+		Properties props = new Properties();
+		props.setProperty(IFileProfilePropertyConstants.FILE_PATH, mPropPage
+				.getProperty());
+		return props;
+	}
+
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/wizards/FilePathPropertyWizardPage.java b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/wizards/FilePathPropertyWizardPage.java
new file mode 100644
index 0000000..6a96325
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.cp/src/org/eclipse/datatools/connectivity/sample/cp/ui/wizards/FilePathPropertyWizardPage.java
@@ -0,0 +1,118 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005, 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ * 		IBM Corporation - defect fix #213266
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.cp.ui.wizards;
+
+import org.eclipse.datatools.connectivity.ui.wizards.ConnectionProfileDetailsPage;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * @author rcernich
+ * 
+ * Created on Mar 11, 2004
+ */
+public class FilePathPropertyWizardPage extends ConnectionProfileDetailsPage {
+
+	private Text mPathText;
+
+	/**
+	 * @param pageName
+	 */
+	public FilePathPropertyWizardPage(String pageName) {
+		super(pageName);
+	}
+
+	/**
+	 * @param pageName
+	 * @param title
+	 * @param titleImage
+	 */
+	public FilePathPropertyWizardPage(String pageName, String title,
+										ImageDescriptor titleImage) {
+		super(pageName, title, titleImage);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+	 */
+	public void createCustomControl(Composite parent) {
+		Composite content = new Composite(parent, SWT.NULL);
+		GridLayout layout = new GridLayout(3, false);
+		content.setLayout(layout);
+
+		Label label = new Label(content, SWT.NULL);
+		label.setLayoutData(new GridData());
+		label.setText("Directory Path:");
+
+		mPathText = new Text(content, SWT.BORDER);
+		mPathText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		mPathText.addModifyListener(new ModifyListener() {
+
+			public void modifyText(ModifyEvent e) {
+				handlePathModify();
+			}
+		});
+
+		Button button = new Button(content, SWT.PUSH);
+		button.setText("Browse...");
+		button.setLayoutData(new GridData());
+		button.addSelectionListener(new SelectionAdapter() {
+
+			public void widgetSelected(SelectionEvent e) {
+				handleBrowse();
+			}
+		});
+	}
+
+	public String getProperty() {
+		return mPathText.getText();
+	}
+
+	private void handleBrowse() {
+		DirectoryDialog dialog = new DirectoryDialog(getShell());
+		String path = dialog.open();
+		if (path != null) {
+			mPathText.setText(path);
+		}
+	}
+
+	private void handlePathModify() {
+		validate();
+	}
+
+	private void validate() {
+		String errorMessage;
+		String path = mPathText.getText();
+		if (path == null) {
+			errorMessage = "Please specify server path.";
+		}
+		else {
+			errorMessage = null;
+		}
+		setErrorMessage(errorMessage);
+		setPageComplete(errorMessage == null);
+	}
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample.ftp/.classpath b/examples/org.eclipse.datatools.connectivity.sample.ftp/.classpath
new file mode 100644
index 0000000..065ac06
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.ftp/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/examples/org.eclipse.datatools.connectivity.sample.ftp/.project b/examples/org.eclipse.datatools.connectivity.sample.ftp/.project
new file mode 100644
index 0000000..c470ab6
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.ftp/.project
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.sample.ftp</name>
+	<comment></comment>
+	<projects>
+		<project>com.sybase.suade.common</project>
+		<project>com.sybase.suade.servers.core</project>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/examples/org.eclipse.datatools.connectivity.sample.ftp/META-INF/MANIFEST.MF b/examples/org.eclipse.datatools.connectivity.sample.ftp/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..ed4ff92
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.ftp/META-INF/MANIFEST.MF
@@ -0,0 +1,21 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Plugin.name
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.sample.ftp;singleton:=true
+Bundle-Version: 2.0.0
+Bundle-Activator: org.eclipse.datatools.connectivity.sample.ftp.Activator
+Bundle-Vendor: %Plugin.Provider.name
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.ui.navigator,
+ org.apache.oro;visibility:=reexport,
+ org.apache.commons.net;visibility:=reexport,
+ org.eclipse.datatools.connectivity.ui.dse
+Eclipse-LazyStart: true
+Export-Package: org.eclipse.datatools.connectivity.sample.ftp,
+ org.eclipse.datatools.connectivity.sample.ftp.internal,
+ org.eclipse.datatools.connectivity.sample.ftp.properties,
+ org.eclipse.datatools.connectivity.sample.ftp.wizards
+Bundle-ClassPath: cpftpsample.jar
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/examples/org.eclipse.datatools.connectivity.sample.ftp/about.html b/examples/org.eclipse.datatools.connectivity.sample.ftp/about.html
new file mode 100644
index 0000000..1b7d275
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.ftp/about.html
@@ -0,0 +1,28 @@
+<html>
+<head>
+<title>About This Content</title>
+</head>
+<body>
+<div>
+<h3>About This Content</h3>
+<p>May 2, 2006</p>
+<h3>License</h3>
+<p>The Eclipse Foundation makes available all content in this plug-in
+(&quot;Content&quot;). Unless otherwise indicated below, the Content is
+provided to you under the terms and conditions of the Eclipse Public License
+Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available at <a
+href="http://www.eclipse.org/org/documents/epl-v10.php">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation,
+the Content is being redistributed by another party (&quot;Redistributor&quot;)
+and different terms and conditions may apply to your use of any object code in
+the Content. Check the RedistributorÂ’s license that was provided with the
+Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source
+code in the Content and such source code may be obtained at <a
+href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+<p>&nbsp;</p>
+</div>
+</body>
+</html>
diff --git a/examples/org.eclipse.datatools.connectivity.sample.ftp/build.properties b/examples/org.eclipse.datatools.connectivity.sample.ftp/build.properties
new file mode 100644
index 0000000..4090c0f
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.ftp/build.properties
@@ -0,0 +1,10 @@
+bin.includes = plugin.xml,\
+               icons/,\
+               about.html,\
+               plugin.properties,\
+               cpftpsample.jar,\
+               META-INF/
+
+jars.compile.order = cpftpsample.jar
+source.cpftpsample.jar = src/
+output.cpftpsample.jar = bin/
diff --git a/examples/org.eclipse.datatools.connectivity.sample.ftp/icons/file.gif b/examples/org.eclipse.datatools.connectivity.sample.ftp/icons/file.gif
new file mode 100644
index 0000000..6b86d07
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.ftp/icons/file.gif
Binary files differ
diff --git a/examples/org.eclipse.datatools.connectivity.sample.ftp/plugin.properties b/examples/org.eclipse.datatools.connectivity.sample.ftp/plugin.properties
new file mode 100644
index 0000000..128d90d
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.ftp/plugin.properties
@@ -0,0 +1,16 @@
+Plugin.name = Sample FTP Profile Plug-in
+Plugin.Provider.name = Sybase, Inc.
+
+NewWizard.name = Sample FTP Connection Profile
+NewWizard.description = Create a Sample FTP connection profile
+
+PropertyPage.name = Sample FTP Connection Profile
+
+ServerExtension.name = Sample FTP Connection Profile
+ServerExtension.Category.name = FTP
+ServerExtension.ConnectionProfile.name = Sample FTP Connection Profile
+ServerExtension.ConfigurationType.name = Sample FTP Configuration Type
+ServerExtension.PingFactory.name = Sample FTP Ping Connection Factory
+ServerExtension.ConnectionFactory.name = Sample FTP Provider Connection Factory
+
+Navigator.extension.name = FTP Content Extension (Sample)
\ No newline at end of file
diff --git a/examples/org.eclipse.datatools.connectivity.sample.ftp/plugin.xml b/examples/org.eclipse.datatools.connectivity.sample.ftp/plugin.xml
new file mode 100644
index 0000000..5f9fabb
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.ftp/plugin.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension
+         point="org.eclipse.datatools.connectivity.connectionProfile">
+      <category
+            id="org.eclipse.datatools.connectivity.sample.ftp.category"
+            name="FTP"/>
+      <connectionProfile
+            category="org.eclipse.datatools.connectivity.sample.ftp.category"
+            icon="icons/file.gif"
+            id="org.eclipse.datatools.connectivity.sample.ftp.profile"
+            name="%ServerExtension.ConnectionProfile.name"
+            pingFactory="org.eclipse.datatools.connectivity.sample.ftp.internal.FtpConnectionFactory"/>
+      <connectionFactory
+            name="%ServerExtension.ConnectionFactory.name"
+            profile="org.eclipse.datatools.connectivity.sample.ftp.profile"
+            class="org.eclipse.datatools.connectivity.sample.ftp.internal.FtpConnectionFactory"
+            id="org.eclipse.datatools.connectivity.sample.ftp.profile.connectionFactory">
+      </connectionFactory>
+      <newWizard
+            class="org.eclipse.datatools.connectivity.sample.ftp.wizards.FtpConnectionProfileWizard"
+            description="%NewWizard.description"
+            icon="icons/file.gif"
+            id="org.eclipse.datatools.connectivity.sample.ftp.profile.wizards.ftpConnectionProfileWizard"
+            name="%NewWizard.name"
+            profile="org.eclipse.datatools.connectivity.sample.ftp.profile">
+      </newWizard>
+   </extension>
+   <extension
+         point="org.eclipse.ui.navigator.navigatorContent">
+      <navigatorContent
+            contentProvider="org.eclipse.datatools.connectivity.sample.ftp.internal.FTPContentProviderExtension"
+            icon="icons/file.gif"
+            id="org.eclipse.datatools.connectivity.sample.ftp.content"
+            labelProvider="org.eclipse.datatools.connectivity.sample.ftp.internal.FTPLabelProviderExtension"
+            name="%Navigator.extension.name"
+            priority="normal">
+         <enablement>
+            <or>
+	            <and>
+                     <instanceof value="org.eclipse.datatools.connectivity.IConnectionProfile"/>
+				     <test
+						property="org.eclipse.datatools.connectivity.profile.property.id"
+	                     value="org.eclipse.datatools.connectivity.sample.ftp.profile"/>
+	            </and>
+               <instanceof
+	                     value="org.eclipse.datatools.connectivity.sample.ftp.internal.FTPClientObject">
+               </instanceof>
+            </or>
+         </enablement>
+      </navigatorContent>
+   </extension>
+      <extension
+            point="org.eclipse.ui.navigator.viewer">
+         <viewerContentBinding viewerId="org.eclipse.datatools.connectivity.DataSourceExplorerNavigator">
+            <includes>
+               <contentExtension pattern="org.eclipse.datatools.connectivity.sample.ftp.content"/>
+            </includes>
+         </viewerContentBinding>
+      </extension>  
+   <extension
+         point="org.eclipse.ui.propertyPages">
+      <page
+            class="org.eclipse.datatools.connectivity.sample.ftp.properties.FtpProfilePropertyPage"
+            id="org.eclipse.datatools.connectivity.sample.ftp.profile.properties.ftpProfilePropertyPage"
+            name="%PropertyPage.name"
+            objectClass="org.eclipse.datatools.connectivity.IConnectionProfile">
+         <filter
+               name="org.eclipse.datatools.profile.property.id"
+               value="org.eclipse.datatools.connectivity.sample.ftp.profile">
+         </filter>
+      </page>
+   </extension>
+</plugin>
diff --git a/examples/org.eclipse.datatools.connectivity.sample.ftp/readme.txt b/examples/org.eclipse.datatools.connectivity.sample.ftp/readme.txt
new file mode 100644
index 0000000..6cbe1b1
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.ftp/readme.txt
@@ -0,0 +1,22 @@
+FTP Connection Profile Sample
+
+In order to use this sample, you need to grab a couple
+of plug-ins from the latest Orbit bundle.
+
+http://download.eclipse.org/tools/orbit/downloads/
+
+You need to find:
+	org.apache.oro
+	org.apache.commons.net
+
+The sample will not compile or run without them. 
+
+This sample focuses mainly on creating a profile,
+providing unique values (like a FTP system name,
+user id, password, etc), and populating the tree
+once the profile is created or edited. 
+
+It is VERY basic functionality that could be extended
+easily to handle drag/drop of a file from the FTP site 
+into a project or adding the ability to open/edit a file
+on an FTP server, etc.
\ No newline at end of file
diff --git a/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/Activator.java b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/Activator.java
new file mode 100644
index 0000000..9afe142
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/Activator.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.ftp;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.datatools.connectivity.sample.ftp";
+	// The registered id for the ftp connection profile
+	public final static String PROVIDER_ID = "org.eclipse.datatools.connectivity.sample.ftp.profile"; //$NON-NLS-1$
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/FTPProfileMessages.java b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/FTPProfileMessages.java
new file mode 100644
index 0000000..52e6cc9
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/FTPProfileMessages.java
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.ftp;
+
+import java.text.MessageFormat;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * Utility class which helps managing messages
+ */
+public class FTPProfileMessages {
+	private static final String RESOURCE_BUNDLE= "org.eclipse.datatools.connectivity.sample.ftp.messages";//$NON-NLS-1$
+	private static ResourceBundle bundle = ResourceBundle.getBundle(RESOURCE_BUNDLE);
+
+	private FTPProfileMessages(){
+		// prevent instantiation of class
+	}
+	/**
+	 * Returns the formatted message for the given key in
+	 * the resource bundle. 
+	 *
+	 * @param key the resource name
+	 * @param args the message arguments
+	 * @return the string
+	 */	
+	public static String format(String key, Object[] args) {
+		return MessageFormat.format(getString(key),args);
+	}
+	/**
+	 * Returns the resource object with the given key in
+	 * the resource bundle. If there isn't any value under
+	 * the given key, the key is returned.
+	 *
+	 * @param key the resource name
+	 * @return the string
+	 */	
+	public static String getString(String key) {
+		try {
+			return bundle.getString(key);
+		} catch (MissingResourceException e) {
+			return key;
+		}
+	}
+	/**
+	 * Returns the resource object with the given key in
+	 * the resource bundle. If there isn't any value under
+	 * the given key, the default value is returned.
+	 *
+	 * @param key the resource name
+	 * @param def the default value
+	 * @return the string
+	 */	
+	public static String getString(String key, String def) {
+		try {
+			return bundle.getString(key);
+		} catch (MissingResourceException e) {
+			return def;
+		}
+	}
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/FtpProfilePlugin.java b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/FtpProfilePlugin.java
new file mode 100644
index 0000000..55ac67f
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/FtpProfilePlugin.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.ftp;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+/**
+ * The main plugin class to be used in the desktop.
+ */
+public class FtpProfilePlugin extends AbstractUIPlugin {
+	// The shared instance.
+	private static FtpProfilePlugin plugin;
+
+	// The registered id for the ftp connection profile
+	public final static String PROVIDER_ID = "org.eclipse.datatools.connectivity.sample.ftp"; //$NON-NLS-1$
+
+	/**
+	 * The constructor.
+	 */
+	public FtpProfilePlugin() {
+		super();
+		plugin = this;
+	}
+
+	/**
+	 * Returns the shared instance.
+	 */
+	public static FtpProfilePlugin getDefault() {
+		return plugin;
+	}
+
+	/**
+	 * @return
+	 * @throws MissingResourceException
+	 */
+	public ResourceBundle loadResourceBundle() throws MissingResourceException {
+		return ResourceBundle
+				.getBundle("org.eclipse.datatools.connectivity.sample.ftp.messages"); //$NON-NLS-1$
+	}
+
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/IFtpProfileConstants.java b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/IFtpProfileConstants.java
new file mode 100644
index 0000000..251217d
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/IFtpProfileConstants.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf & mdow - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.ftp;
+
+/**
+ * This class exposes the property names for FTP connection profiles.
+ * 
+ * @author mdow and brianf
+ */
+public interface IFtpProfileConstants {
+
+	// Property name for the base path of the file
+	public static final String BASE_PATH = "basePath"; //$NON-NLS-1$
+
+	// Property name for the name of the file
+	public static final String FILE_NAME = "name"; //$NON-NLS-1$
+
+	// Property name for the message delimiter within the file
+	public static final String MESSAGE_DELIMITER = "delimiter"; //$NON-NLS-1$
+
+	// The id of the file connection factory
+	public static final String FTP_FACTORY_ID = "org.eclipse.datatools.connectivity.sample.ftp.profile.connectionFactory"; //$NON-NLS-1$
+	
+	// the name of the FTP server
+	public static final String FTP_SERVER = "serverName"; //$NON-NLS-1$
+	public static final String FTP_PORT = "port"; //$NON-NLS-1$
+	
+	// the user name and password for the FTP server
+	public static final String FTP_UID = "userId"; //$NON-NLS-1$
+	public static final String FTP_PWD = "password"; //$NON-NLS-1$
+	
+	public static final String FTP_PROVIDER_ID = "org.eclipse.datatools.connectivity.sample.ftp.profile"; //$NON-NLS-1$
+	
+	// Phantom property for directory
+	public static final String FTP_PHANTOM_PROPERTY_IS_DIRECTORY = "org.eclipse.datatools.connectivity.ftp.isdirectory";	
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/internal/FTPClientObject.java b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/internal/FTPClientObject.java
new file mode 100644
index 0000000..bada265
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/internal/FTPClientObject.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf & mdow - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.ftp.internal;
+
+import org.apache.commons.net.ftp.FTPClient;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+
+/**
+ * Wrapper class for FTPClient
+ */
+public class FTPClientObject {
+	private IConnectionProfile profile;
+	private FTPClient ftpClient;
+	
+	/**
+	 * @param profile
+	 * @param ftpClient
+	 */
+	public FTPClientObject(IConnectionProfile profile, FTPClient ftpClient) {
+		super();
+		this.profile = profile;
+		this.ftpClient = ftpClient;
+	}
+	/**
+	 * @return Returns the ftpClient.
+	 */
+	public FTPClient getFtpClient() {
+		return ftpClient;
+	}
+	/**
+	 * @return Returns the profile.
+	 */
+	public IConnectionProfile getProfile() {
+		return profile;
+	}
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/internal/FTPContentExtension.java b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/internal/FTPContentExtension.java
new file mode 100644
index 0000000..5b51a30
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/internal/FTPContentExtension.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf & shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.ftp.internal;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.sample.ftp.IFtpProfileConstants;
+import org.eclipse.datatools.connectivity.ui.IContentExtension;
+import org.eclipse.datatools.connectivity.ui.ManagedContentExtensionBase;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.internal.WorkbenchPlugin;
+
+/**
+ * @see IContentExtension
+ */
+public class FTPContentExtension extends ManagedContentExtensionBase {
+
+	public FTPContentExtension(IConnectionProfile profile) {
+		super(profile, IFtpProfileConstants.FTP_FACTORY_ID);
+	}
+
+	public Image getImage() {
+		return WorkbenchPlugin.getDefault().getSharedImages().getImage(
+				ISharedImages.IMG_OBJ_FILE);
+	}
+
+	public String getLabel() {
+		return "FTP Content (Sample Extension)";
+	}
+	
+	public boolean isVisible() {
+		return true;
+	}
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/internal/FTPContentProviderExtension.java b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/internal/FTPContentProviderExtension.java
new file mode 100644
index 0000000..c63dc5b
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/internal/FTPContentProviderExtension.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf & mdow - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.ftp.internal;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.ui.CommonContentProviderBase;
+import org.eclipse.datatools.connectivity.ui.IContentExtension;
+
+/**
+ * This class implements the navigatorContent extension and supplies workspace
+ * resources.
+ * 
+ */
+public class FTPContentProviderExtension extends
+		CommonContentProviderBase {
+
+	public FTPContentProviderExtension() {
+		super(new FtpContentProvider());
+	}
+
+	protected IContentExtension createContentExtension(
+			IConnectionProfile profile) {
+		return new FTPContentExtension(profile);
+	}
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/internal/FTPFileObject.java b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/internal/FTPFileObject.java
new file mode 100644
index 0000000..cdb665b
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/internal/FTPFileObject.java
@@ -0,0 +1,112 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf & mdow - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.ftp.internal;
+
+import org.apache.commons.net.ftp.FTPFile;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.ui.IActionFilter;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.sample.ftp.IFtpProfileConstants;
+
+
+/**
+ * Wrapper class for FTPFile which stores the connection
+ * profile
+ */
+public class FTPFileObject implements IAdaptable {
+    private Object parent;
+
+    private FTPFile file;
+
+    private IConnectionProfile profile;
+
+    public FTPFileObject(Object parent, IConnectionProfile profile, FTPFile file) {
+        this.parent = parent;
+        this.profile = profile;
+        this.file = file;
+    }
+
+    /**
+     * @return Returns the parent.
+     */
+    public Object getParent() {
+        return parent;
+    }
+
+    /**
+     * @return Returns the file.
+     */
+    public FTPFile getFTPFile() {
+        return file;
+    }
+
+    public String getName() {
+        StringBuffer sb = new StringBuffer();        
+        FTPFileObject parent = this;
+        while(parent != null) {
+            sb.insert(0, "/" + parent.getFTPFile().getName());
+            if (parent.getParent() instanceof FTPFileObject) {
+                parent = (FTPFileObject) parent.getParent();
+            } else {
+                parent = null;
+            }
+        }
+        while (sb.charAt(0) == '/') {
+            sb.deleteCharAt(0);
+        }
+        return sb.toString();
+    }
+
+    /**
+     * @return Returns the profile.
+     */
+    public IConnectionProfile getProfile() {
+        return profile;
+    }
+
+    /**
+     * Utility method
+     */
+    public static FTPFileObject[] convert(Object parent,
+            IConnectionProfile profile, FTPFile[] files) {
+        if (files == null) return new FTPFileObject[0];
+        FTPFileObject[] fileobjs = new FTPFileObject[files.length];
+        for (int i = 0; i < files.length; i++) {
+            fileobjs[i] = new FTPFileObject(parent, profile, files[i]);
+        }
+        return fileobjs;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
+     */
+    public Object getAdapter(Class adapter) {
+        if (adapter == IActionFilter.class)
+            return new IActionFilter() {
+                public boolean testAttribute(Object target, String name,
+                        String value) {
+                    if (target == null || !(target instanceof FTPFileObject))
+                        return false;
+                    FTPFileObject fo = (FTPFileObject) target;
+                    if (name
+                            .equals(IFtpProfileConstants.FTP_PHANTOM_PROPERTY_IS_DIRECTORY)
+                            && fo.getFTPFile().isDirectory())
+                        return true;
+                    else
+                        return false;
+                }
+            };
+        else
+            return null;
+    }
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/internal/FTPLabelProviderExtension.java b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/internal/FTPLabelProviderExtension.java
new file mode 100644
index 0000000..1631e85
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/internal/FTPLabelProviderExtension.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf & mdow - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.ftp.internal;
+
+import org.eclipse.datatools.connectivity.ui.CommonLabelProviderBase;
+
+public class FTPLabelProviderExtension extends CommonLabelProviderBase {
+
+	public FTPLabelProviderExtension() {
+		super(new FtpLabelProvider());
+	}
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/internal/FtpConnection.java b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/internal/FtpConnection.java
new file mode 100644
index 0000000..9f54bbc
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/internal/FtpConnection.java
@@ -0,0 +1,153 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf & mdow - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.ftp.internal;
+
+import java.io.IOException;
+import java.util.Properties;
+
+import org.apache.commons.net.ftp.FTPClient;
+import org.apache.commons.net.ftp.FTPReply;
+
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IServerVersionProvider;
+import org.eclipse.datatools.connectivity.Version;
+import org.eclipse.datatools.connectivity.sample.ftp.FTPProfileMessages;
+import org.eclipse.datatools.connectivity.sample.ftp.IFtpProfileConstants;
+
+/**
+ * @author mdow
+ */
+public class FtpConnection implements IConnection, IServerVersionProvider {
+
+	private static int counter = 0;
+	
+	private Throwable mException;
+	
+	private FTPClient mFtpClient;
+	
+	private FTPClientObject mFtpClientObject;
+	
+	private IConnectionProfile mProfile;
+
+	/**
+	 * Constructor
+	 * @param profile
+	 */
+	public FtpConnection(IConnectionProfile profile) {
+		this.mProfile = profile;
+		Properties props = profile.getBaseProperties();
+
+		String server = props.getProperty(IFtpProfileConstants.FTP_SERVER);
+		String port = props.getProperty(IFtpProfileConstants.FTP_PORT);
+		String user = props.getProperty(IFtpProfileConstants.FTP_UID);
+		String pass = props.getProperty(IFtpProfileConstants.FTP_PWD);
+
+        try {
+            int reply;
+            this.mFtpClient = new FTPClient();
+            this.mFtpClientObject = new FTPClientObject(profile,
+                    this.mFtpClient);
+            if (port != null && port.length() != 0)
+            	this.mFtpClient.setDefaultPort(new Integer(port).intValue());
+            this.mFtpClient.setDefaultTimeout(2 * 60 * 1000);
+            this.mFtpClient.setDataTimeout(2 * 60 * 1000);
+            this.mFtpClient.connect(server);
+            if (!this.mFtpClient.login(user, pass)) {
+                throw new Exception(mFtpClient.getReplyString());
+            }
+            reply = this.mFtpClient.getReplyCode();
+            if (!FTPReply.isPositiveCompletion(reply)) {
+                this.mFtpClient.disconnect();
+                throw new Exception(FTPProfileMessages
+                        .getString("FtpConnection.errormessage")); //$NON-NLS-1$
+            }
+        } catch (Exception e) {
+            this.mException = e;
+            return;
+        }
+        this.mFtpClient.enterLocalPassiveMode();
+        FtpConnection.counter++;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.IConnection#getRawConnection()
+	 */
+	public Object getRawConnection() {
+		return this.mFtpClientObject;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.IConnection#close()
+	 */
+	public void close() {
+		if (this.mFtpClient != null) {
+			if (this.mFtpClient.isConnected()) {
+				try {
+					this.mFtpClient.disconnect();
+					FtpConnection.counter--;
+				} catch (IOException e) {
+					// Guess we can't disconnect.
+					e.printStackTrace();
+				}
+			}
+			this.mFtpClient = null;
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.IConnection#getConnectException()
+	 */
+	public Throwable getConnectException() {
+		return this.mException;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.IConnection#getConnectionProfile()
+	 */
+	public IConnectionProfile getConnectionProfile() {
+		return this.mProfile;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.IServerVersionProvider#getProviderName()
+	 */
+	public String getProviderName() {
+		try {
+			if (mFtpClient != null && mFtpClient.isConnected())
+				return mFtpClient.getSystemName();
+		} catch (IOException e) {
+			// do nothing
+		}
+		return "Not Available";
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.IServerVersionProvider#getProviderVersion()
+	 */
+	public Version getProviderVersion() {
+		return new Version(0,0,0,"0");
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.IServerVersionProvider#getTechnologyName()
+	 */
+	public String getTechnologyName() {
+		return "FTP";
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.IServerVersionProvider#getTechnologyVersion()
+	 */
+	public Version getTechnologyVersion() {
+		return new Version(0,0,0,"0");
+	}
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/internal/FtpConnectionFactory.java b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/internal/FtpConnectionFactory.java
new file mode 100644
index 0000000..9808508
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/internal/FtpConnectionFactory.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: mdow - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.ftp.internal;
+
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionFactory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+
+/**
+ * @author mdow
+ */
+public class FtpConnectionFactory implements IConnectionFactory {
+
+	/*
+	 * Constructor
+	 */
+	public FtpConnectionFactory() {
+		super();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.IConnectionFactory#createConnection(org.eclipse.datatools.connectivity.IConnectionProfile)
+	 */
+	public IConnection createConnection(IConnectionProfile profile) {
+		FtpConnection connect = new FtpConnection(profile);
+//		if (connect.getConnectException() != null) {
+//			return null;
+//		}
+		return connect;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.IConnectionFactory#createConnection(org.eclipse.datatools.connectivity.IConnectionProfile, java.lang.String, java.lang.String)
+	 */
+	public IConnection createConnection(IConnectionProfile profile, String uid,
+			String pwd) {
+		FtpConnection connect = new FtpConnection(profile);
+		if (connect.getConnectException() != null) {
+			return null;
+		}
+		return connect;
+	}
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/internal/FtpContentProvider.java b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/internal/FtpContentProvider.java
new file mode 100644
index 0000000..1b13fe4
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/internal/FtpContentProvider.java
@@ -0,0 +1,177 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf & mdow - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.ftp.internal;
+
+import org.apache.commons.net.ftp.FTPClient;
+import org.apache.commons.net.ftp.FTPFile;
+import org.apache.commons.net.ftp.FTPListParseEngine;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+/**
+ * @author mdow and brianf
+ */
+public class FtpContentProvider implements ITreeContentProvider,
+		IAdaptable {
+
+	/**
+	 * Constructor
+	 */
+	public FtpContentProvider() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
+	 */
+	public Object[] getChildren(Object parent) {
+		try {
+			if (parent instanceof FTPClientObject) {
+				FTPClient ftpClient = ((FTPClientObject) parent).getFtpClient();
+				if (ftpClient.isConnected()) {
+					FTPListParseEngine engine = ftpClient.initiateListParsing();
+					FTPFile[] files = engine.getFiles();
+					return FTPFileObject.convert(parent, ((FTPClientObject) parent).getProfile(), files);
+				}
+			} else if (parent instanceof FTPFileObject) {
+				FTPFile ftpFile = ((FTPFileObject) parent).getFTPFile();
+				FTPClient ftpClient = getFTPClient(parent);
+				if (ftpFile.isDirectory() && ftpClient.isConnected()) {
+					FTPListParseEngine engine = ftpClient
+							.initiateListParsing(getDirectory((FTPFileObject) parent));
+					FTPFile[] files = engine.getFiles();
+					return FTPFileObject.convert(parent, ((FTPFileObject) parent).getProfile(), files);
+				}
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+			FTPClient ftpClient = getFTPClient(parent);
+			try {
+				if (ftpClient != null)
+					ftpClient.disconnect();
+			} catch (Exception ex) {
+			}
+		}
+		return new Object[0];
+	}
+
+	private String getDirectory(FTPFileObject file) {
+		StringBuffer sb = new StringBuffer();
+		FTPFileObject fileobj = file;
+		Object obj;
+		FTPFile ftpFile;
+		while (fileobj != null) {
+			ftpFile = fileobj.getFTPFile();
+			sb.insert(0, ftpFile.getName());
+			sb.insert(0, "/");
+			obj = getParent(fileobj);
+			if (obj instanceof FTPFileObject) {
+			    fileobj = (FTPFileObject) obj;
+			} else {
+			    fileobj = null;
+			}
+		}
+		return sb.toString();
+	}
+
+	private FTPClient getFTPClient(Object element) {
+		Object obj = element;
+		while (obj != null && !(obj instanceof FTPClientObject)) {
+			obj = ((FTPFileObject) obj).getParent();
+		}
+		if (obj != null)
+			return ((FTPClientObject) obj).getFtpClient();
+		else
+			return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
+	 */
+	public Object getParent(Object element) {
+		Object parent = null;
+		if (element instanceof FTPFileObject) {
+			parent = ((FTPFileObject) element).getParent();
+		}
+		return parent;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
+	 */
+	public boolean hasChildren(Object element) {
+	    if (element instanceof FTPClientObject) {
+	        return true;
+	    } else if (element instanceof FTPFileObject) {
+			FTPFile ftpFile = ((FTPFileObject) element).getFTPFile();
+			if (ftpFile.isDirectory()) {
+			    return true;
+			} else {
+			    return false;
+			}
+	    } else {
+	        return false;
+	    }
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+	 */
+	public Object[] getElements(Object inputElement) {
+		return getChildren(inputElement);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+	 */
+	public void dispose() {
+		// Release any listeners. Other cleanup.
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
+	 *      java.lang.Object, java.lang.Object)
+	 */
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		// Register listeners on newInput, remove listeners on oldInput, other
+		// initialization.
+	}
+
+	/**
+	 * @param oldInput
+	 * @param newInput
+	 */
+	public void init(Object oldInput, Object newInput) {
+		// Auto-generated method stub
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
+	 */
+	public Object getAdapter(Class adapter) {
+		return Platform.getAdapterManager().getAdapter(this, adapter);
+	}
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/internal/FtpLabelProvider.java b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/internal/FtpLabelProvider.java
new file mode 100644
index 0000000..034d817
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/internal/FtpLabelProvider.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf & mdow - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.ftp.internal;
+
+import org.apache.commons.net.ftp.FTPFile;
+import org.eclipse.datatools.connectivity.ui.navigator.ConnectionProfileLabelProvider;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.internal.WorkbenchPlugin;
+
+/**
+ * @author mdow and brianf
+ */
+public class FtpLabelProvider extends ConnectionProfileLabelProvider  {
+
+    /**
+     * Constructor
+     */
+    public FtpLabelProvider() {
+        super();
+    }
+
+	/*
+     * (non-Javadoc)
+     * 
+     * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
+     */
+    public Image getImage(Object element) {
+        Image image;
+        if (element instanceof FTPFileObject) {
+        		FTPFile file = ((FTPFileObject) element).getFTPFile();
+                if (file.isDirectory()) {
+                    image = WorkbenchPlugin.getDefault().getSharedImages()
+                            .getImage(ISharedImages.IMG_OBJ_FOLDER);
+                } else {
+                    image = WorkbenchPlugin.getDefault().getSharedImages()
+                            .getImage(ISharedImages.IMG_OBJ_FILE);
+                }
+        } else {
+            image = super.getImage(element);
+        }
+        return image;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
+     */
+    public String getText(Object element) {
+        String text;
+        if (element instanceof FTPFileObject) {
+      		FTPFile file = ((FTPFileObject) element).getFTPFile();
+      		text = file.getName();
+        } else {
+            text = super.getText(element);
+        }
+        return text;
+    }
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/messages.properties b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/messages.properties
new file mode 100644
index 0000000..9df72de
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/messages.properties
@@ -0,0 +1,30 @@
+#*******************************************************************************
+#* Copyright (c) 2008 Sybase, Inc.
+#* 
+#* All rights reserved. This program and the accompanying materials are made
+#* available under the terms of the Eclipse Public License v1.0 which
+#* accompanies this distribution, and is available at
+#* http://www.eclipse.org/legal/epl-v10.html
+#* 
+#* Contributors: brianf & mdow - initial API and implementation
+ ******************************************************************************/
+wizardpage.title = FTP Transport Location
+wizardpage.text = Specify the FTP server name, user name, and password.
+wizardpage.label.servername = Server Name:
+wizardpage.label.username = User Name:
+wizardpage.label.password = Password:
+wizardpage.summary.label.servername = Server Name
+wizardpage.summary.label.username = User Name
+wizardpage.summary.label.password = Password
+
+wizard.title = New FTP Connection Profile
+wizard.error.title = Error
+
+propertypage.label.servername = Server Name:
+propertypage.label.username = User Name:
+propertypage.label.password = Password:
+
+ce.node.label = Server Content
+
+FtpWSMFConnection.connectmessage = Connected to 
+FtpWSMFConnection.errormessage = FTP server refused connection.
\ No newline at end of file
diff --git a/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/properties/FtpProfilePropertyPage.java b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/properties/FtpProfilePropertyPage.java
new file mode 100644
index 0000000..f2f691f
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/properties/FtpProfilePropertyPage.java
@@ -0,0 +1,182 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf & mdow - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.ftp.properties;
+
+import java.util.Properties;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.sample.ftp.FTPProfileMessages;
+import org.eclipse.datatools.connectivity.sample.ftp.IFtpProfileConstants;
+import org.eclipse.datatools.connectivity.ui.wizards.ProfileDetailsPropertyPage;
+
+
+/**
+ * FTP Profile properties
+ * @author brianf
+ */
+public class FtpProfilePropertyPage extends ProfileDetailsPropertyPage {
+
+	// ui pieces
+	private Text mServerText;
+	private Text mUIDText;
+	private Text mPWDText;
+
+	/**
+	 * Constructor for FtpProfilePropertyPage.
+	 */
+	public FtpProfilePropertyPage() {
+		super();
+		noDefaultAndApplyButton();
+	}
+
+	/**
+	 * Return the name of the FTP Server
+	 * @return
+	 */
+	public String getServerName() {
+		return this.mServerText.getText();
+	}
+
+	/**
+	 * Set the name of the FTP Server
+	 * @param server
+	 */
+	public void setServerName(String server) {
+		this.mServerText.setText(server);
+	}
+
+	/**
+	 * Return the user name for the FTP Server
+	 * @return
+	 */
+	public String getUserName() {
+		return this.mUIDText.getText();
+	}
+
+	/**
+	 * Set the user name for the FTP Server
+	 * @param user
+	 */
+	public void setUserName(String user) {
+		this.mUIDText.setText(user);
+	}
+
+	/**
+	 * Return the password for the FTP Server
+	 * @return
+	 */
+	public String getPassword() {
+		return this.mPWDText.getText();
+	}
+
+	/**
+	 * Set the password for the FTP Server
+	 * @param pwd
+	 */
+	public void setPassword(String pwd) {
+		this.mPWDText.setText(pwd);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.preference.IPreferencePage#performOk()
+	 */
+	public boolean performOk() {
+		IConnectionProfile profile = getConnectionProfile();
+		Properties props = new Properties();
+		props.setProperty(IFtpProfileConstants.FTP_SERVER, getServerName());
+		props.setProperty(IFtpProfileConstants.FTP_UID, getUserName());
+		props.setProperty(IFtpProfileConstants.FTP_PWD, getPassword());
+		profile.setBaseProperties(props);
+		return true;
+	}
+
+	/**
+	 * Initialize the controls from the profile
+	 */
+	private void initControls() {
+		IConnectionProfile profile = getConnectionProfile();
+		String server = profile.getBaseProperties().getProperty(IFtpProfileConstants.FTP_SERVER);
+		if (server != null) {
+			setServerName(server);
+		}
+		String uid = profile.getBaseProperties().getProperty(IFtpProfileConstants.FTP_UID);
+		if (uid != null) {
+			setUserName(uid);
+		}
+		String pwd = profile.getBaseProperties().getProperty(IFtpProfileConstants.FTP_PWD);
+		if (pwd != null) {
+			setPassword(pwd);
+		}
+		setErrorMessage(null);
+	}
+
+	protected Properties collectProperties() {
+		Properties props = new Properties();
+		props.setProperty(IFtpProfileConstants.FTP_SERVER, getServerName());
+		props.setProperty(IFtpProfileConstants.FTP_UID, getUserName());
+		props.setProperty(IFtpProfileConstants.FTP_PWD, getPassword());
+		return props;
+	}
+
+	protected void createCustomContents(Composite parent) {
+		Composite content = new Composite(parent, SWT.NULL);
+		GridLayout layout = new GridLayout(2, false);
+		content.setLayout(layout);
+
+		Label label = new Label(content, SWT.NULL);
+		label.setLayoutData(new GridData());
+		label.setText(FTPProfileMessages.getString("propertypage.label.servername")); //$NON-NLS-1$
+
+		this.mServerText = new Text(content, SWT.BORDER);
+		this.mServerText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		this.mServerText.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				// empty
+			}
+		});
+
+		label = new Label(content, SWT.NULL);
+		label.setLayoutData(new GridData());
+		label.setText(FTPProfileMessages.getString("propertypage.label.username")); //$NON-NLS-1$
+
+		this.mUIDText = new Text(content, SWT.BORDER);
+		this.mUIDText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		this.mUIDText.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				// empty
+			}
+		});
+
+		label = new Label(content, SWT.NULL);
+		label.setLayoutData(new GridData());
+		label.setText(FTPProfileMessages.getString("propertypage.label.password")); //$NON-NLS-1$
+
+		this.mPWDText = new Text(content, SWT.BORDER);
+		this.mPWDText.setEchoChar('*');
+		this.mPWDText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		this.mPWDText.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				// empty
+			}
+		});
+
+		initControls();
+	}
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/wizards/FtpConnectionProfileWizard.java b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/wizards/FtpConnectionProfileWizard.java
new file mode 100644
index 0000000..1fe4c8c
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/wizards/FtpConnectionProfileWizard.java
@@ -0,0 +1,118 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf & mdow - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.ftp.wizards;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.internal.ui.wizards.ISummaryDataSource;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.SummaryWizardPage;
+import org.eclipse.datatools.connectivity.sample.ftp.FTPProfileMessages;
+import org.eclipse.datatools.connectivity.sample.ftp.IFtpProfileConstants;
+import org.eclipse.datatools.connectivity.ui.wizards.NewConnectionProfileWizard;
+import org.eclipse.jface.wizard.Wizard;
+
+
+/**
+ * This class is the wizard for creating new ftp connection profiles.
+ * 
+ * @author mdow
+ * @see Wizard
+ */
+public class FtpConnectionProfileWizard extends NewConnectionProfileWizard {
+
+	// The file property page
+	private FtpPropertyWizardPage mPropPage;
+
+	// The summary page
+	private SummaryWizardPage mSummaryPage;
+		
+	private Wizard mParentWizard;
+	
+	private boolean showProjectPage = true;
+
+	/**
+	 * Default constructor
+	 */
+	public FtpConnectionProfileWizard() {
+		super();
+		setWindowTitle(FTPProfileMessages.getString("wizard.title")); //$NON-NLS-1$
+//		setDefaultPageImageDescriptor(FtpProfilePlugin.getDefault().getImageDescriptor("syb_banner.gif")); //$NON-NLS-1$
+	}
+	
+	public void setShowProjectPage ( boolean flag ) {
+		this.showProjectPage = flag;
+	}
+	
+	public boolean getShowProjectPage() {
+		return this.showProjectPage;
+	}
+
+	/**
+	 * @see Wizard#performFinish
+	 */
+	public boolean performFinish() {
+		
+		boolean flag = super.performFinish();
+		
+		if (!flag) return flag;
+				
+		return flag;
+	}
+
+	/**
+	 * @param parent
+	 */
+	public void setParentWizard(Wizard parent) {
+		this.mParentWizard = parent;
+	}
+
+	/**
+	 * @return
+	 */
+	public Wizard getParentWizard() {
+		return this.mParentWizard;
+	}
+
+	public List getSummaryData() {
+		List data = new ArrayList();
+		if (this.mParentWizard != null && this.mParentWizard instanceof ISummaryDataSource) {
+			ISummaryDataSource wiz = (ISummaryDataSource) this.mParentWizard;
+			data.addAll(wiz.getSummaryData());
+		}
+		data.addAll(super.getSummaryData());
+		return data;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.ui.wizards.NewConnectionProfileWizard#addCustomPages()
+	 */
+	public void addCustomPages() {
+		this.mPropPage = new FtpPropertyWizardPage("PropertyPage"); //$NON-NLS-1$
+		addPage(this.mPropPage);
+
+		this.mSummaryPage = new SummaryWizardPage(this);
+		addPage(this.mSummaryPage);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.ui.wizards.NewConnectionProfileWizard#getProfileProperties()
+	 */
+	public Properties getProfileProperties() {
+		Properties props = new Properties();
+		props.setProperty(IFtpProfileConstants.FTP_SERVER, this.mPropPage.getServerName());
+		props.setProperty(IFtpProfileConstants.FTP_UID, this.mPropPage.getUserName());
+		props.setProperty(IFtpProfileConstants.FTP_PWD, this.mPropPage.getPassword());
+		
+		return props;
+	}
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/wizards/FtpPropertyWizardPage.java b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/wizards/FtpPropertyWizardPage.java
new file mode 100644
index 0000000..06a98f9
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample.ftp/src/org/eclipse/datatools/connectivity/sample/ftp/wizards/FtpPropertyWizardPage.java
@@ -0,0 +1,181 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf & mdow - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.ftp.wizards;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sample.ftp.FTPProfileMessages;
+import org.eclipse.datatools.connectivity.ui.wizards.ConnectionProfileDetailsPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+
+/**
+ * FTP Profile Property wizard page
+ * @author mdow & brianf
+ */
+public class FtpPropertyWizardPage extends ConnectionProfileDetailsPage {
+
+	// various UI components
+	private Text mServerText;
+	private Text mUIDText;
+	private Text mPWDText;
+
+	/**
+	 * Constructor
+	 * @param pageName
+	 */
+	public FtpPropertyWizardPage(String pageName) {
+		super(pageName);
+		setTitle(FTPProfileMessages.getString("wizardpage.title")); //$NON-NLS-1$
+		setDescription(FTPProfileMessages.getString("wizardpage.text")); //$NON-NLS-1$
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.ui.wizards.ConnectionProfileDetailsPage#createCustomControl(org.eclipse.swt.widgets.Composite)
+	 */
+	public void createCustomControl(Composite parent) {
+		Composite content = new Composite(parent, SWT.NULL);
+		GridLayout layout = new GridLayout(2, false);
+		content.setLayout(layout);
+
+		Label label = new Label(content, SWT.NULL);
+		label.setLayoutData(new GridData());
+		label.setText(FTPProfileMessages.getString("wizardpage.label.servername")); //$NON-NLS-1$
+
+		this.mServerText = new Text(content, SWT.BORDER);
+		this.mServerText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		this.mServerText.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				validate();
+			}
+		});
+
+		label = new Label(content, SWT.NULL);
+		label.setLayoutData(new GridData());
+		label.setText(FTPProfileMessages.getString("wizardpage.label.username")); //$NON-NLS-1$
+
+		this.mUIDText = new Text(content, SWT.BORDER);
+		this.mUIDText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		this.mUIDText.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				validate();
+			}
+		});
+
+		label = new Label(content, SWT.NULL);
+		label.setLayoutData(new GridData());
+		label.setText(FTPProfileMessages.getString("wizardpage.label.password")); //$NON-NLS-1$
+
+		this.mPWDText = new Text(content, SWT.BORDER);
+		this.mPWDText.setEchoChar('*');
+		this.mPWDText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		this.mPWDText.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				validate();
+			}
+		});
+		
+//		setControl(content);
+		setPageComplete(false);
+	}
+
+	/**
+	 * Return the name of the FTP Server
+	 * @return
+	 */
+	public String getServerName() {
+		return this.mServerText.getText();
+	}
+
+	/**
+	 * Set the name of the FTP Server
+	 * @param server
+	 */
+	public void setServerName(String server) {
+		this.mServerText.setText(server);
+	}
+
+	/**
+	 * Return the user name for the FTP Server
+	 * @return
+	 */
+	public String getUserName() {
+		return this.mUIDText.getText();
+	}
+
+	/**
+	 * Set the user name for the FTP Server
+	 * @param user
+	 */
+	public void setUserName(String user) {
+		this.mUIDText.setText(user);
+	}
+
+	/**
+	 * Return the password for the FTP Server
+	 * @return
+	 */
+	public String getPassword() {
+		return this.mPWDText.getText();
+	}
+
+	/**
+	 * Set the password for the FTP Server
+	 * @param pwd
+	 */
+	public void setPassword(String pwd) {
+		this.mPWDText.setText(pwd);
+	}
+
+	/**
+	 * Validate the profile
+	 */
+	private void validate() {
+		String server = getServerName();
+		String uid = getUserName();
+		String pwd = getPassword();
+		
+		if (server != null && uid != null && pwd != null) {
+			setPageComplete(true);
+		}
+		else {
+			setPageComplete(false);
+		}
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.internal.ui.wizards.BaseWizardPage#getSummaryData()
+	 */
+	public List getSummaryData() {
+		List data = new ArrayList();
+		data.add(new String[] {FTPProfileMessages.getString("wizardpage.summary.label.servername"), //$NON-NLS-1$ 
+				this.getServerName()});
+		data.add(new String[] {FTPProfileMessages.getString("wizardpage.summary.label.username"),  //$NON-NLS-1$
+				this.getUserName()});
+		String pwd = this.getPassword();
+		String mask = ""; //$NON-NLS-1$
+		for (int i = 0; i < pwd.length(); i++) {
+			mask = mask + "*"; //$NON-NLS-1$
+		}
+		data.add(new String[] {FTPProfileMessages.getString("wizardpage.summary.label.password"),  //$NON-NLS-1$
+				mask});
+		return data;
+	}
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample/.classpath b/examples/org.eclipse.datatools.connectivity.sample/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/examples/org.eclipse.datatools.connectivity.sample/.gitignore b/examples/org.eclipse.datatools.connectivity.sample/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/examples/org.eclipse.datatools.connectivity.sample/.project b/examples/org.eclipse.datatools.connectivity.sample/.project
new file mode 100644
index 0000000..c4936d2
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.sample</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/examples/org.eclipse.datatools.connectivity.sample/.settings/org.eclipse.jdt.core.prefs b/examples/org.eclipse.datatools.connectivity.sample/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..15288e5
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Thu Sep 20 15:32:39 PDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.4
diff --git a/examples/org.eclipse.datatools.connectivity.sample/META-INF/MANIFEST.MF b/examples/org.eclipse.datatools.connectivity.sample/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..62bdf99
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Sample Plug-in
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.sample; singleton:=true
+Bundle-Version: 1.0.0
+Bundle-Activator: org.eclipse.datatools.connectivity.sample.Activator
+Bundle-Vendor: Eclipse.org
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.core.resources,
+ org.eclipse.datatools.connectivity.ui.dse
+Eclipse-LazyStart: true
diff --git a/examples/org.eclipse.datatools.connectivity.sample/build.properties b/examples/org.eclipse.datatools.connectivity.sample/build.properties
new file mode 100644
index 0000000..2b0d95b
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = plugin.xml,\
+               META-INF/,\
+               .
diff --git a/examples/org.eclipse.datatools.connectivity.sample/plugin.xml b/examples/org.eclipse.datatools.connectivity.sample/plugin.xml
new file mode 100644
index 0000000..4cf1e3b
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample/plugin.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+
+   <extension
+         point="org.eclipse.ui.popupMenus">
+      <objectContribution
+            objectClass="org.eclipse.core.resources.IFile"
+            id="org.eclipse.datatools.connectivity.sample.contribution1">
+         <menu
+               label="Connectivity Sample"
+               path="additions"
+               id="org.eclipse.datatools.connectivity.sample.menu1">
+            <separator
+                  name="group1">
+            </separator>
+         </menu>
+         <action
+               label="Launch Sample"
+               class="org.eclipse.datatools.connectivity.sample.popup.actions.LaunchSample"
+               menubarPath="org.eclipse.datatools.connectivity.sample.menu1/group1"
+               enablesFor="*"
+               id="org.eclipse.datatools.connectivity.sample.LaunchSample">
+         </action>
+         <action
+               label="Create Connection"
+               class="org.eclipse.datatools.connectivity.sample.popup.actions.CreateConnection"
+               menubarPath="org.eclipse.datatools.connectivity.sample.menu1/group1"
+               enablesFor="*"
+               id="org.eclipse.datatools.connectivity.sample.CreateConnection">
+         </action>
+      </objectContribution>
+   </extension>
+
+</plugin>
diff --git a/examples/org.eclipse.datatools.connectivity.sample/src/org/eclipse/datatools/connectivity/sample/Activator.java b/examples/org.eclipse.datatools.connectivity.sample/src/org/eclipse/datatools/connectivity/sample/Activator.java
new file mode 100644
index 0000000..762f029
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample/src/org/eclipse/datatools/connectivity/sample/Activator.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sample;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.datatools.connectivity.sample";
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+	/**
+	 * Returns an image descriptor for the image file at the given
+	 * plug-in relative path
+	 *
+	 * @param path the path
+	 * @return the image descriptor
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return imageDescriptorFromPlugin(PLUGIN_ID, path);
+	}
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample/src/org/eclipse/datatools/connectivity/sample/popup/actions/CreateConnection.java b/examples/org.eclipse.datatools.connectivity.sample/src/org/eclipse/datatools/connectivity/sample/popup/actions/CreateConnection.java
new file mode 100644
index 0000000..c2e1b76
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample/src/org/eclipse/datatools/connectivity/sample/popup/actions/CreateConnection.java
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.popup.actions;
+
+import java.io.File;
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.ConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.ConnectionProfileException;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.drivers.DriverManager;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IWorkbenchPart;
+
+public class CreateConnection implements IObjectActionDelegate {
+
+	public CreateConnection() {
+		super();
+	}
+
+	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+	}
+
+	public void run(IAction action) {
+		// Create new driver instance
+		String jarlist = System.getProperty("user.home") + File.separator
+				+ "derby.jar";
+		String uniqueDriverInstanceName = generateUniqueDriverDefinitionName();
+		DriverInstance driverInstance = DriverManager
+				.getInstance()
+				.createNewDriverInstance(
+						"org.eclipse.datatools.connectivity.db.derby101.genericDriverTemplate",
+						uniqueDriverInstanceName, jarlist);
+
+		// Create new connection profile using the new driver instance
+		String uniqueConnectionProfileName = generateUniqueConnectionProfileName();
+
+		Properties connectionProfileProperties = driverInstance
+				.getPropertySet().getBaseProperties();
+		String databaseName = "SAMPLE";
+		connectionProfileProperties.setProperty(
+				ConnectionProfileConstants.PROP_DRIVER_DEFINITION_ID,
+				driverInstance.getId());
+		connectionProfileProperties.setProperty(
+				IJDBCDriverDefinitionConstants.DATABASE_NAME_PROP_ID, databaseName);
+		connectionProfileProperties.setProperty(
+				IJDBCDriverDefinitionConstants.USERNAME_PROP_ID, "");
+		connectionProfileProperties.setProperty(
+				IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID, "");
+		String databaseLocation = System.getProperty("user.home")
+				+ File.separator + "DerbyDB" + File.separator;
+		connectionProfileProperties.setProperty(
+				IJDBCDriverDefinitionConstants.URL_PROP_ID, "jdbc:derby:"
+						+ databaseLocation + databaseName + ";create=true");
+		try {
+			ProfileManager
+					.getInstance()
+					.createProfile(
+							uniqueConnectionProfileName,
+							"",
+							"org.eclipse.datatools.connectivity.db.derby.embedded.connectionProfile",
+							connectionProfileProperties, "", false);
+		} catch (ConnectionProfileException e) {
+			e.printStackTrace();
+		}
+	}
+
+	private String generateUniqueDriverDefinitionName() {
+		String baseDriverInstanceName = "SampleDriver";
+		int index = 1;
+		String testName = baseDriverInstanceName + String.valueOf(index);
+		while (DriverManager.getInstance().getDriverInstanceByName(testName) != null) {
+			index++;
+			testName = baseDriverInstanceName + String.valueOf(index);
+		}
+		return testName;
+	}
+
+	private String generateUniqueConnectionProfileName() {
+		String baseConnectionProfileName = "SampleConnection";
+		int index = 1;
+		String testName = baseConnectionProfileName + String.valueOf(index);
+		while (ProfileManager.getInstance().getProfileByName(testName) != null) {
+			index++;
+			testName = baseConnectionProfileName + String.valueOf(index);
+		}
+		return testName;
+	}
+
+	public void selectionChanged(IAction action, ISelection selection) {
+	}
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample/src/org/eclipse/datatools/connectivity/sample/popup/actions/LaunchSample.java b/examples/org.eclipse.datatools.connectivity.sample/src/org/eclipse/datatools/connectivity/sample/popup/actions/LaunchSample.java
new file mode 100644
index 0000000..d17fc86
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample/src/org/eclipse/datatools/connectivity/sample/popup/actions/LaunchSample.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.popup.actions;
+
+import org.eclipse.datatools.connectivity.sample.wizards.SampleConnectionWizard;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IActionDelegate;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PlatformUI;
+
+public class LaunchSample implements IObjectActionDelegate {
+
+	/**
+	 * Constructor for Action1.
+	 */
+	public LaunchSample() {
+		super();
+	}
+
+	/**
+	 * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
+	 */
+	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+	}
+
+	/**
+	 * @see IActionDelegate#run(IAction)
+	 */
+	public void run(IAction action) {
+		SampleConnectionWizard wizard = new SampleConnectionWizard();
+		wizard.setNeedsProgressMonitor(true);
+
+		WizardDialog dialog = new WizardDialog(Display.getCurrent()
+				.getActiveShell(), wizard);
+		dialog.setMinimumPageSize(300, 350);
+		dialog.create();
+		dialog.open();
+	}
+
+	/**
+	 * @see IActionDelegate#selectionChanged(IAction, ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+	}
+
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample/src/org/eclipse/datatools/connectivity/sample/wizards/SampleConnectionWizard.java b/examples/org.eclipse.datatools.connectivity.sample/src/org/eclipse/datatools/connectivity/sample/wizards/SampleConnectionWizard.java
new file mode 100644
index 0000000..10a2f76
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample/src/org/eclipse/datatools/connectivity/sample/wizards/SampleConnectionWizard.java
@@ -0,0 +1,168 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.wizards;
+
+import java.sql.Connection;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IManagedConnection;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileProvider;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.preference.PreferenceDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.window.SameShellProvider;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.ui.dialogs.PropertyDialogAction;
+import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
+
+public class SampleConnectionWizard extends Wizard {
+
+	private SelectExistingConnectionWizardPage myExistingConnectionPage;
+
+	private static final String EXISTING_CONNECTION_PAGE_NAME = "org.eclipse.datatools.connectivity.sample.SelectExistingConnectionWizardPage";
+
+	private static final String WIZARD_TITLE = "Connectivity Sample Wizard";
+
+	public SampleConnectionWizard() {
+		super();
+		setWindowTitle(WIZARD_TITLE);
+	}
+
+	public boolean performFinish() {
+		IConnectionProfile connectionProfile = myExistingConnectionPage
+				.getSelectedConnection();
+		if (connectionProfile != null) {
+			Connection connection = getActiveConnection(connectionProfile);
+			try {
+				if (connection != null && !connection.isClosed()) {
+					new DisplayMessage(WIZARD_TITLE, connectionProfile
+							.getName()
+							+ " : Keywords : "
+							+ connection.getMetaData().getSQLKeywords()).run();
+				} else {
+					return false;
+				}
+			} catch (Exception e) {
+				e.printStackTrace();
+				return false;
+			}
+		}
+		return true;
+	}
+
+	private Connection getActiveConnection(IConnectionProfile connectionProfile) {
+		Connection activeConnection = null;			
+		IManagedConnection connection = null;
+		IStatus connectionStatus = null;
+		
+		if (connectionProfile.getConnectionState() == IConnectionProfile.CONNECTED_STATE) {
+			activeConnection = (Connection) connectionProfile.getManagedConnection("java.sql.Connection").getConnection().getRawConnection();
+		} else {
+			connectionStatus = connectionProfile.connectWithoutJob();
+			if (connectionProfile.getConnectionState() == IConnectionProfile.CONNECTED_STATE) {
+				return (Connection) connectionProfile.getManagedConnection("java.sql.Connection").getConnection().getRawConnection();
+			}
+			while (connectionProfile.getConnectionState() != IConnectionProfile.CONNECTED_STATE) {		
+				// display error message
+				new DisplayMessage(WIZARD_TITLE, connectionStatus
+						.getChildren()[0].getException().getLocalizedMessage()).run();
+
+				// Prompt to fix properties
+				PropertyDialogAction propertyDialogAction = new PropertyDialogAction(
+						new SameShellProvider(this.getShell()),
+						new SampleWizardSelectionProvider(connectionProfile));
+
+				StructuredSelection selection = new StructuredSelection(
+						connectionProfile);
+				propertyDialogAction.selectionChanged(selection);
+				if (propertyDialogAction.isApplicableForSelection()) {
+					PreferenceDialog dialog = propertyDialogAction
+							.createDialog();
+					String initialPage = ((ConnectionProfileProvider) connectionProfile
+							.getProvider()).getPropertiesPersistenceHook()
+							.getConnectionPropertiesPageID();
+					if (initialPage != null) {
+						((IWorkbenchPreferenceContainer) dialog).openPage(
+								initialPage, null);
+					}
+					if (dialog.open() == Dialog.CANCEL) {
+						return activeConnection;
+					}
+				}
+				connectionStatus = connectionProfile.connectWithoutJob();
+				connection = connectionProfile.getManagedConnection("java.sql.Connection");
+			}
+			activeConnection = (Connection) connection.getConnection().getRawConnection();
+		}
+
+		return activeConnection;
+	}
+
+	private class SampleWizardSelectionProvider implements ISelectionProvider {
+
+		private IStructuredSelection selection;
+
+		public SampleWizardSelectionProvider(
+				IConnectionProfile connectionProfile) {
+			selection = new StructuredSelection(connectionProfile);
+		}
+
+		public void addSelectionChangedListener(
+				ISelectionChangedListener listener) {
+		}
+
+		public ISelection getSelection() {
+			return selection;
+		}
+
+		public void removeSelectionChangedListener(
+				ISelectionChangedListener listener) {
+		}
+
+		public void setSelection(ISelection selection) {
+		}
+	}
+
+	public void addPages() {
+		super.addPages();
+
+		myExistingConnectionPage = new SelectExistingConnectionWizardPage(
+				EXISTING_CONNECTION_PAGE_NAME);
+		addPage(myExistingConnectionPage);
+	}
+
+	public boolean canFinish() {
+		boolean canFinish = false;
+		if (myExistingConnectionPage.getSelectedConnection() != null) {
+			canFinish = true;
+		}
+		return canFinish;
+	}
+
+	public class DisplayMessage implements Runnable {
+		String title, message;
+
+		public DisplayMessage(String title, String message) {
+			this.title = title;
+			this.message = message;
+		}
+
+		public void run() {
+			MessageDialog.openInformation(getShell(), title, message);
+		}
+	}
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample/src/org/eclipse/datatools/connectivity/sample/wizards/SelectExistingConnectionProfileDialogPage.java b/examples/org.eclipse.datatools.connectivity.sample/src/org/eclipse/datatools/connectivity/sample/wizards/SelectExistingConnectionProfileDialogPage.java
new file mode 100644
index 0000000..ea6af70
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample/src/org/eclipse/datatools/connectivity/sample/wizards/SelectExistingConnectionProfileDialogPage.java
@@ -0,0 +1,112 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.wizards;
+
+import java.util.Arrays;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Vector;
+
+import org.eclipse.datatools.connectivity.ConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.drivers.DriverManager;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
+import org.eclipse.datatools.connectivity.ui.dse.dialogs.ConnectionDisplayProperty;
+import org.eclipse.datatools.connectivity.ui.dse.dialogs.ExistingConnectionProfilesDialogPage;
+import org.eclipse.swt.widgets.Event;
+
+public class SelectExistingConnectionProfileDialogPage extends
+		ExistingConnectionProfilesDialogPage {
+	private SelectExistingConnectionWizardPage page;
+	
+	public SelectExistingConnectionProfileDialogPage(SelectExistingConnectionWizardPage page, boolean isShowProperties, boolean isPropertiesSectionExpanded){
+		super(isShowProperties, isPropertiesSectionExpanded);
+		this.page = page;
+	}
+
+	protected ConnectionDisplayProperty[] updateConnectionDisplayProperties(
+			IConnectionProfile connectionProfile,
+			ConnectionDisplayProperty[] defaultDisplayProperties) {
+		ConnectionDisplayProperty[] properties = null;
+		Vector propertiesCollection = new Vector();
+		propertiesCollection.addAll(Arrays.asList(defaultDisplayProperties));
+
+		Properties baseProperties = connectionProfile.getBaseProperties();
+
+		propertiesCollection
+				.add(new ConnectionDisplayProperty(
+						"Database",
+						(String) baseProperties
+								.get(IJDBCDriverDefinitionConstants.DATABASE_NAME_PROP_ID)));
+		propertiesCollection
+				.add(new ConnectionDisplayProperty(
+						"JDBC Driver Class",
+						(String) baseProperties
+								.get(IJDBCDriverDefinitionConstants.DRIVER_CLASS_PROP_ID)));
+		propertiesCollection.add(new ConnectionDisplayProperty(
+				"Class Location", getJarList(connectionProfile)));
+		propertiesCollection.add(new ConnectionDisplayProperty(
+				"Connection URL", (String) baseProperties
+						.get(IJDBCDriverDefinitionConstants.URL_PROP_ID)));
+		propertiesCollection.add(new ConnectionDisplayProperty("User ID",
+				(String) baseProperties
+						.get(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID)));
+		properties = new ConnectionDisplayProperty[propertiesCollection.size()];
+		propertiesCollection.toArray(properties);
+
+		return properties;
+	}
+
+	protected IConnectionProfile[] getConnectionsToDisplay() {
+		Vector filteredProfilesCollection = new Vector();
+		IConnectionProfile[] filteredProfiles = new IConnectionProfile[] {};
+		IConnectionProfile[] allProfiles = ProfileManager.getInstance()
+				.getProfiles(false);
+		final int infoLength = allProfiles.length;
+		if (infoLength > 0) {
+			for (int index = 0; index < infoLength; index++) {
+				Map factories =  allProfiles[index]
+						.getProvider().getConnectionFactories();
+				if ((factories != null)
+						&& (factories.containsKey("java.sql.Connection"))) {
+					filteredProfilesCollection.add(allProfiles[index]);
+				}
+				filteredProfiles = new IConnectionProfile[filteredProfilesCollection
+						.size()];
+				filteredProfilesCollection.copyInto(filteredProfiles);
+			}
+		}
+		return filteredProfiles;
+	}
+
+	private String getJarList(IConnectionProfile connectionProfile) {
+		String jarList = "";
+		DriverInstance driverInstance = null;
+		String driverID = connectionProfile.getBaseProperties().getProperty(
+				ConnectionProfileConstants.PROP_DRIVER_DEFINITION_ID);
+		if (driverID != null) {
+			driverInstance = DriverManager.getInstance().getDriverInstanceByID(
+					driverID);
+			if (driverInstance != null) {
+				jarList = driverInstance.getJarList();
+			}
+		}
+		return jarList;
+	}
+	
+	public void handleEvent(Event event) {
+		super.handleEvent(event);
+		page.handleEvent(event);
+	}
+	
+}
diff --git a/examples/org.eclipse.datatools.connectivity.sample/src/org/eclipse/datatools/connectivity/sample/wizards/SelectExistingConnectionWizardPage.java b/examples/org.eclipse.datatools.connectivity.sample/src/org/eclipse/datatools/connectivity/sample/wizards/SelectExistingConnectionWizardPage.java
new file mode 100644
index 0000000..c122932
--- /dev/null
+++ b/examples/org.eclipse.datatools.connectivity.sample/src/org/eclipse/datatools/connectivity/sample/wizards/SelectExistingConnectionWizardPage.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sample.wizards;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+
+public class SelectExistingConnectionWizardPage extends WizardPage {
+
+	SelectExistingConnectionProfileDialogPage dialogPage;
+	
+	protected SelectExistingConnectionWizardPage(String pageName) {
+		super(pageName);
+	}
+
+	public void createControl(Composite parent) {
+        setTitle("Sample Page"); //$NON-NLS-1$
+        setMessage("Select a connection.  This sample wizard will only display JDBC connections \nto demonstrate the filter capabilities of the dialog page.");
+        
+        Composite container = new Composite(parent, SWT.NULL);
+        GridLayout gridLayout = new GridLayout();
+        gridLayout.horizontalSpacing = 0;
+        gridLayout.marginWidth = 0;
+        gridLayout.marginHeight = 0;
+        container.setLayout(gridLayout);
+        
+        GridData gridData = new GridData(GridData.FILL_BOTH);
+        gridData.grabExcessHorizontalSpace = true;
+        gridData.grabExcessVerticalSpace = true;
+        container.setLayoutData(gridData);
+
+        dialogPage = new SelectExistingConnectionProfileDialogPage (this, true, true);
+        dialogPage.createControl(container); 
+        setControl(container);
+	}
+
+	public void handleEvent(Event event) {
+		this.getContainer().updateButtons();
+	}
+	
+	public IConnectionProfile getSelectedConnection(){
+		IConnectionProfile connection =null;
+		if(dialogPage != null){
+			connection = dialogPage.getSelectedConnection();
+		}
+		return connection;
+	}
+}
diff --git a/examples/org.eclipse.datatools.enablement.rcp/.classpath b/examples/org.eclipse.datatools.enablement.rcp/.classpath
new file mode 100644
index 0000000..2d1a430
--- /dev/null
+++ b/examples/org.eclipse.datatools.enablement.rcp/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/examples/org.eclipse.datatools.enablement.rcp/.project b/examples/org.eclipse.datatools.enablement.rcp/.project
new file mode 100644
index 0000000..29ae241
--- /dev/null
+++ b/examples/org.eclipse.datatools.enablement.rcp/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.datatools.enablement.rcp</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.PluginNature</nature>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+		<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>

+	</natures>

+</projectDescription>

diff --git a/examples/org.eclipse.datatools.enablement.rcp/.settings/org.eclipse.jdt.core.prefs b/examples/org.eclipse.datatools.enablement.rcp/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..52122d7
--- /dev/null
+++ b/examples/org.eclipse.datatools.enablement.rcp/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+#Fri Dec 05 13:47:17 GMT-07:00 2008

+eclipse.preferences.version=1

+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5

+org.eclipse.jdt.core.compiler.compliance=1.5

+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error

+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error

+org.eclipse.jdt.core.compiler.source=1.5

diff --git a/examples/org.eclipse.datatools.enablement.rcp/META-INF/MANIFEST.MF b/examples/org.eclipse.datatools.enablement.rcp/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..4a8014d
--- /dev/null
+++ b/examples/org.eclipse.datatools.enablement.rcp/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Rcp Plug-in
+Bundle-SymbolicName: org.eclipse.datatools.enablement.rcp; singleton:=true
+Bundle-Version: 1.1.0.qualifier
+Bundle-Activator: org.eclipse.datatools.enablement.rcp.Activator
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: org.eclipse.debug.ui;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.emf.ecore.editor;bundle-version="[2.2.0,3.0.0)",
+ org.eclipse.help.ui;bundle-version="[3.2.0,4.0.0)", 
+ org.eclipse.ui.views.properties.tabbed;bundle-version="[3.2.0,4.0.0)"
diff --git a/examples/org.eclipse.datatools.enablement.rcp/build.properties b/examples/org.eclipse.datatools.enablement.rcp/build.properties
new file mode 100644
index 0000000..e64cd75
--- /dev/null
+++ b/examples/org.eclipse.datatools.enablement.rcp/build.properties
@@ -0,0 +1,8 @@
+source.. = src/

+output.. = bin/

+bin.includes = plugin.xml,\

+               META-INF/,\

+               .,\

+               icons/,\

+               splash.bmp,\

+               plugin_customization.ini

diff --git a/examples/org.eclipse.datatools.enablement.rcp/dtprcp.product b/examples/org.eclipse.datatools.enablement.rcp/dtprcp.product
new file mode 100644
index 0000000..4513b99
--- /dev/null
+++ b/examples/org.eclipse.datatools.enablement.rcp/dtprcp.product
@@ -0,0 +1,230 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?pde version="3.5"?>
+
+<product name="DTP Enablement RCP" uid="org.eclipse.datatools.enablement.rcp" id="org.eclipse.datatools.enablement.rcp.product" application="org.eclipse.datatools.enablement.rcp.application" version="1.0.0.qualifier" useFeatures="false" includeLaunchers="true">
+
+   <aboutInfo>
+      <image path="/org.eclipse.datatools.enablement.rcp/icons/alt_about.gif"/>
+   </aboutInfo>
+
+   <configIni use="default">
+   </configIni>
+
+   <launcherArgs>
+      <programArgs>-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -clean</programArgs>
+      <vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts</vmArgsMac>
+   </launcherArgs>
+
+   <windowImages i16="icons/alt_window_16.gif" i32="icons/alt_window_32.gif"/>
+
+   <splash
+      startupProgressRect="5,275,445,15"
+      startupMessageRect="7,252,445,20"
+      startupForegroundColor="000000" />
+   <launcher name="dtprcp">
+      <linux icon="/org.eclipse.datatools.enablement.rcp/icons/alt_launcher.xpm"/>
+      <solaris/>
+      <win useIco="false">
+         <bmp/>
+      </win>
+   </launcher>
+
+   <vm>
+      <linux>org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/OSGi%Minimum-1.0</linux>
+   </vm>
+
+   <plugins>
+      <plugin id="com.ibm.icu"/>
+      <plugin id="javax.servlet"/>
+      <plugin id="javax.servlet.jsp"/>
+      <plugin id="javax.transaction" fragment="true"/>
+      <plugin id="net.sourceforge.lpg.lpgjavaruntime"/>
+      <plugin id="org.apache.ant"/>
+      <plugin id="org.apache.commons.el"/>
+      <plugin id="org.apache.commons.logging"/>
+      <plugin id="org.apache.jasper"/>
+      <plugin id="org.apache.lucene"/>
+      <plugin id="org.apache.lucene.analysis"/>
+      <plugin id="org.eclipse.ant.core"/>
+      <plugin id="org.eclipse.compare"/>
+      <plugin id="org.eclipse.compare.core"/>
+      <plugin id="org.eclipse.core.commands"/>
+      <plugin id="org.eclipse.core.contenttype"/>
+      <plugin id="org.eclipse.core.databinding"/>
+      <plugin id="org.eclipse.core.databinding.observable"/>
+      <plugin id="org.eclipse.core.databinding.property"/>
+      <plugin id="org.eclipse.core.expressions"/>
+      <plugin id="org.eclipse.core.filebuffers"/>
+      <plugin id="org.eclipse.core.filesystem"/>
+      <plugin id="org.eclipse.core.filesystem.linux.x86" fragment="true"/>
+      <plugin id="org.eclipse.core.jobs"/>
+      <plugin id="org.eclipse.core.net"/>
+      <plugin id="org.eclipse.core.net.linux.x86" fragment="true"/>
+      <plugin id="org.eclipse.core.resources"/>
+      <plugin id="org.eclipse.core.resources.compatibility" fragment="true"/>
+      <plugin id="org.eclipse.core.runtime"/>
+      <plugin id="org.eclipse.core.runtime.compatibility"/>
+      <plugin id="org.eclipse.core.runtime.compatibility.auth"/>
+      <plugin id="org.eclipse.core.runtime.compatibility.registry" fragment="true"/>
+      <plugin id="org.eclipse.core.variables"/>
+      <plugin id="org.eclipse.datatools.connectivity"/>
+      <plugin id="org.eclipse.datatools.connectivity.apache.derby"/>
+      <plugin id="org.eclipse.datatools.connectivity.apache.derby.dbdefinition"/>
+      <plugin id="org.eclipse.datatools.connectivity.apache.derby.ui"/>
+      <plugin id="org.eclipse.datatools.connectivity.db.generic"/>
+      <plugin id="org.eclipse.datatools.connectivity.db.generic.ui"/>
+      <plugin id="org.eclipse.datatools.connectivity.sqm.core"/>
+      <plugin id="org.eclipse.datatools.connectivity.sqm.core.ui"/>
+      <plugin id="org.eclipse.datatools.connectivity.sqm.server.ui"/>
+      <plugin id="org.eclipse.datatools.connectivity.ui"/>
+      <plugin id="org.eclipse.datatools.connectivity.ui.dse"/>
+      <plugin id="org.eclipse.datatools.enablement.hsqldb"/>
+      <plugin id="org.eclipse.datatools.enablement.hsqldb.dbdefinition"/>
+      <plugin id="org.eclipse.datatools.enablement.hsqldb.ui"/>
+      <plugin id="org.eclipse.datatools.enablement.ibm.db2.iseries"/>
+      <plugin id="org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition"/>
+      <plugin id="org.eclipse.datatools.enablement.ibm.db2.iseries.ui"/>
+      <plugin id="org.eclipse.datatools.enablement.ibm.db2.luw"/>
+      <plugin id="org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition"/>
+      <plugin id="org.eclipse.datatools.enablement.ibm.db2.luw.ui"/>
+      <plugin id="org.eclipse.datatools.enablement.ibm.db2.zseries"/>
+      <plugin id="org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition"/>
+      <plugin id="org.eclipse.datatools.enablement.ibm.db2.zseries.ui"/>
+      <plugin id="org.eclipse.datatools.enablement.ibm.informix"/>
+      <plugin id="org.eclipse.datatools.enablement.ibm.informix.dbdefinition"/>
+      <plugin id="org.eclipse.datatools.enablement.ibm.informix.ui"/>
+      <plugin id="org.eclipse.datatools.enablement.ibm.ui"/>
+      <plugin id="org.eclipse.datatools.enablement.ingres"/>
+      <plugin id="org.eclipse.datatools.enablement.ingres.dbdefinition"/>
+      <plugin id="org.eclipse.datatools.enablement.ingres.ui"/>
+      <plugin id="org.eclipse.datatools.enablement.msft.sqlserver"/>
+      <plugin id="org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition"/>
+      <plugin id="org.eclipse.datatools.enablement.msft.sqlserver.ui"/>
+      <plugin id="org.eclipse.datatools.enablement.mysql"/>
+      <plugin id="org.eclipse.datatools.enablement.mysql.dbdefinition"/>
+      <plugin id="org.eclipse.datatools.enablement.mysql.ui"/>
+      <plugin id="org.eclipse.datatools.enablement.rcp"/>
+      <plugin id="org.eclipse.datatools.enablement.sap.maxdb"/>
+      <plugin id="org.eclipse.datatools.enablement.sap.maxdb.dbdefinition"/>
+      <plugin id="org.eclipse.datatools.enablement.sap.maxdb.ui"/>
+      <plugin id="org.eclipse.datatools.enablement.sybase"/>
+      <plugin id="org.eclipse.datatools.enablement.sybase.asa"/>
+      <plugin id="org.eclipse.datatools.enablement.sybase.asa.dbdefinition"/>
+      <plugin id="org.eclipse.datatools.enablement.sybase.asa.models"/>
+      <plugin id="org.eclipse.datatools.enablement.sybase.asa.ui"/>
+      <plugin id="org.eclipse.datatools.enablement.sybase.ase"/>
+      <plugin id="org.eclipse.datatools.enablement.sybase.ase.dbdefinition"/>
+      <plugin id="org.eclipse.datatools.enablement.sybase.ase.models"/>
+      <plugin id="org.eclipse.datatools.enablement.sybase.ase.ui"/>
+      <plugin id="org.eclipse.datatools.enablement.sybase.models"/>
+      <plugin id="org.eclipse.datatools.enablement.sybase.ui"/>
+      <plugin id="org.eclipse.datatools.help"/>
+      <plugin id="org.eclipse.datatools.modelbase.dbdefinition"/>
+      <plugin id="org.eclipse.datatools.modelbase.derby"/>
+      <plugin id="org.eclipse.datatools.modelbase.sql"/>
+      <plugin id="org.eclipse.datatools.modelbase.sql.edit"/>
+      <plugin id="org.eclipse.datatools.modelbase.sql.query"/>
+      <plugin id="org.eclipse.datatools.modelbase.sql.query.edit"/>
+      <plugin id="org.eclipse.datatools.modelbase.sql.xml.query"/>
+      <plugin id="org.eclipse.datatools.sqltools.common.ui"/>
+      <plugin id="org.eclipse.datatools.sqltools.data.core"/>
+      <plugin id="org.eclipse.datatools.sqltools.data.ui"/>
+      <plugin id="org.eclipse.datatools.sqltools.db.derby"/>
+      <plugin id="org.eclipse.datatools.sqltools.db.generic"/>
+      <plugin id="org.eclipse.datatools.sqltools.ddlgen.ui"/>
+      <plugin id="org.eclipse.datatools.sqltools.editor.core"/>
+      <plugin id="org.eclipse.datatools.sqltools.editor.core.ui"/>
+      <plugin id="org.eclipse.datatools.sqltools.parsers.sql"/>
+      <plugin id="org.eclipse.datatools.sqltools.parsers.sql.lexer"/>
+      <plugin id="org.eclipse.datatools.sqltools.parsers.sql.query"/>
+      <plugin id="org.eclipse.datatools.sqltools.parsers.sql.xml.query"/>
+      <plugin id="org.eclipse.datatools.sqltools.plan"/>
+      <plugin id="org.eclipse.datatools.sqltools.result"/>
+      <plugin id="org.eclipse.datatools.sqltools.result.ui"/>
+      <plugin id="org.eclipse.datatools.sqltools.routineeditor"/>
+      <plugin id="org.eclipse.datatools.sqltools.routineeditor.ui"/>
+      <plugin id="org.eclipse.datatools.sqltools.sql"/>
+      <plugin id="org.eclipse.datatools.sqltools.sql.ui"/>
+      <plugin id="org.eclipse.datatools.sqltools.sqlbuilder"/>
+      <plugin id="org.eclipse.datatools.sqltools.sqleditor"/>
+      <plugin id="org.eclipse.datatools.sqltools.sqlscrapbook"/>
+      <plugin id="org.eclipse.datatools.sqltools.tabledataeditor"/>
+      <plugin id="org.eclipse.debug.core"/>
+      <plugin id="org.eclipse.debug.ui"/>
+      <plugin id="org.eclipse.draw2d"/>
+      <plugin id="org.eclipse.ecf"/>
+      <plugin id="org.eclipse.ecf.filetransfer"/>
+      <plugin id="org.eclipse.ecf.identity"/>
+      <plugin id="org.eclipse.ecf.provider.filetransfer"/>
+      <plugin id="org.eclipse.ecf.provider.filetransfer.ssl" fragment="true"/>
+      <plugin id="org.eclipse.ecf.ssl" fragment="true"/>
+      <plugin id="org.eclipse.emf.codegen"/>
+      <plugin id="org.eclipse.emf.codegen.ecore"/>
+      <plugin id="org.eclipse.emf.common"/>
+      <plugin id="org.eclipse.emf.common.ui"/>
+      <plugin id="org.eclipse.emf.ecore"/>
+      <plugin id="org.eclipse.emf.ecore.change"/>
+      <plugin id="org.eclipse.emf.ecore.edit"/>
+      <plugin id="org.eclipse.emf.ecore.editor"/>
+      <plugin id="org.eclipse.emf.ecore.xmi"/>
+      <plugin id="org.eclipse.emf.edit"/>
+      <plugin id="org.eclipse.emf.edit.ui"/>
+      <plugin id="org.eclipse.equinox.app"/>
+      <plugin id="org.eclipse.equinox.common"/>
+      <plugin id="org.eclipse.equinox.concurrent"/>
+      <plugin id="org.eclipse.equinox.http.jetty"/>
+      <plugin id="org.eclipse.equinox.http.servlet"/>
+      <plugin id="org.eclipse.equinox.launcher"/>
+      <plugin id="org.eclipse.equinox.launcher.gtk.linux.x86" fragment="true"/>
+      <plugin id="org.eclipse.equinox.p2.artifact.repository"/>
+      <plugin id="org.eclipse.equinox.p2.core"/>
+      <plugin id="org.eclipse.equinox.p2.engine"/>
+      <plugin id="org.eclipse.equinox.p2.jarprocessor"/>
+      <plugin id="org.eclipse.equinox.p2.metadata"/>
+      <plugin id="org.eclipse.equinox.p2.metadata.repository"/>
+      <plugin id="org.eclipse.equinox.p2.repository"/>
+      <plugin id="org.eclipse.equinox.preferences"/>
+      <plugin id="org.eclipse.equinox.registry"/>
+      <plugin id="org.eclipse.equinox.security"/>
+      <plugin id="org.eclipse.gef"/>
+      <plugin id="org.eclipse.help"/>
+      <plugin id="org.eclipse.help.base"/>
+      <plugin id="org.eclipse.help.ui"/>
+      <plugin id="org.eclipse.jdt.compiler.apt" fragment="true"/>
+      <plugin id="org.eclipse.jdt.compiler.tool" fragment="true"/>
+      <plugin id="org.eclipse.jdt.core"/>
+      <plugin id="org.eclipse.jdt.debug"/>
+      <plugin id="org.eclipse.jdt.launching"/>
+      <plugin id="org.eclipse.jface"/>
+      <plugin id="org.eclipse.jface.databinding"/>
+      <plugin id="org.eclipse.jface.text"/>
+      <plugin id="org.eclipse.ltk.core.refactoring"/>
+      <plugin id="org.eclipse.ltk.ui.refactoring"/>
+      <plugin id="org.eclipse.osgi"/>
+      <plugin id="org.eclipse.osgi.services"/>
+      <plugin id="org.eclipse.persistence.jpa.equinox.weaving" fragment="true"/>
+      <plugin id="org.eclipse.search"/>
+      <plugin id="org.eclipse.swt"/>
+      <plugin id="org.eclipse.swt.gtk.linux.x86" fragment="true"/>
+      <plugin id="org.eclipse.team.core"/>
+      <plugin id="org.eclipse.team.ui"/>
+      <plugin id="org.eclipse.text"/>
+      <plugin id="org.eclipse.ui"/>
+      <plugin id="org.eclipse.ui.console"/>
+      <plugin id="org.eclipse.ui.editors"/>
+      <plugin id="org.eclipse.ui.forms"/>
+      <plugin id="org.eclipse.ui.ide"/>
+      <plugin id="org.eclipse.ui.navigator"/>
+      <plugin id="org.eclipse.ui.navigator.resources"/>
+      <plugin id="org.eclipse.ui.views"/>
+      <plugin id="org.eclipse.ui.views.properties.tabbed"/>
+      <plugin id="org.eclipse.ui.workbench"/>
+      <plugin id="org.eclipse.ui.workbench.texteditor"/>
+      <plugin id="org.eclipse.update.configurator"/>
+      <plugin id="org.jboss.tools.xulrunner.initializer" fragment="true"/>
+      <plugin id="org.mortbay.jetty.server"/>
+      <plugin id="org.mortbay.jetty.util"/>
+   </plugins>
+
+
+</product>
diff --git a/examples/org.eclipse.datatools.enablement.rcp/icons/alt_about.gif b/examples/org.eclipse.datatools.enablement.rcp/icons/alt_about.gif
new file mode 100644
index 0000000..20d9ad2
--- /dev/null
+++ b/examples/org.eclipse.datatools.enablement.rcp/icons/alt_about.gif
Binary files differ
diff --git a/examples/org.eclipse.datatools.enablement.rcp/icons/alt_launcher.icns b/examples/org.eclipse.datatools.enablement.rcp/icons/alt_launcher.icns
new file mode 100644
index 0000000..b77a6a6
--- /dev/null
+++ b/examples/org.eclipse.datatools.enablement.rcp/icons/alt_launcher.icns
Binary files differ
diff --git a/examples/org.eclipse.datatools.enablement.rcp/icons/alt_launcher.ico b/examples/org.eclipse.datatools.enablement.rcp/icons/alt_launcher.ico
new file mode 100644
index 0000000..d548f71
--- /dev/null
+++ b/examples/org.eclipse.datatools.enablement.rcp/icons/alt_launcher.ico
Binary files differ
diff --git a/examples/org.eclipse.datatools.enablement.rcp/icons/alt_launcher.xpm b/examples/org.eclipse.datatools.enablement.rcp/icons/alt_launcher.xpm
new file mode 100644
index 0000000..b0c139e
--- /dev/null
+++ b/examples/org.eclipse.datatools.enablement.rcp/icons/alt_launcher.xpm
@@ -0,0 +1,307 @@
+/* XPM */

+static char * icon48_xpm[] = {

+"48 48 256 2",

+"  	c #4B4B3B3B9090",

+". 	c #0D0D0E0E5454",

+"X 	c #11110E0E5B5B",

+"o 	c #17170F0F6363",

+"O 	c #1D1D13136969",

+"+ 	c #212114146C6C",

+"@ 	c #252514147171",

+"# 	c #282811116C6C",

+"$ 	c #26260D0D6363",

+"% 	c #22220B0B5E5E",

+"& 	c #1C1C0B0B5A5A",

+"* 	c #1C1C0B0B5252",

+"= 	c #1B1B05055353",

+"- 	c #161606064D4D",

+"; 	c #161605054949",

+": 	c #111104044848",

+"> 	c #131304044545",

+", 	c #131305054242",

+"< 	c #141410105E5E",

+"1 	c #2C2C15157373",

+"2 	c #2B2B1B1B7575",

+"3 	c #343416167272",

+"4 	c #313113136E6E",

+"5 	c #222209095757",

+"6 	c #1B1B06064D4D",

+"7 	c #15150B0B4242",

+"8 	c #13130C0C5555",

+"9 	c #2E2E1B1B7878",

+"0 	c #33331F1F7C7C",

+"q 	c #343418187878",

+"w 	c #3B3B1C1C7575",

+"e 	c #2E2E10106767",

+"r 	c #1B1B07074747",

+"t 	c #18180B0B4646",

+"y 	c #151513136262",

+"u 	c #1A1A15156464",

+"i 	c #34341F1F7777",

+"p 	c #40401E1E8080",

+"a 	c #42421B1B7A7A",

+"s 	c #3B3B15157474",

+"d 	c #2B2B0B0B5B5B",

+"f 	c #222207075252",

+"g 	c #373727277A7A",

+"h 	c #474724248484",

+"j 	c #393915156E6E",

+"k 	c #373711116A6A",

+"l 	c #343413136363",

+"z 	c #232319196E6E",

+"x 	c #292919197070",

+"c 	c #3C3C2C2C8282",

+"v 	c #444431318585",

+"b 	c #494934348A8A",

+"n 	c #505026268A8A",

+"m 	c #3D3D1B1B6E6E",

+"M 	c #31310E0E5C5C",

+"N 	c #2B2B0D0D5353",

+"B 	c #222207074A4A",

+"V 	c #52523C3C9292",

+"C 	c #58583C3C9494",

+"Z 	c #5D5D44449797",

+"A 	c #5C5C2E2E9292",

+"S 	c #676733339595",

+"D 	c #424228287575",

+"F 	c #29290A0A4F4F",

+"G 	c #6C6C4A4A9E9E",

+"H 	c #72725454A7A7",

+"J 	c #8C8C6D6DB2B2",

+"K 	c #343424246E6E",

+"L 	c #3A3A23236A6A",

+"P 	c #3A3A1C1C6767",

+"I 	c #24240A0A4B4B",

+"U 	c #151518186161",

+"Y 	c #76766F6FA5A5",

+"T 	c #ADAD9191CCCC",

+"R 	c #98988989D3D3",

+"E 	c #45453B3B8686",

+"W 	c #3C3C35357979",

+"Q 	c #363631317575",

+"! 	c #32322D2D6B6B",

+"~ 	c #323229296363",

+"^ 	c #30301F1F6262",

+"/ 	c #323218185E5E",

+"( 	c #272707074B4B",

+") 	c #202028286C6C",

+"_ 	c #1E1E1D1D6868",

+"` 	c #9A9A8282BBBB",

+"' 	c #C8C8B3B3D3D3",

+"] 	c #B3B3AFAFE7E7",

+"[ 	c #84847272C6C6",

+"{ 	c #58585757A3A3",

+"} 	c #3F3F3C3C8A8A",

+"| 	c #3B3B3A3A8484",

+" .	c #414139397D7D",

+"..	c #3D3D39397A7A",

+"X.	c #37372E2E6E6E",

+"o.	c #2C2C21215A5A",

+"O.	c #2E2E1B1B5B5B",

+"+.	c #F5F5EFEFF5F5",

+"@.	c #656566669A9A",

+"#.	c #47474B4B8E8E",

+"$.	c #3C3C44447B7B",

+"%.	c #444442428080",

+"&.	c #45453E3E8181",

+"*.	c #40403C3C8181",

+"=.	c #3D3D33337474",

+"-.	c #3B3B30306E6E",

+";.	c #38382D2D6969",

+":.	c #303026265D5D",

+">.	c #2C2C15155A5A",

+",.	c #1F1F1C1C7070",

+"<.	c #25251E1E7171",

+"1.	c #59595C5C9191",

+"2.	c #4D4D53538989",

+"3.	c #4C4C49498484",

+"4.	c #484845458585",

+"5.	c #494941418585",

+"6.	c #494940408181",

+"7.	c #2F2F1C1C5353",

+"8.	c #2B2B28287676",

+"9.	c #323231317F7F",

+"0.	c #545452528B8B",

+"q.	c #51514E4E8989",

+"w.	c #4E4E4B4B8C8C",

+"e.	c #4C4C47478686",

+"r.	c #46463D3D7E7E",

+"t.	c #434336367A7A",

+"y.	c #2B2B13135555",

+"u.	c #47473D3D8D8D",

+"i.	c #575757578E8E",

+"p.	c #48483E3E7F7F",

+"a.	c #46463A3A7D7D",

+"s.	c #424235357575",

+"d.	c #404034347171",

+"f.	c #BFBFCBCBFAFA",

+"g.	c #B8B8A8A8DDDD",

+"h.	c #5E5E60609292",

+"j.	c #565655558C8C",

+"k.	c #4B4B44448282",

+"l.	c #454539397B7B",

+"z.	c #434338387878",

+"x.	c #3F3F32326D6D",

+"c.	c #3D3D30306969",

+"v.	c #3A3A2E2E6363",

+"b.	c #36362A2A5C5C",

+"n.	c #343424245555",

+"m.	c #30301E1E4D4D",

+"M.	c #49493C3C8282",

+"N.	c #5E5E4F4F8C8C",

+"B.	c #56563B3B8B8B",

+"V.	c #545407078585",

+"C.	c #424234347272",

+"Z.	c #9797A4A4F7F7",

+"A.	c #444436367676",

+"S.	c #7D7D7979D5D5",

+"D.	c #464640408A8A",

+"F.	c #44444B4B8282",

+"G.	c #414107077777",

+"H.	c #71716161C1C1",

+"J.	c #303039397979",

+"K.	c #8E8E8E8EE6E6",

+"L.	c #404033338B8B",

+"P.	c #4A4A45458C8C",

+"I.	c #46463A3A8080",

+"U.	c #363629295454",

+"Y.	c #303022224848",

+"T.	c #424237377575",

+"R.	c #2E2E1D1D6363",

+"E.	c #79798383EAEA",

+"W.	c #74747B7BE4E4",

+"Q.	c #6D6D7676D6D6",

+"!.	c #6A6A7171CECE",

+"~.	c #66666969C6C6",

+"^.	c #62626565BCBC",

+"/.	c #5F5F6060B5B5",

+"(.	c #5B5B5B5BACAC",

+").	c #535353539898",

+"_.	c #4F4F4F4FA4A4",

+"`.	c #54544D4DA4A4",

+"'.	c #323204046B6B",

+"].	c #303035357979",

+"[.	c #313122224343",

+"{.	c #5A5A5B5BB7B7",

+"}.	c #484846468080",

+"|.	c #454541417575",

+" X	c #4B4B31318282",

+".X	c #47473C3C8484",

+"XX	c #3E3E35356E6E",

+"oX	c #2F2F26264040",

+"OX	c #2B2B23233A3A",

+"+X	c #262619195C5C",

+"@X	c #252515155A5A",

+"#X	c #55555151B3B3",

+"$X	c #3C3C2D2D5D5D",

+"%X	c #39392F2F5656",

+"&X	c #37372D2D5050",

+"*X	c #25251F1F3030",

+"=X	c #24241D1D4343",

+"-X	c #202013135656",

+";X	c #41413B3B6C6C",

+":X	c #444442429696",

+">X	c #212100005E5E",

+",X	c #444436367272",

+"<X	c #444436366F6F",

+"1X	c #424236366868",

+"2X	c #3F3F34346161",

+"3X	c #3C3C32325A5A",

+"4X	c #34342A2A4A4A",

+"5X	c #21211B1B2121",

+"6X	c #22221C1C6363",

+"7X	c #2D2D01015E5E",

+"8X	c #20201B1B2525",

+"9X	c #49492F2F7B7B",

+"0X	c #434334346C6C",

+"qX	c #323229294545",

+"wX	c #1C1C10104F4F",

+"eX	c #222217176363",

+"rX	c #37371E1E6B6B",

+"tX	c #424232326E6E",

+"yX	c #444433336969",

+"uX	c #424233336565",

+"iX	c #1E1E1A1A1E1E",

+"pX	c #161601014C4C",

+"aX	c #1C1C11115454",

+"sX	c #252503035B5B",

+"dX	c #414131316A6A",

+"fX	c #22221F1F7878",

+"gX	c #272724246767",

+"hX	c #1D1D16165E5E",

+"jX	c #131305055151",

+"kX	c #40402F2F6464",

+"lX	c #111107074E4E",

+"zX	c #0C0C05054B4B",

+"xX	c #22221E1E5757",

+"cX	c #1A1A0D0D4D4D",

+"vX	c #16160B0B4D4D",

+"bX	c #060604044747",

+"nX	c #040403034343",

+"mX	c #3B3B27276565",

+"MX	c #0E0E03034141",

+"NX	c #111106064A4A",

+"BX	c #0E0E04044646",

+"VX	c #111105053B3B",

+"CX	c #0D0D01013A3A",

+"ZX	c #030305053F3F",

+"AX	c #0F0F0F0F4C4C",

+"SX	c #020207073B3B",

+"DX	c #0D0D03034646",

+"FX	c #0B0B02023F3F",

+"GX	c #0D0D02023434",

+"HX	c #0A0A0E0E4444",

+"JX	c #161614145252",

+"KX	c #0B0B04044646",

+"LX	c #0A0A03034444",

+"PX	c #1D1D21215757",

+"IX	c #090910104040",

+"UX	c #18181E1E5353",

+"                                                                                                ",

+"  . . . . X X o o o o O + + @ @ @ @ @ @ @ # # # # # # $ $ % % & & & & * = - - - ; : > > , , ,   ",

+"  . . X X < < o o O O + @ 1 2 2 1 1 1 1 1 1 1 1 3 4 # # $ $ $ % % % 5 = = 6 6 - ; ; > > , , 7   ",

+"  . 8 < < < o O O + @ @ 2 9 9 0 0 q q q q q q q w 3 4 4 e e $ $ $ $ % 5 = = 6 6 6 ; ; > > r t   ",

+"  . X < y u O O + @ 1 2 i 0 0 p p p p p p p a a p a s 3 4 4 e e e e d 5 5 f f 6 6 6 ; ; r r t   ",

+"  X < y u O + + @ 2 9 0 g p p h h h h h h h p h h a a s s j k k j l d d 5 5 f f 6 6 r r r r r   ",

+"  X < y O z x x 9 0 g c v b n n n n n n n n n n n h a a s s j j m l M d d N f f B B B B r r r   ",

+"  < y u + z 2 0 c c b V C Z C C A A A A A S S S n h D w w m m m m k l M d d N f F F F B r r r   ",

+"  < y O z z 9 c b V Z G H H H G S G G J J H V v c g g K K K K L P l l l M M N N N N I B B r r   ",

+"  U u + z x i v C H Y J J J J H J T R H V E W W Q Q Q Q ! ! ! ~ ^ ^ / / M M M M M N ( B B r r   ",

+"  ) _ z x 9 g b Z Y ` ' ' ' T T ] [ { } |  .........W W Q Q X.! ~ ~ o.O./ / / / N F ( B B B r   ",

+"  ) ) z x i c V G J ' +.+.+.+.] [ @.#.$.%.%.%.&.*. . .....W =.-.X.;.~ :.o.O.^ >.N F ( B B B B   ",

+"  ) ,.<.2 g v C H J ' +.+.+.+.T Y 1.2.3.4.4.4.5.6.&.&. . ...W =.=.-.;.~ :.o.7.>.N F F ( B I I   ",

+"  ) ,.<.8.9.b C H J T +.+.+.' J @.1.0.q.q.w.e.4.5.6.&.r. . .t.W =.=.-.;.~ :.o.7.y.N F ( ( I I   ",

+"  8.8.8.9.| u.C G J T +.+.' ` Y @.1.i.0.q.q.e.e.5.6.p.r.a. .t.t.s.d.d.-.;.~ :.7.7.y.F F ( I I   ",

+"  9.c c c v b A S H ' f.g.` Y @.h.1.i.j.0.q.q.e.k.6.p.r.a.l.t.z.s.s.d.x.c.v.b.n.m.7.N F F F I   ",

+"  <.g M.N.B.B.n V.J f.R J @.h.h.1.i.i.j.j.0.q.3.k.6.p.r.a.l.l.z.s.C.d.x.x.c.v.b.n.m.y.N F F F   ",

+"  + x i v B.Z Z G g.Z.[ @.2.i.i.j.j.j.j.j.0.q.3.k.6.p.p.a.l.l.A.s.C.C.d.x.c.v.b.n.m.7.y.N N y.  ",

+"  O # 3 w p n Z ` f.S.H D.F.q.0.0.0.0.j.0.q.q.3.k.6.p.r.a.a.l.A.s.s.C.d.x.x.c.v.b.n.m.y.y.y.y.  ",

+"  O # 4 s a G.V.T Z.H.V J.%.e.w.q.0.0.0.0.q.q.e.k.6.p.r.a.a.l.z.A.s.C.d.d.x.c.v.b.n.m.7.>.y.y.  ",

+"  O # 4 s w G.A f.K.H L...4.P.w.w.w.q.q.q.q.e.e.5.6.M.I.I.a.a.l.z.A.s.d.d.x.c.v.v.U.Y.7.O.>.y.  ",

+"  $ # 4 3 s G.G f.S.Z 9.*.D.P.P.w.w.w.w.w.e.e.5.5.M.M.I.I.a.a.l.z.T.s.d.d.x.x.c.v.U.Y.m.R.>.>.  ",

+"  E.E.W.W.W.W.E.Z.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.!.!.!.!.!.~.~.~.~.~.~.^.^.^.^.^./././.(.{ { )._.`._.  ",

+"  + # 3 w s '.` f.H.V ].*.D.P.P.P.P.P.P.P.5.5.5.M.M.M.I.I.a.l.z.z.T.T.s.d.d.x.c.v.U.Y.[.^ O.>.  ",

+"  ~.~.~.~.~.~.K.Z.S.~.{.^.^.^.^.^.^.^.^././././././.(.(.(.(.(.(.{ { { { { ).).).w.w.}.|.P.u.}   ",

+"   .I.6. X X XT f.H.b ].*.E D.D.D.D.5.5..X.XM.M.I.I.a.a.l.l.z.z.T.T.T.d.XXx.c.v.b.U.oXOXR.+X@X  ",

+"  E.E.E.W.W.W.K.Z.E.W.Q.Q.Q.Q.Q.Q.Q.Q.!.!.!.!.!.!.~.~.~.~.~.~.^.^.^.^.^./././.(.{ { ).).#X_._.  ",

+"  & % $ e '.= H f.H.b 8.W *.E E E .X.X.XI.I.I.I.a.a.l.l.z.z.T.T.T.C.XXXXc.v.$X%X&XY.*X=X2 @X-X  ",

+"  {.{.{.{.{.#X~.Z.W.~.{.{./././././././././.(.(.(.(.(.(.(.{ { { { { { ).).).w.w.3.}.;X%.:X} }   ",

+"  & & % $ e >XV.f.S.C K X.W t. . .l.l.t.t.t.t.A.A.A.,X,X,X,X,X<X;X1X1X2X3X%X&X4XoX*X5Xo.6X-X-X  ",

+"  & & % $ $ >X7X` Z.Z D ! =.=.s.t.t.t.A.A.s.A.,X,X,X,X<X<X<X<X;X1X2X2X3X%X&X4XoXOX8X5X<.@X-X-X  ",

+"  8 & & $ e K 9XJ f.^. XK X.=.=.s.s.s.s.s.C.C.C.C.<X0X0X0X1X1X1X2X2X3X%X&X4XqXOX*X8X=X<.-X-XwX  ",

+"  8 & eXK k.@.M. Xg.E.B.rX~ -.d.d.C.C.C.C.C.tX0X0X0XyXyX1X1XuX2X2X3X%X&X4XqXoXOX8XiX6XeX-X-XwX  ",

+"  6XQ h.Y N.K e pXB.f./.9Xo.;.-.x.d.tXtXtXtXtX0X0XyXyXyXuXuX2X2X3X%X&X4XqXoXOX*XiX=X_ aX-XaXwX  ",

+"  Y Y  .R.@X% sX= 7XT Z.V P :.;.c.x.x.x.tXdXdXdXyXyXuXuX2X2X3X3X%X&X4XqXoXOX*X8X*XfXaXaXaXwXwX  ",

+"  gXhX& * & 5 5 sXjXa ] S.9X/ ~ v.c.dXdXdXdXdXuXuXuXkX2X2X3X%X%X&X4XqXoXOX*X8XiX<.hXwXwXaXwXwX  ",

+"  8 lXlXjX= * 5 5 = zX9X] H.D 7.b.v.v.kXc.kXkXkXkXkX2X$X3X%X&X&X4XqXoXOX*X8XiXxXhXwXcXcXwXwXwX  ",

+"  zXzXlXlXjX= = f f sXD Y ] ~.D 7.n.b.v.v.kXkXkXkX$X$X%X%X&X4XqXoXoXOX*X8X5XgXu cXvXvXcXcXwXwX  ",

+"  bXbXzXlXlX- = * @XX.h.e D T S.D n.m.b.$X$X$X$X$X%X%X&X&X4XqXoXOX*X8X8X*X<.hXvX; ; vXvXvXcXwX  ",

+"  nXbXzXzXlXlX- -XX.Y R.pXpXP J K.Z mXm.n.U.U.U.U.U.4X4XY.oXOX*X8X8X8X=X,.aXvX; > > > t t t cX  ",

+"  nXbXbXzXzXlXaXXXY +Xf = f = 7XtXR R   mXn.Y.[.[.[.[.OX*X*X8X5X*X=X,.u vXvX; > > MXMX, 7 t t   ",

+"  nXnXnXbXzXvX-.Y +XcX6 6 = = = d L B.G H `.X.:.7.m.=X=X=X=X=X6X,.u cXvXNX: BX> MXVXCXVX7 7 7   ",

+"  ZXZXnXbXAXgX@.+XvX; - - - - * @XR.>.sX>.R.i 0 x eXeXeXeXO hXaXcXvXNX: BXMXMXMXVXCXCXCXVX7 7   ",

+"  SXZXZXAXgXN.aXNX: : NXNXNX- * +X+X* 6 6 6 * * * * * * * vXvX- NX: DXBXMXMXFXCXCXCXCXGXVXVX7   ",

+"  SXSXHXgX0.JXKXLXKXKXDX: : NX* @X-X- - - - - - - - - - - NX: DXDXDXMXMXFXFXCXCXCXCXGXGXGXVXVX  ",

+"  SXHXPX3.JXnXnXnXnXbXLXKXKXNXaX-XvX: : NX: : : : : : : BXDXDXLXMXMXFXFXCXCXCXCXGXGXGXGXGXGXGX  ",

+"  IXUX$.AXZXZXZXZXnXnXnXLXLXNXJXvXBXDXBXBXBXBXDXDXDXDXLXDXLXLXFXFXFXFXCXCXCXCXGXGXGXGXGXGXGXGX  ",

+"                                                                                                "};

diff --git a/examples/org.eclipse.datatools.enablement.rcp/icons/alt_window_16.gif b/examples/org.eclipse.datatools.enablement.rcp/icons/alt_window_16.gif
new file mode 100644
index 0000000..05626b1
--- /dev/null
+++ b/examples/org.eclipse.datatools.enablement.rcp/icons/alt_window_16.gif
Binary files differ
diff --git a/examples/org.eclipse.datatools.enablement.rcp/icons/alt_window_32.gif b/examples/org.eclipse.datatools.enablement.rcp/icons/alt_window_32.gif
new file mode 100644
index 0000000..b432f88
--- /dev/null
+++ b/examples/org.eclipse.datatools.enablement.rcp/icons/alt_window_32.gif
Binary files differ
diff --git a/examples/org.eclipse.datatools.enablement.rcp/icons/enablementrcp.product b/examples/org.eclipse.datatools.enablement.rcp/icons/enablementrcp.product
new file mode 100644
index 0000000..deefa2a
--- /dev/null
+++ b/examples/org.eclipse.datatools.enablement.rcp/icons/enablementrcp.product
@@ -0,0 +1,245 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?pde version="3.5"?>
+
+<product name="DTP Enablement RCP" uid="org.eclipse.datatools.enablement.rcp" id="org.eclipse.datatools.enablement.rcp.product" application="org.eclipse.datatools.enablement.rcp.application" version="1.0.0" useFeatures="false" includeLaunchers="false">
+
+   <configIni use="default">
+   </configIni>
+
+   <launcherArgs>
+      <programArgs>-clean</programArgs>
+      <vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts</vmArgsMac>
+   </launcherArgs>
+
+   <windowImages i16="icons/alt_window_16.gif" i32="icons/alt_window_32.gif"/>
+
+   <splash
+      startupProgressRect="5,275,445,15" />
+   <launcher name="dtprcp">
+      <linux icon="/org.eclipse.datatools.enablement.rcp/icons/alt_launcher.xpm"/>
+      <solaris/>
+      <win useIco="false">
+         <bmp/>
+      </win>
+   </launcher>
+
+   <vm>
+      <linux>org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/OSGi%Minimum-1.0</linux>
+   </vm>
+
+   <plugins>
+      <plugin id="com.ibm.icu"/>
+      <plugin id="javax.servlet"/>
+      <plugin id="javax.servlet.jsp"/>
+      <plugin id="net.sourceforge.lpg.lpgjavaruntime"/>
+      <plugin id="org.apache.ant"/>
+      <plugin id="org.apache.commons.el"/>
+      <plugin id="org.apache.commons.logging"/>
+      <plugin id="org.apache.jasper"/>
+      <plugin id="org.apache.lucene"/>
+      <plugin id="org.apache.lucene.analysis"/>
+      <plugin id="org.eclipse.ant.core"/>
+      <plugin id="org.eclipse.compare"/>
+      <plugin id="org.eclipse.compare.core"/>
+      <plugin id="org.eclipse.core.commands"/>
+      <plugin id="org.eclipse.core.contenttype"/>
+      <plugin id="org.eclipse.core.databinding"/>
+      <plugin id="org.eclipse.core.databinding.observable"/>
+      <plugin id="org.eclipse.core.databinding.property"/>
+      <plugin id="org.eclipse.core.expressions"/>
+      <plugin id="org.eclipse.core.filebuffers"/>
+      <plugin id="org.eclipse.core.filesystem"/>
+      <plugin id="org.eclipse.core.filesystem.linux.x86" fragment="true"/>
+      <plugin id="org.eclipse.core.jobs"/>
+      <plugin id="org.eclipse.core.net"/>
+      <plugin id="org.eclipse.core.net.linux.x86" fragment="true"/>
+      <plugin id="org.eclipse.core.resources"/>
+      <plugin id="org.eclipse.core.resources.compatibility" fragment="true"/>
+      <plugin id="org.eclipse.core.runtime"/>
+      <plugin id="org.eclipse.core.runtime.compatibility.auth"/>
+      <plugin id="org.eclipse.core.runtime.compatibility.registry" fragment="true"/>
+      <plugin id="org.eclipse.core.variables"/>
+      <plugin id="org.eclipse.datatools.common.doc.user"/>
+      <plugin id="org.eclipse.datatools.connectivity"/>
+      <plugin id="org.eclipse.datatools.connectivity.apache.derby"/>
+      <plugin id="org.eclipse.datatools.connectivity.apache.derby.dbdefinition"/>
+      <plugin id="org.eclipse.datatools.connectivity.apache.derby.dbdefinition.source"/>
+      <plugin id="org.eclipse.datatools.connectivity.apache.derby.ui"/>
+      <plugin id="org.eclipse.datatools.connectivity.db.generic"/>
+      <plugin id="org.eclipse.datatools.connectivity.db.generic.ui"/>
+      <plugin id="org.eclipse.datatools.connectivity.dbdefinition.genericJDBC"/>
+      <plugin id="org.eclipse.datatools.connectivity.doc.user"/>
+      <plugin id="org.eclipse.datatools.connectivity.doc.user.contexts"/>
+      <plugin id="org.eclipse.datatools.connectivity.sqm.core"/>
+      <plugin id="org.eclipse.datatools.connectivity.sqm.core.ui"/>
+      <plugin id="org.eclipse.datatools.connectivity.sqm.server.ui"/>
+      <plugin id="org.eclipse.datatools.connectivity.ui"/>
+      <plugin id="org.eclipse.datatools.connectivity.ui.dse"/>
+      <plugin id="org.eclipse.datatools.doc.isv"/>
+      <plugin id="org.eclipse.datatools.doc.user"/>
+      <plugin id="org.eclipse.datatools.enablement.hsqldb"/>
+      <plugin id="org.eclipse.datatools.enablement.hsqldb.dbdefinition"/>
+      <plugin id="org.eclipse.datatools.enablement.hsqldb.ui"/>
+      <plugin id="org.eclipse.datatools.enablement.ibm.db2.iseries"/>
+      <plugin id="org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition"/>
+      <plugin id="org.eclipse.datatools.enablement.ibm.db2.iseries.ui"/>
+      <plugin id="org.eclipse.datatools.enablement.ibm.db2.luw"/>
+      <plugin id="org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition"/>
+      <plugin id="org.eclipse.datatools.enablement.ibm.db2.luw.ui"/>
+      <plugin id="org.eclipse.datatools.enablement.ibm.db2.zseries"/>
+      <plugin id="org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition"/>
+      <plugin id="org.eclipse.datatools.enablement.ibm.db2.zseries.ui"/>
+      <plugin id="org.eclipse.datatools.enablement.ibm.informix"/>
+      <plugin id="org.eclipse.datatools.enablement.ibm.informix.dbdefinition"/>
+      <plugin id="org.eclipse.datatools.enablement.ibm.informix.ui"/>
+      <plugin id="org.eclipse.datatools.enablement.ibm.ui"/>
+      <plugin id="org.eclipse.datatools.enablement.ingres"/>
+      <plugin id="org.eclipse.datatools.enablement.ingres.dbdefinition"/>
+      <plugin id="org.eclipse.datatools.enablement.ingres.ui"/>
+      <plugin id="org.eclipse.datatools.enablement.msft.sqlserver"/>
+      <plugin id="org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition"/>
+      <plugin id="org.eclipse.datatools.enablement.msft.sqlserver.ui"/>
+      <plugin id="org.eclipse.datatools.enablement.mysql"/>
+      <plugin id="org.eclipse.datatools.enablement.mysql.dbdefinition"/>
+      <plugin id="org.eclipse.datatools.enablement.mysql.ui"/>
+      <plugin id="org.eclipse.datatools.enablement.oracle"/>
+      <plugin id="org.eclipse.datatools.enablement.oracle.dbdefinition"/>
+      <plugin id="org.eclipse.datatools.enablement.oracle.ui"/>
+      <plugin id="org.eclipse.datatools.enablement.postgresql"/>
+      <plugin id="org.eclipse.datatools.enablement.postgresql.dbdefinition"/>
+      <plugin id="org.eclipse.datatools.enablement.postgresql.ui"/>
+      <plugin id="org.eclipse.datatools.enablement.sap.maxdb"/>
+      <plugin id="org.eclipse.datatools.enablement.sap.maxdb.dbdefinition"/>
+      <plugin id="org.eclipse.datatools.enablement.sap.maxdb.ui"/>
+      <plugin id="org.eclipse.datatools.enablement.sqlite"/>
+      <plugin id="org.eclipse.datatools.enablement.sqlite.dbdefinition"/>
+      <plugin id="org.eclipse.datatools.enablement.sqlite.ui"/>
+      <plugin id="org.eclipse.datatools.enablement.sybase"/>
+      <plugin id="org.eclipse.datatools.enablement.sybase.asa"/>
+      <plugin id="org.eclipse.datatools.enablement.sybase.asa.dbdefinition"/>
+      <plugin id="org.eclipse.datatools.enablement.sybase.asa.models"/>
+      <plugin id="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples"/>
+      <plugin id="org.eclipse.datatools.enablement.sybase.asa.ui"/>
+      <plugin id="org.eclipse.datatools.enablement.sybase.ase"/>
+      <plugin id="org.eclipse.datatools.enablement.sybase.ase.dbdefinition"/>
+      <plugin id="org.eclipse.datatools.enablement.sybase.ase.models"/>
+      <plugin id="org.eclipse.datatools.enablement.sybase.ase.ui"/>
+      <plugin id="org.eclipse.datatools.enablement.sybase.models"/>
+      <plugin id="org.eclipse.datatools.enablement.sybase.ui"/>
+      <plugin id="org.eclipse.datatools.help"/>
+      <plugin id="org.eclipse.datatools.intro"/>
+      <plugin id="org.eclipse.datatools.modelbase.dbdefinition"/>
+      <plugin id="org.eclipse.datatools.modelbase.derby"/>
+      <plugin id="org.eclipse.datatools.modelbase.sql"/>
+      <plugin id="org.eclipse.datatools.modelbase.sql.edit"/>
+      <plugin id="org.eclipse.datatools.modelbase.sql.query"/>
+      <plugin id="org.eclipse.datatools.modelbase.sql.query.edit"/>
+      <plugin id="org.eclipse.datatools.modelbase.sql.xml.query"/>
+      <plugin id="org.eclipse.datatools.sqltools.common.ui"/>
+      <plugin id="org.eclipse.datatools.sqltools.data.core"/>
+      <plugin id="org.eclipse.datatools.sqltools.data.ui"/>
+      <plugin id="org.eclipse.datatools.sqltools.db.derby"/>
+      <plugin id="org.eclipse.datatools.sqltools.db.derby.ui"/>
+      <plugin id="org.eclipse.datatools.sqltools.db.generic"/>
+      <plugin id="org.eclipse.datatools.sqltools.db.generic.ui"/>
+      <plugin id="org.eclipse.datatools.sqltools.ddlgen.ui"/>
+      <plugin id="org.eclipse.datatools.sqltools.debugger.core"/>
+      <plugin id="org.eclipse.datatools.sqltools.debugger.core.ui"/>
+      <plugin id="org.eclipse.datatools.sqltools.doc.user"/>
+      <plugin id="org.eclipse.datatools.sqltools.doc.user.contexts"/>
+      <plugin id="org.eclipse.datatools.sqltools.editor.core"/>
+      <plugin id="org.eclipse.datatools.sqltools.editor.core.ui"/>
+      <plugin id="org.eclipse.datatools.sqltools.parsers.sql"/>
+      <plugin id="org.eclipse.datatools.sqltools.parsers.sql.lexer"/>
+      <plugin id="org.eclipse.datatools.sqltools.parsers.sql.query"/>
+      <plugin id="org.eclipse.datatools.sqltools.parsers.sql.source"/>
+      <plugin id="org.eclipse.datatools.sqltools.parsers.sql.xml.query"/>
+      <plugin id="org.eclipse.datatools.sqltools.plan"/>
+      <plugin id="org.eclipse.datatools.sqltools.result"/>
+      <plugin id="org.eclipse.datatools.sqltools.result.ui"/>
+      <plugin id="org.eclipse.datatools.sqltools.routineeditor"/>
+      <plugin id="org.eclipse.datatools.sqltools.routineeditor.ui"/>
+      <plugin id="org.eclipse.datatools.sqltools.schemaobjecteditor"/>
+      <plugin id="org.eclipse.datatools.sqltools.schemaobjecteditor.ui"/>
+      <plugin id="org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages"/>
+      <plugin id="org.eclipse.datatools.sqltools.sql"/>
+      <plugin id="org.eclipse.datatools.sqltools.sql.ui"/>
+      <plugin id="org.eclipse.datatools.sqltools.sqlbuilder"/>
+      <plugin id="org.eclipse.datatools.sqltools.sqleditor"/>
+      <plugin id="org.eclipse.datatools.sqltools.sqlscrapbook"/>
+      <plugin id="org.eclipse.datatools.sqltools.tabledataeditor"/>
+      <plugin id="org.eclipse.debug.core"/>
+      <plugin id="org.eclipse.debug.ui"/>
+      <plugin id="org.eclipse.draw2d"/>
+      <plugin id="org.eclipse.ecf"/>
+      <plugin id="org.eclipse.ecf.filetransfer"/>
+      <plugin id="org.eclipse.ecf.identity"/>
+      <plugin id="org.eclipse.ecf.provider.filetransfer"/>
+      <plugin id="org.eclipse.ecf.provider.filetransfer.ssl" fragment="true"/>
+      <plugin id="org.eclipse.ecf.ssl" fragment="true"/>
+      <plugin id="org.eclipse.emf.common"/>
+      <plugin id="org.eclipse.emf.common.ui"/>
+      <plugin id="org.eclipse.emf.ecore"/>
+      <plugin id="org.eclipse.emf.ecore.change"/>
+      <plugin id="org.eclipse.emf.ecore.edit"/>
+      <plugin id="org.eclipse.emf.ecore.xmi"/>
+      <plugin id="org.eclipse.emf.edit"/>
+      <plugin id="org.eclipse.emf.edit.ui"/>
+      <plugin id="org.eclipse.equinox.app"/>
+      <plugin id="org.eclipse.equinox.common"/>
+      <plugin id="org.eclipse.equinox.concurrent"/>
+      <plugin id="org.eclipse.equinox.http.jetty"/>
+      <plugin id="org.eclipse.equinox.http.servlet"/>
+      <plugin id="org.eclipse.equinox.p2.artifact.repository"/>
+      <plugin id="org.eclipse.equinox.p2.core"/>
+      <plugin id="org.eclipse.equinox.p2.engine"/>
+      <plugin id="org.eclipse.equinox.p2.jarprocessor"/>
+      <plugin id="org.eclipse.equinox.p2.metadata"/>
+      <plugin id="org.eclipse.equinox.p2.metadata.repository"/>
+      <plugin id="org.eclipse.equinox.p2.repository"/>
+      <plugin id="org.eclipse.equinox.preferences"/>
+      <plugin id="org.eclipse.equinox.registry"/>
+      <plugin id="org.eclipse.equinox.security"/>
+      <plugin id="org.eclipse.gef"/>
+      <plugin id="org.eclipse.help"/>
+      <plugin id="org.eclipse.help.base"/>
+      <plugin id="org.eclipse.help.ui"/>
+      <plugin id="org.eclipse.jdt.compiler.apt" fragment="true"/>
+      <plugin id="org.eclipse.jdt.compiler.tool" fragment="true"/>
+      <plugin id="org.eclipse.jdt.core"/>
+      <plugin id="org.eclipse.jdt.core.manipulation"/>
+      <plugin id="org.eclipse.jdt.debug"/>
+      <plugin id="org.eclipse.jdt.debug.ui"/>
+      <plugin id="org.eclipse.jdt.launching"/>
+      <plugin id="org.eclipse.jdt.ui"/>
+      <plugin id="org.eclipse.jface"/>
+      <plugin id="org.eclipse.jface.databinding"/>
+      <plugin id="org.eclipse.jface.text"/>
+      <plugin id="org.eclipse.ltk.core.refactoring"/>
+      <plugin id="org.eclipse.ltk.ui.refactoring"/>
+      <plugin id="org.eclipse.osgi"/>
+      <plugin id="org.eclipse.osgi.services"/>
+      <plugin id="org.eclipse.search"/>
+      <plugin id="org.eclipse.swt"/>
+      <plugin id="org.eclipse.swt.gtk.linux.x86" fragment="true"/>
+      <plugin id="org.eclipse.team.core"/>
+      <plugin id="org.eclipse.team.ui"/>
+      <plugin id="org.eclipse.text"/>
+      <plugin id="org.eclipse.ui"/>
+      <plugin id="org.eclipse.ui.cheatsheets"/>
+      <plugin id="org.eclipse.ui.console"/>
+      <plugin id="org.eclipse.ui.editors"/>
+      <plugin id="org.eclipse.ui.forms"/>
+      <plugin id="org.eclipse.ui.ide"/>
+      <plugin id="org.eclipse.ui.navigator"/>
+      <plugin id="org.eclipse.ui.navigator.resources"/>
+      <plugin id="org.eclipse.ui.views"/>
+      <plugin id="org.eclipse.ui.views.properties.tabbed"/>
+      <plugin id="org.eclipse.ui.workbench"/>
+      <plugin id="org.eclipse.ui.workbench.texteditor"/>
+      <plugin id="org.mortbay.jetty.server"/>
+      <plugin id="org.mortbay.jetty.util"/>
+   </plugins>
+
+
+</product>
diff --git a/examples/org.eclipse.datatools.enablement.rcp/plugin.xml b/examples/org.eclipse.datatools.enablement.rcp/plugin.xml
new file mode 100644
index 0000000..ca99d4a
--- /dev/null
+++ b/examples/org.eclipse.datatools.enablement.rcp/plugin.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.2"?>

+<plugin>

+

+   <extension

+         id="application"

+         point="org.eclipse.core.runtime.applications">

+      <application

+            icon="icons/alt_launcher.ico"

+            visible="true">

+         <run

+               class="org.eclipse.datatools.enablement.rcp.Application">

+         </run>

+      </application>

+   </extension>

+   <extension

+         point="org.eclipse.ui.perspectives">

+      <perspective

+            name="RCP Perspective"

+            class="org.eclipse.datatools.enablement.rcp.Perspective"

+            id="org.eclipse.datatools.enablement.rcp.perspective">

+      </perspective>

+   </extension>

+   <extension

+         id="product"

+         point="org.eclipse.core.runtime.products">

+      <product

+            application="org.eclipse.datatools.enablement.rcp.application"

+            name="DTP Enablement RCP">

+         <property

+               name="windowImages"

+               value="icons/alt_window_16.gif,icons/alt_window_32.gif">

+         </property>

+         <property

+               name="appName"

+               value="DTP Enablement RCP">

+         </property>

+         <property

+               name="startupProgressRect"

+               value="5,275,445,15">

+         </property>

+         <property

+               name="preferenceCustomization"

+               value="plugin_customization.ini">

+         </property>

+         <property

+               name="startupForegroundColor"

+               value="000000">

+         </property>

+         <property

+               name="startupMessageRect"

+               value="7,252,445,20">

+         </property>

+         <property

+               name="aboutImage"

+               value="icons/alt_about.gif">

+         </property>

+      </product>

+   </extension>

+

+</plugin>

diff --git a/examples/org.eclipse.datatools.enablement.rcp/plugin_customization.ini b/examples/org.eclipse.datatools.enablement.rcp/plugin_customization.ini
new file mode 100644
index 0000000..ecdf68e
--- /dev/null
+++ b/examples/org.eclipse.datatools.enablement.rcp/plugin_customization.ini
@@ -0,0 +1 @@
+org.eclipse.ui/SHOW_PROGRESS_ON_STARTUP = true

diff --git a/examples/org.eclipse.datatools.enablement.rcp/readme.txt b/examples/org.eclipse.datatools.enablement.rcp/readme.txt
new file mode 100644
index 0000000..71f5edd
--- /dev/null
+++ b/examples/org.eclipse.datatools.enablement.rcp/readme.txt
@@ -0,0 +1,7 @@
+#Readme added March 12, 2010
+When exporting a RCP product on linux, there seems to be an issue with running the 
+generated command-line executable without explicit arguments. So when you run it,
+run with arguments appropriate for your environment such as:
+
+	./[myexecutable] -os linux -ws gtk -arch x86
+	
diff --git a/examples/org.eclipse.datatools.enablement.rcp/splash.bmp b/examples/org.eclipse.datatools.enablement.rcp/splash.bmp
new file mode 100644
index 0000000..abd6b76
--- /dev/null
+++ b/examples/org.eclipse.datatools.enablement.rcp/splash.bmp
Binary files differ
diff --git a/examples/org.eclipse.datatools.enablement.rcp/src/org/eclipse/datatools/enablement/rcp/Activator.java b/examples/org.eclipse.datatools.enablement.rcp/src/org/eclipse/datatools/enablement/rcp/Activator.java
new file mode 100644
index 0000000..bd424ab
--- /dev/null
+++ b/examples/org.eclipse.datatools.enablement.rcp/src/org/eclipse/datatools/enablement/rcp/Activator.java
@@ -0,0 +1,72 @@
+/*******************************************************************************

+ * Copyright (c) 2009 Sybase, Inc. and others

+ * 

+ * All rights reserved. This program and the accompanying materials are made

+ * available under the terms of the Eclipse Public License v1.0 which

+ * accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ * 

+ * Contributors: Ingres - initial API and implementation

+ * 				brianf - a few tweaks

+ ******************************************************************************/

+package org.eclipse.datatools.enablement.rcp;

+

+import org.eclipse.jface.resource.ImageDescriptor;

+import org.eclipse.ui.plugin.AbstractUIPlugin;

+import org.osgi.framework.BundleContext;

+

+/**

+ * The activator class controls the plug-in life cycle

+ */

+public class Activator extends AbstractUIPlugin {

+

+	// The plug-in ID

+	public static final String PLUGIN_ID = "org.eclipse.datatools.enablement.rcp"; //$NON-NLS-1$

+

+	// The shared instance

+	private static Activator plugin;

+	

+	/**

+	 * The constructor

+	 */

+	public Activator() {

+	}

+

+	/*

+	 * (non-Javadoc)

+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)

+	 */

+	public void start(BundleContext context) throws Exception {

+		super.start(context);

+		plugin = this;

+	}

+

+	/*

+	 * (non-Javadoc)

+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)

+	 */

+	public void stop(BundleContext context) throws Exception {

+		plugin = null;

+		super.stop(context);

+	}

+

+	/**

+	 * Returns the shared instance

+	 *

+	 * @return the shared instance

+	 */

+	public static Activator getDefault() {

+		return plugin;

+	}

+

+	/**

+	 * Returns an image descriptor for the image file at the given

+	 * plug-in relative path

+	 *

+	 * @param path the path

+	 * @return the image descriptor

+	 */

+	public static ImageDescriptor getImageDescriptor(String path) {

+		return imageDescriptorFromPlugin(PLUGIN_ID, path);

+	}

+}

diff --git a/examples/org.eclipse.datatools.enablement.rcp/src/org/eclipse/datatools/enablement/rcp/Application.java b/examples/org.eclipse.datatools.enablement.rcp/src/org/eclipse/datatools/enablement/rcp/Application.java
new file mode 100644
index 0000000..7b0bbc5
--- /dev/null
+++ b/examples/org.eclipse.datatools.enablement.rcp/src/org/eclipse/datatools/enablement/rcp/Application.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Sybase, Inc. and others
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Ingres - initial API and implementation
+ * 				brianf - a few tweaks
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.rcp;
+
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * This class controls all aspects of the application's execution
+ */
+public class Application implements IApplication {
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app.IApplicationContext)
+	 */
+	public Object start(IApplicationContext context) throws Exception {
+		Display display = PlatformUI.createDisplay();
+		try {
+			int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());
+			if (returnCode == PlatformUI.RETURN_RESTART)
+				return IApplication.EXIT_RESTART;
+			else
+				return IApplication.EXIT_OK;
+		} finally {
+			display.dispose();
+		}
+		
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.app.IApplication#stop()
+	 */
+	public void stop() {
+		final IWorkbench workbench = PlatformUI.getWorkbench();
+		if (workbench == null)
+			return;
+		final Display display = workbench.getDisplay();
+		display.syncExec(new Runnable() {
+			public void run() {
+				if (!display.isDisposed())
+					workbench.close();
+			}
+		});
+	}
+}
diff --git a/examples/org.eclipse.datatools.enablement.rcp/src/org/eclipse/datatools/enablement/rcp/ApplicationActionBarAdvisor.java b/examples/org.eclipse.datatools.enablement.rcp/src/org/eclipse/datatools/enablement/rcp/ApplicationActionBarAdvisor.java
new file mode 100644
index 0000000..5420069
--- /dev/null
+++ b/examples/org.eclipse.datatools.enablement.rcp/src/org/eclipse/datatools/enablement/rcp/ApplicationActionBarAdvisor.java
@@ -0,0 +1,1496 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Sybase, Inc. and others
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Ingres - initial API and implementation
+ * 				brianf - a few tweaks
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.rcp;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.IncrementalProjectBuilder;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Preferences;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.GroupMarker;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.ICoolBarManager;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.StatusLineContributionItem;
+import org.eclipse.jface.internal.provisional.action.IToolBarContributionItem;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IPageListener;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.actions.ActionFactory;
+import org.eclipse.ui.actions.BuildAction;
+import org.eclipse.ui.actions.ContributionItemFactory;
+import org.eclipse.ui.actions.NewWizardMenu;
+import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
+import org.eclipse.ui.application.ActionBarAdvisor;
+import org.eclipse.ui.application.IActionBarConfigurer;
+import org.eclipse.ui.ide.IDEActionFactory;
+import org.eclipse.ui.ide.IIDEActionConstants;
+import org.eclipse.ui.internal.IPreferenceConstants;
+import org.eclipse.ui.internal.IWorkbenchHelpContextIds;
+import org.eclipse.ui.internal.WorkbenchMessages;
+import org.eclipse.ui.internal.WorkbenchPlugin;
+import org.eclipse.ui.internal.handlers.IActionCommandMappingService;
+import org.eclipse.ui.internal.ide.AboutInfo;
+import org.eclipse.ui.internal.ide.IDEInternalWorkbenchImages;
+import org.eclipse.ui.internal.ide.IDEWorkbenchMessages;
+import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
+import org.eclipse.ui.internal.ide.actions.BuildSetMenu;
+import org.eclipse.ui.internal.ide.actions.BuildUtilities;
+import org.eclipse.ui.internal.ide.actions.QuickMenuAction;
+import org.eclipse.ui.internal.ide.actions.RetargetActionWithDefault;
+import org.eclipse.ui.internal.provisional.application.IActionBarConfigurer2;
+import org.eclipse.ui.menus.CommandContributionItem;
+import org.eclipse.ui.menus.CommandContributionItemParameter;
+import org.eclipse.ui.menus.IMenuService;
+
+public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
+
+    private final IWorkbenchWindow window;
+
+    // generic actions
+    private IWorkbenchAction closeAction;
+
+    private IWorkbenchAction closeAllAction;
+    
+    private IWorkbenchAction closeOthersAction;
+
+    private IWorkbenchAction closeAllSavedAction;
+
+    private IWorkbenchAction saveAction;
+
+    private IWorkbenchAction saveAllAction;
+
+    private IWorkbenchAction newWindowAction;
+    
+    private IWorkbenchAction newEditorAction;
+
+    private IWorkbenchAction helpContentsAction;
+
+    private IWorkbenchAction helpSearchAction;
+	
+    private IWorkbenchAction dynamicHelpAction;
+    
+    private IWorkbenchAction aboutAction;
+
+    private IWorkbenchAction openPreferencesAction;
+
+    private IWorkbenchAction saveAsAction;
+
+    private IWorkbenchAction hideShowEditorAction;
+
+    private IWorkbenchAction savePerspectiveAction;
+
+    private IWorkbenchAction resetPerspectiveAction;
+
+    private IWorkbenchAction editActionSetAction;
+
+    private IWorkbenchAction closePerspAction;
+
+    private IWorkbenchAction lockToolBarAction;
+
+    private IWorkbenchAction closeAllPerspsAction;
+
+    private IWorkbenchAction showViewMenuAction;
+
+    private IWorkbenchAction showPartPaneMenuAction;
+
+    private IWorkbenchAction nextPartAction;
+
+    private IWorkbenchAction prevPartAction;
+
+    private IWorkbenchAction nextEditorAction;
+
+    private IWorkbenchAction prevEditorAction;
+
+    private IWorkbenchAction nextPerspectiveAction;
+
+    private IWorkbenchAction prevPerspectiveAction;
+
+    private IWorkbenchAction activateEditorAction;
+
+    private IWorkbenchAction maximizePartAction;
+    
+    private IWorkbenchAction minimizePartAction;
+
+    private IWorkbenchAction switchToEditorAction;
+
+	private IWorkbenchAction workbookEditorsAction;
+
+    private IWorkbenchAction quickAccessAction;
+
+    private IWorkbenchAction backwardHistoryAction;
+
+    private IWorkbenchAction forwardHistoryAction;
+
+    // generic retarget actions
+    private IWorkbenchAction undoAction;
+
+    private IWorkbenchAction redoAction;
+
+    private IWorkbenchAction quitAction;
+
+    private IWorkbenchAction goIntoAction;
+
+    private IWorkbenchAction backAction;
+
+    private IWorkbenchAction forwardAction;
+
+    private IWorkbenchAction upAction;
+
+    private IWorkbenchAction nextAction;
+
+    private IWorkbenchAction previousAction;
+
+    // IDE-specific actions
+    private IWorkbenchAction openWorkspaceAction;
+
+    private IWorkbenchAction projectPropertyDialogAction;
+
+    private IWorkbenchAction newWizardAction;
+
+    private IWorkbenchAction newWizardDropDownAction;
+
+    private IWorkbenchAction importResourcesAction;
+    
+    private IWorkbenchAction exportResourcesAction;
+
+    IWorkbenchAction buildAllAction; // Incremental workspace build
+
+    private IWorkbenchAction cleanAction;
+
+    private IWorkbenchAction toggleAutoBuildAction;
+
+    MenuManager buildWorkingSetMenu;
+
+    private IWorkbenchAction quickStartAction;
+
+    private IWorkbenchAction tipsAndTricksAction;
+
+    private QuickMenuAction showInQuickMenu;
+
+    private QuickMenuAction newQuickMenu;
+
+    private IWorkbenchAction introAction;
+
+    // IDE-specific retarget actions
+    IWorkbenchAction buildProjectAction;
+
+    // contribution items
+    // @issue should obtain from ContributionItemFactory
+    private NewWizardMenu newWizardMenu;
+
+    private IContributionItem pinEditorContributionItem;
+
+//    private IContributionItem searchComboItem;
+    
+    // @issue class is workbench internal
+    private StatusLineContributionItem statusLineItem;
+
+    private Preferences.IPropertyChangeListener prefListener;
+
+    // listener for the "close editors automatically"
+    // preference change
+    private IPropertyChangeListener propPrefListener;
+
+    private IPageListener pageListener;
+
+    private IResourceChangeListener resourceListener;
+    
+    /**
+     * Indicates if the action builder has been disposed
+     */
+    private boolean isDisposed = false;
+
+    /**
+     * The coolbar context menu manager.
+     * @since 3.3
+     */
+	private MenuManager coolbarPopupMenuManager;
+
+    /**
+     * Constructs a new action builder which contributes actions
+     * to the given window.
+     * 
+     * @param configurer the action bar configurer for the window
+     */
+    public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
+        super(configurer);
+        window = configurer.getWindowConfigurer().getWindow();
+    }
+
+    /**
+     * Returns the window to which this action builder is contributing.
+     */
+    private IWorkbenchWindow getWindow() {
+        return window;
+    }
+
+    /**
+     * Hooks listeners on the preference store and the window's page, perspective and selection services.
+     */
+    private void hookListeners() {
+
+        pageListener = new IPageListener() {
+            public void pageActivated(IWorkbenchPage page) {
+                // do nothing
+            }
+
+            public void pageClosed(IWorkbenchPage page) {
+                // do nothing
+            }
+
+            public void pageOpened(IWorkbenchPage page) {
+                // set default build handler -- can't be done until the shell is available
+                IAction buildHandler = new BuildAction(page.getWorkbenchWindow(), IncrementalProjectBuilder.INCREMENTAL_BUILD);
+            	((RetargetActionWithDefault)buildProjectAction).setDefaultHandler(buildHandler);
+            }
+        };
+        getWindow().addPageListener(pageListener);
+
+        prefListener = new Preferences.IPropertyChangeListener() {
+            public void propertyChange(Preferences.PropertyChangeEvent event) {
+                if (event.getProperty().equals(
+                        ResourcesPlugin.PREF_AUTO_BUILDING)) {
+                   	updateBuildActions(false);
+                }
+            }
+        };
+        ResourcesPlugin.getPlugin().getPluginPreferences()
+                .addPropertyChangeListener(prefListener);
+
+        // listener for the "close editors automatically"
+        // preference change
+        propPrefListener = new IPropertyChangeListener() {
+            public void propertyChange(PropertyChangeEvent event) {
+                if (event.getProperty().equals(
+						IPreferenceConstants.REUSE_EDITORS_BOOLEAN)) {
+                    if (window.getShell() != null
+                            && !window.getShell().isDisposed()) {
+                        // this property change notification could be from a non-ui thread
+                        window.getShell().getDisplay().syncExec(new Runnable() {
+                            public void run() {
+                                updatePinActionToolbar();
+                            }
+                        });
+                    }
+                }
+            }
+        };
+        /*
+         * In order to ensure that the pin action toolbar sets its size 
+         * correctly, the pin action should set its visiblity before we call updatePinActionToolbar().
+         * 
+         * In other words we always want the PinActionContributionItem to be notified before the 
+         * WorkbenchActionBuilder.
+         */
+        WorkbenchPlugin.getDefault().getPreferenceStore()
+                .addPropertyChangeListener(propPrefListener);
+        //listen for project description changes, which can affect enablement of build actions
+        resourceListener = new IResourceChangeListener() {
+			public void resourceChanged(IResourceChangeEvent event) {
+				IResourceDelta delta = event.getDelta();
+				if (delta == null) {
+					return;
+				}
+				IResourceDelta[] projectDeltas = delta.getAffectedChildren();
+				for (int i = 0; i < projectDeltas.length; i++) {
+					int kind = projectDeltas[i].getKind();
+					//affected by projects being opened/closed or description changes
+					boolean changed = (projectDeltas[i].getFlags() & (IResourceDelta.DESCRIPTION | IResourceDelta.OPEN)) != 0;
+					if (kind != IResourceDelta.CHANGED || changed) {
+						updateBuildActions(false);
+						return;
+					}
+				}
+			}
+		};
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceListener, IResourceChangeEvent.POST_CHANGE);
+    }
+
+    public void fillActionBars(int flags) {
+        super.fillActionBars(flags);
+        if ((flags & FILL_PROXY) == 0) {
+            updateBuildActions(true);
+            hookListeners();
+        }
+    }
+
+    /**
+     * Fills the coolbar with the workbench actions.
+     */
+    protected void fillCoolBar(ICoolBarManager coolBar) {
+
+    	IActionBarConfigurer2 actionBarConfigurer = (IActionBarConfigurer2) getActionBarConfigurer();
+        { // Set up the context Menu
+            coolbarPopupMenuManager = new MenuManager();
+			coolbarPopupMenuManager.add(new ActionContributionItem(lockToolBarAction));
+            coolbarPopupMenuManager.add(new ActionContributionItem(editActionSetAction));
+            coolBar.setContextMenuManager(coolbarPopupMenuManager);
+            IMenuService menuService = (IMenuService) window.getService(IMenuService.class);
+            menuService.populateContributionManager(coolbarPopupMenuManager, "popup:windowCoolbarContextMenu"); //$NON-NLS-1$
+        }
+        coolBar.add(new GroupMarker(IIDEActionConstants.GROUP_FILE));
+        { // File Group
+            IToolBarManager fileToolBar = actionBarConfigurer.createToolBarManager();
+//            fileToolBar.add(new Separator(IWorkbenchActionConstants.NEW_GROUP));
+//            fileToolBar.add(newWizardDropDownAction);
+            fileToolBar.add(new GroupMarker(IWorkbenchActionConstants.NEW_EXT));
+            fileToolBar.add(new GroupMarker(
+                    IWorkbenchActionConstants.SAVE_GROUP));
+            fileToolBar.add(saveAction);
+            fileToolBar
+                    .add(new GroupMarker(IWorkbenchActionConstants.SAVE_EXT));
+            fileToolBar.add(getPrintItem());
+            fileToolBar
+                    .add(new GroupMarker(IWorkbenchActionConstants.PRINT_EXT));
+
+            fileToolBar
+                    .add(new Separator(IWorkbenchActionConstants.BUILD_GROUP));
+            fileToolBar
+                    .add(new GroupMarker(IWorkbenchActionConstants.BUILD_EXT));
+            fileToolBar.add(new Separator(
+                    IWorkbenchActionConstants.MB_ADDITIONS));
+
+            // Add to the cool bar manager
+            coolBar.add(actionBarConfigurer.createToolBarContributionItem(fileToolBar,
+                    IWorkbenchActionConstants.TOOLBAR_FILE));
+        }
+
+        coolBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
+
+        coolBar.add(new GroupMarker(IIDEActionConstants.GROUP_NAV));
+        { // Navigate group
+            IToolBarManager navToolBar = actionBarConfigurer.createToolBarManager();
+            navToolBar.add(new Separator(
+                    IWorkbenchActionConstants.HISTORY_GROUP));
+            navToolBar
+                    .add(new GroupMarker(IWorkbenchActionConstants.GROUP_APP));
+            navToolBar.add(backwardHistoryAction);
+            navToolBar.add(forwardHistoryAction);
+            navToolBar.add(new Separator(IWorkbenchActionConstants.PIN_GROUP));
+            navToolBar.add(pinEditorContributionItem);
+
+            // Add to the cool bar manager
+            coolBar.add(actionBarConfigurer.createToolBarContributionItem(navToolBar,
+                    IWorkbenchActionConstants.TOOLBAR_NAVIGATE));
+        }
+
+        coolBar.add(new GroupMarker(IWorkbenchActionConstants.GROUP_EDITOR));
+     
+        coolBar.add(new GroupMarker(IWorkbenchActionConstants.GROUP_HELP));
+        
+        { // Help group
+            IToolBarManager helpToolBar = actionBarConfigurer.createToolBarManager();
+            helpToolBar.add(new Separator(IWorkbenchActionConstants.GROUP_HELP));
+//            helpToolBar.add(searchComboItem);
+              // Add the group for applications to contribute
+            helpToolBar.add(new GroupMarker(IWorkbenchActionConstants.GROUP_APP));              
+            // Add to the cool bar manager
+            coolBar.add(actionBarConfigurer.createToolBarContributionItem(helpToolBar,
+                    IWorkbenchActionConstants.TOOLBAR_HELP));
+        }        
+
+    }
+
+    /**
+     * Fills the menu bar with the workbench actions.
+     */
+    protected void fillMenuBar(IMenuManager menuBar) {
+        menuBar.add(createFileMenu());
+        menuBar.add(createEditMenu());
+//        menuBar.add(createNavigateMenu());
+//        menuBar.add(createProjectMenu());
+        menuBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
+        menuBar.add(createWindowMenu());
+        menuBar.add(createHelpMenu());
+    }
+
+    /**
+     * Creates and returns the File menu.
+     */
+    private MenuManager createFileMenu() {
+        MenuManager menu = new MenuManager(IDEWorkbenchMessages.Workbench_file, IWorkbenchActionConstants.M_FILE);
+        menu.add(new GroupMarker(IWorkbenchActionConstants.FILE_START));
+        {
+            // create the New submenu, using the same id for it as the New action
+            String newText = IDEWorkbenchMessages.Workbench_new;
+            String newId = ActionFactory.NEW.getId();
+            MenuManager newMenu = new MenuManager(newText, newId);
+            newMenu.setActionDefinitionId("org.eclipse.ui.file.newQuickMenu"); //$NON-NLS-1$
+            newMenu.add(new Separator(newId));
+            this.newWizardMenu = new NewWizardMenu(getWindow());
+            newMenu.add(this.newWizardMenu);
+            newMenu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+            menu.add(newMenu);
+        }
+		
+        menu.add(new GroupMarker(IWorkbenchActionConstants.NEW_EXT));
+        menu.add(new Separator());
+
+        menu.add(closeAction);
+        menu.add(closeAllAction);
+        //		menu.add(closeAllSavedAction);
+        menu.add(new GroupMarker(IWorkbenchActionConstants.CLOSE_EXT));
+        menu.add(new Separator());
+        menu.add(saveAction);
+        menu.add(saveAsAction);
+        menu.add(saveAllAction);
+        menu.add(getRevertItem());
+        menu.add(new Separator());
+        menu.add(getMoveItem());
+        menu.add(getRenameItem());
+        menu.add(getRefreshItem());
+
+        menu.add(new GroupMarker(IWorkbenchActionConstants.SAVE_EXT));
+        menu.add(new Separator());
+        menu.add(getPrintItem());
+        menu.add(new GroupMarker(IWorkbenchActionConstants.PRINT_EXT));
+        menu.add(new Separator());
+//        menu.add(openWorkspaceAction);
+//        menu.add(new GroupMarker(IWorkbenchActionConstants.OPEN_EXT));
+//        menu.add(new Separator());
+//        menu.add(importResourcesAction);
+//        menu.add(exportResourcesAction);
+        menu.add(new GroupMarker(IWorkbenchActionConstants.IMPORT_EXT));
+        menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+
+        menu.add(new Separator());
+        menu.add(getPropertiesItem());
+
+        menu.add(ContributionItemFactory.REOPEN_EDITORS.create(getWindow()));
+        menu.add(new GroupMarker(IWorkbenchActionConstants.MRU));
+        menu.add(new Separator());
+        
+        // If we're on OS X we shouldn't show this command in the File menu. It
+		// should be invisible to the user. However, we should not remove it -
+		// the carbon UI code will do a search through our menu structure
+		// looking for it when Cmd-Q is invoked (or Quit is chosen from the
+		// application menu.
+		ActionContributionItem quitItem = new ActionContributionItem(quitAction);
+		quitItem.setVisible(!"carbon".equals(SWT.getPlatform())); //$NON-NLS-1$
+		menu.add(quitItem);
+		menu.add(new GroupMarker(IWorkbenchActionConstants.FILE_END));
+		return menu;
+    }
+
+    /**
+	 * Creates and returns the Edit menu.
+	 */
+    private MenuManager createEditMenu() {
+        MenuManager menu = new MenuManager(IDEWorkbenchMessages.Workbench_edit, IWorkbenchActionConstants.M_EDIT);
+        menu.add(new GroupMarker(IWorkbenchActionConstants.EDIT_START));
+
+        menu.add(undoAction);
+        menu.add(redoAction);
+        menu.add(new GroupMarker(IWorkbenchActionConstants.UNDO_EXT));
+        menu.add(new Separator());
+
+        menu.add(getCutItem());
+        menu.add(getCopyItem());
+        menu.add(getPasteItem());
+        menu.add(new GroupMarker(IWorkbenchActionConstants.CUT_EXT));
+        menu.add(new Separator());
+
+        menu.add(getDeleteItem());
+        menu.add(getSelectAllItem());
+        menu.add(new Separator());
+
+        menu.add(getFindItem());
+        menu.add(new GroupMarker(IWorkbenchActionConstants.FIND_EXT));
+        menu.add(new Separator());
+
+//        menu.add(getBookmarkItem());
+//        menu.add(getTaskItem());
+        menu.add(new GroupMarker(IWorkbenchActionConstants.ADD_EXT));
+
+        menu.add(new GroupMarker(IWorkbenchActionConstants.EDIT_END));
+        menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+        return menu;
+    }
+
+    /**
+     * Creates and returns the Navigate menu.
+     */
+    private MenuManager createNavigateMenu() {
+        MenuManager menu = new MenuManager(
+                IDEWorkbenchMessages.Workbench_navigate, IWorkbenchActionConstants.M_NAVIGATE);
+        menu.add(new GroupMarker(IWorkbenchActionConstants.NAV_START));
+        menu.add(goIntoAction);
+
+        MenuManager goToSubMenu = new MenuManager(IDEWorkbenchMessages.Workbench_goTo, IWorkbenchActionConstants.GO_TO);
+        menu.add(goToSubMenu);
+        goToSubMenu.add(backAction);
+        goToSubMenu.add(forwardAction);
+        goToSubMenu.add(upAction);
+        goToSubMenu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+
+        menu.add(new Separator(IWorkbenchActionConstants.OPEN_EXT));
+        for (int i = 2; i < 5; ++i) {
+            menu.add(new Separator(IWorkbenchActionConstants.OPEN_EXT + i));
+        }
+        menu.add(new Separator(IWorkbenchActionConstants.SHOW_EXT));
+        {
+			MenuManager showInSubMenu = new MenuManager(
+					IDEWorkbenchMessages.Workbench_showIn, "showIn"); //$NON-NLS-1$
+			showInSubMenu.setActionDefinitionId(showInQuickMenu
+					.getActionDefinitionId());
+			showInSubMenu.add(ContributionItemFactory.VIEWS_SHOW_IN
+					.create(getWindow()));
+			menu.add(showInSubMenu);
+		}
+        for (int i = 2; i < 5; ++i) {
+            menu.add(new Separator(IWorkbenchActionConstants.SHOW_EXT + i));
+        }
+        menu.add(new Separator());
+        menu.add(nextAction);
+        menu.add(previousAction);
+        menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+        menu.add(new GroupMarker(IWorkbenchActionConstants.NAV_END));
+
+        //TBD: Location of this actions
+        menu.add(new Separator());
+        menu.add(backwardHistoryAction);
+        menu.add(forwardHistoryAction);
+        return menu;
+    }
+
+    /**
+     * Creates and returns the Project menu.
+     */
+    private MenuManager createProjectMenu() {
+        MenuManager menu = new MenuManager(
+                IDEWorkbenchMessages.Workbench_project, IWorkbenchActionConstants.M_PROJECT);
+        menu.add(new Separator(IWorkbenchActionConstants.PROJ_START));
+
+        menu.add(getOpenProjectItem());
+        menu.add(getCloseProjectItem());
+        menu.add(new GroupMarker(IWorkbenchActionConstants.OPEN_EXT));
+        menu.add(new Separator());
+//        menu.add(buildAllAction);
+//        menu.add(buildProjectAction);
+//        addWorkingSetBuildActions(menu);
+//        menu.add(cleanAction);
+//        menu.add(toggleAutoBuildAction);
+//        menu.add(new GroupMarker(IWorkbenchActionConstants.BUILD_EXT));
+//        menu.add(new Separator());
+
+        menu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
+        menu.add(new GroupMarker(IWorkbenchActionConstants.PROJ_END));
+        menu.add(new Separator());
+        menu.add(projectPropertyDialogAction);
+        return menu;
+    }
+
+    /**
+     * Creates and returns the Window menu.
+     */
+    private MenuManager createWindowMenu() {
+        MenuManager menu = new MenuManager(
+                IDEWorkbenchMessages.Workbench_window, IWorkbenchActionConstants.M_WINDOW);
+
+//        menu.add(newWindowAction);
+//		menu.add(newEditorAction);
+//		
+//        menu.add(new Separator());
+        addPerspectiveActions(menu);
+        menu.add(new Separator());
+        addKeyboardShortcuts(menu);
+        Separator sep = new Separator(IWorkbenchActionConstants.MB_ADDITIONS);
+		sep.setVisible(!"carbon".equals(SWT.getPlatform())); //$NON-NLS-1$
+		menu.add(sep);
+        
+        // See the comment for quit in createFileMenu
+        ActionContributionItem openPreferencesItem = new ActionContributionItem(openPreferencesAction);
+        openPreferencesItem.setVisible(!"carbon".equals(SWT.getPlatform())); //$NON-NLS-1$
+        menu.add(openPreferencesItem);
+
+        menu.add(ContributionItemFactory.OPEN_WINDOWS.create(getWindow()));
+        return menu;
+    }
+
+    /**
+     * Adds the perspective actions to the specified menu.
+     */
+    private void addPerspectiveActions(MenuManager menu) {
+        {
+//            String openText = IDEWorkbenchMessages.Workbench_openPerspective;
+//            MenuManager changePerspMenuMgr = new MenuManager(openText,
+//                    "openPerspective"); //$NON-NLS-1$
+//            IContributionItem changePerspMenuItem = ContributionItemFactory.PERSPECTIVES_SHORTLIST
+//                    .create(getWindow());
+//            changePerspMenuMgr.add(changePerspMenuItem);
+//            menu.add(changePerspMenuMgr);
+        }
+        {
+            MenuManager showViewMenuMgr = new MenuManager(IDEWorkbenchMessages.Workbench_showView, "showView"); //$NON-NLS-1$
+            IContributionItem showViewMenu = ContributionItemFactory.VIEWS_SHORTLIST
+                    .create(getWindow());
+            showViewMenuMgr.add(showViewMenu);
+            menu.add(showViewMenuMgr);
+        }
+        menu.add(new Separator());
+//        menu.add(editActionSetAction);
+//        menu.add(savePerspectiveAction);
+        menu.add(resetPerspectiveAction);
+//        menu.add(closePerspAction);
+//        menu.add(closeAllPerspsAction);
+    }
+
+    /**
+     * Adds the keyboard navigation submenu to the specified menu.
+     */
+    private void addWorkingSetBuildActions(MenuManager menu) {
+        buildWorkingSetMenu = new MenuManager(IDEWorkbenchMessages.Workbench_buildSet);
+        IContributionItem workingSetBuilds = new BuildSetMenu(window,
+                getActionBarConfigurer());
+        buildWorkingSetMenu.add(workingSetBuilds);
+        menu.add(buildWorkingSetMenu);
+    }
+
+    /**
+     * Adds the keyboard navigation submenu to the specified menu.
+     */
+    private void addKeyboardShortcuts(MenuManager menu) {
+        MenuManager subMenu = new MenuManager(IDEWorkbenchMessages.Workbench_shortcuts, "shortcuts"); //$NON-NLS-1$
+        menu.add(subMenu);
+        subMenu.add(showPartPaneMenuAction);
+        subMenu.add(showViewMenuAction);
+        subMenu.add(quickAccessAction);
+        subMenu.add(new Separator());
+        subMenu.add(maximizePartAction);
+        subMenu.add(minimizePartAction);
+        subMenu.add(new Separator());
+        subMenu.add(activateEditorAction);
+        subMenu.add(nextEditorAction);
+        subMenu.add(prevEditorAction);
+        subMenu.add(switchToEditorAction);
+        subMenu.add(new Separator());
+        subMenu.add(nextPartAction);
+        subMenu.add(prevPartAction);
+//        subMenu.add(new Separator());
+//        subMenu.add(nextPerspectiveAction);
+//        subMenu.add(prevPerspectiveAction);
+    }
+
+    /**
+	 * Creates and returns the Help menu.
+	 */
+	private MenuManager createHelpMenu() {
+		MenuManager menu = new MenuManager(IDEWorkbenchMessages.Workbench_help, IWorkbenchActionConstants.M_HELP);
+		addSeparatorOrGroupMarker(menu, "group.intro"); //$NON-NLS-1$
+		// See if a welcome or intro page is specified
+		if (introAction != null) {
+			menu.add(introAction);
+		} else if (quickStartAction != null) {
+			menu.add(quickStartAction);
+		}
+		menu.add(new GroupMarker("group.intro.ext")); //$NON-NLS-1$
+		addSeparatorOrGroupMarker(menu, "group.main"); //$NON-NLS-1$
+		menu.add(helpContentsAction);
+        menu.add(helpSearchAction);
+		menu.add(dynamicHelpAction);
+		addSeparatorOrGroupMarker(menu, "group.assist"); //$NON-NLS-1$
+		// See if a tips and tricks page is specified
+		if (tipsAndTricksAction != null) {
+			menu.add(tipsAndTricksAction);
+		}
+		// HELP_START should really be the first item, but it was after
+		// quickStartAction and tipsAndTricksAction in 2.1.
+		menu.add(new GroupMarker(IWorkbenchActionConstants.HELP_START));
+		menu.add(new GroupMarker("group.main.ext")); //$NON-NLS-1$
+		addSeparatorOrGroupMarker(menu, "group.tutorials"); //$NON-NLS-1$
+		addSeparatorOrGroupMarker(menu, "group.tools"); //$NON-NLS-1$
+		addSeparatorOrGroupMarker(menu, "group.updates"); //$NON-NLS-1$
+		menu.add(new GroupMarker(IWorkbenchActionConstants.HELP_END));
+		addSeparatorOrGroupMarker(menu, IWorkbenchActionConstants.MB_ADDITIONS);
+		// about should always be at the bottom
+		menu.add(new Separator("group.about")); //$NON-NLS-1$
+		
+		ActionContributionItem aboutItem = new ActionContributionItem(aboutAction);
+		aboutItem.setVisible(!"carbon".equals(SWT.getPlatform())); //$NON-NLS-1$
+        menu.add(aboutItem);
+		menu.add(new GroupMarker("group.about.ext")); //$NON-NLS-1$
+        return menu;
+    }
+
+    /**
+	 * Adds a <code>GroupMarker</code> or <code>Separator</code> to a menu.
+	 * The test for whether a separator should be added is done by checking for
+	 * the existence of a preference matching the string
+	 * useSeparator.MENUID.GROUPID that is set to <code>true</code>.
+	 * 
+	 * @param menu
+	 *            the menu to add to
+	 * @param groupId
+	 *            the group id for the added separator or group marker
+	 */
+	private void addSeparatorOrGroupMarker(MenuManager menu, String groupId) {
+		String prefId = "useSeparator." + menu.getId() + "." + groupId; //$NON-NLS-1$ //$NON-NLS-2$
+		boolean addExtraSeparators = IDEWorkbenchPlugin.getDefault()
+				.getPreferenceStore().getBoolean(prefId);
+		if (addExtraSeparators) {
+			menu.add(new Separator(groupId));
+		} else {
+			menu.add(new GroupMarker(groupId));
+		}
+	}
+    
+    /**
+     * Disposes any resources and unhooks any listeners that are no longer needed.
+     * Called when the window is closed.
+     */
+    public void dispose() {
+        if (isDisposed) {
+			return;
+		}
+    	isDisposed = true;
+    	IMenuService menuService = (IMenuService) window.getService(IMenuService.class);
+        menuService.releaseContributions(coolbarPopupMenuManager);
+        coolbarPopupMenuManager.dispose();
+        
+        getActionBarConfigurer().getStatusLineManager().remove(statusLineItem);
+        if (pageListener != null) {
+            window.removePageListener(pageListener);
+            pageListener = null;
+        }
+        if (prefListener != null) {
+            ResourcesPlugin.getPlugin().getPluginPreferences()
+                    .removePropertyChangeListener(prefListener);
+            prefListener = null;
+        }
+        if (propPrefListener != null) {
+            WorkbenchPlugin.getDefault().getPreferenceStore()
+                    .removePropertyChangeListener(propPrefListener);
+            propPrefListener = null;
+        }
+        if (resourceListener != null) {
+            ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceListener);
+            resourceListener = null;
+        }
+
+        pinEditorContributionItem.dispose();
+        showInQuickMenu.dispose();
+        newQuickMenu.dispose();
+//        searchComboItem.dispose();
+        
+        // null out actions to make leak debugging easier
+        closeAction = null;
+        closeAllAction = null;
+        closeAllSavedAction = null;
+        closeOthersAction = null;
+        saveAction = null;
+        saveAllAction = null;
+        newWindowAction = null;
+		newEditorAction = null;
+        helpContentsAction = null;
+        helpSearchAction = null;
+		dynamicHelpAction = null;
+        aboutAction = null;
+        openPreferencesAction = null;
+        saveAsAction = null;
+        hideShowEditorAction = null;
+        savePerspectiveAction = null;
+        resetPerspectiveAction = null;
+        editActionSetAction = null;
+        closePerspAction = null;
+        lockToolBarAction = null;
+        closeAllPerspsAction = null;
+        showViewMenuAction = null;
+        showPartPaneMenuAction = null;
+        nextPartAction = null;
+        prevPartAction = null;
+        nextEditorAction = null;
+        prevEditorAction = null;
+        nextPerspectiveAction = null;
+        prevPerspectiveAction = null;
+        activateEditorAction = null;
+        maximizePartAction = null;
+        minimizePartAction = null;
+        switchToEditorAction = null;
+        quickAccessAction.dispose();
+        quickAccessAction = null;
+        backwardHistoryAction = null;
+        forwardHistoryAction = null;
+        undoAction = null;
+        redoAction = null;
+        quitAction = null;
+        goIntoAction = null;
+        backAction = null;
+        forwardAction = null;
+        upAction = null;
+        nextAction = null;
+        previousAction = null;
+        openWorkspaceAction = null;
+        projectPropertyDialogAction = null;
+        newWizardAction = null;
+        newWizardDropDownAction = null;
+        importResourcesAction = null;
+        exportResourcesAction = null;
+        buildAllAction = null;
+        cleanAction = null;
+        toggleAutoBuildAction = null;
+        buildWorkingSetMenu = null;
+        quickStartAction = null;
+        tipsAndTricksAction = null;
+        showInQuickMenu = null;
+        newQuickMenu = null;
+        buildProjectAction = null;
+        newWizardMenu = null;
+        pinEditorContributionItem = null;
+//        searchComboItem = null;
+        statusLineItem = null;
+        prefListener = null;
+        propPrefListener = null;
+        introAction = null;
+        
+        super.dispose();
+    }
+
+    void updateModeLine(final String text) {
+        statusLineItem.setText(text);
+    }
+
+    /**
+     * Returns true if the menu with the given ID should
+     * be considered as an OLE container menu. Container menus
+     * are preserved in OLE menu merging.
+     */
+    public boolean isApplicationMenu(String menuId) {
+        if (menuId.equals(IWorkbenchActionConstants.M_FILE)) {
+			return true;
+		}
+        if (menuId.equals(IWorkbenchActionConstants.M_WINDOW)) {
+			return true;
+		}
+        return false;
+    }
+
+    /**
+     * Return whether or not given id matches the id of the coolitems that
+     * the workbench creates.
+     */
+    public boolean isWorkbenchCoolItemId(String id) {
+        if (IWorkbenchActionConstants.TOOLBAR_FILE.equalsIgnoreCase(id)) {
+			return true;
+		}
+        if (IWorkbenchActionConstants.TOOLBAR_NAVIGATE.equalsIgnoreCase(id)) {
+			return true;
+		}
+        return false;
+    }
+
+    /**
+     * Fills the status line with the workbench contribution items.
+     */
+    protected void fillStatusLine(IStatusLineManager statusLine) {
+        statusLine.add(statusLineItem);
+    }
+
+    /**
+     * Creates actions (and contribution items) for the menu bar, toolbar and status line.
+     */
+    protected void makeActions(final IWorkbenchWindow window) {
+        // @issue should obtain from ConfigurationItemFactory
+        statusLineItem = new StatusLineContributionItem("ModeContributionItem"); //$NON-NLS-1$
+
+        newWizardAction = ActionFactory.NEW.create(window);
+        register(newWizardAction);
+
+        newWizardDropDownAction = IDEActionFactory.NEW_WIZARD_DROP_DOWN
+                .create(window);
+        register(newWizardDropDownAction);
+
+        importResourcesAction = ActionFactory.IMPORT.create(window);
+        register(importResourcesAction);
+
+        exportResourcesAction = ActionFactory.EXPORT.create(window);
+        register(exportResourcesAction);
+        
+        buildAllAction = IDEActionFactory.BUILD.create(window);
+        register(buildAllAction);
+
+        cleanAction = IDEActionFactory.BUILD_CLEAN.create(window);
+        register(cleanAction);
+
+        toggleAutoBuildAction = IDEActionFactory.BUILD_AUTOMATICALLY
+                .create(window);
+        register(toggleAutoBuildAction);
+
+        saveAction = ActionFactory.SAVE.create(window);
+        register(saveAction);
+
+        saveAsAction = ActionFactory.SAVE_AS.create(window);
+        register(saveAsAction);
+
+        saveAllAction = ActionFactory.SAVE_ALL.create(window);
+        register(saveAllAction);
+		
+        newWindowAction = ActionFactory.OPEN_NEW_WINDOW.create(getWindow());
+        newWindowAction.setText(IDEWorkbenchMessages.Workbench_openNewWindow);
+        register(newWindowAction);
+
+		newEditorAction = ActionFactory.NEW_EDITOR.create(window);
+		register(newEditorAction);
+
+        undoAction = ActionFactory.UNDO.create(window);
+        register(undoAction);
+
+        redoAction = ActionFactory.REDO.create(window);
+        register(redoAction);
+
+
+
+
+
+
+        closeAction = ActionFactory.CLOSE.create(window);
+        register(closeAction);
+
+        closeAllAction = ActionFactory.CLOSE_ALL.create(window);
+        register(closeAllAction);
+
+        closeOthersAction = ActionFactory.CLOSE_OTHERS.create(window);
+        register(closeOthersAction);
+
+        closeAllSavedAction = ActionFactory.CLOSE_ALL_SAVED.create(window);
+        register(closeAllSavedAction);
+
+        helpContentsAction = ActionFactory.HELP_CONTENTS.create(window);
+        register(helpContentsAction);
+
+        helpSearchAction = ActionFactory.HELP_SEARCH.create(window);
+        register(helpSearchAction);
+		
+        dynamicHelpAction = ActionFactory.DYNAMIC_HELP.create(window);
+        register(dynamicHelpAction);
+        
+        aboutAction = ActionFactory.ABOUT.create(window);
+        aboutAction
+                .setImageDescriptor(IDEInternalWorkbenchImages
+                        .getImageDescriptor(IDEInternalWorkbenchImages.IMG_OBJS_DEFAULT_PROD));
+        register(aboutAction);
+
+        openPreferencesAction = ActionFactory.PREFERENCES.create(window);
+        register(openPreferencesAction);
+
+        
+
+
+
+        makeFeatureDependentActions(window);
+
+        // Actions for invisible accelerators
+        showViewMenuAction = ActionFactory.SHOW_VIEW_MENU.create(window);
+        register(showViewMenuAction);
+
+        showPartPaneMenuAction = ActionFactory.SHOW_PART_PANE_MENU
+                .create(window);
+        register(showPartPaneMenuAction);
+
+        nextEditorAction = ActionFactory.NEXT_EDITOR.create(window);
+        register(nextEditorAction);
+        prevEditorAction = ActionFactory.PREVIOUS_EDITOR.create(window);
+        register(prevEditorAction);
+        ActionFactory.linkCycleActionPair(nextEditorAction, prevEditorAction);
+
+        nextPartAction = ActionFactory.NEXT_PART.create(window);
+        register(nextPartAction);
+        prevPartAction = ActionFactory.PREVIOUS_PART.create(window);
+        register(prevPartAction);
+        ActionFactory.linkCycleActionPair(nextPartAction, prevPartAction);
+
+        nextPerspectiveAction = ActionFactory.NEXT_PERSPECTIVE
+                .create(window);
+        register(nextPerspectiveAction);
+        prevPerspectiveAction = ActionFactory.PREVIOUS_PERSPECTIVE
+                .create(window);
+        register(prevPerspectiveAction);
+        ActionFactory.linkCycleActionPair(nextPerspectiveAction,
+                prevPerspectiveAction);
+
+        activateEditorAction = ActionFactory.ACTIVATE_EDITOR
+                .create(window);
+        register(activateEditorAction);
+
+        maximizePartAction = ActionFactory.MAXIMIZE.create(window);
+        register(maximizePartAction);
+
+		minimizePartAction = ActionFactory.MINIMIZE.create(window);
+		register(minimizePartAction);
+        
+        switchToEditorAction = ActionFactory.SHOW_OPEN_EDITORS
+                .create(window);
+        register(switchToEditorAction);
+
+        workbookEditorsAction = ActionFactory.SHOW_WORKBOOK_EDITORS
+        		.create(window);
+        register(workbookEditorsAction);
+        
+        quickAccessAction = ActionFactory.SHOW_QUICK_ACCESS
+        	.create(window);
+
+        hideShowEditorAction = ActionFactory.SHOW_EDITOR.create(window);
+        register(hideShowEditorAction);
+        savePerspectiveAction = ActionFactory.SAVE_PERSPECTIVE
+                .create(window);
+        register(savePerspectiveAction);
+        editActionSetAction = ActionFactory.EDIT_ACTION_SETS
+                .create(window);
+        register(editActionSetAction);
+        lockToolBarAction = ActionFactory.LOCK_TOOL_BAR.create(window);
+        register(lockToolBarAction);
+        resetPerspectiveAction = ActionFactory.RESET_PERSPECTIVE
+                .create(window);
+        register(resetPerspectiveAction);
+        closePerspAction = ActionFactory.CLOSE_PERSPECTIVE.create(window);
+        register(closePerspAction);
+        closeAllPerspsAction = ActionFactory.CLOSE_ALL_PERSPECTIVES
+                .create(window);
+        register(closeAllPerspsAction);
+
+        forwardHistoryAction = ActionFactory.FORWARD_HISTORY
+                .create(window);
+        register(forwardHistoryAction);
+
+        backwardHistoryAction = ActionFactory.BACKWARD_HISTORY
+                .create(window);
+        register(backwardHistoryAction);
+
+
+
+
+        quitAction = ActionFactory.QUIT.create(window);
+        register(quitAction);
+
+
+
+        goIntoAction = ActionFactory.GO_INTO.create(window);
+        register(goIntoAction);
+
+        backAction = ActionFactory.BACK.create(window);
+        register(backAction);
+
+        forwardAction = ActionFactory.FORWARD.create(window);
+        register(forwardAction);
+
+        upAction = ActionFactory.UP.create(window);
+        register(upAction);
+
+        nextAction = ActionFactory.NEXT.create(window);
+        nextAction
+                .setImageDescriptor(IDEInternalWorkbenchImages
+                        .getImageDescriptor(IDEInternalWorkbenchImages.IMG_ETOOL_NEXT_NAV));
+        register(nextAction);
+
+        previousAction = ActionFactory.PREVIOUS.create(window);
+        previousAction
+                .setImageDescriptor(IDEInternalWorkbenchImages
+                        .getImageDescriptor(IDEInternalWorkbenchImages.IMG_ETOOL_PREVIOUS_NAV));
+        register(previousAction);
+
+        buildProjectAction = IDEActionFactory.BUILD_PROJECT.create(window);
+        register(buildProjectAction);
+
+        openWorkspaceAction = IDEActionFactory.OPEN_WORKSPACE
+                .create(window);
+        register(openWorkspaceAction);
+
+        projectPropertyDialogAction = IDEActionFactory.OPEN_PROJECT_PROPERTIES
+                .create(window);
+        register(projectPropertyDialogAction);
+
+        if (window.getWorkbench().getIntroManager().hasIntro()) {
+            introAction = ActionFactory.INTRO.create(window);
+            register(introAction);
+        }
+
+        String showInQuickMenuId = "org.eclipse.ui.navigate.showInQuickMenu"; //$NON-NLS-1$
+        showInQuickMenu = new QuickMenuAction(showInQuickMenuId) {
+            protected void fillMenu(IMenuManager menu) {
+                menu.add(ContributionItemFactory.VIEWS_SHOW_IN
+                        .create(window));
+            }
+        };
+        register(showInQuickMenu);
+
+        final String newQuickMenuId = "org.eclipse.ui.file.newQuickMenu"; //$NON-NLS-1$
+        newQuickMenu = new QuickMenuAction(newQuickMenuId) {
+            protected void fillMenu(IMenuManager menu) {
+                menu.add(new NewWizardMenu(window));
+            }
+        };
+        register(newQuickMenu);
+
+        pinEditorContributionItem = ContributionItemFactory.PIN_EDITOR
+                .create(window);
+        
+//        searchComboItem = ContributionItemFactory.HELP_SEARCH.create(window);
+    }
+
+    /**
+     * Creates the feature-dependent actions for the menu bar.
+     */
+    private void makeFeatureDependentActions(IWorkbenchWindow window) {
+        AboutInfo[] infos = null;
+        
+        IPreferenceStore prefs = IDEWorkbenchPlugin.getDefault().getPreferenceStore();
+
+        // Optimization: avoid obtaining the about infos if the platform state is
+        // unchanged from last time.  See bug 75130 for details.
+        String stateKey = "platformState"; //$NON-NLS-1$
+        String prevState = prefs.getString(stateKey);
+        String currentState = String.valueOf(Platform.getStateStamp());
+        boolean sameState = currentState.equals(prevState);
+        if (!sameState) {
+        	prefs.putValue(stateKey, currentState);
+        }
+        
+        // See if a welcome page is specified.
+        // Optimization: if welcome pages were found on a previous run, then just add the action.
+        String quickStartKey = IDEActionFactory.QUICK_START.getId(); 
+        String showQuickStart = prefs.getString(quickStartKey);
+        if (sameState && "true".equals(showQuickStart)) { //$NON-NLS-1$
+            quickStartAction = IDEActionFactory.QUICK_START.create(window);
+			register(quickStartAction);
+        }
+        else if (sameState && "false".equals(showQuickStart)) { //$NON-NLS-1$
+        	// do nothing
+        }
+        else {
+        	// do the work
+    		infos = IDEWorkbenchPlugin.getDefault().getFeatureInfos();
+        	boolean found = hasWelcomePage(infos);
+            prefs.setValue(quickStartKey, found);
+            if (found) {
+                quickStartAction = IDEActionFactory.QUICK_START.create(window);
+                register(quickStartAction);
+	        }
+        }
+        
+        // See if a tips and tricks page is specified.
+        // Optimization: if tips and tricks were found on a previous run, then just add the action.
+        String tipsAndTricksKey = IDEActionFactory.TIPS_AND_TRICKS.getId();
+        String showTipsAndTricks = prefs.getString(tipsAndTricksKey);
+        if (sameState && "true".equals(showTipsAndTricks)) { //$NON-NLS-1$
+            tipsAndTricksAction = IDEActionFactory.TIPS_AND_TRICKS
+					.create(window);
+			register(tipsAndTricksAction);
+        }
+        else if (sameState && "false".equals(showTipsAndTricks)) { //$NON-NLS-1$
+        	// do nothing
+        }
+        else {
+        	// do the work
+	    	if (infos == null) {
+	    		infos = IDEWorkbenchPlugin.getDefault().getFeatureInfos();
+	    	}
+	    	boolean found = hasTipsAndTricks(infos);
+	    	prefs.setValue(tipsAndTricksKey, found);
+	    	if (found) {
+	            tipsAndTricksAction = IDEActionFactory.TIPS_AND_TRICKS
+						.create(window);
+				register(tipsAndTricksAction);
+		    }
+        }
+    }
+
+    /**
+     * Returns whether any of the given infos have a welcome page.
+     * 
+     * @param infos the infos
+     * @return <code>true</code> if a welcome page was found, <code>false</code> if not
+     */
+    private boolean hasWelcomePage(AboutInfo[] infos) {
+        for (int i = 0; i < infos.length; i++) {
+            if (infos[i].getWelcomePageURL() != null) {
+            	return true;
+            }
+        }
+        return false;
+	}
+
+    /**
+     * Returns whether any of the given infos have tips and tricks.
+     * 
+     * @param infos the infos
+     * @return <code>true</code> if tips and tricks were found, <code>false</code> if not
+     */
+    private boolean hasTipsAndTricks(AboutInfo[] infos) {
+        for (int i = 0; i < infos.length; i++) {
+            if (infos[i].getTipsAndTricksHref() != null) {
+            	return true;
+            }
+        }
+        return false;
+	}
+
+	/**
+	 * Update the build actions on the toolbar and menu bar based on the current
+	 * state of autobuild. This method can be called from any thread.
+	 * 
+	 * @param immediately
+	 *            <code>true</code> to update the actions immediately,
+	 *            <code>false</code> to queue the update to be run in the
+	 *            event loop
+	 */
+    void updateBuildActions(boolean immediately) {
+        // this can be triggered by property or resource change notifications
+        Runnable update = new Runnable() {
+            public void run() {
+                if (isDisposed) {
+					return;
+				}
+		    	IWorkspace workspace = ResourcesPlugin.getWorkspace();
+				IProject[] projects = workspace.getRoot().getProjects();
+		    	boolean enabled = BuildUtilities.isEnabled(projects, IncrementalProjectBuilder.INCREMENTAL_BUILD);
+		        //update menu bar actions in project menu
+		        buildAllAction.setEnabled(enabled);
+		        buildProjectAction.setEnabled(enabled);
+		        toggleAutoBuildAction.setChecked(workspace.isAutoBuilding());
+		        cleanAction.setEnabled(BuildUtilities.isEnabled(projects, IncrementalProjectBuilder.CLEAN_BUILD));
+		
+		        //update the cool bar build button
+		        ICoolBarManager coolBarManager = getActionBarConfigurer()
+		                .getCoolBarManager();
+		        IContributionItem cbItem = coolBarManager
+		                .find(IWorkbenchActionConstants.TOOLBAR_FILE);
+		        if (!(cbItem instanceof IToolBarContributionItem)) {
+		            // This should not happen
+		            IDEWorkbenchPlugin.log("File toolbar contribution item is missing"); //$NON-NLS-1$
+		            return;
+		        }
+		        IToolBarContributionItem toolBarItem = (IToolBarContributionItem) cbItem;
+		        IToolBarManager toolBarManager = toolBarItem.getToolBarManager();
+		        if (toolBarManager == null) {
+		            // error if this happens, file toolbar assumed to always exist
+		            IDEWorkbenchPlugin.log("File toolbar is missing"); //$NON-NLS-1$
+		            return;
+		        }
+		        //add the build button if build actions are enabled, and remove it otherwise
+		        boolean found = toolBarManager.find(buildAllAction.getId()) != null;
+		        if (enabled && !found) {
+		            toolBarManager.appendToGroup(IWorkbenchActionConstants.BUILD_GROUP,
+		                    buildAllAction);
+		            toolBarManager.update(false);
+		            toolBarItem.update(ICoolBarManager.SIZE);
+		        } else if (buildAllAction != null && found && !enabled) {
+		            toolBarManager.remove(buildAllAction.getId());
+		            toolBarManager.update(false);
+		            toolBarItem.update(ICoolBarManager.SIZE);
+		        }
+            }
+        };
+        if (immediately) {
+        	update.run();
+        }
+        else {
+	        // Dispatch the update to be run later in the UI thread.
+	        // This helps to reduce flicker if autobuild is being temporarily disabled programmatically.
+	        Shell shell = window.getShell();
+	        if (shell != null && !shell.isDisposed()) {
+        		shell.getDisplay().asyncExec(update);
+	        }
+        }
+    }
+
+	/**
+     * Update the pin action's tool bar
+     */
+    void updatePinActionToolbar() {
+
+        ICoolBarManager coolBarManager = getActionBarConfigurer()
+                .getCoolBarManager();
+        IContributionItem cbItem = coolBarManager
+                .find(IWorkbenchActionConstants.TOOLBAR_NAVIGATE);
+        if (!(cbItem instanceof IToolBarContributionItem)) {
+            // This should not happen
+            IDEWorkbenchPlugin
+                    .log("Navigation toolbar contribution item is missing"); //$NON-NLS-1$
+            return;
+        }
+        IToolBarContributionItem toolBarItem = (IToolBarContributionItem) cbItem;
+        IToolBarManager toolBarManager = toolBarItem.getToolBarManager();
+        if (toolBarManager == null) {
+            // error if this happens, navigation toolbar assumed to always exist
+            IDEWorkbenchPlugin.log("Navigate toolbar is missing"); //$NON-NLS-1$
+            return;
+        }
+
+        toolBarManager.update(false);
+        toolBarItem.update(ICoolBarManager.SIZE);
+    }
+    
+    private IContributionItem getCutItem() {
+		return getItem(
+				ActionFactory.CUT.getId(),
+				"org.eclipse.ui.edit.cut", //$NON-NLS-1$
+				ISharedImages.IMG_TOOL_CUT,
+				ISharedImages.IMG_TOOL_CUT_DISABLED,
+				WorkbenchMessages.Workbench_cut,
+				WorkbenchMessages.Workbench_cutToolTip, null);
+	}
+    
+    private IContributionItem getCopyItem() {
+		return getItem(
+				ActionFactory.COPY.getId(),
+				"org.eclipse.ui.edit.copy", //$NON-NLS-1$
+				ISharedImages.IMG_TOOL_COPY,
+				ISharedImages.IMG_TOOL_COPY_DISABLED,
+				WorkbenchMessages.Workbench_copy,
+				WorkbenchMessages.Workbench_copyToolTip, null);
+	}
+    
+    private IContributionItem getPasteItem() {
+		return getItem(
+				ActionFactory.PASTE.getId(),
+				"org.eclipse.ui.edit.paste", ISharedImages.IMG_TOOL_PASTE, //$NON-NLS-1$
+				ISharedImages.IMG_TOOL_PASTE_DISABLED,
+				WorkbenchMessages.Workbench_paste,
+				WorkbenchMessages.Workbench_pasteToolTip, null);
+	}
+    
+    private IContributionItem getPrintItem() {
+		return getItem(
+				ActionFactory.PRINT.getId(),
+				"org.eclipse.ui.file.print", ISharedImages.IMG_ETOOL_PRINT_EDIT, //$NON-NLS-1$
+				ISharedImages.IMG_ETOOL_PRINT_EDIT_DISABLED,
+				WorkbenchMessages.Workbench_print,
+				WorkbenchMessages.Workbench_printToolTip, null);
+	}
+    
+    private IContributionItem getSelectAllItem() {
+		return getItem(
+				ActionFactory.SELECT_ALL.getId(),
+				"org.eclipse.ui.edit.selectAll", //$NON-NLS-1$
+				null, null, WorkbenchMessages.Workbench_selectAll,
+				WorkbenchMessages.Workbench_selectAllToolTip, null);
+	}
+    
+    private IContributionItem getFindItem() {
+		return getItem(
+				ActionFactory.FIND.getId(),
+				"org.eclipse.ui.edit.findReplace", //$NON-NLS-1$
+				null, null, WorkbenchMessages.Workbench_findReplace,
+				WorkbenchMessages.Workbench_findReplaceToolTip, null);
+	}
+    
+    private IContributionItem getBookmarkItem() {
+		return getItem(
+				IDEActionFactory.BOOKMARK.getId(),
+				"org.eclipse.ui.edit.addBookmark", //$NON-NLS-1$
+				null, null, IDEWorkbenchMessages.Workbench_addBookmark,
+				IDEWorkbenchMessages.Workbench_addBookmarkToolTip, null);
+	}
+    
+    private IContributionItem getTaskItem() {
+		return getItem(
+				IDEActionFactory.ADD_TASK.getId(),
+				"org.eclipse.ui.edit.addTask", //$NON-NLS-1$
+				null, null, IDEWorkbenchMessages.Workbench_addTask,
+				IDEWorkbenchMessages.Workbench_addTaskToolTip, null);
+	}
+    
+    private IContributionItem getDeleteItem() {
+        return getItem(ActionFactory.DELETE.getId(),
+        		"org.eclipse.ui.edit.delete", //$NON-NLS-1$
+        		ISharedImages.IMG_TOOL_DELETE,
+        		ISharedImages.IMG_TOOL_DELETE_DISABLED,
+        		WorkbenchMessages.Workbench_delete,
+        		WorkbenchMessages.Workbench_deleteToolTip, 
+        		IWorkbenchHelpContextIds.DELETE_RETARGET_ACTION);
+    }
+    
+    private IContributionItem getRevertItem() {
+		return getItem(
+				ActionFactory.REVERT.getId(),
+				"org.eclipse.ui.file.revert", //$NON-NLS-1$
+				null, null, WorkbenchMessages.Workbench_revert,
+				WorkbenchMessages.Workbench_revertToolTip, null);
+	}
+    
+    private IContributionItem getRefreshItem() {
+		return getItem(ActionFactory.REFRESH.getId(),
+				"org.eclipse.ui.file.refresh", null, null, //$NON-NLS-1$
+				WorkbenchMessages.Workbench_refresh,
+				WorkbenchMessages.Workbench_refreshToolTip, null);
+	}
+    
+    private IContributionItem getPropertiesItem() {
+		return getItem(ActionFactory.PROPERTIES.getId(),
+				"org.eclipse.ui.file.properties", null, null, //$NON-NLS-1$
+				WorkbenchMessages.Workbench_properties,
+				WorkbenchMessages.Workbench_propertiesToolTip, null);
+	}
+    
+    private IContributionItem getMoveItem() {
+		return getItem(ActionFactory.MOVE.getId(), "org.eclipse.ui.edit.move", //$NON-NLS-1$
+				null, null, WorkbenchMessages.Workbench_move,
+				WorkbenchMessages.Workbench_moveToolTip, null);
+	}
+    
+    private IContributionItem getRenameItem() {
+		return getItem(ActionFactory.RENAME.getId(),
+				"org.eclipse.ui.edit.rename", null, null, //$NON-NLS-1$
+				WorkbenchMessages.Workbench_rename,
+				WorkbenchMessages.Workbench_renameToolTip, null);
+	}
+    
+    private IContributionItem getOpenProjectItem() {
+		return getItem(IDEActionFactory.OPEN_PROJECT.getId(),
+				"org.eclipse.ui.project.openProject", null, null, //$NON-NLS-1$
+				IDEWorkbenchMessages.OpenResourceAction_text,
+				IDEWorkbenchMessages.OpenResourceAction_toolTip, null);
+	}
+    
+    private IContributionItem getCloseProjectItem() {
+		return getItem(
+				IDEActionFactory.CLOSE_PROJECT.getId(),
+				"org.eclipse.ui.project.closeProject", //$NON-NLS-1$
+				null, null, IDEWorkbenchMessages.CloseResourceAction_text,
+				IDEWorkbenchMessages.CloseResourceAction_text, null);
+	}
+    
+    private IContributionItem getItem(String actionId, String commandId,
+    		String image, String disabledImage, String label, String tooltip, String helpContextId) {
+		ISharedImages sharedImages = getWindow().getWorkbench()
+				.getSharedImages();
+
+		IActionCommandMappingService acms = (IActionCommandMappingService) getWindow()
+				.getService(IActionCommandMappingService.class);
+		acms.map(actionId, commandId);
+
+		CommandContributionItemParameter commandParm = new CommandContributionItemParameter(
+				getWindow(), actionId, commandId, null, sharedImages
+						.getImageDescriptor(image), sharedImages
+						.getImageDescriptor(disabledImage), null, label, null,
+				tooltip, CommandContributionItem.STYLE_PUSH, null, false);
+		return new CommandContributionItem(commandParm);
+	}
+    
+}
diff --git a/examples/org.eclipse.datatools.enablement.rcp/src/org/eclipse/datatools/enablement/rcp/ApplicationWorkbenchAdvisor.java b/examples/org.eclipse.datatools.enablement.rcp/src/org/eclipse/datatools/enablement/rcp/ApplicationWorkbenchAdvisor.java
new file mode 100644
index 0000000..4b3eb34
--- /dev/null
+++ b/examples/org.eclipse.datatools.enablement.rcp/src/org/eclipse/datatools/enablement/rcp/ApplicationWorkbenchAdvisor.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Sybase, Inc. and others
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Ingres - initial API and implementation
+ * 				brianf - a few tweaks
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.rcp;
+
+import java.net.URL;
+
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.application.IWorkbenchConfigurer;
+import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
+import org.eclipse.ui.application.WorkbenchAdvisor;
+import org.eclipse.ui.application.WorkbenchWindowAdvisor;
+import org.eclipse.ui.ide.IDE;
+import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
+import org.eclipse.ui.internal.ide.model.WorkbenchAdapterBuilder;
+import org.eclipse.ui.internal.ide.undo.WorkspaceUndoMonitor;
+import org.osgi.framework.Bundle;
+
+public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor {
+
+	private static final String PERSPECTIVE_ID = "org.eclipse.datatools.enablement.rcp.perspective";
+
+	private transient WorkspaceUndoMonitor workspaceUndoMonitor;
+
+	public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
+        return new ApplicationWorkbenchWindowAdvisor(configurer);
+    }
+
+	public String getInitialWindowPerspectiveId() {
+		return PERSPECTIVE_ID;
+	}
+
+	public void initialize(IWorkbenchConfigurer configurer) {
+	    super.initialize(configurer);
+		// make sure we always save and restore workspace state
+		configurer.setSaveAndRestore(true);
+	    WorkbenchAdapterBuilder.registerAdapters();
+
+		final String ICONS_PATH = "icons/full/";
+		final String PATH_OBJECT = ICONS_PATH + "obj16/";
+		Bundle ideBundle = Platform.getBundle(IDEWorkbenchPlugin.IDE_WORKBENCH);
+		declareWorkbenchImage(configurer, ideBundle,
+				IDE.SharedImages.IMG_OBJ_PROJECT, PATH_OBJECT + "prj_obj.gif",
+				true);
+		declareWorkbenchImage(configurer, ideBundle,
+				IDE.SharedImages.IMG_OBJ_PROJECT_CLOSED, PATH_OBJECT
+						+ "cprj_obj.gif", true);
+
+		// initialize the workspace undo monitor
+		workspaceUndoMonitor = WorkspaceUndoMonitor.getInstance();
+	}
+
+	private void declareWorkbenchImage(IWorkbenchConfigurer configurer_p,
+			Bundle ideBundle, String symbolicName, String path, boolean shared) {
+		URL url = ideBundle.getEntry(path);
+		ImageDescriptor desc = ImageDescriptor.createFromURL(url);
+		configurer_p.declareImage(symbolicName, desc, shared);
+	}
+
+	@Override
+	public IAdaptable getDefaultPageInput() {
+		return ResourcesPlugin.getWorkspace().getRoot();
+	}
+
+	@Override
+	public void postShutdown() {
+		if (workspaceUndoMonitor != null) {
+			workspaceUndoMonitor.shutdown();
+			workspaceUndoMonitor = null;
+		}
+	}
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.datatools.enablement.rcp/src/org/eclipse/datatools/enablement/rcp/ApplicationWorkbenchWindowAdvisor.java b/examples/org.eclipse.datatools.enablement.rcp/src/org/eclipse/datatools/enablement/rcp/ApplicationWorkbenchWindowAdvisor.java
new file mode 100644
index 0000000..e784035
--- /dev/null
+++ b/examples/org.eclipse.datatools.enablement.rcp/src/org/eclipse/datatools/enablement/rcp/ApplicationWorkbenchWindowAdvisor.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Sybase, Inc. and others
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Ingres - initial API and implementation
+ * 				brianf - a few tweaks
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.rcp;
+
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.ui.application.ActionBarAdvisor;
+import org.eclipse.ui.application.IActionBarConfigurer;
+import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
+import org.eclipse.ui.application.WorkbenchWindowAdvisor;
+
+public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
+
+    public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
+        super(configurer);
+    }
+
+    public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) {
+        return new ApplicationActionBarAdvisor(configurer);
+    }
+    
+    public void preWindowOpen() {
+        IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
+        configurer.setInitialSize(new Point(1000, 800));
+        configurer.setShowCoolBar(false);
+        configurer.setShowStatusLine(true);
+        configurer.setShowMenuBar(true);
+        configurer.setShowProgressIndicator(true);
+   }
+}
diff --git a/examples/org.eclipse.datatools.enablement.rcp/src/org/eclipse/datatools/enablement/rcp/Perspective.java b/examples/org.eclipse.datatools.enablement.rcp/src/org/eclipse/datatools/enablement/rcp/Perspective.java
new file mode 100644
index 0000000..22112fb
--- /dev/null
+++ b/examples/org.eclipse.datatools.enablement.rcp/src/org/eclipse/datatools/enablement/rcp/Perspective.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Sybase, Inc. and others
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Ingres - initial API and implementation
+ * 				brianf - a few tweaks
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.rcp;
+
+import org.eclipse.ui.IFolderLayout;
+import org.eclipse.ui.IPageLayout;
+import org.eclipse.ui.IPerspectiveFactory;
+
+public class Perspective implements IPerspectiveFactory {
+	
+	private static String DSE_VIEW_ID = "org.eclipse.datatools.connectivity.DataSourceExplorerNavigator"; //$NON-NLS-1$
+	private static String PROJECT_EXPLORER_VIEW_ID = "org.eclipse.ui.navigator.ProjectExplorer"; //$NON-NLS-1$
+	private static String RESULT_VIEW_ID = "org.eclipse.datatools.sqltools.result.resultView"; //$NON-NLS-1$
+	private static String PLAN_VIEW_ID = "org.eclipse.datatools.sqltools.plan.planView"; //$NON-NLS-1$
+
+	public void createInitialLayout(IPageLayout layout) {
+
+		// Get the editor area.
+        String editorArea = layout.getEditorArea();
+		layout.setEditorAreaVisible(true);
+
+        //Left
+        IFolderLayout left = layout.createFolder("topleft", IPageLayout.LEFT, 0.25f, editorArea); //$NON-NLS-1$
+        left.addView(DSE_VIEW_ID);
+
+		left = layout.createFolder("bottomleft", IPageLayout.BOTTOM, 0.5f, //$NON-NLS-1$
+			"topleft"); //$NON-NLS-1$
+        left.addView(PROJECT_EXPLORER_VIEW_ID);
+
+        // Bottom 
+        IFolderLayout bottom = layout.createFolder("bottom", IPageLayout.BOTTOM, 0.75f, editorArea); //$NON-NLS-1$
+        bottom.addView(RESULT_VIEW_ID);
+		bottom.addView(PLAN_VIEW_ID);
+	}
+}
diff --git a/features/org.eclipse.birt.dtp.nl.feature/.project b/features/org.eclipse.birt.dtp.nl.feature/.project
new file mode 100644
index 0000000..62dc530
--- /dev/null
+++ b/features/org.eclipse.birt.dtp.nl.feature/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.birt.dtp.nl.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.birt.dtp.nl.feature/build.properties b/features/org.eclipse.birt.dtp.nl.feature/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.birt.dtp.nl.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.birt.dtp.nl.feature/eclipse_update_120.jpg b/features/org.eclipse.birt.dtp.nl.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.birt.dtp.nl.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.birt.dtp.nl.feature/epl-v10.html b/features/org.eclipse.birt.dtp.nl.feature/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/features/org.eclipse.birt.dtp.nl.feature/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.birt.dtp.nl.feature/feature.properties b/features/org.eclipse.birt.dtp.nl.feature/feature.properties
new file mode 100644
index 0000000..953a84e
--- /dev/null
+++ b/features/org.eclipse.birt.dtp.nl.feature/feature.properties
@@ -0,0 +1,163 @@
+###############################################################################
+# Copyright (c) 2000, 2005 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials 
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     Actuate Corporation - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Datatools Language Pack Project
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "updateSiteName" property - label for the update site
+updateSiteName=Business Intellegence and Reporting Tool (BIRT) Updates
+
+# "description" property - description of the feature
+description=Eclipse Business Intelligence and Reporting Tools (BIRT) Report Designer Plug-ins,  Runtime and user documentation.
+
+# "copyright" property
+copyrightURL=http://www.eclipse.org/birt
+copyright=(c) Copyright Eclipse Contributors and others 2004, 2007. All rights reserved.\n
+
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+February 1, 2011\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.birt.dtp.nl.feature/feature.xml b/features/org.eclipse.birt.dtp.nl.feature/feature.xml
new file mode 100644
index 0000000..1d0f04f
--- /dev/null
+++ b/features/org.eclipse.birt.dtp.nl.feature/feature.xml
@@ -0,0 +1,666 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<feature

+      id="org.eclipse.birt.dtp.nl"

+      label="%featureName"

+      version="4.2.1.qualifier"

+      provider-name="%providerName"

+      image="eclipse_update_120.jpg">

+

+   <description url="http://www.eclipse.org/birt">

+      %description

+   </description>

+

+   <copyright url="%copyrightURL">

+      %copyright

+   </copyright>

+

+   <license url="%licenseURL">

+      %license

+   </license>

+

+   <url>

+      <update label="Business Intelligence and Reporting Tools (BIRT) Updates" url="http://download.eclipse.org/birt/update-site/2.5"/>

+      <discovery label="%updateSiteName" url="http://download.eclipse.org/birt/update-site/2.5"/>

+   </url>

+

+   <plugin

+         id="org.eclipse.datatools.connectivity.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.connectivity.oda.consumer.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.connectivity.oda.design.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.connectivity.oda.design.ui.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.connectivity.oda.flatfile.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.connectivity.oda.flatfile.ui.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.connectivity.oda.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.connectivity.oda.profile.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.connectivity.ui.dse.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.connectivity.ui.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.connectivity.oda.template.ui.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.oda.xml.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.oda.xml.ui.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.oda.ws.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.oda.ws.ui.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.connectivity.apache.derby.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.connectivity.apache.derby.dbdefinition.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.connectivity.apache.derby.ui.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.connectivity.db.generic.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.connectivity.db.generic.ui.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.connectivity.dbdefinition.genericJDBC.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.connectivity.sqm.core.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.connectivity.sqm.core.ui.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.connectivity.sqm.server.ui.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.connectivity.console.profile.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.sqltools.common.ui.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.sqltools.db.derby.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.sqltools.db.generic.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.sqltools.editor.core.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.sqltools.parsers.sql.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.sqltools.parsers.sql.query.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.sqltools.plan.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.sqltools.result.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.sqltools.sql.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.sqltools.sqlbuilder.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.sqltools.sqleditor.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.hsqldb.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.hsqldb.dbdefinition.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.hsqldb.ui.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.ibm.db2.iseries.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.ibm.db2.iseries.ui.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.ibm.db2.luw.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.ibm.db2.luw.ui.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.ibm.db2.zseries.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.ibm.db2.zseries.ui.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.ibm.informix.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.ibm.informix.dbdefinition.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.ibm.informix.ui.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.ibm.ui.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.msft.sqlserver.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.msft.sqlserver.ui.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.mysql.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.mysql.dbdefinition.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.mysql.ui.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.oracle.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.oracle.dbdefinition.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.oracle.ui.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.postgresql.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.postgresql.ui.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.sap.maxdb.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.sap.maxdb.dbdefinition.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.sap.maxdb.ui.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.ingres.dbdefinition.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.ingres.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.ingres.ui.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.jdt.classpath.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.sqlite.dbdefinition.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.sqlite.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.sqlite.ui.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.modelbase.dbdefinition.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.modelbase.derby.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.modelbase.sql.edit.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.modelbase.sql.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.modelbase.sql.query.edit.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.modelbase.sql.query.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.modelbase.sql.xml.query.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+</feature>

diff --git a/features/org.eclipse.birt.dtp.nl.feature/license.html b/features/org.eclipse.birt.dtp.nl.feature/license.html
new file mode 100644
index 0000000..f19c483
--- /dev/null
+++ b/features/org.eclipse.birt.dtp.nl.feature/license.html
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>February 1, 2011</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.birt.dtp.sybase.nl.feature/.project b/features/org.eclipse.birt.dtp.sybase.nl.feature/.project
new file mode 100644
index 0000000..d47d1e4
--- /dev/null
+++ b/features/org.eclipse.birt.dtp.sybase.nl.feature/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.birt.dtp.sybase.nl.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.birt.dtp.sybase.nl.feature/build.properties b/features/org.eclipse.birt.dtp.sybase.nl.feature/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.birt.dtp.sybase.nl.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.birt.dtp.sybase.nl.feature/eclipse_update_120.jpg b/features/org.eclipse.birt.dtp.sybase.nl.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.birt.dtp.sybase.nl.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.birt.dtp.sybase.nl.feature/epl-v10.html b/features/org.eclipse.birt.dtp.sybase.nl.feature/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/features/org.eclipse.birt.dtp.sybase.nl.feature/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.birt.dtp.sybase.nl.feature/feature.properties b/features/org.eclipse.birt.dtp.sybase.nl.feature/feature.properties
new file mode 100644
index 0000000..953a84e
--- /dev/null
+++ b/features/org.eclipse.birt.dtp.sybase.nl.feature/feature.properties
@@ -0,0 +1,163 @@
+###############################################################################
+# Copyright (c) 2000, 2005 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials 
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     Actuate Corporation - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Datatools Language Pack Project
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "updateSiteName" property - label for the update site
+updateSiteName=Business Intellegence and Reporting Tool (BIRT) Updates
+
+# "description" property - description of the feature
+description=Eclipse Business Intelligence and Reporting Tools (BIRT) Report Designer Plug-ins,  Runtime and user documentation.
+
+# "copyright" property
+copyrightURL=http://www.eclipse.org/birt
+copyright=(c) Copyright Eclipse Contributors and others 2004, 2007. All rights reserved.\n
+
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+February 1, 2011\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.birt.dtp.sybase.nl.feature/feature.xml b/features/org.eclipse.birt.dtp.sybase.nl.feature/feature.xml
new file mode 100644
index 0000000..ba6f563
--- /dev/null
+++ b/features/org.eclipse.birt.dtp.sybase.nl.feature/feature.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<feature

+      id="org.eclipse.birt.dtp.sybase.nl"

+      label="%featureName"

+      version="4.2.1.qualifier"

+      provider-name="%providerName"

+      image="eclipse_update_120.jpg">

+

+   <description url="http://www.eclipse.org/birt">

+      %description

+   </description>

+

+   <copyright url="%copyrightURL">

+      %copyright

+   </copyright>

+

+   <license url="%licenseURL">

+      %license

+   </license>

+

+   <url>

+      <update label="Business Intelligence and Reporting Tools (BIRT) Updates" url="http://download.eclipse.org/birt/update-site/2.5"/>

+      <discovery label="%updateSiteName" url="http://download.eclipse.org/birt/update-site/2.5"/>

+   </url>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.sybase.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.sybase.ui.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.sybase.asa.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.sybase.asa.models.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.datatools.enablement.sybase.ase.dbdefinition.nl1"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+</feature>

diff --git a/features/org.eclipse.birt.dtp.sybase.nl.feature/license.html b/features/org.eclipse.birt.dtp.sybase.nl.feature/license.html
new file mode 100644
index 0000000..f19c483
--- /dev/null
+++ b/features/org.eclipse.birt.dtp.sybase.nl.feature/license.html
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>February 1, 2011</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.common.doc.user/.project b/features/org.eclipse.datatools.common.doc.user/.project
new file mode 100644
index 0000000..7ebea77
--- /dev/null
+++ b/features/org.eclipse.datatools.common.doc.user/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.common.doc.user</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.common.doc.user/build.properties b/features/org.eclipse.datatools.common.doc.user/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.common.doc.user/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.common.doc.user/eclipse_update_120.jpg b/features/org.eclipse.datatools.common.doc.user/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.common.doc.user/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.common.doc.user/epl-v10.html b/features/org.eclipse.datatools.common.doc.user/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.common.doc.user/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.common.doc.user/feature.properties b/features/org.eclipse.datatools.common.doc.user/feature.properties
new file mode 100644
index 0000000..600846d
--- /dev/null
+++ b/features/org.eclipse.datatools.common.doc.user/feature.properties
@@ -0,0 +1,149 @@
+###############################################################################

+# Copyright (c) 2009, 2014 Sybase, Inc. and others.

+# All rights reserved. This program and the accompanying materials

+# are made available under the terms of the Eclipse Public License v1.0

+# which accompanies this distribution, and is available at

+# http://www.eclipse.org/legal/epl-v10.html

+#

+# Contributors:

+# 	Sybase, Inc. - initial API and implementation

+#	Actuate Corporation - fix for Bug 245758

+#

+# Properties for feature: org.eclipse.datatools.common.doc.user

+# Version: 1.6.1

+#

+###############################################################################

+            

+featureName = Data Tools Platform Tutorial Documentation

+#

+providerName = Eclipse Data Tools Platform

+#

+featureDesc = Data Tools Platform Documentation Feature

+#

+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html

+#

+featureLicenseURL = license.html

+#

+license=\

+Eclipse Foundation Software User Agreement\n\

+April 9, 2014\n\

+\n\

+Usage Of Content\n\

+\n\

+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\

+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\

+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\

+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\

+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\

+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\

+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\

+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\

+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\

+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\

+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\

+\n\

+Applicable Licenses\n\

+\n\

+Unless otherwise indicated, all Content made available by the\n\

+Eclipse Foundation is provided to you under the terms and conditions of\n\

+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\

+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\

+For purposes of the EPL, "Program" will mean the Content.\n\

+\n\

+Content includes, but is not limited to, source code, object code,\n\

+documentation and other files maintained in the Eclipse Foundation source code\n\

+repository ("Repository") in software modules ("Modules") and made available\n\

+as downloadable archives ("Downloads").\n\

+\n\

+       - Content may be structured and packaged into modules to facilitate delivering,\n\

+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\

+         plug-in fragments ("Fragments"), and features ("Features").\n\

+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\

+         in a directory named "plugins".\n\

+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\

+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\

+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\

+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\

+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\

+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\

+\n\

+The terms and conditions governing Plug-ins and Fragments should be\n\

+contained in files named "about.html" ("Abouts"). The terms and\n\

+conditions governing Features and Included Features should be contained\n\

+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\

+Licenses may be located in any directory of a Download or Module\n\

+including, but not limited to the following locations:\n\

+\n\

+       - The top-level (root) directory\n\

+       - Plug-in and Fragment directories\n\

+       - Inside Plug-ins and Fragments packaged as JARs\n\

+       - Sub-directories of the directory named "src" of certain Plug-ins\n\

+       - Feature directories\n\

+\n\

+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\

+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\

+Update License") during the installation process. If the Feature contains\n\

+Included Features, the Feature Update License should either provide you\n\

+with the terms and conditions governing the Included Features or inform\n\

+you where you can locate them. Feature Update Licenses may be found in\n\

+the "license" property of files named "feature.properties" found within a Feature.\n\

+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\

+terms and conditions (or references to such terms and conditions) that\n\

+govern your use of the associated Content in that directory.\n\

+\n\

+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\

+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\

+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\

+\n\

+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\

+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\

+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\

+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\

+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\

+\n\

+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\

+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\

+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\

+govern that particular Content.\n\

+\n\

+\n\Use of Provisioning Technology\n\

+\n\

+The Eclipse Foundation makes available provisioning software, examples of which include,\n\

+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\

+the purpose of allowing users to install software, documentation, information and/or\n\

+other materials (collectively "Installable Software"). This capability is provided with\n\

+the intent of allowing such users to install, extend and update Eclipse-based products.\n\

+Information about packaging Installable Software is available at\n\

+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\

+\n\

+You may use Provisioning Technology to allow other parties to install Installable Software.\n\

+You shall be responsible for enabling the applicable license agreements relating to the\n\

+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\

+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\

+making it available in accordance with the Specification, you further acknowledge your\n\

+agreement to, and the acquisition of all necessary rights to permit the following:\n\

+\n\

+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\

+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\

+          extending or updating the functionality of an Eclipse-based product.\n\

+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\

+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\

+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\

+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\

+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\

+          with the Specification. Such Installable Software Agreement must inform the user of the\n\

+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\

+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\

+          indication of agreement by the user, the provisioning Technology will complete installation\n\

+          of the Installable Software.\n\

+\n\

+Cryptography\n\

+\n\

+Content may contain encryption software. The country in which you are\n\

+currently may have restrictions on the import, possession, and use,\n\

+and/or re-export to another country, of encryption software. BEFORE\n\

+using any encryption software, please check the country's laws,\n\

+regulations and policies concerning the import, possession, or use, and\n\

+re-export of encryption software, to see if this is permitted.\n\

+\n\

+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n

diff --git a/features/org.eclipse.datatools.common.doc.user/feature.xml b/features/org.eclipse.datatools.common.doc.user/feature.xml
new file mode 100644
index 0000000..cfb109b
--- /dev/null
+++ b/features/org.eclipse.datatools.common.doc.user/feature.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ *************************************************************************
+ * Copyright (c) 2009, 2014 Sybase, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * 	Sybase, Inc. - initial API and implementation
+ *  Actuate Corporation - fix for Bug 245758; version updates
+ *  
+ ***************************************************************************
+ -->
+<feature
+      id="org.eclipse.datatools.common.doc.user"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.common.doc.user"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %featureDesc
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%featureLicenseURL">
+      %license
+   </license>
+
+   <plugin
+         id="org.eclipse.datatools.common.doc.user"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.common.doc.user/license.html b/features/org.eclipse.datatools.common.doc.user/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.common.doc.user/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.connectivity.doc.user/.project b/features/org.eclipse.datatools.connectivity.doc.user/.project
new file mode 100644
index 0000000..2c55524
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.doc.user/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.doc.user</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.connectivity.doc.user/build.properties b/features/org.eclipse.datatools.connectivity.doc.user/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.doc.user/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.connectivity.doc.user/eclipse_update_120.jpg b/features/org.eclipse.datatools.connectivity.doc.user/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.doc.user/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.connectivity.doc.user/epl-v10.html b/features/org.eclipse.datatools.connectivity.doc.user/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.doc.user/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.connectivity.doc.user/feature.properties b/features/org.eclipse.datatools.connectivity.doc.user/feature.properties
new file mode 100644
index 0000000..a24d588
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.doc.user/feature.properties
@@ -0,0 +1,149 @@
+###############################################################################

+# Copyright (c) 2009, 2014 Sybase, Inc. and others.

+# All rights reserved. This program and the accompanying materials

+# are made available under the terms of the Eclipse Public License v1.0

+# which accompanies this distribution, and is available at

+# http://www.eclipse.org/legal/epl-v10.html

+#

+# Contributors:

+# 	Sybase, Inc. - initial API and implementation

+#	Actuate Corporation - fix for Bug 245758

+#

+# Properties for feature: org.eclipse.datatools.connectivity.doc.user

+# Version: 1.6.1

+#

+###############################################################################

+            

+featureName = Data Tools Platform Connectivity Documentation

+#

+providerName = Eclipse Data Tools Platform

+#

+featureDesc = Data Tools Platform Documentation Feature

+#

+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html

+#

+featureLicenseURL = license.html

+#

+license=\

+Eclipse Foundation Software User Agreement\n\

+April 9, 2014\n\

+\n\

+Usage Of Content\n\

+\n\

+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\

+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\

+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\

+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\

+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\

+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\

+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\

+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\

+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\

+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\

+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\

+\n\

+Applicable Licenses\n\

+\n\

+Unless otherwise indicated, all Content made available by the\n\

+Eclipse Foundation is provided to you under the terms and conditions of\n\

+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\

+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\

+For purposes of the EPL, "Program" will mean the Content.\n\

+\n\

+Content includes, but is not limited to, source code, object code,\n\

+documentation and other files maintained in the Eclipse Foundation source code\n\

+repository ("Repository") in software modules ("Modules") and made available\n\

+as downloadable archives ("Downloads").\n\

+\n\

+       - Content may be structured and packaged into modules to facilitate delivering,\n\

+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\

+         plug-in fragments ("Fragments"), and features ("Features").\n\

+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\

+         in a directory named "plugins".\n\

+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\

+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\

+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\

+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\

+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\

+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\

+\n\

+The terms and conditions governing Plug-ins and Fragments should be\n\

+contained in files named "about.html" ("Abouts"). The terms and\n\

+conditions governing Features and Included Features should be contained\n\

+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\

+Licenses may be located in any directory of a Download or Module\n\

+including, but not limited to the following locations:\n\

+\n\

+       - The top-level (root) directory\n\

+       - Plug-in and Fragment directories\n\

+       - Inside Plug-ins and Fragments packaged as JARs\n\

+       - Sub-directories of the directory named "src" of certain Plug-ins\n\

+       - Feature directories\n\

+\n\

+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\

+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\

+Update License") during the installation process. If the Feature contains\n\

+Included Features, the Feature Update License should either provide you\n\

+with the terms and conditions governing the Included Features or inform\n\

+you where you can locate them. Feature Update Licenses may be found in\n\

+the "license" property of files named "feature.properties" found within a Feature.\n\

+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\

+terms and conditions (or references to such terms and conditions) that\n\

+govern your use of the associated Content in that directory.\n\

+\n\

+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\

+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\

+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\

+\n\

+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\

+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\

+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\

+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\

+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\

+\n\

+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\

+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\

+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\

+govern that particular Content.\n\

+\n\

+\n\Use of Provisioning Technology\n\

+\n\

+The Eclipse Foundation makes available provisioning software, examples of which include,\n\

+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\

+the purpose of allowing users to install software, documentation, information and/or\n\

+other materials (collectively "Installable Software"). This capability is provided with\n\

+the intent of allowing such users to install, extend and update Eclipse-based products.\n\

+Information about packaging Installable Software is available at\n\

+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\

+\n\

+You may use Provisioning Technology to allow other parties to install Installable Software.\n\

+You shall be responsible for enabling the applicable license agreements relating to the\n\

+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\

+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\

+making it available in accordance with the Specification, you further acknowledge your\n\

+agreement to, and the acquisition of all necessary rights to permit the following:\n\

+\n\

+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\

+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\

+          extending or updating the functionality of an Eclipse-based product.\n\

+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\

+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\

+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\

+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\

+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\

+          with the Specification. Such Installable Software Agreement must inform the user of the\n\

+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\

+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\

+          indication of agreement by the user, the provisioning Technology will complete installation\n\

+          of the Installable Software.\n\

+\n\

+Cryptography\n\

+\n\

+Content may contain encryption software. The country in which you are\n\

+currently may have restrictions on the import, possession, and use,\n\

+and/or re-export to another country, of encryption software. BEFORE\n\

+using any encryption software, please check the country's laws,\n\

+regulations and policies concerning the import, possession, or use, and\n\

+re-export of encryption software, to see if this is permitted.\n\

+\n\

+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n

diff --git a/features/org.eclipse.datatools.connectivity.doc.user/feature.xml b/features/org.eclipse.datatools.connectivity.doc.user/feature.xml
new file mode 100644
index 0000000..43247ed
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.doc.user/feature.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ *************************************************************************
+ * Copyright (c) 2009, 2014 Sybase, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * 	Sybase, Inc. - initial API and implementation
+ *  Actuate Corporation - fix for Bug 245758; version updates
+ *  
+ ***************************************************************************
+ -->
+<feature
+      id="org.eclipse.datatools.connectivity.doc.user"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.connectivity.doc.user"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %featureDesc
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%featureLicenseURL">
+      %license
+   </license>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity.doc.user.contexts"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity.doc.user"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.connectivity.doc.user/license.html b/features/org.eclipse.datatools.connectivity.doc.user/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.doc.user/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.connectivity.feature/.project b/features/org.eclipse.datatools.connectivity.feature/.project
new file mode 100644
index 0000000..bb0b7f4
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.connectivity.feature/build.properties b/features/org.eclipse.datatools.connectivity.feature/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.connectivity.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.connectivity.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.connectivity.feature/epl-v10.html b/features/org.eclipse.datatools.connectivity.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.connectivity.feature/feature.properties b/features/org.eclipse.datatools.connectivity.feature/feature.properties
new file mode 100644
index 0000000..973748e
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.feature/feature.properties
@@ -0,0 +1,158 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2005 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/03 02:56:20 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Connectivity
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Driver and connection management, Open Data Access (ODA) and the Data Source Explorer (DSE)
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.connectivity.feature/feature.xml b/features/org.eclipse.datatools.connectivity.feature/feature.xml
new file mode 100644
index 0000000..27764fb
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.feature/feature.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.connectivity.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.connectivity"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <includes
+         id="org.eclipse.datatools.connectivity.oda.feature"
+         version="0.0.0"
+         optional="true"/>
+
+   <includes
+         id="org.eclipse.datatools.connectivity.oda.designer.feature"
+         version="0.0.0"
+         optional="true"/>
+
+   <includes
+         id="org.eclipse.datatools.connectivity.oda.designer.core.feature"
+         version="0.0.0"
+         optional="true"/>
+
+   <requires>
+      <import feature="org.eclipse.datatools.modelbase.feature" version="1.13.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity.sqm.core.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity.sqm.core"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity.sqm.server.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity.ui.dse"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.help"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity.console.profile"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.connectivity.feature/license.html b/features/org.eclipse.datatools.connectivity.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.connectivity.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.connectivity.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.connectivity.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.connectivity.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.connectivity.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.connectivity.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.connectivity.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.connectivity.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..ac9723f
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Connectivity Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Source for Data Tools Platform Connectivity
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.connectivity.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.connectivity.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/.project b/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/.project
new file mode 100644
index 0000000..fe3b05d
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.datatools.connectivity.oda.designer.core.feature</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.pde.FeatureBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.FeatureNature</nature>

+	</natures>

+</projectDescription>

diff --git a/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/build.properties b/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/epl-v10.html b/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/feature.properties b/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/feature.properties
new file mode 100644
index 0000000..e77fe99
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/feature.properties
@@ -0,0 +1,158 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2006 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/30 06:26:24 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Open Data Access Designer Core
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Binaries for Data Tools Platform Open Data Access Designer Core
+#
+featureCopyright = Copyright (c) 2004, 2014 Actuate Corporation. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/feature.xml b/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/feature.xml
new file mode 100644
index 0000000..d04293a
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/feature.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.connectivity.oda.designer.core.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.connectivity.oda.design.ui"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <requires>
+      <import feature="org.eclipse.emf" version="2.4.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.connectivity.oda.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.doc.user" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.modelbase.feature" version="1.13.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity.oda.design.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity.ui.dse"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity.sqm.core"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.help"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/license.html b/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..7dd3b9e
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.3 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Open Data Access Designer Core Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Source for Data Tools Platform Open Data Access Designer Core
+#
+featureCopyright = Copyright (c) 2004, 2014 Actuate Corporation. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.designer.core.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.connectivity.oda.designer.feature/.project b/features/org.eclipse.datatools.connectivity.oda.designer.feature/.project
new file mode 100644
index 0000000..9ed5487
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.designer.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.oda.designer.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.connectivity.oda.designer.feature/build.properties b/features/org.eclipse.datatools.connectivity.oda.designer.feature/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.designer.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.connectivity.oda.designer.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.connectivity.oda.designer.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.designer.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.connectivity.oda.designer.feature/epl-v10.html b/features/org.eclipse.datatools.connectivity.oda.designer.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.designer.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.connectivity.oda.designer.feature/feature.properties b/features/org.eclipse.datatools.connectivity.oda.designer.feature/feature.properties
new file mode 100644
index 0000000..f451a44
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.designer.feature/feature.properties
@@ -0,0 +1,158 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2006 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/30 06:26:24 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Open Data Access Designer
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Binaries for Data Tools Platform Open Data Access Designer
+#
+featureCopyright = Copyright (c) 2004, 2014 Actuate Corporation. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.connectivity.oda.designer.feature/feature.xml b/features/org.eclipse.datatools.connectivity.oda.designer.feature/feature.xml
new file mode 100644
index 0000000..edd2738
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.designer.feature/feature.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.connectivity.oda.designer.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.connectivity.oda.design.ui"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <requires>
+      <import feature="org.eclipse.pde" version="3.4.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.connectivity.oda.designer.core.feature" version="1.13.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity.oda.template.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.connectivity.oda.designer.feature/license.html b/features/org.eclipse.datatools.connectivity.oda.designer.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.designer.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.connectivity.oda.designer.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.connectivity.oda.designer.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.designer.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.connectivity.oda.designer.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.connectivity.oda.designer.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.designer.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.connectivity.oda.designer.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.connectivity.oda.designer.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.designer.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.connectivity.oda.designer.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.connectivity.oda.designer.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..f7f43e4
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.designer.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Open Data Access Designer Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Source for Data Tools Platform Open Data Access Designer
+#
+featureCopyright = Copyright (c) 2004, 2014 Actuate Corporation. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.connectivity.oda.designer.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.connectivity.oda.designer.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.designer.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.connectivity.oda.feature/.project b/features/org.eclipse.datatools.connectivity.oda.feature/.project
new file mode 100644
index 0000000..5af5a14
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.oda.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.connectivity.oda.feature/build.properties b/features/org.eclipse.datatools.connectivity.oda.feature/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.connectivity.oda.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.connectivity.oda.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.connectivity.oda.feature/epl-v10.html b/features/org.eclipse.datatools.connectivity.oda.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.connectivity.oda.feature/feature.properties b/features/org.eclipse.datatools.connectivity.oda.feature/feature.properties
new file mode 100644
index 0000000..a57ad87
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.feature/feature.properties
@@ -0,0 +1,158 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2006 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/03 02:56:21 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Open Data Access Runtime
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Binaries for Data Tools Platform Open Data Access Runtime
+#
+featureCopyright = Copyright (c) 2004, 2014 Actuate Corporation. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.connectivity.oda.feature/feature.xml b/features/org.eclipse.datatools.connectivity.oda.feature/feature.xml
new file mode 100644
index 0000000..255abc9
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.feature/feature.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.connectivity.oda.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.connectivity.oda"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity.oda.consumer"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity.oda.design"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity.oda.profile"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity.oda"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.connectivity.oda.feature/license.html b/features/org.eclipse.datatools.connectivity.oda.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.connectivity.oda.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.connectivity.oda.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.connectivity.oda.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.connectivity.oda.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.connectivity.oda.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.connectivity.oda.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.connectivity.oda.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.connectivity.oda.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..f745679
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Open Data Access Runtime Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Source for Data Tools Platform Open Data Access Runtime
+#
+featureCopyright = Copyright (c) 2004, 2014 Actuate Corporation. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.connectivity.oda.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.connectivity.oda.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.connectivity.oda.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.doc.user/.project b/features/org.eclipse.datatools.doc.user/.project
new file mode 100644
index 0000000..7fb9b11
--- /dev/null
+++ b/features/org.eclipse.datatools.doc.user/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.datatools.doc.user</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.pde.FeatureBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.FeatureNature</nature>

+	</natures>

+</projectDescription>

diff --git a/features/org.eclipse.datatools.doc.user/build.properties b/features/org.eclipse.datatools.doc.user/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.doc.user/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.doc.user/eclipse32.png b/features/org.eclipse.datatools.doc.user/eclipse32.png
new file mode 100644
index 0000000..568fac1
--- /dev/null
+++ b/features/org.eclipse.datatools.doc.user/eclipse32.png
Binary files differ
diff --git a/features/org.eclipse.datatools.doc.user/eclipse_update_120.jpg b/features/org.eclipse.datatools.doc.user/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.doc.user/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.doc.user/epl-v10.html b/features/org.eclipse.datatools.doc.user/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.doc.user/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.doc.user/feature.properties b/features/org.eclipse.datatools.doc.user/feature.properties
new file mode 100644
index 0000000..68d0bb6
--- /dev/null
+++ b/features/org.eclipse.datatools.doc.user/feature.properties
@@ -0,0 +1,151 @@
+###############################################################################

+# Copyright (c) 2009 Sybase, Inc. and others.

+# All rights reserved. This program and the accompanying materials

+# are made available under the terms of the Eclipse Public License v1.0

+# which accompanies this distribution, and is available at

+# http://www.eclipse.org/legal/epl-v10.html

+#

+# Contributors:

+# 	Sybase, Inc. - initial API and implementation

+#	Actuate Corporation - fix for Bug 237521, 245758

+#

+# Properties for feature: org.eclipse.datatools.doc.user

+# Version: 1.6.1

+#

+###############################################################################

+            

+featureName = Data Tools Platform User Documentation

+

+providerName = Eclipse Data Tools Platform

+

+featureDesc = Data Tools Platform Documentation Feature

+

+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html

+

+featureLicenseURL = license.html

+

+license=\

+Eclipse Foundation Software User Agreement\n\

+April 9, 2014\n\

+\n\

+Usage Of Content\n\

+\n\

+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\

+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\

+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\

+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\

+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\

+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\

+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\

+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\

+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\

+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\

+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\

+\n\

+Applicable Licenses\n\

+\n\

+Unless otherwise indicated, all Content made available by the\n\

+Eclipse Foundation is provided to you under the terms and conditions of\n\

+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\

+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\

+For purposes of the EPL, "Program" will mean the Content.\n\

+\n\

+Content includes, but is not limited to, source code, object code,\n\

+documentation and other files maintained in the Eclipse Foundation source code\n\

+repository ("Repository") in software modules ("Modules") and made available\n\

+as downloadable archives ("Downloads").\n\

+\n\

+       - Content may be structured and packaged into modules to facilitate delivering,\n\

+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\

+         plug-in fragments ("Fragments"), and features ("Features").\n\

+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\

+         in a directory named "plugins".\n\

+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\

+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\

+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\

+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\

+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\

+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\

+\n\

+The terms and conditions governing Plug-ins and Fragments should be\n\

+contained in files named "about.html" ("Abouts"). The terms and\n\

+conditions governing Features and Included Features should be contained\n\

+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\

+Licenses may be located in any directory of a Download or Module\n\

+including, but not limited to the following locations:\n\

+\n\

+       - The top-level (root) directory\n\

+       - Plug-in and Fragment directories\n\

+       - Inside Plug-ins and Fragments packaged as JARs\n\

+       - Sub-directories of the directory named "src" of certain Plug-ins\n\

+       - Feature directories\n\

+\n\

+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\

+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\

+Update License") during the installation process. If the Feature contains\n\

+Included Features, the Feature Update License should either provide you\n\

+with the terms and conditions governing the Included Features or inform\n\

+you where you can locate them. Feature Update Licenses may be found in\n\

+the "license" property of files named "feature.properties" found within a Feature.\n\

+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\

+terms and conditions (or references to such terms and conditions) that\n\

+govern your use of the associated Content in that directory.\n\

+\n\

+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\

+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\

+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\

+\n\

+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\

+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\

+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\

+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\

+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\

+\n\

+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\

+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\

+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\

+govern that particular Content.\n\

+\n\

+\n\Use of Provisioning Technology\n\

+\n\

+The Eclipse Foundation makes available provisioning software, examples of which include,\n\

+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\

+the purpose of allowing users to install software, documentation, information and/or\n\

+other materials (collectively "Installable Software"). This capability is provided with\n\

+the intent of allowing such users to install, extend and update Eclipse-based products.\n\

+Information about packaging Installable Software is available at\n\

+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\

+\n\

+You may use Provisioning Technology to allow other parties to install Installable Software.\n\

+You shall be responsible for enabling the applicable license agreements relating to the\n\

+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\

+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\

+making it available in accordance with the Specification, you further acknowledge your\n\

+agreement to, and the acquisition of all necessary rights to permit the following:\n\

+\n\

+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\

+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\

+          extending or updating the functionality of an Eclipse-based product.\n\

+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\

+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\

+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\

+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\

+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\

+          with the Specification. Such Installable Software Agreement must inform the user of the\n\

+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\

+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\

+          indication of agreement by the user, the provisioning Technology will complete installation\n\

+          of the Installable Software.\n\

+\n\

+Cryptography\n\

+\n\

+Content may contain encryption software. The country in which you are\n\

+currently may have restrictions on the import, possession, and use,\n\

+and/or re-export to another country, of encryption software. BEFORE\n\

+using any encryption software, please check the country's laws,\n\

+regulations and policies concerning the import, possession, or use, and\n\

+re-export of encryption software, to see if this is permitted.\n\

+\n\

+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n

+

+# # # # # # # # # # end of "featureLicenseTxt" property # # # # # # # # # # # #

diff --git a/features/org.eclipse.datatools.doc.user/feature.xml b/features/org.eclipse.datatools.doc.user/feature.xml
new file mode 100644
index 0000000..8cbb4e7
--- /dev/null
+++ b/features/org.eclipse.datatools.doc.user/feature.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ *************************************************************************
+ * Copyright (c) 2009, 2014 Sybase, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * 	Sybase, Inc. - initial API and implementation
+ *  Actuate Corporation - fix for Bug 237521, 245758; version updates
+ *  
+ ***************************************************************************
+ -->
+<feature
+      id="org.eclipse.datatools.doc.user"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.doc.user"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %featureDesc
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%featureLicenseURL">
+      %license
+   </license>
+
+   <plugin
+         id="org.eclipse.datatools.doc.user"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.oda.cshelp"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.help"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.doc.user/license.html b/features/org.eclipse.datatools.doc.user/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.doc.user/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.apache.derby.feature/.project b/features/org.eclipse.datatools.enablement.apache.derby.feature/.project
new file mode 100644
index 0000000..01f0a22
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.apache.derby.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.apache.derby.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.enablement.apache.derby.feature/build.properties b/features/org.eclipse.datatools.enablement.apache.derby.feature/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.apache.derby.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.apache.derby.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.apache.derby.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.apache.derby.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.apache.derby.feature/epl-v10.html b/features/org.eclipse.datatools.enablement.apache.derby.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.apache.derby.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.apache.derby.feature/feature.properties b/features/org.eclipse.datatools.enablement.apache.derby.feature/feature.properties
new file mode 100644
index 0000000..44acf9b
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.apache.derby.feature/feature.properties
@@ -0,0 +1,158 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2005 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/03 02:56:20 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement for Apache Derby
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=DTP support for using the Apache Derby database
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.enablement.apache.derby.feature/feature.xml b/features/org.eclipse.datatools.enablement.apache.derby.feature/feature.xml
new file mode 100644
index 0000000..9f790e9
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.apache.derby.feature/feature.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.enablement.apache.derby.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.enablement.sybase"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <includes
+         id="org.eclipse.datatools.enablement.jdbc.feature"
+         version="0.0.0"/>
+
+   <requires>
+      <import feature="org.eclipse.datatools.modelbase.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.connectivity.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.sqldevtools.feature" version="1.13.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity.apache.derby.dbdefinition"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity.apache.derby.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity.apache.derby"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.modelbase.derby"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.db.derby"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.enablement.apache.derby.feature/license.html b/features/org.eclipse.datatools.enablement.apache.derby.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.apache.derby.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.apache.derby.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.enablement.apache.derby.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.apache.derby.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.apache.derby.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.apache.derby.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.apache.derby.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.apache.derby.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.enablement.apache.derby.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.apache.derby.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.apache.derby.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.enablement.apache.derby.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..5bb381e
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.apache.derby.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement for Apache Derby Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Datatools Source
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.enablement.apache.derby.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.enablement.apache.derby.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.apache.derby.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.feature/.project b/features/org.eclipse.datatools.enablement.feature/.project
new file mode 100644
index 0000000..cff0961
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.enablement.feature/build.properties b/features/org.eclipse.datatools.enablement.feature/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.feature/epl-v10.html b/features/org.eclipse.datatools.enablement.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.feature/feature.properties b/features/org.eclipse.datatools.enablement.feature/feature.properties
new file mode 100644
index 0000000..f2496aa
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.feature/feature.properties
@@ -0,0 +1,158 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2005 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/03 02:56:20 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=DTP specialized support for specific data sources (e.g. databases, ODA drivers)
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.enablement.feature/feature.xml b/features/org.eclipse.datatools.enablement.feature/feature.xml
new file mode 100644
index 0000000..28e7a4d
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.feature/feature.xml
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.enablement.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.enablement.finfo"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <includes
+         id="org.eclipse.datatools.enablement.apache.derby.feature"
+         version="0.0.0"
+         optional="true"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.hsqldb.feature"
+         version="0.0.0"
+         optional="true"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.ibm.feature"
+         version="0.0.0"
+         optional="true"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.jdbc.feature"
+         version="0.0.0"
+         optional="true"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.jdt.feature"
+         version="0.0.0"
+         optional="true"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.msft.feature"
+         version="0.0.0"
+         optional="true"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.mysql.feature"
+         version="0.0.0"
+         optional="true"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.oda.feature"
+         version="0.0.0"
+         optional="true"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.oda.designer.feature"
+         version="0.0.0"
+         optional="true"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.oracle.feature"
+         version="0.0.0"
+         optional="true"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.postgresql.feature"
+         version="0.0.0"
+         optional="true"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.sap.feature"
+         version="0.0.0"
+         optional="true"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.sybase.feature"
+         version="0.0.0"
+         optional="true"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.ingres.feature"
+         version="0.0.0"
+         optional="true"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.sqlite.feature"
+         version="0.0.0"
+         optional="true"/>
+
+   <requires>
+      <import feature="org.eclipse.datatools.modelbase.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.connectivity.feature" version="1.13.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.finfo"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.db.derby.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.db.generic.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.enablement.feature/license.html b/features/org.eclipse.datatools.enablement.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.enablement.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.enablement.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.enablement.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..80e5e17
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Datatools Source
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.enablement.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.enablement.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.hsqldb.feature/.project b/features/org.eclipse.datatools.enablement.hsqldb.feature/.project
new file mode 100644
index 0000000..90057dd
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.hsqldb.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.hsqldb.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.enablement.hsqldb.feature/build.properties b/features/org.eclipse.datatools.enablement.hsqldb.feature/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.hsqldb.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.hsqldb.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.hsqldb.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.hsqldb.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.hsqldb.feature/epl-v10.html b/features/org.eclipse.datatools.enablement.hsqldb.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.hsqldb.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.hsqldb.feature/feature.properties b/features/org.eclipse.datatools.enablement.hsqldb.feature/feature.properties
new file mode 100644
index 0000000..2e6b374
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.hsqldb.feature/feature.properties
@@ -0,0 +1,158 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2005 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/03 02:56:20 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement for HSQLDB
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=DTP support for using the HSQLDB database
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.enablement.hsqldb.feature/feature.xml b/features/org.eclipse.datatools.enablement.hsqldb.feature/feature.xml
new file mode 100644
index 0000000..c75afeb
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.hsqldb.feature/feature.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.enablement.hsqldb.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.enablement.finfo"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <includes
+         id="org.eclipse.datatools.enablement.jdbc.feature"
+         version="0.0.0"/>
+
+   <requires>
+      <import feature="org.eclipse.datatools.modelbase.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.connectivity.feature" version="1.13.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.hsqldb"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.hsqldb.dbdefinition"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.hsqldb.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.finfo"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.enablement.hsqldb.feature/license.html b/features/org.eclipse.datatools.enablement.hsqldb.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.hsqldb.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.hsqldb.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.enablement.hsqldb.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.hsqldb.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.hsqldb.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.hsqldb.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.hsqldb.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.hsqldb.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.enablement.hsqldb.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.hsqldb.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.hsqldb.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.enablement.hsqldb.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..5c4ceae
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.hsqldb.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/30 06:04:37 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement for HSQLDB Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Datatools Source
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.enablement.hsqldb.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.enablement.hsqldb.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.hsqldb.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.ibm.feature/.project b/features/org.eclipse.datatools.enablement.ibm.feature/.project
new file mode 100644
index 0000000..c0e342e
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.ibm.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.ibm.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.enablement.ibm.feature/build.properties b/features/org.eclipse.datatools.enablement.ibm.feature/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.ibm.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.ibm.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.ibm.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.ibm.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.ibm.feature/epl-v10.html b/features/org.eclipse.datatools.enablement.ibm.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.ibm.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.ibm.feature/feature.properties b/features/org.eclipse.datatools.enablement.ibm.feature/feature.properties
new file mode 100644
index 0000000..d12fcfc
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.ibm.feature/feature.properties
@@ -0,0 +1,158 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2005 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/03 02:56:21 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement for IBM
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=DTP support for using IBM databases (DB2 and Informix)
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.enablement.ibm.feature/feature.xml b/features/org.eclipse.datatools.enablement.ibm.feature/feature.xml
new file mode 100644
index 0000000..70df9e8
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.ibm.feature/feature.xml
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.enablement.ibm.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.enablement.ibm"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <requires>
+      <import feature="org.eclipse.datatools.modelbase.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.connectivity.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.enablement.jdbc.feature" version="1.13.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.ibm"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.ibm.db2"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.ibm.db2.iseries"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.ibm.db2.iseries.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.ibm.db2.luw"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.ibm.db2.luw.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.ibm.db2.zseries"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.ibm.db2.zseries.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.ibm.informix.dbdefinition"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.ibm.informix"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.ibm.informix.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.ibm.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.enablement.ibm.feature/license.html b/features/org.eclipse.datatools.enablement.ibm.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.ibm.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.ibm.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.enablement.ibm.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.ibm.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.ibm.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.ibm.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.ibm.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.ibm.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.enablement.ibm.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.ibm.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.ibm.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.enablement.ibm.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..ca612fb
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.ibm.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement for IBM Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Datatools Source
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.enablement.ibm.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.enablement.ibm.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.ibm.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.ingres.feature/.project b/features/org.eclipse.datatools.enablement.ingres.feature/.project
new file mode 100644
index 0000000..f17e195
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.ingres.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.ingres.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.enablement.ingres.feature/build.properties b/features/org.eclipse.datatools.enablement.ingres.feature/build.properties
new file mode 100644
index 0000000..c6af93f
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.ingres.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.ingres.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.ingres.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.ingres.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.ingres.feature/epl-v10.html b/features/org.eclipse.datatools.enablement.ingres.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.ingres.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.ingres.feature/feature.properties b/features/org.eclipse.datatools.enablement.ingres.feature/feature.properties
new file mode 100644
index 0000000..2d8c225
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.ingres.feature/feature.properties
@@ -0,0 +1,153 @@
+################################################################################
+## Copyright (c) 2006, 2014 Ingres Corporation and others.
+## All rights reserved.   This program and the accompanying materials
+## are made available under the terms of the Eclipse Public License v1.0
+## which accompanies this distribution, and is available at
+## http://www.eclipse.org/legal/epl-v10.html
+##
+## Contributors: 
+##  Ingres - Implementation
+##  Actuate Corporation - externalize update site name
+################################################################################
+
+# "featureName" property - name of the feature
+FEATURE_NAME=Data Tools Platform Enablement for Ingres
+
+# "providerName" property - name of the company that provides the feature
+PROVIDER_NAME=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+DESCRIPTION=DTP support for using Ingres databases
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+LICENSE_URL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.enablement.ingres.feature/feature.xml b/features/org.eclipse.datatools.enablement.ingres.feature/feature.xml
new file mode 100644
index 0000000..d393512
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.ingres.feature/feature.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.enablement.ingres.feature"
+      label="%FEATURE_NAME"
+      version="1.14.1.qualifier"
+      provider-name="%PROVIDER_NAME"
+      plugin="org.eclipse.datatools.enablement.finfo">
+
+   <description>
+      %DESCRIPTION
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%LICENSE_URL">
+      %license
+   </license>
+
+   <requires>
+      <import feature="org.eclipse.datatools.modelbase.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.connectivity.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.sqldevtools.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.enablement.jdbc.feature" version="1.13.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.ingres"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.ingres.dbdefinition"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.ingres.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.finfo"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.enablement.ingres.feature/license.html b/features/org.eclipse.datatools.enablement.ingres.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.ingres.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.ingres.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.enablement.ingres.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.ingres.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.ingres.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.ingres.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.ingres.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.ingres.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.enablement.ingres.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.ingres.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.ingres.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.enablement.ingres.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..372fbab
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.ingres.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,174 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+FEATURE_NAME=Data Tools Platform Enablement for Ingres Source
+
+# "providerName" property - name of the company that provides the feature
+PROVIDER_NAME=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+DESCRIPTION=Datatools Source
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+LICENSE_URL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.enablement.ingres.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.enablement.ingres.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.ingres.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.jdbc.feature/.project b/features/org.eclipse.datatools.enablement.jdbc.feature/.project
new file mode 100644
index 0000000..2762597
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.jdbc.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.jdbc.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.enablement.jdbc.feature/build.properties b/features/org.eclipse.datatools.enablement.jdbc.feature/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.jdbc.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.jdbc.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.jdbc.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.jdbc.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.jdbc.feature/epl-v10.html b/features/org.eclipse.datatools.enablement.jdbc.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.jdbc.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.jdbc.feature/feature.properties b/features/org.eclipse.datatools.enablement.jdbc.feature/feature.properties
new file mode 100644
index 0000000..bf07bf7
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.jdbc.feature/feature.properties
@@ -0,0 +1,158 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2005 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/03 02:56:20 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement for JDBC
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=DTP support for using databases through JDBC
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.enablement.jdbc.feature/feature.xml b/features/org.eclipse.datatools.enablement.jdbc.feature/feature.xml
new file mode 100644
index 0000000..27e25c6
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.jdbc.feature/feature.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.enablement.jdbc.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.enablement.sybase"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <requires>
+      <import feature="org.eclipse.datatools.connectivity.feature" version="1.13.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity.db.generic"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity.db.generic.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity.dbdefinition.genericJDBC"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.enablement.jdbc.feature/license.html b/features/org.eclipse.datatools.enablement.jdbc.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.jdbc.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.jdbc.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.enablement.jdbc.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.jdbc.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.jdbc.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.jdbc.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.jdbc.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.jdbc.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.enablement.jdbc.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.jdbc.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.jdbc.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.enablement.jdbc.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..ac88da9
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.jdbc.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement for JDBC Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Datatools Source
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.enablement.jdbc.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.enablement.jdbc.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.jdbc.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.jdt.feature/.project b/features/org.eclipse.datatools.enablement.jdt.feature/.project
new file mode 100644
index 0000000..bab75b5
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.jdt.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.jdt.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.enablement.jdt.feature/build.properties b/features/org.eclipse.datatools.enablement.jdt.feature/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.jdt.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.jdt.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.jdt.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.jdt.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.jdt.feature/epl-v10.html b/features/org.eclipse.datatools.enablement.jdt.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.jdt.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.jdt.feature/feature.properties b/features/org.eclipse.datatools.enablement.jdt.feature/feature.properties
new file mode 100644
index 0000000..87a40a2
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.jdt.feature/feature.properties
@@ -0,0 +1,158 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2005 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/03 02:56:21 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform JDT Enablement
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Tools for using DTP with JDT (e.g. classpath utilities)
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.enablement.jdt.feature/feature.xml b/features/org.eclipse.datatools.enablement.jdt.feature/feature.xml
new file mode 100644
index 0000000..ecfa565
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.jdt.feature/feature.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.enablement.jdt.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.enablement.jdt.classpath"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <requires>
+      <import feature="org.eclipse.jdt" version="3.4.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.jdt.classpath"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.enablement.jdt.feature/license.html b/features/org.eclipse.datatools.enablement.jdt.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.jdt.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.jdt.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.enablement.jdt.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.jdt.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.jdt.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.jdt.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.jdt.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.jdt.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.enablement.jdt.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.jdt.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.jdt.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.enablement.jdt.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..86af7e2
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.jdt.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform JDT Enablement Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Datatools Source
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.enablement.jdt.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.enablement.jdt.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.jdt.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.msft.feature/.project b/features/org.eclipse.datatools.enablement.msft.feature/.project
new file mode 100644
index 0000000..0d6b799
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.msft.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.msft.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.enablement.msft.feature/build.properties b/features/org.eclipse.datatools.enablement.msft.feature/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.msft.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.msft.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.msft.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.msft.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.msft.feature/epl-v10.html b/features/org.eclipse.datatools.enablement.msft.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.msft.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.msft.feature/feature.properties b/features/org.eclipse.datatools.enablement.msft.feature/feature.properties
new file mode 100644
index 0000000..2100729
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.msft.feature/feature.properties
@@ -0,0 +1,158 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2005 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/03 02:56:20 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement for Microsoft
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=DTP support for using the Microsoft SQL Server database
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.enablement.msft.feature/feature.xml b/features/org.eclipse.datatools.enablement.msft.feature/feature.xml
new file mode 100644
index 0000000..50f5b23
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.msft.feature/feature.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.enablement.msft.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.enablement.finfo"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <requires>
+      <import feature="org.eclipse.datatools.modelbase.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.connectivity.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.enablement.jdbc.feature" version="1.13.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.msft.sqlserver"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.msft.sqlserver.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.finfo"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.enablement.msft.feature/license.html b/features/org.eclipse.datatools.enablement.msft.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.msft.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.msft.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.enablement.msft.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.msft.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.msft.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.msft.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.msft.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.msft.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.enablement.msft.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.msft.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.msft.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.enablement.msft.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..bf32d84
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.msft.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement for Microsoft Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Datatools Source
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.enablement.msft.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.enablement.msft.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.msft.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.mysql.feature/.project b/features/org.eclipse.datatools.enablement.mysql.feature/.project
new file mode 100644
index 0000000..5f75b67
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.mysql.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.mysql.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.enablement.mysql.feature/build.properties b/features/org.eclipse.datatools.enablement.mysql.feature/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.mysql.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.mysql.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.mysql.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.mysql.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.mysql.feature/epl-v10.html b/features/org.eclipse.datatools.enablement.mysql.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.mysql.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.mysql.feature/feature.properties b/features/org.eclipse.datatools.enablement.mysql.feature/feature.properties
new file mode 100644
index 0000000..ef10e22
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.mysql.feature/feature.properties
@@ -0,0 +1,158 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2005 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/03 02:56:20 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement for MySQL
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=DTP support for using the MySQL database
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.enablement.mysql.feature/feature.xml b/features/org.eclipse.datatools.enablement.mysql.feature/feature.xml
new file mode 100644
index 0000000..b9126ee
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.mysql.feature/feature.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.enablement.mysql.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.enablement.finfo"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <requires>
+      <import feature="org.eclipse.datatools.modelbase.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.connectivity.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.enablement.jdbc.feature" version="1.13.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.mysql.dbdefinition"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.mysql"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.mysql.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.finfo"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.enablement.mysql.feature/license.html b/features/org.eclipse.datatools.enablement.mysql.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.mysql.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.mysql.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.enablement.mysql.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.mysql.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.mysql.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.mysql.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.mysql.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.mysql.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.enablement.mysql.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.mysql.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.mysql.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.enablement.mysql.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..c25b641
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.mysql.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement for MySQL Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Datatools Source
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.enablement.mysql.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.enablement.mysql.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.mysql.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.oda.designer.feature/.project b/features/org.eclipse.datatools.enablement.oda.designer.feature/.project
new file mode 100644
index 0000000..8caf2ed
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.designer.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.oda.designer.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.enablement.oda.designer.feature/build.properties b/features/org.eclipse.datatools.enablement.oda.designer.feature/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.designer.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.oda.designer.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.oda.designer.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.designer.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.oda.designer.feature/epl-v10.html b/features/org.eclipse.datatools.enablement.oda.designer.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.designer.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.oda.designer.feature/feature.properties b/features/org.eclipse.datatools.enablement.oda.designer.feature/feature.properties
new file mode 100644
index 0000000..8a19640e
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.designer.feature/feature.properties
@@ -0,0 +1,158 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2005 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/03 02:56:20 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement for ODA Designer
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Binaries for the ODA Data Source Drivers Design Support
+#
+featureCopyright = Copyright (c) 2004, 2014 Actuate Corporation. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.enablement.oda.designer.feature/feature.xml b/features/org.eclipse.datatools.enablement.oda.designer.feature/feature.xml
new file mode 100644
index 0000000..f68f82d
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.designer.feature/feature.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.enablement.oda.designer.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.enablement.oda.xml.ui"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <requires>
+      <import feature="org.eclipse.datatools.connectivity.oda.designer.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.enablement.oda.feature" version="1.13.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.oda.ws.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.oda.xml.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity.oda.flatfile.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.enablement.oda.designer.feature/license.html b/features/org.eclipse.datatools.enablement.oda.designer.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.designer.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.oda.designer.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.enablement.oda.designer.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.designer.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.oda.designer.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.oda.designer.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.designer.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.oda.designer.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.enablement.oda.designer.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.designer.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.oda.designer.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.enablement.oda.designer.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..0bac400
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.designer.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement for ODA Designer Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Source for the ODA Data Source Drivers Design Support
+#
+featureCopyright = Copyright (c) 2004, 2014 Actuate Corporation. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.enablement.oda.designer.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.enablement.oda.designer.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.designer.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.oda.ecore.feature/.project b/features/org.eclipse.datatools.enablement.oda.ecore.feature/.project
new file mode 100644
index 0000000..78abbba
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.ecore.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.datatools.enablement.oda.ecore.feature</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.pde.FeatureBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.FeatureNature</nature>

+	</natures>

+</projectDescription>

diff --git a/features/org.eclipse.datatools.enablement.oda.ecore.feature/build.properties b/features/org.eclipse.datatools.enablement.oda.ecore.feature/build.properties
new file mode 100644
index 0000000..a7ed686
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.ecore.feature/build.properties
@@ -0,0 +1,7 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
+               
+               
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.oda.ecore.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.oda.ecore.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.ecore.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.oda.ecore.feature/epl-v10.html b/features/org.eclipse.datatools.enablement.oda.ecore.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.ecore.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.oda.ecore.feature/feature.properties b/features/org.eclipse.datatools.enablement.oda.ecore.feature/feature.properties
new file mode 100644
index 0000000..cb9a12d
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.ecore.feature/feature.properties
@@ -0,0 +1,159 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2005 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/03 02:56:20 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement for ODA Runtime
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Drivers for the ODA framework, including XML and web services
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+February 1, 2011\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.enablement.oda.ecore.feature/feature.xml b/features/org.eclipse.datatools.enablement.oda.ecore.feature/feature.xml
new file mode 100644
index 0000000..b9523e4
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.ecore.feature/feature.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.enablement.oda.ecore.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.enablement.oda.ecore"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <requires>
+      <import feature="org.eclipse.ocl" version="1.2.2" match="greaterOrEqual"/>
+      <import feature="org.eclipse.emf.query.ocl" version="1.2.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.oda.ecore"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.oda.ecore.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.enablement.oda.ecore.feature/license.html b/features/org.eclipse.datatools.enablement.oda.ecore.feature/license.html
new file mode 100644
index 0000000..f19c483
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.ecore.feature/license.html
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>February 1, 2011</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.oda.ecore.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.enablement.oda.ecore.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.ecore.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.oda.ecore.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.oda.ecore.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.ecore.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.oda.ecore.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.enablement.oda.ecore.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.ecore.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.oda.ecore.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.enablement.oda.ecore.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..a5f50c1
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.ecore.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement for ODA ECore Driver Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Source for Data Tools Platform Enablement ODA ECore Driver
+#
+featureCopyright = Copyright (c) 2004, 2014 Actuate Corporation and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.enablement.oda.ecore.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.enablement.oda.ecore.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.ecore.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.oda.ecore.sdk.feature/.project b/features/org.eclipse.datatools.enablement.oda.ecore.sdk.feature/.project
new file mode 100644
index 0000000..d477151
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.ecore.sdk.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.datatools.enablement.oda.ecore.sdk.feature</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.pde.FeatureBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.FeatureNature</nature>

+	</natures>

+</projectDescription>

diff --git a/features/org.eclipse.datatools.enablement.oda.ecore.sdk.feature/build.properties b/features/org.eclipse.datatools.enablement.oda.ecore.sdk.feature/build.properties
new file mode 100644
index 0000000..7eda10b
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.ecore.sdk.feature/build.properties
@@ -0,0 +1,8 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
+               
+generate.feature@org.eclipse.datatools.enablement.oda.ecore.feature.source=org.eclipse.datatools.enablement.oda.ecore.feature
+               
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.oda.ecore.sdk.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.oda.ecore.sdk.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.ecore.sdk.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.oda.ecore.sdk.feature/epl-v10.html b/features/org.eclipse.datatools.enablement.oda.ecore.sdk.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.ecore.sdk.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.oda.ecore.sdk.feature/feature.properties b/features/org.eclipse.datatools.enablement.oda.ecore.sdk.feature/feature.properties
new file mode 100644
index 0000000..e10afb5
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.ecore.sdk.feature/feature.properties
@@ -0,0 +1,159 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2005 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/30 06:26:24 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement for ODA Runtime
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Drivers for the ODA framework, including XML and web services
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+February 1, 2011\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.enablement.oda.ecore.sdk.feature/feature.xml b/features/org.eclipse.datatools.enablement.oda.ecore.sdk.feature/feature.xml
new file mode 100644
index 0000000..f01cf7c
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.ecore.sdk.feature/feature.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.enablement.oda.ecore.sdk.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.enablement.oda.ecore"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <includes
+         id="org.eclipse.datatools.enablement.oda.ecore.feature"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.oda.ecore.feature.source"
+         version="0.0.0"/>
+
+   <requires>
+      <import feature="org.eclipse.ocl" version="1.2.2" match="greaterOrEqual"/>
+      <import feature="org.eclipse.emf.query.ocl" version="1.2.0" match="greaterOrEqual"/>
+   </requires>
+
+</feature>
diff --git a/features/org.eclipse.datatools.enablement.oda.ecore.sdk.feature/license.html b/features/org.eclipse.datatools.enablement.oda.ecore.sdk.feature/license.html
new file mode 100644
index 0000000..f19c483
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.ecore.sdk.feature/license.html
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>February 1, 2011</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.oda.feature/.project b/features/org.eclipse.datatools.enablement.oda.feature/.project
new file mode 100644
index 0000000..215ef21
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.oda.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.enablement.oda.feature/build.properties b/features/org.eclipse.datatools.enablement.oda.feature/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.oda.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.oda.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.oda.feature/epl-v10.html b/features/org.eclipse.datatools.enablement.oda.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.oda.feature/feature.properties b/features/org.eclipse.datatools.enablement.oda.feature/feature.properties
new file mode 100644
index 0000000..6c71731
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.feature/feature.properties
@@ -0,0 +1,158 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2005 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/03 02:56:20 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement for ODA Runtime
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Binaries for the ODA Data Source Drivers Runtime
+#
+featureCopyright = Copyright (c) 2004, 2014 Actuate Corporation. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.enablement.oda.feature/feature.xml b/features/org.eclipse.datatools.enablement.oda.feature/feature.xml
new file mode 100644
index 0000000..ae52799
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.feature/feature.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.enablement.oda.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.enablement.oda.xml"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <requires>
+      <import feature="org.eclipse.datatools.connectivity.oda.feature" version="1.13.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.oda.ws"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.oda.xml"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity.oda.flatfile"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.enablement.oda.feature/license.html b/features/org.eclipse.datatools.enablement.oda.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.oda.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.enablement.oda.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.oda.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.oda.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.oda.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.enablement.oda.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.oda.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.enablement.oda.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..7bc106e
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement for ODA Runtime Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Source for the ODA Data Source Drivers Runtime
+#
+featureCopyright = Copyright (c) 2004, 2014 Actuate Corporation. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.enablement.oda.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.enablement.oda.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oda.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.oracle.feature/.project b/features/org.eclipse.datatools.enablement.oracle.feature/.project
new file mode 100644
index 0000000..49a6dd0
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oracle.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.oracle.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.enablement.oracle.feature/build.properties b/features/org.eclipse.datatools.enablement.oracle.feature/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oracle.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.oracle.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.oracle.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oracle.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.oracle.feature/epl-v10.html b/features/org.eclipse.datatools.enablement.oracle.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oracle.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.oracle.feature/feature.properties b/features/org.eclipse.datatools.enablement.oracle.feature/feature.properties
new file mode 100644
index 0000000..28ac48a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oracle.feature/feature.properties
@@ -0,0 +1,158 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2005 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/03 02:56:20 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement for Oracle
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=DTP support for using Oracle databases
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.enablement.oracle.feature/feature.xml b/features/org.eclipse.datatools.enablement.oracle.feature/feature.xml
new file mode 100644
index 0000000..2c8513e
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oracle.feature/feature.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.enablement.oracle.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.enablement.finfo"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <requires>
+      <import feature="org.eclipse.datatools.modelbase.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.connectivity.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.enablement.jdbc.feature" version="1.13.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.oracle.dbdefinition"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.oracle"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.oracle.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.finfo"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.enablement.oracle.feature/license.html b/features/org.eclipse.datatools.enablement.oracle.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oracle.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.oracle.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.enablement.oracle.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oracle.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.oracle.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.oracle.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oracle.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.oracle.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.enablement.oracle.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oracle.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.oracle.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.enablement.oracle.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..d2bee37
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oracle.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement for Oracle Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Datatools Source
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.enablement.oracle.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.enablement.oracle.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.oracle.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.postgresql.feature/.project b/features/org.eclipse.datatools.enablement.postgresql.feature/.project
new file mode 100644
index 0000000..f2ca080
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.postgresql.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.postgresql.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.enablement.postgresql.feature/build.properties b/features/org.eclipse.datatools.enablement.postgresql.feature/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.postgresql.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.postgresql.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.postgresql.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.postgresql.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.postgresql.feature/epl-v10.html b/features/org.eclipse.datatools.enablement.postgresql.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.postgresql.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.postgresql.feature/feature.properties b/features/org.eclipse.datatools.enablement.postgresql.feature/feature.properties
new file mode 100644
index 0000000..1af81d9
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.postgresql.feature/feature.properties
@@ -0,0 +1,158 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2005 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/03 02:56:20 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement for PostgreSQL
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=DTP support for using the PostgreSQL database
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.enablement.postgresql.feature/feature.xml b/features/org.eclipse.datatools.enablement.postgresql.feature/feature.xml
new file mode 100644
index 0000000..4d59ba7
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.postgresql.feature/feature.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.enablement.postgresql.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.enablement.finfo"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <requires>
+      <import feature="org.eclipse.datatools.modelbase.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.connectivity.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.enablement.jdbc.feature" version="1.13.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.postgresql.dbdefinition"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.postgresql"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.postgresql.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.finfo"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.enablement.postgresql.feature/license.html b/features/org.eclipse.datatools.enablement.postgresql.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.postgresql.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.postgresql.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.enablement.postgresql.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.postgresql.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.postgresql.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.postgresql.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.postgresql.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.postgresql.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.enablement.postgresql.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.postgresql.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.postgresql.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.enablement.postgresql.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..42ebfdf
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.postgresql.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement for PostgreSQL Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Datatools Source
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.enablement.postgresql.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.enablement.postgresql.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.postgresql.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.sap.feature/.project b/features/org.eclipse.datatools.enablement.sap.feature/.project
new file mode 100644
index 0000000..577f657
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sap.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.sap.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.enablement.sap.feature/build.properties b/features/org.eclipse.datatools.enablement.sap.feature/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sap.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.sap.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.sap.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sap.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.sap.feature/epl-v10.html b/features/org.eclipse.datatools.enablement.sap.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sap.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.sap.feature/feature.properties b/features/org.eclipse.datatools.enablement.sap.feature/feature.properties
new file mode 100644
index 0000000..39557dc
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sap.feature/feature.properties
@@ -0,0 +1,158 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2005 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/03 02:56:20 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement for SAP MaxDB
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=DTP support for using the SAP MaxDB database
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.enablement.sap.feature/feature.xml b/features/org.eclipse.datatools.enablement.sap.feature/feature.xml
new file mode 100644
index 0000000..166ab80
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sap.feature/feature.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.enablement.sap.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.enablement.finfo"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <requires>
+      <import feature="org.eclipse.datatools.modelbase.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.connectivity.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.sqldevtools.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.enablement.jdbc.feature" version="1.13.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.sap.maxdb.dbdefinition"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.sap.maxdb"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.sap.maxdb.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.finfo"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.enablement.sap.feature/license.html b/features/org.eclipse.datatools.enablement.sap.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sap.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.sap.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.enablement.sap.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sap.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.sap.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.sap.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sap.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.sap.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.enablement.sap.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sap.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.sap.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.enablement.sap.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..5a0d243
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sap.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement for SAP MaxDB Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Datatools Source
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.enablement.sap.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.enablement.sap.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sap.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.sdk.feature/.project b/features/org.eclipse.datatools.enablement.sdk.feature/.project
new file mode 100644
index 0000000..9ebb45b
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sdk.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.datatools.enablement.sdk.feature</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.pde.FeatureBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.FeatureNature</nature>

+	</natures>

+</projectDescription>

diff --git a/features/org.eclipse.datatools.enablement.sdk.feature/build.properties b/features/org.eclipse.datatools.enablement.sdk.feature/build.properties
new file mode 100644
index 0000000..e5eac09
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sdk.feature/build.properties
@@ -0,0 +1,25 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
+               
+generate.feature@org.eclipse.datatools.enablement.feature.source=org.eclipse.datatools.enablement.feature
+generate.feature@org.eclipse.datatools.enablement.apache.derby.feature.source=org.eclipse.datatools.enablement.apache.derby.feature
+generate.feature@org.eclipse.datatools.enablement.hsqldb.feature.source=org.eclipse.datatools.enablement.hsqldb.feature
+generate.feature@org.eclipse.datatools.enablement.ibm.feature.source=org.eclipse.datatools.enablement.ibm.feature
+generate.feature@org.eclipse.datatools.enablement.jdbc.feature.source=org.eclipse.datatools.enablement.jdbc.feature
+generate.feature@org.eclipse.datatools.enablement.jdt.feature.source=org.eclipse.datatools.enablement.jdt.feature
+generate.feature@org.eclipse.datatools.enablement.msft.feature.source=org.eclipse.datatools.enablement.msft.feature
+generate.feature@org.eclipse.datatools.enablement.mysql.feature.source=org.eclipse.datatools.enablement.mysql.feature
+generate.feature@org.eclipse.datatools.enablement.oda.designer.feature.source=org.eclipse.datatools.enablement.oda.designer.feature
+generate.feature@org.eclipse.datatools.enablement.oda.feature.source=org.eclipse.datatools.enablement.oda.feature
+generate.feature@org.eclipse.datatools.enablement.oracle.feature.source=org.eclipse.datatools.enablement.oracle.feature
+generate.feature@org.eclipse.datatools.enablement.postgresql.feature.source=org.eclipse.datatools.enablement.postgresql.feature
+generate.feature@org.eclipse.datatools.enablement.sap.feature.source=org.eclipse.datatools.enablement.sap.feature
+generate.feature@org.eclipse.datatools.enablement.sybase.feature.source=org.eclipse.datatools.enablement.sybase.feature
+generate.feature@org.eclipse.datatools.enablement.ingres.feature.source=org.eclipse.datatools.enablement.ingres.feature
+generate.feature@org.eclipse.datatools.enablement.sqlite.feature.source=org.eclipse.datatools.enablement.sqlite.feature
+
+
+               
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.sdk.feature/epl-v10.html b/features/org.eclipse.datatools.enablement.sdk.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sdk.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.sdk.feature/feature.properties b/features/org.eclipse.datatools.enablement.sdk.feature/feature.properties
new file mode 100644
index 0000000..745df92
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sdk.feature/feature.properties
@@ -0,0 +1,158 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2005 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/03 02:56:21 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement Extender SDK
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Binaries, API documentation and source zips for DTP
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.enablement.sdk.feature/feature.xml b/features/org.eclipse.datatools.enablement.sdk.feature/feature.xml
new file mode 100644
index 0000000..7542544
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sdk.feature/feature.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.enablement.sdk.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.enablement.finfo"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <includes
+         id="org.eclipse.datatools.enablement.feature"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.feature.source"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.apache.derby.feature.source"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.hsqldb.feature.source"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.ibm.feature.source"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.jdbc.feature.source"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.jdt.feature.source"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.msft.feature.source"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.mysql.feature.source"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.oda.designer.feature.source"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.oda.feature.source"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.oracle.feature.source"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.postgresql.feature.source"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.sap.feature.source"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.sybase.feature.source"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.sqlite.feature.source"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.ingres.feature.source"
+         version="0.0.0"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.enablement.sdk.feature/license.html b/features/org.eclipse.datatools.enablement.sdk.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sdk.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..39a69a4
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Eclipse Datatools Enablement Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Datatools Enablement Source
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplatePlugin/about.html b/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplatePlugin/about.html
new file mode 100644
index 0000000..d35d5ae
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplatePlugin/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 5, 2007</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplatePlugin/about.ini b/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplatePlugin/about.ini
new file mode 100644
index 0000000..6ae9bf8
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplatePlugin/about.ini
@@ -0,0 +1,15 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%featureText
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=eclipse32.png
+
+# Property "appName" contains name of the application (translated)
+appName=%featureName
+
diff --git a/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplatePlugin/about.mappings b/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplatePlugin/about.mappings
new file mode 100644
index 0000000..0aacd82
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplatePlugin/about.mappings
@@ -0,0 +1,6 @@
+# about.mappings

+# contains fill-ins for about.properties

+# java.io.Properties file (ISO 8859-1 with "\" escapes)

+# This file does not need to be translated.

+

+0=@BUILD@
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplatePlugin/about.properties b/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplatePlugin/about.properties
new file mode 100644
index 0000000..5c968db
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplatePlugin/about.properties
@@ -0,0 +1,48 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  *
+#  * Contributors:
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: about.properties,v 1.1 2008/03/04 09:43:13 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+featureName=Eclipse Data Tools Source
+
+featureText=Eclipse Data Tools Source\n\
+\n\
+Visit http://www.eclipse.org/datatools\n\
+\n\
+Copyright (c) 2017 Eclipse Contributors\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html
+
+# ==============================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# The above properties have been shipped for translation.
+# ==============================================================================
diff --git a/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplatePlugin/build.properties b/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplatePlugin/build.properties
new file mode 100644
index 0000000..3ac6450
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplatePlugin/build.properties
@@ -0,0 +1,10 @@
+bin.includes = plugin.xml,\
+               plugin.properties,\
+               about.html,\
+               about.ini,\
+               about.mappings,\
+               about.properties,\
+               src/,\
+               modeling32.png,\
+               META-INF/
+sourcePlugin = true
diff --git a/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplatePlugin/eclipse32.png b/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplatePlugin/eclipse32.png
new file mode 100644
index 0000000..568fac1
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplatePlugin/eclipse32.png
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplatePlugin/plugin.properties b/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplatePlugin/plugin.properties
new file mode 100644
index 0000000..1b0b170
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sdk.feature/sourceTemplatePlugin/plugin.properties
@@ -0,0 +1,33 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2005 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  *
+#  * Contributors:
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: plugin.properties,v 1.1 2008/03/04 09:43:13 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+pluginName=Eclipse Datatools Source
+providerName=Eclipse.org
+
+# ==============================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# The above properties have been shipped for translation.
+# ==============================================================================
diff --git a/features/org.eclipse.datatools.enablement.sqlite.feature/.project b/features/org.eclipse.datatools.enablement.sqlite.feature/.project
new file mode 100644
index 0000000..516eb95
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sqlite.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.datatools.enablement.sqlite.feature</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.pde.FeatureBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.FeatureNature</nature>

+	</natures>

+</projectDescription>

diff --git a/features/org.eclipse.datatools.enablement.sqlite.feature/build.properties b/features/org.eclipse.datatools.enablement.sqlite.feature/build.properties
new file mode 100644
index 0000000..c6af93f
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sqlite.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.sqlite.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.sqlite.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sqlite.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.sqlite.feature/epl-v10.html b/features/org.eclipse.datatools.enablement.sqlite.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sqlite.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.sqlite.feature/feature.properties b/features/org.eclipse.datatools.enablement.sqlite.feature/feature.properties
new file mode 100644
index 0000000..aa24bb2
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sqlite.feature/feature.properties
@@ -0,0 +1,154 @@
+################################################################################

+## Copyright (c) 2006, 2014 Ingres Corporation and others.

+## All rights reserved.   This program and the accompanying materials

+## are made available under the terms of the Eclipse Public License v1.0

+## which accompanies this distribution, and is available at

+## http://www.eclipse.org/legal/epl-v10.html

+##

+## Contributors: 

+##  Ingres - Implementation

+##  Actuate Corporation - externalize update site name

+################################################################################

+

+# "featureName" property - name of the feature

+FEATURE_NAME=Data Tools Platform Enablement for Sqlite

+

+# "providerName" property - name of the company that provides the feature

+PROVIDER_NAME=Eclipse Data Tools Platform

+

+# "description" property - description of the feature

+DESCRIPTION=DTP support for using Sqlite databases

+#

+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html

+#

+# "licenseURL" property - URL of the "Feature License"

+# do not translate value - just change to point to a locale-specific HTML page

+LICENSE_URL=license.html

+

+# "license" property - text of the "Feature Update License"

+# should be plain text version of license agreement pointed to be "licenseURL"

+license=\

+Eclipse Foundation Software User Agreement\n\

+April 9, 2014\n\

+\n\

+Usage Of Content\n\

+\n\

+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\

+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\

+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\

+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\

+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\

+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\

+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\

+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\

+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\

+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\

+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\

+\n\

+Applicable Licenses\n\

+\n\

+Unless otherwise indicated, all Content made available by the\n\

+Eclipse Foundation is provided to you under the terms and conditions of\n\

+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\

+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\

+For purposes of the EPL, "Program" will mean the Content.\n\

+\n\

+Content includes, but is not limited to, source code, object code,\n\

+documentation and other files maintained in the Eclipse Foundation source code\n\

+repository ("Repository") in software modules ("Modules") and made available\n\

+as downloadable archives ("Downloads").\n\

+\n\

+       - Content may be structured and packaged into modules to facilitate delivering,\n\

+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\

+         plug-in fragments ("Fragments"), and features ("Features").\n\

+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\

+         in a directory named "plugins".\n\

+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\

+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\

+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\

+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\

+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\

+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\

+\n\

+The terms and conditions governing Plug-ins and Fragments should be\n\

+contained in files named "about.html" ("Abouts"). The terms and\n\

+conditions governing Features and Included Features should be contained\n\

+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\

+Licenses may be located in any directory of a Download or Module\n\

+including, but not limited to the following locations:\n\

+\n\

+       - The top-level (root) directory\n\

+       - Plug-in and Fragment directories\n\

+       - Inside Plug-ins and Fragments packaged as JARs\n\

+       - Sub-directories of the directory named "src" of certain Plug-ins\n\

+       - Feature directories\n\

+\n\

+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\

+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\

+Update License") during the installation process. If the Feature contains\n\

+Included Features, the Feature Update License should either provide you\n\

+with the terms and conditions governing the Included Features or inform\n\

+you where you can locate them. Feature Update Licenses may be found in\n\

+the "license" property of files named "feature.properties" found within a Feature.\n\

+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\

+terms and conditions (or references to such terms and conditions) that\n\

+govern your use of the associated Content in that directory.\n\

+\n\

+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\

+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\

+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\

+\n\

+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\

+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\

+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\

+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\

+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\

+\n\

+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\

+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\

+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\

+govern that particular Content.\n\

+\n\

+\n\Use of Provisioning Technology\n\

+\n\

+The Eclipse Foundation makes available provisioning software, examples of which include,\n\

+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\

+the purpose of allowing users to install software, documentation, information and/or\n\

+other materials (collectively "Installable Software"). This capability is provided with\n\

+the intent of allowing such users to install, extend and update Eclipse-based products.\n\

+Information about packaging Installable Software is available at\n\

+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\

+\n\

+You may use Provisioning Technology to allow other parties to install Installable Software.\n\

+You shall be responsible for enabling the applicable license agreements relating to the\n\

+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\

+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\

+making it available in accordance with the Specification, you further acknowledge your\n\

+agreement to, and the acquisition of all necessary rights to permit the following:\n\

+\n\

+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\

+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\

+          extending or updating the functionality of an Eclipse-based product.\n\

+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\

+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\

+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\

+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\

+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\

+          with the Specification. Such Installable Software Agreement must inform the user of the\n\

+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\

+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\

+          indication of agreement by the user, the provisioning Technology will complete installation\n\

+          of the Installable Software.\n\

+\n\

+Cryptography\n\

+\n\

+Content may contain encryption software. The country in which you are\n\

+currently may have restrictions on the import, possession, and use,\n\

+and/or re-export to another country, of encryption software. BEFORE\n\

+using any encryption software, please check the country's laws,\n\

+regulations and policies concerning the import, possession, or use, and\n\

+re-export of encryption software, to see if this is permitted.\n\

+\n\

+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n

+########### end of license property ##########################################

+

diff --git a/features/org.eclipse.datatools.enablement.sqlite.feature/feature.xml b/features/org.eclipse.datatools.enablement.sqlite.feature/feature.xml
new file mode 100644
index 0000000..294bef7
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sqlite.feature/feature.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.enablement.sqlite.feature"
+      label="%FEATURE_NAME"
+      version="1.14.1.qualifier"
+      provider-name="%PROVIDER_NAME"
+      plugin="org.eclipse.datatools.enablement.finfo">
+
+   <description>
+      %DESCRIPTION
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%LICENSE_URL">
+      %license
+   </license>
+
+   <requires>
+      <import feature="org.eclipse.datatools.modelbase.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.connectivity.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.sqldevtools.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.enablement.jdbc.feature" version="1.13.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.sqlite"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.sqlite.dbdefinition"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.sqlite.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.finfo"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.enablement.sqlite.feature/license.html b/features/org.eclipse.datatools.enablement.sqlite.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sqlite.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.sqlite.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.enablement.sqlite.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sqlite.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.sqlite.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.sqlite.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sqlite.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.sqlite.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.enablement.sqlite.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sqlite.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.sqlite.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.enablement.sqlite.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..79981d4
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sqlite.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+FEATURE_NAME=Data Tools Platform Enablement for Sqlite Source
+
+# "providerName" property - name of the company that provides the feature
+PROVIDER_NAME=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+DESCRIPTION=Datatools Source
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+LICENSE_URL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.enablement.sqlite.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.enablement.sqlite.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sqlite.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.sybase.feature/.project b/features/org.eclipse.datatools.enablement.sybase.feature/.project
new file mode 100644
index 0000000..66b4c19
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sybase.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.sybase.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.enablement.sybase.feature/build.properties b/features/org.eclipse.datatools.enablement.sybase.feature/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sybase.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.sybase.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.sybase.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sybase.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.sybase.feature/epl-v10.html b/features/org.eclipse.datatools.enablement.sybase.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sybase.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.sybase.feature/feature.properties b/features/org.eclipse.datatools.enablement.sybase.feature/feature.properties
new file mode 100644
index 0000000..9ceb326
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sybase.feature/feature.properties
@@ -0,0 +1,158 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2008 Sybase, Inc. and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   Sybase - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.6 2011/06/03 02:56:19 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement for Sybase
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=DTP support for using Sybase databases (ASE and ASA)
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.enablement.sybase.feature/feature.xml b/features/org.eclipse.datatools.enablement.sybase.feature/feature.xml
new file mode 100644
index 0000000..d2ddef0
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sybase.feature/feature.xml
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.enablement.sybase.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.enablement.sybase"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <requires>
+      <import feature="org.eclipse.datatools.modelbase.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.connectivity.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.sqldevtools.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.enablement.jdbc.feature" version="1.13.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.sybase.asa.models"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.sybase.ase.models"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.sybase.asa"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.sybase.ase"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.sybase.ase.dbdefinition"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.sybase.asa.dbdefinition"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.sybase.asa.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.sybase.ase.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.sybase"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.sybase.models"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.sybase.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.enablement.sybase.feature/license.html b/features/org.eclipse.datatools.enablement.sybase.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sybase.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.enablement.sybase.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.enablement.sybase.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sybase.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.enablement.sybase.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.enablement.sybase.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sybase.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.enablement.sybase.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.enablement.sybase.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sybase.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.enablement.sybase.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.enablement.sybase.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..55379ad
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sybase.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Enablement for Sybase Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Datatools Source
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.enablement.sybase.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.enablement.sybase.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.enablement.sybase.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.intro/.project b/features/org.eclipse.datatools.intro/.project
new file mode 100644
index 0000000..312a2cd
--- /dev/null
+++ b/features/org.eclipse.datatools.intro/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.intro</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.intro/build.properties b/features/org.eclipse.datatools.intro/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.intro/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.intro/eclipse32.png b/features/org.eclipse.datatools.intro/eclipse32.png
new file mode 100644
index 0000000..568fac1
--- /dev/null
+++ b/features/org.eclipse.datatools.intro/eclipse32.png
Binary files differ
diff --git a/features/org.eclipse.datatools.intro/eclipse_update_120.jpg b/features/org.eclipse.datatools.intro/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.intro/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.intro/epl-v10.html b/features/org.eclipse.datatools.intro/epl-v10.html
new file mode 100644
index 0000000..d3bb23e
--- /dev/null
+++ b/features/org.eclipse.datatools.intro/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+    {
+    panose-1:2 11 6 4 3 5 4 4 2 4;
+    mso-font-charset:0;
+    mso-font-pitch:variable;
+    mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+    {mso-style-parent:"";
+    margin:0in;
+    margin-bottom:.0001pt;
+    mso-pagination:widow-orphan;
+    font-size:12.0pt;
+    }
+p
+    {margin-right:0in;
+    mso-margin-top-alt:auto;
+    mso-margin-bottom-alt:auto;
+    margin-left:0in;
+    mso-pagination:widow-orphan;
+    font-size:12.0pt;
+    }
+p.BalloonText, li.BalloonText, div.BalloonText
+    {mso-style-name:"Balloon Text";
+    margin:0in;
+    margin-bottom:.0001pt;
+    mso-pagination:widow-orphan;
+    font-size:8.0pt;
+
+    }
+@page Section1
+    {size:8.5in 11.0in;
+    margin:1.0in 1.25in 1.0in 1.25in;
+    mso-header-margin:.5in;
+    mso-footer-margin:.5in;
+    mso-paper-source:0;}
+div.Section1
+    {page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.intro/feature.properties b/features/org.eclipse.datatools.intro/feature.properties
new file mode 100644
index 0000000..04c0ddc
--- /dev/null
+++ b/features/org.eclipse.datatools.intro/feature.properties
@@ -0,0 +1,147 @@
+# feature.properties file for org.eclipse.datatools.intro
+#
+
+copyright=Copyright (c) 2009 Sybase, Inc. and others
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Intro
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Data Tools Platform Intro Extension
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.intro/feature.xml b/features/org.eclipse.datatools.intro/feature.xml
new file mode 100644
index 0000000..5ebfa06
--- /dev/null
+++ b/features/org.eclipse.datatools.intro/feature.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.intro"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.intro"
+      image="eclipse32.png">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <plugin
+         id="org.eclipse.datatools.intro"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.intro/license.html b/features/org.eclipse.datatools.intro/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.intro/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.modelbase.feature/.project b/features/org.eclipse.datatools.modelbase.feature/.project
new file mode 100644
index 0000000..7cbdf87
--- /dev/null
+++ b/features/org.eclipse.datatools.modelbase.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.modelbase.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.modelbase.feature/build.properties b/features/org.eclipse.datatools.modelbase.feature/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.modelbase.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.modelbase.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.modelbase.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.modelbase.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.modelbase.feature/epl-v10.html b/features/org.eclipse.datatools.modelbase.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.modelbase.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.modelbase.feature/feature.properties b/features/org.eclipse.datatools.modelbase.feature/feature.properties
new file mode 100644
index 0000000..d6b0e6f
--- /dev/null
+++ b/features/org.eclipse.datatools.modelbase.feature/feature.properties
@@ -0,0 +1,158 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2005 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/03 02:56:21 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Model Base
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=EMF based models used in DTP (e.g. SQL model, database definition model)
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.modelbase.feature/feature.xml b/features/org.eclipse.datatools.modelbase.feature/feature.xml
new file mode 100644
index 0000000..442807a
--- /dev/null
+++ b/features/org.eclipse.datatools.modelbase.feature/feature.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.modelbase.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.modelbase.sql"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <requires>
+      <import feature="org.eclipse.emf" version="2.4.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.datatools.modelbase.dbdefinition"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.modelbase.sql.edit"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.modelbase.sql.query"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.modelbase.sql.query.edit"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.modelbase.sql.xml.query"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.modelbase.sql"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.modelbase.feature/license.html b/features/org.eclipse.datatools.modelbase.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.modelbase.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.modelbase.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.modelbase.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.modelbase.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.modelbase.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.modelbase.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.modelbase.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.modelbase.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.modelbase.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.modelbase.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.modelbase.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.modelbase.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..c3afcda
--- /dev/null
+++ b/features/org.eclipse.datatools.modelbase.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/30 06:04:37 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Model Base Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Datatools Source
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.modelbase.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.modelbase.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.modelbase.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.sdk-all.feature/.project b/features/org.eclipse.datatools.sdk-all.feature/.project
new file mode 100644
index 0000000..1cb0556
--- /dev/null
+++ b/features/org.eclipse.datatools.sdk-all.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.datatools.sdk-all.feature</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.pde.FeatureBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.FeatureNature</nature>

+	</natures>

+</projectDescription>

diff --git a/features/org.eclipse.datatools.sdk-all.feature/build.properties b/features/org.eclipse.datatools.sdk-all.feature/build.properties
new file mode 100644
index 0000000..477c24e
--- /dev/null
+++ b/features/org.eclipse.datatools.sdk-all.feature/build.properties
@@ -0,0 +1,9 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
+               
+root=rootfiles
+
+               
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.sdk-all.feature/epl-v10.html b/features/org.eclipse.datatools.sdk-all.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.sdk-all.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.sdk-all.feature/feature.properties b/features/org.eclipse.datatools.sdk-all.feature/feature.properties
new file mode 100644
index 0000000..253910b
--- /dev/null
+++ b/features/org.eclipse.datatools.sdk-all.feature/feature.properties
@@ -0,0 +1,158 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2005 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/30 06:26:24 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Extender SDK
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Binaries, API documentation and source zips for DTP
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.sdk-all.feature/feature.xml b/features/org.eclipse.datatools.sdk-all.feature/feature.xml
new file mode 100644
index 0000000..bdbef69
--- /dev/null
+++ b/features/org.eclipse.datatools.sdk-all.feature/feature.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.sdk-all.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <includes
+         id="org.eclipse.datatools.sdk.feature"
+         version="0.0.0"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.sdk-all.feature/license.html b/features/org.eclipse.datatools.sdk-all.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.sdk-all.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.sdk-all.feature/rootfiles/epl-v10.html b/features/org.eclipse.datatools.sdk-all.feature/rootfiles/epl-v10.html
new file mode 100644
index 0000000..a4d335b
--- /dev/null
+++ b/features/org.eclipse.datatools.sdk-all.feature/rootfiles/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
diff --git a/features/org.eclipse.datatools.sdk-all.feature/rootfiles/notice.html b/features/org.eclipse.datatools.sdk-all.feature/rootfiles/notice.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.sdk-all.feature/rootfiles/notice.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.sdk.feature/.project b/features/org.eclipse.datatools.sdk.feature/.project
new file mode 100644
index 0000000..e77d435
--- /dev/null
+++ b/features/org.eclipse.datatools.sdk.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.sdk.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.sdk.feature/build.properties b/features/org.eclipse.datatools.sdk.feature/build.properties
new file mode 100644
index 0000000..ab60fd3
--- /dev/null
+++ b/features/org.eclipse.datatools.sdk.feature/build.properties
@@ -0,0 +1,20 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
+               
+generate.feature@org.eclipse.datatools.modelbase.feature.source=org.eclipse.datatools.modelbase.feature
+generate.feature@org.eclipse.datatools.connectivity.feature.source=org.eclipse.datatools.connectivity.feature
+generate.feature@org.eclipse.datatools.sqldevtools.feature.source=org.eclipse.datatools.sqldevtools.feature
+generate.feature@org.eclipse.datatools.connectivity.oda.designer.feature.source = org.eclipse.datatools.connectivity.oda.designer.feature
+generate.feature@org.eclipse.datatools.connectivity.oda.designer.core.feature.source = org.eclipse.datatools.connectivity.oda.designer.core.feature
+generate.feature@org.eclipse.datatools.connectivity.oda.feature.source = org.eclipse.datatools.connectivity.oda.feature
+generate.feature@org.eclipse.datatools.sqldevtools.data.feature.source = org.eclipse.datatools.sqldevtools.data.feature
+generate.feature@org.eclipse.datatools.sqldevtools.ddl.feature.source = org.eclipse.datatools.sqldevtools.ddl.feature
+generate.feature@org.eclipse.datatools.sqldevtools.ddlgen.feature.source = org.eclipse.datatools.sqldevtools.ddlgen.feature
+generate.feature@org.eclipse.datatools.sqldevtools.parsers.feature.source = org.eclipse.datatools.sqldevtools.parsers.feature
+generate.feature@org.eclipse.datatools.sqldevtools.results.feature.source = org.eclipse.datatools.sqldevtools.results.feature
+generate.feature@org.eclipse.datatools.sqldevtools.sqlbuilder.feature.source=org.eclipse.datatools.sqldevtools.sqlbuilder.feature
+generate.plugin@org.eclipse.datatools.connectivity.ui.templates.source=org.eclipse.datatools.connectivity.ui.templates
+ 
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.sdk.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.sdk.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.sdk.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.sdk.feature/epl-v10.html b/features/org.eclipse.datatools.sdk.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.sdk.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.sdk.feature/feature.properties b/features/org.eclipse.datatools.sdk.feature/feature.properties
new file mode 100644
index 0000000..ab65a4e
--- /dev/null
+++ b/features/org.eclipse.datatools.sdk.feature/feature.properties
@@ -0,0 +1,158 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2005 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/03 02:56:20 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform Extender SDK
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Binaries, API documentation and source zips for DTP
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.sdk.feature/feature.xml b/features/org.eclipse.datatools.sdk.feature/feature.xml
new file mode 100644
index 0000000..173c764
--- /dev/null
+++ b/features/org.eclipse.datatools.sdk.feature/feature.xml
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.sdk.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.sdk"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <includes
+         id="org.eclipse.datatools.modelbase.feature"
+         version="0.0.0"
+         optional="true"/>
+
+   <includes
+         id="org.eclipse.datatools.connectivity.feature"
+         version="0.0.0"
+         optional="true"/>
+
+   <includes
+         id="org.eclipse.datatools.sqldevtools.feature"
+         version="0.0.0"
+         optional="true"/>
+
+   <includes
+         id="org.eclipse.datatools.modelbase.feature.source"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.intro"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.doc.user"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.common.doc.user"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.connectivity.doc.user"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.sqltools.doc.user"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.connectivity.feature.source"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.sqldevtools.feature.source"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.connectivity.oda.designer.feature.source"
+         version="0.0.0"
+         optional="true"/>
+
+   <includes
+         id="org.eclipse.datatools.connectivity.oda.designer.core.feature.source"
+         version="0.0.0"
+         optional="true"/>
+
+   <includes
+         id="org.eclipse.datatools.connectivity.oda.feature.source"
+         version="0.0.0"
+         optional="true"/>
+
+   <includes
+         id="org.eclipse.datatools.sqldevtools.data.feature.source"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.sqldevtools.ddl.feature.source"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.sqldevtools.ddlgen.feature.source"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.sqldevtools.parsers.feature.source"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.sqldevtools.results.feature.source"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.sqldevtools.sqlbuilder.feature.source"
+         version="0.0.0"/>
+
+   <requires>
+      <import feature="org.eclipse.pde" version="3.4.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.datatools.doc.isv"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sdk"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity.ui.templates"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity.ui.templates.source"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.sdk.feature/license.html b/features/org.eclipse.datatools.sdk.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.sdk.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.sdk.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.sdk.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.sdk.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.sdk.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.sdk.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.sdk.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.sdk.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.sdk.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.sdk.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.sdk.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.sdk.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..d9822a2
--- /dev/null
+++ b/features/org.eclipse.datatools.sdk.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Eclipse Datatools Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Datatools Source
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.sdk.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.sdk.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.sdk.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.sdk.feature/sourceTemplatePlugin/about.html b/features/org.eclipse.datatools.sdk.feature/sourceTemplatePlugin/about.html
new file mode 100644
index 0000000..d35d5ae
--- /dev/null
+++ b/features/org.eclipse.datatools.sdk.feature/sourceTemplatePlugin/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 5, 2007</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.sdk.feature/sourceTemplatePlugin/about.ini b/features/org.eclipse.datatools.sdk.feature/sourceTemplatePlugin/about.ini
new file mode 100644
index 0000000..6ae9bf8
--- /dev/null
+++ b/features/org.eclipse.datatools.sdk.feature/sourceTemplatePlugin/about.ini
@@ -0,0 +1,15 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%featureText
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=eclipse32.png
+
+# Property "appName" contains name of the application (translated)
+appName=%featureName
+
diff --git a/features/org.eclipse.datatools.sdk.feature/sourceTemplatePlugin/about.mappings b/features/org.eclipse.datatools.sdk.feature/sourceTemplatePlugin/about.mappings
new file mode 100644
index 0000000..0aacd82
--- /dev/null
+++ b/features/org.eclipse.datatools.sdk.feature/sourceTemplatePlugin/about.mappings
@@ -0,0 +1,6 @@
+# about.mappings

+# contains fill-ins for about.properties

+# java.io.Properties file (ISO 8859-1 with "\" escapes)

+# This file does not need to be translated.

+

+0=@BUILD@
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.sdk.feature/sourceTemplatePlugin/about.properties b/features/org.eclipse.datatools.sdk.feature/sourceTemplatePlugin/about.properties
new file mode 100644
index 0000000..8976270
--- /dev/null
+++ b/features/org.eclipse.datatools.sdk.feature/sourceTemplatePlugin/about.properties
@@ -0,0 +1,48 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  *
+#  * Contributors:
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: about.properties,v 1.2 2008/02/22 08:50:26 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+featureName=Eclipse Data Tools Source
+
+featureText=Eclipse Data Tools Source\n\
+\n\
+Visit http://www.eclipse.org/datatools\n\
+\n\
+Copyright (c) 2017 Eclipse Contributors\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html
+
+# ==============================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# The above properties have been shipped for translation.
+# ==============================================================================
diff --git a/features/org.eclipse.datatools.sdk.feature/sourceTemplatePlugin/build.properties b/features/org.eclipse.datatools.sdk.feature/sourceTemplatePlugin/build.properties
new file mode 100644
index 0000000..3ac6450
--- /dev/null
+++ b/features/org.eclipse.datatools.sdk.feature/sourceTemplatePlugin/build.properties
@@ -0,0 +1,10 @@
+bin.includes = plugin.xml,\
+               plugin.properties,\
+               about.html,\
+               about.ini,\
+               about.mappings,\
+               about.properties,\
+               src/,\
+               modeling32.png,\
+               META-INF/
+sourcePlugin = true
diff --git a/features/org.eclipse.datatools.sdk.feature/sourceTemplatePlugin/eclipse32.png b/features/org.eclipse.datatools.sdk.feature/sourceTemplatePlugin/eclipse32.png
new file mode 100644
index 0000000..568fac1
--- /dev/null
+++ b/features/org.eclipse.datatools.sdk.feature/sourceTemplatePlugin/eclipse32.png
Binary files differ
diff --git a/features/org.eclipse.datatools.sdk.feature/sourceTemplatePlugin/plugin.properties b/features/org.eclipse.datatools.sdk.feature/sourceTemplatePlugin/plugin.properties
new file mode 100644
index 0000000..e7c7eb7
--- /dev/null
+++ b/features/org.eclipse.datatools.sdk.feature/sourceTemplatePlugin/plugin.properties
@@ -0,0 +1,33 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2005 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  *
+#  * Contributors:
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: plugin.properties,v 1.1 2008/03/04 09:43:13 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+pluginName=Eclipse Datatools Source
+providerName=Eclipse Data Tools Platform
+
+# ==============================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# The above properties have been shipped for translation.
+# ==============================================================================
diff --git a/features/org.eclipse.datatools.sqldevtools.data.feature/.project b/features/org.eclipse.datatools.sqldevtools.data.feature/.project
new file mode 100644
index 0000000..71e4da7
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.data.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.sqldevtools.data.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.sqldevtools.data.feature/build.properties b/features/org.eclipse.datatools.sqldevtools.data.feature/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.data.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.sqldevtools.data.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.sqldevtools.data.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.data.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.sqldevtools.data.feature/epl-v10.html b/features/org.eclipse.datatools.sqldevtools.data.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.data.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.sqldevtools.data.feature/feature.properties b/features/org.eclipse.datatools.sqldevtools.data.feature/feature.properties
new file mode 100644
index 0000000..283b2bb
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.data.feature/feature.properties
@@ -0,0 +1,158 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2005 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/03 02:56:20 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform SQL Development Tools Data Functions
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Tools for working with relational data
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.sqldevtools.data.feature/feature.xml b/features/org.eclipse.datatools.sqldevtools.data.feature/feature.xml
new file mode 100644
index 0000000..fb2b32a
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.data.feature/feature.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.sqldevtools.data.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <requires>
+      <import feature="org.eclipse.datatools.modelbase.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.connectivity.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.sqldevtools.ddl.feature" version="1.13.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.data.core"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.data.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.tabledataeditor"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.result.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.common.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.sqldevtools.data.feature/license.html b/features/org.eclipse.datatools.sqldevtools.data.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.data.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.sqldevtools.data.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.sqldevtools.data.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.data.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.sqldevtools.data.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.sqldevtools.data.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.data.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.sqldevtools.data.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.sqldevtools.data.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.data.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.sqldevtools.data.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.sqldevtools.data.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..ecb4215
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.data.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform SQL Development Tools Data Function Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Datatools Source
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.sqldevtools.data.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.sqldevtools.data.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.data.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.sqldevtools.ddl.feature/.project b/features/org.eclipse.datatools.sqldevtools.ddl.feature/.project
new file mode 100644
index 0000000..a17b0b4
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.ddl.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.sqldevtools.ddl.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.sqldevtools.ddl.feature/build.properties b/features/org.eclipse.datatools.sqldevtools.ddl.feature/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.ddl.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.sqldevtools.ddl.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.sqldevtools.ddl.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.ddl.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.sqldevtools.ddl.feature/epl-v10.html b/features/org.eclipse.datatools.sqldevtools.ddl.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.ddl.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.sqldevtools.ddl.feature/feature.properties b/features/org.eclipse.datatools.sqldevtools.ddl.feature/feature.properties
new file mode 100644
index 0000000..06024d7
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.ddl.feature/feature.properties
@@ -0,0 +1,158 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2005 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/03 02:56:20 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform SQL Development Tools DDL Functionality
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Tools for DDL Functionality
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.sqldevtools.ddl.feature/feature.xml b/features/org.eclipse.datatools.sqldevtools.ddl.feature/feature.xml
new file mode 100644
index 0000000..0c2331b
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.ddl.feature/feature.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.sqldevtools.ddl.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <includes
+         id="org.eclipse.datatools.sqldevtools.ddlgen.feature"
+         version="0.0.0"/>
+
+   <requires>
+      <import feature="org.eclipse.datatools.modelbase.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.connectivity.feature" version="1.13.0" match="greaterOrEqual"/>
+   </requires>
+
+</feature>
diff --git a/features/org.eclipse.datatools.sqldevtools.ddl.feature/license.html b/features/org.eclipse.datatools.sqldevtools.ddl.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.ddl.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.sqldevtools.ddl.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.sqldevtools.ddl.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.ddl.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.sqldevtools.ddl.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.sqldevtools.ddl.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.ddl.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.sqldevtools.ddl.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.sqldevtools.ddl.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.ddl.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.sqldevtools.ddl.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.sqldevtools.ddl.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..b35044a
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.ddl.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform SQL Development Tools DDL Functionality Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Datatools Source
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.sqldevtools.ddl.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.sqldevtools.ddl.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.ddl.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/.project b/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/.project
new file mode 100644
index 0000000..663402d
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.sqldevtools.ddlgen.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/build.properties b/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/epl-v10.html b/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/feature.properties b/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/feature.properties
new file mode 100644
index 0000000..4966d63
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/feature.properties
@@ -0,0 +1,158 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2005 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/03 02:56:20 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform SQL Development Tools DDL Generation Functionality
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Tools for DDL Generation Functionality
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/feature.xml b/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/feature.xml
new file mode 100644
index 0000000..1bc40fd
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/feature.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.sqldevtools.ddlgen.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.sqltools.ddlgen.ui"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <requires>
+      <import feature="org.eclipse.datatools.modelbase.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.connectivity.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.sqldevtools.results.feature" version="1.13.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.sql"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.common.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.plan"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.editor.core"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.sqleditor"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.ddlgen.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity.db.generic"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.editor.core.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.sql.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/license.html b/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..8d7ecc4
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform SQL Development Tools DDL Generation Functionality Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Datatools Source
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.sqldevtools.feature/.project b/features/org.eclipse.datatools.sqldevtools.feature/.project
new file mode 100644
index 0000000..caf28df
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.sqldevtools.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.sqldevtools.feature/build.properties b/features/org.eclipse.datatools.sqldevtools.feature/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.sqldevtools.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.sqldevtools.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.sqldevtools.feature/epl-v10.html b/features/org.eclipse.datatools.sqldevtools.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.sqldevtools.feature/feature.properties b/features/org.eclipse.datatools.sqldevtools.feature/feature.properties
new file mode 100644
index 0000000..dfcd32b
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.feature/feature.properties
@@ -0,0 +1,158 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2005 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/03 02:56:20 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform SQL Development Tools
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Tools for working with SQL and relational databases
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.sqldevtools.feature/feature.xml b/features/org.eclipse.datatools.sqldevtools.feature/feature.xml
new file mode 100644
index 0000000..b24211d
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.feature/feature.xml
@@ -0,0 +1,168 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.sqldevtools.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.sqltools.common.ui"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <includes
+         id="org.eclipse.datatools.sqldevtools.results.feature"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.sqldevtools.ddlgen.feature"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.sqldevtools.ddl.feature"
+         version="0.0.0"
+         optional="true"/>
+
+   <includes
+         id="org.eclipse.datatools.sqldevtools.data.feature"
+         version="0.0.0"
+         optional="true"/>
+
+   <includes
+         id="org.eclipse.datatools.sqldevtools.parsers.feature"
+         version="0.0.0"
+         optional="true"/>
+
+   <includes
+         id="org.eclipse.datatools.sqldevtools.sqlbuilder.feature"
+         version="0.0.0"
+         optional="true"/>
+
+   <includes
+         id="org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature"
+         version="0.0.0"
+         optional="true"/>
+
+   <requires>
+      <import feature="org.eclipse.gef" version="3.4.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.modelbase.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.connectivity.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.doc.user" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.enablement.jdbc.feature" version="1.13.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.common.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.debugger.core"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.editor.core"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.plan"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.routineeditor"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.sql"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.sqleditor"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.sqlscrapbook"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.help"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.db.generic"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.debugger.core.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.editor.core.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.result.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.routineeditor.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.sql.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.sqldevtools.feature/license.html b/features/org.eclipse.datatools.sqldevtools.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.sqldevtools.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.sqldevtools.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.sqldevtools.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.sqldevtools.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.sqldevtools.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.sqldevtools.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.sqldevtools.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.sqldevtools.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..3f80209
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform SQL Development Tools Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Datatools Source
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.sqldevtools.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.sqldevtools.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.sqldevtools.parsers.feature/.project b/features/org.eclipse.datatools.sqldevtools.parsers.feature/.project
new file mode 100644
index 0000000..89fabaa
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.parsers.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.sqldevtools.parsers.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.sqldevtools.parsers.feature/build.properties b/features/org.eclipse.datatools.sqldevtools.parsers.feature/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.parsers.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.sqldevtools.parsers.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.sqldevtools.parsers.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.parsers.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.sqldevtools.parsers.feature/epl-v10.html b/features/org.eclipse.datatools.sqldevtools.parsers.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.parsers.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.sqldevtools.parsers.feature/feature.properties b/features/org.eclipse.datatools.sqldevtools.parsers.feature/feature.properties
new file mode 100644
index 0000000..9fc9906
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.parsers.feature/feature.properties
@@ -0,0 +1,158 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2005 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/03 02:56:21 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform SQL Parsers
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Extensible SQL query parser framework
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.sqldevtools.parsers.feature/feature.xml b/features/org.eclipse.datatools.sqldevtools.parsers.feature/feature.xml
new file mode 100644
index 0000000..7c3af62
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.parsers.feature/feature.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.sqldevtools.parsers.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.sqltools.parsers.sql"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <requires>
+      <import feature="org.eclipse.datatools.modelbase.feature" version="1.13.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.parsers.sql.lexer"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.parsers.sql.query"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.parsers.sql.xml.query"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.parsers.sql"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.sqldevtools.parsers.feature/license.html b/features/org.eclipse.datatools.sqldevtools.parsers.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.parsers.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.sqldevtools.parsers.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.sqldevtools.parsers.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.parsers.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.sqldevtools.parsers.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.sqldevtools.parsers.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.parsers.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.sqldevtools.parsers.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.sqldevtools.parsers.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.parsers.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.sqldevtools.parsers.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.sqldevtools.parsers.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..dfe8005
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.parsers.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform SQL Parsers Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Datatools Source
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.sqldevtools.parsers.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.sqldevtools.parsers.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.parsers.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.sqldevtools.results.feature/.project b/features/org.eclipse.datatools.sqldevtools.results.feature/.project
new file mode 100644
index 0000000..6bfa072
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.results.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.sqldevtools.results.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.sqldevtools.results.feature/build.properties b/features/org.eclipse.datatools.sqldevtools.results.feature/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.results.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.sqldevtools.results.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.sqldevtools.results.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.results.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.sqldevtools.results.feature/epl-v10.html b/features/org.eclipse.datatools.sqldevtools.results.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.results.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.sqldevtools.results.feature/feature.properties b/features/org.eclipse.datatools.sqldevtools.results.feature/feature.properties
new file mode 100644
index 0000000..a4e8592
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.results.feature/feature.properties
@@ -0,0 +1,161 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2005 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/03 02:56:20 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform SQL Development Tools Results View
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Framework and tools for displaying JDBC result sets and query history
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "secondaryUpdateSiteName" property - label for the secondary update site (on download1.eclipse.org)
+secondaryUpdateSiteName=DTP Secondary Update Site
diff --git a/features/org.eclipse.datatools.sqldevtools.results.feature/feature.xml b/features/org.eclipse.datatools.sqldevtools.results.feature/feature.xml
new file mode 100644
index 0000000..3400780
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.results.feature/feature.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.sqldevtools.results.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <requires>
+      <import feature="org.eclipse.datatools.modelbase.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.connectivity.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.doc.user" version="1.13.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.common.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.result"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.connectivity"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.sqldevtools.results.feature/license.html b/features/org.eclipse.datatools.sqldevtools.results.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.results.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.sqldevtools.results.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.sqldevtools.results.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.results.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.sqldevtools.results.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.sqldevtools.results.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.results.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.sqldevtools.results.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.sqldevtools.results.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.results.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.sqldevtools.results.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.sqldevtools.results.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..805f4a7
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.results.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform SQL Development Tools Results View Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Datatools Source
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.sqldevtools.results.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.sqldevtools.results.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.results.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/.project b/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/.project
new file mode 100644
index 0000000..942d545
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.pde.FeatureBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.FeatureNature</nature>

+	</natures>

+</projectDescription>

diff --git a/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/build.properties b/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/epl-v10.html b/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/feature.properties b/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/feature.properties
new file mode 100644
index 0000000..1b59d32
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/feature.properties
@@ -0,0 +1,158 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2008 Sybase and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.3 2011/06/03 02:56:21 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform SQL Schema Object Editor Feature
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Editor for Schema Object
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/feature.xml b/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/feature.xml
new file mode 100644
index 0000000..10d3e16
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/feature.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <requires>
+      <import feature="org.eclipse.draw2d" version="3.4.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.sqldevtools.sqlbuilder.feature" version="1.13.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.schemaobjecteditor"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.schemaobjecteditor.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/license.html b/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..9daf59c
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.3 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform SQL Query Builder Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Datatools Source
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/.project b/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/.project
new file mode 100644
index 0000000..0e6110f
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.datatools.sqldevtools.sqlbuilder.feature</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.pde.FeatureBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.FeatureNature</nature>

+	</natures>

+</projectDescription>

diff --git a/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/build.properties b/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/eclipse_update_120.jpg b/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/epl-v10.html b/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/feature.properties b/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/feature.properties
new file mode 100644
index 0000000..58432e2
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/feature.properties
@@ -0,0 +1,158 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2008 Sybase and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.5 2011/06/03 02:56:21 xgu Exp $
+#  */
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform SQL Query Builder
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Editor for building SQL queries
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/feature.xml b/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/feature.xml
new file mode 100644
index 0000000..2bc2b0a
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/feature.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools.sqldevtools.sqlbuilder.feature"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <requires>
+      <import feature="org.eclipse.emf" version="2.4.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.gef" version="3.4.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.modelbase.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.connectivity.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.doc.user" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.enablement.jdbc.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.sqldevtools.results.feature" version="1.13.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.datatools.sqldevtools.parsers.feature" version="1.13.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.sqlbuilder"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.editor.core"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.sql"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.sqleditor"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.plan"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.db.generic"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.editor.core.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.sql.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/license.html b/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..01b0213
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg,\
+               license.html
diff --git a/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..577d514
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,178 @@
+# /**
+#  * <copyright>
+#  *
+#  * Copyright (c) 2002-2007 IBM Corporation and others.
+#  * All rights reserved.   This program and the accompanying materials
+#  * are made available under the terms of the Eclipse Public License v1.0
+#  * which accompanies this distribution, and is available at
+#  * http://www.eclipse.org/legal/epl-v10.html
+#  * 
+#  * Contributors: 
+#  *   IBM - Initial API and implementation
+#  *
+#  * </copyright>
+#  *
+#  * $Id: feature.properties,v 1.4 2011/06/30 06:04:38 xgu Exp $
+#  */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Data Tools Platform SQL Query Builder Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Data Tools Platform
+
+# "description" property - description of the feature
+description=Datatools Source
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateSiteName=Data Tools Platform (DTP) Updates
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
+
+# "EMFUpdateSiteName" property - label for the update site (on download1.eclipse.org)
+EMFUpdateSiteName=Eclipse Modeling Framework (EMF) Updates
+EMFTUpdateSiteName=Eclipse Modeling Framework Technologies (EMFT) Updates
diff --git a/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/sourceTemplateFeature/license.html b/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.datatools.sqltools.doc.user/.project b/features/org.eclipse.datatools.sqltools.doc.user/.project
new file mode 100644
index 0000000..286a154
--- /dev/null
+++ b/features/org.eclipse.datatools.sqltools.doc.user/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.sqltools.doc.user</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.datatools.sqltools.doc.user/build.properties b/features/org.eclipse.datatools.sqltools.doc.user/build.properties
new file mode 100644
index 0000000..60e19e5
--- /dev/null
+++ b/features/org.eclipse.datatools.sqltools.doc.user/build.properties
@@ -0,0 +1,5 @@
+bin.includes = eclipse_update_120.jpg,\
+               epl-v10.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.datatools.sqltools.doc.user/eclipse_update_120.jpg b/features/org.eclipse.datatools.sqltools.doc.user/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/features/org.eclipse.datatools.sqltools.doc.user/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.datatools.sqltools.doc.user/epl-v10.html b/features/org.eclipse.datatools.sqltools.doc.user/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.datatools.sqltools.doc.user/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.datatools.sqltools.doc.user/feature.properties b/features/org.eclipse.datatools.sqltools.doc.user/feature.properties
new file mode 100644
index 0000000..7363d89
--- /dev/null
+++ b/features/org.eclipse.datatools.sqltools.doc.user/feature.properties
@@ -0,0 +1,151 @@
+###############################################################################
+# Copyright (c) 2009 Sybase, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# 	Sybase, Inc. - initial API and implementation
+#	Actuate Corporation - fix for Bug 245758
+#
+# Properties for feature: org.eclipse.datatools.sqltools.doc.user
+# Version: 1.6.1
+#
+###############################################################################
+            
+featureName = Data Tools Platform SQL Dev Tools Documentation
+#
+providerName = Eclipse Data Tools Platform
+#
+featureDesc = Data Tools Platform Documentation Feature
+#
+featureCopyright = Copyright (c) 2009 Sybase, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+#
+featureLicenseURL = license.html
+#
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+
+# # # # # # # # # # end of "featureLicenseTxt" property # # # # # # # # # # # #
diff --git a/features/org.eclipse.datatools.sqltools.doc.user/feature.xml b/features/org.eclipse.datatools.sqltools.doc.user/feature.xml
new file mode 100644
index 0000000..72a0426
--- /dev/null
+++ b/features/org.eclipse.datatools.sqltools.doc.user/feature.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ *************************************************************************
+ * Copyright (c) 2009, 2014 Sybase, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * 	Sybase, Inc. - initial API and implementation
+ *  Actuate Corporation - fix for Bug 245758; version updates
+ *  
+ ***************************************************************************
+ -->
+<feature
+      id="org.eclipse.datatools.sqltools.doc.user"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.datatools.sqltools.doc.user"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %featureDesc
+   </description>
+
+   <copyright>
+      %featureCopyright
+   </copyright>
+
+   <license url="%featureLicenseURL">
+      %license
+   </license>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.doc.user"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.datatools.sqltools.doc.user.contexts"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.datatools.sqltools.doc.user/license.html b/features/org.eclipse.datatools.sqltools.doc.user/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/features/org.eclipse.datatools.sqltools.doc.user/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/packaged_jars/artifacts.jar b/packaged_jars/artifacts.jar
new file mode 100644
index 0000000..b870f49
--- /dev/null
+++ b/packaged_jars/artifacts.jar
Binary files differ
diff --git a/packaged_jars/content.jar b/packaged_jars/content.jar
new file mode 100644
index 0000000..f866ab7
--- /dev/null
+++ b/packaged_jars/content.jar
Binary files differ
diff --git a/packaged_jars/plugins/org.eclipse.datatools.common.doc.user_1.7.0.20090521092446.jar b/packaged_jars/plugins/org.eclipse.datatools.common.doc.user_1.7.0.20090521092446.jar
new file mode 100644
index 0000000..6221786
--- /dev/null
+++ b/packaged_jars/plugins/org.eclipse.datatools.common.doc.user_1.7.0.20090521092446.jar
Binary files differ
diff --git a/packaged_jars/plugins/org.eclipse.datatools.connectivity.doc.user.contexts_1.7.0.20090521092446.jar b/packaged_jars/plugins/org.eclipse.datatools.connectivity.doc.user.contexts_1.7.0.20090521092446.jar
new file mode 100644
index 0000000..7605e7a
--- /dev/null
+++ b/packaged_jars/plugins/org.eclipse.datatools.connectivity.doc.user.contexts_1.7.0.20090521092446.jar
Binary files differ
diff --git a/packaged_jars/plugins/org.eclipse.datatools.connectivity.doc.user_1.7.0.20090521092446.jar b/packaged_jars/plugins/org.eclipse.datatools.connectivity.doc.user_1.7.0.20090521092446.jar
new file mode 100644
index 0000000..5f16e21
--- /dev/null
+++ b/packaged_jars/plugins/org.eclipse.datatools.connectivity.doc.user_1.7.0.20090521092446.jar
Binary files differ
diff --git a/packaged_jars/plugins/org.eclipse.datatools.doc.user_1.7.0.20090521092446.jar b/packaged_jars/plugins/org.eclipse.datatools.doc.user_1.7.0.20090521092446.jar
new file mode 100644
index 0000000..344ae68
--- /dev/null
+++ b/packaged_jars/plugins/org.eclipse.datatools.doc.user_1.7.0.20090521092446.jar
Binary files differ
diff --git a/packaged_jars/plugins/org.eclipse.datatools.intro_1.7.0.v201005281800.jar b/packaged_jars/plugins/org.eclipse.datatools.intro_1.7.0.v201005281800.jar
new file mode 100644
index 0000000..9612234
--- /dev/null
+++ b/packaged_jars/plugins/org.eclipse.datatools.intro_1.7.0.v201005281800.jar
Binary files differ
diff --git a/packaged_jars/plugins/org.eclipse.datatools.sqltools.doc.user.contexts_1.7.0.20090521092446.jar b/packaged_jars/plugins/org.eclipse.datatools.sqltools.doc.user.contexts_1.7.0.20090521092446.jar
new file mode 100644
index 0000000..245ca18
--- /dev/null
+++ b/packaged_jars/plugins/org.eclipse.datatools.sqltools.doc.user.contexts_1.7.0.20090521092446.jar
Binary files differ
diff --git a/packaged_jars/plugins/org.eclipse.datatools.sqltools.doc.user_1.7.0.20090521092446.jar b/packaged_jars/plugins/org.eclipse.datatools.sqltools.doc.user_1.7.0.20090521092446.jar
new file mode 100644
index 0000000..0fa22c6
--- /dev/null
+++ b/packaged_jars/plugins/org.eclipse.datatools.sqltools.doc.user_1.7.0.20090521092446.jar
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/.gitignore b/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/.gitignore
new file mode 100644
index 0000000..60463af
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/.gitignore
@@ -0,0 +1,2 @@
+bin
+build.xml
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/.project b/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/.project
new file mode 100644
index 0000000..d2cffe0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/.project
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.apache.derby.dbdefinition</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..d74427c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.apache.derby.dbdefinition;singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
+
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/about.html b/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/build.properties b/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/build.properties
new file mode 100644
index 0000000..fb38330
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/build.properties
@@ -0,0 +1,24 @@
+###############################################################################
+# Copyright (c) 2001, 2004 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+bin.includes = plugin.xml,\
+               runtime/,\
+               plugin.properties,\
+               about.html,\
+               META-INF/
+
+jars.extra.classpath =
+src.dir	= src/
+plugin.version =	1.0.0.200706071
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/plugin.properties b/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/plugin.properties
new file mode 100644
index 0000000..1afe2fa
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/plugin.properties
@@ -0,0 +1,21 @@
+###############################################################################
+# Copyright (c) 2001, 2004 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName=Eclipse Data Tools Platform Apache Derby Database Definition
+providerName=Eclipse Data Tools Platform
+
+100ProductString = Derby
+100VersionString = 10.0
+
+101ProductString = Derby
+101VersionString = 10.1
+
+102ProductString = Derby
+102VersionString = 10.2
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/plugin.xml b/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/plugin.xml
new file mode 100644
index 0000000..0af6644
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/plugin.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.databaseDefinition">
+      <definition
+      		product="Derby"
+            version="10.0"
+            productDisplayString="%100ProductString"
+            versionDisplayString="%100VersionString"
+            file="runtime/vendors/Derby_10.0/Derby_10.0.xmi">
+      </definition>
+       <definition 
+       		product="Derby" 
+       		version="10.1" 
+       		productDisplayString="%101ProductString" 
+       		versionDisplayString="%101VersionString"
+            file="runtime/vendors/Derby_10.1/Derby_10.1.xmi"/>
+       <definition 
+       		product="Derby" 
+       		version="10.2" 
+       		productDisplayString="%102ProductString" 
+       		versionDisplayString="%102VersionString"
+            file="runtime/vendors/Derby_10.2/Derby_10.2.xmi"/>
+   </extension>
+</plugin>
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/runtime/vendors/Derby_10.0/Derby_10.0.xmi b/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/runtime/vendors/Derby_10.0/Derby_10.0.xmi
new file mode 100644
index 0000000..dc58bb1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/runtime/vendors/Derby_10.0/Derby_10.0.xmi
@@ -0,0 +1,371 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="Derby" version="10.0" maximumIdentifierLength="8" maximumCommentLength="64">
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="long">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIGINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_1" lengthSupported="true" defaultLength="1024" maximumLength="2147483647" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BLOB</name>
+    <name>BINARY LARGE OBJECT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" keyConstraintSupported="true" defaultLength="1" maximumLength="254" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR</name>
+    <name>CHARACTER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" lengthSupported="true" defaultLength="1" displayNameSupported="true" displayName="CHAR ({0}) FOR BIT DATA" maximumLength="254" primitiveType="BINARY_VARYING" jdbcEnumType="-2" javaClassName="byte[]">
+    <name>CHAR FOR BIT DATA</name>
+    <name>CHARACTER FOR BIT DATA</name>
+    <name>CHAR () FOR BIT DATA</name>
+    <name>CHARACTER () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" lengthSupported="true" defaultLength="1024" maximumLength="2147483647" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CLOB</name>
+    <name>CHARACTER LARGE OBJECT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" keyConstraintSupported="true" defaultLength="32" maximumLength="32672" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR</name>
+    <name>CHARACTER VARYING</name>
+    <name>CHAR VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_2" primitiveType="CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_2" primitiveType="BINARY_VARYING" jdbcEnumType="-4" javaClassName="byte[]">
+    <name>LONG VARCHAR FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">
+    <defaultValueTypes>CURRENT_DATE</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" scaleSupported="true" precisionSupported="true" defaultPrecision="5" maximumPrecision="31" defaultScale="0" keyConstraintSupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE</name>
+    <name>DOUBLE PRECISION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" keyConstraintSupported="true" primitiveType="FLOAT" defaultPrecision="53" maximumPrecision="53" cutoffPrecision="24" jdbcEnumType="6" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INTEGER</name>
+    <name>INT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" scaleSupported="true" precisionSupported="true" defaultPrecision="5" maximumPrecision="31" defaultScale="0" keyConstraintSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIME_1" keyConstraintSupported="true" primitiveType="TIME" jdbcEnumType="92" javaClassName="java.sql.Time">
+    <defaultValueTypes>CURRENT_TIME</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>CURRENT_TIME_STAMP</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_1" lengthSupported="true" defaultLength="1" displayNameSupported="true" displayName="VARCHAR ({0}) FOR BIT DATA" maximumLength="32700" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]">
+    <name>VARCHAR FOR BIT DATA</name>
+    <name>CHAR VARYING FOR BIT DATA</name>
+    <name>CHARACTER VARYING FOR BIT DATA</name>
+    <name>VARCHAR () FOR BIT DATA</name>
+    <name>CHAR VARYING () FOR BIT DATA</name>
+    <name>CHARACTER VARYING () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <storedProcedureDefinition maximumIdentifierLength="128" nullInputActionSupported="true" returnedNullSupported="true" parameterStyleSupported="true">
+    <languageType>SQL</languageType>
+    <languageType>JAVA</languageType>
+    <procedureType>PROCEDURE</procedureType>
+    <procedureType>FUNCTION</procedureType>
+  </storedProcedureDefinition>
+  <triggerDefinition maximumIdentifierLength="18" referencesClauseSupported="true" perColumnUpdateTriggerSupported="true" rowTriggerReferenceSupported="true" tableTriggerReferenceSupported="true" whenClauseSupported="false"/>
+  <columnDefinition maximumIdentifierLength="30" identitySupported="true" computedSupported="true"/>
+  <constraintDefinition maximumPrimaryKeyIdentifierLength="18" maximumForeignKeyIdentifierLength="18" maximumCheckConstraintIdentifierLength="18">
+    <parentUpdateDRIRuleType>RESTRICT</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>RESTRICT</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>SET_NULL</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+    <checkOption>NONE</checkOption>
+    <checkOption>LOCAL</checkOption>
+    <checkOption>CASCADE</checkOption>
+  </constraintDefinition>
+  <queryDefinition hostVariableMarker=":"/>
+  <indexDefinition clusteringSupported="false" maximumIdentifierLength="18"/>
+  <viewDefinition maximumIdentifierLength="128" checkOptionSupported="false"/>
+  <tableDefinition maximumIdentifierLength="128"/>
+  <schemaDefinition maximumIdentifierLength="30"/>
+  <SQLSyntaxDefinition>
+    <keywords>ADD</keywords>
+    <keywords>ALL</keywords>
+    <keywords>ALLOCATE</keywords>
+    <keywords>ALTER</keywords>
+    <keywords>AND</keywords>
+    <keywords>ANY</keywords>
+    <keywords>ARE</keywords>
+    <keywords>AS</keywords>
+    <keywords>ASC</keywords>
+    <keywords>ASSERTION</keywords>
+    <keywords>AT</keywords>
+    <keywords>AUTHORIZATION</keywords>
+    <keywords>AVG</keywords>
+    <keywords>BEGIN</keywords>
+    <keywords>BETWEEN</keywords>
+    <keywords>BIT</keywords>
+    <keywords>BIT_LENGTH</keywords>
+	<keywords>BOOLEAN</keywords> 
+    <keywords>BOTH</keywords>
+    <keywords>BY</keywords>
+    <keywords>CALL</keywords>
+    <keywords>CASCADE</keywords>
+    <keywords>CASCADED</keywords>
+    <keywords>CASE</keywords>
+    <keywords>CAST</keywords>
+    <keywords>CHAR</keywords>
+    <keywords>CHARACTER</keywords>
+    <keywords>CHARACTER_LENGTH</keywords>
+	<keywords>CHAR_LENGTH</keywords> 
+    <keywords>CHECK</keywords>
+    <keywords>CLOSE</keywords>
+    <keywords>COLLATE</keywords>
+    <keywords>COLLATION</keywords>
+    <keywords>COLUMN</keywords>
+    <keywords>COMMIT</keywords>
+    <keywords>CONNECT</keywords>
+    <keywords>CONNECTION</keywords>
+    <keywords>CONSTRAINT</keywords>
+    <keywords>CONSTRAINTS</keywords>
+    <keywords>CONTINUE</keywords>
+    <keywords>CONVERT</keywords>
+    <keywords>CORRESPONDING</keywords>
+    <keywords>COUNT</keywords>
+    <keywords>CREATE</keywords>
+    <keywords>CROSS</keywords>
+    <keywords>CURRENT</keywords>
+    <keywords>CURRENT_DATE</keywords>
+    <keywords>CURRENT_TIME</keywords>
+    <keywords>CURRENT_TIMESTAMP</keywords>
+    <keywords>CURRENT_USER</keywords>
+    <keywords>CURSOR</keywords>
+    <keywords>DEALLOCATE</keywords>
+    <keywords>DEC</keywords>
+    <keywords>DECIMAL</keywords>
+    <keywords>DECLARE</keywords>
+    <keywords>DEFERRABLE</keywords>
+    <keywords>DEFERRED</keywords>
+    <keywords>DELETE</keywords>
+    <keywords>DESC</keywords>
+    <keywords>DESCRIBE</keywords>
+    <keywords>DIAGNOSTICS</keywords>
+    <keywords>DISCONNECT</keywords>
+    <keywords>DISTINCT</keywords>
+    <keywords>DOUBLE</keywords>
+    <keywords>DROP</keywords>
+    <keywords>ELSE</keywords>
+    <keywords>END</keywords>
+	<keywords>ENDEXEC</keywords> 
+    <keywords>ESCAPE</keywords>
+    <keywords>EXCEPT</keywords>
+    <keywords>EXCEPTION</keywords>
+    <keywords>EXEC</keywords>
+    <keywords>EXECUTE</keywords>
+    <keywords>EXISTS</keywords>
+    <keywords>EXPLAIN</keywords>
+    <keywords>EXTERNAL</keywords>
+    <keywords>EXTRACT</keywords>
+    <keywords>FALSE</keywords>
+    <keywords>FETCH</keywords>
+    <keywords>FIRST</keywords>
+    <keywords>FLOAT</keywords>
+    <keywords>FOR</keywords>
+    <keywords>FOREIGN</keywords>
+    <keywords>FOUND</keywords>
+    <keywords>FROM</keywords>
+    <keywords>FULL</keywords>
+    <keywords>FUNCTION</keywords>
+    <keywords>GET</keywords>
+	<keywords>GET_CURRENT_CONNECTION</keywords> 
+    <keywords>GLOBAL</keywords>
+    <keywords>GO</keywords>
+    <keywords>GOTO</keywords>
+    <keywords>GRANT</keywords>
+    <keywords>GROUP</keywords>
+    <keywords>HAVING</keywords>
+    <keywords>HOUR</keywords>
+    <keywords>IDENTITY</keywords>
+    <keywords>IMMEDIATE</keywords>
+    <keywords>IN</keywords>
+    <keywords>INDICATOR</keywords>
+    <keywords>INITIALLY</keywords>
+    <keywords>INNER</keywords>
+    <keywords>INOUT</keywords>
+    <keywords>INPUT</keywords>
+    <keywords>INSENSITIVE</keywords>
+    <keywords>INSERT</keywords>
+    <keywords>INT</keywords>
+    <keywords>INTEGER</keywords>
+    <keywords>INTERSECT</keywords>
+    <keywords>INTO</keywords>
+    <keywords>IS</keywords>
+    <keywords>ISOLATION</keywords>
+    <keywords>JOIN</keywords>
+    <keywords>KEY</keywords>
+    <keywords>LAST</keywords>
+    <keywords>LEADING</keywords>
+    <keywords>LEFT</keywords>
+    <keywords>LIKE</keywords>
+    <keywords>LOCAL</keywords>
+	<keywords>LONGINT</keywords> 
+    <keywords>LOWER</keywords>
+	<keywords>LTRIM</keywords> 
+    <keywords>MATCH</keywords>
+    <keywords>MAX</keywords>
+	<keywords>MIN</keywords> 
+    <keywords>MINUTE</keywords>
+    <keywords>NATIONAL</keywords>
+    <keywords>NATURAL</keywords>
+    <keywords>NCHAR</keywords>
+	<keywords>NVARCHAR</keywords> 
+    <keywords>NEXT</keywords>
+    <keywords>NO</keywords>
+    <keywords>NOT</keywords>
+    <keywords>NULL</keywords>
+	<keywords>NULLIF</keywords> 
+    <keywords>NUMERIC</keywords>
+    <keywords>OCTET_LENGTH</keywords>
+    <keywords>OF</keywords>
+    <keywords>ON</keywords>
+    <keywords>ONLY</keywords>
+    <keywords>OPEN</keywords>
+    <keywords>OPTION</keywords>
+    <keywords>OR</keywords>
+    <keywords>ORDER</keywords>
+    <keywords>OUT</keywords>
+    <keywords>OUTER</keywords>
+    <keywords>OUTPUT</keywords>
+    <keywords>OVERLAPS</keywords>
+    <keywords>PAD</keywords>
+    <keywords>PARTIAL</keywords>
+    <keywords>PREPARE</keywords>
+    <keywords>PRESERVE</keywords>
+    <keywords>PRIMARY</keywords>
+    <keywords>PRIOR</keywords>
+    <keywords>PRIVILEGES</keywords>
+    <keywords>PROCEDURE</keywords>
+    <keywords>PUBLIC</keywords>
+    <keywords>READ</keywords>
+    <keywords>REAL</keywords>
+    <keywords>REFERENCES</keywords>
+    <keywords>RELATIVE</keywords>
+    <keywords>RESTRICT</keywords>
+    <keywords>REVOKE</keywords>
+    <keywords>RIGHT</keywords>
+    <keywords>ROLLBACK</keywords>
+    <keywords>ROWS</keywords>
+	<keywords>RTRIM</keywords> 
+	<keywords>RUNTIMESTATISTICS</keywords> 
+    <keywords>SCHEMA</keywords>
+    <keywords>SCROLL</keywords>
+    <keywords>SECOND</keywords>
+    <keywords>SELECT</keywords>
+    <keywords>SESSION_USER</keywords>
+    <keywords>SET</keywords>
+    <keywords>SMALLINT</keywords>
+    <keywords>SOME</keywords>
+    <keywords>SPACE</keywords>
+    <keywords>SQL</keywords>
+    <keywords>SQLCODE</keywords>
+    <keywords>SQLERROR</keywords>
+    <keywords>SQLSTATE</keywords>
+	<keywords>SUBSTR</keywords> 
+    <keywords>SUBSTRING</keywords>
+	<keywords>SUM</keywords> 
+    <keywords>SYSTEM_USER</keywords>
+    <keywords>TABLE</keywords>
+    <keywords>TEMPORARY</keywords>
+    <keywords>TIMEZONE_HOUR</keywords>
+    <keywords>TIMEZONE_MINUTE</keywords>
+	<keywords>TINYINT</keywords> 
+    <keywords>TO</keywords>
+    <keywords>TRAILING</keywords>
+    <keywords>TRANSACTION</keywords>
+    <keywords>TRANSLATE</keywords>
+    <keywords>TRANSLATION</keywords>
+    <keywords>TRIM</keywords>
+    <keywords>TRUE</keywords>
+    <keywords>UNION</keywords>
+    <keywords>UNIQUE</keywords>
+    <keywords>UNKNOWN</keywords>
+    <keywords>UPDATE</keywords>
+    <keywords>UPPER</keywords>
+    <keywords>USER</keywords>
+    <keywords>USING</keywords>
+    <keywords>VALUES</keywords>
+    <keywords>VARCHAR</keywords>
+    <keywords>VARYING</keywords>
+    <keywords>VIEW</keywords>
+    <keywords>WHENEVER</keywords>
+    <keywords>WHERE</keywords>
+    <keywords>WITH</keywords>
+    <keywords>WORK</keywords>
+    <keywords>WRITE</keywords>
+    <keywords>YEAR</keywords>
+    <operators>&lt;</operators>
+    <operators>&quot;</operators>
+    <operators>%</operators>
+    <operators>&amp;</operators>
+    <operators>''''</operators>
+    <operators>(</operators>
+    <operators>)</operators>
+    <operators>*</operators>
+    <operators>+</operators>
+    <operators>,</operators>
+    <operators>-</operators>
+    <operators>.</operators>
+    <operators>/</operators>
+    <operators>:</operators>
+    <operators>;</operators>
+    <operators>=</operators>
+    <operators>?</operators>
+    <operators>[</operators>
+    <operators>]</operators>
+    <operators>_</operators>
+    <operators>'|'</operators>
+    <operators>,=</operators>
+    <operators>&lt;=</operators>
+    <operators>||</operators>
+    <operators>..</operators>
+    <operators>'-,'</operators>
+    <operators>!</operators>
+    <operators>~</operators>
+    <operators>:=</operators>
+    <operators>{</operators>
+    <operators>}</operators>
+    <operators>(+)</operators>
+  </SQLSyntaxDefinition>
+</DBDefinition:DatabaseVendorDefinition>
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/runtime/vendors/Derby_10.1/Derby_10.1.xmi b/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/runtime/vendors/Derby_10.1/Derby_10.1.xmi
new file mode 100644
index 0000000..0e591d1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/runtime/vendors/Derby_10.1/Derby_10.1.xmi
@@ -0,0 +1,364 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="Derby" version="10.1" maximumIdentifierLength="128" maximumCommentLength="64">
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="long">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIGINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_1" lengthSupported="true" defaultLength="1024" maximumLength="2147483647" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BLOB</name>
+    <name>BINARY LARGE OBJECT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" keyConstraintSupported="true" defaultLength="1" maximumLength="254" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR</name>
+    <name>CHARACTER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" lengthSupported="true" defaultLength="1" displayNameSupported="true" displayName="CHAR ({0}) FOR BIT DATA" maximumLength="254" primitiveType="BINARY_VARYING" jdbcEnumType="-2" javaClassName="byte[]">
+    <name>CHAR FOR BIT DATA</name>
+    <name>CHARACTER FOR BIT DATA</name>
+    <name>CHAR () FOR BIT DATA</name>
+    <name>CHARACTER () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" lengthSupported="true" defaultLength="1024" maximumLength="2147483647" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CLOB</name>
+    <name>CHARACTER LARGE OBJECT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" keyConstraintSupported="true" defaultLength="32" maximumLength="32672" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR</name>
+    <name>CHARACTER VARYING</name>
+    <name>CHAR VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_2" primitiveType="CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_2" primitiveType="BINARY_VARYING" jdbcEnumType="-4" javaClassName="byte[]">
+    <name>LONG VARCHAR FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">
+    <defaultValueTypes>CURRENT_DATE</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" scaleSupported="true" precisionSupported="true" defaultPrecision="5" maximumPrecision="31" defaultScale="0" keyConstraintSupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE</name>
+    <name>DOUBLE PRECISION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" keyConstraintSupported="true" primitiveType="FLOAT" defaultPrecision="53" maximumPrecision="53" cutoffPrecision="24" jdbcEnumType="6" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INTEGER</name>
+    <name>INT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" scaleSupported="true" precisionSupported="true" defaultPrecision="5" maximumPrecision="31" defaultScale="0" keyConstraintSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIME_1" keyConstraintSupported="true" primitiveType="TIME" jdbcEnumType="92" javaClassName="java.sql.Time">
+    <defaultValueTypes>CURRENT_TIME</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>CURRENT_TIME_STAMP</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_1" lengthSupported="true" defaultLength="1" displayNameSupported="true" displayName="VARCHAR ({0}) FOR BIT DATA" maximumLength="32700" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]">
+    <name>VARCHAR FOR BIT DATA</name>
+    <name>CHAR VARYING FOR BIT DATA</name>
+    <name>CHARACTER VARYING FOR BIT DATA</name>
+    <name>VARCHAR () FOR BIT DATA</name>
+    <name>CHAR VARYING () FOR BIT DATA</name>
+    <name>CHARACTER VARYING () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <storedProcedureDefinition maximumIdentifierLength="128" nullInputActionSupported="true" returnedNullSupported="true" parameterStyleSupported="true">
+    <languageType>SQL</languageType>
+    <languageType>JAVA</languageType>
+    <procedureType>PROCEDURE</procedureType>
+    <procedureType>FUNCTION</procedureType>
+  </storedProcedureDefinition>
+  <triggerDefinition maximumIdentifierLength="128" referencesClauseSupported="true" perColumnUpdateTriggerSupported="true" rowTriggerReferenceSupported="true" tableTriggerReferenceSupported="true" whenClauseSupported="false"/>
+  <columnDefinition maximumIdentifierLength="128" identitySupported="true" computedSupported="true"/>
+  <constraintDefinition maximumPrimaryKeyIdentifierLength="18" maximumForeignKeyIdentifierLength="18" maximumCheckConstraintIdentifierLength="18">
+    <parentUpdateDRIRuleType>RESTRICT</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>RESTRICT</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>SET_NULL</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+    <checkOption>NONE</checkOption>
+    <checkOption>LOCAL</checkOption>
+    <checkOption>CASCADE</checkOption>
+  </constraintDefinition>
+  <queryDefinition hostVariableMarker=":"/>
+  <indexDefinition clusteringSupported="false" maximumIdentifierLength="128"/>
+  <viewDefinition maximumIdentifierLength="128" checkOptionSupported="false"/>
+  <tableDefinition maximumIdentifierLength="128"/>
+  <schemaDefinition maximumIdentifierLength="128"/>
+  <SQLSyntaxDefinition>
+    <keywords>ADD</keywords>
+	<keywords>ALL</keywords> 
+	<keywords>ALLOCATE</keywords> 
+	<keywords>ALTER</keywords> 
+	<keywords>AND</keywords> 
+	<keywords>ANY</keywords> 
+	<keywords>ARE</keywords> 
+	<keywords>AS</keywords> 
+	<keywords>ASC</keywords> 
+	<keywords>ASSERTION</keywords> 
+	<keywords>AT</keywords> 
+	<keywords>AUTHORIZATION</keywords> 
+	<keywords>AVG</keywords> 
+	<keywords>BEGIN</keywords> 
+	<keywords>BETWEEN</keywords> 
+	<keywords>BIT</keywords> 
+	<keywords>BOOLEAN</keywords> 
+	<keywords>BOTH</keywords> 
+	<keywords>BY</keywords> 
+	<keywords>CALL</keywords> 
+	<keywords>CASCADE</keywords> 
+	<keywords>CASCADED</keywords> 
+	<keywords>CASE</keywords> 
+	<keywords>CAST</keywords> 
+	<keywords>CHAR</keywords> 
+	<keywords>CHARACTER</keywords> 
+	<keywords>CHECK</keywords> 
+	<keywords>CLOSE</keywords> 
+	<keywords>COLLATE</keywords> 
+	<keywords>COLLATION</keywords> 
+	<keywords>COLUMN</keywords> 
+	<keywords>COMMIT</keywords> 
+	<keywords>CONNECT</keywords> 
+	<keywords>CONNECTION</keywords> 
+	<keywords>CONSTRAINT</keywords> 
+	<keywords>CONSTRAINTS</keywords> 
+	<keywords>CONTINUE</keywords> 
+	<keywords>CONVERT</keywords> 
+	<keywords>CORRESPONDING</keywords> 
+	<keywords>COUNT</keywords> 
+	<keywords>CREATE</keywords> 
+	<keywords>CURRENT</keywords> 
+	<keywords>CURRENT_DATE</keywords> 
+	<keywords>CURRENT_TIME</keywords> 
+	<keywords>CURRENT_TIMESTAMP</keywords> 
+	<keywords>CURRENT_USER</keywords> 
+	<keywords>CURSOR</keywords> 
+	<keywords>DEALLOCATE</keywords> 
+	<keywords>DEC</keywords> 
+	<keywords>DECIMAL</keywords> 
+	<keywords>DECLARE</keywords> 
+	<keywords>DEFERRABLE</keywords> 
+	<keywords>DEFERRED</keywords> 
+	<keywords>DELETE</keywords> 
+	<keywords>DESC</keywords> 
+	<keywords>DESCRIBE</keywords> 
+	<keywords>DIAGNOSTICS</keywords> 
+	<keywords>DISCONNECT</keywords> 
+	<keywords>DISTINCT</keywords> 
+	<keywords>DOUBLE</keywords> 
+	<keywords>DROP</keywords> 
+	<keywords>ELSE</keywords> 
+	<keywords>END</keywords> 
+	<keywords>ENDEXEC</keywords> 
+	<keywords>ESCAPE</keywords> 
+	<keywords>EXCEPT</keywords> 
+	<keywords>EXCEPTION</keywords> 
+	<keywords>EXEC</keywords> 
+	<keywords>EXECUTE</keywords> 
+	<keywords>EXISTS</keywords> 
+	<keywords>EXPLAIN</keywords> 
+	<keywords>EXTERNAL</keywords> 
+	<keywords>FALSE</keywords> 
+	<keywords>FETCH</keywords> 
+	<keywords>FIRST</keywords> 
+	<keywords>FLOAT</keywords> 
+	<keywords>FOR</keywords> 
+	<keywords>FOREIGN</keywords> 
+	<keywords>FOUND</keywords> 
+	<keywords>FROM</keywords> 
+	<keywords>FULL</keywords> 
+	<keywords>FUNCTION</keywords> 
+	<keywords>GET</keywords> 
+	<keywords>GET_CURRENT_CONNECTION</keywords> 
+	<keywords>GLOBAL</keywords> 
+	<keywords>GO</keywords> 
+	<keywords>GOTO</keywords> 
+	<keywords>GRANT</keywords> 
+	<keywords>GROUP</keywords> 
+	<keywords>HAVING</keywords> 
+	<keywords>HOUR</keywords> 
+	<keywords>IDENTITY</keywords> 
+	<keywords>IMMEDIATE</keywords> 
+	<keywords>IN</keywords> 
+	<keywords>INDICATOR</keywords> 
+	<keywords>INITIALLY</keywords> 
+	<keywords>INNER</keywords> 
+	<keywords>INOUT</keywords> 
+	<keywords>INPUT</keywords> 
+	<keywords>INSENSITIVE</keywords> 
+	<keywords>INSERT</keywords> 
+	<keywords>INT</keywords> 
+	<keywords>INTEGER</keywords> 
+	<keywords>INTERSECT</keywords> 
+	<keywords>INTO</keywords> 
+	<keywords>IS</keywords> 
+	<keywords>ISOLATION</keywords> 
+	<keywords>JOIN</keywords> 
+	<keywords>KEY</keywords> 
+	<keywords>LAST</keywords> 
+	<keywords>LEFT</keywords> 
+	<keywords>LIKE</keywords> 
+	<keywords>LONGINT</keywords> 
+	<keywords>LOWER</keywords> 
+	<keywords>LTRIM</keywords> 
+	<keywords>MATCH</keywords> 
+	<keywords>MAX</keywords> 
+	<keywords>MIN</keywords> 
+	<keywords>MINUTE</keywords> 
+	<keywords>NATIONAL</keywords> 
+	<keywords>NATURAL</keywords> 
+	<keywords>NCHAR</keywords> 
+	<keywords>NVARCHAR</keywords> 
+	<keywords>NEXT</keywords> 
+	<keywords>NO</keywords> 
+	<keywords>NOT</keywords> 
+	<keywords>NULL</keywords> 
+	<keywords>NULLIF</keywords> 
+	<keywords>NUMERIC</keywords> 
+	<keywords>OF</keywords> 
+	<keywords>ON</keywords> 
+	<keywords>ONLY</keywords> 
+	<keywords>OPEN</keywords> 
+	<keywords>OPTION</keywords> 
+	<keywords>OR</keywords> 
+	<keywords>ORDER</keywords> 
+	<keywords>OUT</keywords> 
+	<keywords>OUTER</keywords> 
+	<keywords>OUTPUT</keywords> 
+	<keywords>OVERLAPS</keywords> 
+	<keywords>PAD</keywords> 
+	<keywords>PARTIAL</keywords> 
+	<keywords>PREPARE</keywords> 
+	<keywords>PRESERVE</keywords> 
+	<keywords>PRIMARY</keywords> 
+	<keywords>PRIOR</keywords> 
+	<keywords>PRIVILEGES</keywords> 
+	<keywords>PROCEDURE</keywords> 
+	<keywords>PUBLIC</keywords> 
+	<keywords>READ</keywords> 
+	<keywords>REAL</keywords> 
+	<keywords>REFERENCES</keywords> 
+	<keywords>RELATIVE</keywords> 
+	<keywords>RESTRICT</keywords> 
+	<keywords>REVOKE</keywords> 
+	<keywords>RIGHT</keywords> 
+	<keywords>ROLLBACK</keywords> 
+	<keywords>ROWS</keywords> 
+	<keywords>RTRIM</keywords> 
+	<keywords>SCHEMA</keywords> 
+	<keywords>SCROLL</keywords> 
+	<keywords>SECOND</keywords> 
+	<keywords>SELECT</keywords> 
+	<keywords>SESSION_USER</keywords> 
+	<keywords>SET</keywords> 
+	<keywords>SMALLINT</keywords> 
+	<keywords>SOME</keywords> 
+	<keywords>SPACE</keywords> 
+	<keywords>SQL</keywords> 
+	<keywords>SQLCODE</keywords> 
+	<keywords>SQLERROR</keywords> 
+	<keywords>SQLSTATE</keywords> 
+	<keywords>SUBSTR</keywords> 
+	<keywords>SUBSTRING</keywords> 
+	<keywords>SUM</keywords> 
+	<keywords>SYSTEM_USER</keywords> 
+	<keywords>TABLE</keywords> 
+	<keywords>TEMPORARY</keywords> 
+	<keywords>TIMEZONE_HOUR</keywords> 
+	<keywords>TIMEZONE_MINUTE</keywords> 
+	<keywords>TO</keywords> 
+	<keywords>TRAILING</keywords> 
+	<keywords>TRANSACTION</keywords> 
+	<keywords>TRANSLATE</keywords> 
+	<keywords>TRANSLATION</keywords> 
+	<keywords>TRUE</keywords> 
+	<keywords>UNION</keywords> 
+	<keywords>UNIQUE</keywords> 
+	<keywords>UNKNOWN</keywords> 
+	<keywords>UPDATE</keywords>
+	<keywords>UPPER</keywords> 
+	<keywords>USER</keywords> 
+	<keywords>USING</keywords> 
+	<keywords>VALUES</keywords> 
+	<keywords>VARCHAR</keywords> 
+	<keywords>VARYING</keywords> 
+	<keywords>VIEW</keywords> 
+	<keywords>WHENEVER</keywords> 
+	<keywords>WHERE</keywords> 
+	<keywords>WITH</keywords> 
+	<keywords>WORK</keywords> 
+	<keywords>WRITE</keywords>
+	<keywords>XML</keywords> 
+	<keywords>XMLEXISTS</keywords> 
+	<keywords>XMLPARSE</keywords> 
+	<keywords>XMLSERIALIZE</keywords>  
+	<keywords>YEAR</keywords>
+    <operators>&lt;</operators>
+    <operators>&quot;</operators>
+    <operators>%</operators>
+    <operators>&amp;</operators>
+    <operators>''''</operators>
+    <operators>(</operators>
+    <operators>)</operators>
+    <operators>*</operators>
+    <operators>+</operators>
+    <operators>,</operators>
+    <operators>-</operators>
+    <operators>.</operators>
+    <operators>/</operators>
+    <operators>:</operators>
+    <operators>;</operators>
+    <operators>=</operators>
+    <operators>?</operators>
+    <operators>[</operators>
+    <operators>]</operators>
+    <operators>_</operators>
+    <operators>'|'</operators>
+    <operators>,=</operators>
+    <operators>&lt;=</operators>
+    <operators>||</operators>
+    <operators>..</operators>
+    <operators>'-,'</operators>
+    <operators>!</operators>
+    <operators>~</operators>
+    <operators>:=</operators>
+    <operators>{</operators>
+    <operators>}</operators>
+    <operators>(+)</operators>
+  </SQLSyntaxDefinition>
+</DBDefinition:DatabaseVendorDefinition>
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/runtime/vendors/Derby_10.2/Derby_10.2.xmi b/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/runtime/vendors/Derby_10.2/Derby_10.2.xmi
new file mode 100644
index 0000000..c475a71
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition/runtime/vendors/Derby_10.2/Derby_10.2.xmi
@@ -0,0 +1,364 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="Derby" version="10.2" maximumIdentifierLength="128" maximumCommentLength="64">
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="long">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIGINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_1" lengthSupported="true" defaultLength="2147483647" maximumLength="2147483647" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BLOB</name>
+    <name>BINARY LARGE OBJECT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" keyConstraintSupported="true" defaultLength="1" maximumLength="254" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR</name>
+    <name>CHARACTER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" lengthSupported="true" defaultLength="1" displayNameSupported="true" displayName="CHAR ({0}) FOR BIT DATA" maximumLength="254" primitiveType="BINARY_VARYING" jdbcEnumType="-2" javaClassName="byte[]">
+    <name>CHAR FOR BIT DATA</name>
+    <name>CHARACTER FOR BIT DATA</name>
+    <name>CHAR () FOR BIT DATA</name>
+    <name>CHARACTER () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" lengthSupported="true" defaultLength="2147483647" maximumLength="2147483647" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CLOB</name>
+    <name>CHARACTER LARGE OBJECT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" keyConstraintSupported="true" defaultLength="32" maximumLength="32672" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR</name>
+    <name>CHARACTER VARYING</name>
+    <name>CHAR VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_2" primitiveType="CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_2" primitiveType="BINARY_VARYING" jdbcEnumType="-4" javaClassName="byte[]">
+    <name>LONG VARCHAR FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">
+    <defaultValueTypes>CURRENT_DATE</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" scaleSupported="true" precisionSupported="true" defaultPrecision="5" maximumPrecision="31" defaultScale="0" keyConstraintSupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE</name>
+    <name>DOUBLE PRECISION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" keyConstraintSupported="true" primitiveType="FLOAT" defaultPrecision="53" maximumPrecision="53" cutoffPrecision="24" jdbcEnumType="6" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INTEGER</name>
+    <name>INT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" scaleSupported="true" precisionSupported="true" defaultPrecision="5" maximumPrecision="31" defaultScale="0" keyConstraintSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIME_1" keyConstraintSupported="true" primitiveType="TIME" jdbcEnumType="92" javaClassName="java.sql.Time">
+    <defaultValueTypes>CURRENT_TIME</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>CURRENT_TIME_STAMP</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_1" lengthSupported="true" defaultLength="1" displayNameSupported="true" displayName="VARCHAR ({0}) FOR BIT DATA" maximumLength="32672" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]">
+    <name>VARCHAR FOR BIT DATA</name>
+    <name>CHAR VARYING FOR BIT DATA</name>
+    <name>CHARACTER VARYING FOR BIT DATA</name>
+    <name>VARCHAR () FOR BIT DATA</name>
+    <name>CHAR VARYING () FOR BIT DATA</name>
+    <name>CHARACTER VARYING () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <storedProcedureDefinition maximumIdentifierLength="128" nullInputActionSupported="true" returnedNullSupported="true" parameterStyleSupported="true">
+    <languageType>SQL</languageType>
+    <languageType>JAVA</languageType>
+    <procedureType>PROCEDURE</procedureType>
+    <procedureType>FUNCTION</procedureType>
+  </storedProcedureDefinition>
+  <triggerDefinition maximumIdentifierLength="128" referencesClauseSupported="true" perColumnUpdateTriggerSupported="true" rowTriggerReferenceSupported="true" tableTriggerReferenceSupported="true" whenClauseSupported="false"/>
+  <columnDefinition maximumIdentifierLength="128" identitySupported="true" computedSupported="true"/>
+  <constraintDefinition maximumPrimaryKeyIdentifierLength="18" maximumForeignKeyIdentifierLength="18" maximumCheckConstraintIdentifierLength="18">
+    <parentUpdateDRIRuleType>RESTRICT</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>RESTRICT</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>SET_NULL</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+    <checkOption>NONE</checkOption>
+    <checkOption>LOCAL</checkOption>
+    <checkOption>CASCADE</checkOption>
+  </constraintDefinition>
+  <queryDefinition hostVariableMarker=":"/>
+  <indexDefinition clusteringSupported="false" maximumIdentifierLength="128"/>
+  <viewDefinition maximumIdentifierLength="128" checkOptionSupported="false"/>
+  <tableDefinition maximumIdentifierLength="128"/>
+  <schemaDefinition maximumIdentifierLength="128"/>
+  <SQLSyntaxDefinition>
+    <keywords>ADD</keywords>
+	<keywords>ALL</keywords> 
+	<keywords>ALLOCATE</keywords> 
+	<keywords>ALTER</keywords> 
+	<keywords>AND</keywords> 
+	<keywords>ANY</keywords> 
+	<keywords>ARE</keywords> 
+	<keywords>AS</keywords> 
+	<keywords>ASC</keywords> 
+	<keywords>ASSERTION</keywords> 
+	<keywords>AT</keywords> 
+	<keywords>AUTHORIZATION</keywords> 
+	<keywords>AVG</keywords> 
+	<keywords>BEGIN</keywords> 
+	<keywords>BETWEEN</keywords> 
+	<keywords>BIT</keywords> 
+	<keywords>BOOLEAN</keywords> 
+	<keywords>BOTH</keywords> 
+	<keywords>BY</keywords> 
+	<keywords>CALL</keywords> 
+	<keywords>CASCADE</keywords> 
+	<keywords>CASCADED</keywords> 
+	<keywords>CASE</keywords> 
+	<keywords>CAST</keywords> 
+	<keywords>CHAR</keywords> 
+	<keywords>CHARACTER</keywords> 
+	<keywords>CHECK</keywords> 
+	<keywords>CLOSE</keywords> 
+	<keywords>COLLATE</keywords> 
+	<keywords>COLLATION</keywords> 
+	<keywords>COLUMN</keywords> 
+	<keywords>COMMIT</keywords> 
+	<keywords>CONNECT</keywords> 
+	<keywords>CONNECTION</keywords> 
+	<keywords>CONSTRAINT</keywords> 
+	<keywords>CONSTRAINTS</keywords> 
+	<keywords>CONTINUE</keywords> 
+	<keywords>CONVERT</keywords> 
+	<keywords>CORRESPONDING</keywords> 
+	<keywords>COUNT</keywords> 
+	<keywords>CREATE</keywords> 
+	<keywords>CURRENT</keywords> 
+	<keywords>CURRENT_DATE</keywords> 
+	<keywords>CURRENT_TIME</keywords> 
+	<keywords>CURRENT_TIMESTAMP</keywords> 
+	<keywords>CURRENT_USER</keywords> 
+	<keywords>CURSOR</keywords> 
+	<keywords>DEALLOCATE</keywords> 
+	<keywords>DEC</keywords> 
+	<keywords>DECIMAL</keywords> 
+	<keywords>DECLARE</keywords> 
+	<keywords>DEFERRABLE</keywords> 
+	<keywords>DEFERRED</keywords> 
+	<keywords>DELETE</keywords> 
+	<keywords>DESC</keywords> 
+	<keywords>DESCRIBE</keywords> 
+	<keywords>DIAGNOSTICS</keywords> 
+	<keywords>DISCONNECT</keywords> 
+	<keywords>DISTINCT</keywords> 
+	<keywords>DOUBLE</keywords> 
+	<keywords>DROP</keywords> 
+	<keywords>ELSE</keywords> 
+	<keywords>END</keywords> 
+	<keywords>ENDEXEC</keywords> 
+	<keywords>ESCAPE</keywords> 
+	<keywords>EXCEPT</keywords> 
+	<keywords>EXCEPTION</keywords> 
+	<keywords>EXEC</keywords> 
+	<keywords>EXECUTE</keywords> 
+	<keywords>EXISTS</keywords> 
+	<keywords>EXPLAIN</keywords> 
+	<keywords>EXTERNAL</keywords> 
+	<keywords>FALSE</keywords> 
+	<keywords>FETCH</keywords> 
+	<keywords>FIRST</keywords> 
+	<keywords>FLOAT</keywords> 
+	<keywords>FOR</keywords> 
+	<keywords>FOREIGN</keywords> 
+	<keywords>FOUND</keywords> 
+	<keywords>FROM</keywords> 
+	<keywords>FULL</keywords> 
+	<keywords>FUNCTION</keywords> 
+	<keywords>GET</keywords> 
+	<keywords>GET_CURRENT_CONNECTION</keywords> 
+	<keywords>GLOBAL</keywords> 
+	<keywords>GO</keywords> 
+	<keywords>GOTO</keywords> 
+	<keywords>GRANT</keywords> 
+	<keywords>GROUP</keywords> 
+	<keywords>HAVING</keywords> 
+	<keywords>HOUR</keywords> 
+	<keywords>IDENTITY</keywords> 
+	<keywords>IMMEDIATE</keywords> 
+	<keywords>IN</keywords> 
+	<keywords>INDICATOR</keywords> 
+	<keywords>INITIALLY</keywords> 
+	<keywords>INNER</keywords> 
+	<keywords>INOUT</keywords> 
+	<keywords>INPUT</keywords> 
+	<keywords>INSENSITIVE</keywords> 
+	<keywords>INSERT</keywords> 
+	<keywords>INT</keywords> 
+	<keywords>INTEGER</keywords> 
+	<keywords>INTERSECT</keywords> 
+	<keywords>INTO</keywords> 
+	<keywords>IS</keywords> 
+	<keywords>ISOLATION</keywords> 
+	<keywords>JOIN</keywords> 
+	<keywords>KEY</keywords> 
+	<keywords>LAST</keywords> 
+	<keywords>LEFT</keywords> 
+	<keywords>LIKE</keywords> 
+	<keywords>LONGINT</keywords> 
+	<keywords>LOWER</keywords> 
+	<keywords>LTRIM</keywords> 
+	<keywords>MATCH</keywords> 
+	<keywords>MAX</keywords> 
+	<keywords>MIN</keywords> 
+	<keywords>MINUTE</keywords> 
+	<keywords>NATIONAL</keywords> 
+	<keywords>NATURAL</keywords> 
+	<keywords>NCHAR</keywords> 
+	<keywords>NVARCHAR</keywords> 
+	<keywords>NEXT</keywords> 
+	<keywords>NO</keywords> 
+	<keywords>NOT</keywords> 
+	<keywords>NULL</keywords> 
+	<keywords>NULLIF</keywords> 
+	<keywords>NUMERIC</keywords> 
+	<keywords>OF</keywords> 
+	<keywords>ON</keywords> 
+	<keywords>ONLY</keywords> 
+	<keywords>OPEN</keywords> 
+	<keywords>OPTION</keywords> 
+	<keywords>OR</keywords> 
+	<keywords>ORDER</keywords> 
+	<keywords>OUT</keywords> 
+	<keywords>OUTER</keywords> 
+	<keywords>OUTPUT</keywords> 
+	<keywords>OVERLAPS</keywords> 
+	<keywords>PAD</keywords> 
+	<keywords>PARTIAL</keywords> 
+	<keywords>PREPARE</keywords> 
+	<keywords>PRESERVE</keywords> 
+	<keywords>PRIMARY</keywords> 
+	<keywords>PRIOR</keywords> 
+	<keywords>PRIVILEGES</keywords> 
+	<keywords>PROCEDURE</keywords> 
+	<keywords>PUBLIC</keywords> 
+	<keywords>READ</keywords> 
+	<keywords>REAL</keywords> 
+	<keywords>REFERENCES</keywords> 
+	<keywords>RELATIVE</keywords> 
+	<keywords>RESTRICT</keywords> 
+	<keywords>REVOKE</keywords> 
+	<keywords>RIGHT</keywords> 
+	<keywords>ROLLBACK</keywords> 
+	<keywords>ROWS</keywords> 
+	<keywords>RTRIM</keywords> 
+	<keywords>SCHEMA</keywords> 
+	<keywords>SCROLL</keywords> 
+	<keywords>SECOND</keywords> 
+	<keywords>SELECT</keywords> 
+	<keywords>SESSION_USER</keywords> 
+	<keywords>SET</keywords> 
+	<keywords>SMALLINT</keywords> 
+	<keywords>SOME</keywords> 
+	<keywords>SPACE</keywords> 
+	<keywords>SQL</keywords> 
+	<keywords>SQLCODE</keywords> 
+	<keywords>SQLERROR</keywords> 
+	<keywords>SQLSTATE</keywords> 
+	<keywords>SUBSTR</keywords> 
+	<keywords>SUBSTRING</keywords> 
+	<keywords>SUM</keywords> 
+	<keywords>SYSTEM_USER</keywords> 
+	<keywords>TABLE</keywords> 
+	<keywords>TEMPORARY</keywords> 
+	<keywords>TIMEZONE_HOUR</keywords> 
+	<keywords>TIMEZONE_MINUTE</keywords> 
+	<keywords>TO</keywords> 
+	<keywords>TRAILING</keywords> 
+	<keywords>TRANSACTION</keywords> 
+	<keywords>TRANSLATE</keywords> 
+	<keywords>TRANSLATION</keywords> 
+	<keywords>TRUE</keywords> 
+	<keywords>UNION</keywords> 
+	<keywords>UNIQUE</keywords> 
+	<keywords>UNKNOWN</keywords> 
+	<keywords>UPDATE</keywords>
+	<keywords>UPPER</keywords> 
+	<keywords>USER</keywords> 
+	<keywords>USING</keywords> 
+	<keywords>VALUES</keywords> 
+	<keywords>VARCHAR</keywords> 
+	<keywords>VARYING</keywords> 
+	<keywords>VIEW</keywords> 
+	<keywords>WHENEVER</keywords> 
+	<keywords>WHERE</keywords> 
+	<keywords>WITH</keywords> 
+	<keywords>WORK</keywords> 
+	<keywords>WRITE</keywords>
+	<keywords>XML</keywords> 
+	<keywords>XMLEXISTS</keywords> 
+	<keywords>XMLPARSE</keywords> 
+	<keywords>XMLSERIALIZE</keywords>  
+	<keywords>YEAR</keywords>
+    <operators>&lt;</operators>
+    <operators>&quot;</operators>
+    <operators>%</operators>
+    <operators>&amp;</operators>
+    <operators>''''</operators>
+    <operators>(</operators>
+    <operators>)</operators>
+    <operators>*</operators>
+    <operators>+</operators>
+    <operators>,</operators>
+    <operators>-</operators>
+    <operators>.</operators>
+    <operators>/</operators>
+    <operators>:</operators>
+    <operators>;</operators>
+    <operators>=</operators>
+    <operators>?</operators>
+    <operators>[</operators>
+    <operators>]</operators>
+    <operators>_</operators>
+    <operators>'|'</operators>
+    <operators>,=</operators>
+    <operators>&lt;=</operators>
+    <operators>||</operators>
+    <operators>..</operators>
+    <operators>'-,'</operators>
+    <operators>!</operators>
+    <operators>~</operators>
+    <operators>:=</operators>
+    <operators>{</operators>
+    <operators>}</operators>
+    <operators>(+)</operators>
+  </SQLSyntaxDefinition>
+</DBDefinition:DatabaseVendorDefinition>
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/.classpath b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/.gitignore b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/.project b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/.project
new file mode 100644
index 0000000..95b866d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.apache.derby.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..73f4382
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Fri Apr 13 14:14:14 PDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.4
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..1892b93
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,25 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.apache.derby.ui;singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-Activator: org.eclipse.datatools.connectivity.apache.derby.internal.ui.DerbyUIPlugin
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.emf.common,
+ org.eclipse.ui.navigator,
+ org.eclipse.datatools.connectivity.sqm.core.ui,
+ org.eclipse.datatools.connectivity.sqm.core,
+ org.eclipse.datatools.connectivity.sqm.server.ui,
+ org.eclipse.emf.ecore,
+ org.eclipse.datatools.modelbase.sql,
+ org.eclipse.datatools.modelbase.derby,
+ org.eclipse.datatools.connectivity.apache.derby,
+ org.eclipse.datatools.connectivity,
+ org.eclipse.datatools.connectivity.ui
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
+Bundle-Vendor: %providerName
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Export-Package: org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.drivers;x-internal:=true
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/about.html b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/about.html
new file mode 100644
index 0000000..129db9d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/build.properties b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/build.properties
new file mode 100644
index 0000000..3f59e9e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/build.properties
@@ -0,0 +1,15 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               about.html,\
+               plugin.xml,\
+               icons/,\
+               plugin.properties
+src.dir			 = src/
+plugin.version =	1.0.0.200706071
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/icons/alias.gif b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/icons/alias.gif
new file mode 100644
index 0000000..5a12ea6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/icons/alias.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/icons/new_db_element.gif b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/icons/new_db_element.gif
new file mode 100644
index 0000000..1d459ce
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/icons/new_db_element.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/plugin.properties b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/plugin.properties
new file mode 100644
index 0000000..7de6d70
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/plugin.properties
@@ -0,0 +1,17 @@
+###############################################################################
+# Copyright (c) 2006, 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName=Eclipse Data Tools Platform Apache Derby UI Plug-in
+providerName=Eclipse Data Tools Platform
+
+DERBY_EMBEDDED_CONNECTION_PROFILE_WIZARD_NAME=Derby
+DERBY_EMBEDDED_CONNECTION_PROFILE_WIZARD_DESCRIPTION = Create a Derby connection profile.
+DERBY_EMBEDDED_DB_PROPERTY_PAGE_NAME=JDBC Connection Properties
+
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/plugin.xml b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/plugin.xml
new file mode 100644
index 0000000..cbac333
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/plugin.xml
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+
+    
+<!-- Content provider for Derby in Database Explorer -->
+   <extension point="org.eclipse.ui.navigator.viewer">
+      <viewerContentBinding viewerId="org.eclipse.datatools.connectivity.DataSourceExplorerNavigator">
+         <includes>
+            <contentExtension
+                  pattern="org.eclipse.datatools.connectivity.apache.derby.ui.ServerExplorerContent"/>
+         </includes>
+      </viewerContentBinding>
+   </extension>
+   <extension point="org.eclipse.ui.navigator.navigatorContent">
+      <navigatorContent
+            name="Database_Explorer_Derby_Content_Extension"
+            priority="high"
+            icon="platform:/plugin/org.eclipse.datatools.connectivity.sqm.core.ui/icons/server_explorer.gif"
+            activeByDefault="true"
+            contentProvider="org.eclipse.datatools.connectivity.apache.derby.internal.ui.explorer.providers.ServerExplorerContentProvider"
+            labelProvider="org.eclipse.datatools.connectivity.apache.derby.internal.ui.explorer.providers.label.ServerExplorerlabelProvider"			
+            id="org.eclipse.datatools.connectivity.apache.derby.ui.ServerExplorerContent">
+		    <triggerPoints>
+		         <or>
+		            <instanceof 
+		                  value="org.eclipse.datatools.modelbase.derby.DerbySchema" />
+		         </or>
+		    </triggerPoints>
+	        <possibleChildren>
+	           <or>         
+	            	<instanceof
+	                  	value="org.eclipse.datatools.connectivity.apache.derby.ui.explorer.providers.virtual.ISynonymFolder" /> 
+		            <instanceof
+		                  value="org.eclipse.datatools.modelbase.derby.Synonym" /> 
+	           </or>
+	        </possibleChildren>
+      </navigatorContent>
+   </extension>
+
+   <!-- Label Service -->	
+   <extension point = "org.eclipse.datatools.connectivity.sqm.core.ui.labelService">
+		<contributor
+			type = "org.eclipse.datatools.modelbase.derby.Synonym"
+			iconLocation = "icons/alias.gif"
+			displayType = "%Synonym">
+		</contributor>
+	</extension>
+	
+   <extension
+         point="org.eclipse.datatools.connectivity.ui.driverPropertyEditor">
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.connectivity.db.derby101.genericDriverTemplate"
+            id="org.eclipse.datatools.connectivity.derby101.ui.propertyEditor.password">
+      </propertyEditor>
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.connectivity.db.derby.genericDriverTemplate"
+            id="org.eclipse.datatools.connectivity.derby.ui.propertyEditor.password">
+      </propertyEditor>
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.connectivity.db.derby102.genericDriverTemplate"
+            id="org.eclipse.datatools.connectivity.derby102.ui.propertyEditor.password">
+      </propertyEditor>
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.connectivity.db.derby.db2UniversalDriver"
+            id="org.eclipse.datatools.connectivity.derby.db2UniversalDriver.ui.propertyEditor.password">
+      </propertyEditor>
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.connectivity.db.derby101.db2UniversalDriver"
+            id="org.eclipse.datatools.connectivity.derby101.db2UniversalDriver.ui.propertyEditor.password">
+      </propertyEditor>
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.connectivity.db.derby101.clientDriver"
+            id="org.eclipse.datatools.connectivity.derby101.clientDriver.ui.propertyEditor.password">
+      </propertyEditor>
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.connectivity.db.derby102.clientDriver"
+            id="org.eclipse.datatools.connectivity.derby102.clientDriver.ui.propertyEditor.password">
+      </propertyEditor>
+   </extension>
+	
+	<extension
+         point="org.eclipse.datatools.connectivity.connectionProfile">
+      <newWizard
+            class="org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.NewDerbyEmbeddedConnectionProfileWizard"
+            icon="icons/new_db_element.gif"
+            id="org.eclipse.datatools.connectivity.db.derby.embedded.NewConnectionProfileWizard"
+            name="%DERBY_EMBEDDED_CONNECTION_PROFILE_WIZARD_NAME"
+            description = "%DERBY_EMBEDDED_CONNECTION_PROFILE_WIZARD_DESCRIPTION"
+            profile="org.eclipse.datatools.connectivity.db.derby.embedded.connectionProfile"/>
+   </extension>
+   <extension
+         point="org.eclipse.ui.propertyPages">
+      <page
+            class="org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.DerbyEmbeddedDBPropertyPage"
+            id="org.eclipse.datatools.connectivity.db.derby.profileProperties"
+            name="%DERBY_EMBEDDED_DB_PROPERTY_PAGE_NAME">
+         <filter
+               name="org.eclipse.datatools.profile.property.id"
+               value="org.eclipse.datatools.connectivity.db.derby.embedded.connectionProfile"/>
+         <enabledWhen>
+            <instanceof
+                  value="org.eclipse.datatools.connectivity.IConnectionProfile">
+            </instanceof>
+         </enabledWhen>
+      </page>
+   </extension>
+	   
+   <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.drivers.DerbyOtherDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.connectivity.db.derby.otherDriver"
+            id="org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.drivers.10_0.DerbyOtherDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+   <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.drivers.DerbyOtherDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.connectivity.db.derby101.otherDriver"
+            id="org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.drivers.10_1.DerbyOtherDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+   <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.drivers.DerbyOtherDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.connectivity.db.derby102.otherDriver"
+            id="org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.drivers.10_2.DerbyOtherDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+   <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.drivers.DerbyEmbeddedDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.connectivity.db.derby.genericDriverTemplate"
+            id="org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.drivers.10_0.DerbyEmbeddedDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+   <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.drivers.DerbyEmbeddedDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.connectivity.db.derby101.genericDriverTemplate"
+            id="org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.drivers.10_1.DerbyEmbeddedDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+   <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.drivers.DerbyEmbeddedDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.connectivity.db.derby102.genericDriverTemplate"
+            id="org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.drivers.10_2.DerbyEmbeddedDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+   <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.drivers.DerbyDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.connectivity.db.derby.db2UniversalDriver"
+            id="org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.drivers.10_0.DerbyDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+   <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.drivers.DerbyDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.connectivity.db.derby101.db2UniversalDriver"
+            id="org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.drivers.10_1.DerbyDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+      <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.drivers.DerbyClientDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.connectivity.db.derby101.clientDriver"
+            id="org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.drivers.10_1.DerbyClientDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+   <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.drivers.DerbyClientDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.connectivity.db.derby102.clientDriver"
+            id="org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.drivers.10_2.DerbyClientDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+</plugin>
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/DerbyUIPlugin.java b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/DerbyUIPlugin.java
new file mode 100644
index 0000000..275e339
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/DerbyUIPlugin.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.derby.internal.ui;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+/**
+ * The main plugin class to be used in the desktop.
+ */
+public class DerbyUIPlugin extends AbstractUIPlugin
+{
+	//The shared instance.
+	private static DerbyUIPlugin plugin;
+
+	/**
+	 * The constructor.
+	 */
+	public DerbyUIPlugin()
+	{
+		super();
+		plugin = this;
+	}
+
+	/**
+	 * Returns the shared instance.
+	 */
+	public static DerbyUIPlugin getDefault()
+	{
+		return plugin;
+	}	
+	
+	/**
+	 * Returns an image descriptor for the image file at the given
+	 * plug-in relative path.
+	 *
+	 * @param path the path
+	 * @return the image descriptor
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return AbstractUIPlugin.imageDescriptorFromPlugin("org.eclipse.datatools.connectivity.apache.derby.ui", path); //$NON-NLS-1$
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/DerbyEmbeddedDBProfileDetailsWizardPage.java b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/DerbyEmbeddedDBProfileDetailsWizardPage.java
new file mode 100644
index 0000000..48be1ae
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/DerbyEmbeddedDBProfileDetailsWizardPage.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2006, 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ *     IBM Corporation - migrated to new wizard framework
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection;
+
+import org.eclipse.datatools.connectivity.apache.derby.internal.ui.DerbyUIPlugin;
+import org.eclipse.datatools.connectivity.apache.internal.derby.connection.IDerbyConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.ui.wizards.ExtensibleProfileDetailsWizardPage;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.help.IContextProvider;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * This class gathers the properties for the derby embedded DB connection
+ * profile.
+ * 
+ * @author brianf
+ */
+public class DerbyEmbeddedDBProfileDetailsWizardPage extends
+		ExtensibleProfileDetailsWizardPage implements IContextProvider {
+
+	public DerbyEmbeddedDBProfileDetailsWizardPage(String pageName) {
+		super(pageName, IDerbyConnectionProfileConstants.DERBY_CATEGORY_ID);
+	}
+
+	private ContextProviderDelegate contextProviderDelegate = new ContextProviderDelegate(
+			DerbyUIPlugin.getDefault().getBundle().getSymbolicName());
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+
+	public void createControl(Composite parent) {
+		super.createControl(parent);
+		getShell().setData(HelpUtil.CONTEXT_PROVIDER_KEY, this);
+		HelpUtil.setHelp(getControl(), HelpUtil.getContextId(
+				IHelpContextsDerbyProfile.DERBY_PROFILE_WIZARD_PAGE,
+				DerbyUIPlugin.getDefault().getBundle().getSymbolicName()));
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/DerbyEmbeddedDBPropertyPage.java b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/DerbyEmbeddedDBPropertyPage.java
new file mode 100644
index 0000000..8eb59b3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/DerbyEmbeddedDBPropertyPage.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ * 				 brianf - customized for Derby url requirements
+ *      IBM Corporation - migrated to new wizard framework
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection;
+
+import org.eclipse.datatools.connectivity.apache.derby.internal.ui.DerbyUIPlugin;
+import org.eclipse.datatools.connectivity.apache.internal.derby.connection.IDerbyConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.IHelpConstants;
+import org.eclipse.datatools.connectivity.ui.wizards.ExtensibleProfileDetailsPropertyPage;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.help.IContextProvider;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+/**
+ * Property page for Derby Embedded profiles
+ * 
+ */
+public class DerbyEmbeddedDBPropertyPage extends
+		ExtensibleProfileDetailsPropertyPage implements IContextProvider {
+
+	/**
+	 * Constructor
+	 */
+	public DerbyEmbeddedDBPropertyPage() {
+		super(IDerbyConnectionProfileConstants.DERBY_CATEGORY_ID);
+	}
+
+	private ContextProviderDelegate contextProviderDelegate = new ContextProviderDelegate(
+			DerbyUIPlugin.getDefault().getBundle().getSymbolicName());
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+
+	protected Control createContents(Composite parent) {
+		Control contents = super.createContents(parent);
+		getShell().setData(HelpUtil.CONTEXT_PROVIDER_KEY, this);
+		HelpUtil.setHelp(getControl(), HelpUtil
+				.getContextId(IHelpConstants.GENERIC_DB_PROFILE_PROPERTY_PAGE,
+						ConnectivityUIPlugin.getDefault().getBundle()
+								.getSymbolicName()));
+		return contents;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/IHelpContextsDerbyProfile.java b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/IHelpContextsDerbyProfile.java
new file mode 100644
index 0000000..2bdab4e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/IHelpContextsDerbyProfile.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection;
+
+public interface IHelpContextsDerbyProfile {
+
+	/**
+	 * TPS_helpKey_constants_for_plug-in: org.eclipse.datatools.connectivity.db.derby
+	 */
+
+	/*
+	 * DERBY_PROFILE_WIZARD_PAGE = the wizard page that collects Derby Embedded profile
+	 * details such as the path to the database, user id, password, etc.
+	 */
+	public static final String DERBY_PROFILE_WIZARD_PAGE = "DERBY_PROFILE_WIZARD_PAGE";
+
+	/*
+	 * DERBY_PROFILE_PROPERTY_PAGE = the property page that collects and allows editing of
+	 * Derby Embedded profile details such as the path to the database, user id, password, etc.
+	 */
+	public static final String DERBY_PROFILE_PROPERTY_PAGE = "DERBY_PROFILE_PROPERTY_PAGE";
+	
+	/*
+	 * DERBY_PROFILE_WIZARD = the actual New Derby Embedded Profile wizard
+	 */
+	public static final String DERBY_PROFILE_WIZARD = "DERBY_PROFILE_WIZARD";
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/Messages.java b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/Messages.java
new file mode 100644
index 0000000..cd1f648
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/Messages.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+public class Messages {
+	private static final String BUNDLE_NAME = "org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.messages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private Messages() {
+	}
+
+	public static String getString(String key) {
+		// TODO Auto-generated method stub
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/NewDerbyEmbeddedConnectionProfileWizard.java b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/NewDerbyEmbeddedConnectionProfileWizard.java
new file mode 100644
index 0000000..2840cf0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/NewDerbyEmbeddedConnectionProfileWizard.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005, 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ *     IBM Corporation - migrated to new wizard framework
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection;
+
+import org.eclipse.datatools.connectivity.apache.derby.internal.ui.DerbyUIPlugin;
+import org.eclipse.datatools.connectivity.ui.wizards.ExtensibleNewConnectionProfileWizard;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * @see Wizard
+ */
+public class NewDerbyEmbeddedConnectionProfileWizard extends
+ExtensibleNewConnectionProfileWizard {
+
+	public NewDerbyEmbeddedConnectionProfileWizard() {
+		super(new DerbyEmbeddedDBProfileDetailsWizardPage("detailsPage")); //$NON-NLS-1$
+		setWindowTitle(Messages.getString("NewDerbyEmbeddedConnectionProfileWizard.DerbyEmbeddedDatabaseWizardTitle")); //$NON-NLS-1$
+	}
+
+	private ContextProviderDelegate contextProviderDelegate =
+		new ContextProviderDelegate(DerbyUIPlugin.getDefault().getBundle().getSymbolicName());
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+
+	public void createPageControls(Composite pageContainer) {
+		super.createPageControls(pageContainer);
+		getShell().setData(HelpUtil.CONTEXT_PROVIDER_KEY, this);
+		HelpUtil.setHelp(getShell(), HelpUtil.getContextId(
+				IHelpContextsDerbyProfile.DERBY_PROFILE_WIZARD,
+				DerbyUIPlugin.getDefault().getBundle().getSymbolicName()));
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/drivers/DerbyClientDriverUIContributor.java b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/drivers/DerbyClientDriverUIContributor.java
new file mode 100644
index 0000000..6cb5e74
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/drivers/DerbyClientDriverUIContributor.java
@@ -0,0 +1,580 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ *               Actuate Corporation - added optional properties tab
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.drivers;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributor;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributorInformation;
+import org.eclipse.datatools.connectivity.ui.wizards.OptionalPropertiesPane;
+import org.eclipse.jface.dialogs.DialogPage;
+import org.eclipse.osgi.util.TextProcessor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.swt.widgets.Text;
+
+public class DerbyClientDriverUIContributor implements IDriverUIContributor,
+		Listener {
+
+	protected String CUI_NEWCW_DATABASE_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_DATABASE_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_HOST_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_HOST_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_PORT_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_PORT_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_CONNECTIONURL_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_CONNECTIONURL_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_USERNAME_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_USERNAME_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_PASSWORD_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_PASSWORD_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_CREATEDB_BTN_UI_ = Messages
+			.getString("DerbyEmbeddedDriverUIContributor.2"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_UPGRADEDB_BTN_UI_ = Messages
+			.getString("DerbyEmbeddedDriverUIContributor.3"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_SAVE_PASSWORD_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_SAVE_PASSWORD_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_URL_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_URL_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_CREATE_DATABASE_SUMMARY_DATA_TEXT_ = TextProcessor.process(Messages
+			.getString("CUI_NEWCW_CREATE_DATABASE_SUMMARY_DATA_TEXT_")); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_UPGRADE_DATABASE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_UPGRADE_DATABASE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CREATE_EQUALS_TRUE_TEXT = "create=true"; //$NON-NLS-1$
+
+	private static final String UPGRADE_EQUALS_TRUE_TEXT = "upgrade=true"; //$NON-NLS-1$
+
+	private Label databaseLabel;
+
+	private Text databaseText;
+
+	private Label hostLabel;
+
+	private Text hostText;
+
+	private Label portLabel;
+
+	private Text portText;
+
+	private Label usernameLabel;
+
+	private Text usernameText;
+
+	private Label passwordLabel;
+
+	private Text passwordText;
+
+	private Button createCheck;
+
+	private Button upgradeCheck;
+
+	private Button savePasswordButton;
+
+	private Label urlLabel;
+
+	private Text urlText;
+
+	private DialogPage parentPage;
+
+	private ScrolledComposite parentComposite;
+
+	private OptionalPropertiesPane optionalPropsComposite;
+
+    private IDriverUIContributorInformation contributorInformation;
+
+	private Properties properties;
+	
+	private boolean isReadOnly = false;
+
+	public Composite getContributedDriverUI(Composite parent, boolean isReadOnly) {
+
+		if ((parentComposite == null) || parentComposite.isDisposed() || (this.isReadOnly != isReadOnly)) {
+			GridData gd;
+
+			this.isReadOnly = isReadOnly;
+			int additionalStyles = SWT.NONE;
+			if (isReadOnly){
+				additionalStyles = SWT.READ_ONLY;
+			}
+			
+			parentComposite = new ScrolledComposite(parent, SWT.H_SCROLL
+					| SWT.V_SCROLL);
+			parentComposite.setExpandHorizontal(true);
+			parentComposite.setExpandVertical(true);
+			parentComposite.setLayout(new GridLayout());
+
+            TabFolder tabComposite = new TabFolder(parentComposite, SWT.TOP);
+
+            // add general tab
+            TabItem generalTab = new TabItem(tabComposite, SWT.None);
+            generalTab.setText(ConnectivityUIPlugin.getDefault()
+                    .getResourceString("CommonDriverUIContributor.generaltab")); //$NON-NLS-1$
+
+            Composite baseComposite = new Composite(tabComposite, SWT.NULL);
+			GridLayout layout = new GridLayout();
+			layout.numColumns = 3;
+			baseComposite.setLayout(layout);
+            generalTab.setControl(baseComposite);
+
+			databaseLabel = new Label(baseComposite, SWT.NONE);
+			databaseLabel.setText(CUI_NEWCW_DATABASE_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			databaseLabel.setLayoutData(gd);
+
+			databaseText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalAlignment = GridData.FILL;
+			gd.horizontalSpan = 2;
+			databaseText.setLayoutData(gd);
+
+			hostLabel = new Label(baseComposite, SWT.NONE);
+			hostLabel.setText(CUI_NEWCW_HOST_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			hostLabel.setLayoutData(gd);
+
+			hostText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 2;
+			gd.grabExcessHorizontalSpace = true;
+			hostText.setLayoutData(gd);
+
+			portLabel = new Label(baseComposite, SWT.NONE);
+			portLabel.setText(CUI_NEWCW_PORT_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			portLabel.setLayoutData(gd);
+
+			portText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			portText.setLayoutData(gd);
+
+			usernameLabel = new Label(baseComposite, SWT.NONE);
+			usernameLabel.setText(CUI_NEWCW_USERNAME_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			usernameLabel.setLayoutData(gd);
+
+			usernameText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			usernameText.setLayoutData(gd);
+
+			passwordLabel = new Label(baseComposite, SWT.NONE);
+			passwordLabel.setText(CUI_NEWCW_PASSWORD_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			passwordLabel.setLayoutData(gd);
+
+			passwordText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER
+					| SWT.PASSWORD | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			passwordText.setLayoutData(gd);
+
+			createCheck = new Button(baseComposite, SWT.CHECK);
+			createCheck.setText(CUI_NEWCW_CREATEDB_BTN_UI_);
+			createCheck.setSelection(true);
+			gd = new GridData();
+			gd.horizontalSpan = 3;
+			createCheck.setLayoutData(gd);
+
+			upgradeCheck = new Button(baseComposite, SWT.CHECK);
+			upgradeCheck.setText(CUI_NEWCW_UPGRADEDB_BTN_UI_);
+			upgradeCheck.setSelection(false);
+			gd = new GridData();
+			gd.horizontalSpan = 3;
+			upgradeCheck.setLayoutData(gd);
+
+			savePasswordButton = new Button(baseComposite, SWT.CHECK);
+			savePasswordButton.setText(CUI_NEWCW_SAVE_PASSWORD_LBL_UI_);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 3;
+			gd.grabExcessHorizontalSpace = true;
+			savePasswordButton.setLayoutData(gd);
+
+			urlLabel = new Label(baseComposite, SWT.NONE);
+			urlLabel.setText(CUI_NEWCW_CONNECTIONURL_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			urlLabel.setLayoutData(gd);
+
+			urlText = new Text(baseComposite, SWT.MULTI | SWT.BORDER
+					| SWT.READ_ONLY | SWT.WRAP | SWT.V_SCROLL);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			gd.widthHint = 190;
+			gd.heightHint = 90;
+			urlText.setLayoutData(gd);
+
+            // add optional properties tab
+            TabItem optionalPropsTab = new TabItem( tabComposite, SWT.None );
+            optionalPropsTab.setText( ConnectivityUIPlugin.getDefault()
+                    .getResourceString( "CommonDriverUIContributor.optionaltab" ) ); //$NON-NLS-1$
+            optionalPropsComposite = new OptionalPropertiesPane( tabComposite, SWT.NULL, isReadOnly );
+            optionalPropsTab.setControl( optionalPropsComposite );
+
+            parentComposite.setContent(tabComposite);
+            parentComposite.setMinSize(tabComposite.computeSize(SWT.DEFAULT,
+                    SWT.DEFAULT));
+
+			initialize();
+		}
+		return parentComposite;
+	}
+
+	public void setConnectionInformation() {
+		properties.setProperty(
+				IJDBCDriverDefinitionConstants.DATABASE_NAME_PROP_ID,
+				this.databaseText.getText().trim());
+		properties.setProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID,
+				this.passwordText.getText());
+
+		properties.setProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID,
+				this.usernameText.getText());
+		properties.setProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID,
+				this.urlText.getText().trim());
+
+		properties.setProperty(
+				IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID, String
+						.valueOf(savePasswordButton.getSelection()));
+        optionalPropsComposite.setConnectionInformation();
+		this.contributorInformation.setProperties(properties);
+	}
+
+	public void updateURL() {
+		String url = "jdbc:derby://" + hostText.getText().trim(); //$NON-NLS-1$
+		if (portText.getText().trim().length() > 0) {
+			url += ":" + portText.getText().trim(); //$NON-NLS-1$
+		}
+		url += "/" + databaseText.getText().trim(); //$NON-NLS-1$
+		if (createCheck.getSelection()) {
+			url += ";" + CREATE_EQUALS_TRUE_TEXT; //$NON-NLS-1$
+		}
+		if (upgradeCheck.getSelection()) {
+			url += ";" + UPGRADE_EQUALS_TRUE_TEXT; //$NON-NLS-1$
+		}
+		urlText.setText(url);
+	}
+
+	private void removeListeners() {
+		databaseText.removeListener(SWT.Modify, this);
+		hostText.removeListener(SWT.Modify, this);
+		portText.removeListener(SWT.Modify, this);
+		usernameText.removeListener(SWT.Modify, this);
+		passwordText.removeListener(SWT.Modify, this);
+		createCheck.removeListener(SWT.Selection, this);
+		upgradeCheck.removeListener(SWT.Selection, this);
+		savePasswordButton.removeListener(SWT.Selection, this);
+	}
+
+	private void addListeners() {
+		databaseText.addListener(SWT.Modify, this);
+		hostText.addListener(SWT.Modify, this);
+		portText.addListener(SWT.Modify, this);
+		usernameText.addListener(SWT.Modify, this);
+		passwordText.addListener(SWT.Modify, this);
+		createCheck.addListener(SWT.Selection, this);
+		upgradeCheck.addListener(SWT.Selection, this);
+		savePasswordButton.addListener(SWT.Selection, this);
+	}
+
+	private void initialize() {
+		updateURL();
+		addListeners();
+	}
+
+	public void handleEvent(Event event) {	
+		if (isReadOnly){
+			if (event.widget == savePasswordButton){
+				savePasswordButton.setSelection(!savePasswordButton.getSelection());
+			} else if (event.widget == createCheck){
+				createCheck.setSelection(!createCheck.getSelection());
+			} else if (event.widget == upgradeCheck){
+				upgradeCheck.setSelection(!upgradeCheck.getSelection());
+			}	
+		} else {
+			updateURL();
+			setConnectionInformation();
+		}
+	}
+
+	public boolean determineContributorCompletion() {
+		boolean isComplete = true;
+		if (databaseText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(MessageFormat.format(Messages
+					.getString("CUI_NEWCW_VALIDATE_DATABASE_REQ_UI_"), //$NON-NLS-1$
+					new Object[] { Messages
+							.getString("CUI_NEWCW_DEFDBNAME_VAL_UI_") })); //$NON-NLS-1$
+			isComplete = false;
+		} else if (hostText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_HOST_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (usernameText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_USERID_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (passwordText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_PASSWORD_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+        } else if (!optionalPropsComposite.validateControl(parentPage)) {
+            isComplete = false;
+        } 
+
+		if (isComplete) {
+			parentPage.setErrorMessage(null);
+		}
+		return isComplete;
+	}
+
+	public void setDialogPage(DialogPage parentPage) {
+		this.parentPage = parentPage;
+	}
+
+	public void setDriverUIContributorInformation(
+			IDriverUIContributorInformation contributorInformation) {
+		this.contributorInformation = contributorInformation;
+		this.properties = contributorInformation.getProperties();
+        optionalPropsComposite.setDriverUIContributorInformation( contributorInformation );
+	}
+
+	public void loadProperties() {
+		removeListeners();
+		DerbyClientJDBCURL url = new DerbyClientJDBCURL(this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID));
+		hostText.setText(url.getNode());
+		portText.setText(url.getPort());
+		databaseText.setText(url.getDatabaseName());
+
+		String username = this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID);
+		if (username != null) {
+			usernameText.setText(username);
+		}
+		String password = this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID);
+		if (password != null) {
+			passwordText.setText(password);
+		}
+		if (!(url.getProperties().indexOf(CREATE_EQUALS_TRUE_TEXT) > -1)) {
+			createCheck.setSelection(false);
+		}
+		if ((url.getProperties().indexOf(UPGRADE_EQUALS_TRUE_TEXT) > -1)) {
+			upgradeCheck.setSelection(true);
+		}
+		String savePassword = this.properties
+				.getProperty(IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID);
+		if ((savePassword != null)
+				&& Boolean.valueOf(savePassword) == Boolean.TRUE) {
+			savePasswordButton.setSelection(true);
+		}
+        
+        // load optional connection properties
+        optionalPropsComposite.loadProperties();
+
+        updateURL();
+		addListeners();
+		setConnectionInformation();
+	}
+
+	public List getSummaryData() {
+		List summaryData = new ArrayList();
+
+		summaryData.add(new String[] { CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_,
+				this.databaseText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_,
+				this.hostText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_,
+				this.portText.getText().trim() });
+
+		summaryData.add(new String[] { CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_,
+				this.usernameText.getText().trim() });
+		summaryData.add(new String[] {
+				CUI_NEWCW_CREATE_DATABASE_SUMMARY_DATA_TEXT_,
+				createCheck.getSelection() ? CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_
+						: CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ });
+		summaryData.add(new String[] {
+				CUI_NEWCW_UPGRADE_DATABASE_SUMMARY_DATA_TEXT_,
+				upgradeCheck.getSelection() ? CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_
+						: CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ });
+		summaryData
+				.add(new String[] {
+						CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_,
+						savePasswordButton.getSelection() ? CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_
+								: CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ });
+		summaryData.add(new String[] { CUI_NEWCW_URL_SUMMARY_DATA_TEXT_,
+				this.urlText.getText().trim() });
+		return summaryData;
+	}
+
+	private class DerbyClientJDBCURL {
+		private String subprotocol = ""; //$NON-NLS-1$
+
+		private String node = ""; //$NON-NLS-1$
+
+		private String port = ""; //$NON-NLS-1$
+
+		private String databaseName = ""; //$NON-NLS-1$
+
+		private String properties = ""; //$NON-NLS-1$
+
+		/**
+		 * @param url
+		 */
+		public DerbyClientJDBCURL(String url) {
+			if (url != null) {
+				parseURL(url);
+			}
+		}
+
+		/**
+		 * @return Returns the databaseName.
+		 */
+		public String getDatabaseName() {
+			return databaseName;
+		}
+
+		/**
+		 * @return Returns the node.
+		 */
+		public String getNode() {
+			return node;
+		}
+
+		/**
+		 * @return Returns the subprotocol.
+		 */
+		public String getSubprotocol() {
+			return subprotocol;
+		}
+
+		private void parseURL(String url) {
+			try {
+				String remainingURL = url.substring(url.indexOf(':') + 1);
+				this.subprotocol = remainingURL.substring(0, remainingURL
+						.indexOf(':'));
+				remainingURL = remainingURL
+						.substring(remainingURL.indexOf(':') + 3);
+				this.node = remainingURL
+						.substring(0, remainingURL.indexOf('/'));
+				if (this.node.indexOf(':') > -1) {
+					this.port = this.node.substring(this.node.indexOf(':') + 1);
+					this.node = this.node.substring(0, this.node.indexOf(':'));
+				}
+				remainingURL = remainingURL
+						.substring(remainingURL.indexOf('/') + 1);
+				if (remainingURL.indexOf('"') > -1) {
+					remainingURL = remainingURL.substring(remainingURL
+							.indexOf('"') + 1);
+					this.databaseName = "\"" //$NON-NLS-1$
+							+ remainingURL.substring(0, remainingURL
+									.indexOf('"') + 1);
+					remainingURL = remainingURL.substring(remainingURL
+							.indexOf('"') + 1);
+					this.properties = remainingURL;
+				} else {
+					if (remainingURL.indexOf(';') > -1) {
+						this.databaseName = remainingURL.substring(0,
+								remainingURL.indexOf(';'));
+						remainingURL = remainingURL.substring(remainingURL
+								.indexOf(';') + 1);
+						this.properties = remainingURL;
+					} else {
+						this.databaseName = remainingURL;
+					}
+				}
+			} catch (Exception e) {
+			}
+		}
+
+		/**
+		 * @return Returns the port.
+		 */
+		public String getPort() {
+			return port;
+		}
+
+		/**
+		 * @return Returns the properties.
+		 */
+		public String getProperties() {
+			return properties;
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/drivers/DerbyDriverUIContributor.java b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/drivers/DerbyDriverUIContributor.java
new file mode 100644
index 0000000..698a25d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/drivers/DerbyDriverUIContributor.java
@@ -0,0 +1,584 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ *               Actuate Corporation - added optional properties tab
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.drivers;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributor;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributorInformation;
+import org.eclipse.datatools.connectivity.ui.wizards.OptionalPropertiesPane;
+import org.eclipse.jface.dialogs.DialogPage;
+import org.eclipse.osgi.util.TextProcessor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.swt.widgets.Text;
+
+public class DerbyDriverUIContributor implements IDriverUIContributor, Listener {
+
+	protected String CUI_NEWCW_DATABASE_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_DATABASE_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_HOST_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_HOST_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_PORT_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_PORT_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_CONNECTIONURL_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_CONNECTIONURL_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_USERNAME_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_USERNAME_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_PASSWORD_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_PASSWORD_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_CREATEDB_BTN_UI_ = Messages
+			.getString("DerbyEmbeddedDriverUIContributor.2"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_UPGRADEDB_BTN_UI_ = Messages
+			.getString("DerbyEmbeddedDriverUIContributor.3"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_SAVE_PASSWORD_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_SAVE_PASSWORD_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_URL_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_URL_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_CREATE_DATABASE_SUMMARY_DATA_TEXT_ = TextProcessor.process(Messages
+			.getString("CUI_NEWCW_CREATE_DATABASE_SUMMARY_DATA_TEXT_")); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_UPGRADE_DATABASE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_UPGRADE_DATABASE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CREATE_EQUALS_TRUE_TEXT = "create=true"; //$NON-NLS-1$
+
+	private static final String UPGRADE_EQUALS_TRUE_TEXT = "upgrade=true"; //$NON-NLS-1$
+
+	private Label databaseLabel;
+
+	private Text databaseText;
+
+	private Label hostLabel;
+
+	private Text hostText;
+
+	private Label portLabel;
+
+	private Text portText;
+
+	private Label usernameLabel;
+
+	private Text usernameText;
+
+	private Label passwordLabel;
+
+	private Text passwordText;
+
+	private Button createCheck;
+
+	private Button upgradeCheck;
+
+	private Button savePasswordButton;
+
+	private Label urlLabel;
+
+	private Text urlText;
+
+	private DialogPage parentPage;
+
+	private ScrolledComposite parentComposite;
+
+    private OptionalPropertiesPane optionalPropsComposite;
+
+	private IDriverUIContributorInformation contributorInformation;
+
+	private Properties properties;
+	
+	private boolean isReadOnly = false;
+
+	public Composite getContributedDriverUI(Composite parent, boolean isReadOnly) {
+
+		if ((parentComposite == null) || parentComposite.isDisposed() || (this.isReadOnly != isReadOnly)) {
+			GridData gd;
+
+			this.isReadOnly = isReadOnly;
+			int additionalStyles = SWT.NONE;
+			if (isReadOnly){
+				additionalStyles = SWT.READ_ONLY;
+			}
+			
+			parentComposite = new ScrolledComposite(parent, SWT.H_SCROLL
+					| SWT.V_SCROLL);
+			parentComposite.setExpandHorizontal(true);
+			parentComposite.setExpandVertical(true);
+			parentComposite.setLayout(new GridLayout());
+
+            TabFolder tabComposite = new TabFolder(parentComposite, SWT.TOP);
+
+            // add general tab
+            TabItem generalTab = new TabItem(tabComposite, SWT.None);
+            generalTab.setText(ConnectivityUIPlugin.getDefault()
+                    .getResourceString("CommonDriverUIContributor.generaltab")); //$NON-NLS-1$
+
+            Composite baseComposite = new Composite(tabComposite, SWT.NULL);
+			GridLayout layout = new GridLayout();
+			layout.numColumns = 3;
+			baseComposite.setLayout(layout);
+            generalTab.setControl(baseComposite);
+
+			databaseLabel = new Label(baseComposite, SWT.NONE);
+			databaseLabel.setText(CUI_NEWCW_DATABASE_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			databaseLabel.setLayoutData(gd);
+
+			databaseText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalAlignment = GridData.FILL;
+			gd.horizontalSpan = 2;
+			databaseText.setLayoutData(gd);
+
+			hostLabel = new Label(baseComposite, SWT.NONE);
+			hostLabel.setText(CUI_NEWCW_HOST_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			hostLabel.setLayoutData(gd);
+
+			hostText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 2;
+			gd.grabExcessHorizontalSpace = true;
+			hostText.setLayoutData(gd);
+
+			portLabel = new Label(baseComposite, SWT.NONE);
+			portLabel.setText(CUI_NEWCW_PORT_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			portLabel.setLayoutData(gd);
+
+			portText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			portText.setLayoutData(gd);
+
+			usernameLabel = new Label(baseComposite, SWT.NONE);
+			usernameLabel.setText(CUI_NEWCW_USERNAME_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			usernameLabel.setLayoutData(gd);
+
+			usernameText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			usernameText.setLayoutData(gd);
+
+			passwordLabel = new Label(baseComposite, SWT.NONE);
+			passwordLabel.setText(CUI_NEWCW_PASSWORD_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			passwordLabel.setLayoutData(gd);
+
+			passwordText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER
+					| SWT.PASSWORD | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			passwordText.setLayoutData(gd);
+
+			createCheck = new Button(baseComposite, SWT.CHECK);
+			createCheck.setText(CUI_NEWCW_CREATEDB_BTN_UI_);
+			createCheck.setSelection(true);
+			gd = new GridData();
+			gd.horizontalSpan = 3;
+			createCheck.setLayoutData(gd);
+
+			upgradeCheck = new Button(baseComposite, SWT.CHECK);
+			upgradeCheck.setText(CUI_NEWCW_UPGRADEDB_BTN_UI_);
+			upgradeCheck.setSelection(false);
+			gd = new GridData();
+			gd.horizontalSpan = 3;
+			upgradeCheck.setLayoutData(gd);
+
+			this.savePasswordButton = new Button(baseComposite, SWT.CHECK);
+			this.savePasswordButton.setText(CUI_NEWCW_SAVE_PASSWORD_LBL_UI_);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 3;
+			gd.grabExcessHorizontalSpace = true;
+			savePasswordButton.setLayoutData(gd);
+
+			urlLabel = new Label(baseComposite, SWT.NONE);
+			urlLabel.setText(CUI_NEWCW_CONNECTIONURL_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			urlLabel.setLayoutData(gd);
+
+			urlText = new Text(baseComposite, SWT.MULTI | SWT.BORDER
+					| SWT.READ_ONLY | SWT.WRAP | SWT.V_SCROLL);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			gd.widthHint = 190;
+			gd.heightHint = 90;
+			urlText.setLayoutData(gd);
+
+            // add optional properties tab
+            TabItem optionalPropsTab = new TabItem( tabComposite, SWT.None );
+            optionalPropsTab.setText( ConnectivityUIPlugin.getDefault()
+                    .getResourceString( "CommonDriverUIContributor.optionaltab" ) ); //$NON-NLS-1$
+            optionalPropsComposite = new OptionalPropertiesPane( tabComposite, SWT.NULL, isReadOnly );
+            optionalPropsTab.setControl( optionalPropsComposite );
+
+            parentComposite.setContent(tabComposite);
+            parentComposite.setMinSize(tabComposite.computeSize(SWT.DEFAULT,
+                    SWT.DEFAULT));
+
+			initialize();
+		}
+		return parentComposite;
+	}
+
+	public void setConnectionInformation() {
+		properties.setProperty(
+				IJDBCDriverDefinitionConstants.DATABASE_NAME_PROP_ID,
+				this.databaseText.getText().trim());
+		properties.setProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID,
+				this.passwordText.getText());
+
+		properties.setProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID,
+				this.usernameText.getText());
+		properties.setProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID,
+				this.urlText.getText().trim());
+
+		properties.setProperty(
+				IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID, String
+						.valueOf(savePasswordButton.getSelection()));
+        optionalPropsComposite.setConnectionInformation();
+		this.contributorInformation.setProperties(properties);
+	}
+
+	public void updateURL() {
+		String url = "jdbc:derby:net://" + hostText.getText().trim(); //$NON-NLS-1$
+		if (portText.getText().trim().length() > 0) {
+			url += ":" + portText.getText().trim(); //$NON-NLS-1$
+		}
+		url += "/" + databaseText.getText().trim() //$NON-NLS-1$
+				+ ":retrieveMessagesFromServerOnGetMessage=true;"; //$NON-NLS-1$
+		if (createCheck.getSelection()) {
+			url += CREATE_EQUALS_TRUE_TEXT + ";"; //$NON-NLS-1$
+		}
+		if (upgradeCheck.getSelection()) {
+			url += UPGRADE_EQUALS_TRUE_TEXT + ";"; //$NON-NLS-1$
+		}
+		urlText.setText(url);
+	}
+
+	private void removeListeners() {
+		databaseText.removeListener(SWT.Modify, this);
+		hostText.removeListener(SWT.Modify, this);
+		portText.removeListener(SWT.Modify, this);
+		usernameText.removeListener(SWT.Modify, this);
+		passwordText.removeListener(SWT.Modify, this);
+		createCheck.removeListener(SWT.Selection, this);
+		upgradeCheck.removeListener(SWT.Selection, this);
+		savePasswordButton.removeListener(SWT.Selection, this);
+	}
+
+	private void addListeners() {
+		databaseText.addListener(SWT.Modify, this);
+		hostText.addListener(SWT.Modify, this);
+		portText.addListener(SWT.Modify, this);
+		usernameText.addListener(SWT.Modify, this);
+		passwordText.addListener(SWT.Modify, this);
+		createCheck.addListener(SWT.Selection, this);
+		upgradeCheck.addListener(SWT.Selection, this);
+		savePasswordButton.addListener(SWT.Selection, this);
+	}
+
+	private void initialize() {
+		updateURL();
+		addListeners();
+	}
+
+	public void handleEvent(Event event) {
+		if (isReadOnly){
+			if (event.widget == savePasswordButton){
+				savePasswordButton.setSelection(!savePasswordButton.getSelection());
+			} else if (event.widget == createCheck){
+				createCheck.setSelection(!createCheck.getSelection());
+			} else if (event.widget == upgradeCheck){
+				upgradeCheck.setSelection(!upgradeCheck.getSelection());
+			}	
+		} else {
+			updateURL();
+			setConnectionInformation();
+		}
+	}
+
+	public boolean determineContributorCompletion() {
+		boolean isComplete = true;
+		if (databaseText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(MessageFormat.format(Messages
+					.getString("CUI_NEWCW_VALIDATE_DATABASE_REQ_UI_"), //$NON-NLS-1$
+					new Object[] { Messages
+							.getString("CUI_NEWCW_DEFDBNAME_VAL_UI_") })); //$NON-NLS-1$
+			isComplete = false;
+		} else if (hostText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_HOST_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (usernameText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_USERID_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (passwordText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_PASSWORD_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+        } else if (!optionalPropsComposite.validateControl(parentPage)) {
+            isComplete = false;
+        } 
+
+		if (isComplete) {
+			parentPage.setErrorMessage(null);
+		}
+		return isComplete;
+	}
+
+	public void setDialogPage(DialogPage parentPage) {
+		this.parentPage = parentPage;
+	}
+
+	public void setDriverUIContributorInformation(
+			IDriverUIContributorInformation contributorInformation) {
+		this.contributorInformation = contributorInformation;
+		this.properties = contributorInformation.getProperties();
+        optionalPropsComposite.setDriverUIContributorInformation( contributorInformation );
+	}
+
+	public void loadProperties() {
+		removeListeners();
+		DerbyJDBCURL url = new DerbyJDBCURL(this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID));
+		hostText.setText(url.getNode());
+		portText.setText(url.getPort());
+		databaseText.setText(url.getDatabaseName());
+
+		String username = this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID);
+		if (username != null) {
+			usernameText.setText(username);
+		}
+		String password = this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID);
+		if (password != null) {
+			passwordText.setText(password);
+		}
+		if (!(url.getProperties().indexOf(CREATE_EQUALS_TRUE_TEXT) > -1)) {
+			createCheck.setSelection(false);
+		}
+		if ((url.getProperties().indexOf(UPGRADE_EQUALS_TRUE_TEXT) > -1)) {
+			upgradeCheck.setSelection(true);
+		}
+		String savePassword = this.properties
+				.getProperty(IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID);
+		if ((savePassword != null)
+				&& Boolean.valueOf(savePassword) == Boolean.TRUE) {
+			savePasswordButton.setSelection(true);
+		}
+        
+        // load optional connection properties
+        optionalPropsComposite.loadProperties();
+
+        updateURL();
+		addListeners();
+		setConnectionInformation();
+	}
+
+	public List getSummaryData() {
+		List summaryData = new ArrayList();
+
+		summaryData.add(new String[] { CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_,
+				this.databaseText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_,
+				this.hostText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_,
+				this.portText.getText().trim() });
+
+		summaryData.add(new String[] { CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_,
+				this.usernameText.getText().trim() });
+		summaryData.add(new String[] {
+				CUI_NEWCW_CREATE_DATABASE_SUMMARY_DATA_TEXT_,
+				createCheck.getSelection() ? CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_
+						: CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ });
+		summaryData.add(new String[] {
+				CUI_NEWCW_UPGRADE_DATABASE_SUMMARY_DATA_TEXT_,
+				upgradeCheck.getSelection() ? CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_
+						: CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ });
+		summaryData
+				.add(new String[] {
+						CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_,
+						savePasswordButton.getSelection() ? CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_
+								: CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ });
+		summaryData.add(new String[] { CUI_NEWCW_URL_SUMMARY_DATA_TEXT_,
+				this.urlText.getText().trim() });
+		return summaryData;
+	}
+
+	private class DerbyJDBCURL {
+		private String subprotocol = ""; //$NON-NLS-1$
+
+		private String node = ""; //$NON-NLS-1$
+
+		private String port = ""; //$NON-NLS-1$
+
+		private String databaseName = ""; //$NON-NLS-1$
+
+		private String properties = ""; //$NON-NLS-1$
+
+		/**
+		 * @param url
+		 */
+		public DerbyJDBCURL(String url) {
+			if (url != null) {
+				parseURL(url);
+			}
+		}
+
+		/**
+		 * @return Returns the databaseName.
+		 */
+		public String getDatabaseName() {
+			return databaseName;
+		}
+
+		/**
+		 * @return Returns the node.
+		 */
+		public String getNode() {
+			return node;
+		}
+
+		/**
+		 * @return Returns the subprotocol.
+		 */
+		public String getSubprotocol() {
+			return subprotocol;
+		}
+
+		private void parseURL(String url) {
+			try {
+				String remainingURL = url.substring(url.indexOf(':') + 1);
+				this.subprotocol = remainingURL.substring(0, remainingURL
+						.indexOf(':'));
+				remainingURL = remainingURL
+						.substring(remainingURL.indexOf(':') + 1);
+				this.subprotocol += ":" //$NON-NLS-1$
+						+ remainingURL.substring(0, remainingURL.indexOf(':'));
+				remainingURL = remainingURL
+						.substring(remainingURL.indexOf(':') + 3);
+				this.node = remainingURL
+						.substring(0, remainingURL.indexOf('/'));
+				if (this.node.indexOf(':') > -1) {
+					this.port = this.node.substring(this.node.indexOf(':') + 1);
+					this.node = this.node.substring(0, this.node.indexOf(':'));
+				}
+				remainingURL = remainingURL
+						.substring(remainingURL.indexOf('/') + 1);
+				if (remainingURL.indexOf('"') > -1) {
+					remainingURL = remainingURL.substring(remainingURL
+							.indexOf('"') + 1);
+					this.databaseName = "\"" //$NON-NLS-1$
+							+ remainingURL.substring(0, remainingURL
+									.indexOf('"') + 1);
+					remainingURL = remainingURL.substring(remainingURL
+							.indexOf('"') + 2);
+					this.properties = remainingURL;
+				} else {
+					if (remainingURL.indexOf(':') > -1) {
+						this.databaseName = remainingURL.substring(0,
+								remainingURL.indexOf(':'));
+						remainingURL = remainingURL.substring(remainingURL
+								.indexOf(':') + 1);
+						this.properties = remainingURL;
+					} else {
+						this.databaseName = remainingURL;
+					}
+				}
+			} catch (Exception e) {
+			}
+		}
+
+		/**
+		 * @return Returns the port.
+		 */
+		public String getPort() {
+			return port;
+		}
+
+		/**
+		 * @return Returns the properties.
+		 */
+		public String getProperties() {
+			return properties;
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/drivers/DerbyEmbeddedDriverUIContributor.java b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/drivers/DerbyEmbeddedDriverUIContributor.java
new file mode 100644
index 0000000..c33414f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/drivers/DerbyEmbeddedDriverUIContributor.java
@@ -0,0 +1,582 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2006, 2007, 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ *     IBM Corporation - migrated to new wizard framework
+ *     IBM Corporation - defect fix #213266
+ *     IBM Corporation - defect fix #223677
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.drivers;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.Path;
+import org.eclipse.datatools.connectivity.ConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.drivers.DriverManager;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
+import org.eclipse.datatools.connectivity.internal.ui.DelimitedStringList;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributor;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributorInformation;
+import org.eclipse.jface.dialogs.DialogPage;
+import org.eclipse.osgi.util.TextProcessor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.swt.widgets.Text;
+
+public class DerbyEmbeddedDriverUIContributor implements IDriverUIContributor,
+		Listener, ModifyListener {
+
+	private static final String CUI_NEWCW_GENERAL_TAB_UI_ = Messages
+			.getString("DerbyEmbeddedDriverUIContributor.general.tab"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_OPTIONAL_TAB_UI_ = Messages
+			.getString("DerbyEmbeddedDriverUIContributor.optional.tab"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_DBLOCATION_LBL_UI_ = Messages
+			.getString("DerbyEmbeddedDriverUIContributor.0"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_DBBROWSE_BTN_UI_ = Messages
+			.getString("DerbyEmbeddedDriverUIContributor.1"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_CREATEDB_BTN_UI_ = Messages
+			.getString("DerbyEmbeddedDriverUIContributor.2"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_UPGRADEDB_BTN_UI_ = Messages
+			.getString("DerbyEmbeddedDriverUIContributor.3"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_USERNAME_LBL_UI_ = Messages
+			.getString("DerbyEmbeddedDriverUIContributor.userName.label"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_PASSWORD_LBL_UI_ = Messages
+			.getString("DerbyEmbeddedDriverUIContributor.password.label"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_SAVE_PASSWORD_LBL_UI_ = Messages
+			.getString("DerbyEmbeddedDriverUIContributor.persistpassword.label"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_CONNECTIONURL_LBL_UI_ = Messages
+			.getString("DerbyEmbeddedDriverUIContributor.url.label"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_OPTIONAL_PROPERTIES_LBL_UI_ = Messages
+			.getString("DerbyEmbeddedDriverUIContributor.optionalproperties.label"); //$NON-NLS-1$	
+
+	private static final String CUI_NEWCW_DRIVER_NAME_SUMMARY_DATA_TEXT_ = Messages
+			.getString("DerbyEmbeddedDriverUIContributor.summary.driverName.label"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_DATABASE_LOCATION_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_DATABASE_LOCATION_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_ = Messages
+			.getString("DerbyEmbeddedDriverUIContributor.summary.userName.label"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_URL_SUMMARY_DATA_TEXT_ = Messages
+			.getString("DerbyEmbeddedDriverUIContributor.summary.url.label"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_CREATE_DATABASE_SUMMARY_DATA_TEXT_ = TextProcessor.process(Messages
+			.getString("CUI_NEWCW_CREATE_DATABASE_SUMMARY_DATA_TEXT_")); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_UPGRADE_DATABASE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_UPGRADE_DATABASE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_OPTIONAL_CONNECTION_PROPERTIES_SUMMARY_DATA_TEXT_ = Messages
+			.getString("DerbyEmbeddedDriverUIContributor.summary.connProps.label"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_FILE_BROWSER_TITLE_TEXT_ = Messages
+			.getString("DerbyEmbeddedDriverUIContributor.FileDialog.title.filebrowse"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_FILE_BROWSER_MESSAGE_TEXT_ = Messages
+			.getString("DerbyEmbeddedDriverUIContributor.FileDialog.msg.filebrowse"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_VALIDATE_DBLOCATION_REQ_UI_ = Messages
+			.getString("CUI_NEWCW_VALIDATE_DBLOCATION_REQ_UI_"); //$NON-NLS-1$
+
+	private static final String CREATE_EQUALS_TRUE_TEXT = "create=true"; //$NON-NLS-1$
+
+	private static final String UPGRADE_EQUALS_TRUE_TEXT = "upgrade=true"; //$NON-NLS-1$
+
+	private ScrolledComposite parentComposite;
+
+	private Label databaseLocationLabel;
+
+	private Combo databaseLocationCombo;
+
+	private Button browseDatabaseLocation;
+
+	private Button createCheck;
+
+	private Button upgradeCheck;
+
+	private Label usernameLabel;
+
+	private Text usernameText;
+
+	private Label passwordLabel;
+
+	private Text passwordText;
+
+	private Button savePasswordButton;
+
+	private Label urlLabel;
+
+	private Text urlText;
+
+	private DelimitedStringList optionalConnectionProperties;
+
+	private DialogPage parentPage;
+
+	private IDriverUIContributorInformation contributorInformation;
+
+	private Properties properties;
+
+	private String databaseName;
+
+	private boolean isReadOnly = false;
+	
+	public boolean determineContributorCompletion() {
+		boolean isComplete = true;
+		if (databaseLocationCombo.getText().equals("")) //$NON-NLS-1$
+		{
+			parentPage.setErrorMessage(CUI_NEWCW_VALIDATE_DBLOCATION_REQ_UI_); //$NON-NLS-1$
+			isComplete = false;
+		}
+
+		if (isComplete) {
+			parentPage.setErrorMessage(null);
+		}
+		return isComplete;
+	}
+
+	public Composite getContributedDriverUI(Composite parent, boolean isReadOnly) {
+		if (parentComposite == null || parentComposite.isDisposed() || (this.isReadOnly != isReadOnly)) {
+			this.isReadOnly = isReadOnly;
+			int additionalStyles = SWT.NONE;
+			if (isReadOnly){
+				additionalStyles = SWT.READ_ONLY;
+			}
+			
+			parentComposite = new ScrolledComposite(parent, SWT.H_SCROLL
+					| SWT.V_SCROLL);
+			parentComposite.setExpandHorizontal(true);
+			parentComposite.setExpandVertical(true);
+			parentComposite.setLayout(new GridLayout());
+
+			TabFolder baseComposite = new TabFolder(parentComposite, SWT.TOP);
+
+			TabItem generalTab = new TabItem(baseComposite, SWT.None);
+			generalTab.setText(CUI_NEWCW_GENERAL_TAB_UI_); //$NON-NLS-1$
+
+			TabItem optionalTab = new TabItem(baseComposite, SWT.None);
+			optionalTab.setText(CUI_NEWCW_OPTIONAL_TAB_UI_); //$NON-NLS-1$
+
+			Composite generalComposite = new Composite(baseComposite, SWT.NULL);
+			GridLayout layout = new GridLayout();
+			layout.numColumns = 3;
+			generalComposite.setLayout(layout);
+			generalTab.setControl(generalComposite);
+
+			Composite optionalComposite = new Composite(baseComposite, SWT.NULL);
+			layout = new GridLayout();
+			layout.numColumns = 1;
+			optionalComposite.setLayout(layout);
+			optionalTab.setControl(optionalComposite);
+
+			GridData gd;
+
+			databaseLocationLabel = new Label(generalComposite, SWT.NONE);
+			databaseLocationLabel.setText(CUI_NEWCW_DBLOCATION_LBL_UI_);
+
+			Composite textAndBrowseComposite = new Composite(generalComposite,
+					SWT.NULL);
+			GridLayout subCompositeLayout = new GridLayout(2, false);
+			subCompositeLayout.marginLeft = -5;
+			subCompositeLayout.marginRight = -5;
+			subCompositeLayout.marginTop = -5;
+			subCompositeLayout.marginBottom = -5;
+			textAndBrowseComposite.setLayout(subCompositeLayout);
+			gd = new GridData(GridData.FILL_HORIZONTAL);
+			gd.horizontalSpan = 2;
+			textAndBrowseComposite.setLayoutData(gd);
+
+			databaseLocationCombo = new Combo(textAndBrowseComposite,
+					SWT.SINGLE | SWT.BORDER);
+			databaseLocationCombo.setEnabled(!isReadOnly);
+			gd = new GridData(GridData.FILL_HORIZONTAL);
+			databaseLocationCombo.setLayoutData(gd);
+
+			browseDatabaseLocation = new Button(textAndBrowseComposite,
+					SWT.PUSH);
+			browseDatabaseLocation.setEnabled(!isReadOnly);
+			browseDatabaseLocation.setText(CUI_NEWCW_DBBROWSE_BTN_UI_);
+			browseDatabaseLocation.setLayoutData(new GridData(
+					GridData.HORIZONTAL_ALIGN_END));
+			browseDatabaseLocation.addListener(SWT.Selection, new Listener() {
+
+				public void handleEvent(Event event) {
+					DerbyEmbeddedDriverUIContributor.this.browseForDBFolder();
+				}
+
+			});
+			usernameLabel = new Label(generalComposite, SWT.NONE);
+			usernameLabel.setText(CUI_NEWCW_USERNAME_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			usernameLabel.setLayoutData(gd);
+
+			usernameText = new Text(generalComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			usernameText.setLayoutData(gd);
+
+			passwordLabel = new Label(generalComposite, SWT.NONE);
+			passwordLabel.setText(CUI_NEWCW_PASSWORD_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			passwordLabel.setLayoutData(gd);
+
+			passwordText = new Text(generalComposite, SWT.SINGLE | SWT.BORDER
+					| SWT.PASSWORD | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			passwordText.setLayoutData(gd);
+
+			urlLabel = new Label(generalComposite, SWT.NONE);
+			urlLabel.setText(CUI_NEWCW_CONNECTIONURL_LBL_UI_);
+
+			urlText = new Text(generalComposite, SWT.SINGLE | SWT.BORDER
+					| SWT.READ_ONLY);
+			gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+			gd.horizontalSpan = 2;
+			urlText.setLayoutData(gd);
+
+			createCheck = new Button(generalComposite, SWT.CHECK);
+			createCheck.setText(CUI_NEWCW_CREATEDB_BTN_UI_);
+			createCheck.setSelection(true);
+			gd = new GridData();
+			gd.horizontalSpan = 3;
+			createCheck.setLayoutData(gd);
+
+			upgradeCheck = new Button(generalComposite, SWT.CHECK);
+			upgradeCheck.setText(CUI_NEWCW_UPGRADEDB_BTN_UI_);
+			upgradeCheck.setSelection(false);
+			gd = new GridData();
+			gd.horizontalSpan = 3;
+			upgradeCheck.setLayoutData(gd);
+
+			this.savePasswordButton = new Button(generalComposite, SWT.CHECK);
+			this.savePasswordButton.setText(CUI_NEWCW_SAVE_PASSWORD_LBL_UI_); //$NON-NLS-1$
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 3;
+			gd.grabExcessHorizontalSpace = true;
+			savePasswordButton.setLayoutData(gd);
+
+			Label optionalPropertiesLabel = new Label(optionalComposite,
+					SWT.NULL);
+			GridData gdata = new GridData(GridData.FILL_HORIZONTAL);
+			gdata.horizontalSpan = 2;
+			optionalPropertiesLabel.setLayoutData(gdata);
+			optionalPropertiesLabel
+					.setText(CUI_NEWCW_OPTIONAL_PROPERTIES_LBL_UI_); //$NON-NLS-1$
+
+			optionalConnectionProperties = new DelimitedStringList(
+					optionalComposite, SWT.NONE, isReadOnly);
+			gdata = new GridData(GridData.FILL_HORIZONTAL);
+			gdata.horizontalSpan = 2;
+			optionalConnectionProperties.setLayoutData(gdata);
+
+			parentComposite.setContent(baseComposite);
+			parentComposite.setMinSize(baseComposite.computeSize(SWT.DEFAULT,
+					SWT.DEFAULT));
+
+			initialize();
+		}
+
+		return parentComposite;
+	}
+
+	private void initialize() {
+		updateURL();
+		addListeners();
+	}
+
+	public List getSummaryData() {
+		List summaryData = new ArrayList();
+		String driverID = this.properties
+				.getProperty(ConnectionProfileConstants.PROP_DRIVER_DEFINITION_ID);
+		DriverInstance driverInstance = DriverManager.getInstance()
+				.getDriverInstanceByID(driverID);
+
+		summaryData.add(new String[] {
+				CUI_NEWCW_DRIVER_NAME_SUMMARY_DATA_TEXT_, //$NON-NLS-1$
+				driverInstance.getName() });
+		summaryData.add(new String[] {
+				CUI_NEWCW_DATABASE_LOCATION_SUMMARY_DATA_TEXT_,
+				this.databaseLocationCombo.getText().trim() });
+
+		summaryData.add(new String[] { CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_,
+				this.usernameText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_URL_SUMMARY_DATA_TEXT_,
+				this.urlText.getText().trim() });
+		summaryData.add(new String[] {
+				CUI_NEWCW_CREATE_DATABASE_SUMMARY_DATA_TEXT_,
+				createCheck.getSelection() ? CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_
+						: CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ });
+		summaryData.add(new String[] {
+				CUI_NEWCW_UPGRADE_DATABASE_SUMMARY_DATA_TEXT_,
+				upgradeCheck.getSelection() ? CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_
+						: CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ });
+		summaryData
+				.add(new String[] {
+						CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_,
+						savePasswordButton.getSelection() ? CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_
+								: CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ });
+		summaryData.add(new String[] {
+				CUI_NEWCW_OPTIONAL_CONNECTION_PROPERTIES_SUMMARY_DATA_TEXT_, //$NON-NLS-1$
+				optionalConnectionProperties.getSelection() });
+		return summaryData;
+	}
+
+	public void loadProperties() {
+		removeListeners();
+		DerbyEmbeddedJDBCURL url = new DerbyEmbeddedJDBCURL(this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID));
+		databaseLocationCombo.setText(url.getNode());
+		updateDatabaseName();
+		String username = this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID);
+		if (username != null) {
+			usernameText.setText(username);
+		}
+		String password = this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID);
+		if (password != null) {
+			passwordText.setText(password);
+		}
+		String savePassword = this.properties
+				.getProperty(IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID);
+		if ((savePassword != null)
+				&& Boolean.valueOf(savePassword) == Boolean.TRUE) {
+			savePasswordButton.setSelection(true);
+		}
+		if (!(url.getProperties().indexOf(CREATE_EQUALS_TRUE_TEXT) > -1)) {
+			createCheck.setSelection(false);
+		}
+		if ((url.getProperties().indexOf(UPGRADE_EQUALS_TRUE_TEXT) > -1)) {
+			upgradeCheck.setSelection(true);
+		}
+
+		String connectionProperties = this.properties
+				.getProperty(IJDBCConnectionProfileConstants.CONNECTION_PROPERTIES_PROP_ID);
+		if (connectionProperties != null) {
+			this.optionalConnectionProperties
+					.setSelection(connectionProperties);
+		}
+		updateURL();
+		addListeners();
+		setConnectionInformation();
+	}
+
+	protected void updateDatabaseName() {
+		if (databaseLocationCombo.getText() != null
+				&& !databaseLocationCombo.getText().equals("")) { //$NON-NLS-1$
+			databaseName = databaseLocationCombo.getText()
+					.substring(
+							databaseLocationCombo.getText().lastIndexOf(
+									File.separator) + 1);
+		}
+	}
+
+	public void setDialogPage(DialogPage parentPage) {
+		this.parentPage = parentPage;
+	}
+
+	public void setConnectionInformation() {
+		updateDatabaseName();
+		properties.setProperty(
+				IJDBCDriverDefinitionConstants.DATABASE_NAME_PROP_ID,
+				databaseName);
+		properties.setProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID,
+				this.passwordText.getText());
+		properties.setProperty(
+				IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID, String
+						.valueOf(savePasswordButton.getSelection()));
+		properties.setProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID,
+				this.usernameText.getText());
+		properties.setProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID,
+				this.urlText.getText().trim());
+		properties.setProperty(
+				IJDBCConnectionProfileConstants.CONNECTION_PROPERTIES_PROP_ID,
+				this.optionalConnectionProperties.getSelection());
+		this.contributorInformation.setProperties(properties);
+	}
+
+	public void setDriverUIContributorInformation(
+			IDriverUIContributorInformation contributorInformation) {
+		this.contributorInformation = contributorInformation;
+		this.properties = contributorInformation.getProperties();
+	}
+
+	public void handleEvent(Event event) {
+		if (isReadOnly){
+			if (event.widget == savePasswordButton){
+				savePasswordButton.setSelection(!savePasswordButton.getSelection());
+			} else if (event.widget == createCheck){
+				createCheck.setSelection(!createCheck.getSelection());
+			} else if (event.widget == upgradeCheck){
+				upgradeCheck.setSelection(!upgradeCheck.getSelection());
+			}	
+		} else {
+			updateURL();
+			setConnectionInformation();
+		}
+	}
+
+	public void addListeners() {
+		databaseLocationCombo.addListener(SWT.Modify, this);
+		browseDatabaseLocation.addListener(SWT.Selection, this);
+		usernameText.addListener(SWT.Modify, this);
+		passwordText.addListener(SWT.Modify, this);
+		savePasswordButton.addListener(SWT.Selection, this);
+		createCheck.addListener(SWT.Selection, this);
+		upgradeCheck.addListener(SWT.Selection, this);
+		optionalConnectionProperties.addModifyListener(this);
+	}
+
+	protected void removeListeners() {
+		databaseLocationCombo.removeListener(SWT.Modify, this);
+		browseDatabaseLocation.removeListener(SWT.Selection, this);
+		usernameText.removeListener(SWT.Modify, this);
+		passwordText.removeListener(SWT.Modify, this);
+		savePasswordButton.removeListener(SWT.Selection, this);
+		createCheck.removeListener(SWT.Selection, this);
+		upgradeCheck.removeListener(SWT.Selection, this);
+		optionalConnectionProperties.removeModifyListener(this);
+	}
+
+	protected void updateURL() {
+		String url = "jdbc:derby:" + databaseLocationCombo.getText(); //$NON-NLS-1$
+		url += !createCheck.getSelection() ? "" : ";create=true"; //$NON-NLS-1$ //$NON-NLS-2$
+		url += !upgradeCheck.getSelection() ? "" : ";upgrade=true"; //$NON-NLS-1$ //$NON-NLS-2$
+		urlText.setText(url);
+	}
+
+	protected class DerbyEmbeddedJDBCURL {
+		protected String subprotocol = ""; //$NON-NLS-1$
+
+		protected String node = ""; //$NON-NLS-1$
+
+		protected String properties = ""; //$NON-NLS-1$
+
+		/**
+		 * @param url
+		 */
+		public DerbyEmbeddedJDBCURL(String url) {
+			parseURL(url);
+		}
+
+		/**
+		 * @return Returns the node.
+		 */
+		public String getNode() {
+			return node;
+		}
+
+		/**
+		 * @return Returns the subprotocol.
+		 */
+		public String getSubprotocol() {
+			return subprotocol;
+		}
+
+		protected void parseURL(String url) {
+			try {
+				String remainingURL = url.substring(url.indexOf(':') + 1);
+				this.subprotocol = remainingURL.substring(0, remainingURL
+						.indexOf(':'));
+				remainingURL = remainingURL
+						.substring(remainingURL.indexOf(':') + 1);
+				if (remainingURL.indexOf(';') > -1) {
+					this.node = remainingURL.substring(0, remainingURL
+							.indexOf(';'));
+					remainingURL = remainingURL.substring(remainingURL
+							.indexOf(';') + 1);
+					this.properties = remainingURL;
+				} else {
+					this.node = remainingURL;
+				}
+			} catch (Exception e) {
+			}
+		}
+
+		/**
+		 * @return Returns the properties.
+		 */
+		public String getProperties() {
+			return properties;
+		}
+	}
+
+	/**
+	 * Browse for the database folder
+	 */
+	private void browseForDBFolder() {
+		DirectoryDialog dialog = new DirectoryDialog(databaseLocationCombo
+				.getShell());
+		dialog.setText(CUI_NEWCW_FILE_BROWSER_TITLE_TEXT_); //$NON-NLS-1$
+		dialog.setMessage(CUI_NEWCW_FILE_BROWSER_MESSAGE_TEXT_); //$NON-NLS-1$
+
+		String dirName = databaseLocationCombo.getText();
+
+		File path = new File(dirName);
+		if (path.exists()) {
+			dialog.setFilterPath(new Path(dirName).toOSString());
+		}
+
+		String selectedDirectory = dialog.open();
+		if (selectedDirectory != null) {
+			databaseLocationCombo.setText(selectedDirectory);
+		}
+	}
+
+	public void modifyText(ModifyEvent e) {
+		handleEvent(new Event());
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/drivers/DerbyOtherDriverUIContributor.java b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/drivers/DerbyOtherDriverUIContributor.java
new file mode 100644
index 0000000..b783eff
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/drivers/DerbyOtherDriverUIContributor.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.drivers;
+
+import org.eclipse.datatools.connectivity.ui.wizards.OtherDriverUIContributor;
+
+public class DerbyOtherDriverUIContributor extends OtherDriverUIContributor {
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/drivers/Messages.java b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/drivers/Messages.java
new file mode 100644
index 0000000..5b29cb4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/drivers/Messages.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.drivers;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+public class Messages {
+	private static final String BUNDLE_NAME = "org.eclipse.datatools.connectivity.apache.derby.internal.ui.connection.drivers.messages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private Messages() {
+	}
+
+	public static String getString(String key) {
+		// TODO Auto-generated method stub
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/drivers/messages.properties b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/drivers/messages.properties
new file mode 100644
index 0000000..514435d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/drivers/messages.properties
@@ -0,0 +1,46 @@
+DerbyEmbeddedDriverUIContributor.0=D&atabase location\:
+DerbyEmbeddedDriverUIContributor.1=B&rowse...
+DerbyEmbeddedDriverUIContributor.2=Cr&eate database (if required)
+DerbyEmbeddedDriverUIContributor.3=U&pgrade database to current version
+DerbyEmbeddedDriverUIContributor.url.label = UR&L\:
+DerbyEmbeddedDriverUIContributor.userName.label = &User name\:
+DerbyEmbeddedDriverUIContributor.password.label = Pass&word:
+DerbyEmbeddedDriverUIContributor.persistpassword.label = Sa&ve password
+DerbyEmbeddedDriverUIContributor.optionalProps.label = Optional &properties\:
+DerbyEmbeddedDriverUIContributor.summary.driverName.label = Driver name
+DerbyEmbeddedDriverUIContributor.summary.connProps.label = Optional properties
+DerbyEmbeddedDriverUIContributor.summary.userName.label = User name
+DerbyEmbeddedDriverUIContributor.summary.password.label = Password
+DerbyEmbeddedDriverUIContributor.summary.url.label = URL
+DerbyEmbeddedDriverUIContributor.FileDialog.title.filebrowse = Browse for Database Folder
+DerbyEmbeddedDriverUIContributor.FileDialog.msg.filebrowse = Select the folder that corresponds to your Derby database.
+DerbyEmbeddedDriverUIContributor.general.tab = &General
+DerbyEmbeddedDriverUIContributor.optional.tab = &Optional
+DerbyEmbeddedDriverUIContributor.optionalproperties.label = Optional &properties:
+CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_ = Save password
+CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_ = true
+CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ = false
+CUI_NEWCW_DATABASE_LOCATION_SUMMARY_DATA_TEXT_ = Database location
+CUI_NEWCW_CREATE_DATABASE_SUMMARY_DATA_TEXT_ = Create database (if required)
+CUI_NEWCW_UPGRADE_DATABASE_SUMMARY_DATA_TEXT_ = Upgrade database to current version
+CUI_NEWCW_DATABASE_LBL_UI_ = Databa&se:
+CUI_NEWCW_HOST_LBL_UI_ = &Host:
+CUI_NEWCW_PORT_LBL_UI_ = Port nu&mber:
+CUI_NEWCW_CONNECTIONURL_LBL_UI_= UR&L:
+CUI_NEWCW_USERNAME_LBL_UI_ = User n&ame:
+CUI_NEWCW_PASSWORD_LBL_UI_ = Pass&word:
+CUI_NEWCW_SAVE_PASSWORD_LBL_UI_ = Sa&ve password
+CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_ = Database
+CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_ = Host
+CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_ = Port number
+CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_ = User name
+CUI_NEWCW_URL_SUMMARY_DATA_TEXT_ = URL
+
+CUI_NEWCW_VALIDATE_DATABASE_REQ_UI_ = Enter a database name.
+CUI_NEWCW_VALIDATE_DBLOCATION_REQ_UI_ = Enter a database location.
+CUI_NEWCW_VALIDATE_HOST_REQ_UI_= Enter the host name for the database server.
+CUI_NEWCW_VALIDATE_PORT_REQ_UI_ = Enter the connection port number for the database server.
+CUI_NEWCW_VALIDATE_USERID_REQ_UI_ = Enter a user name.
+CUI_NEWCW_VALIDATE_PASSWORD_REQ_UI_ = Enter a password.
+
+
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/messages.properties b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/messages.properties
new file mode 100644
index 0000000..a97f709
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/connection/messages.properties
@@ -0,0 +1 @@
+NewDerbyEmbeddedConnectionProfileWizard.DerbyEmbeddedDatabaseWizardTitle=New Derby Connection Profile
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/explorer/providers/ServerExplorerContentProvider.java b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/explorer/providers/ServerExplorerContentProvider.java
new file mode 100644
index 0000000..6ce149b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/explorer/providers/ServerExplorerContentProvider.java
@@ -0,0 +1,139 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.derby.internal.ui.explorer.providers;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.apache.derby.internal.ui.util.ResourceLoader;
+import org.eclipse.datatools.connectivity.apache.derby.ui.explorer.providers.virtual.ISynonymFolder;
+import org.eclipse.datatools.connectivity.apache.derby.ui.explorer.providers.virtual.IVirtualNodeServiceFactory;
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentService;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.derby.DerbySchema;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.navigator.ICommonContentExtensionSite;
+import org.eclipse.ui.navigator.ICommonContentProvider;
+
+
+public class ServerExplorerContentProvider  implements ICommonContentProvider{
+    private static final ContainmentService containmentService = RDBCorePlugin.getDefault().getContainmentService();
+    private static final IVirtualNodeServiceFactory factory = IVirtualNodeServiceFactory.INSTANCE;
+    private static final Object[] EMPTY_ELEMENT_ARRAY = new Object[0];
+    private static final String SYNONYM_FOLDER = ResourceLoader.INSTANCE.queryString("DATATOOLS.DERBY.UI.SYNONYMS"); //$NON-NLS-1$
+
+    /**
+     * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
+     */
+    public Object[] getChildren(Object parentElement)
+    {
+        if (parentElement instanceof DerbySchema)
+        {
+        	return new Object [] { factory.makeSynonymFolder(SYNONYM_FOLDER, SYNONYM_FOLDER, parentElement)};
+        }
+        else if (parentElement instanceof ISynonymFolder)
+        {
+        	Schema owningSchema = (Schema)((ISynonymFolder) parentElement).getParent();
+    	    List list = new ArrayList (owningSchema.getTables().size());
+    	    for (Iterator iterator = owningSchema.getTables().iterator(); iterator.hasNext();)
+    	    {
+    	        EObject child = (EObject) iterator.next();
+    	        if (((ISynonymFolder)parentElement).getGroupID().equals(containmentService.getGroupId(child)))
+    	        {
+    	            list.add(child);
+    	        }
+    	    }
+        	return getArrays(parentElement, list);
+        }
+        return EMPTY_ELEMENT_ARRAY;
+    }
+
+	protected Object[] getArrays (Object parent, Collection collection)
+	{
+		if (collection.isEmpty())
+		{
+			return EMPTY_ELEMENT_ARRAY;
+		}
+		else
+		{
+		    if (parent instanceof IVirtualNode)
+		    {
+		    	if (((IVirtualNode)parent).hasChildren())
+		    	{
+		    		return ((IVirtualNode)parent).getChildrenArray();
+		    	}
+		    	else
+		    	{
+		    		((IVirtualNode)parent).addChildren(collection);
+		    	}
+		    }
+			return collection.toArray(new Object[collection.size()]);
+		}
+	}
+
+    /**
+     * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
+     */
+    public Object getParent(Object element)
+    {
+        if (element instanceof IVirtualNode)
+        {
+            return ((IVirtualNode) element).getParent();
+        }
+        return null;
+    }
+    /**
+     * @see org.eclipse.ui.views.navigator.INavigatorContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+     */
+    public void inputChanged(Viewer viewer, Object oldInput, Object newInput)
+    {
+    }
+    
+    /**
+     * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
+     */
+    public boolean hasChildren(Object element)
+    {
+        return true;
+    }
+    /**
+     * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+     */
+    public Object[] getElements(Object inputElement)
+    {
+        return getChildren(inputElement);
+    }
+
+    /**
+     * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+     */
+    public void dispose()
+    {
+    	//TODO
+    }
+    public void init(ICommonContentExtensionSite aConfig)
+    {
+    }
+    public void restoreState(IMemento aMemento)
+    {
+    }
+
+    public void saveState(IMemento aMemento)
+    {
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/explorer/providers/label/ServerExplorerlabelProvider.java b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/explorer/providers/label/ServerExplorerlabelProvider.java
new file mode 100644
index 0000000..086362a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/explorer/providers/label/ServerExplorerlabelProvider.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.derby.internal.ui.explorer.providers.label;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+import org.eclipse.datatools.connectivity.sqm.core.ui.services.IDataToolsUIServiceManager;
+import org.eclipse.emf.ecore.ENamedElement;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+public class ServerExplorerlabelProvider extends LabelProvider implements ILabelProvider
+{
+	private static final IDataToolsUIServiceManager imageService = IDataToolsUIServiceManager.INSTANCE;
+
+	/**
+     * @return the Image associated with this element
+     */
+    public Image getImage(Object element)
+    {
+        return imageService.getLabelService(element).getIcon();
+    }
+
+    /**
+     * @return the Text associated with this element
+     */
+    public String getText(Object element)
+    {
+		if (element instanceof IVirtualNode)
+		{
+			return ((IVirtualNode) element).getDisplayName();
+		}
+		else if (element instanceof ENamedElement)
+		{
+		    return ((ENamedElement)element).getName();
+		}
+		else 
+		{
+		    return super.getText(element);
+		}
+    }
+
+	public void initialize(String aViewerId) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public String getDescription(Object selection) {
+        return IDataToolsUIServiceManager.INSTANCE.getLabelService(selection).getName();
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/explorer/providers/virtual/NodeFactory.java b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/explorer/providers/virtual/NodeFactory.java
new file mode 100644
index 0000000..8edb891
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/explorer/providers/virtual/NodeFactory.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.derby.internal.ui.explorer.providers.virtual;
+
+import org.eclipse.datatools.connectivity.apache.derby.internal.ui.explorer.providers.virtual.SynonymFolder;
+import org.eclipse.datatools.connectivity.apache.derby.ui.explorer.providers.virtual.ISynonymFolder;
+import org.eclipse.datatools.connectivity.apache.derby.ui.explorer.providers.virtual.IVirtualNodeServiceFactory;
+
+public class NodeFactory implements IVirtualNodeServiceFactory
+	{
+	    public ISynonymFolder makeSynonymFolder(String name, String displayName, Object parent)
+	    {
+	        return new SynonymFolder (name, displayName, parent);
+	    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/explorer/providers/virtual/SynonymFolder.java b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/explorer/providers/virtual/SynonymFolder.java
new file mode 100644
index 0000000..043aed6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/explorer/providers/virtual/SynonymFolder.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.derby.internal.ui.explorer.providers.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual.VirtualNode;
+import org.eclipse.datatools.connectivity.apache.derby.ui.explorer.providers.virtual.ISynonymFolder;
+import org.eclipse.datatools.connectivity.apache.internal.derby.containment.DerbyGroupID;
+
+public class SynonymFolder extends VirtualNode implements ISynonymFolder{
+    public SynonymFolder(String name, String displayName, Object parent)
+    {
+        super(name, displayName, parent);
+    }
+
+    public String getGroupID()
+    {
+        return DerbyGroupID.SYNONYM;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/l10n/derbyUI.properties b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/l10n/derbyUI.properties
new file mode 100644
index 0000000..de9d344
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/l10n/derbyUI.properties
@@ -0,0 +1,16 @@
+###############################################################################
+# Copyright (c) 2001, 2004 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+##
+###
+##  !!! This property file should only contain resources that are "translatable" !!!
+###
+##
+DATATOOLS.DERBY.UI.SYNONYMS = Synonym
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/util/ResourceLoader.java b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/util/ResourceLoader.java
new file mode 100644
index 0000000..a918528
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/internal/ui/util/ResourceLoader.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.derby.internal.ui.util;
+
+import java.util.ResourceBundle;
+
+/**
+ * @author ljulien
+ */
+public class ResourceLoader
+{
+	private static final String RESOURCE_PATH = "org/eclipse/datatools/connectivity/apache/derby/internal/ui/l10n/"; //$NON-NLS-1$
+	private static final String UI_RESOURCES = "derbyUI"; //$NON-NLS-1$
+	private static final String NO_RESOURCE_FOUND = "NO_RESOURCE_FOUND"; //$NON-NLS-1$
+
+	private ResourceBundle bundle;
+	
+	public static final ResourceLoader INSTANCE = new ResourceLoader ();
+	
+	private ResourceLoader()
+    {
+        this.bundle = ResourceBundle.getBundle(RESOURCE_PATH + UI_RESOURCES);
+    }
+	
+    /**
+     * @param stringID - the key to look for
+     * @return - the localized string
+     */
+    public String queryString (String stringID)
+    {
+        try
+        {
+            String resource = null;
+            resource = this.bundle.getString(stringID);
+            return (resource);
+        }
+        catch (Throwable e)
+        {
+        	return NO_RESOURCE_FOUND;
+        }
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/ui/explorer/providers/virtual/ISynonymFolder.java b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/ui/explorer/providers/virtual/ISynonymFolder.java
new file mode 100644
index 0000000..4713aad
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/ui/explorer/providers/virtual/ISynonymFolder.java
@@ -0,0 +1,16 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.derby.ui.explorer.providers.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+public interface ISynonymFolder extends IVirtualNode {
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/ui/explorer/providers/virtual/IVirtualNodeServiceFactory.java b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/ui/explorer/providers/virtual/IVirtualNodeServiceFactory.java
new file mode 100644
index 0000000..ec3bf0e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby.ui/src/org/eclipse/datatools/connectivity/apache/derby/ui/explorer/providers/virtual/IVirtualNodeServiceFactory.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.derby.ui.explorer.providers.virtual;
+
+import org.eclipse.datatools.connectivity.apache.derby.internal.ui.explorer.providers.virtual.NodeFactory;
+public interface IVirtualNodeServiceFactory {
+    public static final IVirtualNodeServiceFactory INSTANCE = new NodeFactory();
+    
+    public ISynonymFolder makeSynonymFolder (String name, String displayName, Object parent);
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/.classpath b/plugins/org.eclipse.datatools.connectivity.apache.derby/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/.gitignore b/plugins/org.eclipse.datatools.connectivity.apache.derby/.gitignore
new file mode 100644
index 0000000..f402086
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/.gitignore
@@ -0,0 +1,4 @@
+bin
+temp.folder
+build.xml
+rdb_derby.jar
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/.project b/plugins/org.eclipse.datatools.connectivity.apache.derby/.project
new file mode 100644
index 0000000..17a755f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.apache.derby</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.connectivity.apache.derby/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..73f4382
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Fri Apr 13 14:14:14 PDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.4
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.connectivity.apache.derby/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..b9a3121
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/META-INF/MANIFEST.MF
@@ -0,0 +1,28 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.apache.derby;singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-Activator: org.eclipse.datatools.connectivity.apache.internal.derby.DerbyPlugin
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Export-Package: org.eclipse.datatools.connectivity.apache.internal.derby,
+ org.eclipse.datatools.connectivity.apache.internal.derby.catalog,
+ org.eclipse.datatools.connectivity.apache.internal.derby.connection,
+ org.eclipse.datatools.connectivity.apache.internal.derby.containment,
+ org.eclipse.datatools.connectivity.apache.internal.derby.ddl,
+ org.eclipse.datatools.connectivity.apache.internal.derby.driver
+Require-Bundle: org.eclipse.emf.ecore,
+ org.eclipse.core.runtime,
+ org.eclipse.core.resources,
+ org.eclipse.datatools.modelbase.dbdefinition,
+ org.eclipse.datatools.modelbase.sql,
+ org.eclipse.datatools.connectivity.sqm.core,
+ org.eclipse.datatools.modelbase.derby,
+ org.eclipse.datatools.connectivity
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Import-Package: com.ibm.icu.text,
+ com.ibm.icu.util
+
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/about.html b/plugins/org.eclipse.datatools.connectivity.apache.derby/about.html
new file mode 100644
index 0000000..76a59f1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/build.properties b/plugins/org.eclipse.datatools.connectivity.apache.derby/build.properties
new file mode 100644
index 0000000..b6ae02f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/build.properties
@@ -0,0 +1,16 @@
+bin.includes = .,\
+               plugin.xml,\
+               plugin.properties,\
+               about.html,\
+               META-INF/,\
+               icons/
+jars.compile.order = .
+source.. = src/
+
+src.dir			 = src/
+plugin.version =	1.0.1.200802251
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/icons/jdbc_16.gif b/plugins/org.eclipse.datatools.connectivity.apache.derby/icons/jdbc_16.gif
new file mode 100644
index 0000000..ef7809c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/icons/jdbc_16.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/plugin.properties b/plugins/org.eclipse.datatools.connectivity.apache.derby/plugin.properties
new file mode 100644
index 0000000..aa711bf
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/plugin.properties
@@ -0,0 +1,46 @@
+###############################################################################
+# Copyright (c) 2001, 2004, 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+
+pluginName = Eclipse Data Tools Platform Derby Plug-in
+providerName = Eclipse Data Tools Platform
+
+DERBY_CONNECTION_PROFILE_NAME=Derby Embedded Database
+DERBY_JDBC_CONNECTION_FACTORY_NAME=JDBC Connection
+DERBY_PING_CONNECTION_FACTORY_NAME=Ping Connection Factory
+DERBY_SQL_MODEL_CONNECTION_FACTORY_NAME=SQL Model Connection
+DRIVER_CLASS_PROPERTY_NAME=Driver Class
+VENDOR_PROPERTY_NAME=Vendor
+VERSION_PROPERTY_NAME=Version
+DATABASE_NAME_PROPERTY_NAME=Database Name
+CONNECTION_URL_PROPERTY_NAME=Connection URL
+USER_ID_PROPERTY_NAME=User ID
+PASSWORD_PROPERTY_NAME=Password
+
+DERBY_CATEGORY_NAME=Derby
+10_0_VERSION_CATEGORY_NAME = 10.0
+10_1_VERSION_CATEGORY_NAME = 10.1
+10_2_VERSION_CATEGORY_NAME = 10.2
+
+DERBY_EMBEDDED_DRIVER_TEMPLATE_NAME=Derby Embedded JDBC Driver
+DERBY_EMBEDDED_DRIVER_DEFAULT_INSTANCE_NAME=Derby Embedded JDBC Driver 10.0
+DERBY_OTHER_DRIVER_TEMPLATE_NAME = Other Driver
+DERBY101_EMBEDDED_DRIVER_TEMPLATE_NAME=Derby Embedded JDBC Driver
+DERBY101_EMBEDDED_DRIVER_DEFAULT_INSTANCE_NAME=Derby Embedded JDBC Driver 10.1
+DERBY_NETWORK_EMBEDDED_DRIVER_TEMPLATE_NAME=IBM Data Server Driver for JDBC and SQLJ
+DERBY101_NETWORK_EMBEDDED_DRIVER_TEMPLATE_NAME=IBM Data Server Driver for JDBC and SQLJ
+DERBY101_CLIENT_DRIVER_TEMPLATE_NAME = Derby Client JDBC Driver
+DERBY101_CLIENT_DRIVER_DEFAULT_INSTANCE_NAME = Derby Client JDBC Driver 10.1
+DERBY101_OTHER_DRIVER_TEMPLATE_NAME = Other Driver
+DERBY102_EMBEDDED_DRIVER_TEMPLATE_NAME=Derby Embedded JDBC Driver
+DERBY102_EMBEDDED_DRIVER_DEFAULT_INSTANCE_NAME=Derby Embedded JDBC Driver 10.2
+DERBY102_CLIENT_DRIVER_TEMPLATE_NAME = Derby Client JDBC Driver
+DERBY102_CLIENT_DRIVER_DEFAULT_INSTANCE_NAME = Derby Client JDBC Driver 10.2
+DERBY102_OTHER_DRIVER_TEMPLATE_NAME = Other Driver
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/plugin.xml b/plugins/org.eclipse.datatools.connectivity.apache.derby/plugin.xml
new file mode 100644
index 0000000..12deafc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/plugin.xml
@@ -0,0 +1,713 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+
+<!-- Containment Provider for Synonym support -->
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.logicalContainment">
+		<containment
+			package="http:///org/eclipse/datatools/modelbase/derby/derby.ecore"
+			class="Synonym"
+			provider="org.eclipse.datatools.connectivity.apache.internal.derby.containment.DerbySynonymContainmentProvider">
+		</containment>
+   </extension>
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.catalog">
+      <overrideLoader
+            provider="org.eclipse.datatools.connectivity.apache.internal.derby.catalog.DerbySchemaLoader"
+            eclass="org.eclipse.datatools.modelbase.sql.schema.Schema"
+            product="Derby"
+            version="10.0"/>
+   </extension>
+
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.ddlGeneration">
+      <generator
+            version="10.0"
+            product="Derby"
+            class="org.eclipse.datatools.connectivity.apache.internal.derby.ddl.DerbyDdlGenerator">
+      </generator>
+   </extension>
+
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.catalog">
+      <overrideLoader
+            provider="org.eclipse.datatools.connectivity.apache.internal.derby.catalog.DerbySchemaLoader"
+            eclass="org.eclipse.datatools.modelbase.sql.schema.Schema"
+            product="Derby"
+            version="10.1"/>
+   </extension>
+
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.ddlGeneration">
+      <generator
+            version="10.1"
+            product="Derby"
+            class="org.eclipse.datatools.connectivity.apache.internal.derby.ddl.DerbyDdlGenerator">
+      </generator>
+   </extension>
+	
+	<extension
+         point="org.eclipse.datatools.connectivity.sqm.core.catalog">
+      <overrideLoader
+           provider="org.eclipse.datatools.connectivity.apache.internal.derby.catalog.DerbySchemaLoader"
+            eclass="org.eclipse.datatools.modelbase.sql.schema.Schema"
+            product="Derby"
+            version="10.2"/>
+   </extension>
+
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.ddlGeneration">
+      <generator
+            version="10.2"
+            product="Derby"
+           class="org.eclipse.datatools.connectivity.apache.internal.derby.ddl.DerbyDdlGenerator">
+      </generator>
+   </extension>
+
+<extension
+         point="org.eclipse.datatools.connectivity.connectionProfile">
+      <connectionProfile
+            category="org.eclipse.datatools.connectivity.db.category"
+            icon="icons/jdbc_16.gif"
+            pingFactory="org.eclipse.datatools.connectivity.apache.internal.derby.connection.DerbyJDBCConnectionFactory"
+            id="org.eclipse.datatools.connectivity.db.derby.embedded.connectionProfile"
+            name="%DERBY_CONNECTION_PROFILE_NAME"
+            propertiesPersistenceHook="org.eclipse.datatools.connectivity.apache.internal.derby.connection.DerbyPropertiesPersistenceHook"/>
+      <connectionFactory
+            class="org.eclipse.datatools.connectivity.apache.internal.derby.connection.DerbyJDBCConnectionFactory"
+            id="java.sql.Connection"
+            name="%DERBY_JDBC_CONNECTION_FACTORY_NAME"
+            profile="org.eclipse.datatools.connectivity.db.derby.embedded.connectionProfile"/>
+   </extension>
+   
+	<extension
+         point="org.eclipse.datatools.connectivity.driverExtension">    
+      <category
+      		parentCategory="org.eclipse.datatools.connectivity.db.driverCategory"
+            id="org.eclipse.datatools.connectivity.db.derby.driverCategory"
+            name="%DERBY_CATEGORY_NAME"/>
+       <category
+      		parentCategory="org.eclipse.datatools.connectivity.db.derby.driverCategory"
+            id="org.eclipse.datatools.connectivity.db.derby.10_0.driverCategory"
+            name="%10_0_VERSION_CATEGORY_NAME"/> 
+        <category
+      		parentCategory="org.eclipse.datatools.connectivity.db.derby.driverCategory"
+            id="org.eclipse.datatools.connectivity.db.derby.10_1.driverCategory"
+            name="%10_1_VERSION_CATEGORY_NAME"/> 
+        <category
+      		parentCategory="org.eclipse.datatools.connectivity.db.derby.driverCategory"
+            id="org.eclipse.datatools.connectivity.db.derby.10_2.driverCategory"
+            name="%10_2_VERSION_CATEGORY_NAME"/> 
+            
+      <driverTemplate
+            createDefault="false"
+            defaultDefinitionName="%DERBY_EMBEDDED_DRIVER_DEFAULT_INSTANCE_NAME"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.connectivity.db.derby.genericDriverTemplate"
+            jarList="derby.jar"
+            name="%DERBY_EMBEDDED_DRIVER_TEMPLATE_NAME"
+            parentCategory="org.eclipse.datatools.connectivity.db.derby.10_0.driverCategory"
+            valuesProvider="org.eclipse.datatools.connectivity.apache.internal.derby.driver.DerbyDriverValuesProvider101">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%DRIVER_CLASS_PROPERTY_NAME"
+                  value="org.apache.derby.jdbc.EmbeddedDriver"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%VENDOR_PROPERTY_NAME"
+                  value="Derby"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%VERSION_PROPERTY_NAME"
+                  value="10.0"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%DATABASE_NAME_PROPERTY_NAME"
+                  value="SAMPLE"
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%CONNECTION_URL_PROPERTY_NAME"
+                  value="jdbc:derby:C:\DerbyDatabases\MyDB;create=true"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%USER_ID_PROPERTY_NAME"
+                  value=""
+                  required="false"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%PASSWORD_PROPERTY_NAME"
+                  required="false"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+      <driverTemplate
+            createDefault="false"
+            defaultDefinitionName="%DERBY101_EMBEDDED_DRIVER_DEFAULT_INSTANCE_NAME"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.connectivity.db.derby101.genericDriverTemplate"
+            jarList="derby.jar"
+            name="%DERBY101_EMBEDDED_DRIVER_TEMPLATE_NAME"
+            parentCategory="org.eclipse.datatools.connectivity.db.derby.10_1.driverCategory"
+            valuesProvider="org.eclipse.datatools.connectivity.apache.internal.derby.driver.DerbyDriverValuesProvider101">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%DRIVER_CLASS_PROPERTY_NAME"
+                  value="org.apache.derby.jdbc.EmbeddedDriver"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%VENDOR_PROPERTY_NAME"
+                  value="Derby"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%VERSION_PROPERTY_NAME"
+                  value="10.1"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%DATABASE_NAME_PROPERTY_NAME"
+                  value="SAMPLE"
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%CONNECTION_URL_PROPERTY_NAME"
+                  value="jdbc:derby:C:\DerbyDatabases\MyDB;create=true"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%USER_ID_PROPERTY_NAME"
+                  value=""
+                  required="false"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%PASSWORD_PROPERTY_NAME"
+                  required="false"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+      <driverTemplate
+            createDefault="false"
+            defaultDefinitionName="%DERBY102_EMBEDDED_DRIVER_DEFAULT_INSTANCE_NAME"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.connectivity.db.derby102.genericDriverTemplate"
+            jarList="derby.jar"
+            name="%DERBY102_EMBEDDED_DRIVER_TEMPLATE_NAME"
+            parentCategory="org.eclipse.datatools.connectivity.db.derby.10_2.driverCategory"
+            valuesProvider="org.eclipse.datatools.connectivity.apache.internal.derby.driver.DerbyDriverValuesProvider">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%DRIVER_CLASS_PROPERTY_NAME"
+                  value="org.apache.derby.jdbc.EmbeddedDriver"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%VENDOR_PROPERTY_NAME"
+                  value="Derby"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%VERSION_PROPERTY_NAME"
+                  value="10.2"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%DATABASE_NAME_PROPERTY_NAME"
+                  value="SAMPLE"
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%CONNECTION_URL_PROPERTY_NAME"
+                  value="jdbc:derby:C:\DerbyDatabases\MyDB;create=true"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%USER_ID_PROPERTY_NAME"
+                  value=""
+                  required="false"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%PASSWORD_PROPERTY_NAME"
+                  required="false"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+      <driverTemplate
+            createDefault="false"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.connectivity.db.derby.db2UniversalDriver"
+            jarList="db2jcc.jar;db2jcc_license_c.jar"
+            name="%DERBY_NETWORK_EMBEDDED_DRIVER_TEMPLATE_NAME"
+            parentCategory="org.eclipse.datatools.connectivity.db.derby.10_0.driverCategory">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%DRIVER_CLASS_PROPERTY_NAME"
+                  value="com.ibm.db2.jcc.DB2Driver"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%VENDOR_PROPERTY_NAME"
+                  value="Derby"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%VERSION_PROPERTY_NAME"
+                  value="10.0"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%DATABASE_NAME_PROPERTY_NAME"
+                  value="SAMPLE"
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%CONNECTION_URL_PROPERTY_NAME"
+                  value='jdbc:derby:net://localhost:1527/"C:/DerbyDatabases/MyDB";create=true:retrieveMessagesFromServerOnGetMessage=true;'
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%USER_ID_PROPERTY_NAME"
+                  value="user"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%PASSWORD_PROPERTY_NAME"
+                  required="true"
+                  value="pwd"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+      <driverTemplate
+            createDefault="false"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.connectivity.db.derby101.db2UniversalDriver"
+            jarList="db2jcc.jar;db2jcc_license_c.jar"
+            name="%DERBY101_NETWORK_EMBEDDED_DRIVER_TEMPLATE_NAME"
+            parentCategory="org.eclipse.datatools.connectivity.db.derby.10_1.driverCategory">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%DRIVER_CLASS_PROPERTY_NAME"
+                  value="com.ibm.db2.jcc.DB2Driver"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%VENDOR_PROPERTY_NAME"
+                  value="Derby"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%VERSION_PROPERTY_NAME"
+                  value="10.1"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%DATABASE_NAME_PROPERTY_NAME"
+                  value="SAMPLE"
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%CONNECTION_URL_PROPERTY_NAME"
+                  value='jdbc:derby:net://localhost:1527/"C:/DerbyDatabases/MyDB";create=true:retrieveMessagesFromServerOnGetMessage=true;'
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%USER_ID_PROPERTY_NAME"
+                  value="user"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%PASSWORD_PROPERTY_NAME"
+                  required="true"
+                  value="pwd"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>    
+      <driverTemplate
+            createDefault="false"
+            defaultDefinitionName="%DERBY101_CLIENT_DRIVER_DEFAULT_INSTANCE_NAME"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.connectivity.db.derby101.clientDriver"
+            jarList="derbyclient.jar"
+            name="%DERBY101_CLIENT_DRIVER_TEMPLATE_NAME"
+            parentCategory="org.eclipse.datatools.connectivity.db.derby.10_1.driverCategory"
+            valuesProvider="org.eclipse.datatools.connectivity.apache.internal.derby.driver.DerbyClientDriverValuesProvider">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%DRIVER_CLASS_PROPERTY_NAME"
+                  value="org.apache.derby.jdbc.ClientDriver"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%VENDOR_PROPERTY_NAME"
+                  value="Derby"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%VERSION_PROPERTY_NAME"
+                  value="10.1"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%DATABASE_NAME_PROPERTY_NAME"
+                  value="SAMPLE"
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%CONNECTION_URL_PROPERTY_NAME"
+                  value="jdbc:derby://localhost:1527/sample;create=true"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%USER_ID_PROPERTY_NAME"
+                  value="user"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%PASSWORD_PROPERTY_NAME"
+                  required="true"
+                  value="pwd"
+                  visible="true"/>
+         </properties>
+      </driverTemplate> 
+            <driverTemplate
+                  createDefault="false"
+                  defaultDefinitionName="%DERBY102_CLIENT_DRIVER_DEFAULT_INSTANCE_NAME"
+                  emptyJarListIsOK="false"
+                  id="org.eclipse.datatools.connectivity.db.derby102.clientDriver"
+                  jarList="derbyclient.jar"
+                  name="%DERBY102_CLIENT_DRIVER_TEMPLATE_NAME"
+                  parentCategory="org.eclipse.datatools.connectivity.db.derby.10_2.driverCategory"
+                  valuesProvider="org.eclipse.datatools.connectivity.apache.internal.derby.driver.DerbyClientDriverValuesProvider">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%DRIVER_CLASS_PROPERTY_NAME"
+                  value="org.apache.derby.jdbc.ClientDriver"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%VENDOR_PROPERTY_NAME"
+                  value="Derby"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%VERSION_PROPERTY_NAME"
+                  value="10.2"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%DATABASE_NAME_PROPERTY_NAME"
+                  value="SAMPLE"
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%CONNECTION_URL_PROPERTY_NAME"
+                  value="jdbc:derby://localhost:1527/sample;create=true"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%USER_ID_PROPERTY_NAME"
+                  value="user"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%PASSWORD_PROPERTY_NAME"
+                  required="true"
+                  value="pwd"
+                  visible="true"/>
+         </properties>
+      </driverTemplate> 
+      
+      <driverTemplate
+            createDefault="false"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.connectivity.db.derby102.otherDriver"
+            jarList=""
+            name="%DERBY102_OTHER_DRIVER_TEMPLATE_NAME"
+            parentCategory="org.eclipse.datatools.connectivity.db.derby.10_2.driverCategory">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%DRIVER_CLASS_PROPERTY_NAME"
+                  value=""
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%VENDOR_PROPERTY_NAME"
+                  value="Derby"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%VERSION_PROPERTY_NAME"
+                  value="10.2"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%DATABASE_NAME_PROPERTY_NAME"
+                  value=""
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%CONNECTION_URL_PROPERTY_NAME"
+                  value=""
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%USER_ID_PROPERTY_NAME"
+                  value=""
+                  required="false"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%PASSWORD_PROPERTY_NAME"
+                  value=""
+                  required="false"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+      
+      <driverTemplate
+            createDefault="false"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.connectivity.db.derby101.otherDriver"
+            jarList=""
+            name="%DERBY101_OTHER_DRIVER_TEMPLATE_NAME"
+            parentCategory="org.eclipse.datatools.connectivity.db.derby.10_1.driverCategory">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%DRIVER_CLASS_PROPERTY_NAME"
+                  value=""
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%VENDOR_PROPERTY_NAME"
+                  value="Derby"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%VERSION_PROPERTY_NAME"
+                  value="10.1"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%DATABASE_NAME_PROPERTY_NAME"
+                  value=""
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%CONNECTION_URL_PROPERTY_NAME"
+                  value=""
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%USER_ID_PROPERTY_NAME"
+                  value=""
+                  required="false"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%PASSWORD_PROPERTY_NAME"
+                  value=""
+                  required="false"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+      
+      <driverTemplate
+            createDefault="false"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.connectivity.db.derby.otherDriver"
+            jarList=""
+            name="%DERBY_OTHER_DRIVER_TEMPLATE_NAME"
+            parentCategory="org.eclipse.datatools.connectivity.db.derby.10_0.driverCategory">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%DRIVER_CLASS_PROPERTY_NAME"
+                  value=""
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%VENDOR_PROPERTY_NAME"
+                  value="Derby"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%VERSION_PROPERTY_NAME"
+                  value="10.0"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%DATABASE_NAME_PROPERTY_NAME"
+                  value=""
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%CONNECTION_URL_PROPERTY_NAME"
+                  value=""
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%USER_ID_PROPERTY_NAME"
+                  value=""
+                  required="false"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%PASSWORD_PROPERTY_NAME"
+                  value=""
+                  required="false"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+   </extension>
+   
+    <extension
+    	point="org.eclipse.datatools.connectivity.sqm.core.mappings">
+       <providerIDtoDriverCategoryID
+          driverCategoryID="org.eclipse.datatools.connectivity.db.derby.driverCategory"
+          providerID="org.eclipse.datatools.connectivity.db.derby.embedded.connectionProfile">
+       </providerIDtoDriverCategoryID>
+    </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/DerbyPlugin.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/DerbyPlugin.java
new file mode 100644
index 0000000..6995071
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/DerbyPlugin.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.internal.derby;
+
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.datatools.connectivity.apache.internal.derby.connection.DerbyShutdownService;
+import org.osgi.framework.BundleContext;
+
+public class DerbyPlugin extends Plugin
+{
+	private static DerbyPlugin plugin;
+	
+	protected DerbyShutdownService shutdownService;	
+
+	/**
+	 * The constructor.
+	 */
+	public DerbyPlugin()
+	{
+		super();
+		plugin = this;
+	}
+
+	public void start(BundleContext context) throws Exception {
+		super.start(context);		
+		shutdownService = new DerbyShutdownService();
+	}
+	
+    public void stop(BundleContext context) throws Exception {
+        shutdownService.dispose();
+        super.stop(context);
+    }
+	
+	/**
+	 * Returns the shared instance.
+	 */
+	public static DerbyPlugin getDefault()
+	{
+		return plugin;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyCatalogCheckConstraint.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyCatalogCheckConstraint.java
new file mode 100644
index 0000000..76ff797
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyCatalogCheckConstraint.java
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.internal.derby.catalog;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.Statement;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.sql.constraints.SQLConstraintsPackage;
+import org.eclipse.datatools.modelbase.sql.constraints.impl.CheckConstraintImpl;
+import org.eclipse.datatools.modelbase.sql.expressions.SQLExpressionsPackage;
+import org.eclipse.datatools.modelbase.sql.expressions.SearchCondition;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+
+public class DerbyCatalogCheckConstraint extends CheckConstraintImpl implements ICatalogObject {
+	private static final long serialVersionUID = 3257282535142011699L;
+
+	public void refresh() {
+		this.loaded = false;
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database db = getCatalogDatabase();
+		if (db instanceof ICatalogObject) {
+			return ((ICatalogObject) db).getConnection();
+		}
+		return null;
+	}
+	
+	public Database getCatalogDatabase() {
+		return this.getBaseTable().getSchema().getCatalog().getDatabase();		
+	}
+	
+	public SearchCondition getSearchCondition() {
+		if(!this.loaded) this.load();
+		return this.searchCondition;
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == SQLConstraintsPackage.CHECK_CONSTRAINT__SEARCH_CONDITION) {
+			this.getSearchCondition();
+		}
+		
+		return super.eIsSet(eFeature);
+	}
+
+	private synchronized void load() {
+		if(this.loaded) return;
+		Connection connection = this.getConnection();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			
+			String query = "SELECT CHECKDEFINITION"+ //$NON-NLS-1$
+						" FROM SYS.SYSCHECKS A,SYS.SYSCONSTRAINTS B"+ //$NON-NLS-1$
+						" WHERE A.CONSTRAINTID=B.CONSTRAINTID" + //$NON-NLS-1$
+						" AND B.CONSTRAINTNAME='"+ this.getName()+"'"; //$NON-NLS-1$ //$NON-NLS-2$
+			
+			Statement s = connection.createStatement();
+			String currentSchema = DerbySchemaLoader.setSchema(s, "SYS");
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String text = r.getString("CHECKDEFINITION"); //$NON-NLS-1$
+				DataModelElementFactory factory = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(this.getCatalogDatabase()).getDataModelElementFactory();
+				SearchCondition searchCondition = (SearchCondition) factory.create(SQLExpressionsPackage.eINSTANCE.getSearchConditionDefault());
+				searchCondition.setSQL(text);
+				this.setSearchCondition(searchCondition);
+			}
+			this.loaded = true;
+			r.close();
+			DerbySchemaLoader.setSchema(s, currentSchema);
+			s.close();
+		}
+		catch (Exception e) {
+			System.out.println(e.toString());
+		}
+		
+		this.eSetDeliver(deliver);			
+	}
+	
+	private boolean loaded = false;	
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyCatalogColumn.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyCatalogColumn.java
new file mode 100644
index 0000000..e2a3967
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyCatalogColumn.java
@@ -0,0 +1,138 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.internal.derby.catalog;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.Statement;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.IdentitySpecifier;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.impl.ColumnImpl;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+
+public class DerbyCatalogColumn extends ColumnImpl implements ICatalogObject{
+	private static final long serialVersionUID = 3257570602843189304L;
+	
+	public void refresh() {
+		this.identityLoaded = false;
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}	
+
+	public Connection getConnection() {
+		Database db = getCatalogDatabase();
+		if (db instanceof ICatalogObject) {
+			return ((ICatalogObject) db).getConnection();
+		}
+		return null;
+	}
+	
+	public Database getCatalogDatabase() {
+		Table table = (Table) this.eContainer;
+		return table.getSchema().getCatalog().getDatabase();		
+	}
+	
+	public IdentitySpecifier getIdentitySpecifier(){
+		if(!this.identityLoaded) this.loadIdentity();
+		return this.identitySpecifier;
+	}
+
+	
+	public String getDefaultValue(){
+		if(!this.identityLoaded) this.loadIdentity();
+		return this.defaultValue;
+	}
+	
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == SQLTablesPackage.COLUMN__IDENTITY_SPECIFIER) {
+			this.getIdentitySpecifier();
+		}
+		else if(id == SQLTablesPackage.COLUMN__DEFAULT_VALUE) {
+			this.getDefaultValue();
+		}
+		
+		return super.eIsSet(eFeature);
+	}
+	
+	private synchronized void loadIdentity(){
+		if(this.identityLoaded) return;
+		Connection connection = this.getConnection();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		DerbyCatalogColumn.this.loadIdentity(connection,this);
+		
+		this.eSetDeliver(deliver);			
+	}
+	
+	
+	public void loadIdentity(Connection connection, Column column){
+		try {
+			final Table table = (Table) column.eContainer();
+			final Database database = table.getSchema().getCatalog().getDatabase();;
+			final DatabaseDefinition databaseDefinition =RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+			final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+			
+			Statement s = connection.createStatement();
+			String currentSchema = DerbySchemaLoader.setSchema(s, "SYS");
+			final String query = "SELECT COLUMNDEFAULT,AUTOINCREMENTVALUE,AUTOINCREMENTSTART" + //$NON-NLS-1$
+								" FROM SYS.SYSCOLUMNS A, SYS.SYSTABLES B, SYS.SYSSCHEMAS C"+ //$NON-NLS-1$
+								" WHERE A.REFERENCEID=B.TABLEID"+ //$NON-NLS-1$
+								" AND B.TABLENAME='"+ column.getTable().getName()+"'"+  //$NON-NLS-1$//$NON-NLS-2$
+								" AND B.SCHEMAID=C.SCHEMAID" + //$NON-NLS-1$
+								" AND C.SCHEMANAME='"+ column.getTable().getSchema().getName()+"'" + //$NON-NLS-1$ //$NON-NLS-2$
+								" AND A.COLUMNNAME='" + column.getName() + "'"; //$NON-NLS-1$ //$NON-NLS-2$
+			ResultSet r = s.executeQuery(query); 
+			while(r.next()) {
+				Serializable defaultValue = (Serializable)r.getObject("COLUMNDEFAULT"); //$NON-NLS-1$
+				if (defaultValue !=null ){
+					column.setDefaultValue(defaultValue.toString());
+				}
+
+				long increment = r.getLong("AUTOINCREMENTVALUE"); //$NON-NLS-1$
+				if (increment != 0) {
+					IdentitySpecifier identitySpecifier = (IdentitySpecifier)factory.create(SQLSchemaPackage.eINSTANCE.getIdentitySpecifier());
+					identitySpecifier.setStartValue(BigInteger.valueOf(r.getLong("AUTOINCREMENTSTART"))); //$NON-NLS-1$
+					identitySpecifier.setIncrement(BigInteger.valueOf(increment));
+					column.setIdentitySpecifier(identitySpecifier);
+				}
+				
+			}
+			r.close();
+			DerbySchemaLoader.setSchema(s, currentSchema);
+			s.close();
+		}
+		catch (Exception e) {
+			System.out.println(e.toString());
+		}
+		
+	}
+	private boolean identityLoaded = false;
+	
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyCatalogProcedure.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyCatalogProcedure.java
new file mode 100644
index 0000000..a081518
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyCatalogProcedure.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.internal.derby.catalog;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCProcedure;
+
+public class DerbyCatalogProcedure extends JDBCProcedure {
+
+	private static final long serialVersionUID = 3691042079895859506L;
+	
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyCatalogSchema.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyCatalogSchema.java
new file mode 100644
index 0000000..1e85b5e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyCatalogSchema.java
@@ -0,0 +1,328 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.internal.derby.catalog;
+
+import java.lang.ref.SoftReference;
+import java.sql.Connection;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilterListener;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.DatabaseConnectionRegistry;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCRoutineLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCUserDefinedTypeLoader;
+import org.eclipse.datatools.modelbase.derby.impl.DerbySchemaImpl;
+import org.eclipse.datatools.modelbase.sql.schema.Catalog;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class DerbyCatalogSchema extends DerbySchemaImpl implements ICatalogObject {
+
+	private static final long serialVersionUID = 2498944121173713996L;
+
+	public DerbyCatalogSchema() {
+		super();
+	}
+
+	public Database getCatalogDatabase() {
+		return getCatalog().getDatabase();
+	}
+
+	public Connection getConnection() {
+		Database db = getCatalogDatabase();
+		if (db instanceof ICatalogObject) {
+			return ((ICatalogObject) db).getConnection();
+		}
+		return null;
+	}
+
+	public void refresh() {
+		synchronized (tablesLoaded) {
+			if (tablesLoaded.booleanValue()) {
+				tablesLoaded = Boolean.FALSE;
+			}
+		}
+		synchronized (routinesLoaded) {
+			if (routinesLoaded.booleanValue()) {
+				routinesLoaded = Boolean.FALSE;
+			}
+		}
+		synchronized (udtsLoaded) {
+			if (udtsLoaded.booleanValue()) {
+				udtsLoaded = Boolean.FALSE;
+			}
+		}
+
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public EList getTables() {
+		synchronized (tablesLoaded) {
+			if (!tablesLoaded.booleanValue())
+				loadTables();
+		}
+		return super.getTables();
+	}
+
+	protected JDBCTableLoader createTableLoader() {
+		return new DerbyTableLoader(this);
+	}
+
+
+	protected final JDBCTableLoader getTableLoader() {
+		if (tableLoaderRef == null || tableLoaderRef.get() == null) {
+			tableLoaderRef = new SoftReference(createTableLoader());
+		}
+		return (JDBCTableLoader) tableLoaderRef.get();
+	}
+
+	private void loadTables() {
+		synchronized (tablesLoaded) {
+			boolean deliver = eDeliver();
+			try {
+				List container = super.getTables();
+				List existingTables = new ArrayList(container);
+				
+				eSetDeliver(false);
+
+				container.clear();
+
+				getTableLoader().loadTables(container, existingTables);
+
+				getTableLoader().clearTables(existingTables);
+
+				tablesLoaded = Boolean.TRUE;
+			}
+			catch (Exception e) {
+				e.printStackTrace();
+			}
+			finally {
+				eSetDeliver(deliver);
+			}
+		}
+	}
+
+	private String getTableFilterKey() {
+		return getCatalog().getName() + ConnectionFilter.FILTER_SEPARATOR
+				+ getName() + ConnectionFilter.FILTER_SEPARATOR
+				+ ConnectionFilter.TABLE_FILTER;
+	}
+
+	public EList getRoutines() {
+		synchronized (routinesLoaded) {
+			if (!routinesLoaded.booleanValue())
+				loadRoutines();
+		}
+		return super.getRoutines();
+	}
+
+	protected JDBCRoutineLoader createRoutineLoader() {
+		return new DerbyRoutineLoader(this);
+	}
+
+	protected final JDBCRoutineLoader getRoutineLoader() {
+		if (routineLoaderRef == null || routineLoaderRef.get() == null) {
+			routineLoaderRef = new SoftReference(createRoutineLoader());
+		}
+		return (JDBCRoutineLoader) routineLoaderRef.get();
+	}
+
+	private void loadRoutines() {
+		synchronized (routinesLoaded) {
+			boolean deliver = eDeliver();
+			try {
+				List container = super.getRoutines();
+				List existingRoutines = new ArrayList(container);
+				
+				eSetDeliver(false);
+
+				container.clear();
+
+				getRoutineLoader().loadRoutines(container, existingRoutines);
+
+				getRoutineLoader().clearRoutines(existingRoutines);
+
+				routinesLoaded = Boolean.TRUE;
+			}
+			catch (Exception e) {
+				e.printStackTrace();
+			}
+			finally {
+				eSetDeliver(deliver);
+			}
+		}
+	}
+
+	private String getRoutineFilterKey() {
+		return getCatalog().getName() + ConnectionFilter.FILTER_SEPARATOR
+				+ getName() + ConnectionFilter.FILTER_SEPARATOR
+				+ ConnectionFilter.STORED_PROCEDURE_FILTER;
+	}
+
+	public EList getUserDefinedTypes() {
+		synchronized (udtsLoaded) {
+			if (!routinesLoaded.booleanValue())
+				loadUDTs();
+		}
+		return super.getUserDefinedTypes();
+	}
+
+	protected JDBCUserDefinedTypeLoader createUDTLoader() {
+		return new JDBCUserDefinedTypeLoader(this);
+	}
+
+	protected final JDBCUserDefinedTypeLoader getUDTLoader() {
+		if (udtLoaderRef == null || udtLoaderRef.get() == null) {
+			udtLoaderRef = new SoftReference(createUDTLoader());
+		}
+		return (JDBCUserDefinedTypeLoader) udtLoaderRef.get();
+	}
+
+	private void loadUDTs() {
+		synchronized (routinesLoaded) {
+			boolean deliver = eDeliver();
+			try {
+				List container = super.getUserDefinedTypes();
+				List existingUDTs = new ArrayList(container);
+				
+				eSetDeliver(false);
+
+				container.clear();
+
+				getUDTLoader().loadUDTs(container, existingUDTs);
+
+				getUDTLoader().clearUDTs(existingUDTs);
+
+				udtsLoaded = Boolean.TRUE;
+			}
+			catch (Exception e) {
+				e.printStackTrace();
+			}
+			finally {
+				eSetDeliver(deliver);
+			}
+		}
+	}
+
+	private String getUDTFilterKey() {
+		return getCatalog().getName() + ConnectionFilter.FILTER_SEPARATOR
+				+ getName() + ConnectionFilter.FILTER_SEPARATOR
+				+ ConnectionFilter.USER_DEFINED_TYPE_FILTER;
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		switch (eDerivedStructuralFeatureID(eFeature)) {
+		case SQLSchemaPackage.SCHEMA__TABLES:
+			getTables();
+			break;
+		case SQLSchemaPackage.SCHEMA__ROUTINES:
+			getRoutines();
+			break;
+		case SQLSchemaPackage.SCHEMA__USER_DEFINED_TYPES:
+			getUserDefinedTypes();
+			break;
+		}
+		return super.eIsSet(eFeature);
+	}
+
+	/**
+	 * @generated NOT
+	 */
+	public NotificationChain basicSetCatalog(Catalog newCatalog,
+			NotificationChain msgs) {
+		if (catalog != null && catalog.getDatabase() != null) {
+			ConnectionInfo connectionInfo = DatabaseConnectionRegistry
+					.getInstance().getConnectionForDatabase(
+							catalog.getDatabase());
+			connectionInfo.removeFilterListener(filterListener);
+		}
+		if (newCatalog != null && newCatalog.getDatabase() != null) {
+			ConnectionInfo connectionInfo = DatabaseConnectionRegistry
+					.getInstance().getConnectionForDatabase(
+							newCatalog.getDatabase());
+			connectionInfo.addFilterListener(filterListener);
+		}
+		return super.basicSetCatalog(newCatalog, msgs);
+	}
+
+	private void handleFilterChanged(String filterKey) {
+		boolean refresh = false;
+		if (catalog == null || catalog.getDatabase() == null) return;
+		ConnectionInfo conInf = DatabaseConnectionRegistry.getInstance()
+				.getConnectionForDatabase(getCatalogDatabase());
+		if (tablesLoaded.booleanValue()
+				&& filterKey.equals(getTableFilterKey())
+				|| (conInf != null
+						&& conInf.getFilter(getTableFilterKey()) == null && (ConnectionFilter.TABLE_FILTER
+						.equals(filterKey) || filterKey.equals(getCatalog()
+						.getName()
+						+ ConnectionFilter.FILTER_SEPARATOR
+						+ ConnectionFilter.TABLE_FILTER)))) {
+			tablesLoaded = Boolean.FALSE;
+			getTableLoader().clearTables(super.getTables());
+			refresh = true;
+		}
+		if (routinesLoaded.booleanValue()
+				&& filterKey.equals(getRoutineFilterKey())
+				|| (conInf != null
+						&& conInf.getFilter(getRoutineFilterKey()) == null && (ConnectionFilter.STORED_PROCEDURE_FILTER
+						.equals(filterKey) || filterKey.equals(getCatalog()
+						.getName()
+						+ ConnectionFilter.FILTER_SEPARATOR
+						+ ConnectionFilter.STORED_PROCEDURE_FILTER)))) {
+			routinesLoaded = Boolean.FALSE;
+			getRoutineLoader().clearRoutines(super.getRoutines());
+			refresh = true;
+		}
+		if (udtsLoaded.booleanValue()
+				&& filterKey.equals(getUDTFilterKey())
+				|| (conInf != null
+						&& conInf.getFilter(getUDTFilterKey()) == null && (ConnectionFilter.USER_DEFINED_TYPE_FILTER
+						.equals(filterKey) || filterKey.equals(getCatalog()
+						.getName()
+						+ ConnectionFilter.FILTER_SEPARATOR
+						+ ConnectionFilter.USER_DEFINED_TYPE_FILTER)))) {
+			udtsLoaded = Boolean.FALSE;
+			getUDTLoader().clearUDTs(super.getUserDefinedTypes());
+			refresh = true;
+		}
+		if (refresh) {
+			RefreshManager.getInstance().referesh(this);
+		}
+	}
+
+	private Boolean tablesLoaded = Boolean.FALSE;
+	private SoftReference tableLoaderRef;
+	private Boolean routinesLoaded = Boolean.FALSE;
+	private SoftReference routineLoaderRef;
+	private Boolean udtsLoaded = Boolean.FALSE;
+	private SoftReference udtLoaderRef;
+	private transient ConnectionFilterListener filterListener = new ConnectionFilterListener() {
+
+		public void connectionFilterAdded(String filterKey) {
+			handleFilterChanged(filterKey);
+		}
+
+		public void connectionFilterRemoved(String filterKey) {
+			handleFilterChanged(filterKey);
+		}
+
+	};
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyCatalogSynonym.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyCatalogSynonym.java
new file mode 100644
index 0000000..5d13b00
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyCatalogSynonym.java
@@ -0,0 +1,221 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.internal.derby.catalog;
+
+import java.lang.ref.SoftReference;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.core.util.CatalogLoaderOverrideManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCBaseLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableColumnLoader;
+import org.eclipse.datatools.modelbase.derby.DerbyModelPackage;
+import org.eclipse.datatools.modelbase.derby.impl.SynonymImpl;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class DerbyCatalogSynonym extends SynonymImpl implements ICatalogObject {
+	private static final long serialVersionUID = 3257804259579074800L;
+
+	private Boolean columnsLoaded = Boolean.FALSE;
+	private SoftReference columnLoaderRef;
+	private Boolean aliasedTableLoaded = Boolean.FALSE;
+
+	public void refresh() {
+		synchronized (columnsLoaded) {
+			if (columnsLoaded.booleanValue()) {
+				columnsLoaded = Boolean.FALSE;
+			}
+		}
+		synchronized (aliasedTableLoaded) {
+			if (aliasedTableLoaded.booleanValue()) {
+				aliasedTableLoaded = Boolean.FALSE;
+			}
+		}
+
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public Connection getConnection() {
+		Database db = this.getCatalogDatabase();
+		if (db instanceof ICatalogObject) {
+			return ((ICatalogObject) db).getConnection();
+		}
+		return null;
+	}
+	
+	public Database getCatalogDatabase() {
+		return this.getSchema().getCatalog().getDatabase();		
+	}
+	
+	public EList getColumns() {
+		synchronized (columnsLoaded) {
+			if (!columnsLoaded.booleanValue())
+				loadColumns();
+		}
+		return this.columns;
+	}
+
+	protected JDBCTableColumnLoader createColumnLoader() {
+		DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().
+			getDefinition(this.getCatalogDatabase());
+	
+		JDBCBaseLoader loader =
+			CatalogLoaderOverrideManager.INSTANCE.getLoaderForDatabase(databaseDefinition, 
+					SQLTablesPackage.eINSTANCE.getColumn().getInstanceClassName());
+		
+		if (loader != null) {
+			JDBCTableColumnLoader tableColumnLoader = (JDBCTableColumnLoader) loader;
+			tableColumnLoader.setCatalogObject(this);
+			return tableColumnLoader;
+		}
+		return new JDBCTableColumnLoader(this);
+	}
+
+	protected final JDBCTableColumnLoader getColumnLoader() {
+		if (columnLoaderRef == null || columnLoaderRef.get() == null) {
+			columnLoaderRef = new SoftReference(createColumnLoader());
+		}
+		return (JDBCTableColumnLoader) columnLoaderRef.get();
+	}
+
+	private void loadColumns() {
+		boolean deliver = eDeliver();
+		try {
+			List container = super.getColumns();
+			List existingColumns = new ArrayList(container);
+
+			eSetDeliver(false);
+
+			container.clear();
+
+			getColumnLoader().loadColumns(container, existingColumns);
+
+			getColumnLoader().clearColumns(existingColumns);
+
+			columnsLoaded = Boolean.TRUE;
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		finally {
+			eSetDeliver(deliver);
+		}
+	}
+	
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == SQLTablesPackage.TABLE__COLUMNS) {
+			this.getColumns();
+		}
+		else if(id == DerbyModelPackage.SYNONYM__DESCRIPTION) {
+			this.getDescription();
+		}
+		else if(id == DerbyModelPackage.SYNONYM__TABLE) {
+			this.getAliasedTable();
+		}
+		else if(id == DerbyModelPackage.SYNONYM__COLUMNS) {
+			this.getColumns();
+		}
+		else if (id==SQLTablesPackage.TABLE__COMMENTS) {
+			return comments != null;
+		}
+		
+		return super.eIsSet(eFeature);
+	}
+	
+	public Table getAliasedTable() {
+		synchronized (aliasedTableLoaded) {
+			if (!aliasedTableLoaded.booleanValue())
+				loadAliasedTable();
+		}
+		return this.table;
+	}
+	
+	private Schema getSchema(String schemaName) {
+		Schema s = this.getSchema();
+		if(s.getName().equals(schemaName)) return s;
+		Database d = s.getCatalog().getDatabase();
+		Iterator it = d.getSchemas().iterator();
+		while(it.hasNext()) {
+			s = (Schema) it.next();
+			if(s.getName().equals(schemaName)) return s;
+		}
+		Schema schema = new DerbyCatalogSchema();
+		schema.setName(schemaName);
+		schema.setCatalog(s.getCatalog());
+		schema.setDatabase(d);
+		
+		return schema;
+	}
+
+	private Table getTable(String schemaName, String tableName) {
+		Schema schema = this.getSchema(schemaName);
+		Iterator it = schema.getTables().iterator();
+		while(it.hasNext()) {
+			Table table = (Table) it.next();
+			if(table.getName().equals(tableName)) return table;			
+		}
+		Table table = new DerbyCatalogTable();
+		table.setName(tableName);
+		table.setSchema(schema);
+		return table;		
+	}
+
+	private synchronized void loadAliasedTable() {
+		if (aliasedTableLoaded.booleanValue())
+			return;
+
+		Connection connection = this.getConnection();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+
+			String query = "SELECT TABLENAME,TABLETYPE" + //$NON-NLS-1$
+			" FROM SYS.SYSTABLES A,SYS.SYSSCHEMAS B"+ //$NON-NLS-1$
+			" WHERE A.SCHEMAID=B.SCHEMAID" + //$NON-NLS-1$
+			" AND TABLETYPE='A'"; //$NON-NLS-1$ //$NON-NLS-2$
+
+			Statement s = connection.createStatement();
+			String currentSchema = DerbySchemaLoader.setSchema(s, "SYS");
+			ResultSet r = s.executeQuery(query);
+			
+			while (r.next()) {
+				final String tableName = r.getString("TABLENAME"); //$NON-NLS-1$
+				this.setTable(this.getTable(this.getSchema().getName(), tableName));
+				
+				this.aliasedTableLoaded = Boolean.TRUE;
+			}
+			r.close();
+			DerbySchemaLoader.setSchema(s, currentSchema);
+			s.close();
+		}
+		catch (Exception e) {
+		}
+		
+		this.eSetDeliver(deliver);
+	}
+	
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyCatalogTable.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyCatalogTable.java
new file mode 100644
index 0000000..6ffcf49
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyCatalogTable.java
@@ -0,0 +1,230 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.internal.derby.catalog;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.Statement;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCTable;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableColumnLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableConstraintLoader;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.statements.SQLStatement;
+import org.eclipse.datatools.modelbase.sql.statements.SQLStatementDefault;
+import org.eclipse.datatools.modelbase.sql.statements.SQLStatementsPackage;
+import org.eclipse.datatools.modelbase.sql.tables.ActionGranularityType;
+import org.eclipse.datatools.modelbase.sql.tables.ActionTimeType;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import com.ibm.icu.util.StringTokenizer;
+
+public class DerbyCatalogTable extends JDBCTable {
+
+	private static final long serialVersionUID = 1426200108473580544L;
+
+	private boolean triggerLoaded = false;
+
+	public DerbyCatalogTable() {
+		super();
+	}
+
+	public synchronized void refresh() {
+		if(this.triggerLoaded) this.triggerLoaded = false;
+		super.refresh();
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if ( id == SQLTablesPackage.TABLE__TRIGGERS ) {
+			this.getTriggers();
+		}
+		return super.eIsSet(eFeature);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCTable#createConstraintLoader()
+	 */
+	protected JDBCTableConstraintLoader createConstraintLoader() {
+		return new DerbyTableConstraintLoader(this);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCTable#getSupertable()
+	 */
+	public Table getSupertable() {
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCTable#createColumnLoader()
+	 */
+	protected JDBCTableColumnLoader createColumnLoader() {
+		return new DerbyTableColumnLoader(this);
+	}
+
+	private Schema getSchema(String schemaName) {
+		Schema s = this.getSchema();
+		if(s.getName().equals(schemaName)) return s;
+		Database d = s.getCatalog().getDatabase();
+		Iterator it = d.getSchemas().iterator();
+		while(it.hasNext()) {
+			s = (Schema) it.next();
+			if(s.getName().equals(schemaName)) return s;
+		}
+		Schema schema = new DerbyCatalogSchema();
+		schema.setName(schemaName);
+		schema.setCatalog(s.getCatalog());
+		schema.setDatabase(d);
+		
+		return schema;
+	}
+
+	private synchronized void loadTriggers(){
+		if(this.triggerLoaded) return;
+		EList triggerList = super.getTriggers();
+		Object[] list = triggerList.toArray();
+		clearTriggers(triggerList);
+		Connection connection = this.getConnection();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+
+		try {
+			DataModelElementFactory factory = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(this.getCatalogDatabase()).getDataModelElementFactory();
+
+			Statement s = connection.createStatement();
+			String currentSchema = DerbySchemaLoader.setSchema(s, "SYS");
+			final String query = "SELECT TRIGGERNAME, SCHEMANAME,EVENT,FIRINGTIME,TYPE,TRIGGERDEFINITION" + //$NON-NLS-1$
+								",REFERENCINGOLD,REFERENCINGNEW,OLDREFERENCINGNAME,NEWREFERENCINGNAME,REFERENCEDCOLUMNS" + //$NON-NLS-1$
+								" FROM SYS.SYSTRIGGERS A, SYS.SYSTABLES B, SYS.SYSSCHEMAS C"+ //$NON-NLS-1$
+								" WHERE A.TABLEID=B.TABLEID"+ //$NON-NLS-1$
+								" AND B.TABLENAME='"+ this.getName()+"'"+  //$NON-NLS-1$//$NON-NLS-2$
+								" AND A.SCHEMAID=C.SCHEMAID"; //$NON-NLS-1$
+			ResultSet r = s.executeQuery(query); 
+			while(r.next()) {
+				DerbyCatalogTrigger trigger;
+				final String trigName = r.getString("TRIGGERNAME"); //$NON-NLS-1$
+
+				Object element = findTrigger(list, trigName);
+				
+				if (element != null){
+					trigger = (DerbyCatalogTrigger) element;
+					((ICatalogObject)element).refresh();
+				} else {
+					trigger = new DerbyCatalogTrigger();
+					trigger.setName(trigName);
+				}	
+				
+				
+				
+				trigger.setName(trigName);
+				
+				final String trigSchema = r.getString("SCHEMANAME"); //$NON-NLS-1$
+				trigger.setSchema(this.getSchema(trigSchema));
+
+				final String trigTime = r.getString("FIRINGTIME"); //$NON-NLS-1$
+				if(trigTime.equals("A")) trigger.setActionTime(ActionTimeType.AFTER_LITERAL); //$NON-NLS-1$
+				else if(trigTime.equals("B")) trigger.setActionTime(ActionTimeType.BEFORE_LITERAL); //$NON-NLS-1$
+				else if(trigTime.equals("I")) trigger.setActionTime(ActionTimeType.INSTEADOF_LITERAL); //$NON-NLS-1$
+				else continue;
+				
+				final String trigEvent = r.getString("EVENT"); //$NON-NLS-1$
+				if(trigEvent.equals("I")) trigger.setInsertType(true); //$NON-NLS-1$
+				if(trigEvent.equals("D")) trigger.setDeleteType(true); //$NON-NLS-1$
+				if(trigEvent.equals("U")) trigger.setUpdateType(true); //$NON-NLS-1$
+
+				final String granularity = r.getString("TYPE"); //$NON-NLS-1$
+				if(granularity.equals("S")) trigger.setActionGranularity(ActionGranularityType.STATEMENT_LITERAL); //$NON-NLS-1$
+				else if(granularity.equals("R")) trigger.setActionGranularity(ActionGranularityType.ROW_LITERAL); //$NON-NLS-1$
+				else continue;
+				
+				final boolean referencingOld = r.getBoolean("REFERENCINGOLD"); //$NON-NLS-1$
+				if (referencingOld) {
+					trigger.setOldRow(r.getString("OLDREFERENCINGNAME")); //$NON-NLS-1$
+				}
+
+				final boolean referencingNew = r.getBoolean("REFERENCINGNEW"); //$NON-NLS-1$
+				if (referencingNew) {
+					trigger.setNewRow(r.getString("NEWREFERENCINGNAME")); //$NON-NLS-1$
+				}
+
+				String columns = r.getString("REFERENCEDCOLUMNS"); //$NON-NLS-1$
+				if (columns != null){
+					EList updateColumns = trigger.getTriggerColumn();
+		            EList columnList = this.getColumns();
+		            columns = columns.substring(columns.indexOf("(")+1,columns.indexOf(")")); //$NON-NLS-1$ //$NON-NLS-2$
+			        StringTokenizer tokenizer = new StringTokenizer(columns, ","); //$NON-NLS-1$
+			        while (tokenizer.hasMoreTokens()) {
+			            String token = tokenizer.nextToken().trim();
+			            Column column = (Column) columnList.get(Integer.parseInt(token)-1);
+			            updateColumns.add(column);
+			        }
+				}
+				
+				//body
+				final String text = r.getString("TRIGGERDEFINITION"); //$NON-NLS-1$
+				SQLStatement body = (SQLStatement) factory.create(SQLStatementsPackage.eINSTANCE.getSQLStatementDefault());
+				((SQLStatementDefault)body).setSQL(text);
+				trigger.getActionStatement().add(body);
+				
+				triggerList.add(trigger);
+			}
+
+			this.triggerLoaded = true;
+			r.close();
+			DerbySchemaLoader.setSchema(s, currentSchema);
+			s.close();
+			
+		}catch (Exception e){
+			System.out.println(e.toString());
+		}
+		
+		this.eSetDeliver(deliver);
+		
+	}
+	
+	private void clearTriggers(EList triggerList) {
+		for (Iterator it = triggerList.iterator(); it.hasNext();) {
+			DerbyCatalogTrigger trigger = (DerbyCatalogTrigger)it.next();
+			trigger.getActionStatement().clear();
+			trigger.setSchema(null);
+		}
+		triggerList.clear();
+	}
+
+	public EList getTriggers() {
+		if(!this.triggerLoaded) this.loadTriggers();
+		return this.triggers;
+	}
+
+	protected Object findTrigger(Object[] list, String name){
+		Object object = null;
+		for (int i = 0; i < list.length; i++){
+			SQLObject sqlObject = (SQLObject) list[i];
+			if (sqlObject.getName().equals(name) && sqlObject.eClass() == SQLTablesPackage.eINSTANCE.getTrigger() ){
+				object = list[i];
+				break;
+			}
+		}
+		return object;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyCatalogTrigger.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyCatalogTrigger.java
new file mode 100644
index 0000000..9298b27
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyCatalogTrigger.java
@@ -0,0 +1,115 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.internal.derby.catalog;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.Statement;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.datatools.modelbase.sql.tables.impl.TriggerImpl;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class DerbyCatalogTrigger extends TriggerImpl implements ICatalogObject {
+	private static final long serialVersionUID = 3976740254881363508L;
+
+	public void refresh() {
+		if (this.columnLoaded) {
+			this.triggerColumn.clear();
+			this.columnLoaded = false;
+		}
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public EList getTriggerColumn() {
+		if(!this.columnLoaded) this.loadColumn();
+		return this.triggerColumn;
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database db = this.getCatalogDatabase();
+		if (db instanceof ICatalogObject) {
+			return ((ICatalogObject) db).getConnection();
+		}
+		return null;
+	}
+
+	public Database getCatalogDatabase() {
+		
+		if(this.getSchema().getDatabase() != null)
+			return this.getSchema().getDatabase();
+		else
+			return this.getSchema().getCatalog().getDatabase();
+	}
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == SQLTablesPackage.TRIGGER__TRIGGER_COLUMN) {
+			this.getTriggerColumn();
+		}
+		return super.eIsSet(eFeature);
+	}
+	private synchronized void loadColumn() {
+		if(this.columnLoaded ||!this.isUpdateType()) return;
+		EList columnList = super.getTriggerColumn();
+		Connection connection = this.getConnection();
+		if(connection == null) return;
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			final String query = "SELECT REFERENCEDCOLUMNS" + //$NON-NLS-1$
+			" FROM SYS.SYSTRIGGERS A, SYS.SYSTABLES B, SYS.SYSSCHEMAS C"+ //$NON-NLS-1$
+			" WHERE A.TABLEID=B.TABLEID"+ //$NON-NLS-1$
+			" AND B.TABLENAME='"+ this.getSubjectTable()+"'"+ //$NON-NLS-1$ //$NON-NLS-2$
+			" AND A.SCHEMAID=C.SCHEMAID"; //$NON-NLS-1$
+			
+			Statement s = connection.createStatement();
+			String currentSchema = DerbySchemaLoader.setSchema(s, "SYS");
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String colName = r.getString("REFERENCEDCOLUMNS"); //$NON-NLS-1$
+				/* The columns might be in a string with comma as the separator */
+				columnList.add(this.getColumn(colName));
+			}
+			this.columnLoaded = true;
+			r.close();
+			DerbySchemaLoader.setSchema(s, currentSchema);
+			s.close();
+		}
+		catch (Exception e) {
+		}
+		
+		this.eSetDeliver(deliver);		
+	}
+	
+	private Column getColumn(String columnName) {
+		Iterator it = this.getSubjectTable().getColumns().iterator();
+		while(it.hasNext()) {
+			Column c = (Column) it.next();
+			if(c.getName().equals(columnName)) return c;
+		}
+		return null;
+	}
+
+	private boolean columnLoaded = false;
+	
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyCatalogUserDefinedFunction.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyCatalogUserDefinedFunction.java
new file mode 100644
index 0000000..30f933f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyCatalogUserDefinedFunction.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.internal.derby.catalog;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCUserDefinedFunction;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCUDFColumnLoader;
+
+public class DerbyCatalogUserDefinedFunction extends JDBCUserDefinedFunction {
+	private static final long serialVersionUID = 3905244528465163826L;
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCUserDefinedFunction#createParameterLoader()
+	 */
+	protected JDBCUDFColumnLoader createParameterLoader() {
+		return new DerbyUserDefinedFunctionParameterLoader(this);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyCatalogView.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyCatalogView.java
new file mode 100644
index 0000000..57ce71f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyCatalogView.java
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.internal.derby.catalog;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.Statement;
+
+import org.eclipse.datatools.connectivity.apache.internal.derby.ddl.DerbyDdlParser;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCView;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.sql.expressions.QueryExpression;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.tables.CheckType;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class DerbyCatalogView extends JDBCView {
+	private static final long serialVersionUID = 3258125856181269553L;
+	
+	public void refresh() {
+		this.viewLoaded = false;
+		super.refresh();
+	}
+	
+	public QueryExpression getQueryExpression() {
+		if(!this.viewLoaded) this.loadView();
+		return this.queryExpression;
+	}
+	
+	public CheckType getCheckType() {
+		if(!this.viewLoaded) this.loadView();
+		return this.checkType;
+	}
+	
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == SQLTablesPackage.VIEW_TABLE__COLUMNS) {
+			this.getColumns();
+		}
+		if(id == SQLTablesPackage.VIEW_TABLE__CHECK_TYPE) {
+			this.getCheckType();
+		}
+		if(id == SQLTablesPackage.VIEW_TABLE__QUERY_EXPRESSION) {
+			this.getQueryExpression();
+		}
+		return super.eIsSet(eFeature);
+	}
+	
+	private synchronized void loadView() {
+		if(this.viewLoaded) return;
+		Connection connection = this.getConnection();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			Statement s = connection.createStatement();
+			String currentSchema = DerbySchemaLoader.setSchema(s, "SYS");
+			String query=" SELECT CHECKOPTION, VIEWDEFINITION" + //$NON-NLS-1$
+						" FROM SYS.SYSVIEWS A, SYS.SYSTABLES B, SYS.SYSSCHEMAS C" + //$NON-NLS-1$
+						" WHERE A.TABLEID=B.TABLEID"+ //$NON-NLS-1$
+						" AND B.TABLENAME='"+ this.getName() +"'"+ //$NON-NLS-1$ //$NON-NLS-2$
+						" AND B.SCHEMAID=C.SCHEMAID"+ //$NON-NLS-1$
+						" AND C.SCHEMANAME='"+this.getSchema().getName()+"'";  //$NON-NLS-1$//$NON-NLS-2$
+			ResultSet r = s.executeQuery(query);
+			while (r.next()){
+				final String viewCheck = r.getString("CHECKOPTION"); //$NON-NLS-1$
+				if(viewCheck.equals("N")) this.setCheckType(CheckType.NONE_LITERAL); //$NON-NLS-1$
+				else if(viewCheck.equals("L")) this.setCheckType(CheckType.LOCAL_LITERAL); //$NON-NLS-1$
+				else if(viewCheck.equals("C")) this.setCheckType(CheckType.CASCADED_LITERAL); //$NON-NLS-1$
+	
+				final String text = r.getString("VIEWDEFINITION"); //$NON-NLS-1$
+				DerbyDdlParser ddlParser = new DerbyDdlParser(this.getDatabaseDefinition());
+				ddlParser.parseView(this,text);
+				
+				
+			}
+			this.viewLoaded = true;
+			r.close();
+			DerbySchemaLoader.setSchema(s, currentSchema);
+			s.close();
+		}
+		catch (Exception e) {
+			System.out.println(e.toString());
+		}
+		
+		this.eSetDeliver(deliver);
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCTable#getSupertable()
+	 */
+	public Table getSupertable() {
+		return null;
+	}
+
+	private DatabaseDefinition getDatabaseDefinition() {
+		Database d = this.getSchema().getCatalog().getDatabase();
+		return RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(d);
+	}
+	
+	private boolean viewLoaded= false;
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyRoutineLoader.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyRoutineLoader.java
new file mode 100644
index 0000000..e378363
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyRoutineLoader.java
@@ -0,0 +1,239 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.internal.derby.catalog;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.apache.internal.derby.DerbyPlugin;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.loader.IConnectionFilterProvider;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCRoutineLoader;
+import org.eclipse.datatools.modelbase.sql.routines.DataAccess;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesPackage;
+import org.eclipse.datatools.modelbase.sql.routines.Source;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+
+import com.ibm.icu.util.StringTokenizer;
+
+public class DerbyRoutineLoader extends JDBCRoutineLoader {
+
+	private String currentSchema;
+
+	public DerbyRoutineLoader(ICatalogObject catalogObject) {
+		super(catalogObject);
+		this.setProcedureFactory(new DerbyProcedureFactory(catalogObject));
+		this.setUserDefinedFunctionFactory(new DerbyUserDefinedFunctionFactory(catalogObject));
+	}
+
+	public DerbyRoutineLoader(ICatalogObject catalogObject,
+			IConnectionFilterProvider connectionFilterProvider,
+			IRoutineFactory udfFactory, IRoutineFactory spFactory) {
+		super(catalogObject, connectionFilterProvider, udfFactory, spFactory);
+		this.setProcedureFactory(new DerbyProcedureFactory(catalogObject));
+		this.setUserDefinedFunctionFactory(new DerbyUserDefinedFunctionFactory(catalogObject));
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCRoutineLoader#createResultSet()
+	 */
+	protected ResultSet createResultSet() throws SQLException {
+		Schema schema = (Schema) getCatalogObject();
+		String query = "SELECT ALIAS AS " + COLUMN_PROCEDURE_NAME + ",ALIASTYPE," + //$NON-NLS-1$ //$NON-NLS-2$
+				" CAST(NULL AS VARCHAR(1)) AS REMARKS, ALIAS, JAVACLASSNAME, ALIASINFO " + //$NON-NLS-1$
+				" FROM SYS.SYSALIASES A,SYS.SYSSCHEMAS B" + //$NON-NLS-1$
+				" WHERE A.ALIASTYPE IN ('P','F')" + //$NON-NLS-1$
+				" AND A.SCHEMAID=B.SCHEMAID" + //$NON-NLS-1$
+				" AND B.SCHEMANAME='" + schema.getName() + "'"; //$NON-NLS-1$//$NON-NLS-2$
+		if (getJDBCFilterPattern() != null
+				&& getJDBCFilterPattern().length() > 0) {
+			String filter = " AND ALIAS LIKE " + getJDBCFilterPattern();//$NON-NLS-1$
+			query = query + filter;
+		}
+
+		Statement s = getCatalogObject().getConnection().createStatement();
+		currentSchema = DerbySchemaLoader.setSchema(s, "SYS");
+		ResultSet r = s.executeQuery(query);
+		return r;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCRoutineLoader#closeResultSet(java.sql.ResultSet)
+	 */
+	protected void closeResultSet(ResultSet rs) {
+		Statement s = null;
+		try {
+			s = rs.getStatement();
+		} catch (SQLException e) {
+		}
+		
+		super.closeResultSet(rs);
+		
+		try {
+			DerbySchemaLoader.setSchema(s, currentSchema);
+		} catch (SQLException e) {
+		}
+	}
+
+	protected boolean isProcedure(ResultSet rs) throws SQLException {
+		String type      = rs.getString("ALIASTYPE"); //$NON-NLS-1$
+		if(type.equals("P"))  //$NON-NLS-1$
+			return true;
+		return false;
+	}
+
+	public static class DerbyProcedureFactory extends ProcedureFactory {
+		
+		private ICatalogObject catalogObject;
+		
+		public DerbyProcedureFactory(ICatalogObject catalogObject) {
+			this.catalogObject = catalogObject;
+		}
+
+		protected Routine newRoutine() {
+			return new DerbyCatalogProcedure();
+		}
+
+		public void initialize(Routine routine, ResultSet rs) throws SQLException {
+			super.initialize(routine, rs);
+			setRestOfMetaData(routine,rs,catalogObject);
+		}
+
+	}
+	
+	public static class DerbyUserDefinedFunctionFactory extends UserDefinedFunctionFactory {
+		
+		private ICatalogObject catalogObject;
+		
+		public DerbyUserDefinedFunctionFactory(ICatalogObject catalogObject) {
+			this.catalogObject = catalogObject;
+		}
+
+		protected Routine newRoutine() {
+			return new DerbyCatalogUserDefinedFunction();
+		}
+
+		public void initialize(Routine routine, ResultSet rs) throws SQLException {
+			super.initialize(routine, rs);
+			setRestOfMetaData(routine,rs,catalogObject);
+		}
+
+	}
+
+	private static final String rsKeyword = "RESULT SETS"; //$NON-NLS-1$
+
+	private static void setRestOfMetaData(Routine routine, ResultSet rs,
+			ICatalogObject catalogObject) {
+		routine.setLanguage("JAVA"); //$NON-NLS-1$
+		routine.setParameterStyle("JAVA"); //$NON-NLS-1$
+
+		try {
+
+			// Set SQL Data Access
+			String aliasInfoString = rs.getString("ALIASINFO"); //$NON-NLS-1$
+			setSqlDataAccess(routine, aliasInfoString);
+
+			// It appears that the aliasInfo object is not returned in the
+			// resultset
+			// if the connection is made using the DB2 Universal Driver.
+			// So we will parse the string instead of executing the methods on
+			// the object to obtain the information needed.
+			// 
+			int index = aliasInfoString.lastIndexOf(rsKeyword);
+			if (index != -1) {
+				StringTokenizer tokenizer = new StringTokenizer(aliasInfoString
+						.substring(index + rsKeyword.length()));
+				String nextToken = tokenizer.nextToken();
+
+				// If for some reason, the next token is not a number, just
+				// ignore it.
+				try {
+					int resultSets = Integer.parseInt(nextToken);
+					((Procedure) routine).setMaxResultSets(resultSets);
+				}
+
+				catch (Exception e) {
+				}
+			}
+
+			// Set External name
+			index = aliasInfoString.indexOf("("); //$NON-NLS-1$
+			String methodName = aliasInfoString.substring(0, index);
+			routine
+					.setExternalName(rs.getString("JAVACLASSNAME") + '.' + methodName); //$NON-NLS-1$
+			loadSource(routine, aliasInfoString, catalogObject
+					.getCatalogDatabase());
+
+		}
+		catch (Exception e) {
+			Status status = new Status(
+					Status.ERROR,
+					DerbyPlugin.getDefault().getBundle().getSymbolicName(),
+					Status.ERROR,
+					"###Error..org.eclipse.datatools.connectivity.internal.derby.catalog.DerbyCatalogProcedure.load", //$NON-NLS-1$
+					e);
+			DerbyPlugin.getDefault().getLog().log(status);
+		}
+	}
+
+	private static void setSqlDataAccess(Routine routine, String aliasInfo) {
+		int index = aliasInfo.indexOf("NO SQL"); //$NON-NLS-1$
+		if (index != -1) {
+			routine.setSqlDataAccess(DataAccess.NO_SQL_LITERAL);
+		}
+		else {
+			index = aliasInfo.indexOf("MODIFIES SQL DATA"); //$NON-NLS-1$
+			if (index != -1) {
+				routine.setSqlDataAccess(DataAccess.MODIFIES_SQL_DATA_LITERAL);
+
+			}
+			else {
+				index = aliasInfo.indexOf("CONTAINS SQL"); //$NON-NLS-1$
+				if (index != -1) {
+					routine.setSqlDataAccess(DataAccess.CONTAINS_SQL_LITERAL);
+
+				}
+				else {
+					index = aliasInfo.indexOf("READS SQL DATA"); //$NON-NLS-1$
+					if (index != -1) {
+						routine
+								.setSqlDataAccess(DataAccess.READS_SQL_DATA_LITERAL);
+					}
+				}
+			}
+		}
+	}
+
+	private static void loadSource(Routine routine, String aliasInfo,
+			Database database) {
+		int index = aliasInfo.indexOf("("); //$NON-NLS-1$
+		String body = aliasInfo.substring(index);
+		body = body.replaceAll("IN ", ""); //$NON-NLS-1$ //$NON-NLS-2$
+		final DatabaseDefinition definition = RDBCorePlugin.getDefault()
+				.getDatabaseDefinitionRegistry().getDefinition(database);
+		final DataModelElementFactory factory = definition
+				.getDataModelElementFactory();
+
+		Source s = (Source) factory.create(SQLRoutinesPackage.eINSTANCE
+				.getSource());
+		s.setBody(body);
+		routine.setSource(s);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbySchemaLoader.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbySchemaLoader.java
new file mode 100644
index 0000000..bd2e3ea
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbySchemaLoader.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.internal.derby.catalog;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCSchemaLoader;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+
+public class DerbySchemaLoader extends JDBCSchemaLoader {
+
+	public DerbySchemaLoader() {
+		super(null);
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCSchemaLoader#createSchema()
+	 */
+	protected Schema createSchema() {
+		return new DerbyCatalogSchema();
+	}
+
+	protected static synchronized String setSchema(Statement s, String schema) throws SQLException {
+		String currentSchema;
+		ResultSet rs = s.executeQuery("VALUES CURRENT SCHEMA");
+		rs.next();
+		currentSchema = rs.getString(1);
+		rs.close();
+		s.executeUpdate("SET SCHEMA " + schema);
+		return currentSchema;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyTableColumnLoader.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyTableColumnLoader.java
new file mode 100644
index 0000000..e9a7077
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyTableColumnLoader.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.internal.derby.catalog;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableColumnLoader;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+
+public class DerbyTableColumnLoader extends JDBCTableColumnLoader {
+
+	public DerbyTableColumnLoader(ICatalogObject catalogObject) {
+		super(catalogObject);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCTableColumnLoader#createColumn()
+	 */
+	protected Column createColumn() {
+		return new DerbyCatalogColumn();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyTableConstraintLoader.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyTableConstraintLoader.java
new file mode 100644
index 0000000..2c009cf
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyTableConstraintLoader.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.internal.derby.catalog;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableConstraintLoader;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+
+public class DerbyTableConstraintLoader extends JDBCTableConstraintLoader {
+	
+	public DerbyTableConstraintLoader(ICatalogObject catalogObject) {
+		super(catalogObject);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCTableConstraintLoader#loadForeignKeys(java.util.List, java.util.Collection)
+	 */
+	public void loadForeignKeys(List containmentList, Collection existingFKs) throws SQLException {
+		super.loadForeignKeys(containmentList, existingFKs);
+		loadCheckConstraint(getCatalogObject().getConnection(), containmentList, this.getTable());
+	}
+
+	private void loadCheckConstraint(Connection connection, List containmentList, Table table){
+		final String query = "SELECT CONSTRAINTNAME,CHECKDEFINITION" + //$NON-NLS-1$
+							" FROM SYS.SYSCONSTRAINTS A,SYS.SYSSCHEMAS B, SYS.SYSTABLES C, SYS.SYSCHECKS D"+ //$NON-NLS-1$
+							" WHERE A.TYPE='C'" + //$NON-NLS-1$
+							" AND A.SCHEMAID=B.SCHEMAID" + //$NON-NLS-1$
+							" AND B.SCHEMANAME='"+ table.getSchema().getName()+"'" +  //$NON-NLS-1$//$NON-NLS-2$
+							" AND A.TABLEID= C.TABLEID" + //$NON-NLS-1$
+							" AND C.TABLENAME='"+ table.getName()+"'" +  //$NON-NLS-1$//$NON-NLS-2$
+							" AND A.CONSTRAINTID=D.CONSTRAINTID"; //$NON-NLS-1$
+		try {
+
+			
+			Statement s = connection.createStatement();
+			String currentSchema = DerbySchemaLoader.setSchema(s, "SYS");
+			ResultSet r = s.executeQuery(query); 
+			while(r.next()) {
+				String check_name = r.getString("CONSTRAINTNAME"); //$NON-NLS-1$
+				DerbyCatalogCheckConstraint check= new DerbyCatalogCheckConstraint();
+				check.setName(check_name);
+				containmentList.add(check);
+			}
+			r.close();
+			DerbySchemaLoader.setSchema(s, currentSchema);
+			s.close();
+		}catch(Exception e){
+			System.out.println(e.toString());
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyTableLoader.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyTableLoader.java
new file mode 100644
index 0000000..e9293e7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyTableLoader.java
@@ -0,0 +1,130 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.internal.derby.catalog;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.connectivity.sqm.loader.IConnectionFilterProvider;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.SchemaObjectFilterProvider;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+
+public class DerbyTableLoader extends JDBCTableLoader {
+
+	public static final String DERBY_TYPE_SYNONYM = "A"; //$NON-NLS-1$
+	public static final String DERBY_TYPE_TABLE = "T"; //$NON-NLS-1$
+	public static final String DERBY_TYPE_VIEW = "V"; //$NON-NLS-1$
+	public static final String DERBY_TYPE_SYSTEM = "S"; //$NON-NLS-1$
+
+	private String currentSchema;
+
+	public DerbyTableLoader() {
+		super(null);
+	}
+	
+	/**
+	 * Constructor
+	 * @param catalogObject
+	 */
+	public DerbyTableLoader(ICatalogObject catalogObject) {
+		this(catalogObject, new SchemaObjectFilterProvider(
+				ConnectionFilter.TABLE_FILTER));
+	}
+
+	/**
+	 * Constructor
+	 * @param catalogObject
+	 * @param connectionFilterProvider
+	 */
+	public DerbyTableLoader(ICatalogObject catalogObject,
+			IConnectionFilterProvider connectionFilterProvider) {
+		super(catalogObject, connectionFilterProvider);
+		unregisterTableFactory(TYPE_TABLE);
+		unregisterTableFactory(TYPE_VIEW);
+		unregisterTableFactory(TYPE_SYSTEM_TABLE);
+		unregisterTableFactory(TYPE_GLOBAL_TEMPORARY);
+		unregisterTableFactory(TYPE_LOCAL_TEMPORARY);
+		
+		registerTableFactory(DERBY_TYPE_TABLE, new DerbyTableFactory());
+		registerTableFactory(DERBY_TYPE_VIEW, new DerbyViewFactory());
+		registerTableFactory(DERBY_TYPE_SYSTEM, new DerbyTableFactory());
+		registerTableFactory(DERBY_TYPE_SYNONYM, new SynonymTableFactory());
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCTableLoader#createResultSet()
+	 */
+	protected ResultSet createResultSet() throws SQLException {
+		Schema schema = (Schema) getCatalogObject();
+		String query ="SELECT TABLENAME AS TABLE_NAME, TABLETYPE AS TABLE_TYPE FROM " + //$NON-NLS-1$
+			"SYS.SYSTABLES A,SYS.SYSSCHEMAS B WHERE A.SCHEMAID=B.SCHEMAID AND B.SCHEMANAME='" + schema.getName() + //$NON-NLS-1$ 
+			"' AND ( TABLETYPE='A' OR TABLETYPE='T' OR TABLETYPE='S' OR TABLETYPE='V' )"; //$NON-NLS-1$
+		if (getSQLFilterExpression() != null && getSQLFilterExpression().length() > 0) {
+			String filter = " AND TABLENAME " + getSQLFilterExpression();
+			query = query + filter;
+		}
+		Statement s = getCatalogObject().getConnection().createStatement();
+		currentSchema = DerbySchemaLoader.setSchema(s, "SYS");
+		ResultSet r = s.executeQuery(query);
+		return r;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCTableLoader#closeResultSet(java.sql.ResultSet)
+	 */
+	protected void closeResultSet(ResultSet rs) {
+		Statement s = null;
+		try {
+			s = rs.getStatement();
+		} catch (SQLException e) {
+		}
+		
+		super.closeResultSet(rs);
+		
+		try {
+			DerbySchemaLoader.setSchema(s, currentSchema);
+		} catch (SQLException e) {
+		}
+	}
+
+	/**
+	 * Table factory for Synonyms
+	 * @author brianf
+	 *
+	 */
+	public static class SynonymTableFactory extends TableFactory {
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCTableLoader.TableFactory#newTable()
+		 */
+		protected Table newTable() {
+			return new DerbyCatalogSynonym();
+		}
+	}
+
+	public static class DerbyTableFactory extends TableFactory {
+		protected Table newTable() {
+			return new DerbyCatalogTable();
+		}
+	}
+
+	public static class DerbyViewFactory extends ViewFactory {
+		protected Table newTable() {
+			return new DerbyCatalogView();
+		}
+		
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyUserDefinedFunctionParameterLoader.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyUserDefinedFunctionParameterLoader.java
new file mode 100644
index 0000000..35c53f4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/catalog/DerbyUserDefinedFunctionParameterLoader.java
@@ -0,0 +1,165 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.internal.derby.catalog;
+
+import java.lang.reflect.Method;
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCParameter;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCUDFColumnLoader;
+import org.eclipse.datatools.modelbase.sql.routines.Parameter;
+import org.eclipse.datatools.modelbase.sql.routines.RoutineResultTable;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.TypedElement;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+
+public class DerbyUserDefinedFunctionParameterLoader extends JDBCUDFColumnLoader {
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCUDFColumnLoader#processRow(java.sql.ResultSet)
+	 */
+	protected TypedElement processRow(ResultSet r) throws SQLException {
+
+		DerbyCatalogUserDefinedFunction function = (DerbyCatalogUserDefinedFunction) getCatalogObject();
+		final Database database = function.getSchema().getDatabase();
+		final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+		final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+
+		final String columnName = r.getString(4);
+		if (columnName == null || isFiltered(columnName)) {
+			return null;
+		}
+		TypedElement retVal = null;
+		final short columntype = r.getShort(5);
+		
+		boolean isTableFunction = false;
+		if (columntype == DatabaseMetaData.procedureColumnResult)
+			isTableFunction = true;
+		
+		if (columntype == DatabaseMetaData.procedureColumnResult) {
+			retVal = createColumn();
+			initColumn((Column) retVal, r);
+		}
+		else {
+			retVal = createParameter();
+			initParameter((Parameter) retVal, r);
+		}
+
+		
+		if (isTableFunction) {
+			RoutineResultTable resultTable = function.getReturnTable();
+			if (resultTable == null) {
+				resultTable  = (RoutineResultTable)factory.create(SQLRoutinesPackage.eINSTANCE.getRoutineResultTable());
+				function.setReturnTable(resultTable);
+			}
+			Column column = createColumn();
+			initColumn(column, r);
+			resultTable.getColumns().add(column);
+			
+		} else {
+		
+			Parameter parameter = new JDBCParameter();
+			initParameter(parameter, r);
+			
+			if (columntype == DatabaseMetaData.procedureColumnReturn)
+				function.setReturnScalar(parameter);
+			else
+				function.getParameters().add(parameter);
+
+		}
+		return retVal;
+	}
+
+	public DerbyUserDefinedFunctionParameterLoader(ICatalogObject catalogObject) {
+		super(catalogObject);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCUDFColumnLoader#createParametersResultSet()
+	 */
+	protected ResultSet createParametersResultSet() throws SQLException {
+		DerbyCatalogUserDefinedFunction function = (DerbyCatalogUserDefinedFunction) getCatalogObject();
+		DatabaseMetaData metaData = function.getConnection().getMetaData();
+		try {
+			ResultSet r;
+			try {
+				/*
+				 * Derby 10.2 supports JDBC 4.0
+				 * DatabaseMetaData.getFunctionParameters() API. Use this if
+				 * available.
+				 */
+				Method m = metaData.getClass().getMethod(
+						"getFunctionParameters", //$NON-NLS-1$
+						new Class[] { String.class, String.class, String.class,
+								String.class});
+				r = (ResultSet) m.invoke(metaData, new Object[] {
+						(String) null, function.getSchema().getName(),
+						function.getName(), "%"}); //$NON-NLS-1$
+				
+			}
+			catch (Exception e) {
+				/*
+				 * Try DatabaseMetaData.getProcedureColumns(). Note, this does
+				 * not work in Derby 10.1.
+				 */
+				r = metaData.getProcedureColumns(null, function.getSchema()
+						.getName(), function.getName(), null);
+			}
+			return r;
+		} catch(Exception e) {
+		}
+
+		return super.createParametersResultSet();
+	}
+
+	protected ResultSet createRoutineResultTableResultSet() throws SQLException {
+		DerbyCatalogUserDefinedFunction function = (DerbyCatalogUserDefinedFunction) getCatalogObject();
+		DatabaseMetaData metaData = function.getConnection().getMetaData();
+		try {
+			ResultSet r;
+			try {
+				/*
+				 * Derby 10.2 supports JDBC 4.0
+				 * DatabaseMetaData.getFunctionParameters() API. Use this if
+				 * available.
+				 */
+				Method m = metaData.getClass().getMethod(
+						"getFunctionParameters", //$NON-NLS-1$
+						new Class[] { String.class, String.class, String.class,
+								String.class});
+				r = (ResultSet) m.invoke(metaData, new Object[] {
+						(String) null, function.getSchema().getName(),
+						function.getName(), "%"}); //$NON-NLS-1$
+				
+			}
+			catch (Exception e) {
+				/*
+				 * Try DatabaseMetaData.getProcedureColumns(). Note, this does
+				 * not work in Derby 10.1.
+				 */
+				r = metaData.getProcedureColumns(null, function.getSchema()
+						.getName(), function.getName(), null);
+			}
+			return r;
+		} catch(Exception e) {
+		}
+
+		return super.createRoutineResultTableResultSet();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/connection/DerbyEmbeddedJDBCConnection.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/connection/DerbyEmbeddedJDBCConnection.java
new file mode 100644
index 0000000..8f8f89a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/connection/DerbyEmbeddedJDBCConnection.java
@@ -0,0 +1,166 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ *      IBM Corporation - migrated to new wizard framework
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.internal.derby.connection;
+
+import java.sql.Connection;
+import java.sql.Driver;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
+import org.eclipse.datatools.connectivity.drivers.jdbc.JDBCConnection;
+
+/**
+ * This class is used to represent Derby embedded connections. There are a
+ * couple of particulars to Derby embedded connections which require special
+ * treatement.
+ * 
+ * One, Derby only supports a single connection per JVM when operating as an
+ * embedded DB. This class ensures that only one instance of an embedded DB
+ * connection exists at any given time.
+ * 
+ * Two, java.sql.Connection.close() is not supported by the Derby embedded JDBC
+ * driver. Embedded connections must be closed using the following:
+ * java.sql.Driver.getConnection("&lt;url&gt;;shutdown=true").
+ * 
+ * @author rcernich
+ * 
+ * Created on Jan 30, 2006
+ */
+public class DerbyEmbeddedJDBCConnection extends JDBCConnection {
+
+	/**
+	 * Maps connection URLs to connections.
+	 */
+	private static Map sDerbyConnections = new HashMap();
+	/**
+	 * Maps connections to integers. The integer represents the number of
+	 * DerbyEmbeddedJDBCConnection objects referencing the connection
+	 */
+	private static Map sConnectionReferenceCount = new HashMap();
+
+	public DerbyEmbeddedJDBCConnection(IConnectionProfile profile,
+										Class factoryClass) {
+		super(profile, factoryClass);
+	}
+
+	public void close() {
+		Connection connection = (Connection) getRawConnection();
+		if (connection == null) {
+			return;
+		}
+		synchronized (sDerbyConnections) {
+			int count = ((Integer) sConnectionReferenceCount.get(connection))
+					.intValue();
+			if (count == 1) {
+				/*
+				 * If this is the last reference to the connection, close the
+				 * connection.
+				 */
+				String baseDBURL = getBaseDBURL();
+				try {
+					/* The particulars of closing the connection. */
+					String driverClass = getDriverDefinition().getProperty(
+							IJDBCDriverDefinitionConstants.DRIVER_CLASS_PROP_ID);
+					Driver driver = (Driver) connection.getClass()
+							.getClassLoader().loadClass(driverClass)
+							.newInstance();
+					driver.connect(baseDBURL + ";shutdown=true",  //$NON-NLS-1$
+							new Properties());
+				}
+				catch (InstantiationException e) {
+					/*
+					 * We shouldn't see this, because we needed this to create
+					 * the connection
+					 */
+				}
+				catch (IllegalAccessException e) {
+					/*
+					 * We shouldn't see this, because we needed this to create
+					 * the connection
+					 */
+				}
+				catch (ClassNotFoundException e) {
+					/*
+					 * We shouldn't see this, because we needed this to create
+					 * the connection
+					 */
+				}
+				catch (SQLException e) {
+					// Successfully closed the connection
+					sConnectionReferenceCount.remove(connection);
+					sDerbyConnections.remove(baseDBURL);
+				}
+				catch (Exception e) {
+					/*
+					 * Can't get the driver. This might happen if the user
+					 * modified or deleted the driver definition in the time
+					 * since this connection was created.
+					 */
+				}
+			}
+			else {
+				/* Otherwise, just decrement the reference count. */
+				sConnectionReferenceCount.put(connection, new Integer(--count));
+			}
+		}
+	}
+
+	protected Object createConnection(ClassLoader cl) throws Throwable {
+		Connection connection;
+		synchronized (sDerbyConnections) {
+			String dbName = getBaseDBURL();
+			if (sDerbyConnections.containsKey(dbName)) {
+				/*
+				 * Get the existing connection and increment the reference
+				 * count.
+				 */
+				connection = (Connection) sDerbyConnections.get(dbName);
+				int count = ((Integer) sConnectionReferenceCount
+						.get(connection)).intValue();
+				sConnectionReferenceCount.put(connection, new Integer(++count));
+			}
+			else {
+				/* Create the connection and initialize the referencing scheme. */
+				connection = (Connection) super.createConnection(cl);
+				sDerbyConnections.put(dbName, connection);
+				sConnectionReferenceCount.put(connection, new Integer(1));
+			}
+		}
+		return connection;
+	}
+
+	/**
+	 * We're only concerned with the base part of the URL. This should work for
+	 * every Derby URL form except those using the databaseName parameter to
+	 * specify the database name.
+	 * 
+	 * @return the base URL
+	 */
+	private String getBaseDBURL() {
+		String baseURL;
+		String connectURL = getConnectionProfile().getBaseProperties()
+				.getProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID);
+		int propertyStart = connectURL.indexOf(';');
+		if (propertyStart < 0) {
+			baseURL = connectURL;
+		}
+		else {
+			baseURL = connectURL.substring(0, propertyStart);
+		}
+		return baseURL;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/connection/DerbyJDBCConnectionFactory.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/connection/DerbyJDBCConnectionFactory.java
new file mode 100644
index 0000000..659161e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/connection/DerbyJDBCConnectionFactory.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    rcernich - initial API and implementation
+ *******************************************************************************/ 
+package org.eclipse.datatools.connectivity.apache.internal.derby.connection;
+
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionFactory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+
+
+public class DerbyJDBCConnectionFactory implements IConnectionFactory {
+
+	public DerbyJDBCConnectionFactory() {
+		super();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionFactory#createConnection(org.eclipse.datatools.connectivity.IConnectionProfile)
+	 */
+	public IConnection createConnection(IConnectionProfile profile) {
+		DerbyEmbeddedJDBCConnection connection = new DerbyEmbeddedJDBCConnection(profile, getClass());
+		connection.open();
+		return connection;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionFactory#createConnection(org.eclipse.datatools.connectivity.IConnectionProfile,
+	 *      java.lang.String, java.lang.String)
+	 */
+	public IConnection createConnection(IConnectionProfile profile, String uid,
+			String pwd) {
+		return createConnection(profile);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/connection/DerbyPropertiesPersistenceHook.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/connection/DerbyPropertiesPersistenceHook.java
new file mode 100644
index 0000000..2aa90aa
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/connection/DerbyPropertiesPersistenceHook.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.internal.derby.connection;
+
+import org.eclipse.datatools.connectivity.drivers.jdbc.JDBCPasswordPropertyPersistenceHook;
+
+public class DerbyPropertiesPersistenceHook extends
+		JDBCPasswordPropertyPersistenceHook {
+
+	public String getConnectionPropertiesPageID() {
+		return "org.eclipse.datatools.connectivity.db.derby.profileProperties"; //$NON-NLS-1$
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/connection/DerbyShutdownService.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/connection/DerbyShutdownService.java
new file mode 100644
index 0000000..4f31784
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/connection/DerbyShutdownService.java
@@ -0,0 +1,138 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.internal.derby.connection;
+
+import java.io.File;
+import java.sql.Connection;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Vector;
+
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo;
+
+
+/**
+ * This service automatically shuts down a Derby database when its last connection gets closed.
+ * This allows unlocking the database so it can be used from an external application, when using
+ * the embedded server.
+ */
+public class DerbyShutdownService 
+//TODO:  Restore support after new connection manager is implemented
+//implements ConnectionManagerListener 
+{
+   
+    public DerbyShutdownService() {
+//   	 TODO:  Restore support after new connection manager is implemented
+    	//        RDBCorePlugin.getDefault().getConnectionManager().addListener(this);
+    }
+    
+    public void dispose() {
+//    	 TODO:  Restore support after new connection manager is implemented
+ //       RDBCorePlugin.getDefault().getConnectionManager().removeListener(this);
+    }
+    
+    public void connectionInfoCreated(ConnectionInfo info) {
+    }
+
+
+    public void connectionInfoRemoved(String name) {
+    }
+
+    public void connectionInfoRenamed(String previousName, ConnectionInfo info) {
+    }
+
+    public void connected(ConnectionInfo info, Connection connection) {
+    }
+
+    public void disconnected(ConnectionInfo info, Connection connection) {
+        if (!info.getURL().startsWith("jdbc:derby:")) // derby Embedded driver //$NON-NLS-1$
+            return;
+        try {
+//       	 TODO:  Restore support after new connection manager is implemented
+        	ConnectionInfo[] infos = new ConnectionInfo[0];
+//	        ConnectionInfo[] infos = RDBCorePlugin.getDefault().getConnectionManager().getAllNamedConnectionInfo();
+	        int n = 0;
+	        for (int i=0; i<infos.length; ++i) {
+	            if ( infos[i]!=info &&
+	                 infos[i].getSharedConnection()!=null && // connected
+	                 infos[i].getDriverClassName().equals(info.getDriverClassName()) &&  // same driver
+	                 getDBLocation(infos[i]).equals(getDBLocation(info)) ) // same database         
+	                n++;
+	        }
+	        
+	        if (n==0)
+	            shutdown(info);
+        } catch (Exception ex) {
+            int a=0;
+        }
+    }
+    
+    protected File getDBLocation(ConnectionInfo info) 
+    {
+        String url = info.getURL();
+        url = url.substring("jdbc:derby:".length()); //$NON-NLS-1$
+        int n = url.indexOf(';');
+        if (n>=0)
+            url = url.substring(0, n);
+        return new File(url);
+    }
+    
+    protected void shutdown(ConnectionInfo info)
+    {
+        String uniqueName = generateName("shutdownInfo", getConnectionNames()); //$NON-NLS-1$
+        try {   
+//     	 TODO:  Restore support after new connection manager is implemented
+ //           ConnectionInfo shutdownInfo = RDBCorePlugin.getDefault().getConnectionManager().createConnectionInfo(info.getDatabaseDefinition(), uniqueName);
+//            shutdownInfo.setURL(info.getURL()+";shutdown=true"); //$NON-NLS-1$
+//            shutdownInfo.setDatabaseName(info.getDatabaseName());
+//            shutdownInfo.setDriverClassName(info.getDriverClassName());
+//            shutdownInfo.setLoadingPath(info.getLoadingPath());
+//            shutdownInfo.setUserName(info.getUserName());
+//            shutdownInfo.setPassword(info.getPassword());
+//      	 TODO:  Restore support after new connection manager is implemented           
+//            shutdownInfo.connect();
+        } catch (Exception ex) {
+            // a SQLException is allways thrown when the database shuts down
+    	} finally {
+//      	 TODO:  Restore support after new connection manager is implemented
+ //           RDBCorePlugin.getDefault().getConnectionManager().removeConnectionInfo(uniqueName);
+        }
+    }
+    
+    protected static Collection getConnectionNames()
+    {
+//  	 TODO:  Restore support after new connection manager is implemented
+    	ConnectionInfo[] infos = new ConnectionInfo[0];
+ //       ConnectionInfo[] infos = RDBCorePlugin.getDefault().getConnectionManager().getAllNamedConnectionInfo();
+        Vector v = new Vector();
+        for (int i=0; i<infos.length; ++i)
+            v.add(infos[i].getName());
+        return v;
+    }
+    
+	protected static String generateName(String baseName, Collection exclusionList) {
+		String curName = baseName;
+		int count = 0;
+		while (isIn(curName, exclusionList)) {
+			curName = baseName + String.valueOf(count);			
+			count++;
+		}
+		return baseName;
+	}
+	
+	protected static boolean isIn(String s, Collection col) {
+	    Iterator it = col.iterator();
+	    while (it.hasNext())
+	        if (s.equals(it.next()))
+	            return true;
+	    return false;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/connection/IDerbyConnectionProfileConstants.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/connection/IDerbyConnectionProfileConstants.java
new file mode 100644
index 0000000..9564507
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/connection/IDerbyConnectionProfileConstants.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2006,2007 Sybase, Inc.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    rcernich - initial API and implementation
+ *    IBM Corporation - migrated to new wizard framework
+ *******************************************************************************/ 
+package org.eclipse.datatools.connectivity.apache.internal.derby.connection;
+
+
+public interface IDerbyConnectionProfileConstants {
+
+	public static final String DERBY_CATEGORY_ID = "org.eclipse.datatools.connectivity.db.derby.driverCategory"; //$NON-NLS-1$	
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/containment/DerbyGroupID.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/containment/DerbyGroupID.java
new file mode 100644
index 0000000..8588ffa
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/containment/DerbyGroupID.java
@@ -0,0 +1,16 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.internal.derby.containment;
+
+public interface DerbyGroupID {
+	public static final String SYNONYM = "core.derby.Synonym";  //$NON-NLS-1$
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/containment/DerbySynonymContainmentProvider.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/containment/DerbySynonymContainmentProvider.java
new file mode 100644
index 0000000..16408fe
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/containment/DerbySynonymContainmentProvider.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.apache.internal.derby.containment;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.modelbase.derby.Synonym;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+
+public class DerbySynonymContainmentProvider  extends AbstractContainmentProvider {
+	public EObject getContainer(EObject obj) {
+		return ((Synonym) obj).getSchema();
+	}
+
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+		return SQLSchemaPackage.eINSTANCE.getSchema_Tables();
+	}
+
+	public String getGroupId(EObject obj) {
+		return DerbyGroupID.SYNONYM;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/ddl/DerbyDdlBuilder.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/ddl/DerbyDdlBuilder.java
new file mode 100644
index 0000000..0c3d211
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/ddl/DerbyDdlBuilder.java
@@ -0,0 +1,266 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+package org.eclipse.datatools.connectivity.apache.internal.derby.ddl;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.fe.GenericDdlBuilder;
+import org.eclipse.datatools.modelbase.sql.expressions.ValueExpression;
+import org.eclipse.datatools.modelbase.sql.routines.Parameter;
+import org.eclipse.datatools.modelbase.sql.routines.ParameterMode;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.datatools.modelbase.sql.routines.RoutineResultTable;
+import org.eclipse.datatools.modelbase.sql.routines.Source;
+import org.eclipse.datatools.modelbase.sql.routines.UserDefinedFunction;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.IdentitySpecifier;
+import org.eclipse.datatools.modelbase.sql.statements.SQLStatement;
+import org.eclipse.datatools.modelbase.sql.tables.ActionGranularityType;
+import org.eclipse.datatools.modelbase.sql.tables.ActionTimeType;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+
+public class DerbyDdlBuilder extends GenericDdlBuilder {
+ 
+    protected final static String IN                   = "IN"; //$NON-NLS-1$
+    protected final static String OUT                  = "OUT"; //$NON-NLS-1$
+    protected final static String INOUT                = "INOUT"; //$NON-NLS-1$
+    protected final static String LOCATOR              = "LOCATOR"; //$NON-NLS-1$
+    protected final static String EXTERNAL             = "EXTERNAL"; //$NON-NLS-1$
+    protected final static String RETURNS              = "RETURNS"; //$NON-NLS-1$
+    protected final static String CAST                 = "CAST"; //$NON-NLS-1$
+    protected final static String FROM                 = "FROM"; //$NON-NLS-1$
+    protected final static String COMMENT              = "COMMENT"; //$NON-NLS-1$
+    protected final static String IS                   = "IS"; //$NON-NLS-1$
+    protected final static String COLUMN               = "COLUMN"; //$NON-NLS-1$
+    protected final static String MODE_DB2SQL          = "MODE DB2SQL"; //$NON-NLS-1$
+	
+    public String createProcedure(Procedure procedure, boolean quoteIdentifiers, boolean qualifyNames) {
+
+        Database database = procedure.getSchema().getDatabase();
+
+        String text = CREATE + SPACE + PROCEDURE + SPACE + getName(procedure, quoteIdentifiers, qualifyNames)
+    	+ SPACE + LEFT_PARENTHESIS + getParameters(procedure) + RIGHT_PARENTHESIS;
+
+        text += NEWLINE + TAB + "LANGUAGE " + procedure.getLanguage(); //$NON-NLS-1$
+        text += getExternalNameOption(procedure,quoteIdentifiers,qualifyNames);
+        text += getParameterStyleOption(procedure);
+    	
+        return text;      
+    }
+	
+    public String createUserDefinedFunction(UserDefinedFunction function, boolean quoteIdentifiers, boolean qualifyNames) {
+    	Database database = function.getSchema().getDatabase();
+
+    	String text = CREATE + SPACE + FUNCTION + SPACE + getName(function, quoteIdentifiers, qualifyNames);
+    	
+    	Source source = function.getSource();
+    	if (source != null) {
+    		text += source.getBody();
+    	}
+    	text += getExternalNameOption(function,quoteIdentifiers,qualifyNames);
+        
+        return text;      
+    }
+
+    public String dropProcedure(Procedure procedure, boolean quoteIdentifiers, boolean qualifyNames) {
+    	Database database = procedure.getSchema().getDatabase();
+   		return DROP + SPACE + PROCEDURE + SPACE + getName(procedure, quoteIdentifiers, qualifyNames);
+    }
+    	
+    public String dropFunction(UserDefinedFunction function, boolean quoteIdentifiers, boolean qualifyNames) {
+    	Database database = function.getSchema().getDatabase();
+   		return DROP + SPACE + FUNCTION + SPACE + getName(function, quoteIdentifiers, qualifyNames);
+    }
+    
+    
+    protected String getColumnString(Column column, boolean quoteIdentifiers) {
+        String columnDefinition =  super.getColumnString(column, quoteIdentifiers);
+        IdentitySpecifier spec = column.getIdentitySpecifier();
+        ValueExpression v = column.getGenerateExpression();
+        if(spec != null) {
+            columnDefinition += " GENERATED ALWAYS AS IDENTITY "; //$NON-NLS-1$
+            columnDefinition += SPACE + LEFT_PARENTHESIS + this.getIdentityString(spec) + RIGHT_PARENTHESIS;
+        }
+        else if(v != null){
+            columnDefinition += " GENERATED ALWAYS AS " + v.getSQL();             //$NON-NLS-1$
+        }
+
+        return columnDefinition;
+    }
+	
+    protected String getIdentityString(IdentitySpecifier identitySpecifier) {
+        String clause = "START WITH " + identitySpecifier.getStartValue() //$NON-NLS-1$
+        	+ " ,INCREMENT BY " + identitySpecifier.getIncrement(); //$NON-NLS-1$
+        return clause;
+    }
+    
+    protected String getParameters(Routine routine) {
+        String parameters = EMPTY_STRING;
+        Iterator it = routine.getParameters().iterator();
+        while(it.hasNext()) {
+            Parameter p = (Parameter) it.next();
+            ParameterMode mode = p.getMode();
+            if(mode == ParameterMode.INOUT_LITERAL) {
+                parameters += INOUT + SPACE;
+            }
+            else if(mode == ParameterMode.OUT_LITERAL) {
+                parameters += OUT + SPACE;
+            }
+            String name = p.getName();
+            if(name != null && name.length() != 0) {
+                parameters += p.getName() + SPACE;
+            }
+            parameters += this.getDataTypeString(p, routine.getSchema());
+            if(p.isLocator()) {
+                parameters += SPACE + AS + SPACE + LOCATOR;
+            }
+            if(it.hasNext()) {
+                parameters += COMMA + NEWLINE + TAB + TAB;                
+            }
+        }
+        return parameters;
+    }
+    
+    protected String getExternalNameOption(Routine routine,boolean quoteIdentifiers, boolean qualifyNames) {
+        String option = NEWLINE + TAB + EXTERNAL;
+        String externalName = routine.getExternalName();
+        if(externalName != null && externalName.length() != 0) {
+            String schemaName = routine.getSchema().getName();
+            
+            if (routine.getLanguage().equalsIgnoreCase("JAVA")){ //$NON-NLS-1$
+            	externalName = this.getSingleQuotedString(externalName);
+            } else {
+	            if(quoteIdentifiers) {
+	            	externalName = this.getDoubleQuotedString(externalName);
+	                schemaName  = this.getDoubleQuotedString(schemaName);
+	            }
+	            if(qualifyNames) {
+	            	externalName = schemaName + DOT + externalName;
+	            }
+            }
+
+            option += " NAME " + externalName; //$NON-NLS-1$
+        }
+        return option;
+    }
+ 
+    protected String getParameterStyleOption(Routine routine) {
+        return NEWLINE + TAB + "PARAMETER STYLE " + routine.getParameterStyle(); //$NON-NLS-1$
+    }
+
+    protected String getFunctionReturnsClause(UserDefinedFunction function) {
+        if(function.getReturnScalar() != null) {
+            Parameter scaler = function.getReturnScalar();
+            String text = RETURNS + SPACE + this.getDataTypeString(scaler,function.getSchema());
+            if(function.getReturnCast() != null) {
+                Parameter cast = function.getReturnCast();
+                text += SPACE + CAST + SPACE + FROM + SPACE + this.getDataTypeString(cast,function.getSchema());
+            }
+            return text;
+        }
+        else if(function.getReturnTable() != null) {
+            RoutineResultTable resultTable = function.getReturnTable();
+            String text = RETURNS + SPACE + TABLE + SPACE + LEFT_PARENTHESIS;
+            Iterator it = resultTable.getColumns().iterator();
+            while(it.hasNext()) {
+                Column c = (Column) it.next();
+                text += c.getName() + SPACE + getDataTypeString(c,function.getSchema());
+                if(it.hasNext()) {
+                    text += COMMA + SPACE;
+                }
+            }
+            text += RIGHT_PARENTHESIS;
+            return text;
+        }
+        else {
+        	Parameter parameter = function.getReturnCast();
+        	if (parameter != null) {
+        		return parameter.getName();
+        	} else {
+        		return null;
+        	}
+        }
+    }
+    
+    public String createTrigger(Trigger trigger, boolean quoteIdentifiers, boolean qualifyNames) {
+        String statement = CREATE + SPACE + TRIGGER + SPACE + getName(trigger, quoteIdentifiers, qualifyNames) + SPACE;
+
+        final ActionTimeType actionTime = trigger.getActionTime();
+        if(actionTime == ActionTimeType.AFTER_LITERAL) {
+            statement += AFTER;
+        }
+        else if(actionTime == ActionTimeType.BEFORE_LITERAL) {
+            statement += BEFORE;
+        }
+        else if(actionTime == ActionTimeType.INSTEADOF_LITERAL) {
+            statement += INSTEAD_OF;
+        }
+	    statement += SPACE;
+
+        if(trigger.isDeleteType()) {
+    	    statement += DELETE;
+    	}
+    	else if(trigger.isInsertType()) {
+    	    statement += INSERT;
+    	}
+    	else if(trigger.isUpdateType()) {
+    	    statement += UPDATE;
+    	    Collection updateColumns = trigger.getTriggerColumn();
+            if(!updateColumns.isEmpty()) {
+                statement += SPACE + OF + SPACE ;
+                Iterator it = updateColumns.iterator();
+                while(it.hasNext()) {
+                    Column column = (Column) it.next();
+                    statement += column.getName();
+                    if(it.hasNext()) {
+                        statement += COMMA + SPACE;
+                    }
+                }
+            }
+    	}
+    	
+        statement += SPACE + ON + SPACE + getName(trigger.getSubjectTable(), quoteIdentifiers, qualifyNames) + NEWLINE;
+
+        final String newRow = trigger.getNewRow();
+        final String oldRow = trigger.getOldRow();
+        final String newTable = trigger.getNewTable();
+        final String oldTable = trigger.getOldTable();
+
+        if(newRow != null && newRow.length() != 0) {
+            statement += REFERENCING + SPACE + NEW + SPACE + AS + SPACE + newRow + NEWLINE;
+        }
+        if(oldRow != null && oldRow.length() != 0) {
+            statement += REFERENCING + SPACE + OLD + SPACE + AS + SPACE + oldRow + NEWLINE;
+        }
+
+        if(trigger.getActionGranularity() == ActionGranularityType.ROW_LITERAL) {
+            statement += FOR + SPACE + EACH + SPACE + ROW + SPACE + MODE_DB2SQL + NEWLINE;
+    	}
+        else {
+            statement += FOR + SPACE + EACH + SPACE + STATEMENT + SPACE + MODE_DB2SQL + NEWLINE;
+    	}
+
+        Iterator it = trigger.getActionStatement().iterator();
+        while(it.hasNext()) {
+            SQLStatement s = (SQLStatement) it.next();
+            statement += s.getSQL();
+        }
+
+        return statement;
+    }
+    
+}
+
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/ddl/DerbyDdlBuilder101.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/ddl/DerbyDdlBuilder101.java
new file mode 100644
index 0000000..9bd7dd4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/ddl/DerbyDdlBuilder101.java
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+package org.eclipse.datatools.connectivity.apache.internal.derby.ddl;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.datatools.modelbase.sql.statements.SQLStatement;
+import org.eclipse.datatools.modelbase.sql.tables.ActionGranularityType;
+import org.eclipse.datatools.modelbase.sql.tables.ActionTimeType;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+
+public class DerbyDdlBuilder101 extends DerbyDdlBuilder{
+	protected final static String NO_CASCADE          = "NO CASCADE"; //$NON-NLS-1$
+
+    public String createTrigger(Trigger trigger, boolean quoteIdentifiers, boolean qualifyNames) {
+        String statement = CREATE + SPACE + TRIGGER + SPACE + getName(trigger, quoteIdentifiers, qualifyNames) + SPACE;
+
+        final ActionTimeType actionTime = trigger.getActionTime();
+        if(actionTime == ActionTimeType.AFTER_LITERAL) {
+            statement += AFTER;
+        }
+        else if(actionTime == ActionTimeType.BEFORE_LITERAL) {
+            statement += NO_CASCADE + SPACE + BEFORE;
+        }
+        else if(actionTime == ActionTimeType.INSTEADOF_LITERAL) {
+            statement += INSTEAD_OF;
+        }
+	    statement += SPACE;
+
+        if(trigger.isDeleteType()) {
+    	    statement += DELETE;
+    	}
+    	else if(trigger.isInsertType()) {
+    	    statement += INSERT;
+    	}
+    	else if(trigger.isUpdateType()) {
+    	    statement += UPDATE;
+    	    Collection updateColumns = trigger.getTriggerColumn();
+            if(!updateColumns.isEmpty()) {
+                statement += SPACE + OF + SPACE ;
+                Iterator it = updateColumns.iterator();
+                while(it.hasNext()) {
+                    Column column = (Column) it.next();
+                    statement += column.getName();
+                    if(it.hasNext()) {
+                        statement += COMMA + SPACE;
+                    }
+                }
+            }
+    	}
+    	
+        statement += SPACE + ON + SPACE + getName(trigger.getSubjectTable(), quoteIdentifiers, qualifyNames) + NEWLINE;
+
+        final String newRow = trigger.getNewRow();
+        final String oldRow = trigger.getOldRow();
+        final String newTable = trigger.getNewTable();
+        final String oldTable = trigger.getOldTable();
+
+        if(newRow != null && newRow.length() != 0) {
+            statement += REFERENCING + SPACE + NEW + SPACE + AS + SPACE + newRow + NEWLINE;
+        }
+        if(oldRow != null && oldRow.length() != 0) {
+            statement += REFERENCING + SPACE + OLD + SPACE + AS + SPACE + oldRow + NEWLINE;
+        }
+
+        if(trigger.getActionGranularity() == ActionGranularityType.ROW_LITERAL) {
+            statement += FOR + SPACE + EACH + SPACE + ROW + SPACE + MODE_DB2SQL + NEWLINE;
+    	}
+        else {
+            statement += FOR + SPACE + EACH + SPACE + STATEMENT + SPACE + MODE_DB2SQL + NEWLINE;
+    	}
+
+        Iterator it = trigger.getActionStatement().iterator();
+        while(it.hasNext()) {
+            SQLStatement s = (SQLStatement) it.next();
+            statement += s.getSQL();
+        }
+
+        return statement;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/ddl/DerbyDdlGenerator.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/ddl/DerbyDdlGenerator.java
new file mode 100644
index 0000000..4206ef9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/ddl/DerbyDdlGenerator.java
@@ -0,0 +1,168 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.datatools.connectivity.apache.internal.derby.ddl;
+
+
+import java.util.Iterator;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExecutableExtension;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.datatools.connectivity.sqm.core.rte.DDLGenerator;
+import org.eclipse.datatools.connectivity.sqm.core.rte.EngineeringOption;
+import org.eclipse.datatools.connectivity.sqm.core.rte.fe.GenericDdlGenerator;
+import org.eclipse.datatools.modelbase.sql.constraints.CheckConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.UniqueConstraint;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.datatools.modelbase.sql.routines.UserDefinedFunction;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;
+
+public final class DerbyDdlGenerator extends GenericDdlGenerator implements DDLGenerator ,IExecutableExtension {
+	
+	public void setInitializationData(IConfigurationElement config, String propertyName, Object data) throws CoreException {
+		this.product = config.getAttribute("product"); //$NON-NLS-1$
+		this.version = config.getAttribute("version"); //$NON-NLS-1$
+		if(version.equals("10.1") || version.equals("10.2")) {  //$NON-NLS-1$ //$NON-NLS-2$
+			builder = new DerbyDdlBuilder101();
+		}
+		else {
+			builder = new DerbyDdlBuilder();			
+		}
+	}
+	protected String[] createStatements(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor, int task) {
+        DerbyDdlScript script = new DerbyDdlScript();
+        if(this.builder == null) {
+            this.builder = new DerbyDdlBuilder();
+        }
+        EngineeringOption[] options = this.getSelectedOptions(elements);        
+        Iterator it = this.getAllContainedDisplayableElementSet(elements).iterator();
+        while(it.hasNext()) {
+            Object o = it.next();
+            if(o instanceof BaseTable) {
+            	if (!this.generateTables(options)) continue;
+                String statement = builder.createTable((BaseTable) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCreateTableStatement(statement);
+            }
+            else if(o instanceof ViewTable) {
+            	if (!this.generateViews(options)) continue;
+                String statement = builder.createView((ViewTable) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCreateViewStatement(statement);
+            }
+            else if(o instanceof Procedure) {
+            	if (!this.generateStoredProcedures(options)) continue;
+                String statement = builder.createProcedure((Procedure) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCreateRoutineStatement(statement);
+            }
+            else if(o instanceof UserDefinedFunction) {
+            	if (!this.generateFunctions(options)) continue;
+                String statement = builder.createUserDefinedFunction((UserDefinedFunction) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCreateRoutineStatement(statement);
+            }
+            else if(o instanceof Trigger) {
+            	if (!this.generateTriggers(options)) continue;
+                String statement = builder.createTrigger((Trigger) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCreateTriggerStatement(statement);
+            }
+            else if(o instanceof CheckConstraint) {
+            	if (!this.generateCKConstraints(options)) continue;
+            	String statement = builder.addCheckConstraint((CheckConstraint) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addAlterTableAddConstraintStatement(statement);
+            }
+            else if(o instanceof UniqueConstraint) {
+            	if (!this.generatePKConstraints(options)) continue;
+                String statement = builder.addUniqueConstraint((UniqueConstraint) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addAlterTableAddConstraintStatement(statement);
+            }
+            else if(o instanceof ForeignKey) {
+            	if (!this.generateFKConstraints(options)) continue;
+                String statement = builder.addForeignKey((ForeignKey) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addAlterTableAddForeignKeyStatement(statement);
+            }
+            else if(o instanceof Index) {
+            	if (!this.generateIndexes(options)) continue;
+                String statement = builder.createIndex((Index) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCreateIndexStatement(statement);
+            }
+        }
+        return script.getStatements();
+    }
+    
+	protected String[] dropStatements(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor, int task) {
+        DerbyDdlScript script = new DerbyDdlScript();
+        if(this.builder == null) {
+            this.builder = new DerbyDdlBuilder();
+        }
+        EngineeringOption[] options = this.getSelectedOptions(elements);        
+        Iterator it = this.getAllContainedDisplayableElementSet(elements).iterator();
+        while(it.hasNext()) {
+            Object o = it.next();
+            if(o instanceof  BaseTable) {
+            	if (!this.generateTables(options)) continue;
+                String statement = builder.dropTable((BaseTable) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addDropTableStatement(statement);
+            }
+            else if(o instanceof ViewTable) {
+            	if (!this.generateViews(options)) continue;
+                String statement = builder.dropView((ViewTable) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addDropViewStatement(statement);
+            }
+            else if(o instanceof Procedure) {
+            	if (!this.generateStoredProcedures(options)) continue;
+                String statement = builder.dropProcedure((Procedure) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addDropRoutineStatement(statement);
+            }
+            else if(o instanceof UserDefinedFunction) {
+            	if (!this.generateFunctions(options)) continue;
+                String statement = builder.dropFunction((UserDefinedFunction) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addDropRoutineStatement(statement);
+            }
+            else if(o instanceof Trigger) {
+            	if (!this.generateTriggers(options)) continue;
+                String statement = builder.dropTrigger((Trigger) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addDropTriggerStatement(statement);
+            }
+            else if(o instanceof CheckConstraint) {
+            	if (!this.generateCKConstraints(options)) continue;
+                String statement = builder.dropTableConstraint((CheckConstraint) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addAlterTableDropConstraintStatement(statement);
+            }
+            else if(o instanceof UniqueConstraint) {
+            	if (!this.generatePKConstraints(options)) continue;
+                String statement = builder.dropTableConstraint((UniqueConstraint) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addAlterTableDropConstraintStatement(statement);
+            }
+            else if(o instanceof ForeignKey) {
+            	if (!this.generateFKConstraints(options)) continue;
+                String statement = builder.dropTableConstraint((ForeignKey) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addAlterTableDropForeignKeyStatement(statement);
+            }
+            else if(o instanceof Index) {
+            	if (!this.generateIndexes(options)) continue;
+                String statement = builder.dropIndex((Index) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addDropIndexStatement(statement);
+            }
+        }
+        return script.getStatements();
+    }
+    
+    private String product;
+    private String version;
+	private DerbyDdlBuilder builder = null;
+	
+}
+
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/ddl/DerbyDdlParser.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/ddl/DerbyDdlParser.java
new file mode 100644
index 0000000..e85b2e7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/ddl/DerbyDdlParser.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.datatools.connectivity.apache.internal.derby.ddl;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.modelbase.sql.expressions.QueryExpression;
+import org.eclipse.datatools.modelbase.sql.expressions.QueryExpressionDefault;
+import org.eclipse.datatools.modelbase.sql.expressions.SQLExpressionsPackage;
+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;
+
+public class DerbyDdlParser {
+
+	public DerbyDdlParser(DatabaseDefinition def){
+		this.def = def;
+	}
+
+	public void parseView (ViewTable view,String viewText){
+    	DataModelElementFactory factory = this.def.getDataModelElementFactory();
+
+    	String body = viewText;
+    	Pattern pattern = Pattern.compile(".*[\\s]+?AS[\\s]+?([(\\s]*SELECT.*)",Pattern.CASE_INSENSITIVE|Pattern.DOTALL); //$NON-NLS-1$
+    	Matcher matcher = pattern.matcher(viewText);
+    	if (matcher.matches()) {
+    		body = matcher.group(1);
+    		pattern = Pattern.compile("(.*)[ \t]+?WITH[ \t]+?.*",Pattern.CASE_INSENSITIVE|Pattern.DOTALL); //$NON-NLS-1$
+    		matcher = pattern.matcher(body);
+    		if (matcher.matches()) {
+    			body = matcher.group(1).trim();
+    		}
+    	}
+
+    	QueryExpression queryExpression = (QueryExpression) factory.create(SQLExpressionsPackage.eINSTANCE.getQueryExpressionDefault());
+		((QueryExpressionDefault)queryExpression).setSQL(body);
+		view.setQueryExpression(queryExpression);
+    }
+	
+	private DatabaseDefinition def;
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/ddl/DerbyDdlScript.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/ddl/DerbyDdlScript.java
new file mode 100644
index 0000000..084260a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/ddl/DerbyDdlScript.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.datatools.connectivity.apache.internal.derby.ddl;
+
+import java.util.Vector;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.fe.GenericDdlScript;
+
+public class DerbyDdlScript extends GenericDdlScript {
+
+    public void addCommentOnStatement(String statement) {
+        this.commentOnStatements.add(statement);
+    }
+
+    public void addDropRoutineStatement(String statement) {
+        this.dropRoutineStatements.add(statement);
+    }
+
+    public void addCreateRoutineStatement(String statement) {
+        this.createRoutineStatements.add(statement);
+    }
+    
+	public String[] getStatements(){
+		Vector scriptVec = new Vector();
+		scriptVec.addAll(dropTriggerStatements);
+		scriptVec.addAll(dropRoutineStatements);
+		scriptVec.addAll(dropForeignKeyStatements);
+		scriptVec.addAll(dropConstraintStatements);
+		scriptVec.addAll(dropIndexStatements);
+		scriptVec.addAll(dropViewStatements);
+		scriptVec.addAll(dropTableStatements);
+		scriptVec.addAll(createTableStatements);
+		scriptVec.addAll(createViewStatements);
+		scriptVec.addAll(createIndexStatements);
+		scriptVec.addAll(addConstraintStatements);
+		scriptVec.addAll(addForeignKeyStatements);
+		scriptVec.addAll(createRoutineStatements);
+		scriptVec.addAll(createTriggerStatements);
+		scriptVec.addAll(commentOnStatements);
+		
+		String[] scripts = new String[scriptVec.size()];
+		scriptVec.copyInto(scripts);
+		return scripts;
+	}
+    protected Vector commentOnStatements                    = new Vector();
+    protected Vector dropRoutineStatements                  = new Vector();
+    protected Vector createRoutineStatements                  = new Vector();
+}
+
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/driver/DerbyClientDriverValuesProvider.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/driver/DerbyClientDriverValuesProvider.java
new file mode 100644
index 0000000..3048106
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/driver/DerbyClientDriverValuesProvider.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *      brianf - initial API and implementation
+ *      Actuate Corporation - support for OSGi-less platform (Bugzilla 338997)
+ ******************************************************************************/
+
+package org.eclipse.datatools.connectivity.apache.internal.derby.driver;
+
+import java.net.URL;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.datatools.connectivity.drivers.DefaultDriverValuesProvider;
+import org.eclipse.datatools.connectivity.drivers.IDriverValuesProvider;
+import org.eclipse.datatools.connectivity.services.PluginResourceLocator;
+
+public class DerbyClientDriverValuesProvider extends DefaultDriverValuesProvider {
+
+	public String createDefaultValue(String key) {
+		/**
+		 * Check to see if the org.apache.derby.core wrapper plug-in is 
+		 * in the installed environment. If it is (most recently with 10.3 support),
+		 * we'll use it and grab the derby client jar from there.
+		 */
+		if (key.equals(IDriverValuesProvider.VALUE_CREATE_DEFAULT)) {
+		    URL url = PluginResourceLocator.getPluginEntry( "org.apache.derby.core",  //$NON-NLS-1$
+		                "derbyclient.jar" ); //$NON-NLS-1$
+            if (url != null)
+                return Boolean.toString(true);
+		}
+
+		if (key.equals(IDriverValuesProvider.VALUE_JARLIST)) {
+		    IPath path = PluginResourceLocator.getPluginEntryPath( "org.apache.derby.core",  //$NON-NLS-1$
+                            "derbyclient.jar" ); //$NON-NLS-1$
+            if (path != null) 
+                return path.toOSString();			
+		}
+
+		return super.createDefaultValue(key);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/driver/DerbyDriverValuesProvider.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/driver/DerbyDriverValuesProvider.java
new file mode 100644
index 0000000..bfc2569
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/driver/DerbyDriverValuesProvider.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *      brianf - initial API and implementation
+ *      Actuate Corporation - support for OSGi-less platform (Bugzilla 338997)
+ ******************************************************************************/
+
+package org.eclipse.datatools.connectivity.apache.internal.derby.driver;
+
+import java.io.File;
+import java.net.URL;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.datatools.connectivity.drivers.DefaultDriverValuesProvider;
+import org.eclipse.datatools.connectivity.drivers.IDriverValuesProvider;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
+import org.eclipse.datatools.connectivity.services.PluginResourceLocator;
+
+public class DerbyDriverValuesProvider extends DefaultDriverValuesProvider {
+
+	public String createDefaultValue(String key) {
+		/**
+		 * Check to see if the org.apache.derby.core wrapper plug-in is 
+		 * in the installed environment. If it is (most recently with 10.3 support),
+		 * we'll use it and grab the derby jar from there.
+		 */
+		if (key.equals(IDriverValuesProvider.VALUE_CREATE_DEFAULT)) {
+            URL url = PluginResourceLocator.getPluginEntry( "org.apache.derby.core",  //$NON-NLS-1$
+                            "derby.jar" ); //$NON-NLS-1$
+            if (url != null)
+                return Boolean.toString(true);
+		}
+
+		if (key.equals(IDriverValuesProvider.VALUE_JARLIST)) {
+            IPath path = PluginResourceLocator.getPluginEntryPath( "org.apache.derby.core",  //$NON-NLS-1$
+                            "derby.jar" ); //$NON-NLS-1$
+            if (path != null) 
+                return path.toOSString();           
+		}
+
+		if (key.equals(IJDBCDriverDefinitionConstants.URL_PROP_ID)) {
+			String defaultURLPrefix = "jdbc:derby:";
+			String defaultURLSuffix = ";create=true";
+			String path = System.getProperty("user.home") + File.separator + "MyDB";
+			String finalURL = defaultURLPrefix + path + defaultURLSuffix;
+			return finalURL;
+		}
+
+		return super.createDefaultValue(key);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/driver/DerbyDriverValuesProvider101.java b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/driver/DerbyDriverValuesProvider101.java
new file mode 100644
index 0000000..bca9d29
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.apache.derby/src/org/eclipse/datatools/connectivity/apache/internal/derby/driver/DerbyDriverValuesProvider101.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *      brianf - initial API and implementation
+ *      Actuate Corporation - support for OSGi-less platform (Bugzilla 338997)
+ ******************************************************************************/
+
+package org.eclipse.datatools.connectivity.apache.internal.derby.driver;
+
+import java.io.File;
+import java.net.URL;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.datatools.connectivity.drivers.DefaultDriverValuesProvider;
+import org.eclipse.datatools.connectivity.drivers.IDriverValuesProvider;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
+import org.eclipse.datatools.connectivity.services.PluginResourceLocator;
+
+public class DerbyDriverValuesProvider101 extends DefaultDriverValuesProvider {
+
+	public String createDefaultValue(String key) {
+		/**
+		 * Check to see if the org.apache.derby.core wrapper plug-in is 
+		 * in the installed environment. If it is (most recently with 10.3 support),
+		 * we'll use it and grab the derby jar from there.
+		 * 
+		 * If not, we'll check to see if the org.apache.derby plug-in is
+		 * in the installed environment. This is an Orbit plug-in. If it is, 
+		 * it only currently supports 10.1 and 10.0, so we will use it for
+		 * those drivers only.
+		 */
+		if (key.equals(IDriverValuesProvider.VALUE_CREATE_DEFAULT)) {
+            URL url = PluginResourceLocator.getPluginEntry( "org.apache.derby.core",  //$NON-NLS-1$
+                        "derby.jar" ); //$NON-NLS-1$
+            if (url != null)
+                return Boolean.toString(true);
+
+            IPath path = PluginResourceLocator.getPluginRootPath( "org.apache.derby" ); //$NON-NLS-1$
+			if (path != null ) {
+				return Boolean.toString(true);
+			}
+		}
+
+		if (key.equals(IDriverValuesProvider.VALUE_JARLIST)) {
+            IPath path = PluginResourceLocator.getPluginEntryPath( "org.apache.derby.core",  //$NON-NLS-1$
+                            "derby.jar" ); //$NON-NLS-1$
+            if (path != null) 
+                return path.toOSString();           
+
+            path = PluginResourceLocator.getPluginRootPath( "org.apache.derby" ); //$NON-NLS-1$
+            if (path != null) 
+            {
+                if (!path.getFileExtension().equals("jar"))//$NON-NLS-1$
+                    path = path.addFileExtension("jar");//$NON-NLS-1$
+                return path.toOSString();                
+            }
+		}
+
+		if (key.equals(IJDBCDriverDefinitionConstants.URL_PROP_ID)) {
+			String defaultURLPrefix = "jdbc:derby:";
+			String defaultURLSuffix = ";create=true";
+			String path = System.getProperty("user.home") + File.separator + "MyDB";
+			String finalURL = defaultURLPrefix + path + defaultURLSuffix;
+			return finalURL;
+		}
+		return super.createDefaultValue(key);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.console.profile/.classpath b/plugins/org.eclipse.datatools.connectivity.console.profile/.classpath
new file mode 100644
index 0000000..2fbb7a2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.console.profile/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.connectivity.console.profile/.gitignore b/plugins/org.eclipse.datatools.connectivity.console.profile/.gitignore
new file mode 100644
index 0000000..0cd6cd2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.console.profile/.gitignore
@@ -0,0 +1,5 @@
+bin
+download
+.settings
+*.jar
+*.zip
diff --git a/plugins/org.eclipse.datatools.connectivity.console.profile/.project b/plugins/org.eclipse.datatools.connectivity.console.profile/.project
new file mode 100644
index 0000000..4dc11b0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.console.profile/.project
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.console.profile</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.connectivity.console.profile/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.connectivity.console.profile/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..bc0ee2a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.console.profile/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %plugin.name
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.console.profile;singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-Vendor: Eclipse Data Tools Platform
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.datatools.connectivity,
+ org.eclipse.datatools.connectivity.oda
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
+Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.datatools.connectivity.console.profile/about.html b/plugins/org.eclipse.datatools.connectivity.console.profile/about.html
new file mode 100644
index 0000000..129db9d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.console.profile/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.console.profile/build.properties b/plugins/org.eclipse.datatools.connectivity.console.profile/build.properties
new file mode 100644
index 0000000..1e854e2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.console.profile/build.properties
@@ -0,0 +1,10 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               about.html,\
+               plugin.properties,\
+               readme.txt
+src.includes = about.html,\
+               readme.txt
diff --git a/plugins/org.eclipse.datatools.connectivity.console.profile/plugin.properties b/plugins/org.eclipse.datatools.connectivity.console.profile/plugin.properties
new file mode 100644
index 0000000..b4307a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.console.profile/plugin.properties
@@ -0,0 +1,17 @@
+###############################################################################
+# Copyright (c) 2008 Actuate Corporation.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#  Actuate Corporation - initial API and implementation
+#
+###############################################################################
+# NLS String
+###############################################################################
+#
+plugin.name=DTP Connection Profiles Storage File Editor Plug-in
+application.name=DTP Connection Profiles Console Editor
+
diff --git a/plugins/org.eclipse.datatools.connectivity.console.profile/plugin.xml b/plugins/org.eclipse.datatools.connectivity.console.profile/plugin.xml
new file mode 100644
index 0000000..83f5aa3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.console.profile/plugin.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension
+         id="StorageFileEditor"
+         name="%application.name"
+         point="org.eclipse.core.runtime.applications">
+      <application
+            cardinality="*"
+            thread="main"
+            visible="true">
+         <run
+               class="org.eclipse.datatools.connectivity.console.profile.internal.EditorCmdAppl">
+         </run>
+      </application>
+   </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.datatools.connectivity.console.profile/readme.txt b/plugins/org.eclipse.datatools.connectivity.console.profile/readme.txt
new file mode 100644
index 0000000..29faae7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.console.profile/readme.txt
@@ -0,0 +1,45 @@
+###############################################################################
+# Copyright (c) 2008 Actuate Corporation.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#  Actuate Corporation - initial API and implementation
+#
+###############################################################################
+
+This Data Tools Platform (DTP) plug-in provides a console editor application for users to 
+view and update the contents of an exported file containing DTP connection profiles.
+
+It is intended for use at a system console to make minor changes to an exported connection profile, 
+such as the file path of JDBC driver jars, a connection URL, an ODA data source file path, etc.
+When an exported file is copied to a server platform for deployment, an user can use 
+this editor tool to quickly adjust the connection profile properties without having to
+bring up the DTP Data Source Explorer UI workbench.  Any user updates are saved in 
+a separate file for all the connection profiles.
+
+To use the tool, make sure the plug-in jar 
+(org.eclipse.datatools.connectivity.console.profile_<version>.jar) is installed in
+your Eclipse environment, together with the other DTP plug-ins.
+From within your Eclipse home directory, enter the command in the system console
+using the syntax described below.  
+(Note that it could take a good number of seconds for the Eclipse executable to start up.)
+
+Command syntax:
+    eclipse[c] -nosplash -application org.eclipse.datatools.connectivity.console.profile.StorageFileEditor
+      [ -? |
+        -in <connectionProfileFile> |
+        -out <saveAsFile> |
+        -profile <profileName> ]
+
+Use "eclipsec" in command on Windows, or "eclipse" on other platforms.
+
+Optional command line arguments:
+    -? : displays this help message
+    -in <connectionProfileFile> : specifies the name of the connection profile storage file to view/change
+    -out <saveAsFile> : specifies the name of the output file to save your changes
+    -profile <profileName> : specifies the name of a connection profile to view/change; if none is specified,
+                             the tool will step through all the profiles found in the input file
+    If an argument value is not specified, the editor will prompt for an input value.
diff --git a/plugins/org.eclipse.datatools.connectivity.console.profile/src/org/eclipse/datatools/connectivity/console/profile/internal/EditorCmdAppl.java b/plugins/org.eclipse.datatools.connectivity.console.profile/src/org/eclipse/datatools/connectivity/console/profile/internal/EditorCmdAppl.java
new file mode 100644
index 0000000..4cb399f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.console.profile/src/org/eclipse/datatools/connectivity/console/profile/internal/EditorCmdAppl.java
@@ -0,0 +1,259 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.console.profile.internal;
+
+import java.io.File;
+
+import org.eclipse.datatools.connectivity.console.profile.nls.Messages;
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
+
+/**
+ *  Command-line editor application to view and update the contents of an exported file
+ *  containing DTP connection profiles.
+ */
+public class EditorCmdAppl implements IApplication
+{
+    private static final String INPUT_FILE_ARG_KEY = "-in"; //$NON-NLS-1$
+    private static final String OUTPUT_FILE_ARG_KEY = "-out"; //$NON-NLS-1$
+    private static final String PROFILE_NAME_ARG_KEY = "-profile"; //$NON-NLS-1$
+    private static final String HELP_SYNTAX = "-?"; //$NON-NLS-1$
+    
+    private static final String APPLICATION_ID = "StorageFileEditor"; //$NON-NLS-1$
+    private static final int NUM_PROMPT_FILE_RETRY = 3;
+    
+    private File m_inFile;
+    private File m_outFile;
+    private String m_editProfileName;
+    private SystemIOUtil m_ioUtil = new SystemIOUtil();
+
+    /* (non-Javadoc)
+     * @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app.IApplicationContext)
+     */
+    public Object start( IApplicationContext context ) throws Exception
+    {
+        m_ioUtil.printNewLine( Messages.bind( Messages.editorAppl_startAppl, APPLICATION_ID ));
+
+        processCmdArguments( context );
+        
+        // no valid input or output file specified in command line arguments
+        if( m_inFile == null )
+        {
+            m_inFile = promptForInputFile();
+            if( m_inFile == null )
+                return normalExit();
+        }
+        if( m_outFile == null )
+        {
+            m_outFile = promptForOutputFile();
+            if( m_outFile == null )
+                return normalExit();
+        }
+
+        if( m_editProfileName == null )
+            m_editProfileName = promptForProfileName();
+        
+        // read and process the specified input file; and save in specified output file
+        
+        ProfileFileProcessor handler = new ProfileFileProcessor( m_ioUtil );
+        int numProfiles = handler.loadProfileFile( m_inFile );
+        if( numProfiles == 0 )
+            return normalExit();
+
+        boolean hasUpdates = handler.updateProfiles( m_editProfileName );
+        if( hasUpdates )
+            handler.saveUpdatedProfiles( m_outFile );
+        else
+            m_ioUtil.println( Messages.editorAppl_noProfileChanges );
+        
+        return normalExit();
+    }
+
+    private Object normalExit()
+    {
+        m_ioUtil.println( Messages.bind( Messages.editorAppl_exitAppl, APPLICATION_ID ));
+        m_ioUtil.close();
+        return EXIT_OK;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.equinox.app.IApplication#stop()
+     */
+    public void stop()
+    {
+        m_ioUtil.close();
+    }
+
+    private void processCmdArguments( IApplicationContext context )
+    {
+        String[] args = (String[]) context.getArguments().get( IApplicationContext.APPLICATION_ARGS );
+
+        if( args.length == 0 )    // has no arguments
+            return;
+
+        for( int i=0; i < args.length; i++ )
+        {
+            String arg = args[i];
+            
+            if( arg.equalsIgnoreCase( INPUT_FILE_ARG_KEY ) )
+            {
+                if( (i+1) >= args.length )  // no more arguments available
+                    printMissingArgumentError( INPUT_FILE_ARG_KEY );
+                else    // has input argument value
+                {
+                    // get next argument for input file name
+                    String inFileName = (String) args[++i];                    
+                    printArgumentValue( INPUT_FILE_ARG_KEY, inFileName );
+                    m_inFile = validateInputFile( inFileName );
+                }
+            }
+            else if( arg.equalsIgnoreCase( OUTPUT_FILE_ARG_KEY ) )
+            {
+                if( (i+1) >= args.length )  // no more arguments available
+                    printMissingArgumentError( OUTPUT_FILE_ARG_KEY );
+                else    // has output argument value
+                {
+                    // get next argument for output file name
+                    String outFileName = (String) args[++i];                   
+                    printArgumentValue( OUTPUT_FILE_ARG_KEY, outFileName );
+                    m_outFile = validateOutputFile( outFileName );
+                }                   
+            }
+            else if( arg.equalsIgnoreCase( PROFILE_NAME_ARG_KEY ) )
+            {
+                if( (i+1) >= args.length )  // no more arguments available
+                    printMissingArgumentError( PROFILE_NAME_ARG_KEY );
+                else    // has profile name argument value
+                {
+                    // get next argument for argument value
+                    m_editProfileName = (String) args[++i];                   
+                    printArgumentValue( PROFILE_NAME_ARG_KEY, m_editProfileName );
+                }                   
+            }
+            else if( arg.equalsIgnoreCase( HELP_SYNTAX ) )
+            {
+                printCommandSyntax();
+            }
+        }
+    }
+
+    private void printMissingArgumentError( String argKey )
+    {
+        m_ioUtil.println( Messages.bind( Messages.editorAppl_missingArgValue, argKey ));
+    }
+
+    private void printArgumentValue( String argKey, String argValue )
+    {
+        m_ioUtil.println( Messages.bind( Messages.editorAppl_argKeyValue, argKey, argValue ));
+    }
+    
+    private File validateInputFile( String inFileName )
+    {
+        if( inFileName.trim().length() == 0 )
+        {
+            m_ioUtil.println( Messages.bind( Messages.editorAppl_invalidFileName, inFileName ) );
+            return null;
+        }
+        
+        File inFile = new File( inFileName );
+        if( inFile.exists() && inFile.isFile() )
+            return inFile;
+        
+        // invalid input file
+        String errorMsg = Messages.bind( Messages.editorAppl_invalidInputFile, inFile.getAbsoluteFile() );
+        m_ioUtil.println( errorMsg );
+        return null;
+    }
+    
+    private File validateOutputFile( String outFileName )
+    {
+        if( outFileName.trim().length() == 0 )
+        {
+            m_ioUtil.println( Messages.bind( Messages.editorAppl_invalidFileName, outFileName ) );
+            return null;
+        }
+        
+        File outFile = new File( outFileName );
+        if( ! outFile.exists() )    // a non-existing output file
+            return outFile;         // ok to use it
+
+        // outfile already exists
+        if( outFile.isFile() )
+        {
+            if( m_ioUtil.promptYesNoResponse( Messages.bind( Messages.editorAppl_overwriteExistingFile, 
+                    outFile.getAbsoluteFile() ) ))
+                return outFile;
+        }
+        
+        // invalid output file to use
+        String errorMsg = Messages.bind( Messages.editorAppl_invalidOutputFile, outFile.getAbsoluteFile() );
+        m_ioUtil.println( errorMsg );
+        return null;
+    }
+    
+    private File promptForInputFile()
+    {
+        String inFileName;
+        File inFile = null;
+        m_ioUtil.printNewLine();
+        for( int i=0; inFile == null && i < NUM_PROMPT_FILE_RETRY; i++ )
+        {
+            inFileName = m_ioUtil.promptForInput( Messages.editorAppl_promptInputFile );
+            inFile = validateInputFile( inFileName );
+        }
+        return inFile;
+    }
+    
+    private File promptForOutputFile()
+    {
+        String outFileName;
+        File outFile = null;
+        m_ioUtil.printNewLine();
+        for( int i=0; outFile == null && i < NUM_PROMPT_FILE_RETRY; i++ )
+        {
+            outFileName = m_ioUtil.promptForInput( Messages.editorAppl_promptOutputFile );
+            outFile = validateOutputFile( outFileName );
+        }
+        return outFile;
+    }
+    
+    private String promptForProfileName()
+    {
+        m_ioUtil.printNewLine();
+        return m_ioUtil.promptForInput( Messages.editorAppl_promptEditProfileName );
+    }
+    
+    private void printCommandSyntax()
+    {
+        m_ioUtil.printNewLine( Messages.editorAppl_syntaxUsage );
+        m_ioUtil.println( "    eclipse[c] -nosplash -application org.eclipse.datatools.connectivity.console.profile.StorageFileEditor" ); //$NON-NLS-1$
+        //      "[ -? | -in <connectionProfileFile> | -out <saveInFile> | -profile <profileName> ]"
+        m_ioUtil.println( "      [ " + HELP_SYNTAX + " |" ); //$NON-NLS-1$ //$NON-NLS-2$
+        m_ioUtil.println( "        " + INPUT_FILE_ARG_KEY + " <connectionProfileFile> |" ); //$NON-NLS-1$ //$NON-NLS-2$
+        m_ioUtil.println( "        " + OUTPUT_FILE_ARG_KEY +  " <saveAsFile> |" ); //$NON-NLS-1$ //$NON-NLS-2$
+        m_ioUtil.println( "        " + PROFILE_NAME_ARG_KEY +  " <profileName> ]" ); //$NON-NLS-1$ //$NON-NLS-2$
+
+        m_ioUtil.printNewLine( Messages.editorAppl_syntaxCommand );
+        m_ioUtil.printNewLine( Messages.editorAppl_syntaxArguments);
+        m_ioUtil.println( "    " + HELP_SYNTAX + " : " + Messages.editorAppl_syntaxHelpInstruction ); //$NON-NLS-1$ //$NON-NLS-2$
+        m_ioUtil.println( "    " + INPUT_FILE_ARG_KEY + " <connectionProfileFile> : " + Messages.editorAppl_syntaxInArgInstruction ); //$NON-NLS-1$ //$NON-NLS-2$
+        m_ioUtil.println( "    " + OUTPUT_FILE_ARG_KEY +  " <saveAsFile> : " + Messages.editorAppl_syntaxOutArgInstruction ); //$NON-NLS-1$ //$NON-NLS-2$
+        m_ioUtil.println( "    " + PROFILE_NAME_ARG_KEY +  " <profileName> : " + Messages.editorAppl_syntaxProfileNameInstruction1 );  //$NON-NLS-1$//$NON-NLS-2$
+        m_ioUtil.println( "                             " + Messages.editorAppl_syntaxProfileNameInstruction2 ); //$NON-NLS-1$
+        m_ioUtil.println( "    " + Messages.editorAppl_syntaxNullArgInstruction ); //$NON-NLS-1$
+        m_ioUtil.printNewLine();
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.console.profile/src/org/eclipse/datatools/connectivity/console/profile/internal/ProfileFileProcessor.java b/plugins/org.eclipse.datatools.connectivity.console.profile/src/org/eclipse/datatools/connectivity/console/profile/internal/ProfileFileProcessor.java
new file mode 100644
index 0000000..5df1955
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.console.profile/src/org/eclipse/datatools/connectivity/console/profile/internal/ProfileFileProcessor.java
@@ -0,0 +1,428 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2008, 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.console.profile.internal;
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Properties;
+import java.util.StringTokenizer;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.console.profile.nls.Messages;
+import org.eclipse.datatools.connectivity.drivers.IDriverMgmtConstants;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.internal.CategoryProvider;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileMgmt;
+import org.eclipse.datatools.connectivity.internal.security.SecurityManager;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ExtensionManifest;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ManifestExplorer;
+import org.eclipse.datatools.connectivity.oda.util.manifest.Property;
+import org.eclipse.datatools.connectivity.security.ICipherProvider;
+
+/**
+ *  Responsible for processing a connection profile storage file,
+ *  such as reading a storage file, interacting with an user to 
+ *  view or change its content, and saving user changes.
+ */
+public class ProfileFileProcessor
+{
+    private static final String PROP_PROMPT_DELIMITER = Messages.profileFile_inputPromptDelimiter;
+    private static final String PROFILE_LINE_SEPARATOR = "-----------------------------"; //$NON-NLS-1$
+    
+    private SystemIOUtil m_ioUtil;
+    private IConnectionProfile[] m_profiles;
+    private boolean m_wasInputFileEncrypted;
+    private PropertyEditor m_propEditor = new PropertyEditor();
+
+    ProfileFileProcessor( SystemIOUtil util ) 
+    {
+        if( util == null )
+            throw new IllegalArgumentException( "ProfileFileHandler( null )" ); //$NON-NLS-1$
+        m_ioUtil = util;
+    }
+    
+    /**
+     * Loads the specified connection profile storage file.
+     * Tracks whether the specified file was encrypted.
+     * @param inFile
+     * @return  the number of profiles read from file
+     */
+    int loadProfileFile( File inFile )
+    {
+        m_ioUtil.printNewLine();
+        m_ioUtil.println( Messages.bind(  Messages.profileFile_statusReadingFile, inFile.getAbsolutePath() ) );
+        
+        try
+        {
+            m_wasInputFileEncrypted = ConnectionProfileMgmt.isEncrypted( inFile );
+            ICipherProvider cipherProvider = m_wasInputFileEncrypted ?
+                            getCipherProvider( inFile ) :
+                            null;
+            m_profiles = ConnectionProfileMgmt.loadCPs( inFile, cipherProvider );
+        }
+        catch( Exception ex )
+        {
+            m_ioUtil.printException( Messages.profileFile_errorReadingFile, ex );
+            m_ioUtil.println( Messages.profileFile_errorInstruction );
+            return 0;
+        }
+
+        if( m_profiles == null || m_profiles.length == 0 )
+            m_ioUtil.println( Messages.profileFile_noProfileFound );
+
+        return ( m_profiles == null ) ? 0 : m_profiles.length;
+    }
+    
+    private static ICipherProvider getCipherProvider( File profileStoreFile )
+    {
+        return SecurityManager.getInstance().getCipherProvider( profileStoreFile );
+    }
+    
+    /**
+     * Saves the current state of all the profile instances into the specified output file.
+     * This is normally called after the profiles have been updated by {@link #updateProfiles(String)}.
+     * If the input file read by {@link #loadProfileFile(File)} was encrypted, the output file
+     * is automatically saved in encrypted format. 
+     * Otherwise, gives user a choice to encrypt the output file.
+     * @param outFile
+     */
+    void saveUpdatedProfiles( File outFile )
+    {
+        ICipherProvider cipherProvider = null;
+        if( m_wasInputFileEncrypted )    // input file was encrypted
+            cipherProvider = getCipherProvider( outFile );   // must save in encrypted format
+        else
+        {
+            // give user a choice to save in encrypted format
+            if( m_ioUtil.promptYesNoResponse( Messages.profileFile_askEncryptOutput ) )
+                cipherProvider = getCipherProvider( outFile );
+        }
+        
+        // proceed to save
+        m_ioUtil.printNewLine();
+        m_ioUtil.println( Messages.bind( Messages.profileFile_statusSavingFile, outFile.getAbsoluteFile() ));
+        try
+        {
+            ConnectionProfileMgmt.saveCPs( m_profiles, outFile, cipherProvider );
+        }
+        catch( CoreException ex )
+        {
+            m_ioUtil.printException( Messages.profileFile_errorSavingFile, ex );
+            return;
+        }
+        
+        m_ioUtil.println( Messages.profileFile_statusDone );
+    }
+    
+    /**
+     * Interacts with an user to view and update each of the connection profile instance(s) 
+     * found in the input file specified in {@link #loadProfileFile(File)}.
+     * @param profileName   The name of a connection profile.  If a name is specified, 
+     *              only that profile instance if found, will be promped for updates.
+     *              A null value indicates to update all connection profile instances in the input file.
+     * @return  true if at least one profile has updates made to its properties; false otherwise
+     */
+    boolean updateProfiles( String profileName )
+    {
+        final boolean editingSingleProfile = profileName != null && profileName.trim().length() > 0;
+
+        if( m_profiles == null || m_profiles.length == 0 )
+        {
+            if( editingSingleProfile )
+                m_ioUtil.printNewLine( Messages.bind( Messages.profileFile_specifiedProfileNotFound, profileName ));
+            return false;
+        }
+        
+        if( ! editingSingleProfile )
+            m_ioUtil.println( Messages.bind( Messages.profileFile_statusIteratingProfiles, 
+                                        new Integer( m_profiles.length ) ));
+        
+        boolean foundNamedProfile = false;
+        boolean hasUpdates = false;
+        for( int i = 0; i < m_profiles.length && ! foundNamedProfile; i++ ) 
+        {
+            IConnectionProfile profile = m_profiles[i];
+            if( editingSingleProfile )
+            {
+                if( ! profile.getName().equalsIgnoreCase( profileName ) )
+                    continue;
+                foundNamedProfile = true;
+            }
+            
+            // prompt whether to update this profile instance
+            m_ioUtil.printNewLine( PROFILE_LINE_SEPARATOR );
+
+            String profileType = profile.getProvider().getCategory().getId().equals( CategoryProvider.ID_CATEGORY_UNKNOWN ) ?
+                        profile.getProviderId() : profile.getProviderName();
+            m_ioUtil.println( Messages.bind( Messages.profileFile_profileIdentifier, profileType ) 
+                              + PROP_PROMPT_DELIMITER + profile.getName() );
+            if( ! m_ioUtil.promptYesNoResponse( Messages.profileFile_askUpdateProfile ) )
+                continue;
+            
+            Properties props = profile.getBaseProperties();
+            if( props.getProperty( IJDBCConnectionProfileConstants.DRIVER_CLASS_PROP_ID ) != null ) // has DB property
+                hasUpdates |= updateDatabaseProperties( profile );
+            else
+                hasUpdates |= updateOdaProfileProperties( profile );
+        }
+        
+        if( editingSingleProfile && ! foundNamedProfile )
+            m_ioUtil.printNewLine( Messages.bind(  Messages.profileFile_specifiedProfileNotFound, profileName ));
+        m_ioUtil.println( Messages.profileFile_statusDone );
+        return hasUpdates;
+    }
+    
+    private boolean updateDatabaseProperties( IConnectionProfile profile )
+    {
+        return DatabaseProfileHandler.updateProfileProperties( profile, m_propEditor );
+    }
+    
+    private boolean updateOdaProfileProperties( IConnectionProfile profile )
+    {
+        return OdaProfileHandler.updateProfileProperties( profile, m_propEditor );
+    }
+    
+    /**
+     * Responsbile for interacting with users to view and edit a property.
+     */
+    private class PropertyEditor
+    {        
+        private static final String MASKED_VALUE = "*****"; //$NON-NLS-1$
+        private static final String NULL_DISPLAY_VALUE = "<null>"; //$NON-NLS-1$
+        private static final String VALUE_DELIMITER = "\""; //$NON-NLS-1$
+        /**
+         * Gets and displays the current value of the specified propertyKey and 
+         * interacts with user to input a new value.
+         * The password property value is masked when displayed.
+         */
+        private String promptNewPropertyValue( Properties props, String propertyKey, String propertyDisplayName )
+        {
+            boolean maskValue = propertyKey.equals( IJDBCConnectionProfileConstants.PASSWORD_PROP_ID );
+            return promptNewPropertyValue( props, propertyKey, propertyDisplayName, maskValue );
+        }
+        
+        /**
+         * Gets and displays the current value of the specified propertyKey; mask the current value if specfied,
+         * and interacts with user to input a new value.
+         */
+        private String promptNewPropertyValue( Properties props, String propertyKey, String propertyDisplayName, boolean maskValue )
+        {
+            String propValue = maskValue ? MASKED_VALUE : props.getProperty( propertyKey );
+            return promptNewPropertyValue( propertyDisplayName, propValue );
+        }
+        
+        /**
+         * Displays the specified current value, and interacts with user to input a new value.
+         * A null value is displayed as "<null>".  An empty string value or one with only spaces
+         * is delimited by double-quotes.
+         */
+        private String promptNewPropertyValue( String propertyDisplayName, String currentValue )
+        {
+            String displayValue = currentValue;
+            if( displayValue == null )
+                displayValue = NULL_DISPLAY_VALUE;
+            else if( displayValue.trim().length() == 0 )    // wraps empty string or spaces with delimiters
+                displayValue = VALUE_DELIMITER + displayValue + VALUE_DELIMITER;
+            
+            m_ioUtil.printNewLine( propertyDisplayName + PROP_PROMPT_DELIMITER + displayValue );
+            return m_ioUtil.promptForUpdateValue();
+        }
+        
+        private boolean setNewPropertyValue( Properties props, String key, String newValue )
+        {
+            if( newValue != null )
+            {
+                props.setProperty( key, newValue );
+                return true;
+            }
+            return false;
+        }
+        
+        private void printNewLine( String message )
+        {
+            m_ioUtil.printNewLine( message );
+        }
+    }
+    
+    /**
+     * Handler of ODA connection profile properties.
+     */
+    private static class OdaProfileHandler
+    {
+        private static final String MNEMONICS_SYMBOL = "&"; //$NON-NLS-1$
+
+        private static boolean updateProfileProperties( IConnectionProfile profile, PropertyEditor propEditor )
+        {
+            ExtensionManifest odaManifest = getOdaManifest( profile );
+            if( odaManifest == null )   // no ODA manifest found
+                return updateRawProperties( profile, propEditor );
+            
+            Properties profileProps = profile.getBaseProperties();
+
+            Property[] odaPropDefns = odaManifest.getProperties( false );
+            Properties propVisibility = odaManifest.getPropertiesVisibility();
+
+            boolean hasUpdates = false;
+            String newValue;
+            for( int i=0; i < odaPropDefns.length; i++ )
+            {
+                Property odaPropDefn = odaPropDefns[i];
+                if( ! odaPropDefn.isVisible( propVisibility ) || ! odaPropDefn.isEditable( propVisibility ) )
+                    continue;
+
+                newValue = propEditor.promptNewPropertyValue( profileProps, odaPropDefn.getName(), 
+                                                    getPropertyDisplayName( odaPropDefn ),
+                                                    odaPropDefn.isEncryptable() );
+                hasUpdates |= propEditor.setNewPropertyValue( profileProps, odaPropDefn.getName(), newValue );
+            }
+            
+            // update the profile's properties
+            if( hasUpdates )
+                profile.setBaseProperties( profileProps );
+            return hasUpdates;
+        }
+        
+        private static ExtensionManifest getOdaManifest( IConnectionProfile profile )
+        {
+            String odaDataSourceId = profile.getProviderId();
+            ExtensionManifest odaManifest = null;
+            try
+            {
+                odaManifest = ManifestExplorer.getInstance().getExtensionManifest( odaDataSourceId );
+            }
+            catch( Exception ex )
+            {
+                // ignore
+            }
+            
+            return odaManifest;
+        }
+        
+        private static String getPropertyDisplayName( Property odaPropDefn )
+        {
+            String displayName = odaPropDefn.getDisplayName();
+            // removes any mnemonics character embedded in the display name
+            return displayName.replaceAll( MNEMONICS_SYMBOL, SystemIOUtil.EMPTY_STRING );
+        }
+        
+        /**
+         * Update the profile properties without any property metadata available.
+         * All existing values are masked for display.
+         */
+        private static boolean updateRawProperties( IConnectionProfile profile, PropertyEditor propEditor )
+        {
+            Properties props = profile.getBaseProperties();
+            boolean hasUpdates = false;
+            propEditor.printNewLine( Messages.profileFile_noOdaPropertyDefn  );
+            
+            String newValue;
+            Iterator keysIter = props.keySet().iterator();
+            while( keysIter.hasNext() )
+            {
+                String propKey = (String) keysIter.next();
+                // since no property definition is available, use key as display name, and mask its existing value 
+                newValue = propEditor.promptNewPropertyValue( props, propKey, propKey, true ); 
+                hasUpdates |= propEditor.setNewPropertyValue( props, propKey, newValue );
+            }
+            
+            // update the profile's properties
+            if( hasUpdates )
+                profile.setBaseProperties( props );
+            return hasUpdates;
+        }
+    }
+ 
+    /**
+     * Handler of JDBC Database connection profile properties.
+     */
+    private static class DatabaseProfileHandler
+    {
+        private static final String PROPERTY_PAIR_SEPARATOR = ","; //$NON-NLS-1$
+        private static final String ASSIGNMENT_CHAR = "="; //$NON-NLS-1$
+
+        private static Map sm_dbPropKeys;
+
+        private static boolean updateProfileProperties( IConnectionProfile profile, PropertyEditor propEditor )
+        {
+            Properties profileProps = profile.getBaseProperties();
+            boolean hasUpdates = false;
+            
+            // prompt to update each pre-defined database property key
+            Map dbPropKeys = getDbPropertyKeys();
+            String newValue;
+            Iterator entryIter = dbPropKeys.entrySet().iterator();
+            while( entryIter.hasNext() )
+            {
+                Map.Entry keyEntry = (Map.Entry) entryIter.next();
+                newValue = propEditor.promptNewPropertyValue( profileProps, (String) keyEntry.getKey(), (String) keyEntry.getValue() );
+                hasUpdates |= propEditor.setNewPropertyValue( profileProps, (String) keyEntry.getKey(), newValue );
+            }
+
+            // handle any additional name value pairs stored in connection profile
+            String nameValuePairs = profileProps .getProperty( IJDBCConnectionProfileConstants.CONNECTION_PROPERTIES_PROP_ID );
+            if( nameValuePairs != null && nameValuePairs.length() > 0) 
+            {
+                String[] pairs = parseString( nameValuePairs, PROPERTY_PAIR_SEPARATOR );
+                for( int i = 0; i < pairs.length; i++ ) 
+                {
+                    String[] namevalue = parseString( pairs[i], ASSIGNMENT_CHAR );
+                    if( namevalue.length >= 2 )
+                    {
+                        newValue = propEditor.promptNewPropertyValue( namevalue[0], namevalue[1] );
+                        hasUpdates |= propEditor.setNewPropertyValue( profileProps, namevalue[0], newValue );
+                    }
+                }
+            }
+            
+            // update the profile's properties
+            if( hasUpdates )
+                profile.setBaseProperties( profileProps );
+            return hasUpdates;
+        }
+        
+        private static String[] parseString( String str_list, String token ) 
+        {
+            StringTokenizer tk = new StringTokenizer( str_list, token );
+            String[] pieces = new String[tk.countTokens()];
+            int index = 0;
+            while( tk.hasMoreTokens() )
+                pieces[index++] = tk.nextToken();
+            return pieces;
+        }
+        
+        /**
+         * Returns a collection of Database property key and corresponding display name
+         * that are used to open a JDBC connection.
+         */
+        private static Map getDbPropertyKeys()
+        {
+            if( sm_dbPropKeys == null )
+            {
+                sm_dbPropKeys = new LinkedHashMap(5);
+                sm_dbPropKeys.put( IJDBCConnectionProfileConstants.URL_PROP_ID, Messages.profileFile_propertyUrl );
+                sm_dbPropKeys.put( IDriverMgmtConstants.PROP_DEFN_JARLIST, 
+                                            Messages.bind( Messages.profileFile_propertyJarList, IDriverMgmtConstants.PATH_DELIMITER ) );
+                sm_dbPropKeys.put( IJDBCConnectionProfileConstants.DRIVER_CLASS_PROP_ID, Messages.profileFile_propertyDriverClass );
+                sm_dbPropKeys.put( IJDBCConnectionProfileConstants.USERNAME_PROP_ID, Messages.profileFile_propertyUser );
+                sm_dbPropKeys.put( IJDBCConnectionProfileConstants.PASSWORD_PROP_ID, Messages.profileFile_propertyPassword );
+            }
+            return sm_dbPropKeys;
+        }       
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.console.profile/src/org/eclipse/datatools/connectivity/console/profile/internal/SystemIOUtil.java b/plugins/org.eclipse.datatools.connectivity.console.profile/src/org/eclipse/datatools/connectivity/console/profile/internal/SystemIOUtil.java
new file mode 100644
index 0000000..dbf288b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.console.profile/src/org/eclipse/datatools/connectivity/console/profile/internal/SystemIOUtil.java
@@ -0,0 +1,134 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.console.profile.internal;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+import org.eclipse.datatools.connectivity.console.profile.nls.Messages;
+
+/**
+ * Internal utility class to handle user interaction using system input and output.
+ */
+public class SystemIOUtil
+{
+    private static final String USER_CONFIRM_INPUT_CHAR = Messages.ioutil_confirmUserInputChar;
+    private static final String CONFIRM_PROMPT =  // ['y' to confirm]
+        Messages.bind( " [''{0}'' {1}]", USER_CONFIRM_INPUT_CHAR, Messages.ioutil_confirmPromptInstruction ); //$NON-NLS-1$
+    private static final String INPUT_PROMPT_DELIMITER = ": "; //$NON-NLS-1$
+
+    static final String EMPTY_STRING = ""; //$NON-NLS-1$
+    
+    private BufferedReader m_stdin;
+    
+    SystemIOUtil() {}
+
+    String promptForInput( String promptMsg )
+    {
+        printInputPrompt( promptMsg + INPUT_PROMPT_DELIMITER );
+        return readLn();
+    }
+    
+    boolean promptYesNoResponse( String promptMsg )
+    {
+        String response = promptForInput( promptMsg + CONFIRM_PROMPT );
+        return( response != null && response.equalsIgnoreCase( USER_CONFIRM_INPUT_CHAR ) );
+    }
+    
+    /**
+     * Ask the user whether to update the existing value.  If user confirms, ask for new input value.
+     * @return  the new value entered by an user; or null if user does not want to change the current value
+     */
+    String promptForUpdateValue()
+    {
+        String newValue = null;
+        if( promptYesNoResponse( Messages.ioutil_askUpdateValue ) )
+        {
+            newValue = promptForInput( Messages.ioutil_newValuePrompt );
+            if( newValue == null )
+                newValue = EMPTY_STRING;
+        }
+        return newValue;
+    }
+    
+    void printException( String errorMsg, Exception ex )
+    {
+        if( errorMsg != null )
+            println( errorMsg );
+        String exceptionMsg = ex.getLocalizedMessage();
+        if( exceptionMsg != null )
+            println( Messages.bind( Messages.ioutil_exceptionCause, exceptionMsg ));
+        
+        if( promptYesNoResponse( Messages.ioutil_askReviewStack ))
+            ex.printStackTrace();
+    }
+    
+    void printNewLine( String message )
+    {
+        printNewLine();
+        println( message );
+    }
+    
+    void printNewLine()
+    {
+        System.out.println();
+    }
+    
+    void println( String message )
+    {
+        System.out.println( message );
+    }
+
+    void printInputPrompt( String message )
+    {
+        System.out.print( message );
+        System.out.flush(); // empties buffer, before prompting for input text
+    }
+    
+    String readLn()
+    {
+        if( m_stdin == null )
+            m_stdin = new BufferedReader( new InputStreamReader( System.in ) );
+        
+        String message = null;
+        try
+        {
+            message = m_stdin.readLine();
+        }
+        catch( IOException ex )
+        {
+            printException( Messages.ioutil_errorSystemInput, ex );
+        }
+        return message;
+    }
+
+    void close()
+    {
+        System.out.flush();
+        
+        if( m_stdin != null )
+        {
+            try
+            {
+                m_stdin.close();
+                m_stdin = null;
+            }
+            catch( IOException ex )
+            { }
+        }
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.console.profile/src/org/eclipse/datatools/connectivity/console/profile/nls/Messages.java b/plugins/org.eclipse.datatools.connectivity.console.profile/src/org/eclipse/datatools/connectivity/console/profile/nls/Messages.java
new file mode 100644
index 0000000..49c7d20
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.console.profile/src/org/eclipse/datatools/connectivity/console/profile/nls/Messages.java
@@ -0,0 +1,82 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.console.profile.nls;
+
+import org.eclipse.osgi.util.NLS;
+
+public class Messages extends NLS
+{
+    private static final String BUNDLE_NAME = "org.eclipse.datatools.connectivity.console.profile.nls.messages"; //$NON-NLS-1$
+
+    public static String editorAppl_argKeyValue;
+    public static String editorAppl_promptEditProfileName;
+    public static String editorAppl_exitAppl;
+    public static String editorAppl_promptInputFile;
+    public static String editorAppl_invalidFileName;
+    public static String editorAppl_invalidInputFile;
+    public static String editorAppl_invalidOutputFile;
+    public static String editorAppl_missingArgValue;
+    public static String editorAppl_noProfileChanges;
+    public static String editorAppl_promptOutputFile;
+    public static String editorAppl_overwriteExistingFile;
+    public static String editorAppl_startAppl;
+    public static String editorAppl_syntaxArguments;
+
+    public static String editorAppl_syntaxCommand;
+    public static String editorAppl_syntaxHelpInstruction;
+    public static String editorAppl_syntaxInArgInstruction;
+    public static String editorAppl_syntaxNullArgInstruction;
+    public static String editorAppl_syntaxProfileNameInstruction2;
+    public static String editorAppl_syntaxOutArgInstruction;
+    public static String editorAppl_syntaxProfileNameInstruction1;
+    public static String editorAppl_syntaxUsage;
+    public static String ioutil_askReviewStack;
+    public static String ioutil_askUpdateValue;
+    public static String ioutil_confirmPromptInstruction;
+    public static String ioutil_errorSystemInput;
+    public static String ioutil_exceptionCause;
+    public static String ioutil_newValuePrompt;
+
+    public static String ioutil_confirmUserInputChar;
+    public static String profileFile_askEncryptOutput;
+    public static String profileFile_askUpdateProfile;
+    public static String profileFile_errorInstruction;
+    public static String profileFile_errorReadingFile;
+    public static String profileFile_errorSavingFile;
+    public static String profileFile_inputPromptDelimiter;
+    public static String profileFile_noOdaPropertyDefn;
+    public static String profileFile_noProfileFound;
+    public static String profileFile_propertyDriverClass;
+    public static String profileFile_propertyJarList;
+    public static String profileFile_propertyPassword;
+    public static String profileFile_profileIdentifier;
+    public static String profileFile_propertyUrl;
+    public static String profileFile_propertyUser;
+    public static String profileFile_specifiedProfileNotFound;
+    public static String profileFile_statusDone;
+    public static String profileFile_statusIteratingProfiles;
+    public static String profileFile_statusReadingFile;
+    public static String profileFile_statusSavingFile;
+
+    static
+    {
+        // initialize resource bundle
+        NLS.initializeMessages( BUNDLE_NAME, Messages.class );
+    }
+
+    private Messages()
+    {
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.console.profile/src/org/eclipse/datatools/connectivity/console/profile/nls/messages.properties b/plugins/org.eclipse.datatools.connectivity.console.profile/src/org/eclipse/datatools/connectivity/console/profile/nls/messages.properties
new file mode 100644
index 0000000..db67bd1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.console.profile/src/org/eclipse/datatools/connectivity/console/profile/nls/messages.properties
@@ -0,0 +1,61 @@
+#************************************************************************
+# Copyright (c) 2008 Actuate Corporation.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#  Actuate Corporation - initial API and implementation
+#  
+#************************************************************************
+#
+editorAppl_argKeyValue={0} argument value: {1}
+editorAppl_exitAppl=The {0} application exited.
+editorAppl_invalidFileName=Invalid file name ({0}).
+editorAppl_invalidInputFile=The input file ({0}) does not exist or cannot be read.
+editorAppl_invalidOutputFile=The output file ({0}) is invalid or not writable.
+editorAppl_missingArgValue=Missing value for {0} argument.
+editorAppl_noProfileChanges=No changes were made to the connection profile(s).
+editorAppl_overwriteExistingFile=The output file ({0}) already exists.  Overwrite its contents?
+editorAppl_promptEditProfileName=Enter the name of a connection profile to view/change (optional)
+editorAppl_promptInputFile=Enter the name of the connection profile file to view/change
+editorAppl_promptOutputFile=Enter the name of the output file to save your changes
+editorAppl_startAppl=Start the {0} application...
+editorAppl_syntaxArguments=Optional command line arguments:
+editorAppl_syntaxCommand=Use "eclipsec" in command on Windows, or "eclipse" on other platforms.
+editorAppl_syntaxHelpInstruction=displays this help message
+editorAppl_syntaxInArgInstruction=specifies the name of the connection profile storage file to view/change
+editorAppl_syntaxNullArgInstruction=If an argument value is not specified, the editor will prompt for an input value.
+editorAppl_syntaxOutArgInstruction=specifies the name of the output file to save your changes
+editorAppl_syntaxProfileNameInstruction1=specifies the name of a connection profile to view/change; if none is specified,
+editorAppl_syntaxProfileNameInstruction2=the tool will step through all the profiles found in the input file
+editorAppl_syntaxUsage=Command syntax:
+#
+ioutil_askReviewStack=Do you want to see the stack trace?
+ioutil_askUpdateValue=Change existing value?
+ioutil_confirmUserInputChar=y
+ioutil_confirmPromptInstruction=to confirm
+ioutil_errorSystemInput=Error in reading from input console.
+ioutil_exceptionCause=Exception was caused by: {0}
+ioutil_newValuePrompt=New value
+#
+profileFile_askEncryptOutput=Do you want to encrypt the output file?
+profileFile_askUpdateProfile=View or change the profile's properties?
+profileFile_errorInstruction=Please see the workspace log for possible additional exceptions.
+profileFile_errorReadingFile=Error in reading the content of the profile input file.
+profileFile_errorSavingFile=Error in saving the changed properties to the output file.
+profileFile_inputPromptDelimiter=>> 
+profileFile_noOdaPropertyDefn=Warning: Property definitions are not available.  All existing property values will be masked.
+profileFile_noProfileFound=No profiles were found in the input file.
+profileFile_profileIdentifier={0} profile name
+profileFile_propertyDriverClass=JDBC Driver Class
+profileFile_propertyJarList=JDBC Driver Jar Paths (use ''{0}'' to separate paths)
+profileFile_propertyPassword=Password
+profileFile_propertyUrl=Connection URL
+profileFile_propertyUser=User name
+profileFile_specifiedProfileNotFound=The specified profile ({0}) is not found in the input file.
+profileFile_statusDone=Done.
+profileFile_statusIteratingProfiles=Stepping through each of the {0} profiles found in the input file...
+profileFile_statusReadingFile=Reading the input file ({0})...
+profileFile_statusSavingFile=Saving changed properties in the output file ({0})...
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic.ui/.classpath b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic.ui/.gitignore b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic.ui/.project b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/.project
new file mode 100644
index 0000000..40516d1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.db.generic.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0ab5a2e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Mon Feb 02 16:16:16 GMT-07:00 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..b8c65af
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.db.generic.ui; singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-Activator: org.eclipse.datatools.connectivity.db.generic.ui.GenericDBUIPlugin
+Bundle-Vendor: %Bundle-Vendor
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.datatools.connectivity,
+ org.eclipse.datatools.connectivity.ui,
+ org.eclipse.datatools.connectivity.db.generic,
+ org.eclipse.datatools.help,
+ org.eclipse.help.base
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.datatools.connectivity.db.generic.ui,
+ org.eclipse.datatools.connectivity.db.generic.ui.wizard
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic.ui/about.html b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic.ui/build.properties b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/build.properties
new file mode 100644
index 0000000..c68c450
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/build.properties
@@ -0,0 +1,17 @@
+bin.includes = META-INF/,\
+               plugin.xml,\
+               .,\
+               about.html,\
+               icons/,\
+               plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
+src.dir		     = src/
+jars.extra.classpath =
+plugin.version =	1.0.1.200708201
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic.ui/build.xml b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/build.xml
new file mode 100644
index 0000000..ed704ad
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/build.xml
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ *************************************************************************
+ * Copyright (c) 2005 Sybase, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Sybase, Inc.  - initial API and implementation
+ *  
+ ***************************************************************************
+ -->
+<project name="org.eclipse.datatools.connectivity.db.generic.ui" default="build.jars" basedir=".">
+	<import file="../org.eclipse.datatools.build/common_build.xml" optional="true"/>
+	<property name="module.name" value="org.eclipse.datatools.connectivity.db.generic.ui"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="eclipse.home" location="."/>
+	<property file="build.properties"/>
+	<!-- JavaDoc settings -->
+	<!-- No JavaDoc required for this plugin -->
+	<property name="add.javadoc" value="false"/>
+	<property name="javadocWindowTitle" value="DTP JDBC Connection Profile"/>
+	<property name="javadocDocTitle" value="DTP JDBC Connection Profile Example"/>
+	<property name="javadocPackages" value="org.eclipse.datatools.connectivity.db.*"/>
+	<property name="javadocFooter" value="&lt;i>Copyright &#169;  2005 Sybase, Inc. and others. All rights reserved. &lt;/i>"/>
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="true"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="true"/>
+	<property name="javacSource" value="${javac.source}"/>
+	<property name="javacTarget" value="${javac.target}"/>
+	<property name="compilerArg" value=""/>
+	<path id="path_bootclasspath">
+		<fileset dir="${java.home}/lib">
+			<include name="*.jar"/>
+		</fileset>
+		<fileset dir="${eclipse.home}/plugins">
+			<!-- Include jared plug-ins -->
+			<include name="org.eclipse.core.runtime_*.jar"/>
+			<include name="org.eclipse.osgi_*.jar"/>
+			<include name="org.eclipse.ui_*.jar"/>
+			<include name="org.eclipse.swt_*.jar"/>
+			<include name="org.eclipse.swt.*_*.jar"/>
+			<include name="org.eclipse.jface_*.jar"/>
+			<include name="org.eclipse.core.commands_*.jar"/>
+			<include name="org.eclipse.ui.workbench_*.jar"/>
+			<include name="org.eclipse.ui.navigator_*.jar"/>
+			<!-- Include expanded plug-ins -->
+			<include name="org.eclipse.core.runtime_*/org.eclipse.core.runtime_*.jar"/>
+			<include name="org.eclipse.osgi_*/org.eclipse.osgi_*.jar"/>
+			<include name="org.eclipse.ui_*/org.eclipse.ui_*.jar"/>
+			<include name="org.eclipse.swt_*/org.eclipse.swt_*.jar"/>
+			<include name="org.eclipse.swt.*_*/org.eclipse.swt.*_*.jar"/>
+			<include name="org.eclipse.jface_*/org.eclipse.jface_*.jar"/>
+			<include name="org.eclipse.core.commands_*/org.eclipse.core.commands_*.jar"/>
+			<include name="org.eclipse.ui.workbench_*/org.eclipse.ui.workbench_*.jar"/>
+			<include name="org.eclipse.ui.navigator_*/navigator.jar"/>
+		</fileset>
+		<!-- Dependencies on other DTP plug-ins, built before this one -->
+		<fileset dir="../">
+			<include name="org.eclipse.datatools.connectivity/bin/*"/>
+			<include name="org.eclipse.datatools.connectivity/connectivity.jar"/>
+			<include name="org.eclipse.datatools.connectivity.ui/bin/*"/>
+			<include name="org.eclipse.datatools.connectivity.ui/connectivityui.jar"/>
+			<include name="org.eclipse.datatools.connectivity.db.generic/bin/*"/>
+			<include name="org.eclipse.datatools.connectivity.db.generic/genericdb.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins">
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/${module.name}">
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+	</target>
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+	</target>
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.datatools.connectivity.db.generic.ui for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<zip destfile="${plugin.destination}/${module.name}_${plugin.version}.jar" basedir="${temp.folder}/${module.name}_${plugin.version}" filesonly="false" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+	<target name="genericdbui.jar" depends="init" unless="genericdbui.jar" description="Create jar: org.eclipse.datatools.connectivity.db.generic.ui genericdbui.jar.">
+		<delete dir="${temp.folder}/genericdbui.jar.bin"/>
+		<mkdir dir="${temp.folder}/genericdbui.jar.bin"/>
+		<!-- compile the source code -->
+		<javac destdir="${temp.folder}/genericdbui.jar.bin" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bootclasspath}" source="${javacSource}" target="${javacTarget}">
+			<compilerarg line="${compilerArg}"/>
+			<classpath refid="path_bootclasspath"/>
+			<src path="src/"/>
+		</javac>
+		<!-- Copy necessary resources -->
+		<copy todir="${temp.folder}/genericdbui.jar.bin" failonerror="true" overwrite="false">
+			<fileset dir="src/" excludes="**/*.java, **/package.htm*,null"/>
+		</copy>
+		<mkdir dir="${build.result.folder}"/>
+		<jar destfile="${build.result.folder}/genericdbui.jar" basedir="${temp.folder}/genericdbui.jar.bin"/>
+		<delete dir="${temp.folder}/genericdbui.jar.bin"/>
+	</target>
+	<target name="genericdbuisrc.zip" depends="init" unless="genericdbuisrc.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<zip destfile="${build.result.folder}/genericdbuisrc.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/" includes="**/*.java"/>
+		</zip>
+	</target>
+	<target name="build.jars" depends="init" description="Build all the jars for the plug-in: org.eclipse.datatools.connectivity.db.generic.ui.">
+		<available property="genericdbui.jar" file="${build.result.folder}/genericdbui.jar"/>
+		<antcall target="genericdbui.jar"/>
+	</target>
+	<target name="build.sources" depends="init">
+		<available property="genericdbuisrc.zip" file="${build.result.folder}/genericdbuisrc.zip"/>
+		<antcall target="genericdbuisrc.zip"/>
+	</target>
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/${module.name}_${plugin.version}"/>
+		<copy todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}" includes="genericdbui.jar"/>
+		</copy>
+		<copy todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="true" overwrite="false">
+			<fileset dir="${basedir}" includes="META-INF/,plugin.xml,plugin.properties,about.html,genericdbui.jar,icons/"/>
+		</copy>
+		<copy todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}" includes="genericdbuisrc.zip"/>
+		</copy>
+	</target>
+	<target name="build.zips" depends="init"/>
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/${module.name}_${plugin.version}"/>
+		<copy file="${build.result.folder}/genericdbuisrc.zip" todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="false" overwrite="false"/>
+	</target>
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/${module.name}_${plugin.version}"/>
+		<copy file="${temp.folder}/genericdbui.jar.bin.log" todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="false" overwrite="false"/>
+	</target>
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.datatools.connectivity.db.generic.ui of all the zips, jars and logs created.">
+		<delete file="${build.result.folder}/genericdbui.jar"/>
+		<delete file="${build.result.folder}/genericdbuisrc.zip"/>
+		<delete file="${plugin.destination}/${module.name}_${plugin.version}.jar"/>
+		<delete file="${plugin.destination}/${module.name}_${plugin.version}.zip"/>
+		<delete dir="${temp.folder}"/>
+		<antcall target="clean.download.dir"/>
+	</target>
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="C:/V3/3.1/eclipse/workspace-dtp/${module.name}" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.datatools.connectivity.db.generic.ui.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}" includes="**/*.bin.log"/>
+		</delete>
+		<zip destfile="${plugin.destination}/${module.name}_${plugin.version}.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+</project>
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic.ui/icons/new_db_element.gif b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/icons/new_db_element.gif
new file mode 100644
index 0000000..1d459ce
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/icons/new_db_element.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic.ui/plugin.properties b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/plugin.properties
new file mode 100644
index 0000000..af93ef6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/plugin.properties
@@ -0,0 +1,6 @@
+# properties file for org.eclipse.datatools.connectivity.db.generic.ui
+Bundle-Vendor = Eclipse Data Tools Platform
+Bundle-Name = Eclipse Data Tools Platform Generic DB UI Plug-in
+page.name.jdbcConnectionProperties = JDBC Connection Properties
+wizard.name = Generic JDBC
+wizard.description = Create a Generic JDBC connection profile.
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic.ui/plugin.xml b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/plugin.xml
new file mode 100644
index 0000000..3d0e519
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/plugin.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+   <extension
+         point="org.eclipse.datatools.connectivity.connectionProfile">
+      <newWizard
+            class="org.eclipse.datatools.connectivity.db.generic.internal.ui.NewGenericJDBCConnectionProfileWizard"
+            icon="icons/new_db_element.gif"
+            id="org.eclipse.datatools.connectivity.db.generic.ui.NewConnectionProfileWizard"
+            name="%wizard.name"
+            description = "%wizard.description"
+            profile="org.eclipse.datatools.connectivity.db.generic.connectionProfile"/>
+   </extension>
+   <extension
+         point="org.eclipse.ui.propertyPages">
+      <page
+            class="org.eclipse.datatools.connectivity.db.generic.internal.ui.GenericJDBCDBProfilePropertyPage"
+            id="org.eclipse.datatools.connectivity.db.generic.profileProperties"
+            name="%page.name.jdbcConnectionProperties">
+         <filter
+               name="org.eclipse.datatools.profile.property.id"
+               value="org.eclipse.datatools.connectivity.db.generic.connectionProfile"/>
+         <enabledWhen>
+            <instanceof
+                  value="org.eclipse.datatools.connectivity.IConnectionProfile">
+            </instanceof>
+         </enabledWhen>
+      </page>
+   </extension>
+   <extension
+         point="org.eclipse.datatools.connectivity.ui.driverPropertyEditor">
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.DriverClassBrowsePropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.driverClass"
+            driverTemplateID="org.eclipse.datatools.connectivity.db.generic.genericDriverTemplate"
+            id="org.eclipse.datatools.connectivity.db.generic.genericDriver.ui.propertyEditor.driverClass">
+      </propertyEditor>
+   </extension>
+   
+   <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.connectivity.db.generic.internal.ui.drivers.GenericJDBCDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.connectivity.db.generic.genericDriverTemplate"
+            id="org.eclipse.datatools.connectivity.db.generic.internal.ui.drivers.GenericJDBCDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+</plugin>
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/internal/ui/GenericJDBCDBProfileDetailsWizardPage.java b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/internal/ui/GenericJDBCDBProfileDetailsWizardPage.java
new file mode 100644
index 0000000..695bdf5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/internal/ui/GenericJDBCDBProfileDetailsWizardPage.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.db.generic.internal.ui;
+
+import org.eclipse.datatools.connectivity.db.internal.generic.IGenericJDBCConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.ui.wizards.ExtensibleProfileDetailsWizardPage;
+
+public class GenericJDBCDBProfileDetailsWizardPage extends
+		ExtensibleProfileDetailsWizardPage {
+
+	public GenericJDBCDBProfileDetailsWizardPage(String pageName) {
+		super(pageName, IGenericJDBCConnectionProfileConstants.GENERIC_JDBC_CATEGORY_ID);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/internal/ui/GenericJDBCDBProfilePropertyPage.java b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/internal/ui/GenericJDBCDBProfilePropertyPage.java
new file mode 100644
index 0000000..085d433
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/internal/ui/GenericJDBCDBProfilePropertyPage.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.db.generic.internal.ui;
+
+import org.eclipse.datatools.connectivity.db.internal.generic.IGenericJDBCConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.ui.wizards.ExtensibleProfileDetailsPropertyPage;
+
+public class GenericJDBCDBProfilePropertyPage extends
+		ExtensibleProfileDetailsPropertyPage {
+
+	public GenericJDBCDBProfilePropertyPage() {
+		super(IGenericJDBCConnectionProfileConstants.GENERIC_JDBC_CATEGORY_ID);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/internal/ui/NewGenericJDBCConnectionProfileWizard.java b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/internal/ui/NewGenericJDBCConnectionProfileWizard.java
new file mode 100644
index 0000000..5d022e3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/internal/ui/NewGenericJDBCConnectionProfileWizard.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.db.generic.internal.ui;
+
+import org.eclipse.datatools.connectivity.ui.wizards.ExtensibleNewConnectionProfileWizard;
+
+public class NewGenericJDBCConnectionProfileWizard extends
+		ExtensibleNewConnectionProfileWizard {
+	public NewGenericJDBCConnectionProfileWizard() {
+		super(
+				new GenericJDBCDBProfileDetailsWizardPage(
+						"org.eclipse.datatools.connectivity.db.generic.internal.ui.GenericJDBCDBProfileDetailsWizardPage")); //$NON-NLS-1$
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/internal/ui/drivers/GenericJDBCDriverUIContributor.java b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/internal/ui/drivers/GenericJDBCDriverUIContributor.java
new file mode 100644
index 0000000..e2b7599
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/internal/ui/drivers/GenericJDBCDriverUIContributor.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.db.generic.internal.ui.drivers;
+
+import org.eclipse.datatools.connectivity.ui.wizards.OtherDriverUIContributor;
+
+public class GenericJDBCDriverUIContributor extends OtherDriverUIContributor {
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/ui/GenericDBProfileDetailsWizardPage.java b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/ui/GenericDBProfileDetailsWizardPage.java
new file mode 100644
index 0000000..144405c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/ui/GenericDBProfileDetailsWizardPage.java
@@ -0,0 +1,480 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005, 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ * 		IBM Corporation - defect fix #213266
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.db.generic.ui;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.eclipse.datatools.connectivity.db.generic.GenericDBPlugin;
+import org.eclipse.datatools.connectivity.db.generic.IDBDriverDefinitionConstants;
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.internal.ui.DelimitedStringList;
+import org.eclipse.datatools.connectivity.internal.ui.DriverListCombo;
+import org.eclipse.datatools.connectivity.ui.wizards.ConnectionProfileDetailsPage;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.help.IContextProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * This class gathers the properties for the generic DB connection profile.
+ * 
+ * @author brianf
+ */
+public class GenericDBProfileDetailsWizardPage 
+	extends ConnectionProfileDetailsPage
+	implements IContextProvider {
+
+	// ui pieces
+	private Text mDatabaseNameText;
+
+	private Text mURLText;
+
+	private Text mDBUIDText;
+
+	private Text mDBPWDText;
+
+	private Button mSaveDBPWDCheckbox;
+
+	private DelimitedStringList mDBConnProps;
+
+	final DriverListCombo combo = new DriverListCombo();
+
+	// stashed driver instance
+	private DriverInstance mDriverInstance;
+	
+	private String mDriverCategory;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param pageName
+	 */
+	public GenericDBProfileDetailsWizardPage(String pageName) {
+		super(pageName);
+		setTitle(GenericDBPlugin.getDefault().getResourceString(
+				"GenericDBProfileDetailsWizardPage.title")); //$NON-NLS-1$
+		setDescription(GenericDBPlugin.getDefault().getResourceString(
+				"GenericDBProfileDetailsWizardPage.msg")); //$NON-NLS-1$
+		setDriverCategory(IDBDriverDefinitionConstants.DATABASE_CATEGORY_ID);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+	 */
+	public void createCustomControl(Composite parent) {
+		Composite content = new Composite(parent, SWT.NULL);
+		GridLayout layout = new GridLayout(2, false);
+		content.setLayout(layout);
+
+		// set up the drivers combo
+		this.combo.setLabelText(GenericDBPlugin.getDefault().getResourceString(
+				"GenericDBProfileDetailsWizardPage.driverCombo.label")); //$NON-NLS-1$
+		this.combo.setCategory(getDriverCategory());
+		this.combo.setNullDriverIsValid(false);
+		this.combo.createContents(content);
+		if (this.combo.getErrorMessage() != null) {
+			setErrorMessage(this.combo.getErrorMessage());
+		}
+
+		// set up the fields
+		this.mDatabaseNameText = (Text) createLabelTextPair(
+				content,
+				GenericDBPlugin.getDefault().getResourceString(
+						"GenericDBProfileDetailsWizardPage.databaseName.label"), //$NON-NLS-1$
+				this.mURLText, SWT.BORDER, GridData.FILL_HORIZONTAL);
+		this.mURLText = (Text) createLabelTextPair(content, GenericDBPlugin
+				.getDefault().getResourceString(
+						"GenericDBProfileDetailsWizardPage.url.label"), //$NON-NLS-1$
+				this.mURLText, SWT.BORDER, GridData.FILL_HORIZONTAL);
+		this.mDBUIDText = (Text) createLabelTextPair(content, GenericDBPlugin
+				.getDefault().getResourceString(
+						"GenericDBProfileDetailsWizardPage.userName.label"), //$NON-NLS-1$
+				this.mDBUIDText, SWT.BORDER, GridData.FILL_HORIZONTAL);
+
+		this.mDBPWDText = (Text) createLabelTextPair(content, GenericDBPlugin
+				.getDefault().getResourceString(
+						"GenericDBProfileDetailsWizardPage.password.label"), //$NON-NLS-1$
+				this.mDBPWDText, SWT.BORDER | SWT.PASSWORD, GridData.FILL_HORIZONTAL);
+
+		this.mSaveDBPWDCheckbox = new Button(content, SWT.CHECK);
+		this.mSaveDBPWDCheckbox.setText(GenericDBPlugin.getDefault()
+				.getResourceString(
+						"GenericDBProfileDetailsWizardPage.persistpassword.label")); //$NON-NLS-1$
+		this.mSaveDBPWDCheckbox.setLayoutData(new GridData(GridData.BEGINNING,
+				GridData.CENTER, true, false, 2, 1));
+
+		// spacer
+		Composite spacer = new Composite(content, SWT.NULL);
+		GridData gdata = new GridData(GridData.FILL_HORIZONTAL);
+		gdata.horizontalSpan = 2;
+		gdata.heightHint = 20;
+		spacer.setLayoutData(gdata);
+
+		// followed by the optional properties
+		Label label = new Label(content, SWT.NULL);
+		gdata = new GridData(GridData.FILL_HORIZONTAL);
+		gdata.horizontalSpan = 2;
+		label.setLayoutData(gdata);
+		label.setText(GenericDBPlugin.getDefault().getResourceString(
+				"GenericDBProfileDetailsWizardPage.optionalProps.label")); //$NON-NLS-1$
+
+		this.mDBConnProps = new DelimitedStringList(content, SWT.NONE);
+		gdata = new GridData(GridData.FILL_HORIZONTAL);
+		gdata.horizontalSpan = 2;
+		this.mDBConnProps.setLayoutData(gdata);
+
+		// now set up the initial instance
+		if (this.mDriverInstance == null)
+			this.mDriverInstance = this.combo.getSelectedDriverInstance();
+
+		if (this.mDriverInstance != null) {
+			this.mURLText.setText(getDriverURL());
+		}
+
+		this.mDBConnProps.addChangeListener(new ChangeListener() {
+
+			public void stateChanged(ChangeEvent arg0) {
+				setErrorMessage(null);
+				if (GenericDBProfileDetailsWizardPage.this.mDBConnProps.getWarning() != null) {
+					setErrorMessage(GenericDBProfileDetailsWizardPage.this.mDBConnProps
+							.getWarning());
+				}
+			}
+
+		});
+
+		// add a change listener to the combo box so
+		// we know when a new driver has been selected
+		this.combo.addChangeListener(new ChangeListener() {
+
+			public void stateChanged(ChangeEvent arg0) {
+				GenericDBProfileDetailsWizardPage.this.mDriverInstance = GenericDBProfileDetailsWizardPage.this.combo
+						.getSelectedDriverInstance();
+				setErrorMessage(null);
+				if (GenericDBProfileDetailsWizardPage.this.combo.getErrorMessage() != null) {
+					setErrorMessage(GenericDBProfileDetailsWizardPage.this.combo
+							.getErrorMessage());
+				}
+				GenericDBProfileDetailsWizardPage.this.mDatabaseNameText
+						.setText(getDriverDatabaseName());
+
+				GenericDBProfileDetailsWizardPage.this.mURLText
+						.setText(getDriverURL());
+
+				String username = GenericDBProfileDetailsWizardPage.this
+						.getPropertyFromDriverInstance(IDBDriverDefinitionConstants.USERNAME_PROP_ID);
+				if (username == null || username.trim().length() == 0)
+					username = new String();
+				GenericDBProfileDetailsWizardPage.this.mDBUIDText.setText(username);
+
+				String password = GenericDBProfileDetailsWizardPage.this
+						.getPropertyFromDriverInstance(IDBDriverDefinitionConstants.PASSWORD_PROP_ID);
+				if (password == null || password.trim().length() == 0)
+					password = new String();
+				GenericDBProfileDetailsWizardPage.this.mDBPWDText.setText(password);
+
+				setPageComplete(isValid());
+			}
+
+		});
+	}
+
+	private String getPropertyFromDriverInstance(String propertyID) {
+		String returnStr = new String();
+		if (this.mDriverInstance != null
+				&& this.mDriverInstance.getProperty(propertyID) != null) {
+			returnStr = this.mDriverInstance.getProperty(propertyID);
+		}
+		return returnStr;
+	}
+
+	/**
+	 * Get the sample URL from the driver instance.
+	 * 
+	 * @return
+	 */
+	public String getDriverURL() {
+		if (this.mDriverInstance != null
+				&& this.mDriverInstance
+						.getProperty(IDBDriverDefinitionConstants.URL_PROP_ID) != null)
+			return this.mDriverInstance
+					.getProperty(IDBDriverDefinitionConstants.URL_PROP_ID);
+		return new String();
+	}
+
+	/**
+	 * Get the sample database name from the driver instance.
+	 * 
+	 * @return
+	 */
+	public String getDriverDatabaseName() {
+		if (this.mDriverInstance != null
+				&& this.mDriverInstance
+						.getProperty(IDBDriverDefinitionConstants.DATABASE_NAME_PROP_ID) != null)
+			return this.mDriverInstance
+					.getProperty(IDBDriverDefinitionConstants.DATABASE_NAME_PROP_ID);
+		return new String();
+	}
+
+	/**
+	 * Get the vendor
+	 * 
+	 * @return
+	 */
+	public String getVendor() {
+		String vendor = ""; //$NON-NLS-1$
+		if (this.mDriverInstance != null) {
+			vendor = this.mDriverInstance
+					.getProperty(IDBDriverDefinitionConstants.DATABASE_VENDOR_PROP_ID);
+		}
+		return vendor;
+	}
+
+	/**
+	 * Get the version
+	 * 
+	 * @return
+	 */
+	public String getVersion() {
+		String version = ""; //$NON-NLS-1$
+		if (this.mDriverInstance != null) {
+			version = this.mDriverInstance
+					.getProperty(IDBDriverDefinitionConstants.DATABASE_VERSION_PROP_ID);
+		}
+		return version;
+	}
+
+	/**
+	 * Get the driver class
+	 * 
+	 * @return
+	 */
+	public String getDriverClass() {
+		String driverClass = ""; //$NON-NLS-1$
+		if (this.mDriverInstance != null) {
+			driverClass = this.mDriverInstance
+					.getProperty(IDBDriverDefinitionConstants.DRIVER_CLASS_PROP_ID);
+		}
+		return driverClass;
+	}
+	
+	/**
+	 * Get the user name
+	 * 
+	 * @return
+	 */
+	public String getDBUID() {
+		return this.mDBUIDText.getText();
+	}
+
+	/**
+	 * Get the password
+	 * 
+	 * @return
+	 */
+	public String getDBPWD() {
+		return this.mDBPWDText.getText();
+	}
+
+	/**
+	 * Get the password
+	 * 
+	 * @return
+	 */
+	public boolean getSaveDBPWD() {
+		return this.mSaveDBPWDCheckbox.getSelection();
+	}
+
+	/**
+	 * Get the optional connection properties
+	 * 
+	 * @return
+	 */
+	public String getDBConnProps() {
+		return this.mDBConnProps.getSelection();
+	}
+
+	/**
+	 * Get the database name
+	 * 
+	 * @return
+	 */
+	public String getDatabaseName() {
+		return this.mDatabaseNameText.getText();
+	}
+
+	/**
+	 * Get the URL for the CP
+	 * 
+	 * @return
+	 */
+	public String getURL() {
+		return this.mURLText.getText();
+	}
+
+	/**
+	 * Get the driver ID
+	 * 
+	 * @return
+	 */
+	public String getDriverID() {
+		return this.mDriverInstance.getId();
+	}
+
+	/*
+	 * Create a label and a text box side by side.
+	 */
+	private Control createLabelTextPair(Composite parent, String labelText,
+			Control ctl, int style, int gData) {
+		Label label = new Label(parent, SWT.NULL);
+		label.setLayoutData(new GridData());
+		label.setText(labelText);
+
+		ctl = new Text(parent, style);
+		ctl.setLayoutData(new GridData(gData));
+
+		return ctl;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.sybase.suade.common.ui.wizards.ISummaryDataSource#getSummaryData()
+	 */
+	public List getSummaryData() {
+		List data = new ArrayList();
+
+		data
+				.add(new String[] {
+						GenericDBPlugin
+								.getDefault()
+								.getResourceString(
+										"GenericDBProfileDetailsWizardPage.summary.driverName.label"), //$NON-NLS-1$
+						mDriverInstance.getName() });
+
+		data
+				.add(new String[] {
+						GenericDBPlugin
+								.getDefault()
+								.getResourceString(
+										"GenericDBProfileDetailsWizardPage.summary.connProps.label"), //$NON-NLS-1$
+						getDBConnProps() });
+
+		data
+				.add(new String[] {
+						GenericDBPlugin
+								.getDefault()
+								.getResourceString(
+										"GenericDBProfileDetailsWizardPage.summary.userName.label"), //$NON-NLS-1$
+						getDBUID() });
+
+		StringBuffer pwdMask = new StringBuffer();
+		if (getDBPWD() != null && getDBPWD().length() > 0) {
+			for (int i = 0, count = getDBPWD().length(); i < count; ++i) {
+				pwdMask = pwdMask.append('*');
+			}
+		}
+
+		data
+				.add(new String[] {
+						GenericDBPlugin
+								.getDefault()
+								.getResourceString(
+										"GenericDBProfileDetailsWizardPage.summary.password.label"), //$NON-NLS-1$
+						pwdMask.toString() });
+
+		data.add(new String[] {
+				GenericDBPlugin.getDefault().getResourceString(
+						"GenericDBProfileDetailsWizardPage.summary.url.label"), //$NON-NLS-1$
+				getURL() });
+
+		return data;
+	}
+
+	private boolean isValid() {
+		if (getErrorMessage() != null) {
+			setPageComplete(false);
+			return false;
+		}
+
+		return true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.dialogs.DialogPage#setErrorMessage(java.lang.String)
+	 */
+	public void setErrorMessage(String newMessage) {
+		super.setErrorMessage(newMessage);
+		isValid();
+	}
+
+	
+	public String getDriverCategory() {
+		return mDriverCategory;
+	}
+
+	
+	/**
+	 * Sets the driver category that should be used for displaying available
+	 * driver defnitions.
+	 * 
+	 * @param driverCategory
+	 */
+	public void setDriverCategory(String driverCategory) {
+		mDriverCategory = driverCategory;
+		if (combo != null) {
+			combo.setCategory(mDriverCategory);
+		}
+	}
+
+	private ContextProviderDelegate contextProviderDelegate =
+		new ContextProviderDelegate(GenericDBUIPlugin.getDefault().getBundle().getSymbolicName());
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+
+	public void createControl(Composite parent) {
+		super.createControl(parent);
+		getShell().setData( HelpUtil.CONTEXT_PROVIDER_KEY, this);
+		HelpUtil.setHelp( getControl(), HelpUtil.getContextId(IHelpContextsGenericDBProfile.GENERIC_DB_PROFILE_WIZARD_PAGE, GenericDBUIPlugin.getDefault().getBundle().getSymbolicName()));
+	}
+
+	public void dispose() {
+		this.combo.dispose();
+		super.dispose();
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/ui/GenericDBProfilePropertyPage.java b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/ui/GenericDBProfilePropertyPage.java
new file mode 100644
index 0000000..b8c1aaa
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/ui/GenericDBProfilePropertyPage.java
@@ -0,0 +1,380 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.db.generic.ui;
+
+import java.util.Properties;
+
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.eclipse.datatools.connectivity.ConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.db.generic.GenericDBPlugin;
+import org.eclipse.datatools.connectivity.db.generic.IDBConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.db.generic.IDBDriverDefinitionConstants;
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.internal.ui.DelimitedStringList;
+import org.eclipse.datatools.connectivity.internal.ui.DriverListCombo;
+import org.eclipse.datatools.connectivity.ui.wizards.ProfileDetailsPropertyPage;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.help.IContextProvider;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * This class allows the user to edit connection properties for the generic DB
+ * connection profile.
+ * 
+ * @author ledunnel
+ */
+public class GenericDBProfilePropertyPage 
+	extends ProfileDetailsPropertyPage
+	implements IContextProvider {
+
+	private static final String EMPTY_STRING = new String();
+
+	private Text mDatabaseNameText;
+	private Text mDBUIDText;
+	private Text mDBPWDText;
+	private Text mURLText;
+	private Button mSaveDBPWDCheckbox;
+
+	final DriverListCombo combo = new DriverListCombo();
+	private DelimitedStringList mDBConnProps;
+	private DriverInstance mDriverInstance;
+
+	private String mDriverCategory;
+
+	public GenericDBProfilePropertyPage() {
+		super();
+		noDefaultAndApplyButton();
+		setDriverCategory(IDBDriverDefinitionConstants.DATABASE_CATEGORY_ID);
+	}
+
+	/**
+	 * @see PreferencePage#createContents(Composite)
+	 */
+	protected void createCustomContents(Composite parent) {
+		Composite content = new Composite(parent, SWT.NULL);
+		GridLayout layout = new GridLayout(2, false);
+		content.setLayout(layout);
+
+		this.combo.setLabelText(GenericDBPlugin.getDefault().getResourceString(
+				"GenericDBProfileDetailsWizardPage.driverCombo.label")); //$NON-NLS-1$
+		this.combo.setCategory(getDriverCategory());
+		this.combo.setNullDriverIsValid(false);
+		this.combo.createContents(content);
+
+		this.mDatabaseNameText = (Text) createLabelTextPair(
+				content,
+				GenericDBPlugin.getDefault().getResourceString(
+						"GenericDBProfileDetailsWizardPage.databaseName.label"), //$NON-NLS-1$
+				this.mURLText, SWT.BORDER, GridData.FILL_HORIZONTAL);		
+		this.mURLText = (Text) createLabelTextPair(content, GenericDBPlugin
+				.getDefault().getResourceString(
+						"GenericDBProfileDetailsWizardPage.url.label"), //$NON-NLS-1$
+				this.mURLText, SWT.BORDER, GridData.FILL_HORIZONTAL);
+		this.mDBUIDText = (Text) createLabelTextPair(content, GenericDBPlugin
+				.getDefault().getResourceString(
+						"GenericDBProfileDetailsWizardPage.userName.label"), //$NON-NLS-1$ 
+				this.mDBUIDText, SWT.BORDER, GridData.FILL_HORIZONTAL); //$NON-NLS-1$
+
+		this.mDBPWDText = (Text) createLabelTextPair(content, GenericDBPlugin
+				.getDefault().getResourceString(
+						"GenericDBProfileDetailsWizardPage.password.label"), //$NON-NLS-1$, 
+				this.mDBPWDText, SWT.BORDER | SWT.PASSWORD, GridData.FILL_HORIZONTAL); //$NON-NLS-1$
+
+		this.mSaveDBPWDCheckbox = new Button(content, SWT.CHECK);
+		this.mSaveDBPWDCheckbox.setText(GenericDBPlugin.getDefault()
+				.getResourceString(
+						"GenericDBProfileDetailsWizardPage.persistpassword.label")); //$NON-NLS-1$
+		this.mSaveDBPWDCheckbox.setLayoutData(new GridData(GridData.BEGINNING,
+				GridData.CENTER, true, false, 2, 1));
+
+		Composite spacer = new Composite(content, SWT.NULL);
+		GridData gdata = new GridData(GridData.FILL_HORIZONTAL);
+		gdata.horizontalSpan = 2;
+		gdata.heightHint = 20;
+		spacer.setLayoutData(gdata);
+
+		Label label = new Label(content, SWT.NULL);
+		gdata = new GridData(GridData.FILL_HORIZONTAL);
+		gdata.horizontalSpan = 2;
+		label.setLayoutData(gdata);
+		label.setText(GenericDBPlugin.getDefault().getResourceString(
+				"GenericDBProfileDetailsWizardPage.optionalProps.label")); //$NON-NLS-1$
+
+		this.mDBConnProps = new DelimitedStringList(content, SWT.NONE);
+		gdata = new GridData(GridData.FILL_HORIZONTAL);
+		gdata.horizontalSpan = 2;
+		this.mDBConnProps.setLayoutData(gdata);
+
+		this.mDBConnProps.addChangeListener(new ChangeListener() {
+
+			public void stateChanged(ChangeEvent arg0) {
+				setErrorMessage(null);
+				if (GenericDBProfilePropertyPage.this.mDBConnProps.getWarning() != null) {
+					setErrorMessage(GenericDBProfilePropertyPage.this.mDBConnProps
+							.getWarning());
+				}
+			}
+
+		});
+
+		this.combo.addChangeListener(new ChangeListener() {
+
+			public void stateChanged(ChangeEvent arg0) {
+				GenericDBProfilePropertyPage.this.mDriverInstance = GenericDBProfilePropertyPage.this.combo
+						.getSelectedDriverInstance();
+				setErrorMessage(null);
+				if (GenericDBProfilePropertyPage.this.combo.getErrorMessage() != null) {
+					setErrorMessage(GenericDBProfilePropertyPage.this.combo
+							.getErrorMessage());
+				}
+				else
+					GenericDBProfilePropertyPage.this.mURLText
+							.setText(getDriverURL());
+				String username = GenericDBProfilePropertyPage.this
+						.getPropertyFromDriverInstance(IDBDriverDefinitionConstants.USERNAME_PROP_ID);
+				if (username == null || username.trim().length() == 0)
+					username = new String();
+				String oldUsername = GenericDBProfilePropertyPage.this.mDBUIDText
+						.getText();
+				if (oldUsername == null || oldUsername.trim().length() == 0)
+					oldUsername = new String();
+				if (oldUsername.length() == 0)
+					GenericDBProfilePropertyPage.this.mDBUIDText
+							.setText(username);
+
+				String password = GenericDBProfilePropertyPage.this
+						.getPropertyFromDriverInstance(IDBDriverDefinitionConstants.PASSWORD_PROP_ID);
+				if (password == null || password.trim().length() == 0)
+					password = new String();
+				String oldPassword = GenericDBProfilePropertyPage.this.mDBPWDText
+						.getText();
+				if (oldPassword == null || oldPassword.trim().length() == 0)
+					oldPassword = new String();
+				if (oldPassword.length() == 0)
+					GenericDBProfilePropertyPage.this.mDBPWDText
+							.setText(password);
+			}
+
+		});
+
+		initControls();
+
+		// return content;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.preference.IPreferencePage#performOk()
+	 */
+	protected Properties collectProperties() {
+		Properties props = new Properties();
+
+		String driverID = EMPTY_STRING;
+
+		if (this.combo.getSelectedDriverInstance() != null) {
+			DriverInstance instance = this.combo.getSelectedDriverInstance();
+			driverID = instance.getId();
+		}
+
+		props.setProperty(ConnectionProfileConstants.PROP_DRIVER_DEFINITION_ID,
+				driverID);
+		props.setProperty(
+				IDBConnectionProfileConstants.CONNECTION_PROPERTIES_PROP_ID,
+				this.mDBConnProps.getSelection());	
+		props.setProperty(IDBDriverDefinitionConstants.DATABASE_VENDOR_PROP_ID, getPropertyFromDriverInstance(IDBDriverDefinitionConstants.DATABASE_VENDOR_PROP_ID));		
+		props.setProperty(IDBDriverDefinitionConstants.DATABASE_VERSION_PROP_ID, getPropertyFromDriverInstance(IDBDriverDefinitionConstants.DATABASE_VERSION_PROP_ID));		
+		props.setProperty(IDBDriverDefinitionConstants.DRIVER_CLASS_PROP_ID, getPropertyFromDriverInstance(IDBDriverDefinitionConstants.DRIVER_CLASS_PROP_ID));	
+		props.setProperty(IDBDriverDefinitionConstants.DATABASE_NAME_PROP_ID, this.mDatabaseNameText
+				.getText());
+		props.setProperty(IDBDriverDefinitionConstants.PASSWORD_PROP_ID, this.mDBPWDText
+				.getText());
+		props.setProperty(IDBDriverDefinitionConstants.USERNAME_PROP_ID, this.mDBUIDText
+				.getText());
+		props.setProperty(IDBDriverDefinitionConstants.URL_PROP_ID,
+				this.mURLText.getText());
+		props.setProperty(
+				IDBConnectionProfileConstants.SAVE_PASSWORD_PROP_ID, String
+						.valueOf(this.mSaveDBPWDCheckbox.getSelection()));
+
+		return props;
+	}
+
+	/**
+	 * 
+	 */
+	private void initControls() {
+		IConnectionProfile profile = getConnectionProfile();
+		String driverID = profile.getBaseProperties().getProperty(
+				ConnectionProfileConstants.PROP_DRIVER_DEFINITION_ID);
+		if (driverID != null) {
+			this.combo.setSelectionToID(driverID);
+		}
+
+		String connectionProps = profile.getBaseProperties().getProperty(
+				IDBConnectionProfileConstants.CONNECTION_PROPERTIES_PROP_ID);
+		if (connectionProps != null) {
+			this.mDBConnProps.setSelection(connectionProps);
+		}
+
+		String databaseName = profile.getBaseProperties().getProperty(
+				IDBDriverDefinitionConstants.DATABASE_NAME_PROP_ID);
+		if (databaseName != null) {
+			this.mDatabaseNameText.setText(databaseName);
+		}
+		
+		String databasePwd = profile.getBaseProperties().getProperty(
+				IDBDriverDefinitionConstants.PASSWORD_PROP_ID);
+		if (databasePwd != null) {
+			this.mDBPWDText.setText(databasePwd);
+		}
+
+		String databaseUid = profile.getBaseProperties().getProperty(
+				IDBDriverDefinitionConstants.USERNAME_PROP_ID);
+		if (databaseUid != null) {
+			this.mDBUIDText.setText(databaseUid);
+		}
+
+		String urlText = profile.getBaseProperties().getProperty(
+				IDBDriverDefinitionConstants.URL_PROP_ID);
+		if (urlText != null) {
+			this.mURLText.setText(urlText);
+		}
+
+		this.mSaveDBPWDCheckbox.setSelection(Boolean.valueOf(
+				profile.getBaseProperties().getProperty(
+						IDBConnectionProfileConstants.SAVE_PASSWORD_PROP_ID,
+						Boolean.FALSE.toString())).booleanValue());
+
+		setErrorMessage(null);
+		if (this.combo.getErrorMessage() != null) {
+			setErrorMessage(this.combo.getErrorMessage());
+		}
+	}
+
+	private String getPropertyFromDriverInstance(String propertyID) {
+		String returnStr = new String();
+		if (this.mDriverInstance != null
+				&& this.mDriverInstance.getProperty(propertyID) != null) {
+			returnStr = this.mDriverInstance.getProperty(propertyID);
+		}
+		return returnStr;
+	}
+
+	/**
+	 * @param parent
+	 * @param labelText
+	 * @param ctl
+	 * @param style
+	 * @param gData
+	 * @return
+	 */
+	private Control createLabelTextPair(Composite parent, String labelText,
+			Control ctl, int style, int gData) {
+		Label label = new Label(parent, SWT.NULL);
+		label.setLayoutData(new GridData());
+		label.setText(labelText);
+
+		ctl = new Text(parent, style);
+		ctl.setLayoutData(new GridData(gData));
+
+		return ctl;
+	}
+
+	/**
+	 * @return
+	 */
+	public String getDriverURL() {
+		return this.mDriverInstance
+				.getProperty(IDBDriverDefinitionConstants.URL_PROP_ID);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.preference.IPreferencePage#isValid()
+	 */
+	public boolean isValid() {
+		if (getErrorMessage() != null) {
+			return false;
+		}
+		return super.isValid();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.dialogs.DialogPage#setErrorMessage(java.lang.String)
+	 */
+	public void setErrorMessage(String newMessage) {
+		super.setErrorMessage(newMessage);
+		isValid();
+	}
+
+	public String getDriverCategory() {
+		return mDriverCategory;
+	}
+
+	
+	/**
+	 * Sets the driver category that should be used for displaying available
+	 * driver defnitions.
+	 * 
+	 * @param driverCategory
+	 */
+	public void setDriverCategory(String driverCategory) {
+		mDriverCategory = driverCategory;
+		if (combo != null) {
+			combo.setCategory(mDriverCategory);
+		}
+	}
+
+	private ContextProviderDelegate contextProviderDelegate =
+		new ContextProviderDelegate(GenericDBUIPlugin.getDefault().getBundle().getSymbolicName());
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+
+	protected Control createContents(Composite parent) {
+		Control contents = super.createContents(parent);
+		getShell().setData( HelpUtil.CONTEXT_PROVIDER_KEY, this);
+		HelpUtil.setHelp( getControl(), HelpUtil.getContextId(IHelpContextsGenericDBProfile.GENERIC_DB_PROFILE_WIZARD_PAGE, GenericDBUIPlugin.getDefault().getBundle().getSymbolicName()));
+		return contents;
+	}
+
+	public void dispose() {
+		this.combo.dispose();
+		super.dispose();
+	}
+}
+
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/ui/GenericDBUIPlugin.java b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/ui/GenericDBUIPlugin.java
new file mode 100644
index 0000000..aca86d1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/ui/GenericDBUIPlugin.java
@@ -0,0 +1,56 @@
+package org.eclipse.datatools.connectivity.db.generic.ui;
+
+import org.eclipse.ui.plugin.*;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.osgi.framework.BundleContext;
+
+/**
+ * NON-API
+ * 
+ * The main plugin class to be used in the desktop.
+ */
+public class GenericDBUIPlugin extends AbstractUIPlugin {
+
+	//The shared instance.
+	private static GenericDBUIPlugin plugin;
+	
+	/**
+	 * The constructor.
+	 */
+	public GenericDBUIPlugin() {
+		plugin = this;
+	}
+
+	/**
+	 * This method is called upon plug-in activation
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+	}
+
+	/**
+	 * This method is called when the plug-in is stopped
+	 */
+	public void stop(BundleContext context) throws Exception {
+		super.stop(context);
+		plugin = null;
+	}
+
+	/**
+	 * Returns the shared instance.
+	 */
+	public static GenericDBUIPlugin getDefault() {
+		return plugin;
+	}
+
+	/**
+	 * Returns an image descriptor for the image file at the given
+	 * plug-in relative path.
+	 *
+	 * @param path the path
+	 * @return the image descriptor
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return AbstractUIPlugin.imageDescriptorFromPlugin("org.eclipse.datatools.connectivity.db.generic.ui", path); //$NON-NLS-1$
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/ui/IHelpContextsGenericDBProfile.java b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/ui/IHelpContextsGenericDBProfile.java
new file mode 100644
index 0000000..cda02d8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/ui/IHelpContextsGenericDBProfile.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.db.generic.ui;
+
+public interface IHelpContextsGenericDBProfile {
+
+	/**
+	 * TPS_helpKey_constants_for_plug-in: org.eclipse.datatools.connectivity.db.generic.ui
+	 */
+
+	/*
+	 * GENERIC_DB_PROFILE_WIZARD_PAGE = the wizard page that collects SQL Model - JDBC Connection profile
+	 * details such as the JDBC url, user id, password, etc.
+	 */
+	public static final String GENERIC_DB_PROFILE_WIZARD_PAGE = "GENERIC_DB_PROFILE_WIZARD_PAGE";
+
+	/*
+	 * GENERIC_DB_PROFILE_PROPERTY_PAGE = the property page that collects SQL Model - JDBC Connection profile
+	 * details such as the JDBC url, user id, password, etc.
+	 */
+	public static final String GENERIC_DB_PROFILE_PROPERTY_PAGE = "GENERIC_DB_PROFILE_PROPERTY_PAGE";
+
+	/*
+	 * GENERIC_DB_PROFILE_WIZARD = the actual New SQL Model - JDBC Connection Profile wizard
+	 */
+	public static final String GENERIC_DB_PROFILE_WIZARD = "GENERIC_DB_PROFILE_WIZARD";
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/ui/NewConnectionProfileWizard.java b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/ui/NewConnectionProfileWizard.java
new file mode 100644
index 0000000..faca4d4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/ui/NewConnectionProfileWizard.java
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.db.generic.ui;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.ConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.db.generic.GenericDBPlugin;
+import org.eclipse.datatools.connectivity.db.generic.IDBConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.db.generic.IDBDriverDefinitionConstants;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * @see Wizard
+ */
+public class NewConnectionProfileWizard
+		extends
+		org.eclipse.datatools.connectivity.ui.wizards.NewConnectionProfileWizard {
+
+	protected GenericDBProfileDetailsWizardPage mPropPage;
+
+	public NewConnectionProfileWizard() {
+		setWindowTitle(GenericDBPlugin.getDefault().getResourceString(
+				"NewConnectionProfileWizard.title")); //$NON-NLS-1$
+	}
+
+    /**
+     * @see org.eclipse.datatools.connectivity.ui.wizards.NewConnectionProfileWizard#addCustomPages()
+     */
+	public void addCustomPages() {
+		mPropPage = new GenericDBProfileDetailsWizardPage("detailsPage"); //$NON-NLS-1$
+		addPage(mPropPage);
+	}
+
+	/** 
+     * @see org.eclipse.datatools.connectivity.ui.wizards.NewConnectionProfileWizard#getProfileProperties()
+	 */
+	public Properties getProfileProperties() {
+		Properties props = new Properties();
+		props.setProperty(ConnectionProfileConstants.PROP_DRIVER_DEFINITION_ID,
+				this.mPropPage.getDriverID());
+		props.setProperty(
+				IDBConnectionProfileConstants.CONNECTION_PROPERTIES_PROP_ID,
+				this.mPropPage.getDBConnProps());
+		props.setProperty(IDBDriverDefinitionConstants.DRIVER_CLASS_PROP_ID, this.mPropPage
+				.getDriverClass());
+		props.setProperty(IDBDriverDefinitionConstants.DATABASE_VENDOR_PROP_ID, this.mPropPage
+				.getVendor());		
+		props.setProperty(IDBDriverDefinitionConstants.DATABASE_VERSION_PROP_ID, this.mPropPage
+				.getVersion());			
+		props.setProperty(IDBDriverDefinitionConstants.DATABASE_NAME_PROP_ID, this.mPropPage
+				.getDatabaseName());
+		props.setProperty(IDBDriverDefinitionConstants.PASSWORD_PROP_ID, this.mPropPage
+				.getDBPWD());
+		props.setProperty(
+				IDBConnectionProfileConstants.SAVE_PASSWORD_PROP_ID, String
+						.valueOf(this.mPropPage.getSaveDBPWD()));
+		props.setProperty(IDBDriverDefinitionConstants.USERNAME_PROP_ID, this.mPropPage
+				.getDBUID());
+		props.setProperty(IDBDriverDefinitionConstants.URL_PROP_ID,
+				this.mPropPage.getURL());
+		return props;
+	}
+
+	private ContextProviderDelegate contextProviderDelegate =
+		new ContextProviderDelegate(GenericDBUIPlugin.getDefault().getBundle().getSymbolicName());
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+	public void createPageControls(Composite pageContainer) {
+		super.createPageControls(pageContainer);
+		getShell().setData(HelpUtil.CONTEXT_PROVIDER_KEY, this);
+		HelpUtil.setHelp(getShell(), HelpUtil.getContextId(
+				IHelpContextsGenericDBProfile.GENERIC_DB_PROFILE_WIZARD,
+				GenericDBUIPlugin.getDefault().getBundle().getSymbolicName()));
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/ui/wizard/NewJDBCFilteredCPWizard.java b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/ui/wizard/NewJDBCFilteredCPWizard.java
new file mode 100644
index 0000000..11e40a5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic.ui/src/org/eclipse/datatools/connectivity/db/generic/ui/wizard/NewJDBCFilteredCPWizard.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.db.generic.ui.wizard;
+
+import org.eclipse.datatools.connectivity.internal.ui.wizards.NewCPWizardCategoryFilter;
+import org.eclipse.datatools.connectivity.ui.wizards.NewFilteredCPWizard;
+
+/**
+ * Simple class that filters out everything but Database profile wizards.
+ * @author brianf
+ */
+public class NewJDBCFilteredCPWizard extends NewFilteredCPWizard {
+
+	public NewJDBCFilteredCPWizard() {
+		super(new NewCPWizardCategoryFilter(
+			"org.eclipse.datatools.connectivity.db.category"),
+				null);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic/.classpath b/plugins/org.eclipse.datatools.connectivity.db.generic/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic/.gitignore b/plugins/org.eclipse.datatools.connectivity.db.generic/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic/.project b/plugins/org.eclipse.datatools.connectivity.db.generic/.project
new file mode 100644
index 0000000..85d134c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.db.generic</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.connectivity.db.generic/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..73f4382
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Fri Apr 13 14:14:14 PDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.4
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.connectivity.db.generic/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..8fc662e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.db.generic; singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-Activator: org.eclipse.datatools.connectivity.db.generic.GenericDBPlugin
+Bundle-Vendor: %Bundle-Vendor
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.datatools.connectivity
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.datatools.connectivity.db.generic,
+ org.eclipse.datatools.connectivity.db.internal.generic
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic/about.html b/plugins/org.eclipse.datatools.connectivity.db.generic/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic/build.properties b/plugins/org.eclipse.datatools.connectivity.db.generic/build.properties
new file mode 100644
index 0000000..7e1ecd1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic/build.properties
@@ -0,0 +1,17 @@
+bin.includes = META-INF/,\
+               plugin.xml,\
+               .,\
+               icons/,\
+               about.html,\
+               plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
+src.dir		     = src/
+jars.extra.classpath =
+plugin.version =	1.0.0.200706071
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic/build.xml b/plugins/org.eclipse.datatools.connectivity.db.generic/build.xml
new file mode 100644
index 0000000..db7b138
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic/build.xml
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ *************************************************************************
+ * Copyright (c) 2005 Sybase, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Sybase, Inc.  - initial API and implementation
+ *  
+ ***************************************************************************
+ -->
+<project name="org.eclipse.datatools.connectivity.db.generic" default="build.jars" basedir=".">
+	<import file="../org.eclipse.datatools.build/common_build.xml" optional="true"/>
+	<property name="module.name" value="org.eclipse.datatools.connectivity.db.generic"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="eclipse.home" location="."/>
+	<property file="build.properties"/>
+	<!-- JavaDoc settings -->
+	<!-- No JavaDoc required for this plugin -->
+	<property name="add.javadoc" value="false"/>
+	<property name="javadocWindowTitle" value="DTP JDBC Connection Profile"/>
+	<property name="javadocDocTitle" value="DTP JDBC Connection Profile Example"/>
+	<property name="javadocPackages" value="org.eclipse.datatools.connectivity.db.*"/>
+	<property name="javadocFooter" value="&lt;i>Copyright &#169;  2005 Sybase, Inc. and others. All rights reserved. &lt;/i>"/>
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="true"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="true"/>
+	<property name="javacSource" value="${javac.source}"/>
+	<property name="javacTarget" value="${javac.target}"/>
+	<property name="compilerArg" value=""/>
+	<path id="path_bootclasspath">
+		<fileset dir="${java.home}/lib">
+			<include name="*.jar"/>
+		</fileset>
+		<fileset dir="${eclipse.home}/plugins">
+			<!-- Include jared plug-ins -->
+			<include name="org.eclipse.core.runtime_*.jar"/>
+			<include name="org.eclipse.osgi_*.jar"/>
+			<include name="org.eclipse.ui_*.jar"/>
+			<include name="org.eclipse.swt_*.jar"/>
+			<include name="org.eclipse.swt.*_*.jar"/>
+			<include name="org.eclipse.jface_*.jar"/>
+			<include name="org.eclipse.core.commands_*.jar"/>
+			<include name="org.eclipse.ui.workbench_*.jar"/>
+			<!-- Include expanded plug-ins -->
+			<include name="org.eclipse.core.runtime_*/org.eclipse.core.runtime_*.jar"/>
+			<include name="org.eclipse.osgi_*/org.eclipse.osgi_*.jar"/>
+			<include name="org.eclipse.ui_*/org.eclipse.ui_*.jar"/>
+			<include name="org.eclipse.swt_*/org.eclipse.swt_*.jar"/>
+			<include name="org.eclipse.swt.*_*/org.eclipse.swt.*_*.jar"/>
+			<include name="org.eclipse.jface_*/org.eclipse.jface_*.jar"/>
+			<include name="org.eclipse.core.commands_*/org.eclipse.core.commands_*.jar"/>
+			<include name="org.eclipse.ui.workbench_*/org.eclipse.ui.workbench_*.jar"/>
+		</fileset>
+		<!-- Dependencies on other DTP plug-ins, built before this one -->
+		<fileset dir="../">
+			<include name="org.eclipse.datatools.connectivity/bin/*"/>
+			<include name="org.eclipse.datatools.connectivity/connectivity.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins">
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/${module.name}">
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+	</target>
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+	</target>
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.datatools.connectivity.db.generic for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<zip destfile="${plugin.destination}/${module.name}_${plugin.version}.jar" basedir="${temp.folder}/${module.name}_${plugin.version}" filesonly="false" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+	<target name="genericdb.jar" depends="init" unless="genericdb.jar" description="Create jar: org.eclipse.datatools.connectivity.db.generic genericdb.jar.">
+		<delete dir="${temp.folder}/genericdb.jar.bin"/>
+		<mkdir dir="${temp.folder}/genericdb.jar.bin"/>
+		<!-- compile the source code -->
+		<javac destdir="${temp.folder}/genericdb.jar.bin" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bootclasspath}" source="${javacSource}" target="${javacTarget}">
+			<compilerarg line="${compilerArg}"/>
+			<classpath refid="path_bootclasspath"/>
+			<src path="src/"/>
+		</javac>
+		<!-- Copy necessary resources -->
+		<copy todir="${temp.folder}/genericdb.jar.bin" failonerror="true" overwrite="false">
+			<fileset dir="src/" excludes="**/*.java, **/package.htm*,null"/>
+		</copy>
+		<mkdir dir="${build.result.folder}"/>
+		<jar destfile="${build.result.folder}/genericdb.jar" basedir="${temp.folder}/genericdb.jar.bin"/>
+		<delete dir="${temp.folder}/genericdb.jar.bin"/>
+	</target>
+	<target name="genericdbsrc.zip" depends="init" unless="genericdbsrc.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<zip destfile="${build.result.folder}/genericdbsrc.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/" includes="**/*.java"/>
+		</zip>
+	</target>
+	<target name="build.jars" depends="init" description="Build all the jars for the plug-in: org.eclipse.datatools.connectivity.db.generic.">
+		<available property="genericdb.jar" file="${build.result.folder}/genericdb.jar"/>
+		<antcall target="genericdb.jar"/>
+	</target>
+	<target name="build.sources" depends="init">
+		<available property="genericdbsrc.zip" file="${build.result.folder}/genericdbsrc.zip"/>
+		<antcall target="genericdbsrc.zip"/>
+	</target>
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/${module.name}_${plugin.version}"/>
+		<copy todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}" includes="genericdb.jar"/>
+		</copy>
+		<copy todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="true" overwrite="false">
+			<fileset dir="${basedir}" includes="META-INF/,plugin.xml,plugin.properties,about.html,genericdb.jar,icons/"/>
+		</copy>
+		<copy todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}" includes="genericdbsrc.zip"/>
+		</copy>
+	</target>
+	<target name="build.zips" depends="init"/>
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/${module.name}_${plugin.version}"/>
+		<copy file="${build.result.folder}/genericdbsrc.zip" todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="false" overwrite="false"/>
+	</target>
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/${module.name}_${plugin.version}"/>
+		<copy file="${temp.folder}/genericdb.jar.bin.log" todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="false" overwrite="false"/>
+	</target>
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.datatools.connectivity.db.generic of all the zips, jars and logs created.">
+		<delete file="${build.result.folder}/genericdb.jar"/>
+		<delete file="${build.result.folder}/genericdbsrc.zip"/>
+		<delete file="${plugin.destination}/${module.name}_${plugin.version}.jar"/>
+		<delete file="${plugin.destination}/${module.name}_${plugin.version}.zip"/>
+		<delete dir="${temp.folder}"/>
+		<antcall target="clean.download.dir"/>
+	</target>
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="C:/V3/3.1/eclipse/workspace-dtp/${module.name}" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.datatools.connectivity.db.generic.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}" includes="**/*.bin.log"/>
+		</delete>
+		<zip destfile="${plugin.destination}/${module.name}_${plugin.version}.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+</project>
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic/icons/jdbc_16.gif b/plugins/org.eclipse.datatools.connectivity.db.generic/icons/jdbc_16.gif
new file mode 100644
index 0000000..ef7809c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic/icons/jdbc_16.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic/plugin.properties b/plugins/org.eclipse.datatools.connectivity.db.generic/plugin.properties
new file mode 100644
index 0000000..3c77d78
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic/plugin.properties
@@ -0,0 +1,16 @@
+# properties file for org.eclipse.datatools.connectivity.db.generic
+Bundle-Vendor = Eclipse Data Tools Platform
+Bundle-Name = Eclipse Data Tools Platform Generic DB Connectivity Plug-in
+driverClass = Driver Class
+driverVendor = Vendor
+driverVersion = Version
+driverDBName = Database Name
+driverConnectionURL = Connection URL
+driverUID = User ID
+driverPWD = Password
+org.eclipse.datatools.connectivity.db.driverCategory = Database
+org.eclipse.datatools.connectivity.db.generic.genericDriverCategory = Generic JDBC
+org.eclipse.datatools.connectivity.db.generic.genericDriverTemplate = Generic JDBC Driver
+databases.category = Database Connections
+generic.profile.name = SQL Model-JDBC Connection
+jdbc.connection.name = JDBC Connection
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic/plugin.xml b/plugins/org.eclipse.datatools.connectivity.db.generic/plugin.xml
new file mode 100644
index 0000000..ec7f56f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic/plugin.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+ 
+   <extension
+         point="org.eclipse.datatools.connectivity.connectionProfile">
+      <category
+            id="org.eclipse.datatools.connectivity.db.category"
+            name="%databases.category"/>
+      <connectionProfile
+            category="org.eclipse.datatools.connectivity.db.category"
+            icon="icons/jdbc_16.gif"
+            id="org.eclipse.datatools.connectivity.db.generic.connectionProfile"
+            name="%generic.profile.name"
+            pingFactory="org.eclipse.datatools.connectivity.db.generic.JDBCConnectionFactory"
+            propertiesPersistenceHook="org.eclipse.datatools.connectivity.db.generic.GenericDBPropertiesPersistenceHook"/>
+      <connectionFactory
+            class="org.eclipse.datatools.connectivity.db.generic.JDBCConnectionFactory"
+            id="java.sql.Connection"
+            name="%jdbc.connection.name"
+            profile="org.eclipse.datatools.connectivity.db.generic.connectionProfile"/>
+   </extension>
+   
+  <extension
+         point="org.eclipse.datatools.connectivity.driverExtension">     
+
+      <category
+            id="org.eclipse.datatools.connectivity.db.driverCategory"
+            name="%org.eclipse.datatools.connectivity.db.driverCategory"/>
+   
+      <category
+            parentCategory="org.eclipse.datatools.connectivity.db.driverCategory"
+            name="%org.eclipse.datatools.connectivity.db.generic.genericDriverCategory"
+            id="org.eclipse.datatools.connectivity.db.genericDriverCategory"/>
+
+      <driverTemplate
+            createDefault="false"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.connectivity.db.generic.genericDriverTemplate"
+            jarList=""
+            name="%org.eclipse.datatools.connectivity.db.generic.genericDriverTemplate"
+            parentCategory="org.eclipse.datatools.connectivity.db.genericDriverCategory">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%driverClass"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%driverVendor"
+                  value="Generic JDBC"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%driverVersion"
+                  value="1.0"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%driverDBName"
+                  value="SAMPLE"
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%driverConnectionURL"
+                  value="jdbc:"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%driverUID"
+                  value=""
+                  required="false"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+   </extension> 
+     
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.mappings">
+      <providerIDtoDriverCategoryID
+            driverCategoryID="org.eclipse.datatools.connectivity.db.genericDriverCategory"
+            providerID="org.eclipse.datatools.connectivity.db.generic.connectionProfile">
+      </providerIDtoDriverCategoryID>
+   </extension>
+ 
+</plugin>
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic/src/org/eclipse/datatools/connectivity/db/generic/GenericDBPlugin.java b/plugins/org.eclipse.datatools.connectivity.db.generic/src/org/eclipse/datatools/connectivity/db/generic/GenericDBPlugin.java
new file mode 100644
index 0000000..787f34f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic/src/org/eclipse/datatools/connectivity/db/generic/GenericDBPlugin.java
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.db.generic;
+
+import java.text.MessageFormat;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The main plugin class to be used in the desktop.
+ * NON-API
+ */
+public class GenericDBPlugin extends Plugin {
+
+	// The shared instance.
+	private static GenericDBPlugin plugin;
+	// Resource bundle.
+	private ResourceBundle resourceBundle;
+
+	/**
+	 * The constructor.
+	 */
+	public GenericDBPlugin() {
+		plugin = this;
+	}
+
+	/**
+	 * This method is called upon plug-in activation
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+	}
+
+	/**
+	 * This method is called when the plug-in is stopped
+	 */
+	public void stop(BundleContext context) throws Exception {
+		super.stop(context);
+		plugin = null;
+	}
+
+	/**
+	 * Returns the shared instance.
+	 */
+	public static GenericDBPlugin getDefault() {
+		return plugin;
+	}
+
+	/**
+	 * Returns the plugin's resource bundle,
+	 */
+	public ResourceBundle getResourceBundle() {
+		try {
+			if (resourceBundle == null)
+				resourceBundle = ResourceBundle
+						.getBundle("org.eclipse.datatools.connectivity.db.generic.resources"); //$NON-NLS-1$
+		}
+		catch (MissingResourceException x) {
+			resourceBundle = null;
+		}
+		return resourceBundle;
+	}
+
+	public String getResourceString(String key) {
+		try {
+			ResourceBundle resBundle = getResourceBundle();
+			if (resBundle == null) {
+				return key;
+			}
+
+			return resBundle.getString(key);
+		}
+		catch (MissingResourceException e) {
+			return key;
+		}
+	}
+
+	public String getResourceString(String key, Object[] arguments) {
+		MessageFormat f = new MessageFormat(getResourceString(key));
+
+		return f.format(arguments);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic/src/org/eclipse/datatools/connectivity/db/generic/GenericDBPropertiesPersistenceHook.java b/plugins/org.eclipse.datatools.connectivity.db.generic/src/org/eclipse/datatools/connectivity/db/generic/GenericDBPropertiesPersistenceHook.java
new file mode 100644
index 0000000..ef69b6a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic/src/org/eclipse/datatools/connectivity/db/generic/GenericDBPropertiesPersistenceHook.java
@@ -0,0 +1,18 @@
+package org.eclipse.datatools.connectivity.db.generic;
+
+import org.eclipse.datatools.connectivity.drivers.jdbc.JDBCPasswordPropertyPersistenceHook;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ *      IBM Corporation - migrated to new wizard framework
+ ******************************************************************************/
+
+public class GenericDBPropertiesPersistenceHook extends JDBCPasswordPropertyPersistenceHook {
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic/src/org/eclipse/datatools/connectivity/db/generic/IDBConnectionProfileConstants.java b/plugins/org.eclipse.datatools.connectivity.db.generic/src/org/eclipse/datatools/connectivity/db/generic/IDBConnectionProfileConstants.java
new file mode 100644
index 0000000..7fb5acc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic/src/org/eclipse/datatools/connectivity/db/generic/IDBConnectionProfileConstants.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ *      IBM Corporation - migrated to new wizard framework
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.db.generic;
+
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCConnectionProfileConstants;
+
+/**
+ * Constant definitions for property keys used to identify DB connection profile
+ * properties.
+ */
+public interface IDBConnectionProfileConstants extends IJDBCConnectionProfileConstants {
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic/src/org/eclipse/datatools/connectivity/db/generic/IDBDriverDefinitionConstants.java b/plugins/org.eclipse.datatools.connectivity.db.generic/src/org/eclipse/datatools/connectivity/db/generic/IDBDriverDefinitionConstants.java
new file mode 100644
index 0000000..f33ee72
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic/src/org/eclipse/datatools/connectivity/db/generic/IDBDriverDefinitionConstants.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.db.generic;
+
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
+
+/**
+ * Constant definitions for property keys used to identify DB driver definition
+ * properties.
+ */
+public interface IDBDriverDefinitionConstants extends IJDBCDriverDefinitionConstants{
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic/src/org/eclipse/datatools/connectivity/db/generic/JDBCConnection.java b/plugins/org.eclipse.datatools.connectivity.db.generic/src/org/eclipse/datatools/connectivity/db/generic/JDBCConnection.java
new file mode 100644
index 0000000..da9c697
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic/src/org/eclipse/datatools/connectivity/db/generic/JDBCConnection.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ *      IBM Corporation - migrated to new wizard framework
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.db.generic;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+
+/**
+ * NON-API
+ * 
+ * IConnection implementation for <code>java.sql.Connection</code> objects.
+ * This object is responsible for openening and closing JDBC connections.
+ * 
+ * The property keys specified in
+ * <code>org.eclipse.datatools.connectivity.db.generic.IDBConnectionProfileConstants</code>
+ * are used to create the connection.
+ * 
+ * Version information is provided by using <code>java.sql.DatabaseMetaData</code>.
+ */
+public class JDBCConnection extends org.eclipse.datatools.connectivity.drivers.jdbc.JDBCConnection {
+	public JDBCConnection(IConnectionProfile profile, Class factoryClass) {
+		super(profile, factoryClass);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic/src/org/eclipse/datatools/connectivity/db/generic/JDBCConnectionFactory.java b/plugins/org.eclipse.datatools.connectivity.db.generic/src/org/eclipse/datatools/connectivity/db/generic/JDBCConnectionFactory.java
new file mode 100644
index 0000000..80c8051
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic/src/org/eclipse/datatools/connectivity/db/generic/JDBCConnectionFactory.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ *      IBM Corporation - migrated to new wizard framework
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.db.generic;
+
+
+/**
+ * <code>org.eclipse.datatools.connectivity.IConnectionFactory</code> for
+ * creating <code>java.sql.Connection</code> connections.
+ * 
+ * To use this class in a custom DB connection profile, you must make sure your
+ * profile contains the following properties from
+ * <code>org.eclipse.datatools.connectivity.db.generic.IDBConnectionProfileConstants</code>:
+ * DRIVER_CLASS_PROP_ID, URL_PROP_ID, as well as
+ * <code>org.eclipse.datatools.connectivity.ConnectionProfileConstants.PROP_DRIVER_DEFINITION_ID</code>.
+ * 
+ * The following properties from
+ * <code>org.eclipse.datatools.connectivity.db.generic.IDBConnectionProfileConstants</code>
+ * are optional: USERNAME_PROP_ID, PASSWORD_PROP_ID,
+ * CONNECTION_PROPERTIES_PROP_ID
+ * 
+ * @author rcernich
+ * 
+ * Created on Oct 17, 2005
+ */
+public class JDBCConnectionFactory extends org.eclipse.datatools.connectivity.drivers.jdbc.JDBCConnectionFactory {
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic/src/org/eclipse/datatools/connectivity/db/generic/resources.properties b/plugins/org.eclipse.datatools.connectivity.db.generic/src/org/eclipse/datatools/connectivity/db/generic/resources.properties
new file mode 100644
index 0000000..b5b86e4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic/src/org/eclipse/datatools/connectivity/db/generic/resources.properties
@@ -0,0 +1,32 @@
+# package: com.sybase.suade.servers.sample.jdbc
+NewConnectionProfileWizard.title = New JDBC Connection Profile
+NewConnectionProfileWizard.error.title = Error Creating New JDBC Connection Profile
+NewConnectionProfileWizard.error.msg = An exception occurred while creating a new JDBC connection profile.
+
+GenericDBProfileDetailsWizardPage.title = Specify a Driver and Connection Details
+GenericDBProfileDetailsWizardPage.msg = Select a driver from the drop-down and provide login details for the connection.
+GenericDBProfileDetailsWizardPage.driverCombo.label = Drivers:
+GenericDBProfileDetailsWizardPage.databaseName.label = Database:
+GenericDBProfileDetailsWizardPage.url.label = URL:
+GenericDBProfileDetailsWizardPage.PingButton=Test connection
+GenericDBProfileDetailsWizardPage.userName.label = User name:
+GenericDBProfileDetailsWizardPage.password.label = Password:
+GenericDBProfileDetailsWizardPage.persistpassword.label = Save password
+GenericDBProfileDetailsWizardPage.optionalProps.label = Optional properties:
+GenericDBProfileDetailsWizardPage.summary.driverName.label = Driver name
+GenericDBProfileDetailsWizardPage.summary.connProps.label = Connection properties
+GenericDBProfileDetailsWizardPage.summary.userName.label = User name
+GenericDBProfileDetailsWizardPage.summary.password.label = Password
+GenericDBProfileDetailsWizardPage.summary.url.label = URL
+
+JDBCConnectionUtils.Milliseconds=\ milli(s)
+JDBCConnectionUtils.StatusTitle=JDBCConnectionUtils
+JDBCConnectionUtils.TimeoutInXMilliSecondsMsg=Login timeout in 
+JDBCConnectionUtils.AttemptToConnectMessage=Attempting to connect...
+JDBCConnectionUtils.DBConnectAttemptJob=Database Connection Attempt
+JDBCConnectionUtils.ClassNotFoundStatus=Could not load class: 
+JDBCConnectionUtils.ConnectionTimeoutMessage=Connection timed out.
+
+JDBCConnection.technologyName = JDBC
+JDBCConnection.error.DriverNotExist = Driver does not exist.
+JDBCConnection.error.EmptyJarList = Empty jar list in driver definition.
diff --git a/plugins/org.eclipse.datatools.connectivity.db.generic/src/org/eclipse/datatools/connectivity/db/internal/generic/IGenericJDBCConnectionProfileConstants.java b/plugins/org.eclipse.datatools.connectivity.db.generic/src/org/eclipse/datatools/connectivity/db/internal/generic/IGenericJDBCConnectionProfileConstants.java
new file mode 100644
index 0000000..840f05d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.db.generic/src/org/eclipse/datatools/connectivity/db/internal/generic/IGenericJDBCConnectionProfileConstants.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.db.internal.generic;
+
+
+public interface IGenericJDBCConnectionProfileConstants {
+
+	public static final String GENERIC_JDBC_CATEGORY_ID = "org.eclipse.datatools.connectivity.db.genericDriverCategory"; //$NON-NLS-1$
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC/.gitignore b/plugins/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC/.gitignore
new file mode 100644
index 0000000..60463af
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC/.gitignore
@@ -0,0 +1,2 @@
+bin
+build.xml
diff --git a/plugins/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC/.project b/plugins/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC/.project
new file mode 100644
index 0000000..497d355
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC/.project
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.dbdefinition.genericJDBC</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..a30c7c6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.dbdefinition.genericJDBC; singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
+
diff --git a/plugins/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC/about.html b/plugins/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC/about.html
new file mode 100644
index 0000000..129db9d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC/build.properties b/plugins/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC/build.properties
new file mode 100644
index 0000000..b5b1c2c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC/build.properties
@@ -0,0 +1,23 @@
+###############################################################################
+# Copyright (c) 2001, 2004 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+bin.includes = runtime/,\
+               plugin.xml,\
+               plugin.properties,\
+               about.html,\
+               META-INF/
+jars.extra.classpath =
+src.dir	= src/
+plugin.version =	1.0.0.200706071
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC/build.xml b/plugins/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC/build.xml
new file mode 100644
index 0000000..e001e94
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC/build.xml
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ *************************************************************************
+ * Copyright (c) 2006 Sybase, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Sybase, Inc.  - initial API and implementation
+ *  
+ ***************************************************************************
+ -->
+<project name="org.eclipse.datatools.connectivity.dbdefinition.genericJDBC" default="build.jars" basedir=".">
+	<import file="../org.eclipse.datatools.build/common_build.xml" optional="true"/>
+	<property name="module.name" value="org.eclipse.datatools.connectivity.dbdefinition.genericJDBC"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="eclipse.home" location="."/>
+	<property file="build.properties"/>
+	<!-- JavaDoc settings -->
+	<!-- No JavaDoc necessary for this plugin currently -->
+	<property name="add.javadoc" value="false"/>
+	<property name="javadocWindowTitle" value="DTP Generic JDBC Definition"/>
+	<property name="javadocDocTitle" value="DTP Generic JDBC Definition"/>
+	<property name="javadocPackages" value="org.eclipse.datatools.connectivity.dbdefinition.genericJDBC.*"/>
+	<property name="javadocFooter" value="&lt;i>Copyright &#169;  2006 IBM Corporation and others. All rights reserved. &lt;/i>"/>
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="true"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="true"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<property name="compilerArg" value=""/>
+	<path id="path_bootclasspath">
+		<fileset dir="${java.home}/lib">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins">
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/${module.name}">
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+	</target>
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+	</target>
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.datatools.connectivity.dbdefinition.genericJDBC for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<zip destfile="${plugin.destination}/${module.name}_${plugin.version}.jar" basedir="${temp.folder}/${module.name}_${plugin.version}" filesonly="false" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+	<target name="build.jars" depends="init" description="Build all the jars for the plug-in: org.eclipse.datatools.connectivity.dbdefinition.genericJDBC."/>
+	<target name="build.sources" depends="init"/>
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/${module.name}_${plugin.version}"/>
+		<copy todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="true" overwrite="false">
+			<fileset dir="${basedir}" includes="plugin.xml,META-INF/,runtime/,plugin.properties,about.html"/>
+		</copy>
+	</target>
+	<target name="build.zips" depends="init"/>
+	<target name="gather.sources" depends="init" if="destination.temp.folder"/>
+	<target name="gather.logs" depends="init" if="destination.temp.folder"/>
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.datatools.connectivity.dbdefinition.genericJDBC of all the zips, jars and logs created.">
+		<delete file="${plugin.destination}/${module.name}_${plugin.version}.jar"/>
+		<delete file="${plugin.destination}/${module.name}_${plugin.version}.zip"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="C:/V3/3.1/eclipse/workspace-dtp/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.datatools.connectivity.dbdefinition.genericJDBC.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}" includes="**/*.bin.log"/>
+		</delete>
+		<zip destfile="${plugin.destination}/${module.name}_${plugin.version}.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+</project>
diff --git a/plugins/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC/plugin.properties b/plugins/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC/plugin.properties
new file mode 100644
index 0000000..bf34b1a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC/plugin.properties
@@ -0,0 +1,14 @@
+###############################################################################
+# Copyright (c) 2001, 2004 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName=Eclipse Data Tools Platform DBDefinition Generic JDBC Plug-in
+providerName=Eclipse Data Tools Platform
+1.0_ProductString = Generic JDBC
+1.0_VersionString = 1.0
diff --git a/plugins/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC/plugin.xml b/plugins/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC/plugin.xml
new file mode 100644
index 0000000..ffc9d14
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC/plugin.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+   
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.databaseDefinition">
+      <definition
+            version="1.0"
+            product="Generic JDBC"
+            productDisplayString="%1.0_ProductString"
+            versionDisplayString="%1.0_VersionString"
+            file="runtime/vendors/Generic JDBC_1.0/Generic JDBC_1.0.xmi">
+      </definition>
+   </extension>
+   
+</plugin>
diff --git a/plugins/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC/runtime/vendors/Generic JDBC_1.0/Generic JDBC_1.0.xmi b/plugins/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC/runtime/vendors/Generic JDBC_1.0/Generic JDBC_1.0.xmi
new file mode 100644
index 0000000..a7d0231
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC/runtime/vendors/Generic JDBC_1.0/Generic JDBC_1.0.xmi
@@ -0,0 +1,396 @@
+<?xml version="1.0" encoding="ASCII"?>

+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="Generic JDBC" version="1.0" maximumIdentifierLength="64" joinSupported="true" tablespacesSupported="false" maximumCommentLength="60" schemaSupported="true" aliasSupported="true" SQLStatementSupported="true" userDefinedTypeSupported="true">

+  <predefinedDataTypeDefinitions xmi:id="BIGINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="long">

+    <defaultValueTypes>NULL</defaultValueTypes>

+    <name>BIGINT</name>

+  </predefinedDataTypeDefinitions>

+  <predefinedDataTypeDefinitions xmi:id="INTEGER_2" multipleColumnsSupported="true" primitiveType="INTEGER" jdbcEnumType="-7" javaClassName="boolean">

+    <defaultValueTypes>NULL</defaultValueTypes>

+    <name>BIT</name>

+  </predefinedDataTypeDefinitions>

+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="BYTE" defaultLength="1024" maximumLength="2147483647" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">

+    <defaultValueTypes>NULL</defaultValueTypes>

+    <name>BLOB</name>

+  </predefinedDataTypeDefinitions>

+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="254" primitiveType="CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">

+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>

+    <defaultValueTypes>NULL</defaultValueTypes>

+    <name>CHAR</name>

+    <name>CHARACTER</name>

+  </predefinedDataTypeDefinitions>

+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="BYTE" defaultLength="1024" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">

+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>

+    <defaultValueTypes>NULL</defaultValueTypes>

+    <name>CLOB</name>

+    <name>CHARACTER LARGE OBJECT</name>

+    <name>CHAR LARGE OBJECT</name>

+  </predefinedDataTypeDefinitions>

+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" keyConstraintSupported="true" defaultLength="32" maximumLength="32672" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">

+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>

+    <defaultValueTypes>NULL</defaultValueTypes>

+    <name>VARCHAR</name>

+    <name>CHARACTER VARYING</name>

+    <name>CHAR VARYING</name>

+  </predefinedDataTypeDefinitions>

+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="DOUBLE_BYTE" defaultLength="1024" maximumLength="1073741823" primitiveType="NATIONAL_CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">

+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>

+    <defaultValueTypes>NULL</defaultValueTypes>

+    <name>DBCLOB</name>

+  </predefinedDataTypeDefinitions>

+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_1" lengthSupported="true" defaultLength="1" maximumLength="127" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">

+    <defaultValueTypes>NULL</defaultValueTypes>

+    <name>GRAPHIC</name>

+  </predefinedDataTypeDefinitions>

+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_1" lengthSupported="true"  defaultLength="32" maximumLength="16336" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">

+    <defaultValueTypes>NULL</defaultValueTypes>

+    <name>VARGRAPHIC</name>

+  </predefinedDataTypeDefinitions>

+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_2" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">

+    <defaultValueTypes>NULL</defaultValueTypes>

+    <name>LONG VARGRAPHIC</name>

+  </predefinedDataTypeDefinitions>

+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">

+    <defaultValueTypes>CURRENT_DATE</defaultValueTypes>

+    <defaultValueTypes>NULL</defaultValueTypes>

+    <name>DATE</name>

+  </predefinedDataTypeDefinitions>

+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" precisionSupported="true" defaultPrecision="5" maximumPrecision="31" scaleSupported="true" defaultScale="0" keyConstraintSupported="true" identitySupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">

+    <defaultValueTypes>NULL</defaultValueTypes>

+    <name>DECIMAL</name>

+    <name>DEC</name>

+  </predefinedDataTypeDefinitions>

+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">

+    <defaultValueTypes>NULL</defaultValueTypes>

+    <name>DOUBLE</name>

+  </predefinedDataTypeDefinitions>

+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" keyConstraintSupported="true" primitiveType="FLOAT" precisionSupported="true" defaultPrecision="53" maximumPrecision="53" cutoffPrecision="25" jdbcEnumType="6" javaClassName="double">

+    <defaultValueTypes>NULL</defaultValueTypes>

+    <name>FLOAT</name>

+  </predefinedDataTypeDefinitions>

+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">

+    <defaultValueTypes>NULL</defaultValueTypes>

+    <name>INTEGER</name>

+    <name>INT</name>

+  </predefinedDataTypeDefinitions>

+  <predefinedDataTypeDefinitions xmi:id="DATALINK_1" lengthSupported="true" lengthUnit="BYTE" defaultLength="200" maximumLength="200" primitiveType="DATALINK" jdbcEnumType="70" javaClassName="java.net.URL">

+    <defaultValueTypes>NULL</defaultValueTypes>

+    <name>DATALINK</name>

+  </predefinedDataTypeDefinitions>

+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" precisionSupported="true" defaultPrecision="5" maximumPrecision="31" scaleSupported="true" defaultScale="0" keyConstraintSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">

+    <defaultValueTypes>NULL</defaultValueTypes>

+    <name>NUMERIC</name>

+    <name>NUM</name>

+  </predefinedDataTypeDefinitions>

+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">

+    <defaultValueTypes>NULL</defaultValueTypes>

+    <name>REAL</name>

+  </predefinedDataTypeDefinitions>

+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">

+    <defaultValueTypes>NULL</defaultValueTypes>

+    <name>SMALLINT</name>

+  </predefinedDataTypeDefinitions>

+  <predefinedDataTypeDefinitions xmi:id="TIME_1" keyConstraintSupported="true" primitiveType="TIME" jdbcEnumType="92" javaClassName="java.sql.Time">

+    <defaultValueTypes>CURRENT_TIME</defaultValueTypes>

+    <defaultValueTypes>NULL</defaultValueTypes>

+    <name>TIME</name>

+  </predefinedDataTypeDefinitions>

+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp">

+    <defaultValueTypes>CURRENT_TIME_STAMP</defaultValueTypes>

+    <defaultValueTypes>NULL</defaultValueTypes>

+    <name>TIMESTAMP</name>

+  </predefinedDataTypeDefinitions>

+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_2" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">

+    <defaultValueTypes>NULL</defaultValueTypes>

+    <name>TINYINT</name>

+  </predefinedDataTypeDefinitions>

+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" lengthSupported="true"  defaultLength="1" keyConstraintSupported="true" maximumLength="254" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">

+    <defaultValueTypes>NULL</defaultValueTypes>

+    <name>BINARY</name>

+    <name>CHAR () FOR BIT DATA</name>

+    <name>CHARACTER () FOR BIT DATA</name>

+  </predefinedDataTypeDefinitions>

+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_1" lengthSupported="true"  defaultLength="1" keyConstraintSupported="true" maximumLength="32672" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]">

+    <defaultValueTypes>NULL</defaultValueTypes>

+    <name>VARBINARY</name>

+    <name>VARCHAR () FOR BIT DATA</name>

+    <name>CHARACTER VARYING () FOR BIT DATA</name>

+    <name>CHAR VARYING () FOR BIT DATA</name>

+  </predefinedDataTypeDefinitions>

+  <predefinedDataTypeDefinitions xmi:id="BOOLEAN_1" lengthSupported="false"  primitiveType="BOOLEAN" jdbcEnumType="16" javaClassName="boolean">

+    <defaultValueTypes>NULL</defaultValueTypes>

+    <name>BOOLEAN</name>

+  </predefinedDataTypeDefinitions>

+  <storedProcedureDefinition/>

+  <triggerDefinition/>

+  <columnDefinition identitySupported="true" identityIncrementSupported="true"/>

+  <constraintDefinition clusteredPrimaryKeySupported="true" clusteredUniqueConstraintSupported="true" primaryKeyNullable="true" uniqueKeyNullable="true">

+    <parentUpdateDRIRuleType>RESTRICT</parentUpdateDRIRuleType>

+    <parentUpdateDRIRuleType>CASCADE</parentUpdateDRIRuleType>

+    <parentUpdateDRIRuleType>SET_NULL</parentUpdateDRIRuleType>

+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>

+    <parentDeleteDRIRuleType>RESTRICT</parentDeleteDRIRuleType>

+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>

+    <parentDeleteDRIRuleType>SET_NULL</parentDeleteDRIRuleType>

+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>

+  </constraintDefinition>

+  <indexDefinition/>

+  <tableDefinition/>

+  <udtDefinition/>

+  <queryDefinition identifierQuoteString="&quot;" hostVariableMarker="@" hostVariableMarkerSupported="true"/>

+  <SQLSyntaxDefinition>

+    <keywords>ADD</keywords>

+    <keywords>ALL</keywords>

+    <keywords>ALTER</keywords>

+    <keywords>ANALYZE</keywords>

+    <keywords>AND</keywords>

+    <keywords>AS</keywords>

+    <keywords>ASC</keywords>

+    <keywords>ASENSITIVE</keywords>

+    <keywords>BEFORE</keywords>

+    <keywords>BETWEEN</keywords>

+    <keywords>BIGINT</keywords>

+    <keywords>BINARY</keywords>

+    <keywords>BLOB</keywords>

+    <keywords>BOTH</keywords>

+    <keywords>BY</keywords>

+    <keywords>CALL</keywords>

+    <keywords>CASCADE</keywords>

+    <keywords>CASE</keywords>

+    <keywords>CHANGE</keywords>

+    <keywords>CHAR</keywords>

+    <keywords>CHARACTER</keywords>

+    <keywords>CHECK</keywords>

+    <keywords>COLLATE</keywords>

+    <keywords>COLUMN</keywords>

+    <keywords>CONDITION</keywords>

+    <keywords>CONNECTION</keywords>

+    <keywords>CONSTRAINT</keywords>

+    <keywords>CONTINUE</keywords>

+    <keywords>CONVERT</keywords>

+    <keywords>CREATE</keywords>

+    <keywords>CROSS</keywords>

+    <keywords>CURRENT_DATE</keywords>

+    <keywords>CURRENT_TIME</keywords>

+    <keywords>CURRENT_TIMESTAMP</keywords>

+    <keywords>CURRENT_USER</keywords>

+    <keywords>CURSOR</keywords>

+    <keywords>DATABASE</keywords>

+    <keywords>DATABASES</keywords>

+    <keywords>DAY_HOUR</keywords>

+    <keywords>DAY_MICROSECOND</keywords>

+    <keywords>DAY_MINUTE</keywords>

+    <keywords>DAY_SECOND</keywords>

+    <keywords>DEC</keywords>

+    <keywords>DECIMAL</keywords>

+    <keywords>DECLARE</keywords>

+    <keywords>DEFAULT</keywords>

+    <keywords>DELAYED</keywords>

+    <keywords>DELETE</keywords>

+    <keywords>DESC</keywords>

+    <keywords>DESCRIBE</keywords>

+    <keywords>DETERMINISTIC</keywords>

+    <keywords>DISTINCT</keywords>

+    <keywords>DISTINCTROW</keywords>

+    <keywords>DIV</keywords>

+    <keywords>DOUBLE</keywords>

+    <keywords>DROP</keywords>

+    <keywords>DUAL</keywords>

+    <keywords>EACH</keywords>

+    <keywords>ELSE</keywords>

+    <keywords>ELSEIF</keywords>

+    <keywords>ENCLOSED</keywords>

+    <keywords>ESCAPED</keywords>

+    <keywords>EXISTS</keywords>

+    <keywords>EXIT</keywords>

+    <keywords>EXPLAIN</keywords>

+    <keywords>FALSE</keywords>

+    <keywords>FETCH</keywords>

+    <keywords>FLOAT</keywords>

+    <keywords>FOR</keywords>

+    <keywords>FORCE</keywords>

+    <keywords>FOREIGN</keywords>

+    <keywords>FROM</keywords>

+    <keywords>FULLTEXT</keywords>

+    <keywords>GOTO</keywords>

+    <keywords>GRANT</keywords>

+    <keywords>GROUP</keywords>

+    <keywords>HAVING</keywords>

+    <keywords>HIGH_PRIORITY</keywords>

+    <keywords>HOUR_MICROSECOND</keywords>

+    <keywords>HOUR_MINUTE</keywords>

+    <keywords>HOUR_SECOND</keywords>

+    <keywords>IF</keywords>

+    <keywords>IGNORE</keywords>

+    <keywords>IN</keywords>

+    <keywords>INDEX</keywords>

+    <keywords>INFILE</keywords>

+    <keywords>INNER</keywords>

+    <keywords>INOUT</keywords>

+    <keywords>INSENSITIVE</keywords>

+    <keywords>INSERT</keywords>

+    <keywords>INT</keywords>

+    <keywords>INTEGER</keywords>

+    <keywords>INTERVAL</keywords>

+    <keywords>INTO</keywords>

+    <keywords>IS</keywords>

+    <keywords>ITERATE</keywords>

+    <keywords>JOIN</keywords>

+    <keywords>KEY</keywords>

+    <keywords>KEYS</keywords>

+    <keywords>KILL</keywords>

+    <keywords>LEADING</keywords>

+    <keywords>LEAVE</keywords>

+    <keywords>LEFT</keywords>

+    <keywords>LIKE</keywords>

+    <keywords>LIMIT</keywords>

+    <keywords>LINES</keywords>

+    <keywords>LOAD</keywords>

+    <keywords>LOCALTIME</keywords>

+    <keywords>LOCALTIMESTAMP</keywords>

+    <keywords>LOCK</keywords>

+    <keywords>LONG</keywords>

+    <keywords>LONGBLOB</keywords>

+    <keywords>LONGTEXT</keywords>

+    <keywords>LOOP</keywords>

+    <keywords>LOW_PRIORITY</keywords>

+    <keywords>MATCH</keywords>

+    <keywords>MEDIUMBLOB</keywords>

+    <keywords>MEDIUMINT</keywords>

+    <keywords>MEDIUMTEXT</keywords>

+    <keywords>MIDDLEINT</keywords>

+    <keywords>MINUTE_MICROSECOND</keywords>

+    <keywords>MINUTE_SECOND</keywords>

+    <keywords>MOD</keywords>

+    <keywords>MODIFIES</keywords>

+    <keywords>NATURAL</keywords>

+    <keywords>NOT</keywords>

+    <keywords>NO_WRITE_TO_BINLOG</keywords>

+    <keywords>NULL</keywords>

+    <keywords>NUMERIC</keywords>

+    <keywords>ON</keywords>

+    <keywords>OPTIMIZE</keywords>

+    <keywords>OPTION</keywords>

+    <keywords>OPTIONALLY</keywords>

+    <keywords>OR</keywords>

+    <keywords>ORDER</keywords>

+    <keywords>OUT</keywords>

+    <keywords>OUTER</keywords>

+    <keywords>OUTFILE</keywords>

+    <keywords>PRECISION</keywords>

+    <keywords>PRIMARY</keywords>

+    <keywords>PROCEDURE</keywords>

+    <keywords>PURGE</keywords>

+    <keywords>READ</keywords>

+    <keywords>READS</keywords>

+    <keywords>REAL</keywords>

+    <keywords>REFERENCES</keywords>

+    <keywords>REGEXP</keywords>

+    <keywords>RELEASE</keywords>

+    <keywords>RENAME</keywords>

+    <keywords>REPEAT</keywords>

+    <keywords>REPLACE</keywords>

+    <keywords>REQUIRE</keywords>

+    <keywords>RESTRICT</keywords>

+    <keywords>RETURN</keywords>

+    <keywords>REVOKE</keywords>

+    <keywords>RIGHT</keywords>

+    <keywords>RLIKE</keywords>

+    <keywords>SCHEMA</keywords>

+    <keywords>SCHEMAS</keywords>

+    <keywords>SECOND_MICROSECOND</keywords>

+    <keywords>SELECT</keywords>

+    <keywords>SENSITIVE</keywords>

+    <keywords>SEPARATOR</keywords>

+    <keywords>SET</keywords>

+    <keywords>SHOW</keywords>

+    <keywords>SMALLINT</keywords>

+    <keywords>SONAME</keywords>

+    <keywords>SPATIAL</keywords>

+    <keywords>SPECIFIC</keywords>

+    <keywords>SQL</keywords>

+    <keywords>SQLEXCEPTION</keywords>

+    <keywords>SQLSTATE</keywords>

+    <keywords>SQLWARNING</keywords>

+    <keywords>SQL_BIG_RESULT</keywords>

+    <keywords>SQL_CALC_FOUND_ROWS</keywords>

+    <keywords>SQL_SMALL_RESULT</keywords>

+    <keywords>SSL</keywords>

+    <keywords>STARTING</keywords>

+    <keywords>STRAIGHT_JOIN</keywords>

+    <keywords>TABLE</keywords>

+    <keywords>TERMINATED</keywords>

+    <keywords>THEN</keywords>

+    <keywords>TINYBLOB</keywords>

+    <keywords>TINYINT</keywords>

+    <keywords>TINYTEXT</keywords>

+    <keywords>TO</keywords>

+    <keywords>TRAILING</keywords>

+    <keywords>TRIGGER</keywords>

+    <keywords>TRUE</keywords>

+    <keywords>UNDO</keywords>

+    <keywords>UNION</keywords>

+    <keywords>UNIQUE</keywords>

+    <keywords>UNLOCK</keywords>

+    <keywords>UNSIGNED</keywords>

+    <keywords>UPDATE</keywords>

+    <keywords>USAGE</keywords>

+    <keywords>USE</keywords>

+    <keywords>USING</keywords>

+    <keywords>UTC_DATE</keywords>

+    <keywords>UTC_TIME</keywords>

+    <keywords>UTC_TIMESTAMP</keywords>

+    <keywords>VALUES</keywords>

+    <keywords>VARBINARY</keywords>

+    <keywords>VARCHAR</keywords>

+    <keywords>VARCHARACTER</keywords>

+    <keywords>VARYING</keywords>

+    <keywords>WHEN</keywords>

+    <keywords>WHERE</keywords>

+    <keywords>WHILE</keywords>

+    <keywords>WITH</keywords>

+    <keywords>WRITE</keywords>

+    <keywords>XOR</keywords>

+    <keywords>YEAR_MONTH</keywords>

+    <keywords>ZEROFILL</keywords>

+    <operators>:=</operators>

+    <operators>||</operators>

+    <operators>OR</operators>

+    <operators>XOR</operators>

+    <operators>&amp;&amp;</operators>

+    <operators>AND</operators>

+    <operators>NOT</operators>

+    <operators>BETWEEN</operators>

+    <operators>CASE</operators>

+    <operators>WHEN</operators>

+    <operators>THEN</operators>

+    <operators>ELSE</operators>

+    <operators>=</operators>

+    <operators>&lt;=></operators>

+    <operators>>=</operators>

+    <operators>></operators>

+    <operators>&lt;=</operators>

+    <operators>&lt;</operators>

+    <operators>&lt;></operators>

+    <operators>!=</operators>

+    <operators>IS</operators>

+    <operators>LIKE</operators>

+    <operators>REGEXP</operators>

+    <operators>IN</operators>

+    <operators>|</operators>

+    <operators>&amp;</operators>

+    <operators>&lt;&lt;</operators>

+    <operators>>></operators>

+    <operators>-</operators>

+    <operators>+</operators>

+    <operators>*</operators>

+    <operators>/</operators>

+    <operators>DIV</operators>

+    <operators>%</operators>

+    <operators>MOD</operators>

+    <operators>^</operators>

+    <operators>~</operators>

+    <operators>!</operators>

+    <operators>BINARY</operators>

+    <operators>COLLATE</operators>

+  </SQLSyntaxDefinition>

+</DBDefinition:DatabaseVendorDefinition>

diff --git a/plugins/org.eclipse.datatools.connectivity.jdt/.classpath b/plugins/org.eclipse.datatools.connectivity.jdt/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.jdt/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.connectivity.jdt/.gitignore b/plugins/org.eclipse.datatools.connectivity.jdt/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.jdt/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/plugins/org.eclipse.datatools.connectivity.jdt/.project b/plugins/org.eclipse.datatools.connectivity.jdt/.project
new file mode 100644
index 0000000..03f7a15
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.jdt/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.jdt</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.connectivity.jdt/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.connectivity.jdt/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..73f4382
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.jdt/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Fri Apr 13 14:14:14 PDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.4
diff --git a/plugins/org.eclipse.datatools.connectivity.jdt/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.connectivity.jdt/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..0030988
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.jdt/META-INF/MANIFEST.MF
@@ -0,0 +1,17 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Plugin.Name
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.jdt;singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Activator: org.eclipse.datatools.connectivity.jdt.internal.ConnJDTPlugin
+Bundle-Vendor: %Plugin.ProviderName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.jdt.core,
+ org.eclipse.jdt.ui,
+ org.eclipse.datatools.connectivity,
+ org.eclipse.datatools.connectivity.ui
+Eclipse-LazyStart: true
+Export-Package: org.eclipse.datatools.connectivity.jdt.internal
diff --git a/plugins/org.eclipse.datatools.connectivity.jdt/about.html b/plugins/org.eclipse.datatools.connectivity.jdt/about.html
new file mode 100644
index 0000000..1b7d275
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.jdt/about.html
@@ -0,0 +1,28 @@
+<html>
+<head>
+<title>About This Content</title>
+</head>
+<body>
+<div>
+<h3>About This Content</h3>
+<p>May 2, 2006</p>
+<h3>License</h3>
+<p>The Eclipse Foundation makes available all content in this plug-in
+(&quot;Content&quot;). Unless otherwise indicated below, the Content is
+provided to you under the terms and conditions of the Eclipse Public License
+Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available at <a
+href="http://www.eclipse.org/org/documents/epl-v10.php">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation,
+the Content is being redistributed by another party (&quot;Redistributor&quot;)
+and different terms and conditions may apply to your use of any object code in
+the Content. Check the RedistributorÂ’s license that was provided with the
+Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source
+code in the Content and such source code may be obtained at <a
+href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+<p>&nbsp;</p>
+</div>
+</body>
+</html>
diff --git a/plugins/org.eclipse.datatools.connectivity.jdt/build.properties b/plugins/org.eclipse.datatools.connectivity.jdt/build.properties
new file mode 100644
index 0000000..b82bc58
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.jdt/build.properties
@@ -0,0 +1,15 @@
+bin.includes = plugin.xml,\
+               plugin.properties,\
+               about.html,\
+               .options,\
+               META-INF/,\
+               .
+jars.compile.order = .
+src.dir			 = src/
+plugin.version =	1.0.0.200702071
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+source.. = src/
+output.. = bin/
diff --git a/plugins/org.eclipse.datatools.connectivity.jdt/build.xml b/plugins/org.eclipse.datatools.connectivity.jdt/build.xml
new file mode 100644
index 0000000..3f4aea4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.jdt/build.xml
@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.datatools.connectivity.jdt" default="build.jars" basedir=".">
+
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${java.home}/lib">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins">
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.datatools.connectivity.jdt">
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.datatools.connectivity.jdt for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<zip destfile="${plugin.destination}/org.eclipse.datatools.connectivity.jdt_1.0.0.20061024.jar" basedir="${temp.folder}/org.eclipse.datatools.connectivity.jdt_1.0.0.20061024" filesonly="false" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="connectivityjdt.jar" depends="init" unless="connectivityjdt.jar" description="Create jar: org.eclipse.datatools.connectivity.jdt connectivityjdt.jar.">
+		<delete dir="${temp.folder}/connectivityjdt.jar.bin"/>
+		<mkdir dir="${temp.folder}/connectivityjdt.jar.bin"/>
+		<path id="connectivityjdt.jar.classpath">
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ui_3.2.1.M20060913-0800.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.runtime_3.2.0.v20060603.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.osgi_3.2.1.R32x_v20060919.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.equinox.common_3.2.0.v20060603.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.jobs_3.2.0.v20060603.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.runtime.compatibility.registry_3.2.1.R32x_v20060907/runtime_registry_compatibility.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.runtime.compatibility.registry_3.2.1.R32x_v20060907"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.equinox.registry_3.2.1.R32x_v20060814.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.apache.xerces_2.8.0.v200606131651/resolver.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.apache.xerces_2.8.0.v200606131651/xercesImpl.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.apache.xerces_2.8.0.v200606131651/xml-apis.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.equinox.preferences_3.2.1.R32x_v20060717.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.runtime.compatibility.registry_3.2.1.R32x_v20060907/@dot"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.contenttype_3.2.0.v20060603.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.runtime.compatibility.auth_3.2.0.v20060601.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.swt_3.2.1.v3235e.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.swt.win32.win32.x86_3.2.1.v3235.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.jface_3.2.1.M20060908-1000.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.commands_3.2.0.I20060605-1400.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ui.workbench_3.2.1.M20060906-0800.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ui.workbench.compatibility_3.2.0.I20060605-1400/@dot"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ui.workbench.compatibility_3.2.0.I20060605-1400/compatibility.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/com.ibm.icu_3.4.5.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.help_3.2.1.R321_v20060920.jar"/>
+			<pathelement path="../org.eclipse.core.expressions/bin"/>
+			<pathelement path="../org.eclipse.core.expressions/@dot"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.resources_3.2.1.R32x_v20060914.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.resources.compatibility_3.2.0.v20060603.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.resources.win32_3.2.0.v20060603.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.runtime.compatibility_3.1.100.v20060603.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.update.configurator_3.2.1.v20092006.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ant.core_3.1.100.v20060531.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.variables_3.1.100.v20060605.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.filesystem_1.0.0.v20060603.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.filesystem.win32.x86_1.0.0.v20060603.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.jdt.core_3.2.1.v_677_R32x.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.text_3.2.0.v20060605-1400.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.team.core_3.2.1.M20060711.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.jdt.ui_3.2.1.r321_v20060907.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ui.console_3.1.100.v20060605.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.jface.text_3.2.1.r321_v20060810.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ui.workbench.texteditor_3.2.0.v20060605-1400.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.search_3.2.1.r321_v20060726.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.filebuffers_3.2.1.r321_v20060721.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ui.ide_3.2.1.M20060915-1030.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ui.win32_3.2.0.I20060605-1400.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ui.views_3.2.1.M20060906-0800.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.update.core_3.2.1.v20092006.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.update.core.win32_3.2.1.v20092006.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.update.ui_3.2.1.v20092006.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ui.forms_3.2.0.v20060602.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.debug.core_3.2.1.v20060823.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.debug.ui_3.2.1.v20060823.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ui.editors_3.2.1.r321_v20060721.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.jdt.launching_3.2.1.r321_v20060731.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.jdt.debug_3.2.1.r321_v20060731/jdi.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.jdt.debug_3.2.1.r321_v20060731/jdimodel.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.jdt.debug_3.2.1.r321_v20060731/tools.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.compare_3.2.1.M20060711.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.team.ui_3.2.1.M200608151725.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ui.navigator_3.2.1.M20060913-0800.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ui.navigator.resources_3.2.1.M20060906-0800b.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ui.views.properties.tabbed_3.2.1.M20060830-0800.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ltk.core.refactoring_3.2.1.r321_v20060823.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ltk.ui.refactoring_3.2.1.r321_v20060726.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.jdt.core.manipulation_1.0.1.r321_v20060721.jar"/>
+			<pathelement path="../org.eclipse.datatools.connectivity/bin/"/>
+			<pathelement path="../org.eclipse.datatools.connectivity/connectivity.jar"/>
+			<pathelement path="../org.eclipse.datatools.connectivity.ui/bin/"/>
+			<pathelement path="../org.eclipse.datatools.connectivity.ui/connectivityui.jar"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${temp.folder}/connectivityjdt.jar.bin" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="connectivityjdt.jar.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler.connectivityjdt.jar.args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+			<compilerarg line="-log '${temp.folder}/connectivityjdt.jar.bin${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+		</javac>
+		<!-- Copy necessary resources -->
+		<copy todir="${temp.folder}/connectivityjdt.jar.bin" failonerror="true" overwrite="false">
+			<fileset dir="src/" excludes="**/*.java, **/package.htm*"			/>
+		</copy>
+		<mkdir dir="${build.result.folder}"/>
+		<jar destfile="${build.result.folder}/connectivityjdt.jar" basedir="${temp.folder}/connectivityjdt.jar.bin"/>
+		<delete dir="${temp.folder}/connectivityjdt.jar.bin"/>
+	</target>
+
+	<target name="connectivityjdtsrc.zip" depends="init" unless="connectivityjdtsrc.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<zip destfile="${build.result.folder}/connectivityjdtsrc.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/" includes="**/*.java"			/>
+		</zip>
+	</target>
+
+	<target name="build.jars" depends="init" description="Build all the jars for the plug-in: org.eclipse.datatools.connectivity.jdt.">
+		<available property="connectivityjdt.jar" file="${build.result.folder}/connectivityjdt.jar"/>
+		<antcall target="connectivityjdt.jar"/>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="connectivityjdtsrc.zip" file="${build.result.folder}/connectivityjdtsrc.zip"/>
+		<antcall target="connectivityjdtsrc.zip"/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.datatools.connectivity.jdt_1.0.0.20061024"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.datatools.connectivity.jdt_1.0.0.20061024" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}" includes="connectivityjdt.jar"			/>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.datatools.connectivity.jdt_1.0.0.20061024" failonerror="true" overwrite="false">
+			<fileset dir="${basedir}" includes="plugin.xml,plugin.properties,about.html,.options,META-INF/,connectivityjdt.jar"			/>
+		</copy>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.datatools.connectivity.jdt_1.0.0.20061024"/>
+		<copy file="${build.result.folder}/connectivityjdtsrc.zip" todir="${destination.temp.folder}/org.eclipse.datatools.connectivity.jdt_1.0.0.20061024" failonerror="false" overwrite="false"/>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.datatools.connectivity.jdt_1.0.0.20061024"/>
+		<copy file="${temp.folder}/connectivityjdt.jar.bin${logExtension}" todir="${destination.temp.folder}/org.eclipse.datatools.connectivity.jdt_1.0.0.20061024" failonerror="false" overwrite="false"/>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.datatools.connectivity.jdt of all the zips, jars and logs created.">
+		<delete file="${build.result.folder}/connectivityjdt.jar"/>
+		<delete file="${build.result.folder}/connectivityjdtsrc.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.datatools.connectivity.jdt_1.0.0.20061024.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.datatools.connectivity.jdt_1.0.0.20061024.zip"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="C:/Eclipse3.2/workspace/org.eclipse.datatools.connectivity.jdt" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.datatools.connectivity.jdt.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}" includes="**/*.bin${logExtension}"			/>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.datatools.connectivity.jdt_1.0.0.20061024.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+</project>
diff --git a/plugins/org.eclipse.datatools.connectivity.jdt/plugin.properties b/plugins/org.eclipse.datatools.connectivity.jdt/plugin.properties
new file mode 100644
index 0000000..ed3d1ec
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.jdt/plugin.properties
@@ -0,0 +1,14 @@
+################################################################################
+## Copyright (c) 2006 Sybase, Inc.
+## All rights reserved. This program and the accompanying materials
+## are made available under the terms of the Eclipse Public License v1.0
+## which accompanies this distribution, and is available at
+## http://www.eclipse.org/legal/epl-v10.html
+##
+## Contributors:
+##    Sybase, Inc. - initial API and implementation
+################################################################################ 
+Plugin.Name = Data Tools Platform Connectivity JDT Extension Plug-in
+Plugin.ProviderName = Eclipse.org
+
+driver.classpath.container.name = Connectivity Driver Definition
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.jdt/plugin.xml b/plugins/org.eclipse.datatools.connectivity.jdt/plugin.xml
new file mode 100644
index 0000000..3490f67
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.jdt/plugin.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension
+         point="org.eclipse.jdt.core.classpathContainerInitializer">
+      <classpathContainerInitializer
+            class="org.eclipse.datatools.connectivity.jdt.internal.DriverClasspathContainerInitializer"
+            id="org.eclipse.datatools.connectivity.jdt.DRIVERLIBRARY"/>
+   </extension>
+   <extension
+         point="org.eclipse.jdt.ui.classpathContainerPage">
+      <classpathContainerPage
+            class="org.eclipse.datatools.connectivity.jdt.internal.DriverClasspathContainerPage"
+            id="org.eclipse.datatools.connectivity.jdt.DRIVERLIBRARY"
+            name="%driver.classpath.container.name"/>
+   </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.datatools.connectivity.jdt/src/org/eclipse/datatools/connectivity/jdt/internal/ConnJDTPlugin.java b/plugins/org.eclipse.datatools.connectivity.jdt/src/org/eclipse/datatools/connectivity/jdt/internal/ConnJDTPlugin.java
new file mode 100644
index 0000000..8a0ce44
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.jdt/src/org/eclipse/datatools/connectivity/jdt/internal/ConnJDTPlugin.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.jdt.internal;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ * 
+ * @author brianf
+ */
+public class ConnJDTPlugin extends AbstractUIPlugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.datatools.connectivity.jdt.internal";
+
+	// ID for the driver library container type
+	public static final String DRIVER_CONTAINER_ID= "org.eclipse.datatools.connectivity.jdt.DRIVERLIBRARY"; //$NON-NLS-1$
+
+	// The shared instance
+	private static ConnJDTPlugin plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public ConnJDTPlugin() {
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static ConnJDTPlugin getDefault() {
+		return plugin;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.jdt/src/org/eclipse/datatools/connectivity/jdt/internal/DriverClasspathContainer.java b/plugins/org.eclipse.datatools.connectivity.jdt/src/org/eclipse/datatools/connectivity/jdt/internal/DriverClasspathContainer.java
new file mode 100644
index 0000000..0b3c693
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.jdt/src/org/eclipse/datatools/connectivity/jdt/internal/DriverClasspathContainer.java
@@ -0,0 +1,141 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.jdt.internal;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.drivers.DriverManager;
+import org.eclipse.jdt.core.IAccessRule;
+import org.eclipse.jdt.core.IClasspathAttribute;
+import org.eclipse.jdt.core.IClasspathContainer;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.internal.core.ClasspathEntry;
+
+/**
+ * Container that adapts the jar list from a driver instance
+ * to add the referenced jars to a Java project.
+ * @author brianf
+ *
+ */
+public class DriverClasspathContainer implements IClasspathContainer {
+
+	// descriptive name for the container
+	private String name;
+	
+	// local reference to the driver instance
+	private DriverInstance mDriverInstance;
+	
+	/**
+	 * @param libName
+	 */
+	public DriverClasspathContainer(String libName) {
+		this.name= libName;
+		mDriverInstance =
+			DriverManager.getInstance().getDriverInstanceByName(this.name);
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.core.IClasspathContainer#getClasspathEntries()
+	 */
+	public IClasspathEntry[] getClasspathEntries() {
+		IClasspathEntry[] entries = getEntries();
+		if (entries != null)
+			return entries;
+		return new IClasspathEntry[0];
+		
+	}
+	
+	/**
+	 * @param inFile
+	 * @return
+	 */
+	private IPath getPathForJavaIOFile ( java.io.File inFile ) {
+		try {
+			URL url = inFile.toURL();
+			try {
+				url = FileLocator.toFileURL(url);
+	
+				IPath path = new Path(url.getFile());
+				
+				return path;
+			} catch (IOException e) {
+				// do nothing
+			}
+		} catch (MalformedURLException e){
+			
+		}
+		return null;
+	}
+	
+	/**
+	 * @return
+	 */
+	private IClasspathEntry[] getEntries() {
+		ArrayList list = new ArrayList();
+		for (int i = 0; i < mDriverInstance.getJarListAsArray().length; i++) {
+			String path = mDriverInstance.getJarListAsArray()[i];
+			java.io.File file = new java.io.File(path);
+
+			// if it's not a jar or zip, don't process it
+			if (!(file.getName().endsWith(".jar") ||
+					file.getName().endsWith(".zip")))
+				continue;
+			
+			IPath jarPath = getPathForJavaIOFile(file);
+			ClasspathEntry entry = new ClasspathEntry(
+					ClasspathEntry.CPE_LIBRARY, 
+					K_APPLICATION, 
+					jarPath, 
+					new IPath[0],
+					new IPath[0], 
+					null, 
+					null, 
+					null,
+					true, 
+					new IAccessRule[0], 
+					false, 
+					new IClasspathAttribute[0]);
+			list.add(entry);
+		}
+		if (list.size() > 0) {
+			return (IClasspathEntry[]) list.toArray( new IClasspathEntry[list.size()]);
+		}
+		return new IClasspathEntry[0];
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.core.IClasspathContainer#getDescription()
+	 */
+	public String getDescription() {
+		return this.name;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.core.IClasspathContainer#getKind()
+	 */
+	public int getKind() {
+		return K_APPLICATION;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.core.IClasspathContainer#getPath()
+	 */
+	public IPath getPath() {
+		return new Path(ConnJDTPlugin.DRIVER_CONTAINER_ID).append(this.name);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.jdt/src/org/eclipse/datatools/connectivity/jdt/internal/DriverClasspathContainerInitializer.java b/plugins/org.eclipse.datatools.connectivity.jdt/src/org/eclipse/datatools/connectivity/jdt/internal/DriverClasspathContainerInitializer.java
new file mode 100644
index 0000000..81d84ae
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.jdt/src/org/eclipse/datatools/connectivity/jdt/internal/DriverClasspathContainerInitializer.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.jdt.internal;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.drivers.DriverManager;
+import org.eclipse.jdt.core.ClasspathContainerInitializer;
+import org.eclipse.jdt.core.IClasspathContainer;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+
+/**
+ * Initializes the driver classpath container 
+ * @author brianf
+ *
+ */
+public class DriverClasspathContainerInitializer extends ClasspathContainerInitializer {
+
+	public void initialize(IPath containerPath, IJavaProject javaProject)
+		throws CoreException {
+		if (isDriverContainer(containerPath)) {
+			String name= containerPath.segment(1);
+			DriverInstance di = DriverManager.getInstance().getDriverInstanceByName(name);
+			IClasspathContainer container = new DriverClasspathContainer(di.getName());
+			JavaCore.setClasspathContainer(containerPath, new IJavaProject[] { javaProject }, new IClasspathContainer[] {container},  null);
+		}
+	}
+	
+	/**
+	 * @param path
+	 * @return
+	 */
+	private boolean isDriverContainer(IPath path) {
+		return path != null && path.segmentCount() == 2 && ConnJDTPlugin.DRIVER_CONTAINER_ID.equals(path.segment(0));
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.jdt.core.ClasspathContainerInitializer#getComparisonID(org.eclipse.core.runtime.IPath, org.eclipse.jdt.core.IJavaProject)
+	 */
+	public Object getComparisonID(IPath containerPath, IJavaProject project) {
+		if (containerPath == null || project == null)
+			return null;
+			
+		return containerPath.segment(0) + "/" + project.getPath().segment(0); //$NON-NLS-1$
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.core.ClasspathContainerInitializer#canUpdateClasspathContainer(org.eclipse.core.runtime.IPath, org.eclipse.jdt.core.IJavaProject)
+	 */
+	public boolean canUpdateClasspathContainer(IPath containerPath, IJavaProject project) {
+		return isDriverContainer(containerPath);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.core.ClasspathContainerInitializer#getDescription(org.eclipse.core.runtime.IPath, org.eclipse.jdt.core.IJavaProject)
+	 */
+	public String getDescription(IPath containerPath, IJavaProject project) {
+		if (isDriverContainer(containerPath)) {
+			return containerPath.segment(1);
+		}
+		return super.getDescription(containerPath, project);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.core.ClasspathContainerInitializer#requestClasspathContainerUpdate(org.eclipse.core.runtime.IPath, org.eclipse.jdt.core.IJavaProject, org.eclipse.jdt.core.IClasspathContainer)
+	 */
+	public void requestClasspathContainerUpdate(IPath containerPath, IJavaProject project, IClasspathContainer containerSuggestion) throws CoreException {
+		// empty
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.jdt/src/org/eclipse/datatools/connectivity/jdt/internal/DriverClasspathContainerPage.java b/plugins/org.eclipse.datatools.connectivity.jdt/src/org/eclipse/datatools/connectivity/jdt/internal/DriverClasspathContainerPage.java
new file mode 100644
index 0000000..5dbf16c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.jdt/src/org/eclipse/datatools/connectivity/jdt/internal/DriverClasspathContainerPage.java
@@ -0,0 +1,146 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.jdt.internal;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.internal.ui.DriverListCombo;
+import org.eclipse.jdt.core.IClasspathContainer;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.ui.wizards.IClasspathContainerPage;
+import org.eclipse.jdt.ui.wizards.IClasspathContainerPageExtension;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * Wizard page presented to the user to create the classpath
+ * container from the driver instance.
+ * @author brianf
+ *
+ */
+public class DriverClasspathContainerPage extends WizardPage implements
+		IClasspathContainerPage, IClasspathContainerPageExtension {
+
+	private DriverListCombo combo;
+	private Set fUsedPaths;
+	private String initialSelectName = null;
+
+	/**
+	 * Constructor
+	 */
+	public DriverClasspathContainerPage() {
+		this(DriverClasspathMessages.getString("DriverClasspathContainerPage.name"));
+		this.setTitle(DriverClasspathMessages.getString("DriverClasspathContainerPage.title"));
+		this.setMessage(DriverClasspathMessages.getString("DriverClasspathContainerPage.msg"));
+	}
+	
+	/**
+	 * @param pageName
+	 */
+	public DriverClasspathContainerPage(String pageName) {
+		super(pageName);
+		fUsedPaths= new HashSet();
+	}
+
+	/**
+	 * @param pageName
+	 * @param title
+	 * @param titleImage
+	 */
+	public DriverClasspathContainerPage(String pageName, String title,
+			ImageDescriptor titleImage) {
+		super(pageName, title, titleImage);
+		fUsedPaths= new HashSet();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.ui.wizards.IClasspathContainerPage#finish()
+	 */
+	public boolean finish() {
+		return true;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.ui.wizards.IClasspathContainerPage#getSelection()
+	 */
+	public IClasspathEntry getSelection() {
+		if (combo.getSelectedDriverInstance() != null) {
+			DriverInstance di = combo.getSelectedDriverInstance();
+			IClasspathContainer container = new DriverClasspathContainer(di.getName());
+			IClasspathEntry entry = JavaCore.newContainerEntry(container.getPath());
+			return entry;
+		}
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.ui.wizards.IClasspathContainerPage#setSelection(org.eclipse.jdt.core.IClasspathEntry)
+	 */
+	public void setSelection(IClasspathEntry containerEntry) {
+		if (containerEntry != null) {
+			IPath path = containerEntry.getPath();
+			if (isDriverContainer(path)) {
+				initialSelectName = path.segment(1);
+			}
+		}
+	}
+
+	/**
+	 * @param path
+	 * @return
+	 */
+	private boolean isDriverContainer(IPath path) {
+		return path != null && path.segmentCount() == 2 && ConnJDTPlugin.DRIVER_CONTAINER_ID.equals(path.segment(0));
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.ui.wizards.IClasspathContainerPageExtension#initialize(org.eclipse.jdt.core.IJavaProject, org.eclipse.jdt.core.IClasspathEntry[])
+	 */
+	public void initialize(
+			IJavaProject project,
+			IClasspathEntry[] currentEntries) {
+			for (int i= 0; i < currentEntries.length; i++) {
+				IClasspathEntry curr= currentEntries[i];
+				if (curr.getEntryKind() == IClasspathEntry.CPE_CONTAINER) {
+					fUsedPaths.add(curr.getPath());
+				}
+			}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+	 */
+	public void createControl(Composite parent) {
+		Composite composite= new Composite(parent, SWT.NONE);
+		composite.setLayout(new GridLayout(1, true));
+		composite.setFont(parent.getFont());
+		
+		combo = new DriverListCombo();
+		combo.setLabelText(DriverClasspathMessages.getString("DriverClasspathContainerPage.combo.title"));
+		combo.createContents(composite);
+		combo.getCombo().setLayoutData(new GridData(SWT.FILL, 0, true, false));
+		combo.setSelection(this.initialSelectName);
+		
+		Dialog.applyDialogFont(composite);
+		setControl(composite);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.jdt/src/org/eclipse/datatools/connectivity/jdt/internal/DriverClasspathMessages.java b/plugins/org.eclipse.datatools.connectivity.jdt/src/org/eclipse/datatools/connectivity/jdt/internal/DriverClasspathMessages.java
new file mode 100644
index 0000000..db41b79
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.jdt/src/org/eclipse/datatools/connectivity/jdt/internal/DriverClasspathMessages.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.jdt.internal;
+
+import java.text.MessageFormat;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * Utility class which helps managing messages
+ * 
+ * @author brianf
+ */
+public class DriverClasspathMessages {
+
+	// constants
+	private static final String RESOURCE_BUNDLE = "org.eclipse.datatools.connectivity.jdt.internal.messages";//$NON-NLS-1$
+	private static ResourceBundle bundle = ResourceBundle
+			.getBundle(RESOURCE_BUNDLE);
+
+	/**
+	 * Private constructor
+	 */
+	private DriverClasspathMessages() {
+		// prevent instantiation of class
+	}
+
+	/**
+	 * Returns the formatted message for the given key in the resource bundle.
+	 * 
+	 * @param key the resource name
+	 * @param args the message arguments
+	 * @return the string
+	 */
+	public static String format(String key, Object[] args) {
+		return MessageFormat.format(getString(key), args);
+	}
+
+	/**
+	 * Returns the resource object with the given key in the resource bundle. If
+	 * there isn't any value under the given key, the key is returned.
+	 * 
+	 * @param key the resource name
+	 * @return the string
+	 */
+	public static String getString(String key) {
+		try {
+			return bundle.getString(key);
+		}
+		catch (MissingResourceException e) {
+			return key;
+		}
+	}
+
+	/**
+	 * Returns the resource object with the given key in the resource bundle. If
+	 * there isn't any value under the given key, the default value is returned.
+	 * 
+	 * @param key the resource name
+	 * @param def the default value
+	 * @return the string
+	 */
+	public static String getString(String key, String def) {
+		try {
+			return bundle.getString(key);
+		}
+		catch (MissingResourceException e) {
+			return def;
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.jdt/src/org/eclipse/datatools/connectivity/jdt/internal/messages.properties b/plugins/org.eclipse.datatools.connectivity.jdt/src/org/eclipse/datatools/connectivity/jdt/internal/messages.properties
new file mode 100644
index 0000000..480280f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.jdt/src/org/eclipse/datatools/connectivity/jdt/internal/messages.properties
@@ -0,0 +1,16 @@
+################################################################################
+## Copyright (c) 2006 Sybase, Inc.
+## All rights reserved. This program and the accompanying materials
+## are made available under the terms of the Eclipse Public License v1.0
+## which accompanies this distribution, and is available at
+## http://www.eclipse.org/legal/epl-v10.html
+##
+## Contributors:
+##    Sybase, Inc. - initial API and implementation
+################################################################################ 
+# package: org.eclipse.datatools.connectivity.jdt.internal
+
+DriverClasspathContainerPage.name = MyDriverClassPathPage
+DriverClasspathContainerPage.title = Connectivity Driver Definition
+DriverClasspathContainerPage.msg = Select a driver definition to add its jars to the classpath.
+DriverClasspathContainerPage.combo.title = Available Driver Definitions:
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/.classpath b/plugins/org.eclipse.datatools.connectivity.oda.consumer/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/.gitignore b/plugins/org.eclipse.datatools.connectivity.oda.consumer/.gitignore
new file mode 100644
index 0000000..1ef9a6b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/.gitignore
@@ -0,0 +1,6 @@
+bin
+doc
+download
+*.zip
+*.jar
+build*.xml
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/.project b/plugins/org.eclipse.datatools.connectivity.oda.consumer/.project
new file mode 100644
index 0000000..d9eae89
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.oda.consumer</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.connectivity.oda.consumer/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..05f6590
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,13 @@
+#Fri Apr 13 14:14:14 PDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.4
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.connectivity.oda.consumer/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..b0ecdd9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: DTP ODA Consumer Helper Component Plug-in
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.oda.consumer;singleton:=true
+Bundle-Version: 3.4.1.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: Eclipse Data Tools Platform
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.datatools.connectivity.oda;visibility:=reexport
+Export-Package: org.eclipse.datatools.connectivity.oda.consumer.helper,
+ org.eclipse.datatools.connectivity.oda.consumer.nls;x-friends:="org.eclipse.datatools.connectivity.oda.consumer.tests",
+ org.eclipse.datatools.connectivity.oda.consumer.services,
+ org.eclipse.datatools.connectivity.oda.consumer.services.impl
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
+Bundle-Activator: org.eclipse.datatools.connectivity.oda.consumer.helper.OdaConsumerPlugin
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/about.html b/plugins/org.eclipse.datatools.connectivity.oda.consumer/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/build.properties b/plugins/org.eclipse.datatools.connectivity.oda.consumer/build.properties
new file mode 100644
index 0000000..e60afd5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/build.properties
@@ -0,0 +1,14 @@
+source.. = src/

+output.. = bin/

+bin.includes = META-INF/,\

+               about.html,\

+               plugin.xml,\

+               .,\

+               schema/

+javac.source =           1.6

+javac.target =           1.6

+javadoc.dir =  doc/api/

+download.dir = ./download/

+src.includes = about.html

+

+

diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/plugin.xml b/plugins/org.eclipse.datatools.connectivity.oda.consumer/plugin.xml
new file mode 100644
index 0000000..6b293ab
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/plugin.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<!--
+/**
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: plugin.xml,v 1.1 2006/04/06 11:12:54 lchan Exp $
+ */
+-->
+
+<plugin>
+   <extension-point id="driverBridge" name="DTP ODA Consumer Helper Driver Bridge" schema="schema/driverBridge.exsd"/>
+   <extension-point id="propertyProvider" name="DTP ODA Consumer Data Source Property Service Provider" schema="schema/propertyProvider.exsd"/>
+
+</plugin>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/schema-doc/org_eclipse_datatools_connectivity_oda_consumer_driverBridge.html b/plugins/org.eclipse.datatools.connectivity.oda.consumer/schema-doc/org_eclipse_datatools_connectivity_oda_consumer_driverBridge.html
new file mode 100644
index 0000000..2177ef6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/schema-doc/org_eclipse_datatools_connectivity_oda_consumer_driverBridge.html
@@ -0,0 +1,47 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>DTP ODA Consumer Helper Driver Bridge</title>
+<style>@import url("file:/D:/Lang/eclipse_32M5a/plugins/org.eclipse.sdk_3.2.0.v20060214/book.css");</style>
+<style>@import url("file:/D:/Lang/eclipse_32M5a/configuration/org.eclipse.osgi/bundles/143/1/.cp/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>DTP ODA Consumer Helper Driver Bridge</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.connectivity.oda.consumer.driverBridge<p></p>
+<h6 class=CaptionFigColumn id=header>Since: </h6>3.0
+<p></p>
+
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>This ODA consumer helper component's extension point supports the use of a custom ODA driver bridge.  An extension would specify a run-time driver bridge that extends the consumer helper, and/or servers as an adapter to underlying data provider objects that do not implement the org.eclipse.datatools.connectivity.oda interfaces.</p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.bridge">bridge</a>)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.bridge">bridge</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST bridge</p>
+<p class=code id=dtdAttlist>driverType&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>bridgeId&nbsp;&nbsp;&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+Defines the custom driver bridge for a type of driver.</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>driverType</b> - The type of an underlying data driver for which an ODA driver bridge is applied.  It can be either the interface name or class name of the driver.  A bridge defined for a driver class takes precedence over those defined for a driver's interface(s).</li>
+<li><b>bridgeId</b> - The ODA data source element id of the driver bridge extension that adapts the ODA runtime interfaces for a data driver, and implements the ODA data source extension point <i>org.eclipse.datatools.connectivity.oda.dataSource</i>.
+<br>Its driver bridge extension's <i>driverClass</i> is the concrete class that serves as the custom bridge's entry point.</li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>API Information: </h6>The driver bridge must implement the runtime interfaces defined in the <i>org.eclipse.datatools.connectivity.oda</i> package. See the package's JavaDoc documentation and API interfaces for more information.
+<p></p>
+
+<br>
+<p class=note id=copyright>
+Copyright (c) 2006 Actuate Corporation.
+All rights reserved. This program and the accompanying materials are made available under the  terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+<p></p>
+
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/schema-doc/org_eclipse_datatools_connectivity_oda_consumer_propertyProvider.html b/plugins/org.eclipse.datatools.connectivity.oda.consumer/schema-doc/org_eclipse_datatools_connectivity_oda_consumer_propertyProvider.html
new file mode 100644
index 0000000..dc4014d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/schema-doc/org_eclipse_datatools_connectivity_oda_consumer_propertyProvider.html
@@ -0,0 +1,47 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>DTP ODA Consumer Data Source Property Service Provider</title>
+<style>@import url("file:/C:/lang/eclipse_32rc2/plugins/org.eclipse.sdk_3.2.0.v20060413-1200/book.css");</style>
+<style>@import url("file:/C:/lang/eclipse_32rc2/configuration/org.eclipse.osgi/bundles/69/1/.cp/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>DTP ODA Consumer Data Source Property Service Provider</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.connectivity.oda.consumer.propertyProvider<p></p>
+<h6 class=CaptionFigColumn id=header>Since: </h6>3.0.1
+<p></p>
+
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>This ODA consumer helper component's extension point allows an ODA consumer application to extend the ODA consumer framework to provide application-specific service to obtain and adjust externalized property names and corresponding values, for use by an ODA run-time driver to connect to a data source.</p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.dataSourcePropertyService">dataSourcePropertyService</a>)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.dataSourcePropertyService">dataSourcePropertyService</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST dataSourcePropertyService</p>
+<p class=code id=dtdAttlist>consumerApplicationId&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>providerClass&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+Allows an ODA consumer application, such as J2EE application, to extend the ODA consumer framework to provide application-specific service to obtain and adjust configurable, externalized property names and corresponding values, for use by an ODA run-time driver to connect to a data source.</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>consumerApplicationId</b> - The unique identifier of an ODA consumer application, such as a J2EE application, which embeds an engine that uses the ODA consumer helper framework.
+This consumer application id must match the value of the IPropertyProvider.ODA_CONSUMER_ID key, contained in a Map passed as the context in the call to the IDriver.setAppContext method.</li>
+<li><b>providerClass</b> - The concrete class that implements the <code>org.eclipse.datatools.connectivity.oda.consumer.services.IPropertyProvider</code> interface to provide the application-specific service to obtain and adjust the data source connection property name-value pairs.</li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>API Information: </h6>[Provisional] An extension must implement the IPropertyProvider interface defined in the <i>org.eclipse.datatools.connectivity.oda.consumer.services</i> package. See the package's JavaDoc documentation for more information.
+<p></p>
+
+<br>
+<p class=note id=copyright>
+Copyright (c) 2006 Actuate Corporation.
+All rights reserved. This program and the accompanying materials are made available under the  terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html .
+<p></p>
+
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/schema/driverBridge.exsd b/plugins/org.eclipse.datatools.connectivity.oda.consumer/schema/driverBridge.exsd
new file mode 100644
index 0000000..b75ee8e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/schema/driverBridge.exsd
@@ -0,0 +1,116 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.connectivity.oda.consumer">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.datatools.connectivity.oda.consumer" id="driverBridge" name="DTP ODA Consumer Helper Driver Bridge"/>
+      </appInfo>
+      <documentation>
+         This ODA consumer helper component&apos;s extension point supports the use of a custom ODA driver bridge.  An extension would specify a run-time driver bridge that extends the consumer helper, and/or servers as an adapter to underlying data provider objects that do not implement the org.eclipse.datatools.connectivity.oda interfaces.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <complexType>
+         <sequence>
+            <element ref="bridge"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="bridge">
+      <annotation>
+         <documentation>
+            Defines the custom driver bridge for a type of driver.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="driverType" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The type of an underlying data driver for which an ODA driver bridge is applied.  It can be either the interface name or class name of the driver.  A bridge defined for a driver class takes precedence over those defined for a driver&apos;s interface(s).
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="bridgeId" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The ODA data source element id of the driver bridge extension that adapts the ODA runtime interfaces for a data driver, and implements the ODA data source extension point &lt;i&gt;org.eclipse.datatools.connectivity.oda.dataSource&lt;/i&gt;.
+&lt;br&gt;Its driver bridge extension&apos;s &lt;i&gt;driverClass&lt;/i&gt; is the concrete class that serves as the custom bridge&apos;s entry point.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         3.0
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         The driver bridge must implement the runtime interfaces defined in the &lt;i&gt;org.eclipse.datatools.connectivity.oda&lt;/i&gt; package. See the package&apos;s JavaDoc documentation and API interfaces for more information.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         Copyright (c) 2006 Actuate Corporation.
+All rights reserved. This program and the accompanying materials are made available under the  terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/schema/propertyProvider.exsd b/plugins/org.eclipse.datatools.connectivity.oda.consumer/schema/propertyProvider.exsd
new file mode 100644
index 0000000..c5307ff
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/schema/propertyProvider.exsd
@@ -0,0 +1,121 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.connectivity.oda.consumer">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.datatools.connectivity.oda.consumer" id="propertyProvider" name="DTP ODA Consumer Data Source Property Service Provider"/>
+      </appInfo>
+      <documentation>
+         This ODA consumer helper component&apos;s extension point allows an ODA consumer application to extend the ODA consumer framework to provide application-specific service to obtain and adjust externalized property names and corresponding values, for use by an ODA run-time driver to connect to a data source.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <complexType>
+         <sequence>
+            <element ref="dataSourcePropertyService"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="dataSourcePropertyService">
+      <annotation>
+         <documentation>
+            Allows an ODA consumer application, such as J2EE application, to extend the ODA consumer framework to provide application-specific service to obtain and adjust configurable, externalized property names and corresponding values, for use by an ODA run-time driver to connect to a data source.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="consumerApplicationId" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The unique identifier of an ODA consumer application, such as a J2EE application, which embeds an engine that uses the ODA consumer helper framework.
+This consumer application id must match the value of the IPropertyProvider.ODA_CONSUMER_ID key, contained in a Map passed as the context in the call to the IDriver.setAppContext method.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="providerClass" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The concrete class that implements the &lt;code&gt;org.eclipse.datatools.connectivity.oda.consumer.services.IPropertyProvider&lt;/code&gt; interface to provide an application-specific service to obtain and adjust the data source connection properties.
+&lt;p&gt;
+See &lt;code&gt;org.eclipse.datatools.connectivity.oda.consumer.services.impl.PropertyProviderImpl&lt;/code&gt; for an exemplary base class implementation of the &lt;code&gt;IPropertyProvider&lt;/code&gt; interface.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.datatools.connectivity.oda.consumer.services.IPropertyProvider"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         3.0.1
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         [Provisional] An extension must implement the IPropertyProvider interface defined in the &lt;i&gt;org.eclipse.datatools.connectivity.oda.consumer.services&lt;/i&gt; package. See the package&apos;s JavaDoc documentation for more information.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         Copyright (c) 2006 Actuate Corporation.
+All rights reserved. This program and the accompanying materials are made available under the  terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html .
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/.gitignore b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/.gitignore
new file mode 100644
index 0000000..93bafad
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/.gitignore
@@ -0,0 +1 @@
+vss*.scc
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/BlobReader.java b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/BlobReader.java
new file mode 100644
index 0000000..96d027f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/BlobReader.java
@@ -0,0 +1,312 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.helper;
+
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.oda.IBlob;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+/**
+ *  Internal implementation class responsible for reading large binary object data from
+ *  an input stream.
+ *  This provides default implementation for those ODA drivers that do not implement
+ *  the optional methods of ODA IBlob interface.
+ */
+class BlobReader extends OdaObject
+{
+    private static final int DEFAULT_BUFFER_SIZE = 2048;
+    private static final String COMMA_SEPARATOR = ", "; //$NON-NLS-1$
+    
+    private static String sm_className = null;    // lazy initialization
+    
+    private IBlob m_odaBlob;
+    private int m_defaultBufferSize;
+        
+    protected BlobReader( IBlob odaBlob )
+    {
+        init( odaBlob, DEFAULT_BUFFER_SIZE );
+    }
+    
+    protected BlobReader( IBlob odaBlob, int defaultBufferSize )
+    {
+        init( odaBlob, defaultBufferSize );
+    }
+    
+    private void init( IBlob odaBlob, int defaultBufferSize )
+    {
+        assert( odaBlob != null );
+        m_odaBlob = odaBlob;
+        m_defaultBufferSize = ( defaultBufferSize >= 0 ) ?
+                defaultBufferSize : DEFAULT_BUFFER_SIZE;
+        
+        // for logging context
+        if( sm_className == null )
+            sm_className = getClassName();
+    }
+    
+    /**
+     * Returns the default buffer size to use for incremental read 
+     * when unable to determine the total number of bytes to read 
+     * till end of stream is reached.
+     * @return  default size of each byte array buffer
+     */
+    private int getDefaultBufferSize()
+    {
+        return m_defaultBufferSize;
+    }
+    
+    /**
+     * Provides default implementation to retrieve all or part of
+     * the BLOB data from the wrapped Blob.
+     * Returns null if not able to retrieve from stream.
+     * @param startPos  the 1-based ordinal position of the first byte 
+     *                  in the specified input stream to be extracted
+     * @param length    the number of consecutive bytes to be copied
+     * @return          a byte array containing up to <code>length</code> 
+     *                  consecutive bytes from the specified input stream, 
+     *                  starting with the byte at <code>startPos</code>;
+     *                  or null if not able to retrieve from stream as specified
+     * @throws IOException      if error in reading from the input stream
+     * @throws OdaException     if data source error occurs
+     */
+    byte[] getBytes( long startPos, int length )
+        throws IOException, OdaException
+    {
+        final String context = sm_className + ".getBytes( " +  //$NON-NLS-1$
+                                startPos + COMMA_SEPARATOR + length + " )\t"; //$NON-NLS-1$
+        logMethodCalled( context );
+        
+        // first get the underlying driver's stream
+        InputStream driverStream = null;
+        try
+        {
+            driverStream = m_odaBlob.getBinaryStream();
+        }
+        catch( OdaException e1 )
+        {
+            log( context, e1.toString() );
+        }
+
+        if( driverStream == null )
+        {
+            logMethodExitWithReturn( context, null );
+            return null;
+        }
+        
+        // use java.io utility to handle reading specified length of bytes
+        // in a single call
+        BufferedInputStream bufferedStream = new BufferedInputStream( driverStream );
+        
+        // if the first byte to retrieve is after the first position in BLOB,
+        // first skip all the bytes before startPos
+        long numToSkip = 0;
+        if( startPos > 1 )  
+        {
+            numToSkip = startPos - 1;
+            long numSkipped = bufferedStream.skip( numToSkip );
+            if( numSkipped != numToSkip )
+            {
+                bufferedStream.close();
+                logMethodExitWithReturn( context, null );
+                return null;    // not able to skip to given position
+            }
+        }
+        
+        int numToRead = length;
+        // check if the specified length is within the remaining bytes in stream
+        long streamLen = getStreamLength();
+        if( streamLen >= 0 )    // driver is able to determine the stream length 
+        {
+            int numAvailable = ( streamLen > numToSkip ) ?
+                    ( new Long( streamLen - numToSkip )).intValue() : 
+                     0;     // nothing available to read beyond starting position
+                    
+            // caller specifies to read till end of stream, or more than what's available
+            if( length < 0 || length > numAvailable )
+                numToRead = numAvailable;   // read remaining bytes till end of stream
+        }
+        
+        // next, retrieve the exact numToRead bytes from stream
+        if( numToRead >= 0 )
+        {
+            byte[] bytesData = readBytesFromStream( bufferedStream, numToRead );
+            bufferedStream.close();
+            
+            int arraySize = ( bytesData != null ) ? bytesData.length : -1;
+            logMethodExitWithReturn( context, arraySize );
+            return bytesData;
+        }
+        
+        // do not know exact bytes length till end of stream, 
+        // do incremental read till end of stream
+        byte[] remainingBytes = null;
+        try
+        {
+            remainingBytes = readRemainingBytes( bufferedStream );
+        }
+        catch( OutOfMemoryError err )   // attempts to catch error
+        {
+            err.printStackTrace();
+        }
+        bufferedStream.close();
+        
+        int arraySize = ( remainingBytes != null ) ? remainingBytes.length : -1;
+        logMethodExitWithReturn( context, arraySize );
+        
+        return remainingBytes;
+    }
+
+    /**
+     * Reads the specified inputStream from its current position up to the specified
+     * maximum number of bytes.
+     * @param stream
+     * @param maxBufSize
+     * @return
+     * @throws IOException
+     */
+    private byte[] readBytesFromStream( InputStream stream, int maxBufSize )
+        throws IOException
+    {
+        final String context = sm_className + ".readBytesFromStream( " + //$NON-NLS-1$
+                                stream + COMMA_SEPARATOR + maxBufSize + " )\t"; //$NON-NLS-1$
+        assert( maxBufSize >= 0 );
+        byte[] outBuffer = new byte[ maxBufSize ];
+        if( maxBufSize == 0 )
+        {
+            log( context, "Returns an empty byte array." ); //$NON-NLS-1$
+            return outBuffer;
+        }
+        
+        int bytesRead = stream.read( outBuffer, 0, outBuffer.length );
+        if( bytesRead == maxBufSize ) 
+        {
+            log( context, "Returns a byte array of requested size: " + outBuffer.length ); //$NON-NLS-1$
+            return outBuffer;
+        }
+        if( bytesRead < 0 )     // end of stream
+        {
+            log( context, "Returns a null byte array for end of stream." ); //$NON-NLS-1$
+            return null;
+        }
+
+        // in case end of stream is reached before full buffer length is read
+        byte[] resizedBuf = new byte[ bytesRead ];
+        System.arraycopy( outBuffer, 0, resizedBuf, 0, bytesRead );
+        
+        log( context, "Returns a byte array of size: " + resizedBuf.length ); //$NON-NLS-1$
+
+        return resizedBuf;       
+    }
+    
+    /**
+     * Reads the specified inputStream from its current position up to the 
+     * end of stream.
+     * This approach is inefficient and takes up extra memory, and is the last
+     * resort used when the underlying input stream provides no stream length info.  
+     * @param stream
+     * @return  read data in a single byte array; array may be empty if no data
+     *          was read in a normal condition
+     * @throws IOException
+     */
+    private byte[] readRemainingBytes( InputStream stream )
+        throws IOException
+    {
+        final String context = sm_className + ".readRemainingBytes( " + stream + " )\t"; //$NON-NLS-1$   //$NON-NLS-2$
+
+        // read one chunk of bytes at a time using default buffer size, 
+        // and keep the chunk buffers in a temp collection
+        ArrayList bufferList = new ArrayList();
+        int bufferSize = getDefaultBufferSize();    // may be zero for empty array
+        log( context, "Default buffer size: " + bufferSize );       //$NON-NLS-1$
+        
+        boolean endOfStream = false;
+        byte[] aChunk = null;
+        while( ! endOfStream )
+        {
+            aChunk = readBytesFromStream( stream, bufferSize );
+            if( aChunk != null )
+                bufferList.add( aChunk );
+            endOfStream = ( aChunk == null || aChunk.length < bufferSize || 
+                            bufferSize == 0 );  
+        }
+
+        if( bufferList.isEmpty() )  // no data was read
+        {
+            log( context, "Returns an empty byte array." ); //$NON-NLS-1$
+            return new byte[0];
+        }
+        
+        // first get the count of total bytes read in all buffers
+        int totalBytes = 0;
+        Iterator bufferIter = bufferList.iterator();
+        while( bufferIter.hasNext() )
+        {
+            aChunk = (byte[]) bufferIter.next();
+            assert( aChunk != null );
+            totalBytes += aChunk.length;
+        }
+        
+        if( totalBytes <= 0 )       // no data was read
+        {
+            log( context, "Returns an empty byte array." ); //$NON-NLS-1$
+            return new byte[0];     
+        }
+        
+        // concatenate all the buffers into a single byte array to return       
+        byte[] remainingBytes = new byte[ totalBytes ];
+        bufferIter = bufferList.iterator();
+        int bytesCopied = 0;
+        while( bufferIter.hasNext() )
+        {
+            aChunk = (byte[]) bufferIter.next();
+            
+            System.arraycopy( aChunk, 0, remainingBytes, bytesCopied, aChunk.length );
+            bytesCopied += aChunk.length;
+            assert( bytesCopied <= totalBytes );
+        }
+        
+        log( context, "Returns a byte array of size: " + remainingBytes.length ); //$NON-NLS-1$
+        return remainingBytes;
+    }
+    
+    private long getStreamLength()
+    {
+        long len = -1;  // default for unknown length
+        try
+        {
+            len = m_odaBlob.length();
+        }
+        catch( OdaException odaException )
+        {
+            // ignore
+        }
+        catch( UnsupportedOperationException uoException )
+        {
+            // ignore
+        }
+        catch( RuntimeException rtException )
+        {
+            // ignore
+        }
+        
+        return len;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/ClobReader.java b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/ClobReader.java
new file mode 100644
index 0000000..7247c8d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/ClobReader.java
@@ -0,0 +1,308 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.helper;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.oda.IClob;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+/**
+ *  Internal implementation class responsible for reading large character object data from
+ *  an input stream reader.
+ *  This provides default implementation for those ODA drivers that do not implement
+ *  the optional methods of ODA IClob interface.
+ */
+class ClobReader extends OdaObject
+{
+    private static final int DEFAULT_BUFFER_SIZE = 2048;
+    private static final String EMPTY_STR = ""; //$NON-NLS-1$
+    private static final String COMMA_SEPARATOR = ", "; //$NON-NLS-1$
+
+    private static String sm_className = null;    // lazy initialization
+    
+    private IClob m_odaClob;
+    private int m_defaultBufferSize;
+        
+    protected ClobReader( IClob odaClob )
+    {
+        init( odaClob, DEFAULT_BUFFER_SIZE );
+    }
+    
+    protected ClobReader( IClob odaClob, int defaultBufferSize )
+    {
+        init( odaClob, defaultBufferSize );
+    }
+    
+    private void init( IClob odaClob, int defaultBufferSize )
+    {
+        assert( odaClob != null );
+        m_odaClob = odaClob;
+        m_defaultBufferSize = ( defaultBufferSize >= 0 ) ?
+                                defaultBufferSize : DEFAULT_BUFFER_SIZE;
+        
+        // for logging context
+        if( sm_className == null )
+            sm_className = getClassName();
+    }
+    
+    /**
+     * Returns the default buffer size to use for incremental read 
+     * when unable to determine the total number of characters to read 
+     * till end of stream is reached.
+     * @return  default size of each char array buffer
+     */
+    private int getDefaultBufferSize()
+    {
+        return m_defaultBufferSize;
+    }
+    
+    /**
+     * Provides default implementation to retrieve all or part of
+     * the CLOB data from the wrapped Clob.
+     * Returns null if not able to retrieve from reader.
+     * @param startPos  the 1-based ordinal position of the first character 
+     *                  in the specified input reader to be extracted
+     * @param length    the number of consecutive characters to be copied
+     * @return          a string containing up to <code>length</code> 
+     *                  consecutive characters from the specified input stream reader, 
+     *                  starting with the character at <code>startPos</code>;
+     *                  or null if not able to retrieve from stream as specified
+     * @throws IOException      if error in reading from the input stream reader
+     * @throws OdaException     if data source error occurs
+     */
+    String getSubString( long startPos, int length )
+        throws IOException, OdaException
+    {
+        final String context = sm_className + ".getSubString( " +  //$NON-NLS-1$
+                                startPos + COMMA_SEPARATOR + length +  " )\t"; //$NON-NLS-1$
+        logMethodCalled( context );
+        
+        // first get the underlying driver's stream
+        Reader driverReader = null;
+        try
+        {
+            driverReader = m_odaClob.getCharacterStream();
+        }
+        catch( OdaException e1 )
+        {
+            log( context, e1.toString() );
+        }
+
+        if( driverReader == null )
+        {
+            logMethodExitWithReturn( context, null );
+            return null;
+        }
+        
+        // use java.io utility to handle reading specified length of chars
+        // in a single call
+        BufferedReader bufferedStream = new BufferedReader( driverReader );
+        
+        // if the first char to retrieve is after the first position in CLOB,
+        // first skip all the characters before startPos
+        long numToSkip = 0;
+        if( startPos > 1 )  
+        {
+            numToSkip = startPos - 1;
+            long numSkipped = bufferedStream.skip( numToSkip );
+            if( numSkipped != numToSkip )
+            {
+                bufferedStream.close();
+                logMethodExitWithReturn( context, null );
+                return null;    // not able to skip to given position
+            }
+        }
+        
+        int numToRead = length;
+        // check if the specified length is within the remaining characters in stream
+        long streamLen = getStreamLength();
+        if( streamLen >= 0 )    // driver is able to determine the stream length 
+        {
+            int numAvailable = ( streamLen > numToSkip ) ?
+                    ( new Long( streamLen - numToSkip )).intValue() : 
+                     0;     // nothing available to read beyond starting position
+                    
+            // caller specifies to read till end of stream, or more than what's available
+            if( length < 0 || length > numAvailable )
+                numToRead = numAvailable;   // read remaining chars till end of stream
+        }
+        
+        // next, retrieve the exact numToRead characters from stream
+        if( numToRead >= 0 )
+        {
+            char[] readData = readCharsFromStream( bufferedStream, numToRead );
+            bufferedStream.close();
+            String readString = new String( readData );
+            
+            logMethodExitWithReturnLen( context, readString );
+            return readString;
+        }
+        
+        // do not know exact length of remaining stream; 
+        // do incremental read till end of stream
+        String remainingStream = null;
+        try
+        {
+            remainingStream = readRemainingString( bufferedStream );
+        }
+        catch( OutOfMemoryError err )   // attempts to catch error
+        {
+            err.printStackTrace();
+        }
+        bufferedStream.close();
+        
+        logMethodExitWithReturnLen( context, remainingStream );        
+        return remainingStream;
+    }
+
+    /**
+     * Reads the specified inputStream from its current position up to the specified
+     * maximum number of characters.
+     * @param stream
+     * @param maxBufSize
+     * @return
+     * @throws IOException
+     */
+    private char[] readCharsFromStream( Reader stream, int maxBufSize )
+        throws IOException
+    {
+        final String context = sm_className + ".readCharsFromStream( " +   //$NON-NLS-1$
+                                stream + COMMA_SEPARATOR + maxBufSize + " )\t";  //$NON-NLS-1$
+        assert( maxBufSize >= 0 );
+        char[] outBuffer = new char[ maxBufSize ];
+        if( maxBufSize == 0 )
+        {
+            log( context, "Returns an empty char array." ); //$NON-NLS-1$
+            return outBuffer;
+        }
+        
+        int numRead = stream.read( outBuffer, 0, outBuffer.length );
+        if( numRead == maxBufSize ) 
+        {
+            log( context, "Returns a char array of requested size: " + outBuffer.length ); //$NON-NLS-1$
+            return outBuffer;
+        }
+        if( numRead < 0 )     // end of stream
+        {
+            log( context, "Returns a null char array for end of stream." ); //$NON-NLS-1$
+            return null;
+        }
+
+        // data read till end of stream, which may be before full buffer length is read       
+        char[] resizedBuf = new char[ numRead ];
+        System.arraycopy( outBuffer, 0, resizedBuf, 0, numRead );
+        
+        log( context, "Returns a char array of size: " + resizedBuf.length ); //$NON-NLS-1$
+
+        return resizedBuf;       
+    }
+    
+    /**
+     * Reads the specified Reader from its current position up to the 
+     * end of stream.
+     * This approach is inefficient and takes up extra memory; it is the last
+     * resort used only when the underlying input stream provides no stream length info.  
+     * @param stream
+     * @return  data read in a String; may be empty if no data
+     *          was read in a normal condition
+     * @throws IOException
+     */
+    private String readRemainingString( Reader stream )
+        throws IOException
+    {
+        final String context = sm_className + ".readRemainingString( " + stream + " )\t"; //$NON-NLS-1$ //$NON-NLS-2$
+
+        // read one chunk of char at a time using default buffer size, 
+        // and keep the chunk buffers in a temp collection
+        ArrayList bufferList = new ArrayList();
+        int bufferSize = getDefaultBufferSize();    // may be zero for empty array
+        log( context, "Default buffer size: " + bufferSize );       //$NON-NLS-1$
+        
+        boolean endOfStream = false;
+        char[] aChunk = null;
+        while( ! endOfStream )
+        {
+            aChunk = readCharsFromStream( stream, bufferSize );
+            if( aChunk != null )
+                bufferList.add( aChunk );
+            endOfStream = ( aChunk == null || aChunk.length < bufferSize || 
+                            bufferSize == 0 );  
+        }
+
+        if( bufferList.isEmpty() )  // no data was read
+        {
+            log( context, "Returns an empty String." ); //$NON-NLS-1$
+            return EMPTY_STR;
+        }
+        
+        // first get the count of total chars read in all buffers
+        int totalChars = 0;
+        Iterator bufferIter = bufferList.iterator();
+        while( bufferIter.hasNext() )
+        {
+            aChunk = (char[]) bufferIter.next();
+            assert( aChunk != null );
+            totalChars += aChunk.length;
+        }
+        
+        if( totalChars <= 0 )       // no data was read
+        {
+            log( context, "Returns an empty String." ); //$NON-NLS-1$
+            return EMPTY_STR;     
+        }
+        
+        // concatenate all the buffers into a single StringBuffer to return       
+        StringBuffer remainingString = new StringBuffer( totalChars );
+        bufferIter = bufferList.iterator();
+        while( bufferIter.hasNext() )
+        {
+            aChunk = (char[]) bufferIter.next();
+            
+            remainingString = remainingString.append( aChunk );
+        }
+        
+        log( context, "Returns a String of size: " + remainingString.length() ); //$NON-NLS-1$
+        return remainingString.toString();
+    }
+    
+    private long getStreamLength()
+    {
+        long len = -1;  // default for unknown length
+        try
+        {
+            len = m_odaClob.length();
+        }
+        catch( OdaException odaException )
+        {
+            // ignore
+        }
+        catch( UnsupportedOperationException uoException )
+        {
+            // ignore
+        }
+        catch( RuntimeException rtException )
+        {
+            // ignore
+        }
+        
+        return len;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/ConnectionPropertyHandler.java b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/ConnectionPropertyHandler.java
new file mode 100644
index 0000000..fc15b16
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/ConnectionPropertyHandler.java
@@ -0,0 +1,184 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.helper;
+
+import java.util.Locale;
+import java.util.Map;
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.consumer.services.IPropertyProvider;
+import org.eclipse.datatools.connectivity.oda.consumer.services.impl.ProviderUtil;
+
+import com.ibm.icu.util.ULocale;
+
+/**
+ * Handles ODA connection properties and the
+ * ODA consumer's propertyProvider extension point.
+ */
+class ConnectionPropertyHandler extends OdaObject
+{
+    private String m_consumerApplId;
+    private Object m_connPropContext;
+    private IPropertyProvider m_propertyProvider;
+    private ULocale m_appLocale;
+    
+    ConnectionPropertyHandler( Object context )
+    {
+        processConsumerAppContext( context );
+    }
+    
+    /**
+     * Returns the ODA consumer application id, mapped to the
+     * IPropertyProvider.ODA_CONSUMER_ID key 
+     * in a connection application context map.
+     * May be null if none is specified.
+     */
+    protected String getConsumerApplicationId() 
+    {
+        return m_consumerApplId;
+    }
+
+    /**
+     * Returns the connection property context object, mapped to the
+     * IPropertyProvider.ODA_CONN_PROP_CONTEXT key 
+     * in a connection application context map.
+     * May be null if none is specified.
+     */
+    protected Object getConnectionPropertyContext() 
+    {
+        return m_connPropContext;
+    }
+    
+    /**
+     * Returns the locale instance in the connection application context map.
+     * @return the locale instance set in the context; may be null if none is available
+     */
+    protected ULocale getAppLocale()
+    {
+        return m_appLocale;
+    }
+
+    /**
+     * Processes the consumer application entries specified for property handling 
+     * in the application context.
+     * @param context   connection application context set by the consumer application
+     */
+    private void processConsumerAppContext( Object context )
+    {
+        final String methodName = "ConnectionPropertyHandler.processConsumerAppContext"; //$NON-NLS-1$
+        logMethodCalled( methodName );
+
+        // check for the consumer application id
+        m_consumerApplId = ProviderUtil.getConsumerApplicationId( context );
+        log( methodName, "Consumer Application ID: " + m_consumerApplId ); //$NON-NLS-1$
+        
+        // check for optional externalized properties context
+        m_connPropContext = ProviderUtil.getConnectionPropertyContext( context );  
+        log( methodName, "Externalized property context: " + m_connPropContext );        //$NON-NLS-1$
+
+        // check for the optional locale instance in the context
+        m_appLocale = getAppLocale( context );
+        log( methodName, "Application Locale in context: " + m_appLocale ); //$NON-NLS-1$
+        
+        logMethodExit( methodName );
+    }
+    
+    /**
+     * Uses the extension implementation of IPropertyProvider, if available, 
+     * to obtain and return the effective property names and values 
+     * for opening a connection.
+     */
+    protected Properties getEffectiveProperties( Properties candidateProperties )
+        throws OdaException
+    {
+        final String methodName = "ConnectionPropertyHandler.getEffectiveProperties( " + //$NON-NLS-1$
+                                    candidateProperties + " )\t"; //$NON-NLS-1$
+        logMethodCalled( methodName );
+
+        IPropertyProvider propProvider = getExtensionPropertyProvider();
+
+        // no configuration service provider, use original properties
+        if( propProvider == null )
+        {
+            logMethodExit( methodName );
+            return candidateProperties; 
+        }
+        
+        // calls the implementation of the interface method, passing in 
+        // the connection properties and context specified by the consumer
+        Properties effectiveProps =
+            propProvider.getDataSourceProperties( candidateProperties, 
+                                getConnectionPropertyContext() );
+        
+        log( methodName, "Effective properties: " + effectiveProps ); //$NON-NLS-1$
+        logMethodExit( methodName );
+        
+        return effectiveProps;
+    }
+
+    /**
+     * Finds and returns the instance of extension implementation of 
+     * IPropertyProvider.
+     * May return null if no provider is defined.
+     */
+    private IPropertyProvider getExtensionPropertyProvider()
+        throws OdaException
+    {
+        if( m_propertyProvider == null )
+        {
+            String applicationId = getConsumerApplicationId();
+            m_propertyProvider = ProviderUtil.createPropertyProvider( applicationId );
+        }
+        return m_propertyProvider;
+    }
+    
+    /**
+     * Returns the locale instance specified by an ODA consumer in 
+     * the specified application context map.
+     * @param context   a Map that contains the IPropertyProvider.APP_RUNTIME_LOCALE_KEY key
+     *             with a value of locale object in either Locale, ULocale, or String type
+     */
+    private ULocale getAppLocale( Object appContext )
+    {
+        if( appContext == null || ! ( appContext instanceof Map ) )
+            return null;     // no context map to obtain value
+        
+        // get the locale instance from context map, if exists
+        String localeKey = IPropertyProvider.APP_RUNTIME_LOCALE_KEY;
+        Object localeValue = ((Map) appContext).get( localeKey );
+        if( localeValue == null )
+            return null;   // does not have locale info
+        
+        if( localeValue instanceof Locale )
+            return ULocale.forLocale( (Locale) localeValue );
+        
+        if( localeValue instanceof ULocale )
+            return (ULocale) localeValue;
+
+        if( localeValue instanceof String )
+        {
+            String localeString = (String) localeValue;
+            return new ULocale( localeString );
+        }
+        
+        // not a supported locale value type
+        logWarning( "getAppLocale(Object)",  //$NON-NLS-1$
+                "Ignoring invalid object type (" + localeValue.getClass().getName() //$NON-NLS-1$
+                + ") specified for the application locale key " + localeKey ); //$NON-NLS-1$
+        return null;
+    }   
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/DriverExtensionHelper.java b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/DriverExtensionHelper.java
new file mode 100644
index 0000000..0e65560
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/DriverExtensionHelper.java
@@ -0,0 +1,148 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.helper;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.consumer.util.manifest.DriverExtensionManifest;
+import org.eclipse.datatools.connectivity.oda.consumer.util.manifest.ExtensionExplorer;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ExtensionManifest;
+import org.eclipse.datatools.connectivity.oda.util.manifest.JavaRuntimeInterface;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ManifestExplorer;
+import org.eclipse.datatools.connectivity.oda.util.manifest.RuntimeInterface;
+import org.osgi.framework.Bundle;
+
+/**
+ *  Utility class to help with handling extensions of an ODA data source.
+ *  @since 3.2.4
+ */
+public class DriverExtensionHelper
+{
+    /**
+     * Returns the id of the effective ODA data source extension that will be accessed by the 
+     * ODA consumer framework at runtime execution.  
+     * <br>It takes into consideration any loaded extensions of
+     * of the <i>org.eclipse.datatools.connectivity.oda.consumer.driverBridge</i> extension point
+     * that overrides the specified odaDataSourceId.
+     * @param odaDataSourceId   an ODA data source extension id
+     * @return  the effective ODA data source extension id that would override the specified
+     *      odaDataSourceId at runtime.  If no overriding driverBridge extension is found,
+     *      the specified odaDataSourceId is returned.
+     * @throws OdaException 
+     */
+    public static String getEffectiveDataSourceId( String odaDataSourceId )
+        throws OdaException
+    {
+        if( odaDataSourceId == null )
+            return null;
+        
+        ExtensionManifest odaDataSourceManifest;
+        try
+        {
+            odaDataSourceManifest = ManifestExplorer.getInstance().getExtensionManifest( odaDataSourceId );
+        }
+        catch( IllegalArgumentException ex )
+        {
+            throw new OdaException( ex );    // invalid odaDataSourceId 
+        }
+
+        Class driverClass = loadDriverClass( odaDataSourceManifest );
+
+        String bridgeDataSourceId = getDriverBridgeId( driverClass );
+        
+        // no separate driver bridge is found
+        if( bridgeDataSourceId == null ||
+            bridgeDataSourceId.equalsIgnoreCase( odaDataSourceId ) )
+            return odaDataSourceId;
+        
+        // try to find the bridge's corresponding bridge id, if available
+        return getEffectiveDataSourceId( bridgeDataSourceId );
+    }
+
+    /**
+     * Looks up and returns a driver bridge extension's
+     * data source element id for the given type of ODA driver.
+     * A bridge extension defined for a driver class takes precedence
+     * over those defined for a driver's interface(s).
+     * Returns null if no corresponding driverBridge extension is found.
+     */
+    static String getDriverBridgeId( Class odaDriverClass )
+    {
+        if( odaDriverClass == null )
+            throw new IllegalArgumentException();
+        
+        // first try look up bridge extension for driver class
+        String bridgeDataSourceId = getDriverBridgeId( odaDriverClass.getName() );        
+        if( bridgeDataSourceId != null )
+            return bridgeDataSourceId;    // found
+        
+        // next try look up bridge extension for driver's interface(s)
+        Class[] driverTypes = odaDriverClass.getInterfaces();
+        for( int i = 0; i < driverTypes.length; i++ )
+        {
+            bridgeDataSourceId = getDriverBridgeId( driverTypes[i].getName() );
+            if( bridgeDataSourceId != null )
+                return bridgeDataSourceId;    // found
+        }
+        
+        return null;    // no bridge extension found for specified odaDriverClass
+    }
+    
+    private static String getDriverBridgeId( String driverType ) 
+    {
+        // look for bridge extension of the specified driver type
+        DriverExtensionManifest manifest = null;
+        try
+        {
+            manifest = ExtensionExplorer.getInstance()
+                            .getDriverExtensionManifest( driverType );
+        }
+        catch( OdaException e )
+        {
+            // ignore
+        }
+       
+        return manifest != null ? manifest.getBridgeDataSourceId() : null;
+    }
+    
+    static Class loadDriverClass( ExtensionManifest driverConfig ) 
+        throws OdaException 
+    {
+        String driverClassName = getRuntimeInterface( driverConfig ).getDriverClass();
+                
+        Bundle bundle = Platform.getBundle( driverConfig.getNamespace() );
+        try
+        {
+            return ( bundle != null ) ? 
+                        bundle.loadClass( driverClassName ) :
+                        Class.forName( driverClassName );
+        }
+        catch( ClassNotFoundException ex )
+        {
+            throw new OdaException( ex );
+        }
+    }
+    
+    static JavaRuntimeInterface getRuntimeInterface( ExtensionManifest driverConfig )
+    {
+        if( driverConfig == null )
+            throw new IllegalArgumentException();
+
+        RuntimeInterface runtime = driverConfig.getRuntimeInterface();
+        assert( runtime instanceof JavaRuntimeInterface );
+        return (JavaRuntimeInterface) runtime;       
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaAdvancedQuery.java b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaAdvancedQuery.java
new file mode 100644
index 0000000..cb479c8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaAdvancedQuery.java
@@ -0,0 +1,1885 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.helper;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+import java.sql.Time;
+import java.sql.Timestamp;
+
+import org.eclipse.datatools.connectivity.oda.IAdvancedQuery;
+import org.eclipse.datatools.connectivity.oda.IBlob;
+import org.eclipse.datatools.connectivity.oda.IClob;
+import org.eclipse.datatools.connectivity.oda.IParameterRowSet;
+import org.eclipse.datatools.connectivity.oda.IResultSet;
+import org.eclipse.datatools.connectivity.oda.IResultSetMetaData;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.SortSpec;
+import org.eclipse.datatools.connectivity.oda.consumer.nls.Messages;
+
+/**
+ * OdaAdvancedQuery is the ODA wrapper for advanced query statements.
+ */
+public class OdaAdvancedQuery extends OdaQuery
+							  implements IAdvancedQuery
+{
+    private static final String MSG_ARG_SEPARATOR = ", "; //$NON-NLS-1$
+    private static final String MSG_LINE_SEPARATOR = " )\t"; //$NON-NLS-1$
+
+    // flag to indicate whether executeQuery() was
+	// called from within execute().
+	private boolean m_calledExecuteQueryForExecute = false;
+
+	// used to store the result set from executeQuery() call in execute().
+	private IResultSet m_resultSet;
+
+	protected OdaAdvancedQuery( IAdvancedQuery statement, 
+								OdaConnection connection,
+								String dataSetType,
+								boolean switchContextClassloader,
+								ClassLoader driverClassLoader )
+	{
+		super( statement, connection, dataSetType,
+		       switchContextClassloader,
+			   driverClassLoader );
+		
+		final String context = "OdaAdvancedQuery.OdaAdvancedQuery( " + //$NON-NLS-1$
+						 statement + MSG_ARG_SEPARATOR + connection + MSG_ARG_SEPARATOR + 
+						 dataSetType + MSG_LINE_SEPARATOR; 
+		logMethodExitWithReturn( context, this );
+	}
+	
+	private IAdvancedQuery getAdvancedQuery()
+	{
+		return (IAdvancedQuery) getQuery();
+	}
+	
+	//------------------------------------------------------------------
+	//	IAdvancedQuery public interface methods
+	//------------------------------------------------------------------
+	
+	public boolean execute() throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.execute()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{	
+			setContextClassloader();
+
+			doExecute();
+			logMethodExitWithReturn( context, isExecuted() );
+			return isExecuted();
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetFalse( uoException,
+												   "IAdvancedQuery.execute()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnFalse( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnFalse( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	private boolean doExecute() throws OdaException
+	{
+		// possibly re-executing, so need to reset the execute states
+		// from a previous execute.
+		resetExecuteStates();
+			
+		if( ! isPreparedSuccessfully() )
+			throw newOdaException( Messages.helper_cannotExecuteBeforePrepare );
+
+		boolean supportsMultipleResultSets =
+			getDSMetaData().checkSupportForMultipleResultSets();
+		boolean supportsNamedResultSets =
+			getDSMetaData().checkSupportForNamedResultSets();
+		
+		boolean isExecuted = false;		
+		if( supportsMultipleResultSets || supportsNamedResultSets )
+		{
+	        setIsExecuting( true );
+		    isExecuted = getAdvancedQuery().execute();
+		}
+		else
+		{
+	        setIsExecuting( true );
+			m_resultSet = getQuery().executeQuery();
+			
+			// set both of these to be true as long as the executeQuery
+			// didn't throw an exception
+			m_calledExecuteQueryForExecute = true;
+			isExecuted = true;
+		}
+        setIsExecuting( false );
+		setIsExecuted( isExecuted );
+		
+		return isExecuted;
+	}
+	
+	private boolean wasExecuteQueryCalledForExec()
+	{
+		return m_calledExecuteQueryForExecute;
+	}
+
+	protected void resetExecuteStates() 
+	{
+		super.resetExecuteStates();
+		m_calledExecuteQueryForExecute = false;
+		m_resultSet = null;
+	}
+
+	public IResultSet getResultSet() throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getResultSet()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			OdaResultSet ret = null;
+			if( m_calledExecuteQueryForExecute )	// executeQuery was called
+			{
+				ret = ( m_resultSet == null ) ? null : newResultSetHelper( m_resultSet );
+			
+				// so subsequent calls won't return any result sets
+				m_resultSet = null;
+			}
+			else
+			{	
+				IResultSet resultSet = getAdvancedQuery().getResultSet();
+				
+				ret = ( resultSet == null ) ? null : newResultSetHelper( resultSet );
+			}
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IAdvancedQuery.getResultSet()" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public boolean getMoreResults() throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getMoreResults()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			// if executeQuery was call within execute, then this should
+			// return false
+			boolean ret = ( m_calledExecuteQueryForExecute ) ? false :
+			    			getAdvancedQuery().getMoreResults();
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetFalse( uoException,
+												   "IAdvancedQuery.getMoreResults()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnFalse( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnFalse( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public IResultSetMetaData getMetaDataOf( String resultSetName ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getMetaDataOf( " +  //$NON-NLS-1$
+						 resultSetName + MSG_LINE_SEPARATOR; 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			IResultSetMetaData resultSetMetaData = 
+				getAdvancedQuery().getMetaDataOf( resultSetName );
+				
+			OdaResultSetMetaData ret =
+				( resultSetMetaData == null ) ? null : 
+				new OdaResultSetMetaData( resultSetMetaData, getOdaConnection(),
+				                          switchContextClassloader(),
+										  getDriverClassLoader() );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, 
+								 "IAdvancedQuery.getMetaDataOf( String resultSetName )" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public String[] getResultSetNames() throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getResultSetNames()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			String[] ret = getAdvancedQuery().getResultSetNames();
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IAdvancedQuery.getResultSetNames()" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public IResultSet getResultSet( String resultSetName ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getResultSet( " + //$NON-NLS-1$
+						 resultSetName + MSG_LINE_SEPARATOR; 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			if( wasExecuteQueryCalledForExec() )
+				throw newOdaException( Messages.helper_cannotGetNamedResultsAfterExecuteQuery );
+			
+			IResultSet resultSet = getAdvancedQuery().getResultSet( resultSetName );
+			
+			OdaResultSet ret = null;
+			
+			if( resultSet == null )
+				ret = null;
+			else
+				ret = newResultSetHelper( resultSet );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IAdvancedQuery.getResultSet( String resultSetName )" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public IParameterRowSet setNewRow( String parameterName ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.setNewRow( " + parameterName + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfSetParamBeforePrepare();
+			
+			IParameterRowSet rowSet = getAdvancedQuery().setNewRow( parameterName );
+			OdaRowSet ret = createFactoryRow( rowSet );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IAdvancedQuery.setNewRow( String parameterName )" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+	
+	public IParameterRowSet setNewRow( int parameterId ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.setNewRow( " + parameterId + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfSetParamBeforePrepare();
+			
+			IParameterRowSet rowSet = getAdvancedQuery().setNewRow( parameterId );
+			OdaRowSet ret = createFactoryRow( rowSet );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IAdvancedQuery.setNewRow( int parameterId )" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public IParameterRowSet setNewRowSet( String parameterName ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.setNewRowSet( " + parameterName + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfSetParamBeforePrepare();
+			
+			IParameterRowSet rowSet = getAdvancedQuery().setNewRowSet( parameterName );
+			
+			OdaRowSet ret =
+				( rowSet == null ) ? null : 
+				new OdaRowSet( rowSet, getOdaConnection(),
+				               switchContextClassloader(),
+							   getDriverClassLoader() );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IAdvancedQuery.setNewRowSet( String parameterName )" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+	
+	public IParameterRowSet setNewRowSet( int parameterId ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.setNewRowSet( " + parameterId + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfSetParamBeforePrepare();
+			
+			IParameterRowSet rowSet = getAdvancedQuery().setNewRowSet( parameterId );
+			
+			OdaRowSet ret = 
+				( rowSet == null ) ? null :
+				new OdaRowSet( rowSet, getOdaConnection(),
+				               switchContextClassloader(),
+							   getDriverClassLoader() );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IAdvancedQuery.setNewRowSet( int parameterId )" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public int getInt( String parameterName ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getInt( " + parameterName + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfNotExecuted();
+			
+			int ret = 0;
+			if( getDSMetaData().checkSupportForNamedParameters() )
+				ret = getAdvancedQuery().getInt( parameterName );
+			else
+			{	
+				int index = getAdvancedQuery().findOutParameter( parameterName );
+				ret = getAdvancedQuery().getInt( index );
+			}
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetZero( uoException,
+												  "IAdvancedQuery.getInt( String parameterName )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnZero( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnZero( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public int getInt( int parameterId ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getInt( " + parameterId + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfNotExecuted();
+			
+			int ret = getAdvancedQuery().getInt( parameterId );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetZero( uoException,
+												  "IAdvancedQuery.getInt( int parameterId )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnZero( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnZero( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public double getDouble( String parameterName ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getDouble( " + parameterName + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfNotExecuted();
+			
+			double ret = 0;
+			if( getDSMetaData().checkSupportForNamedParameters() )
+				ret = getAdvancedQuery().getDouble( parameterName );
+			else
+			{	
+				int index = getAdvancedQuery().findOutParameter( parameterName );
+				ret = getAdvancedQuery().getDouble( index );
+			}
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetZero( uoException,
+												  "IAdvancedQuery.getDouble( String parameterName )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnZero( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnZero( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public double getDouble( int parameterId ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getDouble( " + parameterId + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfNotExecuted();
+			
+			double ret = getAdvancedQuery().getDouble( parameterId );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetZero( uoException,
+												  "IAdvancedQuery.getDouble( int parameterId )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnZero( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnZero( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public BigDecimal getBigDecimal( String parameterName ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getBigDecimal( " + parameterName + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfNotExecuted();
+			
+			BigDecimal ret = null;
+			if( getDSMetaData().checkSupportForNamedParameters() )
+				ret = getAdvancedQuery().getBigDecimal( parameterName );
+			else
+			{
+				int index = getAdvancedQuery().findOutParameter( parameterName );
+				ret = getAdvancedQuery().getBigDecimal( index );
+			}
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, 
+								 "IAdvancedQuery.getBigDecimal( String parameterName )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+		
+		// we'll never get here
+		return null;
+	}
+	
+	public BigDecimal getBigDecimal( int parameterId ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getBigDecimal( " + parameterId + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfNotExecuted();
+			
+			BigDecimal ret = getAdvancedQuery().getBigDecimal( parameterId );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, 
+								 "IAdvancedQuery.getBigDecimal( int parameterId )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+		
+		// we'll never get here
+		return null;
+	}
+
+	public String getString( String parameterName ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getString( " + parameterName + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfNotExecuted();
+			
+			String ret = null;
+			if( getDSMetaData().checkSupportForNamedParameters() )
+				ret = getAdvancedQuery().getString( parameterName );
+			else
+			{	
+				int index = getAdvancedQuery().findOutParameter( parameterName );
+				ret = getAdvancedQuery().getString( index );
+			}
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetEmptyString( uoException,
+														 "IAdvancedQuery.getString( String parameterName )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnEmptyString( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnEmptyString( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public String getString( int parameterId ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getString( " + parameterId + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfNotExecuted();
+			
+			String ret = getAdvancedQuery().getString( parameterId );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetEmptyString( uoException,
+														 "IAdvancedQuery.getString( int parameterId )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnEmptyString( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnEmptyString( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public Date getDate( String parameterName ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getDate( " + parameterName + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfNotExecuted();
+			
+			Date ret = null;
+			if( getDSMetaData().checkSupportForNamedParameters() )
+				ret = getAdvancedQuery().getDate( parameterName );
+			else
+			{	
+				int index = getAdvancedQuery().findOutParameter( parameterName );
+				ret = getAdvancedQuery().getDate( index );
+			}
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IAdvancedQuery.getDate( String parameterName )" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public Date getDate( int parameterId ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getDate( " + parameterId + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfNotExecuted();
+			
+			Date ret = getAdvancedQuery().getDate( parameterId );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IAdvancedQuery.getDate( int parameterId )" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public Time getTime( String parameterName ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getTime( " + parameterName + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfNotExecuted();
+			
+			Time ret = null;
+			if( getDSMetaData().checkSupportForNamedParameters() )
+				ret = getAdvancedQuery().getTime( parameterName );
+			else
+			{	
+				int index = getAdvancedQuery().findOutParameter( parameterName );
+				ret = getAdvancedQuery().getTime( index );
+			}
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IAdvancedQuery.getTime( String parameterName )" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public Time getTime( int parameterId ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getTime( " + parameterId + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfNotExecuted();
+			
+			Time ret = getAdvancedQuery().getTime( parameterId );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IAdvancedQuery.getTime( int parameterId )" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public Timestamp getTimestamp( String parameterName ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getTimestamp( " + parameterName + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfNotExecuted();
+			
+			Timestamp ret = null;
+			if( getDSMetaData().checkSupportForNamedParameters() )
+				ret = getAdvancedQuery().getTimestamp( parameterName );
+			else
+			{
+				int index = getAdvancedQuery().findOutParameter( parameterName );
+				ret = getAdvancedQuery().getTimestamp( index );
+			}
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IAdvancedQuery.getTimestamp( String parameterName )" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public Timestamp getTimestamp( int parameterId ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getTimestamp( " + parameterId + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfNotExecuted();
+			
+			Timestamp ret = getAdvancedQuery().getTimestamp( parameterId );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IAdvancedQuery.getTimestamp( int parameterId )" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getBlob(java.lang.String)
+	 */
+	public IBlob getBlob( String parameterName ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getBlob( " + parameterName + MSG_LINE_SEPARATOR; //$NON-NLS-1$ 
+		final String unsupportedOpContext = "IAdvancedQuery.getBlob( String parameterName )"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+		    setContextClassloader();
+		    throwIfNotExecuted();
+		    
+		    IBlob driverBlob = null;
+		    if( getDSMetaData().checkSupportForNamedParameters() )
+		        driverBlob = getAdvancedQuery().getBlob( parameterName );
+		    else
+		    {	
+		        int index = getAdvancedQuery().findOutParameter( parameterName );
+		        driverBlob = getAdvancedQuery().getBlob( index );
+		    }
+		    
+		    // instantiate helper's wrapper object
+		    IBlob ret = createBlobWrapper( driverBlob );
+ 
+		    logMethodExitWithReturn( context, ret );
+		    return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, unsupportedOpContext );
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+		    resetContextClassloader();
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getBlob(int)
+	 */
+	public IBlob getBlob( int parameterId ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getBlob( " + parameterId + MSG_LINE_SEPARATOR; //$NON-NLS-1$ 
+		final String unsupportedOpContext = "IAdvancedQuery.getBlob( int parameterId )"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+		    setContextClassloader();
+		    throwIfNotExecuted();
+		    
+		    IBlob driverBlob = getAdvancedQuery().getBlob( parameterId );
+		    
+		    // instantiate helper's wrapper object
+		    IBlob ret = createBlobWrapper( driverBlob );	
+ 
+		    logMethodExitWithReturn( context, ret );
+		    return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, unsupportedOpContext );
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+		    resetContextClassloader();
+		}	    
+	}
+
+    /** Instantiate helper's wrapper object
+     */
+    private IBlob createBlobWrapper( IBlob driverBlob )
+    {
+        return ( driverBlob == null ) ? null : 
+            new OdaBlob( driverBlob, getOdaConnection(), 
+                                switchContextClassloader(), 
+                                getDriverClassLoader() );
+    }
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getClob(java.lang.String)
+	 */
+	public IClob getClob( String parameterName ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getClob( " + parameterName + MSG_LINE_SEPARATOR; //$NON-NLS-1$ 
+		final String unsupportedOpContext = "IAdvancedQuery.getClob( String parameterName )"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+		    setContextClassloader();
+		    throwIfNotExecuted();
+		    
+		    IClob driverClob = null;
+		    if( getDSMetaData().checkSupportForNamedParameters() )
+		        driverClob = getAdvancedQuery().getClob( parameterName );
+		    else
+		    {	
+		        int index = getAdvancedQuery().findOutParameter( parameterName );
+		        driverClob = getAdvancedQuery().getClob( index );
+		    }
+		    
+		    IClob ret = createClobWrapper( driverClob );
+ 
+		    logMethodExitWithReturn( context, ret );
+		    return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, unsupportedOpContext );
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+		    resetContextClassloader();
+		}	    
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getClob(int)
+	 */
+	public IClob getClob( int parameterId ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getClob( " + parameterId + MSG_LINE_SEPARATOR; //$NON-NLS-1$ 
+		final String unsupportedOpContext = "IAdvancedQuery.getClob( int parameterId )"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+		    setContextClassloader();
+		    throwIfNotExecuted();
+		    
+		    IClob driverClob = getAdvancedQuery().getClob( parameterId );
+		    
+		    // instantiate helper's wrapper object
+		    IClob ret = createClobWrapper( driverClob );	
+ 
+		    logMethodExitWithReturn( context, ret );
+		    return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, unsupportedOpContext );
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+		    resetContextClassloader();
+		}	    
+	}
+    
+    /** Instantiate helper's wrapper object
+     */
+    private IClob createClobWrapper( IClob driverClob )
+    {
+        return ( driverClob == null ) ? null : 
+            new OdaClob( driverClob, getOdaConnection(), 
+                                switchContextClassloader(), 
+                                getDriverClassLoader() );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getBoolean(java.lang.String)
+     */
+    public boolean getBoolean( String parameterName ) throws OdaException
+    {
+        final String context = "OdaAdvancedQuery.getBoolean( " + parameterName + MSG_LINE_SEPARATOR; //$NON-NLS-1$ 
+        final String unsupportedOpContext = "IAdvancedQuery.getBoolean( String )"; //$NON-NLS-1$
+        logMethodCalled( context );
+        
+        try
+        {
+            setContextClassloader();
+            throwIfNotExecuted();
+            
+            boolean ret = false;
+            if( getDSMetaData().checkSupportForNamedParameters() )
+                ret = getAdvancedQuery().getBoolean( parameterName );
+            else
+            {   
+                int index = getAdvancedQuery().findOutParameter( parameterName );
+                ret = getAdvancedQuery().getBoolean( index );
+            }
+            
+            logMethodExitWithReturn( context, ret );
+            return ret;
+        }
+        catch( AbstractMethodError err )
+        {
+            // this occurs because the underlying driver has not upgraded
+            // to implement this ODA 3.1 method
+            String msg = formatMethodNotImplementedMsg( unsupportedOpContext );
+            log( context, msg );
+            
+            handleUnsupportedOp( new UnsupportedOperationException( msg ), msg );
+        }
+        catch( UnsupportedOperationException uoException )
+        {
+            handleUnsupportedOp( uoException, unsupportedOpContext );
+        }
+        catch( RuntimeException rtException )
+        {
+            handleError( rtException );
+        }
+        catch( OdaException odaException )
+        {
+            handleError( odaException );
+        }
+        finally
+        {
+            resetContextClassloader();
+        }
+        return false;
+    }
+
+	/* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getBoolean(int)
+     */
+    public boolean getBoolean( int parameterId ) throws OdaException
+    {
+        final String context = "OdaAdvancedQuery.getBoolean( " + parameterId + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+        final String unsupportedOpContext = "IAdvancedQuery.getBoolean( int )"; //$NON-NLS-1$
+        logMethodCalled( context );
+        
+        try
+        {
+            setContextClassloader();
+            throwIfNotExecuted();
+            
+            boolean ret = getAdvancedQuery().getBoolean( parameterId );
+            
+            logMethodExitWithReturn( context, ret );
+            return ret;
+        }
+        catch( AbstractMethodError err )
+        {
+            // this occurs because the underlying driver has not upgraded
+            // to implement this ODA 3.1 method
+            String msg = formatMethodNotImplementedMsg( unsupportedOpContext );
+            log( context, msg );
+            
+            handleUnsupportedOp( new UnsupportedOperationException( msg ), msg );
+        }
+        catch( UnsupportedOperationException uoException )
+        {
+            handleUnsupportedOp( uoException, unsupportedOpContext );
+        }
+        catch( RuntimeException rtException )
+        {
+            handleError( rtException );
+        }
+        catch( OdaException odaException )
+        {
+            handleError( odaException );
+        }
+        finally
+        {
+            resetContextClassloader();
+        }        
+        return false;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getObject(java.lang.String)
+     */
+    public Object getObject( String parameterName ) throws OdaException
+    {
+        final String context = "OdaAdvancedQuery.getObject( " + parameterName + MSG_LINE_SEPARATOR; //$NON-NLS-1$ 
+        final String unsupportedOpContext = "IAdvancedQuery.getObject( String )"; //$NON-NLS-1$
+        logMethodCalled( context );
+        
+        try
+        {
+            setContextClassloader();
+            throwIfNotExecuted();
+            
+            Object ret = null;
+            if( getDSMetaData().checkSupportForNamedParameters() )
+                ret = getAdvancedQuery().getObject( parameterName );
+            else
+            {   
+                int index = getAdvancedQuery().findOutParameter( parameterName );
+                ret = getAdvancedQuery().getObject( index );
+            }
+            
+            logMethodExitWithReturn( context, ret );
+            return ret;
+        }
+        catch( AbstractMethodError err )
+        {
+            // this occurs because the underlying driver has not upgraded
+            // to implement this ODA 3.2 method
+            String msg = formatMethodNotImplementedMsg( unsupportedOpContext );
+            log( context, msg );
+            
+            handleUnsupportedOp( new UnsupportedOperationException( msg ), msg );
+        }
+        catch( UnsupportedOperationException uoException )
+        {
+            handleUnsupportedOp( uoException, unsupportedOpContext );
+        }
+        catch( RuntimeException rtException )
+        {
+            handleError( rtException );
+        }
+        catch( OdaException odaException )
+        {
+            handleError( odaException );
+        }
+        finally
+        {
+            resetContextClassloader();
+        }
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getObject(int)
+     */
+    public Object getObject( int parameterId ) throws OdaException
+    {
+        final String context = "OdaAdvancedQuery.getObject( " + parameterId + MSG_LINE_SEPARATOR; //$NON-NLS-1$ 
+        final String unsupportedOpContext = "IAdvancedQuery.getObject( int )"; //$NON-NLS-1$
+        logMethodCalled( context );
+        
+        try
+        {
+            setContextClassloader();
+            throwIfNotExecuted();
+            
+            Object ret = getAdvancedQuery().getObject( parameterId );
+            
+            logMethodExitWithReturn( context, ret );
+            return ret;
+        }
+        catch( AbstractMethodError err )
+        {
+            // this occurs because the underlying driver has not upgraded
+            // to implement this ODA 3.2 method
+            String msg = formatMethodNotImplementedMsg( unsupportedOpContext );
+            log( context, msg );
+            
+            handleUnsupportedOp( new UnsupportedOperationException( msg ), msg );
+        }
+        catch( UnsupportedOperationException uoException )
+        {
+            handleUnsupportedOp( uoException, unsupportedOpContext );
+        }
+        catch( RuntimeException rtException )
+        {
+            handleError( rtException );
+        }
+        catch( OdaException odaException )
+        {
+            handleError( odaException );
+        }
+        finally
+        {
+            resetContextClassloader();
+        }        
+        return null;
+    }
+
+    /*
+	 * (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getRow(java.lang.String)
+	 */
+	public IParameterRowSet getRow( String parameterName ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getRow( " + parameterName + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfNotExecuted();
+			
+			OdaRowSet ret = null;
+			
+			if( getDSMetaData().checkSupportForNamedParameters() )
+			{
+			    IParameterRowSet rowSet = getAdvancedQuery().getRow( parameterName );
+				ret = createFactoryRow( rowSet );
+			}
+			else
+			{	
+				int index = getAdvancedQuery().findOutParameter( parameterName );
+				ret = doGetRow( index );
+			}
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IAdvancedQuery.getRow( String parameterName )" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public IParameterRowSet getRow( int parameterId ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getRow( " + parameterId + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfNotExecuted();
+			
+			OdaRowSet ret = doGetRow( parameterId );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IAdvancedQuery.getRow( int parameterId )" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+	
+	private OdaRowSet doGetRow( int parameterId ) throws OdaException
+	{
+	    IParameterRowSet rowSet = getAdvancedQuery().getRow( parameterId );
+		return createFactoryRow( rowSet );
+	}
+	
+	/*
+	 * This method creates a ODA consumer manager wrapper for the underlying 
+	 * structure, and we'll move the rowset cursor to the only row 
+	 * in the structure for the caller.
+	 */
+	private OdaRowSet createFactoryRow( IParameterRowSet driverRow ) throws OdaException
+	{
+		OdaRowSet retSet = ( driverRow == null ) ? null :
+							 new OdaRowSet( driverRow, getOdaConnection(),
+							                switchContextClassloader(),
+											getDriverClassLoader() );
+		
+		// make sure that we have a structure and we could move 
+		// the cursor to the only row in the structure				 
+		return ( retSet != null && driverRow.absolute( 1 ) ) ?
+			   retSet : null;
+	}
+
+	public int findOutParameter( String parameterName ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.findOutParameter( " + parameterName + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			if( ! isPreparedSuccessfully() )	
+				throw newOdaException( Messages.helper_cannotGetParamMdBeforePrepare );
+			
+			int ret = getAdvancedQuery().findOutParameter( parameterName );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetZero( uoException,
+												  "IAdvancedQuery.findOutParameter( String parameterName )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnZero( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnZero( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public boolean wasNull() throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.wasNull()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			if( ! isExecuted() )
+			{
+				logMethodExit( context );
+				return true;
+			}
+			
+			boolean ret = getAdvancedQuery().wasNull();
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetFalse( uoException,
+												   "IAdvancedQuery.wasNull()" ); //$NON-NLS-1$
+		}		
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnFalse( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnFalse( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void setSortSpec( String resultSetName, SortSpec sortBy ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.setSortSpec( " + resultSetName + MSG_ARG_SEPARATOR + //$NON-NLS-1$ 
+						 sortBy + MSG_LINE_SEPARATOR; 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			if( ! isPreparedSuccessfully() )
+				throw newOdaException( 
+						Messages.helper_cannotSetSortSpecBeforePrepare );
+			
+			getAdvancedQuery().setSortSpec( resultSetName, sortBy );
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, "IAdvancedQuery.setSortSpec( String resultSetName, " + //$NON-NLS-1$
+											  "SortSpec sortBy )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public SortSpec getSortSpec( String resultSetName ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getSortSpec( " + resultSetName + MSG_LINE_SEPARATOR; //$NON-NLS-1$ 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			SortSpec sortSpec = getAdvancedQuery().getSortSpec( resultSetName );
+			
+			logMethodExitWithReturn( context, sortSpec );
+			return sortSpec;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, "IAdvancedQuery.getSortSpec( String " + //$NON-NLS-1$
+											  "resultSetName )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+		
+		// never gets here
+		return null;
+	}
+
+	//---------------------------------------------------------------
+	// Utility methods to encapsulate data type conversion.
+	
+	public String getBigDecimalAsString( String parameterName ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getBigDecimalAsString( " + parameterName + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		BigDecimal decimal = getBigDecimal( parameterName );
+		String ret = ( decimal == null ) ? null : decimal.toString();
+		
+		logMethodExitWithReturn( context, ret );
+		return ret;
+	}
+	
+	public String getBigDecimalAsString( int parameterId ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getBigDecimalAsString( " + parameterId + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		BigDecimal decimal = getBigDecimal( parameterId );
+		String ret = ( decimal == null ) ? null : decimal.toString();
+		
+		logMethodExitWithReturn( context, ret );
+		return ret;
+	}
+
+	public String getDateAsString( String parameterName ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getDateAsString( " + parameterName +  MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		Date date = getDate( parameterName );
+		String ret = ( date == null ) ? null : date.toString();
+		
+		logMethodExitWithReturn( context, ret );
+		return ret;
+	}
+	
+	public String getDateAsString( int parameterId ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getDateAsString( " + parameterId + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		Date date = getDate( parameterId );
+		String ret = ( date == null ) ? null : date.toString();
+		
+		logMethodExitWithReturn( context, ret );
+		return ret;
+	}
+	
+	public String getTimeAsString( String parameterName ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getTimeAsString( " + parameterName + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		Time time = getTime( parameterName );
+		String ret = ( time == null ) ? null : time.toString(); 
+		
+		logMethodExitWithReturn( context, ret );
+		return ret;
+	}
+	
+	public String getTimeAsString( int parameterId ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getTimeAsString( " + parameterId + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		Time time = getTime( parameterId );
+		String ret = ( time == null ) ? null : time.toString();
+		
+		logMethodExitWithReturn( context, ret );
+		return ret;
+	}
+	
+	public String getTimestampAsString( String parameterName ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getTimestampAsString( " + parameterName + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		Timestamp timestamp = getTimestamp( parameterName );
+		String ret = ( timestamp == null ) ? null : timestamp.toString();
+		
+		logMethodExitWithReturn( context, ret );
+		return ret;
+	}
+	
+	public String getTimestampAsString( int parameterId ) throws OdaException
+	{
+		final String context = "OdaAdvancedQuery.getTimestampAsString( " + parameterId + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		Timestamp timestamp = getTimestamp( parameterId );
+		String ret = ( timestamp == null ) ? null : timestamp.toString();
+		
+		logMethodExitWithReturn( context, ret );
+		return ret;
+	}
+    
+    public String getClobAsString( String columnName ) throws OdaException
+    {
+        final String context = "OdaAdvancedQuery.getClobAsString( " + columnName + MSG_LINE_SEPARATOR; //$NON-NLS-1$ 
+        logMethodCalled( context );
+        
+        String ret = getClobAsStringImpl( getClob( columnName ), context );
+
+        logMethodExitWithReturn( context, ret );
+        return ret;
+    }
+    
+    public String getClobAsString( int index ) throws OdaException
+    {
+        final String context = "OdaAdvancedQuery.getClobAsString( " + index + MSG_LINE_SEPARATOR; //$NON-NLS-1$ 
+        logMethodCalled( context );
+        
+        String ret = getClobAsStringImpl( getClob( index ), context );
+        
+        logMethodExitWithReturn( context, ret );
+        return ret;
+    }
+	
+	public String getInterfaceName()
+	{
+		return IAdvancedQuery.class.getName();
+	}
+	
+	private void throwIfNotExecuted() throws OdaException
+	{
+	    if( ! isExecuted() )
+	        throw newOdaException( Messages.helper_cannotGetParamBeforeExecute );
+	}
+
+    private void throwIfSetParamBeforePrepare() throws OdaException
+    {
+        if( ! isPreparedSuccessfully() )
+            throw newOdaException( Messages.helper_cannotSetParamBeforePrepare );
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaBlob.java b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaBlob.java
new file mode 100644
index 0000000..096fac5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaBlob.java
@@ -0,0 +1,229 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.helper;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.eclipse.datatools.connectivity.oda.IBlob;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+/**
+ * OdaBlob is the Oda wrapper for Blobs.
+ */
+public class OdaBlob extends OdaDriverObject implements IBlob
+{
+    private static final int DEFAULT_BUFFER_SIZE = 2048;
+    private static final String COMMA_SEPARATOR = ", "; //$NON-NLS-1$
+
+    protected OdaBlob( IBlob blob, OdaConnection connection, 
+            boolean switchContextClassloader, ClassLoader driverClassLoader )
+    {
+        super( blob, connection, switchContextClassloader, driverClassLoader );
+        
+        final String context = "OdaBlob( Blob , " + connection + " )\t"; //$NON-NLS-1$ //$NON-NLS-2$
+        logMethodCalled( context );
+    }
+
+    private IBlob getDriverBlob()
+    {
+        return (IBlob) getObject();
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IBlob#getBinaryStream()
+     */
+    public InputStream getBinaryStream() throws OdaException
+    {
+        final String context = "OdaBlob.getBinaryStream()\t"; //$NON-NLS-1$
+		final String unsupportedOpContext = "IBlob.getBinaryStream()"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			InputStream ret = getDriverBlob().getBinaryStream();
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, unsupportedOpContext );
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IBlob#getBytes(long, int)
+     */
+    public byte[] getBytes( long position, int length ) throws OdaException
+    {
+        final String context = "OdaBlob.getBytes( " + //$NON-NLS-1$
+                                position + COMMA_SEPARATOR + length + " )\t"; //$NON-NLS-1$
+		final String unsupportedOpContext = "IBlob.getBytes()"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		byte[] ret = null;
+		try
+		{
+			setContextClassloader();
+			
+			ret = getDriverBlob().getBytes( position, length );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+            /* underlying driver does not support short-cut method;
+             * provides default implementation to retrieve from driver's input stream
+             */
+            ret = getBytesFromStream( position, length );
+    		if( ret == null )
+            {
+                handleUnsupportedOp( uoException, unsupportedOpContext );
+                return null;
+            }
+
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IBlob#length()
+     */
+    public long length() throws OdaException
+    {
+        final String context = "OdaBlob.length()\t"; //$NON-NLS-1$
+		final String unsupportedOpContext = "IBlob.length()"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			long ret = getDriverBlob().length();
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetZero( uoException, unsupportedOpContext );
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnZero( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnZero( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+    }
+    
+    /**
+     * Provides default implementation to retrieve all or part of
+     * the BLOB data from the driver's input stream.
+     * Set/reset context class loader around accessing driver's object,
+     * and log caught exception.
+     * @param startPos  the 1-based ordinal position of the first byte 
+     *                  in the specified input stream to be extracted
+     * @param length    the number of consecutive bytes to be copied
+	 * @return			a byte array containing up to length
+	 * 					consecutive bytes from the BLOB value, 
+	 * 					starting with the byte at position;
+	 * 					or null if not able to retrieve from stream for any reason
+     */
+    private byte[] getBytesFromStream( long startPos, int length )
+    {
+        final String context = "OdaBlob.getBytesFromStream( " +  //$NON-NLS-1$
+                                startPos + COMMA_SEPARATOR + length + " )\t"; //$NON-NLS-1$
+        
+		byte[] ret = null;
+	    try
+        {
+	        setContextClassloader();
+            
+            BlobReader reader = new BlobReader( this, getReaderBufferSize() );
+            ret = reader.getBytes( startPos, length );
+        }
+        catch( RuntimeException rte )
+        {
+			handleError( rte );		// log and throw
+        }
+        catch( IOException e )
+        {
+            log( context, e.toString() );
+        }
+        catch( OdaException ex )
+        {
+            log( context, ex.toString() );
+        }
+		finally
+		{
+			resetContextClassloader();
+		}
+
+		return ret;		// could be null if exception was caught
+    }
+    
+    /**
+     * Returns the default buffer size to use for incremental read 
+     * when unable to determine the total number of bytes to read 
+     * till end of stream is reached.
+     * @return  default size of each byte array buffer
+     */
+    protected int getReaderBufferSize()
+    {
+        // sub-class may override
+        return DEFAULT_BUFFER_SIZE;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaClob.java b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaClob.java
new file mode 100644
index 0000000..b3c9ad3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaClob.java
@@ -0,0 +1,228 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.helper;
+
+import java.io.IOException;
+import java.io.Reader;
+
+import org.eclipse.datatools.connectivity.oda.IClob;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+/**
+ * OdaClob is the Oda wrapper for Clobs.
+ */
+public class OdaClob extends OdaDriverObject implements IClob
+{
+    private static final int DEFAULT_BUFFER_SIZE = 2048;
+    private static final String COMMA_SEPARATOR = ", "; //$NON-NLS-1$
+
+    protected OdaClob( IClob clob, OdaConnection connection, boolean switchContextClassloader, ClassLoader driverClassLoader )
+    {
+        super( clob, connection, switchContextClassloader, driverClassLoader );
+        
+        final String context = "OdaClob( Clob , " + connection + " )\t"; //$NON-NLS-1$ //$NON-NLS-2$
+        logMethodCalled( context );
+    }
+
+    private IClob getDriverClob()
+    {
+        return (IClob) getObject();
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IClob#getCharacterStream()
+     */
+    public Reader getCharacterStream() throws OdaException
+    {
+        final String context = "OdaClob.getCharacterStream()\t"; //$NON-NLS-1$
+		final String unsupportedOpContext = "IClob.getCharacterStream()"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			Reader ret = getDriverClob().getCharacterStream();
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, unsupportedOpContext );
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IClob#getSubString()
+     */
+	public String getSubString( long position, int length ) 
+		throws OdaException
+	{
+        final String context = "OdaClob.getSubString( " + //$NON-NLS-1$
+                                position + COMMA_SEPARATOR + length + " )\t"; //$NON-NLS-1$
+		final String unsupportedOpContext = "IClob.getSubString()"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		String ret = null;
+		try
+		{
+			setContextClassloader();
+			
+			ret = getDriverClob().getSubString( position, length );
+			
+            logMethodExitWithReturnLen( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+            /* underlying driver does not support short-cut method;
+             * provides default implementation to retrieve from driver's CLOB reader
+             */
+            ret = getSubStringFromReader( position, length );
+    		if( ret == null )
+            {
+                handleUnsupportedOp( uoException, unsupportedOpContext );
+                return null;
+            }
+
+            logMethodExitWithReturnLen( context, ret );
+			return ret;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+	
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IClob#length()
+     */
+    public long length() throws OdaException
+    {
+        final String context = "OdaClob.length()\t"; //$NON-NLS-1$
+		final String unsupportedOpContext = "IClob.length()"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			long ret = getDriverClob().length();
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetZero( uoException, unsupportedOpContext );
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnZero( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnZero( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+    }
+
+    /**
+     * Provides default implementation to retrieve all or part of
+     * the CLOB data from the driver's reader.
+     * Set/reset context class loader around accessing driver's object,
+     * and log caught exception.
+     * @param startPos  the 1-based ordinal position of the first character 
+     *                  in the specified reader to be extracted
+     * @param length    the number of consecutive characters to be copied
+	 * @return	the specified substring that begins at startPos
+	 * 			and has up to length consecutive characters;
+	 * 			or null if not able to retrieve from reader
+     */
+    private String getSubStringFromReader( long startPos, int length ) 
+	{
+        final String context = "OdaClob.getSubStringFromReader( " +  //$NON-NLS-1$
+                                startPos + COMMA_SEPARATOR + length + " )\t"; //$NON-NLS-1$
+
+		String ret = null;
+	    try
+        {
+	        setContextClassloader();
+            
+            ClobReader reader = new ClobReader( this, getReaderBufferSize() );
+            ret = reader.getSubString( startPos, length );
+        }
+        catch( RuntimeException rte )
+        {
+			handleError( rte );		// log and throw
+        }
+        catch( IOException e )
+        {
+            log( context, e.toString() );
+        }
+        catch( OdaException ex )
+        {
+            log( context, ex.toString() );
+        }
+		finally
+		{
+			resetContextClassloader();
+		}
+
+		return ret;		// could be null if IOException was caught        
+	}
+    
+    /**
+     * Returns the default buffer size to use for incremental read 
+     * when unable to determine the total number of characters to read 
+     * till end of stream is reached.
+     * @return  default size of each reader buffer
+     */
+    protected int getReaderBufferSize()
+    {
+        // sub-class may override
+        return DEFAULT_BUFFER_SIZE;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaConnection.java b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaConnection.java
new file mode 100644
index 0000000..776276b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaConnection.java
@@ -0,0 +1,829 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.helper;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Hashtable;
+import java.util.Locale;
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.oda.IAdvancedQuery;
+import org.eclipse.datatools.connectivity.oda.IConnection;
+import org.eclipse.datatools.connectivity.oda.IDataSetMetaData;
+import org.eclipse.datatools.connectivity.oda.IQuery;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.consumer.nls.Messages;
+
+import com.ibm.icu.util.ULocale;
+
+/**
+ * OdaConnection is the Oda wrapper for connections.
+ */
+public class OdaConnection extends OdaObject 
+						   implements IConnection
+{	
+    private static final String MSG_LINE_SEPARATOR = " )\t"; //$NON-NLS-1$
+
+    private int 		m_errorNumber;
+	private String 		m_errorMessage;
+
+	// We'll use a hashtable to keep track of the count for opened 
+	// connections in each provider's classloader.
+	private static Hashtable
+						sm_clsLdrOpenedConnCountMap;
+
+	private static int	sm_maxOpenConnections = 0;	// default to no limit
+	
+	// reference count of opened statements for this connection.  this will 
+	// be used for determining whether we've reached the max statements
+	private int 		m_numOfOpenedStatements;
+	
+	// cache holding onto data set type name and its associated metadata
+	private Hashtable	m_dsMetaDataCollection;
+	
+	// holds onto the default data set type metadata ( i.e. only one data set 
+	// type in odaconfig.xml )
+	private OdaDataSetMetaData
+						m_defaultDSMetaData;
+	
+	private Locale m_locale;
+	private Object m_driverAppContext;
+	private Object m_connAppContext;
+    private ConnectionPropertyHandler m_propertyHandler;
+	
+	protected OdaConnection( IConnection connection,
+	        				 boolean switchContextClassloader,
+				   			 ClassLoader driverClassLoader,
+                             ClassLoader originalClassLoader )
+	{
+		super( connection, switchContextClassloader, driverClassLoader, originalClassLoader );
+		
+		final String context = "OdaConnection.OdaConnection( " + //$NON-NLS-1$
+						 connection + ")\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+
+		clearDriverError();
+		m_numOfOpenedStatements = 0;
+		
+		logMethodExitWithReturn( context, this );
+	}
+	
+	static void setMaxConnections( int maxOpenConnections )
+	{
+	    sm_maxOpenConnections = maxOpenConnections;
+	}
+	
+	private Hashtable getDSMetaDataCollection()
+	{
+		if( m_dsMetaDataCollection == null )
+			m_dsMetaDataCollection = new Hashtable();
+		
+		return m_dsMetaDataCollection;
+	}
+	
+	private IConnection getConnection()
+	{
+		return (IConnection) getObject();
+	}
+
+	protected void handleError( OdaException exception ) throws OdaException
+	{
+		super.handleError( exception );
+		
+		int errorNumber = exception.getErrorCode();
+		String errorMessage = exception.toString();
+		setDriverError( errorNumber, errorMessage );
+		throw exception;
+	}
+
+	void setDriverError( int errorNumber, String errorMessage )
+	{
+		m_errorNumber = errorNumber;
+		m_errorMessage = errorMessage;
+	}
+	
+	public int getDriverErrorNumber()
+	{
+		return m_errorNumber;
+	}
+	
+	public String getDriverErrorMessage()
+	{
+		return m_errorMessage;
+	}
+	
+	public void clearDriverError()
+	{
+		m_errorNumber = 0;
+		m_errorMessage = ""; //$NON-NLS-1$
+	}
+
+	boolean canSupportMoreOpenedStatements() throws OdaException
+	{
+		int maxStatements = getMaxQueries();
+		return( maxStatements == 0 || 
+				m_numOfOpenedStatements < maxStatements );
+	}
+	
+	public int getMaxQueries() throws OdaException
+	{
+	    final String context = "OdaConnection.getMaxQueries()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			int ret = getConnection().getMaxQueries();
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetZero( uoException,
+												  "IConnection.getMaxQueries()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnNegOne( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnNegOne( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+	
+	void addOpenStatement( OdaQuery statement )
+	{
+		// will increment the count only if the statement was prepared
+		// successfully
+		if( statement.isPreparedSuccessfully() )
+			m_numOfOpenedStatements++;
+	}
+	
+	void removeOpenStatement( OdaQuery statement )
+	{
+		// will decrement the count only if the statement was prepared
+		// successfully
+		if( statement.isPreparedSuccessfully() )
+			m_numOfOpenedStatements--;
+	}
+	
+	Locale getLocale()
+	{
+		return m_locale;
+	}
+
+	void setDriverAppContext( Object context )
+	{
+	    m_driverAppContext = context;
+	}
+	
+	private Object getDriverAppContext()
+	{
+	    return m_driverAppContext;
+	}
+	
+	//------------------------------------------------------------------
+	//	IConnection interface methods
+	//------------------------------------------------------------------
+	
+	public void open( Properties connProperties ) throws OdaException
+	{
+		final String context = "OdaConnection.open( " + connProperties + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		final String unsupportedOpContext = "IConnection.open( Properties connProperties )"; //$NON-NLS-1$
+
+		// pass-thru driver context to the underlying connection
+		// before attempt to call open()
+		if( getAppContext() == null )     // no connection level context is set directly
+		    setAppContext( getDriverAppContext() );
+ 
+        OdaException propHandlerException = null;
+		try
+		{	
+			setContextClassloader();
+			
+			// check if this is already opened
+			if( checkIsOpen() )
+			{
+			    log( context, "The ODA connection is already open; skip call to the IConnection.open method." ); //$NON-NLS-1$
+				logMethodExit( context );
+				return;
+			}
+			
+			// check whether we've reached the maximum number of connections.
+			if( sm_maxOpenConnections != 0 && getOpenedConnCount() >= sm_maxOpenConnections )
+				throw newOdaException( Messages.helper_maxConcurrentConnectionsReached );
+
+			Properties effectiveConnProps = null;
+            try
+            {
+                effectiveConnProps = getEffectiveProperties( connProperties );
+            }
+            catch( OdaException ex )
+            {
+                // preserve the exception and continue with the specified connProperties, 
+                // which might be sufficient for the underlying oda driver
+                propHandlerException = ex;
+                effectiveConnProps = connProperties;
+            }
+
+			getConnection().open( effectiveConnProps );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, unsupportedOpContext );
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+		    if( propHandlerException != null )
+		        odaException.setNextException( propHandlerException );
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+		
+		// neither the old or new open() threw an exception, therefore the 
+		// connection was successfully opened.
+		incrOpenedConnCount();
+		logMethodExit( context );
+	}
+
+	Object getAppContext()
+	{
+	    return m_connAppContext;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.oda.IConnection#setAppContext(java.lang.Object)
+	 */
+	public void setAppContext( Object context ) throws OdaException
+	{
+		final String methodName = "OdaConnection.setAppContext()\t"; //$NON-NLS-1$
+		final String contextObjInfo = ( context == null ) ? "null" : context.getClass().getName(); //$NON-NLS-1$
+		logMethodCalled( methodName );
+
+		if( m_connAppContext == context )	// already set
+		{
+		    log( methodName, "Same pass-thru application context object: " + contextObjInfo ); //$NON-NLS-1$
+			logMethodExit( methodName );
+		    return;		// nothing to do
+		}
+		
+		processConsumerAppContext( context );
+
+		try
+		{
+			setContextClassloader();
+			
+		    log( methodName, "Passing thru application context to underlying ODA connection: " + contextObjInfo ); //$NON-NLS-1$
+			getConnection().setAppContext( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			// log, and ignore exception
+			logUnsupportedOp( uoException, "IConnection.setAppContext" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+		
+		// if no exception with passing thru to the underlying connection,
+		// hold on to context for subsequent pass-thru to each of its
+		// queries before prepare
+		m_connAppContext = context;
+		
+		logMethodExit( methodName );
+	}
+
+	public void close() throws OdaException
+	{
+		final String context = "OdaConnection.close()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+            // check if underlying connection is not open
+            if( ! checkIsOpen() )
+            {
+                log( context, "The ODA connection is not open; skip call to the IConnection.close method." ); //$NON-NLS-1$
+                logMethodExit( context );
+                return;
+            }
+            
+			getConnection().close();
+			clearDriverError();
+			
+			m_numOfOpenedStatements = 0;
+
+			// do not clean up the connection and data source metadata
+			// cache since it's possible that this connection could be used
+			// again, due to connection re-use for some ODA connections.  Let the 
+			// garbage collection take care of it.
+			
+			// now that the connection is closed, it'll no longer count
+			// against the number of opened connections for the driver.
+			decrOpenedConnCount();
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IConnection.close()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	private int getOpenedConnCount()
+	{
+		// using new classloader scheme
+		Hashtable counts = getClsLdrOpenedConnMap();
+		Object value = counts.get( getConnection().getClass().getClassLoader() );
+		int i = ( value == null ) ? 0 : ( (Integer) value ).intValue();
+		return i;
+	}
+	
+	private void incrOpenedConnCount()
+	{
+		incrOrDecrOpenedConnectionCountMap( true /* increment */ );
+	}
+	
+	private void decrOpenedConnCount()
+	{
+		incrOrDecrOpenedConnectionCountMap( false /* increment */ );
+	}
+	
+	private void incrOrDecrOpenedConnectionCountMap( boolean increment )
+	{
+		Hashtable counts = getClsLdrOpenedConnMap();
+		ClassLoader driverClassLoader = getConnection().getClass().getClassLoader();
+		Object value = counts.get( driverClassLoader );
+		int i = ( value == null ) ? 0 : ( (Integer) value ).intValue();
+        if( increment )
+            ++i;
+        else    // decrement
+        {
+            if( i > 0 ) // decrement down to the floor of 0 count
+                --i;
+        }
+		Integer newValue = new Integer( i );
+		counts.put( driverClassLoader, newValue );
+	}
+	
+	/*
+	 * Lazily instantiate our hashtable.
+	 */
+	private Hashtable getClsLdrOpenedConnMap()
+	{
+		if( sm_clsLdrOpenedConnCountMap == null )
+			sm_clsLdrOpenedConnCountMap = new Hashtable();
+		
+		return sm_clsLdrOpenedConnCountMap;
+	}
+
+	public boolean isOpen() throws OdaException
+	{
+		final String context = "OdaConnection.isOpen()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			boolean ret = checkIsOpen();
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetFalse( uoException,
+												   "IConnection.isOpen()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnFalse( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnFalse( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+	
+	private boolean checkIsOpen() throws OdaException
+	{
+		return getConnection().isOpen();
+	}
+
+	public IDataSetMetaData getMetaData( String dataSetType )
+		throws OdaException
+	{
+		final String context = "OdaConnection.getMetaData( " + dataSetType + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+
+			OdaDataSetMetaData odaDSMetaData = doGetMetaData( dataSetType );
+			if( odaDSMetaData == null )
+			    throw new UnsupportedOperationException();
+			
+			logMethodExitWithReturn( context, odaDSMetaData );
+			return odaDSMetaData;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IConnection.getMetaData( String dataSetType )" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+	
+	OdaDataSetMetaData doGetMetaData( String dataSetType ) throws OdaException
+	{
+		if( dataSetType == null )
+		{
+			if( m_defaultDSMetaData != null )
+				return m_defaultDSMetaData;
+		}
+		else
+		{
+			// see if the metadata is already cached
+			if( getDSMetaDataCollection().containsKey( dataSetType ) )
+			{	
+				OdaDataSetMetaData ret = 
+					(OdaDataSetMetaData) getDSMetaDataCollection().get( dataSetType );
+				
+				return ret;
+			}
+		}
+		
+		IDataSetMetaData metadata = getConnection().getMetaData( dataSetType );
+		
+		if( metadata == null )
+			return null;
+			
+		// create new ds metadata, add it to the cache
+		OdaDataSetMetaData odaDSMetaData = new OdaDataSetMetaData( metadata, this,
+		                                                           switchContextClassloader(),
+																   getDriverClassLoader() );
+		
+		// check whether we're saving the default data set metadata or caching 
+		// it based on the data set name
+		if( dataSetType == null )
+			m_defaultDSMetaData = odaDSMetaData;
+		else
+			getDSMetaDataCollection().put( dataSetType, odaDSMetaData );
+		
+		return odaDSMetaData;
+	}
+
+	public IQuery newQuery( String dataSetType )
+		throws OdaException
+	{
+		final String context = "OdaConnection.newQuery( " + //$NON-NLS-1$
+						 dataSetType + MSG_LINE_SEPARATOR; 
+		logMethodCalled( context );
+		final String unsupportedOpContext = "IConnection.newQuery( String )"; //$NON-NLS-1$
+		
+		try
+		{
+			setContextClassloader();
+
+			// ensure that the established connection is still active 
+	        if( ! checkIsOpen() )
+	            throw newOdaException( Messages.helper_connectionIsInactive );
+			
+			if( ! canSupportMoreOpenedStatements() )
+				throw newOdaException( Messages.helper_maxConcurrentStatementsReached );
+			
+			IQuery statement = getConnection().newQuery( dataSetType );
+			
+			if( statement == null )
+			{	
+				logMethodExit( context );
+				throw new UnsupportedOperationException();
+			}
+			
+			// IAdvancedQuery will use a different wrapper than IQuery objects.
+			IQuery ret = ( statement instanceof IAdvancedQuery ) ?
+			        		 newAdvancedQueryHelper( (IAdvancedQuery) statement, dataSetType ) :
+				   			 newQueryHelper( statement, dataSetType );
+
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, unsupportedOpContext );
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+	
+	protected OdaQuery newQueryHelper( IQuery statement, String dataSetType )
+	{
+		return new OdaQuery( statement, this, dataSetType,
+	   			                 switchContextClassloader(),
+								 getDriverClassLoader() );
+	}
+	
+	protected OdaAdvancedQuery newAdvancedQueryHelper( IAdvancedQuery advancedQuery, 
+												  String dataSetType )
+	{
+		return new OdaAdvancedQuery( advancedQuery, this, dataSetType,
+   						   			 switchContextClassloader(),
+									 getDriverClassLoader() );
+	}
+
+	public void commit() throws OdaException
+	{
+	    final String context = "OdaConnection.commit()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			getConnection().commit();
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IConnection.commit()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void rollback() throws OdaException
+	{
+	    final String context = "OdaConnection.rollback()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			getConnection().rollback();
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IConnection.rollback()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+	
+	public void setLocale( String localeString ) throws Throwable
+	{	
+	    final String context = "OdaConnection.setLocale( " + //$NON-NLS-1$
+						 localeString + MSG_LINE_SEPARATOR; 
+		logMethodCalled( context );
+		
+		if( localeString == null || localeString.length( ) != 5 )
+			m_locale = Locale.getDefault( );
+		else
+		{
+			String language = localeString.substring( 0, 2 );
+			String country  = localeString.substring( 3, 5 );
+			m_locale = new Locale( language, country );
+		}
+		
+		try
+		{
+			Class[] parameterTypes = new Class[1];
+			parameterTypes[0] = m_locale.getClass();
+			Object[] arguments = new Object[1];
+			arguments[0] = m_locale;
+			findAndInvokeMethod( "setLocale", parameterTypes, arguments ); //$NON-NLS-1$
+		}
+		catch( InvocationTargetException ex )
+		{
+			Throwable cause = ex.getTargetException();
+			
+			if( cause instanceof RuntimeException )
+			{
+				handleError( (RuntimeException) cause );
+				return;
+			}
+			
+			if( cause instanceof OdaException )
+			{
+				handleError( (OdaException) cause );
+				return;
+			}
+			
+			throw cause;
+		}
+		catch( NoSuchMethodException ex )
+		{
+			// ignore, the underlying connection doesn't support this
+		}
+		catch( IllegalAccessException ex )
+		{
+			// ignore, the underlying connection doesn't support this
+		}
+		
+		logMethodExit( context );
+	}
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IConnection#setLocale(com.ibm.icu.util.ULocale)
+     */
+    public void setLocale( ULocale locale ) throws OdaException
+    {
+        final String context = "OdaConnection.setLocale( " + locale + MSG_LINE_SEPARATOR;  //$NON-NLS-1$
+        final String unsupportedOpContext = "IConnection.setLocale( ULocale )"; //$NON-NLS-1$
+        logMethodCalled( context );
+        
+        try
+        {
+            setContextClassloader();
+            
+            if( locale == null )
+                locale = ULocale.getDefault( );
+
+            getConnection().setLocale( locale );
+            logMethodExit( context );
+        }
+        catch( AbstractMethodError err )
+        {
+            // this occurs because the underlying driver has not upgraded
+            // to implement this ODA 3.2 method
+            String msg = formatMethodNotImplementedMsg( unsupportedOpContext );
+            log( context, msg );
+            
+            handleUnsupportedOp( new UnsupportedOperationException( msg ), msg );
+        }
+        catch( UnsupportedOperationException uoException )
+        {
+            handleUnsupportedOp( uoException, unsupportedOpContext );
+        }
+        catch( RuntimeException rtException )
+        {
+            handleError( rtException );
+        }
+        catch( OdaException odaException )
+        {
+            handleError( odaException );
+        }
+        finally
+        {
+            resetContextClassloader();
+        }
+    }
+	
+	/**
+	 * Processes the consumer application entries from the
+	 * specified application context.
+	 * @param context	application context set by the consumer application
+	 */
+	private void processConsumerAppContext( Object context )
+	{
+	    m_propertyHandler = new ConnectionPropertyHandler( context );
+	    
+	    // try pass the connection level locale, if set in the context, 
+	    // to the underlying provider's connection via #setLocale;
+	    // this is done before passing the context object to underlying provider in case
+	    // it uses the context for setting its own locale, which can then override #setLocale
+	    try
+        {
+            if( m_propertyHandler.getAppLocale() != null )
+                setLocale( m_propertyHandler.getAppLocale() );
+        }
+        catch( UnsupportedOperationException uoException )
+        {
+            // ignore
+        }
+        catch( OdaException ex )
+        {
+            // ignore
+        }
+	}
+	
+    /**
+     * Returns the instance of property handler.
+     */
+    protected ConnectionPropertyHandler getPropertyHandler()
+    {
+        if( m_propertyHandler == null )
+            m_propertyHandler = new ConnectionPropertyHandler( null );
+        return m_propertyHandler;
+    }
+    
+    /**
+     * Uses the extension implementation of IPropertyProvider, if available, 
+     * to obtain and return the effective property names and values 
+     * for opening a connection.
+     */
+    private Properties getEffectiveProperties( Properties candidateProperties )
+        throws OdaException
+    {
+        return getPropertyHandler().getEffectiveProperties( candidateProperties );
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaConsumerPlugin.java b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaConsumerPlugin.java
new file mode 100644
index 0000000..027e9d7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaConsumerPlugin.java
@@ -0,0 +1,55 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.helper;
+
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.datatools.connectivity.oda.consumer.util.manifest.ExtensionExplorer;
+import org.osgi.framework.BundleContext;
+
+/**
+ * Bundle activator class.
+ */
+public class OdaConsumerPlugin extends Plugin
+{
+    private static OdaConsumerPlugin sm_plugin;
+
+    public OdaConsumerPlugin()
+    {
+        super();
+        sm_plugin = this;
+    }
+
+    /**
+     * Returns the shared instance of this plugin activator.
+     * @return
+     */
+    public static OdaConsumerPlugin getDefault()
+    {
+        return sm_plugin;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
+     */
+    public void stop( BundleContext context ) throws Exception
+    {
+        // release plugin's singleton instance(s)
+        ExtensionExplorer.releaseInstance();
+        
+        super.stop( context );
+        sm_plugin = null;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaDataSetMetaData.java b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaDataSetMetaData.java
new file mode 100644
index 0000000..0f459f9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaDataSetMetaData.java
@@ -0,0 +1,512 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.helper;
+
+import org.eclipse.datatools.connectivity.oda.IConnection;
+import org.eclipse.datatools.connectivity.oda.IDataSetMetaData;
+import org.eclipse.datatools.connectivity.oda.IResultSet;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+/**
+ * OdaDataSetMetaData is the Oda wrapper for data set metadata.
+ */
+public class OdaDataSetMetaData extends OdaDriverObject 
+								implements IDataSetMetaData
+{
+	protected OdaDataSetMetaData( IDataSetMetaData metadata, 
+							  	  OdaConnection connection, 
+							  	  boolean switchContextClassloader,
+								  ClassLoader driverClassLoader )
+	{
+		super( metadata, connection, switchContextClassloader,
+			   driverClassLoader );
+		
+		final String context = "OdaDataSetMetaData.OdaDataSetMetaData( " + //$NON-NLS-1$
+						 metadata + ", " + connection + " )\t"; //$NON-NLS-1$ //$NON-NLS-2$
+		logMethodExitWithReturn( context, this );
+	}
+	
+	private IDataSetMetaData getDataSetMetaData()
+	{
+		return (IDataSetMetaData) getObject();
+	}
+
+	//------------------------------------------------------------------
+	//	IDataSetMetaData public interface methods
+	//------------------------------------------------------------------
+
+	public IConnection getConnection() throws OdaException
+	{
+		try
+		{
+			setContextClassloader();
+			
+			return getOdaConnection();
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IDataSetMetaData.getConnection()" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public IResultSet getDataSourceObjects( String catalog,
+											String schema,
+											String object,
+											String version)
+											throws OdaException
+	{
+		final String context = "OdaDataSetMetaData.getDataSourceObjects( " + //$NON-NLS-1$
+						 catalog + ", " + schema + ", " + object + //$NON-NLS-1$ //$NON-NLS-2$
+						 ", " + version + ")\t"; //$NON-NLS-1$ //$NON-NLS-2$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			IResultSet resultSet = getDataSetMetaData().getDataSourceObjects( catalog, 
+																				 schema, 
+																				 object, 
+																				 version );
+			
+			OdaResultSet ret =
+				( resultSet == null ) ? null :
+				new OdaResultSet( resultSet, getOdaConnection(), 
+				                  switchContextClassloader(),
+								  getDriverClassLoader() );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IDataSetMetaData.getDataSourceObjects( String catalog, " +  //$NON-NLS-1$
+								 "String schema, String object, String version )" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public int getDataSourceMajorVersion() throws OdaException
+	{
+		try
+		{
+			setContextClassloader();
+			
+			return getDataSetMetaData().getDataSourceMajorVersion();
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetZero( uoException,
+												  "IDataSetMetaData.getDataSourceMajorVersion()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnZero( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnZero( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public int getDataSourceMinorVersion() throws OdaException
+	{
+		try
+		{
+			setContextClassloader();
+			
+			return getDataSetMetaData().getDataSourceMinorVersion();
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetZero( uoException,
+												  "IDataSetMetaData.getDataSourceMinorVersion()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnZero( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnZero( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public String getDataSourceProductName() throws OdaException
+	{
+		try
+		{
+			setContextClassloader();
+			
+			return getDataSetMetaData().getDataSourceProductName();
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetEmptyString( uoException,
+														 "IDataSetMetaData.getDataSourceProductName()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnEmptyString( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnEmptyString( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public String getDataSourceProductVersion() throws OdaException
+	{
+		try
+		{
+			setContextClassloader();
+			
+			return getDataSetMetaData().getDataSourceProductVersion();
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetEmptyString( uoException,
+														 "IDataSetMetaData.getDataSourceProductVersion()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnEmptyString( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnEmptyString( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public int getSQLStateType() throws OdaException
+	{
+		final String context = "OdaDataSetMetaData.getSQLStateType()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			int ret = getDataSetMetaData().getSQLStateType();
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetZero( uoException,
+												  "IDataSetMetaData.getSQLStateType()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnZero( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnZero( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public boolean supportsMultipleOpenResults() throws OdaException
+	{
+		final String context = "OdaDataSetMetaData.supportsMultipleOpenResults()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			boolean ret = getDataSetMetaData().supportsMultipleOpenResults();
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetFalse( uoException,
+												   "IDataSetMetaData.supportsMultipleOpenResults()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnFalse( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnFalse( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public boolean supportsMultipleResultSets() throws OdaException
+	{
+		final String context = "OdaDataSetMetaData.supportsMultipleResultSets()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			boolean ret = checkSupportForMultipleResultSets();
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetFalse( uoException,
+												   "IDataSetMetaData.supportsMultipleResultSets()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnFalse( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnFalse( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+	
+	boolean checkSupportForMultipleResultSets() throws OdaException
+	{
+		return getDataSetMetaData().supportsMultipleResultSets();
+	}
+	
+	public boolean supportsNamedResultSets() throws OdaException
+	{
+		final String context = "OdaDataSetMetaData.supportsNamedResultSets()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			boolean ret = checkSupportForNamedResultSets();
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetFalse( uoException,
+												   "IDataSetMetaData.supportsNamedResultSets()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnFalse( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnFalse( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	boolean checkSupportForNamedResultSets() throws OdaException
+	{
+		return getDataSetMetaData().supportsNamedResultSets();
+	}
+
+	public boolean supportsNamedParameters() throws OdaException
+	{
+		final String context = "OdaDataSetMetaData.supportsNamedParameters()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			boolean ret = checkSupportForNamedParameters();
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetFalse( uoException,
+												   "IDataSetMetaData.supportsNamedParameters()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnFalse( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnFalse( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	boolean checkSupportForNamedParameters() throws OdaException
+	{
+		return getDataSetMetaData().supportsNamedParameters();
+	}
+	
+	public boolean supportsInParameters() throws OdaException
+	{
+		final String context = "OdaDataSetMetaData.supportsInParameter()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			boolean ret = getDataSetMetaData().supportsInParameters();
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetFalse( uoException,
+												   "IDataSetMetaData.supportsInParameters()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnFalse( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnFalse( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public boolean supportsOutParameters() throws OdaException
+	{
+		final String context = "OdaDataSetMetaData.supportsOutParameters()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			boolean ret = getDataSetMetaData().supportsOutParameters();
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetFalse( uoException,
+												   "IDataSetMetaData.supportsOutParameters()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnFalse( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnFalse( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public int getSortMode()
+	{
+		final String context = "OdaDataSetMetaData.getSortMode()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			int sortMode = getDataSetMetaData().getSortMode();
+			
+			logMethodExitWithReturn( context, sortMode );
+			return sortMode;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IDataSetMetaData.getSortMode()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+		
+		// never gets here
+		return 0;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaDriver.java b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaDriver.java
new file mode 100644
index 0000000..fae44d4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaDriver.java
@@ -0,0 +1,699 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.helper;
+
+import java.util.HashMap;
+import java.util.Locale;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.oda.IConnection;
+import org.eclipse.datatools.connectivity.oda.IDriver;
+import org.eclipse.datatools.connectivity.oda.LogConfiguration;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.consumer.internal.impl.LogConfigHelper;
+import org.eclipse.datatools.connectivity.oda.consumer.internal.impl.LogPathHelper;
+import org.eclipse.datatools.connectivity.oda.consumer.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.util.ResourceIdentifiers;
+import org.eclipse.datatools.connectivity.oda.util.logging.LogManager;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ExtensionManifest;
+import org.eclipse.datatools.connectivity.oda.util.manifest.JavaRuntimeInterface;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ManifestExplorer;
+
+/**
+ * OdaDriver is an ODA consumer helper that wraps and
+ * manages an ODA driver instance.
+ */
+public class OdaDriver extends OdaObject
+								  implements IDriver
+{
+    public static final String ODA_BRIDGED_DRIVER = "BridgedDriverInstance"; //$NON-NLS-1$
+
+    private String m_logDirectory;
+	private Object m_appContext;
+	private Object m_initAppContext;
+	
+    /** 
+     * Instantiates an ODA consumer's driver helper 
+     * to manage the specified ODA driver.
+     * This uses the OSGi bundle to locate
+     * and load the specified ODA driver.
+     * @param odaDataSourceId    the unique id of the data source element
+     *              in an ODA data source extension,
+     *              whose driver is to be loaded and managed
+     *              by this helper
+     * @throws OdaException
+     */
+    public OdaDriver( String odaDataSourceId )
+        throws OdaException
+    {
+        ExtensionManifest odaDataSourceManifest = null;
+        try
+        {
+            odaDataSourceManifest = 
+                ManifestExplorer.getInstance()
+                    .getExtensionManifest( odaDataSourceId );
+        }
+        catch( IllegalArgumentException ex )
+        {
+            OdaException odaEx = new OdaException( ex );
+            handleError( odaEx );
+        }
+
+        init( odaDataSourceManifest );
+    }
+    
+    /**
+     * Instantiates an ODA consumer's driver helper 
+     * to manage the specified ODA driver.
+     * This uses the OSGi bundle to locate
+     * and load the specified ODA driver.
+     * @param driverConfig  the driver configuration 
+     *              info of an ODA data source extension,
+     *              whose driver is to be loaded and managed
+     *              by this helper
+     * @throws OdaException
+     */
+	public OdaDriver( ExtensionManifest driverConfig )
+		throws OdaException
+    {
+        init( driverConfig );
+    }
+
+	/**
+     * <strong>EXPERIMENTAL</strong>
+     * Instantiates an ODA consumer's driver helper to manage the specified ODA driver,
+     * in either OSGi or non-OSGi platform.  
+     * The OSGi bundle, if available, is used to locate and load the specified ODA driver. 
+     * If not running on OSGi platform, the bundle is loaded from the class path,
+     * and the specified application context should contain a {@link ResourceIdentifiers} 
+     * to help resolve the bundle location path.
+	 * @param driverConfig the driver configuration info of an ODA data source extension,
+     *              whose driver is to be loaded and managed by this helper
+	 * @param appContext   an application context Map, normally set by an ODA consumer application
+	 * @throws OdaException
+     * @since 3.2.4 (DTP 1.9)
+	 */
+	public OdaDriver( ExtensionManifest driverConfig, Object appContext )
+       throws OdaException
+    {
+        // set the appContext, which if exists is used to initialize the bundle location path
+	    m_initAppContext = appContext;
+	    init( driverConfig );
+	    m_initAppContext = null;   // reset after #init is done
+    }
+
+    /**
+     * Instantiates an ODA consumer's driver helper 
+     * to manage the specified ODA driver.
+     * This does *not* use the OSGi bundle to locate
+     * and load the specified driver class.
+     * @param driverClassName   full path name of the ODA driver class
+     *                  to load and manage by this helper
+     * @param locale    deprecated
+     * @param driverClassloader   the classloader for use to
+            instantiate the underlying driver class;
+            may be null, in which case, this class' own loader
+            is used instead
+     * @param switchContextClassloader
+     * @throws OdaException
+     */
+    public OdaDriver( String driverClassName, Locale locale,
+                                 ClassLoader driverClassloader, 
+                                 boolean switchContextClassloader ) 
+        throws OdaException
+    {
+        super( switchContextClassloader, driverClassloader );
+        
+        final String context = "OdaDriver.OdaDriver( " + //$NON-NLS-1$
+                         driverClassName + ", " + locale + ", " +  //$NON-NLS-1$ //$NON-NLS-2$
+                         driverClassloader + " )\t"; //$NON-NLS-1$
+        logMethodCalled( context );
+        
+        try
+        {   
+            if( switchContextClassloader )
+                setContextClassloader();
+            
+            // If the classloader argument is null, then use the classloader that
+            // loaded this class to find the driver's class and 
+            // construct an instance of the driver class. (old scheme)
+            // If the classloader argument isn't null, then we'll use the classloader to 
+            // construct an instance of the underlying driver class. (new scheme)
+            Class driverClass = ( driverClassloader == null ) ?
+                    Class.forName( driverClassName ) :
+                    driverClassloader.loadClass( driverClassName );
+                    
+            // instantiate the driver; no driver bridge support
+            IDriver newDriver = newDriverInstance( driverClass, null, false );
+
+            // store the driver instance within this wrapper
+            setObject( newDriver );
+            
+            logMethodExitWithReturn( context, this );
+        }
+        catch( Exception ex )
+        {
+            // append the caught classloader-related exception's string to the new OdaException
+            OdaException odaEx = 
+                new OdaHelperException( Messages.helper_cannotConstructConnectionFactory, 
+                                         driverClassName + ", " + driverClassloader ); //$NON-NLS-1$
+            odaEx.initCause( ex );
+            handleError( odaEx );
+        }
+        finally
+        {
+            if( switchContextClassloader )
+                resetContextClassloader();
+        }
+    }
+    
+    /**
+     * Initialize this ODA consumer's driver helper
+     * with an underlying ODA driver.
+     * @param driverConfig
+     * @throws OdaException
+     */
+    private void init( ExtensionManifest driverConfig )
+        throws OdaException
+    {
+        if( driverConfig == null )
+            throw new OdaException( Messages.helper_missingDriverInfo );
+        
+        final String context = "OdaDriver.init( " + //$NON-NLS-1$
+                         driverConfig + " )\t"; //$NON-NLS-1$
+        logMethodCalled( context );
+        
+        IDriver wrappedDriver = loadDriverInstance( driverConfig, true, true );
+
+        // store the underlying driver instance within this OdaDriver
+        setObject( wrappedDriver );
+
+        // initialize log configuration for this helper and its underlying ODA driver
+        setLogConfiguration( driverConfig );
+        
+        logMethodExitWithReturn( context, this );
+    }
+
+    /**
+     * This uses the OSGi bundle to locate
+     * and load the specified ODA driver.
+     * Also instantiates the driver with default constructor.
+     */
+    private IDriver loadDriverInstance( ExtensionManifest driverConfig,
+                                boolean honorClassLoaderSwitch,
+                                boolean appliesBridgeExtension ) 
+        throws OdaException
+    {
+        JavaRuntimeInterface javaRuntime = DriverExtensionHelper.getRuntimeInterface( driverConfig );
+				
+        IDriver loadedDriver = null;
+		try
+		{
+			Class driverClass = DriverExtensionHelper.loadDriverClass( driverConfig );
+
+            // if on non-OSGi platform, need to pass the driver location to extension manifest info
+            if( Platform.getBundle( driverConfig.getNamespace() ) == null )
+                javaRuntime.setLoadedClassLocation( driverClass, m_initAppContext );
+
+            if( honorClassLoaderSwitch )
+            {
+                boolean needSwitch = javaRuntime.needSetThreadContextClassLoader();
+                setUseContextClassLoaderSwitch( needSwitch );
+                if( needSwitch )
+                {
+        			setDriverClassLoader( driverClass.getClassLoader() );
+                    setContextClassloader();
+                }
+            }
+            
+            // instantiate the driver class, and applies its
+            // driver bridge if applicable
+            loadedDriver = newDriverInstance( driverClass, 
+                                driverConfig.getDataSourceElementID(), 
+                                appliesBridgeExtension );
+		}
+		catch( Exception ex )
+		{
+			// append the caught classloader-related exception's string to the new OdaException
+			OdaException odaEx = 
+				new OdaHelperException( Messages.helper_cannotConstructConnectionFactory, 
+				                        javaRuntime.getDriverClass() );
+			odaEx.initCause( ex );
+			handleError( odaEx );
+		}
+		finally
+		{
+            if( honorClassLoaderSwitch )
+                resetContextClassloader();
+		}
+
+        return loadedDriver;
+    }
+	
+	private IDriver newDriverInstance( Class driverClass,
+                                String driverDataSourceId,
+                                boolean appliesBridgeExtension ) 
+        throws InstantiationException, IllegalAccessException
+	{
+		Object driverInstance = driverClass.newInstance();
+        
+        // add bridge to this driver, if bridge extension is specified
+        if( appliesBridgeExtension )
+        {
+            IDriver driverBridge = newDriverBridge( driverInstance, 
+                                                driverDataSourceId );
+            if( driverBridge != null )
+                return driverBridge;
+        }
+        
+        // no driver bridge is applied, 
+        // use the instantiated driver directly
+        // if it implements the DTP ODA IDriver interface
+        if( driverInstance instanceof IDriver )
+            return ( IDriver ) driverInstance;        
+                
+        // no driver bridge found or applied for given driver's type,
+        // must implement driver bridge extension, 
+        // or sub-class must override newDriverBridge 
+        // for non DTP ODA driver
+        throw new IllegalArgumentException( driverInstance.toString() );
+	}
+
+	/**
+	 * Subclasses may need to override this method to introduce 
+	 * a wrapper layer to include additional functionality to an ODA driver or to 
+	 * serve as an adapter to underlying objects that do not implement the 
+	 * org.eclipse.datatools.connectivity.oda interfaces.
+	 * @param driver		a driver object, which may or may 
+	 * 						not implement the org.eclipse.datatools.connectivity.oda.IDriver 
+	 * 						interface.  It cannot be null.
+	 * @return	an org.eclipse.datatools.connectivity.oda.IDriver instance.
+     * @deprecated  replaced by {@link #newDriverBridge(Object, String)}
+	 */
+    protected IDriver newDriverBridge( Object driver )
+    {
+        return newDriverBridge( driver, null );
+    }
+
+    /**
+     * Default implementation attemps to locate and instantiate
+     * a driver bridge for the specified driver.
+     * Subclasses may need to override this method to introduce 
+     * a wrapper layer to include additional functionality to an ODA driver or to 
+     * serve as an adapter to underlying objects that do not implement the 
+     * org.eclipse.datatools.connectivity.oda interfaces.
+     * @param driverInstance    a driver object, which may or may 
+     *                  not implement the org.eclipse.datatools.connectivity.oda.IDriver 
+     *                  interface.  It must not be null.
+     * @param driverDataSourceId  the data source element id of
+     *                  the specified driverInstance; may be null
+     *                  for API backward compatibility, in which case
+     *                  no driver bridge will be applied
+     * @return  an org.eclipse.datatools.connectivity.oda.IDriver instance.
+     */
+	protected IDriver newDriverBridge( Object driverInstance,
+                                    String driverDataSourceId )
+	{
+        assert( driverInstance != null );
+        if( driverDataSourceId == null )
+            return null;
+        
+        // tries to locate and obtain a driver bridge extension
+        // for the specified driver
+        String driverBridgeId = getDriverBridgeId( driverInstance );
+        if( driverBridgeId == null ||
+            driverBridgeId.equalsIgnoreCase( driverDataSourceId ) )
+            return null;    // no driver bridge to apply
+
+        // its driver bridge extension is found, 
+        // applies the bridge
+        return newDriverBridgeExtension( driverInstance, driverBridgeId );
+	}
+
+    /**
+     * Looks up and returns a driver bridge extension's
+     * data source element id for the given driver.
+     * A bridge extension defined for a driver class takes precedence
+     * over those defined for a driver's interface(s).
+     * Returns null if no driver bridge extension is found.
+     */
+    private String getDriverBridgeId( Object driver )
+    {
+        return DriverExtensionHelper.getDriverBridgeId( driver.getClass() );
+    }
+    
+    /**
+     * Loads the driver bridge extension with the given oda data source id, 
+     * and its corresponding bridge(s) that implement the 
+     * driverBridge extension point.
+     * Returns the driver's top-level bridge to serve as
+     * the intermediate layer that this driver wrapper interacts with. 
+     */
+    private IDriver newDriverBridgeExtension( Object driver,
+                            String driverBridgeDataSourceId )
+    {
+        final String context = "OdaDriver.newDriverBridgeExtension"; //$NON-NLS-1$
+                
+        // no driver bridge extension is specified
+        if( driverBridgeDataSourceId == null )
+             return null;
+        
+        try
+        {
+            ExtensionManifest bridgeManifest = 
+                ManifestExplorer.getInstance().getExtensionManifest( 
+                        driverBridgeDataSourceId );
+
+            // found driver bridge extension's plugin manifest
+            if( bridgeManifest != null )
+            {
+                // loads and instantiate the bridge
+                IDriver driverBridge = 
+                    loadDriverInstance( bridgeManifest, false, false );
+                setDriverBridgeContext( driverBridge, driver );
+                
+                // load the bridge's corresponding bridge, if specified
+                IDriver parentBridge = newDriverBridge( driverBridge, 
+                            bridgeManifest.getDataSourceElementID() );
+                if( parentBridge != null )
+                    driverBridge = parentBridge;
+                
+                return driverBridge;
+            }
+        }
+        catch( OdaException e )
+        {
+            logWarning( context, e.toString() );
+        }
+        
+        // no valid driver bridge extension is found for specified bridge data source id
+        return null;
+    }
+
+    /**
+     * Passes the underlying driver to the driver bridge through a
+     * Map context.
+     * This allows the driver bridge to wrap its underlying driver.
+     */
+    private void setDriverBridgeContext( IDriver driverBridge, Object driver )
+    {
+        final String context = "OdaDriver.setDriverBridgeContext"; //$NON-NLS-1$
+
+        if( driverBridge == null || driver == null )
+            return;     // nothing to pass thru
+        
+        // store underlying driver in a map entry
+        HashMap map = new HashMap( 1 );
+        map.put( ODA_BRIDGED_DRIVER, driver );
+
+        try
+        {
+            driverBridge.setAppContext( map );
+        }
+        catch( RuntimeException e )
+        {
+            // ok to ignore if the bridge does not support setAppContext
+            logWarning( context, e.toString() );
+        }
+        catch( OdaException ex )
+        {
+            logWarning( context, ex.toString() );
+        }
+    }
+    
+	private IDriver getDriver()
+	{
+		return (IDriver) getObject();
+	}
+
+	private String getLoggerName()
+	{
+	    return sm_loggerName;
+	}
+
+	public void setLogDirectory( String logDirectory )
+	{
+		m_logDirectory = logDirectory;
+	}
+    
+    /**
+     * Initialize and set the trace logging configuration for this 
+     * oda consumer helper instance and its underlying ODA runtime driver.
+     * Uses the default trace logging configuration specified for
+     * the underlying ODA runtime driver.
+     * @throws OdaException
+     */
+    private void setLogConfiguration( ExtensionManifest driverManifest ) 
+        throws OdaException
+    {
+        LogConfigHelper configHelper = new LogConfigHelper( driverManifest );
+        setLogConfiguration( configHelper.getDriverLogConfiguration() );
+    }
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.oda.IDriver#setLogConfiguration(org.eclipse.datatools.connectivity.oda.LogConfiguration)
+	 */
+	public void setLogConfiguration( LogConfiguration logConfig ) throws OdaException
+	{
+	    final String context = "OdaDriver.setLogConfiguration( " +  //$NON-NLS-1$
+						 logConfig + " )\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+        
+        if( logConfig == null )
+        {
+            // nothing to set, done
+            logMethodExit( context );
+            return;
+        }
+		
+        // set log configuration for the oda consumer helper
+		try
+		{
+			// set the ODA consumer helper's log directory to the ODA driver's 
+			// log directory only the first time setLogConfiguration() is called and 
+			// if the caller didn't already specify a directory using setLogDirectory().
+			if( getLogger() == null && 
+				m_logDirectory == null )
+            {
+                // use underlying oda data source id as the logs' relative sub-directory
+                m_logDirectory = logConfig.getDataSourceId();
+            }
+
+            // set log configuration values in the ODA consumer helper of the driver,
+            // whose logging requires a log directory
+            if( m_logDirectory != null && m_logDirectory.length() > 0 )	
+            {
+                // ensure that either user-defined or default log directory
+                // has an absolute path
+                ResourceIdentifiers resourceIdentifiers = ResourceIdentifiers.get( m_initAppContext );
+                m_logDirectory = LogPathHelper.getAbsoluteLogDirName( m_logDirectory, resourceIdentifiers );
+
+                // configure the odaconsumer logger, and cache it for use by the local thread
+                setLogger( LogManager.getLogger( getLoggerName(), logConfig.getLogLevel(), 
+								  m_logDirectory, "OdaHelperLog", null ) ); //$NON-NLS-1$
+            }
+        }
+        catch( RuntimeException ex )
+        {
+            // unable to set consumer logger, ignore
+        	ex.printStackTrace();
+        }
+
+        // next, set log configuration in the underlying ODA driver
+        try
+        {
+            setContextClassloader();
+            
+            // set log configuration values in the underlying ODA driver
+			getDriver().setLogConfiguration( logConfig );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			logUnsupportedOp( uoException,
+							  "IDriver.setLogConfiguration" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+		
+		logMethodExit( context );
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.oda.IDriver#getConnection(java.lang.String)
+	 */
+	public IConnection getConnection( String dataSourceId )
+		throws OdaException
+	{
+	    final String context = "OdaDriver.getConnection( " + //$NON-NLS-1$
+							dataSourceId + " )\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		try
+		{
+			setContextClassloader();
+			
+			IConnection connection = getDriver().getConnection( dataSourceId );
+			IConnection ret = ( connection == null ) ? null :
+							  newConnectionHelper( connection );
+			
+			logMethodExitWithReturn( context, ret );			
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IDriver.getConnection( String dataSourceId )" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException exception )
+		{
+			handleError( exception );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+	
+	protected IConnection newConnectionHelper( IConnection connection )
+		throws OdaException
+	{	
+	    OdaConnection connHelper = new OdaConnection( connection, 
+				                  switchContextClassloader(),
+								  getDriverClassLoader(),
+                                  getOriginalContextClassLoader() );
+	    
+		// pass-thru driver context to the newly obtained
+		// connection helper so it can pass thru before open()
+	    connHelper.setDriverAppContext( m_appContext );
+        
+	    // applies the max limit to all instances
+	    int maxOpenConnections;
+	    try
+	    {
+	        maxOpenConnections = getMaxConnections();
+	    }
+	    catch( OdaException ex )
+	    {
+	        maxOpenConnections = 0;		// default to 0 for unknown
+	    }
+	    OdaConnection.setMaxConnections( maxOpenConnections );
+
+	    return connHelper;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.oda.IDriver#getMaxConnections()
+	 */
+	public int getMaxConnections() throws OdaException
+	{
+	    final String context = "OdaDriver.getMaxConnections()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+
+		try
+		{			
+			setContextClassloader();
+			
+			int ret = getDriver().getMaxConnections();
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetZero( uoException, 
+												  "IDriver.getMaxConnections()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnNegOne( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnNegOne( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+	
+	/* 
+	 * @see org.eclipse.datatools.connectivity.oda.IDriver#setAppContext(java.lang.Object)
+	 */
+	public void setAppContext( Object context ) throws OdaException
+	{
+		final String methodName = "OdaDriver.setAppContext()\t"; //$NON-NLS-1$
+        final String contextObjInfo = ( context == null ) ? "null" : context.getClass().getName(); //$NON-NLS-1$
+		logMethodCalled( methodName );
+
+		if( m_appContext == context )	// already set
+		{
+		    log( methodName, "Same pass-thru application context object: " + contextObjInfo ); //$NON-NLS-1$
+			logMethodExit( methodName );
+		    return;		// nothing to do
+		}
+		
+		try
+		{
+			setContextClassloader();
+			
+		    log( methodName, 
+		    		"Passing thru application context to underlying ODA driver: " + contextObjInfo ); //$NON-NLS-1$
+
+		    getDriver().setAppContext( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			// log, and ignore exception
+			logUnsupportedOp( uoException, "IDriver.setAppContext" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+		
+		// if no exception with passing thru to the underlying driver,
+		// hold on to context for subsequent pass-thru to each of its
+		// connection before open() and queries before prepare
+		m_appContext = context;
+		
+		logMethodExit( methodName );
+	}
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaDriverObject.java b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaDriverObject.java
new file mode 100644
index 0000000..471d64a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaDriverObject.java
@@ -0,0 +1,75 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.helper;
+
+import org.eclipse.datatools.connectivity.oda.IClob;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+/**
+ * OdaDriverObject is the base class for all Oda wrapper objects that 
+ * needs a reference to its corresponding Oda connection wrapper object. 
+ * This also extends some of the OdaObject error handling capabilities.
+ */
+class OdaDriverObject extends OdaObject
+{
+	private OdaConnection m_connection;
+	
+	OdaDriverObject( Object obj, OdaConnection connection, 
+	                 boolean switchContextClassloader,
+					 ClassLoader driverClassLoader )
+	{
+		super( obj, switchContextClassloader, driverClassLoader, 
+                connection.getOriginalContextClassLoader() );
+		m_connection = connection;
+	}
+	
+	protected OdaConnection getOdaConnection()
+	{
+		return m_connection;
+	}
+	
+	protected void handleError( OdaException exception ) throws OdaException
+	{
+		m_connection.handleError( exception );
+	}
+
+    protected String getClobAsStringImpl( IClob clobObj, String context )
+        throws OdaException
+    {
+        String ret = null;
+        if( clobObj == null ) 
+            return ret;
+
+        try
+        {
+            int len = (int) clobObj.length();
+            ret = clobObj.getSubString( 1, len );
+        }
+        catch( UnsupportedOperationException ex )
+        {
+            handleUnsupportedOp( ex, context );
+        }
+        catch( RuntimeException rtException )
+        {
+            handleError( rtException );
+        }
+        catch( OdaException odaException )
+        {
+            handleError( odaException );
+        }
+        return ret;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaHelperException.java b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaHelperException.java
new file mode 100644
index 0000000..5ba92ac
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaHelperException.java
@@ -0,0 +1,79 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.helper;
+
+import java.util.Locale;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+/**
+ * Exception thrown for errors that occur within the 
+ * ODA consumer helper package.  It encapsulates the handling
+ * of additional formatting of the error messages.
+ */
+public class OdaHelperException extends OdaException
+{	
+    private static final long serialVersionUID = 1L;
+    private String m_errorMsg;
+	private String m_appendInfo;
+	
+	public OdaHelperException( String errorMsg, String appendInfo )
+	{
+		m_errorMsg = errorMsg;
+		m_appendInfo = appendInfo;
+	}
+	
+	/**
+	 * @deprecated Replaced by {@link #OdaHelperException(String, String)}
+	 */
+	public OdaHelperException( int errorNumber, Locale locale, String appendInfo )
+	{
+		// migrated to NLS resource handling;
+		// no more errorNumber map available, use it as the error message
+		m_errorMsg = Integer.toString( errorNumber );
+		m_appendInfo = appendInfo;
+	}
+	
+	public String getMessage()
+	{
+		return getLocalizedMessage();
+	}
+	
+	public String getLocalizedMessage()
+	{
+		return m_errorMsg;
+	}
+	
+	public String toString()
+	{
+		String ret = getClass().getName();
+		String localizedMessage = getLocalizedMessage();
+		if( localizedMessage != null && localizedMessage.length() > 0 )
+			ret += ": " + localizedMessage; //$NON-NLS-1$
+		
+		if( m_appendInfo != null && m_appendInfo.length() > 0 )
+			ret += " (" + m_appendInfo + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+		
+		Throwable cause = getCause();
+		if( cause != null )
+		{
+			String causeString = cause.toString();
+			if( causeString != null && causeString.length() > 0 )
+				ret += " ;\n" + causeString; //$NON-NLS-1$
+		}
+		
+		return ret;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaObject.java b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaObject.java
new file mode 100644
index 0000000..57bb083
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaObject.java
@@ -0,0 +1,568 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.helper;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.sql.Types;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.consumer.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.util.logging.Level;
+import org.eclipse.datatools.connectivity.oda.util.logging.Logger;
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * OdaObject is the base class for all Oda wrapper objects.  The 
+ * wrapper objects inherits class loading switch,
+ * reflection and error handling behavior 
+ * from this class.
+ */
+class OdaObject
+{
+	private Object 			m_object;
+	private boolean			m_switchContextClassloader = false;
+	private ClassLoader		m_driverClassLoader;
+    private ClassLoader     m_originalClassLoader;
+    
+	static final String sm_loggerName = "org.eclipse.datatools.connectivity.oda.consumer"; //$NON-NLS-1$
+	
+	private static boolean sm_ThrowExceptionOnly = true;
+    private static ThreadLocal sm_loggerAccessor = null;
+	
+	/*
+	 * Static method to be used by host to have oda consumer manager return errors 
+	 * in the form of a driver error.
+	 */ 
+	public static void setThrowAndSetOdaException()
+	{
+		sm_ThrowExceptionOnly = false;
+	}
+
+	protected OdaObject()
+	{
+	}
+	
+	protected OdaObject( boolean switchContextClassloader, 
+						 ClassLoader driverClassLoader )
+	{
+        init( null, switchContextClassloader, driverClassLoader, null );
+	}
+	
+	protected OdaObject( Object wrappedObj, boolean switchContextClassloader,
+						 ClassLoader driverClassLoader )
+	{
+        init( wrappedObj, switchContextClassloader, driverClassLoader, null );
+	}
+    
+    protected OdaObject( Object wrappedObj, boolean switchContextClassloader,
+                         ClassLoader driverClassLoader, ClassLoader originalContextClassLoader )
+    {
+        init( wrappedObj, switchContextClassloader, driverClassLoader, originalContextClassLoader );
+    }
+    
+    private void init( Object wrappedObj, boolean switchContextClassloader,
+             ClassLoader driverClassLoader, ClassLoader originalContextClassLoader )
+    {
+        m_object = wrappedObj;
+        m_originalClassLoader = originalContextClassLoader;
+        m_switchContextClassloader = switchContextClassloader;
+        if( driverClassLoader != null )
+            setDriverClassLoader( driverClassLoader );
+    }
+	
+	protected void setDriverClassLoader( ClassLoader classloader )
+	{
+        if( m_driverClassLoader == classloader )
+            return;     // already set
+
+        final String context = 
+            "setDriverClassLoader( " + classloader + " )\t"; //$NON-NLS-1$ //$NON-NLS-2$
+        
+        cacheOriginalClassLoader( context );
+        m_driverClassLoader = classloader;
+    }
+    
+    protected ClassLoader getDriverClassLoader()
+    {
+        return m_driverClassLoader;
+    }
+    
+    /**
+     * Hold on to current thread's original thread context class loader, 
+     * if not already cached.
+     * @param context   the context from which this method is called; 
+     *                  used for trace logging purpose only
+     */
+    private void cacheOriginalClassLoader( String context )
+    {
+        if( m_originalClassLoader != null ) 
+            return;     // already set, done
+        
+        try 
+        {
+            // hold on to current thread class loader for later reset
+            m_originalClassLoader = Thread.currentThread().getContextClassLoader();
+            log( context, 
+                 "Current thread's original context class loader: " + m_originalClassLoader ); //$NON-NLS-1$
+        } 
+        catch( RuntimeException e ) 
+        {
+            // ignore, default to this class' class loader
+            logWarning( context, 
+                 "Unable to get current thread's context class loader: " + e.toString() ); //$NON-NLS-1$
+        }
+    }
+    
+    protected ClassLoader getOriginalContextClassLoader()
+    {
+       return m_originalClassLoader; 
+    }
+    
+	protected void setUseContextClassLoaderSwitch( boolean needSwitch )
+	{
+		m_switchContextClassloader = needSwitch;
+	}
+    
+    protected boolean switchContextClassloader()
+    {
+        return m_switchContextClassloader;
+    }
+
+	protected void setObject( Object obj )
+	{
+		m_object = obj;
+	}
+	
+	protected Object getObject()
+	{
+		return m_object;
+	}
+	
+	protected void setContextClassloader()
+	{
+		if( ! m_switchContextClassloader || m_driverClassLoader == null )
+            return;     // no switching is set, or nothing to switch to
+        
+        final String context = "setContextClassloader()"; //$NON-NLS-1$
+        
+        cacheOriginalClassLoader( context );
+        
+		try
+        {
+            Thread.currentThread().setContextClassLoader( m_driverClassLoader );
+        }
+        catch( SecurityException e )
+        {
+            // disable class loader switching
+            m_switchContextClassloader = false;
+            logWarning( context, 
+                "Unable to set current thread's context class loader; disabled switching. " + e.toString() ); //$NON-NLS-1$
+        }
+	}
+	
+	protected void resetContextClassloader()
+	{
+		if( ! m_switchContextClassloader )
+            return;     // no switching is set
+        
+        final String context = "resetContextClassloader()"; //$NON-NLS-1$
+
+		try
+        {
+            ClassLoader originalLoader = ( m_originalClassLoader != null ) ?
+                    m_originalClassLoader : this.getClass().getClassLoader();
+            Thread.currentThread().setContextClassLoader( originalLoader );
+        }
+        catch( SecurityException e )
+        {
+            // disable class loader switching
+            m_switchContextClassloader = false;
+            logWarning( context, 
+                "Unable to set/reset current thread's context class loader; disabled switching. " + e.toString() ); //$NON-NLS-1$
+        }
+	}
+    
+    protected String getClassName()
+    {
+        String fullClassName = getClass().getName();
+        // strip out the path name of the class
+        return fullClassName.substring( fullClassName.lastIndexOf( '.' ) + 1 );
+    }
+	
+	/*
+	 * Reflection capability to call methods that aren't part of the Oda interface. 
+	 * This will internally set and reset the context classloader for the reflection 
+	 * invocation.
+	 */
+	public Object findAndInvokeMethod( String methodName, Class[] parameterTypes,
+									   Object[] args ) 
+		throws NoSuchMethodException, IllegalAccessException, InvocationTargetException,
+			   OdaException
+	{
+		// the callers of this method are not ODA interface methods, so they have 
+		// not already set the context classloader, so do it here
+		return findAndInvokeMethod( methodName, parameterTypes, args, 
+									false /* bypassJavaAccessChecks */,
+									true /* doSetContextClassloader */ );
+	}
+	
+	/*
+	 * Pass in an additional boolean flag for setting context classloader 
+	 * because this method may be called by a method which already has the 
+	 * context classloader set.  Therefore, we don't want to unset it. 
+	 */
+	Object findAndInvokeMethod( String methodName, Class[] parameterTypes,
+			   					Object[] args, boolean bypassJavaAccessChecks, 
+			   					boolean doSetContextClassloader ) 
+		throws NoSuchMethodException, IllegalAccessException, InvocationTargetException,
+			   OdaException
+	{
+        ClassLoader prevClassLoader = null;
+
+        try
+		{
+            // already set to switch class loader, keep the current switch setting
+            if( doSetContextClassloader && switchContextClassloader() )
+                doSetContextClassloader = false;
+            
+			if( doSetContextClassloader )
+            {
+                // enable switching for the duration of this method
+                prevClassLoader = getDriverClassLoader();
+                setUseContextClassLoaderSwitch( true );
+                setDriverClassLoader( m_object.getClass().getClassLoader() );
+
+                setContextClassloader();
+            }
+			
+			Class objClass = m_object.getClass();
+			Method method = objClass.getMethod( methodName, parameterTypes );
+			
+			// needed for methods where we need to provide backwards 
+			// compatibility, but the implementation classes are not public
+			// then the method is inaccessible, try to bypass the Java language access checks
+			if( bypassJavaAccessChecks && ! method.isAccessible() )
+			{
+				try
+				{
+					method.setAccessible( true );
+				}
+				catch( SecurityException ex )
+				{
+					// may get a SecurityException when trying to bypass the Java access checks
+					// method contains the context specific info: "public void <package>.<class>.<method>( <args> )"
+					handleError( newOdaException( Messages.helper_inadequatePermissionsForCompatibility,
+												  ex, method.toString() ) );
+				}
+			}
+			
+			return method.invoke( m_object, args );
+		}
+		finally
+		{
+			if( doSetContextClassloader )
+            {
+                resetContextClassloader();
+                
+                // reset to previous state before this method
+                setDriverClassLoader( prevClassLoader );
+                setUseContextClassLoaderSwitch( false );
+            }
+		}
+	}
+	
+	//-------------------------------------------------------------------------
+	// The following methods are used by subclasses to handle OdaExceptions and 
+	// runtime exceptions.
+	
+	protected void handleError( RuntimeException exception )
+	{
+		// this will log at a severe level because these runtime exceptions
+		// are thrown back to the caller and will halt the report generation
+		Logger logger = getLogger();
+		if( logger != null )
+			logger.severe( exception );
+		
+		throw exception;
+	}
+	
+	protected void handleError( OdaException exception ) throws OdaException
+	{
+		Logger logger = getLogger();
+		if( logger != null )
+			logger.severe( exception );
+		
+		if( sm_ThrowExceptionOnly )
+			throw exception;
+	}
+
+	protected int handleErrorAndReturnZero( RuntimeException rtException )
+	{
+		handleError( rtException );
+		return 0;
+	}
+	
+	protected int handleErrorAndReturnZero( OdaException exception ) throws OdaException
+	{
+		handleError( exception );
+		return 0;
+	}
+
+	protected int handleErrorAndReturnNegOne( RuntimeException rtException )
+	{
+		handleError( rtException );
+		return -1;
+	}
+	
+	protected int handleErrorAndReturnNegOne( OdaException exception ) throws OdaException
+	{
+		handleError( exception );
+		return -1;
+	}
+	
+	protected String handleErrorAndReturnEmptyString( RuntimeException rtException )
+	{
+		handleError( rtException );
+		return ""; //$NON-NLS-1$
+	}
+
+	protected String handleErrorAndReturnEmptyString( OdaException exception ) throws OdaException
+	{
+		handleError( exception );
+		return ""; //$NON-NLS-1$
+	}
+
+	protected boolean handleErrorAndReturnFalse( RuntimeException rtException )
+	{
+		handleError( rtException );
+		return false;
+	}
+	
+	protected boolean handleErrorAndReturnFalse( OdaException exception ) throws OdaException
+	{
+		handleError( exception );
+		return false;
+	}
+
+	protected int handleErrorAndReturnTypeNull( RuntimeException rtException )
+	{
+		handleError( rtException );
+		return Types.NULL;
+	}
+	
+	protected int handleErrorAndReturnTypeNull( OdaException exception ) throws OdaException
+	{
+		handleError( exception );
+		return Types.NULL;
+	}
+	
+	protected void handleUnsupportedOp( UnsupportedOperationException exception,
+										String context )
+	{
+		// want to log the original exception because our new exception will have
+		// a different stack trace than the old one and the user will want 
+		// to see the old stack trace in the logs.
+		Logger logger = getLogger();
+		if( logger != null )
+			logger.warning( exception );
+		
+		// we'll have to reconstruct a new exception object if the 
+		// existing exception doesn't have a message because the 
+		// Exception class has no setters for message.
+		String exceptionMsg = exception.getLocalizedMessage();
+		exception = 
+			( exceptionMsg == null || exceptionMsg.length() == 0 ) ?
+			new UnsupportedOperationException( context ) : exception;
+		
+		throw exception;
+	}
+	
+	protected int handleUnsupportedOpAndRetZero( UnsupportedOperationException exception,
+												 String context )
+	{
+		handleUnsupportedOp( exception, context );
+		return 0;
+	}
+	
+	protected boolean handleUnsupportedOpAndRetFalse( UnsupportedOperationException exception,
+													  String context )
+	{
+		handleUnsupportedOp( exception, context );
+		return false;
+	}
+	
+	protected String handleUnsupportedOpAndRetEmptyString( UnsupportedOperationException exception,
+														   String context )
+	{
+		handleUnsupportedOp( exception, context );
+		return ""; //$NON-NLS-1$
+	}
+	
+	protected int handleUnsupportedOpAndRetTypeNull( UnsupportedOperationException exception,
+													 String context )
+	{
+		handleUnsupportedOp( exception, context );
+		return Types.NULL;
+	}
+    
+    protected boolean isLoggable( Level level )
+    {
+        Logger logger = getLogger();
+        return ( logger != null ) ? logger.isLoggable( level ) : false;
+    }
+
+    /**
+     * Caches the specified odaconsumer logger.
+     * @param logger    logger instance; may be null to reset the cached holder.
+     */
+    protected void setLogger( Logger logger )
+    {
+        if( sm_loggerAccessor == null )
+        {
+            synchronized( OdaObject.class )
+            {
+                if( sm_loggerAccessor == null )
+                {
+                    sm_loggerAccessor = new ThreadLocal();
+                }
+            }
+        }
+        sm_loggerAccessor.set( logger );
+    }
+  
+    /**
+     * Returns the odaconsumer logger specified by the {@link #setLogger(Logger)} method.
+     * @return  an odaconsumer logger instance, if exists.  May return null if none is available.
+     */
+    protected Logger getLogger()
+    {
+        if( sm_loggerAccessor != null )
+            return (Logger) sm_loggerAccessor.get();
+
+        return null;
+    }
+
+	protected void logUnsupportedOp( UnsupportedOperationException exception,
+									 String context )
+	{
+		Logger logger = getLogger();
+		if( logger != null )
+		{
+		    String logMsg = exception.getLocalizedMessage();
+		    if ( logMsg == null || logMsg.length() == 0 )
+		        logMsg = context;
+		    else
+		        logMsg = context + ": " + logMsg; //$NON-NLS-1$
+			logger.warning( logMsg );
+		}
+	}
+	
+	protected void log( String context, String msg )
+	{
+		Logger logger = getLogger();
+		if( logger != null )
+			logger.fine( context + msg );
+	}
+    
+    protected void logWarning( String context, String msg )
+    {
+        Logger logger = getLogger();
+        if( logger != null )
+            logger.warning( context + msg );
+    }
+	
+	protected void logMethodExitWithReturn( String context, int i )
+	{
+		logMethodExitWithReturn( context, new Integer( i ) );
+	}
+	
+	protected void logMethodExitWithReturn( String context, double d )
+	{
+		logMethodExitWithReturn( context, new Double( d ) );
+	}
+	
+	protected void logMethodExitWithReturn( String context, boolean b )
+	{
+		logMethodExitWithReturn( context, b ? Boolean.TRUE : Boolean.FALSE );
+	}
+
+	protected void logMethodCalled( String context )
+	{
+		Logger logger = getLogger();
+		if( logger != null )
+			logger.fine( context + "Called." ); //$NON-NLS-1$
+	}
+	
+	protected void logMethodExit( String context )
+	{
+		Logger logger = getLogger();
+		if( logger != null )
+			logger.fine( context + "Exiting." ); //$NON-NLS-1$
+	}
+		
+	protected void logMethodExitWithReturn( String context, Object obj )
+	{
+		Logger logger = getLogger();
+		if( logger != null )
+			logger.fine( context + "Returns [ " + obj + " ]" ); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+    
+    protected void logMethodExitWithReturnLen( String context, String obj )
+    {
+        Logger logger = getLogger();
+        if( logger != null )
+        {
+            if( obj != null )
+                logger.fine( context + "Returns a string with length [" + obj.length() + "]" ); //$NON-NLS-1$ //$NON-NLS-2$
+            else
+                logger.fine( context + "Returns string [ null ]" ); //$NON-NLS-1$
+        }
+    }
+	
+    protected void logMethodNotImplemented( String context, String interfaceMethodSignature )
+    {
+        if( isLoggable( Level.FINE_LEVEL ) )
+            log( context, formatMethodNotImplementedMsg( interfaceMethodSignature ) );      
+    }
+    
+    protected String formatMethodNotImplementedMsg( String interfaceMethodSignature )
+    {
+        return NLS.bind( Messages.helper_methodNotImplemented, interfaceMethodSignature );
+    }
+    
+	protected OdaException newOdaException( String errorMsg )
+	{
+		return new OdaHelperException( errorMsg, null /* appendInfo */ );
+	}
+	
+	protected OdaException newOdaException( String errorMsg, 
+											Throwable cause )
+	{
+		OdaException odaEx = newOdaException( errorMsg );
+		odaEx.initCause( cause );
+		return odaEx;
+	}
+	
+	OdaException newOdaException( String errorMsg, Throwable cause, 
+			  String appendInfo )
+	{
+		OdaException odaEx = new OdaHelperException( errorMsg, 
+				  					appendInfo );
+		odaEx.initCause( cause );
+		return odaEx;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaParameterMetaData.java b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaParameterMetaData.java
new file mode 100644
index 0000000..94dd1aa
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaParameterMetaData.java
@@ -0,0 +1,339 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.helper;
+
+import org.eclipse.datatools.connectivity.oda.IParameterMetaData;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+/**
+ * OdaParameterMetaData is the Oda wrapper for parameter metadata.
+ */
+class OdaParameterMetaData extends OdaDriverObject 
+						   implements IParameterMetaData
+{
+	protected OdaParameterMetaData( IParameterMetaData parameterMetaData,
+									OdaConnection connection,
+									boolean switchContextClassloader,
+									ClassLoader driverClassLoader )
+	{
+		super( parameterMetaData, connection, switchContextClassloader,
+			   driverClassLoader );
+		
+		final String context = "OdaParameterMetaData.OdaParameterMetaData( " + //$NON-NLS-1$
+						 parameterMetaData + ", " + connection + " )\t"; //$NON-NLS-1$ //$NON-NLS-2$
+		logMethodExitWithReturn( context, this );
+	}
+	
+	private IParameterMetaData getParameterMetaData()
+	{
+		return (IParameterMetaData) getObject();
+	}
+	
+	//------------------------------------------------------------------
+	//	IParameterMetaData public interface methods
+	//------------------------------------------------------------------	
+
+	public int getParameterCount() throws OdaException
+	{
+		final String context = "OdaParameterMetaData.getParameterCount()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			int ret = getParameterMetaData().getParameterCount();
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetZero( uoException,
+												  "IParameterMetaData.getParameterCount()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnZero( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnZero( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public int getParameterMode( int param ) throws OdaException
+	{
+		final String context = "OdaParameterMetaData.getParameterMode( " +  //$NON-NLS-1$
+						 param + " )\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			int ret = getParameterMetaData().getParameterMode( param );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IParameterMetaData.getParameterMode( int param )" ); //$NON-NLS-1$
+			return IParameterMetaData.parameterModeUnknown;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return IParameterMetaData.parameterModeUnknown;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return IParameterMetaData.parameterModeUnknown;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	/* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getParameterName(int)
+     */
+    public String getParameterName( int param ) throws OdaException
+    {
+        final String context = "OdaParameterMetaData.getParameterName( " + param + " )\t"; //$NON-NLS-1$ //$NON-NLS-2$
+        final String unsupportedOpContext = "IParameterMetaData.getParameterName( int )"; //$NON-NLS-1$
+        logMethodCalled( context );
+    
+        try
+        {
+            setContextClassloader();
+            
+            String ret = getParameterMetaData().getParameterName( param );
+            
+            logMethodExitWithReturn( context, ret );
+            return ret;
+        }
+        catch( AbstractMethodError err )
+        {
+            // this occurs because the underlying driver has not upgraded
+            // to implement this ODA 3.1 method
+            logMethodNotImplemented( context, unsupportedOpContext );
+            
+            // no need to throw an exception, just return value to indicate that 
+            // the name is not available during runtime 
+            String ret = null;          // name is not available
+            logMethodExitWithReturn( context, ret );
+            return ret;
+        }
+        catch( UnsupportedOperationException uoException )
+        {
+            handleUnsupportedOp( uoException, unsupportedOpContext );
+        }
+        catch( RuntimeException rtException )
+        {
+            handleError( rtException );
+        }
+        catch( OdaException odaException )
+        {
+            handleError( odaException );
+        }
+        finally
+        {
+            resetContextClassloader();
+        }       
+        return null;
+    }
+
+	public int getParameterType( int param ) throws OdaException
+	{
+		final String context = "OdaParameterMetaData.getParameterType( " +  //$NON-NLS-1$
+						 param + " )\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			int ret = getParameterMetaData().getParameterType( param );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetTypeNull( uoException,
+													  "IParameterMetaData.getParameterType( int param )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnTypeNull( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnTypeNull( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public String getParameterTypeName( int param ) throws OdaException
+	{
+		final String context = "OdaParameterMetaData.getParameterTypeName( " +  //$NON-NLS-1$
+						 param + " )\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			String ret = getParameterMetaData().getParameterTypeName( param );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetEmptyString( uoException,
+														 "IParameterMetaData.getParameterTypeName( int param )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnEmptyString( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnEmptyString( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public int getPrecision( int param ) throws OdaException
+	{
+		final String context = "OdaParameterMetaData.getPrecision( " + param +  //$NON-NLS-1$
+						 " )\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			int ret = getParameterMetaData().getPrecision( param );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetZero( uoException,
+												  "IParameterMetaData.getPrecision( int param )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnNegOne( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnNegOne( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public int getScale( int param ) throws OdaException
+	{
+		final String context = "OdaParameterMetaData.getScale( " + //$NON-NLS-1$
+						 param + " )\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			int ret = getParameterMetaData().getScale( param );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetZero( uoException,
+												  "IParameterMetaData.getScale( int param )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnNegOne( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnNegOne( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public int isNullable( int param ) throws OdaException
+	{
+		final String context = "OdaParameterMetaData.isNullable( " + //$NON-NLS-1$
+						 param + " )\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			int ret = getParameterMetaData().isNullable( param );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IParameterMetaData.isNullable( int param )" ); //$NON-NLS-1$
+			return IParameterMetaData.parameterNullableUnknown;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return IParameterMetaData.parameterNullableUnknown;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return IParameterMetaData.parameterNullableUnknown;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaQuery.java b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaQuery.java
new file mode 100644
index 0000000..fff0401
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaQuery.java
@@ -0,0 +1,1635 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2013 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.helper;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+import java.sql.Time;
+import java.sql.Timestamp;
+
+import org.eclipse.datatools.connectivity.oda.IParameterMetaData;
+import org.eclipse.datatools.connectivity.oda.IQuery;
+import org.eclipse.datatools.connectivity.oda.IResultSet;
+import org.eclipse.datatools.connectivity.oda.IResultSetMetaData;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.SortSpec;
+import org.eclipse.datatools.connectivity.oda.consumer.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.spec.QuerySpecification;
+import org.eclipse.datatools.connectivity.oda.spec.util.QuerySpecificationHelper;
+
+/**
+ * OdaQuery is the ODA wrapper for query statements.
+ */
+public class OdaQuery extends OdaDriverObject implements IQuery
+{
+	// isPreparedSuccessfully can only be set to true if 
+	// the underlying ODA provider prepare() call succeeds
+	private boolean				m_isPreparedSuccessfully;
+    private boolean             m_isExecuting;
+	private boolean 			m_isExecuted;
+	private String 				m_dataSetType;
+	private Object 				m_appContext;
+    private String              m_preparedText;
+    
+	private static final String MSG_ARG_SEPARATOR = ", "; //$NON-NLS-1$
+	private static final String MSG_LINE_SEPARATOR = " )\t"; //$NON-NLS-1$
+		
+	protected OdaQuery( IQuery statement, OdaConnection connection,
+							String dataSetType, boolean switchContextClassloader,
+							ClassLoader driverClassLoader )
+	{
+		super( statement, connection, switchContextClassloader,
+			   driverClassLoader );
+		
+		final String context = "OdaQuery.OdaQuery( " + statement + //$NON-NLS-1$
+						 MSG_ARG_SEPARATOR + connection + MSG_ARG_SEPARATOR + dataSetType + MSG_LINE_SEPARATOR;
+		logMethodCalled( context );
+		
+		m_isPreparedSuccessfully = false;
+		m_isExecuting = false;
+		m_isExecuted = false;
+		m_dataSetType = dataSetType;
+				
+		logMethodExitWithReturn( context, this );
+	}
+	
+	protected IQuery getQuery()
+	{
+		return (IQuery) getObject();
+	}
+	
+	protected OdaDataSetMetaData getDSMetaData() throws OdaException
+	{
+		return getOdaConnection().doGetMetaData( m_dataSetType );
+	}
+	
+	protected boolean isPreparedSuccessfully()
+	{
+		return m_isPreparedSuccessfully;
+	}
+	
+	protected boolean isExecuting()
+    {
+        return m_isExecuting;
+    }
+
+	protected void setIsExecuting( boolean flag )
+    {
+        m_isExecuting = flag;
+    }
+
+    protected boolean isExecuted()
+	{
+		return m_isExecuted;
+	}
+	
+	protected void setIsExecuted( boolean flag )
+	{
+		m_isExecuted = flag;
+	}
+	
+	private void resetStatementStates()
+	{
+		// need to decrement the open statement count when we reset the 
+		// statement states for prepare() and close()
+		getOdaConnection().removeOpenStatement( this );
+		
+		// reset the statement states
+		m_isPreparedSuccessfully = false;
+	    m_preparedText = null;
+		resetExecuteStates();
+	}
+
+	protected void resetExecuteStates() 
+	{
+	    m_isExecuting = false;
+		m_isExecuted = false;
+	}
+	
+	//------------------------------------------------------------------
+	//	IQuery public interface methods
+	//------------------------------------------------------------------
+	
+	/* 
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setAppContext(java.lang.Object)
+	 */
+	public void setAppContext( Object context ) throws OdaException
+	{
+		final String methodName = "OdaQuery.setAppContext()\t"; //$NON-NLS-1$
+		final String contextObjInfo = ( context == null ) ? "null" : context.getClass().getName(); //$NON-NLS-1$
+		logMethodCalled( methodName );
+
+		if( m_appContext == context )	// already set
+		{
+		    log( methodName, "Same pass-thru application context object: " + contextObjInfo ); //$NON-NLS-1$
+			logMethodExit( methodName );
+		    return;		// nothing to do
+		}
+
+		try
+		{
+			setContextClassloader();
+			
+		    log( methodName, "Passing thru application context to underlying ODA query: " + contextObjInfo ); //$NON-NLS-1$
+			getQuery().setAppContext( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			// log, and ignore exception
+			logUnsupportedOp( uoException, "IQuery.setAppContext" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+		
+		// if no exception with passing thru to the underlying connection,
+		// hold on to context to verify whether a new one is being passed thru
+		m_appContext = context;
+		
+		logMethodExit( methodName );
+	}
+
+	public void prepare( String queryText ) throws OdaException
+	{
+	    final String context = "OdaQuery.prepare( " + queryText + MSG_LINE_SEPARATOR; //$NON-NLS-1$ 
+		logMethodCalled( context );
+		
+		final String unsupportedOpContext = "IQuery.prepare( String queryText )"; //$NON-NLS-1$
+		
+		// pass-thru connection context to the underlying query
+		// before calling prepare()
+		setAppContext( getOdaConnection().getAppContext() );
+		
+		try
+		{	
+			setContextClassloader();	
+			doPrepare( queryText, context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, unsupportedOpContext );
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+		
+		// prepare didn't throw an exception, so the statement has been prepared.
+		m_isPreparedSuccessfully = true;
+		getOdaConnection().addOpenStatement( this );	
+		
+		logMethodExit( context );
+	}
+	
+	private void doPrepare( String queryText, String logContext ) throws OdaException
+	{
+		// will need to reset statement states if we're re-preparing a 
+		// statement
+		resetStatementStates();
+		
+		// checks whether the queryText is valid according to the ODA interfaces spec; 
+		// if null or empty, applies the atomic base query if exists; otherwise, 
+		// if null, convert it to an empty string
+ 		if( queryText == null || queryText.trim().isEmpty() )
+ 		{
+ 		    QuerySpecification querySpec = getSpecification();
+ 		    if( querySpec != null && QuerySpecificationHelper.hasAtomicQueryText( querySpec ) )
+ 		    {
+                log( logContext, "Applied the query text specified in the query specification's base query." ); //$NON-NLS-1$
+ 		        queryText = QuerySpecificationHelper.getAtomicQuery( querySpec ).getQueryText();
+ 		    }
+ 		    else if( queryText == null )
+ 		    {
+    		    log( logContext, "Converted the null queryText argument to an empty String value to comply with the ODA interfaces specification." ); //$NON-NLS-1$
+     			queryText = ""; //$NON-NLS-1$
+ 		    }
+ 		}
+		
+		if( ! getOdaConnection().canSupportMoreOpenedStatements() )
+			throw newOdaException( Messages.helper_maxConcurrentStatementsReached );
+		
+		getQuery().prepare( queryText );
+        m_preparedText = queryText;
+	}
+
+	public void setProperty( String propertyName, String propertyValue )
+		throws OdaException
+	{
+	    final String context = "OdaQuery.setProperty( " + propertyName + //$NON-NLS-1$
+						 MSG_ARG_SEPARATOR + propertyValue + MSG_LINE_SEPARATOR; 
+		logMethodCalled( context );
+		
+		try
+		{	
+			setContextClassloader();
+			
+			getQuery().setProperty( propertyName, propertyValue );
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IQuery.setProperty( String propertyName, " +  //$NON-NLS-1$
+								 "String propertyValue )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void close() throws OdaException
+	{
+	    final String context = "OdaQuery.close()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			getQuery().close();
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IQuery.close()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+		    // a consumer application may ignore #close exception;
+            // reset the state of this instance even if underlying ODA driver 
+		    // has thrown an exception at #close
+            resetStatementStates();
+            m_dataSetType = null;
+            
+            resetContextClassloader();
+
+            logMethodExit( context );
+		}
+	}
+
+	public void setMaxRows( int max ) throws OdaException
+	{
+	    final String context = "OdaQuery.setMaxRows( " + max + MSG_LINE_SEPARATOR; //$NON-NLS-1$ 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			getQuery().setMaxRows( max );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, "IQuery.setMaxRows()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+		
+		logMethodExit( context );
+	}
+
+	public int getMaxRows() throws OdaException
+	{
+	    final String context = "OdaQuery.getMaxRows()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		int ret = 0;
+		
+		try
+		{
+			setContextClassloader();
+			
+			ret = getQuery().getMaxRows();
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, "IQuery.getMaxRows()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+
+		logMethodExitWithReturn( context, ret );
+		return ret;
+	}
+
+	public IResultSetMetaData getMetaData() throws OdaException
+	{
+	    final String context = "OdaQuery.getMetaData()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+
+			OdaResultSetMetaData ret = doGetMetaData();
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IQuery.getMetaData()" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+	
+	private OdaResultSetMetaData doGetMetaData() throws OdaException
+	{
+		if( ! isPreparedSuccessfully() )
+			throw newOdaException( Messages.helper_cannotGetResultSetMdBeforePrepare );	
+		
+		m_isExecuting = true;   // set the state in case #cancel is called during #getMetaData
+		IResultSetMetaData resultSetMetaData = getQuery().getMetaData();
+		m_isExecuting = false;  // reset state after #getMetaData is done
+		
+		OdaResultSetMetaData ret =
+			( resultSetMetaData == null ) ? null :
+			new OdaResultSetMetaData( resultSetMetaData, getOdaConnection(),
+			                          switchContextClassloader(),
+									  getDriverClassLoader() );
+		
+		return ret;
+	}
+
+	public IResultSet executeQuery() throws OdaException
+	{
+	    final String context = "OdaQuery.executeQuery()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{	
+			setContextClassloader();
+
+			OdaResultSet ret = doExecuteQuery();
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IQuery.executeQuery()" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+	
+	private OdaResultSet doExecuteQuery() throws OdaException
+	{
+		// possibly re-executing, so need to reset the execute states
+		// from a previous execute.
+		resetExecuteStates();
+		
+		if( ! isPreparedSuccessfully() )
+			throw newOdaException( Messages.helper_cannotExecuteBeforePrepare );
+		
+		m_isExecuting = true;
+		IResultSet resultSet = getQuery().executeQuery();
+        m_isExecuting = false;
+		m_isExecuted = true;
+		
+		if( resultSet == null )
+			return null;
+
+		OdaResultSet ret = newResultSetHelper( resultSet );
+							 
+		return ret;
+	}
+	
+	protected OdaResultSet newResultSetHelper( IResultSet resultSet )
+	{
+		return new OdaResultSet( resultSet, getOdaConnection(),
+			                     switchContextClassloader(),
+								 getDriverClassLoader() );
+	}
+
+	public void setInt( String parameterName, int value ) throws OdaException
+	{
+	    final String context = "OdaQuery.setInt( " + parameterName + MSG_ARG_SEPARATOR + //$NON-NLS-1$ 
+						 value + MSG_LINE_SEPARATOR; 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfSetParamBeforePrepare();
+			
+			getQuery().setInt( parameterName, value );
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IQuery.setInt( String parameterName, int value )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void setInt( int parameterId, int value ) throws OdaException
+	{
+	    final String context = "OdaQuery.setInt( " + parameterId + MSG_ARG_SEPARATOR + //$NON-NLS-1$ 
+						 value + MSG_LINE_SEPARATOR;
+		logMethodCalled( context );
+		
+		try
+		{	
+			setContextClassloader();
+            throwIfSetParamBeforePrepare();
+			
+			getQuery().setInt( parameterId, value );
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, 
+								 "IQuery.setInt( int parameterId, int value )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void setDouble( String parameterName, double value )
+		throws OdaException
+	{
+	    final String context = "OdaQuery.setDouble( " + parameterName + MSG_ARG_SEPARATOR + //$NON-NLS-1$ 
+						 value + MSG_LINE_SEPARATOR; 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfSetParamBeforePrepare();
+			
+			getQuery().setDouble( parameterName, value );
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IQuery.setDouble( String parameterName, double value )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void setDouble( int parameterId, double value ) throws OdaException
+	{
+	    final String context = "OdaQuery.setDouble( " + parameterId + MSG_ARG_SEPARATOR + //$NON-NLS-1$ 
+						 value + MSG_LINE_SEPARATOR; 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfSetParamBeforePrepare();
+			
+			getQuery().setDouble( parameterId, value );
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IQuery.setDouble( int parameterId, double value )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void setBigDecimal( String parameterName, BigDecimal value )
+		throws OdaException
+	{
+	    final String context = "OdaQuery.setBigDecimal( " + parameterName + MSG_ARG_SEPARATOR + //$NON-NLS-1$ 
+						 value + MSG_LINE_SEPARATOR; 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfSetParamBeforePrepare();
+			
+			getQuery().setBigDecimal( parameterName, value );
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IQuery.setBigDecimal( String parameterName, BigDecimal value )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+	
+	public void setBigDecimal( int parameterId, BigDecimal value ) throws OdaException
+	{
+	    final String context = "OdaQuery.setBigDecimal( " + parameterId + MSG_ARG_SEPARATOR + //$NON-NLS-1$ 
+						 value + MSG_LINE_SEPARATOR; 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfSetParamBeforePrepare();
+			
+			getQuery().setBigDecimal( parameterId, value );
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IQuery.setBigDecimal( int parameterId, BigDecimal value )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+	
+	public void setString( String parameterName, String value )
+		throws OdaException
+	{
+	    final String context = "OdaQuery.setString( " + parameterName + MSG_ARG_SEPARATOR + //$NON-NLS-1$ 
+						 value + MSG_LINE_SEPARATOR;
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfSetParamBeforePrepare();
+			
+			getQuery().setString( parameterName, value );
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IQuery.setString( String parameterName, String value )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void setString( int parameterId, String value ) throws OdaException
+	{
+	    final String context = "OdaQuery.setString( " + parameterId + MSG_ARG_SEPARATOR + //$NON-NLS-1$ 
+						 value + MSG_LINE_SEPARATOR; 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfSetParamBeforePrepare();
+			
+			getQuery().setString( parameterId, value );
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IQuery.setString( int parameterId, String value )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void setDate( String parameterName, Date value ) throws OdaException
+	{
+	    final String context = "OdaQuery.setDate( " + parameterName + MSG_ARG_SEPARATOR + //$NON-NLS-1$ /
+						 value + MSG_LINE_SEPARATOR; 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfSetParamBeforePrepare();
+			
+			getQuery().setDate( parameterName, value );
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IQuery.setDate( String parameterName, Date value )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void setDate( int parameterId, Date value ) throws OdaException
+	{
+	    final String context = "OdaQuery.setDate( " + parameterId + MSG_ARG_SEPARATOR + //$NON-NLS-1$ 
+						 value + MSG_LINE_SEPARATOR; 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfSetParamBeforePrepare();
+			
+			getQuery().setDate( parameterId, value );
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, 
+								 "IQuery.setDate( int parameterId, Date value )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void setTime( String parameterName, Time value ) throws OdaException
+	{
+	    final String context = "OdaQuery.setTime( " + parameterName + MSG_ARG_SEPARATOR + //$NON-NLS-1$ 
+					 	 value + MSG_LINE_SEPARATOR; 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfSetParamBeforePrepare();
+			
+			getQuery().setTime( parameterName, value );
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, 
+								 "IQuery.setTime( String parameterName, Time value )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void setTime( int parameterId, Time value ) throws OdaException
+	{
+	    final String context = "OdaQuery.setTime( " + parameterId + MSG_ARG_SEPARATOR + //$NON-NLS-1$ 
+						 value + MSG_LINE_SEPARATOR; 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfSetParamBeforePrepare();
+			
+			getQuery().setTime( parameterId, value );
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IQuery.setTime( int parameterId, Time value )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void setTimestamp( String parameterName, Timestamp value )
+		throws OdaException
+	{
+	    final String context = "OdaQuery.setTimestamp( " + parameterName + MSG_ARG_SEPARATOR + //$NON-NLS-1$ 
+						 value + MSG_LINE_SEPARATOR; 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfSetParamBeforePrepare();
+			
+			getQuery().setTimestamp( parameterName, value );
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IQuery.setTimestamp( String parameterName, Timestamp value )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void setTimestamp( int parameterId, Timestamp value )
+		throws OdaException
+	{
+	    final String context = "OdaQuery.setTimestamp( " + parameterId + MSG_ARG_SEPARATOR + //$NON-NLS-1$ 
+						 value + MSG_LINE_SEPARATOR; 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+            throwIfSetParamBeforePrepare();
+			
+			getQuery().setTimestamp( parameterId, value );
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, 
+								 "IQuery.setTimestamp( int parameterId, Timestamp value )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setBoolean(java.lang.String, boolean)
+     */
+    public void setBoolean( String parameterName, boolean value )
+            throws OdaException
+    {
+        final String context = "OdaQuery.setBoolean( " + parameterName + MSG_ARG_SEPARATOR +  //$NON-NLS-1$ 
+                                value + MSG_LINE_SEPARATOR; 
+        final String unsupportedOpContext = "IQuery.setBoolean( String, boolean )"; //$NON-NLS-1$
+        logMethodCalled( context );
+        
+        try
+        {
+            setContextClassloader();
+            throwIfSetParamBeforePrepare();
+            
+            getQuery().setBoolean( parameterName, value );
+            
+            logMethodExit( context );
+        }
+        catch( AbstractMethodError err )
+        {
+            // this occurs because the underlying driver has not upgraded
+            // to implement this ODA 3.1 method
+            String msg = formatMethodNotImplementedMsg( unsupportedOpContext );
+            log( context, msg );
+            
+            handleUnsupportedOp( new UnsupportedOperationException( msg ), msg );
+        }
+        catch( UnsupportedOperationException uoException )
+        {
+            handleUnsupportedOp( uoException, unsupportedOpContext );
+        }
+        catch( RuntimeException rtException )
+        {
+            handleError( rtException );
+        }
+        catch( OdaException odaException )
+        {
+            handleError( odaException );
+        }
+        finally
+        {
+            resetContextClassloader();
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setBoolean(int, boolean)
+     */
+    public void setBoolean( int parameterId, boolean value )
+            throws OdaException
+    {
+        final String context = "OdaQuery.setBoolean( " + parameterId + MSG_ARG_SEPARATOR  //$NON-NLS-1$ 
+                                + value + MSG_LINE_SEPARATOR; 
+        final String unsupportedOpContext = "IQuery.setBoolean( int, boolean )"; //$NON-NLS-1$
+        logMethodCalled( context );
+
+        try
+        {   
+            setContextClassloader();
+            throwIfSetParamBeforePrepare();
+            
+            getQuery().setBoolean( parameterId, value );
+            
+            logMethodExit( context );
+        }
+        catch( AbstractMethodError err )
+        {
+            // this occurs because the underlying driver has not upgraded
+            // to implement this ODA 3.1 method
+            String msg = formatMethodNotImplementedMsg( unsupportedOpContext );
+            log( context, msg );
+            
+            handleUnsupportedOp( new UnsupportedOperationException( msg ), msg );
+        }
+        catch( UnsupportedOperationException uoException )
+        {
+            handleUnsupportedOp( uoException, unsupportedOpContext );
+        }
+        catch( RuntimeException rtException )
+        {
+            handleError( rtException );
+        }
+        catch( OdaException odaException )
+        {
+            handleError( odaException );
+        }
+        finally
+        {
+            resetContextClassloader();
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setObject(java.lang.String, java.lang.Object)
+     */
+    public void setObject( String parameterName, Object value ) throws OdaException
+    {
+        final String context = "OdaQuery.setObject( " + parameterName + MSG_ARG_SEPARATOR +  //$NON-NLS-1$ 
+                                value + MSG_LINE_SEPARATOR;
+        final String unsupportedOpContext = "IQuery.setObject( String, Object )"; //$NON-NLS-1$
+        logMethodCalled( context );
+        
+        try
+        {
+            setContextClassloader();
+            throwIfSetParamBeforePrepare();
+            
+            getQuery().setObject( parameterName, value );
+            
+            logMethodExit( context );
+        }
+        catch( AbstractMethodError err )
+        {
+            // this occurs because the underlying driver has not upgraded
+            // to implement this ODA 3.2 method
+            String msg = formatMethodNotImplementedMsg( unsupportedOpContext );
+            log( context, msg );
+            
+            handleUnsupportedOp( new UnsupportedOperationException( msg ), msg );
+        }
+        catch( UnsupportedOperationException uoException )
+        {
+            handleUnsupportedOp( uoException, unsupportedOpContext );
+        }
+        catch( RuntimeException rtException )
+        {
+            handleError( rtException );
+        }
+        catch( OdaException odaException )
+        {
+            handleError( odaException );
+        }
+        finally
+        {
+            resetContextClassloader();
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setObject(int, java.lang.Object)
+     */
+    public void setObject( int parameterId, Object value ) throws OdaException
+    {
+        final String context = "OdaQuery.setObject( " + parameterId + MSG_ARG_SEPARATOR  //$NON-NLS-1$
+                                + value + MSG_LINE_SEPARATOR; 
+        final String unsupportedOpContext = "IQuery.setObject( int, Object )"; //$NON-NLS-1$
+        logMethodCalled( context );
+
+        try
+        {   
+            setContextClassloader();
+            throwIfSetParamBeforePrepare();
+            
+            getQuery().setObject( parameterId, value );
+            
+            logMethodExit( context );
+        }
+        catch( AbstractMethodError err )
+        {
+            // this occurs because the underlying driver has not upgraded
+            // to implement this ODA 3.2 method
+            String msg = formatMethodNotImplementedMsg( unsupportedOpContext );
+            log( context, msg );
+            
+            handleUnsupportedOp( new UnsupportedOperationException( msg ), msg );
+        }
+        catch( UnsupportedOperationException uoException )
+        {
+            handleUnsupportedOp( uoException, unsupportedOpContext );
+        }
+        catch( RuntimeException rtException )
+        {
+            handleError( rtException );
+        }
+        catch( OdaException odaException )
+        {
+            handleError( odaException );
+        }
+        finally
+        {
+            resetContextClassloader();
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setNull(java.lang.String)
+     */
+    public void setNull( String parameterName ) throws OdaException
+    {
+        final String context = "OdaQuery.setNull( " + parameterName + MSG_LINE_SEPARATOR; //$NON-NLS-1$ 
+        final String unsupportedOpContext = "IQuery.setNull( String )"; //$NON-NLS-1$
+        logMethodCalled( context );
+        
+        try
+        {
+            setContextClassloader();
+            throwIfSetParamBeforePrepare();
+            
+            getQuery().setNull( parameterName );
+            
+            logMethodExit( context );
+        }
+        catch( AbstractMethodError err )
+        {
+            // this occurs because the underlying driver has not upgraded
+            // to implement this ODA 3.1 method
+            String msg = formatMethodNotImplementedMsg( unsupportedOpContext );
+            log( context, msg );
+            
+            handleUnsupportedOp( new UnsupportedOperationException( msg ), msg );
+        }
+        catch( UnsupportedOperationException uoException )
+        {
+            handleUnsupportedOp( uoException, unsupportedOpContext );
+        }
+        catch( RuntimeException rtException )
+        {
+            handleError( rtException );
+        }
+        catch( OdaException odaException )
+        {
+            handleError( odaException );
+        }
+        finally
+        {
+            resetContextClassloader();
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setNull(int)
+     */
+    public void setNull( int parameterId ) throws OdaException
+    {
+        final String context = "OdaQuery.setNull( " + parameterId + MSG_LINE_SEPARATOR; //$NON-NLS-1$ 
+        final String unsupportedOpContext = "IQuery.setNull( int )";  //$NON-NLS-1$
+        logMethodCalled( context );
+
+        try
+        {   
+            setContextClassloader();
+            throwIfSetParamBeforePrepare();
+            
+            getQuery().setNull( parameterId );
+            
+            logMethodExit( context );
+        }
+        catch( AbstractMethodError err )
+        {
+            // this occurs because the underlying driver has not upgraded
+            // to implement this ODA 3.1 method
+            String msg = formatMethodNotImplementedMsg( unsupportedOpContext );
+            log( context, msg );
+            
+            handleUnsupportedOp( new UnsupportedOperationException( msg ), msg );
+        }
+        catch( UnsupportedOperationException uoException )
+        {
+            handleUnsupportedOp( uoException, unsupportedOpContext );
+        }
+        catch( RuntimeException rtException )
+        {
+            handleError( rtException );
+        }
+        catch( OdaException odaException )
+        {
+            handleError( odaException );
+        }
+        finally
+        {
+            resetContextClassloader();
+        }       
+    }
+
+    public void clearInParameters() throws OdaException
+	{
+	    final String context = "OdaQuery.clearInParameters()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			getQuery().clearInParameters();
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, 
+			                     "IQuery.clearInParameters()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+	
+	public int findInParameter( String parameterName ) throws OdaException
+	{
+	    final String context = "OdaQuery.findInParameter( " + parameterName + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+						 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			if( ! isPreparedSuccessfully() )
+				throw newOdaException( Messages.helper_cannotGetParamMdBeforePrepare );
+			
+			int ret = getQuery().findInParameter( parameterName );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetZero( uoException,
+												  "IQuery.findInParameter( String parameterName )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnZero( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnZero( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public IParameterMetaData getParameterMetaData() throws OdaException
+	{
+	    final String context = "OdaQuery.getParameterMetaData()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			if( ! isPreparedSuccessfully() )
+				throw newOdaException( Messages.helper_cannotGetParamMdBeforePrepare );
+			
+			IParameterMetaData parameterMetaData = getQuery().getParameterMetaData();
+			
+			// null value means no parameters are defined on query
+			OdaParameterMetaData ret =
+				( parameterMetaData == null ) ? null :
+				new OdaParameterMetaData( parameterMetaData, getOdaConnection(),
+				                            switchContextClassloader(),
+											getDriverClassLoader() );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		// there may be two ways that the underlying driver may indicate that 
+		// the driver doesn't support the IParameterMetaData interface: 
+		// 1. returns a null for getParameterMetaData()
+		// 2. throws an UnsupportedOperationException or OdaException (ODA MySQL JDBC) 
+		//	  for getParameterMetaData()
+		catch( UnsupportedOperationException uoException )
+		{
+			// TODO handle backward compatibility of optional interface
+			handleUnsupportedOp( uoException,
+								 "IQuery.getParameterMetaData()" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			// TODO handle backward compatibility of optional interface
+			handleError( odaException );
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void setSortSpec( SortSpec sortBy ) throws OdaException
+	{
+	    final String context = "OdaQuery.setSortSpec( " + sortBy + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			if( ! isPreparedSuccessfully() )
+				throw newOdaException( 
+						Messages.helper_cannotSetSortSpecBeforePrepare );
+			
+			getQuery().setSortSpec( sortBy );
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, 
+					 			 "IQuery.setSortSpec( SortSpec sortBy )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public SortSpec getSortSpec() throws OdaException
+	{
+	    final String context = "OdaQuery.getSortSpec()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			SortSpec sortSpec = getQuery().getSortSpec();
+			
+			logMethodExitWithReturn( context, sortSpec );
+			return sortSpec;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, "IQuery.getSortSpec()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+		
+		// will never get here
+		return null;
+	}
+	
+	/* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#getSpecification()
+     */
+    public QuerySpecification getSpecification()
+    {
+        final String context = "OdaQuery.getSpecification()\t"; //$NON-NLS-1$
+        final String unsupportedOpContext = "IQuery.getSpecification()"; //$NON-NLS-1$
+        logMethodCalled( context );
+        
+        try
+        {
+            setContextClassloader();
+            
+            QuerySpecification querySpec = getQuery().getSpecification();
+            
+            logMethodExitWithReturn( context, querySpec );
+            return querySpec;
+        }
+        catch( AbstractMethodError err )
+        {
+            // this occurs because the underlying driver has not upgraded
+            // to implement this ODA 3.2 method
+            String msg = formatMethodNotImplementedMsg( unsupportedOpContext );
+            log( context, msg );
+            
+            return null;    // none is available
+        }
+        catch( UnsupportedOperationException uoException )
+        {
+            return null;    // none is available
+        }
+        catch( RuntimeException rtException )
+        {
+            handleError( rtException );
+        }
+        finally
+        {
+            resetContextClassloader();
+        }
+        
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setSpecification(org.eclipse.datatools.connectivity.oda.spec.QuerySpecification)
+     */
+    public void setSpecification( QuerySpecification querySpec )
+        throws OdaException, UnsupportedOperationException
+    {
+        final String context = "OdaQuery.setSpecification( " + querySpec + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+        final String unsupportedOpContext = "IQuery.setSpecification( QuerySpecification )"; //$NON-NLS-1$
+        logMethodCalled( context );
+        
+        try
+        {
+            setContextClassloader();
+            
+            getQuery().setSpecification( querySpec );
+            
+            logMethodExit( context );
+        }
+        catch( AbstractMethodError err )
+        {
+            // this occurs because the underlying driver has not upgraded
+            // to implement this ODA 3.2 method
+            String msg = formatMethodNotImplementedMsg( unsupportedOpContext );
+            log( context, msg );
+            
+            handleUnsupportedOp( new UnsupportedOperationException( msg ), msg );
+        }
+        catch( UnsupportedOperationException uoException )
+        {
+            handleUnsupportedOp( uoException, unsupportedOpContext ); 
+        }
+        catch( RuntimeException rtException )
+        {
+            handleError( rtException );
+        }
+        catch( OdaException odaException )
+        {
+            handleError( odaException );
+        }
+        finally
+        {
+            resetContextClassloader();
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#getEffectiveQueryText()
+     */
+    public String getEffectiveQueryText()
+    {
+        final String context = "OdaQuery.getEffectiveQueryText()\t"; //$NON-NLS-1$
+        final String unsupportedOpContext = "IQuery.getEffectiveQueryText()"; //$NON-NLS-1$
+        logMethodCalled( context );
+        
+        try
+        {
+            setContextClassloader();
+            
+            String effectiveQuery = getQuery().getEffectiveQueryText();
+            
+            logMethodExitWithReturn( context, effectiveQuery );
+            return effectiveQuery;
+        }
+        catch( AbstractMethodError err )
+        {
+            // this occurs because the underlying driver has not upgraded
+            // to implement this ODA 3.2 method
+            String msg = formatMethodNotImplementedMsg( unsupportedOpContext );
+            log( context, msg );
+            
+            return m_preparedText;    // returns the one successfully passed to #prepare w/o exception
+        }
+        catch( UnsupportedOperationException uoException )
+        {
+            return m_preparedText;    // returns the one successfully passed to #prepare w/o exception
+        }
+        catch( RuntimeException rtException )
+        {
+            handleError( rtException );
+        }
+        finally
+        {
+            resetContextClassloader();
+        }
+        
+        return m_preparedText;   // returns the one successfully passed to #prepare w/o exception
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#cancel()
+     */
+    public void cancel() throws OdaException, UnsupportedOperationException
+    {
+        final String context = "OdaQuery.cancel()\t"; //$NON-NLS-1$
+        final String unsupportedOpContext = "IQuery.cancel()"; //$NON-NLS-1$
+        logMethodCalled( context );
+        
+        try
+        {
+            setContextClassloader();
+            if( ! isExecuting() )
+                throw newOdaException( Messages.helper_cannotCancelNonExecQuery );
+           
+            getQuery().cancel();
+            
+            logMethodExit( context );
+        }
+        catch( AbstractMethodError err )
+        {
+            // this occurs because the underlying driver has not upgraded
+            // to implement this ODA 3.2 method
+            String msg = formatMethodNotImplementedMsg( unsupportedOpContext );
+            log( context, msg );
+            
+            handleUnsupportedOp( new UnsupportedOperationException( msg ), msg );
+        }
+        catch( UnsupportedOperationException uoException )
+        {
+            handleUnsupportedOp( uoException, unsupportedOpContext ); 
+        }
+        catch( RuntimeException rtException )
+        {
+            handleError( rtException );
+        }
+        catch( OdaException odaException )
+        {
+            handleError( odaException );
+        }
+        finally
+        {
+            resetContextClassloader();
+        }
+    }
+
+    public String getInterfaceName()
+	{
+		return IQuery.class.getName();
+	}
+
+    private void throwIfSetParamBeforePrepare() throws OdaException
+    {
+        if( ! isPreparedSuccessfully() )
+            throw newOdaException( Messages.helper_cannotSetParamBeforePrepare );
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaResultSet.java b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaResultSet.java
new file mode 100644
index 0000000..07c7c72
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaResultSet.java
@@ -0,0 +1,1287 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.helper;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+import java.sql.Time;
+import java.sql.Timestamp;
+
+import org.eclipse.datatools.connectivity.oda.IBlob;
+import org.eclipse.datatools.connectivity.oda.IClob;
+import org.eclipse.datatools.connectivity.oda.IResultSet;
+import org.eclipse.datatools.connectivity.oda.IResultSetMetaData;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.consumer.nls.Messages;
+
+/**
+ * OdaResultSet is the Oda wrapper for result sets.
+ */
+public class OdaResultSet extends OdaDriverObject implements IResultSet
+{
+    private static final String MSG_ARG_SEPARATOR = ", "; //$NON-NLS-1$
+    private static final String MSG_LINE_SEPARATOR = " )\t"; //$NON-NLS-1$
+
+    protected OdaResultSet( IResultSet resultSet, OdaConnection connection,
+							boolean switchContextClassloader,
+							ClassLoader driverClassLoader )
+	{
+		super( resultSet, connection, switchContextClassloader,
+			   driverClassLoader );
+		
+		final String context = "OdaResultSet.OdaResultSet( " + resultSet + //$NON-NLS-1$
+						 MSG_ARG_SEPARATOR + connection + MSG_LINE_SEPARATOR;
+		logMethodExitWithReturn( context, this );
+	}
+	
+	protected IResultSet getResultSet()
+	{
+		return (IResultSet) getObject();
+	}
+
+	//------------------------------------------------------------------
+	//	IResultSet public interface methods
+	//------------------------------------------------------------------	
+
+	public IResultSetMetaData getMetaData() throws OdaException
+	{
+		final String context = "OdaResultSet.getMetaData()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			IResultSetMetaData resultSetMetaData = getResultSet().getMetaData();
+				
+			OdaResultSetMetaData ret =
+				( resultSetMetaData == null ) ? null :
+				new OdaResultSetMetaData( resultSetMetaData, getOdaConnection(),
+				                          switchContextClassloader(),
+										  getDriverClassLoader() );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IResultSet.getMetaData()" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void close() throws OdaException
+	{
+		final String context = "OdaResultSet.close()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			getResultSet().close();
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IResultSet.close()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void setMaxRows( int max ) throws OdaException
+	{
+	    final String context = "OdaResultSet.setMaxRows( " + max + MSG_LINE_SEPARATOR; //$NON-NLS-1$ 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			getResultSet().setMaxRows( max );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, "IResultSet.setMaxRows( int max )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+		
+		logMethodExit( context );
+	}
+
+	public boolean next() throws OdaException
+	{
+	    final String context = "OdaResultSet.next()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		// this checking is to ensure that the established connection is still 
+		// active during fetch
+		if( ! getOdaConnection().isOpen() )
+		{
+			OdaException ex = newOdaException( Messages.helper_connectionIsInactive );
+			return handleErrorAndReturnFalse( ex );
+		}
+		
+		try
+		{
+			setContextClassloader();
+			
+			boolean ret = getResultSet().next();
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetFalse( uoException,
+												   "IResultSet.next()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnFalse( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnFalse( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public int getRow() throws OdaException
+	{
+	    final String context = "OdaResultSet.getRow()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			int ret = getResultSet().getRow();
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetZero( uoException,
+												  "IResultSet.getRow()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnZero( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnZero( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public String getString( int index ) throws OdaException
+	{
+	    final String context = "OdaResultSet.getString( " + index + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			String ret = getResultSet().getString( index );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetEmptyString( uoException,
+														 "IResultSet.getString( int index )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnEmptyString( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnEmptyString( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public String getString( String columnName ) throws OdaException
+	{
+	    final String context = "OdaResultSet.getString( " + columnName + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			String ret = getResultSet().getString( columnName );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetEmptyString( uoException,
+														 "IResultSet.getString( String columnName )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnEmptyString( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnEmptyString( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public int getInt( int index ) throws OdaException
+	{
+	    final String context = "OdaResultSet.getInt( " + index + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			int ret = getResultSet().getInt( index );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetZero( uoException,
+												  "IResultSet.getInt( int index )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnZero( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnZero( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public int getInt( String columnName ) throws OdaException
+	{
+	    final String context = "OdaResultSet.getInt( " + columnName + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			int ret = getResultSet().getInt( columnName );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetZero( uoException,
+												  "IResultSet.getInt( String columnName )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnZero( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnZero( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public double getDouble( int index ) throws OdaException
+	{
+	    final String context = "OdaResultSet.getDouble( " + index + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			double ret = getResultSet().getDouble( index );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetZero( uoException,
+												  "IResultSet.getDouble( int index )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnZero( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnZero( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public double getDouble( String columnName ) throws OdaException
+	{
+	    final String context = "OdaResultSet.getDouble( " + columnName + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			double ret = getResultSet().getDouble( columnName );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetZero( uoException,
+												  "IResultSet.getDouble( String columnName )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnZero( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnZero( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public BigDecimal getBigDecimal( int index ) throws OdaException
+	{
+	    final String context = "OdaResultSet.getBigDecimal( " + index + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			BigDecimal ret = getResultSet().getBigDecimal( index );
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IResultSet.getBigDecimal( int index )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+		
+		// we'll never get here.
+		return null;
+	}
+	
+	public BigDecimal getBigDecimal( String columnName ) throws OdaException
+	{
+	    final String context = "OdaResultSet.getBigDecimal( " + columnName + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			BigDecimal ret = getResultSet().getBigDecimal( columnName );
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IResultSet.getBigDecimal( String columnName )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+		
+		// we'll never get here.
+		return null;
+	}
+	
+	public Date getDate( int index ) throws OdaException
+	{
+	    final String context = "OdaResultSet.getDate( " + index + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			Date ret = getResultSet().getDate( index );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IResultSet.getDate( int index )" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public Date getDate( String columnName ) throws OdaException
+	{
+	    final String context = "OdaResultSet.getDate( " + columnName + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			Date ret = getResultSet().getDate( columnName );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IResultSet.getDate( String columnName )" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public Time getTime( int index ) throws OdaException
+	{
+	    final String context = "OdaResultSet.getTime( " + index + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			Time ret = getResultSet().getTime( index );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, 
+								 "IResultSet.getTime( int index )" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public Time getTime( String columnName ) throws OdaException
+	{
+	    final String context = "OdaResultSet.getTime( " + columnName + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			Time ret = getResultSet().getTime( columnName );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IResultSet.getTime( String columnName )" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public Timestamp getTimestamp( int index ) throws OdaException
+	{
+	    final String context = "OdaResultSet.getTimestamp( " + index + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			Timestamp ret = getResultSet().getTimestamp( index );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IResultSet.getTimestamp( int index )" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException exception )
+		{
+			handleError( exception );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public Timestamp getTimestamp( String columnName ) throws OdaException
+	{
+	    final String context = "OdaResultSet.getTimestamp( " + columnName + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			Timestamp ret = getResultSet().getTimestamp( columnName );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IResultSet.getTimestamp( String columnName )" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getBlob(int)
+     */
+    public IBlob getBlob( int index ) throws OdaException
+    {
+		final String context = "OdaResultSet.getBlob( " + index + MSG_LINE_SEPARATOR; //$NON-NLS-1$ 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			IBlob driverBlob = getResultSet().getBlob( index );
+			
+            // instantiate helper's wrapper object
+            IBlob ret = createBlobWrapper( driverBlob );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, "IResultSet.getBlob( int index )" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getBlob(java.lang.String)
+     */
+    public IBlob getBlob( String columnName ) throws OdaException
+    {
+        final String context = "OdaResultSet.getBlob( " + columnName + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			IBlob driverBlob = getResultSet().getBlob( columnName );
+			
+            // instantiate helper's wrapper object
+			IBlob ret = createBlobWrapper( driverBlob );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, "IResultSet.getBlob( String columnName )" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+    }
+
+    /** Instantiate helper's wrapper object
+     */
+    private IBlob createBlobWrapper( IBlob driverBlob )
+    {
+        return ( driverBlob == null ) ? null : 
+		    new OdaBlob( driverBlob, getOdaConnection(), 
+		            switchContextClassloader(), getDriverClassLoader());
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getClob(int)
+     */
+    public IClob getClob( int index ) throws OdaException
+    {
+        final String context = "OdaResultSet.getClob( " + index + MSG_LINE_SEPARATOR; //$NON-NLS-1$ 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			IClob driverClob = getResultSet().getClob( index );
+			
+            // instantiate helper's wrapper object
+			IClob ret = createClobWrapper( driverClob );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, "IResultSet.getClob( int index )" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getClob(java.lang.String)
+     */
+    public IClob getClob( String columnName ) throws OdaException
+    {
+        final String context = "OdaResultSet.getClob( " + columnName + MSG_LINE_SEPARATOR; //$NON-NLS-1$ 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			IClob driverClob = getResultSet().getClob( columnName );
+			
+            // instantiate helper's wrapper object
+			IClob ret = createClobWrapper( driverClob );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, "IResultSet.getClob( String columnName )" ); //$NON-NLS-1$
+			return null;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return null;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return null;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+    }
+    
+    /** Instantiate helper's wrapper object
+     */
+    private IClob createClobWrapper( IClob driverClob )
+    {
+        return ( driverClob == null ) ? null : 
+		    new OdaClob( driverClob, getOdaConnection(), 
+		            switchContextClassloader(), getDriverClassLoader());
+    }
+
+	/* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getBoolean(int)
+     */
+    public boolean getBoolean( int index ) throws OdaException
+    {
+        final String context = "OdaResultSet.getBoolean( " + index + MSG_LINE_SEPARATOR; //$NON-NLS-1$ 
+        final String unsupportedOpContext = "IResultSet.getBoolean( int )"; //$NON-NLS-1$
+        logMethodCalled( context );
+    
+        try
+        {
+            setContextClassloader();
+            
+            boolean ret = getResultSet().getBoolean( index );
+            
+            logMethodExitWithReturn( context, ret );
+            return ret;
+        }
+        catch( AbstractMethodError err )
+        {
+            // this occurs because the underlying driver has not upgraded
+            // to implement this ODA 3.1 method
+            String msg = formatMethodNotImplementedMsg( unsupportedOpContext );
+            log( context, msg );
+            
+            handleUnsupportedOp( new UnsupportedOperationException( msg ), msg );
+        }
+        catch( UnsupportedOperationException uoException )
+        {
+            handleUnsupportedOp( uoException, unsupportedOpContext );
+        }
+        catch( RuntimeException rtException )
+        {
+            handleError( rtException );
+        }
+        catch( OdaException odaException )
+        {
+            handleError( odaException );
+        }
+        finally
+        {
+            resetContextClassloader();
+        }
+        
+        return false;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getBoolean(java.lang.String)
+     */
+    public boolean getBoolean( String columnName ) throws OdaException
+    {
+        final String context = "OdaResultSet.getBoolean( " + columnName + MSG_LINE_SEPARATOR; //$NON-NLS-1$ 
+        final String unsupportedOpContext = "IResultSet.getBoolean( String )"; //$NON-NLS-1$
+        logMethodCalled( context );
+        
+        try
+        {
+            setContextClassloader();
+            
+            boolean ret = getResultSet().getBoolean( columnName );
+            
+            logMethodExitWithReturn( context, ret );
+            return ret;
+        }
+        catch( AbstractMethodError err )
+        {
+            // this occurs because the underlying driver has not upgraded
+            // to implement this ODA 3.1 method
+            String msg = formatMethodNotImplementedMsg( unsupportedOpContext );
+            log( context, msg );
+            
+            handleUnsupportedOp( new UnsupportedOperationException( msg ), msg );
+        }
+        catch( UnsupportedOperationException uoException )
+        {
+            handleUnsupportedOp( uoException, unsupportedOpContext );
+        }
+        catch( RuntimeException rtException )
+        {
+            handleError( rtException );
+        }
+        catch( OdaException odaException )
+        {
+            handleError( odaException );
+        }
+        finally
+        {
+            resetContextClassloader();
+        }
+        
+        return false;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getObject(int)
+     */
+    public Object getObject( int index ) throws OdaException
+    {
+        final String context = "OdaResultSet.getObject( " + index + MSG_LINE_SEPARATOR; //$NON-NLS-1$ 
+        final String unsupportedOpContext = "IResultSet.getObject( int )"; //$NON-NLS-1$
+        logMethodCalled( context );
+    
+        try
+        {
+            setContextClassloader();
+            
+            Object ret = getResultSet().getObject( index );
+            
+            logMethodExitWithReturn( context, ret );
+            return ret;
+        }
+        catch( AbstractMethodError err )
+        {
+            // this occurs because the underlying driver has not upgraded
+            // to implement this ODA 3.2 method
+            String msg = formatMethodNotImplementedMsg( unsupportedOpContext );
+            log( context, msg );
+            
+            handleUnsupportedOp( new UnsupportedOperationException( msg ), msg );
+        }
+        catch( UnsupportedOperationException uoException )
+        {
+            handleUnsupportedOp( uoException, unsupportedOpContext );
+        }
+        catch( RuntimeException rtException )
+        {
+            handleError( rtException );
+        }
+        catch( OdaException odaException )
+        {
+            handleError( odaException );
+        }
+        finally
+        {
+            resetContextClassloader();
+        }
+        
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getObject(java.lang.String)
+     */
+    public Object getObject( String columnName ) throws OdaException
+    {
+        final String context = "OdaResultSet.getObject( " + columnName + MSG_LINE_SEPARATOR; //$NON-NLS-1$ 
+        final String unsupportedOpContext = "IResultSet.getObject( String )"; //$NON-NLS-1$
+        logMethodCalled( context );
+        
+        try
+        {
+            setContextClassloader();
+            
+            Object ret = getResultSet().getObject( columnName );
+            
+            logMethodExitWithReturn( context, ret );
+            return ret;
+        }
+        catch( AbstractMethodError err )
+        {
+            // this occurs because the underlying driver has not upgraded
+            // to implement this ODA 3.2 method
+            String msg = formatMethodNotImplementedMsg( unsupportedOpContext );
+            log( context, msg );
+            
+            handleUnsupportedOp( new UnsupportedOperationException( msg ), msg );
+        }
+        catch( UnsupportedOperationException uoException )
+        {
+            handleUnsupportedOp( uoException, unsupportedOpContext );
+        }
+        catch( RuntimeException rtException )
+        {
+            handleError( rtException );
+        }
+        catch( OdaException odaException )
+        {
+            handleError( odaException );
+        }
+        finally
+        {
+            resetContextClassloader();
+        }
+        
+        return null;
+    }
+
+    public boolean wasNull() throws OdaException
+	{
+	    final String context = "OdaResultSet.wasNull()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			boolean ret = getResultSet().wasNull();
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetFalse( uoException,
+												   "IResultSet.wasNull()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnFalse( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnFalse( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public int findColumn( String columnName ) throws OdaException
+	{
+	    final String context = "OdaResultSet.findColumn( " + columnName + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			int ret = getResultSet().findColumn( columnName );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetZero( uoException,
+												  "IResultSet.findColumn( String columnName )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnZero( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnZero( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+	
+	//---------------------------------------------------------------
+	// Utility methods to encapsulate data type conversion.
+	
+	public String getBigDecimalAsString( int index ) throws OdaException
+	{
+	    final String context = "OdaResultSet.getBigDecimalAsString( " + index + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		BigDecimal decimal = getBigDecimal( index );
+		String ret = ( decimal == null ) ? null : decimal.toString();
+		
+		logMethodExitWithReturn( context, ret );
+		return ret;
+	}
+	
+	public String getBigDecimalAsString( String columnName ) throws OdaException
+	{
+	    final String context = "OdaResultSet.getBigDecimalAsString( " + columnName + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		BigDecimal decimal = getBigDecimal( columnName );
+		String ret = ( decimal == null ) ? null : decimal.toString();
+		
+		logMethodExitWithReturn( context, ret );
+		return ret;
+	}
+	
+	public String getDateAsString( int index ) throws OdaException
+	{
+	    final String context = "OdaResultSet.getDateAsString( " + index + MSG_LINE_SEPARATOR; //$NON-NLS-1$ 
+		logMethodCalled( context );
+		
+		Date date = getDate( index );
+		String ret = ( date == null ) ? null : date.toString();
+		
+		logMethodExitWithReturn( context, ret );
+		return ret;
+	}
+	
+	public String getDateAsString( String columnName ) throws OdaException
+	{
+	    final String context = "OdaResultSet.getDateAsString( " + columnName + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		Date date = getDate( columnName );
+		String ret = ( date == null ) ? null : date.toString();
+		
+		logMethodExitWithReturn( context, ret );
+		return ret;
+	}
+	
+	public String getTimeAsString( int index ) throws OdaException
+	{
+	    final String context = "OdaResultSet.getTimeAsString( " + index + MSG_LINE_SEPARATOR; //$NON-NLS-1$ 
+		logMethodCalled( context );
+		
+		Time time = getTime( index );
+		String ret = ( time == null ) ? null : time.toString();
+		
+		logMethodExitWithReturn( context, ret );
+		return ret;
+	}
+	
+	public String getTimeAsString( String columnName ) throws OdaException
+	{
+	    final String context = "OdaResultSet.getTimeAsString( " + columnName + MSG_LINE_SEPARATOR; //$NON-NLS-1$ 
+		logMethodCalled( context );
+		
+		Time time = getTime( columnName );
+		String ret = ( time == null ) ? null : time.toString();
+		
+		logMethodExitWithReturn( context, ret );
+		return ret;
+	}
+	
+	public String getTimestampAsString( int index ) throws OdaException
+	{
+	    final String context = "OdaResultSet.getTimestampAsString( " + index + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		Timestamp timestamp = getTimestamp( index );
+		String ret = ( timestamp == null ) ? null : timestamp.toString();
+		
+		logMethodExitWithReturn( context, ret );
+		return ret;
+	}
+	
+	public String getTimestampAsString( String columnName ) throws OdaException
+	{
+	    final String context = "OdaResultSet.getTimestampAsString( " + columnName + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		Timestamp timestamp = getTimestamp( columnName );
+		String ret = ( timestamp == null ) ? null : timestamp.toString();
+		
+		logMethodExitWithReturn( context, ret );
+		return ret;
+	}
+    
+    public String getClobAsString( int index ) throws OdaException
+    {
+        final String context = "OdaResultSet.getClobAsString( " + index + MSG_LINE_SEPARATOR; //$NON-NLS-1$ 
+        logMethodCalled( context );
+        
+        String ret = getClobAsStringImpl( getClob( index ), context );
+        
+        logMethodExitWithReturn( context, ret );
+        return ret;
+    }
+    
+    public String getClobAsString( String columnName ) throws OdaException
+    {
+        final String context = "OdaResultSet.getClobAsString( " + columnName + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+        logMethodCalled( context );
+        
+        String ret = getClobAsStringImpl( getClob( columnName ), context );
+
+        logMethodExitWithReturn( context, ret );
+        return ret;
+    }
+	
+	/*
+	 * Convenience method for the C++ hosts to determine the interface of 
+	 * the result set handle.
+	 */
+	public String getInterfaceName()
+	{
+		return IResultSet.class.getName();
+	}
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaResultSetMetaData.java b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaResultSetMetaData.java
new file mode 100644
index 0000000..f840fb1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaResultSetMetaData.java
@@ -0,0 +1,355 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.helper;
+
+import org.eclipse.datatools.connectivity.oda.IResultSetMetaData;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+/**
+ * OdaResultSetMetaData is the Oda wrapper for result set metadata.
+ */
+public class OdaResultSetMetaData extends OdaDriverObject
+								  implements IResultSetMetaData
+{
+	protected OdaResultSetMetaData( IResultSetMetaData resultSetMetaData,
+									OdaConnection connection,
+									boolean switchContextClassloader,
+									ClassLoader driverClassLoader )
+	{
+		super( resultSetMetaData, connection, switchContextClassloader,
+			   driverClassLoader );	
+		
+		final String context = "OdaResultSetMetaData.OdaResultSetMetaData( " + //$NON-NLS-1$
+						 resultSetMetaData + ", " + connection + " )\t"; //$NON-NLS-1$ //$NON-NLS-2$
+		logMethodCalled( context );
+	}
+	
+	private IResultSetMetaData getResultSetMetaData()
+	{
+		return (IResultSetMetaData) getObject();
+	}
+	
+	//------------------------------------------------------------------	
+	//	IResultSetMetaData public interface methods
+	//------------------------------------------------------------------
+	
+	public int getColumnCount() throws OdaException
+	{
+		final String context = "OdaResultSetMetaData.getColumnCount()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			int ret = getResultSetMetaData().getColumnCount();
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetZero( uoException,
+												  "IResultSetMetaData.getColumnCount()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnZero( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnZero( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public String getColumnName( int index ) throws OdaException
+	{
+		final String context = "OdaResultSetMetaData.getColumnName( " + //$NON-NLS-1$
+						 index + " )\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			String ret = getResultSetMetaData().getColumnName( index );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetEmptyString( uoException,
+														 "IResultSetMetaData.getColumnName( int index )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnEmptyString( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnEmptyString( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public String getColumnLabel( int index ) throws OdaException
+	{
+		final String context = "OdaResultSetMetaData.getColumnLabel( " + //$NON-NLS-1$
+						 index + " )\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			String ret = getResultSetMetaData().getColumnLabel( index );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetEmptyString( uoException,
+														 "IResultSetMetaData.getColumnLabel( int index )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnEmptyString( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnEmptyString( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public int getColumnType( int index ) throws OdaException
+	{
+		final String context = "OdaResultSetMetaData.getColumnType( " + //$NON-NLS-1$
+						 index + " )\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			int ret = getResultSetMetaData().getColumnType( index );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetZero( uoException,
+												  "IResultSetMetaData.getColumnType( int index )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnTypeNull( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnTypeNull( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public String getColumnTypeName( int index ) throws OdaException
+	{
+		final String context = "OdaResultSetMetaData.getColumnTypeName( " + //$NON-NLS-1$
+						 index + " )\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			String ret = getResultSetMetaData().getColumnTypeName( index );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetEmptyString( uoException,
+														 "IResultSetMetaData.getColumnTypeName( int index )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnEmptyString( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnEmptyString( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public int getColumnDisplayLength( int index ) throws OdaException
+	{
+		final String context = "OdaResultSetMetaData.getColumnDisplayLength( " + //$NON-NLS-1$
+						 index + " )\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			int ret = getResultSetMetaData().getColumnDisplayLength( index );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetZero( uoException,
+												  "IResultSetMetaData.getColumnDisplayLength( int index )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnZero( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnZero( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public int getPrecision( int index ) throws OdaException
+	{
+		final String context = "OdaResultSetMetaData.getPrecision( " + //$NON-NLS-1$
+						 index + " )\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			int ret = getResultSetMetaData().getPrecision( index );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetZero( uoException,
+												  "IResultSetMetaData.getPrecision( int index )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnNegOne( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnNegOne( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public int getScale( int index ) throws OdaException
+	{
+		final String context = "OdaResultSetMetaData.getScale( " + index + //$NON-NLS-1$
+						 " )\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			int ret = getResultSetMetaData().getScale( index );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetZero( uoException,
+												  "IResultSetMetaData.getScale( int index )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnNegOne( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnNegOne( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public int isNullable( int index ) throws OdaException
+	{
+		final String context = "OdaResultSetMetaData.isNullable( " + index + //$NON-NLS-1$
+						 " )\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			int ret = getResultSetMetaData().isNullable( index );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IResultSetMetaData.isNullable( int index )" ); //$NON-NLS-1$
+			return IResultSetMetaData.columnNullableUnknown;
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+			return IResultSetMetaData.columnNullableUnknown;
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+			return IResultSetMetaData.columnNullableUnknown;
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaRowSet.java b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaRowSet.java
new file mode 100644
index 0000000..4fac0ee
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaRowSet.java
@@ -0,0 +1,982 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.helper;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+import java.sql.Time;
+import java.sql.Timestamp;
+
+import org.eclipse.datatools.connectivity.oda.IParameterRowSet;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+/**
+ * OdaRowSet is the Oda wrapper for rowsets.
+ */
+public class OdaRowSet extends OdaResultSet implements IParameterRowSet
+{
+    private static final String MSG_ARG_SEPARATOR = ", "; //$NON-NLS-1$
+    private static final String MSG_LINE_SEPARATOR = " )\t"; //$NON-NLS-1$
+
+    protected OdaRowSet( IParameterRowSet rowSet, OdaConnection connection,
+						 boolean switchContextClassloader,
+						 ClassLoader driverClassLoader )
+	{
+		super( rowSet, connection, switchContextClassloader,
+			   driverClassLoader );
+		
+		final String context = "OdaRowSet.OdaRowSet( " + rowSet + MSG_ARG_SEPARATOR + //$NON-NLS-1$ 
+						 connection + MSG_LINE_SEPARATOR; 
+		logMethodExitWithReturn( context, this );
+	}
+	
+	private IParameterRowSet getRowSet()
+	{
+		return (IParameterRowSet) getResultSet();
+	}
+
+	//------------------------------------------------------------------
+	//	IParameterRowSet public interface methods
+	//------------------------------------------------------------------
+
+	public boolean absolute( int rowIndex ) throws OdaException
+	{
+		final String context = "OdaRowSet.absolute( " + rowIndex + MSG_LINE_SEPARATOR; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			boolean ret = getRowSet().absolute( rowIndex );
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetFalse( uoException,
+												   "IParameterRowSet.absolute( int rowIndex )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnFalse( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnFalse( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public boolean previous() throws OdaException
+	{
+		final String context = "OdaRowSet.previous()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			boolean ret = getRowSet().previous();
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetFalse( uoException,
+												   "IParameterRowSet.previous()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnFalse( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnFalse( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public int add() throws OdaException
+	{
+		final String context = "OdaRowSet.add()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			int ret = getRowSet().add();
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetZero( uoException,
+												  "IParameterRowSet.add()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnZero( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnZero( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void clear() throws OdaException
+	{
+		final String context = "OdaRowSet.clear()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			getRowSet().clear();
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IParameterRowSet.clear()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public boolean isEmpty() throws OdaException
+	{
+		final String context = "OdaRowSet.isEmpty()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			boolean ret = getRowSet().isEmpty();
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetFalse( uoException,
+												   "IParameterRowSet.isEmpty()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnFalse( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnFalse( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public int size() throws OdaException
+	{
+		final String context = "OdaRowSet.size()\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			int ret = getRowSet().size();
+			
+			logMethodExitWithReturn( context, ret );
+			return ret;
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			return handleUnsupportedOpAndRetZero( uoException,
+												  "IParameterRowSet.size()" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			return handleErrorAndReturnZero( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			return handleErrorAndReturnZero( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void setInt( int columnIndex, int value ) throws OdaException
+	{
+		final String context = "OdaRowSet.setInt( " + columnIndex + MSG_ARG_SEPARATOR + //$NON-NLS-1$ 
+						 value + MSG_LINE_SEPARATOR; 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			getRowSet().setInt( columnIndex, value );
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IParameterRowSet.setint( int columnIndex, int value )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void setInt( String columnName, int value ) throws OdaException
+	{
+		final String context = "OdaRowSet.setInt( " + columnName + MSG_ARG_SEPARATOR + //$NON-NLS-1$ 
+						 value + ")\t"; //$NON-NLS-1$
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			getRowSet().setInt( columnName, value );
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IParameterRowSet.setInt( String columnName, int value )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void setDouble( int columnIndex, double value ) throws OdaException
+	{
+		final String context = "OdaRowSet.setDouble( " + columnIndex + MSG_ARG_SEPARATOR + //$NON-NLS-1$ 
+						 value + MSG_LINE_SEPARATOR; 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			getRowSet().setDouble( columnIndex, value );
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IParameterRowSet.setDouble( int columnIndex, double value )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void setDouble( String columnName, double value ) throws OdaException
+	{
+		final String context = "OdaRowSet.setDouble( " + columnName + MSG_ARG_SEPARATOR + //$NON-NLS-1$ 
+						 value + MSG_LINE_SEPARATOR; 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			getRowSet().setDouble( columnName, value );		
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IParameterRowSet.setDouble( String columnName, double value )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void setBigDecimal( int columnIndex, BigDecimal value ) throws OdaException
+	{
+		final String context = "OdaRowSet.setBigDecimal( " + columnIndex + MSG_ARG_SEPARATOR + //$NON-NLS-1$ 
+						 value + MSG_LINE_SEPARATOR;
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			getRowSet().setBigDecimal( columnIndex, value );
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IParameterRowSet.setBigDecimal( int columnIndex, BigDecimal value )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+	
+	public void setBigDecimal( String columnName, BigDecimal value ) throws OdaException
+	{
+		final String context = "OdaRowSet.setBigDecimal( " + columnName + MSG_ARG_SEPARATOR + //$NON-NLS-1$ 
+						 value + MSG_LINE_SEPARATOR; 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			getRowSet().setBigDecimal( columnName, value );
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IParameterRowSet.setBigDecimal( String columnName, BigDecimal value )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+	
+	public void setString( int columnIndex, String value ) throws OdaException
+	{
+		final String context = "OdaRowSet.setString( " + columnIndex + MSG_ARG_SEPARATOR + //$NON-NLS-1$ 
+						 value + MSG_LINE_SEPARATOR; 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			getRowSet().setString( columnIndex, value );
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IParameterRowSet.setString( int columnIndex, String value )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void setString( String columnName, String value ) throws OdaException
+	{
+		final String context = "OdaRowSet.setString( " + columnName + MSG_ARG_SEPARATOR + //$NON-NLS-1$ 
+						 value + MSG_LINE_SEPARATOR; 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			getRowSet().setString( columnName, value );
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException, 
+								 "IParameterRowSet.setString( String columnName, String value )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void setDate( int columnIndex, Date value ) throws OdaException
+	{
+		final String context = "OdaRowSet.setDate( " + columnIndex + MSG_ARG_SEPARATOR + //$NON-NLS-1$
+						 value + MSG_LINE_SEPARATOR; 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			getRowSet().setDate( columnIndex, value );
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IParameterRowSet.setDate( int columnIndex, Date value )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void setDate( String columnName, Date value ) throws OdaException
+	{
+		final String context = "OdaRowSet.setDate( " + columnName + MSG_ARG_SEPARATOR + //$NON-NLS-1$ 
+						 value + MSG_LINE_SEPARATOR; 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			getRowSet().setDate( columnName, value );
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IParameterRowSet.setDate( String columnName, Date value )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void setTime( int columnIndex, Time value ) throws OdaException
+	{
+		final String context = "OdaRowSet.setTime( " + columnIndex + MSG_ARG_SEPARATOR + //$NON-NLS-1$ 
+						 value + MSG_LINE_SEPARATOR; 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			getRowSet().setTime( columnIndex, value );
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IParameterRowSet.setTime( int columnIndex, Time value )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void setTime( String columnName, Time value ) throws OdaException
+	{
+		final String context = "OdaRowSet.setTime( " + columnName + MSG_ARG_SEPARATOR + //$NON-NLS-1$ 
+						 value + MSG_LINE_SEPARATOR;
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			getRowSet().setTime( columnName, value );
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IParameterRowSet.setTime( String columnName, Time value )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void setTimestamp( int columnIndex, Timestamp value ) throws OdaException
+	{
+		final String context = "OdaRowSet.setTimestamp( " + columnIndex + MSG_ARG_SEPARATOR + //$NON-NLS-1$ 
+						 value + MSG_LINE_SEPARATOR; 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			getRowSet().setTimestamp( columnIndex, value );
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IParameterRowSet.setTimestamp( int columnIndex, Timestamp value )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+	public void setTimestamp( String columnName, Timestamp value ) throws OdaException
+	{
+		final String context = "OdaRowSet.setTimestamp( " + columnName + MSG_ARG_SEPARATOR + //$NON-NLS-1$
+						 value + MSG_LINE_SEPARATOR; 
+		logMethodCalled( context );
+		
+		try
+		{
+			setContextClassloader();
+			
+			getRowSet().setTimestamp( columnName, value );
+			
+			logMethodExit( context );
+		}
+		catch( UnsupportedOperationException uoException )
+		{
+			handleUnsupportedOp( uoException,
+								 "IParameterRowSet.setTimestamp( String columnName, Timestamp value )" ); //$NON-NLS-1$
+		}
+		catch( RuntimeException rtException )
+		{
+			handleError( rtException );
+		}
+		catch( OdaException odaException )
+		{
+			handleError( odaException );
+		}
+		finally
+		{
+			resetContextClassloader();
+		}
+	}
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IParameterRowSet#setBoolean(int, boolean)
+     */
+    public void setBoolean( int columnIndex, boolean value )
+            throws OdaException
+    {
+        final String context = "OdaRowSet.setBoolean( " + columnIndex + MSG_ARG_SEPARATOR  //$NON-NLS-1$ 
+                                + value + MSG_LINE_SEPARATOR; 
+        final String unsupportedOpContext = "IParameterRowSet.setBoolean( int, boolean )"; //$NON-NLS-1$
+        logMethodCalled( context );
+        
+        try
+        {
+            setContextClassloader();
+            
+            getRowSet().setBoolean( columnIndex, value );
+            
+            logMethodExit( context );
+        }
+        catch( AbstractMethodError err )
+        {
+            // this occurs because the underlying driver has not upgraded
+            // to implement this ODA 3.1 method
+            String msg = formatMethodNotImplementedMsg( unsupportedOpContext );
+            log( context, msg );
+            
+            handleUnsupportedOp( new UnsupportedOperationException( msg ), msg );
+        }
+        catch( UnsupportedOperationException uoException )
+        {
+            handleUnsupportedOp( uoException, unsupportedOpContext );
+        }
+        catch( RuntimeException rtException )
+        {
+            handleError( rtException );
+        }
+        catch( OdaException odaException )
+        {
+            handleError( odaException );
+        }
+        finally
+        {
+            resetContextClassloader();
+        }        
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IParameterRowSet#setBoolean(java.lang.String, boolean)
+     */
+    public void setBoolean( String columnName, boolean value )
+            throws OdaException
+    {
+        final String context = "OdaRowSet.setBoolean( " + columnName + MSG_ARG_SEPARATOR  //$NON-NLS-1$ 
+                                + value + MSG_LINE_SEPARATOR; 
+        final String unsupportedOpContext = "IParameterRowSet.setBoolean( String, boolean )"; //$NON-NLS-1$        
+        logMethodCalled( context );
+        
+        try
+        {
+            setContextClassloader();
+            
+            getRowSet().setBoolean( columnName, value );
+            
+            logMethodExit( context );
+        }
+        catch( AbstractMethodError err )
+        {
+            // this occurs because the underlying driver has not upgraded
+            // to implement this ODA 3.1 method
+            String msg = formatMethodNotImplementedMsg( unsupportedOpContext );
+            log( context, msg );
+            
+            handleUnsupportedOp( new UnsupportedOperationException( msg ), msg );
+        }
+        catch( UnsupportedOperationException uoException )
+        {
+            handleUnsupportedOp( uoException, unsupportedOpContext );
+        }
+        catch( RuntimeException rtException )
+        {
+            handleError( rtException );
+        }
+        catch( OdaException odaException )
+        {
+            handleError( odaException );
+        }
+        finally
+        {
+            resetContextClassloader();
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IParameterRowSet#setObject(int, java.lang.Object)
+     */
+    public void setObject( int columnIndex, Object value ) throws OdaException
+    {
+        final String context = "OdaRowSet.setObject( " + columnIndex + MSG_ARG_SEPARATOR //$NON-NLS-1$ 
+                                + value + MSG_LINE_SEPARATOR; 
+        final String unsupportedOpContext = "IParameterRowSet.setObject( int, Object )"; //$NON-NLS-1$
+        logMethodCalled( context );
+
+        try
+        {
+            setContextClassloader();
+
+            getRowSet().setObject( columnIndex, value );
+
+            logMethodExit( context );
+        }
+        catch( AbstractMethodError err )
+        {
+            // this occurs because the underlying driver has not upgraded
+            // to implement this ODA 3.2 method
+            String msg = formatMethodNotImplementedMsg( unsupportedOpContext );
+            log( context, msg );
+
+            handleUnsupportedOp( new UnsupportedOperationException( msg ), msg );
+        }
+        catch( UnsupportedOperationException uoException )
+        {
+            handleUnsupportedOp( uoException, unsupportedOpContext );
+        }
+        catch( RuntimeException rtException )
+        {
+            handleError( rtException );
+        }
+        catch( OdaException odaException )
+        {
+            handleError( odaException );
+        }
+        finally
+        {
+            resetContextClassloader();
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IParameterRowSet#setObject(java.lang.String, java.lang.Object)
+     */
+    public void setObject( String columnName, Object value )
+            throws OdaException
+    {
+        final String context = "OdaRowSet.setObject( " + columnName + MSG_ARG_SEPARATOR //$NON-NLS-1$ 
+                                + value + MSG_LINE_SEPARATOR; 
+        final String unsupportedOpContext = "IParameterRowSet.setObject( String, Object )"; //$NON-NLS-1$        
+        logMethodCalled( context );
+
+        try
+        {
+            setContextClassloader();
+
+            getRowSet().setObject( columnName, value );
+
+            logMethodExit( context );
+        }
+        catch( AbstractMethodError err )
+        {
+            // this occurs because the underlying driver has not upgraded
+            // to implement this ODA 3.2 method
+            String msg = formatMethodNotImplementedMsg( unsupportedOpContext );
+            log( context, msg );
+
+            handleUnsupportedOp( new UnsupportedOperationException( msg ), msg );
+        }
+        catch( UnsupportedOperationException uoException )
+        {
+            handleUnsupportedOp( uoException, unsupportedOpContext );
+        }
+        catch( RuntimeException rtException )
+        {
+            handleError( rtException );
+        }
+        catch( OdaException odaException )
+        {
+            handleError( odaException );
+        }
+        finally
+        {
+            resetContextClassloader();
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IParameterRowSet#setNull(int)
+     */
+    public void setNull( int columnIndex ) throws OdaException
+    {
+        final String context = "OdaRowSet.setNull( " + columnIndex + MSG_LINE_SEPARATOR;  //$NON-NLS-1$ 
+        final String unsupportedOpContext = "IParameterRowSet.setNull( int )"; //$NON-NLS-1$                        
+        logMethodCalled( context );
+        
+        try
+        {
+            setContextClassloader();
+            
+            getRowSet().setNull( columnIndex );
+            
+            logMethodExit( context );
+        }
+        catch( AbstractMethodError err )
+        {
+            // this occurs because the underlying driver has not upgraded
+            // to implement this ODA 3.1 method
+            String msg = formatMethodNotImplementedMsg( unsupportedOpContext );
+            log( context, msg );
+            
+            handleUnsupportedOp( new UnsupportedOperationException( msg ), msg );
+        }
+        catch( UnsupportedOperationException uoException )
+        {
+            handleUnsupportedOp( uoException, unsupportedOpContext );
+        }
+        catch( RuntimeException rtException )
+        {
+            handleError( rtException );
+        }
+        catch( OdaException odaException )
+        {
+            handleError( odaException );
+        }
+        finally
+        {
+            resetContextClassloader();
+        }        
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IParameterRowSet#setNull(java.lang.String)
+     */
+    public void setNull( String columnName ) throws OdaException
+    {
+        final String context = "OdaRowSet.setNull( " + columnName + MSG_LINE_SEPARATOR;  //$NON-NLS-1$ 
+        final String unsupportedOpContext = "IParameterRowSet.setNull( String )"; //$NON-NLS-1$                
+        logMethodCalled( context );
+        
+        try
+        {
+            setContextClassloader();
+            
+            getRowSet().setNull( columnName );
+            
+            logMethodExit( context );
+        }
+        catch( AbstractMethodError err )
+        {
+            // this occurs because the underlying driver has not upgraded
+            // to implement this ODA 3.1 method
+            String msg = formatMethodNotImplementedMsg( unsupportedOpContext );
+            log( context, msg );
+            
+            handleUnsupportedOp( new UnsupportedOperationException( msg ), msg );
+        }
+        catch( UnsupportedOperationException uoException )
+        {
+            handleUnsupportedOp( uoException, unsupportedOpContext );
+        }
+        catch( RuntimeException rtException )
+        {
+            handleError( rtException );
+        }
+        catch( OdaException odaException )
+        {
+            handleError( odaException );
+        }
+        finally
+        {
+            resetContextClassloader();
+        }
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaSortSpecHelper.java b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaSortSpecHelper.java
new file mode 100644
index 0000000..4e5ae61
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/OdaSortSpecHelper.java
@@ -0,0 +1,120 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.helper;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.SortSpec;
+
+/**
+ * OdaSortSpecHelper is a consumer helper for handling SortSpec. 
+ */
+public final class OdaSortSpecHelper
+{
+	private OdaSortSpecHelper()
+	{
+		// not meant to be instantiated
+	}
+	
+	/**
+	 * @deprecated	Replaced by {@link #addSortKey(OdaQuery, String, int)}
+	 */
+	public static void addSortKey( OdaQuery statement,
+								   String columnName,
+								   int sortOrder,
+								   String localeString ) throws OdaException
+    {
+		addSortKey( statement, columnName, sortOrder );
+    }
+	
+	/**
+	 * Adds a sort key on the specified column to the given query.
+	 * @param query		a query that retrieves the result set containing the 
+	 * 					specified column
+	 * @param columnName	the name of a result set column to apply 
+	 * 				dynamic sorting. The specified column should be one 
+	 * 				of the columns retrieved by the given query.
+	 * @param sortOrder represents the sorting order; one of sortAsc, sortDesc.
+	 * @throws OdaException
+	 */
+	public static void addSortKey( OdaQuery query,
+									String columnName,
+									int sortOrder ) throws OdaException
+	{
+		SortSpec sortSpec = query.getSortSpec();
+		if( sortSpec != null )
+		{
+			sortSpec.addSortKey( columnName, sortOrder );
+			return;
+		}
+
+		int sortMode = query.getDSMetaData().getSortMode();
+		sortSpec = new SortSpec( sortMode );
+		sortSpec.addSortKey( columnName, sortOrder );
+		query.setSortSpec( sortSpec );
+	}
+	
+	/**
+	 * @deprecated	Replaced by {@link #addSortKey(OdaAdvancedQuery, String, String, int)}
+	 */
+	public static void addSortKey( OdaAdvancedQuery statement,
+								   String resultSetName,
+								   String columnName,
+								   int sortOrder,
+								   String localeString ) throws OdaException
+	{
+		addSortKey( statement, resultSetName, columnName, sortOrder );
+	}
+	
+	/**
+	 * Adds a sort key on the specified result set column to the given query.
+	 * @param query		a query that retrieves the result set containing the 
+	 * 					specified column
+	 * @param resultSetName	the name that identifies one of the query's result sets
+	 * @param columnName	the name of a result set column to apply 
+	 * 				dynamic sorting. The specified column should be one 
+	 * 				of the columns in the given query's named result set
+	 * @param sortOrder represents the sorting order; one of sortAsc, sortDesc.
+	 * @throws OdaException
+	 */
+	public static void addSortKey( OdaAdvancedQuery query,
+								   String resultSetName,
+								   String columnName,
+								   int sortOrder ) throws OdaException
+	{
+		SortSpec sortSpec = query.getSortSpec( resultSetName );
+		if( sortSpec != null )
+		{
+			sortSpec.addSortKey( columnName, sortOrder );
+			return;
+		}
+		
+		int sortMode = query.getDSMetaData().getSortMode();
+		sortSpec = new SortSpec( sortMode );
+		sortSpec.addSortKey( columnName, sortOrder );
+		query.setSortSpec( resultSetName, sortSpec );
+	}
+	
+	public static void resetSortKeys( OdaQuery statement ) throws OdaException
+	{
+		statement.setSortSpec( null );
+	}
+	
+	public static void resetSortKeys( OdaAdvancedQuery statement,
+									  String resultSetName ) throws OdaException
+	{
+		statement.setSortSpec( resultSetName, null );
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/package.html b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/package.html
new file mode 100644
index 0000000..a20cb2b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/helper/package.html
@@ -0,0 +1,37 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2004, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+
+[<b>Non-API</b>] An ODA consumer helper package that assists an ODA consumer application 
+to manage the diverse capabilities and behavior of individual ODA data drivers.
+<p>
+It implements the ODA run-time interfaces, and encapsulates the application logic to 
+manage the interaction between an ODA consumer and the 
+ODA providers.
+<p>
+Note: <i>The implementation class methods are <b>not</b> public APIs.  
+<br>Backward compatibility support in future releases is not guaranteed.</i>
+
+<!-- Put @see and @since tags down here. -->
+@since 3.0
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/internal/impl/LogConfigHelper.java b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/internal/impl/LogConfigHelper.java
new file mode 100644
index 0000000..f1f1fc6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/internal/impl/LogConfigHelper.java
@@ -0,0 +1,184 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.internal.impl;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.oda.LogConfiguration;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ExtensionManifest;
+import org.eclipse.datatools.connectivity.oda.util.manifest.TraceLogging;
+
+/**
+ * Internal helper of the oda consumer component for handling
+ * trace log configuration. 
+ */
+public class LogConfigHelper
+{
+    private ExtensionManifest m_driverManifest;
+
+    /**
+     * Constructor of a helper for the specified ODA driver's manifest.
+     * @param driverManifest    an ODA runtime extension's manifest
+     */
+    public LogConfigHelper( ExtensionManifest driverManifest )
+        throws OdaException
+    {
+        if( driverManifest == null )
+            throw new OdaException( new IllegalArgumentException() );
+        
+        m_driverManifest = driverManifest;
+    }
+    
+    /**
+     * Returns the plug-in trace logging configuration from 
+     * the .options file if set to debugging; otherwise,  
+     * from the driver's traceLogging element defined in its ODA extension.
+     * @return  the driver's log configuration, or null if none is found
+     */
+    public LogConfiguration getDriverLogConfiguration()
+    {
+        // get log configuration specified in plug-in .options file
+        LogConfiguration logOptions = createLogConfigFromTraceOptions();
+        if( logOptions != null )
+            return logOptions;  // done
+
+        // no trace options are set for ODA driver;
+        // get log configuration specified in the 
+        // driver's trace logging element in plug-in manifest        
+        return createLogConfigFromTraceLogging();
+    }
+    
+    /* 
+     * Gets the plug-in trace logging configuration  
+     * from the PDE .options file 
+     */
+    private LogConfiguration createLogConfigFromTraceOptions()
+    {
+        String pluginId = getDriverPluginId();    
+        
+        String debugOption = pluginId + "/debug"; //$NON-NLS-1$
+        String debugOptionValue = Platform.getDebugOption( debugOption );
+        Boolean isDebug = Boolean.valueOf( debugOptionValue );
+        if( isDebug == Boolean.FALSE )
+            return null;    // not found or not debugging
+        
+        String logLevelOption = pluginId + "/traceLogging/logLevel"; //$NON-NLS-1$
+        int logLevel = TraceLogging.toLogLevelNumber( 
+                            Platform.getDebugOption( logLevelOption ) );
+        
+        String logFormatterOption = pluginId + "/traceLogging/logFormatterClass"; //$NON-NLS-1$
+        String logFilePrefixOption = pluginId + "/traceLogging/logFileNamePrefix"; //$NON-NLS-1$
+        String logDirOption = pluginId + "/traceLogging/logDirectory"; //$NON-NLS-1$
+        
+        // set default configuration values if not specified
+        String logFilenamePrefix = Platform.getDebugOption( logFilePrefixOption );
+        String logDest = Platform.getDebugOption( logDirOption );
+        
+        // if either log file attribute has value, ensure
+        // both attributes have values, using default value as needed
+        if( isNotEmpty( logFilenamePrefix ) || isNotEmpty( logDest ) )
+        {
+            logFilenamePrefix = getDefaultLogFilenamePrefix( logFilenamePrefix );
+
+            // ensure that either user-defined or default log directory
+            // has an absolute path
+            logDest = LogPathHelper.getAbsoluteLogDirName( 
+                        getDefaultLogDirectory( logDest ) );
+        }
+
+
+        // instantiate object with log configuration values
+        return new LogConfiguration( pluginId, 
+                            logLevel,
+                            logDest,
+                            logFilenamePrefix,
+                            Platform.getDebugOption( logFormatterOption ) );
+    }
+        
+    /*
+     * Gets the plug-in trace logging configuration settings 
+     * from the plugin.xml traceLogging element
+     */
+    private LogConfiguration createLogConfigFromTraceLogging()
+    {
+        ExtensionManifest manifest = m_driverManifest;       
+        assert( manifest != null );
+        TraceLogging loggingElement = manifest.getTraceLogging();
+        if( loggingElement == null )
+            return null;    // none found
+        
+        // set default configuration values if not specified
+        String logFilenamePrefix = loggingElement.getLogFileNamePrefix();
+        String logDest = loggingElement.getLogDirectory();
+        
+        // if either log file attribute has value, ensure
+        // both attributes have values, using default value as needed
+        if( isNotEmpty( logFilenamePrefix ) || isNotEmpty( logDest ) )
+        {
+            logFilenamePrefix = getDefaultLogFilenamePrefix( logFilenamePrefix );
+
+            // ensure that either user-defined or default log directory
+            // has an absolute path
+            logDest = LogPathHelper.getAbsoluteLogDirName( 
+                        getDefaultLogDirectory( logDest ) );
+        }
+
+        // instantiate object with log configuration values
+        return new LogConfiguration( getDriverPluginId(), 
+                            loggingElement.getLogLevel(),
+                            logDest,
+                            logFilenamePrefix,
+                            loggingElement.getLogFormatterClass() );
+    }
+
+    /*
+     * Returns the default configuration value if 
+     * the given log filename prefix is not specified
+     */
+    private String getDefaultLogFilenamePrefix( String prefix )
+    {
+        if( isNotEmpty( prefix ) )
+            return prefix;  // already specified, use as is
+        return getDriverPluginId();
+    }
+    
+    /*
+     * Returns the driver name as the default relative folder name if 
+     * the given log directory is not specified
+     */
+    private String getDefaultLogDirectory( String logDir )
+    {
+        if( isNotEmpty( logDir ) )
+            return logDir;  // already specified, use as is
+        return getDriverPluginId();
+    }
+    
+    private String getDriverPluginId()
+    {
+        assert( m_driverManifest != null );
+        return m_driverManifest.getNamespace();
+    }
+    
+    private boolean isNullOrEmpty( String value )
+    {
+        return ( value == null || value.length() == 0 );
+    }    
+    
+    private boolean isNotEmpty( String value )
+    {
+        return ! isNullOrEmpty( value );
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/internal/impl/LogPathHelper.java b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/internal/impl/LogPathHelper.java
new file mode 100644
index 0000000..2287947
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/internal/impl/LogPathHelper.java
@@ -0,0 +1,143 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.internal.impl;
+
+import java.io.File;
+import java.net.URI;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.datatools.connectivity.oda.consumer.helper.OdaConsumerPlugin;
+import org.eclipse.datatools.connectivity.oda.consumer.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.util.ResourceIdentifiers;
+
+/**
+ * Internal helper of the oda consumer component to determine 
+ * its trace logging path. 
+ */
+public class LogPathHelper
+{
+    private static final String LOG_SUBFOLDER_NAME = "logs"; //$NON-NLS-1$
+    private static final String BUNDLE_NAME = "org.eclipse.datatools.connectivity.oda.consumer"; //$NON-NLS-1$
+    
+    private static IPath sm_consumerLogPath = null;
+    
+    /**
+     * Returns the plugin's default log parent file
+     * under its workspace state location.
+     * @param resourceIdentifiers resource identifiers for resolving the log path, if exists and applicable
+     * @return	the plugin's log path
+     * @throws  IllegalStateException when the plugin activator 
+     * 					is not instantiated yet
+     */
+    static IPath getPluginLogPath( ResourceIdentifiers resourceIdentifiers ) throws IllegalStateException
+    {
+        if( sm_consumerLogPath == null )
+        {
+            // try to use plugin's default state location's log folder as its parent
+            OdaConsumerPlugin thePlugin = OdaConsumerPlugin.getDefault();
+            IPath consumerLogPath = null;
+            if( thePlugin != null )
+            {
+                consumerLogPath = thePlugin.getStateLocation().append( LOG_SUBFOLDER_NAME );
+            }
+            else    // non-OSGi platform
+            {
+                URI logUri = null;
+                if( resourceIdentifiers != null )
+                    logUri = resourceIdentifiers.resolveResourceLocation( LOG_SUBFOLDER_NAME );
+                if( logUri == null )
+                    throw new IllegalStateException( 
+                            Messages.bind( Messages.helper_unknownPluginLogPath,
+                                            resourceIdentifiers ) );
+                
+                // set path to <hostResource>/logs/org.eclipse.datatools.connectivity.oda.consumer/
+                consumerLogPath = new Path( logUri.getPath() ).append( BUNDLE_NAME );
+            }
+    
+            synchronized( LogPathHelper.class )
+            {
+                if( sm_consumerLogPath == null )
+                {
+                    sm_consumerLogPath = consumerLogPath;
+                }
+            }
+        }
+
+        return sm_consumerLogPath;
+    }
+    
+    /**
+     * Returns the log directory of the ODA consumer helper,
+     * appended with the sub-directory, if specified.
+     * @param subdirName the name of sub-directory to append in the
+     * 					 odaconsumer plugin's log path; may be null
+     * 					 or empty for no sub-directory
+     * @param resourceIdentifiers
+     * @return
+     */
+    static File getConsumerLogParent( String subdirName, ResourceIdentifiers resourceIdentifiers )
+    {
+    	IPath pluginLogPath = getPluginLogPath( resourceIdentifiers );
+    	
+    	if( subdirName == null || subdirName.length() == 0 )
+    		return pluginLogPath.toFile();
+    	return pluginLogPath.append( subdirName ).toFile();
+    }
+    
+    /**
+     * Returns the specified logDirectory as an absolute path name.
+     * If specified logDirectory is already absolute, use as is.
+     * Otherwise, use the odaconsumer plugin's default logs folder
+     * as the parent directory.
+     * @param logDirectory  non-empty log directory which may be a 
+     *                      relative or absolute path
+     * @return  an absolute directory path for the log files; 
+     *          or null if specified argument is null or empty
+     */
+    public static String getAbsoluteLogDirName( String logDirectory )
+    {
+        return getAbsoluteLogDirName( logDirectory, null );
+    }
+
+    /**
+     * Returns the specified logDirectory as an absolute path name.
+     * If specified logDirectory is already absolute, use as is.
+     * Otherwise, use the odaconsumer plugin's default logs folder
+     * as the parent directory.  Uses the specified ResourceIdentifiers
+     * to resolve the default logs path when on non-OSGi platform.
+     * @param logDirectory  non-empty log directory which may be a 
+     *                      relative or absolute path
+     * @param resourceIdentifiers   a ResourceIdentifiers instance, normally
+     *          set by an ODA consumer application in its application context
+     * @return  an absolute directory path for the log files; 
+     *          or null if specified argument is null or empty
+     * @since 3.2.4
+     */
+    public static String getAbsoluteLogDirName( String logDirectory, 
+            ResourceIdentifiers resourceIdentifiers )
+    {
+        if( logDirectory == null || logDirectory.length() == 0 )
+            return null;
+        File logParent = new File( logDirectory );
+        if( logParent.isAbsolute() )
+            return logDirectory;   // use as is
+        
+        // the specified logDirectory is relative, 
+        // set its parent to the odaconsumer plugin's default logs folder 
+        return getConsumerLogParent( logDirectory, resourceIdentifiers ).getPath();
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/nls/Messages.java b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/nls/Messages.java
new file mode 100644
index 0000000..5ac605c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/nls/Messages.java
@@ -0,0 +1,52 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.nls;
+
+import org.eclipse.osgi.util.NLS;
+
+public class Messages extends NLS 
+{
+	private static final String BUNDLE_NAME = "org.eclipse.datatools.connectivity.oda.consumer.nls.messages"; //$NON-NLS-1$
+
+	private Messages() 
+	{}
+
+	static 
+	{
+		// initialize resource bundle
+		NLS.initializeMessages( BUNDLE_NAME, Messages.class );
+	}
+
+	public static String helper_cannotGetNamedResultsAfterExecuteQuery;
+	public static String helper_cannotSetParamBeforePrepare;
+	public static String helper_cannotGetParamBeforeExecute;
+	public static String helper_cannotGetParamMdBeforePrepare;
+	public static String helper_cannotSetSortSpecBeforePrepare;
+	public static String helper_maxConcurrentConnectionsReached;
+	public static String helper_connectionFailed;
+	public static String helper_cannotCancelNonExecQuery;
+    public static String helper_cannotConstructConnectionFactory;
+	public static String helper_inadequatePermissionsForCompatibility;
+	public static String helper_connectionIsInactive;
+	public static String helper_maxConcurrentStatementsReached;
+    public static String helper_methodNotImplemented;
+	public static String helper_prepareFailed;
+	public static String helper_cannotGetResultSetMdBeforePrepare;
+	public static String helper_cannotExecuteBeforePrepare;
+    public static String helper_missingDriverInfo;
+    public static String helper_extension_mustImplementInterface;
+    public static String helper_unknownPluginLogPath;
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/nls/messages.properties b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/nls/messages.properties
new file mode 100644
index 0000000..e3a3875
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/nls/messages.properties
@@ -0,0 +1,32 @@
+#
+#************************************************************************
+# Copyright (c) 2004, 2007 Actuate Corporation.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#  Actuate Corporation - initial API and implementation
+#  
+#************************************************************************
+#
+helper_cannotGetNamedResultsAfterExecuteQuery=Cannot get result sets by name after executeQuery() has been called.
+helper_cannotSetParamBeforePrepare=Cannot set input parameters before statement has been prepared.
+helper_cannotGetParamBeforeExecute=Cannot get output parameters before statement executes.
+helper_cannotGetParamMdBeforePrepare=Cannot get parameter metadata before statement has been prepared.
+helper_cannotSetSortSpecBeforePrepare=Cannot set the sort specification before the statement has been prepared.
+helper_maxConcurrentConnectionsReached=Maximum active concurrent connections reached.
+helper_connectionFailed=Unable to open connection.
+helper_cannotCancelNonExecQuery=Cannot cancel this query while it is not executing.
+helper_cannotConstructConnectionFactory=Unable to load or instantiate the custom ODA driver class.
+helper_inadequatePermissionsForCompatibility=Cannot provide backwards compatibility due to inadequate permissions.
+helper_connectionIsInactive=The established connection to the data source is not active.
+helper_maxConcurrentStatementsReached=Maximum active concurrent statements reached for this connection.
+helper_methodNotImplemented=Underlying ODA driver has not implemented the API interface method ({0} ).
+helper_prepareFailed=Prepare failed.
+helper_cannotGetResultSetMdBeforePrepare=Cannot get result set metadata before statement has been prepared.
+helper_cannotExecuteBeforePrepare=Cannot execute the statement before statement has been prepared.
+helper_missingDriverInfo=Missing ODA data source id or extension manifest.
+helper_extension_mustImplementInterface=Invalid class ({0}) implementation.  Must implement the Java interface ({1}).
+helper_unknownPluginLogPath=Unable to resolve the log directory.  ResourceIdentifiers found in appContext: {0}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/nls/package.html b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/nls/package.html
new file mode 100644
index 0000000..f2aff0a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/nls/package.html
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2005, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+
+[<b>Non-API</b>] Contains internal implementation of internationalization and localization features.
+<br>
+
+<!-- Put @see and @since tags down here. -->
+@since 3.0
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/services/IPropertyProvider.java b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/services/IPropertyProvider.java
new file mode 100644
index 0000000..5291d14
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/services/IPropertyProvider.java
@@ -0,0 +1,79 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.services;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+/**
+ * The interface of the provider of run-time data source properties.
+ * An ODA consumer application that implements the 
+ * <code>org.eclipse.datatools.connectivity.oda.consumer.propertyProvider</code> 
+ * extension point must provide a concrete class implementation
+ * of this interface.
+ */
+public interface IPropertyProvider
+{
+    static final String sm_packageName = IPropertyProvider.class.getPackage().getName();
+    
+	// Pre-defined keys to be set by ODA consumer extensions in an application context Map
+	// specified in the call to IDriver.setAppContext method
+	public static final String ODA_CONSUMER_ID = "OdaConsumerId"; //$NON-NLS-1$
+    public static final String ODA_CONN_PROP_CONTEXT = "OdaConnPropertyContext"; //$NON-NLS-1$
+
+    /**
+     * The key for an application runtime {@link com.ibm.icu.util.ULocale} instance 
+     * in a consumer application context map.
+     * @since 3.2.2 (DTP 1.7.2)
+     */
+    public static final String APP_RUNTIME_LOCALE_KEY = "AppRuntimeLocale"; //$NON-NLS-1$
+
+    /**
+     * The pre-defined key in an application context Map to specify the profile loading 
+     * behavior of an IPropertyProvider implementation that supports it.  
+     * <br>A Boolean.TRUE value mapped to the key indicates to always reload and get
+     * the current content of an external profile store;
+     * a Boolean.FALSE value indicates to reuse the profile properties previously loaded, if available.
+     * @since 3.2.3 (DTP 1.8)
+     * @see {@link org.eclipse.datatools.connectivity.oda.consumer.services.impl.ProviderUtil#setReloadProfileStoreContextValue(Map,Boolean)}
+     */
+    public static final String ODA_RELOAD_PROFILE_STORE = sm_packageName + ".OdaReloadProfileStore"; //$NON-NLS-1$
+
+    /**
+     * Provides the effective property values to use at runtime to open
+     * a connection to a data source.
+     * @param candidateProperties  the set of candidate property name-value pairs 
+     *              specified by an ODA consumer application
+     *              in its call to an ODA driver's IConnection.open method.
+     * 				It may contain a configuration id or key 
+     * 				specific to the consumer application
+     * 				to uniquely identify a set of externalized property values.
+     * 				Such use is entirely implementation dependent.
+     * @param appContext   the application context value provided by an 
+     *          ODA consumer application in its call to an ODA driver's
+     *          IDriver.setAppContext method, associated with
+     *          the ODA_CONN_PROP_CONTEXT key.
+     *          <br>The provider may use this application-specific context to
+     *          assist in its lookup and processing of its externalized 
+     *          configuration framework.  May be null.
+     * @return  the set of effective property name-value pairs to use
+     * @throws OdaException     if provider error occurs
+     */
+    Properties getDataSourceProperties( Properties candidateProperties, 
+    									Object appContext )
+        throws OdaException;
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/services/impl/PropertyProviderImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/services/impl/PropertyProviderImpl.java
new file mode 100644
index 0000000..190c3e8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/services/impl/PropertyProviderImpl.java
@@ -0,0 +1,130 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.services.impl;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.consumer.services.IPropertyProvider;
+
+/**
+ * Exemplary base class implementation of the Java interface defined
+ * by the ODA consumer extension point -
+ * <code>org.eclipse.datatools.connectivity.oda.consumer.propertyProvider</code>.
+ * <p>
+ * Extracts the application-specific configuration id value that an extension
+ * may use to look up configurable, externalized data source property values.
+ * <br>An ODA consumer application that implements the
+ * ODA consumer propertyProvider extension point may extend and override its
+ * method(s), such as <code>adjustDataSourceProperties</code>,
+ * to adjust the property name-value pairs that are passed through
+ * to an ODA run-time driver to open a connection to its data source.
+ * <p>
+ * The use of this exemplary implementation is optional.
+ * A propertyProvider extension may use its own IPropertyProvider implementation.
+ */
+public class PropertyProviderImpl implements IPropertyProvider
+{
+    public static final String DEFAULT_ODA_CONFIGURATION_ID_PROP_NAME = 
+                                    "OdaPropertyConfigId"; //$NON-NLS-1$
+
+    private String m_propConfigId;
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.consumer.services.IPropertyProvider#getDataSourceProperties(java.util.Properties, java.lang.Object)
+     */
+    public Properties getDataSourceProperties( Properties candidateProperties,
+                                                Object appContext )
+        throws OdaException
+    {
+        String configIdPropName = getConfigurationIdPropertyName();
+        if( candidateProperties == null ||
+            ! candidateProperties.containsKey( configIdPropName ) )
+        {
+            m_propConfigId = null;
+            return candidateProperties;
+        }
+        
+        m_propConfigId = candidateProperties.getProperty( configIdPropName );        
+
+        // further adjust properties as appropriate
+        return adjustDataSourceProperties(  candidateProperties, appContext  );
+    }
+    
+    /**
+     * Returns the property configuration id found in the data source properties
+     * collection. 
+     * @return  the property configuration id; may be null if none is specified
+     */
+    public String getConfigurationId()
+    {
+        return m_propConfigId;
+    }
+
+    /**
+     * Specifies the property name of the configuration id 
+     * included in the data source properties collection.
+     * Sub-class may override to specify own application-specific property name.
+     * @return  the property name of the configuration id
+     */
+    protected String getConfigurationIdPropertyName()
+    {
+        // sub-class may override to specify application-specific property name
+        return DEFAULT_ODA_CONFIGURATION_ID_PROP_NAME;
+    }
+    
+    /**
+     * Adjusts the specified properties and returns the collection
+     * that an ODA run-time driver would use to open a connection.
+     * Sub-class may override to provide own logic to adjust specified properties.
+     * The default implementation merges the specified properties with any
+     * externalized properties configured by the configuration id.
+     * @return  the effective data source property name-value pairs
+     * @throws OdaException     if provider error occurs
+     */
+    protected Properties adjustDataSourceProperties( final Properties candidateProperties, 
+                                                    Object appContext )
+        throws OdaException
+    {
+        if( getConfigurationId() == null )
+            return candidateProperties;   // done, nothing to adjust
+        
+        Properties configProps = getExternalizedProperties( getConfigurationId(), appContext );
+        if( configProps == null || configProps.isEmpty() )
+            return candidateProperties;   // done, nothing to adjust
+        
+        // merges the 2 sets of properties, replacing with those in externalized properties
+        Properties mergedProps = new Properties();
+        mergedProps.putAll( candidateProperties );
+        mergedProps.putAll( configProps );
+        return mergedProps;
+    }
+    
+    /**
+     * Looks up and returns the properties configured with the specified
+     * configuration id and application context.
+     * Sub-class to override to use own externalized property configuration.
+     * @return  the matching data source property name-value pairs;
+     *          may be null if no match is found for specified configuration id
+     * @throws OdaException     if provider error occurs
+     */
+    protected Properties getExternalizedProperties( String configId, Object appContext )
+        throws OdaException
+    {
+        // sub-class to override to look up externalized properties
+        return null;
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/services/impl/ProviderUtil.java b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/services/impl/ProviderUtil.java
new file mode 100644
index 0000000..bf5da0a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/services/impl/ProviderUtil.java
@@ -0,0 +1,211 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007, 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.services.impl;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.consumer.services.IPropertyProvider;
+import org.eclipse.datatools.connectivity.oda.consumer.util.manifest.ExtensionExplorer;
+import org.eclipse.datatools.connectivity.oda.consumer.util.manifest.PropertyProviderManifest;
+import org.eclipse.datatools.connectivity.oda.util.ResourceIdentifiers;
+import org.eclipse.datatools.connectivity.oda.util.logging.LogManager;
+import org.eclipse.datatools.connectivity.oda.util.logging.Logger;
+
+/**
+ * Utility class for the providers of ODA consumer services.
+ */
+public class ProviderUtil
+{
+    private static final String sm_loggerName = "org.eclipse.datatools.connectivity.oda.consumer"; //$NON-NLS-1$
+
+    
+    /**
+     * Instantiates and returns the property provider of the specified application
+     * that implements the ODA consumer propertyProvider extension point.
+     * @param applicationId     the identifier of an ODA consumer application; 
+     *          its value must match the consumerApplicationId attribute of 
+     *          a propertyProvider extension
+     * @return  an instance of the providerClass implemented in the specified
+     *          propertyProvider extension
+     * @throws OdaException
+     */
+    public static IPropertyProvider createPropertyProvider( String applicationId )
+        throws OdaException
+    {
+        final String methodName = "ProviderUtil.getPropertyProvider( String )\t"; //$NON-NLS-1$
+    
+        if( applicationId == null || applicationId.length() == 0 )
+        {
+            log( methodName, "No application id specified in method argument." ); //$NON-NLS-1$
+            return null;    // no consumer application id specified in appContext
+        }
+        
+        PropertyProviderManifest providerManifest = 
+            ExtensionExplorer.getInstance().getPropertyProviderManifest( applicationId );
+        if( providerManifest == null )
+        {
+            log( methodName, "No IPropertyProvider found for " + applicationId + "." ); //$NON-NLS-1$ //$NON-NLS-2$
+            return null;    // no extension defined by application
+        }
+          
+        IPropertyProvider extnProvider = providerManifest.createProvider();
+        log( methodName, "Returning IPropertyProvider instance (" + extnProvider  //$NON-NLS-1$
+                            + ") of application id (" + applicationId + ")." ); //$NON-NLS-1$ //$NON-NLS-2$
+        return extnProvider;
+    }
+
+    /**
+     * Provides the effective property values to use at runtime to open
+     * a connection to a data source.
+     * @param candidateProperties  the set of candidate property name-value pairs 
+     *              specified by an ODA consumer application
+     *              in its call to an ODA driver's IConnection.open method.
+     *              It may contain a configuration id or key 
+     *              specific to the consumer application
+     *              to uniquely identify a set of externalized property values.
+     *              Such use is entirely implementation dependent.
+     * @param appContext   the application context provided by an 
+     *          ODA consumer application in its call to an ODA driver's
+     *          IDriver.setAppContext method.
+     *          <br>The provider may use this application-specific context to
+     *          assist in its lookup and processing of its externalized 
+     *          configuration framework.  May be null.
+     * @return  the set of effective property name-value pairs to use
+     * @throws OdaException     if provider error occurs
+     * @since 3.2.2 (DTP 1.7.2)
+     */
+    public static Properties getEffectiveProperties( Properties candidateProperties, Object appContext )
+        throws OdaException
+    {
+        IPropertyProvider propProvider = createPropertyProvider( getConsumerApplicationId( appContext ) );
+
+        // no configured service provider, use original properties
+        if( propProvider == null )
+            return candidateProperties; 
+        
+        // calls the implementation of the interface method, passing in 
+        // the connection properties and context specified by the consumer
+        Properties effectiveProps =
+            propProvider.getDataSourceProperties( candidateProperties, 
+                                getConnectionPropertyContext( appContext ) );
+        return effectiveProps;
+    }
+    
+    /**
+     * Returns the consumer application id, if exists, in the specified application context.
+     * @param appContext    the application context provided by an ODA consumer application
+     * @return  the value mapped to the IPropertyProvider.ODA_CONSUMER_ID key
+     *      in the specified application context map; may be null
+     * @since 3.2.2 (DTP 1.7.2)
+     */
+    public static String getConsumerApplicationId( Object appContext ) 
+    {
+        if( appContext == null || ! ( appContext instanceof Map ) )
+            return null;     // no context map to obtain value
+        
+        // get the consumer application id from context map, if exists
+        Object value = ((Map) appContext).get( IPropertyProvider.ODA_CONSUMER_ID );
+        return ( value instanceof String ) ? (String) value : null;
+    }
+    
+    /**
+     * Returns the nested connection profile context instance, if exists, 
+     * in the specified application context.
+     * @param appContext    the application context provided by an ODA consumer application
+     * @return  the value mapped to the IPropertyProvider.ODA_CONN_PROP_CONTEXT key
+     *      in the specified application context map; 
+     *      may return null if the specified application context is not a {@link java.util.Map},
+     *      or the original specified application context map if no nested context exists
+     * @since 3.2.2 (DTP 1.7.2)
+     */
+    public static Object getConnectionPropertyContext( Object appContext )
+    {
+        if( appContext == null || ! ( appContext instanceof Map ) )
+            return null;     // no context map to obtain value
+
+        Object connPropContext = ((Map) appContext).get( IPropertyProvider.ODA_CONN_PROP_CONTEXT );         
+        if( connPropContext == null )
+            return appContext;
+        if( ! ( connPropContext instanceof Map ) )
+            return connPropContext;
+        
+        String resourceIdKey = ResourceIdentifiers.ODA_APP_CONTEXT_KEY_CONSUMER_RESOURCE_IDS;
+        if( ((Map)connPropContext).containsKey( resourceIdKey ) ||
+            ! ((Map) appContext).containsKey( resourceIdKey ) )
+            return connPropContext;
+    
+        // since no ResourceIdentifiers is specified in the nested connection profile context,
+        // copy the ResourceIdentifiers instance specified in the appContext
+        Map enhancedConnPropContext = new HashMap( (Map)connPropContext );
+        enhancedConnPropContext.put( resourceIdKey, ((Map) appContext).get( resourceIdKey ) );
+        return enhancedConnPropContext;
+    }
+    
+    /**
+     * Gets the context value that specifies the behavior of an IPropertyProvider, 
+     * on whether to reload the current content of an external profile store.
+     * @param connPropContext   the connection profile context specified by an 
+     *          ODA consumer application
+     * @return  the Boolean value mapped to the IPropertyProvider.ODA_RELOAD_PROFILE_STORE key
+     *      in the specified context map; may be null if none specified
+     * @since 3.2.3 (DTP 1.8)
+     * @see {@link #setReloadProfileStoreContextValue(Map, Boolean)}
+     */
+    public static Boolean getReloadProfileStoreContextValue( Object connPropContext )
+    {
+        if( connPropContext == null || ! (connPropContext instanceof Map) )
+            return null;     // no context map to obtain value
+        Object reloadStoreValue =((Map) connPropContext).get( 
+                    IPropertyProvider.ODA_RELOAD_PROFILE_STORE ); 
+        return (reloadStoreValue instanceof Boolean) ? (Boolean)reloadStoreValue : null;
+    }
+    
+    /**
+     * Sets the entry in the connection property context Map to specify the behavior of 
+     * an IPropertyProvider, on whether to reload the current content of an external profile store.
+     * @param connPropContext   the connection profile context specified by an 
+     *          ODA consumer application
+     * @param reloadStoreValue  a Boolean.TRUE value to indicate always reload and get
+     *                      the current content of an external profile store;
+     *                      a Boolean.FALSE value to reuse content previously loaded if available; 
+     *                      may be null to adopt provider's default behavior
+     * @since 3.2.3 (DTP 1.8)
+     * @see {@link #getReloadProfileStoreContextValue(Object)}
+     */
+    public static void setReloadProfileStoreContextValue( Map connPropContext, Boolean reloadStoreValue )
+    {
+        if( connPropContext == null )
+            throw new IllegalArgumentException( 
+                    "Null connPropContext argument in setReloadProfileStoreIndicator()" ); //$NON-NLS-1$
+
+        connPropContext.put( IPropertyProvider.ODA_RELOAD_PROFILE_STORE, reloadStoreValue );
+    }
+    
+    private static void log( String context, String msg )
+    {
+        Logger logger = getLogger();
+        if( logger != null )
+            logger.fine( context + msg );
+    }
+    
+    private static Logger getLogger()
+    {
+        return LogManager.getLogger( sm_loggerName );
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/services/package.html b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/services/package.html
new file mode 100644
index 0000000..7657c47
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/services/package.html
@@ -0,0 +1,31 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2006, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+
+An ODA consumer framework package that allows 
+an ODA consumer application 
+to extend and provide application-specific services.
+
+<!-- Put @see and @since tags down here. -->
+@since 3.0
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/util/manifest/DriverExtensionManifest.java b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/util/manifest/DriverExtensionManifest.java
new file mode 100644
index 0000000..85afa16
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/util/manifest/DriverExtensionManifest.java
@@ -0,0 +1,114 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.util.manifest;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+/**
+ * Encapsulates access to the manifest content of 
+ * an ODA consumer helper driverBridge extension.
+ */
+public class DriverExtensionManifest
+{
+    static final String BRIDGE_ELEMENT = "bridge";  //$NON-NLS-1$
+    static final String BRIDGE_ATTRIBUTE = "bridgeId";  //$NON-NLS-1$
+    static final String DRIVER_TYPE_ATTRIBUTE = "driverType";  //$NON-NLS-1$
+
+    private IConfigurationElement m_bridgeElement;
+    private String m_namespace;
+    private String m_bridgeDataSourceId;
+    private String m_driverType;
+    private IExtension m_bridgeExtension;
+
+    DriverExtensionManifest( IExtension bridgeExtension ) 
+        throws OdaException
+    {
+        init( bridgeExtension );
+    }
+    
+    protected DriverExtensionManifest()
+    {}
+    
+    protected void init( IExtension bridgeExtension ) 
+        throws OdaException
+    {
+        assert( bridgeExtension != null );
+        m_bridgeExtension = bridgeExtension;
+        m_namespace = m_bridgeExtension.getContributor().getName();
+
+        m_bridgeElement =  ExtensionExplorer.getNamedElement( m_bridgeExtension,
+                                                  BRIDGE_ELEMENT,
+                                                  DRIVER_TYPE_ATTRIBUTE );
+        if( m_bridgeElement == null )
+            throw new OdaException( new IllegalArgumentException( m_namespace ) );           
+        
+        m_driverType = m_bridgeElement.getAttribute( DRIVER_TYPE_ATTRIBUTE );        
+        if( m_driverType == null || m_driverType.trim().length() == 0 )
+            throw new OdaException( 
+                    new IllegalArgumentException( DRIVER_TYPE_ATTRIBUTE ) );
+
+        m_bridgeDataSourceId = m_bridgeElement.getAttribute( BRIDGE_ATTRIBUTE );
+        if( m_bridgeDataSourceId == null || m_bridgeDataSourceId.trim().length() == 0 )
+            throw new OdaException( 
+                    new IllegalArgumentException( BRIDGE_ATTRIBUTE ) );
+    }
+
+    /**
+     * Returns the bridge extension used to initialize this instance.
+     */
+    protected IExtension getBridgeExtension()
+    {
+        return m_bridgeExtension;
+    }
+
+    /**
+     * Returns the bridge element found in this bridge extension.
+     */
+    protected IConfigurationElement getBridgeElement()
+    {
+        return m_bridgeElement;
+    }
+
+    /**
+     * Returns the namespace of the plugin that contributes this extension.
+     * @return 
+     */
+    public String getNamespace()
+    {
+        return m_namespace;
+    }
+
+    /**
+     * Returns the driver type for which a driver bridge extension is implemented.
+     * @return 
+     */
+    public String getDriverType()
+    {
+        return m_driverType;
+    }
+
+    /**
+     * Returns the oda data source id of the driver bridge plugin extension
+     * that implements the ODA datasource extension point. 
+     * @return 
+     */
+    public String getBridgeDataSourceId()
+    {
+        return m_bridgeDataSourceId;
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/util/manifest/ExtensionExplorer.java b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/util/manifest/ExtensionExplorer.java
new file mode 100644
index 0000000..e1da469
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/util/manifest/ExtensionExplorer.java
@@ -0,0 +1,300 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.util.manifest;
+
+import java.util.Hashtable;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ManifestExplorer;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ManifestUtil;
+
+/**
+ * The Extension Explorer is the entry point to explore and access
+ * the manifest of all the ODA consumer helper extensions that implement 
+ * any of its extension points.
+ * The <code>ExtensionExplorer</code> singleton instance is retrieved 
+ * using the <code>getInstance()</code> method.
+ */
+public class ExtensionExplorer
+{
+    private static ExtensionExplorer sm_instance = null;
+
+    private static final String DTP_ODA_BRIDGE_EXT_POINT = 
+            "org.eclipse.datatools.connectivity.oda.consumer.driverBridge";  //$NON-NLS-1$
+    
+    private Hashtable m_bridgeManifests;  // cached copy of found driverBridge manifests
+    private Hashtable m_propProviderManifests; // cached copy of found externalizedProperties manifests
+    
+    /**
+     * Returns the <code>ExtensionExplorer</code> instance to  
+     * explore the manifest of all ODA consumer extensions.
+     * @return  the <code>ExtensionExplorer</code> singleton instance.
+     */
+    public static ExtensionExplorer getInstance()
+    {
+        if( sm_instance == null )
+        {
+            synchronized ( ExtensionExplorer.class )
+            {
+                if( sm_instance == null )
+                {
+                    sm_instance = new ExtensionExplorer();                    
+                }
+            }
+        }
+        return sm_instance;
+    }
+    
+    /**
+     * Singleton instance release method.
+     */
+    public static void releaseInstance()
+    {
+        synchronized( ExtensionExplorer.class )
+        {
+            sm_instance = null;
+        }
+    }
+
+    private ExtensionExplorer()
+    {
+    }
+    
+    /**
+     * Refresh the explorer, and allows it to get
+     * the latest ODA Consumer extension manifests.
+     */
+    public void refresh()
+    {
+        // reset the cached collection of extension manifest instances
+        synchronized( this )
+        {
+            m_bridgeManifests = null;
+            m_propProviderManifests = null;
+        }
+    }
+    
+    /**
+     * Finds and returns the extension information defined 
+     * in the plugin manifest of the extension that
+     * implements the DTP ODA Consumer extension point -
+     * <code>org.eclipse.datatools.connectivity.oda.consumer.driverBridge</code>.
+     * @param driverType      the interface type id of an underlying ODA data provider.
+     * @return              the driver bridge extension manifest information;
+     *                      or null, if no matching extension is found
+     * @throws OdaException if the extension manifest is invalid
+     */
+    public DriverExtensionManifest getDriverExtensionManifest( String driverType ) 
+        throws OdaException
+    {
+        DriverExtensionManifest manifest = 
+            getDriverExtensionManifest( driverType, DTP_ODA_BRIDGE_EXT_POINT );
+        
+        return manifest;
+    }
+    
+    /**
+     * Finds and returns the extension information defined 
+     * in the plugin manifest of the driver bridge extension
+     * that contains the specified bridgeFactory element for
+     * the specified driver type.
+     * @throws OdaException     if the extension manifest is invalid.
+     */
+    private DriverExtensionManifest getDriverExtensionManifest( 
+                                        String driverType, 
+                                        String extensionPoint ) 
+        throws OdaException
+    {
+        if( driverType == null || driverType.length() == 0 )
+            throw new OdaException(
+                    new IllegalArgumentException( driverType ) );
+        
+        if( extensionPoint == null || extensionPoint.length() == 0 )
+            throw new OdaException(
+                    new IllegalArgumentException( extensionPoint ) );
+    
+        // first check if specified dataSourceId's manifest
+        // is already in cache, and use it
+        DriverExtensionManifest aManifest =
+            (DriverExtensionManifest) getBridgeManifests().get( driverType );
+        if( aManifest != null )
+            return aManifest;
+        
+        // not yet cached, find and create a new one
+        IExtension extension = findExtensionWithAttribute( driverType, 
+                                DriverExtensionManifest.DRIVER_TYPE_ATTRIBUTE, 
+                                DriverExtensionManifest.BRIDGE_ELEMENT,
+                                extensionPoint );    
+        if( extension == null )    // not found
+            return null;
+        
+        // found extension 
+        aManifest = new DriverExtensionManifest( extension );
+        
+        // keep it in cached collection
+        getBridgeManifests().put( driverType, aManifest );
+        
+        return aManifest;
+    }
+    
+    /**
+     * Finds the extension that matches the given attribute value and name in specified element
+     * among the given collection of extensions.
+     */
+    private IExtension findExtensionWithAttribute( String attributeValue, String attributeName,
+                                                    String elementName, String extensionPoint )
+        throws OdaException
+    {
+        IExtension[] extensions = 
+            ManifestExplorer.getExtensions( extensionPoint );
+        
+        int length = ( extensions == null ) ? 
+                0 : extensions.length;
+
+        for( int i = 0; i < length; i++ )
+        {
+            IExtension extension = extensions[i];
+            
+             // Find the specified element in the extension 
+            IConfigurationElement foundElement =
+                getNamedElement( extension, elementName, attributeName );
+            if( foundElement == null )
+                continue;   // ignores invalid extension
+            
+            String value = foundElement.getAttribute( attributeName );
+            
+            /* The first extension found with matching driverType 
+             * in its element is considered a match.
+             */
+            if( value != null &&
+                value.equalsIgnoreCase( attributeValue ) )
+                return extension;
+        }
+        
+        return null;
+    }
+    
+    /**
+     * Finds and returns the extension information defined 
+     * in the plugin manifest of the extension that
+     * implements the DTP ODA Consumer extension point -
+     * <code>org.eclipse.datatools.connectivity.oda.consumer.propertyProvider</code>.
+     * @param applicationId      the unique identifier of an ODA consumer application, 
+     *                      which embeds an engine that uses the ODA consumer helper framework.
+     * @return              the property provider extension manifest information;
+     *                      or null, if no matching extension is found
+     * @throws OdaException if the extension manifest is invalid
+     */
+    public PropertyProviderManifest getPropertyProviderManifest( String applicationId ) 
+        throws OdaException
+    {
+        PropertyProviderManifest manifest = 
+            getPropertyProviderManifest( applicationId, 
+            		PropertyProviderManifest.DTP_ODA_PROPERTY_PROVIDER_EXT_POINT );
+        
+        return manifest;
+    }
+    
+    private PropertyProviderManifest getPropertyProviderManifest( String applicationId, 
+                                                    String extensionPoint ) 
+        throws OdaException
+    {
+        if ( applicationId == null || applicationId.length() == 0 )
+            throw new OdaException(
+                    new IllegalArgumentException( applicationId ) );
+        
+        if ( extensionPoint == null || extensionPoint.length() == 0 )
+            throw new OdaException(
+                    new IllegalArgumentException( extensionPoint ) );
+    
+        // first check if specified dataSourceId's manifest
+        // is already in cache, and use it
+        PropertyProviderManifest aManifest =
+            (PropertyProviderManifest) getPropProviderManifests().get( applicationId );
+        if( aManifest != null )
+            return aManifest;
+        
+        // not yet cached, find and create a new one
+        IExtension extension = findExtensionWithAttribute( applicationId, 
+                                    PropertyProviderManifest.APPLICATION_ID_ATTRIBUTE, 
+                                    PropertyProviderManifest.PROP_SERVICE_ELEMENT,
+                                    extensionPoint );
+        if ( extension == null )    // not found
+            return null;
+        
+        // found extension 
+        aManifest = new PropertyProviderManifest( extension );
+        
+        // keep it in cached collection
+        getPropProviderManifests().put( applicationId, aManifest );
+        
+        return aManifest;       
+    }
+        
+    /**
+     * Returns the element with given name and required attribute
+     * defined in the given extension.  The required attribute must have a non-empty value.
+     * <br>For internal use only.
+     */
+    static IConfigurationElement getNamedElement( IExtension extension,
+                                    String elementName, String requiredAttributeName ) 
+    {
+        IConfigurationElement[] namedElements = null;
+        try
+        {
+            namedElements = ManifestUtil.getNamedElements( extension, 
+                                elementName, requiredAttributeName );
+        }
+        catch( OdaException e )
+        {
+            // ignore
+        }
+        
+        if( namedElements == null || namedElements.length == 0 )
+            return null;
+
+        // expects only one, as defined in extension point schema
+        return namedElements[0];
+    }
+
+    private Hashtable getBridgeManifests()
+    {
+        if( m_bridgeManifests == null )
+        {
+            synchronized( this )
+            {
+                if( m_bridgeManifests == null )
+                    m_bridgeManifests = new Hashtable();
+            }
+        }
+        return m_bridgeManifests;
+    }
+
+    private Hashtable getPropProviderManifests()
+    {
+        if( m_propProviderManifests == null )
+        {
+            synchronized( this )
+            {
+                if( m_propProviderManifests == null )
+                    m_propProviderManifests = new Hashtable();
+            }
+        }
+        return m_propProviderManifests;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/util/manifest/PropertyProviderManifest.java b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/util/manifest/PropertyProviderManifest.java
new file mode 100644
index 0000000..a13e0ba
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/util/manifest/PropertyProviderManifest.java
@@ -0,0 +1,147 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.util.manifest;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.consumer.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.consumer.services.IPropertyProvider;
+
+/**
+ * Encapsulates access to the manifest content of 
+ * an ODA consumer extension of the helper's propertyProvider extension point.
+ */
+public class PropertyProviderManifest
+{
+    static final String DTP_ODA_PROPERTY_PROVIDER_EXT_POINT = 
+        "org.eclipse.datatools.connectivity.oda.consumer.propertyProvider";  //$NON-NLS-1$
+    static final String PROP_SERVICE_ELEMENT = "dataSourcePropertyService";  //$NON-NLS-1$
+    static final String APPLICATION_ID_ATTRIBUTE = "consumerApplicationId";  //$NON-NLS-1$
+    static final String PROVIDER_CLASS_ATTRIBUTE = "providerClass";  //$NON-NLS-1$
+
+    private IExtension m_providerExtension;
+    private IConfigurationElement m_propServiceElement;
+    private String m_namespace;
+    private String m_applicationId;
+    private String m_providerClassName;
+
+    PropertyProviderManifest( IExtension providerExtension ) 
+        throws OdaException
+    {
+        init( providerExtension );
+    }
+    
+    protected PropertyProviderManifest()
+    {}
+    
+    protected void init( IExtension providerExtension ) 
+        throws OdaException
+    {
+        assert( providerExtension != null );
+        m_providerExtension = providerExtension;
+        m_namespace = m_providerExtension.getContributor().getName();
+
+        m_propServiceElement =  ExtensionExplorer.getNamedElement( m_providerExtension,                                       
+                                                        PROP_SERVICE_ELEMENT,
+                                                        APPLICATION_ID_ATTRIBUTE );
+        if( m_propServiceElement == null )
+            throw new OdaException( new IllegalArgumentException( m_namespace ) );
+            
+        
+        m_applicationId = m_propServiceElement.getAttribute( APPLICATION_ID_ATTRIBUTE );        
+        if( m_applicationId == null || m_applicationId.trim().length() == 0 )
+            throw new OdaException( 
+                    new IllegalArgumentException( APPLICATION_ID_ATTRIBUTE ) );
+
+        m_providerClassName = m_propServiceElement.getAttribute( PROVIDER_CLASS_ATTRIBUTE );
+        if( m_providerClassName == null || m_providerClassName.trim().length() == 0 )
+            throw new OdaException( 
+                    new IllegalArgumentException( PROVIDER_CLASS_ATTRIBUTE ) );
+    }
+
+    /**
+     * Returns the provider extension used to initialize this instance.
+     */
+    protected IExtension getProviderExtension()
+    {
+        return m_providerExtension;
+    }
+
+    /**
+     * Returns the namespace of the plugin that contributes this extension.
+     * @return 
+     */
+    public String getNamespace()
+    {
+        return m_namespace;
+    }
+
+    /**
+     * Returns the PROP_SERVICE_ELEMENT element found in this provider extension.
+     */
+    protected IConfigurationElement getPropertyServiceElement()
+    {
+        return m_propServiceElement;
+    }
+
+    /**
+     * Returns the consumer application id for which this extension is implemented.
+     * @return 
+     */
+    public String getApplicationId()
+    {
+        return m_applicationId;
+    }
+
+    /**
+     * Returns the application-specific service provider class name that 
+     * implements the IPropertyProvider interface for the extension.
+     * @return 
+     */
+    public String getProviderClassName()
+    {
+        return m_providerClassName;
+    }    
+
+    /**
+     * Instantiates the property provider implemented by an ODA consumer extension
+     * of the propertyProvider extension point.
+     * @return	an instance of the IPropertyProvider interface
+     * @throws OdaException
+     */
+    public IPropertyProvider createProvider() throws OdaException
+    {
+        Object provider = null;
+        try
+        {
+            provider = getPropertyServiceElement().createExecutableExtension( PROVIDER_CLASS_ATTRIBUTE );
+        }
+        catch( CoreException ex )
+        {
+            throw new OdaException( ex );
+        }
+
+        if( ! ( provider instanceof IPropertyProvider ) )
+            throw new OdaException( 
+                    Messages.bind( Messages.helper_extension_mustImplementInterface,
+                                    getProviderClassName(), 
+                                    IPropertyProvider.class.getName() ));
+        
+        return (IPropertyProvider) provider;
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/util/manifest/package.html b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/util/manifest/package.html
new file mode 100644
index 0000000..05d1270
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.consumer/src/org/eclipse/datatools/connectivity/oda/consumer/util/manifest/package.html
@@ -0,0 +1,38 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2006, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+
+Provides a utility component for accessing the content of an 
+ODA consumer extension's manifest.
+<br>
+It can be used by an ODA consumer to discover the plug-in extension configuration.
+<p>
+The utility's initial entry point is the singleton <code>ExtensionExplorer</code>.
+It provides the service to explore all the static
+ODA consumer extensions, and access to each 
+extension's configuration information specified 
+in its plug-in manifest file.
+
+<!-- Put @see and @since tags down here. -->
+@since 3.0
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/.classpath b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/.gitignore b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/.gitignore
new file mode 100644
index 0000000..6ec8be4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/.gitignore
@@ -0,0 +1,4 @@
+bin
+download
+*.jar
+*.zip
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/.project b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/.project
new file mode 100644
index 0000000..53e8058
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.oda.design.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..190e001
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,3 @@
+#Thu Jan 29 23:00:30 PST 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..52e37f6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,26 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %plugin.name
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.oda.design.ui; singleton:=true
+Bundle-Version: 3.4.1.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Export-Package: org.eclipse.datatools.connectivity.oda.design.internal.ui,
+ org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.db;x-internal:=true,
+ org.eclipse.datatools.connectivity.oda.design.ui.designsession,
+ org.eclipse.datatools.connectivity.oda.design.ui.manifest,
+ org.eclipse.datatools.connectivity.oda.design.ui.nls;x-friends:="org.eclipse.datatools.connectivity.oda.flatfile.ui,org.eclipse.datatools.enablement.oda.xml.ui,org.eclipse.datatools.enablement.oda.ws.ui",
+ org.eclipse.datatools.connectivity.oda.design.ui.pages.impl,
+ org.eclipse.datatools.connectivity.oda.design.ui.profile.db.wizards,
+ org.eclipse.datatools.connectivity.oda.design.ui.wizards
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.ui,
+ org.eclipse.datatools.connectivity.ui;visibility:=reexport,
+ org.eclipse.datatools.connectivity.oda;visibility:=reexport,
+ org.eclipse.datatools.connectivity.oda.profile;visibility:=reexport,
+ org.eclipse.datatools.connectivity.oda.design;visibility:=reexport,
+ org.eclipse.datatools.connectivity.oda.consumer,
+ org.eclipse.ui.navigator,
+ org.eclipse.datatools.help;visibility:=reexport
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/about.html b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/about.ini b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/about.ini
new file mode 100644
index 0000000..76a0356
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/about.ini
@@ -0,0 +1,27 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%blurb
+
+# Property "windowImage" contains path to window icon (16x16)
+# needed for primary features only
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=eclipse32.png
+
+# Property "aboutImage" contains path to product image (500x330 or 115x164)
+# needed for primary features only
+
+# Property "appName" contains name of the application (not translated)
+# needed for primary features only
+
+# Property "welcomePerspective" contains the id of the perspective in which the
+# welcome page is to be opened.
+# optional
+
+# Property "tipsAndTricksHref" contains the Help topic href to a tips and tricks page 
+# optional
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/about.mappings b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/about.mappings
new file mode 100644
index 0000000..d2aa0db
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/about.mappings
@@ -0,0 +1,6 @@
+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=@BUILD@
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/about.properties b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/about.properties
new file mode 100644
index 0000000..ba4182b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/about.properties
@@ -0,0 +1,20 @@
+###############################################################################
+# Copyright (c) 2005, 2008 Actuate Corporation.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#  Actuate Corporation - initial API and implementation
+#  
+###############################################################################
+blurb=Eclipse Data Tools Platform Connectivity Open Data Access (ODA) Designer\n\
+\n\
+Visit http://www.eclipse.org/datatools\n\
+\n\
+Copyright (c) 2017 Eclipse Contributors\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/build.properties b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/build.properties
new file mode 100644
index 0000000..ad4fc2d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/build.properties
@@ -0,0 +1,18 @@
+source.. = src/
+output.. = bin/
+bin.includes = plugin.xml,\
+               .,\
+               about.html,\
+               META-INF/,\
+               plugin.properties,\
+               about.ini,\
+               about.mappings,\
+               about.properties,\
+               eclipse32.gif,\
+               eclipse32.png,\
+               schema/
+javac.source =           1.6
+javac.target =           1.6
+javadoc.dir =            doc/api/
+download.dir =           ./download/
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/eclipse32.gif b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/eclipse32.gif
new file mode 100644
index 0000000..811eccb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/eclipse32.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/eclipse32.png b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/eclipse32.png
new file mode 100644
index 0000000..568fac1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/eclipse32.png
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/plugin.properties b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/plugin.properties
new file mode 100644
index 0000000..1aa9afc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/plugin.properties
@@ -0,0 +1,23 @@
+###############################################################################
+# Copyright (c) 2006 Actuate Corporation.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#  Actuate Corporation - initial API and implementation
+#
+###############################################################################
+# Plug-in Profile Configuration for all ODA profile extensions
+#
+oda.parent.category.id=org.eclipse.datatools.connectivity.oda.profileCategory
+#
+###############################################################################
+# NLS Strings
+###############################################################################
+#
+plugin.name=DTP ODA Designer UI Framework Plug-in
+oda.parent.category.name=ODA Data Sources
+oda.preference.page.name=Open Data Access
+providerName=Eclipse Data Tools Platform
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/plugin.xml b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/plugin.xml
new file mode 100644
index 0000000..740f5a2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/plugin.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<!--
+/**
+ *************************************************************************
+ * Copyright (c) 2006, 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: plugin.xml,v 1.13 2008/02/21 05:01:55 lchan Exp $
+ */
+-->
+
+<plugin>
+
+   <extension-point id="dataSource" name="Open Data Access Designer UI Extension Point" schema="schema/datasource.exsd"/>
+   <extension
+         point="org.eclipse.datatools.connectivity.connectionProfile">
+      <category
+            id="%oda.parent.category.id"
+            name="%oda.parent.category.name"/>
+   </extension>
+   <extension
+         point="org.eclipse.ui.preferencePages">
+      <page
+            category="org.eclipse.datatools.connectivity.internal.ui.preferences.DataToolsMainPage"
+            class="org.eclipse.datatools.connectivity.oda.design.internal.ui.preferences.OpenDataAccessPage"
+            id="org.eclipse.datatools.connectivity.oda.design.ui.preferences.OpenDataAccessPage"
+            name="%oda.preference.page.name"/>
+   </extension>
+   <extension
+         point="org.eclipse.ui.navigator.viewer">
+      <viewerActionBinding
+            viewerId="org.eclipse.datatools.connectivity.DataSourceExplorerNavigator">
+         <includes>
+            <actionExtension
+                  pattern="org.eclipse.datatools.connectivity.oda.design.ui.dse.actionExtension">
+            </actionExtension>
+         </includes>
+      </viewerActionBinding>
+   </extension>
+   <extension
+         point="org.eclipse.ui.navigator.navigatorContent">
+      <actionProvider
+            class="org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.filter.OdaProfileActionProvider"
+            id="org.eclipse.datatools.connectivity.oda.design.ui.dse.actionExtension"
+            overrides="org.eclipse.datatools.connectivity.ui.dse.actions.ProfileActionsActionProvider"
+            priority="normal">
+         <enablement>
+            <and>
+               <instanceof
+                     value="org.eclipse.datatools.connectivity.ICategory">
+               </instanceof>
+               <or>
+                  <test
+                        property="org.eclipse.datatools.connectivity.category.property.categoryID"
+                        value="org.eclipse.datatools.connectivity.db.category">
+                  </test>
+                  <test
+                        property="org.eclipse.datatools.connectivity.category.property.categoryID"
+                        value="%oda.parent.category.id">
+                  </test></or>
+            </and>
+         </enablement>
+      </actionProvider>
+   </extension>
+   <extension
+         point="org.eclipse.ui.handlers">
+      <handler
+            class="org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.filter.NewProfileAction"
+            commandId="org.eclipse.datatools.connectivity.commands.addprofile">
+         <activeWhen>
+            <with
+                  variable="activePartId">
+               <equals
+                     value="org.eclipse.datatools.connectivity.DataSourceExplorerNavigator">
+               </equals>
+            </with>
+         </activeWhen>
+         <enabledWhen>
+            <with
+                  variable="activePartId">
+               <equals
+                     value="org.eclipse.datatools.connectivity.DataSourceExplorerNavigator">
+               </equals>
+            </with>
+         </enabledWhen>
+      </handler>
+   </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/schema-doc/org_eclipse_datatools_connectivity_oda_design_ui_datasource.html b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/schema-doc/org_eclipse_datatools_connectivity_oda_design_ui_datasource.html
new file mode 100644
index 0000000..299f9df
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/schema-doc/org_eclipse_datatools_connectivity_oda_design_ui_datasource.html
@@ -0,0 +1,148 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Open Data Access Designer</title>
+<style>@import url("file:/D:/Lang/eclipse_32M5a/plugins/org.eclipse.sdk_3.2.0.v20060214/book.css");</style>
+<style>@import url("file:/D:/Lang/eclipse_32M5a/configuration/org.eclipse.osgi/bundles/192/1/.cp/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>Open Data Access Designer</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.connectivity.oda.design.ui.dataSource<p></p>
+<h6 class=CaptionFigColumn id=header>Since: </h6>3.0
+<p></p>
+
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>This extension point provides extensibility to the Open Data Access (ODA) Designer UI framework, through which an user may define an ODA data source design and a data set design.  
+<br>An ODA driver that implements the ODA run-time extension point may optionally extend this ODA UI extension point to contribute customized ODA design wizard and property pages.</p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.dataSourceUI">dataSourceUI</a> , <a href="#e.dataSetUI">dataSetUI</a>+)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.dataSourceUI">dataSourceUI</a> (<a href="#e.newDataSourceWizard">newDataSourceWizard</a>)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST dataSourceUI</p>
+<p class=code id=dtdAttlist>id&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+Allows ODA data providers to define a customized dialog page for an user to create a new ODA data source design instance.</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>id</b> - A fully qualified ID that uniquely identifies the ODA data source extension within an ODA consumer application's environment.  Its value must match that of the <i>dataSource.id</i> attribute defined in the  <i>org.eclipse.datatools.connectivity.oda.dataSource</i> extension of the same ODA driver.  
+When implementing the <i>org.eclipse.datatools.connectivity.connectionProfile</i> extension point, its <i>connectionProfile.id</i> attribute must also match this id value.</li>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.newDataSourceWizard">newDataSourceWizard</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST newDataSourceWizard</p>
+<p class=code id=dtdAttlist>windowTitle&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>includesProgressMonitor&nbsp;(true | false) "true"<p class=code id=dtdAttlist>pageTitle&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>pageClass&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+Defines the customizable behavior of a data source wizard that allows an user to create a new ODA data source design instance.
+<br>The implementation class of the data source wizard is specified in the <i>newWizard.class</i> attribute defined in the <i>org.eclipse.datatools.connectivity.connectionProfile</i> extension point.  
+<br>The wizard class must either use or extend from the ODA framework's wizard base class, <i>org.eclipse.datatools.connectivity.oda.design.ui.wizards.NewDataSourceWizard</i>. 
+<br><br>
+This element includes the attributes to specify the customized wizard starting page that an extension contributes to the data source wizard.</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>windowTitle</b> - The customized title of the data source wizard window.</li>
+<li><b>includesProgressMonitor</b> - Indicates whether the data source wizard should include a progress monitor.  Default value is "true".</li>
+<li><b>pageTitle</b> - The page title of the data source wizard's customized starting page.  This value, if specified, overrides any title that may have been set by the wizard page's constructor.</li>
+<li><b>pageClass</b> - A fully qualified class name that implements the wizard starting page for creating a new ODA data source design instance.
+<br>This class must extend from the ODA abstract base class, <i>org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSourceWizardPage</i>.
+<br>A default concrete implementation class is provided in the ODA framework,  <i>org.eclipse.datatools.connectivity.oda.design.ui.pages.impl.DefaultDataSourceWizardPage</i>.  An ODA extension may choose to use or extend from this default implementation class.</li>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.dataSetUI">dataSetUI</a> (<a href="#e.dataSetWizard">dataSetWizard</a> , <a href="#e.dataSetPage">dataSetPage</a>+)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST dataSetUI</p>
+<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>initialPageId&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>supportsInParameters&nbsp;&nbsp;(true | false) "true"<p class=code id=dtdAttlist>supportsOutParameters&nbsp;(true | false) "false"&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+Allows ODA data providers to define customized dialog page(s) for an user to create or edit an ODA data set design instance.
+The element defines child elements for the data set wizard page(s) and editor page(s).  
+<br>An ODA host designer may use the custom wizard pages' control for editing a data set design instance.</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>id</b> - A fully qualified ID that uniquely identifies the ODA data set type within an ODA data source extension.  Its value must match that of the <i>dataSet.id</i> attribute defined in the  <i>org.eclipse.datatools.connectivity.oda.dataSource</i> extension of the same ODA driver.</li>
+<li><b>initialPageId</b> - Identifies a particular dataSetPage that should be selected in a data set dialog.</li>
+<li><b>supportsInParameters</b> - Indicates that this type of data set design supports input parameter definitions, and that an ODA host designer might need to collect further metadata on the parameter definitions provided by the customized page(s).</li>
+<li><b>supportsOutParameters</b> - Indicates that this type of data set design supports output parameter definitions, and that an ODA host designer might need to collect further metadata on the parameter definitions provided by the customized page(s).</li>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.dataSetWizard">dataSetWizard</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST dataSetWizard</p>
+<p class=code id=dtdAttlist>class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA "org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizard"<p class=code id=dtdAttlist>windowTitle&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+Defines a data set wizard that allows an user to create or edit an ODA data set design instance.</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>class</b> - The implementation class of the data set wizard.  
+<br>The wizard class must either use or extend from the ODA framework's wizard base class, <i>org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizard</i>.</li>
+<li><b>windowTitle</b> - The customized title of the data set wizard window.</li>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.dataSetPage">dataSetPage</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST dataSetPage</p>
+<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>wizardPageClass&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>displayName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>icon&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+Defines a customized page that an extension contributes to an ODA host designer's data set dialog.</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>id</b> - A unique name of this page within a data set dialog.</li>
+<li><b>wizardPageClass</b> - A fully qualified class name that implements a data set wizard page to create or edit an ODA data set design instance.
+<br>This class must extend from the ODA abstract base class, <i>org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizardPage</i>.</li>
+<li><b>displayName</b> - The page title or descriptive name of a customized page that will be displayed in the UI of this page.
+This value, if specified, overrides any title or descriptive name that may have been set by the page's constructor.</li>
+<li><b>path</b> - The path of the page in a data set preference dialog.
+<br>To add the page to the root node, specify "/" in this value.  Default value is "/".
+<br>To add the page as a child of another page node, specify its full path starting with a "/"; and use the  "/" as a separator in between each page node in the hierarchy.
+<br>For example, a path value "/parent" would add this page as a child node to an existing page called "parent".
+<br><br>Note: The page with the name "parent" should have been added before attempting to add the child page.</li>
+<li><b>icon</b> - A relative path to an icon that will be used in the UI in addition to the page's display name.</li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>Examples: </h6><p>
+   <pre>
+   <p class=code id=tag>&lt;extension
+  point=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.oda.design.ui.dataSource&quot;</p><p class=code id=tag>&gt;</p>
+      <p class=code id=tag>&lt;dataSourceUI id=<p class=code id=cstring>&quot;%oda.data.source.id&quot;</p><p class=code id=tag>&gt;</p>
+         <p class=code id=tag>&lt;newDataSourceWizard
+               pageClass=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.oda.flatfile.ui.wizards.FolderSelectionWizardPage&quot;</p><p class=code id=tag>
+               pageTitle=<p class=code id=cstring>&quot;Select Folder&quot;</p><p class=code id=tag>
+               windowTitle=<p class=code id=cstring>&quot;New Flat File Data Source Profile&quot;</p><p class=code id=tag>
+               includesProgressMonitor=<p class=code id=cstring>&quot;false&quot;</p><p class=code id=tag>/&gt;</p>
+      <p class=code id=tag>&lt;/dataSourceUI&gt;</p>
+      <p class=code id=tag>&lt;dataSetUI
+            id=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.oda.flatfile.dataSet&quot;</p><p class=code id=tag>
+            initialPageId=<p class=code id=cstring>&quot;oda.flatfile.ui.tablePage&quot;</p><p class=code id=tag>
+            supportsInParameters=<p class=code id=cstring>&quot;false&quot;</p><p class=code id=tag>
+            supportsOutParameters=<p class=code id=cstring>&quot;false&quot;</p><p class=code id=tag>&gt;</p>
+         <p class=code id=tag>&lt;dataSetWizard
+               class=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizard&quot;</p><p class=code id=tag>
+               windowTitle=<p class=code id=cstring>&quot;Select Table&quot;</p><p class=code id=tag>/&gt;</p>
+         <p class=code id=tag>&lt;dataSetPage
+               displayName=<p class=code id=cstring>&quot;Select Columns&quot;</p><p class=code id=tag>
+               icon=<p class=code id=cstring>&quot;icons/file.gif&quot;</p><p class=code id=tag>
+               id=<p class=code id=cstring>&quot;oda.flatfile.ui.tablePage&quot;</p><p class=code id=tag>
+               path=<p class=code id=cstring>&quot;/&quot;</p><p class=code id=tag>
+               wizardPageClass=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.oda.flatfile.ui.wizards.FileSelectionWizardPage&quot;</p><p class=code id=tag>/&gt;</p>
+      <p class=code id=tag>&lt;/dataSetUI&gt;</p>
+   <p class=code id=tag>&lt;/extension&gt;</p>
+   </pre>
+</p>
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>API Information: </h6>[<b>Provisional</b>] An extension must implement the related dialog pages defined in the extension point's schema. 
+See the abstract base classes' JavaDoc documentation in the <i>org.eclipse.datatools.connectivity.oda.design.ui</i> project for more information.
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>Supplied Implementation: </h6>The plug-in <i>org.eclipse.datatools.connectivity.oda.flatfile.ui</i>, supplied with the Eclipse DTP Connectivity source, provides an example for implementing a simple ODA Design UI extension.
+<p></p>
+
+<br>
+<p class=note id=copyright>
+Copyright (c) 2006 Actuate Corporation.
+All rights reserved. This program and the accompanying materials are made available under the  terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+<p></p>
+
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/schema/.gitignore b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/schema/.gitignore
new file mode 100644
index 0000000..8e695ec
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/schema/.gitignore
@@ -0,0 +1 @@
+doc
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/schema/datasource.exsd b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/schema/datasource.exsd
new file mode 100644
index 0000000..bbc0b92
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/schema/datasource.exsd
@@ -0,0 +1,316 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.connectivity.oda.design.ui">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.datatools.connectivity.oda.design.ui" id="dataSource" name="Open Data Access Designer"/>
+      </appInfo>
+      <documentation>
+         This extension point provides extensibility to the Open Data Access (ODA) Designer UI framework, through which an user may define an ODA data source design and a data set design.  
+&lt;br&gt;An ODA driver that implements the ODA run-time extension point may optionally extend this ODA UI extension point to contribute customized ODA design wizard and property pages.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <complexType>
+         <sequence>
+            <element ref="dataSourceUI"/>
+            <element ref="dataSetUI" minOccurs="1" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="dataSourceUI">
+      <annotation>
+         <documentation>
+            Allows ODA data providers to define a customized dialog page for an user to create a new ODA data source design instance.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="newDataSourceWizard"/>
+         </sequence>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  A fully qualified ID that uniquely identifies the ODA data source extension within an ODA consumer application&apos;s environment.  Its value must match that of the &lt;i&gt;dataSource.id&lt;/i&gt; attribute defined in the  &lt;i&gt;org.eclipse.datatools.connectivity.oda.dataSource&lt;/i&gt; extension of the same ODA driver.  
+When implementing the &lt;i&gt;org.eclipse.datatools.connectivity.connectionProfile&lt;/i&gt; extension point, its &lt;i&gt;connectionProfile.id&lt;/i&gt; attribute must also match this id value.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="newDataSourceWizard">
+      <annotation>
+         <documentation>
+            Defines the customizable behavior of a data source wizard that allows an user to create a new ODA data source design instance.
+&lt;br&gt;The implementation class of the data source wizard is specified in the &lt;i&gt;newWizard.class&lt;/i&gt; attribute defined in the &lt;i&gt;org.eclipse.datatools.connectivity.connectionProfile&lt;/i&gt; extension point.  
+&lt;br&gt;The wizard class must either use or extend from the ODA framework&apos;s wizard base class, &lt;i&gt;org.eclipse.datatools.connectivity.oda.design.ui.wizards.NewDataSourceWizard&lt;/i&gt;. 
+&lt;br&gt;&lt;br&gt;
+This element includes the attributes to specify the customized wizard starting page that an extension contributes to the data source wizard.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="windowTitle" type="string">
+            <annotation>
+               <documentation>
+                  The customized title of the data source wizard window.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="includesProgressMonitor" type="boolean" use="default" value="true">
+            <annotation>
+               <documentation>
+                  Indicates whether the data source wizard should include a progress monitor.  Default value is &quot;true&quot;.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="pageTitle" type="string">
+            <annotation>
+               <documentation>
+                  The page title of the data source wizard&apos;s customized starting page.  This value, if specified, overrides any title that may have been set by the wizard page&apos;s constructor.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="pageClass" type="string" use="required">
+            <annotation>
+               <documentation>
+                  A fully qualified class name that implements the wizard starting page for creating a new ODA data source design instance.
+&lt;br&gt;This class must extend from the ODA abstract base class, &lt;i&gt;org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSourceWizardPage&lt;/i&gt;.
+&lt;br&gt;A default concrete implementation class is provided in the ODA framework,  &lt;i&gt;org.eclipse.datatools.connectivity.oda.design.ui.pages.impl.DefaultDataSourceWizardPage&lt;/i&gt;.  An ODA extension may choose to use or extend from this default implementation class.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSourceWizardPage"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="dataSetUI">
+      <annotation>
+         <documentation>
+            Allows ODA data providers to define customized dialog page(s) for an user to create or edit an ODA data set design instance.
+The element defines child elements for the data set wizard page(s) and editor page(s).  
+&lt;br&gt;An ODA host designer may use the custom wizard pages&apos; control for editing a data set design instance.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="dataSetWizard"/>
+            <element ref="dataSetPage" minOccurs="1" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  A fully qualified ID that uniquely identifies the ODA data set type within an ODA data source extension.  Its value must match that of the &lt;i&gt;dataSet.id&lt;/i&gt; attribute defined in the  &lt;i&gt;org.eclipse.datatools.connectivity.oda.dataSource&lt;/i&gt; extension of the same ODA driver.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="initialPageId" type="string">
+            <annotation>
+               <documentation>
+                  Identifies a particular dataSetPage that should be selected in a data set dialog.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="supportsInParameters" type="boolean" use="default" value="true">
+            <annotation>
+               <documentation>
+                  Indicates that this type of data set design supports input parameter definitions, and that an ODA host designer might need to collect further metadata on the parameter definitions provided by the customized page(s).
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="supportsOutParameters" type="boolean" use="default" value="false">
+            <annotation>
+               <documentation>
+                  Indicates that this type of data set design supports output parameter definitions, and that an ODA host designer might need to collect further metadata on the parameter definitions provided by the customized page(s).
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="dataSetWizard">
+      <annotation>
+         <documentation>
+            Defines a data set wizard that allows an user to create or edit an ODA data set design instance.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="class" type="string" use="default" value="org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizard">
+            <annotation>
+               <documentation>
+                  The implementation class of the data set wizard.  
+&lt;br&gt;The wizard class must either use or extend from the ODA framework&apos;s wizard base class, &lt;i&gt;org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizard&lt;/i&gt;.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizard"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="windowTitle" type="string">
+            <annotation>
+               <documentation>
+                  The customized title of the data set wizard window.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="dataSetPage">
+      <annotation>
+         <documentation>
+            Defines a customized page that an extension contributes to an ODA host designer&apos;s data set dialog.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  A unique name of this page within a data set dialog.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="wizardPageClass" type="string" use="required">
+            <annotation>
+               <documentation>
+                  A fully qualified class name that implements a data set wizard page to create or edit an ODA data set design instance.
+&lt;br&gt;This class must extend from the ODA abstract base class, &lt;i&gt;org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizardPage&lt;/i&gt;.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizardPage"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="displayName" type="string">
+            <annotation>
+               <documentation>
+                  The page title or descriptive name of a customized page that will be displayed in the UI of this page.
+This value, if specified, overrides any title or descriptive name that may have been set by the page&apos;s constructor.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="path" type="string">
+            <annotation>
+               <documentation>
+                  The path of the page in a data set preference dialog.
+&lt;br&gt;To add the page to the root node, specify &quot;/&quot; in this value.  Default value is &quot;/&quot;.
+&lt;br&gt;To add the page as a child of another page node, specify its full path starting with a &quot;/&quot;; and use the  &quot;/&quot; as a separator in between each page node in the hierarchy.
+&lt;br&gt;For example, a path value &quot;/parent&quot; would add this page as a child node to an existing page called &quot;parent&quot;.
+&lt;br&gt;&lt;br&gt;Note: The page with the name &quot;parent&quot; should have been added before attempting to add the child page.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="icon" type="string">
+            <annotation>
+               <documentation>
+                  A relative path to an icon that will be used in the UI in addition to the page&apos;s display name.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         3.0
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         &lt;p&gt;
+   &lt;pre&gt;
+   &lt;extension
+  point=&quot;org.eclipse.datatools.connectivity.oda.design.ui.dataSource&quot;&gt;
+      &lt;dataSourceUI id=&quot;%oda.data.source.id&quot;&gt;
+         &lt;newDataSourceWizard
+               pageClass=&quot;org.eclipse.datatools.connectivity.oda.flatfile.ui.wizards.FolderSelectionWizardPage&quot;
+               pageTitle=&quot;Select Folder&quot;
+               windowTitle=&quot;New Flat File Data Source Profile&quot;
+               includesProgressMonitor=&quot;false&quot;/&gt;
+      &lt;/dataSourceUI&gt;
+      &lt;dataSetUI
+            id=&quot;org.eclipse.datatools.connectivity.oda.flatfile.dataSet&quot;
+            initialPageId=&quot;oda.flatfile.ui.tablePage&quot;
+            supportsInParameters=&quot;false&quot;
+            supportsOutParameters=&quot;false&quot;&gt;
+         &lt;dataSetWizard
+               class=&quot;org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizard&quot;
+               windowTitle=&quot;Select Table&quot;/&gt;
+         &lt;dataSetPage
+               displayName=&quot;Select Columns&quot;
+               icon=&quot;icons/file.gif&quot;
+               id=&quot;oda.flatfile.ui.tablePage&quot;
+               path=&quot;/&quot;
+               wizardPageClass=&quot;org.eclipse.datatools.connectivity.oda.flatfile.ui.wizards.FileSelectionWizardPage&quot;/&gt;
+      &lt;/dataSetUI&gt;
+   &lt;/extension&gt;
+   &lt;/pre&gt;
+&lt;/p&gt;
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         [&lt;b&gt;Provisional&lt;/b&gt;] An extension must implement the related dialog pages defined in the extension point&apos;s schema. 
+See the abstract base classes&apos; JavaDoc documentation in the &lt;i&gt;org.eclipse.datatools.connectivity.oda.design.ui&lt;/i&gt; project for more information.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         The plug-in &lt;i&gt;org.eclipse.datatools.connectivity.oda.flatfile.ui&lt;/i&gt;, supplied with the Eclipse DTP Connectivity source, provides an example for implementing a simple ODA Design UI extension.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         Copyright (c) 2006 Actuate Corporation.
+All rights reserved. This program and the accompanying materials are made available under the  terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/designsession/.gitignore b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/designsession/.gitignore
new file mode 100644
index 0000000..73ebc4b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/designsession/.gitignore
@@ -0,0 +1 @@
+*.scc
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/designsession/DataSetDesignSessionBase.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/designsession/DataSetDesignSessionBase.java
new file mode 100644
index 0000000..0b129f5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/designsession/DataSetDesignSessionBase.java
@@ -0,0 +1,470 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.designsession;
+
+import java.util.ArrayList;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.DataSetDesign;
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest;
+import org.eclipse.datatools.connectivity.oda.design.DesignSessionResponse;
+import org.eclipse.datatools.connectivity.oda.design.OdaDesignSession;
+import org.eclipse.datatools.connectivity.oda.design.SessionStatus;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.OdaProfileUIExplorer;
+import org.eclipse.datatools.connectivity.oda.design.ui.manifest.DataSetUIElement;
+import org.eclipse.datatools.connectivity.oda.design.ui.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetEditorPage;
+import org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizard;
+import org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizardPage;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.jface.wizard.IWizardPage;
+
+/**
+ * Base class implementation of an UI data set design session for use 
+ * by an ODA host designer to interact and communicate with 
+ * custom ODA UI extensions to create or edit an extended 
+ * ODA data set design instance.
+ */
+public class DataSetDesignSessionBase
+{
+    private OdaDesignSession m_odaDesign;
+    private String m_odaDataSourceId;
+    private DataSetUIElement m_dataSetUIElement;
+    private DataSetWizard m_wizard;
+    private ArrayList<DataSetEditorPage> m_editorPages;
+    private boolean m_inCreateMode;
+
+    /** Not allowed to instantiate the class directly;
+     *  must start a design session using a subclass static start method
+     */      
+    protected DataSetDesignSessionBase( OdaDesignSession odaDesign, boolean isForNewDesign )
+        throws OdaException
+    {
+        initOdaDesign( odaDesign, isForNewDesign );
+    }
+        
+    /**
+     * Restarts the design session to create a new 
+     * data set design instance with the given name
+     * for the given ODA data set type.
+     * <br>Restarting a design session on the same 
+     * ODA data set type would preserve any
+     * user edits made on the session's custom wizard page.
+     * @param newDataSetName   a unique name that identifies a data set 
+     *          design instance
+     * @param odaDataSetId      an ODA data set element id;
+     *              may be null if the associated data source extension 
+     *              supports only one type of data set 
+     * @param dataSourceDesign  the associated data source design instance
+     * @throws OdaException
+     */
+    protected void restartNewDesign( String newDataSetName,
+                                String odaDataSetId, 
+                                DataSourceDesign dataSourceDesign )
+        throws OdaException
+    {
+        if( m_odaDesign != null )
+        {
+            if( odaDataSetId.equalsIgnoreCase( 
+                    m_odaDesign.getRequestDataSetDesign()
+                        .getOdaExtensionDataSetId() ) &&
+                EcoreUtil.equals( dataSourceDesign, 
+                    m_odaDesign.getRequestDataSourceDesign() ))
+            {
+                // just update the data set name
+                m_odaDesign.getRequestDataSetDesign()
+                    .setName( newDataSetName );
+                return;     // done
+            }
+        }
+        
+        // re-initialize with a new session instance
+        OdaDesignSession odaDesign = 
+            DesignSessionUtilBase.createNewDataSetRequestSession( newDataSetName, 
+                            odaDataSetId, dataSourceDesign );
+        initOdaDesign( odaDesign, true );
+        
+        // get a new wizard and initialize with 
+        // this session's odaDesign
+        disposePages(); // cannot reuse wizard
+        initWizard();              
+    }
+
+    /**
+     * Restarts the design session to edit the data set design specified 
+     * in the new design session request.
+     * <br>Specifying false in the resetEditorPages argument requests the design session 
+     * to try preserve any user edits made on the session's custom wizard page(s), if feasible.
+     * @param newRequest a new design session request to restart the design session
+     * @param resetEditorPages  true requests the design session to reset its custom editor pages,
+     *          false to try preserve the existing editor pages if feasible
+     * @return  true indicates that the restarted design session has reset its editor pages,
+     *          false otherwise
+     * @throws OdaException
+     * @since 3.0.7
+     */
+    protected boolean restartEditDesign( DesignSessionRequest newRequest, boolean resetEditorPages )
+        throws OdaException
+    {
+        if( m_odaDesign != null && 
+            ! resetEditorPages ) // try to preserve existing pages
+        {
+            if( canReuseEditorPages( newRequest ) )
+            {
+                // ok to reuse existing session's wizard and custom page(s);
+                // simply reset current design session w/ new request
+                m_odaDesign.setRequest( newRequest ); 
+                m_odaDesign.setResponse( null );
+                initWizard();
+                return false;     // done; restarted session did not need to use new custom editor pages
+            }
+        }
+        
+        // cannot re-use the same custom data set wizard;
+        // re-initialize with a new session instance
+        OdaDesignSession odaDesign =
+            DesignFactory.eINSTANCE.createOdaDesignSession();
+        odaDesign.setRequest( newRequest );
+        initOdaDesign( odaDesign, false );
+        
+        // get a new wizard and initialize with this session's odaDesign
+        disposePages(); // dispose existing wizard and custom pages
+        initWizard();
+        return true; // restarted session has reset new custom editor pages
+    }
+    
+    /**
+     * Check if the new request is for the same type of oda data set and 
+     * same data source design attributes.  If not the same, the custom editor pages
+     * must be reset.
+     */
+    private boolean canReuseEditorPages( DesignSessionRequest newRequest )
+    {
+        DataSetDesign newRequestDataSetDesign = newRequest.getDataSetDesign();
+        if( newRequestDataSetDesign == null )
+            return false;
+        if( ! m_odaDataSourceId.equalsIgnoreCase( 
+                newRequestDataSetDesign.getOdaExtensionDataSourceId() ) )
+            return false;   // reset pages for different oda data source type
+        if( ! m_odaDesign.getRequestDataSetDesign().getOdaExtensionDataSetId().equalsIgnoreCase( 
+                newRequestDataSetDesign.getOdaExtensionDataSetId() ))
+            return false;   // reset pages for different oda data set type
+            
+        // can reuse pages if same data source design attributes
+        return EcoreUtil.equals( m_odaDesign.getRequestDataSourceDesign(), 
+                                newRequest.getDataSourceDesign() );   
+    }
+    
+    /**
+     * Initialize the data set wizard.
+     * @throws OdaException
+     */
+    protected void initWizard()
+        throws OdaException
+    {
+        DataSetWizard wizard = getExtendedWizard();
+
+        // initialize wizard
+        wizard.initialize( m_odaDesign, m_dataSetUIElement, m_inCreateMode );
+    }
+       
+    /** 
+     * Initializes this session with the given oda design.
+     * @param odaDesign
+     * @throws OdaException
+     */
+    private void initOdaDesign( OdaDesignSession odaDesign, boolean isForNewDesign )
+        throws OdaException
+    {
+        m_odaDesign = odaDesign;
+
+        DataSetDesign dataSetDesign = odaDesign.getRequestDataSetDesign();
+        m_odaDataSourceId =
+            dataSetDesign.getOdaExtensionDataSourceId();
+        m_dataSetUIElement = DesignSessionUtilBase
+            .getDataSetUIElement( m_odaDataSourceId, 
+                    dataSetDesign.getOdaExtensionDataSetId() );  
+        m_inCreateMode = isForNewDesign;
+    }
+
+    /**
+     * Returns the session request that has started
+     * this design session.  
+     * @return  the design session request, which may specify
+     *          the original data set design to edit
+     */
+    protected DesignSessionRequest getRequest()
+    {
+        if( m_odaDesign == null )
+            return null;
+        return m_odaDesign.getRequest();
+    }
+    
+    /**
+     * Flushes the current state of this data set design session to the response
+     * of the returned OdaDesignSession.
+     * It would also reset this design session with the flushed design in a new request. 
+     * <br>Flushing a design session preserves and re-uses this session's custom page(s).
+     * <br>A design session can be flushed only when it is active, and has not gone through 
+     * the finish() operation.
+     * @return  a completed OdaDesignSession with the the original request and
+     *          the flushed data set design and designer state in the session response.
+     * @throws OdaException
+     */
+    protected OdaDesignSession flush()
+        throws OdaException
+    {
+        if( m_odaDesign == null )
+            throw new OdaException( Messages.common_notInDesignSession );
+
+        // triggers saving the latest design state into the response of the current OdaDesignSession
+        OdaDesignSession origSession = finishDataSetDesign();
+        if( origSession.getResponse() == null )
+            throw new OdaException( Messages.designSession_flushFailed );
+
+        // if the flushed session status was ok, copy the flushed session to a new one, and 
+        // reset its request with the latest response info;
+        // otherwise if session status was not ok, keep the original session request
+        if( origSession.getResponse().getSessionStatus() == SessionStatus.OK_LITERAL )
+        {
+            OdaDesignSession newSession = (OdaDesignSession) EcoreUtil.copy( origSession );
+            DesignSessionResponse latestResponse = newSession.getResponse();
+            newSession.getRequest().setNewDataAccessDesign( latestResponse.getDataSetDesign() );
+            newSession.getRequest().setDesignerState( latestResponse.getDesignerState() );
+            newSession.setResponse( null );
+            m_odaDesign = newSession;
+    
+            initWizard();
+        }
+        
+        return origSession;
+    }
+    
+    /**
+     * Performs finish on this design session to
+     * create or edit its data set design.  This then 
+     * gathers the data set definition collected in custom UI designer,
+     * and maps into a session response with the new or updated
+     * data set design instance.
+     * <br>This method must be called only after the corresponding 
+     * wizard or editor page has performed finish.
+     * @return  a completed ODA design with the session response
+     *          and the original request, if any.
+     * @throws OdaException
+     */
+    protected OdaDesignSession finish() throws OdaException
+    {
+        // validate if this design session is in a valid state
+        if( m_odaDesign == null )
+            throw new OdaException( Messages.common_notInDesignSession );
+
+    	OdaDesignSession finishedSession = 
+            finishDataSetDesign();
+        
+        // successfully finished
+        m_odaDesign = null;     // reset to complete session
+        disposePages();
+        return finishedSession;
+    }
+    
+    /**
+     * Performs cancel on this design session.
+     * The design session is then cancelled and returns a
+     * session response with a user_cancelled state.
+     * @return  the completed design session containing a
+     *          session response with a user_cancelled state
+     * @throws IllegalStateException	if this design session is not
+     * 				in a valid state, e.g. it is already finished or cancelled
+     */
+    protected OdaDesignSession cancel() throws IllegalStateException
+    {
+        // validate if this design session is in a valid state
+    	if( m_odaDesign == null )
+    		throw new IllegalStateException( Messages.common_notInDesignSession );
+    	
+        // sets a response with cancel status
+        m_odaDesign.setResponseInCancelledState();
+
+        OdaDesignSession cancelledSession = m_odaDesign;
+        m_odaDesign = null;     // reset to complete session
+        disposePages();
+        
+        return cancelledSession;
+    }
+    
+    /**
+     * Returns an ODA wizard for use within this design session
+     * to create a new, extended ODA data set design instance.
+     * @return  a wizard instance to embed in a wizard dialog
+     *          for use within this started design session
+     * @throws OdaException
+     */
+    protected IWizard getNewWizard() throws OdaException
+    {
+        return getExtendedWizard();
+    }
+
+    /** 
+     * Returns a customized starting wizard page
+     * for use within this design session to create or edit
+     * an extended ODA data set design instance.
+     * @return  a customized wizard page
+     *          for use within this started design session
+     * @throws OdaException
+     */
+    protected IWizardPage getWizardStartingPage() throws OdaException
+    {
+        return getNewWizard().getStartingPage();
+    }
+    
+    /**
+     * Returns an ODA wizard extended from the base wizard 
+     * provided by the ODA Designer UI framework.
+     * @return  a DataSetWizard instance
+     * @throws OdaException
+     */
+    protected DataSetWizard getExtendedWizard() 
+        throws OdaException
+    {
+        // validate if this design session is in a valid state
+        if( m_odaDesign == null )
+            throw new OdaException( Messages.common_notInDesignSession );
+
+        if( m_wizard == null )
+        {
+            m_wizard = OdaProfileUIExplorer.getInstance()
+                    .getDataSetWizard( m_odaDataSourceId, m_dataSetUIElement );
+
+        }
+        return m_wizard;
+    }    
+
+    /**
+     * Returns an ordered collection of customized editor pages
+     * for use within a design session to edit 
+     * an extended ODA data set design instance.
+     * Each editor page is an extended PropertyPage
+     * that can be used in a preference dialog.
+     * Their order is in the same sequence as the
+     * dataSetPage elements defined in the plugin extension manifest.
+     * @return  an array of customized editor pages
+     * @throws OdaException
+     */
+    protected DataSetEditorPage[] getEditorPages() throws OdaException
+    {
+        ArrayList<DataSetEditorPage> editorPages = getExtendedEditorPages();
+        return (DataSetEditorPage[]) editorPages.toArray( 
+                new DataSetEditorPage[ editorPages.size() ] );
+    }
+    
+    /**
+     * Returns an ordered collection of
+     * customized ODA data set editor pages,
+     * adapted from the custom data set wizard pages
+     * contributed by an ODA design ui extension.
+     * @return
+     * @throws OdaException
+     */
+    protected ArrayList getExtendedEditorPages()
+        throws OdaException
+    {
+        // validate if this design session is in a valid state
+        if( m_odaDesign == null )
+            throw new OdaException( Messages.common_notInDesignSession );
+
+    	if( m_editorPages != null )
+            return m_editorPages;
+        
+        IWizardPage[] pages = getExtendedWizard().getPages();
+        m_editorPages = new ArrayList<DataSetEditorPage>( pages.length );
+
+        // for each wizard page, convert to an editor page
+        for( int i = 0; i < pages.length; i++ )
+        {
+            if( pages[i] instanceof DataSetWizardPage )
+            {
+                m_editorPages.add( 
+                        new DataSetEditorPage( (DataSetWizardPage) pages[i] ));
+            }
+        }
+        return m_editorPages;
+    }
+    
+    /**
+     * Returns a customized editor page's adaptable element 
+     * that represents the
+     * the extended ODA data set design instance that is
+     * being edited.
+     * @return
+     */
+    protected IAdaptable getEditorPageElement()
+        throws OdaException
+    {
+        // validate if this design session is in a valid state
+        if( m_odaDesign == null )
+            throw new OdaException( Messages.common_notInDesignSession );
+            
+        DataSetDesign dataSetDesign = 
+            m_odaDesign.getRequestDataSetDesign();
+        return (IAdaptable) EcoreUtil.copy( dataSetDesign );
+    }
+
+    /**
+     * Performs finish on the current ODA design session to
+     * create a new data set design.  This 
+     * gathers the data set design definition collected in UI designer
+     * and maps into an OdaDesignSession with a response.
+     * <br>This method must be called only after the corresponding 
+     * wizard or editor has performed finish.
+     * @return  the completed design session containing the
+     *          new data set design within the session response
+     */
+    protected OdaDesignSession finishDataSetDesign() throws OdaException
+    {
+        DataSetWizard wizard = getExtendedWizard();
+
+        return wizard.getResponseSession();
+    }
+        
+    /**
+     * Dispose any current pages of the session.
+     * Ensures they would not be re-used if the session restarts.
+     */
+    private void disposePages()
+    {
+        if( m_wizard != null )
+        {
+            m_wizard.dispose();
+            m_wizard = null;
+        }
+        
+        if( m_editorPages != null )
+        {
+            int numPages = m_editorPages.size();
+            for( int i = 0; i < numPages; i++ )
+            {
+                DataSetEditorPage page = 
+                    (DataSetEditorPage) m_editorPages.get( i );
+                page.dispose();
+            }
+            m_editorPages = null;
+        }
+   }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/designsession/DataSourceDesignSessionBase.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/designsession/DataSourceDesignSessionBase.java
new file mode 100644
index 0000000..ab2ed5c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/designsession/DataSourceDesignSessionBase.java
@@ -0,0 +1,1195 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2013 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.designsession;
+
+import java.io.File;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest;
+import org.eclipse.datatools.connectivity.oda.design.DesignerState;
+import org.eclipse.datatools.connectivity.oda.design.OdaDesignSession;
+import org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.DesignerUtil;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.OdaProfileUIExplorer;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.CreateProfileStoreAction;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.ProfileSelectionEditorPage;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.ProfileSelectionWizard;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.ProfileSelectionWizardPage;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.ProfileStoreCreationDialog;
+import org.eclipse.datatools.connectivity.oda.design.ui.designsession.DesignSessionUtil;
+import org.eclipse.datatools.connectivity.oda.design.ui.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSourceEditorPage;
+import org.eclipse.datatools.connectivity.oda.design.ui.wizards.NewDataSourceWizard;
+import org.eclipse.datatools.connectivity.oda.design.util.DesignUtil;
+import org.eclipse.datatools.connectivity.oda.profile.OdaProfileExplorer;
+import org.eclipse.datatools.connectivity.oda.profile.internal.OdaConnectionProfile;
+import org.eclipse.datatools.connectivity.oda.profile.internal.OdaProfileFactory;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.dialogs.PropertyPage;
+
+/**
+ * Base class implementation of an UI data source design session 
+ * for use by an ODA host designer to interact and communicate 
+ * with custom ODA UI extensions to create or edit 
+ * an extended ODA data source design instance.
+ */
+public class DataSourceDesignSessionBase
+{
+    private String m_odaDataSourceId;
+    private OdaDesignSession m_designSession;
+    private NewDataSourceWizard m_dataSourceWizard;
+    private ProfileReferenceBase m_wizardProfileRef;
+    private DataSourceEditorPage m_editorPage;
+    private boolean m_inCreateMode = true;  // default; gets changed by edit session initialization
+    
+    private static final boolean USE_PROFILE_PAGE_DEFAULT_SETTING = false;
+    private boolean m_useProfileSelectionPage = USE_PROFILE_PAGE_DEFAULT_SETTING;
+    private ProfileSelectionWizard m_profileSelectionWizard;
+    private ProfileSelectionEditorPage m_profileEditorPage;
+    private ResourceIdentifiers m_profileResourceIds;   // temporary placeholder
+
+    // logging variable
+    private static final String sm_className = DataSourceDesignSessionBase.class.getName();
+    
+    /** Not allowed to instantiate the class directly;
+     *  must start a design session using a static start method
+     */  
+    protected DataSourceDesignSessionBase( String odaDataSourceId )
+    {
+        assert( odaDataSourceId != null && odaDataSourceId.length() > 0 );
+        m_odaDataSourceId = odaDataSourceId;
+    }
+    
+    protected DataSourceDesignSessionBase()
+    {
+        // no specific data source type specified, use profile selection page to select one
+        m_useProfileSelectionPage = true;
+    }
+
+	// @since 3.0.7
+    protected DataSourceDesignSessionBase( DesignSessionRequest sessionRequest )
+    {
+        if( sessionRequest != null )
+        {
+            // use the oda data source type, if available, in the specified sessionRequest
+            DataSourceDesign requestDataSourceDesign = sessionRequest.getDataSourceDesign();
+            if( requestDataSourceDesign != null )
+            {
+                String odaDataSourceId = requestDataSourceDesign.getOdaExtensionDataSourceId();
+                if( odaDataSourceId != null && odaDataSourceId.length() > 0 )
+                    m_odaDataSourceId = odaDataSourceId;
+            }
+        }
+        else    // null sessionRequest specified
+        {
+            // create a default design session request with an empty DataAccessDesign
+            sessionRequest = DesignFactory.eINSTANCE.createDesignSessionRequest();
+            sessionRequest.setNewDataAccessDesign( (DataSourceDesign) null );
+        }
+        m_designSession = DesignFactory.eINSTANCE.createOdaDesignSession();
+        m_designSession.setRequest( sessionRequest );
+
+        // if no specific data source type specified, use profile selection page to select one
+        if( m_odaDataSourceId == null )
+            m_useProfileSelectionPage = true;        
+    }
+   
+    /**
+     * Restarts the design session to create a new 
+     * data source design instance with the given name
+     * for the given ODA data source type, and initializes 
+     * with the properties specified in the given profile instance.
+     * <br>Restarting a design session on the same 
+     * ODA data source type would preserve any
+     * user edits made on the session's custom wizard page.
+     * @see #startNewDesign(String, String, ProfileReferenceBase, DesignSessionRequest)
+     */
+    protected void restartNewDesign( String odaDataSourceId,
+                                String newDataSourceName,
+                                ProfileReferenceBase profileRef )
+        throws OdaException
+    {
+        restartNewDesign( odaDataSourceId, newDataSourceName, profileRef, null );
+    }
+    
+    protected void restartNewDesign( String odaDataSourceId,
+                                String newDataSourceName,
+                                ProfileReferenceBase profileRef,
+                                DesignSessionRequest sessionRequest )
+        throws OdaException
+    {
+        // if restarting with a different oda data source type that is not applicable to 
+        // the existing wizard, reset the session's context and wizard 
+        if( m_odaDataSourceId == null || 
+            ( m_dataSourceWizard != null && 
+              ! m_dataSourceWizard.isValid( odaDataSourceId, profileRef ) ))
+        {
+            m_odaDataSourceId = odaDataSourceId;
+            if( m_dataSourceWizard != null )
+                m_dataSourceWizard.dispose();
+            m_dataSourceWizard = null;
+        }
+
+        // initialize the session with given attributes
+        initNewDesign( newDataSourceName, profileRef, sessionRequest );
+    }
+    
+    /**
+     * Initializes this design session with given attributes.
+     * @param newDataSourceName
+     * @param profileRef
+     * @throws OdaException
+     */
+    protected void initNewDesign( String newDataSourceName,
+                                ProfileReferenceBase profileRef )
+        throws OdaException
+    {
+        initNewDesign( newDataSourceName, profileRef, null );
+    }
+    
+    /**
+     * Initializes this design session with given attributes.
+     */
+    protected void initNewDesign( String newDataSourceName,
+                                ProfileReferenceBase profileRef,
+                                DesignSessionRequest sessionRequest )
+        throws OdaException
+    {
+        NewDataSourceWizard wizard = getExtendedWizard();
+        
+        // a new data source session has no previous designer state;
+        // no need to be concerned with passing designer state to 
+        // a new data source wizard
+        
+        // verifies that the given profile does exist in cache;
+        // if wizard was initialize w/ same profile instance,
+        // do not change any user edits on wizard page
+        Properties profileProps = null;
+        String profileDesc = null;
+        if( profileRef != null && 
+            ! profileRef.equals( m_wizardProfileRef ) )
+        {
+            profileProps = getProfileProperties( profileRef );
+            profileDesc = profileRef.getDescription();
+            
+            if( newDataSourceName == null || newDataSourceName.length() == 0 )
+                newDataSourceName = profileRef.getName();
+        }
+        
+        // initialize wizard with given name and properties, if any;
+        // and reset any previously linked profile
+        initWizard( wizard, newDataSourceName, profileDesc, profileProps, profileRef, sessionRequest );
+        
+        m_wizardProfileRef = profileRef;
+        
+        // create/update the top-level OdaDesignSession with given request, if exists
+        if( sessionRequest != null )
+        {
+            if( m_designSession == null )
+                m_designSession = DesignFactory.eINSTANCE.createOdaDesignSession();
+            m_designSession.setRequest( sessionRequest );
+        }
+    }
+
+    protected void initEditDesign( DesignSessionRequest request )
+    {
+        m_inCreateMode = false;
+        
+        // create a top-level OdaDesignSession with given request
+        OdaDesignSession odaSession = 
+            DesignFactory.eINSTANCE.createOdaDesignSession();
+        odaSession.setRequest( request );
+
+        m_designSession = odaSession;   // hold on till finish editing               
+    }
+    
+    protected void initEditDesign( DesignSessionRequest request,
+                                    DataSourceEditorPage editorPage )
+        throws OdaException
+    {
+        // initialize design session
+        initEditDesign( request );
+        
+        // Update the editor page's property values with those found
+        // in the given request's data source design; 
+        // also includes any additional state specified in
+        // the design session request
+        if( editorPage == null )
+            editorPage = getExtendedEditorPage();
+        editorPage.initEditSession( m_designSession );
+
+        if( m_editorPage != editorPage )
+        {
+            m_editorPage = editorPage;
+        }
+        
+        // initialize profile selection editor page, just in case it gets used;
+        // getter expects m_designSession is already initialized
+        getProfileSelectionEditorPage().initEditSession( m_designSession );
+        
+        m_editorPage.initProfileSelectionEditSession( getProfileSelectionEditorPage() );
+    }
+
+    /**
+     * Returns the session request that has started
+     * this design session.  May return null if none
+     * was used to start this design session.
+     * @return  the design session request, which may specify
+     *          the original data source design to edit
+     */
+    protected DesignSessionRequest getRequest()
+    {
+        if( m_designSession == null )
+            return null;
+        return m_designSession.getRequest();
+    }
+    
+    /**
+     * Indicates whether this design session is for creating a new design.
+     */
+    protected boolean isInCreateMode()
+    {
+        return m_inCreateMode;
+    }
+    
+    /**
+     * Indicates whether this design session is for editing an existing design.
+     */
+    protected boolean isInEditMode()
+    {
+        return ! m_inCreateMode;
+    }
+
+    /**
+     * Performs finish on this design session to
+     * create or edit its data source design.  This then 
+     * gathers the data source definition collected in custom UI designer,
+     * and maps into a session response with a new or updated
+     * data source design instance.
+     * <br>This method must be called only after the corresponding 
+     * wizard or editor has performed finish.
+     * <br>Returns a completed design session with a 
+     * session response that contains a new or updated 
+     * data source design instance, and the designer state. 
+     * @return  a completed ODA design with the session response
+     *          and the original request, if any.
+     */
+    protected OdaDesignSession finish() throws OdaException
+    {
+        OdaDesignSession finishedSession;
+        if( m_inCreateMode )
+            finishedSession = finishNewDataSource();
+        else    // in an edit session
+            finishedSession = finishEditDataSource();
+        
+        // successfully finished
+        m_designSession = null;     // reset to complete session
+        disposePages();
+        return finishedSession;
+    }
+    
+    /**
+     * Performs cancel on this design session.
+     * The design session is then cancelled and contains
+     * session response with a user_cancelled state.
+     * @return  the completed design session containing a
+     *          session response with a user_cancelled state
+     */
+    protected OdaDesignSession cancel()
+    {
+        if( m_designSession == null )
+        {
+            // currently in a session to create a new design instance;
+            // create a design session object with an 
+            // empty DataAccessDesign in the request
+            m_designSession = createDefaultRequestDesignSession();
+        }
+
+        // sets a response with cancel status
+        m_designSession.setResponseInCancelledState();
+
+        OdaDesignSession cancelledSession = m_designSession;
+        m_designSession = null;     // reset to complete session
+        disposePages();
+        
+        return cancelledSession;
+    }
+
+    /**
+     * Dispose any current pages of the session.
+     * Ensures they would not be re-used after the session ends.
+     */
+    private void disposePages()
+    {
+        if( m_dataSourceWizard != null )
+        {
+            m_dataSourceWizard.dispose();
+            m_dataSourceWizard = null;
+        }
+        if( m_profileSelectionWizard != null )
+        {
+            m_profileSelectionWizard.dispose();
+            m_profileSelectionWizard = null;
+        }
+        
+        if( m_editorPage != null )
+        {
+            m_editorPage.dispose();
+            m_editorPage = null;
+        }
+        if( m_profileEditorPage != null )
+        {
+            m_profileEditorPage.dispose();
+            m_profileEditorPage = null;
+        }
+
+        m_wizardProfileRef = null;
+        m_useProfileSelectionPage = USE_PROFILE_PAGE_DEFAULT_SETTING;   // reset to default setting
+    }
+
+    /**
+     * Specifies whether the design session should provide a connection profile
+     * selection UI page.
+     */
+    protected void setUseProfileSelectionPage( boolean use )
+    {
+        m_useProfileSelectionPage = use;
+    }
+    
+    /**
+     * Specifies that the design session should provide a connection profile
+     * selection UI page, and verifies whether it has valid content for the design session.
+     * @return  true if this design session's profile selection page has valid content; 
+     *          false otherwise
+     */
+    protected boolean setAndVerifyUseProfileSelectionPage()
+    {
+        setUseProfileSelectionPage( true );
+        
+        if( ! isInEditMode() )
+            return true;    // no need to check for the profile state of the profile editor page
+        
+        ProfileSelectionEditorPage profilePage = null;
+        try
+        {
+            profilePage = getProfileSelectionEditorPage();
+        }
+        catch( OdaException ex )
+        {
+            ex.printStackTrace();
+            return false;
+        }
+        return ( profilePage != null ) ? profilePage.hasValidContent() : false;
+    }
+
+    /**
+     * Passes the provided name validator to the wizard page that takes
+     * user input of a design name.
+     * @param validator
+     */
+    protected void setDesignNameValidator( IDesignNameValidatorBase validator )
+    {
+        if( m_inCreateMode )    // in create new design mode
+            ((ProfileSelectionWizardPage) getProfileSelectionWizard().getStartingPage() )
+                .setDesignNameValidator( validator );
+    }
+    
+    /**
+     * Returns an ODA wizard for use within this design session
+     * to create a new, extended ODA data source design instance.
+     * @return  a wizard instance to embed in a wizard dialog
+     *          for use within this started design session
+     * @throws OdaException
+     */
+    protected IWizard getNewWizard() throws OdaException
+    {
+        if( hasSelectedOdaDataSource() )
+            return getExtendedWizard();
+        
+        // no specific oda data source specified yet,
+        // need to use a connection proifle wizard for user to select one
+        return getProfileSelectionWizard();
+    }
+
+    /** 
+     * Returns a customized starting wizard page
+     * for use within this design session to create
+     * a new, extended ODA data source design instance.
+     * @return  a customized wizard page to add in a wizard
+     *          for use within this started design session
+     * @throws OdaException
+     */
+    protected IWizardPage getWizardStartingPage() throws OdaException
+    {
+        /* 
+         * has selected the use of a profile selection page as starting page;
+         * or no specific oda data source specified yet,
+         * create a connection profile wizard and its starting page for user to select one.
+         */
+        if( m_useProfileSelectionPage || ! hasSelectedOdaDataSource() )
+            return getProfileSelectionWizard().getStartingPage();
+        
+        return getExtendedWizard().getCustomStartingPage();        
+    }
+    
+    private ProfileSelectionWizard getProfileSelectionWizard()
+    {
+        if( m_profileSelectionWizard == null )
+        {
+            m_profileSelectionWizard = new ProfileSelectionWizard( this, getProfileResourceIdentifiers() );
+            // reset placeholder after having passed instance to the profile wizard
+            setProfileResourceIdentifiers( null ); 
+        }
+        return m_profileSelectionWizard;
+    }
+    
+    private ResourceIdentifiers getProfileResourceIdentifiers()
+    {
+        return m_profileResourceIds;
+    }
+
+    protected void setProfileResourceIdentifiers( ResourceIdentifiers profileResourceIds )
+    {
+        m_profileResourceIds = profileResourceIds;
+    }
+
+    /**
+     * For use by internal packages only.
+     */
+    public IWizardPage getNewCustomOdaStartingPage(
+                            String odaDataSourceId,
+                            String newDataSourceName,
+                            ProfileReferenceBase profileRef )
+        throws OdaException
+    {
+        DesignSessionRequest sessionRequest = ( m_designSession != null ) ? 
+                m_designSession.getRequest() : null;
+        restartNewDesign( odaDataSourceId, newDataSourceName, profileRef, sessionRequest );
+        return hasSelectedOdaDataSource() ?
+                getExtendedWizard().getCustomStartingPage() : null;
+    }
+    
+    /**
+     * Returns an ODA wizard extended from the base wizard 
+     * provided by the ODA Designer UI framework.
+     * @return  a NewDataSourceWizard instance
+     * @throws OdaException
+     */
+    protected NewDataSourceWizard getExtendedWizard() 
+        throws OdaException
+    {
+        if( m_dataSourceWizard == null )
+        {
+            assert( hasSelectedOdaDataSource() );
+
+            m_dataSourceWizard = OdaProfileUIExplorer.getInstance()
+                    .getNewDataSourceWizardByType( m_odaDataSourceId );
+
+            // if data source extension has not specified newWizard for 
+            // connectionProfile extension point, use default base class
+            if( m_dataSourceWizard == null )    
+                m_dataSourceWizard = new NewDataSourceWizard( m_odaDataSourceId );
+        }
+        return m_dataSourceWizard;
+    }
+
+    /**
+     * Initialize the given wizard, and process its
+     * profile name page with automatically assigned attributes.
+     * Adds pages to the given wizard if it has not been 
+     * initialized with pages.
+     * @param wizard    associated data source wizard
+     * @param aDataSourceName   unique name to assign to new data source instance
+     * @param aDataSourceDesc   optional profile description; may be null
+     * @param dataSourceProps   initialized properties for use by
+     *                          wizard; may be null
+     */
+    private void initWizard( NewDataSourceWizard wizard, 
+                             String aDataSourceName,
+                             String aDataSourceDesc,
+                             Properties dataSourceProps,
+                             ProfileReferenceBase newProfileRef,
+                             DesignSessionRequest sessionRequest )
+        throws OdaException
+    {
+        wizard.initOdaDesignSession( newProfileRef, sessionRequest );
+        
+        wizard.addPages();
+        
+        if( wizard.hasProfileNamePage() )
+        {
+            if( aDataSourceName == null || aDataSourceName.length() == 0 )
+                throw new OdaException( Messages.designSession_invalidArgument );
+                
+            // process the given wizard's profile name page,
+            // with automatically assigned attributes.     
+            wizard.setProfilePageProperties( aDataSourceName, aDataSourceDesc, null, Boolean.TRUE );
+        }
+        
+        // pass given properties to wizard for initialization;
+        // if none is specified, keep wizard's existing properties
+        wizard.refreshPropertiesIfExist( dataSourceProps );
+    }
+
+    /**
+     * Returns the editor page that updates the selection of a connection profile.
+     */
+    protected ProfileSelectionEditorPage getProfileSelectionEditorPage() throws OdaException
+    {
+        if( m_profileEditorPage == null )
+        {
+            // validate if a design session was successfully initialized earlier
+            if( m_designSession == null )
+                throw new OdaException( Messages.common_notInDesignSession );
+            
+            m_profileEditorPage = new ProfileSelectionEditorPage();
+       }
+        
+        return m_profileEditorPage;
+    }
+    
+    /**
+     * Returns a customized editor page
+     * for use within a design session to edit 
+     * an extended ODA data source design instance.
+     * @return  a customized property page
+     * @throws OdaException
+     */
+    protected PropertyPage getEditorPage() throws OdaException
+    {
+        return getAdaptableEditorPage();
+    }
+    
+    /**
+     * Returns a customized editor page's adaptable element 
+     * that represents the
+     * the extended ODA data source design instance that is
+     * being edited.
+     * @return
+     */
+    protected IAdaptable getEditPropertyPageElement()
+        throws OdaException
+    {
+        // validate if start was successfully called earlier
+        if( m_designSession == null )
+            throw new OdaException( Messages.common_notInDesignSession );
+            
+        return DesignerUtil.getAdaptableDataSourceDesign( m_designSession );
+    }
+    
+    protected DataSourceEditorPage getAdaptableEditorPage() throws OdaException
+    {
+        DataSourceEditorPage editorPage = getExtendedEditorPage();
+        if( editorPage.getElement() == null )
+            editorPage.setElement( getEditPropertyPageElement() );
+        return editorPage;
+    }
+    
+    /**
+     * Returns an ODA data source editor page  
+     * provided by the ODA Designer UI framework that
+     * extends from the base DataSourceEditorPage property page.
+     * @return
+     * @throws OdaException
+     */
+    protected DataSourceEditorPage getExtendedEditorPage() throws OdaException
+    {
+        if( m_editorPage == null )
+        {
+            m_editorPage = OdaProfileUIExplorer.getInstance()
+                    .getDataSourceEditorPage( m_odaDataSourceId );
+            if( m_editorPage == null )  // ODA extension did not implement editor page
+            {
+                throw new OdaException( Messages.extension_missingPropertyPage );
+            }
+        }
+        return m_editorPage;
+    }
+    
+    private Properties getProfileProperties( ProfileReferenceBase profileRef )
+        throws OdaException
+    {
+        Properties profileProps;
+        try
+        {
+            IConnectionProfile profile = profileRef.getProfileInstance();
+//            if( ! m_odaDataSourceId.equalsIgnoreCase( 
+//                    profile.getProviderId() ))
+//                throw new IllegalArgumentException();
+            
+            profileProps = profile.getBaseProperties();
+        }
+        catch( Exception ex )
+        {
+            throw new OdaException( ex );
+        }
+        return profileProps;
+    }
+
+    /**
+     * Performs finish on the current ODA design session to
+     * create a new data source design.  This 
+     * gathers the data source definition collected in UI designer
+     * and maps into an OdaDesignSession with a response.
+     * <br>This method must be called only after the corresponding 
+     * wizard or editor has performed finish.
+     * @return  the completed design session containing the
+     *          new data source design within the session response
+     */
+    protected OdaDesignSession finishNewDataSource() throws OdaException
+    {
+        NewDataSourceWizard wizard = null;
+        try
+        {
+            wizard = getExtendedWizard();
+        }
+        catch( OdaException ex )
+        {
+            // wizard session has error;
+            // log as warning
+            ex.printStackTrace();
+            DesignerLogger logger = DesignerLogger.getInstance();
+            logger.warning( sm_className, "finishNewDataSource",  //$NON-NLS-1$
+                    "Caught exception while getting an extended wizard.", ex ); //$NON-NLS-1$
+        }
+        
+        // up to wizard to validate whether it has a valid design to return
+        DataSourceDesign newDataSourceDesign = 
+            ( wizard != null ) ? 
+                    wizard.getDataSourceDesign() : null;
+        return setDesignSessionResponse( m_designSession, newDataSourceDesign, wizard );
+    }
+
+    /**
+     * Performs finish on the current ODA design session to
+     * create a new data source design from a specified connection profile.
+     * @param newDataSourceName unique name to assign to the new data source instance;
+     *                          may be null or empty, in which case the profile name
+     *                          is applied
+     * @param profileRef        reference to an existing profile instance
+     *                          kept in an external profile storage file
+     * @return  the completed design session containing the
+     *          new data source design within the session response
+     * @throws OdaException
+     */
+    protected OdaDesignSession finishNewDesignFromProfile(
+                                    String newDataSourceName,
+                                    ProfileReferenceBase profileRef )
+        throws OdaException
+    {
+        DataSourceDesign newDataSourceDesign =
+            finishDataSourceDesignFromProfile( newDataSourceName, profileRef );
+        return setDesignSessionResponse( m_designSession, newDataSourceDesign, getExtendedWizard() );        
+    }
+    
+    private DataSourceDesign finishDataSourceDesignFromProfile(
+                                    String newDataSourceName,
+                                    ProfileReferenceBase profileRef )
+        throws OdaException
+    {
+        // since wizard page is not added, initiates
+        // finish on wizard's design session in lieu of page's performFinish
+        NewDataSourceWizard wizard = getExtendedWizard();
+        DataSourceDesign newDataSourceDesign =
+                        wizard.finishDataSourceDesign();
+        
+        // applies the profile identifers to the new data source design
+        if( newDataSourceDesign != null )
+        {
+            assert( profileRef != null );
+            assert( profileRef.getProfileInstance() != null );
+            
+            if( newDataSourceName == null || newDataSourceName.length() == 0 )
+                newDataSourceName = profileRef.getName();
+            newDataSourceDesign.setName( newDataSourceName );
+            newDataSourceDesign.setDisplayName( profileRef.getDescription() );
+        }
+        
+        return newDataSourceDesign;
+    }
+ 
+    /**
+     * Converts the data source design, in the specified DesignSessionRequest,
+     * to export its connection properties to a new connection profile instance, 
+     * and optionally links to it.
+     * @param request   a design session request, must contain
+     *                  a valid data source design to convert from
+     * @param newProfileBaseName    optional suggested base name of the new 
+     *                  connection profile; may be null or empty to use the same
+     *                  name as that of the data source design
+     * @param useProfileInDesign    indicates whether to update the data source design
+     *                  to link to the exported profile
+     * @param promptCreateProfileStore  indicates whether to prompt users to
+     *                  create a separate connection profile store
+     * @param parentShell   the parent shell for the UI dialog to create profile store;
+     *                  must not be null if promptCreateProfileStore is true
+     * @return  the completed design session containing a
+     *          session response with the converted data source design
+     * @throws OdaException if the conversion task failed
+     */
+    protected OdaDesignSession convertDesignToProfile( 
+            DesignSessionRequest request, 
+            String newProfileBaseName, boolean useProfileInDesign,
+            boolean promptCreateProfileStore, Shell parentShell )
+        throws OdaException
+    {
+        // first initialize design session
+        initEditDesign( request );
+        
+        // make a copy of the request data source design to convert
+        DataSourceDesign editDataSourceDesign =
+            DesignerUtil.getAdaptableDataSourceDesign( m_designSession ).getDataSourceDesign();
+        
+        // create a new connection profile in default profile store file 
+        // with the design's connection properties
+        IConnectionProfile exportedProfile = 
+            DesignSessionUtil.createProfile( editDataSourceDesign, newProfileBaseName );
+        
+        // if the prompt indicator is set with a parent shell, open create profile store dialog 
+        File linkedProfileStoreFile = null;
+        boolean convertToRelativePath = false;  // keeps absolute path by default
+        if( promptCreateProfileStore && parentShell != null )
+        {
+            CreateProfileStoreAction createAction = new CreateProfileStoreAction( parentShell, 
+                    editDataSourceDesign.getHostResourceIdentifiers() );
+            
+            // pre-select the exported profile to be included in the new profile store
+            IConnectionProfile profileElement = ( exportedProfile instanceof OdaConnectionProfile ) ?
+                    ((OdaConnectionProfile)exportedProfile).getWrappedProfile() : exportedProfile;
+            createAction.setPreSelectedProfile( profileElement );
+            
+            createAction.run();
+            if( createAction.isCompleted() )
+            {
+                // copy the newly created profile store file path
+                ProfileStoreCreationDialog dlg = createAction.getProfileStoreCreationDialog();
+                if( dlg != null )
+                {
+                    linkedProfileStoreFile = dlg.getFile();
+                    convertToRelativePath = dlg.isProfileStorePathRelative();
+                }
+            }
+        }
+
+        // update design to link to exported profile
+        if( useProfileInDesign )
+        {
+            // if no user-defined profile store path, use the default profile store file 
+            if( linkedProfileStoreFile == null )
+            {
+                linkedProfileStoreFile = OdaProfileFactory.defaultProfileStoreFile();
+            }
+    
+            // link the exported profile in data source design
+            editDataSourceDesign.setLinkedProfileName( exportedProfile.getName() );
+            editDataSourceDesign.setLinkedProfileStoreFilePath( 
+                    DesignUtil.convertFileToResourcePath( linkedProfileStoreFile, 
+                                 editDataSourceDesign.getHostResourceIdentifiers(), 
+                                 convertToRelativePath ) );   
+        }
+        
+        return setDesignSessionResponse( m_designSession, editDataSourceDesign, null );        
+    }
+
+    /**
+     * Creates a completed design session containing the
+     * specified new data source design within the session response.
+     * Also includes any custom designer state
+     * that may be optionally set by an extended wizard and its
+     * custom pages.
+     * @param newDataSourceDesign
+     * @param wizard
+     * @return
+     * @deprecated as of 3.0.7, internal method is obsolete
+     * @see {@link #setDesignSessionResponse(OdaDesignSession, DataSourceDesign, NewDataSourceWizard)}
+     */
+    protected static OdaDesignSession createResponseDesignSession( 
+            DataSourceDesign newDataSourceDesign,
+            NewDataSourceWizard wizard )
+    {
+        boolean isSessionOk = ( newDataSourceDesign != null );
+        OdaDesignSession responseSession =
+            DesignFactory.eINSTANCE.createResponseDesignSession( 
+                isSessionOk, newDataSourceDesign );
+        
+        // set wizard's designerState, if any, in design session response
+        setResponseDesignerState( responseSession, wizard );
+        
+        return responseSession;
+    }
+    
+    /**
+     * Creates or updates a completed design session with a session response,
+     * containing the specified data source design.
+     * Also includes any custom designer state
+     * that may be optionally set by an extended wizard and its custom pages.
+     */
+    private static OdaDesignSession setDesignSessionResponse( OdaDesignSession designSession,
+            DataSourceDesign responseDataSourceDesign,
+            NewDataSourceWizard wizard )
+    {
+        if( designSession == null )
+        {
+            designSession = createDefaultRequestDesignSession();
+        }
+        
+        // sets a new response with session status and specified DataSourceDesign
+        boolean isSessionOk = ( responseDataSourceDesign != null );
+        designSession.setNewResponse( isSessionOk, responseDataSourceDesign );
+        
+        // set wizard's designerState, if any, in design session response
+        setResponseDesignerState( designSession, wizard );
+
+        return designSession;
+    }   
+
+    /** 
+     * Creates a default design session with an empty DataAccessDesign in the request.
+     */
+    private static OdaDesignSession createDefaultRequestDesignSession()
+    {
+        return DesignFactory.eINSTANCE.createRequestDesignSession( null );
+    }
+    
+    /**
+     * Set wizard's designerState, if set by extended wizard page, in design session response.
+     */
+    private static void setResponseDesignerState( OdaDesignSession designSession,
+            NewDataSourceWizard wizard )
+    {
+        assert( designSession != null );
+        if( wizard != null )
+        {
+            DesignerState customState = wizard.getResponseDesignerState();
+            if( customState != null )
+                designSession.getResponse().setDesignerState( customState );
+        }
+    }
+    
+    /**
+     * Performs finish on the current ODA design session to
+     * edit a data source design.  
+     * <br>This method must be called only after performOk on
+     * the editor page is done.
+     * @return  the completed design session containing the
+     *          edited data source design within the session response
+     * @throws OdaException
+     */
+    protected OdaDesignSession finishEditDataSource()
+        throws OdaException
+    {
+        assert( m_designSession != null );
+        
+        // next collect values from the custom editor page 
+        DataSourceEditorPage editorPage = null;
+        try
+        {
+            editorPage = getAdaptableEditorPage();
+        }
+        catch( OdaException ex )
+        {
+            // log error
+            DesignerLogger logger = DesignerLogger.getInstance();
+            logger.severe( sm_className, "finishEditDataSource",  //$NON-NLS-1$
+                    "Caught exception while getting an extended editor page.", ex ); //$NON-NLS-1$
+            throw ex;    // editor page session has error
+        }
+        
+        assert( editorPage != null );        
+        OdaDesignSession responseSession = null;
+        if( editorPage.isInOdaDesignSession() )
+            responseSession = editorPage.getEditSessionResponse();
+
+        // next get an updated DataSourceDesign from profile selection page
+        if( m_useProfileSelectionPage )
+        {
+            // copy selected profile attributes to the custom page response's design
+            ProfileSelectionEditorPage profilePage = getProfileSelectionEditorPage();
+            if( profilePage.isInOdaDesignSession() )
+                responseSession = profilePage.getEditSessionResponse();
+        }
+        
+        return responseSession;
+    }
+    
+    private boolean hasSelectedOdaDataSource()
+    {
+        return( m_odaDataSourceId != null && m_odaDataSourceId.length() > 0 );
+    }
+
+    /**
+     * Represents the reference information of an external
+     * connection profile.
+     */
+    public static class ProfileReferenceBase
+    {
+        private String m_instanceId;
+        private String m_instanceName;
+        private File m_storageFile; 
+        private boolean m_maintainLink;
+        private String m_storageFilePathPropValue;
+        
+        private OdaConnectionProfile m_profileInstance;
+        
+        /**
+         * Constructor.
+         * @param profileInstanceId profile instance id; such as the
+         *              instance id returned by the 
+         *              <code>DesignSessionUtil.getProfileIdentifiers</code> method
+         * @param storageFile   a file that stores profile instances;
+         *              may be null, which means to use the
+         *              default DTP profiles storage file
+         * @param maintainExternalLink  "true" indicates to maintain a link to the 
+         *              given profile instance and storageFile, and applies its 
+         *              latest properties values at run-time.
+         *              "false" indicates to work with a copy of the current properties
+         *              specified in the profile instance; any future
+         *              changes to the profile instance is not applied to
+         *              the data source design.
+         * @param storageFilePathPropertyValue   the file pathname of a profile store file,
+         *              to be saved as a data source design property;
+         *              may be in absolute path or relative based on a host-defined 
+         *              design resource identifiers
+         */
+        public ProfileReferenceBase( String profileInstanceId,
+                                File storageFile, 
+                                boolean maintainExternalLink,
+                                String storageFilePathPropertyValue )
+        {
+            m_instanceId = profileInstanceId;
+            m_storageFile = storageFile;
+            m_maintainLink = maintainExternalLink;
+            m_storageFilePathPropValue = storageFilePathPropertyValue;
+        }
+
+        /**
+         * Constructor.
+         * @param profileInstanceName   the name of a profile instance that
+         *              uniquely identifies a profile within a profile storage file
+         * @param storageFilePathPropertyValue   the file pathname of a profile store file,
+         *              as saved in a data source design property;
+         *              may be in absolute path or relative based on the specified designResourceIds
+         * @param maintainExternalLink  "true" indicates to maintain a link to the 
+         *              given profile instance name and storageFilePath, and applies its 
+         *              latest properties values at run-time.
+         *              "false" indicates to work with a copy of the current properties
+         *              specified in the profile instance; any future
+         *              changes to the profile instance is not applied to
+         *              the data source design.
+         * @param designResourceIds   a design resource identifier instance
+         *              defined by the host application
+         */
+        public ProfileReferenceBase( String profileInstanceName,
+                String storageFilePathPropertyValue, 
+                boolean maintainExternalLink,
+                ResourceIdentifiers designResourceIds )
+        {
+            m_instanceName = profileInstanceName;
+            m_storageFilePathPropValue = storageFilePathPropertyValue;
+            m_storageFile = DesignUtil.convertPathToResourceFile( storageFilePathPropertyValue, designResourceIds );
+            m_maintainLink = maintainExternalLink;
+        }
+
+        public String getInstanceId()
+        {
+            if( m_instanceId == null && m_instanceName != null )
+            {
+                // look up the id from named instance
+                IConnectionProfile profile = getProfileInstance();
+                if( profile != null )
+                    m_instanceId = profile.getInstanceID();               
+            }
+            return m_instanceId;
+        }
+
+        public String getName()
+        {
+            if( m_instanceName == null && m_instanceId != null )
+            {
+                // look up the name from instance
+                IConnectionProfile profile = getProfileInstance();
+                if( profile != null )
+                    m_instanceName = profile.getName();
+            }
+            return m_instanceName;
+        }
+
+        public String getDescription()
+        {
+            IConnectionProfile profileInstance = getProfileInstance();
+            return ( profileInstance != null ) ?
+                    profileInstance.getDescription() : null;
+        }
+       
+        public File getStorageFile()
+        {
+            return m_storageFile;
+        }
+        
+        public String getStorageFilePath()
+        {
+        	// derive from actual File, if exists
+            String actualFilePath = DesignUtil.convertFileToPath( getStorageFile() );
+            return ( actualFilePath != null ) ? actualFilePath : getStorageFilePathPropertyValue();
+        }
+        
+        public String getStorageFilePathPropertyValue()
+        {
+            return m_storageFilePathPropValue;
+        }
+        
+        public boolean maintainExternalLink()
+        {
+            return m_maintainLink;
+        }
+
+        public IConnectionProfile getProfileInstance()
+        {
+            return getOdaProfileInstance();
+        }
+        
+        private OdaConnectionProfile getOdaProfileInstance()
+        {
+            if( m_profileInstance != null )
+                return m_profileInstance;
+            
+            // first try find by instance id, if available
+            if( m_instanceId != null )
+                m_profileInstance = getInstanceById();
+
+            // not found yet, next try find by instance name, if available
+            if( m_profileInstance == null && m_instanceName != null )
+                m_profileInstance = getInstanceByName();
+
+            return m_profileInstance;
+        }
+        
+        private OdaConnectionProfile getInstanceById()
+        {
+            OdaConnectionProfile profileInstance = null;
+            try
+            {
+                profileInstance =
+                    (OdaConnectionProfile) OdaProfileExplorer.getInstance()
+                            .getProfileById( m_instanceId, m_storageFile );
+            }
+            catch( OdaException ex )
+            {
+                // log as warning
+                ex.printStackTrace();
+                DesignerLogger logger = DesignerLogger.getInstance();
+                logger.warning( sm_className, "ProfileReferenceBase.getInstanceById",  //$NON-NLS-1$
+                        "Caught exception while getting an instance of connection profile by id (" +  //$NON-NLS-1$
+                        m_instanceId + ") from " + m_storageFile + " .", ex ); //$NON-NLS-1$ //$NON-NLS-2$
+            }
+            return profileInstance;
+        }
+        
+        private OdaConnectionProfile getInstanceByName()
+        {
+            OdaConnectionProfile profileInstance = null;
+            try
+            {
+                profileInstance =
+                    (OdaConnectionProfile) OdaProfileExplorer.getInstance()
+                            .getProfileByName( m_instanceName, m_storageFile );    // use default store if null is specified
+            }
+            catch( OdaException ex )
+            {
+                // log as warning
+                ex.printStackTrace();
+                DesignerLogger logger = DesignerLogger.getInstance();
+                logger.warning( sm_className, "ProfileReferenceBase.getInstanceByName",  //$NON-NLS-1$
+                        "Caught exception while getting an instance of connection profile by name (" +  //$NON-NLS-1$
+                        m_instanceName + ") from " + m_storageFile + " .", ex ); //$NON-NLS-1$ //$NON-NLS-2$
+            } 
+            return profileInstance;
+        }
+        
+        /**
+         * Compares this content with those of the specified instance.
+         * @param aProfileRef
+         * @return  true if the argument is not null and has same content;
+         *          false otherwise
+         */
+        public boolean equals( ProfileReferenceBase aProfileRef )
+        {
+            if( ! equalsIgnoreMaintainLink( aProfileRef ) )
+                return false;
+            
+            return( this.m_maintainLink == aProfileRef.m_maintainLink );
+        }
+        
+        /**
+         * Compares this content with those of the specified instance,
+         * ignoring their maintain external link attribute values.
+         * @param aProfileRef
+         * @return  true if the argument is not null and has same content, except their
+         *          maintain external link attribute values;
+         *          false otherwise
+         * @since 3.0.4
+         */
+        public boolean equalsIgnoreMaintainLink( ProfileReferenceBase aProfileRef )
+        {
+            if( aProfileRef == null )
+                return false;
+            
+            if( this.m_storageFile != null &&
+                ! this.m_storageFile.equals( aProfileRef.m_storageFile ) )
+                return false;
+            if( m_storageFile == null && aProfileRef.m_storageFile != null )
+                return false;
+           
+            // exact same non-null id means the same profile instance; no need to check for name
+           if( this.m_instanceId != null && 
+               this.m_instanceId.equals( aProfileRef.m_instanceId ) )
+                return true;  
+           
+           if( this.m_instanceId != null && 
+               ! this.m_instanceId.equals( aProfileRef.m_instanceId ) )
+                   return false;
+           if( m_instanceId == null && aProfileRef.m_instanceId != null )
+                return false;
+ 
+            if( this.m_instanceName != null && 
+                ! this.m_instanceName.equals( aProfileRef.m_instanceName ) )
+                return false;
+            if( m_instanceName == null && aProfileRef.m_instanceName != null )
+                return false;
+            
+            return true;
+        }
+    }
+
+	/**
+     * The base interface for call-back to an ODA design name validator
+     * provided by an ODA consumer application
+     * to validate the name of a data source design defined in the
+     * ODA connection profile selection page.
+     * @since 3.0.4
+	 */	
+    public interface IDesignNameValidatorBase
+    {
+        abstract boolean isValid( String designName ) throws OdaException;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/designsession/DesignSessionUtilBase.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/designsession/DesignSessionUtilBase.java
new file mode 100644
index 0000000..97cddbc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/designsession/DesignSessionUtilBase.java
@@ -0,0 +1,537 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.designsession;
+
+import java.net.URI;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.datatools.connectivity.oda.IParameterMetaData;
+import org.eclipse.datatools.connectivity.oda.IResultSetMetaData;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.consumer.services.IPropertyProvider;
+import org.eclipse.datatools.connectivity.oda.consumer.services.impl.ProviderUtil;
+import org.eclipse.datatools.connectivity.oda.design.DataElementAttributes;
+import org.eclipse.datatools.connectivity.oda.design.DataSetDesign;
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest;
+import org.eclipse.datatools.connectivity.oda.design.ElementNullability;
+import org.eclipse.datatools.connectivity.oda.design.OdaDesignSession;
+import org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers;
+import org.eclipse.datatools.connectivity.oda.design.ui.manifest.DataSetUIElement;
+import org.eclipse.datatools.connectivity.oda.design.ui.manifest.UIManifestExplorer;
+import org.eclipse.datatools.connectivity.oda.design.ui.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.design.util.DesignUtil;
+import org.eclipse.datatools.connectivity.oda.profile.Constants;
+import org.eclipse.datatools.connectivity.oda.util.manifest.DataSetType;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ExtensionManifest;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ManifestExplorer;
+import org.eclipse.datatools.connectivity.oda.util.manifest.Property;
+
+/**
+ *  Base class implementation of an utility class to help an ODA host designer or
+ *  an ODA driver's customized designer to manipulate
+ *  ODA Design API objects during an ODA design session.
+ */
+public class DesignSessionUtilBase
+{
+    private static final String DEFAULT_PROPERTY_PROVIDER_ID = Constants.CONN_PROFILE_APPL_ID;
+    
+    // logging variable
+    private static final String sm_className = DesignSessionUtilBase.class.getName();
+
+    // class has static methods only; no need to instantiate
+    protected DesignSessionUtilBase()
+    {
+    }
+
+    /**
+     * Finds and returns the property definition specified in
+     * an ODA extension that implements the 
+     * oda.datasource run-time extension point.
+     */
+    protected static Property[] getDataSourcePublicPropertiesDefn( 
+            String odaDataSourceId )
+        throws OdaException
+    {
+        try
+        {
+            ExtensionManifest runtimeManifest = 
+                ManifestExplorer.getInstance().getExtensionManifest( 
+                        odaDataSourceId );
+
+            return runtimeManifest.getVisibleProperties();
+        }
+        catch( IllegalArgumentException ex )
+        {
+            throw new OdaException( ex );
+        }        
+    }
+
+    /**
+     * Finds and returns the property definition specified for the given 
+     * oda data source element id and oda data set element id in
+     * an ODA extension that implements the 
+     * oda.datasource run-time extension point.
+     */
+    protected static Property[] getDataSetPublicPropertiesDefn( 
+            String odaDataSourceId, String odaDataSetId )
+        throws OdaException
+    {
+        try
+        {
+            ExtensionManifest runtimeManifest = 
+                ManifestExplorer.getInstance().getExtensionManifest( 
+                        odaDataSourceId );
+            DataSetType dataSetType = runtimeManifest.getDataSetType( odaDataSetId );
+            
+            return dataSetType.getVisibleProperties();
+        }
+        catch( IllegalArgumentException ex )
+        {
+            throw new OdaException( ex );
+        }        
+    }
+    
+    /**
+     * Obtains the effective property names and values for use during a design session to open
+     * a connection to a data source.
+     * @param dataSourceDesign  a data source design definition that contains
+     *              static connection properties info. 
+     *              It may include properties that reference an
+     *              externalized connection profile instance, whose property 
+     *              name-value pairs would take precedence over the static property values
+     * @return  the set of effective property name-value pairs for opening a data source connection
+     * @throws OdaException
+     * @since 3.0.6
+     */
+    protected static java.util.Properties getEffectiveDataSourceProperties( 
+            DataSourceDesign dataSourceDesign )
+        throws OdaException
+    {
+        java.util.Properties candidateProps = DesignUtil.convertDataSourceProperties( dataSourceDesign );
+
+        IPropertyProvider propProvider = null;
+        if( dataSourceDesign != null )
+        {
+            String effectiveDataSourceId = dataSourceDesign.getEffectiveOdaExtensionId();
+            propProvider = getPropertyProvider( effectiveDataSourceId );
+
+            // if the effective data source does not have own provider, 
+            // try with the oda data source type being extended
+            if( propProvider == null )
+            {
+                String baseDataSourceId = dataSourceDesign.getOdaExtensionDataSourceId();
+                if( ! effectiveDataSourceId.equalsIgnoreCase( baseDataSourceId ) )
+                    propProvider = getPropertyProvider( baseDataSourceId );
+            }
+        }
+        if( propProvider == null )   // oda data source does not have own provider, use the system default
+            propProvider = getPropertyProvider( DEFAULT_PROPERTY_PROVIDER_ID );
+        
+        if( propProvider != null )
+        {
+            candidateProps = propProvider.getDataSourceProperties( candidateProps, 
+                                createResourceIdentifiersContext( dataSourceDesign.getHostResourceIdentifiers() ));
+        }
+    
+        return candidateProps;
+    }
+
+    /**
+    * Gets the property provider of the specified ODA data source extension.
+    */
+    private static IPropertyProvider getPropertyProvider( String odaDataSourceId )
+    {
+        IPropertyProvider propProvider = null;
+        try
+        {
+            propProvider = 
+                ProviderUtil.createPropertyProvider( odaDataSourceId );
+        }
+        catch( OdaException ex )
+        {
+            DesignerLogger logger = DesignerLogger.getInstance();
+            logger.warning( sm_className, "getPropertyProvider(String)", //$NON-NLS-1$
+                    "Unable to get ODA Profile property provider.", ex ); //$NON-NLS-1$
+            return null;
+        }
+    
+        return propProvider;
+    }
+
+    /**
+     * Create a runtime ResourceIdentifiers,
+     * based on the resource URIs defined by the specified designResourceIdentifiers.
+     * @param designResourceIdentifiers
+     * @return
+     * @since 3.2.6 (DTP 1.9.2)
+     */
+    protected static org.eclipse.datatools.connectivity.oda.util.ResourceIdentifiers createRuntimeResourceIdentifiers( 
+            ResourceIdentifiers designResourceIdentifiers )
+    {
+        if( designResourceIdentifiers == null ||
+            ( designResourceIdentifiers.getApplResourceBaseURI() == null &&
+              designResourceIdentifiers.getDesignResourceBaseURI() == null ) )
+            return null;  // no resource base info to create from
+        
+        // create a runtime ResourceIdentifies from the appl resource base specified in the design version
+        org.eclipse.datatools.connectivity.oda.util.ResourceIdentifiers runtimeResourceIds =
+            new org.eclipse.datatools.connectivity.oda.util.ResourceIdentifiers();
+        runtimeResourceIds.setApplResourceBaseURI( designResourceIdentifiers.getApplResourceBaseURI() );
+        runtimeResourceIds.setDesignResourceBaseURI( designResourceIdentifiers.getDesignResourceBaseURI() );
+        return runtimeResourceIds;
+    }
+
+    /**
+    * Create an application context Map with the entry of a runtime ResourceIdentifiers,
+    * based on the resource URIs defined by the specified designResourceIdentifiers.
+    * @param designResourceIdentifiers  a design resource identifier instance
+     *          defined by the host application
+    * @return  a new design session appContext Map with the entry of a runtime ResourceIdentifiers
+    *          that was converted from the specified designResourceIdentifiers
+    * @since 3.2.6 (DTP 1.9.2)
+     */
+    protected static Map<String,Object> createResourceIdentifiersContext( ResourceIdentifiers designResourceIdentifiers )
+    {
+        org.eclipse.datatools.connectivity.oda.util.ResourceIdentifiers runtimeResourceIds = 
+                createRuntimeResourceIdentifiers( designResourceIdentifiers );
+        if( runtimeResourceIds == null )
+            return Collections.emptyMap();  // nothing to put into the context map
+        
+        // store the runtime ResourceIdentifies in an appContext Map to return
+        Map<String,Object> designSessionAppContext = new HashMap<String,Object>(1);
+        String resourceIdKey = 
+            org.eclipse.datatools.connectivity.oda.util.ResourceIdentifiers.ODA_APP_CONTEXT_KEY_CONSUMER_RESOURCE_IDS;
+        designSessionAppContext.put( resourceIdKey, runtimeResourceIds );
+        return designSessionAppContext;
+    }
+
+    /**
+     * Returns the data set ui element manifest that
+     * defines customized data set designer
+     * that an ODA data provider extends to allow an user
+     * to create or edit an ODA data set design instance.
+     * This encapsulates the child elements for the data set wizard page(s) 
+     * and editor page(s).  
+     * @param odaDataSourceId
+     * @param odaDataSetId
+     * @return
+     * @throws OdaException
+     */
+    static DataSetUIElement getDataSetUIElement( String odaDataSourceId,
+                                        String odaDataSetId )
+        throws OdaException
+    {
+        DataSetUIElement dataSetElement = UIManifestExplorer.getInstance()
+                .getDataSetUIElement( odaDataSourceId, odaDataSetId );
+        if( dataSetElement == null )
+            throw new OdaException( 
+                    Messages.bind( Messages.designSession_missingDataSetUIElement,
+                            odaDataSourceId, odaDataSetId ));
+        return dataSetElement;
+    }
+
+    /**
+     * Validates the specified design session request.
+     * If valid, returns the request's ODA data source element id.
+     * @param requestSession
+     * @return
+     * @throws OdaException if specified session request is invalid
+     */
+    protected static String validateRequestSessionImpl( 
+                    DesignSessionRequest requestSession )
+        throws OdaException
+    {
+        String odaDataSourceId = null;
+        try
+        {
+            odaDataSourceId =
+                DesignUtil.validateRequestSession( requestSession );
+        }
+        catch( IllegalStateException ex )
+        {
+            throw new OdaException( ex );
+        }
+    
+        // done validation
+        return odaDataSourceId;
+    }
+
+    /**
+     * Validates the specified data source design instance.
+     * @param dataSourceDesign
+     * @throws OdaException if specified design is invalid
+     */
+    protected static void validateDataSourceDesignImpl( 
+                        DataSourceDesign dataSourceDesign )
+        throws OdaException
+    {
+        try
+        {
+            DesignUtil.validateDataSourceDesign( dataSourceDesign );
+        }
+        catch( IllegalStateException ex )
+        {
+            throw new OdaException( ex );
+        }
+    }
+
+    /**
+     * A convenience method to create a new DesignSessionRequest instance 
+     * that contains a new data source design with the specified design attributes.
+     * @param odaDataSourceId   the ODA data source extension id
+     * @param newDataSourceName an unique name to identify the data source design instance
+     * @param newDataSourceDisplayName  display name of the data source design; may be null
+     * @param applResourceBaseURI   the base URI of general purpose resources of an ODA consumer application; may be null
+     * @param designResourceBaseURI the base URI of design resources of an ODA consumer application; may be null
+     * @return  a new DesignSessionRequest instance with the specified data source design attributes
+     * @throws OdaException if specified argument(s) are invalid
+     * @since 3.0.7
+     */
+    protected static DesignSessionRequest createNewDataSourceRequest( 
+            String odaDataSourceId,
+            String newDataSourceName,
+            String newDataSourceDisplayName,
+            URI applResourceBaseURI,
+            URI designResourceBaseURI )
+        throws OdaException
+    {
+        // validate input argument(s)
+        if( odaDataSourceId == null || odaDataSourceId.length() == 0 || 
+            newDataSourceName == null || newDataSourceName.length() == 0  )
+            throw new OdaException( Messages.designSession_invalidArgument );
+        
+        // create a new data source design with the specified design attributes
+        DataSourceDesign newDesign = DesignFactory.eINSTANCE.createDataSourceDesign();
+        
+        newDesign.setOdaExtensionId( odaDataSourceId );
+            // no need to explicitly set OdaExtensionDataSourceId
+        newDesign.setName( newDataSourceName );
+        newDesign.setDisplayName( newDataSourceDisplayName ); 
+        setDataSourceResourceIdentifiers( newDesign, applResourceBaseURI, designResourceBaseURI );
+        
+        // create a new request with the data source design
+        DesignSessionRequest newRequest = DesignFactory.eINSTANCE.createDesignSessionRequest();
+        newRequest.setNewDataAccessDesign( newDesign );
+        
+        validateRequestSessionImpl( newRequest );
+    
+        return newRequest;
+    }
+
+    /**
+     * A convenience method to create a new DesignSessionRequest instance 
+     * that contains a new data source design with the specified resource attributes.
+     * The returned instance can be used to request a design session for
+     * connection profile selection.
+     * @param applResourceBaseURI   the base URI of general purpose resources of an ODA consumer application; may be null
+     * @param designResourceBaseURI the base URI of design resources of an ODA consumer application; may be null
+     * @return  a new DesignSessionRequest instance with the specified resource attributes
+     * @since 3.0.7
+     */
+    protected static DesignSessionRequest createNewDataSourceProfileRequest( 
+            URI applResourceBaseURI,
+            URI designResourceBaseURI )
+    {
+        // create a new data source design with the specified design attributes;
+        // an oda data source id will be specified later by a profile selection
+        DataSourceDesign newDesign = DesignFactory.eINSTANCE.createDataSourceDesign();       
+        setDataSourceResourceIdentifiers( newDesign, applResourceBaseURI, designResourceBaseURI );
+        
+        // create a new request with the data source design
+        DesignSessionRequest newRequest = DesignFactory.eINSTANCE.createDesignSessionRequest();
+        newRequest.setNewDataAccessDesign( newDesign );    
+        return newRequest;
+    }
+    
+    /**
+     * A convenience method to assign the specified resource base URI(s) to the specified data source design.
+     * @param dataSourceDesign  a data source design instance
+     * @param applResourceBaseURI   the base URI of general purpose resources of an ODA consumer application; may be null
+     * @param designResourceBaseURI the base URI of design resources of an ODA consumer application; may be null
+     * @throws NullPointerException if dataSourceDesign argument is null
+     * @since 3.0.7
+     */
+    protected static void setDataSourceResourceIdentifiers(
+            DataSourceDesign dataSourceDesign, 
+            URI applResourceBaseURI, 
+            URI designResourceBaseURI )
+    {
+        if( dataSourceDesign == null )
+            throw new NullPointerException( "dataSourceDesign: " + dataSourceDesign ); //$NON-NLS-1$
+
+        ResourceIdentifiers resourceIDs = dataSourceDesign.getHostResourceIdentifiers();
+        if( resourceIDs == null )
+        {
+            if( applResourceBaseURI == null && designResourceBaseURI == null )
+                return;     // nothing new to set; done
+
+            resourceIDs = DesignFactory.eINSTANCE.createResourceIdentifiers();
+            dataSourceDesign.setHostResourceIdentifiers( resourceIDs );
+        }
+        
+        resourceIDs.setApplResourceBaseURI( applResourceBaseURI );
+        resourceIDs.setDesignResourceBaseURI( designResourceBaseURI );        
+    }
+
+    /**
+     * Creates a new OdaDesignSession instance with a session
+     * request that contains a new data set design of
+     * the specified name and odaDataSetId,
+     * associated with the specified data source design instance.
+     * @param newDataSetName   a unique name that identifies a data set 
+     *          design instance
+     * @param odaDataSetId      an ODA data set element id;
+     *              may be null if the associated data source extension 
+     *              supports only one type of data set 
+     * @param dataSourceDesign  the associated data source design instance
+     * @return  a new OdaDesignSession instance with a session
+     *          request of the specified design attributes
+     * @throws OdaException if specified arguments are invalid
+     */
+    protected static OdaDesignSession createNewDataSetRequestSession( 
+                            String newDataSetName,
+                            String odaDataSetId, 
+                            DataSourceDesign dataSourceDesign )
+        throws OdaException
+    {
+        // validate input arguments
+        if( newDataSetName == null || newDataSetName.length() == 0 ||
+                dataSourceDesign == null )
+            throw new OdaException( Messages.designSession_invalidArgument );
+        
+        OdaDesignSession newSession =
+            DesignFactory.eINSTANCE
+                .createRequestDesignSession( dataSourceDesign );
+    
+        DataSetDesign newDataSetDesign = 
+            newSession.getRequestDataSetDesign();
+        newDataSetDesign.setName( newDataSetName );
+        newDataSetDesign.setOdaExtensionDataSetId( odaDataSetId );
+    
+        validateRequestSessionImpl( newSession.getRequest() );
+    
+        return newSession;
+    }
+    
+    /**
+     * Converts optional parameter data element attributes
+     * and assigns to the specified DataElementAttributes. 
+     * @param paramAttrs    a DataElementAttributes instance
+     * @param pmd    ODA runtime parameters meta data instance
+     * @param i     1-based parameter index
+     * @throws OdaException
+     */
+    protected static void toElementOptionalAttributes( 
+            DataElementAttributes paramAttrs, 
+            IParameterMetaData pmd, 
+            int i )
+    {
+        // iterate thru each optional attribute, even if any of them
+        // has an exception
+        int count = 1;
+        while( count > 0 )
+        {
+            try
+            {
+                switch( count++ )
+                {
+                case 1:
+                    paramAttrs.setName( pmd.getParameterName(i) );
+                    continue;
+                case 2:
+                    paramAttrs.setPrecision( pmd.getPrecision(i) );
+                    continue;
+                case 3:
+                    paramAttrs.setScale( pmd.getScale(i) );
+                    continue;
+                case 4:
+                    paramAttrs.setNullability( 
+                            convertParameterNullability( pmd.isNullable(i) ));
+                default:
+                    return;  // no more attributes, exit iteration
+                }
+            }
+            catch( UnsupportedOperationException ex )
+            {
+                // ignore; optional attributes
+                ex.printStackTrace();
+                // log info
+                DesignerLogger logger = DesignerLogger.getInstance();
+                logger.info( sm_className, "toElementOptionalAttributes",  //$NON-NLS-1$
+                        "The optional metadata attribute " + (count - 1) +  //$NON-NLS-1$
+                        " of parameter " + i + " is not available.", ex ); //$NON-NLS-1$ //$NON-NLS-2$
+            }
+            catch( OdaException odaEx )
+            {
+                // ignore; optional attributes
+                odaEx.printStackTrace();
+                // log warning about exception
+                DesignerLogger logger = DesignerLogger.getInstance();
+                logger.warning( sm_className, "toElementOptionalAttributes",  //$NON-NLS-1$
+                        "The optional metadata attribute " + (count - 1) +  //$NON-NLS-1$
+                        " of parameter " + i + " is not available.", odaEx ); //$NON-NLS-1$ //$NON-NLS-2$
+           }
+        }
+    }
+
+    /**
+     * Converts the value of an ODA runtime result set column nullability
+     * to corresponding value used in an ODA design-time element definition.
+     * @param columnNullability an ODA IResultSetMetaData nullability constant
+     * @return  corresponding constant for use in an ODA design-time definition
+     */
+    protected static ElementNullability convertResultColumnNullability( int columnNullability )
+    {
+        ElementNullability toValue;
+        switch( columnNullability )
+        {
+            case IResultSetMetaData.columnNoNulls:
+                toValue = ElementNullability.NOT_NULLABLE_LITERAL; break;
+            case IResultSetMetaData.columnNullableUnknown:
+                toValue = ElementNullability.UNKNOWN_LITERAL; break;
+            case IResultSetMetaData.columnNullable:
+            default:
+                toValue = ElementNullability.NULLABLE_LITERAL; break;
+        }
+        return toValue;
+    }
+    
+    /**
+     * Converts the value of an ODA runtime parameter nullability
+     * to corresponding value used in an ODA design-time element definition.
+     * @param parameterNullability an ODA IParameterMetaData nullability constant
+     * @return  corresponding constant for use in an ODA design-time definition
+     */
+    protected static ElementNullability convertParameterNullability( int parameterNullability )
+    {
+        ElementNullability toValue;
+        switch( parameterNullability )
+        {
+            case IParameterMetaData.parameterNoNulls:
+                toValue = ElementNullability.NOT_NULLABLE_LITERAL; break;
+            case IParameterMetaData.parameterNullableUnknown:
+                toValue = ElementNullability.UNKNOWN_LITERAL; break;
+            case IParameterMetaData.parameterNullable:
+            default:
+                toValue = ElementNullability.NULLABLE_LITERAL; break;
+        }
+        return toValue;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/designsession/DesignerLogger.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/designsession/DesignerLogger.java
new file mode 100644
index 0000000..e70037e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/designsession/DesignerLogger.java
@@ -0,0 +1,188 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.designsession;
+
+import java.util.logging.Logger;
+import java.util.logging.Level;
+import java.util.HashMap;
+
+/**
+ *	An internal utility class to encapsulate calls to java.util.logging methods.
+ */
+public class DesignerLogger
+{
+    public static final String PLUGIN_LOGGER_NAME = "org.eclipse.datatools.connectivity.oda.design.ui"; //$NON-NLS-1$
+    
+    private static HashMap sm_loggerMap = new HashMap();
+    private Logger m_logger;
+    
+    /**
+     * Returns a logger helper for the default plugin logger name.
+     * @return
+     */
+    public static DesignerLogger getInstance()
+    {
+        return getInstance( PLUGIN_LOGGER_NAME );
+    }
+    
+    /**
+     * Returns a logger helper for the given logger name.
+     * @param loggerName
+     * @return
+     */
+    public static DesignerLogger getInstance( String loggerName )
+    {
+        DesignerLogger aLogHelper = (DesignerLogger) sm_loggerMap.get( loggerName );
+        if( aLogHelper == null )
+        {
+            aLogHelper = new DesignerLogger( loggerName );
+            sm_loggerMap.put( loggerName, aLogHelper );
+        }
+        return aLogHelper;
+    }
+    
+    // wrapper to the java.util.logging Logger of the given loggerName
+    private DesignerLogger( String loggerName )
+    {
+		m_logger = Logger.getLogger( loggerName );       
+    }
+    
+    public boolean isLoggable( Level level )
+    {
+        return m_logger.isLoggable( level );
+    }
+    
+    public boolean isLoggingEnterExitLevel()
+    {
+        return isLoggable( Level.FINER );
+    }
+    
+    public void entering( String sourceClass, String sourceMethod )
+    {
+        m_logger.entering( sourceClass, sourceMethod );
+    }
+
+    // Encapsulates handling of parameter object(s).
+    
+    public void entering( String sourceClass, String sourceMethod,
+            		int intParam )
+    {
+        if ( ! isLoggingEnterExitLevel() )
+            return;
+        
+        Object param1 = new Integer( intParam );
+        m_logger.entering( sourceClass, sourceMethod, param1 );
+    }
+    
+    public void entering( String sourceClass, String sourceMethod,
+            		Object param1 )
+    {
+        m_logger.entering( sourceClass, sourceMethod, param1 );
+    }
+    
+    public void entering( String sourceClass, String sourceMethod,
+            		Object[] params )
+    {
+        if ( ! isLoggingEnterExitLevel() )
+            return;
+        
+        // Logger does not like a null Object array
+ 		if ( params == null )		
+ 	        m_logger.entering( sourceClass, sourceMethod, "<null>" ); //$NON-NLS-1$
+        else
+            m_logger.entering( sourceClass, sourceMethod, params );		
+    }
+
+    public void exiting( String sourceClass, String sourceMethod )
+    {
+        m_logger.exiting( sourceClass, sourceMethod );        
+    }
+    
+    public void exiting( String sourceClass, String sourceMethod,
+            		int intParam )
+    {
+        if ( ! isLoggingEnterExitLevel() )
+            return;     // no need to trigger create object instance
+        
+        Object param1 = new Integer( intParam );
+        exiting( sourceClass, sourceMethod, param1 );
+    }
+
+    public void exiting( String sourceClass, String sourceMethod,
+            		Object result )
+    {
+        m_logger.exiting( sourceClass, sourceMethod, result );
+    }
+
+    public void logp( Level level,
+        		  String sourceClass, String sourceMethod,
+        		  String msg )
+    {
+        m_logger.logp( level, sourceClass, sourceMethod, msg );
+    }
+
+    public void logp( Level level,
+        		  String sourceClass, String sourceMethod,
+        		  String msg,
+        		  Object param1 )
+    {
+        m_logger.logp( level, sourceClass, sourceMethod, msg, param1 );
+    }
+
+    public void logp( Level level,
+        		  String sourceClass, String sourceMethod,
+        		  String msg,
+        		  Object[] params )
+    {
+        if ( ! isLoggable( level ) )
+            return;     // no need to trigger create object instance
+        
+ 		if ( params == null )
+ 	        m_logger.logp( level, sourceClass, sourceMethod, msg, "<null>" ); //$NON-NLS-1$
+        else
+            m_logger.logp( level, sourceClass, sourceMethod, msg, params );
+    }
+
+    public void logp( Level level,
+        		  String sourceClass, String sourceMethod,
+        		  String msg,
+        		  Throwable ex )
+    {
+        assert( ex != null );
+        m_logger.logp( level, sourceClass, sourceMethod, msg, ex );       
+    }
+
+    public void severe( String sourceClass, String sourceMethod,
+                  String msg,
+                  Throwable ex )
+    {
+        logp( Level.SEVERE, sourceClass, sourceMethod, msg, ex );       
+    }
+
+    public void warning( String sourceClass, String sourceMethod,
+                  String msg,
+                  Throwable ex )
+    {
+        logp( Level.WARNING, sourceClass, sourceMethod, msg, ex );       
+    }
+
+    public void info( String sourceClass, String sourceMethod,
+                  String msg,
+                  Throwable ex )
+    {
+        logp( Level.INFO, sourceClass, sourceMethod, msg, ex );       
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/.gitignore b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/.gitignore
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/.gitignore
@@ -0,0 +1 @@
+
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/AdaptableDataSourceProfile.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/AdaptableDataSourceProfile.java
new file mode 100644
index 0000000..2e371bd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/AdaptableDataSourceProfile.java
@@ -0,0 +1,354 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.ui;
+
+import java.util.Properties;
+import java.util.logging.Logger;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.IJobChangeListener;
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IManagedConnection;
+import org.eclipse.datatools.connectivity.internal.UUID;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.ui.designsession.DesignSessionUtil;
+import org.eclipse.datatools.connectivity.oda.design.ui.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.design.util.DesignUtil;
+import org.eclipse.datatools.connectivity.oda.profile.internal.OdaConnectionProfile;
+import org.eclipse.datatools.connectivity.oda.profile.internal.ProfileCategoryUtil;
+
+/**
+ * Implementation of connection profile for an ODA data source design.
+ * This is intended for use as a contributing property node to
+ * a property dialog, whose node can be adapted 
+ * to create a custom ODA Data Source Editor Page.
+ * It might not be associated with a connection profile instance, and would then based its
+ * behavior on its associated data source design.
+ */
+public class AdaptableDataSourceProfile extends OdaConnectionProfile implements
+        IConnectionProfile
+{
+    
+    private DataSourceDesign m_dataSourceDesign;
+    private String m_instanceID;
+
+    private static final String sm_className = AdaptableDataSourceProfile.class.getName();
+
+    /**
+     * Internal constructor.
+     * @param design
+     */
+    public AdaptableDataSourceProfile( DataSourceDesign design )
+    {
+        super();
+        m_dataSourceDesign = design;
+        
+        IConnectionProfile linkedProfile = null;
+        try
+        {
+            linkedProfile = DesignSessionUtil.getLinkedProfile( design );
+        }
+        catch( OdaException ex )
+        {
+            // log, and proceed without having a wrapped profile
+            Logger.getLogger( sm_className ).warning( 
+                    Messages.bind( Messages.adaptableDataSourceProfile_unableAccessProfile,
+                            design.getLinkedProfileStoreFilePath(), ex.toString() ));
+        }
+        if( linkedProfile != null )
+            setWrappedProfile( linkedProfile ); // cache the profile referenced in the design
+    }
+    
+    protected AdaptableDataSourceProfile( IConnectionProfile wrappedProfile )
+    {
+        super( wrappedProfile );
+    }
+    
+    protected AdaptableDataSourceProfile()
+    {
+        super();
+        // creates an empty design
+        m_dataSourceDesign = DesignFactory.eINSTANCE.createDataSourceDesign();
+    }
+
+    /**
+     * Returns the associated ODA Data Source Design instance.
+     * @return
+     */
+    public DataSourceDesign getDataSourceDesign()
+    {
+        return m_dataSourceDesign;
+    }
+    
+    /**
+     * Indicates whether this is associated with an external profile in a profile store.
+     * @return
+     */
+    public boolean hasLinkedProfile()
+    {
+        return hasWrappedProfile();
+    }
+    
+    /**
+     * Returns the connection profile instance referenced or linked by
+     * the associated data source design.
+     * @return  linked connection profile instance, or null
+     *          if no external profile is referenced
+     */
+    public IConnectionProfile getLinkedProfile()
+    {
+        return getWrappedProfile();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#getName()
+     */
+    public String getName()
+    {
+        if( hasLinkedProfile() )
+            return super.getName();
+        
+        return getDataSourceDesign().getName();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#getDescription()
+     */
+    public String getDescription()
+    {
+        if( hasLinkedProfile() )
+            return super.getDescription();
+        
+        return getDataSourceDesign().getDisplayName();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#isAutoConnect()
+     */
+    public boolean isAutoConnect()
+    {
+        if( hasLinkedProfile() )
+            return super.isAutoConnect();
+        
+        return false;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#getInstanceID()
+     */
+    public String getInstanceID()
+    {
+        if( hasLinkedProfile() )
+            return super.getInstanceID();
+        
+        if( m_instanceID == null ) 
+        {
+            m_instanceID = UUID.createUUID().toString();
+        }
+        return m_instanceID;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#getParentProfile()
+     */
+    public IConnectionProfile getParentProfile()
+    {
+        if( hasLinkedProfile() )
+            return super.getParentProfile();
+        
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#getBaseProperties()
+     */
+    public Properties getBaseProperties()
+    {
+        // first get all the properties defined in the design definition,
+        // including inherited and custom ones
+        Properties designProps = 
+            DesignUtil.convertDataSourceProperties( getDataSourceDesign() );
+
+        if( hasLinkedProfile() )    // maintaining external reference
+        {
+            // override with linked profile's current properties and values
+            Properties linkedProfileProps = super.getBaseProperties();
+            if( linkedProfileProps != null )
+                designProps.putAll( linkedProfileProps );
+        }
+        return designProps;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#setBaseProperties(java.util.Properties)
+     */
+    public void setBaseProperties( Properties props )
+    {
+        if( hasLinkedProfile() )
+        {
+            super.setBaseProperties( props );
+            return;
+        }
+
+        String dataSourceElmtId = getDataSourceDesign().getOdaExtensionDataSourceId();
+        if( dataSourceElmtId == null )
+            return;
+        
+        try
+        {
+            getDataSourceDesign().setPublicProperties( 
+                    DesignSessionUtil.createDataSourcePublicProperties( 
+                            dataSourceElmtId, props ) );
+            getDataSourceDesign().setPrivateProperties( 
+                    DesignSessionUtil.createDataSourceNonPublicProperties( 
+                            dataSourceElmtId, props ) );
+        }
+        catch( OdaException e )
+        {
+            // TODO log error and ignore
+            return;
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#getProperties(java.lang.String)
+     */
+    public Properties getProperties( String type )
+    {
+        if( hasLinkedProfile() )
+            return super.getProperties( type );
+        
+        // only this data source type is supported
+        return getBaseProperties();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#setProperties(java.lang.String, java.util.Properties)
+     */
+    public void setProperties( String type, Properties props )
+    {
+        if( hasLinkedProfile() )
+        {
+            super.setProperties( type, props );
+            return;
+        }
+
+        // only this data source type is supported
+        setBaseProperties( props );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#connect()
+     */
+    public IStatus connect()
+    {
+        if( hasLinkedProfile() )
+            return super.connect();
+
+        return createNAConnectionStatus();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#connectWithoutJob()
+     */
+    public IStatus connectWithoutJob()
+    {
+        if( hasLinkedProfile() )
+            return super.connectWithoutJob();
+        
+        return createNAConnectionStatus();
+    }
+
+    private IStatus createNAConnectionStatus()
+    {
+        return new Status( IStatus.WARNING, getDataSourceDesign().getOdaExtensionId(),
+                        -1, "", null ); //$NON-NLS-1$
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#disconnect()
+     */
+    public IStatus disconnect()
+    {
+        if( hasLinkedProfile() )
+            return super.disconnect();
+
+        // nothing to disconnect; return appropriate status
+        return ( ! isConnected() ) ?
+                    Status.OK_STATUS :
+                    createNAConnectionStatus();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.profile.internal.OdaConnectionProfile#disconnect(org.eclipse.core.runtime.jobs.IJobChangeListener)
+     */
+    @Override
+    public void disconnect( IJobChangeListener listener )
+    {
+        if( hasLinkedProfile() )
+            super.disconnect( listener );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#getManagedConnection(java.lang.String)
+     */
+    public IManagedConnection getManagedConnection( String type )
+    {
+        if( hasLinkedProfile() )
+            return super.getManagedConnection( type );
+
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#getProviderName()
+     */
+    public String getProviderName()
+    {
+        if( hasLinkedProfile() )
+            return super.getProviderName();
+
+        // same as provider id
+        return getDataSourceDesign().getOdaExtensionDataSourceId();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#getProviderId()
+     */
+    public String getProviderId()
+    {
+        if( hasLinkedProfile() )
+            return super.getProviderId();
+
+        return getDataSourceDesign().getOdaExtensionDataSourceId();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#getCategory()
+     */
+    public ICategory getCategory()
+    {
+        if( hasLinkedProfile() )
+            return super.getCategory();
+
+        // get oda extension's connection profile category
+        return ProfileCategoryUtil.getCategory( getProviderId() );
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/DataSetEditorPageCore.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/DataSetEditorPageCore.java
new file mode 100644
index 0000000..fdfca60
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/DataSetEditorPageCore.java
@@ -0,0 +1,320 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.ui;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.datatools.connectivity.oda.design.DataSetDesign;
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignSessionResponse;
+import org.eclipse.datatools.connectivity.oda.design.OdaDesignSession;
+import org.eclipse.datatools.connectivity.oda.design.ui.nls.Messages;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.jface.preference.IPreferencePageContainer;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.dialogs.PropertyPage;
+
+/**
+ * The core implementation of the Data Set Editor Page base class 
+ * provided by the ODA design UI framework,  
+ * to allow an user to edit
+ * an extended ODA data set design instance.
+ * <br>It adapts from a data set wizard page contributed
+ * by an ODA design ui extension, to a PropertyPage
+ * for use in an ODA host designer's preference dialog.
+ */
+public class DataSetEditorPageCore extends PropertyPage
+{
+    private DataSetWizardPageCore m_wizardPage;
+    
+    /*
+     * Constructor to adapt a data set wizard page
+     * to a property page.
+     */
+    protected DataSetEditorPageCore( DataSetWizardPageCore page )
+    {
+        super();
+
+        if( page.getWizard() instanceof DataSetWizardBase )
+        {
+            DataSetDesign editDataSetDesign =
+                page.getOdaWizard().getEditingDataSet();
+            assert( editDataSetDesign instanceof IAdaptable );
+            setElement( (IAdaptable) editDataSetDesign );
+        }
+
+        m_wizardPage = page;       
+    }
+
+    DataSetEditorPageCore()
+    {
+        super();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
+     */
+    protected Control createContents( Composite parent )
+    {
+        noDefaultAndApplyButton();
+        getCustomPage().createControl( parent );
+        
+        Control wrappedControl = getCustomPage().getControl();
+        setHelpContext( wrappedControl );
+        return wrappedControl;
+    }
+
+    /**
+     * Sets the help context id, if exists, of the given wrapped page control
+     * on this wrapper's top level control.
+     */
+    private void setHelpContext( Control wrappedControl )
+    {
+        if( wrappedControl == null )
+            return;     // nothing to set
+        
+        Object wrappedPageHelpContextId = 
+            wrappedControl.getData( "org.eclipse.ui.help" ); //$NON-NLS-1$
+        if( wrappedPageHelpContextId != null && wrappedPageHelpContextId instanceof String )
+            PlatformUI.getWorkbench().getHelpSystem()
+                .setHelp( getControl(), (String) wrappedPageHelpContextId );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.preference.PreferencePage#setContainer(org.eclipse.jface.preference.IPreferencePageContainer)
+     */
+    public void setContainer( IPreferencePageContainer container )
+    {
+        super.setContainer( container );
+        getCustomPage().setEditorContainer( container );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.dialogs.IDialogPage#getTitle()
+     */
+    public String getTitle() 
+    {
+		return getCustomPage().getTitle();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.dialogs.DialogPage#getMessage()
+	 */
+	public String getMessage() 
+	{
+		return getCustomPage().getMessage();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.dialogs.DialogPage#getMessageType()
+	 */
+	public int getMessageType() 
+	{
+		return getCustomPage().getMessageType();
+	}
+
+	/* (non-Javadoc)
+     * @see org.eclipse.jface.preference.PreferencePage#okToLeave()
+     */
+    public boolean okToLeave()
+    {
+        return super.okToLeave() && getCustomPage().canLeave();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.preference.PreferencePage#performHelp()
+     */
+    public void performHelp()
+    {
+        getCustomPage().performHelp();
+    }
+
+    /**
+     * Returns the unique id of this page within a data set dialog.
+     * @return the page unique id
+     */
+    public String getPageId()
+    {
+        return getCustomPage().getName();
+    }
+
+    /**
+     * Returns the path of the page in a data set preference dialog.
+     * @return the page path;
+     *          may be null if none is specified
+     */
+    public String getPagePath()
+    {
+        return getCustomPage().getPagePath();
+    }
+
+    /**
+     * Returns the relative path of an icon file that may 
+     * be used in the UI in addition to the page's title.
+     * @return the title icon file path;
+     *          may be null if none is specified
+     */
+    public String getIconFilePath()
+    {
+        return getCustomPage().getIconFilePath();
+    }
+    
+    /**
+     * Returns the image descriptor of an icon
+     * that may be used in the UI in addition to the page's title.
+     * @return  the image descriptor of the 
+     *          dataSetPage.icon extension attribute value;
+     *          may be null if none is specified, or unable to locate icon file
+     */
+    public ImageDescriptor getIconDescriptor()
+    {
+        return getCustomPage().getIconDescriptor();
+    }
+    
+    /**
+     * Indicates whether this page should be selected
+     * and has initial focus when used in a preference dialog. 
+     * @return true if this page should have initial focus; 
+     *              false otherwise
+     */
+    public boolean hasInitialFocus()
+    {
+        return getCustomPage().hasInitialFocus();
+    }
+
+    /**
+     * Returns the most current data set design being edited
+     * by this property page.
+     * @return
+     */
+    protected DataSetDesign getEditingDataSet()
+    {
+        DataSetDesign changedDataSetDesign = getChangedDataSet();
+        if( changedDataSetDesign == null )
+            return (DataSetDesign) getElement();     // mine is current
+        
+        // update this property page's adaptable element
+        assert( changedDataSetDesign instanceof IAdaptable );
+        setElement( (IAdaptable) changedDataSetDesign );
+        
+        return changedDataSetDesign;
+    }
+
+    /**
+     * Returns the more current editing data set if different
+     * from this property page's adaptable element.
+     * It may be different if another editor page
+     * has updated the editing data set design instance.
+     * Its use is private; the method is useful only when
+     * called before this page's adaptable element is updated.
+     * @return  the changed data set design, or 
+     *          null if no changes are found.
+     */
+    private DataSetDesign getChangedDataSet()
+    {
+        IAdaptable element = getElement();
+        assert( element instanceof DataSetDesign );
+        DataSetDesign myDesign = (DataSetDesign) element;
+
+        DataSetDesign editedDataSetDesign =
+            getCustomPage().getOdaWizard().getEditingDataSet();
+
+        // compare their content if not the same instance
+        if( myDesign != editedDataSetDesign &&
+            ! EcoreUtil.equals( myDesign, editedDataSetDesign ) )
+            return editedDataSetDesign;   
+        return null;    // no changed data set design
+    }   
+    
+    /**
+     * Returns the most current design session response 
+     * being edited, by collecting relevant updates from 
+     * the corresponding wrapped data set page.
+     * @return the current design session response that contains
+     *         the data set design instance and designer state
+     *         updated by this wrapped data set page
+     */
+    public DesignSessionResponse collectPageResponse()
+    {
+        DataSetDesign updatedDesign = collectDataSetDesign(); 
+
+        // assign data set design in a session response
+        boolean isSessionOk = ( updatedDesign != null );
+        OdaDesignSession nestedSession = 
+            DesignFactory.eINSTANCE.createOdaDesignSession();
+        nestedSession.setNewResponse( isSessionOk, updatedDesign );
+
+        // assign collected response state to the session response
+        DesignSessionResponse pageResponse = nestedSession.getResponse();
+        getCustomPage().getOdaWizard().updateResponseWithState( pageResponse );
+        return pageResponse;
+    }
+    
+    /**
+     * Returns the most current data set design instance 
+     * being edited, by collecting relevant updates from 
+     * the corresponding wrapped data set page.
+     * @return the data set design instance updated 
+     *          by this wrapped data set page
+     */
+    private DataSetDesign collectDataSetDesign()
+    {
+        // first get the wrapped page to update the central
+        // copy of editing data set design
+        getCustomPage().getOdaWizard()
+            .collectDataSetDesignFromPage( getCustomPage() );
+        
+        // update my adaptable element if changed,
+        // and return this page's adaptable element
+        return getEditingDataSet();
+    }
+
+    /**
+     * Refresh this editor page's adaptable element and
+     * control display as needed to reflect
+     * the latest state of the data set design being edited.
+     * Refreshing may be needed when another editor page
+     * has updated the editing data set design instance.
+     */
+    public void refresh()
+    {
+        if( m_wizardPage != null )
+            m_wizardPage.refresh( getEditingDataSet() );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.dialogs.DialogPage#dispose()
+     */
+    public void dispose()
+    {
+        super.dispose();
+        m_wizardPage = null;
+    }
+
+    /**
+     * Validates that the wrapped custom wizard page exists, and returns it.
+     * Throws IllegalStateException if no associated custom wizard page.
+     */
+    protected DataSetWizardPageCore getCustomPage()
+    {
+        if( m_wizardPage == null )
+            throw new IllegalStateException( Messages.common_notInDesignSession );
+    
+        return m_wizardPage;
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/DataSetWizardBase.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/DataSetWizardBase.java
new file mode 100644
index 0000000..07b5dc0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/DataSetWizardBase.java
@@ -0,0 +1,488 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.ui;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.DataSetDesign;
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.DesignSessionResponse;
+import org.eclipse.datatools.connectivity.oda.design.DesignerState;
+import org.eclipse.datatools.connectivity.oda.design.Locale;
+import org.eclipse.datatools.connectivity.oda.design.OdaDesignSession;
+import org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers;
+import org.eclipse.datatools.connectivity.oda.design.SessionStatus;
+import org.eclipse.datatools.connectivity.oda.design.internal.designsession.DesignerLogger;
+import org.eclipse.datatools.connectivity.oda.design.ui.manifest.DataSetPageInfo;
+import org.eclipse.datatools.connectivity.oda.design.ui.manifest.DataSetUIElement;
+import org.eclipse.datatools.connectivity.oda.design.ui.manifest.UIManifestExplorer;
+import org.eclipse.datatools.connectivity.oda.design.ui.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizardPage;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jface.wizard.Wizard;
+
+/**
+ * The internal ODA data set wizard base class implementation that 
+ * looks up and adds customized wizard page to create an 
+ * extended ODA data set design instance.
+ * All its public methods are for internal use only, and might not be
+ * backward compatible in future releases.
+ */
+public class DataSetWizardBase extends Wizard
+{
+    private OdaDesignSession m_designSession;
+    private DataSetUIElement m_dataSetUIElement;
+    private boolean m_isCreatingNewDesign;
+    
+    private DataSetDesign m_editDataSetDesign;
+    private DesignerState m_responseDesignerState;
+    private SessionStatus m_responseSessionStatus;
+
+    // logging variable
+    private static final String sm_className = DataSetWizardBase.class.getName();
+
+    protected DataSetWizardBase()
+    {
+        super();
+    }
+
+    /**
+     * Initializes this wizard with specified oda design
+     * and data set ui extension element info.
+     * @param odaDesign
+     * @param dataSetUIElement
+     * @throws OdaException
+     * @deprecated since 3.2.2; replaced by {@link #initialize(OdaDesignSession, DataSetUIElement, boolean)}
+     */
+    public void initialize( OdaDesignSession odaDesign, DataSetUIElement dataSetUIElement )
+        throws OdaException
+    {
+        initialize( odaDesign, dataSetUIElement, true );
+    }
+
+    /**
+     * Initializes this wizard.
+     * @since 3.2.2 (DTP 1.7.2)
+     */
+    public void initialize( OdaDesignSession odaDesign, DataSetUIElement dataSetUIElement, 
+                            boolean isForNewDesign )
+        throws OdaException
+    {
+        m_designSession = odaDesign;
+        m_dataSetUIElement = dataSetUIElement;
+        m_editDataSetDesign = null;
+        m_isCreatingNewDesign = isForNewDesign;
+        
+        if( getPageCount() == 0 )
+            addCustomPages();
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.wizard.Wizard#performFinish()
+     */
+    public boolean performFinish()
+    {
+        try
+        {
+            finishDataSetDesign();
+        }
+        catch( OdaException ex )
+        {
+            // log warning about exception
+            DesignerLogger logger = DesignerLogger.getInstance();
+            logger.warning( sm_className, "performFinish",  //$NON-NLS-1$
+                    "Caught exception while finishDataSetDesign.", ex ); //$NON-NLS-1$
+            return false;
+        }
+        return true;
+    }
+    
+    /**
+     * Returns the design session with a response updated
+     * with the data set design collected by the 
+     * ODA custom page(s).
+     * @return
+     * @throws OdaException
+     */
+    public OdaDesignSession getResponseSession()
+        throws OdaException
+    {
+        if( m_designSession.getResponse() == null )
+            finishDataSetDesign();
+        return m_designSession;
+    }
+    
+    /**
+     * Adds ODA custom page(s) to this wizard.
+     * @throws OdaException
+     */
+    protected void addCustomPages()
+        throws OdaException
+    {
+        String odaUIPluginId = getOdaDesignerPluginId();
+        
+        // get all page info from ODA data set ui element,
+        // and create corresponding wizard page for each page definition
+        DataSetPageInfo[] pageDefns = 
+            m_dataSetUIElement.getPageDefinitions();
+        String initialPageId = m_dataSetUIElement.getInitialPageId();
+
+        for( int i = 0; i < pageDefns.length; i++ )
+        {
+            DataSetPageInfo pageInfo = pageDefns[i];
+            
+            DataSetWizardPageCore page = 
+                createCustomPage( odaUIPluginId, pageInfo );
+            
+            if( initialPageId != null &&
+                page.getName().equalsIgnoreCase( initialPageId ) )
+            {
+                page.setHasInitialFocus();
+                initialPageId = null; // reset so no more pages get initial focus
+            }
+            
+            // adds the custom page to this wizard
+            addPage( page );
+        }
+    }
+
+    /**
+     * Returns the plugin id that implements the
+     * <code>org.eclipse.datatools.connectivity.oda.design.ui.dataSource</code>
+     * extension point, and specifies the ODA data source element id,
+     * of the requested data source design.
+     * @return
+     */
+    protected String getOdaDesignerPluginId()
+    {
+        return UIManifestExplorer.getInstance().getOdaDesignerId( 
+                    m_designSession.getRequestDataSourceDesign()
+                        .getOdaExtensionDataSourceId() );
+    }
+
+    /**
+     * Instantiates a custom data set wizard page,
+     * and assigns its attributes as defined in the plugin extension manifest.
+     * @param odaUIPluginId     the plugin id of the ODA driver ui that
+     *                      implements the oda design ui extension point
+     * @param pageInfo      content of the dataSetPage element defined
+     *                      in the plugin extension manifest
+     * @return  a new instance of DataSetWizardPage contributed by
+     *          the ODA driver ui extension 
+     * @throws OdaException
+     */
+    protected DataSetWizardPageCore createCustomPage( 
+            String odaUIPluginId, DataSetPageInfo pageInfo ) 
+        throws OdaException
+    {
+        DataSetWizardPageCore page =
+            createWizardPage( odaUIPluginId,
+                    pageInfo.getWizardPageClassName(),
+                    pageInfo.getPageId() );        
+        
+        // a valid wizard page, subclass from DataSetWizardPage;
+        // overrides page title, if specified
+        String pageTitle = pageInfo.getDisplayName();
+        if( pageTitle != null && pageTitle.length() > 0 )
+            page.setTitle( pageTitle );
+
+        page.setPagePath( pageInfo.getPath() );
+        page.setIconFilePath( pageInfo.getIcon() );
+        return page;
+    }
+
+    /**
+     * Instantiates the data set wizard page class 
+     * contributed by an ODA data source ui plugin.
+     * Uses its constructor with pageName argument.
+     * @param pluginId
+     * @param wizardPageClassName
+     * @param pageId    for use as the page name constructor argument
+     * @return
+     * @throws OdaException
+     */
+    protected DataSetWizardPageCore createWizardPage( 
+                                    String pluginId, 
+                                    String wizardPageClassName,
+                                    String pageId )
+        throws OdaException
+    {
+        // instantiate using a class constructor 
+        // with a single pageName argument,
+        // use pageId as page name
+        Object pageInstance;
+        try
+        {
+            pageInstance = DesignerUtil.createInstanceWithStringArg( 
+                    pluginId,
+                    wizardPageClassName, pageId );
+        }
+        catch( RuntimeException ex )
+        {
+            throw new OdaException( ex );
+        }
+        
+        // requires specified class to extend from
+        // the public DataSetWizardPage base class
+        if( ! ( pageInstance instanceof DataSetWizardPage ))
+        {
+            throw new OdaException( 
+                    Messages.bind( Messages.extension_mustInheritFromODAPage, 
+                                        wizardPageClassName,
+                                        DataSetWizardPage.class.getName() )); 
+        }
+
+        return ( DataSetWizardPageCore ) pageInstance;
+    }
+
+    /**
+     * Returns a copy of the data set design specified
+     * in the session request.
+     * It provides initialization design data for the ODA wizard
+     * and its custom pages.
+     * A copy is used to prevent updates to the request design.
+     * @return
+     */
+    DataSetDesign copyRequestDataSetDesign()
+    {
+        if( m_designSession == null )
+            return null;
+            
+        return (DataSetDesign) EcoreUtil.copy( 
+                    m_designSession.getRequestDataSetDesign() );
+    }
+
+    /**
+     * Returns a copy of the designer state specified
+     * in the session request.
+     * It provides initialization data for the ODA wizard
+     * and its custom pages to restore the state of a
+     * previous design session.
+     * A copy is used to prevent updates to the request design.
+     * @return
+     */
+    DesignerState copyRequestDesignerState()
+    {
+        if( m_designSession == null ||
+            m_designSession.getRequest().getDesignerState() == null )
+            return null;
+            
+        return (DesignerState) EcoreUtil.copy( 
+                    m_designSession.getRequest().getDesignerState() );
+    }
+
+    /**
+     * Returns a copy of the session locale specified
+     * in the session request.
+     * It provides initialization data for the ODA wizard
+     * and its custom pages to adopt the requested locale.
+     * A custom page may choose the type of locale to support.
+     * A copy is used to prevent updates to the request design.
+     * @return
+     */
+    Locale copySessionLocale()
+    {
+        if( m_designSession == null ||
+            m_designSession.getRequest().getSessionLocale() == null )
+            return null;
+            
+        return (Locale) EcoreUtil.copy( 
+                    m_designSession.getRequest().getSessionLocale() );
+    }
+    
+    /**
+     * Indicates whether the current design session should be
+     * an editable session or read-only.
+     * It provides initialization data for the ODA wizard
+     * and its custom pages to adopt the requested editable state.
+     * A custom page may choose to honor or ignore such request.
+     * @return
+     */
+    boolean isSessionEditable()
+    {
+        if( m_designSession == null )
+            return true;    // default
+
+        return m_designSession.getRequest().isEditable();       
+    }
+    
+    /**
+     * Returns the resource identifiers of the ODA consumer application, if available.
+     * @return  a ResourceIdentifiers instance; may be null if none is specified
+     */
+    ResourceIdentifiers getHostResourceIdentifiers()
+    {
+        if( m_designSession == null )
+            return null;
+        
+        DataSourceDesign dataSourceDesign = m_designSession.getRequestDataSourceDesign();
+        return ( dataSourceDesign != null ) ? dataSourceDesign.getHostResourceIdentifiers() : null;
+    }
+    
+    /**
+     * Returns the current data set design being edited.
+     * This returned design instance can be applied directly
+     * in a design session's response.
+     * The editing data set design is initialized with a 
+     * deep copy of the one
+     * provided in a design session's request.
+     * @return
+     */
+    protected DataSetDesign getEditingDataSet()
+    {
+        if( m_editDataSetDesign == null )
+        {
+            m_editDataSetDesign = copyRequestDataSetDesign();
+        }
+        return m_editDataSetDesign;
+    }
+    
+    /**
+     * Updates and returns the current data set design instance 
+     * being edited, by collecting relevant updates from 
+     * the specified custom data set page.
+     * <br>Relevant updates may include associated response state,
+     * provided by a custom data set page implementation.
+     * @param dataSetPage
+     * @return the data set design instance updated 
+     *          by specified data set page
+     */
+    protected DataSetDesign collectDataSetDesignFromPage( DataSetWizardPageCore dataSetPage )
+    {
+        m_editDataSetDesign =
+            dataSetPage.finishDataSetDesign( getEditingDataSet() );
+        return m_editDataSetDesign;
+    }
+    
+    /**
+     * Performs finish on the design session with
+     * a new data set design, which contains 
+     * the data set design definition
+     * collected by the custom wizard page(s).
+     * @throws OdaException
+     */
+    protected void finishDataSetDesign() throws OdaException
+    {
+        // iterate thru each page to update data set design
+        IWizardPage[] pages = getPages();
+        for( int i = 0; i < pages.length; i++ )
+        {
+            IWizardPage page = pages[i];
+            if( ! ( page instanceof DataSetWizardPageCore ))
+                continue;   // skip
+            
+            DataSetWizardPageCore dataSetPage = (DataSetWizardPageCore) page;
+            collectDataSetDesignFromPage( dataSetPage );
+        }
+        
+        // assign data set design in the design response
+        boolean isSessionOk = ( m_editDataSetDesign != null );
+        m_designSession.setNewResponse(
+                isSessionOk, m_editDataSetDesign );
+        
+        updateResponseWithState( m_designSession.getResponse() );
+    }
+    
+    /**
+     * Update the specified response with the wizard's central
+     * copy of response session status and designer state,  
+     * collected from associated data set page(s).
+     * @param response
+     */
+    void updateResponseWithState( DesignSessionResponse response )
+    {
+        // get custom sessionState, set by extended wizard or associated page(s),
+        // and assign to specified response
+        SessionStatus customStatus = getResponseSessionStatus();
+        if( customStatus != null &&
+            customStatus.getValue() != SessionStatus.OK )
+        {
+            // a custom error state takes precedence over default setting
+            SessionStatus defaultStatus = response.getSessionStatus();
+            if( defaultStatus == null ||
+                customStatus.getValue() != defaultStatus.getValue() )
+            {
+                response.setSessionStatus( customStatus );
+                response.getDataAccessDesign()
+                    .setDataSetDesign( null );
+            }                
+        }
+        
+        // get designerState, set by extended class or associated page(s), 
+        // and assign to specified response
+        DesignerState customState = getResponseDesignerState();
+        if( customState != null )
+            response.setDesignerState( customState );        
+    }
+    
+    /**
+     * Returns the custom designer state specified by 
+     * the corresponding setter method.
+     * May return null if none is specified.
+     * @return
+     */
+    protected DesignerState getResponseDesignerState()
+    {
+        return m_responseDesignerState;
+    }
+    
+    /**
+     * For use by an extended wizard or associated wizard page(s)
+     * to optionally assign a custom designer state, for inclusion
+     * in the ODA design session response.
+     * @param customDesignerState   a designer state instance
+     *              that preserves the current session's internal state
+     *              so that it can be restored in a subsequent design session
+     */
+    protected void setResponseDesignerState( DesignerState customDesignerState )
+    {
+        m_responseDesignerState = customDesignerState;
+    }
+
+    /**
+     * Returns the custom response session status specified by 
+     * the corresponding setter method.
+     * May return null if none is specified.
+     * @return 
+     */
+    protected SessionStatus getResponseSessionStatus()
+    {
+        return m_responseSessionStatus;
+    }
+
+    /**
+     * For use by an extended wizard or associated wizard page(s)
+     * to optionally assign a custom response session status, 
+     * for inclusion in the ODA design session response.
+     * @param sessionStatus the status of the current session to
+     *              indicate how an ODA host designer should process
+     *              a design session response
+     */
+    protected void setResponseSessionStatus( SessionStatus sessionStatus )
+    {
+        m_responseSessionStatus = sessionStatus;
+    }
+
+    /**
+     * Indicates whether this wizard is creating a new data set design or editing an existing design.
+     * @return  true if creating a new data set design; false if editing an existing data set design
+     * @since 3.2.2 (DTP 1.7.2)
+     */
+    protected boolean isCreatingNewDesign()
+    {
+        return m_isCreatingNewDesign;
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/DataSetWizardPageCore.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/DataSetWizardPageCore.java
new file mode 100644
index 0000000..0ef56c3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/DataSetWizardPageCore.java
@@ -0,0 +1,462 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.ui;
+
+import org.eclipse.datatools.connectivity.oda.design.DataSetDesign;
+import org.eclipse.datatools.connectivity.oda.design.DesignerState;
+import org.eclipse.datatools.connectivity.oda.design.Locale;
+import org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers;
+import org.eclipse.datatools.connectivity.oda.design.SessionStatus;
+import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.jface.preference.IPreferencePageContainer;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+/**
+ * The core implementation of the Data Set Wizard Page base class 
+ * provided in the ODA designer UI framework. 
+ * <br>It provides the framework to allow an user to create
+ * an extended ODA data set design instance.
+ */
+public abstract class DataSetWizardPageCore extends WizardPage
+{
+    private String m_path;
+    private String m_icon;
+    private boolean m_hasInitialFocus = false;
+    private ImageDescriptor m_iconDescriptor;
+    
+    private IPreferencePageContainer m_editorContainer;
+
+    /**
+     * Performs updates based on the specified
+     * data set design, as needed.
+     * <br>Examples of custom data set design updates include 
+     * setting its data set query parameters, result set definition,
+     * private properties, and
+     * dynamically define a public property's design attributes  
+     * per design instance.
+     * @param design    a data set design instance for further updates
+     * @return  the updated data set design instance, or
+     *      null if an error exists and unable to update the design
+     */
+    protected abstract DataSetDesign collectDataSetDesign( 
+            DataSetDesign design );
+
+    /**
+     * Refresh this page's control display as needed to reflect
+     * the state of the specified data set design.
+     * @param dataSetDesign
+     */
+    protected abstract void refresh( DataSetDesign dataSetDesign );
+
+    /**
+     * Checks whether it is alright to leave this page, 
+     * when used as an editor page in a preference dialog. 
+     * @return true to allow the page flip; or
+     *         false to abort page flipping and the current page 
+     *         remains visible
+     */
+    protected abstract boolean canLeave();
+    
+    /**
+     * Cleans up before the page is disposed.
+     * Default implementation does nothing.  Sub-class
+     * may override to clean up custom operations such as
+     * releasing resources associated to its data set query execution.
+     */
+    protected abstract void cleanup();
+
+    
+    /*
+     * Implements base class constructor.
+     */
+    protected DataSetWizardPageCore( String pageName )
+    {
+        super( pageName );
+    }
+
+    /*
+     * Implements base class constructor.
+     */
+    protected DataSetWizardPageCore( String pageName, String title,
+            ImageDescriptor titleImage )
+    {
+        super( pageName, title, titleImage );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+     */
+    public void createControl( Composite parent )
+    {
+        // base class does nothing; subclass may override
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.wizard.WizardPage#setMessage(java.lang.String, int)
+     */
+    public void setMessage( String newMessage, int newType )
+    {
+        super.setMessage( newMessage, newType );
+        
+        // update editor container message if this 
+        // is being used in a preference dialog
+        if( getEditorContainer() != null )
+            getEditorContainer().updateMessage();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.wizard.WizardPage#setErrorMessage(java.lang.String)
+     */
+    public void setErrorMessage( String newMessage )
+    {
+        super.setErrorMessage( newMessage );
+        
+        // if this is being used in a preference dialog,
+        // set the message with an error type 
+        if( getEditorContainer() != null )
+            setMessage( newMessage, IMessageProvider.ERROR );
+    }
+
+    /**
+     * Returns the editor container of this page
+     * when wrapped as an editor page in a preference dialog.
+     * @return  the preference page container of 
+     *          the editor page that wraps this wizard page;
+     *          may be <code>null</code> if this page is not used in a
+     *          preference dialog, or if this
+     *          page has yet to be added to a container
+     */
+    protected IPreferencePageContainer getEditorContainer()
+    {
+        return m_editorContainer;
+    }
+
+    /**
+     * Sets or clears the editor container of this page
+     * when used as an editor page in a preference dialog. 
+     * @param container the preference page container of 
+     *          the editor page that wraps this wizard page.
+     */
+    void setEditorContainer( IPreferencePageContainer container )
+    {
+        m_editorContainer = container;
+    }
+
+    /**
+     * Returns the path of the page in a data set preference dialog.
+     * @return the page path;
+     *          may be null if none is specified
+     */
+    String getPagePath()
+    {
+        return m_path;
+    }
+
+    /**
+     *  Set the path of the page in a data set preference dialog.
+     * @param path
+     */
+    protected void setPagePath( String path )
+    {
+        m_path = path;
+    }
+
+    /**
+     * Returns the relative path of an icon file that may 
+     * be used in the UI in addition to the page's title.
+     * @return the title icon file path;
+     *          may be null if none is specified
+     */
+    public String getIconFilePath()
+    {
+        return m_icon;
+    }
+
+    /**
+     * Set the relative path of an icon file that may 
+     * be used in the UI in addition to the page's title.
+     * @param iconFilePath the relative path of the icon file, 
+     *                  relative to the root of the plug-in
+     */
+    protected void setIconFilePath( String iconFilePath )
+    {
+        m_icon = iconFilePath;
+    }
+    
+    /**
+     * Returns the image descriptor of an icon
+     * that may be used in the UI in addition to the page's title.
+     * @return  the image descriptor of the 
+     *          dataSetPage.icon extension attribute value;
+     *          may be null if none is specified, or unable to locate icon file
+     */
+    public ImageDescriptor getIconDescriptor()
+    {
+        if( m_iconDescriptor != null )
+            return m_iconDescriptor;
+        
+        // get the descriptor from the icon file
+        String iconPath = getIconFilePath();
+        if( iconPath == null || iconPath.length() == 0 )
+            return null;
+        
+        DataSetWizardBase wizard = getOdaWizard();
+        if( wizard == null )
+            return null;
+        
+        try
+        {
+            m_iconDescriptor = AbstractUIPlugin.imageDescriptorFromPlugin(
+                    	wizard.getOdaDesignerPluginId(),
+                    	iconPath );
+        }
+        catch( RuntimeException e )
+        {
+            // ignore
+            e.printStackTrace();
+        }
+        return m_iconDescriptor;
+    }
+
+    /**
+     * Indicates whether this page should be selected
+     * and has initial focus when used in a preference dialog. 
+     * @return true if this page should have initial focus; 
+     *              false otherwise
+     */
+    boolean hasInitialFocus()
+    {
+        return m_hasInitialFocus;
+    }
+    
+    /**
+     * Specifies whether this page should be selected
+     * and has initial focus when used in a preference dialog. 
+     */
+    protected void setHasInitialFocus()
+    {
+        m_hasInitialFocus = true; 
+    }
+    
+    /**
+     * Returns a copy of the original data set design instance specified
+     * in the design session request.  It may be used for initialization
+     * of the customized control of this extended page.
+     * A copy is returned to prevent updates to the request design.
+     * @return
+     */
+    protected DataSetDesign getInitializationDesign()
+    {
+        DataSetWizardBase wizard = getOdaWizard();
+        if( wizard == null )
+            return null;
+        return wizard.copyRequestDataSetDesign();
+    }
+
+    /**
+     * Returns the most current data set design instance being edited.
+     * A data set design instance may be edited
+     * multiple times by an extended page when a user flips among 
+     * pages in a dialog
+     * within a data set design session.
+     * @return
+     */
+    protected DataSetDesign getEditingDesign()
+    {
+        DataSetWizardBase wizard = getOdaWizard();
+        if( wizard == null )
+            return null;
+        return wizard.getEditingDataSet();        
+    }
+    
+    /**
+     * Returns a copy of the original designer state specified
+     * in the design session request.
+     * It provides initialization data for the extended custom page(s)
+     * to restore the state of a previous design session.
+     * A copy is returned to prevent updates to the request design.
+     * @return
+     */
+    protected DesignerState getInitializationDesignerState()
+    {
+        DataSetWizardBase wizard = getOdaWizard();
+        if( wizard == null )
+            return null;
+        return wizard.copyRequestDesignerState();
+    }
+
+    /**
+     * Returns the most current designer state within a design session.
+     * May be null if no previous session or none
+     * was specified by the custom page(s).
+     * @return   a designer state instance that preserves
+     *           the last internal state of the extended custom page(s)
+     *           so that it can be restored when any custom page is
+     *           re-activated in a dialog
+     */
+    protected DesignerState getEditingDesignerState()
+    {
+        DataSetWizardBase wizard = getOdaWizard();
+        if( wizard == null )
+            return null;
+        return wizard.getResponseDesignerState();        
+    }
+    
+    /**
+     * Returns a copy of the session locale specified
+     * in the design session request.
+     * It provides initialization data for this extended wizard page
+     * to adopt the requested locale.
+     * An extended page may choose to honor or ignore such request.
+     * A copy is returned to prevent updates to the request design.
+     * @return
+     */
+    protected Locale getInitializationLocale()
+    {
+        DataSetWizardBase wizard = getOdaWizard();
+        if( wizard == null )
+            return null;
+        return wizard.copySessionLocale();
+    }
+    
+    /**
+     * Indicates whether the current design session should be
+     * an editable session or read-only.
+     * It may be used for initialization
+     * of the customized control of this extended wizard page.
+     * An extended page may choose to honor or ignore such request.
+     * @return
+     */
+    protected boolean isSessionEditable()
+    {
+        DataSetWizardBase wizard = getOdaWizard();
+        if( wizard == null )
+            return true;    // default
+        return wizard.isSessionEditable();       
+    }
+    
+    /**
+     * Returns the resource identifiers of the ODA consumer application, if available.
+     * @return  a ResourceIdentifiers instance; may be null if none is specified
+     * @since 3.0.7
+     */
+    protected ResourceIdentifiers getHostResourceIdentifiers()
+    {
+        DataSetWizardBase wizard = getOdaWizard();
+        return ( wizard != null ) ? wizard.getHostResourceIdentifiers() : null;
+    }
+    
+    /**
+     * Returns the page's wizard container provided
+     * in the ODA Design UI framework to handle creation
+     * of a new data set design.
+     * @return
+     */
+    protected DataSetWizardBase getOdaWizard()
+    {
+        if( getWizard() instanceof DataSetWizardBase )
+            return (DataSetWizardBase) getWizard();
+        return null;
+    }
+    
+    /**
+     * Performs finish to
+     * create or edit a data set design instance,
+     * and corresponding session response state.
+     * Calls subclass extended methods to provide further
+     * updates to the given data set design instance.
+     * @return  the updated data set design instance
+     */
+    protected DataSetDesign finishDataSetDesign( DataSetDesign design )
+    {
+        // collects custom session response state
+        // from an extended page
+        collectResponseState();
+        
+        // calls abstract method provided by custom extension
+        // to further specify its data set design
+        return collectDataSetDesign( design );
+    }
+
+    /**
+     * Collects optional session response state 
+     * from an extended page.
+     * Response state info includes custom session status 
+     * and designer state instance. 
+     * Default implementation in base class does not specify 
+     * any custom response state.
+     * Sub-class may override.
+     */
+    protected void collectResponseState()
+    {
+        setResponseSessionStatus( null );
+        setResponseDesignerState( null );
+    }
+
+    /**
+     * For use by an extended data set page
+     * to optionally specify or clear a custom session status, 
+     * for inclusion in the ODA design session response.
+     * @param status the status of the current session to
+     *              indicate how an ODA host designer should process
+     *              a design session response
+     */
+    protected void setResponseSessionStatus( SessionStatus status )
+    {
+        DataSetWizardBase wizard = getOdaWizard();
+        if( wizard != null )
+            wizard.setResponseSessionStatus( status );        
+    }
+
+    /**
+     * For use by an extended wizard page
+     * to optionally assign or clear a customized designer state, 
+     * for inclusion in the ODA design session response.
+     * @param customDesignerState   a designer state instance
+     *              that preserves the current session's internal state
+     *              so that it can be restored in a subsequent design session
+     */
+    protected void setResponseDesignerState( DesignerState customDesignerState )
+    {
+        DataSetWizardBase wizard = getOdaWizard();
+        if( wizard != null )
+            wizard.setResponseDesignerState( customDesignerState );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.dialogs.DialogPage#dispose()
+     */
+    public void dispose()
+    {
+        // calls abstract method provided by custom extension
+        cleanup();
+        super.dispose();
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.jface.dialogs.DialogPage#performHelp()
+     */
+    public void performHelp( )
+	{
+		getControl().notifyListeners( SWT.Help, new Event() );
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/DataSourceEditorPageCore.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/DataSourceEditorPageCore.java
new file mode 100644
index 0000000..be38156
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/DataSourceEditorPageCore.java
@@ -0,0 +1,639 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.ui;
+
+import java.util.Iterator;
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignerState;
+import org.eclipse.datatools.connectivity.oda.design.Locale;
+import org.eclipse.datatools.connectivity.oda.design.OdaDesignSession;
+import org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers;
+import org.eclipse.datatools.connectivity.oda.design.internal.designsession.DesignerLogger;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.ProfileSelectionEditorPage;
+import org.eclipse.datatools.connectivity.oda.design.ui.designsession.DesignSessionUtil;
+import org.eclipse.datatools.connectivity.oda.design.ui.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.profile.OdaProfileExplorer;
+import org.eclipse.datatools.connectivity.ui.PingJob;
+import org.eclipse.datatools.connectivity.ui.wizards.ProfileDetailsPropertyPage;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * The core implementation of the Data Source Editor Page base class 
+ * provided in the ODA designer UI framework.  It extends the 
+ * DTP connection profile wizard framework.  
+ * <br>It can be used, outside of the Data Source 
+ * Explorer UI, by an user to edit the connection properties' values
+ * of an extended ODA data source definition.
+ */
+public abstract class DataSourceEditorPageCore extends ProfileDetailsPropertyPage
+{
+    private OdaDesignSession m_designSession;
+    private Properties m_dataSourceProps;
+    private DesignerState m_responseDesignerState;
+    private Boolean m_setPingButtonVisible;
+    private Boolean m_setPingButtonEnabled;
+
+    // logging variable
+    private static final String sm_className = DataSourceEditorPageCore.class.getName();
+
+    /**
+     * Updates the specified data source design with design properties
+     * collected in this page.
+     * Sub-class may override or extend this method to further update
+     * the given data source design, as needed.
+     * The default behavior saves the page's edited properties 
+     * in the specified design, based on the data source property 
+     * definitions specified in the ODA extension's manifest.
+     * <br>Examples of custom data source design updates include 
+     * setting its private properties, and
+     * dynamically define a property's design attributes  
+     * per design instance.
+     * <br>This method is called when performing finish on a
+     * data source editing session.
+     * @param design    a data source design instance being updated
+     * @return  the updated data source design instance, or
+     *      null if an error exists and unable to update the design
+     */
+    protected DataSourceDesign collectDataSourceDesign( 
+                                    DataSourceDesign design )
+    {
+        Properties propertyValuePairs = collectProperties();
+
+        // save the page's properties in the design
+        try
+        {
+            setDataSourceDesignProperties( design, propertyValuePairs );
+        }
+        catch( OdaException ex )
+        {
+            // log warning about exception
+            DesignerLogger logger = DesignerLogger.getInstance();
+            logger.warning( sm_className, "collectDataSourceDesign( DataSourceDesign )",  //$NON-NLS-1$
+                    "Caught exception while assigning property name-value pairs to data source design properties.", ex ); //$NON-NLS-1$
+        }
+        
+        return design;
+    }
+
+    /**
+     * Assigns the relevant data source properties to the
+     * specified data source design instance.
+     * Sub-class may override or extend this method as needed.
+     * The default behavior saves the specified properties, 
+     * based on the data source property definitions specified in 
+     * an ODA extension's manifest.
+     * @param design    the data source design definition to update
+     * @param propertyValuePairs  data source property name-value pairs
+     * @throws OdaException
+     * @since DTP 1.6
+     */
+    protected void setDataSourceDesignProperties( DataSourceDesign design,
+                                                  Properties propertyValuePairs ) 
+        throws OdaException
+    {
+        design.setPublicProperties(
+                DesignSessionUtil.createDataSourcePublicProperties( 
+                        design.getOdaExtensionDataSourceId(),
+                        propertyValuePairs ));
+        design.setPrivateProperties( 
+                DesignSessionUtil.createDataSourceNonPublicProperties( 
+                        design.getOdaExtensionDataSourceId(),
+                        propertyValuePairs ));
+    }
+    
+    /**
+     * Cleans up before the page is disposed.
+     * Default implementation does nothing.  Sub-class
+     * may override to clean up custom operations such as
+     * closing a connection.
+     */
+    protected abstract void cleanup();
+
+    
+    protected DataSourceEditorPageCore()
+    {
+        super();
+        noDefaultAndApplyButton();
+    }
+
+    /**
+     * Returns the associated profile instance's properties.
+     * If none is associated, returns own cached properties.
+     * @return  properties in associated profile instance, or
+     *          own cached properties
+     */
+    public Properties getDataSourceProperties()
+    {
+        Properties props = getProfileProperties();
+        if( props != null )   // page element is associated with a profile
+            return props;
+        
+        return getPageDataProperties();    // use own cached values
+    }
+
+    /**
+     * Updates the editor page's data source properties with 
+     * values specified in the given collection.
+     * The updated values will be used to initialize the
+     * editor page's custom contents.
+     * @param props the collection of property name value pairs,
+     *        that may contain both public and private properties
+     *        of the ODA extension.
+     */
+    protected void updateDataSourceProperties( Properties props )
+    {
+        if( props == null || props.isEmpty() )
+            return; // nothing to update
+        
+        Properties associatedProps = getDataSourceProperties();
+    
+        Iterator propKeys = props.keySet().iterator();
+        while( propKeys.hasNext() )
+        {
+            String propName = (String) propKeys.next();
+            associatedProps.setProperty( propName, 
+                                props.getProperty( propName ) );
+        }
+    }
+
+    /**
+     * Returns the associated profile instance's properties,
+     * or null if not associated with a profile.
+     * @return
+     */
+    protected Properties getProfileProperties()
+    {
+        IConnectionProfile profile = null;
+        try
+        {
+            profile = getConnectionProfile();
+        }
+        catch( RuntimeException e )
+        {
+            // ok to ignore
+        }
+
+        if( profile != null )
+            return profile.getBaseProperties();  
+        return null;
+    }
+
+    /**
+     * Returns the data source properties cached directly
+     * by this editor page.  The properties may contain both
+     * public and private properties of the ODA extension.
+     * @return 
+     */
+    protected Properties getPageDataProperties()
+    {
+        if( m_dataSourceProps == null )
+            m_dataSourceProps = new Properties();
+        return m_dataSourceProps;
+    }
+
+    protected AdaptableDataSourceProfile getProfileElement()
+    {
+        return ( getElement() instanceof AdaptableDataSourceProfile ) ?
+                (AdaptableDataSourceProfile) getElement() : null;
+    }
+    
+    /**
+     * Provides a new data source design that can be edited
+     * and applied in a design session's response.
+     * The editing data source was deep copied from the one
+     * provided in the design session's request.
+     * @return
+     */
+    protected DataSourceDesign getEditingDataSource()
+    {
+        if( getProfileElement() == null )
+        {
+            return DesignFactory.eINSTANCE.createDataSourceDesign();
+        }
+        
+        // should have thrown exception within init if it failed
+
+        DataSourceDesign dataSourceDesign =
+            getProfileElement().getDataSourceDesign();
+        assert( dataSourceDesign != null );
+        return dataSourceDesign;
+    }
+
+    /**
+     * Initializes the editor page with a design session info object
+     * that contains a request to edit its data source design.
+     * This initializes the page's properties with corresponding values
+     * found or referenced in the data source design. 
+     * @param requestSession  the design session with a request
+     *              that contains the data source design being edited
+     */
+    public void initEditSession( OdaDesignSession requestSession ) throws OdaException
+    {
+        // check if already initialized with same design session
+        if( getProfileElement() != null &&
+            m_designSession == requestSession )
+        {
+            return;     // already initialized
+        }
+            
+        // reset cached profiles for edit session with linked profile in design,
+        // so the page element will have the current profile instance
+        if( requestSession.getRequestDataSourceDesign() != null &&
+            requestSession.getRequestDataSourceDesign().hasLinkToProfile() )
+            OdaProfileExplorer.getInstance().refresh();          
+
+        // associate a copy of the request's data source design 
+        // as the element being edited in this page
+        setElement( DesignerUtil.getAdaptableDataSourceDesign( 
+                                              requestSession ) );
+    
+        // hold on design session info till finish editing
+        m_designSession = requestSession;   
+    }
+
+    /**
+     * Initializes the specified ProfileSelectionEditorPage for this design edit session.
+     * An optional method for a subclass to control the behavior of the profile selection page
+     * in an edit session.
+     * @param profileSelectionPage
+     * @since DTP 1.6
+     */
+    public void initProfileSelectionEditSession( ProfileSelectionEditorPage profileSelectionPage )
+    {
+        // no-op by default; subclass may override
+    }
+
+    protected OdaDesignSession getDesignSession()
+    {
+        return m_designSession;
+    }
+    
+    /**
+     * Indicates whether the editor page is in the midst
+     * of a design session to edit a data source definition.
+     * @return
+     */
+    public boolean isInOdaDesignSession()
+    {
+        return ( m_designSession != null );
+    }
+    
+    /**
+     * Returns the ODA data source element id that 
+     * uniquely identifies the ODA run-time data source extension
+     * of the ODA driver's custom designer plug-in.
+     * @return
+     */
+    protected String getOdaDataSourceId()
+    {
+        if( ! isInOdaDesignSession() )
+            return getConnectionProfile().getProviderId();
+        return getEditingDataSource().getOdaExtensionDataSourceId();   	
+    }
+    
+    /**
+     * Returns a copy of the data source design instance used in
+     * initialization of the customized control of this extended editor page.
+     * A copy is returned to prevent updates to the request design.
+     * @return
+     */
+    protected DataSourceDesign getInitializationDesign()
+    {
+        if( ! isInOdaDesignSession() )
+            return null;
+
+        return (DataSourceDesign) EcoreUtil.copy( 
+                    m_designSession.getRequestDataSourceDesign() );
+    }
+
+    /**
+     * Returns a copy of the designer state specified
+     * in the design session request.
+     * It provides initialization data for this extended editor page
+     * to restore the state of a previous design session.
+     * A copy is returned to prevent updates to the request design.
+     * @return
+     */
+    protected DesignerState getInitializationDesignerState()
+    {
+        if( ! isInOdaDesignSession() ||
+            m_designSession.getRequest().getDesignerState() == null )
+            return null;
+                
+        return (DesignerState) EcoreUtil.copy( 
+                        m_designSession.getRequest().getDesignerState() );
+    }
+    
+    /**
+     * Returns a copy of the session locale specified
+     * in the design session request.
+     * It provides initialization data for this extended editor page
+     * to adopt the requested locale.
+     * An extended editor page may choose to honor or ignore such request.
+     * A copy is returned to prevent updates to the request design.
+     * @return
+     */
+    protected Locale getInitializationLocale()
+    {
+        if( ! isInOdaDesignSession() ||
+            m_designSession.getRequest().getSessionLocale() == null )
+            return null;
+                
+        return (Locale) EcoreUtil.copy( 
+                        m_designSession.getRequest().getSessionLocale() );
+    }
+    
+    /**
+     * Indicates whether the current design session has requested
+     * for an editable or read-only session.
+     * It may be used by an extended editor page for initialization
+     * of its customized control to be read-only.
+     * An extended editor page may choose to honor or ignore such request.
+     * @return
+     * @since 3.0.4
+     */
+    protected boolean isEditableSessionRequested()
+    {
+        if( ! isInOdaDesignSession() )
+            return true;    // default
+        return m_designSession.getRequest().isEditable();       
+    }
+
+    /**
+     * Indicates whether the data source properties may be edited by
+     * a custom page in the current design session.  
+     * It takes into account whether an external connection profile 
+     * reference is maintained; in which case, any user edits on a
+     * custom page is ignored anyway, and thus the properties are not
+     * considered editable.
+     * It may be used by an extended editor page for initialization
+     * of its customized control to be read-only.
+     * An extended editor page may choose to honor or ignore such request.
+     * @return  true if the data source properties may be edited by
+     *          a custom page in the current design session; false otherwise
+     */
+    protected boolean isSessionEditable()
+    {
+        return ( isEditableSessionRequested() &&
+                 ! getEditingDataSource().hasLinkToProfile() );
+    }
+    
+    /**
+     * Returns the resource identifiers of the ODA consumer application, if available.
+     * @return  a ResourceIdentifiers instance; may be null if none is specified
+     * @since 3.0.7
+     */
+    protected ResourceIdentifiers getHostResourceIdentifiers()
+    {
+        if( ! isInOdaDesignSession() )
+            return null;
+        DataSourceDesign dataSourceDesign = m_designSession.getRequest().getDataSourceDesign();
+        return ( dataSourceDesign != null ) ? 
+                dataSourceDesign.getHostResourceIdentifiers() : null;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.preference.IPreferencePage#performOk()
+     */
+    public boolean performOk()
+    {
+        // updates connection profile 
+        // only if editor page was started by DSE        
+        if( ! isInOdaDesignSession() )
+            return super.performOk();    // done
+        
+        return finishEditSession();
+    }
+    
+    /**
+     * Returns the finished design session with a response
+     * that contains the edited data source design.
+     * <br>If the edited data source design has error,
+     * the returned design session would contain a response
+     * with an error session status.
+     * @return  the design session with a response that
+     *          contains the edited data source design
+     * @throws OdaException if the method is called 
+     *          in an invalid session state
+     */
+    public OdaDesignSession getEditSessionResponse() throws OdaException
+    {
+        // verify that edit session is in correct state
+        if( ! isInOdaDesignSession() )
+        {
+            throw new OdaException( Messages.common_notInDesignSession );
+        }
+        
+        // if response is not available, perhaps performOk is not called;
+        // go ahead and trigger to finish the current edit session
+        if( m_designSession.getResponse() == null )
+            finishEditSession();
+        
+        OdaDesignSession responseSession = m_designSession;
+        m_designSession = null;     // reset for next session
+        return responseSession;
+    }
+
+    /**
+     * Performs finish on the current ODA design session to
+     * add a response with the edited data source design 
+     * definition.  
+     * @return  true if the edited data source is processed
+     *          successfully; false otherwise
+     */
+    protected boolean finishEditSession()
+    {
+        DataSourceDesign editedDataSource = null;
+        try
+        {
+            editedDataSource = finishDataSourceDesign();
+        }
+        catch( OdaException ex )
+        {
+            editedDataSource = null;
+            // log warning about exception
+            DesignerLogger logger = DesignerLogger.getInstance();
+            logger.warning( sm_className, "finishEditSession",  //$NON-NLS-1$
+                    "Caught exception while finishDataSourceDesign.", ex ); //$NON-NLS-1$
+        }
+            
+        // update design session with edited data source design, which
+        // could be null if error had occurred
+        boolean isSessionOk = ( editedDataSource != null );
+        assert( m_designSession != null );
+        m_designSession.setNewResponse( isSessionOk, editedDataSource );
+        
+        // get designerState, if set by an extended editor page, 
+        // and assign to session response
+        DesignerState customState = getResponseDesignerState();
+        if( customState != null )
+            m_designSession.getResponse().setDesignerState( customState );
+
+        return isSessionOk;
+    }
+    
+    /**
+     * Performs finish on the current ODA design session to
+     * edit a data source design instance.
+     * Calls subclass extended method to provide further
+     * updates to the data source design instance.
+     * @return  the edited data source design instance
+     * @throws OdaException
+     */
+    protected DataSourceDesign finishDataSourceDesign()
+        throws OdaException
+    {
+        if( ! isInOdaDesignSession() )
+            throw new OdaException( Messages.common_notInDesignSession );
+        
+        // gets a copy of the data source design, and updates
+        // with the property values collected by
+        // this editor page
+        return collectDataSourceDesign( getEditingDataSource() );
+    }
+    
+    /**
+     * Returns the custom designer state specified by 
+     * an extended editor page via the corresponding setter method.
+     * May return null if none is specified.
+     * @return
+     */
+    protected DesignerState getResponseDesignerState()
+    {
+        return m_responseDesignerState;
+    }
+    
+    /**
+     * Allows an extended editor page 
+     * to optionally assign a custom designer state, for inclusion
+     * in the ODA design session response.
+     * @param customDesignerState   a designer state instance
+     *              that preserves the current session's internal state
+     *              so that it can be restored in a subsequent design session
+     */
+    protected void setResponseDesignerState( DesignerState customDesignerState )
+    {
+        m_responseDesignerState = customDesignerState;
+    }
+
+    /**
+     * Refresh this editor page's control display as needed to reflect
+     * the latest state of the data source design being edited.
+     * Refreshing may be needed when another editor page
+     * has updated the editing data source design instance.
+	 * @since 3.0.4
+     */
+    public void refresh()
+    {
+        refresh( getDataSourceProperties() );
+    }
+
+    /**
+     * Refresh this page's control display as needed to reflect
+     * the state of the specified data source design's connection properties.
+     * @param customConnectionProps
+     */
+    protected abstract void refresh( Properties customConnectionProps );
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.dialogs.DialogPage#dispose()
+     */
+    public void dispose()
+    {
+        // calls abstract method provided by custom extension
+        cleanup();
+        super.dispose();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.ui.wizards.ProfileDetailsPropertyPage#setPingButtonEnabled(boolean)
+     */
+    @Override
+    public void setPingButtonEnabled( boolean enabled )
+    {
+        /* The enabled state setting takes effect during #createControl 
+         * if this is called before the ping button is created.
+         */
+        m_setPingButtonEnabled = null;  // first reset previous state
+        
+        // saves the state if the ping button is not created yet
+        if( this.btnPing == null )      
+            m_setPingButtonEnabled = new Boolean( enabled );
+        else
+            super.setPingButtonEnabled( enabled );
+    }
+
+    /**
+     * Marks the inherited Test Connection (Ping) button as visible
+     * if the argument is true, and marks it invisible otherwise. 
+     * <br>The visibility state setting takes effect 
+     * during <code>createControl</code> if this is called before the 
+     * ping button is created.
+     * @param enabled   the new visibility state
+     */
+    protected void setPingButtonVisible( boolean visible )
+    {
+        m_setPingButtonVisible = null;  // first reset previous state
+        
+        // saves the state if the ping button is not created yet
+        if( this.btnPing == null )      
+            m_setPingButtonVisible = new Boolean( visible );
+        else
+            super.setPingButtonVisible( visible );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.preference.PreferencePage#createControl(org.eclipse.swt.widgets.Composite)
+     */
+    public void createControl( Composite parent )
+    {
+        super.createControl( parent );
+        
+        // now that all control contents are created, go ahead and 
+        // override the enabled and visibility state of the inherited Test Connection ping button
+        if( m_setPingButtonEnabled != null )
+            super.setPingButtonEnabled( m_setPingButtonEnabled.booleanValue() );
+        if( m_setPingButtonVisible != null )
+            super.setPingButtonVisible( m_setPingButtonVisible.booleanValue() );
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.ui.wizards.ProfileDetailsPropertyPage#createTestConnectionRunnable(org.eclipse.datatools.connectivity.IConnectionProfile)
+     */
+    protected Runnable createTestConnectionRunnable( final IConnectionProfile profile )
+    {
+        return new Runnable() 
+        {
+            public void run() 
+            {
+                IConnection conn = PingJob.createTestConnection( profile );
+
+                Throwable exception = PingJob.getTestConnectionException( conn );
+                if( conn != null )
+                    conn.close();
+                PingJob.PingUIJob.showTestConnectionMessage( getShell(), exception );
+            }
+        };
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/DataSourceWizardPageCore.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/DataSourceWizardPageCore.java
new file mode 100644
index 0000000..93d05af
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/DataSourceWizardPageCore.java
@@ -0,0 +1,276 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.ui;
+
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.DesignerState;
+import org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers;
+import org.eclipse.datatools.connectivity.ui.PingJob;
+import org.eclipse.datatools.connectivity.ui.wizards.ConnectionProfileDetailsPage;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * The core implementation of the Data Source Wizard Page base class 
+ * provided in the ODA designer UI framework.  It extends the 
+ * DTP connection profile wizard framework.  
+ * <br>It can be used, outside of the Data Source 
+ * Explorer UI, by an user to create an extended ODA data source definition 
+ * with connection properties and corresponding values.
+ */
+public abstract class DataSourceWizardPageCore extends
+        ConnectionProfileDetailsPage
+{
+    private Boolean m_setPingButtonVisible;
+    
+    /**
+     * Sub-class may override the method to further update
+     * the given data source design, as needed.
+     * <br>Examples of custom data source design updates include 
+     * setting its private properties, and
+     * dynamically define a property's design attributes  
+     * per design instance.
+     * <br>This method is called when the wizard performs finish.
+     * @param design    a data source design instance for further updates
+     * @return  the updated data source design instance, or
+     *      null if an error exists and unable to update the design
+     */
+    protected abstract DataSourceDesign collectDataSourceDesign( 
+                                    DataSourceDesign design );
+
+    /**
+     * Cleans up before the page is disposed.
+     * Default implementation does nothing.  Sub-class
+     * may override to clean up custom operations such as
+     * closing a connection.
+     */
+    protected abstract void cleanup();
+
+    /**
+     * Refresh this page's control display as needed to reflect
+     * the latest state of the data source design.
+     * @since 3.0.4
+     */
+    protected abstract void refresh();
+
+    /*
+     * Implements base class constructor.
+     */
+    protected DataSourceWizardPageCore( String name )
+    {
+        super( name );
+    }
+
+    /*
+     * Implements base class constructor.
+     */
+    protected DataSourceWizardPageCore( String pageName, String title,
+            ImageDescriptor titleImage )
+    {
+        super( pageName, title, titleImage );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.wizard.IWizardPage#getNextPage()
+     */
+    public IWizardPage getNextPage()
+    {
+        // skip profile summary page if in ODA design session
+        NewDataSourceWizardBase wizard = getOdaWizard();       
+        return( wizard != null && wizard.isInOdaDesignSession() ) ? 
+                null : super.getNextPage();
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.jface.wizard.WizardPage#isPageComplete()
+     */
+    public boolean isPageComplete()
+    {
+        return isControlCreated() && super.isPageComplete();
+    }
+
+    /**
+     * Returns the page's wizard container that is extended
+     * in the ODA Design UI framework to handle creation
+     * of a new data source design.
+     * @return
+     */
+    protected NewDataSourceWizardBase getOdaWizard()
+    {
+        if( getWizard() instanceof NewDataSourceWizardBase )
+            return (NewDataSourceWizardBase) getWizard();
+        return null;
+    }
+    
+    /**
+     * Returns the ODA data source element id that 
+     * uniquely identifies the ODA run-time data source extension
+     * of the ODA driver's custom designer plug-in.
+     * @return
+     */
+    protected String getOdaDataSourceId()
+    {
+        return getOdaWizard().getOdaDataSourceId();
+    }
+    
+    /**
+     * Returns the ODA driver's custom designer plug-in id that 
+     * implements the DTP oda.design.ui.dataSource extension point.
+     * @return
+     */
+    protected String getOdaDesignerId()
+    {
+        return getOdaWizard().getOdaDesignerId();
+    }
+    
+    /**
+     * Returns the resource identifiers of the ODA consumer application, if available.
+     * @return  a ResourceIdentifiers instance; may be null if none is specified
+     * @since 3.0.7
+     */
+    protected ResourceIdentifiers getHostResourceIdentifiers()
+    {
+        NewDataSourceWizardBase wizard = getOdaWizard();       
+        return ( wizard != null ) ? wizard.getHostResourceIdentifiers() : null;
+    }
+    
+    /**
+     * Performs finish to
+     * create a new data source design instance.
+     * Calls a subclass extended method to provide further
+     * updates to the given data source design instance.
+     * @return  the updated data source design instance
+     * @throws OdaException
+     */
+    public DataSourceDesign finishDataSourceDesign(
+                                DataSourceDesign design )
+        throws OdaException
+    {
+        // calls abstract method provided by custom extension
+        // to further specify its data source design
+        return collectDataSourceDesign( design );
+    }
+    
+    /**
+     * Allows an extended wizard page
+     * to optionally assign a custom designer state, for inclusion
+     * in the ODA design session response.
+     * @param customDesignerState   a designer state instance
+     *              that preserves the current session's internal state
+     *              so that it can be restored in a subsequent design session
+     */
+    protected void setResponseDesignerState( DesignerState customDesignerState )
+    {
+        NewDataSourceWizardBase wizard = getOdaWizard();
+        if( wizard != null )
+            wizard.setResponseDesignerState( customDesignerState );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.dialogs.DialogPage#dispose()
+     */
+    public void dispose()
+    {
+        // calls abstract method provided by custom extension
+        cleanup();
+        super.dispose();
+    }
+
+    /**
+     * Marks the inherited Test Connection (Ping) button as visible
+     * if the argument is true, and marks it invisible otherwise. 
+     * <br>The visibility state setting takes effect 
+     * during <code>createControl</code> if this is called before the 
+     * ping button is created.
+     * @param enabled   the new visibility state
+     */
+    protected void setPingButtonVisible( boolean visible )
+    {
+        m_setPingButtonVisible = null;  // first reset previous state
+        
+        // saves the state if the ping button is not created yet
+        if( this.btnPing == null )      
+            m_setPingButtonVisible = new Boolean( visible );
+        else
+            super.setPingButtonVisible( visible );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.ui.wizards.ConnectionProfileDetailsPage#createControl(org.eclipse.swt.widgets.Composite)
+     */
+    public void createControl( Composite parent )
+    {
+        // since connecting to an ODA data source does not provide additional info in DSE,
+        // hide the option to auto connect for all oda data sources
+        setAutoConnectOnFinishDefault( false );
+        setShowAutoConnectOnFinish( false );
+        setShowAutoConnect( false );    // auto connect at workbench startup
+        
+        super.createControl( parent );
+        
+        // now that all control contents are created, go ahead and 
+        // override visibility of the inherited Test Connection ping button
+        if( m_setPingButtonVisible != null )
+            super.setPingButtonVisible( m_setPingButtonVisible.booleanValue() );
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.ui.wizards.ConnectionProfileDetailsPage#createTestConnectionRunnable(org.eclipse.datatools.connectivity.IConnectionProfile)
+     */
+    protected Runnable createTestConnectionRunnable( final IConnectionProfile profile )
+    {
+        return new Runnable() 
+        {
+            public void run() 
+            {
+                IConnection conn = PingJob.createTestConnection( profile );
+
+                Throwable exception = PingJob.getTestConnectionException( conn );
+                if( conn != null )
+                    conn.close();
+                PingJob.PingUIJob.showTestConnectionMessage( getShell(), exception );
+            }
+        };
+    }
+    
+    /**
+     * Indicates whether the data source properties may be edited by
+     * a custom page in the current design session.  
+     * It takes into account whether an external connection profile 
+     * reference is maintained; in which case, any user edits on a
+     * custom page is ignored anyway, and thus the properties are not
+     * considered editable.
+     * It may be used by an extended wizard page for initialization
+     * of its customized control to be read-only.
+     * An extended wizard page may choose to honor or ignore such request.
+     * @return  true if the data source properties may be edited by
+     *          a custom page in the current design session; false otherwise
+     * @since 3.0.4
+     */
+    protected boolean isSessionEditable()
+    {
+        NewDataSourceWizardBase wizard = getOdaWizard();       
+        if( wizard == null )
+            return true;    // default
+        return wizard.isSessionEditable();       
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/DesignerUtil.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/DesignerUtil.java
new file mode 100644
index 0000000..f4f14a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/DesignerUtil.java
@@ -0,0 +1,169 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.ui;
+
+import java.lang.reflect.Constructor;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.OdaDesignSession;
+import org.eclipse.datatools.connectivity.oda.design.ui.nls.Messages;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.osgi.framework.Bundle;
+
+/**
+ *  Internal utility class to provide services
+ *  to the ODA Designer packages.
+ */
+public class DesignerUtil
+{
+    private DesignerUtil()
+    {}
+    
+    /**
+     * Validates and adapts the given data source design
+	 * for editing.
+     * <br>The adaptable element returned is a copy of the  
+     * DataSourceDesign instance found in given session's request.
+     * @param designSession
+     * @return	an adaptable data source design as an element 
+     * that can be edited in a data source property page
+     * @throws OdaException
+     */
+    public static AdaptableDataSourceProfile 
+        getAdaptableDataSourceDesign( OdaDesignSession designSession )
+    throws OdaException
+    {
+        if( designSession == null )
+            throw new OdaException( Messages.common_nullArgument );
+        
+        DataSourceDesign dataSourceDesign =
+            designSession.getRequestDataSourceDesign();
+        if( dataSourceDesign == null )
+            throw new OdaException( Messages.common_missingDataSourceDesign );
+
+        DataSourceDesign editDataSourceDesign = 
+            (DataSourceDesign) EcoreUtil.copy( dataSourceDesign );
+        
+        return new AdaptableDataSourceProfile( editDataSourceDesign );
+    }
+    
+    /**
+     * Instantiate an object of the specified plugin class through
+     * its constructor with a single String argument.
+     * @param pluginId
+     * @param className
+     * @param argument
+     * @return
+     * @throws RuntimeException
+     */
+    static Object createInstanceWithStringArg( String pluginId,
+                                               String className, 
+                                               String argument ) 
+        throws RuntimeException
+    {
+        Object newInstance = null;
+        try
+        {
+            Bundle bundle = Platform.getBundle( pluginId );
+            Class loadedClass = bundle.loadClass( className );
+
+            // looks for custom constructor
+            // with a single String argument
+            Class argTypes[] = new Class[1];
+            argTypes[0] = String.class;
+            Constructor ct = loadedClass.getConstructor( argTypes );
+
+            // instantiate with given argument
+            Object argList[] = new Object[1];
+            argList[0] = argument;
+            newInstance = ct.newInstance( argList );
+        }
+        catch( Exception ex )
+        {
+            throw new RuntimeException( 
+                    Messages.bind( Messages.common_createClassFailed, 
+                                    className ), ex );
+        }
+        return newInstance;
+    }
+
+    /**
+     * An utility method to enable/disable the specified parent control and 
+     * all its nested children, except the preservedButton if specified,
+     * according to the specified <code>enabled</code> state.
+     * The preservedButton's state is excluded from the state changes.
+     * @param aControl  a control
+     * @param enabled   the new enabled state
+     * @param preservedButton   the button whose enabled state is to be preserved;
+     *                          may be null
+     * @since 3.0.4
+     */
+    public static void enableAllControls( Control parent, boolean enabled,
+                                            Button preservedButton )
+    {
+        if( parent == null )
+            return;     // nothing to enable
+
+        if( preservedButton != null && preservedButton.isDisposed() )
+            preservedButton = null;     // can't access the button
+        
+        boolean isButtonEnabled = ( preservedButton != null ) ? 
+                                    preservedButton.isEnabled() : true;
+
+        enableAllControls( parent, enabled );
+        
+        // restore the previous state of the preserved button
+        if( preservedButton != null )
+        {
+            preservedButton.setEnabled( isButtonEnabled );
+            preservedButton.getParent().setEnabled( isButtonEnabled );
+            parent.setEnabled( isButtonEnabled );        
+        }
+        else
+            // in case the preservedButton is created later in enabled state 
+            parent.setEnabled( isButtonEnabled );        
+    }
+
+    /**
+     * Recursively goes through all the children of the specified control
+     * and enable/disable them according to the specified <code>enabled</code> state.
+     * @param aControl  a control
+     * @param enabled   the new enabled state
+     * @since 3.0.4
+     */
+    public static void enableAllControls( Control aControl, boolean enabled )
+    {
+        if( aControl == null )
+            return;     // nothing to enable
+        
+        if( aControl instanceof Composite )
+        {
+            Control[] childControls = ((Composite) aControl).getChildren();
+            for( int i = 0; i < childControls.length; i++ )
+            {
+                enableAllControls( childControls[i], enabled );
+            }
+        }
+        
+        if( ! aControl.isDisposed() )
+            aControl.setEnabled( enabled );        
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/NewDataSourceWizardBase.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/NewDataSourceWizardBase.java
new file mode 100644
index 0000000..2345e34
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/NewDataSourceWizardBase.java
@@ -0,0 +1,751 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2013 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.ui;
+
+import java.io.File;
+import java.util.Properties;
+import java.util.logging.Level;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExecutableExtension;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.ProfileWizardProvider;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest;
+import org.eclipse.datatools.connectivity.oda.design.DesignerState;
+import org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers;
+import org.eclipse.datatools.connectivity.oda.design.internal.designsession.DataSourceDesignSessionBase.ProfileReferenceBase;
+import org.eclipse.datatools.connectivity.oda.design.internal.designsession.DesignerLogger;
+import org.eclipse.datatools.connectivity.oda.design.ui.designsession.DesignSessionUtil;
+import org.eclipse.datatools.connectivity.oda.design.ui.manifest.DataSourceWizardInfo;
+import org.eclipse.datatools.connectivity.oda.design.ui.manifest.UIExtensionManifest;
+import org.eclipse.datatools.connectivity.oda.design.ui.manifest.UIManifestExplorer;
+import org.eclipse.datatools.connectivity.oda.design.ui.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSourceWizardPage;
+import org.eclipse.datatools.connectivity.oda.profile.OdaProfileExplorer;
+import org.eclipse.datatools.connectivity.oda.profile.internal.OdaConnectionProfile;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ConnectionProfileProperty;
+import org.eclipse.datatools.connectivity.ui.wizards.NewConnectionProfileWizard;
+import org.eclipse.datatools.connectivity.ui.wizards.NewConnectionProfileWizardPage;
+import org.eclipse.jface.wizard.IWizardPage;
+
+/**
+ * The internal ODA data source wizard base class implementation that 
+ * looks up and adds customized wizard page to create an 
+ * extended ODA connection profile instance.
+ * <p>This wizard is part of the ODA Designer UI framework that 
+ * extends the DTP connection profile wizard framework.
+ * It may also be launched from the DTP Data Source Explorer.
+ */
+public class NewDataSourceWizardBase extends NewConnectionProfileWizard
+    implements IExecutableExtension
+{
+    private String m_odaDataSourceId;
+    private String m_odaDesignerPluginId;
+
+    // create and initialize common properties for the new profile
+    private Properties m_profileProps = new Properties();
+
+    private DataSourceWizardPage m_startPage;
+    private UIExtensionManifest m_manifest;
+
+    private boolean m_isInDesignSession = false;
+    private DesignSessionRequest m_sessionRequest;
+    private boolean m_hasPerformedFinish = false;
+    private DataSourceDesign m_responseDataSourceDesign;
+    private DesignerState m_responseDesignerState;
+    private LinkedProfile m_linkedProfile;
+
+    private static final String ODA_UI_EXT_PT = 
+    	"org.eclipse.datatools.connectivity.oda.design.ui.dataSource"; //$NON-NLS-1$
+
+    // logging variable
+    private static final String sm_className = NewDataSourceWizardBase.class.getName();
+    
+    protected NewDataSourceWizardBase( String odaDataSourceId )
+        throws OdaException
+    {
+        initialize( odaDataSourceId, null, 
+                    Messages.wizard_dataSource_defaultTitle );
+    }
+
+    protected NewDataSourceWizardBase()
+    {
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.core.runtime.IExecutableExtension#setInitializationData(org.eclipse.core.runtime.IConfigurationElement, java.lang.String, java.lang.Object)
+     * Gets called after a new object is instantiated.
+     */    
+    public void setInitializationData( IConfigurationElement newWizardElement, String classAttribute, Object data ) 
+        throws CoreException
+    {
+        // ODA profiles use the odaDataSourceId as its profile identifier
+        // which uniquely identifies an ODA run-time data source extension
+        String odaDataSourceId = 
+            newWizardElement.getAttribute( ProfileWizardProvider.ATTR_PROFILE );
+        if( odaDataSourceId == null || odaDataSourceId.length() == 0 )
+            throw new CoreException( 
+                    new Status( IStatus.ERROR, 
+                            newWizardElement.getNamespaceIdentifier(), 
+                            IStatus.OK,
+                            Messages.wizard_missingDataSourceId, 
+                            null ) );
+
+        // the oda ui plugin extension that implements the custom wizard
+        String odaDesignerPluginId = newWizardElement.getNamespaceIdentifier();
+
+        // use newWizard extension's name attribute as default title
+        String wizardName = 
+            newWizardElement.getAttribute( ProfileWizardProvider.ATTR_NAME );
+        
+        try
+        {
+            initialize( odaDataSourceId, odaDesignerPluginId, wizardName );
+        }
+        catch( OdaException ex )
+        {
+            throw new CoreException( 
+                    new Status( IStatus.ERROR, 
+                            odaDesignerPluginId, 
+                            IStatus.OK,
+                            Messages.wizard_invalidManifest, 
+                            ex ));
+        }
+    }
+    
+    /**
+     * Initialize the wizard's context.
+     * @param odaDataSourceId   ODA runtime data source element id
+     * @param odaDesignerId     ODA design-time extension's plugin namespace
+     * @param defaultWizardTitle    default window title to use
+     *            if none is specified in newDataSourceWizard element in
+     *            oda.design.ui.dataSource extension
+     * @throws OdaException
+     */
+    protected void initialize( String odaDataSourceId, 
+                                String odaDesignerId,
+                                String defaultWizardTitle )
+        throws OdaException
+    {
+        m_odaDataSourceId = odaDataSourceId;        
+        initProviderID( m_odaDataSourceId );               
+        
+        // find the oda.design.ui.dataSource extension manifest content
+        m_manifest = 
+                UIManifestExplorer.getInstance().getExtensionManifest( 
+                        m_odaDataSourceId );
+        if( m_manifest == null )
+        {
+            String errorMessage = Messages.bind( Messages.extension_missingManifestElement, ODA_UI_EXT_PT );
+            OdaException odaEx = new OdaException( errorMessage );
+            odaEx.initCause( new IllegalArgumentException( m_odaDataSourceId ) );
+            throw odaEx;
+        }
+
+        m_odaDesignerPluginId = 
+            ( odaDesignerId != null && odaDesignerId.length() > 0 ) ?
+                odaDesignerId : m_manifest.getNamespace();
+       
+        // set wizard behavior as defined by extension
+        DataSourceWizardInfo wizardInfo = 
+                m_manifest.getDataSourceWizardInfo();
+        assert( wizardInfo != null );
+        
+        // progress monitor
+        setNeedsProgressMonitor( wizardInfo.includesProgressMonitor() );
+
+        // custom data source wizard window title
+        String windowTitle = wizardInfo.getWindowTitle();
+        if( windowTitle == null || windowTitle.length() == 0 )
+            windowTitle = defaultWizardTitle;
+        setWindowTitle( windowTitle );        
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.ui.wizards.NewConnectionProfileWizard#addPages()
+     */
+    public void addPages()
+    {
+        if( getPageCount() > 0 )
+            return;     // has already added pages; done
+        
+        super.addPages();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.ui.wizards.NewConnectionProfileWizard#addCustomPages()
+     */
+    public void addCustomPages()
+    {
+        if( m_startPage != null )
+            return;     // already added
+        
+        // get page attributes from ODA wizard page's extension element
+        DataSourceWizardInfo wizardInfo = 
+            m_manifest.getDataSourceWizardInfo();
+        assert( wizardInfo != null );
+        String wizardPageClassName = wizardInfo.getPageClassName();
+        String pageTitle = wizardInfo.getPageTitle();
+        
+        m_startPage = createWizardPage( wizardPageClassName, pageTitle );
+        addPage( m_startPage );
+    }
+
+    protected DataSourceWizardPage createWizardPage( String wizardPageClassName,
+                                                    String pageTitle )
+    {
+        // instantiate using a custom constructor 
+        // with a single pageName argument,
+        // extending from DataSourceWizardPage base class;
+        // use class name as page name
+        Object pageInstance = 
+            DesignerUtil.createInstanceWithStringArg( 
+                    m_odaDesignerPluginId,
+                    wizardPageClassName, wizardPageClassName );
+        
+        if( ! ( pageInstance instanceof DataSourceWizardPage ))
+        {
+            throw new RuntimeException( 
+                    Messages.bind( Messages.extension_mustInheritFromODAPage, 
+                                    wizardPageClassName,
+                                    DataSourceWizardPage.class.getName() )); 
+        }
+        
+        // a valid wizard page, subclass from DataSourceWizardPage;
+        // overrides page title, if specified
+        if( pageTitle != null && pageTitle.length() > 0 )
+            (( DataSourceWizardPage ) pageInstance ).setTitle( pageTitle );
+
+        return ( DataSourceWizardPage ) pageInstance;
+    }
+    
+    /**
+     * Returns the customized starting page provided by 
+     * an ODA wizard page's extension.
+     * This method should be called only after IWizard#addPages() is done;
+     * otherwise, returns null.
+     */
+    public IWizardPage getCustomStartingPage()
+    {
+        return getCustomWizardPage();
+    }
+   
+    /**
+     * This method should be called only after IWizard#addPages() is done.
+     */
+    protected DataSourceWizardPage getCustomWizardPage()
+    {
+        assert( m_startPage != null );
+        return m_startPage;
+    }
+    
+    /**
+     * For internal use only; not an API method.
+     */
+    public void setProfilePageProperties( String profileName, String profileDesc, 
+            Boolean autoConnect, Boolean skipProfilePage )
+    {
+        // override page properties only if a non-null argument value is specified
+        if( profileName != null )
+            setProfileName( profileName );
+        if( profileDesc != null )
+            setProfileDescription( profileDesc );
+        if( autoConnect != null )
+        {
+            if( getProfileNamePage() != null )
+                getProfileNamePage().setAutoConnect( autoConnect.booleanValue() );
+        }
+        
+        if( skipProfilePage != null )
+            setSkipProfileNamePage( skipProfilePage.booleanValue() );
+    }
+    
+    /**
+     * For internal use only; not a public API method.
+     */
+    public boolean hasProfileNamePage()
+    {
+        return getProfileNamePage() != null; 
+    }
+    
+    protected NewConnectionProfileWizardPage getProfileNamePage()
+    {
+        return getProfilePage();
+    }
+    
+    /**
+     * Refresh the wizard and its custom page with given properties, 
+     * if it has any entries.
+     * Otherwise, keep wizard's existing properties.
+     * Refresh the custom page with the latest state.
+     * @param dataSourceProps
+	 * @since 3.0.4
+     */
+    public void refreshPropertiesIfExist( Properties dataSourceProps )
+    {
+        if( dataSourceProps != null && ! dataSourceProps.isEmpty() )
+        {
+            setInitialProperties( dataSourceProps );
+        } 
+        
+        if( getCustomWizardPage() != null )
+            getCustomWizardPage().refresh();
+    }
+    
+    /**
+     * Initializes the wizard and its custom page with given properties.
+     * This method may be called only after IWizard#addPages()is done.
+     * @param props     a collection of properties in name value pairs
+     */
+    private void setInitialProperties( Properties props )
+    {
+        m_profileProps = props;
+        if( getCustomWizardPage() != null )
+            getCustomWizardPage().setInitialProperties( m_profileProps );
+    }
+
+    public void setLinkedProfile( ProfileReferenceBase profileRef )
+    {
+        m_linkedProfile = new LinkedProfile( profileRef );
+    }
+
+    public void unsetLinkedProfile()
+    {
+        m_linkedProfile = null;        
+    }
+ 
+    protected boolean hasLinkToProfile()
+    {
+        return ( m_linkedProfile != null && 
+                 m_linkedProfile.hasLinkAttributes() );
+    }
+    
+    protected IConnectionProfile getLinkedProfile()
+    {
+        return hasLinkToProfile() ? m_linkedProfile.getProfileInstance() : null;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.ui.wizards.NewConnectionProfileWizard#getProfileProperties()
+     */
+    public Properties getProfileProperties()
+    {
+        assert( m_profileProps != null );
+        m_profileProps = collectCustomProperties();
+        return m_profileProps;
+    }
+
+    /*
+     * Returns the custom properties provided by user
+     * in the customized wizard page.
+     * This method does not change the state of the wizard instance.
+     */
+    protected Properties collectCustomProperties()
+    {
+        if( m_startPage != null )
+            return m_startPage.collectCustomProperties();
+
+        return m_profileProps;    // use own cached properties
+    }
+    
+    private static boolean hasLinkedProfileProperties( Properties customProperties )
+    {
+        if( customProperties.containsKey( ConnectionProfileProperty.PROFILE_NAME_PROP_KEY ) )
+            return true;
+        
+        return customProperties.containsKey( ConnectionProfileProperty.PROFILE_STORE_FILE_PATH_PROP_KEY );
+    }
+
+    /**
+     * Returns the ODA data source element id that 
+     * uniquely identifies the ODA run-time data source extension
+     * of the ODA driver's custom designer plug-in.
+     */
+    public String getOdaDataSourceId()
+    {
+        return m_odaDataSourceId;
+    }
+
+    /**
+     * Returns the ODA driver's custom designer plug-in id that 
+     * implements the DTP oda.design.ui.dataSource extension point.
+     */
+    public String getOdaDesignerId()
+    {
+        return m_odaDesignerPluginId;
+    }
+
+    /**
+     * For internal use only.
+     * Indicates whether this wizard is valid and can use its pages to create a new
+     * data source design of the specified oda data source type, and 
+     * optionally based on reference to an existing ODA connection profile instance.
+     * @param odaDataSourceId   oda data source extension id
+     * @param profileRef    reference to the profile instance from which to create a new data source design;
+     *                          optional, may be null
+     * @return  true if this wizard can be re-used; false otherwise
+     * @since DTP 1.11
+     */
+    public boolean isValid( String odaDataSourceId, ProfileReferenceBase profileRef )
+    {
+        IConnectionProfile odaProfile = ( profileRef == null ) ? null :
+                                profileRef.getProfileInstance();
+        if( odaProfile == null || odaProfile instanceof OdaConnectionProfile )
+            return isValid( odaDataSourceId, (OdaConnectionProfile)odaProfile );
+        return false;   // expects null or an OdaConnectionProfile
+    }
+
+    /**
+     * Indicates whether this wizard is valid and can use its pages to create a new
+     * data source design of the specified oda data source type and in reference to 
+     * an existing ODA connection profile instance.
+     * @param odaDataSourceId   oda data source extension id
+     * @param odaProfile        the profile instance from which to create a new data source design;
+     *                          optional, may be null
+     * @since DTP 1.6
+     */
+    public boolean isValid( String odaDataSourceId, OdaConnectionProfile odaProfile )
+    {
+        // base class assumes that a wizard can handle only one type of oda data source,
+        // and any of its existing profiles; subclass may override
+        if( odaProfile != null && ! odaProfile.getProviderId().equalsIgnoreCase( odaDataSourceId ))
+            return false;
+        return getOdaDataSourceId().equals( odaDataSourceId );
+    }
+    
+    /**
+     * Indicates whether the wizard is in the midst of a 
+     * ODA design session to create a new data source definition.
+     * @return true if in an ODA design session; 
+     *         false otherwise, such as started by the Data Source Explorer.
+     */
+    public boolean isInOdaDesignSession()
+    {
+        return m_isInDesignSession;
+    }
+
+    /**
+     * For internal use only.
+     */
+    void setInOdaDesignSession( boolean value )
+    {
+        m_isInDesignSession = value;
+    }
+
+    /**
+     * For internal use only.
+     */
+    public void initOdaDesignSession( ProfileReferenceBase newProfileRef, DesignSessionRequest sessionRequest )
+    {
+        m_hasPerformedFinish = false;
+        m_sessionRequest = sessionRequest;  // may be null
+        setInOdaDesignSession( true );
+        
+        // reset any previously linked profile
+        unsetLinkedProfile();
+        
+        if( newProfileRef != null && newProfileRef.maintainExternalLink() )
+            setLinkedProfile( newProfileRef );        
+    }
+    
+    /**
+     * Returns the resource identifiers of the ODA consumer application, if available.
+     * @return  a ResourceIdentifiers instance; may be null if none is specified
+     */
+    ResourceIdentifiers getHostResourceIdentifiers()
+    {
+        if( m_sessionRequest == null )
+            return null;
+        
+        DataSourceDesign dataSourceDesign = m_sessionRequest.getDataSourceDesign();
+        return ( dataSourceDesign != null ) ? 
+                dataSourceDesign.getHostResourceIdentifiers() : null;
+    }
+    
+    /**
+     * Indicates whether the data source properties may be edited by
+     * the wizard's custom page in the current design session.  
+     * It takes into account whether an external connection profile 
+     * reference is maintained; in which case, any user edits on a
+     * custom page is ignored anyway, and thus the properties are not
+     * considered editable.
+     * It provides initialization data for the ODA wizard
+     * and its custom pages to set its customized control to be read-only.
+     * An extended wizard page may choose to honor or ignore such request.
+     * @return  true if the data source properties may be edited by
+     *          a custom page in the current design session; false otherwise
+     * @since 3.0.4
+     */
+    boolean isSessionEditable()
+    {
+        // a design session to create a new data source design
+        // is editable by default;
+        // check if using an external connection profile reference
+        return ! hasLinkToProfile();       
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.ui.wizards.NewConnectionProfileWizard#performFinish()
+     */
+    public boolean performFinish()
+    {
+        if( m_hasPerformedFinish )
+            return true;    // has already completed the finish task
+        
+        // creates a new connection profile instance in DSE
+        // only if wizard was started by DSE, and not by an ODA design session       
+        if( ! isInOdaDesignSession() )
+        {
+            boolean state = super.performFinish();
+            m_hasPerformedFinish = true;
+            return state;    // done
+        }
+        
+        // is in an ODA design session, create new ODA design instead
+        try
+        {
+            finishDataSourceDesign();
+        }
+        catch( OdaException ex )
+        {
+            // log warning about exception
+            DesignerLogger logger = DesignerLogger.getInstance( DesignerLogger.PLUGIN_LOGGER_NAME );
+            logger.warning( sm_className, "performFinish",  //$NON-NLS-1$
+                    "Caught exception while finishDataSourceDesign.", ex ); //$NON-NLS-1$
+            return false;
+        }
+        
+        return true;
+    }
+
+    /**
+     * Performs finish on the design session with
+     * a new data source design, which contains 
+     * the data source connection properties and values
+     * collected in the wizard pages.
+     * <br>Resets the design session state.
+     * @throws OdaException
+     */
+    public DataSourceDesign finishDataSourceDesign()
+        throws OdaException
+    {
+        if( ! isInOdaDesignSession() )
+            throw new OdaException( Messages.common_notInDesignSession );
+
+        m_responseDataSourceDesign = saveNewDataSourceDesign();        
+        m_hasPerformedFinish = true;
+
+        return m_responseDataSourceDesign;
+    }
+    
+    /**
+     * Returns the ODA data source design created on Finish.
+     * Applicable only if the data source was defined within
+     * an ODA design session.
+     * @return 
+     */
+    public DataSourceDesign getDataSourceDesign()
+    {
+        if( m_hasPerformedFinish )      // performFinish is done
+            return m_responseDataSourceDesign;  // ok to return created design
+        return null;
+    }
+    
+    /**
+     * Takes the data source connection properties and values
+     * collected in wizard page, and maps to a
+     * new Data Source Design object.
+     * @return the new Data Source Design object
+     */
+    private DataSourceDesign saveNewDataSourceDesign()
+        throws OdaException
+    {
+        DataSourceDesign newDesign = DesignFactory.eINSTANCE.createDataSourceDesign();
+    
+        // assigns profile instance info to data source design
+        
+        newDesign.setOdaExtensionId( getOdaDataSourceId() );
+            // no need to explicitly set OdaExtensionDataSourceId
+        try
+        {
+            newDesign.setName( getProfileName() );
+            newDesign.setDisplayName( getProfileDescription() );
+        }
+        catch( RuntimeException ex ) 
+        {
+            // ignore in case wizard profile page is not available
+            // log warning about exception
+            DesignerLogger logger = DesignerLogger.getInstance();
+            logger.warning( sm_className, "saveNewDataSourceDesign",  //$NON-NLS-1$
+                    "Caught exception while copying profile attributes from wizard profile page.", ex ); //$NON-NLS-1$
+
+            newDesign.setName( getOdaDataSourceId() );
+        }
+        
+        // assign those properties that have values collected in wizard page
+        Properties customPropertyValues = getProfileProperties();
+        setDataSourceDesignProperties( newDesign, customPropertyValues );
+    
+        /* adds linked profile properties to the design, 
+         * iff a profile is specified/initialized in this wizard
+         * and the custom page did not include any linked profile properties in its 
+         * custom profile properties
+         */
+        if( hasLinkToProfile() && ! hasLinkedProfileProperties( customPropertyValues ) )
+        {
+            assert( m_linkedProfile != null );
+            newDesign.setLinkedProfileName( m_linkedProfile.getProfileName() );
+            newDesign.setLinkedProfileStoreFilePath( m_linkedProfile.getStorageFilePathPropertyValue() );
+        }
+        
+        if( getCustomWizardPage() == null )
+            return newDesign;
+        
+        // let custom wizard page implementation further specifies the data source design
+        return getCustomWizardPage().finishDataSourceDesign( newDesign );
+    }
+
+    /**
+     * Assigns the specified custom data source properties to the
+     * specified data source design, based on the ODA data source extension's
+     * property definition declared in its manifest.
+     * @param newDesign a data source design definition
+     * @param customPropertyValues  custom property name-value pairs collected
+     *                              from a custom page
+     * @throws OdaException
+     */
+    protected void setDataSourceDesignProperties( DataSourceDesign newDesign,
+            Properties customPropertyValues ) 
+        throws OdaException
+    {
+        newDesign.setPublicProperties(
+                DesignSessionUtil.createDataSourcePublicProperties( 
+                            getOdaDataSourceId(),
+                            customPropertyValues ));
+        newDesign.setPrivateProperties( 
+                DesignSessionUtil.createDataSourceNonPublicProperties( 
+                            getOdaDataSourceId(),
+                            customPropertyValues ));
+    }
+    
+    /**
+     * Returns the custom designer state specified by 
+     * an extended wizard via the corresponding setter method.
+     * May return null if none is specified.
+     * @return
+     */
+    public DesignerState getResponseDesignerState()
+    {
+        return m_responseDesignerState;
+    }
+    
+    /**
+     * Allows an extended wizard 
+     * to optionally assign a custom designer state, for inclusion
+     * in the ODA design session response.
+     * @param customDesignerState   a designer state instance
+     *              that preserves the current session's internal state
+     *              so that it can be restored in a subsequent design session
+     */
+    protected void setResponseDesignerState( DesignerState customDesignerState )
+    {
+        m_responseDesignerState = customDesignerState;
+    }
+
+    
+    /**
+     * Nested internal class for managing the connection profile
+     * attributes that may be linked to a new data source design.
+     */
+    private class LinkedProfile
+    {
+        private String m_profileName;
+        private File m_storageFile;
+        private String m_storageFilePathPropValue;
+
+        public LinkedProfile( ProfileReferenceBase profileRef )
+        {
+            m_profileName = profileRef.getName();
+            m_storageFile = profileRef.getStorageFile();
+            m_storageFilePathPropValue = profileRef.getStorageFilePathPropertyValue();
+        }
+
+        /**
+         * Indicates whether essential profile attribute exists
+         * to serve as a valid link.
+         * @return
+         */
+        public boolean hasLinkAttributes()
+        {
+            return ( m_profileName != null && 
+                     m_profileName.length() > 0 );
+        }
+        
+        public String getProfileName()
+        {
+            return m_profileName;
+        }
+
+        public File getStorageFile()
+        {
+            return m_storageFile;
+        }                
+        
+        public String getStorageFilePathPropertyValue()
+        {
+            return m_storageFilePathPropValue;
+        }
+
+        private IConnectionProfile getProfileInstance()
+        {
+            if( ! hasLinkAttributes() )
+                return null;
+            
+            final String methodName = "getProfileInstance";  //$NON-NLS-1$
+            
+            IConnectionProfile profile = null;
+            try
+            {
+                // if null profile store file is specified, the default profile store path is used
+                profile = OdaProfileExplorer.getInstance()
+                            .getProfileByName( getProfileName(), getStorageFile() );
+            }
+            catch( OdaException ex )
+            {
+                // log warning about exception
+                DesignerLogger logger = DesignerLogger.getInstance();
+                logger.warning( sm_className, methodName,
+                        "Caught exception while looking up connection profile instance by name.", ex ); //$NON-NLS-1$
+            }
+            
+            if( profile == null )
+            {
+                // log warning that no profile is found
+                DesignerLogger logger = DesignerLogger.getInstance( DesignerLogger.PLUGIN_LOGGER_NAME );
+                logger.logp( Level.WARNING, sm_className, methodName,
+                        "Unable to find referenced connection profile instance." ); //$NON-NLS-1$
+            }
+            return profile;
+        }
+        
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/OdaProfileUIExplorer.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/OdaProfileUIExplorer.java
new file mode 100644
index 0000000..0fdb850
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/OdaProfileUIExplorer.java
@@ -0,0 +1,227 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.ui;
+
+import java.io.File;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectionProfileManagerUI;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.ui.manifest.DataSetUIElement;
+import org.eclipse.datatools.connectivity.oda.design.ui.manifest.DataSetWizardInfo;
+import org.eclipse.datatools.connectivity.oda.design.ui.manifest.UIManifestExplorer;
+import org.eclipse.datatools.connectivity.oda.design.ui.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizard;
+import org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSourceEditorPage;
+import org.eclipse.datatools.connectivity.oda.design.ui.wizards.NewDataSourceWizard;
+import org.eclipse.datatools.connectivity.oda.profile.OdaProfileExplorer;
+import org.eclipse.jface.wizard.IWizard;
+
+/**
+ * The ODA Profile Wizard Explorer is a singleton class that 
+ * provides the services to access an ODA data source extension's
+ * customized wizard and editor page implementation.
+ * The singleton instance is retrieved 
+ * using the <code>getInstance()</code> method.
+ */
+public class OdaProfileUIExplorer
+{
+    private static OdaProfileUIExplorer sm_instance = null;
+
+    public static synchronized OdaProfileUIExplorer getInstance()
+    {
+        if( sm_instance == null )
+            sm_instance = new OdaProfileUIExplorer();
+        return sm_instance;
+    }
+
+    private OdaProfileUIExplorer()
+    {
+    }
+    
+    /**
+     * Returns the ODA custom wizard provided by an
+     * ODA data source designer that implements the 
+     * connection profile extension point.
+     * @param profileInstanceId the instance id of a connection profile
+     * @return  the ODA custom wizard, or null if no wizard is provided
+     * @throws OdaException if the profile provider has not implemented 
+     *                      the expected Oda wizard type
+     * @deprecated  As of DTP 1.6, replaced by {@link #getNewDataSourceWizard(String, File)}
+     */
+    public NewDataSourceWizard getNewDataSourceWizard( String profileInstanceId )
+        throws OdaException
+    {
+        // ODA profiles use the odaDataSourceId as its profile identifier
+        String odaDataSourceId = 
+            OdaProfileExplorer.getInstance().getProfile( profileInstanceId ).getProviderId();
+        return getNewDataSourceWizardByType( odaDataSourceId );
+    }
+    
+    /**
+     * Returns the ODA custom wizard provided by an
+     * ODA data source designer that implements the 
+     * connection profile extension point.
+     * @param profileInstanceId the instance id of a connection profile
+     * @param storageFile   a file that stores profile instances; 
+     *                      may be null, which would use the default store 
+     *                      of the Connectivity plugin
+     * @return  the ODA custom wizard, or null if no wizard is provided
+     * @throws OdaException if the specified profile is not found, or
+     *                      if the profile provider has not implemented 
+     *                      the expected ODA wizard
+     * @since DTP 1.6
+     */
+    public NewDataSourceWizard getNewDataSourceWizard( String profileInstanceId,
+                                                        File storageFile )
+        throws OdaException
+    {
+        IConnectionProfile profile =
+            OdaProfileExplorer.getInstance().getProfileById( profileInstanceId, storageFile );
+        if( profile == null )
+            throw new OdaException( new IllegalArgumentException( profileInstanceId ) );
+        
+        // ODA profiles use the odaDataSourceId as its profile identifier
+        String odaDataSourceId = profile.getProviderId();
+        return getNewDataSourceWizardByType( odaDataSourceId );
+    }
+    
+    /**
+     * Returns the ODA custom wizard provided by an
+     * ODA data source designer that implements the 
+     * connection profile extension point.
+     * @param odaDataSourceId   the ODA runtime data source element id
+     * @return  the ODA custom wizard, or null if no wizard is provided
+     * @throws OdaException if the profile provider has not implemented 
+     *                      the expected Oda wizard type
+     */
+    public NewDataSourceWizard getNewDataSourceWizardByType( String odaDataSourceId )
+        throws OdaException
+    {
+        assert( odaDataSourceId != null );
+        IWizard dataSourceWizard = null;
+        try
+        {
+            dataSourceWizard = ConnectionProfileManagerUI.getInstance().getNewWizard( odaDataSourceId );
+        }
+        catch( RuntimeException ex )
+        {
+            throw new OdaException( ex );
+        }
+        
+        if( dataSourceWizard == null )
+            return null;    // has not implemented a new data source wizard
+        
+        if( dataSourceWizard instanceof NewDataSourceWizard == false )
+            throw new OdaException( 
+                    Messages.bind( Messages.extension_mustInheritFromODAWizard, 
+                            dataSourceWizard.getClass().getName(),
+                            NewDataSourceWizard.class.getName() ));
+
+        return (NewDataSourceWizard) dataSourceWizard;       
+    }
+
+    /**
+     * Returns the ODA custom editor page provided by an
+     * ODA data source designer that adopts the DTP DSE
+     * framework and implements the 
+     * org.eclipse.ui.propertyPages extension point.
+     * @param odaDataSourceId   the ODA runtime data source element id
+     * @return  a DataSourceEditorPage extension, or null
+     *          if no match is found for the given page type 
+     * @throws OdaException
+     */
+    public DataSourceEditorPage getDataSourceEditorPage( String odaDataSourceId )
+        throws OdaException
+    {
+        IConfigurationElement pageElement =
+            UIManifestExplorer.getInstance().getPropertyPageElement( odaDataSourceId );
+        if( pageElement == null )
+            return null;    // did not implement the editor property page
+        
+        Object propPage = null;
+        try
+        {
+            propPage = pageElement.createExecutableExtension( "class" ); //$NON-NLS-1$
+        }
+        catch( CoreException ex )
+        {
+            throw new OdaException( ex );
+        }
+
+        if( ! ( propPage instanceof DataSourceEditorPage ) )
+            return null;    // the implemented property page is not an ODA extended page
+
+        String pageName = pageElement.getAttribute( "name" ); //$NON-NLS-1$
+        if( pageName == null || pageName.length() == 0 )
+            pageName = Messages.page_defaultDataSourceTitle;
+        ((DataSourceEditorPage) propPage).setTitle( pageName );
+
+        return (DataSourceEditorPage) propPage;
+    }
+    
+    /**
+     * Returns the ODA custom wizard provided by an
+     * ODA data set designer that implements the 
+     * oda data source ui extension point.
+     * @param odaDataSourceId
+     * @param dataSetElement
+     * @return
+     * @throws OdaException
+     */
+    public DataSetWizard getDataSetWizard( String odaDataSourceId,
+                            DataSetUIElement dataSetElement )
+        throws OdaException
+    {
+        DataSetWizardInfo wizardInfo = dataSetElement.getWizardInfo();
+        if( wizardInfo == null )
+        {
+            // use default wizard base class
+            return new DataSetWizard();
+        }
+
+        // instantiate specified wizard class
+        Object wizardInstance = null;
+        try
+        {
+            IConfigurationElement wizardElement =
+                DataSetUIElement.getWizardElement( dataSetElement.getElement() );
+            wizardInstance = wizardElement.createExecutableExtension( 
+                    DataSetWizardInfo.CLASS_ATTRIBUTE );
+        }
+        catch( CoreException ex )
+        {
+            throw new OdaException( ex );
+        }
+        
+        if( ! ( wizardInstance instanceof DataSetWizard ))
+        {
+            throw new OdaException( 
+                    Messages.bind( Messages.extension_mustInheritFromODAWizard, 
+                            wizardInfo.getClassName(),
+                            DataSetWizard.class.getName() )); 
+        }
+        
+        // a valid wizard, subclass of DataSetWizard
+        String wizardTitle = wizardInfo.getWindowTitle();
+        if( wizardTitle != null && wizardTitle.length() > 0 )
+            (( DataSetWizard ) wizardInstance ).setWindowTitle( wizardTitle );
+
+        return ( DataSetWizard ) wizardInstance;   
+    }
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/preferences/OpenDataAccessPage.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/preferences/OpenDataAccessPage.java
new file mode 100644
index 0000000..aaa00e5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/preferences/OpenDataAccessPage.java
@@ -0,0 +1,76 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  Sybase, Inc. - implemented initial page contents
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.ui.preferences;
+
+import org.eclipse.datatools.connectivity.oda.design.ui.nls.Messages;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+/**
+ * Preference page for the Open Data Access framework.
+ */
+public class OpenDataAccessPage extends PreferencePage implements
+        IWorkbenchPreferencePage
+{
+
+    public OpenDataAccessPage()
+    {
+        super();
+        noDefaultAndApplyButton();
+    }
+
+    public OpenDataAccessPage( String title )
+    {
+        super( title );
+    }
+
+    public OpenDataAccessPage( String title, ImageDescriptor image )
+    {
+        super( title, image );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
+     */
+    protected Control createContents( Composite parent )
+    {
+		Composite comp = new Composite( parent, SWT.NONE );
+		GridLayout layout = new GridLayout();
+		layout.marginWidth = 0;
+		comp.setLayout( layout );
+
+		Label descLabel = new Label( comp, SWT.NONE );
+		descLabel.setText( Messages.preferencesPage_openDataAccessDescription );
+
+		return comp;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
+     */
+    public void init( IWorkbench workbench )
+    {
+        // do nothing
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/CreateProfileStoreAction.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/CreateProfileStoreAction.java
new file mode 100644
index 0000000..e929bc3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/CreateProfileStoreAction.java
@@ -0,0 +1,71 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.ui.profile;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.ExportProfilesDialog;
+import org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers;
+import org.eclipse.datatools.connectivity.ui.actions.ExportProfileViewAction;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ *  Internal action class to handle the dialog that creates a new profile store 
+ *  for selected connection profile(s). 
+ */
+public class CreateProfileStoreAction extends ExportProfileViewAction
+{
+    private ProfileStoreCreationDialog m_dialog;
+    private IConnectionProfile m_preSelectProfile;
+    private ResourceIdentifiers m_resourceIdentifiers;
+    
+    public CreateProfileStoreAction( Shell dialogShell, ResourceIdentifiers resourceIdentifiers )
+    {
+        super();
+        m_resourceIdentifiers = resourceIdentifiers;
+        init( dialogShell );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.ui.actions.ExportProfileViewAction#createExportProfilesDialog(org.eclipse.swt.widgets.Shell)
+     * @override base method
+     */
+    protected ExportProfilesDialog createExportProfilesDialog( Shell parentShell )
+    {
+        m_dialog = new ProfileStoreCreationDialog( parentShell );
+        m_dialog.setPreSelectedProfile( m_preSelectProfile );
+        m_dialog.setBlockOnOpen( true );
+        m_dialog.setHostResourceIdentifiers( m_resourceIdentifiers );
+        return m_dialog;
+    }
+    
+    public ProfileStoreCreationDialog getProfileStoreCreationDialog()
+    {
+        return m_dialog;
+    }
+    
+    /**
+     * Specifies the connection profile element to pre-select by default
+     * in this action's dialog.  
+     * This method can be called before running this action.
+     * @param profile  the profile element to pre-select in the action's dialog; 
+     *                 may be null to unset before running the action
+     */
+    public void setPreSelectedProfile( IConnectionProfile profile )
+    {
+        // hold on to profile to pre-select when the dialog is created
+        m_preSelectProfile = profile;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/ProfileSelection.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/ProfileSelection.java
new file mode 100644
index 0000000..ed44c48
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/ProfileSelection.java
@@ -0,0 +1,67 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.ui.profile;
+
+import org.eclipse.datatools.connectivity.oda.design.internal.designsession.DataSourceDesignSessionBase.ProfileReferenceBase;
+
+/**
+ * An internal class that represents a selected connection profile instance 
+ * collected from one of the Profile Selection wizard or editor pages.
+ * For internal use only.
+ * @since   3.0.4
+ */
+class ProfileSelection
+{
+    private String m_odaDataSourceId;
+    private String m_dataSourceDesignName;
+    private ProfileReferenceBase m_profileRef;
+    
+    ProfileSelection( String odaDataSourceId,
+                                String newDataSourceName,
+                                ProfileReferenceBase profileRef )
+    {
+        m_odaDataSourceId = odaDataSourceId;
+        if( newDataSourceName == null )
+            newDataSourceName = ""; //$NON-NLS-1$
+        m_dataSourceDesignName = newDataSourceName;
+        m_profileRef = profileRef;
+    }
+
+    /**
+     * Returns the odaDataSourceId of the selected profile instance.
+     * @return 
+     */
+    String getOdaDataSourceId()
+    {
+        return m_odaDataSourceId;
+    }
+
+    /**
+     * Returns the dataSourceDesignName collected from profile page.
+     */
+    String getDataSourceDesignName()
+    {
+        return m_dataSourceDesignName;
+    }
+
+    /**
+     * Returns the reference to the selected profile instance.
+     */
+    ProfileReferenceBase getProfileRef()
+    {
+        return m_profileRef;
+    }
+    
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/ProfileSelectionEditorPage.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/ProfileSelectionEditorPage.java
new file mode 100644
index 0000000..2a1e387
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/ProfileSelectionEditorPage.java
@@ -0,0 +1,291 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007, 2013 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.ui.profile;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.OdaDesignSession;
+import org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers;
+import org.eclipse.datatools.connectivity.oda.design.SessionStatus;
+import org.eclipse.datatools.connectivity.oda.design.internal.designsession.DesignerLogger;
+import org.eclipse.datatools.connectivity.oda.design.internal.designsession.DataSourceDesignSessionBase.ProfileReferenceBase;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.AdaptableDataSourceProfile;
+import org.eclipse.datatools.connectivity.oda.design.ui.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSourceEditorPage;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ *  Internal ODA connection profile editor page for users to update selection 
+ *  of a connection profile used in a data source design.
+ *  Edits are limited to selection of profile instances from the same 
+ *  ODA data source type specified in the existing data source design.
+ *  No edits to the data source design name are allowed.
+ *  For use by internal packages only.
+ * @since   3.0.4
+ */
+public class ProfileSelectionEditorPage extends DataSourceEditorPage
+{
+    private ProfileSelection m_initProfileSelection;
+    private ProfileSelectionPageHelper m_pageHelper;
+    private IUpdateDesignTask m_updateDesignTask;
+
+    // logging variable
+    private static final String sm_className = ProfileSelectionEditorPage.class.getName();
+
+    public ProfileSelectionEditorPage()
+    {
+        setMessage( Messages.profilePage_pageTitle );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSourceEditorPage#createAndInitCustomControl(org.eclipse.swt.widgets.Composite, java.util.Properties)
+     */
+    protected void createAndInitCustomControl( Composite parent,
+            Properties profileProps )
+    {
+        if( m_pageHelper == null )
+            m_pageHelper = new ProfileSelectionPageHelper( this );
+        
+        m_pageHelper.createControl( parent );
+        m_pageHelper.initControl( getInitializeProfileSelection() ); 
+
+        setPingButtonVisible( false );  
+
+        if( ! isEditableSessionRequested() )
+            getControl().setEnabled( false );
+    }
+    
+    /**
+     * Check whether the page has an invalid state in its content.
+     * This is separate from the {@link #isValid()} state of the page.
+     * One may proceed with saving this state, which will lead to automatic removal of the invalid content. 
+     * @return  true if this page has a valid content; false otherwise
+     */
+    public boolean hasValidContent()
+    {    
+        AdaptableDataSourceProfile adaptableProfile = getProfileElement();
+        if( adaptableProfile == null )
+            return true;     // nothing to check
+        
+        // Check if the profile referenced by the editing data source design, if any, is not found,
+        // or if the referenced profile store file does not exist
+        if( getEditingDataSource().hasLinkToProfile() )
+        {
+            if( ! adaptableProfile.hasLinkedProfile() || 
+                getEditingDataSource().getLinkedProfileStoreFile() == null )
+            {
+                return false;
+            }
+        }
+        
+        return true;
+    }
+    
+    /**
+     * Returns the ProfileSelection object that represents the initialized
+     * value of the data source design.  This method is expected to get called
+     * prior to any user edits.
+     * @return
+     */
+    private ProfileSelection getInitializeProfileSelection()
+    {
+        if( m_initProfileSelection == null )
+        {
+            DataSourceDesign design = getEditingDataSource();
+            m_initProfileSelection =
+                new ProfileSelection(
+                        design.getOdaExtensionDataSourceId(),
+                        design.getName(),
+                        createProfileRef( design ) );
+        }
+        return m_initProfileSelection;
+    }
+    
+    /**
+     * Creates a ProfileReferenceBase object based on the
+     * linked connection profile definition, if any, in the specified design.
+     */
+    private ProfileReferenceBase createProfileRef( DataSourceDesign design )
+    {
+        String profileInstanceName = design.getLinkedProfileName();
+        if( profileInstanceName == null || profileInstanceName.length() == 0 )
+            return null;    // no linked profile info
+        
+        return new ProfileReferenceBase( profileInstanceName,
+                    design.getLinkedProfileStoreFilePath(),
+                    true,
+                    design.getHostResourceIdentifiers() );       
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.dialogs.DialogPage#getTitle()
+     */
+    public String getTitle()
+    {
+        return Messages.profilePage_pageLabel;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.ui.DataSourceEditorPageCore#getEditSessionResponse()
+     */
+    public OdaDesignSession getEditSessionResponse() throws OdaException
+    {
+        OdaDesignSession responseSession = super.getEditSessionResponse();
+        assert( responseSession.getResponse() != null );
+        
+        // super might not haved called collectDataSourceDesign if a session response 
+        // already exists from another editor page; force the call to
+        // update response's dataSourceDesign with the latest linked profile definition
+        if( responseSession.getResponse().getSessionStatus() == SessionStatus.OK_LITERAL )
+            collectDataSourceDesign( 
+                responseSession.getResponseDataSourceDesign() ); 
+
+        return responseSession;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSourceEditorPage#collectDataSourceDesign(org.eclipse.datatools.connectivity.oda.design.DataSourceDesign)
+     */
+    protected DataSourceDesign collectDataSourceDesign( DataSourceDesign design )
+    {
+        if( m_pageHelper == null )
+            return design;  // page control is not created yet, no changes to design
+        
+        ProfileReferenceBase profileRef = collectEditedProfileRef();       
+        if( profileRef != null )
+        {
+            // no delegation is specified, perform default update task
+            if( m_updateDesignTask == null ) 
+            {
+                design = super.collectDataSourceDesign( design );
+            }
+            else    // the update task is delegated, use it to perform collectDataSourceDesign
+            {
+                try
+                {
+                    design = m_updateDesignTask.collectDataSourceDesign( design, this, 
+                                        profileRef.getProfileInstance() );
+                }
+                catch( OdaException ex )
+                {
+                    // log warning about exception
+                    DesignerLogger logger = DesignerLogger.getInstance();
+                    logger.warning( sm_className, "collectDataSourceDesign( DataSourceDesign )",  //$NON-NLS-1$
+                            "Caught exception thrown by delegated collectDataSourceDesign task.", ex ); //$NON-NLS-1$
+                }
+            }
+        }
+        
+        // adds attributes of linked profile, if specified, to the data source design; 
+        // ignores any data source design name change
+        if( profileRef != null && profileRef.maintainExternalLink() )
+        {
+            design.setLinkedProfileName( profileRef.getName() );
+            design.setLinkedProfileStoreFilePath( profileRef.getStorageFilePathPropertyValue() );
+        }
+        else
+        {
+            design.setLinkedProfileName( null );
+            design.setLinkedProfileStoreFile( null );
+        }
+        return design; 
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSourceEditorPage#collectCustomProperties(java.util.Properties)
+     */
+    public Properties collectCustomProperties( Properties candidateProps )
+    {
+        ProfileReferenceBase profileRef = collectEditedProfileRef();
+        if( profileRef == null )
+            return candidateProps;  // has no changes
+        
+        // return latest selected profile's properties, 
+        // regardless of whether an external link is maintained;
+        // the external link will be used later to determine whether to
+        // apply these profile properties
+        Properties selectedProfileProps =
+            profileRef.getProfileInstance().getBaseProperties();
+        return selectedProfileProps;
+    }
+    
+    /**
+     * Edits only accept changes in the selection of a profile instance.
+     * This is thus only interested in collecting the profile reference info.
+     */
+    private ProfileReferenceBase collectEditedProfileRef()
+    {
+        if( m_pageHelper == null )
+            return null;
+
+        ProfileSelection selectedProfile = m_pageHelper.collectProfileSelection();
+        if( selectedProfile == null )
+            return null;        
+        return selectedProfile.getProfileRef();        
+    }
+    
+    public boolean requiresExternalProfileLink()
+    {
+        if( m_pageHelper == null )
+            return false;
+        return m_pageHelper.requiresExternalProfileLink();
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.ui.DataSourceEditorPageCore#getHostResourceIdentifiers()
+     */
+    protected ResourceIdentifiers getHostResourceIdentifiers()
+    {
+        // exposes visibility to the page helper
+        return super.getHostResourceIdentifiers();        
+    }     
+    
+    /**
+     * Assigns the delegated task to perform collectDataSourceDesign and update the data source design.
+     * @param task	the delegated task; may be null to unset the delegation
+     * @since DTP 1.6
+     */
+    public void delegatesTask( IUpdateDesignTask task )
+    {
+        m_updateDesignTask = task;
+    }
+    
+    /**
+     * Delegation of the page's task to update a data source design.
+     * @since DTP 1.6
+     */
+    public interface IUpdateDesignTask
+    {
+        /**
+         * The delegated operation to update the specified data source design with 
+         * the selected connection profile's design properties.
+         * @param design                the data source design to update from
+         * @param delegator             this ProfileSelectionEditorPage that delegates the task
+         * @param selectedConnProfile   the currently selected connection profile instance
+         * @return  the updated data source design
+         * @throws OdaException
+         */
+        public DataSourceDesign collectDataSourceDesign( DataSourceDesign design, 
+                                        final ProfileSelectionEditorPage delegator,
+                                        final IConnectionProfile selectedConnProfile )
+            throws OdaException;
+
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/ProfileSelectionPageHelper.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/ProfileSelectionPageHelper.java
new file mode 100644
index 0000000..1e35649
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/ProfileSelectionPageHelper.java
@@ -0,0 +1,1319 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007, 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.ui.profile;
+
+import java.io.File;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import org.eclipse.core.runtime.Path;
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers;
+import org.eclipse.datatools.connectivity.oda.design.internal.designsession.DataSourceDesignSessionBase.IDesignNameValidatorBase;
+import org.eclipse.datatools.connectivity.oda.design.internal.designsession.DataSourceDesignSessionBase.ProfileReferenceBase;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.browse.IBrowseButtonHost;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.browse.IMenuButtonProvider;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.browse.MenuButtonProvider;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.browse.ProfileStoreBrowseButton;
+import org.eclipse.datatools.connectivity.oda.design.ui.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.design.ui.nls.TextProcessorWrapper;
+import org.eclipse.datatools.connectivity.oda.design.util.DesignUtil;
+import org.eclipse.datatools.connectivity.oda.profile.Constants;
+import org.eclipse.datatools.connectivity.oda.profile.OdaProfileExplorer;
+import org.eclipse.datatools.connectivity.oda.profile.internal.ProfileCategoryUtil;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ExtensionManifest;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ManifestExplorer;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ManifestExplorer.Filter;
+import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.BusyIndicator;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.dialogs.PropertyPage;
+
+/**
+ * Internal UI helper that provides the UI controls and behavior for 
+ * both the wizard page and editor page for selecting 
+ * a connection profile instance.
+ * @since   3.0.4
+ */
+class ProfileSelectionPageHelper implements IBrowseButtonHost
+{
+    private static final String EMPTY_STRING = ""; //$NON-NLS-1$
+    private static final String CONTEXT_ID_CONNECTIONPROFILE = 
+        "org.eclipse.datatools.oda.cshelp.Wizard_ConnectionProfile_ID";//$NON-NLS-1$
+    private static final String DISABLE_AUTO_SELECT_ITEM = "DisableAutoSelect"; //$NON-NLS-1$
+
+    private static final int TREE_ITEM_STYLE = SWT.NONE;
+    private static final int BUTTON_MIN_WIDTH = 80;
+    
+    private WizardPage m_wizardPage;
+    private PreferencePage m_propertyPage;
+
+    private transient Label m_dataSourceNameLabel = null;
+    private transient Text m_connectionProfilePath = null;
+    private transient Text m_dataSourceDesignNameControl = null;
+    private transient Button m_linkRefCheckBox = null;
+    private transient String m_profileID;
+    private transient String m_odaDataSourceID;
+    private transient Button m_useDefaultDSNameCheckBox = null;
+    private transient ProfileStoreBrowseButton m_browseButton = null;
+    private transient Tree m_odaDataSourceTree = null;
+    private transient String m_treeFilter;
+    private transient SortedSet<OdaProfileCategoryInfo> m_dataSourceIDs = null;
+    private transient IDesignNameValidatorBase m_designNameValidator;
+	private transient HashMap<String, String> m_deprecatedDataSourceMap = 
+	    new HashMap<String, String>(); // key= deprecated odaDataSourceId; value= replacing odaDataSourceId
+    
+    private String m_dataSourceDesignName = EMPTY_STRING;
+    private ResourceIdentifiers m_hostResourceIdentifiers = null;
+
+    ProfileSelectionPageHelper( WizardPage page )
+    {
+        m_wizardPage = page;
+    }
+    
+    ProfileSelectionPageHelper( PropertyPage page )
+    {
+        m_propertyPage = page;
+    }
+    
+    Control createControl( Composite parent )
+    {
+        Composite container = new Composite( parent, SWT.NONE );
+        GridLayout layout = new GridLayout( );
+        layout.numColumns = 3;
+        container.setLayout( layout );
+
+        setupConnectionProfilePath( container );
+        setupLinkCheckBox( container );
+        setupTreeViewer( container );
+        setupDataSourceName( container );
+        
+        PlatformUI.getWorkbench().getHelpSystem()
+            .setHelp( container, CONTEXT_ID_CONNECTIONPROFILE );
+
+        return container;
+    }
+    
+    void initControl( ProfileSelection selectedProfile )
+    {
+        if( selectedProfile == null )
+            return;     // nothing to initialize        
+
+        // limits profile tree to include the selected oda data source type
+        m_treeFilter = selectedProfile.getOdaDataSourceId();
+
+        boolean hasInvalidProfileRef = false;
+        ProfileReferenceBase profileRef = selectedProfile.getProfileRef();
+        if( profileRef != null )
+        {       
+            String profileStorePath = profileRef.getStorageFilePathPropertyValue();
+            if( profileStorePath != null )
+            {
+                // triggers tree population; disable auto item selection
+                setConnProfilePathControlText( profileStorePath, true );
+                
+                TreeItem profileItem = 
+                    findProfileInTree( selectedProfile.getOdaDataSourceId(),
+                                        profileRef.getInstanceId() );
+                if( profileItem != null )
+                {
+                    assert( m_odaDataSourceTree != null );
+                    m_odaDataSourceTree.setSelection( profileItem );
+                    m_odaDataSourceTree.showSelection();
+
+                    m_useDefaultDSNameCheckBox.setSelection( 
+                            profileItem.getText().equals( 
+                                selectedProfile.getDataSourceDesignName() ) );
+                    m_profileID = profileItem.getData().toString();
+                    m_odaDataSourceID = getProfileItemDataSourceId( profileItem );
+                    setExternalLinkOption( m_odaDataSourceID );
+                    setPageComplete( true );
+                }
+                else // did not find matching linked profile in profile tree
+                    hasInvalidProfileRef = true;
+            }
+            
+            m_linkRefCheckBox.setSelection( profileRef.maintainExternalLink() ); 
+        }
+        
+        // initializes the designName variable first, which is checked 
+        // by the name control's modify listener
+        m_dataSourceDesignName = selectedProfile.getDataSourceDesignName();
+        m_dataSourceDesignNameControl.setText( m_dataSourceDesignName );
+        
+        // when editing an existing data source design
+        if( inEditMode() )
+        {
+            // hide controls to disallow user from changing the design name
+            setDataSourceNameEditorVisible( false );
+            
+            // editing a design with invalid profile reference, set error message;
+            // this is done last so the message won't be overwritten by controls' event handler
+            if( profileRef != null && hasInvalidProfileRef )
+            {
+                String errorMessage = profileRef.getStorageFile() == null ?
+                    Messages.profilePage_error_invalidProfileStorePath :
+                    Messages.bind( Messages.designSession_invalidProfileName, profileRef.getName() );
+                setMessage( errorMessage, IMessageProvider.ERROR );
+            }
+        }
+    }
+    
+    /**
+     * Set the call-back validator provided by an ODA host, for validation of
+     * the data source design named collected in the UI control.
+     */
+    void setDesignNameValidator( IDesignNameValidatorBase validator )
+    {
+        m_designNameValidator = validator;
+    }
+    
+    /**
+     * Collects the current selection of connection profile instance.
+     * @return  the current selection if no error is found;
+     *          null otherwise
+     */
+    ProfileSelection collectProfileSelection()
+    {
+        if( ! hasSelectedProfile() || ! isPageComplete() )
+            return null;
+
+        String profileStorePathText = getConnProfilePathControlText();
+        String resolvedProfileStorePath = resolveProfileStorePath( profileStorePathText );
+        boolean isProfileStorePathRelative = false;     // default behavior
+        if( resolvedProfileStorePath != null &&
+            ! resolvedProfileStorePath.equals( profileStorePathText ) ) // was resolved from relative path
+            isProfileStorePathRelative = true;
+        
+        File profileStoreFile = new Path( resolvedProfileStorePath ).toFile( );
+
+        return new ProfileSelection(
+                m_odaDataSourceID,
+                m_dataSourceDesignName,
+                new ProfileReferenceBase( m_profileID,
+                        profileStoreFile,
+                        m_linkRefCheckBox.getSelection(),
+                        DesignUtil.convertFileToResourcePath( profileStoreFile, 
+                                m_hostResourceIdentifiers, 
+                                isProfileStorePathRelative ) )) ;      
+     }
+    
+    private boolean isPageComplete()
+    {
+        boolean isPageComplete = true;
+        if ( m_wizardPage != null )
+            isPageComplete = m_wizardPage.isPageComplete();
+        else if ( m_propertyPage != null )
+            isPageComplete = m_propertyPage.isValid();
+        else
+            isPageComplete = ( getMessageType() != IMessageProvider.ERROR );
+        
+        if( ! isPageComplete )      // page itself is not complete
+            return isPageComplete;  // no need to do extra checking
+        
+        // the page itself considers itself complete, next 
+        // check if external reference is selected, must have a selected profile
+        if( m_linkRefCheckBox != null && m_linkRefCheckBox.getSelection() )
+            isPageComplete = hasSelectedProfile();
+        
+        return isPageComplete;
+    }
+    
+    private void setPageComplete( boolean complete )
+    {
+        if( m_wizardPage != null )
+            m_wizardPage.setPageComplete( complete );
+        else if( m_propertyPage != null )
+            m_propertyPage.setValid( complete );
+        
+        if( complete )
+            setMessage( EMPTY_STRING, IMessageProvider.NONE );
+        else
+            setDefaultMessageAsError( true );
+    }
+
+    private void setMessage( String newMessage, int newType )
+    {
+        if( m_wizardPage != null )
+            m_wizardPage.setMessage( newMessage, newType );
+        else if( m_propertyPage != null )
+        {
+            // use default title instead of leaving the message area empty
+            if( newMessage.length() == 0 && newType == IMessageProvider.NONE )
+                newMessage = Messages.profilePage_pageTitle;    
+            m_propertyPage.setMessage( newMessage, newType );
+        }
+    }
+
+    private void setDefaultMessageAsError( boolean isError )
+    {
+        int newType = isError ? IMessageProvider.ERROR : IMessageProvider.NONE;
+        setMessage( Messages.profilePage_selectProfileDefaultMessage, newType );
+    }
+    
+    int getMessageType()
+    {
+        if( m_wizardPage != null )
+            return m_wizardPage.getMessageType();
+        if( m_propertyPage != null )
+            return m_propertyPage.getMessageType();       
+        return IMessageProvider.NONE;        
+    }
+
+    private Shell getShell()
+    {
+        if( m_wizardPage != null )
+            return m_wizardPage.getShell();
+        assert( m_propertyPage != null );
+        return m_propertyPage.getShell();
+    }
+    
+    private void setupConnectionProfilePath( Composite composite )
+    {
+        Label label = new Label( composite, SWT.NONE );
+        label.setText( Messages.profilePage_label_profileStore );
+        label.setLayoutData( new GridData( GridData.HORIZONTAL_ALIGN_BEGINNING ) );
+
+        m_connectionProfilePath = new Text( composite, SWT.BORDER );
+        GridData layoutData = new GridData( GridData.FILL_HORIZONTAL );
+        layoutData.widthHint = 260;
+        m_connectionProfilePath.setLayoutData( layoutData );
+        m_connectionProfilePath.addModifyListener( new ModifyListener( ) 
+        {
+            public void modifyText( ModifyEvent e )
+            {
+                BusyIndicator.showWhile( getShell( ) == null ? null
+                        : getShell( ).getDisplay( ), new Runnable( ) {
+
+                    public void run( )
+                    {
+                       populateTree( );
+                       setExternalLinkDefaultState(); 
+                       
+                       // clear any previously selected profile settings
+                       clearSelectedProfile();
+                       setSelectedDataSourceName( EMPTY_STRING );
+                       setDefaultMessageAsError( hasConnectionProfilePath() );
+
+                       if( hasConnectionProfilePath() && ! new Path( getResolvedConnProfilePathControlText() ).toFile().exists() )
+                           setMessage( Messages.profilePage_error_invalidProfileStorePath, IMessageProvider.ERROR );
+
+                       // check if profile tree has only one profile item, 
+                       // automatically select it if feature is not disabled
+                       if( hasConnectionProfilePath() &&
+                           m_connectionProfilePath.getData( DISABLE_AUTO_SELECT_ITEM ) != Boolean.TRUE )    
+                       {
+                           TreeItem singleProfileItem = findSingleProfileInTree();
+                           if( singleProfileItem != null )
+                           {
+                               m_odaDataSourceTree.setSelection( singleProfileItem );
+                               handleTreeSelection();
+                           }
+                       }
+                    }
+                } );
+            }
+        } );
+
+        // Browse... button
+        IMenuButtonProvider provider = new MenuButtonProvider( false );
+        m_browseButton = new ProfileStoreBrowseButton( composite,
+                SWT.PUSH,
+                provider,
+                this );
+        GridData data = new GridData();
+        data.widthHint = m_browseButton.computeButtonWidth( );
+        m_browseButton.setLayoutData(data);
+
+        if( m_wizardPage != null && m_wizardPage instanceof ProfileSelectionWizardPage )
+        {
+            m_hostResourceIdentifiers = ((ProfileSelectionWizardPage)m_wizardPage).getHostResourceIdentifiers();            
+        }
+        if( m_propertyPage != null && m_propertyPage instanceof ProfileSelectionEditorPage )
+        {
+            m_hostResourceIdentifiers = ((ProfileSelectionEditorPage)m_propertyPage).getHostResourceIdentifiers();
+        }
+        if( m_hostResourceIdentifiers != null )
+        {
+            File resourceBase = new File(m_hostResourceIdentifiers.getApplResourceBaseURI( ));
+            m_browseButton.getMenuButtonProvider( ).setProperty( RESOURCE_FILE_DIR, resourceBase );
+        }
+        m_browseButton.getMenuButtonProvider( ).setProperty( IS_CREATE_PROFILE, Boolean.FALSE );
+
+        m_browseButton.refreshMenuItems( );
+        
+        // New... button
+        createNewProfileStoreButton( composite );
+    }
+
+    private Button createNewProfileStoreButton( Composite parent )
+    {
+        Button newButton = new Button( parent, SWT.PUSH );
+        newButton.setText( Messages.profilePage_button_new );
+        {
+            GridData data = new GridData();
+            data.horizontalSpan = 3;
+            data.horizontalAlignment = SWT.RIGHT;
+		    data.widthHint = computeButtonWidth( newButton );
+            newButton.setLayoutData( data );
+        }
+        
+        newButton.addSelectionListener( new SelectionAdapter() 
+        {
+            public void widgetSelected( SelectionEvent e )
+            {
+                handleNewProfileStore();
+            }
+            
+            private void handleNewProfileStore()
+            {
+                CreateProfileStoreAction createAction = 
+                    new CreateProfileStoreAction( getShell(), m_hostResourceIdentifiers );
+                createAction.run();
+                if( createAction.isCompleted() )
+                {
+                    // copy the newly created profile store file path
+                    ProfileStoreCreationDialog dlg = createAction.getProfileStoreCreationDialog();
+                    if( dlg != null && dlg.getFile() != null )
+                    {
+                        String profileStoreTextPath =
+                            DesignUtil.convertFileToResourcePath( dlg.getFile(), 
+                                m_hostResourceIdentifiers, 
+                                dlg.isProfileStorePathRelative() );   
+                        setConnProfilePathControlText( profileStoreTextPath, false );
+                    }                            
+                }
+            }
+        } );
+        
+        return newButton;
+    }
+
+    /**
+     * Setup TreeViewer layout
+     */
+    private void setupTreeViewer( Composite composite )
+    {
+        m_odaDataSourceTree = new Tree( composite, SWT.BORDER
+                | SWT.SINGLE | SWT.V_SCROLL );
+        m_odaDataSourceTree.setLayout( new GridLayout( ) );
+        GridData layoutData = new GridData( GridData.FILL_BOTH );
+        layoutData.horizontalSpan = 3;
+        m_odaDataSourceTree.setLayoutData( layoutData );
+
+        m_odaDataSourceTree.addSelectionListener( new SelectionAdapter( ) 
+        {
+            public void widgetSelected( SelectionEvent event )
+            {
+                handleTreeSelection( );
+            }
+        } );
+
+        populateTree( );
+    }
+
+    private void handleTreeSelection( )
+    {
+        TreeItem item = getSelectedProfileItem();
+
+        if( item == null )
+        {
+            clearSelectedProfile();
+            setSelectedDataSourceName( EMPTY_STRING );
+            setExternalLinkOption( null );
+            setDefaultMessageAsError( true );
+        }
+        else
+        {
+            m_profileID = item.getData().toString();
+            m_odaDataSourceID = getProfileItemDataSourceId( item );
+            setSelectedDataSourceName( item.getText() );
+            setExternalLinkOption( m_odaDataSourceID );
+
+            if( getMessageType() == IMessageProvider.NONE ) // no current error
+                setDefaultMessageAsError( false );
+        }
+    }
+
+    private String getProfileItemDataSourceId( TreeItem item )
+    {
+        return getActiveDataSourceId( item.getParentItem().getData().toString() );
+    }
+    
+    private void setSelectedDataSourceName( String name )
+    {
+        if( m_dataSourceDesignNameControl == null )
+            return;     // nothing to set
+        
+        String trimmedName = name.trim();
+        m_dataSourceDesignNameControl.setText( trimmedName );   
+        // setText triggers its modifyListener to update data source design name if appropriate
+    }
+
+    /**
+     * For use by the tree viewer selection listener to trigger setting 
+     * the external link checkbox, based on the selected profile's oda category
+     */
+    private void setExternalLinkOption( String odaDataSourceId )
+    {         
+        boolean isExternalLinkOptional = isExternalLinkOptional( odaDataSourceId );
+                                            
+        // set the external link control accordingly
+        setExternalLinkOptionControl( isExternalLinkOptional );
+    }
+    
+    private boolean isExternalLinkOptional( String odaDataSourceId )
+    {
+        // by default, if no category is specified, it is optional to maintain an external link 
+        OdaProfileCategoryInfo categoryInfo = getOdaProfileCategoryInfo( odaDataSourceId );
+        return ( categoryInfo != null ) ? categoryInfo.isExternalLinkOptional() : true;
+    }
+    
+    boolean requiresExternalProfileLink()
+    {
+        if( ! hasSelectedProfile() )
+            return false;   // no selected profile to link
+        return ! isExternalLinkOptional( m_odaDataSourceID );
+    }
+    
+    private boolean hasSelectedProfile()
+    {
+        return ( m_profileID != null && m_odaDataSourceID != null );
+    }
+    
+    private void clearSelectedProfile()
+    {
+        m_profileID = null;
+        m_odaDataSourceID = null;
+    }
+    
+    /**
+     * Updates the data source design name only if creating a new design.
+     */
+    private void setDataSourceDesignName( String name )
+    {
+        /* when editing an existing data source design, 
+         * do not allow to change the design name from this page
+         */
+        if( inEditMode() )
+            return;
+        
+        // updates design name only when creating a new design
+        assert( name != null );
+        m_dataSourceDesignName = name.trim();
+    }
+
+    /**
+     * Populate the connection profile instances in the tree viewer
+     */
+    private void populateTree( )
+    {
+        resetTreeViewer();
+        if( ! hasConnectionProfilePath() )
+            return;     // done, nothing to populate
+
+        // populate tree with ODA extensions' profile instances
+
+        OdaProfileExplorer.getInstance().refresh(); // reset cached profiles in instance
+        
+        // iterate thru each type of applicable ODA data source categories
+        SortedSet<OdaProfileCategoryInfo> odaCategoryInfoSet = getOdaCategoryInfoSet();
+        TreeItem odaRoot = null;
+        for( OdaProfileCategoryInfo categoryInfo : odaCategoryInfoSet )
+        {
+            TreeItem categoryItem = 
+                createCategoryTreeItems( m_odaDataSourceTree, odaRoot, categoryInfo  );
+            
+            if( categoryItem != null )
+            {
+                if( odaRoot == null && categoryInfo.hasOdaParentCategory() )
+                    odaRoot = categoryItem.getParentItem();   // reuse same parent item for next ODA category
+                categoryItem.setExpanded( true );
+                m_odaDataSourceTree.showItem( categoryItem ); // scroll to the latest category
+            }
+        }
+        
+        // if the specified profile store file has no profile instances at all,
+        // create an empty ODA root item in the tree for UI visibility
+        if( m_odaDataSourceTree.getItemCount() == 0 )
+            createOdaRootItem( m_odaDataSourceTree );
+    }
+    
+    /**
+     * Reset TreeViwewer layout
+     */
+    private void resetTreeViewer( )
+    {
+        if( m_odaDataSourceTree != null )
+            m_odaDataSourceTree.removeAll( );
+    }
+    
+    /**
+     * Returns the current selected tree item that represents a 
+     * connection profile instance.
+     * @return  selected profile tree item; or null if no selection
+     *          is made, or the selected item is not a profile item
+     */
+    private TreeItem getSelectedProfileItem()
+    {
+        TreeItem[] items = m_odaDataSourceTree.getSelection();
+        if( items.length == 0 )
+            return null;
+        
+        TreeItem item = items[0];
+        if( item.getParentItem( ) == null || 
+            item.getItemCount() > 0 )
+            return null;    // selected item is not a profile instance
+        
+        return item;
+    }
+    
+    /**
+     * Search and return the tree item that represents the specified profile
+     * instance based on its instanceId.
+     * The odaDataSourceId type is specified to optimize the search for
+     * matching tree branch. 
+     * @return  selected profile tree item; or null if no match is found
+     */
+    private TreeItem findProfileInTree( String odaDataSourceId, String profileId )
+    {
+        if( profileId == null )
+            return null;
+        
+        TreeItem dsCategory = findOdaCategoryInTree( odaDataSourceId );        
+        TreeItem profileItem = findProfileInCategoryItem( dsCategory, profileId );
+        if( profileItem != null )
+            return profileItem;
+
+        // not found in own category;
+        // try to find under the deprecated odaDataSourceId(s) replaced by this odaDataSourceId 
+        Set<String> deprecatedIds = getDeprecatedDataSourceIds( odaDataSourceId );
+        for( String deprecatedId : deprecatedIds )
+        {
+            dsCategory = findOdaCategoryInTree( deprecatedId );
+            profileItem = findProfileInCategoryItem( dsCategory, profileId );
+            if( profileItem != null )
+                return profileItem;
+        }
+
+        // no match is found
+        return null;
+    }
+    
+    /**
+     * Find by profileId within the specified odaDataSourceId category
+     * @param dsCategory
+     * @param profileId
+     * @return
+     */
+    private TreeItem findProfileInCategoryItem( TreeItem dsCategory, String profileId )
+    {
+        if( dsCategory == null )
+            return null;    // specified oda data source category not in tree
+
+        TreeItem[] profileItems = dsCategory.getItems();
+        for( int i = 0; i < profileItems.length; i++ )
+        {
+            TreeItem profileItem = profileItems[i];
+            if( profileItem.getData().toString().equals( profileId ) )
+                return profileItem;
+        }
+        // no match is found
+        return null;
+    }
+
+    /**
+     * Search and return the tree item that represents the specified 
+     * odaDataSourceId type category.
+     * @return  selected oda category tree item; or null if no match is found
+     */
+    private TreeItem findOdaCategoryInTree( String odaDataSourceId )
+    {
+        if( m_odaDataSourceTree == null || odaDataSourceId == null )
+            return null;
+        
+        TreeItem[] topItems = m_odaDataSourceTree.getItems();
+        if( topItems.length == 0 )
+            return null;
+        
+        // assumes an oda category is at one of the top 2 levels in tree
+        for( int i = 0; i < topItems.length; i++ )
+        {
+            TreeItem topLevelItem = topItems[i];
+            if( isOdaCategoryItem( topLevelItem, odaDataSourceId ) )
+                return topLevelItem;
+            
+            TreeItem[] subCategories = topLevelItem.getItems();
+            for( int j = 0; j < subCategories.length; j++ )
+            {
+                TreeItem subCategory = subCategories[j];
+                if( isOdaCategoryItem( subCategory, odaDataSourceId ) )
+                    return subCategory;
+            }
+        }
+        
+        return null;        
+    }
+
+    private boolean isOdaCategoryItem( TreeItem item, String odaDataSourceId )
+    {
+        if( item.getItemCount() == 0 )
+            return false;   // not a category folder item
+        
+        if( item.getData() != null &&
+            item.getData().toString().equals( odaDataSourceId ) )
+            return true;
+        return false;
+    }
+    
+    private TreeItem findSingleProfileInTree()
+    {
+        if( m_odaDataSourceTree == null || m_odaDataSourceTree.getItemCount() != 1 ) // has none or more than one categories
+            return null;
+        TreeItem topLevelItem = m_odaDataSourceTree.getItems()[0];
+        if( topLevelItem.getItemCount() != 1 )  // has more than one child
+            return null;    // can't possibly have only single profile item
+
+        // has one child
+        TreeItem secondLevelItem = topLevelItem.getItems()[0];
+        if( secondLevelItem.getItemCount() > 1 )
+            return null;
+
+        if( secondLevelItem.getItemCount() == 0 )  // is a leaf node
+            return secondLevelItem;    // this is the single profile item
+
+        // has one third-level child
+        return secondLevelItem.getItems()[0];
+    }
+
+    private SortedSet<OdaProfileCategoryInfo> getOdaCategoryInfoSet()
+    {
+        if( m_dataSourceIDs == null )
+            m_dataSourceIDs = createOdaProfileCategoryInfoSet();
+        return m_dataSourceIDs;
+    }
+    
+    /**
+     * Creates and returns a filtered collection of OdaProfileCategoryInfo
+     * on ODA data source extensions found in the extensions registry,
+     * sorted by their category display names.
+     */
+    @SuppressWarnings("deprecation")
+    private SortedSet<OdaProfileCategoryInfo> createOdaProfileCategoryInfoSet()
+    {
+        Filter profileTypeFilter = ManifestExplorer.createFilter();
+        profileTypeFilter.setMissingDataSetTypesFilter( true );
+        profileTypeFilter.setDeprecatedFilter( false );
+        profileTypeFilter.setHideWrapper( false );
+        
+        ExtensionManifest[] odaManifests = ManifestExplorer.getInstance()
+                .getExtensionManifests( profileTypeFilter );
+
+        m_deprecatedDataSourceMap.clear();
+        TreeSet<OdaProfileCategoryInfo> sortedSet = new TreeSet<OdaProfileCategoryInfo>();
+        for( ExtensionManifest manifest : odaManifests )
+        {
+            String odaDataSourceId = manifest.getDataSourceElementID( );
+            String relatedDataSourceId = manifest.getRelatedDataSourceId();
+            if( manifest.isDeprecated() )
+            {
+            	m_deprecatedDataSourceMap.put( odaDataSourceId, relatedDataSourceId );
+            }
+
+			if( m_treeFilter != null &&
+				! m_treeFilter.equals( odaDataSourceId ) &&
+				! m_treeFilter.equals( relatedDataSourceId ) )
+				continue; // skip oda data source type not in filter
+                    
+            // sort the identifiers by their category display name
+           sortedSet.add( 
+                    new OdaProfileCategoryInfo( odaDataSourceId, manifest ) );
+        }
+
+        return sortedSet;
+    }
+    
+    private String getActiveDataSourceId( String odaDataSourceId )
+    {
+        return m_deprecatedDataSourceMap.containsKey( odaDataSourceId ) ? 
+                m_deprecatedDataSourceMap.get( odaDataSourceId ) :  // corresponding replacing odaDataSourceId
+                odaDataSourceId;
+    }
+    
+    private Set<String> getDeprecatedDataSourceIds( String odaDataSourceId )
+    {
+        if( ! m_deprecatedDataSourceMap.containsValue( odaDataSourceId ) )
+            return Collections.emptySet();
+
+        Set<String> deprecatedIds = new HashSet<String>();
+        for( Map.Entry<String,String> deprecatedEntry : m_deprecatedDataSourceMap.entrySet() )
+        {
+            if( deprecatedEntry.getValue().equals( odaDataSourceId ) )
+                deprecatedIds.add( deprecatedEntry.getKey() );
+            // TODO - handle nested deprecated extension ids
+        }
+        return deprecatedIds;
+    }
+    
+    private OdaProfileCategoryInfo getOdaProfileCategoryInfo( String odaDataSourceId )
+    {
+        if( odaDataSourceId == null )
+            return null;
+        
+        SortedSet<OdaProfileCategoryInfo> odaCategoryInfoSet = getOdaCategoryInfoSet();
+        for( OdaProfileCategoryInfo categoryInfo : odaCategoryInfoSet )
+        {
+            if( odaDataSourceId.equals( categoryInfo.getOdaDataSourceId() ))
+                return categoryInfo;
+        }
+        
+        return null;    // no match found
+    }
+    
+    private Map<String,String> getProfileIdentifiersByCategory( String categoryId )
+    {
+        try
+        {
+            return OdaProfileExplorer.getInstance().getProfileIdsAndNamesByCategory( 
+                    categoryId, 
+                    new Path( getResolvedConnProfilePathControlText() ).toFile( ) );
+        }
+        catch ( OdaException ex )
+        {
+            setMessage( Messages.profilePage_error_invalidProfileStorePath, IMessageProvider.ERROR );
+        }
+
+        return null;
+    }
+
+    private TreeItem createOdaRootItem( Tree parent )
+    {
+        TreeItem odaRoot = new TreeItem( parent, TREE_ITEM_STYLE );
+        odaRoot.setText( Messages.profilePage_odaTreeName );
+        return odaRoot;
+    }
+    
+    /**
+     * Create child tree items for the given ODA data source category.
+     */    
+    private TreeItem createCategoryTreeItems( Tree parent, TreeItem parentItem,
+            OdaProfileCategoryInfo categoryInfo ) 
+    {
+        String categoryId = categoryInfo.getEffectiveCategoryId();       
+        Map<String,String> profileIds = getProfileIdentifiersByCategory( categoryId );
+        // if no profile instances found under given category
+        if( profileIds == null || profileIds.isEmpty() )  
+            return null;             // done; no need to create a child tree item for category
+        
+        // create a tree item for the specified category
+        
+        // first determine which parent item to use
+        if( categoryInfo.hasOdaParentCategory() )
+        {
+            // if this is under the ODA parent category, put it under an ODA parent item
+            if( parentItem == null )
+                parentItem = createOdaRootItem( parent );
+        }
+        else    // not under an ODA parent category
+        {
+            // create category item directly in tree as a top level item
+            // TODO - handle sub-categories
+            parentItem = null;
+        }
+        
+        TreeItem categoryItem = ( parentItem != null ) ?
+                new TreeItem( parentItem, TREE_ITEM_STYLE ) :
+                new TreeItem( parent, TREE_ITEM_STYLE );
+            
+        // the tree view expects a profile instance's parent item to contain an odaDataSourceId in item data
+        categoryItem.setData( categoryInfo.getOdaDataSourceId() );
+        categoryItem.setText( categoryInfo.getDisplayName() );
+        
+        // create children items for each of its profile instances
+        createChildTreeItems( categoryItem, profileIds, TREE_ITEM_STYLE );
+        
+        return categoryItem;
+    }
+        
+    /**
+     * Build a child tree item for each connection profile identifier in the specified Map.
+     */
+    private void createChildTreeItems( TreeItem parentItem, Map<String,String> profileIds, int style )
+    {
+        if( profileIds == null )
+            return;
+
+        for( String profileInstanceId : profileIds.keySet() )
+        {
+            TreeItem item = new TreeItem( parentItem, style );
+            item.setData( profileInstanceId );
+            // profile instance name
+            item.setText( profileIds.get( profileInstanceId ) );   
+        }
+    }
+
+    /**
+     * Setup DataSourceName layout
+     */
+    private void setupDataSourceName( Composite composite )
+    {
+        GridData layoutData = new GridData( GridData.FILL_HORIZONTAL );
+        layoutData.horizontalSpan = 3;
+        m_useDefaultDSNameCheckBox = new Button( composite, SWT.CHECK );
+        m_useDefaultDSNameCheckBox.setText( Messages.profilePage_checkboxLabel_useDefaultName );
+        m_useDefaultDSNameCheckBox.setSelection( true );
+        m_useDefaultDSNameCheckBox.setLayoutData( layoutData );
+        m_useDefaultDSNameCheckBox.addSelectionListener( new SelectionAdapter( ) 
+        {
+            public void widgetSelected( SelectionEvent e )
+            {
+                if( m_useDefaultDSNameCheckBox.getSelection() )
+                {
+                    // reset the design name to the default
+                    TreeItem item = getSelectedProfileItem();
+                    if( item != null )
+                        setSelectedDataSourceName( item.getText() );
+                }
+                
+                enableDataSourceNameEditor( ! m_useDefaultDSNameCheckBox.getSelection() );
+            }
+        } );
+
+        m_dataSourceNameLabel = new Label( composite, SWT.NONE );
+        m_dataSourceNameLabel.setText( Messages.profilePage_label_dataSourceName );
+        m_dataSourceNameLabel.setLayoutData( new GridData( GridData.HORIZONTAL_ALIGN_BEGINNING ) );
+
+        layoutData = new GridData( GridData.FILL_HORIZONTAL );
+        layoutData.horizontalSpan = 2;
+        m_dataSourceDesignNameControl = new Text( composite, SWT.BORDER );
+        m_dataSourceDesignNameControl.setLayoutData( layoutData );
+        m_dataSourceDesignNameControl.addModifyListener( new ModifyListener( ) 
+        {
+            public void modifyText( ModifyEvent e )
+            {
+                setDataSourceDesignName( m_dataSourceDesignNameControl.getText() );
+
+                String invalidMessage = null;
+                if( isDesignNameBlank() )
+                {
+                    setPageComplete( false );
+                    setMessage( Messages.profilePage_error_emptyName, IMessageProvider.ERROR );
+                }
+                else if( ( invalidMessage = validateAndGetErrorMessage() ) != null )
+                {
+                    setPageComplete( false );
+                    setMessage( invalidMessage, IMessageProvider.ERROR );
+                }
+                else    // name value is ok
+                {
+                    // when creating a new data source, the name must be associated
+                    // with a profile selection either by import or reference
+                    boolean isNameOk = inEditMode() ? true : hasSelectedProfile();
+                    setPageComplete( isNameOk );
+                }
+            }
+        } );
+
+        enableDataSourceNameEditor( false );
+    }
+    
+    private void setupLinkCheckBox( Composite composite )
+    {
+        m_linkRefCheckBox = new Button( composite, SWT.CHECK );
+        m_linkRefCheckBox.setToolTipText( Messages.profilePage_checkboxTooltip_maintainLink );
+        GridData data = new GridData( );
+        data.horizontalSpan = 3;
+        m_linkRefCheckBox.setLayoutData( data );
+        m_linkRefCheckBox.setText( Messages.profilePage_checkboxLabel_maintainLink );
+        m_linkRefCheckBox.setSelection( true );
+        setExternalLinkDefaultState();
+        
+        m_linkRefCheckBox.addSelectionListener( new SelectionAdapter( ) 
+        {
+            public void widgetSelected( SelectionEvent e )
+            {
+                if( ! inEditMode() || m_odaDataSourceTree == null )
+                    return;     // nothing to do
+
+                // editing of selected profile is allowed only if a link is maintained
+                boolean maintainLink = m_linkRefCheckBox.getSelection();
+                m_odaDataSourceTree.setEnabled( maintainLink );
+
+                if( isPageComplete() )
+                    setMessage( EMPTY_STRING, IMessageProvider.NONE );
+                else
+                    setDefaultMessageAsError( maintainLink );
+            }
+        } );
+    }
+    
+    /**
+     * Validate whether the data source design name is blank
+     */
+    private boolean isDesignNameBlank( )
+    {
+        return m_dataSourceDesignName == null || m_dataSourceDesignName.length() == 0;
+    }
+
+    /**
+     * Validate whether the data source design name is valid.  
+     * @return  null if the name is valid; 
+     *          otherwise, return corresponding error message
+     */
+    private String validateAndGetErrorMessage()
+    {
+        if( m_designNameValidator != null )
+        {
+            try
+            {
+                if( m_designNameValidator.isValid( m_dataSourceDesignName ) )
+                    return null;    // is valid, no error message
+                else    // validator did not throw exception to provide error message, 
+                        // use default error message
+                    return Messages.profilePage_error_invalidName;
+            }
+            catch( OdaException ex )
+            {
+                return ex.getMessage();    // is invalid
+            }
+        }
+        
+        return null;    // is valid, no error message
+    }
+
+    /**
+     * Enable DataSourceNameEditor
+     */
+    private void enableDataSourceNameEditor( boolean enabled )
+    {
+        m_dataSourceNameLabel.setEnabled( enabled );
+        m_dataSourceDesignNameControl.setEnabled( enabled );
+    }
+    
+    private void setDataSourceNameEditorVisible( boolean visible )
+    {
+        m_useDefaultDSNameCheckBox.setVisible( visible );
+        m_dataSourceNameLabel.setVisible( visible );
+        m_dataSourceDesignNameControl.setVisible( visible );
+    }
+
+    /**
+     * Set the checkbox state for maintaining a link to the selected connection profile
+     * according to the specified state.
+     * @param isExternalLinkOptional   true indicates whether an user is allowed to set/unset
+     *              the external link option; false means that an external link is required
+     */
+    private void setExternalLinkOptionControl( boolean isExternalLinkOptional )
+    {
+        m_linkRefCheckBox.setEnabled( isExternalLinkOptional );
+        if( ! isExternalLinkOptional )  // requires to maintain an external link
+            m_linkRefCheckBox.setSelection( true );
+    }
+    
+    private void setExternalLinkDefaultState()
+    {
+        // initalize the link control state based on whether a profile file path exists
+        m_linkRefCheckBox.setEnabled( hasConnectionProfilePath() );
+    }
+    
+    private boolean inEditMode()
+    {
+        return ( m_propertyPage != null );
+    }
+    
+    private boolean hasConnectionProfilePath( )
+    {
+        return getConnProfilePathControlText().trim().length() > 0;
+    }
+
+    /**
+     * Process the given text in bi-directional locale for rendering in the
+     * connection profile store file path UI text control.  
+     * Also specify whether to disable the default behavior of auto selection
+     * of single item found in specified profile file.
+     * @param text  connection profile file path
+     * @param disableAutoSelect true to disable default behavior
+     */
+    private void setConnProfilePathControlText( String text, boolean disableAutoSelect )
+    {
+        String localizedText = TextProcessorWrapper.process( text );
+
+        // disable default behavior, set flag for path control's event handler
+        if( disableAutoSelect ) 
+            m_connectionProfilePath.setData( DISABLE_AUTO_SELECT_ITEM, Boolean.TRUE );
+        m_connectionProfilePath.setText( localizedText );
+        // reset to default behavior
+        m_connectionProfilePath.setData( DISABLE_AUTO_SELECT_ITEM, null );  
+    }
+    
+    /**
+     * Return a de-processed text value in the connection profile store file path 
+     * UI text control.
+     * @return  the user-specified text in the profile store path control;
+     *          may be in relative or absolute format; and may point to a non-existing file
+     */
+    private String getConnProfilePathControlText()
+    {
+        String localizedText = m_connectionProfilePath.getText();
+        return TextProcessorWrapper.deprocess( localizedText );
+    }
+    
+    private String getResolvedConnProfilePathControlText()
+    {
+        return resolveProfileStorePath( getConnProfilePathControlText() );
+    }
+    
+    private String resolveProfileStorePath( String filePathText )
+    {
+        if( filePathText == null || filePathText.trim().length() == 0 || 
+            m_hostResourceIdentifiers == null )
+            return filePathText;    // nothing to resolve with
+
+        String resolvedFilePathText =
+            DesignUtil.resolveToApplResourcePath( filePathText, m_hostResourceIdentifiers );
+        return ( resolvedFilePathText != null ) ?
+                resolvedFilePathText :
+                filePathText; // unable to resolve invalid filePathText, return original value
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.browse.IBrowseButtonParent#setConnProfilePath(java.lang.String, boolean)
+     */
+    public void setProfileStorePath( String path, boolean isRelative ) 
+    {   
+        if( path == null ) 
+            path = EMPTY_STRING;
+        setConnProfilePathControlText( path, false );
+    }     
+    
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.browse.IBrowseButtonHost#browseSelected()
+     */
+    public void browseSelected()
+    {
+        m_browseButton.getMenuButtonProvider().setProperty(
+                IBrowseButtonHost.STORED_PATH,
+                getResolvedConnProfilePathControlText() );
+    }
+
+    /**
+     * Compute the preferred width of the specified button based on
+     * its label size or the minimum button width, whichever is wider.
+     * @param button    
+     * @return      preferred button width
+     */
+    static int computeButtonWidth( Button button )
+    {
+        int defaultWidth = button.computeSize( SWT.DEFAULT, SWT.DEFAULT ).x;
+        return ( defaultWidth < BUTTON_MIN_WIDTH ) ? 
+                BUTTON_MIN_WIDTH : defaultWidth;
+    }
+    
+    /**
+     * Internal class that encapsulates related identifier information on 
+     * an ODA connection profile category.  
+     * It provides info for a category item in the connection profile tree viewer,
+     * and can be used for Comparable sorting in a collection.
+     * @since 3.0.6
+     */
+    private class OdaProfileCategoryInfo implements Comparable
+    {
+        private String m_odaDataSourceId;
+        private boolean m_hasOdaParentCategory;
+        private String m_categoryDisplayName;
+        private String m_effectiveCategoryId;
+        
+        OdaProfileCategoryInfo( String id, ExtensionManifest manifest )
+        {
+            m_odaDataSourceId = id;
+
+            ICategory profileCategory = ProfileCategoryUtil.getCategory( m_odaDataSourceId );
+            m_hasOdaParentCategory = ProfileCategoryUtil.hasODAParentCategory( profileCategory );
+
+            // if parent category is not ODA type, use the parent category info
+            boolean useParentCategory = ! m_hasOdaParentCategory;
+            m_categoryDisplayName = 
+                getEffectiveDisplayName( profileCategory, useParentCategory, manifest );  
+            m_effectiveCategoryId = 
+                getEffectiveCategoryId( profileCategory, useParentCategory );
+        }
+
+        private String getEffectiveDisplayName( ICategory profileCategory,
+                boolean useParentCategory, ExtensionManifest manifest )
+        {
+            String categoryDisplayName = 
+                getCategoryDisplayName( profileCategory, useParentCategory, 
+                        manifest.getDataSourceDisplayName() );
+            return useParentCategory ? 
+                        categoryDisplayName : 
+                        refineDisplayName( categoryDisplayName, manifest );
+        }
+        
+        private String getCategoryDisplayName( ICategory profileCategory,
+                    boolean useParentCategory, String defaultDisplayName )
+        {
+            if( profileCategory == null )
+                return defaultDisplayName;
+            
+            if( useParentCategory && profileCategory.getParent() != null )
+                profileCategory = profileCategory.getParent();                       
+
+            String displayName = profileCategory.getName();
+                    
+            if( displayName == null || displayName.length() == 0 ||
+                ProfileCategoryUtil.isUnknownCategory( profileCategory ) )
+                displayName = defaultDisplayName;
+
+            return displayName;
+        }
+        
+        @SuppressWarnings("deprecation")
+        private String refineDisplayName( String categoryDisplayName, ExtensionManifest manifest )
+        {
+            if( ! manifest.isDeprecated() )
+                return categoryDisplayName; // no need to refine the display name
+
+            String replacingDataSourceId = manifest.getRelatedDataSourceId();
+            try
+            {
+                String newDisplayName = 
+                    ManifestExplorer.getInstance().getExtensionManifest( replacingDataSourceId )
+                        .getDataSourceDisplayName();
+                categoryDisplayName = Messages.bind( 
+                        Messages.profilePage_deprecatedProfileDisplayName, categoryDisplayName, newDisplayName );
+            }
+            catch( OdaException ex )
+            {
+                // ignore
+            }
+            return categoryDisplayName;
+        }
+
+        private String getEffectiveCategoryId( ICategory profileCategory,
+                    boolean useParentCategory )
+        {
+            String categoryId = null;
+            if( profileCategory != null )
+            {
+                if( useParentCategory && profileCategory.getParent() != null )
+                    profileCategory = profileCategory.getParent();                       
+                categoryId = profileCategory.getId();
+            }
+
+            if( ProfileCategoryUtil.isUnknownCategory( categoryId ) )
+                categoryId = m_odaDataSourceId;      // default is the same as oda data source id  
+                               
+            return categoryId;
+        }
+        
+        String getOdaDataSourceId()
+        {
+            return m_odaDataSourceId;
+        }
+
+        boolean hasOdaParentCategory()
+        {
+            return m_hasOdaParentCategory;
+        }
+
+        String getDisplayName()
+        {
+            return m_categoryDisplayName;
+        }
+
+        String getEffectiveCategoryId()
+        {
+            return m_effectiveCategoryId;
+        }
+
+        boolean isExternalLinkOptional()
+        {
+            /* a profile category without an ODA parent category and non-Db category requires 
+             * maintaining an external link to a connection profile, 
+             * cuz importing a profile's properties to a data source design private properties 
+             * (which are not encyrpted) is not supported due to security concern
+             */
+            return hasOdaParentCategory() || 
+                getEffectiveCategoryId().equals( Constants.DATABASE_CATEGORY_ID );
+        }
+        
+        /* (non-Javadoc)
+         * @see java.lang.Comparable#compareTo(java.lang.Object)
+         */
+        public int compareTo( Object obj )
+        {
+            if( !(obj instanceof OdaProfileCategoryInfo) )
+                return -1;
+            return compareTo( (OdaProfileCategoryInfo) obj );
+        }
+        
+        public int compareTo( OdaProfileCategoryInfo anotherId )
+        {
+            // first compare the parent category type
+            if( m_hasOdaParentCategory != anotherId.m_hasOdaParentCategory )
+            {
+                // non ODA parent category is lower in ascending order
+                return ! m_hasOdaParentCategory ? -1 : 1;
+            }
+            
+            // same parent category type, compare its own category name
+            int result = m_categoryDisplayName.compareTo( anotherId.m_categoryDisplayName );
+            if( result != 0 )   // not the same display name
+                return result;
+            // next compare its id
+            return m_odaDataSourceId.compareTo( anotherId.m_odaDataSourceId );    
+        }
+
+        /* (non-Javadoc)
+         * @see java.lang.Object#equals(java.lang.Object)
+         */
+        public boolean equals( Object obj )
+        {
+            if( !(obj instanceof OdaProfileCategoryInfo) )
+                return false;
+            OdaProfileCategoryInfo anotherId = (OdaProfileCategoryInfo) obj;
+            return m_categoryDisplayName.equals( anotherId.m_categoryDisplayName ) &&
+                   m_odaDataSourceId.equals( anotherId.m_odaDataSourceId ) &&
+                   m_hasOdaParentCategory == anotherId.m_hasOdaParentCategory &&
+                   m_effectiveCategoryId.equals( anotherId.m_effectiveCategoryId );
+        }
+    };
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/ProfileSelectionWizard.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/ProfileSelectionWizard.java
new file mode 100644
index 0000000..6a33be3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/ProfileSelectionWizard.java
@@ -0,0 +1,121 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007, 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.ui.profile;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers;
+import org.eclipse.datatools.connectivity.oda.design.internal.designsession.DataSourceDesignSessionBase;
+import org.eclipse.datatools.connectivity.oda.design.ui.nls.Messages;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jface.wizard.Wizard;
+
+/**
+ * Internal ODA Wizard that controls the behavior of the connection profile wizard page.
+ * For use by internal packages only.
+ * @since   3.0.4
+ */
+public class ProfileSelectionWizard extends Wizard
+{
+    private DataSourceDesignSessionBase m_designSession;
+    private ProfileSelectionWizardPage m_page;
+    private ResourceIdentifiers m_profileResourceIds;
+
+    public ProfileSelectionWizard( DataSourceDesignSessionBase designSession )
+    {
+        this( designSession, null );
+    }
+
+    public ProfileSelectionWizard( DataSourceDesignSessionBase designSession,
+            ResourceIdentifiers profileResourceIdentifiers )
+    {
+        super();
+        m_designSession = designSession;
+        m_profileResourceIds = profileResourceIdentifiers;
+        addPages();
+        setWindowTitle( Messages.profilePage_pageLabel );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.wizard.Wizard#addPages()
+     */
+    public void addPages()
+    {
+        if( m_page != null )
+            return;     // already added
+        
+        m_page = new ProfileSelectionWizardPage( Messages.profilePage_pageTitle );
+        addPage( m_page );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.wizard.Wizard#canFinish()
+     */
+    public boolean canFinish()
+    {
+        // requires user to go to the custom ODA wizard page where
+        // the necessary operation is performed
+        return false;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.wizard.Wizard#performFinish()
+     */
+    public boolean performFinish()
+    {
+        return true;
+    }
+    
+    /**
+     * Obtains the custom wizard starting page provided by
+     * the selected profile's ODA designer extension.
+     * Also updates the design session of the selected ODA extension
+     * and the name of the data source design.
+     * @param profileSelection
+     * @return
+     */
+    IWizardPage getSelectedProfileStartingPage( ProfileSelection profileSelection )
+    {
+        if( profileSelection == null ||
+            profileSelection.getOdaDataSourceId() == null )
+        {
+            return null;
+        }
+        
+        try
+        {
+            return m_designSession.getNewCustomOdaStartingPage( 
+                    profileSelection.getOdaDataSourceId(),
+                    profileSelection.getDataSourceDesignName(),
+                    profileSelection.getProfileRef() );
+        }
+        catch( OdaException e )
+        {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /**
+     * Returns the design resource identifiers of a connection profile store file location.
+     * @return the host resource identifiers; may be null if none was specified by client
+     * @since 3.2.6 (DTP 1.9.2)
+     */
+    ResourceIdentifiers getHostResourceIdentifiers()
+    {
+        return m_profileResourceIds;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/ProfileSelectionWizardPage.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/ProfileSelectionWizardPage.java
new file mode 100644
index 0000000..01fe294
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/ProfileSelectionWizardPage.java
@@ -0,0 +1,114 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007, 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.ui.profile;
+
+import org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers;
+import org.eclipse.datatools.connectivity.oda.design.internal.designsession.DataSourceDesignSessionBase.IDesignNameValidatorBase;
+import org.eclipse.datatools.connectivity.oda.design.ui.nls.Messages;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * Internal ODA connection profile wizard page for users to select 
+ * a connection profile to define a data source design.
+ * For use by internal packages only.
+ * @since   3.0.4
+ */
+public class ProfileSelectionWizardPage extends WizardPage
+{
+    private ProfileSelectionPageHelper m_pageHelper;
+    
+    public ProfileSelectionWizardPage( String pageName )
+    {
+        super( pageName );
+        setTitle( Messages.profilePage_pageTitle );
+        setMessage( Messages.profilePage_selectProfileDefaultMessage );
+    }
+    
+    private ProfileSelectionPageHelper getPageHelper()
+    {
+        if ( m_pageHelper == null )
+            m_pageHelper = new ProfileSelectionPageHelper( this );        
+        return m_pageHelper;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+     */
+    public void createControl( Composite parent )
+    {
+        setControl( getPageHelper().createControl( parent ) );
+        setPageComplete( false );
+    }
+    
+    public ProfileSelection collectProfileSelection()
+    {
+        if ( m_pageHelper != null )
+            return m_pageHelper.collectProfileSelection();
+        // controls are not created yet, nothing to collect
+        return null;
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.jface.dialogs.DialogPage#setVisible(boolean)
+     */
+    public void setVisible( boolean visible )
+    {
+        super.setVisible( visible );
+        getControl( ).setFocus( );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.wizard.WizardPage#canFlipToNextPage()
+     */
+    public boolean canFlipToNextPage()
+    {
+        // avoid repeated call to getNextPage() of base class method
+        return isPageComplete();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.wizard.WizardPage#getNextPage()
+     */
+    public IWizardPage getNextPage()
+    {
+        ProfileSelection profileSelection = collectProfileSelection();
+        return getMyWizard().getSelectedProfileStartingPage( profileSelection );
+    }
+
+    private ProfileSelectionWizard getMyWizard()
+    {
+        return (ProfileSelectionWizard) getWizard();
+    }
+    
+    /**
+     * For use by internal packages only.
+     */
+    public void setDesignNameValidator( IDesignNameValidatorBase validator )
+    {
+        getPageHelper().setDesignNameValidator( validator );
+    }
+
+    /* 
+     * @since 3.2.6 (DTP 1.9.2)
+     */
+    ResourceIdentifiers getHostResourceIdentifiers()
+    {
+        return getMyWizard().getHostResourceIdentifiers();
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/ProfileStoreCreationDialog.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/ProfileStoreCreationDialog.java
new file mode 100644
index 0000000..7f5d401
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/ProfileStoreCreationDialog.java
@@ -0,0 +1,336 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007, 2013 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.ui.profile;
+
+import java.io.File;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.ExportProfilesDialog;
+import org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.browse.IBrowseButtonHost;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.browse.IMenuButtonProvider;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.browse.MenuButtonProvider;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.browse.ProfileStoreBrowseButton;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.filter.NewProfileAction;
+import org.eclipse.datatools.connectivity.oda.design.ui.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.design.util.DesignUtil;
+import org.eclipse.datatools.connectivity.oda.profile.ProfileFileExtension;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Shell;
+
+public class ProfileStoreCreationDialog extends ExportProfilesDialog 
+    implements IBrowseButtonHost
+{
+    private static final String EXT_SEPARATOR = ProfileFileExtension.FILE_EXT_SEPARATOR;
+
+    private CheckboxTableViewer m_profilesViewer;
+    private ProfileStoreBrowseButton m_browseButton;
+    private IConnectionProfile m_preSelectProfile;
+    private ResourceIdentifiers m_resourceIdentifiers = null;
+    private boolean m_isProfileStorePathRelative = false;
+    
+	public ProfileStoreCreationDialog( Shell parentShell )
+	{
+		super( parentShell );
+        setShellStyle( super.getShellStyle() | SWT.PRIMARY_MODAL );
+	}
+	
+	//@Override base method
+	protected void configureShell( Shell newShell ) 
+	{
+		super.configureShell( newShell );
+		newShell.setText( Messages.profileStoreCreationDialog_title ); 
+	}
+	
+	//@Override base method
+	protected Control createDialogArea( Composite parent ) 
+	{
+		Composite container = createParentDialogArea( parent );
+		final GridLayout gridLayout = new GridLayout();
+		gridLayout.marginHeight = 20;
+		gridLayout.numColumns = 3;		
+		container.setLayout( gridLayout );
+		
+		// profiles selection group 
+		{	
+			final GridLayout groupGridLayout = new GridLayout();
+            groupGridLayout.makeColumnsEqualWidth = false;
+            groupGridLayout.numColumns = 3;            
+            final Group group = createProfileSelectionGroup( container, groupGridLayout );
+            
+            // override group text
+			group.setText( Messages.profileStoreCreationDialog_grouptext ); 
+
+			// profiles selection viewer
+			m_profilesViewer = setupCheckboxTableViewer( group );
+			setCheckedProfile();  // pre-select profile, if specified
+			
+            // SelectAll button
+			{				
+				GridData selectAllButtonData = new GridData();
+				selectAllButtonData.horizontalAlignment = SWT.LEFT;
+				Button button = createSelectAllButton( group, selectAllButtonData );
+		        selectAllButtonData.widthHint = ProfileSelectionPageHelper.computeButtonWidth( button );
+			}
+			
+            // DeselectAll button
+			{
+				GridData deselectAllButtonData = new GridData();
+				deselectAllButtonData.horizontalAlignment = SWT.LEFT;
+				Button button = createDeselectAllButton( group, deselectAllButtonData );
+				deselectAllButtonData.widthHint = ProfileSelectionPageHelper.computeButtonWidth( button );
+			}
+			
+            // New... button
+			{
+		        Button newButton = new Button( group, SWT.PUSH );
+		        newButton.setText( Messages.profileStoreCreationDialog_button_new );
+		        newButton.setToolTipText( Messages.profileStoreCreationDialog_newbutton_tooltiptext );
+		        GridData newButtonData = new GridData();
+		        newButtonData.horizontalAlignment = SWT.RIGHT;
+		        newButtonData.verticalAlignment = SWT.TOP;
+		        newButtonData.widthHint = ProfileSelectionPageHelper.computeButtonWidth( newButton );
+		        newButton.setLayoutData( newButtonData );
+
+		        newButton.addSelectionListener( new SelectionAdapter() 
+		        {
+		            public void widgetSelected( SelectionEvent e )
+		            {
+						handleNewProfile();
+					}
+
+					private void handleNewProfile()
+					{
+						// Create a new connection profile
+						NewProfileAction newProfileAction = new NewProfileAction( getShell() );
+						newProfileAction.run();
+						m_profilesViewer.refresh();						
+					}
+		        } );      
+			}			
+		}	
+		
+        createVerticalSpacingLabel( container );
+				
+        // composite for the new profile store file controls
+		Composite composite = new Composite( container, SWT.NONE );
+		{
+			GridData gridData = new GridData();
+			gridData.horizontalSpan = 3;
+			gridData.grabExcessHorizontalSpace = true;
+			gridData.minimumWidth = 410;
+			composite.setLayoutData( gridData );
+		}
+        GridLayout layout = new GridLayout( );
+        layout.numColumns = 3;
+        composite.setLayout( layout );
+        // File path label
+		createFilePathLabel( composite, null );
+
+		// File path text control
+        {
+            GridData data = new GridData( GridData.FILL_HORIZONTAL );
+            data.widthHint = 290;
+            setupFilePathText( composite, data ); 
+        }
+
+        // Browse... button
+        {
+            IMenuButtonProvider provider = new MenuButtonProvider( true );
+            m_browseButton = new ProfileStoreBrowseButton( composite,
+                    SWT.PUSH,
+                    provider,
+                    this );
+            GridData data = new GridData();
+            data.widthHint = m_browseButton.computeButtonWidth( );
+            m_browseButton.setLayoutData(data);
+
+            if( m_resourceIdentifiers != null )
+            {
+                File resourceBase= new File( m_resourceIdentifiers.getApplResourceBaseURI());
+                m_browseButton.getMenuButtonProvider( ).setProperty( 
+                        IBrowseButtonHost.RESOURCE_FILE_DIR, resourceBase );
+            }
+            m_browseButton.getMenuButtonProvider( ).setProperty( 
+                    IBrowseButtonHost.IS_CREATE_PROFILE, Boolean.TRUE );
+            m_browseButton.refreshMenuItems( );
+        } 
+        
+        // Encrypt file checkbox
+	    setupEncryptContentCheckbox( container );
+	    
+        setupHelp( getShell() );
+		return container;
+	}
+	
+	/**
+	 * Specifies the connection profile element to pre-select in the dialog
+     * to get included in the new profile store by default.
+     * This method can be called before the dialog area is created.
+	 * @param profile  the profile element to pre-select in the dialog's profiles viewer; 
+	 *                 may be null to unset before the dialog area is created
+	 */
+	public void setPreSelectedProfile( IConnectionProfile profile )
+	{
+	    // hold on to profile to pre-select when the dialog area is created
+	    m_preSelectProfile = profile;
+	}
+	
+	private void setCheckedProfile()
+	{
+	    if( m_profilesViewer == null || m_preSelectProfile == null )
+	        return;
+	    
+	    m_profilesViewer.setChecked( m_preSelectProfile, true );
+	}
+
+    void setHostResourceIdentifiers( ResourceIdentifiers resourceIdentifiers ) 
+    {
+        m_resourceIdentifiers = resourceIdentifiers;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.internal.ui.wizards.ExportProfilesDialog#getFilePathText()
+     */
+    protected String getFilePathText()
+    {
+        String profileStorePath = super.getFilePathText();
+        if( profileStorePath == null || profileStorePath.trim().length() == 0 )
+        {
+            m_isProfileStorePathRelative = false; // default setting
+            return profileStorePath;
+        }
+
+        // override base class method to resolve profile store file path, 
+        // if a relative path is specified;
+        // also reset flag based on latest value found in text control 
+        String trimmedPath = profileStorePath.trim();
+        m_isProfileStorePathRelative = ! new File( trimmedPath ).isAbsolute();
+        String resolvedProfilePath = DesignUtil.resolveToApplResourcePath( trimmedPath, m_resourceIdentifiers );
+        return resolvedProfilePath != null && ! resolvedProfilePath.equals( trimmedPath ) ?
+                    resolvedProfilePath : // got resolved to absolute value
+                    profileStorePath;     // unable to resolve profileStorePath, return original file path text
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.internal.ui.wizards.ExportProfilesDialog#validateFilePath()
+     */
+    protected boolean validateFilePath() 
+    {
+        if( ! super.validateFilePath() )
+            return false;
+
+        File file = new File( getFilePathText() );
+
+        // Overrides to further validate the file extension, if a default extension is defined
+        String defaultExtension = ProfileFileExtension.getDefault();        
+        if( ProfileFileExtension.exists( defaultExtension ) )
+        {
+            if( ! validateFileExtension( file, defaultExtension ) )
+                return false;
+        }
+        
+        // file extension is valid, now check if file already exists
+        return validateOverwriteExistingFile( file );
+    }
+    
+    private boolean validateFileExtension( File file, String defaultExtension ) 
+    {
+        String fileName = file.getName();
+        
+        int lastIndex = fileName.lastIndexOf( EXT_SEPARATOR );
+        if( lastIndex >= 0 && fileName.length() > lastIndex+1 )     // file has file extension
+            return true;
+        
+        // raise error dialog about missing file extension in the file name
+        String[] dialogLabels = new String[] { 
+                IDialogConstants.OK_LABEL,
+                IDialogConstants.CANCEL_LABEL };            
+        MessageDialog dialog = new MessageDialog( getShell(),
+                Messages.ui_errorLabel,
+                null,
+                Messages.bind( Messages.profileStoreCreationDialog_fileext_error, defaultExtension ),
+                MessageDialog.ERROR,
+                dialogLabels,
+                0);
+        
+        int response = dialog.open();            
+        if( response != 0 ) // user presses Cancel
+            return false;
+        
+        // user presses Ok,
+        // append the default extension to the user-input file path
+        String userFilePathText = super.getFilePathText();
+        StringBuilder revisedFilePathText = new StringBuilder( userFilePathText );
+        if( ! userFilePathText.endsWith( EXT_SEPARATOR ) )
+            revisedFilePathText.append( EXT_SEPARATOR );
+        revisedFilePathText.append( defaultExtension );
+
+        super.setFilePathText( revisedFilePathText.toString() );
+        return false;   // requires user to verify the filePath and press Ok to continue
+    }
+
+    private boolean validateOverwriteExistingFile( File file ) 
+    {
+        if( ! file.exists() )
+            return true;
+        
+        // raise dialog about overwriting the specified file
+        return MessageDialog.openConfirm( getShell(), 
+                Messages.ui_saveAsTitle,
+                Messages.bind( Messages.ui_replaceFilePrompt, file ) );
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.browse.IBrowseButtonHost#setProfileStorePath(java.lang.String, boolean)
+     */
+    public void setProfileStorePath( String path, boolean isRelative ) 
+    {
+        m_isProfileStorePathRelative = isRelative;
+        super.setFilePathText( path );
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.browse.IBrowseButtonHost#browseSelected()
+     */
+    public void browseSelected()
+    {
+        m_browseButton.getMenuButtonProvider().setProperty(
+                IBrowseButtonHost.STORED_PATH, getFilePathText() );
+    }
+
+    public boolean isProfileStorePathRelative()
+    {
+        return m_isProfileStorePathRelative;
+    }       
+	
+}
+
+
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/browse/IBrowseButtonHost.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/browse/IBrowseButtonHost.java
new file mode 100644
index 0000000..cf295e0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/browse/IBrowseButtonHost.java
@@ -0,0 +1,43 @@
+/*

+ *************************************************************************

+ * Copyright (c) 2011 Actuate Corporation.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *  Actuate Corporation - initial API and implementation

+ *  

+ *************************************************************************

+ */

+package org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.browse;

+

+/**

+ * Internal interface that must be implemented by all classes

+ * that consumes the {@link ProfileStoreBrowseButton}.

+ * 

+ * @since 3.2.6 (DTP 1.9.2)

+ */

+public abstract interface IBrowseButtonHost 

+{

+    public static final String RESOURCE_FILE_DIR = "ResourceFileDIR"; //$NON-NLS-1$

+    public static final String IS_CREATE_PROFILE = "IsCreateProfile"; //$NON-NLS-1$

+    public static final String STORED_PATH = "StoredPath"; //$NON-NLS-1$

+    

+    /**

+     * This function should be used by the Browse Button host to get

+     * back the path to the file 

+     * @param path - absolute or relative path to the file

+     * @param isRelative - true if path is relative; false otherwise

+     */

+    public void setProfileStorePath( String path, boolean isRelative ); 

+    

+    /**

+     * This function is called whenever a menu in the browse button is selected.

+     * This serves as a notification to the host, so that the host can perform 

+     * some operations before the dialog is launched.

+     */

+    public void browseSelected();

+

+}

diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/browse/IMenuButtonProvider.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/browse/IMenuButtonProvider.java
new file mode 100644
index 0000000..f83e6e9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/browse/IMenuButtonProvider.java
@@ -0,0 +1,79 @@
+/*

+ *************************************************************************

+ * Copyright (c) 2011 Actuate Corporation.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *  Actuate Corporation - initial API and implementation

+ *  

+ *************************************************************************

+ */

+

+package org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.browse;

+

+import org.eclipse.swt.graphics.Image;

+

+/**

+ * Internal interface for the menu button provider.

+ * @since 3.2.6 (DTP 1.9.2)

+ */

+public interface IMenuButtonProvider

+{

+	/**

+	 * Set Menu button for the provider

+	 * @param input - ProfileStoreBrowseButton to use

+	 */

+	public void setInput( ProfileStoreBrowseButton input );

+

+	/**

+	 * @return the menu items that should be added to the 

+	 * ProfileStoreBrowseButton

+	 */

+	public String[] getMenuItems( );

+

+	/**

+	 * @param menuItem 

+	 * @return image to display for the menuItem

+	 */

+	public Image getMenuItemImage( String menuItem );

+

+	/**

+	 * @param menuItem

+	 * @return text to display for the menuItem

+	 */

+	public String getMenuItemText( String menuItem );

+

+	/**

+	 * Selection event passed when a menu item is selected

+	 * @param type - absolute or relative

+	 */

+	public void handleSelectionEvent( String type );

+

+	/**

+	 * @return the text to display on the button

+	 */

+	public String getButtonText( );

+

+    /**

+     * @return the tooltip text to display for the button

+     */

+    public String getToolTipText( );

+

+	/**

+	 * The IBrowseButton host can call this function on the 

+	 * provider to set a property

+	 * @param key

+	 * @param value

+	 */

+	public void setProperty( String key, Object value );

+	

+	/**

+	 * @param key the property key to look up

+	 * @return the value of a property

+	 */

+	public Object getProperty( String key );

+

+}

diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/browse/MenuButton.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/browse/MenuButton.java
new file mode 100644
index 0000000..8ebb26f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/browse/MenuButton.java
@@ -0,0 +1,461 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2011, 2012 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.browse;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Menu;
+
+/**
+ * Internal class for a button that contains menu items.
+ * @since 3.2.6 (DTP 1.9.2)
+ */
+public class MenuButton extends Composite
+{
+	private Button button;
+
+	private String text;
+	private Image image;
+
+	public String getText( )
+	{
+		return text;
+	}
+
+	public Image getImage( )
+	{
+		return image;
+	}
+
+	private static final int IMAGE_HEIGHT = 16, IMAGE_WIDTH = 16;
+
+	private static int DRAW_FLAGS = SWT.DRAW_MNEMONIC
+			| SWT.DRAW_TAB
+			| SWT.DRAW_TRANSPARENT
+			| SWT.DRAW_DELIMITER;
+
+	private static final int MARGIN_GAP = 4;
+
+	private static final int TRIANGLE_WIDTH = 5;
+
+	private static final int WIDTH_MORE = 2 * MARGIN_GAP + TRIANGLE_WIDTH + 1;
+
+	public void setText( String text )
+	{
+		this.text = text;
+		button.setText( "" ); //$NON-NLS-1$
+		layoutControl( );
+	}
+
+	public void setToolTipText( String string )
+	{
+		button.setToolTipText( string );
+	}
+
+	private void layoutControl( )
+	{
+		getParent( ).layout( );
+		button.redraw( );
+	}
+
+	private Point defaultSize = new Point( 0, 0 );
+
+	public Point computeSize( int wHint, int hHint, boolean changed )
+	{
+
+		int width;
+		int height;
+
+		Button tmp = new Button( this, button.getStyle( ) );
+		if ( text != null )
+		{
+			tmp.setText( text );
+			height = tmp.computeSize( SWT.DEFAULT, SWT.DEFAULT ).y;
+		}
+		else
+		{
+			tmp.setText( "" ); //$NON-NLS-1$
+			height = tmp.computeSize( SWT.DEFAULT, SWT.DEFAULT ).y;
+		}
+		if ( image != null )
+			tmp.setImage( image );
+		Point size = tmp.computeSize( SWT.DEFAULT, SWT.DEFAULT );
+		tmp.dispose( );
+
+		if ( menu != null )
+		{
+			width = size.x + WIDTH_MORE;
+		}
+		else
+			width = size.x;
+
+		if ( isFixed && image != null )
+		{
+			int imageWidth = image.getImageData( ).width;
+			if ( imageWidth > IMAGE_WIDTH )
+				width -= ( imageWidth - IMAGE_WIDTH );
+
+		}
+		if ( !isFixed )
+			height = size.y;
+		defaultSize = new Point( width, height );
+		if ( wHint != SWT.DEFAULT )
+			width = wHint;
+		if ( hHint != SWT.DEFAULT )
+			height = hHint;
+
+		return new Point( width, height );
+	}
+
+	public void setImage( Image image )
+	{
+		this.image = image;
+		layoutControl( );
+	}
+
+	public void setBackground( Color color )
+	{
+		super.setBackground( color );
+		button.setBackground( color );
+		button.redraw( );
+	}
+
+	public void setForeground( Color color )
+	{
+		super.setBackground( color );
+		button.setForeground( color );
+		button.redraw( );
+	}
+
+	public void setFont( Font font )
+	{
+		super.setFont( font );
+		button.setFont( font );
+		button.redraw( );
+	}
+
+	public void setEnabled( boolean enable )
+	{
+		super.setEnabled( enable );
+		button.setEnabled( enable );
+		button.redraw( );
+	}
+
+	public MenuButton( Composite parent, int style )
+	{
+		this( parent, style, false );
+	}
+
+	private boolean isFixed = true;
+
+	private boolean mouseSelection = false;
+
+	private boolean mouseDown = false;
+
+	public MenuButton( Composite parent, int style, boolean fixed )
+	{
+		super( parent, SWT.DOUBLE_BUFFERED );
+		isFixed = fixed;
+		GridLayout layout = new GridLayout( );
+		layout.marginHeight = layout.marginWidth = 0;
+		this.setLayout( layout );
+
+		button = new Button( this, style | SWT.DOUBLE_BUFFERED ){
+			protected void checkSubclass( )
+			{
+				
+			}
+
+			public String getText( )
+			{
+				return MenuButton.this.getText( );
+			}
+		};
+		GridData gd = new GridData( GridData.FILL_BOTH );
+		button.setLayoutData( gd );
+		button.addPaintListener( new PaintListener( ) {
+
+			public void paintControl( final PaintEvent e )
+			{
+				MenuButton.this.paintControl( e );
+			}
+		} );
+
+		button.addListener( SWT.MouseUp, new Listener( ) {
+
+			public void handleEvent( Event e )
+			{
+				if ( !button.isEnabled( ) || e.button != 1 || !mouseDown )
+					return;
+				mouseDown = false;
+				mouseSelection = true;
+				Rectangle size = button.getBounds( );
+				if ( !size.contains( e.x, e.y ) )
+					return;
+				int left = WIDTH_MORE + MARGIN_GAP - 1;
+				if ( menu == null )
+					left = 0;
+
+				if ( e.x < size.width - left )
+				{
+					if ( listeners == null )
+						return;
+
+					e.widget = MenuButton.this;
+
+					for ( int i = 0; i < listeners.size( ); i++ )
+					{
+						( (SelectionListener) listeners.get( i ) ).widgetSelected( new SelectionEvent( e ) );
+					}
+				}
+				else
+				{
+					if ( menu != null )
+					{
+						menu.setLocation( button.toDisplay( new Point( 0,
+								size.height - 1 ) ) );
+						menu.setVisible( true );
+					}
+				}
+			}
+
+		} );
+
+		button.addListener( SWT.MouseDown, new Listener( ) {
+
+			public void handleEvent( Event e )
+			{
+				if ( !button.isEnabled( ) || e.button != 1 )
+					return;
+				mouseSelection = true;
+				Rectangle size = button.getBounds( );
+				if ( !size.contains( e.x, e.y ) )
+					return;
+				mouseDown = true;
+			}
+
+		} );
+		button.addListener( SWT.KeyUp, new Listener( ) {
+
+			public void handleEvent( Event e )
+			{
+				if ( e.keyCode == SWT.ARROW_DOWN || e.keyCode == SWT.ARROW_UP )
+				{
+					if ( menu != null )
+					{
+						Rectangle size = button.getBounds( );
+						menu.setLocation( button.toDisplay( new Point( 0,
+								size.height - 1 ) ) );
+						menu.setVisible( true );
+					}
+				}
+			}
+
+		} );
+		button.addListener( SWT.Selection, new Listener( ) {
+
+			public void handleEvent( Event e )
+			{
+				if ( mouseSelection == true )
+				{
+					mouseSelection = false;
+					return;
+				}
+
+				if ( listeners == null )
+					return;
+
+				e.widget = MenuButton.this;
+
+				for ( int i = 0; i < listeners.size( ); i++ )
+				{
+					( (SelectionListener) listeners.get( i ) ).widgetSelected( new SelectionEvent( e ) );
+				}
+			}
+
+		} );
+	}
+
+	private Menu menu;
+
+	public void setDropDownMenu( Menu menu )
+	{
+		this.menu = menu;
+	}
+
+	private List listeners;
+
+	public void addSelectionListener( SelectionListener listener )
+	{
+		if ( listeners == null )
+			listeners = new ArrayList( );
+		listeners.add( listener );
+	}
+
+	public void removeSelectionListener( SelectionListener listener )
+	{
+		if ( listeners != null )
+		{
+			listeners.remove( listener );
+			if ( listeners.size( ) == 0 )
+				listeners = null;
+		}
+	}
+
+	protected void paintControl( PaintEvent e )
+	{
+		e.gc.setFont( getFont( ) );
+		Color fg = isEnabled( ) ? getForeground( )
+				: new Color( e.gc.getDevice( ),
+						UIUtil.blend( getBackground( ).getRGB( ),
+								getForeground( ).getRGB( ),
+								70 ) );
+		try
+		{
+			e.gc.setForeground( fg );
+			Color bgColor = e.gc.getBackground( );
+			e.gc.setBackground( e.gc.getForeground( ) );
+			Rectangle size = button.getBounds( );
+
+			if ( menu != null )
+			{
+				Rectangle rect = new Rectangle( size.width - 12,
+						0,
+						TRIANGLE_WIDTH,
+						size.height );
+				UIUtil.drawArrow( e.gc, rect, SWT.DOWN );
+			}
+
+			e.gc.setBackground( bgColor );
+
+			int height = e.gc.textExtent( "", DRAW_FLAGS ).y; //$NON-NLS-1$
+
+			if ( !isFixed && image != null )
+			{
+				int imageHeight = image.getImageData( ).height;
+				if ( height < imageHeight )
+					height = imageHeight;
+			}
+
+			if ( defaultSize.y > size.height )
+			{
+				height = height - ( defaultSize.y - size.height );
+				height = e.gc.textExtent( "", DRAW_FLAGS ).y > height ? e.gc.textExtent( "", //$NON-NLS-1$ //$NON-NLS-2$
+						DRAW_FLAGS ).y
+						: height;
+			}
+
+			int left = WIDTH_MORE + MARGIN_GAP - 1;
+
+			if ( menu == null )
+				left = MARGIN_GAP - 1;
+
+			if ( menu != null )
+			{
+				Color fgColor = e.gc.getForeground( );
+				e.gc.setForeground( getDisplay( ).getSystemColor( SWT.COLOR_WIDGET_NORMAL_SHADOW ) );
+				e.gc.drawLine( size.width - left,
+						( size.height - height ) / 2,
+						size.width - left,
+						( size.height - height ) / 2 + height );
+				e.gc.setForeground( fgColor );
+			}
+
+			if ( text != null && text.trim( ).length( ) > 0 )
+			{
+				int width = e.gc.textExtent( text, DRAW_FLAGS ).x;
+				int fontHeight = e.gc.textExtent( text, DRAW_FLAGS ).y;
+				left += ( MARGIN_GAP + width );
+				e.gc.drawText( text,
+						( size.width - left ) / 2 + MARGIN_GAP,
+						( size.height - fontHeight ) / 2,
+						DRAW_FLAGS | SWT.DRAW_TRANSPARENT );
+			}
+
+			if ( image != null )
+			{
+				int imageWidth = image.getImageData( ).width;
+				int imageHeight = image.getImageData( ).height;
+
+				Image imageTemp = null;
+
+				if ( !isEnabled( ) )
+					imageTemp = new Image( e.gc.getDevice( ),
+							image,
+							SWT.IMAGE_DISABLE );
+
+				if ( isFixed )
+				{
+					imageWidth = imageWidth > IMAGE_WIDTH ? IMAGE_WIDTH
+							: imageWidth;
+					imageHeight = imageHeight > IMAGE_HEIGHT ? IMAGE_HEIGHT
+							: imageHeight;
+				}
+
+				left += ( MARGIN_GAP + imageWidth );
+				if ( !isEnabled( ) )
+				{
+					e.gc.drawImage( imageTemp,
+							0,
+							0,
+							imageTemp.getImageData( ).width,
+							imageTemp.getImageData( ).height,
+							( size.width - left ) / 2 + MARGIN_GAP,
+							Math.round( ( (float) ( size.height - imageHeight ) / 2 ) ),
+							imageWidth,
+							imageHeight );
+
+					imageTemp.dispose( );
+				}
+				else
+				{
+					e.gc.drawImage( image,
+							0,
+							0,
+							image.getImageData( ).width,
+							image.getImageData( ).height,
+							( size.width - left ) / 2 + MARGIN_GAP,
+							Math.round( ( (float) ( size.height - imageHeight ) / 2 ) ),
+							imageWidth,
+							imageHeight );
+				}
+			}
+
+		}
+		finally
+		{
+			if ( !isEnabled( ) && fg != null )
+				fg.dispose( );
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/browse/MenuButtonProvider.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/browse/MenuButtonProvider.java
new file mode 100644
index 0000000..df72ea8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/browse/MenuButtonProvider.java
@@ -0,0 +1,196 @@
+/*

+ *************************************************************************

+ * Copyright (c) 2011 Actuate Corporation.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *  Actuate Corporation - initial API and implementation

+ *  

+ *************************************************************************

+ */

+

+package org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.browse;

+

+import java.io.File;

+

+import org.eclipse.datatools.connectivity.oda.design.ui.nls.Messages;

+import org.eclipse.datatools.connectivity.oda.profile.ProfileFileExtension;

+import org.eclipse.jface.window.Window;

+import org.eclipse.swt.SWT;

+import org.eclipse.swt.graphics.Image;

+import org.eclipse.swt.widgets.FileDialog;

+import org.eclipse.swt.widgets.MessageBox;

+

+/**

+ * Internal provider for ProfileStoreBrowseButton.

+ * @since 3.2.6 (DTP 1.9.2)

+ */

+public class MenuButtonProvider implements IMenuButtonProvider

+{

+	private static String BUTTON_BROWSE_TEXT = Messages.profilePage_button_browse;

+	private static String RELATIVE_PATH_MENU = Messages.profilePage_button_relativepath;

+	private static String ABSOLUTE_PATH_MENU = Messages.profilePage_button_absolutepath;

+    private static String BUTTON_BROWSE_TOOLTIP_TEXT = Messages.profilePage_button_browse_tooltip;

+

+    private static final String RELATIVE_PATH_TYPE = "RelativePath"; //$NON-NLS-1$

+    private static final String ABSOLUTE_PATH_TYPE = "AbsolutePath"; //$NON-NLS-1$

+    private static final String EXT_SEPARATOR = ProfileFileExtension.FILE_EXT_SEPARATOR;

+    private static final String FILE_DIALOG_FILTER_PREFIX = "*"; //$NON-NLS-1$

+    private static final String FILE_DIALOG_FILTER_ALLOW_ALL = FILE_DIALOG_FILTER_PREFIX + ProfilePathSelectionDialog.FILTER_ALLOW_ALL;

+

+	private ProfileStoreBrowseButton button;

+	private String[] optionTypes;

+	private boolean autoAppendSuffix;

+

+	public MenuButtonProvider( boolean autoAppendSuffix )

+	{

+		optionTypes = new String[]{

+			ABSOLUTE_PATH_TYPE

+		};

+		this.autoAppendSuffix = autoAppendSuffix;

+	}

+

+	public String getDefaultOptionType( )

+	{

+		return optionTypes == null || optionTypes.length == 0 ? null

+				: optionTypes[0];

+	}

+

+	public String[] getMenuItems( )

+	{

+		return optionTypes;

+	}

+

+	public Image getMenuItemImage( String type )

+	{

+		return null;

+	}

+

+	public String getMenuItemText( String type )

+	{

+		if ( RELATIVE_PATH_TYPE.equals( type ) )

+		{

+			return RELATIVE_PATH_MENU;

+		}

+		return ABSOLUTE_PATH_MENU;

+	}

+

+	/**

+	 * Selection event passed when a menu item is selected.

+	 * If absolute menu option is selected a standard eclipse swt FileDialog

+	 * is displayed. If a relative path is selected a ProfilePathSelectionDialog

+	 * is displayed

+	 */

+	public void handleSelectionEvent( String type )

+	{

+		Object value = getProperty( IBrowseButtonHost.RESOURCE_FILE_DIR );

+		Object cpvalue = getProperty( IBrowseButtonHost.IS_CREATE_PROFILE );

+		Object spvalue = getProperty( IBrowseButtonHost.STORED_PATH );

+

+		boolean isRelative = RELATIVE_PATH_TYPE.equals( type );

+        String defaultExtension = ProfileFileExtension.getDefault();        

+        

+        String[] fileNames = null;

+		if ( isRelative )

+		{

+			if ( value != null && value instanceof File &&

+					cpvalue != null && cpvalue instanceof Boolean )

+			{

+				ProfilePathSelectionDialog dialog = new ProfilePathSelectionDialog( button.getControl( )

+						.getShell( ),

+						(File) value,

+						((Boolean) cpvalue).booleanValue(),

+						(String)spvalue,

+                        defaultExtension );

+				if ( dialog.open( ) == Window.OK )

+				{

+					fileNames = dialog.getSelectedItems( );

+				}

+			}

+			else

+			{

+				MessageBox box = new MessageBox( UIUtil.getDefaultShell( ), SWT.ICON_ERROR );

+				box.setText( Messages.ui_errorLabel );

+				box.setMessage( Messages.profilePage_resourcebaseuri_failure );

+				box.open( );

+			}

+		}

+		else

+		{

+			FileDialog dialog = new FileDialog( button.getControl( ).getShell( ) );

+            if( ProfileFileExtension.exists( defaultExtension ) )

+            {

+                String[] filterExt = new String[2];

+                filterExt[0] = FILE_DIALOG_FILTER_PREFIX + EXT_SEPARATOR + defaultExtension; 

+                filterExt[1] = FILE_DIALOG_FILTER_ALLOW_ALL; 

+                dialog.setFilterExtensions(filterExt);

+            }

+			if( spvalue instanceof String )

+			    dialog.setFileName( (String)spvalue );

+			fileNames = new String[1];

+			fileNames[0] = dialog.open();

+            

+            // If a file does not have an extension provided by the user,

+            // apply the default extension

+            String fileExtension = fileNames[0];

+            if( autoAppendSuffix )

+            {

+                if( fileExtension != null && fileExtension.trim().length() > 0 &&

+                    ! fileExtension.contains( EXT_SEPARATOR ) &&

+                    ProfileFileExtension.exists( defaultExtension ) )

+                    fileNames[0] = fileExtension.trim() + EXT_SEPARATOR + defaultExtension; 

+            }

+		}

+		

+		if ( fileNames != null && fileNames[0] != null)

+			button.handleSelection( fileNames[0], isRelative );

+

+	}

+

+	public void setInput( ProfileStoreBrowseButton input )

+	{

+		this.button = input;		

+	}

+	

+	public void resetProperties( )

+	{

+		boolean supportsRelativePath = getProperty( IBrowseButtonHost.RESOURCE_FILE_DIR ) instanceof File;

+		if ( supportsRelativePath )

+		{

+			optionTypes = new String[]{

+					RELATIVE_PATH_TYPE,

+					ABSOLUTE_PATH_TYPE

+			};

+		}

+		else

+		{

+			optionTypes = new String[]{

+				ABSOLUTE_PATH_TYPE

+			};

+		}

+	}

+

+	public String getButtonText( )

+	{

+		return BUTTON_BROWSE_TEXT;

+	}

+

+    public String getToolTipText() 

+    {

+        return BUTTON_BROWSE_TOOLTIP_TEXT;

+    }

+	

+	public Object getProperty( String key )

+	{

+		return button.getControl( ).getData( key );

+	}

+

+	public void setProperty( String key, Object value )

+	{

+		button.getControl( ).setData( key, value );		

+	}

+

+}

diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/browse/ProfilePathSelectionDialog.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/browse/ProfilePathSelectionDialog.java
new file mode 100644
index 0000000..b0338f9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/browse/ProfilePathSelectionDialog.java
@@ -0,0 +1,566 @@
+/*

+ *************************************************************************

+ * Copyright (c) 2011, 2012 Actuate Corporation.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *  Actuate Corporation - initial API and implementation

+ *  

+ *************************************************************************

+ */

+package org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.browse;

+

+import java.io.File;

+import java.io.FileFilter;

+import java.io.Serializable;

+import java.net.URI;

+import java.util.ArrayList;

+import java.util.Arrays;

+import java.util.Comparator;

+import java.util.List;

+

+import org.eclipse.core.runtime.IStatus;

+import org.eclipse.core.runtime.Status;

+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;

+import org.eclipse.datatools.connectivity.oda.design.ui.nls.Messages;

+import org.eclipse.datatools.connectivity.oda.profile.ProfileFileExtension;

+import org.eclipse.jface.dialogs.MessageDialog;

+import org.eclipse.jface.viewers.ILabelProvider;

+import org.eclipse.jface.viewers.ILabelProviderListener;

+import org.eclipse.jface.viewers.ITreeContentProvider;

+import org.eclipse.jface.viewers.Viewer;

+import org.eclipse.jface.viewers.ViewerFilter;

+import org.eclipse.swt.SWT;

+import org.eclipse.swt.events.ModifyEvent;

+import org.eclipse.swt.events.ModifyListener;

+import org.eclipse.swt.graphics.Image;

+import org.eclipse.swt.layout.FormAttachment;

+import org.eclipse.swt.layout.FormData;

+import org.eclipse.swt.layout.FormLayout;

+import org.eclipse.swt.layout.GridData;

+import org.eclipse.swt.widgets.Composite;

+import org.eclipse.swt.widgets.Control;

+import org.eclipse.swt.widgets.Label;

+import org.eclipse.swt.widgets.Shell;

+import org.eclipse.swt.widgets.Text;

+import org.eclipse.swt.widgets.Widget;

+import org.eclipse.ui.ISharedImages;

+import org.eclipse.ui.PlatformUI;

+import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;

+import org.eclipse.ui.dialogs.ISelectionStatusValidator;

+

+/**

+ * Internal class that displays the contents of the host resource folder.

+ * It is used when creating a connection profile store and when selecting

+ * a connection profile store for use. 

+ *

+ * @since 3.2.6 (DTP 1.9.2)

+ */

+public class ProfilePathSelectionDialog extends ElementTreeSelectionDialog

+{

+	static final String PLUGIN_ID = "org.eclipse.datatools.connectivity.oda.design.ui"; //$NON-NLS-1$

+	static final String TITLE = Messages.profilePage_pageTitle;

+	static final String TITLE_CREATE = Messages.profileStoreCreationDialog_title;

+    static final String FILTER_ALLOW_ALL = ".*"; //$NON-NLS-1$

+

+    private static final String EXT_SEPERATOR = ProfileFileExtension.FILE_EXT_SEPARATOR;

+    private static final String EMPTY_STRING = ""; //$NON-NLS-1$

+	

+	private final static Image IMG_FOLDER = PlatformUI.getWorkbench( )

+		.getSharedImages( )

+		.getImage( ISharedImages.IMG_OBJ_FOLDER );

+

+	private final static Image IMG_FILE = PlatformUI.getWorkbench( )

+		.getSharedImages( )

+		.getImage( ISharedImages.IMG_OBJ_FILE );

+	

+	private File topDir;

+	private boolean isProfileStoreCreation = false;

+    private Text txtFilter;

+	private Text txtFile;

+	private String txtFileContent = null;

+    private String storedPath = null;

+    private String defaultExtension;

+    private TreeViewerFilter treeViewerFilter = new TreeViewerFilter();

+

+    public ProfilePathSelectionDialog( Shell parent, File topDir, boolean isProfileCreation, 

+            String storedPath, String defaultExtension )

+	{

+		super( parent, new LabelProvider( ), new ContentProvider( isProfileCreation ) );

+		

+		assert topDir != null;

+		

+		this.setValidator( new SelectionValidator( ) );

+		this.setInput( topDir.getAbsolutePath( ) );		

+		this.topDir = topDir;

+		this.isProfileStoreCreation = isProfileCreation;

+		if( isProfileCreation )

+			this.setTitle( TITLE_CREATE );

+		else

+			this.setTitle( TITLE );

+		this.storedPath = storedPath;

+        this.defaultExtension = defaultExtension;

+	}

+

+	/* (non-Javadoc)

+	 * @see org.eclipse.ui.dialogs.ElementTreeSelectionDialog#createDialogArea(org.eclipse.swt.widgets.Composite)

+	 */

+	@Override

+	protected Control createDialogArea( Composite parent )

+	{

+        createFilterControl(parent);        

+        

+        if( ProfileFileExtension.exists( defaultExtension ) )

+            txtFilter.setText(EXT_SEPERATOR + defaultExtension); 

+        

+        txtFilter.addModifyListener( new ModifyListener( ) {

+

+            public void modifyText(ModifyEvent arg0) 

+            {

+                getTreeViewer().refresh();

+            }

+        } );

+        

+		Control c = super.createDialogArea( parent );

+

+		if( isProfileStoreCreation )

+		{

+            createFileControl(parent);          

+		}

+		

+		if( storedPath != null && storedPath.trim().length() > 0 )

+		{	

+            File f = new File(storedPath);          

+            if( !f.exists() && isProfileStoreCreation )

+            {

+                String newFileName = f.getName();

+                f = f.getParentFile();

+                txtFile.setText(newFileName);

+            }

+            int level = 1;

+            File parentFile = (f != null) ? f.getParentFile() : null;

+            while( parentFile != null && 

+                    !parentFile.getAbsolutePath().equals( topDir.getAbsolutePath() ) )

+            {

+                parentFile = parentFile.getParentFile();

+                level++;

+            }

+            getTreeViewer( ).expandToLevel(parentFile, level);

+            Widget w = getTreeViewer( ).testFindItem(f);

+            if( w == null )

+            {

+                getTreeViewer( ).expandAll(); //Worse case approach

+            }

+            setInitialSelection(f); //The selection needs to be visible in the TreeViewer for this to work           

+		}

+		else

+            getTreeViewer( ).expandToLevel(2);		

+		

+        getTreeViewer().addFilter( treeViewerFilter );

+		return c;

+	}

+

+    /* (non-Javadoc)

+     * @see org.eclipse.ui.dialogs.SelectionDialog#createMessageArea(org.eclipse.swt.widgets.Composite)

+     */

+    @Override

+    protected Label createMessageArea( Composite composite )

+    {

+        // A message area is not required, therefore do not create the empty message label

+        return null;

+    }

+

+    private void createFilterControl(Composite parent) 

+    {

+        Composite compositeFilter = new Composite( parent, SWT.NONE );

+        {

+            GridData gridData = new GridData(GridData.FILL_HORIZONTAL);

+            gridData.horizontalSpan = 3;

+            gridData.grabExcessHorizontalSpace = true;

+            gridData.minimumWidth = 360;

+            gridData.horizontalIndent = 10;

+            compositeFilter.setLayoutData( gridData );

+            FormLayout layout = new FormLayout( );

+            compositeFilter.setLayout( layout );

+        }

+        

+        final Label filterLabel = new Label(compositeFilter, SWT.NONE);

+        filterLabel.setText(Messages.profilePage_button_browse_filter);

+        {

+            FormData data = new FormData( );

+            data.top = new FormAttachment( 0, 18 );

+            data.left = new FormAttachment( 0, 5 );

+            filterLabel.setLayoutData( data );

+        }

+        filterLabel.setToolTipText(Messages.profilePage_button_browse_filter_tooltiptext);

+        

+        txtFilter = new Text(compositeFilter, SWT.BORDER);

+        {

+            FormData data = new FormData( );

+            data.top = new FormAttachment( 0, 15 );

+            data.left = new FormAttachment( filterLabel, 5, 5 );

+            data.right = new FormAttachment( 100, -10 );

+            txtFilter.setLayoutData(data);

+        }

+        txtFilter.setToolTipText(Messages.profilePage_button_browse_filter_tooltiptext);

+    }

+    

+    private void createFileControl(Composite parent) 

+    {

+        Composite composite = new Composite( parent, SWT.NONE );

+        {

+            GridData gridData = new GridData(GridData.FILL_HORIZONTAL);

+            gridData.horizontalSpan = 3;

+            gridData.grabExcessHorizontalSpace = true;

+            gridData.minimumWidth = 360;

+            gridData.horizontalIndent = 10;

+            composite.setLayoutData( gridData );

+            FormLayout layout = new FormLayout( );

+            composite.setLayout( layout );

+        }

+        

+        final Label fileLabel = new Label(composite, SWT.NONE);

+        fileLabel.setText(ConnectivityUIPlugin.getDefault().getResourceString(

+                "ExportProfilesDialog.label.text")); //$NON-NLS-1$

+        {

+            FormData data = new FormData( );

+            data.top = new FormAttachment( 0, 8 );

+            data.left = new FormAttachment( 0, 5 );

+            fileLabel.setLayoutData( data );

+        }

+        

+        txtFile = new Text(composite, SWT.BORDER);

+        {

+            FormData data = new FormData( );

+            data.top = new FormAttachment( 0, 5 );

+            data.left = new FormAttachment( fileLabel, 5, 5 );

+            data.right = new FormAttachment( 100, -10 );

+            txtFile.setLayoutData(data);

+        }

+    }

+	

+	protected void okPressed() 

+	{

+		if(isProfileStoreCreation)

+        {

+            txtFileContent = txtFile.getText();

+            if( txtFileContent.trim().length() == 0  )

+            {

+                MessageDialog.openError(getShell(), Messages.ui_errorLabel,

+                        Messages.profilePage_browse_noselection_error);

+                return;             

+            }

+        }

+		super.okPressed();

+	}

+	

+	private static class ContentProvider implements ITreeContentProvider

+	{

+		private boolean isProfileCreation = false;

+

+		public ContentProvider(boolean isProfileCreation) 

+		{

+			this.isProfileCreation = isProfileCreation;

+		}

+

+		public Object[] getChildren( Object arg )

+		{

+			if ( arg instanceof File )

+			{

+				return ProfilePathSelectionDialog.getChildren( (File)arg, isProfileCreation );

+			}

+			return null;

+		}

+

+		public Object getParent( Object arg0 )

+		{

+			return null;

+		}

+

+		public boolean hasChildren( Object arg )

+		{

+            Object[] children = getChildren( arg );

+            return children != null ? children.length > 0 : false;

+		}

+

+		public Object[] getElements( Object arg )

+		{

+			if ( arg instanceof String )

+			{

+				return new Object[]{ new File((String)arg) };

+			}

+			return null;

+		}

+

+		public void dispose( )

+		{

+			

+		}

+

+		public void inputChanged( Viewer arg0, Object arg1, Object arg2 )

+		{

+			

+		}

+	}

+	

+	private static class LabelProvider implements ILabelProvider

+	{

+

+		public Image getImage( Object arg )

+		{

+			if ( arg instanceof File )

+			{

+				if ( ((File)arg).isFile( ) )

+				{

+					return IMG_FILE;

+				}

+				return IMG_FOLDER;

+			}

+			return null;

+		}

+

+		public String getText( Object arg0 )

+		{

+			if ( arg0 instanceof File )

+			{

+			    File f = (File)arg0;

+                if ( f.getName( ).trim( ).length() == 0 )

+			    {

+			    	//For the case "File("C:\\")"

+			    	return f.getPath( );

+			    }

+				return f.getName( );

+			}

+			return EMPTY_STRING;

+		}

+

+		public void addListener( ILabelProviderListener arg0 )

+		{

+			

+		}

+

+		public void dispose( )

+		{

+			

+		}

+

+		public boolean isLabelProperty( Object arg0, String arg1 )

+		{

+			return false;

+		}

+

+		public void removeListener( ILabelProviderListener arg0 )

+		{

+			

+		}

+		

+	}

+	

+	private class SelectionValidator implements ISelectionStatusValidator

+	{

+		

+		public IStatus validate( Object[] selections )

+		{

+			if ( selections != null && selections.length > 0 )

+			{

+				for ( Object o : selections )

+				{

+					if ( o instanceof File )

+					{

+						File selFile = ((File)o);

+						if ( isProfileStoreCreation || 

+								(!isProfileStoreCreation && selFile.isFile( )) )

+						{

+							if( isProfileStoreCreation && selFile.isFile( ) )

+							{

+								txtFile.setText( selFile.getName() );								

+							}

+							return new Status( IStatus.OK,

+									PLUGIN_ID,

+									IStatus.OK,

+									EMPTY_STRING,

+									null );

+						}

+					}

+				}

+			}

+			return new Status( IStatus.ERROR,

+					PLUGIN_ID,

+					IStatus.ERROR,

+					EMPTY_STRING,

+					null );

+		}

+		

+		

+	}

+	

+	private static File[] getChildren( File f, final boolean isProfileCreation )

+	{

+		if ( !f.isDirectory( ) )

+		{

+			return new File[0];

+		}

+		File[] result 

+			= f.listFiles( new FileFilter( )

+				{

+					public boolean accept( File child )

+					{

+                        //Return true so that the content provider provides all files

+                        //Files are filtered out based on the ViewerFilter

+						return true; 

+					}	

+				});

+		if ( result != null )

+		{

+			Arrays.sort( result, new FileComparator( ) );

+		}

+		return result == null ? new File[0] : result;

+	}

+	

+	public String[] getSelectedItems( )

+	{

+		List<String> result = new ArrayList<String>( );

+		Object[] selected = this.getResult( ) == null ? new Object[0] : this.getResult( );

+		for ( Object o : selected )

+		{

+			File f = (File)o;

+			if ( isProfileStoreCreation )

+			{

+                //If a file does not have an extension provided by the user

+                //apply the default extension.

+                if( txtFileContent != null && txtFileContent.length() > 0 &&

+                        ! txtFileContent.contains(EXT_SEPERATOR) &&

+                        ProfileFileExtension.exists( defaultExtension ) )

+                    txtFileContent += EXT_SEPERATOR + defaultExtension; 

+                

+                File selectedFileParent = f.isFile() ?

+                                            f.getParentFile() : f;

+                File selectedFile = new File( selectedFileParent, txtFileContent );

+                String relativeFilePath;

+                try

+                {

+                    URI filePath = selectedFile.toURI();

+                    URI relative = topDir.toURI( ).relativize( filePath );

+                    relativeFilePath = relative.getPath( );

+                }

+                catch( Exception ex )

+                {

+                    // ignore, use the full path of the selected item instead

+                    relativeFilePath = selectedFile.getPath();

+                }

+				result.add( relativeFilePath );

+			}

+			else if ( !isProfileStoreCreation && f.isFile( ) )

+			{

+				URI relative = topDir.toURI( ).relativize( f.toURI( ) );

+				result.add( relative.getPath( ) );

+			}

+		}

+		return result.toArray( new String[0] );

+	}

+	

+    /**

+     * Helps compare two files so that directories are all displayed before

+     * the files. In addition the files and directories are sorted

+     * in their groups.

+     */

+    private static class FileComparator implements Comparator<File>, Serializable

+	{

+		private static final long serialVersionUID = 1L;

+

+		public int compare( File o1, File o2 )

+		{

+			if ( o1.isDirectory( ) && o2.isDirectory( ) )

+			{

+				return o1.getName( ).compareTo( o2.getName( ) );

+			}

+			else if ( o1.isFile( ) && o2.isFile( ) )

+			{

+				return o1.getName( ).compareTo( o2.getName( ) );

+			}

+			else if ( o1.isDirectory( ) && !o2.isDirectory( ))

+			{

+				return -1;

+			}

+			else

+			{

+				//o1 is not a directory but o2 is a directory

+				return 1;

+			}

+		}	

+	}	

+    

+    /**

+     * A TreeViewer Filter class that decides which files should be visible in the

+     * tree viewer.

+     * It gets the filter to use from the ProfilePathSelectionDialog's txtFilter 

+     * Text control.

+     */

+    private class TreeViewerFilter extends ViewerFilter

+    {

+        private static final String FILTER_SEPARATOR = ","; //$NON-NLS-1$       

+        

+        /*

+         * (non-Javadoc)

+         * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)

+         */

+        public boolean select(Viewer arg0, Object arg1, Object arg2) 

+        {

+            if( arg2 instanceof File )

+            {

+                File file = ((File)arg2);

+                if( file.isDirectory() ) //Don't filter out any directories

+                    return true;

+                else

+                {

+                    String txtFilterContent = txtFilter.getText();

+                    if( txtFilterContent.contains(FILTER_SEPARATOR)) //list of filters separated 

+                    {

+                        String[] filters = txtFilterContent.split(FILTER_SEPARATOR);

+                        for( String filter : filters )

+                        {

+                            if( showFile(file, filter) )

+                                return true;

+                        }                       

+                    }

+                    else //single filter

+                    {       

+                        return showFile(file, txtFilterContent);

+                    }

+                }

+            }

+            return false;

+        }

+

+        /**

+         * Decides whether the file should be displayed in the TreeViewer or not based on the filter

+         * @param file  

+         * @param filter

+         * @return true if file should be shown false if it should be hidden

+         */

+        private boolean showFile( File file, String filter ) 

+        {

+            if( !filter.contains( EXT_SEPERATOR ) ) //Not valid filter format, so don't filter anything

+                return true;

+

+            filter = filter.trim();

+            if( filter.endsWith( FILTER_ALLOW_ALL ) ) //Allow everything

+                return true;                                            

+            

+            String filterExt = filter.substring( filter.lastIndexOf(EXT_SEPERATOR)+1 );

+

+            String fileName = file.getName();

+            if( fileName.contains( EXT_SEPERATOR ) )

+            {

+                String fileExt = fileName.substring( fileName.lastIndexOf(EXT_SEPERATOR)+1 );

+                if( fileExt.equals( filterExt ) )

+                    return true;

+            }

+            return false;

+        }       

+    }

+

+}

diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/browse/ProfileStoreBrowseButton.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/browse/ProfileStoreBrowseButton.java
new file mode 100644
index 0000000..f6c4007
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/browse/ProfileStoreBrowseButton.java
@@ -0,0 +1,173 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.browse;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Widget;
+
+/**
+ * Internal class for implementing a Browse button with two 
+ * menu items - one for browsing using a path relative to
+ * the host resource folder, and the second one for 
+ * browsing using an absolute path.
+ * 
+ * @since 3.2.6 (DTP 1.9.2)
+ */
+public class ProfileStoreBrowseButton
+{
+    private static final int BUTTON_MIN_WIDTH = 80;
+    
+	private MenuButton button;
+	private Menu menu;
+
+	private IMenuButtonProvider provider;
+	private IBrowseButtonHost host;
+
+	private SelectionAdapter listener = new SelectionAdapter( ) {
+
+		public void widgetSelected( SelectionEvent e )
+		{
+			Widget widget = e.widget;
+            host.browseSelected();
+			if ( widget instanceof MenuItem )
+			{
+				provider.handleSelectionEvent( (String) widget.getData( ) );
+			}
+			else if ( widget instanceof MenuButton )
+			{
+				provider.handleSelectionEvent( ( (MenuButtonProvider) provider ).getDefaultOptionType( ) );
+			}
+		}
+
+	};
+
+	public ProfileStoreBrowseButton( Composite parent, int style,
+			IMenuButtonProvider provider, IBrowseButtonHost host)
+	{
+		this.host = host;
+		button = new MenuButton( parent, style );
+		button.addSelectionListener( listener );
+		button.addSelectionListener( new SelectionAdapter( ) {
+
+			public void widgetSelected( SelectionEvent e )
+			{
+				refreshMenuItems( );
+			}
+
+		} );
+
+		menu = new Menu( parent.getShell( ), SWT.POP_UP );
+		button.setDropDownMenu( menu );
+		button.setText( provider.getButtonText( ) );
+        button.setToolTipText( provider.getToolTipText() );
+		setMenuButtonProvider( provider );
+		refresh( );
+	}
+	
+	public void setLayoutData(Object layoutData)
+	{
+		button.setLayoutData( layoutData );	
+	}
+
+	public void refreshMenuItems( )
+	{
+		( (MenuButtonProvider) this.provider ).resetProperties( );
+		populateMenuItems( );
+	}
+
+	public void setEnabled( boolean enable )
+	{
+		button.setEnabled( enable );
+	}
+
+	public boolean isEnabled( )
+	{
+		return button.isEnabled( );
+	}
+
+	public MenuButton getControl( )
+	{
+		return button;
+	}
+
+	public IMenuButtonProvider getMenuButtonProvider()
+	{
+		return provider;
+	}
+
+	public void refresh( )
+	{
+	}
+
+	public void setMenuButtonProvider( IMenuButtonProvider provider )
+	{
+		if ( provider != null && provider != this.provider )
+		{
+			this.provider = provider;
+
+			provider.setInput( this );
+
+			populateMenuItems( );
+		}
+	}
+
+	private void populateMenuItems( )
+	{
+		for ( int i = 0; i < menu.getItemCount( ); i++ )
+		{
+			menu.getItem( i ).dispose( );
+			i--;
+		}
+
+		String[] types = this.provider.getMenuItems( );
+		for ( int i = 0; i < types.length; i++ )
+		{
+			MenuItem item = new MenuItem( menu, SWT.PUSH );
+			item.setText( provider.getMenuItemText( types[i] ) );
+			item.setData( types[i] );
+			item.setImage( this.provider.getMenuItemImage( types[i] ) );
+			item.addSelectionListener( listener );
+		}
+
+		if ( menu.getItemCount( ) <= 0 )
+		{
+			button.setDropDownMenu( null );
+		}
+		refresh( );
+	}
+
+	public void handleSelection( String path, boolean isRelative )
+	{
+		host.setProfileStorePath( path, isRelative);
+	}
+	
+	public int computeButtonWidth( )
+    {
+		return computeButtonWidth(button);
+    }
+	
+    static int computeButtonWidth( MenuButton button )
+    {
+        int defaultWidth = button.computeSize( SWT.DEFAULT, SWT.DEFAULT ).x;
+        return ( defaultWidth < BUTTON_MIN_WIDTH ) ? 
+                BUTTON_MIN_WIDTH : defaultWidth;
+    }
+	
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/browse/UIUtil.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/browse/UIUtil.java
new file mode 100644
index 0000000..17acfc8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/browse/UIUtil.java
@@ -0,0 +1,140 @@
+/*

+ *************************************************************************

+ * Copyright (c) 2011 Actuate Corporation.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *  Actuate Corporation - initial API and implementation

+ *  

+ *************************************************************************

+ */

+

+package org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.browse;

+

+import org.eclipse.swt.SWT;

+import org.eclipse.swt.graphics.GC;

+import org.eclipse.swt.graphics.Point;

+import org.eclipse.swt.graphics.RGB;

+import org.eclipse.swt.graphics.Rectangle;

+import org.eclipse.swt.widgets.Display;

+import org.eclipse.swt.widgets.Shell;

+import org.eclipse.ui.PlatformUI;

+

+/**

+ * Internal utility class.

+ * @since 3.2.6 (DTP 1.9.2)

+ */

+public class UIUtil

+{

+	/**

+	 * Blends c1 and c2 based in the provided ratio.

+	 * @param c1   first color

+	 * @param c2   second color

+	 * @param ratio percentage of the first color in the blend (0-100)

+	 * @return the RGB value of the blended color

+	 */

+	static RGB blend( RGB c1, RGB c2, int ratio )

+	{

+		int r = blend( c1.red, c2.red, ratio );

+		int g = blend( c1.green, c2.green, ratio );

+		int b = blend( c1.blue, c2.blue, ratio );

+		return new RGB( r, g, b );

+	}

+	

+	/**

+	 * Blends two primary color components based on the provided ratio.

+	 * @param v1   first component

+	 * @param v2   second component

+	 * @param ratio percentage of the first component in the blend

+	 * @return

+	 */

+	private static int blend( int v1, int v2, int ratio )

+	{

+		int b = ( ratio * v1 + ( 100 - ratio ) * v2 ) / 100;

+		return Math.min( 255, b );

+	}

+	

+	static void drawArrow( GC gc, Rectangle rect, int style )

+	{

+		Point point = new Point( rect.x + ( rect.width / 2 ), rect.y

+				+ ( rect.height / 2 ) );

+		int[] points = null;

+		switch ( style )

+		{

+			case SWT.LEFT :

+				points = new int[]{

+						point.x + 2,

+						point.y - 4,

+						point.x + 2,

+						point.y + 4,

+						point.x - 2,

+						point.y

+				};

+				gc.fillPolygon( points );

+				break;

+

+			/*

+			 * Low efficiency because of Win98 bug.

+			 */

+			case SWT.UP :

+				gc.fillRectangle( new Rectangle( point.x, point.y - 1, 1, 1 ) );

+				gc.fillRectangle( new Rectangle( point.x - 1, point.y, 3, 1 ) );

+				gc.fillRectangle( new Rectangle( point.x - 2, point.y + 1, 5, 1 ) );

+				break;

+

+			case SWT.RIGHT :

+				points = new int[]{

+						point.x - 2,

+						point.y - 4,

+						point.x - 2,

+						point.y + 4,

+						point.x + 2,

+						point.y

+				};

+				gc.fillPolygon( points );

+				break;

+

+			/*

+			 * Low efficiency because of Win98 bug.

+			 */

+			default :

+				gc.fillRectangle( new Rectangle( point.x - 2, point.y - 1, 5, 1 ) );

+				gc.fillRectangle( new Rectangle( point.x - 1, point.y, 3, 1 ) );

+				gc.fillRectangle( new Rectangle( point.x, point.y + 1, 1, 1 ) );

+				break;

+		}

+

+	}

+	

+	static Shell getDefaultShell( )

+	{

+		Shell shell = null;

+		try

+		{

+			shell = PlatformUI.getWorkbench( ).getDisplay( ).getActiveShell( );

+			if ( shell == null )

+			{

+				shell = Display.getCurrent( ).getActiveShell( );

+			}

+			if ( shell == null )

+			{

+				shell = PlatformUI.getWorkbench( )

+						.getActiveWorkbenchWindow( )

+						.getShell( );

+			}

+		}

+		catch ( Exception e )

+		{

+			//do nothing

+		}

+		if ( shell == null )

+		{

+			return new Shell( );

+		}

+		return shell;

+	}	

+

+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/db/DbProfilePageWrapper.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/db/DbProfilePageWrapper.java
new file mode 100644
index 0000000..502ab7f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/db/DbProfilePageWrapper.java
@@ -0,0 +1,146 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.db;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.ui.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSourceEditorPage;
+import org.eclipse.datatools.connectivity.oda.profile.internal.OdaConnectionProfile;
+import org.eclipse.datatools.connectivity.ui.wizards.ExtensibleProfileDetailsPropertyPage;
+import org.eclipse.datatools.connectivity.ui.wizards.ProfilePropertyPage;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * Common implementation of data source properties page controls,
+ * shared by the ODA data source wizard page and property page that wrap 
+ * a Database driver-contributed property page.
+ * @since DTP 1.6
+ */
+public class DbProfilePageWrapper 
+{
+    static final String DEFAULT_MESSAGE = Messages.dbProfilePage_defaultPageMessage; 
+
+//    private DbProfileWizardPage m_wizardPage = null;
+//    private DbProfilePropertyPage m_propertyPage = null;    
+    private ProfilePropertyPage m_wrappedPage;
+        
+    protected DbProfilePageWrapper( DbProfileWizardPage page, ProfilePropertyPage wrappedPage )
+    {
+    	assert( page != null && wrappedPage != null );
+//        m_wizardPage = page;
+        m_wrappedPage = wrappedPage;
+        init();
+    }
+
+    protected DbProfilePageWrapper( DbProfilePropertyPage page, ProfilePropertyPage wrappedPage )
+    {
+        assert( page != null && wrappedPage != null );
+//        m_propertyPage = page;
+        wrappedPage.setContainer( page.getContainer() );
+        m_wrappedPage = wrappedPage;
+        init();
+    }
+    
+    private void init()
+    {
+    }
+    
+    protected void createCustomControl( Composite parent, boolean isReadOnly ) 
+        throws OdaException
+    {
+        m_wrappedPage.createControl( parent, isReadOnly );
+    }
+
+    protected void initCustomControl( Properties profileProps )
+    {
+        // noop;
+        // a db profile page does not allow a caller to re-initialize its controls
+        // with another set of profile properties;
+        // it is up to the wrapped property page to initialize its controls based on
+        // the page's connection profile element        
+    }
+    
+    boolean hasDefaultPropertyPage()
+    {
+        return( m_wrappedPage instanceof DataSourceEditorPage );
+    }
+    
+    boolean isValid()
+    {
+        return m_wrappedPage.isValid() && isPageComplete();
+    }
+    
+    private boolean isPageComplete()
+    {
+        if( m_wrappedPage instanceof ExtensibleProfileDetailsPropertyPage )
+        {
+            // check if page is missing required properties
+            return ((ExtensibleProfileDetailsPropertyPage)m_wrappedPage).determinePageCompletion();
+        }
+        return true;    // default
+    }
+
+    String getErrorMessage()
+    {
+        return m_wrappedPage.getErrorMessage();
+    }
+    
+    /*
+     * Notifies that the OK button of the wrapped page's container has been pressed or triggered.
+     */
+    public boolean performOk() 
+    {
+        return m_wrappedPage.performOk();
+    }
+  
+    Properties collectCustomProperties( boolean isSessionEditable )
+    {
+        if( isSessionEditable )
+        {
+            // if page is missing required properties, cannot perform Ok;
+            // #performOk triggers update of the page profile element w/ 
+            // the property values changed on UI page 
+            if( isPageComplete() )
+                performOk();    
+        }
+
+        return getWrappedPageProfile().getBaseProperties(); 
+    }
+    
+    private IConnectionProfile getWrappedPageProfile() 
+    {
+        return m_wrappedPage.getConnectionProfile();
+    }
+    
+    String getDbProfileProviderId()
+    {
+        IConnectionProfile connProfile = getWrappedPageProfile();
+        if( connProfile instanceof OdaConnectionProfile )
+            return ((OdaConnectionProfile) connProfile ).getDirectProviderId();
+
+        return null;
+    }
+
+    void cleanup()
+    {
+        IConnectionProfile propertyPageProfile = getWrappedPageProfile();
+        if( propertyPageProfile instanceof OdaConnectionProfile )
+            ((OdaConnectionProfile) propertyPageProfile ).close();       
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/db/DbProfilePropertyPage.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/db/DbProfilePropertyPage.java
new file mode 100644
index 0000000..ed9b111
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/db/DbProfilePropertyPage.java
@@ -0,0 +1,404 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.db;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.ConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.OdaDesignSession;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.AdaptableDataSourceProfile;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.ProfileSelectionEditorPage;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.ProfileSelectionEditorPage.IUpdateDesignTask;
+import org.eclipse.datatools.connectivity.oda.design.ui.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.design.ui.pages.impl.DefaultDataSourcePropertyPage;
+import org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSourceEditorPage;
+import org.eclipse.datatools.connectivity.oda.profile.internal.OdaConnectionProfile;
+import org.eclipse.datatools.connectivity.oda.profile.internal.OdaProfileFactory;
+import org.eclipse.datatools.connectivity.ui.wizards.ProfilePropertyPage;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * The base class implementation of an ODA data source editor page that wraps 
+ * the driver-contributed property page of a Database connection profile type.
+ * @since DTP 1.6
+ */
+public class DbProfilePropertyPage extends DataSourceEditorPage
+{
+    private DbProfilePageWrapper m_pageHelper = null;
+    private IUpdateDesignTask m_profileUpdateDesignTask;
+    private boolean m_canEditProps = true;
+
+    public DbProfilePropertyPage()
+    {
+        super();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ui.profile.wizards.DataSourceEditorPage#createAndInitCustomControl(org.eclipse.swt.widgets.Composite, java.util.Properties)
+     */
+    protected void createAndInitCustomControl( Composite parent, Properties profileProps )
+    {
+        if( m_pageHelper == null )
+            m_pageHelper = createDbProfilePageWrapper();
+
+        if( m_pageHelper != null )
+        {
+            try
+            {
+                // specifies isReadOnly option based on the editable session state
+                m_pageHelper.createCustomControl( parent, ! isSessionEditable() );
+            }
+            catch( OdaException e )
+            {
+                e.printStackTrace();
+            }
+            
+            m_pageHelper.initCustomControl( profileProps );
+        }
+        else  // could not create a db profile page
+        {
+            // use the default oda property page instead
+            DataSourceEditorPage odaDefaultPage = 
+                createDefaultPropertyPage( profileProps );
+            odaDefaultPage.createControl( parent );
+            m_pageHelper = new DbProfilePageWrapper( this, odaDefaultPage );
+        }
+        
+        // hide this page's button when it is created; the wrapped property page's button 
+        // is used instead
+        setPingButtonVisible( false );              
+    }
+    
+    /**
+     * Instantiates the page helper that provides core implementation
+     * of this wizard page.
+     * @return
+     */
+    protected DbProfilePageWrapper createDbProfilePageWrapper()
+    {
+        IConnectionProfile pageProfile = getConnectionProfile();
+        
+        IConnectionProfile customDbPropPageProfile = pageProfile;   // use the same profile by default
+
+        // if no wrapped db profile and no reference to external profile, 
+        // try create a transient db profile instance if the minimum required property is known
+        if( ! hasLinkedProfileInPageElement() &&
+            ! getEditingDataSource().hasLinkToProfile() )
+        {
+            Properties pageProps = pageProfile.getBaseProperties();
+            if( hasMinimumProperties( pageProps ) )
+                customDbPropPageProfile = createTransientProfile( pageProps );
+            else    // missing required properties to edit 
+                m_canEditProps = false;
+        }
+
+        if( customDbPropPageProfile == null )
+            return null;
+
+        OdaConnectionProfile customPageOdaDbProfile = ( customDbPropPageProfile instanceof OdaConnectionProfile ) ?
+                                (OdaConnectionProfile) customDbPropPageProfile :
+                                new OdaConnectionProfile( customDbPropPageProfile );
+
+        // create the db profile's custom property page contribution for its wrapper
+        ProfilePropertyPage customDbPropPage = 
+            DbProfileUtil.createDbPropertyPage( customPageOdaDbProfile, getOdaDataSourceId() );       
+        if( customDbPropPage == null )
+            return null;
+        
+        String pageMsg = m_canEditProps && isSessionEditable() ? 
+                Messages.dbProfilePage_editPageMessage : DbProfilePageWrapper.DEFAULT_MESSAGE;
+        setMessage( pageMsg );
+        
+        // wraps the db profile property page in an ODA data source page        
+        return new DbProfilePageWrapper( this, customDbPropPage );
+    }
+
+    /**
+     * Create a transient db profile with the specified properties.
+     * @param connProperties
+     * @return
+     * @since 3.2.2 (DTP 1.7.2)
+     */
+    protected IConnectionProfile createTransientProfile( Properties connProperties )
+    {
+        // the data source being edited may have no reference to an external profile store,
+        // and contains local profile properties only;
+        // try create a transient profile from the data source connection properties
+        try
+        {
+            return OdaProfileFactory.createTransientProfile( connProperties );
+        }
+        catch( OdaException ex )
+        {
+            // ignore
+        }
+        return null;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSourceEditorPage#cleanup()
+     */
+    @Override
+    protected void cleanup()
+    {
+        super.cleanup();
+        if( m_pageHelper == null )
+            return;     // nothing to clean up
+        // cleanup transient profile, if exists
+        m_pageHelper.cleanup();
+    }
+
+    /*
+     * Creates a default property page with a warning/error message.
+     */
+    private DataSourceEditorPage createDefaultPropertyPage( Properties profileProps )
+    {
+        DefaultDataSourcePropertyPage defaultPropPage = new DefaultDataSourcePropertyPage();
+        String errorMessage = isInOdaDesignSession() ? 
+                ( m_canEditProps ? 
+                        Messages.dbProfilePage_noCustomPage : 
+                        Messages.dbProfilePage_invalidDataSource ) :
+                Messages.dbProfilePage_notInDesignSession;
+
+        /*
+         * Update page's initialized DataSourceDesign with specified profileProps, 
+         * so that the page can create controls with the profileProps values.
+         */
+        OdaDesignSession requestSession = getDesignSession();
+        if( requestSession.getRequestDataSourceDesign() != null &&
+            ! requestSession.getRequestDataSourceDesign().hasLinkToProfile() )  // editing local properties
+        {
+            // makes a copy of the request session to update the data source design w/ local profileProps
+            requestSession = (OdaDesignSession) EcoreUtil.copy( requestSession );
+
+            DataSourceDesign localRequestDesign = requestSession.getRequestDataSourceDesign();
+            try
+            {
+                super.setDataSourceDesignProperties( localRequestDesign, profileProps );
+            }
+            catch( OdaException ex )
+            {
+                errorMessage += "\n"; //$NON-NLS-1$
+                errorMessage += ex.toString();
+            }
+        }
+        
+        try
+        {
+            defaultPropPage.initEditSession( requestSession );
+        }
+        catch( OdaException ex )
+        {
+            errorMessage += "\n"; //$NON-NLS-1$
+            errorMessage += ex.toString();
+        }
+
+        int messageType = m_canEditProps ? IMessageProvider.WARNING : IMessageProvider.ERROR;
+        setMessage( errorMessage, messageType );       
+        
+        // missing required properties to test connection
+        if( ! m_canEditProps )
+            defaultPropPage.setPingButtonEnabled( false );
+        
+        return defaultPropPage;
+    }
+    
+    /**
+     * Returns the page helper that provides core implementation
+     * for this wizard page.
+     */
+    protected DbProfilePageWrapper getPageHelper()
+    {
+        return m_pageHelper;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.dialogs.DialogPage#getErrorMessage()
+     */
+    @Override
+    public String getErrorMessage()
+    {
+        return m_pageHelper != null ? m_pageHelper.getErrorMessage() : super.getErrorMessage();
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSourceEditorPage#refresh(java.util.Properties)
+     */
+    protected void refresh( Properties customConnectionProps  )
+    {
+        // no-op;
+        // a db profile page does not allow a caller to re-initialize its controls
+        // with another set of profile properties; and
+        // the editable session state is handled when custom control is first created
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ui.profile.wizards.DataSourceEditorPage#collectCustomProperties(java.util.Properties)
+     */
+    public Properties collectCustomProperties( Properties profileProps )
+    {
+        if( m_pageHelper == null )
+            return profileProps;
+
+        // gets a copy of the profile's base properties
+        Properties dbProfileProps =
+            m_pageHelper.collectCustomProperties( isSessionEditable() );
+        
+        // reset/add the db profile provider id to the base properties 
+        // collected from a connection profile instance
+        DbProfileUtil.setDbProviderIdInProperties( dbProfileProps, getDbProfileProviderId() );
+        
+        return dbProfileProps;
+    }
+    
+    String getDbProfileProviderId()
+    {
+        if( m_pageHelper == null ) 
+            return null;
+        return m_pageHelper.getDbProfileProviderId();
+    }
+    
+    private boolean hasLinkedProfileInPageElement()
+    {
+        AdaptableDataSourceProfile pageProfile = getProfileElement();
+        return ( pageProfile != null && pageProfile.hasLinkedProfile() );
+    }
+    
+    private static boolean hasMinimumProperties( Properties props )
+    {
+        // check that the properties contain at least the driver definition id
+        return( props.getProperty( ConnectionProfileConstants.PROP_DRIVER_DEFINITION_ID ) != null );
+    }
+    
+    /**
+     * Indicates whether this property page is editing an externalized 
+     * connection profile instance.
+     * @return  true if page refers to an external connection profile instance; false 
+     *          if editing a local data source design with profile properties
+     * @since 3.2.2 (DTP 1.7.2)
+     */
+    protected boolean isEditingExternalProfile()
+    {
+        return hasLinkedProfileInPageElement();
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.ui.DataSourceEditorPageCore#setDataSourceDesignProperties(org.eclipse.datatools.connectivity.oda.design.DataSourceDesign, java.util.Properties)
+     *
+     * Overrides base class behavior to assign relevant custom profile properties
+     * as private properties in the specified data source design.  
+     * This is for use by an ODA extension that serves as a wrapper of 
+     * other connection profiles, and has no pre-defined property definition 
+     * in its manifest.
+     */
+    protected void setDataSourceDesignProperties( DataSourceDesign design,
+            Properties propertyValuePairs ) 
+        throws OdaException
+    {
+        // if external profile reference is required, do not import profile properties into the design
+        if( getUpdateDesignTask().requiresExternalProfile() )
+            DbProfileUtil.updateDataSourceDesignExternalProfileProvider( design, propertyValuePairs );
+        else
+            super.setDataSourceDesignProperties( design, propertyValuePairs );
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.ui.DataSourceEditorPageCore#initProfileSelectionEditSession(org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.ProfileSelectionEditorPage)
+     */
+    public void initProfileSelectionEditSession( ProfileSelectionEditorPage profileSelectionPage )
+    {
+        if( profileSelectionPage == null )
+            return;     // nothing to initialize
+
+        // override the profile page update design task
+        profileSelectionPage.delegatesTask( getProfileSelectionUpdateDesignTask() );
+    }
+    
+    private ProfileSelectionEditorPage.IUpdateDesignTask getProfileSelectionUpdateDesignTask()
+    {
+        if( m_profileUpdateDesignTask == null )
+        {
+            m_profileUpdateDesignTask = new UpdateDesignTask();
+        }
+        return m_profileUpdateDesignTask;
+    }
+    
+    private UpdateDesignTask getUpdateDesignTask()
+    {
+        return (UpdateDesignTask) getProfileSelectionUpdateDesignTask();
+    }
+    
+    class UpdateDesignTask implements ProfileSelectionEditorPage.IUpdateDesignTask
+    {
+        private ProfileSelectionEditorPage m_delegator;
+        
+        /* (non-Javadoc)
+         * @see org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.ProfileSelectionEditorPage.IUpdateDesignTask#collectDataSourceDesign(org.eclipse.datatools.connectivity.oda.design.DataSourceDesign, org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.ProfileSelectionEditorPage, org.eclipse.datatools.connectivity.IConnectionProfile)
+         */
+        public DataSourceDesign collectDataSourceDesign( DataSourceDesign design, 
+                                    final ProfileSelectionEditorPage delegator,
+                                    final IConnectionProfile selectedConnProfile )
+            throws OdaException
+        {
+            if( selectedConnProfile == null )
+                return design;  // no info to collect for update
+
+            m_delegator = delegator;
+            Properties customProps = collectCustomProperties( selectedConnProfile );
+            
+            setDataSourceDesignProperties( design, customProps );
+            m_delegator = null;     // done with delegated collection of properties; reset
+
+            return design;
+        }
+        
+        private Properties collectCustomProperties( 
+                                IConnectionProfile selectedConnProfile )
+        {
+            // first get a copy of the selected profile's properties
+            Properties customProps = selectedConnProfile.getBaseProperties();
+
+            // add the db profile provider id to the base properties 
+            // collected from the selected connection profile instance
+            String dbProfileProviderId = getDbProfileProviderId( selectedConnProfile );
+            DbProfileUtil.setDbProviderIdInProperties( customProps, dbProfileProviderId );
+
+            return customProps;
+        }
+        
+        private String getDbProfileProviderId( IConnectionProfile connProfile )
+        {
+            if( connProfile instanceof OdaConnectionProfile )
+                return ((OdaConnectionProfile) connProfile ).getDirectProviderId();
+            return null;
+        }        
+        
+        private boolean requiresExternalProfile()
+        {
+            if( m_delegator == null )
+                return false;    // not being delegated to collect selected profile's data source properties
+            return m_delegator.requiresExternalProfileLink();
+        }
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/db/DbProfileUtil.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/db/DbProfileUtil.java
new file mode 100644
index 0000000..7ab01cc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/db/DbProfileUtil.java
@@ -0,0 +1,136 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.db;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.internal.ui.ProfileUIManager;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.util.DesignUtil;
+import org.eclipse.datatools.connectivity.oda.profile.Constants;
+import org.eclipse.datatools.connectivity.oda.profile.internal.OdaConnectionProfile;
+import org.eclipse.datatools.connectivity.ui.wizards.ProfilePropertyPage;
+
+/**
+ *  Utility class for the Database Connection Profile UI wrappers.
+ */
+public class DbProfileUtil
+{
+    private static final String DB_PROFILE_PROVIDER_ID = Constants.DB_PROFILE_PROVIDER_ID;
+    /**
+     * Obtains the provider id of the db connection profile type from the 
+     * specified ODA connection profile's properties.
+     * @param odaProfile
+     * @return  may be null if no such property
+     */
+    static String getDbProviderIdFromProfileProperties( OdaConnectionProfile odaDbProfile )
+    {
+        Properties profileProps = odaDbProfile.getBaseProperties();
+        return profileProps.getProperty( DB_PROFILE_PROVIDER_ID );
+    }
+
+    /**
+     * Set/reset the specified db profile provider id to the 
+     * specified properties.
+     */
+    static void setDbProviderIdInProperties( Properties dbProfileProps,
+            String dbProviderId )
+    {
+        if( dbProfileProps != null && dbProviderId != null )
+            dbProfileProps.setProperty( DB_PROFILE_PROVIDER_ID, dbProviderId );   
+    }
+    
+    /**
+     * Creates and returns the db driver contributed property page
+     * of the db connection profile type wrapped in the specified
+     * ODA connection profile.
+     * @param odaDbProfile
+     * @param odaWrapperExtensionId
+     * @return
+     */
+    static ProfilePropertyPage createDbPropertyPage( 
+            OdaConnectionProfile odaDbProfile,
+            String odaWrapperExtensionId )
+    {   
+        if( ! odaDbProfile.hasWrappedProfile() )
+            return null;    // cannot create page if no wrapped db profile
+        
+        updateProfileDbProviderInfo( odaDbProfile, odaWrapperExtensionId );
+        
+        // create the db profile's custom property page contribution
+        odaDbProfile.setHideWrapperId( true );
+        return ProfileUIManager.createPropertyPage( odaDbProfile );        
+    }
+
+    /**
+     * Assigns the db profile's provider info in the specified
+     * ODA connection profile. 
+     * @param odaDbProfile
+     * @param odaWrapperExtensionId
+     * @return  the updated connection profile
+     */
+    private static void updateProfileDbProviderInfo( 
+            OdaConnectionProfile odaDbProfile,
+            String odaWrapperExtensionId )
+    {
+        String dbProviderId = getDbProviderIdFromProfileProperties( odaDbProfile );
+        odaDbProfile.setDirectProviderId( dbProviderId );
+
+        odaDbProfile.setOdaWrapperExtensionId( odaWrapperExtensionId );
+    }
+    
+    /**
+     * Updates the specified data source design instance with the 
+     * db provider id in the specified db connection profile properties.
+     * All other profile properties are excluded from the data source design.
+     * @param design
+     * @param dbPropertyValues
+     * @throws OdaException
+     */
+    static void updateDataSourceDesignExternalProfileProvider(
+                    DataSourceDesign design,
+                    Properties dbPropertyValues ) 
+        throws OdaException
+    {
+        if( dbPropertyValues == null || dbPropertyValues.isEmpty() )
+            return;     // nothing to set
+        
+        // if a data source design uses an external profile reference, 
+        // do not import the profile's base properties into the design definition;
+        // only the db provider id info is applied as a private property
+        updateDbProviderIdInDesign( design, dbPropertyValues );
+    }
+    
+    /**
+     * Copies the db provider id as a private property in the design.
+     */
+    private static void updateDbProviderIdInDesign( 
+            DataSourceDesign design,
+            Properties dbPropertyValues ) 
+    {
+        String dbProviderIdKey = DB_PROFILE_PROVIDER_ID;
+        if( dbPropertyValues.containsKey( dbProviderIdKey ) )
+        {
+            Properties designProps = new Properties();
+            designProps.setProperty( dbProviderIdKey, 
+                    dbPropertyValues.getProperty( dbProviderIdKey ) );
+
+            design.setPrivateProperties( 
+                    DesignUtil.convertToDesignProperties( designProps ) );
+        }
+    }
+   
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/db/DbProfileWizardPage.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/db/DbProfileWizardPage.java
new file mode 100644
index 0000000..2d7d817
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/db/DbProfileWizardPage.java
@@ -0,0 +1,146 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.db;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSourceWizardPage;
+import org.eclipse.datatools.connectivity.ui.wizards.ProfilePropertyPage;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * The base class implementation of an ODA data source wizard page that wraps 
+ * the driver-contributed property page of a Database connection profile type.
+ * @since DTP 1.6
+ */
+public class DbProfileWizardPage extends DataSourceWizardPage
+{
+    private DbProfilePageWrapper m_pageHelper = null;
+    private Properties m_dataSourceProps = null;
+    private ProfilePropertyPage m_wrappedPage;
+
+    public DbProfileWizardPage( String pageName, ProfilePropertyPage dbPropertyPage )
+    {
+        super( pageName );
+
+        // expects argument to be not null
+        m_wrappedPage = dbPropertyPage;
+        setTitle( m_wrappedPage.getConnectionProfile().getName() );
+        setMessage( DbProfilePageWrapper.DEFAULT_MESSAGE );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ui.profile.wizards.DataSourceWizardPage#createPageCustomControl(org.eclipse.swt.widgets.Composite)
+     */
+    public void createPageCustomControl( Composite parent )
+    {
+        if( m_pageHelper == null )
+            m_pageHelper = createDataSourcePageWrapper( );
+        
+        try
+        {
+            // specifies isReadOnly option based on the editable session state
+            m_pageHelper.createCustomControl( parent, ! isSessionEditable() );
+        }
+        catch( OdaException e )
+        {
+            e.printStackTrace();
+        }
+        
+        m_pageHelper.initCustomControl( m_dataSourceProps );   // in case init was called before create         
+        
+        // hide the wizard page's button when it is created; the wrapped property page's button is used instead
+        setPingButtonVisible( false );  
+    }
+    
+    /**
+     * Instantiates the page helper that provides core implementation
+     * of this wizard page.
+     * @return
+     */
+    protected DbProfilePageWrapper createDataSourcePageWrapper( )
+    {
+        return new DbProfilePageWrapper( this, m_wrappedPage );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ui.profile.wizards.DataSourceWizardPage#initPageCustomControl(java.util.Properties)
+     */
+    public void setInitialProperties( Properties dataSourceProps )
+    {
+        m_dataSourceProps = dataSourceProps;
+        if( m_pageHelper != null )
+            m_pageHelper.initCustomControl( m_dataSourceProps );        
+        // ignore if m_pageHelper is null, wait till createPageCustomControl to initialize
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSourceWizardPage#refresh()
+     */
+    public void refresh()
+    {
+        // noop;
+        // the editable session state is handled when custom control is first created
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ui.profile.wizards.DataSourceWizardPage#collectCustomProperties()
+     */
+    public Properties collectCustomProperties()
+    {
+        if( m_pageHelper != null ) 
+        {
+            boolean isSessionEditable = false;
+            if( getWizard() instanceof NewDbDataSourceWizardBase )
+                isSessionEditable = ! ((NewDbDataSourceWizardBase)getWizard()).isCreatingFromProfile();
+
+            return  m_pageHelper.collectCustomProperties( isSessionEditable );
+        }
+
+        return ( m_dataSourceProps != null ) ?
+                    m_dataSourceProps : new Properties();
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.ui.DataSourceWizardPageCore#getNextPage()
+     */
+    public IWizardPage getNextPage()
+    {
+        // ODA data source designer supports a single property page only
+        return null;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.wizard.WizardPage#isPageComplete()
+     */
+    public boolean isPageComplete()
+    {
+        if( m_pageHelper == null ) 
+            return super.isPageComplete();
+        return m_pageHelper.isValid();
+    }
+    
+    String getDbProfileProviderId()
+    {
+        if( m_pageHelper == null ) 
+            return null;
+        return m_pageHelper.getDbProfileProviderId();
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/db/DbTypesSelectionPage.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/db/DbTypesSelectionPage.java
new file mode 100644
index 0000000..f68c3b1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/db/DbTypesSelectionPage.java
@@ -0,0 +1,161 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.db;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.internal.ui.wizards.CPWizardNode;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.CPWizardSelectionPage;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.NewCPWizardCategoryFilter;
+import org.eclipse.datatools.connectivity.oda.profile.Constants;
+import org.eclipse.datatools.connectivity.ui.wizards.ConnectionProfileDetailsPage;
+import org.eclipse.datatools.connectivity.ui.wizards.IProfileWizardProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * An extended Connection Profile Type Selection Page for use by 
+ * the NewDbDataSourceWizardBase.
+ * It wraps each of the DB connection profile type wizard node into an ODA extended one.
+ */
+public class DbTypesSelectionPage extends CPWizardSelectionPage
+{
+    
+    private static final ViewerFilter[] sm_viewerFilters = new ViewerFilter[]
+    { 
+        // primary filter to include those under the Databases profile category
+        new NewCPWizardCategoryFilter( Constants.DATABASE_CATEGORY_ID ),
+        // secondary filter to hide all db profile types that use NewDbDataSourceWizardBase, 
+        // which is the client of this page
+        new DbProfileWizardFilter()
+    };
+    
+    DbTypesSelectionPage()
+    {        
+        super( DbTypesSelectionPage.class.getName(), sm_viewerFilters );
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.internal.ui.wizards.CPWizardSelectionPage#getCategoryItems(java.lang.String)
+     * @Override    takes each CPWizardNode returned by the base class method
+     *  and wraps in an ODA-extended node.
+     */
+    public List getCategoryItems( String wizardCategory ) 
+    {
+        List baseWizardNodes = super.getCategoryItems( wizardCategory );
+        if( baseWizardNodes == null || baseWizardNodes.isEmpty() )
+            return baseWizardNodes;
+        
+        assert( getWizard() instanceof NewDbDataSourceWizardBase );
+        NewDbDataSourceWizardBase sessionWizard = (NewDbDataSourceWizardBase) getWizard();
+        
+        List<Object> wrappedWizardNodes = new ArrayList<Object>();
+        Iterator iter = baseWizardNodes.iterator();
+        while( iter.hasNext() )
+        {
+            Object wizardNode = iter.next();
+            if( wizardNode.getClass() == CPWizardNode.class )
+            {
+                wizardNode = new OdaDbProfileWizardNode( 
+                        ((CPWizardNode) wizardNode ).getProvider(),
+                        sessionWizard );
+            }
+            wrappedWizardNodes.add( wizardNode );
+        }
+        return wrappedWizardNodes;
+    }
+          
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.internal.ui.wizards.CPWizardSelectionPage#createControl(org.eclipse.swt.widgets.Composite)
+     */
+    @Override
+    public void createControl( Composite parent )
+    {       
+        super.createControl( parent );
+        
+        // hide the profile info controls whose conflicting values are ignored anyway
+        setProfileNameVisible( false );
+        setProfileDescriptionVisible( false );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.internal.ui.wizards.CPWizardSelectionPage#getNextPage()
+     */
+    @Override
+    public IWizardPage getNextPage()
+    {
+        boolean arePageControlsCreated = getSelectedNode() != null && getSelectedNode().isContentCreated();
+
+        IWizardPage wizardPage = super.getNextPage();
+        
+        if( ! arePageControlsCreated && wizardPage instanceof ConnectionProfileDetailsPage )
+        {
+            ((ConnectionProfileDetailsPage)wizardPage).setCreateAutoConnectControls( false );
+        }
+        return wizardPage;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.wizard.WizardPage#isPageComplete()
+     */
+    public boolean isPageComplete()
+    {
+        if( super.isPageComplete() )
+            return true;
+        if( getSelectedNode() != null )
+        {
+            IWizard cpNodeWizard = getSelectedNodeWizard();
+            return cpNodeWizard != null && cpNodeWizard.canFinish();
+        }
+        
+        return false;
+    }
+    
+    IWizard getSelectedNodeWizard()
+    {
+        if( getSelectedNode() == null )
+            return null;
+        return getSelectedNode().getWizard();
+    }
+
+    /**
+     * Filter to hide any NewDbDataSourceWizardBase nodes from 
+     * this profile wizard selection page.
+     */
+    static class DbProfileWizardFilter extends ViewerFilter
+    {
+        public boolean select( Viewer viewer, Object parentElement, Object element ) 
+        {
+            if( ! ( element instanceof CPWizardNode ))
+                return true;
+            
+            CPWizardNode wizardNode = (CPWizardNode) element;
+            if( ! ( wizardNode.getProvider() instanceof IProfileWizardProvider ))
+                return true;
+                
+            IProfileWizardProvider profileWizProvider = wizardNode.getProvider();
+            IWizard profileWizard = profileWizProvider.getWizard();
+            boolean dbWrapperWizard = ( profileWizard instanceof NewDbDataSourceWizardBase );
+            return ! dbWrapperWizard;  // hide if using a db profile wrapper wizard
+        }
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/db/NewDbDataSourceWizardBase.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/db/NewDbDataSourceWizardBase.java
new file mode 100644
index 0000000..953c01c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/db/NewDbDataSourceWizardBase.java
@@ -0,0 +1,228 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007, 2013 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.db;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.internal.designsession.DataSourceDesignSessionBase.ProfileReferenceBase;
+import org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSourceWizardPage;
+import org.eclipse.datatools.connectivity.oda.design.ui.wizards.NewDataSourceWizard;
+import org.eclipse.datatools.connectivity.oda.profile.internal.OdaConnectionProfile;
+import org.eclipse.datatools.connectivity.ui.wizards.NewConnectionProfileWizard;
+import org.eclipse.datatools.connectivity.ui.wizards.ProfilePropertyPage;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.jface.wizard.IWizardPage;
+
+/**
+ * The base class implementation of an ODA data source wizard that manages 
+ * the driver-contributed wizard page of a Database connection profile type.
+ */
+public class NewDbDataSourceWizardBase extends NewDataSourceWizard
+{
+    private DbTypesSelectionPage m_dbSelectionPage;
+    private DbProfileWizardPage m_dbProfileWizPage;
+    
+    protected NewDbDataSourceWizardBase( String odaDataSourceId )
+        throws OdaException
+    {
+        super( odaDataSourceId );
+    }
+
+    protected NewDbDataSourceWizardBase()
+    {
+        super();
+    }
+    
+    @Override
+    public boolean isValid( String odaDataSourceId, ProfileReferenceBase profileRef )
+    {
+        if( ! getOdaDataSourceId().equals( odaDataSourceId ) )
+            return false;
+        
+        if( getPageCount() == 0 )   // no wizard page is setup yet, 
+            return true;            // still open to any type of handling 
+        
+        // if not creating from a profile, wizard must be setup to select a db profile type
+        IConnectionProfile odaProfile = ( profileRef == null || ! profileRef.maintainExternalLink() ) ? 
+                                        null : 
+                                        profileRef.getProfileInstance();
+        if( odaProfile == null )
+            return ( m_dbSelectionPage != null );
+        
+        // creating from a profile reference, expects existing page to be a profile wizard page
+        if( m_dbProfileWizPage == null )
+            return false;
+
+        if( ! (odaProfile instanceof OdaConnectionProfile) )
+            return false;
+
+        // check if existing db profile wizard page is setup for the specified db profile type
+        String dbProviderId = DbProfileUtil.getDbProviderIdFromProfileProperties( (OdaConnectionProfile)odaProfile );
+        if( dbProviderId == null )
+            dbProviderId = odaProfile.getProviderId();
+        if( ! dbProviderId.equals( m_dbProfileWizPage.getDbProfileProviderId() ))
+            return false;   // not the same db profile provider
+        
+        // does have a matching page contribution that handles the same db profile type;
+        // but since a db profile page does not allow a caller to re-initialize its controls
+        // with another set of profile properties,
+        // can only reuse if wizard is either not currently editing a profile, or 
+        // editing the same profile instance
+        if( ! hasLinkToProfile() )
+            return true;
+        
+        return ( odaProfile.equals( getLinkedProfile() ));
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.ui.NewDataSourceWizardBase#addPages()
+     */
+    public void addPages()
+    {
+        super.addPages();
+        
+        // always hide the profile name page that preceeds the DbTypesSelectionPage
+        setSkipProfileNamePage( true );
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.ui.NewDataSourceWizardBase#addCustomPages()
+     */
+    public void addCustomPages()
+    {
+        // tries to create a new data source from a linked db profile instance
+        if( hasLinkToProfile() )
+        {        
+            IConnectionProfile selectedProfile = getLinkedProfile();
+            if( selectedProfile instanceof OdaConnectionProfile )
+            {
+                m_dbProfileWizPage = createDbProfileWizardPage( (OdaConnectionProfile) selectedProfile );
+                if( m_dbProfileWizPage != null )
+                {
+                    addPage( m_dbProfileWizPage );          
+                    return;     // done
+                }
+            }
+
+            // not able to use the custom profile page for the referenecd profile;
+            // falls through to ask user to select a db profile type
+            // TODO raise user warning
+
+        }
+        
+        // no db profile instance to create from,
+        // ask user to select a db profile type instead
+        addPage( getDbProfileTypesSelectionPage() );
+    }
+    
+    private DbTypesSelectionPage getDbProfileTypesSelectionPage()
+    {
+        if( m_dbSelectionPage == null )
+            m_dbSelectionPage = new DbTypesSelectionPage();
+        return m_dbSelectionPage;        
+    }
+
+    private DbProfileWizardPage getDbProfileWizardPage()
+    {
+        return m_dbProfileWizPage;
+    }
+    
+    protected boolean isCreatingFromProfile()
+    {
+        return hasLinkToProfile() && getDbProfileWizardPage() != null;
+    }
+    
+    private DbProfileWizardPage createDbProfileWizardPage( OdaConnectionProfile odaDbProfile )
+    {
+        assert( odaDbProfile != null );
+
+        // create the db profile's custom property page contribution and its wrapper
+        ProfilePropertyPage customDbPropPage = 
+            DbProfileUtil.createDbPropertyPage( odaDbProfile, getOdaDataSourceId() );
+            
+        if( customDbPropPage == null )
+            return null; 
+
+        // wraps the db profile property page in an ODA data source wizard page        
+        return new DbProfileWizardPage( customDbPropPage.getTitle(), customDbPropPage );
+    }
+        
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.ui.NewDataSourceWizardBase#getCustomStartingPage()
+     */
+    public IWizardPage getCustomStartingPage()
+    {
+        IWizardPage customPage = getCustomWizardPage();
+        if( customPage != null )
+            return customPage;
+
+        // no db profile specific page, 
+        // use the page that asks user to select a db profile type instead
+        return getDbProfileTypesSelectionPage();
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.ui.NewDataSourceWizardBase#getCustomWizardPage()
+     */
+    protected DataSourceWizardPage getCustomWizardPage()
+    {
+        // override; the custom page is not created from an ODA manifest configuration element
+        if( isCreatingFromProfile() )
+            return getDbProfileWizardPage();
+        return null;    // the DbTypesSelectionPage is not a DataSourceWizardPage
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.ui.NewDataSourceWizardBase#collectCustomProperties()
+     */
+    protected Properties collectCustomProperties()
+    {
+        Properties dbProfileProps;
+        String dbProviderId = null;
+        
+        if( isCreatingFromProfile() )
+        {
+            dbProfileProps = getDbProfileWizardPage().collectCustomProperties();
+            dbProviderId = getDbProfileWizardPage().getDbProfileProviderId();
+        }
+        else    // not creating from an existing db profile instance
+        {
+            IWizard cpNodeWizard = getDbProfileTypesSelectionPage().getSelectedNodeWizard();
+            if( ! (cpNodeWizard instanceof NewConnectionProfileWizard ) )
+                return new Properties();
+            
+            // use the custom db wizard to collect profile properties from its page
+            NewConnectionProfileWizard castedCpNodeWizard = 
+                                (NewConnectionProfileWizard) cpNodeWizard;
+            dbProfileProps = castedCpNodeWizard.getProfileProperties();
+            dbProviderId = castedCpNodeWizard.getProfileProviderID();
+        }
+        
+        // add the db profile provider id to the base properties collected
+        // from a connection profile instance
+        if( dbProfileProps == null )
+            dbProfileProps = new Properties();
+        DbProfileUtil.setDbProviderIdInProperties( dbProfileProps, dbProviderId );
+        return dbProfileProps;
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/db/OdaDbProfileWizardNode.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/db/OdaDbProfileWizardNode.java
new file mode 100644
index 0000000..f9e5c3a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/db/OdaDbProfileWizardNode.java
@@ -0,0 +1,96 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.db;
+
+import org.eclipse.datatools.connectivity.internal.ui.wizards.CPWizardNode;
+import org.eclipse.datatools.connectivity.ui.wizards.IProfileWizardProvider;
+import org.eclipse.datatools.connectivity.ui.wizards.NewConnectionProfileWizard;
+import org.eclipse.jface.wizard.IWizard;
+
+/**
+ * An extended Connection Profile Wizard Node which modifies
+ * the behavior of a DB connection profile node's wizard.
+ */
+public class OdaDbProfileWizardNode extends CPWizardNode
+{        
+    private NewDbDataSourceWizardBase m_sessionWizard;
+    private NewConnectionProfileWizard.IFinishTask m_sessionFinishTask;
+    
+    public OdaDbProfileWizardNode( IProfileWizardProvider provider, NewDbDataSourceWizardBase wizard )
+    {
+        super( provider );
+        
+        assert( m_sessionWizard != null );
+        m_sessionWizard = wizard;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.internal.ui.wizards.CPWizardNode#createWizard()
+     */
+    protected IWizard createWizard() 
+    {
+        IWizard nodeWizard = super.createWizard();
+        if( nodeWizard instanceof NewConnectionProfileWizard )
+        {
+            NewConnectionProfileWizard cpWizard = (NewConnectionProfileWizard) nodeWizard;
+            if( m_sessionWizard.isInOdaDesignSession() )
+            {
+                // profile name is provided by the ODA host, instead of from the profile wizard
+                cpWizard.setProfileName( m_sessionWizard.getProfileName() );
+                cpWizard.setSkipProfileNamePage( true );
+            }
+            cpWizard.delegatesTask( getOdaSessionFinishTask() );
+        }
+        else
+        {
+            // TODO log warning about possible side-effect
+        }
+        
+        return nodeWizard;
+    }
+    
+    private NewConnectionProfileWizard.IFinishTask getOdaSessionFinishTask()
+    {
+        if( m_sessionFinishTask == null )
+        {
+            m_sessionFinishTask = 
+                new NewConnectionProfileWizard.IFinishTask()
+                {
+                    public boolean performFinish( NewConnectionProfileWizard delegatingWizard )
+                    {
+                        if( m_sessionWizard == null )  
+                            // TODO log warning
+                            return false;   // not able to delegate
+                        
+                        // if current wizard takes user input values in its profile page,
+                        // copy its page values to the session wizard's profile page for use at finish
+                        if( ! delegatingWizard.isProfileNamePageSkippable() ) 
+                        {
+                            m_sessionWizard.setProfilePageProperties( 
+                                    delegatingWizard.getProfileName(), 
+                                    delegatingWizard.getProfileDescription(), 
+                                    Boolean.valueOf( delegatingWizard.getProfileIsAutoConnect() ), 
+                                    null );     
+                        }
+                        
+                        return m_sessionWizard.performFinish();
+                    }
+                };
+        }
+        return m_sessionFinishTask;
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/filter/NewProfileAction.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/filter/NewProfileAction.java
new file mode 100644
index 0000000..13a58a9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/filter/NewProfileAction.java
@@ -0,0 +1,76 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.filter;
+
+import java.util.ArrayList;
+
+import org.eclipse.datatools.connectivity.ui.actions.AddProfileViewAction;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * Extends the DTP Data Source Explorer's default Add Profile Action
+ * to hide deprecated and wrapper ODA data source types from the New Connection Profile dialog.
+ */
+public class NewProfileAction extends AddProfileViewAction
+{
+    private ViewerFilter m_profileFilter;
+
+    public NewProfileAction()
+    {
+        super();
+    }
+    
+    public NewProfileAction( Shell dialogParentShell )
+    {
+        super();
+        init( dialogParentShell );
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.ui.actions.AddProfileViewAction#getWizardSelectionFilters()
+     */
+    protected ViewerFilter[] getWizardSelectionFilters()
+    {
+        // overrides base class method to provide an additional filter to 
+        // hide applicable ODA data source types
+        ViewerFilter[] baseFilters = super.getWizardSelectionFilters();
+        return appendFilter( baseFilters, getProfileFilter() );
+    }
+
+    private ViewerFilter getProfileFilter()
+    {
+        if( m_profileFilter == null )
+            m_profileFilter = new ProfileFilter();        
+        return m_profileFilter;
+    }
+
+    private ViewerFilter[] appendFilter( ViewerFilter[] filters, ViewerFilter moreFilter )
+    {
+        ArrayList mergedFilters = new ArrayList();
+        if( filters != null )
+        {
+            for( int i=0; i < filters.length; i++ )
+            {
+                mergedFilters.add( filters[i] );
+            }
+        }
+        
+        mergedFilters.add( moreFilter );
+        return (ViewerFilter[]) mergedFilters.toArray( new ViewerFilter[ mergedFilters.size() ] );
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/filter/OdaProfileActionProvider.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/filter/OdaProfileActionProvider.java
new file mode 100644
index 0000000..aa43831
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/filter/OdaProfileActionProvider.java
@@ -0,0 +1,37 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.filter;
+
+import org.eclipse.datatools.connectivity.ui.actions.AddProfileViewAction;
+import org.eclipse.datatools.connectivity.ui.navigator.actions.ProfileActionsActionProvider;
+
+/**
+ * Extends the DTP Data Source Explorer's default Profile Action Provider
+ * to provide own extended action.
+ */
+public class OdaProfileActionProvider extends
+        ProfileActionsActionProvider
+{
+    
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.ui.navigator.actions.ProfileActionsActionProvider#createAddProfileViewAction()
+     */
+    protected AddProfileViewAction createAddProfileViewAction()
+    {
+        return new NewProfileAction();
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/filter/ProfileFilter.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/filter/ProfileFilter.java
new file mode 100644
index 0000000..5048f94
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/internal/ui/profile/filter/ProfileFilter.java
@@ -0,0 +1,102 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.filter;
+
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.CPWizardNode;
+import org.eclipse.datatools.connectivity.oda.profile.internal.ProfileCategoryUtil;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ExtensionManifest;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ManifestExplorer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.ui.navigator.CommonViewer;
+
+/**
+ * A filter that hides all ODA wrapper or deprecated extensions in 
+ * the Data Source Explorer view.
+ */
+public class ProfileFilter extends ViewerFilter
+{
+    public ProfileFilter()
+    {
+        super();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+     */
+    public boolean select( Viewer viewer, Object parentElement, Object element )
+    {
+        String odaDataSourceId = null;
+        if( ! (viewer instanceof CommonViewer) )
+        {
+            // only covers filtering for the list of connection profile types displayed
+            // in the New Connection Profile dialog
+            if( ! (element instanceof CPWizardNode) )
+                return true;
+            
+            String wizardProviderId = ((CPWizardNode) element).getProvider().getId();
+
+            // ODA data source is expected to define its category with the same id; otherwise
+            // this element is not for an ODA data source;
+            // extra check is done here to optimize performance by avoiding unnecessary lookup 
+            // of an ODA manifest
+            ICategory profileCategory = ProfileCategoryUtil.getCategory( wizardProviderId );
+            if( profileCategory != null &&
+                wizardProviderId.equalsIgnoreCase( profileCategory.getId() ) )
+                odaDataSourceId = wizardProviderId;
+        }
+        else if( element instanceof ICategory )
+        {
+            /* For filtering of a CommonViewer.
+             * If an ODA data source wants to hide its ODA category from the DSE tree,
+             * instead of using this filter class, it is much more efficient 
+             * to implement a filterExpression in a commonFilter element of the
+             * org.eclipse.ui.navigator.navigatorContent extension point.
+             */
+
+            String categoryId = ((ICategory) element).getId();
+            // ODA data source is expected to use same id for its category
+            odaDataSourceId = categoryId;
+        }
+        
+        // not an ODA data source type, do not hide
+        if( odaDataSourceId == null )
+            return true;
+        
+        ExtensionManifest manifest = getElementOdaManifest( odaDataSourceId );           
+        if( manifest == null )              
+            return true; // not an ODA extension, do not hide
+        
+        // do not hide element if it is not deprecated nor a wrapper ODA extension
+        return ! manifest.isDeprecated() && ! manifest.isWrapper();
+    }
+
+    private ExtensionManifest getElementOdaManifest( String odaDataSourceId )
+    {
+        ExtensionManifest manifest = null;
+        try
+        {
+            manifest =
+                ManifestExplorer.getInstance().getExtensionManifest( odaDataSourceId );
+        }
+        catch( Exception ex )
+        {
+            // ignore exception
+        }
+        return manifest;
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/designsession/DataSetDesignSession.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/designsession/DataSetDesignSession.java
new file mode 100644
index 0000000..f3cb058
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/designsession/DataSetDesignSession.java
@@ -0,0 +1,232 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.ui.designsession;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest;
+import org.eclipse.datatools.connectivity.oda.design.OdaDesignSession;
+import org.eclipse.datatools.connectivity.oda.design.internal.designsession.DataSetDesignSessionBase;
+import org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetEditorPage;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.jface.wizard.IWizardPage;
+
+/**
+ * An UI design session for use by an ODA host designer
+ * to interact and communicate with custom ODA UI extensions to
+ * create or edit an extended ODA data set design instance.
+ */
+public class DataSetDesignSession extends DataSetDesignSessionBase
+{
+    
+    /**
+     * Starts a design session to create a new 
+     * data set design instance with the given name.
+     * <br>This supports a simplified request for an editable session, 
+     * using the default system locale.
+     * @param newDataSetName   a unique name that identifies a data set 
+     *          design instance
+     * @param odaDataSetId      an ODA data set element id;
+     *              may be null if the associated data source extension 
+     *              supports only one type of data set 
+     * @param dataSourceDesign  the associated data source design instance
+     * @return  a design session started to create a new data set design
+     * @throws OdaException
+     */
+    public static DataSetDesignSession startNewDesign( 
+                                String newDataSetName,
+                                String odaDataSetId, 
+                                DataSourceDesign dataSourceDesign )
+        throws OdaException
+    {
+        OdaDesignSession odaDesign = 
+            DesignSessionUtil.createNewDataSetRequestSession( newDataSetName, 
+                            odaDataSetId, dataSourceDesign );
+        DataSetDesignSession newSession = 
+            new DataSetDesignSession( odaDesign, true );
+        
+        // get a new wizard and initialize with odaDesign
+        newSession.initWizard();
+        
+        return newSession;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.designsession.DataSetDesignSessionBase#restartNewDesign(java.lang.String, java.lang.String, org.eclipse.datatools.connectivity.oda.design.DataSourceDesign)
+     */
+    public void restartNewDesign( String newDataSetName,
+                                String odaDataSetId, 
+                                DataSourceDesign dataSourceDesign )
+        throws OdaException
+    {
+        super.restartNewDesign( newDataSetName, odaDataSetId, dataSourceDesign );
+    }
+        
+    /**
+     * Requests to start a design session to create or edit 
+     * a data set design,
+     * as specified in the given ODA design session request.
+     * @param request   a design session request, may contain
+     *                  a data set design to edit
+     * @return  a started design session, ready to create 
+     *          a new design, or edit the requested data set design
+     * @throws OdaException
+     */
+    public static DataSetDesignSession startEditDesign( 
+                                DesignSessionRequest request )
+        throws OdaException
+    {
+        DesignSessionUtil.validateRequestSession( request );
+
+        OdaDesignSession odaDesign =
+            DesignFactory.eINSTANCE.createOdaDesignSession();
+        odaDesign.setRequest( request );
+
+        DataSetDesignSession newSession = 
+            new DataSetDesignSession( odaDesign, false );
+                
+        // get a new wizard and initialize with odaDesign
+        newSession.initWizard();
+        
+        return newSession;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.designsession.DataSetDesignSessionBase#restartEditDesign(org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest, boolean)
+     */
+    public boolean restartEditDesign( DesignSessionRequest newRequest, boolean resetEditorPages )
+        throws OdaException
+    {
+        DesignSessionUtil.validateRequestSession( newRequest );
+        return super.restartEditDesign( newRequest, resetEditorPages );
+    }
+
+    /** Not allowed to instantiate the class directly;
+     *  must start a design session using a static start method
+     */  
+    private DataSetDesignSession( OdaDesignSession odaDesign, boolean isForNewDesign )
+        throws OdaException
+    {
+        super( odaDesign, isForNewDesign );
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.designsession.DataSetDesignSessionBase#flushEditDesign()
+     */
+    public OdaDesignSession flush()
+        throws OdaException
+    {
+        return super.flush();
+    }
+    
+    /**
+     * Returns the session request that has started
+     * this design session.  
+     * @return  the design session request, which may specify
+     *          the original data set design to edit
+     */
+    public DesignSessionRequest getRequest()
+    {
+        return super.getRequest();
+    }
+    
+    /**
+     * Performs finish on this design session to
+     * create or edit its data set design.  This then 
+     * gathers the data set definition collected in custom UI designer,
+     * and maps into a session response with the new or updated
+     * data set design instance.
+     * <br>This method must be called only after the corresponding 
+     * wizard or editor page has performed finish.
+     * @return  a completed ODA design with the session response
+     *          and the original request, if any.
+     */
+    public OdaDesignSession finish() throws OdaException
+    {
+        return super.finish();
+    }
+    
+    /**
+     * Performs cancel on this design session.
+     * The design session is then cancelled and returns a
+     * session response with a user_cancelled state.
+     * @return  the completed design session containing a
+     *          session response with a user_cancelled state
+     */
+    public OdaDesignSession cancel()
+    {
+        return super.cancel();
+    }
+    
+    /**
+     * Returns an ODA wizard for use within this design session
+     * to create a new, extended ODA data set design instance.
+     * @return  a wizard instance to embed in a wizard dialog
+     *          for use within this started design session
+     * @throws OdaException
+     */
+    public IWizard getNewWizard() throws OdaException
+    {
+        return super.getNewWizard();
+    }
+
+    /** 
+     * Returns a customized starting wizard page
+     * for use within this design session to create or edit
+     * an extended ODA data set design instance.
+     * @return  a customized wizard page
+     *          for use within this started design session
+     * @throws OdaException
+     */
+    public IWizardPage getWizardStartingPage() throws OdaException
+    {
+        return super.getWizardStartingPage();
+    }
+
+    /**
+     * Returns an ordered collection of customized editor pages
+     * for use within a design session to edit 
+     * an extended ODA data set design instance.
+     * Each editor page is an extended PropertyPage
+     * that can be used in a preference dialog.
+     * Their order is in the same sequence as the
+     * dataSetPage elements defined in the plugin extension manifest.
+     * @return  an array of customized editor pages
+     * @throws OdaException
+     */
+    public DataSetEditorPage[] getEditorPages() throws OdaException
+    {
+        return super.getEditorPages();
+    }
+    
+    /**
+     * Returns a customized editor page's adaptable element 
+     * that represents the
+     * the extended ODA data set design instance that is
+     * being edited.
+     * @return
+     */
+    public IAdaptable getEditorPageElement()
+        throws OdaException
+    {
+        return super.getEditorPageElement();
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/designsession/DataSourceDesignSession.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/designsession/DataSourceDesignSession.java
new file mode 100644
index 0000000..0f910c7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/designsession/DataSourceDesignSession.java
@@ -0,0 +1,538 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.ui.designsession;
+
+import java.io.File;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest;
+import org.eclipse.datatools.connectivity.oda.design.OdaDesignSession;
+import org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers;
+import org.eclipse.datatools.connectivity.oda.design.internal.designsession.DataSourceDesignSessionBase;
+import org.eclipse.datatools.connectivity.oda.design.ui.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSourceEditorPage;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.dialogs.PropertyPage;
+
+/**
+ * An UI design session for use by an ODA host designer
+ * to interact and communicate with custom ODA UI extensions to
+ * create or edit an extended ODA data source design instance.
+ */
+public class DataSourceDesignSession extends DataSourceDesignSessionBase
+{
+    
+    /**
+     * Starts a design session to create a new 
+     * data source design instance with the given name
+     * for the given ODA data source type. 
+     * <br>This method supports a simplified request for an 
+     * editable session in the default system locale.
+     * @param odaDataSourceId   an ODA data source extension element id 
+     * @param newDataSourceName a unique name that identifies a 
+     *                          data source design instance
+     * @return  a started design session, ready to create a new data source design
+     * @throws OdaException
+     * @see #startNewDesign(String, String, ProfileReference, DesignSessionRequest)
+     */
+    public static DataSourceDesignSession startNewDesign( 
+            String odaDataSourceId, String newDataSourceName )
+        throws OdaException
+    {
+        return startNewDesign( odaDataSourceId, 
+                                newDataSourceName, 
+                                null, null );
+    }
+
+    /**
+     * Starts a design session to create a new 
+     * data source design instance with the given name
+     * for the given ODA data source type, and initializes 
+     * with the properties specified in the given profile instance.
+     * @param odaDataSourceId   an ODA data source extension element id 
+     * @param newDataSourceName a unique name that identifies a 
+     *                          data source design instance
+     * @param profileRef    optional reference to an existing profile instance
+     *                  kept in an external profile storage file;
+     *                  may be null if no reference to an existing profile
+     * @param request   optional design session request specification,
+     *                  such as session's edit state and locale; 
+     *                  may be null for an editable session 
+     *                  in the default system locale
+     * @return  a started design session, ready to create a new data source design
+     * @throws OdaException
+     */
+    public static DataSourceDesignSession startNewDesign( 
+                                String odaDataSourceId,
+                                String newDataSourceName,
+                                ProfileReference profileRef,
+                                DesignSessionRequest request )
+        throws OdaException
+    {
+        // instantiates a new instance and initializes
+        DataSourceDesignSession newSession = 
+            new DataSourceDesignSession( odaDataSourceId );
+        
+        newSession.initNewDesign( newDataSourceName, profileRef, request );
+        return newSession;
+    }
+    
+    /**
+     * Starts a design session to create a new data source design instance,
+     * whose properties and their values are copied from,
+     * or referenced to, the given profile instance reference.
+     * <br>This method should be used when an ODA host designer
+     * wants to use the DTP ODA Profile Selection UI page for
+     * an user to select a connection profile instance.
+     * @return  a started design session, ready to create a new data source design
+     * @since 3.0.4
+     */
+    public static DataSourceDesignSession startNewDesignFromProfile()
+    {
+        return startNewDesignFromProfile( null );
+    }
+
+    /**
+     * Starts a design session to create a new data source design instance,
+     * whose properties and their values are copied from,
+     * or referenced to, the given profile instance reference.
+     * <br>This method should be used when an ODA host designer
+     * wants to use the DTP ODA Profile Selection UI page for
+     * an user to select a connection profile instance, which is persisted
+     * in a profile store file located relative to an application
+     * resource URI defined by the host.
+     * @param profileResourceIdentifiers    the design {@link ResourceIdentifiers}
+     *          for the profile store file path
+     * @return  a started design session, ready to create a new data source design
+     * @since 3.2.6 (DTP 1.9.2)
+     */
+    public static DataSourceDesignSession startNewDesignFromProfile( 
+            ResourceIdentifiers profileResourceIdentifiers )
+    {
+        // no specific ODA data source type is specified yet, set null DesignSessionRequest
+        DataSourceDesignSession newSession =
+            new DataSourceDesignSession( (DesignSessionRequest)null );
+        if( profileResourceIdentifiers != null )
+            newSession.setProfileResourceIdentifiers( profileResourceIdentifiers );
+        return newSession;
+    }
+
+    /**
+     * Restarts the design session to create a new 
+     * data source design instance with the given name
+     * for the given ODA data source type, and initializes 
+     * with the properties specified in the given profile instance.
+     * <br>Restarting a design session on the same 
+     * ODA data source type would preserve any
+     * user edits made on the session's custom wizard page.
+     * @param odaDataSourceId
+     * @param newDataSourceName
+     * @param profileRef
+     * @param request
+     * @throws OdaException
+     * @see #startNewDesign(String, String, ProfileReference, DesignSessionRequest)
+     */
+    public void restartNewDesign( String odaDataSourceId,
+                                String newDataSourceName,
+                                ProfileReference profileRef,
+                                DesignSessionRequest request )
+        throws OdaException
+    {
+        if( ! isInCreateMode() )
+            throw new OdaException( Messages.designSession_invalidNewDesignApiCall );
+        
+        super.restartNewDesign( odaDataSourceId, newDataSourceName, profileRef, request );
+    }
+
+    /**
+     * Requests to start a design session to edit 
+     * a data source design,
+     * as specified in the given ODA design session request.
+     * <br>This is responsible for creating a 
+     * custom editor page instance for use 
+     * to edit a data source design.
+     * @param request   a design session request, must contain
+     *                  a data source design to edit
+     * @return  a started design session, ready to 
+     *          edit the requested data source design
+     * @throws OdaException
+     * @see #startEditDesign(DesignSessionRequest, DataSourceEditorPage)
+     */
+    public static DataSourceDesignSession startEditDesign( 
+                                DesignSessionRequest request )
+        throws OdaException
+    {
+        return startEditDesign( request, null ); 
+    }
+    
+    /**
+     * Requests to start a design session with the given 
+     * editor page to edit a data source design,
+     * as specified in the given ODA design session request.
+     * @param request   a design session request, must contain
+     *                  a data source design to edit
+     * @param editorPage    the property page instance created
+     *              by the ODA host to edit the design;
+     *              may be null, in which case the session will 
+     *              create a custom page
+     * @return  a started design session, ready to 
+     *          edit the requested data source design
+     * @throws OdaException
+     */
+    public static DataSourceDesignSession startEditDesign( 
+                                DesignSessionRequest request,
+                                DataSourceEditorPage editorPage )
+        throws OdaException
+    {
+        String odaDataSourceId = 
+            DesignSessionUtil.validateRequestSession( request );
+
+        DataSourceDesignSession newSession = 
+            new DataSourceDesignSession( odaDataSourceId );
+        
+        newSession.initEditDesign( request, editorPage );
+        return newSession;
+    }
+    
+    /**
+     * Creates a design session with a new data source design,
+     * whose properties and their values are copied from,
+     * or referenced to, the given profile reference.
+     * <br>This method should be used when an ODA host designer
+     * wants to finish a design session right away after
+     * a profile is selected, and skips using its
+     * custom wizard page.
+     * <br>A completed response contains the new or updated 
+     * data source design instance, and the designer state. 
+     * @param odaDataSourceId   an ODA data source extension element id 
+     * @param newDataSourceName unique name to assign to new data source instance;
+     *                          may be null or empty, in which case the profile name
+     *                          is applied
+     * @param profileRef        reference to an existing profile instance
+     *                  kept in an external profile storage file
+     * @return  a completed design session with the session response,
+     *          containing the new data source design,
+     *          and the original request.
+     * @throws OdaException
+     */
+    public static OdaDesignSession createNewDesignFromProfile( 
+                                    String odaDataSourceId,
+                                    String newDataSourceName,
+                                    ProfileReference profileRef )
+        throws OdaException
+    {
+        DataSourceDesignSession newSession = 
+                        startNewDesign( odaDataSourceId,
+                                newDataSourceName,
+                                profileRef, null );
+
+        return newSession.finishNewDesignFromProfile( newDataSourceName, profileRef );
+    }
+    
+    /**
+     * Converts the data source design, in the specified DesignSessionRequest,
+     * to export its connection properties to a new connection profile instance, 
+     * and optionally links to it.
+     * <br>The exported connection profile would persist in the default profile storage 
+     * used by the DTP Data Source Explorer.
+     * In addition, caller may optionally trigger prompting users whether
+     * to copy the exported profile to a separate connection profile store file.
+     * @param request   a design session request, must contain
+     *                  a valid data source design to convert from
+     * @param newProfileBaseName    optional suggested base name of the new 
+     *                  connection profile; may be null or empty to use the same
+     *                  name as that of the data source design.
+     *                  If the suggested name is already used by an existing profile
+     *                  in the default repository, an unique name will be generated
+     *                  with a number appended to the base name.
+     * @param useProfileInDesign    indicates whether to update the data source design
+     *                  to link to the exported profile
+     * @param promptCreateProfileStore  indicates whether to prompt users to
+     *                  create a separate connection profile store
+     * @param parentShell   the parent shell for the UI dialog to create profile store;
+     *                  must not be null if promptCreateProfileStore is true
+     * @return  the completed design session containing a
+     *          session response with the converted data source design
+     * @throws OdaException if the conversion task failed; 
+     *          if the data source design in the specified request is already linked to 
+     *          a connection profile, the cause of thrown exception is an IllegalArgumentException 
+     * @since 3.2 (DTP 1.7)
+     */
+    public static OdaDesignSession convertDesignToLinkedProfile( 
+            DesignSessionRequest request, 
+            String newProfileBaseName, boolean useProfileInDesign,
+            boolean promptCreateProfileStore, Shell parentShell )
+        throws OdaException
+    {
+        // validate the specified request
+        String odaDataSourceId = DesignSessionUtil.validateRequestSession( request );
+
+        DataSourceDesign dataSourceDesign = request.getDataSourceDesign();
+        if( dataSourceDesign.hasLinkToProfile() )
+        {
+            OdaException ex = new OdaException( Messages.bind( Messages.designSession_alreadyHasLinkedProfile,
+                                        dataSourceDesign.getName() ));
+            ex.initCause( new IllegalArgumentException() );
+            throw ex;
+        }
+               
+        // proceed with instantiating a design session to handle the conversion
+        DataSourceDesignSession newSession = new DataSourceDesignSession( odaDataSourceId );
+        return newSession.convertDesignToProfile( request, 
+                newProfileBaseName, useProfileInDesign,
+                promptCreateProfileStore, parentShell );
+    }
+    
+    /** Not allowed to instantiate the class directly;
+     *  must start a design session using a static start method
+     */  
+    private DataSourceDesignSession( String odaDataSourceId )
+    {
+        super( odaDataSourceId );
+    }
+    
+    private DataSourceDesignSession()
+    {
+        super();
+    }
+
+    private DataSourceDesignSession( DesignSessionRequest sessionRequest )
+    {
+        super( sessionRequest );
+    }
+
+    /**
+     * Returns the session request that has started
+     * this design session.  May return null if none
+     * was used to start this design session.
+     * @return  the design session request, which may specify
+     *          the original data source design to edit
+     */
+    public DesignSessionRequest getRequest()
+    {
+        return super.getRequest();
+    }
+    
+    /**
+     * Performs finish on this design session to
+     * create or edit its data source design.  This then 
+     * gathers the data source definition collected in custom UI designer,
+     * and maps into a session response with a new or updated
+     * data source design instance.
+     * <br>This method must be called only after the corresponding 
+     * wizard or editor has performed finish.
+     * <br>Returns a completed design session with a 
+     * session response that contains a new or updated 
+     * data source design instance, and the designer state. 
+     * @return  a completed ODA design with the session response
+     *          and the original request, if any.
+     */
+    public OdaDesignSession finish() throws OdaException
+    {
+        return super.finish();
+    }
+    
+    /**
+     * Performs cancel on this design session.
+     * The design session is then cancelled and contains
+     * session response with a user_cancelled state.
+     * @return  the completed design session containing a
+     *          session response with a user_cancelled state
+     */
+    public OdaDesignSession cancel()
+    {
+        return super.cancel();
+    }
+        
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.designsession.DataSourceDesignSessionBase#setUseProfileSelectionPage(boolean)
+     * @since 3.0.4
+     */
+    public void setUseProfileSelectionPage( boolean use )
+    {
+        this.setUseProfileSelectionPage( use, null );
+    }
+
+    /**
+     * Specifies whether the design session should provide a connection profile selection UI page,
+     * and a host resource identifiers for use by the profile selection page.
+     * @param use   true to enable a connection profile selection UI page; false otherwise
+     * @param profileResourceIds    a ResourceIdentifiers instance of an ODA consumer application for use by 
+     *              the enabled profile selection UI page; optional, may be null
+     * @since 3.2.6 (DTP 1.9.2)
+     */
+    public void setUseProfileSelectionPage( boolean use, ResourceIdentifiers profileResourceIds )
+    {
+        super.setUseProfileSelectionPage( use );
+
+        if( use && profileResourceIds != null )
+            super.setProfileResourceIdentifiers( profileResourceIds );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.designsession.DataSourceDesignSessionBase#setAndVerifyUseProfileSelectionPage()
+     * @since 3.0.8
+     */
+    public boolean setAndVerifyUseProfileSelectionPage()
+    {
+        return super.setAndVerifyUseProfileSelectionPage();
+    }
+
+    /**
+     * Assigns the specified design name validator to the wizard page that collects
+     * user input of a design name.
+     * @param   validator   interface for a call-back validator
+     * @since 3.0.4
+     */
+    public void setDesignNameValidator( IDesignNameValidator validator )
+    {
+        super.setDesignNameValidator( validator );
+    }
+
+    /**
+     * Returns an ODA wizard for use within this design session
+     * to create a new, extended ODA data source design instance.
+     * @return  a wizard instance to embed in a wizard dialog
+     *          for use within this started design session
+     * @throws OdaException
+     */
+    public IWizard getNewWizard() throws OdaException
+    {
+        if( ! isInCreateMode() )
+            throw new OdaException( Messages.designSession_invalidNewDesignApiCall );
+        
+        return super.getNewWizard();
+    }
+
+    /** 
+     * Returns a customized starting wizard page
+     * for use within this design session to create
+     * a new, extended ODA data source design instance.
+     * @return  a customized wizard page to add in a wizard
+     *          for use within this started design session
+     * @throws OdaException
+     */
+    public IWizardPage getWizardStartingPage() throws OdaException
+    {
+        if( ! isInCreateMode() )
+            throw new OdaException( Messages.designSession_invalidNewDesignApiCall );
+        
+        return super.getWizardStartingPage();
+    }
+
+    /**
+     * Returns the property page that allows an user to update 
+     * the selection of a connection profile.
+     * @return  a PropertyPage for use in a PreferenceDialog
+     * @throws OdaException
+     * @since 3.0.4
+     */
+    public PropertyPage getProfileSelectionPropertyPage() throws OdaException
+    {
+        if( ! isInEditMode() )
+            throw new OdaException( Messages.designSession_invalidEditApiCall );
+        
+        return super.getProfileSelectionEditorPage();
+    }
+
+    /**
+     * Returns a customized editor page
+     * for use within a design session to edit 
+     * an extended ODA data source design instance.
+     * @return  a customized property page
+     * @throws OdaException
+     */
+    public PropertyPage getEditorPage() throws OdaException
+    {
+        if( ! isInEditMode() )
+            throw new OdaException( Messages.designSession_invalidEditApiCall );
+        
+        return super.getEditorPage();
+    }
+    
+    /**
+     * Returns a customized editor page's adaptable element 
+     * that represents the
+     * the extended ODA data source design instance that is
+     * being edited.
+     * @return
+     */
+    public IAdaptable getEditPropertyPageElement()
+        throws OdaException
+    {
+        if( ! isInEditMode() )
+            throw new OdaException( Messages.designSession_invalidEditApiCall );
+        
+        return super.getEditPropertyPageElement();
+    }
+        
+    /**
+     * Represents the reference information of an external
+     * connection profile.
+     */
+    public static class ProfileReference extends ProfileReferenceBase
+    {
+        /**
+         * Constructor.
+         * @param profileInstanceId profile instance id; such as the
+         *              instance id returned by the 
+         *              <code>DesignSessionUtil.getProfileIdentifiers</code> method
+         * @param storageFile   a file that stores profile instances;
+         *              may be null, which means to use the
+         *              default DTP profiles storage file
+         * @param maintainExternalLink  "true" indicates to maintain a link to the 
+         *              given profile instance and storageFile, and applies its 
+         *              latest properties values at run-time.
+         *              "false" indicates to work with a copy of the current properties
+         *              specified in the profile instance; any future
+         *              changes to the profile instance is not applied to
+         *              the data source design.
+         */
+        public ProfileReference( String profileInstanceId,
+                                File storageFile, 
+                                boolean maintainExternalLink )
+        {
+            super( profileInstanceId, storageFile, maintainExternalLink, storageFile.getPath() );
+        }
+
+    }
+
+    /**
+     * The public interface for call-back to an ODA design name validator
+     * provided by an ODA consumer application
+     * to validate the name of a data source design defined in the
+     * ODA connection profile selection page.
+     * @since 3.0.4
+     */
+    public interface IDesignNameValidator extends IDesignNameValidatorBase
+    {
+        /**
+         * Validates whether the specified data source designName 
+         * is valid in the context of the validator provider.
+         * @param designName    data source design name defined by an user
+         * @return  Returns true if designName is valid. Otherwise throws an
+         * OdaException with the appropriate error message for display
+         * on the UI page.  If the method simply returns false and does
+         * not throw an exception the page will display a generic error message.
+         */
+        public boolean isValid( String designName ) throws OdaException;
+        
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/designsession/DesignSessionUtil.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/designsession/DesignSessionUtil.java
new file mode 100644
index 0000000..b6985a7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/designsession/DesignSessionUtil.java
@@ -0,0 +1,805 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2012 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.ui.designsession;
+
+import java.io.File;
+import java.net.URI;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.oda.IParameterMetaData;
+import org.eclipse.datatools.connectivity.oda.IResultSetMetaData;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.ColumnDefinition;
+import org.eclipse.datatools.connectivity.oda.design.CustomFilterExpression;
+import org.eclipse.datatools.connectivity.oda.design.DataElementAttributes;
+import org.eclipse.datatools.connectivity.oda.design.DataSetParameters;
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest;
+import org.eclipse.datatools.connectivity.oda.design.ElementNullability;
+import org.eclipse.datatools.connectivity.oda.design.InputElementAttributes;
+import org.eclipse.datatools.connectivity.oda.design.OdaDesignSession;
+import org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes;
+import org.eclipse.datatools.connectivity.oda.design.ParameterDefinition;
+import org.eclipse.datatools.connectivity.oda.design.ParameterMode;
+import org.eclipse.datatools.connectivity.oda.design.Properties;
+import org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers;
+import org.eclipse.datatools.connectivity.oda.design.ResultSetColumns;
+import org.eclipse.datatools.connectivity.oda.design.ValueFormatHints;
+import org.eclipse.datatools.connectivity.oda.design.internal.designsession.DesignSessionUtilBase;
+import org.eclipse.datatools.connectivity.oda.design.internal.designsession.DesignerLogger;
+import org.eclipse.datatools.connectivity.oda.design.ui.manifest.UIManifestExplorer;
+import org.eclipse.datatools.connectivity.oda.design.ui.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.profile.OdaProfileExplorer;
+import org.eclipse.datatools.connectivity.oda.profile.internal.OdaProfileFactory;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.FilterExpressionDefinition;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.ResultExtensionExplorer;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ *  An utility class to help an ODA host designer or
+ *  an ODA driver's customized designer to manipulate
+ *  ODA Design API objects during an ODA design session.
+ */
+public class DesignSessionUtil extends DesignSessionUtilBase
+{
+    private static final String EMPTY_STRING = "";   //$NON-NLS-1$
+    // logging variable
+    private static final String sm_className = DesignSessionUtil.class.getName();
+
+    // class has static methods only; no need to instantiate
+    private DesignSessionUtil()
+    {
+    }
+    
+    /**
+     * Creates an ODA design property collection for the data source public properties
+     * defined in an ODA runtime extension manifest.  Their corresponding values 
+     * are specified in the given Properties collection.
+     * @param odaDataSourceId   an ODA extension data source element ID
+     * @param utilProps      java.util.properties, such as those collected from a connection profile
+     * @return  ODA design public property collection for inclusion
+     *          in an OdaDesignSession's Data Source Design
+     * @throws OdaException
+     */
+    public static Properties createDataSourcePublicProperties( 
+                String odaDataSourceId,
+                java.util.Properties utilProps )
+            throws OdaException
+    {
+        // first get the public property definition in the ODA driver's runtime plugin manifest
+        org.eclipse.datatools.connectivity.oda.util.manifest.Property[] publicPropDefns = 
+            getDataSourcePublicPropertiesDefn( odaDataSourceId );
+
+        return createPublicProperties( publicPropDefns, utilProps );
+    }
+    
+    /**
+     * Creates an ODA design property collection for the data set public properties
+     * defined in an ODA runtime extension manifest.  Their corresponding values 
+     * are specified in the given Properties collection.
+     * @param odaDataSourceId   an ODA extension data source element ID
+     * @param odaDataSetId      an ODA extension data set element id;
+     *              may be null if the associated data source extension 
+     *              supports only one type of data set 
+     * @param utilProps      collection of property name and value pairs
+     * @return  ODA design public property collection for inclusion
+     *          in an OdaDesignSession's Data Set Design
+     * @throws OdaException
+     */
+    public static Properties createDataSetPublicProperties( 
+            String odaDataSourceId, String odaDataSetId, 
+            java.util.Properties utilProps )
+        throws OdaException
+    {
+        // first get the public property definition in the ODA driver's runtime plugin manifest
+        org.eclipse.datatools.connectivity.oda.util.manifest.Property[] publicPropDefns = 
+            getDataSetPublicPropertiesDefn( odaDataSourceId, odaDataSetId );
+    
+        return createPublicProperties( publicPropDefns, utilProps );
+    }
+
+    /**
+     * Convert specified public properties defined in an ODA runtime extension manifest,
+     * and corresponding values specified in the given Properties collection
+     * into an ODA design property collection.
+     * @param publicPropDefns   public properties defined in an ODA runtime extension manifest
+     * @param utilProps         collection of property name and value pairs
+     * @return  converted collection of ODA design public properties 
+     */
+    public static Properties createPublicProperties( 
+            org.eclipse.datatools.connectivity.oda.util.manifest.Property[] publicPropDefns, 
+            java.util.Properties utilProps )
+    {
+        if( publicPropDefns == null || publicPropDefns.length == 0 )
+            return null;    // nothing to convert
+        
+        // create a new design Properties collection
+        Properties designProps = 
+            DesignFactory.eINSTANCE.createProperties();
+        
+        // for each defined public property name, get its corresponding
+        // value in the specified utilProps, and create design property 
+        // with the name and value in an oda design property collection
+        for( int i = 0; i < publicPropDefns.length; i++ )
+        {
+            String propName = publicPropDefns[i].getName();
+            String propValue = ( utilProps != null ) ?
+                                utilProps.getProperty( propName ) : null;
+            designProps.setProperty( propName, propValue );
+        }
+        return designProps;
+    }
+    
+    /**
+     * Creates an ODA design property collection for those given data source properties
+     * that are not defined in an ODA runtime extension manifest. 
+     * These are properties that are not publicly defined. 
+     * Their corresponding values 
+     * are collected from the given property collection.
+     * @param odaDataSourceId   an ODA extension data source element ID
+     * @param utilProps a java.util.Properties collection,
+     *                  such as those collected from a connection profile
+     * @return  ODA design non-public property collection for inclusion
+     *          in an OdaDesignSession's Data Source Design
+     * @throws OdaException
+     */
+    public static Properties createDataSourceNonPublicProperties( 
+                String odaDataSourceId,
+                java.util.Properties utilProps )
+        throws OdaException
+    {
+        // first get the public property definition in the ODA driver's runtime plugin manifest
+        org.eclipse.datatools.connectivity.oda.util.manifest.Property[] publicPropDefns = 
+            getDataSourcePublicPropertiesDefn( odaDataSourceId );
+    
+        return createNonPublicProperties( publicPropDefns, utilProps );
+    }
+
+    /**
+     * Creates an ODA design property collection for those given data set properties
+     * that are not defined in an ODA runtime extension manifest. 
+     * These are properties that are not publicly defined. 
+     * Their corresponding values 
+     * are collected from the given property collection.
+     * @param odaDataSourceId   an ODA extension data source element ID
+     * @param odaDataSetId      an ODA extension data set element id;
+     *              may be null if the associated data source extension 
+     *              supports only one type of data set 
+     * @param utilProps a java.util.Properties collection,
+     *                  such as those collected from a connection profile
+     * @return  ODA design non-public property collection for inclusion
+     *          in an OdaDesignSession's Data Source Design
+     * @throws OdaException
+     */
+    public static Properties createDataSetNonPublicProperties( 
+            String odaDataSourceId, String odaDataSetId, 
+            java.util.Properties utilProps )
+    throws OdaException
+    {
+        // first get the public property definition in the ODA driver's runtime plugin manifest
+        org.eclipse.datatools.connectivity.oda.util.manifest.Property[] publicPropDefns = 
+            getDataSetPublicPropertiesDefn( odaDataSourceId, odaDataSetId );
+    
+        return createNonPublicProperties( publicPropDefns, utilProps );
+    }
+
+    /**
+     * Convert given Properties collection that are not defined as
+     * public properties in an ODA runtime extension manifest,
+     * into an ODA design property collection.
+     * @param publicPropDefns   public properties defined in an ODA runtime extension manifest
+     * @param utilProps a java.util.Properties collection,
+     *                  such as those collected from a connection profile
+     * @return  converted collection of ODA design non-public properties 
+     */
+    public static Properties createNonPublicProperties( 
+            org.eclipse.datatools.connectivity.oda.util.manifest.Property[] publicPropDefns, 
+            java.util.Properties utilProps )
+    {
+        Properties designProps = null;
+        
+        // for each given property name-value pair, whose name is not
+        // defined as a public property in the manifest, 
+        // create corresponding design property with the name and value
+        Iterator iter = utilProps.keySet().iterator();
+        while( iter.hasNext() )
+        {
+            String utilPropName = (String) iter.next();
+
+            boolean isPublicProp = false;
+            for( int i = 0; i < publicPropDefns.length; i++ )
+            {
+                if( utilPropName.equalsIgnoreCase( 
+                        publicPropDefns[i].getName() ))
+                {
+                    isPublicProp = true;
+                    break;
+                }
+            }
+            if( isPublicProp )
+                continue;   // skip public property
+
+            // create a new design Properties collection for the non-public property
+            if( designProps == null )
+                designProps = DesignFactory.eINSTANCE.createProperties();
+            String propValue = utilProps.getProperty( utilPropName );
+            designProps.setProperty( utilPropName, propValue );
+        }
+
+        return designProps;
+    }
+    
+    /**
+     * A convenience method to create a new DesignSessionRequest instance 
+     * that contains a new data source design with the specified design attributes.
+     * @param odaDataSourceId   the ODA data source extension id
+     * @param newDataSourceName an unique name to identify the data source design instance
+     * @param newDataSourceDisplayName  display name of the data source design; may be null
+     * @param applResourceBaseURI   the base URI of general purpose resources of an ODA consumer application; may be null
+     * @param designResourceBaseURI the base URI of design resources of an ODA consumer application; may be null
+     * @return  a new DesignSessionRequest instance with the specified data source design attributes
+     * @throws OdaException if specified argument(s) are invalid
+     * @since 3.0.7
+     */
+    public static DesignSessionRequest createNewDataSourceRequest( 
+            String odaDataSourceId,
+            String newDataSourceName,
+            String newDataSourceDisplayName,
+            URI applResourceBaseURI,
+            URI designResourceBaseURI )
+        throws OdaException
+    {
+        return DesignSessionUtilBase.createNewDataSourceRequest( odaDataSourceId, 
+                newDataSourceName, newDataSourceDisplayName, applResourceBaseURI, designResourceBaseURI );
+    }
+
+    // TODO - Expose as API method for client to create a request for use
+    //        with DataSourceDesignSession#startNewDesignFromProfile
+//    public static DesignSessionRequest createNewDataSourceProfileRequest( 
+//            URI applResourceBaseURI,
+//            URI designResourceBaseURI )
+//    {
+//        return DesignSessionUtilBase.createNewDataSourceProfileRequest( 
+//                applResourceBaseURI, designResourceBaseURI );
+//    }
+    
+    /**
+     * A convenience method to assign the specified resource base URI(s) to the specified data source design.
+     * @param dataSourceDesign  a data source design instance
+     * @param applResourceBaseURI   the base URI of general purpose resources of an ODA consumer application; may be null
+     * @param designResourceBaseURI the base URI of design resources of an ODA consumer application; may be null
+     * @throws NullPointerException if dataSourceDesign argument is null
+     * @since 3.0.7
+     */
+    public static void setDataSourceResourceIdentifiers(
+            DataSourceDesign dataSourceDesign, URI applResourceBaseURI, URI designResourceBaseURI )
+    {    
+        DesignSessionUtilBase.setDataSourceResourceIdentifiers( dataSourceDesign, applResourceBaseURI, designResourceBaseURI );
+    }
+
+    /**
+     * Create a runtime ResourceIdentifiers,
+     * based on the resource URIs defined by the specified designResourceIdentifiers.
+     * @param designResourceIdentifiers  a design resource identifier instance
+     *          defined by the host application
+     * @return  a new runtime ResourceIdentifiers that was converted from
+     *          the specified designResourceIdentifiers
+    * @since 3.2.6 (DTP 1.9.2)
+     */
+    public static org.eclipse.datatools.connectivity.oda.util.ResourceIdentifiers createRuntimeResourceIdentifiers( 
+            ResourceIdentifiers designResourceIdentifiers )
+    {
+        return DesignSessionUtilBase.createRuntimeResourceIdentifiers( designResourceIdentifiers );
+    }
+
+    /**
+     * A convenience method to create an application context Map with the entry of 
+     * a runtime ResourceIdentifiers,
+     * based on the resource URIs defined by the specified designResourceIdentifiers.
+     * @param designResourceIdentifiers  a design resource identifier instance
+     *          defined by the host application
+     * @return  a new design session appContext Map with the entry of a runtime ResourceIdentifiers
+     *          that was converted from the specified designResourceIdentifiers
+    * @since 3.2.6 (DTP 1.9.2)
+    **/
+    public static Map<String,Object> createResourceIdentifiersContext( ResourceIdentifiers designResourceIdentifiers )
+    {
+        return DesignSessionUtilBase.createResourceIdentifiersContext( designResourceIdentifiers );
+    }
+    
+    /**
+     * Creates a new OdaDesignSession instance with a session
+     * request that contains a new data set design of
+     * the specified name and odaDataSetId,
+     * associated with the specified data source design instance.
+     * @param newDataSetName   a unique name that identifies a data set 
+     *          design instance
+     * @param odaDataSetId      an ODA data set element id;
+     *              may be null if the associated data source extension 
+     *              supports only one type of data set 
+     * @param dataSourceDesign  the associated data source design instance
+     * @return  a new OdaDesignSession instance with a session
+     *          request of the specified design attributes
+     * @throws OdaException if specified arguments are invalid
+     */
+    public static OdaDesignSession createNewDataSetRequestSession( 
+                            String newDataSetName,
+                            String odaDataSetId, 
+                            DataSourceDesign dataSourceDesign )
+        throws OdaException
+    {
+        return DesignSessionUtilBase.createNewDataSetRequestSession( 
+                    newDataSetName, odaDataSetId, dataSourceDesign );
+    }
+    
+    /**
+     * Returns the connection profile instance externally referenced, 
+     * i.e. linked, by the given data source design.
+     * @param dataSourceDesign
+     * @return  linked connection profile instance, or null
+     *          if no external profile is referenced
+     * @throws OdaException if referenced connection profile is not found
+     */
+    public static IConnectionProfile getLinkedProfile( DataSourceDesign dataSourceDesign )
+        throws OdaException
+    {
+        if( ! dataSourceDesign.hasLinkToProfile() )
+            return null;
+
+        String linkedProfileName = dataSourceDesign.getLinkedProfileName();
+        IConnectionProfile profile = OdaProfileExplorer.getInstance()
+            .getProfileByName( linkedProfileName,
+                    dataSourceDesign.getLinkedProfileStoreFile() );
+        if( profile == null )   // not found
+            throw new OdaException( 
+                    Messages.bind( Messages.designSession_invalidProfileNameOrFilePath,
+                                linkedProfileName, dataSourceDesign.getLinkedProfileStoreFilePath() ));
+        return profile;
+    }
+    
+    /**
+     * Creates an ODA connection profile instance from the specified data source design.
+     * @param dataSourceDesign  a data source design
+     * @param profileName       the name of the new profile; may be null or empty to use the same
+     *                          name as that of the specified data source design
+     * @return  a new instance of {@link IConnectionProfile} that persists in the DTP profile cache
+     * @throws OdaException
+     * @since 3.2 (DTP 1.7)
+     */
+    public static IConnectionProfile createProfile( DataSourceDesign dataSourceDesign, String profileName )
+        throws OdaException
+    {
+        if( dataSourceDesign == null )
+            return null;
+        
+        if( dataSourceDesign.hasLinkToProfile() )
+        {
+            // clear the linked profile properties to exclude them from the created profile
+            dataSourceDesign = (DataSourceDesign) EcoreUtil.copy( dataSourceDesign );
+            dataSourceDesign.setLinkedProfileName( null );
+            dataSourceDesign.setLinkedProfileStoreFile( null );
+        }
+
+        if( profileName == null || profileName.length() == 0 )
+            profileName = dataSourceDesign.getName();
+
+        String description = dataSourceDesign.getDisplayName();
+        if( description == null )
+            description = EMPTY_STRING;
+
+        return OdaProfileFactory.createProfile( profileName, 
+                description, 
+                dataSourceDesign.getOdaExtensionDataSourceId(), 
+                getEffectiveDataSourceProperties( dataSourceDesign ) );
+    }
+    
+    /*
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.designsession.DesignSessionUtilBase#getEffectiveDataSourceProperties( org.eclipse.datatools.connectivity.oda.design.Properties )
+     */
+    public static java.util.Properties getEffectiveDataSourceProperties( 
+            DataSourceDesign dataSourceDesign )
+        throws OdaException
+    {
+        return DesignSessionUtilBase.getEffectiveDataSourceProperties( dataSourceDesign );
+    }
+
+    /**
+     * Indicates whether the given ODA data source type has
+     * implemented a valid 
+     * <code>org.eclipse.datatools.connectivity.oda.design.ui.dataSource</code>
+     * extension point.
+     * @param odaDataSourceId   an ODA data source extension type's element id 
+     * @return  true if specified ODA data source has implemented a valid 
+     *          ODA designer extension; false otherwise
+     */
+    public static boolean hasValidOdaDesignUIExtension( 
+                                    String odaDataSourceId )
+    {
+        Object manifest;
+        try
+        {
+            manifest =
+                UIManifestExplorer.getInstance()
+                    .getExtensionManifest( odaDataSourceId );
+        }
+        catch( OdaException ex )
+        {
+            // has invalid manifest
+            manifest = null;
+        }
+
+        return ( manifest != null );
+    }
+    
+    /**
+     * Returns a collection of identifiers of all connection profile instances for
+     * the given ODA data source extension type.
+     * The profile instances are searched in the given profile storage file.
+     * It also caches the matching profiles for subsequent use.
+     * @param odaDataSourceId   an ODA data source extension type's element id 
+     * @param storageFile   a file that stores profile instances;
+     *                      may be null, which means to use the
+     *                      default DTP profiles storage file
+     * @return  a <code>Map</code> containing the instance Id
+     *          and display name of all existing profiles of the given odaDataSourceId.
+     *          The connection profiles' instance Id and display name
+     *          are stored as the key and value strings in the returned <code>Map</code> instance.
+     *          Returns an empty collection if there are 
+     *          no matching connection profiles found in given storageFile.
+     * @throws OdaException if error in reading from given storageFile,
+     *                      or in processing the found profiles
+     */
+    public static Map getProfileIdentifiers( String odaDataSourceId, File storageFile ) 
+        throws OdaException
+    {
+        return OdaProfileExplorer.getInstance().getProfileIdentifiersByOdaProviderId( 
+                odaDataSourceId, storageFile );
+    }
+    
+    /**
+     * Returns a collection of identifiers of all connection profile instances under
+     * the specified profile category id.
+     * The profile instances are searched in the given profile storage file.
+     * It also caches the matching profiles for subsequent use.
+     * @param categoryId    the unique id of a connection profile category
+     * @param storageFile   a file that stores profile instances;
+     *                      may be null, which means to use the
+     *                      default DTP profiles storage file
+     * @return  a <code>Map</code> containing the instance Id
+     *          and display name of all existing profiles of the given odaDataSourceId.
+     *          The connection profiles' instance Id and display name
+     *          are stored as the key and value strings in the returned <code>Map</code> instance.
+     *          Returns an empty collection if there are 
+     *          no matching connection profiles found in given storageFile.
+     * @throws OdaException if error in reading from given storageFile,
+     *                      or in processing the found profiles
+     * @since 3.0.6
+     */
+    public static Map getProfileIdentifiersByCategory( String categoryId, File storageFile ) 
+        throws OdaException
+    {
+        return OdaProfileExplorer.getInstance().getProfileIdentifiersByCategory( 
+                categoryId, storageFile );
+    }
+    
+    /**
+     * Validates the specified design session request.
+     * If valid, returns the request's ODA data source element id.
+     * @param requestSession
+     * @return
+     * @throws OdaException if specified session request is invalid
+     */
+    static String validateRequestSession( 
+                    DesignSessionRequest requestSession )
+        throws OdaException
+    {
+        return validateRequestSessionImpl( requestSession );    
+    }
+    
+    /**
+     * Validates the specified data source design instance.
+     * @param dataSourceDesign
+     * @throws OdaException if specified design is invalid
+     */
+    static void validateDataSourceDesign( 
+                        DataSourceDesign dataSourceDesign )
+        throws OdaException
+    {
+        validateDataSourceDesignImpl( dataSourceDesign );
+    }
+
+    /**
+     * Converts the contents of an ODA runtime result set meta data
+     * to an ODA design-time ResultSetColumns instance.
+	 * This may be used by an ODA custom page to
+	 * populate a data set design instance with its
+	 * result set meta data definition.
+     * @param md    ODA runtime result set meta data instance
+     * @return  the converted ResultSetColumns instance
+     * @throws OdaException
+     */
+    public static ResultSetColumns toResultSetColumnsDesign( 
+                            IResultSetMetaData md )
+        throws OdaException
+    {
+        final String methodName = "toResultSetColumnsDesign( IResultSetMetaData )"; //$NON-NLS-1$
+        if( md == null || md.getColumnCount() == 0 )
+            return null; // nothing to convert
+        
+        ResultSetColumns rsColumns =
+            DesignFactory.eINSTANCE.createResultSetColumns();
+        int columnCount = md.getColumnCount();
+        for( int i = 1; i <= columnCount; i++ )
+        {
+            ColumnDefinition columnDef =
+                DesignFactory.eINSTANCE.createColumnDefinition();
+
+            DataElementAttributes columnAttrs =
+                DesignFactory.eINSTANCE.createDataElementAttributes();
+            columnAttrs.setPosition( i );
+            columnAttrs.setNativeDataTypeCode( md.getColumnType(i) );
+
+            ValueFormatHints formatHints = 
+                    DesignFactory.eINSTANCE.createValueFormatHints();
+            OutputElementAttributes outAttrs = 
+                    DesignFactory.eINSTANCE.createOutputElementAttributes();
+
+            try
+            {
+                columnAttrs.setName( md.getColumnName(i) );
+                columnAttrs.setNullability( 
+                        convertResultColumnNullability( md.isNullable(i) ));
+                columnAttrs.setPrecision( md.getPrecision(i) );
+                columnAttrs.setScale( md.getScale(i) );
+                
+                String columnLabel = md.getColumnLabel(i);
+                outAttrs.setLabel( columnLabel );
+
+                formatHints.setDisplaySize( md.getColumnDisplayLength(i) );                
+                if( columnLabel != null )
+                    columnAttrs.setUiDisplayName( columnLabel );
+            }
+            catch( UnsupportedOperationException ex )
+            {
+                // ignore; optional attributes
+                // log info
+                DesignerLogger logger = DesignerLogger.getInstance();
+                logger.info( sm_className, methodName, 
+                        "Some optional metadata of column " + i + " are not available.", ex ); //$NON-NLS-1$ //$NON-NLS-2$
+            }
+            catch( OdaException odaEx )
+            {
+                // ignore; optional attributes
+                // log warning about exception
+                DesignerLogger logger = DesignerLogger.getInstance();
+                logger.warning( sm_className, methodName, 
+                        "Some optional metadata of column " + i + " are not available.", odaEx ); //$NON-NLS-1$ //$NON-NLS-2$
+            }
+
+            columnDef.setAttributes( columnAttrs );
+            outAttrs.setFormattingHints( formatHints );
+            columnDef.setUsageHints( outAttrs );
+            
+            rsColumns.getResultColumnDefinitions().add( columnDef );
+        }
+        
+        return rsColumns;
+    }
+
+    /**
+     * Converts the contents of an ODA runtime parameters meta data
+     * to an ODA design-time DataSetParameters instance.
+     * This may be used by an ODA custom page to
+     * populate a data set design instance with its
+     * parameter meta data definitions.
+     * @param pmd    ODA runtime parameters meta data instance
+     * @return  the converted DataSetParameters instance
+     * @throws OdaException
+     */
+    public static DataSetParameters toDataSetParametersDesign( 
+                        IParameterMetaData pmd )
+        throws OdaException
+    {
+        return toDataSetParametersDesign( pmd, null );
+    }
+
+    /**
+     * Converts the contents of an ODA runtime parameters meta data
+     * to an ODA design-time DataSetParameters instance.
+     * This may be used by an ODA custom page to
+     * populate a data set design instance with its
+     * parameter meta data definitions.
+     * @param pmd    ODA runtime parameters meta data instance
+     * @param defaultMode   default design-time parameter mode to apply
+     *                      if a parameter's mode is not recognized;
+     *                      may be null for no default value 
+     * @return  the converted DataSetParameters instance
+     * @throws OdaException
+     */
+    public static DataSetParameters toDataSetParametersDesign( 
+                        IParameterMetaData pmd, ParameterMode defaultMode )
+        throws OdaException
+    {
+        if( pmd == null || pmd.getParameterCount() == 0 )
+            return null; // nothing to convert
+        
+        DataSetParameters dataSetParams =
+            DesignFactory.eINSTANCE.createDataSetParameters();
+        
+        // iterate thru each runtime parameter's metadata,
+        // and convert to corresponding design object
+        int paramCount = pmd.getParameterCount();
+        for( int i = 1; i <= paramCount; i++ )
+        {
+            ParameterDefinition paramDefn =
+                DesignFactory.eINSTANCE.createParameterDefinition();
+
+            ParameterMode designMode = toParameterModeDesign( 
+                    pmd.getParameterMode(i), defaultMode );
+            if( designMode != null )
+                paramDefn.setInOutMode( designMode );            
+
+            DataElementAttributes paramAttrs =
+                DesignFactory.eINSTANCE.createDataElementAttributes();
+            paramAttrs.setPosition( i );
+            paramAttrs.setNativeDataTypeCode( pmd.getParameterType(i) );
+            toElementOptionalAttributes( paramAttrs, pmd, i );
+            
+            paramDefn.setAttributes( paramAttrs );
+            adjustParameterDefaultAttributes( paramDefn );
+            
+            dataSetParams.getParameterDefinitions().add( paramDefn );
+        }
+
+        return dataSetParams;
+    }
+
+    /**
+     * Converts the specified ODA runtime parameter mode value
+     * to corresponding ODA design-time parameter mode value.
+     * @param runtimeParamMode  an ODA runtime parameter mode value
+     * @return  the corresponding ODA design-time parameter mode value
+     */
+    public static ParameterMode toParameterModeDesign( 
+                                    int runtimeParamMode ) 
+    {
+        return toParameterModeDesign( runtimeParamMode, null );
+    }
+   
+    /**
+     * Converts the specified ODA runtime parameter mode value
+     * to corresponding ODA design-time parameter mode value.
+     * @param runtimeParamMode  an ODA runtime parameter mode value
+     * @param defaultMode       default design-time parameter mode to apply
+     *                          if specified runtimeParamMode is not recognized;
+     *                          may be null for no default value 
+     * @return  the corresponding ODA design-time parameter mode value
+     */
+    public static ParameterMode toParameterModeDesign( 
+                                    int runtimeParamMode, ParameterMode defaultMode ) 
+    {
+        ParameterMode designMode = null;
+        switch( runtimeParamMode )
+        {
+            case IParameterMetaData.parameterModeIn:
+                designMode = ParameterMode.IN_LITERAL; break;
+            case IParameterMetaData.parameterModeInOut:
+                designMode = ParameterMode.IN_OUT_LITERAL; break;
+            case IParameterMetaData.parameterModeOut:
+                designMode = ParameterMode.OUT_LITERAL; break;
+            default:
+                designMode = defaultMode; break;
+        }
+        return designMode;
+    }
+
+    /**
+     * Converts the value of an ODA runtime (result set column) nullability
+     * to corresponding value used in an ODA design-time definition.
+     * @param odaNullability an ODA runtime nullability constant
+     * @return  corresponding constant for use in an ODA design-time definition
+     * @deprecated As of 3.0.5, replaced by {@link #convertResultColumnNullability( int )}. 
+     */
+    public static ElementNullability toElementNullability( int odaNullability )
+    {
+        // for backward compatibility (Bugzilla 202407)
+        return convertResultColumnNullability( odaNullability );
+    }
+
+    /**
+     * Converts the value of an ODA runtime result set column nullability
+     * to corresponding value used in an ODA design-time element definition.
+     * @param columnNullability an ODA IResultSetMetaData nullability constant
+     * @return  corresponding constant for use in an ODA design-time definition
+     */
+    public static ElementNullability convertResultColumnNullability( int columnNullability )
+    {
+        return DesignSessionUtilBase.convertResultColumnNullability( columnNullability );
+    }
+    
+    /**
+     * Converts the value of an ODA runtime parameter nullability
+     * to corresponding value used in an ODA design-time element definition.
+     * @param parameterNullability an ODA IParameterMetaData nullability constant
+     * @return  corresponding constant for use in an ODA design-time definition
+     */
+    public static ElementNullability convertParameterNullability( int parameterNullability )
+    {
+        return DesignSessionUtilBase.convertParameterNullability( parameterNullability );
+    }
+
+    /**
+     * Adjusts the parameter's design-time attributes to ensure 
+     * that their default values are consistent with those converted from 
+     * the runtime metadata.
+     */
+    private static void adjustParameterDefaultAttributes( ParameterDefinition paramDefn )
+    {
+        assert( paramDefn != null );
+        DataElementAttributes basicAttrs = paramDefn.getAttributes();
+        if( basicAttrs == null )
+            return;     // no attributes to adjust from
+        
+        // a required input parameter (default setting) normally does not allow null value;
+        // adjusts to optional if it is explicitly defined to allow null value
+        if( paramDefn.isInput() && basicAttrs.allowsNull() )
+        {
+            InputElementAttributes inputAttributes = paramDefn.getEditableInputElementAttributes();
+            inputAttributes.setOptional( true );
+        }
+    }
+    
+    /**
+     * An utility method to look up the definition of the specified custom filter expression design.
+     * @param customExpr    a custom filter expression specified in a data set design's filter specification 
+     * @return  an instance of {@link FilterExpressionDefinition}, or null if no matching definition is found
+     * @since 3.2 (DTP 1.7)
+     */
+    public static FilterExpressionDefinition getExtensionCustomDefinition( CustomFilterExpression customExpr )
+    {
+        if( customExpr == null )
+            return null;
+        return getExtensionCustomDefinition( customExpr.getDeclaringExtensionId(), customExpr.getId() );
+    }
+    
+    /**
+     * An utility method to look up the definition of the specified custom filter expression
+     * declared by the specified extension.
+     * @param extensionId   unique id of an extension that implements the ODA dynamicResultSet extension point
+     * @param exprId    id of a custom filter expression 
+     * @return  an instance of {@link FilterExpressionDefinition}, or null if no matching definition is found
+     * @since 3.2 (DTP 1.7)
+     */
+    public static FilterExpressionDefinition getExtensionCustomDefinition( String extensionId, String exprId )
+    {
+        try
+        {
+            return ResultExtensionExplorer.getInstance().getExtensionFilterDefinition( extensionId, exprId );
+        }
+        catch( IllegalArgumentException ex )
+        {
+            // ignore exception
+        }
+        catch( OdaException ex )
+        {
+            // ignore exception
+        }
+        return null;
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/designsession/package.html b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/designsession/package.html
new file mode 100644
index 0000000..ea35641
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/designsession/package.html
@@ -0,0 +1,33 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2006, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+
+A utility component that provides the services
+to handle the DTP ODA Design Session Model API objects.
+<br>
+It can be used by an ODA consumer and/or a data provider
+in its management of an ODA design session.
+
+<!-- Put @see and @since tags down here. -->
+@since 3.0
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/manifest/.gitignore b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/manifest/.gitignore
new file mode 100644
index 0000000..73ebc4b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/manifest/.gitignore
@@ -0,0 +1 @@
+*.scc
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/manifest/DataSetPageInfo.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/manifest/DataSetPageInfo.java
new file mode 100644
index 0000000..2f5db2c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/manifest/DataSetPageInfo.java
@@ -0,0 +1,114 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.ui.manifest;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.ui.nls.Messages;
+
+/**
+ * Represents the definition of a customized page that 
+ * an extension contributes to an ODA host designer's data set dialog.
+ */
+public class DataSetPageInfo
+{
+    static final String ID_ATTRIBUTE = "id"; //$NON-NLS-1$
+    static final String CLASS_ATTRIBUTE = "wizardPageClass"; //$NON-NLS-1$
+
+    private String m_id;
+    private String m_wizardPageClassName;
+    private String m_displayName;
+    private String m_path;
+    private String m_icon;
+
+    DataSetPageInfo( IConfigurationElement dataSetPageElement ) 
+        throws OdaException
+    {
+        m_id = dataSetPageElement.getAttribute( ID_ATTRIBUTE );
+        if( m_id == null || m_id.length() == 0 )
+            throw new OdaException( 
+                    Messages.bind( Messages.manifest_missingAttributeValue,
+                                    ID_ATTRIBUTE ));
+
+        m_wizardPageClassName = dataSetPageElement.getAttribute( CLASS_ATTRIBUTE );
+        if( m_wizardPageClassName == null || m_wizardPageClassName.length() == 0 )
+            throw new OdaException( 
+                    Messages.bind( Messages.manifest_missingAttributeValue,
+                                    CLASS_ATTRIBUTE ));
+
+        m_displayName = dataSetPageElement.getAttribute( "displayName" ); //$NON-NLS-1$
+        m_path = dataSetPageElement.getAttribute( "path" ); //$NON-NLS-1$
+        m_icon = dataSetPageElement.getAttribute( "icon" ); //$NON-NLS-1$
+    }
+
+    /**
+     * Returns the unique name of this page within a data set dialog.
+     * @return the attribute value in <i>dataSetUI.dataSetPage.id</i>
+     */
+    public String getPageId()
+    {
+        return m_id;
+    }
+
+    /**
+     * Returns the fully qualified class name that implements 
+     * a custom data set wizard page that allows an user
+     * to create or edit an ODA data set design instance.
+     * <br>The wizard page class must extend from the ODA UI
+     * framework's data set wizard page base class.  
+     * See plugin schema for details.
+     * @return the attribute value in <i>dataSetUI.dataSetPage.wizardPageClass</i>
+     */
+    public String getWizardPageClassName()
+    {
+        return m_wizardPageClassName;
+    }
+
+    /**
+     * Returns the page title or descriptive name of a customized page
+     * that will be displayed in the UI of this page.
+     * @return the attribute value in <i>dataSetUI.dataSetPage.displayName</i>;
+     *          may be null if none is specified
+     */
+    public String getDisplayName()
+    {
+        // Default to its id, if no display name is specified
+        if ( m_displayName == null || m_displayName.length() == 0 )
+            return getPageId();
+        return m_displayName;
+    }
+
+    /**
+     * Returns the path of the page in a data set preference dialog.
+     * @return the attribute value in <i>dataSetUI.dataSetPage.path</i>;
+     *          may be null if none is specified
+     */
+    public String getPath()
+    {
+        return m_path;
+    }
+
+    /**
+     * Returns the relative path to an icon that may 
+     * be used in the UI in addition to the page's display name.
+     * @return the attribute value in <i>dataSetUI.dataSetPage.icon</i>;
+     *          may be null if none is specified
+     */
+    public String getIcon()
+    {
+        return m_icon;
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/manifest/DataSetUIElement.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/manifest/DataSetUIElement.java
new file mode 100644
index 0000000..2aa2f73
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/manifest/DataSetUIElement.java
@@ -0,0 +1,350 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.ui.manifest;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Hashtable;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.ui.nls.Messages;
+
+/**
+ * Represents the definition of customized data set designer
+ * that an ODA data provider extends to allow an user
+ * to create or edit an ODA data set design instance.
+ * This encapsulates the child elements for the data set wizard page(s) 
+ * and editor page(s).  
+ */
+public class DataSetUIElement
+{
+    private static final String WIZARD_ELEMENT_NAME = "dataSetWizard"; //$NON-NLS-1$
+    private static final String PAGE_ELEMENT_NAME = "dataSetPage"; //$NON-NLS-1$
+    private static final String ID_ATRIBUTE_NAME = "id"; //$NON-NLS-1$
+    
+    private String m_id;
+    private String m_initialPageId;
+    private boolean m_supportsInParameters;
+    private boolean m_supportsOutParameters;
+    private DataSetWizardInfo m_wizardInfo;
+    private Hashtable m_dataSetPages;
+    private ArrayList m_dataSetPageIds;
+    private IConfigurationElement m_dataSetElement;
+
+    DataSetUIElement( IConfigurationElement dataSetElement ) 
+        throws OdaException
+    {
+        m_dataSetElement = dataSetElement;
+        m_id = dataSetElement.getAttribute( ID_ATRIBUTE_NAME );
+        if( m_id == null || m_id.length() == 0 )
+            throw new OdaException( 
+                    Messages.bind( Messages.manifest_missingAttributeValue,
+                                    ID_ATRIBUTE_NAME ));
+        
+        m_initialPageId = dataSetElement.getAttribute( "initialPageId" ); //$NON-NLS-1$
+
+        m_supportsInParameters = true; // default
+        String hasParamDefn = dataSetElement.getAttribute( "supportsInParameters" ); //$NON-NLS-1$
+        if( hasParamDefn != null )
+        {
+            if( hasParamDefn.equalsIgnoreCase( "true" ) ||  //$NON-NLS-1$
+                hasParamDefn.equalsIgnoreCase( "false" ) ) //$NON-NLS-1$
+                m_supportsInParameters = Boolean.valueOf( hasParamDefn ).booleanValue();
+        }
+        
+        m_supportsOutParameters = false; // default
+        hasParamDefn = dataSetElement.getAttribute( "supportsOutParameters" ); //$NON-NLS-1$
+        if( hasParamDefn != null )
+        {
+            if( hasParamDefn.equalsIgnoreCase( "true" ) ||  //$NON-NLS-1$
+                hasParamDefn.equalsIgnoreCase( "false" ) ) //$NON-NLS-1$
+                m_supportsOutParameters = Boolean.valueOf( hasParamDefn ).booleanValue();
+        }
+
+        // dataSetWizard element; must have one and only one
+        IConfigurationElement wizardElement = 
+                                getWizardElement( dataSetElement );
+        if( wizardElement != null )
+            m_wizardInfo = new DataSetWizardInfo( wizardElement );
+
+        // dataSetPage elements; must have one or more
+        getDataSetPages( dataSetElement );
+    }
+
+    /**
+     * Collects the dataSetPage elements in the 
+     * specified dataSetElement, and keep in 
+     * instance variables.
+     * Expects to find one or more dataSetPage elements.
+     * @return a Hashtable of page id and corresponding 
+     *          page info instance
+     */
+    private Hashtable getDataSetPages( IConfigurationElement dataSetElement )
+        throws OdaException
+    {
+        IConfigurationElement[] pages = 
+            dataSetElement.getChildren( PAGE_ELEMENT_NAME );
+        if( pages.length == 0 )
+            throw new OdaException( 
+                Messages.bind( Messages.manifest_dataSetUi_missingElement,
+                                PAGE_ELEMENT_NAME ));
+        
+        m_dataSetPages = new Hashtable( pages.length );
+        m_dataSetPageIds = new ArrayList( pages.length );
+        for( int i = 0; i < pages.length; i++ )
+        {
+            IConfigurationElement aPage = pages[i];
+            String pageId = aPage.getAttribute( DataSetPageInfo.ID_ATTRIBUTE );
+            m_dataSetPages.put( pageId, 
+                              new DataSetPageInfo( aPage ) );
+
+            // maintains the sequence of page elements
+            m_dataSetPageIds.add( pageId );
+        }
+        return m_dataSetPages;
+    }
+
+    /**
+     * Returns the fully qualified ID that uniquely identifies 
+     * the ODA data set type within an ODA data source extension.  
+     * Its value must match that of the <i>dataSet.id</i> attribute 
+     * defined in the  
+     * <i>org.eclipse.datatools.connectivity.oda.dataSource</i> 
+     * extension of the same ODA driver.
+     * @return the attribute value in <i>dataSetUI.id</i>
+     */
+    public String getId()
+    {
+        return m_id;
+    }
+
+    /**
+     * Returns the id of a dataSetPage that should be selected
+     * and have initial focus in a preference dialog. 
+     * @return the attribute value in <i>dataSetUI.initialPageId</i>;
+     *          may be null if none is specified
+     */
+    public String getInitialPageId()
+    {
+        return m_initialPageId;
+    }
+
+    /**
+     * Indicates that this type of data set design supports 
+     * input parameter definitions, and that an ODA host designer might need 
+     * to collect further metadata on the parameter definitions provided 
+     * by the customized page(s).
+     * @return the attribute value in <i>dataSetUI.supportsInParameters</i>
+     */
+    public boolean supportsInParameters()
+    {
+        return m_supportsInParameters;
+    }
+
+    /**
+     * Indicates that this type of data set design supports 
+     * output parameter definitions, and that an ODA host designer might need 
+     * to collect further metadata on the parameter definitions provided 
+     * by the customized page(s).
+     * @return the attribute value in <i>dataSetUI.supportsOutParameters</i>
+     */
+    public boolean supportsOutParameters()
+    {
+        return m_supportsOutParameters;
+    }
+
+    /**
+     * Returns the configuration element of this instance.
+     * @return  a dataSetUI configuration element 
+     */
+    public IConfigurationElement getElement()
+    {
+        return m_dataSetElement;
+    }
+    
+    /**
+     * Returns the definition of a data set wizard that allows an user 
+     * to create a new ODA data set design instance.
+     * @return the wizard definition that represents the
+     *          <i>dataSetUI.dataSetWizard</i> element
+     */
+    public DataSetWizardInfo getWizardInfo()
+    {
+        return m_wizardInfo;
+    }
+    
+    /**
+     * Returns the dataSetWizard configuration element  
+     * that defines the wizard that allows an user 
+     * to create a new ODA data set design instance.
+     * @param dataSetUIElement  a dataSetUI configuration element 
+     * @return  the dataSetWizard configuration element
+     * @throws OdaException if no dataSetWizard element is defined
+     */
+    public static IConfigurationElement getWizardElement( 
+                    IConfigurationElement dataSetUIElement )
+        throws OdaException
+    {
+        if( dataSetUIElement == null )
+            return null;
+        // dataSetWizard element; expects one and only one
+        IConfigurationElement[] wizardElements = 
+            dataSetUIElement.getChildren( WIZARD_ELEMENT_NAME );
+
+    	// expects one element
+        if( wizardElements.length < 1 )  
+            throw new OdaException( 
+                Messages.bind( Messages.manifest_dataSetUi_missingElement,
+                                WIZARD_ELEMENT_NAME ));
+        
+        // >= 1 wizard element
+        return wizardElements[0];   // takes the first one
+    }
+    
+    /**
+     * Returns an array of definitions of
+     * customized data set pages that an extension contributes 
+     * to an ODA host designer's data set dialog.
+     * Its order is in the same sequence as the
+     * dataSetPage elements defined in the extension manifest.
+     * @return  an array of data set page definitions that
+     *          represent the
+     *          <i>dataSetUI.dataSetPage</i> elements
+     */
+    public DataSetPageInfo[] getPageDefinitions()
+    {
+        if( m_dataSetPageIds == null )
+            return new DataSetPageInfo[0];
+        
+        // follow the sequence of the defined pages
+        int numPages = m_dataSetPageIds.size();
+        ArrayList dataSetPages = new ArrayList( numPages );
+        for( int i = 0; i < numPages; i++ )
+        {
+            String pageId = (String) m_dataSetPageIds.get( i );
+            try
+            {
+                dataSetPages.add( getPageDefinition( pageId ) );
+            }
+            catch( OdaException e )
+            {
+                // ignore, skip
+                e.printStackTrace();
+                continue;
+            }
+        }
+
+        return (DataSetPageInfo[]) dataSetPages.toArray( 
+                    new DataSetPageInfo[ dataSetPages.size() ] );
+    }
+    
+    /**
+     * Returns an array of ids of the dataSetPage elements 
+     * defined in this data set ui element.
+     * Its order is in the same sequence as the
+     * dataSetPage elements defined in the extension manifest.
+     * @return  an array of data set page ids.
+     */
+    public String[] getPageIds()
+    {
+        if( m_dataSetPageIds == null )
+            return new String[0];
+        
+        return (String[]) m_dataSetPageIds.toArray( 
+                new String[ m_dataSetPageIds.size() ] );
+    }
+    
+    /**
+     * Returns the DataSetPageInfo instance that
+     * represents the dataSetPage element with the given id
+     * defined in this data set ui element.
+     * If the given page id is null and the data set UI
+     * extension has only one data set page element, that
+     * data set page will be returned by default.
+     * @param pageID  the id of a data set page element
+     * @return  the data set page definition
+     * @throws OdaException if no data set page id is specified, and
+     *                   there are more than one data set pages;
+     *                   or when no match is found for given page id 
+     */
+    public DataSetPageInfo getPageDefinition( String pageId ) 
+        throws OdaException
+    {
+        if( pageId == null || pageId.length() == 0 )
+        {
+            // find default data set page element and return it if found
+            if( m_dataSetPages == null ||
+                m_dataSetPages.size() != 1 )
+                throw new OdaException( Messages.manifest_dataSetUi_missingPageId );
+
+            Collection pages = m_dataSetPages.values();
+            assert( pages.size() == 1 );
+            return (DataSetPageInfo) pages.toArray()[0];
+        }
+        
+        DataSetPageInfo pageInfo = 
+            (DataSetPageInfo) m_dataSetPages.get( pageId );
+
+        if( pageInfo == null )
+            throw new OdaException( 
+                    Messages.bind( Messages.manifest_dataSetUi_invalidPageId,
+                                    pageId ));
+        
+        return pageInfo;
+    }
+    
+    /**
+     * Returns the dataSetPage configuration element  
+     * with the given page id
+     * defined in this data set ui element.
+     * If the given page id is null and the data set UI
+     * extension has only one data set page element, that
+     * data set page element will be returned by default.
+     * @param dataSetUIElement  a dataSetUI configuration element 
+     * @param pageID  the id of a data set page element
+     * @return the dataSetPage configuration element with given id;
+     *          may be null if no matching id is found
+     * @throws OdaException if no data set page id is specified, and
+     *                   there are more than one data set pages 
+     */
+    public static IConfigurationElement getPageElement( 
+            IConfigurationElement dataSetUIElement, String pageId )
+        throws OdaException
+    {
+        if( dataSetUIElement == null )
+            return null;
+        
+        IConfigurationElement[] pages = 
+            dataSetUIElement.getChildren( PAGE_ELEMENT_NAME );
+        if( pageId == null || pageId.length() == 0 )
+        {
+            // find default data set page element and return it if found
+            if( pages.length != 1 )
+                throw new OdaException( Messages.manifest_dataSetUi_missingPageId );
+            return pages[0];
+        }
+        
+        // find the one with the matching pageId
+        for( int i = 0; i < pages.length; i++ )
+        {
+            IConfigurationElement pageElement = pages[i];
+            if( pageId.equalsIgnoreCase( pageElement.getAttribute( DataSetPageInfo.ID_ATTRIBUTE ) ))
+                return pageElement;
+        }
+        return null;    // no matching id is found
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/manifest/DataSetWizardInfo.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/manifest/DataSetWizardInfo.java
new file mode 100644
index 0000000..9c0cff1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/manifest/DataSetWizardInfo.java
@@ -0,0 +1,67 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.ui.manifest;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.ui.nls.Messages;
+
+/**
+ * Represents the customizable behavior defined by an ODA UI Extension
+ * for its data set wizard that allows an user to create 
+ * a new ODA data set design instance. 
+ * It encapsulates the content of the <i>dataSetWizard</i> element
+ * defined in the ODA Design UI extension point.
+ */
+public class DataSetWizardInfo
+{
+    public static final String CLASS_ATTRIBUTE = "class"; //$NON-NLS-1$
+    
+    private String m_className;
+    private String m_windowTitle;
+    
+    DataSetWizardInfo( IConfigurationElement dataSetWizardElement ) 
+        throws OdaException
+    {
+        m_className = dataSetWizardElement.getAttribute( CLASS_ATTRIBUTE );
+        if( m_className == null || m_className.length() == 0 )
+            throw new OdaException( 
+                    Messages.bind( Messages.manifest_missingAttributeValue,
+                                    CLASS_ATTRIBUTE ));
+
+        m_windowTitle = dataSetWizardElement.getAttribute( "windowTitle" );         //$NON-NLS-1$
+    }
+
+    /**
+     * Returns the full class name of the data set wizard.
+     * <br>The wizard class must either use or extend from the ODA 
+     * framework's wizard base class.  See plugin schema for details.
+     * @return the full class name of the data set wizard
+     */
+    public String getClassName()
+    {
+        return m_className;
+    }
+
+    /**
+     * Returns the customized title of the data set wizard window.
+     * @return  customized window title; may be null, if none is specified
+     */
+    public String getWindowTitle()
+    {
+        return m_windowTitle;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/manifest/DataSourceWizardInfo.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/manifest/DataSourceWizardInfo.java
new file mode 100644
index 0000000..adb3e2f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/manifest/DataSourceWizardInfo.java
@@ -0,0 +1,94 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.ui.manifest;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.ui.nls.Messages;
+
+/**
+ * Represents the customizable behavior defined by an ODA UI Extension
+ * for its new data source wizard dialog. 
+ * It encapsulates the content of the <i>newDataSourceWizard</i> element
+ * defined in the ODA Design UI extension point.
+ */
+public class DataSourceWizardInfo
+{
+    private String m_windowTitle;
+    private boolean m_includesProgressMonitor = true; // default value
+    private String m_pageTitle;
+    private String m_pageClassName;
+    
+    DataSourceWizardInfo( IConfigurationElement wizardElement )
+        throws OdaException
+    {
+        // required attribute
+        final String classAttributeName = "pageClass";  //$NON-NLS-1$
+        m_pageClassName = wizardElement.getAttribute( classAttributeName );
+        if( m_pageClassName == null || m_pageClassName.length() == 0 )
+            throw new OdaException( 
+                    Messages.bind( Messages.manifest_missingAttributeValue,
+                                    classAttributeName )); 
+        
+        // optional attributes
+        m_windowTitle = wizardElement.getAttribute( "windowTitle" );  //$NON-NLS-1$
+        m_pageTitle = wizardElement.getAttribute( "pageTitle" );  //$NON-NLS-1$
+
+        String boolValue = wizardElement.getAttribute( "includesProgressMonitor" );  //$NON-NLS-1$
+        if( boolValue != null )
+        {
+            if ( boolValue.equalsIgnoreCase( "true" ) ||   //$NON-NLS-1$
+                 boolValue.equalsIgnoreCase( "false" ) )   //$NON-NLS-1$
+                m_includesProgressMonitor = Boolean.valueOf( boolValue ).booleanValue();
+        }
+    }
+    
+    DataSourceWizardInfo()
+    {
+    }
+
+    /**
+     * @return Returns the m_windowTitle.
+     */
+    public String getWindowTitle()
+    {
+        return m_windowTitle;
+    }
+
+    /**
+     * @return Returns the m_includesProgressMonitor.
+     */
+    public boolean includesProgressMonitor()
+    {
+        return m_includesProgressMonitor;
+    }
+
+    /**
+     * @return Returns the m_pageClassName.
+     */
+    public String getPageClassName()
+    {
+        return m_pageClassName;
+    }
+
+    /**
+     * @return Returns the m_pageTitle.
+     */
+    public String getPageTitle()
+    {
+        return m_pageTitle;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/manifest/UIExtensionManifest.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/manifest/UIExtensionManifest.java
new file mode 100644
index 0000000..901a742
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/manifest/UIExtensionManifest.java
@@ -0,0 +1,203 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.ui.manifest;
+
+import java.util.Collection;
+import java.util.Hashtable;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.ui.nls.Messages;
+
+/**
+ * Encapsulates access to the content of an ODA design-time
+ * plug-in extension manifest.
+ */
+public class UIExtensionManifest
+{
+    static final String DATA_SOURCE_ELEMENT_NAME = "dataSourceUI"; //$NON-NLS-1$
+    static final String DATA_SET_ELEMENT_NAME = "dataSetUI"; //$NON-NLS-1$
+    static final String DATA_SOURCE_WIZARD_ELEMENT_NAME = "newDataSourceWizard";  //$NON-NLS-1$
+
+    private String m_namespace;
+    private String m_dataSourceElementId;
+    private DataSourceWizardInfo m_dataSourceWizardInfo;
+    private Hashtable m_dataSetUIElements;
+
+    UIExtensionManifest( IExtension dataSourceExtn ) throws OdaException
+    {
+        // first process the dataSourceUI element
+        IConfigurationElement dataSourceElement = 
+            UIManifestExplorer.getNamedElement( dataSourceExtn, DATA_SOURCE_ELEMENT_NAME );
+        assert( dataSourceElement != null );
+
+        m_namespace = dataSourceExtn.getContributor().getName();
+        
+        // first cache the data source element's attributes
+        m_dataSourceElementId = dataSourceElement.getAttribute( "id" );  //$NON-NLS-1$
+        assert( m_dataSourceElementId != null && 
+                m_dataSourceElementId.length() > 0 );
+
+        // newDataSourceWizard element associated with dataSourceUI
+        IConfigurationElement[] newWizardElements = 
+            dataSourceElement.getChildren( DATA_SOURCE_WIZARD_ELEMENT_NAME );
+        if( newWizardElements.length < 1 )  // expects one element
+            throw new OdaException( 
+                    Messages.bind( Messages.manifest_missingAttributeValue,
+                                DATA_SOURCE_WIZARD_ELEMENT_NAME )); 
+        m_dataSourceWizardInfo = new DataSourceWizardInfo( newWizardElements[0] );
+
+        // data set UI definition elements in the same extension
+        m_dataSetUIElements = getDataSetUIElements( dataSourceExtn );
+    }
+
+    UIExtensionManifest()
+    {
+    }
+    
+    /**
+     * Returns a collection of dataSetUI elements in the given extension.
+     */
+    private Hashtable getDataSetUIElements( IExtension extension )
+        throws OdaException
+    {
+        Hashtable dataSetElements = new Hashtable();
+        IConfigurationElement[] configElements =
+            UIManifestExplorer.getNamedElements( extension, DATA_SET_ELEMENT_NAME );
+        for( int i = 0, size = configElements.length; i < size; i++ )
+        {
+            IConfigurationElement configElement = configElements[i];
+
+            String dataSetId = configElement.getAttribute( "id" );  //$NON-NLS-1$
+
+            // if duplicated data set ids exist in the extension,  
+            // only the last one applies
+            dataSetElements.put( dataSetId, 
+                            new DataSetUIElement( configElement ) );
+        }
+        
+        if( dataSetElements.size() < 1 )    // expects one or more
+        	throw new OdaException( 
+                Messages.bind( Messages.manifest_dataSetUi_missingElement,
+                		DATA_SET_ELEMENT_NAME ));
+        
+        return dataSetElements;
+    }
+
+    /**
+     * Returns the namespace of the plugin that contributes this extension.
+     * @return
+     */
+    public String getNamespace()
+    {
+        return m_namespace;
+    }
+
+    /**
+     * Returns the fully qualified ID that uniquely identifies 
+     * the ODA data source extension within an ODA consumer 
+     * application's environment.
+     * @return the attribute value in <i>dataSourceUI.id</i>
+     */
+    public String getDataSourceElementId()
+    {
+        return m_dataSourceElementId;
+    }
+
+    /**
+     * Returns the definition of customizable behavior of a 
+     * data source wizard that allows an user to create 
+     * a new ODA data source design instance.
+     * @return the attribute value in <i>dataSourceUI.newDataSourceWizard</i>
+     */
+    public DataSourceWizardInfo getDataSourceWizardInfo()
+    {
+        return m_dataSourceWizardInfo;
+    }
+    
+    /**
+     * Returns an array of DataSetUIElement instances that
+     * represent the dataSetUI elements defined in
+     * this data source extension.
+     * @return  an array of data set ui elements 
+     */
+    public DataSetUIElement[] getDataSetUIElements()
+    {
+        if( m_dataSetUIElements == null )
+            return new DataSetUIElement[0];
+        
+        Collection dataSetUIs = m_dataSetUIElements.values();
+        return (DataSetUIElement[]) dataSetUIs.toArray( 
+                    new DataSetUIElement[ dataSetUIs.size() ] );
+    }
+    
+    /**
+     * Returns an array of ids of the dataSetUI elements 
+     * defined in this data source extension.
+     * @return  an array of data set element ids.
+     */
+    public String[] getDataSetUIElementIDs()
+    {
+        if( m_dataSetUIElements == null )
+            return new String[0];
+        
+        Set dataSetIDs = m_dataSetUIElements.keySet();
+        return (String[]) dataSetIDs.toArray( 
+                    new String[ dataSetIDs.size() ] );
+    }
+    
+    /**
+     * Returns the DataSetUIElement instance that
+     * represents the dataSetUI element with the given id
+     * defined in this data source extension.
+     * If the given data set element id is null and the data source UI
+     * extension has only one data set element, that
+     * data set element will be returned by default.
+     * @param dataSetElementID  the id of the data set ui element.
+     * @return  the data set element definition.
+     * @throws OdaException if there is no data set ui definition associated 
+     *                   with the specified data set element id, or 
+     *                   if there are more than one data set elements 
+     *                   when no element id is specified.
+     */
+    public DataSetUIElement getDataSetUIElement( String dataSetElementID ) 
+        throws OdaException
+    {
+        if( dataSetElementID == null || dataSetElementID.length() == 0 )
+        {
+            // find default data set element and return it if found
+            if( m_dataSetUIElements == null ||
+                m_dataSetUIElements.size() != 1 )
+                throw new OdaException( Messages.manifest_missingDataSetElementId );
+
+            Collection dataSetTypes = m_dataSetUIElements.values();
+            assert( dataSetTypes.size() == 1 );
+            return (DataSetUIElement) dataSetTypes.toArray()[0];
+        }
+        
+        DataSetUIElement dataSetUIDefn = 
+            (DataSetUIElement) m_dataSetUIElements.get( dataSetElementID );
+
+        if( dataSetUIDefn == null )
+            throw new OdaException( 
+                    Messages.bind( Messages.manifest_invalidDataSetElementId,
+                                    dataSetElementID ));
+        
+        return dataSetUIDefn;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/manifest/UIManifestExplorer.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/manifest/UIManifestExplorer.java
new file mode 100644
index 0000000..6180b70
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/manifest/UIManifestExplorer.java
@@ -0,0 +1,451 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.ui.manifest;
+
+import java.util.Hashtable;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileManager;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.ProfileWizardProvider;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ManifestExplorer;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ManifestUtil;
+
+
+/**
+ * The UI Manifest Explorer is the entry point to explore and access
+ * the manifest of all the ODA design time plug-ins extensions that implement the 
+ * <code>org.eclipse.datatools.connectivity.oda.design.ui.dataSource</code> extension point.
+ * The <code>UIManifestExplorer</code> singleton instance is accessed 
+ * using the <code>getInstance()</code> static method.
+ */
+public class UIManifestExplorer
+{
+    private static UIManifestExplorer sm_instance = null;
+
+    private static final String DTP_ODA_UI_EXT_POINT = 
+            "org.eclipse.datatools.connectivity.oda.design.ui.dataSource";  //$NON-NLS-1$
+    private static final String UI_PROPERTY_PAGE_EXT_PT = 
+            "org.eclipse.ui.propertyPages";  //$NON-NLS-1$
+    private static final String PAGE_ELEMENT_NAME = "page";  //$NON-NLS-1$
+    
+    private Hashtable m_manifestsById;  // cached copy of manifests by odaDataSourceId
+    private Hashtable m_manifestsWithWizName; // cached copy of manifests with wizard name
+    
+    // trace logging variables
+    private static String sm_loggerName;
+    private static Logger sm_logger = null;
+    
+    /**
+     * Returns the <code>UIManifestExplorer</code> instance to  
+     * explore the manifest of all ODA data source UI extensions.
+     * @return  the <code>UIManifestExplorer</code> singleton instance.
+     */
+    public static UIManifestExplorer getInstance()
+    {
+        if( sm_instance == null )
+        {
+            sm_instance = new UIManifestExplorer();
+            
+            // works around bug in some J2EE servers - Bugzilla #126073
+            sm_loggerName = sm_instance.getClass().getPackage().getName();
+        }
+        return sm_instance;
+    }
+
+    private UIManifestExplorer()
+    {
+    }
+    
+    /**
+     * Refresh the manifest explorer, and allows it to get
+     * the latest ODA Design UI extension manifests.
+     */
+    public void refresh()
+    {
+        // reset the cached collection of ODA Design UI extension manifest instances
+        m_manifestsById = null;
+        m_manifestsWithWizName = null;
+    }
+
+    private Hashtable getCachedManifests()
+    {
+    	if( m_manifestsById == null )
+            m_manifestsById = new Hashtable();
+    	return m_manifestsById;
+    }
+
+    /**
+     * Returns a collection of all DTP ODA design-time extension configuration information 
+     * found in plugins registry.  
+     * Each extension's UIExtensionManifest and its corresponding new wizard name
+     * are stored as the key and value in the returned collection.
+     * Returns an empty collection if there are no design-time extensions found.
+     * Invalid extension definitions are ignored.
+     * @return  a collection of all DTP ODA design-time extension manifests, with
+     *          each extension's UIExtensionManifest and its corresponding new wizard name
+     *          as the key and value.
+     */
+    public Map getExtensionManifestsWithWizardName()
+    {
+        if( m_manifestsWithWizName == null )
+        {
+            IExtension[] extensions = getExtensions( DTP_ODA_UI_EXT_POINT );
+            
+            int length = ( extensions == null ) ? 0 : extensions.length;
+            m_manifestsWithWizName = new Hashtable( length );
+            for( int i = 0; i < length; i++ )
+            {
+                IExtension extension = extensions[i];
+            
+                UIExtensionManifest uiManifest = null;
+                try
+                {
+                    if( extension != null )
+                        uiManifest = new UIExtensionManifest( extension );
+                }
+                catch( OdaException ex )
+                {
+                    getLogger().log( Level.WARNING, "Ignoring invalid extension.", ex ); //$NON-NLS-1$
+                }
+                if( uiManifest == null )
+                    continue;   // skip
+                
+                // for each oda designer extension, find its corresponding new wizard name
+                // and add to a collection
+                
+                String wizardName = getDataSourceWizardName( 
+                                        uiManifest.getDataSourceElementId() );
+                m_manifestsWithWizName.put( uiManifest, wizardName );
+            }
+        }
+        
+        return m_manifestsWithWizName;
+    }
+    
+    /**
+     * Finds and returns the extension configuration information defined 
+     * in the plugin manifest of the ODA data source UI extension that
+     * implements the DTP ODA design-time extension point -
+     * <code>org.eclipse.datatools.connectivity.oda.design.ui.dataSource</code>.
+     * @param dataSourceId  the unique id of the data source element
+     *                      in the ODA designer data source extension.
+     * @return              the UI extension manifest information;
+     *                      or null, if no extension is found
+     * @throws OdaException if the extension manifest is invalid
+     */
+    public UIExtensionManifest getExtensionManifest( String dataSourceId ) 
+        throws OdaException
+    {
+        return getExtensionManifest( dataSourceId, DTP_ODA_UI_EXT_POINT );
+    }
+    
+    /**
+     * Returns the DataSetUIElement instance that
+     * represents the dataSetUI element with the given id defined
+     * in the ODA extension manifest of the specified data source 
+     * element id. 
+     * An ODA extension is one that
+     * implements the DTP ODA design-time extension point -
+     * <code>org.eclipse.datatools.connectivity.oda.design.ui.dataSource</code>.
+     * If the given data set element id is null and the data source UI
+     * extension has only one data set element, that
+     * data set element will be returned by default.
+     * @param dataSourceId  the unique id of the data source element
+     *                      in the ODA designer data source extension.
+     * @param dataSetElementID  the id of the data set ui element.
+     * @return  the data set element definition.
+     * @throws OdaException if specified data source element id 
+     * 					 or data set element id is not found, or 
+     *                   if there are more than one data set elements 
+     *                   but no dataSetElementID is specified.
+     */
+    public DataSetUIElement getDataSetUIElement( String dataSourceId,
+    								String dataSetElementID ) 
+    	throws OdaException
+    {
+    	UIExtensionManifest manifest = getExtensionManifest( dataSourceId );
+    	if( manifest == null )	// no such data source element id found
+            throw new OdaException(
+                    new IllegalArgumentException( dataSourceId ) );
+    	
+    	return manifest.getDataSetUIElement( dataSetElementID );
+    }
+    
+    /**
+     * Finds and returns the extension configuration information defined 
+     * in the plugin manifest of the data source extension
+     * that contains the specified data source element and 
+     * implements the specified ODA extension point.
+     * @param dataSourceId      the unique id of the data source element
+     *                          in a data source extension.
+     * @param extensionPoint    the id of the extension point to search
+     * @return                  the extension manifest information,
+     *                          or null if no extension configuration is found.
+     * @throws OdaException     if any specified argument is invalid, or
+     *                          the manifest found is not valid.
+     */
+    private UIExtensionManifest getExtensionManifest( 
+                                        String dataSourceId, 
+                                        String extensionPoint ) 
+        throws OdaException
+    {
+        if ( dataSourceId == null || dataSourceId.length() == 0 )
+            throw new OdaException(
+                    new IllegalArgumentException( dataSourceId ) );
+        
+        if ( extensionPoint == null || extensionPoint.length() == 0 )
+            throw new OdaException(
+                    new IllegalArgumentException( extensionPoint ) );
+    
+        // first check if specified dataSourceId's manifest
+        // is already in cache, and use it
+        UIExtensionManifest aManifest =
+            (UIExtensionManifest) getCachedManifests().get( dataSourceId );
+        if( aManifest != null )
+            return aManifest;
+        
+        // not yet cached, find and create a new one
+        IExtension[] extensions = 
+            getExtensions( extensionPoint );
+        
+        IExtension extension = findExtension( dataSourceId, extensions );
+    
+        if ( extension == null )    // not found
+            return null;
+        
+        // found extension 
+        aManifest = new UIExtensionManifest( extension );
+        
+        // keep it in cached collection
+        getCachedManifests().put( dataSourceId, aManifest );
+        
+        return aManifest;
+    }
+       
+    /*
+     * Finds the extension that matches the given data source element ID
+     * among the given collection of extensions.
+     */
+    private IExtension findExtension( String dataSourceId, IExtension[] extensions )
+        throws OdaException
+    {
+        int length = ( extensions == null ) ? 
+                0 : extensions.length;
+
+        for( int i = 0; i < length; i++ )
+        {
+            IExtension extension = extensions[i];
+            
+            String extnDataSourceId = getDataSourceId( extension );
+            if( extnDataSourceId == null )  // not a valid extension, skip
+                continue;
+            
+            /* The first extension found with matching dataSourceId 
+             * in its dataSourceUI element is considered a match.
+             */
+            if( extnDataSourceId.equalsIgnoreCase( dataSourceId ) )
+                return extension;
+        }
+        
+        return null;
+    }
+    
+    private String getDataSourceId( IExtension extension )
+    {
+        try
+        {
+            /* Each odaDataSource extension should have only 
+             * one dataSource element.
+             */
+            IConfigurationElement dataSourceElement = 
+                getNamedElement( extension, 
+                        UIExtensionManifest.DATA_SOURCE_ELEMENT_NAME );
+            return dataSourceElement.getAttribute( "id" );  //$NON-NLS-1$
+        }
+        catch( OdaException ex )
+        {
+            // log and ignore
+            getLogger().log( Level.WARNING, "Ignoring invalid extension.", ex ); //$NON-NLS-1$
+        }
+        
+        return null;
+    }
+    
+    /**
+     * Returns the name defined in the connectionProfile.newWizard element of
+     * the specified odaDataSourceId.
+     * @param odaDataSourceId
+     * @return
+     */
+    private String getDataSourceWizardName( String odaDataSourceId )
+    {
+        IExtension[] extensions = 
+            getExtensions( ConnectionProfileManager.EXTENSION_ID );
+        
+        int length = ( extensions == null ) ? 0 : extensions.length;
+        for( int i = 0; i < length; i++ )
+        {
+            IConfigurationElement wizardElement = null;
+            try
+            {
+                wizardElement = getNamedElement( extensions[i], 
+                                            ConnectionProfileManager.EXT_ELEM_NEW_WIZARD );
+            }
+            catch( OdaException ex )
+            {
+                // log and ignore
+                getLogger().log( Level.WARNING, "Ignoring invalid extension.", ex ); //$NON-NLS-1$
+            }            
+            if( wizardElement == null )
+                continue;
+            
+            ProfileWizardProvider wizardProvider = new ProfileWizardProvider( wizardElement );
+            
+            /* The first extension found with matching odaDataSourceId 
+             * in its newWizard.profile attribute is considered a match.
+             * An ODA profile uses the odaDataSourceId as its profile identifier,
+             * which uniquely identifies an ODA run-time data source extension.
+             */
+            if( odaDataSourceId.equalsIgnoreCase( wizardProvider.getProfile() ) )
+            {
+                String wizardName = wizardProvider.getName();
+                if( wizardName != null && wizardName.length() > 0 )
+                    return wizardName;
+                return odaDataSourceId;     // no name defined, use id instead
+            }
+            // element does not match given odaDataSourceId, continue with next extension
+        }
+        
+        // could not find the connectionProfile.newWizard element for given odaDataSourceId
+        return odaDataSourceId;
+    }
+    
+    /**
+     * Finds and returns the propertyPages extension configuration element 
+     * in the plugin manifest of an extended ODA Designer UI plugin,
+     * which implements the 
+     * <code>org.eclipse.datatools.connectivity.oda.design.ui.dataSource</code> and
+     * <code>org.eclipse.ui.propertyPages</code> extension points.
+     * @param odaDataSourceId  an ODA data source extension element ID
+     * @return  the configuration element of the <code>org.eclipse.ui.propertyPages</code>
+     *          extension
+     */
+    public IConfigurationElement getPropertyPageElement( String odaDataSourceId )
+    {
+        String odaUIPluginId = getOdaDesignerId( odaDataSourceId );
+        
+        // find all the extensions of the ODA UI plugin
+        IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+        IExtension[] extensions = pluginRegistry.getExtensions( odaUIPluginId );
+        
+        // look for the propertyPage extension element
+        for( int i = 0; i < extensions.length; i++ )
+        {
+            String extnPointId = extensions[i].getExtensionPointUniqueIdentifier();
+            if( ! extnPointId.equals( UI_PROPERTY_PAGE_EXT_PT ) )
+                continue;   // check next extension
+            
+            try
+            {
+                // check whether the extension is for the given ODA data source id
+                IConfigurationElement element =
+                    getNamedElement( extensions[i],
+                        PAGE_ELEMENT_NAME );
+                if( odaDataSourceId.equals( element.getAttribute( "id" ) ))  //$NON-NLS-1$
+                        return element;     // found matching element
+            }
+            catch( OdaException e )
+            {
+                continue;   // ignore, check next extension
+            }
+        }
+        
+        return null;    // none is found
+    }
+
+    /**
+     * Finds the plugin id that implements the
+     * <code>org.eclipse.datatools.connectivity.oda.design.ui.dataSource</code>
+     * extension point for the given ODA run-time data source element id.
+     * @param odaDataSourceId   an ODA data source extension element ID
+     * @return
+     */
+    public String getOdaDesignerId( String odaDataSourceId )
+    {
+        UIExtensionManifest manifest;
+        try
+        {
+            manifest = getExtensionManifest( odaDataSourceId );
+        }
+        catch( Exception e )
+        {
+            return null;
+        }
+         
+        return ( manifest == null ) ?
+                null : manifest.getNamespace();
+    }
+    
+    private static Logger getLogger()
+    {
+        if( sm_logger == null )
+            sm_logger = Logger.getLogger( sm_loggerName );
+        return sm_logger;
+    }
+    
+    /* 
+     * Returns all the plugin extensions that implements the given
+     * extension point.
+     */
+    private static IExtension[] getExtensions( String extPoint )
+    {
+        return ManifestExplorer.getExtensions( extPoint );
+    }
+    
+    /** 
+     * Returns the configuration element of the given extension
+     * and element name.
+     * <br>For internal use only.
+     */
+    static IConfigurationElement getNamedElement( IExtension extension,
+            String elementName ) 
+        throws OdaException
+    {
+        return ManifestUtil.getNamedElement( extension, elementName, "id" ); //$NON-NLS-1$
+    }
+    
+    /**
+     * Returns a collection of configuration elements with the given name
+     * in the given extension.  
+     * Validates that each element has an id attribute defined.
+     * @return a collection of matching configuration elements
+     * <br>For internal use only.
+     */
+    static IConfigurationElement[] getNamedElements( 
+                                            IExtension extension,
+                                            String elementName ) 
+        throws OdaException
+    {
+        return ManifestUtil.getNamedElements( extension, elementName, "id" ); //$NON-NLS-1$
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/manifest/package.html b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/manifest/package.html
new file mode 100644
index 0000000..64cdad6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/manifest/package.html
@@ -0,0 +1,43 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2006, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+
+A utility component for accessing the content of an 
+ODA data source UI extension's manifest.
+<br>
+It can be used by an ODA consumer and/or a data provider
+to discover the plug-in extension configuration.
+<p>
+The utility's initial entry point is the singleton <code>UIManifestExplorer</code>.
+It provides the service to explore all the static
+ODA data source UI extensions, and access to each 
+extension's configuration information specified 
+in its plug-in manifest file.
+<br>  
+The content of such ODA data source UI extension configuration
+is encapsulated in an <code>UIExtensionManifest</code> and its
+associated objects.
+
+<!-- Put @see and @since tags down here. -->
+@since 3.0
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/nls/.gitignore b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/nls/.gitignore
new file mode 100644
index 0000000..d1c5347
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/nls/.gitignore
@@ -0,0 +1 @@
+*ver.scc
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/nls/Messages.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/nls/Messages.java
new file mode 100644
index 0000000..3083ec3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/nls/Messages.java
@@ -0,0 +1,99 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2013 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.ui.nls;
+
+import org.eclipse.osgi.util.NLS;
+
+public class Messages extends NLS
+{
+    private static final String BUNDLE_NAME = "org.eclipse.datatools.connectivity.oda.design.ui.nls.messages"; //$NON-NLS-1$
+
+    private Messages()
+    {
+    }
+
+    static
+    {
+        // initialize resource bundle
+        NLS.initializeMessages( BUNDLE_NAME, Messages.class );
+    }
+
+    public static String adaptableDataSourceProfile_unableAccessProfile;
+    public static String common_notInDesignSession;
+    public static String common_nullArgument;
+    public static String common_missingDataSourceDesign;
+    public static String common_createClassFailed;
+    public static String dbProfilePage_defaultPageMessage;
+    public static String dbProfilePage_editPageMessage;
+    public static String dbProfilePage_invalidDataSource;
+    public static String dbProfilePage_noCustomPage;
+    public static String dbProfilePage_notInDesignSession;
+    public static String extension_mustInheritFromODAPage;
+    public static String extension_mustInheritFromODAWizard;
+    public static String extension_missingManifestElement;
+    public static String extension_missingPropertyPage;
+    public static String profilePage_browse_noselection_error;
+    public static String profilePage_button_browse;
+    public static String profilePage_button_browse_tooltip;
+    public static String profilePage_button_browse_filter;
+    public static String profilePage_button_browse_filter_tooltiptext;
+    public static String profilePage_button_relativepath;
+    public static String profilePage_button_absolutepath;
+    public static String profilePage_button_new;
+    public static String profilePage_checkboxLabel_maintainLink;
+    public static String profilePage_checkboxLabel_useDefaultName;
+    public static String profilePage_checkboxTooltip_maintainLink;
+    public static String profilePage_deprecatedProfileDisplayName;
+    public static String profilePage_error_emptyName;
+    public static String profilePage_error_invalidName;
+    public static String profilePage_error_invalidProfileStorePath;
+    public static String profilePage_label_dataSourceName;
+    public static String profilePage_label_profileStore;
+    public static String profilePage_odaTreeName;
+    public static String profilePage_pageLabel;
+    public static String profilePage_pageTitle;
+    public static String profilePage_resourcebaseuri_failure;        
+    public static String profilePage_selectProfileDefaultMessage;
+    public static String wizard_dataSource_defaultTitle;
+    public static String wizard_missingDataSourceId;
+    public static String wizard_invalidManifest;
+    public static String page_defaultDataSourceTitle;
+    public static String designSession_alreadyHasLinkedProfile;
+    public static String designSession_flushFailed;
+    public static String designSession_invalidArgument;
+    public static String designSession_invalidEditApiCall;
+    public static String designSession_invalidNewDesignApiCall;
+    public static String designSession_invalidProfileName;
+    public static String designSession_invalidProfileNameOrFilePath;
+    public static String designSession_missingDataSetUIElement;
+    public static String manifest_missingAttributeValue;
+    public static String manifest_missingDataSetElementId;
+    public static String manifest_invalidDataSetElementId;
+    public static String manifest_dataSetUi_missingPageId;
+    public static String manifest_dataSetUi_invalidPageId;
+    public static String manifest_dataSetUi_missingElement;
+    public static String ui_defaultDataSourceTitle;
+    public static String ui_replaceFilePrompt;
+    public static String ui_requiredFieldsMissingValue;
+    public static String ui_errorLabel;
+    public static String ui_errorCreatingCustomCtrls;
+    public static String ui_saveAsTitle;
+    public static String profileStoreCreationDialog_button_new;
+    public static String profileStoreCreationDialog_title;
+    public static String profileStoreCreationDialog_grouptext;
+    public static String profileStoreCreationDialog_newbutton_tooltiptext;
+    public static String profileStoreCreationDialog_fileext_error;
+    public static String preferencesPage_openDataAccessDescription;
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/nls/TextProcessorWrapper.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/nls/TextProcessorWrapper.java
new file mode 100644
index 0000000..c02c273
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/nls/TextProcessorWrapper.java
@@ -0,0 +1,165 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.ui.nls;
+
+import java.lang.reflect.Method;
+
+import org.eclipse.osgi.util.TextProcessor;
+
+/**
+ *  Wrapper class to provide 3.3 functionality to the 
+ *  platform osgi 3.2 version of org.eclipse.osgi.util.TextProcessor, whose
+ *  {@link #deprocess(String)} method was not available till 3.3.
+ *  <br>Note: Since DTP no longer needs to be compatible with Platform 3.2.x, 
+ *  the wrapper class now simply redirects its calls to the TextProcessor. 
+ */
+public class TextProcessorWrapper
+{    
+    private static final String DEPROCESS_METHOD_NAME = "deprocess"; //$NON-NLS-1$
+    private static Method sm_deprocessMethod = null;	// lazy initialization
+    private static boolean sm_hasDeprocessMethod = true;
+
+    // following variables duplicated from the eclipse osgi 3.3 TextProcessor implementation
+    // @see org.eclipse.osgi.util.TextProcessor
+    
+	// left to right marker
+    private static final char LRM = '\u200e';
+
+    // left to right embedding
+    private static final char LRE = '\u202a';
+
+    // pop directional format
+    private static final char PDF = '\u202c';
+
+    // whether or not the locale BiDi
+    private static boolean isBidi = false;
+
+    // whether or not the current platform supports directional characters
+    private static boolean isSupportedPlatform = false;
+    
+    /**
+     * Provides compatibility to {@link #deprocess(String)} method introduced in the eclipse osgi 3.3 TextProcessor.
+     * @see org.eclipse.osgi.util.TextProcessor#deprocess(String)
+     */
+    public static String deprocess( String str )
+    {
+        /* since DTP no longer needs to be compatible with Platform 3.2.x, 
+         * calls the TextProcessor method directly
+         */
+        return TextProcessor.deprocess( str );
+    }
+    
+    /**
+     * Use reflection API to call platform version of deprocess method, 
+     * if exists.
+     * @param str	a String value to deprocess
+     * @return		deprocessed string value
+     * @throws Exception	if the deprocess static method does not exist, or
+     * 				if encountered error during its invocation
+     */
+    protected static String invokeDeprocess( String str ) 
+    	throws Exception
+    {
+    	Method deprocessMethod = getDeprocessMethod();
+
+    	// invoke static method with specified argument
+    	Object returnValue = deprocessMethod.invoke( null, new Object[] { str } );
+    	if( returnValue instanceof String )
+    		return (String) returnValue;
+    	
+		sm_hasDeprocessMethod = false;
+    	throw new NoSuchMethodException( DEPROCESS_METHOD_NAME );
+    }
+    
+    /**
+     * Returns the deprocess method if exists, using reflection API.
+     * @return
+     * @throws Exception	if method is not found
+     */
+    private static Method getDeprocessMethod() 
+		throws Exception
+    {
+    	if( ! sm_hasDeprocessMethod )
+        	throw new NoSuchMethodException( DEPROCESS_METHOD_NAME );
+    	
+    	if( sm_deprocessMethod == null )	// not yet initialized
+    	{
+        	Class<TextProcessor> processorClass = TextProcessor.class;
+        	try 
+        	{
+				sm_deprocessMethod = processorClass.getMethod( DEPROCESS_METHOD_NAME, 
+											new Class[] { String.class } );
+			} 
+        	catch ( Exception e ) 
+        	{
+        		sm_hasDeprocessMethod = false;
+        		throw e;
+			}
+    	}
+    	return sm_deprocessMethod;
+    }
+    
+    /**
+     * Local implementation of the eclipse osgi 3.3 TextProcessor.deprocess method.
+     * @param str
+     * @return
+     * @see org.eclipse.osgi.util.TextProcessor#deprocess(String)
+     */
+    protected static String deprocessImpl( String str )
+    {
+        // don't do all the work if not a valid case 
+        if (str == null || str.length() <= 1 || !isSupportedPlatform || !isBidi)
+            return str;
+        
+        StringBuffer buf = new StringBuffer();
+        for (int i = 0; i < str.length(); i++){
+            char c = str.charAt(i);
+            switch(c){
+                case LRE: continue;
+                case PDF: continue;
+                case LRM: continue;
+                default:
+                    buf.append(c);
+            }
+        }
+        
+        return buf.toString();
+    }
+
+    /*
+     * @see org.eclipse.osgi.util.TextProcessor#process(String)
+     */
+    public static String process( String text )
+    {
+        return TextProcessor.process( text );
+    }
+    
+    /*
+     * @see org.eclipse.osgi.util.TextProcessor#process(String, String)
+     */
+    public static String process( String str, String delimiter ) 
+    {
+        return TextProcessor.process( str, delimiter );
+    }
+    
+    /*
+     * @see org.eclipse.osgi.util.TextProcessor#getDefaultDelimiters()
+     */
+    public static String getDefaultDelimiters()
+    {
+        return TextProcessor.getDefaultDelimiters();
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/nls/messages.properties b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/nls/messages.properties
new file mode 100644
index 0000000..87d1b26
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/nls/messages.properties
@@ -0,0 +1,79 @@
+#
+#************************************************************************
+# Copyright (c) 2006, 2013 Actuate Corporation.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#  Actuate Corporation - initial API and implementation
+#  
+#************************************************************************
+#
+adaptableDataSourceProfile_unableAccessProfile=Unable to access the linked profile in ({0}); using the local properties in the data source design instead.\n Caused by exception: {1}
+common_notInDesignSession=Not currently in a design session.
+common_nullArgument=Argument must not be null.
+common_missingDataSourceDesign=Missing data source design in OdaDesignSession argument.
+common_createClassFailed=Unable to find or create class ({0}).
+extension_mustInheritFromODAPage=Invalid wizard page ({0}) implementation. An ODA custom wizard page must extend from {1}.
+extension_mustInheritFromODAWizard=Invalid wizard ({0}) implementation. An ODA custom wizard must use or extend from {1}.
+extension_missingManifestElement=Missing implementation of the ODA design ui extension point ({0})
+extension_missingPropertyPage=Missing property page implementation in the ODA design ui extension.
+wizard_dataSource_defaultTitle=New Data Source
+wizard_missingDataSourceId=Missing ODA Data Source ID in the Connection Profile attribute.
+wizard_invalidManifest=Invalid plug-in manifest content in the oda.design.ui.dataSource extension.
+page_defaultDataSourceTitle=Custom Data Source Properties
+designSession_alreadyHasLinkedProfile=The data source ({0}) has already externalized its properties in a connection profile.  It cannot be re-exported.
+designSession_flushFailed=Unable to flush the current data set design session.
+designSession_invalidArgument=Invalid argument specified in design session method.
+designSession_invalidEditApiCall=Invalid design session API call for editing a design.
+designSession_invalidNewDesignApiCall=Invalid design session API call for creating a new design.
+designSession_invalidProfileName=Unable to locate the linked profile ({0}) in the specified Connection Profile Store.
+designSession_invalidProfileNameOrFilePath=Unable to locate the linked profile ({0}) or the connection profile store file ({1}) specified in the data source design.
+designSession_missingDataSetUIElement=No dataSetUI element is defined for OdaDataSourceId ({0}) and OdaDataSetId ({1}).
+manifest_missingAttributeValue=Missing value in required attribute ({0}).
+manifest_missingDataSetElementId=The dataSetElementID argument requires a value.
+manifest_invalidDataSetElementId=Invalid dataSet element id ({0}).
+manifest_dataSetUi_missingPageId=A pageId value is required.
+manifest_dataSetUi_invalidPageId=Invalid pageId value ({0}).
+manifest_dataSetUi_missingElement=A {0} element is required in extension.
+ui_defaultDataSourceTitle=Data Source Connection Properties
+ui_replaceFilePrompt={0} already exists. Do you want to replace it?
+ui_requiredFieldsMissingValue=One or more required fields (marked with '*') are missing a value.
+ui_errorLabel=Error
+ui_errorCreatingCustomCtrls=Error encountered in creating and initializing custom controls.
+ui_saveAsTitle=Save As
+profilePage_pageTitle=Select a Connection Profile
+profilePage_pageLabel=Connection Profile
+profilePage_selectProfileDefaultMessage=Select the connection profile from which to create a data source
+profilePage_label_profileStore=Connection Profile &Store:
+profilePage_button_browse=B&rowse...
+profilePage_button_relativepath=&Relative Path
+profilePage_button_absolutepath=&Absolute Path
+profilePage_button_browse_filter=File &extension(s) to display:
+profilePage_button_browse_filter_tooltiptext=Specify one or more comma-separated file extensions to filter the files displayed below.\nFor example: .txt, .profiles
+profilePage_button_new=Ne&w...
+profilePage_button_browse_tooltip=Browse for a connection profile store file.\nRelative path: the relative path based on the host resources.\nAbsolute path: the absolute path of the file system.
+profilePage_resourcebaseuri_failure=Failed to get the application resource base URI!
+profilePage_browse_noselection_error=Please specify a connection profile store file name 
+profilePage_odaTreeName=ODA Data Sources
+profilePage_checkboxLabel_useDefaultName=&Use the default data source name
+profilePage_label_dataSourceName=&Data Source Name:
+profilePage_error_emptyName=Data source name must not be blank.
+profilePage_checkboxTooltip_maintainLink=Always use the Connection Profile Store's externalized property values in the data source.
+profilePage_checkboxLabel_maintainLink=Use &externalized properties in Connection Profile Store
+profilePage_error_invalidName=Data source name is invalid.
+profilePage_error_invalidProfileStorePath=Invalid path for a connection profile store
+profilePage_deprecatedProfileDisplayName={0} (replaced by {1})
+profileStoreCreationDialog_button_new=Ne&w...
+profileStoreCreationDialog_title=Create a Connection Profile Store
+profileStoreCreationDialog_grouptext=Select the connection &profiles to be included in the store:
+profileStoreCreationDialog_newbutton_tooltiptext=Create a new connection profile
+profileStoreCreationDialog_fileext_error=A connection profile store file must have a file extension.\nPress OK to add the default file extension ".{0}" to the file name.
+dbProfilePage_defaultPageMessage=Verify the JDBC Driver and Connection Details
+dbProfilePage_editPageMessage=Edit the JDBC Driver and Connection Details
+dbProfilePage_invalidDataSource=Invalid data source.  Update the connection profile reference, or create a new data source instead.
+dbProfilePage_notInDesignSession=Unable to open a property page outside of an ODA design session.
+dbProfilePage_noCustomPage=Unable to find and open the database driver specific property page.
+preferencesPage_openDataAccessDescription=Set the preferences for individual Open Data Access data sources \nby using the pages under this node.
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/nls/package.html b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/nls/package.html
new file mode 100644
index 0000000..bad64dd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/nls/package.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+
+[<b>Non-API</b>] Contains internal implementation of internationalization and localization features.
+<br>
+<!-- Put @see and @since tags down here. -->
+@since 3.0
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/pages/impl/.gitignore b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/pages/impl/.gitignore
new file mode 100644
index 0000000..d1c5347
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/pages/impl/.gitignore
@@ -0,0 +1 @@
+*ver.scc
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/pages/impl/DefaultDataSourcePageHelper.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/pages/impl/DefaultDataSourcePageHelper.java
new file mode 100644
index 0000000..9f9c7b3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/pages/impl/DefaultDataSourcePageHelper.java
@@ -0,0 +1,1075 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2012 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.ui.pages.impl;
+
+import java.util.ArrayList;
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.InputElementAttributes;
+import org.eclipse.datatools.connectivity.oda.design.PropertyAttributes;
+import org.eclipse.datatools.connectivity.oda.design.ScalarValueChoices;
+import org.eclipse.datatools.connectivity.oda.design.ScalarValueDefinition;
+import org.eclipse.datatools.connectivity.oda.design.ui.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ExtensionManifest;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ManifestExplorer;
+import org.eclipse.datatools.connectivity.oda.util.manifest.Property;
+import org.eclipse.datatools.connectivity.oda.util.manifest.PropertyChoice;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * Common implementation of data source properties page controls,
+ * shared by the default data source wizard page
+ * and property page classes.
+ */
+public class DefaultDataSourcePageHelper
+{
+    public static final String DEFAULT_MESSAGE = Messages.ui_defaultDataSourceTitle;
+    private static final String EMPTY_STRING = ""; //$NON-NLS-1$
+    private static final String COLON_CHAR = ":"; //$NON-NLS-1$
+    private static final String REQUIRED_FIELD_SYMBOL = " *"; //$NON-NLS-1$
+
+    private DefaultDataSourceWizardPage m_wizardPage = null;
+    private DefaultDataSourcePropertyPage m_propertyPage = null;
+    private transient Control m_propCtrls[] = null;
+    private ExtensionManifest m_manifest = null;
+    private Property[] m_extendedManifestProps = null;
+    private Property[] m_manifestProps = null;
+    private Properties m_manifestPropsVisibility = null;
+    private org.eclipse.datatools.connectivity.oda.design.Properties
+    	m_dataSourceDesignProps = null;
+    private ArrayList m_orderedPropNameList = null;
+    
+    protected DefaultDataSourcePageHelper( DefaultDataSourceWizardPage page )
+    {
+    	assert( page != null );
+        m_wizardPage = page;
+        init();
+    }
+
+    protected DefaultDataSourcePageHelper( DefaultDataSourcePropertyPage page )
+    {
+    	assert( page != null );
+        m_propertyPage = page;
+        init();
+        
+        // Get the current editing data source design.
+    	DataSourceDesign dataSourceDesign = m_propertyPage.getCurrentDataSource();
+    	
+    	// Get the data source design public properties.
+    	if ( dataSourceDesign != null )
+    		m_dataSourceDesignProps = dataSourceDesign.getPublicProperties();
+    }
+    
+    private void init()
+    {
+        // get manifest properties that this page would provide UI control
+        m_manifestProps = getEditableManifestProperties();
+        m_manifestPropsVisibility = getManifest().getPropertiesVisibility();    
+
+        // get all inherited and extension-defined property definitions
+        m_extendedManifestProps = getManifest().getProperties( true );
+    }
+
+    /**
+     * Returns manifest properties that this page would provide UI control
+     * for user input.
+     * @return  an array of ODA property definition, including group
+     *          definition if available
+     */
+    protected Property[] getEditableManifestProperties()
+    {
+        /* the default data source page does not provide UI control to edit the
+         * connection profile properties, since they are expected to be edited
+         * by the dedicated ProfileSelection pages;
+         * returns just the extension defined properties, excluding
+         * those inherited profile properties from the manifest list
+         */
+        return getManifest().getProperties( false );
+    }
+    
+    protected void createCustomControl( Composite parent ) throws OdaException
+    {
+    	// Create a ScrolledComposite as the child of the parent wizard page.
+    	final ScrolledComposite scrolledComposite = new ScrolledComposite( parent, SWT.V_SCROLL | SWT.BORDER );
+    	scrolledComposite.setExpandVertical( true );
+    	scrolledComposite.setExpandHorizontal( true );
+    	
+    	// Create a Composite with the ScrolledComposite as the parent.
+    	final Composite content = new Composite( scrolledComposite, SWT.NONE );
+    	scrolledComposite.setContent( content );
+    	
+    	// Set up control listener to monitor the resizing of the properties pane.
+    	scrolledComposite.addControlListener( 
+    			new ControlAdapter() 
+    			{
+    				public void controlResized( ControlEvent e ) 
+    				{
+    					Rectangle r = scrolledComposite.getClientArea();
+    					scrolledComposite.setMinSize( content.computeSize( r.width, SWT.DEFAULT ));
+    				}
+    			});
+
+    	// Set up the property field controls.
+        setupPropFields( content );
+    }
+    
+    protected Properties collectCustomProperties( Properties props )
+    {
+        if( props == null )
+            props = new Properties();
+        
+        for( int i = 0 ; i < getPropCount(); i++ )
+        {
+            String propVal = EMPTY_STRING;
+            
+            if ( m_propCtrls[ i ] instanceof Text )
+                propVal = ( ( Text ) m_propCtrls[ i ] ).getText();
+            else if ( m_propCtrls[ i ] instanceof Combo )
+            {
+            	int selectionIndex = ( ( Combo ) m_propCtrls[ i ] ).getSelectionIndex();
+            	if ( selectionIndex != -1 )
+            	{
+            		propVal = getPropChoiceSelection( i , selectionIndex );
+            	}
+            	else
+            	{
+            		assert( false );
+            		propVal = EMPTY_STRING;            		
+            	}
+            }
+            else if ( m_propCtrls[ i ] == null )
+            {
+                // The property is hidden from the user.  Therefore, just 
+                // return the default value.  Notice that if the property
+            	// is a choice, the propVal will be the choice's name, not 
+            	// the choice value.
+                propVal = getPropDefaultValue( i );
+            }
+            else
+                assert( false );
+            
+            if ( propVal == null )
+                propVal = EMPTY_STRING;
+            
+            String propName = getPropName( i );
+            props.setProperty( propName, propVal );
+        }
+        
+        return props;
+    }
+    
+    protected int getPropCount()
+    {
+    	return getOrderedPropNameList().size();    		
+    }
+    
+    protected String getPropGroupName( int propIndex )
+    {
+    	String propName = getPropName( propIndex );
+    	assert( propName != null );
+    	
+    	return getManifestPropGroupName( propName );
+    }
+    
+    protected String getPropChoiceSelection( int propIndex, int choiceIndex )
+    {
+    	String propName = getPropName( propIndex );
+    	assert( propName != null );
+    	
+    	// First, attempt to read the choices from the existing data source design.
+    	String choiceName = getDesignPropChoiceSelection( propName, choiceIndex );
+    	if ( choiceName != null )
+    		return choiceName;
+    	
+    	// Otherwise, try look up from the manifest.
+    	return getManifestPropChoiceSelection( propName, choiceIndex );
+    }
+    
+   
+    protected String getPropName( int propIndex )
+    {
+    	return ( String ) getOrderedPropNameList().get( propIndex );
+    }
+
+    protected String getPropDisplayName( int propIndex )
+    {
+    	String propName = getPropName( propIndex );
+    	assert( propName != null );
+    	
+    	// Get display name from data source design
+    	String displayName = getDesignPropDisplayName( propName );
+    	
+    	// If the value exists, return it.
+    	if ( displayName != null )
+    		return displayName;
+    	
+    	// Otherwise, return the display name found from the manifest property.
+    	return getManifestPropDisplayName( propName );
+    }
+    
+    protected String getPropDefaultValue( int propIndex )
+    {
+    	String propName = getPropName( propIndex );
+    	assert( propName != null );
+    	
+    	// Get default value from Data Source Design.
+    	String defaultVal = getDesignPropDefaultValue( propName );
+    	
+    	// If the value exists, return it.
+    	if ( defaultVal != null )
+    		return defaultVal;
+
+    	// Otherwise, return the default value found from the manifest property.
+        return getManifestPropDefaultValue( propName );
+    }
+    
+    protected Boolean isPropHidden( int propIndex )
+    {
+    	String propName = getPropName( propIndex );
+    	assert( propName != null );
+    	
+    	// The attribute of whether the attribute is hidden is
+    	// only available in the manifest, but not in the data source design.
+    	return isManifestPropHidden( propName );
+    }
+    
+    protected boolean isPropRequired( int propIndex )
+    {
+    	String propName = getPropName( propIndex );
+    	assert( propName != null );
+    	
+    	// Look up the required/optional property info from the 
+    	// existing data source design.
+    	Boolean boolObj = isDesignPropRequired( propName );
+    	if ( boolObj != null )
+    		return ( boolObj.booleanValue() == false );
+
+    	// Otherwise, by default we return false.
+		// Currently we don't have any information about required field
+		// in the manifest.
+    	return false;
+    }
+    
+    protected Boolean isPropReadOnly( int propIndex )
+    {
+    	String propName = getPropName( propIndex );
+    	assert( propName != null );
+    	
+    	// Get Editable property from the existing Data Source Design.
+    	Boolean isEditable = isDesignPropReadOnly( propName );
+    	
+    	// If value exists, return the information.
+    	if ( isEditable != null )
+    		return isEditable;
+    	
+    	// Otherwise, return the value from the manifest property.
+    	return isManifestPropReadOnly( propName );
+    }
+    
+    protected Boolean isPropEncryptable( int propIndex )
+    {
+    	String propName = getPropName( propIndex );
+    	assert( propName != null );
+    	
+    	// Get Encryptable value from the existing data source design.
+    	Boolean isEncryptable = isDesignPropEncryptable( propName );
+    	
+    	// If value exists, return it.
+    	if ( isEncryptable != null )
+    		return isEncryptable;
+    	
+    	// Otherwise, return the value obtained from the manifest property.
+    	return isManifestPropEncryptable( propName );
+    }
+    
+    protected ArrayList getPropChoices( int propIndex )
+    {
+    	String propName = getPropName( propIndex );
+    	assert( propName != null );
+    
+    	// Get choice label list from the existing data source design.
+    	ArrayList choiceLabelList = getDesignPropChoiceLabels( propName );
+    	
+    	// If exists, use it.
+    	if ( choiceLabelList != null && choiceLabelList.size() > 0 )
+    		return choiceLabelList;
+    	
+    	// Otherwise, get choice label list from the manifest property.
+    	return getManifestPropChoiceLabels( propName );
+    }
+    
+    protected Integer findPropChoiceIndex( int propIndex, String propVal )
+    {
+    	String propName = getPropName( propIndex );
+    	assert( propName != null );
+    	
+    	Integer choiceIndex = findDesignPropChoiceIndex( propName, propVal );
+    	if ( choiceIndex != null )
+    		return choiceIndex;
+    	
+    	return findManifestPropChoiceIndex( propName, propVal );
+    }
+    
+    protected org.eclipse.datatools.connectivity.oda.design.Property
+	    getDesignProperty( String propName )
+	{
+    	if ( m_dataSourceDesignProps == null )
+    		return null;
+    	
+		return m_dataSourceDesignProps.findProperty( propName );
+	}
+    
+    protected String getDesignPropDisplayName( String propName )
+    {
+    	PropertyAttributes propAttrs = getDesignPropDesignAttrs( propName );
+    	if ( propAttrs == null )
+    		return null;
+    	
+    	return propAttrs.getDisplayName();
+    }
+    
+    protected PropertyAttributes getDesignPropDesignAttrs( String propName )
+    {
+    	org.eclipse.datatools.connectivity.oda.design.Property prop = 
+    		getDesignProperty( propName );
+    	if ( prop == null )
+    		return null;    	
+    	
+    	return prop.getDesignAttributes();
+    }
+    
+    protected InputElementAttributes getDesignPropElementAttrs( String propName )
+    {
+    	PropertyAttributes propAttrs = getDesignPropDesignAttrs( propName );
+    	if ( propAttrs == null )
+    		return null;
+    	
+    	return propAttrs.getElementAttributes();
+    }
+
+    protected String getDesignPropDefaultValue( String propName )
+    {
+    	InputElementAttributes inputElemAttrs = getDesignPropElementAttrs( propName );
+    	if ( inputElemAttrs == null )
+    		return null;
+    	
+    	return inputElemAttrs.getDefaultScalarValue();
+    }
+    
+    protected Boolean isDesignPropReadOnly( String propName )
+    {
+    	InputElementAttributes inputElemAttrs = getDesignPropElementAttrs( propName );
+    	if ( inputElemAttrs == null )
+    		return null;
+    	
+    	if ( inputElemAttrs.isSetEditable() )
+    		return new Boolean( inputElemAttrs.isEditable() == false );
+    	
+    	return null;
+    }
+    
+    protected Boolean isDesignPropRequired( String propName )
+    {
+    	InputElementAttributes inputElemAttrs = getDesignPropElementAttrs( propName );
+    	if ( inputElemAttrs == null )
+    		return null;
+    	
+    	if ( inputElemAttrs.isSetOptional() )
+    		return new Boolean( inputElemAttrs.isOptional() );
+    	
+    	return null;
+    }
+    
+    protected Boolean isDesignPropEncryptable( String propName )
+    {
+    	InputElementAttributes inputElemAttrs = getDesignPropElementAttrs( propName );
+    	if ( inputElemAttrs == null )
+    		return null;
+    	
+    	if ( inputElemAttrs.isSetMasksValue() )
+    		return new Boolean( inputElemAttrs.isMasksValue() );
+    	
+    	return null;
+    }
+    
+    protected EList getDesignPropChoices( String propName )
+    {
+    	InputElementAttributes inputElemAttrs = getDesignPropElementAttrs( propName );
+    	if ( inputElemAttrs == null )
+    		return null;
+    	
+    	ScalarValueChoices scalarValueChoices = inputElemAttrs.getStaticValueChoices();
+    	if ( scalarValueChoices == null )
+    		return null;
+    	
+    	return scalarValueChoices.getScalarValues();    	
+    }
+    
+    protected ArrayList getDesignPropChoiceLabels( String propName ) 
+    {
+    	// Look up the choice list from the existing data source design.
+    	EList choiceList = getDesignPropChoices( propName );
+    	if ( choiceList == null || choiceList.size() == 0 )
+    		return null;
+    	
+    	ArrayList choiceLabelList = new ArrayList();
+    	for( int i = 0; i < choiceList.size(); i++ )
+    	{
+    		ScalarValueDefinition scalarValueDefn = 
+    			( ( ScalarValueDefinition ) choiceList.get( i ) );
+    		
+    		// Use the display name as label.
+    		String label = scalarValueDefn.getDisplayName();
+    		
+    		// If display name is empty, use the value.
+    		if ( isEmpty( label ) )
+    			label = scalarValueDefn.getValue();
+    		
+    		choiceLabelList.add( label );
+    	}
+    	
+    	return choiceLabelList;
+    }
+    
+    protected String getDesignPropChoiceSelection( String propName, int choiceIndex )
+    {
+    	EList choiceList = getDesignPropChoices( propName );
+    	if ( choiceList == null || choiceList.size() == 0 )
+    		return null;
+    	
+   		ScalarValueDefinition scalarValueDefn = 
+   			( ( ScalarValueDefinition ) choiceList.get( choiceIndex ) );
+    	
+   		assert( scalarValueDefn != null );
+   		return scalarValueDefn.getValue();
+    }
+    
+    protected Integer findDesignPropChoiceIndex( String propName, String propVal )
+    {
+    	// Try obtain the choice labe list from the existing data source design.
+    	EList choiceList = getDesignPropChoices( propName );
+    	if ( choiceList == null || choiceList.size() == 0 )
+    		return null;
+
+    	for( int i = 0; i < choiceList.size(); i++ )
+    	{
+    		ScalarValueDefinition scalarValueDefn = 
+    			( ( ScalarValueDefinition ) choiceList.get( i ) );
+    		
+    		if ( propVal.equals( scalarValueDefn.getValue() ) )
+    			return new Integer( i );
+    	}
+    	
+    	return new Integer( -1 );
+    }
+    
+    protected void validatePropertyFields()
+    {
+        for( int i = 0 ; i < getPropCount(); i++ )
+        {
+            String propVal = null;
+            
+            if ( m_propCtrls[ i ] instanceof Text )
+                propVal = ( ( Text ) m_propCtrls[ i ] ).getText();
+            else if ( m_propCtrls[ i ] instanceof Combo )
+            {
+            	int index = ( ( Combo ) m_propCtrls[ i ] ).getSelectionIndex();
+            	if ( index == -1 )
+            		propVal = EMPTY_STRING;
+            	else
+            		propVal = getPropChoiceSelection( i , index );
+            }
+            else if ( m_propCtrls[ i ] == null )
+            {
+                // The property is hidden from the user.  Therefore, just 
+                // return the default value.  Notice that if the property
+            	// is a choice, the propVal will be the choice's name, not 
+            	// the choice value.
+                propVal = getPropDefaultValue( i );
+            }
+            else
+                assert( false );
+            
+            if ( isPropRequired( i ) && isEmpty( propVal ) )
+            {
+                setMessage( Messages.ui_requiredFieldsMissingValue, 
+                		IMessageProvider.WARNING );
+                return;
+            }
+        }
+        
+        // If the code reaches here, all the required fields are non-empty.
+        setMessage( DEFAULT_MESSAGE, IMessageProvider.NONE );
+    }
+    
+    protected void initCustomControl( Properties profileProps )
+    {
+        for( int i = 0; i < getPropCount(); i++ )
+        {
+            String propVal = EMPTY_STRING;
+            
+            if ( profileProps != null )
+                propVal = profileProps.getProperty( getPropName( i ) );    
+            
+            setPropertyControlValue( i, propVal );
+        }
+        
+        validatePropertyFields();
+    }
+
+    protected ArrayList getOrderedPropNameList()
+    {
+    	// Check if we already have the ordered property name list
+    	if ( m_orderedPropNameList != null )
+    		return m_orderedPropNameList;
+
+    	// Form a list of ordered property names.  This list keeps track
+    	// of the actual sequence of the properties to be displayed in the UI page
+    	ArrayList orderedPropNameList = new ArrayList();
+
+    	// There are two cases:
+    	// (1) If data source design exists, its public props takes precedence
+    	//     over the manifest props.  The props will be displayed as follows:
+    	//     - If there are props that exist in the data source design 
+    	//       but not in the manifest, they will be displayed first.
+    	//     - Then the props which are common to the data source design
+    	//       and the manifest will be displayed.
+    	// (2) If a data source design does not exist, the manifest props 
+    	//     will be used.
+    	
+    	if( m_dataSourceDesignProps != null )
+    	{
+        	// First, we iterate through all the data source design public 
+        	// props.  Add the ones that aren't existing in the manifest to the
+        	// ordered prop name list.  We choose to display them first.
+    		EList propList = m_dataSourceDesignProps.getProperties();
+    		for( int i = 0; i < propList.size(); i++ )
+    		{
+    			org.eclipse.datatools.connectivity.oda.design.Property prop
+    				= ( org.eclipse.datatools.connectivity.oda.design.Property ) propList.get( i );
+    			if( getExtendedManifestProp( prop.getName() ) == null )
+    			{
+    			    /* this property is only defined in the data source design,
+    			     * and not found in the extension manifest list
+    			     * of extension-defined and framework-defined properties,
+    			     * add it to the ordered property name list
+    			     */
+    				orderedPropNameList.add( prop.getName() );
+    			}
+    		}
+    		
+        	/* next we iterate through all the manifest properties intended for UI control, and 
+    		 * filter/include only those that are also defined in the data source design.
+    		 * Note that the loop is made on the manifest property collection
+    		 * because it contains property defintion that has grouping information,
+    		 * whereas the property defintion defined in data source design
+    		 * has no group info.
+    		 */
+    		for( int i = 0; i < m_manifestProps.length; i++ )
+    		{
+    			Property prop = m_manifestProps[ i ];
+                assert( prop != null );
+    			String propName = prop.getName();
+    			if( getDesignProperty( propName ) != null )  // also defined in dataSourceDesign
+    			{
+    			    orderedPropNameList.add( propName );    				
+    			}
+    		}
+    	}
+    	else
+    	{
+    		// Data Source Design does not exist, simply use all
+    		// the properties in the manifest intended for UI control
+    		for( int i = 0; i < m_manifestProps.length; i++ )
+    		{
+    			Property prop = m_manifestProps[ i ];
+    			assert( prop != null );
+   				orderedPropNameList.add( prop.getName() );    				
+    		}    		
+    	}
+    	
+    	m_orderedPropNameList = orderedPropNameList;
+    	return m_orderedPropNameList;
+    }
+    
+    protected void setupPropFields( Composite composite )
+    {
+        GridLayout layout = new GridLayout( );
+        
+        layout.numColumns = 5;
+        composite.setLayout( layout );
+        
+        m_propCtrls = new Control[ getPropCount() ];
+        
+        String curGroupName = null;
+        Composite curCtrlParent = null;
+        
+        for( int i = 0; i < getPropCount(); i++ )
+        {
+        	Boolean isHidden = isPropHidden( i );
+        	
+            // If the property is hidden, move on to the next prop.
+        	if ( isHidden != null && isHidden.booleanValue() )
+                continue;
+            
+            String propGroupName = getPropGroupName( i );
+            
+            if ( isEmpty( propGroupName ) )
+            {
+            	curCtrlParent = composite;
+            	curGroupName = null;
+            }
+            else
+            {
+            	// This property belongs to a group.  See if this is 
+            	// a new group or an existing group.
+            	if ( hasSameGroup( propGroupName, curGroupName ) == false )
+            	{
+            		String propName = getPropName( i );
+            		assert( propName != null );
+            		
+            		curCtrlParent = createGroupControl( composite, 
+            				getManifestPropGroupDisplayName( propName ) );
+            		
+                    // Set the location of the group control.
+                    GridData data = new GridData( GridData.FILL_HORIZONTAL );
+                    data.horizontalSpan = 5;
+                    curCtrlParent.setLayoutData( data );   
+                    
+            		curGroupName = propGroupName;
+            	}
+            }
+            
+            // Create property label and control.
+            setUpPropertyLabelAndControl( curCtrlParent, i );
+        }
+        
+        setPageComplete( true );
+    }
+
+    protected void setUpPropertyLabelAndControl( Composite parent, int propIndex )
+    {
+    	assert( parent != null );
+    	
+        // Set up the label.
+        createPropertyLabel( parent, propIndex );
+
+        // Set up the control for specifying the value.
+        m_propCtrls[ propIndex ] = createPropertyControl( parent, propIndex );
+
+        // Set the location of the control.
+        GridData data = new GridData( GridData.FILL_HORIZONTAL );
+        data.horizontalSpan = 4;
+        m_propCtrls[ propIndex ].setLayoutData( data );    	
+    }
+    
+    protected Group createGroupControl( Composite parent, String groupName )
+    {
+		Group groupCtrl = new Group( parent, SWT.NULL);
+		groupCtrl.setLayout( new GridLayout() );
+		groupCtrl.setText( groupName );
+		
+        GridLayout layout = new GridLayout( );
+        
+        layout.numColumns = 5;
+        groupCtrl.setLayout( layout );
+		
+		return groupCtrl;
+    }
+    
+    protected boolean isEmpty( String name )
+    {
+    	return ( name == null || name.length() == 0 );
+    }
+    
+    protected boolean hasSameGroup( String propGroupName, String curGroupName )
+    {
+    	if ( isEmpty( propGroupName ) != isEmpty( curGroupName ) )
+    		return false;
+    	
+    	if ( isEmpty( propGroupName ) && isEmpty( curGroupName ) )
+    		return true;
+    	
+    	return ( propGroupName.equals( curGroupName ) );
+    }
+    
+    private Property getExtendedManifestProp( String propName )
+    {
+        return getManifestProp( m_extendedManifestProps, propName );
+    }
+    
+    protected Property getManifestProp( String propName )
+    {
+        return getManifestProp( m_manifestProps, propName );
+    }
+    
+    private Property getManifestProp( Property[] properties, String propName )
+    {
+        if( properties == null )
+            return null;
+        
+    	for( int i = 0; i < properties.length; i++ )
+    	{
+    		if ( properties[ i ].getName().equals( propName ) )
+    			return properties[ i ];
+    	}
+    	
+    	return null;
+    }
+    
+    protected String getManifestPropDefaultValue( String propName )
+    {
+    	Property prop = getManifestProp( propName );
+    	if ( prop == null )
+    		return null;
+    	
+    	return prop.getDefaultValue();
+    }
+    
+    protected String getManifestPropDisplayName( String propName )
+    {
+    	Property prop = getManifestProp( propName );
+    	if ( prop == null )
+    		return null;
+    	
+    	return prop.getDisplayName();
+    }
+    
+    protected String getManifestPropGroupName( String propName )
+    {
+    	Property prop = getManifestProp( propName );
+    	if ( prop == null )
+    		return null;
+    	
+    	return prop.getGroupName();
+    }
+    
+    protected String getManifestPropGroupDisplayName( String propName )
+    {
+    	Property prop = getManifestProp( propName );
+    	if ( prop == null )
+    		return null;
+    	
+    	return prop.getGroupDisplayName();
+    }
+    
+    protected String getManifestPropChoiceSelection( String propName, int choiceIndex )
+    {
+    	Property prop = getManifestProp( propName );
+    	if ( prop == null )
+    		return null;
+    	
+    	PropertyChoice[] choices = prop.getChoices();
+    	PropertyChoice choice = choices[ choiceIndex ];
+    	assert( choice != null );
+    	return choice.getName();    	
+    }
+
+    protected Boolean isManifestPropHidden( String propName )
+    {
+    	Property prop = getManifestProp( propName );
+    	if ( prop == null )
+    		return null;
+    	
+    	boolean boolVal = 
+    		( prop.isVisible( m_manifestPropsVisibility ) == false );
+    	
+        return new Boolean( boolVal );
+    }
+    
+    protected Boolean isManifestPropReadOnly( String propName )
+    {
+    	Property prop = getManifestProp( propName );
+    	if ( prop == null )
+    		return null;
+    	
+    	boolean boolVal = 
+    		( prop.isEditable( m_manifestPropsVisibility ) == false ) ;
+    	
+    	return new Boolean( boolVal );
+    }
+    
+    protected Boolean isManifestPropEncryptable( String propName )
+    {
+    	Property prop = getManifestProp( propName );
+    	if ( prop == null )
+    		return null;
+
+    	return new Boolean( prop.isEncryptable() );
+    }
+
+    protected PropertyChoice[] getManifestPropChoices( String propName )
+    {
+    	Property prop = getManifestProp( propName );
+    	if ( prop == null )
+    		return null;
+    	
+    	return prop.getChoices();    	
+    }
+    
+    protected Integer findManifestPropChoiceIndex( String propName, String propVal )
+    {
+    	PropertyChoice[] choices = getManifestPropChoices( propName );
+    	if ( choices == null || choices.length == 0 )
+    		return null;
+    	
+    	for( int j = 0; j < choices.length; j++ )
+    	{
+   			// Compare the manifest choice name with the prop value.
+   			if ( choices[ j ].getName().equals( propVal ) )
+   				return new Integer( j );
+   		}
+        
+    	// the match by choice names is done first for backward compatibility;
+        // if no match to any choice name, then compare to the manifest choice value
+        for( int j = 0; j < choices.length; j++ )
+        {
+            // Compare the manifest choice name with the prop value.
+            if ( choices[ j ].getValue().equals( propVal ) )
+                return new Integer( j );
+        }
+
+    	return new Integer( -1 );    	
+    }
+    
+    protected ArrayList getManifestPropChoiceLabels( String propName )
+    {
+    	PropertyChoice[] choices = getManifestPropChoices( propName );
+    	if ( choices == null || choices.length == 0 )
+    		return null;
+    	
+    	ArrayList choiceLabelList = new ArrayList();
+    	for( int j = 0; j < choices.length; j++ )
+    	{
+    		// We first try use the display name as the label.
+    		String label = choices[ j ].getDisplayName();
+    		
+    		// Make sure label is not empty.
+    		if ( isEmpty( label ) )
+    		{
+    			// If empty, use the name instead.  Name must be non-empty.
+    			label = choices[ j ].getName();
+    		}
+    		
+    		choiceLabelList.add( label );
+    	}
+    	
+    	return choiceLabelList;
+    }
+    
+
+
+    protected void createPropertyLabel( Composite composite, int propIndex )
+    {
+        Label labelCtrl = new Label( composite, SWT.NONE );
+        String displayName = getPropDisplayName( propIndex );
+        
+        if ( isEmpty( displayName ) )
+            displayName = getPropName( propIndex );
+        
+        String displayText = displayName + COLON_CHAR;
+        if ( isPropRequired( propIndex ) )
+        	displayText += REQUIRED_FIELD_SYMBOL;
+        
+        labelCtrl.setText( displayText );
+    }
+    
+    protected Control createPropertyControl( Composite composite, int propIndex )
+    {
+        Control propCtrl = null;
+        
+        int style =  SWT.BORDER;
+
+        ArrayList choiceLabelList = getPropChoices( propIndex );
+        if ( choiceLabelList != null && choiceLabelList.size() > 0 )
+        {
+            // Use read-only style for combo means that the display text is 
+            // not editable.  The selection can still be changed.
+            Combo choiceCombo = new Combo( composite, 
+                    style | SWT.DROP_DOWN | SWT.READ_ONLY );
+            
+            for( int j = 0; j < choiceLabelList.size(); j++ )
+            {
+             	String label = ( String ) choiceLabelList.get( j );
+                	
+               	// Choice label must not be empty.
+               	assert( ! isEmpty( label ) );
+                choiceCombo.add( label );
+            }
+
+            // Disable the control if it is read only.
+            Boolean isReadOnly = isPropReadOnly( propIndex );
+           	choiceCombo.setEnabled( isReadOnly != null && isReadOnly.booleanValue() == false );
+           	
+            propCtrl = choiceCombo;
+        }
+        else
+        {
+            // Since there are currently only two types:  string or choices,
+            // if it is not choices then it must be string.
+        	Boolean isReadOnly = isPropReadOnly( propIndex );
+            if ( isReadOnly != null && isReadOnly.booleanValue() )
+            	style |= SWT.READ_ONLY;
+            
+            Boolean isEncryptable = isPropEncryptable( propIndex );
+            if ( isEncryptable != null && isEncryptable.booleanValue() )
+            	style |= SWT.PASSWORD;
+                
+            Text textCtrl = new Text( composite, style | SWT.SINGLE );
+                
+            propCtrl = textCtrl;
+        }
+        
+        if ( propCtrl instanceof Combo )
+        	( ( Combo ) propCtrl ).addModifyListener( createModifyListener() );
+        else if ( propCtrl instanceof Text )
+        	( ( Text ) propCtrl ).addModifyListener( createModifyListener() );
+        else
+        	assert( false );
+       
+        return propCtrl;
+    }
+    
+    protected ModifyListener createModifyListener()
+    {
+        return new ModifyListener()
+        {    
+            public void modifyText( ModifyEvent e )
+            {
+                validatePropertyFields();
+            }
+        };
+    }
+    
+    protected void setPropertyControlValue( int propIndex, String propertyVal )
+    {
+    	Control propCtrl = m_propCtrls[ propIndex ];
+    	
+    	String propName = getPropName( propIndex );
+    	assert( propName != null );
+    	
+    	Boolean isHidden = isManifestPropHidden( propName );
+        if ( isHidden != null && isHidden.booleanValue() )
+        {
+            // If the property is hidden, then no need to set the value.
+            return;
+        }
+        
+        // Instantiate local copy of prop val.
+        String propVal = ( propertyVal == null ? EMPTY_STRING : propertyVal );
+        
+        if ( propVal.length() == 0 )
+        {
+            // See if there is a default value, since no value has 
+            // been specified in the property so far.
+        	propVal = getPropDefaultValue( propIndex );
+            if ( propVal == null )
+            	propVal = EMPTY_STRING;
+        }
+        
+        if ( propCtrl instanceof Text )
+        {
+            ( ( Text ) propCtrl ).setText( propVal );
+        }
+        else if ( propCtrl instanceof Combo )
+        {
+            Combo choiceCombo = ( Combo ) propCtrl;
+
+            // From the property value, look up the corresponding
+            // property choice and select it in the combobox.
+            Integer choiceIndex = findPropChoiceIndex( propIndex , propVal );
+            if ( choiceIndex != null )
+            {
+            	choiceCombo.select( choiceIndex.intValue() );
+            }
+            else
+            {
+            	// There is no matching selection.  Will just use
+            	// the first choice for now.
+            	choiceCombo.select( 0 );
+            }
+        }
+        else
+            assert( false );        
+    }
+    
+    protected void setPageComplete( boolean complete )
+    {
+        if( m_wizardPage != null )
+            m_wizardPage.setPageComplete( complete );
+        else if( m_propertyPage != null )
+            m_propertyPage.setValid( complete );
+    }
+    
+    protected void setMessage( String newMessage, int newType )
+    {
+        if( m_wizardPage != null )
+            m_wizardPage.setMessage( newMessage, newType );
+        else if( m_propertyPage != null )
+            m_propertyPage.setMessage( newMessage, newType );
+    }
+    
+    protected ExtensionManifest getManifest()
+    {
+    	if ( m_manifest == null )
+    	{
+	        String dsId = null;
+	        
+	        if ( m_wizardPage != null )
+	            dsId = m_wizardPage.getOdaDataSourceId();
+	        else if ( m_propertyPage != null )
+	            dsId = m_propertyPage.getOdaDataSourceId();
+	        else
+	        {
+	        	// Logic error.  The wizard page or property page should have a valid 
+	        	// data source id in the first place.
+	            assert( false );
+	            return null;            
+	        }
+	        
+	        try 
+	        {
+				m_manifest = ManifestExplorer.getInstance().getExtensionManifest( dsId );
+			} 
+	        catch (OdaException e) 
+	        {
+	        	// Logic error.  The data source id should have been verified 
+	        	// to be valid by the wizard page or property page in the first place.
+	        	assert( false );
+	        	return null;
+			}
+    	}
+    	
+    	return m_manifest;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/pages/impl/DefaultDataSourcePropertyPage.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/pages/impl/DefaultDataSourcePropertyPage.java
new file mode 100644
index 0000000..672ebb2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/pages/impl/DefaultDataSourcePropertyPage.java
@@ -0,0 +1,120 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.ui.pages.impl;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.internal.ui.dialogs.ExceptionHandler;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.ui.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSourceEditorPage;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * Default implementation of the abstract base class 
+ * for a customized ODA data source editor page. 
+ * <br>It provides a generic properties editor page
+ * to allow an user to edit values for the data source connection
+ * properties defined by an ODA extension in 
+ * its <i>dataSource.properties</i> element of the 
+ * <i>org.eclipse.datatools.connectivity.oda.dataSource</i> 
+ * extension point.
+ */
+public class DefaultDataSourcePropertyPage extends DataSourceEditorPage
+{
+    private DefaultDataSourcePageHelper m_pageHelper = null;
+
+    public DefaultDataSourcePropertyPage()
+    {
+        super();
+        setMessage( DefaultDataSourcePageHelper.DEFAULT_MESSAGE );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ui.profile.wizards.DataSourceEditorPage#collectCustomProperties(java.util.Properties)
+     */
+    public Properties collectCustomProperties( Properties profileProps )
+    {
+        if( m_pageHelper == null )
+            return profileProps;
+
+        return m_pageHelper.collectCustomProperties( profileProps );
+    }
+
+    DataSourceDesign getCurrentDataSource()
+    {
+    	 return getEditingDataSource();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ui.profile.wizards.DataSourceEditorPage#createAndInitCustomControl(org.eclipse.swt.widgets.Composite, java.util.Properties)
+     */
+    protected void createAndInitCustomControl( Composite parent, Properties profileProps )
+    {
+        if( m_pageHelper == null )
+            m_pageHelper = createDataSourcePageHelper( );
+
+        try
+        {
+            m_pageHelper.createCustomControl( parent );
+        }
+        catch( OdaException e )
+        {
+        	ExceptionHandler.showException( getControl().getShell(), 
+            	Messages.ui_errorLabel, 
+            	Messages.ui_errorCreatingCustomCtrls, 
+            	e );
+        	
+        	return;
+        }
+        
+        m_pageHelper.initCustomControl( profileProps );
+    }
+    
+    /**
+     * Instantiates the page helper that provides core implementation
+     * of this wizard page.
+     * @return
+     */
+    protected DefaultDataSourcePageHelper createDataSourcePageHelper( )
+    {
+        return new DefaultDataSourcePageHelper( this );
+    }
+
+    /**
+     * Returns the page helper that provides core implementation
+     * for this wizard page.
+     * @return 
+     */
+    protected DefaultDataSourcePageHelper getPageHelper()
+    {
+        return m_pageHelper;
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSourceEditorPage#refresh(java.util.Properties)
+     */
+    protected void refresh( Properties customConnectionProps  )
+    {
+        if( m_pageHelper != null )
+            m_pageHelper.initCustomControl( customConnectionProps );
+        
+        // enable/disable all controls on page in respect of the editable session state
+        enableAllControls( getControl(), isSessionEditable() );
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/pages/impl/DefaultDataSourceWizardPage.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/pages/impl/DefaultDataSourceWizardPage.java
new file mode 100644
index 0000000..f700cb8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/pages/impl/DefaultDataSourceWizardPage.java
@@ -0,0 +1,116 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.ui.pages.impl;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSourceWizardPage;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * Default implementation of the abstract base class 
+ * for a customized ODA data source wizard page. 
+ * <br>It provides a generic properties wizard page
+ * to allow an user to specify values for the data source connection
+ * properties defined by an ODA extension in 
+ * its <i>dataSource.properties</i> element of the 
+ * <i>org.eclipse.datatools.connectivity.oda.dataSource</i> 
+ * extension point.
+ */
+public class DefaultDataSourceWizardPage extends DataSourceWizardPage
+{
+    private DefaultDataSourcePageHelper m_pageHelper = null;
+    private Properties m_dataSourceProps = null;
+
+    public DefaultDataSourceWizardPage( String pageName )
+    {
+        super( pageName );
+        setMessage( DefaultDataSourcePageHelper.DEFAULT_MESSAGE );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ui.profile.wizards.DataSourceWizardPage#createPageCustomControl(org.eclipse.swt.widgets.Composite)
+     */
+    public void createPageCustomControl( Composite parent )
+    {
+        if ( m_pageHelper == null )
+            m_pageHelper = createDataSourcePageHelper( );  
+        
+        try
+        {
+            m_pageHelper.createCustomControl( parent );
+        }
+        catch( OdaException e )
+        {
+            e.printStackTrace();
+        }
+        m_pageHelper.initCustomControl( m_dataSourceProps );   // in case init was called before create 
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ui.profile.wizards.DataSourceWizardPage#initPageCustomControl(java.util.Properties)
+     */
+    public void setInitialProperties( Properties dataSourceProps )
+    {
+        m_dataSourceProps = dataSourceProps;
+        if( m_pageHelper == null )
+            return;     // ignore, wait till createPageCustomControl to initialize
+        m_pageHelper.initCustomControl( m_dataSourceProps );        
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSourceWizardPage#refresh()
+     */
+    public void refresh()
+    {
+        // enable/disable all controls on page in respect of the editable session state
+        enableAllControls( getControl(), isSessionEditable() );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ui.profile.wizards.DataSourceWizardPage#collectCustomProperties()
+     */
+    public Properties collectCustomProperties()
+    {
+        if( m_pageHelper != null ) 
+            return m_pageHelper.collectCustomProperties( m_dataSourceProps );
+
+        return ( m_dataSourceProps != null ) ?
+                    m_dataSourceProps : new Properties();
+    }
+    
+    /**
+     * Instantiates the page helper that provides core implementation
+     * of this wizard page.
+     * @return
+     */
+    protected DefaultDataSourcePageHelper createDataSourcePageHelper( )
+    {
+        return new DefaultDataSourcePageHelper( this );
+    }
+
+    /**
+     * Returns the page helper that provides core implementation
+     * for this wizard page.
+     * @return 
+     */
+    protected DefaultDataSourcePageHelper getPageHelper()
+    {
+        return m_pageHelper;
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/profile/db/wizards/DbProfileEditorPage.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/profile/db/wizards/DbProfileEditorPage.java
new file mode 100644
index 0000000..ec0272b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/profile/db/wizards/DbProfileEditorPage.java
@@ -0,0 +1,59 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.ui.profile.db.wizards;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.db.DbProfilePropertyPage;
+
+/**
+ *  The default ODA data source editor page that wraps the driver-contributed 
+ *  property page of a Database connection profile type.
+ *  It may be used directly as the page class in an org.eclipse.ui.propertyPages
+ *  extension for an ODA data source type.
+ */
+public class DbProfileEditorPage extends DbProfilePropertyPage
+{
+    public DbProfileEditorPage()
+    {
+        super();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.db.DbProfilePropertyPage#createTransientProfile(java.util.Properties)
+     */
+    @Override
+    protected IConnectionProfile createTransientProfile(
+            Properties connProperties )
+    {
+        // expose internal API method
+        return super.createTransientProfile( connProperties );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.db.DbProfilePropertyPage#setDataSourceDesignProperties(org.eclipse.datatools.connectivity.oda.design.DataSourceDesign, java.util.Properties)
+     */
+    @Override
+    protected void setDataSourceDesignProperties( DataSourceDesign design,
+            Properties propertyValuePairs ) throws OdaException
+    {
+        // expose internal API method
+        super.setDataSourceDesignProperties( design, propertyValuePairs );
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/profile/db/wizards/NewDbDataSourceWizard.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/profile/db/wizards/NewDbDataSourceWizard.java
new file mode 100644
index 0000000..5185c9f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/profile/db/wizards/NewDbDataSourceWizard.java
@@ -0,0 +1,40 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.ui.profile.db.wizards;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.profile.db.NewDbDataSourceWizardBase;
+
+/**
+ *  The default ODA data source wizard that manages the driver-contributed 
+ *  wizard page of a Database connection profile type.
+ *  It may be used directly as the newWizard class in an 
+ *  org.eclipse.datatools.connectivity.connectionProfile extension for 
+ *  an ODA data source type.
+ */
+public class NewDbDataSourceWizard extends NewDbDataSourceWizardBase
+{
+
+    public NewDbDataSourceWizard( String odaDataSourceId ) throws OdaException
+    {
+        super( odaDataSourceId );
+    }
+
+    public NewDbDataSourceWizard()
+    {
+        super();
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/wizards/.gitignore b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/wizards/.gitignore
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/wizards/.gitignore
@@ -0,0 +1 @@
+
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/wizards/DataSetEditorPage.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/wizards/DataSetEditorPage.java
new file mode 100644
index 0000000..3723ca4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/wizards/DataSetEditorPage.java
@@ -0,0 +1,40 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.ui.wizards;
+
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.DataSetEditorPageCore;
+
+/**
+ * The base class of a customized ODA Data Set Editor Page
+ * provided by the ODA design UI framework,  
+ * to allow an user to edit
+ * an extended ODA data set design instance.
+ * <br>It adapts from a data set wizard page contributed
+ * by an ODA design ui extension, to a PropertyPage
+ * for use in an ODA host designer's preference dialog.
+ */
+public class DataSetEditorPage extends DataSetEditorPageCore
+{
+    /*
+     * Constructor to contribute the control of 
+     * a custom data set wizard page 
+     * to a property page for editing a data set design.
+     */
+    public DataSetEditorPage( DataSetWizardPage page )
+    {
+        super( page );
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/wizards/DataSetWizard.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/wizards/DataSetWizard.java
new file mode 100644
index 0000000..88ba9dc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/wizards/DataSetWizard.java
@@ -0,0 +1,33 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.ui.wizards;
+
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.DataSetWizardBase;
+
+/**
+ * The ODA data set wizard's public class that 
+ * may be used directly or serves as the base class of 
+ * the dataSetWizard.class attribute defined in the
+ * <code>org.eclipse.datatools.connectivity.oda.design.ui.dataSource</code> extension point.
+ * <br>All inherited methods are internal API.
+ */
+public class DataSetWizard extends DataSetWizardBase
+{
+    public DataSetWizard()
+    {
+        super();
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/wizards/DataSetWizardPage.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/wizards/DataSetWizardPage.java
new file mode 100644
index 0000000..dea9f9f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/wizards/DataSetWizardPage.java
@@ -0,0 +1,126 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.ui.wizards;
+
+import org.eclipse.datatools.connectivity.oda.design.DataSetDesign;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.DataSetWizardPageCore;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * The abstract base class for implementation of a customized
+ * ODA data set wizard page.  
+ * An ODA data set UI extension must extend this to
+ * provide customized wizard page with page control and related behavior.
+ * This is the base class of 
+ * the <i>dataSetPage.wizardPageClass</i> attribute defined in the
+ * <code>org.eclipse.datatools.connectivity.oda.design.ui.dataSource</code> extension point.
+ */
+public abstract class DataSetWizardPage extends DataSetWizardPageCore
+{
+    /**
+     * Creates customized control for this wizard page under the
+     * given parent composite.  
+     * Initializes control as appropriate
+     * with the DataSetDesign initialization instance.
+     * @param parent    the parent composite
+     * @see #getInitializationDesign
+     */
+    public abstract void createPageCustomControl( Composite parent );
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.ui.DataSetWizardPageCore#collectDataSetDesign(org.eclipse.datatools.connectivity.oda.design.DataSetDesign)
+     */
+    protected DataSetDesign collectDataSetDesign( DataSetDesign design )
+    {
+        // default implementation does nothing;
+        // sub-class to override and update based on the given data set design
+        return design;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.ui.DataSetWizardPageCore#collectResponseState()
+     */
+    protected void collectResponseState()
+    {
+        // Default implementation in base class does not specify 
+        // any custom response state.
+        // Sub-class may override.
+
+        super.collectResponseState();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.ui.DataSetWizardPageCore#refresh(org.eclipse.datatools.connectivity.oda.design.DataSetDesign)
+     */
+    protected void refresh( DataSetDesign dataSetDesign )
+    {
+        // default implementation does nothing;
+        // sub-class may override
+    }
+
+    /**
+     * The default implementation of the abstract
+     * method returns <code>true</code>.
+     * Sub-class may override.
+     */
+    protected boolean canLeave()
+    {
+        // default implementation returns true;
+        // sub-class may override
+        return true;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.ui.DataSetWizardPageCore#cleanup()
+     */
+    protected void cleanup()
+    {
+        // default implementation does nothing;
+        // sub-class may override
+    }
+
+    /**
+     * Constructor with single argument for wizard page name.
+     * This single-argument constructor is used by the 
+     * ODA data set wizard to create a custom wizard page.
+     * Subclass may override to provide additional page attributes, 
+     * such as customized title, message, title image.
+     * @param pageName  wizard page name
+     */
+    public DataSetWizardPage( String pageName )
+    {
+        super( pageName );
+    }
+
+    /*
+     * Implements base class constructor.
+     */
+    public DataSetWizardPage( String pageName, String title, 
+                ImageDescriptor titleImage )
+    {
+        super( pageName, title, titleImage );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+     */
+    public void createControl( Composite parent )
+    {
+        super.createControl( parent );
+        createPageCustomControl( parent );
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/wizards/DataSourceEditorPage.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/wizards/DataSourceEditorPage.java
new file mode 100644
index 0000000..58b9440
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/wizards/DataSourceEditorPage.java
@@ -0,0 +1,132 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.ui.wizards;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.DataSourceEditorPageCore;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.DesignerUtil;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+/**
+ * The abstract base class for implementation of a customized
+ * ODA data source property page.  
+ * <br>An ODA data source UI extension must extend this base class to
+ * provide customized property page with page control 
+ * and related behavior, and implements the 
+ * <code>org.eclipse.ui.propertyPages</code> extension point.
+ */
+public abstract class DataSourceEditorPage extends DataSourceEditorPageCore
+{    
+    /**
+     * Creates and initializes custom control for this wizard page 
+     * under the given parent composite.
+     * @param parent        parent composite
+     * @param profileProps  current custom properties and values 
+     *                      to initialize the custom controls
+     */
+    protected abstract void createAndInitCustomControl( Composite parent,
+                                        Properties profileProps );
+
+    /**
+     * Returns data source properties and corresponding values collected in 
+     * custom page(s).
+     * @param dataSourceProps  the current set of custom and inherited properties,
+     *                      before any updates in this page
+     * @return  the updated data source properties and corresponding values
+     */
+    public abstract Properties collectCustomProperties( Properties dataSourceProps );
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.ui.DataSourceEditorPageCore#collectDataSourceDesign(org.eclipse.datatools.connectivity.oda.design.DataSourceDesign)
+     */
+    protected DataSourceDesign collectDataSourceDesign( DataSourceDesign design )
+    {
+        // adopts default implementation;
+        // sub-class may override to update the given data source design
+        return super.collectDataSourceDesign( design );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.ui.DataSourceEditorPageCore#cleanup()
+     */
+    protected void cleanup()
+    {
+        // default implementation does nothing;
+        // sub-class may override        
+    }
+
+    public DataSourceEditorPage()
+    {
+        super();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.ui.wizards.ProfilePropertyPage#createCustomContents(org.eclipse.swt.widgets.Composite)
+     */
+    protected void createCustomContents( Composite parent )
+    {
+        Properties props = getDataSourceProperties();
+        // calls abstract method provided by custom page extension
+        createAndInitCustomControl( parent, props );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.ui.wizards.ProfilePropertyPage#collectProperties()
+     */
+    protected Properties collectProperties()
+    {
+        Properties props = getDataSourceProperties();
+        // calls abstract method provided by custom page extension
+        return collectCustomProperties( props );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.ui.DataSourceEditorPageCore#getOdaDataSourceId()
+     */
+    public String getOdaDataSourceId()
+    {
+        return super.getOdaDataSourceId();
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.ui.DataSourceEditorPageCore#refresh(java.util.Properties)
+	 * @since 3.0.4
+     */
+    protected void refresh( Properties customConnectionProps )
+    {
+        // default implementation does nothing;
+        // sub-class may override
+    }
+
+    /**
+     * An utility method to enable/disable the specified control and all its nested
+     * children, according to the specified <code>enabled</code> state.
+     * The TestConnection button state is excluded from the state changes.
+     * This is typically used by an extended refresh method.
+     * @param aControl  a control
+     * @param enabled   the new enabled state
+     * @since 3.0.4
+     */
+    protected void enableAllControls( Control parent, boolean enabled )
+    {
+        // TODO - Bugzilla 213266, replace with call for page to disable own relevant controls  
+        DesignerUtil.enableAllControls( parent, enabled, this.btnPing );
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/wizards/DataSourceWizardPage.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/wizards/DataSourceWizardPage.java
new file mode 100644
index 0000000..907ce74
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/wizards/DataSourceWizardPage.java
@@ -0,0 +1,143 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 - 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  IBM Corporation - defect fix #213266
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.ui.wizards;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.DataSourceWizardPageCore;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.DesignerUtil;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+/**
+ * The abstract base class for implementation of a customized
+ * ODA data source wizard page.  
+ * An ODA data source UI extension must extend this to
+ * provide customized wizard page with page control and related behavior.
+ * This must be used as the base class of 
+ * the <i>newWizard.class</i> attribute defined in the
+ * <code>org.eclipse.datatools.connectivity.connectionProfile</code> extension point.
+ */
+public abstract class DataSourceWizardPage extends DataSourceWizardPageCore
+{
+    /**
+     * Creates customized control for this wizard page under the
+     * given parent composite.
+     * @param parent    the parent composite
+     */
+    public abstract void createPageCustomControl( Composite parent );
+
+    /**
+     * Sets the initial properties and values to initialize the
+     * customized control of this wizard page.
+     * <br>This method may be called before #createPageCustomControl, 
+     * which should then initialize with these given properties.
+     * @param dataSourceProps   custom properties of the extended
+     *                          ODA data source
+     */
+    public abstract void setInitialProperties( Properties dataSourceProps );
+
+    /**
+     * Returns custom properties updated with values 
+     * collected in custom wizard page(s).
+     * @return  a collection of custom properties; may be empty
+     */
+    public abstract Properties collectCustomProperties();
+
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.ui.DataSourceWizardPageCore#collectDataSourceDesign(org.eclipse.datatools.connectivity.oda.design.DataSourceDesign)
+     */
+    protected DataSourceDesign collectDataSourceDesign( DataSourceDesign design )
+    {
+        // default implementation does nothing;
+        // sub-class may override to update the given data source design
+        return design;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.ui.DataSourceWizardPageCore#cleanup()
+     */
+    protected void cleanup()
+    {
+        // default implementation does nothing;
+        // sub-class may override
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.ui.DataSourceWizardPageCore#refresh()
+     */
+    public void refresh()
+    {
+        // default implementation does nothing;
+        // sub-class may override
+    }
+
+    /**
+     * An utility method to enable/disable the specified control and all its nested
+     * children, according to the specified <code>enabled</code> state.
+     * The TestConnection button state is excluded from the state changes.
+     * This is typically used by an extended refresh method.
+     * @param parent  a control
+     * @param enabled   the new enabled state
+     * @since 3.0.4
+     */
+    protected void enableAllControls( Control parent, boolean enabled )
+    {
+        DesignerUtil.enableAllControls( parent, enabled, this.btnPing );
+    }
+    
+    /**
+     * Constructor with single argument for wizard page name.
+     * This single-argument constructor is used by the 
+	 * ODA data source wizard to create a custom wizard page.
+     * Subclass may override to provide additional page attributes, 
+     * such as customized title, message, title image.
+     * @param pageName  wizard page name
+     */
+    public DataSourceWizardPage( String pageName )
+    {
+        super( pageName );
+    }
+
+    /*
+     * Implements base class constructor.
+     */
+    public DataSourceWizardPage( String pageName, String title, ImageDescriptor titleImage )
+    {
+        super( pageName, title, titleImage );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.ui.wizards.ConnectionProfileDetailsPage#createCustomControl(org.eclipse.swt.widgets.Composite)
+     */
+    public void createCustomControl( Composite parent )
+    {
+        // calls abstract method provided by custom extension
+        createPageCustomControl( parent );
+        refresh();
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.internal.ui.DataSourceWizardPageCore#getOdaDataSourceId()
+     */
+    public String getOdaDataSourceId()
+    {
+        return super.getOdaDataSourceId();
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/wizards/NewDataSourceWizard.java b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/wizards/NewDataSourceWizard.java
new file mode 100644
index 0000000..4fdd5f5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/wizards/NewDataSourceWizard.java
@@ -0,0 +1,43 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.ui.wizards;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.internal.ui.NewDataSourceWizardBase;
+
+/**
+ * The ODA data source wizard's public class that 
+ * may be used directly or serves as the base class of 
+ * the newWizard.class attribute defined in the
+ * <code>org.eclipse.datatools.connectivity.connectionProfile</code> extension point.
+ * <br>An ODA data source extension must also
+ * implement the <code>org.eclipse.datatools.connectivity.oda.design.ui.dataSource</code>
+ * extension point to provide its custom wizard page. 
+ * <br>All inherited methods are internal API.
+ */
+public class NewDataSourceWizard extends NewDataSourceWizardBase
+{
+    public NewDataSourceWizard( String odaDataSourceId )
+        throws OdaException
+    {
+        super( odaDataSourceId );
+    }
+
+    public NewDataSourceWizard()
+    {
+        super();
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/wizards/package.html b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/wizards/package.html
new file mode 100644
index 0000000..8effedb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design.ui/src/org/eclipse/datatools/connectivity/oda/design/ui/wizards/package.html
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2006, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+
+Contains the base classes for extending the
+data source wizard and property pages, and 
+data set wizard and property pages
+in the Open Data Access (ODA) Designer UI framework.
+<br>
+These classes are for use by an ODA data provider to extend
+and contribute customized designer tool to define a data set design,
+and a data source design associated with a connection profile instance.
+
+<!-- Put @see and @since tags down here. -->
+@since 3.0
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/.classpath b/plugins/org.eclipse.datatools.connectivity.oda.design/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/.gitignore b/plugins/org.eclipse.datatools.connectivity.oda.design/.gitignore
new file mode 100644
index 0000000..6880566
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/.gitignore
@@ -0,0 +1,5 @@
+bin
+download
+*.jar
+*.zip
+build*.xml
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/.project b/plugins/org.eclipse.datatools.connectivity.oda.design/.project
new file mode 100644
index 0000000..a3ba0c3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.oda.design</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/.settings/.gitignore b/plugins/org.eclipse.datatools.connectivity.oda.design/.settings/.gitignore
new file mode 100644
index 0000000..b18fda9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/.settings/.gitignore
@@ -0,0 +1 @@
+org.eclipse.jdt.ui.prefs
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.datatools.connectivity.oda.design/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..c2e8a05
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Tue Apr 10 20:23:38 PDT 2007
+eclipse.preferences.version=1
+encoding//model/DesignXML.xsd=UTF8
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.connectivity.oda.design/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..a25c528
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,3 @@
+#Fri Nov 14 12:57:47 PST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.connectivity.oda.design/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..c346604
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.oda.design; singleton:=true
+Bundle-Version: 3.5.1.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Export-Package: org.eclipse.datatools.connectivity.oda.design,
+ org.eclipse.datatools.connectivity.oda.design.util
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.emf.ecore;visibility:=reexport,
+ org.eclipse.emf.ecore.xmi;visibility:=reexport,
+ com.ibm.icu;visibility:=reexport
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/about.html b/plugins/org.eclipse.datatools.connectivity.oda.design/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/build.properties b/plugins/org.eclipse.datatools.connectivity.oda.design/build.properties
new file mode 100644
index 0000000..77073db
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/build.properties
@@ -0,0 +1,16 @@
+bin.includes = plugin.xml,\

+               .,\

+               about.html,\

+               META-INF/,\

+               plugin.properties,\

+               model/DesignXML.xsd,\

+               model/odaDesignSession.genmodel,\

+               model/org.eclipse.datatools.connectivity.oda.design.ecore

+javac.source =           1.6

+javac.target =           1.6

+build.result.dir =	 	 ./

+javadoc.dir =            doc/api/

+download.dir =           ./download/

+source.. = src/

+output.. = bin/

+src.includes = about.html

diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/model/.gitignore b/plugins/org.eclipse.datatools.connectivity.oda.design/model/.gitignore
new file mode 100644
index 0000000..0e7c203
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/model/.gitignore
@@ -0,0 +1,2 @@
+vss*.scc
+*.xsd2ecore
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/model/DesignXML.xsd b/plugins/org.eclipse.datatools.connectivity.oda.design/model/DesignXML.xsd
new file mode 100644
index 0000000..82422d1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/model/DesignXML.xsd
@@ -0,0 +1,1384 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<xsd:schema xmlns:design="http://www.eclipse.org/datatools/connectivity/oda/design" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.eclipse.org/datatools/connectivity/oda/design">
+  <xsd:simpleType name="AxisType">
+    <xsd:annotation>
+      <xsd:documentation>Axis type of a result set column.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:NCName">
+      <xsd:enumeration value="DimensionMember"/>
+      <xsd:enumeration value="DimensionAttribute"/>
+      <xsd:enumeration value="Measure"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="ElementNullability">
+    <xsd:annotation>
+      <xsd:documentation>Indicates whether a data element's value can be null.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:NCName">
+      <xsd:enumeration value="Unknown"/>
+      <xsd:enumeration value="Nullable"/>
+      <xsd:enumeration value="NotNullable"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="ExpressionVariableType">
+    <xsd:annotation>
+      <xsd:documentation>The type of a filter expression variable.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:NCName">
+      <xsd:enumeration value="ResultSetColumn"/>
+      <xsd:enumeration value="InstanceOf"/>
+      <xsd:enumeration value="QueryExpression"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="HorizontalAlignment">
+    <xsd:annotation>
+      <xsd:documentation>Horizontal display alignment of the data value.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:NCName">
+      <xsd:enumeration value="Automatic"/>
+      <xsd:enumeration value="Left"/>
+      <xsd:enumeration value="Center"/>
+      <xsd:enumeration value="Right"/>
+      <xsd:enumeration value="LeftAndRight"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="InputPromptControlStyle">
+    <xsd:annotation>
+      <xsd:documentation>The style of UI control for prompting user to input a value.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:NCName">
+      <xsd:enumeration value="TextField"/>
+      <xsd:enumeration value="SelectableList"/>
+      <xsd:enumeration value="SelectableListWithTextField"/>
+      <xsd:enumeration value="CheckBox"/>
+      <xsd:enumeration value="RadioButton"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="NullOrderingType">
+    <xsd:annotation>
+      <xsd:documentation>The type of null value ordering defined in a sort key.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:NCName">
+      <xsd:enumeration value="Unknown"/>
+      <xsd:enumeration value="NullsFirst"/>
+      <xsd:enumeration value="NullsLast"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="OdaComplexDataType">
+    <xsd:annotation>
+      <xsd:documentation>ODA complex data types.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:NCName">
+      <xsd:enumeration value="Structure"/>
+      <xsd:enumeration value="Table"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="OdaScalarDataType">
+    <xsd:annotation>
+      <xsd:documentation>ODA scalar data types.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:NCName">
+      <xsd:enumeration value="Date"/>
+      <xsd:enumeration value="Double"/>
+      <xsd:enumeration value="Integer"/>
+      <xsd:enumeration value="String"/>
+      <xsd:enumeration value="Time"/>
+      <xsd:enumeration value="Timestamp"/>
+      <xsd:enumeration value="Decimal"/>
+      <xsd:enumeration value="Blob"/>
+      <xsd:enumeration value="Clob"/>
+      <xsd:enumeration value="Boolean"/>
+      <xsd:enumeration value="JavaObject"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="ParameterMode">
+    <xsd:annotation>
+      <xsd:documentation>Indicates whether a parameter is of input and/or output mode.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:NCName">
+      <xsd:enumeration value="In"/>
+      <xsd:enumeration value="Out"/>
+      <xsd:enumeration value="InOut"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="SessionStatus">
+    <xsd:annotation>
+      <xsd:documentation>Indicates to ODA host designer on how to proceed after an ODA design session exits.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:NCName">
+      <xsd:enumeration value="Ok"/>
+      <xsd:enumeration value="UserCancelled"/>
+      <xsd:enumeration value="LoginFailed"/>
+      <xsd:enumeration value="Error"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="SortDirectionType">
+    <xsd:annotation>
+      <xsd:documentation>The type of sort direction defined in a sort key.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:NCName">
+      <xsd:enumeration value="Ascending"/>
+      <xsd:enumeration value="Descending"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="TextFormatType">
+    <xsd:annotation>
+      <xsd:documentation>The type of text content of the data column values, i.e. plain text, HTML or RTF.  It provides a hint on the type of text control to use for displaying the data value, e.g. a Text Control vs. Dynamic Text Control.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:NCName">
+      <xsd:enumeration value="Plain"/>
+      <xsd:enumeration value="HTML"/>
+      <xsd:enumeration value="RTF"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:simpleType name="TextWrapType">
+    <xsd:annotation>
+      <xsd:documentation>A hint on the type of text wrapping on the data column values.  It could be in a single line (None), or word-wrapped (Word).</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:NCName">
+      <xsd:enumeration value="None"/>
+      <xsd:enumeration value="Word"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+  <xsd:complexType name="AndExpression">
+    <xsd:annotation>
+      <xsd:documentation>A built-in composite filter expression whose child expressions are combined by the And boolean operator.  The composite expression is evaluated to be true only if all its child expressions are evaluated as true.  </xsd:documentation>
+    </xsd:annotation>
+    <xsd:complexContent>
+      <xsd:extension base="design:CompositeFilterExpression"/>
+    </xsd:complexContent>
+  </xsd:complexType>
+  <xsd:element name="AndExpression" type="design:AndExpression">
+    <xsd:annotation>
+      <xsd:documentation>A built-in composite filter expression whose child expressions are combined by the And boolean operator.  The composite expression is evaluated to be true only if all its child expressions are evaluated as true.  </xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="AtomicExpressionContext">
+    <xsd:annotation>
+      <xsd:documentation>The context within a basic, indivisible unit of expression that can be evaluated by itself.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="1" minOccurs="0" name="variable" type="design:ExpressionVariable"/>
+      <xsd:element maxOccurs="1" minOccurs="0" name="arguments" type="design:ExpressionArguments">
+        <xsd:annotation>
+          <xsd:documentation>Defines the expression's argument(s) and each of its associated value(s).</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+    </xsd:sequence>
+    <xsd:attribute default="false" name="optional" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>Indicates whether this atomic expression can be excluded at runtime.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:element name="AtomicExpressionContext" type="design:AtomicExpressionContext">
+    <xsd:annotation>
+      <xsd:documentation>The context within a basic, indivisible unit of expression that can be evaluated by itself.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="AxisAttributes">
+    <xsd:annotation>
+      <xsd:documentation>Multi-dimensional attributes of a data element, such as a result set column.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="1" minOccurs="0" name="relatedColumns" type="design:ResultSubset">
+        <xsd:annotation>
+          <xsd:documentation>The result set column(s) that are related to this data element.  For example, for a dimension member AxisType element, its related column(s) are those modeled to be its attribute. Multiple related columns may be combined to be a compounded attribute of a dimension.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+    </xsd:sequence>
+    <xsd:attribute default="Measure" name="axisType" type="design:AxisType">
+      <xsd:annotation>
+        <xsd:documentation>The axis type of the data element.  It provides design hints to a consumer application on how the column data should be analyzed, or applied in a multi-dimensional view.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute default="true" name="onColumnLayout" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>A design hint on whether the dimension data element should be laid out on a column or row.  It is normally used by presentation element such as a crosstab to design a default layout.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:element name="AxisAttributes" type="design:AxisAttributes">
+    <xsd:annotation>
+      <xsd:documentation>Multi-dimensional attributes of a data element, such as a result set column.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="ColumnDefinition">
+    <xsd:annotation>
+      <xsd:documentation>Definition of a result set column.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="1" minOccurs="1" name="attributes" type="design:DataElementAttributes"/>
+      <xsd:element maxOccurs="1" minOccurs="0" name="usageHints" type="design:OutputElementAttributes"/>
+      <xsd:element maxOccurs="1" minOccurs="0" name="multiDimensionAttributes" type="design:AxisAttributes">
+        <xsd:annotation>
+          <xsd:documentation>The attributes of a multi-dimensional data element.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+    </xsd:sequence>
+  </xsd:complexType>
+  <xsd:element name="ColumnDefinition" type="design:ColumnDefinition">
+    <xsd:annotation>
+      <xsd:documentation>Definition of a result set column.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="CompositeFilterExpression">
+    <xsd:annotation>
+      <xsd:documentation>A composite of one or multiple child filter expressions.  Its child expressions are ordered, but their relationships are not defined.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:complexContent>
+      <xsd:extension base="design:FilterExpression">
+        <xsd:sequence>
+          <xsd:element maxOccurs="unbounded" minOccurs="1" name="children" type="design:FilterExpression"/>
+        </xsd:sequence>
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+  <xsd:element name="CompositeFilterExpression" type="design:CompositeFilterExpression">
+    <xsd:annotation>
+      <xsd:documentation>A composite of one or multiple child filter expressions.  Its child expressions are ordered, but their relationships are not defined.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="CustomData">
+    <xsd:annotation>
+      <xsd:documentation>Custom data specific to any participant of an ODA design session, i.e. an ODA host or custom designer, as identified by its providerId.  Its value is used only by its provider, but may be displayed in a string format by a non-provider component. This may be used as one of the StaticValues defined to be an input parameter's default values.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:attribute name="providerId" type="xsd:string" use="required">
+      <xsd:annotation>
+        <xsd:documentation>The unique identifier or namespace of the provider of this instance.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="value" type="xsd:string" use="required">
+      <xsd:annotation>
+        <xsd:documentation>Custom data value that is normally used only by its provider.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="displayValue" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>The String representation of the data value, which can be displayed by a non provider.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:element name="CustomData" type="design:CustomData">
+    <xsd:annotation>
+      <xsd:documentation>Custom data specific to any participant of an ODA design session, i.e. an ODA host or custom designer, as identified by its providerId.  Its value is used only by its provider, but may be displayed in a string format by a non-provider component. This may be used as one of the StaticValues defined to be an input parameter's default values.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="CustomFilterExpression">
+    <xsd:annotation>
+      <xsd:documentation>The definition of a custom atomic filter expression contributed by an extension of the org.eclipse.datatools.connectivity.oda.dynamicResultSet extension point.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:complexContent>
+      <xsd:extension base="design:FilterExpression">
+        <xsd:sequence>
+          <xsd:element maxOccurs="1" minOccurs="1" name="type" type="design:FilterExpressionType"/>
+          <xsd:element maxOccurs="1" minOccurs="1" name="context" type="design:AtomicExpressionContext"/>
+        </xsd:sequence>
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+  <xsd:element name="CustomFilterExpression" type="design:CustomFilterExpression">
+    <xsd:annotation>
+      <xsd:documentation>The definition of a custom atomic filter expression contributed by an extension of the org.eclipse.datatools.connectivity.oda.dynamicResultSet extension point.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="DataAccessDesign">
+    <xsd:annotation>
+      <xsd:documentation>The design of how to access a data set.  Its model is a design tree that starts with a top-level dataSetDesign, which contains its corresponding dataSourceDesign.  The top-level data set may contain nested data set designs.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="1" minOccurs="0" name="dataSetDesign" type="design:DataSetDesign"/>
+    </xsd:sequence>
+  </xsd:complexType>
+  <xsd:element name="DataAccessDesign" type="design:DataAccessDesign">
+    <xsd:annotation>
+      <xsd:documentation>The design of how to access a data set.  Its model is a design tree that starts with a top-level dataSetDesign, which contains its corresponding dataSourceDesign.  The top-level data set may contain nested data set designs.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="DataElementAttributes">
+    <xsd:annotation>
+      <xsd:documentation>Common attributes for a data element.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="1" minOccurs="1" name="identifier" type="design:DataElementIdentifier">
+        <xsd:annotation>
+          <xsd:documentation>Uniquely identifies this data element by name and/or position.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element maxOccurs="1" minOccurs="0" name="uiHints" type="design:DataElementUIHints"/>
+    </xsd:sequence>
+    <xsd:attribute name="name" type="xsd:string" use="required">
+      <xsd:annotation>
+        <xsd:documentation>Deprecated as of 3.3.2; replaced by "identifier".  A name that uniquely identifies this data element.  If a data element can only be identified by position, this name may be empty.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="position" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>Deprecated as of 3.3.2; replaced by "identifier". The 1-based index position (left-to-right order) within a collection of data elements.  The position is defined per the underlying data source, and is not necessarily sequential.  For example, a query may access 3 columns in a result set, but the data access design may choose to expose only column 2.  In this case, only one column element with postion 2 is defined in the result set definition.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute default="0" name="nativeDataTypeCode" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>Native data type code of the data element.  If none or unknown value (0) is specified, the data element is mapped to an ODA String data type by default.  The native type code value is implementation-specific to individual ODA driver, which must support its mapping to one or more ODA data types.  The supported native-ODA data type mapping must be defined in the ODA extension's plugin.xml .</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute default="-1" name="precision" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>Maximum number of decimal digits in a numeric value, or the length of a non-numeric value.  A value of -1 indicates this attribute is not applicable.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute default="-1" name="scale" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>Maximum number of digits to the right of the decimal point.  A value of -1 indicates this attribute is not applicable.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute default="Unknown" name="nullability" type="design:ElementNullability"/>
+  </xsd:complexType>
+  <xsd:element name="DataElementAttributes" type="design:DataElementAttributes">
+    <xsd:annotation>
+      <xsd:documentation>Common attributes for a data element.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="DataElementIdentifier">
+    <xsd:annotation>
+      <xsd:documentation>Identifies a data element by name and/or position.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:attribute name="name" type="xsd:string" use="required">
+      <xsd:annotation>
+        <xsd:documentation>A name that uniquely identifies a data element.  If a data element can only be identified by position, this name may be empty.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="position" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>The 1-based index position (left-to-right order) within a collection of data elements.  The position is defined per the underlying data source, and is not necessarily sequential.  For example, a query may access 3 columns in a result set, but the data access design may choose to expose only column 2.  In this case, only one column element with postion 2 is defined in the result set definition.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:element name="DataElementIdentifier" type="design:DataElementIdentifier">
+    <xsd:annotation>
+      <xsd:documentation>Identifies a data element by name and/or position.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="DataElementIdentifiers">
+    <xsd:annotation>
+      <xsd:documentation>A collection of data element identifiers.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="unbounded" minOccurs="1" name="identifiers" type="design:DataElementIdentifier"/>
+    </xsd:sequence>
+  </xsd:complexType>
+  <xsd:element name="DataElementIdentifiers" type="design:DataElementIdentifiers">
+    <xsd:annotation>
+      <xsd:documentation>A collection of data element identifiers.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="DataElementUIHints">
+    <xsd:annotation>
+      <xsd:documentation>UI hints for a data element.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:attribute name="displayName" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>Business name of the data element.  Text can be localized with a resource key.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="description" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>More extensive description of the data element.  Text can be localized with a resource key.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:element name="DataElementUIHints" type="design:DataElementUIHints">
+    <xsd:annotation>
+      <xsd:documentation>UI hints for a data element.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="DataSetDesign">
+    <xsd:annotation>
+      <xsd:documentation>A design-time data set definition.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="1" minOccurs="0" name="dataSourceDesign" type="design:DataSourceDesign">
+        <xsd:annotation>
+          <xsd:documentation>The instance of dataSourceDesign that supports this type of data set.  Could be null, if nested within another dataSetDesign, to share the container's dataSourceDesign.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element maxOccurs="1" minOccurs="1" name="query" type="design:DataSetQuery"/>
+      <xsd:element maxOccurs="1" minOccurs="0" name="publicProperties" type="design:Properties">
+        <xsd:annotation>
+          <xsd:documentation>Properties specific to the underlying data set query.  Public property values can be visible and editable in the host designer.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element maxOccurs="1" minOccurs="0" name="privateProperties" type="design:Properties">
+        <xsd:annotation>
+          <xsd:documentation>Private properties specific to the underlying data set query.  Their definitions are private to the ODA designer, i.e. must not be visible nor editable by the host designer.  The "private" nature only applies to the design-time behavior of an ODA host designer.  At run-time, both public and private properties are combined and passed to the ODA runtime driver as a single set of runtime properties.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element maxOccurs="1" minOccurs="0" name="resultSets" type="design:ResultSets"/>
+      <xsd:element maxOccurs="1" minOccurs="0" name="parameters" type="design:DataSetParameters"/>
+    </xsd:sequence>
+    <xsd:attribute name="name" type="xsd:string" use="required">
+      <xsd:annotation>
+        <xsd:documentation>The unique name that identifies an instance of dataSetDesign.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="odaExtensionDataSetId" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>The dataSet element ID defined in an ODA extension plugin manifest.  It identifies the type of data set design supported by the ODA extension.  Optional if only one dataSet element is defined in the manifest.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="displayName" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>Text can be localized with a resource key.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="primaryResultSetName" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>Identifies the primary result set if more than one result sets are available, and can be identified by name.  If results sets are identified by sequence, the first result set is the primary one.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:element name="DataSetDesign" type="design:DataSetDesign">
+    <xsd:annotation>
+      <xsd:documentation>A design-time data set definition.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="DataSetParameters">
+    <xsd:annotation>
+      <xsd:documentation>A collection of top-level parameters defined for a data set.  If the metadata can be derived, i.e. can be obtained by an ODA driver in each design session, an ODA host designer is not required to include the derived metadata in the next design session request.  An ODA designer may ignore such metadata in a Request.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="unbounded" minOccurs="1" name="parameterDefinitions" type="design:ParameterDefinition"/>
+    </xsd:sequence>
+    <xsd:attribute default="true" name="derivedMetaData" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>If the metadata can be derived, i.e. can be obtained by an ODA driver in each design session, an ODA host designer is not required to include the derived metadata in the next design session request.  An ODA designer may ignore such metadata in a Request.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:element name="DataSetParameters" type="design:DataSetParameters">
+    <xsd:annotation>
+      <xsd:documentation>A collection of top-level parameters defined for a data set.  If the metadata can be derived, i.e. can be obtained by an ODA driver in each design session, an ODA host designer is not required to include the derived metadata in the next design session request.  An ODA designer may ignore such metadata in a Request.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="DataSetQuery">
+    <xsd:annotation>
+      <xsd:documentation>Defines the query of a data set.  Includes the query text, and any additional query spec.  Future: may include a filterSpec for dynamicFiltering. </xsd:documentation>
+    </xsd:annotation>
+    <xsd:attribute name="queryText" type="xsd:string" use="required">
+      <xsd:annotation>
+        <xsd:documentation>The query command text to execute at runtime to retrieve data for this data set.  Retrieved data could be for one or more result sets and/or output parameters, as defined in this data set design.  The query syntax is specific to a data source; could be an empty string.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:element name="DataSetQuery" type="design:DataSetQuery">
+    <xsd:annotation>
+      <xsd:documentation>Defines the query of a data set.  Includes the query text, and any additional query spec.  Future: may include a filterSpec for dynamicFiltering. </xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="DataSourceDesign">
+    <xsd:annotation>
+      <xsd:documentation>A design-time data source definition.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="1" minOccurs="0" name="publicProperties" type="design:Properties">
+        <xsd:annotation>
+          <xsd:documentation>Properties specific to the underlying data source connection.  Public property values can be visible and editable in the host designer.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element maxOccurs="1" minOccurs="0" name="privateProperties" type="design:Properties">
+        <xsd:annotation>
+          <xsd:documentation>Private properties specific to the underlying data source connection.  Their definitions are private to the ODA designer, i.e. must not be visible nor editable by the host designer.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element maxOccurs="1" minOccurs="0" name="hostResourceIdentifiers" type="design:ResourceIdentifiers">
+        <xsd:annotation>
+          <xsd:documentation>The resource identifiers of the ODA host application that initiates the ODA design session request.  An ODA host application may optionally specify its resource identifiers for reference by an ODA designer.   Its support and usage by a custom ODA designer is optional and implementation-dependent.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+    </xsd:sequence>
+    <xsd:attribute name="name" type="xsd:string" use="required">
+      <xsd:annotation>
+        <xsd:documentation>The unique name that identifies an instance of dataSourceDesign.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="odaExtensionId" type="xsd:string" use="required">
+      <xsd:annotation>
+        <xsd:documentation>The extension ID defined in an ODA extension plugin manifest.  It identifies the supporting ODA driver's extension plug-in that implements the ODA run-time extension point.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="effectiveOdaExtensionId" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>The ID of the effective oda.datasource extension, which will be consumed by the ODA consumer framework at runtime.  This could be another extension that overrides this ODA extension at runtime.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="odaExtensionDataSourceId" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>The data source element ID defined in an ODA extension plugin manifest.  Optional, defaults to be same as the ODA extension id if only one dataSource element is defined in the manifest.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="displayName" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>Text can be localized with a resource key.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="linkedProfileName" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>The name of a linked connection profile.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="linkedProfileStoreFilePath" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>The full path name of a linked connection profiles storage file where the linked profile is to be located at run-time.  A null value indicates to use the default DTP profiles storage file.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="resourceFile" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>The base name of a resource file for all localizable design attributes. The file name must end with .properties, and must locate relative to one of the host resource identifiers.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:element name="DataSourceDesign" type="design:DataSourceDesign">
+    <xsd:annotation>
+      <xsd:documentation>A design-time data source definition.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="DesignerState">
+    <xsd:annotation>
+      <xsd:documentation>Private state of an ODA designer upon exit of a design session.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="1" minOccurs="1" name="stateContent" type="design:DesignerStateContent">
+        <xsd:annotation>
+          <xsd:documentation>Designer's private state information; its content is a blackbox to an ODA host.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+    </xsd:sequence>
+    <xsd:attribute name="version" type="xsd:string" use="required">
+      <xsd:annotation>
+        <xsd:documentation>Version of the designer state's data format.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:element name="DesignerState" type="design:DesignerState">
+    <xsd:annotation>
+      <xsd:documentation>Private state of an ODA designer upon exit of a design session.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="DesignerStateContent">
+    <xsd:annotation>
+      <xsd:documentation>An ODA Designer's private state information; its content is a blackbox to an ODA host.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:attribute name="stateContentAsString" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>State content in string format.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="stateContentAsBlob" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>State content in binary format.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:element name="DesignerStateContent" type="design:DesignerStateContent">
+    <xsd:annotation>
+      <xsd:documentation>An ODA Designer's private state information; its content is a blackbox to an ODA host.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="DesignSessionRequest">
+    <xsd:annotation>
+      <xsd:documentation>Defines a design session requested by an ODA host designer.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="1" minOccurs="1" name="dataAccessDesign" type="design:DataAccessDesign"/>
+      <xsd:element maxOccurs="1" minOccurs="0" name="sessionLocale" type="design:Locale">
+        <xsd:annotation>
+          <xsd:documentation>The suggested locale of the requested design session; normally the client locale of a locale-sensitive host designer.  It is up to an ODA designer whether it can support and honor the suggested locale.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element maxOccurs="1" minOccurs="0" name="designerState" type="design:DesignerState">
+        <xsd:annotation>
+          <xsd:documentation>The private state of the ODA designer at the last design session.  It can be used by an ODA designer to resume the state of its last session.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+    </xsd:sequence>
+    <xsd:attribute default="true" name="editable" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>Specifies whether the design session is requested to be in an "editable" or "read-only" mode.  For a read-only design session, the ODA host designer would ignore any changes found in the session response.  It is up to individual ODA designer to honor the requested mode and adjusts its UI behavior.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:element name="DesignSessionRequest" type="design:DesignSessionRequest">
+    <xsd:annotation>
+      <xsd:documentation>Defines a design session requested by an ODA host designer.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="DesignSessionResponse">
+    <xsd:annotation>
+      <xsd:documentation>Defines a design session response to an ODA host designer upon exit of the session.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="1" minOccurs="1" name="dataAccessDesign" type="design:DataAccessDesign">
+        <xsd:annotation>
+          <xsd:documentation>The latest data access design as updated during the design session.  Any updates should be made in own instance, separate from the instance provided in the design session request.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element maxOccurs="1" minOccurs="0" name="designerState" type="design:DesignerState">
+        <xsd:annotation>
+          <xsd:documentation>The private state of the ODA designer upon exit of a design session.  An ODA host designer must handle it as a black-box; it should simply provide persistence services and pass it back in the next session request.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+    </xsd:sequence>
+    <xsd:attribute default="Ok" name="sessionStatus" type="design:SessionStatus">
+      <xsd:annotation>
+        <xsd:documentation>ODA design session exit status.  This tells the ODA host designer whether the design session was successful, and how it may consume and save the session response information.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:element name="DesignSessionResponse" type="design:DesignSessionResponse">
+    <xsd:annotation>
+      <xsd:documentation>Defines a design session response to an ODA host designer upon exit of the session.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="DocumentRoot"/>
+  <xsd:element name="DocumentRoot" type="design:DocumentRoot"/>
+  <xsd:complexType name="DynamicFilterExpression">
+    <xsd:annotation>
+      <xsd:documentation>A built-in filter expression designed with a pre-defined variable.  Its specific type of expression(s) to apply and corresponding argument value(s) to collect will be dynamically specified at runtime.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:complexContent>
+      <xsd:extension base="design:FilterExpression">
+        <xsd:sequence>
+          <xsd:element maxOccurs="1" minOccurs="1" name="context" type="design:AtomicExpressionContext"/>
+          <xsd:element maxOccurs="1" minOccurs="0" name="defaultType" type="design:FilterExpressionType">
+            <xsd:annotation>
+              <xsd:documentation>The default type of filter expression to apply at runtime.</xsd:documentation>
+            </xsd:annotation>
+          </xsd:element>
+        </xsd:sequence>
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+  <xsd:element name="DynamicFilterExpression" type="design:DynamicFilterExpression">
+    <xsd:annotation>
+      <xsd:documentation>A built-in filter expression designed with a pre-defined variable.  Its specific type of expression(s) to apply and corresponding argument value(s) to collect will be dynamically specified at runtime.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="DynamicValuesQuery">
+    <xsd:annotation>
+      <xsd:documentation>A dynamic set of selectable input values to be retrieved at runtime using the query defined in a data set design.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="1" minOccurs="1" name="dataSetDesign" type="design:DataSetDesign">
+        <xsd:annotation>
+          <xsd:documentation>A nested instance of dataSetDesign to use for retrieving the set of selectable user values.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element maxOccurs="1" minOccurs="1" name="valueColumnIdentifier" type="design:DataElementIdentifier">
+        <xsd:annotation>
+          <xsd:documentation>Uniquely identifies the result set column whose values are retrieved as the value choices.  It must be one of the columns defined in the data set design's primary result set.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+    </xsd:sequence>
+    <xsd:attribute default="true" name="enabled" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>If not enabled, use staticValueChoices if defined.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="valueColumn" type="xsd:string" use="required">
+      <xsd:annotation>
+        <xsd:documentation>Deprecated as of 3.3.2; replaced by "valueColumnIdentifier".  The result set column name whose values are retrieved as the value choices.  This attribute must be one of the column names defined in the data set design's primary result set.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="displayNameColumn" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>The result set column name whose values are the localized name that describes the corresponding value in the valueColumn on each data row.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:element name="DynamicValuesQuery" type="design:DynamicValuesQuery">
+    <xsd:annotation>
+      <xsd:documentation>A dynamic set of selectable input values to be retrieved at runtime using the query defined in a data set design.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="ExpressionArguments">
+    <xsd:annotation>
+      <xsd:documentation>Definition of a filter expression's argument(s).</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="1" minOccurs="1" name="expressionParameters" type="design:ExpressionParameters">
+        <xsd:annotation>
+          <xsd:documentation>A collection of parameters used for collecting an expression's argument values.  An expression argument may define one corresponding expression parameter that takes multiple input values sharing the same parameter attributes.  Or it may define multiple expression parameters, with each taking a single input value and has own set of parameter attributes.  Each expression parameter may define either static value(s), or an input parameter to dynamically collect user input value(s).</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+    </xsd:sequence>
+  </xsd:complexType>
+  <xsd:element name="ExpressionArguments" type="design:ExpressionArguments">
+    <xsd:annotation>
+      <xsd:documentation>Definition of a filter expression's argument(s).</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="ExpressionParameterDefinition">
+    <xsd:annotation>
+      <xsd:documentation>The definition of a parameter for the value of an expression's argument.  An expression argument parameter design may specify either static argument value(s), or a data set input parameter.  Static values are pre-defined values of an expression argument, and are not exposed as a data set parameter.  Alternatively, a data set input parameter may be defined to dynamically collect user input value(s).  A data set input parameter definiiton here may be a nested new instance, or may reference one of the existing DataSetParameters.  The dynamic input parameter, if specified, overrides any static values defined.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="1" minOccurs="0" name="staticValues" type="design:StaticValues"/>
+      <xsd:element maxOccurs="1" minOccurs="0" name="dynamicInputParameter" type="design:ParameterDefinition"/>
+    </xsd:sequence>
+  </xsd:complexType>
+  <xsd:element name="ExpressionParameterDefinition" type="design:ExpressionParameterDefinition">
+    <xsd:annotation>
+      <xsd:documentation>The definition of a parameter for the value of an expression's argument.  An expression argument parameter design may specify either static argument value(s), or a data set input parameter.  Static values are pre-defined values of an expression argument, and are not exposed as a data set parameter.  Alternatively, a data set input parameter may be defined to dynamically collect user input value(s).  A data set input parameter definiiton here may be a nested new instance, or may reference one of the existing DataSetParameters.  The dynamic input parameter, if specified, overrides any static values defined.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="ExpressionParameters">
+    <xsd:annotation>
+      <xsd:documentation>A collection of parameters used for collecting a filter expression's argument values.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="unbounded" minOccurs="1" name="parameterDefinitions" type="design:ExpressionParameterDefinition"/>
+    </xsd:sequence>
+  </xsd:complexType>
+  <xsd:element name="ExpressionParameters" type="design:ExpressionParameters">
+    <xsd:annotation>
+      <xsd:documentation>A collection of parameters used for collecting a filter expression's argument values.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="ExpressionVariable">
+    <xsd:annotation>
+      <xsd:documentation>Definition of a filter expression's variable.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:attribute default="ResultSetColumn" name="type" type="design:ExpressionVariableType">
+      <xsd:annotation>
+        <xsd:documentation>The type of variable.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="identifier" type="xsd:string" use="required">
+      <xsd:annotation>
+        <xsd:documentation>A name or expression that identifies the variable used to evaluate an expression.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="nativeDataTypeCode" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>Native data type code of the identified variable.  If none or unknown value (0) is specified, the data element is mapped to an ODA String data type by default.  The native type code value is implementation-specific to individual ODA driver, which must support its mapping to one or more ODA data types.  The supported native-ODA data type mapping must be defined in the ODA dataSource extension.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:element name="ExpressionVariable" type="design:ExpressionVariable">
+    <xsd:annotation>
+      <xsd:documentation>Definition of a filter expression's variable.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType abstract="true" name="FilterExpression">
+    <xsd:annotation>
+      <xsd:documentation>Abstract base class for all filter expressions defined by an ODA designer.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:attribute default="false" name="negatable" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>Indicates whether the expression can be negated, i.e. applied with a NotExpression.  Default is false.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:complexType name="FilterExpressionType">
+    <xsd:annotation>
+      <xsd:documentation>Identifies a type of custom filter expression contributed by an extension of the org.eclipse.datatools.connectivity.oda.dynamicResultSet extension point.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:attribute name="declaringExtensionId" type="xsd:string" use="required">
+      <xsd:annotation>
+        <xsd:documentation>The id of the ODA dynamicResultSet extension that declares this type of filter expression.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="id" type="xsd:string" use="required">
+      <xsd:annotation>
+        <xsd:documentation>The id that uniquely identifies  a custom expression type within an ODA dynamicResultSet extension.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:element name="FilterExpressionType" type="design:FilterExpressionType">
+    <xsd:annotation>
+      <xsd:documentation>Identifies a type of custom filter expression contributed by an extension of the org.eclipse.datatools.connectivity.oda.dynamicResultSet extension point.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="InputElementAttributes">
+    <xsd:annotation>
+      <xsd:documentation>Common attributes for a data element defined with the input mode.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="1" minOccurs="0" name="defaultValues" type="design:StaticValues">
+        <xsd:annotation>
+          <xsd:documentation>An optional collection of default input values.  If defined, this element overrides the deprecated defaultScalarValue element.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element maxOccurs="1" minOccurs="0" name="staticValueChoices" type="design:ScalarValueChoices"/>
+      <xsd:element maxOccurs="1" minOccurs="0" name="dynamicValueChoices" type="design:DynamicValuesQuery"/>
+      <xsd:element maxOccurs="1" minOccurs="0" name="uiHints" type="design:InputElementUIHints"/>
+    </xsd:sequence>
+    <xsd:attribute name="defaultScalarValue" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>The literal string value to be used as the data element's default input value. Only applies to a scalar input data element.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute default="true" name="editable" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>Indicates whether this element value is editable or read-only in the host designer.  A host designer can further design whether to hide this attribute.  Applicable only if its container is visible, e.g. for public properties and input parameters.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute default="false" name="optional" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>Indicates whether the element requires an input value.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute default="false" name="masksValue" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>Indicates whether input value should be masked or encrypted in persistent store and any UI display.  Applies to default value as well.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:element name="InputElementAttributes" type="design:InputElementAttributes">
+    <xsd:annotation>
+      <xsd:documentation>Common attributes for a data element defined with the input mode.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="InputElementUIHints">
+    <xsd:annotation>
+      <xsd:documentation>UI hints for a data element defined with the input mode.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:attribute name="promptStyle" type="design:InputPromptControlStyle">
+      <xsd:annotation>
+        <xsd:documentation>Defaults to TextField if no static and dynamic value choices are defined; otherwise, defaults to SelectableList.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute default="1" name="autoSuggestThreshold" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>The number of characters after which auto suggest will kick in.  It is applicable only where an user can input a value, e.g. when a SelectableListWithTextField promptStyle and a DynamicValuesQuery is used.
+</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:element name="InputElementUIHints" type="design:InputElementUIHints">
+    <xsd:annotation>
+      <xsd:documentation>UI hints for a data element defined with the input mode.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="InputParameterAttributes">
+    <xsd:annotation>
+      <xsd:documentation>The attributes of a top-level input parameter, which can be either scalar or complex type.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="1" minOccurs="1" name="elementAttributes" type="design:InputElementAttributes"/>
+      <xsd:element maxOccurs="1" minOccurs="0" name="uiHints" type="design:InputParameterUIHints"/>
+    </xsd:sequence>
+  </xsd:complexType>
+  <xsd:element name="InputParameterAttributes" type="design:InputParameterAttributes">
+    <xsd:annotation>
+      <xsd:documentation>The attributes of a top-level input parameter, which can be either scalar or complex type.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="InputParameterUIHints">
+    <xsd:annotation>
+      <xsd:documentation>UI hints for a top-level parameter.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:attribute name="groupPromptDisplayName" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>For grouping multiple top-level input parameters under the same UI group prompt.  Text can be localized with a resource key.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:element name="InputParameterUIHints" type="design:InputParameterUIHints">
+    <xsd:annotation>
+      <xsd:documentation>UI hints for a top-level parameter.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="Locale">
+    <xsd:annotation>
+      <xsd:documentation>Represents a specific geographical, political, or cultural region.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:attribute default="en" name="language" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>An ISO Language Code; lower-case, two-letter codes as defined by ISO-639.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="country" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>An ISO Country Code; upper-case, two-letter codes as defined by ISO-3166.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="variant" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>A vendor or browser-specific code.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:element name="Locale" type="design:Locale">
+    <xsd:annotation>
+      <xsd:documentation>Represents a specific geographical, political, or cultural region.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="NameValuePair">
+    <xsd:annotation>
+      <xsd:documentation>A pair of name and corresponding value.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:attribute name="name" type="xsd:string" use="required"/>
+    <xsd:attribute name="value" type="xsd:string"/>
+  </xsd:complexType>
+  <xsd:element name="NameValuePair" type="design:NameValuePair">
+    <xsd:annotation>
+      <xsd:documentation>A pair of name and corresponding value.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="NotExpression">
+    <xsd:annotation>
+      <xsd:documentation>A built-in negated filter expression.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:complexContent>
+      <xsd:extension base="design:FilterExpression">
+        <xsd:sequence>
+          <xsd:element maxOccurs="1" minOccurs="1" name="negatingExpression" type="design:FilterExpression"/>
+        </xsd:sequence>
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+  <xsd:element name="NotExpression" type="design:NotExpression">
+    <xsd:annotation>
+      <xsd:documentation>A built-in negated filter expression.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="OdaDesignSession">
+    <xsd:annotation>
+      <xsd:documentation>Definition of an ODA design session on a Data Access Design.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="1" minOccurs="1" name="request" type="design:DesignSessionRequest"/>
+      <xsd:element maxOccurs="1" minOccurs="0" name="response" type="design:DesignSessionResponse"/>
+    </xsd:sequence>
+  </xsd:complexType>
+  <xsd:element name="OdaDesignSession" type="design:OdaDesignSession">
+    <xsd:annotation>
+      <xsd:documentation>Definition of an ODA design session on a Data Access Design.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="OrExpression">
+    <xsd:annotation>
+      <xsd:documentation>A built-in composite filter expression whose child expressions are combined by the Or boolean operator.  The composite expression is evaluated to be true if any of its child expressions is evaluated as true.  </xsd:documentation>
+    </xsd:annotation>
+    <xsd:complexContent>
+      <xsd:extension base="design:CompositeFilterExpression"/>
+    </xsd:complexContent>
+  </xsd:complexType>
+  <xsd:element name="OrExpression" type="design:OrExpression">
+    <xsd:annotation>
+      <xsd:documentation>A built-in composite filter expression whose child expressions are combined by the Or boolean operator.  The composite expression is evaluated to be true if any of its child expressions is evaluated as true.  </xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="OutputElementAttributes">
+    <xsd:annotation>
+      <xsd:documentation>Common attributes for a data element defined with the output mode.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="1" minOccurs="0" name="formattingHints" type="design:ValueFormatHints"/>
+    </xsd:sequence>
+    <xsd:attribute name="label" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>A free-format string used to identify the data element in a heading, such as a column header.  Text can be localized with a resource key.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="helpText" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>Provides additional information to the user about this data element, such as in a balloon help.  Text can be localized with a resource key.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:element name="OutputElementAttributes" type="design:OutputElementAttributes">
+    <xsd:annotation>
+      <xsd:documentation>Common attributes for a data element defined with the output mode.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="ParameterDefinition">
+    <xsd:annotation>
+      <xsd:documentation>Top-level parameter definition; may be input and/or output mode.  Parameter may be of scalar or complex type.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="1" minOccurs="1" name="attributes" type="design:DataElementAttributes">
+        <xsd:annotation>
+          <xsd:documentation>Attributes applicable to both input and output parameter mode.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element maxOccurs="1" minOccurs="0" name="inputAttributes" type="design:InputParameterAttributes">
+        <xsd:annotation>
+          <xsd:documentation>Required for input parameter.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element maxOccurs="1" minOccurs="0" name="outputUsageHints" type="design:OutputElementAttributes">
+        <xsd:annotation>
+          <xsd:documentation>Optional for an output parameter.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element maxOccurs="1" minOccurs="0" name="fields" type="design:ParameterFields">
+        <xsd:annotation>
+          <xsd:documentation>Applicable to complex parameter only.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+    </xsd:sequence>
+    <xsd:attribute default="In" name="inOutMode" type="design:ParameterMode"/>
+  </xsd:complexType>
+  <xsd:element name="ParameterDefinition" type="design:ParameterDefinition">
+    <xsd:annotation>
+      <xsd:documentation>Top-level parameter definition; may be input and/or output mode.  Parameter may be of scalar or complex type.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="ParameterFieldDefinition">
+    <xsd:annotation>
+      <xsd:documentation>The definition of each field in a complex parameter.  A parameter field is of scalar type.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="1" minOccurs="1" name="attributes" type="design:DataElementAttributes">
+        <xsd:annotation>
+          <xsd:documentation>Attributes applicable to both input and output parameter mode.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element maxOccurs="1" minOccurs="0" name="inputAttributes" type="design:InputElementAttributes">
+        <xsd:annotation>
+          <xsd:documentation>Required for the field of an input parameter.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element maxOccurs="1" minOccurs="0" name="outputUsageHints" type="design:OutputElementAttributes">
+        <xsd:annotation>
+          <xsd:documentation>Optional for the field of an output parameter.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+    </xsd:sequence>
+  </xsd:complexType>
+  <xsd:element name="ParameterFieldDefinition" type="design:ParameterFieldDefinition">
+    <xsd:annotation>
+      <xsd:documentation>The definition of each field in a complex parameter.  A parameter field is of scalar type.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="ParameterFields">
+    <xsd:annotation>
+      <xsd:documentation>Defines all the fields of a complex parameter.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="unbounded" minOccurs="1" name="fieldCollection" type="design:ParameterFieldDefinition"/>
+    </xsd:sequence>
+  </xsd:complexType>
+  <xsd:element name="ParameterFields" type="design:ParameterFields">
+    <xsd:annotation>
+      <xsd:documentation>Defines all the fields of a complex parameter.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="Properties">
+    <xsd:annotation>
+      <xsd:documentation>A collection of properties.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="unbounded" minOccurs="1" name="properties" type="design:Property"/>
+    </xsd:sequence>
+  </xsd:complexType>
+  <xsd:element name="Properties" type="design:Properties">
+    <xsd:annotation>
+      <xsd:documentation>A collection of properties.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="Property">
+    <xsd:annotation>
+      <xsd:documentation>The property of a data design component.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="1" minOccurs="1" name="nameValue" type="design:NameValuePair">
+        <xsd:annotation>
+          <xsd:documentation>Property name and corresponding value if available.  The property value must be a string.  The value may be selected from one of the value choices defined for a property.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element maxOccurs="1" minOccurs="0" name="designAttributes" type="design:PropertyAttributes">
+        <xsd:annotation>
+          <xsd:documentation>Property attributes defined for this *instance* of DataAccessDesign.  This set of attributes overrides all those pre-defined by an ODA extension in its plugin.xml.  An ODA host designer should apply those pre-defined attributes by default to this instance, only if none is specified here.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+    </xsd:sequence>
+  </xsd:complexType>
+  <xsd:element name="Property" type="design:Property">
+    <xsd:annotation>
+      <xsd:documentation>The property of a data design component.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="PropertyAttributes">
+    <xsd:annotation>
+      <xsd:documentation>The attributes of a property.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="1" minOccurs="0" name="elementAttributes" type="design:InputElementAttributes"/>
+    </xsd:sequence>
+    <xsd:attribute name="displayName" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>Text can be localized with a resource key.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute default="true" name="derivedMetaData" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>If the property metadata can be derived, i.e. can be obtained by an ODA driver in each design session, an ODA host designer is not required to include the derived metadata in the next design session request.  An ODA designer may ignore such metadata in a Request.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:element name="PropertyAttributes" type="design:PropertyAttributes">
+    <xsd:annotation>
+      <xsd:documentation>The attributes of a property.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="ResourceIdentifiers">
+    <xsd:annotation>
+      <xsd:documentation>Resource identifiers of an ODA host application or custom ODA designer.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:attribute name="applResourceBaseURIString" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>The base URI of general purpose resources of an ODA consumer application in string form.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="designResourceBaseURIString" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>The base URI of design resources of an ODA consumer application in string form.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:element name="ResourceIdentifiers" type="design:ResourceIdentifiers">
+    <xsd:annotation>
+      <xsd:documentation>Resource identifiers of an ODA host application or custom ODA designer.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="ResultSetColumns">
+    <xsd:annotation>
+      <xsd:documentation>A collection of result set columns' definitions.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="unbounded" minOccurs="1" name="resultColumnDefinitions" type="design:ColumnDefinition"/>
+    </xsd:sequence>
+  </xsd:complexType>
+  <xsd:element name="ResultSetColumns" type="design:ResultSetColumns">
+    <xsd:annotation>
+      <xsd:documentation>A collection of result set columns' definitions.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="ResultSetCriteria">
+    <xsd:annotation>
+      <xsd:documentation>Specification of a result set criteria or characteristics.
+Applying the criteria may impact the data retrieved in a result set, in addition to any specification expressed in a query text.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="1" minOccurs="0" name="filterSpecification" type="design:FilterExpression">
+        <xsd:annotation>
+          <xsd:documentation>Pre-defined filter specification  of a result set. It may be any concrete type of FilterExpression.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element maxOccurs="1" minOccurs="0" name="rowOrdering" type="design:SortSpecification">
+        <xsd:annotation>
+          <xsd:documentation>Specifies the ordering of rows in a result set.  An empty collection explicitly indicates that the result set has no sort keys defined.  Absence of this optional element, on the other hand, indicates that its row ordering specification is unknown or not available. </xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+    </xsd:sequence>
+  </xsd:complexType>
+  <xsd:element name="ResultSetCriteria" type="design:ResultSetCriteria">
+    <xsd:annotation>
+      <xsd:documentation>Specification of a result set criteria or characteristics.
+Applying the criteria may impact the data retrieved in a result set, in addition to any specification expressed in a query text.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="ResultSetDefinition">
+    <xsd:annotation>
+      <xsd:documentation>Definition of a single homogeneous result set returned by a data set query.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="1" minOccurs="1" name="resultSetColumns" type="design:ResultSetColumns">
+        <xsd:annotation>
+          <xsd:documentation>Collection of data columns for this result set.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element maxOccurs="1" minOccurs="0" name="criteria" type="design:ResultSetCriteria"/>
+    </xsd:sequence>
+    <xsd:attribute name="name" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>A name that uniquely identifies a result set at runtime.  If not specified, a result set is identified by its sequence in the resultSetDefinitions.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:element name="ResultSetDefinition" type="design:ResultSetDefinition">
+    <xsd:annotation>
+      <xsd:documentation>Definition of a single homogeneous result set returned by a data set query.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="ResultSets">
+    <xsd:annotation>
+      <xsd:documentation>A collection of result sets' definition and metadata. If the metadata can be derived, i.e. can be obtained by an ODA driver in each design session, an ODA host designer is not required to include the derived metadata in the next design session request.  An ODA designer may ignore such metadata in a Request.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="unbounded" minOccurs="1" name="resultSetDefinitions" type="design:ResultSetDefinition"/>
+    </xsd:sequence>
+    <xsd:attribute default="true" name="derivedMetaData" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>If the metadata can be derived, i.e. can be obtained by an ODA driver in each design session, an ODA host designer is not required to include the derived metadata in the next design session request.  An ODA designer may ignore such metadata in a Request.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:element name="ResultSets" type="design:ResultSets">
+    <xsd:annotation>
+      <xsd:documentation>A collection of result sets' definition and metadata. If the metadata can be derived, i.e. can be obtained by an ODA driver in each design session, an ODA host designer is not required to include the derived metadata in the next design session request.  An ODA designer may ignore such metadata in a Request.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="ResultSubset">
+    <xsd:annotation>
+      <xsd:documentation>Defines a subset of columns in a data set design's result set.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="1" minOccurs="0" name="dataSetDesign" type="design:DataSetDesign">
+        <xsd:annotation>
+          <xsd:documentation>A nested instance of dataSetDesign to use for retrieving the referenced data set column.  If not specified, the same data set design that contains this design element would apply by default.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+      <xsd:element maxOccurs="1" minOccurs="1" name="columnIdentifiers" type="design:DataElementIdentifiers">
+        <xsd:annotation>
+          <xsd:documentation>Uniquely identifies one or more columns in the specified result set.  Multiple columns are combined in the specified sequence, such as for a compounded attribute.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+    </xsd:sequence>
+    <xsd:attribute name="resultSetName" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>Identifies the result set of the data set design if more than one result sets are available, and can be identified by name.  If no results set is explicitly specified here, the primary result set would apply by default.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:element name="ResultSubset" type="design:ResultSubset">
+    <xsd:annotation>
+      <xsd:documentation>Defines a subset of columns in a data set design's result set.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="ScalarValueChoices">
+    <xsd:annotation>
+      <xsd:documentation>A collection of scalar values defined for user selection.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="unbounded" minOccurs="1" name="scalarValues" type="design:ScalarValueDefinition"/>
+    </xsd:sequence>
+  </xsd:complexType>
+  <xsd:element name="ScalarValueChoices" type="design:ScalarValueChoices">
+    <xsd:annotation>
+      <xsd:documentation>A collection of scalar values defined for user selection.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="ScalarValueDefinition">
+    <xsd:annotation>
+      <xsd:documentation>Defines a scalar value with a brief description.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:attribute name="value" type="xsd:string" use="required"/>
+    <xsd:attribute name="displayName" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>A localized name that describes the value.  Text can be localized with a resource key.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:element name="ScalarValueDefinition" type="design:ScalarValueDefinition">
+    <xsd:annotation>
+      <xsd:documentation>Defines a scalar value with a brief description.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="SortKey">
+    <xsd:annotation>
+      <xsd:documentation>A dynamic sort key specified in a SortCriteria.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="1" minOccurs="1" name="columnIdentifier" type="design:DataElementIdentifier">
+        <xsd:annotation>
+          <xsd:documentation>Uniquely identifies a result set column by name and/or position.  It must reference one of the columns associated with the same ResultSetDefinition.</xsd:documentation>
+        </xsd:annotation>
+      </xsd:element>
+    </xsd:sequence>
+    <xsd:attribute name="columnName" type="xsd:string" use="required">
+      <xsd:annotation>
+        <xsd:documentation>Deprecated as of 3.3.2; replaced by "columnIdentifier".  The unique name of a result set column. It must reference one of the columns associated with the same ResultSetDefinition.  If a column can only be identified by position, this name may be empty.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="columnPosition" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>Deprecated as of 3.3.2; replaced by "columnIdentifier".  The 1-based index position (left-to-right order) of a result set column. </xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute default="Ascending" name="sortDirection" type="design:SortDirectionType">
+      <xsd:annotation>
+        <xsd:documentation>The sort direction of this result set column.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="nullValueOrdering" type="design:NullOrderingType">
+      <xsd:annotation>
+        <xsd:documentation>The ordering of null vs. non-null values in the sort order.  Default value is "Unknown", i.e. not specified.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute default="false" name="optional" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>Indicates whether this sort key can be excluded at runtime.  Default value is false.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:element name="SortKey" type="design:SortKey">
+    <xsd:annotation>
+      <xsd:documentation>A dynamic sort key specified in a SortCriteria.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="SortSpecification">
+    <xsd:annotation>
+      <xsd:documentation>Specification of zero or more sort keys.  An empty collection explicitly indicates that the result set has no sort keys defined.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="unbounded" minOccurs="0" name="sortKeys" type="design:SortKey"/>
+    </xsd:sequence>
+  </xsd:complexType>
+  <xsd:element name="SortSpecification" type="design:SortSpecification">
+    <xsd:annotation>
+      <xsd:documentation>Specification of zero or more sort keys.  An empty collection explicitly indicates that the result set has no sort keys defined.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="StaticValues">
+    <xsd:annotation>
+      <xsd:documentation>A collection of static values in any data type.  It may be in any one of the ODA defined data types, or a CustomData.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element maxOccurs="unbounded" minOccurs="0" name="values" nillable="true" type="xsd:string"/>
+    </xsd:sequence>
+  </xsd:complexType>
+  <xsd:element name="StaticValues" type="design:StaticValues">
+    <xsd:annotation>
+      <xsd:documentation>A collection of static values in any data type.  It may be in any one of the ODA defined data types, or a CustomData.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:complexType name="ValueFormatHints">
+    <xsd:annotation>
+      <xsd:documentation>Hints on how to format a value.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:attribute default="-1" name="displaySize" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>Default display length of the data value.  A value of -1 means unknown length.  The default value, if not specified, is -1.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute name="displayFormat" type="xsd:string">
+      <xsd:annotation>
+        <xsd:documentation>The preferred display format of the data value.  It contains a data format mask, e.g. #,###.00, ShortDate, etc.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute default="Plain" name="textFormatType" type="design:TextFormatType">
+      <xsd:annotation>
+        <xsd:documentation>The type of text content of the data value, i.e. plain text, HTML or RTF.  It provides a hint on the type of text control to use for displaying the data value, e.g. a Dynamic Text Control.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute default="Automatic" name="horizontalAlignment" type="design:HorizontalAlignment">
+      <xsd:annotation>
+        <xsd:documentation>Horizontal display alignment of the data value.  See valid enum values.  "Automatic" means that it is up to an ODA host designer to determine the alignment based on its default rules.</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+    <xsd:attribute default="None" name="textWrapType" type="design:TextWrapType">
+      <xsd:annotation>
+        <xsd:documentation>A hint on the type of text wrapping on the data value.  It could be in a single line (None), or word-wrapped (Word).</xsd:documentation>
+      </xsd:annotation>
+    </xsd:attribute>
+  </xsd:complexType>
+  <xsd:element name="ValueFormatHints" type="design:ValueFormatHints">
+    <xsd:annotation>
+      <xsd:documentation>Hints on how to format a value.</xsd:documentation>
+    </xsd:annotation>
+  </xsd:element>
+</xsd:schema>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/model/odaDesignSession.genmodel b/plugins/org.eclipse.datatools.connectivity.oda.design/model/odaDesignSession.genmodel
new file mode 100644
index 0000000..6af5227
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/model/odaDesignSession.genmodel
@@ -0,0 +1,372 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<genmodel:GenModel xmi:version="2.0"

+    xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"

+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" copyrightText="Copyright (c) 2005, 2010 Actuate Corporation"

+    modelDirectory="/org.eclipse.datatools.connectivity.oda.design/src" editDirectory="/org.eclipse.datatools.connectivity.oda.design.edit/src"

+    editorDirectory="/org.eclipse.datatools.connectivity.oda.design.editor/src" modelPluginID="org.eclipse.datatools.connectivity.oda.design"

+    templateDirectory="/org.eclipse.datatools.connectivity.oda.design/src/templates"

+    runtimeJar="true" dynamicTemplates="true" modelName="OdaDesignSession" editPluginClass="org.eclipse.datatools.connectivity.oda.design.provider.OdaDesignSessionEditPlugin"

+    editorPluginClass="org.eclipse.datatools.connectivity.oda.design.presentation.OdaDesignSessionEditorPlugin"

+    generateSchema="true" nonNLSMarkers="true" runtimeCompatibility="true" codeFormatting="true"

+    importerID="org.eclipse.xsd.ecore.importer" complianceLevel="5.0">

+  <foreignModel>file:/E:/lchan/doc/DSRepository/ODA/func/odaDesignSession333.xsd</foreignModel>

+  <genPackages prefix="Design" basePackage="org.eclipse.datatools.connectivity.oda"

+      resource="XML" ecorePackage="org.eclipse.datatools.connectivity.oda.design.ecore#/">

+    <genAnnotations source="http://www.eclipse.org/emf/2002/GenModel/exporter/org.eclipse.xsd.ecore.exporter">

+      <genAnnotations source="DesignXML.xsd"/>

+    </genAnnotations>

+    <genEnums ecoreEnum="org.eclipse.datatools.connectivity.oda.design.ecore#//AxisType">

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//AxisType/DimensionMember"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//AxisType/DimensionAttribute"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//AxisType/Measure"/>

+    </genEnums>

+    <genEnums ecoreEnum="org.eclipse.datatools.connectivity.oda.design.ecore#//ElementNullability">

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//ElementNullability/Unknown"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//ElementNullability/Nullable"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//ElementNullability/NotNullable"/>

+    </genEnums>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="org.eclipse.datatools.connectivity.oda.design.ecore#//ExpressionVariableType">

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//ExpressionVariableType/ResultSetColumn"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//ExpressionVariableType/InstanceOf"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//ExpressionVariableType/QueryExpression"/>

+    </genEnums>

+    <genEnums ecoreEnum="org.eclipse.datatools.connectivity.oda.design.ecore#//HorizontalAlignment">

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//HorizontalAlignment/Automatic"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//HorizontalAlignment/Left"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//HorizontalAlignment/Center"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//HorizontalAlignment/Right"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//HorizontalAlignment/LeftAndRight"/>

+    </genEnums>

+    <genEnums ecoreEnum="org.eclipse.datatools.connectivity.oda.design.ecore#//InputPromptControlStyle">

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//InputPromptControlStyle/TextField"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//InputPromptControlStyle/SelectableList"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//InputPromptControlStyle/SelectableListWithTextField"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//InputPromptControlStyle/CheckBox"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//InputPromptControlStyle/RadioButton"/>

+    </genEnums>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="org.eclipse.datatools.connectivity.oda.design.ecore#//NullOrderingType">

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//NullOrderingType/Unknown"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//NullOrderingType/NullsFirst"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//NullOrderingType/NullsLast"/>

+    </genEnums>

+    <genEnums ecoreEnum="org.eclipse.datatools.connectivity.oda.design.ecore#//OdaComplexDataType">

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//OdaComplexDataType/Structure"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//OdaComplexDataType/Table"/>

+    </genEnums>

+    <genEnums ecoreEnum="org.eclipse.datatools.connectivity.oda.design.ecore#//OdaScalarDataType">

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//OdaScalarDataType/Date"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//OdaScalarDataType/Double"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//OdaScalarDataType/Integer"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//OdaScalarDataType/String"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//OdaScalarDataType/Time"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//OdaScalarDataType/Timestamp"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//OdaScalarDataType/Decimal"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//OdaScalarDataType/Blob"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//OdaScalarDataType/Clob"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//OdaScalarDataType/Boolean"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//OdaScalarDataType/JavaObject"/>

+    </genEnums>

+    <genEnums ecoreEnum="org.eclipse.datatools.connectivity.oda.design.ecore#//ParameterMode">

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//ParameterMode/In"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//ParameterMode/Out"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//ParameterMode/InOut"/>

+    </genEnums>

+    <genEnums ecoreEnum="org.eclipse.datatools.connectivity.oda.design.ecore#//SessionStatus">

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//SessionStatus/Ok"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//SessionStatus/UserCancelled"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//SessionStatus/LoginFailed"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//SessionStatus/Error"/>

+    </genEnums>

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="org.eclipse.datatools.connectivity.oda.design.ecore#//SortDirectionType">

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//SortDirectionType/Ascending"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//SortDirectionType/Descending"/>

+    </genEnums>

+    <genEnums ecoreEnum="org.eclipse.datatools.connectivity.oda.design.ecore#//TextFormatType">

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//TextFormatType/Plain"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//TextFormatType/HTML"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//TextFormatType/RTF"/>

+    </genEnums>

+    <genEnums ecoreEnum="org.eclipse.datatools.connectivity.oda.design.ecore#//TextWrapType">

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//TextWrapType/None"/>

+      <genEnumLiterals ecoreEnumLiteral="org.eclipse.datatools.connectivity.oda.design.ecore#//TextWrapType/Word"/>

+    </genEnums>

+    <genDataTypes ecoreDataType="org.eclipse.datatools.connectivity.oda.design.ecore#//AxisTypeObject"/>

+    <genDataTypes ecoreDataType="org.eclipse.datatools.connectivity.oda.design.ecore#//ElementNullabilityObject"/>

+    <genDataTypes ecoreDataType="org.eclipse.datatools.connectivity.oda.design.ecore#//ExpressionVariableTypeObject"/>

+    <genDataTypes ecoreDataType="org.eclipse.datatools.connectivity.oda.design.ecore#//HorizontalAlignmentObject"/>

+    <genDataTypes ecoreDataType="org.eclipse.datatools.connectivity.oda.design.ecore#//InputPromptControlStyleObject"/>

+    <genDataTypes ecoreDataType="org.eclipse.datatools.connectivity.oda.design.ecore#//NullOrderingTypeObject"/>

+    <genDataTypes ecoreDataType="org.eclipse.datatools.connectivity.oda.design.ecore#//OdaComplexDataTypeObject"/>

+    <genDataTypes ecoreDataType="org.eclipse.datatools.connectivity.oda.design.ecore#//OdaScalarDataTypeObject"/>

+    <genDataTypes ecoreDataType="org.eclipse.datatools.connectivity.oda.design.ecore#//ParameterModeObject"/>

+    <genDataTypes ecoreDataType="org.eclipse.datatools.connectivity.oda.design.ecore#//SessionStatusObject"/>

+    <genDataTypes ecoreDataType="org.eclipse.datatools.connectivity.oda.design.ecore#//SortDirectionTypeObject"/>

+    <genDataTypes ecoreDataType="org.eclipse.datatools.connectivity.oda.design.ecore#//TextFormatTypeObject"/>

+    <genDataTypes ecoreDataType="org.eclipse.datatools.connectivity.oda.design.ecore#//TextWrapTypeObject"/>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//AndExpression"/>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//AtomicExpressionContext">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//AtomicExpressionContext/optional"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//AtomicExpressionContext/variable"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//AtomicExpressionContext/arguments"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//AxisAttributes">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//AxisAttributes/axisType"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//AxisAttributes/onColumnLayout"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//AxisAttributes/relatedColumns"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//ColumnDefinition">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//ColumnDefinition/attributes"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//ColumnDefinition/usageHints"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//ColumnDefinition/multiDimensionAttributes"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//CompositeFilterExpression">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//CompositeFilterExpression/children"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//CustomData">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//CustomData/providerId"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//CustomData/value"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//CustomData/displayValue"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//CustomFilterExpression">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//CustomFilterExpression/type"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//CustomFilterExpression/context"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//DataAccessDesign">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//DataAccessDesign/dataSetDesign"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//DataElementAttributes">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//DataElementAttributes/identifier"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DataElementAttributes/name"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DataElementAttributes/position"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DataElementAttributes/nativeDataTypeCode"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DataElementAttributes/precision"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DataElementAttributes/scale"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DataElementAttributes/nullability"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//DataElementAttributes/uiHints"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//DataElementIdentifier">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DataElementIdentifier/name"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DataElementIdentifier/position"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//DataElementIdentifiers">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//DataElementIdentifiers/identifiers"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//DataElementUIHints">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DataElementUIHints/displayName"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DataElementUIHints/description"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//DataSetDesign">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DataSetDesign/name"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DataSetDesign/odaExtensionDataSetId"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//DataSetDesign/dataSourceDesign"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//DataSetDesign/query"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DataSetDesign/displayName"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//DataSetDesign/publicProperties"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//DataSetDesign/privateProperties"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//DataSetDesign/resultSets"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DataSetDesign/primaryResultSetName"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//DataSetDesign/parameters"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//DataSetParameters">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//DataSetParameters/parameterDefinitions"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DataSetParameters/derivedMetaData"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//DataSetQuery">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DataSetQuery/queryText"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//DataSourceDesign">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DataSourceDesign/name"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DataSourceDesign/odaExtensionId"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DataSourceDesign/effectiveOdaExtensionId"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DataSourceDesign/odaExtensionDataSourceId"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DataSourceDesign/displayName"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//DataSourceDesign/publicProperties"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//DataSourceDesign/privateProperties"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DataSourceDesign/linkedProfileName"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DataSourceDesign/linkedProfileStoreFilePath"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//DataSourceDesign/hostResourceIdentifiers"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DataSourceDesign/resourceFile"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//DesignerState">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DesignerState/version"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//DesignerState/stateContent"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//DesignerStateContent">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DesignerStateContent/stateContentAsString"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DesignerStateContent/stateContentAsBlob"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//DesignSessionRequest">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//DesignSessionRequest/dataAccessDesign"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DesignSessionRequest/editable"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//DesignSessionRequest/sessionLocale"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//DesignSessionRequest/designerState"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//DesignSessionResponse">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DesignSessionResponse/sessionStatus"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//DesignSessionResponse/dataAccessDesign"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//DesignSessionResponse/designerState"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//DocumentRoot">

+      <genFeatures property="None" children="true" createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DocumentRoot/mixed"/>

+      <genFeatures property="None" notify="false" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//DocumentRoot/xMLNSPrefixMap"/>

+      <genFeatures property="None" notify="false" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//DocumentRoot/xSISchemaLocation"/>

+      <genFeatures property="None" notify="false" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//DocumentRoot/odaDesignSession"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//DynamicFilterExpression">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//DynamicFilterExpression/context"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//DynamicFilterExpression/defaultType"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//DynamicValuesQuery">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//DynamicValuesQuery/dataSetDesign"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DynamicValuesQuery/enabled"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//DynamicValuesQuery/valueColumnIdentifier"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DynamicValuesQuery/valueColumn"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//DynamicValuesQuery/displayNameColumn"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//ExpressionArguments">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//ExpressionArguments/expressionParameters"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//ExpressionParameterDefinition">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//ExpressionParameterDefinition/staticValues"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//ExpressionParameterDefinition/dynamicInputParameter"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//ExpressionParameters">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//ExpressionParameters/parameterDefinitions"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//ExpressionVariable">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//ExpressionVariable/type"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//ExpressionVariable/identifier"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//ExpressionVariable/nativeDataTypeCode"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//FilterExpression">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//FilterExpression/negatable"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//FilterExpressionType">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//FilterExpressionType/declaringExtensionId"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//FilterExpressionType/id"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//InputElementAttributes">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//InputElementAttributes/defaultScalarValue"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//InputElementAttributes/defaultValues"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//InputElementAttributes/editable"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//InputElementAttributes/optional"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//InputElementAttributes/masksValue"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//InputElementAttributes/staticValueChoices"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//InputElementAttributes/dynamicValueChoices"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//InputElementAttributes/uiHints"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//InputElementUIHints">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//InputElementUIHints/promptStyle"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//InputElementUIHints/autoSuggestThreshold"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//InputParameterAttributes">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//InputParameterAttributes/elementAttributes"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//InputParameterAttributes/uiHints"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//InputParameterUIHints">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//InputParameterUIHints/groupPromptDisplayName"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//Locale">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//Locale/language"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//Locale/country"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//Locale/variant"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//NameValuePair">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//NameValuePair/name"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//NameValuePair/value"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//NotExpression">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//NotExpression/negatingExpression"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//OdaDesignSession">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//OdaDesignSession/request"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//OdaDesignSession/response"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//OrExpression"/>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//OutputElementAttributes">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//OutputElementAttributes/label"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//OutputElementAttributes/formattingHints"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//OutputElementAttributes/helpText"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//ParameterDefinition">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//ParameterDefinition/inOutMode"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//ParameterDefinition/attributes"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//ParameterDefinition/inputAttributes"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//ParameterDefinition/outputUsageHints"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//ParameterDefinition/fields"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//ParameterFieldDefinition">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//ParameterFieldDefinition/attributes"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//ParameterFieldDefinition/inputAttributes"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//ParameterFieldDefinition/outputUsageHints"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//ParameterFields">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//ParameterFields/fieldCollection"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//Properties">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//Properties/properties"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//Property">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//Property/nameValue"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//Property/designAttributes"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//PropertyAttributes">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//PropertyAttributes/displayName"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//PropertyAttributes/elementAttributes"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//PropertyAttributes/derivedMetaData"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//ResourceIdentifiers">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//ResourceIdentifiers/applResourceBaseURIString"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//ResourceIdentifiers/designResourceBaseURIString"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//ResultSetColumns">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//ResultSetColumns/resultColumnDefinitions"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//ResultSetCriteria">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//ResultSetCriteria/filterSpecification"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//ResultSetCriteria/rowOrdering"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//ResultSetDefinition">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//ResultSetDefinition/name"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//ResultSetDefinition/resultSetColumns"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//ResultSetDefinition/criteria"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//ResultSets">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//ResultSets/resultSetDefinitions"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//ResultSets/derivedMetaData"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//ResultSubset">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//ResultSubset/dataSetDesign"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//ResultSubset/resultSetName"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//ResultSubset/columnIdentifiers"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//ScalarValueChoices">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//ScalarValueChoices/scalarValues"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//ScalarValueDefinition">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//ScalarValueDefinition/value"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//ScalarValueDefinition/displayName"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//SortKey">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//SortKey/columnIdentifier"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//SortKey/columnName"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//SortKey/columnPosition"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//SortKey/sortDirection"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//SortKey/nullValueOrdering"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//SortKey/optional"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//SortSpecification">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.datatools.connectivity.oda.design.ecore#//SortSpecification/sortKeys"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//StaticValues">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//StaticValues/values"/>

+    </genClasses>

+    <genClasses ecoreClass="org.eclipse.datatools.connectivity.oda.design.ecore#//ValueFormatHints">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//ValueFormatHints/displaySize"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//ValueFormatHints/displayFormat"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//ValueFormatHints/textFormatType"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//ValueFormatHints/horizontalAlignment"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.datatools.connectivity.oda.design.ecore#//ValueFormatHints/textWrapType"/>

+    </genClasses>

+  </genPackages>

+</genmodel:GenModel>

diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/model/org.eclipse.datatools.connectivity.oda.design.ecore b/plugins/org.eclipse.datatools.connectivity.oda.design/model/org.eclipse.datatools.connectivity.oda.design.ecore
new file mode 100644
index 0000000..c55c020
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/model/org.eclipse.datatools.connectivity.oda.design.ecore
@@ -0,0 +1,2267 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<ecore:EPackage xmi:version="2.0"

+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="design"

+    nsURI="http://www.eclipse.org/datatools/connectivity/oda/design" nsPrefix="design">

+  <eClassifiers xsi:type="ecore:EClass" name="AndExpression" eSuperTypes="#//CompositeFilterExpression">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A built-in composite filter expression whose child expressions are combined by the And boolean operator.  The composite expression is evaluated to be true only if all its child expressions are evaluated as true.  "/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="AndExpression"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="AtomicExpressionContext">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="The context within a basic, indivisible unit of expression that can be evaluated by itself."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="AtomicExpressionContext"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="optional" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"

+        defaultValueLiteral="false" unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Indicates whether this atomic expression can be excluded at runtime."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="optional"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="variable" eType="#//ExpressionVariable"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="variable"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="arguments" eType="#//ExpressionArguments"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Defines the expression's argument(s) and each of its associated value(s)."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="arguments"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="AxisAttributes">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Multi-dimensional attributes of a data element, such as a result set column."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="AxisAttributes"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="axisType" eType="#//AxisType"

+        defaultValueLiteral="Measure" unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The axis type of the data element.  It provides design hints to a consumer application on how the column data should be analyzed, or applied in a multi-dimensional view."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="axisType"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="onColumnLayout" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"

+        defaultValueLiteral="true" unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="A design hint on whether the dimension data element should be laid out on a column or row.  It is normally used by presentation element such as a crosstab to design a default layout."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="onColumnLayout"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="relatedColumns" eType="#//ResultSubset"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The result set column(s) that are related to this data element.  For example, for a dimension member AxisType element, its related column(s) are those modeled to be its attribute. Multiple related columns may be combined to be a compounded attribute of a dimension."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="relatedColumns"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EEnum" name="AxisType">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Axis type of a result set column."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="AxisType"/>

+    </eAnnotations>

+    <eLiterals name="DimensionMember"/>

+    <eLiterals name="DimensionAttribute" value="1"/>

+    <eLiterals name="Measure" value="2"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EDataType" name="AxisTypeObject" instanceClassName="org.eclipse.emf.common.util.Enumerator">

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="AxisType:Object"/>

+      <details key="baseType" value="AxisType"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ColumnDefinition">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Definition of a result set column."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ColumnDefinition"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="attributes" lowerBound="1"

+        eType="#//DataElementAttributes" containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="attributes"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="usageHints" eType="#//OutputElementAttributes"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="usageHints"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="multiDimensionAttributes"

+        eType="#//AxisAttributes" containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The attributes of a multi-dimensional data element."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="multiDimensionAttributes"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="CompositeFilterExpression" eSuperTypes="#//FilterExpression">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A composite of one or multiple child filter expressions.  Its child expressions are ordered, but their relationships are not defined."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="CompositeFilterExpression"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="children" lowerBound="1"

+        upperBound="-1" eType="#//FilterExpression" containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="children"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="CustomData">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Custom data specific to any participant of an ODA design session, i.e. an ODA host or custom designer, as identified by its providerId.  Its value is used only by its provider, but may be displayed in a string format by a non-provider component. This may be used as one of the StaticValues defined to be an input parameter's default values."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="CustomData"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="providerId" lowerBound="1"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The unique identifier or namespace of the provider of this instance."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="providerId"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//AnySimpleType">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Custom data value that is normally used only by its provider."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="value"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="displayValue" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The String representation of the data value, which can be displayed by a non provider."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="displayValue"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="CustomFilterExpression" eSuperTypes="#//FilterExpression">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="The definition of a custom atomic filter expression contributed by an extension of the org.eclipse.datatools.connectivity.oda.dynamicResultSet extension point."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="CustomFilterExpression"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="type" lowerBound="1" eType="#//FilterExpressionType"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="type"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="context" lowerBound="1"

+        eType="#//AtomicExpressionContext" containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="context"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="DataAccessDesign">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="The design of how to access a data set.  Its model is a design tree that starts with a top-level dataSetDesign, which contains its corresponding dataSourceDesign.  The top-level data set may contain nested data set designs."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="DataAccessDesign"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="dataSetDesign" eType="#//DataSetDesign"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="dataSetDesign"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="DataElementAttributes">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Common attributes for a data element."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="DataElementAttributes"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="identifier" lowerBound="1"

+        eType="#//DataElementIdentifier" containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Uniquely identifies this data element by name and/or position."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="identifier"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Deprecated as of 3.3.2; replaced by &quot;identifier&quot;.  A name that uniquely identifies this data element.  If a data element can only be identified by position, this name may be empty."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="name"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="position" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//UnsignedShort"

+        unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Deprecated as of 3.3.2; replaced by &quot;identifier&quot;. The 1-based index position (left-to-right order) within a collection of data elements.  The position is defined per the underlying data source, and is not necessarily sequential.  For example, a query may access 3 columns in a result set, but the data access design may choose to expose only column 2.  In this case, only one column element with postion 2 is defined in the result set definition."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="position"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="nativeDataTypeCode" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Int"

+        defaultValueLiteral="0" unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Native data type code of the data element.  If none or unknown value (0) is specified, the data element is mapped to an ODA String data type by default.  The native type code value is implementation-specific to individual ODA driver, which must support its mapping to one or more ODA data types.  The supported native-ODA data type mapping must be defined in the ODA extension's plugin.xml ."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="nativeDataTypeCode"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="precision" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Int"

+        defaultValueLiteral="-1" unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Maximum number of decimal digits in a numeric value, or the length of a non-numeric value.  A value of -1 indicates this attribute is not applicable."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="precision"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="scale" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Int"

+        defaultValueLiteral="-1" unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Maximum number of digits to the right of the decimal point.  A value of -1 indicates this attribute is not applicable."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="scale"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="nullability" eType="#//ElementNullability"

+        defaultValueLiteral="Unknown" unsettable="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="nullability"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="uiHints" eType="#//DataElementUIHints"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="uiHints"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="DataElementIdentifier">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Identifies a data element by name and/or position."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="DataElementIdentifier"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="A name that uniquely identifies a data element.  If a data element can only be identified by position, this name may be empty."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="name"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="position" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//UnsignedShort"

+        unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The 1-based index position (left-to-right order) within a collection of data elements.  The position is defined per the underlying data source, and is not necessarily sequential.  For example, a query may access 3 columns in a result set, but the data access design may choose to expose only column 2.  In this case, only one column element with postion 2 is defined in the result set definition."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="position"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="DataElementIdentifiers">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A collection of data element identifiers."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="DataElementIdentifiers"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="identifiers" lowerBound="1"

+        upperBound="-1" eType="#//DataElementIdentifier" containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="identifiers"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="DataElementUIHints">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="UI hints for a data element."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="DataElementUIHints"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="displayName" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Business name of the data element.  Text can be localized with a resource key."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="displayName"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="More extensive description of the data element.  Text can be localized with a resource key."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="description"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="DataSetDesign">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A design-time data set definition."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="DataSetDesign"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The unique name that identifies an instance of dataSetDesign."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="name"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="odaExtensionDataSetId"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The dataSet element ID defined in an ODA extension plugin manifest.  It identifies the type of data set design supported by the ODA extension.  Optional if only one dataSet element is defined in the manifest."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="odaExtensionDataSetId"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="dataSourceDesign" eType="#//DataSourceDesign"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The instance of dataSourceDesign that supports this type of data set.  Could be null, if nested within another dataSetDesign, to share the container's dataSourceDesign."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="dataSourceDesign"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="query" lowerBound="1" eType="#//DataSetQuery"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="query"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="displayName" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Text can be localized with a resource key."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="displayName"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="publicProperties" eType="#//Properties"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Properties specific to the underlying data set query.  Public property values can be visible and editable in the host designer."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="publicProperties"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="privateProperties" eType="#//Properties"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Private properties specific to the underlying data set query.  Their definitions are private to the ODA designer, i.e. must not be visible nor editable by the host designer.  The &quot;private&quot; nature only applies to the design-time behavior of an ODA host designer.  At run-time, both public and private properties are combined and passed to the ODA runtime driver as a single set of runtime properties."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="privateProperties"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="resultSets" eType="#//ResultSets"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="resultSets"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="primaryResultSetName" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Identifies the primary result set if more than one result sets are available, and can be identified by name.  If results sets are identified by sequence, the first result set is the primary one."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="primaryResultSetName"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="parameters" eType="#//DataSetParameters"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="parameters"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="DataSetParameters">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A collection of top-level parameters defined for a data set.  If the metadata can be derived, i.e. can be obtained by an ODA driver in each design session, an ODA host designer is not required to include the derived metadata in the next design session request.  An ODA designer may ignore such metadata in a Request."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="DataSetParameters"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="parameterDefinitions" lowerBound="1"

+        upperBound="-1" eType="#//ParameterDefinition" containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="parameterDefinitions"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="derivedMetaData" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"

+        defaultValueLiteral="true" unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="If the metadata can be derived, i.e. can be obtained by an ODA driver in each design session, an ODA host designer is not required to include the derived metadata in the next design session request.  An ODA designer may ignore such metadata in a Request."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="derivedMetaData"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="DataSetQuery">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Defines the query of a data set.  Includes the query text, and any additional query spec.  Future: may include a filterSpec for dynamicFiltering. "/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="DataSetQuery"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="queryText" lowerBound="1"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The query command text to execute at runtime to retrieve data for this data set.  Retrieved data could be for one or more result sets and/or output parameters, as defined in this data set design.  The query syntax is specific to a data source; could be an empty string."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="queryText"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="DataSourceDesign">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A design-time data source definition."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="DataSourceDesign"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The unique name that identifies an instance of dataSourceDesign."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="name"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="odaExtensionId" lowerBound="1"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The extension ID defined in an ODA extension plugin manifest.  It identifies the supporting ODA driver's extension plug-in that implements the ODA run-time extension point."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="odaExtensionId"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="effectiveOdaExtensionId"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The ID of the effective oda.datasource extension, which will be consumed by the ODA consumer framework at runtime.  This could be another extension that overrides this ODA extension at runtime."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="effectiveOdaExtensionId"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="odaExtensionDataSourceId"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The data source element ID defined in an ODA extension plugin manifest.  Optional, defaults to be same as the ODA extension id if only one dataSource element is defined in the manifest."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="odaExtensionDataSourceId"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="displayName" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Text can be localized with a resource key."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="displayName"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="publicProperties" eType="#//Properties"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Properties specific to the underlying data source connection.  Public property values can be visible and editable in the host designer."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="publicProperties"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="privateProperties" eType="#//Properties"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Private properties specific to the underlying data source connection.  Their definitions are private to the ODA designer, i.e. must not be visible nor editable by the host designer."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="privateProperties"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="linkedProfileName" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The name of a linked connection profile."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="linkedProfileName"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="linkedProfileStoreFilePath"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The full path name of a linked connection profiles storage file where the linked profile is to be located at run-time.  A null value indicates to use the default DTP profiles storage file."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="linkedProfileStoreFilePath"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="hostResourceIdentifiers"

+        eType="#//ResourceIdentifiers" containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The resource identifiers of the ODA host application that initiates the ODA design session request.  An ODA host application may optionally specify its resource identifiers for reference by an ODA designer.   Its support and usage by a custom ODA designer is optional and implementation-dependent."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="hostResourceIdentifiers"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="resourceFile" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The base name of a resource file for all localizable design attributes. The file name must end with .properties, and must locate relative to one of the host resource identifiers."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="resourceFile"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="DesignerState">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Private state of an ODA designer upon exit of a design session."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="DesignerState"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="version" lowerBound="1"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Version of the designer state's data format."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="version"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="stateContent" lowerBound="1"

+        eType="#//DesignerStateContent" containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Designer's private state information; its content is a blackbox to an ODA host."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="stateContent"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="DesignerStateContent">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="An ODA Designer's private state information; its content is a blackbox to an ODA host."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="DesignerStateContent"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="stateContentAsString" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="State content in string format."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="stateContentAsString"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="stateContentAsBlob" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Base64Binary">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="State content in binary format."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="stateContentAsBlob"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="DesignSessionRequest">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Defines a design session requested by an ODA host designer."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="DesignSessionRequest"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="dataAccessDesign" lowerBound="1"

+        eType="#//DataAccessDesign" containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="dataAccessDesign"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="editable" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"

+        defaultValueLiteral="true" unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Specifies whether the design session is requested to be in an &quot;editable&quot; or &quot;read-only&quot; mode.  For a read-only design session, the ODA host designer would ignore any changes found in the session response.  It is up to individual ODA designer to honor the requested mode and adjusts its UI behavior."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="editable"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="sessionLocale" eType="#//Locale"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The suggested locale of the requested design session; normally the client locale of a locale-sensitive host designer.  It is up to an ODA designer whether it can support and honor the suggested locale."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="sessionLocale"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="designerState" eType="#//DesignerState"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The private state of the ODA designer at the last design session.  It can be used by an ODA designer to resume the state of its last session."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="designerState"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="DesignSessionResponse">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Defines a design session response to an ODA host designer upon exit of the session."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="DesignSessionResponse"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sessionStatus" eType="#//SessionStatus"

+        defaultValueLiteral="Ok" unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="ODA design session exit status.  This tells the ODA host designer whether the design session was successful, and how it may consume and save the session response information."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="sessionStatus"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="dataAccessDesign" lowerBound="1"

+        eType="#//DataAccessDesign" containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The latest data access design as updated during the design session.  Any updates should be made in own instance, separate from the instance provided in the design session request."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="dataAccessDesign"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="designerState" eType="#//DesignerState"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The private state of the ODA designer upon exit of a design session.  An ODA host designer must handle it as a black-box; it should simply provide persistence services and pass it back in the next session request."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="designerState"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="DocumentRoot">

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value=""/>

+      <details key="kind" value="mixed"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="mixed" unique="false" upperBound="-1"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="elementWildcard"/>

+        <details key="name" value=":mixed"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="xMLNSPrefixMap" upperBound="-1"

+        eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EStringToStringMapEntry"

+        transient="true" containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="xmlns:prefix"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="xSISchemaLocation" upperBound="-1"

+        eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EStringToStringMapEntry"

+        transient="true" containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="xsi:schemaLocation"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="odaDesignSession" upperBound="-2"

+        eType="#//OdaDesignSession" volatile="true" transient="true" derived="true"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Definition of an ODA design session on a Data Access Design."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="odaDesignSession"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="DynamicFilterExpression" eSuperTypes="#//FilterExpression">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A built-in filter expression designed with a pre-defined variable.  Its specific type of expression(s) to apply and corresponding argument value(s) to collect will be dynamically specified at runtime."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="DynamicFilterExpression"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="context" lowerBound="1"

+        eType="#//AtomicExpressionContext" containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="context"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="defaultType" eType="#//FilterExpressionType"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The default type of filter expression to apply at runtime."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="defaultType"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="DynamicValuesQuery">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A dynamic set of selectable input values to be retrieved at runtime using the query defined in a data set design."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="DynamicValuesQuery"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="dataSetDesign" lowerBound="1"

+        eType="#//DataSetDesign" containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="A nested instance of dataSetDesign to use for retrieving the set of selectable user values."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="dataSetDesign"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="enabled" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"

+        defaultValueLiteral="true" unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="If not enabled, use staticValueChoices if defined."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="enabled"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="valueColumnIdentifier"

+        lowerBound="1" eType="#//DataElementIdentifier" containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Uniquely identifies the result set column whose values are retrieved as the value choices.  It must be one of the columns defined in the data set design's primary result set."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="valueColumnIdentifier"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="valueColumn" lowerBound="1"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Deprecated as of 3.3.2; replaced by &quot;valueColumnIdentifier&quot;.  The result set column name whose values are retrieved as the value choices.  This attribute must be one of the column names defined in the data set design's primary result set."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="valueColumn"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="displayNameColumn" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The result set column name whose values are the localized name that describes the corresponding value in the valueColumn on each data row."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="displayNameColumn"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EEnum" name="ElementNullability">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Indicates whether a data element's value can be null."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ElementNullability"/>

+    </eAnnotations>

+    <eLiterals name="Unknown"/>

+    <eLiterals name="Nullable" value="1"/>

+    <eLiterals name="NotNullable" value="2"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EDataType" name="ElementNullabilityObject" instanceClassName="org.eclipse.emf.common.util.Enumerator">

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ElementNullability:Object"/>

+      <details key="baseType" value="ElementNullability"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ExpressionArguments">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Definition of a filter expression's argument(s)."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ExpressionArguments"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="expressionParameters" lowerBound="1"

+        eType="#//ExpressionParameters" containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="A collection of parameters used for collecting an expression's argument values.  An expression argument may define one corresponding expression parameter that takes multiple input values sharing the same parameter attributes.  Or it may define multiple expression parameters, with each taking a single input value and has own set of parameter attributes.  Each expression parameter may define either static value(s), or an input parameter to dynamically collect user input value(s)."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="expressionParameters"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ExpressionParameterDefinition">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="The definition of a parameter for the value of an expression's argument.  An expression argument parameter design may specify either static argument value(s), or a data set input parameter.  Static values are pre-defined values of an expression argument, and are not exposed as a data set parameter.  Alternatively, a data set input parameter may be defined to dynamically collect user input value(s).  A data set input parameter definiiton here may be a nested new instance, or may reference one of the existing DataSetParameters.  The dynamic input parameter, if specified, overrides any static values defined."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ExpressionParameterDefinition"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="staticValues" eType="#//StaticValues"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="staticValues"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="dynamicInputParameter"

+        eType="#//ParameterDefinition" containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="dynamicInputParameter"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ExpressionParameters">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A collection of parameters used for collecting a filter expression's argument values."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ExpressionParameters"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="parameterDefinitions" lowerBound="1"

+        upperBound="-1" eType="#//ExpressionParameterDefinition" containment="true"

+        resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="parameterDefinitions"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ExpressionVariable">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Definition of a filter expression's variable."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ExpressionVariable"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" eType="#//ExpressionVariableType"

+        defaultValueLiteral="ResultSetColumn" unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The type of variable."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="type"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="identifier" lowerBound="1"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="A name or expression that identifies the variable used to evaluate an expression."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="identifier"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="nativeDataTypeCode" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Int"

+        unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Native data type code of the identified variable.  If none or unknown value (0) is specified, the data element is mapped to an ODA String data type by default.  The native type code value is implementation-specific to individual ODA driver, which must support its mapping to one or more ODA data types.  The supported native-ODA data type mapping must be defined in the ODA dataSource extension."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="nativeDataTypeCode"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EEnum" name="ExpressionVariableType">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="The type of a filter expression variable."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ExpressionVariableType"/>

+    </eAnnotations>

+    <eLiterals name="ResultSetColumn"/>

+    <eLiterals name="InstanceOf" value="1"/>

+    <eLiterals name="QueryExpression" value="2"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EDataType" name="ExpressionVariableTypeObject" instanceClassName="org.eclipse.emf.common.util.Enumerator">

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ExpressionVariableType:Object"/>

+      <details key="baseType" value="ExpressionVariableType"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="FilterExpression" abstract="true">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Abstract base class for all filter expressions defined by an ODA designer."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="FilterExpression"/>

+      <details key="kind" value="empty"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="negatable" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"

+        defaultValueLiteral="false" unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Indicates whether the expression can be negated, i.e. applied with a NotExpression.  Default is false."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="negatable"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="FilterExpressionType">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Identifies a type of custom filter expression contributed by an extension of the org.eclipse.datatools.connectivity.oda.dynamicResultSet extension point."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="FilterExpressionType"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="declaringExtensionId" lowerBound="1"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The id of the ODA dynamicResultSet extension that declares this type of filter expression."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="declaringExtensionId"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The id that uniquely identifies  a custom expression type within an ODA dynamicResultSet extension."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="id"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EEnum" name="HorizontalAlignment">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Horizontal display alignment of the data value."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="HorizontalAlignment"/>

+    </eAnnotations>

+    <eLiterals name="Automatic"/>

+    <eLiterals name="Left" value="1"/>

+    <eLiterals name="Center" value="2"/>

+    <eLiterals name="Right" value="3"/>

+    <eLiterals name="LeftAndRight" value="4" literal="Left and Right"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EDataType" name="HorizontalAlignmentObject" instanceClassName="org.eclipse.emf.common.util.Enumerator">

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="HorizontalAlignment:Object"/>

+      <details key="baseType" value="HorizontalAlignment"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="InputElementAttributes">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Common attributes for a data element defined with the input mode."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="InputElementAttributes"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultScalarValue" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The literal string value to be used as the data element's default input value. Only applies to a scalar input data element."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="defaultScalarValue"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="defaultValues" eType="#//StaticValues"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="An optional collection of default input values.  If defined, this element overrides the deprecated defaultScalarValue element."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="defaultValues"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="editable" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"

+        defaultValueLiteral="true" unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Indicates whether this element value is editable or read-only in the host designer.  A host designer can further design whether to hide this attribute.  Applicable only if its container is visible, e.g. for public properties and input parameters."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="editable"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="optional" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"

+        defaultValueLiteral="false" unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Indicates whether the element requires an input value."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="optional"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="masksValue" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"

+        defaultValueLiteral="false" unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Indicates whether input value should be masked or encrypted in persistent store and any UI display.  Applies to default value as well."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="masksValue"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="staticValueChoices" eType="#//ScalarValueChoices"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="staticValueChoices"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="dynamicValueChoices" eType="#//DynamicValuesQuery"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="dynamicValueChoices"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="uiHints" eType="#//InputElementUIHints"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="uiHints"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="InputElementUIHints">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="UI hints for a data element defined with the input mode."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="InputElementUIHints"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="promptStyle" eType="#//InputPromptControlStyle"

+        unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Defaults to TextField if no static and dynamic value choices are defined; otherwise, defaults to SelectableList."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="promptStyle"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="autoSuggestThreshold" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Int"

+        defaultValueLiteral="1" unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The number of characters after which auto suggest will kick in.  It is applicable only where an user can input a value, e.g. when a SelectableListWithTextField promptStyle and a DynamicValuesQuery is used.&#xD;&#xA;"/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="autoSuggestThreshold"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="InputParameterAttributes">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="The attributes of a top-level input parameter, which can be either scalar or complex type."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="InputParameterAttributes"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="elementAttributes" lowerBound="1"

+        eType="#//InputElementAttributes" containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="elementAttributes"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="uiHints" eType="#//InputParameterUIHints"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="uiHints"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="InputParameterUIHints">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="UI hints for a top-level parameter."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="InputParameterUIHints"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="groupPromptDisplayName"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="For grouping multiple top-level input parameters under the same UI group prompt.  Text can be localized with a resource key."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="groupPromptDisplayName"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EEnum" name="InputPromptControlStyle">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="The style of UI control for prompting user to input a value."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="InputPromptControlStyle"/>

+    </eAnnotations>

+    <eLiterals name="TextField"/>

+    <eLiterals name="SelectableList" value="1"/>

+    <eLiterals name="SelectableListWithTextField" value="2"/>

+    <eLiterals name="CheckBox" value="3"/>

+    <eLiterals name="RadioButton" value="4"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EDataType" name="InputPromptControlStyleObject" instanceClassName="org.eclipse.emf.common.util.Enumerator">

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="InputPromptControlStyle:Object"/>

+      <details key="baseType" value="InputPromptControlStyle"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Locale">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Represents a specific geographical, political, or cultural region."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Locale"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="language" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        defaultValueLiteral="en" unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="An ISO Language Code; lower-case, two-letter codes as defined by ISO-639."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="language"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="country" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="An ISO Country Code; upper-case, two-letter codes as defined by ISO-3166."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="country"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="variant" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="A vendor or browser-specific code."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="variant"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="NameValuePair">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A pair of name and corresponding value."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="NameValuePair"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="name"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="value"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="NotExpression" eSuperTypes="#//FilterExpression">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A built-in negated filter expression."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="NotExpression"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="negatingExpression" lowerBound="1"

+        eType="#//FilterExpression" containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="negatingExpression"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EEnum" name="NullOrderingType">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="The type of null value ordering defined in a sort key."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="NullOrderingType"/>

+    </eAnnotations>

+    <eLiterals name="Unknown"/>

+    <eLiterals name="NullsFirst" value="1"/>

+    <eLiterals name="NullsLast" value="2"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EDataType" name="NullOrderingTypeObject" instanceClassName="org.eclipse.emf.common.util.Enumerator">

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="NullOrderingType:Object"/>

+      <details key="baseType" value="NullOrderingType"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EEnum" name="OdaComplexDataType">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="ODA complex data types."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="OdaComplexDataType"/>

+    </eAnnotations>

+    <eLiterals name="Structure"/>

+    <eLiterals name="Table" value="1"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EDataType" name="OdaComplexDataTypeObject" instanceClassName="org.eclipse.emf.common.util.Enumerator">

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="OdaComplexDataType:Object"/>

+      <details key="baseType" value="OdaComplexDataType"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="OdaDesignSession">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Definition of an ODA design session on a Data Access Design."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="OdaDesignSession"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="request" lowerBound="1"

+        eType="#//DesignSessionRequest" containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="request"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="response" eType="#//DesignSessionResponse"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="response"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EEnum" name="OdaScalarDataType">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="ODA scalar data types."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="OdaScalarDataType"/>

+    </eAnnotations>

+    <eLiterals name="Date"/>

+    <eLiterals name="Double" value="1"/>

+    <eLiterals name="Integer" value="2"/>

+    <eLiterals name="String" value="3"/>

+    <eLiterals name="Time" value="4"/>

+    <eLiterals name="Timestamp" value="5"/>

+    <eLiterals name="Decimal" value="6"/>

+    <eLiterals name="Blob" value="7"/>

+    <eLiterals name="Clob" value="8"/>

+    <eLiterals name="Boolean" value="9"/>

+    <eLiterals name="JavaObject" value="10"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EDataType" name="OdaScalarDataTypeObject" instanceClassName="org.eclipse.emf.common.util.Enumerator">

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="OdaScalarDataType:Object"/>

+      <details key="baseType" value="OdaScalarDataType"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="OrExpression" eSuperTypes="#//CompositeFilterExpression">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A built-in composite filter expression whose child expressions are combined by the Or boolean operator.  The composite expression is evaluated to be true if any of its child expressions is evaluated as true.  "/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="OrExpression"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="OutputElementAttributes">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Common attributes for a data element defined with the output mode."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="OutputElementAttributes"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="label" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="A free-format string used to identify the data element in a heading, such as a column header.  Text can be localized with a resource key."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="label"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="formattingHints" eType="#//ValueFormatHints"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="formattingHints"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="helpText" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Provides additional information to the user about this data element, such as in a balloon help.  Text can be localized with a resource key."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="helpText"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ParameterDefinition">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Top-level parameter definition; may be input and/or output mode.  Parameter may be of scalar or complex type."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ParameterDefinition"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="inOutMode" eType="#//ParameterMode"

+        defaultValueLiteral="In" unsettable="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="inOutMode"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="attributes" lowerBound="1"

+        eType="#//DataElementAttributes" containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Attributes applicable to both input and output parameter mode."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="attributes"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="inputAttributes" eType="#//InputParameterAttributes"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Required for input parameter."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="inputAttributes"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="outputUsageHints" eType="#//OutputElementAttributes"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Optional for an output parameter."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="outputUsageHints"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="fields" eType="#//ParameterFields"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Applicable to complex parameter only."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="fields"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ParameterFieldDefinition">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="The definition of each field in a complex parameter.  A parameter field is of scalar type."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ParameterFieldDefinition"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="attributes" lowerBound="1"

+        eType="#//DataElementAttributes" containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Attributes applicable to both input and output parameter mode."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="attributes"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="inputAttributes" eType="#//InputElementAttributes"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Required for the field of an input parameter."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="inputAttributes"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="outputUsageHints" eType="#//OutputElementAttributes"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Optional for the field of an output parameter."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="outputUsageHints"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ParameterFields">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Defines all the fields of a complex parameter."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ParameterFields"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="fieldCollection" lowerBound="1"

+        upperBound="-1" eType="#//ParameterFieldDefinition" containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="fieldCollection"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EEnum" name="ParameterMode">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Indicates whether a parameter is of input and/or output mode."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ParameterMode"/>

+    </eAnnotations>

+    <eLiterals name="In"/>

+    <eLiterals name="Out" value="1"/>

+    <eLiterals name="InOut" value="2"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EDataType" name="ParameterModeObject" instanceClassName="org.eclipse.emf.common.util.Enumerator">

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ParameterMode:Object"/>

+      <details key="baseType" value="ParameterMode"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Properties">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A collection of properties."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Properties"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="properties" lowerBound="1"

+        upperBound="-1" eType="#//Property" containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="properties"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Property">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="The property of a data design component."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Property"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="nameValue" lowerBound="1"

+        eType="#//NameValuePair" containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Property name and corresponding value if available.  The property value must be a string.  The value may be selected from one of the value choices defined for a property."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="nameValue"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="designAttributes" eType="#//PropertyAttributes"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Property attributes defined for this *instance* of DataAccessDesign.  This set of attributes overrides all those pre-defined by an ODA extension in its plugin.xml.  An ODA host designer should apply those pre-defined attributes by default to this instance, only if none is specified here."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="designAttributes"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="PropertyAttributes">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="The attributes of a property."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="PropertyAttributes"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="displayName" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Text can be localized with a resource key."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="displayName"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="elementAttributes" eType="#//InputElementAttributes"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="elementAttributes"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="derivedMetaData" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"

+        defaultValueLiteral="true" unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="If the property metadata can be derived, i.e. can be obtained by an ODA driver in each design session, an ODA host designer is not required to include the derived metadata in the next design session request.  An ODA designer may ignore such metadata in a Request."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="derivedMetaData"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ResourceIdentifiers">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Resource identifiers of an ODA host application or custom ODA designer."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ResourceIdentifiers"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="applResourceBaseURIString"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The base URI of general purpose resources of an ODA consumer application in string form."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="applResourceBaseURIString"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="designResourceBaseURIString"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The base URI of design resources of an ODA consumer application in string form."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="designResourceBaseURIString"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ResultSetColumns">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A collection of result set columns' definitions."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ResultSetColumns"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="resultColumnDefinitions"

+        lowerBound="1" upperBound="-1" eType="#//ColumnDefinition" containment="true"

+        resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="resultColumnDefinitions"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ResultSetCriteria">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Specification of a result set criteria or characteristics.&#xD;&#xA;Applying the criteria may impact the data retrieved in a result set, in addition to any specification expressed in a query text."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ResultSetCriteria"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="filterSpecification" eType="#//FilterExpression"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Pre-defined filter specification  of a result set. It may be any concrete type of FilterExpression."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="filterSpecification"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="rowOrdering" eType="#//SortSpecification"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Specifies the ordering of rows in a result set.  An empty collection explicitly indicates that the result set has no sort keys defined.  Absence of this optional element, on the other hand, indicates that its row ordering specification is unknown or not available. "/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="rowOrdering"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ResultSetDefinition">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Definition of a single homogeneous result set returned by a data set query."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ResultSetDefinition"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="A name that uniquely identifies a result set at runtime.  If not specified, a result set is identified by its sequence in the resultSetDefinitions."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="name"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="resultSetColumns" lowerBound="1"

+        eType="#//ResultSetColumns" containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Collection of data columns for this result set."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="resultSetColumns"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="criteria" eType="#//ResultSetCriteria"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="criteria"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ResultSets">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A collection of result sets' definition and metadata. If the metadata can be derived, i.e. can be obtained by an ODA driver in each design session, an ODA host designer is not required to include the derived metadata in the next design session request.  An ODA designer may ignore such metadata in a Request."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ResultSets"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="resultSetDefinitions" lowerBound="1"

+        upperBound="-1" eType="#//ResultSetDefinition" containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="resultSetDefinitions"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="derivedMetaData" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"

+        defaultValueLiteral="true" unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="If the metadata can be derived, i.e. can be obtained by an ODA driver in each design session, an ODA host designer is not required to include the derived metadata in the next design session request.  An ODA designer may ignore such metadata in a Request."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="derivedMetaData"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ResultSubset">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Defines a subset of columns in a data set design's result set."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ResultSubset"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="dataSetDesign" eType="#//DataSetDesign"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="A nested instance of dataSetDesign to use for retrieving the referenced data set column.  If not specified, the same data set design that contains this design element would apply by default."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="dataSetDesign"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="resultSetName" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Identifies the result set of the data set design if more than one result sets are available, and can be identified by name.  If no results set is explicitly specified here, the primary result set would apply by default."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="resultSetName"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="columnIdentifiers" lowerBound="1"

+        eType="#//DataElementIdentifiers" containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Uniquely identifies one or more columns in the specified result set.  Multiple columns are combined in the specified sequence, such as for a compounded attribute."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="columnIdentifiers"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ScalarValueChoices">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A collection of scalar values defined for user selection."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ScalarValueChoices"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="scalarValues" lowerBound="1"

+        upperBound="-1" eType="#//ScalarValueDefinition" containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="scalarValues"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ScalarValueDefinition">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Defines a scalar value with a brief description."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ScalarValueDefinition"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="value"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="displayName" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="A localized name that describes the value.  Text can be localized with a resource key."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="displayName"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EEnum" name="SessionStatus">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Indicates to ODA host designer on how to proceed after an ODA design session exits."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="SessionStatus"/>

+    </eAnnotations>

+    <eLiterals name="Ok"/>

+    <eLiterals name="UserCancelled" value="1"/>

+    <eLiterals name="LoginFailed" value="2"/>

+    <eLiterals name="Error" value="3"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EDataType" name="SessionStatusObject" instanceClassName="org.eclipse.emf.common.util.Enumerator">

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="SessionStatus:Object"/>

+      <details key="baseType" value="SessionStatus"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EEnum" name="SortDirectionType">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="The type of sort direction defined in a sort key."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="SortDirectionType"/>

+    </eAnnotations>

+    <eLiterals name="Ascending"/>

+    <eLiterals name="Descending" value="1"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EDataType" name="SortDirectionTypeObject" instanceClassName="org.eclipse.emf.common.util.Enumerator">

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="SortDirectionType:Object"/>

+      <details key="baseType" value="SortDirectionType"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="SortKey">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A dynamic sort key specified in a SortCriteria."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="SortKey"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="columnIdentifier" lowerBound="1"

+        eType="#//DataElementIdentifier" containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Uniquely identifies a result set column by name and/or position.  It must reference one of the columns associated with the same ResultSetDefinition."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="columnIdentifier"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="columnName" lowerBound="1"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Deprecated as of 3.3.2; replaced by &quot;columnIdentifier&quot;.  The unique name of a result set column. It must reference one of the columns associated with the same ResultSetDefinition.  If a column can only be identified by position, this name may be empty."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="columnName"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="columnPosition" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//UnsignedShort"

+        unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Deprecated as of 3.3.2; replaced by &quot;columnIdentifier&quot;.  The 1-based index position (left-to-right order) of a result set column. "/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="columnPosition"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sortDirection" eType="#//SortDirectionType"

+        defaultValueLiteral="Ascending" unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The sort direction of this result set column."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="sortDirection"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="nullValueOrdering" eType="#//NullOrderingType"

+        unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The ordering of null vs. non-null values in the sort order.  Default value is &quot;Unknown&quot;, i.e. not specified."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="nullValueOrdering"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="optional" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"

+        defaultValueLiteral="false" unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Indicates whether this sort key can be excluded at runtime.  Default value is false."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="optional"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="SortSpecification">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Specification of zero or more sort keys.  An empty collection explicitly indicates that the result set has no sort keys defined."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="SortSpecification"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="sortKeys" upperBound="-1"

+        eType="#//SortKey" containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="sortKeys"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="StaticValues">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A collection of static values in any data type.  It may be in any one of the ODA defined data types, or a CustomData."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="StaticValues"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="values" unique="false"

+        lowerBound="1" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//AnySimpleType">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="values"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EEnum" name="TextFormatType">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="The type of text content of the data column values, i.e. plain text, HTML or RTF.  It provides a hint on the type of text control to use for displaying the data value, e.g. a Text Control vs. Dynamic Text Control."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="TextFormatType"/>

+    </eAnnotations>

+    <eLiterals name="Plain"/>

+    <eLiterals name="HTML" value="1"/>

+    <eLiterals name="RTF" value="2"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EDataType" name="TextFormatTypeObject" instanceClassName="org.eclipse.emf.common.util.Enumerator">

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="TextFormatType:Object"/>

+      <details key="baseType" value="TextFormatType"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EEnum" name="TextWrapType">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A hint on the type of text wrapping on the data column values.  It could be in a single line (None), or word-wrapped (Word)."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="TextWrapType"/>

+    </eAnnotations>

+    <eLiterals name="None"/>

+    <eLiterals name="Word" value="1"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EDataType" name="TextWrapTypeObject" instanceClassName="org.eclipse.emf.common.util.Enumerator">

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="TextWrapType:Object"/>

+      <details key="baseType" value="TextWrapType"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ValueFormatHints">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Hints on how to format a value."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ValueFormatHints"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="displaySize" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Int"

+        defaultValueLiteral="-1" unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Default display length of the data value.  A value of -1 means unknown length.  The default value, if not specified, is -1."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="displaySize"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="displayFormat" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The preferred display format of the data value.  It contains a data format mask, e.g. #,###.00, ShortDate, etc."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="displayFormat"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="textFormatType" eType="#//TextFormatType"

+        defaultValueLiteral="Plain" unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The type of text content of the data value, i.e. plain text, HTML or RTF.  It provides a hint on the type of text control to use for displaying the data value, e.g. a Dynamic Text Control."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="textFormatType"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="horizontalAlignment" eType="#//HorizontalAlignment"

+        defaultValueLiteral="Automatic" unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Horizontal display alignment of the data value.  See valid enum values.  &quot;Automatic&quot; means that it is up to an ODA host designer to determine the alignment based on its default rules."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="horizontalAlignment"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="textWrapType" eType="#//TextWrapType"

+        defaultValueLiteral="None" unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="A hint on the type of text wrapping on the data value.  It could be in a single line (None), or word-wrapped (Word)."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="textWrapType"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+</ecore:EPackage>

diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/plugin.properties b/plugins/org.eclipse.datatools.connectivity.oda.design/plugin.properties
new file mode 100644
index 0000000..ff60710
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/plugin.properties
@@ -0,0 +1,30 @@
+# ====================================================================
+# * Copyright (c) 2005, 2008 Actuate Corporation.
+# * All rights reserved. This program and the accompanying materials
+# * are made available under the terms of the Eclipse Public License v1.0
+# * which accompanies this distribution, and is available at
+# * http://www.eclipse.org/legal/epl-v10.html
+# *
+# * Contributors:
+# *  Actuate Corporation - initial API and implementation
+# *  
+# *************************************************************************
+# *
+# * $Id: plugin.properties,v 1.4 2008/07/23 04:12:28 lchan Exp $
+# ====================================================================
+#
+# ====================================================================
+# To code developer:
+#   Do NOT change the properties between this line and the
+#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
+#   Make a new property name, append to the end of the file and change
+#   the code to use the new property.
+# ====================================================================
+#
+# ====================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# ====================================================================
+#
+pluginName=DTP ODA Design Session Model
+providerName = Eclipse Data Tools Platform
+
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/plugin.xml b/plugins/org.eclipse.datatools.connectivity.oda.design/plugin.xml
new file mode 100644
index 0000000..edba0b1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/plugin.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<!--
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: plugin.xml,v 1.8 2006/03/09 05:09:18 lchan Exp $
+ */
+-->
+
+<plugin>
+
+  <extension point="org.eclipse.emf.ecore.generated_package">
+    <package 
+       uri = "http://www.eclipse.org/datatools/connectivity/oda/design" 
+       class = "org.eclipse.datatools.connectivity.oda.design.DesignPackage" />
+  </extension>
+
+  <extension point="org.eclipse.emf.ecore.extension_parser">
+    <parser 
+       type="design" 
+       class="org.eclipse.datatools.connectivity.oda.design.util.DesignResourceFactoryImpl" />
+  </extension>
+
+</plugin>
+
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/.gitignore b/plugins/org.eclipse.datatools.connectivity.oda.design/src/.gitignore
new file mode 100644
index 0000000..b1e21f8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/.gitignore
@@ -0,0 +1,2 @@
+model
+templates
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/.gitignore b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/.gitignore
new file mode 100644
index 0000000..93bafad
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/.gitignore
@@ -0,0 +1 @@
+vss*.scc
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/AndExpression.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/AndExpression.java
new file mode 100644
index 0000000..afa69a8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/AndExpression.java
@@ -0,0 +1,42 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: AndExpression.java,v 1.1 2009/01/30 00:23:57 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>And Expression</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * A built-in composite filter expression whose child expressions are combined by the And boolean operator.  The composite expression is evaluated to be true only if all its child expressions are evaluated as true.  
+ * <!-- end-model-doc -->
+ *
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getAndExpression()
+ * @since 3.3 (DTP 1.8)
+ * @model extendedMetaData="name='AndExpression' kind='elementOnly'"
+ * @generated
+ */
+public interface AndExpression extends CompositeFilterExpression
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+} // AndExpression
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/AtomicExpressionContext.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/AtomicExpressionContext.java
new file mode 100644
index 0000000..bceb245
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/AtomicExpressionContext.java
@@ -0,0 +1,159 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: AtomicExpressionContext.java,v 1.3 2009/04/14 02:13:18 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Atomic Expression Context</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * The context within a basic, indivisible unit of expression that can be evaluated by itself.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.AtomicExpressionContext#isOptional <em>Optional</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.AtomicExpressionContext#getVariable <em>Variable</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.AtomicExpressionContext#getArguments <em>Arguments</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getAtomicExpressionContext()
+ * @since 3.2 (DTP 1.7)
+ * @model extendedMetaData="name='AtomicExpressionContext' kind='elementOnly'"
+ * @generated
+ */
+public interface AtomicExpressionContext extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Optional</b></em>' attribute.
+     * The default value is <code>"false"</code>.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Indicates whether this atomic expression can be excluded at runtime.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Optional</em>' attribute.
+     * @see #isSetOptional()
+     * @see #unsetOptional()
+     * @see #setOptional(boolean)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getAtomicExpressionContext_Optional()
+     * @model default="false" unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Boolean"
+     *        extendedMetaData="kind='element' name='optional' namespace='##targetNamespace'"
+     * @generated
+     */
+    boolean isOptional();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.AtomicExpressionContext#isOptional <em>Optional</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Optional</em>' attribute.
+     * @see #isSetOptional()
+     * @see #unsetOptional()
+     * @see #isOptional()
+     * @generated
+     */
+    void setOptional( boolean value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.AtomicExpressionContext#isOptional <em>Optional</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetOptional()
+     * @see #isOptional()
+     * @see #setOptional(boolean)
+     * @generated
+     */
+    void unsetOptional();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.AtomicExpressionContext#isOptional <em>Optional</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Optional</em>' attribute is set.
+     * @see #unsetOptional()
+     * @see #isOptional()
+     * @see #setOptional(boolean)
+     * @generated
+     */
+    boolean isSetOptional();
+
+    /**
+     * Returns the value of the '<em><b>Variable</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Variable</em>' containment reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Variable</em>' containment reference.
+     * @see #setVariable(ExpressionVariable)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getAtomicExpressionContext_Variable()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='variable' namespace='##targetNamespace'"
+     * @generated
+     */
+    ExpressionVariable getVariable();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.AtomicExpressionContext#getVariable <em>Variable</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Variable</em>' containment reference.
+     * @see #getVariable()
+     * @generated
+     */
+    void setVariable( ExpressionVariable value );
+
+    /**
+     * Returns the value of the '<em><b>Arguments</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Defines the expression's argument(s) and each of its associated value(s).
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Arguments</em>' containment reference.
+     * @see #setArguments(ExpressionArguments)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getAtomicExpressionContext_Arguments()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='arguments' namespace='##targetNamespace'"
+     * @generated
+     */
+    ExpressionArguments getArguments();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.AtomicExpressionContext#getArguments <em>Arguments</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Arguments</em>' containment reference.
+     * @see #getArguments()
+     * @generated
+     */
+    void setArguments( ExpressionArguments value );
+
+} // AtomicExpressionContext
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/AxisAttributes.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/AxisAttributes.java
new file mode 100644
index 0000000..98ee2cb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/AxisAttributes.java
@@ -0,0 +1,189 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: AxisAttributes.java,v 1.3 2009/07/23 21:43:17 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Multi-dimensional attributes of a data element, such as a result set column.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.AxisAttributes#getAxisType <em>Axis Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.AxisAttributes#isOnColumnLayout <em>On Column Layout</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.AxisAttributes#getRelatedColumns <em>Related Columns</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getAxisAttributes()
+ * @model extendedMetaData="name='AxisAttributes' kind='elementOnly'"
+ * @generated
+ */
+public interface AxisAttributes extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Axis Type</b></em>' attribute.
+     * The default value is <code>"Measure"</code>.
+     * The literals are from the enumeration {@link org.eclipse.datatools.connectivity.oda.design.AxisType}.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The axis type of the data element.  It provides design hints to a consumer application on how the column data should be analyzed, or applied in a multi-dimensional view.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Axis Type</em>' attribute.
+     * @see org.eclipse.datatools.connectivity.oda.design.AxisType
+     * @see #isSetAxisType()
+     * @see #unsetAxisType()
+     * @see #setAxisType(AxisType)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getAxisAttributes_AxisType()
+     * @model default="Measure" unsettable="true"
+     *        extendedMetaData="kind='element' name='axisType' namespace='##targetNamespace'"
+     * @generated
+     */
+    AxisType getAxisType();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.AxisAttributes#getAxisType <em>Axis Type</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Axis Type</em>' attribute.
+     * @see org.eclipse.datatools.connectivity.oda.design.AxisType
+     * @see #isSetAxisType()
+     * @see #unsetAxisType()
+     * @see #getAxisType()
+     * @generated
+     */
+    void setAxisType( AxisType value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.AxisAttributes#getAxisType <em>Axis Type</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetAxisType()
+     * @see #getAxisType()
+     * @see #setAxisType(AxisType)
+     * @generated
+     */
+    void unsetAxisType();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.AxisAttributes#getAxisType <em>Axis Type</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Axis Type</em>' attribute is set.
+     * @see #unsetAxisType()
+     * @see #getAxisType()
+     * @see #setAxisType(AxisType)
+     * @generated
+     */
+    boolean isSetAxisType();
+
+    /**
+     * Returns the value of the '<em><b>On Column Layout</b></em>' attribute.
+     * The default value is <code>"true"</code>.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * A design hint on whether the dimension data element should be laid out on a column or row.  It is normally used by presentation element such as a crosstab to design a default layout.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>On Column Layout</em>' attribute.
+     * @see #isSetOnColumnLayout()
+     * @see #unsetOnColumnLayout()
+     * @see #setOnColumnLayout(boolean)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getAxisAttributes_OnColumnLayout()
+     * @model default="true" unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Boolean"
+     *        extendedMetaData="kind='element' name='onColumnLayout' namespace='##targetNamespace'"
+     * @generated
+     */
+    boolean isOnColumnLayout();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.AxisAttributes#isOnColumnLayout <em>On Column Layout</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>On Column Layout</em>' attribute.
+     * @see #isSetOnColumnLayout()
+     * @see #unsetOnColumnLayout()
+     * @see #isOnColumnLayout()
+     * @generated
+     */
+    void setOnColumnLayout( boolean value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.AxisAttributes#isOnColumnLayout <em>On Column Layout</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetOnColumnLayout()
+     * @see #isOnColumnLayout()
+     * @see #setOnColumnLayout(boolean)
+     * @generated
+     */
+    void unsetOnColumnLayout();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.AxisAttributes#isOnColumnLayout <em>On Column Layout</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>On Column Layout</em>' attribute is set.
+     * @see #unsetOnColumnLayout()
+     * @see #isOnColumnLayout()
+     * @see #setOnColumnLayout(boolean)
+     * @generated
+     */
+    boolean isSetOnColumnLayout();
+
+    /**
+     * Returns the value of the '<em><b>Related Columns</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The result set column(s) that are related to this data element.  For example, for a dimension member AxisType element, its related column(s) are those modeled to be its attribute. Multiple related columns may be combined to be a compounded attribute of a dimension.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Related Columns</em>' containment reference.
+     * @see #setRelatedColumns(ResultSubset)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getAxisAttributes_RelatedColumns()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='relatedColumns' namespace='##targetNamespace'"
+     * @generated
+     * @since 3.3.2
+     */
+    ResultSubset getRelatedColumns();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.AxisAttributes#getRelatedColumns <em>Related Columns</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Related Columns</em>' containment reference.
+     * @see #getRelatedColumns()
+     * @generated
+     * @since 3.3.2
+     */
+    void setRelatedColumns( ResultSubset value );
+
+} // AxisAttributes
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/AxisType.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/AxisType.java
new file mode 100644
index 0000000..e635137
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/AxisType.java
@@ -0,0 +1,255 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: AxisType.java,v 1.2 2007/04/11 02:59:53 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Axis Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * Axis type of a result set column.
+ * <!-- end-model-doc -->
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getAxisType()
+ * @model extendedMetaData="name='AxisType'"
+ * @generated
+ */
+public enum AxisType implements Enumerator {
+    /**
+     * The '<em><b>Dimension Member</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #DIMENSION_MEMBER
+     * @generated
+     * @ordered
+     */
+    DIMENSION_MEMBER_LITERAL(0, "DimensionMember", "DimensionMember"), //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * The '<em><b>Dimension Attribute</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #DIMENSION_ATTRIBUTE
+     * @generated
+     * @ordered
+     */
+    DIMENSION_ATTRIBUTE_LITERAL(1, "DimensionAttribute", "DimensionAttribute"), //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * The '<em><b>Measure</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #MEASURE
+     * @generated
+     * @ordered
+     */
+    MEASURE_LITERAL(2, "Measure", "Measure"); //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The '<em><b>Dimension Member</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #DIMENSION_MEMBER_LITERAL
+     * @model name="DimensionMember"
+     * @generated
+     * @ordered
+     */
+    public static final int DIMENSION_MEMBER = 0;
+
+    /**
+     * The '<em><b>Dimension Attribute</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #DIMENSION_ATTRIBUTE_LITERAL
+     * @model name="DimensionAttribute"
+     * @generated
+     * @ordered
+     */
+    public static final int DIMENSION_ATTRIBUTE = 1;
+
+    /**
+     * The '<em><b>Measure</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #MEASURE_LITERAL
+     * @model name="Measure"
+     * @generated
+     * @ordered
+     */
+    public static final int MEASURE = 2;
+
+    /**
+     * An array of all the '<em><b>Axis Type</b></em>' enumerators.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private static final AxisType[] VALUES_ARRAY = new AxisType[]
+    { DIMENSION_MEMBER_LITERAL, DIMENSION_ATTRIBUTE_LITERAL, MEASURE_LITERAL, };
+
+    /**
+     * A public read-only list of all the '<em><b>Axis Type</b></em>' enumerators.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final List<AxisType> VALUES = Collections
+            .unmodifiableList( Arrays.asList( VALUES_ARRAY ) );
+
+    /**
+     * Returns the '<em><b>Axis Type</b></em>' literal with the specified literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static AxisType get( String literal )
+    {
+        for( int i = 0; i < VALUES_ARRAY.length; ++i)
+        {
+            AxisType result = VALUES_ARRAY[i];
+            if( result.toString().equals( literal ) )
+            {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the '<em><b>Axis Type</b></em>' literal with the specified name.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static AxisType getByName( String name )
+    {
+        for( int i = 0; i < VALUES_ARRAY.length; ++i)
+        {
+            AxisType result = VALUES_ARRAY[i];
+            if( result.getName().equals( name ) )
+            {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the '<em><b>Axis Type</b></em>' literal with the specified integer value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static AxisType get( int value )
+    {
+        switch( value )
+        {
+        case DIMENSION_MEMBER:
+            return DIMENSION_MEMBER_LITERAL;
+        case DIMENSION_ATTRIBUTE:
+            return DIMENSION_ATTRIBUTE_LITERAL;
+        case MEASURE:
+            return MEASURE_LITERAL;
+        }
+        return null;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final int value;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final String name;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final String literal;
+
+    /**
+     * Only this class can construct instances.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private AxisType( int value, String name, String literal )
+    {
+        this.value = value;
+        this.name = name;
+        this.literal = literal;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public int getValue()
+    {
+        return value;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getName()
+    {
+        return name;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getLiteral()
+    {
+        return literal;
+    }
+
+    /**
+     * Returns the literal value of the enumerator, which is its string representation.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        return literal;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ColumnDefinition.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ColumnDefinition.java
new file mode 100644
index 0000000..4f13150
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ColumnDefinition.java
@@ -0,0 +1,122 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ColumnDefinition.java,v 1.1 2005/12/29 04:17:55 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Definition of a result set column.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ColumnDefinition#getAttributes <em>Attributes</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ColumnDefinition#getUsageHints <em>Usage Hints</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ColumnDefinition#getMultiDimensionAttributes <em>Multi Dimension Attributes</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getColumnDefinition()
+ * @model extendedMetaData="name='ColumnDefinition' kind='elementOnly'"
+ * @generated
+ */
+public interface ColumnDefinition extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2007 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Attributes</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Attributes</em>' containment reference.
+     * @see #setAttributes(DataElementAttributes)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getColumnDefinition_Attributes()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='attributes' namespace='##targetNamespace'"
+     * @generated
+     */
+    DataElementAttributes getAttributes();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ColumnDefinition#getAttributes <em>Attributes</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Attributes</em>' containment reference.
+     * @see #getAttributes()
+     * @generated
+     */
+    void setAttributes( DataElementAttributes value );
+
+    /**
+     * Returns the value of the '<em><b>Usage Hints</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Usage Hints</em>' containment reference.
+     * @see #setUsageHints(OutputElementAttributes)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getColumnDefinition_UsageHints()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='usageHints' namespace='##targetNamespace'"
+     * @generated
+     */
+    OutputElementAttributes getUsageHints();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ColumnDefinition#getUsageHints <em>Usage Hints</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Usage Hints</em>' containment reference.
+     * @see #getUsageHints()
+     * @generated
+     */
+    void setUsageHints( OutputElementAttributes value );
+
+    /**
+     * Returns the value of the '<em><b>Multi Dimension Attributes</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The attributes of a multi-dimensional data element.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Multi Dimension Attributes</em>' containment reference.
+     * @see #setMultiDimensionAttributes(AxisAttributes)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getColumnDefinition_MultiDimensionAttributes()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='multiDimensionAttributes' namespace='##targetNamespace'"
+     * @generated
+     */
+    AxisAttributes getMultiDimensionAttributes();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ColumnDefinition#getMultiDimensionAttributes <em>Multi Dimension Attributes</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Multi Dimension Attributes</em>' containment reference.
+     * @see #getMultiDimensionAttributes()
+     * @generated
+     */
+    void setMultiDimensionAttributes( AxisAttributes value );
+
+} // ColumnDefinition
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/CompositeFilterExpression.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/CompositeFilterExpression.java
new file mode 100644
index 0000000..9d0d41b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/CompositeFilterExpression.java
@@ -0,0 +1,74 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: CompositeFilterExpression.java,v 1.1 2009/01/30 00:23:57 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Composite Filter Expression</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * A composite of one or multiple child filter expressions.  Its child expressions are ordered, but their relationships are not defined.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.CompositeFilterExpression#getChildren <em>Children</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getCompositeFilterExpression()
+ * @since 3.3 (DTP 1.8)
+ * @model extendedMetaData="name='CompositeFilterExpression' kind='elementOnly'"
+ * @generated
+ */
+public interface CompositeFilterExpression extends FilterExpression
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Children</b></em>' containment reference list.
+     * The list contents are of type {@link org.eclipse.datatools.connectivity.oda.design.FilterExpression}.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Children</em>' containment reference list isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Children</em>' containment reference list.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getCompositeFilterExpression_Children()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='children' namespace='##targetNamespace'"
+     * @generated
+     */
+    EList<FilterExpression> getChildren();
+
+    /**
+     * Appends the specified FilterExpression to its '<em><b>Children</b></em>' containment reference list.
+     * @param childExpr a child filter expression
+     * @generated NOT
+     */
+    void add( FilterExpression childExpr );
+    
+} // CompositeFilterExpression
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/CustomData.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/CustomData.java
new file mode 100644
index 0000000..2d99474
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/CustomData.java
@@ -0,0 +1,138 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Custom Data</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Custom data specific to any participant of an ODA design session, i.e. an ODA host or custom designer, as identified by its providerId.  Its value is used only by its provider, but may be displayed in a string format by a non-provider component. This may be used as one of the StaticValues defined to be an input parameter's default values.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.CustomData#getProviderId <em>Provider Id</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.CustomData#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.CustomData#getDisplayValue <em>Display Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getCustomData()
+ * @model extendedMetaData="name='CustomData' kind='elementOnly'"
+ * @generated
+ * @since 3.3.1 (DTP 1.8.1)
+ */
+public interface CustomData extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Provider Id</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The unique identifier or namespace of the provider of this instance.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Provider Id</em>' attribute.
+     * @see #setProviderId(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getCustomData_ProviderId()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
+     *        extendedMetaData="kind='element' name='providerId' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getProviderId();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.CustomData#getProviderId <em>Provider Id</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Provider Id</em>' attribute.
+     * @see #getProviderId()
+     * @generated
+     */
+    void setProviderId( String value );
+
+    /**
+     * Returns the value of the '<em><b>Value</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Value</em>' attribute isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Custom data value that is normally used only by its provider.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Value</em>' attribute.
+     * @see #setValue(Object)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getCustomData_Value()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.AnySimpleType" required="true"
+     *        extendedMetaData="kind='element' name='value' namespace='##targetNamespace'"
+     * @generated
+     */
+    Object getValue();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.CustomData#getValue <em>Value</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Value</em>' attribute.
+     * @see #getValue()
+     * @generated
+     */
+    void setValue( Object value );
+
+    /**
+     * Returns the value of the '<em><b>Display Value</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Display Value</em>' attribute isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The String representation of the data value, which can be displayed by a non provider.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Display Value</em>' attribute.
+     * @see #setDisplayValue(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getCustomData_DisplayValue()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String"
+     *        extendedMetaData="kind='element' name='displayValue' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getDisplayValue();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.CustomData#getDisplayValue <em>Display Value</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Display Value</em>' attribute.
+     * @see #getDisplayValue()
+     * @generated
+     */
+    void setDisplayValue( String value );
+
+} // CustomData
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/CustomFilterExpression.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/CustomFilterExpression.java
new file mode 100644
index 0000000..8ed8c6f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/CustomFilterExpression.java
@@ -0,0 +1,205 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: CustomFilterExpression.java,v 1.2 2009/10/23 20:17:26 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Custom Filter Expression</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * The definition of a custom atomic filter expression contributed by an extension of the org.eclipse.datatools.connectivity.oda.dynamicResultSet extension point.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.CustomFilterExpression#getType <em>Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.CustomFilterExpression#getContext <em>Context</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getCustomFilterExpression()
+ * @since 3.3 (DTP 1.8)
+ * @model extendedMetaData="name='CustomFilterExpression' kind='elementOnly'"
+ * @generated
+ */
+public interface CustomFilterExpression extends FilterExpression
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Type</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Type</em>' containment reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Type</em>' containment reference.
+     * @see #setType(FilterExpressionType)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getCustomFilterExpression_Type()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='type' namespace='##targetNamespace'"
+     * @generated
+     */
+    FilterExpressionType getType();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.CustomFilterExpression#getType <em>Type</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Type</em>' containment reference.
+     * @see #getType()
+     * @generated
+     */
+    void setType( FilterExpressionType value );
+
+    /**
+     * Returns the value of the '<em><b>Declaring Extension Id</b></em>' attribute
+     * of this type of filter expression.
+     * <!-- begin-user-doc -->
+     * Preserved method for backward compatibility.
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The id of the ODA dynamicResultSet extension that declares this custom expression.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Declaring Extension Id</em>' attribute.
+     * @see #getType()
+     * @see #setDeclaringExtensionId(String)
+     * @generated NOT
+     */
+    String getDeclaringExtensionId();
+
+    /**
+     * Sets the value of the '<em><b>Declaring Extension Id</b></em>' attribute
+     * of this type of filter expression.
+     * <!-- begin-user-doc -->
+     * Preserved method for backward compatibility.
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Declaring Extension Id</em>' attribute.
+     * @see #setType(FilterExpressionType)
+     * @see #getDeclaringExtensionId()
+     * @generated NOT
+     */
+    void setDeclaringExtensionId( String value );
+
+    /**
+     * Returns the value of the '<em><b>Id</b></em>' attribute
+     * of this type of filter expression.
+     * <!-- begin-user-doc -->
+     * Preserved method for backward compatibility.
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * An id that uniquely identifies  a custom expression within an ODA dynamicResultSet extension.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Id</em>' attribute.
+     * @see #getType()
+     * @see #setId(String)
+     * @generated NOT
+     */
+    String getId();
+
+    /**
+     * Sets the value of the '<em><b>Id</b></em>' attribute
+     * of this type of filter expression.
+     * <!-- begin-user-doc -->
+     * Preserved method for backward compatibility.
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Id</em>' attribute.
+     * @see #setType(FilterExpressionType)
+     * @see #getId()
+     * @generated NOT
+     */
+    void setId( String value );
+
+    /**
+     * Returns the value of the '<em><b>Context</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Context</em>' containment reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Context</em>' containment reference.
+     * @see #setContext(AtomicExpressionContext)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getCustomFilterExpression_Context()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='context' namespace='##targetNamespace'"
+     * @generated
+     */
+    AtomicExpressionContext getContext();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.CustomFilterExpression#getContext <em>Context</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Context</em>' containment reference.
+     * @see #getContext()
+     * @generated
+     */
+    void setContext( AtomicExpressionContext value );
+
+    /**
+     * Indicates whether this filter expression can be excluded at runtime.
+     * @return  true if this can be excluded at runtime; false otherwise
+     * @generated NOT
+     */
+    boolean isOptional();
+
+    /**
+     * Specifies whether this filter expression can be excluded at runtime.
+     * @param isOptional    true if this can be excluded at runtime; false otherwise
+     * @generated NOT
+     */
+    void setIsOptional( boolean isOptional );
+
+    /**
+     * Returns the expression variable design in the '<em><b>Context</b></em>' containment reference.
+     * @return  the variable design in the '<em><b>Context</b></em>' containment reference, 
+     *          or null if none is specified
+     * @generated NOT
+     */
+    ExpressionVariable getContextVariable();
+
+    /**
+     * Sets the expression variable design in the '<em><b>Context</b></em>' containment reference.
+     * @param variable  the variable design in the '<em><b>Context</b></em>' containment reference
+     * @generated NOT
+     */
+    void setContextVariable( ExpressionVariable variable );
+
+    /**
+     * Returns the expression arguments design in the '<em><b>Context</b></em>' containment reference.
+     * @return  the arguments design in the '<em><b>Context</b></em>' containment reference, 
+     *          or null if none is specified
+     * @generated NOT
+     */
+    ExpressionArguments getContextArguments();
+
+    /**
+     * Sets the expression arguments design in the '<em><b>Context</b></em>' containment reference.
+     * @param arguments   the arguments design in the '<em><b>Context</b></em>' containment reference
+     * @generated NOT
+     */
+    void setContextArguments( ExpressionArguments arguments );
+
+} // CustomFilterExpression
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DataAccessDesign.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DataAccessDesign.java
new file mode 100644
index 0000000..0c29e63
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DataAccessDesign.java
@@ -0,0 +1,99 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DataAccessDesign.java,v 1.4 2006/02/07 05:52:28 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * The design of how to access a data set.  Its model is a design tree that starts with a top-level dataSetDesign, which contains its corresponding dataSourceDesign.  The top-level data set may contain nested data set designs.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataAccessDesign#getDataSetDesign <em>Data Set Design</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataAccessDesign()
+ * @model extendedMetaData="name='DataAccessDesign' kind='elementOnly'"
+ * @generated
+ */
+public interface DataAccessDesign extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2007 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the ODA data source element ID
+     * that supports this data set's access.  
+     * Could be null, if no data set design is defined.
+     * @see #getDataSourceDesign()
+     * @generated NOT
+     */
+    public String getOdaExtensionDataSourceId();
+
+    /**
+     * Returns the value of the '<em><b>Data Set Design</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Data Set Design</em>' containment reference.
+     * @see #setDataSetDesign(DataSetDesign)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataAccessDesign_DataSetDesign()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='dataSetDesign' namespace='##targetNamespace'"
+     * @generated
+     */
+    DataSetDesign getDataSetDesign();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataAccessDesign#getDataSetDesign <em>Data Set Design</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Data Set Design</em>' containment reference.
+     * @see #getDataSetDesign()
+     * @generated
+     */
+    void setDataSetDesign( DataSetDesign value );
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataAccessDesign#getDataSetDesign <em>Data Set Design</em>}' containment reference
+     * with a new data set design associated with given
+     * data source design.
+     * @param dataSourceDesign
+     * @see #setDataSetDesign()
+     * @generated NOT
+     */
+    void setNewDataSetDesign( DataSourceDesign dataSourceDesign );
+
+    /**
+     * Returns the value of the Data Source Design associated
+     * with the Data Set.
+     * @return the value of the '<em>Data Source Design</em>' containment reference.
+     * @see #setNewDataSetDesign()
+     * @generated NOT
+     */
+    DataSourceDesign getDataSourceDesign();
+
+} // DataAccessDesign
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DataElementAttributes.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DataElementAttributes.java
new file mode 100644
index 0000000..71255b5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DataElementAttributes.java
@@ -0,0 +1,462 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DataElementAttributes.java,v 1.8 2007/04/11 02:59:53 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Common attributes for a data element.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getIdentifier <em>Identifier</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getPosition <em>Position</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getNativeDataTypeCode <em>Native Data Type Code</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getPrecision <em>Precision</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getScale <em>Scale</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getNullability <em>Nullability</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getUiHints <em>Ui Hints</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataElementAttributes()
+ * @model extendedMetaData="name='DataElementAttributes' kind='elementOnly'"
+ * @generated
+ */
+public interface DataElementAttributes extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Identifier</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Uniquely identifies this data element by name and/or position.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Identifier</em>' containment reference.
+     * @see #setIdentifier(DataElementIdentifier)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataElementAttributes_Identifier()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='identifier' namespace='##targetNamespace'"
+     * @generated
+     * @since 3.3.2
+     */
+    DataElementIdentifier getIdentifier();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getIdentifier <em>Identifier</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Identifier</em>' containment reference.
+     * @see #getIdentifier()
+     * @generated
+     * @since 3.3.2
+     */
+    void setIdentifier( DataElementIdentifier value );
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getPrecision <em>Precision</em>}' attribute
+     * that is applicable for the given ODA data type.
+     * This provides the application logic on setting the applicable value
+     * for the given data type, and would return
+     * the applicable value in <code>getPrecision</code> method. 
+     * @param value the new value of the '<em>Precision</em>' attribute.
+     * @param odaDataType   the ODA data type of this data element
+     * @see #setPrecision()
+     * @see #isSetPrecision()
+     * @see #unsetPrecision()
+     * @see #getPrecision()
+     * @generated NOT
+     */
+    void setApplicablePrecision( int value, OdaScalarDataType odaDataType );
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getScale <em>Scale</em>}' attribute
+     * that is applicable for the given ODA data type.
+     * This provides the application logic on setting the applicable value
+     * for the given data type, and would return
+     * the applicable value in <code>getScale</code> method. 
+     * @param value the new value of the '<em>Scale</em>' attribute.
+     * @param odaDataType   the ODA data type of this data element
+     * @see #setScale()
+     * @see #isSetScale()
+     * @see #unsetScale()
+     * @see #getScale()
+     * @generated NOT
+     */
+    void setApplicableScale( int value, OdaScalarDataType odaDataType );
+
+    /**
+     * Indicates whether this data element is defined to allow a null value.
+     * Defaults to false if its nullability is unknown.
+     * @return	true if the data element allows a null value;
+     * 			false otherwise.
+     * @see #getNullability()
+     * @generated NOT
+     */
+    boolean allowsNull();
+
+    /**
+     * Returns the value of the '<em><b>Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * A name that uniquely identifies this data element.  If a data element can only be identified by position, this name may be empty.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Name</em>' attribute.
+     * @see #setName(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataElementAttributes_Name()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
+     *        extendedMetaData="kind='element' name='name' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getName();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getName <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Name</em>' attribute.
+     * @see #getName()
+     * @generated
+     */
+    void setName( String value );
+
+    /**
+     * Returns the value of the '<em><b>Position</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The 1-based index position (left-to-right order) within a collection of data elements.  The position is defined per the underlying data source, and is not necessarily sequential.  For example, a query may access 3 columns in a result set, but the data access design may choose to expose only column 2.  In this case, only one column element with postion 2 is defined in the result set definition.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Position</em>' attribute.
+     * @see #isSetPosition()
+     * @see #unsetPosition()
+     * @see #setPosition(int)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataElementAttributes_Position()
+     * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.UnsignedShort"
+     *        extendedMetaData="kind='element' name='position' namespace='##targetNamespace'"
+     * @generated
+     */
+    int getPosition();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getPosition <em>Position</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Position</em>' attribute.
+     * @see #isSetPosition()
+     * @see #unsetPosition()
+     * @see #getPosition()
+     * @generated
+     */
+    void setPosition( int value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getPosition <em>Position</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetPosition()
+     * @see #getPosition()
+     * @see #setPosition(int)
+     * @generated
+     */
+    void unsetPosition();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getPosition <em>Position</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Position</em>' attribute is set.
+     * @see #unsetPosition()
+     * @see #getPosition()
+     * @see #setPosition(int)
+     * @generated
+     */
+    boolean isSetPosition();
+
+    /**
+     * Returns the value of the '<em><b>Native Data Type Code</b></em>' attribute.
+     * The default value is <code>"0"</code>.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Native data type code of the data element.  If none or unknown value (0) is specified, the data element is mapped to an ODA String data type by default.  The native type code value is implementation-specific to individual ODA driver, which must support its mapping to one or more ODA data types.  The supported native-ODA data type mapping must be defined in the ODA extension's plugin.xml .
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Native Data Type Code</em>' attribute.
+     * @see #isSetNativeDataTypeCode()
+     * @see #unsetNativeDataTypeCode()
+     * @see #setNativeDataTypeCode(int)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataElementAttributes_NativeDataTypeCode()
+     * @model default="0" unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Int"
+     *        extendedMetaData="kind='element' name='nativeDataTypeCode' namespace='##targetNamespace'"
+     * @generated
+     */
+    int getNativeDataTypeCode();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getNativeDataTypeCode <em>Native Data Type Code</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Native Data Type Code</em>' attribute.
+     * @see #isSetNativeDataTypeCode()
+     * @see #unsetNativeDataTypeCode()
+     * @see #getNativeDataTypeCode()
+     * @generated
+     */
+    void setNativeDataTypeCode( int value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getNativeDataTypeCode <em>Native Data Type Code</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetNativeDataTypeCode()
+     * @see #getNativeDataTypeCode()
+     * @see #setNativeDataTypeCode(int)
+     * @generated
+     */
+    void unsetNativeDataTypeCode();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getNativeDataTypeCode <em>Native Data Type Code</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Native Data Type Code</em>' attribute is set.
+     * @see #unsetNativeDataTypeCode()
+     * @see #getNativeDataTypeCode()
+     * @see #setNativeDataTypeCode(int)
+     * @generated
+     */
+    boolean isSetNativeDataTypeCode();
+
+    /**
+     * Returns the value of the '<em><b>Precision</b></em>' attribute.
+     * The default value is <code>"-1"</code>.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Maximum number of decimal digits in a numeric value, or the length of a non-numeric value.  
+     * A value of -1 indicates this attribute is not applicable.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Precision</em>' attribute.
+     * @see #isSetPrecision()
+     * @see #unsetPrecision()
+     * @see #setPrecision(int)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataElementAttributes_Precision()
+     * @model default="-1" unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Int"
+     *        extendedMetaData="kind='element' name='precision' namespace='##targetNamespace'"
+     * @generated
+     */
+    int getPrecision();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getPrecision <em>Precision</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Precision</em>' attribute.
+     * @see #isSetPrecision()
+     * @see #unsetPrecision()
+     * @see #getPrecision()
+     * @generated
+     */
+    void setPrecision( int value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getPrecision <em>Precision</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetPrecision()
+     * @see #getPrecision()
+     * @see #setPrecision(int)
+     * @generated
+     */
+    void unsetPrecision();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getPrecision <em>Precision</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Precision</em>' attribute is set.
+     * @see #unsetPrecision()
+     * @see #getPrecision()
+     * @see #setPrecision(int)
+     * @generated
+     */
+    boolean isSetPrecision();
+
+    /**
+     * Returns the value of the '<em><b>Scale</b></em>' attribute.
+     * The default value is <code>"-1"</code>.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Maximum number of digits to the right of the decimal point.  A value of -1 indicates this attribute is not applicable.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Scale</em>' attribute.
+     * @see #isSetScale()
+     * @see #unsetScale()
+     * @see #setScale(int)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataElementAttributes_Scale()
+     * @model default="-1" unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Int"
+     *        extendedMetaData="kind='element' name='scale' namespace='##targetNamespace'"
+     * @generated
+     */
+    int getScale();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getScale <em>Scale</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Scale</em>' attribute.
+     * @see #isSetScale()
+     * @see #unsetScale()
+     * @see #getScale()
+     * @generated
+     */
+    void setScale( int value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getScale <em>Scale</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetScale()
+     * @see #getScale()
+     * @see #setScale(int)
+     * @generated
+     */
+    void unsetScale();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getScale <em>Scale</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Scale</em>' attribute is set.
+     * @see #unsetScale()
+     * @see #getScale()
+     * @see #setScale(int)
+     * @generated
+     */
+    boolean isSetScale();
+
+    /**
+     * Returns the value of the '<em><b>Nullability</b></em>' attribute.
+     * The default value is <code>"Unknown"</code>.
+     * The literals are from the enumeration {@link org.eclipse.datatools.connectivity.oda.design.ElementNullability}.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Nullability</em>' attribute.
+     * @see org.eclipse.datatools.connectivity.oda.design.ElementNullability
+     * @see #isSetNullability()
+     * @see #unsetNullability()
+     * @see #setNullability(ElementNullability)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataElementAttributes_Nullability()
+     * @model default="Unknown" unsettable="true"
+     *        extendedMetaData="kind='element' name='nullability' namespace='##targetNamespace'"
+     * @generated
+     */
+    ElementNullability getNullability();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getNullability <em>Nullability</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Nullability</em>' attribute.
+     * @see org.eclipse.datatools.connectivity.oda.design.ElementNullability
+     * @see #isSetNullability()
+     * @see #unsetNullability()
+     * @see #getNullability()
+     * @generated
+     */
+    void setNullability( ElementNullability value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getNullability <em>Nullability</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetNullability()
+     * @see #getNullability()
+     * @see #setNullability(ElementNullability)
+     * @generated
+     */
+    void unsetNullability();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getNullability <em>Nullability</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Nullability</em>' attribute is set.
+     * @see #unsetNullability()
+     * @see #getNullability()
+     * @see #setNullability(ElementNullability)
+     * @generated
+     */
+    boolean isSetNullability();
+
+    /**
+     * Returns the value of the '<em><b>Ui Hints</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Ui Hints</em>' containment reference.
+     * @see #setUiHints(DataElementUIHints)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataElementAttributes_UiHints()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='uiHints' namespace='##targetNamespace'"
+     * @generated
+     */
+    DataElementUIHints getUiHints();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getUiHints <em>Ui Hints</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Ui Hints</em>' containment reference.
+     * @see #getUiHints()
+     * @generated
+     */
+    void setUiHints( DataElementUIHints value );
+
+    /**
+     * Sets the value of the <em>Display Name</em> attribute
+     * in the element's UI hints.
+     * @param value the new value of the '<em>Display Name</em>' attribute.
+     * @see #setUiHints(DataElementUIHints)
+     * @generated NOT
+     */
+    void setUiDisplayName( String value );
+
+    /**
+     * Sets the value of the <em>Description</em> attribute
+     * in the element's UI hints.
+     * @param value the new value of the '<em>Description</em>' attribute.
+     * @see #setUiHints(DataElementUIHints)
+     * @generated NOT
+     */
+    void setUiDescription( String value );
+
+} // DataElementAttributes
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DataElementIdentifier.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DataElementIdentifier.java
new file mode 100644
index 0000000..235f718
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DataElementIdentifier.java
@@ -0,0 +1,130 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Data Element Identifier</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Identifies a data element by name and/or position.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataElementIdentifier#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataElementIdentifier#getPosition <em>Position</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataElementIdentifier()
+ * @model extendedMetaData="name='DataElementIdentifier' kind='elementOnly'"
+ * @generated
+ * @since 3.3.2
+ */
+public interface DataElementIdentifier extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * A name that uniquely identifies a data element.  If a data element can only be identified by position, this name may be empty.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Name</em>' attribute.
+     * @see #setName(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataElementIdentifier_Name()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
+     *        extendedMetaData="kind='element' name='name' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getName();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataElementIdentifier#getName <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Name</em>' attribute.
+     * @see #getName()
+     * @generated
+     */
+    void setName( String value );
+
+    /**
+     * Returns the value of the '<em><b>Position</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The 1-based index position (left-to-right order) within a collection of data elements.  The position is defined per the underlying data source, and is not necessarily sequential.  For example, a query may access 3 columns in a result set, but the data access design may choose to expose only column 2.  In this case, only one column element with postion 2 is defined in the result set definition.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Position</em>' attribute.
+     * @see #isSetPosition()
+     * @see #unsetPosition()
+     * @see #setPosition(int)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataElementIdentifier_Position()
+     * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.UnsignedShort"
+     *        extendedMetaData="kind='element' name='position' namespace='##targetNamespace'"
+     * @generated
+     */
+    int getPosition();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataElementIdentifier#getPosition <em>Position</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Position</em>' attribute.
+     * @see #isSetPosition()
+     * @see #unsetPosition()
+     * @see #getPosition()
+     * @generated
+     */
+    void setPosition( int value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataElementIdentifier#getPosition <em>Position</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetPosition()
+     * @see #getPosition()
+     * @see #setPosition(int)
+     * @generated
+     */
+    void unsetPosition();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataElementIdentifier#getPosition <em>Position</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Position</em>' attribute is set.
+     * @see #unsetPosition()
+     * @see #getPosition()
+     * @see #setPosition(int)
+     * @generated
+     */
+    boolean isSetPosition();
+
+} // DataElementIdentifier
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DataElementIdentifiers.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DataElementIdentifiers.java
new file mode 100644
index 0000000..d3d5d4b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DataElementIdentifiers.java
@@ -0,0 +1,69 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Data Element Identifiers</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * A collection of data element identifiers.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataElementIdentifiers#getIdentifiers <em>Identifiers</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataElementIdentifiers()
+ * @model extendedMetaData="name='DataElementIdentifiers' kind='elementOnly'"
+ * @generated
+ * @since 3.3.2
+ */
+public interface DataElementIdentifiers extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Identifiers</b></em>' containment reference list.
+     * The list contents are of type {@link org.eclipse.datatools.connectivity.oda.design.DataElementIdentifier}.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Identifiers</em>' containment reference list isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Identifiers</em>' containment reference list.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataElementIdentifiers_Identifiers()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='identifiers' namespace='##targetNamespace'"
+     * @generated
+     */
+    EList<DataElementIdentifier> getIdentifiers();
+
+} // DataElementIdentifiers
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DataElementUIHints.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DataElementUIHints.java
new file mode 100644
index 0000000..3bde61f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DataElementUIHints.java
@@ -0,0 +1,151 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DataElementUIHints.java,v 1.3 2007/04/11 02:59:53 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * UI hints for a data element.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataElementUIHints#getDisplayName <em>Display Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataElementUIHints#getDescription <em>Description</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataElementUIHints()
+ * @model extendedMetaData="name='DataElementUIHints' kind='elementOnly'"
+ * @generated
+ */
+public interface DataElementUIHints extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Display Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Business name of the data element.  Text can be localized with a resource key.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Display Name</em>' attribute.
+     * @see #setDisplayName(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataElementUIHints_DisplayName()
+     * @see #getDisplayNameKey()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String"
+     *        extendedMetaData="kind='element' name='displayName' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getDisplayName();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataElementUIHints#getDisplayName <em>Display Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Display Name</em>' attribute.
+     * @see #getDisplayName()
+     * @see #setDisplayNameKey(String)
+     * @generated
+     */
+    void setDisplayName( String value );
+
+    /**
+     * Returns the resource key of the '<em><b>Display Name</b></em>' attribute.
+     * @return  the resource key of the '<em>Display Name</em>' attribute; may be null if none is available
+     * @see #setDisplayNameKey(String)
+     * @see #getDisplayName()
+     * @see DataSourceDesign#getResourceFile()
+     * @generated NOT
+     * @since 3.2.3
+     */
+    String getDisplayNameKey();
+    
+    /**
+     * Sets the resource key of the '{@link org.eclipse.datatools.connectivity.oda.design.DataElementUIHints#getDisplayName <em>Display Name</em>}' attribute.
+     * @param value  the new resource key of the '<em>Display Name</em>' attribute;
+     *              may be null to reset
+     * @see #getDisplayNameKey()
+     * @see #setDisplayName(String)
+     * @see DataSourceDesign#getResourceFile()
+     * @generated NOT
+     * @since 3.2.3
+     */
+    void setDisplayNameKey( String value );
+
+    /**
+     * Returns the value of the '<em><b>Description</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * More extensive description of the data element.  Text can be localized with a resource key.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Description</em>' attribute.
+     * @see #setDescription(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataElementUIHints_Description()
+     * @see #getDescriptionKey()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String"
+     *        extendedMetaData="kind='element' name='description' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getDescription();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataElementUIHints#getDescription <em>Description</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Description</em>' attribute.
+     * @see #getDescription()
+     * @see #setDescriptionKey(String)
+     * @generated
+     */
+    void setDescription( String value );
+
+    /**
+     * Returns the resource key of the '<em><b>Description</b></em>' attribute.
+     * @return the resource key of the '<em>Description</em>' attribute.
+     * @see #setDescriptionKey(String)
+     * @see #getDescription()
+     * @see DataSourceDesign#getResourceFile()
+     * @generated NOT
+     * @since 3.2.3
+     */
+    String getDescriptionKey();
+    
+    /**
+     * Sets the resource key of the '{@link org.eclipse.datatools.connectivity.oda.design.DataElementUIHints#getDescription <em>Description</em>}' attribute.
+     * @param value the new resource key of the '<em>Description</em>' attribute;
+     *              may be null to reset
+     * @see #getDescriptionKey()
+     * @see #setDescription(String)
+     * @see DataSourceDesign#getResourceFile()
+     * @generated NOT
+     * @since 3.2.3
+     */
+    void setDescriptionKey( String value );
+
+} // DataElementUIHints
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DataSetDesign.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DataSetDesign.java
new file mode 100644
index 0000000..ddfe876
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DataSetDesign.java
@@ -0,0 +1,386 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DataSetDesign.java,v 1.8 2010/02/17 02:20:40 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * A design-time data set definition.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getOdaExtensionDataSetId <em>Oda Extension Data Set Id</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getDataSourceDesign <em>Data Source Design</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getQuery <em>Query</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getDisplayName <em>Display Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getPublicProperties <em>Public Properties</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getPrivateProperties <em>Private Properties</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getResultSets <em>Result Sets</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getPrimaryResultSetName <em>Primary Result Set Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getParameters <em>Parameters</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataSetDesign()
+ * @model extendedMetaData="name='DataSetDesign' kind='elementOnly'"
+ * @generated
+ */
+public interface DataSetDesign extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2011 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the ODA data source element ID of the
+     * dataSourceDesign that supports this type of data set.  
+     * Could be null, if nested within another dataSetDesign, 
+     * to share the container's dataSourceDesign.
+     * @see #getDataSourceDesign()
+     * @generated NOT
+     */
+    public String getOdaExtensionDataSourceId();
+
+    /**
+     * Returns the value of the '<em><b>Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The unique name that identifies an instance of dataSetDesign.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Name</em>' attribute.
+     * @see #setName(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataSetDesign_Name()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
+     *        extendedMetaData="kind='element' name='name' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getName();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getName <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Name</em>' attribute.
+     * @see #getName()
+     * @generated
+     */
+    void setName( String value );
+
+    /**
+     * Returns the value of the '<em><b>Oda Extension Data Set Id</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The dataSet element ID defined in an ODA extension plugin manifest.  It identifies the type of data set design supported by the ODA extension.  Optional if only one dataSet element is defined in the manifest.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Oda Extension Data Set Id</em>' attribute.
+     * @see #setOdaExtensionDataSetId(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataSetDesign_OdaExtensionDataSetId()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String"
+     *        extendedMetaData="kind='element' name='odaExtensionDataSetId' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getOdaExtensionDataSetId();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getOdaExtensionDataSetId <em>Oda Extension Data Set Id</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Oda Extension Data Set Id</em>' attribute.
+     * @see #getOdaExtensionDataSetId()
+     * @generated
+     */
+    void setOdaExtensionDataSetId( String value );
+
+    /**
+     * Returns the value of the '<em><b>Data Source Design</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The instance of dataSourceDesign that supports this type of data set.  Could be null, if nested within another dataSetDesign, to share the container's dataSourceDesign.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Data Source Design</em>' containment reference.
+     * @see #setDataSourceDesign(DataSourceDesign)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataSetDesign_DataSourceDesign()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='dataSourceDesign' namespace='##targetNamespace'"
+     * @generated
+     */
+    DataSourceDesign getDataSourceDesign();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getDataSourceDesign <em>Data Source Design</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Data Source Design</em>' containment reference.
+     * @see #getDataSourceDesign()
+     * @generated
+     */
+    void setDataSourceDesign( DataSourceDesign value );
+
+    /**
+     * Returns the value of the '<em><b>Query</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Query</em>' containment reference.
+     * @see #setQuery(DataSetQuery)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataSetDesign_Query()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='query' namespace='##targetNamespace'"
+     * @generated
+     */
+    DataSetQuery getQuery();
+
+    /**
+     * Returns the value of the '<em><b>Query Text</b></em>' attribute
+     * in the associated '<em><b>Query</b></em>' containment reference.
+     * The query command text to execute at runtime to retrieve data for this data set.  
+     * The query syntax is specific to a data source; could be an empty string.
+     * @return the value of the '<em>Query Text</em>' attribute;
+     *          may be null if no Query is defined
+     * @see #getQuery
+     * @generated NOT
+     */
+    String getQueryText();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getQuery <em>Query</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Query</em>' containment reference.
+     * @see #getQuery()
+     * @generated
+     */
+    void setQuery( DataSetQuery value );
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getQuery <em>Query</em>}' containment reference
+     * with the given query text attribute.
+     * @param queryText the value of the '<em>Query Text</em>' attribute
+     *                  of the '<em>Query</em>' containment reference
+     * @see #setQuery()
+     * @generated NOT
+     */
+    void setQueryText( String queryText );
+
+    /**
+     * Returns the value of the '<em><b>Display Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Text can be localized with a resource key.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Display Name</em>' attribute.
+     * @see #setDisplayName(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataSetDesign_DisplayName()
+     * @see #getDisplayNameKey()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String"
+     *        extendedMetaData="kind='element' name='displayName' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getDisplayName();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getDisplayName <em>Display Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Display Name</em>' attribute.
+     * @see #getDisplayName()
+     * @see #setDisplayNameKey(String)
+     * @generated
+     */
+    void setDisplayName( String value );
+
+    /**
+     * Returns the resource key of the '<em><b>Display Name</b></em>' attribute.
+     * @return  the resource key of the '<em>Display Name</em>' attribute; may be null if none is available
+     * @see #setDisplayNameKey(String)
+     * @see #getDisplayName()
+     * @see DataSourceDesign#getResourceFile()
+     * @generated NOT
+     * @since 3.2.3
+     */
+    String getDisplayNameKey();
+
+    /**
+     * Sets the resource key of the '{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getDisplayName <em>Display Name</em>}' attribute.
+     * @param value  the new resource key of the '<em>Display Name</em>' attribute;
+     *              may be null to reset
+     * @see #getDisplayNameKey()
+     * @see #setDisplayName(String)
+     * @see DataSourceDesign#getResourceFile()
+     * @generated NOT
+     * @since 3.2.3
+     */
+    void setDisplayNameKey( String value );
+
+    /**
+     * Returns the value of the '<em><b>Public Properties</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Properties specific to the underlying data set query.  Public property values can be visible and editable in the host designer.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Public Properties</em>' containment reference.
+     * @see #setPublicProperties(Properties)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataSetDesign_PublicProperties()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='publicProperties' namespace='##targetNamespace'"
+     * @generated
+     */
+    Properties getPublicProperties();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getPublicProperties <em>Public Properties</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Public Properties</em>' containment reference.
+     * @see #getPublicProperties()
+     * @generated
+     */
+    void setPublicProperties( Properties value );
+
+    /**
+     * Returns the value of the '<em><b>Private Properties</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Private properties specific to the underlying data set query.  Their definitions are private to the ODA designer, i.e. must not be visible nor editable by the host designer.  The "private" nature only applies to the design-time behavior of an ODA host designer.  At run-time, both public and private properties are combined and passed to the ODA runtime driver as a single set of runtime properties.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Private Properties</em>' containment reference.
+     * @see #setPrivateProperties(Properties)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataSetDesign_PrivateProperties()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='privateProperties' namespace='##targetNamespace'"
+     * @generated
+     */
+    Properties getPrivateProperties();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getPrivateProperties <em>Private Properties</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Private Properties</em>' containment reference.
+     * @see #getPrivateProperties()
+     * @generated
+     */
+    void setPrivateProperties( Properties value );
+
+    /**
+     * Returns the value of the '<em><b>Result Sets</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Result Sets</em>' containment reference.
+     * @see #setResultSets(ResultSets)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataSetDesign_ResultSets()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='resultSets' namespace='##targetNamespace'"
+     * @generated
+     */
+    ResultSets getResultSets();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getResultSets <em>Result Sets</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Result Sets</em>' containment reference.
+     * @see #getResultSets()
+     * @generated
+     */
+    void setResultSets( ResultSets value );
+
+    /**
+     * Returns the primary result set's definition in the 
+     * '<em><b>Result Sets</b></em>' containment reference.
+     * @return the primary result set's definition
+     * @see #getPrimaryResultSetName()
+     * @see #getResultSets()
+     * @generated NOT
+     */
+    ResultSetDefinition getPrimaryResultSet();
+
+    /**
+     * Sets the primary result set's definition in the 
+     * '<em><b>Result Sets</b></em>' containment reference.
+     * @param resultSet the primary result set's definition;
+     *                  a null value is ignored
+     * @see #setPrimaryResultSetName(String)
+     * @see #setResultSets(ResultSets)
+     * @generated NOT
+     */
+    void setPrimaryResultSet( ResultSetDefinition resultSetDefn );
+
+    /**
+     * Returns the value of the '<em><b>Primary Result Set Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Identifies the primary result set if more than one result sets are available, and can be identified by name.  If results sets are identified by sequence, the first result set is the primary one.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Primary Result Set Name</em>' attribute.
+     * @see #setPrimaryResultSetName(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataSetDesign_PrimaryResultSetName()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String"
+     *        extendedMetaData="kind='element' name='primaryResultSetName' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getPrimaryResultSetName();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getPrimaryResultSetName <em>Primary Result Set Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Primary Result Set Name</em>' attribute.
+     * @see #getPrimaryResultSetName()
+     * @generated
+     */
+    void setPrimaryResultSetName( String value );
+
+    /**
+     * Returns the value of the '<em><b>Parameters</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Parameters</em>' containment reference.
+     * @see #setParameters(DataSetParameters)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataSetDesign_Parameters()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='parameters' namespace='##targetNamespace'"
+     * @generated
+     */
+    DataSetParameters getParameters();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getParameters <em>Parameters</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Parameters</em>' containment reference.
+     * @see #getParameters()
+     * @generated
+     */
+    void setParameters( DataSetParameters value );
+
+} // DataSetDesign
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DataSetParameters.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DataSetParameters.java
new file mode 100644
index 0000000..4dd925e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DataSetParameters.java
@@ -0,0 +1,118 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DataSetParameters.java,v 1.2 2007/04/11 02:59:53 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * A collection of top-level parameters defined for a data set.  If the metadata can be derived, i.e. can be obtained by an ODA driver in each design session, an ODA host designer is not required to include the derived metadata in the next design session request.  An ODA designer may ignore such metadata in a Request.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataSetParameters#getParameterDefinitions <em>Parameter Definitions</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataSetParameters#isDerivedMetaData <em>Derived Meta Data</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataSetParameters()
+ * @model extendedMetaData="name='DataSetParameters' kind='elementOnly'"
+ * @generated
+ */
+public interface DataSetParameters extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Parameter Definitions</b></em>' containment reference list.
+     * The list contents are of type {@link org.eclipse.datatools.connectivity.oda.design.ParameterDefinition}.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Parameter Definitions</em>' containment reference list.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataSetParameters_ParameterDefinitions()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='parameterDefinitions' namespace='##targetNamespace'"
+     * @generated
+     */
+    EList<ParameterDefinition> getParameterDefinitions();
+
+    /**
+     * Returns the value of the '<em><b>Derived Meta Data</b></em>' attribute.
+     * The default value is <code>"true"</code>.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * If the metadata can be derived, i.e. can be obtained by an ODA driver in each design session, an ODA host designer is not required to include the derived metadata in the next design session request.  An ODA designer may ignore such metadata in a Request.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Derived Meta Data</em>' attribute.
+     * @see #isSetDerivedMetaData()
+     * @see #unsetDerivedMetaData()
+     * @see #setDerivedMetaData(boolean)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataSetParameters_DerivedMetaData()
+     * @model default="true" unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Boolean"
+     *        extendedMetaData="kind='attribute' name='derivedMetaData'"
+     * @generated
+     */
+    boolean isDerivedMetaData();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataSetParameters#isDerivedMetaData <em>Derived Meta Data</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Derived Meta Data</em>' attribute.
+     * @see #isSetDerivedMetaData()
+     * @see #unsetDerivedMetaData()
+     * @see #isDerivedMetaData()
+     * @generated
+     */
+    void setDerivedMetaData( boolean value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataSetParameters#isDerivedMetaData <em>Derived Meta Data</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetDerivedMetaData()
+     * @see #isDerivedMetaData()
+     * @see #setDerivedMetaData(boolean)
+     * @generated
+     */
+    void unsetDerivedMetaData();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataSetParameters#isDerivedMetaData <em>Derived Meta Data</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Derived Meta Data</em>' attribute is set.
+     * @see #unsetDerivedMetaData()
+     * @see #isDerivedMetaData()
+     * @see #setDerivedMetaData(boolean)
+     * @generated
+     */
+    boolean isSetDerivedMetaData();
+
+} // DataSetParameters
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DataSetQuery.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DataSetQuery.java
new file mode 100644
index 0000000..c0ae445
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DataSetQuery.java
@@ -0,0 +1,74 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DataSetQuery.java,v 1.1 2005/12/29 04:17:55 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Defines the query of a data set.  Includes the query text, and any additional query spec.  Future: may include a filterSpec for dynamicFiltering. 
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataSetQuery#getQueryText <em>Query Text</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataSetQuery()
+ * @model extendedMetaData="name='DataSetQuery' kind='elementOnly'"
+ * @generated
+ */
+public interface DataSetQuery extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2007 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Query Text</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The query command text to execute at runtime to retrieve data for this data set.  Retrieved data could be for one or more result sets and/or output parameters, as defined in this data set design.  The query syntax is specific to a data source; could be an empty string.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Query Text</em>' attribute.
+     * @see #setQueryText(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataSetQuery_QueryText()
+     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
+     *        extendedMetaData="kind='element' name='queryText' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getQueryText();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataSetQuery#getQueryText <em>Query Text</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Query Text</em>' attribute.
+     * @see #getQueryText()
+     * @generated
+     */
+    void setQueryText( String value );
+
+} // DataSetQuery
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DataSourceDesign.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DataSourceDesign.java
new file mode 100644
index 0000000..fb760f3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DataSourceDesign.java
@@ -0,0 +1,407 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DataSourceDesign.java,v 1.5 2010/02/17 02:20:39 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import java.io.File;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * A design-time data source definition.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getOdaExtensionId <em>Oda Extension Id</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getEffectiveOdaExtensionId <em>Effective Oda Extension Id</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getOdaExtensionDataSourceId <em>Oda Extension Data Source Id</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getDisplayName <em>Display Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getPublicProperties <em>Public Properties</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getPrivateProperties <em>Private Properties</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getLinkedProfileName <em>Linked Profile Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getLinkedProfileStoreFilePath <em>Linked Profile Store File Path</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getHostResourceIdentifiers <em>Host Resource Identifiers</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getResourceFile <em>Resource File</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataSourceDesign()
+ * @model extendedMetaData="name='DataSourceDesign' kind='elementOnly'"
+ * @generated
+ */
+public interface DataSourceDesign extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2011 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The unique name that identifies an instance of dataSourceDesign.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Name</em>' attribute.
+     * @see #setName(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataSourceDesign_Name()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
+     *        extendedMetaData="kind='element' name='name' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getName();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getName <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Name</em>' attribute.
+     * @see #getName()
+     * @generated
+     */
+    void setName( String value );
+
+    /**
+     * Returns the value of the '<em><b>Oda Extension Id</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The extension ID defined in an ODA extension plugin manifest.  It identifies the supporting ODA driver's extension plug-in that implements the ODA run-time extension point.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Oda Extension Id</em>' attribute.
+     * @see #setOdaExtensionId(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataSourceDesign_OdaExtensionId()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
+     *        extendedMetaData="kind='element' name='odaExtensionId' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getOdaExtensionId();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getOdaExtensionId <em>Oda Extension Id</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Oda Extension Id</em>' attribute.
+     * @see #getOdaExtensionId()
+     * @generated
+     */
+    void setOdaExtensionId( String value );
+
+    /**
+     * Returns the value of the '<em><b>Effective Oda Extension Id</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The ID of the effective oda.datasource extension, which will be consumed by the ODA consumer framework at runtime.  This could be another extension that overrides this ODA extension at runtime.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Effective Oda Extension Id</em>' attribute.
+     * @see #setEffectiveOdaExtensionId(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataSourceDesign_EffectiveOdaExtensionId()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String"
+     *        extendedMetaData="kind='element' name='effectiveOdaExtensionId' namespace='##targetNamespace'"
+     * @generated
+     * @since 3.3.3
+     */
+    String getEffectiveOdaExtensionId();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getEffectiveOdaExtensionId <em>Effective Oda Extension Id</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Effective Oda Extension Id</em>' attribute.
+     * @see #getEffectiveOdaExtensionId()
+     * @generated
+     * @since 3.3.3
+     */
+    void setEffectiveOdaExtensionId( String value );
+
+    /**
+     * Returns the value of the '<em><b>Oda Extension Data Source Id</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The data source element ID defined in an ODA extension plugin manifest.  Optional, defaults to be same as the ODA extension id if only one dataSource element is defined in the manifest.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Oda Extension Data Source Id</em>' attribute.
+     * @see #setOdaExtensionDataSourceId(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataSourceDesign_OdaExtensionDataSourceId()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String"
+     *        extendedMetaData="kind='element' name='odaExtensionDataSourceId' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getOdaExtensionDataSourceId();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getOdaExtensionDataSourceId <em>Oda Extension Data Source Id</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Oda Extension Data Source Id</em>' attribute.
+     * @see #getOdaExtensionDataSourceId()
+     * @generated
+     */
+    void setOdaExtensionDataSourceId( String value );
+
+    /**
+     * Returns the value of the '<em><b>Display Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Text can be localized with a resource key.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Display Name</em>' attribute.
+     * @see #setDisplayName(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataSourceDesign_DisplayName()
+     * @see #getDisplayNameKey()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String"
+     *        extendedMetaData="kind='element' name='displayName' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getDisplayName();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getDisplayName <em>Display Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Display Name</em>' attribute.
+     * @see #getDisplayName()
+     * @see #setDisplayNameKey(String)
+     * @generated
+     */
+    void setDisplayName( String value );
+
+    /**
+     * Returns the resource key of the '<em><b>Display Name</b></em>' attribute.
+     * @return  the resource key of the '<em>Display Name</em>' attribute; may be null if none is available
+     * @see #setDisplayNameKey(String)
+     * @see #getDisplayName()
+     * @see #getResourceFile()
+     * @generated NOT
+     * @since 3.2.3
+     */
+    String getDisplayNameKey();
+
+    /**
+     * Sets the resource key of the '{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getDisplayName <em>Display Name</em>}' attribute.
+     * @param value  the new resource key of the '<em>Display Name</em>' attribute;
+     *              may be null to reset
+     * @see #getDisplayNameKey()
+     * @see #setDisplayName(String)
+     * @see #getResourceFile()
+     * @generated NOT
+     * @since 3.2.3
+     */
+    void setDisplayNameKey( String value );
+
+    /**
+     * Returns the value of the '<em><b>Public Properties</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Properties specific to the underlying data source connection.  Public property values can be visible and editable in the host designer.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Public Properties</em>' containment reference.
+     * @see #setPublicProperties(Properties)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataSourceDesign_PublicProperties()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='publicProperties' namespace='##targetNamespace'"
+     * @generated
+     */
+    Properties getPublicProperties();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getPublicProperties <em>Public Properties</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Public Properties</em>' containment reference.
+     * @see #getPublicProperties()
+     * @generated
+     */
+    void setPublicProperties( Properties value );
+
+    /**
+     * Returns the value of the '<em><b>Private Properties</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Private properties specific to the underlying data source connection.  Their definitions are private to the ODA designer, i.e. must not be visible nor editable by the host designer.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Private Properties</em>' containment reference.
+     * @see #setPrivateProperties(Properties)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataSourceDesign_PrivateProperties()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='privateProperties' namespace='##targetNamespace'"
+     * @generated
+     */
+    Properties getPrivateProperties();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getPrivateProperties <em>Private Properties</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Private Properties</em>' containment reference.
+     * @see #getPrivateProperties()
+     * @generated
+     */
+    void setPrivateProperties( Properties value );
+
+    /**
+     * Returns the value of the '<em><b>Linked Profile Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The name of a linked connection profile.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Linked Profile Name</em>' attribute.
+     * @see #setLinkedProfileName(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataSourceDesign_LinkedProfileName()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String"
+     *        extendedMetaData="kind='element' name='linkedProfileName' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getLinkedProfileName();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getLinkedProfileName <em>Linked Profile Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Linked Profile Name</em>' attribute.
+     * @see #getLinkedProfileName()
+     * @generated
+     */
+    void setLinkedProfileName( String value );
+
+    /**
+     * Returns the value of the '<em><b>Linked Profile Store File Path</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The full path name of a linked connection profiles storage file where the linked profile is to be located at run-time.  A null value indicates to use the default DTP profiles storage file.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Linked Profile Store File Path</em>' attribute.
+     * @see #setLinkedProfileStoreFilePath(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataSourceDesign_LinkedProfileStoreFilePath()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String"
+     *        extendedMetaData="kind='element' name='linkedProfileStoreFilePath' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getLinkedProfileStoreFilePath();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getLinkedProfileStoreFilePath <em>Linked Profile Store File Path</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Linked Profile Store File Path</em>' attribute.
+     * @see #getLinkedProfileStoreFilePath()
+     * @generated
+     */
+    void setLinkedProfileStoreFilePath( String value );
+
+    /**
+     * Returns the value of the '<em><b>Host Resource Identifiers</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The resource identifiers of the ODA host application that initiates the ODA design session request.  An ODA host application may optionally specify its resource identifiers for reference by an ODA designer.   Its support and usage by a custom ODA designer is optional and implementation-dependent.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Host Resource Identifiers</em>' containment reference.
+     * @see #setHostResourceIdentifiers(ResourceIdentifiers)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataSourceDesign_HostResourceIdentifiers()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='hostResourceIdentifiers' namespace='##targetNamespace'"
+     * @generated
+     * @since DTP 1.6.1
+     */
+    ResourceIdentifiers getHostResourceIdentifiers();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getHostResourceIdentifiers <em>Host Resource Identifiers</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Host Resource Identifiers</em>' containment reference.
+     * @see #getHostResourceIdentifiers()
+     * @generated
+     * @since DTP 1.6.1
+     */
+    void setHostResourceIdentifiers( ResourceIdentifiers value );
+
+    /**
+     * Returns the value of the '<em><b>Resource File</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The base name of a resource file for all localizable design attributes. The file name must end with .properties, and must locate relative to one of the host resource identifiers.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Resource File</em>' attribute.
+     * @see #setResourceFile(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDataSourceDesign_ResourceFile()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String"
+     *        extendedMetaData="kind='element' name='resourceFile' namespace='##targetNamespace'"
+     * @generated
+     * @since 3.2.3
+     */
+    String getResourceFile();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getResourceFile <em>Resource File</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Resource File</em>' attribute.
+     * @see #getResourceFile()
+     * @generated
+     * @since 3.2.3
+     */
+    void setResourceFile( String value );
+
+    /**
+     * Returns the profile storage file
+     * where the linked profile is stored.
+     * @return  the linked profile storage file,
+     *          or null value if no profile store is set
+     * @see #getLinkedProfileStoreFilePath()
+     * @see #setLinkedProfileStoreFile(File)
+     * @generated NOT
+     */
+    File getLinkedProfileStoreFile();
+
+    /**
+     * Sets the profile storage file
+     * where the linked profile is stored.
+     * @param storageFile the profile storage file;
+     *                  null value unsets any linked profile store
+     * @see #getLinkedProfileStoreFile()
+     * @see #getLinkedProfileStoreFilePath()
+     * @generated NOT
+     */
+    void setLinkedProfileStoreFile( File storageFile );
+
+    /**
+     * Indicates whether the data source design has a link
+     * to an external connection profile in a profile store.
+     * @return  true if a link is specified; false otherwise
+     * @generated NOT
+     */
+    boolean hasLinkToProfile();
+
+} // DataSourceDesign
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DesignFactory.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DesignFactory.java
new file mode 100644
index 0000000..9bce75d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DesignFactory.java
@@ -0,0 +1,621 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DesignFactory.java,v 1.13 2010/06/10 23:40:04 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage
+ * @generated
+ */
+public interface DesignFactory extends EFactory
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The singleton instance of the factory.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    DesignFactory eINSTANCE = org.eclipse.datatools.connectivity.oda.design.impl.DesignFactoryImpl
+            .init();
+
+    /**
+     * Returns a new object of class '<em>And Expression</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>And Expression</em>'.
+     * @generated
+     */
+    AndExpression createAndExpression();
+
+    /**
+     * Returns a new object of class '<em>Atomic Expression Context</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Atomic Expression Context</em>'.
+     * @generated
+     */
+    AtomicExpressionContext createAtomicExpressionContext();
+
+    /**
+     * Returns a new object of class '<em>Axis Attributes</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Axis Attributes</em>'.
+     * @generated
+     */
+    AxisAttributes createAxisAttributes();
+
+    /**
+     * Returns a new object of class '<em>Column Definition</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Column Definition</em>'.
+     * @generated
+     */
+    ColumnDefinition createColumnDefinition();
+
+    /**
+     * Returns a new object of class '<em>Composite Filter Expression</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Composite Filter Expression</em>'.
+     * @generated
+     */
+    CompositeFilterExpression createCompositeFilterExpression();
+
+    /**
+     * Returns a new object of class '<em>Custom Data</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Custom Data</em>'.
+     * @generated
+     */
+    CustomData createCustomData();
+
+    /**
+     * Returns a new object of class '<em>Custom Filter Expression</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Custom Filter Expression</em>'.
+     * @generated
+     */
+    CustomFilterExpression createCustomFilterExpression();
+
+    /**
+     * Returns a new object of class '<em>Data Access Design</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Data Access Design</em>'.
+     * @generated
+     */
+    DataAccessDesign createDataAccessDesign();
+
+    /**
+     * Returns a new object of class '<em>Data Element Attributes</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Data Element Attributes</em>'.
+     * @generated
+     */
+    DataElementAttributes createDataElementAttributes();
+
+    /**
+     * Returns a new object of class '<em>Data Element Identifier</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Data Element Identifier</em>'.
+     * @generated
+     */
+    DataElementIdentifier createDataElementIdentifier();
+
+    /**
+     * Returns a new object of class '<em>Data Element Identifiers</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Data Element Identifiers</em>'.
+     * @generated
+     */
+    DataElementIdentifiers createDataElementIdentifiers();
+
+    /**
+     * Returns a new object of class '<em>Data Element UI Hints</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Data Element UI Hints</em>'.
+     * @generated
+     */
+    DataElementUIHints createDataElementUIHints();
+
+    /**
+     * Returns a new object of class '<em>Data Set Design</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Data Set Design</em>'.
+     * @generated
+     */
+    DataSetDesign createDataSetDesign();
+
+    /**
+     * Returns a new object of class '<em>Data Set Parameters</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Data Set Parameters</em>'.
+     * @generated
+     */
+    DataSetParameters createDataSetParameters();
+
+    /**
+     * Returns a new object of class '<em>Data Set Query</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Data Set Query</em>'.
+     * @generated
+     */
+    DataSetQuery createDataSetQuery();
+
+    /**
+     * Returns a new object of class '<em>Data Source Design</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Data Source Design</em>'.
+     * @generated
+     */
+    DataSourceDesign createDataSourceDesign();
+
+    /**
+     * Returns a new object of class '<em>Designer State</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Designer State</em>'.
+     * @generated
+     */
+    DesignerState createDesignerState();
+
+    /**
+     * Returns a new object of class '<em>Designer State Content</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Designer State Content</em>'.
+     * @generated
+     */
+    DesignerStateContent createDesignerStateContent();
+
+    /**
+     * Returns a new object of class '<em>Session Request</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Session Request</em>'.
+     * @generated
+     */
+    DesignSessionRequest createDesignSessionRequest();
+
+    /**
+     * Returns a new object of class '<em>Session Response</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Session Response</em>'.
+     * @generated
+     */
+    DesignSessionResponse createDesignSessionResponse();
+
+    /**
+     * Returns a new object of class '<em>Document Root</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Document Root</em>'.
+     * @generated
+     */
+    DocumentRoot createDocumentRoot();
+
+    /**
+     * Returns a new object of class '<em>Dynamic Filter Expression</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Dynamic Filter Expression</em>'.
+     * @generated
+     */
+    DynamicFilterExpression createDynamicFilterExpression();
+
+    /**
+     * Returns a new object of class '<em>Dynamic Values Query</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Dynamic Values Query</em>'.
+     * @generated
+     */
+    DynamicValuesQuery createDynamicValuesQuery();
+
+    /**
+     * Returns a new object of class '<em>Expression Arguments</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Expression Arguments</em>'.
+     * @generated
+     */
+    ExpressionArguments createExpressionArguments();
+
+    /**
+     * Returns a new object of class '<em>Expression Parameter Definition</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Expression Parameter Definition</em>'.
+     * @generated
+     */
+    ExpressionParameterDefinition createExpressionParameterDefinition();
+
+    /**
+     * Returns a new object of class '<em>Expression Parameters</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Expression Parameters</em>'.
+     * @generated
+     */
+    ExpressionParameters createExpressionParameters();
+
+    /**
+     * Returns a new object of class '<em>Expression Variable</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Expression Variable</em>'.
+     * @generated
+     */
+    ExpressionVariable createExpressionVariable();
+
+    /**
+     * Returns a new object of class '<em>Filter Expression Type</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Filter Expression Type</em>'.
+     * @generated
+     */
+    FilterExpressionType createFilterExpressionType();
+
+    /**
+     * Returns a new object of class '<em>Input Element Attributes</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Input Element Attributes</em>'.
+     * @generated
+     */
+    InputElementAttributes createInputElementAttributes();
+
+    /**
+     * Returns a new object of class '<em>Input Element UI Hints</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Input Element UI Hints</em>'.
+     * @generated
+     */
+    InputElementUIHints createInputElementUIHints();
+
+    /**
+     * Returns a new object of class '<em>Input Parameter Attributes</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Input Parameter Attributes</em>'.
+     * @generated
+     */
+    InputParameterAttributes createInputParameterAttributes();
+
+    /**
+     * Returns a new object of class '<em>Input Parameter UI Hints</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Input Parameter UI Hints</em>'.
+     * @generated
+     */
+    InputParameterUIHints createInputParameterUIHints();
+
+    /**
+     * Returns a new object of class '<em>Locale</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Locale</em>'.
+     * @generated
+     */
+    Locale createLocale();
+
+    /**
+     * Returns a new object of class '<em>Name Value Pair</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Name Value Pair</em>'.
+     * @generated
+     */
+    NameValuePair createNameValuePair();
+
+    /**
+     * Returns a new object of class '<em>Not Expression</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Not Expression</em>'.
+     * @generated
+     */
+    NotExpression createNotExpression();
+
+    /**
+     * Returns a new object of class '<em>Oda Design Session</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Oda Design Session</em>'.
+     * @generated
+     */
+    OdaDesignSession createOdaDesignSession();
+
+    /**
+     * Returns a new object of class '<em>Or Expression</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Or Expression</em>'.
+     * @generated
+     */
+    OrExpression createOrExpression();
+
+    /**
+     * Returns a new object of class '<em>Output Element Attributes</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Output Element Attributes</em>'.
+     * @generated
+     */
+    OutputElementAttributes createOutputElementAttributes();
+
+    /**
+     * Returns a new object of class '<em>Parameter Definition</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Parameter Definition</em>'.
+     * @generated
+     */
+    ParameterDefinition createParameterDefinition();
+
+    /**
+     * Returns a new object of class '<em>Parameter Field Definition</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Parameter Field Definition</em>'.
+     * @generated
+     */
+    ParameterFieldDefinition createParameterFieldDefinition();
+
+    /**
+     * Returns a new object of class '<em>Parameter Fields</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Parameter Fields</em>'.
+     * @generated
+     */
+    ParameterFields createParameterFields();
+
+    /**
+     * Returns a new object of class '<em>Properties</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Properties</em>'.
+     * @generated
+     */
+    Properties createProperties();
+
+    /**
+     * Returns a new object of class '<em>Property</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Property</em>'.
+     * @generated
+     */
+    Property createProperty();
+
+    /**
+     * Returns a new object of class '<em>Property Attributes</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Property Attributes</em>'.
+     * @generated
+     */
+    PropertyAttributes createPropertyAttributes();
+
+    /**
+     * Returns a new object of class '<em>Resource Identifiers</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Resource Identifiers</em>'.
+     * @generated
+     */
+    ResourceIdentifiers createResourceIdentifiers();
+
+    /**
+     * Returns a new object of class '<em>Result Set Columns</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Result Set Columns</em>'.
+     * @generated
+     */
+    ResultSetColumns createResultSetColumns();
+
+    /**
+     * Returns a new object of class '<em>Result Set Criteria</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Result Set Criteria</em>'.
+     * @generated
+     */
+    ResultSetCriteria createResultSetCriteria();
+
+    /**
+     * Returns a new object of class '<em>Result Set Definition</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Result Set Definition</em>'.
+     * @generated
+     */
+    ResultSetDefinition createResultSetDefinition();
+
+    /**
+     * Returns a new object of class '<em>Result Sets</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Result Sets</em>'.
+     * @generated
+     */
+    ResultSets createResultSets();
+
+    /**
+     * Returns a new object of class '<em>Result Subset</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Result Subset</em>'.
+     * @generated
+     */
+    ResultSubset createResultSubset();
+
+    /**
+     * Returns a new object of class '<em>Scalar Value Choices</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Scalar Value Choices</em>'.
+     * @generated
+     */
+    ScalarValueChoices createScalarValueChoices();
+
+    /**
+     * Returns a new object of class '<em>Scalar Value Definition</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Scalar Value Definition</em>'.
+     * @generated
+     */
+    ScalarValueDefinition createScalarValueDefinition();
+
+    /**
+     * Returns a new object of class '<em>Sort Key</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Sort Key</em>'.
+     * @generated
+     */
+    SortKey createSortKey();
+
+    /**
+     * Returns a new object of class '<em>Sort Specification</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Sort Specification</em>'.
+     * @generated
+     */
+    SortSpecification createSortSpecification();
+
+    /**
+     * Returns a new object of class '<em>Static Values</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Static Values</em>'.
+     * @generated
+     */
+    StaticValues createStaticValues();
+
+    /**
+     * Returns a new object of class '<em>Value Format Hints</em>'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return a new object of class '<em>Value Format Hints</em>'.
+     * @generated
+     */
+    ValueFormatHints createValueFormatHints();
+
+    /**
+     * Returns the package supported by this factory.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the package supported by this factory.
+     * @generated
+     */
+    DesignPackage getDesignPackage();
+
+    /**
+     * Creates and returns a new object of class '<em>Session Request</em>'
+     * that contains the given DataSourceDesign.
+     * <br>This may be used by an ODA host designer to create 
+     * a design session request to create/edit a 
+     * data source design definition.
+     * @param   dataSourceDesign    the data source design to edit;
+     *                              may be null for a request to
+     *                              create a new data source design
+     * @return a new object of class '<em>Session Request</em>'.
+     * @see #createDesignSessionRequest()
+     * @generated NOT
+     */
+    DesignSessionRequest createDesignSessionRequest(
+            DataSourceDesign dataSourceDesign );
+
+    /**
+     * Creates and returns a new object of class '<em>Session Request</em>'
+     * that contains the given DataSetDesign.
+     * <br>This may be used by an ODA host designer to create 
+     * a design session request to edit a 
+     * data set design definition.
+     * @param   dataSetDesign    the data set design to edit
+     * @return a new object of class '<em>Session Request</em>'.
+     * @see #createDesignSessionRequest()
+     * @generated NOT
+     */
+    DesignSessionRequest createDesignSessionRequest( DataSetDesign dataSetDesign );
+
+    /**
+     * Creates and returns an OdaDesignSession instance with a 
+     * DesignSessionRequest that contains the given DataSourceDesign.
+     * <br>This may be used by an ODA host designer to create 
+     * a design session instance, for use to create/edit a 
+     * data source design definition,
+     * or to create a new data set design with a given data source design.
+     * @param   dataSourceDesign    the data source design to edit;
+     *                              may be null for a session to
+     *                              create a new data source design
+     * @see #createDesignSessionRequest(DataSourceDesign)
+     * @generated NOT
+     */
+    OdaDesignSession createRequestDesignSession(
+            DataSourceDesign dataSourceDesign );
+
+    /**
+     * Creates and returns a new OdaDesignSession instance with a
+     * DesignSessionResponse that contains the given session status
+     * and DataSourceDesign.
+     * <br>This method may be used by an ODA driver's design UI extension
+     * to create a new design session instance with a response that contains
+     * a new or edited data source design definition.
+     * <br>The returned session instance also includes an appropriate
+     * DesignSessionRequest to meet the contract for API objects content.
+     * @param isSessionOk
+     * @param dataSourceDesign
+     * @return
+     * @generated NOT
+     */
+    OdaDesignSession createResponseDesignSession( boolean isSessionOk,
+            DataSourceDesign dataSourceDesign );
+
+} //DesignFactory
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DesignPackage.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DesignPackage.java
new file mode 100644
index 0000000..ac7f28a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DesignPackage.java
@@ -0,0 +1,7648 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DesignPackage.java,v 1.15 2010/10/15 05:41:37 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface DesignPackage extends EPackage
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2011 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The package name.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String eNAME = "design"; //$NON-NLS-1$
+
+    /**
+     * The package namespace URI.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String eNS_URI = "http://www.eclipse.org/datatools/connectivity/oda/design"; //$NON-NLS-1$
+
+    /**
+     * The package namespace name.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String eNS_PREFIX = "design"; //$NON-NLS-1$
+
+    /**
+     * The singleton instance of the package.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    DesignPackage eINSTANCE = org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl
+            .init();
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.FilterExpressionImpl <em>Filter Expression</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.FilterExpressionImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getFilterExpression()
+     * @generated
+     */
+    int FILTER_EXPRESSION = 27;
+
+    /**
+     * The feature id for the '<em><b>Negatable</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int FILTER_EXPRESSION__NEGATABLE = 0;
+
+    /**
+     * The number of structural features of the '<em>Filter Expression</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int FILTER_EXPRESSION_FEATURE_COUNT = 1;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.CompositeFilterExpressionImpl <em>Composite Filter Expression</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.CompositeFilterExpressionImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getCompositeFilterExpression()
+     * @generated
+     */
+    int COMPOSITE_FILTER_EXPRESSION = 4;
+
+    /**
+     * The feature id for the '<em><b>Negatable</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int COMPOSITE_FILTER_EXPRESSION__NEGATABLE = FILTER_EXPRESSION__NEGATABLE;
+
+    /**
+     * The feature id for the '<em><b>Children</b></em>' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int COMPOSITE_FILTER_EXPRESSION__CHILDREN = FILTER_EXPRESSION_FEATURE_COUNT + 0;
+
+    /**
+     * The number of structural features of the '<em>Composite Filter Expression</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int COMPOSITE_FILTER_EXPRESSION_FEATURE_COUNT = FILTER_EXPRESSION_FEATURE_COUNT + 1;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.AndExpressionImpl <em>And Expression</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.AndExpressionImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getAndExpression()
+     * @generated
+     */
+    int AND_EXPRESSION = 0;
+
+    /**
+     * The feature id for the '<em><b>Negatable</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int AND_EXPRESSION__NEGATABLE = COMPOSITE_FILTER_EXPRESSION__NEGATABLE;
+
+    /**
+     * The feature id for the '<em><b>Children</b></em>' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int AND_EXPRESSION__CHILDREN = COMPOSITE_FILTER_EXPRESSION__CHILDREN;
+
+    /**
+     * The number of structural features of the '<em>And Expression</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int AND_EXPRESSION_FEATURE_COUNT = COMPOSITE_FILTER_EXPRESSION_FEATURE_COUNT + 0;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.AtomicExpressionContextImpl <em>Atomic Expression Context</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.AtomicExpressionContextImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getAtomicExpressionContext()
+     * @generated
+     */
+    int ATOMIC_EXPRESSION_CONTEXT = 1;
+
+    /**
+     * The feature id for the '<em><b>Optional</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int ATOMIC_EXPRESSION_CONTEXT__OPTIONAL = 0;
+
+    /**
+     * The feature id for the '<em><b>Variable</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int ATOMIC_EXPRESSION_CONTEXT__VARIABLE = 1;
+
+    /**
+     * The feature id for the '<em><b>Arguments</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int ATOMIC_EXPRESSION_CONTEXT__ARGUMENTS = 2;
+
+    /**
+     * The number of structural features of the '<em>Atomic Expression Context</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int ATOMIC_EXPRESSION_CONTEXT_FEATURE_COUNT = 3;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.AxisAttributesImpl <em>Axis Attributes</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.AxisAttributesImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getAxisAttributes()
+     * @generated
+     */
+    int AXIS_ATTRIBUTES = 2;
+
+    /**
+     * The feature id for the '<em><b>Axis Type</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int AXIS_ATTRIBUTES__AXIS_TYPE = 0;
+
+    /**
+     * The feature id for the '<em><b>On Column Layout</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int AXIS_ATTRIBUTES__ON_COLUMN_LAYOUT = 1;
+
+    /**
+     * The feature id for the '<em><b>Related Columns</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int AXIS_ATTRIBUTES__RELATED_COLUMNS = 2;
+
+    /**
+     * The number of structural features of the '<em>Axis Attributes</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int AXIS_ATTRIBUTES_FEATURE_COUNT = 3;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ColumnDefinitionImpl <em>Column Definition</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.ColumnDefinitionImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getColumnDefinition()
+     * @generated
+     */
+    int COLUMN_DEFINITION = 3;
+
+    /**
+     * The feature id for the '<em><b>Attributes</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int COLUMN_DEFINITION__ATTRIBUTES = 0;
+
+    /**
+     * The feature id for the '<em><b>Usage Hints</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int COLUMN_DEFINITION__USAGE_HINTS = 1;
+
+    /**
+     * The feature id for the '<em><b>Multi Dimension Attributes</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int COLUMN_DEFINITION__MULTI_DIMENSION_ATTRIBUTES = 2;
+
+    /**
+     * The number of structural features of the '<em>Column Definition</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int COLUMN_DEFINITION_FEATURE_COUNT = 3;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.CustomDataImpl <em>Custom Data</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.CustomDataImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getCustomData()
+     * @generated
+     */
+    int CUSTOM_DATA = 5;
+
+    /**
+     * The feature id for the '<em><b>Provider Id</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int CUSTOM_DATA__PROVIDER_ID = 0;
+
+    /**
+     * The feature id for the '<em><b>Value</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int CUSTOM_DATA__VALUE = 1;
+
+    /**
+     * The feature id for the '<em><b>Display Value</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int CUSTOM_DATA__DISPLAY_VALUE = 2;
+
+    /**
+     * The number of structural features of the '<em>Custom Data</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int CUSTOM_DATA_FEATURE_COUNT = 3;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.CustomFilterExpressionImpl <em>Custom Filter Expression</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.CustomFilterExpressionImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getCustomFilterExpression()
+     * @generated
+     */
+    int CUSTOM_FILTER_EXPRESSION = 6;
+
+    /**
+     * The feature id for the '<em><b>Negatable</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int CUSTOM_FILTER_EXPRESSION__NEGATABLE = FILTER_EXPRESSION__NEGATABLE;
+
+    /**
+     * The feature id for the '<em><b>Type</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int CUSTOM_FILTER_EXPRESSION__TYPE = FILTER_EXPRESSION_FEATURE_COUNT + 0;
+
+    /**
+     * The feature id for the '<em><b>Context</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int CUSTOM_FILTER_EXPRESSION__CONTEXT = FILTER_EXPRESSION_FEATURE_COUNT + 1;
+
+    /**
+     * The number of structural features of the '<em>Custom Filter Expression</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int CUSTOM_FILTER_EXPRESSION_FEATURE_COUNT = FILTER_EXPRESSION_FEATURE_COUNT + 2;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DataAccessDesignImpl <em>Data Access Design</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DataAccessDesignImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDataAccessDesign()
+     * @generated
+     */
+    int DATA_ACCESS_DESIGN = 7;
+
+    /**
+     * The feature id for the '<em><b>Data Set Design</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_ACCESS_DESIGN__DATA_SET_DESIGN = 0;
+
+    /**
+     * The number of structural features of the '<em>Data Access Design</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_ACCESS_DESIGN_FEATURE_COUNT = 1;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DataElementAttributesImpl <em>Data Element Attributes</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DataElementAttributesImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDataElementAttributes()
+     * @generated
+     */
+    int DATA_ELEMENT_ATTRIBUTES = 8;
+
+    /**
+     * The feature id for the '<em><b>Identifier</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_ELEMENT_ATTRIBUTES__IDENTIFIER = 0;
+
+    /**
+     * The feature id for the '<em><b>Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_ELEMENT_ATTRIBUTES__NAME = 1;
+
+    /**
+     * The feature id for the '<em><b>Position</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_ELEMENT_ATTRIBUTES__POSITION = 2;
+
+    /**
+     * The feature id for the '<em><b>Native Data Type Code</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_ELEMENT_ATTRIBUTES__NATIVE_DATA_TYPE_CODE = 3;
+
+    /**
+     * The feature id for the '<em><b>Precision</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_ELEMENT_ATTRIBUTES__PRECISION = 4;
+
+    /**
+     * The feature id for the '<em><b>Scale</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_ELEMENT_ATTRIBUTES__SCALE = 5;
+
+    /**
+     * The feature id for the '<em><b>Nullability</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_ELEMENT_ATTRIBUTES__NULLABILITY = 6;
+
+    /**
+     * The feature id for the '<em><b>Ui Hints</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_ELEMENT_ATTRIBUTES__UI_HINTS = 7;
+
+    /**
+     * The number of structural features of the '<em>Data Element Attributes</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_ELEMENT_ATTRIBUTES_FEATURE_COUNT = 8;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DataElementIdentifierImpl <em>Data Element Identifier</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DataElementIdentifierImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDataElementIdentifier()
+     * @generated
+     */
+    int DATA_ELEMENT_IDENTIFIER = 9;
+
+    /**
+     * The feature id for the '<em><b>Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_ELEMENT_IDENTIFIER__NAME = 0;
+
+    /**
+     * The feature id for the '<em><b>Position</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_ELEMENT_IDENTIFIER__POSITION = 1;
+
+    /**
+     * The number of structural features of the '<em>Data Element Identifier</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_ELEMENT_IDENTIFIER_FEATURE_COUNT = 2;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DataElementIdentifiersImpl <em>Data Element Identifiers</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DataElementIdentifiersImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDataElementIdentifiers()
+     * @generated
+     */
+    int DATA_ELEMENT_IDENTIFIERS = 10;
+
+    /**
+     * The feature id for the '<em><b>Identifiers</b></em>' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_ELEMENT_IDENTIFIERS__IDENTIFIERS = 0;
+
+    /**
+     * The number of structural features of the '<em>Data Element Identifiers</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_ELEMENT_IDENTIFIERS_FEATURE_COUNT = 1;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DataElementUIHintsImpl <em>Data Element UI Hints</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DataElementUIHintsImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDataElementUIHints()
+     * @generated
+     */
+    int DATA_ELEMENT_UI_HINTS = 11;
+
+    /**
+     * The feature id for the '<em><b>Display Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_ELEMENT_UI_HINTS__DISPLAY_NAME = 0;
+
+    /**
+     * The feature id for the '<em><b>Description</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_ELEMENT_UI_HINTS__DESCRIPTION = 1;
+
+    /**
+     * The number of structural features of the '<em>Data Element UI Hints</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_ELEMENT_UI_HINTS_FEATURE_COUNT = 2;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSetDesignImpl <em>Data Set Design</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DataSetDesignImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDataSetDesign()
+     * @generated
+     */
+    int DATA_SET_DESIGN = 12;
+
+    /**
+     * The feature id for the '<em><b>Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SET_DESIGN__NAME = 0;
+
+    /**
+     * The feature id for the '<em><b>Oda Extension Data Set Id</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SET_DESIGN__ODA_EXTENSION_DATA_SET_ID = 1;
+
+    /**
+     * The feature id for the '<em><b>Data Source Design</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SET_DESIGN__DATA_SOURCE_DESIGN = 2;
+
+    /**
+     * The feature id for the '<em><b>Query</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SET_DESIGN__QUERY = 3;
+
+    /**
+     * The feature id for the '<em><b>Display Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SET_DESIGN__DISPLAY_NAME = 4;
+
+    /**
+     * The feature id for the '<em><b>Public Properties</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SET_DESIGN__PUBLIC_PROPERTIES = 5;
+
+    /**
+     * The feature id for the '<em><b>Private Properties</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SET_DESIGN__PRIVATE_PROPERTIES = 6;
+
+    /**
+     * The feature id for the '<em><b>Result Sets</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SET_DESIGN__RESULT_SETS = 7;
+
+    /**
+     * The feature id for the '<em><b>Primary Result Set Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SET_DESIGN__PRIMARY_RESULT_SET_NAME = 8;
+
+    /**
+     * The feature id for the '<em><b>Parameters</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SET_DESIGN__PARAMETERS = 9;
+
+    /**
+     * The number of structural features of the '<em>Data Set Design</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SET_DESIGN_FEATURE_COUNT = 10;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSetParametersImpl <em>Data Set Parameters</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DataSetParametersImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDataSetParameters()
+     * @generated
+     */
+    int DATA_SET_PARAMETERS = 13;
+
+    /**
+     * The feature id for the '<em><b>Parameter Definitions</b></em>' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SET_PARAMETERS__PARAMETER_DEFINITIONS = 0;
+
+    /**
+     * The feature id for the '<em><b>Derived Meta Data</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SET_PARAMETERS__DERIVED_META_DATA = 1;
+
+    /**
+     * The number of structural features of the '<em>Data Set Parameters</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SET_PARAMETERS_FEATURE_COUNT = 2;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSetQueryImpl <em>Data Set Query</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DataSetQueryImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDataSetQuery()
+     * @generated
+     */
+    int DATA_SET_QUERY = 14;
+
+    /**
+     * The feature id for the '<em><b>Query Text</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SET_QUERY__QUERY_TEXT = 0;
+
+    /**
+     * The number of structural features of the '<em>Data Set Query</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SET_QUERY_FEATURE_COUNT = 1;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSourceDesignImpl <em>Data Source Design</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DataSourceDesignImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDataSourceDesign()
+     * @generated
+     */
+    int DATA_SOURCE_DESIGN = 15;
+
+    /**
+     * The feature id for the '<em><b>Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SOURCE_DESIGN__NAME = 0;
+
+    /**
+     * The feature id for the '<em><b>Oda Extension Id</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SOURCE_DESIGN__ODA_EXTENSION_ID = 1;
+
+    /**
+     * The feature id for the '<em><b>Effective Oda Extension Id</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SOURCE_DESIGN__EFFECTIVE_ODA_EXTENSION_ID = 2;
+
+    /**
+     * The feature id for the '<em><b>Oda Extension Data Source Id</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SOURCE_DESIGN__ODA_EXTENSION_DATA_SOURCE_ID = 3;
+
+    /**
+     * The feature id for the '<em><b>Display Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SOURCE_DESIGN__DISPLAY_NAME = 4;
+
+    /**
+     * The feature id for the '<em><b>Public Properties</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SOURCE_DESIGN__PUBLIC_PROPERTIES = 5;
+
+    /**
+     * The feature id for the '<em><b>Private Properties</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SOURCE_DESIGN__PRIVATE_PROPERTIES = 6;
+
+    /**
+     * The feature id for the '<em><b>Linked Profile Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SOURCE_DESIGN__LINKED_PROFILE_NAME = 7;
+
+    /**
+     * The feature id for the '<em><b>Linked Profile Store File Path</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SOURCE_DESIGN__LINKED_PROFILE_STORE_FILE_PATH = 8;
+
+    /**
+     * The feature id for the '<em><b>Host Resource Identifiers</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SOURCE_DESIGN__HOST_RESOURCE_IDENTIFIERS = 9;
+
+    /**
+     * The feature id for the '<em><b>Resource File</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SOURCE_DESIGN__RESOURCE_FILE = 10;
+
+    /**
+     * The number of structural features of the '<em>Data Source Design</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SOURCE_DESIGN_FEATURE_COUNT = 11;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DesignerStateImpl <em>Designer State</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignerStateImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDesignerState()
+     * @generated
+     */
+    int DESIGNER_STATE = 16;
+
+    /**
+     * The feature id for the '<em><b>Version</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DESIGNER_STATE__VERSION = 0;
+
+    /**
+     * The feature id for the '<em><b>State Content</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DESIGNER_STATE__STATE_CONTENT = 1;
+
+    /**
+     * The number of structural features of the '<em>Designer State</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DESIGNER_STATE_FEATURE_COUNT = 2;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DesignerStateContentImpl <em>Designer State Content</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignerStateContentImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDesignerStateContent()
+     * @generated
+     */
+    int DESIGNER_STATE_CONTENT = 17;
+
+    /**
+     * The feature id for the '<em><b>State Content As String</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DESIGNER_STATE_CONTENT__STATE_CONTENT_AS_STRING = 0;
+
+    /**
+     * The feature id for the '<em><b>State Content As Blob</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DESIGNER_STATE_CONTENT__STATE_CONTENT_AS_BLOB = 1;
+
+    /**
+     * The number of structural features of the '<em>Designer State Content</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DESIGNER_STATE_CONTENT_FEATURE_COUNT = 2;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DesignSessionRequestImpl <em>Session Request</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignSessionRequestImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDesignSessionRequest()
+     * @generated
+     */
+    int DESIGN_SESSION_REQUEST = 18;
+
+    /**
+     * The feature id for the '<em><b>Data Access Design</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DESIGN_SESSION_REQUEST__DATA_ACCESS_DESIGN = 0;
+
+    /**
+     * The feature id for the '<em><b>Editable</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DESIGN_SESSION_REQUEST__EDITABLE = 1;
+
+    /**
+     * The feature id for the '<em><b>Session Locale</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DESIGN_SESSION_REQUEST__SESSION_LOCALE = 2;
+
+    /**
+     * The feature id for the '<em><b>Designer State</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DESIGN_SESSION_REQUEST__DESIGNER_STATE = 3;
+
+    /**
+     * The number of structural features of the '<em>Session Request</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DESIGN_SESSION_REQUEST_FEATURE_COUNT = 4;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DesignSessionResponseImpl <em>Session Response</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignSessionResponseImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDesignSessionResponse()
+     * @generated
+     */
+    int DESIGN_SESSION_RESPONSE = 19;
+
+    /**
+     * The feature id for the '<em><b>Session Status</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DESIGN_SESSION_RESPONSE__SESSION_STATUS = 0;
+
+    /**
+     * The feature id for the '<em><b>Data Access Design</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DESIGN_SESSION_RESPONSE__DATA_ACCESS_DESIGN = 1;
+
+    /**
+     * The feature id for the '<em><b>Designer State</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DESIGN_SESSION_RESPONSE__DESIGNER_STATE = 2;
+
+    /**
+     * The number of structural features of the '<em>Session Response</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DESIGN_SESSION_RESPONSE_FEATURE_COUNT = 3;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DocumentRootImpl <em>Document Root</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DocumentRootImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDocumentRoot()
+     * @generated
+     */
+    int DOCUMENT_ROOT = 20;
+
+    /**
+     * The feature id for the '<em><b>Mixed</b></em>' attribute list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DOCUMENT_ROOT__MIXED = 0;
+
+    /**
+     * The feature id for the '<em><b>XMLNS Prefix Map</b></em>' map.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DOCUMENT_ROOT__XMLNS_PREFIX_MAP = 1;
+
+    /**
+     * The feature id for the '<em><b>XSI Schema Location</b></em>' map.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DOCUMENT_ROOT__XSI_SCHEMA_LOCATION = 2;
+
+    /**
+     * The feature id for the '<em><b>Oda Design Session</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DOCUMENT_ROOT__ODA_DESIGN_SESSION = 3;
+
+    /**
+     * The number of structural features of the '<em>Document Root</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DOCUMENT_ROOT_FEATURE_COUNT = 4;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DynamicFilterExpressionImpl <em>Dynamic Filter Expression</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DynamicFilterExpressionImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDynamicFilterExpression()
+     * @generated
+     */
+    int DYNAMIC_FILTER_EXPRESSION = 21;
+
+    /**
+     * The feature id for the '<em><b>Negatable</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DYNAMIC_FILTER_EXPRESSION__NEGATABLE = FILTER_EXPRESSION__NEGATABLE;
+
+    /**
+     * The feature id for the '<em><b>Context</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DYNAMIC_FILTER_EXPRESSION__CONTEXT = FILTER_EXPRESSION_FEATURE_COUNT + 0;
+
+    /**
+     * The feature id for the '<em><b>Default Type</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DYNAMIC_FILTER_EXPRESSION__DEFAULT_TYPE = FILTER_EXPRESSION_FEATURE_COUNT + 1;
+
+    /**
+     * The number of structural features of the '<em>Dynamic Filter Expression</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DYNAMIC_FILTER_EXPRESSION_FEATURE_COUNT = FILTER_EXPRESSION_FEATURE_COUNT + 2;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DynamicValuesQueryImpl <em>Dynamic Values Query</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DynamicValuesQueryImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDynamicValuesQuery()
+     * @generated
+     */
+    int DYNAMIC_VALUES_QUERY = 22;
+
+    /**
+     * The feature id for the '<em><b>Data Set Design</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DYNAMIC_VALUES_QUERY__DATA_SET_DESIGN = 0;
+
+    /**
+     * The feature id for the '<em><b>Enabled</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DYNAMIC_VALUES_QUERY__ENABLED = 1;
+
+    /**
+     * The feature id for the '<em><b>Value Column Identifier</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DYNAMIC_VALUES_QUERY__VALUE_COLUMN_IDENTIFIER = 2;
+
+    /**
+     * The feature id for the '<em><b>Value Column</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DYNAMIC_VALUES_QUERY__VALUE_COLUMN = 3;
+
+    /**
+     * The feature id for the '<em><b>Display Name Column</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DYNAMIC_VALUES_QUERY__DISPLAY_NAME_COLUMN = 4;
+
+    /**
+     * The number of structural features of the '<em>Dynamic Values Query</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DYNAMIC_VALUES_QUERY_FEATURE_COUNT = 5;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ExpressionArgumentsImpl <em>Expression Arguments</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.ExpressionArgumentsImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getExpressionArguments()
+     * @generated
+     */
+    int EXPRESSION_ARGUMENTS = 23;
+
+    /**
+     * The feature id for the '<em><b>Expression Parameters</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int EXPRESSION_ARGUMENTS__EXPRESSION_PARAMETERS = 0;
+
+    /**
+     * The number of structural features of the '<em>Expression Arguments</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int EXPRESSION_ARGUMENTS_FEATURE_COUNT = 1;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ExpressionParameterDefinitionImpl <em>Expression Parameter Definition</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.ExpressionParameterDefinitionImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getExpressionParameterDefinition()
+     * @generated
+     */
+    int EXPRESSION_PARAMETER_DEFINITION = 24;
+
+    /**
+     * The feature id for the '<em><b>Static Values</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int EXPRESSION_PARAMETER_DEFINITION__STATIC_VALUES = 0;
+
+    /**
+     * The feature id for the '<em><b>Dynamic Input Parameter</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int EXPRESSION_PARAMETER_DEFINITION__DYNAMIC_INPUT_PARAMETER = 1;
+
+    /**
+     * The number of structural features of the '<em>Expression Parameter Definition</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int EXPRESSION_PARAMETER_DEFINITION_FEATURE_COUNT = 2;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ExpressionParametersImpl <em>Expression Parameters</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.ExpressionParametersImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getExpressionParameters()
+     * @generated
+     */
+    int EXPRESSION_PARAMETERS = 25;
+
+    /**
+     * The feature id for the '<em><b>Parameter Definitions</b></em>' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int EXPRESSION_PARAMETERS__PARAMETER_DEFINITIONS = 0;
+
+    /**
+     * The number of structural features of the '<em>Expression Parameters</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int EXPRESSION_PARAMETERS_FEATURE_COUNT = 1;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ExpressionVariableImpl <em>Expression Variable</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.ExpressionVariableImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getExpressionVariable()
+     * @generated
+     */
+    int EXPRESSION_VARIABLE = 26;
+
+    /**
+     * The feature id for the '<em><b>Type</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int EXPRESSION_VARIABLE__TYPE = 0;
+
+    /**
+     * The feature id for the '<em><b>Identifier</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int EXPRESSION_VARIABLE__IDENTIFIER = 1;
+
+    /**
+     * The feature id for the '<em><b>Native Data Type Code</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int EXPRESSION_VARIABLE__NATIVE_DATA_TYPE_CODE = 2;
+
+    /**
+     * The number of structural features of the '<em>Expression Variable</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int EXPRESSION_VARIABLE_FEATURE_COUNT = 3;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.FilterExpressionTypeImpl <em>Filter Expression Type</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.FilterExpressionTypeImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getFilterExpressionType()
+     * @generated
+     */
+    int FILTER_EXPRESSION_TYPE = 28;
+
+    /**
+     * The feature id for the '<em><b>Declaring Extension Id</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int FILTER_EXPRESSION_TYPE__DECLARING_EXTENSION_ID = 0;
+
+    /**
+     * The feature id for the '<em><b>Id</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int FILTER_EXPRESSION_TYPE__ID = 1;
+
+    /**
+     * The number of structural features of the '<em>Filter Expression Type</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int FILTER_EXPRESSION_TYPE_FEATURE_COUNT = 2;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.InputElementAttributesImpl <em>Input Element Attributes</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.InputElementAttributesImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getInputElementAttributes()
+     * @generated
+     */
+    int INPUT_ELEMENT_ATTRIBUTES = 29;
+
+    /**
+     * The feature id for the '<em><b>Default Scalar Value</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int INPUT_ELEMENT_ATTRIBUTES__DEFAULT_SCALAR_VALUE = 0;
+
+    /**
+     * The feature id for the '<em><b>Default Values</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int INPUT_ELEMENT_ATTRIBUTES__DEFAULT_VALUES = 1;
+
+    /**
+     * The feature id for the '<em><b>Editable</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int INPUT_ELEMENT_ATTRIBUTES__EDITABLE = 2;
+
+    /**
+     * The feature id for the '<em><b>Optional</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int INPUT_ELEMENT_ATTRIBUTES__OPTIONAL = 3;
+
+    /**
+     * The feature id for the '<em><b>Masks Value</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int INPUT_ELEMENT_ATTRIBUTES__MASKS_VALUE = 4;
+
+    /**
+     * The feature id for the '<em><b>Static Value Choices</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int INPUT_ELEMENT_ATTRIBUTES__STATIC_VALUE_CHOICES = 5;
+
+    /**
+     * The feature id for the '<em><b>Dynamic Value Choices</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int INPUT_ELEMENT_ATTRIBUTES__DYNAMIC_VALUE_CHOICES = 6;
+
+    /**
+     * The feature id for the '<em><b>Ui Hints</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int INPUT_ELEMENT_ATTRIBUTES__UI_HINTS = 7;
+
+    /**
+     * The number of structural features of the '<em>Input Element Attributes</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int INPUT_ELEMENT_ATTRIBUTES_FEATURE_COUNT = 8;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.InputElementUIHintsImpl <em>Input Element UI Hints</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.InputElementUIHintsImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getInputElementUIHints()
+     * @generated
+     */
+    int INPUT_ELEMENT_UI_HINTS = 30;
+
+    /**
+     * The feature id for the '<em><b>Prompt Style</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int INPUT_ELEMENT_UI_HINTS__PROMPT_STYLE = 0;
+
+    /**
+     * The feature id for the '<em><b>Auto Suggest Threshold</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int INPUT_ELEMENT_UI_HINTS__AUTO_SUGGEST_THRESHOLD = 1;
+
+    /**
+     * The number of structural features of the '<em>Input Element UI Hints</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int INPUT_ELEMENT_UI_HINTS_FEATURE_COUNT = 2;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.InputParameterAttributesImpl <em>Input Parameter Attributes</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.InputParameterAttributesImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getInputParameterAttributes()
+     * @generated
+     */
+    int INPUT_PARAMETER_ATTRIBUTES = 31;
+
+    /**
+     * The feature id for the '<em><b>Element Attributes</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int INPUT_PARAMETER_ATTRIBUTES__ELEMENT_ATTRIBUTES = 0;
+
+    /**
+     * The feature id for the '<em><b>Ui Hints</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int INPUT_PARAMETER_ATTRIBUTES__UI_HINTS = 1;
+
+    /**
+     * The number of structural features of the '<em>Input Parameter Attributes</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int INPUT_PARAMETER_ATTRIBUTES_FEATURE_COUNT = 2;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.InputParameterUIHintsImpl <em>Input Parameter UI Hints</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.InputParameterUIHintsImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getInputParameterUIHints()
+     * @generated
+     */
+    int INPUT_PARAMETER_UI_HINTS = 32;
+
+    /**
+     * The feature id for the '<em><b>Group Prompt Display Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int INPUT_PARAMETER_UI_HINTS__GROUP_PROMPT_DISPLAY_NAME = 0;
+
+    /**
+     * The number of structural features of the '<em>Input Parameter UI Hints</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int INPUT_PARAMETER_UI_HINTS_FEATURE_COUNT = 1;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.LocaleImpl <em>Locale</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.LocaleImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getLocale()
+     * @generated
+     */
+    int LOCALE = 33;
+
+    /**
+     * The feature id for the '<em><b>Language</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int LOCALE__LANGUAGE = 0;
+
+    /**
+     * The feature id for the '<em><b>Country</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int LOCALE__COUNTRY = 1;
+
+    /**
+     * The feature id for the '<em><b>Variant</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int LOCALE__VARIANT = 2;
+
+    /**
+     * The number of structural features of the '<em>Locale</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int LOCALE_FEATURE_COUNT = 3;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.NameValuePairImpl <em>Name Value Pair</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.NameValuePairImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getNameValuePair()
+     * @generated
+     */
+    int NAME_VALUE_PAIR = 34;
+
+    /**
+     * The feature id for the '<em><b>Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int NAME_VALUE_PAIR__NAME = 0;
+
+    /**
+     * The feature id for the '<em><b>Value</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int NAME_VALUE_PAIR__VALUE = 1;
+
+    /**
+     * The number of structural features of the '<em>Name Value Pair</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int NAME_VALUE_PAIR_FEATURE_COUNT = 2;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.NotExpressionImpl <em>Not Expression</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.NotExpressionImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getNotExpression()
+     * @generated
+     */
+    int NOT_EXPRESSION = 35;
+
+    /**
+     * The feature id for the '<em><b>Negatable</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int NOT_EXPRESSION__NEGATABLE = FILTER_EXPRESSION__NEGATABLE;
+
+    /**
+     * The feature id for the '<em><b>Negating Expression</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int NOT_EXPRESSION__NEGATING_EXPRESSION = FILTER_EXPRESSION_FEATURE_COUNT + 0;
+
+    /**
+     * The number of structural features of the '<em>Not Expression</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int NOT_EXPRESSION_FEATURE_COUNT = FILTER_EXPRESSION_FEATURE_COUNT + 1;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.OdaDesignSessionImpl <em>Oda Design Session</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.OdaDesignSessionImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getOdaDesignSession()
+     * @generated
+     */
+    int ODA_DESIGN_SESSION = 36;
+
+    /**
+     * The feature id for the '<em><b>Request</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int ODA_DESIGN_SESSION__REQUEST = 0;
+
+    /**
+     * The feature id for the '<em><b>Response</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int ODA_DESIGN_SESSION__RESPONSE = 1;
+
+    /**
+     * The number of structural features of the '<em>Oda Design Session</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int ODA_DESIGN_SESSION_FEATURE_COUNT = 2;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.OrExpressionImpl <em>Or Expression</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.OrExpressionImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getOrExpression()
+     * @generated
+     */
+    int OR_EXPRESSION = 37;
+
+    /**
+     * The feature id for the '<em><b>Negatable</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int OR_EXPRESSION__NEGATABLE = COMPOSITE_FILTER_EXPRESSION__NEGATABLE;
+
+    /**
+     * The feature id for the '<em><b>Children</b></em>' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int OR_EXPRESSION__CHILDREN = COMPOSITE_FILTER_EXPRESSION__CHILDREN;
+
+    /**
+     * The number of structural features of the '<em>Or Expression</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int OR_EXPRESSION_FEATURE_COUNT = COMPOSITE_FILTER_EXPRESSION_FEATURE_COUNT + 0;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.OutputElementAttributesImpl <em>Output Element Attributes</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.OutputElementAttributesImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getOutputElementAttributes()
+     * @generated
+     */
+    int OUTPUT_ELEMENT_ATTRIBUTES = 38;
+
+    /**
+     * The feature id for the '<em><b>Label</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int OUTPUT_ELEMENT_ATTRIBUTES__LABEL = 0;
+
+    /**
+     * The feature id for the '<em><b>Formatting Hints</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int OUTPUT_ELEMENT_ATTRIBUTES__FORMATTING_HINTS = 1;
+
+    /**
+     * The feature id for the '<em><b>Help Text</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int OUTPUT_ELEMENT_ATTRIBUTES__HELP_TEXT = 2;
+
+    /**
+     * The number of structural features of the '<em>Output Element Attributes</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int OUTPUT_ELEMENT_ATTRIBUTES_FEATURE_COUNT = 3;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ParameterDefinitionImpl <em>Parameter Definition</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.ParameterDefinitionImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getParameterDefinition()
+     * @generated
+     */
+    int PARAMETER_DEFINITION = 39;
+
+    /**
+     * The feature id for the '<em><b>In Out Mode</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PARAMETER_DEFINITION__IN_OUT_MODE = 0;
+
+    /**
+     * The feature id for the '<em><b>Attributes</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PARAMETER_DEFINITION__ATTRIBUTES = 1;
+
+    /**
+     * The feature id for the '<em><b>Input Attributes</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PARAMETER_DEFINITION__INPUT_ATTRIBUTES = 2;
+
+    /**
+     * The feature id for the '<em><b>Output Usage Hints</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PARAMETER_DEFINITION__OUTPUT_USAGE_HINTS = 3;
+
+    /**
+     * The feature id for the '<em><b>Fields</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PARAMETER_DEFINITION__FIELDS = 4;
+
+    /**
+     * The number of structural features of the '<em>Parameter Definition</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PARAMETER_DEFINITION_FEATURE_COUNT = 5;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ParameterFieldDefinitionImpl <em>Parameter Field Definition</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.ParameterFieldDefinitionImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getParameterFieldDefinition()
+     * @generated
+     */
+    int PARAMETER_FIELD_DEFINITION = 40;
+
+    /**
+     * The feature id for the '<em><b>Attributes</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PARAMETER_FIELD_DEFINITION__ATTRIBUTES = 0;
+
+    /**
+     * The feature id for the '<em><b>Input Attributes</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PARAMETER_FIELD_DEFINITION__INPUT_ATTRIBUTES = 1;
+
+    /**
+     * The feature id for the '<em><b>Output Usage Hints</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PARAMETER_FIELD_DEFINITION__OUTPUT_USAGE_HINTS = 2;
+
+    /**
+     * The number of structural features of the '<em>Parameter Field Definition</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PARAMETER_FIELD_DEFINITION_FEATURE_COUNT = 3;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ParameterFieldsImpl <em>Parameter Fields</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.ParameterFieldsImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getParameterFields()
+     * @generated
+     */
+    int PARAMETER_FIELDS = 41;
+
+    /**
+     * The feature id for the '<em><b>Field Collection</b></em>' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PARAMETER_FIELDS__FIELD_COLLECTION = 0;
+
+    /**
+     * The number of structural features of the '<em>Parameter Fields</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PARAMETER_FIELDS_FEATURE_COUNT = 1;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.PropertiesImpl <em>Properties</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.PropertiesImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getProperties()
+     * @generated
+     */
+    int PROPERTIES = 42;
+
+    /**
+     * The feature id for the '<em><b>Properties</b></em>' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PROPERTIES__PROPERTIES = 0;
+
+    /**
+     * The number of structural features of the '<em>Properties</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PROPERTIES_FEATURE_COUNT = 1;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.PropertyImpl <em>Property</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.PropertyImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getProperty()
+     * @generated
+     */
+    int PROPERTY = 43;
+
+    /**
+     * The feature id for the '<em><b>Name Value</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PROPERTY__NAME_VALUE = 0;
+
+    /**
+     * The feature id for the '<em><b>Design Attributes</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PROPERTY__DESIGN_ATTRIBUTES = 1;
+
+    /**
+     * The number of structural features of the '<em>Property</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PROPERTY_FEATURE_COUNT = 2;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.PropertyAttributesImpl <em>Property Attributes</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.PropertyAttributesImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getPropertyAttributes()
+     * @generated
+     */
+    int PROPERTY_ATTRIBUTES = 44;
+
+    /**
+     * The feature id for the '<em><b>Display Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PROPERTY_ATTRIBUTES__DISPLAY_NAME = 0;
+
+    /**
+     * The feature id for the '<em><b>Element Attributes</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PROPERTY_ATTRIBUTES__ELEMENT_ATTRIBUTES = 1;
+
+    /**
+     * The feature id for the '<em><b>Derived Meta Data</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PROPERTY_ATTRIBUTES__DERIVED_META_DATA = 2;
+
+    /**
+     * The number of structural features of the '<em>Property Attributes</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PROPERTY_ATTRIBUTES_FEATURE_COUNT = 3;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ResourceIdentifiersImpl <em>Resource Identifiers</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.ResourceIdentifiersImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getResourceIdentifiers()
+     * @generated
+     */
+    int RESOURCE_IDENTIFIERS = 45;
+
+    /**
+     * The feature id for the '<em><b>Appl Resource Base URI String</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int RESOURCE_IDENTIFIERS__APPL_RESOURCE_BASE_URI_STRING = 0;
+
+    /**
+     * The feature id for the '<em><b>Design Resource Base URI String</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int RESOURCE_IDENTIFIERS__DESIGN_RESOURCE_BASE_URI_STRING = 1;
+
+    /**
+     * The number of structural features of the '<em>Resource Identifiers</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int RESOURCE_IDENTIFIERS_FEATURE_COUNT = 2;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ResultSetColumnsImpl <em>Result Set Columns</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.ResultSetColumnsImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getResultSetColumns()
+     * @generated
+     */
+    int RESULT_SET_COLUMNS = 46;
+
+    /**
+     * The feature id for the '<em><b>Result Column Definitions</b></em>' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int RESULT_SET_COLUMNS__RESULT_COLUMN_DEFINITIONS = 0;
+
+    /**
+     * The number of structural features of the '<em>Result Set Columns</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int RESULT_SET_COLUMNS_FEATURE_COUNT = 1;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ResultSetCriteriaImpl <em>Result Set Criteria</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.ResultSetCriteriaImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getResultSetCriteria()
+     * @generated
+     */
+    int RESULT_SET_CRITERIA = 47;
+
+    /**
+     * The feature id for the '<em><b>Filter Specification</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int RESULT_SET_CRITERIA__FILTER_SPECIFICATION = 0;
+
+    /**
+     * The feature id for the '<em><b>Row Ordering</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int RESULT_SET_CRITERIA__ROW_ORDERING = 1;
+
+    /**
+     * The number of structural features of the '<em>Result Set Criteria</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int RESULT_SET_CRITERIA_FEATURE_COUNT = 2;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ResultSetDefinitionImpl <em>Result Set Definition</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.ResultSetDefinitionImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getResultSetDefinition()
+     * @generated
+     */
+    int RESULT_SET_DEFINITION = 48;
+
+    /**
+     * The feature id for the '<em><b>Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int RESULT_SET_DEFINITION__NAME = 0;
+
+    /**
+     * The feature id for the '<em><b>Result Set Columns</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int RESULT_SET_DEFINITION__RESULT_SET_COLUMNS = 1;
+
+    /**
+     * The feature id for the '<em><b>Criteria</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int RESULT_SET_DEFINITION__CRITERIA = 2;
+
+    /**
+     * The number of structural features of the '<em>Result Set Definition</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int RESULT_SET_DEFINITION_FEATURE_COUNT = 3;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ResultSetsImpl <em>Result Sets</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.ResultSetsImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getResultSets()
+     * @generated
+     */
+    int RESULT_SETS = 49;
+
+    /**
+     * The feature id for the '<em><b>Result Set Definitions</b></em>' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int RESULT_SETS__RESULT_SET_DEFINITIONS = 0;
+
+    /**
+     * The feature id for the '<em><b>Derived Meta Data</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int RESULT_SETS__DERIVED_META_DATA = 1;
+
+    /**
+     * The number of structural features of the '<em>Result Sets</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int RESULT_SETS_FEATURE_COUNT = 2;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ResultSubsetImpl <em>Result Subset</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.ResultSubsetImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getResultSubset()
+     * @generated
+     */
+    int RESULT_SUBSET = 50;
+
+    /**
+     * The feature id for the '<em><b>Data Set Design</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int RESULT_SUBSET__DATA_SET_DESIGN = 0;
+
+    /**
+     * The feature id for the '<em><b>Result Set Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int RESULT_SUBSET__RESULT_SET_NAME = 1;
+
+    /**
+     * The feature id for the '<em><b>Column Identifiers</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int RESULT_SUBSET__COLUMN_IDENTIFIERS = 2;
+
+    /**
+     * The number of structural features of the '<em>Result Subset</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int RESULT_SUBSET_FEATURE_COUNT = 3;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ScalarValueChoicesImpl <em>Scalar Value Choices</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.ScalarValueChoicesImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getScalarValueChoices()
+     * @generated
+     */
+    int SCALAR_VALUE_CHOICES = 51;
+
+    /**
+     * The feature id for the '<em><b>Scalar Values</b></em>' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SCALAR_VALUE_CHOICES__SCALAR_VALUES = 0;
+
+    /**
+     * The number of structural features of the '<em>Scalar Value Choices</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SCALAR_VALUE_CHOICES_FEATURE_COUNT = 1;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ScalarValueDefinitionImpl <em>Scalar Value Definition</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.ScalarValueDefinitionImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getScalarValueDefinition()
+     * @generated
+     */
+    int SCALAR_VALUE_DEFINITION = 52;
+
+    /**
+     * The feature id for the '<em><b>Value</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SCALAR_VALUE_DEFINITION__VALUE = 0;
+
+    /**
+     * The feature id for the '<em><b>Display Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SCALAR_VALUE_DEFINITION__DISPLAY_NAME = 1;
+
+    /**
+     * The number of structural features of the '<em>Scalar Value Definition</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SCALAR_VALUE_DEFINITION_FEATURE_COUNT = 2;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.SortKeyImpl <em>Sort Key</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.SortKeyImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getSortKey()
+     * @generated
+     */
+    int SORT_KEY = 53;
+
+    /**
+     * The feature id for the '<em><b>Column Identifier</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SORT_KEY__COLUMN_IDENTIFIER = 0;
+
+    /**
+     * The feature id for the '<em><b>Column Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SORT_KEY__COLUMN_NAME = 1;
+
+    /**
+     * The feature id for the '<em><b>Column Position</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SORT_KEY__COLUMN_POSITION = 2;
+
+    /**
+     * The feature id for the '<em><b>Sort Direction</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SORT_KEY__SORT_DIRECTION = 3;
+
+    /**
+     * The feature id for the '<em><b>Null Value Ordering</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SORT_KEY__NULL_VALUE_ORDERING = 4;
+
+    /**
+     * The feature id for the '<em><b>Optional</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SORT_KEY__OPTIONAL = 5;
+
+    /**
+     * The number of structural features of the '<em>Sort Key</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SORT_KEY_FEATURE_COUNT = 6;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.SortSpecificationImpl <em>Sort Specification</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.SortSpecificationImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getSortSpecification()
+     * @generated
+     */
+    int SORT_SPECIFICATION = 54;
+
+    /**
+     * The feature id for the '<em><b>Sort Keys</b></em>' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SORT_SPECIFICATION__SORT_KEYS = 0;
+
+    /**
+     * The number of structural features of the '<em>Sort Specification</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SORT_SPECIFICATION_FEATURE_COUNT = 1;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.StaticValuesImpl <em>Static Values</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.StaticValuesImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getStaticValues()
+     * @generated
+     */
+    int STATIC_VALUES = 55;
+
+    /**
+     * The feature id for the '<em><b>Values</b></em>' attribute list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int STATIC_VALUES__VALUES = 0;
+
+    /**
+     * The number of structural features of the '<em>Static Values</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int STATIC_VALUES_FEATURE_COUNT = 1;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ValueFormatHintsImpl <em>Value Format Hints</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.ValueFormatHintsImpl
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getValueFormatHints()
+     * @generated
+     */
+    int VALUE_FORMAT_HINTS = 56;
+
+    /**
+     * The feature id for the '<em><b>Display Size</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int VALUE_FORMAT_HINTS__DISPLAY_SIZE = 0;
+
+    /**
+     * The feature id for the '<em><b>Display Format</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int VALUE_FORMAT_HINTS__DISPLAY_FORMAT = 1;
+
+    /**
+     * The feature id for the '<em><b>Text Format Type</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int VALUE_FORMAT_HINTS__TEXT_FORMAT_TYPE = 2;
+
+    /**
+     * The feature id for the '<em><b>Horizontal Alignment</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int VALUE_FORMAT_HINTS__HORIZONTAL_ALIGNMENT = 3;
+
+    /**
+     * The feature id for the '<em><b>Text Wrap Type</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int VALUE_FORMAT_HINTS__TEXT_WRAP_TYPE = 4;
+
+    /**
+     * The number of structural features of the '<em>Value Format Hints</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int VALUE_FORMAT_HINTS_FEATURE_COUNT = 5;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.AxisType <em>Axis Type</em>}' enum.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.AxisType
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getAxisType()
+     * @generated
+     */
+    int AXIS_TYPE = 57;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.ElementNullability <em>Element Nullability</em>}' enum.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.ElementNullability
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getElementNullability()
+     * @generated
+     */
+    int ELEMENT_NULLABILITY = 58;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.ExpressionVariableType <em>Expression Variable Type</em>}' enum.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.ExpressionVariableType
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getExpressionVariableType()
+     * @generated
+     */
+    int EXPRESSION_VARIABLE_TYPE = 59;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.HorizontalAlignment <em>Horizontal Alignment</em>}' enum.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.HorizontalAlignment
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getHorizontalAlignment()
+     * @generated
+     */
+    int HORIZONTAL_ALIGNMENT = 60;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.InputPromptControlStyle <em>Input Prompt Control Style</em>}' enum.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.InputPromptControlStyle
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getInputPromptControlStyle()
+     * @generated
+     */
+    int INPUT_PROMPT_CONTROL_STYLE = 61;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.NullOrderingType <em>Null Ordering Type</em>}' enum.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.NullOrderingType
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getNullOrderingType()
+     * @generated
+     */
+    int NULL_ORDERING_TYPE = 62;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.OdaComplexDataType <em>Oda Complex Data Type</em>}' enum.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.OdaComplexDataType
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getOdaComplexDataType()
+     * @generated
+     */
+    int ODA_COMPLEX_DATA_TYPE = 63;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.OdaScalarDataType <em>Oda Scalar Data Type</em>}' enum.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.OdaScalarDataType
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getOdaScalarDataType()
+     * @generated
+     */
+    int ODA_SCALAR_DATA_TYPE = 64;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.ParameterMode <em>Parameter Mode</em>}' enum.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterMode
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getParameterMode()
+     * @generated
+     */
+    int PARAMETER_MODE = 65;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.SessionStatus <em>Session Status</em>}' enum.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.SessionStatus
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getSessionStatus()
+     * @generated
+     */
+    int SESSION_STATUS = 66;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.SortDirectionType <em>Sort Direction Type</em>}' enum.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.SortDirectionType
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getSortDirectionType()
+     * @generated
+     */
+    int SORT_DIRECTION_TYPE = 67;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.TextFormatType <em>Text Format Type</em>}' enum.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.TextFormatType
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getTextFormatType()
+     * @generated
+     */
+    int TEXT_FORMAT_TYPE = 68;
+
+    /**
+     * The meta object id for the '{@link org.eclipse.datatools.connectivity.oda.design.TextWrapType <em>Text Wrap Type</em>}' enum.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.TextWrapType
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getTextWrapType()
+     * @generated
+     */
+    int TEXT_WRAP_TYPE = 69;
+
+    /**
+     * The meta object id for the '<em>Axis Type Object</em>' data type.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.AxisType
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getAxisTypeObject()
+     * @generated
+     */
+    int AXIS_TYPE_OBJECT = 70;
+
+    /**
+     * The meta object id for the '<em>Element Nullability Object</em>' data type.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.ElementNullability
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getElementNullabilityObject()
+     * @generated
+     */
+    int ELEMENT_NULLABILITY_OBJECT = 71;
+
+    /**
+     * The meta object id for the '<em>Expression Variable Type Object</em>' data type.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.ExpressionVariableType
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getExpressionVariableTypeObject()
+     * @generated
+     */
+    int EXPRESSION_VARIABLE_TYPE_OBJECT = 72;
+
+    /**
+     * The meta object id for the '<em>Horizontal Alignment Object</em>' data type.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.HorizontalAlignment
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getHorizontalAlignmentObject()
+     * @generated
+     */
+    int HORIZONTAL_ALIGNMENT_OBJECT = 73;
+
+    /**
+     * The meta object id for the '<em>Input Prompt Control Style Object</em>' data type.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.InputPromptControlStyle
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getInputPromptControlStyleObject()
+     * @generated
+     */
+    int INPUT_PROMPT_CONTROL_STYLE_OBJECT = 74;
+
+    /**
+     * The meta object id for the '<em>Null Ordering Type Object</em>' data type.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.NullOrderingType
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getNullOrderingTypeObject()
+     * @generated
+     */
+    int NULL_ORDERING_TYPE_OBJECT = 75;
+
+    /**
+     * The meta object id for the '<em>Oda Complex Data Type Object</em>' data type.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.OdaComplexDataType
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getOdaComplexDataTypeObject()
+     * @generated
+     */
+    int ODA_COMPLEX_DATA_TYPE_OBJECT = 76;
+
+    /**
+     * The meta object id for the '<em>Oda Scalar Data Type Object</em>' data type.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.OdaScalarDataType
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getOdaScalarDataTypeObject()
+     * @generated
+     */
+    int ODA_SCALAR_DATA_TYPE_OBJECT = 77;
+
+    /**
+     * The meta object id for the '<em>Parameter Mode Object</em>' data type.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterMode
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getParameterModeObject()
+     * @generated
+     */
+    int PARAMETER_MODE_OBJECT = 78;
+
+    /**
+     * The meta object id for the '<em>Session Status Object</em>' data type.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.SessionStatus
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getSessionStatusObject()
+     * @generated
+     */
+    int SESSION_STATUS_OBJECT = 79;
+
+    /**
+     * The meta object id for the '<em>Sort Direction Type Object</em>' data type.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.SortDirectionType
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getSortDirectionTypeObject()
+     * @generated
+     */
+    int SORT_DIRECTION_TYPE_OBJECT = 80;
+
+    /**
+     * The meta object id for the '<em>Text Format Type Object</em>' data type.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.TextFormatType
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getTextFormatTypeObject()
+     * @generated
+     */
+    int TEXT_FORMAT_TYPE_OBJECT = 81;
+
+    /**
+     * The meta object id for the '<em>Text Wrap Type Object</em>' data type.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.datatools.connectivity.oda.design.TextWrapType
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getTextWrapTypeObject()
+     * @generated
+     */
+    int TEXT_WRAP_TYPE_OBJECT = 82;
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.AndExpression <em>And Expression</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>And Expression</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.AndExpression
+     * @generated
+     */
+    EClass getAndExpression();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.AtomicExpressionContext <em>Atomic Expression Context</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Atomic Expression Context</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.AtomicExpressionContext
+     * @generated
+     */
+    EClass getAtomicExpressionContext();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.AtomicExpressionContext#isOptional <em>Optional</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Optional</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.AtomicExpressionContext#isOptional()
+     * @see #getAtomicExpressionContext()
+     * @generated
+     */
+    EAttribute getAtomicExpressionContext_Optional();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.AtomicExpressionContext#getVariable <em>Variable</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Variable</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.AtomicExpressionContext#getVariable()
+     * @see #getAtomicExpressionContext()
+     * @generated
+     */
+    EReference getAtomicExpressionContext_Variable();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.AtomicExpressionContext#getArguments <em>Arguments</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Arguments</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.AtomicExpressionContext#getArguments()
+     * @see #getAtomicExpressionContext()
+     * @generated
+     */
+    EReference getAtomicExpressionContext_Arguments();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.AxisAttributes <em>Axis Attributes</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Axis Attributes</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.AxisAttributes
+     * @generated
+     */
+    EClass getAxisAttributes();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.AxisAttributes#getAxisType <em>Axis Type</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Axis Type</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.AxisAttributes#getAxisType()
+     * @see #getAxisAttributes()
+     * @generated
+     */
+    EAttribute getAxisAttributes_AxisType();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.AxisAttributes#isOnColumnLayout <em>On Column Layout</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>On Column Layout</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.AxisAttributes#isOnColumnLayout()
+     * @see #getAxisAttributes()
+     * @generated
+     */
+    EAttribute getAxisAttributes_OnColumnLayout();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.AxisAttributes#getRelatedColumns <em>Related Columns</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Related Columns</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.AxisAttributes#getRelatedColumns()
+     * @see #getAxisAttributes()
+     * @generated
+     */
+    EReference getAxisAttributes_RelatedColumns();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.ColumnDefinition <em>Column Definition</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Column Definition</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ColumnDefinition
+     * @generated
+     */
+    EClass getColumnDefinition();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.ColumnDefinition#getAttributes <em>Attributes</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Attributes</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ColumnDefinition#getAttributes()
+     * @see #getColumnDefinition()
+     * @generated
+     */
+    EReference getColumnDefinition_Attributes();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.ColumnDefinition#getUsageHints <em>Usage Hints</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Usage Hints</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ColumnDefinition#getUsageHints()
+     * @see #getColumnDefinition()
+     * @generated
+     */
+    EReference getColumnDefinition_UsageHints();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.ColumnDefinition#getMultiDimensionAttributes <em>Multi Dimension Attributes</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Multi Dimension Attributes</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ColumnDefinition#getMultiDimensionAttributes()
+     * @see #getColumnDefinition()
+     * @generated
+     */
+    EReference getColumnDefinition_MultiDimensionAttributes();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.CompositeFilterExpression <em>Composite Filter Expression</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Composite Filter Expression</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.CompositeFilterExpression
+     * @generated
+     */
+    EClass getCompositeFilterExpression();
+
+    /**
+     * Returns the meta object for the containment reference list '{@link org.eclipse.datatools.connectivity.oda.design.CompositeFilterExpression#getChildren <em>Children</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference list '<em>Children</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.CompositeFilterExpression#getChildren()
+     * @see #getCompositeFilterExpression()
+     * @generated
+     */
+    EReference getCompositeFilterExpression_Children();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.CustomData <em>Custom Data</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Custom Data</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.CustomData
+     * @generated
+     */
+    EClass getCustomData();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.CustomData#getProviderId <em>Provider Id</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Provider Id</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.CustomData#getProviderId()
+     * @see #getCustomData()
+     * @generated
+     */
+    EAttribute getCustomData_ProviderId();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.CustomData#getValue <em>Value</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Value</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.CustomData#getValue()
+     * @see #getCustomData()
+     * @generated
+     */
+    EAttribute getCustomData_Value();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.CustomData#getDisplayValue <em>Display Value</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Display Value</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.CustomData#getDisplayValue()
+     * @see #getCustomData()
+     * @generated
+     */
+    EAttribute getCustomData_DisplayValue();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.CustomFilterExpression <em>Custom Filter Expression</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Custom Filter Expression</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.CustomFilterExpression
+     * @generated
+     */
+    EClass getCustomFilterExpression();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.CustomFilterExpression#getType <em>Type</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Type</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.CustomFilterExpression#getType()
+     * @see #getCustomFilterExpression()
+     * @generated
+     */
+    EReference getCustomFilterExpression_Type();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.CustomFilterExpression#getContext <em>Context</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Context</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.CustomFilterExpression#getContext()
+     * @see #getCustomFilterExpression()
+     * @generated
+     */
+    EReference getCustomFilterExpression_Context();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.DataAccessDesign <em>Data Access Design</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Data Access Design</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataAccessDesign
+     * @generated
+     */
+    EClass getDataAccessDesign();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.DataAccessDesign#getDataSetDesign <em>Data Set Design</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Data Set Design</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataAccessDesign#getDataSetDesign()
+     * @see #getDataAccessDesign()
+     * @generated
+     */
+    EReference getDataAccessDesign_DataSetDesign();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes <em>Data Element Attributes</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Data Element Attributes</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementAttributes
+     * @generated
+     */
+    EClass getDataElementAttributes();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getIdentifier <em>Identifier</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Identifier</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getIdentifier()
+     * @see #getDataElementAttributes()
+     * @generated
+     */
+    EReference getDataElementAttributes_Identifier();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getName <em>Name</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Name</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getName()
+     * @see #getDataElementAttributes()
+     * @generated
+     */
+    EAttribute getDataElementAttributes_Name();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getPosition <em>Position</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Position</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getPosition()
+     * @see #getDataElementAttributes()
+     * @generated
+     */
+    EAttribute getDataElementAttributes_Position();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getNativeDataTypeCode <em>Native Data Type Code</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Native Data Type Code</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getNativeDataTypeCode()
+     * @see #getDataElementAttributes()
+     * @generated
+     */
+    EAttribute getDataElementAttributes_NativeDataTypeCode();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getPrecision <em>Precision</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Precision</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getPrecision()
+     * @see #getDataElementAttributes()
+     * @generated
+     */
+    EAttribute getDataElementAttributes_Precision();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getScale <em>Scale</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Scale</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getScale()
+     * @see #getDataElementAttributes()
+     * @generated
+     */
+    EAttribute getDataElementAttributes_Scale();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getNullability <em>Nullability</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Nullability</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getNullability()
+     * @see #getDataElementAttributes()
+     * @generated
+     */
+    EAttribute getDataElementAttributes_Nullability();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getUiHints <em>Ui Hints</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Ui Hints</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getUiHints()
+     * @see #getDataElementAttributes()
+     * @generated
+     */
+    EReference getDataElementAttributes_UiHints();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.DataElementIdentifier <em>Data Element Identifier</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Data Element Identifier</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementIdentifier
+     * @generated
+     */
+    EClass getDataElementIdentifier();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DataElementIdentifier#getName <em>Name</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Name</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementIdentifier#getName()
+     * @see #getDataElementIdentifier()
+     * @generated
+     */
+    EAttribute getDataElementIdentifier_Name();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DataElementIdentifier#getPosition <em>Position</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Position</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementIdentifier#getPosition()
+     * @see #getDataElementIdentifier()
+     * @generated
+     */
+    EAttribute getDataElementIdentifier_Position();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.DataElementIdentifiers <em>Data Element Identifiers</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Data Element Identifiers</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementIdentifiers
+     * @generated
+     */
+    EClass getDataElementIdentifiers();
+
+    /**
+     * Returns the meta object for the containment reference list '{@link org.eclipse.datatools.connectivity.oda.design.DataElementIdentifiers#getIdentifiers <em>Identifiers</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference list '<em>Identifiers</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementIdentifiers#getIdentifiers()
+     * @see #getDataElementIdentifiers()
+     * @generated
+     */
+    EReference getDataElementIdentifiers_Identifiers();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.DataElementUIHints <em>Data Element UI Hints</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Data Element UI Hints</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementUIHints
+     * @generated
+     */
+    EClass getDataElementUIHints();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DataElementUIHints#getDisplayName <em>Display Name</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Display Name</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementUIHints#getDisplayName()
+     * @see #getDataElementUIHints()
+     * @generated
+     */
+    EAttribute getDataElementUIHints_DisplayName();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DataElementUIHints#getDescription <em>Description</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Description</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementUIHints#getDescription()
+     * @see #getDataElementUIHints()
+     * @generated
+     */
+    EAttribute getDataElementUIHints_Description();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign <em>Data Set Design</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Data Set Design</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSetDesign
+     * @generated
+     */
+    EClass getDataSetDesign();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getName <em>Name</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Name</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getName()
+     * @see #getDataSetDesign()
+     * @generated
+     */
+    EAttribute getDataSetDesign_Name();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getOdaExtensionDataSetId <em>Oda Extension Data Set Id</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Oda Extension Data Set Id</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getOdaExtensionDataSetId()
+     * @see #getDataSetDesign()
+     * @generated
+     */
+    EAttribute getDataSetDesign_OdaExtensionDataSetId();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getDataSourceDesign <em>Data Source Design</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Data Source Design</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getDataSourceDesign()
+     * @see #getDataSetDesign()
+     * @generated
+     */
+    EReference getDataSetDesign_DataSourceDesign();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getQuery <em>Query</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Query</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getQuery()
+     * @see #getDataSetDesign()
+     * @generated
+     */
+    EReference getDataSetDesign_Query();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getDisplayName <em>Display Name</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Display Name</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getDisplayName()
+     * @see #getDataSetDesign()
+     * @generated
+     */
+    EAttribute getDataSetDesign_DisplayName();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getPublicProperties <em>Public Properties</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Public Properties</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getPublicProperties()
+     * @see #getDataSetDesign()
+     * @generated
+     */
+    EReference getDataSetDesign_PublicProperties();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getPrivateProperties <em>Private Properties</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Private Properties</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getPrivateProperties()
+     * @see #getDataSetDesign()
+     * @generated
+     */
+    EReference getDataSetDesign_PrivateProperties();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getResultSets <em>Result Sets</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Result Sets</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getResultSets()
+     * @see #getDataSetDesign()
+     * @generated
+     */
+    EReference getDataSetDesign_ResultSets();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getPrimaryResultSetName <em>Primary Result Set Name</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Primary Result Set Name</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getPrimaryResultSetName()
+     * @see #getDataSetDesign()
+     * @generated
+     */
+    EAttribute getDataSetDesign_PrimaryResultSetName();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getParameters <em>Parameters</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Parameters</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getParameters()
+     * @see #getDataSetDesign()
+     * @generated
+     */
+    EReference getDataSetDesign_Parameters();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.DataSetParameters <em>Data Set Parameters</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Data Set Parameters</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSetParameters
+     * @generated
+     */
+    EClass getDataSetParameters();
+
+    /**
+     * Returns the meta object for the containment reference list '{@link org.eclipse.datatools.connectivity.oda.design.DataSetParameters#getParameterDefinitions <em>Parameter Definitions</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference list '<em>Parameter Definitions</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSetParameters#getParameterDefinitions()
+     * @see #getDataSetParameters()
+     * @generated
+     */
+    EReference getDataSetParameters_ParameterDefinitions();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DataSetParameters#isDerivedMetaData <em>Derived Meta Data</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Derived Meta Data</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSetParameters#isDerivedMetaData()
+     * @see #getDataSetParameters()
+     * @generated
+     */
+    EAttribute getDataSetParameters_DerivedMetaData();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.DataSetQuery <em>Data Set Query</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Data Set Query</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSetQuery
+     * @generated
+     */
+    EClass getDataSetQuery();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DataSetQuery#getQueryText <em>Query Text</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Query Text</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSetQuery#getQueryText()
+     * @see #getDataSetQuery()
+     * @generated
+     */
+    EAttribute getDataSetQuery_QueryText();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign <em>Data Source Design</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Data Source Design</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSourceDesign
+     * @generated
+     */
+    EClass getDataSourceDesign();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getName <em>Name</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Name</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getName()
+     * @see #getDataSourceDesign()
+     * @generated
+     */
+    EAttribute getDataSourceDesign_Name();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getOdaExtensionId <em>Oda Extension Id</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Oda Extension Id</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getOdaExtensionId()
+     * @see #getDataSourceDesign()
+     * @generated
+     */
+    EAttribute getDataSourceDesign_OdaExtensionId();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getEffectiveOdaExtensionId <em>Effective Oda Extension Id</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Effective Oda Extension Id</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getEffectiveOdaExtensionId()
+     * @see #getDataSourceDesign()
+     * @generated
+     */
+    EAttribute getDataSourceDesign_EffectiveOdaExtensionId();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getOdaExtensionDataSourceId <em>Oda Extension Data Source Id</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Oda Extension Data Source Id</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getOdaExtensionDataSourceId()
+     * @see #getDataSourceDesign()
+     * @generated
+     */
+    EAttribute getDataSourceDesign_OdaExtensionDataSourceId();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getDisplayName <em>Display Name</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Display Name</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getDisplayName()
+     * @see #getDataSourceDesign()
+     * @generated
+     */
+    EAttribute getDataSourceDesign_DisplayName();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getPublicProperties <em>Public Properties</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Public Properties</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getPublicProperties()
+     * @see #getDataSourceDesign()
+     * @generated
+     */
+    EReference getDataSourceDesign_PublicProperties();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getPrivateProperties <em>Private Properties</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Private Properties</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getPrivateProperties()
+     * @see #getDataSourceDesign()
+     * @generated
+     */
+    EReference getDataSourceDesign_PrivateProperties();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getLinkedProfileName <em>Linked Profile Name</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Linked Profile Name</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getLinkedProfileName()
+     * @see #getDataSourceDesign()
+     * @generated
+     */
+    EAttribute getDataSourceDesign_LinkedProfileName();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getLinkedProfileStoreFilePath <em>Linked Profile Store File Path</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Linked Profile Store File Path</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getLinkedProfileStoreFilePath()
+     * @see #getDataSourceDesign()
+     * @generated
+     */
+    EAttribute getDataSourceDesign_LinkedProfileStoreFilePath();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getHostResourceIdentifiers <em>Host Resource Identifiers</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Host Resource Identifiers</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getHostResourceIdentifiers()
+     * @see #getDataSourceDesign()
+     * @generated
+     */
+    EReference getDataSourceDesign_HostResourceIdentifiers();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getResourceFile <em>Resource File</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Resource File</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getResourceFile()
+     * @see #getDataSourceDesign()
+     * @generated
+     */
+    EAttribute getDataSourceDesign_ResourceFile();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.DesignerState <em>Designer State</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Designer State</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignerState
+     * @generated
+     */
+    EClass getDesignerState();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DesignerState#getVersion <em>Version</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Version</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignerState#getVersion()
+     * @see #getDesignerState()
+     * @generated
+     */
+    EAttribute getDesignerState_Version();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.DesignerState#getStateContent <em>State Content</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>State Content</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignerState#getStateContent()
+     * @see #getDesignerState()
+     * @generated
+     */
+    EReference getDesignerState_StateContent();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.DesignerStateContent <em>Designer State Content</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Designer State Content</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignerStateContent
+     * @generated
+     */
+    EClass getDesignerStateContent();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DesignerStateContent#getStateContentAsString <em>State Content As String</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>State Content As String</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignerStateContent#getStateContentAsString()
+     * @see #getDesignerStateContent()
+     * @generated
+     */
+    EAttribute getDesignerStateContent_StateContentAsString();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DesignerStateContent#getStateContentAsBlob <em>State Content As Blob</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>State Content As Blob</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignerStateContent#getStateContentAsBlob()
+     * @see #getDesignerStateContent()
+     * @generated
+     */
+    EAttribute getDesignerStateContent_StateContentAsBlob();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest <em>Session Request</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Session Request</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest
+     * @generated
+     */
+    EClass getDesignSessionRequest();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest#getDataAccessDesign <em>Data Access Design</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Data Access Design</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest#getDataAccessDesign()
+     * @see #getDesignSessionRequest()
+     * @generated
+     */
+    EReference getDesignSessionRequest_DataAccessDesign();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest#isEditable <em>Editable</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Editable</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest#isEditable()
+     * @see #getDesignSessionRequest()
+     * @generated
+     */
+    EAttribute getDesignSessionRequest_Editable();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest#getSessionLocale <em>Session Locale</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Session Locale</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest#getSessionLocale()
+     * @see #getDesignSessionRequest()
+     * @generated
+     */
+    EReference getDesignSessionRequest_SessionLocale();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest#getDesignerState <em>Designer State</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Designer State</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest#getDesignerState()
+     * @see #getDesignSessionRequest()
+     * @generated
+     */
+    EReference getDesignSessionRequest_DesignerState();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionResponse <em>Session Response</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Session Response</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignSessionResponse
+     * @generated
+     */
+    EClass getDesignSessionResponse();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionResponse#getSessionStatus <em>Session Status</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Session Status</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignSessionResponse#getSessionStatus()
+     * @see #getDesignSessionResponse()
+     * @generated
+     */
+    EAttribute getDesignSessionResponse_SessionStatus();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionResponse#getDataAccessDesign <em>Data Access Design</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Data Access Design</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignSessionResponse#getDataAccessDesign()
+     * @see #getDesignSessionResponse()
+     * @generated
+     */
+    EReference getDesignSessionResponse_DataAccessDesign();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionResponse#getDesignerState <em>Designer State</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Designer State</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignSessionResponse#getDesignerState()
+     * @see #getDesignSessionResponse()
+     * @generated
+     */
+    EReference getDesignSessionResponse_DesignerState();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.DocumentRoot <em>Document Root</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Document Root</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DocumentRoot
+     * @generated
+     */
+    EClass getDocumentRoot();
+
+    /**
+     * Returns the meta object for the attribute list '{@link org.eclipse.datatools.connectivity.oda.design.DocumentRoot#getMixed <em>Mixed</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute list '<em>Mixed</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DocumentRoot#getMixed()
+     * @see #getDocumentRoot()
+     * @generated
+     */
+    EAttribute getDocumentRoot_Mixed();
+
+    /**
+     * Returns the meta object for the map '{@link org.eclipse.datatools.connectivity.oda.design.DocumentRoot#getXMLNSPrefixMap <em>XMLNS Prefix Map</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the map '<em>XMLNS Prefix Map</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DocumentRoot#getXMLNSPrefixMap()
+     * @see #getDocumentRoot()
+     * @generated
+     */
+    EReference getDocumentRoot_XMLNSPrefixMap();
+
+    /**
+     * Returns the meta object for the map '{@link org.eclipse.datatools.connectivity.oda.design.DocumentRoot#getXSISchemaLocation <em>XSI Schema Location</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the map '<em>XSI Schema Location</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DocumentRoot#getXSISchemaLocation()
+     * @see #getDocumentRoot()
+     * @generated
+     */
+    EReference getDocumentRoot_XSISchemaLocation();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.DocumentRoot#getOdaDesignSession <em>Oda Design Session</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Oda Design Session</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DocumentRoot#getOdaDesignSession()
+     * @see #getDocumentRoot()
+     * @generated
+     */
+    EReference getDocumentRoot_OdaDesignSession();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.DynamicFilterExpression <em>Dynamic Filter Expression</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Dynamic Filter Expression</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DynamicFilterExpression
+     * @generated
+     */
+    EClass getDynamicFilterExpression();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.DynamicFilterExpression#getContext <em>Context</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Context</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DynamicFilterExpression#getContext()
+     * @see #getDynamicFilterExpression()
+     * @generated
+     */
+    EReference getDynamicFilterExpression_Context();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.DynamicFilterExpression#getDefaultType <em>Default Type</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Default Type</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DynamicFilterExpression#getDefaultType()
+     * @see #getDynamicFilterExpression()
+     * @generated
+     */
+    EReference getDynamicFilterExpression_DefaultType();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery <em>Dynamic Values Query</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Dynamic Values Query</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery
+     * @generated
+     */
+    EClass getDynamicValuesQuery();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery#getDataSetDesign <em>Data Set Design</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Data Set Design</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery#getDataSetDesign()
+     * @see #getDynamicValuesQuery()
+     * @generated
+     */
+    EReference getDynamicValuesQuery_DataSetDesign();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery#isEnabled <em>Enabled</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Enabled</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery#isEnabled()
+     * @see #getDynamicValuesQuery()
+     * @generated
+     */
+    EAttribute getDynamicValuesQuery_Enabled();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery#getValueColumnIdentifier <em>Value Column Identifier</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Value Column Identifier</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery#getValueColumnIdentifier()
+     * @see #getDynamicValuesQuery()
+     * @generated
+     */
+    EReference getDynamicValuesQuery_ValueColumnIdentifier();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery#getValueColumn <em>Value Column</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Value Column</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery#getValueColumn()
+     * @see #getDynamicValuesQuery()
+     * @generated
+     */
+    EAttribute getDynamicValuesQuery_ValueColumn();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery#getDisplayNameColumn <em>Display Name Column</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Display Name Column</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery#getDisplayNameColumn()
+     * @see #getDynamicValuesQuery()
+     * @generated
+     */
+    EAttribute getDynamicValuesQuery_DisplayNameColumn();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.ExpressionArguments <em>Expression Arguments</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Expression Arguments</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ExpressionArguments
+     * @generated
+     */
+    EClass getExpressionArguments();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.ExpressionArguments#getExpressionParameters <em>Expression Parameters</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Expression Parameters</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ExpressionArguments#getExpressionParameters()
+     * @see #getExpressionArguments()
+     * @generated
+     */
+    EReference getExpressionArguments_ExpressionParameters();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.ExpressionParameterDefinition <em>Expression Parameter Definition</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Expression Parameter Definition</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ExpressionParameterDefinition
+     * @generated
+     */
+    EClass getExpressionParameterDefinition();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.ExpressionParameterDefinition#getStaticValues <em>Static Values</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Static Values</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ExpressionParameterDefinition#getStaticValues()
+     * @see #getExpressionParameterDefinition()
+     * @generated
+     */
+    EReference getExpressionParameterDefinition_StaticValues();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.ExpressionParameterDefinition#getDynamicInputParameter <em>Dynamic Input Parameter</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Dynamic Input Parameter</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ExpressionParameterDefinition#getDynamicInputParameter()
+     * @see #getExpressionParameterDefinition()
+     * @generated
+     */
+    EReference getExpressionParameterDefinition_DynamicInputParameter();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.ExpressionParameters <em>Expression Parameters</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Expression Parameters</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ExpressionParameters
+     * @generated
+     */
+    EClass getExpressionParameters();
+
+    /**
+     * Returns the meta object for the containment reference list '{@link org.eclipse.datatools.connectivity.oda.design.ExpressionParameters#getParameterDefinitions <em>Parameter Definitions</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference list '<em>Parameter Definitions</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ExpressionParameters#getParameterDefinitions()
+     * @see #getExpressionParameters()
+     * @generated
+     */
+    EReference getExpressionParameters_ParameterDefinitions();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.ExpressionVariable <em>Expression Variable</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Expression Variable</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ExpressionVariable
+     * @generated
+     */
+    EClass getExpressionVariable();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.ExpressionVariable#getType <em>Type</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Type</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ExpressionVariable#getType()
+     * @see #getExpressionVariable()
+     * @generated
+     */
+    EAttribute getExpressionVariable_Type();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.ExpressionVariable#getIdentifier <em>Identifier</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Identifier</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ExpressionVariable#getIdentifier()
+     * @see #getExpressionVariable()
+     * @generated
+     */
+    EAttribute getExpressionVariable_Identifier();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.ExpressionVariable#getNativeDataTypeCode <em>Native Data Type Code</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Native Data Type Code</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ExpressionVariable#getNativeDataTypeCode()
+     * @see #getExpressionVariable()
+     * @generated
+     */
+    EAttribute getExpressionVariable_NativeDataTypeCode();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.FilterExpression <em>Filter Expression</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Filter Expression</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.FilterExpression
+     * @generated
+     */
+    EClass getFilterExpression();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.FilterExpression#isNegatable <em>Negatable</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Negatable</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.FilterExpression#isNegatable()
+     * @see #getFilterExpression()
+     * @generated
+     */
+    EAttribute getFilterExpression_Negatable();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.FilterExpressionType <em>Filter Expression Type</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Filter Expression Type</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.FilterExpressionType
+     * @generated
+     */
+    EClass getFilterExpressionType();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.FilterExpressionType#getDeclaringExtensionId <em>Declaring Extension Id</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Declaring Extension Id</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.FilterExpressionType#getDeclaringExtensionId()
+     * @see #getFilterExpressionType()
+     * @generated
+     */
+    EAttribute getFilterExpressionType_DeclaringExtensionId();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.FilterExpressionType#getId <em>Id</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Id</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.FilterExpressionType#getId()
+     * @see #getFilterExpressionType()
+     * @generated
+     */
+    EAttribute getFilterExpressionType_Id();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes <em>Input Element Attributes</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Input Element Attributes</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.InputElementAttributes
+     * @generated
+     */
+    EClass getInputElementAttributes();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#getDefaultScalarValue <em>Default Scalar Value</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Default Scalar Value</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#getDefaultScalarValue()
+     * @see #getInputElementAttributes()
+     * @generated
+     */
+    EAttribute getInputElementAttributes_DefaultScalarValue();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#getDefaultValues <em>Default Values</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Default Values</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#getDefaultValues()
+     * @see #getInputElementAttributes()
+     * @generated
+     */
+    EReference getInputElementAttributes_DefaultValues();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#isEditable <em>Editable</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Editable</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#isEditable()
+     * @see #getInputElementAttributes()
+     * @generated
+     */
+    EAttribute getInputElementAttributes_Editable();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#isOptional <em>Optional</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Optional</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#isOptional()
+     * @see #getInputElementAttributes()
+     * @generated
+     */
+    EAttribute getInputElementAttributes_Optional();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#isMasksValue <em>Masks Value</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Masks Value</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#isMasksValue()
+     * @see #getInputElementAttributes()
+     * @generated
+     */
+    EAttribute getInputElementAttributes_MasksValue();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#getStaticValueChoices <em>Static Value Choices</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Static Value Choices</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#getStaticValueChoices()
+     * @see #getInputElementAttributes()
+     * @generated
+     */
+    EReference getInputElementAttributes_StaticValueChoices();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#getDynamicValueChoices <em>Dynamic Value Choices</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Dynamic Value Choices</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#getDynamicValueChoices()
+     * @see #getInputElementAttributes()
+     * @generated
+     */
+    EReference getInputElementAttributes_DynamicValueChoices();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#getUiHints <em>Ui Hints</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Ui Hints</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#getUiHints()
+     * @see #getInputElementAttributes()
+     * @generated
+     */
+    EReference getInputElementAttributes_UiHints();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.InputElementUIHints <em>Input Element UI Hints</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Input Element UI Hints</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.InputElementUIHints
+     * @generated
+     */
+    EClass getInputElementUIHints();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.InputElementUIHints#getPromptStyle <em>Prompt Style</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Prompt Style</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.InputElementUIHints#getPromptStyle()
+     * @see #getInputElementUIHints()
+     * @generated
+     */
+    EAttribute getInputElementUIHints_PromptStyle();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.InputElementUIHints#getAutoSuggestThreshold <em>Auto Suggest Threshold</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Auto Suggest Threshold</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.InputElementUIHints#getAutoSuggestThreshold()
+     * @see #getInputElementUIHints()
+     * @generated
+     */
+    EAttribute getInputElementUIHints_AutoSuggestThreshold();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.InputParameterAttributes <em>Input Parameter Attributes</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Input Parameter Attributes</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.InputParameterAttributes
+     * @generated
+     */
+    EClass getInputParameterAttributes();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.InputParameterAttributes#getElementAttributes <em>Element Attributes</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Element Attributes</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.InputParameterAttributes#getElementAttributes()
+     * @see #getInputParameterAttributes()
+     * @generated
+     */
+    EReference getInputParameterAttributes_ElementAttributes();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.InputParameterAttributes#getUiHints <em>Ui Hints</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Ui Hints</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.InputParameterAttributes#getUiHints()
+     * @see #getInputParameterAttributes()
+     * @generated
+     */
+    EReference getInputParameterAttributes_UiHints();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.InputParameterUIHints <em>Input Parameter UI Hints</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Input Parameter UI Hints</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.InputParameterUIHints
+     * @generated
+     */
+    EClass getInputParameterUIHints();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.InputParameterUIHints#getGroupPromptDisplayName <em>Group Prompt Display Name</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Group Prompt Display Name</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.InputParameterUIHints#getGroupPromptDisplayName()
+     * @see #getInputParameterUIHints()
+     * @generated
+     */
+    EAttribute getInputParameterUIHints_GroupPromptDisplayName();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.Locale <em>Locale</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Locale</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.Locale
+     * @generated
+     */
+    EClass getLocale();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.Locale#getLanguage <em>Language</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Language</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.Locale#getLanguage()
+     * @see #getLocale()
+     * @generated
+     */
+    EAttribute getLocale_Language();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.Locale#getCountry <em>Country</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Country</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.Locale#getCountry()
+     * @see #getLocale()
+     * @generated
+     */
+    EAttribute getLocale_Country();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.Locale#getVariant <em>Variant</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Variant</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.Locale#getVariant()
+     * @see #getLocale()
+     * @generated
+     */
+    EAttribute getLocale_Variant();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.NameValuePair <em>Name Value Pair</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Name Value Pair</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.NameValuePair
+     * @generated
+     */
+    EClass getNameValuePair();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.NameValuePair#getName <em>Name</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Name</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.NameValuePair#getName()
+     * @see #getNameValuePair()
+     * @generated
+     */
+    EAttribute getNameValuePair_Name();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.NameValuePair#getValue <em>Value</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Value</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.NameValuePair#getValue()
+     * @see #getNameValuePair()
+     * @generated
+     */
+    EAttribute getNameValuePair_Value();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.NotExpression <em>Not Expression</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Not Expression</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.NotExpression
+     * @generated
+     */
+    EClass getNotExpression();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.NotExpression#getNegatingExpression <em>Negating Expression</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Negating Expression</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.NotExpression#getNegatingExpression()
+     * @see #getNotExpression()
+     * @generated
+     */
+    EReference getNotExpression_NegatingExpression();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.OdaDesignSession <em>Oda Design Session</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Oda Design Session</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.OdaDesignSession
+     * @generated
+     */
+    EClass getOdaDesignSession();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.OdaDesignSession#getRequest <em>Request</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Request</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.OdaDesignSession#getRequest()
+     * @see #getOdaDesignSession()
+     * @generated
+     */
+    EReference getOdaDesignSession_Request();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.OdaDesignSession#getResponse <em>Response</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Response</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.OdaDesignSession#getResponse()
+     * @see #getOdaDesignSession()
+     * @generated
+     */
+    EReference getOdaDesignSession_Response();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.OrExpression <em>Or Expression</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Or Expression</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.OrExpression
+     * @generated
+     */
+    EClass getOrExpression();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes <em>Output Element Attributes</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Output Element Attributes</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes
+     * @generated
+     */
+    EClass getOutputElementAttributes();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes#getLabel <em>Label</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Label</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes#getLabel()
+     * @see #getOutputElementAttributes()
+     * @generated
+     */
+    EAttribute getOutputElementAttributes_Label();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes#getFormattingHints <em>Formatting Hints</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Formatting Hints</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes#getFormattingHints()
+     * @see #getOutputElementAttributes()
+     * @generated
+     */
+    EReference getOutputElementAttributes_FormattingHints();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes#getHelpText <em>Help Text</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Help Text</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes#getHelpText()
+     * @see #getOutputElementAttributes()
+     * @generated
+     */
+    EAttribute getOutputElementAttributes_HelpText();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.ParameterDefinition <em>Parameter Definition</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Parameter Definition</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterDefinition
+     * @generated
+     */
+    EClass getParameterDefinition();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#getInOutMode <em>In Out Mode</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>In Out Mode</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#getInOutMode()
+     * @see #getParameterDefinition()
+     * @generated
+     */
+    EAttribute getParameterDefinition_InOutMode();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#getAttributes <em>Attributes</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Attributes</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#getAttributes()
+     * @see #getParameterDefinition()
+     * @generated
+     */
+    EReference getParameterDefinition_Attributes();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#getInputAttributes <em>Input Attributes</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Input Attributes</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#getInputAttributes()
+     * @see #getParameterDefinition()
+     * @generated
+     */
+    EReference getParameterDefinition_InputAttributes();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#getOutputUsageHints <em>Output Usage Hints</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Output Usage Hints</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#getOutputUsageHints()
+     * @see #getParameterDefinition()
+     * @generated
+     */
+    EReference getParameterDefinition_OutputUsageHints();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#getFields <em>Fields</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Fields</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#getFields()
+     * @see #getParameterDefinition()
+     * @generated
+     */
+    EReference getParameterDefinition_Fields();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.ParameterFieldDefinition <em>Parameter Field Definition</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Parameter Field Definition</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterFieldDefinition
+     * @generated
+     */
+    EClass getParameterFieldDefinition();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.ParameterFieldDefinition#getAttributes <em>Attributes</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Attributes</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterFieldDefinition#getAttributes()
+     * @see #getParameterFieldDefinition()
+     * @generated
+     */
+    EReference getParameterFieldDefinition_Attributes();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.ParameterFieldDefinition#getInputAttributes <em>Input Attributes</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Input Attributes</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterFieldDefinition#getInputAttributes()
+     * @see #getParameterFieldDefinition()
+     * @generated
+     */
+    EReference getParameterFieldDefinition_InputAttributes();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.ParameterFieldDefinition#getOutputUsageHints <em>Output Usage Hints</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Output Usage Hints</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterFieldDefinition#getOutputUsageHints()
+     * @see #getParameterFieldDefinition()
+     * @generated
+     */
+    EReference getParameterFieldDefinition_OutputUsageHints();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.ParameterFields <em>Parameter Fields</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Parameter Fields</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterFields
+     * @generated
+     */
+    EClass getParameterFields();
+
+    /**
+     * Returns the meta object for the containment reference list '{@link org.eclipse.datatools.connectivity.oda.design.ParameterFields#getFieldCollection <em>Field Collection</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference list '<em>Field Collection</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterFields#getFieldCollection()
+     * @see #getParameterFields()
+     * @generated
+     */
+    EReference getParameterFields_FieldCollection();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.Properties <em>Properties</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Properties</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.Properties
+     * @generated
+     */
+    EClass getProperties();
+
+    /**
+     * Returns the meta object for the containment reference list '{@link org.eclipse.datatools.connectivity.oda.design.Properties#getProperties <em>Properties</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference list '<em>Properties</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.Properties#getProperties()
+     * @see #getProperties()
+     * @generated
+     */
+    EReference getProperties_Properties();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.Property <em>Property</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Property</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.Property
+     * @generated
+     */
+    EClass getProperty();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.Property#getNameValue <em>Name Value</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Name Value</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.Property#getNameValue()
+     * @see #getProperty()
+     * @generated
+     */
+    EReference getProperty_NameValue();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.Property#getDesignAttributes <em>Design Attributes</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Design Attributes</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.Property#getDesignAttributes()
+     * @see #getProperty()
+     * @generated
+     */
+    EReference getProperty_DesignAttributes();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.PropertyAttributes <em>Property Attributes</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Property Attributes</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.PropertyAttributes
+     * @generated
+     */
+    EClass getPropertyAttributes();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.PropertyAttributes#getDisplayName <em>Display Name</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Display Name</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.PropertyAttributes#getDisplayName()
+     * @see #getPropertyAttributes()
+     * @generated
+     */
+    EAttribute getPropertyAttributes_DisplayName();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.PropertyAttributes#getElementAttributes <em>Element Attributes</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Element Attributes</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.PropertyAttributes#getElementAttributes()
+     * @see #getPropertyAttributes()
+     * @generated
+     */
+    EReference getPropertyAttributes_ElementAttributes();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.PropertyAttributes#isDerivedMetaData <em>Derived Meta Data</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Derived Meta Data</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.PropertyAttributes#isDerivedMetaData()
+     * @see #getPropertyAttributes()
+     * @generated
+     */
+    EAttribute getPropertyAttributes_DerivedMetaData();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers <em>Resource Identifiers</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Resource Identifiers</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers
+     * @generated
+     */
+    EClass getResourceIdentifiers();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers#getApplResourceBaseURIString <em>Appl Resource Base URI String</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Appl Resource Base URI String</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers#getApplResourceBaseURIString()
+     * @see #getResourceIdentifiers()
+     * @generated
+     */
+    EAttribute getResourceIdentifiers_ApplResourceBaseURIString();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers#getDesignResourceBaseURIString <em>Design Resource Base URI String</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Design Resource Base URI String</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers#getDesignResourceBaseURIString()
+     * @see #getResourceIdentifiers()
+     * @generated
+     */
+    EAttribute getResourceIdentifiers_DesignResourceBaseURIString();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.ResultSetColumns <em>Result Set Columns</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Result Set Columns</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ResultSetColumns
+     * @generated
+     */
+    EClass getResultSetColumns();
+
+    /**
+     * Returns the meta object for the containment reference list '{@link org.eclipse.datatools.connectivity.oda.design.ResultSetColumns#getResultColumnDefinitions <em>Result Column Definitions</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference list '<em>Result Column Definitions</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ResultSetColumns#getResultColumnDefinitions()
+     * @see #getResultSetColumns()
+     * @generated
+     */
+    EReference getResultSetColumns_ResultColumnDefinitions();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.ResultSetCriteria <em>Result Set Criteria</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Result Set Criteria</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ResultSetCriteria
+     * @generated
+     */
+    EClass getResultSetCriteria();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.ResultSetCriteria#getFilterSpecification <em>Filter Specification</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Filter Specification</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ResultSetCriteria#getFilterSpecification()
+     * @see #getResultSetCriteria()
+     * @generated
+     */
+    EReference getResultSetCriteria_FilterSpecification();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.ResultSetCriteria#getRowOrdering <em>Row Ordering</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Row Ordering</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ResultSetCriteria#getRowOrdering()
+     * @see #getResultSetCriteria()
+     * @generated
+     */
+    EReference getResultSetCriteria_RowOrdering();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.ResultSetDefinition <em>Result Set Definition</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Result Set Definition</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ResultSetDefinition
+     * @generated
+     */
+    EClass getResultSetDefinition();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.ResultSetDefinition#getName <em>Name</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Name</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ResultSetDefinition#getName()
+     * @see #getResultSetDefinition()
+     * @generated
+     */
+    EAttribute getResultSetDefinition_Name();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.ResultSetDefinition#getResultSetColumns <em>Result Set Columns</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Result Set Columns</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ResultSetDefinition#getResultSetColumns()
+     * @see #getResultSetDefinition()
+     * @generated
+     */
+    EReference getResultSetDefinition_ResultSetColumns();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.ResultSetDefinition#getCriteria <em>Criteria</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Criteria</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ResultSetDefinition#getCriteria()
+     * @see #getResultSetDefinition()
+     * @generated
+     */
+    EReference getResultSetDefinition_Criteria();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.ResultSets <em>Result Sets</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Result Sets</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ResultSets
+     * @generated
+     */
+    EClass getResultSets();
+
+    /**
+     * Returns the meta object for the containment reference list '{@link org.eclipse.datatools.connectivity.oda.design.ResultSets#getResultSetDefinitions <em>Result Set Definitions</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference list '<em>Result Set Definitions</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ResultSets#getResultSetDefinitions()
+     * @see #getResultSets()
+     * @generated
+     */
+    EReference getResultSets_ResultSetDefinitions();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.ResultSets#isDerivedMetaData <em>Derived Meta Data</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Derived Meta Data</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ResultSets#isDerivedMetaData()
+     * @see #getResultSets()
+     * @generated
+     */
+    EAttribute getResultSets_DerivedMetaData();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.ResultSubset <em>Result Subset</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Result Subset</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ResultSubset
+     * @generated
+     */
+    EClass getResultSubset();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.ResultSubset#getDataSetDesign <em>Data Set Design</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Data Set Design</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ResultSubset#getDataSetDesign()
+     * @see #getResultSubset()
+     * @generated
+     */
+    EReference getResultSubset_DataSetDesign();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.ResultSubset#getResultSetName <em>Result Set Name</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Result Set Name</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ResultSubset#getResultSetName()
+     * @see #getResultSubset()
+     * @generated
+     */
+    EAttribute getResultSubset_ResultSetName();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.ResultSubset#getColumnIdentifiers <em>Column Identifiers</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Column Identifiers</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ResultSubset#getColumnIdentifiers()
+     * @see #getResultSubset()
+     * @generated
+     */
+    EReference getResultSubset_ColumnIdentifiers();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.ScalarValueChoices <em>Scalar Value Choices</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Scalar Value Choices</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ScalarValueChoices
+     * @generated
+     */
+    EClass getScalarValueChoices();
+
+    /**
+     * Returns the meta object for the containment reference list '{@link org.eclipse.datatools.connectivity.oda.design.ScalarValueChoices#getScalarValues <em>Scalar Values</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference list '<em>Scalar Values</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ScalarValueChoices#getScalarValues()
+     * @see #getScalarValueChoices()
+     * @generated
+     */
+    EReference getScalarValueChoices_ScalarValues();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.ScalarValueDefinition <em>Scalar Value Definition</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Scalar Value Definition</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ScalarValueDefinition
+     * @generated
+     */
+    EClass getScalarValueDefinition();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.ScalarValueDefinition#getValue <em>Value</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Value</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ScalarValueDefinition#getValue()
+     * @see #getScalarValueDefinition()
+     * @generated
+     */
+    EAttribute getScalarValueDefinition_Value();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.ScalarValueDefinition#getDisplayName <em>Display Name</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Display Name</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ScalarValueDefinition#getDisplayName()
+     * @see #getScalarValueDefinition()
+     * @generated
+     */
+    EAttribute getScalarValueDefinition_DisplayName();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.SortKey <em>Sort Key</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Sort Key</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.SortKey
+     * @generated
+     */
+    EClass getSortKey();
+
+    /**
+     * Returns the meta object for the containment reference '{@link org.eclipse.datatools.connectivity.oda.design.SortKey#getColumnIdentifier <em>Column Identifier</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference '<em>Column Identifier</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.SortKey#getColumnIdentifier()
+     * @see #getSortKey()
+     * @generated
+     */
+    EReference getSortKey_ColumnIdentifier();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.SortKey#getColumnName <em>Column Name</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Column Name</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.SortKey#getColumnName()
+     * @see #getSortKey()
+     * @generated
+     */
+    EAttribute getSortKey_ColumnName();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.SortKey#getColumnPosition <em>Column Position</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Column Position</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.SortKey#getColumnPosition()
+     * @see #getSortKey()
+     * @generated
+     */
+    EAttribute getSortKey_ColumnPosition();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.SortKey#getSortDirection <em>Sort Direction</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Sort Direction</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.SortKey#getSortDirection()
+     * @see #getSortKey()
+     * @generated
+     */
+    EAttribute getSortKey_SortDirection();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.SortKey#getNullValueOrdering <em>Null Value Ordering</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Null Value Ordering</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.SortKey#getNullValueOrdering()
+     * @see #getSortKey()
+     * @generated
+     */
+    EAttribute getSortKey_NullValueOrdering();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.SortKey#isOptional <em>Optional</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Optional</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.SortKey#isOptional()
+     * @see #getSortKey()
+     * @generated
+     */
+    EAttribute getSortKey_Optional();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.SortSpecification <em>Sort Specification</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Sort Specification</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.SortSpecification
+     * @generated
+     */
+    EClass getSortSpecification();
+
+    /**
+     * Returns the meta object for the containment reference list '{@link org.eclipse.datatools.connectivity.oda.design.SortSpecification#getSortKeys <em>Sort Keys</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the containment reference list '<em>Sort Keys</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.SortSpecification#getSortKeys()
+     * @see #getSortSpecification()
+     * @generated
+     */
+    EReference getSortSpecification_SortKeys();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.StaticValues <em>Static Values</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Static Values</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.StaticValues
+     * @generated
+     */
+    EClass getStaticValues();
+
+    /**
+     * Returns the meta object for the attribute list '{@link org.eclipse.datatools.connectivity.oda.design.StaticValues#getValues <em>Values</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute list '<em>Values</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.StaticValues#getValues()
+     * @see #getStaticValues()
+     * @generated
+     */
+    EAttribute getStaticValues_Values();
+
+    /**
+     * Returns the meta object for class '{@link org.eclipse.datatools.connectivity.oda.design.ValueFormatHints <em>Value Format Hints</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Value Format Hints</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ValueFormatHints
+     * @generated
+     */
+    EClass getValueFormatHints();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.ValueFormatHints#getDisplaySize <em>Display Size</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Display Size</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ValueFormatHints#getDisplaySize()
+     * @see #getValueFormatHints()
+     * @generated
+     */
+    EAttribute getValueFormatHints_DisplaySize();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.ValueFormatHints#getDisplayFormat <em>Display Format</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Display Format</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ValueFormatHints#getDisplayFormat()
+     * @see #getValueFormatHints()
+     * @generated
+     */
+    EAttribute getValueFormatHints_DisplayFormat();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.ValueFormatHints#getTextFormatType <em>Text Format Type</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Text Format Type</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ValueFormatHints#getTextFormatType()
+     * @see #getValueFormatHints()
+     * @generated
+     */
+    EAttribute getValueFormatHints_TextFormatType();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.ValueFormatHints#getHorizontalAlignment <em>Horizontal Alignment</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Horizontal Alignment</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ValueFormatHints#getHorizontalAlignment()
+     * @see #getValueFormatHints()
+     * @generated
+     */
+    EAttribute getValueFormatHints_HorizontalAlignment();
+
+    /**
+     * Returns the meta object for the attribute '{@link org.eclipse.datatools.connectivity.oda.design.ValueFormatHints#getTextWrapType <em>Text Wrap Type</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Text Wrap Type</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ValueFormatHints#getTextWrapType()
+     * @see #getValueFormatHints()
+     * @generated
+     */
+    EAttribute getValueFormatHints_TextWrapType();
+
+    /**
+     * Returns the meta object for enum '{@link org.eclipse.datatools.connectivity.oda.design.AxisType <em>Axis Type</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for enum '<em>Axis Type</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.AxisType
+     * @generated
+     */
+    EEnum getAxisType();
+
+    /**
+     * Returns the meta object for enum '{@link org.eclipse.datatools.connectivity.oda.design.ElementNullability <em>Element Nullability</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for enum '<em>Element Nullability</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ElementNullability
+     * @generated
+     */
+    EEnum getElementNullability();
+
+    /**
+     * Returns the meta object for enum '{@link org.eclipse.datatools.connectivity.oda.design.ExpressionVariableType <em>Expression Variable Type</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for enum '<em>Expression Variable Type</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ExpressionVariableType
+     * @generated
+     */
+    EEnum getExpressionVariableType();
+
+    /**
+     * Returns the meta object for enum '{@link org.eclipse.datatools.connectivity.oda.design.HorizontalAlignment <em>Horizontal Alignment</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for enum '<em>Horizontal Alignment</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.HorizontalAlignment
+     * @generated
+     */
+    EEnum getHorizontalAlignment();
+
+    /**
+     * Returns the meta object for enum '{@link org.eclipse.datatools.connectivity.oda.design.InputPromptControlStyle <em>Input Prompt Control Style</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for enum '<em>Input Prompt Control Style</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.InputPromptControlStyle
+     * @generated
+     */
+    EEnum getInputPromptControlStyle();
+
+    /**
+     * Returns the meta object for enum '{@link org.eclipse.datatools.connectivity.oda.design.NullOrderingType <em>Null Ordering Type</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for enum '<em>Null Ordering Type</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.NullOrderingType
+     * @generated
+     */
+    EEnum getNullOrderingType();
+
+    /**
+     * Returns the meta object for enum '{@link org.eclipse.datatools.connectivity.oda.design.OdaComplexDataType <em>Oda Complex Data Type</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for enum '<em>Oda Complex Data Type</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.OdaComplexDataType
+     * @generated
+     */
+    EEnum getOdaComplexDataType();
+
+    /**
+     * Returns the meta object for enum '{@link org.eclipse.datatools.connectivity.oda.design.OdaScalarDataType <em>Oda Scalar Data Type</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for enum '<em>Oda Scalar Data Type</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.OdaScalarDataType
+     * @generated
+     */
+    EEnum getOdaScalarDataType();
+
+    /**
+     * Returns the meta object for enum '{@link org.eclipse.datatools.connectivity.oda.design.ParameterMode <em>Parameter Mode</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for enum '<em>Parameter Mode</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterMode
+     * @generated
+     */
+    EEnum getParameterMode();
+
+    /**
+     * Returns the meta object for enum '{@link org.eclipse.datatools.connectivity.oda.design.SessionStatus <em>Session Status</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for enum '<em>Session Status</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.SessionStatus
+     * @generated
+     */
+    EEnum getSessionStatus();
+
+    /**
+     * Returns the meta object for enum '{@link org.eclipse.datatools.connectivity.oda.design.SortDirectionType <em>Sort Direction Type</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for enum '<em>Sort Direction Type</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.SortDirectionType
+     * @generated
+     */
+    EEnum getSortDirectionType();
+
+    /**
+     * Returns the meta object for enum '{@link org.eclipse.datatools.connectivity.oda.design.TextFormatType <em>Text Format Type</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for enum '<em>Text Format Type</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.TextFormatType
+     * @generated
+     */
+    EEnum getTextFormatType();
+
+    /**
+     * Returns the meta object for enum '{@link org.eclipse.datatools.connectivity.oda.design.TextWrapType <em>Text Wrap Type</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for enum '<em>Text Wrap Type</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.TextWrapType
+     * @generated
+     */
+    EEnum getTextWrapType();
+
+    /**
+     * Returns the meta object for data type '{@link org.eclipse.datatools.connectivity.oda.design.AxisType <em>Axis Type Object</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for data type '<em>Axis Type Object</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.AxisType
+     * @model instanceClass="org.eclipse.datatools.connectivity.oda.design.AxisType"
+     *        extendedMetaData="name='AxisType:Object' baseType='AxisType'"
+     * @generated
+     */
+    EDataType getAxisTypeObject();
+
+    /**
+     * Returns the meta object for data type '{@link org.eclipse.datatools.connectivity.oda.design.ElementNullability <em>Element Nullability Object</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for data type '<em>Element Nullability Object</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ElementNullability
+     * @model instanceClass="org.eclipse.datatools.connectivity.oda.design.ElementNullability"
+     *        extendedMetaData="name='ElementNullability:Object' baseType='ElementNullability'"
+     * @generated
+     */
+    EDataType getElementNullabilityObject();
+
+    /**
+     * Returns the meta object for data type '{@link org.eclipse.datatools.connectivity.oda.design.ExpressionVariableType <em>Expression Variable Type Object</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for data type '<em>Expression Variable Type Object</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ExpressionVariableType
+     * @model instanceClass="org.eclipse.datatools.connectivity.oda.design.ExpressionVariableType"
+     *        extendedMetaData="name='ExpressionVariableType:Object' baseType='ExpressionVariableType'"
+     * @generated
+     */
+    EDataType getExpressionVariableTypeObject();
+
+    /**
+     * Returns the meta object for data type '{@link org.eclipse.datatools.connectivity.oda.design.HorizontalAlignment <em>Horizontal Alignment Object</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for data type '<em>Horizontal Alignment Object</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.HorizontalAlignment
+     * @model instanceClass="org.eclipse.datatools.connectivity.oda.design.HorizontalAlignment"
+     *        extendedMetaData="name='HorizontalAlignment:Object' baseType='HorizontalAlignment'"
+     * @generated
+     */
+    EDataType getHorizontalAlignmentObject();
+
+    /**
+     * Returns the meta object for data type '{@link org.eclipse.datatools.connectivity.oda.design.InputPromptControlStyle <em>Input Prompt Control Style Object</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for data type '<em>Input Prompt Control Style Object</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.InputPromptControlStyle
+     * @model instanceClass="org.eclipse.datatools.connectivity.oda.design.InputPromptControlStyle"
+     *        extendedMetaData="name='InputPromptControlStyle:Object' baseType='InputPromptControlStyle'"
+     * @generated
+     */
+    EDataType getInputPromptControlStyleObject();
+
+    /**
+     * Returns the meta object for data type '{@link org.eclipse.datatools.connectivity.oda.design.NullOrderingType <em>Null Ordering Type Object</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for data type '<em>Null Ordering Type Object</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.NullOrderingType
+     * @model instanceClass="org.eclipse.datatools.connectivity.oda.design.NullOrderingType"
+     *        extendedMetaData="name='NullOrderingType:Object' baseType='NullOrderingType'"
+     * @generated
+     */
+    EDataType getNullOrderingTypeObject();
+
+    /**
+     * Returns the meta object for data type '{@link org.eclipse.datatools.connectivity.oda.design.OdaComplexDataType <em>Oda Complex Data Type Object</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for data type '<em>Oda Complex Data Type Object</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.OdaComplexDataType
+     * @model instanceClass="org.eclipse.datatools.connectivity.oda.design.OdaComplexDataType"
+     *        extendedMetaData="name='OdaComplexDataType:Object' baseType='OdaComplexDataType'"
+     * @generated
+     */
+    EDataType getOdaComplexDataTypeObject();
+
+    /**
+     * Returns the meta object for data type '{@link org.eclipse.datatools.connectivity.oda.design.OdaScalarDataType <em>Oda Scalar Data Type Object</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for data type '<em>Oda Scalar Data Type Object</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.OdaScalarDataType
+     * @model instanceClass="org.eclipse.datatools.connectivity.oda.design.OdaScalarDataType"
+     *        extendedMetaData="name='OdaScalarDataType:Object' baseType='OdaScalarDataType'"
+     * @generated
+     */
+    EDataType getOdaScalarDataTypeObject();
+
+    /**
+     * Returns the meta object for data type '{@link org.eclipse.datatools.connectivity.oda.design.ParameterMode <em>Parameter Mode Object</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for data type '<em>Parameter Mode Object</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterMode
+     * @model instanceClass="org.eclipse.datatools.connectivity.oda.design.ParameterMode"
+     *        extendedMetaData="name='ParameterMode:Object' baseType='ParameterMode'"
+     * @generated
+     */
+    EDataType getParameterModeObject();
+
+    /**
+     * Returns the meta object for data type '{@link org.eclipse.datatools.connectivity.oda.design.SessionStatus <em>Session Status Object</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for data type '<em>Session Status Object</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.SessionStatus
+     * @model instanceClass="org.eclipse.datatools.connectivity.oda.design.SessionStatus"
+     *        extendedMetaData="name='SessionStatus:Object' baseType='SessionStatus'"
+     * @generated
+     */
+    EDataType getSessionStatusObject();
+
+    /**
+     * Returns the meta object for data type '{@link org.eclipse.datatools.connectivity.oda.design.SortDirectionType <em>Sort Direction Type Object</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for data type '<em>Sort Direction Type Object</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.SortDirectionType
+     * @model instanceClass="org.eclipse.datatools.connectivity.oda.design.SortDirectionType"
+     *        extendedMetaData="name='SortDirectionType:Object' baseType='SortDirectionType'"
+     * @generated
+     */
+    EDataType getSortDirectionTypeObject();
+
+    /**
+     * Returns the meta object for data type '{@link org.eclipse.datatools.connectivity.oda.design.TextFormatType <em>Text Format Type Object</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for data type '<em>Text Format Type Object</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.TextFormatType
+     * @model instanceClass="org.eclipse.datatools.connectivity.oda.design.TextFormatType"
+     *        extendedMetaData="name='TextFormatType:Object' baseType='TextFormatType'"
+     * @generated
+     */
+    EDataType getTextFormatTypeObject();
+
+    /**
+     * Returns the meta object for data type '{@link org.eclipse.datatools.connectivity.oda.design.TextWrapType <em>Text Wrap Type Object</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for data type '<em>Text Wrap Type Object</em>'.
+     * @see org.eclipse.datatools.connectivity.oda.design.TextWrapType
+     * @model instanceClass="org.eclipse.datatools.connectivity.oda.design.TextWrapType"
+     *        extendedMetaData="name='TextWrapType:Object' baseType='TextWrapType'"
+     * @generated
+     */
+    EDataType getTextWrapTypeObject();
+
+    /**
+     * Returns the factory that creates the instances of the model.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the factory that creates the instances of the model.
+     * @generated
+     */
+    DesignFactory getDesignFactory();
+
+    /**
+     * <!-- begin-user-doc -->
+     * Defines literals for the meta objects that represent
+     * <ul>
+     *   <li>each class,</li>
+     *   <li>each feature of each class,</li>
+     *   <li>each enum,</li>
+     *   <li>and each data type</li>
+     * </ul>
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    interface Literals
+    {
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.AndExpressionImpl <em>And Expression</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.AndExpressionImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getAndExpression()
+         * @generated
+         */
+        EClass AND_EXPRESSION = eINSTANCE.getAndExpression();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.AtomicExpressionContextImpl <em>Atomic Expression Context</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.AtomicExpressionContextImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getAtomicExpressionContext()
+         * @generated
+         */
+        EClass ATOMIC_EXPRESSION_CONTEXT = eINSTANCE
+                .getAtomicExpressionContext();
+
+        /**
+         * The meta object literal for the '<em><b>Optional</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute ATOMIC_EXPRESSION_CONTEXT__OPTIONAL = eINSTANCE
+                .getAtomicExpressionContext_Optional();
+
+        /**
+         * The meta object literal for the '<em><b>Variable</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference ATOMIC_EXPRESSION_CONTEXT__VARIABLE = eINSTANCE
+                .getAtomicExpressionContext_Variable();
+
+        /**
+         * The meta object literal for the '<em><b>Arguments</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference ATOMIC_EXPRESSION_CONTEXT__ARGUMENTS = eINSTANCE
+                .getAtomicExpressionContext_Arguments();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.AxisAttributesImpl <em>Axis Attributes</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.AxisAttributesImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getAxisAttributes()
+         * @generated
+         */
+        EClass AXIS_ATTRIBUTES = eINSTANCE.getAxisAttributes();
+
+        /**
+         * The meta object literal for the '<em><b>Axis Type</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute AXIS_ATTRIBUTES__AXIS_TYPE = eINSTANCE
+                .getAxisAttributes_AxisType();
+
+        /**
+         * The meta object literal for the '<em><b>On Column Layout</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute AXIS_ATTRIBUTES__ON_COLUMN_LAYOUT = eINSTANCE
+                .getAxisAttributes_OnColumnLayout();
+
+        /**
+         * The meta object literal for the '<em><b>Related Columns</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference AXIS_ATTRIBUTES__RELATED_COLUMNS = eINSTANCE
+                .getAxisAttributes_RelatedColumns();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ColumnDefinitionImpl <em>Column Definition</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.ColumnDefinitionImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getColumnDefinition()
+         * @generated
+         */
+        EClass COLUMN_DEFINITION = eINSTANCE.getColumnDefinition();
+
+        /**
+         * The meta object literal for the '<em><b>Attributes</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference COLUMN_DEFINITION__ATTRIBUTES = eINSTANCE
+                .getColumnDefinition_Attributes();
+
+        /**
+         * The meta object literal for the '<em><b>Usage Hints</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference COLUMN_DEFINITION__USAGE_HINTS = eINSTANCE
+                .getColumnDefinition_UsageHints();
+
+        /**
+         * The meta object literal for the '<em><b>Multi Dimension Attributes</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference COLUMN_DEFINITION__MULTI_DIMENSION_ATTRIBUTES = eINSTANCE
+                .getColumnDefinition_MultiDimensionAttributes();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.CompositeFilterExpressionImpl <em>Composite Filter Expression</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.CompositeFilterExpressionImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getCompositeFilterExpression()
+         * @generated
+         */
+        EClass COMPOSITE_FILTER_EXPRESSION = eINSTANCE
+                .getCompositeFilterExpression();
+
+        /**
+         * The meta object literal for the '<em><b>Children</b></em>' containment reference list feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference COMPOSITE_FILTER_EXPRESSION__CHILDREN = eINSTANCE
+                .getCompositeFilterExpression_Children();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.CustomDataImpl <em>Custom Data</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.CustomDataImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getCustomData()
+         * @generated
+         */
+        EClass CUSTOM_DATA = eINSTANCE.getCustomData();
+
+        /**
+         * The meta object literal for the '<em><b>Provider Id</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute CUSTOM_DATA__PROVIDER_ID = eINSTANCE
+                .getCustomData_ProviderId();
+
+        /**
+         * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute CUSTOM_DATA__VALUE = eINSTANCE.getCustomData_Value();
+
+        /**
+         * The meta object literal for the '<em><b>Display Value</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute CUSTOM_DATA__DISPLAY_VALUE = eINSTANCE
+                .getCustomData_DisplayValue();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.CustomFilterExpressionImpl <em>Custom Filter Expression</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.CustomFilterExpressionImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getCustomFilterExpression()
+         * @generated
+         */
+        EClass CUSTOM_FILTER_EXPRESSION = eINSTANCE.getCustomFilterExpression();
+
+        /**
+         * The meta object literal for the '<em><b>Type</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference CUSTOM_FILTER_EXPRESSION__TYPE = eINSTANCE
+                .getCustomFilterExpression_Type();
+
+        /**
+         * The meta object literal for the '<em><b>Context</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference CUSTOM_FILTER_EXPRESSION__CONTEXT = eINSTANCE
+                .getCustomFilterExpression_Context();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DataAccessDesignImpl <em>Data Access Design</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DataAccessDesignImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDataAccessDesign()
+         * @generated
+         */
+        EClass DATA_ACCESS_DESIGN = eINSTANCE.getDataAccessDesign();
+
+        /**
+         * The meta object literal for the '<em><b>Data Set Design</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DATA_ACCESS_DESIGN__DATA_SET_DESIGN = eINSTANCE
+                .getDataAccessDesign_DataSetDesign();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DataElementAttributesImpl <em>Data Element Attributes</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DataElementAttributesImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDataElementAttributes()
+         * @generated
+         */
+        EClass DATA_ELEMENT_ATTRIBUTES = eINSTANCE.getDataElementAttributes();
+
+        /**
+         * The meta object literal for the '<em><b>Identifier</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DATA_ELEMENT_ATTRIBUTES__IDENTIFIER = eINSTANCE
+                .getDataElementAttributes_Identifier();
+
+        /**
+         * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DATA_ELEMENT_ATTRIBUTES__NAME = eINSTANCE
+                .getDataElementAttributes_Name();
+
+        /**
+         * The meta object literal for the '<em><b>Position</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DATA_ELEMENT_ATTRIBUTES__POSITION = eINSTANCE
+                .getDataElementAttributes_Position();
+
+        /**
+         * The meta object literal for the '<em><b>Native Data Type Code</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DATA_ELEMENT_ATTRIBUTES__NATIVE_DATA_TYPE_CODE = eINSTANCE
+                .getDataElementAttributes_NativeDataTypeCode();
+
+        /**
+         * The meta object literal for the '<em><b>Precision</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DATA_ELEMENT_ATTRIBUTES__PRECISION = eINSTANCE
+                .getDataElementAttributes_Precision();
+
+        /**
+         * The meta object literal for the '<em><b>Scale</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DATA_ELEMENT_ATTRIBUTES__SCALE = eINSTANCE
+                .getDataElementAttributes_Scale();
+
+        /**
+         * The meta object literal for the '<em><b>Nullability</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DATA_ELEMENT_ATTRIBUTES__NULLABILITY = eINSTANCE
+                .getDataElementAttributes_Nullability();
+
+        /**
+         * The meta object literal for the '<em><b>Ui Hints</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DATA_ELEMENT_ATTRIBUTES__UI_HINTS = eINSTANCE
+                .getDataElementAttributes_UiHints();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DataElementIdentifierImpl <em>Data Element Identifier</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DataElementIdentifierImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDataElementIdentifier()
+         * @generated
+         */
+        EClass DATA_ELEMENT_IDENTIFIER = eINSTANCE.getDataElementIdentifier();
+
+        /**
+         * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DATA_ELEMENT_IDENTIFIER__NAME = eINSTANCE
+                .getDataElementIdentifier_Name();
+
+        /**
+         * The meta object literal for the '<em><b>Position</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DATA_ELEMENT_IDENTIFIER__POSITION = eINSTANCE
+                .getDataElementIdentifier_Position();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DataElementIdentifiersImpl <em>Data Element Identifiers</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DataElementIdentifiersImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDataElementIdentifiers()
+         * @generated
+         */
+        EClass DATA_ELEMENT_IDENTIFIERS = eINSTANCE.getDataElementIdentifiers();
+
+        /**
+         * The meta object literal for the '<em><b>Identifiers</b></em>' containment reference list feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DATA_ELEMENT_IDENTIFIERS__IDENTIFIERS = eINSTANCE
+                .getDataElementIdentifiers_Identifiers();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DataElementUIHintsImpl <em>Data Element UI Hints</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DataElementUIHintsImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDataElementUIHints()
+         * @generated
+         */
+        EClass DATA_ELEMENT_UI_HINTS = eINSTANCE.getDataElementUIHints();
+
+        /**
+         * The meta object literal for the '<em><b>Display Name</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DATA_ELEMENT_UI_HINTS__DISPLAY_NAME = eINSTANCE
+                .getDataElementUIHints_DisplayName();
+
+        /**
+         * The meta object literal for the '<em><b>Description</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DATA_ELEMENT_UI_HINTS__DESCRIPTION = eINSTANCE
+                .getDataElementUIHints_Description();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSetDesignImpl <em>Data Set Design</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DataSetDesignImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDataSetDesign()
+         * @generated
+         */
+        EClass DATA_SET_DESIGN = eINSTANCE.getDataSetDesign();
+
+        /**
+         * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DATA_SET_DESIGN__NAME = eINSTANCE.getDataSetDesign_Name();
+
+        /**
+         * The meta object literal for the '<em><b>Oda Extension Data Set Id</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DATA_SET_DESIGN__ODA_EXTENSION_DATA_SET_ID = eINSTANCE
+                .getDataSetDesign_OdaExtensionDataSetId();
+
+        /**
+         * The meta object literal for the '<em><b>Data Source Design</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DATA_SET_DESIGN__DATA_SOURCE_DESIGN = eINSTANCE
+                .getDataSetDesign_DataSourceDesign();
+
+        /**
+         * The meta object literal for the '<em><b>Query</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DATA_SET_DESIGN__QUERY = eINSTANCE.getDataSetDesign_Query();
+
+        /**
+         * The meta object literal for the '<em><b>Display Name</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DATA_SET_DESIGN__DISPLAY_NAME = eINSTANCE
+                .getDataSetDesign_DisplayName();
+
+        /**
+         * The meta object literal for the '<em><b>Public Properties</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DATA_SET_DESIGN__PUBLIC_PROPERTIES = eINSTANCE
+                .getDataSetDesign_PublicProperties();
+
+        /**
+         * The meta object literal for the '<em><b>Private Properties</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DATA_SET_DESIGN__PRIVATE_PROPERTIES = eINSTANCE
+                .getDataSetDesign_PrivateProperties();
+
+        /**
+         * The meta object literal for the '<em><b>Result Sets</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DATA_SET_DESIGN__RESULT_SETS = eINSTANCE
+                .getDataSetDesign_ResultSets();
+
+        /**
+         * The meta object literal for the '<em><b>Primary Result Set Name</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DATA_SET_DESIGN__PRIMARY_RESULT_SET_NAME = eINSTANCE
+                .getDataSetDesign_PrimaryResultSetName();
+
+        /**
+         * The meta object literal for the '<em><b>Parameters</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DATA_SET_DESIGN__PARAMETERS = eINSTANCE
+                .getDataSetDesign_Parameters();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSetParametersImpl <em>Data Set Parameters</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DataSetParametersImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDataSetParameters()
+         * @generated
+         */
+        EClass DATA_SET_PARAMETERS = eINSTANCE.getDataSetParameters();
+
+        /**
+         * The meta object literal for the '<em><b>Parameter Definitions</b></em>' containment reference list feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DATA_SET_PARAMETERS__PARAMETER_DEFINITIONS = eINSTANCE
+                .getDataSetParameters_ParameterDefinitions();
+
+        /**
+         * The meta object literal for the '<em><b>Derived Meta Data</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DATA_SET_PARAMETERS__DERIVED_META_DATA = eINSTANCE
+                .getDataSetParameters_DerivedMetaData();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSetQueryImpl <em>Data Set Query</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DataSetQueryImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDataSetQuery()
+         * @generated
+         */
+        EClass DATA_SET_QUERY = eINSTANCE.getDataSetQuery();
+
+        /**
+         * The meta object literal for the '<em><b>Query Text</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DATA_SET_QUERY__QUERY_TEXT = eINSTANCE
+                .getDataSetQuery_QueryText();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSourceDesignImpl <em>Data Source Design</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DataSourceDesignImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDataSourceDesign()
+         * @generated
+         */
+        EClass DATA_SOURCE_DESIGN = eINSTANCE.getDataSourceDesign();
+
+        /**
+         * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DATA_SOURCE_DESIGN__NAME = eINSTANCE
+                .getDataSourceDesign_Name();
+
+        /**
+         * The meta object literal for the '<em><b>Oda Extension Id</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DATA_SOURCE_DESIGN__ODA_EXTENSION_ID = eINSTANCE
+                .getDataSourceDesign_OdaExtensionId();
+
+        /**
+         * The meta object literal for the '<em><b>Effective Oda Extension Id</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DATA_SOURCE_DESIGN__EFFECTIVE_ODA_EXTENSION_ID = eINSTANCE
+                .getDataSourceDesign_EffectiveOdaExtensionId();
+
+        /**
+         * The meta object literal for the '<em><b>Oda Extension Data Source Id</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DATA_SOURCE_DESIGN__ODA_EXTENSION_DATA_SOURCE_ID = eINSTANCE
+                .getDataSourceDesign_OdaExtensionDataSourceId();
+
+        /**
+         * The meta object literal for the '<em><b>Display Name</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DATA_SOURCE_DESIGN__DISPLAY_NAME = eINSTANCE
+                .getDataSourceDesign_DisplayName();
+
+        /**
+         * The meta object literal for the '<em><b>Public Properties</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DATA_SOURCE_DESIGN__PUBLIC_PROPERTIES = eINSTANCE
+                .getDataSourceDesign_PublicProperties();
+
+        /**
+         * The meta object literal for the '<em><b>Private Properties</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DATA_SOURCE_DESIGN__PRIVATE_PROPERTIES = eINSTANCE
+                .getDataSourceDesign_PrivateProperties();
+
+        /**
+         * The meta object literal for the '<em><b>Linked Profile Name</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DATA_SOURCE_DESIGN__LINKED_PROFILE_NAME = eINSTANCE
+                .getDataSourceDesign_LinkedProfileName();
+
+        /**
+         * The meta object literal for the '<em><b>Linked Profile Store File Path</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DATA_SOURCE_DESIGN__LINKED_PROFILE_STORE_FILE_PATH = eINSTANCE
+                .getDataSourceDesign_LinkedProfileStoreFilePath();
+
+        /**
+         * The meta object literal for the '<em><b>Host Resource Identifiers</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DATA_SOURCE_DESIGN__HOST_RESOURCE_IDENTIFIERS = eINSTANCE
+                .getDataSourceDesign_HostResourceIdentifiers();
+
+        /**
+         * The meta object literal for the '<em><b>Resource File</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DATA_SOURCE_DESIGN__RESOURCE_FILE = eINSTANCE
+                .getDataSourceDesign_ResourceFile();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DesignerStateImpl <em>Designer State</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignerStateImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDesignerState()
+         * @generated
+         */
+        EClass DESIGNER_STATE = eINSTANCE.getDesignerState();
+
+        /**
+         * The meta object literal for the '<em><b>Version</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DESIGNER_STATE__VERSION = eINSTANCE
+                .getDesignerState_Version();
+
+        /**
+         * The meta object literal for the '<em><b>State Content</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DESIGNER_STATE__STATE_CONTENT = eINSTANCE
+                .getDesignerState_StateContent();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DesignerStateContentImpl <em>Designer State Content</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignerStateContentImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDesignerStateContent()
+         * @generated
+         */
+        EClass DESIGNER_STATE_CONTENT = eINSTANCE.getDesignerStateContent();
+
+        /**
+         * The meta object literal for the '<em><b>State Content As String</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DESIGNER_STATE_CONTENT__STATE_CONTENT_AS_STRING = eINSTANCE
+                .getDesignerStateContent_StateContentAsString();
+
+        /**
+         * The meta object literal for the '<em><b>State Content As Blob</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DESIGNER_STATE_CONTENT__STATE_CONTENT_AS_BLOB = eINSTANCE
+                .getDesignerStateContent_StateContentAsBlob();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DesignSessionRequestImpl <em>Session Request</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignSessionRequestImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDesignSessionRequest()
+         * @generated
+         */
+        EClass DESIGN_SESSION_REQUEST = eINSTANCE.getDesignSessionRequest();
+
+        /**
+         * The meta object literal for the '<em><b>Data Access Design</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DESIGN_SESSION_REQUEST__DATA_ACCESS_DESIGN = eINSTANCE
+                .getDesignSessionRequest_DataAccessDesign();
+
+        /**
+         * The meta object literal for the '<em><b>Editable</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DESIGN_SESSION_REQUEST__EDITABLE = eINSTANCE
+                .getDesignSessionRequest_Editable();
+
+        /**
+         * The meta object literal for the '<em><b>Session Locale</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DESIGN_SESSION_REQUEST__SESSION_LOCALE = eINSTANCE
+                .getDesignSessionRequest_SessionLocale();
+
+        /**
+         * The meta object literal for the '<em><b>Designer State</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DESIGN_SESSION_REQUEST__DESIGNER_STATE = eINSTANCE
+                .getDesignSessionRequest_DesignerState();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DesignSessionResponseImpl <em>Session Response</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignSessionResponseImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDesignSessionResponse()
+         * @generated
+         */
+        EClass DESIGN_SESSION_RESPONSE = eINSTANCE.getDesignSessionResponse();
+
+        /**
+         * The meta object literal for the '<em><b>Session Status</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DESIGN_SESSION_RESPONSE__SESSION_STATUS = eINSTANCE
+                .getDesignSessionResponse_SessionStatus();
+
+        /**
+         * The meta object literal for the '<em><b>Data Access Design</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DESIGN_SESSION_RESPONSE__DATA_ACCESS_DESIGN = eINSTANCE
+                .getDesignSessionResponse_DataAccessDesign();
+
+        /**
+         * The meta object literal for the '<em><b>Designer State</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DESIGN_SESSION_RESPONSE__DESIGNER_STATE = eINSTANCE
+                .getDesignSessionResponse_DesignerState();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DocumentRootImpl <em>Document Root</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DocumentRootImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDocumentRoot()
+         * @generated
+         */
+        EClass DOCUMENT_ROOT = eINSTANCE.getDocumentRoot();
+
+        /**
+         * The meta object literal for the '<em><b>Mixed</b></em>' attribute list feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DOCUMENT_ROOT__MIXED = eINSTANCE.getDocumentRoot_Mixed();
+
+        /**
+         * The meta object literal for the '<em><b>XMLNS Prefix Map</b></em>' map feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DOCUMENT_ROOT__XMLNS_PREFIX_MAP = eINSTANCE
+                .getDocumentRoot_XMLNSPrefixMap();
+
+        /**
+         * The meta object literal for the '<em><b>XSI Schema Location</b></em>' map feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DOCUMENT_ROOT__XSI_SCHEMA_LOCATION = eINSTANCE
+                .getDocumentRoot_XSISchemaLocation();
+
+        /**
+         * The meta object literal for the '<em><b>Oda Design Session</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DOCUMENT_ROOT__ODA_DESIGN_SESSION = eINSTANCE
+                .getDocumentRoot_OdaDesignSession();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DynamicFilterExpressionImpl <em>Dynamic Filter Expression</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DynamicFilterExpressionImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDynamicFilterExpression()
+         * @generated
+         */
+        EClass DYNAMIC_FILTER_EXPRESSION = eINSTANCE
+                .getDynamicFilterExpression();
+
+        /**
+         * The meta object literal for the '<em><b>Context</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DYNAMIC_FILTER_EXPRESSION__CONTEXT = eINSTANCE
+                .getDynamicFilterExpression_Context();
+
+        /**
+         * The meta object literal for the '<em><b>Default Type</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DYNAMIC_FILTER_EXPRESSION__DEFAULT_TYPE = eINSTANCE
+                .getDynamicFilterExpression_DefaultType();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.DynamicValuesQueryImpl <em>Dynamic Values Query</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DynamicValuesQueryImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getDynamicValuesQuery()
+         * @generated
+         */
+        EClass DYNAMIC_VALUES_QUERY = eINSTANCE.getDynamicValuesQuery();
+
+        /**
+         * The meta object literal for the '<em><b>Data Set Design</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DYNAMIC_VALUES_QUERY__DATA_SET_DESIGN = eINSTANCE
+                .getDynamicValuesQuery_DataSetDesign();
+
+        /**
+         * The meta object literal for the '<em><b>Enabled</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DYNAMIC_VALUES_QUERY__ENABLED = eINSTANCE
+                .getDynamicValuesQuery_Enabled();
+
+        /**
+         * The meta object literal for the '<em><b>Value Column Identifier</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DYNAMIC_VALUES_QUERY__VALUE_COLUMN_IDENTIFIER = eINSTANCE
+                .getDynamicValuesQuery_ValueColumnIdentifier();
+
+        /**
+         * The meta object literal for the '<em><b>Value Column</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DYNAMIC_VALUES_QUERY__VALUE_COLUMN = eINSTANCE
+                .getDynamicValuesQuery_ValueColumn();
+
+        /**
+         * The meta object literal for the '<em><b>Display Name Column</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute DYNAMIC_VALUES_QUERY__DISPLAY_NAME_COLUMN = eINSTANCE
+                .getDynamicValuesQuery_DisplayNameColumn();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ExpressionArgumentsImpl <em>Expression Arguments</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.ExpressionArgumentsImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getExpressionArguments()
+         * @generated
+         */
+        EClass EXPRESSION_ARGUMENTS = eINSTANCE.getExpressionArguments();
+
+        /**
+         * The meta object literal for the '<em><b>Expression Parameters</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference EXPRESSION_ARGUMENTS__EXPRESSION_PARAMETERS = eINSTANCE
+                .getExpressionArguments_ExpressionParameters();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ExpressionParameterDefinitionImpl <em>Expression Parameter Definition</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.ExpressionParameterDefinitionImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getExpressionParameterDefinition()
+         * @generated
+         */
+        EClass EXPRESSION_PARAMETER_DEFINITION = eINSTANCE
+                .getExpressionParameterDefinition();
+
+        /**
+         * The meta object literal for the '<em><b>Static Values</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference EXPRESSION_PARAMETER_DEFINITION__STATIC_VALUES = eINSTANCE
+                .getExpressionParameterDefinition_StaticValues();
+
+        /**
+         * The meta object literal for the '<em><b>Dynamic Input Parameter</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference EXPRESSION_PARAMETER_DEFINITION__DYNAMIC_INPUT_PARAMETER = eINSTANCE
+                .getExpressionParameterDefinition_DynamicInputParameter();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ExpressionParametersImpl <em>Expression Parameters</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.ExpressionParametersImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getExpressionParameters()
+         * @generated
+         */
+        EClass EXPRESSION_PARAMETERS = eINSTANCE.getExpressionParameters();
+
+        /**
+         * The meta object literal for the '<em><b>Parameter Definitions</b></em>' containment reference list feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference EXPRESSION_PARAMETERS__PARAMETER_DEFINITIONS = eINSTANCE
+                .getExpressionParameters_ParameterDefinitions();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ExpressionVariableImpl <em>Expression Variable</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.ExpressionVariableImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getExpressionVariable()
+         * @generated
+         */
+        EClass EXPRESSION_VARIABLE = eINSTANCE.getExpressionVariable();
+
+        /**
+         * The meta object literal for the '<em><b>Type</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute EXPRESSION_VARIABLE__TYPE = eINSTANCE
+                .getExpressionVariable_Type();
+
+        /**
+         * The meta object literal for the '<em><b>Identifier</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute EXPRESSION_VARIABLE__IDENTIFIER = eINSTANCE
+                .getExpressionVariable_Identifier();
+
+        /**
+         * The meta object literal for the '<em><b>Native Data Type Code</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute EXPRESSION_VARIABLE__NATIVE_DATA_TYPE_CODE = eINSTANCE
+                .getExpressionVariable_NativeDataTypeCode();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.FilterExpressionImpl <em>Filter Expression</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.FilterExpressionImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getFilterExpression()
+         * @generated
+         */
+        EClass FILTER_EXPRESSION = eINSTANCE.getFilterExpression();
+
+        /**
+         * The meta object literal for the '<em><b>Negatable</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute FILTER_EXPRESSION__NEGATABLE = eINSTANCE
+                .getFilterExpression_Negatable();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.FilterExpressionTypeImpl <em>Filter Expression Type</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.FilterExpressionTypeImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getFilterExpressionType()
+         * @generated
+         */
+        EClass FILTER_EXPRESSION_TYPE = eINSTANCE.getFilterExpressionType();
+
+        /**
+         * The meta object literal for the '<em><b>Declaring Extension Id</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute FILTER_EXPRESSION_TYPE__DECLARING_EXTENSION_ID = eINSTANCE
+                .getFilterExpressionType_DeclaringExtensionId();
+
+        /**
+         * The meta object literal for the '<em><b>Id</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute FILTER_EXPRESSION_TYPE__ID = eINSTANCE
+                .getFilterExpressionType_Id();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.InputElementAttributesImpl <em>Input Element Attributes</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.InputElementAttributesImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getInputElementAttributes()
+         * @generated
+         */
+        EClass INPUT_ELEMENT_ATTRIBUTES = eINSTANCE.getInputElementAttributes();
+
+        /**
+         * The meta object literal for the '<em><b>Default Scalar Value</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute INPUT_ELEMENT_ATTRIBUTES__DEFAULT_SCALAR_VALUE = eINSTANCE
+                .getInputElementAttributes_DefaultScalarValue();
+
+        /**
+         * The meta object literal for the '<em><b>Default Values</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference INPUT_ELEMENT_ATTRIBUTES__DEFAULT_VALUES = eINSTANCE
+                .getInputElementAttributes_DefaultValues();
+
+        /**
+         * The meta object literal for the '<em><b>Editable</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute INPUT_ELEMENT_ATTRIBUTES__EDITABLE = eINSTANCE
+                .getInputElementAttributes_Editable();
+
+        /**
+         * The meta object literal for the '<em><b>Optional</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute INPUT_ELEMENT_ATTRIBUTES__OPTIONAL = eINSTANCE
+                .getInputElementAttributes_Optional();
+
+        /**
+         * The meta object literal for the '<em><b>Masks Value</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute INPUT_ELEMENT_ATTRIBUTES__MASKS_VALUE = eINSTANCE
+                .getInputElementAttributes_MasksValue();
+
+        /**
+         * The meta object literal for the '<em><b>Static Value Choices</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference INPUT_ELEMENT_ATTRIBUTES__STATIC_VALUE_CHOICES = eINSTANCE
+                .getInputElementAttributes_StaticValueChoices();
+
+        /**
+         * The meta object literal for the '<em><b>Dynamic Value Choices</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference INPUT_ELEMENT_ATTRIBUTES__DYNAMIC_VALUE_CHOICES = eINSTANCE
+                .getInputElementAttributes_DynamicValueChoices();
+
+        /**
+         * The meta object literal for the '<em><b>Ui Hints</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference INPUT_ELEMENT_ATTRIBUTES__UI_HINTS = eINSTANCE
+                .getInputElementAttributes_UiHints();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.InputElementUIHintsImpl <em>Input Element UI Hints</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.InputElementUIHintsImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getInputElementUIHints()
+         * @generated
+         */
+        EClass INPUT_ELEMENT_UI_HINTS = eINSTANCE.getInputElementUIHints();
+
+        /**
+         * The meta object literal for the '<em><b>Prompt Style</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute INPUT_ELEMENT_UI_HINTS__PROMPT_STYLE = eINSTANCE
+                .getInputElementUIHints_PromptStyle();
+
+        /**
+         * The meta object literal for the '<em><b>Auto Suggest Threshold</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute INPUT_ELEMENT_UI_HINTS__AUTO_SUGGEST_THRESHOLD = eINSTANCE
+                .getInputElementUIHints_AutoSuggestThreshold();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.InputParameterAttributesImpl <em>Input Parameter Attributes</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.InputParameterAttributesImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getInputParameterAttributes()
+         * @generated
+         */
+        EClass INPUT_PARAMETER_ATTRIBUTES = eINSTANCE
+                .getInputParameterAttributes();
+
+        /**
+         * The meta object literal for the '<em><b>Element Attributes</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference INPUT_PARAMETER_ATTRIBUTES__ELEMENT_ATTRIBUTES = eINSTANCE
+                .getInputParameterAttributes_ElementAttributes();
+
+        /**
+         * The meta object literal for the '<em><b>Ui Hints</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference INPUT_PARAMETER_ATTRIBUTES__UI_HINTS = eINSTANCE
+                .getInputParameterAttributes_UiHints();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.InputParameterUIHintsImpl <em>Input Parameter UI Hints</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.InputParameterUIHintsImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getInputParameterUIHints()
+         * @generated
+         */
+        EClass INPUT_PARAMETER_UI_HINTS = eINSTANCE.getInputParameterUIHints();
+
+        /**
+         * The meta object literal for the '<em><b>Group Prompt Display Name</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute INPUT_PARAMETER_UI_HINTS__GROUP_PROMPT_DISPLAY_NAME = eINSTANCE
+                .getInputParameterUIHints_GroupPromptDisplayName();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.LocaleImpl <em>Locale</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.LocaleImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getLocale()
+         * @generated
+         */
+        EClass LOCALE = eINSTANCE.getLocale();
+
+        /**
+         * The meta object literal for the '<em><b>Language</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute LOCALE__LANGUAGE = eINSTANCE.getLocale_Language();
+
+        /**
+         * The meta object literal for the '<em><b>Country</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute LOCALE__COUNTRY = eINSTANCE.getLocale_Country();
+
+        /**
+         * The meta object literal for the '<em><b>Variant</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute LOCALE__VARIANT = eINSTANCE.getLocale_Variant();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.NameValuePairImpl <em>Name Value Pair</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.NameValuePairImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getNameValuePair()
+         * @generated
+         */
+        EClass NAME_VALUE_PAIR = eINSTANCE.getNameValuePair();
+
+        /**
+         * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute NAME_VALUE_PAIR__NAME = eINSTANCE.getNameValuePair_Name();
+
+        /**
+         * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute NAME_VALUE_PAIR__VALUE = eINSTANCE.getNameValuePair_Value();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.NotExpressionImpl <em>Not Expression</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.NotExpressionImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getNotExpression()
+         * @generated
+         */
+        EClass NOT_EXPRESSION = eINSTANCE.getNotExpression();
+
+        /**
+         * The meta object literal for the '<em><b>Negating Expression</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference NOT_EXPRESSION__NEGATING_EXPRESSION = eINSTANCE
+                .getNotExpression_NegatingExpression();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.OdaDesignSessionImpl <em>Oda Design Session</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.OdaDesignSessionImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getOdaDesignSession()
+         * @generated
+         */
+        EClass ODA_DESIGN_SESSION = eINSTANCE.getOdaDesignSession();
+
+        /**
+         * The meta object literal for the '<em><b>Request</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference ODA_DESIGN_SESSION__REQUEST = eINSTANCE
+                .getOdaDesignSession_Request();
+
+        /**
+         * The meta object literal for the '<em><b>Response</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference ODA_DESIGN_SESSION__RESPONSE = eINSTANCE
+                .getOdaDesignSession_Response();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.OrExpressionImpl <em>Or Expression</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.OrExpressionImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getOrExpression()
+         * @generated
+         */
+        EClass OR_EXPRESSION = eINSTANCE.getOrExpression();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.OutputElementAttributesImpl <em>Output Element Attributes</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.OutputElementAttributesImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getOutputElementAttributes()
+         * @generated
+         */
+        EClass OUTPUT_ELEMENT_ATTRIBUTES = eINSTANCE
+                .getOutputElementAttributes();
+
+        /**
+         * The meta object literal for the '<em><b>Label</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute OUTPUT_ELEMENT_ATTRIBUTES__LABEL = eINSTANCE
+                .getOutputElementAttributes_Label();
+
+        /**
+         * The meta object literal for the '<em><b>Formatting Hints</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference OUTPUT_ELEMENT_ATTRIBUTES__FORMATTING_HINTS = eINSTANCE
+                .getOutputElementAttributes_FormattingHints();
+
+        /**
+         * The meta object literal for the '<em><b>Help Text</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute OUTPUT_ELEMENT_ATTRIBUTES__HELP_TEXT = eINSTANCE
+                .getOutputElementAttributes_HelpText();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ParameterDefinitionImpl <em>Parameter Definition</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.ParameterDefinitionImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getParameterDefinition()
+         * @generated
+         */
+        EClass PARAMETER_DEFINITION = eINSTANCE.getParameterDefinition();
+
+        /**
+         * The meta object literal for the '<em><b>In Out Mode</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute PARAMETER_DEFINITION__IN_OUT_MODE = eINSTANCE
+                .getParameterDefinition_InOutMode();
+
+        /**
+         * The meta object literal for the '<em><b>Attributes</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference PARAMETER_DEFINITION__ATTRIBUTES = eINSTANCE
+                .getParameterDefinition_Attributes();
+
+        /**
+         * The meta object literal for the '<em><b>Input Attributes</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference PARAMETER_DEFINITION__INPUT_ATTRIBUTES = eINSTANCE
+                .getParameterDefinition_InputAttributes();
+
+        /**
+         * The meta object literal for the '<em><b>Output Usage Hints</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference PARAMETER_DEFINITION__OUTPUT_USAGE_HINTS = eINSTANCE
+                .getParameterDefinition_OutputUsageHints();
+
+        /**
+         * The meta object literal for the '<em><b>Fields</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference PARAMETER_DEFINITION__FIELDS = eINSTANCE
+                .getParameterDefinition_Fields();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ParameterFieldDefinitionImpl <em>Parameter Field Definition</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.ParameterFieldDefinitionImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getParameterFieldDefinition()
+         * @generated
+         */
+        EClass PARAMETER_FIELD_DEFINITION = eINSTANCE
+                .getParameterFieldDefinition();
+
+        /**
+         * The meta object literal for the '<em><b>Attributes</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference PARAMETER_FIELD_DEFINITION__ATTRIBUTES = eINSTANCE
+                .getParameterFieldDefinition_Attributes();
+
+        /**
+         * The meta object literal for the '<em><b>Input Attributes</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference PARAMETER_FIELD_DEFINITION__INPUT_ATTRIBUTES = eINSTANCE
+                .getParameterFieldDefinition_InputAttributes();
+
+        /**
+         * The meta object literal for the '<em><b>Output Usage Hints</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference PARAMETER_FIELD_DEFINITION__OUTPUT_USAGE_HINTS = eINSTANCE
+                .getParameterFieldDefinition_OutputUsageHints();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ParameterFieldsImpl <em>Parameter Fields</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.ParameterFieldsImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getParameterFields()
+         * @generated
+         */
+        EClass PARAMETER_FIELDS = eINSTANCE.getParameterFields();
+
+        /**
+         * The meta object literal for the '<em><b>Field Collection</b></em>' containment reference list feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference PARAMETER_FIELDS__FIELD_COLLECTION = eINSTANCE
+                .getParameterFields_FieldCollection();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.PropertiesImpl <em>Properties</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.PropertiesImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getProperties()
+         * @generated
+         */
+        EClass PROPERTIES = eINSTANCE.getProperties();
+
+        /**
+         * The meta object literal for the '<em><b>Properties</b></em>' containment reference list feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference PROPERTIES__PROPERTIES = eINSTANCE
+                .getProperties_Properties();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.PropertyImpl <em>Property</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.PropertyImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getProperty()
+         * @generated
+         */
+        EClass PROPERTY = eINSTANCE.getProperty();
+
+        /**
+         * The meta object literal for the '<em><b>Name Value</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference PROPERTY__NAME_VALUE = eINSTANCE.getProperty_NameValue();
+
+        /**
+         * The meta object literal for the '<em><b>Design Attributes</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference PROPERTY__DESIGN_ATTRIBUTES = eINSTANCE
+                .getProperty_DesignAttributes();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.PropertyAttributesImpl <em>Property Attributes</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.PropertyAttributesImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getPropertyAttributes()
+         * @generated
+         */
+        EClass PROPERTY_ATTRIBUTES = eINSTANCE.getPropertyAttributes();
+
+        /**
+         * The meta object literal for the '<em><b>Display Name</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute PROPERTY_ATTRIBUTES__DISPLAY_NAME = eINSTANCE
+                .getPropertyAttributes_DisplayName();
+
+        /**
+         * The meta object literal for the '<em><b>Element Attributes</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference PROPERTY_ATTRIBUTES__ELEMENT_ATTRIBUTES = eINSTANCE
+                .getPropertyAttributes_ElementAttributes();
+
+        /**
+         * The meta object literal for the '<em><b>Derived Meta Data</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute PROPERTY_ATTRIBUTES__DERIVED_META_DATA = eINSTANCE
+                .getPropertyAttributes_DerivedMetaData();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ResourceIdentifiersImpl <em>Resource Identifiers</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.ResourceIdentifiersImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getResourceIdentifiers()
+         * @generated
+         */
+        EClass RESOURCE_IDENTIFIERS = eINSTANCE.getResourceIdentifiers();
+
+        /**
+         * The meta object literal for the '<em><b>Appl Resource Base URI String</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute RESOURCE_IDENTIFIERS__APPL_RESOURCE_BASE_URI_STRING = eINSTANCE
+                .getResourceIdentifiers_ApplResourceBaseURIString();
+
+        /**
+         * The meta object literal for the '<em><b>Design Resource Base URI String</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute RESOURCE_IDENTIFIERS__DESIGN_RESOURCE_BASE_URI_STRING = eINSTANCE
+                .getResourceIdentifiers_DesignResourceBaseURIString();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ResultSetColumnsImpl <em>Result Set Columns</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.ResultSetColumnsImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getResultSetColumns()
+         * @generated
+         */
+        EClass RESULT_SET_COLUMNS = eINSTANCE.getResultSetColumns();
+
+        /**
+         * The meta object literal for the '<em><b>Result Column Definitions</b></em>' containment reference list feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference RESULT_SET_COLUMNS__RESULT_COLUMN_DEFINITIONS = eINSTANCE
+                .getResultSetColumns_ResultColumnDefinitions();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ResultSetCriteriaImpl <em>Result Set Criteria</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.ResultSetCriteriaImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getResultSetCriteria()
+         * @generated
+         */
+        EClass RESULT_SET_CRITERIA = eINSTANCE.getResultSetCriteria();
+
+        /**
+         * The meta object literal for the '<em><b>Filter Specification</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference RESULT_SET_CRITERIA__FILTER_SPECIFICATION = eINSTANCE
+                .getResultSetCriteria_FilterSpecification();
+
+        /**
+         * The meta object literal for the '<em><b>Row Ordering</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference RESULT_SET_CRITERIA__ROW_ORDERING = eINSTANCE
+                .getResultSetCriteria_RowOrdering();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ResultSetDefinitionImpl <em>Result Set Definition</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.ResultSetDefinitionImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getResultSetDefinition()
+         * @generated
+         */
+        EClass RESULT_SET_DEFINITION = eINSTANCE.getResultSetDefinition();
+
+        /**
+         * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute RESULT_SET_DEFINITION__NAME = eINSTANCE
+                .getResultSetDefinition_Name();
+
+        /**
+         * The meta object literal for the '<em><b>Result Set Columns</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference RESULT_SET_DEFINITION__RESULT_SET_COLUMNS = eINSTANCE
+                .getResultSetDefinition_ResultSetColumns();
+
+        /**
+         * The meta object literal for the '<em><b>Criteria</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference RESULT_SET_DEFINITION__CRITERIA = eINSTANCE
+                .getResultSetDefinition_Criteria();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ResultSetsImpl <em>Result Sets</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.ResultSetsImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getResultSets()
+         * @generated
+         */
+        EClass RESULT_SETS = eINSTANCE.getResultSets();
+
+        /**
+         * The meta object literal for the '<em><b>Result Set Definitions</b></em>' containment reference list feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference RESULT_SETS__RESULT_SET_DEFINITIONS = eINSTANCE
+                .getResultSets_ResultSetDefinitions();
+
+        /**
+         * The meta object literal for the '<em><b>Derived Meta Data</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute RESULT_SETS__DERIVED_META_DATA = eINSTANCE
+                .getResultSets_DerivedMetaData();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ResultSubsetImpl <em>Result Subset</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.ResultSubsetImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getResultSubset()
+         * @generated
+         */
+        EClass RESULT_SUBSET = eINSTANCE.getResultSubset();
+
+        /**
+         * The meta object literal for the '<em><b>Data Set Design</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference RESULT_SUBSET__DATA_SET_DESIGN = eINSTANCE
+                .getResultSubset_DataSetDesign();
+
+        /**
+         * The meta object literal for the '<em><b>Result Set Name</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute RESULT_SUBSET__RESULT_SET_NAME = eINSTANCE
+                .getResultSubset_ResultSetName();
+
+        /**
+         * The meta object literal for the '<em><b>Column Identifiers</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference RESULT_SUBSET__COLUMN_IDENTIFIERS = eINSTANCE
+                .getResultSubset_ColumnIdentifiers();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ScalarValueChoicesImpl <em>Scalar Value Choices</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.ScalarValueChoicesImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getScalarValueChoices()
+         * @generated
+         */
+        EClass SCALAR_VALUE_CHOICES = eINSTANCE.getScalarValueChoices();
+
+        /**
+         * The meta object literal for the '<em><b>Scalar Values</b></em>' containment reference list feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference SCALAR_VALUE_CHOICES__SCALAR_VALUES = eINSTANCE
+                .getScalarValueChoices_ScalarValues();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ScalarValueDefinitionImpl <em>Scalar Value Definition</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.ScalarValueDefinitionImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getScalarValueDefinition()
+         * @generated
+         */
+        EClass SCALAR_VALUE_DEFINITION = eINSTANCE.getScalarValueDefinition();
+
+        /**
+         * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute SCALAR_VALUE_DEFINITION__VALUE = eINSTANCE
+                .getScalarValueDefinition_Value();
+
+        /**
+         * The meta object literal for the '<em><b>Display Name</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute SCALAR_VALUE_DEFINITION__DISPLAY_NAME = eINSTANCE
+                .getScalarValueDefinition_DisplayName();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.SortKeyImpl <em>Sort Key</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.SortKeyImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getSortKey()
+         * @generated
+         */
+        EClass SORT_KEY = eINSTANCE.getSortKey();
+
+        /**
+         * The meta object literal for the '<em><b>Column Identifier</b></em>' containment reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference SORT_KEY__COLUMN_IDENTIFIER = eINSTANCE
+                .getSortKey_ColumnIdentifier();
+
+        /**
+         * The meta object literal for the '<em><b>Column Name</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute SORT_KEY__COLUMN_NAME = eINSTANCE.getSortKey_ColumnName();
+
+        /**
+         * The meta object literal for the '<em><b>Column Position</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute SORT_KEY__COLUMN_POSITION = eINSTANCE
+                .getSortKey_ColumnPosition();
+
+        /**
+         * The meta object literal for the '<em><b>Sort Direction</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute SORT_KEY__SORT_DIRECTION = eINSTANCE
+                .getSortKey_SortDirection();
+
+        /**
+         * The meta object literal for the '<em><b>Null Value Ordering</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute SORT_KEY__NULL_VALUE_ORDERING = eINSTANCE
+                .getSortKey_NullValueOrdering();
+
+        /**
+         * The meta object literal for the '<em><b>Optional</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute SORT_KEY__OPTIONAL = eINSTANCE.getSortKey_Optional();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.SortSpecificationImpl <em>Sort Specification</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.SortSpecificationImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getSortSpecification()
+         * @generated
+         */
+        EClass SORT_SPECIFICATION = eINSTANCE.getSortSpecification();
+
+        /**
+         * The meta object literal for the '<em><b>Sort Keys</b></em>' containment reference list feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference SORT_SPECIFICATION__SORT_KEYS = eINSTANCE
+                .getSortSpecification_SortKeys();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.StaticValuesImpl <em>Static Values</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.StaticValuesImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getStaticValues()
+         * @generated
+         */
+        EClass STATIC_VALUES = eINSTANCE.getStaticValues();
+
+        /**
+         * The meta object literal for the '<em><b>Values</b></em>' attribute list feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute STATIC_VALUES__VALUES = eINSTANCE.getStaticValues_Values();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.impl.ValueFormatHintsImpl <em>Value Format Hints</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.ValueFormatHintsImpl
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getValueFormatHints()
+         * @generated
+         */
+        EClass VALUE_FORMAT_HINTS = eINSTANCE.getValueFormatHints();
+
+        /**
+         * The meta object literal for the '<em><b>Display Size</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute VALUE_FORMAT_HINTS__DISPLAY_SIZE = eINSTANCE
+                .getValueFormatHints_DisplaySize();
+
+        /**
+         * The meta object literal for the '<em><b>Display Format</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute VALUE_FORMAT_HINTS__DISPLAY_FORMAT = eINSTANCE
+                .getValueFormatHints_DisplayFormat();
+
+        /**
+         * The meta object literal for the '<em><b>Text Format Type</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute VALUE_FORMAT_HINTS__TEXT_FORMAT_TYPE = eINSTANCE
+                .getValueFormatHints_TextFormatType();
+
+        /**
+         * The meta object literal for the '<em><b>Horizontal Alignment</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute VALUE_FORMAT_HINTS__HORIZONTAL_ALIGNMENT = eINSTANCE
+                .getValueFormatHints_HorizontalAlignment();
+
+        /**
+         * The meta object literal for the '<em><b>Text Wrap Type</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute VALUE_FORMAT_HINTS__TEXT_WRAP_TYPE = eINSTANCE
+                .getValueFormatHints_TextWrapType();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.AxisType <em>Axis Type</em>}' enum.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.AxisType
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getAxisType()
+         * @generated
+         */
+        EEnum AXIS_TYPE = eINSTANCE.getAxisType();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.ElementNullability <em>Element Nullability</em>}' enum.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.ElementNullability
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getElementNullability()
+         * @generated
+         */
+        EEnum ELEMENT_NULLABILITY = eINSTANCE.getElementNullability();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.ExpressionVariableType <em>Expression Variable Type</em>}' enum.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.ExpressionVariableType
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getExpressionVariableType()
+         * @generated
+         */
+        EEnum EXPRESSION_VARIABLE_TYPE = eINSTANCE.getExpressionVariableType();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.HorizontalAlignment <em>Horizontal Alignment</em>}' enum.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.HorizontalAlignment
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getHorizontalAlignment()
+         * @generated
+         */
+        EEnum HORIZONTAL_ALIGNMENT = eINSTANCE.getHorizontalAlignment();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.InputPromptControlStyle <em>Input Prompt Control Style</em>}' enum.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.InputPromptControlStyle
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getInputPromptControlStyle()
+         * @generated
+         */
+        EEnum INPUT_PROMPT_CONTROL_STYLE = eINSTANCE
+                .getInputPromptControlStyle();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.NullOrderingType <em>Null Ordering Type</em>}' enum.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.NullOrderingType
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getNullOrderingType()
+         * @generated
+         */
+        EEnum NULL_ORDERING_TYPE = eINSTANCE.getNullOrderingType();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.OdaComplexDataType <em>Oda Complex Data Type</em>}' enum.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.OdaComplexDataType
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getOdaComplexDataType()
+         * @generated
+         */
+        EEnum ODA_COMPLEX_DATA_TYPE = eINSTANCE.getOdaComplexDataType();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.OdaScalarDataType <em>Oda Scalar Data Type</em>}' enum.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.OdaScalarDataType
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getOdaScalarDataType()
+         * @generated
+         */
+        EEnum ODA_SCALAR_DATA_TYPE = eINSTANCE.getOdaScalarDataType();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.ParameterMode <em>Parameter Mode</em>}' enum.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.ParameterMode
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getParameterMode()
+         * @generated
+         */
+        EEnum PARAMETER_MODE = eINSTANCE.getParameterMode();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.SessionStatus <em>Session Status</em>}' enum.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.SessionStatus
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getSessionStatus()
+         * @generated
+         */
+        EEnum SESSION_STATUS = eINSTANCE.getSessionStatus();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.SortDirectionType <em>Sort Direction Type</em>}' enum.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.SortDirectionType
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getSortDirectionType()
+         * @generated
+         */
+        EEnum SORT_DIRECTION_TYPE = eINSTANCE.getSortDirectionType();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.TextFormatType <em>Text Format Type</em>}' enum.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.TextFormatType
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getTextFormatType()
+         * @generated
+         */
+        EEnum TEXT_FORMAT_TYPE = eINSTANCE.getTextFormatType();
+
+        /**
+         * The meta object literal for the '{@link org.eclipse.datatools.connectivity.oda.design.TextWrapType <em>Text Wrap Type</em>}' enum.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.TextWrapType
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getTextWrapType()
+         * @generated
+         */
+        EEnum TEXT_WRAP_TYPE = eINSTANCE.getTextWrapType();
+
+        /**
+         * The meta object literal for the '<em>Axis Type Object</em>' data type.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.AxisType
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getAxisTypeObject()
+         * @generated
+         */
+        EDataType AXIS_TYPE_OBJECT = eINSTANCE.getAxisTypeObject();
+
+        /**
+         * The meta object literal for the '<em>Element Nullability Object</em>' data type.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.ElementNullability
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getElementNullabilityObject()
+         * @generated
+         */
+        EDataType ELEMENT_NULLABILITY_OBJECT = eINSTANCE
+                .getElementNullabilityObject();
+
+        /**
+         * The meta object literal for the '<em>Expression Variable Type Object</em>' data type.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.ExpressionVariableType
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getExpressionVariableTypeObject()
+         * @generated
+         */
+        EDataType EXPRESSION_VARIABLE_TYPE_OBJECT = eINSTANCE
+                .getExpressionVariableTypeObject();
+
+        /**
+         * The meta object literal for the '<em>Horizontal Alignment Object</em>' data type.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.HorizontalAlignment
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getHorizontalAlignmentObject()
+         * @generated
+         */
+        EDataType HORIZONTAL_ALIGNMENT_OBJECT = eINSTANCE
+                .getHorizontalAlignmentObject();
+
+        /**
+         * The meta object literal for the '<em>Input Prompt Control Style Object</em>' data type.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.InputPromptControlStyle
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getInputPromptControlStyleObject()
+         * @generated
+         */
+        EDataType INPUT_PROMPT_CONTROL_STYLE_OBJECT = eINSTANCE
+                .getInputPromptControlStyleObject();
+
+        /**
+         * The meta object literal for the '<em>Null Ordering Type Object</em>' data type.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.NullOrderingType
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getNullOrderingTypeObject()
+         * @generated
+         */
+        EDataType NULL_ORDERING_TYPE_OBJECT = eINSTANCE
+                .getNullOrderingTypeObject();
+
+        /**
+         * The meta object literal for the '<em>Oda Complex Data Type Object</em>' data type.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.OdaComplexDataType
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getOdaComplexDataTypeObject()
+         * @generated
+         */
+        EDataType ODA_COMPLEX_DATA_TYPE_OBJECT = eINSTANCE
+                .getOdaComplexDataTypeObject();
+
+        /**
+         * The meta object literal for the '<em>Oda Scalar Data Type Object</em>' data type.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.OdaScalarDataType
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getOdaScalarDataTypeObject()
+         * @generated
+         */
+        EDataType ODA_SCALAR_DATA_TYPE_OBJECT = eINSTANCE
+                .getOdaScalarDataTypeObject();
+
+        /**
+         * The meta object literal for the '<em>Parameter Mode Object</em>' data type.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.ParameterMode
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getParameterModeObject()
+         * @generated
+         */
+        EDataType PARAMETER_MODE_OBJECT = eINSTANCE.getParameterModeObject();
+
+        /**
+         * The meta object literal for the '<em>Session Status Object</em>' data type.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.SessionStatus
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getSessionStatusObject()
+         * @generated
+         */
+        EDataType SESSION_STATUS_OBJECT = eINSTANCE.getSessionStatusObject();
+
+        /**
+         * The meta object literal for the '<em>Sort Direction Type Object</em>' data type.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.SortDirectionType
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getSortDirectionTypeObject()
+         * @generated
+         */
+        EDataType SORT_DIRECTION_TYPE_OBJECT = eINSTANCE
+                .getSortDirectionTypeObject();
+
+        /**
+         * The meta object literal for the '<em>Text Format Type Object</em>' data type.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.TextFormatType
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getTextFormatTypeObject()
+         * @generated
+         */
+        EDataType TEXT_FORMAT_TYPE_OBJECT = eINSTANCE.getTextFormatTypeObject();
+
+        /**
+         * The meta object literal for the '<em>Text Wrap Type Object</em>' data type.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see org.eclipse.datatools.connectivity.oda.design.TextWrapType
+         * @see org.eclipse.datatools.connectivity.oda.design.impl.DesignPackageImpl#getTextWrapTypeObject()
+         * @generated
+         */
+        EDataType TEXT_WRAP_TYPE_OBJECT = eINSTANCE.getTextWrapTypeObject();
+
+    }
+
+} //DesignPackage
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DesignSessionRequest.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DesignSessionRequest.java
new file mode 100644
index 0000000..d0ae11f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DesignSessionRequest.java
@@ -0,0 +1,220 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DesignSessionRequest.java,v 1.5 2006/03/09 08:50:09 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Defines a design session requested by an ODA host designer.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest#getDataAccessDesign <em>Data Access Design</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest#isEditable <em>Editable</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest#getSessionLocale <em>Session Locale</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest#getDesignerState <em>Designer State</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDesignSessionRequest()
+ * @model extendedMetaData="name='DesignSessionRequest' kind='elementOnly'"
+ * @generated
+ */
+public interface DesignSessionRequest extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2007 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Obtains the Data Source Design associated with the
+     * top level Data Set in this Request session.
+     * @return the value of the '<em>Data Source Design</em>' containment reference;
+     *          may be null if none is specified.
+     * @see #getDataAccessDesign()
+     * @generated NOT
+     */
+    DataSourceDesign getDataSourceDesign();
+
+    /**
+     * Obtains the top-level Data Set Design associated with this
+     * Request session.
+     * @return the value of the '<em>Data Set Design</em>' containment reference;
+     *          may be null if none is specified.
+     * @see #getDataAccessDesign()
+     * @generated NOT
+     */
+    DataSetDesign getDataSetDesign();
+
+    /**
+     * Returns the value of the '<em><b>Data Access Design</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Data Access Design</em>' containment reference.
+     * @see #setDataAccessDesign(DataAccessDesign)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDesignSessionRequest_DataAccessDesign()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='dataAccessDesign' namespace='##targetNamespace'"
+     * @generated
+     */
+    DataAccessDesign getDataAccessDesign();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest#getDataAccessDesign <em>Data Access Design</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Data Access Design</em>' containment reference.
+     * @see #getDataAccessDesign()
+     * @generated
+     */
+    void setDataAccessDesign( DataAccessDesign value );
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest#getDataAccessDesign <em>Data Access Design</em>}' containment reference
+     * with a new data access design that contains a
+     * new data set associated with given data source design.
+     * @param dataSourceDesign
+     * @see #setDataAccessDesign(DataAccessDesign)
+     * @generated NOT
+     */
+    void setNewDataAccessDesign( DataSourceDesign dataSourceDesign );
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest#getDataAccessDesign <em>Data Access Design</em>}' containment reference
+     * with a new data access design that contains the
+     * specified data set design.
+     * @param dataSetDesign
+     * @see #setDataAccessDesign(DataAccessDesign)
+     * @generated NOT
+     */
+    void setNewDataAccessDesign( DataSetDesign dataSetDesign );
+
+    /**
+     * Returns the value of the '<em><b>Editable</b></em>' attribute.
+     * The default value is <code>"true"</code>.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Specifies whether the design session is requested to be in an "editable" or "read-only" mode.  For a read-only design session, the ODA host designer would ignore any changes found in the session response.  It is up to individual ODA designer to honor the requested mode and adjusts its UI behavior.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Editable</em>' attribute.
+     * @see #isSetEditable()
+     * @see #unsetEditable()
+     * @see #setEditable(boolean)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDesignSessionRequest_Editable()
+     * @model default="true" unique="false" unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Boolean"
+     *        extendedMetaData="kind='element' name='editable' namespace='##targetNamespace'"
+     * @generated
+     */
+    boolean isEditable();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest#isEditable <em>Editable</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Editable</em>' attribute.
+     * @see #isSetEditable()
+     * @see #unsetEditable()
+     * @see #isEditable()
+     * @generated
+     */
+    void setEditable( boolean value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest#isEditable <em>Editable</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetEditable()
+     * @see #isEditable()
+     * @see #setEditable(boolean)
+     * @generated
+     */
+    void unsetEditable();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest#isEditable <em>Editable</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Editable</em>' attribute is set.
+     * @see #unsetEditable()
+     * @see #isEditable()
+     * @see #setEditable(boolean)
+     * @generated
+     */
+    boolean isSetEditable();
+
+    /**
+     * Returns the value of the '<em><b>Session Locale</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The suggested locale of the requested design session; normally the client locale of a locale-sensitive host designer.  It is up to an ODA designer whether it can support and honor the suggested locale.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Session Locale</em>' containment reference.
+     * @see #setSessionLocale(Locale)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDesignSessionRequest_SessionLocale()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='sessionLocale' namespace='##targetNamespace'"
+     * @generated
+     */
+    Locale getSessionLocale();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest#getSessionLocale <em>Session Locale</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Session Locale</em>' containment reference.
+     * @see #getSessionLocale()
+     * @generated
+     */
+    void setSessionLocale( Locale value );
+
+    /**
+     * Returns the value of the '<em><b>Designer State</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The private state of the ODA designer at the last design session.  It can be used by an ODA designer to resume the state of its last session.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Designer State</em>' containment reference.
+     * @see #setDesignerState(DesignerState)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDesignSessionRequest_DesignerState()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='designerState' namespace='##targetNamespace'"
+     * @generated
+     */
+    DesignerState getDesignerState();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest#getDesignerState <em>Designer State</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Designer State</em>' containment reference.
+     * @see #getDesignerState()
+     * @generated
+     */
+    void setDesignerState( DesignerState value );
+
+} // DesignSessionRequest
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DesignSessionResponse.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DesignSessionResponse.java
new file mode 100644
index 0000000..c5df20c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DesignSessionResponse.java
@@ -0,0 +1,189 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DesignSessionResponse.java,v 1.4 2006/02/28 21:02:29 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Defines a design session response to an ODA host designer upon exit of the session.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionResponse#getSessionStatus <em>Session Status</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionResponse#getDataAccessDesign <em>Data Access Design</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionResponse#getDesignerState <em>Designer State</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDesignSessionResponse()
+ * @model extendedMetaData="name='DesignSessionResponse' kind='elementOnly'"
+ * @generated
+ */
+public interface DesignSessionResponse extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2007 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Obtains the Data Source Design associated with the
+     * top level Data Set in this Response session.
+     * @return the value of the '<em>Data Source Design</em>' containment reference;
+     *          may be null if none is specified.
+     * @see #getDataAccessDesign()
+     * @generated NOT
+     */
+    DataSourceDesign getDataSourceDesign();
+
+    /**
+     * Obtains the top-level Data Set Design associated with this
+     * Response session.
+     * @return the value of the '<em>Data Set Design</em>' containment reference;
+     *          may be null if none is specified.
+     * @see #getDataAccessDesign()
+     * @generated NOT
+     */
+    DataSetDesign getDataSetDesign();
+
+    /**
+     * Returns the value of the '<em><b>Session Status</b></em>' attribute.
+     * The default value is <code>"Ok"</code>.
+     * The literals are from the enumeration {@link org.eclipse.datatools.connectivity.oda.design.SessionStatus}.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * ODA design session exit status.  This tells the ODA host designer whether the design session was successful, and how it may consume and save the session response information.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Session Status</em>' attribute.
+     * @see org.eclipse.datatools.connectivity.oda.design.SessionStatus
+     * @see #isSetSessionStatus()
+     * @see #unsetSessionStatus()
+     * @see #setSessionStatus(SessionStatus)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDesignSessionResponse_SessionStatus()
+     * @model default="Ok" unique="false" unsettable="true" required="true"
+     *        extendedMetaData="kind='element' name='sessionStatus' namespace='##targetNamespace'"
+     * @generated
+     */
+    SessionStatus getSessionStatus();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionResponse#getSessionStatus <em>Session Status</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Session Status</em>' attribute.
+     * @see org.eclipse.datatools.connectivity.oda.design.SessionStatus
+     * @see #isSetSessionStatus()
+     * @see #unsetSessionStatus()
+     * @see #getSessionStatus()
+     * @generated
+     */
+    void setSessionStatus( SessionStatus value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionResponse#getSessionStatus <em>Session Status</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetSessionStatus()
+     * @see #getSessionStatus()
+     * @see #setSessionStatus(SessionStatus)
+     * @generated
+     */
+    void unsetSessionStatus();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionResponse#getSessionStatus <em>Session Status</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Session Status</em>' attribute is set.
+     * @see #unsetSessionStatus()
+     * @see #getSessionStatus()
+     * @see #setSessionStatus(SessionStatus)
+     * @generated
+     */
+    boolean isSetSessionStatus();
+
+    /**
+     * Returns the value of the '<em><b>Data Access Design</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The latest data access design as updated during the design session.  Any updates should be made in own instance, separate from the instance provided in the design session request.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Data Access Design</em>' containment reference.
+     * @see #setDataAccessDesign(DataAccessDesign)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDesignSessionResponse_DataAccessDesign()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='dataAccessDesign' namespace='##targetNamespace'"
+     * @generated
+     */
+    DataAccessDesign getDataAccessDesign();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionResponse#getDataAccessDesign <em>Data Access Design</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Data Access Design</em>' containment reference.
+     * @see #getDataAccessDesign()
+     * @generated
+     */
+    void setDataAccessDesign( DataAccessDesign value );
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionResponse#getDataAccessDesign <em>Data Access Design</em>}' containment reference
+     * with a new data access design with a
+     * new data set associated with given data source design.
+     * @param dataSourceDesign
+     * @see #setDataAccessDesign(DataAccessDesign)
+     * @generated NOT
+     */
+    void setNewDataAccessDesign( DataSourceDesign dataSourceDesign );
+
+    /**
+     * Returns the value of the '<em><b>Designer State</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The private state of the ODA designer upon exit of a design session.  An ODA host designer must handle it as a black-box; it should simply provide persistence services and pass it back in the next session request.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Designer State</em>' containment reference.
+     * @see #setDesignerState(DesignerState)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDesignSessionResponse_DesignerState()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='designerState' namespace='##targetNamespace'"
+     * @generated
+     */
+    DesignerState getDesignerState();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionResponse#getDesignerState <em>Designer State</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Designer State</em>' containment reference.
+     * @see #getDesignerState()
+     * @generated
+     */
+    void setDesignerState( DesignerState value );
+
+} // DesignSessionResponse
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DesignerState.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DesignerState.java
new file mode 100644
index 0000000..8f77869
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DesignerState.java
@@ -0,0 +1,119 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DesignerState.java,v 1.2 2006/02/12 06:45:56 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Private state of an ODA designer upon exit of a design session.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DesignerState#getVersion <em>Version</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DesignerState#getStateContent <em>State Content</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDesignerState()
+ * @model extendedMetaData="name='DesignerState' kind='elementOnly'"
+ * @generated
+ */
+public interface DesignerState extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2007 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Version</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Version of the designer state's data format.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Version</em>' attribute.
+     * @see #setVersion(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDesignerState_Version()
+     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
+     *        extendedMetaData="kind='element' name='version' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getVersion();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DesignerState#getVersion <em>Version</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Version</em>' attribute.
+     * @see #getVersion()
+     * @generated
+     */
+    void setVersion( String value );
+
+    /**
+     * Returns the value of the '<em><b>State Content</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Designer's private state information; its content is a blackbox to an ODA host.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>State Content</em>' containment reference.
+     * @see #setStateContent(DesignerStateContent)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDesignerState_StateContent()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='stateContent' namespace='##targetNamespace'"
+     * @generated
+     */
+    DesignerStateContent getStateContent();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DesignerState#getStateContent <em>State Content</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>State Content</em>' containment reference.
+     * @see #getStateContent()
+     * @generated
+     */
+    void setStateContent( DesignerStateContent value );
+
+    /**
+     * Sets the value of the <em>State Content As String</em> attribute
+     * in a new <em>State Content</em> containment reference.
+     * @param value the String content value of the new '<em>State Content</em>' containment reference.
+     * @see #setStateContent(DesignerStateContent)
+     * @generated NOT
+     */
+    void setNewStateContentAsString( String value );
+
+    /**
+     * Sets the value of the <em>State Content As Blob</em> attribute
+     * in a new <em>State Content</em> containment reference.
+     * @param value the Blob content value of the new '<em>State Content</em>' containment reference.
+     * @see #setStateContent(DesignerStateContent)
+     * @generated NOT
+     */
+    void setNewStateContentAsBlob( byte[] value );
+
+} // DesignerState
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DesignerStateContent.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DesignerStateContent.java
new file mode 100644
index 0000000..879b10b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DesignerStateContent.java
@@ -0,0 +1,101 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DesignerStateContent.java,v 1.1 2005/12/29 04:17:56 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * An ODA Designer's private state information; its content is a blackbox to an ODA host.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DesignerStateContent#getStateContentAsString <em>State Content As String</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DesignerStateContent#getStateContentAsBlob <em>State Content As Blob</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDesignerStateContent()
+ * @model extendedMetaData="name='DesignerStateContent' kind='elementOnly'"
+ * @generated
+ */
+public interface DesignerStateContent extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2007 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>State Content As String</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * State content in string format.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>State Content As String</em>' attribute.
+     * @see #setStateContentAsString(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDesignerStateContent_StateContentAsString()
+     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String"
+     *        extendedMetaData="kind='element' name='stateContentAsString' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getStateContentAsString();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DesignerStateContent#getStateContentAsString <em>State Content As String</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>State Content As String</em>' attribute.
+     * @see #getStateContentAsString()
+     * @generated
+     */
+    void setStateContentAsString( String value );
+
+    /**
+     * Returns the value of the '<em><b>State Content As Blob</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * State content in binary format.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>State Content As Blob</em>' attribute.
+     * @see #setStateContentAsBlob(byte[])
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDesignerStateContent_StateContentAsBlob()
+     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.Base64Binary"
+     *        extendedMetaData="kind='element' name='stateContentAsBlob' namespace='##targetNamespace'"
+     * @generated
+     */
+    byte[] getStateContentAsBlob();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DesignerStateContent#getStateContentAsBlob <em>State Content As Blob</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>State Content As Blob</em>' attribute.
+     * @see #getStateContentAsBlob()
+     * @generated
+     */
+    void setStateContentAsBlob( byte[] value );
+
+} // DesignerStateContent
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DocumentRoot.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DocumentRoot.java
new file mode 100644
index 0000000..d5bc74b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DocumentRoot.java
@@ -0,0 +1,118 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DocumentRoot.java,v 1.2 2007/04/11 02:59:53 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.common.util.EMap;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.emf.ecore.util.FeatureMap;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DocumentRoot#getMixed <em>Mixed</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DocumentRoot#getXMLNSPrefixMap <em>XMLNS Prefix Map</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DocumentRoot#getXSISchemaLocation <em>XSI Schema Location</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DocumentRoot#getOdaDesignSession <em>Oda Design Session</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDocumentRoot()
+ * @model extendedMetaData="name='' kind='mixed'"
+ * @generated
+ */
+public interface DocumentRoot extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Mixed</b></em>' attribute list.
+     * The list contents are of type {@link org.eclipse.emf.ecore.util.FeatureMap.Entry}.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Mixed</em>' attribute list.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDocumentRoot_Mixed()
+     * @model unique="false" dataType="org.eclipse.emf.ecore.EFeatureMapEntry" many="true"
+     *        extendedMetaData="kind='elementWildcard' name=':mixed'"
+     * @generated
+     */
+    FeatureMap getMixed();
+
+    /**
+     * Returns the value of the '<em><b>XMLNS Prefix Map</b></em>' map.
+     * The key is of type {@link java.lang.String},
+     * and the value is of type {@link java.lang.String},
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>XMLNS Prefix Map</em>' map.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDocumentRoot_XMLNSPrefixMap()
+     * @model mapType="org.eclipse.emf.ecore.EStringToStringMapEntry<org.eclipse.emf.ecore.EString, org.eclipse.emf.ecore.EString>" transient="true"
+     *        extendedMetaData="kind='attribute' name='xmlns:prefix'"
+     * @generated
+     */
+    EMap<String, String> getXMLNSPrefixMap();
+
+    /**
+     * Returns the value of the '<em><b>XSI Schema Location</b></em>' map.
+     * The key is of type {@link java.lang.String},
+     * and the value is of type {@link java.lang.String},
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>XSI Schema Location</em>' map.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDocumentRoot_XSISchemaLocation()
+     * @model mapType="org.eclipse.emf.ecore.EStringToStringMapEntry<org.eclipse.emf.ecore.EString, org.eclipse.emf.ecore.EString>" transient="true"
+     *        extendedMetaData="kind='attribute' name='xsi:schemaLocation'"
+     * @generated
+     */
+    EMap<String, String> getXSISchemaLocation();
+
+    /**
+     * Returns the value of the '<em><b>Oda Design Session</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Definition of an ODA design session on a Data Access Design.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Oda Design Session</em>' containment reference.
+     * @see #setOdaDesignSession(OdaDesignSession)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDocumentRoot_OdaDesignSession()
+     * @model containment="true" upper="-2" transient="true" volatile="true" derived="true"
+     *        extendedMetaData="kind='element' name='odaDesignSession' namespace='##targetNamespace'"
+     * @generated
+     */
+    OdaDesignSession getOdaDesignSession();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DocumentRoot#getOdaDesignSession <em>Oda Design Session</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Oda Design Session</em>' containment reference.
+     * @see #getOdaDesignSession()
+     * @generated
+     */
+    void setOdaDesignSession( OdaDesignSession value );
+
+} // DocumentRoot
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DynamicFilterExpression.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DynamicFilterExpression.java
new file mode 100644
index 0000000..b25b293
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DynamicFilterExpression.java
@@ -0,0 +1,148 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DynamicFilterExpression.java,v 1.2 2009/10/23 20:17:26 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Dynamic Filter Expression</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * A built-in filter expression designed with a pre-defined variable.  Its specific type of expression(s) to apply and corresponding argument value(s) to collect will be dynamically specified at runtime.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DynamicFilterExpression#getContext <em>Context</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DynamicFilterExpression#getDefaultType <em>Default Type</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDynamicFilterExpression()
+ * @since 3.3 (DTP 1.8)
+ * @model extendedMetaData="name='DynamicFilterExpression' kind='elementOnly'"
+ * @generated
+ */
+public interface DynamicFilterExpression extends FilterExpression
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Context</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Context</em>' containment reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Context</em>' containment reference.
+     * @see #setContext(AtomicExpressionContext)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDynamicFilterExpression_Context()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='context' namespace='##targetNamespace'"
+     * @generated
+     */
+    AtomicExpressionContext getContext();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DynamicFilterExpression#getContext <em>Context</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Context</em>' containment reference.
+     * @see #getContext()
+     * @generated
+     */
+    void setContext( AtomicExpressionContext value );
+
+    /**
+     * Returns the value of the '<em><b>Default Type</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The default type of filter expression to apply at runtime.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Default Type</em>' containment reference; may be null.
+     * @see #setDefaultType(FilterExpressionType)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDynamicFilterExpression_DefaultType()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='defaultType' namespace='##targetNamespace'"
+     * @since 3.2.2 (DTP 1.7.2)
+     * @generated
+     */
+    FilterExpressionType getDefaultType();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DynamicFilterExpression#getDefaultType <em>Default Type</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Default Type</em>' containment reference.
+     * @see #getDefaultType()
+     * @since 3.2.2 (DTP 1.7.2)
+     * @generated
+     */
+    void setDefaultType( FilterExpressionType value );
+
+    /**
+     * Indicates whether this filter expression can be excluded at runtime.
+     * @return  true if this can be excluded at runtime; false otherwise
+     * @generated NOT
+     */
+    boolean isOptional();
+
+    /**
+     * Specifies whether this filter expression can be excluded at runtime.
+     * @param isOptional    true if this can be excluded at runtime; false otherwise
+     * @generated NOT
+     */
+    void setIsOptional( boolean isOptional );
+
+    /**
+     * Returns the expression variable design in the '<em><b>Context</b></em>' containment reference.
+     * @return  the variable design in the '<em><b>Context</b></em>' containment reference, 
+     *          or null if none is specified
+     * @generated NOT
+     */
+    ExpressionVariable getContextVariable();
+
+    /**
+     * Sets the expression variable design in the '<em><b>Context</b></em>' containment reference.
+     * @param variable  the variable design in the '<em><b>Context</b></em>' containment reference
+     * @generated NOT
+     */
+    void setContextVariable( ExpressionVariable variable );
+
+    /**
+     * Returns the expression arguments design in the '<em><b>Context</b></em>' containment reference.
+     * @return  the arguments design in the '<em><b>Context</b></em>' containment reference, 
+     *          or null if none is specified
+     * @generated NOT
+     */
+    ExpressionArguments getContextArguments();
+
+    /**
+     * Sets the expression arguments design in the '<em><b>Context</b></em>' containment reference.
+     * @param arguments   the arguments design in the '<em><b>Context</b></em>' containment reference
+     * @generated NOT
+     */
+    void setContextArguments( ExpressionArguments arguments );
+
+} // DynamicFilterExpression
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DynamicValuesQuery.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DynamicValuesQuery.java
new file mode 100644
index 0000000..db6ce77
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/DynamicValuesQuery.java
@@ -0,0 +1,212 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DynamicValuesQuery.java,v 1.2 2007/04/11 02:59:53 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * A dynamic set of selectable input values to be retrieved at runtime using the query defined in a data set design.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery#getDataSetDesign <em>Data Set Design</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery#isEnabled <em>Enabled</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery#getValueColumnIdentifier <em>Value Column Identifier</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery#getValueColumn <em>Value Column</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery#getDisplayNameColumn <em>Display Name Column</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDynamicValuesQuery()
+ * @model extendedMetaData="name='DynamicValuesQuery' kind='elementOnly'"
+ * @generated
+ */
+public interface DynamicValuesQuery extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Data Set Design</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * A nested instance of dataSetDesign to use for retrieving the set of selectable user values.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Data Set Design</em>' containment reference.
+     * @see #setDataSetDesign(DataSetDesign)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDynamicValuesQuery_DataSetDesign()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='dataSetDesign' namespace='##targetNamespace'"
+     * @generated
+     */
+    DataSetDesign getDataSetDesign();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery#getDataSetDesign <em>Data Set Design</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Data Set Design</em>' containment reference.
+     * @see #getDataSetDesign()
+     * @generated
+     */
+    void setDataSetDesign( DataSetDesign value );
+
+    /**
+     * Returns the value of the '<em><b>Enabled</b></em>' attribute.
+     * The default value is <code>"true"</code>.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * If not enabled, use staticValueChoices if defined.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Enabled</em>' attribute.
+     * @see #isSetEnabled()
+     * @see #unsetEnabled()
+     * @see #setEnabled(boolean)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDynamicValuesQuery_Enabled()
+     * @model default="true" unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Boolean"
+     *        extendedMetaData="kind='element' name='enabled' namespace='##targetNamespace'"
+     * @generated
+     */
+    boolean isEnabled();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery#isEnabled <em>Enabled</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Enabled</em>' attribute.
+     * @see #isSetEnabled()
+     * @see #unsetEnabled()
+     * @see #isEnabled()
+     * @generated
+     */
+    void setEnabled( boolean value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery#isEnabled <em>Enabled</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetEnabled()
+     * @see #isEnabled()
+     * @see #setEnabled(boolean)
+     * @generated
+     */
+    void unsetEnabled();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery#isEnabled <em>Enabled</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Enabled</em>' attribute is set.
+     * @see #unsetEnabled()
+     * @see #isEnabled()
+     * @see #setEnabled(boolean)
+     * @generated
+     */
+    boolean isSetEnabled();
+
+    /**
+     * Returns the value of the '<em><b>Value Column Identifier</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Uniquely identifies the result set column whose values are retrieved as the value choices.  It must be one of the columns defined in the data set design's primary result set.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Value Column Identifier</em>' containment reference.
+     * @see #setValueColumnIdentifier(DataElementIdentifier)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDynamicValuesQuery_ValueColumnIdentifier()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='valueColumnIdentifier' namespace='##targetNamespace'"
+     * @generated
+     * @since 3.3.2
+     */
+    DataElementIdentifier getValueColumnIdentifier();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery#getValueColumnIdentifier <em>Value Column Identifier</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Value Column Identifier</em>' containment reference.
+     * @see #getValueColumnIdentifier()
+     * @generated
+     * @since 3.3.2
+     */
+    void setValueColumnIdentifier( DataElementIdentifier value );
+
+    /**
+     * Returns the value of the '<em><b>Value Column</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The result set column name whose values are retrieved as the value choices.  This attribute must be one of the column names defined in the data set design's primary result set.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Value Column</em>' attribute.
+     * @see #setValueColumn(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDynamicValuesQuery_ValueColumn()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
+     *        extendedMetaData="kind='element' name='valueColumn' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getValueColumn();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery#getValueColumn <em>Value Column</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Value Column</em>' attribute.
+     * @see #getValueColumn()
+     * @generated
+     */
+    void setValueColumn( String value );
+
+    /**
+     * Returns the value of the '<em><b>Display Name Column</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The result set column name whose values are the localized name that describes the corresponding value in the valueColumn on each data row.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Display Name Column</em>' attribute.
+     * @see #setDisplayNameColumn(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getDynamicValuesQuery_DisplayNameColumn()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String"
+     *        extendedMetaData="kind='element' name='displayNameColumn' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getDisplayNameColumn();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery#getDisplayNameColumn <em>Display Name Column</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Display Name Column</em>' attribute.
+     * @see #getDisplayNameColumn()
+     * @generated
+     */
+    void setDisplayNameColumn( String value );
+
+} // DynamicValuesQuery
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ElementNullability.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ElementNullability.java
new file mode 100644
index 0000000..8c03b4f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ElementNullability.java
@@ -0,0 +1,255 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ElementNullability.java,v 1.2 2007/04/11 02:59:53 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Element Nullability</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * Indicates whether a data element's value can be null.
+ * <!-- end-model-doc -->
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getElementNullability()
+ * @model extendedMetaData="name='ElementNullability'"
+ * @generated
+ */
+public enum ElementNullability implements Enumerator {
+    /**
+     * The '<em><b>Unknown</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #UNKNOWN
+     * @generated
+     * @ordered
+     */
+    UNKNOWN_LITERAL(0, "Unknown", "Unknown"), //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * The '<em><b>Nullable</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #NULLABLE
+     * @generated
+     * @ordered
+     */
+    NULLABLE_LITERAL(1, "Nullable", "Nullable"), //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * The '<em><b>Not Nullable</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #NOT_NULLABLE
+     * @generated
+     * @ordered
+     */
+    NOT_NULLABLE_LITERAL(2, "NotNullable", "NotNullable"); //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The '<em><b>Unknown</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #UNKNOWN_LITERAL
+     * @model name="Unknown"
+     * @generated
+     * @ordered
+     */
+    public static final int UNKNOWN = 0;
+
+    /**
+     * The '<em><b>Nullable</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #NULLABLE_LITERAL
+     * @model name="Nullable"
+     * @generated
+     * @ordered
+     */
+    public static final int NULLABLE = 1;
+
+    /**
+     * The '<em><b>Not Nullable</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #NOT_NULLABLE_LITERAL
+     * @model name="NotNullable"
+     * @generated
+     * @ordered
+     */
+    public static final int NOT_NULLABLE = 2;
+
+    /**
+     * An array of all the '<em><b>Element Nullability</b></em>' enumerators.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private static final ElementNullability[] VALUES_ARRAY = new ElementNullability[]
+    { UNKNOWN_LITERAL, NULLABLE_LITERAL, NOT_NULLABLE_LITERAL, };
+
+    /**
+     * A public read-only list of all the '<em><b>Element Nullability</b></em>' enumerators.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final List<ElementNullability> VALUES = Collections
+            .unmodifiableList( Arrays.asList( VALUES_ARRAY ) );
+
+    /**
+     * Returns the '<em><b>Element Nullability</b></em>' literal with the specified literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static ElementNullability get( String literal )
+    {
+        for( int i = 0; i < VALUES_ARRAY.length; ++i)
+        {
+            ElementNullability result = VALUES_ARRAY[i];
+            if( result.toString().equals( literal ) )
+            {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the '<em><b>Element Nullability</b></em>' literal with the specified name.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static ElementNullability getByName( String name )
+    {
+        for( int i = 0; i < VALUES_ARRAY.length; ++i)
+        {
+            ElementNullability result = VALUES_ARRAY[i];
+            if( result.getName().equals( name ) )
+            {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the '<em><b>Element Nullability</b></em>' literal with the specified integer value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static ElementNullability get( int value )
+    {
+        switch( value )
+        {
+        case UNKNOWN:
+            return UNKNOWN_LITERAL;
+        case NULLABLE:
+            return NULLABLE_LITERAL;
+        case NOT_NULLABLE:
+            return NOT_NULLABLE_LITERAL;
+        }
+        return null;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final int value;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final String name;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final String literal;
+
+    /**
+     * Only this class can construct instances.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private ElementNullability( int value, String name, String literal )
+    {
+        this.value = value;
+        this.name = name;
+        this.literal = literal;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public int getValue()
+    {
+        return value;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getName()
+    {
+        return name;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getLiteral()
+    {
+        return literal;
+    }
+
+    /**
+     * Returns the literal value of the enumerator, which is its string representation.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        return literal;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ExpressionArguments.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ExpressionArguments.java
new file mode 100644
index 0000000..dd8766b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ExpressionArguments.java
@@ -0,0 +1,109 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ExpressionArguments.java,v 1.3 2009/09/02 00:55:33 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Expression Arguments</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Definition of a filter expression's argument(s).
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ExpressionArguments#getExpressionParameters <em>Expression Parameters</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getExpressionArguments()
+ * @since 3.3 (DTP 1.8)
+ * @model extendedMetaData="name='ExpressionArguments' kind='elementOnly'"
+ * @generated
+ */
+public interface ExpressionArguments extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Expression Parameters</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * A collection of parameters used for collecting an expression's argument values.  An expression argument may define one corresponding expression parameter that takes multiple input values sharing the same parameter attributes.  Or it may define multiple expression parameters, with each taking a single input value and has own set of parameter attributes.  Each expression parameter may define either static value(s), or an input parameter to dynamically collect user input value(s).
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Expression Parameters</em>' containment reference.
+     * @see #setExpressionParameters(ExpressionParameters)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getExpressionArguments_ExpressionParameters()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='expressionParameters' namespace='##targetNamespace'"
+     * @generated
+     */
+    ExpressionParameters getExpressionParameters();
+
+    /**
+     * Returns the collection of parameter definitions in the '<em><b>Expression Parameters</b></em>' containment reference.
+     * The list contents are of type {@link org.eclipse.datatools.connectivity.oda.design.ExpressionParameterDefinition}.
+     * <!-- begin-user-doc -->
+     * <p>
+     * An empty collection is returned if none is specified.
+     * </p>
+     * <!-- end-user-doc -->
+     * @return collection of expression parameter definitions
+     * @generated NOT
+     */
+    EList<ExpressionParameterDefinition> getExpressionParameterDefinitions();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ExpressionArguments#getExpressionParameters <em>Expression Parameters</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Expression Parameters</em>' containment reference.
+     * @see #getExpressionParameters()
+     * @generated
+     */
+    void setExpressionParameters( ExpressionParameters value );
+
+    /**
+     * Appends a new {@link ExpressionParameterDefinition} with the specified static value to 
+     * the '<em>Expression Parameters</em>' containment reference.
+     * @param aStaticValue     a static argument value of a filter expression
+     * @return  the new ExpressionParameterDefinition appended
+     * @generated NOT
+     */
+    ExpressionParameterDefinition addStaticParameter( Object aStaticValue );
+    
+    /**
+     * Appends a new {@link ExpressionParameterDefinition} with the specified 
+     * dynamic input parameter definition to 
+     * the '<em>Expression Parameters</em>' containment reference.
+     * @param inputParam    the definition of an input parameter
+     * @return  the new ExpressionParameterDefinition appended
+     * @generated NOT
+     */
+    ExpressionParameterDefinition addDynamicParameter( ParameterDefinition inputParam );
+
+} // ExpressionArguments
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ExpressionParameterDefinition.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ExpressionParameterDefinition.java
new file mode 100644
index 0000000..37d789d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ExpressionParameterDefinition.java
@@ -0,0 +1,137 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ExpressionParameterDefinition.java,v 1.1 2009/03/03 07:42:07 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Expression Parameter Definition</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * The definition of a parameter for the value of an expression's argument.  An expression argument parameter design may specify either static argument value(s), or a data set input parameter.  Static values are pre-defined values of an expression argument, and are not exposed as a data set parameter.  Alternatively, a data set input parameter may be defined to dynamically collect user input value(s).  A data set input parameter definiiton here may be a nested new instance, or may reference one of the existing DataSetParameters.  The dynamic input parameter, if specified, overrides any static values defined.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ExpressionParameterDefinition#getStaticValues <em>Static Values</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ExpressionParameterDefinition#getDynamicInputParameter <em>Dynamic Input Parameter</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getExpressionParameterDefinition()
+ * @since 3.3 (DTP 1.8)
+ * @model extendedMetaData="name='ExpressionParameterDefinition' kind='elementOnly'"
+ * @generated
+ */
+public interface ExpressionParameterDefinition extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Static Values</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Static Values</em>' containment reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Static Values</em>' containment reference.
+     * @see #setStaticValues(StaticValues)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getExpressionParameterDefinition_StaticValues()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='staticValues' namespace='##targetNamespace'"
+     * @generated
+     */
+    StaticValues getStaticValues();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ExpressionParameterDefinition#getStaticValues <em>Static Values</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Static Values</em>' containment reference.
+     * @see #getStaticValues()
+     * @generated
+     */
+    void setStaticValues( StaticValues value );
+
+    /**
+     * Returns the value of the '<em><b>Dynamic Input Parameter</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Dynamic Input Parameter</em>' containment reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Dynamic Input Parameter</em>' containment reference.
+     * @see #setDynamicInputParameter(ParameterDefinition)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getExpressionParameterDefinition_DynamicInputParameter()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='dynamicInputParameter' namespace='##targetNamespace'"
+     * @generated
+     */
+    ParameterDefinition getDynamicInputParameter();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ExpressionParameterDefinition#getDynamicInputParameter <em>Dynamic Input Parameter</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Dynamic Input Parameter</em>' containment reference.
+     * @see #getDynamicInputParameter()
+     * @generated
+     */
+    void setDynamicInputParameter( ParameterDefinition value );
+
+    /**
+     * Indicates whether this has defined an input parameter design to dynamically collect its value.
+     * @return  true if a dynamic input parameter design is defined; false otherwise
+     * @generated NOT
+     */
+    boolean hasDynamicInputParameter();
+
+    /**
+     * Indicates whether this has static values that are effective.
+     * Static values may be defined but not effective if this also has a dynamic input parameter defined.
+     * @return  true if this has effective static value(s); false otherwise
+     * @generated NOT
+     */
+    boolean hasEffectiveStaticValues();
+
+    /**
+     * Gets the number of effective static values defined.
+     * Static values may be defined but not effective if this also has a dynamic input parameter defined.
+     * @return  number of effective static values
+     * @generated NOT
+     */
+    int getEffectiveStaticValueCount();
+
+    /**
+     * Appends the specified value to the list of static values.
+     * It is the responsibility of the caller to ensure compatible type of value object
+     * is added to the list.
+     * @param aValue    a value to add; may be null
+     * @generated NOT
+     */
+    void addStaticValue( Object aValue );
+
+} // ExpressionParameterDefinition
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ExpressionParameters.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ExpressionParameters.java
new file mode 100644
index 0000000..6dab980
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ExpressionParameters.java
@@ -0,0 +1,69 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ExpressionParameters.java,v 1.1 2009/03/03 07:42:07 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Expression Parameters</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * A collection of parameters used for collecting a filter expression's argument values.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ExpressionParameters#getParameterDefinitions <em>Parameter Definitions</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getExpressionParameters()
+ * @since 3.3 (DTP 1.8)
+ * @model extendedMetaData="name='ExpressionParameters' kind='elementOnly'"
+ * @generated
+ */
+public interface ExpressionParameters extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Parameter Definitions</b></em>' containment reference list.
+     * The list contents are of type {@link org.eclipse.datatools.connectivity.oda.design.ExpressionParameterDefinition}.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Parameter Definitions</em>' containment reference list isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Parameter Definitions</em>' containment reference list.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getExpressionParameters_ParameterDefinitions()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='parameterDefinitions' namespace='##targetNamespace'"
+     * @generated
+     */
+    EList<ExpressionParameterDefinition> getParameterDefinitions();
+
+} // ExpressionParameters
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ExpressionVariable.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ExpressionVariable.java
new file mode 100644
index 0000000..479aed9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ExpressionVariable.java
@@ -0,0 +1,188 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ExpressionVariable.java,v 1.1 2009/03/03 07:42:07 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Expression Variable</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Definition of a filter expression's variable.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ExpressionVariable#getType <em>Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ExpressionVariable#getIdentifier <em>Identifier</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ExpressionVariable#getNativeDataTypeCode <em>Native Data Type Code</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getExpressionVariable()
+ * @since 3.3 (DTP 1.8)
+ * @model extendedMetaData="name='ExpressionVariable' kind='elementOnly'"
+ * @generated
+ */
+public interface ExpressionVariable extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Type</b></em>' attribute.
+     * The default value is <code>"ResultSetColumn"</code>.
+     * The literals are from the enumeration {@link org.eclipse.datatools.connectivity.oda.design.ExpressionVariableType}.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The type of variable.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Type</em>' attribute.
+     * @see org.eclipse.datatools.connectivity.oda.design.ExpressionVariableType
+     * @see #isSetType()
+     * @see #unsetType()
+     * @see #setType(ExpressionVariableType)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getExpressionVariable_Type()
+     * @model default="ResultSetColumn" unsettable="true"
+     *        extendedMetaData="kind='element' name='type' namespace='##targetNamespace'"
+     * @generated
+     */
+    ExpressionVariableType getType();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ExpressionVariable#getType <em>Type</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Type</em>' attribute.
+     * @see org.eclipse.datatools.connectivity.oda.design.ExpressionVariableType
+     * @see #isSetType()
+     * @see #unsetType()
+     * @see #getType()
+     * @generated
+     */
+    void setType( ExpressionVariableType value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ExpressionVariable#getType <em>Type</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetType()
+     * @see #getType()
+     * @see #setType(ExpressionVariableType)
+     * @generated
+     */
+    void unsetType();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ExpressionVariable#getType <em>Type</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Type</em>' attribute is set.
+     * @see #unsetType()
+     * @see #getType()
+     * @see #setType(ExpressionVariableType)
+     * @generated
+     */
+    boolean isSetType();
+
+    /**
+     * Returns the value of the '<em><b>Identifier</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * A name or expression that identifies the variable used to evaluate an expression.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Identifier</em>' attribute.
+     * @see #setIdentifier(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getExpressionVariable_Identifier()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
+     *        extendedMetaData="kind='element' name='identifier' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getIdentifier();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ExpressionVariable#getIdentifier <em>Identifier</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Identifier</em>' attribute.
+     * @see #getIdentifier()
+     * @generated
+     */
+    void setIdentifier( String value );
+
+    /**
+     * Returns the value of the '<em><b>Native Data Type Code</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Native data type code of the identified variable.  If none or unknown value (0) is specified, the data element is mapped to an ODA String data type by default.  The native type code value is implementation-specific to individual ODA driver, which must support its mapping to one or more ODA data types.  The supported native-ODA data type mapping must be defined in the ODA dataSource extension.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Native Data Type Code</em>' attribute.
+     * @see #isSetNativeDataTypeCode()
+     * @see #unsetNativeDataTypeCode()
+     * @see #setNativeDataTypeCode(int)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getExpressionVariable_NativeDataTypeCode()
+     * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Int"
+     *        extendedMetaData="kind='element' name='nativeDataTypeCode' namespace='##targetNamespace'"
+     * @generated
+     */
+    int getNativeDataTypeCode();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ExpressionVariable#getNativeDataTypeCode <em>Native Data Type Code</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Native Data Type Code</em>' attribute.
+     * @see #isSetNativeDataTypeCode()
+     * @see #unsetNativeDataTypeCode()
+     * @see #getNativeDataTypeCode()
+     * @generated
+     */
+    void setNativeDataTypeCode( int value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ExpressionVariable#getNativeDataTypeCode <em>Native Data Type Code</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetNativeDataTypeCode()
+     * @see #getNativeDataTypeCode()
+     * @see #setNativeDataTypeCode(int)
+     * @generated
+     */
+    void unsetNativeDataTypeCode();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ExpressionVariable#getNativeDataTypeCode <em>Native Data Type Code</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Native Data Type Code</em>' attribute is set.
+     * @see #unsetNativeDataTypeCode()
+     * @see #getNativeDataTypeCode()
+     * @see #setNativeDataTypeCode(int)
+     * @generated
+     */
+    boolean isSetNativeDataTypeCode();
+
+} // ExpressionVariable
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ExpressionVariableType.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ExpressionVariableType.java
new file mode 100644
index 0000000..0c105e9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ExpressionVariableType.java
@@ -0,0 +1,272 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ExpressionVariableType.java,v 1.1 2009/03/03 07:42:08 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Expression Variable Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * The type of a filter expression variable.
+ * <!-- end-model-doc -->
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getExpressionVariableType()
+ * @since 3.3 (DTP 1.8)
+ * @model extendedMetaData="name='ExpressionVariableType'"
+ * @generated
+ */
+public enum ExpressionVariableType implements Enumerator {
+    /**
+     * The '<em><b>Result Set Column</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #RESULT_SET_COLUMN_VALUE
+     * @generated
+     * @ordered
+     */
+    RESULT_SET_COLUMN(0, "ResultSetColumn", "ResultSetColumn"), //$NON-NLS-1$ //$NON-NLS-2$
+
+    /**
+     * The '<em><b>Instance Of</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #INSTANCE_OF_VALUE
+     * @generated
+     * @ordered
+     */
+    INSTANCE_OF(1, "InstanceOf", "InstanceOf"), //$NON-NLS-1$ //$NON-NLS-2$
+
+    /**
+     * The '<em><b>Query Expression</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #QUERY_EXPRESSION_VALUE
+     * @generated
+     * @ordered
+     */
+    QUERY_EXPRESSION(2, "QueryExpression", "QueryExpression"); //$NON-NLS-1$ //$NON-NLS-2$
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The '<em><b>Result Set Column</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of '<em><b>Result Set Column</b></em>' literal object isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @see #RESULT_SET_COLUMN
+     * @model name="ResultSetColumn"
+     * @generated
+     * @ordered
+     */
+    public static final int RESULT_SET_COLUMN_VALUE = 0;
+
+    /**
+     * The '<em><b>Instance Of</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of '<em><b>Instance Of</b></em>' literal object isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @see #INSTANCE_OF
+     * @model name="InstanceOf"
+     * @generated
+     * @ordered
+     */
+    public static final int INSTANCE_OF_VALUE = 1;
+
+    /**
+     * The '<em><b>Query Expression</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of '<em><b>Query Expression</b></em>' literal object isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @see #QUERY_EXPRESSION
+     * @model name="QueryExpression"
+     * @generated
+     * @ordered
+     */
+    public static final int QUERY_EXPRESSION_VALUE = 2;
+
+    /**
+     * An array of all the '<em><b>Expression Variable Type</b></em>' enumerators.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private static final ExpressionVariableType[] VALUES_ARRAY = new ExpressionVariableType[]
+    { RESULT_SET_COLUMN, INSTANCE_OF, QUERY_EXPRESSION, };
+
+    /**
+     * A public read-only list of all the '<em><b>Expression Variable Type</b></em>' enumerators.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final List<ExpressionVariableType> VALUES = Collections
+            .unmodifiableList( Arrays.asList( VALUES_ARRAY ) );
+
+    /**
+     * Returns the '<em><b>Expression Variable Type</b></em>' literal with the specified literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static ExpressionVariableType get( String literal )
+    {
+        for( int i = 0; i < VALUES_ARRAY.length; ++i)
+        {
+            ExpressionVariableType result = VALUES_ARRAY[i];
+            if( result.toString().equals( literal ) )
+            {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the '<em><b>Expression Variable Type</b></em>' literal with the specified name.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static ExpressionVariableType getByName( String name )
+    {
+        for( int i = 0; i < VALUES_ARRAY.length; ++i)
+        {
+            ExpressionVariableType result = VALUES_ARRAY[i];
+            if( result.getName().equals( name ) )
+            {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the '<em><b>Expression Variable Type</b></em>' literal with the specified integer value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static ExpressionVariableType get( int value )
+    {
+        switch( value )
+        {
+        case RESULT_SET_COLUMN_VALUE:
+            return RESULT_SET_COLUMN;
+        case INSTANCE_OF_VALUE:
+            return INSTANCE_OF;
+        case QUERY_EXPRESSION_VALUE:
+            return QUERY_EXPRESSION;
+        }
+        return null;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final int value;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final String name;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final String literal;
+
+    /**
+     * Only this class can construct instances.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private ExpressionVariableType( int value, String name, String literal )
+    {
+        this.value = value;
+        this.name = name;
+        this.literal = literal;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public int getValue()
+    {
+        return value;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getName()
+    {
+        return name;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getLiteral()
+    {
+        return literal;
+    }
+
+    /**
+     * Returns the literal value of the enumerator, which is its string representation.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        return literal;
+    }
+
+} //ExpressionVariableType
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/FilterExpression.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/FilterExpression.java
new file mode 100644
index 0000000..6057f22
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/FilterExpression.java
@@ -0,0 +1,105 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: FilterExpression.java,v 1.1 2009/01/30 00:23:57 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Filter Expression</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Abstract base class for all filter expressions defined by an ODA designer.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.FilterExpression#isNegatable <em>Negatable</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getFilterExpression()
+ * @since 3.3 (DTP 1.8)
+ * @model abstract="true"
+ *        extendedMetaData="name='FilterExpression' kind='empty'"
+ * @generated
+ */
+public interface FilterExpression extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Negatable</b></em>' attribute.
+     * The default value is <code>"false"</code>.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Indicates whether the expression can be negated, i.e. applied with a NotExpression.  Default is false.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Negatable</em>' attribute.
+     * @see #isSetNegatable()
+     * @see #unsetNegatable()
+     * @see #setNegatable(boolean)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getFilterExpression_Negatable()
+     * @model default="false" unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Boolean"
+     *        extendedMetaData="kind='attribute' name='negatable'"
+     * @generated
+     */
+    boolean isNegatable();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.FilterExpression#isNegatable <em>Negatable</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Negatable</em>' attribute.
+     * @see #isSetNegatable()
+     * @see #unsetNegatable()
+     * @see #isNegatable()
+     * @generated
+     */
+    void setNegatable( boolean value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.FilterExpression#isNegatable <em>Negatable</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetNegatable()
+     * @see #isNegatable()
+     * @see #setNegatable(boolean)
+     * @generated
+     */
+    void unsetNegatable();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.FilterExpression#isNegatable <em>Negatable</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Negatable</em>' attribute is set.
+     * @see #unsetNegatable()
+     * @see #isNegatable()
+     * @see #setNegatable(boolean)
+     * @generated
+     */
+    boolean isSetNegatable();
+
+} // FilterExpression
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/FilterExpressionType.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/FilterExpressionType.java
new file mode 100644
index 0000000..47f596e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/FilterExpressionType.java
@@ -0,0 +1,103 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: FilterExpressionType.java,v 1.1 2009/10/23 20:17:26 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Filter Expression Type</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Identifies a type of custom filter expression contributed by an extension of the org.eclipse.datatools.connectivity.oda.dynamicResultSet extension point.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.FilterExpressionType#getDeclaringExtensionId <em>Declaring Extension Id</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.FilterExpressionType#getId <em>Id</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getFilterExpressionType()
+ * @since 3.3 (DTP 1.8)
+ * @model extendedMetaData="name='FilterExpressionType' kind='elementOnly'"
+ * @generated
+ */
+public interface FilterExpressionType extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Declaring Extension Id</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The id of the ODA dynamicResultSet extension that declares this type of filter expression.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Declaring Extension Id</em>' attribute.
+     * @see #setDeclaringExtensionId(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getFilterExpressionType_DeclaringExtensionId()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
+     *        extendedMetaData="kind='element' name='declaringExtensionId' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getDeclaringExtensionId();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.FilterExpressionType#getDeclaringExtensionId <em>Declaring Extension Id</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Declaring Extension Id</em>' attribute.
+     * @see #getDeclaringExtensionId()
+     * @generated
+     */
+    void setDeclaringExtensionId( String value );
+
+    /**
+     * Returns the value of the '<em><b>Id</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The id that uniquely identifies  a custom expression type within an ODA dynamicResultSet extension.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Id</em>' attribute.
+     * @see #setId(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getFilterExpressionType_Id()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
+     *        extendedMetaData="kind='element' name='id' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getId();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.FilterExpressionType#getId <em>Id</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Id</em>' attribute.
+     * @see #getId()
+     * @generated
+     */
+    void setId( String value );
+
+} // FilterExpressionType
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/HorizontalAlignment.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/HorizontalAlignment.java
new file mode 100644
index 0000000..840bdcd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/HorizontalAlignment.java
@@ -0,0 +1,304 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: HorizontalAlignment.java,v 1.3 2009/04/24 03:20:26 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Horizontal Alignment</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * Horizontal display alignment of the data value.
+ * <!-- end-model-doc -->
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getHorizontalAlignment()
+ * @model extendedMetaData="name='HorizontalAlignment'"
+ * @generated
+ */
+public enum HorizontalAlignment implements Enumerator {
+    /**
+     * The '<em><b>Automatic</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #AUTOMATIC
+     * @generated
+     * @ordered
+     */
+    AUTOMATIC_LITERAL(0, "Automatic", "Automatic"), //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * The '<em><b>Left</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #LEFT
+     * @generated
+     * @ordered
+     */
+    LEFT_LITERAL(1, "Left", "Left"), //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * The '<em><b>Center</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #CENTER
+     * @generated
+     * @ordered
+     */
+    CENTER_LITERAL(2, "Center", "Center"), //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * The '<em><b>Right</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #RIGHT
+     * @generated
+     * @ordered
+     */
+    RIGHT_LITERAL(3, "Right", "Right"), /**
+                                         * The '<em><b>Left And Right</b></em>' literal object.
+                                         * <!-- begin-user-doc -->
+                                         * <!-- end-user-doc -->
+                                         * @see #LEFT_AND_RIGHT
+                                         * @generated
+                                         * @ordered
+                                         */
+    LEFT_AND_RIGHT_LITERAL(4, "LeftAndRight", "Left and Right"); //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The '<em><b>Automatic</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #AUTOMATIC_LITERAL
+     * @model name="Automatic"
+     * @generated
+     * @ordered
+     */
+    public static final int AUTOMATIC = 0;
+
+    /**
+     * The '<em><b>Left</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #LEFT_LITERAL
+     * @model name="Left"
+     * @generated
+     * @ordered
+     */
+    public static final int LEFT = 1;
+
+    /**
+     * The '<em><b>Center</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #CENTER_LITERAL
+     * @model name="Center"
+     * @generated
+     * @ordered
+     */
+    public static final int CENTER = 2;
+
+    /**
+     * The '<em><b>Right</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #RIGHT_LITERAL
+     * @model name="Right"
+     * @generated
+     * @ordered
+     */
+    public static final int RIGHT = 3;
+
+    /**
+     * The '<em><b>Left And Right</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of '<em><b>Left And Right</b></em>' literal object isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @see #LEFT_AND_RIGHT_LITERAL
+     * @model name="LeftAndRight" literal="Left and Right"
+     * @generated
+     * @ordered
+     * @since 3.3.1 (DTP 1.8.1)
+     */
+    public static final int LEFT_AND_RIGHT = 4;
+
+    /**
+     * An array of all the '<em><b>Horizontal Alignment</b></em>' enumerators.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private static final HorizontalAlignment[] VALUES_ARRAY = new HorizontalAlignment[]
+    { AUTOMATIC_LITERAL, LEFT_LITERAL, CENTER_LITERAL, RIGHT_LITERAL,
+            LEFT_AND_RIGHT_LITERAL, };
+
+    /**
+     * A public read-only list of all the '<em><b>Horizontal Alignment</b></em>' enumerators.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final List<HorizontalAlignment> VALUES = Collections
+            .unmodifiableList( Arrays.asList( VALUES_ARRAY ) );
+
+    /**
+     * Returns the '<em><b>Horizontal Alignment</b></em>' literal with the specified literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static HorizontalAlignment get( String literal )
+    {
+        for( int i = 0; i < VALUES_ARRAY.length; ++i)
+        {
+            HorizontalAlignment result = VALUES_ARRAY[i];
+            if( result.toString().equals( literal ) )
+            {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the '<em><b>Horizontal Alignment</b></em>' literal with the specified name.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static HorizontalAlignment getByName( String name )
+    {
+        for( int i = 0; i < VALUES_ARRAY.length; ++i)
+        {
+            HorizontalAlignment result = VALUES_ARRAY[i];
+            if( result.getName().equals( name ) )
+            {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the '<em><b>Horizontal Alignment</b></em>' literal with the specified integer value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static HorizontalAlignment get( int value )
+    {
+        switch( value )
+        {
+        case AUTOMATIC:
+            return AUTOMATIC_LITERAL;
+        case LEFT:
+            return LEFT_LITERAL;
+        case CENTER:
+            return CENTER_LITERAL;
+        case RIGHT:
+            return RIGHT_LITERAL;
+        case LEFT_AND_RIGHT:
+            return LEFT_AND_RIGHT_LITERAL;
+        }
+        return null;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final int value;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final String name;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final String literal;
+
+    /**
+     * Only this class can construct instances.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private HorizontalAlignment( int value, String name, String literal )
+    {
+        this.value = value;
+        this.name = name;
+        this.literal = literal;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public int getValue()
+    {
+        return value;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getName()
+    {
+        return name;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getLiteral()
+    {
+        return literal;
+    }
+
+    /**
+     * Returns the literal value of the enumerator, which is its string representation.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        return literal;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/InputElementAttributes.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/InputElementAttributes.java
new file mode 100644
index 0000000..35c629c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/InputElementAttributes.java
@@ -0,0 +1,380 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: InputElementAttributes.java,v 1.5 2007/04/11 02:59:53 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Common attributes for a data element defined with the input mode.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#getDefaultScalarValue <em>Default Scalar Value</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#getDefaultValues <em>Default Values</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#isEditable <em>Editable</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#isOptional <em>Optional</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#isMasksValue <em>Masks Value</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#getStaticValueChoices <em>Static Value Choices</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#getDynamicValueChoices <em>Dynamic Value Choices</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#getUiHints <em>Ui Hints</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getInputElementAttributes()
+ * @model extendedMetaData="name='InputElementAttributes' kind='elementOnly'"
+ * @generated
+ */
+public interface InputElementAttributes extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Indicates whether this input element has either
+     * static or dynamic value choices defined.
+     * @return  true if any type of value choices is defined
+     * @see #getStaticValueChoices()
+     * @see #getDynamicValueChoices()
+     * @generated NOT
+     */
+    boolean hasValueChoices();
+
+    /**
+     * Returns the value of the '<em><b>Default Scalar Value</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The literal string value to be used as the data element's default input value. Only applies to a scalar input data element.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Default Scalar Value</em>' attribute.
+     * @see #setDefaultScalarValue(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getInputElementAttributes_DefaultScalarValue()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String"
+     *        extendedMetaData="kind='element' name='defaultScalarValue' namespace='##targetNamespace'"
+     * @generated
+     * @deprecated  replaced by {@link #getDefaultValues()} as of 3.2 (DTP 1.7)
+     */
+    String getDefaultScalarValue();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#getDefaultScalarValue <em>Default Scalar Value</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Default Scalar Value</em>' attribute.
+     * @see #getDefaultScalarValue()
+     * @generated
+     * @deprecated  replaced by {@link #setDefaultValues(StaticValues)} as of 3.2 (DTP 1.7)
+     */
+    void setDefaultScalarValue( String value );
+
+    /**
+     * Returns the value of the '<em><b>Default Values</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * An optional collection of default input values.  If defined, this element overrides the deprecated defaultScalarValue element.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Default Values</em>' containment reference.
+     * @see #setDefaultValues(StaticValues)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getInputElementAttributes_DefaultValues()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='defaultValues' namespace='##targetNamespace'"
+     * @since 3.2 (DTP 1.7)
+     * @generated
+     */
+    StaticValues getDefaultValues();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#getDefaultValues <em>Default Values</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Default Values</em>' containment reference.
+     * @see #getDefaultValues()
+     * @since 3.2 (DTP 1.7)
+     * @generated
+     */
+    void setDefaultValues( StaticValues value );
+
+    /**
+     * Gets the number of default values specified.
+     * @return  number of default values
+     * @since 3.2 (DTP 1.7)
+     * @generated NOT
+     */
+    int getDefaultValueCount();
+
+    /**
+     * Appends the specified value to the list of default values.
+     * It is the responsibility of the caller to ensure compatible type of value object
+     * is added to the list.
+     * @param aValue    a value to add; may be null
+     * @since 3.2 (DTP 1.7)
+     * @generated NOT
+     */
+    void addDefaultValue( Object aValue );
+
+    /**
+     * Returns the value of the '<em><b>Editable</b></em>' attribute.
+     * The default value is <code>"true"</code>.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Indicates whether this element value is editable or read-only in the host designer.  A host designer can further design whether to hide this attribute.  Applicable only if its container is visible, e.g. for public properties and input parameters.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Editable</em>' attribute.
+     * @see #isSetEditable()
+     * @see #unsetEditable()
+     * @see #setEditable(boolean)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getInputElementAttributes_Editable()
+     * @model default="true" unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Boolean"
+     *        extendedMetaData="kind='element' name='editable' namespace='##targetNamespace'"
+     * @generated
+     */
+    boolean isEditable();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#isEditable <em>Editable</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Editable</em>' attribute.
+     * @see #isSetEditable()
+     * @see #unsetEditable()
+     * @see #isEditable()
+     * @generated
+     */
+    void setEditable( boolean value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#isEditable <em>Editable</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetEditable()
+     * @see #isEditable()
+     * @see #setEditable(boolean)
+     * @generated
+     */
+    void unsetEditable();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#isEditable <em>Editable</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Editable</em>' attribute is set.
+     * @see #unsetEditable()
+     * @see #isEditable()
+     * @see #setEditable(boolean)
+     * @generated
+     */
+    boolean isSetEditable();
+
+    /**
+     * Returns the value of the '<em><b>Optional</b></em>' attribute.
+     * The default value is <code>"false"</code>.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Indicates whether the element requires an input value.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Optional</em>' attribute.
+     * @see #isSetOptional()
+     * @see #unsetOptional()
+     * @see #setOptional(boolean)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getInputElementAttributes_Optional()
+     * @model default="false" unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Boolean"
+     *        extendedMetaData="kind='element' name='optional' namespace='##targetNamespace'"
+     * @generated
+     */
+    boolean isOptional();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#isOptional <em>Optional</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Optional</em>' attribute.
+     * @see #isSetOptional()
+     * @see #unsetOptional()
+     * @see #isOptional()
+     * @generated
+     */
+    void setOptional( boolean value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#isOptional <em>Optional</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetOptional()
+     * @see #isOptional()
+     * @see #setOptional(boolean)
+     * @generated
+     */
+    void unsetOptional();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#isOptional <em>Optional</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Optional</em>' attribute is set.
+     * @see #unsetOptional()
+     * @see #isOptional()
+     * @see #setOptional(boolean)
+     * @generated
+     */
+    boolean isSetOptional();
+
+    /**
+     * Returns the value of the '<em><b>Masks Value</b></em>' attribute.
+     * The default value is <code>"false"</code>.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Indicates whether input value should be masked or encrypted in persistent store and any UI display.  Applies to default value as well.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Masks Value</em>' attribute.
+     * @see #isSetMasksValue()
+     * @see #unsetMasksValue()
+     * @see #setMasksValue(boolean)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getInputElementAttributes_MasksValue()
+     * @model default="false" unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Boolean"
+     *        extendedMetaData="kind='element' name='masksValue' namespace='##targetNamespace'"
+     * @generated
+     */
+    boolean isMasksValue();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#isMasksValue <em>Masks Value</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Masks Value</em>' attribute.
+     * @see #isSetMasksValue()
+     * @see #unsetMasksValue()
+     * @see #isMasksValue()
+     * @generated
+     */
+    void setMasksValue( boolean value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#isMasksValue <em>Masks Value</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetMasksValue()
+     * @see #isMasksValue()
+     * @see #setMasksValue(boolean)
+     * @generated
+     */
+    void unsetMasksValue();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#isMasksValue <em>Masks Value</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Masks Value</em>' attribute is set.
+     * @see #unsetMasksValue()
+     * @see #isMasksValue()
+     * @see #setMasksValue(boolean)
+     * @generated
+     */
+    boolean isSetMasksValue();
+
+    /**
+     * Returns the value of the '<em><b>Static Value Choices</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Static Value Choices</em>' containment reference.
+     * @see #setStaticValueChoices(ScalarValueChoices)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getInputElementAttributes_StaticValueChoices()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='staticValueChoices' namespace='##targetNamespace'"
+     * @generated
+     */
+    ScalarValueChoices getStaticValueChoices();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#getStaticValueChoices <em>Static Value Choices</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Static Value Choices</em>' containment reference.
+     * @see #getStaticValueChoices()
+     * @generated
+     */
+    void setStaticValueChoices( ScalarValueChoices value );
+
+    /**
+     * Returns the value of the '<em><b>Dynamic Value Choices</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Dynamic Value Choices</em>' containment reference.
+     * @see #setDynamicValueChoices(DynamicValuesQuery)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getInputElementAttributes_DynamicValueChoices()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='dynamicValueChoices' namespace='##targetNamespace'"
+     * @generated
+     */
+    DynamicValuesQuery getDynamicValueChoices();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#getDynamicValueChoices <em>Dynamic Value Choices</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Dynamic Value Choices</em>' containment reference.
+     * @see #getDynamicValueChoices()
+     * @generated
+     */
+    void setDynamicValueChoices( DynamicValuesQuery value );
+
+    /**
+     * Returns the value of the '<em><b>Ui Hints</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Ui Hints</em>' containment reference.
+     * @see #setUiHints(InputElementUIHints)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getInputElementAttributes_UiHints()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='uiHints' namespace='##targetNamespace'"
+     * @generated
+     */
+    InputElementUIHints getUiHints();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#getUiHints <em>Ui Hints</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Ui Hints</em>' containment reference.
+     * @see #getUiHints()
+     * @generated
+     */
+    void setUiHints( InputElementUIHints value );
+
+    /**
+     * Sets the value of the <em>Prompt Style</em> attribute
+     * in the element's UI hints.
+     * @param value the new value of the '<em>Prompt Style</em>' attribute.
+     * @see org.eclipse.datatools.connectivity.oda.design.InputPromptControlStyle
+     * @see #setUiHints(InputElementUIHints)
+     * @generated NOT
+     */
+    void setUiPromptStyle( InputPromptControlStyle value );
+
+} // InputElementAttributes
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/InputElementUIHints.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/InputElementUIHints.java
new file mode 100644
index 0000000..c0a9104
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/InputElementUIHints.java
@@ -0,0 +1,164 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: InputElementUIHints.java,v 1.2 2007/04/11 02:59:53 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * UI hints for a data element defined with the input mode.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.InputElementUIHints#getPromptStyle <em>Prompt Style</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.InputElementUIHints#getAutoSuggestThreshold <em>Auto Suggest Threshold</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getInputElementUIHints()
+ * @model extendedMetaData="name='InputElementUIHints' kind='elementOnly'"
+ * @generated
+ */
+public interface InputElementUIHints extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Prompt Style</b></em>' attribute.
+     * The literals are from the enumeration {@link org.eclipse.datatools.connectivity.oda.design.InputPromptControlStyle}.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Defaults to TextField if no static and dynamic value choices are defined; otherwise, defaults to SelectableList.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Prompt Style</em>' attribute.
+     * @see org.eclipse.datatools.connectivity.oda.design.InputPromptControlStyle
+     * @see #isSetPromptStyle()
+     * @see #unsetPromptStyle()
+     * @see #setPromptStyle(InputPromptControlStyle)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getInputElementUIHints_PromptStyle()
+     * @model unsettable="true"
+     *        extendedMetaData="kind='element' name='promptStyle' namespace='##targetNamespace'"
+     * @generated
+     */
+    InputPromptControlStyle getPromptStyle();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.InputElementUIHints#getPromptStyle <em>Prompt Style</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Prompt Style</em>' attribute.
+     * @see org.eclipse.datatools.connectivity.oda.design.InputPromptControlStyle
+     * @see #isSetPromptStyle()
+     * @see #unsetPromptStyle()
+     * @see #getPromptStyle()
+     * @generated
+     */
+    void setPromptStyle( InputPromptControlStyle value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.InputElementUIHints#getPromptStyle <em>Prompt Style</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetPromptStyle()
+     * @see #getPromptStyle()
+     * @see #setPromptStyle(InputPromptControlStyle)
+     * @generated
+     */
+    void unsetPromptStyle();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.InputElementUIHints#getPromptStyle <em>Prompt Style</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Prompt Style</em>' attribute is set.
+     * @see #unsetPromptStyle()
+     * @see #getPromptStyle()
+     * @see #setPromptStyle(InputPromptControlStyle)
+     * @generated
+     */
+    boolean isSetPromptStyle();
+
+    /**
+     * Returns the value of the '<em><b>Auto Suggest Threshold</b></em>' attribute.
+     * The default value is <code>"1"</code>.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The number of characters after which auto suggest will kick in.  It is applicable only where an user can input a value, e.g. when a SelectableListWithTextField promptStyle and a DynamicValuesQuery is used.
+     * 
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Auto Suggest Threshold</em>' attribute.
+     * @see #isSetAutoSuggestThreshold()
+     * @see #unsetAutoSuggestThreshold()
+     * @see #setAutoSuggestThreshold(int)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getInputElementUIHints_AutoSuggestThreshold()
+     * @model default="1" unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Int"
+     *        extendedMetaData="kind='element' name='autoSuggestThreshold' namespace='##targetNamespace'"
+     * @generated
+     * @since 3.2 (DTP 1.7)
+     */
+    int getAutoSuggestThreshold();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.InputElementUIHints#getAutoSuggestThreshold <em>Auto Suggest Threshold</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Auto Suggest Threshold</em>' attribute.
+     * @see #isSetAutoSuggestThreshold()
+     * @see #unsetAutoSuggestThreshold()
+     * @see #getAutoSuggestThreshold()
+     * @generated
+     * @since 3.2 (DTP 1.7)
+     */
+    void setAutoSuggestThreshold( int value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.InputElementUIHints#getAutoSuggestThreshold <em>Auto Suggest Threshold</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetAutoSuggestThreshold()
+     * @see #getAutoSuggestThreshold()
+     * @see #setAutoSuggestThreshold(int)
+     * @generated
+     * @since 3.2 (DTP 1.7)
+     */
+    void unsetAutoSuggestThreshold();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.InputElementUIHints#getAutoSuggestThreshold <em>Auto Suggest Threshold</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Auto Suggest Threshold</em>' attribute is set.
+     * @see #unsetAutoSuggestThreshold()
+     * @see #getAutoSuggestThreshold()
+     * @see #setAutoSuggestThreshold(int)
+     * @generated
+     * @since 3.2 (DTP 1.7)
+     */
+    boolean isSetAutoSuggestThreshold();
+
+} // InputElementUIHints
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/InputParameterAttributes.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/InputParameterAttributes.java
new file mode 100644
index 0000000..90fdd9e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/InputParameterAttributes.java
@@ -0,0 +1,104 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: InputParameterAttributes.java,v 1.2 2006/02/12 06:45:56 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * The attributes of a top-level input parameter, which can be either scalar or complex type.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.InputParameterAttributes#getElementAttributes <em>Element Attributes</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.InputParameterAttributes#getUiHints <em>Ui Hints</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getInputParameterAttributes()
+ * @model extendedMetaData="name='InputParameterAttributes' kind='elementOnly'"
+ * @generated
+ */
+public interface InputParameterAttributes extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2007 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Element Attributes</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Element Attributes</em>' containment reference.
+     * @see #setElementAttributes(InputElementAttributes)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getInputParameterAttributes_ElementAttributes()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='elementAttributes' namespace='##targetNamespace'"
+     * @generated
+     */
+    InputElementAttributes getElementAttributes();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.InputParameterAttributes#getElementAttributes <em>Element Attributes</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Element Attributes</em>' containment reference.
+     * @see #getElementAttributes()
+     * @generated
+     */
+    void setElementAttributes( InputElementAttributes value );
+
+    /**
+     * Returns the value of the '<em><b>Ui Hints</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Ui Hints</em>' containment reference.
+     * @see #setUiHints(InputParameterUIHints)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getInputParameterAttributes_UiHints()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='uiHints' namespace='##targetNamespace'"
+     * @generated
+     */
+    InputParameterUIHints getUiHints();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.InputParameterAttributes#getUiHints <em>Ui Hints</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Ui Hints</em>' containment reference.
+     * @see #getUiHints()
+     * @generated
+     */
+    void setUiHints( InputParameterUIHints value );
+
+    /**
+     * Sets the value of the <em>Group Prompt Display Name</em> attribute
+     * in the element's UI hints.
+     * @param value the new value of the '<em>Group Prompt Display Name</em>' attribute.
+     * @see #setUiHints(InputParameterUIHints)
+     * @generated NOT
+     */
+    void setUiGroupPromptDisplayName( String value );
+
+} // InputParameterAttributes
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/InputParameterUIHints.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/InputParameterUIHints.java
new file mode 100644
index 0000000..b40f390
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/InputParameterUIHints.java
@@ -0,0 +1,99 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: InputParameterUIHints.java,v 1.2 2007/04/11 02:59:53 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * UI hints for a top-level parameter.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.InputParameterUIHints#getGroupPromptDisplayName <em>Group Prompt Display Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getInputParameterUIHints()
+ * @model extendedMetaData="name='InputParameterUIHints' kind='elementOnly'"
+ * @generated
+ */
+public interface InputParameterUIHints extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Group Prompt Display Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * For grouping multiple top-level input parameters under the same UI group prompt.  Text can be localized with a resource key.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Group Prompt Display Name</em>' attribute.
+     * @see #setGroupPromptDisplayName(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getInputParameterUIHints_GroupPromptDisplayName()
+     * @see #getGroupPromptDisplayNameKey()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String"
+     *        extendedMetaData="kind='element' name='groupPromptDisplayName' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getGroupPromptDisplayName();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.InputParameterUIHints#getGroupPromptDisplayName <em>Group Prompt Display Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Group Prompt Display Name</em>' attribute.
+     * @see #getGroupPromptDisplayName()
+     * @see #setGroupPromptDisplayNameKey(String)
+     * @generated
+     */
+    void setGroupPromptDisplayName( String value );
+
+    /**
+     * Returns the resource key of the '<em><b>Group Prompt Display Name</b></em>' attribute.
+     * @return the resource key of the '<em>Group Prompt Display Name</em>' attribute.
+     * @see #setGroupPromptDisplayNameKey
+     * @see #getGroupPromptDisplayName()
+     * @see DataSourceDesign#getResourceFile()
+     * @generated NOT
+     * @since 3.2.3
+     */
+    String getGroupPromptDisplayNameKey();
+    
+    /**
+     * Sets the resource key of the '{@link org.eclipse.datatools.connectivity.oda.design.InputParameterUIHints#getGroupPromptDisplayName <em>Group Prompt Display Name</em>}' attribute.
+     * @param value the new resource key of the '<em>Group Prompt Display Name</em>' attribute;
+     *              may be null to reset
+     * @see #getGroupPromptDisplayNameKey
+     * @see #setGroupPromptDisplayName(String)
+     * @see DataSourceDesign#getResourceFile()
+     * @generated NOT
+     * @since 3.2.3
+     */
+    void setGroupPromptDisplayNameKey( String value );
+
+} // InputParameterUIHints
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/InputPromptControlStyle.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/InputPromptControlStyle.java
new file mode 100644
index 0000000..8aa7fb0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/InputPromptControlStyle.java
@@ -0,0 +1,302 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: InputPromptControlStyle.java,v 1.2 2007/04/11 02:59:53 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Input Prompt Control Style</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * The style of UI control for prompting user to input a value.
+ * <!-- end-model-doc -->
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getInputPromptControlStyle()
+ * @model extendedMetaData="name='InputPromptControlStyle'"
+ * @generated
+ */
+public enum InputPromptControlStyle implements Enumerator {
+    /**
+     * The '<em><b>Text Field</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #TEXT_FIELD
+     * @generated
+     * @ordered
+     */
+    TEXT_FIELD_LITERAL(0, "TextField", "TextField"), //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * The '<em><b>Selectable List</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #SELECTABLE_LIST
+     * @generated
+     * @ordered
+     */
+    SELECTABLE_LIST_LITERAL(1, "SelectableList", "SelectableList"), //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * The '<em><b>Selectable List With Text Field</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #SELECTABLE_LIST_WITH_TEXT_FIELD
+     * @generated
+     * @ordered
+     */
+    SELECTABLE_LIST_WITH_TEXT_FIELD_LITERAL(2, "SelectableListWithTextField", //$NON-NLS-1$
+            "SelectableListWithTextField"), //$NON-NLS-1$
+    /**
+     * The '<em><b>Check Box</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #CHECK_BOX
+     * @generated
+     * @ordered
+     */
+    CHECK_BOX_LITERAL(3, "CheckBox", "CheckBox"), //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * The '<em><b>Radio Button</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #RADIO_BUTTON
+     * @generated
+     * @ordered
+     */
+    RADIO_BUTTON_LITERAL(4, "RadioButton", "RadioButton"); //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The '<em><b>Text Field</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #TEXT_FIELD_LITERAL
+     * @model name="TextField"
+     * @generated
+     * @ordered
+     */
+    public static final int TEXT_FIELD = 0;
+
+    /**
+     * The '<em><b>Selectable List</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #SELECTABLE_LIST_LITERAL
+     * @model name="SelectableList"
+     * @generated
+     * @ordered
+     */
+    public static final int SELECTABLE_LIST = 1;
+
+    /**
+     * The '<em><b>Selectable List With Text Field</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #SELECTABLE_LIST_WITH_TEXT_FIELD_LITERAL
+     * @model name="SelectableListWithTextField"
+     * @generated
+     * @ordered
+     */
+    public static final int SELECTABLE_LIST_WITH_TEXT_FIELD = 2;
+
+    /**
+     * The '<em><b>Check Box</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #CHECK_BOX_LITERAL
+     * @model name="CheckBox"
+     * @generated
+     * @ordered
+     */
+    public static final int CHECK_BOX = 3;
+
+    /**
+     * The '<em><b>Radio Button</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #RADIO_BUTTON_LITERAL
+     * @model name="RadioButton"
+     * @generated
+     * @ordered
+     */
+    public static final int RADIO_BUTTON = 4;
+
+    /**
+     * An array of all the '<em><b>Input Prompt Control Style</b></em>' enumerators.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private static final InputPromptControlStyle[] VALUES_ARRAY = new InputPromptControlStyle[]
+    { TEXT_FIELD_LITERAL, SELECTABLE_LIST_LITERAL,
+            SELECTABLE_LIST_WITH_TEXT_FIELD_LITERAL, CHECK_BOX_LITERAL,
+            RADIO_BUTTON_LITERAL, };
+
+    /**
+     * A public read-only list of all the '<em><b>Input Prompt Control Style</b></em>' enumerators.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final List<InputPromptControlStyle> VALUES = Collections
+            .unmodifiableList( Arrays.asList( VALUES_ARRAY ) );
+
+    /**
+     * Returns the '<em><b>Input Prompt Control Style</b></em>' literal with the specified literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static InputPromptControlStyle get( String literal )
+    {
+        for( int i = 0; i < VALUES_ARRAY.length; ++i)
+        {
+            InputPromptControlStyle result = VALUES_ARRAY[i];
+            if( result.toString().equals( literal ) )
+            {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the '<em><b>Input Prompt Control Style</b></em>' literal with the specified name.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static InputPromptControlStyle getByName( String name )
+    {
+        for( int i = 0; i < VALUES_ARRAY.length; ++i)
+        {
+            InputPromptControlStyle result = VALUES_ARRAY[i];
+            if( result.getName().equals( name ) )
+            {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the '<em><b>Input Prompt Control Style</b></em>' literal with the specified integer value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static InputPromptControlStyle get( int value )
+    {
+        switch( value )
+        {
+        case TEXT_FIELD:
+            return TEXT_FIELD_LITERAL;
+        case SELECTABLE_LIST:
+            return SELECTABLE_LIST_LITERAL;
+        case SELECTABLE_LIST_WITH_TEXT_FIELD:
+            return SELECTABLE_LIST_WITH_TEXT_FIELD_LITERAL;
+        case CHECK_BOX:
+            return CHECK_BOX_LITERAL;
+        case RADIO_BUTTON:
+            return RADIO_BUTTON_LITERAL;
+        }
+        return null;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final int value;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final String name;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final String literal;
+
+    /**
+     * Only this class can construct instances.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private InputPromptControlStyle( int value, String name, String literal )
+    {
+        this.value = value;
+        this.name = name;
+        this.literal = literal;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public int getValue()
+    {
+        return value;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getName()
+    {
+        return name;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getLiteral()
+    {
+        return literal;
+    }
+
+    /**
+     * Returns the literal value of the enumerator, which is its string representation.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        return literal;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/Locale.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/Locale.java
new file mode 100644
index 0000000..c92b0f6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/Locale.java
@@ -0,0 +1,185 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: Locale.java,v 1.3 2006/02/18 00:08:56 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+import com.ibm.icu.util.ULocale;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Represents a specific geographical, political, or cultural region.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.Locale#getLanguage <em>Language</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.Locale#getCountry <em>Country</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.Locale#getVariant <em>Variant</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getLocale()
+ * @model extendedMetaData="name='Locale' kind='elementOnly'"
+ * @generated
+ */
+public interface Locale extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2007 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the locale value as an ULocale object.
+     * @return	a com.ibm.icu.util.ULocale object
+     * @generated NOT
+     */
+    ULocale getLocale();
+
+    /**
+     * Sets all the locale values.
+     * @param   a ULocale object
+     * @generated NOT
+     */
+    void setLocale( ULocale locale );
+
+    /**
+     * Getter for the programmatic name of the entire locale, 
+     * with the language and country separated by underbars. 
+     * Language is always lower case, and country is always 
+     * upper case. If the required language is missing, 
+     * this function will return the default locale's value.
+     * The variant value, if any, is ignored.
+     * Examples: "en", "de", "de_DE".
+     * @return	a string representation of the locale's language and country.
+     * @generated NOT
+     */
+    String toLanguageCountryString();
+
+    /**
+     * Returns the value of the '<em><b>Language</b></em>' attribute.
+     * The default value is <code>"en"</code>.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * An ISO Language Code; lower-case, two-letter codes as defined by ISO-639.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Language</em>' attribute.
+     * @see #isSetLanguage()
+     * @see #unsetLanguage()
+     * @see #setLanguage(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getLocale_Language()
+     * @model default="en" unique="false" unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
+     *        extendedMetaData="kind='element' name='language' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getLanguage();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.Locale#getLanguage <em>Language</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Language</em>' attribute.
+     * @see #isSetLanguage()
+     * @see #unsetLanguage()
+     * @see #getLanguage()
+     * @generated
+     */
+    void setLanguage( String value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.Locale#getLanguage <em>Language</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetLanguage()
+     * @see #getLanguage()
+     * @see #setLanguage(String)
+     * @generated
+     */
+    void unsetLanguage();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.Locale#getLanguage <em>Language</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Language</em>' attribute is set.
+     * @see #unsetLanguage()
+     * @see #getLanguage()
+     * @see #setLanguage(String)
+     * @generated
+     */
+    boolean isSetLanguage();
+
+    /**
+     * Returns the value of the '<em><b>Country</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * An ISO Country Code; upper-case, two-letter codes as defined by ISO-3166.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Country</em>' attribute.
+     * @see #setCountry(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getLocale_Country()
+     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String"
+     *        extendedMetaData="kind='element' name='country' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getCountry();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.Locale#getCountry <em>Country</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Country</em>' attribute.
+     * @see #getCountry()
+     * @generated
+     */
+    void setCountry( String value );
+
+    /**
+     * Returns the value of the '<em><b>Variant</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * A vendor or browser-specific code.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Variant</em>' attribute.
+     * @see #setVariant(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getLocale_Variant()
+     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String"
+     *        extendedMetaData="kind='element' name='variant' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getVariant();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.Locale#getVariant <em>Variant</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Variant</em>' attribute.
+     * @see #getVariant()
+     * @generated
+     */
+    void setVariant( String value );
+
+} // Locale
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/NameValuePair.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/NameValuePair.java
new file mode 100644
index 0000000..38c6e95
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/NameValuePair.java
@@ -0,0 +1,95 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: NameValuePair.java,v 1.1 2005/12/29 04:17:55 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * A pair of name and corresponding value.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.NameValuePair#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.NameValuePair#getValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getNameValuePair()
+ * @model extendedMetaData="name='NameValuePair' kind='elementOnly'"
+ * @generated
+ */
+public interface NameValuePair extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2007 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Name</em>' attribute.
+     * @see #setName(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getNameValuePair_Name()
+     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
+     *        extendedMetaData="kind='element' name='name' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getName();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.NameValuePair#getName <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Name</em>' attribute.
+     * @see #getName()
+     * @generated
+     */
+    void setName( String value );
+
+    /**
+     * Returns the value of the '<em><b>Value</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Value</em>' attribute.
+     * @see #setValue(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getNameValuePair_Value()
+     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String"
+     *        extendedMetaData="kind='element' name='value' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getValue();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.NameValuePair#getValue <em>Value</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Value</em>' attribute.
+     * @see #getValue()
+     * @generated
+     */
+    void setValue( String value );
+
+} // NameValuePair
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/NotExpression.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/NotExpression.java
new file mode 100644
index 0000000..48c8457
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/NotExpression.java
@@ -0,0 +1,75 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: NotExpression.java,v 1.1 2009/01/30 00:23:57 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Not Expression</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * A built-in negated filter expression.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.NotExpression#getNegatingExpression <em>Negating Expression</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getNotExpression()
+ * @since 3.3 (DTP 1.8)
+ * @model extendedMetaData="name='NotExpression' kind='elementOnly'"
+ * @generated
+ */
+public interface NotExpression extends FilterExpression
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Negating Expression</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Negating Expression</em>' containment reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Negating Expression</em>' containment reference.
+     * @see #setNegatingExpression(FilterExpression)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getNotExpression_NegatingExpression()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='negatingExpression' namespace='##targetNamespace'"
+     * @generated
+     */
+    FilterExpression getNegatingExpression();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.NotExpression#getNegatingExpression <em>Negating Expression</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Negating Expression</em>' containment reference.
+     * @see #getNegatingExpression()
+     * @generated
+     */
+    void setNegatingExpression( FilterExpression value );
+
+} // NotExpression
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/NullOrderingType.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/NullOrderingType.java
new file mode 100644
index 0000000..d30cec9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/NullOrderingType.java
@@ -0,0 +1,272 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: NullOrderingType.java,v 1.1 2009/04/30 06:04:18 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Null Ordering Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * The type of null value ordering defined in a sort key.
+ * <!-- end-model-doc -->
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getNullOrderingType()
+ * @since 3.3 (DTP 1.8)
+ * @model extendedMetaData="name='NullOrderingType'"
+ * @generated
+ */
+public enum NullOrderingType implements Enumerator {
+    /**
+     * The '<em><b>Unknown</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #UNKNOWN_VALUE
+     * @generated
+     * @ordered
+     */
+    UNKNOWN(0, "Unknown", "Unknown"), //$NON-NLS-1$ //$NON-NLS-2$
+
+    /**
+     * The '<em><b>Nulls First</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #NULLS_FIRST_VALUE
+     * @generated
+     * @ordered
+     */
+    NULLS_FIRST(1, "NullsFirst", "NullsFirst"), //$NON-NLS-1$ //$NON-NLS-2$
+
+    /**
+     * The '<em><b>Nulls Last</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #NULLS_LAST_VALUE
+     * @generated
+     * @ordered
+     */
+    NULLS_LAST(2, "NullsLast", "NullsLast"); //$NON-NLS-1$ //$NON-NLS-2$
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The '<em><b>Unknown</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of '<em><b>Unknown</b></em>' literal object isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @see #UNKNOWN
+     * @model name="Unknown"
+     * @generated
+     * @ordered
+     */
+    public static final int UNKNOWN_VALUE = 0;
+
+    /**
+     * The '<em><b>Nulls First</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of '<em><b>Nulls First</b></em>' literal object isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @see #NULLS_FIRST
+     * @model name="NullsFirst"
+     * @generated
+     * @ordered
+     */
+    public static final int NULLS_FIRST_VALUE = 1;
+
+    /**
+     * The '<em><b>Nulls Last</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of '<em><b>Nulls Last</b></em>' literal object isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @see #NULLS_LAST
+     * @model name="NullsLast"
+     * @generated
+     * @ordered
+     */
+    public static final int NULLS_LAST_VALUE = 2;
+
+    /**
+     * An array of all the '<em><b>Null Ordering Type</b></em>' enumerators.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private static final NullOrderingType[] VALUES_ARRAY = new NullOrderingType[]
+    { UNKNOWN, NULLS_FIRST, NULLS_LAST, };
+
+    /**
+     * A public read-only list of all the '<em><b>Null Ordering Type</b></em>' enumerators.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final List<NullOrderingType> VALUES = Collections
+            .unmodifiableList( Arrays.asList( VALUES_ARRAY ) );
+
+    /**
+     * Returns the '<em><b>Null Ordering Type</b></em>' literal with the specified literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static NullOrderingType get( String literal )
+    {
+        for( int i = 0; i < VALUES_ARRAY.length; ++i)
+        {
+            NullOrderingType result = VALUES_ARRAY[i];
+            if( result.toString().equals( literal ) )
+            {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the '<em><b>Null Ordering Type</b></em>' literal with the specified name.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static NullOrderingType getByName( String name )
+    {
+        for( int i = 0; i < VALUES_ARRAY.length; ++i)
+        {
+            NullOrderingType result = VALUES_ARRAY[i];
+            if( result.getName().equals( name ) )
+            {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the '<em><b>Null Ordering Type</b></em>' literal with the specified integer value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static NullOrderingType get( int value )
+    {
+        switch( value )
+        {
+        case UNKNOWN_VALUE:
+            return UNKNOWN;
+        case NULLS_FIRST_VALUE:
+            return NULLS_FIRST;
+        case NULLS_LAST_VALUE:
+            return NULLS_LAST;
+        }
+        return null;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final int value;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final String name;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final String literal;
+
+    /**
+     * Only this class can construct instances.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private NullOrderingType( int value, String name, String literal )
+    {
+        this.value = value;
+        this.name = name;
+        this.literal = literal;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public int getValue()
+    {
+        return value;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getName()
+    {
+        return name;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getLiteral()
+    {
+        return literal;
+    }
+
+    /**
+     * Returns the literal value of the enumerator, which is its string representation.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        return literal;
+    }
+
+} //NullOrderingType
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/OdaComplexDataType.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/OdaComplexDataType.java
new file mode 100644
index 0000000..7bdf34d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/OdaComplexDataType.java
@@ -0,0 +1,233 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: OdaComplexDataType.java,v 1.2 2007/04/11 02:59:53 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Oda Complex Data Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * ODA complex data types.
+ * <!-- end-model-doc -->
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getOdaComplexDataType()
+ * @model extendedMetaData="name='OdaComplexDataType'"
+ * @generated
+ */
+public enum OdaComplexDataType implements Enumerator {
+    /**
+     * The '<em><b>Structure</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #STRUCTURE
+     * @generated
+     * @ordered
+     */
+    STRUCTURE_LITERAL(0, "Structure", "Structure"), //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * The '<em><b>Table</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #TABLE
+     * @generated
+     * @ordered
+     */
+    TABLE_LITERAL(1, "Table", "Table"); //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The '<em><b>Structure</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #STRUCTURE_LITERAL
+     * @model name="Structure"
+     * @generated
+     * @ordered
+     */
+    public static final int STRUCTURE = 0;
+
+    /**
+     * The '<em><b>Table</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #TABLE_LITERAL
+     * @model name="Table"
+     * @generated
+     * @ordered
+     */
+    public static final int TABLE = 1;
+
+    /**
+     * An array of all the '<em><b>Oda Complex Data Type</b></em>' enumerators.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private static final OdaComplexDataType[] VALUES_ARRAY = new OdaComplexDataType[]
+    { STRUCTURE_LITERAL, TABLE_LITERAL, };
+
+    /**
+     * A public read-only list of all the '<em><b>Oda Complex Data Type</b></em>' enumerators.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final List<OdaComplexDataType> VALUES = Collections
+            .unmodifiableList( Arrays.asList( VALUES_ARRAY ) );
+
+    /**
+     * Returns the '<em><b>Oda Complex Data Type</b></em>' literal with the specified literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static OdaComplexDataType get( String literal )
+    {
+        for( int i = 0; i < VALUES_ARRAY.length; ++i)
+        {
+            OdaComplexDataType result = VALUES_ARRAY[i];
+            if( result.toString().equals( literal ) )
+            {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the '<em><b>Oda Complex Data Type</b></em>' literal with the specified name.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static OdaComplexDataType getByName( String name )
+    {
+        for( int i = 0; i < VALUES_ARRAY.length; ++i)
+        {
+            OdaComplexDataType result = VALUES_ARRAY[i];
+            if( result.getName().equals( name ) )
+            {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the '<em><b>Oda Complex Data Type</b></em>' literal with the specified integer value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static OdaComplexDataType get( int value )
+    {
+        switch( value )
+        {
+        case STRUCTURE:
+            return STRUCTURE_LITERAL;
+        case TABLE:
+            return TABLE_LITERAL;
+        }
+        return null;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final int value;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final String name;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final String literal;
+
+    /**
+     * Only this class can construct instances.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private OdaComplexDataType( int value, String name, String literal )
+    {
+        this.value = value;
+        this.name = name;
+        this.literal = literal;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public int getValue()
+    {
+        return value;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getName()
+    {
+        return name;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getLiteral()
+    {
+        return literal;
+    }
+
+    /**
+     * Returns the literal value of the enumerator, which is its string representation.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        return literal;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/OdaDesignSession.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/OdaDesignSession.java
new file mode 100644
index 0000000..9c65a2c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/OdaDesignSession.java
@@ -0,0 +1,189 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: OdaDesignSession.java,v 1.8 2007/04/11 02:59:53 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Definition of an ODA design session on a Data Access Design.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.OdaDesignSession#getRequest <em>Request</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.OdaDesignSession#getResponse <em>Response</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getOdaDesignSession()
+ * @model extendedMetaData="name='OdaDesignSession' kind='elementOnly'"
+ * @generated
+ */
+public interface OdaDesignSession extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2007 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Request</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Request</em>' containment reference.
+     * @see #setRequest(DesignSessionRequest)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getOdaDesignSession_Request()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='request' namespace='##targetNamespace'"
+     * @generated
+     */
+    DesignSessionRequest getRequest();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.OdaDesignSession#getRequest <em>Request</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Request</em>' containment reference.
+     * @see #getRequest()
+     * @generated
+     */
+    void setRequest( DesignSessionRequest value );
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.OdaDesignSession#getRequest <em>Request</em>}' containment reference
+     * with a new request associated with the given data source design. 
+     * @param dataSourceDesign
+     * @see #setRequest(DesignSessionRequest)
+     * @generated NOT
+     */
+    void setNewRequest( DataSourceDesign dataSourceDesign );
+
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.OdaDesignSession#getRequest <em>Request</em>}' containment reference
+     * with a new request associated with the given data set design. 
+     * @param dataSetDesign
+     * @since 3.0.4
+     * @see #setRequest(DesignSessionRequest)
+     * @generated NOT
+     */
+    void setNewRequest( DataSetDesign dataSetDesign );
+
+    /**
+     * Returns the value of the '<em><b>Response</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Response</em>' containment reference.
+     * @see #setResponse(DesignSessionResponse)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getOdaDesignSession_Response()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='response' namespace='##targetNamespace'"
+     * @generated
+     */
+    DesignSessionResponse getResponse();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.OdaDesignSession#getResponse <em>Response</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Response</em>' containment reference.
+     * @see #getResponse()
+     * @generated
+     */
+    void setResponse( DesignSessionResponse value );
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.OdaDesignSession#getResponse <em>Response</em>}' containment reference
+     * with a new response that contains the given session status
+     * and DataSourceDesign.
+     * <br>This method may be used by an ODA driver's design UI extension
+     * to update this design session with a response that contains
+     * the edited data source design definition.
+     * @param dataSourceDesign
+     * @see #setResponse(DesignSessionResponse)
+     * @generated NOT
+     */
+    void setNewResponse( boolean isSessionOk, DataSourceDesign dataSourceDesign );
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.OdaDesignSession#getResponse <em>Response</em>}' containment reference
+     * with a new response that contains the given session status
+     * and DataSetDesign instance.
+     * <br>This method may be used by an ODA driver's design UI extension
+     * to update this design session with a response that contains
+     * the edited data set design definition.
+     * @param dataSetDesign
+     * @see #setResponse(DesignSessionResponse)
+     * @generated NOT
+     */
+    void setNewResponse( boolean isSessionOk, DataSetDesign dataSetDesign );
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.OdaDesignSession#getResponse <em>Response</em>}' containment reference
+     * with a response in a Cancelled session state.
+     * @see #setResponse(DesignSessionResponse)
+     * @generated NOT
+     */
+    void setResponseInCancelledState();
+
+    /**
+     * Obtains the Data Source Design associated with the
+     * top-level Data Set in the Request session.
+     * @return the value of the '<em>Data Source Design</em>' containment reference;
+     *          may be null if none is specified.
+     * @see #getRequest()
+     * @generated NOT
+     */
+    DataSourceDesign getRequestDataSourceDesign();
+
+    /**
+     * Obtains the top-level Data Set Design associated with the
+     * Request session.
+     * @return the value of the '<em>Data Set Design</em>' containment reference;
+     *          may be null if none is specified.
+     * @see #getRequest()
+     * @generated NOT
+     */
+    DataSetDesign getRequestDataSetDesign();
+
+    /**
+     * Gets the Data Source Design associated with the
+     * top level Data Set in the Response session.
+     * @return the value of the '<em>Data Source Design</em>' containment reference;
+     *          could be null if none is specified.
+     * @see #getResponse()
+     * @generated NOT
+     */
+    DataSourceDesign getResponseDataSourceDesign();
+
+    /**
+     * Gets the Data Set Design associated with the
+     * Response session.
+     * @return the value of the '<em>Data Set Design</em>' containment reference;
+     *          could be null if none is specified.
+     * @see #getResponse()
+     * @generated NOT
+     */
+    DataSetDesign getResponseDataSetDesign();
+
+} // OdaDesignSession
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/OdaScalarDataType.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/OdaScalarDataType.java
new file mode 100644
index 0000000..61f7932
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/OdaScalarDataType.java
@@ -0,0 +1,441 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: OdaScalarDataType.java,v 1.3 2007/04/11 02:59:53 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Oda Scalar Data Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * ODA scalar data types.
+ * <!-- end-model-doc -->
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getOdaScalarDataType()
+ * @model extendedMetaData="name='OdaScalarDataType'"
+ * @generated
+ */
+public enum OdaScalarDataType implements Enumerator {
+    /**
+     * The '<em><b>Date</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #DATE
+     * @generated
+     * @ordered
+     */
+    DATE_LITERAL(0, "Date", "Date"), //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * The '<em><b>Double</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #DOUBLE
+     * @generated
+     * @ordered
+     */
+    DOUBLE_LITERAL(1, "Double", "Double"), //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * The '<em><b>Integer</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #INTEGER
+     * @generated
+     * @ordered
+     */
+    INTEGER_LITERAL(2, "Integer", "Integer"), //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * The '<em><b>String</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #STRING
+     * @generated
+     * @ordered
+     */
+    STRING_LITERAL(3, "String", "String"), //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * The '<em><b>Time</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #TIME
+     * @generated
+     * @ordered
+     */
+    TIME_LITERAL(4, "Time", "Time"), //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * The '<em><b>Timestamp</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #TIMESTAMP
+     * @generated
+     * @ordered
+     */
+    TIMESTAMP_LITERAL(5, "Timestamp", "Timestamp"), //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * The '<em><b>Decimal</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #DECIMAL
+     * @generated
+     * @ordered
+     */
+    DECIMAL_LITERAL(6, "Decimal", "Decimal"), //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * The '<em><b>Blob</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #BLOB
+     * @generated
+     * @ordered
+     */
+    BLOB_LITERAL(7, "Blob", "Blob"), //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * The '<em><b>Clob</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #CLOB
+     * @generated
+     * @ordered
+     */
+    CLOB_LITERAL(8, "Clob", "Clob"), //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * The '<em><b>Boolean</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #BOOLEAN
+     * @generated
+     * @ordered
+     */
+    BOOLEAN_LITERAL(9, "Boolean", "Boolean"), //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * The '<em><b>Java Object</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #JAVA_OBJECT
+     * @generated
+     * @ordered
+     */
+    JAVA_OBJECT_LITERAL(10, "JavaObject", "JavaObject"); //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The '<em><b>Date</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #DATE_LITERAL
+     * @model name="Date"
+     * @generated
+     * @ordered
+     */
+    public static final int DATE = 0;
+
+    /**
+     * The '<em><b>Double</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #DOUBLE_LITERAL
+     * @model name="Double"
+     * @generated
+     * @ordered
+     */
+    public static final int DOUBLE = 1;
+
+    /**
+     * The '<em><b>Integer</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #INTEGER_LITERAL
+     * @model name="Integer"
+     * @generated
+     * @ordered
+     */
+    public static final int INTEGER = 2;
+
+    /**
+     * The '<em><b>String</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #STRING_LITERAL
+     * @model name="String"
+     * @generated
+     * @ordered
+     */
+    public static final int STRING = 3;
+
+    /**
+     * The '<em><b>Time</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #TIME_LITERAL
+     * @model name="Time"
+     * @generated
+     * @ordered
+     */
+    public static final int TIME = 4;
+
+    /**
+     * The '<em><b>Timestamp</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #TIMESTAMP_LITERAL
+     * @model name="Timestamp"
+     * @generated
+     * @ordered
+     */
+    public static final int TIMESTAMP = 5;
+
+    /**
+     * The '<em><b>Decimal</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #DECIMAL_LITERAL
+     * @model name="Decimal"
+     * @generated
+     * @ordered
+     */
+    public static final int DECIMAL = 6;
+
+    /**
+     * The '<em><b>Blob</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #BLOB_LITERAL
+     * @model name="Blob"
+     * @generated
+     * @ordered
+     */
+    public static final int BLOB = 7;
+
+    /**
+     * The '<em><b>Clob</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #CLOB_LITERAL
+     * @model name="Clob"
+     * @generated
+     * @ordered
+     */
+    public static final int CLOB = 8;
+
+    /**
+     * The '<em><b>Boolean</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of '<em><b>Boolean</b></em>' literal object isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @see #BOOLEAN_LITERAL
+     * @model name="Boolean"
+     * @generated
+     * @ordered
+     */
+    public static final int BOOLEAN = 9;
+
+    /**
+     * The '<em><b>Java Object</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of '<em><b>Java Object</b></em>' literal object isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @see #JAVA_OBJECT_LITERAL
+     * @model name="JavaObject"
+     * @generated
+     * @ordered
+     */
+    public static final int JAVA_OBJECT = 10;
+
+    /**
+     * An array of all the '<em><b>Oda Scalar Data Type</b></em>' enumerators.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private static final OdaScalarDataType[] VALUES_ARRAY = new OdaScalarDataType[]
+    { DATE_LITERAL, DOUBLE_LITERAL, INTEGER_LITERAL, STRING_LITERAL,
+            TIME_LITERAL, TIMESTAMP_LITERAL, DECIMAL_LITERAL, BLOB_LITERAL,
+            CLOB_LITERAL, BOOLEAN_LITERAL, JAVA_OBJECT_LITERAL, };
+
+    /**
+     * A public read-only list of all the '<em><b>Oda Scalar Data Type</b></em>' enumerators.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final List<OdaScalarDataType> VALUES = Collections
+            .unmodifiableList( Arrays.asList( VALUES_ARRAY ) );
+
+    /**
+     * Returns the '<em><b>Oda Scalar Data Type</b></em>' literal with the specified literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static OdaScalarDataType get( String literal )
+    {
+        for( int i = 0; i < VALUES_ARRAY.length; ++i)
+        {
+            OdaScalarDataType result = VALUES_ARRAY[i];
+            if( result.toString().equals( literal ) )
+            {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the '<em><b>Oda Scalar Data Type</b></em>' literal with the specified name.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static OdaScalarDataType getByName( String name )
+    {
+        for( int i = 0; i < VALUES_ARRAY.length; ++i)
+        {
+            OdaScalarDataType result = VALUES_ARRAY[i];
+            if( result.getName().equals( name ) )
+            {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the '<em><b>Oda Scalar Data Type</b></em>' literal with the specified integer value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static OdaScalarDataType get( int value )
+    {
+        switch( value )
+        {
+        case DATE:
+            return DATE_LITERAL;
+        case DOUBLE:
+            return DOUBLE_LITERAL;
+        case INTEGER:
+            return INTEGER_LITERAL;
+        case STRING:
+            return STRING_LITERAL;
+        case TIME:
+            return TIME_LITERAL;
+        case TIMESTAMP:
+            return TIMESTAMP_LITERAL;
+        case DECIMAL:
+            return DECIMAL_LITERAL;
+        case BLOB:
+            return BLOB_LITERAL;
+        case CLOB:
+            return CLOB_LITERAL;
+        case BOOLEAN:
+            return BOOLEAN_LITERAL;
+        case JAVA_OBJECT:
+            return JAVA_OBJECT_LITERAL;
+        }
+        return null;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final int value;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final String name;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final String literal;
+
+    /**
+     * Only this class can construct instances.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private OdaScalarDataType( int value, String name, String literal )
+    {
+        this.value = value;
+        this.name = name;
+        this.literal = literal;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public int getValue()
+    {
+        return value;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getName()
+    {
+        return name;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getLiteral()
+    {
+        return literal;
+    }
+
+    /**
+     * Returns the literal value of the enumerator, which is its string representation.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        return literal;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/OrExpression.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/OrExpression.java
new file mode 100644
index 0000000..63f2ffc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/OrExpression.java
@@ -0,0 +1,42 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: OrExpression.java,v 1.1 2009/01/30 00:23:57 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Or Expression</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * A built-in composite filter expression whose child expressions are combined by the Or boolean operator.  The composite expression is evaluated to be true if any of its child expressions is evaluated as true.  
+ * <!-- end-model-doc -->
+ *
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getOrExpression()
+ * @since 3.3 (DTP 1.8)
+ * @model extendedMetaData="name='OrExpression' kind='elementOnly'"
+ * @generated
+ */
+public interface OrExpression extends CompositeFilterExpression
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+} // OrExpression
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/OutputElementAttributes.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/OutputElementAttributes.java
new file mode 100644
index 0000000..1d167c6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/OutputElementAttributes.java
@@ -0,0 +1,175 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: OutputElementAttributes.java,v 1.2 2007/04/11 02:59:53 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Common attributes for a data element defined with the output mode.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes#getLabel <em>Label</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes#getFormattingHints <em>Formatting Hints</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes#getHelpText <em>Help Text</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getOutputElementAttributes()
+ * @model extendedMetaData="name='OutputElementAttributes' kind='elementOnly'"
+ * @generated
+ */
+public interface OutputElementAttributes extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Label</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * A free-format string used to identify the data element in a heading, such as a column header.  Text can be localized with a resource key.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Label</em>' attribute.
+     * @see #setLabel(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getOutputElementAttributes_Label()
+     * @see #getLabelKey
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String"
+     *        extendedMetaData="kind='element' name='label' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getLabel();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes#getLabel <em>Label</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Label</em>' attribute.
+     * @see #getLabel()
+     * @see #setLabelKey(String)
+     * @generated
+     */
+    void setLabel( String value );
+
+    /**
+     * Returns the resource key of the '<em><b>Label</b></em>' attribute.
+     * @return the resource key of the '<em>Label</em>' attribute.
+     * @see #setLabelKey(String)
+     * @see #getLabel()
+     * @see DataSourceDesign#getResourceFile()
+     * @generated NOT
+     * @since 3.2.3
+     */
+    String getLabelKey();
+    
+    /**
+     * Sets the resource key of the '{@link org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes#getLabel <em>Label</em>}' attribute.
+     * @param value the new resource key of the '<em>Label</em>' attribute;
+     *              may be null to reset
+     * @see #getLabelKey()
+     * @see #setLabel(String)
+     * @see DataSourceDesign#getResourceFile()
+     * @generated NOT
+     * @since 3.2.3
+     */
+    void setLabelKey( String value );
+
+    /**
+     * Returns the value of the '<em><b>Formatting Hints</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Formatting Hints</em>' containment reference.
+     * @see #setFormattingHints(ValueFormatHints)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getOutputElementAttributes_FormattingHints()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='formattingHints' namespace='##targetNamespace'"
+     * @generated
+     */
+    ValueFormatHints getFormattingHints();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes#getFormattingHints <em>Formatting Hints</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Formatting Hints</em>' containment reference.
+     * @see #getFormattingHints()
+     * @generated
+     */
+    void setFormattingHints( ValueFormatHints value );
+
+    /**
+     * Returns the value of the '<em><b>Help Text</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Provides additional information to the user about this data element, such as in a balloon help.  Text can be localized with a resource key.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Help Text</em>' attribute.
+     * @see #setHelpText(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getOutputElementAttributes_HelpText()
+     * @see #getHelpTextKey()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String"
+     *        extendedMetaData="kind='element' name='helpText' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getHelpText();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes#getHelpText <em>Help Text</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Help Text</em>' attribute.
+     * @see #getHelpText()
+     * @see #setHelpTextKey(String)
+     * @generated
+     */
+    void setHelpText( String value );
+
+    /**
+     * Returns the resource key of the '<em><b>Help Text</b></em>' attribute.
+     * @return the resource key of the '<em>Help Text</em>' attribute.
+     * @see #setHelpTextKey(String)
+     * @see #getHelpText()
+     * @see DataSourceDesign#getResourceFile()
+     * @generated NOT
+     * @since 3.2.3
+     */
+    String getHelpTextKey();
+    
+    /**
+     * Sets the resource key of the '{@link org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes#getHelpText <em>Help Text</em>}' attribute.
+     * @param value the new resource key of the '<em>Help Text</em>' attribute;
+     *              may be null to reset
+     * @see #getHelpTextKey()
+     * @see #setHelpText(String)
+     * @see DataSourceDesign#getResourceFile()
+     * @generated NOT
+     * @since 3.2.3
+     */
+    void setHelpTextKey( String value );
+
+} // OutputElementAttributes
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ParameterDefinition.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ParameterDefinition.java
new file mode 100644
index 0000000..c573dab
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ParameterDefinition.java
@@ -0,0 +1,298 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ParameterDefinition.java,v 1.7 2009/04/14 02:13:18 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Top-level parameter definition; may be input and/or output mode.  Parameter may be of scalar or complex type.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#getInOutMode <em>In Out Mode</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#getAttributes <em>Attributes</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#getInputAttributes <em>Input Attributes</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#getOutputUsageHints <em>Output Usage Hints</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#getFields <em>Fields</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getParameterDefinition()
+ * @model extendedMetaData="name='ParameterDefinition' kind='elementOnly'"
+ * @generated
+ */
+public interface ParameterDefinition extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Indicates whether this parameter is defined to take input value.
+     * @return	true if this parameter is defined to take input value; 
+     * 			false otherwise.
+     * @see #getInOutMode()
+     * @generated NOT
+     */
+    boolean isInput();
+
+    /**
+     * Indicates whether this parameter is defined to have output value.
+     * @return 	true if this parameter is defined to have output value;
+     * 			false otherwise.
+     * @see #getInOutMode()
+     * @generated NOT
+     */
+    boolean isOutput();
+
+    /**
+     * Indicates whether this is a scalar parameter.
+     * @return	true if this parameter has a scalar data type;
+     * 			false if it is a complex parameter with nested fields.
+     * @see #getFields()
+     * @generated NOT
+     */
+    boolean isScalar();
+
+    /**
+     * A convenience method to return this parameter's default input value in String.
+     * @return the value of the parameter InputElementAttributes '<em>Default Scalar Value</em>' attribute;
+     *         returns null if this is not a scalar input parameter.
+     * @see #setDefaultScalarValue(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getInputElementAttributes_DefaultScalarValue()
+     * @since 3.0.3
+     * @generated NOT
+     */
+    String getDefaultScalarValue();
+
+    /**
+     * A convenience method to set this parameter's default input value in String.
+     * The specified value is applied only if this is defined as
+     * a scalar input parameter.
+     * @param value the new value of the parameter InputElementAttributes '<em>Default Scalar Value</em>' attribute.
+     * @see #getDefaultScalarValue()
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getInputElementAttributes_DefaultScalarValue()
+     * @since 3.0.3
+     * @generated NOT
+     */
+    void setDefaultScalarValue( String value );
+
+    /**
+     * A convenience method to return this parameter's collection of default input values.
+     * @return  the collection of default values; may be null or empty
+     * @since 3.2 (DTP 1.7)
+     * @generated NOT
+     */
+    StaticValues getDefaultValues();
+
+    /**
+     * A convenience method to get the number of default values specified for this parameter.
+     * @return  number of default values
+     * @since 3.2 (DTP 1.7)
+     * @generated NOT
+     */
+    int getDefaultValueCount();
+
+    /**
+     * A convenience method to append a default value to this parameter's default value collection.
+     * It is the responsibility of the caller to ensure compatible type of value object
+     * is added to the collection.
+     * @param aValue    the default value to add; may be null
+     * @since 3.2 (DTP 1.7)
+     * @generated NOT
+     */
+    void addDefaultValue( Object aValue );
+
+    /**
+     * Returns the value of the '<em><b>In Out Mode</b></em>' attribute.
+     * The default value is <code>"In"</code>.
+     * The literals are from the enumeration {@link org.eclipse.datatools.connectivity.oda.design.ParameterMode}.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>In Out Mode</em>' attribute.
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterMode
+     * @see #isSetInOutMode()
+     * @see #unsetInOutMode()
+     * @see #setInOutMode(ParameterMode)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getParameterDefinition_InOutMode()
+     * @model default="In" unsettable="true"
+     *        extendedMetaData="kind='element' name='inOutMode' namespace='##targetNamespace'"
+     * @generated
+     */
+    ParameterMode getInOutMode();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#getInOutMode <em>In Out Mode</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>In Out Mode</em>' attribute.
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterMode
+     * @see #isSetInOutMode()
+     * @see #unsetInOutMode()
+     * @see #getInOutMode()
+     * @generated
+     */
+    void setInOutMode( ParameterMode value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#getInOutMode <em>In Out Mode</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetInOutMode()
+     * @see #getInOutMode()
+     * @see #setInOutMode(ParameterMode)
+     * @generated
+     */
+    void unsetInOutMode();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#getInOutMode <em>In Out Mode</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>In Out Mode</em>' attribute is set.
+     * @see #unsetInOutMode()
+     * @see #getInOutMode()
+     * @see #setInOutMode(ParameterMode)
+     * @generated
+     */
+    boolean isSetInOutMode();
+
+    /**
+     * Returns the value of the '<em><b>Attributes</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Attributes applicable to both input and output parameter mode.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Attributes</em>' containment reference.
+     * @see #setAttributes(DataElementAttributes)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getParameterDefinition_Attributes()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='attributes' namespace='##targetNamespace'"
+     * @generated
+     */
+    DataElementAttributes getAttributes();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#getAttributes <em>Attributes</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Attributes</em>' containment reference.
+     * @see #getAttributes()
+     * @generated
+     */
+    void setAttributes( DataElementAttributes value );
+
+    /**
+     * Returns the value of the '<em><b>Input Attributes</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Required for input parameter.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Input Attributes</em>' containment reference.
+     * @see #setInputAttributes(InputParameterAttributes)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getParameterDefinition_InputAttributes()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='inputAttributes' namespace='##targetNamespace'"
+     * @generated
+     */
+    InputParameterAttributes getInputAttributes();
+
+    /**
+     * A short-cut method that returns the value of the 
+     * '<em><b>Element Attributes</b></em>' containment referenced by
+     * the '<em><b>Input Attributes</b></em>' containment reference.  
+     * If no reference is set, a new instance is assigned and returned.
+     * @return the value of the '<em>Element Attributes</em>' containment reference.
+     * @see #getInputAttributes()
+     * @since 3.0.5
+     * @generated NOT
+     */
+    InputElementAttributes getEditableInputElementAttributes();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#getInputAttributes <em>Input Attributes</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Input Attributes</em>' containment reference.
+     * @see #getInputAttributes()
+     * @generated
+     */
+    void setInputAttributes( InputParameterAttributes value );
+
+    /**
+     * Returns the value of the '<em><b>Output Usage Hints</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Optional for an output parameter.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Output Usage Hints</em>' containment reference.
+     * @see #setOutputUsageHints(OutputElementAttributes)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getParameterDefinition_OutputUsageHints()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='outputUsageHints' namespace='##targetNamespace'"
+     * @generated
+     */
+    OutputElementAttributes getOutputUsageHints();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#getOutputUsageHints <em>Output Usage Hints</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Output Usage Hints</em>' containment reference.
+     * @see #getOutputUsageHints()
+     * @generated
+     */
+    void setOutputUsageHints( OutputElementAttributes value );
+
+    /**
+     * Returns the value of the '<em><b>Fields</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Applicable to complex parameter only.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Fields</em>' containment reference.
+     * @see #setFields(ParameterFields)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getParameterDefinition_Fields()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='fields' namespace='##targetNamespace'"
+     * @generated
+     */
+    ParameterFields getFields();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#getFields <em>Fields</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Fields</em>' containment reference.
+     * @see #getFields()
+     * @generated
+     */
+    void setFields( ParameterFields value );
+
+} // ParameterDefinition
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ParameterFieldDefinition.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ParameterFieldDefinition.java
new file mode 100644
index 0000000..cfcf2f3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ParameterFieldDefinition.java
@@ -0,0 +1,144 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ParameterFieldDefinition.java,v 1.2 2006/02/07 05:52:28 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * The definition of each field in a complex parameter.  A parameter field is of scalar type.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ParameterFieldDefinition#getAttributes <em>Attributes</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ParameterFieldDefinition#getInputAttributes <em>Input Attributes</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ParameterFieldDefinition#getOutputUsageHints <em>Output Usage Hints</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getParameterFieldDefinition()
+ * @model extendedMetaData="name='ParameterFieldDefinition' kind='elementOnly'"
+ * @generated
+ */
+public interface ParameterFieldDefinition extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2007 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Indicates whether this parameter field is part of a complex input parameter.
+     * @return	true if this parameter field is part of a complex input parameter; 
+     * 			false otherwise.
+     * @generated NOT
+     */
+    boolean isInput();
+
+    /**
+     * Indicates whether this parameter field is part of a complex output parameter.
+     * @return 	true if this parameter field is part of a complex output parameter;
+     * 			false otherwise.
+     * @generated NOT
+     */
+    boolean isOutput();
+
+    /**
+     * Returns the value of the '<em><b>Attributes</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Attributes applicable to both input and output parameter mode.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Attributes</em>' containment reference.
+     * @see #setAttributes(DataElementAttributes)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getParameterFieldDefinition_Attributes()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='attributes' namespace='##targetNamespace'"
+     * @generated
+     */
+    DataElementAttributes getAttributes();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ParameterFieldDefinition#getAttributes <em>Attributes</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Attributes</em>' containment reference.
+     * @see #getAttributes()
+     * @generated
+     */
+    void setAttributes( DataElementAttributes value );
+
+    /**
+     * Returns the value of the '<em><b>Input Attributes</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Required for the field of an input parameter.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Input Attributes</em>' containment reference.
+     * @see #setInputAttributes(InputElementAttributes)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getParameterFieldDefinition_InputAttributes()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='inputAttributes' namespace='##targetNamespace'"
+     * @generated
+     */
+    InputElementAttributes getInputAttributes();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ParameterFieldDefinition#getInputAttributes <em>Input Attributes</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Input Attributes</em>' containment reference.
+     * @see #getInputAttributes()
+     * @generated
+     */
+    void setInputAttributes( InputElementAttributes value );
+
+    /**
+     * Returns the value of the '<em><b>Output Usage Hints</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Optional for the field of an output parameter.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Output Usage Hints</em>' containment reference.
+     * @see #setOutputUsageHints(OutputElementAttributes)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getParameterFieldDefinition_OutputUsageHints()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='outputUsageHints' namespace='##targetNamespace'"
+     * @generated
+     */
+    OutputElementAttributes getOutputUsageHints();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ParameterFieldDefinition#getOutputUsageHints <em>Output Usage Hints</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Output Usage Hints</em>' containment reference.
+     * @see #getOutputUsageHints()
+     * @generated
+     */
+    void setOutputUsageHints( OutputElementAttributes value );
+
+} // ParameterFieldDefinition
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ParameterFields.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ParameterFields.java
new file mode 100644
index 0000000..6301188
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ParameterFields.java
@@ -0,0 +1,63 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ParameterFields.java,v 1.2 2007/04/11 02:59:53 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Defines all the fields of a complex parameter.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ParameterFields#getFieldCollection <em>Field Collection</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getParameterFields()
+ * @model extendedMetaData="name='ParameterFields' kind='elementOnly'"
+ * @generated
+ */
+public interface ParameterFields extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Field Collection</b></em>' containment reference list.
+     * The list contents are of type {@link org.eclipse.datatools.connectivity.oda.design.ParameterFieldDefinition}.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Field Collection</em>' containment reference list.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getParameterFields_FieldCollection()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='fieldCollection' namespace='##targetNamespace'"
+     * @generated
+     */
+    EList<ParameterFieldDefinition> getFieldCollection();
+
+} // ParameterFields
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ParameterMode.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ParameterMode.java
new file mode 100644
index 0000000..df8594f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ParameterMode.java
@@ -0,0 +1,255 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ParameterMode.java,v 1.2 2007/04/11 02:59:53 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Parameter Mode</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * Indicates whether a parameter is of input and/or output mode.
+ * <!-- end-model-doc -->
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getParameterMode()
+ * @model extendedMetaData="name='ParameterMode'"
+ * @generated
+ */
+public enum ParameterMode implements Enumerator {
+    /**
+     * The '<em><b>In</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #IN
+     * @generated
+     * @ordered
+     */
+    IN_LITERAL(0, "In", "In"), //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * The '<em><b>Out</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #OUT
+     * @generated
+     * @ordered
+     */
+    OUT_LITERAL(1, "Out", "Out"), //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * The '<em><b>In Out</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #IN_OUT
+     * @generated
+     * @ordered
+     */
+    IN_OUT_LITERAL(2, "InOut", "InOut"); //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The '<em><b>In</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #IN_LITERAL
+     * @model name="In"
+     * @generated
+     * @ordered
+     */
+    public static final int IN = 0;
+
+    /**
+     * The '<em><b>Out</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #OUT_LITERAL
+     * @model name="Out"
+     * @generated
+     * @ordered
+     */
+    public static final int OUT = 1;
+
+    /**
+     * The '<em><b>In Out</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #IN_OUT_LITERAL
+     * @model name="InOut"
+     * @generated
+     * @ordered
+     */
+    public static final int IN_OUT = 2;
+
+    /**
+     * An array of all the '<em><b>Parameter Mode</b></em>' enumerators.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private static final ParameterMode[] VALUES_ARRAY = new ParameterMode[]
+    { IN_LITERAL, OUT_LITERAL, IN_OUT_LITERAL, };
+
+    /**
+     * A public read-only list of all the '<em><b>Parameter Mode</b></em>' enumerators.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final List<ParameterMode> VALUES = Collections
+            .unmodifiableList( Arrays.asList( VALUES_ARRAY ) );
+
+    /**
+     * Returns the '<em><b>Parameter Mode</b></em>' literal with the specified literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static ParameterMode get( String literal )
+    {
+        for( int i = 0; i < VALUES_ARRAY.length; ++i)
+        {
+            ParameterMode result = VALUES_ARRAY[i];
+            if( result.toString().equals( literal ) )
+            {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the '<em><b>Parameter Mode</b></em>' literal with the specified name.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static ParameterMode getByName( String name )
+    {
+        for( int i = 0; i < VALUES_ARRAY.length; ++i)
+        {
+            ParameterMode result = VALUES_ARRAY[i];
+            if( result.getName().equals( name ) )
+            {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the '<em><b>Parameter Mode</b></em>' literal with the specified integer value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static ParameterMode get( int value )
+    {
+        switch( value )
+        {
+        case IN:
+            return IN_LITERAL;
+        case OUT:
+            return OUT_LITERAL;
+        case IN_OUT:
+            return IN_OUT_LITERAL;
+        }
+        return null;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final int value;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final String name;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final String literal;
+
+    /**
+     * Only this class can construct instances.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private ParameterMode( int value, String name, String literal )
+    {
+        this.value = value;
+        this.name = name;
+        this.literal = literal;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public int getValue()
+    {
+        return value;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getName()
+    {
+        return name;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getLiteral()
+    {
+        return literal;
+    }
+
+    /**
+     * Returns the literal value of the enumerator, which is its string representation.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        return literal;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/Properties.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/Properties.java
new file mode 100644
index 0000000..167575f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/Properties.java
@@ -0,0 +1,110 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: Properties.java,v 1.7 2007/04/11 02:59:53 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * A collection of properties.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.Properties#getProperties <em>Properties</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getProperties()
+ * @model extendedMetaData="name='Properties' kind='elementOnly'"
+ * @generated
+ */
+public interface Properties extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Finds and returns the Property with the
+     * given property name in the 
+     * '<em><b>Properties</b></em>' containment reference list.
+     * @param propName	property name
+     * @return  the Property found with the given property name, or
+     *          null if no property is found with given name
+     * @generated NOT
+     */
+    Property findProperty( String propName );
+
+    /**
+     * Returns the value of the named Property in the
+     * '<em><b>Properties</b></em>' containment reference list.
+     * @param propName  property name
+     * @return  the value of the given named property; 
+     *          may be null if no property is found with given name
+     * @generated NOT
+     */
+    String getProperty( String propName );
+
+    /**
+     * Sets the value in the Property with given name in the
+     * '<em><b>Properties</b></em>' containment reference list.
+     * Adds a new NameValuePair if none exists with the given 
+     * property name.
+     * @param propName	property name
+     * @param propValue	property value
+     * @generated NOT
+     */
+    void setProperty( String propName, String propValue );
+
+    /**
+     * Removes the Property with given name in the
+     * '<em><b>Properties</b></em>' containment reference list.
+     * @param propName
+     * @generated NOT
+     */
+    void unsetProperty( String propName );
+
+    /**
+     * Indicates whether this collection of properties is empty.
+     * @return  true if this collection has no entries; false otherwise.
+     * @generated NOT
+     */
+    boolean isEmpty();
+
+    /**
+     * Returns the value of the '<em><b>Properties</b></em>' containment reference list.
+     * The list contents are of type {@link org.eclipse.datatools.connectivity.oda.design.Property}.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Properties</em>' containment reference list.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getProperties_Properties()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='properties' namespace='##targetNamespace'"
+     * @generated
+     */
+    EList<Property> getProperties();
+
+} // Properties
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/Property.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/Property.java
new file mode 100644
index 0000000..0adcd7e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/Property.java
@@ -0,0 +1,153 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: Property.java,v 1.6 2006/11/15 08:12:27 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * The property of a data design component.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.Property#getNameValue <em>Name Value</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.Property#getDesignAttributes <em>Design Attributes</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getProperty()
+ * @model extendedMetaData="name='Property' kind='elementOnly'"
+ * @generated
+ */
+public interface Property extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2007 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the name of the '<em><b>Name Value</b></em>' containment reference.
+     * @return  the property name, or null if none is specified
+     * @see #getNameValue()
+     * @generated NOT
+     */
+    String getName();
+
+    /**
+     * Returns the value of the '<em><b>Name Value</b></em>' containment reference.
+     * @return  the property value, or null if none is specified
+     * @see #getNameValue()
+     * @generated NOT
+     */
+    String getValue();
+
+    /**
+     * Returns the value of the '<em><b>Name Value</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Property name and corresponding value if available.  The property value must be a string.  The value may be selected from one of the value choices defined for a property.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Name Value</em>' containment reference.
+     * @see #setNameValue(NameValuePair)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getProperty_NameValue()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='nameValue' namespace='##targetNamespace'"
+     * @generated
+     */
+    NameValuePair getNameValue();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.Property#getNameValue <em>Name Value</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Name Value</em>' containment reference.
+     * @see #getNameValue()
+     * @generated
+     */
+    void setNameValue( NameValuePair value );
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.Property#getNameValue <em>Name Value</em>}' containment reference
+     * with the pair values.
+     * @param name
+     * @param value
+     * @see #setNameValue(NameValuePair)
+     * @generated NOT
+     */
+    void setNameValue( String name, String value );
+
+    /**
+     * Returns the value of the '<em><b>Design Attributes</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Property attributes defined for this *instance* of DataAccessDesign.  This set of attributes overrides all those pre-defined by an ODA extension in its plugin.xml.  An ODA host designer should apply those pre-defined attributes by default to this instance, only if none is specified here.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Design Attributes</em>' containment reference.
+     * @see #setDesignAttributes(PropertyAttributes)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getProperty_DesignAttributes()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='designAttributes' namespace='##targetNamespace'"
+     * @generated
+     */
+    PropertyAttributes getDesignAttributes();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.Property#getDesignAttributes <em>Design Attributes</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Design Attributes</em>' containment reference.
+     * @see #getDesignAttributes()
+     * @generated
+     */
+    void setDesignAttributes( PropertyAttributes value );
+
+    /**
+     * A convenience method to indicate whether this property value 
+     * is editable or read-only in a host designer.  
+     * Applicable only if its container is visible, e.g. for 
+     * public properties and input parameters.
+     * @return  true if property is defined to be editable (default);
+     *          false if the property value should be read only.
+     * @see #getDesignAttributes()
+     * @since 3.0.3
+     * @generated NOT
+     */
+    public boolean isEditable();
+
+    /**
+     * A convenience method to indicate whether the property's
+     * input value should be masked or encrypted in persistent store 
+     * and any UI display.  Applies to default value as well.
+     * @return  true if property value is defined to be masked;
+     *          false otherwise. 
+     *          The default return value is false, if not explicitly defined.
+     * @see #getDesignAttributes()
+     * @since 3.0.3
+     * @generated NOT
+     */
+    public boolean isMaskedValue();
+
+} // Property
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/PropertyAttributes.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/PropertyAttributes.java
new file mode 100644
index 0000000..e7967d2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/PropertyAttributes.java
@@ -0,0 +1,178 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: PropertyAttributes.java,v 1.2 2007/04/11 02:59:53 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * The attributes of a property.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.PropertyAttributes#getDisplayName <em>Display Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.PropertyAttributes#getElementAttributes <em>Element Attributes</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.PropertyAttributes#isDerivedMetaData <em>Derived Meta Data</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getPropertyAttributes()
+ * @model extendedMetaData="name='PropertyAttributes' kind='elementOnly'"
+ * @generated
+ */
+public interface PropertyAttributes extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Display Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Text can be localized with a resource key.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Display Name</em>' attribute.
+     * @see #setDisplayName(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getPropertyAttributes_DisplayName()
+     * @see #getDisplayNameKey()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String"
+     *        extendedMetaData="kind='element' name='displayName' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getDisplayName();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.PropertyAttributes#getDisplayName <em>Display Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Display Name</em>' attribute.
+     * @see #getDisplayName()
+     * @see #setDisplayNameKey(String)
+     * @generated
+     */
+    void setDisplayName( String value );
+
+    /**
+     * Returns the resource key of the '<em><b>Display Name</b></em>' attribute.
+     * @return  the resource key of the '<em>Display Name</em>' attribute; may be null if none is available
+     * @see #setDisplayNameKey(String)
+     * @see #getDisplayName()
+     * @see DataSourceDesign#getResourceFile()
+     * @generated NOT
+     * @since 3.2.3
+     */
+    String getDisplayNameKey();
+    
+    /**
+     * Sets the resource key of the '{@link org.eclipse.datatools.connectivity.oda.design.PropertyAttributes#getDisplayName <em>Display Name</em>}' attribute.
+     * @param value  the new resource key of the '<em>Display Name</em>' attribute;
+     *              may be null to reset
+     * @see #getDisplayNameKey()
+     * @see #setDisplayName(String)
+     * @see DataSourceDesign#getResourceFile()
+     * @generated NOT
+     * @since 3.2.3
+     */
+    void setDisplayNameKey( String value );
+
+    /**
+     * Returns the value of the '<em><b>Element Attributes</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Element Attributes</em>' containment reference.
+     * @see #setElementAttributes(InputElementAttributes)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getPropertyAttributes_ElementAttributes()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='elementAttributes' namespace='##targetNamespace'"
+     * @generated
+     */
+    InputElementAttributes getElementAttributes();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.PropertyAttributes#getElementAttributes <em>Element Attributes</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Element Attributes</em>' containment reference.
+     * @see #getElementAttributes()
+     * @generated
+     */
+    void setElementAttributes( InputElementAttributes value );
+
+    /**
+     * Returns the value of the '<em><b>Derived Meta Data</b></em>' attribute.
+     * The default value is <code>"true"</code>.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * If the property metadata can be derived, i.e. can be obtained by an ODA driver in each design session, an ODA host designer is not required to include the derived metadata in the next design session request.  An ODA designer may ignore such metadata in a Request.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Derived Meta Data</em>' attribute.
+     * @see #isSetDerivedMetaData()
+     * @see #unsetDerivedMetaData()
+     * @see #setDerivedMetaData(boolean)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getPropertyAttributes_DerivedMetaData()
+     * @model default="true" unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Boolean"
+     *        extendedMetaData="kind='element' name='derivedMetaData' namespace='##targetNamespace'"
+     * @generated
+     */
+    boolean isDerivedMetaData();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.PropertyAttributes#isDerivedMetaData <em>Derived Meta Data</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Derived Meta Data</em>' attribute.
+     * @see #isSetDerivedMetaData()
+     * @see #unsetDerivedMetaData()
+     * @see #isDerivedMetaData()
+     * @generated
+     */
+    void setDerivedMetaData( boolean value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.PropertyAttributes#isDerivedMetaData <em>Derived Meta Data</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetDerivedMetaData()
+     * @see #isDerivedMetaData()
+     * @see #setDerivedMetaData(boolean)
+     * @generated
+     */
+    void unsetDerivedMetaData();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.PropertyAttributes#isDerivedMetaData <em>Derived Meta Data</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Derived Meta Data</em>' attribute is set.
+     * @see #unsetDerivedMetaData()
+     * @see #isDerivedMetaData()
+     * @see #setDerivedMetaData(boolean)
+     * @generated
+     */
+    boolean isSetDerivedMetaData();
+
+} // PropertyAttributes
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ResourceIdentifiers.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ResourceIdentifiers.java
new file mode 100644
index 0000000..e917837
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ResourceIdentifiers.java
@@ -0,0 +1,141 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2008, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ResourceIdentifiers.java,v 1.1 2008/07/23 04:12:27 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import java.net.URI;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Resource Identifiers</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Resource identifiers of an ODA host application or custom ODA designer.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers#getApplResourceBaseURIString <em>Appl Resource Base URI String</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers#getDesignResourceBaseURIString <em>Design Resource Base URI String</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getResourceIdentifiers()
+ * @model extendedMetaData="name='ResourceIdentifiers' kind='elementOnly'"
+ * @generated
+ * @since DTP 1.7
+ */
+public interface ResourceIdentifiers extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2008, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Appl Resource Base URI String</b></em>' attribute in URI form.
+     * @return  the base URI of general purpose resources of an ODA consumer application; may be null
+     * @see #getApplResourceBaseURIString()
+     * @generated NOT
+     */
+    URI getApplResourceBaseURI();
+
+    /**
+     * Sets the value of the '<em><b>Appl Resource Base URI String</b></em>' attribute in URI form.
+     * @param baseURI the base URI of general purpose resources of an ODA consumer application
+     * @see #setApplResourceBaseURIString()
+     * @generated NOT
+     */
+    void setApplResourceBaseURI( URI baseURI );
+
+    /**
+     * Returns the value of the '<em><b>Appl Resource Base URI String</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The base URI of general purpose resources of an ODA consumer application in string form.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Appl Resource Base URI String</em>' attribute.
+     * @see #getApplResourceBaseURI()
+     * @see #setApplResourceBaseURIString(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getResourceIdentifiers_ApplResourceBaseURIString()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String"
+     *        extendedMetaData="kind='element' name='applResourceBaseURIString' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getApplResourceBaseURIString();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers#getApplResourceBaseURIString <em>Appl Resource Base URI String</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Appl Resource Base URI String</em>' attribute.
+     * @see #setApplResourceBaseURI(URI)
+     * @see #getApplResourceBaseURIString()
+     * @generated
+     */
+    void setApplResourceBaseURIString( String value );
+
+    /**
+     * Returns the value of the '<em><b>Design Resource Base URI String</b></em>' attribute in URI form.
+     * @return the base URI of design resources of an ODA consumer application; may be null
+     * @see #getApplResourceBaseURIString()
+     * @generated NOT
+     */
+    URI getDesignResourceBaseURI();
+
+    /**
+     * Sets the value of the '<em><b>Design Resource Base URI String</b></em>' attribute in URI form.
+     * @param baseURI the base URI of design resources of an ODA consumer application
+     * @see #setDesignResourceBaseURIString()
+     * @generated NOT
+     */
+    void setDesignResourceBaseURI( URI baseURI );
+
+    /**
+     * Returns the value of the '<em><b>Design Resource Base URI String</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The base URI of design resources of an ODA consumer application in string form.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Design Resource Base URI String</em>' attribute.
+     * @see #getDesignResourceBaseURI()
+     * @see #setDesignResourceBaseURIString(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getResourceIdentifiers_DesignResourceBaseURIString()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String"
+     *        extendedMetaData="kind='element' name='designResourceBaseURIString' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getDesignResourceBaseURIString();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers#getDesignResourceBaseURIString <em>Design Resource Base URI String</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Design Resource Base URI String</em>' attribute.
+     * @see #setDesignResourceBaseURI(URI)
+     * @see #getDesignResourceBaseURIString()
+     * @generated
+     */
+    void setDesignResourceBaseURIString( String value );
+
+} // ResourceIdentifiers
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ResultSetColumns.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ResultSetColumns.java
new file mode 100644
index 0000000..f6a82d0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ResultSetColumns.java
@@ -0,0 +1,63 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ResultSetColumns.java,v 1.2 2007/04/11 02:59:53 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * A collection of result set columns' definitions.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ResultSetColumns#getResultColumnDefinitions <em>Result Column Definitions</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getResultSetColumns()
+ * @model extendedMetaData="name='ResultSetColumns' kind='elementOnly'"
+ * @generated
+ */
+public interface ResultSetColumns extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Result Column Definitions</b></em>' containment reference list.
+     * The list contents are of type {@link org.eclipse.datatools.connectivity.oda.design.ColumnDefinition}.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Result Column Definitions</em>' containment reference list.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getResultSetColumns_ResultColumnDefinitions()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='resultColumnDefinitions' namespace='##targetNamespace'"
+     * @generated
+     */
+    EList<ColumnDefinition> getResultColumnDefinitions();
+
+} // ResultSetColumns
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ResultSetCriteria.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ResultSetCriteria.java
new file mode 100644
index 0000000..76c9919
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ResultSetCriteria.java
@@ -0,0 +1,112 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ResultSetCriteria.java,v 1.2 2009/07/23 21:43:17 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Result Set Criteria</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Specification of a result set criteria or characteristics.
+ * Applying the criteria may impact the data retrieved in a result set, in addition to any specification expressed in a query text.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ResultSetCriteria#getFilterSpecification <em>Filter Specification</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ResultSetCriteria#getRowOrdering <em>Row Ordering</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getResultSetCriteria()
+ * @since 3.3 (DTP 1.8)
+ * @model extendedMetaData="name='ResultSetCriteria' kind='elementOnly'"
+ * @generated
+ */
+public interface ResultSetCriteria extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Filter Specification</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Pre-defined filter specification  of a result set. It may be any concrete type of FilterExpression.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Filter Specification</em>' containment reference.
+     * @see #setFilterSpecification(FilterExpression)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getResultSetCriteria_FilterSpecification()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='filterSpecification' namespace='##targetNamespace'"
+     * @generated
+     */
+    FilterExpression getFilterSpecification();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ResultSetCriteria#getFilterSpecification <em>Filter Specification</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Filter Specification</em>' containment reference.
+     * @see #getFilterSpecification()
+     * @generated
+     */
+    void setFilterSpecification( FilterExpression value );
+
+    /**
+     * Returns the value of the '<em><b>Row Ordering</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Specifies the ordering of rows in a result set.  An empty collection explicitly indicates that the result set has no sort keys defined.  
+     * Absence of this optional element, on the other hand, indicates that its row ordering specification is unknown or not available. 
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Row Ordering</em>' containment reference.
+     * @see #setRowOrdering(SortSpecification)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getResultSetCriteria_RowOrdering()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='rowOrdering' namespace='##targetNamespace'"
+     * @generated
+     */
+    SortSpecification getRowOrdering();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ResultSetCriteria#getRowOrdering <em>Row Ordering</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Row Ordering</em>' containment reference.
+     * @see #getRowOrdering()
+     * @generated
+     */
+    void setRowOrdering( SortSpecification value );
+
+    /**
+     * Adds the specified {@link SortKey} to the specification of ordering the result set rows.
+     * @param sortKey
+     * @generated NOT
+     */
+    void addRowSortKey( SortKey sortKey );
+
+} // ResultSetCriteria
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ResultSetDefinition.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ResultSetDefinition.java
new file mode 100644
index 0000000..e4fcae8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ResultSetDefinition.java
@@ -0,0 +1,131 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ResultSetDefinition.java,v 1.3 2009/03/13 05:19:46 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Definition of a single homogeneous result set returned by a data set query.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ResultSetDefinition#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ResultSetDefinition#getResultSetColumns <em>Result Set Columns</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ResultSetDefinition#getCriteria <em>Criteria</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getResultSetDefinition()
+ * @model extendedMetaData="name='ResultSetDefinition' kind='elementOnly'"
+ * @generated
+ */
+public interface ResultSetDefinition extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * A name that uniquely identifies a result set at runtime.  If not specified, a result set is identified by its sequence in the resultSetDefinitions.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Name</em>' attribute.
+     * @see #setName(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getResultSetDefinition_Name()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String"
+     *        extendedMetaData="kind='element' name='name' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getName();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ResultSetDefinition#getName <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Name</em>' attribute.
+     * @see #getName()
+     * @generated
+     */
+    void setName( String value );
+
+    /**
+     * Returns the value of the '<em><b>Result Set Columns</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Collection of data columns for this result set.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Result Set Columns</em>' containment reference.
+     * @see #setResultSetColumns(ResultSetColumns)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getResultSetDefinition_ResultSetColumns()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='resultSetColumns' namespace='##targetNamespace'"
+     * @generated
+     */
+    ResultSetColumns getResultSetColumns();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ResultSetDefinition#getResultSetColumns <em>Result Set Columns</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Result Set Columns</em>' containment reference.
+     * @see #getResultSetColumns()
+     * @generated
+     */
+    void setResultSetColumns( ResultSetColumns value );
+
+    /**
+     * Returns the value of the '<em><b>Criteria</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Criteria</em>' containment reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Criteria</em>' containment reference.
+     * @see #setCriteria(ResultSetCriteria)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getResultSetDefinition_Criteria()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='criteria' namespace='##targetNamespace'"
+     * @generated
+     * @since 3.3 (DTP 1.8)
+     */
+    ResultSetCriteria getCriteria();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ResultSetDefinition#getCriteria <em>Criteria</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Criteria</em>' containment reference.
+     * @see #getCriteria()
+     * @generated
+     * @since 3.3 (DTP 1.8)
+     */
+    void setCriteria( ResultSetCriteria value );
+
+} // ResultSetDefinition
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ResultSets.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ResultSets.java
new file mode 100644
index 0000000..2a4b5b4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ResultSets.java
@@ -0,0 +1,152 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ResultSets.java,v 1.3 2007/04/11 02:59:53 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * A collection of result sets' definition and metadata. If the metadata can be derived, i.e. can be obtained by an ODA driver in each design session, an ODA host designer is not required to include the derived metadata in the next design session request.  An ODA designer may ignore such metadata in a Request.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ResultSets#getResultSetDefinitions <em>Result Set Definitions</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ResultSets#isDerivedMetaData <em>Derived Meta Data</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getResultSets()
+ * @model extendedMetaData="name='ResultSets' kind='elementOnly'"
+ * @generated
+ */
+public interface ResultSets extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Finds and returns a named result set definition that
+     * matches the specified name.
+     * This only matches against those result sets that 
+     * have a name defined.  
+     * A result set name is case-sensitive.
+     * @param resultSetName
+     * @return  the matching result set definition; or null
+     *          if no match is found
+     * @generated NOT
+     */
+    ResultSetDefinition findResultSetDefinition( String resultSetName );
+
+    /**
+     * Inserts the specified result set definition 
+     * at the specified position in 
+     * the '<em><b>Result Set Definitions</b></em>' containment reference list.
+     * Shifts the element currently at that position 
+     * (if any) and any subsequent elements to the right 
+     * (adds one to their indices). 
+     * @param index the 0-based index at which the specified element is to be inserted
+     * @param resultSetDefn result set definition to be inserted
+     * @generated NOT
+     */
+    void addResultSetDefinition( int index, ResultSetDefinition resultSetDefn );
+
+    /**
+     * Appends the specified result set definition to the end
+     * of the '<em><b>Result Set Definitions</b></em>' containment reference list.
+     * @param resultSetDefn result set definition to be inserted
+     * @generated NOT
+     */
+    void addResultSetDefinition( ResultSetDefinition resultSetDefn );
+
+    /**
+     * Returns the value of the '<em><b>Result Set Definitions</b></em>' containment reference list.
+     * The list contents are of type {@link org.eclipse.datatools.connectivity.oda.design.ResultSetDefinition}.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Result Set Definitions</em>' containment reference list.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getResultSets_ResultSetDefinitions()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='resultSetDefinitions' namespace='##targetNamespace'"
+     * @generated
+     */
+    EList<ResultSetDefinition> getResultSetDefinitions();
+
+    /**
+     * Returns the value of the '<em><b>Derived Meta Data</b></em>' attribute.
+     * The default value is <code>"true"</code>.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * If the metadata can be derived, i.e. can be obtained by an ODA driver in each design session, an ODA host designer is not required to include the derived metadata in the next design session request.  An ODA designer may ignore such metadata in a Request.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Derived Meta Data</em>' attribute.
+     * @see #isSetDerivedMetaData()
+     * @see #unsetDerivedMetaData()
+     * @see #setDerivedMetaData(boolean)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getResultSets_DerivedMetaData()
+     * @model default="true" unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Boolean"
+     *        extendedMetaData="kind='attribute' name='derivedMetaData'"
+     * @generated
+     */
+    boolean isDerivedMetaData();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ResultSets#isDerivedMetaData <em>Derived Meta Data</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Derived Meta Data</em>' attribute.
+     * @see #isSetDerivedMetaData()
+     * @see #unsetDerivedMetaData()
+     * @see #isDerivedMetaData()
+     * @generated
+     */
+    void setDerivedMetaData( boolean value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ResultSets#isDerivedMetaData <em>Derived Meta Data</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetDerivedMetaData()
+     * @see #isDerivedMetaData()
+     * @see #setDerivedMetaData(boolean)
+     * @generated
+     */
+    void unsetDerivedMetaData();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ResultSets#isDerivedMetaData <em>Derived Meta Data</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Derived Meta Data</em>' attribute is set.
+     * @see #unsetDerivedMetaData()
+     * @see #isDerivedMetaData()
+     * @see #setDerivedMetaData(boolean)
+     * @generated
+     */
+    boolean isSetDerivedMetaData();
+
+} // ResultSets
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ResultSubset.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ResultSubset.java
new file mode 100644
index 0000000..71d9ea2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ResultSubset.java
@@ -0,0 +1,156 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ResultSubset.java,v 1.1 2010/10/15 05:41:37 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Result Subset</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Defines a subset of columns in a data set design's result set.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ResultSubset#getDataSetDesign <em>Data Set Design</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ResultSubset#getResultSetName <em>Result Set Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ResultSubset#getColumnIdentifiers <em>Column Identifiers</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getResultSubset()
+ * @model extendedMetaData="name='ResultSubset' kind='elementOnly'"
+ * @generated
+ * @since 3.3.2
+ */
+public interface ResultSubset extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Data Set Design</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * A nested instance of dataSetDesign to use for retrieving the referenced data set column.  If not specified, the same data set design that contains this design element would apply by default.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Data Set Design</em>' containment reference.
+     * @see #setDataSetDesign(DataSetDesign)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getResultSubset_DataSetDesign()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='dataSetDesign' namespace='##targetNamespace'"
+     * @generated
+     */
+    DataSetDesign getDataSetDesign();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ResultSubset#getDataSetDesign <em>Data Set Design</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Data Set Design</em>' containment reference.
+     * @see #getDataSetDesign()
+     * @generated
+     */
+    void setDataSetDesign( DataSetDesign value );
+
+    /**
+     * Returns the value of the '<em><b>Result Set Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Identifies the result set of the data set design if more than one result sets are available, and can be identified by name.  If no results set is explicitly specified here, the primary result set would apply by default.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Result Set Name</em>' attribute.
+     * @see #setResultSetName(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getResultSubset_ResultSetName()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String"
+     *        extendedMetaData="kind='element' name='resultSetName' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getResultSetName();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ResultSubset#getResultSetName <em>Result Set Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Result Set Name</em>' attribute.
+     * @see #getResultSetName()
+     * @generated
+     */
+    void setResultSetName( String value );
+
+    /**
+     * Returns the value of the '<em><b>Column Identifiers</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Uniquely identifies one or more columns in the specified result set.  Multiple columns are combined in the specified sequence, such as for a compounded attribute.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Column Identifiers</em>' containment reference.
+     * @see #setColumnIdentifiers(DataElementIdentifiers)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getResultSubset_ColumnIdentifiers()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='columnIdentifiers' namespace='##targetNamespace'"
+     * @generated
+     */
+    DataElementIdentifiers getColumnIdentifiers();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ResultSubset#getColumnIdentifiers <em>Column Identifiers</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Column Identifiers</em>' containment reference.
+     * @see #getColumnIdentifiers()
+     * @generated
+     */
+    void setColumnIdentifiers( DataElementIdentifiers value );
+
+    /**
+     * Appends the specified column, identified by name only, to the end
+     * of the '<em><b>Column Identifiers</b></em>' containment reference list.
+     * @param columnName the name of column identifier to be appended
+     * @generated NOT
+     */
+    void addColumnIdentifier( String columnName );
+
+    /**
+     * Appends the specified column, identified by name and position, to the end
+     * of the '<em><b>Column Identifiers</b></em>' containment reference list.
+     * @param columnName the name of column identifier to be appended;
+     *          the name may be empty if the column can only be identified by position
+     * @param columnPosition the 1-based position of the column within a result set
+     * @generated NOT
+     */
+    void addColumnIdentifier( String columnName, int columnPosition );
+
+    /**
+     * Appends the specified column identifier to the end
+     * of the '<em><b>Column Identifiers</b></em>' containment reference list.
+     * @param columnIdentifier the column identifier to be appended
+     * @generated NOT
+     */
+    void addColumnIdentifier( DataElementIdentifier columnIdentifier );
+
+} // ResultSubset
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ScalarValueChoices.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ScalarValueChoices.java
new file mode 100644
index 0000000..ef59a8f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ScalarValueChoices.java
@@ -0,0 +1,63 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ScalarValueChoices.java,v 1.2 2007/04/11 02:59:53 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * A collection of scalar values defined for user selection.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ScalarValueChoices#getScalarValues <em>Scalar Values</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getScalarValueChoices()
+ * @model extendedMetaData="name='ScalarValueChoices' kind='elementOnly'"
+ * @generated
+ */
+public interface ScalarValueChoices extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Scalar Values</b></em>' containment reference list.
+     * The list contents are of type {@link org.eclipse.datatools.connectivity.oda.design.ScalarValueDefinition}.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Scalar Values</em>' containment reference list.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getScalarValueChoices_ScalarValues()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='scalarValues' namespace='##targetNamespace'"
+     * @generated
+     */
+    EList<ScalarValueDefinition> getScalarValues();
+
+} // ScalarValueChoices
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ScalarValueDefinition.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ScalarValueDefinition.java
new file mode 100644
index 0000000..10e073e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ScalarValueDefinition.java
@@ -0,0 +1,123 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ScalarValueDefinition.java,v 1.2 2007/04/11 02:59:53 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Defines a scalar value with a brief description.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ScalarValueDefinition#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ScalarValueDefinition#getDisplayName <em>Display Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getScalarValueDefinition()
+ * @model extendedMetaData="name='ScalarValueDefinition' kind='elementOnly'"
+ * @generated
+ */
+public interface ScalarValueDefinition extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Value</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Value</em>' attribute.
+     * @see #setValue(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getScalarValueDefinition_Value()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
+     *        extendedMetaData="kind='element' name='value' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getValue();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ScalarValueDefinition#getValue <em>Value</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Value</em>' attribute.
+     * @see #getValue()
+     * @generated
+     */
+    void setValue( String value );
+
+    /**
+     * Returns the value of the '<em><b>Display Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * A localized name that describes the value.  Text can be localized with a resource key.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Display Name</em>' attribute.
+     * @see #setDisplayName(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getScalarValueDefinition_DisplayName()
+     * @see #getDisplayNameKey()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String"
+     *        extendedMetaData="kind='element' name='displayName' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getDisplayName();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ScalarValueDefinition#getDisplayName <em>Display Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Display Name</em>' attribute.
+     * @see #getDisplayName()
+     * @see #setDisplayNameKey(String)
+     * @generated
+     */
+    void setDisplayName( String value );
+    
+    /**
+     * Returns the resource key of the '<em><b>Display Name</b></em>' attribute.
+     * @return  the resource key of the '<em>Display Name</em>' attribute; may be null if none is available
+     * @see #setDisplayNameKey(String)
+     * @see #getDisplayName()
+     * @see DataSourceDesign#getResourceFile()
+     * @generated NOT
+     * @since 3.2.3
+     */
+    String getDisplayNameKey();
+    
+    /**
+     * Sets the resource key of the '{@link org.eclipse.datatools.connectivity.oda.design.ScalarValueDefinition#getDisplayName <em>Display Name</em>}' attribute.
+     * @param value  the new resource key of the '<em>Display Name</em>' attribute;
+     *              may be null to reset
+     * @see #getDisplayNameKey()
+     * @see #setDisplayName(String)
+     * @see DataSourceDesign#getResourceFile()
+     * @generated NOT
+     * @since 3.2.3
+     */
+    void setDisplayNameKey( String value );
+
+} // ScalarValueDefinition
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/SessionStatus.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/SessionStatus.java
new file mode 100644
index 0000000..4697cc8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/SessionStatus.java
@@ -0,0 +1,277 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: SessionStatus.java,v 1.2 2007/04/11 02:59:53 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Session Status</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * Indicates to ODA host designer on how to proceed after an ODA design session exits.
+ * <!-- end-model-doc -->
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getSessionStatus()
+ * @model extendedMetaData="name='SessionStatus'"
+ * @generated
+ */
+public enum SessionStatus implements Enumerator {
+    /**
+     * The '<em><b>Ok</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #OK
+     * @generated
+     * @ordered
+     */
+    OK_LITERAL(0, "Ok", "Ok"), //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * The '<em><b>User Cancelled</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #USER_CANCELLED
+     * @generated
+     * @ordered
+     */
+    USER_CANCELLED_LITERAL(1, "UserCancelled", "UserCancelled"), //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * The '<em><b>Login Failed</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #LOGIN_FAILED
+     * @generated
+     * @ordered
+     */
+    LOGIN_FAILED_LITERAL(2, "LoginFailed", "LoginFailed"), //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * The '<em><b>Error</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #ERROR
+     * @generated
+     * @ordered
+     */
+    ERROR_LITERAL(3, "Error", "Error"); //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The '<em><b>Ok</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #OK_LITERAL
+     * @model name="Ok"
+     * @generated
+     * @ordered
+     */
+    public static final int OK = 0;
+
+    /**
+     * The '<em><b>User Cancelled</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #USER_CANCELLED_LITERAL
+     * @model name="UserCancelled"
+     * @generated
+     * @ordered
+     */
+    public static final int USER_CANCELLED = 1;
+
+    /**
+     * The '<em><b>Login Failed</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #LOGIN_FAILED_LITERAL
+     * @model name="LoginFailed"
+     * @generated
+     * @ordered
+     */
+    public static final int LOGIN_FAILED = 2;
+
+    /**
+     * The '<em><b>Error</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #ERROR_LITERAL
+     * @model name="Error"
+     * @generated
+     * @ordered
+     */
+    public static final int ERROR = 3;
+
+    /**
+     * An array of all the '<em><b>Session Status</b></em>' enumerators.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private static final SessionStatus[] VALUES_ARRAY = new SessionStatus[]
+    { OK_LITERAL, USER_CANCELLED_LITERAL, LOGIN_FAILED_LITERAL, ERROR_LITERAL, };
+
+    /**
+     * A public read-only list of all the '<em><b>Session Status</b></em>' enumerators.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final List<SessionStatus> VALUES = Collections
+            .unmodifiableList( Arrays.asList( VALUES_ARRAY ) );
+
+    /**
+     * Returns the '<em><b>Session Status</b></em>' literal with the specified literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static SessionStatus get( String literal )
+    {
+        for( int i = 0; i < VALUES_ARRAY.length; ++i)
+        {
+            SessionStatus result = VALUES_ARRAY[i];
+            if( result.toString().equals( literal ) )
+            {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the '<em><b>Session Status</b></em>' literal with the specified name.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static SessionStatus getByName( String name )
+    {
+        for( int i = 0; i < VALUES_ARRAY.length; ++i)
+        {
+            SessionStatus result = VALUES_ARRAY[i];
+            if( result.getName().equals( name ) )
+            {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the '<em><b>Session Status</b></em>' literal with the specified integer value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static SessionStatus get( int value )
+    {
+        switch( value )
+        {
+        case OK:
+            return OK_LITERAL;
+        case USER_CANCELLED:
+            return USER_CANCELLED_LITERAL;
+        case LOGIN_FAILED:
+            return LOGIN_FAILED_LITERAL;
+        case ERROR:
+            return ERROR_LITERAL;
+        }
+        return null;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final int value;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final String name;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final String literal;
+
+    /**
+     * Only this class can construct instances.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private SessionStatus( int value, String name, String literal )
+    {
+        this.value = value;
+        this.name = name;
+        this.literal = literal;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public int getValue()
+    {
+        return value;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getName()
+    {
+        return name;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getLiteral()
+    {
+        return literal;
+    }
+
+    /**
+     * Returns the literal value of the enumerator, which is its string representation.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        return literal;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/SortDirectionType.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/SortDirectionType.java
new file mode 100644
index 0000000..7042b2e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/SortDirectionType.java
@@ -0,0 +1,245 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: SortDirectionType.java,v 1.1 2009/03/13 05:19:46 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Sort Direction Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * The type of sort direction defined in a sort key.
+ * <!-- end-model-doc -->
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getSortDirectionType()
+ * @since 3.3 (DTP 1.8)
+ * @model extendedMetaData="name='SortDirectionType'"
+ * @generated
+ */
+public enum SortDirectionType implements Enumerator {
+    /**
+     * The '<em><b>Ascending</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #ASCENDING_VALUE
+     * @generated
+     * @ordered
+     */
+    ASCENDING(0, "Ascending", "Ascending"), //$NON-NLS-1$ //$NON-NLS-2$
+
+    /**
+     * The '<em><b>Descending</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #DESCENDING_VALUE
+     * @generated
+     * @ordered
+     */
+    DESCENDING(1, "Descending", "Descending"); //$NON-NLS-1$ //$NON-NLS-2$
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The '<em><b>Ascending</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of '<em><b>Ascending</b></em>' literal object isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @see #ASCENDING
+     * @model name="Ascending"
+     * @generated
+     * @ordered
+     */
+    public static final int ASCENDING_VALUE = 0;
+
+    /**
+     * The '<em><b>Descending</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of '<em><b>Descending</b></em>' literal object isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @see #DESCENDING
+     * @model name="Descending"
+     * @generated
+     * @ordered
+     */
+    public static final int DESCENDING_VALUE = 1;
+
+    /**
+     * An array of all the '<em><b>Sort Direction Type</b></em>' enumerators.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private static final SortDirectionType[] VALUES_ARRAY = new SortDirectionType[]
+    { ASCENDING, DESCENDING, };
+
+    /**
+     * A public read-only list of all the '<em><b>Sort Direction Type</b></em>' enumerators.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final List<SortDirectionType> VALUES = Collections
+            .unmodifiableList( Arrays.asList( VALUES_ARRAY ) );
+
+    /**
+     * Returns the '<em><b>Sort Direction Type</b></em>' literal with the specified literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static SortDirectionType get( String literal )
+    {
+        for( int i = 0; i < VALUES_ARRAY.length; ++i)
+        {
+            SortDirectionType result = VALUES_ARRAY[i];
+            if( result.toString().equals( literal ) )
+            {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the '<em><b>Sort Direction Type</b></em>' literal with the specified name.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static SortDirectionType getByName( String name )
+    {
+        for( int i = 0; i < VALUES_ARRAY.length; ++i)
+        {
+            SortDirectionType result = VALUES_ARRAY[i];
+            if( result.getName().equals( name ) )
+            {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the '<em><b>Sort Direction Type</b></em>' literal with the specified integer value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static SortDirectionType get( int value )
+    {
+        switch( value )
+        {
+        case ASCENDING_VALUE:
+            return ASCENDING;
+        case DESCENDING_VALUE:
+            return DESCENDING;
+        }
+        return null;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final int value;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final String name;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final String literal;
+
+    /**
+     * Only this class can construct instances.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private SortDirectionType( int value, String name, String literal )
+    {
+        this.value = value;
+        this.name = name;
+        this.literal = literal;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public int getValue()
+    {
+        return value;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getName()
+    {
+        return name;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getLiteral()
+    {
+        return literal;
+    }
+
+    /**
+     * Returns the literal value of the enumerator, which is its string representation.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        return literal;
+    }
+
+} //SortDirectionType
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/SortKey.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/SortKey.java
new file mode 100644
index 0000000..8f742e0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/SortKey.java
@@ -0,0 +1,329 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: SortKey.java,v 1.4 2010/03/17 00:34:13 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Sort Key</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * A dynamic sort key specified in a SortCriteria.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.SortKey#getColumnIdentifier <em>Column Identifier</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.SortKey#getColumnName <em>Column Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.SortKey#getColumnPosition <em>Column Position</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.SortKey#getSortDirection <em>Sort Direction</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.SortKey#getNullValueOrdering <em>Null Value Ordering</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.SortKey#isOptional <em>Optional</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getSortKey()
+ * @since 3.3 (DTP 1.8)
+ * @model extendedMetaData="name='SortKey' kind='elementOnly'"
+ * @generated
+ */
+public interface SortKey extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2009, 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Column Identifier</b></em>' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Uniquely identifies a result set column by name and/or position.  It must reference one of the columns associated with the same ResultSetDefinition.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Column Identifier</em>' containment reference.
+     * @see #setColumnIdentifier(DataElementIdentifier)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getSortKey_ColumnIdentifier()
+     * @model containment="true" required="true"
+     *        extendedMetaData="kind='element' name='columnIdentifier' namespace='##targetNamespace'"
+     * @generated
+     * @since 3.3.2
+     */
+    DataElementIdentifier getColumnIdentifier();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.SortKey#getColumnIdentifier <em>Column Identifier</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Column Identifier</em>' containment reference.
+     * @see #getColumnIdentifier()
+     * @generated
+     * @since 3.3.2
+     */
+    void setColumnIdentifier( DataElementIdentifier value );
+
+    /**
+     * Returns the value of the '<em><b>Column Name</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The unique name of a result set column. It must reference one of the columns associated with the same ResultSetDefinition.  If a column can only be identified by position, this name may be empty.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Column Name</em>' attribute.
+     * @see #setColumnName(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getSortKey_ColumnName()
+     * @model dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
+     *        extendedMetaData="kind='element' name='columnName' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getColumnName();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.SortKey#getColumnName <em>Column Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Column Name</em>' attribute.
+     * @see #getColumnName()
+     * @generated
+     */
+    void setColumnName( String value );
+
+    /**
+     * Returns the value of the '<em><b>Column Position</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The 1-based index position (left-to-right order) of a result set column. 
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Column Position</em>' attribute.
+     * @see #isSetColumnPosition()
+     * @see #unsetColumnPosition()
+     * @see #setColumnPosition(int)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getSortKey_ColumnPosition()
+     * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.UnsignedShort"
+     *        extendedMetaData="kind='element' name='columnPosition' namespace='##targetNamespace'"
+     * @generated
+     */
+    int getColumnPosition();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.SortKey#getColumnPosition <em>Column Position</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Column Position</em>' attribute.
+     * @see #isSetColumnPosition()
+     * @see #unsetColumnPosition()
+     * @see #getColumnPosition()
+     * @generated
+     */
+    void setColumnPosition( int value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.SortKey#getColumnPosition <em>Column Position</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetColumnPosition()
+     * @see #getColumnPosition()
+     * @see #setColumnPosition(int)
+     * @generated
+     */
+    void unsetColumnPosition();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.SortKey#getColumnPosition <em>Column Position</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Column Position</em>' attribute is set.
+     * @see #unsetColumnPosition()
+     * @see #getColumnPosition()
+     * @see #setColumnPosition(int)
+     * @generated
+     */
+    boolean isSetColumnPosition();
+
+    /**
+     * Returns the value of the '<em><b>Sort Direction</b></em>' attribute.
+     * The default value is <code>"Ascending"</code>.
+     * The literals are from the enumeration {@link org.eclipse.datatools.connectivity.oda.design.SortDirectionType}.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The sort direction of this result set column.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Sort Direction</em>' attribute.
+     * @see org.eclipse.datatools.connectivity.oda.design.SortDirectionType
+     * @see #isSetSortDirection()
+     * @see #unsetSortDirection()
+     * @see #setSortDirection(SortDirectionType)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getSortKey_SortDirection()
+     * @model default="Ascending" unsettable="true"
+     *        extendedMetaData="kind='element' name='sortDirection' namespace='##targetNamespace'"
+     * @generated
+     */
+    SortDirectionType getSortDirection();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.SortKey#getSortDirection <em>Sort Direction</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Sort Direction</em>' attribute.
+     * @see org.eclipse.datatools.connectivity.oda.design.SortDirectionType
+     * @see #isSetSortDirection()
+     * @see #unsetSortDirection()
+     * @see #getSortDirection()
+     * @generated
+     */
+    void setSortDirection( SortDirectionType value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.SortKey#getSortDirection <em>Sort Direction</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetSortDirection()
+     * @see #getSortDirection()
+     * @see #setSortDirection(SortDirectionType)
+     * @generated
+     */
+    void unsetSortDirection();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.SortKey#getSortDirection <em>Sort Direction</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Sort Direction</em>' attribute is set.
+     * @see #unsetSortDirection()
+     * @see #getSortDirection()
+     * @see #setSortDirection(SortDirectionType)
+     * @generated
+     */
+    boolean isSetSortDirection();
+
+    /**
+     * Returns the value of the '<em><b>Null Value Ordering</b></em>' attribute.
+     * The literals are from the enumeration {@link org.eclipse.datatools.connectivity.oda.design.NullOrderingType}.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The ordering of null vs. non-null values in the sort order.  Default value is "Unknown", i.e. not specified.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Null Value Ordering</em>' attribute.
+     * @see org.eclipse.datatools.connectivity.oda.design.NullOrderingType
+     * @see #isSetNullValueOrdering()
+     * @see #unsetNullValueOrdering()
+     * @see #setNullValueOrdering(NullOrderingType)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getSortKey_NullValueOrdering()
+     * @model unsettable="true"
+     *        extendedMetaData="kind='element' name='nullValueOrdering' namespace='##targetNamespace'"
+     * @generated
+     */
+    NullOrderingType getNullValueOrdering();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.SortKey#getNullValueOrdering <em>Null Value Ordering</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Null Value Ordering</em>' attribute.
+     * @see org.eclipse.datatools.connectivity.oda.design.NullOrderingType
+     * @see #isSetNullValueOrdering()
+     * @see #unsetNullValueOrdering()
+     * @see #getNullValueOrdering()
+     * @generated
+     */
+    void setNullValueOrdering( NullOrderingType value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.SortKey#getNullValueOrdering <em>Null Value Ordering</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetNullValueOrdering()
+     * @see #getNullValueOrdering()
+     * @see #setNullValueOrdering(NullOrderingType)
+     * @generated
+     */
+    void unsetNullValueOrdering();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.SortKey#getNullValueOrdering <em>Null Value Ordering</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Null Value Ordering</em>' attribute is set.
+     * @see #unsetNullValueOrdering()
+     * @see #getNullValueOrdering()
+     * @see #setNullValueOrdering(NullOrderingType)
+     * @generated
+     */
+    boolean isSetNullValueOrdering();
+
+    /**
+     * Returns the value of the '<em><b>Optional</b></em>' attribute.
+     * The default value is <code>"false"</code>.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Indicates whether this sort key can be excluded at runtime.  Default value is false.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Optional</em>' attribute.
+     * @see #isSetOptional()
+     * @see #unsetOptional()
+     * @see #setOptional(boolean)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getSortKey_Optional()
+     * @model default="false" unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Boolean"
+     *        extendedMetaData="kind='element' name='optional' namespace='##targetNamespace'"
+     * @generated
+     */
+    boolean isOptional();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.SortKey#isOptional <em>Optional</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Optional</em>' attribute.
+     * @see #isSetOptional()
+     * @see #unsetOptional()
+     * @see #isOptional()
+     * @generated
+     */
+    void setOptional( boolean value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.SortKey#isOptional <em>Optional</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetOptional()
+     * @see #isOptional()
+     * @see #setOptional(boolean)
+     * @generated
+     */
+    void unsetOptional();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.SortKey#isOptional <em>Optional</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Optional</em>' attribute is set.
+     * @see #unsetOptional()
+     * @see #isOptional()
+     * @see #setOptional(boolean)
+     * @generated
+     */
+    boolean isSetOptional();
+
+} // SortKey
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/SortSpecification.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/SortSpecification.java
new file mode 100644
index 0000000..db478ed
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/SortSpecification.java
@@ -0,0 +1,70 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: SortSpecification.java,v 1.2 2009/07/23 21:43:17 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Sort Specification</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Specification of zero or more sort keys.  An empty collection explicitly indicates that the result set 
+ * has no sort keys defined.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.SortSpecification#getSortKeys <em>Sort Keys</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getSortSpecification()
+ * @since 3.3 (DTP 1.8)
+ * @model extendedMetaData="name='SortSpecification' kind='elementOnly'"
+ * @generated
+ */
+public interface SortSpecification extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Sort Keys</b></em>' containment reference list.
+     * The list contents are of type {@link org.eclipse.datatools.connectivity.oda.design.SortKey}.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Sort Keys</em>' containment reference list isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Sort Keys</em>' containment reference list.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getSortSpecification_SortKeys()
+     * @model containment="true"
+     *        extendedMetaData="kind='element' name='sortKeys' namespace='##targetNamespace'"
+     * @generated
+     */
+    EList<SortKey> getSortKeys();
+
+} // SortSpecification
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/StaticValues.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/StaticValues.java
new file mode 100644
index 0000000..7b385f5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/StaticValues.java
@@ -0,0 +1,99 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: StaticValues.java,v 1.1 2009/02/12 02:50:20 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Static Values</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * A collection of static values in any data type.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.StaticValues#getValues <em>Values</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getStaticValues()
+ * @since 3.3 (DTP 1.8)
+ * @model extendedMetaData="name='StaticValues' kind='elementOnly'"
+ * @generated
+ */
+public interface StaticValues extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Values</b></em>' attribute list.
+     * The list contents are of type {@link java.lang.Object}.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Values</em>' attribute list isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Values</em>' attribute list.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getStaticValues_Values()
+     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.AnySimpleType" required="true"
+     *        extendedMetaData="kind='element' name='values' namespace='##targetNamespace'"
+     * @generated
+     */
+    EList<Object> getValues();
+    
+    /**
+     * Indicates whether this collection of static values is empty.
+     * @return  true if this has an empty collection of static values; false otherwise
+     * @generated NOT
+     */
+    boolean isEmpty();
+
+    /**
+     * Gets the number of static values in this collection.
+     * @return  number of static values
+     * @generated NOT
+     */
+    int count();
+    
+    /**
+     * Appends the specified value to this ordered collection of static values.
+     * It is the responsibility of the caller to ensure compatible type of value object
+     * is added to the collection.
+     * @param aValue    a value to add; may be null
+     * @generated NOT
+     */
+    void add( Object aValue );
+    
+    /**
+     * Removes all of the static values from this collection. 
+     * This will be empty after this call returns. 
+     * @generated NOT
+     */
+    void clear();
+
+} // StaticValues
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/TextFormatType.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/TextFormatType.java
new file mode 100644
index 0000000..e31174f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/TextFormatType.java
@@ -0,0 +1,255 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: TextFormatType.java,v 1.2 2007/04/11 02:59:53 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Text Format Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * The type of text content of the data column values, i.e. plain text, HTML or RTF.  It provides a hint on the type of text control to use for displaying the data value, e.g. a Text Control vs. Dynamic Text Control.
+ * <!-- end-model-doc -->
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getTextFormatType()
+ * @model extendedMetaData="name='TextFormatType'"
+ * @generated
+ */
+public enum TextFormatType implements Enumerator {
+    /**
+     * The '<em><b>Plain</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #PLAIN
+     * @generated
+     * @ordered
+     */
+    PLAIN_LITERAL(0, "Plain", "Plain"), //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * The '<em><b>HTML</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #HTML
+     * @generated
+     * @ordered
+     */
+    HTML_LITERAL(1, "HTML", "HTML"), //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * The '<em><b>RTF</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #RTF
+     * @generated
+     * @ordered
+     */
+    RTF_LITERAL(2, "RTF", "RTF"); //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The '<em><b>Plain</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #PLAIN_LITERAL
+     * @model name="Plain"
+     * @generated
+     * @ordered
+     */
+    public static final int PLAIN = 0;
+
+    /**
+     * The '<em><b>HTML</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #HTML_LITERAL
+     * @model
+     * @generated
+     * @ordered
+     */
+    public static final int HTML = 1;
+
+    /**
+     * The '<em><b>RTF</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #RTF_LITERAL
+     * @model
+     * @generated
+     * @ordered
+     */
+    public static final int RTF = 2;
+
+    /**
+     * An array of all the '<em><b>Text Format Type</b></em>' enumerators.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private static final TextFormatType[] VALUES_ARRAY = new TextFormatType[]
+    { PLAIN_LITERAL, HTML_LITERAL, RTF_LITERAL, };
+
+    /**
+     * A public read-only list of all the '<em><b>Text Format Type</b></em>' enumerators.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final List<TextFormatType> VALUES = Collections
+            .unmodifiableList( Arrays.asList( VALUES_ARRAY ) );
+
+    /**
+     * Returns the '<em><b>Text Format Type</b></em>' literal with the specified literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static TextFormatType get( String literal )
+    {
+        for( int i = 0; i < VALUES_ARRAY.length; ++i)
+        {
+            TextFormatType result = VALUES_ARRAY[i];
+            if( result.toString().equals( literal ) )
+            {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the '<em><b>Text Format Type</b></em>' literal with the specified name.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static TextFormatType getByName( String name )
+    {
+        for( int i = 0; i < VALUES_ARRAY.length; ++i)
+        {
+            TextFormatType result = VALUES_ARRAY[i];
+            if( result.getName().equals( name ) )
+            {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the '<em><b>Text Format Type</b></em>' literal with the specified integer value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static TextFormatType get( int value )
+    {
+        switch( value )
+        {
+        case PLAIN:
+            return PLAIN_LITERAL;
+        case HTML:
+            return HTML_LITERAL;
+        case RTF:
+            return RTF_LITERAL;
+        }
+        return null;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final int value;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final String name;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final String literal;
+
+    /**
+     * Only this class can construct instances.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private TextFormatType( int value, String name, String literal )
+    {
+        this.value = value;
+        this.name = name;
+        this.literal = literal;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public int getValue()
+    {
+        return value;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getName()
+    {
+        return name;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getLiteral()
+    {
+        return literal;
+    }
+
+    /**
+     * Returns the literal value of the enumerator, which is its string representation.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        return literal;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/TextWrapType.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/TextWrapType.java
new file mode 100644
index 0000000..e54816f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/TextWrapType.java
@@ -0,0 +1,233 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: TextWrapType.java,v 1.2 2007/04/11 02:59:53 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Text Wrap Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * A hint on the type of text wrapping on the data column values.  It could be in a single line (None), or word-wrapped (Word).
+ * <!-- end-model-doc -->
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getTextWrapType()
+ * @model extendedMetaData="name='TextWrapType'"
+ * @generated
+ */
+public enum TextWrapType implements Enumerator {
+    /**
+     * The '<em><b>None</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #NONE
+     * @generated
+     * @ordered
+     */
+    NONE_LITERAL(0, "None", "None"), //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * The '<em><b>Word</b></em>' literal object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #WORD
+     * @generated
+     * @ordered
+     */
+    WORD_LITERAL(1, "Word", "Word"); //$NON-NLS-1$ //$NON-NLS-2$
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The '<em><b>None</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #NONE_LITERAL
+     * @model name="None"
+     * @generated
+     * @ordered
+     */
+    public static final int NONE = 0;
+
+    /**
+     * The '<em><b>Word</b></em>' literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #WORD_LITERAL
+     * @model name="Word"
+     * @generated
+     * @ordered
+     */
+    public static final int WORD = 1;
+
+    /**
+     * An array of all the '<em><b>Text Wrap Type</b></em>' enumerators.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private static final TextWrapType[] VALUES_ARRAY = new TextWrapType[]
+    { NONE_LITERAL, WORD_LITERAL, };
+
+    /**
+     * A public read-only list of all the '<em><b>Text Wrap Type</b></em>' enumerators.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final List<TextWrapType> VALUES = Collections
+            .unmodifiableList( Arrays.asList( VALUES_ARRAY ) );
+
+    /**
+     * Returns the '<em><b>Text Wrap Type</b></em>' literal with the specified literal value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static TextWrapType get( String literal )
+    {
+        for( int i = 0; i < VALUES_ARRAY.length; ++i)
+        {
+            TextWrapType result = VALUES_ARRAY[i];
+            if( result.toString().equals( literal ) )
+            {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the '<em><b>Text Wrap Type</b></em>' literal with the specified name.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static TextWrapType getByName( String name )
+    {
+        for( int i = 0; i < VALUES_ARRAY.length; ++i)
+        {
+            TextWrapType result = VALUES_ARRAY[i];
+            if( result.getName().equals( name ) )
+            {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the '<em><b>Text Wrap Type</b></em>' literal with the specified integer value.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static TextWrapType get( int value )
+    {
+        switch( value )
+        {
+        case NONE:
+            return NONE_LITERAL;
+        case WORD:
+            return WORD_LITERAL;
+        }
+        return null;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final int value;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final String name;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private final String literal;
+
+    /**
+     * Only this class can construct instances.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private TextWrapType( int value, String name, String literal )
+    {
+        this.value = value;
+        this.name = name;
+        this.literal = literal;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public int getValue()
+    {
+        return value;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getName()
+    {
+        return name;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getLiteral()
+    {
+        return literal;
+    }
+
+    /**
+     * Returns the literal value of the enumerator, which is its string representation.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        return literal;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ValueFormatHints.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ValueFormatHints.java
new file mode 100644
index 0000000..10c04f5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/ValueFormatHints.java
@@ -0,0 +1,303 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ValueFormatHints.java,v 1.2 2006/03/09 05:09:18 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Hints on how to format a value.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ValueFormatHints#getDisplaySize <em>Display Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ValueFormatHints#getDisplayFormat <em>Display Format</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ValueFormatHints#getTextFormatType <em>Text Format Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ValueFormatHints#getHorizontalAlignment <em>Horizontal Alignment</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.ValueFormatHints#getTextWrapType <em>Text Wrap Type</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getValueFormatHints()
+ * @model extendedMetaData="name='ValueFormatHints' kind='elementOnly'"
+ * @generated
+ */
+public interface ValueFormatHints extends EObject
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    String copyright = "Copyright (c) 2005, 2007 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Returns the value of the '<em><b>Display Size</b></em>' attribute.
+     * The default value is <code>"-1"</code>.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Default display length of the data value.  A value of -1 means unknown length.  The default value, if not specified, is -1.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Display Size</em>' attribute.
+     * @see #isSetDisplaySize()
+     * @see #unsetDisplaySize()
+     * @see #setDisplaySize(int)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getValueFormatHints_DisplaySize()
+     * @model default="-1" unique="false" unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Int"
+     *        extendedMetaData="kind='element' name='displaySize' namespace='##targetNamespace'"
+     * @generated
+     */
+    int getDisplaySize();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ValueFormatHints#getDisplaySize <em>Display Size</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Display Size</em>' attribute.
+     * @see #isSetDisplaySize()
+     * @see #unsetDisplaySize()
+     * @see #getDisplaySize()
+     * @generated
+     */
+    void setDisplaySize( int value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ValueFormatHints#getDisplaySize <em>Display Size</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetDisplaySize()
+     * @see #getDisplaySize()
+     * @see #setDisplaySize(int)
+     * @generated
+     */
+    void unsetDisplaySize();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ValueFormatHints#getDisplaySize <em>Display Size</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Display Size</em>' attribute is set.
+     * @see #unsetDisplaySize()
+     * @see #getDisplaySize()
+     * @see #setDisplaySize(int)
+     * @generated
+     */
+    boolean isSetDisplaySize();
+
+    /**
+     * Returns the value of the '<em><b>Display Format</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The preferred display format of the data value.  It contains a data format mask, e.g. #,###.00, ShortDate, etc.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Display Format</em>' attribute.
+     * @see #setDisplayFormat(String)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getValueFormatHints_DisplayFormat()
+     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String"
+     *        extendedMetaData="kind='element' name='displayFormat' namespace='##targetNamespace'"
+     * @generated
+     */
+    String getDisplayFormat();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ValueFormatHints#getDisplayFormat <em>Display Format</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Display Format</em>' attribute.
+     * @see #getDisplayFormat()
+     * @generated
+     */
+    void setDisplayFormat( String value );
+
+    /**
+     * Returns the value of the '<em><b>Text Format Type</b></em>' attribute.
+     * The default value is <code>"Plain"</code>.
+     * The literals are from the enumeration {@link org.eclipse.datatools.connectivity.oda.design.TextFormatType}.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * The type of text content of the data value, i.e. plain text, HTML or RTF.  It provides a hint on the type of text control to use for displaying the data value, e.g. a Dynamic Text Control.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Text Format Type</em>' attribute.
+     * @see org.eclipse.datatools.connectivity.oda.design.TextFormatType
+     * @see #isSetTextFormatType()
+     * @see #unsetTextFormatType()
+     * @see #setTextFormatType(TextFormatType)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getValueFormatHints_TextFormatType()
+     * @model default="Plain" unique="false" unsettable="true"
+     *        extendedMetaData="kind='element' name='textFormatType' namespace='##targetNamespace'"
+     * @generated
+     */
+    TextFormatType getTextFormatType();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ValueFormatHints#getTextFormatType <em>Text Format Type</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Text Format Type</em>' attribute.
+     * @see org.eclipse.datatools.connectivity.oda.design.TextFormatType
+     * @see #isSetTextFormatType()
+     * @see #unsetTextFormatType()
+     * @see #getTextFormatType()
+     * @generated
+     */
+    void setTextFormatType( TextFormatType value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ValueFormatHints#getTextFormatType <em>Text Format Type</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetTextFormatType()
+     * @see #getTextFormatType()
+     * @see #setTextFormatType(TextFormatType)
+     * @generated
+     */
+    void unsetTextFormatType();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ValueFormatHints#getTextFormatType <em>Text Format Type</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Text Format Type</em>' attribute is set.
+     * @see #unsetTextFormatType()
+     * @see #getTextFormatType()
+     * @see #setTextFormatType(TextFormatType)
+     * @generated
+     */
+    boolean isSetTextFormatType();
+
+    /**
+     * Returns the value of the '<em><b>Horizontal Alignment</b></em>' attribute.
+     * The default value is <code>"Automatic"</code>.
+     * The literals are from the enumeration {@link org.eclipse.datatools.connectivity.oda.design.HorizontalAlignment}.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * Horizontal display alignment of the data value.  See valid enum values.  "Automatic" means that it is up to an ODA host designer to determine the alignment based on its default rules.
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Horizontal Alignment</em>' attribute.
+     * @see org.eclipse.datatools.connectivity.oda.design.HorizontalAlignment
+     * @see #isSetHorizontalAlignment()
+     * @see #unsetHorizontalAlignment()
+     * @see #setHorizontalAlignment(HorizontalAlignment)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getValueFormatHints_HorizontalAlignment()
+     * @model default="Automatic" unique="false" unsettable="true"
+     *        extendedMetaData="kind='element' name='horizontalAlignment' namespace='##targetNamespace'"
+     * @generated
+     */
+    HorizontalAlignment getHorizontalAlignment();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ValueFormatHints#getHorizontalAlignment <em>Horizontal Alignment</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Horizontal Alignment</em>' attribute.
+     * @see org.eclipse.datatools.connectivity.oda.design.HorizontalAlignment
+     * @see #isSetHorizontalAlignment()
+     * @see #unsetHorizontalAlignment()
+     * @see #getHorizontalAlignment()
+     * @generated
+     */
+    void setHorizontalAlignment( HorizontalAlignment value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ValueFormatHints#getHorizontalAlignment <em>Horizontal Alignment</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetHorizontalAlignment()
+     * @see #getHorizontalAlignment()
+     * @see #setHorizontalAlignment(HorizontalAlignment)
+     * @generated
+     */
+    void unsetHorizontalAlignment();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ValueFormatHints#getHorizontalAlignment <em>Horizontal Alignment</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Horizontal Alignment</em>' attribute is set.
+     * @see #unsetHorizontalAlignment()
+     * @see #getHorizontalAlignment()
+     * @see #setHorizontalAlignment(HorizontalAlignment)
+     * @generated
+     */
+    boolean isSetHorizontalAlignment();
+
+    /**
+     * Returns the value of the '<em><b>Text Wrap Type</b></em>' attribute.
+     * The default value is <code>"None"</code>.
+     * The literals are from the enumeration {@link org.eclipse.datatools.connectivity.oda.design.TextWrapType}.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * <!-- begin-model-doc -->
+     * A hint on the type of text wrapping on the data value.  It could be in a single line (None), or word-wrapped (Word).
+     * <!-- end-model-doc -->
+     * @return the value of the '<em>Text Wrap Type</em>' attribute.
+     * @see org.eclipse.datatools.connectivity.oda.design.TextWrapType
+     * @see #isSetTextWrapType()
+     * @see #unsetTextWrapType()
+     * @see #setTextWrapType(TextWrapType)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#getValueFormatHints_TextWrapType()
+     * @model default="None" unique="false" unsettable="true"
+     *        extendedMetaData="kind='element' name='textWrapType' namespace='##targetNamespace'"
+     * @generated
+     */
+    TextWrapType getTextWrapType();
+
+    /**
+     * Sets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ValueFormatHints#getTextWrapType <em>Text Wrap Type</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Text Wrap Type</em>' attribute.
+     * @see org.eclipse.datatools.connectivity.oda.design.TextWrapType
+     * @see #isSetTextWrapType()
+     * @see #unsetTextWrapType()
+     * @see #getTextWrapType()
+     * @generated
+     */
+    void setTextWrapType( TextWrapType value );
+
+    /**
+     * Unsets the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ValueFormatHints#getTextWrapType <em>Text Wrap Type</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetTextWrapType()
+     * @see #getTextWrapType()
+     * @see #setTextWrapType(TextWrapType)
+     * @generated
+     */
+    void unsetTextWrapType();
+
+    /**
+     * Returns whether the value of the '{@link org.eclipse.datatools.connectivity.oda.design.ValueFormatHints#getTextWrapType <em>Text Wrap Type</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Text Wrap Type</em>' attribute is set.
+     * @see #unsetTextWrapType()
+     * @see #getTextWrapType()
+     * @see #setTextWrapType(TextWrapType)
+     * @generated
+     */
+    boolean isSetTextWrapType();
+
+} // ValueFormatHints
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/.gitignore b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/.gitignore
new file mode 100644
index 0000000..93bafad
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/.gitignore
@@ -0,0 +1 @@
+vss*.scc
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/AndExpressionImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/AndExpressionImpl.java
new file mode 100644
index 0000000..a3dfdb6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/AndExpressionImpl.java
@@ -0,0 +1,74 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: AndExpressionImpl.java,v 1.1 2009/01/30 00:23:57 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.AndExpression;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>And Expression</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ * @since 3.3 (DTP 1.8)
+ */
+public class AndExpressionImpl extends CompositeFilterExpressionImpl implements
+        AndExpression
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected AndExpressionImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.AND_EXPRESSION;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.FilterExpressionImpl#isNegatable()
+     * @generated NOT
+     */
+    @Override
+    public boolean isNegatable()
+    {
+        return true;
+    }
+
+} //AndExpressionImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/AtomicExpressionContextImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/AtomicExpressionContextImpl.java
new file mode 100644
index 0000000..075c690
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/AtomicExpressionContextImpl.java
@@ -0,0 +1,444 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: AtomicExpressionContextImpl.java,v 1.3 2009/04/14 02:13:18 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.AtomicExpressionContext;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.ExpressionArguments;
+import org.eclipse.datatools.connectivity.oda.design.ExpressionVariable;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Atomic Expression Context</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.AtomicExpressionContextImpl#isOptional <em>Optional</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.AtomicExpressionContextImpl#getVariable <em>Variable</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.AtomicExpressionContextImpl#getArguments <em>Arguments</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ * @since 3.3 (DTP 1.8)
+ */
+public class AtomicExpressionContextImpl extends EObjectImpl implements
+        AtomicExpressionContext
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The default value of the '{@link #isOptional() <em>Optional</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isOptional()
+     * @generated
+     * @ordered
+     */
+    protected static final boolean OPTIONAL_EDEFAULT = false;
+
+    /**
+     * The cached value of the '{@link #isOptional() <em>Optional</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isOptional()
+     * @generated
+     * @ordered
+     */
+    protected boolean m_optional = OPTIONAL_EDEFAULT;
+
+    /**
+     * This is true if the Optional attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_optionalESet;
+
+    /**
+     * The cached value of the '{@link #getVariable() <em>Variable</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getVariable()
+     * @generated
+     * @ordered
+     */
+    protected ExpressionVariable m_variable;
+
+    /**
+     * The cached value of the '{@link #getArguments() <em>Arguments</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getArguments()
+     * @generated
+     * @ordered
+     */
+    protected ExpressionArguments m_arguments;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected AtomicExpressionContextImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.ATOMIC_EXPRESSION_CONTEXT;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isOptional()
+    {
+        return m_optional;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setOptional( boolean newOptional )
+    {
+        boolean oldOptional = m_optional;
+        m_optional = newOptional;
+        boolean oldOptionalESet = m_optionalESet;
+        m_optionalESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.ATOMIC_EXPRESSION_CONTEXT__OPTIONAL,
+                    oldOptional, m_optional, !oldOptionalESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetOptional()
+    {
+        boolean oldOptional = m_optional;
+        boolean oldOptionalESet = m_optionalESet;
+        m_optional = OPTIONAL_EDEFAULT;
+        m_optionalESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.ATOMIC_EXPRESSION_CONTEXT__OPTIONAL,
+                    oldOptional, OPTIONAL_EDEFAULT, oldOptionalESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetOptional()
+    {
+        return m_optionalESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ExpressionVariable getVariable()
+    {
+        return m_variable;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetVariable( ExpressionVariable newVariable,
+            NotificationChain msgs )
+    {
+        ExpressionVariable oldVariable = m_variable;
+        m_variable = newVariable;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.ATOMIC_EXPRESSION_CONTEXT__VARIABLE,
+                    oldVariable, newVariable );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setVariable( ExpressionVariable newVariable )
+    {
+        if( newVariable != m_variable )
+        {
+            NotificationChain msgs = null;
+            if( m_variable != null )
+                msgs = ((InternalEObject) m_variable)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.ATOMIC_EXPRESSION_CONTEXT__VARIABLE,
+                                null, msgs );
+            if( newVariable != null )
+                msgs = ((InternalEObject) newVariable)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.ATOMIC_EXPRESSION_CONTEXT__VARIABLE,
+                                null, msgs );
+            msgs = basicSetVariable( newVariable, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.ATOMIC_EXPRESSION_CONTEXT__VARIABLE,
+                    newVariable, newVariable ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ExpressionArguments getArguments()
+    {
+        return m_arguments;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetArguments(
+            ExpressionArguments newArguments, NotificationChain msgs )
+    {
+        ExpressionArguments oldArguments = m_arguments;
+        m_arguments = newArguments;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.ATOMIC_EXPRESSION_CONTEXT__ARGUMENTS,
+                    oldArguments, newArguments );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setArguments( ExpressionArguments newArguments )
+    {
+        if( newArguments != m_arguments )
+        {
+            NotificationChain msgs = null;
+            if( m_arguments != null )
+                msgs = ((InternalEObject) m_arguments)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.ATOMIC_EXPRESSION_CONTEXT__ARGUMENTS,
+                                null, msgs );
+            if( newArguments != null )
+                msgs = ((InternalEObject) newArguments)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.ATOMIC_EXPRESSION_CONTEXT__ARGUMENTS,
+                                null, msgs );
+            msgs = basicSetArguments( newArguments, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.ATOMIC_EXPRESSION_CONTEXT__ARGUMENTS,
+                    newArguments, newArguments ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.ATOMIC_EXPRESSION_CONTEXT__VARIABLE:
+            return basicSetVariable( null, msgs );
+        case DesignPackage.ATOMIC_EXPRESSION_CONTEXT__ARGUMENTS:
+            return basicSetArguments( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.ATOMIC_EXPRESSION_CONTEXT__OPTIONAL:
+            return isOptional() ? Boolean.TRUE : Boolean.FALSE;
+        case DesignPackage.ATOMIC_EXPRESSION_CONTEXT__VARIABLE:
+            return getVariable();
+        case DesignPackage.ATOMIC_EXPRESSION_CONTEXT__ARGUMENTS:
+            return getArguments();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.ATOMIC_EXPRESSION_CONTEXT__OPTIONAL:
+            setOptional( ((Boolean) newValue).booleanValue() );
+            return;
+        case DesignPackage.ATOMIC_EXPRESSION_CONTEXT__VARIABLE:
+            setVariable( (ExpressionVariable) newValue );
+            return;
+        case DesignPackage.ATOMIC_EXPRESSION_CONTEXT__ARGUMENTS:
+            setArguments( (ExpressionArguments) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.ATOMIC_EXPRESSION_CONTEXT__OPTIONAL:
+            unsetOptional();
+            return;
+        case DesignPackage.ATOMIC_EXPRESSION_CONTEXT__VARIABLE:
+            setVariable( (ExpressionVariable) null );
+            return;
+        case DesignPackage.ATOMIC_EXPRESSION_CONTEXT__ARGUMENTS:
+            setArguments( (ExpressionArguments) null );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.ATOMIC_EXPRESSION_CONTEXT__OPTIONAL:
+            return isSetOptional();
+        case DesignPackage.ATOMIC_EXPRESSION_CONTEXT__VARIABLE:
+            return m_variable != null;
+        case DesignPackage.ATOMIC_EXPRESSION_CONTEXT__ARGUMENTS:
+            return m_arguments != null;
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (optional: " ); //$NON-NLS-1$
+        if( m_optionalESet )
+            result.append( m_optional );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //AtomicExpressionContextImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/AxisAttributesImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/AxisAttributesImpl.java
new file mode 100644
index 0000000..b6c2d6a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/AxisAttributesImpl.java
@@ -0,0 +1,449 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: AxisAttributesImpl.java,v 1.3 2009/04/24 03:20:26 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.AxisAttributes;
+import org.eclipse.datatools.connectivity.oda.design.AxisType;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.ResultSubset;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Axis Attributes</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.AxisAttributesImpl#getAxisType <em>Axis Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.AxisAttributesImpl#isOnColumnLayout <em>On Column Layout</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.AxisAttributesImpl#getRelatedColumns <em>Related Columns</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class AxisAttributesImpl extends EObjectImpl implements AxisAttributes
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The default value of the '{@link #getAxisType() <em>Axis Type</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getAxisType()
+     * @generated
+     * @ordered
+     */
+    protected static final AxisType AXIS_TYPE_EDEFAULT = AxisType.MEASURE_LITERAL;
+
+    /**
+     * The cached value of the '{@link #getAxisType() <em>Axis Type</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getAxisType()
+     * @generated
+     * @ordered
+     */
+    protected AxisType m_axisType = AXIS_TYPE_EDEFAULT;
+
+    /**
+     * This is true if the Axis Type attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_axisTypeESet;
+
+    /**
+     * The default value of the '{@link #isOnColumnLayout() <em>On Column Layout</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isOnColumnLayout()
+     * @generated
+     * @ordered
+     */
+    protected static final boolean ON_COLUMN_LAYOUT_EDEFAULT = true;
+
+    /**
+     * The cached value of the '{@link #isOnColumnLayout() <em>On Column Layout</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isOnColumnLayout()
+     * @generated
+     * @ordered
+     */
+    protected boolean m_onColumnLayout = ON_COLUMN_LAYOUT_EDEFAULT;
+
+    /**
+     * This is true if the On Column Layout attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_onColumnLayoutESet;
+
+    /**
+     * The cached value of the '{@link #getRelatedColumns() <em>Related Columns</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRelatedColumns()
+     * @generated
+     * @ordered
+     * @since 3.3.2
+     */
+    protected ResultSubset m_relatedColumns;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected AxisAttributesImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.AXIS_ATTRIBUTES;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public AxisType getAxisType()
+    {
+        return m_axisType;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setAxisType( AxisType newAxisType )
+    {
+        AxisType oldAxisType = m_axisType;
+        m_axisType = newAxisType == null ? AXIS_TYPE_EDEFAULT : newAxisType;
+        boolean oldAxisTypeESet = m_axisTypeESet;
+        m_axisTypeESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.AXIS_ATTRIBUTES__AXIS_TYPE, oldAxisType,
+                    m_axisType, !oldAxisTypeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetAxisType()
+    {
+        AxisType oldAxisType = m_axisType;
+        boolean oldAxisTypeESet = m_axisTypeESet;
+        m_axisType = AXIS_TYPE_EDEFAULT;
+        m_axisTypeESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.AXIS_ATTRIBUTES__AXIS_TYPE, oldAxisType,
+                    AXIS_TYPE_EDEFAULT, oldAxisTypeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetAxisType()
+    {
+        return m_axisTypeESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isOnColumnLayout()
+    {
+        return m_onColumnLayout;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setOnColumnLayout( boolean newOnColumnLayout )
+    {
+        boolean oldOnColumnLayout = m_onColumnLayout;
+        m_onColumnLayout = newOnColumnLayout;
+        boolean oldOnColumnLayoutESet = m_onColumnLayoutESet;
+        m_onColumnLayoutESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.AXIS_ATTRIBUTES__ON_COLUMN_LAYOUT,
+                    oldOnColumnLayout, m_onColumnLayout, !oldOnColumnLayoutESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetOnColumnLayout()
+    {
+        boolean oldOnColumnLayout = m_onColumnLayout;
+        boolean oldOnColumnLayoutESet = m_onColumnLayoutESet;
+        m_onColumnLayout = ON_COLUMN_LAYOUT_EDEFAULT;
+        m_onColumnLayoutESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.AXIS_ATTRIBUTES__ON_COLUMN_LAYOUT,
+                    oldOnColumnLayout, ON_COLUMN_LAYOUT_EDEFAULT,
+                    oldOnColumnLayoutESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetOnColumnLayout()
+    {
+        return m_onColumnLayoutESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ResultSubset getRelatedColumns()
+    {
+        return m_relatedColumns;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetRelatedColumns(
+            ResultSubset newRelatedColumns, NotificationChain msgs )
+    {
+        ResultSubset oldRelatedColumns = m_relatedColumns;
+        m_relatedColumns = newRelatedColumns;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.AXIS_ATTRIBUTES__RELATED_COLUMNS,
+                    oldRelatedColumns, newRelatedColumns );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setRelatedColumns( ResultSubset newRelatedColumns )
+    {
+        if( newRelatedColumns != m_relatedColumns )
+        {
+            NotificationChain msgs = null;
+            if( m_relatedColumns != null )
+                msgs = ((InternalEObject) m_relatedColumns)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.AXIS_ATTRIBUTES__RELATED_COLUMNS,
+                                null, msgs );
+            if( newRelatedColumns != null )
+                msgs = ((InternalEObject) newRelatedColumns)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.AXIS_ATTRIBUTES__RELATED_COLUMNS,
+                                null, msgs );
+            msgs = basicSetRelatedColumns( newRelatedColumns, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.AXIS_ATTRIBUTES__RELATED_COLUMNS,
+                    newRelatedColumns, newRelatedColumns ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.AXIS_ATTRIBUTES__RELATED_COLUMNS:
+            return basicSetRelatedColumns( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.AXIS_ATTRIBUTES__AXIS_TYPE:
+            return getAxisType();
+        case DesignPackage.AXIS_ATTRIBUTES__ON_COLUMN_LAYOUT:
+            return isOnColumnLayout() ? Boolean.TRUE : Boolean.FALSE;
+        case DesignPackage.AXIS_ATTRIBUTES__RELATED_COLUMNS:
+            return getRelatedColumns();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.AXIS_ATTRIBUTES__AXIS_TYPE:
+            setAxisType( (AxisType) newValue );
+            return;
+        case DesignPackage.AXIS_ATTRIBUTES__ON_COLUMN_LAYOUT:
+            setOnColumnLayout( ((Boolean) newValue).booleanValue() );
+            return;
+        case DesignPackage.AXIS_ATTRIBUTES__RELATED_COLUMNS:
+            setRelatedColumns( (ResultSubset) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.AXIS_ATTRIBUTES__AXIS_TYPE:
+            unsetAxisType();
+            return;
+        case DesignPackage.AXIS_ATTRIBUTES__ON_COLUMN_LAYOUT:
+            unsetOnColumnLayout();
+            return;
+        case DesignPackage.AXIS_ATTRIBUTES__RELATED_COLUMNS:
+            setRelatedColumns( (ResultSubset) null );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.AXIS_ATTRIBUTES__AXIS_TYPE:
+            return isSetAxisType();
+        case DesignPackage.AXIS_ATTRIBUTES__ON_COLUMN_LAYOUT:
+            return isSetOnColumnLayout();
+        case DesignPackage.AXIS_ATTRIBUTES__RELATED_COLUMNS:
+            return m_relatedColumns != null;
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (axisType: " ); //$NON-NLS-1$
+        if( m_axisTypeESet )
+            result.append( m_axisType );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ", onColumnLayout: " ); //$NON-NLS-1$
+        if( m_onColumnLayoutESet )
+            result.append( m_onColumnLayout );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //AxisAttributesImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ColumnDefinitionImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ColumnDefinitionImpl.java
new file mode 100644
index 0000000..294fdd5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ColumnDefinitionImpl.java
@@ -0,0 +1,414 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ColumnDefinitionImpl.java,v 1.2 2007/04/11 02:59:52 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.AxisAttributes;
+import org.eclipse.datatools.connectivity.oda.design.ColumnDefinition;
+import org.eclipse.datatools.connectivity.oda.design.DataElementAttributes;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Column Definition</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ColumnDefinitionImpl#getAttributes <em>Attributes</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ColumnDefinitionImpl#getUsageHints <em>Usage Hints</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ColumnDefinitionImpl#getMultiDimensionAttributes <em>Multi Dimension Attributes</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ColumnDefinitionImpl extends EObjectImpl implements
+        ColumnDefinition
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getAttributes() <em>Attributes</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getAttributes()
+     * @generated
+     * @ordered
+     */
+    protected DataElementAttributes m_attributes;
+
+    /**
+     * The cached value of the '{@link #getUsageHints() <em>Usage Hints</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getUsageHints()
+     * @generated
+     * @ordered
+     */
+    protected OutputElementAttributes m_usageHints;
+
+    /**
+     * The cached value of the '{@link #getMultiDimensionAttributes() <em>Multi Dimension Attributes</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getMultiDimensionAttributes()
+     * @generated
+     * @ordered
+     */
+    protected AxisAttributes m_multiDimensionAttributes;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected ColumnDefinitionImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.COLUMN_DEFINITION;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DataElementAttributes getAttributes()
+    {
+        return m_attributes;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetAttributes(
+            DataElementAttributes newAttributes, NotificationChain msgs )
+    {
+        DataElementAttributes oldAttributes = m_attributes;
+        m_attributes = newAttributes;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.COLUMN_DEFINITION__ATTRIBUTES, oldAttributes,
+                    newAttributes );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setAttributes( DataElementAttributes newAttributes )
+    {
+        if( newAttributes != m_attributes )
+        {
+            NotificationChain msgs = null;
+            if( m_attributes != null )
+                msgs = ((InternalEObject) m_attributes).eInverseRemove( this,
+                        EOPPOSITE_FEATURE_BASE
+                                - DesignPackage.COLUMN_DEFINITION__ATTRIBUTES,
+                        null, msgs );
+            if( newAttributes != null )
+                msgs = ((InternalEObject) newAttributes).eInverseAdd( this,
+                        EOPPOSITE_FEATURE_BASE
+                                - DesignPackage.COLUMN_DEFINITION__ATTRIBUTES,
+                        null, msgs );
+            msgs = basicSetAttributes( newAttributes, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.COLUMN_DEFINITION__ATTRIBUTES, newAttributes,
+                    newAttributes ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public OutputElementAttributes getUsageHints()
+    {
+        return m_usageHints;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetUsageHints(
+            OutputElementAttributes newUsageHints, NotificationChain msgs )
+    {
+        OutputElementAttributes oldUsageHints = m_usageHints;
+        m_usageHints = newUsageHints;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.COLUMN_DEFINITION__USAGE_HINTS,
+                    oldUsageHints, newUsageHints );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setUsageHints( OutputElementAttributes newUsageHints )
+    {
+        if( newUsageHints != m_usageHints )
+        {
+            NotificationChain msgs = null;
+            if( m_usageHints != null )
+                msgs = ((InternalEObject) m_usageHints).eInverseRemove( this,
+                        EOPPOSITE_FEATURE_BASE
+                                - DesignPackage.COLUMN_DEFINITION__USAGE_HINTS,
+                        null, msgs );
+            if( newUsageHints != null )
+                msgs = ((InternalEObject) newUsageHints).eInverseAdd( this,
+                        EOPPOSITE_FEATURE_BASE
+                                - DesignPackage.COLUMN_DEFINITION__USAGE_HINTS,
+                        null, msgs );
+            msgs = basicSetUsageHints( newUsageHints, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.COLUMN_DEFINITION__USAGE_HINTS,
+                    newUsageHints, newUsageHints ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public AxisAttributes getMultiDimensionAttributes()
+    {
+        return m_multiDimensionAttributes;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetMultiDimensionAttributes(
+            AxisAttributes newMultiDimensionAttributes, NotificationChain msgs )
+    {
+        AxisAttributes oldMultiDimensionAttributes = m_multiDimensionAttributes;
+        m_multiDimensionAttributes = newMultiDimensionAttributes;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.COLUMN_DEFINITION__MULTI_DIMENSION_ATTRIBUTES,
+                    oldMultiDimensionAttributes, newMultiDimensionAttributes );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setMultiDimensionAttributes(
+            AxisAttributes newMultiDimensionAttributes )
+    {
+        if( newMultiDimensionAttributes != m_multiDimensionAttributes )
+        {
+            NotificationChain msgs = null;
+            if( m_multiDimensionAttributes != null )
+                msgs = ((InternalEObject) m_multiDimensionAttributes)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.COLUMN_DEFINITION__MULTI_DIMENSION_ATTRIBUTES,
+                                null, msgs );
+            if( newMultiDimensionAttributes != null )
+                msgs = ((InternalEObject) newMultiDimensionAttributes)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.COLUMN_DEFINITION__MULTI_DIMENSION_ATTRIBUTES,
+                                null, msgs );
+            msgs = basicSetMultiDimensionAttributes(
+                    newMultiDimensionAttributes, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.COLUMN_DEFINITION__MULTI_DIMENSION_ATTRIBUTES,
+                    newMultiDimensionAttributes, newMultiDimensionAttributes ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.COLUMN_DEFINITION__ATTRIBUTES:
+            return basicSetAttributes( null, msgs );
+        case DesignPackage.COLUMN_DEFINITION__USAGE_HINTS:
+            return basicSetUsageHints( null, msgs );
+        case DesignPackage.COLUMN_DEFINITION__MULTI_DIMENSION_ATTRIBUTES:
+            return basicSetMultiDimensionAttributes( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.COLUMN_DEFINITION__ATTRIBUTES:
+            return getAttributes();
+        case DesignPackage.COLUMN_DEFINITION__USAGE_HINTS:
+            return getUsageHints();
+        case DesignPackage.COLUMN_DEFINITION__MULTI_DIMENSION_ATTRIBUTES:
+            return getMultiDimensionAttributes();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.COLUMN_DEFINITION__ATTRIBUTES:
+            setAttributes( (DataElementAttributes) newValue );
+            return;
+        case DesignPackage.COLUMN_DEFINITION__USAGE_HINTS:
+            setUsageHints( (OutputElementAttributes) newValue );
+            return;
+        case DesignPackage.COLUMN_DEFINITION__MULTI_DIMENSION_ATTRIBUTES:
+            setMultiDimensionAttributes( (AxisAttributes) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.COLUMN_DEFINITION__ATTRIBUTES:
+            setAttributes( (DataElementAttributes) null );
+            return;
+        case DesignPackage.COLUMN_DEFINITION__USAGE_HINTS:
+            setUsageHints( (OutputElementAttributes) null );
+            return;
+        case DesignPackage.COLUMN_DEFINITION__MULTI_DIMENSION_ATTRIBUTES:
+            setMultiDimensionAttributes( (AxisAttributes) null );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.COLUMN_DEFINITION__ATTRIBUTES:
+            return m_attributes != null;
+        case DesignPackage.COLUMN_DEFINITION__USAGE_HINTS:
+            return m_usageHints != null;
+        case DesignPackage.COLUMN_DEFINITION__MULTI_DIMENSION_ATTRIBUTES:
+            return m_multiDimensionAttributes != null;
+        }
+        return super.eIsSet( featureID );
+    }
+
+} //ColumnDefinitionImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/CompositeFilterExpressionImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/CompositeFilterExpressionImpl.java
new file mode 100644
index 0000000..8262c73
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/CompositeFilterExpressionImpl.java
@@ -0,0 +1,201 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: CompositeFilterExpressionImpl.java,v 1.1 2009/01/30 00:23:56 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.oda.design.CompositeFilterExpression;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.FilterExpression;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Composite Filter Expression</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.CompositeFilterExpressionImpl#getChildren <em>Children</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ * @since 3.3 (DTP 1.8)
+ */
+public class CompositeFilterExpressionImpl extends FilterExpressionImpl
+        implements CompositeFilterExpression
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getChildren() <em>Children</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getChildren()
+     * @generated
+     * @ordered
+     */
+    protected EList<FilterExpression> m_children;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected CompositeFilterExpressionImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.COMPOSITE_FILTER_EXPRESSION;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EList<FilterExpression> getChildren()
+    {
+        if( m_children == null )
+        {
+            m_children = new EObjectContainmentEList<FilterExpression>(
+                    FilterExpression.class, this,
+                    DesignPackage.COMPOSITE_FILTER_EXPRESSION__CHILDREN );
+        }
+        return m_children;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.COMPOSITE_FILTER_EXPRESSION__CHILDREN:
+            return ((InternalEList<?>) getChildren()).basicRemove( otherEnd,
+                    msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.COMPOSITE_FILTER_EXPRESSION__CHILDREN:
+            return getChildren();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings("unchecked")
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.COMPOSITE_FILTER_EXPRESSION__CHILDREN:
+            getChildren().clear();
+            getChildren().addAll(
+                    (Collection<? extends FilterExpression>) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.COMPOSITE_FILTER_EXPRESSION__CHILDREN:
+            getChildren().clear();
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.COMPOSITE_FILTER_EXPRESSION__CHILDREN:
+            return m_children != null && !m_children.isEmpty();
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.CompositeFilterExpression#add(org.eclipse.datatools.connectivity.oda.design.FilterExpression)
+     * @generated NOT
+     */
+    public void add( FilterExpression childExpr )
+    {
+        getChildren().add( childExpr );        
+    }
+
+} //CompositeFilterExpressionImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/CustomDataImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/CustomDataImpl.java
new file mode 100644
index 0000000..1176ad6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/CustomDataImpl.java
@@ -0,0 +1,331 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.CustomData;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Custom Data</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.CustomDataImpl#getProviderId <em>Provider Id</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.CustomDataImpl#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.CustomDataImpl#getDisplayValue <em>Display Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class CustomDataImpl extends EObjectImpl implements CustomData
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The default value of the '{@link #getProviderId() <em>Provider Id</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getProviderId()
+     * @generated
+     * @ordered
+     */
+    protected static final String PROVIDER_ID_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getProviderId() <em>Provider Id</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getProviderId()
+     * @generated
+     * @ordered
+     */
+    protected String m_providerId = PROVIDER_ID_EDEFAULT;
+
+    /**
+     * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getValue()
+     * @generated
+     * @ordered
+     */
+    protected static final Object VALUE_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getValue()
+     * @generated
+     * @ordered
+     */
+    protected Object m_value = VALUE_EDEFAULT;
+
+    /**
+     * The default value of the '{@link #getDisplayValue() <em>Display Value</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDisplayValue()
+     * @generated
+     * @ordered
+     */
+    protected static final String DISPLAY_VALUE_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getDisplayValue() <em>Display Value</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDisplayValue()
+     * @generated
+     * @ordered
+     */
+    protected String m_displayValue = DISPLAY_VALUE_EDEFAULT;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected CustomDataImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.CUSTOM_DATA;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getProviderId()
+    {
+        return m_providerId;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setProviderId( String newProviderId )
+    {
+        String oldProviderId = m_providerId;
+        m_providerId = newProviderId;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.CUSTOM_DATA__PROVIDER_ID, oldProviderId,
+                    m_providerId ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public Object getValue()
+    {
+        return m_value;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setValue( Object newValue )
+    {
+        Object oldValue = m_value;
+        m_value = newValue;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.CUSTOM_DATA__VALUE, oldValue, m_value ) );
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.CustomData#getDisplayValue()
+     * @generated NOT
+     */
+    public String getDisplayValue()
+    {
+        // if the optional display value is not specified, use the String representation of the value
+        String displayValue = getDisplayValueGen();
+        if( displayValue == null && getValue() != null )
+            return getValue().toString();
+        return displayValue;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getDisplayValueGen()
+    {
+        return m_displayValue;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setDisplayValue( String newDisplayValue )
+    {
+        String oldDisplayValue = m_displayValue;
+        m_displayValue = newDisplayValue;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.CUSTOM_DATA__DISPLAY_VALUE, oldDisplayValue,
+                    m_displayValue ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.CUSTOM_DATA__PROVIDER_ID:
+            return getProviderId();
+        case DesignPackage.CUSTOM_DATA__VALUE:
+            return getValue();
+        case DesignPackage.CUSTOM_DATA__DISPLAY_VALUE:
+            return getDisplayValue();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.CUSTOM_DATA__PROVIDER_ID:
+            setProviderId( (String) newValue );
+            return;
+        case DesignPackage.CUSTOM_DATA__VALUE:
+            setValue( newValue );
+            return;
+        case DesignPackage.CUSTOM_DATA__DISPLAY_VALUE:
+            setDisplayValue( (String) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.CUSTOM_DATA__PROVIDER_ID:
+            setProviderId( PROVIDER_ID_EDEFAULT );
+            return;
+        case DesignPackage.CUSTOM_DATA__VALUE:
+            setValue( VALUE_EDEFAULT );
+            return;
+        case DesignPackage.CUSTOM_DATA__DISPLAY_VALUE:
+            setDisplayValue( DISPLAY_VALUE_EDEFAULT );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.CUSTOM_DATA__PROVIDER_ID:
+            return PROVIDER_ID_EDEFAULT == null ? m_providerId != null
+                    : !PROVIDER_ID_EDEFAULT.equals( m_providerId );
+        case DesignPackage.CUSTOM_DATA__VALUE:
+            return VALUE_EDEFAULT == null ? m_value != null : !VALUE_EDEFAULT
+                    .equals( m_value );
+        case DesignPackage.CUSTOM_DATA__DISPLAY_VALUE:
+            return DISPLAY_VALUE_EDEFAULT == null ? m_displayValue != null
+                    : !DISPLAY_VALUE_EDEFAULT.equals( m_displayValue );
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        //        StringBuffer result = new StringBuffer( super.toString() );
+        //        result.append( " (value: " ); //$NON-NLS-1$
+        StringBuffer result = new StringBuffer( "CustomData value: " ); //$NON-NLS-1$
+        result.append( m_value );
+        result.append( ", displayValue: " ); //$NON-NLS-1$
+        result.append( m_displayValue );
+        //        result.append( ')' );
+        return result.toString();
+    }
+
+} //CustomDataImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/CustomFilterExpressionImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/CustomFilterExpressionImpl.java
new file mode 100644
index 0000000..64c3c8d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/CustomFilterExpressionImpl.java
@@ -0,0 +1,433 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: CustomFilterExpressionImpl.java,v 1.4 2009/10/23 20:17:26 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.AtomicExpressionContext;
+import org.eclipse.datatools.connectivity.oda.design.CustomFilterExpression;
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.FilterExpressionType;
+import org.eclipse.datatools.connectivity.oda.design.ExpressionArguments;
+import org.eclipse.datatools.connectivity.oda.design.ExpressionVariable;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Custom Filter Expression</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.CustomFilterExpressionImpl#getType <em>Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.CustomFilterExpressionImpl#getContext <em>Context</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ * @since 3.3 (DTP 1.8)
+ */
+public class CustomFilterExpressionImpl extends FilterExpressionImpl implements
+        CustomFilterExpression
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getType() <em>Type</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getType()
+     * @generated
+     * @ordered
+     */
+    protected FilterExpressionType m_type;
+
+    /**
+     * The cached value of the '{@link #getContext() <em>Context</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getContext()
+     * @generated
+     * @ordered
+     */
+    protected AtomicExpressionContext m_context;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected CustomFilterExpressionImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.CUSTOM_FILTER_EXPRESSION;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public FilterExpressionType getType()
+    {
+        return m_type;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetType( FilterExpressionType newType,
+            NotificationChain msgs )
+    {
+        FilterExpressionType oldType = m_type;
+        m_type = newType;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.CUSTOM_FILTER_EXPRESSION__TYPE, oldType,
+                    newType );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setType( FilterExpressionType newType )
+    {
+        if( newType != m_type )
+        {
+            NotificationChain msgs = null;
+            if( m_type != null )
+                msgs = ((InternalEObject) m_type).eInverseRemove( this,
+                        EOPPOSITE_FEATURE_BASE
+                                - DesignPackage.CUSTOM_FILTER_EXPRESSION__TYPE,
+                        null, msgs );
+            if( newType != null )
+                msgs = ((InternalEObject) newType).eInverseAdd( this,
+                        EOPPOSITE_FEATURE_BASE
+                                - DesignPackage.CUSTOM_FILTER_EXPRESSION__TYPE,
+                        null, msgs );
+            msgs = basicSetType( newType, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.CUSTOM_FILTER_EXPRESSION__TYPE, newType,
+                    newType ) );
+    }
+
+    /**
+     * Backward compatible method.
+     * @generated NOT
+     */
+    public String getDeclaringExtensionId()
+    {
+        return ( getType() != null ) ? getType().getDeclaringExtensionId() : null;
+    }
+
+    /**
+     * Backward compatible method.
+     * @generated NOT
+     */
+    public void setDeclaringExtensionId( String newDeclaringExtensionId )
+    {
+        if( getType() == null )
+            setType( DesignFactory.eINSTANCE.createFilterExpressionType() );
+        
+        getType().setDeclaringExtensionId( newDeclaringExtensionId );
+    }
+
+    /**
+     * Backward compatible method to get the custom expression id 
+     * in the contained instance of expression type.
+     * @generated NOT
+     */
+    public String getId()
+    {
+        return ( getType() != null ) ? getType().getId() : null;
+    }
+
+    /**
+     * Backward compatible method to set the custom expression id 
+     * in the contained instance of expression type.
+     * @generated NOT
+     */
+    public void setId( String newId )
+    {
+        if( getType() == null )
+            setType( DesignFactory.eINSTANCE.createFilterExpressionType() );
+        
+        getType().setId( newId );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected AtomicExpressionContext getContextGen()
+    {
+        return m_context;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.CustomFilterExpression#getContext()
+     * @generated NOT
+     */
+    public AtomicExpressionContext getContext()
+    {
+        if( getContextGen() == null )
+            setContext( DesignFactory.eINSTANCE.createAtomicExpressionContext() );
+        return getContextGen();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetContext(
+            AtomicExpressionContext newContext, NotificationChain msgs )
+    {
+        AtomicExpressionContext oldContext = m_context;
+        m_context = newContext;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.CUSTOM_FILTER_EXPRESSION__CONTEXT,
+                    oldContext, newContext );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setContext( AtomicExpressionContext newContext )
+    {
+        if( newContext != m_context )
+        {
+            NotificationChain msgs = null;
+            if( m_context != null )
+                msgs = ((InternalEObject) m_context)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.CUSTOM_FILTER_EXPRESSION__CONTEXT,
+                                null, msgs );
+            if( newContext != null )
+                msgs = ((InternalEObject) newContext)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.CUSTOM_FILTER_EXPRESSION__CONTEXT,
+                                null, msgs );
+            msgs = basicSetContext( newContext, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.CUSTOM_FILTER_EXPRESSION__CONTEXT,
+                    newContext, newContext ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.CUSTOM_FILTER_EXPRESSION__TYPE:
+            return basicSetType( null, msgs );
+        case DesignPackage.CUSTOM_FILTER_EXPRESSION__CONTEXT:
+            return basicSetContext( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.CUSTOM_FILTER_EXPRESSION__TYPE:
+            return getType();
+        case DesignPackage.CUSTOM_FILTER_EXPRESSION__CONTEXT:
+            return getContext();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.CUSTOM_FILTER_EXPRESSION__TYPE:
+            setType( (FilterExpressionType) newValue );
+            return;
+        case DesignPackage.CUSTOM_FILTER_EXPRESSION__CONTEXT:
+            setContext( (AtomicExpressionContext) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.CUSTOM_FILTER_EXPRESSION__TYPE:
+            setType( (FilterExpressionType) null );
+            return;
+        case DesignPackage.CUSTOM_FILTER_EXPRESSION__CONTEXT:
+            setContext( (AtomicExpressionContext) null );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.CUSTOM_FILTER_EXPRESSION__TYPE:
+            return m_type != null;
+        case DesignPackage.CUSTOM_FILTER_EXPRESSION__CONTEXT:
+            return m_context != null;
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.CustomFilterExpression#isOptional()
+     * @generated NOT
+     */
+    public boolean isOptional()
+    {
+        return getContext().isOptional();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.CustomFilterExpression#setIsOptional(boolean)
+     * @generated NOT
+     */
+    public void setIsOptional( boolean isOptional )
+    {
+        getContext().setOptional( isOptional );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.CustomFilterExpression#getContextVariable()
+     * @generated NOT
+     */
+    public ExpressionVariable getContextVariable()
+    {
+        return getContext().getVariable();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.CustomFilterExpression#setContextVariable(org.eclipse.datatools.connectivity.oda.design.ExpressionVariable)
+     * @generated NOT
+     */
+    public void setContextVariable( ExpressionVariable variable )
+    {
+        getContext().setVariable( variable );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.CustomFilterExpression#getContextArguments()
+     * @generated NOT
+     */
+    public ExpressionArguments getContextArguments()
+    {
+        return getContext().getArguments();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.CustomFilterExpression#setContextArguments(org.eclipse.datatools.connectivity.oda.design.ExpressionArguments)
+     * @generated NOT
+     */
+    public void setContextArguments( ExpressionArguments arguments )
+    {
+        getContext().setArguments( arguments );
+    }
+
+} //CustomFilterExpressionImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DataAccessDesignImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DataAccessDesignImpl.java
new file mode 100644
index 0000000..9efc0f0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DataAccessDesignImpl.java
@@ -0,0 +1,283 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DataAccessDesignImpl.java,v 1.6 2007/04/11 02:59:53 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DataAccessDesign;
+import org.eclipse.datatools.connectivity.oda.design.DataSetDesign;
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Data Access Design</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataAccessDesignImpl#getDataSetDesign <em>Data Set Design</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DataAccessDesignImpl extends EObjectImpl implements
+        DataAccessDesign
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * @generated NOT
+     */
+    public static final String EMPTY_STR = ""; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getDataSetDesign() <em>Data Set Design</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDataSetDesign()
+     * @generated
+     * @ordered
+     */
+    protected DataSetDesign m_dataSetDesign;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected DataAccessDesignImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.DATA_ACCESS_DESIGN;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataAccessDesign#getOdaExtensionDataSourceId()
+     * @generated NOT
+     */
+    public String getOdaExtensionDataSourceId()
+    {
+        DataSetDesign dataSet = getDataSetDesign();
+        return (dataSet == null) ? null : dataSet.getOdaExtensionDataSourceId();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataAccessDesign#getDataSourceDesign()
+     * @generated NOT
+     */
+    public DataSourceDesign getDataSourceDesign()
+    {
+        if( getDataSetDesign() == null )
+            return null;
+
+        return getDataSetDesign().getDataSourceDesign();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataAccessDesign#setNewDataSetDesign(org.eclipse.datatools.connectivity.oda.design.DataSourceDesign)
+     * @generated NOT
+     */
+    public void setNewDataSetDesign( DataSourceDesign dataSourceDesign )
+    {
+        if( dataSourceDesign == null )
+            return; // no need to create an empty data set; leaves as empty
+
+        DataSetDesign newDataSet = DesignFactory.eINSTANCE
+                .createDataSetDesign();
+        // set empty strings for required attributes in data set design
+        newDataSet.setName( EMPTY_STR );
+        newDataSet.setQueryText( EMPTY_STR );
+
+        // associate the given data source design to the empty data set
+        newDataSet.setDataSourceDesign( dataSourceDesign );
+
+        setDataSetDesign( newDataSet );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DataSetDesign getDataSetDesign()
+    {
+        return m_dataSetDesign;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetDataSetDesign(
+            DataSetDesign newDataSetDesign, NotificationChain msgs )
+    {
+        DataSetDesign oldDataSetDesign = m_dataSetDesign;
+        m_dataSetDesign = newDataSetDesign;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.DATA_ACCESS_DESIGN__DATA_SET_DESIGN,
+                    oldDataSetDesign, newDataSetDesign );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setDataSetDesign( DataSetDesign newDataSetDesign )
+    {
+        if( newDataSetDesign != m_dataSetDesign )
+        {
+            NotificationChain msgs = null;
+            if( m_dataSetDesign != null )
+                msgs = ((InternalEObject) m_dataSetDesign)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DATA_ACCESS_DESIGN__DATA_SET_DESIGN,
+                                null, msgs );
+            if( newDataSetDesign != null )
+                msgs = ((InternalEObject) newDataSetDesign)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DATA_ACCESS_DESIGN__DATA_SET_DESIGN,
+                                null, msgs );
+            msgs = basicSetDataSetDesign( newDataSetDesign, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_ACCESS_DESIGN__DATA_SET_DESIGN,
+                    newDataSetDesign, newDataSetDesign ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_ACCESS_DESIGN__DATA_SET_DESIGN:
+            return basicSetDataSetDesign( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_ACCESS_DESIGN__DATA_SET_DESIGN:
+            return getDataSetDesign();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_ACCESS_DESIGN__DATA_SET_DESIGN:
+            setDataSetDesign( (DataSetDesign) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_ACCESS_DESIGN__DATA_SET_DESIGN:
+            setDataSetDesign( (DataSetDesign) null );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_ACCESS_DESIGN__DATA_SET_DESIGN:
+            return m_dataSetDesign != null;
+        }
+        return super.eIsSet( featureID );
+    }
+
+} //DataAccessDesignImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DataElementAttributesImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DataElementAttributesImpl.java
new file mode 100644
index 0000000..65bbd90
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DataElementAttributesImpl.java
@@ -0,0 +1,1131 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DataElementAttributesImpl.java,v 1.10 2009/04/24 03:20:26 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DataElementAttributes;
+import org.eclipse.datatools.connectivity.oda.design.DataElementIdentifier;
+import org.eclipse.datatools.connectivity.oda.design.DataElementUIHints;
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.ElementNullability;
+import org.eclipse.datatools.connectivity.oda.design.OdaScalarDataType;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Data Element Attributes</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataElementAttributesImpl#getIdentifier <em>Identifier</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataElementAttributesImpl#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataElementAttributesImpl#getPosition <em>Position</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataElementAttributesImpl#getNativeDataTypeCode <em>Native Data Type Code</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataElementAttributesImpl#getPrecision <em>Precision</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataElementAttributesImpl#getScale <em>Scale</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataElementAttributesImpl#getNullability <em>Nullability</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataElementAttributesImpl#getUiHints <em>Ui Hints</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DataElementAttributesImpl extends EObjectImpl implements
+        DataElementAttributes
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getIdentifier() <em>Identifier</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getIdentifier()
+     * @generated
+     * @ordered
+     * @since 3.3.2
+     */
+    protected DataElementIdentifier m_identifier;
+
+    /**
+     * @generated NOT
+     */
+    protected static final String EMPTY_STR = ""; //$NON-NLS-1$
+
+    /**
+     * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getName()
+     * @generated
+     * @ordered
+     */
+    protected static final String NAME_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getName()
+     * @generated
+     * @ordered
+     * @deprecated  since 3.3.2; replaced by m_identifier
+     */
+    protected String m_name = NAME_EDEFAULT;
+
+    /**
+     * The default value of the '{@link #getPosition() <em>Position</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getPosition()
+     * @generated
+     * @ordered
+     */
+    protected static final int POSITION_EDEFAULT = 0;
+
+    /**
+     * The cached value of the '{@link #getPosition() <em>Position</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getPosition()
+     * @generated
+     * @ordered
+     * @deprecated  since 3.3.2; replaced by m_identifier
+     */
+    protected int m_position = POSITION_EDEFAULT;
+
+    /**
+     * This is true if the Position attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_positionESet;
+
+    /**
+     * The default value of the '{@link #getNativeDataTypeCode() <em>Native Data Type Code</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getNativeDataTypeCode()
+     * @generated
+     * @ordered
+     */
+    protected static final int NATIVE_DATA_TYPE_CODE_EDEFAULT = 0;
+
+    /**
+     * The cached value of the '{@link #getNativeDataTypeCode() <em>Native Data Type Code</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getNativeDataTypeCode()
+     * @generated
+     * @ordered
+     */
+    protected int m_nativeDataTypeCode = NATIVE_DATA_TYPE_CODE_EDEFAULT;
+
+    /**
+     * This is true if the Native Data Type Code attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_nativeDataTypeCodeESet;
+
+    /**
+     * The default value of the '{@link #getPrecision() <em>Precision</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getPrecision()
+     * @generated
+     * @ordered
+     */
+    protected static final int PRECISION_EDEFAULT = -1;
+
+    /**
+     * The cached value of the '{@link #getPrecision() <em>Precision</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getPrecision()
+     * @generated
+     * @ordered
+     */
+    protected int m_precision = PRECISION_EDEFAULT;
+
+    /**
+     * This is true if the Precision attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_precisionESet;
+
+    /**
+     * The default value of the '{@link #getScale() <em>Scale</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getScale()
+     * @generated
+     * @ordered
+     */
+    protected static final int SCALE_EDEFAULT = -1;
+
+    /**
+     * The cached value of the '{@link #getScale() <em>Scale</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getScale()
+     * @generated
+     * @ordered
+     */
+    protected int m_scale = SCALE_EDEFAULT;
+
+    /**
+     * This is true if the Scale attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_scaleESet;
+
+    /**
+     * The default value of the '{@link #getNullability() <em>Nullability</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getNullability()
+     * @generated
+     * @ordered
+     */
+    protected static final ElementNullability NULLABILITY_EDEFAULT = ElementNullability.UNKNOWN_LITERAL;
+
+    /**
+     * The cached value of the '{@link #getNullability() <em>Nullability</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getNullability()
+     * @generated
+     * @ordered
+     */
+    protected ElementNullability m_nullability = NULLABILITY_EDEFAULT;
+
+    /**
+     * This is true if the Nullability attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_nullabilityESet;
+
+    /**
+     * The cached value of the '{@link #getUiHints() <em>Ui Hints</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getUiHints()
+     * @generated
+     * @ordered
+     */
+    protected DataElementUIHints m_uiHints;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected DataElementAttributesImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.DATA_ELEMENT_ATTRIBUTES;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DataElementIdentifier getIdentifier()
+    {
+        return m_identifier;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetIdentifier(
+            DataElementIdentifier newIdentifier, NotificationChain msgs )
+    {
+        DataElementIdentifier oldIdentifier = m_identifier;
+        m_identifier = newIdentifier;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.DATA_ELEMENT_ATTRIBUTES__IDENTIFIER,
+                    oldIdentifier, newIdentifier );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setIdentifier( DataElementIdentifier newIdentifier )
+    {
+        if( newIdentifier != m_identifier )
+        {
+            NotificationChain msgs = null;
+            if( m_identifier != null )
+                msgs = ((InternalEObject) m_identifier)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DATA_ELEMENT_ATTRIBUTES__IDENTIFIER,
+                                null, msgs );
+            if( newIdentifier != null )
+                msgs = ((InternalEObject) newIdentifier)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DATA_ELEMENT_ATTRIBUTES__IDENTIFIER,
+                                null, msgs );
+            msgs = basicSetIdentifier( newIdentifier, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_ELEMENT_ATTRIBUTES__IDENTIFIER,
+                    newIdentifier, newIdentifier ) );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#setApplicablePrecision(int, org.eclipse.datatools.connectivity.oda.design.OdaScalarDataType)
+     * @generated NOT
+     */
+    public void setApplicablePrecision( int value, OdaScalarDataType odaDataType )
+    {
+        switch( odaDataType.getValue() )
+        {
+        // precision is not applicable for these data types
+        case OdaScalarDataType.DATE:
+        case OdaScalarDataType.TIME:
+        case OdaScalarDataType.TIMESTAMP:
+        case OdaScalarDataType.BOOLEAN:
+            setPrecision( PRECISION_EDEFAULT );
+            break;
+        case OdaScalarDataType.DOUBLE:
+        case OdaScalarDataType.INTEGER:
+        case OdaScalarDataType.STRING:
+        case OdaScalarDataType.DECIMAL:
+        case OdaScalarDataType.BLOB:
+        case OdaScalarDataType.CLOB:
+        default:
+            setPrecision( value );
+            break;
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#setApplicableScale(int, org.eclipse.datatools.connectivity.oda.design.OdaScalarDataType)
+     * @generated NOT
+     */
+    public void setApplicableScale( int value, OdaScalarDataType odaDataType )
+    {
+        switch( odaDataType.getValue() )
+        {
+        // scale is not applicable for these data types
+        case OdaScalarDataType.DATE:
+        case OdaScalarDataType.TIME:
+        case OdaScalarDataType.TIMESTAMP:
+        case OdaScalarDataType.STRING:
+        case OdaScalarDataType.BLOB:
+        case OdaScalarDataType.CLOB:
+        case OdaScalarDataType.BOOLEAN:
+            setScale( SCALE_EDEFAULT );
+            break;
+        case OdaScalarDataType.INTEGER:
+            setScale( (short) 0 );
+            break;
+        case OdaScalarDataType.DOUBLE:
+        case OdaScalarDataType.DECIMAL:
+        default:
+            setScale( value );
+            break;
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#allowsNull()
+     * @generated NOT
+     */
+    public boolean allowsNull()
+    {
+        return (getNullability().getValue() == ElementNullability.NULLABLE);
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#setUiDisplayName(java.lang.String)
+     * @generated NOT
+     */
+    public void setUiDisplayName( String value )
+    {
+        // sets attribute in current UIHints, if exists;
+        // otherwise, creates a new one
+        DataElementUIHints uiHints = getUiHints();
+        boolean hasNoUIHints = (uiHints == null);
+        if( hasNoUIHints )
+            uiHints = DesignFactory.eINSTANCE.createDataElementUIHints();
+        uiHints.setDisplayName( value );
+
+        if( hasNoUIHints )
+            setUiHints( uiHints );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#setUiDescription(java.lang.String)
+     * @generated NOT
+     */
+    public void setUiDescription( String value )
+    {
+        // sets attribute in current UIHints, if exists;
+        // otherwise, creates a new one
+        DataElementUIHints uiHints = getUiHints();
+        boolean hasNoUIHints = (uiHints == null);
+        if( hasNoUIHints )
+            uiHints = DesignFactory.eINSTANCE.createDataElementUIHints();
+        uiHints.setDescription( value );
+
+        if( hasNoUIHints )
+            setUiHints( uiHints );
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getName()
+     * @generated NOT
+     */
+    public String getName()
+    {
+        // the name attribute should now be stored in the associated identifier;
+        // for backward compatibility of previously persisted object,
+        // use the one in deprecated member variable, if exists
+        String elementName = getNameGen();
+        if( elementName != NAME_EDEFAULT )
+            return elementName;
+        return getNameInIdentifier();
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected String getNameGen()
+    {
+        return m_name;
+    }
+
+    /**
+     * Returns the element name stored in the associated identifier.
+     * @generated NOT
+     */
+    protected String getNameInIdentifier()
+    {
+        DataElementIdentifier identifier = getIdentifier();
+        if( identifier == null )
+            return NAME_EDEFAULT;
+
+        return identifier.getName();
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#setName(java.lang.String)
+     * @generated NOT
+     */
+    public void setName( String newName )
+    {
+        // the name attribute should now be stored in the associated identifier;
+        // clear any existing value in the deprecated member variable
+        if( getNameGen() != NAME_EDEFAULT )
+            setNameGen( NAME_EDEFAULT );
+        setNameInIdentifier( newName );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setNameGen( String newName )
+    {
+        String oldName = m_name;
+        m_name = newName;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_ELEMENT_ATTRIBUTES__NAME, oldName,
+                    m_name ) );
+    }
+    
+    /**
+     * Set the element name in the associated identifier.
+     * @generated NOT
+     */
+    protected void setNameInIdentifier( String newName )
+    {
+        DataElementIdentifier identifier = getIdentifier();
+        if( identifier == null )
+        {
+            identifier = DesignFactory.eINSTANCE.createDataElementIdentifier();
+            setIdentifier( identifier );
+        }
+
+        identifier.setName( newName );
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#getPosition()
+     * @generated NOT
+     */
+    public int getPosition()
+    {
+        // the position attribute should now be stored in the associated identifier;
+        // for backward compatibility of previously persisted object,
+        // use the one in deprecated member variable, if exists
+        if( isSetPosition() )
+            return getPositionGen();
+        return getPositionInIdentifier();
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected int getPositionGen()
+    {
+        return m_position;
+    }
+    
+    /**
+     * Returns the element position stored in the associated identifier.
+     * @generated NOT
+     */
+    protected int getPositionInIdentifier()
+    {
+        DataElementIdentifier identifier = getIdentifier();
+        if( identifier == null )
+            return POSITION_EDEFAULT;
+
+        return identifier.getPosition();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementAttributes#setPosition(int)
+     * @generated NOT
+     */
+    public void setPosition( int newPosition )
+    {   
+        // the position attribute should now be stored in the associated identifier;
+        // clear any existing value in the deprecated member variable
+        if( isSetPosition() )
+            unsetPosition();
+        setPositionInIdentifier( newPosition );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setPositionGen( int newPosition )
+    {
+        int oldPosition = m_position;
+        m_position = newPosition;
+        boolean oldPositionESet = m_positionESet;
+        m_positionESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_ELEMENT_ATTRIBUTES__POSITION,
+                    oldPosition, m_position, !oldPositionESet ) );
+    }
+    
+    /**
+     * Sets the element position in the associated identifier.
+     * @param newPosition
+     * @generated NOT
+     */
+    protected void setPositionInIdentifier( int newPosition )
+    {
+        DataElementIdentifier identifier = getIdentifier();
+        if( identifier == null )
+        {
+            identifier = DesignFactory.eINSTANCE.createDataElementIdentifier();
+            setIdentifier( identifier );
+        }
+
+        identifier.setPosition( newPosition );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetPosition()
+    {
+        int oldPosition = m_position;
+        boolean oldPositionESet = m_positionESet;
+        m_position = POSITION_EDEFAULT;
+        m_positionESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.DATA_ELEMENT_ATTRIBUTES__POSITION,
+                    oldPosition, POSITION_EDEFAULT, oldPositionESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetPosition()
+    {
+        return m_positionESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public int getNativeDataTypeCode()
+    {
+        return m_nativeDataTypeCode;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setNativeDataTypeCode( int newNativeDataTypeCode )
+    {
+        int oldNativeDataTypeCode = m_nativeDataTypeCode;
+        m_nativeDataTypeCode = newNativeDataTypeCode;
+        boolean oldNativeDataTypeCodeESet = m_nativeDataTypeCodeESet;
+        m_nativeDataTypeCodeESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.DATA_ELEMENT_ATTRIBUTES__NATIVE_DATA_TYPE_CODE,
+                    oldNativeDataTypeCode, m_nativeDataTypeCode,
+                    !oldNativeDataTypeCodeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetNativeDataTypeCode()
+    {
+        int oldNativeDataTypeCode = m_nativeDataTypeCode;
+        boolean oldNativeDataTypeCodeESet = m_nativeDataTypeCodeESet;
+        m_nativeDataTypeCode = NATIVE_DATA_TYPE_CODE_EDEFAULT;
+        m_nativeDataTypeCodeESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl(
+                    this,
+                    Notification.UNSET,
+                    DesignPackage.DATA_ELEMENT_ATTRIBUTES__NATIVE_DATA_TYPE_CODE,
+                    oldNativeDataTypeCode, NATIVE_DATA_TYPE_CODE_EDEFAULT,
+                    oldNativeDataTypeCodeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetNativeDataTypeCode()
+    {
+        return m_nativeDataTypeCodeESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public int getPrecision()
+    {
+        return m_precision;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setPrecision( int newPrecision )
+    {
+        int oldPrecision = m_precision;
+        m_precision = newPrecision;
+        boolean oldPrecisionESet = m_precisionESet;
+        m_precisionESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_ELEMENT_ATTRIBUTES__PRECISION,
+                    oldPrecision, m_precision, !oldPrecisionESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetPrecision()
+    {
+        int oldPrecision = m_precision;
+        boolean oldPrecisionESet = m_precisionESet;
+        m_precision = PRECISION_EDEFAULT;
+        m_precisionESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.DATA_ELEMENT_ATTRIBUTES__PRECISION,
+                    oldPrecision, PRECISION_EDEFAULT, oldPrecisionESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetPrecision()
+    {
+        return m_precisionESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public int getScale()
+    {
+        return m_scale;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setScale( int newScale )
+    {
+        int oldScale = m_scale;
+        m_scale = newScale;
+        boolean oldScaleESet = m_scaleESet;
+        m_scaleESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_ELEMENT_ATTRIBUTES__SCALE, oldScale,
+                    m_scale, !oldScaleESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetScale()
+    {
+        int oldScale = m_scale;
+        boolean oldScaleESet = m_scaleESet;
+        m_scale = SCALE_EDEFAULT;
+        m_scaleESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.DATA_ELEMENT_ATTRIBUTES__SCALE, oldScale,
+                    SCALE_EDEFAULT, oldScaleESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetScale()
+    {
+        return m_scaleESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ElementNullability getNullability()
+    {
+        return m_nullability;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setNullability( ElementNullability newNullability )
+    {
+        ElementNullability oldNullability = m_nullability;
+        m_nullability = newNullability == null ? NULLABILITY_EDEFAULT
+                : newNullability;
+        boolean oldNullabilityESet = m_nullabilityESet;
+        m_nullabilityESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_ELEMENT_ATTRIBUTES__NULLABILITY,
+                    oldNullability, m_nullability, !oldNullabilityESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetNullability()
+    {
+        ElementNullability oldNullability = m_nullability;
+        boolean oldNullabilityESet = m_nullabilityESet;
+        m_nullability = NULLABILITY_EDEFAULT;
+        m_nullabilityESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.DATA_ELEMENT_ATTRIBUTES__NULLABILITY,
+                    oldNullability, NULLABILITY_EDEFAULT, oldNullabilityESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetNullability()
+    {
+        return m_nullabilityESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DataElementUIHints getUiHints()
+    {
+        return m_uiHints;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetUiHints( DataElementUIHints newUiHints,
+            NotificationChain msgs )
+    {
+        DataElementUIHints oldUiHints = m_uiHints;
+        m_uiHints = newUiHints;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.DATA_ELEMENT_ATTRIBUTES__UI_HINTS,
+                    oldUiHints, newUiHints );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setUiHints( DataElementUIHints newUiHints )
+    {
+        if( newUiHints != m_uiHints )
+        {
+            NotificationChain msgs = null;
+            if( m_uiHints != null )
+                msgs = ((InternalEObject) m_uiHints)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DATA_ELEMENT_ATTRIBUTES__UI_HINTS,
+                                null, msgs );
+            if( newUiHints != null )
+                msgs = ((InternalEObject) newUiHints)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DATA_ELEMENT_ATTRIBUTES__UI_HINTS,
+                                null, msgs );
+            msgs = basicSetUiHints( newUiHints, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_ELEMENT_ATTRIBUTES__UI_HINTS,
+                    newUiHints, newUiHints ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__IDENTIFIER:
+            return basicSetIdentifier( null, msgs );
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__UI_HINTS:
+            return basicSetUiHints( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__IDENTIFIER:
+            return getIdentifier();
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__NAME:
+            return getName();
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__POSITION:
+            return new Integer( getPosition() );
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__NATIVE_DATA_TYPE_CODE:
+            return new Integer( getNativeDataTypeCode() );
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__PRECISION:
+            return new Integer( getPrecision() );
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__SCALE:
+            return new Integer( getScale() );
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__NULLABILITY:
+            return getNullability();
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__UI_HINTS:
+            return getUiHints();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__IDENTIFIER:
+            setIdentifier( (DataElementIdentifier) newValue );
+            return;
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__NAME:
+            setName( (String) newValue );
+            return;
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__POSITION:
+            setPosition( ((Integer) newValue).intValue() );
+            return;
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__NATIVE_DATA_TYPE_CODE:
+            setNativeDataTypeCode( ((Integer) newValue).intValue() );
+            return;
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__PRECISION:
+            setPrecision( ((Integer) newValue).intValue() );
+            return;
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__SCALE:
+            setScale( ((Integer) newValue).intValue() );
+            return;
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__NULLABILITY:
+            setNullability( (ElementNullability) newValue );
+            return;
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__UI_HINTS:
+            setUiHints( (DataElementUIHints) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__IDENTIFIER:
+            setIdentifier( (DataElementIdentifier) null );
+            return;
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__NAME:
+            setName( NAME_EDEFAULT );
+            return;
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__POSITION:
+            unsetPosition();
+            return;
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__NATIVE_DATA_TYPE_CODE:
+            unsetNativeDataTypeCode();
+            return;
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__PRECISION:
+            unsetPrecision();
+            return;
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__SCALE:
+            unsetScale();
+            return;
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__NULLABILITY:
+            unsetNullability();
+            return;
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__UI_HINTS:
+            setUiHints( (DataElementUIHints) null );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__IDENTIFIER:
+            return m_identifier != null;
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__NAME:
+            return NAME_EDEFAULT == null ? m_name != null : !NAME_EDEFAULT
+                    .equals( m_name );
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__POSITION:
+            return isSetPosition();
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__NATIVE_DATA_TYPE_CODE:
+            return isSetNativeDataTypeCode();
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__PRECISION:
+            return isSetPrecision();
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__SCALE:
+            return isSetScale();
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__NULLABILITY:
+            return isSetNullability();
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES__UI_HINTS:
+            return m_uiHints != null;
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (name: " ); //$NON-NLS-1$
+        result.append( m_name );
+        result.append( ", position: " ); //$NON-NLS-1$
+        if( m_positionESet )
+            result.append( m_position );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ", nativeDataTypeCode: " ); //$NON-NLS-1$
+        if( m_nativeDataTypeCodeESet )
+            result.append( m_nativeDataTypeCode );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ", precision: " ); //$NON-NLS-1$
+        if( m_precisionESet )
+            result.append( m_precision );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ", scale: " ); //$NON-NLS-1$
+        if( m_scaleESet )
+            result.append( m_scale );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ", nullability: " ); //$NON-NLS-1$
+        if( m_nullabilityESet )
+            result.append( m_nullability );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //DataElementAttributesImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DataElementIdentifierImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DataElementIdentifierImpl.java
new file mode 100644
index 0000000..e0dbeee
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DataElementIdentifierImpl.java
@@ -0,0 +1,332 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DataElementIdentifier;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Data Element Identifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataElementIdentifierImpl#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataElementIdentifierImpl#getPosition <em>Position</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DataElementIdentifierImpl extends EObjectImpl implements
+        DataElementIdentifier
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * @generated NOT
+     */
+    protected static final String EMPTY_STR = ""; //$NON-NLS-1$
+
+    /**
+     * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getName()
+     * @generated
+     * @ordered
+     */
+    protected static final String NAME_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getName()
+     * @generated
+     * @ordered
+     */
+    protected String m_name = NAME_EDEFAULT;
+
+    /**
+     * The default value of the '{@link #getPosition() <em>Position</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getPosition()
+     * @generated
+     * @ordered
+     */
+    protected static final int POSITION_EDEFAULT = 0;
+
+    /**
+     * The cached value of the '{@link #getPosition() <em>Position</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getPosition()
+     * @generated
+     * @ordered
+     */
+    protected int m_position = POSITION_EDEFAULT;
+
+    /**
+     * This is true if the Position attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_positionESet;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected DataElementIdentifierImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.DATA_ELEMENT_IDENTIFIER;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getName()
+    {
+        return m_name;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementIdentifier#setName(java.lang.String)
+     * @generated NOT
+     */
+    public void setName( String newName )
+    {
+        if( newName == null )
+            newName = EMPTY_STR; // cannot be null per design definition
+        setNameGen( newName );
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void setNameGen( String newName )
+    {
+        String oldName = m_name;
+        m_name = newName;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_ELEMENT_IDENTIFIER__NAME, oldName,
+                    m_name ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public int getPosition()
+    {
+        return m_position;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementIdentifier#setPosition(int)
+     * @generated NOT
+     */
+    public void setPosition( int newPosition )
+    {
+        setPositionGen( newPosition );
+
+        /* If a data element can only be identified by position, 
+         * its name may be empty.
+         * Set required name field to empty by default.
+         */
+        if( getName() == NAME_EDEFAULT ) // not yet set
+            setName( EMPTY_STR );
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void setPositionGen( int newPosition )
+    {
+        int oldPosition = m_position;
+        m_position = newPosition;
+        boolean oldPositionESet = m_positionESet;
+        m_positionESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_ELEMENT_IDENTIFIER__POSITION,
+                    oldPosition, m_position, !oldPositionESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetPosition()
+    {
+        int oldPosition = m_position;
+        boolean oldPositionESet = m_positionESet;
+        m_position = POSITION_EDEFAULT;
+        m_positionESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.DATA_ELEMENT_IDENTIFIER__POSITION,
+                    oldPosition, POSITION_EDEFAULT, oldPositionESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetPosition()
+    {
+        return m_positionESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_ELEMENT_IDENTIFIER__NAME:
+            return getName();
+        case DesignPackage.DATA_ELEMENT_IDENTIFIER__POSITION:
+            return new Integer( getPosition() );
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_ELEMENT_IDENTIFIER__NAME:
+            setName( (String) newValue );
+            return;
+        case DesignPackage.DATA_ELEMENT_IDENTIFIER__POSITION:
+            setPosition( ((Integer) newValue).intValue() );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_ELEMENT_IDENTIFIER__NAME:
+            setName( NAME_EDEFAULT );
+            return;
+        case DesignPackage.DATA_ELEMENT_IDENTIFIER__POSITION:
+            unsetPosition();
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_ELEMENT_IDENTIFIER__NAME:
+            return NAME_EDEFAULT == null ? m_name != null : !NAME_EDEFAULT
+                    .equals( m_name );
+        case DesignPackage.DATA_ELEMENT_IDENTIFIER__POSITION:
+            return isSetPosition();
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (name: " ); //$NON-NLS-1$
+        result.append( m_name );
+        result.append( ", position: " ); //$NON-NLS-1$
+        if( m_positionESet )
+            result.append( m_position );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //DataElementIdentifierImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DataElementIdentifiersImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DataElementIdentifiersImpl.java
new file mode 100644
index 0000000..d7b96d7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DataElementIdentifiersImpl.java
@@ -0,0 +1,193 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.oda.design.DataElementIdentifier;
+import org.eclipse.datatools.connectivity.oda.design.DataElementIdentifiers;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Data Element Identifiers</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataElementIdentifiersImpl#getIdentifiers <em>Identifiers</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DataElementIdentifiersImpl extends EObjectImpl implements
+        DataElementIdentifiers
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getIdentifiers() <em>Identifiers</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getIdentifiers()
+     * @generated
+     * @ordered
+     */
+    protected EList<DataElementIdentifier> m_identifiers;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected DataElementIdentifiersImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.DATA_ELEMENT_IDENTIFIERS;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EList<DataElementIdentifier> getIdentifiers()
+    {
+        if( m_identifiers == null )
+        {
+            m_identifiers = new EObjectContainmentEList<DataElementIdentifier>(
+                    DataElementIdentifier.class, this,
+                    DesignPackage.DATA_ELEMENT_IDENTIFIERS__IDENTIFIERS );
+        }
+        return m_identifiers;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_ELEMENT_IDENTIFIERS__IDENTIFIERS:
+            return ((InternalEList<?>) getIdentifiers()).basicRemove( otherEnd,
+                    msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_ELEMENT_IDENTIFIERS__IDENTIFIERS:
+            return getIdentifiers();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings("unchecked")
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_ELEMENT_IDENTIFIERS__IDENTIFIERS:
+            getIdentifiers().clear();
+            getIdentifiers().addAll(
+                    (Collection<? extends DataElementIdentifier>) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_ELEMENT_IDENTIFIERS__IDENTIFIERS:
+            getIdentifiers().clear();
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_ELEMENT_IDENTIFIERS__IDENTIFIERS:
+            return m_identifiers != null && !m_identifiers.isEmpty();
+        }
+        return super.eIsSet( featureID );
+    }
+
+} //DataElementIdentifiersImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DataElementUIHintsImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DataElementUIHintsImpl.java
new file mode 100644
index 0000000..895fe10
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DataElementUIHintsImpl.java
@@ -0,0 +1,334 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DataElementUIHintsImpl.java,v 1.4 2010/02/17 02:20:38 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DataElementUIHints;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.util.DesignUtil;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Data Element UI Hints</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataElementUIHintsImpl#getDisplayName <em>Display Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataElementUIHintsImpl#getDescription <em>Description</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DataElementUIHintsImpl extends EObjectImpl implements
+        DataElementUIHints
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The default value of the '{@link #getDisplayName() <em>Display Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDisplayName()
+     * @generated
+     * @ordered
+     */
+    protected static final String DISPLAY_NAME_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getDisplayName() <em>Display Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDisplayName()
+     * @generated
+     * @ordered
+     */
+    protected String m_displayName = DISPLAY_NAME_EDEFAULT;
+
+    /**
+     * The default value of the '{@link #getDescription() <em>Description</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDescription()
+     * @generated
+     * @ordered
+     */
+    protected static final String DESCRIPTION_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getDescription() <em>Description</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDescription()
+     * @generated
+     * @ordered
+     */
+    protected String m_description = DESCRIPTION_EDEFAULT;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected DataElementUIHintsImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.DATA_ELEMENT_UI_HINTS;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementUIHints#getDisplayName()
+     * @generated NOT
+     */
+    public String getDisplayName()
+    {
+        return DesignUtil.getDefaultResourceString( getDisplayNameGen() );
+    }
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected String getDisplayNameGen()
+    {
+        return m_displayName;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementUIHints#setDisplayName(java.lang.String)
+     * @generated NOT
+     */
+    public void setDisplayName( String newDisplayName )
+    {
+        String newAttrValue = DesignUtil.addDefaultToResourceAttribute( newDisplayName, getDisplayNameGen() );
+        setDisplayNameGen( newAttrValue );
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void setDisplayNameGen( String newDisplayName )
+    {
+        String oldDisplayName = m_displayName;
+        m_displayName = newDisplayName;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_ELEMENT_UI_HINTS__DISPLAY_NAME,
+                    oldDisplayName, m_displayName ) );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementUIHints#getDisplayNameKey()
+     * @generated NOT
+     */
+    public String getDisplayNameKey()
+    {
+        return DesignUtil.getResourceKey( getDisplayNameGen() );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementUIHints#setDisplayNameKey(java.lang.String)
+     * @generated NOT
+     */
+    public void setDisplayNameKey( String newDisplayNameKey )
+    {
+        String newAttrValue = DesignUtil.addKeyToResourceAttribute( newDisplayNameKey, getDisplayNameGen() );
+        setDisplayNameGen( newAttrValue );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementUIHints#getDescription()
+     * @generated NOT
+     */
+    public String getDescription()
+    {
+        return DesignUtil.getDefaultResourceString( getDescriptionGen() );
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected String getDescriptionGen()
+    {
+        return m_description;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementUIHints#setDescription(java.lang.String)
+     * @generated NOT
+     */
+    public void setDescription( String newDescription )
+    {
+        String newAttrValue = DesignUtil.addDefaultToResourceAttribute( newDescription, getDescriptionGen() );
+        setDescriptionGen( newAttrValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void setDescriptionGen( String newDescription )
+    {
+        String oldDescription = m_description;
+        m_description = newDescription;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_ELEMENT_UI_HINTS__DESCRIPTION,
+                    oldDescription, m_description ) );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementUIHints#getDescriptionKey()
+     * @generated NOT
+     */
+    public String getDescriptionKey()
+    {
+        return DesignUtil.getResourceKey( getDescriptionGen() );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementUIHints#setDescriptionKey(java.lang.String)
+     * @generated NOT
+     */
+    public void setDescriptionKey( String newDescriptionKey )
+    {
+        String newAttrValue = DesignUtil.addKeyToResourceAttribute( newDescriptionKey, getDescriptionGen() );
+        setDescriptionGen( newAttrValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_ELEMENT_UI_HINTS__DISPLAY_NAME:
+            return getDisplayNameGen();
+        case DesignPackage.DATA_ELEMENT_UI_HINTS__DESCRIPTION:
+            return getDescriptionGen();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_ELEMENT_UI_HINTS__DISPLAY_NAME:
+            setDisplayNameGen( (String) newValue );
+            return;
+        case DesignPackage.DATA_ELEMENT_UI_HINTS__DESCRIPTION:
+            setDescriptionGen( (String) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_ELEMENT_UI_HINTS__DISPLAY_NAME:
+            setDisplayNameGen( DISPLAY_NAME_EDEFAULT );
+            return;
+        case DesignPackage.DATA_ELEMENT_UI_HINTS__DESCRIPTION:
+            setDescriptionGen( DESCRIPTION_EDEFAULT );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_ELEMENT_UI_HINTS__DISPLAY_NAME:
+            return DISPLAY_NAME_EDEFAULT == null ? m_displayName != null
+                    : !DISPLAY_NAME_EDEFAULT.equals( m_displayName );
+        case DesignPackage.DATA_ELEMENT_UI_HINTS__DESCRIPTION:
+            return DESCRIPTION_EDEFAULT == null ? m_description != null
+                    : !DESCRIPTION_EDEFAULT.equals( m_description );
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (displayName: " ); //$NON-NLS-1$
+        result.append( m_displayName );
+        result.append( ", description: " ); //$NON-NLS-1$
+        result.append( m_description );
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //DataElementUIHintsImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DataSetDesignImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DataSetDesignImpl.java
new file mode 100644
index 0000000..ba53ce5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DataSetDesignImpl.java
@@ -0,0 +1,1067 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DataSetDesignImpl.java,v 1.13 2010/02/17 02:20:38 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.datatools.connectivity.oda.design.DataSetDesign;
+import org.eclipse.datatools.connectivity.oda.design.DataSetParameters;
+import org.eclipse.datatools.connectivity.oda.design.DataSetQuery;
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.Properties;
+import org.eclipse.datatools.connectivity.oda.design.ResultSetDefinition;
+import org.eclipse.datatools.connectivity.oda.design.ResultSets;
+import org.eclipse.datatools.connectivity.oda.design.util.DesignUtil;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Data Set Design</b></em>'.
+ * @extends IAdaptable
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSetDesignImpl#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSetDesignImpl#getOdaExtensionDataSetId <em>Oda Extension Data Set Id</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSetDesignImpl#getDataSourceDesign <em>Data Source Design</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSetDesignImpl#getQuery <em>Query</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSetDesignImpl#getDisplayName <em>Display Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSetDesignImpl#getPublicProperties <em>Public Properties</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSetDesignImpl#getPrivateProperties <em>Private Properties</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSetDesignImpl#getResultSets <em>Result Sets</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSetDesignImpl#getPrimaryResultSetName <em>Primary Result Set Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSetDesignImpl#getParameters <em>Parameters</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DataSetDesignImpl extends EObjectImpl implements DataSetDesign,
+        IAdaptable
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getName()
+     * @generated
+     * @ordered
+     */
+    protected static final String NAME_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getName()
+     * @generated
+     * @ordered
+     */
+    protected String m_name = NAME_EDEFAULT;
+
+    /**
+     * The default value of the '{@link #getOdaExtensionDataSetId() <em>Oda Extension Data Set Id</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getOdaExtensionDataSetId()
+     * @generated
+     * @ordered
+     */
+    protected static final String ODA_EXTENSION_DATA_SET_ID_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getOdaExtensionDataSetId() <em>Oda Extension Data Set Id</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getOdaExtensionDataSetId()
+     * @generated
+     * @ordered
+     */
+    protected String m_odaExtensionDataSetId = ODA_EXTENSION_DATA_SET_ID_EDEFAULT;
+
+    /**
+     * The cached value of the '{@link #getDataSourceDesign() <em>Data Source Design</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDataSourceDesign()
+     * @generated
+     * @ordered
+     */
+    protected DataSourceDesign m_dataSourceDesign;
+
+    /**
+     * The cached value of the '{@link #getQuery() <em>Query</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getQuery()
+     * @generated
+     * @ordered
+     */
+    protected DataSetQuery m_query;
+
+    /**
+     * The default value of the '{@link #getDisplayName() <em>Display Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDisplayName()
+     * @generated
+     * @ordered
+     */
+    protected static final String DISPLAY_NAME_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getDisplayName() <em>Display Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDisplayName()
+     * @generated
+     * @ordered
+     */
+    protected String m_displayName = DISPLAY_NAME_EDEFAULT;
+
+    /**
+     * The cached value of the '{@link #getPublicProperties() <em>Public Properties</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getPublicProperties()
+     * @generated
+     * @ordered
+     */
+    protected Properties m_publicProperties;
+
+    /**
+     * The cached value of the '{@link #getPrivateProperties() <em>Private Properties</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getPrivateProperties()
+     * @generated
+     * @ordered
+     */
+    protected Properties m_privateProperties;
+
+    /**
+     * The cached value of the '{@link #getResultSets() <em>Result Sets</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getResultSets()
+     * @generated
+     * @ordered
+     */
+    protected ResultSets m_resultSets;
+
+    /**
+     * The default value of the '{@link #getPrimaryResultSetName() <em>Primary Result Set Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getPrimaryResultSetName()
+     * @generated
+     * @ordered
+     */
+    protected static final String PRIMARY_RESULT_SET_NAME_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getPrimaryResultSetName() <em>Primary Result Set Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getPrimaryResultSetName()
+     * @generated
+     * @ordered
+     */
+    protected String m_primaryResultSetName = PRIMARY_RESULT_SET_NAME_EDEFAULT;
+
+    /**
+     * The cached value of the '{@link #getParameters() <em>Parameters</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getParameters()
+     * @generated
+     * @ordered
+     */
+    protected DataSetParameters m_parameters;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected DataSetDesignImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.DATA_SET_DESIGN;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
+     * @generated NOT
+     */
+    @SuppressWarnings("unchecked")
+    public Object getAdapter( Class adapter )
+    {
+        if( adapter.isAssignableFrom( this.getClass() ) )
+            return EcoreUtil.copy( this );
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getOdaExtensionDataSourceId()
+     * @generated NOT
+     */
+    public String getOdaExtensionDataSourceId()
+    {
+        DataSourceDesign dataSource = getDataSourceDesign();
+        return (dataSource == null) ? null : dataSource
+                .getOdaExtensionDataSourceId();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getQueryText()
+     * @generated NOT
+     */
+    public String getQueryText()
+    {
+        DataSetQuery query = getQuery();
+        if( query == null )
+            return null;
+        return query.getQueryText();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSetDesign#setQueryText(java.lang.String)
+     * @generated NOT
+     */
+    public void setQueryText( String queryText )
+    {
+        DataSetQuery query = getQuery();
+        if( query == null )
+        {
+            query = DesignFactory.eINSTANCE.createDataSetQuery();
+            setQuery( query );
+        }
+        query.setQueryText( queryText );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getPrimaryResultSet()
+     * @generated NOT
+     */
+    public ResultSetDefinition getPrimaryResultSet()
+    {
+        if( getResultSets() == null
+                || getResultSets().getResultSetDefinitions().size() == 0 )
+            return null;
+
+        String primaryName = getPrimaryResultSetName();
+        if( primaryName == null || primaryName.length() == 0 )
+        {
+            // takes the first one in collection
+            return (ResultSetDefinition) getResultSets()
+                    .getResultSetDefinitions().get( 0 );
+        }
+
+        // try search by name
+        return getResultSets().findResultSetDefinition( primaryName );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSetDesign#setPrimaryResultSet(org.eclipse.datatools.connectivity.oda.design.ResultSetDefinition)
+     * @generated NOT
+     */
+    public void setPrimaryResultSet( ResultSetDefinition resultSetDefn )
+    {
+        if( resultSetDefn == null )
+            return; // nothing to set
+
+        if( getResultSets() == null )
+            setResultSets( DesignFactory.eINSTANCE.createResultSets() );
+        if( getResultSets().getResultSetDefinitions().isEmpty() )
+            getResultSets().addResultSetDefinition( 0, resultSetDefn );
+        else
+            getResultSets().getResultSetDefinitions().set( 0, resultSetDefn );
+
+        if( resultSetDefn.getName() != null ) // has name
+            setPrimaryResultSetName( resultSetDefn.getName() );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getName()
+    {
+        return m_name;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setName( String newName )
+    {
+        String oldName = m_name;
+        m_name = newName;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_SET_DESIGN__NAME, oldName, m_name ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getOdaExtensionDataSetId()
+    {
+        return m_odaExtensionDataSetId;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setOdaExtensionDataSetId( String newOdaExtensionDataSetId )
+    {
+        String oldOdaExtensionDataSetId = m_odaExtensionDataSetId;
+        m_odaExtensionDataSetId = newOdaExtensionDataSetId;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_SET_DESIGN__ODA_EXTENSION_DATA_SET_ID,
+                    oldOdaExtensionDataSetId, m_odaExtensionDataSetId ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DataSourceDesign getDataSourceDesign()
+    {
+        return m_dataSourceDesign;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetDataSourceDesign(
+            DataSourceDesign newDataSourceDesign, NotificationChain msgs )
+    {
+        DataSourceDesign oldDataSourceDesign = m_dataSourceDesign;
+        m_dataSourceDesign = newDataSourceDesign;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.DATA_SET_DESIGN__DATA_SOURCE_DESIGN,
+                    oldDataSourceDesign, newDataSourceDesign );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setDataSourceDesign( DataSourceDesign newDataSourceDesign )
+    {
+        if( newDataSourceDesign != m_dataSourceDesign )
+        {
+            NotificationChain msgs = null;
+            if( m_dataSourceDesign != null )
+                msgs = ((InternalEObject) m_dataSourceDesign)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DATA_SET_DESIGN__DATA_SOURCE_DESIGN,
+                                null, msgs );
+            if( newDataSourceDesign != null )
+                msgs = ((InternalEObject) newDataSourceDesign)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DATA_SET_DESIGN__DATA_SOURCE_DESIGN,
+                                null, msgs );
+            msgs = basicSetDataSourceDesign( newDataSourceDesign, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_SET_DESIGN__DATA_SOURCE_DESIGN,
+                    newDataSourceDesign, newDataSourceDesign ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DataSetQuery getQuery()
+    {
+        return m_query;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetQuery( DataSetQuery newQuery,
+            NotificationChain msgs )
+    {
+        DataSetQuery oldQuery = m_query;
+        m_query = newQuery;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET, DesignPackage.DATA_SET_DESIGN__QUERY,
+                    oldQuery, newQuery );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setQuery( DataSetQuery newQuery )
+    {
+        if( newQuery != m_query )
+        {
+            NotificationChain msgs = null;
+            if( m_query != null )
+                msgs = ((InternalEObject) m_query).eInverseRemove( this,
+                        EOPPOSITE_FEATURE_BASE
+                                - DesignPackage.DATA_SET_DESIGN__QUERY, null,
+                        msgs );
+            if( newQuery != null )
+                msgs = ((InternalEObject) newQuery).eInverseAdd( this,
+                        EOPPOSITE_FEATURE_BASE
+                                - DesignPackage.DATA_SET_DESIGN__QUERY, null,
+                        msgs );
+            msgs = basicSetQuery( newQuery, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_SET_DESIGN__QUERY, newQuery, newQuery ) );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getDisplayName()
+     * @generated NOT
+     */
+    public String getDisplayName()
+    {
+        return DesignUtil.getDefaultResourceString( getDisplayNameGen() );
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected String getDisplayNameGen()
+    {
+        return m_displayName;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSetDesign#setDisplayName(java.lang.String)
+     * @generated NOT
+     */
+    public void setDisplayName( String newDisplayName )
+    {
+        String newAttrValue = DesignUtil.addDefaultToResourceAttribute( newDisplayName, getDisplayNameGen() );
+        setDisplayNameGen( newAttrValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void setDisplayNameGen( String newDisplayName )
+    {
+        String oldDisplayName = m_displayName;
+        m_displayName = newDisplayName;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_SET_DESIGN__DISPLAY_NAME,
+                    oldDisplayName, m_displayName ) );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSetDesign#getDisplayNameKey()
+     * @generated NOT
+     */
+    public String getDisplayNameKey()
+    {
+        return DesignUtil.getResourceKey( getDisplayNameGen() );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSetDesign#setDisplayNameKey(java.lang.String)
+     * @generated NOT
+     */
+    public void setDisplayNameKey( String newDisplayNameKey )
+    {
+        String newAttrValue = DesignUtil.addKeyToResourceAttribute( newDisplayNameKey, getDisplayNameGen() );
+        setDisplayNameGen( newAttrValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public Properties getPublicProperties()
+    {
+        return m_publicProperties;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetPublicProperties(
+            Properties newPublicProperties, NotificationChain msgs )
+    {
+        Properties oldPublicProperties = m_publicProperties;
+        m_publicProperties = newPublicProperties;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.DATA_SET_DESIGN__PUBLIC_PROPERTIES,
+                    oldPublicProperties, newPublicProperties );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setPublicProperties( Properties newPublicProperties )
+    {
+        if( newPublicProperties != m_publicProperties )
+        {
+            NotificationChain msgs = null;
+            if( m_publicProperties != null )
+                msgs = ((InternalEObject) m_publicProperties)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DATA_SET_DESIGN__PUBLIC_PROPERTIES,
+                                null, msgs );
+            if( newPublicProperties != null )
+                msgs = ((InternalEObject) newPublicProperties)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DATA_SET_DESIGN__PUBLIC_PROPERTIES,
+                                null, msgs );
+            msgs = basicSetPublicProperties( newPublicProperties, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_SET_DESIGN__PUBLIC_PROPERTIES,
+                    newPublicProperties, newPublicProperties ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public Properties getPrivateProperties()
+    {
+        return m_privateProperties;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetPrivateProperties(
+            Properties newPrivateProperties, NotificationChain msgs )
+    {
+        Properties oldPrivateProperties = m_privateProperties;
+        m_privateProperties = newPrivateProperties;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.DATA_SET_DESIGN__PRIVATE_PROPERTIES,
+                    oldPrivateProperties, newPrivateProperties );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setPrivateProperties( Properties newPrivateProperties )
+    {
+        if( newPrivateProperties != m_privateProperties )
+        {
+            NotificationChain msgs = null;
+            if( m_privateProperties != null )
+                msgs = ((InternalEObject) m_privateProperties)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DATA_SET_DESIGN__PRIVATE_PROPERTIES,
+                                null, msgs );
+            if( newPrivateProperties != null )
+                msgs = ((InternalEObject) newPrivateProperties)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DATA_SET_DESIGN__PRIVATE_PROPERTIES,
+                                null, msgs );
+            msgs = basicSetPrivateProperties( newPrivateProperties, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_SET_DESIGN__PRIVATE_PROPERTIES,
+                    newPrivateProperties, newPrivateProperties ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ResultSets getResultSets()
+    {
+        return m_resultSets;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetResultSets( ResultSets newResultSets,
+            NotificationChain msgs )
+    {
+        ResultSets oldResultSets = m_resultSets;
+        m_resultSets = newResultSets;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.DATA_SET_DESIGN__RESULT_SETS, oldResultSets,
+                    newResultSets );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setResultSets( ResultSets newResultSets )
+    {
+        if( newResultSets != m_resultSets )
+        {
+            NotificationChain msgs = null;
+            if( m_resultSets != null )
+                msgs = ((InternalEObject) m_resultSets).eInverseRemove( this,
+                        EOPPOSITE_FEATURE_BASE
+                                - DesignPackage.DATA_SET_DESIGN__RESULT_SETS,
+                        null, msgs );
+            if( newResultSets != null )
+                msgs = ((InternalEObject) newResultSets).eInverseAdd( this,
+                        EOPPOSITE_FEATURE_BASE
+                                - DesignPackage.DATA_SET_DESIGN__RESULT_SETS,
+                        null, msgs );
+            msgs = basicSetResultSets( newResultSets, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_SET_DESIGN__RESULT_SETS, newResultSets,
+                    newResultSets ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getPrimaryResultSetName()
+    {
+        return m_primaryResultSetName;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setPrimaryResultSetName( String newPrimaryResultSetName )
+    {
+        String oldPrimaryResultSetName = m_primaryResultSetName;
+        m_primaryResultSetName = newPrimaryResultSetName;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_SET_DESIGN__PRIMARY_RESULT_SET_NAME,
+                    oldPrimaryResultSetName, m_primaryResultSetName ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DataSetParameters getParameters()
+    {
+        return m_parameters;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetParameters(
+            DataSetParameters newParameters, NotificationChain msgs )
+    {
+        DataSetParameters oldParameters = m_parameters;
+        m_parameters = newParameters;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.DATA_SET_DESIGN__PARAMETERS, oldParameters,
+                    newParameters );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setParameters( DataSetParameters newParameters )
+    {
+        if( newParameters != m_parameters )
+        {
+            NotificationChain msgs = null;
+            if( m_parameters != null )
+                msgs = ((InternalEObject) m_parameters).eInverseRemove( this,
+                        EOPPOSITE_FEATURE_BASE
+                                - DesignPackage.DATA_SET_DESIGN__PARAMETERS,
+                        null, msgs );
+            if( newParameters != null )
+                msgs = ((InternalEObject) newParameters).eInverseAdd( this,
+                        EOPPOSITE_FEATURE_BASE
+                                - DesignPackage.DATA_SET_DESIGN__PARAMETERS,
+                        null, msgs );
+            msgs = basicSetParameters( newParameters, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_SET_DESIGN__PARAMETERS, newParameters,
+                    newParameters ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_SET_DESIGN__DATA_SOURCE_DESIGN:
+            return basicSetDataSourceDesign( null, msgs );
+        case DesignPackage.DATA_SET_DESIGN__QUERY:
+            return basicSetQuery( null, msgs );
+        case DesignPackage.DATA_SET_DESIGN__PUBLIC_PROPERTIES:
+            return basicSetPublicProperties( null, msgs );
+        case DesignPackage.DATA_SET_DESIGN__PRIVATE_PROPERTIES:
+            return basicSetPrivateProperties( null, msgs );
+        case DesignPackage.DATA_SET_DESIGN__RESULT_SETS:
+            return basicSetResultSets( null, msgs );
+        case DesignPackage.DATA_SET_DESIGN__PARAMETERS:
+            return basicSetParameters( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_SET_DESIGN__NAME:
+            return getName();
+        case DesignPackage.DATA_SET_DESIGN__ODA_EXTENSION_DATA_SET_ID:
+            return getOdaExtensionDataSetId();
+        case DesignPackage.DATA_SET_DESIGN__DATA_SOURCE_DESIGN:
+            return getDataSourceDesign();
+        case DesignPackage.DATA_SET_DESIGN__QUERY:
+            return getQuery();
+        case DesignPackage.DATA_SET_DESIGN__DISPLAY_NAME:
+            return getDisplayNameGen();
+        case DesignPackage.DATA_SET_DESIGN__PUBLIC_PROPERTIES:
+            return getPublicProperties();
+        case DesignPackage.DATA_SET_DESIGN__PRIVATE_PROPERTIES:
+            return getPrivateProperties();
+        case DesignPackage.DATA_SET_DESIGN__RESULT_SETS:
+            return getResultSets();
+        case DesignPackage.DATA_SET_DESIGN__PRIMARY_RESULT_SET_NAME:
+            return getPrimaryResultSetName();
+        case DesignPackage.DATA_SET_DESIGN__PARAMETERS:
+            return getParameters();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_SET_DESIGN__NAME:
+            setName( (String) newValue );
+            return;
+        case DesignPackage.DATA_SET_DESIGN__ODA_EXTENSION_DATA_SET_ID:
+            setOdaExtensionDataSetId( (String) newValue );
+            return;
+        case DesignPackage.DATA_SET_DESIGN__DATA_SOURCE_DESIGN:
+            setDataSourceDesign( (DataSourceDesign) newValue );
+            return;
+        case DesignPackage.DATA_SET_DESIGN__QUERY:
+            setQuery( (DataSetQuery) newValue );
+            return;
+        case DesignPackage.DATA_SET_DESIGN__DISPLAY_NAME:
+            setDisplayNameGen( (String) newValue );
+            return;
+        case DesignPackage.DATA_SET_DESIGN__PUBLIC_PROPERTIES:
+            setPublicProperties( (Properties) newValue );
+            return;
+        case DesignPackage.DATA_SET_DESIGN__PRIVATE_PROPERTIES:
+            setPrivateProperties( (Properties) newValue );
+            return;
+        case DesignPackage.DATA_SET_DESIGN__RESULT_SETS:
+            setResultSets( (ResultSets) newValue );
+            return;
+        case DesignPackage.DATA_SET_DESIGN__PRIMARY_RESULT_SET_NAME:
+            setPrimaryResultSetName( (String) newValue );
+            return;
+        case DesignPackage.DATA_SET_DESIGN__PARAMETERS:
+            setParameters( (DataSetParameters) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_SET_DESIGN__NAME:
+            setName( NAME_EDEFAULT );
+            return;
+        case DesignPackage.DATA_SET_DESIGN__ODA_EXTENSION_DATA_SET_ID:
+            setOdaExtensionDataSetId( ODA_EXTENSION_DATA_SET_ID_EDEFAULT );
+            return;
+        case DesignPackage.DATA_SET_DESIGN__DATA_SOURCE_DESIGN:
+            setDataSourceDesign( (DataSourceDesign) null );
+            return;
+        case DesignPackage.DATA_SET_DESIGN__QUERY:
+            setQuery( (DataSetQuery) null );
+            return;
+        case DesignPackage.DATA_SET_DESIGN__DISPLAY_NAME:
+            setDisplayNameGen( DISPLAY_NAME_EDEFAULT );
+            return;
+        case DesignPackage.DATA_SET_DESIGN__PUBLIC_PROPERTIES:
+            setPublicProperties( (Properties) null );
+            return;
+        case DesignPackage.DATA_SET_DESIGN__PRIVATE_PROPERTIES:
+            setPrivateProperties( (Properties) null );
+            return;
+        case DesignPackage.DATA_SET_DESIGN__RESULT_SETS:
+            setResultSets( (ResultSets) null );
+            return;
+        case DesignPackage.DATA_SET_DESIGN__PRIMARY_RESULT_SET_NAME:
+            setPrimaryResultSetName( PRIMARY_RESULT_SET_NAME_EDEFAULT );
+            return;
+        case DesignPackage.DATA_SET_DESIGN__PARAMETERS:
+            setParameters( (DataSetParameters) null );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_SET_DESIGN__NAME:
+            return NAME_EDEFAULT == null ? m_name != null : !NAME_EDEFAULT
+                    .equals( m_name );
+        case DesignPackage.DATA_SET_DESIGN__ODA_EXTENSION_DATA_SET_ID:
+            return ODA_EXTENSION_DATA_SET_ID_EDEFAULT == null ? m_odaExtensionDataSetId != null
+                    : !ODA_EXTENSION_DATA_SET_ID_EDEFAULT
+                            .equals( m_odaExtensionDataSetId );
+        case DesignPackage.DATA_SET_DESIGN__DATA_SOURCE_DESIGN:
+            return m_dataSourceDesign != null;
+        case DesignPackage.DATA_SET_DESIGN__QUERY:
+            return m_query != null;
+        case DesignPackage.DATA_SET_DESIGN__DISPLAY_NAME:
+            return DISPLAY_NAME_EDEFAULT == null ? m_displayName != null
+                    : !DISPLAY_NAME_EDEFAULT.equals( m_displayName );
+        case DesignPackage.DATA_SET_DESIGN__PUBLIC_PROPERTIES:
+            return m_publicProperties != null;
+        case DesignPackage.DATA_SET_DESIGN__PRIVATE_PROPERTIES:
+            return m_privateProperties != null;
+        case DesignPackage.DATA_SET_DESIGN__RESULT_SETS:
+            return m_resultSets != null;
+        case DesignPackage.DATA_SET_DESIGN__PRIMARY_RESULT_SET_NAME:
+            return PRIMARY_RESULT_SET_NAME_EDEFAULT == null ? m_primaryResultSetName != null
+                    : !PRIMARY_RESULT_SET_NAME_EDEFAULT
+                            .equals( m_primaryResultSetName );
+        case DesignPackage.DATA_SET_DESIGN__PARAMETERS:
+            return m_parameters != null;
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (name: " ); //$NON-NLS-1$
+        result.append( m_name );
+        result.append( ", odaExtensionDataSetId: " ); //$NON-NLS-1$
+        result.append( m_odaExtensionDataSetId );
+        result.append( ", displayName: " ); //$NON-NLS-1$
+        result.append( m_displayName );
+        result.append( ", primaryResultSetName: " ); //$NON-NLS-1$
+        result.append( m_primaryResultSetName );
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //DataSetDesignImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DataSetParametersImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DataSetParametersImpl.java
new file mode 100644
index 0000000..00f0450
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DataSetParametersImpl.java
@@ -0,0 +1,308 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DataSetParametersImpl.java,v 1.2 2007/04/11 02:59:52 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.oda.design.DataSetParameters;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.ParameterDefinition;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Data Set Parameters</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSetParametersImpl#getParameterDefinitions <em>Parameter Definitions</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSetParametersImpl#isDerivedMetaData <em>Derived Meta Data</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DataSetParametersImpl extends EObjectImpl implements
+        DataSetParameters
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getParameterDefinitions() <em>Parameter Definitions</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getParameterDefinitions()
+     * @generated
+     * @ordered
+     */
+    protected EList<ParameterDefinition> m_parameterDefinitions;
+
+    /**
+     * The default value of the '{@link #isDerivedMetaData() <em>Derived Meta Data</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isDerivedMetaData()
+     * @generated
+     * @ordered
+     */
+    protected static final boolean DERIVED_META_DATA_EDEFAULT = true;
+
+    /**
+     * The cached value of the '{@link #isDerivedMetaData() <em>Derived Meta Data</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isDerivedMetaData()
+     * @generated
+     * @ordered
+     */
+    protected boolean m_derivedMetaData = DERIVED_META_DATA_EDEFAULT;
+
+    /**
+     * This is true if the Derived Meta Data attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_derivedMetaDataESet;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected DataSetParametersImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.DATA_SET_PARAMETERS;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EList<ParameterDefinition> getParameterDefinitions()
+    {
+        if( m_parameterDefinitions == null )
+        {
+            m_parameterDefinitions = new EObjectContainmentEList<ParameterDefinition>(
+                    ParameterDefinition.class, this,
+                    DesignPackage.DATA_SET_PARAMETERS__PARAMETER_DEFINITIONS );
+        }
+        return m_parameterDefinitions;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isDerivedMetaData()
+    {
+        return m_derivedMetaData;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setDerivedMetaData( boolean newDerivedMetaData )
+    {
+        boolean oldDerivedMetaData = m_derivedMetaData;
+        m_derivedMetaData = newDerivedMetaData;
+        boolean oldDerivedMetaDataESet = m_derivedMetaDataESet;
+        m_derivedMetaDataESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_SET_PARAMETERS__DERIVED_META_DATA,
+                    oldDerivedMetaData, m_derivedMetaData,
+                    !oldDerivedMetaDataESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetDerivedMetaData()
+    {
+        boolean oldDerivedMetaData = m_derivedMetaData;
+        boolean oldDerivedMetaDataESet = m_derivedMetaDataESet;
+        m_derivedMetaData = DERIVED_META_DATA_EDEFAULT;
+        m_derivedMetaDataESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.DATA_SET_PARAMETERS__DERIVED_META_DATA,
+                    oldDerivedMetaData, DERIVED_META_DATA_EDEFAULT,
+                    oldDerivedMetaDataESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetDerivedMetaData()
+    {
+        return m_derivedMetaDataESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_SET_PARAMETERS__PARAMETER_DEFINITIONS:
+            return ((InternalEList<?>) getParameterDefinitions()).basicRemove(
+                    otherEnd, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_SET_PARAMETERS__PARAMETER_DEFINITIONS:
+            return getParameterDefinitions();
+        case DesignPackage.DATA_SET_PARAMETERS__DERIVED_META_DATA:
+            return isDerivedMetaData() ? Boolean.TRUE : Boolean.FALSE;
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings("unchecked")
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_SET_PARAMETERS__PARAMETER_DEFINITIONS:
+            getParameterDefinitions().clear();
+            getParameterDefinitions().addAll(
+                    (Collection<? extends ParameterDefinition>) newValue );
+            return;
+        case DesignPackage.DATA_SET_PARAMETERS__DERIVED_META_DATA:
+            setDerivedMetaData( ((Boolean) newValue).booleanValue() );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_SET_PARAMETERS__PARAMETER_DEFINITIONS:
+            getParameterDefinitions().clear();
+            return;
+        case DesignPackage.DATA_SET_PARAMETERS__DERIVED_META_DATA:
+            unsetDerivedMetaData();
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_SET_PARAMETERS__PARAMETER_DEFINITIONS:
+            return m_parameterDefinitions != null
+                    && !m_parameterDefinitions.isEmpty();
+        case DesignPackage.DATA_SET_PARAMETERS__DERIVED_META_DATA:
+            return isSetDerivedMetaData();
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (derivedMetaData: " ); //$NON-NLS-1$
+        if( m_derivedMetaDataESet )
+            result.append( m_derivedMetaData );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //DataSetParametersImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DataSetQueryImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DataSetQueryImpl.java
new file mode 100644
index 0000000..ffcee23
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DataSetQueryImpl.java
@@ -0,0 +1,198 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DataSetQueryImpl.java,v 1.2 2007/04/11 02:59:52 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DataSetQuery;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Data Set Query</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSetQueryImpl#getQueryText <em>Query Text</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DataSetQueryImpl extends EObjectImpl implements DataSetQuery
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The default value of the '{@link #getQueryText() <em>Query Text</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getQueryText()
+     * @generated
+     * @ordered
+     */
+    protected static final String QUERY_TEXT_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getQueryText() <em>Query Text</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getQueryText()
+     * @generated
+     * @ordered
+     */
+    protected String m_queryText = QUERY_TEXT_EDEFAULT;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected DataSetQueryImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.DATA_SET_QUERY;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getQueryText()
+    {
+        return m_queryText;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setQueryText( String newQueryText )
+    {
+        String oldQueryText = m_queryText;
+        m_queryText = newQueryText;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_SET_QUERY__QUERY_TEXT, oldQueryText,
+                    m_queryText ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_SET_QUERY__QUERY_TEXT:
+            return getQueryText();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_SET_QUERY__QUERY_TEXT:
+            setQueryText( (String) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_SET_QUERY__QUERY_TEXT:
+            setQueryText( QUERY_TEXT_EDEFAULT );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_SET_QUERY__QUERY_TEXT:
+            return QUERY_TEXT_EDEFAULT == null ? m_queryText != null
+                    : !QUERY_TEXT_EDEFAULT.equals( m_queryText );
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (queryText: " ); //$NON-NLS-1$
+        result.append( m_queryText );
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //DataSetQueryImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DataSourceDesignImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DataSourceDesignImpl.java
new file mode 100644
index 0000000..7e5d0a0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DataSourceDesignImpl.java
@@ -0,0 +1,1220 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DataSourceDesignImpl.java,v 1.16 2010/03/13 02:00:28 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import java.io.File;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.Properties;
+import org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers;
+
+import org.eclipse.datatools.connectivity.oda.design.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.design.util.DesignUtil;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Data Source Design</b></em>'.
+ * @extends IAdaptable
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSourceDesignImpl#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSourceDesignImpl#getOdaExtensionId <em>Oda Extension Id</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSourceDesignImpl#getEffectiveOdaExtensionId <em>Effective Oda Extension Id</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSourceDesignImpl#getOdaExtensionDataSourceId <em>Oda Extension Data Source Id</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSourceDesignImpl#getDisplayName <em>Display Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSourceDesignImpl#getPublicProperties <em>Public Properties</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSourceDesignImpl#getPrivateProperties <em>Private Properties</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSourceDesignImpl#getLinkedProfileName <em>Linked Profile Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSourceDesignImpl#getLinkedProfileStoreFilePath <em>Linked Profile Store File Path</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSourceDesignImpl#getHostResourceIdentifiers <em>Host Resource Identifiers</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DataSourceDesignImpl#getResourceFile <em>Resource File</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DataSourceDesignImpl extends EObjectImpl implements
+        DataSourceDesign, IAdaptable
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2011 Actuate Corporation"; //$NON-NLS-1$
+
+    /*
+     * @generated NOT
+     */
+    private static final String RESOURCE_FILE_SUFFIX = ".properties"; //$NON-NLS-1$
+
+    /**
+     * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getName()
+     * @generated
+     * @ordered
+     */
+    protected static final String NAME_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getName()
+     * @generated
+     * @ordered
+     */
+    protected String m_name = NAME_EDEFAULT;
+
+    /**
+     * The default value of the '{@link #getOdaExtensionId() <em>Oda Extension Id</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getOdaExtensionId()
+     * @generated
+     * @ordered
+     */
+    protected static final String ODA_EXTENSION_ID_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getOdaExtensionId() <em>Oda Extension Id</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getOdaExtensionId()
+     * @generated
+     * @ordered
+     */
+    protected String m_odaExtensionId = ODA_EXTENSION_ID_EDEFAULT;
+
+    /**
+     * The default value of the '{@link #getEffectiveOdaExtensionId() <em>Effective Oda Extension Id</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getEffectiveOdaExtensionId()
+     * @generated
+     * @ordered
+     */
+    protected static final String EFFECTIVE_ODA_EXTENSION_ID_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getEffectiveOdaExtensionId() <em>Effective Oda Extension Id</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getEffectiveOdaExtensionId()
+     * @generated
+     * @ordered
+     */
+    protected String m_effectiveOdaExtensionId = EFFECTIVE_ODA_EXTENSION_ID_EDEFAULT;
+
+    /**
+     * The default value of the '{@link #getOdaExtensionDataSourceId() <em>Oda Extension Data Source Id</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getOdaExtensionDataSourceId()
+     * @generated
+     * @ordered
+     */
+    protected static final String ODA_EXTENSION_DATA_SOURCE_ID_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getOdaExtensionDataSourceId() <em>Oda Extension Data Source Id</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getOdaExtensionDataSourceId()
+     * @generated
+     * @ordered
+     */
+    protected String m_odaExtensionDataSourceId = ODA_EXTENSION_DATA_SOURCE_ID_EDEFAULT;
+
+    /**
+     * The default value of the '{@link #getDisplayName() <em>Display Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDisplayName()
+     * @generated
+     * @ordered
+     */
+    protected static final String DISPLAY_NAME_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getDisplayName() <em>Display Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDisplayName()
+     * @generated
+     * @ordered
+     */
+    protected String m_displayName = DISPLAY_NAME_EDEFAULT;
+
+    /**
+     * The cached value of the '{@link #getPublicProperties() <em>Public Properties</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getPublicProperties()
+     * @generated
+     * @ordered
+     */
+    protected Properties m_publicProperties;
+
+    /**
+     * The cached value of the '{@link #getPrivateProperties() <em>Private Properties</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getPrivateProperties()
+     * @generated
+     * @ordered
+     */
+    protected Properties m_privateProperties;
+
+    /**
+     * The default value of the '{@link #getLinkedProfileName() <em>Linked Profile Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getLinkedProfileName()
+     * @generated
+     * @ordered
+     */
+    protected static final String LINKED_PROFILE_NAME_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getLinkedProfileName() <em>Linked Profile Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getLinkedProfileName()
+     * @generated
+     * @ordered
+     * @deprecated  since 3.0.4
+     */
+    protected String m_linkedProfileName = LINKED_PROFILE_NAME_EDEFAULT;
+
+    /**
+     * The default value of the '{@link #getLinkedProfileStoreFilePath() <em>Linked Profile Store File Path</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getLinkedProfileStoreFilePath()
+     * @generated
+     * @ordered
+     */
+    protected static final String LINKED_PROFILE_STORE_FILE_PATH_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getLinkedProfileStoreFilePath() <em>Linked Profile Store File Path</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getLinkedProfileStoreFilePath()
+     * @generated
+     * @ordered
+     * @deprecated  since 3.0.4
+     */
+    protected String m_linkedProfileStoreFilePath = LINKED_PROFILE_STORE_FILE_PATH_EDEFAULT;
+
+    /**
+     * The cached value of the '{@link #getHostResourceIdentifiers() <em>Host Resource Identifiers</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getHostResourceIdentifiers()
+     * @generated
+     * @ordered
+     */
+    protected ResourceIdentifiers m_hostResourceIdentifiers;
+
+    /**
+     * The default value of the '{@link #getResourceFile() <em>Resource File</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getResourceFile()
+     * @generated
+     * @ordered
+     */
+    protected static final String RESOURCE_FILE_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getResourceFile() <em>Resource File</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getResourceFile()
+     * @generated
+     * @ordered
+     */
+    protected String m_resourceFile = RESOURCE_FILE_EDEFAULT;
+
+    /**
+     * property name for storing linked profile instance's name
+     * TODO - share common constants defined by core ODA plugin which introduces new plugin dependency
+     * @generated NOT
+     */
+    private static final String CONN_PROFILE_NAME_PROP = "OdaConnProfileName"; //$NON-NLS-1$
+
+    /**
+     * property name for storing linked profile store file path
+     * TODO - share common constants defined by core ODA plugin
+     * @generated NOT
+     */
+    private static final String CONN_PROFILE_STORE_FILE_PATH_PROP = "OdaConnProfileStorePath"; //$NON-NLS-1$
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected DataSourceDesignImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.DATA_SOURCE_DESIGN;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
+     * @generated NOT
+     */
+    public Object getAdapter( Class adapter )
+    {
+        // TODO - supports adapter to ConnectionProfile class
+        if( adapter.isAssignableFrom( this.getClass() ) )
+            return EcoreUtil.copy( this );
+        return null;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getName()
+    {
+        return m_name;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setName( String newName )
+    {
+        String oldName = m_name;
+        m_name = newName;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_SOURCE_DESIGN__NAME, oldName, m_name ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getOdaExtensionId()
+    {
+        return m_odaExtensionId;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setOdaExtensionId( String newOdaExtensionId )
+    {
+        String oldOdaExtensionId = m_odaExtensionId;
+        m_odaExtensionId = newOdaExtensionId;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_SOURCE_DESIGN__ODA_EXTENSION_ID,
+                    oldOdaExtensionId, m_odaExtensionId ) );
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getEffectiveOdaExtensionId()
+     * @generated NOT
+     */
+    public String getEffectiveOdaExtensionId()
+    {
+        String assignedValue = getEffectiveOdaExtensionIdGen();
+        if( assignedValue != null )
+            return assignedValue;
+
+        // null, default to be the same as the ODA extension id 
+        return getOdaExtensionId();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected String getEffectiveOdaExtensionIdGen()
+    {
+        return m_effectiveOdaExtensionId;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setEffectiveOdaExtensionId( String newEffectiveOdaExtensionId )
+    {
+        String oldEffectiveOdaExtensionId = m_effectiveOdaExtensionId;
+        m_effectiveOdaExtensionId = newEffectiveOdaExtensionId;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.DATA_SOURCE_DESIGN__EFFECTIVE_ODA_EXTENSION_ID,
+                    oldEffectiveOdaExtensionId, m_effectiveOdaExtensionId ) );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getOdaExtensionDataSourceId()
+     * @generated NOT
+     */
+    public String getOdaExtensionDataSourceId()
+    {
+        String assignedValue = getOdaExtensionDataSourceIdGen();
+        if( assignedValue != null )
+            return assignedValue;
+
+        // null, default to be the same as the ODA extension id 
+        return getOdaExtensionId();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected String getOdaExtensionDataSourceIdGen()
+    {
+        return m_odaExtensionDataSourceId;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setOdaExtensionDataSourceId( String newOdaExtensionDataSourceId )
+    {
+        String oldOdaExtensionDataSourceId = m_odaExtensionDataSourceId;
+        m_odaExtensionDataSourceId = newOdaExtensionDataSourceId;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.DATA_SOURCE_DESIGN__ODA_EXTENSION_DATA_SOURCE_ID,
+                    oldOdaExtensionDataSourceId, m_odaExtensionDataSourceId ) );
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getDisplayName()
+     * @generated NOT
+     */
+    public String getDisplayName()
+    {
+        return DesignUtil.getDefaultResourceString( getDisplayNameGen() );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected String getDisplayNameGen()
+    {
+        return m_displayName;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#setDisplayName(java.lang.String)
+     * @generated NOT
+     */
+    public void setDisplayName( String newDisplayName )
+    {
+        String newAttrValue = DesignUtil.addDefaultToResourceAttribute( newDisplayName, getDisplayNameGen() );
+        setDisplayNameGen( newAttrValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void setDisplayNameGen( String newDisplayName )
+    {
+        String oldDisplayName = m_displayName;
+        m_displayName = newDisplayName;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_SOURCE_DESIGN__DISPLAY_NAME,
+                    oldDisplayName, m_displayName ) );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getDisplayNameKey()
+     * @generated NOT
+     */
+    public String getDisplayNameKey()
+    {
+        return DesignUtil.getResourceKey( getDisplayNameGen() );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#setDisplayNameKey(java.lang.String)
+     * @generated NOT
+     */
+    public void setDisplayNameKey( String newDisplayNameKey )
+    {
+        String newAttrValue = DesignUtil.addKeyToResourceAttribute( newDisplayNameKey, getDisplayNameGen() );
+        setDisplayNameGen( newAttrValue );
+    }
+
+    /**
+     * Returns a collection of public properties.
+     * @generated NOT
+     */
+    public Properties getPublicProperties()
+    {
+        // a linked profile attribute should now be stored as a public property;
+        // for backward compatibility of previously persisted object,
+        // migrate the values from deprecated member variables, if exists
+        String profileName = getLinkedProfileNameGen();
+        if( profileName != null )
+            setLinkedProfileName( profileName ); // move to public property
+
+        String filePath = getLinkedProfileStoreFilePathGen();
+        if( filePath != null )
+            setLinkedProfileStoreFilePath( filePath ); // move to public property    
+
+        return getPublicPropertiesGen();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected Properties getPublicPropertiesGen()
+    {
+        return m_publicProperties;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetPublicProperties(
+            Properties newPublicProperties, NotificationChain msgs )
+    {
+        Properties oldPublicProperties = m_publicProperties;
+        m_publicProperties = newPublicProperties;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.DATA_SOURCE_DESIGN__PUBLIC_PROPERTIES,
+                    oldPublicProperties, newPublicProperties );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setPublicProperties( Properties newPublicProperties )
+    {
+        if( newPublicProperties != m_publicProperties )
+        {
+            NotificationChain msgs = null;
+            if( m_publicProperties != null )
+                msgs = ((InternalEObject) m_publicProperties)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DATA_SOURCE_DESIGN__PUBLIC_PROPERTIES,
+                                null, msgs );
+            if( newPublicProperties != null )
+                msgs = ((InternalEObject) newPublicProperties)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DATA_SOURCE_DESIGN__PUBLIC_PROPERTIES,
+                                null, msgs );
+            msgs = basicSetPublicProperties( newPublicProperties, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_SOURCE_DESIGN__PUBLIC_PROPERTIES,
+                    newPublicProperties, newPublicProperties ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public Properties getPrivateProperties()
+    {
+        return m_privateProperties;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetPrivateProperties(
+            Properties newPrivateProperties, NotificationChain msgs )
+    {
+        Properties oldPrivateProperties = m_privateProperties;
+        m_privateProperties = newPrivateProperties;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.DATA_SOURCE_DESIGN__PRIVATE_PROPERTIES,
+                    oldPrivateProperties, newPrivateProperties );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setPrivateProperties( Properties newPrivateProperties )
+    {
+        if( newPrivateProperties != m_privateProperties )
+        {
+            NotificationChain msgs = null;
+            if( m_privateProperties != null )
+                msgs = ((InternalEObject) m_privateProperties)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DATA_SOURCE_DESIGN__PRIVATE_PROPERTIES,
+                                null, msgs );
+            if( newPrivateProperties != null )
+                msgs = ((InternalEObject) newPrivateProperties)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DATA_SOURCE_DESIGN__PRIVATE_PROPERTIES,
+                                null, msgs );
+            msgs = basicSetPrivateProperties( newPrivateProperties, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_SOURCE_DESIGN__PRIVATE_PROPERTIES,
+                    newPrivateProperties, newPrivateProperties ) );
+    }
+
+    /**
+     * Returns the name of an associated profile instance.
+     * May be null if no profile instance is linked to the data source design.
+     * @generated NOT
+     */
+    public String getLinkedProfileName()
+    {
+        // a linked profile attribute should now be stored as a property;
+        // for backward compatibility of previously persisted object,
+        // use the one in deprecated member variable, if exists
+        String profileName = getLinkedProfileNameGen();
+        if( profileName != null )
+            return profileName;
+        return getLinkedProfileNameInProperties();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected String getLinkedProfileNameGen()
+    {
+        return m_linkedProfileName;
+    }
+
+    /**
+     * Returns the name of an associated profile instance, as specified
+     * in the public properties collection.
+     * @generated NOT
+     */
+    protected String getLinkedProfileNameInProperties()
+    {
+        Properties props = getPublicPropertiesGen();
+        if( props == null )
+            return null;
+
+        return props.getProperty( CONN_PROFILE_NAME_PROP );
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#setLinkedProfileName(java.lang.String)
+     * @generated NOT
+     */
+    public void setLinkedProfileName( String newLinkedProfileName )
+    {
+        // a linked profile attribute should now be stored as a property;
+        // clear any value in the deprecated member variable
+        setLinkedProfileNameGen( null );
+        setLinkedProfileNameAsProperty( newLinkedProfileName );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void setLinkedProfileNameGen( String newLinkedProfileName )
+    {
+        String oldLinkedProfileName = m_linkedProfileName;
+        m_linkedProfileName = newLinkedProfileName;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_SOURCE_DESIGN__LINKED_PROFILE_NAME,
+                    oldLinkedProfileName, m_linkedProfileName ) );
+    }
+
+    /**
+     * Assigns the specified profile instance name as a data source public property.
+     * Overrides existing property value, if exists.
+     * @param newLinkedProfileName
+     * @generated NOT
+     */
+    protected void setLinkedProfileNameAsProperty( String newLinkedProfileName )
+    {
+        Properties publicProps = getPublicPropertiesGen();
+        if( publicProps == null )
+        {
+            publicProps = DesignFactory.eINSTANCE.createProperties();
+            basicSetPublicProperties( publicProps, null );
+        }
+
+        // override existing property value, if exists
+        publicProps.setProperty( CONN_PROFILE_NAME_PROP, newLinkedProfileName );
+    }
+
+    /**
+     * Returns the file path of an associated profile store.
+     * May be null if no user-defined profile store is specified the data source design.
+     * @generated NOT
+     */
+    public String getLinkedProfileStoreFilePath()
+    {
+        // a linked profile attribute should now be stored as a property;
+        // for backward compatibility of previously persisted object,
+        // use the one in deprecated member variable, if exists
+        String filePath = getLinkedProfileStoreFilePathGen();
+        if( filePath != null )
+            return filePath;
+        return getLinkedProfileStoreFilePathInProperties();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected String getLinkedProfileStoreFilePathGen()
+    {
+        return m_linkedProfileStoreFilePath;
+    }
+
+    /**
+     * Returns the file path of an associated profile store, as specified
+     * in the public properties collection.
+     * @generated NOT
+     */
+    protected String getLinkedProfileStoreFilePathInProperties()
+    {
+        Properties props = getPublicPropertiesGen();
+        if( props == null )
+            return null;
+
+        return props.getProperty( CONN_PROFILE_STORE_FILE_PATH_PROP );
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#setLinkedProfileStoreFilePath(java.lang.String)
+     * @generated NOT
+     */
+    public void setLinkedProfileStoreFilePath(
+            String newLinkedProfileStoreFilePath )
+    {
+        // a linked profile attribute should now be stored as a property;
+        // clear any value in the deprecated member variable
+        setLinkedProfileStoreFilePathGen( null );
+        setLinkedProfileStoreFilePathAsProperty( newLinkedProfileStoreFilePath );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void setLinkedProfileStoreFilePathGen(
+            String newLinkedProfileStoreFilePath )
+    {
+        String oldLinkedProfileStoreFilePath = m_linkedProfileStoreFilePath;
+        m_linkedProfileStoreFilePath = newLinkedProfileStoreFilePath;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.DATA_SOURCE_DESIGN__LINKED_PROFILE_STORE_FILE_PATH,
+                    oldLinkedProfileStoreFilePath, m_linkedProfileStoreFilePath ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ResourceIdentifiers getHostResourceIdentifiers()
+    {
+        return m_hostResourceIdentifiers;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetHostResourceIdentifiers(
+            ResourceIdentifiers newHostResourceIdentifiers,
+            NotificationChain msgs )
+    {
+        ResourceIdentifiers oldHostResourceIdentifiers = m_hostResourceIdentifiers;
+        m_hostResourceIdentifiers = newHostResourceIdentifiers;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.DATA_SOURCE_DESIGN__HOST_RESOURCE_IDENTIFIERS,
+                    oldHostResourceIdentifiers, newHostResourceIdentifiers );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setHostResourceIdentifiers(
+            ResourceIdentifiers newHostResourceIdentifiers )
+    {
+        if( newHostResourceIdentifiers != m_hostResourceIdentifiers )
+        {
+            NotificationChain msgs = null;
+            if( m_hostResourceIdentifiers != null )
+                msgs = ((InternalEObject) m_hostResourceIdentifiers)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DATA_SOURCE_DESIGN__HOST_RESOURCE_IDENTIFIERS,
+                                null, msgs );
+            if( newHostResourceIdentifiers != null )
+                msgs = ((InternalEObject) newHostResourceIdentifiers)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DATA_SOURCE_DESIGN__HOST_RESOURCE_IDENTIFIERS,
+                                null, msgs );
+            msgs = basicSetHostResourceIdentifiers( newHostResourceIdentifiers,
+                    msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.DATA_SOURCE_DESIGN__HOST_RESOURCE_IDENTIFIERS,
+                    newHostResourceIdentifiers, newHostResourceIdentifiers ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getResourceFile()
+    {
+        return m_resourceFile;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#setResourceFile(java.lang.String)
+     * @generated NOT
+     */
+    public void setResourceFile( String newResourceFile )
+    {
+        if( newResourceFile != null )
+        {
+            if( ! newResourceFile.endsWith( RESOURCE_FILE_SUFFIX ) )
+                throw new IllegalArgumentException( 
+                        Messages.bind( Messages.design_invalidResourceFileName, newResourceFile ));
+        }
+        setResourceFileGen( newResourceFile );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void setResourceFileGen( String newResourceFile )
+    {
+        String oldResourceFile = m_resourceFile;
+        m_resourceFile = newResourceFile;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DATA_SOURCE_DESIGN__RESOURCE_FILE,
+                    oldResourceFile, m_resourceFile ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_SOURCE_DESIGN__PUBLIC_PROPERTIES:
+            return basicSetPublicProperties( null, msgs );
+        case DesignPackage.DATA_SOURCE_DESIGN__PRIVATE_PROPERTIES:
+            return basicSetPrivateProperties( null, msgs );
+        case DesignPackage.DATA_SOURCE_DESIGN__HOST_RESOURCE_IDENTIFIERS:
+            return basicSetHostResourceIdentifiers( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_SOURCE_DESIGN__NAME:
+            return getName();
+        case DesignPackage.DATA_SOURCE_DESIGN__ODA_EXTENSION_ID:
+            return getOdaExtensionId();
+        case DesignPackage.DATA_SOURCE_DESIGN__EFFECTIVE_ODA_EXTENSION_ID:
+            return getEffectiveOdaExtensionId();
+        case DesignPackage.DATA_SOURCE_DESIGN__ODA_EXTENSION_DATA_SOURCE_ID:
+            return getOdaExtensionDataSourceId();
+        case DesignPackage.DATA_SOURCE_DESIGN__DISPLAY_NAME:
+            return getDisplayNameGen();
+        case DesignPackage.DATA_SOURCE_DESIGN__PUBLIC_PROPERTIES:
+            return getPublicProperties();
+        case DesignPackage.DATA_SOURCE_DESIGN__PRIVATE_PROPERTIES:
+            return getPrivateProperties();
+        case DesignPackage.DATA_SOURCE_DESIGN__LINKED_PROFILE_NAME:
+            return getLinkedProfileName();
+        case DesignPackage.DATA_SOURCE_DESIGN__LINKED_PROFILE_STORE_FILE_PATH:
+            return getLinkedProfileStoreFilePath();
+        case DesignPackage.DATA_SOURCE_DESIGN__HOST_RESOURCE_IDENTIFIERS:
+            return getHostResourceIdentifiers();
+        case DesignPackage.DATA_SOURCE_DESIGN__RESOURCE_FILE:
+            return getResourceFile();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_SOURCE_DESIGN__NAME:
+            setName( (String) newValue );
+            return;
+        case DesignPackage.DATA_SOURCE_DESIGN__ODA_EXTENSION_ID:
+            setOdaExtensionId( (String) newValue );
+            return;
+        case DesignPackage.DATA_SOURCE_DESIGN__EFFECTIVE_ODA_EXTENSION_ID:
+            setEffectiveOdaExtensionId( (String) newValue );
+            return;
+        case DesignPackage.DATA_SOURCE_DESIGN__ODA_EXTENSION_DATA_SOURCE_ID:
+            setOdaExtensionDataSourceId( (String) newValue );
+            return;
+        case DesignPackage.DATA_SOURCE_DESIGN__DISPLAY_NAME:
+            setDisplayNameGen( (String) newValue );
+            return;
+        case DesignPackage.DATA_SOURCE_DESIGN__PUBLIC_PROPERTIES:
+            setPublicProperties( (Properties) newValue );
+            return;
+        case DesignPackage.DATA_SOURCE_DESIGN__PRIVATE_PROPERTIES:
+            setPrivateProperties( (Properties) newValue );
+            return;
+        case DesignPackage.DATA_SOURCE_DESIGN__LINKED_PROFILE_NAME:
+            setLinkedProfileName( (String) newValue );
+            return;
+        case DesignPackage.DATA_SOURCE_DESIGN__LINKED_PROFILE_STORE_FILE_PATH:
+            setLinkedProfileStoreFilePath( (String) newValue );
+            return;
+        case DesignPackage.DATA_SOURCE_DESIGN__HOST_RESOURCE_IDENTIFIERS:
+            setHostResourceIdentifiers( (ResourceIdentifiers) newValue );
+            return;
+        case DesignPackage.DATA_SOURCE_DESIGN__RESOURCE_FILE:
+            setResourceFile( (String) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_SOURCE_DESIGN__NAME:
+            setName( NAME_EDEFAULT );
+            return;
+        case DesignPackage.DATA_SOURCE_DESIGN__ODA_EXTENSION_ID:
+            setOdaExtensionId( ODA_EXTENSION_ID_EDEFAULT );
+            return;
+        case DesignPackage.DATA_SOURCE_DESIGN__EFFECTIVE_ODA_EXTENSION_ID:
+            setEffectiveOdaExtensionId( EFFECTIVE_ODA_EXTENSION_ID_EDEFAULT );
+            return;
+        case DesignPackage.DATA_SOURCE_DESIGN__ODA_EXTENSION_DATA_SOURCE_ID:
+            setOdaExtensionDataSourceId( ODA_EXTENSION_DATA_SOURCE_ID_EDEFAULT );
+            return;
+        case DesignPackage.DATA_SOURCE_DESIGN__DISPLAY_NAME:
+            setDisplayNameGen( DISPLAY_NAME_EDEFAULT );
+            return;
+        case DesignPackage.DATA_SOURCE_DESIGN__PUBLIC_PROPERTIES:
+            setPublicProperties( (Properties) null );
+            return;
+        case DesignPackage.DATA_SOURCE_DESIGN__PRIVATE_PROPERTIES:
+            setPrivateProperties( (Properties) null );
+            return;
+        case DesignPackage.DATA_SOURCE_DESIGN__LINKED_PROFILE_NAME:
+            setLinkedProfileName( LINKED_PROFILE_NAME_EDEFAULT );
+            return;
+        case DesignPackage.DATA_SOURCE_DESIGN__LINKED_PROFILE_STORE_FILE_PATH:
+            setLinkedProfileStoreFilePath( LINKED_PROFILE_STORE_FILE_PATH_EDEFAULT );
+            return;
+        case DesignPackage.DATA_SOURCE_DESIGN__HOST_RESOURCE_IDENTIFIERS:
+            setHostResourceIdentifiers( (ResourceIdentifiers) null );
+            return;
+        case DesignPackage.DATA_SOURCE_DESIGN__RESOURCE_FILE:
+            setResourceFile( RESOURCE_FILE_EDEFAULT );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DATA_SOURCE_DESIGN__NAME:
+            return NAME_EDEFAULT == null ? m_name != null : !NAME_EDEFAULT
+                    .equals( m_name );
+        case DesignPackage.DATA_SOURCE_DESIGN__ODA_EXTENSION_ID:
+            return ODA_EXTENSION_ID_EDEFAULT == null ? m_odaExtensionId != null
+                    : !ODA_EXTENSION_ID_EDEFAULT.equals( m_odaExtensionId );
+        case DesignPackage.DATA_SOURCE_DESIGN__EFFECTIVE_ODA_EXTENSION_ID:
+            return EFFECTIVE_ODA_EXTENSION_ID_EDEFAULT == null ? m_effectiveOdaExtensionId != null
+                    : !EFFECTIVE_ODA_EXTENSION_ID_EDEFAULT
+                            .equals( m_effectiveOdaExtensionId );
+        case DesignPackage.DATA_SOURCE_DESIGN__ODA_EXTENSION_DATA_SOURCE_ID:
+            return ODA_EXTENSION_DATA_SOURCE_ID_EDEFAULT == null ? m_odaExtensionDataSourceId != null
+                    : !ODA_EXTENSION_DATA_SOURCE_ID_EDEFAULT
+                            .equals( m_odaExtensionDataSourceId );
+        case DesignPackage.DATA_SOURCE_DESIGN__DISPLAY_NAME:
+            return DISPLAY_NAME_EDEFAULT == null ? m_displayName != null
+                    : !DISPLAY_NAME_EDEFAULT.equals( m_displayName );
+        case DesignPackage.DATA_SOURCE_DESIGN__PUBLIC_PROPERTIES:
+            return m_publicProperties != null;
+        case DesignPackage.DATA_SOURCE_DESIGN__PRIVATE_PROPERTIES:
+            return m_privateProperties != null;
+        case DesignPackage.DATA_SOURCE_DESIGN__LINKED_PROFILE_NAME:
+            return LINKED_PROFILE_NAME_EDEFAULT == null ? m_linkedProfileName != null
+                    : !LINKED_PROFILE_NAME_EDEFAULT
+                            .equals( m_linkedProfileName );
+        case DesignPackage.DATA_SOURCE_DESIGN__LINKED_PROFILE_STORE_FILE_PATH:
+            return LINKED_PROFILE_STORE_FILE_PATH_EDEFAULT == null ? m_linkedProfileStoreFilePath != null
+                    : !LINKED_PROFILE_STORE_FILE_PATH_EDEFAULT
+                            .equals( m_linkedProfileStoreFilePath );
+        case DesignPackage.DATA_SOURCE_DESIGN__HOST_RESOURCE_IDENTIFIERS:
+            return m_hostResourceIdentifiers != null;
+        case DesignPackage.DATA_SOURCE_DESIGN__RESOURCE_FILE:
+            return RESOURCE_FILE_EDEFAULT == null ? m_resourceFile != null
+                    : !RESOURCE_FILE_EDEFAULT.equals( m_resourceFile );
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * Assigns the specified profile store's file path as a data source public property.
+     * Overrides existing property value, if exists.
+     * @param newLinkedProfileStoreFilePath
+     * @generated NOT
+     */
+    protected void setLinkedProfileStoreFilePathAsProperty(
+            String newLinkedProfileStoreFilePath )
+    {
+        Properties publicProps = getPublicPropertiesGen();
+        if( publicProps == null )
+        {
+            publicProps = DesignFactory.eINSTANCE.createProperties();
+            basicSetPublicProperties( publicProps, null );
+        }
+
+        // override existing property value, if exists
+        publicProps.setProperty( CONN_PROFILE_STORE_FILE_PATH_PROP,
+                newLinkedProfileStoreFilePath );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#getLinkedProfileStoreFile()
+     */
+    public File getLinkedProfileStoreFile()
+    {
+        String storeFilePath = getLinkedProfileStoreFilePath();
+        return DesignUtil.convertPathToResourceFile( storeFilePath, getHostResourceIdentifiers() );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#setLinkedProfileStoreFile(java.io.File)
+     */
+    public void setLinkedProfileStoreFile( File storageFile )
+    {
+        String filePath = DesignUtil.convertFileToPath( storageFile );
+        setLinkedProfileStoreFilePath( filePath );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSourceDesign#hasLinkToProfile()
+     */
+    public boolean hasLinkToProfile()
+    {
+        String profileName = getLinkedProfileName();
+        return (profileName != null && profileName.trim().length() > 0);
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (name: " ); //$NON-NLS-1$
+        result.append( m_name );
+        result.append( ", odaExtensionId: " ); //$NON-NLS-1$
+        result.append( m_odaExtensionId );
+        result.append( ", effectiveOdaExtensionId: " ); //$NON-NLS-1$
+        result.append( m_effectiveOdaExtensionId );
+        result.append( ", odaExtensionDataSourceId: " ); //$NON-NLS-1$
+        result.append( m_odaExtensionDataSourceId );
+        result.append( ", displayName: " ); //$NON-NLS-1$
+        result.append( m_displayName );
+        result.append( ", linkedProfileName: " ); //$NON-NLS-1$
+        result.append( m_linkedProfileName );
+        result.append( ", linkedProfileStoreFilePath: " ); //$NON-NLS-1$
+        result.append( m_linkedProfileStoreFilePath );
+        result.append( ", resourceFile: " ); //$NON-NLS-1$
+        result.append( m_resourceFile );
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //DataSourceDesignImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DesignFactoryImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DesignFactoryImpl.java
new file mode 100644
index 0000000..31f69a2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DesignFactoryImpl.java
@@ -0,0 +1,1704 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DesignFactoryImpl.java,v 1.15 2010/06/10 23:40:04 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.*;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class DesignFactoryImpl extends EFactoryImpl implements DesignFactory
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Creates the default factory implementation.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static DesignFactory init()
+    {
+        try
+        {
+            DesignFactory theDesignFactory = (DesignFactory) EPackage.Registry.INSTANCE
+                    .getEFactory( "http://www.eclipse.org/datatools/connectivity/oda/design" ); //$NON-NLS-1$ 
+            if( theDesignFactory != null )
+            {
+                return theDesignFactory;
+            }
+        }
+        catch( Exception exception )
+        {
+            EcorePlugin.INSTANCE.log( exception );
+        }
+        return new DesignFactoryImpl();
+    }
+
+    /**
+     * Creates an instance of the factory.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DesignFactoryImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EObject create( EClass eClass )
+    {
+        switch( eClass.getClassifierID() )
+        {
+        case DesignPackage.AND_EXPRESSION:
+            return createAndExpression();
+        case DesignPackage.ATOMIC_EXPRESSION_CONTEXT:
+            return createAtomicExpressionContext();
+        case DesignPackage.AXIS_ATTRIBUTES:
+            return createAxisAttributes();
+        case DesignPackage.COLUMN_DEFINITION:
+            return createColumnDefinition();
+        case DesignPackage.COMPOSITE_FILTER_EXPRESSION:
+            return createCompositeFilterExpression();
+        case DesignPackage.CUSTOM_DATA:
+            return createCustomData();
+        case DesignPackage.CUSTOM_FILTER_EXPRESSION:
+            return createCustomFilterExpression();
+        case DesignPackage.DATA_ACCESS_DESIGN:
+            return createDataAccessDesign();
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES:
+            return createDataElementAttributes();
+        case DesignPackage.DATA_ELEMENT_IDENTIFIER:
+            return createDataElementIdentifier();
+        case DesignPackage.DATA_ELEMENT_IDENTIFIERS:
+            return createDataElementIdentifiers();
+        case DesignPackage.DATA_ELEMENT_UI_HINTS:
+            return createDataElementUIHints();
+        case DesignPackage.DATA_SET_DESIGN:
+            return createDataSetDesign();
+        case DesignPackage.DATA_SET_PARAMETERS:
+            return createDataSetParameters();
+        case DesignPackage.DATA_SET_QUERY:
+            return createDataSetQuery();
+        case DesignPackage.DATA_SOURCE_DESIGN:
+            return createDataSourceDesign();
+        case DesignPackage.DESIGNER_STATE:
+            return createDesignerState();
+        case DesignPackage.DESIGNER_STATE_CONTENT:
+            return createDesignerStateContent();
+        case DesignPackage.DESIGN_SESSION_REQUEST:
+            return createDesignSessionRequest();
+        case DesignPackage.DESIGN_SESSION_RESPONSE:
+            return createDesignSessionResponse();
+        case DesignPackage.DOCUMENT_ROOT:
+            return createDocumentRoot();
+        case DesignPackage.DYNAMIC_FILTER_EXPRESSION:
+            return createDynamicFilterExpression();
+        case DesignPackage.DYNAMIC_VALUES_QUERY:
+            return createDynamicValuesQuery();
+        case DesignPackage.EXPRESSION_ARGUMENTS:
+            return createExpressionArguments();
+        case DesignPackage.EXPRESSION_PARAMETER_DEFINITION:
+            return createExpressionParameterDefinition();
+        case DesignPackage.EXPRESSION_PARAMETERS:
+            return createExpressionParameters();
+        case DesignPackage.EXPRESSION_VARIABLE:
+            return createExpressionVariable();
+        case DesignPackage.FILTER_EXPRESSION_TYPE:
+            return createFilterExpressionType();
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES:
+            return createInputElementAttributes();
+        case DesignPackage.INPUT_ELEMENT_UI_HINTS:
+            return createInputElementUIHints();
+        case DesignPackage.INPUT_PARAMETER_ATTRIBUTES:
+            return createInputParameterAttributes();
+        case DesignPackage.INPUT_PARAMETER_UI_HINTS:
+            return createInputParameterUIHints();
+        case DesignPackage.LOCALE:
+            return createLocale();
+        case DesignPackage.NAME_VALUE_PAIR:
+            return createNameValuePair();
+        case DesignPackage.NOT_EXPRESSION:
+            return createNotExpression();
+        case DesignPackage.ODA_DESIGN_SESSION:
+            return createOdaDesignSession();
+        case DesignPackage.OR_EXPRESSION:
+            return createOrExpression();
+        case DesignPackage.OUTPUT_ELEMENT_ATTRIBUTES:
+            return createOutputElementAttributes();
+        case DesignPackage.PARAMETER_DEFINITION:
+            return createParameterDefinition();
+        case DesignPackage.PARAMETER_FIELD_DEFINITION:
+            return createParameterFieldDefinition();
+        case DesignPackage.PARAMETER_FIELDS:
+            return createParameterFields();
+        case DesignPackage.PROPERTIES:
+            return createProperties();
+        case DesignPackage.PROPERTY:
+            return createProperty();
+        case DesignPackage.PROPERTY_ATTRIBUTES:
+            return createPropertyAttributes();
+        case DesignPackage.RESOURCE_IDENTIFIERS:
+            return createResourceIdentifiers();
+        case DesignPackage.RESULT_SET_COLUMNS:
+            return createResultSetColumns();
+        case DesignPackage.RESULT_SET_CRITERIA:
+            return createResultSetCriteria();
+        case DesignPackage.RESULT_SET_DEFINITION:
+            return createResultSetDefinition();
+        case DesignPackage.RESULT_SETS:
+            return createResultSets();
+        case DesignPackage.RESULT_SUBSET:
+            return createResultSubset();
+        case DesignPackage.SCALAR_VALUE_CHOICES:
+            return createScalarValueChoices();
+        case DesignPackage.SCALAR_VALUE_DEFINITION:
+            return createScalarValueDefinition();
+        case DesignPackage.SORT_KEY:
+            return createSortKey();
+        case DesignPackage.SORT_SPECIFICATION:
+            return createSortSpecification();
+        case DesignPackage.STATIC_VALUES:
+            return createStaticValues();
+        case DesignPackage.VALUE_FORMAT_HINTS:
+            return createValueFormatHints();
+        default:
+            throw new IllegalArgumentException(
+                    "The class '" + eClass.getName() + "' is not a valid classifier" ); //$NON-NLS-1$ //$NON-NLS-2$
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object createFromString( EDataType eDataType, String initialValue )
+    {
+        switch( eDataType.getClassifierID() )
+        {
+        case DesignPackage.AXIS_TYPE:
+            return createAxisTypeFromString( eDataType, initialValue );
+        case DesignPackage.ELEMENT_NULLABILITY:
+            return createElementNullabilityFromString( eDataType, initialValue );
+        case DesignPackage.EXPRESSION_VARIABLE_TYPE:
+            return createExpressionVariableTypeFromString( eDataType,
+                    initialValue );
+        case DesignPackage.HORIZONTAL_ALIGNMENT:
+            return createHorizontalAlignmentFromString( eDataType, initialValue );
+        case DesignPackage.INPUT_PROMPT_CONTROL_STYLE:
+            return createInputPromptControlStyleFromString( eDataType,
+                    initialValue );
+        case DesignPackage.NULL_ORDERING_TYPE:
+            return createNullOrderingTypeFromString( eDataType, initialValue );
+        case DesignPackage.ODA_COMPLEX_DATA_TYPE:
+            return createOdaComplexDataTypeFromString( eDataType, initialValue );
+        case DesignPackage.ODA_SCALAR_DATA_TYPE:
+            return createOdaScalarDataTypeFromString( eDataType, initialValue );
+        case DesignPackage.PARAMETER_MODE:
+            return createParameterModeFromString( eDataType, initialValue );
+        case DesignPackage.SESSION_STATUS:
+            return createSessionStatusFromString( eDataType, initialValue );
+        case DesignPackage.SORT_DIRECTION_TYPE:
+            return createSortDirectionTypeFromString( eDataType, initialValue );
+        case DesignPackage.TEXT_FORMAT_TYPE:
+            return createTextFormatTypeFromString( eDataType, initialValue );
+        case DesignPackage.TEXT_WRAP_TYPE:
+            return createTextWrapTypeFromString( eDataType, initialValue );
+        case DesignPackage.AXIS_TYPE_OBJECT:
+            return createAxisTypeObjectFromString( eDataType, initialValue );
+        case DesignPackage.ELEMENT_NULLABILITY_OBJECT:
+            return createElementNullabilityObjectFromString( eDataType,
+                    initialValue );
+        case DesignPackage.EXPRESSION_VARIABLE_TYPE_OBJECT:
+            return createExpressionVariableTypeObjectFromString( eDataType,
+                    initialValue );
+        case DesignPackage.HORIZONTAL_ALIGNMENT_OBJECT:
+            return createHorizontalAlignmentObjectFromString( eDataType,
+                    initialValue );
+        case DesignPackage.INPUT_PROMPT_CONTROL_STYLE_OBJECT:
+            return createInputPromptControlStyleObjectFromString( eDataType,
+                    initialValue );
+        case DesignPackage.NULL_ORDERING_TYPE_OBJECT:
+            return createNullOrderingTypeObjectFromString( eDataType,
+                    initialValue );
+        case DesignPackage.ODA_COMPLEX_DATA_TYPE_OBJECT:
+            return createOdaComplexDataTypeObjectFromString( eDataType,
+                    initialValue );
+        case DesignPackage.ODA_SCALAR_DATA_TYPE_OBJECT:
+            return createOdaScalarDataTypeObjectFromString( eDataType,
+                    initialValue );
+        case DesignPackage.PARAMETER_MODE_OBJECT:
+            return createParameterModeObjectFromString( eDataType, initialValue );
+        case DesignPackage.SESSION_STATUS_OBJECT:
+            return createSessionStatusObjectFromString( eDataType, initialValue );
+        case DesignPackage.SORT_DIRECTION_TYPE_OBJECT:
+            return createSortDirectionTypeObjectFromString( eDataType,
+                    initialValue );
+        case DesignPackage.TEXT_FORMAT_TYPE_OBJECT:
+            return createTextFormatTypeObjectFromString( eDataType,
+                    initialValue );
+        case DesignPackage.TEXT_WRAP_TYPE_OBJECT:
+            return createTextWrapTypeObjectFromString( eDataType, initialValue );
+        default:
+            throw new IllegalArgumentException(
+                    "The datatype '" + eDataType.getName() + "' is not a valid classifier" ); //$NON-NLS-1$ //$NON-NLS-2$
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String convertToString( EDataType eDataType, Object instanceValue )
+    {
+        switch( eDataType.getClassifierID() )
+        {
+        case DesignPackage.AXIS_TYPE:
+            return convertAxisTypeToString( eDataType, instanceValue );
+        case DesignPackage.ELEMENT_NULLABILITY:
+            return convertElementNullabilityToString( eDataType, instanceValue );
+        case DesignPackage.EXPRESSION_VARIABLE_TYPE:
+            return convertExpressionVariableTypeToString( eDataType,
+                    instanceValue );
+        case DesignPackage.HORIZONTAL_ALIGNMENT:
+            return convertHorizontalAlignmentToString( eDataType, instanceValue );
+        case DesignPackage.INPUT_PROMPT_CONTROL_STYLE:
+            return convertInputPromptControlStyleToString( eDataType,
+                    instanceValue );
+        case DesignPackage.NULL_ORDERING_TYPE:
+            return convertNullOrderingTypeToString( eDataType, instanceValue );
+        case DesignPackage.ODA_COMPLEX_DATA_TYPE:
+            return convertOdaComplexDataTypeToString( eDataType, instanceValue );
+        case DesignPackage.ODA_SCALAR_DATA_TYPE:
+            return convertOdaScalarDataTypeToString( eDataType, instanceValue );
+        case DesignPackage.PARAMETER_MODE:
+            return convertParameterModeToString( eDataType, instanceValue );
+        case DesignPackage.SESSION_STATUS:
+            return convertSessionStatusToString( eDataType, instanceValue );
+        case DesignPackage.SORT_DIRECTION_TYPE:
+            return convertSortDirectionTypeToString( eDataType, instanceValue );
+        case DesignPackage.TEXT_FORMAT_TYPE:
+            return convertTextFormatTypeToString( eDataType, instanceValue );
+        case DesignPackage.TEXT_WRAP_TYPE:
+            return convertTextWrapTypeToString( eDataType, instanceValue );
+        case DesignPackage.AXIS_TYPE_OBJECT:
+            return convertAxisTypeObjectToString( eDataType, instanceValue );
+        case DesignPackage.ELEMENT_NULLABILITY_OBJECT:
+            return convertElementNullabilityObjectToString( eDataType,
+                    instanceValue );
+        case DesignPackage.EXPRESSION_VARIABLE_TYPE_OBJECT:
+            return convertExpressionVariableTypeObjectToString( eDataType,
+                    instanceValue );
+        case DesignPackage.HORIZONTAL_ALIGNMENT_OBJECT:
+            return convertHorizontalAlignmentObjectToString( eDataType,
+                    instanceValue );
+        case DesignPackage.INPUT_PROMPT_CONTROL_STYLE_OBJECT:
+            return convertInputPromptControlStyleObjectToString( eDataType,
+                    instanceValue );
+        case DesignPackage.NULL_ORDERING_TYPE_OBJECT:
+            return convertNullOrderingTypeObjectToString( eDataType,
+                    instanceValue );
+        case DesignPackage.ODA_COMPLEX_DATA_TYPE_OBJECT:
+            return convertOdaComplexDataTypeObjectToString( eDataType,
+                    instanceValue );
+        case DesignPackage.ODA_SCALAR_DATA_TYPE_OBJECT:
+            return convertOdaScalarDataTypeObjectToString( eDataType,
+                    instanceValue );
+        case DesignPackage.PARAMETER_MODE_OBJECT:
+            return convertParameterModeObjectToString( eDataType, instanceValue );
+        case DesignPackage.SESSION_STATUS_OBJECT:
+            return convertSessionStatusObjectToString( eDataType, instanceValue );
+        case DesignPackage.SORT_DIRECTION_TYPE_OBJECT:
+            return convertSortDirectionTypeObjectToString( eDataType,
+                    instanceValue );
+        case DesignPackage.TEXT_FORMAT_TYPE_OBJECT:
+            return convertTextFormatTypeObjectToString( eDataType,
+                    instanceValue );
+        case DesignPackage.TEXT_WRAP_TYPE_OBJECT:
+            return convertTextWrapTypeObjectToString( eDataType, instanceValue );
+        default:
+            throw new IllegalArgumentException(
+                    "The datatype '" + eDataType.getName() + "' is not a valid classifier" ); //$NON-NLS-1$ //$NON-NLS-2$
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public AndExpression createAndExpression()
+    {
+        AndExpressionImpl andExpression = new AndExpressionImpl();
+        return andExpression;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public AtomicExpressionContext createAtomicExpressionContext()
+    {
+        AtomicExpressionContextImpl atomicExpressionContext = new AtomicExpressionContextImpl();
+        return atomicExpressionContext;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public AxisAttributes createAxisAttributes()
+    {
+        AxisAttributesImpl axisAttributes = new AxisAttributesImpl();
+        return axisAttributes;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ColumnDefinition createColumnDefinition()
+    {
+        ColumnDefinitionImpl columnDefinition = new ColumnDefinitionImpl();
+        return columnDefinition;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public CompositeFilterExpression createCompositeFilterExpression()
+    {
+        CompositeFilterExpressionImpl compositeFilterExpression = new CompositeFilterExpressionImpl();
+        return compositeFilterExpression;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public CustomData createCustomData()
+    {
+        CustomDataImpl customData = new CustomDataImpl();
+        return customData;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public CustomFilterExpression createCustomFilterExpression()
+    {
+        CustomFilterExpressionImpl customFilterExpression = new CustomFilterExpressionImpl();
+        return customFilterExpression;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DataAccessDesign createDataAccessDesign()
+    {
+        DataAccessDesignImpl dataAccessDesign = new DataAccessDesignImpl();
+        return dataAccessDesign;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DataElementAttributes createDataElementAttributes()
+    {
+        DataElementAttributesImpl dataElementAttributes = new DataElementAttributesImpl();
+        return dataElementAttributes;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DataElementIdentifier createDataElementIdentifier()
+    {
+        DataElementIdentifierImpl dataElementIdentifier = new DataElementIdentifierImpl();
+        return dataElementIdentifier;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DataElementIdentifiers createDataElementIdentifiers()
+    {
+        DataElementIdentifiersImpl dataElementIdentifiers = new DataElementIdentifiersImpl();
+        return dataElementIdentifiers;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DataElementUIHints createDataElementUIHints()
+    {
+        DataElementUIHintsImpl dataElementUIHints = new DataElementUIHintsImpl();
+        return dataElementUIHints;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DataSetDesign createDataSetDesign()
+    {
+        DataSetDesignImpl dataSetDesign = new DataSetDesignImpl();
+        return dataSetDesign;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DataSetParameters createDataSetParameters()
+    {
+        DataSetParametersImpl dataSetParameters = new DataSetParametersImpl();
+        return dataSetParameters;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DataSetQuery createDataSetQuery()
+    {
+        DataSetQueryImpl dataSetQuery = new DataSetQueryImpl();
+        return dataSetQuery;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DataSourceDesign createDataSourceDesign()
+    {
+        DataSourceDesignImpl dataSourceDesign = new DataSourceDesignImpl();
+        return dataSourceDesign;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DesignerState createDesignerState()
+    {
+        DesignerStateImpl designerState = new DesignerStateImpl();
+        return designerState;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DesignerStateContent createDesignerStateContent()
+    {
+        DesignerStateContentImpl designerStateContent = new DesignerStateContentImpl();
+        return designerStateContent;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DesignSessionRequest createDesignSessionRequest()
+    {
+        DesignSessionRequestImpl designSessionRequest = new DesignSessionRequestImpl();
+        return designSessionRequest;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DesignSessionResponse createDesignSessionResponse()
+    {
+        DesignSessionResponseImpl designSessionResponse = new DesignSessionResponseImpl();
+        return designSessionResponse;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DocumentRoot createDocumentRoot()
+    {
+        DocumentRootImpl documentRoot = new DocumentRootImpl();
+        return documentRoot;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DynamicFilterExpression createDynamicFilterExpression()
+    {
+        DynamicFilterExpressionImpl dynamicFilterExpression = new DynamicFilterExpressionImpl();
+        return dynamicFilterExpression;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DynamicValuesQuery createDynamicValuesQuery()
+    {
+        DynamicValuesQueryImpl dynamicValuesQuery = new DynamicValuesQueryImpl();
+        return dynamicValuesQuery;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ExpressionArguments createExpressionArguments()
+    {
+        ExpressionArgumentsImpl expressionArguments = new ExpressionArgumentsImpl();
+        return expressionArguments;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ExpressionParameterDefinition createExpressionParameterDefinition()
+    {
+        ExpressionParameterDefinitionImpl expressionParameterDefinition = new ExpressionParameterDefinitionImpl();
+        return expressionParameterDefinition;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ExpressionParameters createExpressionParameters()
+    {
+        ExpressionParametersImpl expressionParameters = new ExpressionParametersImpl();
+        return expressionParameters;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ExpressionVariable createExpressionVariable()
+    {
+        ExpressionVariableImpl expressionVariable = new ExpressionVariableImpl();
+        return expressionVariable;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public FilterExpressionType createFilterExpressionType()
+    {
+        FilterExpressionTypeImpl filterExpressionType = new FilterExpressionTypeImpl();
+        return filterExpressionType;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public InputElementAttributes createInputElementAttributes()
+    {
+        InputElementAttributesImpl inputElementAttributes = new InputElementAttributesImpl();
+        return inputElementAttributes;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public InputElementUIHints createInputElementUIHints()
+    {
+        InputElementUIHintsImpl inputElementUIHints = new InputElementUIHintsImpl();
+        return inputElementUIHints;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public InputParameterAttributes createInputParameterAttributes()
+    {
+        InputParameterAttributesImpl inputParameterAttributes = new InputParameterAttributesImpl();
+        return inputParameterAttributes;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public InputParameterUIHints createInputParameterUIHints()
+    {
+        InputParameterUIHintsImpl inputParameterUIHints = new InputParameterUIHintsImpl();
+        return inputParameterUIHints;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public Locale createLocale()
+    {
+        LocaleImpl locale = new LocaleImpl();
+        return locale;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NameValuePair createNameValuePair()
+    {
+        NameValuePairImpl nameValuePair = new NameValuePairImpl();
+        return nameValuePair;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotExpression createNotExpression()
+    {
+        NotExpressionImpl notExpression = new NotExpressionImpl();
+        return notExpression;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public OdaDesignSession createOdaDesignSession()
+    {
+        OdaDesignSessionImpl odaDesignSession = new OdaDesignSessionImpl();
+        return odaDesignSession;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public OrExpression createOrExpression()
+    {
+        OrExpressionImpl orExpression = new OrExpressionImpl();
+        return orExpression;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public OutputElementAttributes createOutputElementAttributes()
+    {
+        OutputElementAttributesImpl outputElementAttributes = new OutputElementAttributesImpl();
+        return outputElementAttributes;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ParameterDefinition createParameterDefinition()
+    {
+        ParameterDefinitionImpl parameterDefinition = new ParameterDefinitionImpl();
+        return parameterDefinition;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ParameterFieldDefinition createParameterFieldDefinition()
+    {
+        ParameterFieldDefinitionImpl parameterFieldDefinition = new ParameterFieldDefinitionImpl();
+        return parameterFieldDefinition;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ParameterFields createParameterFields()
+    {
+        ParameterFieldsImpl parameterFields = new ParameterFieldsImpl();
+        return parameterFields;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public Properties createProperties()
+    {
+        PropertiesImpl properties = new PropertiesImpl();
+        return properties;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public Property createProperty()
+    {
+        PropertyImpl property = new PropertyImpl();
+        return property;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public PropertyAttributes createPropertyAttributes()
+    {
+        PropertyAttributesImpl propertyAttributes = new PropertyAttributesImpl();
+        return propertyAttributes;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ResourceIdentifiers createResourceIdentifiers()
+    {
+        ResourceIdentifiersImpl resourceIdentifiers = new ResourceIdentifiersImpl();
+        return resourceIdentifiers;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ResultSetColumns createResultSetColumns()
+    {
+        ResultSetColumnsImpl resultSetColumns = new ResultSetColumnsImpl();
+        return resultSetColumns;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ResultSetCriteria createResultSetCriteria()
+    {
+        ResultSetCriteriaImpl resultSetCriteria = new ResultSetCriteriaImpl();
+        return resultSetCriteria;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ResultSetDefinition createResultSetDefinition()
+    {
+        ResultSetDefinitionImpl resultSetDefinition = new ResultSetDefinitionImpl();
+        return resultSetDefinition;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ResultSets createResultSets()
+    {
+        ResultSetsImpl resultSets = new ResultSetsImpl();
+        return resultSets;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ResultSubset createResultSubset()
+    {
+        ResultSubsetImpl resultSubset = new ResultSubsetImpl();
+        return resultSubset;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ScalarValueChoices createScalarValueChoices()
+    {
+        ScalarValueChoicesImpl scalarValueChoices = new ScalarValueChoicesImpl();
+        return scalarValueChoices;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ScalarValueDefinition createScalarValueDefinition()
+    {
+        ScalarValueDefinitionImpl scalarValueDefinition = new ScalarValueDefinitionImpl();
+        return scalarValueDefinition;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public SortKey createSortKey()
+    {
+        SortKeyImpl sortKey = new SortKeyImpl();
+        return sortKey;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public SortSpecification createSortSpecification()
+    {
+        SortSpecificationImpl sortSpecification = new SortSpecificationImpl();
+        return sortSpecification;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public StaticValues createStaticValues()
+    {
+        StaticValuesImpl staticValues = new StaticValuesImpl();
+        return staticValues;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ValueFormatHints createValueFormatHints()
+    {
+        ValueFormatHintsImpl valueFormatHints = new ValueFormatHintsImpl();
+        return valueFormatHints;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public AxisType createAxisTypeFromString( EDataType eDataType,
+            String initialValue )
+    {
+        AxisType result = AxisType.get( initialValue );
+        if( result == null )
+            throw new IllegalArgumentException(
+                    "The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+        return result;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String convertAxisTypeToString( EDataType eDataType,
+            Object instanceValue )
+    {
+        return instanceValue == null ? null : instanceValue.toString();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ElementNullability createElementNullabilityFromString(
+            EDataType eDataType, String initialValue )
+    {
+        ElementNullability result = ElementNullability.get( initialValue );
+        if( result == null )
+            throw new IllegalArgumentException(
+                    "The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+        return result;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String convertElementNullabilityToString( EDataType eDataType,
+            Object instanceValue )
+    {
+        return instanceValue == null ? null : instanceValue.toString();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ExpressionVariableType createExpressionVariableTypeFromString(
+            EDataType eDataType, String initialValue )
+    {
+        ExpressionVariableType result = ExpressionVariableType
+                .get( initialValue );
+        if( result == null )
+            throw new IllegalArgumentException(
+                    "The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+        return result;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String convertExpressionVariableTypeToString( EDataType eDataType,
+            Object instanceValue )
+    {
+        return instanceValue == null ? null : instanceValue.toString();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public HorizontalAlignment createHorizontalAlignmentFromString(
+            EDataType eDataType, String initialValue )
+    {
+        HorizontalAlignment result = HorizontalAlignment.get( initialValue );
+        if( result == null )
+            throw new IllegalArgumentException(
+                    "The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+        return result;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String convertHorizontalAlignmentToString( EDataType eDataType,
+            Object instanceValue )
+    {
+        return instanceValue == null ? null : instanceValue.toString();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public InputPromptControlStyle createInputPromptControlStyleFromString(
+            EDataType eDataType, String initialValue )
+    {
+        InputPromptControlStyle result = InputPromptControlStyle
+                .get( initialValue );
+        if( result == null )
+            throw new IllegalArgumentException(
+                    "The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+        return result;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String convertInputPromptControlStyleToString( EDataType eDataType,
+            Object instanceValue )
+    {
+        return instanceValue == null ? null : instanceValue.toString();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NullOrderingType createNullOrderingTypeFromString(
+            EDataType eDataType, String initialValue )
+    {
+        NullOrderingType result = NullOrderingType.get( initialValue );
+        if( result == null )
+            throw new IllegalArgumentException(
+                    "The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+        return result;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String convertNullOrderingTypeToString( EDataType eDataType,
+            Object instanceValue )
+    {
+        return instanceValue == null ? null : instanceValue.toString();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public OdaComplexDataType createOdaComplexDataTypeFromString(
+            EDataType eDataType, String initialValue )
+    {
+        OdaComplexDataType result = OdaComplexDataType.get( initialValue );
+        if( result == null )
+            throw new IllegalArgumentException(
+                    "The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+        return result;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String convertOdaComplexDataTypeToString( EDataType eDataType,
+            Object instanceValue )
+    {
+        return instanceValue == null ? null : instanceValue.toString();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public OdaScalarDataType createOdaScalarDataTypeFromString(
+            EDataType eDataType, String initialValue )
+    {
+        OdaScalarDataType result = OdaScalarDataType.get( initialValue );
+        if( result == null )
+            throw new IllegalArgumentException(
+                    "The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+        return result;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String convertOdaScalarDataTypeToString( EDataType eDataType,
+            Object instanceValue )
+    {
+        return instanceValue == null ? null : instanceValue.toString();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ParameterMode createParameterModeFromString( EDataType eDataType,
+            String initialValue )
+    {
+        ParameterMode result = ParameterMode.get( initialValue );
+        if( result == null )
+            throw new IllegalArgumentException(
+                    "The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+        return result;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String convertParameterModeToString( EDataType eDataType,
+            Object instanceValue )
+    {
+        return instanceValue == null ? null : instanceValue.toString();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public SessionStatus createSessionStatusFromString( EDataType eDataType,
+            String initialValue )
+    {
+        SessionStatus result = SessionStatus.get( initialValue );
+        if( result == null )
+            throw new IllegalArgumentException(
+                    "The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+        return result;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String convertSessionStatusToString( EDataType eDataType,
+            Object instanceValue )
+    {
+        return instanceValue == null ? null : instanceValue.toString();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public SortDirectionType createSortDirectionTypeFromString(
+            EDataType eDataType, String initialValue )
+    {
+        SortDirectionType result = SortDirectionType.get( initialValue );
+        if( result == null )
+            throw new IllegalArgumentException(
+                    "The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+        return result;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String convertSortDirectionTypeToString( EDataType eDataType,
+            Object instanceValue )
+    {
+        return instanceValue == null ? null : instanceValue.toString();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public TextFormatType createTextFormatTypeFromString( EDataType eDataType,
+            String initialValue )
+    {
+        TextFormatType result = TextFormatType.get( initialValue );
+        if( result == null )
+            throw new IllegalArgumentException(
+                    "The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+        return result;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String convertTextFormatTypeToString( EDataType eDataType,
+            Object instanceValue )
+    {
+        return instanceValue == null ? null : instanceValue.toString();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public TextWrapType createTextWrapTypeFromString( EDataType eDataType,
+            String initialValue )
+    {
+        TextWrapType result = TextWrapType.get( initialValue );
+        if( result == null )
+            throw new IllegalArgumentException(
+                    "The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+        return result;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String convertTextWrapTypeToString( EDataType eDataType,
+            Object instanceValue )
+    {
+        return instanceValue == null ? null : instanceValue.toString();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public AxisType createAxisTypeObjectFromString( EDataType eDataType,
+            String initialValue )
+    {
+        return createAxisTypeFromString( DesignPackage.Literals.AXIS_TYPE,
+                initialValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String convertAxisTypeObjectToString( EDataType eDataType,
+            Object instanceValue )
+    {
+        return convertAxisTypeToString( DesignPackage.Literals.AXIS_TYPE,
+                instanceValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ElementNullability createElementNullabilityObjectFromString(
+            EDataType eDataType, String initialValue )
+    {
+        return createElementNullabilityFromString(
+                DesignPackage.Literals.ELEMENT_NULLABILITY, initialValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String convertElementNullabilityObjectToString( EDataType eDataType,
+            Object instanceValue )
+    {
+        return convertElementNullabilityToString(
+                DesignPackage.Literals.ELEMENT_NULLABILITY, instanceValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ExpressionVariableType createExpressionVariableTypeObjectFromString(
+            EDataType eDataType, String initialValue )
+    {
+        return createExpressionVariableTypeFromString(
+                DesignPackage.Literals.EXPRESSION_VARIABLE_TYPE, initialValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String convertExpressionVariableTypeObjectToString(
+            EDataType eDataType, Object instanceValue )
+    {
+        return convertExpressionVariableTypeToString(
+                DesignPackage.Literals.EXPRESSION_VARIABLE_TYPE, instanceValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public HorizontalAlignment createHorizontalAlignmentObjectFromString(
+            EDataType eDataType, String initialValue )
+    {
+        return createHorizontalAlignmentFromString(
+                DesignPackage.Literals.HORIZONTAL_ALIGNMENT, initialValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String convertHorizontalAlignmentObjectToString(
+            EDataType eDataType, Object instanceValue )
+    {
+        return convertHorizontalAlignmentToString(
+                DesignPackage.Literals.HORIZONTAL_ALIGNMENT, instanceValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public InputPromptControlStyle createInputPromptControlStyleObjectFromString(
+            EDataType eDataType, String initialValue )
+    {
+        return createInputPromptControlStyleFromString(
+                DesignPackage.Literals.INPUT_PROMPT_CONTROL_STYLE, initialValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String convertInputPromptControlStyleObjectToString(
+            EDataType eDataType, Object instanceValue )
+    {
+        return convertInputPromptControlStyleToString(
+                DesignPackage.Literals.INPUT_PROMPT_CONTROL_STYLE,
+                instanceValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NullOrderingType createNullOrderingTypeObjectFromString(
+            EDataType eDataType, String initialValue )
+    {
+        return createNullOrderingTypeFromString(
+                DesignPackage.Literals.NULL_ORDERING_TYPE, initialValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String convertNullOrderingTypeObjectToString( EDataType eDataType,
+            Object instanceValue )
+    {
+        return convertNullOrderingTypeToString(
+                DesignPackage.Literals.NULL_ORDERING_TYPE, instanceValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public OdaComplexDataType createOdaComplexDataTypeObjectFromString(
+            EDataType eDataType, String initialValue )
+    {
+        return createOdaComplexDataTypeFromString(
+                DesignPackage.Literals.ODA_COMPLEX_DATA_TYPE, initialValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String convertOdaComplexDataTypeObjectToString( EDataType eDataType,
+            Object instanceValue )
+    {
+        return convertOdaComplexDataTypeToString(
+                DesignPackage.Literals.ODA_COMPLEX_DATA_TYPE, instanceValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public OdaScalarDataType createOdaScalarDataTypeObjectFromString(
+            EDataType eDataType, String initialValue )
+    {
+        return createOdaScalarDataTypeFromString(
+                DesignPackage.Literals.ODA_SCALAR_DATA_TYPE, initialValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String convertOdaScalarDataTypeObjectToString( EDataType eDataType,
+            Object instanceValue )
+    {
+        return convertOdaScalarDataTypeToString(
+                DesignPackage.Literals.ODA_SCALAR_DATA_TYPE, instanceValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ParameterMode createParameterModeObjectFromString(
+            EDataType eDataType, String initialValue )
+    {
+        return createParameterModeFromString(
+                DesignPackage.Literals.PARAMETER_MODE, initialValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String convertParameterModeObjectToString( EDataType eDataType,
+            Object instanceValue )
+    {
+        return convertParameterModeToString(
+                DesignPackage.Literals.PARAMETER_MODE, instanceValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public SessionStatus createSessionStatusObjectFromString(
+            EDataType eDataType, String initialValue )
+    {
+        return createSessionStatusFromString(
+                DesignPackage.Literals.SESSION_STATUS, initialValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String convertSessionStatusObjectToString( EDataType eDataType,
+            Object instanceValue )
+    {
+        return convertSessionStatusToString(
+                DesignPackage.Literals.SESSION_STATUS, instanceValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public SortDirectionType createSortDirectionTypeObjectFromString(
+            EDataType eDataType, String initialValue )
+    {
+        return createSortDirectionTypeFromString(
+                DesignPackage.Literals.SORT_DIRECTION_TYPE, initialValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String convertSortDirectionTypeObjectToString( EDataType eDataType,
+            Object instanceValue )
+    {
+        return convertSortDirectionTypeToString(
+                DesignPackage.Literals.SORT_DIRECTION_TYPE, instanceValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public TextFormatType createTextFormatTypeObjectFromString(
+            EDataType eDataType, String initialValue )
+    {
+        return createTextFormatTypeFromString(
+                DesignPackage.Literals.TEXT_FORMAT_TYPE, initialValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String convertTextFormatTypeObjectToString( EDataType eDataType,
+            Object instanceValue )
+    {
+        return convertTextFormatTypeToString(
+                DesignPackage.Literals.TEXT_FORMAT_TYPE, instanceValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public TextWrapType createTextWrapTypeObjectFromString(
+            EDataType eDataType, String initialValue )
+    {
+        return createTextWrapTypeFromString(
+                DesignPackage.Literals.TEXT_WRAP_TYPE, initialValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String convertTextWrapTypeObjectToString( EDataType eDataType,
+            Object instanceValue )
+    {
+        return convertTextWrapTypeToString(
+                DesignPackage.Literals.TEXT_WRAP_TYPE, instanceValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DesignPackage getDesignPackage()
+    {
+        return (DesignPackage) getEPackage();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @deprecated
+     * @generated
+     */
+    @Deprecated
+    public static DesignPackage getPackage()
+    {
+        return DesignPackage.eINSTANCE;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignFactory#createDesignSessionRequest(org.eclipse.datatools.connectivity.oda.design.DataSourceDesign)
+     * @generated NOT
+     */
+    public DesignSessionRequest createDesignSessionRequest(
+            DataSourceDesign dataSourceDesign )
+    {
+        DesignSessionRequest newRequest = createDesignSessionRequest();
+        newRequest.setNewDataAccessDesign( dataSourceDesign );
+        return newRequest;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignFactory#createDesignSessionRequest(org.eclipse.datatools.connectivity.oda.design.DataSetDesign)
+     * @generated NOT
+     */
+    public DesignSessionRequest createDesignSessionRequest(
+            DataSetDesign dataSetDesign )
+    {
+        DesignSessionRequest newRequest = createDesignSessionRequest();
+        newRequest.setNewDataAccessDesign( dataSetDesign );
+        return newRequest;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignFactory#createRequestDesignSession(org.eclipse.datatools.connectivity.oda.design.DataSourceDesign)
+     * @generated NOT
+     */
+    public OdaDesignSession createRequestDesignSession(
+            DataSourceDesign dataSourceDesign )
+    {
+        OdaDesignSession newSession = createOdaDesignSession();
+        newSession.setNewRequest( dataSourceDesign );
+        return newSession;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignFactory#createResponseDesignSession(boolean, org.eclipse.datatools.connectivity.oda.design.DataSourceDesign)
+     * @generated NOT
+     */
+    public OdaDesignSession createResponseDesignSession( boolean isSessionOk,
+            DataSourceDesign dataSourceDesign )
+    {
+        // create a design session with an empty DataAccessDesign in the request
+        OdaDesignSession newSession = createRequestDesignSession( null );
+
+        // sets a new response with the given session status and DataSourceDesign
+        newSession.setNewResponse( isSessionOk, dataSourceDesign );
+        return newSession;
+    }
+
+} //DesignFactoryImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DesignPackageImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DesignPackageImpl.java
new file mode 100644
index 0000000..9b810d9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DesignPackageImpl.java
@@ -0,0 +1,6071 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DesignPackageImpl.java,v 1.22 2011/03/08 22:59:10 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.AndExpression;
+import org.eclipse.datatools.connectivity.oda.design.AtomicExpressionContext;
+import org.eclipse.datatools.connectivity.oda.design.AxisAttributes;
+import org.eclipse.datatools.connectivity.oda.design.AxisType;
+import org.eclipse.datatools.connectivity.oda.design.ColumnDefinition;
+import org.eclipse.datatools.connectivity.oda.design.CompositeFilterExpression;
+import org.eclipse.datatools.connectivity.oda.design.CustomData;
+import org.eclipse.datatools.connectivity.oda.design.CustomFilterExpression;
+import org.eclipse.datatools.connectivity.oda.design.DataAccessDesign;
+import org.eclipse.datatools.connectivity.oda.design.DataElementAttributes;
+import org.eclipse.datatools.connectivity.oda.design.DataElementIdentifier;
+import org.eclipse.datatools.connectivity.oda.design.DataElementIdentifiers;
+import org.eclipse.datatools.connectivity.oda.design.DataElementUIHints;
+import org.eclipse.datatools.connectivity.oda.design.DataSetDesign;
+import org.eclipse.datatools.connectivity.oda.design.DataSetParameters;
+import org.eclipse.datatools.connectivity.oda.design.DataSetQuery;
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest;
+import org.eclipse.datatools.connectivity.oda.design.DesignSessionResponse;
+import org.eclipse.datatools.connectivity.oda.design.DesignerState;
+import org.eclipse.datatools.connectivity.oda.design.DesignerStateContent;
+import org.eclipse.datatools.connectivity.oda.design.DocumentRoot;
+import org.eclipse.datatools.connectivity.oda.design.DynamicFilterExpression;
+import org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery;
+import org.eclipse.datatools.connectivity.oda.design.ElementNullability;
+import org.eclipse.datatools.connectivity.oda.design.ExpressionArguments;
+import org.eclipse.datatools.connectivity.oda.design.ExpressionParameterDefinition;
+import org.eclipse.datatools.connectivity.oda.design.ExpressionParameters;
+import org.eclipse.datatools.connectivity.oda.design.ExpressionVariable;
+import org.eclipse.datatools.connectivity.oda.design.ExpressionVariableType;
+import org.eclipse.datatools.connectivity.oda.design.FilterExpression;
+import org.eclipse.datatools.connectivity.oda.design.FilterExpressionType;
+import org.eclipse.datatools.connectivity.oda.design.HorizontalAlignment;
+import org.eclipse.datatools.connectivity.oda.design.InputElementAttributes;
+import org.eclipse.datatools.connectivity.oda.design.InputElementUIHints;
+import org.eclipse.datatools.connectivity.oda.design.InputParameterAttributes;
+import org.eclipse.datatools.connectivity.oda.design.InputParameterUIHints;
+import org.eclipse.datatools.connectivity.oda.design.InputPromptControlStyle;
+import org.eclipse.datatools.connectivity.oda.design.Locale;
+import org.eclipse.datatools.connectivity.oda.design.NameValuePair;
+import org.eclipse.datatools.connectivity.oda.design.NotExpression;
+import org.eclipse.datatools.connectivity.oda.design.NullOrderingType;
+import org.eclipse.datatools.connectivity.oda.design.OdaComplexDataType;
+import org.eclipse.datatools.connectivity.oda.design.OdaDesignSession;
+import org.eclipse.datatools.connectivity.oda.design.OdaScalarDataType;
+import org.eclipse.datatools.connectivity.oda.design.OrExpression;
+import org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes;
+import org.eclipse.datatools.connectivity.oda.design.ParameterDefinition;
+import org.eclipse.datatools.connectivity.oda.design.ParameterFieldDefinition;
+import org.eclipse.datatools.connectivity.oda.design.ParameterFields;
+import org.eclipse.datatools.connectivity.oda.design.ParameterMode;
+import org.eclipse.datatools.connectivity.oda.design.Properties;
+import org.eclipse.datatools.connectivity.oda.design.Property;
+import org.eclipse.datatools.connectivity.oda.design.PropertyAttributes;
+import org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers;
+import org.eclipse.datatools.connectivity.oda.design.ResultSetColumns;
+import org.eclipse.datatools.connectivity.oda.design.ResultSetCriteria;
+import org.eclipse.datatools.connectivity.oda.design.ResultSetDefinition;
+import org.eclipse.datatools.connectivity.oda.design.ResultSets;
+import org.eclipse.datatools.connectivity.oda.design.ResultSubset;
+import org.eclipse.datatools.connectivity.oda.design.ScalarValueChoices;
+import org.eclipse.datatools.connectivity.oda.design.ScalarValueDefinition;
+import org.eclipse.datatools.connectivity.oda.design.SessionStatus;
+import org.eclipse.datatools.connectivity.oda.design.SortDirectionType;
+import org.eclipse.datatools.connectivity.oda.design.SortKey;
+import org.eclipse.datatools.connectivity.oda.design.SortSpecification;
+import org.eclipse.datatools.connectivity.oda.design.StaticValues;
+import org.eclipse.datatools.connectivity.oda.design.TextFormatType;
+import org.eclipse.datatools.connectivity.oda.design.TextWrapType;
+import org.eclipse.datatools.connectivity.oda.design.ValueFormatHints;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+import org.eclipse.emf.ecore.xml.type.XMLTypePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class DesignPackageImpl extends EPackageImpl implements DesignPackage
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2011 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass andExpressionEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass atomicExpressionContextEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass axisAttributesEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass columnDefinitionEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass compositeFilterExpressionEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass customDataEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass customFilterExpressionEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass dataAccessDesignEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass dataElementAttributesEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass dataElementIdentifierEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass dataElementIdentifiersEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass dataElementUIHintsEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass dataSetDesignEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass dataSetParametersEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass dataSetQueryEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass dataSourceDesignEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass designerStateEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass designerStateContentEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass designSessionRequestEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass designSessionResponseEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass documentRootEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass dynamicFilterExpressionEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass dynamicValuesQueryEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass expressionArgumentsEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass expressionParameterDefinitionEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass expressionParametersEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass expressionVariableEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass filterExpressionEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass filterExpressionTypeEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass inputElementAttributesEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass inputElementUIHintsEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass inputParameterAttributesEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass inputParameterUIHintsEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass localeEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass nameValuePairEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass notExpressionEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass odaDesignSessionEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass orExpressionEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass outputElementAttributesEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass parameterDefinitionEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass parameterFieldDefinitionEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass parameterFieldsEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass propertiesEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass propertyEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass propertyAttributesEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass resourceIdentifiersEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass resultSetColumnsEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass resultSetCriteriaEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass resultSetDefinitionEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass resultSetsEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass resultSubsetEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass scalarValueChoicesEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass scalarValueDefinitionEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass sortKeyEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass sortSpecificationEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass staticValuesEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EClass valueFormatHintsEClass = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EEnum axisTypeEEnum = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EEnum elementNullabilityEEnum = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EEnum expressionVariableTypeEEnum = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EEnum horizontalAlignmentEEnum = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EEnum inputPromptControlStyleEEnum = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EEnum nullOrderingTypeEEnum = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EEnum odaComplexDataTypeEEnum = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EEnum odaScalarDataTypeEEnum = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EEnum parameterModeEEnum = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EEnum sessionStatusEEnum = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EEnum sortDirectionTypeEEnum = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EEnum textFormatTypeEEnum = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EEnum textWrapTypeEEnum = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EDataType axisTypeObjectEDataType = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EDataType elementNullabilityObjectEDataType = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EDataType expressionVariableTypeObjectEDataType = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EDataType horizontalAlignmentObjectEDataType = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EDataType inputPromptControlStyleObjectEDataType = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EDataType nullOrderingTypeObjectEDataType = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EDataType odaComplexDataTypeObjectEDataType = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EDataType odaScalarDataTypeObjectEDataType = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EDataType parameterModeObjectEDataType = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EDataType sessionStatusObjectEDataType = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EDataType sortDirectionTypeObjectEDataType = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EDataType textFormatTypeObjectEDataType = null;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private EDataType textWrapTypeObjectEDataType = null;
+
+    /**
+     * Creates an instance of the model <b>Package</b>, registered with
+     * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+     * package URI value.
+     * <p>Note: the correct way to create the package is via the static
+     * factory method {@link #init init()}, which also performs
+     * initialization of the package, or returns the registered package,
+     * if one already exists.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.emf.ecore.EPackage.Registry
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage#eNS_URI
+     * @see #init()
+     * @generated
+     */
+    private DesignPackageImpl()
+    {
+        super( eNS_URI, DesignFactory.eINSTANCE );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private static boolean isInited = false;
+
+    /**
+     * Creates, registers, and initializes the <b>Package</b> for this
+     * model, and for any others upon which it depends.  Simple
+     * dependencies are satisfied by calling this method on all
+     * dependent packages before doing anything else.  This method drives
+     * initialization for interdependent packages directly, in parallel
+     * with this package, itself.
+     * <p>Of this package and its interdependencies, all packages which
+     * have not yet been registered by their URI values are first created
+     * and registered.  The packages are then initialized in two steps:
+     * meta-model objects for all of the packages are created before any
+     * are initialized, since one package's meta-model objects may refer to
+     * those of another.
+     * <p>Invocation of this method will not affect any packages that have
+     * already been initialized.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #eNS_URI
+     * @see #createPackageContents()
+     * @see #initializePackageContents()
+     * @generated
+     */
+    public static DesignPackage init()
+    {
+        if( isInited )
+            return (DesignPackage) EPackage.Registry.INSTANCE
+                    .getEPackage( DesignPackage.eNS_URI );
+
+        // Obtain or create and register package
+        DesignPackageImpl theDesignPackage = (DesignPackageImpl) (EPackage.Registry.INSTANCE
+                .getEPackage( eNS_URI ) instanceof DesignPackageImpl ? EPackage.Registry.INSTANCE
+                .getEPackage( eNS_URI )
+                : new DesignPackageImpl());
+
+        isInited = true;
+
+        // Initialize simple dependencies
+        XMLTypePackage.eINSTANCE.eClass();
+
+        // Create package meta-data objects
+        theDesignPackage.createPackageContents();
+
+        // Initialize created meta-data
+        theDesignPackage.initializePackageContents();
+
+        // Mark meta-data to indicate it can't be changed
+        theDesignPackage.freeze();
+
+        return theDesignPackage;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getAndExpression()
+    {
+        return andExpressionEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getAtomicExpressionContext()
+    {
+        return atomicExpressionContextEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getAtomicExpressionContext_Optional()
+    {
+        return (EAttribute) atomicExpressionContextEClass
+                .getEStructuralFeatures().get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getAtomicExpressionContext_Variable()
+    {
+        return (EReference) atomicExpressionContextEClass
+                .getEStructuralFeatures().get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getAtomicExpressionContext_Arguments()
+    {
+        return (EReference) atomicExpressionContextEClass
+                .getEStructuralFeatures().get( 2 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getAxisAttributes()
+    {
+        return axisAttributesEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getAxisAttributes_AxisType()
+    {
+        return (EAttribute) axisAttributesEClass.getEStructuralFeatures().get(
+                0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getAxisAttributes_OnColumnLayout()
+    {
+        return (EAttribute) axisAttributesEClass.getEStructuralFeatures().get(
+                1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getAxisAttributes_RelatedColumns()
+    {
+        return (EReference) axisAttributesEClass.getEStructuralFeatures().get(
+                2 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getColumnDefinition()
+    {
+        return columnDefinitionEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getColumnDefinition_Attributes()
+    {
+        return (EReference) columnDefinitionEClass.getEStructuralFeatures()
+                .get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getColumnDefinition_UsageHints()
+    {
+        return (EReference) columnDefinitionEClass.getEStructuralFeatures()
+                .get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getColumnDefinition_MultiDimensionAttributes()
+    {
+        return (EReference) columnDefinitionEClass.getEStructuralFeatures()
+                .get( 2 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getCompositeFilterExpression()
+    {
+        return compositeFilterExpressionEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getCompositeFilterExpression_Children()
+    {
+        return (EReference) compositeFilterExpressionEClass
+                .getEStructuralFeatures().get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getCustomData()
+    {
+        return customDataEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getCustomData_ProviderId()
+    {
+        return (EAttribute) customDataEClass.getEStructuralFeatures().get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getCustomData_Value()
+    {
+        return (EAttribute) customDataEClass.getEStructuralFeatures().get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getCustomData_DisplayValue()
+    {
+        return (EAttribute) customDataEClass.getEStructuralFeatures().get( 2 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getCustomFilterExpression()
+    {
+        return customFilterExpressionEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getCustomFilterExpression_Type()
+    {
+        return (EReference) customFilterExpressionEClass
+                .getEStructuralFeatures().get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getCustomFilterExpression_Context()
+    {
+        return (EReference) customFilterExpressionEClass
+                .getEStructuralFeatures().get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getDataAccessDesign()
+    {
+        return dataAccessDesignEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getDataAccessDesign_DataSetDesign()
+    {
+        return (EReference) dataAccessDesignEClass.getEStructuralFeatures()
+                .get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getDataElementAttributes()
+    {
+        return dataElementAttributesEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getDataElementAttributes_Identifier()
+    {
+        return (EReference) dataElementAttributesEClass
+                .getEStructuralFeatures().get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDataElementAttributes_Name()
+    {
+        return (EAttribute) dataElementAttributesEClass
+                .getEStructuralFeatures().get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDataElementAttributes_Position()
+    {
+        return (EAttribute) dataElementAttributesEClass
+                .getEStructuralFeatures().get( 2 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDataElementAttributes_NativeDataTypeCode()
+    {
+        return (EAttribute) dataElementAttributesEClass
+                .getEStructuralFeatures().get( 3 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDataElementAttributes_Precision()
+    {
+        return (EAttribute) dataElementAttributesEClass
+                .getEStructuralFeatures().get( 4 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDataElementAttributes_Scale()
+    {
+        return (EAttribute) dataElementAttributesEClass
+                .getEStructuralFeatures().get( 5 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDataElementAttributes_Nullability()
+    {
+        return (EAttribute) dataElementAttributesEClass
+                .getEStructuralFeatures().get( 6 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getDataElementAttributes_UiHints()
+    {
+        return (EReference) dataElementAttributesEClass
+                .getEStructuralFeatures().get( 7 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getDataElementIdentifier()
+    {
+        return dataElementIdentifierEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDataElementIdentifier_Name()
+    {
+        return (EAttribute) dataElementIdentifierEClass
+                .getEStructuralFeatures().get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDataElementIdentifier_Position()
+    {
+        return (EAttribute) dataElementIdentifierEClass
+                .getEStructuralFeatures().get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getDataElementIdentifiers()
+    {
+        return dataElementIdentifiersEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getDataElementIdentifiers_Identifiers()
+    {
+        return (EReference) dataElementIdentifiersEClass
+                .getEStructuralFeatures().get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getDataElementUIHints()
+    {
+        return dataElementUIHintsEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDataElementUIHints_DisplayName()
+    {
+        return (EAttribute) dataElementUIHintsEClass.getEStructuralFeatures()
+                .get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDataElementUIHints_Description()
+    {
+        return (EAttribute) dataElementUIHintsEClass.getEStructuralFeatures()
+                .get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getDataSetDesign()
+    {
+        return dataSetDesignEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDataSetDesign_Name()
+    {
+        return (EAttribute) dataSetDesignEClass.getEStructuralFeatures()
+                .get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDataSetDesign_OdaExtensionDataSetId()
+    {
+        return (EAttribute) dataSetDesignEClass.getEStructuralFeatures()
+                .get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getDataSetDesign_DataSourceDesign()
+    {
+        return (EReference) dataSetDesignEClass.getEStructuralFeatures()
+                .get( 2 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getDataSetDesign_Query()
+    {
+        return (EReference) dataSetDesignEClass.getEStructuralFeatures()
+                .get( 3 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDataSetDesign_DisplayName()
+    {
+        return (EAttribute) dataSetDesignEClass.getEStructuralFeatures()
+                .get( 4 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getDataSetDesign_PublicProperties()
+    {
+        return (EReference) dataSetDesignEClass.getEStructuralFeatures()
+                .get( 5 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getDataSetDesign_PrivateProperties()
+    {
+        return (EReference) dataSetDesignEClass.getEStructuralFeatures()
+                .get( 6 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getDataSetDesign_ResultSets()
+    {
+        return (EReference) dataSetDesignEClass.getEStructuralFeatures()
+                .get( 7 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDataSetDesign_PrimaryResultSetName()
+    {
+        return (EAttribute) dataSetDesignEClass.getEStructuralFeatures()
+                .get( 8 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getDataSetDesign_Parameters()
+    {
+        return (EReference) dataSetDesignEClass.getEStructuralFeatures()
+                .get( 9 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getDataSetParameters()
+    {
+        return dataSetParametersEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getDataSetParameters_ParameterDefinitions()
+    {
+        return (EReference) dataSetParametersEClass.getEStructuralFeatures()
+                .get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDataSetParameters_DerivedMetaData()
+    {
+        return (EAttribute) dataSetParametersEClass.getEStructuralFeatures()
+                .get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getDataSetQuery()
+    {
+        return dataSetQueryEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDataSetQuery_QueryText()
+    {
+        return (EAttribute) dataSetQueryEClass.getEStructuralFeatures().get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getDataSourceDesign()
+    {
+        return dataSourceDesignEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDataSourceDesign_Name()
+    {
+        return (EAttribute) dataSourceDesignEClass.getEStructuralFeatures()
+                .get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDataSourceDesign_OdaExtensionId()
+    {
+        return (EAttribute) dataSourceDesignEClass.getEStructuralFeatures()
+                .get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDataSourceDesign_EffectiveOdaExtensionId()
+    {
+        return (EAttribute) dataSourceDesignEClass.getEStructuralFeatures()
+                .get( 2 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDataSourceDesign_OdaExtensionDataSourceId()
+    {
+        return (EAttribute) dataSourceDesignEClass.getEStructuralFeatures()
+                .get( 3 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDataSourceDesign_DisplayName()
+    {
+        return (EAttribute) dataSourceDesignEClass.getEStructuralFeatures()
+                .get( 4 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getDataSourceDesign_PublicProperties()
+    {
+        return (EReference) dataSourceDesignEClass.getEStructuralFeatures()
+                .get( 5 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getDataSourceDesign_PrivateProperties()
+    {
+        return (EReference) dataSourceDesignEClass.getEStructuralFeatures()
+                .get( 6 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDataSourceDesign_LinkedProfileName()
+    {
+        return (EAttribute) dataSourceDesignEClass.getEStructuralFeatures()
+                .get( 7 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDataSourceDesign_LinkedProfileStoreFilePath()
+    {
+        return (EAttribute) dataSourceDesignEClass.getEStructuralFeatures()
+                .get( 8 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getDataSourceDesign_HostResourceIdentifiers()
+    {
+        return (EReference) dataSourceDesignEClass.getEStructuralFeatures()
+                .get( 9 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDataSourceDesign_ResourceFile()
+    {
+        return (EAttribute) dataSourceDesignEClass.getEStructuralFeatures()
+                .get( 10 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getDesignerState()
+    {
+        return designerStateEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDesignerState_Version()
+    {
+        return (EAttribute) designerStateEClass.getEStructuralFeatures()
+                .get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getDesignerState_StateContent()
+    {
+        return (EReference) designerStateEClass.getEStructuralFeatures()
+                .get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getDesignerStateContent()
+    {
+        return designerStateContentEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDesignerStateContent_StateContentAsString()
+    {
+        return (EAttribute) designerStateContentEClass.getEStructuralFeatures()
+                .get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDesignerStateContent_StateContentAsBlob()
+    {
+        return (EAttribute) designerStateContentEClass.getEStructuralFeatures()
+                .get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getDesignSessionRequest()
+    {
+        return designSessionRequestEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getDesignSessionRequest_DataAccessDesign()
+    {
+        return (EReference) designSessionRequestEClass.getEStructuralFeatures()
+                .get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDesignSessionRequest_Editable()
+    {
+        return (EAttribute) designSessionRequestEClass.getEStructuralFeatures()
+                .get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getDesignSessionRequest_SessionLocale()
+    {
+        return (EReference) designSessionRequestEClass.getEStructuralFeatures()
+                .get( 2 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getDesignSessionRequest_DesignerState()
+    {
+        return (EReference) designSessionRequestEClass.getEStructuralFeatures()
+                .get( 3 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getDesignSessionResponse()
+    {
+        return designSessionResponseEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDesignSessionResponse_SessionStatus()
+    {
+        return (EAttribute) designSessionResponseEClass
+                .getEStructuralFeatures().get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getDesignSessionResponse_DataAccessDesign()
+    {
+        return (EReference) designSessionResponseEClass
+                .getEStructuralFeatures().get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getDesignSessionResponse_DesignerState()
+    {
+        return (EReference) designSessionResponseEClass
+                .getEStructuralFeatures().get( 2 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getDocumentRoot()
+    {
+        return documentRootEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDocumentRoot_Mixed()
+    {
+        return (EAttribute) documentRootEClass.getEStructuralFeatures().get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getDocumentRoot_XMLNSPrefixMap()
+    {
+        return (EReference) documentRootEClass.getEStructuralFeatures().get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getDocumentRoot_XSISchemaLocation()
+    {
+        return (EReference) documentRootEClass.getEStructuralFeatures().get( 2 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getDocumentRoot_OdaDesignSession()
+    {
+        return (EReference) documentRootEClass.getEStructuralFeatures().get( 3 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getDynamicFilterExpression()
+    {
+        return dynamicFilterExpressionEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getDynamicFilterExpression_Context()
+    {
+        return (EReference) dynamicFilterExpressionEClass
+                .getEStructuralFeatures().get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getDynamicFilterExpression_DefaultType()
+    {
+        return (EReference) dynamicFilterExpressionEClass
+                .getEStructuralFeatures().get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getDynamicValuesQuery()
+    {
+        return dynamicValuesQueryEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getDynamicValuesQuery_DataSetDesign()
+    {
+        return (EReference) dynamicValuesQueryEClass.getEStructuralFeatures()
+                .get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDynamicValuesQuery_Enabled()
+    {
+        return (EAttribute) dynamicValuesQueryEClass.getEStructuralFeatures()
+                .get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getDynamicValuesQuery_ValueColumnIdentifier()
+    {
+        return (EReference) dynamicValuesQueryEClass.getEStructuralFeatures()
+                .get( 2 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDynamicValuesQuery_ValueColumn()
+    {
+        return (EAttribute) dynamicValuesQueryEClass.getEStructuralFeatures()
+                .get( 3 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getDynamicValuesQuery_DisplayNameColumn()
+    {
+        return (EAttribute) dynamicValuesQueryEClass.getEStructuralFeatures()
+                .get( 4 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getExpressionArguments()
+    {
+        return expressionArgumentsEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getExpressionArguments_ExpressionParameters()
+    {
+        return (EReference) expressionArgumentsEClass.getEStructuralFeatures()
+                .get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getExpressionParameterDefinition()
+    {
+        return expressionParameterDefinitionEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getExpressionParameterDefinition_StaticValues()
+    {
+        return (EReference) expressionParameterDefinitionEClass
+                .getEStructuralFeatures().get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getExpressionParameterDefinition_DynamicInputParameter()
+    {
+        return (EReference) expressionParameterDefinitionEClass
+                .getEStructuralFeatures().get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getExpressionParameters()
+    {
+        return expressionParametersEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getExpressionParameters_ParameterDefinitions()
+    {
+        return (EReference) expressionParametersEClass.getEStructuralFeatures()
+                .get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getExpressionVariable()
+    {
+        return expressionVariableEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getExpressionVariable_Type()
+    {
+        return (EAttribute) expressionVariableEClass.getEStructuralFeatures()
+                .get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getExpressionVariable_Identifier()
+    {
+        return (EAttribute) expressionVariableEClass.getEStructuralFeatures()
+                .get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getExpressionVariable_NativeDataTypeCode()
+    {
+        return (EAttribute) expressionVariableEClass.getEStructuralFeatures()
+                .get( 2 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getFilterExpression()
+    {
+        return filterExpressionEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getFilterExpression_Negatable()
+    {
+        return (EAttribute) filterExpressionEClass.getEStructuralFeatures()
+                .get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getFilterExpressionType()
+    {
+        return filterExpressionTypeEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getFilterExpressionType_DeclaringExtensionId()
+    {
+        return (EAttribute) filterExpressionTypeEClass.getEStructuralFeatures()
+                .get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getFilterExpressionType_Id()
+    {
+        return (EAttribute) filterExpressionTypeEClass.getEStructuralFeatures()
+                .get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getInputElementAttributes()
+    {
+        return inputElementAttributesEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getInputElementAttributes_DefaultScalarValue()
+    {
+        return (EAttribute) inputElementAttributesEClass
+                .getEStructuralFeatures().get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getInputElementAttributes_DefaultValues()
+    {
+        return (EReference) inputElementAttributesEClass
+                .getEStructuralFeatures().get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getInputElementAttributes_Editable()
+    {
+        return (EAttribute) inputElementAttributesEClass
+                .getEStructuralFeatures().get( 2 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getInputElementAttributes_Optional()
+    {
+        return (EAttribute) inputElementAttributesEClass
+                .getEStructuralFeatures().get( 3 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getInputElementAttributes_MasksValue()
+    {
+        return (EAttribute) inputElementAttributesEClass
+                .getEStructuralFeatures().get( 4 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getInputElementAttributes_StaticValueChoices()
+    {
+        return (EReference) inputElementAttributesEClass
+                .getEStructuralFeatures().get( 5 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getInputElementAttributes_DynamicValueChoices()
+    {
+        return (EReference) inputElementAttributesEClass
+                .getEStructuralFeatures().get( 6 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getInputElementAttributes_UiHints()
+    {
+        return (EReference) inputElementAttributesEClass
+                .getEStructuralFeatures().get( 7 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getInputElementUIHints()
+    {
+        return inputElementUIHintsEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getInputElementUIHints_PromptStyle()
+    {
+        return (EAttribute) inputElementUIHintsEClass.getEStructuralFeatures()
+                .get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getInputElementUIHints_AutoSuggestThreshold()
+    {
+        return (EAttribute) inputElementUIHintsEClass.getEStructuralFeatures()
+                .get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getInputParameterAttributes()
+    {
+        return inputParameterAttributesEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getInputParameterAttributes_ElementAttributes()
+    {
+        return (EReference) inputParameterAttributesEClass
+                .getEStructuralFeatures().get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getInputParameterAttributes_UiHints()
+    {
+        return (EReference) inputParameterAttributesEClass
+                .getEStructuralFeatures().get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getInputParameterUIHints()
+    {
+        return inputParameterUIHintsEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getInputParameterUIHints_GroupPromptDisplayName()
+    {
+        return (EAttribute) inputParameterUIHintsEClass
+                .getEStructuralFeatures().get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getLocale()
+    {
+        return localeEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getLocale_Language()
+    {
+        return (EAttribute) localeEClass.getEStructuralFeatures().get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getLocale_Country()
+    {
+        return (EAttribute) localeEClass.getEStructuralFeatures().get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getLocale_Variant()
+    {
+        return (EAttribute) localeEClass.getEStructuralFeatures().get( 2 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getNameValuePair()
+    {
+        return nameValuePairEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getNameValuePair_Name()
+    {
+        return (EAttribute) nameValuePairEClass.getEStructuralFeatures()
+                .get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getNameValuePair_Value()
+    {
+        return (EAttribute) nameValuePairEClass.getEStructuralFeatures()
+                .get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getNotExpression()
+    {
+        return notExpressionEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getNotExpression_NegatingExpression()
+    {
+        return (EReference) notExpressionEClass.getEStructuralFeatures()
+                .get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getOdaDesignSession()
+    {
+        return odaDesignSessionEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getOdaDesignSession_Request()
+    {
+        return (EReference) odaDesignSessionEClass.getEStructuralFeatures()
+                .get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getOdaDesignSession_Response()
+    {
+        return (EReference) odaDesignSessionEClass.getEStructuralFeatures()
+                .get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getOrExpression()
+    {
+        return orExpressionEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getOutputElementAttributes()
+    {
+        return outputElementAttributesEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getOutputElementAttributes_Label()
+    {
+        return (EAttribute) outputElementAttributesEClass
+                .getEStructuralFeatures().get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getOutputElementAttributes_FormattingHints()
+    {
+        return (EReference) outputElementAttributesEClass
+                .getEStructuralFeatures().get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getOutputElementAttributes_HelpText()
+    {
+        return (EAttribute) outputElementAttributesEClass
+                .getEStructuralFeatures().get( 2 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getParameterDefinition()
+    {
+        return parameterDefinitionEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getParameterDefinition_InOutMode()
+    {
+        return (EAttribute) parameterDefinitionEClass.getEStructuralFeatures()
+                .get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getParameterDefinition_Attributes()
+    {
+        return (EReference) parameterDefinitionEClass.getEStructuralFeatures()
+                .get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getParameterDefinition_InputAttributes()
+    {
+        return (EReference) parameterDefinitionEClass.getEStructuralFeatures()
+                .get( 2 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getParameterDefinition_OutputUsageHints()
+    {
+        return (EReference) parameterDefinitionEClass.getEStructuralFeatures()
+                .get( 3 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getParameterDefinition_Fields()
+    {
+        return (EReference) parameterDefinitionEClass.getEStructuralFeatures()
+                .get( 4 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getParameterFieldDefinition()
+    {
+        return parameterFieldDefinitionEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getParameterFieldDefinition_Attributes()
+    {
+        return (EReference) parameterFieldDefinitionEClass
+                .getEStructuralFeatures().get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getParameterFieldDefinition_InputAttributes()
+    {
+        return (EReference) parameterFieldDefinitionEClass
+                .getEStructuralFeatures().get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getParameterFieldDefinition_OutputUsageHints()
+    {
+        return (EReference) parameterFieldDefinitionEClass
+                .getEStructuralFeatures().get( 2 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getParameterFields()
+    {
+        return parameterFieldsEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getParameterFields_FieldCollection()
+    {
+        return (EReference) parameterFieldsEClass.getEStructuralFeatures().get(
+                0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getProperties()
+    {
+        return propertiesEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getProperties_Properties()
+    {
+        return (EReference) propertiesEClass.getEStructuralFeatures().get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getProperty()
+    {
+        return propertyEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getProperty_NameValue()
+    {
+        return (EReference) propertyEClass.getEStructuralFeatures().get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getProperty_DesignAttributes()
+    {
+        return (EReference) propertyEClass.getEStructuralFeatures().get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getPropertyAttributes()
+    {
+        return propertyAttributesEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getPropertyAttributes_DisplayName()
+    {
+        return (EAttribute) propertyAttributesEClass.getEStructuralFeatures()
+                .get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getPropertyAttributes_ElementAttributes()
+    {
+        return (EReference) propertyAttributesEClass.getEStructuralFeatures()
+                .get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getPropertyAttributes_DerivedMetaData()
+    {
+        return (EAttribute) propertyAttributesEClass.getEStructuralFeatures()
+                .get( 2 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getResourceIdentifiers()
+    {
+        return resourceIdentifiersEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getResourceIdentifiers_ApplResourceBaseURIString()
+    {
+        return (EAttribute) resourceIdentifiersEClass.getEStructuralFeatures()
+                .get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getResourceIdentifiers_DesignResourceBaseURIString()
+    {
+        return (EAttribute) resourceIdentifiersEClass.getEStructuralFeatures()
+                .get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getResultSetColumns()
+    {
+        return resultSetColumnsEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getResultSetColumns_ResultColumnDefinitions()
+    {
+        return (EReference) resultSetColumnsEClass.getEStructuralFeatures()
+                .get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getResultSetCriteria()
+    {
+        return resultSetCriteriaEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getResultSetCriteria_FilterSpecification()
+    {
+        return (EReference) resultSetCriteriaEClass.getEStructuralFeatures()
+                .get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getResultSetCriteria_RowOrdering()
+    {
+        return (EReference) resultSetCriteriaEClass.getEStructuralFeatures()
+                .get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getResultSetDefinition()
+    {
+        return resultSetDefinitionEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getResultSetDefinition_Name()
+    {
+        return (EAttribute) resultSetDefinitionEClass.getEStructuralFeatures()
+                .get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getResultSetDefinition_ResultSetColumns()
+    {
+        return (EReference) resultSetDefinitionEClass.getEStructuralFeatures()
+                .get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getResultSetDefinition_Criteria()
+    {
+        return (EReference) resultSetDefinitionEClass.getEStructuralFeatures()
+                .get( 2 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getResultSets()
+    {
+        return resultSetsEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getResultSets_ResultSetDefinitions()
+    {
+        return (EReference) resultSetsEClass.getEStructuralFeatures().get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getResultSets_DerivedMetaData()
+    {
+        return (EAttribute) resultSetsEClass.getEStructuralFeatures().get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getResultSubset()
+    {
+        return resultSubsetEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getResultSubset_DataSetDesign()
+    {
+        return (EReference) resultSubsetEClass.getEStructuralFeatures().get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getResultSubset_ResultSetName()
+    {
+        return (EAttribute) resultSubsetEClass.getEStructuralFeatures().get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getResultSubset_ColumnIdentifiers()
+    {
+        return (EReference) resultSubsetEClass.getEStructuralFeatures().get( 2 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getScalarValueChoices()
+    {
+        return scalarValueChoicesEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getScalarValueChoices_ScalarValues()
+    {
+        return (EReference) scalarValueChoicesEClass.getEStructuralFeatures()
+                .get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getScalarValueDefinition()
+    {
+        return scalarValueDefinitionEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getScalarValueDefinition_Value()
+    {
+        return (EAttribute) scalarValueDefinitionEClass
+                .getEStructuralFeatures().get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getScalarValueDefinition_DisplayName()
+    {
+        return (EAttribute) scalarValueDefinitionEClass
+                .getEStructuralFeatures().get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getSortKey()
+    {
+        return sortKeyEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getSortKey_ColumnIdentifier()
+    {
+        return (EReference) sortKeyEClass.getEStructuralFeatures().get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getSortKey_ColumnName()
+    {
+        return (EAttribute) sortKeyEClass.getEStructuralFeatures().get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getSortKey_ColumnPosition()
+    {
+        return (EAttribute) sortKeyEClass.getEStructuralFeatures().get( 2 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getSortKey_SortDirection()
+    {
+        return (EAttribute) sortKeyEClass.getEStructuralFeatures().get( 3 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getSortKey_NullValueOrdering()
+    {
+        return (EAttribute) sortKeyEClass.getEStructuralFeatures().get( 4 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getSortKey_Optional()
+    {
+        return (EAttribute) sortKeyEClass.getEStructuralFeatures().get( 5 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getSortSpecification()
+    {
+        return sortSpecificationEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EReference getSortSpecification_SortKeys()
+    {
+        return (EReference) sortSpecificationEClass.getEStructuralFeatures()
+                .get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getStaticValues()
+    {
+        return staticValuesEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getStaticValues_Values()
+    {
+        return (EAttribute) staticValuesEClass.getEStructuralFeatures().get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EClass getValueFormatHints()
+    {
+        return valueFormatHintsEClass;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getValueFormatHints_DisplaySize()
+    {
+        return (EAttribute) valueFormatHintsEClass.getEStructuralFeatures()
+                .get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getValueFormatHints_DisplayFormat()
+    {
+        return (EAttribute) valueFormatHintsEClass.getEStructuralFeatures()
+                .get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getValueFormatHints_TextFormatType()
+    {
+        return (EAttribute) valueFormatHintsEClass.getEStructuralFeatures()
+                .get( 2 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getValueFormatHints_HorizontalAlignment()
+    {
+        return (EAttribute) valueFormatHintsEClass.getEStructuralFeatures()
+                .get( 3 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EAttribute getValueFormatHints_TextWrapType()
+    {
+        return (EAttribute) valueFormatHintsEClass.getEStructuralFeatures()
+                .get( 4 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EEnum getAxisType()
+    {
+        return axisTypeEEnum;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EEnum getElementNullability()
+    {
+        return elementNullabilityEEnum;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EEnum getExpressionVariableType()
+    {
+        return expressionVariableTypeEEnum;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EEnum getHorizontalAlignment()
+    {
+        return horizontalAlignmentEEnum;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EEnum getInputPromptControlStyle()
+    {
+        return inputPromptControlStyleEEnum;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EEnum getNullOrderingType()
+    {
+        return nullOrderingTypeEEnum;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EEnum getOdaComplexDataType()
+    {
+        return odaComplexDataTypeEEnum;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EEnum getOdaScalarDataType()
+    {
+        return odaScalarDataTypeEEnum;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EEnum getParameterMode()
+    {
+        return parameterModeEEnum;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EEnum getSessionStatus()
+    {
+        return sessionStatusEEnum;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EEnum getSortDirectionType()
+    {
+        return sortDirectionTypeEEnum;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EEnum getTextFormatType()
+    {
+        return textFormatTypeEEnum;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EEnum getTextWrapType()
+    {
+        return textWrapTypeEEnum;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EDataType getAxisTypeObject()
+    {
+        return axisTypeObjectEDataType;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EDataType getElementNullabilityObject()
+    {
+        return elementNullabilityObjectEDataType;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EDataType getExpressionVariableTypeObject()
+    {
+        return expressionVariableTypeObjectEDataType;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EDataType getHorizontalAlignmentObject()
+    {
+        return horizontalAlignmentObjectEDataType;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EDataType getInputPromptControlStyleObject()
+    {
+        return inputPromptControlStyleObjectEDataType;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EDataType getNullOrderingTypeObject()
+    {
+        return nullOrderingTypeObjectEDataType;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EDataType getOdaComplexDataTypeObject()
+    {
+        return odaComplexDataTypeObjectEDataType;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EDataType getOdaScalarDataTypeObject()
+    {
+        return odaScalarDataTypeObjectEDataType;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EDataType getParameterModeObject()
+    {
+        return parameterModeObjectEDataType;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EDataType getSessionStatusObject()
+    {
+        return sessionStatusObjectEDataType;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EDataType getSortDirectionTypeObject()
+    {
+        return sortDirectionTypeObjectEDataType;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EDataType getTextFormatTypeObject()
+    {
+        return textFormatTypeObjectEDataType;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EDataType getTextWrapTypeObject()
+    {
+        return textWrapTypeObjectEDataType;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DesignFactory getDesignFactory()
+    {
+        return (DesignFactory) getEFactoryInstance();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private boolean isCreated = false;
+
+    /**
+     * Creates the meta-model objects for the package.  This method is
+     * guarded to have no affect on any invocation but its first.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void createPackageContents()
+    {
+        if( isCreated )
+            return;
+        isCreated = true;
+
+        // Create classes and their features
+        andExpressionEClass = createEClass( AND_EXPRESSION );
+
+        atomicExpressionContextEClass = createEClass( ATOMIC_EXPRESSION_CONTEXT );
+        createEAttribute( atomicExpressionContextEClass,
+                ATOMIC_EXPRESSION_CONTEXT__OPTIONAL );
+        createEReference( atomicExpressionContextEClass,
+                ATOMIC_EXPRESSION_CONTEXT__VARIABLE );
+        createEReference( atomicExpressionContextEClass,
+                ATOMIC_EXPRESSION_CONTEXT__ARGUMENTS );
+
+        axisAttributesEClass = createEClass( AXIS_ATTRIBUTES );
+        createEAttribute( axisAttributesEClass, AXIS_ATTRIBUTES__AXIS_TYPE );
+        createEAttribute( axisAttributesEClass,
+                AXIS_ATTRIBUTES__ON_COLUMN_LAYOUT );
+        createEReference( axisAttributesEClass,
+                AXIS_ATTRIBUTES__RELATED_COLUMNS );
+
+        columnDefinitionEClass = createEClass( COLUMN_DEFINITION );
+        createEReference( columnDefinitionEClass, COLUMN_DEFINITION__ATTRIBUTES );
+        createEReference( columnDefinitionEClass,
+                COLUMN_DEFINITION__USAGE_HINTS );
+        createEReference( columnDefinitionEClass,
+                COLUMN_DEFINITION__MULTI_DIMENSION_ATTRIBUTES );
+
+        compositeFilterExpressionEClass = createEClass( COMPOSITE_FILTER_EXPRESSION );
+        createEReference( compositeFilterExpressionEClass,
+                COMPOSITE_FILTER_EXPRESSION__CHILDREN );
+
+        customDataEClass = createEClass( CUSTOM_DATA );
+        createEAttribute( customDataEClass, CUSTOM_DATA__PROVIDER_ID );
+        createEAttribute( customDataEClass, CUSTOM_DATA__VALUE );
+        createEAttribute( customDataEClass, CUSTOM_DATA__DISPLAY_VALUE );
+
+        customFilterExpressionEClass = createEClass( CUSTOM_FILTER_EXPRESSION );
+        createEReference( customFilterExpressionEClass,
+                CUSTOM_FILTER_EXPRESSION__TYPE );
+        createEReference( customFilterExpressionEClass,
+                CUSTOM_FILTER_EXPRESSION__CONTEXT );
+
+        dataAccessDesignEClass = createEClass( DATA_ACCESS_DESIGN );
+        createEReference( dataAccessDesignEClass,
+                DATA_ACCESS_DESIGN__DATA_SET_DESIGN );
+
+        dataElementAttributesEClass = createEClass( DATA_ELEMENT_ATTRIBUTES );
+        createEReference( dataElementAttributesEClass,
+                DATA_ELEMENT_ATTRIBUTES__IDENTIFIER );
+        createEAttribute( dataElementAttributesEClass,
+                DATA_ELEMENT_ATTRIBUTES__NAME );
+        createEAttribute( dataElementAttributesEClass,
+                DATA_ELEMENT_ATTRIBUTES__POSITION );
+        createEAttribute( dataElementAttributesEClass,
+                DATA_ELEMENT_ATTRIBUTES__NATIVE_DATA_TYPE_CODE );
+        createEAttribute( dataElementAttributesEClass,
+                DATA_ELEMENT_ATTRIBUTES__PRECISION );
+        createEAttribute( dataElementAttributesEClass,
+                DATA_ELEMENT_ATTRIBUTES__SCALE );
+        createEAttribute( dataElementAttributesEClass,
+                DATA_ELEMENT_ATTRIBUTES__NULLABILITY );
+        createEReference( dataElementAttributesEClass,
+                DATA_ELEMENT_ATTRIBUTES__UI_HINTS );
+
+        dataElementIdentifierEClass = createEClass( DATA_ELEMENT_IDENTIFIER );
+        createEAttribute( dataElementIdentifierEClass,
+                DATA_ELEMENT_IDENTIFIER__NAME );
+        createEAttribute( dataElementIdentifierEClass,
+                DATA_ELEMENT_IDENTIFIER__POSITION );
+
+        dataElementIdentifiersEClass = createEClass( DATA_ELEMENT_IDENTIFIERS );
+        createEReference( dataElementIdentifiersEClass,
+                DATA_ELEMENT_IDENTIFIERS__IDENTIFIERS );
+
+        dataElementUIHintsEClass = createEClass( DATA_ELEMENT_UI_HINTS );
+        createEAttribute( dataElementUIHintsEClass,
+                DATA_ELEMENT_UI_HINTS__DISPLAY_NAME );
+        createEAttribute( dataElementUIHintsEClass,
+                DATA_ELEMENT_UI_HINTS__DESCRIPTION );
+
+        dataSetDesignEClass = createEClass( DATA_SET_DESIGN );
+        createEAttribute( dataSetDesignEClass, DATA_SET_DESIGN__NAME );
+        createEAttribute( dataSetDesignEClass,
+                DATA_SET_DESIGN__ODA_EXTENSION_DATA_SET_ID );
+        createEReference( dataSetDesignEClass,
+                DATA_SET_DESIGN__DATA_SOURCE_DESIGN );
+        createEReference( dataSetDesignEClass, DATA_SET_DESIGN__QUERY );
+        createEAttribute( dataSetDesignEClass, DATA_SET_DESIGN__DISPLAY_NAME );
+        createEReference( dataSetDesignEClass,
+                DATA_SET_DESIGN__PUBLIC_PROPERTIES );
+        createEReference( dataSetDesignEClass,
+                DATA_SET_DESIGN__PRIVATE_PROPERTIES );
+        createEReference( dataSetDesignEClass, DATA_SET_DESIGN__RESULT_SETS );
+        createEAttribute( dataSetDesignEClass,
+                DATA_SET_DESIGN__PRIMARY_RESULT_SET_NAME );
+        createEReference( dataSetDesignEClass, DATA_SET_DESIGN__PARAMETERS );
+
+        dataSetParametersEClass = createEClass( DATA_SET_PARAMETERS );
+        createEReference( dataSetParametersEClass,
+                DATA_SET_PARAMETERS__PARAMETER_DEFINITIONS );
+        createEAttribute( dataSetParametersEClass,
+                DATA_SET_PARAMETERS__DERIVED_META_DATA );
+
+        dataSetQueryEClass = createEClass( DATA_SET_QUERY );
+        createEAttribute( dataSetQueryEClass, DATA_SET_QUERY__QUERY_TEXT );
+
+        dataSourceDesignEClass = createEClass( DATA_SOURCE_DESIGN );
+        createEAttribute( dataSourceDesignEClass, DATA_SOURCE_DESIGN__NAME );
+        createEAttribute( dataSourceDesignEClass,
+                DATA_SOURCE_DESIGN__ODA_EXTENSION_ID );
+        createEAttribute( dataSourceDesignEClass,
+                DATA_SOURCE_DESIGN__EFFECTIVE_ODA_EXTENSION_ID );
+        createEAttribute( dataSourceDesignEClass,
+                DATA_SOURCE_DESIGN__ODA_EXTENSION_DATA_SOURCE_ID );
+        createEAttribute( dataSourceDesignEClass,
+                DATA_SOURCE_DESIGN__DISPLAY_NAME );
+        createEReference( dataSourceDesignEClass,
+                DATA_SOURCE_DESIGN__PUBLIC_PROPERTIES );
+        createEReference( dataSourceDesignEClass,
+                DATA_SOURCE_DESIGN__PRIVATE_PROPERTIES );
+        createEAttribute( dataSourceDesignEClass,
+                DATA_SOURCE_DESIGN__LINKED_PROFILE_NAME );
+        createEAttribute( dataSourceDesignEClass,
+                DATA_SOURCE_DESIGN__LINKED_PROFILE_STORE_FILE_PATH );
+        createEReference( dataSourceDesignEClass,
+                DATA_SOURCE_DESIGN__HOST_RESOURCE_IDENTIFIERS );
+        createEAttribute( dataSourceDesignEClass,
+                DATA_SOURCE_DESIGN__RESOURCE_FILE );
+
+        designerStateEClass = createEClass( DESIGNER_STATE );
+        createEAttribute( designerStateEClass, DESIGNER_STATE__VERSION );
+        createEReference( designerStateEClass, DESIGNER_STATE__STATE_CONTENT );
+
+        designerStateContentEClass = createEClass( DESIGNER_STATE_CONTENT );
+        createEAttribute( designerStateContentEClass,
+                DESIGNER_STATE_CONTENT__STATE_CONTENT_AS_STRING );
+        createEAttribute( designerStateContentEClass,
+                DESIGNER_STATE_CONTENT__STATE_CONTENT_AS_BLOB );
+
+        designSessionRequestEClass = createEClass( DESIGN_SESSION_REQUEST );
+        createEReference( designSessionRequestEClass,
+                DESIGN_SESSION_REQUEST__DATA_ACCESS_DESIGN );
+        createEAttribute( designSessionRequestEClass,
+                DESIGN_SESSION_REQUEST__EDITABLE );
+        createEReference( designSessionRequestEClass,
+                DESIGN_SESSION_REQUEST__SESSION_LOCALE );
+        createEReference( designSessionRequestEClass,
+                DESIGN_SESSION_REQUEST__DESIGNER_STATE );
+
+        designSessionResponseEClass = createEClass( DESIGN_SESSION_RESPONSE );
+        createEAttribute( designSessionResponseEClass,
+                DESIGN_SESSION_RESPONSE__SESSION_STATUS );
+        createEReference( designSessionResponseEClass,
+                DESIGN_SESSION_RESPONSE__DATA_ACCESS_DESIGN );
+        createEReference( designSessionResponseEClass,
+                DESIGN_SESSION_RESPONSE__DESIGNER_STATE );
+
+        documentRootEClass = createEClass( DOCUMENT_ROOT );
+        createEAttribute( documentRootEClass, DOCUMENT_ROOT__MIXED );
+        createEReference( documentRootEClass, DOCUMENT_ROOT__XMLNS_PREFIX_MAP );
+        createEReference( documentRootEClass,
+                DOCUMENT_ROOT__XSI_SCHEMA_LOCATION );
+        createEReference( documentRootEClass, DOCUMENT_ROOT__ODA_DESIGN_SESSION );
+
+        dynamicFilterExpressionEClass = createEClass( DYNAMIC_FILTER_EXPRESSION );
+        createEReference( dynamicFilterExpressionEClass,
+                DYNAMIC_FILTER_EXPRESSION__CONTEXT );
+        createEReference( dynamicFilterExpressionEClass,
+                DYNAMIC_FILTER_EXPRESSION__DEFAULT_TYPE );
+
+        dynamicValuesQueryEClass = createEClass( DYNAMIC_VALUES_QUERY );
+        createEReference( dynamicValuesQueryEClass,
+                DYNAMIC_VALUES_QUERY__DATA_SET_DESIGN );
+        createEAttribute( dynamicValuesQueryEClass,
+                DYNAMIC_VALUES_QUERY__ENABLED );
+        createEReference( dynamicValuesQueryEClass,
+                DYNAMIC_VALUES_QUERY__VALUE_COLUMN_IDENTIFIER );
+        createEAttribute( dynamicValuesQueryEClass,
+                DYNAMIC_VALUES_QUERY__VALUE_COLUMN );
+        createEAttribute( dynamicValuesQueryEClass,
+                DYNAMIC_VALUES_QUERY__DISPLAY_NAME_COLUMN );
+
+        expressionArgumentsEClass = createEClass( EXPRESSION_ARGUMENTS );
+        createEReference( expressionArgumentsEClass,
+                EXPRESSION_ARGUMENTS__EXPRESSION_PARAMETERS );
+
+        expressionParameterDefinitionEClass = createEClass( EXPRESSION_PARAMETER_DEFINITION );
+        createEReference( expressionParameterDefinitionEClass,
+                EXPRESSION_PARAMETER_DEFINITION__STATIC_VALUES );
+        createEReference( expressionParameterDefinitionEClass,
+                EXPRESSION_PARAMETER_DEFINITION__DYNAMIC_INPUT_PARAMETER );
+
+        expressionParametersEClass = createEClass( EXPRESSION_PARAMETERS );
+        createEReference( expressionParametersEClass,
+                EXPRESSION_PARAMETERS__PARAMETER_DEFINITIONS );
+
+        expressionVariableEClass = createEClass( EXPRESSION_VARIABLE );
+        createEAttribute( expressionVariableEClass, EXPRESSION_VARIABLE__TYPE );
+        createEAttribute( expressionVariableEClass,
+                EXPRESSION_VARIABLE__IDENTIFIER );
+        createEAttribute( expressionVariableEClass,
+                EXPRESSION_VARIABLE__NATIVE_DATA_TYPE_CODE );
+
+        filterExpressionEClass = createEClass( FILTER_EXPRESSION );
+        createEAttribute( filterExpressionEClass, FILTER_EXPRESSION__NEGATABLE );
+
+        filterExpressionTypeEClass = createEClass( FILTER_EXPRESSION_TYPE );
+        createEAttribute( filterExpressionTypeEClass,
+                FILTER_EXPRESSION_TYPE__DECLARING_EXTENSION_ID );
+        createEAttribute( filterExpressionTypeEClass,
+                FILTER_EXPRESSION_TYPE__ID );
+
+        inputElementAttributesEClass = createEClass( INPUT_ELEMENT_ATTRIBUTES );
+        createEAttribute( inputElementAttributesEClass,
+                INPUT_ELEMENT_ATTRIBUTES__DEFAULT_SCALAR_VALUE );
+        createEReference( inputElementAttributesEClass,
+                INPUT_ELEMENT_ATTRIBUTES__DEFAULT_VALUES );
+        createEAttribute( inputElementAttributesEClass,
+                INPUT_ELEMENT_ATTRIBUTES__EDITABLE );
+        createEAttribute( inputElementAttributesEClass,
+                INPUT_ELEMENT_ATTRIBUTES__OPTIONAL );
+        createEAttribute( inputElementAttributesEClass,
+                INPUT_ELEMENT_ATTRIBUTES__MASKS_VALUE );
+        createEReference( inputElementAttributesEClass,
+                INPUT_ELEMENT_ATTRIBUTES__STATIC_VALUE_CHOICES );
+        createEReference( inputElementAttributesEClass,
+                INPUT_ELEMENT_ATTRIBUTES__DYNAMIC_VALUE_CHOICES );
+        createEReference( inputElementAttributesEClass,
+                INPUT_ELEMENT_ATTRIBUTES__UI_HINTS );
+
+        inputElementUIHintsEClass = createEClass( INPUT_ELEMENT_UI_HINTS );
+        createEAttribute( inputElementUIHintsEClass,
+                INPUT_ELEMENT_UI_HINTS__PROMPT_STYLE );
+        createEAttribute( inputElementUIHintsEClass,
+                INPUT_ELEMENT_UI_HINTS__AUTO_SUGGEST_THRESHOLD );
+
+        inputParameterAttributesEClass = createEClass( INPUT_PARAMETER_ATTRIBUTES );
+        createEReference( inputParameterAttributesEClass,
+                INPUT_PARAMETER_ATTRIBUTES__ELEMENT_ATTRIBUTES );
+        createEReference( inputParameterAttributesEClass,
+                INPUT_PARAMETER_ATTRIBUTES__UI_HINTS );
+
+        inputParameterUIHintsEClass = createEClass( INPUT_PARAMETER_UI_HINTS );
+        createEAttribute( inputParameterUIHintsEClass,
+                INPUT_PARAMETER_UI_HINTS__GROUP_PROMPT_DISPLAY_NAME );
+
+        localeEClass = createEClass( LOCALE );
+        createEAttribute( localeEClass, LOCALE__LANGUAGE );
+        createEAttribute( localeEClass, LOCALE__COUNTRY );
+        createEAttribute( localeEClass, LOCALE__VARIANT );
+
+        nameValuePairEClass = createEClass( NAME_VALUE_PAIR );
+        createEAttribute( nameValuePairEClass, NAME_VALUE_PAIR__NAME );
+        createEAttribute( nameValuePairEClass, NAME_VALUE_PAIR__VALUE );
+
+        notExpressionEClass = createEClass( NOT_EXPRESSION );
+        createEReference( notExpressionEClass,
+                NOT_EXPRESSION__NEGATING_EXPRESSION );
+
+        odaDesignSessionEClass = createEClass( ODA_DESIGN_SESSION );
+        createEReference( odaDesignSessionEClass, ODA_DESIGN_SESSION__REQUEST );
+        createEReference( odaDesignSessionEClass, ODA_DESIGN_SESSION__RESPONSE );
+
+        orExpressionEClass = createEClass( OR_EXPRESSION );
+
+        outputElementAttributesEClass = createEClass( OUTPUT_ELEMENT_ATTRIBUTES );
+        createEAttribute( outputElementAttributesEClass,
+                OUTPUT_ELEMENT_ATTRIBUTES__LABEL );
+        createEReference( outputElementAttributesEClass,
+                OUTPUT_ELEMENT_ATTRIBUTES__FORMATTING_HINTS );
+        createEAttribute( outputElementAttributesEClass,
+                OUTPUT_ELEMENT_ATTRIBUTES__HELP_TEXT );
+
+        parameterDefinitionEClass = createEClass( PARAMETER_DEFINITION );
+        createEAttribute( parameterDefinitionEClass,
+                PARAMETER_DEFINITION__IN_OUT_MODE );
+        createEReference( parameterDefinitionEClass,
+                PARAMETER_DEFINITION__ATTRIBUTES );
+        createEReference( parameterDefinitionEClass,
+                PARAMETER_DEFINITION__INPUT_ATTRIBUTES );
+        createEReference( parameterDefinitionEClass,
+                PARAMETER_DEFINITION__OUTPUT_USAGE_HINTS );
+        createEReference( parameterDefinitionEClass,
+                PARAMETER_DEFINITION__FIELDS );
+
+        parameterFieldDefinitionEClass = createEClass( PARAMETER_FIELD_DEFINITION );
+        createEReference( parameterFieldDefinitionEClass,
+                PARAMETER_FIELD_DEFINITION__ATTRIBUTES );
+        createEReference( parameterFieldDefinitionEClass,
+                PARAMETER_FIELD_DEFINITION__INPUT_ATTRIBUTES );
+        createEReference( parameterFieldDefinitionEClass,
+                PARAMETER_FIELD_DEFINITION__OUTPUT_USAGE_HINTS );
+
+        parameterFieldsEClass = createEClass( PARAMETER_FIELDS );
+        createEReference( parameterFieldsEClass,
+                PARAMETER_FIELDS__FIELD_COLLECTION );
+
+        propertiesEClass = createEClass( PROPERTIES );
+        createEReference( propertiesEClass, PROPERTIES__PROPERTIES );
+
+        propertyEClass = createEClass( PROPERTY );
+        createEReference( propertyEClass, PROPERTY__NAME_VALUE );
+        createEReference( propertyEClass, PROPERTY__DESIGN_ATTRIBUTES );
+
+        propertyAttributesEClass = createEClass( PROPERTY_ATTRIBUTES );
+        createEAttribute( propertyAttributesEClass,
+                PROPERTY_ATTRIBUTES__DISPLAY_NAME );
+        createEReference( propertyAttributesEClass,
+                PROPERTY_ATTRIBUTES__ELEMENT_ATTRIBUTES );
+        createEAttribute( propertyAttributesEClass,
+                PROPERTY_ATTRIBUTES__DERIVED_META_DATA );
+
+        resourceIdentifiersEClass = createEClass( RESOURCE_IDENTIFIERS );
+        createEAttribute( resourceIdentifiersEClass,
+                RESOURCE_IDENTIFIERS__APPL_RESOURCE_BASE_URI_STRING );
+        createEAttribute( resourceIdentifiersEClass,
+                RESOURCE_IDENTIFIERS__DESIGN_RESOURCE_BASE_URI_STRING );
+
+        resultSetColumnsEClass = createEClass( RESULT_SET_COLUMNS );
+        createEReference( resultSetColumnsEClass,
+                RESULT_SET_COLUMNS__RESULT_COLUMN_DEFINITIONS );
+
+        resultSetCriteriaEClass = createEClass( RESULT_SET_CRITERIA );
+        createEReference( resultSetCriteriaEClass,
+                RESULT_SET_CRITERIA__FILTER_SPECIFICATION );
+        createEReference( resultSetCriteriaEClass,
+                RESULT_SET_CRITERIA__ROW_ORDERING );
+
+        resultSetDefinitionEClass = createEClass( RESULT_SET_DEFINITION );
+        createEAttribute( resultSetDefinitionEClass,
+                RESULT_SET_DEFINITION__NAME );
+        createEReference( resultSetDefinitionEClass,
+                RESULT_SET_DEFINITION__RESULT_SET_COLUMNS );
+        createEReference( resultSetDefinitionEClass,
+                RESULT_SET_DEFINITION__CRITERIA );
+
+        resultSetsEClass = createEClass( RESULT_SETS );
+        createEReference( resultSetsEClass, RESULT_SETS__RESULT_SET_DEFINITIONS );
+        createEAttribute( resultSetsEClass, RESULT_SETS__DERIVED_META_DATA );
+
+        resultSubsetEClass = createEClass( RESULT_SUBSET );
+        createEReference( resultSubsetEClass, RESULT_SUBSET__DATA_SET_DESIGN );
+        createEAttribute( resultSubsetEClass, RESULT_SUBSET__RESULT_SET_NAME );
+        createEReference( resultSubsetEClass, RESULT_SUBSET__COLUMN_IDENTIFIERS );
+
+        scalarValueChoicesEClass = createEClass( SCALAR_VALUE_CHOICES );
+        createEReference( scalarValueChoicesEClass,
+                SCALAR_VALUE_CHOICES__SCALAR_VALUES );
+
+        scalarValueDefinitionEClass = createEClass( SCALAR_VALUE_DEFINITION );
+        createEAttribute( scalarValueDefinitionEClass,
+                SCALAR_VALUE_DEFINITION__VALUE );
+        createEAttribute( scalarValueDefinitionEClass,
+                SCALAR_VALUE_DEFINITION__DISPLAY_NAME );
+
+        sortKeyEClass = createEClass( SORT_KEY );
+        createEReference( sortKeyEClass, SORT_KEY__COLUMN_IDENTIFIER );
+        createEAttribute( sortKeyEClass, SORT_KEY__COLUMN_NAME );
+        createEAttribute( sortKeyEClass, SORT_KEY__COLUMN_POSITION );
+        createEAttribute( sortKeyEClass, SORT_KEY__SORT_DIRECTION );
+        createEAttribute( sortKeyEClass, SORT_KEY__NULL_VALUE_ORDERING );
+        createEAttribute( sortKeyEClass, SORT_KEY__OPTIONAL );
+
+        sortSpecificationEClass = createEClass( SORT_SPECIFICATION );
+        createEReference( sortSpecificationEClass,
+                SORT_SPECIFICATION__SORT_KEYS );
+
+        staticValuesEClass = createEClass( STATIC_VALUES );
+        createEAttribute( staticValuesEClass, STATIC_VALUES__VALUES );
+
+        valueFormatHintsEClass = createEClass( VALUE_FORMAT_HINTS );
+        createEAttribute( valueFormatHintsEClass,
+                VALUE_FORMAT_HINTS__DISPLAY_SIZE );
+        createEAttribute( valueFormatHintsEClass,
+                VALUE_FORMAT_HINTS__DISPLAY_FORMAT );
+        createEAttribute( valueFormatHintsEClass,
+                VALUE_FORMAT_HINTS__TEXT_FORMAT_TYPE );
+        createEAttribute( valueFormatHintsEClass,
+                VALUE_FORMAT_HINTS__HORIZONTAL_ALIGNMENT );
+        createEAttribute( valueFormatHintsEClass,
+                VALUE_FORMAT_HINTS__TEXT_WRAP_TYPE );
+
+        // Create enums
+        axisTypeEEnum = createEEnum( AXIS_TYPE );
+        elementNullabilityEEnum = createEEnum( ELEMENT_NULLABILITY );
+        expressionVariableTypeEEnum = createEEnum( EXPRESSION_VARIABLE_TYPE );
+        horizontalAlignmentEEnum = createEEnum( HORIZONTAL_ALIGNMENT );
+        inputPromptControlStyleEEnum = createEEnum( INPUT_PROMPT_CONTROL_STYLE );
+        nullOrderingTypeEEnum = createEEnum( NULL_ORDERING_TYPE );
+        odaComplexDataTypeEEnum = createEEnum( ODA_COMPLEX_DATA_TYPE );
+        odaScalarDataTypeEEnum = createEEnum( ODA_SCALAR_DATA_TYPE );
+        parameterModeEEnum = createEEnum( PARAMETER_MODE );
+        sessionStatusEEnum = createEEnum( SESSION_STATUS );
+        sortDirectionTypeEEnum = createEEnum( SORT_DIRECTION_TYPE );
+        textFormatTypeEEnum = createEEnum( TEXT_FORMAT_TYPE );
+        textWrapTypeEEnum = createEEnum( TEXT_WRAP_TYPE );
+
+        // Create data types
+        axisTypeObjectEDataType = createEDataType( AXIS_TYPE_OBJECT );
+        elementNullabilityObjectEDataType = createEDataType( ELEMENT_NULLABILITY_OBJECT );
+        expressionVariableTypeObjectEDataType = createEDataType( EXPRESSION_VARIABLE_TYPE_OBJECT );
+        horizontalAlignmentObjectEDataType = createEDataType( HORIZONTAL_ALIGNMENT_OBJECT );
+        inputPromptControlStyleObjectEDataType = createEDataType( INPUT_PROMPT_CONTROL_STYLE_OBJECT );
+        nullOrderingTypeObjectEDataType = createEDataType( NULL_ORDERING_TYPE_OBJECT );
+        odaComplexDataTypeObjectEDataType = createEDataType( ODA_COMPLEX_DATA_TYPE_OBJECT );
+        odaScalarDataTypeObjectEDataType = createEDataType( ODA_SCALAR_DATA_TYPE_OBJECT );
+        parameterModeObjectEDataType = createEDataType( PARAMETER_MODE_OBJECT );
+        sessionStatusObjectEDataType = createEDataType( SESSION_STATUS_OBJECT );
+        sortDirectionTypeObjectEDataType = createEDataType( SORT_DIRECTION_TYPE_OBJECT );
+        textFormatTypeObjectEDataType = createEDataType( TEXT_FORMAT_TYPE_OBJECT );
+        textWrapTypeObjectEDataType = createEDataType( TEXT_WRAP_TYPE_OBJECT );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private boolean isInitialized = false;
+
+    /**
+     * Complete the initialization of the package and its meta-model.  This
+     * method is guarded to have no affect on any invocation but its first.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void initializePackageContents()
+    {
+        if( isInitialized )
+            return;
+        isInitialized = true;
+
+        // Initialize package
+        setName( eNAME );
+        setNsPrefix( eNS_PREFIX );
+        setNsURI( eNS_URI );
+
+        // Obtain other dependent packages
+        XMLTypePackage theXMLTypePackage = (XMLTypePackage) EPackage.Registry.INSTANCE
+                .getEPackage( XMLTypePackage.eNS_URI );
+
+        // Create type parameters
+
+        // Set bounds for type parameters
+
+        // Add supertypes to classes
+        andExpressionEClass.getESuperTypes().add(
+                this.getCompositeFilterExpression() );
+        compositeFilterExpressionEClass.getESuperTypes().add(
+                this.getFilterExpression() );
+        customFilterExpressionEClass.getESuperTypes().add(
+                this.getFilterExpression() );
+        dynamicFilterExpressionEClass.getESuperTypes().add(
+                this.getFilterExpression() );
+        notExpressionEClass.getESuperTypes().add( this.getFilterExpression() );
+        orExpressionEClass.getESuperTypes().add(
+                this.getCompositeFilterExpression() );
+
+        // Initialize classes and features; add operations and parameters
+        initEClass(
+                andExpressionEClass,
+                AndExpression.class,
+                "AndExpression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+
+        initEClass(
+                atomicExpressionContextEClass,
+                AtomicExpressionContext.class,
+                "AtomicExpressionContext", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEAttribute(
+                getAtomicExpressionContext_Optional(),
+                theXMLTypePackage.getBoolean(),
+                "optional", "false", 0, 1, AtomicExpressionContext.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$ //$NON-NLS-2$
+        initEReference(
+                getAtomicExpressionContext_Variable(),
+                this.getExpressionVariable(),
+                null,
+                "variable", null, 0, 1, AtomicExpressionContext.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getAtomicExpressionContext_Arguments(),
+                this.getExpressionArguments(),
+                null,
+                "arguments", null, 0, 1, AtomicExpressionContext.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                axisAttributesEClass,
+                AxisAttributes.class,
+                "AxisAttributes", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEAttribute(
+                getAxisAttributes_AxisType(),
+                this.getAxisType(),
+                "axisType", "Measure", 0, 1, AxisAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$ //$NON-NLS-2$
+        initEAttribute(
+                getAxisAttributes_OnColumnLayout(),
+                theXMLTypePackage.getBoolean(),
+                "onColumnLayout", "true", 0, 1, AxisAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$ //$NON-NLS-2$
+        initEReference(
+                getAxisAttributes_RelatedColumns(),
+                this.getResultSubset(),
+                null,
+                "relatedColumns", null, 0, 1, AxisAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                columnDefinitionEClass,
+                ColumnDefinition.class,
+                "ColumnDefinition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEReference(
+                getColumnDefinition_Attributes(),
+                this.getDataElementAttributes(),
+                null,
+                "attributes", null, 1, 1, ColumnDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getColumnDefinition_UsageHints(),
+                this.getOutputElementAttributes(),
+                null,
+                "usageHints", null, 0, 1, ColumnDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getColumnDefinition_MultiDimensionAttributes(),
+                this.getAxisAttributes(),
+                null,
+                "multiDimensionAttributes", null, 0, 1, ColumnDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                compositeFilterExpressionEClass,
+                CompositeFilterExpression.class,
+                "CompositeFilterExpression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEReference(
+                getCompositeFilterExpression_Children(),
+                this.getFilterExpression(),
+                null,
+                "children", null, 1, -1, CompositeFilterExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                customDataEClass,
+                CustomData.class,
+                "CustomData", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEAttribute(
+                getCustomData_ProviderId(),
+                theXMLTypePackage.getString(),
+                "providerId", null, 1, 1, CustomData.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getCustomData_Value(),
+                theXMLTypePackage.getAnySimpleType(),
+                "value", null, 1, 1, CustomData.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getCustomData_DisplayValue(),
+                theXMLTypePackage.getString(),
+                "displayValue", null, 0, 1, CustomData.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                customFilterExpressionEClass,
+                CustomFilterExpression.class,
+                "CustomFilterExpression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEReference(
+                getCustomFilterExpression_Type(),
+                this.getFilterExpressionType(),
+                null,
+                "type", null, 1, 1, CustomFilterExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getCustomFilterExpression_Context(),
+                this.getAtomicExpressionContext(),
+                null,
+                "context", null, 1, 1, CustomFilterExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                dataAccessDesignEClass,
+                DataAccessDesign.class,
+                "DataAccessDesign", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEReference(
+                getDataAccessDesign_DataSetDesign(),
+                this.getDataSetDesign(),
+                null,
+                "dataSetDesign", null, 0, 1, DataAccessDesign.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                dataElementAttributesEClass,
+                DataElementAttributes.class,
+                "DataElementAttributes", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEReference(
+                getDataElementAttributes_Identifier(),
+                this.getDataElementIdentifier(),
+                null,
+                "identifier", null, 1, 1, DataElementAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getDataElementAttributes_Name(),
+                theXMLTypePackage.getString(),
+                "name", null, 1, 1, DataElementAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getDataElementAttributes_Position(),
+                theXMLTypePackage.getUnsignedShort(),
+                "position", null, 0, 1, DataElementAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getDataElementAttributes_NativeDataTypeCode(),
+                theXMLTypePackage.getInt(),
+                "nativeDataTypeCode", "0", 0, 1, DataElementAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$ //$NON-NLS-2$
+        initEAttribute(
+                getDataElementAttributes_Precision(),
+                theXMLTypePackage.getInt(),
+                "precision", "-1", 0, 1, DataElementAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$ //$NON-NLS-2$
+        initEAttribute(
+                getDataElementAttributes_Scale(),
+                theXMLTypePackage.getInt(),
+                "scale", "-1", 0, 1, DataElementAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$ //$NON-NLS-2$
+        initEAttribute(
+                getDataElementAttributes_Nullability(),
+                this.getElementNullability(),
+                "nullability", "Unknown", 0, 1, DataElementAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$ //$NON-NLS-2$
+        initEReference(
+                getDataElementAttributes_UiHints(),
+                this.getDataElementUIHints(),
+                null,
+                "uiHints", null, 0, 1, DataElementAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                dataElementIdentifierEClass,
+                DataElementIdentifier.class,
+                "DataElementIdentifier", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEAttribute(
+                getDataElementIdentifier_Name(),
+                theXMLTypePackage.getString(),
+                "name", null, 1, 1, DataElementIdentifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getDataElementIdentifier_Position(),
+                theXMLTypePackage.getUnsignedShort(),
+                "position", null, 0, 1, DataElementIdentifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                dataElementIdentifiersEClass,
+                DataElementIdentifiers.class,
+                "DataElementIdentifiers", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEReference(
+                getDataElementIdentifiers_Identifiers(),
+                this.getDataElementIdentifier(),
+                null,
+                "identifiers", null, 1, -1, DataElementIdentifiers.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                dataElementUIHintsEClass,
+                DataElementUIHints.class,
+                "DataElementUIHints", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEAttribute(
+                getDataElementUIHints_DisplayName(),
+                theXMLTypePackage.getString(),
+                "displayName", null, 0, 1, DataElementUIHints.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getDataElementUIHints_Description(),
+                theXMLTypePackage.getString(),
+                "description", null, 0, 1, DataElementUIHints.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                dataSetDesignEClass,
+                DataSetDesign.class,
+                "DataSetDesign", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEAttribute(
+                getDataSetDesign_Name(),
+                theXMLTypePackage.getString(),
+                "name", null, 1, 1, DataSetDesign.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getDataSetDesign_OdaExtensionDataSetId(),
+                theXMLTypePackage.getString(),
+                "odaExtensionDataSetId", null, 0, 1, DataSetDesign.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getDataSetDesign_DataSourceDesign(),
+                this.getDataSourceDesign(),
+                null,
+                "dataSourceDesign", null, 0, 1, DataSetDesign.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getDataSetDesign_Query(),
+                this.getDataSetQuery(),
+                null,
+                "query", null, 1, 1, DataSetDesign.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getDataSetDesign_DisplayName(),
+                theXMLTypePackage.getString(),
+                "displayName", null, 0, 1, DataSetDesign.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getDataSetDesign_PublicProperties(),
+                this.getProperties(),
+                null,
+                "publicProperties", null, 0, 1, DataSetDesign.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getDataSetDesign_PrivateProperties(),
+                this.getProperties(),
+                null,
+                "privateProperties", null, 0, 1, DataSetDesign.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getDataSetDesign_ResultSets(),
+                this.getResultSets(),
+                null,
+                "resultSets", null, 0, 1, DataSetDesign.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getDataSetDesign_PrimaryResultSetName(),
+                theXMLTypePackage.getString(),
+                "primaryResultSetName", null, 0, 1, DataSetDesign.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getDataSetDesign_Parameters(),
+                this.getDataSetParameters(),
+                null,
+                "parameters", null, 0, 1, DataSetDesign.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                dataSetParametersEClass,
+                DataSetParameters.class,
+                "DataSetParameters", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEReference(
+                getDataSetParameters_ParameterDefinitions(),
+                this.getParameterDefinition(),
+                null,
+                "parameterDefinitions", null, 1, -1, DataSetParameters.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getDataSetParameters_DerivedMetaData(),
+                theXMLTypePackage.getBoolean(),
+                "derivedMetaData", "true", 0, 1, DataSetParameters.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$ //$NON-NLS-2$
+
+        initEClass(
+                dataSetQueryEClass,
+                DataSetQuery.class,
+                "DataSetQuery", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEAttribute(
+                getDataSetQuery_QueryText(),
+                theXMLTypePackage.getString(),
+                "queryText", null, 1, 1, DataSetQuery.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                dataSourceDesignEClass,
+                DataSourceDesign.class,
+                "DataSourceDesign", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEAttribute(
+                getDataSourceDesign_Name(),
+                theXMLTypePackage.getString(),
+                "name", null, 1, 1, DataSourceDesign.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getDataSourceDesign_OdaExtensionId(),
+                theXMLTypePackage.getString(),
+                "odaExtensionId", null, 1, 1, DataSourceDesign.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getDataSourceDesign_EffectiveOdaExtensionId(),
+                theXMLTypePackage.getString(),
+                "effectiveOdaExtensionId", null, 0, 1, DataSourceDesign.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getDataSourceDesign_OdaExtensionDataSourceId(),
+                theXMLTypePackage.getString(),
+                "odaExtensionDataSourceId", null, 0, 1, DataSourceDesign.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getDataSourceDesign_DisplayName(),
+                theXMLTypePackage.getString(),
+                "displayName", null, 0, 1, DataSourceDesign.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getDataSourceDesign_PublicProperties(),
+                this.getProperties(),
+                null,
+                "publicProperties", null, 0, 1, DataSourceDesign.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getDataSourceDesign_PrivateProperties(),
+                this.getProperties(),
+                null,
+                "privateProperties", null, 0, 1, DataSourceDesign.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getDataSourceDesign_LinkedProfileName(),
+                theXMLTypePackage.getString(),
+                "linkedProfileName", null, 0, 1, DataSourceDesign.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getDataSourceDesign_LinkedProfileStoreFilePath(),
+                theXMLTypePackage.getString(),
+                "linkedProfileStoreFilePath", null, 0, 1, DataSourceDesign.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getDataSourceDesign_HostResourceIdentifiers(),
+                this.getResourceIdentifiers(),
+                null,
+                "hostResourceIdentifiers", null, 0, 1, DataSourceDesign.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getDataSourceDesign_ResourceFile(),
+                theXMLTypePackage.getString(),
+                "resourceFile", null, 0, 1, DataSourceDesign.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                designerStateEClass,
+                DesignerState.class,
+                "DesignerState", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEAttribute(
+                getDesignerState_Version(),
+                theXMLTypePackage.getString(),
+                "version", null, 1, 1, DesignerState.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getDesignerState_StateContent(),
+                this.getDesignerStateContent(),
+                null,
+                "stateContent", null, 1, 1, DesignerState.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                designerStateContentEClass,
+                DesignerStateContent.class,
+                "DesignerStateContent", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEAttribute(
+                getDesignerStateContent_StateContentAsString(),
+                theXMLTypePackage.getString(),
+                "stateContentAsString", null, 0, 1, DesignerStateContent.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getDesignerStateContent_StateContentAsBlob(),
+                theXMLTypePackage.getBase64Binary(),
+                "stateContentAsBlob", null, 0, 1, DesignerStateContent.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                designSessionRequestEClass,
+                DesignSessionRequest.class,
+                "DesignSessionRequest", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEReference(
+                getDesignSessionRequest_DataAccessDesign(),
+                this.getDataAccessDesign(),
+                null,
+                "dataAccessDesign", null, 1, 1, DesignSessionRequest.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getDesignSessionRequest_Editable(),
+                theXMLTypePackage.getBoolean(),
+                "editable", "true", 0, 1, DesignSessionRequest.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$ //$NON-NLS-2$
+        initEReference(
+                getDesignSessionRequest_SessionLocale(),
+                this.getLocale(),
+                null,
+                "sessionLocale", null, 0, 1, DesignSessionRequest.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getDesignSessionRequest_DesignerState(),
+                this.getDesignerState(),
+                null,
+                "designerState", null, 0, 1, DesignSessionRequest.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                designSessionResponseEClass,
+                DesignSessionResponse.class,
+                "DesignSessionResponse", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEAttribute(
+                getDesignSessionResponse_SessionStatus(),
+                this.getSessionStatus(),
+                "sessionStatus", "Ok", 0, 1, DesignSessionResponse.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$ //$NON-NLS-2$
+        initEReference(
+                getDesignSessionResponse_DataAccessDesign(),
+                this.getDataAccessDesign(),
+                null,
+                "dataAccessDesign", null, 1, 1, DesignSessionResponse.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getDesignSessionResponse_DesignerState(),
+                this.getDesignerState(),
+                null,
+                "designerState", null, 0, 1, DesignSessionResponse.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                documentRootEClass,
+                DocumentRoot.class,
+                "DocumentRoot", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEAttribute(
+                getDocumentRoot_Mixed(),
+                ecorePackage.getEFeatureMapEntry(),
+                "mixed", null, 0, -1, null, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getDocumentRoot_XMLNSPrefixMap(),
+                ecorePackage.getEStringToStringMapEntry(),
+                null,
+                "xMLNSPrefixMap", null, 0, -1, null, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getDocumentRoot_XSISchemaLocation(),
+                ecorePackage.getEStringToStringMapEntry(),
+                null,
+                "xSISchemaLocation", null, 0, -1, null, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getDocumentRoot_OdaDesignSession(),
+                this.getOdaDesignSession(),
+                null,
+                "odaDesignSession", null, 0, -2, null, IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                dynamicFilterExpressionEClass,
+                DynamicFilterExpression.class,
+                "DynamicFilterExpression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEReference(
+                getDynamicFilterExpression_Context(),
+                this.getAtomicExpressionContext(),
+                null,
+                "context", null, 1, 1, DynamicFilterExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getDynamicFilterExpression_DefaultType(),
+                this.getFilterExpressionType(),
+                null,
+                "defaultType", null, 0, 1, DynamicFilterExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                dynamicValuesQueryEClass,
+                DynamicValuesQuery.class,
+                "DynamicValuesQuery", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEReference(
+                getDynamicValuesQuery_DataSetDesign(),
+                this.getDataSetDesign(),
+                null,
+                "dataSetDesign", null, 1, 1, DynamicValuesQuery.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getDynamicValuesQuery_Enabled(),
+                theXMLTypePackage.getBoolean(),
+                "enabled", "true", 0, 1, DynamicValuesQuery.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$ //$NON-NLS-2$
+        initEReference(
+                getDynamicValuesQuery_ValueColumnIdentifier(),
+                this.getDataElementIdentifier(),
+                null,
+                "valueColumnIdentifier", null, 1, 1, DynamicValuesQuery.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getDynamicValuesQuery_ValueColumn(),
+                theXMLTypePackage.getString(),
+                "valueColumn", null, 1, 1, DynamicValuesQuery.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getDynamicValuesQuery_DisplayNameColumn(),
+                theXMLTypePackage.getString(),
+                "displayNameColumn", null, 0, 1, DynamicValuesQuery.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                expressionArgumentsEClass,
+                ExpressionArguments.class,
+                "ExpressionArguments", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEReference(
+                getExpressionArguments_ExpressionParameters(),
+                this.getExpressionParameters(),
+                null,
+                "expressionParameters", null, 1, 1, ExpressionArguments.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                expressionParameterDefinitionEClass,
+                ExpressionParameterDefinition.class,
+                "ExpressionParameterDefinition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEReference(
+                getExpressionParameterDefinition_StaticValues(),
+                this.getStaticValues(),
+                null,
+                "staticValues", null, 0, 1, ExpressionParameterDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getExpressionParameterDefinition_DynamicInputParameter(),
+                this.getParameterDefinition(),
+                null,
+                "dynamicInputParameter", null, 0, 1, ExpressionParameterDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                expressionParametersEClass,
+                ExpressionParameters.class,
+                "ExpressionParameters", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEReference(
+                getExpressionParameters_ParameterDefinitions(),
+                this.getExpressionParameterDefinition(),
+                null,
+                "parameterDefinitions", null, 1, -1, ExpressionParameters.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                expressionVariableEClass,
+                ExpressionVariable.class,
+                "ExpressionVariable", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEAttribute(
+                getExpressionVariable_Type(),
+                this.getExpressionVariableType(),
+                "type", "ResultSetColumn", 0, 1, ExpressionVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$ //$NON-NLS-2$
+        initEAttribute(
+                getExpressionVariable_Identifier(),
+                theXMLTypePackage.getString(),
+                "identifier", null, 1, 1, ExpressionVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getExpressionVariable_NativeDataTypeCode(),
+                theXMLTypePackage.getInt(),
+                "nativeDataTypeCode", null, 0, 1, ExpressionVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                filterExpressionEClass,
+                FilterExpression.class,
+                "FilterExpression", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEAttribute(
+                getFilterExpression_Negatable(),
+                theXMLTypePackage.getBoolean(),
+                "negatable", "false", 0, 1, FilterExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$ //$NON-NLS-2$
+
+        initEClass(
+                filterExpressionTypeEClass,
+                FilterExpressionType.class,
+                "FilterExpressionType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEAttribute(
+                getFilterExpressionType_DeclaringExtensionId(),
+                theXMLTypePackage.getString(),
+                "declaringExtensionId", null, 1, 1, FilterExpressionType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getFilterExpressionType_Id(),
+                theXMLTypePackage.getString(),
+                "id", null, 1, 1, FilterExpressionType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                inputElementAttributesEClass,
+                InputElementAttributes.class,
+                "InputElementAttributes", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEAttribute(
+                getInputElementAttributes_DefaultScalarValue(),
+                theXMLTypePackage.getString(),
+                "defaultScalarValue", null, 0, 1, InputElementAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getInputElementAttributes_DefaultValues(),
+                this.getStaticValues(),
+                null,
+                "defaultValues", null, 0, 1, InputElementAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getInputElementAttributes_Editable(),
+                theXMLTypePackage.getBoolean(),
+                "editable", "true", 0, 1, InputElementAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$ //$NON-NLS-2$
+        initEAttribute(
+                getInputElementAttributes_Optional(),
+                theXMLTypePackage.getBoolean(),
+                "optional", "false", 0, 1, InputElementAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$ //$NON-NLS-2$
+        initEAttribute(
+                getInputElementAttributes_MasksValue(),
+                theXMLTypePackage.getBoolean(),
+                "masksValue", "false", 0, 1, InputElementAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$ //$NON-NLS-2$
+        initEReference(
+                getInputElementAttributes_StaticValueChoices(),
+                this.getScalarValueChoices(),
+                null,
+                "staticValueChoices", null, 0, 1, InputElementAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getInputElementAttributes_DynamicValueChoices(),
+                this.getDynamicValuesQuery(),
+                null,
+                "dynamicValueChoices", null, 0, 1, InputElementAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getInputElementAttributes_UiHints(),
+                this.getInputElementUIHints(),
+                null,
+                "uiHints", null, 0, 1, InputElementAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                inputElementUIHintsEClass,
+                InputElementUIHints.class,
+                "InputElementUIHints", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEAttribute(
+                getInputElementUIHints_PromptStyle(),
+                this.getInputPromptControlStyle(),
+                "promptStyle", null, 0, 1, InputElementUIHints.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getInputElementUIHints_AutoSuggestThreshold(),
+                theXMLTypePackage.getInt(),
+                "autoSuggestThreshold", "1", 0, 1, InputElementUIHints.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$ //$NON-NLS-2$
+
+        initEClass(
+                inputParameterAttributesEClass,
+                InputParameterAttributes.class,
+                "InputParameterAttributes", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEReference(
+                getInputParameterAttributes_ElementAttributes(),
+                this.getInputElementAttributes(),
+                null,
+                "elementAttributes", null, 1, 1, InputParameterAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getInputParameterAttributes_UiHints(),
+                this.getInputParameterUIHints(),
+                null,
+                "uiHints", null, 0, 1, InputParameterAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                inputParameterUIHintsEClass,
+                InputParameterUIHints.class,
+                "InputParameterUIHints", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEAttribute(
+                getInputParameterUIHints_GroupPromptDisplayName(),
+                theXMLTypePackage.getString(),
+                "groupPromptDisplayName", null, 0, 1, InputParameterUIHints.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                localeEClass,
+                Locale.class,
+                "Locale", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEAttribute(
+                getLocale_Language(),
+                theXMLTypePackage.getString(),
+                "language", "en", 0, 1, Locale.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$ //$NON-NLS-2$
+        initEAttribute(
+                getLocale_Country(),
+                theXMLTypePackage.getString(),
+                "country", null, 0, 1, Locale.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getLocale_Variant(),
+                theXMLTypePackage.getString(),
+                "variant", null, 0, 1, Locale.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                nameValuePairEClass,
+                NameValuePair.class,
+                "NameValuePair", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEAttribute(
+                getNameValuePair_Name(),
+                theXMLTypePackage.getString(),
+                "name", null, 1, 1, NameValuePair.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getNameValuePair_Value(),
+                theXMLTypePackage.getString(),
+                "value", null, 0, 1, NameValuePair.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                notExpressionEClass,
+                NotExpression.class,
+                "NotExpression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEReference(
+                getNotExpression_NegatingExpression(),
+                this.getFilterExpression(),
+                null,
+                "negatingExpression", null, 1, 1, NotExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                odaDesignSessionEClass,
+                OdaDesignSession.class,
+                "OdaDesignSession", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEReference(
+                getOdaDesignSession_Request(),
+                this.getDesignSessionRequest(),
+                null,
+                "request", null, 1, 1, OdaDesignSession.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getOdaDesignSession_Response(),
+                this.getDesignSessionResponse(),
+                null,
+                "response", null, 0, 1, OdaDesignSession.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                orExpressionEClass,
+                OrExpression.class,
+                "OrExpression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+
+        initEClass(
+                outputElementAttributesEClass,
+                OutputElementAttributes.class,
+                "OutputElementAttributes", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEAttribute(
+                getOutputElementAttributes_Label(),
+                theXMLTypePackage.getString(),
+                "label", null, 0, 1, OutputElementAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getOutputElementAttributes_FormattingHints(),
+                this.getValueFormatHints(),
+                null,
+                "formattingHints", null, 0, 1, OutputElementAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getOutputElementAttributes_HelpText(),
+                theXMLTypePackage.getString(),
+                "helpText", null, 0, 1, OutputElementAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                parameterDefinitionEClass,
+                ParameterDefinition.class,
+                "ParameterDefinition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEAttribute(
+                getParameterDefinition_InOutMode(),
+                this.getParameterMode(),
+                "inOutMode", "In", 0, 1, ParameterDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$ //$NON-NLS-2$
+        initEReference(
+                getParameterDefinition_Attributes(),
+                this.getDataElementAttributes(),
+                null,
+                "attributes", null, 1, 1, ParameterDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getParameterDefinition_InputAttributes(),
+                this.getInputParameterAttributes(),
+                null,
+                "inputAttributes", null, 0, 1, ParameterDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getParameterDefinition_OutputUsageHints(),
+                this.getOutputElementAttributes(),
+                null,
+                "outputUsageHints", null, 0, 1, ParameterDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getParameterDefinition_Fields(),
+                this.getParameterFields(),
+                null,
+                "fields", null, 0, 1, ParameterDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                parameterFieldDefinitionEClass,
+                ParameterFieldDefinition.class,
+                "ParameterFieldDefinition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEReference(
+                getParameterFieldDefinition_Attributes(),
+                this.getDataElementAttributes(),
+                null,
+                "attributes", null, 1, 1, ParameterFieldDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getParameterFieldDefinition_InputAttributes(),
+                this.getInputElementAttributes(),
+                null,
+                "inputAttributes", null, 0, 1, ParameterFieldDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getParameterFieldDefinition_OutputUsageHints(),
+                this.getOutputElementAttributes(),
+                null,
+                "outputUsageHints", null, 0, 1, ParameterFieldDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                parameterFieldsEClass,
+                ParameterFields.class,
+                "ParameterFields", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEReference(
+                getParameterFields_FieldCollection(),
+                this.getParameterFieldDefinition(),
+                null,
+                "fieldCollection", null, 1, -1, ParameterFields.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                propertiesEClass,
+                Properties.class,
+                "Properties", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEReference(
+                getProperties_Properties(),
+                this.getProperty(),
+                null,
+                "properties", null, 1, -1, Properties.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                propertyEClass,
+                Property.class,
+                "Property", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEReference(
+                getProperty_NameValue(),
+                this.getNameValuePair(),
+                null,
+                "nameValue", null, 1, 1, Property.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getProperty_DesignAttributes(),
+                this.getPropertyAttributes(),
+                null,
+                "designAttributes", null, 0, 1, Property.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                propertyAttributesEClass,
+                PropertyAttributes.class,
+                "PropertyAttributes", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEAttribute(
+                getPropertyAttributes_DisplayName(),
+                theXMLTypePackage.getString(),
+                "displayName", null, 0, 1, PropertyAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getPropertyAttributes_ElementAttributes(),
+                this.getInputElementAttributes(),
+                null,
+                "elementAttributes", null, 0, 1, PropertyAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getPropertyAttributes_DerivedMetaData(),
+                theXMLTypePackage.getBoolean(),
+                "derivedMetaData", "true", 0, 1, PropertyAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$ //$NON-NLS-2$
+
+        initEClass(
+                resourceIdentifiersEClass,
+                ResourceIdentifiers.class,
+                "ResourceIdentifiers", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEAttribute(
+                getResourceIdentifiers_ApplResourceBaseURIString(),
+                theXMLTypePackage.getString(),
+                "applResourceBaseURIString", null, 0, 1, ResourceIdentifiers.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getResourceIdentifiers_DesignResourceBaseURIString(),
+                theXMLTypePackage.getString(),
+                "designResourceBaseURIString", null, 0, 1, ResourceIdentifiers.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                resultSetColumnsEClass,
+                ResultSetColumns.class,
+                "ResultSetColumns", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEReference(
+                getResultSetColumns_ResultColumnDefinitions(),
+                this.getColumnDefinition(),
+                null,
+                "resultColumnDefinitions", null, 1, -1, ResultSetColumns.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                resultSetCriteriaEClass,
+                ResultSetCriteria.class,
+                "ResultSetCriteria", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEReference(
+                getResultSetCriteria_FilterSpecification(),
+                this.getFilterExpression(),
+                null,
+                "filterSpecification", null, 0, 1, ResultSetCriteria.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getResultSetCriteria_RowOrdering(),
+                this.getSortSpecification(),
+                null,
+                "rowOrdering", null, 0, 1, ResultSetCriteria.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                resultSetDefinitionEClass,
+                ResultSetDefinition.class,
+                "ResultSetDefinition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEAttribute(
+                getResultSetDefinition_Name(),
+                theXMLTypePackage.getString(),
+                "name", null, 0, 1, ResultSetDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getResultSetDefinition_ResultSetColumns(),
+                this.getResultSetColumns(),
+                null,
+                "resultSetColumns", null, 1, 1, ResultSetDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getResultSetDefinition_Criteria(),
+                this.getResultSetCriteria(),
+                null,
+                "criteria", null, 0, 1, ResultSetDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                resultSetsEClass,
+                ResultSets.class,
+                "ResultSets", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEReference(
+                getResultSets_ResultSetDefinitions(),
+                this.getResultSetDefinition(),
+                null,
+                "resultSetDefinitions", null, 1, -1, ResultSets.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getResultSets_DerivedMetaData(),
+                theXMLTypePackage.getBoolean(),
+                "derivedMetaData", "true", 0, 1, ResultSets.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$ //$NON-NLS-2$
+
+        initEClass(
+                resultSubsetEClass,
+                ResultSubset.class,
+                "ResultSubset", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEReference(
+                getResultSubset_DataSetDesign(),
+                this.getDataSetDesign(),
+                null,
+                "dataSetDesign", null, 0, 1, ResultSubset.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getResultSubset_ResultSetName(),
+                theXMLTypePackage.getString(),
+                "resultSetName", null, 0, 1, ResultSubset.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEReference(
+                getResultSubset_ColumnIdentifiers(),
+                this.getDataElementIdentifiers(),
+                null,
+                "columnIdentifiers", null, 1, 1, ResultSubset.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                scalarValueChoicesEClass,
+                ScalarValueChoices.class,
+                "ScalarValueChoices", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEReference(
+                getScalarValueChoices_ScalarValues(),
+                this.getScalarValueDefinition(),
+                null,
+                "scalarValues", null, 1, -1, ScalarValueChoices.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                scalarValueDefinitionEClass,
+                ScalarValueDefinition.class,
+                "ScalarValueDefinition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEAttribute(
+                getScalarValueDefinition_Value(),
+                theXMLTypePackage.getString(),
+                "value", null, 1, 1, ScalarValueDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getScalarValueDefinition_DisplayName(),
+                theXMLTypePackage.getString(),
+                "displayName", null, 0, 1, ScalarValueDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                sortKeyEClass,
+                SortKey.class,
+                "SortKey", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEReference(
+                getSortKey_ColumnIdentifier(),
+                this.getDataElementIdentifier(),
+                null,
+                "columnIdentifier", null, 1, 1, SortKey.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getSortKey_ColumnName(),
+                theXMLTypePackage.getString(),
+                "columnName", null, 1, 1, SortKey.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getSortKey_ColumnPosition(),
+                theXMLTypePackage.getUnsignedShort(),
+                "columnPosition", null, 0, 1, SortKey.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getSortKey_SortDirection(),
+                this.getSortDirectionType(),
+                "sortDirection", "Ascending", 0, 1, SortKey.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$ //$NON-NLS-2$
+        initEAttribute(
+                getSortKey_NullValueOrdering(),
+                this.getNullOrderingType(),
+                "nullValueOrdering", null, 0, 1, SortKey.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getSortKey_Optional(),
+                theXMLTypePackage.getBoolean(),
+                "optional", "false", 0, 1, SortKey.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$ //$NON-NLS-2$
+
+        initEClass(
+                sortSpecificationEClass,
+                SortSpecification.class,
+                "SortSpecification", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEReference(
+                getSortSpecification_SortKeys(),
+                this.getSortKey(),
+                null,
+                "sortKeys", null, 0, -1, SortSpecification.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                staticValuesEClass,
+                StaticValues.class,
+                "StaticValues", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEAttribute(
+                getStaticValues_Values(),
+                theXMLTypePackage.getAnySimpleType(),
+                "values", null, 1, -1, StaticValues.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+
+        initEClass(
+                valueFormatHintsEClass,
+                ValueFormatHints.class,
+                "ValueFormatHints", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEAttribute(
+                getValueFormatHints_DisplaySize(),
+                theXMLTypePackage.getInt(),
+                "displaySize", "-1", 0, 1, ValueFormatHints.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$ //$NON-NLS-2$
+        initEAttribute(
+                getValueFormatHints_DisplayFormat(),
+                theXMLTypePackage.getString(),
+                "displayFormat", null, 0, 1, ValueFormatHints.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$
+        initEAttribute(
+                getValueFormatHints_TextFormatType(),
+                this.getTextFormatType(),
+                "textFormatType", "Plain", 0, 1, ValueFormatHints.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$ //$NON-NLS-2$
+        initEAttribute(
+                getValueFormatHints_HorizontalAlignment(),
+                this.getHorizontalAlignment(),
+                "horizontalAlignment", "Automatic", 0, 1, ValueFormatHints.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$ //$NON-NLS-2$
+        initEAttribute(
+                getValueFormatHints_TextWrapType(),
+                this.getTextWrapType(),
+                "textWrapType", "None", 0, 1, ValueFormatHints.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED ); //$NON-NLS-1$ //$NON-NLS-2$
+
+        // Initialize enums and add enum literals
+        initEEnum( axisTypeEEnum, AxisType.class, "AxisType" ); //$NON-NLS-1$
+        addEEnumLiteral( axisTypeEEnum, AxisType.DIMENSION_MEMBER_LITERAL );
+        addEEnumLiteral( axisTypeEEnum, AxisType.DIMENSION_ATTRIBUTE_LITERAL );
+        addEEnumLiteral( axisTypeEEnum, AxisType.MEASURE_LITERAL );
+
+        initEEnum( elementNullabilityEEnum, ElementNullability.class,
+                "ElementNullability" ); //$NON-NLS-1$
+        addEEnumLiteral( elementNullabilityEEnum,
+                ElementNullability.UNKNOWN_LITERAL );
+        addEEnumLiteral( elementNullabilityEEnum,
+                ElementNullability.NULLABLE_LITERAL );
+        addEEnumLiteral( elementNullabilityEEnum,
+                ElementNullability.NOT_NULLABLE_LITERAL );
+
+        initEEnum( expressionVariableTypeEEnum, ExpressionVariableType.class,
+                "ExpressionVariableType" ); //$NON-NLS-1$
+        addEEnumLiteral( expressionVariableTypeEEnum,
+                ExpressionVariableType.RESULT_SET_COLUMN );
+        addEEnumLiteral( expressionVariableTypeEEnum,
+                ExpressionVariableType.INSTANCE_OF );
+        addEEnumLiteral( expressionVariableTypeEEnum,
+                ExpressionVariableType.QUERY_EXPRESSION );
+
+        initEEnum( horizontalAlignmentEEnum, HorizontalAlignment.class,
+                "HorizontalAlignment" ); //$NON-NLS-1$
+        addEEnumLiteral( horizontalAlignmentEEnum,
+                HorizontalAlignment.AUTOMATIC_LITERAL );
+        addEEnumLiteral( horizontalAlignmentEEnum,
+                HorizontalAlignment.LEFT_LITERAL );
+        addEEnumLiteral( horizontalAlignmentEEnum,
+                HorizontalAlignment.CENTER_LITERAL );
+        addEEnumLiteral( horizontalAlignmentEEnum,
+                HorizontalAlignment.RIGHT_LITERAL );
+        addEEnumLiteral( horizontalAlignmentEEnum,
+                HorizontalAlignment.LEFT_AND_RIGHT_LITERAL );
+
+        initEEnum( inputPromptControlStyleEEnum, InputPromptControlStyle.class,
+                "InputPromptControlStyle" ); //$NON-NLS-1$
+        addEEnumLiteral( inputPromptControlStyleEEnum,
+                InputPromptControlStyle.TEXT_FIELD_LITERAL );
+        addEEnumLiteral( inputPromptControlStyleEEnum,
+                InputPromptControlStyle.SELECTABLE_LIST_LITERAL );
+        addEEnumLiteral( inputPromptControlStyleEEnum,
+                InputPromptControlStyle.SELECTABLE_LIST_WITH_TEXT_FIELD_LITERAL );
+        addEEnumLiteral( inputPromptControlStyleEEnum,
+                InputPromptControlStyle.CHECK_BOX_LITERAL );
+        addEEnumLiteral( inputPromptControlStyleEEnum,
+                InputPromptControlStyle.RADIO_BUTTON_LITERAL );
+
+        initEEnum( nullOrderingTypeEEnum, NullOrderingType.class,
+                "NullOrderingType" ); //$NON-NLS-1$
+        addEEnumLiteral( nullOrderingTypeEEnum, NullOrderingType.UNKNOWN );
+        addEEnumLiteral( nullOrderingTypeEEnum, NullOrderingType.NULLS_FIRST );
+        addEEnumLiteral( nullOrderingTypeEEnum, NullOrderingType.NULLS_LAST );
+
+        initEEnum( odaComplexDataTypeEEnum, OdaComplexDataType.class,
+                "OdaComplexDataType" ); //$NON-NLS-1$
+        addEEnumLiteral( odaComplexDataTypeEEnum,
+                OdaComplexDataType.STRUCTURE_LITERAL );
+        addEEnumLiteral( odaComplexDataTypeEEnum,
+                OdaComplexDataType.TABLE_LITERAL );
+
+        initEEnum( odaScalarDataTypeEEnum, OdaScalarDataType.class,
+                "OdaScalarDataType" ); //$NON-NLS-1$
+        addEEnumLiteral( odaScalarDataTypeEEnum, OdaScalarDataType.DATE_LITERAL );
+        addEEnumLiteral( odaScalarDataTypeEEnum,
+                OdaScalarDataType.DOUBLE_LITERAL );
+        addEEnumLiteral( odaScalarDataTypeEEnum,
+                OdaScalarDataType.INTEGER_LITERAL );
+        addEEnumLiteral( odaScalarDataTypeEEnum,
+                OdaScalarDataType.STRING_LITERAL );
+        addEEnumLiteral( odaScalarDataTypeEEnum, OdaScalarDataType.TIME_LITERAL );
+        addEEnumLiteral( odaScalarDataTypeEEnum,
+                OdaScalarDataType.TIMESTAMP_LITERAL );
+        addEEnumLiteral( odaScalarDataTypeEEnum,
+                OdaScalarDataType.DECIMAL_LITERAL );
+        addEEnumLiteral( odaScalarDataTypeEEnum, OdaScalarDataType.BLOB_LITERAL );
+        addEEnumLiteral( odaScalarDataTypeEEnum, OdaScalarDataType.CLOB_LITERAL );
+        addEEnumLiteral( odaScalarDataTypeEEnum,
+                OdaScalarDataType.BOOLEAN_LITERAL );
+        addEEnumLiteral( odaScalarDataTypeEEnum,
+                OdaScalarDataType.JAVA_OBJECT_LITERAL );
+
+        initEEnum( parameterModeEEnum, ParameterMode.class, "ParameterMode" ); //$NON-NLS-1$
+        addEEnumLiteral( parameterModeEEnum, ParameterMode.IN_LITERAL );
+        addEEnumLiteral( parameterModeEEnum, ParameterMode.OUT_LITERAL );
+        addEEnumLiteral( parameterModeEEnum, ParameterMode.IN_OUT_LITERAL );
+
+        initEEnum( sessionStatusEEnum, SessionStatus.class, "SessionStatus" ); //$NON-NLS-1$
+        addEEnumLiteral( sessionStatusEEnum, SessionStatus.OK_LITERAL );
+        addEEnumLiteral( sessionStatusEEnum,
+                SessionStatus.USER_CANCELLED_LITERAL );
+        addEEnumLiteral( sessionStatusEEnum, SessionStatus.LOGIN_FAILED_LITERAL );
+        addEEnumLiteral( sessionStatusEEnum, SessionStatus.ERROR_LITERAL );
+
+        initEEnum( sortDirectionTypeEEnum, SortDirectionType.class,
+                "SortDirectionType" ); //$NON-NLS-1$
+        addEEnumLiteral( sortDirectionTypeEEnum, SortDirectionType.ASCENDING );
+        addEEnumLiteral( sortDirectionTypeEEnum, SortDirectionType.DESCENDING );
+
+        initEEnum( textFormatTypeEEnum, TextFormatType.class, "TextFormatType" ); //$NON-NLS-1$
+        addEEnumLiteral( textFormatTypeEEnum, TextFormatType.PLAIN_LITERAL );
+        addEEnumLiteral( textFormatTypeEEnum, TextFormatType.HTML_LITERAL );
+        addEEnumLiteral( textFormatTypeEEnum, TextFormatType.RTF_LITERAL );
+
+        initEEnum( textWrapTypeEEnum, TextWrapType.class, "TextWrapType" ); //$NON-NLS-1$
+        addEEnumLiteral( textWrapTypeEEnum, TextWrapType.NONE_LITERAL );
+        addEEnumLiteral( textWrapTypeEEnum, TextWrapType.WORD_LITERAL );
+
+        // Initialize data types
+        initEDataType( axisTypeObjectEDataType, AxisType.class,
+                "AxisTypeObject", IS_SERIALIZABLE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEDataType(
+                elementNullabilityObjectEDataType,
+                ElementNullability.class,
+                "ElementNullabilityObject", IS_SERIALIZABLE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEDataType(
+                expressionVariableTypeObjectEDataType,
+                ExpressionVariableType.class,
+                "ExpressionVariableTypeObject", IS_SERIALIZABLE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEDataType(
+                horizontalAlignmentObjectEDataType,
+                HorizontalAlignment.class,
+                "HorizontalAlignmentObject", IS_SERIALIZABLE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEDataType(
+                inputPromptControlStyleObjectEDataType,
+                InputPromptControlStyle.class,
+                "InputPromptControlStyleObject", IS_SERIALIZABLE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEDataType(
+                nullOrderingTypeObjectEDataType,
+                NullOrderingType.class,
+                "NullOrderingTypeObject", IS_SERIALIZABLE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEDataType(
+                odaComplexDataTypeObjectEDataType,
+                OdaComplexDataType.class,
+                "OdaComplexDataTypeObject", IS_SERIALIZABLE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEDataType(
+                odaScalarDataTypeObjectEDataType,
+                OdaScalarDataType.class,
+                "OdaScalarDataTypeObject", IS_SERIALIZABLE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEDataType(
+                parameterModeObjectEDataType,
+                ParameterMode.class,
+                "ParameterModeObject", IS_SERIALIZABLE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEDataType(
+                sessionStatusObjectEDataType,
+                SessionStatus.class,
+                "SessionStatusObject", IS_SERIALIZABLE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEDataType(
+                sortDirectionTypeObjectEDataType,
+                SortDirectionType.class,
+                "SortDirectionTypeObject", IS_SERIALIZABLE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEDataType(
+                textFormatTypeObjectEDataType,
+                TextFormatType.class,
+                "TextFormatTypeObject", IS_SERIALIZABLE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+        initEDataType(
+                textWrapTypeObjectEDataType,
+                TextWrapType.class,
+                "TextWrapTypeObject", IS_SERIALIZABLE, IS_GENERATED_INSTANCE_CLASS ); //$NON-NLS-1$
+
+        // Create resource
+        createResource( eNS_URI );
+
+        // Create annotations
+        // http:///org/eclipse/emf/ecore/util/ExtendedMetaData
+        createExtendedMetaDataAnnotations();
+    }
+
+    /**
+     * Initializes the annotations for <b>http:///org/eclipse/emf/ecore/util/ExtendedMetaData</b>.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void createExtendedMetaDataAnnotations()
+    {
+        String source = "http:///org/eclipse/emf/ecore/util/ExtendedMetaData"; //$NON-NLS-1$			
+        addAnnotation( andExpressionEClass, source, new String[]
+        { "name", "AndExpression", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( atomicExpressionContextEClass, source, new String[]
+        { "name", "AtomicExpressionContext", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getAtomicExpressionContext_Optional(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "optional", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getAtomicExpressionContext_Variable(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "variable", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getAtomicExpressionContext_Arguments(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "arguments", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( axisAttributesEClass, source, new String[]
+        { "name", "AxisAttributes", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getAxisAttributes_AxisType(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "axisType", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getAxisAttributes_OnColumnLayout(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "onColumnLayout", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getAxisAttributes_RelatedColumns(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "relatedColumns", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( axisTypeEEnum, source, new String[]
+        { "name", "AxisType" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( axisTypeObjectEDataType, source, new String[]
+        { "name", "AxisType:Object", //$NON-NLS-1$ //$NON-NLS-2$
+                "baseType", "AxisType" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( columnDefinitionEClass, source, new String[]
+        { "name", "ColumnDefinition", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getColumnDefinition_Attributes(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "attributes", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getColumnDefinition_UsageHints(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "usageHints", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getColumnDefinition_MultiDimensionAttributes(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "multiDimensionAttributes", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( compositeFilterExpressionEClass, source, new String[]
+        { "name", "CompositeFilterExpression", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getCompositeFilterExpression_Children(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "children", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( customDataEClass, source, new String[]
+        { "name", "CustomData", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getCustomData_ProviderId(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "providerId", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getCustomData_Value(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "value", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getCustomData_DisplayValue(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "displayValue", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( customFilterExpressionEClass, source, new String[]
+        { "name", "CustomFilterExpression", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getCustomFilterExpression_Type(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "type", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getCustomFilterExpression_Context(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "context", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( dataAccessDesignEClass, source, new String[]
+        { "name", "DataAccessDesign", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDataAccessDesign_DataSetDesign(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "dataSetDesign", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( dataElementAttributesEClass, source, new String[]
+        { "name", "DataElementAttributes", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDataElementAttributes_Identifier(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "identifier", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDataElementAttributes_Name(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "name", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDataElementAttributes_Position(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "position", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDataElementAttributes_NativeDataTypeCode(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "nativeDataTypeCode", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDataElementAttributes_Precision(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "precision", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDataElementAttributes_Scale(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "scale", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDataElementAttributes_Nullability(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "nullability", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDataElementAttributes_UiHints(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "uiHints", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( dataElementIdentifierEClass, source, new String[]
+        { "name", "DataElementIdentifier", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDataElementIdentifier_Name(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "name", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDataElementIdentifier_Position(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "position", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( dataElementIdentifiersEClass, source, new String[]
+        { "name", "DataElementIdentifiers", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDataElementIdentifiers_Identifiers(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "identifiers", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( dataElementUIHintsEClass, source, new String[]
+        { "name", "DataElementUIHints", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDataElementUIHints_DisplayName(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "displayName", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDataElementUIHints_Description(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "description", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( dataSetDesignEClass, source, new String[]
+        { "name", "DataSetDesign", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDataSetDesign_Name(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "name", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDataSetDesign_OdaExtensionDataSetId(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "odaExtensionDataSetId", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDataSetDesign_DataSourceDesign(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "dataSourceDesign", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDataSetDesign_Query(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "query", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDataSetDesign_DisplayName(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "displayName", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDataSetDesign_PublicProperties(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "publicProperties", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDataSetDesign_PrivateProperties(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "privateProperties", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDataSetDesign_ResultSets(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "resultSets", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDataSetDesign_PrimaryResultSetName(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "primaryResultSetName", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDataSetDesign_Parameters(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "parameters", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( dataSetParametersEClass, source, new String[]
+        { "name", "DataSetParameters", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDataSetParameters_ParameterDefinitions(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "parameterDefinitions", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDataSetParameters_DerivedMetaData(), source,
+                new String[]
+                { "kind", "attribute", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "derivedMetaData" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( dataSetQueryEClass, source, new String[]
+        { "name", "DataSetQuery", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDataSetQuery_QueryText(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "queryText", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( dataSourceDesignEClass, source, new String[]
+        { "name", "DataSourceDesign", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDataSourceDesign_Name(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "name", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDataSourceDesign_OdaExtensionId(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "odaExtensionId", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDataSourceDesign_EffectiveOdaExtensionId(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "effectiveOdaExtensionId", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDataSourceDesign_OdaExtensionDataSourceId(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "odaExtensionDataSourceId", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDataSourceDesign_DisplayName(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "displayName", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDataSourceDesign_PublicProperties(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "publicProperties", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDataSourceDesign_PrivateProperties(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "privateProperties", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDataSourceDesign_LinkedProfileName(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "linkedProfileName", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDataSourceDesign_LinkedProfileStoreFilePath(),
+                source, new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "linkedProfileStoreFilePath", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDataSourceDesign_HostResourceIdentifiers(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "hostResourceIdentifiers", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDataSourceDesign_ResourceFile(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "resourceFile", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( designerStateEClass, source, new String[]
+        { "name", "DesignerState", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDesignerState_Version(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "version", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDesignerState_StateContent(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "stateContent", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( designerStateContentEClass, source, new String[]
+        { "name", "DesignerStateContent", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDesignerStateContent_StateContentAsString(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "stateContentAsString", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDesignerStateContent_StateContentAsBlob(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "stateContentAsBlob", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( designSessionRequestEClass, source, new String[]
+        { "name", "DesignSessionRequest", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDesignSessionRequest_DataAccessDesign(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "dataAccessDesign", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDesignSessionRequest_Editable(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "editable", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDesignSessionRequest_SessionLocale(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "sessionLocale", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDesignSessionRequest_DesignerState(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "designerState", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( designSessionResponseEClass, source, new String[]
+        { "name", "DesignSessionResponse", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDesignSessionResponse_SessionStatus(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "sessionStatus", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDesignSessionResponse_DataAccessDesign(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "dataAccessDesign", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDesignSessionResponse_DesignerState(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "designerState", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( documentRootEClass, source, new String[]
+        { "name", "", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "mixed" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDocumentRoot_Mixed(), source, new String[]
+        { "kind", "elementWildcard", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", ":mixed" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDocumentRoot_XMLNSPrefixMap(), source, new String[]
+        { "kind", "attribute", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "xmlns:prefix" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDocumentRoot_XSISchemaLocation(), source,
+                new String[]
+                { "kind", "attribute", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "xsi:schemaLocation" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDocumentRoot_OdaDesignSession(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "odaDesignSession", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( dynamicFilterExpressionEClass, source, new String[]
+        { "name", "DynamicFilterExpression", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDynamicFilterExpression_Context(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "context", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDynamicFilterExpression_DefaultType(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "defaultType", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( dynamicValuesQueryEClass, source, new String[]
+        { "name", "DynamicValuesQuery", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDynamicValuesQuery_DataSetDesign(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "dataSetDesign", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDynamicValuesQuery_Enabled(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "enabled", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getDynamicValuesQuery_ValueColumnIdentifier(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "valueColumnIdentifier", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDynamicValuesQuery_ValueColumn(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "valueColumn", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getDynamicValuesQuery_DisplayNameColumn(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "displayNameColumn", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( elementNullabilityEEnum, source, new String[]
+        { "name", "ElementNullability" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( elementNullabilityObjectEDataType, source, new String[]
+        { "name", "ElementNullability:Object", //$NON-NLS-1$ //$NON-NLS-2$
+                "baseType", "ElementNullability" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( expressionArgumentsEClass, source, new String[]
+        { "name", "ExpressionArguments", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getExpressionArguments_ExpressionParameters(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "expressionParameters", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( expressionParameterDefinitionEClass, source,
+                new String[]
+                { "name", "ExpressionParameterDefinition", //$NON-NLS-1$ //$NON-NLS-2$
+                        "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getExpressionParameterDefinition_StaticValues(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "staticValues", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation(
+                getExpressionParameterDefinition_DynamicInputParameter(),
+                source, new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "dynamicInputParameter", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( expressionParametersEClass, source, new String[]
+        { "name", "ExpressionParameters", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getExpressionParameters_ParameterDefinitions(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "parameterDefinitions", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( expressionVariableEClass, source, new String[]
+        { "name", "ExpressionVariable", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getExpressionVariable_Type(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "type", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getExpressionVariable_Identifier(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "identifier", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getExpressionVariable_NativeDataTypeCode(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "nativeDataTypeCode", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( expressionVariableTypeEEnum, source, new String[]
+        { "name", "ExpressionVariableType" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( expressionVariableTypeObjectEDataType, source,
+                new String[]
+                { "name", "ExpressionVariableType:Object", //$NON-NLS-1$ //$NON-NLS-2$
+                        "baseType", "ExpressionVariableType" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( filterExpressionEClass, source, new String[]
+        { "name", "FilterExpression", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "empty" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getFilterExpression_Negatable(), source, new String[]
+        { "kind", "attribute", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "negatable" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( filterExpressionTypeEClass, source, new String[]
+        { "name", "FilterExpressionType", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getFilterExpressionType_DeclaringExtensionId(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "declaringExtensionId", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getFilterExpressionType_Id(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "id", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( horizontalAlignmentEEnum, source, new String[]
+        { "name", "HorizontalAlignment" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( horizontalAlignmentObjectEDataType, source, new String[]
+        { "name", "HorizontalAlignment:Object", //$NON-NLS-1$ //$NON-NLS-2$
+                "baseType", "HorizontalAlignment" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( inputElementAttributesEClass, source, new String[]
+        { "name", "InputElementAttributes", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getInputElementAttributes_DefaultScalarValue(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "defaultScalarValue", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getInputElementAttributes_DefaultValues(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "defaultValues", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getInputElementAttributes_Editable(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "editable", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getInputElementAttributes_Optional(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "optional", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getInputElementAttributes_MasksValue(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "masksValue", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getInputElementAttributes_StaticValueChoices(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "staticValueChoices", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getInputElementAttributes_DynamicValueChoices(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "dynamicValueChoices", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getInputElementAttributes_UiHints(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "uiHints", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( inputElementUIHintsEClass, source, new String[]
+        { "name", "InputElementUIHints", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getInputElementUIHints_PromptStyle(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "promptStyle", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getInputElementUIHints_AutoSuggestThreshold(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "autoSuggestThreshold", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( inputParameterAttributesEClass, source, new String[]
+        { "name", "InputParameterAttributes", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getInputParameterAttributes_ElementAttributes(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "elementAttributes", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getInputParameterAttributes_UiHints(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "uiHints", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( inputParameterUIHintsEClass, source, new String[]
+        { "name", "InputParameterUIHints", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getInputParameterUIHints_GroupPromptDisplayName(),
+                source, new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "groupPromptDisplayName", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( inputPromptControlStyleEEnum, source, new String[]
+        { "name", "InputPromptControlStyle" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( inputPromptControlStyleObjectEDataType, source,
+                new String[]
+                { "name", "InputPromptControlStyle:Object", //$NON-NLS-1$ //$NON-NLS-2$
+                        "baseType", "InputPromptControlStyle" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( localeEClass, source, new String[]
+        { "name", "Locale", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getLocale_Language(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "language", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getLocale_Country(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "country", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getLocale_Variant(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "variant", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( nameValuePairEClass, source, new String[]
+        { "name", "NameValuePair", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getNameValuePair_Name(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "name", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getNameValuePair_Value(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "value", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( notExpressionEClass, source, new String[]
+        { "name", "NotExpression", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getNotExpression_NegatingExpression(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "negatingExpression", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( nullOrderingTypeEEnum, source, new String[]
+        { "name", "NullOrderingType" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( nullOrderingTypeObjectEDataType, source, new String[]
+        { "name", "NullOrderingType:Object", //$NON-NLS-1$ //$NON-NLS-2$
+                "baseType", "NullOrderingType" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( odaComplexDataTypeEEnum, source, new String[]
+        { "name", "OdaComplexDataType" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( odaComplexDataTypeObjectEDataType, source, new String[]
+        { "name", "OdaComplexDataType:Object", //$NON-NLS-1$ //$NON-NLS-2$
+                "baseType", "OdaComplexDataType" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( odaDesignSessionEClass, source, new String[]
+        { "name", "OdaDesignSession", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getOdaDesignSession_Request(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "request", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getOdaDesignSession_Response(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "response", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( odaScalarDataTypeEEnum, source, new String[]
+        { "name", "OdaScalarDataType" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( odaScalarDataTypeObjectEDataType, source, new String[]
+        { "name", "OdaScalarDataType:Object", //$NON-NLS-1$ //$NON-NLS-2$
+                "baseType", "OdaScalarDataType" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( orExpressionEClass, source, new String[]
+        { "name", "OrExpression", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( outputElementAttributesEClass, source, new String[]
+        { "name", "OutputElementAttributes", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getOutputElementAttributes_Label(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "label", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getOutputElementAttributes_FormattingHints(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "formattingHints", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getOutputElementAttributes_HelpText(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "helpText", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( parameterDefinitionEClass, source, new String[]
+        { "name", "ParameterDefinition", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getParameterDefinition_InOutMode(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "inOutMode", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getParameterDefinition_Attributes(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "attributes", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getParameterDefinition_InputAttributes(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "inputAttributes", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getParameterDefinition_OutputUsageHints(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "outputUsageHints", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getParameterDefinition_Fields(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "fields", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( parameterFieldDefinitionEClass, source, new String[]
+        { "name", "ParameterFieldDefinition", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getParameterFieldDefinition_Attributes(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "attributes", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getParameterFieldDefinition_InputAttributes(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "inputAttributes", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getParameterFieldDefinition_OutputUsageHints(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "outputUsageHints", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( parameterFieldsEClass, source, new String[]
+        { "name", "ParameterFields", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getParameterFields_FieldCollection(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "fieldCollection", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( parameterModeEEnum, source, new String[]
+        { "name", "ParameterMode" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( parameterModeObjectEDataType, source, new String[]
+        { "name", "ParameterMode:Object", //$NON-NLS-1$ //$NON-NLS-2$
+                "baseType", "ParameterMode" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( propertiesEClass, source, new String[]
+        { "name", "Properties", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getProperties_Properties(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "properties", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( propertyEClass, source, new String[]
+        { "name", "Property", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getProperty_NameValue(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "nameValue", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getProperty_DesignAttributes(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "designAttributes", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( propertyAttributesEClass, source, new String[]
+        { "name", "PropertyAttributes", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getPropertyAttributes_DisplayName(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "displayName", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getPropertyAttributes_ElementAttributes(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "elementAttributes", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getPropertyAttributes_DerivedMetaData(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "derivedMetaData", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( resourceIdentifiersEClass, source, new String[]
+        { "name", "ResourceIdentifiers", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getResourceIdentifiers_ApplResourceBaseURIString(),
+                source, new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "applResourceBaseURIString", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getResourceIdentifiers_DesignResourceBaseURIString(),
+                source, new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "designResourceBaseURIString", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( resultSetColumnsEClass, source, new String[]
+        { "name", "ResultSetColumns", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getResultSetColumns_ResultColumnDefinitions(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "resultColumnDefinitions", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( resultSetCriteriaEClass, source, new String[]
+        { "name", "ResultSetCriteria", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getResultSetCriteria_FilterSpecification(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "filterSpecification", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getResultSetCriteria_RowOrdering(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "rowOrdering", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( resultSetDefinitionEClass, source, new String[]
+        { "name", "ResultSetDefinition", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getResultSetDefinition_Name(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "name", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getResultSetDefinition_ResultSetColumns(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "resultSetColumns", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getResultSetDefinition_Criteria(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "criteria", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( resultSetsEClass, source, new String[]
+        { "name", "ResultSets", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getResultSets_ResultSetDefinitions(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "resultSetDefinitions", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getResultSets_DerivedMetaData(), source, new String[]
+        { "kind", "attribute", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "derivedMetaData" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( resultSubsetEClass, source, new String[]
+        { "name", "ResultSubset", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getResultSubset_DataSetDesign(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "dataSetDesign", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getResultSubset_ResultSetName(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "resultSetName", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getResultSubset_ColumnIdentifiers(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "columnIdentifiers", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( scalarValueChoicesEClass, source, new String[]
+        { "name", "ScalarValueChoices", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getScalarValueChoices_ScalarValues(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "scalarValues", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( scalarValueDefinitionEClass, source, new String[]
+        { "name", "ScalarValueDefinition", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getScalarValueDefinition_Value(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "value", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getScalarValueDefinition_DisplayName(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "displayName", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( sessionStatusEEnum, source, new String[]
+        { "name", "SessionStatus" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( sessionStatusObjectEDataType, source, new String[]
+        { "name", "SessionStatus:Object", //$NON-NLS-1$ //$NON-NLS-2$
+                "baseType", "SessionStatus" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( sortDirectionTypeEEnum, source, new String[]
+        { "name", "SortDirectionType" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( sortDirectionTypeObjectEDataType, source, new String[]
+        { "name", "SortDirectionType:Object", //$NON-NLS-1$ //$NON-NLS-2$
+                "baseType", "SortDirectionType" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( sortKeyEClass, source, new String[]
+        { "name", "SortKey", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getSortKey_ColumnIdentifier(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "columnIdentifier", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getSortKey_ColumnName(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "columnName", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getSortKey_ColumnPosition(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "columnPosition", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getSortKey_SortDirection(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "sortDirection", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getSortKey_NullValueOrdering(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "nullValueOrdering", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getSortKey_Optional(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "optional", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( sortSpecificationEClass, source, new String[]
+        { "name", "SortSpecification", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getSortSpecification_SortKeys(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "sortKeys", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( staticValuesEClass, source, new String[]
+        { "name", "StaticValues", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getStaticValues_Values(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "values", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( textFormatTypeEEnum, source, new String[]
+        { "name", "TextFormatType" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( textFormatTypeObjectEDataType, source, new String[]
+        { "name", "TextFormatType:Object", //$NON-NLS-1$ //$NON-NLS-2$
+                "baseType", "TextFormatType" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( textWrapTypeEEnum, source, new String[]
+        { "name", "TextWrapType" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( textWrapTypeObjectEDataType, source, new String[]
+        { "name", "TextWrapType:Object", //$NON-NLS-1$ //$NON-NLS-2$
+                "baseType", "TextWrapType" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( valueFormatHintsEClass, source, new String[]
+        { "name", "ValueFormatHints", //$NON-NLS-1$ //$NON-NLS-2$
+                "kind", "elementOnly" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getValueFormatHints_DisplaySize(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "displaySize", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+        addAnnotation( getValueFormatHints_DisplayFormat(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "displayFormat", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getValueFormatHints_TextFormatType(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "textFormatType", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getValueFormatHints_HorizontalAlignment(), source,
+                new String[]
+                { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                        "name", "horizontalAlignment", //$NON-NLS-1$ //$NON-NLS-2$
+                        "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+                } );
+        addAnnotation( getValueFormatHints_TextWrapType(), source, new String[]
+        { "kind", "element", //$NON-NLS-1$ //$NON-NLS-2$
+                "name", "textWrapType", //$NON-NLS-1$ //$NON-NLS-2$
+                "namespace", "##targetNamespace" //$NON-NLS-1$ //$NON-NLS-2$
+        } );
+    }
+
+} //DesignPackageImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DesignSessionRequestImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DesignSessionRequestImpl.java
new file mode 100644
index 0000000..76c18fd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DesignSessionRequestImpl.java
@@ -0,0 +1,620 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DesignSessionRequestImpl.java,v 1.5 2007/04/11 02:59:52 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DataAccessDesign;
+import org.eclipse.datatools.connectivity.oda.design.DataSetDesign;
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest;
+import org.eclipse.datatools.connectivity.oda.design.DesignerState;
+import org.eclipse.datatools.connectivity.oda.design.Locale;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import com.ibm.icu.util.ULocale;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Session Request</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DesignSessionRequestImpl#getDataAccessDesign <em>Data Access Design</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DesignSessionRequestImpl#isEditable <em>Editable</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DesignSessionRequestImpl#getSessionLocale <em>Session Locale</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DesignSessionRequestImpl#getDesignerState <em>Designer State</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DesignSessionRequestImpl extends EObjectImpl implements
+        DesignSessionRequest
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getDataAccessDesign() <em>Data Access Design</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDataAccessDesign()
+     * @generated
+     * @ordered
+     */
+    protected DataAccessDesign m_dataAccessDesign;
+
+    /**
+     * The default value of the '{@link #isEditable() <em>Editable</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isEditable()
+     * @generated
+     * @ordered
+     */
+    protected static final boolean EDITABLE_EDEFAULT = true;
+
+    /**
+     * The cached value of the '{@link #isEditable() <em>Editable</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isEditable()
+     * @generated
+     * @ordered
+     */
+    protected boolean m_editable = EDITABLE_EDEFAULT;
+
+    /**
+     * This is true if the Editable attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_editableESet;
+
+    /**
+     * The cached value of the '{@link #getSessionLocale() <em>Session Locale</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getSessionLocale()
+     * @generated
+     * @ordered
+     */
+    protected Locale m_sessionLocale;
+
+    /**
+     * The cached value of the '{@link #getDesignerState() <em>Designer State</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDesignerState()
+     * @generated
+     * @ordered
+     */
+    protected DesignerState m_designerState;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected DesignSessionRequestImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.DESIGN_SESSION_REQUEST;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest#setNewDataAccessDesign(org.eclipse.datatools.connectivity.oda.design.DataSourceDesign)
+     * @generated NOT
+     */
+    public void setNewDataAccessDesign( DataSourceDesign dataSourceDesign )
+    {
+        setSessionLocale( createDefaultLocale() );
+
+        DataAccessDesign newAccessDesign = DesignFactory.eINSTANCE
+                .createDataAccessDesign();
+        newAccessDesign.setNewDataSetDesign( dataSourceDesign );
+
+        setDataAccessDesign( newAccessDesign );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest#setNewDataAccessDesign(org.eclipse.datatools.connectivity.oda.design.DataSetDesign)
+     * @generated NOT
+     */
+    public void setNewDataAccessDesign( DataSetDesign dataSetDesign )
+    {
+        setSessionLocale( createDefaultLocale() );
+
+        DataAccessDesign newAccessDesign = DesignFactory.eINSTANCE
+                .createDataAccessDesign();
+        newAccessDesign.setDataSetDesign( dataSetDesign );
+
+        setDataAccessDesign( newAccessDesign );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest#getDataSourceDesign()
+     * @generated NOT
+     */
+    public DataSourceDesign getDataSourceDesign()
+    {
+        if( getDataSetDesign() == null )
+            return null;
+
+        return getDataSetDesign().getDataSourceDesign();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest#getDataSetDesign()
+     * @generated NOT
+     */
+    public DataSetDesign getDataSetDesign()
+    {
+        if( getDataAccessDesign() == null )
+            return null;
+
+        return getDataAccessDesign().getDataSetDesign();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DataAccessDesign getDataAccessDesign()
+    {
+        return m_dataAccessDesign;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetDataAccessDesign(
+            DataAccessDesign newDataAccessDesign, NotificationChain msgs )
+    {
+        DataAccessDesign oldDataAccessDesign = m_dataAccessDesign;
+        m_dataAccessDesign = newDataAccessDesign;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.DESIGN_SESSION_REQUEST__DATA_ACCESS_DESIGN,
+                    oldDataAccessDesign, newDataAccessDesign );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setDataAccessDesign( DataAccessDesign newDataAccessDesign )
+    {
+        if( newDataAccessDesign != m_dataAccessDesign )
+        {
+            NotificationChain msgs = null;
+            if( m_dataAccessDesign != null )
+                msgs = ((InternalEObject) m_dataAccessDesign)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DESIGN_SESSION_REQUEST__DATA_ACCESS_DESIGN,
+                                null, msgs );
+            if( newDataAccessDesign != null )
+                msgs = ((InternalEObject) newDataAccessDesign)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DESIGN_SESSION_REQUEST__DATA_ACCESS_DESIGN,
+                                null, msgs );
+            msgs = basicSetDataAccessDesign( newDataAccessDesign, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DESIGN_SESSION_REQUEST__DATA_ACCESS_DESIGN,
+                    newDataAccessDesign, newDataAccessDesign ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isEditable()
+    {
+        return m_editable;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setEditable( boolean newEditable )
+    {
+        boolean oldEditable = m_editable;
+        m_editable = newEditable;
+        boolean oldEditableESet = m_editableESet;
+        m_editableESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DESIGN_SESSION_REQUEST__EDITABLE,
+                    oldEditable, m_editable, !oldEditableESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetEditable()
+    {
+        boolean oldEditable = m_editable;
+        boolean oldEditableESet = m_editableESet;
+        m_editable = EDITABLE_EDEFAULT;
+        m_editableESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.DESIGN_SESSION_REQUEST__EDITABLE,
+                    oldEditable, EDITABLE_EDEFAULT, oldEditableESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetEditable()
+    {
+        return m_editableESet;
+    }
+
+    /**
+     * Returns the current session's locale.
+     * If none is specified, returns the system default locale.
+     * @generated NOT
+     */
+    public Locale getSessionLocale()
+    {
+        Locale sessionLocale = getSessionLocaleGen();
+        if( sessionLocale != null )
+            return sessionLocale;
+
+        sessionLocale = DesignFactory.eINSTANCE.createLocale();
+        sessionLocale.setLocale( ULocale.getDefault() );
+        return sessionLocale;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public Locale getSessionLocaleGen()
+    {
+        return m_sessionLocale;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetSessionLocale( Locale newSessionLocale,
+            NotificationChain msgs )
+    {
+        Locale oldSessionLocale = m_sessionLocale;
+        m_sessionLocale = newSessionLocale;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.DESIGN_SESSION_REQUEST__SESSION_LOCALE,
+                    oldSessionLocale, newSessionLocale );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setSessionLocale( Locale newSessionLocale )
+    {
+        if( newSessionLocale != m_sessionLocale )
+        {
+            NotificationChain msgs = null;
+            if( m_sessionLocale != null )
+                msgs = ((InternalEObject) m_sessionLocale)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DESIGN_SESSION_REQUEST__SESSION_LOCALE,
+                                null, msgs );
+            if( newSessionLocale != null )
+                msgs = ((InternalEObject) newSessionLocale)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DESIGN_SESSION_REQUEST__SESSION_LOCALE,
+                                null, msgs );
+            msgs = basicSetSessionLocale( newSessionLocale, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DESIGN_SESSION_REQUEST__SESSION_LOCALE,
+                    newSessionLocale, newSessionLocale ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DesignerState getDesignerState()
+    {
+        return m_designerState;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetDesignerState(
+            DesignerState newDesignerState, NotificationChain msgs )
+    {
+        DesignerState oldDesignerState = m_designerState;
+        m_designerState = newDesignerState;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.DESIGN_SESSION_REQUEST__DESIGNER_STATE,
+                    oldDesignerState, newDesignerState );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setDesignerState( DesignerState newDesignerState )
+    {
+        if( newDesignerState != m_designerState )
+        {
+            NotificationChain msgs = null;
+            if( m_designerState != null )
+                msgs = ((InternalEObject) m_designerState)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DESIGN_SESSION_REQUEST__DESIGNER_STATE,
+                                null, msgs );
+            if( newDesignerState != null )
+                msgs = ((InternalEObject) newDesignerState)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DESIGN_SESSION_REQUEST__DESIGNER_STATE,
+                                null, msgs );
+            msgs = basicSetDesignerState( newDesignerState, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DESIGN_SESSION_REQUEST__DESIGNER_STATE,
+                    newDesignerState, newDesignerState ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DESIGN_SESSION_REQUEST__DATA_ACCESS_DESIGN:
+            return basicSetDataAccessDesign( null, msgs );
+        case DesignPackage.DESIGN_SESSION_REQUEST__SESSION_LOCALE:
+            return basicSetSessionLocale( null, msgs );
+        case DesignPackage.DESIGN_SESSION_REQUEST__DESIGNER_STATE:
+            return basicSetDesignerState( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DESIGN_SESSION_REQUEST__DATA_ACCESS_DESIGN:
+            return getDataAccessDesign();
+        case DesignPackage.DESIGN_SESSION_REQUEST__EDITABLE:
+            return isEditable() ? Boolean.TRUE : Boolean.FALSE;
+        case DesignPackage.DESIGN_SESSION_REQUEST__SESSION_LOCALE:
+            return getSessionLocale();
+        case DesignPackage.DESIGN_SESSION_REQUEST__DESIGNER_STATE:
+            return getDesignerState();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DESIGN_SESSION_REQUEST__DATA_ACCESS_DESIGN:
+            setDataAccessDesign( (DataAccessDesign) newValue );
+            return;
+        case DesignPackage.DESIGN_SESSION_REQUEST__EDITABLE:
+            setEditable( ((Boolean) newValue).booleanValue() );
+            return;
+        case DesignPackage.DESIGN_SESSION_REQUEST__SESSION_LOCALE:
+            setSessionLocale( (Locale) newValue );
+            return;
+        case DesignPackage.DESIGN_SESSION_REQUEST__DESIGNER_STATE:
+            setDesignerState( (DesignerState) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DESIGN_SESSION_REQUEST__DATA_ACCESS_DESIGN:
+            setDataAccessDesign( (DataAccessDesign) null );
+            return;
+        case DesignPackage.DESIGN_SESSION_REQUEST__EDITABLE:
+            unsetEditable();
+            return;
+        case DesignPackage.DESIGN_SESSION_REQUEST__SESSION_LOCALE:
+            setSessionLocale( (Locale) null );
+            return;
+        case DesignPackage.DESIGN_SESSION_REQUEST__DESIGNER_STATE:
+            setDesignerState( (DesignerState) null );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DESIGN_SESSION_REQUEST__DATA_ACCESS_DESIGN:
+            return m_dataAccessDesign != null;
+        case DesignPackage.DESIGN_SESSION_REQUEST__EDITABLE:
+            return isSetEditable();
+        case DesignPackage.DESIGN_SESSION_REQUEST__SESSION_LOCALE:
+            return m_sessionLocale != null;
+        case DesignPackage.DESIGN_SESSION_REQUEST__DESIGNER_STATE:
+            return m_designerState != null;
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (editable: " ); //$NON-NLS-1$
+        if( m_editableESet )
+            result.append( m_editable );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ')' );
+        return result.toString();
+    }
+
+    /**
+     * Creates and returns a Locale instance with the 
+     * default system locale settings.
+     * @return  a Locale instance with the system default locale settings
+     * @generated NOT
+     */
+    protected Locale createDefaultLocale()
+    {
+        Locale sessionLocale = DesignFactory.eINSTANCE.createLocale();
+        sessionLocale.setLocale( ULocale.getDefault() );
+        return sessionLocale;
+    }
+
+} //DesignSessionRequestImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DesignSessionResponseImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DesignSessionResponseImpl.java
new file mode 100644
index 0000000..58e27fd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DesignSessionResponseImpl.java
@@ -0,0 +1,483 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DesignSessionResponseImpl.java,v 1.4 2007/04/11 02:59:52 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DataAccessDesign;
+import org.eclipse.datatools.connectivity.oda.design.DataSetDesign;
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.DesignSessionResponse;
+import org.eclipse.datatools.connectivity.oda.design.DesignerState;
+import org.eclipse.datatools.connectivity.oda.design.SessionStatus;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Session Response</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DesignSessionResponseImpl#getSessionStatus <em>Session Status</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DesignSessionResponseImpl#getDataAccessDesign <em>Data Access Design</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DesignSessionResponseImpl#getDesignerState <em>Designer State</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DesignSessionResponseImpl extends EObjectImpl implements
+        DesignSessionResponse
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The default value of the '{@link #getSessionStatus() <em>Session Status</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getSessionStatus()
+     * @generated
+     * @ordered
+     */
+    protected static final SessionStatus SESSION_STATUS_EDEFAULT = SessionStatus.OK_LITERAL;
+
+    /**
+     * The cached value of the '{@link #getSessionStatus() <em>Session Status</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getSessionStatus()
+     * @generated
+     * @ordered
+     */
+    protected SessionStatus m_sessionStatus = SESSION_STATUS_EDEFAULT;
+
+    /**
+     * This is true if the Session Status attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_sessionStatusESet;
+
+    /**
+     * The cached value of the '{@link #getDataAccessDesign() <em>Data Access Design</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDataAccessDesign()
+     * @generated
+     * @ordered
+     */
+    protected DataAccessDesign m_dataAccessDesign;
+
+    /**
+     * The cached value of the '{@link #getDesignerState() <em>Designer State</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDesignerState()
+     * @generated
+     * @ordered
+     */
+    protected DesignerState m_designerState;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected DesignSessionResponseImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.DESIGN_SESSION_RESPONSE;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignSessionResponse#setNewDataAccessDesign(org.eclipse.datatools.connectivity.oda.design.DataSourceDesign)
+     * @generated NOT
+     */
+    public void setNewDataAccessDesign( DataSourceDesign dataSourceDesign )
+    {
+        DataAccessDesign newAccessDesign = DesignFactory.eINSTANCE
+                .createDataAccessDesign();
+        newAccessDesign.setNewDataSetDesign( dataSourceDesign );
+
+        setDataAccessDesign( newAccessDesign );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignSessionResponse#getDataSourceDesign()
+     * @generated NOT
+     */
+    public DataSourceDesign getDataSourceDesign()
+    {
+        if( getDataSetDesign() == null )
+            return null;
+
+        return getDataSetDesign().getDataSourceDesign();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignSessionResponse#getDataSetDesign()
+     * @generated NOT
+     */
+    public DataSetDesign getDataSetDesign()
+    {
+        if( getDataAccessDesign() == null )
+            return null;
+
+        return getDataAccessDesign().getDataSetDesign();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public SessionStatus getSessionStatus()
+    {
+        return m_sessionStatus;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setSessionStatus( SessionStatus newSessionStatus )
+    {
+        SessionStatus oldSessionStatus = m_sessionStatus;
+        m_sessionStatus = newSessionStatus == null ? SESSION_STATUS_EDEFAULT
+                : newSessionStatus;
+        boolean oldSessionStatusESet = m_sessionStatusESet;
+        m_sessionStatusESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DESIGN_SESSION_RESPONSE__SESSION_STATUS,
+                    oldSessionStatus, m_sessionStatus, !oldSessionStatusESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetSessionStatus()
+    {
+        SessionStatus oldSessionStatus = m_sessionStatus;
+        boolean oldSessionStatusESet = m_sessionStatusESet;
+        m_sessionStatus = SESSION_STATUS_EDEFAULT;
+        m_sessionStatusESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.DESIGN_SESSION_RESPONSE__SESSION_STATUS,
+                    oldSessionStatus, SESSION_STATUS_EDEFAULT,
+                    oldSessionStatusESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetSessionStatus()
+    {
+        return m_sessionStatusESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DataAccessDesign getDataAccessDesign()
+    {
+        return m_dataAccessDesign;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetDataAccessDesign(
+            DataAccessDesign newDataAccessDesign, NotificationChain msgs )
+    {
+        DataAccessDesign oldDataAccessDesign = m_dataAccessDesign;
+        m_dataAccessDesign = newDataAccessDesign;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.DESIGN_SESSION_RESPONSE__DATA_ACCESS_DESIGN,
+                    oldDataAccessDesign, newDataAccessDesign );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setDataAccessDesign( DataAccessDesign newDataAccessDesign )
+    {
+        if( newDataAccessDesign != m_dataAccessDesign )
+        {
+            NotificationChain msgs = null;
+            if( m_dataAccessDesign != null )
+                msgs = ((InternalEObject) m_dataAccessDesign)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DESIGN_SESSION_RESPONSE__DATA_ACCESS_DESIGN,
+                                null, msgs );
+            if( newDataAccessDesign != null )
+                msgs = ((InternalEObject) newDataAccessDesign)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DESIGN_SESSION_RESPONSE__DATA_ACCESS_DESIGN,
+                                null, msgs );
+            msgs = basicSetDataAccessDesign( newDataAccessDesign, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DESIGN_SESSION_RESPONSE__DATA_ACCESS_DESIGN,
+                    newDataAccessDesign, newDataAccessDesign ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DesignerState getDesignerState()
+    {
+        return m_designerState;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetDesignerState(
+            DesignerState newDesignerState, NotificationChain msgs )
+    {
+        DesignerState oldDesignerState = m_designerState;
+        m_designerState = newDesignerState;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.DESIGN_SESSION_RESPONSE__DESIGNER_STATE,
+                    oldDesignerState, newDesignerState );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setDesignerState( DesignerState newDesignerState )
+    {
+        if( newDesignerState != m_designerState )
+        {
+            NotificationChain msgs = null;
+            if( m_designerState != null )
+                msgs = ((InternalEObject) m_designerState)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DESIGN_SESSION_RESPONSE__DESIGNER_STATE,
+                                null, msgs );
+            if( newDesignerState != null )
+                msgs = ((InternalEObject) newDesignerState)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DESIGN_SESSION_RESPONSE__DESIGNER_STATE,
+                                null, msgs );
+            msgs = basicSetDesignerState( newDesignerState, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DESIGN_SESSION_RESPONSE__DESIGNER_STATE,
+                    newDesignerState, newDesignerState ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DESIGN_SESSION_RESPONSE__DATA_ACCESS_DESIGN:
+            return basicSetDataAccessDesign( null, msgs );
+        case DesignPackage.DESIGN_SESSION_RESPONSE__DESIGNER_STATE:
+            return basicSetDesignerState( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DESIGN_SESSION_RESPONSE__SESSION_STATUS:
+            return getSessionStatus();
+        case DesignPackage.DESIGN_SESSION_RESPONSE__DATA_ACCESS_DESIGN:
+            return getDataAccessDesign();
+        case DesignPackage.DESIGN_SESSION_RESPONSE__DESIGNER_STATE:
+            return getDesignerState();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DESIGN_SESSION_RESPONSE__SESSION_STATUS:
+            setSessionStatus( (SessionStatus) newValue );
+            return;
+        case DesignPackage.DESIGN_SESSION_RESPONSE__DATA_ACCESS_DESIGN:
+            setDataAccessDesign( (DataAccessDesign) newValue );
+            return;
+        case DesignPackage.DESIGN_SESSION_RESPONSE__DESIGNER_STATE:
+            setDesignerState( (DesignerState) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DESIGN_SESSION_RESPONSE__SESSION_STATUS:
+            unsetSessionStatus();
+            return;
+        case DesignPackage.DESIGN_SESSION_RESPONSE__DATA_ACCESS_DESIGN:
+            setDataAccessDesign( (DataAccessDesign) null );
+            return;
+        case DesignPackage.DESIGN_SESSION_RESPONSE__DESIGNER_STATE:
+            setDesignerState( (DesignerState) null );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DESIGN_SESSION_RESPONSE__SESSION_STATUS:
+            return isSetSessionStatus();
+        case DesignPackage.DESIGN_SESSION_RESPONSE__DATA_ACCESS_DESIGN:
+            return m_dataAccessDesign != null;
+        case DesignPackage.DESIGN_SESSION_RESPONSE__DESIGNER_STATE:
+            return m_designerState != null;
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (sessionStatus: " ); //$NON-NLS-1$
+        if( m_sessionStatusESet )
+            result.append( m_sessionStatus );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //DesignSessionResponseImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DesignerStateContentImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DesignerStateContentImpl.java
new file mode 100644
index 0000000..3850f29
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DesignerStateContentImpl.java
@@ -0,0 +1,288 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DesignerStateContentImpl.java,v 1.4 2007/04/11 02:59:52 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.DesignerStateContent;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>er State Content</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DesignerStateContentImpl#getStateContentAsString <em>State Content As String</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DesignerStateContentImpl#getStateContentAsBlob <em>State Content As Blob</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DesignerStateContentImpl extends EObjectImpl implements
+        DesignerStateContent
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The default value of the '{@link #getStateContentAsString() <em>State Content As String</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getStateContentAsString()
+     * @generated
+     * @ordered
+     */
+    protected static final String STATE_CONTENT_AS_STRING_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getStateContentAsString() <em>State Content As String</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getStateContentAsString()
+     * @generated
+     * @ordered
+     */
+    protected String m_stateContentAsString = STATE_CONTENT_AS_STRING_EDEFAULT;
+
+    /**
+     * The default value of the '{@link #getStateContentAsBlob() <em>State Content As Blob</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getStateContentAsBlob()
+     * @generated
+     * @ordered
+     */
+    protected static final byte[] STATE_CONTENT_AS_BLOB_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getStateContentAsBlob() <em>State Content As Blob</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getStateContentAsBlob()
+     * @generated
+     * @ordered
+     */
+    protected byte[] m_stateContentAsBlob = STATE_CONTENT_AS_BLOB_EDEFAULT;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected DesignerStateContentImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.DESIGNER_STATE_CONTENT;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getStateContentAsString()
+    {
+        return m_stateContentAsString;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignerStateContent#setStateContentAsString(java.lang.String)
+     * @generated NOT
+     */
+    public void setStateContentAsString( String newStateContentAsString )
+    {
+        setStateContentAsStringGen( newStateContentAsString );
+
+        // reset value of alternate content type 
+        setStateContentAsBlobGen( null );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private void setStateContentAsStringGen( String newStateContentAsString )
+    {
+        String oldStateContentAsString = m_stateContentAsString;
+        m_stateContentAsString = newStateContentAsString;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.DESIGNER_STATE_CONTENT__STATE_CONTENT_AS_STRING,
+                    oldStateContentAsString, m_stateContentAsString ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public byte[] getStateContentAsBlob()
+    {
+        return m_stateContentAsBlob;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignerStateContent#setStateContentAsBlob(byte[])
+     * @generated NOT
+     */
+    public void setStateContentAsBlob( byte[] newStateContentAsBlob )
+    {
+        setStateContentAsBlobGen( newStateContentAsBlob );
+
+        // reset value of alternate content type 
+        setStateContentAsStringGen( null );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    private void setStateContentAsBlobGen( byte[] newStateContentAsBlob )
+    {
+        byte[] oldStateContentAsBlob = m_stateContentAsBlob;
+        m_stateContentAsBlob = newStateContentAsBlob;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.DESIGNER_STATE_CONTENT__STATE_CONTENT_AS_BLOB,
+                    oldStateContentAsBlob, m_stateContentAsBlob ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DESIGNER_STATE_CONTENT__STATE_CONTENT_AS_STRING:
+            return getStateContentAsString();
+        case DesignPackage.DESIGNER_STATE_CONTENT__STATE_CONTENT_AS_BLOB:
+            return getStateContentAsBlob();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DESIGNER_STATE_CONTENT__STATE_CONTENT_AS_STRING:
+            setStateContentAsString( (String) newValue );
+            return;
+        case DesignPackage.DESIGNER_STATE_CONTENT__STATE_CONTENT_AS_BLOB:
+            setStateContentAsBlob( (byte[]) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DESIGNER_STATE_CONTENT__STATE_CONTENT_AS_STRING:
+            setStateContentAsString( STATE_CONTENT_AS_STRING_EDEFAULT );
+            return;
+        case DesignPackage.DESIGNER_STATE_CONTENT__STATE_CONTENT_AS_BLOB:
+            setStateContentAsBlob( STATE_CONTENT_AS_BLOB_EDEFAULT );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DESIGNER_STATE_CONTENT__STATE_CONTENT_AS_STRING:
+            return STATE_CONTENT_AS_STRING_EDEFAULT == null ? m_stateContentAsString != null
+                    : !STATE_CONTENT_AS_STRING_EDEFAULT
+                            .equals( m_stateContentAsString );
+        case DesignPackage.DESIGNER_STATE_CONTENT__STATE_CONTENT_AS_BLOB:
+            return STATE_CONTENT_AS_BLOB_EDEFAULT == null ? m_stateContentAsBlob != null
+                    : !STATE_CONTENT_AS_BLOB_EDEFAULT
+                            .equals( m_stateContentAsBlob );
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (stateContentAsString: " ); //$NON-NLS-1$
+        result.append( m_stateContentAsString );
+        result.append( ", stateContentAsBlob: " ); //$NON-NLS-1$
+        result.append( m_stateContentAsBlob );
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //DesignerStateContentImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DesignerStateImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DesignerStateImpl.java
new file mode 100644
index 0000000..a81acf9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DesignerStateImpl.java
@@ -0,0 +1,334 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DesignerStateImpl.java,v 1.4 2007/04/11 02:59:52 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.DesignerState;
+import org.eclipse.datatools.connectivity.oda.design.DesignerStateContent;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>er State</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DesignerStateImpl#getVersion <em>Version</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DesignerStateImpl#getStateContent <em>State Content</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DesignerStateImpl extends EObjectImpl implements DesignerState
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The default value of the '{@link #getVersion() <em>Version</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getVersion()
+     * @generated
+     * @ordered
+     */
+    protected static final String VERSION_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getVersion() <em>Version</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getVersion()
+     * @generated
+     * @ordered
+     */
+    protected String m_version = VERSION_EDEFAULT;
+
+    /**
+     * The cached value of the '{@link #getStateContent() <em>State Content</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getStateContent()
+     * @generated
+     * @ordered
+     */
+    protected DesignerStateContent m_stateContent;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected DesignerStateImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.DESIGNER_STATE;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignerState#setStateContentAsString(java.lang.String)
+     * @generated NOT
+     */
+    public void setNewStateContentAsString( String value )
+    {
+        // creates a new state content with the given value,
+        // overrides any existing content
+        DesignerStateContent content = DesignFactory.eINSTANCE
+                .createDesignerStateContent();
+        content.setStateContentAsString( value );
+
+        setStateContent( content );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignerState#setStateContentAsBlob(byte[])
+     * @generated NOT
+     */
+    public void setNewStateContentAsBlob( byte[] value )
+    {
+        // creates a new state content with the given value,
+        // overrides any existing content
+        DesignerStateContent content = DesignFactory.eINSTANCE
+                .createDesignerStateContent();
+        content.setStateContentAsBlob( value );
+
+        setStateContent( content );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getVersion()
+    {
+        return m_version;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setVersion( String newVersion )
+    {
+        String oldVersion = m_version;
+        m_version = newVersion;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DESIGNER_STATE__VERSION, oldVersion,
+                    m_version ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DesignerStateContent getStateContent()
+    {
+        return m_stateContent;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetStateContent(
+            DesignerStateContent newStateContent, NotificationChain msgs )
+    {
+        DesignerStateContent oldStateContent = m_stateContent;
+        m_stateContent = newStateContent;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.DESIGNER_STATE__STATE_CONTENT,
+                    oldStateContent, newStateContent );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setStateContent( DesignerStateContent newStateContent )
+    {
+        if( newStateContent != m_stateContent )
+        {
+            NotificationChain msgs = null;
+            if( m_stateContent != null )
+                msgs = ((InternalEObject) m_stateContent).eInverseRemove( this,
+                        EOPPOSITE_FEATURE_BASE
+                                - DesignPackage.DESIGNER_STATE__STATE_CONTENT,
+                        null, msgs );
+            if( newStateContent != null )
+                msgs = ((InternalEObject) newStateContent).eInverseAdd( this,
+                        EOPPOSITE_FEATURE_BASE
+                                - DesignPackage.DESIGNER_STATE__STATE_CONTENT,
+                        null, msgs );
+            msgs = basicSetStateContent( newStateContent, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DESIGNER_STATE__STATE_CONTENT,
+                    newStateContent, newStateContent ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DESIGNER_STATE__STATE_CONTENT:
+            return basicSetStateContent( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DESIGNER_STATE__VERSION:
+            return getVersion();
+        case DesignPackage.DESIGNER_STATE__STATE_CONTENT:
+            return getStateContent();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DESIGNER_STATE__VERSION:
+            setVersion( (String) newValue );
+            return;
+        case DesignPackage.DESIGNER_STATE__STATE_CONTENT:
+            setStateContent( (DesignerStateContent) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DESIGNER_STATE__VERSION:
+            setVersion( VERSION_EDEFAULT );
+            return;
+        case DesignPackage.DESIGNER_STATE__STATE_CONTENT:
+            setStateContent( (DesignerStateContent) null );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DESIGNER_STATE__VERSION:
+            return VERSION_EDEFAULT == null ? m_version != null
+                    : !VERSION_EDEFAULT.equals( m_version );
+        case DesignPackage.DESIGNER_STATE__STATE_CONTENT:
+            return m_stateContent != null;
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (version: " ); //$NON-NLS-1$
+        result.append( m_version );
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //DesignerStateImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DocumentRootImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DocumentRootImpl.java
new file mode 100644
index 0000000..1030601
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DocumentRootImpl.java
@@ -0,0 +1,344 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DocumentRootImpl.java,v 1.2 2007/04/11 02:59:52 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.DocumentRoot;
+import org.eclipse.datatools.connectivity.oda.design.OdaDesignSession;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EMap;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.emf.ecore.impl.EStringToStringMapEntryImpl;
+import org.eclipse.emf.ecore.util.BasicFeatureMap;
+import org.eclipse.emf.ecore.util.EcoreEMap;
+import org.eclipse.emf.ecore.util.FeatureMap;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Document Root</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DocumentRootImpl#getMixed <em>Mixed</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DocumentRootImpl#getXMLNSPrefixMap <em>XMLNS Prefix Map</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DocumentRootImpl#getXSISchemaLocation <em>XSI Schema Location</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DocumentRootImpl#getOdaDesignSession <em>Oda Design Session</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DocumentRootImpl extends EObjectImpl implements DocumentRoot
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getMixed() <em>Mixed</em>}' attribute list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getMixed()
+     * @generated
+     * @ordered
+     */
+    protected FeatureMap m_mixed;
+
+    /**
+     * The cached value of the '{@link #getXMLNSPrefixMap() <em>XMLNS Prefix Map</em>}' map.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getXMLNSPrefixMap()
+     * @generated
+     * @ordered
+     */
+    protected EMap<String, String> m_xMLNSPrefixMap;
+
+    /**
+     * The cached value of the '{@link #getXSISchemaLocation() <em>XSI Schema Location</em>}' map.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getXSISchemaLocation()
+     * @generated
+     * @ordered
+     */
+    protected EMap<String, String> m_xSISchemaLocation;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected DocumentRootImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.DOCUMENT_ROOT;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public FeatureMap getMixed()
+    {
+        if( m_mixed == null )
+        {
+            m_mixed = new BasicFeatureMap( this,
+                    DesignPackage.DOCUMENT_ROOT__MIXED );
+        }
+        return m_mixed;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EMap<String, String> getXMLNSPrefixMap()
+    {
+        if( m_xMLNSPrefixMap == null )
+        {
+            m_xMLNSPrefixMap = new EcoreEMap<String, String>(
+                    EcorePackage.Literals.ESTRING_TO_STRING_MAP_ENTRY,
+                    EStringToStringMapEntryImpl.class, this,
+                    DesignPackage.DOCUMENT_ROOT__XMLNS_PREFIX_MAP );
+        }
+        return m_xMLNSPrefixMap;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EMap<String, String> getXSISchemaLocation()
+    {
+        if( m_xSISchemaLocation == null )
+        {
+            m_xSISchemaLocation = new EcoreEMap<String, String>(
+                    EcorePackage.Literals.ESTRING_TO_STRING_MAP_ENTRY,
+                    EStringToStringMapEntryImpl.class, this,
+                    DesignPackage.DOCUMENT_ROOT__XSI_SCHEMA_LOCATION );
+        }
+        return m_xSISchemaLocation;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public OdaDesignSession getOdaDesignSession()
+    {
+        return (OdaDesignSession) getMixed().get(
+                DesignPackage.Literals.DOCUMENT_ROOT__ODA_DESIGN_SESSION, true );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetOdaDesignSession(
+            OdaDesignSession newOdaDesignSession, NotificationChain msgs )
+    {
+        return ((FeatureMap.Internal) getMixed()).basicAdd(
+                DesignPackage.Literals.DOCUMENT_ROOT__ODA_DESIGN_SESSION,
+                newOdaDesignSession, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setOdaDesignSession( OdaDesignSession newOdaDesignSession )
+    {
+        ((FeatureMap.Internal) getMixed()).set(
+                DesignPackage.Literals.DOCUMENT_ROOT__ODA_DESIGN_SESSION,
+                newOdaDesignSession );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DOCUMENT_ROOT__MIXED:
+            return ((InternalEList<?>) getMixed()).basicRemove( otherEnd, msgs );
+        case DesignPackage.DOCUMENT_ROOT__XMLNS_PREFIX_MAP:
+            return ((InternalEList<?>) getXMLNSPrefixMap()).basicRemove(
+                    otherEnd, msgs );
+        case DesignPackage.DOCUMENT_ROOT__XSI_SCHEMA_LOCATION:
+            return ((InternalEList<?>) getXSISchemaLocation()).basicRemove(
+                    otherEnd, msgs );
+        case DesignPackage.DOCUMENT_ROOT__ODA_DESIGN_SESSION:
+            return basicSetOdaDesignSession( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DOCUMENT_ROOT__MIXED:
+            if( coreType )
+                return getMixed();
+            return ((FeatureMap.Internal) getMixed()).getWrapper();
+        case DesignPackage.DOCUMENT_ROOT__XMLNS_PREFIX_MAP:
+            if( coreType )
+                return getXMLNSPrefixMap();
+            else
+                return getXMLNSPrefixMap().map();
+        case DesignPackage.DOCUMENT_ROOT__XSI_SCHEMA_LOCATION:
+            if( coreType )
+                return getXSISchemaLocation();
+            else
+                return getXSISchemaLocation().map();
+        case DesignPackage.DOCUMENT_ROOT__ODA_DESIGN_SESSION:
+            return getOdaDesignSession();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DOCUMENT_ROOT__MIXED:
+            ((FeatureMap.Internal) getMixed()).set( newValue );
+            return;
+        case DesignPackage.DOCUMENT_ROOT__XMLNS_PREFIX_MAP:
+            ((EStructuralFeature.Setting) getXMLNSPrefixMap()).set( newValue );
+            return;
+        case DesignPackage.DOCUMENT_ROOT__XSI_SCHEMA_LOCATION:
+            ((EStructuralFeature.Setting) getXSISchemaLocation())
+                    .set( newValue );
+            return;
+        case DesignPackage.DOCUMENT_ROOT__ODA_DESIGN_SESSION:
+            setOdaDesignSession( (OdaDesignSession) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DOCUMENT_ROOT__MIXED:
+            getMixed().clear();
+            return;
+        case DesignPackage.DOCUMENT_ROOT__XMLNS_PREFIX_MAP:
+            getXMLNSPrefixMap().clear();
+            return;
+        case DesignPackage.DOCUMENT_ROOT__XSI_SCHEMA_LOCATION:
+            getXSISchemaLocation().clear();
+            return;
+        case DesignPackage.DOCUMENT_ROOT__ODA_DESIGN_SESSION:
+            setOdaDesignSession( (OdaDesignSession) null );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DOCUMENT_ROOT__MIXED:
+            return m_mixed != null && !m_mixed.isEmpty();
+        case DesignPackage.DOCUMENT_ROOT__XMLNS_PREFIX_MAP:
+            return m_xMLNSPrefixMap != null && !m_xMLNSPrefixMap.isEmpty();
+        case DesignPackage.DOCUMENT_ROOT__XSI_SCHEMA_LOCATION:
+            return m_xSISchemaLocation != null
+                    && !m_xSISchemaLocation.isEmpty();
+        case DesignPackage.DOCUMENT_ROOT__ODA_DESIGN_SESSION:
+            return getOdaDesignSession() != null;
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (mixed: " ); //$NON-NLS-1$
+        result.append( m_mixed );
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //DocumentRootImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DynamicFilterExpressionImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DynamicFilterExpressionImpl.java
new file mode 100644
index 0000000..527365a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DynamicFilterExpressionImpl.java
@@ -0,0 +1,396 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DynamicFilterExpressionImpl.java,v 1.4 2009/10/23 20:17:26 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.AtomicExpressionContext;
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.DynamicFilterExpression;
+import org.eclipse.datatools.connectivity.oda.design.FilterExpressionType;
+import org.eclipse.datatools.connectivity.oda.design.ExpressionArguments;
+import org.eclipse.datatools.connectivity.oda.design.ExpressionVariable;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Dynamic Filter Expression</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DynamicFilterExpressionImpl#getContext <em>Context</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DynamicFilterExpressionImpl#getDefaultType <em>Default Type</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ * @since 3.3 (DTP 1.8)
+ */
+public class DynamicFilterExpressionImpl extends FilterExpressionImpl implements
+        DynamicFilterExpression
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getContext() <em>Context</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getContext()
+     * @generated
+     * @ordered
+     */
+    protected AtomicExpressionContext m_context;
+
+    /**
+     * The cached value of the '{@link #getDefaultType() <em>Default Type</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDefaultType()
+     * @generated
+     * @ordered
+     */
+    protected FilterExpressionType m_defaultType;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected DynamicFilterExpressionImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.DYNAMIC_FILTER_EXPRESSION;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected AtomicExpressionContext getContextGen()
+    {
+        return m_context;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DynamicFilterExpression#getContext()
+     * @generated NOT
+     */
+    public AtomicExpressionContext getContext()
+    {
+        if( getContextGen() == null )
+            setContext( DesignFactory.eINSTANCE.createAtomicExpressionContext() );
+        return getContextGen();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetContext(
+            AtomicExpressionContext newContext, NotificationChain msgs )
+    {
+        AtomicExpressionContext oldContext = m_context;
+        m_context = newContext;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.DYNAMIC_FILTER_EXPRESSION__CONTEXT,
+                    oldContext, newContext );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setContext( AtomicExpressionContext newContext )
+    {
+        if( newContext != m_context )
+        {
+            NotificationChain msgs = null;
+            if( m_context != null )
+                msgs = ((InternalEObject) m_context)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DYNAMIC_FILTER_EXPRESSION__CONTEXT,
+                                null, msgs );
+            if( newContext != null )
+                msgs = ((InternalEObject) newContext)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DYNAMIC_FILTER_EXPRESSION__CONTEXT,
+                                null, msgs );
+            msgs = basicSetContext( newContext, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DYNAMIC_FILTER_EXPRESSION__CONTEXT,
+                    newContext, newContext ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public FilterExpressionType getDefaultType()
+    {
+        return m_defaultType;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetDefaultType(
+            FilterExpressionType newDefaultType, NotificationChain msgs )
+    {
+        FilterExpressionType oldDefaultType = m_defaultType;
+        m_defaultType = newDefaultType;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.DYNAMIC_FILTER_EXPRESSION__DEFAULT_TYPE,
+                    oldDefaultType, newDefaultType );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setDefaultType( FilterExpressionType newDefaultType )
+    {
+        if( newDefaultType != m_defaultType )
+        {
+            NotificationChain msgs = null;
+            if( m_defaultType != null )
+                msgs = ((InternalEObject) m_defaultType)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DYNAMIC_FILTER_EXPRESSION__DEFAULT_TYPE,
+                                null, msgs );
+            if( newDefaultType != null )
+                msgs = ((InternalEObject) newDefaultType)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DYNAMIC_FILTER_EXPRESSION__DEFAULT_TYPE,
+                                null, msgs );
+            msgs = basicSetDefaultType( newDefaultType, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DYNAMIC_FILTER_EXPRESSION__DEFAULT_TYPE,
+                    newDefaultType, newDefaultType ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DYNAMIC_FILTER_EXPRESSION__CONTEXT:
+            return basicSetContext( null, msgs );
+        case DesignPackage.DYNAMIC_FILTER_EXPRESSION__DEFAULT_TYPE:
+            return basicSetDefaultType( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DYNAMIC_FILTER_EXPRESSION__CONTEXT:
+            return getContext();
+        case DesignPackage.DYNAMIC_FILTER_EXPRESSION__DEFAULT_TYPE:
+            return getDefaultType();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DYNAMIC_FILTER_EXPRESSION__CONTEXT:
+            setContext( (AtomicExpressionContext) newValue );
+            return;
+        case DesignPackage.DYNAMIC_FILTER_EXPRESSION__DEFAULT_TYPE:
+            setDefaultType( (FilterExpressionType) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DYNAMIC_FILTER_EXPRESSION__CONTEXT:
+            setContext( (AtomicExpressionContext) null );
+            return;
+        case DesignPackage.DYNAMIC_FILTER_EXPRESSION__DEFAULT_TYPE:
+            setDefaultType( (FilterExpressionType) null );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DYNAMIC_FILTER_EXPRESSION__CONTEXT:
+            return m_context != null;
+        case DesignPackage.DYNAMIC_FILTER_EXPRESSION__DEFAULT_TYPE:
+            return m_defaultType != null;
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DynamicFilterExpression#isOptional()
+     * @generated NOT
+     */
+    public boolean isOptional()
+    {
+        return getContext().isOptional();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DynamicFilterExpression#setIsOptional(boolean)
+     * @generated NOT
+     */
+    public void setIsOptional( boolean isOptional )
+    {
+        getContext().setOptional( isOptional );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DynamicFilterExpression#getContextVariable()
+     * @generated NOT
+     */
+    public ExpressionVariable getContextVariable()
+    {
+        return getContext().getVariable();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DynamicFilterExpression#setContextVariable(org.eclipse.datatools.connectivity.oda.design.ExpressionVariable)
+     * @generated NOT
+     */
+    public void setContextVariable( ExpressionVariable variable )
+    {
+        getContext().setVariable( variable );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DynamicFilterExpression#getContextArguments()
+     * @generated NOT
+     */
+    public ExpressionArguments getContextArguments()
+    {
+        return getContext().getArguments();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DynamicFilterExpression#setContextArguments(org.eclipse.datatools.connectivity.oda.design.ExpressionArguments)
+     * @generated NOT
+     */
+    public void setContextArguments( ExpressionArguments arguments )
+    {
+        getContext().setArguments( arguments );
+    }
+
+} //DynamicFilterExpressionImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DynamicValuesQueryImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DynamicValuesQueryImpl.java
new file mode 100644
index 0000000..54afb1e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/DynamicValuesQueryImpl.java
@@ -0,0 +1,627 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DynamicValuesQueryImpl.java,v 1.3 2009/04/24 03:20:26 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DataElementIdentifier;
+import org.eclipse.datatools.connectivity.oda.design.DataSetDesign;
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Dynamic Values Query</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DynamicValuesQueryImpl#getDataSetDesign <em>Data Set Design</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DynamicValuesQueryImpl#isEnabled <em>Enabled</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DynamicValuesQueryImpl#getValueColumnIdentifier <em>Value Column Identifier</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DynamicValuesQueryImpl#getValueColumn <em>Value Column</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.DynamicValuesQueryImpl#getDisplayNameColumn <em>Display Name Column</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DynamicValuesQueryImpl extends EObjectImpl implements
+        DynamicValuesQuery
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getDataSetDesign() <em>Data Set Design</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDataSetDesign()
+     * @generated
+     * @ordered
+     */
+    protected DataSetDesign m_dataSetDesign;
+
+    /**
+     * The default value of the '{@link #isEnabled() <em>Enabled</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isEnabled()
+     * @generated
+     * @ordered
+     */
+    protected static final boolean ENABLED_EDEFAULT = true;
+
+    /**
+     * The cached value of the '{@link #isEnabled() <em>Enabled</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isEnabled()
+     * @generated
+     * @ordered
+     */
+    protected boolean m_enabled = ENABLED_EDEFAULT;
+
+    /**
+     * This is true if the Enabled attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_enabledESet;
+
+    /**
+     * The cached value of the '{@link #getValueColumnIdentifier() <em>Value Column Identifier</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getValueColumnIdentifier()
+     * @generated
+     * @ordered
+     * @since 3.3.2
+     */
+    protected DataElementIdentifier m_valueColumnIdentifier;
+
+    /**
+     * The default value of the '{@link #getValueColumn() <em>Value Column</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getValueColumn()
+     * @generated
+     * @ordered
+     */
+    protected static final String VALUE_COLUMN_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getValueColumn() <em>Value Column</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getValueColumn()
+     * @generated
+     * @ordered
+     * @deprecated  since 3.3.2; replaced by m_valueColumnIdentifier
+     */
+    protected String m_valueColumn = VALUE_COLUMN_EDEFAULT;
+
+    /**
+     * The default value of the '{@link #getDisplayNameColumn() <em>Display Name Column</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDisplayNameColumn()
+     * @generated
+     * @ordered
+     */
+    protected static final String DISPLAY_NAME_COLUMN_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getDisplayNameColumn() <em>Display Name Column</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDisplayNameColumn()
+     * @generated
+     * @ordered
+     */
+    protected String m_displayNameColumn = DISPLAY_NAME_COLUMN_EDEFAULT;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected DynamicValuesQueryImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.DYNAMIC_VALUES_QUERY;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DataSetDesign getDataSetDesign()
+    {
+        return m_dataSetDesign;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetDataSetDesign(
+            DataSetDesign newDataSetDesign, NotificationChain msgs )
+    {
+        DataSetDesign oldDataSetDesign = m_dataSetDesign;
+        m_dataSetDesign = newDataSetDesign;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.DYNAMIC_VALUES_QUERY__DATA_SET_DESIGN,
+                    oldDataSetDesign, newDataSetDesign );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setDataSetDesign( DataSetDesign newDataSetDesign )
+    {
+        if( newDataSetDesign != m_dataSetDesign )
+        {
+            NotificationChain msgs = null;
+            if( m_dataSetDesign != null )
+                msgs = ((InternalEObject) m_dataSetDesign)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DYNAMIC_VALUES_QUERY__DATA_SET_DESIGN,
+                                null, msgs );
+            if( newDataSetDesign != null )
+                msgs = ((InternalEObject) newDataSetDesign)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DYNAMIC_VALUES_QUERY__DATA_SET_DESIGN,
+                                null, msgs );
+            msgs = basicSetDataSetDesign( newDataSetDesign, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DYNAMIC_VALUES_QUERY__DATA_SET_DESIGN,
+                    newDataSetDesign, newDataSetDesign ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isEnabled()
+    {
+        return m_enabled;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setEnabled( boolean newEnabled )
+    {
+        boolean oldEnabled = m_enabled;
+        m_enabled = newEnabled;
+        boolean oldEnabledESet = m_enabledESet;
+        m_enabledESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DYNAMIC_VALUES_QUERY__ENABLED, oldEnabled,
+                    m_enabled, !oldEnabledESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetEnabled()
+    {
+        boolean oldEnabled = m_enabled;
+        boolean oldEnabledESet = m_enabledESet;
+        m_enabled = ENABLED_EDEFAULT;
+        m_enabledESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.DYNAMIC_VALUES_QUERY__ENABLED, oldEnabled,
+                    ENABLED_EDEFAULT, oldEnabledESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetEnabled()
+    {
+        return m_enabledESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DataElementIdentifier getValueColumnIdentifier()
+    {
+        return m_valueColumnIdentifier;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetValueColumnIdentifier(
+            DataElementIdentifier newValueColumnIdentifier,
+            NotificationChain msgs )
+    {
+        DataElementIdentifier oldValueColumnIdentifier = m_valueColumnIdentifier;
+        m_valueColumnIdentifier = newValueColumnIdentifier;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.DYNAMIC_VALUES_QUERY__VALUE_COLUMN_IDENTIFIER,
+                    oldValueColumnIdentifier, newValueColumnIdentifier );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setValueColumnIdentifier(
+            DataElementIdentifier newValueColumnIdentifier )
+    {
+        if( newValueColumnIdentifier != m_valueColumnIdentifier )
+        {
+            NotificationChain msgs = null;
+            if( m_valueColumnIdentifier != null )
+                msgs = ((InternalEObject) m_valueColumnIdentifier)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DYNAMIC_VALUES_QUERY__VALUE_COLUMN_IDENTIFIER,
+                                null, msgs );
+            if( newValueColumnIdentifier != null )
+                msgs = ((InternalEObject) newValueColumnIdentifier)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.DYNAMIC_VALUES_QUERY__VALUE_COLUMN_IDENTIFIER,
+                                null, msgs );
+            msgs = basicSetValueColumnIdentifier( newValueColumnIdentifier,
+                    msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.DYNAMIC_VALUES_QUERY__VALUE_COLUMN_IDENTIFIER,
+                    newValueColumnIdentifier, newValueColumnIdentifier ) );
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery#getValueColumn()
+     * @generated NOT
+     */
+    public String getValueColumn()
+    {
+        // the name attribute should now be stored in the associated identifier;
+        // for backward compatibility of previously persisted object,
+        // use the one in deprecated member variable, if exists
+        String elementName = getValueColumnGen();
+        if( elementName != VALUE_COLUMN_EDEFAULT )
+            return elementName;
+        return getValueColumnNameInIdentifier();
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected String getValueColumnGen()
+    {
+        return m_valueColumn;
+    }
+
+    /**
+     * Returns the value column name stored in the associated identifier.
+     * @generated NOT
+     */
+    protected String getValueColumnNameInIdentifier()
+    {
+        DataElementIdentifier identifier = getValueColumnIdentifier();
+        if( identifier == null )
+            return VALUE_COLUMN_EDEFAULT;
+
+        return identifier.getName();
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery#setValueColumn(java.lang.String)
+     * @generated NOT
+     */
+    public void setValueColumn( String newValueColumn )
+    {
+        // the name attribute should now be stored in the associated identifier;
+        // clear any existing value in the deprecated member variable
+        if( getValueColumnGen() != VALUE_COLUMN_EDEFAULT )
+            setValueColumnGen( VALUE_COLUMN_EDEFAULT );
+        setValueColumnNameInIdentifier( newValueColumn );
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void setValueColumnGen( String newValueColumn )
+    {
+        String oldValueColumn = m_valueColumn;
+        m_valueColumn = newValueColumn;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DYNAMIC_VALUES_QUERY__VALUE_COLUMN,
+                    oldValueColumn, m_valueColumn ) );
+    }
+    
+    /**
+     * Set the value column name in the associated identifier.
+     * @generated NOT
+     */
+    protected void setValueColumnNameInIdentifier( String newValueColumn )
+    {
+        DataElementIdentifier identifier = getValueColumnIdentifier();
+        if( identifier == null )
+        {
+            identifier = DesignFactory.eINSTANCE.createDataElementIdentifier();
+            setValueColumnIdentifier( identifier );
+        }
+
+        identifier.setName( newValueColumn );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getDisplayNameColumn()
+    {
+        return m_displayNameColumn;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setDisplayNameColumn( String newDisplayNameColumn )
+    {
+        String oldDisplayNameColumn = m_displayNameColumn;
+        m_displayNameColumn = newDisplayNameColumn;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.DYNAMIC_VALUES_QUERY__DISPLAY_NAME_COLUMN,
+                    oldDisplayNameColumn, m_displayNameColumn ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DYNAMIC_VALUES_QUERY__DATA_SET_DESIGN:
+            return basicSetDataSetDesign( null, msgs );
+        case DesignPackage.DYNAMIC_VALUES_QUERY__VALUE_COLUMN_IDENTIFIER:
+            return basicSetValueColumnIdentifier( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DYNAMIC_VALUES_QUERY__DATA_SET_DESIGN:
+            return getDataSetDesign();
+        case DesignPackage.DYNAMIC_VALUES_QUERY__ENABLED:
+            return isEnabled() ? Boolean.TRUE : Boolean.FALSE;
+        case DesignPackage.DYNAMIC_VALUES_QUERY__VALUE_COLUMN_IDENTIFIER:
+            return getValueColumnIdentifier();
+        case DesignPackage.DYNAMIC_VALUES_QUERY__VALUE_COLUMN:
+            return getValueColumn();
+        case DesignPackage.DYNAMIC_VALUES_QUERY__DISPLAY_NAME_COLUMN:
+            return getDisplayNameColumn();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DYNAMIC_VALUES_QUERY__DATA_SET_DESIGN:
+            setDataSetDesign( (DataSetDesign) newValue );
+            return;
+        case DesignPackage.DYNAMIC_VALUES_QUERY__ENABLED:
+            setEnabled( ((Boolean) newValue).booleanValue() );
+            return;
+        case DesignPackage.DYNAMIC_VALUES_QUERY__VALUE_COLUMN_IDENTIFIER:
+            setValueColumnIdentifier( (DataElementIdentifier) newValue );
+            return;
+        case DesignPackage.DYNAMIC_VALUES_QUERY__VALUE_COLUMN:
+            setValueColumn( (String) newValue );
+            return;
+        case DesignPackage.DYNAMIC_VALUES_QUERY__DISPLAY_NAME_COLUMN:
+            setDisplayNameColumn( (String) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DYNAMIC_VALUES_QUERY__DATA_SET_DESIGN:
+            setDataSetDesign( (DataSetDesign) null );
+            return;
+        case DesignPackage.DYNAMIC_VALUES_QUERY__ENABLED:
+            unsetEnabled();
+            return;
+        case DesignPackage.DYNAMIC_VALUES_QUERY__VALUE_COLUMN_IDENTIFIER:
+            setValueColumnIdentifier( (DataElementIdentifier) null );
+            return;
+        case DesignPackage.DYNAMIC_VALUES_QUERY__VALUE_COLUMN:
+            setValueColumn( VALUE_COLUMN_EDEFAULT );
+            return;
+        case DesignPackage.DYNAMIC_VALUES_QUERY__DISPLAY_NAME_COLUMN:
+            setDisplayNameColumn( DISPLAY_NAME_COLUMN_EDEFAULT );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.DYNAMIC_VALUES_QUERY__DATA_SET_DESIGN:
+            return m_dataSetDesign != null;
+        case DesignPackage.DYNAMIC_VALUES_QUERY__ENABLED:
+            return isSetEnabled();
+        case DesignPackage.DYNAMIC_VALUES_QUERY__VALUE_COLUMN_IDENTIFIER:
+            return m_valueColumnIdentifier != null;
+        case DesignPackage.DYNAMIC_VALUES_QUERY__VALUE_COLUMN:
+            return VALUE_COLUMN_EDEFAULT == null ? m_valueColumn != null
+                    : !VALUE_COLUMN_EDEFAULT.equals( m_valueColumn );
+        case DesignPackage.DYNAMIC_VALUES_QUERY__DISPLAY_NAME_COLUMN:
+            return DISPLAY_NAME_COLUMN_EDEFAULT == null ? m_displayNameColumn != null
+                    : !DISPLAY_NAME_COLUMN_EDEFAULT
+                            .equals( m_displayNameColumn );
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (enabled: " ); //$NON-NLS-1$
+        if( m_enabledESet )
+            result.append( m_enabled );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ", valueColumn: " ); //$NON-NLS-1$
+        result.append( m_valueColumn );
+        result.append( ", displayNameColumn: " ); //$NON-NLS-1$
+        result.append( m_displayNameColumn );
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //DynamicValuesQueryImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ExpressionArgumentsImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ExpressionArgumentsImpl.java
new file mode 100644
index 0000000..b9d3cac
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ExpressionArgumentsImpl.java
@@ -0,0 +1,290 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ExpressionArgumentsImpl.java,v 1.1 2009/03/03 07:42:07 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.ExpressionArguments;
+import org.eclipse.datatools.connectivity.oda.design.ExpressionParameterDefinition;
+import org.eclipse.datatools.connectivity.oda.design.ExpressionParameters;
+import org.eclipse.datatools.connectivity.oda.design.ParameterDefinition;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Expression Arguments</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ExpressionArgumentsImpl#getExpressionParameters <em>Expression Parameters</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ * @since 3.3 (DTP 1.8)
+ */
+public class ExpressionArgumentsImpl extends EObjectImpl implements
+        ExpressionArguments
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getExpressionParameters() <em>Expression Parameters</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getExpressionParameters()
+     * @generated
+     * @ordered
+     */
+    protected ExpressionParameters m_expressionParameters;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected ExpressionArgumentsImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.EXPRESSION_ARGUMENTS;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected ExpressionParameters getExpressionParametersGen()
+    {
+        return m_expressionParameters;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ExpressionArguments#getExpressionParameters()
+     * @generated NOT
+     */
+    public ExpressionParameters getExpressionParameters()
+    {
+        if( getExpressionParametersGen() == null )
+            setExpressionParameters( DesignFactory.eINSTANCE.createExpressionParameters() );
+
+        return getExpressionParametersGen();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetExpressionParameters(
+            ExpressionParameters newExpressionParameters, NotificationChain msgs )
+    {
+        ExpressionParameters oldExpressionParameters = m_expressionParameters;
+        m_expressionParameters = newExpressionParameters;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.EXPRESSION_ARGUMENTS__EXPRESSION_PARAMETERS,
+                    oldExpressionParameters, newExpressionParameters );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setExpressionParameters(
+            ExpressionParameters newExpressionParameters )
+    {
+        if( newExpressionParameters != m_expressionParameters )
+        {
+            NotificationChain msgs = null;
+            if( m_expressionParameters != null )
+                msgs = ((InternalEObject) m_expressionParameters)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.EXPRESSION_ARGUMENTS__EXPRESSION_PARAMETERS,
+                                null, msgs );
+            if( newExpressionParameters != null )
+                msgs = ((InternalEObject) newExpressionParameters)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.EXPRESSION_ARGUMENTS__EXPRESSION_PARAMETERS,
+                                null, msgs );
+            msgs = basicSetExpressionParameters( newExpressionParameters, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.EXPRESSION_ARGUMENTS__EXPRESSION_PARAMETERS,
+                    newExpressionParameters, newExpressionParameters ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.EXPRESSION_ARGUMENTS__EXPRESSION_PARAMETERS:
+            return basicSetExpressionParameters( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.EXPRESSION_ARGUMENTS__EXPRESSION_PARAMETERS:
+            return getExpressionParameters();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.EXPRESSION_ARGUMENTS__EXPRESSION_PARAMETERS:
+            setExpressionParameters( (ExpressionParameters) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.EXPRESSION_ARGUMENTS__EXPRESSION_PARAMETERS:
+            setExpressionParameters( (ExpressionParameters) null );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.EXPRESSION_ARGUMENTS__EXPRESSION_PARAMETERS:
+            return m_expressionParameters != null;
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ExpressionArguments#getExpressionParameterDefinitions()
+     * @generated NOT
+     */
+    public EList<ExpressionParameterDefinition> getExpressionParameterDefinitions()
+    {
+        return getExpressionParameters().getParameterDefinitions();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ExpressionArguments#addStaticParameter(java.lang.Object)
+     * @generated NOT
+     */
+    public ExpressionParameterDefinition addStaticParameter( Object aStaticValue )
+    {
+        ExpressionParameterDefinition exprParam = DesignFactory.eINSTANCE.createExpressionParameterDefinition();
+        exprParam.addStaticValue( aStaticValue );
+        
+        getExpressionParameterDefinitions().add( exprParam );
+        return exprParam;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ExpressionArguments#addDynamicParameter(org.eclipse.datatools.connectivity.oda.design.ParameterDefinition)
+     * @generated NOT
+     */
+    public ExpressionParameterDefinition addDynamicParameter( ParameterDefinition inputParam )
+    {
+        ExpressionParameterDefinition exprParam = DesignFactory.eINSTANCE.createExpressionParameterDefinition();
+        exprParam.setDynamicInputParameter( inputParam );
+
+        getExpressionParameterDefinitions().add( exprParam );
+        return exprParam;
+    }
+
+} //ExpressionArgumentsImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ExpressionParameterDefinitionImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ExpressionParameterDefinitionImpl.java
new file mode 100644
index 0000000..a425613
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ExpressionParameterDefinitionImpl.java
@@ -0,0 +1,387 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ExpressionParameterDefinitionImpl.java,v 1.1 2009/03/03 07:42:07 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.ExpressionParameterDefinition;
+import org.eclipse.datatools.connectivity.oda.design.ParameterDefinition;
+import org.eclipse.datatools.connectivity.oda.design.StaticValues;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Expression Parameter Definition</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ExpressionParameterDefinitionImpl#getStaticValues <em>Static Values</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ExpressionParameterDefinitionImpl#getDynamicInputParameter <em>Dynamic Input Parameter</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ * @since 3.3 (DTP 1.8)
+ */
+public class ExpressionParameterDefinitionImpl extends EObjectImpl implements
+        ExpressionParameterDefinition
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getStaticValues() <em>Static Values</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getStaticValues()
+     * @generated
+     * @ordered
+     */
+    protected StaticValues m_staticValues;
+
+    /**
+     * The cached value of the '{@link #getDynamicInputParameter() <em>Dynamic Input Parameter</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDynamicInputParameter()
+     * @generated
+     * @ordered
+     */
+    protected ParameterDefinition m_dynamicInputParameter;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected ExpressionParameterDefinitionImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.EXPRESSION_PARAMETER_DEFINITION;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public StaticValues getStaticValues()
+    {
+        return m_staticValues;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetStaticValues(
+            StaticValues newStaticValues, NotificationChain msgs )
+    {
+        StaticValues oldStaticValues = m_staticValues;
+        m_staticValues = newStaticValues;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.EXPRESSION_PARAMETER_DEFINITION__STATIC_VALUES,
+                    oldStaticValues, newStaticValues );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setStaticValues( StaticValues newStaticValues )
+    {
+        if( newStaticValues != m_staticValues )
+        {
+            NotificationChain msgs = null;
+            if( m_staticValues != null )
+                msgs = ((InternalEObject) m_staticValues)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.EXPRESSION_PARAMETER_DEFINITION__STATIC_VALUES,
+                                null, msgs );
+            if( newStaticValues != null )
+                msgs = ((InternalEObject) newStaticValues)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.EXPRESSION_PARAMETER_DEFINITION__STATIC_VALUES,
+                                null, msgs );
+            msgs = basicSetStaticValues( newStaticValues, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.EXPRESSION_PARAMETER_DEFINITION__STATIC_VALUES,
+                    newStaticValues, newStaticValues ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ParameterDefinition getDynamicInputParameter()
+    {
+        return m_dynamicInputParameter;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetDynamicInputParameter(
+            ParameterDefinition newDynamicInputParameter, NotificationChain msgs )
+    {
+        ParameterDefinition oldDynamicInputParameter = m_dynamicInputParameter;
+        m_dynamicInputParameter = newDynamicInputParameter;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.EXPRESSION_PARAMETER_DEFINITION__DYNAMIC_INPUT_PARAMETER,
+                    oldDynamicInputParameter, newDynamicInputParameter );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setDynamicInputParameter(
+            ParameterDefinition newDynamicInputParameter )
+    {
+        if( newDynamicInputParameter != m_dynamicInputParameter )
+        {
+            NotificationChain msgs = null;
+            if( m_dynamicInputParameter != null )
+                msgs = ((InternalEObject) m_dynamicInputParameter)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.EXPRESSION_PARAMETER_DEFINITION__DYNAMIC_INPUT_PARAMETER,
+                                null, msgs );
+            if( newDynamicInputParameter != null )
+                msgs = ((InternalEObject) newDynamicInputParameter)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.EXPRESSION_PARAMETER_DEFINITION__DYNAMIC_INPUT_PARAMETER,
+                                null, msgs );
+            msgs = basicSetDynamicInputParameter( newDynamicInputParameter,
+                    msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.EXPRESSION_PARAMETER_DEFINITION__DYNAMIC_INPUT_PARAMETER,
+                    newDynamicInputParameter, newDynamicInputParameter ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.EXPRESSION_PARAMETER_DEFINITION__STATIC_VALUES:
+            return basicSetStaticValues( null, msgs );
+        case DesignPackage.EXPRESSION_PARAMETER_DEFINITION__DYNAMIC_INPUT_PARAMETER:
+            return basicSetDynamicInputParameter( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.EXPRESSION_PARAMETER_DEFINITION__STATIC_VALUES:
+            return getStaticValues();
+        case DesignPackage.EXPRESSION_PARAMETER_DEFINITION__DYNAMIC_INPUT_PARAMETER:
+            return getDynamicInputParameter();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.EXPRESSION_PARAMETER_DEFINITION__STATIC_VALUES:
+            setStaticValues( (StaticValues) newValue );
+            return;
+        case DesignPackage.EXPRESSION_PARAMETER_DEFINITION__DYNAMIC_INPUT_PARAMETER:
+            setDynamicInputParameter( (ParameterDefinition) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.EXPRESSION_PARAMETER_DEFINITION__STATIC_VALUES:
+            setStaticValues( (StaticValues) null );
+            return;
+        case DesignPackage.EXPRESSION_PARAMETER_DEFINITION__DYNAMIC_INPUT_PARAMETER:
+            setDynamicInputParameter( (ParameterDefinition) null );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.EXPRESSION_PARAMETER_DEFINITION__STATIC_VALUES:
+            return m_staticValues != null;
+        case DesignPackage.EXPRESSION_PARAMETER_DEFINITION__DYNAMIC_INPUT_PARAMETER:
+            return m_dynamicInputParameter != null;
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ExpressionParameterDefinition#hasDynamicInputParameter()
+     * @generated NOT
+     */
+    public boolean hasDynamicInputParameter()
+    {
+        return getDynamicInputParameter() != null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ExpressionParameterDefinition#hasEffectiveStaticValues()
+     * @generated NOT
+     */
+    public boolean hasEffectiveStaticValues()
+    {
+        return ( hasStaticValues() && ! hasDynamicInputParameter() );
+    }
+
+    private boolean hasStaticValues()
+    {
+        return ( getStaticValues() != null && ! getStaticValues().isEmpty() );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ExpressionParameterDefinition#getEffectiveStaticValueCount()
+     * @generated NOT
+     */
+    public int getEffectiveStaticValueCount()
+    {
+        if( ! hasEffectiveStaticValues() )
+            return 0;
+        return getStaticValues().count();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ExpressionParameterDefinition#addStaticValue(java.lang.Object)
+     * @generated NOT
+     */
+    public void addStaticValue( Object aValue )
+    {
+        StaticValues staticValueList = getStaticValues();
+        if( staticValueList == null )
+        {
+            staticValueList = DesignFactory.eINSTANCE.createStaticValues();
+            setStaticValues( staticValueList );
+        }
+        staticValueList.add( aValue );
+    }
+
+} //ExpressionParameterDefinitionImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ExpressionParametersImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ExpressionParametersImpl.java
new file mode 100644
index 0000000..7976cbd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ExpressionParametersImpl.java
@@ -0,0 +1,196 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ExpressionParametersImpl.java,v 1.1 2009/03/03 07:42:07 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.ExpressionParameterDefinition;
+import org.eclipse.datatools.connectivity.oda.design.ExpressionParameters;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Expression Parameters</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ExpressionParametersImpl#getParameterDefinitions <em>Parameter Definitions</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ * @since 3.3 (DTP 1.8)
+ */
+public class ExpressionParametersImpl extends EObjectImpl implements
+        ExpressionParameters
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getParameterDefinitions() <em>Parameter Definitions</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getParameterDefinitions()
+     * @generated
+     * @ordered
+     */
+    protected EList<ExpressionParameterDefinition> m_parameterDefinitions;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected ExpressionParametersImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.EXPRESSION_PARAMETERS;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EList<ExpressionParameterDefinition> getParameterDefinitions()
+    {
+        if( m_parameterDefinitions == null )
+        {
+            m_parameterDefinitions = new EObjectContainmentEList<ExpressionParameterDefinition>(
+                    ExpressionParameterDefinition.class, this,
+                    DesignPackage.EXPRESSION_PARAMETERS__PARAMETER_DEFINITIONS );
+        }
+        return m_parameterDefinitions;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.EXPRESSION_PARAMETERS__PARAMETER_DEFINITIONS:
+            return ((InternalEList<?>) getParameterDefinitions()).basicRemove(
+                    otherEnd, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.EXPRESSION_PARAMETERS__PARAMETER_DEFINITIONS:
+            return getParameterDefinitions();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings("unchecked")
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.EXPRESSION_PARAMETERS__PARAMETER_DEFINITIONS:
+            getParameterDefinitions().clear();
+            getParameterDefinitions()
+                    .addAll(
+                            (Collection<? extends ExpressionParameterDefinition>) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.EXPRESSION_PARAMETERS__PARAMETER_DEFINITIONS:
+            getParameterDefinitions().clear();
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.EXPRESSION_PARAMETERS__PARAMETER_DEFINITIONS:
+            return m_parameterDefinitions != null
+                    && !m_parameterDefinitions.isEmpty();
+        }
+        return super.eIsSet( featureID );
+    }
+
+} //ExpressionParametersImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ExpressionVariableImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ExpressionVariableImpl.java
new file mode 100644
index 0000000..72b8e01
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ExpressionVariableImpl.java
@@ -0,0 +1,404 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ExpressionVariableImpl.java,v 1.1 2009/03/03 07:42:07 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.ExpressionVariable;
+import org.eclipse.datatools.connectivity.oda.design.ExpressionVariableType;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Expression Variable</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ExpressionVariableImpl#getType <em>Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ExpressionVariableImpl#getIdentifier <em>Identifier</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ExpressionVariableImpl#getNativeDataTypeCode <em>Native Data Type Code</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ * @since 3.3 (DTP 1.8)
+ */
+public class ExpressionVariableImpl extends EObjectImpl implements
+        ExpressionVariable
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The default value of the '{@link #getType() <em>Type</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getType()
+     * @generated
+     * @ordered
+     */
+    protected static final ExpressionVariableType TYPE_EDEFAULT = ExpressionVariableType.RESULT_SET_COLUMN;
+
+    /**
+     * The cached value of the '{@link #getType() <em>Type</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getType()
+     * @generated
+     * @ordered
+     */
+    protected ExpressionVariableType m_type = TYPE_EDEFAULT;
+
+    /**
+     * This is true if the Type attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_typeESet;
+
+    /**
+     * The default value of the '{@link #getIdentifier() <em>Identifier</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getIdentifier()
+     * @generated
+     * @ordered
+     */
+    protected static final String IDENTIFIER_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getIdentifier() <em>Identifier</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getIdentifier()
+     * @generated
+     * @ordered
+     */
+    protected String m_identifier = IDENTIFIER_EDEFAULT;
+
+    /**
+     * The default value of the '{@link #getNativeDataTypeCode() <em>Native Data Type Code</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getNativeDataTypeCode()
+     * @generated
+     * @ordered
+     */
+    protected static final int NATIVE_DATA_TYPE_CODE_EDEFAULT = 0;
+
+    /**
+     * The cached value of the '{@link #getNativeDataTypeCode() <em>Native Data Type Code</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getNativeDataTypeCode()
+     * @generated
+     * @ordered
+     */
+    protected int m_nativeDataTypeCode = NATIVE_DATA_TYPE_CODE_EDEFAULT;
+
+    /**
+     * This is true if the Native Data Type Code attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_nativeDataTypeCodeESet;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected ExpressionVariableImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.EXPRESSION_VARIABLE;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ExpressionVariableType getType()
+    {
+        return m_type;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setType( ExpressionVariableType newType )
+    {
+        ExpressionVariableType oldType = m_type;
+        m_type = newType == null ? TYPE_EDEFAULT : newType;
+        boolean oldTypeESet = m_typeESet;
+        m_typeESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.EXPRESSION_VARIABLE__TYPE, oldType, m_type,
+                    !oldTypeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetType()
+    {
+        ExpressionVariableType oldType = m_type;
+        boolean oldTypeESet = m_typeESet;
+        m_type = TYPE_EDEFAULT;
+        m_typeESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.EXPRESSION_VARIABLE__TYPE, oldType,
+                    TYPE_EDEFAULT, oldTypeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetType()
+    {
+        return m_typeESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getIdentifier()
+    {
+        return m_identifier;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setIdentifier( String newIdentifier )
+    {
+        String oldIdentifier = m_identifier;
+        m_identifier = newIdentifier;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.EXPRESSION_VARIABLE__IDENTIFIER,
+                    oldIdentifier, m_identifier ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public int getNativeDataTypeCode()
+    {
+        return m_nativeDataTypeCode;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setNativeDataTypeCode( int newNativeDataTypeCode )
+    {
+        int oldNativeDataTypeCode = m_nativeDataTypeCode;
+        m_nativeDataTypeCode = newNativeDataTypeCode;
+        boolean oldNativeDataTypeCodeESet = m_nativeDataTypeCodeESet;
+        m_nativeDataTypeCodeESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.EXPRESSION_VARIABLE__NATIVE_DATA_TYPE_CODE,
+                    oldNativeDataTypeCode, m_nativeDataTypeCode,
+                    !oldNativeDataTypeCodeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetNativeDataTypeCode()
+    {
+        int oldNativeDataTypeCode = m_nativeDataTypeCode;
+        boolean oldNativeDataTypeCodeESet = m_nativeDataTypeCodeESet;
+        m_nativeDataTypeCode = NATIVE_DATA_TYPE_CODE_EDEFAULT;
+        m_nativeDataTypeCodeESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.EXPRESSION_VARIABLE__NATIVE_DATA_TYPE_CODE,
+                    oldNativeDataTypeCode, NATIVE_DATA_TYPE_CODE_EDEFAULT,
+                    oldNativeDataTypeCodeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetNativeDataTypeCode()
+    {
+        return m_nativeDataTypeCodeESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.EXPRESSION_VARIABLE__TYPE:
+            return getType();
+        case DesignPackage.EXPRESSION_VARIABLE__IDENTIFIER:
+            return getIdentifier();
+        case DesignPackage.EXPRESSION_VARIABLE__NATIVE_DATA_TYPE_CODE:
+            return new Integer( getNativeDataTypeCode() );
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.EXPRESSION_VARIABLE__TYPE:
+            setType( (ExpressionVariableType) newValue );
+            return;
+        case DesignPackage.EXPRESSION_VARIABLE__IDENTIFIER:
+            setIdentifier( (String) newValue );
+            return;
+        case DesignPackage.EXPRESSION_VARIABLE__NATIVE_DATA_TYPE_CODE:
+            setNativeDataTypeCode( ((Integer) newValue).intValue() );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.EXPRESSION_VARIABLE__TYPE:
+            unsetType();
+            return;
+        case DesignPackage.EXPRESSION_VARIABLE__IDENTIFIER:
+            setIdentifier( IDENTIFIER_EDEFAULT );
+            return;
+        case DesignPackage.EXPRESSION_VARIABLE__NATIVE_DATA_TYPE_CODE:
+            unsetNativeDataTypeCode();
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.EXPRESSION_VARIABLE__TYPE:
+            return isSetType();
+        case DesignPackage.EXPRESSION_VARIABLE__IDENTIFIER:
+            return IDENTIFIER_EDEFAULT == null ? m_identifier != null
+                    : !IDENTIFIER_EDEFAULT.equals( m_identifier );
+        case DesignPackage.EXPRESSION_VARIABLE__NATIVE_DATA_TYPE_CODE:
+            return isSetNativeDataTypeCode();
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (type: " ); //$NON-NLS-1$
+        if( m_typeESet )
+            result.append( m_type );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ", identifier: " ); //$NON-NLS-1$
+        result.append( m_identifier );
+        result.append( ", nativeDataTypeCode: " ); //$NON-NLS-1$
+        if( m_nativeDataTypeCodeESet )
+            result.append( m_nativeDataTypeCode );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //ExpressionVariableImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/FilterExpressionImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/FilterExpressionImpl.java
new file mode 100644
index 0000000..dbfe2ba
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/FilterExpressionImpl.java
@@ -0,0 +1,243 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: FilterExpressionImpl.java,v 1.1 2009/01/30 00:23:57 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.FilterExpression;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Filter Expression</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.FilterExpressionImpl#isNegatable <em>Negatable</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ * @since 3.3 (DTP 1.8)
+ */
+public abstract class FilterExpressionImpl extends EObjectImpl implements
+        FilterExpression
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The default value of the '{@link #isNegatable() <em>Negatable</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isNegatable()
+     * @generated
+     * @ordered
+     */
+    protected static final boolean NEGATABLE_EDEFAULT = false;
+
+    /**
+     * The cached value of the '{@link #isNegatable() <em>Negatable</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isNegatable()
+     * @generated
+     * @ordered
+     */
+    protected boolean m_negatable = NEGATABLE_EDEFAULT;
+
+    /**
+     * This is true if the Negatable attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_negatableESet;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected FilterExpressionImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.FILTER_EXPRESSION;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isNegatable()
+    {
+        return m_negatable;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setNegatable( boolean newNegatable )
+    {
+        boolean oldNegatable = m_negatable;
+        m_negatable = newNegatable;
+        boolean oldNegatableESet = m_negatableESet;
+        m_negatableESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.FILTER_EXPRESSION__NEGATABLE, oldNegatable,
+                    m_negatable, !oldNegatableESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetNegatable()
+    {
+        boolean oldNegatable = m_negatable;
+        boolean oldNegatableESet = m_negatableESet;
+        m_negatable = NEGATABLE_EDEFAULT;
+        m_negatableESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.FILTER_EXPRESSION__NEGATABLE, oldNegatable,
+                    NEGATABLE_EDEFAULT, oldNegatableESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetNegatable()
+    {
+        return m_negatableESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.FILTER_EXPRESSION__NEGATABLE:
+            return isNegatable() ? Boolean.TRUE : Boolean.FALSE;
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.FILTER_EXPRESSION__NEGATABLE:
+            setNegatable( ((Boolean) newValue).booleanValue() );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.FILTER_EXPRESSION__NEGATABLE:
+            unsetNegatable();
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.FILTER_EXPRESSION__NEGATABLE:
+            return isSetNegatable();
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (negatable: " ); //$NON-NLS-1$
+        if( m_negatableESet )
+            result.append( m_negatable );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //FilterExpressionImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/FilterExpressionTypeImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/FilterExpressionTypeImpl.java
new file mode 100644
index 0000000..c35ebbb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/FilterExpressionTypeImpl.java
@@ -0,0 +1,264 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: FilterExpressionTypeImpl.java,v 1.1 2009/10/23 20:17:26 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.FilterExpressionType;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Filter Expression Type</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.FilterExpressionTypeImpl#getDeclaringExtensionId <em>Declaring Extension Id</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.FilterExpressionTypeImpl#getId <em>Id</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ * @since 3.3 (DTP 1.8)
+ */
+public class FilterExpressionTypeImpl extends EObjectImpl implements
+        FilterExpressionType
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The default value of the '{@link #getDeclaringExtensionId() <em>Declaring Extension Id</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDeclaringExtensionId()
+     * @generated
+     * @ordered
+     */
+    protected static final String DECLARING_EXTENSION_ID_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getDeclaringExtensionId() <em>Declaring Extension Id</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDeclaringExtensionId()
+     * @generated
+     * @ordered
+     */
+    protected String m_declaringExtensionId = DECLARING_EXTENSION_ID_EDEFAULT;
+
+    /**
+     * The default value of the '{@link #getId() <em>Id</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getId()
+     * @generated
+     * @ordered
+     */
+    protected static final String ID_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getId() <em>Id</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getId()
+     * @generated
+     * @ordered
+     */
+    protected String m_id = ID_EDEFAULT;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected FilterExpressionTypeImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.FILTER_EXPRESSION_TYPE;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getDeclaringExtensionId()
+    {
+        return m_declaringExtensionId;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setDeclaringExtensionId( String newDeclaringExtensionId )
+    {
+        String oldDeclaringExtensionId = m_declaringExtensionId;
+        m_declaringExtensionId = newDeclaringExtensionId;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.FILTER_EXPRESSION_TYPE__DECLARING_EXTENSION_ID,
+                    oldDeclaringExtensionId, m_declaringExtensionId ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getId()
+    {
+        return m_id;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setId( String newId )
+    {
+        String oldId = m_id;
+        m_id = newId;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.FILTER_EXPRESSION_TYPE__ID, oldId, m_id ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.FILTER_EXPRESSION_TYPE__DECLARING_EXTENSION_ID:
+            return getDeclaringExtensionId();
+        case DesignPackage.FILTER_EXPRESSION_TYPE__ID:
+            return getId();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.FILTER_EXPRESSION_TYPE__DECLARING_EXTENSION_ID:
+            setDeclaringExtensionId( (String) newValue );
+            return;
+        case DesignPackage.FILTER_EXPRESSION_TYPE__ID:
+            setId( (String) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.FILTER_EXPRESSION_TYPE__DECLARING_EXTENSION_ID:
+            setDeclaringExtensionId( DECLARING_EXTENSION_ID_EDEFAULT );
+            return;
+        case DesignPackage.FILTER_EXPRESSION_TYPE__ID:
+            setId( ID_EDEFAULT );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.FILTER_EXPRESSION_TYPE__DECLARING_EXTENSION_ID:
+            return DECLARING_EXTENSION_ID_EDEFAULT == null ? m_declaringExtensionId != null
+                    : !DECLARING_EXTENSION_ID_EDEFAULT
+                            .equals( m_declaringExtensionId );
+        case DesignPackage.FILTER_EXPRESSION_TYPE__ID:
+            return ID_EDEFAULT == null ? m_id != null : !ID_EDEFAULT
+                    .equals( m_id );
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (declaringExtensionId: " ); //$NON-NLS-1$
+        result.append( m_declaringExtensionId );
+        result.append( ", id: " ); //$NON-NLS-1$
+        result.append( m_id );
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //FilterExpressionTypeImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/InputElementAttributesImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/InputElementAttributesImpl.java
new file mode 100644
index 0000000..f87ab07
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/InputElementAttributesImpl.java
@@ -0,0 +1,1028 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: InputElementAttributesImpl.java,v 1.5 2009/02/12 02:50:20 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery;
+import org.eclipse.datatools.connectivity.oda.design.InputElementAttributes;
+import org.eclipse.datatools.connectivity.oda.design.InputElementUIHints;
+import org.eclipse.datatools.connectivity.oda.design.InputPromptControlStyle;
+import org.eclipse.datatools.connectivity.oda.design.ScalarValueChoices;
+import org.eclipse.datatools.connectivity.oda.design.StaticValues;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Input Element Attributes</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.InputElementAttributesImpl#getDefaultScalarValue <em>Default Scalar Value</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.InputElementAttributesImpl#getDefaultValues <em>Default Values</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.InputElementAttributesImpl#isEditable <em>Editable</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.InputElementAttributesImpl#isOptional <em>Optional</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.InputElementAttributesImpl#isMasksValue <em>Masks Value</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.InputElementAttributesImpl#getStaticValueChoices <em>Static Value Choices</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.InputElementAttributesImpl#getDynamicValueChoices <em>Dynamic Value Choices</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.InputElementAttributesImpl#getUiHints <em>Ui Hints</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class InputElementAttributesImpl extends EObjectImpl implements
+        InputElementAttributes
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The default value of the '{@link #getDefaultScalarValue() <em>Default Scalar Value</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDefaultScalarValue()
+     * @generated
+     * @ordered
+     */
+    protected static final String DEFAULT_SCALAR_VALUE_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getDefaultScalarValue() <em>Default Scalar Value</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDefaultScalarValue()
+     * @generated
+     * @ordered
+     */
+    protected String m_defaultScalarValue = DEFAULT_SCALAR_VALUE_EDEFAULT;
+
+    /**
+     * The cached value of the '{@link #getDefaultValues() <em>Default Values</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDefaultValues()
+     * @generated
+     * @ordered
+     */
+    protected StaticValues m_defaultValues;
+
+    /**
+     * The default value of the '{@link #isEditable() <em>Editable</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isEditable()
+     * @generated
+     * @ordered
+     */
+    protected static final boolean EDITABLE_EDEFAULT = true;
+
+    /**
+     * The cached value of the '{@link #isEditable() <em>Editable</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isEditable()
+     * @generated
+     * @ordered
+     */
+    protected boolean m_editable = EDITABLE_EDEFAULT;
+
+    /**
+     * This is true if the Editable attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_editableESet;
+
+    /**
+     * The default value of the '{@link #isOptional() <em>Optional</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isOptional()
+     * @generated
+     * @ordered
+     */
+    protected static final boolean OPTIONAL_EDEFAULT = false;
+
+    /**
+     * The cached value of the '{@link #isOptional() <em>Optional</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isOptional()
+     * @generated
+     * @ordered
+     */
+    protected boolean m_optional = OPTIONAL_EDEFAULT;
+
+    /**
+     * This is true if the Optional attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_optionalESet;
+
+    /**
+     * The default value of the '{@link #isMasksValue() <em>Masks Value</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isMasksValue()
+     * @generated
+     * @ordered
+     */
+    protected static final boolean MASKS_VALUE_EDEFAULT = false;
+
+    /**
+     * The cached value of the '{@link #isMasksValue() <em>Masks Value</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isMasksValue()
+     * @generated
+     * @ordered
+     */
+    protected boolean m_masksValue = MASKS_VALUE_EDEFAULT;
+
+    /**
+     * This is true if the Masks Value attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_masksValueESet;
+
+    /**
+     * The cached value of the '{@link #getStaticValueChoices() <em>Static Value Choices</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getStaticValueChoices()
+     * @generated
+     * @ordered
+     */
+    protected ScalarValueChoices m_staticValueChoices;
+
+    /**
+     * The cached value of the '{@link #getDynamicValueChoices() <em>Dynamic Value Choices</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDynamicValueChoices()
+     * @generated
+     * @ordered
+     */
+    protected DynamicValuesQuery m_dynamicValueChoices;
+
+    /**
+     * The cached value of the '{@link #getUiHints() <em>Ui Hints</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getUiHints()
+     * @generated
+     * @ordered
+     */
+    protected InputElementUIHints m_uiHints;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected InputElementAttributesImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.INPUT_ELEMENT_ATTRIBUTES;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#hasValueChoices()
+     * @generated NOT
+     */
+    public boolean hasValueChoices()
+    {
+        return (getStaticValueChoices() != null || getDynamicValueChoices() != null);
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#setUiPromptStyle(org.eclipse.datatools.connectivity.oda.design.InputPromptControlStyle)
+     * @generated NOT
+     */
+    public void setUiPromptStyle( InputPromptControlStyle value )
+    {
+        // sets attribute in current UIHints, if exists;
+        // otherwise, creates a new one
+        InputElementUIHints uiHints = getUiHints();
+        boolean hasNoUIHints = (uiHints == null);
+        if( hasNoUIHints )
+            uiHints = DesignFactory.eINSTANCE.createInputElementUIHints();
+        uiHints.setPromptStyle( value );
+
+        if( hasNoUIHints )
+            setUiHints( uiHints );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected String getDefaultScalarValueGen()
+    {
+        return m_defaultScalarValue;
+    }
+
+    /*
+     * @see org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#getDefaultScalarValue()
+     * @generated NOT
+     */
+    public String getDefaultScalarValue()
+    {
+        // if already migrated to use a collection, return the first value if available
+        if( getDefaultScalarValueGen() == null && getDefaultValuesGen() != null
+                && ! getDefaultValuesGen().isEmpty() )
+        {
+            Object firstValue = getDefaultValuesGen().getValues().get( 0 );
+            return (firstValue != null) ? firstValue.toString() : null;
+        }
+        return getDefaultScalarValueGen();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void setDefaultScalarValueGen( String newDefaultScalarValue )
+    {
+        String oldDefaultScalarValue = m_defaultScalarValue;
+        m_defaultScalarValue = newDefaultScalarValue;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.INPUT_ELEMENT_ATTRIBUTES__DEFAULT_SCALAR_VALUE,
+                    oldDefaultScalarValue, m_defaultScalarValue ) );
+    }
+
+    /*
+     * @see org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#setDefaultScalarValue(java.lang.String)
+     * @generated NOT
+     */
+    public void setDefaultScalarValue( String newDefaultScalarValue )
+    {
+        // migrate data to store in collection instead of the deprecated scalar value variable;
+        // adopts original behavior of setting a single default value,
+        // overwriting existing default value(s), if any
+        StaticValues defaultValues = getDefaultValuesGen();
+        if( defaultValues == null )
+        {
+            defaultValues = DesignFactory.eINSTANCE.createStaticValues();
+            setDefaultValuesGen( defaultValues );
+        }
+        else
+            defaultValues.clear(); // overwrites existing values
+
+        defaultValues.add( newDefaultScalarValue );
+        setDefaultScalarValueGen( null ); // overwrites existing value, if any
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected StaticValues getDefaultValuesGen()
+    {
+        return m_defaultValues;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#getDefaultValues()
+     * @generated NOT
+     */
+    public StaticValues getDefaultValues()
+    {
+        // the collection of default values if exists, overrides the deprecated defaultScalarValue value;
+        // if no collection exists, migrates the value in deprecated scalar value variable 
+        // into a new collection
+        if( getDefaultValuesGen() == null && getDefaultScalarValueGen() != null )
+        {
+            return migrateDefaultScalarValue();
+        }
+
+        return getDefaultValuesGen();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetDefaultValues(
+            StaticValues newDefaultValues, NotificationChain msgs )
+    {
+        StaticValues oldDefaultValues = m_defaultValues;
+        m_defaultValues = newDefaultValues;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.INPUT_ELEMENT_ATTRIBUTES__DEFAULT_VALUES,
+                    oldDefaultValues, newDefaultValues );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void setDefaultValuesGen( StaticValues newDefaultValues )
+    {
+        if( newDefaultValues != m_defaultValues )
+        {
+            NotificationChain msgs = null;
+            if( m_defaultValues != null )
+                msgs = ((InternalEObject) m_defaultValues)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.INPUT_ELEMENT_ATTRIBUTES__DEFAULT_VALUES,
+                                null, msgs );
+            if( newDefaultValues != null )
+                msgs = ((InternalEObject) newDefaultValues)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.INPUT_ELEMENT_ATTRIBUTES__DEFAULT_VALUES,
+                                null, msgs );
+            msgs = basicSetDefaultValues( newDefaultValues, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.INPUT_ELEMENT_ATTRIBUTES__DEFAULT_VALUES,
+                    newDefaultValues, newDefaultValues ) );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#setDefaultValues(org.eclipse.datatools.connectivity.oda.design.StaticValuesType)
+     * @generated NOT
+     */
+    public void setDefaultValues( StaticValues newDefaultValues )
+    {
+        setDefaultValuesGen( newDefaultValues );
+        setDefaultScalarValueGen( null ); // using collection, overwrites existing value, if any
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#getDefaultValueCount()
+     * @generated NOT
+     */
+    public int getDefaultValueCount()
+    {
+        StaticValues defaultValues = getDefaultValuesGen();
+        if( defaultValues != null )
+            return defaultValues.count();
+
+        return (getDefaultScalarValueGen() != null) ? 1 : 0;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.InputElementAttributes#addDefaultValue(java.lang.Object)
+     * @generated NOT
+     */
+    public void addDefaultValue( Object aValue )
+    {
+        StaticValues defaultValues = getDefaultValuesGen();
+        if( defaultValues == null )
+        {
+            defaultValues = migrateDefaultScalarValue();
+        }
+
+        defaultValues.add( aValue );
+    }
+
+    private StaticValues migrateDefaultScalarValue()
+    {
+        StaticValues defaultValues = DesignFactory.eINSTANCE.createStaticValues();
+        setDefaultValuesGen( defaultValues );
+
+        // migrate existing default value, if any, to the new collection
+        if( getDefaultScalarValueGen() != null )
+        {
+            defaultValues.add( getDefaultScalarValueGen() );
+            setDefaultScalarValueGen( null );
+        }
+        return defaultValues;
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isEditable()
+    {
+        return m_editable;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setEditable( boolean newEditable )
+    {
+        boolean oldEditable = m_editable;
+        m_editable = newEditable;
+        boolean oldEditableESet = m_editableESet;
+        m_editableESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.INPUT_ELEMENT_ATTRIBUTES__EDITABLE,
+                    oldEditable, m_editable, !oldEditableESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetEditable()
+    {
+        boolean oldEditable = m_editable;
+        boolean oldEditableESet = m_editableESet;
+        m_editable = EDITABLE_EDEFAULT;
+        m_editableESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.INPUT_ELEMENT_ATTRIBUTES__EDITABLE,
+                    oldEditable, EDITABLE_EDEFAULT, oldEditableESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetEditable()
+    {
+        return m_editableESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isOptional()
+    {
+        return m_optional;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setOptional( boolean newOptional )
+    {
+        boolean oldOptional = m_optional;
+        m_optional = newOptional;
+        boolean oldOptionalESet = m_optionalESet;
+        m_optionalESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.INPUT_ELEMENT_ATTRIBUTES__OPTIONAL,
+                    oldOptional, m_optional, !oldOptionalESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetOptional()
+    {
+        boolean oldOptional = m_optional;
+        boolean oldOptionalESet = m_optionalESet;
+        m_optional = OPTIONAL_EDEFAULT;
+        m_optionalESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.INPUT_ELEMENT_ATTRIBUTES__OPTIONAL,
+                    oldOptional, OPTIONAL_EDEFAULT, oldOptionalESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetOptional()
+    {
+        return m_optionalESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isMasksValue()
+    {
+        return m_masksValue;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setMasksValue( boolean newMasksValue )
+    {
+        boolean oldMasksValue = m_masksValue;
+        m_masksValue = newMasksValue;
+        boolean oldMasksValueESet = m_masksValueESet;
+        m_masksValueESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.INPUT_ELEMENT_ATTRIBUTES__MASKS_VALUE,
+                    oldMasksValue, m_masksValue, !oldMasksValueESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetMasksValue()
+    {
+        boolean oldMasksValue = m_masksValue;
+        boolean oldMasksValueESet = m_masksValueESet;
+        m_masksValue = MASKS_VALUE_EDEFAULT;
+        m_masksValueESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.INPUT_ELEMENT_ATTRIBUTES__MASKS_VALUE,
+                    oldMasksValue, MASKS_VALUE_EDEFAULT, oldMasksValueESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetMasksValue()
+    {
+        return m_masksValueESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ScalarValueChoices getStaticValueChoices()
+    {
+        return m_staticValueChoices;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetStaticValueChoices(
+            ScalarValueChoices newStaticValueChoices, NotificationChain msgs )
+    {
+        ScalarValueChoices oldStaticValueChoices = m_staticValueChoices;
+        m_staticValueChoices = newStaticValueChoices;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.INPUT_ELEMENT_ATTRIBUTES__STATIC_VALUE_CHOICES,
+                    oldStaticValueChoices, newStaticValueChoices );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setStaticValueChoices( ScalarValueChoices newStaticValueChoices )
+    {
+        if( newStaticValueChoices != m_staticValueChoices )
+        {
+            NotificationChain msgs = null;
+            if( m_staticValueChoices != null )
+                msgs = ((InternalEObject) m_staticValueChoices)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.INPUT_ELEMENT_ATTRIBUTES__STATIC_VALUE_CHOICES,
+                                null, msgs );
+            if( newStaticValueChoices != null )
+                msgs = ((InternalEObject) newStaticValueChoices)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.INPUT_ELEMENT_ATTRIBUTES__STATIC_VALUE_CHOICES,
+                                null, msgs );
+            msgs = basicSetStaticValueChoices( newStaticValueChoices, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.INPUT_ELEMENT_ATTRIBUTES__STATIC_VALUE_CHOICES,
+                    newStaticValueChoices, newStaticValueChoices ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DynamicValuesQuery getDynamicValueChoices()
+    {
+        return m_dynamicValueChoices;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetDynamicValueChoices(
+            DynamicValuesQuery newDynamicValueChoices, NotificationChain msgs )
+    {
+        DynamicValuesQuery oldDynamicValueChoices = m_dynamicValueChoices;
+        m_dynamicValueChoices = newDynamicValueChoices;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.INPUT_ELEMENT_ATTRIBUTES__DYNAMIC_VALUE_CHOICES,
+                    oldDynamicValueChoices, newDynamicValueChoices );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setDynamicValueChoices(
+            DynamicValuesQuery newDynamicValueChoices )
+    {
+        if( newDynamicValueChoices != m_dynamicValueChoices )
+        {
+            NotificationChain msgs = null;
+            if( m_dynamicValueChoices != null )
+                msgs = ((InternalEObject) m_dynamicValueChoices)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.INPUT_ELEMENT_ATTRIBUTES__DYNAMIC_VALUE_CHOICES,
+                                null, msgs );
+            if( newDynamicValueChoices != null )
+                msgs = ((InternalEObject) newDynamicValueChoices)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.INPUT_ELEMENT_ATTRIBUTES__DYNAMIC_VALUE_CHOICES,
+                                null, msgs );
+            msgs = basicSetDynamicValueChoices( newDynamicValueChoices, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.INPUT_ELEMENT_ATTRIBUTES__DYNAMIC_VALUE_CHOICES,
+                    newDynamicValueChoices, newDynamicValueChoices ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public InputElementUIHints getUiHints()
+    {
+        return m_uiHints;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetUiHints( InputElementUIHints newUiHints,
+            NotificationChain msgs )
+    {
+        InputElementUIHints oldUiHints = m_uiHints;
+        m_uiHints = newUiHints;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.INPUT_ELEMENT_ATTRIBUTES__UI_HINTS,
+                    oldUiHints, newUiHints );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setUiHints( InputElementUIHints newUiHints )
+    {
+        if( newUiHints != m_uiHints )
+        {
+            NotificationChain msgs = null;
+            if( m_uiHints != null )
+                msgs = ((InternalEObject) m_uiHints)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.INPUT_ELEMENT_ATTRIBUTES__UI_HINTS,
+                                null, msgs );
+            if( newUiHints != null )
+                msgs = ((InternalEObject) newUiHints)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.INPUT_ELEMENT_ATTRIBUTES__UI_HINTS,
+                                null, msgs );
+            msgs = basicSetUiHints( newUiHints, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.INPUT_ELEMENT_ATTRIBUTES__UI_HINTS,
+                    newUiHints, newUiHints ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__DEFAULT_VALUES:
+            return basicSetDefaultValues( null, msgs );
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__STATIC_VALUE_CHOICES:
+            return basicSetStaticValueChoices( null, msgs );
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__DYNAMIC_VALUE_CHOICES:
+            return basicSetDynamicValueChoices( null, msgs );
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__UI_HINTS:
+            return basicSetUiHints( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__DEFAULT_SCALAR_VALUE:
+            return getDefaultScalarValue();
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__DEFAULT_VALUES:
+            return getDefaultValues();
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__EDITABLE:
+            return isEditable() ? Boolean.TRUE : Boolean.FALSE;
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__OPTIONAL:
+            return isOptional() ? Boolean.TRUE : Boolean.FALSE;
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__MASKS_VALUE:
+            return isMasksValue() ? Boolean.TRUE : Boolean.FALSE;
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__STATIC_VALUE_CHOICES:
+            return getStaticValueChoices();
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__DYNAMIC_VALUE_CHOICES:
+            return getDynamicValueChoices();
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__UI_HINTS:
+            return getUiHints();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__DEFAULT_SCALAR_VALUE:
+            setDefaultScalarValue( (String) newValue );
+            return;
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__DEFAULT_VALUES:
+            setDefaultValues( (StaticValues) newValue );
+            return;
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__EDITABLE:
+            setEditable( ((Boolean) newValue).booleanValue() );
+            return;
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__OPTIONAL:
+            setOptional( ((Boolean) newValue).booleanValue() );
+            return;
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__MASKS_VALUE:
+            setMasksValue( ((Boolean) newValue).booleanValue() );
+            return;
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__STATIC_VALUE_CHOICES:
+            setStaticValueChoices( (ScalarValueChoices) newValue );
+            return;
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__DYNAMIC_VALUE_CHOICES:
+            setDynamicValueChoices( (DynamicValuesQuery) newValue );
+            return;
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__UI_HINTS:
+            setUiHints( (InputElementUIHints) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__DEFAULT_SCALAR_VALUE:
+            setDefaultScalarValue( DEFAULT_SCALAR_VALUE_EDEFAULT );
+            return;
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__DEFAULT_VALUES:
+            setDefaultValues( (StaticValues) null );
+            return;
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__EDITABLE:
+            unsetEditable();
+            return;
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__OPTIONAL:
+            unsetOptional();
+            return;
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__MASKS_VALUE:
+            unsetMasksValue();
+            return;
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__STATIC_VALUE_CHOICES:
+            setStaticValueChoices( (ScalarValueChoices) null );
+            return;
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__DYNAMIC_VALUE_CHOICES:
+            setDynamicValueChoices( (DynamicValuesQuery) null );
+            return;
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__UI_HINTS:
+            setUiHints( (InputElementUIHints) null );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__DEFAULT_SCALAR_VALUE:
+            return DEFAULT_SCALAR_VALUE_EDEFAULT == null ? m_defaultScalarValue != null
+                    : !DEFAULT_SCALAR_VALUE_EDEFAULT
+                            .equals( m_defaultScalarValue );
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__DEFAULT_VALUES:
+            return m_defaultValues != null;
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__EDITABLE:
+            return isSetEditable();
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__OPTIONAL:
+            return isSetOptional();
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__MASKS_VALUE:
+            return isSetMasksValue();
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__STATIC_VALUE_CHOICES:
+            return m_staticValueChoices != null;
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__DYNAMIC_VALUE_CHOICES:
+            return m_dynamicValueChoices != null;
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES__UI_HINTS:
+            return m_uiHints != null;
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (defaultScalarValue: " ); //$NON-NLS-1$
+        result.append( m_defaultScalarValue );
+        result.append( ", editable: " ); //$NON-NLS-1$
+        if( m_editableESet )
+            result.append( m_editable );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ", optional: " ); //$NON-NLS-1$
+        if( m_optionalESet )
+            result.append( m_optional );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ", masksValue: " ); //$NON-NLS-1$
+        if( m_masksValueESet )
+            result.append( m_masksValue );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //InputElementAttributesImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/InputElementUIHintsImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/InputElementUIHintsImpl.java
new file mode 100644
index 0000000..2cba09c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/InputElementUIHintsImpl.java
@@ -0,0 +1,370 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: InputElementUIHintsImpl.java,v 1.3 2007/04/11 02:59:52 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.InputElementAttributes;
+import org.eclipse.datatools.connectivity.oda.design.InputElementUIHints;
+import org.eclipse.datatools.connectivity.oda.design.InputPromptControlStyle;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Input Element UI Hints</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.InputElementUIHintsImpl#getPromptStyle <em>Prompt Style</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.InputElementUIHintsImpl#getAutoSuggestThreshold <em>Auto Suggest Threshold</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class InputElementUIHintsImpl extends EObjectImpl implements
+        InputElementUIHints
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The default value of the '{@link #getPromptStyle() <em>Prompt Style</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getPromptStyle()
+     * @generated
+     * @ordered
+     */
+    protected static final InputPromptControlStyle PROMPT_STYLE_EDEFAULT = InputPromptControlStyle.TEXT_FIELD_LITERAL;
+
+    /**
+     * The cached value of the '{@link #getPromptStyle() <em>Prompt Style</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getPromptStyle()
+     * @generated
+     * @ordered
+     */
+    protected InputPromptControlStyle m_promptStyle = PROMPT_STYLE_EDEFAULT;
+
+    /**
+     * This is true if the Prompt Style attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_promptStyleESet;
+
+    /**
+     * The default value of the '{@link #getAutoSuggestThreshold() <em>Auto Suggest Threshold</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getAutoSuggestThreshold()
+     * @generated
+     * @ordered
+     */
+    protected static final int AUTO_SUGGEST_THRESHOLD_EDEFAULT = 1;
+
+    /**
+     * The cached value of the '{@link #getAutoSuggestThreshold() <em>Auto Suggest Threshold</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getAutoSuggestThreshold()
+     * @generated
+     * @ordered
+     */
+    protected int m_autoSuggestThreshold = AUTO_SUGGEST_THRESHOLD_EDEFAULT;
+
+    /**
+     * This is true if the Auto Suggest Threshold attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_autoSuggestThresholdESet;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected InputElementUIHintsImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.INPUT_ELEMENT_UI_HINTS;
+    }
+
+    /**
+     * Returns the prompt style if set, or defaults to
+     * to TextField if no static and dynamic value choices are 
+     * defined in container element, InputElementAttributes; 
+     * otherwise, defaults to SelectableList.
+     */
+    public InputPromptControlStyle getPromptStyle()
+    {
+        if( isSetPromptStyle() )
+            return getPromptStyleGen();
+
+        // not set, applies default based on settings of
+        // the container element, InputElementAttributes
+        assert (eContainer() instanceof InputElementAttributes);
+        InputElementAttributes parent = (InputElementAttributes) eContainer();
+        return parent.hasValueChoices() ? InputPromptControlStyle.SELECTABLE_LIST_LITERAL
+                : InputPromptControlStyle.TEXT_FIELD_LITERAL;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public InputPromptControlStyle getPromptStyleGen()
+    {
+        return m_promptStyle;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setPromptStyle( InputPromptControlStyle newPromptStyle )
+    {
+        InputPromptControlStyle oldPromptStyle = m_promptStyle;
+        m_promptStyle = newPromptStyle == null ? PROMPT_STYLE_EDEFAULT
+                : newPromptStyle;
+        boolean oldPromptStyleESet = m_promptStyleESet;
+        m_promptStyleESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.INPUT_ELEMENT_UI_HINTS__PROMPT_STYLE,
+                    oldPromptStyle, m_promptStyle, !oldPromptStyleESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetPromptStyle()
+    {
+        InputPromptControlStyle oldPromptStyle = m_promptStyle;
+        boolean oldPromptStyleESet = m_promptStyleESet;
+        m_promptStyle = PROMPT_STYLE_EDEFAULT;
+        m_promptStyleESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.INPUT_ELEMENT_UI_HINTS__PROMPT_STYLE,
+                    oldPromptStyle, PROMPT_STYLE_EDEFAULT, oldPromptStyleESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetPromptStyle()
+    {
+        return m_promptStyleESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @since 3.2 (DTP 1.7)
+     */
+    public int getAutoSuggestThreshold()
+    {
+        return m_autoSuggestThreshold;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @since 3.2 (DTP 1.7)
+     */
+    public void setAutoSuggestThreshold( int newAutoSuggestThreshold )
+    {
+        int oldAutoSuggestThreshold = m_autoSuggestThreshold;
+        m_autoSuggestThreshold = newAutoSuggestThreshold;
+        boolean oldAutoSuggestThresholdESet = m_autoSuggestThresholdESet;
+        m_autoSuggestThresholdESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.INPUT_ELEMENT_UI_HINTS__AUTO_SUGGEST_THRESHOLD,
+                    oldAutoSuggestThreshold, m_autoSuggestThreshold,
+                    !oldAutoSuggestThresholdESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @since 3.2 (DTP 1.7)
+     */
+    public void unsetAutoSuggestThreshold()
+    {
+        int oldAutoSuggestThreshold = m_autoSuggestThreshold;
+        boolean oldAutoSuggestThresholdESet = m_autoSuggestThresholdESet;
+        m_autoSuggestThreshold = AUTO_SUGGEST_THRESHOLD_EDEFAULT;
+        m_autoSuggestThresholdESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl(
+                    this,
+                    Notification.UNSET,
+                    DesignPackage.INPUT_ELEMENT_UI_HINTS__AUTO_SUGGEST_THRESHOLD,
+                    oldAutoSuggestThreshold, AUTO_SUGGEST_THRESHOLD_EDEFAULT,
+                    oldAutoSuggestThresholdESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @since 3.2 (DTP 1.7)
+     */
+    public boolean isSetAutoSuggestThreshold()
+    {
+        return m_autoSuggestThresholdESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.INPUT_ELEMENT_UI_HINTS__PROMPT_STYLE:
+            return getPromptStyle();
+        case DesignPackage.INPUT_ELEMENT_UI_HINTS__AUTO_SUGGEST_THRESHOLD:
+            return new Integer( getAutoSuggestThreshold() );
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.INPUT_ELEMENT_UI_HINTS__PROMPT_STYLE:
+            setPromptStyle( (InputPromptControlStyle) newValue );
+            return;
+        case DesignPackage.INPUT_ELEMENT_UI_HINTS__AUTO_SUGGEST_THRESHOLD:
+            setAutoSuggestThreshold( ((Integer) newValue).intValue() );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.INPUT_ELEMENT_UI_HINTS__PROMPT_STYLE:
+            unsetPromptStyle();
+            return;
+        case DesignPackage.INPUT_ELEMENT_UI_HINTS__AUTO_SUGGEST_THRESHOLD:
+            unsetAutoSuggestThreshold();
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.INPUT_ELEMENT_UI_HINTS__PROMPT_STYLE:
+            return isSetPromptStyle();
+        case DesignPackage.INPUT_ELEMENT_UI_HINTS__AUTO_SUGGEST_THRESHOLD:
+            return isSetAutoSuggestThreshold();
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (promptStyle: " ); //$NON-NLS-1$
+        if( m_promptStyleESet )
+            result.append( m_promptStyle );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ", autoSuggestThreshold: " ); //$NON-NLS-1$
+        if( m_autoSuggestThresholdESet )
+            result.append( m_autoSuggestThreshold );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //InputElementUIHintsImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/InputParameterAttributesImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/InputParameterAttributesImpl.java
new file mode 100644
index 0000000..3a2eb9f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/InputParameterAttributesImpl.java
@@ -0,0 +1,348 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: InputParameterAttributesImpl.java,v 1.3 2007/04/11 02:59:52 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.InputElementAttributes;
+import org.eclipse.datatools.connectivity.oda.design.InputParameterAttributes;
+import org.eclipse.datatools.connectivity.oda.design.InputParameterUIHints;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Input Parameter Attributes</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.InputParameterAttributesImpl#getElementAttributes <em>Element Attributes</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.InputParameterAttributesImpl#getUiHints <em>Ui Hints</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class InputParameterAttributesImpl extends EObjectImpl implements
+        InputParameterAttributes
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getElementAttributes() <em>Element Attributes</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getElementAttributes()
+     * @generated
+     * @ordered
+     */
+    protected InputElementAttributes m_elementAttributes;
+
+    /**
+     * The cached value of the '{@link #getUiHints() <em>Ui Hints</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getUiHints()
+     * @generated
+     * @ordered
+     */
+    protected InputParameterUIHints m_uiHints;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected InputParameterAttributesImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.INPUT_PARAMETER_ATTRIBUTES;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.InputParameterAttributes#setUiGroupPromptDisplayName(java.lang.String)
+     * @generated NOT
+     */
+    public void setUiGroupPromptDisplayName( String value )
+    {
+        // sets attribute in current UIHints, if exists;
+        // otherwise, creates a new one
+        InputParameterUIHints uiHints = getUiHints();
+        boolean hasNoUIHints = (uiHints == null);
+        if( hasNoUIHints )
+            uiHints = DesignFactory.eINSTANCE.createInputParameterUIHints();
+        uiHints.setGroupPromptDisplayName( value );
+
+        if( hasNoUIHints )
+            setUiHints( uiHints );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public InputElementAttributes getElementAttributes()
+    {
+        return m_elementAttributes;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetElementAttributes(
+            InputElementAttributes newElementAttributes, NotificationChain msgs )
+    {
+        InputElementAttributes oldElementAttributes = m_elementAttributes;
+        m_elementAttributes = newElementAttributes;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.INPUT_PARAMETER_ATTRIBUTES__ELEMENT_ATTRIBUTES,
+                    oldElementAttributes, newElementAttributes );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setElementAttributes(
+            InputElementAttributes newElementAttributes )
+    {
+        if( newElementAttributes != m_elementAttributes )
+        {
+            NotificationChain msgs = null;
+            if( m_elementAttributes != null )
+                msgs = ((InternalEObject) m_elementAttributes)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.INPUT_PARAMETER_ATTRIBUTES__ELEMENT_ATTRIBUTES,
+                                null, msgs );
+            if( newElementAttributes != null )
+                msgs = ((InternalEObject) newElementAttributes)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.INPUT_PARAMETER_ATTRIBUTES__ELEMENT_ATTRIBUTES,
+                                null, msgs );
+            msgs = basicSetElementAttributes( newElementAttributes, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.INPUT_PARAMETER_ATTRIBUTES__ELEMENT_ATTRIBUTES,
+                    newElementAttributes, newElementAttributes ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public InputParameterUIHints getUiHints()
+    {
+        return m_uiHints;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetUiHints( InputParameterUIHints newUiHints,
+            NotificationChain msgs )
+    {
+        InputParameterUIHints oldUiHints = m_uiHints;
+        m_uiHints = newUiHints;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.INPUT_PARAMETER_ATTRIBUTES__UI_HINTS,
+                    oldUiHints, newUiHints );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setUiHints( InputParameterUIHints newUiHints )
+    {
+        if( newUiHints != m_uiHints )
+        {
+            NotificationChain msgs = null;
+            if( m_uiHints != null )
+                msgs = ((InternalEObject) m_uiHints)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.INPUT_PARAMETER_ATTRIBUTES__UI_HINTS,
+                                null, msgs );
+            if( newUiHints != null )
+                msgs = ((InternalEObject) newUiHints)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.INPUT_PARAMETER_ATTRIBUTES__UI_HINTS,
+                                null, msgs );
+            msgs = basicSetUiHints( newUiHints, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.INPUT_PARAMETER_ATTRIBUTES__UI_HINTS,
+                    newUiHints, newUiHints ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.INPUT_PARAMETER_ATTRIBUTES__ELEMENT_ATTRIBUTES:
+            return basicSetElementAttributes( null, msgs );
+        case DesignPackage.INPUT_PARAMETER_ATTRIBUTES__UI_HINTS:
+            return basicSetUiHints( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.INPUT_PARAMETER_ATTRIBUTES__ELEMENT_ATTRIBUTES:
+            return getElementAttributes();
+        case DesignPackage.INPUT_PARAMETER_ATTRIBUTES__UI_HINTS:
+            return getUiHints();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.INPUT_PARAMETER_ATTRIBUTES__ELEMENT_ATTRIBUTES:
+            setElementAttributes( (InputElementAttributes) newValue );
+            return;
+        case DesignPackage.INPUT_PARAMETER_ATTRIBUTES__UI_HINTS:
+            setUiHints( (InputParameterUIHints) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.INPUT_PARAMETER_ATTRIBUTES__ELEMENT_ATTRIBUTES:
+            setElementAttributes( (InputElementAttributes) null );
+            return;
+        case DesignPackage.INPUT_PARAMETER_ATTRIBUTES__UI_HINTS:
+            setUiHints( (InputParameterUIHints) null );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.INPUT_PARAMETER_ATTRIBUTES__ELEMENT_ATTRIBUTES:
+            return m_elementAttributes != null;
+        case DesignPackage.INPUT_PARAMETER_ATTRIBUTES__UI_HINTS:
+            return m_uiHints != null;
+        }
+        return super.eIsSet( featureID );
+    }
+
+} //InputParameterAttributesImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/InputParameterUIHintsImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/InputParameterUIHintsImpl.java
new file mode 100644
index 0000000..bf70937
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/InputParameterUIHintsImpl.java
@@ -0,0 +1,243 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: InputParameterUIHintsImpl.java,v 1.4 2010/02/17 02:20:38 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.InputParameterUIHints;
+import org.eclipse.datatools.connectivity.oda.design.util.DesignUtil;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Input Parameter UI Hints</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.InputParameterUIHintsImpl#getGroupPromptDisplayName <em>Group Prompt Display Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class InputParameterUIHintsImpl extends EObjectImpl implements
+        InputParameterUIHints
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The default value of the '{@link #getGroupPromptDisplayName() <em>Group Prompt Display Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getGroupPromptDisplayName()
+     * @generated
+     * @ordered
+     */
+    protected static final String GROUP_PROMPT_DISPLAY_NAME_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getGroupPromptDisplayName() <em>Group Prompt Display Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getGroupPromptDisplayName()
+     * @generated
+     * @ordered
+     */
+    protected String m_groupPromptDisplayName = GROUP_PROMPT_DISPLAY_NAME_EDEFAULT;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected InputParameterUIHintsImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.INPUT_PARAMETER_UI_HINTS;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.InputParameterUIHints#getGroupPromptDisplayName()
+     * @generated NOT
+     */
+    public String getGroupPromptDisplayName()
+    {
+        return DesignUtil.getDefaultResourceString( getGroupPromptDisplayNameGen() );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected String getGroupPromptDisplayNameGen()
+    {
+        return m_groupPromptDisplayName;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.InputParameterUIHints#setGroupPromptDisplayName(java.lang.String)
+     * @generated NOT
+     */
+    public void setGroupPromptDisplayName( String newGroupPromptDisplayName )
+    {
+        String newAttrValue = 
+            DesignUtil.addDefaultToResourceAttribute( newGroupPromptDisplayName, getGroupPromptDisplayNameGen() );
+        setGroupPromptDisplayNameGen( newAttrValue );
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void setGroupPromptDisplayNameGen( String newGroupPromptDisplayName )
+    {
+        String oldGroupPromptDisplayName = m_groupPromptDisplayName;
+        m_groupPromptDisplayName = newGroupPromptDisplayName;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.INPUT_PARAMETER_UI_HINTS__GROUP_PROMPT_DISPLAY_NAME,
+                    oldGroupPromptDisplayName, m_groupPromptDisplayName ) );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.InputParameterUIHints#getGroupPromptDisplayNameKey()
+     * @generated NOT
+     */
+    public String getGroupPromptDisplayNameKey()
+    {
+        return DesignUtil.getResourceKey( getGroupPromptDisplayNameGen() );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.InputParameterUIHints#setGroupPromptDisplayNameKey(java.lang.String)
+     * @generated NOT
+     */
+    public void setGroupPromptDisplayNameKey( String newGroupPromptDisplayNameKey )
+    {
+        String newAttrValue = 
+            DesignUtil.addKeyToResourceAttribute( newGroupPromptDisplayNameKey, getGroupPromptDisplayNameGen() );
+        setGroupPromptDisplayNameGen( newAttrValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.INPUT_PARAMETER_UI_HINTS__GROUP_PROMPT_DISPLAY_NAME:
+            return getGroupPromptDisplayNameGen();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.INPUT_PARAMETER_UI_HINTS__GROUP_PROMPT_DISPLAY_NAME:
+            setGroupPromptDisplayNameGen( (String) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.INPUT_PARAMETER_UI_HINTS__GROUP_PROMPT_DISPLAY_NAME:
+            setGroupPromptDisplayNameGen( GROUP_PROMPT_DISPLAY_NAME_EDEFAULT );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.INPUT_PARAMETER_UI_HINTS__GROUP_PROMPT_DISPLAY_NAME:
+            return GROUP_PROMPT_DISPLAY_NAME_EDEFAULT == null ? m_groupPromptDisplayName != null
+                    : !GROUP_PROMPT_DISPLAY_NAME_EDEFAULT
+                            .equals( m_groupPromptDisplayName );
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (groupPromptDisplayName: " ); //$NON-NLS-1$
+        result.append( m_groupPromptDisplayName );
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //InputParameterUIHintsImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/LocaleImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/LocaleImpl.java
new file mode 100644
index 0000000..a3ebc98
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/LocaleImpl.java
@@ -0,0 +1,442 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: LocaleImpl.java,v 1.3 2007/04/11 02:59:52 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.Locale;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import com.ibm.icu.util.ULocale;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Locale</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.LocaleImpl#getLanguage <em>Language</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.LocaleImpl#getCountry <em>Country</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.LocaleImpl#getVariant <em>Variant</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LocaleImpl extends EObjectImpl implements Locale
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The default value of the '{@link #getLanguage() <em>Language</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getLanguage()
+     * @generated
+     * @ordered
+     */
+    protected static final String LANGUAGE_EDEFAULT = "en"; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getLanguage() <em>Language</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getLanguage()
+     * @generated
+     * @ordered
+     */
+    protected String m_language = LANGUAGE_EDEFAULT;
+
+    /**
+     * This is true if the Language attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_languageESet;
+
+    /**
+     * The default value of the '{@link #getCountry() <em>Country</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getCountry()
+     * @generated
+     * @ordered
+     */
+    protected static final String COUNTRY_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getCountry() <em>Country</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getCountry()
+     * @generated
+     * @ordered
+     */
+    protected String m_country = COUNTRY_EDEFAULT;
+
+    /**
+     * The default value of the '{@link #getVariant() <em>Variant</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getVariant()
+     * @generated
+     * @ordered
+     */
+    protected static final String VARIANT_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getVariant() <em>Variant</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getVariant()
+     * @generated
+     * @ordered
+     */
+    protected String m_variant = VARIANT_EDEFAULT;
+
+    protected static final String EMPTY_STRING = ""; //$NON-NLS-1$
+
+    protected static final String UNDERBAR = "_"; //$NON-NLS-1$
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected LocaleImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.LOCALE;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.Locale#getLocale()
+     * @generated NOT
+     */
+    public ULocale getLocale()
+    {
+        // if none is explicitly set, or the required language is missing,
+        // returns JVM locale default
+        if( !hasLanguage() )
+            return ULocale.getDefault();
+
+        return new ULocale( getLanguageGen(), toNonNullString( getCountry() ),
+                toNonNullString( getVariant() ) );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.Locale#setLocale(ULocale)
+     * @generated NOT
+     */
+    public void setLocale( ULocale locale )
+    {
+        // util Locale does not return null attribute
+        if( locale.getLanguage().length() == 0 )
+            unsetLanguage();
+        else
+            setLanguage( locale.getLanguage() );
+
+        if( locale.getCountry().length() == 0 )
+            setCountry( COUNTRY_EDEFAULT );
+        else
+            setCountry( locale.getCountry() );
+
+        if( locale.getVariant().length() == 0 )
+            setVariant( VARIANT_EDEFAULT );
+        else
+            setVariant( locale.getVariant() );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.Locale#toLanguageCountryString()
+     */
+    public String toLanguageCountryString()
+    {
+        // gets the util Locale, which could be the JVM default
+        ULocale theLocale = getLocale();
+
+        String strValue = theLocale.getLanguage();
+        if( theLocale.getCountry().length() != 0 )
+        {
+            strValue += UNDERBAR + theLocale.getCountry();
+        }
+        return strValue;
+    }
+
+    /* 
+     * General utility method to convert a null String object 
+     * to an empty string.
+     */
+    private String toNonNullString( String strValue )
+    {
+        if( strValue == null )
+            return EMPTY_STRING;
+        return strValue;
+    }
+
+    private boolean hasLanguage()
+    {
+        return (isSetLanguage() && getLanguageGen() != null && getLanguageGen()
+                .length() != 0);
+    }
+
+    /** 
+     * Extends generated method to return JVM default language
+     * if none is explicitly set.
+     * @see org.eclipse.datatools.connectivity.oda.design.Locale#getLanguage()
+     * @generated NOT
+     */
+    public String getLanguage()
+    {
+        return getLocale().getLanguage();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getLanguageGen()
+    {
+        return m_language;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setLanguage( String newLanguage )
+    {
+        String oldLanguage = m_language;
+        m_language = newLanguage;
+        boolean oldLanguageESet = m_languageESet;
+        m_languageESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.LOCALE__LANGUAGE, oldLanguage, m_language,
+                    !oldLanguageESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetLanguage()
+    {
+        String oldLanguage = m_language;
+        boolean oldLanguageESet = m_languageESet;
+        m_language = LANGUAGE_EDEFAULT;
+        m_languageESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.LOCALE__LANGUAGE, oldLanguage,
+                    LANGUAGE_EDEFAULT, oldLanguageESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetLanguage()
+    {
+        return m_languageESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getCountry()
+    {
+        return m_country;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setCountry( String newCountry )
+    {
+        String oldCountry = m_country;
+        m_country = newCountry;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.LOCALE__COUNTRY, oldCountry, m_country ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getVariant()
+    {
+        return m_variant;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setVariant( String newVariant )
+    {
+        String oldVariant = m_variant;
+        m_variant = newVariant;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.LOCALE__VARIANT, oldVariant, m_variant ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.LOCALE__LANGUAGE:
+            return getLanguage();
+        case DesignPackage.LOCALE__COUNTRY:
+            return getCountry();
+        case DesignPackage.LOCALE__VARIANT:
+            return getVariant();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.LOCALE__LANGUAGE:
+            setLanguage( (String) newValue );
+            return;
+        case DesignPackage.LOCALE__COUNTRY:
+            setCountry( (String) newValue );
+            return;
+        case DesignPackage.LOCALE__VARIANT:
+            setVariant( (String) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.LOCALE__LANGUAGE:
+            unsetLanguage();
+            return;
+        case DesignPackage.LOCALE__COUNTRY:
+            setCountry( COUNTRY_EDEFAULT );
+            return;
+        case DesignPackage.LOCALE__VARIANT:
+            setVariant( VARIANT_EDEFAULT );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.LOCALE__LANGUAGE:
+            return isSetLanguage();
+        case DesignPackage.LOCALE__COUNTRY:
+            return COUNTRY_EDEFAULT == null ? m_country != null
+                    : !COUNTRY_EDEFAULT.equals( m_country );
+        case DesignPackage.LOCALE__VARIANT:
+            return VARIANT_EDEFAULT == null ? m_variant != null
+                    : !VARIANT_EDEFAULT.equals( m_variant );
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (language: " ); //$NON-NLS-1$
+        if( m_languageESet )
+            result.append( m_language );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ", country: " ); //$NON-NLS-1$
+        result.append( m_country );
+        result.append( ", variant: " ); //$NON-NLS-1$
+        result.append( m_variant );
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //LocaleImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/NameValuePairImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/NameValuePairImpl.java
new file mode 100644
index 0000000..f917948
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/NameValuePairImpl.java
@@ -0,0 +1,255 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: NameValuePairImpl.java,v 1.2 2007/04/11 02:59:52 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.NameValuePair;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Name Value Pair</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.NameValuePairImpl#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.NameValuePairImpl#getValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class NameValuePairImpl extends EObjectImpl implements NameValuePair
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getName()
+     * @generated
+     * @ordered
+     */
+    protected static final String NAME_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getName()
+     * @generated
+     * @ordered
+     */
+    protected String m_name = NAME_EDEFAULT;
+
+    /**
+     * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getValue()
+     * @generated
+     * @ordered
+     */
+    protected static final String VALUE_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getValue()
+     * @generated
+     * @ordered
+     */
+    protected String m_value = VALUE_EDEFAULT;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected NameValuePairImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.NAME_VALUE_PAIR;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getName()
+    {
+        return m_name;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setName( String newName )
+    {
+        String oldName = m_name;
+        m_name = newName;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.NAME_VALUE_PAIR__NAME, oldName, m_name ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getValue()
+    {
+        return m_value;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setValue( String newValue )
+    {
+        String oldValue = m_value;
+        m_value = newValue;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.NAME_VALUE_PAIR__VALUE, oldValue, m_value ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.NAME_VALUE_PAIR__NAME:
+            return getName();
+        case DesignPackage.NAME_VALUE_PAIR__VALUE:
+            return getValue();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.NAME_VALUE_PAIR__NAME:
+            setName( (String) newValue );
+            return;
+        case DesignPackage.NAME_VALUE_PAIR__VALUE:
+            setValue( (String) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.NAME_VALUE_PAIR__NAME:
+            setName( NAME_EDEFAULT );
+            return;
+        case DesignPackage.NAME_VALUE_PAIR__VALUE:
+            setValue( VALUE_EDEFAULT );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.NAME_VALUE_PAIR__NAME:
+            return NAME_EDEFAULT == null ? m_name != null : !NAME_EDEFAULT
+                    .equals( m_name );
+        case DesignPackage.NAME_VALUE_PAIR__VALUE:
+            return VALUE_EDEFAULT == null ? m_value != null : !VALUE_EDEFAULT
+                    .equals( m_value );
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (name: " ); //$NON-NLS-1$
+        result.append( m_name );
+        result.append( ", value: " ); //$NON-NLS-1$
+        result.append( m_value );
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //NameValuePairImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/NotExpressionImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/NotExpressionImpl.java
new file mode 100644
index 0000000..0aaee65
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/NotExpressionImpl.java
@@ -0,0 +1,246 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: NotExpressionImpl.java,v 1.1 2009/01/30 00:23:57 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.FilterExpression;
+import org.eclipse.datatools.connectivity.oda.design.NotExpression;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Not Expression</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.NotExpressionImpl#getNegatingExpression <em>Negating Expression</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ * @since 3.3 (DTP 1.8)
+ */
+public class NotExpressionImpl extends FilterExpressionImpl implements
+        NotExpression
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getNegatingExpression() <em>Negating Expression</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getNegatingExpression()
+     * @generated
+     * @ordered
+     */
+    protected FilterExpression m_negatingExpression;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected NotExpressionImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.NOT_EXPRESSION;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public FilterExpression getNegatingExpression()
+    {
+        return m_negatingExpression;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetNegatingExpression(
+            FilterExpression newNegatingExpression, NotificationChain msgs )
+    {
+        FilterExpression oldNegatingExpression = m_negatingExpression;
+        m_negatingExpression = newNegatingExpression;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.NOT_EXPRESSION__NEGATING_EXPRESSION,
+                    oldNegatingExpression, newNegatingExpression );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setNegatingExpression( FilterExpression newNegatingExpression )
+    {
+        if( newNegatingExpression != m_negatingExpression )
+        {
+            NotificationChain msgs = null;
+            if( m_negatingExpression != null )
+                msgs = ((InternalEObject) m_negatingExpression)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.NOT_EXPRESSION__NEGATING_EXPRESSION,
+                                null, msgs );
+            if( newNegatingExpression != null )
+                msgs = ((InternalEObject) newNegatingExpression)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.NOT_EXPRESSION__NEGATING_EXPRESSION,
+                                null, msgs );
+            msgs = basicSetNegatingExpression( newNegatingExpression, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.NOT_EXPRESSION__NEGATING_EXPRESSION,
+                    newNegatingExpression, newNegatingExpression ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.NOT_EXPRESSION__NEGATING_EXPRESSION:
+            return basicSetNegatingExpression( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.NOT_EXPRESSION__NEGATING_EXPRESSION:
+            return getNegatingExpression();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.NOT_EXPRESSION__NEGATING_EXPRESSION:
+            setNegatingExpression( (FilterExpression) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.NOT_EXPRESSION__NEGATING_EXPRESSION:
+            setNegatingExpression( (FilterExpression) null );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.NOT_EXPRESSION__NEGATING_EXPRESSION:
+            return m_negatingExpression != null;
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.FilterExpressionImpl#isNegatable()
+     * @generated NOT
+     */
+    @Override
+    public boolean isNegatable()
+    {
+        return true;
+    }
+
+} //NotExpressionImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/OdaDesignSessionImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/OdaDesignSessionImpl.java
new file mode 100644
index 0000000..7bd4f70
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/OdaDesignSessionImpl.java
@@ -0,0 +1,450 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: OdaDesignSessionImpl.java,v 1.8 2007/04/11 09:18:37 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DataAccessDesign;
+import org.eclipse.datatools.connectivity.oda.design.DataSetDesign;
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest;
+import org.eclipse.datatools.connectivity.oda.design.DesignSessionResponse;
+import org.eclipse.datatools.connectivity.oda.design.OdaDesignSession;
+import org.eclipse.datatools.connectivity.oda.design.SessionStatus;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Oda Design Session</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.OdaDesignSessionImpl#getRequest <em>Request</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.OdaDesignSessionImpl#getResponse <em>Response</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class OdaDesignSessionImpl extends EObjectImpl implements
+        OdaDesignSession
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getRequest() <em>Request</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRequest()
+     * @generated
+     * @ordered
+     */
+    protected DesignSessionRequest m_request;
+
+    /**
+     * The cached value of the '{@link #getResponse() <em>Response</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getResponse()
+     * @generated
+     * @ordered
+     */
+    protected DesignSessionResponse m_response;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected OdaDesignSessionImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.ODA_DESIGN_SESSION;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.OdaDesignSession#setNewRequest(org.eclipse.datatools.connectivity.oda.design.DataSourceDesign)
+     * @generated NOT
+     */
+    public void setNewRequest( DataSourceDesign dataSourceDesign )
+    {
+        DesignSessionRequest newRequest = DesignFactory.eINSTANCE
+                .createDesignSessionRequest();
+        newRequest.setNewDataAccessDesign( dataSourceDesign );
+
+        setRequest( newRequest );
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.OdaDesignSession#setNewRequest(org.eclipse.datatools.connectivity.oda.design.DataSetDesign)
+     * @generated NOT
+     */
+    public void setNewRequest( DataSetDesign dataSetDesign )
+    {
+        DesignSessionRequest newRequest = DesignFactory.eINSTANCE
+                .createDesignSessionRequest();
+        newRequest.setNewDataAccessDesign( dataSetDesign );
+
+        setRequest( newRequest );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.OdaDesignSession#setNewResponse(boolean, org.eclipse.datatools.connectivity.oda.design.DataSourceDesign)
+     * @generated NOT
+     */
+    public void setNewResponse( boolean isSessionOk,
+            DataSourceDesign dataSourceDesign )
+    {
+        DesignSessionResponse newResponse = DesignFactory.eINSTANCE
+                .createDesignSessionResponse();
+
+        if( isSessionOk )
+            newResponse.setSessionStatus( SessionStatus.OK_LITERAL );
+        else
+            newResponse.setSessionStatus( SessionStatus.ERROR_LITERAL );
+
+        newResponse.setNewDataAccessDesign( dataSourceDesign );
+
+        setResponse( newResponse );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.OdaDesignSession#setNewResponse(boolean, org.eclipse.datatools.connectivity.oda.design.DataSetDesign)
+     */
+    public void setNewResponse( boolean isSessionOk, DataSetDesign dataSetDesign )
+    {
+        DesignSessionResponse newResponse = DesignFactory.eINSTANCE
+                .createDesignSessionResponse();
+
+        if( isSessionOk )
+            newResponse.setSessionStatus( SessionStatus.OK_LITERAL );
+        else
+            newResponse.setSessionStatus( SessionStatus.ERROR_LITERAL );
+
+        DataAccessDesign newDataAccess = DesignFactory.eINSTANCE
+                .createDataAccessDesign();
+        newDataAccess.setDataSetDesign( dataSetDesign );
+        newResponse.setDataAccessDesign( newDataAccess );
+
+        setResponse( newResponse );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.OdaDesignSession#setResponseInCancelledState()
+     * @generated NOT
+     */
+    public void setResponseInCancelledState()
+    {
+        DesignSessionResponse newResponse = DesignFactory.eINSTANCE
+                .createDesignSessionResponse();
+        newResponse.setSessionStatus( SessionStatus.USER_CANCELLED_LITERAL );
+        setResponse( newResponse );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.OdaDesignSession#getRequestDataSourceDesign()
+     * @generated NOT
+     */
+    public DataSourceDesign getRequestDataSourceDesign()
+    {
+        if( getRequest() == null )
+            return null;
+
+        return getRequest().getDataSourceDesign();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.OdaDesignSession#getRequestDataSetDesign()
+     * @generated NOT
+     */
+    public DataSetDesign getRequestDataSetDesign()
+    {
+        if( getRequest() == null )
+            return null;
+
+        return getRequest().getDataSetDesign();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.OdaDesignSession#getResponseDataSourceDesign()
+     * @generated NOT
+     */
+    public DataSourceDesign getResponseDataSourceDesign()
+    {
+        if( getResponse() == null )
+            return null;
+
+        return getResponse().getDataSourceDesign();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.OdaDesignSession#getResponseDataSetDesign()
+     * @generated NOT
+     */
+    public DataSetDesign getResponseDataSetDesign()
+    {
+        if( getResponse() == null )
+            return null;
+
+        return getResponse().getDataSetDesign();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DesignSessionRequest getRequest()
+    {
+        return m_request;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetRequest( DesignSessionRequest newRequest,
+            NotificationChain msgs )
+    {
+        DesignSessionRequest oldRequest = m_request;
+        m_request = newRequest;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.ODA_DESIGN_SESSION__REQUEST, oldRequest,
+                    newRequest );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setRequest( DesignSessionRequest newRequest )
+    {
+        if( newRequest != m_request )
+        {
+            NotificationChain msgs = null;
+            if( m_request != null )
+                msgs = ((InternalEObject) m_request).eInverseRemove( this,
+                        EOPPOSITE_FEATURE_BASE
+                                - DesignPackage.ODA_DESIGN_SESSION__REQUEST,
+                        null, msgs );
+            if( newRequest != null )
+                msgs = ((InternalEObject) newRequest).eInverseAdd( this,
+                        EOPPOSITE_FEATURE_BASE
+                                - DesignPackage.ODA_DESIGN_SESSION__REQUEST,
+                        null, msgs );
+            msgs = basicSetRequest( newRequest, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.ODA_DESIGN_SESSION__REQUEST, newRequest,
+                    newRequest ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DesignSessionResponse getResponse()
+    {
+        return m_response;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetResponse(
+            DesignSessionResponse newResponse, NotificationChain msgs )
+    {
+        DesignSessionResponse oldResponse = m_response;
+        m_response = newResponse;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.ODA_DESIGN_SESSION__RESPONSE, oldResponse,
+                    newResponse );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setResponse( DesignSessionResponse newResponse )
+    {
+        if( newResponse != m_response )
+        {
+            NotificationChain msgs = null;
+            if( m_response != null )
+                msgs = ((InternalEObject) m_response).eInverseRemove( this,
+                        EOPPOSITE_FEATURE_BASE
+                                - DesignPackage.ODA_DESIGN_SESSION__RESPONSE,
+                        null, msgs );
+            if( newResponse != null )
+                msgs = ((InternalEObject) newResponse).eInverseAdd( this,
+                        EOPPOSITE_FEATURE_BASE
+                                - DesignPackage.ODA_DESIGN_SESSION__RESPONSE,
+                        null, msgs );
+            msgs = basicSetResponse( newResponse, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.ODA_DESIGN_SESSION__RESPONSE, newResponse,
+                    newResponse ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.ODA_DESIGN_SESSION__REQUEST:
+            return basicSetRequest( null, msgs );
+        case DesignPackage.ODA_DESIGN_SESSION__RESPONSE:
+            return basicSetResponse( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.ODA_DESIGN_SESSION__REQUEST:
+            return getRequest();
+        case DesignPackage.ODA_DESIGN_SESSION__RESPONSE:
+            return getResponse();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.ODA_DESIGN_SESSION__REQUEST:
+            setRequest( (DesignSessionRequest) newValue );
+            return;
+        case DesignPackage.ODA_DESIGN_SESSION__RESPONSE:
+            setResponse( (DesignSessionResponse) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.ODA_DESIGN_SESSION__REQUEST:
+            setRequest( (DesignSessionRequest) null );
+            return;
+        case DesignPackage.ODA_DESIGN_SESSION__RESPONSE:
+            setResponse( (DesignSessionResponse) null );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.ODA_DESIGN_SESSION__REQUEST:
+            return m_request != null;
+        case DesignPackage.ODA_DESIGN_SESSION__RESPONSE:
+            return m_response != null;
+        }
+        return super.eIsSet( featureID );
+    }
+
+} //OdaDesignSessionImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/OrExpressionImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/OrExpressionImpl.java
new file mode 100644
index 0000000..376b364
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/OrExpressionImpl.java
@@ -0,0 +1,74 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: OrExpressionImpl.java,v 1.1 2009/01/30 00:23:57 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.OrExpression;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Or Expression</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ * @since 3.3 (DTP 1.8)
+ */
+public class OrExpressionImpl extends CompositeFilterExpressionImpl implements
+        OrExpression
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected OrExpressionImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.OR_EXPRESSION;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.impl.FilterExpressionImpl#isNegatable()
+     * @generated NOT
+     */
+    @Override
+    public boolean isNegatable()
+    {
+        return true;
+    }
+
+} //OrExpressionImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/OutputElementAttributesImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/OutputElementAttributesImpl.java
new file mode 100644
index 0000000..7cf1765
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/OutputElementAttributesImpl.java
@@ -0,0 +1,458 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: OutputElementAttributesImpl.java,v 1.5 2010/02/17 02:20:38 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes;
+import org.eclipse.datatools.connectivity.oda.design.ValueFormatHints;
+import org.eclipse.datatools.connectivity.oda.design.util.DesignUtil;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Output Element Attributes</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.OutputElementAttributesImpl#getLabel <em>Label</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.OutputElementAttributesImpl#getFormattingHints <em>Formatting Hints</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.OutputElementAttributesImpl#getHelpText <em>Help Text</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class OutputElementAttributesImpl extends EObjectImpl implements
+        OutputElementAttributes
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The default value of the '{@link #getLabel() <em>Label</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getLabel()
+     * @generated
+     * @ordered
+     */
+    protected static final String LABEL_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getLabel() <em>Label</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getLabel()
+     * @generated
+     * @ordered
+     */
+    protected String m_label = LABEL_EDEFAULT;
+
+    /**
+     * The cached value of the '{@link #getFormattingHints() <em>Formatting Hints</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getFormattingHints()
+     * @generated
+     * @ordered
+     */
+    protected ValueFormatHints m_formattingHints;
+
+    /**
+     * The default value of the '{@link #getHelpText() <em>Help Text</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getHelpText()
+     * @generated
+     * @ordered
+     */
+    protected static final String HELP_TEXT_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getHelpText() <em>Help Text</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getHelpText()
+     * @generated
+     * @ordered
+     */
+    protected String m_helpText = HELP_TEXT_EDEFAULT;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected OutputElementAttributesImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.OUTPUT_ELEMENT_ATTRIBUTES;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes#getLabel()
+     * @generated NOT
+     */
+    public String getLabel()
+    {
+        return DesignUtil.getDefaultResourceString( getLabelGen() );
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected String getLabelGen()
+    {
+        return m_label;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes#setLabel(java.lang.String)
+     * @generated NOT
+     */
+    public void setLabel( String newLabel )
+    {
+        String newAttrValue = DesignUtil.addDefaultToResourceAttribute( newLabel, getLabelGen() );
+        setLabelGen( newAttrValue );
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void setLabelGen( String newLabel )
+    {
+        String oldLabel = m_label;
+        m_label = newLabel;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.OUTPUT_ELEMENT_ATTRIBUTES__LABEL, oldLabel,
+                    m_label ) );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes#getLabelKey()
+     * @generated NOT
+     */
+    public String getLabelKey()
+    {
+        return DesignUtil.getResourceKey( getLabelGen() );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes#setLabelKey(java.lang.String)
+     * @generated NOT
+     */
+    public void setLabelKey( String newLabelKey )
+    {
+        String newAttrValue = DesignUtil.addKeyToResourceAttribute( newLabelKey, getLabelGen() );
+        setLabelGen( newAttrValue );
+    }
+
+    /**
+     * Returns a non-null ValueFormatHints.
+     * If none is defined, returns one with default values.
+     * @generated NOT
+     */
+    public ValueFormatHints getFormattingHints()
+    {
+        if( getFormattingHintsGen() != null )
+            return getFormattingHintsGen();
+
+        return DesignFactory.eINSTANCE.createValueFormatHints();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ValueFormatHints getFormattingHintsGen()
+    {
+        return m_formattingHints;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetFormattingHints(
+            ValueFormatHints newFormattingHints, NotificationChain msgs )
+    {
+        ValueFormatHints oldFormattingHints = m_formattingHints;
+        m_formattingHints = newFormattingHints;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.OUTPUT_ELEMENT_ATTRIBUTES__FORMATTING_HINTS,
+                    oldFormattingHints, newFormattingHints );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setFormattingHints( ValueFormatHints newFormattingHints )
+    {
+        if( newFormattingHints != m_formattingHints )
+        {
+            NotificationChain msgs = null;
+            if( m_formattingHints != null )
+                msgs = ((InternalEObject) m_formattingHints)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.OUTPUT_ELEMENT_ATTRIBUTES__FORMATTING_HINTS,
+                                null, msgs );
+            if( newFormattingHints != null )
+                msgs = ((InternalEObject) newFormattingHints)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.OUTPUT_ELEMENT_ATTRIBUTES__FORMATTING_HINTS,
+                                null, msgs );
+            msgs = basicSetFormattingHints( newFormattingHints, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.OUTPUT_ELEMENT_ATTRIBUTES__FORMATTING_HINTS,
+                    newFormattingHints, newFormattingHints ) );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes#getHelpText()
+     * @generated NOT
+     */
+    public String getHelpText()
+    {
+        return DesignUtil.getDefaultResourceString( getHelpTextGen() );
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected String getHelpTextGen()
+    {
+        return m_helpText;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes#setHelpText(java.lang.String)
+     * @generated NOT
+     */
+    public void setHelpText( String newHelpText )
+    {
+        String newAttrValue = DesignUtil.addDefaultToResourceAttribute( newHelpText, getHelpTextGen() );
+        setHelpTextGen( newAttrValue );
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void setHelpTextGen( String newHelpText )
+    {
+        String oldHelpText = m_helpText;
+        m_helpText = newHelpText;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.OUTPUT_ELEMENT_ATTRIBUTES__HELP_TEXT,
+                    oldHelpText, m_helpText ) );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes#getHelpTextKey()
+     * @generated NOT
+     */
+    public String getHelpTextKey()
+    {
+        return DesignUtil.getResourceKey( getHelpTextGen() );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes#setHelpTextKey(java.lang.String)
+     * @generated NOT
+     */
+    public void setHelpTextKey( String newHelpTextKey )
+    {
+        String newAttrValue = DesignUtil.addKeyToResourceAttribute( newHelpTextKey, getHelpTextGen() );
+        setHelpTextGen( newAttrValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.OUTPUT_ELEMENT_ATTRIBUTES__FORMATTING_HINTS:
+            return basicSetFormattingHints( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.OUTPUT_ELEMENT_ATTRIBUTES__LABEL:
+            return getLabelGen();
+        case DesignPackage.OUTPUT_ELEMENT_ATTRIBUTES__FORMATTING_HINTS:
+            return getFormattingHints();
+        case DesignPackage.OUTPUT_ELEMENT_ATTRIBUTES__HELP_TEXT:
+            return getHelpTextGen();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.OUTPUT_ELEMENT_ATTRIBUTES__LABEL:
+            setLabelGen( (String) newValue );
+            return;
+        case DesignPackage.OUTPUT_ELEMENT_ATTRIBUTES__FORMATTING_HINTS:
+            setFormattingHints( (ValueFormatHints) newValue );
+            return;
+        case DesignPackage.OUTPUT_ELEMENT_ATTRIBUTES__HELP_TEXT:
+            setHelpTextGen( (String) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.OUTPUT_ELEMENT_ATTRIBUTES__LABEL:
+            setLabelGen( LABEL_EDEFAULT );
+            return;
+        case DesignPackage.OUTPUT_ELEMENT_ATTRIBUTES__FORMATTING_HINTS:
+            setFormattingHints( (ValueFormatHints) null );
+            return;
+        case DesignPackage.OUTPUT_ELEMENT_ATTRIBUTES__HELP_TEXT:
+            setHelpTextGen( HELP_TEXT_EDEFAULT );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.OUTPUT_ELEMENT_ATTRIBUTES__LABEL:
+            return LABEL_EDEFAULT == null ? m_label != null : !LABEL_EDEFAULT
+                    .equals( m_label );
+        case DesignPackage.OUTPUT_ELEMENT_ATTRIBUTES__FORMATTING_HINTS:
+            return m_formattingHints != null;
+        case DesignPackage.OUTPUT_ELEMENT_ATTRIBUTES__HELP_TEXT:
+            return HELP_TEXT_EDEFAULT == null ? m_helpText != null
+                    : !HELP_TEXT_EDEFAULT.equals( m_helpText );
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (label: " ); //$NON-NLS-1$
+        result.append( m_label );
+        result.append( ", helpText: " ); //$NON-NLS-1$
+        result.append( m_helpText );
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //OutputElementAttributesImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ParameterDefinitionImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ParameterDefinitionImpl.java
new file mode 100644
index 0000000..40314e3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ParameterDefinitionImpl.java
@@ -0,0 +1,750 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ParameterDefinitionImpl.java,v 1.5 2009/04/14 02:13:18 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DataElementAttributes;
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.InputElementAttributes;
+import org.eclipse.datatools.connectivity.oda.design.InputParameterAttributes;
+import org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes;
+import org.eclipse.datatools.connectivity.oda.design.ParameterDefinition;
+import org.eclipse.datatools.connectivity.oda.design.ParameterFields;
+import org.eclipse.datatools.connectivity.oda.design.ParameterMode;
+import org.eclipse.datatools.connectivity.oda.design.StaticValues;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Parameter Definition</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ParameterDefinitionImpl#getInOutMode <em>In Out Mode</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ParameterDefinitionImpl#getAttributes <em>Attributes</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ParameterDefinitionImpl#getInputAttributes <em>Input Attributes</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ParameterDefinitionImpl#getOutputUsageHints <em>Output Usage Hints</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ParameterDefinitionImpl#getFields <em>Fields</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ParameterDefinitionImpl extends EObjectImpl implements
+        ParameterDefinition
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The default value of the '{@link #getInOutMode() <em>In Out Mode</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getInOutMode()
+     * @generated
+     * @ordered
+     */
+    protected static final ParameterMode IN_OUT_MODE_EDEFAULT = ParameterMode.IN_LITERAL;
+
+    /**
+     * The cached value of the '{@link #getInOutMode() <em>In Out Mode</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getInOutMode()
+     * @generated
+     * @ordered
+     */
+    protected ParameterMode m_inOutMode = IN_OUT_MODE_EDEFAULT;
+
+    /**
+     * This is true if the In Out Mode attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_inOutModeESet;
+
+    /**
+     * The cached value of the '{@link #getAttributes() <em>Attributes</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getAttributes()
+     * @generated
+     * @ordered
+     */
+    protected DataElementAttributes m_attributes;
+
+    /**
+     * The cached value of the '{@link #getInputAttributes() <em>Input Attributes</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getInputAttributes()
+     * @generated
+     * @ordered
+     */
+    protected InputParameterAttributes m_inputAttributes;
+
+    /**
+     * The cached value of the '{@link #getOutputUsageHints() <em>Output Usage Hints</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getOutputUsageHints()
+     * @generated
+     * @ordered
+     */
+    protected OutputElementAttributes m_outputUsageHints;
+
+    /**
+     * The cached value of the '{@link #getFields() <em>Fields</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getFields()
+     * @generated
+     * @ordered
+     */
+    protected ParameterFields m_fields;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected ParameterDefinitionImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.PARAMETER_DEFINITION;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#isInput()
+     * @generated NOT
+     */
+    public boolean isInput()
+    {
+        int paramMode = getInOutMode().getValue();
+        return (paramMode == ParameterMode.IN || paramMode == ParameterMode.IN_OUT);
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#isOutput()
+     * @generated NOT
+     */
+    public boolean isOutput()
+    {
+        int paramMode = getInOutMode().getValue();
+        return (paramMode == ParameterMode.OUT || paramMode == ParameterMode.IN_OUT);
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#isScalar()
+     * @generated NOT
+     */
+    public boolean isScalar()
+    {
+        return (getFields() == null || getFields().getFieldCollection()
+                .isEmpty());
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#getDefaultScalarValue()
+     * @generated NOT
+     */
+    public String getDefaultScalarValue()
+    {
+        if( !isInput() || !isScalar() )
+            return null;
+        if( getDefaultValueCount() == 0 )
+            return null;
+
+        Object firstValue = getDefaultValues().getValues().get( 0 );
+        return (firstValue != null) ? firstValue.toString() : null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#setDefaultScalarValue(java.lang.String)
+     * @generated NOT
+     */
+    public void setDefaultScalarValue( String value )
+    {
+        if( !isInput() || !isScalar() )
+            return; // ignore specified value
+
+        InputElementAttributes inputAttributes = getEditableInputElementAttributes();
+        assert (inputAttributes != null);
+
+        // use deprecated method that takes care of migrating value to a collection
+        inputAttributes.setDefaultScalarValue( value );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#getDefaultValues()
+     * @generated NOT
+     */
+    public StaticValues getDefaultValues()
+    {
+        if( !isInput() )
+            return null;
+        if( getInputAttributes() == null
+                || getInputAttributes().getElementAttributes() == null )
+            return null;
+
+        return getInputAttributes().getElementAttributes().getDefaultValues();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#getDefaultValueCount()
+     * @generated NOT
+     */
+    public int getDefaultValueCount()
+    {
+        StaticValues defaultValues = getDefaultValues();
+        return (defaultValues == null) ? 0 : defaultValues.count();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#addDefaultValue(java.lang.Object)
+     * @generated NOT
+     */
+    public void addDefaultValue( Object aValue )
+    {
+        if( !isInput() )
+            return; // ignore specified value
+
+        InputElementAttributes inputAttributes = getEditableInputElementAttributes();
+
+        inputAttributes.addDefaultValue( aValue );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterDefinition#getEditableInputElementAttributes()
+     * @generated NOT
+     */
+    public InputElementAttributes getEditableInputElementAttributes()
+    {
+        InputParameterAttributes paramAttributes = getInputAttributes();
+        if( paramAttributes == null )
+        {
+            paramAttributes = DesignFactory.eINSTANCE
+                    .createInputParameterAttributes();
+            setInputAttributes( paramAttributes );
+        }
+
+        InputElementAttributes inputAttributes = paramAttributes
+                .getElementAttributes();
+        if( inputAttributes == null )
+        {
+            inputAttributes = DesignFactory.eINSTANCE
+                    .createInputElementAttributes();
+            paramAttributes.setElementAttributes( inputAttributes );
+        }
+        return inputAttributes;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ParameterMode getInOutMode()
+    {
+        return m_inOutMode;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setInOutMode( ParameterMode newInOutMode )
+    {
+        ParameterMode oldInOutMode = m_inOutMode;
+        m_inOutMode = newInOutMode == null ? IN_OUT_MODE_EDEFAULT
+                : newInOutMode;
+        boolean oldInOutModeESet = m_inOutModeESet;
+        m_inOutModeESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.PARAMETER_DEFINITION__IN_OUT_MODE,
+                    oldInOutMode, m_inOutMode, !oldInOutModeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetInOutMode()
+    {
+        ParameterMode oldInOutMode = m_inOutMode;
+        boolean oldInOutModeESet = m_inOutModeESet;
+        m_inOutMode = IN_OUT_MODE_EDEFAULT;
+        m_inOutModeESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.PARAMETER_DEFINITION__IN_OUT_MODE,
+                    oldInOutMode, IN_OUT_MODE_EDEFAULT, oldInOutModeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetInOutMode()
+    {
+        return m_inOutModeESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DataElementAttributes getAttributes()
+    {
+        return m_attributes;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetAttributes(
+            DataElementAttributes newAttributes, NotificationChain msgs )
+    {
+        DataElementAttributes oldAttributes = m_attributes;
+        m_attributes = newAttributes;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.PARAMETER_DEFINITION__ATTRIBUTES,
+                    oldAttributes, newAttributes );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setAttributes( DataElementAttributes newAttributes )
+    {
+        if( newAttributes != m_attributes )
+        {
+            NotificationChain msgs = null;
+            if( m_attributes != null )
+                msgs = ((InternalEObject) m_attributes)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.PARAMETER_DEFINITION__ATTRIBUTES,
+                                null, msgs );
+            if( newAttributes != null )
+                msgs = ((InternalEObject) newAttributes)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.PARAMETER_DEFINITION__ATTRIBUTES,
+                                null, msgs );
+            msgs = basicSetAttributes( newAttributes, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.PARAMETER_DEFINITION__ATTRIBUTES,
+                    newAttributes, newAttributes ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public InputParameterAttributes getInputAttributes()
+    {
+        return m_inputAttributes;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetInputAttributes(
+            InputParameterAttributes newInputAttributes, NotificationChain msgs )
+    {
+        InputParameterAttributes oldInputAttributes = m_inputAttributes;
+        m_inputAttributes = newInputAttributes;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.PARAMETER_DEFINITION__INPUT_ATTRIBUTES,
+                    oldInputAttributes, newInputAttributes );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setInputAttributes( InputParameterAttributes newInputAttributes )
+    {
+        if( newInputAttributes != m_inputAttributes )
+        {
+            NotificationChain msgs = null;
+            if( m_inputAttributes != null )
+                msgs = ((InternalEObject) m_inputAttributes)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.PARAMETER_DEFINITION__INPUT_ATTRIBUTES,
+                                null, msgs );
+            if( newInputAttributes != null )
+                msgs = ((InternalEObject) newInputAttributes)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.PARAMETER_DEFINITION__INPUT_ATTRIBUTES,
+                                null, msgs );
+            msgs = basicSetInputAttributes( newInputAttributes, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.PARAMETER_DEFINITION__INPUT_ATTRIBUTES,
+                    newInputAttributes, newInputAttributes ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public OutputElementAttributes getOutputUsageHints()
+    {
+        return m_outputUsageHints;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetOutputUsageHints(
+            OutputElementAttributes newOutputUsageHints, NotificationChain msgs )
+    {
+        OutputElementAttributes oldOutputUsageHints = m_outputUsageHints;
+        m_outputUsageHints = newOutputUsageHints;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.PARAMETER_DEFINITION__OUTPUT_USAGE_HINTS,
+                    oldOutputUsageHints, newOutputUsageHints );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setOutputUsageHints( OutputElementAttributes newOutputUsageHints )
+    {
+        if( newOutputUsageHints != m_outputUsageHints )
+        {
+            NotificationChain msgs = null;
+            if( m_outputUsageHints != null )
+                msgs = ((InternalEObject) m_outputUsageHints)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.PARAMETER_DEFINITION__OUTPUT_USAGE_HINTS,
+                                null, msgs );
+            if( newOutputUsageHints != null )
+                msgs = ((InternalEObject) newOutputUsageHints)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.PARAMETER_DEFINITION__OUTPUT_USAGE_HINTS,
+                                null, msgs );
+            msgs = basicSetOutputUsageHints( newOutputUsageHints, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.PARAMETER_DEFINITION__OUTPUT_USAGE_HINTS,
+                    newOutputUsageHints, newOutputUsageHints ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ParameterFields getFields()
+    {
+        return m_fields;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetFields( ParameterFields newFields,
+            NotificationChain msgs )
+    {
+        ParameterFields oldFields = m_fields;
+        m_fields = newFields;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.PARAMETER_DEFINITION__FIELDS, oldFields,
+                    newFields );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setFields( ParameterFields newFields )
+    {
+        if( newFields != m_fields )
+        {
+            NotificationChain msgs = null;
+            if( m_fields != null )
+                msgs = ((InternalEObject) m_fields).eInverseRemove( this,
+                        EOPPOSITE_FEATURE_BASE
+                                - DesignPackage.PARAMETER_DEFINITION__FIELDS,
+                        null, msgs );
+            if( newFields != null )
+                msgs = ((InternalEObject) newFields).eInverseAdd( this,
+                        EOPPOSITE_FEATURE_BASE
+                                - DesignPackage.PARAMETER_DEFINITION__FIELDS,
+                        null, msgs );
+            msgs = basicSetFields( newFields, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.PARAMETER_DEFINITION__FIELDS, newFields,
+                    newFields ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PARAMETER_DEFINITION__ATTRIBUTES:
+            return basicSetAttributes( null, msgs );
+        case DesignPackage.PARAMETER_DEFINITION__INPUT_ATTRIBUTES:
+            return basicSetInputAttributes( null, msgs );
+        case DesignPackage.PARAMETER_DEFINITION__OUTPUT_USAGE_HINTS:
+            return basicSetOutputUsageHints( null, msgs );
+        case DesignPackage.PARAMETER_DEFINITION__FIELDS:
+            return basicSetFields( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PARAMETER_DEFINITION__IN_OUT_MODE:
+            return getInOutMode();
+        case DesignPackage.PARAMETER_DEFINITION__ATTRIBUTES:
+            return getAttributes();
+        case DesignPackage.PARAMETER_DEFINITION__INPUT_ATTRIBUTES:
+            return getInputAttributes();
+        case DesignPackage.PARAMETER_DEFINITION__OUTPUT_USAGE_HINTS:
+            return getOutputUsageHints();
+        case DesignPackage.PARAMETER_DEFINITION__FIELDS:
+            return getFields();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PARAMETER_DEFINITION__IN_OUT_MODE:
+            setInOutMode( (ParameterMode) newValue );
+            return;
+        case DesignPackage.PARAMETER_DEFINITION__ATTRIBUTES:
+            setAttributes( (DataElementAttributes) newValue );
+            return;
+        case DesignPackage.PARAMETER_DEFINITION__INPUT_ATTRIBUTES:
+            setInputAttributes( (InputParameterAttributes) newValue );
+            return;
+        case DesignPackage.PARAMETER_DEFINITION__OUTPUT_USAGE_HINTS:
+            setOutputUsageHints( (OutputElementAttributes) newValue );
+            return;
+        case DesignPackage.PARAMETER_DEFINITION__FIELDS:
+            setFields( (ParameterFields) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PARAMETER_DEFINITION__IN_OUT_MODE:
+            unsetInOutMode();
+            return;
+        case DesignPackage.PARAMETER_DEFINITION__ATTRIBUTES:
+            setAttributes( (DataElementAttributes) null );
+            return;
+        case DesignPackage.PARAMETER_DEFINITION__INPUT_ATTRIBUTES:
+            setInputAttributes( (InputParameterAttributes) null );
+            return;
+        case DesignPackage.PARAMETER_DEFINITION__OUTPUT_USAGE_HINTS:
+            setOutputUsageHints( (OutputElementAttributes) null );
+            return;
+        case DesignPackage.PARAMETER_DEFINITION__FIELDS:
+            setFields( (ParameterFields) null );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PARAMETER_DEFINITION__IN_OUT_MODE:
+            return isSetInOutMode();
+        case DesignPackage.PARAMETER_DEFINITION__ATTRIBUTES:
+            return m_attributes != null;
+        case DesignPackage.PARAMETER_DEFINITION__INPUT_ATTRIBUTES:
+            return m_inputAttributes != null;
+        case DesignPackage.PARAMETER_DEFINITION__OUTPUT_USAGE_HINTS:
+            return m_outputUsageHints != null;
+        case DesignPackage.PARAMETER_DEFINITION__FIELDS:
+            return m_fields != null;
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (inOutMode: " ); //$NON-NLS-1$
+        if( m_inOutModeESet )
+            result.append( m_inOutMode );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //ParameterDefinitionImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ParameterFieldDefinitionImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ParameterFieldDefinitionImpl.java
new file mode 100644
index 0000000..7479a10
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ParameterFieldDefinitionImpl.java
@@ -0,0 +1,451 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ParameterFieldDefinitionImpl.java,v 1.2 2007/04/11 02:59:52 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DataElementAttributes;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.InputElementAttributes;
+import org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes;
+import org.eclipse.datatools.connectivity.oda.design.ParameterDefinition;
+import org.eclipse.datatools.connectivity.oda.design.ParameterFieldDefinition;
+import org.eclipse.datatools.connectivity.oda.design.ParameterFields;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Parameter Field Definition</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ParameterFieldDefinitionImpl#getAttributes <em>Attributes</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ParameterFieldDefinitionImpl#getInputAttributes <em>Input Attributes</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ParameterFieldDefinitionImpl#getOutputUsageHints <em>Output Usage Hints</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ParameterFieldDefinitionImpl extends EObjectImpl implements
+        ParameterFieldDefinition
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getAttributes() <em>Attributes</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getAttributes()
+     * @generated
+     * @ordered
+     */
+    protected DataElementAttributes m_attributes;
+
+    /**
+     * The cached value of the '{@link #getInputAttributes() <em>Input Attributes</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getInputAttributes()
+     * @generated
+     * @ordered
+     */
+    protected InputElementAttributes m_inputAttributes;
+
+    /**
+     * The cached value of the '{@link #getOutputUsageHints() <em>Output Usage Hints</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getOutputUsageHints()
+     * @generated
+     * @ordered
+     */
+    protected OutputElementAttributes m_outputUsageHints;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected ParameterFieldDefinitionImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.PARAMETER_FIELD_DEFINITION;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterFieldDefinition#isInput()
+     */
+    public boolean isInput()
+    {
+        // derived from parent's in/out mode
+        return getParent().isInput();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterFieldDefinition#isOutput()
+     */
+    public boolean isOutput()
+    {
+        // derived from parent's in/out mode
+        return getParent().isOutput();
+    }
+
+    private ParameterDefinition getParent()
+    {
+        EObject myContainer = eContainer();
+        assert (myContainer instanceof ParameterFields);
+
+        EObject topLevelParam = myContainer.eContainer();
+        assert (topLevelParam instanceof ParameterDefinition);
+        return (ParameterDefinition) topLevelParam;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DataElementAttributes getAttributes()
+    {
+        return m_attributes;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetAttributes(
+            DataElementAttributes newAttributes, NotificationChain msgs )
+    {
+        DataElementAttributes oldAttributes = m_attributes;
+        m_attributes = newAttributes;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.PARAMETER_FIELD_DEFINITION__ATTRIBUTES,
+                    oldAttributes, newAttributes );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setAttributes( DataElementAttributes newAttributes )
+    {
+        if( newAttributes != m_attributes )
+        {
+            NotificationChain msgs = null;
+            if( m_attributes != null )
+                msgs = ((InternalEObject) m_attributes)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.PARAMETER_FIELD_DEFINITION__ATTRIBUTES,
+                                null, msgs );
+            if( newAttributes != null )
+                msgs = ((InternalEObject) newAttributes)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.PARAMETER_FIELD_DEFINITION__ATTRIBUTES,
+                                null, msgs );
+            msgs = basicSetAttributes( newAttributes, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.PARAMETER_FIELD_DEFINITION__ATTRIBUTES,
+                    newAttributes, newAttributes ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public InputElementAttributes getInputAttributes()
+    {
+        return m_inputAttributes;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetInputAttributes(
+            InputElementAttributes newInputAttributes, NotificationChain msgs )
+    {
+        InputElementAttributes oldInputAttributes = m_inputAttributes;
+        m_inputAttributes = newInputAttributes;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.PARAMETER_FIELD_DEFINITION__INPUT_ATTRIBUTES,
+                    oldInputAttributes, newInputAttributes );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setInputAttributes( InputElementAttributes newInputAttributes )
+    {
+        if( newInputAttributes != m_inputAttributes )
+        {
+            NotificationChain msgs = null;
+            if( m_inputAttributes != null )
+                msgs = ((InternalEObject) m_inputAttributes)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.PARAMETER_FIELD_DEFINITION__INPUT_ATTRIBUTES,
+                                null, msgs );
+            if( newInputAttributes != null )
+                msgs = ((InternalEObject) newInputAttributes)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.PARAMETER_FIELD_DEFINITION__INPUT_ATTRIBUTES,
+                                null, msgs );
+            msgs = basicSetInputAttributes( newInputAttributes, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.PARAMETER_FIELD_DEFINITION__INPUT_ATTRIBUTES,
+                    newInputAttributes, newInputAttributes ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public OutputElementAttributes getOutputUsageHints()
+    {
+        return m_outputUsageHints;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetOutputUsageHints(
+            OutputElementAttributes newOutputUsageHints, NotificationChain msgs )
+    {
+        OutputElementAttributes oldOutputUsageHints = m_outputUsageHints;
+        m_outputUsageHints = newOutputUsageHints;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.PARAMETER_FIELD_DEFINITION__OUTPUT_USAGE_HINTS,
+                    oldOutputUsageHints, newOutputUsageHints );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setOutputUsageHints( OutputElementAttributes newOutputUsageHints )
+    {
+        if( newOutputUsageHints != m_outputUsageHints )
+        {
+            NotificationChain msgs = null;
+            if( m_outputUsageHints != null )
+                msgs = ((InternalEObject) m_outputUsageHints)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.PARAMETER_FIELD_DEFINITION__OUTPUT_USAGE_HINTS,
+                                null, msgs );
+            if( newOutputUsageHints != null )
+                msgs = ((InternalEObject) newOutputUsageHints)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.PARAMETER_FIELD_DEFINITION__OUTPUT_USAGE_HINTS,
+                                null, msgs );
+            msgs = basicSetOutputUsageHints( newOutputUsageHints, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.PARAMETER_FIELD_DEFINITION__OUTPUT_USAGE_HINTS,
+                    newOutputUsageHints, newOutputUsageHints ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PARAMETER_FIELD_DEFINITION__ATTRIBUTES:
+            return basicSetAttributes( null, msgs );
+        case DesignPackage.PARAMETER_FIELD_DEFINITION__INPUT_ATTRIBUTES:
+            return basicSetInputAttributes( null, msgs );
+        case DesignPackage.PARAMETER_FIELD_DEFINITION__OUTPUT_USAGE_HINTS:
+            return basicSetOutputUsageHints( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PARAMETER_FIELD_DEFINITION__ATTRIBUTES:
+            return getAttributes();
+        case DesignPackage.PARAMETER_FIELD_DEFINITION__INPUT_ATTRIBUTES:
+            return getInputAttributes();
+        case DesignPackage.PARAMETER_FIELD_DEFINITION__OUTPUT_USAGE_HINTS:
+            return getOutputUsageHints();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PARAMETER_FIELD_DEFINITION__ATTRIBUTES:
+            setAttributes( (DataElementAttributes) newValue );
+            return;
+        case DesignPackage.PARAMETER_FIELD_DEFINITION__INPUT_ATTRIBUTES:
+            setInputAttributes( (InputElementAttributes) newValue );
+            return;
+        case DesignPackage.PARAMETER_FIELD_DEFINITION__OUTPUT_USAGE_HINTS:
+            setOutputUsageHints( (OutputElementAttributes) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PARAMETER_FIELD_DEFINITION__ATTRIBUTES:
+            setAttributes( (DataElementAttributes) null );
+            return;
+        case DesignPackage.PARAMETER_FIELD_DEFINITION__INPUT_ATTRIBUTES:
+            setInputAttributes( (InputElementAttributes) null );
+            return;
+        case DesignPackage.PARAMETER_FIELD_DEFINITION__OUTPUT_USAGE_HINTS:
+            setOutputUsageHints( (OutputElementAttributes) null );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PARAMETER_FIELD_DEFINITION__ATTRIBUTES:
+            return m_attributes != null;
+        case DesignPackage.PARAMETER_FIELD_DEFINITION__INPUT_ATTRIBUTES:
+            return m_inputAttributes != null;
+        case DesignPackage.PARAMETER_FIELD_DEFINITION__OUTPUT_USAGE_HINTS:
+            return m_outputUsageHints != null;
+        }
+        return super.eIsSet( featureID );
+    }
+
+} //ParameterFieldDefinitionImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ParameterFieldsImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ParameterFieldsImpl.java
new file mode 100644
index 0000000..92ce4fb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ParameterFieldsImpl.java
@@ -0,0 +1,187 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ParameterFieldsImpl.java,v 1.2 2007/04/11 02:59:52 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.ParameterFieldDefinition;
+import org.eclipse.datatools.connectivity.oda.design.ParameterFields;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Parameter Fields</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ParameterFieldsImpl#getFieldCollection <em>Field Collection</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ParameterFieldsImpl extends EObjectImpl implements ParameterFields
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getFieldCollection() <em>Field Collection</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getFieldCollection()
+     * @generated
+     * @ordered
+     */
+    protected EList<ParameterFieldDefinition> m_fieldCollection;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected ParameterFieldsImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.PARAMETER_FIELDS;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EList<ParameterFieldDefinition> getFieldCollection()
+    {
+        if( m_fieldCollection == null )
+        {
+            m_fieldCollection = new EObjectContainmentEList<ParameterFieldDefinition>(
+                    ParameterFieldDefinition.class, this,
+                    DesignPackage.PARAMETER_FIELDS__FIELD_COLLECTION );
+        }
+        return m_fieldCollection;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PARAMETER_FIELDS__FIELD_COLLECTION:
+            return ((InternalEList<?>) getFieldCollection()).basicRemove(
+                    otherEnd, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PARAMETER_FIELDS__FIELD_COLLECTION:
+            return getFieldCollection();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings("unchecked")
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PARAMETER_FIELDS__FIELD_COLLECTION:
+            getFieldCollection().clear();
+            getFieldCollection().addAll(
+                    (Collection<? extends ParameterFieldDefinition>) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PARAMETER_FIELDS__FIELD_COLLECTION:
+            getFieldCollection().clear();
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PARAMETER_FIELDS__FIELD_COLLECTION:
+            return m_fieldCollection != null && !m_fieldCollection.isEmpty();
+        }
+        return super.eIsSet( featureID );
+    }
+
+} //ParameterFieldsImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/PropertiesImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/PropertiesImpl.java
new file mode 100644
index 0000000..ca5d829
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/PropertiesImpl.java
@@ -0,0 +1,258 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: PropertiesImpl.java,v 1.6 2007/04/11 02:59:52 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.Properties;
+import org.eclipse.datatools.connectivity.oda.design.Property;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Properties</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.PropertiesImpl#getProperties <em>Properties</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class PropertiesImpl extends EObjectImpl implements Properties
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getProperties() <em>Properties</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getProperties()
+     * @generated
+     * @ordered
+     */
+    protected EList<Property> m_properties;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected PropertiesImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.PROPERTIES;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.Properties#findProperty(java.lang.String)
+     * @generated NOT
+     */
+    public Property findProperty( String propName )
+    {
+        if( isEmpty() )
+            return null;
+
+        Iterator<Property> iter = getProperties().iterator();
+        while( iter.hasNext() )
+        {
+            Property prop = iter.next();
+            if( propName.equalsIgnoreCase( prop.getName() ) )
+                return prop; // matching property name
+        }
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.Properties#getProperty(java.lang.String)
+     * @generated NOT
+     */
+    public String getProperty( String propName )
+    {
+        Property prop = findProperty( propName );
+        if( prop != null )
+            return prop.getValue();
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.Properties#setProperty(java.lang.String, java.lang.String)
+     * @generated NOT
+     */
+    public void setProperty( String propName, String propValue )
+    {
+        Property prop = findProperty( propName );
+        if( prop != null )
+        {
+            prop.setNameValue( propName, propValue );
+            return; // done
+        }
+
+        // no existing property with given name, add a new one
+        prop = DesignFactory.eINSTANCE.createProperty();
+        prop.setNameValue( propName, propValue );
+        getProperties().add( prop );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.Properties#unsetProperty(java.lang.String)
+     * @generated NOT
+     */
+    public void unsetProperty( String propName )
+    {
+        Property prop = findProperty( propName );
+        if( prop == null )
+            return; // done, nothing to remove
+        getProperties().remove( prop );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.Properties#isEmpty()
+     * @generated NOT
+     */
+    public boolean isEmpty()
+    {
+        return m_properties == null || m_properties.isEmpty();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EList<Property> getProperties()
+    {
+        if( m_properties == null )
+        {
+            m_properties = new EObjectContainmentEList<Property>(
+                    Property.class, this, DesignPackage.PROPERTIES__PROPERTIES );
+        }
+        return m_properties;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PROPERTIES__PROPERTIES:
+            return ((InternalEList<?>) getProperties()).basicRemove( otherEnd,
+                    msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PROPERTIES__PROPERTIES:
+            return getProperties();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings("unchecked")
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PROPERTIES__PROPERTIES:
+            getProperties().clear();
+            getProperties().addAll( (Collection<? extends Property>) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PROPERTIES__PROPERTIES:
+            getProperties().clear();
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PROPERTIES__PROPERTIES:
+            return m_properties != null && !m_properties.isEmpty();
+        }
+        return super.eIsSet( featureID );
+    }
+
+} //PropertiesImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/PropertyAttributesImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/PropertyAttributesImpl.java
new file mode 100644
index 0000000..519e7bb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/PropertyAttributesImpl.java
@@ -0,0 +1,449 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: PropertyAttributesImpl.java,v 1.4 2010/02/17 02:20:38 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.InputElementAttributes;
+import org.eclipse.datatools.connectivity.oda.design.PropertyAttributes;
+import org.eclipse.datatools.connectivity.oda.design.util.DesignUtil;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Property Attributes</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.PropertyAttributesImpl#getDisplayName <em>Display Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.PropertyAttributesImpl#getElementAttributes <em>Element Attributes</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.PropertyAttributesImpl#isDerivedMetaData <em>Derived Meta Data</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class PropertyAttributesImpl extends EObjectImpl implements
+        PropertyAttributes
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The default value of the '{@link #getDisplayName() <em>Display Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDisplayName()
+     * @generated
+     * @ordered
+     */
+    protected static final String DISPLAY_NAME_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getDisplayName() <em>Display Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDisplayName()
+     * @generated
+     * @ordered
+     */
+    protected String m_displayName = DISPLAY_NAME_EDEFAULT;
+
+    /**
+     * The cached value of the '{@link #getElementAttributes() <em>Element Attributes</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getElementAttributes()
+     * @generated
+     * @ordered
+     */
+    protected InputElementAttributes m_elementAttributes;
+
+    /**
+     * The default value of the '{@link #isDerivedMetaData() <em>Derived Meta Data</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isDerivedMetaData()
+     * @generated
+     * @ordered
+     */
+    protected static final boolean DERIVED_META_DATA_EDEFAULT = true;
+
+    /**
+     * The cached value of the '{@link #isDerivedMetaData() <em>Derived Meta Data</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isDerivedMetaData()
+     * @generated
+     * @ordered
+     */
+    protected boolean m_derivedMetaData = DERIVED_META_DATA_EDEFAULT;
+
+    /**
+     * This is true if the Derived Meta Data attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_derivedMetaDataESet;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected PropertyAttributesImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.PROPERTY_ATTRIBUTES;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.PropertyAttributes#getDisplayName()
+     * @generated NOT
+     */
+    public String getDisplayName()
+    {
+        return DesignUtil.getDefaultResourceString( getDisplayNameGen() );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected String getDisplayNameGen()
+    {
+        return m_displayName;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.PropertyAttributes#setDisplayName(java.lang.String)
+     * @generated NOT
+     */
+    public void setDisplayName( String newDisplayName )
+    {
+        String newAttrValue = DesignUtil.addDefaultToResourceAttribute( newDisplayName, getDisplayNameGen() );
+        setDisplayNameGen( newAttrValue );
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void setDisplayNameGen( String newDisplayName )
+    {
+        String oldDisplayName = m_displayName;
+        m_displayName = newDisplayName;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.PROPERTY_ATTRIBUTES__DISPLAY_NAME,
+                    oldDisplayName, m_displayName ) );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.PropertyAttributes#getDisplayNameKey()
+     * @generated NOT
+     */
+    public String getDisplayNameKey()
+    {
+        return DesignUtil.getResourceKey( getDisplayNameGen() );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.PropertyAttributes#setDisplayNameKey(java.lang.String)
+     * @generated NOT
+     */
+    public void setDisplayNameKey( String newDisplayNameKey )
+    {
+        String newAttrValue = DesignUtil.addKeyToResourceAttribute( newDisplayNameKey, getDisplayNameGen() );
+        setDisplayNameGen( newAttrValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public InputElementAttributes getElementAttributes()
+    {
+        return m_elementAttributes;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetElementAttributes(
+            InputElementAttributes newElementAttributes, NotificationChain msgs )
+    {
+        InputElementAttributes oldElementAttributes = m_elementAttributes;
+        m_elementAttributes = newElementAttributes;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.PROPERTY_ATTRIBUTES__ELEMENT_ATTRIBUTES,
+                    oldElementAttributes, newElementAttributes );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setElementAttributes(
+            InputElementAttributes newElementAttributes )
+    {
+        if( newElementAttributes != m_elementAttributes )
+        {
+            NotificationChain msgs = null;
+            if( m_elementAttributes != null )
+                msgs = ((InternalEObject) m_elementAttributes)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.PROPERTY_ATTRIBUTES__ELEMENT_ATTRIBUTES,
+                                null, msgs );
+            if( newElementAttributes != null )
+                msgs = ((InternalEObject) newElementAttributes)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.PROPERTY_ATTRIBUTES__ELEMENT_ATTRIBUTES,
+                                null, msgs );
+            msgs = basicSetElementAttributes( newElementAttributes, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.PROPERTY_ATTRIBUTES__ELEMENT_ATTRIBUTES,
+                    newElementAttributes, newElementAttributes ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isDerivedMetaData()
+    {
+        return m_derivedMetaData;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setDerivedMetaData( boolean newDerivedMetaData )
+    {
+        boolean oldDerivedMetaData = m_derivedMetaData;
+        m_derivedMetaData = newDerivedMetaData;
+        boolean oldDerivedMetaDataESet = m_derivedMetaDataESet;
+        m_derivedMetaDataESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.PROPERTY_ATTRIBUTES__DERIVED_META_DATA,
+                    oldDerivedMetaData, m_derivedMetaData,
+                    !oldDerivedMetaDataESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetDerivedMetaData()
+    {
+        boolean oldDerivedMetaData = m_derivedMetaData;
+        boolean oldDerivedMetaDataESet = m_derivedMetaDataESet;
+        m_derivedMetaData = DERIVED_META_DATA_EDEFAULT;
+        m_derivedMetaDataESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.PROPERTY_ATTRIBUTES__DERIVED_META_DATA,
+                    oldDerivedMetaData, DERIVED_META_DATA_EDEFAULT,
+                    oldDerivedMetaDataESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetDerivedMetaData()
+    {
+        return m_derivedMetaDataESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PROPERTY_ATTRIBUTES__ELEMENT_ATTRIBUTES:
+            return basicSetElementAttributes( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PROPERTY_ATTRIBUTES__DISPLAY_NAME:
+            return getDisplayNameGen();
+        case DesignPackage.PROPERTY_ATTRIBUTES__ELEMENT_ATTRIBUTES:
+            return getElementAttributes();
+        case DesignPackage.PROPERTY_ATTRIBUTES__DERIVED_META_DATA:
+            return isDerivedMetaData() ? Boolean.TRUE : Boolean.FALSE;
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PROPERTY_ATTRIBUTES__DISPLAY_NAME:
+            setDisplayNameGen( (String) newValue );
+            return;
+        case DesignPackage.PROPERTY_ATTRIBUTES__ELEMENT_ATTRIBUTES:
+            setElementAttributes( (InputElementAttributes) newValue );
+            return;
+        case DesignPackage.PROPERTY_ATTRIBUTES__DERIVED_META_DATA:
+            setDerivedMetaData( ((Boolean) newValue).booleanValue() );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PROPERTY_ATTRIBUTES__DISPLAY_NAME:
+            setDisplayNameGen( DISPLAY_NAME_EDEFAULT );
+            return;
+        case DesignPackage.PROPERTY_ATTRIBUTES__ELEMENT_ATTRIBUTES:
+            setElementAttributes( (InputElementAttributes) null );
+            return;
+        case DesignPackage.PROPERTY_ATTRIBUTES__DERIVED_META_DATA:
+            unsetDerivedMetaData();
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PROPERTY_ATTRIBUTES__DISPLAY_NAME:
+            return DISPLAY_NAME_EDEFAULT == null ? m_displayName != null
+                    : !DISPLAY_NAME_EDEFAULT.equals( m_displayName );
+        case DesignPackage.PROPERTY_ATTRIBUTES__ELEMENT_ATTRIBUTES:
+            return m_elementAttributes != null;
+        case DesignPackage.PROPERTY_ATTRIBUTES__DERIVED_META_DATA:
+            return isSetDerivedMetaData();
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (displayName: " ); //$NON-NLS-1$
+        result.append( m_displayName );
+        result.append( ", derivedMetaData: " ); //$NON-NLS-1$
+        if( m_derivedMetaDataESet )
+            result.append( m_derivedMetaData );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //PropertyAttributesImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/PropertyImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/PropertyImpl.java
new file mode 100644
index 0000000..8059158
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/PropertyImpl.java
@@ -0,0 +1,377 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: PropertyImpl.java,v 1.5 2007/04/11 02:59:52 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.NameValuePair;
+import org.eclipse.datatools.connectivity.oda.design.Property;
+import org.eclipse.datatools.connectivity.oda.design.PropertyAttributes;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Property</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.PropertyImpl#getNameValue <em>Name Value</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.PropertyImpl#getDesignAttributes <em>Design Attributes</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class PropertyImpl extends EObjectImpl implements Property
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getNameValue() <em>Name Value</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getNameValue()
+     * @generated
+     * @ordered
+     */
+    protected NameValuePair m_nameValue;
+
+    /**
+     * The cached value of the '{@link #getDesignAttributes() <em>Design Attributes</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDesignAttributes()
+     * @generated
+     * @ordered
+     */
+    protected PropertyAttributes m_designAttributes;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected PropertyImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.PROPERTY;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.Property#getName()
+     * @generated NOT
+     */
+    public String getName()
+    {
+        if( getNameValue() == null )
+            return null;
+        return getNameValue().getName();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.Property#getValue()
+     * @generated NOT
+     */
+    public String getValue()
+    {
+        if( getNameValue() == null )
+            return null;
+        return getNameValue().getValue();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.Property#setNameValue(java.lang.String, java.lang.String)
+     * @generated NOT
+     */
+    public void setNameValue( String name, String value )
+    {
+        NameValuePair newPair = DesignFactory.eINSTANCE.createNameValuePair();
+        newPair.setName( name );
+        newPair.setValue( value );
+
+        setNameValue( newPair );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NameValuePair getNameValue()
+    {
+        return m_nameValue;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetNameValue( NameValuePair newNameValue,
+            NotificationChain msgs )
+    {
+        NameValuePair oldNameValue = m_nameValue;
+        m_nameValue = newNameValue;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET, DesignPackage.PROPERTY__NAME_VALUE,
+                    oldNameValue, newNameValue );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setNameValue( NameValuePair newNameValue )
+    {
+        if( newNameValue != m_nameValue )
+        {
+            NotificationChain msgs = null;
+            if( m_nameValue != null )
+                msgs = ((InternalEObject) m_nameValue).eInverseRemove( this,
+                        EOPPOSITE_FEATURE_BASE
+                                - DesignPackage.PROPERTY__NAME_VALUE, null,
+                        msgs );
+            if( newNameValue != null )
+                msgs = ((InternalEObject) newNameValue).eInverseAdd( this,
+                        EOPPOSITE_FEATURE_BASE
+                                - DesignPackage.PROPERTY__NAME_VALUE, null,
+                        msgs );
+            msgs = basicSetNameValue( newNameValue, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.PROPERTY__NAME_VALUE, newNameValue,
+                    newNameValue ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public PropertyAttributes getDesignAttributes()
+    {
+        return m_designAttributes;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetDesignAttributes(
+            PropertyAttributes newDesignAttributes, NotificationChain msgs )
+    {
+        PropertyAttributes oldDesignAttributes = m_designAttributes;
+        m_designAttributes = newDesignAttributes;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.PROPERTY__DESIGN_ATTRIBUTES,
+                    oldDesignAttributes, newDesignAttributes );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setDesignAttributes( PropertyAttributes newDesignAttributes )
+    {
+        if( newDesignAttributes != m_designAttributes )
+        {
+            NotificationChain msgs = null;
+            if( m_designAttributes != null )
+                msgs = ((InternalEObject) m_designAttributes).eInverseRemove(
+                        this, EOPPOSITE_FEATURE_BASE
+                                - DesignPackage.PROPERTY__DESIGN_ATTRIBUTES,
+                        null, msgs );
+            if( newDesignAttributes != null )
+                msgs = ((InternalEObject) newDesignAttributes).eInverseAdd(
+                        this, EOPPOSITE_FEATURE_BASE
+                                - DesignPackage.PROPERTY__DESIGN_ATTRIBUTES,
+                        null, msgs );
+            msgs = basicSetDesignAttributes( newDesignAttributes, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.PROPERTY__DESIGN_ATTRIBUTES,
+                    newDesignAttributes, newDesignAttributes ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PROPERTY__NAME_VALUE:
+            return basicSetNameValue( null, msgs );
+        case DesignPackage.PROPERTY__DESIGN_ATTRIBUTES:
+            return basicSetDesignAttributes( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PROPERTY__NAME_VALUE:
+            return getNameValue();
+        case DesignPackage.PROPERTY__DESIGN_ATTRIBUTES:
+            return getDesignAttributes();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PROPERTY__NAME_VALUE:
+            setNameValue( (NameValuePair) newValue );
+            return;
+        case DesignPackage.PROPERTY__DESIGN_ATTRIBUTES:
+            setDesignAttributes( (PropertyAttributes) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PROPERTY__NAME_VALUE:
+            setNameValue( (NameValuePair) null );
+            return;
+        case DesignPackage.PROPERTY__DESIGN_ATTRIBUTES:
+            setDesignAttributes( (PropertyAttributes) null );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.PROPERTY__NAME_VALUE:
+            return m_nameValue != null;
+        case DesignPackage.PROPERTY__DESIGN_ATTRIBUTES:
+            return m_designAttributes != null;
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.Property#isEditable()
+     * @generated NOT
+     */
+    public boolean isEditable()
+    {
+        PropertyAttributes propAttrs = getDesignAttributes();
+        if( propAttrs == null || propAttrs.getElementAttributes() == null )
+            return true; // default state
+
+        return propAttrs.getElementAttributes().isEditable();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.Property#isMaskedValue()
+     * @generated NOT
+     */
+    public boolean isMaskedValue()
+    {
+        PropertyAttributes propAttrs = getDesignAttributes();
+        if( propAttrs == null || propAttrs.getElementAttributes() == null )
+            return false; // default state
+
+        return propAttrs.getElementAttributes().isMasksValue();
+    }
+
+} //PropertyImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ResourceIdentifiersImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ResourceIdentifiersImpl.java
new file mode 100644
index 0000000..4c825ab
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ResourceIdentifiersImpl.java
@@ -0,0 +1,332 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2008, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ResourceIdentifiersImpl.java,v 1.1 2008/07/23 04:12:27 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Resource Identifiers</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ResourceIdentifiersImpl#getApplResourceBaseURIString <em>Appl Resource Base URI String</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ResourceIdentifiersImpl#getDesignResourceBaseURIString <em>Design Resource Base URI String</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ * @since DTP 1.7
+ */
+public class ResourceIdentifiersImpl extends EObjectImpl implements
+        ResourceIdentifiers
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2008, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The default value of the '{@link #getApplResourceBaseURIString() <em>Appl Resource Base URI String</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getApplResourceBaseURIString()
+     * @generated
+     * @ordered
+     */
+    protected static final String APPL_RESOURCE_BASE_URI_STRING_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getApplResourceBaseURIString() <em>Appl Resource Base URI String</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getApplResourceBaseURIString()
+     * @generated
+     * @ordered
+     */
+    protected String m_applResourceBaseURIString = APPL_RESOURCE_BASE_URI_STRING_EDEFAULT;
+
+    /**
+     * The default value of the '{@link #getDesignResourceBaseURIString() <em>Design Resource Base URI String</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDesignResourceBaseURIString()
+     * @generated
+     * @ordered
+     */
+    protected static final String DESIGN_RESOURCE_BASE_URI_STRING_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getDesignResourceBaseURIString() <em>Design Resource Base URI String</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDesignResourceBaseURIString()
+     * @generated
+     * @ordered
+     */
+    protected String m_designResourceBaseURIString = DESIGN_RESOURCE_BASE_URI_STRING_EDEFAULT;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected ResourceIdentifiersImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.RESOURCE_IDENTIFIERS;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers#getApplResourceBaseURI()
+     * @generated NOT
+     */
+    public URI getApplResourceBaseURI()
+    {
+        String uriString = getApplResourceBaseURIString();
+        return convertToURI( uriString );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers#setApplResourceBaseURI(java.net.URI)
+     */
+    public void setApplResourceBaseURI( URI baseURI )
+    {
+        String baseURIString = (baseURI != null) ? baseURI.toString() : null;
+        setApplResourceBaseURIString( baseURIString );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getApplResourceBaseURIString()
+    {
+        return m_applResourceBaseURIString;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setApplResourceBaseURIString(
+            String newApplResourceBaseURIString )
+    {
+        String oldApplResourceBaseURIString = m_applResourceBaseURIString;
+        m_applResourceBaseURIString = newApplResourceBaseURIString;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.RESOURCE_IDENTIFIERS__APPL_RESOURCE_BASE_URI_STRING,
+                    oldApplResourceBaseURIString, m_applResourceBaseURIString ) );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers#getDesignResourceBaseURI()
+     * @generated NOT
+     */
+    public URI getDesignResourceBaseURI()
+    {
+        String uriString = getDesignResourceBaseURIString();
+        return convertToURI( uriString );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers#setDesignResourceBaseURI(java.net.URI)
+     */
+    public void setDesignResourceBaseURI( URI baseURI )
+    {
+        String baseURIString = (baseURI != null) ? baseURI.toString() : null;
+        setDesignResourceBaseURIString( baseURIString );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getDesignResourceBaseURIString()
+    {
+        return m_designResourceBaseURIString;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setDesignResourceBaseURIString(
+            String newDesignResourceBaseURIString )
+    {
+        String oldDesignResourceBaseURIString = m_designResourceBaseURIString;
+        m_designResourceBaseURIString = newDesignResourceBaseURIString;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl(
+                    this,
+                    Notification.SET,
+                    DesignPackage.RESOURCE_IDENTIFIERS__DESIGN_RESOURCE_BASE_URI_STRING,
+                    oldDesignResourceBaseURIString,
+                    m_designResourceBaseURIString ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.RESOURCE_IDENTIFIERS__APPL_RESOURCE_BASE_URI_STRING:
+            return getApplResourceBaseURIString();
+        case DesignPackage.RESOURCE_IDENTIFIERS__DESIGN_RESOURCE_BASE_URI_STRING:
+            return getDesignResourceBaseURIString();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.RESOURCE_IDENTIFIERS__APPL_RESOURCE_BASE_URI_STRING:
+            setApplResourceBaseURIString( (String) newValue );
+            return;
+        case DesignPackage.RESOURCE_IDENTIFIERS__DESIGN_RESOURCE_BASE_URI_STRING:
+            setDesignResourceBaseURIString( (String) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.RESOURCE_IDENTIFIERS__APPL_RESOURCE_BASE_URI_STRING:
+            setApplResourceBaseURIString( APPL_RESOURCE_BASE_URI_STRING_EDEFAULT );
+            return;
+        case DesignPackage.RESOURCE_IDENTIFIERS__DESIGN_RESOURCE_BASE_URI_STRING:
+            setDesignResourceBaseURIString( DESIGN_RESOURCE_BASE_URI_STRING_EDEFAULT );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.RESOURCE_IDENTIFIERS__APPL_RESOURCE_BASE_URI_STRING:
+            return APPL_RESOURCE_BASE_URI_STRING_EDEFAULT == null ? m_applResourceBaseURIString != null
+                    : !APPL_RESOURCE_BASE_URI_STRING_EDEFAULT
+                            .equals( m_applResourceBaseURIString );
+        case DesignPackage.RESOURCE_IDENTIFIERS__DESIGN_RESOURCE_BASE_URI_STRING:
+            return DESIGN_RESOURCE_BASE_URI_STRING_EDEFAULT == null ? m_designResourceBaseURIString != null
+                    : !DESIGN_RESOURCE_BASE_URI_STRING_EDEFAULT
+                            .equals( m_designResourceBaseURIString );
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (applResourceBaseURIString: " ); //$NON-NLS-1$
+        result.append( m_applResourceBaseURIString );
+        result.append( ", designResourceBaseURIString: " ); //$NON-NLS-1$
+        result.append( m_designResourceBaseURIString );
+        result.append( ')' );
+        return result.toString();
+    }
+
+    /**
+     * @generated NOT
+     */
+    private URI convertToURI( String uriString )
+    {
+        if( uriString == null )
+            return null;
+
+        try
+        {
+            return new URI( uriString );
+        }
+        catch( URISyntaxException ex )
+        {
+            ex.printStackTrace();
+        }
+
+        return null;
+    }
+
+} //ResourceIdentifiersImpl
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ResultSetColumnsImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ResultSetColumnsImpl.java
new file mode 100644
index 0000000..ed2038b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ResultSetColumnsImpl.java
@@ -0,0 +1,189 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ResultSetColumnsImpl.java,v 1.2 2007/04/11 02:59:52 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.oda.design.ColumnDefinition;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.ResultSetColumns;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Result Set Columns</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ResultSetColumnsImpl#getResultColumnDefinitions <em>Result Column Definitions</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ResultSetColumnsImpl extends EObjectImpl implements
+        ResultSetColumns
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getResultColumnDefinitions() <em>Result Column Definitions</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getResultColumnDefinitions()
+     * @generated
+     * @ordered
+     */
+    protected EList<ColumnDefinition> m_resultColumnDefinitions;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected ResultSetColumnsImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.RESULT_SET_COLUMNS;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EList<ColumnDefinition> getResultColumnDefinitions()
+    {
+        if( m_resultColumnDefinitions == null )
+        {
+            m_resultColumnDefinitions = new EObjectContainmentEList<ColumnDefinition>(
+                    ColumnDefinition.class, this,
+                    DesignPackage.RESULT_SET_COLUMNS__RESULT_COLUMN_DEFINITIONS );
+        }
+        return m_resultColumnDefinitions;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.RESULT_SET_COLUMNS__RESULT_COLUMN_DEFINITIONS:
+            return ((InternalEList<?>) getResultColumnDefinitions())
+                    .basicRemove( otherEnd, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.RESULT_SET_COLUMNS__RESULT_COLUMN_DEFINITIONS:
+            return getResultColumnDefinitions();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings("unchecked")
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.RESULT_SET_COLUMNS__RESULT_COLUMN_DEFINITIONS:
+            getResultColumnDefinitions().clear();
+            getResultColumnDefinitions().addAll(
+                    (Collection<? extends ColumnDefinition>) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.RESULT_SET_COLUMNS__RESULT_COLUMN_DEFINITIONS:
+            getResultColumnDefinitions().clear();
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.RESULT_SET_COLUMNS__RESULT_COLUMN_DEFINITIONS:
+            return m_resultColumnDefinitions != null
+                    && !m_resultColumnDefinitions.isEmpty();
+        }
+        return super.eIsSet( featureID );
+    }
+
+} //ResultSetColumnsImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ResultSetCriteriaImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ResultSetCriteriaImpl.java
new file mode 100644
index 0000000..7387aa2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ResultSetCriteriaImpl.java
@@ -0,0 +1,339 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ResultSetCriteriaImpl.java,v 1.1 2009/03/13 05:19:46 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.FilterExpression;
+import org.eclipse.datatools.connectivity.oda.design.ResultSetCriteria;
+import org.eclipse.datatools.connectivity.oda.design.SortKey;
+import org.eclipse.datatools.connectivity.oda.design.SortSpecification;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Result Set Criteria</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ResultSetCriteriaImpl#getFilterSpecification <em>Filter Specification</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ResultSetCriteriaImpl#getRowOrdering <em>Row Ordering</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ * @since 3.3 (DTP 1.8)
+ */
+public class ResultSetCriteriaImpl extends EObjectImpl implements
+        ResultSetCriteria
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getFilterSpecification() <em>Filter Specification</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getFilterSpecification()
+     * @generated
+     * @ordered
+     */
+    protected FilterExpression m_filterSpecification;
+
+    /**
+     * The cached value of the '{@link #getRowOrdering() <em>Row Ordering</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRowOrdering()
+     * @generated
+     * @ordered
+     */
+    protected SortSpecification m_rowOrdering;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected ResultSetCriteriaImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.RESULT_SET_CRITERIA;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public FilterExpression getFilterSpecification()
+    {
+        return m_filterSpecification;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetFilterSpecification(
+            FilterExpression newFilterSpecification, NotificationChain msgs )
+    {
+        FilterExpression oldFilterSpecification = m_filterSpecification;
+        m_filterSpecification = newFilterSpecification;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.RESULT_SET_CRITERIA__FILTER_SPECIFICATION,
+                    oldFilterSpecification, newFilterSpecification );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setFilterSpecification( FilterExpression newFilterSpecification )
+    {
+        if( newFilterSpecification != m_filterSpecification )
+        {
+            NotificationChain msgs = null;
+            if( m_filterSpecification != null )
+                msgs = ((InternalEObject) m_filterSpecification)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.RESULT_SET_CRITERIA__FILTER_SPECIFICATION,
+                                null, msgs );
+            if( newFilterSpecification != null )
+                msgs = ((InternalEObject) newFilterSpecification)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.RESULT_SET_CRITERIA__FILTER_SPECIFICATION,
+                                null, msgs );
+            msgs = basicSetFilterSpecification( newFilterSpecification, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.RESULT_SET_CRITERIA__FILTER_SPECIFICATION,
+                    newFilterSpecification, newFilterSpecification ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public SortSpecification getRowOrdering()
+    {
+        return m_rowOrdering;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetRowOrdering(
+            SortSpecification newRowOrdering, NotificationChain msgs )
+    {
+        SortSpecification oldRowOrdering = m_rowOrdering;
+        m_rowOrdering = newRowOrdering;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.RESULT_SET_CRITERIA__ROW_ORDERING,
+                    oldRowOrdering, newRowOrdering );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setRowOrdering( SortSpecification newRowOrdering )
+    {
+        if( newRowOrdering != m_rowOrdering )
+        {
+            NotificationChain msgs = null;
+            if( m_rowOrdering != null )
+                msgs = ((InternalEObject) m_rowOrdering)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.RESULT_SET_CRITERIA__ROW_ORDERING,
+                                null, msgs );
+            if( newRowOrdering != null )
+                msgs = ((InternalEObject) newRowOrdering)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.RESULT_SET_CRITERIA__ROW_ORDERING,
+                                null, msgs );
+            msgs = basicSetRowOrdering( newRowOrdering, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.RESULT_SET_CRITERIA__ROW_ORDERING,
+                    newRowOrdering, newRowOrdering ) );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ResultSetCriteria#addRowSortKey(org.eclipse.datatools.connectivity.oda.design.SortKey)
+     * @generated NOT
+     */
+    public void addRowSortKey( SortKey sortKey )
+    {
+        if( getRowOrdering() == null )
+            setRowOrdering( DesignFactory.eINSTANCE.createSortSpecification() );
+        getRowOrdering().getSortKeys().add( sortKey );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.RESULT_SET_CRITERIA__FILTER_SPECIFICATION:
+            return basicSetFilterSpecification( null, msgs );
+        case DesignPackage.RESULT_SET_CRITERIA__ROW_ORDERING:
+            return basicSetRowOrdering( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.RESULT_SET_CRITERIA__FILTER_SPECIFICATION:
+            return getFilterSpecification();
+        case DesignPackage.RESULT_SET_CRITERIA__ROW_ORDERING:
+            return getRowOrdering();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.RESULT_SET_CRITERIA__FILTER_SPECIFICATION:
+            setFilterSpecification( (FilterExpression) newValue );
+            return;
+        case DesignPackage.RESULT_SET_CRITERIA__ROW_ORDERING:
+            setRowOrdering( (SortSpecification) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.RESULT_SET_CRITERIA__FILTER_SPECIFICATION:
+            setFilterSpecification( (FilterExpression) null );
+            return;
+        case DesignPackage.RESULT_SET_CRITERIA__ROW_ORDERING:
+            setRowOrdering( (SortSpecification) null );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.RESULT_SET_CRITERIA__FILTER_SPECIFICATION:
+            return m_filterSpecification != null;
+        case DesignPackage.RESULT_SET_CRITERIA__ROW_ORDERING:
+            return m_rowOrdering != null;
+        }
+        return super.eIsSet( featureID );
+    }
+
+} //ResultSetCriteriaImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ResultSetDefinitionImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ResultSetDefinitionImpl.java
new file mode 100644
index 0000000..4fd821b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ResultSetDefinitionImpl.java
@@ -0,0 +1,411 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ResultSetDefinitionImpl.java,v 1.2 2007/04/11 02:59:52 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.ResultSetColumns;
+import org.eclipse.datatools.connectivity.oda.design.ResultSetCriteria;
+import org.eclipse.datatools.connectivity.oda.design.ResultSetDefinition;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Result Set Definition</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ResultSetDefinitionImpl#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ResultSetDefinitionImpl#getResultSetColumns <em>Result Set Columns</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ResultSetDefinitionImpl#getCriteria <em>Criteria</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ResultSetDefinitionImpl extends EObjectImpl implements
+        ResultSetDefinition
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getName()
+     * @generated
+     * @ordered
+     */
+    protected static final String NAME_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getName()
+     * @generated
+     * @ordered
+     */
+    protected String m_name = NAME_EDEFAULT;
+
+    /**
+     * The cached value of the '{@link #getResultSetColumns() <em>Result Set Columns</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getResultSetColumns()
+     * @generated
+     * @ordered
+     */
+    protected ResultSetColumns m_resultSetColumns;
+
+    /**
+     * The cached value of the '{@link #getCriteria() <em>Criteria</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getCriteria()
+     * @generated
+     * @ordered
+     */
+    protected ResultSetCriteria m_criteria;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected ResultSetDefinitionImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.RESULT_SET_DEFINITION;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getName()
+    {
+        return m_name;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setName( String newName )
+    {
+        String oldName = m_name;
+        m_name = newName;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.RESULT_SET_DEFINITION__NAME, oldName, m_name ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public ResultSetColumns getResultSetColumns()
+    {
+        return m_resultSetColumns;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetResultSetColumns(
+            ResultSetColumns newResultSetColumns, NotificationChain msgs )
+    {
+        ResultSetColumns oldResultSetColumns = m_resultSetColumns;
+        m_resultSetColumns = newResultSetColumns;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.RESULT_SET_DEFINITION__RESULT_SET_COLUMNS,
+                    oldResultSetColumns, newResultSetColumns );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setResultSetColumns( ResultSetColumns newResultSetColumns )
+    {
+        if( newResultSetColumns != m_resultSetColumns )
+        {
+            NotificationChain msgs = null;
+            if( m_resultSetColumns != null )
+                msgs = ((InternalEObject) m_resultSetColumns)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.RESULT_SET_DEFINITION__RESULT_SET_COLUMNS,
+                                null, msgs );
+            if( newResultSetColumns != null )
+                msgs = ((InternalEObject) newResultSetColumns)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.RESULT_SET_DEFINITION__RESULT_SET_COLUMNS,
+                                null, msgs );
+            msgs = basicSetResultSetColumns( newResultSetColumns, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.RESULT_SET_DEFINITION__RESULT_SET_COLUMNS,
+                    newResultSetColumns, newResultSetColumns ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected ResultSetCriteria getCriteriaGen()
+    {
+        return m_criteria;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ResultSetDefinition#getCriteria()
+     * @generated NOT
+     */
+    public ResultSetCriteria getCriteria()
+    {
+        if( getCriteriaGen() == null )
+            setCriteria( DesignFactory.eINSTANCE.createResultSetCriteria() );
+        return getCriteriaGen();
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetCriteria( ResultSetCriteria newCriteria,
+            NotificationChain msgs )
+    {
+        ResultSetCriteria oldCriteria = m_criteria;
+        m_criteria = newCriteria;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.RESULT_SET_DEFINITION__CRITERIA, oldCriteria,
+                    newCriteria );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setCriteria( ResultSetCriteria newCriteria )
+    {
+        if( newCriteria != m_criteria )
+        {
+            NotificationChain msgs = null;
+            if( m_criteria != null )
+                msgs = ((InternalEObject) m_criteria)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.RESULT_SET_DEFINITION__CRITERIA,
+                                null, msgs );
+            if( newCriteria != null )
+                msgs = ((InternalEObject) newCriteria)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.RESULT_SET_DEFINITION__CRITERIA,
+                                null, msgs );
+            msgs = basicSetCriteria( newCriteria, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.RESULT_SET_DEFINITION__CRITERIA, newCriteria,
+                    newCriteria ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.RESULT_SET_DEFINITION__RESULT_SET_COLUMNS:
+            return basicSetResultSetColumns( null, msgs );
+        case DesignPackage.RESULT_SET_DEFINITION__CRITERIA:
+            return basicSetCriteria( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.RESULT_SET_DEFINITION__NAME:
+            return getName();
+        case DesignPackage.RESULT_SET_DEFINITION__RESULT_SET_COLUMNS:
+            return getResultSetColumns();
+        case DesignPackage.RESULT_SET_DEFINITION__CRITERIA:
+            return getCriteria();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.RESULT_SET_DEFINITION__NAME:
+            setName( (String) newValue );
+            return;
+        case DesignPackage.RESULT_SET_DEFINITION__RESULT_SET_COLUMNS:
+            setResultSetColumns( (ResultSetColumns) newValue );
+            return;
+        case DesignPackage.RESULT_SET_DEFINITION__CRITERIA:
+            setCriteria( (ResultSetCriteria) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.RESULT_SET_DEFINITION__NAME:
+            setName( NAME_EDEFAULT );
+            return;
+        case DesignPackage.RESULT_SET_DEFINITION__RESULT_SET_COLUMNS:
+            setResultSetColumns( (ResultSetColumns) null );
+            return;
+        case DesignPackage.RESULT_SET_DEFINITION__CRITERIA:
+            setCriteria( (ResultSetCriteria) null );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.RESULT_SET_DEFINITION__NAME:
+            return NAME_EDEFAULT == null ? m_name != null : !NAME_EDEFAULT
+                    .equals( m_name );
+        case DesignPackage.RESULT_SET_DEFINITION__RESULT_SET_COLUMNS:
+            return m_resultSetColumns != null;
+        case DesignPackage.RESULT_SET_DEFINITION__CRITERIA:
+            return m_criteria != null;
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (name: " ); //$NON-NLS-1$
+        result.append( m_name );
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //ResultSetDefinitionImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ResultSetsImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ResultSetsImpl.java
new file mode 100644
index 0000000..e61ae7a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ResultSetsImpl.java
@@ -0,0 +1,351 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ResultSetsImpl.java,v 1.3 2007/04/11 02:59:52 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.ResultSetDefinition;
+import org.eclipse.datatools.connectivity.oda.design.ResultSets;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Result Sets</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ResultSetsImpl#getResultSetDefinitions <em>Result Set Definitions</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ResultSetsImpl#isDerivedMetaData <em>Derived Meta Data</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ResultSetsImpl extends EObjectImpl implements ResultSets
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getResultSetDefinitions() <em>Result Set Definitions</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getResultSetDefinitions()
+     * @generated
+     * @ordered
+     */
+    protected EList<ResultSetDefinition> m_resultSetDefinitions;
+
+    /**
+     * The default value of the '{@link #isDerivedMetaData() <em>Derived Meta Data</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isDerivedMetaData()
+     * @generated
+     * @ordered
+     */
+    protected static final boolean DERIVED_META_DATA_EDEFAULT = true;
+
+    /**
+     * The cached value of the '{@link #isDerivedMetaData() <em>Derived Meta Data</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isDerivedMetaData()
+     * @generated
+     * @ordered
+     */
+    protected boolean m_derivedMetaData = DERIVED_META_DATA_EDEFAULT;
+
+    /**
+     * This is true if the Derived Meta Data attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_derivedMetaDataESet;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected ResultSetsImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.RESULT_SETS;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ResultSets#findResultSetDefinition(java.lang.String)
+     * @generated NOT
+     */
+    public ResultSetDefinition findResultSetDefinition( String resultSetName )
+    {
+        if( m_resultSetDefinitions == null || resultSetName == null
+                || resultSetName.length() == 0 )
+            return null;
+
+        EList<ResultSetDefinition> defns = getResultSetDefinitions();
+        for( int i = 0; i < defns.size(); i++)
+        {
+            ResultSetDefinition defn = defns.get( i );
+            if( resultSetName.equals( defn.getName() ) )
+                return defn;
+        }
+
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ResultSets#addResultSetDefinition(int, org.eclipse.datatools.connectivity.oda.design.ResultSetDefinition)
+     * @generated NOT
+     */
+    public void addResultSetDefinition( int index,
+            ResultSetDefinition resultSetDefn )
+    {
+        if( resultSetDefn == null )
+            return; // nothing to add
+        getResultSetDefinitions().add( index, resultSetDefn );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ResultSets#addResultSetDefinition(org.eclipse.datatools.connectivity.oda.design.ResultSetDefinition)
+     * @generated NOT
+     */
+    public void addResultSetDefinition( ResultSetDefinition resultSetDefn )
+    {
+        if( resultSetDefn == null )
+            return; // nothing to add
+        getResultSetDefinitions().add( resultSetDefn );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EList<ResultSetDefinition> getResultSetDefinitions()
+    {
+        if( m_resultSetDefinitions == null )
+        {
+            m_resultSetDefinitions = new EObjectContainmentEList<ResultSetDefinition>(
+                    ResultSetDefinition.class, this,
+                    DesignPackage.RESULT_SETS__RESULT_SET_DEFINITIONS );
+        }
+        return m_resultSetDefinitions;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isDerivedMetaData()
+    {
+        return m_derivedMetaData;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setDerivedMetaData( boolean newDerivedMetaData )
+    {
+        boolean oldDerivedMetaData = m_derivedMetaData;
+        m_derivedMetaData = newDerivedMetaData;
+        boolean oldDerivedMetaDataESet = m_derivedMetaDataESet;
+        m_derivedMetaDataESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.RESULT_SETS__DERIVED_META_DATA,
+                    oldDerivedMetaData, m_derivedMetaData,
+                    !oldDerivedMetaDataESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetDerivedMetaData()
+    {
+        boolean oldDerivedMetaData = m_derivedMetaData;
+        boolean oldDerivedMetaDataESet = m_derivedMetaDataESet;
+        m_derivedMetaData = DERIVED_META_DATA_EDEFAULT;
+        m_derivedMetaDataESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.RESULT_SETS__DERIVED_META_DATA,
+                    oldDerivedMetaData, DERIVED_META_DATA_EDEFAULT,
+                    oldDerivedMetaDataESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetDerivedMetaData()
+    {
+        return m_derivedMetaDataESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.RESULT_SETS__RESULT_SET_DEFINITIONS:
+            return ((InternalEList<?>) getResultSetDefinitions()).basicRemove(
+                    otherEnd, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.RESULT_SETS__RESULT_SET_DEFINITIONS:
+            return getResultSetDefinitions();
+        case DesignPackage.RESULT_SETS__DERIVED_META_DATA:
+            return isDerivedMetaData() ? Boolean.TRUE : Boolean.FALSE;
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings("unchecked")
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.RESULT_SETS__RESULT_SET_DEFINITIONS:
+            getResultSetDefinitions().clear();
+            getResultSetDefinitions().addAll(
+                    (Collection<? extends ResultSetDefinition>) newValue );
+            return;
+        case DesignPackage.RESULT_SETS__DERIVED_META_DATA:
+            setDerivedMetaData( ((Boolean) newValue).booleanValue() );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.RESULT_SETS__RESULT_SET_DEFINITIONS:
+            getResultSetDefinitions().clear();
+            return;
+        case DesignPackage.RESULT_SETS__DERIVED_META_DATA:
+            unsetDerivedMetaData();
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.RESULT_SETS__RESULT_SET_DEFINITIONS:
+            return m_resultSetDefinitions != null
+                    && !m_resultSetDefinitions.isEmpty();
+        case DesignPackage.RESULT_SETS__DERIVED_META_DATA:
+            return isSetDerivedMetaData();
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (derivedMetaData: " ); //$NON-NLS-1$
+        if( m_derivedMetaDataESet )
+            result.append( m_derivedMetaData );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //ResultSetsImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ResultSubsetImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ResultSubsetImpl.java
new file mode 100644
index 0000000..dc3555a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ResultSubsetImpl.java
@@ -0,0 +1,438 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ResultSubsetImpl.java,v 1.1 2010/10/15 05:41:37 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DataElementIdentifier;
+import org.eclipse.datatools.connectivity.oda.design.DataElementIdentifiers;
+import org.eclipse.datatools.connectivity.oda.design.DataSetDesign;
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.ResultSubset;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Result Subset</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ResultSubsetImpl#getDataSetDesign <em>Data Set Design</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ResultSubsetImpl#getResultSetName <em>Result Set Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ResultSubsetImpl#getColumnIdentifiers <em>Column Identifiers</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ResultSubsetImpl extends EObjectImpl implements ResultSubset
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getDataSetDesign() <em>Data Set Design</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDataSetDesign()
+     * @generated
+     * @ordered
+     */
+    protected DataSetDesign m_dataSetDesign;
+
+    /**
+     * The default value of the '{@link #getResultSetName() <em>Result Set Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getResultSetName()
+     * @generated
+     * @ordered
+     */
+    protected static final String RESULT_SET_NAME_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getResultSetName() <em>Result Set Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getResultSetName()
+     * @generated
+     * @ordered
+     */
+    protected String m_resultSetName = RESULT_SET_NAME_EDEFAULT;
+
+    /**
+     * The cached value of the '{@link #getColumnIdentifiers() <em>Column Identifiers</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getColumnIdentifiers()
+     * @generated
+     * @ordered
+     */
+    protected DataElementIdentifiers m_columnIdentifiers;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected ResultSubsetImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.RESULT_SUBSET;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DataSetDesign getDataSetDesign()
+    {
+        return m_dataSetDesign;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetDataSetDesign(
+            DataSetDesign newDataSetDesign, NotificationChain msgs )
+    {
+        DataSetDesign oldDataSetDesign = m_dataSetDesign;
+        m_dataSetDesign = newDataSetDesign;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.RESULT_SUBSET__DATA_SET_DESIGN,
+                    oldDataSetDesign, newDataSetDesign );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setDataSetDesign( DataSetDesign newDataSetDesign )
+    {
+        if( newDataSetDesign != m_dataSetDesign )
+        {
+            NotificationChain msgs = null;
+            if( m_dataSetDesign != null )
+                msgs = ((InternalEObject) m_dataSetDesign).eInverseRemove(
+                        this, EOPPOSITE_FEATURE_BASE
+                                - DesignPackage.RESULT_SUBSET__DATA_SET_DESIGN,
+                        null, msgs );
+            if( newDataSetDesign != null )
+                msgs = ((InternalEObject) newDataSetDesign).eInverseAdd( this,
+                        EOPPOSITE_FEATURE_BASE
+                                - DesignPackage.RESULT_SUBSET__DATA_SET_DESIGN,
+                        null, msgs );
+            msgs = basicSetDataSetDesign( newDataSetDesign, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.RESULT_SUBSET__DATA_SET_DESIGN,
+                    newDataSetDesign, newDataSetDesign ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getResultSetName()
+    {
+        return m_resultSetName;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setResultSetName( String newResultSetName )
+    {
+        String oldResultSetName = m_resultSetName;
+        m_resultSetName = newResultSetName;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.RESULT_SUBSET__RESULT_SET_NAME,
+                    oldResultSetName, m_resultSetName ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DataElementIdentifiers getColumnIdentifiers()
+    {
+        return m_columnIdentifiers;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetColumnIdentifiers(
+            DataElementIdentifiers newColumnIdentifiers, NotificationChain msgs )
+    {
+        DataElementIdentifiers oldColumnIdentifiers = m_columnIdentifiers;
+        m_columnIdentifiers = newColumnIdentifiers;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.RESULT_SUBSET__COLUMN_IDENTIFIERS,
+                    oldColumnIdentifiers, newColumnIdentifiers );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setColumnIdentifiers(
+            DataElementIdentifiers newColumnIdentifiers )
+    {
+        if( newColumnIdentifiers != m_columnIdentifiers )
+        {
+            NotificationChain msgs = null;
+            if( m_columnIdentifiers != null )
+                msgs = ((InternalEObject) m_columnIdentifiers)
+                        .eInverseRemove(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.RESULT_SUBSET__COLUMN_IDENTIFIERS,
+                                null, msgs );
+            if( newColumnIdentifiers != null )
+                msgs = ((InternalEObject) newColumnIdentifiers)
+                        .eInverseAdd(
+                                this,
+                                EOPPOSITE_FEATURE_BASE
+                                        - DesignPackage.RESULT_SUBSET__COLUMN_IDENTIFIERS,
+                                null, msgs );
+            msgs = basicSetColumnIdentifiers( newColumnIdentifiers, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.RESULT_SUBSET__COLUMN_IDENTIFIERS,
+                    newColumnIdentifiers, newColumnIdentifiers ) );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ResultSubset#addColumnIdentifier(java.lang.String)
+     * @generated NOT
+     */
+    public void addColumnIdentifier( String columnName )
+    {
+        addColumnIdentifier( columnName, 0 );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ResultSubset#addColumnIdentifier(java.lang.String, int)
+     * @generated NOT
+     */
+    public void addColumnIdentifier( String columnName, int columnPosition )
+    {
+        DataElementIdentifier columnIdentifier = DesignFactory.eINSTANCE.createDataElementIdentifier();
+        columnIdentifier.setName( columnName );
+        if( columnPosition > 0 )
+            columnIdentifier.setPosition( columnPosition );
+        addColumnIdentifier( columnIdentifier );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ResultSubset#addColumnIdentifier(org.eclipse.datatools.connectivity.oda.design.DataElementIdentifier)
+     * @generated NOT
+     */
+    public void addColumnIdentifier( DataElementIdentifier columnIdentifier )
+    {
+        if( columnIdentifier == null )
+            return; // nothing to add
+        
+        DataElementIdentifiers columns = getColumnIdentifiers();
+        if( columns == null )
+        {
+            columns = DesignFactory.eINSTANCE.createDataElementIdentifiers();
+            setColumnIdentifiers( columns );
+        }
+        columns.getIdentifiers().add( columnIdentifier );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.RESULT_SUBSET__DATA_SET_DESIGN:
+            return basicSetDataSetDesign( null, msgs );
+        case DesignPackage.RESULT_SUBSET__COLUMN_IDENTIFIERS:
+            return basicSetColumnIdentifiers( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.RESULT_SUBSET__DATA_SET_DESIGN:
+            return getDataSetDesign();
+        case DesignPackage.RESULT_SUBSET__RESULT_SET_NAME:
+            return getResultSetName();
+        case DesignPackage.RESULT_SUBSET__COLUMN_IDENTIFIERS:
+            return getColumnIdentifiers();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.RESULT_SUBSET__DATA_SET_DESIGN:
+            setDataSetDesign( (DataSetDesign) newValue );
+            return;
+        case DesignPackage.RESULT_SUBSET__RESULT_SET_NAME:
+            setResultSetName( (String) newValue );
+            return;
+        case DesignPackage.RESULT_SUBSET__COLUMN_IDENTIFIERS:
+            setColumnIdentifiers( (DataElementIdentifiers) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.RESULT_SUBSET__DATA_SET_DESIGN:
+            setDataSetDesign( (DataSetDesign) null );
+            return;
+        case DesignPackage.RESULT_SUBSET__RESULT_SET_NAME:
+            setResultSetName( RESULT_SET_NAME_EDEFAULT );
+            return;
+        case DesignPackage.RESULT_SUBSET__COLUMN_IDENTIFIERS:
+            setColumnIdentifiers( (DataElementIdentifiers) null );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.RESULT_SUBSET__DATA_SET_DESIGN:
+            return m_dataSetDesign != null;
+        case DesignPackage.RESULT_SUBSET__RESULT_SET_NAME:
+            return RESULT_SET_NAME_EDEFAULT == null ? m_resultSetName != null
+                    : !RESULT_SET_NAME_EDEFAULT.equals( m_resultSetName );
+        case DesignPackage.RESULT_SUBSET__COLUMN_IDENTIFIERS:
+            return m_columnIdentifiers != null;
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (resultSetName: " ); //$NON-NLS-1$
+        result.append( m_resultSetName );
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //ResultSubsetImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ScalarValueChoicesImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ScalarValueChoicesImpl.java
new file mode 100644
index 0000000..92eada8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ScalarValueChoicesImpl.java
@@ -0,0 +1,188 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ScalarValueChoicesImpl.java,v 1.2 2007/04/11 02:59:52 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.ScalarValueChoices;
+import org.eclipse.datatools.connectivity.oda.design.ScalarValueDefinition;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Scalar Value Choices</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ScalarValueChoicesImpl#getScalarValues <em>Scalar Values</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ScalarValueChoicesImpl extends EObjectImpl implements
+        ScalarValueChoices
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getScalarValues() <em>Scalar Values</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getScalarValues()
+     * @generated
+     * @ordered
+     */
+    protected EList<ScalarValueDefinition> m_scalarValues;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected ScalarValueChoicesImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.SCALAR_VALUE_CHOICES;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EList<ScalarValueDefinition> getScalarValues()
+    {
+        if( m_scalarValues == null )
+        {
+            m_scalarValues = new EObjectContainmentEList<ScalarValueDefinition>(
+                    ScalarValueDefinition.class, this,
+                    DesignPackage.SCALAR_VALUE_CHOICES__SCALAR_VALUES );
+        }
+        return m_scalarValues;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.SCALAR_VALUE_CHOICES__SCALAR_VALUES:
+            return ((InternalEList<?>) getScalarValues()).basicRemove(
+                    otherEnd, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.SCALAR_VALUE_CHOICES__SCALAR_VALUES:
+            return getScalarValues();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings("unchecked")
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.SCALAR_VALUE_CHOICES__SCALAR_VALUES:
+            getScalarValues().clear();
+            getScalarValues().addAll(
+                    (Collection<? extends ScalarValueDefinition>) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.SCALAR_VALUE_CHOICES__SCALAR_VALUES:
+            getScalarValues().clear();
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.SCALAR_VALUE_CHOICES__SCALAR_VALUES:
+            return m_scalarValues != null && !m_scalarValues.isEmpty();
+        }
+        return super.eIsSet( featureID );
+    }
+
+} //ScalarValueChoicesImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ScalarValueDefinitionImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ScalarValueDefinitionImpl.java
new file mode 100644
index 0000000..1854348
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ScalarValueDefinitionImpl.java
@@ -0,0 +1,297 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ScalarValueDefinitionImpl.java,v 1.4 2010/02/17 02:20:38 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.ScalarValueDefinition;
+import org.eclipse.datatools.connectivity.oda.design.util.DesignUtil;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Scalar Value Definition</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ScalarValueDefinitionImpl#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ScalarValueDefinitionImpl#getDisplayName <em>Display Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ScalarValueDefinitionImpl extends EObjectImpl implements
+        ScalarValueDefinition
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getValue()
+     * @generated
+     * @ordered
+     */
+    protected static final String VALUE_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getValue()
+     * @generated
+     * @ordered
+     */
+    protected String m_value = VALUE_EDEFAULT;
+
+    /**
+     * The default value of the '{@link #getDisplayName() <em>Display Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDisplayName()
+     * @generated
+     * @ordered
+     */
+    protected static final String DISPLAY_NAME_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getDisplayName() <em>Display Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDisplayName()
+     * @generated
+     * @ordered
+     */
+    protected String m_displayName = DISPLAY_NAME_EDEFAULT;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected ScalarValueDefinitionImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.SCALAR_VALUE_DEFINITION;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getValue()
+    {
+        return m_value;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setValue( String newValue )
+    {
+        String oldValue = m_value;
+        m_value = newValue;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.SCALAR_VALUE_DEFINITION__VALUE, oldValue,
+                    m_value ) );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ScalarValueDefinition#getDisplayName()
+     * @generated NOT
+     */
+    public String getDisplayName()
+    {
+        return DesignUtil.getDefaultResourceString( getDisplayNameGen() );
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected String getDisplayNameGen()
+    {
+        return m_displayName;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ScalarValueDefinition#setDisplayName(java.lang.String)
+     * @generated NOT
+     */
+    public void setDisplayName( String newDisplayName )
+    {
+        String newAttrValue = DesignUtil.addDefaultToResourceAttribute( newDisplayName, getDisplayNameGen() );
+        setDisplayNameGen( newAttrValue );
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void setDisplayNameGen( String newDisplayName )
+    {
+        String oldDisplayName = m_displayName;
+        m_displayName = newDisplayName;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.SCALAR_VALUE_DEFINITION__DISPLAY_NAME,
+                    oldDisplayName, m_displayName ) );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ScalarValueDefinition#getDisplayNameKey()
+     * @generated NOT
+     */
+    public String getDisplayNameKey()
+    {
+        return DesignUtil.getResourceKey( getDisplayNameGen() );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.ScalarValueDefinition#setDisplayNameKey(java.lang.String)
+     * @generated NOT
+     */
+    public void setDisplayNameKey( String newDisplayNameKey )
+    {
+        String newAttrValue = DesignUtil.addKeyToResourceAttribute( newDisplayNameKey, getDisplayNameGen() );
+        setDisplayNameGen( newAttrValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.SCALAR_VALUE_DEFINITION__VALUE:
+            return getValue();
+        case DesignPackage.SCALAR_VALUE_DEFINITION__DISPLAY_NAME:
+            return getDisplayNameGen();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.SCALAR_VALUE_DEFINITION__VALUE:
+            setValue( (String) newValue );
+            return;
+        case DesignPackage.SCALAR_VALUE_DEFINITION__DISPLAY_NAME:
+            setDisplayNameGen( (String) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.SCALAR_VALUE_DEFINITION__VALUE:
+            setValue( VALUE_EDEFAULT );
+            return;
+        case DesignPackage.SCALAR_VALUE_DEFINITION__DISPLAY_NAME:
+            setDisplayNameGen( DISPLAY_NAME_EDEFAULT );
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.SCALAR_VALUE_DEFINITION__VALUE:
+            return VALUE_EDEFAULT == null ? m_value != null : !VALUE_EDEFAULT
+                    .equals( m_value );
+        case DesignPackage.SCALAR_VALUE_DEFINITION__DISPLAY_NAME:
+            return DISPLAY_NAME_EDEFAULT == null ? m_displayName != null
+                    : !DISPLAY_NAME_EDEFAULT.equals( m_displayName );
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (value: " ); //$NON-NLS-1$
+        result.append( m_value );
+        result.append( ", displayName: " ); //$NON-NLS-1$
+        result.append( m_displayName );
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //ScalarValueDefinitionImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/SortKeyImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/SortKeyImpl.java
new file mode 100644
index 0000000..d8032c7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/SortKeyImpl.java
@@ -0,0 +1,831 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: SortKeyImpl.java,v 1.4 2010/03/17 00:34:13 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DataElementIdentifier;
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.NullOrderingType;
+import org.eclipse.datatools.connectivity.oda.design.SortDirectionType;
+import org.eclipse.datatools.connectivity.oda.design.SortKey;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Sort Key</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.SortKeyImpl#getColumnIdentifier <em>Column Identifier</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.SortKeyImpl#getColumnName <em>Column Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.SortKeyImpl#getColumnPosition <em>Column Position</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.SortKeyImpl#getSortDirection <em>Sort Direction</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.SortKeyImpl#getNullValueOrdering <em>Null Value Ordering</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.SortKeyImpl#isOptional <em>Optional</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ * @since 3.3 (DTP 1.8)
+ */
+public class SortKeyImpl extends EObjectImpl implements SortKey
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2009, 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getColumnIdentifier() <em>Column Identifier</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getColumnIdentifier()
+     * @generated
+     * @ordered
+     * @since 3.3.2
+     */
+    protected DataElementIdentifier m_columnIdentifier;
+
+    /**
+     * @generated NOT
+     */
+    protected static final String EMPTY_STR = ""; //$NON-NLS-1$
+
+    /**
+     * The default value of the '{@link #getColumnName() <em>Column Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getColumnName()
+     * @generated
+     * @ordered
+     */
+    protected static final String COLUMN_NAME_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getColumnName() <em>Column Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getColumnName()
+     * @generated
+     * @ordered
+     * @deprecated  since 3.3.2; replaced by m_columnIdentifier
+     */
+    protected String m_columnName = COLUMN_NAME_EDEFAULT;
+
+    /**
+     * The default value of the '{@link #getColumnPosition() <em>Column Position</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getColumnPosition()
+     * @generated
+     * @ordered
+     */
+    protected static final int COLUMN_POSITION_EDEFAULT = 0;
+
+    /**
+     * The cached value of the '{@link #getColumnPosition() <em>Column Position</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getColumnPosition()
+     * @generated
+     * @ordered
+     * @deprecated  since 3.3.2; replaced by m_columnIdentifier
+     */
+    protected int m_columnPosition = COLUMN_POSITION_EDEFAULT;
+
+    /**
+     * This is true if the Column Position attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_columnPositionESet;
+
+    /**
+     * The default value of the '{@link #getSortDirection() <em>Sort Direction</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getSortDirection()
+     * @generated
+     * @ordered
+     */
+    protected static final SortDirectionType SORT_DIRECTION_EDEFAULT = SortDirectionType.ASCENDING;
+
+    /**
+     * The cached value of the '{@link #getSortDirection() <em>Sort Direction</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getSortDirection()
+     * @generated
+     * @ordered
+     */
+    protected SortDirectionType m_sortDirection = SORT_DIRECTION_EDEFAULT;
+
+    /**
+     * This is true if the Sort Direction attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_sortDirectionESet;
+
+    /**
+     * The default value of the '{@link #getNullValueOrdering() <em>Null Value Ordering</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getNullValueOrdering()
+     * @generated
+     * @ordered
+     */
+    protected static final NullOrderingType NULL_VALUE_ORDERING_EDEFAULT = NullOrderingType.UNKNOWN;
+
+    /**
+     * The cached value of the '{@link #getNullValueOrdering() <em>Null Value Ordering</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getNullValueOrdering()
+     * @generated
+     * @ordered
+     */
+    protected NullOrderingType m_nullValueOrdering = NULL_VALUE_ORDERING_EDEFAULT;
+
+    /**
+     * This is true if the Null Value Ordering attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_nullValueOrderingESet;
+
+    /**
+     * The default value of the '{@link #isOptional() <em>Optional</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isOptional()
+     * @generated
+     * @ordered
+     */
+    protected static final boolean OPTIONAL_EDEFAULT = false;
+
+    /**
+     * The cached value of the '{@link #isOptional() <em>Optional</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isOptional()
+     * @generated
+     * @ordered
+     */
+    protected boolean m_optional = OPTIONAL_EDEFAULT;
+
+    /**
+     * This is true if the Optional attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_optionalESet;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected SortKeyImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.SORT_KEY;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DataElementIdentifier getColumnIdentifier()
+    {
+        return m_columnIdentifier;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetColumnIdentifier(
+            DataElementIdentifier newColumnIdentifier, NotificationChain msgs )
+    {
+        DataElementIdentifier oldColumnIdentifier = m_columnIdentifier;
+        m_columnIdentifier = newColumnIdentifier;
+        if( eNotificationRequired() )
+        {
+            ENotificationImpl notification = new ENotificationImpl( this,
+                    Notification.SET,
+                    DesignPackage.SORT_KEY__COLUMN_IDENTIFIER,
+                    oldColumnIdentifier, newColumnIdentifier );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setColumnIdentifier( DataElementIdentifier newColumnIdentifier )
+    {
+        if( newColumnIdentifier != m_columnIdentifier )
+        {
+            NotificationChain msgs = null;
+            if( m_columnIdentifier != null )
+                msgs = ((InternalEObject) m_columnIdentifier).eInverseRemove(
+                        this, EOPPOSITE_FEATURE_BASE
+                                - DesignPackage.SORT_KEY__COLUMN_IDENTIFIER,
+                        null, msgs );
+            if( newColumnIdentifier != null )
+                msgs = ((InternalEObject) newColumnIdentifier).eInverseAdd(
+                        this, EOPPOSITE_FEATURE_BASE
+                                - DesignPackage.SORT_KEY__COLUMN_IDENTIFIER,
+                        null, msgs );
+            msgs = basicSetColumnIdentifier( newColumnIdentifier, msgs );
+            if( msgs != null )
+                msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.SORT_KEY__COLUMN_IDENTIFIER,
+                    newColumnIdentifier, newColumnIdentifier ) );
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.SortKey#getColumnName()
+     * @generated NOT
+     */
+    public String getColumnName()
+    {
+        // the name attribute should now be stored in the associated identifier;
+        // for backward compatibility of previously persisted object,
+        // use the one in deprecated member variable, if exists
+        String elementName = getColumnNameGen();
+        if( elementName != COLUMN_NAME_EDEFAULT )
+            return elementName;
+        return getColumnNameInIdentifier();
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected String getColumnNameGen()
+    {
+        return m_columnName;
+    }
+
+    /**
+     * Returns the column name stored in the associated identifier.
+     * @generated NOT
+     */
+    protected String getColumnNameInIdentifier()
+    {
+        DataElementIdentifier identifier = getColumnIdentifier();
+        if( identifier == null )
+            return COLUMN_NAME_EDEFAULT;
+
+        return identifier.getName();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void setColumnNameGen( String newColumnName )
+    {
+        String oldColumnName = m_columnName;
+        m_columnName = newColumnName;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.SORT_KEY__COLUMN_NAME, oldColumnName,
+                    m_columnName ) );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.SortKey#setColumnName(java.lang.String)
+     * @generated NOT
+     */
+    public void setColumnName( String newColumnName )
+    {
+        // the name attribute should now be stored in the associated identifier;
+        // clear any existing value in the deprecated member variable
+        if( getColumnNameGen() != COLUMN_NAME_EDEFAULT )
+            setColumnNameGen( COLUMN_NAME_EDEFAULT );
+        setColumnNameInIdentifier( newColumnName );
+    }
+    
+    /**
+     * Set the column name in the associated identifier.
+     * @generated NOT
+     */
+    protected void setColumnNameInIdentifier( String newName )
+    {
+        DataElementIdentifier identifier = getColumnIdentifier();
+        if( identifier == null )
+        {
+            identifier = DesignFactory.eINSTANCE.createDataElementIdentifier();
+            setColumnIdentifier( identifier );
+        }
+
+        identifier.setName( newName );
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.SortKey#getColumnPosition()
+     * @generated NOT
+     */
+    public int getColumnPosition()
+    {
+        // the position attribute should now be stored in the associated identifier;
+        // for backward compatibility of previously persisted object,
+        // use the one in deprecated member variable, if exists
+        if( isSetColumnPosition() )
+            return getColumnPositionGen();
+        return getColumnPositionInIdentifier();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected int getColumnPositionGen()
+    {
+        return m_columnPosition;
+    }
+    
+    /**
+     * Returns the column position stored in the associated identifier.
+     * @generated NOT
+     */
+    protected int getColumnPositionInIdentifier()
+    {
+        DataElementIdentifier identifier = getColumnIdentifier();
+        if( identifier == null )
+            return COLUMN_POSITION_EDEFAULT;
+
+        return identifier.getPosition();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void setColumnPositionGen( int newColumnPosition )
+    {
+        int oldColumnPosition = m_columnPosition;
+        m_columnPosition = newColumnPosition;
+        boolean oldColumnPositionESet = m_columnPositionESet;
+        m_columnPositionESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.SORT_KEY__COLUMN_POSITION, oldColumnPosition,
+                    m_columnPosition, !oldColumnPositionESet ) );
+    }
+
+    /* non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.SortKey#setColumnPosition(int)
+     * @generated NOT
+     */
+    public void setColumnPosition( int newColumnPosition )
+    {
+        // the position attribute should now be stored in the associated identifier;
+        // clear any existing value in the deprecated member variable
+        if( isSetColumnPosition() )
+            unsetColumnPosition();
+        setColumnPositionInIdentifier( newColumnPosition );
+    }
+    
+    /**
+     * Sets the column position in the associated identifier.
+     * @param newPosition
+     * @generated NOT
+     */
+    protected void setColumnPositionInIdentifier( int newPosition )
+    {
+        DataElementIdentifier identifier = getColumnIdentifier();
+        if( identifier == null )
+        {
+            identifier = DesignFactory.eINSTANCE.createDataElementIdentifier();
+            setColumnIdentifier( identifier );
+        }
+
+        identifier.setPosition( newPosition );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetColumnPosition()
+    {
+        int oldColumnPosition = m_columnPosition;
+        boolean oldColumnPositionESet = m_columnPositionESet;
+        m_columnPosition = COLUMN_POSITION_EDEFAULT;
+        m_columnPositionESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.SORT_KEY__COLUMN_POSITION, oldColumnPosition,
+                    COLUMN_POSITION_EDEFAULT, oldColumnPositionESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetColumnPosition()
+    {
+        return m_columnPositionESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public SortDirectionType getSortDirection()
+    {
+        return m_sortDirection;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setSortDirection( SortDirectionType newSortDirection )
+    {
+        SortDirectionType oldSortDirection = m_sortDirection;
+        m_sortDirection = newSortDirection == null ? SORT_DIRECTION_EDEFAULT
+                : newSortDirection;
+        boolean oldSortDirectionESet = m_sortDirectionESet;
+        m_sortDirectionESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.SORT_KEY__SORT_DIRECTION, oldSortDirection,
+                    m_sortDirection, !oldSortDirectionESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetSortDirection()
+    {
+        SortDirectionType oldSortDirection = m_sortDirection;
+        boolean oldSortDirectionESet = m_sortDirectionESet;
+        m_sortDirection = SORT_DIRECTION_EDEFAULT;
+        m_sortDirectionESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.SORT_KEY__SORT_DIRECTION, oldSortDirection,
+                    SORT_DIRECTION_EDEFAULT, oldSortDirectionESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetSortDirection()
+    {
+        return m_sortDirectionESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NullOrderingType getNullValueOrdering()
+    {
+        return m_nullValueOrdering;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setNullValueOrdering( NullOrderingType newNullValueOrdering )
+    {
+        NullOrderingType oldNullValueOrdering = m_nullValueOrdering;
+        m_nullValueOrdering = newNullValueOrdering == null ? NULL_VALUE_ORDERING_EDEFAULT
+                : newNullValueOrdering;
+        boolean oldNullValueOrderingESet = m_nullValueOrderingESet;
+        m_nullValueOrderingESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.SORT_KEY__NULL_VALUE_ORDERING,
+                    oldNullValueOrdering, m_nullValueOrdering,
+                    !oldNullValueOrderingESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetNullValueOrdering()
+    {
+        NullOrderingType oldNullValueOrdering = m_nullValueOrdering;
+        boolean oldNullValueOrderingESet = m_nullValueOrderingESet;
+        m_nullValueOrdering = NULL_VALUE_ORDERING_EDEFAULT;
+        m_nullValueOrderingESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.SORT_KEY__NULL_VALUE_ORDERING,
+                    oldNullValueOrdering, NULL_VALUE_ORDERING_EDEFAULT,
+                    oldNullValueOrderingESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetNullValueOrdering()
+    {
+        return m_nullValueOrderingESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isOptional()
+    {
+        return m_optional;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setOptional( boolean newOptional )
+    {
+        boolean oldOptional = m_optional;
+        m_optional = newOptional;
+        boolean oldOptionalESet = m_optionalESet;
+        m_optionalESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.SORT_KEY__OPTIONAL, oldOptional, m_optional,
+                    !oldOptionalESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetOptional()
+    {
+        boolean oldOptional = m_optional;
+        boolean oldOptionalESet = m_optionalESet;
+        m_optional = OPTIONAL_EDEFAULT;
+        m_optionalESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.SORT_KEY__OPTIONAL, oldOptional,
+                    OPTIONAL_EDEFAULT, oldOptionalESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetOptional()
+    {
+        return m_optionalESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.SORT_KEY__COLUMN_IDENTIFIER:
+            return basicSetColumnIdentifier( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.SORT_KEY__COLUMN_IDENTIFIER:
+            return getColumnIdentifier();
+        case DesignPackage.SORT_KEY__COLUMN_NAME:
+            return getColumnName();
+        case DesignPackage.SORT_KEY__COLUMN_POSITION:
+            return new Integer( getColumnPosition() );
+        case DesignPackage.SORT_KEY__SORT_DIRECTION:
+            return getSortDirection();
+        case DesignPackage.SORT_KEY__NULL_VALUE_ORDERING:
+            return getNullValueOrdering();
+        case DesignPackage.SORT_KEY__OPTIONAL:
+            return isOptional() ? Boolean.TRUE : Boolean.FALSE;
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.SORT_KEY__COLUMN_IDENTIFIER:
+            setColumnIdentifier( (DataElementIdentifier) newValue );
+            return;
+        case DesignPackage.SORT_KEY__COLUMN_NAME:
+            setColumnName( (String) newValue );
+            return;
+        case DesignPackage.SORT_KEY__COLUMN_POSITION:
+            setColumnPosition( ((Integer) newValue).intValue() );
+            return;
+        case DesignPackage.SORT_KEY__SORT_DIRECTION:
+            setSortDirection( (SortDirectionType) newValue );
+            return;
+        case DesignPackage.SORT_KEY__NULL_VALUE_ORDERING:
+            setNullValueOrdering( (NullOrderingType) newValue );
+            return;
+        case DesignPackage.SORT_KEY__OPTIONAL:
+            setOptional( ((Boolean) newValue).booleanValue() );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.SORT_KEY__COLUMN_IDENTIFIER:
+            setColumnIdentifier( (DataElementIdentifier) null );
+            return;
+        case DesignPackage.SORT_KEY__COLUMN_NAME:
+            setColumnName( COLUMN_NAME_EDEFAULT );
+            return;
+        case DesignPackage.SORT_KEY__COLUMN_POSITION:
+            unsetColumnPosition();
+            return;
+        case DesignPackage.SORT_KEY__SORT_DIRECTION:
+            unsetSortDirection();
+            return;
+        case DesignPackage.SORT_KEY__NULL_VALUE_ORDERING:
+            unsetNullValueOrdering();
+            return;
+        case DesignPackage.SORT_KEY__OPTIONAL:
+            unsetOptional();
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.SORT_KEY__COLUMN_IDENTIFIER:
+            return m_columnIdentifier != null;
+        case DesignPackage.SORT_KEY__COLUMN_NAME:
+            return COLUMN_NAME_EDEFAULT == null ? m_columnName != null
+                    : !COLUMN_NAME_EDEFAULT.equals( m_columnName );
+        case DesignPackage.SORT_KEY__COLUMN_POSITION:
+            return isSetColumnPosition();
+        case DesignPackage.SORT_KEY__SORT_DIRECTION:
+            return isSetSortDirection();
+        case DesignPackage.SORT_KEY__NULL_VALUE_ORDERING:
+            return isSetNullValueOrdering();
+        case DesignPackage.SORT_KEY__OPTIONAL:
+            return isSetOptional();
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (columnName: " ); //$NON-NLS-1$
+        result.append( m_columnName );
+        result.append( ", columnPosition: " ); //$NON-NLS-1$
+        if( m_columnPositionESet )
+            result.append( m_columnPosition );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ", sortDirection: " ); //$NON-NLS-1$
+        if( m_sortDirectionESet )
+            result.append( m_sortDirection );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ", nullValueOrdering: " ); //$NON-NLS-1$
+        if( m_nullValueOrderingESet )
+            result.append( m_nullValueOrdering );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ", optional: " ); //$NON-NLS-1$
+        if( m_optionalESet )
+            result.append( m_optional );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //SortKeyImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/SortSpecificationImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/SortSpecificationImpl.java
new file mode 100644
index 0000000..5c1ff2f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/SortSpecificationImpl.java
@@ -0,0 +1,192 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: SortSpecificationImpl.java,v 1.1 2009/03/13 05:19:46 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.SortKey;
+import org.eclipse.datatools.connectivity.oda.design.SortSpecification;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Sort Specification</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.SortSpecificationImpl#getSortKeys <em>Sort Keys</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ * @since 3.3 (DTP 1.8)
+ */
+public class SortSpecificationImpl extends EObjectImpl implements
+        SortSpecification
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getSortKeys() <em>Sort Keys</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getSortKeys()
+     * @generated
+     * @ordered
+     */
+    protected EList<SortKey> m_sortKeys;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected SortSpecificationImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.SORT_SPECIFICATION;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EList<SortKey> getSortKeys()
+    {
+        if( m_sortKeys == null )
+        {
+            m_sortKeys = new EObjectContainmentEList<SortKey>( SortKey.class,
+                    this, DesignPackage.SORT_SPECIFICATION__SORT_KEYS );
+        }
+        return m_sortKeys;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd,
+            int featureID, NotificationChain msgs )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.SORT_SPECIFICATION__SORT_KEYS:
+            return ((InternalEList<?>) getSortKeys()).basicRemove( otherEnd,
+                    msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.SORT_SPECIFICATION__SORT_KEYS:
+            return getSortKeys();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings("unchecked")
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.SORT_SPECIFICATION__SORT_KEYS:
+            getSortKeys().clear();
+            getSortKeys().addAll( (Collection<? extends SortKey>) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.SORT_SPECIFICATION__SORT_KEYS:
+            getSortKeys().clear();
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.SORT_SPECIFICATION__SORT_KEYS:
+            return m_sortKeys != null && !m_sortKeys.isEmpty();
+        }
+        return super.eIsSet( featureID );
+    }
+
+} //SortSpecificationImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/StaticValuesImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/StaticValuesImpl.java
new file mode 100644
index 0000000..6016a02
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/StaticValuesImpl.java
@@ -0,0 +1,222 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.StaticValues;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EDataTypeEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Static Values</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.StaticValuesImpl#getValues <em>Values</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ * @since 3.2 (DTP 1.7)
+ */
+public class StaticValuesImpl extends EObjectImpl implements StaticValues
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached value of the '{@link #getValues() <em>Values</em>}' attribute list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getValues()
+     * @generated
+     * @ordered
+     */
+    protected EList<Object> m_values;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected StaticValuesImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.STATIC_VALUES;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public EList<Object> getValues()
+    {
+        if( m_values == null )
+        {
+            m_values = new EDataTypeEList<Object>( Object.class, this,
+                    DesignPackage.STATIC_VALUES__VALUES );
+        }
+        return m_values;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.STATIC_VALUES__VALUES:
+            return getValues();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings("unchecked")
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.STATIC_VALUES__VALUES:
+            getValues().clear();
+            getValues().addAll( (Collection<? extends Object>) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.STATIC_VALUES__VALUES:
+            getValues().clear();
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.STATIC_VALUES__VALUES:
+            return m_values != null && !m_values.isEmpty();
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (values: " ); //$NON-NLS-1$
+        result.append( m_values );
+        result.append( ')' );
+        return result.toString();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.StaticValuesType#isEmpty()
+     * @generated NOT
+     */
+    public boolean isEmpty()
+    {
+        return getValues().isEmpty();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.StaticValuesType#count()
+     * @generated NOT
+     */
+    public int count()
+    {
+        return getValues().size();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.StaticValuesType#add(java.lang.Object)
+     * @generated NOT
+     */
+    public void add( Object value )
+    {
+        getValues().add( value );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.design.StaticValuesType#clear()
+     * @generated NOT
+     */
+    public void clear()
+    {
+        getValues().clear();
+    }
+
+} //StaticValuesImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ValueFormatHintsImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ValueFormatHintsImpl.java
new file mode 100644
index 0000000..e5953e0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/impl/ValueFormatHintsImpl.java
@@ -0,0 +1,606 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: ValueFormatHintsImpl.java,v 1.3 2007/04/11 02:59:53 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.impl;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.HorizontalAlignment;
+import org.eclipse.datatools.connectivity.oda.design.TextFormatType;
+import org.eclipse.datatools.connectivity.oda.design.TextWrapType;
+import org.eclipse.datatools.connectivity.oda.design.ValueFormatHints;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Value Format Hints</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ValueFormatHintsImpl#getDisplaySize <em>Display Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ValueFormatHintsImpl#getDisplayFormat <em>Display Format</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ValueFormatHintsImpl#getTextFormatType <em>Text Format Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ValueFormatHintsImpl#getHorizontalAlignment <em>Horizontal Alignment</em>}</li>
+ *   <li>{@link org.eclipse.datatools.connectivity.oda.design.impl.ValueFormatHintsImpl#getTextWrapType <em>Text Wrap Type</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ValueFormatHintsImpl extends EObjectImpl implements
+        ValueFormatHints
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The default value of the '{@link #getDisplaySize() <em>Display Size</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDisplaySize()
+     * @generated
+     * @ordered
+     */
+    protected static final int DISPLAY_SIZE_EDEFAULT = -1;
+
+    /**
+     * The cached value of the '{@link #getDisplaySize() <em>Display Size</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDisplaySize()
+     * @generated
+     * @ordered
+     */
+    protected int m_displaySize = DISPLAY_SIZE_EDEFAULT;
+
+    /**
+     * This is true if the Display Size attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_displaySizeESet;
+
+    /**
+     * The default value of the '{@link #getDisplayFormat() <em>Display Format</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDisplayFormat()
+     * @generated
+     * @ordered
+     */
+    protected static final String DISPLAY_FORMAT_EDEFAULT = null;
+
+    /**
+     * The cached value of the '{@link #getDisplayFormat() <em>Display Format</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDisplayFormat()
+     * @generated
+     * @ordered
+     */
+    protected String m_displayFormat = DISPLAY_FORMAT_EDEFAULT;
+
+    /**
+     * The default value of the '{@link #getTextFormatType() <em>Text Format Type</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getTextFormatType()
+     * @generated
+     * @ordered
+     */
+    protected static final TextFormatType TEXT_FORMAT_TYPE_EDEFAULT = TextFormatType.PLAIN_LITERAL;
+
+    /**
+     * The cached value of the '{@link #getTextFormatType() <em>Text Format Type</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getTextFormatType()
+     * @generated
+     * @ordered
+     */
+    protected TextFormatType m_textFormatType = TEXT_FORMAT_TYPE_EDEFAULT;
+
+    /**
+     * This is true if the Text Format Type attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_textFormatTypeESet;
+
+    /**
+     * The default value of the '{@link #getHorizontalAlignment() <em>Horizontal Alignment</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getHorizontalAlignment()
+     * @generated
+     * @ordered
+     */
+    protected static final HorizontalAlignment HORIZONTAL_ALIGNMENT_EDEFAULT = HorizontalAlignment.AUTOMATIC_LITERAL;
+
+    /**
+     * The cached value of the '{@link #getHorizontalAlignment() <em>Horizontal Alignment</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getHorizontalAlignment()
+     * @generated
+     * @ordered
+     */
+    protected HorizontalAlignment m_horizontalAlignment = HORIZONTAL_ALIGNMENT_EDEFAULT;
+
+    /**
+     * This is true if the Horizontal Alignment attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_horizontalAlignmentESet;
+
+    /**
+     * The default value of the '{@link #getTextWrapType() <em>Text Wrap Type</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getTextWrapType()
+     * @generated
+     * @ordered
+     */
+    protected static final TextWrapType TEXT_WRAP_TYPE_EDEFAULT = TextWrapType.NONE_LITERAL;
+
+    /**
+     * The cached value of the '{@link #getTextWrapType() <em>Text Wrap Type</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getTextWrapType()
+     * @generated
+     * @ordered
+     */
+    protected TextWrapType m_textWrapType = TEXT_WRAP_TYPE_EDEFAULT;
+
+    /**
+     * This is true if the Text Wrap Type attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean m_textWrapTypeESet;
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected ValueFormatHintsImpl()
+    {
+        super();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EClass eStaticClass()
+    {
+        return DesignPackage.Literals.VALUE_FORMAT_HINTS;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getDisplayFormat()
+    {
+        return m_displayFormat;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setDisplayFormat( String newDisplayFormat )
+    {
+        String oldDisplayFormat = m_displayFormat;
+        m_displayFormat = newDisplayFormat;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.VALUE_FORMAT_HINTS__DISPLAY_FORMAT,
+                    oldDisplayFormat, m_displayFormat ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public int getDisplaySize()
+    {
+        return m_displaySize;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setDisplaySize( int newDisplaySize )
+    {
+        int oldDisplaySize = m_displaySize;
+        m_displaySize = newDisplaySize;
+        boolean oldDisplaySizeESet = m_displaySizeESet;
+        m_displaySizeESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.VALUE_FORMAT_HINTS__DISPLAY_SIZE,
+                    oldDisplaySize, m_displaySize, !oldDisplaySizeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetDisplaySize()
+    {
+        int oldDisplaySize = m_displaySize;
+        boolean oldDisplaySizeESet = m_displaySizeESet;
+        m_displaySize = DISPLAY_SIZE_EDEFAULT;
+        m_displaySizeESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.VALUE_FORMAT_HINTS__DISPLAY_SIZE,
+                    oldDisplaySize, DISPLAY_SIZE_EDEFAULT, oldDisplaySizeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetDisplaySize()
+    {
+        return m_displaySizeESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public TextFormatType getTextFormatType()
+    {
+        return m_textFormatType;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setTextFormatType( TextFormatType newTextFormatType )
+    {
+        TextFormatType oldTextFormatType = m_textFormatType;
+        m_textFormatType = newTextFormatType == null ? TEXT_FORMAT_TYPE_EDEFAULT
+                : newTextFormatType;
+        boolean oldTextFormatTypeESet = m_textFormatTypeESet;
+        m_textFormatTypeESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.VALUE_FORMAT_HINTS__TEXT_FORMAT_TYPE,
+                    oldTextFormatType, m_textFormatType, !oldTextFormatTypeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetTextFormatType()
+    {
+        TextFormatType oldTextFormatType = m_textFormatType;
+        boolean oldTextFormatTypeESet = m_textFormatTypeESet;
+        m_textFormatType = TEXT_FORMAT_TYPE_EDEFAULT;
+        m_textFormatTypeESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.VALUE_FORMAT_HINTS__TEXT_FORMAT_TYPE,
+                    oldTextFormatType, TEXT_FORMAT_TYPE_EDEFAULT,
+                    oldTextFormatTypeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetTextFormatType()
+    {
+        return m_textFormatTypeESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public HorizontalAlignment getHorizontalAlignment()
+    {
+        return m_horizontalAlignment;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setHorizontalAlignment(
+            HorizontalAlignment newHorizontalAlignment )
+    {
+        HorizontalAlignment oldHorizontalAlignment = m_horizontalAlignment;
+        m_horizontalAlignment = newHorizontalAlignment == null ? HORIZONTAL_ALIGNMENT_EDEFAULT
+                : newHorizontalAlignment;
+        boolean oldHorizontalAlignmentESet = m_horizontalAlignmentESet;
+        m_horizontalAlignmentESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.VALUE_FORMAT_HINTS__HORIZONTAL_ALIGNMENT,
+                    oldHorizontalAlignment, m_horizontalAlignment,
+                    !oldHorizontalAlignmentESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetHorizontalAlignment()
+    {
+        HorizontalAlignment oldHorizontalAlignment = m_horizontalAlignment;
+        boolean oldHorizontalAlignmentESet = m_horizontalAlignmentESet;
+        m_horizontalAlignment = HORIZONTAL_ALIGNMENT_EDEFAULT;
+        m_horizontalAlignmentESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.VALUE_FORMAT_HINTS__HORIZONTAL_ALIGNMENT,
+                    oldHorizontalAlignment, HORIZONTAL_ALIGNMENT_EDEFAULT,
+                    oldHorizontalAlignmentESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetHorizontalAlignment()
+    {
+        return m_horizontalAlignmentESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public TextWrapType getTextWrapType()
+    {
+        return m_textWrapType;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setTextWrapType( TextWrapType newTextWrapType )
+    {
+        TextWrapType oldTextWrapType = m_textWrapType;
+        m_textWrapType = newTextWrapType == null ? TEXT_WRAP_TYPE_EDEFAULT
+                : newTextWrapType;
+        boolean oldTextWrapTypeESet = m_textWrapTypeESet;
+        m_textWrapTypeESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET,
+                    DesignPackage.VALUE_FORMAT_HINTS__TEXT_WRAP_TYPE,
+                    oldTextWrapType, m_textWrapType, !oldTextWrapTypeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetTextWrapType()
+    {
+        TextWrapType oldTextWrapType = m_textWrapType;
+        boolean oldTextWrapTypeESet = m_textWrapTypeESet;
+        m_textWrapType = TEXT_WRAP_TYPE_EDEFAULT;
+        m_textWrapTypeESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    DesignPackage.VALUE_FORMAT_HINTS__TEXT_WRAP_TYPE,
+                    oldTextWrapType, TEXT_WRAP_TYPE_EDEFAULT,
+                    oldTextWrapTypeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetTextWrapType()
+    {
+        return m_textWrapTypeESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eGet( int featureID, boolean resolve, boolean coreType )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.VALUE_FORMAT_HINTS__DISPLAY_SIZE:
+            return new Integer( getDisplaySize() );
+        case DesignPackage.VALUE_FORMAT_HINTS__DISPLAY_FORMAT:
+            return getDisplayFormat();
+        case DesignPackage.VALUE_FORMAT_HINTS__TEXT_FORMAT_TYPE:
+            return getTextFormatType();
+        case DesignPackage.VALUE_FORMAT_HINTS__HORIZONTAL_ALIGNMENT:
+            return getHorizontalAlignment();
+        case DesignPackage.VALUE_FORMAT_HINTS__TEXT_WRAP_TYPE:
+            return getTextWrapType();
+        }
+        return super.eGet( featureID, resolve, coreType );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eSet( int featureID, Object newValue )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.VALUE_FORMAT_HINTS__DISPLAY_SIZE:
+            setDisplaySize( ((Integer) newValue).intValue() );
+            return;
+        case DesignPackage.VALUE_FORMAT_HINTS__DISPLAY_FORMAT:
+            setDisplayFormat( (String) newValue );
+            return;
+        case DesignPackage.VALUE_FORMAT_HINTS__TEXT_FORMAT_TYPE:
+            setTextFormatType( (TextFormatType) newValue );
+            return;
+        case DesignPackage.VALUE_FORMAT_HINTS__HORIZONTAL_ALIGNMENT:
+            setHorizontalAlignment( (HorizontalAlignment) newValue );
+            return;
+        case DesignPackage.VALUE_FORMAT_HINTS__TEXT_WRAP_TYPE:
+            setTextWrapType( (TextWrapType) newValue );
+            return;
+        }
+        super.eSet( featureID, newValue );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void eUnset( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.VALUE_FORMAT_HINTS__DISPLAY_SIZE:
+            unsetDisplaySize();
+            return;
+        case DesignPackage.VALUE_FORMAT_HINTS__DISPLAY_FORMAT:
+            setDisplayFormat( DISPLAY_FORMAT_EDEFAULT );
+            return;
+        case DesignPackage.VALUE_FORMAT_HINTS__TEXT_FORMAT_TYPE:
+            unsetTextFormatType();
+            return;
+        case DesignPackage.VALUE_FORMAT_HINTS__HORIZONTAL_ALIGNMENT:
+            unsetHorizontalAlignment();
+            return;
+        case DesignPackage.VALUE_FORMAT_HINTS__TEXT_WRAP_TYPE:
+            unsetTextWrapType();
+            return;
+        }
+        super.eUnset( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean eIsSet( int featureID )
+    {
+        switch( featureID )
+        {
+        case DesignPackage.VALUE_FORMAT_HINTS__DISPLAY_SIZE:
+            return isSetDisplaySize();
+        case DesignPackage.VALUE_FORMAT_HINTS__DISPLAY_FORMAT:
+            return DISPLAY_FORMAT_EDEFAULT == null ? m_displayFormat != null
+                    : !DISPLAY_FORMAT_EDEFAULT.equals( m_displayFormat );
+        case DesignPackage.VALUE_FORMAT_HINTS__TEXT_FORMAT_TYPE:
+            return isSetTextFormatType();
+        case DesignPackage.VALUE_FORMAT_HINTS__HORIZONTAL_ALIGNMENT:
+            return isSetHorizontalAlignment();
+        case DesignPackage.VALUE_FORMAT_HINTS__TEXT_WRAP_TYPE:
+            return isSetTextWrapType();
+        }
+        return super.eIsSet( featureID );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String toString()
+    {
+        if( eIsProxy() )
+            return super.toString();
+
+        StringBuffer result = new StringBuffer( super.toString() );
+        result.append( " (displaySize: " ); //$NON-NLS-1$
+        if( m_displaySizeESet )
+            result.append( m_displaySize );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ", displayFormat: " ); //$NON-NLS-1$
+        result.append( m_displayFormat );
+        result.append( ", textFormatType: " ); //$NON-NLS-1$
+        if( m_textFormatTypeESet )
+            result.append( m_textFormatType );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ", horizontalAlignment: " ); //$NON-NLS-1$
+        if( m_horizontalAlignmentESet )
+            result.append( m_horizontalAlignment );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ", textWrapType: " ); //$NON-NLS-1$
+        if( m_textWrapTypeESet )
+            result.append( m_textWrapType );
+        else
+            result.append( "<unset>" ); //$NON-NLS-1$
+        result.append( ')' );
+        return result.toString();
+    }
+
+} //ValueFormatHintsImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/nls/Messages.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/nls/Messages.java
new file mode 100644
index 0000000..1a4e969
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/nls/Messages.java
@@ -0,0 +1,39 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2005, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.nls;
+
+import org.eclipse.osgi.util.NLS;
+
+public class Messages extends NLS
+{
+    private static final String BUNDLE_NAME = "org.eclipse.datatools.connectivity.oda.design.nls.messages"; //$NON-NLS-1$
+
+    private Messages()
+    {
+    }
+
+    static
+    {
+        // initialize resource bundle
+        NLS.initializeMessages( BUNDLE_NAME, Messages.class );
+    }
+
+    public static String design_invalidResourceFileName;
+    public static String design_invalidResourceKey;
+    public static String design_nullArgument;
+    public static String design_missingDataSourceDesign;
+    public static String design_missingId;
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/nls/messages.properties b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/nls/messages.properties
new file mode 100644
index 0000000..46131cd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/nls/messages.properties
@@ -0,0 +1,18 @@
+#
+#************************************************************************
+# Copyright (c) 2005, 2010 Actuate Corporation.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#  Actuate Corporation - initial API and implementation
+#  
+#************************************************************************
+#
+design_invalidResourceFileName=Invalid resource file name ({0}); it must end with .properties.
+design_invalidResourceKey=Invalid resource key ({0}); it must not contain any embedded white space.
+design_nullArgument=Argument must not be null.
+design_missingDataSourceDesign=Missing data source design in OdaDesignSession instance.
+design_missingId=Missing data source ID in data source design.
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/nls/package.html b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/nls/package.html
new file mode 100644
index 0000000..f2aff0a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/nls/package.html
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2005, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+
+[<b>Non-API</b>] Contains internal implementation of internationalization and localization features.
+<br>
+
+<!-- Put @see and @since tags down here. -->
+@since 3.0
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/package.html b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/package.html
new file mode 100644
index 0000000..59caba5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/package.html
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2005, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+
+[<b>Platform API</b>] Defines an Open Data Access (ODA) design session
+that allows a custom ODA designer tool to specify the
+slice of data to access at run-time.  
+<p>
+The ODA design-time framework provides the capability for a
+third-party data source provider to optionally provide its own
+custom designer.  An ODA custom designer is a data-source-specific 
+query builder that provides own custom UI for an user to explore its 
+meta-data and build a data set query.  
+Most of the metadata are specific to individual data sources.
+A custom designer is expected to encapsulate the specific knowledge and 
+context of its underlying data source.  
+<br>An ODA host uses a generic set of design 
+information for its data access.  The data access design 
+is modeled and defined in this ODA Design Session API.
+<p>
+When a new data source is designed, an ODA design-time host application
+would initiate and request a new ODA design session with the data source's custom
+ODA designer.  An user would step through the data-source-specific
+design task in a custom ODA designer.  When finished, a data access design 
+is created and passed to the ODA host in a response to the 
+design session it has initiated.
+<p>
+The ODA host would in turn adapt the data access design to its
+host-specific design components and persistent format.
+<br>The data access design may be edited in a later design session.
+An ODA host would request another design session, and pass the
+last session's pertinent information to the custom ODA designer.
+After a user completes editing of the data access design, a revised
+design is again passed to the ODA host for updates.
+<p>
+The <code>OdaDesignSession</code> interface is the starting point of 
+the API in the ODA design-time framework.  It contains a
+<code>DesignSessionRequest</code> and <code>DesignSessionResponse</code>,
+each of which contains pertinent design session information and 
+a <code>DataAccessDesign</code>.
+
+<!-- Put @see and @since tags down here. -->
+@since 3.0
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/util/.gitignore b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/util/.gitignore
new file mode 100644
index 0000000..5f0827c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/util/.gitignore
@@ -0,0 +1 @@
+vs*ver.*
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/util/DesignAdapterFactory.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/util/DesignAdapterFactory.java
new file mode 100644
index 0000000..b32ab92
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/util/DesignAdapterFactory.java
@@ -0,0 +1,1334 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DesignAdapterFactory.java,v 1.9 2010/06/10 23:40:04 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.util;
+
+import org.eclipse.datatools.connectivity.oda.design.*;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage
+ * @generated
+ */
+public class DesignAdapterFactory extends AdapterFactoryImpl
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached model package.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static DesignPackage modelPackage;
+
+    /**
+     * Creates an instance of the adapter factory.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DesignAdapterFactory()
+    {
+        if( modelPackage == null )
+        {
+            modelPackage = DesignPackage.eINSTANCE;
+        }
+    }
+
+    /**
+     * Returns whether this factory is applicable for the type of the object.
+     * <!-- begin-user-doc -->
+     * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+     * <!-- end-user-doc -->
+     * @return whether this factory is applicable for the type of the object.
+     * @generated
+     */
+    @Override
+    public boolean isFactoryForType( Object object )
+    {
+        if( object == modelPackage )
+        {
+            return true;
+        }
+        if( object instanceof EObject )
+        {
+            return ((EObject) object).eClass().getEPackage() == modelPackage;
+        }
+        return false;
+    }
+
+    /**
+     * The switch that delegates to the <code>createXXX</code> methods.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected DesignSwitch<Adapter> modelSwitch = new DesignSwitch<Adapter>()
+    {
+        @Override
+        public Adapter caseAndExpression( AndExpression object )
+        {
+            return createAndExpressionAdapter();
+        }
+
+        @Override
+        public Adapter caseAtomicExpressionContext(
+                AtomicExpressionContext object )
+        {
+            return createAtomicExpressionContextAdapter();
+        }
+
+        @Override
+        public Adapter caseAxisAttributes( AxisAttributes object )
+        {
+            return createAxisAttributesAdapter();
+        }
+
+        @Override
+        public Adapter caseColumnDefinition( ColumnDefinition object )
+        {
+            return createColumnDefinitionAdapter();
+        }
+
+        @Override
+        public Adapter caseCompositeFilterExpression(
+                CompositeFilterExpression object )
+        {
+            return createCompositeFilterExpressionAdapter();
+        }
+
+        @Override
+        public Adapter caseCustomData( CustomData object )
+        {
+            return createCustomDataAdapter();
+        }
+
+        @Override
+        public Adapter caseCustomFilterExpression( CustomFilterExpression object )
+        {
+            return createCustomFilterExpressionAdapter();
+        }
+
+        @Override
+        public Adapter caseDataAccessDesign( DataAccessDesign object )
+        {
+            return createDataAccessDesignAdapter();
+        }
+
+        @Override
+        public Adapter caseDataElementAttributes( DataElementAttributes object )
+        {
+            return createDataElementAttributesAdapter();
+        }
+
+        @Override
+        public Adapter caseDataElementIdentifier( DataElementIdentifier object )
+        {
+            return createDataElementIdentifierAdapter();
+        }
+
+        @Override
+        public Adapter caseDataElementIdentifiers( DataElementIdentifiers object )
+        {
+            return createDataElementIdentifiersAdapter();
+        }
+
+        @Override
+        public Adapter caseDataElementUIHints( DataElementUIHints object )
+        {
+            return createDataElementUIHintsAdapter();
+        }
+
+        @Override
+        public Adapter caseDataSetDesign( DataSetDesign object )
+        {
+            return createDataSetDesignAdapter();
+        }
+
+        @Override
+        public Adapter caseDataSetParameters( DataSetParameters object )
+        {
+            return createDataSetParametersAdapter();
+        }
+
+        @Override
+        public Adapter caseDataSetQuery( DataSetQuery object )
+        {
+            return createDataSetQueryAdapter();
+        }
+
+        @Override
+        public Adapter caseDataSourceDesign( DataSourceDesign object )
+        {
+            return createDataSourceDesignAdapter();
+        }
+
+        @Override
+        public Adapter caseDesignerState( DesignerState object )
+        {
+            return createDesignerStateAdapter();
+        }
+
+        @Override
+        public Adapter caseDesignerStateContent( DesignerStateContent object )
+        {
+            return createDesignerStateContentAdapter();
+        }
+
+        @Override
+        public Adapter caseDesignSessionRequest( DesignSessionRequest object )
+        {
+            return createDesignSessionRequestAdapter();
+        }
+
+        @Override
+        public Adapter caseDesignSessionResponse( DesignSessionResponse object )
+        {
+            return createDesignSessionResponseAdapter();
+        }
+
+        @Override
+        public Adapter caseDocumentRoot( DocumentRoot object )
+        {
+            return createDocumentRootAdapter();
+        }
+
+        @Override
+        public Adapter caseDynamicFilterExpression(
+                DynamicFilterExpression object )
+        {
+            return createDynamicFilterExpressionAdapter();
+        }
+
+        @Override
+        public Adapter caseDynamicValuesQuery( DynamicValuesQuery object )
+        {
+            return createDynamicValuesQueryAdapter();
+        }
+
+        @Override
+        public Adapter caseExpressionArguments( ExpressionArguments object )
+        {
+            return createExpressionArgumentsAdapter();
+        }
+
+        @Override
+        public Adapter caseExpressionParameterDefinition(
+                ExpressionParameterDefinition object )
+        {
+            return createExpressionParameterDefinitionAdapter();
+        }
+
+        @Override
+        public Adapter caseExpressionParameters( ExpressionParameters object )
+        {
+            return createExpressionParametersAdapter();
+        }
+
+        @Override
+        public Adapter caseExpressionVariable( ExpressionVariable object )
+        {
+            return createExpressionVariableAdapter();
+        }
+
+        @Override
+        public Adapter caseFilterExpression( FilterExpression object )
+        {
+            return createFilterExpressionAdapter();
+        }
+
+        @Override
+        public Adapter caseFilterExpressionType( FilterExpressionType object )
+        {
+            return createFilterExpressionTypeAdapter();
+        }
+
+        @Override
+        public Adapter caseInputElementAttributes( InputElementAttributes object )
+        {
+            return createInputElementAttributesAdapter();
+        }
+
+        @Override
+        public Adapter caseInputElementUIHints( InputElementUIHints object )
+        {
+            return createInputElementUIHintsAdapter();
+        }
+
+        @Override
+        public Adapter caseInputParameterAttributes(
+                InputParameterAttributes object )
+        {
+            return createInputParameterAttributesAdapter();
+        }
+
+        @Override
+        public Adapter caseInputParameterUIHints( InputParameterUIHints object )
+        {
+            return createInputParameterUIHintsAdapter();
+        }
+
+        @Override
+        public Adapter caseLocale( Locale object )
+        {
+            return createLocaleAdapter();
+        }
+
+        @Override
+        public Adapter caseNameValuePair( NameValuePair object )
+        {
+            return createNameValuePairAdapter();
+        }
+
+        @Override
+        public Adapter caseNotExpression( NotExpression object )
+        {
+            return createNotExpressionAdapter();
+        }
+
+        @Override
+        public Adapter caseOdaDesignSession( OdaDesignSession object )
+        {
+            return createOdaDesignSessionAdapter();
+        }
+
+        @Override
+        public Adapter caseOrExpression( OrExpression object )
+        {
+            return createOrExpressionAdapter();
+        }
+
+        @Override
+        public Adapter caseOutputElementAttributes(
+                OutputElementAttributes object )
+        {
+            return createOutputElementAttributesAdapter();
+        }
+
+        @Override
+        public Adapter caseParameterDefinition( ParameterDefinition object )
+        {
+            return createParameterDefinitionAdapter();
+        }
+
+        @Override
+        public Adapter caseParameterFieldDefinition(
+                ParameterFieldDefinition object )
+        {
+            return createParameterFieldDefinitionAdapter();
+        }
+
+        @Override
+        public Adapter caseParameterFields( ParameterFields object )
+        {
+            return createParameterFieldsAdapter();
+        }
+
+        @Override
+        public Adapter caseProperties( Properties object )
+        {
+            return createPropertiesAdapter();
+        }
+
+        @Override
+        public Adapter caseProperty( Property object )
+        {
+            return createPropertyAdapter();
+        }
+
+        @Override
+        public Adapter casePropertyAttributes( PropertyAttributes object )
+        {
+            return createPropertyAttributesAdapter();
+        }
+
+        @Override
+        public Adapter caseResourceIdentifiers( ResourceIdentifiers object )
+        {
+            return createResourceIdentifiersAdapter();
+        }
+
+        @Override
+        public Adapter caseResultSetColumns( ResultSetColumns object )
+        {
+            return createResultSetColumnsAdapter();
+        }
+
+        @Override
+        public Adapter caseResultSetCriteria( ResultSetCriteria object )
+        {
+            return createResultSetCriteriaAdapter();
+        }
+
+        @Override
+        public Adapter caseResultSetDefinition( ResultSetDefinition object )
+        {
+            return createResultSetDefinitionAdapter();
+        }
+
+        @Override
+        public Adapter caseResultSets( ResultSets object )
+        {
+            return createResultSetsAdapter();
+        }
+
+        @Override
+        public Adapter caseResultSubset( ResultSubset object )
+        {
+            return createResultSubsetAdapter();
+        }
+
+        @Override
+        public Adapter caseScalarValueChoices( ScalarValueChoices object )
+        {
+            return createScalarValueChoicesAdapter();
+        }
+
+        @Override
+        public Adapter caseScalarValueDefinition( ScalarValueDefinition object )
+        {
+            return createScalarValueDefinitionAdapter();
+        }
+
+        @Override
+        public Adapter caseSortKey( SortKey object )
+        {
+            return createSortKeyAdapter();
+        }
+
+        @Override
+        public Adapter caseSortSpecification( SortSpecification object )
+        {
+            return createSortSpecificationAdapter();
+        }
+
+        @Override
+        public Adapter caseStaticValues( StaticValues object )
+        {
+            return createStaticValuesAdapter();
+        }
+
+        @Override
+        public Adapter caseValueFormatHints( ValueFormatHints object )
+        {
+            return createValueFormatHintsAdapter();
+        }
+
+        @Override
+        public Adapter defaultCase( EObject object )
+        {
+            return createEObjectAdapter();
+        }
+    };
+
+    /**
+     * Creates an adapter for the <code>target</code>.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param target the object to adapt.
+     * @return the adapter for the <code>target</code>.
+     * @generated
+     */
+    @Override
+    public Adapter createAdapter( Notifier target )
+    {
+        return modelSwitch.doSwitch( (EObject) target );
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.AndExpression <em>And Expression</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.AndExpression
+     * @generated
+     */
+    public Adapter createAndExpressionAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.AtomicExpressionContext <em>Atomic Expression Context</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.AtomicExpressionContext
+     * @generated
+     */
+    public Adapter createAtomicExpressionContextAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.AxisAttributes <em>Axis Attributes</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.AxisAttributes
+     * @generated
+     */
+    public Adapter createAxisAttributesAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.ColumnDefinition <em>Column Definition</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.ColumnDefinition
+     * @generated
+     */
+    public Adapter createColumnDefinitionAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.CompositeFilterExpression <em>Composite Filter Expression</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.CompositeFilterExpression
+     * @generated
+     */
+    public Adapter createCompositeFilterExpressionAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.CustomData <em>Custom Data</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.CustomData
+     * @generated
+     */
+    public Adapter createCustomDataAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.CustomFilterExpression <em>Custom Filter Expression</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.CustomFilterExpression
+     * @generated
+     */
+    public Adapter createCustomFilterExpressionAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.DataAccessDesign <em>Data Access Design</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataAccessDesign
+     * @generated
+     */
+    public Adapter createDataAccessDesignAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.DataElementAttributes <em>Data Element Attributes</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementAttributes
+     * @generated
+     */
+    public Adapter createDataElementAttributesAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.DataElementIdentifier <em>Data Element Identifier</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementIdentifier
+     * @generated
+     */
+    public Adapter createDataElementIdentifierAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.DataElementIdentifiers <em>Data Element Identifiers</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementIdentifiers
+     * @generated
+     */
+    public Adapter createDataElementIdentifiersAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.DataElementUIHints <em>Data Element UI Hints</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataElementUIHints
+     * @generated
+     */
+    public Adapter createDataElementUIHintsAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.DataSetDesign <em>Data Set Design</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSetDesign
+     * @generated
+     */
+    public Adapter createDataSetDesignAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.DataSetParameters <em>Data Set Parameters</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSetParameters
+     * @generated
+     */
+    public Adapter createDataSetParametersAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.DataSetQuery <em>Data Set Query</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSetQuery
+     * @generated
+     */
+    public Adapter createDataSetQueryAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.DataSourceDesign <em>Data Source Design</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.DataSourceDesign
+     * @generated
+     */
+    public Adapter createDataSourceDesignAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.DesignerState <em>Designer State</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignerState
+     * @generated
+     */
+    public Adapter createDesignerStateAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.DesignerStateContent <em>Designer State Content</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignerStateContent
+     * @generated
+     */
+    public Adapter createDesignerStateContentAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest <em>Session Request</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest
+     * @generated
+     */
+    public Adapter createDesignSessionRequestAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.DesignSessionResponse <em>Session Response</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.DesignSessionResponse
+     * @generated
+     */
+    public Adapter createDesignSessionResponseAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.DocumentRoot <em>Document Root</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.DocumentRoot
+     * @generated
+     */
+    public Adapter createDocumentRootAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.DynamicFilterExpression <em>Dynamic Filter Expression</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.DynamicFilterExpression
+     * @generated
+     */
+    public Adapter createDynamicFilterExpressionAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery <em>Dynamic Values Query</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery
+     * @generated
+     */
+    public Adapter createDynamicValuesQueryAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.ExpressionArguments <em>Expression Arguments</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.ExpressionArguments
+     * @generated
+     */
+    public Adapter createExpressionArgumentsAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.ExpressionParameterDefinition <em>Expression Parameter Definition</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.ExpressionParameterDefinition
+     * @generated
+     */
+    public Adapter createExpressionParameterDefinitionAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.ExpressionParameters <em>Expression Parameters</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.ExpressionParameters
+     * @generated
+     */
+    public Adapter createExpressionParametersAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.ExpressionVariable <em>Expression Variable</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.ExpressionVariable
+     * @generated
+     */
+    public Adapter createExpressionVariableAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.FilterExpression <em>Filter Expression</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.FilterExpression
+     * @generated
+     */
+    public Adapter createFilterExpressionAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.FilterExpressionType <em>Filter Expression Type</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.FilterExpressionType
+     * @generated
+     */
+    public Adapter createFilterExpressionTypeAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.InputElementAttributes <em>Input Element Attributes</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.InputElementAttributes
+     * @generated
+     */
+    public Adapter createInputElementAttributesAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.InputElementUIHints <em>Input Element UI Hints</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.InputElementUIHints
+     * @generated
+     */
+    public Adapter createInputElementUIHintsAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.InputParameterAttributes <em>Input Parameter Attributes</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.InputParameterAttributes
+     * @generated
+     */
+    public Adapter createInputParameterAttributesAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.InputParameterUIHints <em>Input Parameter UI Hints</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.InputParameterUIHints
+     * @generated
+     */
+    public Adapter createInputParameterUIHintsAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.Locale <em>Locale</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.Locale
+     * @generated
+     */
+    public Adapter createLocaleAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.NameValuePair <em>Name Value Pair</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.NameValuePair
+     * @generated
+     */
+    public Adapter createNameValuePairAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.NotExpression <em>Not Expression</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.NotExpression
+     * @generated
+     */
+    public Adapter createNotExpressionAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.OdaDesignSession <em>Oda Design Session</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.OdaDesignSession
+     * @generated
+     */
+    public Adapter createOdaDesignSessionAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.OrExpression <em>Or Expression</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.OrExpression
+     * @generated
+     */
+    public Adapter createOrExpressionAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes <em>Output Element Attributes</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.OutputElementAttributes
+     * @generated
+     */
+    public Adapter createOutputElementAttributesAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.ParameterDefinition <em>Parameter Definition</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterDefinition
+     * @generated
+     */
+    public Adapter createParameterDefinitionAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.ParameterFieldDefinition <em>Parameter Field Definition</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterFieldDefinition
+     * @generated
+     */
+    public Adapter createParameterFieldDefinitionAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.ParameterFields <em>Parameter Fields</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.ParameterFields
+     * @generated
+     */
+    public Adapter createParameterFieldsAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.Properties <em>Properties</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.Properties
+     * @generated
+     */
+    public Adapter createPropertiesAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.Property <em>Property</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.Property
+     * @generated
+     */
+    public Adapter createPropertyAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.PropertyAttributes <em>Property Attributes</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.PropertyAttributes
+     * @generated
+     */
+    public Adapter createPropertyAttributesAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers <em>Resource Identifiers</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers
+     * @generated
+     */
+    public Adapter createResourceIdentifiersAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.ResultSetColumns <em>Result Set Columns</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.ResultSetColumns
+     * @generated
+     */
+    public Adapter createResultSetColumnsAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.ResultSetCriteria <em>Result Set Criteria</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.ResultSetCriteria
+     * @generated
+     */
+    public Adapter createResultSetCriteriaAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.ResultSetDefinition <em>Result Set Definition</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.ResultSetDefinition
+     * @generated
+     */
+    public Adapter createResultSetDefinitionAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.ResultSets <em>Result Sets</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.ResultSets
+     * @generated
+     */
+    public Adapter createResultSetsAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.ResultSubset <em>Result Subset</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.ResultSubset
+     * @generated
+     */
+    public Adapter createResultSubsetAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.ScalarValueChoices <em>Scalar Value Choices</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.ScalarValueChoices
+     * @generated
+     */
+    public Adapter createScalarValueChoicesAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.ScalarValueDefinition <em>Scalar Value Definition</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.ScalarValueDefinition
+     * @generated
+     */
+    public Adapter createScalarValueDefinitionAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.SortKey <em>Sort Key</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.SortKey
+     * @generated
+     */
+    public Adapter createSortKeyAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.SortSpecification <em>Sort Specification</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.SortSpecification
+     * @generated
+     */
+    public Adapter createSortSpecificationAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.StaticValues <em>Static Values</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.StaticValues
+     * @generated
+     */
+    public Adapter createStaticValuesAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for an object of class '{@link org.eclipse.datatools.connectivity.oda.design.ValueFormatHints <em>Value Format Hints</em>}'.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null so that we can easily ignore cases;
+     * it's useful to ignore a case when inheritance will catch all the cases anyway.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @see org.eclipse.datatools.connectivity.oda.design.ValueFormatHints
+     * @generated
+     */
+    public Adapter createValueFormatHintsAdapter()
+    {
+        return null;
+    }
+
+    /**
+     * Creates a new adapter for the default case.
+     * <!-- begin-user-doc -->
+     * This default implementation returns null.
+     * <!-- end-user-doc -->
+     * @return the new adapter.
+     * @generated
+     */
+    public Adapter createEObjectAdapter()
+    {
+        return null;
+    }
+
+} //DesignAdapterFactory
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/util/DesignResourceFactoryImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/util/DesignResourceFactoryImpl.java
new file mode 100644
index 0000000..9400a72
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/util/DesignResourceFactoryImpl.java
@@ -0,0 +1,78 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DesignResourceFactoryImpl.java,v 1.2 2007/04/11 02:59:53 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.util;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.impl.ResourceFactoryImpl;
+import org.eclipse.emf.ecore.xmi.XMLResource;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Resource Factory</b> associated with the package.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.connectivity.oda.design.util.DesignResourceImpl
+ * @generated
+ */
+public class DesignResourceFactoryImpl extends ResourceFactoryImpl
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Creates an instance of the resource factory.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DesignResourceFactoryImpl()
+    {
+        super();
+    }
+
+    /**
+     * Creates an instance of the resource.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Resource createResource( URI uri )
+    {
+        XMLResource result = new DesignResourceImpl( uri );
+        result.getDefaultSaveOptions().put(
+                XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE );
+        result.getDefaultLoadOptions().put(
+                XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE );
+
+        result.getDefaultSaveOptions().put( XMLResource.OPTION_SCHEMA_LOCATION,
+                Boolean.TRUE );
+
+        result.getDefaultLoadOptions().put(
+                XMLResource.OPTION_USE_ENCODED_ATTRIBUTE_STYLE, Boolean.TRUE );
+        result.getDefaultSaveOptions().put(
+                XMLResource.OPTION_USE_ENCODED_ATTRIBUTE_STYLE, Boolean.TRUE );
+
+        result.getDefaultLoadOptions().put(
+                XMLResource.OPTION_USE_LEXICAL_HANDLER, Boolean.TRUE );
+        return result;
+    }
+
+} //DesignResourceFactoryImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/util/DesignResourceImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/util/DesignResourceImpl.java
new file mode 100644
index 0000000..cd107ce
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/util/DesignResourceImpl.java
@@ -0,0 +1,50 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DesignResourceImpl.java,v 1.1 2005/12/29 04:17:55 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.util;
+
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Resource </b> associated with the package.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.connectivity.oda.design.util.DesignResourceFactoryImpl
+ * @generated
+ */
+public class DesignResourceImpl extends XMLResourceImpl
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2007 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Creates an instance of the resource.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param uri the URI of the new resource.
+     * @generated
+     */
+    public DesignResourceImpl( URI uri )
+    {
+        super( uri );
+    }
+
+} //DesignResourceFactoryImpl
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/util/DesignSwitch.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/util/DesignSwitch.java
new file mode 100644
index 0000000..33bb961
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/util/DesignSwitch.java
@@ -0,0 +1,1519 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DesignSwitch.java,v 1.10 2010/06/10 23:40:04 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.util;
+
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.oda.design.*;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.connectivity.oda.design.DesignPackage
+ * @generated
+ */
+public class DesignSwitch<T>
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2010 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * The cached model package
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected static DesignPackage modelPackage;
+
+    /**
+     * Creates an instance of the switch.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DesignSwitch()
+    {
+        if( modelPackage == null )
+        {
+            modelPackage = DesignPackage.eINSTANCE;
+        }
+    }
+
+    /**
+     * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the first non-null result returned by a <code>caseXXX</code> call.
+     * @generated
+     */
+    public T doSwitch( EObject theEObject )
+    {
+        return doSwitch( theEObject.eClass(), theEObject );
+    }
+
+    /**
+     * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the first non-null result returned by a <code>caseXXX</code> call.
+     * @generated
+     */
+    protected T doSwitch( EClass theEClass, EObject theEObject )
+    {
+        if( theEClass.eContainer() == modelPackage )
+        {
+            return doSwitch( theEClass.getClassifierID(), theEObject );
+        }
+        else
+        {
+            List<EClass> eSuperTypes = theEClass.getESuperTypes();
+            return eSuperTypes.isEmpty() ? defaultCase( theEObject )
+                    : doSwitch( eSuperTypes.get( 0 ), theEObject );
+        }
+    }
+
+    /**
+     * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the first non-null result returned by a <code>caseXXX</code> call.
+     * @generated
+     */
+    protected T doSwitch( int classifierID, EObject theEObject )
+    {
+        switch( classifierID )
+        {
+        case DesignPackage.AND_EXPRESSION:
+        {
+            AndExpression andExpression = (AndExpression) theEObject;
+            T result = caseAndExpression( andExpression );
+            if( result == null )
+                result = caseCompositeFilterExpression( andExpression );
+            if( result == null )
+                result = caseFilterExpression( andExpression );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.ATOMIC_EXPRESSION_CONTEXT:
+        {
+            AtomicExpressionContext atomicExpressionContext = (AtomicExpressionContext) theEObject;
+            T result = caseAtomicExpressionContext( atomicExpressionContext );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.AXIS_ATTRIBUTES:
+        {
+            AxisAttributes axisAttributes = (AxisAttributes) theEObject;
+            T result = caseAxisAttributes( axisAttributes );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.COLUMN_DEFINITION:
+        {
+            ColumnDefinition columnDefinition = (ColumnDefinition) theEObject;
+            T result = caseColumnDefinition( columnDefinition );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.COMPOSITE_FILTER_EXPRESSION:
+        {
+            CompositeFilterExpression compositeFilterExpression = (CompositeFilterExpression) theEObject;
+            T result = caseCompositeFilterExpression( compositeFilterExpression );
+            if( result == null )
+                result = caseFilterExpression( compositeFilterExpression );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.CUSTOM_DATA:
+        {
+            CustomData customData = (CustomData) theEObject;
+            T result = caseCustomData( customData );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.CUSTOM_FILTER_EXPRESSION:
+        {
+            CustomFilterExpression customFilterExpression = (CustomFilterExpression) theEObject;
+            T result = caseCustomFilterExpression( customFilterExpression );
+            if( result == null )
+                result = caseFilterExpression( customFilterExpression );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.DATA_ACCESS_DESIGN:
+        {
+            DataAccessDesign dataAccessDesign = (DataAccessDesign) theEObject;
+            T result = caseDataAccessDesign( dataAccessDesign );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.DATA_ELEMENT_ATTRIBUTES:
+        {
+            DataElementAttributes dataElementAttributes = (DataElementAttributes) theEObject;
+            T result = caseDataElementAttributes( dataElementAttributes );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.DATA_ELEMENT_IDENTIFIER:
+        {
+            DataElementIdentifier dataElementIdentifier = (DataElementIdentifier) theEObject;
+            T result = caseDataElementIdentifier( dataElementIdentifier );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.DATA_ELEMENT_IDENTIFIERS:
+        {
+            DataElementIdentifiers dataElementIdentifiers = (DataElementIdentifiers) theEObject;
+            T result = caseDataElementIdentifiers( dataElementIdentifiers );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.DATA_ELEMENT_UI_HINTS:
+        {
+            DataElementUIHints dataElementUIHints = (DataElementUIHints) theEObject;
+            T result = caseDataElementUIHints( dataElementUIHints );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.DATA_SET_DESIGN:
+        {
+            DataSetDesign dataSetDesign = (DataSetDesign) theEObject;
+            T result = caseDataSetDesign( dataSetDesign );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.DATA_SET_PARAMETERS:
+        {
+            DataSetParameters dataSetParameters = (DataSetParameters) theEObject;
+            T result = caseDataSetParameters( dataSetParameters );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.DATA_SET_QUERY:
+        {
+            DataSetQuery dataSetQuery = (DataSetQuery) theEObject;
+            T result = caseDataSetQuery( dataSetQuery );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.DATA_SOURCE_DESIGN:
+        {
+            DataSourceDesign dataSourceDesign = (DataSourceDesign) theEObject;
+            T result = caseDataSourceDesign( dataSourceDesign );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.DESIGNER_STATE:
+        {
+            DesignerState designerState = (DesignerState) theEObject;
+            T result = caseDesignerState( designerState );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.DESIGNER_STATE_CONTENT:
+        {
+            DesignerStateContent designerStateContent = (DesignerStateContent) theEObject;
+            T result = caseDesignerStateContent( designerStateContent );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.DESIGN_SESSION_REQUEST:
+        {
+            DesignSessionRequest designSessionRequest = (DesignSessionRequest) theEObject;
+            T result = caseDesignSessionRequest( designSessionRequest );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.DESIGN_SESSION_RESPONSE:
+        {
+            DesignSessionResponse designSessionResponse = (DesignSessionResponse) theEObject;
+            T result = caseDesignSessionResponse( designSessionResponse );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.DOCUMENT_ROOT:
+        {
+            DocumentRoot documentRoot = (DocumentRoot) theEObject;
+            T result = caseDocumentRoot( documentRoot );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.DYNAMIC_FILTER_EXPRESSION:
+        {
+            DynamicFilterExpression dynamicFilterExpression = (DynamicFilterExpression) theEObject;
+            T result = caseDynamicFilterExpression( dynamicFilterExpression );
+            if( result == null )
+                result = caseFilterExpression( dynamicFilterExpression );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.DYNAMIC_VALUES_QUERY:
+        {
+            DynamicValuesQuery dynamicValuesQuery = (DynamicValuesQuery) theEObject;
+            T result = caseDynamicValuesQuery( dynamicValuesQuery );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.EXPRESSION_ARGUMENTS:
+        {
+            ExpressionArguments expressionArguments = (ExpressionArguments) theEObject;
+            T result = caseExpressionArguments( expressionArguments );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.EXPRESSION_PARAMETER_DEFINITION:
+        {
+            ExpressionParameterDefinition expressionParameterDefinition = (ExpressionParameterDefinition) theEObject;
+            T result = caseExpressionParameterDefinition( expressionParameterDefinition );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.EXPRESSION_PARAMETERS:
+        {
+            ExpressionParameters expressionParameters = (ExpressionParameters) theEObject;
+            T result = caseExpressionParameters( expressionParameters );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.EXPRESSION_VARIABLE:
+        {
+            ExpressionVariable expressionVariable = (ExpressionVariable) theEObject;
+            T result = caseExpressionVariable( expressionVariable );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.FILTER_EXPRESSION:
+        {
+            FilterExpression filterExpression = (FilterExpression) theEObject;
+            T result = caseFilterExpression( filterExpression );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.FILTER_EXPRESSION_TYPE:
+        {
+            FilterExpressionType filterExpressionType = (FilterExpressionType) theEObject;
+            T result = caseFilterExpressionType( filterExpressionType );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.INPUT_ELEMENT_ATTRIBUTES:
+        {
+            InputElementAttributes inputElementAttributes = (InputElementAttributes) theEObject;
+            T result = caseInputElementAttributes( inputElementAttributes );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.INPUT_ELEMENT_UI_HINTS:
+        {
+            InputElementUIHints inputElementUIHints = (InputElementUIHints) theEObject;
+            T result = caseInputElementUIHints( inputElementUIHints );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.INPUT_PARAMETER_ATTRIBUTES:
+        {
+            InputParameterAttributes inputParameterAttributes = (InputParameterAttributes) theEObject;
+            T result = caseInputParameterAttributes( inputParameterAttributes );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.INPUT_PARAMETER_UI_HINTS:
+        {
+            InputParameterUIHints inputParameterUIHints = (InputParameterUIHints) theEObject;
+            T result = caseInputParameterUIHints( inputParameterUIHints );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.LOCALE:
+        {
+            Locale locale = (Locale) theEObject;
+            T result = caseLocale( locale );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.NAME_VALUE_PAIR:
+        {
+            NameValuePair nameValuePair = (NameValuePair) theEObject;
+            T result = caseNameValuePair( nameValuePair );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.NOT_EXPRESSION:
+        {
+            NotExpression notExpression = (NotExpression) theEObject;
+            T result = caseNotExpression( notExpression );
+            if( result == null )
+                result = caseFilterExpression( notExpression );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.ODA_DESIGN_SESSION:
+        {
+            OdaDesignSession odaDesignSession = (OdaDesignSession) theEObject;
+            T result = caseOdaDesignSession( odaDesignSession );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.OR_EXPRESSION:
+        {
+            OrExpression orExpression = (OrExpression) theEObject;
+            T result = caseOrExpression( orExpression );
+            if( result == null )
+                result = caseCompositeFilterExpression( orExpression );
+            if( result == null )
+                result = caseFilterExpression( orExpression );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.OUTPUT_ELEMENT_ATTRIBUTES:
+        {
+            OutputElementAttributes outputElementAttributes = (OutputElementAttributes) theEObject;
+            T result = caseOutputElementAttributes( outputElementAttributes );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.PARAMETER_DEFINITION:
+        {
+            ParameterDefinition parameterDefinition = (ParameterDefinition) theEObject;
+            T result = caseParameterDefinition( parameterDefinition );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.PARAMETER_FIELD_DEFINITION:
+        {
+            ParameterFieldDefinition parameterFieldDefinition = (ParameterFieldDefinition) theEObject;
+            T result = caseParameterFieldDefinition( parameterFieldDefinition );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.PARAMETER_FIELDS:
+        {
+            ParameterFields parameterFields = (ParameterFields) theEObject;
+            T result = caseParameterFields( parameterFields );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.PROPERTIES:
+        {
+            Properties properties = (Properties) theEObject;
+            T result = caseProperties( properties );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.PROPERTY:
+        {
+            Property property = (Property) theEObject;
+            T result = caseProperty( property );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.PROPERTY_ATTRIBUTES:
+        {
+            PropertyAttributes propertyAttributes = (PropertyAttributes) theEObject;
+            T result = casePropertyAttributes( propertyAttributes );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.RESOURCE_IDENTIFIERS:
+        {
+            ResourceIdentifiers resourceIdentifiers = (ResourceIdentifiers) theEObject;
+            T result = caseResourceIdentifiers( resourceIdentifiers );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.RESULT_SET_COLUMNS:
+        {
+            ResultSetColumns resultSetColumns = (ResultSetColumns) theEObject;
+            T result = caseResultSetColumns( resultSetColumns );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.RESULT_SET_CRITERIA:
+        {
+            ResultSetCriteria resultSetCriteria = (ResultSetCriteria) theEObject;
+            T result = caseResultSetCriteria( resultSetCriteria );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.RESULT_SET_DEFINITION:
+        {
+            ResultSetDefinition resultSetDefinition = (ResultSetDefinition) theEObject;
+            T result = caseResultSetDefinition( resultSetDefinition );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.RESULT_SETS:
+        {
+            ResultSets resultSets = (ResultSets) theEObject;
+            T result = caseResultSets( resultSets );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.RESULT_SUBSET:
+        {
+            ResultSubset resultSubset = (ResultSubset) theEObject;
+            T result = caseResultSubset( resultSubset );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.SCALAR_VALUE_CHOICES:
+        {
+            ScalarValueChoices scalarValueChoices = (ScalarValueChoices) theEObject;
+            T result = caseScalarValueChoices( scalarValueChoices );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.SCALAR_VALUE_DEFINITION:
+        {
+            ScalarValueDefinition scalarValueDefinition = (ScalarValueDefinition) theEObject;
+            T result = caseScalarValueDefinition( scalarValueDefinition );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.SORT_KEY:
+        {
+            SortKey sortKey = (SortKey) theEObject;
+            T result = caseSortKey( sortKey );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.SORT_SPECIFICATION:
+        {
+            SortSpecification sortSpecification = (SortSpecification) theEObject;
+            T result = caseSortSpecification( sortSpecification );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.STATIC_VALUES:
+        {
+            StaticValues staticValues = (StaticValues) theEObject;
+            T result = caseStaticValues( staticValues );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        case DesignPackage.VALUE_FORMAT_HINTS:
+        {
+            ValueFormatHints valueFormatHints = (ValueFormatHints) theEObject;
+            T result = caseValueFormatHints( valueFormatHints );
+            if( result == null )
+                result = defaultCase( theEObject );
+            return result;
+        }
+        default:
+            return defaultCase( theEObject );
+        }
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>And Expression</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>And Expression</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseAndExpression( AndExpression object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Atomic Expression Context</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Atomic Expression Context</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseAtomicExpressionContext( AtomicExpressionContext object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Axis Attributes</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Axis Attributes</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseAxisAttributes( AxisAttributes object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Column Definition</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Column Definition</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseColumnDefinition( ColumnDefinition object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Composite Filter Expression</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Composite Filter Expression</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseCompositeFilterExpression( CompositeFilterExpression object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Custom Data</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Custom Data</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseCustomData( CustomData object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Custom Filter Expression</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Custom Filter Expression</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseCustomFilterExpression( CustomFilterExpression object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Data Access Design</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Data Access Design</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseDataAccessDesign( DataAccessDesign object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Data Element Attributes</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Data Element Attributes</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseDataElementAttributes( DataElementAttributes object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Data Element Identifier</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Data Element Identifier</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseDataElementIdentifier( DataElementIdentifier object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Data Element Identifiers</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Data Element Identifiers</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseDataElementIdentifiers( DataElementIdentifiers object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Data Element UI Hints</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Data Element UI Hints</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseDataElementUIHints( DataElementUIHints object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Data Set Design</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Data Set Design</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseDataSetDesign( DataSetDesign object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Data Set Parameters</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Data Set Parameters</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseDataSetParameters( DataSetParameters object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Data Set Query</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Data Set Query</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseDataSetQuery( DataSetQuery object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Data Source Design</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Data Source Design</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseDataSourceDesign( DataSourceDesign object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Designer State</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Designer State</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseDesignerState( DesignerState object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Designer State Content</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Designer State Content</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseDesignerStateContent( DesignerStateContent object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Session Request</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Session Request</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseDesignSessionRequest( DesignSessionRequest object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Session Response</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Session Response</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseDesignSessionResponse( DesignSessionResponse object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Document Root</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Document Root</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseDocumentRoot( DocumentRoot object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Dynamic Filter Expression</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Dynamic Filter Expression</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseDynamicFilterExpression( DynamicFilterExpression object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Dynamic Values Query</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Dynamic Values Query</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseDynamicValuesQuery( DynamicValuesQuery object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Expression Arguments</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Expression Arguments</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseExpressionArguments( ExpressionArguments object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Expression Parameter Definition</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Expression Parameter Definition</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseExpressionParameterDefinition(
+            ExpressionParameterDefinition object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Expression Parameters</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Expression Parameters</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseExpressionParameters( ExpressionParameters object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Expression Variable</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Expression Variable</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseExpressionVariable( ExpressionVariable object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Filter Expression</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Filter Expression</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseFilterExpression( FilterExpression object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Filter Expression Type</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Filter Expression Type</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseFilterExpressionType( FilterExpressionType object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Input Element Attributes</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Input Element Attributes</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseInputElementAttributes( InputElementAttributes object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Input Element UI Hints</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Input Element UI Hints</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseInputElementUIHints( InputElementUIHints object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Input Parameter Attributes</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Input Parameter Attributes</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseInputParameterAttributes( InputParameterAttributes object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Input Parameter UI Hints</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Input Parameter UI Hints</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseInputParameterUIHints( InputParameterUIHints object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Locale</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Locale</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseLocale( Locale object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Name Value Pair</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Name Value Pair</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseNameValuePair( NameValuePair object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Not Expression</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Not Expression</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseNotExpression( NotExpression object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Oda Design Session</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Oda Design Session</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseOdaDesignSession( OdaDesignSession object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Or Expression</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Or Expression</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseOrExpression( OrExpression object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Output Element Attributes</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Output Element Attributes</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseOutputElementAttributes( OutputElementAttributes object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Parameter Definition</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Parameter Definition</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseParameterDefinition( ParameterDefinition object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Parameter Field Definition</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Parameter Field Definition</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseParameterFieldDefinition( ParameterFieldDefinition object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Parameter Fields</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Parameter Fields</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseParameterFields( ParameterFields object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Properties</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Properties</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseProperties( Properties object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Property</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Property</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseProperty( Property object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Property Attributes</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Property Attributes</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T casePropertyAttributes( PropertyAttributes object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Resource Identifiers</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Resource Identifiers</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseResourceIdentifiers( ResourceIdentifiers object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Result Set Columns</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Result Set Columns</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseResultSetColumns( ResultSetColumns object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Result Set Criteria</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Result Set Criteria</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseResultSetCriteria( ResultSetCriteria object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Result Set Definition</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Result Set Definition</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseResultSetDefinition( ResultSetDefinition object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Result Sets</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Result Sets</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseResultSets( ResultSets object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Result Subset</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Result Subset</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseResultSubset( ResultSubset object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Scalar Value Choices</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Scalar Value Choices</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseScalarValueChoices( ScalarValueChoices object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Scalar Value Definition</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Scalar Value Definition</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseScalarValueDefinition( ScalarValueDefinition object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Sort Key</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Sort Key</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseSortKey( SortKey object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Sort Specification</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Sort Specification</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseSortSpecification( SortSpecification object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Static Values</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Static Values</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseStaticValues( StaticValues object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>Value Format Hints</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>Value Format Hints</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+     * @generated
+     */
+    public T caseValueFormatHints( ValueFormatHints object )
+    {
+        return null;
+    }
+
+    /**
+     * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+     * <!-- begin-user-doc -->
+     * This implementation returns null;
+     * returning a non-null result will terminate the switch, but this is the last case anyway.
+     * <!-- end-user-doc -->
+     * @param object the target of the switch.
+     * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+     * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+     * @generated
+     */
+    public T defaultCase( EObject object )
+    {
+        return null;
+    }
+
+} //DesignSwitch
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/util/DesignUtil.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/util/DesignUtil.java
new file mode 100644
index 0000000..1d86236
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/util/DesignUtil.java
@@ -0,0 +1,854 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2006, 2012 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DesignUtil.java,v 1.21 2011/03/08 22:59:10 lchan Exp $
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.util;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.Map.Entry;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.oda.design.ColumnDefinition;
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.datatools.connectivity.oda.design.DesignSessionRequest;
+import org.eclipse.datatools.connectivity.oda.design.DocumentRoot;
+import org.eclipse.datatools.connectivity.oda.design.ExpressionVariable;
+import org.eclipse.datatools.connectivity.oda.design.ExpressionVariableType;
+import org.eclipse.datatools.connectivity.oda.design.OdaDesignSession;
+import org.eclipse.datatools.connectivity.oda.design.Properties;
+import org.eclipse.datatools.connectivity.oda.design.Property;
+import org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers;
+import org.eclipse.datatools.connectivity.oda.design.ResultSetColumns;
+import org.eclipse.datatools.connectivity.oda.design.SortKey;
+import org.eclipse.datatools.connectivity.oda.design.nls.Messages;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.DiagnosticException;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EValidator;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.util.Diagnostician;
+
+/**
+ * An utility class to handle the ODA Design API objects.
+ * @generated NOT
+ */
+public class DesignUtil
+{
+    private static final String RESOURCE_KEY_PREFIX = "%"; //$NON-NLS-1$
+    private static final String RESOURCE_KEY_DOUBLE_PREFIX = "%%"; //$NON-NLS-1$ 
+    private static final char RESOURCE_KEY_SEPARATOR = ' ';
+    private static Diagnostician sm_diagnostician;
+    static final String PLUGIN_ID = "org.eclipse.datatools.connectivity.oda.design"; //$NON-NLS-1$
+    
+    // trace logging variables
+    private static final String sm_loggerName = "org.eclipse.datatools.connectivity.oda.design.util"; //$NON-NLS-1$
+    private static String sm_className;
+    private static Logger sm_logger;
+    
+    // class has static methods only; not intended to instantiate
+    private DesignUtil()
+    {
+    }
+    
+    /**
+     * Validates the given EMF object is valid and has all required
+     * elements. 
+     * @param eObject   an EMF object
+     * @throws IllegalStateException    if the given object is not valid
+     *                  and have error diagnostics;
+     *                  the exception thrown includes all error and warning
+     *                  diagnostic messages found in given object
+     */
+    public static void validateObject( EObject eObject )
+        throws IllegalStateException
+    {
+        final String context = "validateObject";  //$NON-NLS-1$
+        
+        Diagnostic diagnostic = diagnoseObject( eObject );
+        if( diagnostic == null || 
+            diagnostic.getSeverity() == Diagnostic.OK )
+            return;     // eObject is valid
+        
+        // found error diagnostic(s), thrown exception 
+        // with all error and warning messages
+        if( diagnostic.getSeverity() == Diagnostic.ERROR )
+        {
+            String errWarnMsg = getDiagnosticMessages( diagnostic, 
+                                        Diagnostic.ERROR,
+                                        Diagnostic.WARNING );
+    
+            throw new IllegalStateException( errWarnMsg );
+        }
+        
+        // only found warning or informational diagnostic(s), 
+        // simply log it; the given object is considered valid
+        String diagnosticMsg = getDiagnosticMessages( diagnostic, 
+                                    Diagnostic.WARNING,
+                                    Diagnostic.INFO );
+        
+        if( diagnostic.getSeverity() == Diagnostic.WARNING )
+        {
+            Throwable ex = new DiagnosticException( diagnostic );           
+            getLogger().logp( Level.WARNING, sm_className, context,
+                                diagnosticMsg, ex ); 
+        }
+        else    // informational diagnostic(s) only
+        {
+            getLogger().logp( Level.INFO, sm_className, context,
+                                diagnosticMsg ); 
+        }
+        return;     // eObject is considered valid
+    }
+
+    /**
+     * Diagnoses the given EMF object, and returns the diagnostic result found. 
+     * @param eObject   an EMF object
+     * @return  the diagnostic result, or null if no diagnostic result found 
+     */
+    public static Diagnostic diagnoseObject( EObject eObject )
+    {
+        if( ! canDiagnose() )
+            return null;    // assumes eObject is valid
+        
+        Diagnostician designDiagnostician = getDiagnostician();
+        return designDiagnostician.validate( eObject );
+    }
+    
+    /**
+     * Returns the Diagnostician for the ODA Design model,
+     * using a validator registry with specialized design validator(s).
+     * @return Diagnostician
+     */
+    private static Diagnostician getDiagnostician()
+    {
+        if( sm_diagnostician == null )
+        {
+            synchronized( DesignUtil.class )
+            {
+                if( sm_diagnostician == null )
+                {
+                    EValidator.Registry eValidatorRegistry = EValidator.Registry.INSTANCE;
+            
+                    // add specialized design validator(s) to registry
+                    // for use by Diagnostician
+                    eValidatorRegistry.put( (EPackage) DesignPackage.Literals.DATA_SET_QUERY.eContainer(),
+                                            new DesignValidator() );
+                    sm_diagnostician = new Diagnostician( eValidatorRegistry );
+                }
+            }
+        }
+        
+        return sm_diagnostician;
+    }
+    
+    /**
+     * Concatenates and returns all messages of the two specified messageTypes
+     * from given diagnostic.
+     */   
+    private static String getDiagnosticMessages( Diagnostic diagnostic,
+                                    int messageType1, int messageType2 )
+    {
+        if( diagnostic == null )
+            return null;
+
+        String errMsg = diagnostic.getMessage();
+        for( Diagnostic childDiagnostic : diagnostic.getChildren() )
+        {
+            if( childDiagnostic.getSeverity() == messageType1 ||
+                childDiagnostic.getSeverity() == messageType2 )
+            {
+                errMsg += "\n" + childDiagnostic.getMessage(); //$NON-NLS-1$
+            }
+        }
+
+        return errMsg;
+    }
+    
+    /**
+     * When loading EMF plugins in a runtime web application in Eclipse 3.3, 
+     * Plugin.start() of 3 EMF plug-ins were not called. 
+     * This led to null bundles of those EMF plug-ins, and triggers NPE when tried 
+     * to use the associated resource bundles (Eclipse Bugzilla 200892).
+     * Before a fix is available, this work-around attempts to detect this use case,
+     * and logs a warning message. 
+     * The caller can then avoid the use of the emf.ecore Diagnostician class, 
+     * which triggers a NPE in accessing its resource bundle.
+     */
+    private static boolean canDiagnose()
+    {
+        return true;
+        
+        /* below workaround assumes that EMF is used in 
+         * plugin mode, which is not necessarily true; 
+         * keep the code commented for now
+         */
+/*        
+        final String methodName = "canDiagnose()"; //$NON-NLS-1$   
+        final String CANT_DIAGNOSE_WARNING_MSG = "Unable to diagnose ODA design objects, possibly due to unavailablity of the EcorePlugin resource bundle";  //$NON-NLS-1$
+
+        boolean canDiagnose = ( EcorePlugin.getPlugin() != null &&
+                 EcorePlugin.getPlugin().getBundle() != null );
+        
+        if( ! canDiagnose )
+            getLogger().logp( Level.WARNING, sm_className, methodName, CANT_DIAGNOSE_WARNING_MSG );
+        
+        return canDiagnose;
+*/    }
+    
+    /**
+     * Converts the public and private properties defined in an 
+     * ODA data source design definition, and returns in a combined
+     * java.util.Properties collection.
+     * @param dataSourceDesign
+     * @return
+     */
+    public static java.util.Properties convertDataSourceProperties( DataSourceDesign dataSourceDesign )
+    {
+        if( dataSourceDesign == null )
+            return new java.util.Properties();
+
+        java.util.Properties publicProps = convertDesignProperties( 
+                dataSourceDesign.getPublicProperties() );
+        java.util.Properties propCollection = convertDesignProperties( 
+                dataSourceDesign.getPrivateProperties() );
+
+        // merge public and private properties, with public values
+        // taking precedence if same property key is used
+        propCollection.putAll( publicProps );
+        return propCollection;        
+    }
+
+    /**
+     * Converts the given design properties defined in an 
+     * ODA data source or data set design definition, to
+     * a java.util.Properties collection.
+     * @param designProps   the ODA design properties to convert from
+     * @return              converted properties in a java.util.Properties collection
+     */
+    public static java.util.Properties convertDesignProperties( Properties designProps )
+    {
+        java.util.Properties utilProps = new java.util.Properties();
+        if( designProps == null || designProps.isEmpty() )
+            return utilProps;  // return an empty collection
+        
+        for( Property designProp : designProps.getProperties() )
+        {
+            // util collection does not allow null name or value;
+            // excludes the property in such case, which would allow
+            // consumer to get a null value 
+            // when a property name is not found in collection
+            if( designProp.getNameValue() == null ||
+                designProp.getNameValue().getName() == null ||
+                designProp.getNameValue().getValue() == null )
+                continue;   // skip property
+            
+            utilProps.setProperty( designProp.getNameValue().getName(),
+                                   designProp.getNameValue().getValue() );
+        }
+        return utilProps;
+    }
+    
+    /**
+     * Converts the given java.util.Properties collection 
+     * to ODA design properties that can be applied in an 
+     * ODA data source or data set design definition.
+     * @param utilProps the java.util.Properties collection to convert from
+     * @return          converted properties in a design properties collection
+     */
+    public static Properties convertToDesignProperties( 
+                                java.util.Properties utilProps )
+    {
+        Properties designProps = 
+            DesignFactory.eINSTANCE.createProperties();
+        if( utilProps == null || utilProps.size() == 0 )
+            return designProps;  // return an empty collection
+        
+        for( Entry<Object, Object> utilProp : utilProps.entrySet() )
+        {
+            designProps.setProperty( (String) utilProp.getKey(), 
+                                    (String) utilProp.getValue() );
+        }
+
+        return designProps;   
+    }
+
+    /**
+     * Validates the specified design session request.
+     * If valid, returns the request's ODA data source element id.
+     * @param requestSession
+     * @return
+     * @throws IllegalStateException if specified session request is invalid
+     */
+    public static String validateRequestSession( 
+                    DesignSessionRequest requestSession )
+        throws IllegalStateException
+    {
+        if( requestSession == null )
+            throw new IllegalStateException( Messages.design_nullArgument );
+    
+        validateObject( requestSession );
+    
+        // validate the given request' data source design
+        DataSourceDesign dataSourceDesign = 
+                    requestSession.getDataSourceDesign();
+        if( dataSourceDesign == null )
+            throw new IllegalStateException( Messages.design_missingDataSourceDesign );
+    
+        String odaDataSourceId = dataSourceDesign.getOdaExtensionDataSourceId();
+        if( odaDataSourceId == null || odaDataSourceId.length() == 0 )
+            throw new IllegalStateException( Messages.design_missingId );
+    
+        // done validation
+        return odaDataSourceId;
+    }
+
+    /**
+     * Validates the specified data source design instance.
+     * @param dataSourceDesign
+     * @throws IllegalStateException if specified design is invalid
+     */
+    public static void validateDataSourceDesign( 
+                        DataSourceDesign dataSourceDesign )
+        throws IllegalStateException
+    {
+        if( dataSourceDesign == null )
+            throw new IllegalStateException( Messages.design_nullArgument );
+    
+        validateObject( dataSourceDesign );
+    }
+    
+    /**
+     * Converts the specified string representation of a file pathname,
+     * persisted in an oda design model, to its abstract representation.
+     * @param filePath  the string representation of a file
+     * @return  the abstract representation of a file pathname,
+     *          or null if the specified argument is null, invalid or
+     *          the file does not exist
+     * @since 3.0.4
+     * @see #convertPathToResourceFile(String, ResourceIdentifiers)
+     * @see #convertFileToPath(File)
+     */
+    public static File convertPathToFile( String filePath )
+    {
+        return convertPathToResourceFile( filePath, null );
+    }
+    
+    /**
+     * Converts the specified string representation of a file pathname,
+     * persisted in an oda design model, to its abstract absolute representation.
+     * @param filePath  the string representation of a file, 
+     *          may be an absolute file path, or relative path based on the specified designResourceIds
+     * @param designResourceIds   a design resource identifier instance
+     *          defined by the host application
+     * @return  the abstract representation of an absolute file pathname,
+     *          or null if the specified filePath argument is null, invalid or
+     *          the file does not exist
+     * @since 3.3.4 (DTP 1.9.2)
+     */
+    public static File convertPathToResourceFile( String filePath, ResourceIdentifiers designResourceIds )
+    {
+        if( filePath == null || filePath.length() == 0 )
+            return null;
+
+       // First try to parse the filePath argument as file name
+        File file = new File( filePath );
+        if( file.exists() )
+            return file;
+
+        // try to resolve a relative file path based on design resource identifiers, if defined
+        if( designResourceIds != null )
+        {
+            String resolvedStoreFilePath = resolveToApplResourcePath( filePath, designResourceIds );
+            if( resolvedStoreFilePath != null &&
+                ! resolvedStoreFilePath.equals( filePath ) )    // got a resolved file path
+            {
+                File resolvedStoreFile = new File( resolvedStoreFilePath );
+                if( resolvedStoreFile.exists() )
+                    return resolvedStoreFile;
+            }
+        }
+
+        // next try to parse the filePath argument as an url on web
+        try
+        {
+            URL url = new URL( filePath );           
+            if( isRunningOSGiPlatform() )
+                url = FileLocator.toFileURL( url ); // available only on OSGi platform
+            return new File( url.toURI() );
+        }
+        catch( MalformedURLException e )
+        {
+            getLogger().fine( getExceptionMessage(e) + " (" + filePath + ")" ); //$NON-NLS-1$ //$NON-NLS-2$
+        }
+        catch( URISyntaxException e )
+        {
+            getLogger().fine( getExceptionMessage(e) + " (" + filePath + ")" ); //$NON-NLS-1$ //$NON-NLS-2$
+        }
+        catch( IOException e )
+        {
+            getLogger().info( getExceptionMessage(e) + " (" + filePath + ")" ); //$NON-NLS-1$ //$NON-NLS-2$
+        }
+        return null;
+    }
+
+    /** 
+     * Indicates whether this plug-in is running on the OSGi platform.
+     * @return true if running on the OSGi platform; false otherwise
+     * @since 1.9
+     */
+    static boolean isRunningOSGiPlatform()
+    {
+        return Platform.getBundle( PLUGIN_ID ) != null;
+    }
+
+    /**
+     * Converts the specified file to a string representation
+     * that can be persisted in an oda design model.
+     * @param aFile the abstract representation of a file pathname
+     * @return  the string representation of the specified file,
+     *          or null if the specified argument is null
+     * @since 3.0.4
+     * @see #convertFileToResourcePath(File, ResourceIdentifiers, boolean)
+     * @see #convertPathToFile(String)
+     */
+    public static String convertFileToPath( File aFile )
+    {
+        if( aFile == null )
+            return null;
+        return aFile.getPath();
+    }
+
+    /**
+     * Converts the specified file to a string representation
+     * that can be persisted in an oda design model.
+     * @param aFile the abstract representation of an absolute file pathname
+     * @param designResourceIds   a design resource identifier instance
+     *          defined by the host application
+     * @param convertToRelativePath true indicates whether to convert the specified file
+     *          to a relative path based on the host-defined design resource; 
+     *          false to convert to the absolute path of the specified file
+     * @return  the relative path of the specified filePath, if specified by 
+     *          the convertToRelativePath argument;
+     *          otherwise, returns the absolute path of the specified filePath
+     * @since 3.3.4 (DTP 1.9.2)
+     */
+    public static String convertFileToResourcePath( File aFile, ResourceIdentifiers designResourceIds,
+            boolean convertToRelativePath )
+    {
+        File normalizedFile = getNormalizedFile( aFile );
+        String filePath = convertFileToPath( normalizedFile );
+        assert( normalizedFile.isAbsolute() );
+        if( ! normalizedFile.isAbsolute() || ! convertToRelativePath )
+            return filePath;
+        
+        // strip the base path specified by hostResourceIdentifiers to get the relative path
+        if( convertToRelativePath && designResourceIds != null )
+        {
+            String applResourceBase = designResourceIds.getApplResourceBaseURIString();
+            if( applResourceBase != null )
+            {
+                File applResourceBaseFile = getNormalizedFile( convertPathToFile( applResourceBase ) );
+                if( applResourceBaseFile != null )
+                {
+                    File fileParent = normalizedFile.getParentFile();
+                    while( fileParent != null )
+                    {
+                        if( fileParent.equals( applResourceBaseFile ) )
+                        {
+                            // strip the parent path and following separator from the specified file's absolute path
+                            filePath = filePath.substring( DesignUtil.convertFileToPath( fileParent ).length()+1 );
+                            // replace with Unix-compatible directory separator, so to be portable
+                            filePath = filePath.replace( File.separator, "/" ); //$NON-NLS-1$
+                            break;
+                        }
+                        fileParent = fileParent.getParentFile();
+                    }
+                }
+            }
+        }
+        return filePath;
+    }
+    
+    private static File getNormalizedFile( File aFile )
+    {
+        if( aFile == null )
+            return null;
+
+        try
+        {
+            return aFile.getCanonicalFile();
+        }
+        catch( Exception e )
+        {
+            return aFile.getAbsoluteFile();
+        }
+    }
+
+    /**
+     * Returns the absolute path of the specified filePath based on 
+     * the specified host application resource identifiers.
+     * @param filePath  the path to resolve; may be a relative or absolute path
+     * @param designResourceIds   a design resource identifier instance
+     *                  defined by the host application
+     * @return  the absolute path of the specified filePath
+     * @since 3.3.4 (DTP 1.9.2)
+     */
+    public static String resolveToApplResourcePath( String filePath, ResourceIdentifiers designResourceIds )
+    {
+        // if no application resource base to resolve a relative filePath, use it as is
+        if( filePath == null || designResourceIds == null ||
+            designResourceIds.getApplResourceBaseURI() == null )   // not available
+            return filePath;
+        
+        if( new File( filePath ).isAbsolute() )
+            return filePath;    // specified filePath is already absolute
+
+        File resolvedFile;
+        try
+        {
+			// as URI requires specific syntax, use URI constructor to 
+            // encode the filePath string into valid URI syntax
+            java.net.URI filePathURI = new java.net.URI( null, null, filePath, null );
+			resolvedFile = new File( designResourceIds.getApplResourceBaseURI().resolve( filePathURI ) );
+  }
+        catch( Exception ex )
+        {
+            getLogger().info( getExceptionMessage(ex) + " (" + filePath + ")" ); //$NON-NLS-1$ //$NON-NLS-2$
+            return null;
+        }
+        return resolvedFile.getPath();
+    }
+    
+    /**
+     * An utility method to save the specified OdaDesignSession instance
+     * in the specified output file.
+     * @param outputFile    an output file; any existing content would get overwritten
+     * @param odaDesignSession  the design session instance to save
+     * @throws IOException
+     * @throws IllegalArgumentException
+     * @since DTP 1.6
+     */
+    public static void saveOdaDesignSession( OdaDesignSession odaDesignSession, File outputFile )
+        throws IOException, IllegalArgumentException
+    {
+        if( outputFile == null )
+            throw new IllegalArgumentException();
+        
+        URI fileURI = URI.createFileURI( outputFile.getAbsolutePath() );
+        saveOdaDesignSession( odaDesignSession, fileURI );
+    }
+    
+    /**
+     * An utility method to save the specified OdaDesignSession instance in the specified URI.
+     * @param uri   the URI of the saved resource
+     * @param odaDesignSession  the design session instance to save
+     * @throws IOException
+     * @since DTP 1.6
+     */
+    public static void saveOdaDesignSession( OdaDesignSession odaDesignSession, URI uri )
+        throws IOException
+    {
+        DocumentRoot documentRoot = DesignFactory.eINSTANCE.createDocumentRoot();
+        documentRoot.setOdaDesignSession( odaDesignSession );
+
+        DesignXMLProcessor xmlProcessor = new DesignXMLProcessor();
+        Resource resource = xmlProcessor.createResource( uri );    
+        resource.getContents().add( documentRoot );
+    
+        // Save the contents of the resource to the URI
+        try
+        {
+            resource.save( null );
+        }
+        catch( IOException ex )
+        {
+            // log and re-throw exception
+            getLogger().logp( Level.INFO, sm_className, "saveOdaDesignSession( OdaDesignSession, URI )", //$NON-NLS-1$
+                    "Not able to serialize the ODA design session to specified URI.", ex );  //$NON-NLS-1$
+            throw ex;
+        }
+    }
+
+    /**
+     * An utility method to load the specified resource file, and returns the 
+     * OdaDesignSession instance found in the file.
+     * @param resourceFile  a resource file to load from
+     * @return  the design session instance found in the specified file
+     * @throws IOException
+     * @throws IllegalArgumentException
+     * @since DTP 1.6
+     */
+    public static OdaDesignSession loadOdaDesignSession( File resourceFile )
+        throws IOException, IllegalArgumentException
+    {
+        if( resourceFile == null )
+            throw new IllegalArgumentException();
+        
+        URI fileURI = URI.createFileURI( resourceFile.getAbsolutePath() );
+        return loadOdaDesignSession( fileURI );
+    }
+
+    /**
+     * An utility method to load the specified resource URI, and returns the 
+     * OdaDesignSession instance found in the resource.
+     * @param uri   the URI of the resource to load from
+     * @return the design session instance found in the specified URI
+     * @throws IOException
+     * @since DTP 1.6
+     */
+    public static OdaDesignSession loadOdaDesignSession( URI uri )
+        throws IOException
+    {
+        DesignXMLProcessor xmlProcessor = new DesignXMLProcessor();
+        Resource resource = xmlProcessor.createResource( uri );    
+        
+        try 
+        {
+            resource.load( null );
+        }
+        catch( IOException ex ) 
+        {
+            // log and re-throw exception
+            getLogger().logp( Level.INFO, sm_className, "loadOdaDesignSession( URI )", //$NON-NLS-1$
+                    "Not able to load the specified URI.", ex );  //$NON-NLS-1$
+            throw ex;
+        }
+        
+        if( resource.getContents().isEmpty() )
+        {
+            getLogger().logp( Level.WARNING, sm_className, "loadOdaDesignSession( URI )", //$NON-NLS-1$
+                    "The specified resource URI (" + uri.toString() + ") is empty." );  //$NON-NLS-1$ //$NON-NLS-2$
+            return null;
+        }
+        
+        Object content = resource.getContents().get( 0 );
+        if( content instanceof DocumentRoot )
+        {
+            DocumentRoot documentRoot = (DocumentRoot) content;
+            OdaDesignSession odaDesignSession = documentRoot.getOdaDesignSession();
+            if( odaDesignSession != null )
+                return odaDesignSession;
+        }
+        
+        // the resource content does not contain an ODA design session
+        getLogger().logp( Level.WARNING, sm_className, "loadOdaDesignSession( URI )", //$NON-NLS-1$
+                "The resource URI (" + uri.toString()  //$NON-NLS-1$
+                + ") does not contain an ODA Design Session." ); //$NON-NLS-1$
+        return null;
+    }
+
+    /**
+     * Creates a new filter expression variable for the column defined in the 
+     * specified result set at the specified index.
+     * @param columns   a {@link ResultSetColumns} that contains a collection of column definitions
+     * @param columnIndex   0-based index of column in the specified columns; 
+     *                      must be a valid index within range of the specified columns
+     * @return  a new instance of {@link ExpressionVariable} based on the attributes 
+     *          of the specified column; may be null if specified column does not exist
+     * @since 3.2.0 (DTP 1.7.0)
+     */
+    public static ExpressionVariable createFilterVariable( ResultSetColumns columns, int columnIndex )
+    {
+        ColumnDefinition columnDefn = columns.getResultColumnDefinitions().get( columnIndex );
+        if( columnDefn == null )
+            return null;
+        
+        String identifier = columnDefn.getAttributes().getName();
+        if( identifier.length() == 0 )
+            identifier = (new Integer( columnDefn.getAttributes().getPosition() )).toString();
+
+        ExpressionVariable columnExprVar = DesignFactory.eINSTANCE.createExpressionVariable();
+        columnExprVar.setIdentifier( identifier );
+        columnExprVar.setNativeDataTypeCode( columnDefn.getAttributes().getNativeDataTypeCode() );
+        columnExprVar.setType( ExpressionVariableType.RESULT_SET_COLUMN );
+        return columnExprVar;
+    }
+    
+    /**
+     * Creates a new SortKey with the identifier, i.e. name and position, of the column 
+     * defined in the specified result set at the specified index.
+     * @param columns   a {@link ResultSetColumns} that contains a collection of column definitions
+     * @param columnIndex   0-based index of column in the specified columns; 
+     *                      must be a valid index within range of the specified columns
+     * @return  a new instance of {@link SortKey} based on the name and position 
+     *          of the specified column; may be null if specified column does not exist
+     * @since 3.2.0 (DTP 1.7.0)
+     */
+    public static SortKey createSortKeyWithColumnIdentifier( ResultSetColumns columns, int columnIndex )
+    {
+        ColumnDefinition columnDefn = columns.getResultColumnDefinitions().get( columnIndex );
+        if( columnDefn == null )
+            return null;
+
+        SortKey aSortKey = DesignFactory.eINSTANCE.createSortKey();
+        aSortKey.setColumnName( columnDefn.getAttributes().getName() );
+        aSortKey.setColumnPosition( columnDefn.getAttributes().getPosition() );
+        
+        return aSortKey;
+    }
+
+    /**
+     * Returns the resource key, if any, in the specified design attribute value.
+     * @param attributeValue    the persisted value of a localizable attribute
+     *          that may contain a resource key and a default resource string
+     * @return  the resource key found in the specified design attribute value;
+     *          may be null if none is available
+     * @since 3.2.3
+     */
+    public static String getResourceKey( String attributeValue )
+    {
+        return parseResourceValue( attributeValue, true );
+    }
+    
+    /**
+     * Adds or replaces the resource key in the specified design attribute value.
+     * @param newKey    the resource key to add or replace in the specified attributeValue;
+     *          the key must not contain any embedded white space
+     * @param attributeValue    the current persisted value of a localizable attribute
+     *          that may contain a resource key and a default string
+     * @return  the new formatted attribute value that contains the new resource key 
+     *      and existing default string, if any
+     * @since 3.2.3
+     */
+    public static String addKeyToResourceAttribute( String newKey, String attributeValue )
+    {
+        String defaultValue = getDefaultResourceString( attributeValue );
+        return formatResourceAttribute( newKey, defaultValue );
+    }
+
+    /**
+     * Returns the default resource string, if any, in the specified design attribute value.
+     * @param attributeValue    the persisted value of a localizable attribute
+     *          that may contain a resource key and a default resource string
+     * @return  the default resource string in the specified attribute value;
+     *          may be null if none is available
+     * @since 3.2.3
+     */
+    public static String getDefaultResourceString( String attributeValue )
+    {
+        return parseResourceValue( attributeValue, false );
+    }
+    
+    /**
+     * Adds or replaces the default resource string in the specified design attribute value.
+     * @param newDefault    the new default resource string to add or replace in the specified attributeValue
+     * @param attributeValue    the current persisted value of a localizable attribute
+     *          that may contain a resource key and a default string
+     * @return  the new formatted attribute value that contains the existing resource key, if any,
+     *      and the new default string
+     * @since 3.2.3
+     */
+    public static String addDefaultToResourceAttribute( String newDefault, String attributeValue )
+    {
+        String key = getResourceKey( attributeValue );
+        return formatResourceAttribute( key, newDefault );
+    }
+    
+    private static String formatResourceAttribute( String key, String defaultValue )
+    {
+        // adopts similar formatting rule of a resource value that may contain both
+        // resource key and default string,
+        // as in org.eclipse.core.runtime.Platform#getResourceString
+        if( key == null || key.trim().length() == 0 )
+        {
+            if( defaultValue == null )
+                return null;
+            if( defaultValue.startsWith( RESOURCE_KEY_PREFIX ) )
+                return RESOURCE_KEY_PREFIX + defaultValue;   // escapes the leading char
+            return defaultValue;
+        }
+        
+        key = key.trim();
+        // validate the key does not contain any embedded white space
+        if( key.indexOf( RESOURCE_KEY_SEPARATOR ) != -1 )   // has embedded white space
+            throw new IllegalArgumentException( 
+                    Messages.bind( Messages.design_invalidResourceKey, key ));
+            
+        if( ! key.startsWith( RESOURCE_KEY_PREFIX ) )
+            key = RESOURCE_KEY_PREFIX + key;
+
+        if( defaultValue == null || defaultValue.length() == 0 )
+            return key;
+        
+        return key + RESOURCE_KEY_SEPARATOR + defaultValue;
+    }
+
+    private static String parseResourceValue( String attributeValue, boolean getKey )
+    {
+        if( attributeValue == null )
+            return null;
+
+        String key = null;
+        String defaultValue = null;
+
+        String s = attributeValue;
+        if( ! s.startsWith( RESOURCE_KEY_PREFIX ) ) // no resource key 
+            defaultValue = attributeValue;
+        else 
+        {
+            if( s.startsWith( RESOURCE_KEY_DOUBLE_PREFIX ) )   // has escaped key prefix, i.e. no resource key
+                defaultValue = s.substring( 1 );    // strips the escaped char
+            else    // has resource key
+            {
+                int keySeparatorIndex = s.indexOf( RESOURCE_KEY_SEPARATOR );
+                if( keySeparatorIndex == -1 )    // no default value after key
+                    key = s.substring( 1 ); // strips the key prefix
+                else
+                {
+                    key = s.substring( 1, keySeparatorIndex );   // strips the key prefix
+                    if( (keySeparatorIndex + 1) < s.length() )
+                        defaultValue = s.substring( keySeparatorIndex + 1 );
+                }
+            }
+        }
+
+        return getKey ? key : defaultValue;
+    }
+
+    private static Logger getLogger()
+    {
+        if( sm_logger == null )
+        {
+            synchronized( DesignUtil.class )
+            {
+                if( sm_logger == null )
+                {
+                    sm_className = DesignUtil.class.getName();
+                    sm_logger = Logger.getLogger( sm_loggerName );
+                }
+            }
+        }
+        return sm_logger;
+    }
+
+    private static String getExceptionMessage( Exception ex )
+    {
+        if( ex == null )
+            return null;
+        return ex.getCause() != null ? ex.getCause().getLocalizedMessage() : ex.toString();
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/util/DesignValidator.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/util/DesignValidator.java
new file mode 100644
index 0000000..bc1a97c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/util/DesignValidator.java
@@ -0,0 +1,153 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.util;
+
+import java.util.Map;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.DiagnosticChain;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.util.EObjectValidator;
+
+/**
+ * Extended validator of ODA Design EMF Objects.
+ */
+class DesignValidator extends EObjectValidator
+{
+    DesignValidator()
+    {
+        super();
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.emf.ecore.util.EObjectValidator#validate_MultiplicityConforms(org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EStructuralFeature, org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
+     */
+    protected boolean validate_MultiplicityConforms( EObject eObject, 
+                                    EStructuralFeature eFeature, 
+                                    DiagnosticChain diagnostics, 
+                                    Map<Object, Object> context )
+    {        
+        // use extended validator method for selected ODA Design classes
+        if( isDataSetQueryObject( eObject ) )
+        {
+            return validate_DataSetQuery_MultiplicityConforms( eObject, eFeature, 
+                    diagnostics, context );
+        }
+        else if( isDataSetDesignObject( eObject ) )
+        {
+            return validate_DataSetDesign_MultiplicityConforms( eObject, eFeature, 
+                    diagnostics, context );
+        }
+        
+        // use default validator
+        return super.validate_MultiplicityConforms( eObject, eFeature, 
+                                                    diagnostics, context );
+    }
+
+    /**
+     * Determines whether the specific EObject is a DataSetQuery type.
+     */
+    private boolean isDataSetQueryObject( EObject eObject )
+    {
+        return ( eObject.eClass() == DesignPackage.Literals.DATA_SET_QUERY );
+    }
+    
+    /**
+     * Determines whether the specific EObject is a DataSetDesign type.
+     */
+    private boolean isDataSetDesignObject( EObject eObject )
+    {
+        return ( eObject.eClass() == DesignPackage.Literals.DATA_SET_DESIGN );
+    }
+   
+    /**
+     * Specialized validator for the DataSetQuery EObject.
+     */
+    protected boolean validate_DataSetQuery_MultiplicityConforms( EObject eObject, 
+                                    EStructuralFeature eFeature, 
+                                    DiagnosticChain diagnostics, 
+                                    Map<Object, Object> context )
+    {
+        if( isDataSetQueryObject( eObject ) &&
+            eFeature.isRequired() )
+        {
+            if( eObject.eIsSet( eFeature ) )
+                return true;    // is valid; required attribute is set
+
+            // if the required attribute is not set, add a warning diagnostic
+            if( diagnostics != null )
+            {
+                diagnostics.add(
+                    newRequiredFeatureDiagnostic( Diagnostic.WARNING, eObject, eFeature, context ));
+            }
+            return true;    // ok to continue with validation
+        }
+        
+        // use default validator implementation
+        return super.validate_MultiplicityConforms( eObject, eFeature, 
+                                        diagnostics, context );
+    }
+    
+    /**
+     * Specialized validator for the DataSetDesign EObject.
+     */
+    protected boolean validate_DataSetDesign_MultiplicityConforms( EObject eObject, 
+                                    EStructuralFeature eFeature, 
+                                    DiagnosticChain diagnostics, 
+                                    Map<Object, Object> context )
+    {
+        // validating the DataSourceDesign attribute in a DataSetDesign object
+        if( isDataSetDesignObject( eObject ) && 
+            eFeature.getFeatureID() == DesignPackage.DATA_SET_DESIGN__DATA_SOURCE_DESIGN )
+        {
+            if( eObject.eIsSet( eFeature ) )
+                return true;    // is valid; optional attribute is set
+            
+            // a DataSourceDesign is optional only when its containing DataSetDesign 
+            // is contained by a DynamicValuesQuery
+            if( eObject.eContainer().eClass() == DesignPackage.Literals.DYNAMIC_VALUES_QUERY )
+                return true;
+
+            // required attribute is not set
+            if( diagnostics != null )
+            {
+                diagnostics.add(
+                    newRequiredFeatureDiagnostic( Diagnostic.ERROR, eObject, eFeature, context ));
+            }
+            return false;   
+        }
+        
+        // use default validator implementation for other attributes/features
+        return super.validate_MultiplicityConforms( eObject, eFeature, 
+                                        diagnostics, context );        
+    }
+    
+    private BasicDiagnostic newRequiredFeatureDiagnostic( int severity, 
+                EObject eObject, EStructuralFeature eFeature, Map<Object, Object> context)
+    {
+        return new BasicDiagnostic( severity,
+                    DIAGNOSTIC_SOURCE,
+                    EOBJECT__EVERY_MULTIPCITY_CONFORMS,
+                    getEcoreResourceLocator().getString(
+                        "_UI_RequiredFeatureMustBeSet_diagnostic", //$NON-NLS-1$
+                        new Object[]{ getFeatureLabel( eFeature, context), 
+                                        getObjectLabel( eObject, context )} ),
+                    new Object[] { eObject, eFeature } );        
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/util/DesignXMLProcessor.java b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/util/DesignXMLProcessor.java
new file mode 100644
index 0000000..3854980
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/util/DesignXMLProcessor.java
@@ -0,0 +1,99 @@
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: DesignXMLProcessor.java,v 1.2 2007/11/17 05:30:20 lchan Exp $
+ */
+package org.eclipse.datatools.connectivity.oda.design.util;
+
+import java.util.Map;
+
+import org.eclipse.datatools.connectivity.oda.design.DesignPackage;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.xmi.XMLResource;
+import org.eclipse.emf.ecore.xmi.util.XMLProcessor;
+
+/**
+ * This class contains helper methods to serialize and deserialize XML documents
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class DesignXMLProcessor extends XMLProcessor
+{
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public static final String copyright = "Copyright (c) 2005, 2009 Actuate Corporation"; //$NON-NLS-1$
+
+    /**
+     * Public constructor to instantiate the helper.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public DesignXMLProcessor()
+    {
+        super( (EPackage.Registry.INSTANCE) );
+        DesignPackage.eINSTANCE.eClass();
+    }
+
+    /**
+     * Register for "*" and "xml" file extensions the DesignResourceFactoryImpl factory.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected Map<String, Resource.Factory> getRegistrations()
+    {
+        if( registrations == null )
+        {
+            super.getRegistrations();
+            registrations.put( XML_EXTENSION, new DesignResourceFactoryImpl() );
+            registrations.put( STAR_EXTENSION, new DesignResourceFactoryImpl() );
+        }
+        return registrations;
+    }
+
+    /**
+     * Creates and returns a new resource for saving or loading an ODA Design object.
+     * @param uri   the URI of the resource to create
+     * @return      a new resource
+     * @since DTP 1.6
+     * @generated NOT
+     */
+    public Resource createResource( URI uri )
+    {
+        ResourceSet resourceSet = createResourceSet();
+        // Register the Design package to ensure it is available during loading.
+        resourceSet.getPackageRegistry().put( DesignPackage.eNS_URI,
+                DesignPackage.eINSTANCE );
+
+        XMLResource resource = (XMLResource) resourceSet.createResource( uri );
+
+        // Use the OPTION_SCHEMA_LOCATION_IMPLEMENTATION option to avoid pre-registration 
+        // of the generated packages 
+        resource.getDefaultSaveOptions()
+                .put( XMLResource.OPTION_SCHEMA_LOCATION_IMPLEMENTATION,
+                        Boolean.TRUE );
+        return resource;
+    }
+
+} //DesignXMLProcessor
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/util/package.html b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/util/package.html
new file mode 100644
index 0000000..fa9ba3e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.design/src/org/eclipse/datatools/connectivity/oda/design/util/package.html
@@ -0,0 +1,33 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2005, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+
+Provides a utility component for handling of
+ODA Design API objects.
+<br>
+It can be used by an ODA consumer and/or a data provider
+to manage an ODA design instance.
+
+<!-- Put @see and @since tags down here. -->
+@since 3.0
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.profile/.classpath b/plugins/org.eclipse.datatools.connectivity.oda.profile/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.profile/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.profile/.gitignore b/plugins/org.eclipse.datatools.connectivity.oda.profile/.gitignore
new file mode 100644
index 0000000..6ec8be4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.profile/.gitignore
@@ -0,0 +1,4 @@
+bin
+download
+*.jar
+*.zip
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.profile/.project b/plugins/org.eclipse.datatools.connectivity.oda.profile/.project
new file mode 100644
index 0000000..a3b225d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.profile/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.oda.profile</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.profile/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.connectivity.oda.profile/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..63b8392
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.profile/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,3 @@
+#Fri Oct 23 21:56:37 PDT 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.profile/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.connectivity.oda.profile/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..7c5e59c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.profile/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %plugin.name
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.oda.profile;singleton:=true
+Bundle-Version: 3.4.1.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: Eclipse Data Tools Platform
+Bundle-Localization: plugin
+Export-Package: org.eclipse.datatools.connectivity.oda.profile,
+ org.eclipse.datatools.connectivity.oda.profile.internal;x-friends:="org.eclipse.datatools.connectivity.oda.design.ui,org.eclipse.birt.report.data.oda.jdbc.dbprofile"
+Require-Bundle: org.eclipse.datatools.connectivity;visibility:=reexport,
+ org.eclipse.datatools.connectivity.oda.consumer,
+ org.eclipse.core.runtime
+Bundle-ActivationPolicy: lazy
+Bundle-Activator: org.eclipse.datatools.connectivity.oda.profile.OdaProfilePlugin
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.profile/about.html b/plugins/org.eclipse.datatools.connectivity.oda.profile/about.html
new file mode 100644
index 0000000..129db9d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.profile/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.profile/build.properties b/plugins/org.eclipse.datatools.connectivity.oda.profile/build.properties
new file mode 100644
index 0000000..95a1f74
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.profile/build.properties
@@ -0,0 +1,13 @@
+source.. = src/

+output.. = bin/

+bin.includes = plugin.xml,\

+               plugin.properties,\

+               .,\

+               about.html,\

+               META-INF/,\

+               schema/

+javac.source =           1.6

+javac.target =           1.6

+javadoc.dir =            doc/api/

+download.dir =           ./download/

+src.includes = about.html

diff --git a/plugins/org.eclipse.datatools.connectivity.oda.profile/plugin.properties b/plugins/org.eclipse.datatools.connectivity.oda.profile/plugin.properties
new file mode 100644
index 0000000..f0f72fb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.profile/plugin.properties
@@ -0,0 +1,17 @@
+###############################################################################
+# Copyright (c) 2005, 2011 Actuate Corporation.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#  Actuate Corporation  - initial API and implementation
+#
+###############################################################################
+# NLS String
+###############################################################################
+#
+plugin.name=DTP ODA Connection Profile Framework Plug-in
+
+extension-point.name.profileStore = ODA Connection Profiles Store
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.profile/plugin.xml b/plugins/org.eclipse.datatools.connectivity.oda.profile/plugin.xml
new file mode 100644
index 0000000..d097a68
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.profile/plugin.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<!--
+/**
+ *************************************************************************
+ * Copyright (c) 2005, 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: plugin.xml,v 1.6 2006/03/10 00:43:13 lchan Exp $
+ */
+-->
+
+<plugin>
+   <extension-point id="profileStore" name="%extension-point.name.profileStore" schema="schema/profileStore.exsd"/>
+
+   <extension
+         point="org.eclipse.datatools.connectivity.oda.consumer.propertyProvider">
+      <dataSourcePropertyService
+            consumerApplicationId="org.eclipse.datatools.connectivity.oda.profile.connectionPropertyService"
+            providerClass="org.eclipse.datatools.connectivity.oda.profile.provider.ProfilePropertyProviderImpl">
+      </dataSourcePropertyService>
+   </extension>
+   
+</plugin>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.profile/schema/profileStore.exsd b/plugins/org.eclipse.datatools.connectivity.oda.profile/schema/profileStore.exsd
new file mode 100644
index 0000000..b9f9d52
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.profile/schema/profileStore.exsd
@@ -0,0 +1,123 @@
+<?xml version='1.0' encoding='UTF-8'?>

+<!-- Schema file written by PDE -->

+<schema targetNamespace="org.eclipse.datatools.connectivity.oda.profile" xmlns="http://www.w3.org/2001/XMLSchema">

+<annotation>

+      <appInfo>

+         <meta.schema plugin="org.eclipse.datatools.connectivity.oda.profile" id="profileStore" name="ODA Connection Profiles Store"/>

+      </appInfo>

+      <documentation>

+         The profileStore extension point allows a client to define a default file extension for any connection profiles store that has no file extension.  If no extensions of this extension point are registered, an user may specify a profile stores file with no extension.  If multiple default fileExtension elements are registered, only one will be applied.  Adopters should ensure that its client application installs only one extension of this extension point.

+      </documentation>

+   </annotation>

+

+   <element name="extension">

+      <annotation>

+         <appInfo>

+            <meta.element />

+         </appInfo>

+      </annotation>

+      <complexType>

+         <sequence>

+            <element ref="fileExtension"/>

+         </sequence>

+         <attribute name="point" type="string" use="required">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="id" type="string">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="name" type="string">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+               <appInfo>

+                  <meta.attribute translatable="true"/>

+               </appInfo>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="fileExtension">

+      <annotation>

+         <documentation>

+            Defines the file extension to be associated with a connection profile store.

+         </documentation>

+      </annotation>

+      <complexType>

+         <attribute name="default" type="string" use="required">

+            <annotation>

+               <documentation>

+                  Defines the default file extension to be automatically associated with a connection profile store that has no user-defined file extension.

+This attribute value may include an optional dot before the file extension (e.g. &quot;profiles&quot; or &quot;.profiles&quot;).

+               </documentation>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="since"/>

+      </appInfo>

+      <documentation>

+         3.2.7 (DTP 1.9.2)

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="examples"/>

+      </appInfo>

+      <documentation>

+         &lt;code&gt;&lt;pre&gt;

+     &lt;extension

+           point=&quot;org.eclipse.datatools.connectivity.oda.profile.profileStore&quot;&gt;

+        &lt;fileExtension

+              default=&quot;profiles&quot;&gt;

+        &lt;/fileExtension&gt;

+     &lt;/extension&gt;

+&lt;/pre&gt;&lt;/code&gt;

+   

+This extension example specifies the default file extension &quot;profiles&quot; to be automatically associated with a connection profile store that has no user-defined file extension.

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="apiinfo"/>

+      </appInfo>

+      <documentation>

+         No API implementation is applicable.

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="implementation"/>

+      </appInfo>

+      <documentation>

+         N/A

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="copyright"/>

+      </appInfo>

+      <documentation>

+         Copyright (c) 2011 Actuate Corporation.

+All rights reserved. This program and the accompanying materials are made available under the  terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html.

+      </documentation>

+   </annotation>

+

+</schema>

diff --git a/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/Constants.java b/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/Constants.java
new file mode 100644
index 0000000..e2d16fc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/Constants.java
@@ -0,0 +1,58 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2005, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.profile;
+
+import org.eclipse.datatools.connectivity.oda.profile.nls.Messages;
+
+public class Constants
+{
+    public static String ODA_COMPONENT_NAME = Messages.constants_componentName;
+    public static final String ODA_COMPONENT_VERSION = "3.0.6"; //$NON-NLS-1$
+    
+    public static final String EMPTY_STRING = ""; //$NON-NLS-1$
+    
+    /** 
+     * The IPropertyProvider extension's application id that provides the 
+     * service to use a connection profile for externalized properties.
+     * A consumer application that wants to use this service must specify 
+     * this application id as the value of the property key 
+     * IPropertyProvider.ODA_CONSUMER_ID in a connection appContext map.
+     * @since 3.0.4
+     */
+    public static final String CONN_PROFILE_APPL_ID =
+        "org.eclipse.datatools.connectivity.oda.profile.connectionPropertyService"; //$NON-NLS-1$
+
+    /** 
+     * ODA parent category ID
+     * @since 3.0.6
+     */
+    public static final String ODA_PARENT_CATEGORY_ID =
+        "org.eclipse.datatools.connectivity.oda.profileCategory"; //$NON-NLS-1$
+
+    /**
+     * ODA extended profile property id to the base properties of JDBC DB profiles
+     * @since 3.0.6
+     */
+    public static final String DB_PROFILE_PROVIDER_ID = 
+        "org.eclipse.datatools.connectivity.oda.profile.db.provider.id"; //$NON-NLS-1$
+
+    /**
+     * Database connection profile category id.
+     * TODO - should be defined in the connectivity component.
+     */
+    public static final String DATABASE_CATEGORY_ID = 
+        "org.eclipse.datatools.connectivity.db.category"; //$NON-NLS-1$
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/OdaConnectionFactory.java b/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/OdaConnectionFactory.java
new file mode 100644
index 0000000..f166bad
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/OdaConnectionFactory.java
@@ -0,0 +1,36 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2005, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.profile;
+
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionFactory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+
+public class OdaConnectionFactory implements IConnectionFactory 
+{
+
+	public IConnection createConnection( IConnectionProfile profile ) 
+	{
+		return new OdaConnectionWrapper( profile );
+	}
+
+	public IConnection createConnection( IConnectionProfile profile, String uid,
+			String pwd ) 
+	{
+		// no user login control
+		return createConnection( profile );
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/OdaConnectionWrapper.java b/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/OdaConnectionWrapper.java
new file mode 100644
index 0000000..4b61965
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/OdaConnectionWrapper.java
@@ -0,0 +1,259 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2005, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.profile;
+
+import org.eclipse.datatools.connectivity.ConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.Version;
+import org.eclipse.datatools.connectivity.VersionProviderConnection;
+import org.eclipse.datatools.connectivity.oda.IConnection;
+import org.eclipse.datatools.connectivity.oda.IDataSetMetaData;
+import org.eclipse.datatools.connectivity.oda.IDriver;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.consumer.helper.OdaDriver;
+
+public class OdaConnectionWrapper extends VersionProviderConnection
+{
+    private static final String EMPTY_STR = ""; //$NON-NLS-1$
+    private static final Version ODA_UNKNOWN_VERSION = 
+        new Version( 3, 0, 0, EMPTY_STR ) 
+        {
+            public String toString() 
+            {
+                return ConnectionProfileConstants.UNKNOWN_VERSION;
+            }
+        };
+    
+    private String m_odaDataSourceId;
+
+    private IConnection m_odaConnectionHelper;
+    private IDriver m_odaDriverHelper;
+    private IDataSetMetaData m_odaMetadataHelper;
+    private Exception m_connectException;
+    
+    public OdaConnectionWrapper( IConnectionProfile profile )
+    {
+        super( profile, OdaConnectionFactory.class );
+        
+        // ODA profiles use the odaDataSourceId as its profile identifier
+        m_odaDataSourceId = profile.getProviderId();
+
+        try
+        {
+            // calls the oda.IDriver.getConnection( dataSourceId ) 
+            // which returns a wrapped oda.IConnection object
+            getOdaConnectionHelper( m_odaDataSourceId );
+            assert( m_odaConnectionHelper != null );
+            open();     // test the connection properties
+            m_connectException = null;  // test succeeded
+        }
+        catch( OdaException ex )
+        {
+            m_connectException = ex;
+            clearVersionCache();
+            return;
+        }
+
+        try
+        {
+            // should now be able to get metadata
+            m_odaMetadataHelper = 
+                m_odaConnectionHelper.getMetaData( Constants.EMPTY_STRING );
+        }
+        catch( OdaException e )
+        {
+            // ignore, ok to not have version info available
+            e.printStackTrace();
+        }
+        
+        if( ! canProvideVersionMetaData() )
+            m_odaMetadataHelper = null; // reset
+        
+        // update profile with version info, if available
+        updateVersionCache();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnection#getRawConnection()
+     */
+    public Object getRawConnection()
+    {
+        return m_odaConnectionHelper;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnection#close()
+     */
+    public void close()
+    {
+        if( getRawConnection() == null )
+            return;     // no underlying connection, nothing to close
+        
+        try
+        {
+            m_odaConnectionHelper.close();
+            m_odaMetadataHelper = null;
+            m_connectException = null;
+        }
+        catch( OdaException e )
+        {
+            // ignore
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnection#getConnectException()
+     */
+    public Throwable getConnectException()
+    {
+        return m_connectException;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.VersionProviderConnection#getTechnologyRootKey()
+     */
+    protected String getTechnologyRootKey()
+    {
+        if( m_odaDataSourceId == null || m_odaDataSourceId.length() == 0 )
+            return this.getClass().getName();
+        return m_odaDataSourceId;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IServerVersionProvider#getProviderVersion()
+     */
+    public Version getProviderVersion()
+    {
+        if( m_odaMetadataHelper == null )
+            return ODA_UNKNOWN_VERSION;
+        
+        try
+        {
+            return Version.valueOf( m_odaMetadataHelper.getDataSourceProductVersion() );
+        }
+        catch( OdaException e )
+        {
+        	// ignore
+            e.printStackTrace();
+        }
+        return ODA_UNKNOWN_VERSION;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IServerVersionProvider#getProviderName()
+     */
+    public String getProviderName()
+    {
+        if( m_odaMetadataHelper == null )
+            return EMPTY_STR;
+        
+        try
+        {
+            return m_odaMetadataHelper.getDataSourceProductName();
+        }
+        catch( OdaException e )
+        {
+            // ignore, use data source element id as default
+        }
+        
+        return getTechnologyRootKey();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IServerVersionProvider#getTechnologyVersion()
+     */
+    public Version getTechnologyVersion()
+    {
+        return Version.valueOf( Constants.ODA_COMPONENT_VERSION );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IServerVersionProvider#getTechnologyName()
+     */
+    public String getTechnologyName()
+    {
+        return Constants.ODA_COMPONENT_NAME;
+    }
+
+    // Provides additional connection services for use by the
+    // ODA framework.
+    
+    /**
+     * Attempts to establish a live connection based on the 
+     * connection properties of the profile instance
+     * used to create this connection. 
+     * It is up to individual ODA driver to process the 
+     * connection properties. 
+     * @throws  OdaException if the underlying ODA driver 
+     *                       fails to open a live connection
+     */
+    public void open() throws OdaException
+    {
+        IConnection odaConn = m_odaConnectionHelper;
+        assert( odaConn != null );
+        
+        try
+        {
+            odaConn.open( getConnectionProfile().getBaseProperties() );
+        }
+        catch( Throwable ex )   // catch all possible problem triggered by test connection
+        {
+            if( ex instanceof OdaException )
+                throw (OdaException) ex;
+            throw new OdaException( ex );
+        }
+    }
+    
+    private IConnection getOdaConnectionHelper( String odaDataSourceElementId )
+        throws OdaException
+    {
+        if( m_odaConnectionHelper != null )
+            return m_odaConnectionHelper;
+        
+        IDriver odaDriver = getOdaDriverHelper( odaDataSourceElementId );
+        
+        assert( odaDriver != null );    // should have thrown OdaException
+        m_odaConnectionHelper = odaDriver.getConnection( odaDataSourceElementId );
+        return m_odaConnectionHelper;
+    }
+
+    private IDriver getOdaDriverHelper( String odaDataSourceElementId ) 
+        throws OdaException
+    {
+        if( m_odaDriverHelper == null )
+            m_odaDriverHelper = new OdaDriver( odaDataSourceElementId );
+
+        return m_odaDriverHelper;
+    }
+    
+    private boolean canProvideVersionMetaData()
+    {
+        if( m_odaMetadataHelper == null )
+            return false;
+        
+        // validate whether the underlying IDataSetMetaData implementation 
+        // is capable of providing version info in current state
+        try
+        {
+            getProviderVersion();
+            getProviderName();
+        }
+        catch( RuntimeException e )
+        {
+            return false;
+        }
+        return true;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/OdaProfileExplorer.java b/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/OdaProfileExplorer.java
new file mode 100644
index 0000000..156c624
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/OdaProfileExplorer.java
@@ -0,0 +1,639 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2005, 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.profile;
+
+import java.io.File;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Properties;
+import java.util.TreeMap;
+import java.util.logging.Logger;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileMgmt;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.consumer.services.impl.ProviderUtil;
+import org.eclipse.datatools.connectivity.oda.profile.internal.OdaConnectionProfile;
+import org.eclipse.datatools.connectivity.oda.profile.internal.OdaProfileFactory;
+import org.eclipse.datatools.connectivity.oda.profile.provider.ProfilePropertyProviderImpl;
+
+/**
+ * The ODA Profile Explorer is a singleton class that provides
+ * the services to explore ODA connection profile instances
+ * and their main content.
+ * The <code>OdaProfileExplorer</code> singleton instance is retrieved 
+ * using the <code>getInstance()</code> method.
+ */
+public class OdaProfileExplorer
+{
+    private static OdaProfileExplorer sm_instance = null;
+
+    // logging variables
+    private static final String sm_className = OdaProfileExplorer.class.getName();
+    private static Logger sm_logger;
+
+    private Map<FileKey, IConnectionProfile[]> m_loadedProfilesByFile;
+    private File m_defaultProfileStoreFile;
+    
+    /**
+     * Static method to return the singleton instance.
+     * @return
+     */
+    public static OdaProfileExplorer getInstance()
+    {
+        if( sm_instance == null )
+        {
+            synchronized( OdaProfileExplorer.class )
+            {
+                if( sm_instance == null )
+                    sm_instance = new OdaProfileExplorer();
+            }
+        }
+        return sm_instance;
+    }
+    
+    /**
+     * Singleton instance release method.
+     */
+    public static void releaseInstance()
+    {
+        synchronized( OdaProfileExplorer.class )
+        {
+            if( sm_instance != null )
+            {
+                sm_instance.refresh();
+                sm_instance = null;
+            }
+            sm_logger = null;
+        }
+    }
+
+    /**
+     * Returns the class logger.
+     */
+    private static Logger getLogger()
+    {
+        if( sm_logger == null )
+        {
+            synchronized( OdaProfileExplorer.class )
+            {
+                if( sm_logger == null )
+                    sm_logger = Logger.getLogger( sm_className );
+            }
+        }
+        return sm_logger;
+    }
+
+    protected OdaProfileExplorer()
+    {
+    }
+    
+    /**
+     * Refresh the profile explorer, which allows it to get
+     * the latest profile instances in a profile storage file.
+     * @since DTP 1.6
+     */
+    public void refresh()
+    {
+        if( m_loadedProfilesByFile == null || m_loadedProfilesByFile.isEmpty() )
+            return;     // done; nothing to reset
+
+        // reset the cached collection of loaded profile instances
+        m_loadedProfilesByFile.clear();
+    }
+
+    private Map<FileKey, IConnectionProfile[]> getLoadedProfilesMap()
+    {
+        if( m_loadedProfilesByFile == null )
+        {
+            synchronized( this )
+            {
+                if( m_loadedProfilesByFile == null )
+                    m_loadedProfilesByFile = Collections.synchronizedMap( new TreeMap<FileKey, IConnectionProfile[]>() );
+            }
+        }
+        return m_loadedProfilesByFile;
+    }
+    
+    private File defaultProfileStoreFile()
+    {
+        if( m_defaultProfileStoreFile == null )
+        {
+            synchronized( this )
+            {
+                if( m_defaultProfileStoreFile == null )
+                    m_defaultProfileStoreFile = OdaProfileFactory.defaultProfileStoreFile();
+            }
+        }
+        return m_defaultProfileStoreFile;
+    }
+
+    /**
+     * Returns a collection of identifiers of all connection profile 
+     * instances of a given ODA data source extension type.
+     * The profile instances are searched in the current 
+     * profile storage location with default file name.
+     * It also caches the matching profiles and saves in the
+     * current profile storage file for subsequent use.
+     * @deprecated  As of DTP 1.6, replaced by {@link #getProfileIdentifiersByOdaProviderId(String, File)}
+     */
+    public Map getProfiles( String odaDataSourceId )
+        throws OdaException
+    {
+        return getProfileIdentifiersByOdaProviderId( odaDataSourceId, null );
+    }
+
+    /**
+     * Returns a collection of identifiers of all connection profile 
+     * instances of a given ODA data source extension type.
+     * The profile instances are searched in the given profile storage file.
+     * It also caches the matching profiles and saves in the
+     * current profile storage file for subsequent use.
+     * @deprecated  As of DTP 1.6, replaced by {@link #getProfileIdentifiersByOdaProviderId(String, File)}
+     */
+    public Map getProfiles( String odaDataSourceId, File storageFile ) 
+        throws OdaException
+    {
+        return getProfileIdentifiersByOdaProviderId( odaDataSourceId, storageFile );
+    }
+    
+    /**
+     * Returns a collection of identifiers of all connection profile instances 
+     * of the given ODA data source extension type.
+     * The profile instances are searched from the specified profile storage file.
+     * @param odaDataSourceId   the unique id of the data source element
+     *                      in an ODA data source extension.
+     * @param storageFile   a file that stores profile instances; may be null, which 
+     *                      will use the default store path of the Connectivity plugin
+     * @return  a <code>Map</code> containing the instance Id (as key)
+     *          and description (as value) of all existing profiles of given odaDataSourceId;
+     *          may be an empty collection if there are 
+     *          no matching connection profiles found in specified store.
+     * @throws OdaException if unable to read from the given storageFile
+     * @since DTP 1.6
+     */
+    public Map getProfileIdentifiersByOdaProviderId( String odaDataSourceId, File storageFile ) 
+        throws OdaException
+    {
+        return getProfileIdentifiersByCategoryOrProviderId( null, odaDataSourceId, storageFile, true );
+    }
+
+    /**
+     * Returns a collection of identifiers of all connection profile instances 
+     * under the specified profile category id.
+     * The profile instances are searched from the specified profile storage file.
+     * @param categoryId    the unique id of a connection profile category
+     * @param storageFile   a file that stores profile instances; may be null, which 
+     *                      will use the default store path of the Connectivity plugin
+     * @return  a <code>Map</code> containing the instance Id (as key)
+     *          and description (as value) of all existing profiles of given odaDataSourceId;
+     *          may be an empty collection if there are 
+     *          no matching connection profiles found in specified store.
+     * @throws OdaException if unable to read from the given storageFile
+     * @since DTP 1.6
+     */
+    public Map getProfileIdentifiersByCategory( String categoryId, File storageFile ) 
+        throws OdaException
+    {
+        return getProfileIdentifiersByCategoryOrProviderId( categoryId, null, storageFile, true );
+    }
+
+    /**
+     * Returns a collection of instance id and name of all connection profile instances 
+     * under the specified profile category id.
+     * The profile instances are searched from the specified profile storage file.
+     * @param categoryId    the unique id of a connection profile category
+     * @param storageFile   a file that stores profile instances; may be null, which 
+     *                      will use the default store path of the Connectivity plugin
+     * @return  a <code>Map</code> containing the instance Id (as key),
+     *          and name (as value) of all existing profiles of given odaDataSourceId;
+     *          may be an empty collection if there are 
+     *          no matching connection profiles found in specified store.
+     * @throws OdaException if unable to read from the given storageFile
+     * @since 3.2.2 (DTP 1.7.2)
+     */
+    @SuppressWarnings("unchecked")
+    public Map<String,String> getProfileIdsAndNamesByCategory( String categoryId, File storageFile ) 
+        throws OdaException
+    {
+        return getProfileIdentifiersByCategoryOrProviderId( categoryId, null, storageFile, false );
+    }
+
+    private Map getProfileIdentifiersByCategoryOrProviderId( String categoryId, String odaDataSourceId, 
+                    File storageFile, boolean useDescriptionAsPropValue ) 
+        throws OdaException
+    {
+        // first get all profiles found in given storage file, load the file if necessary
+        IConnectionProfile[] profilesInFile = loadProfiles( storageFile );
+
+        // return those profile ids that match given oda data source type,
+        // and add them in the ProfileManager's profiles cache
+        Properties profileIds = new Properties();
+        for( int i = 0; i < profilesInFile.length; i++ ) 
+        {
+            IConnectionProfile aProfile = profilesInFile[i];            
+
+            // check that the profile is under the specified category
+            if( categoryId != null )
+            {
+                if( ! aProfile.getCategory().getId().equals( categoryId ) )
+                    continue;   // not a match
+            }
+            else if( odaDataSourceId != null )  // find a match by odaDataSourceId instead
+            {
+                // ODA profiles use the odaDataSourceId as its profile identifier
+                if( ! aProfile.getProviderId().equals( odaDataSourceId ) )
+                    continue;   // not a match
+            }
+            else
+                continue;
+            
+            // found a profile for the specified category or odaDataSourceId,
+            // adds matched profile found in storageFile to the identifiers Map
+
+            addProfileIdentifier( aProfile, profileIds, useDescriptionAsPropValue );
+        }
+        
+        return profileIds;
+    }
+
+    /*
+	 * Reads and returns the profiles found in given storage file.
+     * @param storageFile   connection profile store file; may be null, which 
+     *                      will use the default store of the Connectivity plugin
+     * @return
+     * @throws OdaException
+     */
+    private IConnectionProfile[] loadProfiles( File storageFile ) 
+        throws OdaException
+    {
+        return loadProfiles( storageFile, null );
+    }
+    
+    private IConnectionProfile[] loadProfiles( File storageFile, String encryptedFileExtension ) 
+        throws OdaException
+    {
+        if( storageFile == null )
+        {
+            getLogger().fine( "A null storageFile argument is specified. Using default profile storage location instead." ); //$NON-NLS-1$
+            storageFile = defaultProfileStoreFile();
+            encryptedFileExtension = null;     // disable; use default storage file's own extension instead
+            
+            // triggers initialization of the default profile store, if not already done
+            ProfileManager.getInstance().getProfiles( false );
+        }
+        
+        // first check if specified storage file is already loaded and cached in collection
+        IConnectionProfile[] profilesInFile = getLoadedProfiles( storageFile );
+        if( profilesInFile != null )
+            return profilesInFile;
+        
+        // no cached profiles for storage file; load the storage file
+        try
+        {
+            profilesInFile = ConnectionProfileMgmt.loadCPsUsingFileExtension( storageFile, encryptedFileExtension );
+        }
+        catch( Exception ex )
+        {
+            throw new OdaException( ex );
+        }
+        
+        // save it in the cached collection in a synchronized manner
+        return addToCacheByFile( storageFile, profilesInFile );
+    }
+    
+    /**
+     * Add the specified profile instances loaded from the specified storage file,
+     * to the synchronized collection in cache.
+     * This call expects the profiles are first loaded, to minimize the locking on 
+     * the cached collection.
+     * @param storageFile   the storage file object that serves as the mapping key
+     * @param profilesInFile
+     * @return  the cached profile instances in the specified file
+     */
+    private IConnectionProfile[] addToCacheByFile( File storageFile, IConnectionProfile[] profilesInFile )
+    {
+        IConnectionProfile[] cachedProfiles;
+        Map<FileKey, IConnectionProfile[]> loadedProfilesMap = getLoadedProfilesMap();
+        FileKey storageFileKey = new FileKey(storageFile);
+        synchronized( loadedProfilesMap )
+        {
+            // in case another thread has added to the same key in between this checking, use
+            // the currently cached value
+            cachedProfiles = (IConnectionProfile[]) loadedProfilesMap.get( storageFileKey );
+            if( cachedProfiles == null )
+            {                                   
+                // save the specified profiles in cached collection
+                cachedProfiles = profilesInFile;
+                loadedProfilesMap.put( storageFileKey, cachedProfiles );
+            }
+        }
+        return cachedProfiles;
+    }
+
+    private IConnectionProfile[] getLoadedProfiles( File storageFile ) 
+    {
+        return (IConnectionProfile[]) getLoadedProfilesMap().get( new FileKey(storageFile) );
+    }
+
+    /*
+     * For use as a key in the Map of profile store File and its corresponding 
+     * loaded profile instances.  
+     * The File key is comparable based on its file path.
+     * @since 3.2.3 (DTP 1.8)
+     */
+    class FileKey implements Comparable<FileKey>
+    {
+        private File m_file;
+        
+        FileKey( File aFile )
+        {
+            m_file = aFile;
+        }
+
+        /* (non-Javadoc)
+         * @see java.lang.Object#equals(java.lang.Object)
+         */
+        @Override
+        public boolean equals( Object obj )
+        {
+            if( ! (obj instanceof FileKey ))
+                return false;
+    
+            return this.compareTo( (FileKey)obj ) == 0;
+        }
+
+        public int compareTo( FileKey obj )
+        {
+            if( this == obj || m_file == obj.getFile() )
+                return 0;
+            return m_file.compareTo( obj.getFile() );
+        }
+        
+        private File getFile()
+        {
+            return m_file;
+        }
+    }
+    
+    /*
+     * Adds given profile instance's identifier to the given collection.
+     */
+    private void addProfileIdentifier( IConnectionProfile profile, Properties profileIds, 
+            boolean useDescriptionAsPropValue )
+    {
+        assert( profile != null && profileIds != null );
+
+        String profileName = null;        
+        if( useDescriptionAsPropValue )
+            profileName = profile.getDescription();
+        
+        if( profileName == null || profileName.length() == 0 )
+            profileName = profile.getName();
+        
+        profileIds.setProperty( profile.getInstanceID(), 
+                                profileName );
+    }
+    
+    /**
+     * Returns the profile properties with values collected
+     * in a connection profile instance.
+     * @param profileInstanceId the instance id of a connection profile
+     * @return  the properties of a connection profile instance
+     * @throws IllegalArgumentException if instance is not found.
+     * @deprecated  As of DTP 1.6, replaced by {@link #getProfileProperties(String, File)}
+     */
+    public Properties getProfileProperties( String profileInstanceId )
+    {
+        IConnectionProfile profile = getProfile( profileInstanceId );        
+        return profile.getBaseProperties();
+    }
+
+    /**
+     * Returns the profile properties with values collected
+     * in the specified connection profile instance in the storageFile.
+     * @param profileInstanceId     the unique static id of 
+     *                              a connection profile instance
+     * @param storageFile   a file that stores profile instances; 
+     *                      may be null, which would use the default store 
+     *                      of the Connectivity plugin
+     * @return  the properties of a connection profile instance
+     * @throws IllegalArgumentException if connection profile instance is not found.
+     * @since DTP 1.6
+     */
+    public Properties getProfileProperties( String profileInstanceId,
+                                            File storageFile )
+    {
+        IConnectionProfile profile = null;
+        try
+        {
+            profile = getProfileById( profileInstanceId, storageFile );
+        }
+        catch( OdaException ex )
+        {
+            throw new IllegalArgumentException( ex.toString() );
+        } 
+        if( profile == null )
+            throw new IllegalArgumentException( profileInstanceId );
+        
+        return profile.getBaseProperties();
+    }
+    
+    /**
+     * Returns the profile with given instance id found in ProfileManager cache.
+     * @param profileInstanceId     the unique instance id of a profile
+     *                              in cache, as found in the collection
+     *                              returned by the getProfiles methods
+     * @return  the instance of matching profile
+     * @throws IllegalArgumentException if instance is not found.
+     * @deprecated  As of DTP 1.6, replaced by {@link #getProfileById(String, File)}
+     */
+    public IConnectionProfile getProfile( String profileInstanceId )
+    {
+        IConnectionProfile profile =
+            ProfileManager.getInstance().getProfileByInstanceID( profileInstanceId );
+        if( profile == null )
+            throw new IllegalArgumentException( profileInstanceId );
+        return createOdaWrapper( profile );
+    }
+    
+    /**
+     * Finds and returns the profile instance in given storage file
+     * that matches the given profile's static instance id.
+     * @param profileInstanceId     the unique static id of 
+     *                              a connection profile instance
+     * @param storageFile   a file that stores profile instances; 
+     *                      may be null, which would use the default store 
+     *                      of the Connectivity plugin
+     * @return  the matching profile instance, or null if not found
+     * @since DTP 1.6
+     */
+    public IConnectionProfile getProfileById( String profileInstanceId,
+                                              File storageFile )
+        throws OdaException
+    {
+        // first load all profiles found in given storage file, if necessary
+        IConnectionProfile[] profilesInFile = loadProfiles( storageFile );
+
+        for( int i = 0; i < profilesInFile.length; i++ ) 
+        {
+            if( profilesInFile[i].getInstanceID().equals( profileInstanceId ) )
+                return createOdaWrapper( profilesInFile[i] );   // a match
+        }
+        return null;    // no match is found
+    }
+    
+    /**
+     * Finds and returns the profile instance in given storage file
+     * that matches the given profile instance name.
+     * @param profileName   the unique name of a connection profile instance.
+     * @param storageFile   a file that stores profile instances; 
+     *                      may be null, which would use the default store 
+     *                      of the Connectivity plugin
+     * @return  the matching profile instance, or null if not found
+     * @throws OdaException
+     */
+    public IConnectionProfile getProfileByName( String profileName,
+                                                File storageFile )
+        throws OdaException
+    {
+        return getProfileByName( profileName, storageFile, null );
+    }
+
+    /**
+     * Finds and returns the profile instance in given profile store file
+     * that matches the given profile instance name.
+     * If the specified file is encrypted, use the cipher provider registered 
+     * for the specified file extension.
+     * @param profileName   the unique name of a connection profile instance.
+     * @param profileStoreFile  a file that stores profile instances; 
+     *                      may be null, which would use the default store 
+     *                      of the Connectivity plugin
+     * @param encryptedFileExtension   the file extension for which a cipher provider is registered.
+     *         It may be different from that of the specified file.
+     *         If null value, the extension of the specified file will be used by default.
+     * @return  the matching profile instance, or null if not found
+     * @throws OdaException
+     * @since 3.2.7 (DTP 1.9.2)
+     */
+    public IConnectionProfile getProfileByName( String profileName, File profileStoreFile, 
+            String encryptedFileExtension )
+        throws OdaException
+    {
+        // first load all profiles found in given storage file, if necessary
+        IConnectionProfile[] profilesInFile = loadProfiles( profileStoreFile, encryptedFileExtension );
+
+        for( int i = 0; i < profilesInFile.length; i++ ) 
+        {
+            if( matchesProfileName( profilesInFile[i].getName(), profileName ) )
+                return createOdaWrapper( profilesInFile[i] );   // a match
+        }
+        return null;    // no match is found
+    }
+
+    private boolean matchesProfileName( String profileName, String nameToMatch )
+    {
+        return profileName.equals( nameToMatch );
+    }
+    
+    /**
+     * Find and returns the connection profile instance whose name is specified 
+     * in the specified connection properties.
+     * The profile store file object may be provided in the given context,
+     * or its file path is specified in the connection properties.
+     * <br>This method delegates to the default property provider to get the external profile
+     * store reference from the specified properties and application context.  
+     * Clients with custom IPropertyProvider implementation should obtain own profile reference, 
+     * for use as arguments to {@link #getProfileByName(String, File)}.
+     * @param dataSourceDesignProps connection properties specified in a data source design
+     * @param appContext      an application context Map passed thru to a connection,
+     *                        and which may contain the IPropertyProvider.ODA_CONN_PROP_CONTEXT key
+     *                        and corresponding connection property context object as value.
+     *                        If no such nested context is found, this application context Map is used
+     *                        as the connection property context.
+     *                        Optional; may be null.
+     * @return  the matching profile instance, or null if not found
+     * @since DTP 1.6
+     * @see #getProfileByName(String, File)
+     */
+    public IConnectionProfile getProfileByName( 
+            Properties dataSourceDesignProps, Object appContext )
+    {
+        // use the nested context for a profile store File object, if exists
+        Object connPropContext = ProviderUtil.getConnectionPropertyContext( appContext );
+        if( connPropContext == null )
+            connPropContext = appContext;
+        
+        // delegates to the default property provider to get the profile reference; 
+        // re-use previously loaded profiles, if exists; client may override default re-use behavior 
+        // by explicitly calling #refresh() earlier, or trigger the default property provider to refresh 
+        // by setting the IPropertyProvider.ODA_RELOAD_PROFILE_STORE key entry in the 
+        // connection property context
+        ProfilePropertyProviderImpl profileProvider = new ProfilePropertyProviderImpl();
+        profileProvider.setRefreshProfileStore( false );
+        return createOdaWrapper( 
+                profileProvider.getConnectionProfile( dataSourceDesignProps, connPropContext ));       
+    }
+
+    private OdaConnectionProfile createOdaWrapper( IConnectionProfile wrappedProfile )
+    {
+        if( wrappedProfile == null )
+            return null;	// nothing to wrap
+        
+        if( wrappedProfile instanceof OdaConnectionProfile )
+        {
+            if( ((OdaConnectionProfile) wrappedProfile).hasWrappedProfile() )
+                return (OdaConnectionProfile) wrappedProfile;	// already a wrapper
+        }
+        return new OdaConnectionProfile( wrappedProfile ) ;
+    }
+    
+    /**
+     * Verifies if the specified connection profile name is already used among 
+     * those profile instances that are cached and managed by the DTP Connection Profile Manager.
+     * @param profileName   unique identifier of a DTP connection profile
+     * @return  true if the name is already used; false otherwise
+     * @since 3.2 (DTP 1.7)
+     */
+    public static boolean isProfileNameUsed( String profileName )
+    {
+        return OdaProfileFactory.isProfileNameUsed( profileName );
+    }
+    
+    /**
+     * Creates a new transient profile instance based on the specified data source profile id 
+     * and connection properties.
+     * @param odaDataSourceId   an ODA data source id as specified in an oda.dataSource extension
+     * @param profileProperties    connection properties to be stored as profile properties
+     * @return  a new instance of {@link IConnectionProfile} that are non persistent
+     * @throws OdaException
+     * @since 3.2.1 (DTP 1.7.2)
+     */
+    public IConnectionProfile createTransientProfile( String odaDataSourceId, 
+            Properties profileProperties )
+        throws OdaException
+    {
+        String profileProviderId = odaDataSourceId;
+        
+        // if referencing an existing profile instance, should use its current direct provider id
+        IConnectionProfile referencedProfile = getProfileByName( profileProperties, null );
+        if( referencedProfile instanceof OdaConnectionProfile )
+            profileProviderId = ((OdaConnectionProfile)referencedProfile).getDirectProviderId();
+
+        return OdaProfileFactory.createTransientProfile( profileProviderId, profileProperties );
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/OdaProfilePlugin.java b/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/OdaProfilePlugin.java
new file mode 100644
index 0000000..75908f9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/OdaProfilePlugin.java
@@ -0,0 +1,67 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.profile;
+
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * ODA Profile bundle activator class.
+ * @since DTP 1.6
+ */
+public class OdaProfilePlugin extends Plugin
+{
+    // The plug-in ID
+    public static final String PLUGIN_ID = "org.eclipse.datatools.connectivity.oda.profile"; //$NON-NLS-1$
+
+    private static OdaProfilePlugin sm_plugin;
+    
+    public OdaProfilePlugin()
+    {        
+        super();
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.core.runtime.Plugin#start(org.osgi.framework.BundleContext)
+     */
+    public void start( BundleContext context ) throws Exception 
+    {
+        super.start( context );
+        sm_plugin = this;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
+     */
+    public void stop( BundleContext context ) throws Exception
+    {
+        // release plugin's singleton instance
+        OdaProfileExplorer.releaseInstance();
+        
+        sm_plugin = null;
+        super.stop( context );
+    }
+
+    /**
+     * Returns the shared instance of this plugin.
+     * @return  the shared plugin instance
+     */
+    public static OdaProfilePlugin getDefault()
+    {
+        return sm_plugin;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/ProfileFileExtension.java b/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/ProfileFileExtension.java
new file mode 100644
index 0000000..11a3a0a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/ProfileFileExtension.java
@@ -0,0 +1,127 @@
+/*

+ *************************************************************************

+ * Copyright (c) 2011 Actuate Corporation.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *  Actuate Corporation - initial API and implementation

+ *  

+ *************************************************************************

+ */

+

+package org.eclipse.datatools.connectivity.oda.profile;

+

+import java.util.logging.Logger;

+

+import org.eclipse.core.runtime.IConfigurationElement;

+import org.eclipse.core.runtime.IExtension;

+import org.eclipse.core.runtime.IExtensionPoint;

+import org.eclipse.core.runtime.IExtensionRegistry;

+import org.eclipse.core.runtime.Platform;

+import org.eclipse.datatools.connectivity.oda.profile.nls.Messages;

+

+/**

+ * Provides helper methods for loading and processing extensions that implement

+ * the org.eclipse.datatools.connectivity.oda.profile.profileStore of extension point.

+ * @since 3.2.7 (DTP 1.9.2)

+ */

+public class ProfileFileExtension 

+{

+    public static final String FILE_EXT_SEPARATOR = "."; //$NON-NLS-1$

+    

+    private static final String PROFILE_STORE_EXT_POINT = "org.eclipse.datatools.connectivity.oda.profile.profileStore"; //$NON-NLS-1$

+    private static final String FILE_EXT_ELEMENT = "fileExtension"; //$NON-NLS-1$

+    private static final String DEFAULT_ATTRIBUTE = "default"; //$NON-NLS-1$

+    private static final String EMPTY_STRING = ""; //$NON-NLS-1$

+

+    private static String sm_defaultFileExtension;

+    // logging variables

+    private static final String sm_className = ProfileFileExtension.class.getName();

+    

+    /**

+     * Returns the default file extension specified in an extension.

+     * The first extension found will be applied.

+     * @return the default file extension; or null if no valid extension exists

+     */

+    public static String getDefault()

+    {

+        if( sm_defaultFileExtension == null )

+        {

+            synchronized( ProfileFileExtension.class )

+            {

+                if( sm_defaultFileExtension == null )

+                    sm_defaultFileExtension = loadDefaultFileExtension();

+            }

+        }

+        return sm_defaultFileExtension;

+    }

+    

+    /**

+     * Convenience method to indicate whether the specified defaultFileExtension exists

+     * and can be applied to a profile store file.

+     * @param defaultFileExtension a default file extension, normally returned by {@link #getDefault()}

+     * @return true if the specified defaultFileExtension can be applied to a profile store file;

+     *         false otherwise

+     */

+    public static boolean exists( String defaultFileExtension )

+    {

+        return defaultFileExtension != null && defaultFileExtension.trim().length() > 0;

+    }

+    

+    private static String loadDefaultFileExtension()

+    {

+        IExtensionRegistry extReg = Platform.getExtensionRegistry( );

+        IExtensionPoint extPoint = extReg.getExtensionPoint( PROFILE_STORE_EXT_POINT );

+        if ( extPoint == null )

+            return EMPTY_STRING;

+

+        IExtension[] extensions = extPoint.getExtensions( );

+        if( extensions.length < 1 )

+            return EMPTY_STRING;    // no extension is found in registry

+

+        if( extensions.length > 1 )

+        {

+            // log that multiple extensions are found, but only one will get used

+            String warningMsg = Messages.bind( Messages.profileFileExtension_MULTIPLE_EXTENSIONS_FOUND,

+                                                PROFILE_STORE_EXT_POINT );

+            Logger.getLogger( sm_className ).warning( warningMsg );

+        }

+        

+        for( int i = 0; i < extensions.length; i++ )

+        {

+            IConfigurationElement[] configElements = extensions[i].getConfigurationElements();

+            if( configElements.length < 1 )

+                continue;   // skip this extension with no configuration element

+

+            for ( int j = 0; j < configElements.length; j++ )

+            {

+                IConfigurationElement configElement = configElements[j];

+                if( ! configElement.getName().equals( FILE_EXT_ELEMENT ) )

+                    continue;   // skip

+

+                String defaultFileExt = configElement.getAttribute( DEFAULT_ATTRIBUTE ); 

+                if ( defaultFileExt != null )

+                {

+                    defaultFileExt = defaultFileExt.trim();

+                    // strips out any leading file extension separator

+                    if( defaultFileExt.startsWith( FILE_EXT_SEPARATOR ) )

+                        defaultFileExt = defaultFileExt.substring( FILE_EXT_SEPARATOR.length() );

+

+                    if( defaultFileExt.length() > 0 )

+                    {

+                        Logger.getLogger( sm_className ).info( 

+                                Messages.bind( Messages.profileFileExtension_APPLIED_DEFAULT_FILE_EXT, 

+                                                new Object[]{ defaultFileExt, PROFILE_STORE_EXT_POINT, 

+                                                                extensions[i].getContributor().getName()} ));

+                        return defaultFileExt;     // accepts the first valid extension element

+                    }

+                }

+            }

+        }

+        return EMPTY_STRING;

+    }           

+

+}

diff --git a/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/internal/OdaConnectionProfile.java b/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/internal/OdaConnectionProfile.java
new file mode 100644
index 0000000..edfdffc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/internal/OdaConnectionProfile.java
@@ -0,0 +1,558 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007, 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.profile.internal;
+
+import java.util.Map;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.PlatformObject;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.IJobChangeListener;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.IConfigurationType;
+import org.eclipse.datatools.connectivity.IConnectListener;
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IConnectionProfileProvider;
+import org.eclipse.datatools.connectivity.IManagedConnection;
+import org.eclipse.datatools.connectivity.IPropertySetListener;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfile.DisconnectJob;
+
+/**
+ * An ODA wrapper of a Connectivity connection profile instance.
+ * @since DTP 1.6
+ */
+public class OdaConnectionProfile extends PlatformObject 
+    implements IConnectionProfile
+{
+
+    private IConnectionProfile m_wrappedProfile;
+    private String m_odaWrapperExtensionId;
+    private boolean m_hideWrapperId = false;
+    private String m_directProviderId;
+    
+    /**
+     * Constructor.
+     * @param wrappedProfile    the connection proifle instance wrapped by this instance.
+     * @throws NullPointerException if the specified wrappedProfile is null
+     */
+    public OdaConnectionProfile( IConnectionProfile wrappedProfile )
+    {
+        if( wrappedProfile == null )
+            throw new NullPointerException();
+        
+        setWrappedProfile( wrappedProfile );
+    }
+
+    protected OdaConnectionProfile()
+    {
+        super();
+    }
+    
+    /**
+     * A subclass may choose to extend without providing a wrapped connection profile instance,
+     * but it must then override all methods that require a wrapped profile.
+     * @param wrappedProfile
+     */
+    protected void setWrappedProfile( IConnectionProfile wrappedProfile )
+    {
+        m_wrappedProfile = wrappedProfile;
+    }
+    
+    /**
+     * For internal use only.
+     */
+    public IConnectionProfile getWrappedProfile()
+    {
+        return m_wrappedProfile;
+    }
+
+    /* Gets the leaf level wrapped profile if this has nested level of OdaConnectionProfile instances.
+    */
+    private IConnectionProfile getLeafWrappedProfile()
+    {
+        IConnectionProfile wrappedProfile = getWrappedProfile(); 
+        while( wrappedProfile instanceof OdaConnectionProfile && 
+               ((OdaConnectionProfile)wrappedProfile).hasWrappedProfile() )
+        {
+            wrappedProfile = ((OdaConnectionProfile)wrappedProfile).getWrappedProfile(); 
+        }
+        return wrappedProfile;
+    }
+
+    /**
+     * Indicates whether this contains a wrapped connection profile instance.
+     * @return  true if a wrapped profile instance exists; false otherwise.
+     */
+    public boolean hasWrappedProfile()
+    {
+        return ( m_wrappedProfile != null );
+    }
+    
+    /**
+     * Compares this to the specified connection profile instance.
+     * @param aProfile  the connection profile instance to compare this against
+     * @return  true if the specified instance is equal to this; false otherwise.
+     */
+    public boolean equals( IConnectionProfile aProfile )
+    {
+        if( aProfile == null || ! hasWrappedProfile() )
+            return false;
+        return getWrappedProfile().getInstanceID().equals( aProfile.getInstanceID() );
+    }
+
+    /**
+     * Specifies the id of an ODA data source extension that serves as a wrapper.
+     * @param odaWrapperExtensionId the id of an ODA data source extension that serves 
+     *              either as the direct or indirect provider of the wrapped connection profile;
+     *              may be null for no separate ODA wrapper profile provider
+     */
+    public void setOdaWrapperExtensionId( String odaWrapperExtensionId )
+    {
+        // oda extension is not a direct provider of the wrapped profile
+       if( hasWrappedProfile() &&
+           ! getWrappedProfile().getProviderId().equals( odaWrapperExtensionId ) )    
+           m_odaWrapperExtensionId = odaWrapperExtensionId;
+       else
+           m_odaWrapperExtensionId = null;  // no separate ODA wrapper profile provider
+    }
+
+    /**
+     * Specifies the direct provider id of the wrapped connection profile.
+     * @param directProviderId The id of direct provider of the wrapped connection profile,
+     *              overriding the profile's own provider id info; may be null
+     */
+    public void setDirectProviderId( String directProviderId )
+    {
+        m_directProviderId = directProviderId;
+    }
+
+    /**
+     * Specifies whether getProviderId() should return the direct provider id,
+     * ignoring its wrapper id even when applicable.
+     * This is used to provide compatibilty and minimize code migration in existing implementation.
+     * @param hide  true to ignore the wrapper id even when applicable
+     */
+    public void setHideWrapperId( boolean hide )
+    {
+        m_hideWrapperId = hide;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#getProviderId()
+     */
+    public String getProviderId()
+    {
+        if( m_hideWrapperId )
+            return getDirectProviderId();
+        return hasOdaWrapperProvider() ? 
+                    m_odaWrapperExtensionId : 
+                    getDirectProviderId();
+    }
+    
+    public boolean hasOdaWrapperProvider()
+    {
+        return m_odaWrapperExtensionId != null;
+    }
+    
+    public String getDirectProviderId()
+    {
+        if( m_directProviderId != null )
+            return m_directProviderId;
+        return hasWrappedProfile() ? getLeafWrappedProfile().getProviderId() : null;
+    }
+    
+    /**
+     * Close and clean up this connection profile wrapper and its wrapped profile instance.
+     */
+    public void close()
+    {
+        // in case this is a nested OdaConnectionProfile, get the lowest wrapped profile
+        IConnectionProfile wrappedProfile = getLeafWrappedProfile(); 
+        
+        // try to close and delete the wrapped profile if it is a transient profile type
+        boolean isClosed = ProfileManager.getInstance().deleteTransientProfile( wrappedProfile );
+        
+        if( ! isClosed )    // perhaps using a persisted connection profile
+            disconnect( null );   // simply disconnect this, does nothing if already disconnected
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#addConnectListener(org.eclipse.datatools.connectivity.IConnectListener)
+     */
+    public void addConnectListener( IConnectListener listener )
+    {
+        m_wrappedProfile.addConnectListener( listener );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#addPropertySetListener(org.eclipse.datatools.connectivity.IPropertySetListener)
+     */
+    public void addPropertySetListener( IPropertySetListener listener )
+    {
+        m_wrappedProfile.addPropertySetListener( listener );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#arePropertiesComplete()
+     */
+    public boolean arePropertiesComplete()
+    {
+        if( hasWrappedProfile() )
+            return getWrappedProfile().arePropertiesComplete();
+        return false;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#arePropertiesComplete(java.lang.String)
+     */
+    public boolean arePropertiesComplete( String type )
+    {
+        if( hasWrappedProfile() )
+            return getWrappedProfile().arePropertiesComplete( type );
+        return false;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#canWorkOffline()
+     */
+    public boolean canWorkOffline()
+    {
+        if( hasWrappedProfile() )
+            return getWrappedProfile().canWorkOffline();
+        return false;
+    }
+    
+    /**
+     * For internal use only.
+     * Connect through scheduling a synchronized job. 
+     * This method would wait till any pending disconnect operation(s) on this profile instance 
+     * are finished, before scheduling its connect operation.
+     * It handles the case of re-connecting via a profile instance, whose disconnect jobs 
+     * have been scheduled but did not wait to finish for optimizing response time.
+     */
+    public IStatus connectSynchronously()
+    {
+        // first wait till all pending DisconnectJob that belong to 
+        // this (lowest wrapped) profile have finished
+        waitForDisconnectingJobs( getLeafWrappedProfile() );
+
+        if( isConnected() )
+            return Status.OK_STATUS;
+
+        return this.connect();        
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#connect()
+     */
+    public IStatus connect()
+    {
+        return m_wrappedProfile.connect();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#connectWithoutJob()
+     */
+    public IStatus connectWithoutJob()
+    {
+        return m_wrappedProfile.connectWithoutJob();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#connect(org.eclipse.core.runtime.jobs.IJobChangeListener)
+     */
+    public void connect( IJobChangeListener listener )
+    {
+        m_wrappedProfile.connect( listener );
+    }
+
+    private void waitForDisconnectingJobs( IConnectionProfile disconnectingProfile )
+    {
+        Job[] profileJobs = Job.getJobManager().find( disconnectingProfile );
+        if( profileJobs.length == 0 )
+            return;   // no jobs found on the specified profile instance
+
+        // iterate thru each pending DisconnectJob, and wait for it to finish
+        for( int index = 0; index < profileJobs.length; index++ )
+        {
+            if( ! (profileJobs[index] instanceof DisconnectJob) )
+                continue;     // not a DisconnectJob, skip
+
+            Job disconnectProfileJob = profileJobs[index];
+            if( disconnectProfileJob.getState() == Job.NONE ) 
+                continue;     // DisconnectJob is not in a pending state, skip
+
+            try
+            {
+                // wait for the pending DisconnectJob to finish
+                disconnectProfileJob.join();
+            }
+            catch( InterruptedException ex )
+            {}
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#disconnect()
+     */
+    public IStatus disconnect()
+    {
+        return m_wrappedProfile.disconnect();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#disconnect(org.eclipse.core.runtime.jobs.IJobChangeListener)
+     */
+    public void disconnect( IJobChangeListener listener )
+    {
+        m_wrappedProfile.disconnect( listener );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#saveWorkOfflineData()
+     */
+    public IStatus saveWorkOfflineData()
+    {
+        return m_wrappedProfile.saveWorkOfflineData();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#saveWorkOfflineData(org.eclipse.core.runtime.jobs.IJobChangeListener)
+     */
+    public void saveWorkOfflineData( IJobChangeListener listener )
+    {
+        m_wrappedProfile.saveWorkOfflineData( listener );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#workOffline()
+     */
+    public IStatus workOffline()
+    {
+        return m_wrappedProfile.workOffline();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#workOffline(org.eclipse.core.runtime.jobs.IJobChangeListener)
+     */
+    public void workOffline( IJobChangeListener listener )
+    {
+        m_wrappedProfile.workOffline( listener );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#createConnection(java.lang.String)
+     */
+    public IConnection createConnection( String factory )
+    {
+        return m_wrappedProfile.createConnection( factory );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#createConnection(java.lang.String, java.lang.String, java.lang.String)
+     */
+    public IConnection createConnection( String factoryId, String uid,
+            String pwd )
+    {
+        return m_wrappedProfile.createConnection( factoryId, uid, pwd );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#getBaseProperties()
+     */
+    public Properties getBaseProperties()
+    {
+        return m_wrappedProfile.getBaseProperties();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#getCategory()
+     */
+    public ICategory getCategory()
+    {
+        return m_wrappedProfile.getCategory();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#getConfigurationType()
+     */
+    public IConfigurationType getConfigurationType()
+    {
+        return m_wrappedProfile.getConfigurationType();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#getConnectionState()
+     */
+    public int getConnectionState()
+    {
+        if( hasWrappedProfile() )
+            return getWrappedProfile().getConnectionState();
+        return DISCONNECTED_STATE;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#getDescription()
+     */
+    public String getDescription()
+    {
+        return m_wrappedProfile.getDescription();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#getInstanceID()
+     */
+    public String getInstanceID()
+    {
+        return m_wrappedProfile.getInstanceID();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#getManagedConnection(java.lang.String)
+     */
+    public IManagedConnection getManagedConnection( String type )
+    {
+        return m_wrappedProfile.getManagedConnection( type );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#getName()
+     */
+    public String getName()
+    {
+        return m_wrappedProfile.getName();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#getParentProfile()
+     */
+    public IConnectionProfile getParentProfile()
+    {
+        return m_wrappedProfile.getParentProfile();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#getProfileExtensions()
+     */
+    public Map getProfileExtensions()
+    {
+        return m_wrappedProfile.getProfileExtensions();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#getProperties(java.lang.String)
+     */
+    public Properties getProperties( String type )
+    {
+        return m_wrappedProfile.getProperties( type );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#getProvider()
+     */
+    public IConnectionProfileProvider getProvider()
+    {
+        return m_wrappedProfile.getProvider();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#getProviderName()
+     */
+    public String getProviderName()
+    {
+        return m_wrappedProfile.getProviderName();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#isAutoConnect()
+     */
+    public boolean isAutoConnect()
+    {
+        if( hasWrappedProfile() )
+            return getWrappedProfile().isAutoConnect();
+        return false;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#isConnected()
+     */
+    public boolean isConnected()
+    {
+        if( hasWrappedProfile() )
+            return getWrappedProfile().isConnected();
+        return false;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#removeConnectListener(org.eclipse.datatools.connectivity.IConnectListener)
+     */
+    public void removeConnectListener( IConnectListener listener )
+    {
+        m_wrappedProfile.removeConnectListener( listener );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#removePropertySetListener(org.eclipse.datatools.connectivity.IPropertySetListener)
+     */
+    public void removePropertySetListener( IPropertySetListener listener )
+    {
+        m_wrappedProfile.removePropertySetListener( listener );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#setBaseProperties(java.util.Properties)
+     */
+    public void setBaseProperties( Properties props )
+    {
+        m_wrappedProfile.setBaseProperties( props );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#setConnected(boolean)
+     */
+    public void setConnected( boolean connected )
+    {
+        if( hasWrappedProfile() )
+            getWrappedProfile().setConnected( connected );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#setProperties(java.lang.String, java.util.Properties)
+     */
+    public void setProperties( String type, Properties props )
+    {
+        if( ProfileManager.getInstance().isTransientProfile( m_wrappedProfile ) && 
+                m_wrappedProfile instanceof ConnectionProfile )
+            ((ConnectionProfile)m_wrappedProfile).internalSetProperties( type, props ); // skip event notification
+        else
+            m_wrappedProfile.setProperties( type, props );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.IConnectionProfile#supportsWorkOfflineMode()
+     */
+    public boolean supportsWorkOfflineMode()
+    {
+        if( hasWrappedProfile() )
+            return getWrappedProfile().supportsWorkOfflineMode();
+        return false;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/internal/OdaProfileFactory.java b/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/internal/OdaProfileFactory.java
new file mode 100644
index 0000000..171c3bd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/internal/OdaProfileFactory.java
@@ -0,0 +1,187 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.profile.internal;
+
+import java.io.File;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.eclipse.datatools.connectivity.ConnectionProfileException;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileMgmt;
+import org.eclipse.datatools.connectivity.internal.InternalProfileManager;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.profile.Constants;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ConnectionProfileProperty;
+
+/**
+ * Internal factory of an ODA connection profile instance.
+ */
+public class OdaProfileFactory
+{
+    private static final String NAME_SEPARATOR = " "; //$NON-NLS-1$
+
+    // logging variables
+    private static final String sm_className = OdaProfileFactory.class.getName();
+    private static Logger sm_logger;
+    
+    /**
+     * Creates a persisted ODA connection profile instance.
+     * @param name  profile name; its name may be adjusted for uniqueness among all the profiles
+     *          managed by the DTP profile manager
+     * @param description   optional description of the profile
+     * @param odaDataSourceId   an ODA data source id as specified in an oda.dataSource extension
+     * @param profileProperties    connection properties to be stored as profile properties
+     * @return  a new instance of {@link IConnectionProfile} that persists in the DTP default profile store file
+     * @throws OdaException
+     */
+    public static IConnectionProfile createProfile(
+            String name, String description, String odaDataSourceId, Properties profileProperties )
+        throws OdaException
+    {
+        String uniqueName = getUniqueProfileName( name );
+        
+        // if profileProperties contains an entry for the profile provider id, use it instead of
+        // the specified odaDataSourceId
+        String profileProviderId = profileProperties.getProperty( Constants.DB_PROFILE_PROVIDER_ID );
+        if( profileProviderId != null )
+            odaDataSourceId = profileProviderId;
+        
+        try
+        {
+            IConnectionProfile newProfile =
+                ProfileManager.getInstance().createProfile( uniqueName, description, 
+                    odaDataSourceId, profileProperties );
+            return new OdaConnectionProfile( newProfile );
+        }
+        catch( ConnectionProfileException ex )
+        {
+            getLogger().logp( Level.WARNING, sm_className, "createProfile(String,String,String,Properties)",  //$NON-NLS-1$
+                    "Unable to create a persistent profile instance.", ex ); //$NON-NLS-1$
+            throw new OdaException( ex );
+        }
+    }
+
+    /**
+     * Creates a transient ODA connection profile instance.
+     * @param connProperties    connection properties to be stored as profile properties,
+     *              including a property entry for the profile provider id
+     * @return  a new instance of {@link IConnectionProfile} that are non persistent;
+     *          or null if the specified properties do not contain expected property entries
+     * @throws OdaException
+     */
+    public static IConnectionProfile createTransientProfile( Properties connProperties ) 
+        throws OdaException
+    {
+        final String methodName = "createTransientProfile(Properties)"; //$NON-NLS-1$
+        
+        if( ConnectionProfileProperty.hasProfileName( connProperties ) )
+        {
+            getLogger().logp( Level.FINE, sm_className, methodName,
+                "The connection properties contain an external profile name reference; " + //$NON-NLS-1$
+                "not expected to use for a transient profile." ); //$NON-NLS-1$
+            return null;
+        }
+        
+        String profileProviderId = ( connProperties != null ) ? 
+                connProperties.getProperty( Constants.DB_PROFILE_PROVIDER_ID ) : null;
+        if( profileProviderId == null || profileProviderId.length() == 0 )
+        {
+            getLogger().logp( Level.FINE, sm_className, methodName,
+                    "No profile provider id specified in the connection properties." ); //$NON-NLS-1$
+            return null;
+        }
+
+        return createTransientProfile( profileProviderId, connProperties );
+    }
+
+    /**
+     * Creates a transient ODA connection profile instance.
+     * @param odaDataSourceId   an ODA data source id as specified in an oda.dataSource extension
+     * @param profileProperties    connection properties to be stored as profile properties
+     * @return  a new instance of {@link IConnectionProfile} that are non persistent
+     * @throws OdaException
+     */
+    public static IConnectionProfile createTransientProfile( String odaDataSourceId, Properties profileProperties )
+        throws OdaException
+    {
+        try
+        {
+            IConnectionProfile newProfile =
+                ProfileManager.getInstance().createTransientProfile( odaDataSourceId, profileProperties );
+            return new OdaConnectionProfile( newProfile );
+        }
+        catch( ConnectionProfileException ex )
+        {
+            getLogger().logp( Level.WARNING, sm_className, "createTransientProfile(String,Properties)",  //$NON-NLS-1$
+                    "Unable to create a transient profile instance.", ex ); //$NON-NLS-1$
+            throw new OdaException( ex );
+        }
+    }
+
+    public static boolean isProfileNameUsed( String profileName )
+    {
+        IConnectionProfile existingProfile = 
+            InternalProfileManager.getInstance().getProfileByName( profileName, false );
+        return ( existingProfile != null );
+    }
+    
+    private static String getUniqueProfileName( String profileName )
+    {
+        if( ! isProfileNameUsed( profileName ) )
+            return profileName;     // use as is
+        
+        // append a number to name till an unique name is found
+        int nameCounter = 1;
+        String newName = formatProfileName( profileName, nameCounter );
+        while( isProfileNameUsed( newName ) )
+        {
+            newName = formatProfileName( profileName, ++nameCounter );
+        }
+        return newName;
+    }
+    
+    private static String formatProfileName( String profileName, int nameCounter )
+    {
+        return profileName + NAME_SEPARATOR + nameCounter;
+    }
+   
+    /**
+     * Returns the default profile store file used by the DTP Data Source Explorer.
+     * @return
+     */
+    public static File defaultProfileStoreFile()
+    {
+        // TODO - refactor to have ProfileManager provide an API method directly 
+        return ConnectionProfileMgmt.getStorageLocation().append( 
+                            ConnectionProfileMgmt.FILENAME ).toFile();
+    }
+    
+    private static Logger getLogger()
+    {
+        if( sm_logger == null )
+        {
+            synchronized( OdaProfileFactory.class )
+            {
+                if( sm_logger == null )
+                    sm_logger = Logger.getLogger( sm_className );
+            }
+        }
+        return sm_logger;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/internal/ProfileCategoryUtil.java b/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/internal/ProfileCategoryUtil.java
new file mode 100644
index 0000000..99afecc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/internal/ProfileCategoryUtil.java
@@ -0,0 +1,87 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.profile.internal;
+
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.IConnectionProfileProvider;
+import org.eclipse.datatools.connectivity.internal.CategoryProvider;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileManager;
+import org.eclipse.datatools.connectivity.oda.profile.Constants;
+
+/**
+ *  An internal utility class for ODA connection profile category definition.
+ *  @since DTP 1.6
+ */
+public class ProfileCategoryUtil
+{
+
+    /**
+     * Returns the category instance of the connection profile type defined
+     * with the specified ODA data source ID.
+     * @param odaDataSourceId   ODA data source type ID
+     * @return  a connection profile category instance
+     */
+    public static ICategory getCategory( String odaDataSourceId )
+    {
+        IConnectionProfileProvider profileProvider =
+            ConnectionProfileManager.getInstance().getProvider( odaDataSourceId );
+        
+        return ( profileProvider != null ) ? profileProvider.getCategory() : null;
+    }
+
+    /**
+     * Indicates whether the specified connection profile category
+     * has an unknown category id.
+     * @param profileCategory   a connection profile category
+     * @return  true if the specified category is null or unknown type;
+     *      false otherwise
+     */
+    public static boolean isUnknownCategory( ICategory profileCategory )
+    {
+        String categoryId = ( profileCategory != null ) ?
+                profileCategory.getId() : null;
+        return isUnknownCategory( categoryId );
+    }
+
+    /**
+     * Indicates whether the specified connection profile category id
+     * is defined as unknown.
+     * @param profileCategory   a connection profile category
+     * @return  true if the specified category id is null or defined as unknown;
+     *      false otherwise
+     */
+    public static boolean isUnknownCategory( String categoryId )
+    {
+        return ( categoryId == null || 
+                 categoryId.equals( CategoryProvider.ID_CATEGORY_UNKNOWN ) );
+    }
+
+    /**
+     * Indicates whether the specified connection profile category is defined
+     * under a parent category with the ODA parent id.
+     * @param profileCategory  a connection profile category
+     * @return  true if the specified category is under an ODA parent category;
+     *      false otherwise
+     */
+    public static boolean hasODAParentCategory( ICategory profileCategory )
+    {
+        if( profileCategory == null || profileCategory.getParent() == null )
+            return false;   // unknown parent category
+    
+        return profileCategory.getParent().getId()
+                    .equalsIgnoreCase( Constants.ODA_PARENT_CATEGORY_ID );       
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/nls/Messages.java b/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/nls/Messages.java
new file mode 100644
index 0000000..84e622e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/nls/Messages.java
@@ -0,0 +1,39 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2005, 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.profile.nls;
+
+import org.eclipse.osgi.util.NLS;
+
+public class Messages extends NLS
+{
+    private static final String BUNDLE_NAME = "org.eclipse.datatools.connectivity.oda.profile.nls.messages"; //$NON-NLS-1$
+
+    private Messages()
+    {
+    }
+
+    static
+    {
+        // initialize resource bundle
+        NLS.initializeMessages( BUNDLE_NAME, Messages.class );
+    }
+
+    public static String constants_componentName;
+    public static String profileFileExtension_APPLIED_DEFAULT_FILE_EXT;
+    public static String profileFileExtension_MULTIPLE_EXTENSIONS_FOUND;
+    public static String propertyProvider_CANNOT_FIND_PROFILE;
+    public static String propertyProvider_NO_RESOURCE_IDENTIFIERS;
+    public static String propertyProvider_UNABLE_TO_RESOLVE_PATH;
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/nls/messages.properties b/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/nls/messages.properties
new file mode 100644
index 0000000..579bb1d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/nls/messages.properties
@@ -0,0 +1,19 @@
+#
+#************************************************************************
+# Copyright (c) 2005, 2012 Actuate Corporation.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#  Actuate Corporation - initial API and implementation
+#  
+#************************************************************************
+# 
+constants_componentName=DTP Open Data Access
+profileFileExtension_APPLIED_DEFAULT_FILE_EXT=Applied the default file extension ({0}) contributed by the {1} extension in {2}.
+profileFileExtension_MULTIPLE_EXTENSIONS_FOUND=Multiple extensions of the {0} extension point are found.  Only one of them will be applied.
+propertyProvider_CANNOT_FIND_PROFILE=Unable to find or access the named profile ({0}) in profile store path ({1}).
+propertyProvider_NO_RESOURCE_IDENTIFIERS=No ResourceIdentifiers is available in the appContext to resolve the connection profile store file\u2019s relative path ({0}).
+propertyProvider_UNABLE_TO_RESOLVE_PATH=The ResourceIdentifiers ({0}) provided in the appContext was unable to resolve the connection profile store file\u2019s relative path ({1}).\nPlease check that the file is located under the application resources folder: {2}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/nls/package.html b/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/nls/package.html
new file mode 100644
index 0000000..bad64dd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/nls/package.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+
+[<b>Non-API</b>] Contains internal implementation of internationalization and localization features.
+<br>
+<!-- Put @see and @since tags down here. -->
+@since 3.0
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/package.html b/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/package.html
new file mode 100644
index 0000000..a768738
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/package.html
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2005, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+
+[<b>Non-API</b>] Provides common implementation of 
+the Connection Profile framework's interface for ODA custom designers.
+
+<p>
+Note: <i>The implementation classes are <b>not</b> public APIs.  
+<br>Backward compatibility support in future releases is not guaranteed.</i>
+
+<!-- Put @see and @since tags down here. -->
+@since 3.0
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/provider/ProfilePropertyProviderImpl.java b/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/provider/ProfilePropertyProviderImpl.java
new file mode 100644
index 0000000..e76d94a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.profile/src/org/eclipse/datatools/connectivity/oda/profile/provider/ProfilePropertyProviderImpl.java
@@ -0,0 +1,487 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007, 2013 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.profile.provider;
+
+import java.io.File;
+import java.net.URI;
+import java.net.URL;
+import java.util.Map;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.consumer.services.IPropertyProvider;
+import org.eclipse.datatools.connectivity.oda.consumer.services.impl.ProviderUtil;
+import org.eclipse.datatools.connectivity.oda.profile.OdaProfileExplorer;
+import org.eclipse.datatools.connectivity.oda.profile.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.util.ResourceIdentifiers;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ConnectionProfileProperty;
+import org.eclipse.datatools.connectivity.services.PluginResourceLocator;
+
+/**
+ *  Provider of externalized properties defined in a linked connection profile.
+ *  @since 3.0.4
+ */
+public class ProfilePropertyProviderImpl implements IPropertyProvider
+{
+    private static final String FILE_EXT_SEPARATOR = "."; //$NON-NLS-1$
+    private static final String PROFILE_STORE_FILE_ORIGINAL_EXT = 
+        "org.eclipse.datatools.connectivity.oda.profile_provider.storeFileOrigExt"; //$NON-NLS-1$
+    
+    // logging variables
+    private static final String sm_className = ProfilePropertyProviderImpl.class.getName();
+    private static Logger sm_logger;
+    
+    private boolean m_refreshProfileStore = true;
+    private String m_profileStoreFileExt = null;    // placeholder for original file extension
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.consumer.services.IPropertyProvider#getDataSourceProperties(java.util.Properties, java.lang.Object)
+     */
+    public Properties getDataSourceProperties( Properties candidateProperties,
+            Object appContext ) throws OdaException
+    {
+        final String methodName = "getDataSourceProperties(Properties,Object)"; //$NON-NLS-1$
+        
+        IConnectionProfile connProfile = null;
+        OdaException causeEx = null;
+        try
+        {
+            connProfile = getConnectionProfileImpl( candidateProperties, appContext );
+        }
+        catch( OdaException ex )
+        {
+            // improve error handling, i.e. catch exception in getting profile instance, 
+            // so to set the cause of the exception that gets thrown below
+            causeEx = ex;
+        }
+
+        if( connProfile == null )   // no linked profile found
+        {
+            // a profile is specified, just couldn't find it
+            if( hasProfileName( candidateProperties ) && hasProfileStoreFilePath( candidateProperties ) )
+            {
+                OdaException throwEx =
+                    new OdaException( Messages.bind( Messages.propertyProvider_CANNOT_FIND_PROFILE,
+                        getProfileName( candidateProperties ), getProfileStoreFilePath( candidateProperties ) ));
+                if( causeEx != null )
+                    throwEx.initCause( causeEx );
+                throw throwEx;
+            }
+            
+            // no other effective data source properties; use the original ones
+            return candidateProperties;   
+        }
+        
+        // merges the 2 sets of properties; 
+        // override candidate properties with those in profile instance
+        
+        Properties mergedProps = new Properties();
+        mergedProps.putAll( candidateProperties );
+                
+        Properties profileProps = connProfile.getBaseProperties();
+        if( profileProps != null )
+            mergedProps.putAll( profileProps );
+
+        // add a data source property entry for the resolved file path of the connection profile store 
+        // used to get the profile instance
+        m_profileStoreFileExt = null;   // reset placeholder
+        File profileStore = getProfileStoreFile( candidateProperties, appContext );
+        if( profileStore != null && profileStore.exists() )
+        {
+            String profileStoreResolvedPath = profileStore.getPath();
+            if( ! profileStoreResolvedPath.equals( getProfileStoreFilePath( candidateProperties ) ))
+            {
+                    mergedProps.setProperty( ConnectionProfileProperty.TRANSIENT_PROFILE_STORE_RESOLVED_PATH_PROP_KEY, 
+                                            profileStoreResolvedPath );
+                    // saves the original file extension
+                    if( m_profileStoreFileExt != null )
+                        mergedProps.setProperty( PROFILE_STORE_FILE_ORIGINAL_EXT, m_profileStoreFileExt );
+            }
+        }
+        
+        // log count of merged properties
+        if( getLogger().isLoggable( Level.FINER ) )
+        {
+            String logMsg = sm_className + "." + methodName + ": "; //$NON-NLS-1$ //$NON-NLS-2$
+            logMsg += "Number of Candidate Properties = " + candidateProperties.size(); //$NON-NLS-1$
+            logMsg += "; Number of Properties in profile = " + profileProps.size(); //$NON-NLS-1$
+            logMsg += "; Number of Merged Effective Properties = " + mergedProps.size(); //$NON-NLS-1$
+            getLogger().finer( logMsg );
+        }
+        
+        return mergedProps;
+    }
+
+    /**
+     * Finds and returns the connection profile
+     * instance whose name is specified in the candidate connection properties.
+     * The profile store file object may be provided in the connection property context,
+     * or its file path is specified in the connection properties.
+     * @param candidateProperties   local connection properties
+     * @param connPropContext       connection property context object mapped to 
+     *                        the IPropertyProvider.ODA_CONN_PROP_CONTEXT key
+     *                        in an application context passed thru to a connection
+     * @return  the connection profile instance if found; may be null 
+     */
+    public IConnectionProfile getConnectionProfile( Properties candidateProperties,
+            Object connPropContext ) 
+    {
+        IConnectionProfile profile = null;
+        try
+        {
+            profile = getConnectionProfileImpl( candidateProperties, connPropContext );
+        }
+        catch( OdaException ex )
+        {
+            getLogger().warning( getStackTraceStrings( ex ) );
+        }
+
+        if( profile == null )
+        {
+            // log warning that no profile is found for a specified name
+            String profileName = getProfileName( candidateProperties );
+            if( profileName != null && ! profileName.isEmpty() )
+                getLogger().warning( "No connection profile is found by its specified name: " + profileName ); //$NON-NLS-1$              
+        }
+
+        return profile;
+    }
+    
+    private IConnectionProfile getConnectionProfileImpl( Properties candidateProperties,
+            Object connPropContext )
+        throws OdaException
+    {
+        if( candidateProperties == null || candidateProperties.isEmpty() )
+            return null;
+        
+        // first get the profile reference from the specified arguments
+        
+        String profileName = getProfileName( candidateProperties );
+        if( profileName == null )
+            return null;    // no external profile is specified in properties
+        
+        // determine the profile store file to use
+        m_profileStoreFileExt = null;   // reset placeholder
+        File profileStore = getProfileStoreFile( candidateProperties, connPropContext );
+        
+        // now get the referenced profile from the profile explorer;
+        // if null profile store file is specified, the default profile store path is used
+        IConnectionProfile profile = OdaProfileExplorer.getInstance()
+                        .getProfileByName( profileName, profileStore, 
+                            getProfileStoreFileOriginalExt( candidateProperties ) );       
+        return profile;
+    }
+    
+    private String getProfileStoreFileOriginalExt( Properties connectionProps )
+    {
+        if( m_profileStoreFileExt != null )
+            return m_profileStoreFileExt;
+        return connectionProps.getProperty( PROFILE_STORE_FILE_ORIGINAL_EXT );
+    }
+
+    protected String getProfileName( Properties candidateProperties )
+    {
+        String profileName =
+            candidateProperties.getProperty( ConnectionProfileProperty.PROFILE_NAME_PROP_KEY );
+        if( profileName == null || profileName.length() == 0 )
+            return null;    // no profile name specified
+        return profileName;
+    }
+
+    private boolean hasProfileName( Properties candidateProperties )
+    {
+        String profileName = getProfileName( candidateProperties );
+        return ( profileName != null );
+    }
+    
+    /*
+     * @since 3.2.3 (DTP 1.8)
+     */
+    private File getProfileStoreFile( Properties candidateProperties, Object connPropContext )
+        throws OdaException
+    {
+        // a profile store mapping specified in the connPropContext map, if exists, 
+        // takes precedence over the file path specified in the properties
+        File profileStore = getProfileStoreFile( connPropContext );
+        if( profileStore == null )
+            profileStore = getProfileStoreFileFromProperties( candidateProperties, connPropContext );
+
+        if( profileStore != null )
+        {
+            // using a new profile storage File object, good opportunity
+            // to free up the cached profiles of previously loaded profile store File
+            Boolean refreshProfileStore = 
+                ProviderUtil.getReloadProfileStoreContextValue( connPropContext );
+            
+            // if IPropertyProvider.ODA_RELOAD_PROFILE_STORE key entry is not specified in the context,
+            // applies the value specified by #setRefreshProfileStore(boolean)
+            if( refreshProfileStore == null )   
+                refreshProfileStore = Boolean.valueOf( m_refreshProfileStore ); 
+
+            if( refreshProfileStore.booleanValue() )
+                OdaProfileExplorer.getInstance().refresh();
+        }
+        
+        return profileStore;
+    }
+    
+    protected File getProfileStoreFile( Object connPropContext )
+    {
+        if( connPropContext == null || ! ( connPropContext instanceof Map ) )
+            return null;
+        
+        Object propValue = 
+            ( (Map<?,?>) connPropContext ).get( ConnectionProfileProperty.PROFILE_STORE_FILE_PROP_KEY );
+        if( propValue == null )
+            return null;    // no non-null mapping for profile store file
+        
+        if( ( propValue instanceof File ) && ((File) propValue ).exists() )
+            return (File) propValue;
+
+        // mapping contains a value of unexpected type
+        getLogger().warning( "getProfileStoreFile( Object ): Ignoring the PROFILE_STORE_FILE_PROP_KEY object in Connection Property Context.  The specified object must be an existing File."  );  //$NON-NLS-1$
+        return null;        
+    }
+    
+    /**
+     * Find and return the connection profile store file whose
+     * file path is specified in the connection properties.
+     * Ensures the file path exists at runtime; otherwise returns null.
+     * @param candidateProperties
+     * @return
+     * @deprecated
+     */
+    protected File getProfileStoreFile( Properties candidateProperties )
+    {
+        try
+        {
+            return getProfileStoreFileFromProperties( candidateProperties, null );
+        }
+        catch( OdaException ex )
+        {
+            // for backward compatibility; ignore and continue
+        }
+        return null;
+    }
+    
+    private File getProfileStoreFileFromProperties( Properties candidateProperties, Object connPropContext )
+            throws OdaException
+    {
+        if( ! hasProfileStoreFilePath( candidateProperties ) )
+            return null;    // no profile file path specified
+        String profileStoreFilePath = getProfileStoreFilePath( candidateProperties );
+        File profileStoreFile = getAbsoluteProfileStoreFile( profileStoreFilePath, connPropContext );
+        if( profileStoreFile != null )
+            return profileStoreFile;
+        
+        // specified file path does not exist
+        getLogger().warning( "getProfileStoreFileFromProperties(Properties,Object): " +   //$NON-NLS-1$
+                        "The PROFILE_STORE_FILE_PATH_PROP_KEY value (" + profileStoreFilePath +  //$NON-NLS-1$
+                        ") specified in connection properties does not exist in the file system." ); //$NON-NLS-1$
+        return null;
+    }
+
+    private String getProfileStoreFilePath( Properties candidateProperties )
+    {
+        String profileStoreFilePath = 
+            candidateProperties.getProperty( ConnectionProfileProperty.PROFILE_STORE_FILE_PATH_PROP_KEY );
+        if( profileStoreFilePath == null || profileStoreFilePath.length() == 0 )
+            return null;    // no profile store path specified
+        return profileStoreFilePath;
+    }
+    
+    private boolean hasProfileStoreFilePath( Properties candidateProperties )
+    {
+        String profileStoreFilePath = getProfileStoreFilePath( candidateProperties );
+        return ( profileStoreFilePath != null );
+    }
+    
+    /**
+     * Converts the specified string representation of a file pathname
+     * to its abstract representation.
+     * @param filePath  the string representation of a file
+     * @return  the abstract representation of a file pathname,
+     *          or null if the specified argument is null, invalid or
+     *          the file does not exist
+     * @deprecated
+     */
+    protected File getProfileStoreFile( String filePath )
+    {
+        try
+        {
+            return getAbsoluteProfileStoreFile( filePath, null );
+        }
+        catch( OdaException ex )
+        {
+            // for backward compatibility; ignore and continue
+        }
+        return null;
+    }
+    
+    private File getAbsoluteProfileStoreFile( String filePath, Object connPropContext )
+            throws OdaException
+    {
+        if( filePath == null || filePath.length() == 0 )
+            return null;
+
+       // First try to parse the filePath argument as file name
+        File file = new File( filePath );
+        if( file.exists() )
+            return file;
+
+        // try to resolve a relative file path, if defined
+        File resolvedStoreFile = null;
+        OdaException relativePathEx = null;
+        try
+        {
+            resolvedStoreFile = resolveRelativePath( filePath, connPropContext );
+        }
+        catch( OdaException ex )
+        {
+            // catch exception in resolving the filePath as a relative path, 
+            // so to throw the correct exception if unable to resolve it as an URL below
+            relativePathEx = ex;
+        }
+        
+        if( resolvedStoreFile != null && resolvedStoreFile.exists() )
+        {
+            // cache the file extension of the original relative file path, if an extension exists and
+            // different from that of the resolved file
+            String relativeFileExt = getFileExtension( filePath );
+            if( relativeFileExt != null && ! relativeFileExt.equals( getFileExtension( resolvedStoreFile.getPath() ) ))
+                m_profileStoreFileExt = relativeFileExt;
+
+            return resolvedStoreFile;
+        }
+
+        // problem with resolving the relative path to an existing File;
+        // next try to parse the filePath argument as an URL
+        OdaException invalidUrlEx = null;
+        try
+        {
+            URL url = new URL( filePath );
+            return new File( PluginResourceLocator.toFileURL( url ).toURI() );
+        }
+        catch( Exception ex )
+        {
+            getLogger().fine( "getAbsoluteProfileStoreFile(String,Object): " + ex.toString() );  //$NON-NLS-1$
+            invalidUrlEx = new OdaException( ex );
+        }
+
+        // problem with treating the filePath argument as an url;
+        // the main issue was due to the specified filePath is a relative path but failed to resolve,
+        // thus, throw the relative path exception previously caught instead
+        if( relativePathEx != null )
+        {
+            relativePathEx.setNextException( invalidUrlEx );
+            throw relativePathEx;
+        }
+        
+        throw invalidUrlEx;
+    }
+
+    private File resolveRelativePath( String filePath, Object connPropContext )
+            throws OdaException
+    {
+        if( connPropContext == null || ! ( connPropContext instanceof Map ) )
+            return null;
+        
+        Object resourceIdentifiersObj = 
+            ( (Map<?,?>) connPropContext ).get( ResourceIdentifiers.ODA_APP_CONTEXT_KEY_CONSUMER_RESOURCE_IDS );
+        if( resourceIdentifiersObj == null )   // not available
+        {
+            getLogger().warning( Messages.bind( Messages.propertyProvider_NO_RESOURCE_IDENTIFIERS,
+                    filePath ) );
+            return null;    // no resource URI locator to resolve relative filePath
+        }
+
+        URI fileURI = ResourceIdentifiers.encodeToURI( filePath );
+        URI resolvedFilePathURI = 
+            ResourceIdentifiers.resolveApplResource( resourceIdentifiersObj, fileURI );
+        if( resolvedFilePathURI != null && 
+            ! resolvedFilePathURI.equals( fileURI ) )
+        {
+            return new File( resolvedFilePathURI );
+        }
+        
+        // unable to resolve the relative path
+        throw new OdaException( Messages.bind( Messages.propertyProvider_UNABLE_TO_RESOLVE_PATH,
+                new Object[]{
+                resourceIdentifiersObj.getClass().getName(), 
+                fileURI,
+                ResourceIdentifiers.getApplResourceBaseURI( resourceIdentifiersObj ) } ));   
+    }
+
+    private static String getFileExtension( String filename )
+    {
+        int fileExtSeparatorIndex = filename.lastIndexOf( FILE_EXT_SEPARATOR );
+
+        String fileExtension = null;
+        // if file has extension
+        if( fileExtSeparatorIndex >= 0 && 
+            filename.length() > fileExtSeparatorIndex+1 )
+        {
+            fileExtension = filename.substring( fileExtSeparatorIndex+1 );
+        }
+        return fileExtension;
+    }
+
+    /**
+     * Internal method to control whether the call to {@link #getConnectionProfile(Properties, Object)}
+     * should re-use cached profiles previously loaded from profile stores.
+     * @param   refreshProfileStore <code>true</code> to refresh and get latest profile instances in a 
+     *              profile storage file, <code>false</code> to re-use profiles previously 
+     *              loaded from profile stores; default setting is <code>true</code>.
+     */
+    public void setRefreshProfileStore( boolean refreshProfileStore )
+    {
+        m_refreshProfileStore = refreshProfileStore;
+    }
+
+    /**
+     * Returns the class logger.
+     */
+    private static Logger getLogger()
+    {
+        if( sm_logger == null )
+        {
+            synchronized( ProfilePropertyProviderImpl.class )
+            {
+                if( sm_logger == null )
+                    sm_logger = Logger.getLogger( sm_className );
+            }
+        }
+        return sm_logger;
+    }
+    
+    /**
+     * Formats and returns the exception's stack trace as a string.
+     */
+    private static String getStackTraceStrings( Throwable ex )
+    {
+        String logMsg = ex.toString() + "\n"; //$NON-NLS-1$
+        Throwable cause = ( ex.getCause() != null ) ? ex.getCause() : ex;
+        StackTraceElement[] stacks = cause.getStackTrace();
+        for( int i = 0; i < stacks.length; i++ )
+        {
+            logMsg += stacks[i].toString() + "\n"; //$NON-NLS-1$
+        }
+        return logMsg;
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/.classpath b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/.gitignore b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/.gitignore
new file mode 100644
index 0000000..6b1fee1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/.gitignore
@@ -0,0 +1,4 @@
+bin
+*.jar
+download
+*.zip
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/.project b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/.project
new file mode 100644
index 0000000..d3ad3be
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.oda.template.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..05f6590
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,13 @@
+#Fri Apr 13 14:14:14 PDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.4
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..458d8a6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %plugin.name
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.oda.template.ui;singleton:=true
+Bundle-Version: 3.4.1.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Activator: org.eclipse.datatools.connectivity.oda.template.ui.plugin.Activator
+Bundle-Vendor: Eclipse Data Tools Platform
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.core.resources;resolution:=optional,
+ org.eclipse.pde.ui
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/about.html b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/build.properties b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/build.properties
new file mode 100644
index 0000000..52f961e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/build.properties
@@ -0,0 +1,14 @@
+source.. = src/

+output.. = bin/

+bin.includes = META-INF/,\

+               .,\

+               plugin.xml,\

+               plugin.properties,\

+               templates_oda_3.0/,\

+               about.html,\

+               icons/

+javac.source =           1.6

+javac.target =           1.6

+download.dir =           ./download/

+src.includes = about.html

+               
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/icons/newoda_wiz.gif b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/icons/newoda_wiz.gif
new file mode 100644
index 0000000..42fe5d4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/icons/newoda_wiz.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/icons/newodaui_wiz.gif b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/icons/newodaui_wiz.gif
new file mode 100644
index 0000000..6235c21
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/icons/newodaui_wiz.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/plugin.properties b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/plugin.properties
new file mode 100644
index 0000000..02bd935
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/plugin.properties
@@ -0,0 +1,35 @@
+###############################################################################
+# Copyright (c) 2006, 2010 Actuate Corporation.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#  Actuate Corporation - initial API and implementation
+#  
+###############################################################################
+# NLS String
+###############################################################################
+#
+plugin.name=DTP ODA New Plug-in Template Wizard
+template.runtimeDriver.name=ODA Data Source Runtime Driver
+template.runtimeDriver.desc=\
+This wizard creates a plug-in for an Open Data Access (ODA) data source runtime driver.\
+<p>An ODA runtime driver plug-in does <b>not</b> make contributions to the UI. \
+Do not select the UI contribution check-box under Options in the previous page.</p>\
+<p><b>Extensions Used</b></p>\
+<li>org.eclipse.datatools.connectivity.oda.dataSource</li>\
+<li>org.eclipse.datatools.connectivity.connectionProfile</li>
+template.designer.name=ODA Data Source Designer
+template.designer.desc=\
+This wizard creates a plug-in for an Open Data Access (ODA) data source designer. \
+<p>Before using this to create the ODA designer plug-in, first use \
+the <b>ODA Data Source Runtime Driver</b> template to create its corresponding \
+runtime plug-in.</p>\
+<p><b>Extensions Used</b></p>\
+<li>org.eclipse.datatools.connectivity.oda.design.ui.dataSource</li>\
+<li>org.eclipse.datatools.connectivity.connectionProfile</li>\
+<li>org.eclipse.datatools.connectivity.ui.connectionProfileImage</li>\
+<li>org.eclipse.ui.propertyPages</li>
+
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/plugin.xml b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/plugin.xml
new file mode 100644
index 0000000..a8c807b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/plugin.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<!--
+/**
+ *************************************************************************
+ * Copyright (c) 2006, 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ */
+-->
+
+<plugin>
+   <extension
+         point="org.eclipse.pde.ui.pluginContent">
+      <wizard
+            class="org.eclipse.datatools.connectivity.oda.template.internal.ui.NewOdaDriverWizard"
+            icon="icons/newoda_wiz.gif"
+            id="org.eclipse.datatools.connectivity.oda.template.ui.newOdaPlugin"
+            java="true"
+            name="%template.runtimeDriver.name"
+            pureOSGi="false"
+            rcp="false"
+            requiresActivator="false"
+            ui-content="false">
+         <description>
+            %template.runtimeDriver.desc
+         </description>
+      </wizard>
+      <wizard
+            class="org.eclipse.datatools.connectivity.oda.template.internal.ui.NewOdaDesignerWizard"
+            icon="icons/newodaui_wiz.gif"
+            id="org.eclipse.datatools.connectivity.oda.template.ui.newOdaDesignerPlugin"
+            java="true"
+            name="%template.designer.name"
+            pureOSGi="false"
+            rcp="false"
+            requiresActivator="false"
+            ui-content="true">
+         <description>
+            %template.designer.desc
+         </description>
+      </wizard>
+   </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/internal/ui/CompatiblePluginReference.java b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/internal/ui/CompatiblePluginReference.java
new file mode 100644
index 0000000..36f24f0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/internal/ui/CompatiblePluginReference.java
@@ -0,0 +1,115 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.template.internal.ui;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.pde.core.plugin.IPluginReference;
+
+/**
+ * Reference of a generated ODA plug-in that uses the compatible match rule. 
+ */
+class CompatiblePluginReference implements IPluginReference
+{
+    private String m_id;
+    private String m_version;
+    private int m_match = COMPATIBLE;
+
+    public CompatiblePluginReference( String id, String version )
+    {
+        m_id = id;
+        m_version = version;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.pde.core.IIdentifiable#getId()
+     */
+    public String getId()
+    {
+        return m_id;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.pde.core.plugin.IPluginReference#getVersion()
+     */
+    public String getVersion()
+    {
+        return m_version;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.pde.core.plugin.IPluginReference#getMatch()
+     */
+    public int getMatch()
+    {
+        return m_match;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.pde.core.IIdentifiable#setId(java.lang.String)
+     */
+    public void setId( String id ) throws CoreException
+    {
+        m_id = id;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.pde.core.plugin.IPluginReference#setVersion(java.lang.String)
+     */
+    public void setVersion( String version ) throws CoreException
+    {
+        m_version = version;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.pde.core.plugin.IPluginReference#setMatch(int)
+     */
+    public void setMatch( int match ) throws CoreException
+    {
+        m_match = match;
+    }
+
+    /* (non-Javadoc)
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    public boolean equals( Object obj )
+    {
+        if ( ! ( obj instanceof IPluginReference ) )
+            return false;
+
+        IPluginReference other = (IPluginReference) obj;
+        if( m_match != other.getMatch() )
+            return false;
+        
+        if( m_id == null && other.getId() != null )
+            return false;
+        if( m_id != null && other.getId() == null )
+            return false;
+        if( m_id != null &&
+            ! m_id.equals( other.getId() ))
+            return false;
+        
+        if( m_version == null && other.getVersion() != null )
+            return false;
+        if( m_version != null && other.getVersion() == null )
+            return false;
+        if( m_version != null &&
+            ! m_version.equals( other.getVersion() ))
+            return false;
+
+        // all three attributes are an exact match
+        return true;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/internal/ui/DesignTimeTemplateSection.java b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/internal/ui/DesignTimeTemplateSection.java
new file mode 100644
index 0000000..d444105
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/internal/ui/DesignTimeTemplateSection.java
@@ -0,0 +1,258 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.template.internal.ui;
+
+import java.util.ArrayList;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.datatools.connectivity.oda.template.ui.nls.Messages;
+import org.eclipse.osgi.service.resolver.VersionRange;
+import org.eclipse.pde.core.plugin.IPluginExtension;
+import org.eclipse.pde.core.plugin.IPluginModelBase;
+import org.eclipse.pde.core.plugin.IPluginReference;
+import org.eclipse.pde.ui.IFieldData;
+import org.eclipse.pde.ui.templates.NewPluginTemplateWizard;
+import org.eclipse.pde.ui.templates.PluginReference;
+import org.osgi.framework.Version;
+
+/**
+ * A section of the ODA designer plug-in template wizard that generates a new 
+ * ODA designer plug-in.
+ * It is intended for use as part of the new plug-in project wizard.
+ */
+class DesignTimeTemplateSection extends OdaTemplateSection
+{
+    static final String OPTION_RUNTIME_DRIVER_PLUGIN_ID = "odaDriverPluginId";  //$NON-NLS-1$
+    static final String OPTION_RUNTIME_DATA_SET_ID = "odaDataSetId";  //$NON-NLS-1$
+    static final String OPTION_RUNTIME_DRIVER_CLASS = "odaDriverClass";  //$NON-NLS-1$
+
+    
+    DesignTimeTemplateSection( NewPluginTemplateWizard wiz )
+    {
+        super.setTemplateWizard( wiz );
+        setPageCount( 1 );
+        createOptions();       
+    }
+    
+    /**
+     * Create options for the template option page.
+     */
+    private void createOptions() 
+    {
+        // required template options on first page
+        addRequiredOption( KEY_PACKAGE_NAME, 
+                Messages.baseSection_optLabel_packageName );
+        addRequiredOption( OPTION_RUNTIME_DRIVER_PLUGIN_ID, 
+                Messages.designSection_optLabel_driverPluginId );
+        addRequiredOption( OPTION_RUNTIME_DATA_SOURCE_ID, 
+                Messages.designSection_optLabel_odaDataSourceId );
+        addRequiredOption( OPTION_RUNTIME_DRIVER_CLASS, 
+                Messages.designSection_optLabel_driverClass );
+        addRequiredOption( OPTION_RUNTIME_DATA_SET_ID, 
+                Messages.designSection_optLabel_odaDataSetId );
+        addRequiredOption( OPTION_DATASOURCE_DISPLAY_NAME, 
+                Messages.baseSection_optLabel_dataSourceName );
+        addRequiredOption( OPTION_DATASET_DISPLAY_NAME, 
+                Messages.baseSection_optLabel_dataSetName );
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.pde.ui.templates.BaseOptionTemplateSection#initializeFields(org.eclipse.pde.ui.IFieldData)
+     */
+    protected void initializeFields( IFieldData data )   
+    {
+        // lazy initialization of page options before it is made visible
+        super.initializeFields( data );
+        initializeOptions();
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.template.internal.ui.OdaTemplateSection#initializeFields(org.eclipse.pde.core.plugin.IPluginModelBase)
+     */
+    public void initializeFields( IPluginModelBase aModel )
+    {
+        super.initializeFields( aModel );
+        initializeOptions();
+    }
+    
+    private void initializeOptions()
+    {
+        initializeOption( KEY_PACKAGE_NAME, super.getDefaultPackageName() );
+        initializeOption( OPTION_RUNTIME_DRIVER_PLUGIN_ID, getDefaultRuntimePluginId() );
+        initializeOption( OPTION_RUNTIME_DATA_SOURCE_ID, getDefaultDataSourceId() );
+        initializeOption( OPTION_RUNTIME_DRIVER_CLASS, getDefaultDriverClassName() );
+        initializeOption( OPTION_RUNTIME_DATA_SET_ID, getDefaultDataSetId() );
+        initializeOption( OPTION_DATASOURCE_DISPLAY_NAME, getDefaultDataSourceName() );
+        initializeOption( OPTION_DATASET_DISPLAY_NAME, getDefaultDataSetName() );
+    }
+    
+    /**
+     * Formats and returns the initialized value of the runtime plugin id option.
+     */
+    private String getDefaultRuntimePluginId()
+    {
+        String pluginId = getNewPluginId(); // designer plugin id
+        String uiSuffix = ".ui"; //$NON-NLS-1$
+
+        // strip out ui suffix if exists
+        if( pluginId.endsWith( uiSuffix ) )     
+            return pluginId.substring( 0, pluginId.length() - uiSuffix.length() );
+        return "com.custom.oda.data.runtime"; //$NON-NLS-1$
+    }
+    
+    /**
+     * Formats and returns the initialized value of the ODA data source element id.
+     */
+    private String getDefaultDataSourceId()
+    {
+        return getDefaultRuntimePluginId().toLowerCase( IDENTIFIER_LOCALE );
+    }
+    
+    /**
+     * Formats and returns the initialized value of the ODA data set element id.
+     */
+    private String getDefaultDataSetId()
+    {
+        String dataSourceId = getDefaultDataSourceId();
+        if( dataSourceId.length() > 0 )
+            dataSourceId += "."; //$NON-NLS-1$
+        return dataSourceId + "dataSet"; //$NON-NLS-1$
+    }
+    
+    /**
+     * Formats and returns the initialized value of the ODA runtime driver class name.
+     */
+    private String getDefaultDriverClassName()
+    {
+        return getDefaultDataSourceId() + ".impl.Driver";  //$NON-NLS-1$
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.template.internal.ui.OdaTemplateSection#getAdditionalJavaIdentifierOptions()
+     */
+    protected String[] getAdditionalJavaIdentifierOptions()
+    {
+        return new String[] { OPTION_RUNTIME_DRIVER_CLASS };
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.pde.ui.templates.OptionTemplateSection#getSectionId()
+     */
+    public String getSectionId()
+    {
+        return "designer";  //$NON-NLS-1$
+    }
+    
+    protected String getWizardPageTitle()
+    {
+        return Messages.designSection_wizardPageTitle;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.template.internal.ui.OdaTemplateSection#updateOdaPluginModel()
+     */
+    protected void updateOdaPluginModel( IPluginModelBase odaModel ) throws CoreException
+    {
+        // calls inherited method to create extension
+        IPluginExtension profileExtension = 
+            createExtension( OdaPluginModeler.CONNECTIVITY_PROFILE_EXT_PT, true );
+        IPluginExtension profileImageExtension = 
+            createExtension( OdaPluginModeler.CONNECTIVITY_PROFILE_IMAGE_EXT_PT, true );
+        IPluginExtension profilePageExtension = 
+            createExtension( OdaPluginModeler.CONNECTIVITY_PROFILE_PAGE_EXT_PT, true );
+
+        OdaPluginModeler modeler = new OdaPluginModeler( this );
+        modeler.updateConnProfileDesignerModel( odaModel, 
+                profileExtension, profileImageExtension, profilePageExtension );    
+        
+        IPluginExtension designerExtension = 
+                createExtension( OdaPluginModeler.ODA_DESIGN_TIME_EXT_PT, true );        
+        modeler.updateDesignerModel( odaModel, designerExtension );    
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.pde.ui.templates.AbstractTemplateSection#generateFiles(org.eclipse.core.runtime.IProgressMonitor)
+     */
+    protected void generateFiles( IProgressMonitor monitor )
+            throws CoreException
+    {
+        // adjust the model's manifest headers to work around Bugzilla #172744
+        OdaPluginModeler modeler = new OdaPluginModeler( this );
+        modeler.adjustManifestHeaders( getExecutingModel(), false );
+        
+        super.generateFiles( monitor );
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.pde.ui.templates.AbstractTemplateSection#getDependencies(java.lang.String)
+     */
+    public IPluginReference[] getDependencies( String schemaVersion )
+    {
+        String odaRuntimePluginId = getStringOption( OPTION_RUNTIME_DRIVER_PLUGIN_ID );
+        // in case this is called before initializeFields
+        if( odaRuntimePluginId == null )
+            odaRuntimePluginId = getDefaultRuntimePluginId();
+        
+        Version version320 = new Version( 3, 2, 0 );
+        Version version400 = new Version( 4, 0, 0 );
+        VersionRange compatible320 = new VersionRange( version320, true, version400, false );       
+
+        return new IPluginReference[] 
+                    { // adopts similar plugin sequence as PDE UI base template wizard
+                      new PluginReference(
+                        "org.eclipse.ui", null, 0 ), //$NON-NLS-1$
+                      new PluginReference( 
+                        "org.eclipse.core.runtime", null, 0 ), //$NON-NLS-1$
+                      new CompatiblePluginReference( 
+                        "org.eclipse.datatools.connectivity.oda.design.ui",  //$NON-NLS-1$
+                        compatible320.toString() ),
+                      new CompatiblePluginReference( 
+                        odaRuntimePluginId,
+                        null ) };
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.pde.ui.templates.ITemplateSection#getUsedExtensionPoint()
+     */
+    public String getUsedExtensionPoint()
+    {
+        return OdaPluginModeler.ODA_DESIGN_TIME_EXT_PT;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.template.internal.ui.OdaTemplateSection#getNewFiles()
+     */
+    public String[] getNewFiles()
+    {
+        // merge the inherited list with own file(s)
+        String[] baseBuildList = super.getNewFiles();
+        ArrayList buildList = new ArrayList( baseBuildList.length + 1 );
+        for( int i = 0; i < baseBuildList.length; i++ )
+        {
+            buildList.add( baseBuildList[i] );
+        }
+        
+        // add an entry for the designer icons
+        buildList.add( "icons/" ); //$NON-NLS-1$
+        
+        return (String[]) buildList.toArray( new String[ buildList.size() ] );
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/internal/ui/NewOdaDesignerWizard.java b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/internal/ui/NewOdaDesignerWizard.java
new file mode 100644
index 0000000..896408d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/internal/ui/NewOdaDesignerWizard.java
@@ -0,0 +1,50 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.template.internal.ui;
+
+import org.eclipse.datatools.connectivity.oda.template.ui.nls.Messages;
+import org.eclipse.pde.ui.IFieldData;
+import org.eclipse.pde.ui.templates.ITemplateSection;
+import org.eclipse.pde.ui.templates.NewPluginTemplateWizard;
+
+/**
+ * An ODA designer plug-in template wizard that implements the
+ * <code>org.eclipse.pde.ui.pluginContent</code> extension point.
+ * It is intended for use in the PDE new plug-in project wizard to generate
+ * an ODA designer plug-in project.
+ */
+public class NewOdaDesignerWizard extends NewPluginTemplateWizard
+{
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.pde.ui.templates.AbstractNewPluginTemplateWizard#init(org.eclipse.pde.ui.IFieldData)
+     */
+    public void init( IFieldData data ) 
+    {
+        super.init( data );
+        setWindowTitle( Messages.designWizard_windowTitle ); 
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.pde.ui.templates.NewPluginTemplateWizard#createTemplateSections()
+     */
+    public ITemplateSection[] createTemplateSections()
+    {
+        return new ITemplateSection[] 
+                     { new DesignTimeTemplateSection( this ) };       
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/internal/ui/NewOdaDriverWizard.java b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/internal/ui/NewOdaDriverWizard.java
new file mode 100644
index 0000000..e7c3899
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/internal/ui/NewOdaDriverWizard.java
@@ -0,0 +1,50 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.template.internal.ui;
+
+import org.eclipse.datatools.connectivity.oda.template.ui.nls.Messages;
+import org.eclipse.pde.ui.IFieldData;
+import org.eclipse.pde.ui.templates.ITemplateSection;
+import org.eclipse.pde.ui.templates.NewPluginTemplateWizard;
+
+/**
+ * An ODA runtime driver plug-in template wizard that implements the
+ * <code>org.eclipse.pde.ui.pluginContent</code> extension point.
+ * It is intended for use in the PDE new plug-in project wizard to generate
+ * an ODA runtime plug-in project.
+ */
+public class NewOdaDriverWizard extends NewPluginTemplateWizard
+{
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.pde.ui.templates.AbstractNewPluginTemplateWizard#init(org.eclipse.pde.ui.IFieldData)
+     */
+    public void init( IFieldData data ) 
+    {
+        super.init( data );
+        setWindowTitle( Messages.driverWizard_windowTitle ); 
+        setNeedsProgressMonitor( true );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.pde.ui.templates.NewPluginTemplateWizard#createTemplateSections()
+     */
+    public ITemplateSection[] createTemplateSections()
+    {
+        return new ITemplateSection[] 
+                   { new RuntimeTemplateSection( this ) };       
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/internal/ui/OdaPluginModeler.java b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/internal/ui/OdaPluginModeler.java
new file mode 100644
index 0000000..4086aa2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/internal/ui/OdaPluginModeler.java
@@ -0,0 +1,494 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.template.internal.ui;
+
+import java.util.Locale;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.datatools.connectivity.oda.template.ui.nls.Messages;
+import org.eclipse.pde.core.plugin.IPluginElement;
+import org.eclipse.pde.core.plugin.IPluginExtension;
+import org.eclipse.pde.core.plugin.IPluginLibrary;
+import org.eclipse.pde.core.plugin.IPluginModelBase;
+import org.eclipse.pde.core.plugin.IPluginModelFactory;
+
+/**
+ * A helper responsible for updating an ODA plug-in model with ODA-specific extensions
+ * configuration based on the user-defined template options defined in
+ * extended OdaTemplateSection. 
+ */
+class OdaPluginModeler
+{
+    private static final String PROP_ODA_DATA_SOURCE_ID = "%oda.data.source.id";  //$NON-NLS-1$
+    private static final String PROP_DATA_SOURCE_NAME = "%data.source.name";  //$NON-NLS-1$
+    private static final String ODA_PROFILE_FACTORY_CLASS = 
+        "org.eclipse.datatools.connectivity.oda.profile.OdaConnectionFactory";  //$NON-NLS-1$
+    private static final String VALUE_TRUE = Boolean.toString( true );
+    private static final String VALUE_FALSE = Boolean.toString( false );
+    private static final Locale IDENTIFIER_LOCALE = OdaTemplateSection.IDENTIFIER_LOCALE;
+
+    // extension points used in the generated plug-ins
+    static final String ODA_RUNTIME_EXT_PT =
+        "org.eclipse.datatools.connectivity.oda.dataSource"; //$NON-NLS-1$
+    static final String ODA_DESIGN_TIME_EXT_PT =
+        "org.eclipse.datatools.connectivity.oda.design.ui.dataSource"; //$NON-NLS-1$
+    static final String CONNECTIVITY_PROFILE_EXT_PT =
+        "org.eclipse.datatools.connectivity.connectionProfile"; //$NON-NLS-1$
+    static final String CONNECTIVITY_PROFILE_IMAGE_EXT_PT =
+        "org.eclipse.datatools.connectivity.ui.connectionProfileImage"; //$NON-NLS-1$
+    static final String CONNECTIVITY_PROFILE_PAGE_EXT_PT =
+        "org.eclipse.ui.propertyPages"; //$NON-NLS-1$
+
+    private OdaTemplateSection m_section;    
+
+
+    OdaPluginModeler( OdaTemplateSection section )
+    {
+        assert( section != null );
+        m_section = section;
+    }
+    
+    /**
+     * Updates the specified runtime extension configuration
+     * based on the user-defined runtime template options, and
+     * adds the updated extension to the specified odaModel.
+     * @param odaModel
+     * @param runtimeExtension
+     * @throws CoreException
+     */
+    void updateRuntimeModel( IPluginModelBase odaModel,
+                             IPluginExtension runtimeExtension ) 
+        throws CoreException
+    {
+        odaModel.getPluginBase().setName( "%plugin.name" ); //$NON-NLS-1$
+        
+        IPluginExtension extension = runtimeExtension;
+        extension.setId( PROP_ODA_DATA_SOURCE_ID );
+        if ( ! extension.isInTheModel() )
+            odaModel.getPluginBase().add( extension );
+        
+        IPluginModelFactory factory = odaModel.getPluginFactory();
+        
+        // specifies root classpath
+        IPluginLibrary rootLib = factory.createLibrary();
+        rootLib.setName( "." ); //$NON-NLS-1$
+        if ( ! rootLib.isInTheModel() )
+            odaModel.getPluginBase().add( rootLib );
+
+        // specifies export package for access by corresponding designer plugin
+        IPluginLibrary exportPackage = factory.createLibrary();
+        exportPackage.setName( "src" ); //$NON-NLS-1$
+        exportPackage.setExported( true );
+        String exportPackageFilter = getKeyPackageName() + ".*"; //$NON-NLS-1$
+        exportPackage.setContentFilters( new String[]{ exportPackageFilter } );
+        if ( ! exportPackage.isInTheModel() )
+            odaModel.getPluginBase().add( exportPackage );
+
+        // dataSource element
+        IPluginElement dataSourceElement = factory.createElement( extension );
+        dataSourceElement.setName( "dataSource" ); //$NON-NLS-1$
+        dataSourceElement.setAttribute( "id", PROP_ODA_DATA_SOURCE_ID ); //$NON-NLS-1$
+        dataSourceElement.setAttribute( "driverClass", getKeyPackageName() + ".Driver" );  //$NON-NLS-1$ //$NON-NLS-2$
+        dataSourceElement.setAttribute( "odaVersion", "3.2" ); //$NON-NLS-1$ //$NON-NLS-2$
+        dataSourceElement.setAttribute( "defaultDisplayName", PROP_DATA_SOURCE_NAME  ); //$NON-NLS-1$
+        dataSourceElement.setAttribute( "setThreadContextClassLoader" , VALUE_FALSE );//$NON-NLS-1$
+        extension.add( dataSourceElement );
+
+        // data source properties
+        String numPropsValue = m_section.getStringOption( RuntimeTemplateSection.OPTION_NUM_CONN_PROPERTIES );
+        addPropertiesElement( factory, dataSourceElement, numPropsValue );
+        
+        // dataSet element
+        IPluginElement dataSetElement = factory.createElement( extension );
+        dataSetElement.setName( "dataSet" ); //$NON-NLS-1$
+        dataSetElement.setAttribute( "id", getOdaDataSourceId() + ".dataSet" ); //$NON-NLS-1$ //$NON-NLS-2$
+        dataSetElement.setAttribute( "defaultDisplayName", "%data.set.name" ); //$NON-NLS-1$ //$NON-NLS-2$
+        extension.add( dataSetElement );
+        
+        // data set's properties
+        numPropsValue = m_section.getStringOption( RuntimeTemplateSection.OPTION_NUM_QUERY_PROPERTIES );
+        addPropertiesElement( factory, dataSetElement, numPropsValue );
+        
+        // data set's dataTypeMapping child elements
+        addDataTypeMappingElements( factory, dataSetElement );        
+    }
+
+    /**
+     * Generates the properties element and adds to the specified data source/set element
+     * with the specified number of nested property elements with corresponding attributes .
+     * @param factory
+     * @param dataElement
+     * @param numPropsValue
+     * @throws CoreException
+     */
+    private void addPropertiesElement( IPluginModelFactory factory, 
+                                        IPluginElement dataElement,
+                                        String numPropsValue )
+        throws CoreException
+    {
+        if( numPropsValue == null )
+            return;     // no properties needed
+        
+        int numProps = 0;
+        try
+        {
+            numProps = Integer.parseInt( numPropsValue );
+        }
+        catch( NumberFormatException e )
+        {
+            // TODO - log warning
+            e.printStackTrace();
+        }
+        if( numProps <= 0 )
+            return;     // no properties needed
+        
+        // Properties element
+        IPluginElement propertiesElement = factory.createElement( dataElement );
+        propertiesElement.setName( "properties" ); //$NON-NLS-1$
+        dataElement.add( propertiesElement );
+        
+        // for each nested property element
+        for( int i = 1; i <= numProps; i++ )
+        {
+            IPluginElement aPropElement = factory.createElement( propertiesElement );
+            aPropElement.setName( "property" );  //$NON-NLS-1$
+            aPropElement.setAttribute( "name", "property" + i );  //$NON-NLS-1$ //$NON-NLS-2$
+            aPropElement.setAttribute( "defaultDisplayName",  //$NON-NLS-1$
+                    Messages.modeler_propertyDisplayNamePrefix + " " + i );  //$NON-NLS-1$
+            aPropElement.setAttribute( "type", "string" );  //$NON-NLS-1$ //$NON-NLS-2$
+            //  leaves "defaultValue" attribute with no value      
+            aPropElement.setAttribute( "isEncryptable", VALUE_FALSE );   //$NON-NLS-1$
+            aPropElement.setAttribute( "allowsEmptyValueAsNull" , VALUE_TRUE );  //$NON-NLS-1$
+            propertiesElement.add( aPropElement );
+        }
+    }
+    
+    /**
+     * Generates the default dataTypeMapping elements and 
+     * adds to the specified data set element.
+     * @param factory
+     * @param dataSetElement
+     * @throws CoreException
+     */
+    private void addDataTypeMappingElements( IPluginModelFactory factory, 
+                                        IPluginElement dataSetElement )
+        throws CoreException
+    {
+        // add each dataTypeMapping
+        DataTypeMapping[] dataTypeMappings = getDataTypeMappings();
+        for( int i = 0; i < dataTypeMappings.length; i++ )
+        {
+            IPluginElement mappingElement = factory.createElement( dataSetElement );
+            mappingElement.setName( "dataTypeMapping" ); //$NON-NLS-1$
+            
+            DataTypeMapping dataType = dataTypeMappings[ i ];           
+            mappingElement.setAttribute( "nativeDataTypeCode", dataType.getNativeDataTypeCodeAsString() ); //$NON-NLS-1$
+            mappingElement.setAttribute( "nativeDataType", dataType.getNativeDataTypeName() ); //$NON-NLS-1$
+            mappingElement.setAttribute( "odaScalarDataType", dataType.getOdaScalarDataType() ); //$NON-NLS-1$
+
+            dataSetElement.add( mappingElement );
+        }
+    }
+    
+    /**
+     * Gets the user-defined value for the ODA runtime data source element id.
+     */
+    private String getOdaDataSourceId()
+    {
+        String id = m_section.getStringOption( OdaTemplateSection.OPTION_RUNTIME_DATA_SOURCE_ID );
+        assert( id != null );
+        return id.toLowerCase( IDENTIFIER_LOCALE );        
+    }
+    
+    /**
+     * Gets the user-defined value for the Java package name to generate.
+     */
+    private String getKeyPackageName()
+    {
+        String name = m_section.getStringOption( OdaTemplateSection.KEY_PACKAGE_NAME );
+        assert( name != null );
+        return name.toLowerCase( IDENTIFIER_LOCALE );
+    }
+
+    /**
+     * Data Set's default data type mappings for generation of related extension elements.
+     */
+    private static DataTypeMapping[] sm_dataTypeMappings = null;
+    
+    static DataTypeMapping[] getDataTypeMappings()
+    {
+        if( sm_dataTypeMappings == null )
+        {
+            sm_dataTypeMappings = new DataTypeMapping[] 
+                {
+                    new DataTypeMapping( java.sql.Types.CHAR, "String", "String" ),  //$NON-NLS-1$ //$NON-NLS-2$
+                    new DataTypeMapping( java.sql.Types.INTEGER, "Integer", "Integer" ),  //$NON-NLS-1$ //$NON-NLS-2$
+                    new DataTypeMapping( java.sql.Types.DOUBLE, "Double", "Double" ),  //$NON-NLS-1$ //$NON-NLS-2$
+                    new DataTypeMapping( java.sql.Types.DECIMAL, "BigDecimal", "Decimal" ),  //$NON-NLS-1$ //$NON-NLS-2$
+                    new DataTypeMapping( java.sql.Types.DATE, "Date", "Date" ),  //$NON-NLS-1$ //$NON-NLS-2$
+                    new DataTypeMapping( java.sql.Types.TIME, "Time", "Time" ),  //$NON-NLS-1$ //$NON-NLS-2$
+                    new DataTypeMapping( java.sql.Types.TIMESTAMP, "Timestamp", "Timestamp" ),  //$NON-NLS-1$ //$NON-NLS-2$
+                    new DataTypeMapping( java.sql.Types.BOOLEAN, "Boolean", "Boolean" )  //$NON-NLS-1$ //$NON-NLS-2$
+                    // excludes the more complex data types by default
+//                  new DataTypeMapping( java.sql.Types.BLOB, "BLOB", "String" ),  //$NON-NLS-1$ //$NON-NLS-2$
+//                  new DataTypeMapping( java.sql.Types.CLOB, "CLOB", "String" )  //$NON-NLS-1$ //$NON-NLS-2$
+                };
+        }
+        
+        return sm_dataTypeMappings;
+    }
+    
+    private static class DataTypeMapping
+    {
+        // the default mapping does not contain alternativeOdaDataType 
+        
+        private String m_nativeTypeCodeString;
+        private String m_nativeTypeName;
+        private String m_odaScalarType;
+        
+        DataTypeMapping( int nativeTypeCode, String nativeTypeName, String odaScalarType )
+        {
+            m_nativeTypeCodeString = Integer.toString( nativeTypeCode );
+            m_nativeTypeName = nativeTypeName;
+            m_odaScalarType = odaScalarType;
+        }
+        
+        String getNativeDataTypeCodeAsString()
+        {
+            return m_nativeTypeCodeString;
+        }
+        
+        String getNativeDataTypeName()
+        {
+            return m_nativeTypeName;
+        }
+        
+        String getOdaScalarDataType()
+        {
+            return m_odaScalarType;
+        }
+    }
+ 
+    /**
+     * Updates the specified connection profile extension configuration
+     * with runtime elements, based on the user-defined runtime template options.
+     * And adds the updated extension to the specified odaModel.
+     * @param odaModel
+     * @param profileExtension
+     * @throws CoreException
+     */
+    void updateConnProfileRuntimeModel( IPluginModelBase odaModel, 
+                                        IPluginExtension profileExtension )
+        throws CoreException
+    {
+        if ( ! profileExtension.isInTheModel() )
+            odaModel.getPluginBase().add( profileExtension );
+        
+        IPluginModelFactory factory = odaModel.getPluginFactory();
+        
+        // connectionProfile extension
+        // category element
+        IPluginElement categoryElement = factory.createElement( profileExtension );
+        categoryElement.setName( "category" ); //$NON-NLS-1$
+        categoryElement.setAttribute( "id", PROP_ODA_DATA_SOURCE_ID ); //$NON-NLS-1$
+        categoryElement.setAttribute( "name", PROP_DATA_SOURCE_NAME ); //$NON-NLS-1$
+        categoryElement.setAttribute( "parentCategory",   //$NON-NLS-1$
+                "org.eclipse.datatools.connectivity.oda.profileCategory" ); //$NON-NLS-1$
+        profileExtension.add( categoryElement );
+        
+        // connectionProfile element
+        IPluginElement profileElement = factory.createElement( profileExtension );
+        profileElement.setName( "connectionProfile" ); //$NON-NLS-1$
+        profileElement.setAttribute( "category", PROP_ODA_DATA_SOURCE_ID ); //$NON-NLS-1$
+        profileElement.setAttribute( "id", PROP_ODA_DATA_SOURCE_ID ); //$NON-NLS-1$
+        profileElement.setAttribute( "name", "%connection.profile.name" ); //$NON-NLS-1$ //$NON-NLS-2$
+        profileElement.setAttribute( "pingFactory", ODA_PROFILE_FACTORY_CLASS ); //$NON-NLS-1$
+        profileExtension.add( profileElement );
+         
+        // connectionFactory element
+        IPluginElement factoryElement = factory.createElement( profileExtension );
+        factoryElement.setName( "connectionFactory" ); //$NON-NLS-1$
+        factoryElement.setAttribute( "id", "org.eclipse.datatools.connectivity.oda.IConnection" ); //$NON-NLS-1$ //$NON-NLS-2$
+        factoryElement.setAttribute( "profile", PROP_ODA_DATA_SOURCE_ID ); //$NON-NLS-1$
+        factoryElement.setAttribute( "name", Messages.modeler_odaConnectionFactory ); //$NON-NLS-1$
+        factoryElement.setAttribute( "class", ODA_PROFILE_FACTORY_CLASS ); //$NON-NLS-1$
+        profileExtension.add( factoryElement );   
+    }
+
+    /**
+     * Updates the specified connection profile extension configuration
+     * with design ui elements, and the profile property page
+     * extension configuration, based on the user-defined designer template options.
+     * And adds the updated extensions to the specified odaModel.
+     * @param odaModel
+     * @param profileExtension
+     * @param profileImageExtension
+     * @param profilePageExtension
+     * @throws CoreException
+     */
+    void updateConnProfileDesignerModel( IPluginModelBase odaModel, 
+                            IPluginExtension profileExtension,
+                            IPluginExtension profileImageExtension,
+                            IPluginExtension profilePageExtension )
+        throws CoreException
+    {
+        if ( ! profileExtension.isInTheModel() )
+            odaModel.getPluginBase().add( profileExtension );
+        if ( ! profileImageExtension.isInTheModel() )
+            odaModel.getPluginBase().add( profileImageExtension );
+        if ( ! profilePageExtension.isInTheModel() )
+            odaModel.getPluginBase().add( profilePageExtension );
+        
+        IPluginModelFactory factory = odaModel.getPluginFactory();
+        
+        // connectionProfile extension        
+        // newWizard element
+        IPluginElement profileWizElement = factory.createElement( profileExtension );
+        profileWizElement.setName( "newWizard" ); //$NON-NLS-1$
+        profileWizElement.setAttribute( "id", PROP_ODA_DATA_SOURCE_ID ); //$NON-NLS-1$
+        profileWizElement.setAttribute( "profile", PROP_ODA_DATA_SOURCE_ID ); //$NON-NLS-1$
+        profileWizElement.setAttribute( "name", "%newwizard.name" ); //$NON-NLS-1$ //$NON-NLS-2$
+        profileWizElement.setAttribute( "description", "%newwizard.description" ); //$NON-NLS-1$ //$NON-NLS-2$
+        profileWizElement.setAttribute( "class",   //$NON-NLS-1$
+                "org.eclipse.datatools.connectivity.oda.design.ui.wizards.NewDataSourceWizard" ); //$NON-NLS-1$
+        profileWizElement.setAttribute( "icon", "icons/new_oda_dswiz.ico" );  //$NON-NLS-1$ //$NON-NLS-2$
+        profileExtension.add( profileWizElement );
+
+        // profile icon image extension
+        // profileImage element
+        IPluginElement pageImageElement = factory.createElement( profileImageExtension );
+        pageImageElement.setName( "profileImage" ); //$NON-NLS-1$
+        pageImageElement.setAttribute( "profileID", PROP_ODA_DATA_SOURCE_ID ); //$NON-NLS-1$
+        pageImageElement.setAttribute( "icon", "icons/profile.gif" ); //$NON-NLS-1$  //$NON-NLS-2$
+        profileImageExtension.add( pageImageElement );
+        
+        // profile property page extension
+        // page element
+        IPluginElement pageElement = factory.createElement( profilePageExtension );
+        pageElement.setName( "page" ); //$NON-NLS-1$
+        pageElement.setAttribute( "id", PROP_ODA_DATA_SOURCE_ID ); //$NON-NLS-1$
+        pageElement.setAttribute( "name", "%profile.propertypage.name" ); //$NON-NLS-1$ //$NON-NLS-2$
+        pageElement.setAttribute( "class",   //$NON-NLS-1$
+                "org.eclipse.datatools.connectivity.oda.design.ui.pages.impl.DefaultDataSourcePropertyPage" ); //$NON-NLS-1$
+        profilePageExtension.add( pageElement );
+        
+        // page enabledWhen element
+        IPluginElement pageEnabledWhenElement = factory.createElement( pageElement );
+        pageEnabledWhenElement.setName( "enabledWhen" ); //$NON-NLS-1$
+        IPluginElement pageinstanceOfElement = factory.createElement( pageEnabledWhenElement );
+        pageinstanceOfElement.setName( "instanceof" ); //$NON-NLS-1$
+        pageinstanceOfElement.setAttribute( "value",  //$NON-NLS-1$
+                "org.eclipse.datatools.connectivity.IConnectionProfile" ); //$NON-NLS-1$
+        pageEnabledWhenElement.add( pageinstanceOfElement );
+        pageElement.add( pageEnabledWhenElement );
+
+        // page filter element
+        IPluginElement pageFilterElement = factory.createElement( pageElement );
+        pageFilterElement.setName( "filter" ); //$NON-NLS-1$
+        pageFilterElement.setAttribute( "name",   //$NON-NLS-1$
+                "org.eclipse.datatools.profile.property.id" ); //$NON-NLS-1$
+        pageFilterElement.setAttribute( "value", PROP_ODA_DATA_SOURCE_ID ); //$NON-NLS-1$
+        pageElement.add( pageFilterElement );
+    }
+    
+    /**
+     * Updates the specified designer extension configuration
+     * based on the user-defined designer template options, and
+     * adds the updated extension to the specified odaModel.
+     * @param odaModel
+     * @param designerExtension
+     * @throws CoreException
+     */
+    void updateDesignerModel( IPluginModelBase odaModel,
+                              IPluginExtension designerExtension ) 
+        throws CoreException
+    {
+        odaModel.getPluginBase().setName( "%plugin.name" );  //$NON-NLS-1$
+
+        if ( ! designerExtension.isInTheModel() )
+            odaModel.getPluginBase().add( designerExtension );
+        
+        IPluginModelFactory factory = odaModel.getPluginFactory();
+            
+        // dataSourceUI element
+        IPluginElement dataSourceUIElement = factory.createElement( designerExtension );
+        dataSourceUIElement.setName( "dataSourceUI" ); //$NON-NLS-1$
+        dataSourceUIElement.setAttribute( "id", PROP_ODA_DATA_SOURCE_ID ); //$NON-NLS-1$
+        designerExtension.add( dataSourceUIElement );
+        
+        // dataSourceUI.newDataSourceWizard element
+        IPluginElement odaSourceWizElement = factory.createElement( dataSourceUIElement );
+        odaSourceWizElement.setName( "newDataSourceWizard" ); //$NON-NLS-1$
+        odaSourceWizElement.setAttribute( "includesProgressMonitor", VALUE_FALSE ); //$NON-NLS-1$
+        odaSourceWizElement.setAttribute( "pageClass",   //$NON-NLS-1$
+                "org.eclipse.datatools.connectivity.oda.design.ui.pages.impl.DefaultDataSourceWizardPage" ); //$NON-NLS-1$
+        odaSourceWizElement.setAttribute( "pageTitle", "%wizard.data.source.page.title" );  //$NON-NLS-1$ //$NON-NLS-2$
+        odaSourceWizElement.setAttribute( "windowTitle", "%wizard.window.title" );  //$NON-NLS-1$ //$NON-NLS-2$
+        dataSourceUIElement.add( odaSourceWizElement );
+        
+        // dataSetUI element
+        IPluginElement dataSetUIElement = factory.createElement( designerExtension );
+        dataSetUIElement.setName( "dataSetUI" ); //$NON-NLS-1$
+        
+        String dataSourceId = m_section.getStringOption( DesignTimeTemplateSection.OPTION_RUNTIME_DATA_SOURCE_ID );
+        String dataSetId = m_section.getStringOption( DesignTimeTemplateSection.OPTION_RUNTIME_DATA_SET_ID );
+        if( dataSetId == null && dataSourceId != null )
+            dataSetId = dataSourceId + ".dataSet"; //$NON-NLS-1$
+        dataSetUIElement.setAttribute( "id", dataSetId ); //$NON-NLS-1$
+        
+        String dataSetPageId = dataSetId + ".page1"; //$NON-NLS-1$
+        dataSetUIElement.setAttribute( "initialPageId", dataSetPageId ); //$NON-NLS-1$
+        
+        dataSetUIElement.setAttribute( "supportsInParameters", VALUE_TRUE ); //$NON-NLS-1$
+        dataSetUIElement.setAttribute( "supportsOutParameters", VALUE_FALSE ); //$NON-NLS-1$
+        designerExtension.add( dataSetUIElement );
+        
+        // dataSetUI.dataSetWizard element
+        IPluginElement dataSetWizElement = factory.createElement( dataSetUIElement );
+        dataSetWizElement.setName( "dataSetWizard" ); //$NON-NLS-1$
+        dataSetWizElement.setAttribute( "class", //$NON-NLS-1$
+           "org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizard" ); //$NON-NLS-1$
+        dataSetWizElement.setAttribute( "windowTitle", "%wizard.data.set.window.title" );  //$NON-NLS-1$ //$NON-NLS-2$
+        dataSetUIElement.add( dataSetWizElement );
+
+        // dataSetUI.dataSetPage element
+        IPluginElement dataSetPageElement = factory.createElement( dataSetUIElement );
+        dataSetPageElement.setName( "dataSetPage" ); //$NON-NLS-1$
+        dataSetPageElement.setAttribute( "id", dataSetPageId ); //$NON-NLS-1$
+        dataSetPageElement.setAttribute( "displayName", "%wizard.data.set.page.title" );  //$NON-NLS-1$ //$NON-NLS-2$
+        dataSetPageElement.setAttribute( "icon", "icons/datasetpage.ico" );  //$NON-NLS-1$ //$NON-NLS-2$
+        dataSetPageElement.setAttribute( "path", "/" );  //$NON-NLS-1$ //$NON-NLS-2$
+        dataSetPageElement.setAttribute( "wizardPageClass",  //$NON-NLS-1$
+                getKeyPackageName() + ".CustomDataSetWizardPage" );  //$NON-NLS-1$
+        dataSetUIElement.add( dataSetPageElement );
+    }
+    
+    /**
+     * Adjusts the model's bundle headers to trigger generation of needed entries
+     * in the manifest.mf of the new plug-in project (Bugzilla 172744).
+     * Using internal PDE API as an interim solution to work around 
+     * the PDE UI Template API's restrictions (Bugzilla 173393).
+     * @param odaModel      model being executed during project creation
+     * @param forRuntimeBundle  true for adjusting headers in the runtime bundle;
+     *                      false for the design-time bundle
+     */
+    void adjustManifestHeaders( IPluginModelBase odaModel, boolean forRuntimeBundle )
+    {
+        /* removed workaround code for bug 173393, which is 
+         * fixed in PDE UI Template 3.3M7
+         */        
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/internal/ui/OdaTemplateSection.java b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/internal/ui/OdaTemplateSection.java
new file mode 100644
index 0000000..7a8b93b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/internal/ui/OdaTemplateSection.java
@@ -0,0 +1,518 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.template.internal.ui;
+
+import java.net.URL;
+import java.util.Locale;
+import java.util.ResourceBundle;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.oda.template.ui.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.template.ui.plugin.Activator;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.pde.core.plugin.IPluginModelBase;
+import org.eclipse.pde.ui.IFieldData;
+import org.eclipse.pde.ui.templates.NewPluginTemplateWizard;
+import org.eclipse.pde.ui.templates.OptionTemplateSection;
+import org.eclipse.pde.ui.templates.TemplateOption;
+import org.osgi.framework.Bundle;
+
+/**
+ * The abstract base class implementation of an ODA plug-in template section.
+ * Provides common behavior for an extended ODA plug-in template section
+ * of an ODA plug-in template wizard.
+ */
+abstract class OdaTemplateSection extends OptionTemplateSection
+{
+    protected static final String OPTION_RUNTIME_DATA_SOURCE_ID = "odaDataSourceId";  //$NON-NLS-1$
+    protected static final String OPTION_DATASOURCE_DISPLAY_NAME = "dataSourceName";  //$NON-NLS-1$
+    protected static final String OPTION_DATASET_DISPLAY_NAME = "dataSetName";  //$NON-NLS-1$
+    protected static Locale IDENTIFIER_LOCALE = Locale.ENGLISH;
+    
+    static final String SPACE_CHAR = " ";  //$NON-NLS-1$    
+    static final String COLON_CHAR = ":"; //$NON-NLS-1$
+    static final String REQUIRED_INDICATOR = "*"; //$NON-NLS-1$
+    
+    private IFieldData m_fieldData;
+    private IPluginModelBase m_initialModel;
+    private NewPluginTemplateWizard m_templateWiz;
+    private IPluginModelBase m_executingModel;
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.pde.ui.templates.BaseOptionTemplateSection#initializeFields(org.eclipse.pde.ui.IFieldData)
+     */
+    protected void initializeFields( IFieldData data )
+    {
+        // lazy initialization of page options before it is made visible
+        m_fieldData = data;    
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.pde.ui.templates.BaseOptionTemplateSection#initializeFields(org.eclipse.pde.core.plugin.IPluginModelBase)
+     */
+    public void initializeFields( IPluginModelBase model )
+    {
+        m_initialModel = model;
+    }
+    
+    /**
+     * Returns the IFieldData provided to the template section in initializeFields.
+     */
+    protected IFieldData getFieldData()
+    {
+        return m_fieldData;
+    }
+    
+    /**
+     * Returns the model provided to the template section in initializeFields.
+     */
+    protected IPluginModelBase getInitializeModel()
+    {
+        return m_initialModel;
+    }
+
+    /**
+     * Returns the ODA plug-in template wizard of this extended section.
+     */
+    protected NewPluginTemplateWizard getTemplateWizard()
+    {
+        return m_templateWiz;
+    }
+
+    /**
+     * Sets the ODA plug-in template wizard of this extended section.
+     */
+    protected void setTemplateWizard( NewPluginTemplateWizard wiz )
+    {
+        m_templateWiz = wiz;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.pde.ui.templates.BaseOptionTemplateSection#validateOptions(org.eclipse.pde.ui.templates.TemplateOption)
+     */
+    public void validateOptions( TemplateOption changedOption )
+    {
+        if( ! isOptionValueValid( changedOption ) )
+            return;
+        
+        // next check all other options on same page is valid
+        TemplateOption[] pageOptions = getOptions(0);
+        for( int i = 0; i < pageOptions.length; i++ ) 
+        {
+            if( ! isOptionValueValid( pageOptions[i] ) )
+                return;
+        }
+        
+        // no missing or invalid options, ok to reset page
+        resetPageState();
+    }
+    
+    /**
+     * Validates whether the specified option has valid value defined.
+     * @param changedOption
+     * @return  true if the option's value is valid; false otherwise.
+     */
+    private boolean isOptionValueValid( TemplateOption changedOption )
+    {
+        if( changedOption.isRequired() && changedOption.isEmpty() ) 
+        {
+            flagMissingRequiredOption( changedOption );
+            return false;
+        }
+        
+        if( ! isJavaIdentifierValid( changedOption ) )
+            return false;
+        
+        return true;
+    }
+    
+    /**
+     * Checks whether the specified option is intended to be a Java identifier,
+     * and thus requires validation that its value contains valid characters.
+     * @param option
+     * @return  true if the option requires validation that its value contains valid
+     *               characters; false otherwise.
+     */
+    private boolean needsIdCharValidation( TemplateOption option )
+    {
+        // the Java package name option's value is intended to be an identifier
+        if( option.getName() == KEY_PACKAGE_NAME )
+            return true;
+        
+        // check if sub-class declares this option is intended for a Java identifier
+        String[] identifierOptions = getAdditionalJavaIdentifierOptions();
+        if( identifierOptions == null )
+            return false;
+        
+        for( int i = 0; i < identifierOptions.length; i++ )
+        {
+            if( option.getName() == identifierOptions[i] )
+                return true;            
+        }
+        return false;
+    }
+    
+    /**
+     * Sub-class to override and provide additional options intended
+     * for Java identifier, which would then be validated.
+     */
+    protected String[] getAdditionalJavaIdentifierOptions()
+    {
+        return null;
+    }
+
+    /**
+     * Checks whether the specified option is intended to contain a string value in
+     * all lower cases.
+     * @param option
+     * @return  true if option value should be in all lower cases; false otherwise.
+     */
+    private boolean needsLowerCaseValue( TemplateOption option )
+    {
+        return option.getName() == KEY_PACKAGE_NAME;
+    }
+    
+    /**
+     * Validates whether the specified option has a string value valid for use
+     * as a Java identifier.
+     * @param option
+     * @return  true if option value is valid for use as a Java identifier;
+     *          false otherwise.
+     */
+    private boolean isJavaIdentifierValid( TemplateOption option )
+    {
+        boolean validateChars = needsIdCharValidation( option );
+        boolean validateLowerCase = needsLowerCaseValue( option );
+        if( ! validateChars && ! validateLowerCase )
+            return true;     // no need to validate, done
+        
+        String value = (String) option.getValue();
+        int i;
+        for( i = 0; i < value.length(); i++ ) 
+        {
+            char ch = value.charAt(i);
+            
+            if( validateChars )
+            {
+                if( i == 0 ) 
+                {
+                    if( ! Character.isJavaIdentifierStart( ch ) )
+                        break;  // found invalid character
+                } 
+                else 
+                {
+                    if( ! Character.isJavaIdentifierPart( ch ) && 
+                        ch != '.' )
+                        break;   // found invalid character
+                }
+            }
+            
+            if( validateLowerCase )
+            {
+                if( Character.isUpperCase( ch ) )
+                    break;  // found upper case
+            }
+        }
+
+        // check if all characters in option string value have been validated
+        boolean isValid = ( i >= value.length() );
+        if( isValid )
+            return isValid;     // done validation
+        
+        // found invalid character
+        
+        WizardPage page = getPage( getPageIndex( option ) );
+        if( page != null )
+        {
+            page.setPageComplete( false );
+            page.setErrorMessage( 
+                    Messages.bind( Messages.baseSection_illegaCharsForIdentifier, 
+                            option.getMessageLabel() ) );
+        }
+        return false;
+    }
+    
+    /**
+     * Adds a required template option with specified name and label with required indicator 
+     * to first page with no initial value.
+     * @param name  option name
+     * @param label option label/prompt
+     * @return  the newly created option
+     */
+    protected TemplateOption addRequiredOption( String name, String label )
+    {
+        TemplateOption newOption =
+            addOption( name, label + REQUIRED_INDICATOR + COLON_CHAR, (String) null, 0 );
+        newOption.setRequired( true );
+        return newOption;
+    }
+    
+    /**
+     * Adds an optional template option with specified name and label 
+     * to first page with no initial value.
+     * @param name  option name
+     * @param label option label/prompt
+     * @return  the newly created option
+     */
+    protected TemplateOption addOptionalOption( String name, String label )
+    {
+        TemplateOption newOption = addOption( name, label + COLON_CHAR, (String) null, 0 );
+        newOption.setRequired( false );
+        return newOption;
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.pde.ui.templates.OptionTemplateSection#getInstallURL()
+     */
+    protected URL getInstallURL()
+    {
+        return Activator.getDefault().getInstallURL();
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.pde.ui.templates.ITemplateSection#getNewFiles()
+     */
+    public String[] getNewFiles()
+    {
+        return new String[] { "META-INF/",   //$NON-NLS-1$
+                              "plugin.xml",   //$NON-NLS-1$
+                              "plugin.properties" };  //$NON-NLS-1$
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.pde.ui.templates.OptionTemplateSection#getTemplateDirectory()
+     */
+    protected String getTemplateDirectory()
+    {
+        return "templates_oda_3.0"; //$NON-NLS-1$
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.pde.ui.templates.AbstractTemplateSection#getPluginResourceBundle()
+     */
+    protected ResourceBundle getPluginResourceBundle()
+    {
+        Bundle bundle = Platform.getBundle( Activator.getPluginId() );
+        return Platform.getResourceBundle( bundle );
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.pde.ui.templates.BaseOptionTemplateSection#isDependentOnParentWizard()
+     */
+    public boolean isDependentOnParentWizard()
+    {
+        return true;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.pde.ui.templates.AbstractTemplateSection#addPages(org.eclipse.jface.wizard.Wizard)
+     */
+    public void addPages( Wizard wizard )
+    {
+        WizardPage page = createPage( 0, null );
+        page.setTitle( getWizardPageTitle() ); 
+        page.setDescription( Messages.baseSection_pageDesc );  
+        wizard.addPage( page );
+        markPagesAdded();
+    }
+    
+    /**
+     * Returns the wizard page title defined by a subclass.
+     */
+    protected abstract String getWizardPageTitle();
+
+    /* (non-Javadoc)
+     * @see org.eclipse.pde.ui.templates.BaseOptionTemplateSection#execute(org.eclipse.core.resources.IProject, org.eclipse.pde.core.plugin.IPluginModelBase, org.eclipse.core.runtime.IProgressMonitor)
+     */
+    public void execute( IProject project, IPluginModelBase model,
+            IProgressMonitor monitor ) throws CoreException
+    {
+        // hold on to model being executed to make it available to subclass 
+        // to override as needed,
+        // before the generateFiles method is called in execute
+        m_executingModel = model;
+        super.execute( project, model, monitor );
+        m_executingModel = null;    // reset
+    }
+
+    protected IPluginModelBase getExecutingModel()
+    {
+        return m_executingModel;    // may be null if not called during execute
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.pde.ui.templates.AbstractTemplateSection#updateModel(org.eclipse.core.runtime.IProgressMonitor)
+     */
+    protected void updateModel( IProgressMonitor monitor )
+        throws CoreException
+    {
+        updateOdaPluginModel( model );
+    }
+
+    /**
+     * Subclass must implement this method to update its portion of
+     * the ODA plugin model.
+     */
+    protected abstract void updateOdaPluginModel( IPluginModelBase odaModel ) throws CoreException;    
+
+    /**
+     * Converts given name to a valid Java identifer.
+     * This is not currently used.
+     */
+    protected String convertToJavaIdentifier( String name )
+    {
+        StringBuffer buffer = new StringBuffer();
+        for( int i = 0; i < name.length(); i++ ) 
+        {
+            char ch = name.charAt(i);
+            if( i == 0 ) 
+            {
+                if( ! Character.isJavaIdentifierStart( ch ) )
+                    continue;  // skip invalid character
+            } 
+            else 
+            {
+                if( ! Character.isJavaIdentifierPart( ch ) && 
+                    ch != '.' )
+                    continue;   // skip invalid character
+            }
+            
+            // is valid character, use it
+            buffer.append( ch );
+        }
+        
+        return buffer.toString().toLowerCase( IDENTIFIER_LOCALE );        
+    }    
+    
+    /**
+     * Returns the plugin id provided by plug-in wizard in either the 
+     * model or fieldData used in initializeFields.
+     */
+    protected String getNewPluginId()
+    {
+        if( m_initialModel != null ) 
+            return m_initialModel.getPluginBase().getId();
+        
+        // perhaps this is called after page is made visible
+        if( m_fieldData != null ) 
+            return m_fieldData.getId();
+        
+        // obtain the id from the template wizard
+        return getTemplateWizard().getData().getId();
+    }
+    
+    /**
+     * Returns the plugin name provided by plug-in wizard in either the 
+     * model or fieldData used in initializeFields.
+     */
+    protected String getNewPluginName()
+    {
+        if( m_initialModel != null ) 
+            return m_initialModel.getPluginBase().getName();
+        
+        // perhaps this is called after page is made visible
+        if( m_fieldData != null ) 
+            return m_fieldData.getName();
+        
+        // obtain from the template wizard
+        return getTemplateWizard().getData().getName();
+    }
+    
+    /**
+     * Returns the provider name provided by plug-in wizard in either the 
+     * model or fieldData used in initializeFields.
+     * Returns an empty string if none is found.
+     */
+    protected String getNewProviderName()
+    {
+        String name;
+        if( m_initialModel != null ) 
+            name = m_initialModel.getPluginBase().getProviderName();
+        else
+        {
+            // perhaps this is called after page is made visible
+            if( m_fieldData != null ) 
+                name = m_fieldData.getProvider();
+            else // obtain from the template wizard
+                name = getTemplateWizard().getData().getProvider();
+        }
+        
+        return ( name == null ) ? "" : name; //$NON-NLS-1$
+    }
+
+    /**
+     * Formats and returns the initialized value of the Java package name to generate.
+     */
+    protected String getDefaultPackageName()
+    {
+        return getNewPluginId().toLowerCase( IDENTIFIER_LOCALE ) + ".impl";  //$NON-NLS-1$
+    }
+
+    /**
+     * Formats and returns the default base name for use as
+     * the ODA extension display name.
+     */
+    protected String getDefaultDriverBaseName()
+    {
+        String pluginKeyword = " Plug-in";  //$NON-NLS-1$
+        String pluginName = getNewPluginName();
+
+        // strip out the plugin keyword if exists
+        if( pluginName.endsWith( pluginKeyword ) )
+            return pluginName.substring( 0, pluginName.length() - pluginKeyword.length() );
+        return pluginName;
+    }
+    
+    /**
+     * Formats and returns the initialized value of the ODA data source display name.
+     */
+    protected String getDefaultDataSourceName()
+    {
+        String providerName = getNewProviderName();
+        if( providerName.length() > 0 )
+            providerName += SPACE_CHAR;
+        return providerName + 
+                getDefaultDriverBaseName() + SPACE_CHAR + 
+                Messages.baseSection_dataSourceNameSuffix;
+    }
+    
+    /**
+     * Formats and returns the initialized value of the ODA data set display name.
+     */
+    protected String getDefaultDataSetName()
+    {
+        String providerName = getNewProviderName();
+        if( providerName.length() > 0 )
+            providerName += SPACE_CHAR;
+        return providerName + 
+                getDefaultDriverBaseName() + SPACE_CHAR +
+                Messages.baseSection_dataSetNameSuffix;
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/internal/ui/RuntimeTemplateSection.java b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/internal/ui/RuntimeTemplateSection.java
new file mode 100644
index 0000000..8f72219
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/internal/ui/RuntimeTemplateSection.java
@@ -0,0 +1,191 @@
+/*

+ *************************************************************************

+ * Copyright (c) 2006, 2014 Actuate Corporation.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *  Actuate Corporation - initial API and implementation

+ *  

+ *************************************************************************

+ */

+

+package org.eclipse.datatools.connectivity.oda.template.internal.ui;

+

+import org.eclipse.core.runtime.CoreException;

+import org.eclipse.core.runtime.IProgressMonitor;

+import org.eclipse.datatools.connectivity.oda.template.ui.nls.Messages;

+import org.eclipse.osgi.service.resolver.VersionRange;

+import org.eclipse.pde.core.plugin.IPluginExtension;

+import org.eclipse.pde.core.plugin.IPluginModelBase;

+import org.eclipse.pde.core.plugin.IPluginReference;

+import org.eclipse.pde.ui.IFieldData;

+import org.eclipse.pde.ui.templates.NewPluginTemplateWizard;

+import org.eclipse.pde.ui.templates.PluginReference;

+import org.osgi.framework.Version;

+

+/**

+ * A section of the ODA runtime driver plug-in template wizard that generates a new 

+ * ODA runtime driver plug-in.

+ * It is intended for use as part of the new plug-in project wizard.

+ */

+class RuntimeTemplateSection extends OdaTemplateSection

+{

+    static final String OPTION_NUM_CONN_PROPERTIES = "numConnProperties";  //$NON-NLS-1$

+    static final String OPTION_NUM_QUERY_PROPERTIES = "numQueryProperties";  //$NON-NLS-1$

+

+    

+    RuntimeTemplateSection( NewPluginTemplateWizard wiz )

+    {

+        super.setTemplateWizard( wiz );

+        setPageCount( 1 );

+        createOptions();       

+    }

+    

+    /**

+     * Create options for the template option page.

+     */

+    private void createOptions() 

+    {

+        // required template options

+        addRequiredOption( KEY_PACKAGE_NAME, 

+                Messages.baseSection_optLabel_packageName );

+        addRequiredOption( OPTION_RUNTIME_DATA_SOURCE_ID, 

+                Messages.runtimeSection_optLabel_odaDataSourceId );

+        

+        // optional template options

+        addOptionalOption( OPTION_DATASOURCE_DISPLAY_NAME, 

+                Messages.baseSection_optLabel_dataSourceName );        

+        addOptionalOption( OPTION_NUM_CONN_PROPERTIES, 

+                Messages.runtimeSection_optLabel_numSourceProps );

+        addOptionalOption( OPTION_DATASET_DISPLAY_NAME, 

+                Messages.baseSection_optLabel_dataSetName );       

+        addOptionalOption( OPTION_NUM_QUERY_PROPERTIES, 

+                Messages.runtimeSection_optLabel_numSetProps );

+    }

+    

+    /*

+     * (non-Javadoc)

+     * @see org.eclipse.pde.ui.templates.BaseOptionTemplateSection#initializeFields(org.eclipse.pde.ui.IFieldData)

+     */

+    protected void initializeFields( IFieldData data )   

+    {

+        // lazy initialization of page options before it is made visible

+        super.initializeFields( data );

+        initializeOptions();

+    }

+    

+    /*

+     * (non-Javadoc)

+     * @see org.eclipse.datatools.connectivity.oda.template.internal.ui.OdaTemplateSection#initializeFields(org.eclipse.pde.core.plugin.IPluginModelBase)

+     */

+    public void initializeFields( IPluginModelBase aModel )

+    {

+        super.initializeFields( aModel );

+        initializeOptions();

+    }

+    

+    private void initializeOptions()

+    {

+        initializeOption( KEY_PACKAGE_NAME, getDefaultPackageName() );

+        initializeOption( OPTION_RUNTIME_DATA_SOURCE_ID, getDefaultDataSourceId() );

+        

+        initializeOption( OPTION_DATASOURCE_DISPLAY_NAME, getDefaultDataSourceName() );

+        initializeOption( OPTION_NUM_CONN_PROPERTIES, "2" );   //$NON-NLS-1$       

+        initializeOption( OPTION_DATASET_DISPLAY_NAME, getDefaultDataSetName() );

+        initializeOption( OPTION_NUM_QUERY_PROPERTIES, "0" );   //$NON-NLS-1$

+    }

+ 

+    /**

+     * Formats and returns the initialized value of the ODA data source element id.

+     */

+    private String getDefaultDataSourceId()

+    {

+        return getNewPluginId().toLowerCase( IDENTIFIER_LOCALE );

+    }

+    

+    /* (non-Javadoc)

+     * @see org.eclipse.pde.ui.templates.OptionTemplateSection#getSectionId()

+     */

+    public String getSectionId()

+    {

+        return "runtimeDriver";  //$NON-NLS-1$

+    }

+ 

+    /*

+     * (non-Javadoc)

+     * @see org.eclipse.datatools.connectivity.oda.template.internal.ui.OdaTemplateSection#getWizardPageTitle()

+     */

+    protected String getWizardPageTitle()

+    {

+        return Messages.runtimeSection_wizardPageTitle;

+    }

+

+    /*

+     * (non-Javadoc)

+     * @see org.eclipse.datatools.connectivity.oda.template.internal.ui.OdaTemplateSection#updateOdaPluginModel(org.eclipse.pde.core.plugin.IPluginModelBase)

+     */

+    protected void updateOdaPluginModel( IPluginModelBase odaModel )

+        throws CoreException

+    {

+        // calls inherited method to create extension

+        IPluginExtension runtimeExtension = 

+                createExtension( OdaPluginModeler.ODA_RUNTIME_EXT_PT, true );

+        

+        OdaPluginModeler modeler = new OdaPluginModeler( this );

+        modeler.updateRuntimeModel( odaModel, runtimeExtension );    

+

+        IPluginExtension profileExtension = 

+            createExtension( OdaPluginModeler.CONNECTIVITY_PROFILE_EXT_PT, true );

+        modeler.updateConnProfileRuntimeModel( odaModel, profileExtension );    

+}

+

+    /* (non-Javadoc)

+     * @see org.eclipse.pde.ui.templates.AbstractTemplateSection#generateFiles(org.eclipse.core.runtime.IProgressMonitor)

+     */

+    protected void generateFiles( IProgressMonitor monitor )

+            throws CoreException

+    {

+        // adjust the model's manifest headers to work around Bugzilla #172744

+        OdaPluginModeler modeler = new OdaPluginModeler( this );

+        modeler.adjustManifestHeaders( getExecutingModel(), true );

+        

+        super.generateFiles( monitor );

+    }

+    

+    /*

+     * (non-Javadoc)

+     * @see org.eclipse.pde.ui.templates.AbstractTemplateSection#getDependencies(java.lang.String)

+     */

+    public IPluginReference[] getDependencies( String schemaVersion )

+    {

+        Version version320 = new Version( 3, 2, 0 );

+        Version version340 = new Version( 3, 4, 0 );

+        Version version400 = new Version( 4, 0, 0 );

+        VersionRange compatible320 = new VersionRange( version320, true, version400, false );       

+        VersionRange compatible340 = new VersionRange( version340, true, version400, false );       

+        

+        return new IPluginReference[] 

+                    {   

+                      new PluginReference( 

+                        "org.eclipse.core.runtime", null, 0 ), //$NON-NLS-1$

+                      new CompatiblePluginReference( 

+                        "org.eclipse.datatools.connectivity.oda",  //$NON-NLS-1$

+                        compatible340.toString() ),

+                      new CompatiblePluginReference( 

+                        "org.eclipse.datatools.connectivity.oda.profile",  //$NON-NLS-1$

+                        compatible320.toString() )

+                    };

+    }

+

+    /* (non-Javadoc)

+     * @see org.eclipse.pde.ui.templates.ITemplateSection#getUsedExtensionPoint()

+     */

+    public String getUsedExtensionPoint()

+    {

+        return OdaPluginModeler.ODA_RUNTIME_EXT_PT;

+    }

+    

+}

diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/ui/nls/Messages.java b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/ui/nls/Messages.java
new file mode 100644
index 0000000..9dadb52
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/ui/nls/Messages.java
@@ -0,0 +1,59 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.template.ui.nls;
+
+import org.eclipse.osgi.util.NLS;
+
+public class Messages extends NLS
+{
+    private static final String BUNDLE_NAME = "org.eclipse.datatools.connectivity.oda.template.ui.nls.messages"; //$NON-NLS-1$
+
+
+    public static String driverWizard_windowTitle;
+
+    public static String designWizard_windowTitle;
+
+    public static String baseSection_optLabel_packageName;
+    public static String baseSection_optLabel_dataSetName;
+    public static String baseSection_optLabel_dataSourceName;
+    public static String baseSection_dataSetNameSuffix;
+    public static String baseSection_dataSourceNameSuffix;
+    public static String baseSection_illegaCharsForIdentifier;
+    public static String baseSection_pageDesc;
+
+    public static String designSection_optLabel_driverClass;
+    public static String designSection_optLabel_driverPluginId;
+    public static String designSection_optLabel_odaDataSetId;
+    public static String designSection_optLabel_odaDataSourceId;
+    public static String designSection_wizardPageTitle;
+
+    public static String runtimeSection_optLabel_numSetProps;
+    public static String runtimeSection_optLabel_numSourceProps;
+    public static String runtimeSection_optLabel_odaDataSourceId;
+    public static String runtimeSection_wizardPageTitle;
+
+    public static String modeler_odaConnectionFactory;
+    public static String modeler_propertyDisplayNamePrefix;
+    
+    static
+    {
+        // initialize resource bundle
+        NLS.initializeMessages( BUNDLE_NAME, Messages.class );
+    }
+
+    private Messages()
+    {
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/ui/nls/messages.properties b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/ui/nls/messages.properties
new file mode 100644
index 0000000..22dbd6a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/ui/nls/messages.properties
@@ -0,0 +1,37 @@
+#
+#************************************************************************
+# Copyright (c) 2006 Actuate Corporation.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#  Actuate Corporation - initial API and implementation
+#  
+#************************************************************************
+#
+driverWizard_windowTitle=New ODA Runtime Driver Plug-in
+designWizard_windowTitle=New ODA Designer Plug-in
+#
+baseSection_optLabel_packageName=&Java Package Name
+baseSection_optLabel_dataSetName=Data S&et Display Name
+baseSection_optLabel_dataSourceName=Data &Source Display Name
+baseSection_dataSetNameSuffix=Data Set
+baseSection_dataSourceNameSuffix=Data Source
+baseSection_illegaCharsForIdentifier=The input value contains character(s) that is not legal for the {0}.
+baseSection_pageDesc=Specify the options that will be used to generate the Open Data Access (ODA) plug-in.
+#
+designSection_optLabel_driverClass=ODA Runtime &Driver Class
+designSection_optLabel_driverPluginId=ODA Runtime Driver &Plug-in Id
+designSection_optLabel_odaDataSetId=ODA Runtime Data Set Element I&d
+designSection_optLabel_odaDataSourceId=ODA Runtime Data Source Element &Id
+designSection_wizardPageTitle=ODA Data Source Designer
+#
+runtimeSection_optLabel_numSetProps=Number of Data Set P&roperties
+runtimeSection_optLabel_numSourceProps=Number of Data Source &Properties
+runtimeSection_optLabel_odaDataSourceId=ODA Data Source Element &Id
+runtimeSection_wizardPageTitle=ODA Data Source Runtime Driver
+#
+modeler_odaConnectionFactory=ODA Connection Factory
+modeler_propertyDisplayNamePrefix=Property
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/ui/nls/package.html b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/ui/nls/package.html
new file mode 100644
index 0000000..ae3819f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/ui/nls/package.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+
+[<b>Non-API</b>] Contains internal implementation of internationalization and localization features.
+
+<!-- Put @see and @since tags down here. -->
+@since 3.0.3
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/ui/plugin/Activator.java b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/ui/plugin/Activator.java
new file mode 100644
index 0000000..2235ac8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/src/org/eclipse/datatools/connectivity/oda/template/ui/plugin/Activator.java
@@ -0,0 +1,85 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.template.ui.plugin;
+
+import java.net.URL;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * [Non-API] The activator class controls the plug-in life cycle.
+ * Intended for use within this project only.
+ */
+public class Activator extends AbstractUIPlugin 
+{
+	// The plug-in ID
+	private static final String PLUGIN_ID = 
+        "org.eclipse.datatools.connectivity.oda.template.ui.plugin";  //$NON-NLS-1$
+
+	// The shared instance
+	private static Activator sm_plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() 
+    {
+		sm_plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start( BundleContext context ) throws Exception 
+    {
+		super.start( context );
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop( BundleContext context ) throws Exception 
+    {
+		sm_plugin = null;
+		super.stop( context );
+	}
+
+	/**
+	 * Returns the shared instance
+	 */
+	public static Activator getDefault() 
+    {
+		return sm_plugin;
+	}
+    
+    /**
+     * Returns the installation URL of this plugin.
+     */
+    public URL getInstallURL() 
+    {
+        return getDefault().getBundle().getEntry( "/" ); //$NON-NLS-1$
+    }
+    
+    public static String getPluginId() 
+    {
+        if( getDefault() == null )  // not instantiated yet
+            return PLUGIN_ID;
+        return getDefault().getBundle().getSymbolicName();
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/designer/icons/datasetpage.ico b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/designer/icons/datasetpage.ico
new file mode 100644
index 0000000..b4a7cde
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/designer/icons/datasetpage.ico
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/designer/icons/new_oda_dswiz.ico b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/designer/icons/new_oda_dswiz.ico
new file mode 100644
index 0000000..ff770b1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/designer/icons/new_oda_dswiz.ico
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/designer/icons/profile.gif b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/designer/icons/profile.gif
new file mode 100644
index 0000000..6b86d07
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/designer/icons/profile.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/designer/java/CustomDataSetWizardPage.java b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/designer/java/CustomDataSetWizardPage.java
new file mode 100644
index 0000000..1484716
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/designer/java/CustomDataSetWizardPage.java
@@ -0,0 +1,390 @@
+/*

+ *************************************************************************

+ * Copyright (c) 2014 <<Your Company Name here>>

+ *  

+ *************************************************************************

+ */

+

+package $packageName$;

+

+import org.eclipse.datatools.connectivity.oda.IConnection;

+import org.eclipse.datatools.connectivity.oda.IDriver;

+import org.eclipse.datatools.connectivity.oda.IParameterMetaData;

+import org.eclipse.datatools.connectivity.oda.IQuery;

+import org.eclipse.datatools.connectivity.oda.IResultSetMetaData;

+import org.eclipse.datatools.connectivity.oda.OdaException;

+import org.eclipse.datatools.connectivity.oda.design.DataSetDesign;

+import org.eclipse.datatools.connectivity.oda.design.DataSetParameters;

+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;

+import org.eclipse.datatools.connectivity.oda.design.ParameterDefinition;

+import org.eclipse.datatools.connectivity.oda.design.ResultSetColumns;

+import org.eclipse.datatools.connectivity.oda.design.ResultSetDefinition;

+import org.eclipse.datatools.connectivity.oda.design.ui.designsession.DesignSessionUtil;

+import org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizardPage;

+import org.eclipse.datatools.connectivity.oda.design.util.DesignUtil;

+import org.eclipse.jface.resource.ImageDescriptor;

+import org.eclipse.swt.SWT;

+import org.eclipse.swt.events.ModifyEvent;

+import org.eclipse.swt.events.ModifyListener;

+import org.eclipse.swt.layout.GridData;

+import org.eclipse.swt.layout.GridLayout;

+import org.eclipse.swt.widgets.Composite;

+import org.eclipse.swt.widgets.Control;

+import org.eclipse.swt.widgets.Label;

+import org.eclipse.swt.widgets.Text;

+

+/**

+ * Auto-generated implementation of an ODA data set designer page

+ * for an user to create or edit an ODA data set design instance.

+ * This custom page provides a simple Query Text control for user input.  

+ * It further extends the DTP design-time framework to update

+ * an ODA data set design instance based on the query's derived meta-data.

+ * <br>

+ * A custom ODA designer is expected to change this exemplary implementation 

+ * as appropriate. 

+ */

+public class CustomDataSetWizardPage extends DataSetWizardPage

+{

+

+    private static String DEFAULT_MESSAGE = "Define the query text for the data set";

+    

+    private transient Text m_queryTextField;

+

+	/**

+     * Constructor

+	 * @param pageName

+	 */

+	public CustomDataSetWizardPage( String pageName )

+	{

+        super( pageName );

+        setTitle( pageName );

+        setMessage( DEFAULT_MESSAGE );

+	}

+

+	/**

+     * Constructor

+	 * @param pageName

+	 * @param title

+	 * @param titleImage

+	 */

+	public CustomDataSetWizardPage( String pageName, String title,

+			ImageDescriptor titleImage )

+	{

+        super( pageName, title, titleImage );

+        setMessage( DEFAULT_MESSAGE );

+	}

+

+	/* (non-Javadoc)

+	 * @see org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizardPage#createPageCustomControl(org.eclipse.swt.widgets.Composite)

+	 */

+	public void createPageCustomControl( Composite parent )

+	{

+        setControl( createPageControl( parent ) );

+        initializeControl();

+	}

+    

+    /**

+     * Creates custom control for user-defined query text.

+     */

+    private Control createPageControl( Composite parent )

+    {

+        Composite composite = new Composite( parent, SWT.NONE );

+        composite.setLayout( new GridLayout( 1, false ) );

+        GridData gridData = new GridData( GridData.HORIZONTAL_ALIGN_FILL

+                | GridData.VERTICAL_ALIGN_FILL );

+

+        composite.setLayoutData( gridData );

+

+        Label fieldLabel = new Label( composite, SWT.NONE );

+        fieldLabel.setText( "&Query Text:" );

+        

+        m_queryTextField = new Text( composite, SWT.BORDER

+                | SWT.V_SCROLL | SWT.H_SCROLL );

+        GridData data = new GridData( GridData.FILL_HORIZONTAL );

+        data.heightHint = 100;

+        m_queryTextField.setLayoutData( data );

+        m_queryTextField.addModifyListener( new ModifyListener( ) 

+        {

+            public void modifyText( ModifyEvent e )

+            {

+                validateData();

+            }

+        } );

+       

+        setPageComplete( false );

+        return composite;

+    }

+

+	/**

+	 * Initializes the page control with the last edited data set design.

+	 */

+	private void initializeControl( )

+	{

+        /* 

+         * To optionally restore the designer state of the previous design session, use

+         *      getInitializationDesignerState(); 

+         */

+

+        // Restores the last saved data set design

+        DataSetDesign dataSetDesign = getInitializationDesign();

+        if( dataSetDesign == null )

+            return; // nothing to initialize

+

+        String queryText = dataSetDesign.getQueryText();

+        if( queryText == null )

+            return; // nothing to initialize

+

+        // initialize control

+        m_queryTextField.setText( queryText );

+        validateData();

+        setMessage( DEFAULT_MESSAGE );

+

+        /*

+         * To optionally honor the request for an editable or

+         * read-only design session, use

+         *      isSessionEditable();

+         */

+	}

+

+    /**

+     * Obtains the user-defined query text of this data set from page control.

+     * @return query text

+     */

+    private String getQueryText( )

+    {

+        return m_queryTextField.getText();

+    }

+

+	/*

+	 * (non-Javadoc)

+	 * @see org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizardPage#collectDataSetDesign(org.eclipse.datatools.connectivity.oda.design.DataSetDesign)

+	 */

+	protected DataSetDesign collectDataSetDesign( DataSetDesign design )

+	{

+        if( getControl() == null )     // page control was never created

+            return design;             // no editing was done

+        if( ! hasValidData() )

+            return null;    // to trigger a design session error status

+        savePage( design );

+        return design;

+	}

+

+    /*

+     * (non-Javadoc)

+     * @see org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizardPage#collectResponseState()

+     */

+	protected void collectResponseState( )

+	{

+		super.collectResponseState( );

+		/*

+		 * To optionally assign a custom response state, for inclusion in the ODA

+		 * design session response, use 

+         *      setResponseSessionStatus( SessionStatus status );

+         *      setResponseDesignerState( DesignerState customState );

+		 */

+	}

+

+	/*

+	 * (non-Javadoc)

+	 * @see org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizardPage#canLeave()

+	 */

+	protected boolean canLeave( )

+	{

+        return isPageComplete();

+	}

+

+    /**

+     * Validates the user-defined value in the page control exists

+     * and not a blank text.

+     * Set page message accordingly.

+     */

+	private void validateData( )

+	{

+        boolean isValid = ( m_queryTextField != null &&

+            getQueryText() != null && getQueryText().trim().length() > 0 );

+

+        if( isValid )

+            setMessage( DEFAULT_MESSAGE );

+        else

+            setMessage( "Requires input value.", ERROR );

+

+		setPageComplete( isValid );

+	}

+

+	/**

+	 * Indicates whether the custom page has valid data to proceed 

+     * with defining a data set.

+	 */

+	private boolean hasValidData( )

+	{

+        validateData( );

+        

+		return canLeave();

+	}

+

+	/**

+     * Saves the user-defined value in this page, and updates the specified 

+     * dataSetDesign with the latest design definition.

+	 */

+	private void savePage( DataSetDesign dataSetDesign )

+	{

+        // save user-defined query text

+        String queryText = getQueryText();

+        dataSetDesign.setQueryText( queryText );

+

+        // obtain query's current runtime metadata, and maps it to the dataSetDesign

+        IConnection customConn = null;

+        try

+        {

+            // instantiate your custom ODA runtime driver class

+            /* Note: You may need to manually update your ODA runtime extension's

+             * plug-in manifest to export its package for visibility here.

+             */

+            IDriver customDriver = new $odaDriverClass$();

+            

+            // obtain and open a live connection

+            customConn = customDriver.getConnection( null );

+            java.util.Properties connProps = 

+                DesignSessionUtil.getEffectiveDataSourceProperties( 

+                         getInitializationDesign().getDataSourceDesign() );

+            customConn.open( connProps );

+

+            // update the data set design with the 

+            // query's current runtime metadata

+            updateDesign( dataSetDesign, customConn, queryText );

+        }

+        catch( OdaException e )

+        {

+            // not able to get current metadata, reset previous derived metadata

+            dataSetDesign.setResultSets( null );

+            dataSetDesign.setParameters( null );

+            

+            e.printStackTrace();

+        }

+        finally

+        {

+            closeConnection( customConn );

+        }

+	}

+

+    /**

+     * Updates the given dataSetDesign with the queryText and its derived metadata

+     * obtained from the ODA runtime connection.

+     */

+    private void updateDesign( DataSetDesign dataSetDesign,

+                               IConnection conn, String queryText )

+        throws OdaException

+    {

+        IQuery query = conn.newQuery( null );

+        query.prepare( queryText );

+        

+        // TODO a runtime driver might require a query to first execute before

+        // its metadata is available

+//      query.setMaxRows( 1 );

+//      query.executeQuery();

+        

+        try

+        {

+            IResultSetMetaData md = query.getMetaData();

+            updateResultSetDesign( md, dataSetDesign );

+        }

+        catch( OdaException e )

+        {

+            // no result set definition available, reset previous derived metadata

+            dataSetDesign.setResultSets( null );

+            e.printStackTrace();

+        }

+        

+        // proceed to get parameter design definition

+        try

+        {

+            IParameterMetaData paramMd = query.getParameterMetaData();

+            updateParameterDesign( paramMd, dataSetDesign );

+        }

+        catch( OdaException ex )

+        {

+            // no parameter definition available, reset previous derived metadata

+            dataSetDesign.setParameters( null );

+            ex.printStackTrace();

+        }

+        

+        /*

+         * See DesignSessionUtil for more convenience methods

+         * to define a data set design instance.  

+         */     

+    }

+

+    /**

+     * Updates the specified data set design's result set definition based on the

+     * specified runtime metadata.

+     * @param md    runtime result set metadata instance

+     * @param dataSetDesign     data set design instance to update

+     * @throws OdaException

+     */

+	private void updateResultSetDesign( IResultSetMetaData md,

+            DataSetDesign dataSetDesign ) 

+        throws OdaException

+	{

+        ResultSetColumns columns = DesignSessionUtil.toResultSetColumnsDesign( md );

+

+        ResultSetDefinition resultSetDefn = DesignFactory.eINSTANCE

+                .createResultSetDefinition();

+        // resultSetDefn.setName( value );  // result set name

+        resultSetDefn.setResultSetColumns( columns );

+

+        // no exception in conversion; go ahead and assign to specified dataSetDesign

+        dataSetDesign.setPrimaryResultSet( resultSetDefn );

+        dataSetDesign.getResultSets().setDerivedMetaData( true );

+	}

+

+    /**

+     * Updates the specified data set design's parameter definition based on the

+     * specified runtime metadata.

+     * @param paramMd   runtime parameter metadata instance

+     * @param dataSetDesign     data set design instance to update

+     * @throws OdaException

+     */

+    private void updateParameterDesign( IParameterMetaData paramMd,

+            DataSetDesign dataSetDesign ) 

+        throws OdaException

+    {

+        DataSetParameters paramDesign = 

+            DesignSessionUtil.toDataSetParametersDesign( paramMd, 

+                    DesignSessionUtil.toParameterModeDesign( IParameterMetaData.parameterModeIn ) );

+        

+        // no exception in conversion; go ahead and assign to specified dataSetDesign

+        dataSetDesign.setParameters( paramDesign );        

+        if( paramDesign == null )

+            return;     // no parameter definitions; done with update

+        

+        paramDesign.setDerivedMetaData( true );

+

+        // TODO replace below with data source specific implementation;

+        // hard-coded parameter's default value for demo purpose

+        if( paramDesign.getParameterDefinitions().size() > 0 )

+        {

+            ParameterDefinition paramDef = 

+                (ParameterDefinition) paramDesign.getParameterDefinitions().get( 0 );

+            if( paramDef != null )

+                paramDef.setDefaultScalarValue( "dummy default value" );

+        }

+    }

+

+    /**

+     * Attempts to close given ODA connection.

+     */

+    private void closeConnection( IConnection conn )

+    {

+        try

+        {

+            if( conn != null && conn.isOpen() )

+                conn.close();

+        }

+        catch ( OdaException e )

+        {

+            // ignore

+            e.printStackTrace();

+        }

+    }

+

+}

diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/designer/plugin.properties b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/designer/plugin.properties
new file mode 100644
index 0000000..1fda79e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/designer/plugin.properties
@@ -0,0 +1,19 @@
+###############################################################################

+# Copyright (c) 2014 <<Your Company Name here>>

+#

+###############################################################################

+# Plug-in Configuration

+#

+oda.data.source.id=$odaDataSourceId$

+#

+###############################################################################

+# NLS strings

+#

+plugin.name=$dataSourceName$ ODA Designer

+newwizard.name=$dataSourceName$

+newwizard.description=Create a $dataSourceName$ connection profile

+wizard.window.title=New $dataSourceName$ Profile

+wizard.data.source.page.title=$dataSourceName$

+profile.propertypage.name=$dataSourceName$ Connection Properties

+wizard.data.set.window.title=New $dataSetName$

+wizard.data.set.page.title=Query
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/runtimeDriver/java/Connection.java b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/runtimeDriver/java/Connection.java
new file mode 100644
index 0000000..762bb57
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/runtimeDriver/java/Connection.java
@@ -0,0 +1,111 @@
+/*

+ *************************************************************************

+ * Copyright (c) 2014 <<Your Company Name here>>

+ *  

+ *************************************************************************

+ */

+

+package $packageName$;

+

+import java.util.Properties;

+import org.eclipse.datatools.connectivity.oda.IConnection;

+import org.eclipse.datatools.connectivity.oda.IDataSetMetaData;

+import org.eclipse.datatools.connectivity.oda.IQuery;

+import org.eclipse.datatools.connectivity.oda.OdaException;

+import com.ibm.icu.util.ULocale;

+

+/**

+ * Implementation class of IConnection for an ODA runtime driver.

+ */

+public class Connection implements IConnection

+{

+    private boolean m_isOpen = false;

+    

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IConnection#open(java.util.Properties)

+	 */

+	public void open( Properties connProperties ) throws OdaException

+	{

+        // TODO replace with data source specific implementation

+	    m_isOpen = true;        

+ 	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IConnection#setAppContext(java.lang.Object)

+	 */

+	public void setAppContext( Object context ) throws OdaException

+	{

+	    // do nothing; assumes no support for pass-through context

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IConnection#close()

+	 */

+	public void close() throws OdaException

+	{

+        // TODO replace with data source specific implementation

+	    m_isOpen = false;

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IConnection#isOpen()

+	 */

+	public boolean isOpen() throws OdaException

+	{

+        // TODO Auto-generated method stub

+		return m_isOpen;

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IConnection#getMetaData(java.lang.String)

+	 */

+	public IDataSetMetaData getMetaData( String dataSetType ) throws OdaException

+	{

+	    // assumes that this driver supports only one type of data set,

+        // ignores the specified dataSetType

+		return new DataSetMetaData( this );

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IConnection#newQuery(java.lang.String)

+	 */

+	public IQuery newQuery( String dataSetType ) throws OdaException

+	{

+        // assumes that this driver supports only one type of data set,

+        // ignores the specified dataSetType

+		return new Query();

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IConnection#getMaxQueries()

+	 */

+	public int getMaxQueries() throws OdaException

+	{

+		return 0;	// no limit

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IConnection#commit()

+	 */

+	public void commit() throws OdaException

+	{

+	    // do nothing; assumes no transaction support needed

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IConnection#rollback()

+	 */

+	public void rollback() throws OdaException

+	{

+        // do nothing; assumes no transaction support needed

+	}

+

+    /* (non-Javadoc)

+     * @see org.eclipse.datatools.connectivity.oda.IConnection#setLocale(com.ibm.icu.util.ULocale)

+     */

+    public void setLocale( ULocale locale ) throws OdaException

+    {

+        // do nothing; assumes no locale support

+    }

+    

+}

diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/runtimeDriver/java/DataSetMetaData.java b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/runtimeDriver/java/DataSetMetaData.java
new file mode 100644
index 0000000..11f2058
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/runtimeDriver/java/DataSetMetaData.java
@@ -0,0 +1,156 @@
+/*

+ *************************************************************************

+ * Copyright (c) 2014 <<Your Company Name here>>

+ *  

+ *************************************************************************

+ */

+

+package $packageName$;

+

+import org.eclipse.datatools.connectivity.oda.IConnection;

+import org.eclipse.datatools.connectivity.oda.IDataSetMetaData;

+import org.eclipse.datatools.connectivity.oda.IResultSet;

+import org.eclipse.datatools.connectivity.oda.OdaException;

+

+/**

+ * Implementation class of IDataSetMetaData for an ODA runtime driver.

+ * <br>

+ * For demo purpose, the auto-generated method stubs have

+ * hard-coded implementation that assume this custom ODA data set

+ * is capable of handling a query that returns a single result set and 

+ * accepts scalar input parameters by index.

+ * A custom ODA driver is expected to implement own data set specific

+ * behavior in its place. 

+ */

+public class DataSetMetaData implements IDataSetMetaData

+{

+	private IConnection m_connection;

+	

+	DataSetMetaData( IConnection connection )

+	{

+		m_connection = connection;

+	}

+	

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getConnection()

+	 */

+	public IConnection getConnection() throws OdaException

+	{

+        // TODO Auto-generated method stub

+		return m_connection;

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getDataSourceObjects(java.lang.String, java.lang.String, java.lang.String, java.lang.String)

+	 */

+	public IResultSet getDataSourceObjects( String catalog, String schema, String object, String version ) throws OdaException

+	{

+	    throw new UnsupportedOperationException();

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getDataSourceMajorVersion()

+	 */

+	public int getDataSourceMajorVersion() throws OdaException

+	{

+        // TODO Auto-generated method stub

+		return 1;

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getDataSourceMinorVersion()

+	 */

+	public int getDataSourceMinorVersion() throws OdaException

+	{

+        // TODO Auto-generated method stub

+		return 0;

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getDataSourceProductName()

+	 */

+	public String getDataSourceProductName() throws OdaException

+	{

+        // TODO Auto-generated method stub

+		return "$dataSourceName$";

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getDataSourceProductVersion()

+	 */

+	public String getDataSourceProductVersion() throws OdaException

+	{

+		return Integer.toString( getDataSourceMajorVersion() ) + "." +   //$$NON-NLS-1$$

+			   Integer.toString( getDataSourceMinorVersion() );

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getSQLStateType()

+	 */

+	public int getSQLStateType() throws OdaException

+	{

+        // TODO Auto-generated method stub

+		return IDataSetMetaData.sqlStateSQL99;

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#supportsMultipleResultSets()

+	 */

+	public boolean supportsMultipleResultSets() throws OdaException

+	{

+		return false;

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#supportsMultipleOpenResults()

+	 */

+	public boolean supportsMultipleOpenResults() throws OdaException

+	{

+		return false;

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#supportsNamedResultSets()

+	 */

+	public boolean supportsNamedResultSets() throws OdaException

+	{

+		return false;

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#supportsNamedParameters()

+	 */

+	public boolean supportsNamedParameters() throws OdaException

+	{

+        // TODO Auto-generated method stub

+		return false;

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#supportsInParameters()

+	 */

+	public boolean supportsInParameters() throws OdaException

+	{

+        // TODO Auto-generated method stub

+		return true;

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#supportsOutParameters()

+	 */

+	public boolean supportsOutParameters() throws OdaException

+	{

+        // TODO Auto-generated method stub

+		return false;

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getSortMode()

+	 */

+	public int getSortMode()

+	{

+        // TODO Auto-generated method stub

+		return IDataSetMetaData.sortModeNone;

+	}

+    

+}

diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/runtimeDriver/java/Driver.java b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/runtimeDriver/java/Driver.java
new file mode 100644
index 0000000..ca82360
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/runtimeDriver/java/Driver.java
@@ -0,0 +1,88 @@
+/*

+ *************************************************************************

+ * Copyright (c) 2014 <<Your Company Name here>>

+ *  

+ *************************************************************************

+ */

+

+package $packageName$;

+

+import org.eclipse.datatools.connectivity.oda.IConnection;

+import org.eclipse.datatools.connectivity.oda.IDriver;

+import org.eclipse.datatools.connectivity.oda.LogConfiguration;

+import org.eclipse.datatools.connectivity.oda.OdaException;

+import org.eclipse.datatools.connectivity.oda.util.manifest.DataTypeMapping;

+import org.eclipse.datatools.connectivity.oda.util.manifest.ExtensionManifest;

+import org.eclipse.datatools.connectivity.oda.util.manifest.ManifestExplorer;

+

+/**

+ * Implementation class of IDriver for an ODA runtime driver.

+ */

+public class Driver implements IDriver

+{

+    static String ODA_DATA_SOURCE_ID = "$odaDataSourceId$";  //$$NON-NLS-1$$

+    

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IDriver#getConnection(java.lang.String)

+	 */

+	public IConnection getConnection( String dataSourceType ) throws OdaException

+	{

+        // assumes that this driver supports only one type of data source,

+        // ignores the specified dataSourceType

+        return new Connection();

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IDriver#setLogConfiguration(org.eclipse.datatools.connectivity.oda.LogConfiguration)

+	 */

+	public void setLogConfiguration( LogConfiguration logConfig ) throws OdaException

+	{

+		// do nothing; assumes simple driver has no logging

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IDriver#getMaxConnections()

+	 */

+	public int getMaxConnections() throws OdaException

+	{

+		return 0;	// no limit

+	}

+	

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IDriver#setAppContext(java.lang.Object)

+	 */

+	public void setAppContext( Object context ) throws OdaException

+	{

+	    // do nothing; assumes no support for pass-through context

+	}

+

+    /**

+     * Returns the object that represents this extension's manifest.

+     * @throws OdaException

+     */

+    static ExtensionManifest getManifest()

+        throws OdaException

+    {

+        return ManifestExplorer.getInstance()

+                .getExtensionManifest( ODA_DATA_SOURCE_ID );

+    }

+    

+    /**

+     * Returns the native data type name of the specified code, as

+     * defined in this data source extension's manifest.

+     * @param nativeTypeCode    the native data type code

+     * @return                  corresponding native data type name

+     * @throws OdaException     if lookup fails

+     */

+    static String getNativeDataTypeName( int nativeDataTypeCode ) 

+        throws OdaException

+    {

+        DataTypeMapping typeMapping = 

+                            getManifest().getDataSetType( null )

+                                .getDataTypeMapping( nativeDataTypeCode );

+        if( typeMapping != null )

+            return typeMapping.getNativeType();

+        return "Non-defined"; 

+    }

+

+}

diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/runtimeDriver/java/ParameterMetaData.java b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/runtimeDriver/java/ParameterMetaData.java
new file mode 100644
index 0000000..d6e1f9c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/runtimeDriver/java/ParameterMetaData.java
@@ -0,0 +1,101 @@
+/*

+ *************************************************************************

+ * Copyright (c) 2014 <<Your Company Name here>>

+ *  

+ *************************************************************************

+ */

+

+package $packageName$;

+

+import org.eclipse.datatools.connectivity.oda.IParameterMetaData;

+import org.eclipse.datatools.connectivity.oda.OdaException;

+

+/**

+ * Implementation class of IParameterMetaData for an ODA runtime driver.

+ * <br>

+ * For demo purpose, the auto-generated method stubs have

+ * hard-coded implementation that returns a pre-defined set

+ * of meta-data and query results.

+ * A custom ODA driver is expected to implement own data source specific

+ * behavior in its place. 

+ */

+public class ParameterMetaData implements IParameterMetaData 

+{

+

+	/* 

+	 * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getParameterCount()

+	 */

+	public int getParameterCount() throws OdaException 

+	{

+        // TODO replace with data source specific implementation

+

+        // hard-coded for demo purpose

+        return 1;

+	}

+

+    /*

+	 * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getParameterMode(int)

+	 */

+	public int getParameterMode( int param ) throws OdaException 

+	{

+        // TODO Auto-generated method stub

+		return IParameterMetaData.parameterModeIn;

+	}

+

+    /* (non-Javadoc)

+     * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getParameterName(int)

+     */

+    public String getParameterName( int param ) throws OdaException

+    {

+        // TODO Auto-generated method stub

+        return null;    // name is not available

+    }

+

+	/* 

+	 * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getParameterType(int)

+	 */

+	public int getParameterType( int param ) throws OdaException 

+	{

+        // TODO replace with data source specific implementation

+

+        // hard-coded for demo purpose

+        return java.sql.Types.CHAR;   // as defined in data set extension manifest

+	}

+

+	/* 

+	 * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getParameterTypeName(int)

+	 */

+	public String getParameterTypeName( int param ) throws OdaException 

+	{

+        int nativeTypeCode = getParameterType( param );

+        return Driver.getNativeDataTypeName( nativeTypeCode );

+	}

+

+	/* 

+	 * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getPrecision(int)

+	 */

+	public int getPrecision( int param ) throws OdaException 

+	{

+        // TODO Auto-generated method stub

+		return -1;

+	}

+

+	/* 

+	 * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getScale(int)

+	 */

+	public int getScale( int param ) throws OdaException 

+	{

+        // TODO Auto-generated method stub

+		return -1;

+	}

+

+	/* 

+	 * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#isNullable(int)

+	 */

+	public int isNullable( int param ) throws OdaException 

+	{

+        // TODO Auto-generated method stub

+		return IParameterMetaData.parameterNullableUnknown;

+	}

+

+}

diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/runtimeDriver/java/Query.java b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/runtimeDriver/java/Query.java
new file mode 100644
index 0000000..f39d87f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/runtimeDriver/java/Query.java
@@ -0,0 +1,381 @@
+/*

+ *************************************************************************

+ * Copyright (c) 2014 <<Your Company Name here>>

+ *  

+ *************************************************************************

+ */

+

+package $packageName$;

+

+import java.math.BigDecimal;

+import java.sql.Date;

+import java.sql.Time;

+import java.sql.Timestamp;

+import org.eclipse.datatools.connectivity.oda.IParameterMetaData;

+import org.eclipse.datatools.connectivity.oda.IResultSet;

+import org.eclipse.datatools.connectivity.oda.IResultSetMetaData;

+import org.eclipse.datatools.connectivity.oda.IQuery;

+import org.eclipse.datatools.connectivity.oda.OdaException;

+import org.eclipse.datatools.connectivity.oda.SortSpec;

+import org.eclipse.datatools.connectivity.oda.spec.QuerySpecification;

+

+/**

+ * Implementation class of IQuery for an ODA runtime driver.

+ * <br>

+ * For demo purpose, the auto-generated method stubs have

+ * hard-coded implementation that returns a pre-defined set

+ * of meta-data and query results.

+ * A custom ODA driver is expected to implement own data source specific

+ * behavior in its place. 

+ */

+public class Query implements IQuery

+{

+	private int m_maxRows;

+    private String m_preparedText;

+	

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#prepare(java.lang.String)

+	 */

+	public void prepare( String queryText ) throws OdaException

+	{

+        // TODO Auto-generated method stub

+        m_preparedText = queryText;

+	}

+	

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setAppContext(java.lang.Object)

+	 */

+	public void setAppContext( Object context ) throws OdaException

+	{

+	    // do nothing; assumes no support for pass-through context

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#close()

+	 */

+	public void close() throws OdaException

+	{

+        // TODO Auto-generated method stub

+        m_preparedText = null;

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#getMetaData()

+	 */

+	public IResultSetMetaData getMetaData() throws OdaException

+	{

+        /* TODO Auto-generated method stub

+         * Replace with implementation to return an instance 

+         * based on this prepared query.

+         */

+		return new ResultSetMetaData();

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#executeQuery()

+	 */

+	public IResultSet executeQuery() throws OdaException

+	{

+        /* TODO Auto-generated method stub

+         * Replace with implementation to return an instance 

+         * based on this prepared query.

+         */

+		IResultSet resultSet = new ResultSet();

+		resultSet.setMaxRows( getMaxRows() );

+		return resultSet;

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setProperty(java.lang.String, java.lang.String)

+	 */

+	public void setProperty( String name, String value ) throws OdaException

+	{

+		// do nothing; assumes no data set query property

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setMaxRows(int)

+	 */

+	public void setMaxRows( int max ) throws OdaException

+	{

+	    m_maxRows = max;

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#getMaxRows()

+	 */

+	public int getMaxRows() throws OdaException

+	{

+		return m_maxRows;

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#clearInParameters()

+	 */

+	public void clearInParameters() throws OdaException

+	{

+        // TODO Auto-generated method stub

+		// only applies to input parameter

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setInt(java.lang.String, int)

+	 */

+	public void setInt( String parameterName, int value ) throws OdaException

+	{

+        // TODO Auto-generated method stub

+		// only applies to named input parameter

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setInt(int, int)

+	 */

+	public void setInt( int parameterId, int value ) throws OdaException

+	{

+        // TODO Auto-generated method stub

+		// only applies to input parameter

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setDouble(java.lang.String, double)

+	 */

+	public void setDouble( String parameterName, double value ) throws OdaException

+	{

+        // TODO Auto-generated method stub

+		// only applies to named input parameter

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setDouble(int, double)

+	 */

+	public void setDouble( int parameterId, double value ) throws OdaException

+	{

+        // TODO Auto-generated method stub

+		// only applies to input parameter

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setBigDecimal(java.lang.String, java.math.BigDecimal)

+	 */

+	public void setBigDecimal( String parameterName, BigDecimal value ) throws OdaException

+	{

+        // TODO Auto-generated method stub

+		// only applies to named input parameter

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setBigDecimal(int, java.math.BigDecimal)

+	 */

+	public void setBigDecimal( int parameterId, BigDecimal value ) throws OdaException

+	{

+        // TODO Auto-generated method stub

+		// only applies to input parameter

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setString(java.lang.String, java.lang.String)

+	 */

+	public void setString( String parameterName, String value ) throws OdaException

+	{

+        // TODO Auto-generated method stub

+		// only applies to named input parameter

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setString(int, java.lang.String)

+	 */

+	public void setString( int parameterId, String value ) throws OdaException

+	{

+        // TODO Auto-generated method stub

+		// only applies to input parameter

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setDate(java.lang.String, java.sql.Date)

+	 */

+	public void setDate( String parameterName, Date value ) throws OdaException

+	{

+        // TODO Auto-generated method stub

+		// only applies to named input parameter

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setDate(int, java.sql.Date)

+	 */

+	public void setDate( int parameterId, Date value ) throws OdaException

+	{

+        // TODO Auto-generated method stub

+		// only applies to input parameter

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setTime(java.lang.String, java.sql.Time)

+	 */

+	public void setTime( String parameterName, Time value ) throws OdaException

+	{

+        // TODO Auto-generated method stub

+		// only applies to named input parameter

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setTime(int, java.sql.Time)

+	 */

+	public void setTime( int parameterId, Time value ) throws OdaException

+	{

+        // TODO Auto-generated method stub

+		// only applies to input parameter

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setTimestamp(java.lang.String, java.sql.Timestamp)

+	 */

+	public void setTimestamp( String parameterName, Timestamp value ) throws OdaException

+	{

+        // TODO Auto-generated method stub

+		// only applies to named input parameter

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setTimestamp(int, java.sql.Timestamp)

+	 */

+	public void setTimestamp( int parameterId, Timestamp value ) throws OdaException

+	{

+        // TODO Auto-generated method stub

+		// only applies to input parameter

+	}

+

+    /* (non-Javadoc)

+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setBoolean(java.lang.String, boolean)

+     */

+    public void setBoolean( String parameterName, boolean value )

+            throws OdaException

+    {

+        // TODO Auto-generated method stub

+        // only applies to named input parameter

+    }

+

+    /* (non-Javadoc)

+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setBoolean(int, boolean)

+     */

+    public void setBoolean( int parameterId, boolean value )

+            throws OdaException

+    {

+        // TODO Auto-generated method stub       

+        // only applies to input parameter

+    }

+

+    /* (non-Javadoc)

+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setObject(java.lang.String, java.lang.Object)

+     */

+    public void setObject( String parameterName, Object value )

+            throws OdaException

+    {

+        // TODO Auto-generated method stub

+        // only applies to named input parameter

+    }

+    

+    /* (non-Javadoc)

+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setObject(int, java.lang.Object)

+     */

+    public void setObject( int parameterId, Object value ) throws OdaException

+    {

+        // TODO Auto-generated method stub

+        // only applies to input parameter

+    }

+    

+    /* (non-Javadoc)

+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setNull(java.lang.String)

+     */

+    public void setNull( String parameterName ) throws OdaException

+    {

+        // TODO Auto-generated method stub

+        // only applies to named input parameter

+    }

+

+    /* (non-Javadoc)

+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setNull(int)

+     */

+    public void setNull( int parameterId ) throws OdaException

+    {

+        // TODO Auto-generated method stub

+        // only applies to input parameter

+    }

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#findInParameter(java.lang.String)

+	 */

+	public int findInParameter( String parameterName ) throws OdaException

+	{

+        // TODO Auto-generated method stub

+		// only applies to named input parameter

+		return 0;

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#getParameterMetaData()

+	 */

+	public IParameterMetaData getParameterMetaData() throws OdaException

+	{

+        /* TODO Auto-generated method stub

+         * Replace with implementation to return an instance 

+         * based on this prepared query.

+         */

+		return new ParameterMetaData();

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setSortSpec(org.eclipse.datatools.connectivity.oda.SortSpec)

+	 */

+	public void setSortSpec( SortSpec sortBy ) throws OdaException

+	{

+		// only applies to sorting, assumes not supported

+        throw new UnsupportedOperationException();

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#getSortSpec()

+	 */

+	public SortSpec getSortSpec() throws OdaException

+	{

+		// only applies to sorting

+		return null;

+	}

+

+    /* (non-Javadoc)

+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setSpecification(org.eclipse.datatools.connectivity.oda.spec.QuerySpecification)

+     */

+    public void setSpecification( QuerySpecification querySpec )

+            throws OdaException, UnsupportedOperationException

+    {

+        // assumes no support

+        throw new UnsupportedOperationException();

+    }

+

+    /* (non-Javadoc)

+     * @see org.eclipse.datatools.connectivity.oda.IQuery#getSpecification()

+     */

+    public QuerySpecification getSpecification()

+    {

+        // assumes no support

+        return null;

+    }

+

+    /* (non-Javadoc)

+     * @see org.eclipse.datatools.connectivity.oda.IQuery#getEffectiveQueryText()

+     */

+    public String getEffectiveQueryText()

+    {

+        // TODO Auto-generated method stub

+        return m_preparedText;

+    }

+

+    /* (non-Javadoc)

+     * @see org.eclipse.datatools.connectivity.oda.IQuery#cancel()

+     */

+    public void cancel() throws OdaException, UnsupportedOperationException

+    {

+        // assumes unable to cancel while executing a query

+        throw new UnsupportedOperationException();

+    }

+    

+}

diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/runtimeDriver/java/ResultSet.java b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/runtimeDriver/java/ResultSet.java
new file mode 100644
index 0000000..c4db8d1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/runtimeDriver/java/ResultSet.java
@@ -0,0 +1,327 @@
+/*

+ *************************************************************************

+ * Copyright (c) 2014 <<Your Company Name here>>

+ *  

+ *************************************************************************

+ */

+

+package $packageName$;

+

+import java.math.BigDecimal;

+import java.sql.Date;

+import java.sql.Time;

+import java.sql.Timestamp;

+

+import org.eclipse.datatools.connectivity.oda.IBlob;

+import org.eclipse.datatools.connectivity.oda.IClob;

+import org.eclipse.datatools.connectivity.oda.IResultSet;

+import org.eclipse.datatools.connectivity.oda.IResultSetMetaData;

+import org.eclipse.datatools.connectivity.oda.OdaException;

+

+/**

+ * Implementation class of IResultSet for an ODA runtime driver.

+ * <br>

+ * For demo purpose, the auto-generated method stubs have

+ * hard-coded implementation that returns a pre-defined set

+ * of meta-data and query results.

+ * A custom ODA driver is expected to implement own data source specific

+ * behavior in its place. 

+ */

+public class ResultSet implements IResultSet

+{

+	private int m_maxRows;

+    private int m_currentRowId;

+	

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getMetaData()

+	 */

+	public IResultSetMetaData getMetaData() throws OdaException

+	{

+        /* TODO Auto-generated method stub

+         * Replace with implementation to return an instance 

+         * based on this result set.

+         */

+		return new ResultSetMetaData();

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#setMaxRows(int)

+	 */

+	public void setMaxRows( int max ) throws OdaException

+	{

+		m_maxRows = max;

+	}

+	

+	/**

+	 * Returns the maximum number of rows that can be fetched from this result set.

+	 * @return the maximum number of rows to fetch.

+	 */

+	protected int getMaxRows()

+	{

+		return m_maxRows;

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#next()

+	 */

+	public boolean next() throws OdaException

+	{

+		// TODO replace with data source specific implementation

+        

+        // simple implementation done below for demo purpose only

+        int maxRows = getMaxRows();

+        if( maxRows <= 0 )  // no limit is specified

+            maxRows = 5;    // hard-coded for demo purpose

+        

+        if( m_currentRowId < maxRows )

+        {

+            m_currentRowId++;

+            return true;

+        }

+        

+        return false;        

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#close()

+	 */

+	public void close() throws OdaException

+	{

+        // TODO Auto-generated method stub       

+        m_currentRowId = 0;     // reset row counter

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getRow()

+	 */

+	public int getRow() throws OdaException

+	{

+		return m_currentRowId;

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getString(int)

+	 */

+	public String getString( int index ) throws OdaException

+	{

+        // TODO replace with data source specific implementation

+        

+        // hard-coded for demo purpose

+        return "row" + getRow() + "_column" + index + " value";

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getString(java.lang.String)

+	 */

+	public String getString( String columnName ) throws OdaException

+	{

+	    return getString( findColumn( columnName ) );

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getInt(int)

+	 */

+	public int getInt( int index ) throws OdaException

+	{

+        // TODO replace with data source specific implementation

+        

+        // hard-coded for demo purpose

+        return getRow();

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getInt(java.lang.String)

+	 */

+	public int getInt( String columnName ) throws OdaException

+	{

+	    return getInt( findColumn( columnName ) );

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getDouble(int)

+	 */

+	public double getDouble( int index ) throws OdaException

+	{

+        // TODO Auto-generated method stub

+        throw new UnsupportedOperationException();

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getDouble(java.lang.String)

+	 */

+	public double getDouble( String columnName ) throws OdaException

+	{

+	    return getDouble( findColumn( columnName ) );

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getBigDecimal(int)

+	 */

+	public BigDecimal getBigDecimal( int index ) throws OdaException

+	{

+        // TODO Auto-generated method stub

+        throw new UnsupportedOperationException();

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getBigDecimal(java.lang.String)

+	 */

+	public BigDecimal getBigDecimal( String columnName ) throws OdaException

+	{

+	    return getBigDecimal( findColumn( columnName ) );

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getDate(int)

+	 */

+	public Date getDate( int index ) throws OdaException

+	{

+        // TODO Auto-generated method stub

+        throw new UnsupportedOperationException();

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getDate(java.lang.String)

+	 */

+	public Date getDate( String columnName ) throws OdaException

+	{

+	    return getDate( findColumn( columnName ) );

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getTime(int)

+	 */

+	public Time getTime( int index ) throws OdaException

+	{

+        // TODO Auto-generated method stub

+        throw new UnsupportedOperationException();

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getTime(java.lang.String)

+	 */

+	public Time getTime( String columnName ) throws OdaException

+	{

+	    return getTime( findColumn( columnName ) );

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getTimestamp(int)

+	 */

+	public Timestamp getTimestamp( int index ) throws OdaException

+	{

+        // TODO Auto-generated method stub

+        throw new UnsupportedOperationException();

+	}

+

+	/*

+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getTimestamp(java.lang.String)

+	 */

+	public Timestamp getTimestamp( String columnName ) throws OdaException

+	{

+	    return getTimestamp( findColumn( columnName ) );

+	}

+

+    /* 

+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getBlob(int)

+     */

+    public IBlob getBlob( int index ) throws OdaException

+    {

+        // TODO Auto-generated method stub

+        throw new UnsupportedOperationException();

+    }

+

+    /* 

+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getBlob(java.lang.String)

+     */

+    public IBlob getBlob( String columnName ) throws OdaException

+    {

+        return getBlob( findColumn( columnName ) );

+    }

+

+    /* 

+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getClob(int)

+     */

+    public IClob getClob( int index ) throws OdaException

+    {

+        // TODO Auto-generated method stub

+        throw new UnsupportedOperationException();

+    }

+

+    /* 

+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getClob(java.lang.String)

+     */

+    public IClob getClob( String columnName ) throws OdaException

+    {

+        return getClob( findColumn( columnName ) );

+    }

+

+    /* (non-Javadoc)

+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getBoolean(int)

+     */

+    public boolean getBoolean( int index ) throws OdaException

+    {

+        // TODO Auto-generated method stub

+        throw new UnsupportedOperationException();

+    }

+

+    /* (non-Javadoc)

+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getBoolean(java.lang.String)

+     */

+    public boolean getBoolean( String columnName ) throws OdaException

+    {

+        return getBoolean( findColumn( columnName ) );

+    }

+    

+    /* (non-Javadoc)

+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getObject(int)

+     */

+    public Object getObject( int index ) throws OdaException

+    {

+        // TODO Auto-generated method stub

+        throw new UnsupportedOperationException();

+    }

+

+    /* (non-Javadoc)

+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getObject(java.lang.String)

+     */

+    public Object getObject( String columnName ) throws OdaException

+    {

+        return getObject( findColumn( columnName ) );

+    }

+

+    /*

+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#wasNull()

+     */

+    public boolean wasNull() throws OdaException

+    {

+        // TODO Auto-generated method stub

+        

+        // hard-coded for demo purpose

+        return false;

+    }

+

+    /*

+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#findColumn(java.lang.String)

+     */

+    public int findColumn( String columnName ) throws OdaException

+    {

+        // TODO replace with data source specific implementation

+        

+        // hard-coded for demo purpose

+        int columnId = 1;   // dummy column id

+        if( columnName == null || columnName.length() == 0 )

+            return columnId;

+        String lastChar = columnName.substring( columnName.length()-1, 1 );

+        try

+        {

+            columnId = Integer.parseInt( lastChar );

+        }

+        catch( NumberFormatException e )

+        {

+            // ignore, use dummy column id

+        }

+        return columnId;

+    }

+    

+}

diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/runtimeDriver/java/ResultSetMetaData.java b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/runtimeDriver/java/ResultSetMetaData.java
new file mode 100644
index 0000000..6fa5a59
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/runtimeDriver/java/ResultSetMetaData.java
@@ -0,0 +1,115 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2014 <<Your Company Name here>>
+ *  
+ *************************************************************************
+ */
+
+package $packageName$;
+
+import org.eclipse.datatools.connectivity.oda.IResultSetMetaData;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+/**
+ * Implementation class of IResultSetMetaData for an ODA runtime driver.
+ * <br>
+ * For demo purpose, the auto-generated method stubs have
+ * hard-coded implementation that returns a pre-defined set
+ * of meta-data and query results.
+ * A custom ODA driver is expected to implement own data source specific
+ * behavior in its place. 
+ */
+public class ResultSetMetaData implements IResultSetMetaData
+{
+    
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getColumnCount()
+	 */
+	public int getColumnCount() throws OdaException
+	{
+        // TODO replace with data source specific implementation
+
+        // hard-coded for demo purpose
+        return 2;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getColumnName(int)
+	 */
+	public String getColumnName( int index ) throws OdaException
+	{
+        // TODO replace with data source specific implementation
+
+        // hard-coded for demo purpose
+        return "Column" + index;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getColumnLabel(int)
+	 */
+	public String getColumnLabel( int index ) throws OdaException
+	{
+		return getColumnName( index );		// default
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getColumnType(int)
+	 */
+	public int getColumnType( int index ) throws OdaException
+	{
+        // TODO replace with data source specific implementation
+
+        // hard-coded for demo purpose
+        if( index == 1 )
+            return java.sql.Types.INTEGER;   // as defined in data set extension manifest
+        return java.sql.Types.CHAR;          // as defined in data set extension manifest
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getColumnTypeName(int)
+	 */
+	public String getColumnTypeName( int index ) throws OdaException
+	{
+        int nativeTypeCode = getColumnType( index );
+        return Driver.getNativeDataTypeName( nativeTypeCode );
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getColumnDisplayLength(int)
+	 */
+	public int getColumnDisplayLength( int index ) throws OdaException
+	{
+        // TODO replace with data source specific implementation
+
+        // hard-coded for demo purpose
+		return 8;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getPrecision(int)
+	 */
+	public int getPrecision( int index ) throws OdaException
+	{
+        // TODO Auto-generated method stub
+		return -1;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getScale(int)
+	 */
+	public int getScale( int index ) throws OdaException
+	{
+        // TODO Auto-generated method stub
+		return -1;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#isNullable(int)
+	 */
+	public int isNullable( int index ) throws OdaException
+	{
+        // TODO Auto-generated method stub
+		return IResultSetMetaData.columnNullableUnknown;
+	}
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/runtimeDriver/plugin.properties b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/runtimeDriver/plugin.properties
new file mode 100644
index 0000000..55fef2c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda.template.ui/templates_oda_3.0/runtimeDriver/plugin.properties
@@ -0,0 +1,16 @@
+###############################################################################

+# Copyright (c) 2014 <<Your Company Name here>>

+#

+###############################################################################

+# Plug-in Configuration

+#

+oda.data.source.id=$odaDataSourceId$

+#

+###############################################################################

+# NLS Strings

+###############################################################################

+#

+plugin.name=$dataSourceName$ ODA Runtime Driver

+data.source.name=$dataSourceName$

+data.set.name=$dataSetName$

+connection.profile.name=$dataSourceName$ Connection Profile
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/.classpath b/plugins/org.eclipse.datatools.connectivity.oda/.classpath
new file mode 100644
index 0000000..065ac06
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/.gitignore b/plugins/org.eclipse.datatools.connectivity.oda/.gitignore
new file mode 100644
index 0000000..df82495
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/.gitignore
@@ -0,0 +1,6 @@
+bin
+doc
+*.jar
+download
+v*.scc
+build*.xml
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/.project b/plugins/org.eclipse.datatools.connectivity.oda/.project
new file mode 100644
index 0000000..fb6b4f1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.oda</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.connectivity.oda/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..d5a7709
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,3 @@
+#Fri Jan 30 00:21:40 PST 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.connectivity.oda/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..74d0923
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/META-INF/MANIFEST.MF
@@ -0,0 +1,25 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: DTP Open Data Access
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.oda; singleton:=true
+Bundle-Version: 3.6.1.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: Eclipse Data Tools Platform
+Export-Package: org.eclipse.datatools.connectivity.oda,
+ org.eclipse.datatools.connectivity.oda.impl,
+ org.eclipse.datatools.connectivity.oda.spec,
+ org.eclipse.datatools.connectivity.oda.spec.basequery,
+ org.eclipse.datatools.connectivity.oda.spec.impl,
+ org.eclipse.datatools.connectivity.oda.spec.manifest,
+ org.eclipse.datatools.connectivity.oda.spec.result,
+ org.eclipse.datatools.connectivity.oda.spec.result.filter,
+ org.eclipse.datatools.connectivity.oda.spec.util,
+ org.eclipse.datatools.connectivity.oda.spec.valueexpr,
+ org.eclipse.datatools.connectivity.oda.util,
+ org.eclipse.datatools.connectivity.oda.util.logging,
+ org.eclipse.datatools.connectivity.oda.util.manifest
+Require-Bundle: org.eclipse.core.runtime;visibility:=reexport,
+ com.ibm.icu;visibility:=reexport
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
+Bundle-Activator: org.eclipse.datatools.connectivity.oda.internal.OdaPlugin
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/about.html b/plugins/org.eclipse.datatools.connectivity.oda/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/about.ini b/plugins/org.eclipse.datatools.connectivity.oda/about.ini
new file mode 100644
index 0000000..76a0356
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/about.ini
@@ -0,0 +1,27 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%blurb
+
+# Property "windowImage" contains path to window icon (16x16)
+# needed for primary features only
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=eclipse32.png
+
+# Property "aboutImage" contains path to product image (500x330 or 115x164)
+# needed for primary features only
+
+# Property "appName" contains name of the application (not translated)
+# needed for primary features only
+
+# Property "welcomePerspective" contains the id of the perspective in which the
+# welcome page is to be opened.
+# optional
+
+# Property "tipsAndTricksHref" contains the Help topic href to a tips and tricks page 
+# optional
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/about.mappings b/plugins/org.eclipse.datatools.connectivity.oda/about.mappings
new file mode 100644
index 0000000..d2aa0db
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/about.mappings
@@ -0,0 +1,6 @@
+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=@BUILD@
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/about.properties b/plugins/org.eclipse.datatools.connectivity.oda/about.properties
new file mode 100644
index 0000000..57b751a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/about.properties
@@ -0,0 +1,20 @@
+###############################################################################
+# Copyright (c) 2004, 2008 Actuate Corporation.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#  Actuate Corporation - initial API and implementation
+#     
+###############################################################################
+blurb=Eclipse Data Tools Platform Connectivity Open Data Access (ODA)\n\
+\n\
+Visit http://www.eclipse.org/datatools\n\
+\n\
+Copyright (c) 2017 Eclipse Contributors\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/build.properties b/plugins/org.eclipse.datatools.connectivity.oda/build.properties
new file mode 100644
index 0000000..02ae5c7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/build.properties
@@ -0,0 +1,17 @@
+source.. = src/

+output.. = bin/

+bin.includes = about.html,\

+               plugin.xml,\

+               .,\

+               META-INF/,\

+               about.ini,\

+               about.mappings,\

+               about.properties,\

+               eclipse32.gif,\

+               eclipse32.png,\

+               schema/

+javac.source = 1.6

+javac.target = 1.6

+javadoc.dir = doc/api/

+download.dir = ./download/

+src.includes = about.html

diff --git a/plugins/org.eclipse.datatools.connectivity.oda/eclipse32.gif b/plugins/org.eclipse.datatools.connectivity.oda/eclipse32.gif
new file mode 100644
index 0000000..811eccb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/eclipse32.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/eclipse32.png b/plugins/org.eclipse.datatools.connectivity.oda/eclipse32.png
new file mode 100644
index 0000000..568fac1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/eclipse32.png
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/plugin.xml b/plugins/org.eclipse.datatools.connectivity.oda/plugin.xml
new file mode 100644
index 0000000..0e6a16a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/plugin.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<!--
+/**
+ *************************************************************************
+ * Copyright (c) 2004, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ * $Id: plugin.xml,v 1.14 2009/01/30 00:24:03 lchan Exp $
+ */
+-->
+
+<plugin>
+     <extension-point id="dataSource" name="Open Data Access Design and Run-time Extension" schema="schema/datasource.exsd"/>
+     <extension-point id="dynamicResultSet" name="ODA Dynamic Result Set" schema="schema/dynamicResultSet.exsd"/>
+</plugin>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/schema-doc/org_eclipse_datatools_connectivity_oda_datasource.html b/plugins/org.eclipse.datatools.connectivity.oda/schema-doc/org_eclipse_datatools_connectivity_oda_datasource.html
new file mode 100644
index 0000000..65e5f00
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/schema-doc/org_eclipse_datatools_connectivity_oda_datasource.html
@@ -0,0 +1,333 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Open Data Access</title>
+<style type="text/css">@import url("file:/D:/dev/eclipse_351/plugins/org.eclipse.sdk_3.5.1.v200909170800/book.css");</style>
+<style type="text/css">@import url("file:/D:/dev/eclipse_351/configuration/org.eclipse.osgi/bundles/477/1/.cp/schema.css");</style>
+</HEAD>
+<BODY>
+<H1 style="text-align:center">Open Data Access</H1>
+<p></p>
+<h6 class="CaptionFigColumn SchemaHeader">Identifier: </h6>org.eclipse.datatools.connectivity.oda.dataSource<p></p>
+<h6 class="CaptionFigColumn SchemaHeader">Since: </h6>3.0
+<p></p>
+
+<h6 class="CaptionFigColumn SchemaHeader">Description: </h6>[API] This extension point is used to support the extension of design-time and run-time data source access by a data application.  Each extension must implement the Open Data Access (ODA) Java runtime interfaces defined in the <i>org.eclipse.datatools.connectivity.oda</i> package.<p></p>
+<h6 class="CaptionFigColumn SchemaHeader">Configuration Markup:</h6>
+<p></p>
+<p class="code SchemaDtd">&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.dataSource">dataSource</a> , <a href="#e.dataSet">dataSet</a>+)&gt;</p>
+<p class="code SchemaDtd">&lt;!ATTLIST extension</p>
+<p class="code SchemaDtdAttlist">point&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">name&nbsp;&nbsp;CDATA #IMPLIED</p>&gt;</p>
+<p></p>
+<ul class="ConfigMarkupAttlistDesc">
+</ul>
+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.dataSource">dataSource</a> (<a href="#e.traceLogging">traceLogging</a>? , <a href="#e.properties">properties</a>? , <a href="#e.relationship">relationship</a>*)&gt;</p>
+<p class="code SchemaDtd">&lt;!ATTLIST dataSource</p>
+<p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">odaVersion&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA "3.0"</p><p class="code SchemaDtdAttlist">defaultDisplayName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">driverClass&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">setThreadContextClassLoader&nbsp;(true | false) "false"</p><p class="code SchemaDtdAttlist">overrideExplorerFiltering&nbsp;&nbsp;&nbsp;(true | false) "false"</p>&gt;</p>
+<p></p>
+<p class="ConfigMarkupElementDesc">
+The definition of a type of ODA data source extension for use at design-time and run-time.</p>
+<br>
+<ul class="ConfigMarkupAttlistDesc">
+<li><b>id</b> - A fully qualified ID that uniquely identifies this ODA data source extension within an ODA consumer application's environment. If a data source designer extension (that implements <i>org.eclipse.datatools.connectivity.oda.design.ui.dataSource</i> extension point) is available for this ODA driver, the value of this attribute must match that of the designer extension's <i>id</i> attribute in its data source element.</li>
+<li><b>odaVersion</b> - Version of the ODA interfaces for which this driver is developed. This element is required and should take the format of Major.Minor or Major.Minor.Service (e.g. 3.0 or 2.0.1).</li>
+<li><b>defaultDisplayName</b> - The display name of the ODA data source extension.  Its value can be localized by using the plugin.properties mechanism.  Default to the extension id if no display name is specified.
+It can be used by an ODA consumer application's designer tool in displaying a list of ODA data source extensions, when they do not have a corresponding data source editor (data source UI extension point).</li>
+<li><b>driverClass</b> - Concrete class that implements the <i>org.eclipse.datatools.connectivity.oda.IDriver</i> interface. This is the entry point of the ODA runtime driver.  The same driver may support multiple data source extensions.</li>
+<li><b>setThreadContextClassLoader</b> - If true, the consumer of the ODA runtime extension plug-in should set the thread context class loader to the one used to load this driver before calling any ODA interface method.
+Any data source plug-in extension with this flag set to true would take precedence, and is applied to all data source extensions implemented by this plug-in. 
+<br>
+If the thread context class loader being set is the OSGi class loader that was used to load this ODA runtime plugin, it is not designed to be used by a plugin to in turn load additional classes.  If further class loading is needed, it is up to individual ODA runtime plugin implementation to provide its own URLClassLoader, and switch thread context class loader as appropriate.</li>
+<li><b>overrideExplorerFiltering</b> - Overrides the ODA extension explorer filtering behavior.  Default value is false.  If set to true, this extension is always made visible to the client even if it would have been excluded by the ODA extension explorer filtering.
+<br>@since 3.2.2 (DTP 1.7.2)</li>
+</ul>
+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.dataSet">dataSet</a> (<a href="#e.dataTypeMapping">dataTypeMapping</a>+ , <a href="#e.properties">properties</a>? , <a href="#e.relationship">relationship</a>?)&gt;</p>
+<p class="code SchemaDtd">&lt;!ATTLIST dataSet</p>
+<p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">defaultDisplayName&nbsp;CDATA #IMPLIED</p>&gt;</p>
+<p></p>
+<p class="ConfigMarkupElementDesc">
+The definition of a type of data set supported by the dataSource extension.</p>
+<br>
+<ul class="ConfigMarkupAttlistDesc">
+<li><b>id</b> - A fully qualified ID that uniquely identifies this ODA data set definition within an ODA consumer application's environment.</li>
+<li><b>defaultDisplayName</b> - The display name of the ODA data set definition.  Its value can be localized by using the plugin.properties mechanism.  Default to its id if no display name is specified.</li>
+</ul>
+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.dataTypeMapping">dataTypeMapping</a> (<a href="#e.alternativeOdaDataType">alternativeOdaDataType</a>*)&gt;</p>
+<p class="code SchemaDtd">&lt;!ATTLIST dataTypeMapping</p>
+<p class="code SchemaDtdAttlist">nativeDataType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">nativeDataTypeCode&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">odaScalarDataType&nbsp;&nbsp;(Date|Double|Integer|String|Time|Timestamp|Decimal|Blob|Clob|Boolean|JavaObject) "String"</p>&gt;</p>
+<p></p>
+<p class="ConfigMarkupElementDesc">
+A data types mapping from a data provider's native data type to one or more ODA data types.  
+Each native data type must be mapped to a primary ODA scalar data type.  The driver can optionally provide a list of alternate ODA data types to which it is capable of converting a native data type.
+This data type mapping facilitates all ODA consumers to map from the same set of ODA data types to its own application-specific data types.</p>
+<br>
+<ul class="ConfigMarkupAttlistDesc">
+<li><b>nativeDataType</b> - Native data type name (a string).  Used for information only.</li>
+<li><b>nativeDataTypeCode</b> - Native data type code (an integer). Its value must match one of the data type codes returned in the driver's ODA interface implementation.</li>
+<li><b>odaScalarDataType</b> - The primary ODA scalar data type to which the native type is mapped. Supported ODA data types are: Date, Double, Integer, String, Time, Timestamp, Decimal, Blob, Clob, Boolean and Java Object.</li>
+</ul>
+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.alternativeOdaDataType">alternativeOdaDataType</a> EMPTY&gt;</p>
+<p class="code SchemaDtd">&lt;!ATTLIST alternativeOdaDataType</p>
+<p class="code SchemaDtdAttlist">odaScalarDataType&nbsp;(Date|Double|Integer|String|Time|Timestamp|Decimal|Blob|Clob|Boolean|JavaObject) </p>&gt;</p>
+<p></p>
+<p class="ConfigMarkupElementDesc">
+Provide an alternative mapping to an ODA scalar data type.</p>
+<br>
+<ul class="ConfigMarkupAttlistDesc">
+<li><b>odaScalarDataType</b> - The ODA scalar data type to which the native type may be converted by the driver.</li>
+</ul>
+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.traceLogging">traceLogging</a> EMPTY&gt;</p>
+<p class="code SchemaDtd">&lt;!ATTLIST traceLogging</p>
+<p class="code SchemaDtdAttlist">logLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA "WARNING"</p><p class="code SchemaDtdAttlist">logFileNamePrefix&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">logDirectory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">logFormatterClass&nbsp;CDATA #IMPLIED</p>&gt;</p>
+<p></p>
+<p class="ConfigMarkupElementDesc">
+Configures the ODA run-time driver's trace logging settings for the data source extension.
+The configured values are passed through to the driver's implementation of the <code>IDriver.setLogConfiguration</code> method.
+<br>It is up to individual ODA driver on how to honor any of these trace logging attributes as appropriate.
+
+<br><br>Note: The trace logging configuration specified in the plug-in PDE .options file would take precedence over those configured in this element, if the debug tracing flag is set to "true".
+<br>The ODA plug-in's PDE tracing options, listed below for cross reference, match the attributes of this element.
+<br>&nbsp;&nbsp;&nbsp;
+&lt;plug-in Id&gt;/debug = true/false
+<br>&nbsp;&nbsp;&nbsp;
+&lt;plug-in Id&gt;/traceLogging/logLevel 
+<br>&nbsp;&nbsp;&nbsp;
+&lt;plug-in Id&gt;/traceLogging/logFileNamePrefix 
+<br>&nbsp;&nbsp;&nbsp;
+&lt;plug-in Id&gt;/traceLogging/logDirectory
+<br>&nbsp;&nbsp;&nbsp;
+&lt;plug-in Id&gt;/traceLogging/logFormatterClass</p>
+<br>
+<ul class="ConfigMarkupAttlistDesc">
+<li><b>logLevel</b> - The name or numeric value for the driver's log level.
+<br>The log levels' names and corresponding numeric values are:
+<br>
+ "SEVERE"       = 1000;
+ "WARNING"      = 900;
+ "INFO"         = 800;
+ "CONFIG"       = 700;
+ "FINE"         = 500;
+ "FINER"        = 400;
+ "FINEST"       = 300;
+ "ALL"          = 0;
+ "OFF"          = 1001 or higher .</li>
+<li><b>logFileNamePrefix</b> - A string prefix for driver's log file name.</li>
+<li><b>logDirectory</b> - Directory for log file.</li>
+<li><b>logFormatterClass</b> - The class name of a concrete log formatter, suitable for use by the driver-specific logging utility.</li>
+</ul>
+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.property">property</a> (<a href="#e.choice">choice</a>*)&gt;</p>
+<p class="code SchemaDtd">&lt;!ATTLIST property</p>
+<p class="code SchemaDtdAttlist">name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">defaultDisplayName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(string|choice) "string"</p><p class="code SchemaDtdAttlist">canInherit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(true | false) "true"</p><p class="code SchemaDtdAttlist">defaultValue&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">isEncryptable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(true | false) "false"</p><p class="code SchemaDtdAttlist">allowsEmptyValueAsNull&nbsp;(true | false) "true"</p>&gt;</p>
+<p></p>
+<p class="ConfigMarkupElementDesc">
+A property whose value can be edited at design-time using an ODA consumer application's designer tool.  Its value is then passed to the ODA runtime driver during run-time.</p>
+<br>
+<ul class="ConfigMarkupAttlistDesc">
+<li><b>name</b> - Unique name of the property.</li>
+<li><b>defaultDisplayName</b> - The default display name.  Its value can be localized by using the plugin.properties mechanism.</li>
+<li><b>type</b> - Type of the property. The property type could be one of the values listed in the Restriction enumerations.</li>
+<li><b>canInherit</b> - Reserved.</li>
+<li><b>defaultValue</b> - Default value of the property, if no property value is set.</li>
+<li><b>isEncryptable</b> - A flag indicating whether this property value is encryptable.  Setting it to "true" indicates to an ODA consumer application that this property's value should be encrypted.</li>
+<li><b>allowsEmptyValueAsNull</b> - A flag that indicates whether an empty value of this property can be treated as a null value.  Default value is true.  This attribute setting applies when an ODA consumer passes the property's value to this ODA runtime driver.  This optional attribute may be used to accommodate the case where a property value's input control does not provide the means to specify a null value.</li>
+</ul>
+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.propertyGroup">propertyGroup</a> (<a href="#e.property">property</a>+)&gt;</p>
+<p class="code SchemaDtd">&lt;!ATTLIST propertyGroup</p>
+<p class="code SchemaDtdAttlist">name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">defaultDisplayName&nbsp;CDATA #IMPLIED</p>&gt;</p>
+<p></p>
+<p class="ConfigMarkupElementDesc">
+A grouping of one or more properties in an ODA consumer application's designer tool.  The group attributes are for display only.  All properties listed under a propertyGroup are handled as scalar properties at run-time.</p>
+<br>
+<ul class="ConfigMarkupAttlistDesc">
+<li><b>name</b> - </li>
+<li><b>defaultDisplayName</b> - The default display name.  Its value can be localized by using the plugin.properties mechanism.</li>
+</ul>
+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.propertyVisibility">propertyVisibility</a> EMPTY&gt;</p>
+<p class="code SchemaDtd">&lt;!ATTLIST propertyVisibility</p>
+<p class="code SchemaDtdAttlist">name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">visibility&nbsp;(change|lock|hide) </p>&gt;</p>
+<p></p>
+<p class="ConfigMarkupElementDesc">
+Used to set the visibility level of the named property when it is shown in the property sheet of an ODA consumer application's designer tool.</p>
+<br>
+<ul class="ConfigMarkupAttlistDesc">
+<li><b>name</b> - The name of a property that is defined either by this data source extension or is a system-defined property.</li>
+<li><b>visibility</b> - The valid options are: change, hide, lock.</li>
+</ul>
+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.choice">choice</a> EMPTY&gt;</p>
+<p class="code SchemaDtd">&lt;!ATTLIST choice</p>
+<p class="code SchemaDtdAttlist">name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">value&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">defaultDisplayName&nbsp;CDATA #IMPLIED</p>&gt;</p>
+<p></p>
+<p class="ConfigMarkupElementDesc">
+Choice of property values.</p>
+<br>
+<ul class="ConfigMarkupAttlistDesc">
+<li><b>name</b> - Name of the choice</li>
+<li><b>value</b> - Value to be used, if the given choice is selected.</li>
+<li><b>defaultDisplayName</b> - The default display name.  Its value can be localized by using the plugin.properties mechanism.</li>
+</ul>
+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.properties">properties</a> (<a href="#e.property">property</a>* , <a href="#e.propertyGroup">propertyGroup</a>* , <a href="#e.propertyVisibility">propertyVisibility</a>*)&gt;</p>
+<p></p>
+<p class="ConfigMarkupElementDesc">
+A collection of property definitions in a data source extension or its supported data set definitions.</p>
+<br><br>
+<p class="code SchemaDtd">&lt;!ELEMENT <a name="e.relationship">relationship</a> EMPTY&gt;</p>
+<p class="code SchemaDtd">&lt;!ATTLIST relationship</p>
+<p class="code SchemaDtdAttlist">type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(replacedBy|wrapperOf) </p><p class="code SchemaDtdAttlist">relatedId&nbsp;CDATA #REQUIRED</p>&gt;</p>
+<p></p>
+<p class="ConfigMarkupElementDesc">
+An optional element to specify the relationship(s) of this element.</p>
+<br>
+<ul class="ConfigMarkupAttlistDesc">
+<li><b>type</b> - The type of relationship that this extension's dataSource or dataSet element has with the <i>relatedId</i> element.
+Valid value(s) are: 
+<br>* <i>replacedBy</i>: specifies that this dataSource/dataSet is deprecated and replaced by that of <i>relatedId</i>.  It is up to an ODA host to apply as appropriate, e.g. to migrate its reference of a deprecated extension, and to control which ODA extension to use at runtime.  A deprecated data source type is hidden by default from the list of data sources presented in the ODA design UI framework, such as for creating a new connection profile instance.
+<br>* <i>wrapperOf</i>: specifies that this dataSource/dataSet is a wrapper of the <i>relatedId</i> identifier.  A wrapper data source type is hidden by default from the list of available data sources presented in the ODA design UI framework. Since: 3.1.2.</li>
+<li><b>relatedId</b> - The fully qualified ID of the related ODA data source or data set element.
+Its value for a  <i>replacedBy</i> type must match that of the corresponding <i>dataSource.id</i> or <i>dataSet.id</i> attribute defined in another ODA driver's <i>org.eclipse.datatools.connectivity.oda.dataSource</i> extension.</li>
+</ul>
+<br><h6 class="CaptionFigColumn SchemaHeader">Examples: </h6><p>
+   <pre class="Example"><span class="code SchemaTag">
+   &lt;extension
+         point=</span><span class="code SchemaCstring">&quot;org.eclipse.datatools.connectivity.oda.dataSource&quot;</span><span class="code SchemaTag">&gt;
+      &lt;dataSource
+            odaVersion=</span><span class="code SchemaCstring">&quot;3.1&quot;</span><span class="code SchemaTag">
+            driverClass=</span><span class="code SchemaCstring">&quot;org.eclipse.datatools.connectivity.oda.flatfile.FlatFileDriver&quot;</span><span class="code SchemaTag">
+            defaultDisplayName=</span><span class="code SchemaCstring">&quot;Flat File Data Source&quot;</span><span class="code SchemaTag">
+            id=</span><span class="code SchemaCstring">&quot;org.eclipse.datatools.connectivity.oda.flatfile&quot;</span><span class="code SchemaTag">
+            setThreadContextClassLoader=</span><span class="code SchemaCstring">&quot;false&quot;</span><span class="code SchemaTag">&gt;
+         &lt;properties&gt;
+         &lt;propertyGroup
+               defaultDisplayName=</span><span class="code SchemaCstring">&quot;Connection Properties&quot;</span><span class="code SchemaTag">
+               name=</span><span class="code SchemaCstring">&quot;connectionProperties&quot;</span><span class="code SchemaTag">&gt;
+            &lt;property
+                  type=</span><span class="code SchemaCstring">&quot;string&quot;</span><span class="code SchemaTag">
+                  defaultDisplayName=</span><span class="code SchemaCstring">&quot;Home Folder&quot;</span><span class="code SchemaTag">
+                  canInherit=</span><span class="code SchemaCstring">&quot;true&quot;</span><span class="code SchemaTag">
+                  name=</span><span class="code SchemaCstring">&quot;HOME&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;property
+                  type=</span><span class="code SchemaCstring">&quot;string&quot;</span><span class="code SchemaTag">
+                  defaultDisplayName=</span><span class="code SchemaCstring">&quot;Character Set&quot;</span><span class="code SchemaTag">
+                  canInherit=</span><span class="code SchemaCstring">&quot;true&quot;</span><span class="code SchemaTag">
+                  name=</span><span class="code SchemaCstring">&quot;CHARSET&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;property
+                  type=</span><span class="code SchemaCstring">&quot;string&quot;</span><span class="code SchemaTag">
+                  canInherit=</span><span class="code SchemaCstring">&quot;true&quot;</span><span class="code SchemaTag">
+                  defaultDisplayName=</span><span class="code SchemaCstring">&quot;Includes Data Type (Yes/No)&quot;</span><span class="code SchemaTag">
+                  name=</span><span class="code SchemaCstring">&quot;INCLTYPELINE&quot;</span><span class="code SchemaTag">/&gt;                 
+         &lt;/propertyGroup&gt;
+         &lt;/properties&gt;
+      &lt;/dataSource&gt;
+      &lt;dataSet
+            defaultDisplayName=</span><span class="code SchemaCstring">&quot;Flat File Data Set&quot;</span><span class="code SchemaTag">
+            id=</span><span class="code SchemaCstring">&quot;org.eclipse.datatools.connectivity.oda.flatfile.dataSet&quot;</span><span class="code SchemaTag">&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;BIT&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;-7&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;Integer&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;TINYINT&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;-6&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;Integer&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;SMALLINT&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;5&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;Integer&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;INTEGER&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;4&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;Integer&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;BIGINT&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;-5&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;Decimal&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;FLOAT&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;6&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;Double&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;REAL&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;7&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;Double&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;DOUBLE&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;8&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;Double&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;NUMERIC&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;2&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;Decimal&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;DECIMAL&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;3&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;Decimal&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;CHAR&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;1&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;String&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;VARCHAR&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;12&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;String&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;LONGVARCHAR&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;-1&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;String&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;DATE&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;91&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;Date&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;TIME&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;92&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;Time&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;TIMESTAMP&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;93&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;Timestamp&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;BINARY&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;-2&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;String&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;VARBINARY&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;-3&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;String&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;LONGVARBINARY&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;-4&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;String&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;BOOLEAN&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;16&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;Boolean&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;BLOB&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;2004&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;String&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;CLOB&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;2005&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;String&quot;</span><span class="code SchemaTag">/&gt;
+      &lt;/dataSet&gt;
+   &lt;/extension&gt; 
+   </span></pre>
+</p>
+<p></p>
+
+<h6 class="CaptionFigColumn SchemaHeader">API Information: </h6>The data source extension's driver must implement the interfaces defined in the <i>org.eclipse.datatools.connectivity.oda</i> package. See the package's JavaDoc documentation and API interfaces for more information.
+<p></p>
+
+<h6 class="CaptionFigColumn SchemaHeader">Supplied Implementation: </h6>The ODA framework provides an ODA Plug-in Project Template Wizard to automatically generate a custom ODA plug-in project with a set of default implementation of the main ODA interfaces.  The wizard is available in the New->Project... dialog; one for ODA Runtime Driver, another for ODA Designer. 
+<br>
+Their generated implementation classes assume the behavior of a simple ODA driver and designer UI.  They contain TODO task tags for an ODA driver developer to implement data source specific behavior.
+These concrete classes are provided to aid in the development of a custom ODA data source.  Their use is purely optional.
+<p></p>
+
+<br>
+<p class="note SchemaCopyright">
+Copyright (c) 2004-2009 Actuate Corporation.
+All rights reserved. This program and the accompanying materials are made available under the  terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/schema-doc/org_eclipse_datatools_connectivity_oda_dynamicResultSet.html b/plugins/org.eclipse.datatools.connectivity.oda/schema-doc/org_eclipse_datatools_connectivity_oda_dynamicResultSet.html
new file mode 100644
index 0000000..6fccaeb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/schema-doc/org_eclipse_datatools_connectivity_oda_dynamicResultSet.html
@@ -0,0 +1,259 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

+<HTML>

+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

+<title>ODA Dynamic Result Set</title>

+<style type="text/css">@import url("file:/C:/dev/eclipse_platform/eclipse44m6jpkg/configuration/org.eclipse.osgi/772/0/.cp/book.css");</style>

+<style type="text/css">@import url("file:/C:/dev/eclipse_platform/eclipse44m6jpkg/configuration/org.eclipse.osgi/772/0/.cp/schema.css");</style>

+</HEAD>

+<BODY>

+<H1 style="text-align:center">ODA Dynamic Result Set</H1>

+<p></p>

+<h6 class="CaptionFigColumn SchemaHeader">Identifier: </h6>org.eclipse.datatools.connectivity.oda.dynamicResultSet<p></p>

+<h6 class="CaptionFigColumn SchemaHeader">Since: </h6>3.3 (DTP 1.8)

+<p></p>

+

+<h6 class="CaptionFigColumn SchemaHeader">Description: </h6>[API] This extension point is for declaring support of dynamic operations, such as filtering, row ordering and projection, on a result set of an ODA data source extension.<p></p>

+<h6 class="CaptionFigColumn SchemaHeader">Configuration Markup:</h6>

+<p></p>

+<p class="code SchemaDtd">&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.contributor">contributor</a> , <a href="#e.filterExpressionTypes">filterExpressionTypes</a>? , <a href="#e.aggregateExpressionTypes">aggregateExpressionTypes</a>? , <a href="#e.valueExpressionTypes">valueExpressionTypes</a>?)&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST extension</p>

+<p class="code SchemaDtdAttlist">point&nbsp;CDATA #REQUIRED</p>

+<p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p>

+<p class="code SchemaDtdAttlist">name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>

+<p></p>

+<ul class="ConfigMarkupAttlistDesc">

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.contributor">contributor</a> (<a href="#e.supportedDataSetType">supportedDataSetType</a>+ , <a href="#e.supportsRowOrdering">supportsRowOrdering</a>? , <a href="#e.supportsCombiningQueries">supportsCombiningQueries</a>?)&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST contributor</p>

+<p class="code SchemaDtdAttlist">validatorClass&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p>

+<p class="code SchemaDtdAttlist">specificationFactoryClass&nbsp;CDATA #IMPLIED&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+Defines the scope and capabilities of this extension's contributor.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>validatorClass</b> - The fully qualified name of a Java concrete class that implements the runtime validator to validate all its contributed expressions and any dynamic result set specification that may be set by an ODA consumer application. The class must be public and implement the <i>org.eclipse.datatools.connectivity.oda.spec.IValidator</i> interface with a public 0-argument constructor.</li>

+<li><b>specificationFactoryClass</b> - The fully qualified name of a Java concrete factory class that creates extended specification classes for use in an ODA extension's dynamic query specification. The class must be public and extends the <i>org.eclipse.datatools.connectivity.oda.spec.util.QuerySpecificationFactory</i> base class with a public 0-argument constructor.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.filterExpressionTypes">filterExpressionTypes</a> (<a href="#e.supportedOdaFilterExpression">supportedOdaFilterExpression</a>* , <a href="#e.filterType">filterType</a>+)&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+A grouping of supportedOdaFilterExpression and filterType elements, defining the types of filter expression supported or contributed by this extension for all its supported data set types.</p>

+<br><br>

+<p class="code SchemaDtd">&lt;!ELEMENT <a name="e.filterType">filterType</a> (<a href="#e.variableRestriction">variableRestriction</a>*)&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST filterType</p>

+<p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p>

+<p class="code SchemaDtdAttlist">displayName&nbsp;&nbsp;CDATA #IMPLIED</p>

+<p class="code SchemaDtdAttlist">description&nbsp;&nbsp;CDATA #IMPLIED</p>

+<p class="code SchemaDtdAttlist">class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p>

+<p class="code SchemaDtdAttlist">minArguments&nbsp;CDATA "1"</p>

+<p class="code SchemaDtdAttlist">maxArguments&nbsp;CDATA "*"</p>

+<p class="code SchemaDtdAttlist">isNegatable&nbsp;&nbsp;(true | false) "false"</p>

+<p class="code SchemaDtdAttlist">isOptionable&nbsp;(true | false) "false"&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+Defines a type of filter expression contributed by this extension.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>id</b> - The id that uniquely identifies this type of filter expression within the extension.</li>

+<li><b>displayName</b> - A translatable name that will be used to refer to this particular expression type in dialogs presented to the user. Default to the expression id if no name is specified.  The name should be unique within the extension.</li>

+<li><b>description</b> - A brief translatable description of this type of filter expression type.  It may be used to describe this particular expression in dialogs presented to the user.</li>

+<li><b>class</b> - The fully qualified name of a concrete implementation class of this custom filter expression. 
+<br>Must extend from the  <i>org.eclipse.datatools.connectivity.oda.spec.result.filter.CustomExpression</i> base class.  The extended class must be public with a public 0-argument constructor.</li>

+<li><b>minArguments</b> - The minimum number of arguments required by this expression type.  The value must be zero or higher integer value.</li>

+<li><b>maxArguments</b> - The maximum number of arguments required by this expression type.  It must be an integer value greater or equal to the <i>minArgments</i> value, or "*" for unbounded, i.e. no upper limit on the maximum.  The default value is  "*" for unbounded.</li>

+<li><b>isNegatable</b> - Indicates whether the expression type can be negated, i.e. applied with a NotExpression. The default value is false.</li>

+<li><b>isOptionable</b> - Indicates whether the custom expression type can be optional and skipped in a filter specification if none of its expected argument values are provided.  The default value is false.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.aggregateExpressionTypes">aggregateExpressionTypes</a> (<a href="#e.aggregateType">aggregateType</a>+)&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+A grouping of one or more aggregateType elements, defining the types of aggregate expression contributed by this extension for all its supported data set types.</p>

+<br><br>

+<p class="code SchemaDtd">&lt;!ELEMENT <a name="e.aggregateType">aggregateType</a> (<a href="#e.variableRestriction">variableRestriction</a>*)&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST aggregateType</p>

+<p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p>

+<p class="code SchemaDtdAttlist">displayName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p>

+<p class="code SchemaDtdAttlist">description&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p>

+<p class="code SchemaDtdAttlist">class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p>

+<p class="code SchemaDtdAttlist">minInputVariables&nbsp;&nbsp;&nbsp;CDATA "1"</p>

+<p class="code SchemaDtdAttlist">maxInputVariables&nbsp;&nbsp;&nbsp;CDATA "1"</p>

+<p class="code SchemaDtdAttlist">canIgnoreDuplicates&nbsp;(true | false) "false"</p>

+<p class="code SchemaDtdAttlist">canIgnoreNull&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(true | false) "false"&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+Defines a type of aggregate expression contributed by this extension.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>id</b> - The id that uniquely identifies this aggregate type within the extension.</li>

+<li><b>displayName</b> - A translatable name that will be used to refer to this particular aggregate expression type in dialogs presented to the user. Default to the expression id if no name is specified.  The name should be unique within the extension.</li>

+<li><b>description</b> - A brief translatable description of this type of aggregate.  It may be used to describe this particular aggregate type in dialogs presented to the user.</li>

+<li><b>class</b> - The fully qualified name of a concrete implementation class of this custom aggregate type 
+<br>Must extend from the  <i>org.eclipse.datatools.connectivity.oda.spec.result.CustomAggregate</i> base class.  The extended class must be public with a public 0-argument constructor.</li>

+<li><b>minInputVariables</b> - The minimum number of input source variables required by this aggregate expression type.  The value must be zero or higher integer value.  The default value is  "1".</li>

+<li><b>maxInputVariables</b> - The maximum number of input source variables required by this aggregate expression type.  It must be an integer value greater or equal to the <i>minInputVariables</i> value, or "*" for unbounded, i.e. no upper limit on the maximum.  The default value is  "1".</li>

+<li><b>canIgnoreDuplicates</b> - Indicates whether the aggregate type is capable of ignoring duplicate values of its input source variable. The default value is false.</li>

+<li><b>canIgnoreNull</b> - Indicates whether the aggregate type is capable of ignoring null values of its input source variable. The default value is false.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.variableRestriction">variableRestriction</a> ((<a href="#e.variableOdaDataTypeRestriction">variableOdaDataTypeRestriction</a> | <a href="#e.variableClassRestriction">variableClassRestriction</a>))*&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST variableRestriction</p>

+<p class="code SchemaDtdAttlist">variableType&nbsp;(ResultSetColumn|InstanceOf|QueryExpression) "ResultSetColumn"&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+Restriction on the type of variables that can be applied with the expression.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>variableType</b> - The type of variables that can be applied with the associated expression.  The ResultSetColumn variable type is applied as the default restriction, if none is specified.  A QueryExpression variable type is a superset that covers any value expression types including a ResultSetColumn reference.
+Further restriction on a type of variable, such as the data types, may be defined by its type-specific variable restriction element. No further restrictions exist if none is specified.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.variableOdaDataTypeRestriction">variableOdaDataTypeRestriction</a> EMPTY&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST variableOdaDataTypeRestriction</p>

+<p class="code SchemaDtdAttlist">odaScalarDataType&nbsp;(String|Integer|Double|Decimal|Date|Time|Timestamp|Boolean|Blob|Clob|JavaObject) &gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+The restriction on the ODA data types of a variable that can be applied with this expression.  For example, a string pattern matching expression would restrict its use with a string-typed variable.
+An expression has no data type restriction if none is specified.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>odaScalarDataType</b> - A compatible data type of the target variable.  It is used to restrict the data type of variables that can be applied with this expression type.   For example, a pattern matching expression may only be applicable to a variable of the String data type.
+It must be an ODA scalar data type supported by the ODA data source provider, as defined in its datasource extension's dataSet.dataTypeMapping.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.variableClassRestriction">variableClassRestriction</a> EMPTY&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST variableClassRestriction</p>

+<p class="code SchemaDtdAttlist">class&nbsp;CDATA #REQUIRED&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+The restriction on the type of instance variables that can be applied with this expression.  
+An expression has no restriction on the type of instance variable if none is specified.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>class</b> - The concrete class name of an instance variable.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.supportedDataSetType">supportedDataSetType</a> EMPTY&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST supportedDataSetType</p>

+<p class="code SchemaDtdAttlist">odaDataSourceId&nbsp;CDATA #REQUIRED</p>

+<p class="code SchemaDtdAttlist">odaDataSetId&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+The ODA data set type to which this extension contributes filtering support.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>odaDataSourceId</b> - A fully qualified id that uniquely identifies the ODA data source type to which this extension contributes filtering support.  
+Its value must match the <i>dataSource.id</i> attribute value defined in the  <i>org.eclipse.datatools.connectivity.oda.dataSource</i> extension of the supported ODA runtime driver.</li>

+<li><b>odaDataSetId</b> - An id that uniquely identifies the ODA data set type within the supported data source type, whose id is specified in the odaDataSourceId attribute.  
+Its value must match the <i>dataSet.id</i> attribute value defined within the <i>org.eclipse.datatools.connectivity.oda.dataSource</i> extension of the supported ODA runtime driver.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.supportedOdaFilterExpression">supportedOdaFilterExpression</a> EMPTY&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST supportedOdaFilterExpression</p>

+<p class="code SchemaDtdAttlist">name&nbsp;(AndExpression|OrExpression|NotExpression) &gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+The type of ODA composite filter expression supported by the extension for all its supported data set types.  It must be one of the built-in concrete filter expressions pre-defined by the ODA filter framework.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>name</b> - </li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.supportsRowOrdering">supportsRowOrdering</a> EMPTY&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST supportsRowOrdering</p>

+<p class="code SchemaDtdAttlist">nullValueOrdering&nbsp;(true | false) &gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+Indicates this extension contributes dynamic row ordering of its result sets for all its supported data set types.  Absence of this element indicates no support.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>nullValueOrdering</b> - Indicates whether this row ordering support can also handle ordering of null vs. non-null values in the row order. The default value is false for no control over null value ordering.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.supportsCombiningQueries">supportsCombiningQueries</a> (#PCDATA)&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+Indicates this extension contributes dynamic operation that combines two or more queries for all its supported data set types.  Absence of this element indicates no support.
+@since 3.4 (DTP 1.11)</p>

+<br><br>

+<p class="code SchemaDtd">&lt;!ELEMENT <a name="e.valueExpressionTypes">valueExpressionTypes</a> (<a href="#e.combinedOperatorTypes">combinedOperatorTypes</a>? , <a href="#e.functionExpressionType">functionExpressionType</a>*)&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST valueExpressionTypes</p>

+<p class="code SchemaDtdAttlist">supportsNestedExpressions&nbsp;(true | false) &gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+A grouping of value expression type elements, defining the types of value expression supported and contributed by this extension for all its supported data set types.  An extension must implement support of the simple and column value expression types. Support of complex expression types is optional and declared in this element.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>supportsNestedExpressions</b> - Indicates whether this extension supports handling of nested value expression type.  The default value is false for no support.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.combinedOperatorTypes">combinedOperatorTypes</a> (<a href="#e.supportedOdaCombinedOperator">supportedOdaCombinedOperator</a>* , <a href="#e.combinedOperatorType">combinedOperatorType</a>*)&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+A grouping of supportedOdaCombinedOperator and combinedOperatorType elements, defining the types of expression combined operator supported or contributed by this extension for all its supported data set types.</p>

+<br><br>

+<p class="code SchemaDtd">&lt;!ELEMENT <a name="e.supportedOdaCombinedOperator">supportedOdaCombinedOperator</a> EMPTY&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST supportedOdaCombinedOperator</p>

+<p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;(Add|Subtract|Multiply|Divide|Concatenate) </p>

+<p class="code SchemaDtdAttlist">class&nbsp;CDATA #IMPLIED&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+The type of ODA value expression combined operator supported by the extension for all its supported data set types.  It must be one of the built-in CombinedValueExpressionOperator types pre-defined by the ODA framework.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>id</b> - The id of an ODA built-in combined operator for combining 2 value expressions.</li>

+<li><b>class</b> - The fully qualified name of a concrete implementation class that extends this built-in combined operator.
+<br>The class must extend the  <i>org.eclipse.datatools.connectivity.oda.spec.valueexpr.CombinedValueExpressionOperator</i> base class.  The extended class must be public with a public 0-argument constructor.  Defaults to the built-in operator class.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.combinedOperatorType">combinedOperatorType</a> EMPTY&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST combinedOperatorType</p>

+<p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p>

+<p class="code SchemaDtdAttlist">displayName&nbsp;CDATA #IMPLIED</p>

+<p class="code SchemaDtdAttlist">literal&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p>

+<p class="code SchemaDtdAttlist">class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+Defines a type of custom combined operator contributed by this extension.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>id</b> - The id that uniquely identifies this type of combined operator within the extension.</li>

+<li><b>displayName</b> - A translatable name that will be used to refer to this particular combined operator type in dialogs presented to the user. Default to the operator id if no name is specified.  The display name should be unique within the extension.</li>

+<li><b>literal</b> - The default literal representation of this custom combined operator.</li>

+<li><b>class</b> - The fully qualified name of a concrete implementation class of this custom combined operator. 
+<br>Must extend from the  <i>org.eclipse.datatools.connectivity.oda.spec.valueexpr.CombinedValueExpressionOperator</i> base class.  The extended class must be public with a public 0-argument constructor.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.functionExpressionType">functionExpressionType</a> (<a href="#e.variableRestriction">variableRestriction</a>*)&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST functionExpressionType</p>

+<p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p>

+<p class="code SchemaDtdAttlist">name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p>

+<p class="code SchemaDtdAttlist">displayName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p>

+<p class="code SchemaDtdAttlist">description&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p>

+<p class="code SchemaDtdAttlist">class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p>

+<p class="code SchemaDtdAttlist">minArguments&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA "1"</p>

+<p class="code SchemaDtdAttlist">maxArguments&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA "1"</p>

+<p class="code SchemaDtdAttlist">canIgnoreDuplicates&nbsp;(true | false) "false"&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+Defines a type of custom function value expression contributed by this extension.  
+Its variableRestriction sub-element defines the type of expression variable that can be associated with this function type.  The precise data types of the function argument(s) and return value are implementation-specific.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>id</b> - The id that uniquely identifies this type of function value expression within the extension.</li>

+<li><b>name</b> - The expression name of this function type.  Default to the function id if no name is specified.  
+The name should be unique within the extension.</li>

+<li><b>displayName</b> - A translatable name that will be used to refer to this particular function expression type in dialogs presented to the user. Default to the function name if no display name is specified.  The display name should be unique within the extension.</li>

+<li><b>description</b> - A brief translatable description of this type of function expression.  It may be used to describe this particular function type in dialogs presented to the user.</li>

+<li><b>class</b> - The fully qualified name of a concrete implementation class of this custom function type.
+<br>Must extend from the  <i>org.eclipse.datatools.connectivity.oda.spec.valueexpr.CustomFunction</i> base class.  The extended class must be public with a public 0-argument constructor.</li>

+<li><b>minArguments</b> - The minimum number of arguments required by this function type.  The value must be zero or higher integer value.  The default value is  "1".</li>

+<li><b>maxArguments</b> - The maximum number of arguments required by this function type.  It must be an integer value greater or equal to the <i>minArgments</i> value, or "*" for unbounded, i.e. no upper limit on the maximum. The default value is  "1".</li>

+<li><b>canIgnoreDuplicates</b> - Indicates whether this function type is capable of ignoring duplicate values of its input variable. The default value is false.</li>

+</ul>

+<br><h6 class="CaptionFigColumn SchemaHeader">API Information: </h6>See the Java interfaces and classes in the org.eclipse.datatools.connectivity.oda.spec package and its sub-packages.

+<p></p>

+

+<h6 class="CaptionFigColumn SchemaHeader">Supplied Implementation: </h6>A sample implementation of this extension point can be found in the
+<i>org.eclipse.datatools.connectivity.oda.consumer.testdriver</i> project 
+in DTP Connectivity Git repository under the org.eclipse.datatools.connectivity/tests/ folder.

+<p></p>

+

+<br>

+<p class="note SchemaCopyright">

+Copyright (c) 2009, 2014 Actuate Corporation.
+All rights reserved. This program and the accompanying materials are made available under the  terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html

+

+</p>

+</BODY>

+</HTML>

diff --git a/plugins/org.eclipse.datatools.connectivity.oda/schema/datasource.exsd b/plugins/org.eclipse.datatools.connectivity.oda/schema/datasource.exsd
new file mode 100644
index 0000000..47c275b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/schema/datasource.exsd
@@ -0,0 +1,702 @@
+<?xml version='1.0' encoding='UTF-8'?>

+<!-- Schema file written by PDE -->

+<schema targetNamespace="org.eclipse.datatools.connectivity.oda" xmlns="http://www.w3.org/2001/XMLSchema">

+<annotation>

+      <appInfo>

+         <meta.schema plugin="org.eclipse.datatools.connectivity.oda" id="dataSource" name="Open Data Access"/>

+      </appInfo>

+      <documentation>

+         [API] This extension point is used to support the extension of design-time and run-time data source access by a data application.  Each extension must implement the Open Data Access (ODA) Java runtime interfaces defined in the &lt;i&gt;org.eclipse.datatools.connectivity.oda&lt;/i&gt; package.

+      </documentation>

+   </annotation>

+

+   <element name="extension">

+      <annotation>

+         <appInfo>

+            <meta.element />

+         </appInfo>

+      </annotation>

+      <complexType>

+         <sequence>

+            <element ref="dataSource"/>

+            <element ref="dataSet" minOccurs="1" maxOccurs="unbounded"/>

+         </sequence>

+         <attribute name="point" type="string" use="required">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="id" type="string">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="name" type="string">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="dataSource">

+      <annotation>

+         <documentation>

+            The definition of a type of ODA data source extension for use at design-time and run-time.

+         </documentation>

+      </annotation>

+      <complexType>

+         <sequence>

+            <element ref="traceLogging" minOccurs="0" maxOccurs="1"/>

+            <element ref="properties" minOccurs="0" maxOccurs="1"/>

+            <element ref="relationship" minOccurs="0" maxOccurs="unbounded"/>

+         </sequence>

+         <attribute name="id" type="string" use="required">

+            <annotation>

+               <documentation>

+                  A fully qualified ID that uniquely identifies this ODA data source extension within an ODA consumer application&apos;s environment. If a data source designer extension (that implements &lt;i&gt;org.eclipse.datatools.connectivity.oda.design.ui.dataSource&lt;/i&gt; extension point) is available for this ODA driver, the value of this attribute must match that of the designer extension&apos;s &lt;i&gt;id&lt;/i&gt; attribute in its data source element.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="odaVersion" type="string" use="default" value="3.0">

+            <annotation>

+               <documentation>

+                  Version of the ODA interfaces for which this driver is developed. This element is required and should take the format of Major.Minor or Major.Minor.Service (e.g. 3.0 or 2.0.1).

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="defaultDisplayName" type="string">

+            <annotation>

+               <documentation>

+                  The display name of the ODA data source extension.  Its value can be localized by using the plugin.properties mechanism.  Default to the extension id if no display name is specified.

+It can be used by an ODA consumer application&apos;s designer tool in displaying a list of ODA data source extensions, when they do not have a corresponding data source editor (data source UI extension point).

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="driverClass" type="string" use="required">

+            <annotation>

+               <documentation>

+                  Concrete class that implements the &lt;i&gt;org.eclipse.datatools.connectivity.oda.IDriver&lt;/i&gt; interface. This is the entry point of the ODA runtime driver.  The same driver may support multiple data source extensions.

+               </documentation>

+               <appInfo>

+                  <meta.attribute kind="java" basedOn="org.eclipse.datatools.connectivity.oda.IDriver"/>

+               </appInfo>

+            </annotation>

+         </attribute>

+         <attribute name="setThreadContextClassLoader" type="boolean" use="default" value="false">

+            <annotation>

+               <documentation>

+                  If true, the consumer of the ODA runtime extension plug-in should set the thread context class loader to the one used to load this driver before calling any ODA interface method.

+Any data source plug-in extension with this flag set to true would take precedence, and is applied to all data source extensions implemented by this plug-in. 

+&lt;br&gt;

+If the thread context class loader being set is the OSGi class loader that was used to load this ODA runtime plugin, it is not designed to be used by a plugin to in turn load additional classes.  If further class loading is needed, it is up to individual ODA runtime plugin implementation to provide its own URLClassLoader, and switch thread context class loader as appropriate.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="overrideExplorerFiltering" type="boolean" use="default" value="false">

+            <annotation>

+               <documentation>

+                  Overrides the ODA extension explorer filtering behavior.  Default value is false.  If set to true, this extension is always made visible to the client even if it would have been excluded by the ODA extension explorer filtering.

+&lt;br&gt;@since 3.2.2 (DTP 1.7.2)

+               </documentation>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="dataSet">

+      <annotation>

+         <documentation>

+            The definition of a type of data set supported by the dataSource extension.

+         </documentation>

+      </annotation>

+      <complexType>

+         <sequence>

+            <element ref="dataTypeMapping" minOccurs="1" maxOccurs="unbounded"/>

+            <element ref="properties" minOccurs="0" maxOccurs="1"/>

+            <element ref="relationship" minOccurs="0" maxOccurs="1"/>

+         </sequence>

+         <attribute name="id" type="string" use="required">

+            <annotation>

+               <documentation>

+                  A fully qualified ID that uniquely identifies this ODA data set definition within an ODA consumer application&apos;s environment.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="defaultDisplayName" type="string">

+            <annotation>

+               <documentation>

+                  The display name of the ODA data set definition.  Its value can be localized by using the plugin.properties mechanism.  Default to its id if no display name is specified.

+               </documentation>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="dataTypeMapping">

+      <annotation>

+         <documentation>

+            A data types mapping from a data provider&apos;s native data type to one or more ODA data types.  

+Each native data type must be mapped to a primary ODA scalar data type.  The driver can optionally provide a list of alternate ODA data types to which it is capable of converting a native data type.

+This data type mapping facilitates all ODA consumers to map from the same set of ODA data types to its own application-specific data types.

+         </documentation>

+      </annotation>

+      <complexType>

+         <sequence>

+            <element ref="alternativeOdaDataType" minOccurs="0" maxOccurs="unbounded"/>

+         </sequence>

+         <attribute name="nativeDataType" type="string">

+            <annotation>

+               <documentation>

+                  Native data type name (a string).  Used for information only.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="nativeDataTypeCode" type="string" use="required">

+            <annotation>

+               <documentation>

+                  Native data type code (an integer). Its value must match one of the data type codes returned in the driver&apos;s ODA interface implementation.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="odaScalarDataType" use="default" value="String">

+            <annotation>

+               <documentation>

+                  The primary ODA scalar data type to which the native type is mapped. Supported ODA data types are: Date, Double, Integer, String, Time, Timestamp, Decimal, Blob, Clob, Boolean and Java Object.

+               </documentation>

+            </annotation>

+            <simpleType>

+               <restriction base="string">

+                  <enumeration value="Date">

+                  </enumeration>

+                  <enumeration value="Double">

+                  </enumeration>

+                  <enumeration value="Integer">

+                  </enumeration>

+                  <enumeration value="String">

+                  </enumeration>

+                  <enumeration value="Time">

+                  </enumeration>

+                  <enumeration value="Timestamp">

+                  </enumeration>

+                  <enumeration value="Decimal">

+                  </enumeration>

+                  <enumeration value="Blob">

+                  </enumeration>

+                  <enumeration value="Clob">

+                  </enumeration>

+                  <enumeration value="Boolean">

+                  </enumeration>

+                  <enumeration value="JavaObject">

+                  </enumeration>

+               </restriction>

+            </simpleType>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="alternativeOdaDataType">

+      <annotation>

+         <documentation>

+            Provide an alternative mapping to an ODA scalar data type.

+         </documentation>

+      </annotation>

+      <complexType>

+         <attribute name="odaScalarDataType" use="required">

+            <annotation>

+               <documentation>

+                  The ODA scalar data type to which the native type may be converted by the driver.

+               </documentation>

+            </annotation>

+            <simpleType>

+               <restriction base="string">

+                  <enumeration value="Date">

+                  </enumeration>

+                  <enumeration value="Double">

+                  </enumeration>

+                  <enumeration value="Integer">

+                  </enumeration>

+                  <enumeration value="String">

+                  </enumeration>

+                  <enumeration value="Time">

+                  </enumeration>

+                  <enumeration value="Timestamp">

+                  </enumeration>

+                  <enumeration value="Decimal">

+                  </enumeration>

+                  <enumeration value="Blob">

+                  </enumeration>

+                  <enumeration value="Clob">

+                  </enumeration>

+                  <enumeration value="Boolean">

+                  </enumeration>

+                  <enumeration value="JavaObject">

+                  </enumeration>

+               </restriction>

+            </simpleType>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="traceLogging">

+      <annotation>

+         <documentation>

+            Configures the ODA run-time driver&apos;s trace logging settings for the data source extension.

+The configured values are passed through to the driver&apos;s implementation of the &lt;code&gt;IDriver.setLogConfiguration&lt;/code&gt; method.

+&lt;br&gt;It is up to individual ODA driver on how to honor any of these trace logging attributes as appropriate.

+

+&lt;br&gt;&lt;br&gt;Note: The trace logging configuration specified in the plug-in PDE .options file would take precedence over those configured in this element, if the debug tracing flag is set to &quot;true&quot;.

+&lt;br&gt;The ODA plug-in&apos;s PDE tracing options, listed below for cross reference, match the attributes of this element.

+&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;

+&amp;lt;plug-in Id&amp;gt;/debug = true/false

+&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;

+&amp;lt;plug-in Id&amp;gt;/traceLogging/logLevel 

+&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;

+&amp;lt;plug-in Id&amp;gt;/traceLogging/logFileNamePrefix 

+&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;

+&amp;lt;plug-in Id&amp;gt;/traceLogging/logDirectory

+&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;

+&amp;lt;plug-in Id&amp;gt;/traceLogging/logFormatterClass

+         </documentation>

+      </annotation>

+      <complexType>

+         <attribute name="logLevel" type="string" use="default" value="WARNING">

+            <annotation>

+               <documentation>

+                  The name or numeric value for the driver&apos;s log level.

+&lt;br&gt;The log levels&apos; names and corresponding numeric values are:

+&lt;br&gt;

+ &quot;SEVERE&quot;       = 1000;

+ &quot;WARNING&quot;      = 900;

+ &quot;INFO&quot;         = 800;

+ &quot;CONFIG&quot;       = 700;

+ &quot;FINE&quot;         = 500;

+ &quot;FINER&quot;        = 400;

+ &quot;FINEST&quot;       = 300;

+ &quot;ALL&quot;          = 0;

+ &quot;OFF&quot;          = 1001 or higher .

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="logFileNamePrefix" type="string">

+            <annotation>

+               <documentation>

+                  A string prefix for driver&apos;s log file name.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="logDirectory" type="string">

+            <annotation>

+               <documentation>

+                  Directory for log file.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="logFormatterClass" type="string">

+            <annotation>

+               <documentation>

+                  The class name of a concrete log formatter, suitable for use by the driver-specific logging utility.

+               </documentation>

+               <appInfo>

+                  <meta.attribute kind="java"/>

+               </appInfo>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="property">

+      <annotation>

+         <documentation>

+            A property whose value can be edited at design-time using an ODA consumer application&apos;s designer tool.  Its value is then passed to the ODA runtime driver during run-time.

+         </documentation>

+      </annotation>

+      <complexType>

+         <sequence>

+            <element ref="choice" minOccurs="0" maxOccurs="unbounded"/>

+         </sequence>

+         <attribute name="name" type="string" use="required">

+            <annotation>

+               <documentation>

+                  Unique name of the property.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="defaultDisplayName" type="string">

+            <annotation>

+               <documentation>

+                  The default display name.  Its value can be localized by using the plugin.properties mechanism.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="type" use="default" value="string">

+            <annotation>

+               <documentation>

+                  Type of the property. The property type could be one of the values listed in the Restriction enumerations.

+               </documentation>

+            </annotation>

+            <simpleType>

+               <restriction base="string">

+                  <enumeration value="string">

+                  </enumeration>

+                  <enumeration value="choice">

+                  </enumeration>

+               </restriction>

+            </simpleType>

+         </attribute>

+         <attribute name="canInherit" type="boolean" use="default" value="true">

+            <annotation>

+               <documentation>

+                  Reserved.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="defaultValue" type="string">

+            <annotation>

+               <documentation>

+                  Default value of the property, if no property value is set.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="isEncryptable" type="boolean" use="default" value="false">

+            <annotation>

+               <documentation>

+                  A flag indicating whether this property value is encryptable.  Setting it to &quot;true&quot; indicates to an ODA consumer application that this property&apos;s value should be encrypted.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="allowsEmptyValueAsNull" type="boolean" use="default" value="true">

+            <annotation>

+               <documentation>

+                  A flag that indicates whether an empty value of this property can be treated as a null value.  Default value is true.  This attribute setting applies when an ODA consumer passes the property&apos;s value to this ODA runtime driver.  This optional attribute may be used to accommodate the case where a property value&apos;s input control does not provide the means to specify a null value.

+               </documentation>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="propertyGroup">

+      <annotation>

+         <documentation>

+            A grouping of one or more properties in an ODA consumer application&apos;s designer tool.  The group attributes are for display only.  All properties listed under a propertyGroup are handled as scalar properties at run-time.

+         </documentation>

+      </annotation>

+      <complexType>

+         <sequence>

+            <element ref="property" minOccurs="1" maxOccurs="unbounded"/>

+         </sequence>

+         <attribute name="name" type="string" use="required">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="defaultDisplayName" type="string">

+            <annotation>

+               <documentation>

+                  The default display name.  Its value can be localized by using the plugin.properties mechanism.

+               </documentation>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="propertyVisibility">

+      <annotation>

+         <documentation>

+            Used to set the visibility level of the named property when it is shown in the property sheet of an ODA consumer application&apos;s designer tool.

+         </documentation>

+      </annotation>

+      <complexType>

+         <attribute name="name" type="string" use="required">

+            <annotation>

+               <documentation>

+                  The name of a property that is defined either by this data source extension or is a system-defined property.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="visibility">

+            <annotation>

+               <documentation>

+                  The valid options are: change, hide, lock.

+               </documentation>

+            </annotation>

+            <simpleType>

+               <restriction base="string">

+                  <enumeration value="change">

+                  </enumeration>

+                  <enumeration value="lock">

+                  </enumeration>

+                  <enumeration value="hide">

+                  </enumeration>

+               </restriction>

+            </simpleType>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="choice">

+      <annotation>

+         <documentation>

+            Choice of property values.

+         </documentation>

+      </annotation>

+      <complexType>

+         <attribute name="name" type="string" use="required">

+            <annotation>

+               <documentation>

+                  Name of the choice

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="value" type="string">

+            <annotation>

+               <documentation>

+                  Value to be used, if the given choice is selected.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="defaultDisplayName" type="string">

+            <annotation>

+               <documentation>

+                  The default display name.  Its value can be localized by using the plugin.properties mechanism.

+               </documentation>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="properties">

+      <annotation>

+         <documentation>

+            A collection of property definitions in a data source extension or its supported data set definitions.

+         </documentation>

+      </annotation>

+      <complexType>

+         <sequence>

+            <element ref="property" minOccurs="0" maxOccurs="unbounded"/>

+            <element ref="propertyGroup" minOccurs="0" maxOccurs="unbounded"/>

+            <element ref="propertyVisibility" minOccurs="0" maxOccurs="unbounded"/>

+         </sequence>

+      </complexType>

+   </element>

+

+   <element name="relationship">

+      <annotation>

+         <documentation>

+            An optional element to specify the relationship(s) of this element.

+         </documentation>

+      </annotation>

+      <complexType>

+         <attribute name="type" use="required">

+            <annotation>

+               <documentation>

+                  The type of relationship that this extension&apos;s dataSource or dataSet element has with the &lt;i&gt;relatedId&lt;/i&gt; element.

+Valid value(s) are: 

+&lt;br&gt;* &lt;i&gt;replacedBy&lt;/i&gt;: specifies that this dataSource/dataSet is deprecated and replaced by that of &lt;i&gt;relatedId&lt;/i&gt;.  It is up to an ODA host to apply as appropriate, e.g. to migrate its reference of a deprecated extension, and to control which ODA extension to use at runtime.  A deprecated data source type is hidden by default from the list of data sources presented in the ODA design UI framework, such as for creating a new connection profile instance.

+&lt;br&gt;* &lt;i&gt;wrapperOf&lt;/i&gt;: specifies that this dataSource/dataSet is a wrapper of the &lt;i&gt;relatedId&lt;/i&gt; identifier.  A wrapper data source type is hidden by default from the list of available data sources presented in the ODA design UI framework. Since: 3.1.2.

+               </documentation>

+            </annotation>

+            <simpleType>

+               <restriction base="string">

+                  <enumeration value="replacedBy">

+                  </enumeration>

+                  <enumeration value="wrapperOf">

+                  </enumeration>

+               </restriction>

+            </simpleType>

+         </attribute>

+         <attribute name="relatedId" type="string" use="required">

+            <annotation>

+               <documentation>

+                  The fully qualified ID of the related ODA data source or data set element.

+Its value for a  &lt;i&gt;replacedBy&lt;/i&gt; type must match that of the corresponding &lt;i&gt;dataSource.id&lt;/i&gt; or &lt;i&gt;dataSet.id&lt;/i&gt; attribute defined in another ODA driver&apos;s &lt;i&gt;org.eclipse.datatools.connectivity.oda.dataSource&lt;/i&gt; extension.

+               </documentation>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="since"/>

+      </appInfo>

+      <documentation>

+         3.0

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="examples"/>

+      </appInfo>

+      <documentation>

+         &lt;p&gt;

+   &lt;pre&gt;

+   &lt;extension

+         point=&quot;org.eclipse.datatools.connectivity.oda.dataSource&quot;&gt;

+      &lt;dataSource

+            odaVersion=&quot;3.1&quot;

+            driverClass=&quot;org.eclipse.datatools.connectivity.oda.flatfile.FlatFileDriver&quot;

+            defaultDisplayName=&quot;Flat File Data Source&quot;

+            id=&quot;org.eclipse.datatools.connectivity.oda.flatfile&quot;

+            setThreadContextClassLoader=&quot;false&quot;&gt;

+         &lt;properties&gt;

+         &lt;propertyGroup

+               defaultDisplayName=&quot;Connection Properties&quot;

+               name=&quot;connectionProperties&quot;&gt;

+            &lt;property

+                  type=&quot;string&quot;

+                  defaultDisplayName=&quot;Home Folder&quot;

+                  canInherit=&quot;true&quot;

+                  name=&quot;HOME&quot;/&gt;

+            &lt;property

+                  type=&quot;string&quot;

+                  defaultDisplayName=&quot;Character Set&quot;

+                  canInherit=&quot;true&quot;

+                  name=&quot;CHARSET&quot;/&gt;

+            &lt;property

+                  type=&quot;string&quot;

+                  canInherit=&quot;true&quot;

+                  defaultDisplayName=&quot;Includes Data Type (Yes/No)&quot;

+                  name=&quot;INCLTYPELINE&quot;/&gt;                 

+         &lt;/propertyGroup&gt;

+         &lt;/properties&gt;

+      &lt;/dataSource&gt;

+      &lt;dataSet

+            defaultDisplayName=&quot;Flat File Data Set&quot;

+            id=&quot;org.eclipse.datatools.connectivity.oda.flatfile.dataSet&quot;&gt;

+            &lt;dataTypeMapping

+                  nativeDataType=&quot;BIT&quot;

+                  nativeDataTypeCode=&quot;-7&quot;

+                  odaScalarDataType=&quot;Integer&quot;/&gt;

+            &lt;dataTypeMapping

+                  nativeDataType=&quot;TINYINT&quot;

+                  nativeDataTypeCode=&quot;-6&quot;

+                  odaScalarDataType=&quot;Integer&quot;/&gt;

+            &lt;dataTypeMapping

+                  nativeDataType=&quot;SMALLINT&quot;

+                  nativeDataTypeCode=&quot;5&quot;

+                  odaScalarDataType=&quot;Integer&quot;/&gt;

+            &lt;dataTypeMapping

+                  nativeDataType=&quot;INTEGER&quot;

+                  nativeDataTypeCode=&quot;4&quot;

+                  odaScalarDataType=&quot;Integer&quot;/&gt;

+            &lt;dataTypeMapping

+                  nativeDataType=&quot;BIGINT&quot;

+                  nativeDataTypeCode=&quot;-5&quot;

+                  odaScalarDataType=&quot;Decimal&quot;/&gt;

+            &lt;dataTypeMapping

+                  nativeDataType=&quot;FLOAT&quot;

+                  nativeDataTypeCode=&quot;6&quot;

+                  odaScalarDataType=&quot;Double&quot;/&gt;

+            &lt;dataTypeMapping

+                  nativeDataType=&quot;REAL&quot;

+                  nativeDataTypeCode=&quot;7&quot;

+                  odaScalarDataType=&quot;Double&quot;/&gt;

+            &lt;dataTypeMapping

+                  nativeDataType=&quot;DOUBLE&quot;

+                  nativeDataTypeCode=&quot;8&quot;

+                  odaScalarDataType=&quot;Double&quot;/&gt;

+            &lt;dataTypeMapping

+                  nativeDataType=&quot;NUMERIC&quot;

+                  nativeDataTypeCode=&quot;2&quot;

+                  odaScalarDataType=&quot;Decimal&quot;/&gt;

+            &lt;dataTypeMapping

+                  nativeDataType=&quot;DECIMAL&quot;

+                  nativeDataTypeCode=&quot;3&quot;

+                  odaScalarDataType=&quot;Decimal&quot;/&gt;

+            &lt;dataTypeMapping

+                  nativeDataType=&quot;CHAR&quot;

+                  nativeDataTypeCode=&quot;1&quot;

+                  odaScalarDataType=&quot;String&quot;/&gt;

+            &lt;dataTypeMapping

+                  nativeDataType=&quot;VARCHAR&quot;

+                  nativeDataTypeCode=&quot;12&quot;

+                  odaScalarDataType=&quot;String&quot;/&gt;

+            &lt;dataTypeMapping

+                  nativeDataType=&quot;LONGVARCHAR&quot;

+                  nativeDataTypeCode=&quot;-1&quot;

+                  odaScalarDataType=&quot;String&quot;/&gt;

+            &lt;dataTypeMapping

+                  nativeDataType=&quot;DATE&quot;

+                  nativeDataTypeCode=&quot;91&quot;

+                  odaScalarDataType=&quot;Date&quot;/&gt;

+            &lt;dataTypeMapping

+                  nativeDataType=&quot;TIME&quot;

+                  nativeDataTypeCode=&quot;92&quot;

+                  odaScalarDataType=&quot;Time&quot;/&gt;

+            &lt;dataTypeMapping

+                  nativeDataType=&quot;TIMESTAMP&quot;

+                  nativeDataTypeCode=&quot;93&quot;

+                  odaScalarDataType=&quot;Timestamp&quot;/&gt;

+            &lt;dataTypeMapping

+                  nativeDataType=&quot;BINARY&quot;

+                  nativeDataTypeCode=&quot;-2&quot;

+                  odaScalarDataType=&quot;String&quot;/&gt;

+            &lt;dataTypeMapping

+                  nativeDataType=&quot;VARBINARY&quot;

+                  nativeDataTypeCode=&quot;-3&quot;

+                  odaScalarDataType=&quot;String&quot;/&gt;

+            &lt;dataTypeMapping

+                  nativeDataType=&quot;LONGVARBINARY&quot;

+                  nativeDataTypeCode=&quot;-4&quot;

+                  odaScalarDataType=&quot;String&quot;/&gt;

+            &lt;dataTypeMapping

+                  nativeDataType=&quot;BOOLEAN&quot;

+                  nativeDataTypeCode=&quot;16&quot;

+                  odaScalarDataType=&quot;Boolean&quot;/&gt;

+            &lt;dataTypeMapping

+                  nativeDataType=&quot;BLOB&quot;

+                  nativeDataTypeCode=&quot;2004&quot;

+                  odaScalarDataType=&quot;String&quot;/&gt;

+            &lt;dataTypeMapping

+                  nativeDataType=&quot;CLOB&quot;

+                  nativeDataTypeCode=&quot;2005&quot;

+                  odaScalarDataType=&quot;String&quot;/&gt;

+      &lt;/dataSet&gt;

+   &lt;/extension&gt; 

+   &lt;/pre&gt;

+&lt;/p&gt;

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="apiInfo"/>

+      </appInfo>

+      <documentation>

+         The data source extension&apos;s driver must implement the interfaces defined in the &lt;i&gt;org.eclipse.datatools.connectivity.oda&lt;/i&gt; package. See the package&apos;s JavaDoc documentation and API interfaces for more information.

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="implementation"/>

+      </appInfo>

+      <documentation>

+         The ODA framework provides an ODA Plug-in Project Template Wizard to automatically generate a custom ODA plug-in project with a set of default implementation of the main ODA interfaces.  The wizard is available in the New-&gt;Project... dialog; one for ODA Runtime Driver, another for ODA Designer. 

+&lt;br&gt;

+Their generated implementation classes assume the behavior of a simple ODA driver and designer UI.  They contain TODO task tags for an ODA driver developer to implement data source specific behavior.

+These concrete classes are provided to aid in the development of a custom ODA data source.  Their use is purely optional.

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="copyright"/>

+      </appInfo>

+      <documentation>

+         Copyright (c) 2004-2009 Actuate Corporation.

+All rights reserved. This program and the accompanying materials are made available under the  terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html

+      </documentation>

+   </annotation>

+

+</schema>

diff --git a/plugins/org.eclipse.datatools.connectivity.oda/schema/dynamicResultSet.exsd b/plugins/org.eclipse.datatools.connectivity.oda/schema/dynamicResultSet.exsd
new file mode 100644
index 0000000..29f5826
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/schema/dynamicResultSet.exsd
@@ -0,0 +1,692 @@
+<?xml version='1.0' encoding='UTF-8'?>

+<!-- Schema file written by PDE -->

+<schema targetNamespace="org.eclipse.datatools.connectivity.oda" xmlns="http://www.w3.org/2001/XMLSchema">

+<annotation>

+      <appInfo>

+         <meta.schema plugin="org.eclipse.datatools.connectivity.oda" id="dynamicResultSet" name="ODA Dynamic Result Set"/>

+      </appInfo>

+      <documentation>

+         [API] This extension point is for declaring support of dynamic operations, such as filtering, row ordering and projection, on a result set of an ODA data source extension.

+      </documentation>

+   </annotation>

+

+   <element name="extension">

+      <annotation>

+         <appInfo>

+            <meta.element />

+         </appInfo>

+      </annotation>

+      <complexType>

+         <sequence>

+            <element ref="contributor"/>

+            <element ref="filterExpressionTypes" minOccurs="0" maxOccurs="1"/>

+            <element ref="aggregateExpressionTypes" minOccurs="0" maxOccurs="1"/>

+            <element ref="valueExpressionTypes" minOccurs="0" maxOccurs="1"/>

+         </sequence>

+         <attribute name="point" type="string" use="required">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="id" type="string" use="required">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="name" type="string">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+               <appInfo>

+                  <meta.attribute translatable="true"/>

+               </appInfo>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="contributor">

+      <annotation>

+         <documentation>

+            Defines the scope and capabilities of this extension&apos;s contributor.

+         </documentation>

+      </annotation>

+      <complexType>

+         <sequence>

+            <element ref="supportedDataSetType" minOccurs="1" maxOccurs="unbounded"/>

+            <element ref="supportsRowOrdering" minOccurs="0" maxOccurs="1"/>

+            <element ref="supportsCombiningQueries" minOccurs="0" maxOccurs="1"/>

+         </sequence>

+         <attribute name="validatorClass" type="string">

+            <annotation>

+               <documentation>

+                  The fully qualified name of a Java concrete class that implements the runtime validator to validate all its contributed expressions and any dynamic result set specification that may be set by an ODA consumer application. The class must be public and implement the &lt;i&gt;org.eclipse.datatools.connectivity.oda.spec.IValidator&lt;/i&gt; interface with a public 0-argument constructor.

+               </documentation>

+               <appInfo>

+                  <meta.attribute kind="java" basedOn="org.eclipse.datatools.connectivity.oda.spec.impl.ValidatorBaseImpl:org.eclipse.datatools.connectivity.oda.spec.IValidator"/>

+               </appInfo>

+            </annotation>

+         </attribute>

+         <attribute name="specificationFactoryClass" type="string">

+            <annotation>

+               <documentation>

+                  The fully qualified name of a Java concrete factory class that creates extended specification classes for use in an ODA extension&apos;s dynamic query specification. The class must be public and extends the &lt;i&gt;org.eclipse.datatools.connectivity.oda.spec.util.QuerySpecificationFactory&lt;/i&gt; base class with a public 0-argument constructor.

+               </documentation>

+               <appInfo>

+                  <meta.attribute kind="java" basedOn="org.eclipse.datatools.connectivity.oda.spec.util.QuerySpecificationFactory:"/>

+               </appInfo>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="filterExpressionTypes">

+      <annotation>

+         <documentation>

+            A grouping of supportedOdaFilterExpression and filterType elements, defining the types of filter expression supported or contributed by this extension for all its supported data set types.

+         </documentation>

+      </annotation>

+      <complexType>

+         <sequence>

+            <element ref="supportedOdaFilterExpression" minOccurs="0" maxOccurs="unbounded"/>

+            <element ref="filterType" minOccurs="1" maxOccurs="unbounded"/>

+         </sequence>

+      </complexType>

+   </element>

+

+   <element name="filterType">

+      <annotation>

+         <documentation>

+            Defines a type of filter expression contributed by this extension.

+         </documentation>

+      </annotation>

+      <complexType>

+         <sequence>

+            <element ref="variableRestriction" minOccurs="0" maxOccurs="unbounded"/>

+         </sequence>

+         <attribute name="id" type="string" use="required">

+            <annotation>

+               <documentation>

+                  The id that uniquely identifies this type of filter expression within the extension.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="displayName" type="string">

+            <annotation>

+               <documentation>

+                  A translatable name that will be used to refer to this particular expression type in dialogs presented to the user. Default to the expression id if no name is specified.  The name should be unique within the extension.

+               </documentation>

+               <appInfo>

+                  <meta.attribute translatable="true"/>

+               </appInfo>

+            </annotation>

+         </attribute>

+         <attribute name="description" type="string">

+            <annotation>

+               <documentation>

+                  A brief translatable description of this type of filter expression type.  It may be used to describe this particular expression in dialogs presented to the user.

+               </documentation>

+               <appInfo>

+                  <meta.attribute translatable="true"/>

+               </appInfo>

+            </annotation>

+         </attribute>

+         <attribute name="class" type="string">

+            <annotation>

+               <documentation>

+                  The fully qualified name of a concrete implementation class of this custom filter expression. 

+&lt;br&gt;Must extend from the  &lt;i&gt;org.eclipse.datatools.connectivity.oda.spec.result.filter.CustomExpression&lt;/i&gt; base class.  The extended class must be public with a public 0-argument constructor.

+               </documentation>

+               <appInfo>

+                  <meta.attribute kind="java" basedOn="org.eclipse.datatools.connectivity.oda.spec.result.filter.CustomExpression:"/>

+               </appInfo>

+            </annotation>

+         </attribute>

+         <attribute name="minArguments" type="string" use="default" value="1">

+            <annotation>

+               <documentation>

+                  The minimum number of arguments required by this expression type.  The value must be zero or higher integer value.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="maxArguments" type="string" use="default" value="*">

+            <annotation>

+               <documentation>

+                  The maximum number of arguments required by this expression type.  It must be an integer value greater or equal to the &lt;i&gt;minArgments&lt;/i&gt; value, or &quot;*&quot; for unbounded, i.e. no upper limit on the maximum.  The default value is  &quot;*&quot; for unbounded.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="isNegatable" type="boolean" use="default" value="false">

+            <annotation>

+               <documentation>

+                  Indicates whether the expression type can be negated, i.e. applied with a NotExpression. The default value is false.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="isOptionable" type="boolean" use="default" value="false">

+            <annotation>

+               <documentation>

+                  Indicates whether the custom expression type can be optional and skipped in a filter specification if none of its expected argument values are provided.  The default value is false.

+               </documentation>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="aggregateExpressionTypes">

+      <annotation>

+         <documentation>

+            A grouping of one or more aggregateType elements, defining the types of aggregate expression contributed by this extension for all its supported data set types.

+         </documentation>

+      </annotation>

+      <complexType>

+         <sequence>

+            <element ref="aggregateType" minOccurs="1" maxOccurs="unbounded"/>

+         </sequence>

+      </complexType>

+   </element>

+

+   <element name="aggregateType">

+      <annotation>

+         <documentation>

+            Defines a type of aggregate expression contributed by this extension.

+         </documentation>

+      </annotation>

+      <complexType>

+         <sequence>

+            <element ref="variableRestriction" minOccurs="0" maxOccurs="unbounded"/>

+         </sequence>

+         <attribute name="id" type="string" use="required">

+            <annotation>

+               <documentation>

+                  The id that uniquely identifies this aggregate type within the extension.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="displayName" type="string">

+            <annotation>

+               <documentation>

+                  A translatable name that will be used to refer to this particular aggregate expression type in dialogs presented to the user. Default to the expression id if no name is specified.  The name should be unique within the extension.

+               </documentation>

+               <appInfo>

+                  <meta.attribute translatable="true"/>

+               </appInfo>

+            </annotation>

+         </attribute>

+         <attribute name="description" type="string">

+            <annotation>

+               <documentation>

+                  A brief translatable description of this type of aggregate.  It may be used to describe this particular aggregate type in dialogs presented to the user.

+               </documentation>

+               <appInfo>

+                  <meta.attribute translatable="true"/>

+               </appInfo>

+            </annotation>

+         </attribute>

+         <attribute name="class" type="string">

+            <annotation>

+               <documentation>

+                  The fully qualified name of a concrete implementation class of this custom aggregate type 

+&lt;br&gt;Must extend from the  &lt;i&gt;org.eclipse.datatools.connectivity.oda.spec.result.CustomAggregate&lt;/i&gt; base class.  The extended class must be public with a public 0-argument constructor.

+               </documentation>

+               <appInfo>

+                  <meta.attribute kind="java" basedOn="org.eclipse.datatools.connectivity.oda.spec.result.CustomAggregate:"/>

+               </appInfo>

+            </annotation>

+         </attribute>

+         <attribute name="minInputVariables" type="string" use="default" value="1">

+            <annotation>

+               <documentation>

+                  The minimum number of input source variables required by this aggregate expression type.  The value must be zero or higher integer value.  The default value is  &quot;1&quot;.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="maxInputVariables" type="string" use="default" value="1">

+            <annotation>

+               <documentation>

+                  The maximum number of input source variables required by this aggregate expression type.  It must be an integer value greater or equal to the &lt;i&gt;minInputVariables&lt;/i&gt; value, or &quot;*&quot; for unbounded, i.e. no upper limit on the maximum.  The default value is  &quot;1&quot;.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="canIgnoreDuplicates" type="boolean" use="default" value="false">

+            <annotation>

+               <documentation>

+                  Indicates whether the aggregate type is capable of ignoring duplicate values of its input source variable. The default value is false.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="canIgnoreNull" type="boolean" use="default" value="false">

+            <annotation>

+               <documentation>

+                  Indicates whether the aggregate type is capable of ignoring null values of its input source variable. The default value is false.

+               </documentation>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="variableRestriction">

+      <annotation>

+         <documentation>

+            Restriction on the type of variables that can be applied with the expression.

+         </documentation>

+      </annotation>

+      <complexType>

+         <sequence minOccurs="0" maxOccurs="unbounded">

+            <choice>

+               <element ref="variableOdaDataTypeRestriction"/>

+               <element ref="variableClassRestriction"/>

+            </choice>

+         </sequence>

+         <attribute name="variableType" use="default" value="ResultSetColumn">

+            <annotation>

+               <documentation>

+                  The type of variables that can be applied with the associated expression.  The ResultSetColumn variable type is applied as the default restriction, if none is specified.  A QueryExpression variable type is a superset that covers any value expression types including a ResultSetColumn reference.

+Further restriction on a type of variable, such as the data types, may be defined by its type-specific variable restriction element. No further restrictions exist if none is specified.

+               </documentation>

+            </annotation>

+            <simpleType>

+               <restriction base="string">

+                  <enumeration value="ResultSetColumn">

+                  </enumeration>

+                  <enumeration value="InstanceOf">

+                  </enumeration>

+                  <enumeration value="QueryExpression">

+                  </enumeration>

+               </restriction>

+            </simpleType>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="variableOdaDataTypeRestriction">

+      <annotation>

+         <documentation>

+            The restriction on the ODA data types of a variable that can be applied with this expression.  For example, a string pattern matching expression would restrict its use with a string-typed variable.

+An expression has no data type restriction if none is specified.

+         </documentation>

+      </annotation>

+      <complexType>

+         <attribute name="odaScalarDataType" use="required">

+            <annotation>

+               <documentation>

+                  A compatible data type of the target variable.  It is used to restrict the data type of variables that can be applied with this expression type.   For example, a pattern matching expression may only be applicable to a variable of the String data type.

+It must be an ODA scalar data type supported by the ODA data source provider, as defined in its datasource extension&apos;s dataSet.dataTypeMapping.

+               </documentation>

+            </annotation>

+            <simpleType>

+               <restriction base="string">

+                  <enumeration value="String">

+                  </enumeration>

+                  <enumeration value="Integer">

+                  </enumeration>

+                  <enumeration value="Double">

+                  </enumeration>

+                  <enumeration value="Decimal">

+                  </enumeration>

+                  <enumeration value="Date">

+                  </enumeration>

+                  <enumeration value="Time">

+                  </enumeration>

+                  <enumeration value="Timestamp">

+                  </enumeration>

+                  <enumeration value="Boolean">

+                  </enumeration>

+                  <enumeration value="Blob">

+                  </enumeration>

+                  <enumeration value="Clob">

+                  </enumeration>

+                  <enumeration value="JavaObject">

+                  </enumeration>

+               </restriction>

+            </simpleType>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="variableClassRestriction">

+      <annotation>

+         <documentation>

+            The restriction on the type of instance variables that can be applied with this expression.  

+An expression has no restriction on the type of instance variable if none is specified.

+         </documentation>

+      </annotation>

+      <complexType>

+         <attribute name="class" type="string" use="required">

+            <annotation>

+               <documentation>

+                  The concrete class name of an instance variable.

+               </documentation>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="supportedDataSetType">

+      <annotation>

+         <documentation>

+            The ODA data set type to which this extension contributes filtering support.

+         </documentation>

+      </annotation>

+      <complexType>

+         <attribute name="odaDataSourceId" type="string" use="required">

+            <annotation>

+               <documentation>

+                  A fully qualified id that uniquely identifies the ODA data source type to which this extension contributes filtering support.  

+Its value must match the &lt;i&gt;dataSource.id&lt;/i&gt; attribute value defined in the  &lt;i&gt;org.eclipse.datatools.connectivity.oda.dataSource&lt;/i&gt; extension of the supported ODA runtime driver.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="odaDataSetId" type="string" use="required">

+            <annotation>

+               <documentation>

+                  An id that uniquely identifies the ODA data set type within the supported data source type, whose id is specified in the odaDataSourceId attribute.  

+Its value must match the &lt;i&gt;dataSet.id&lt;/i&gt; attribute value defined within the &lt;i&gt;org.eclipse.datatools.connectivity.oda.dataSource&lt;/i&gt; extension of the supported ODA runtime driver.

+               </documentation>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="supportedOdaFilterExpression">

+      <annotation>

+         <documentation>

+            The type of ODA composite filter expression supported by the extension for all its supported data set types.  It must be one of the built-in concrete filter expressions pre-defined by the ODA filter framework.

+         </documentation>

+      </annotation>

+      <complexType>

+         <attribute name="name" use="required">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+            </annotation>

+            <simpleType>

+               <restriction base="string">

+                  <enumeration value="AndExpression">

+                  </enumeration>

+                  <enumeration value="OrExpression">

+                  </enumeration>

+                  <enumeration value="NotExpression">

+                  </enumeration>

+               </restriction>

+            </simpleType>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="supportsRowOrdering">

+      <annotation>

+         <documentation>

+            Indicates this extension contributes dynamic row ordering of its result sets for all its supported data set types.  Absence of this element indicates no support.

+         </documentation>

+      </annotation>

+      <complexType>

+         <attribute name="nullValueOrdering" type="boolean">

+            <annotation>

+               <documentation>

+                  Indicates whether this row ordering support can also handle ordering of null vs. non-null values in the row order. The default value is false for no control over null value ordering.

+               </documentation>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="supportsCombiningQueries" type="string">

+      <annotation>

+         <documentation>

+            Indicates this extension contributes dynamic operation that combines two or more queries for all its supported data set types.  Absence of this element indicates no support.

+@since 3.4 (DTP 1.11)

+         </documentation>

+      </annotation>

+   </element>

+

+   <element name="valueExpressionTypes">

+      <annotation>

+         <documentation>

+            A grouping of value expression type elements, defining the types of value expression supported and contributed by this extension for all its supported data set types.  An extension must implement support of the simple and column value expression types. Support of complex expression types is optional and declared in this element.

+         </documentation>

+      </annotation>

+      <complexType>

+         <sequence>

+            <element ref="combinedOperatorTypes" minOccurs="0" maxOccurs="1"/>

+            <element ref="functionExpressionType" minOccurs="0" maxOccurs="unbounded"/>

+         </sequence>

+         <attribute name="supportsNestedExpressions" type="boolean">

+            <annotation>

+               <documentation>

+                  Indicates whether this extension supports handling of nested value expression type.  The default value is false for no support.

+               </documentation>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="combinedOperatorTypes">

+      <annotation>

+         <documentation>

+            A grouping of supportedOdaCombinedOperator and combinedOperatorType elements, defining the types of expression combined operator supported or contributed by this extension for all its supported data set types.

+         </documentation>

+      </annotation>

+      <complexType>

+         <sequence>

+            <element ref="supportedOdaCombinedOperator" minOccurs="0" maxOccurs="unbounded"/>

+            <element ref="combinedOperatorType" minOccurs="0" maxOccurs="unbounded"/>

+         </sequence>

+      </complexType>

+   </element>

+

+   <element name="supportedOdaCombinedOperator">

+      <annotation>

+         <documentation>

+            The type of ODA value expression combined operator supported by the extension for all its supported data set types.  It must be one of the built-in CombinedValueExpressionOperator types pre-defined by the ODA framework.

+         </documentation>

+      </annotation>

+      <complexType>

+         <attribute name="id" use="required">

+            <annotation>

+               <documentation>

+                  The id of an ODA built-in combined operator for combining 2 value expressions.

+               </documentation>

+            </annotation>

+            <simpleType>

+               <restriction base="string">

+                  <enumeration value="Add">

+                  </enumeration>

+                  <enumeration value="Subtract">

+                  </enumeration>

+                  <enumeration value="Multiply">

+                  </enumeration>

+                  <enumeration value="Divide">

+                  </enumeration>

+                  <enumeration value="Concatenate">

+                  </enumeration>

+               </restriction>

+            </simpleType>

+         </attribute>

+         <attribute name="class" type="string">

+            <annotation>

+               <documentation>

+                  The fully qualified name of a concrete implementation class that extends this built-in combined operator.

+&lt;br&gt;The class must extend the  &lt;i&gt;org.eclipse.datatools.connectivity.oda.spec.valueexpr.CombinedValueExpressionOperator&lt;/i&gt; base class.  The extended class must be public with a public 0-argument constructor.  Defaults to the built-in operator class.

+               </documentation>

+               <appInfo>

+                  <meta.attribute kind="java" basedOn="org.eclipse.datatools.connectivity.oda.spec.valueexpr.CombinedValueExpressionOperator:"/>

+               </appInfo>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="combinedOperatorType">

+      <annotation>

+         <documentation>

+            Defines a type of custom combined operator contributed by this extension.

+         </documentation>

+      </annotation>

+      <complexType>

+         <attribute name="id" type="string" use="required">

+            <annotation>

+               <documentation>

+                  The id that uniquely identifies this type of combined operator within the extension.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="displayName" type="string">

+            <annotation>

+               <documentation>

+                  A translatable name that will be used to refer to this particular combined operator type in dialogs presented to the user. Default to the operator id if no name is specified.  The display name should be unique within the extension.

+               </documentation>

+               <appInfo>

+                  <meta.attribute translatable="true"/>

+               </appInfo>

+            </annotation>

+         </attribute>

+         <attribute name="literal" type="string" use="required">

+            <annotation>

+               <documentation>

+                  The default literal representation of this custom combined operator.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="class" type="string">

+            <annotation>

+               <documentation>

+                  The fully qualified name of a concrete implementation class of this custom combined operator. 

+&lt;br&gt;Must extend from the  &lt;i&gt;org.eclipse.datatools.connectivity.oda.spec.valueexpr.CombinedValueExpressionOperator&lt;/i&gt; base class.  The extended class must be public with a public 0-argument constructor.

+               </documentation>

+               <appInfo>

+                  <meta.attribute kind="java" basedOn="org.eclipse.datatools.connectivity.oda.spec.valueexpr.CombinedValueExpressionOperator:"/>

+               </appInfo>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="functionExpressionType">

+      <annotation>

+         <documentation>

+            Defines a type of custom function value expression contributed by this extension.  

+Its variableRestriction sub-element defines the type of expression variable that can be associated with this function type.  The precise data types of the function argument(s) and return value are implementation-specific.

+         </documentation>

+      </annotation>

+      <complexType>

+         <sequence>

+            <element ref="variableRestriction" minOccurs="0" maxOccurs="unbounded"/>

+         </sequence>

+         <attribute name="id" type="string" use="required">

+            <annotation>

+               <documentation>

+                  The id that uniquely identifies this type of function value expression within the extension.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="name" type="string">

+            <annotation>

+               <documentation>

+                  The expression name of this function type.  Default to the function id if no name is specified.  

+The name should be unique within the extension.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="displayName" type="string">

+            <annotation>

+               <documentation>

+                  A translatable name that will be used to refer to this particular function expression type in dialogs presented to the user. Default to the function name if no display name is specified.  The display name should be unique within the extension.

+               </documentation>

+               <appInfo>

+                  <meta.attribute translatable="true"/>

+               </appInfo>

+            </annotation>

+         </attribute>

+         <attribute name="description" type="string">

+            <annotation>

+               <documentation>

+                  A brief translatable description of this type of function expression.  It may be used to describe this particular function type in dialogs presented to the user.

+               </documentation>

+               <appInfo>

+                  <meta.attribute translatable="true"/>

+               </appInfo>

+            </annotation>

+         </attribute>

+         <attribute name="class" type="string">

+            <annotation>

+               <documentation>

+                  The fully qualified name of a concrete implementation class of this custom function type.

+&lt;br&gt;Must extend from the  &lt;i&gt;org.eclipse.datatools.connectivity.oda.spec.valueexpr.CustomFunction&lt;/i&gt; base class.  The extended class must be public with a public 0-argument constructor.

+               </documentation>

+               <appInfo>

+                  <meta.attribute kind="java" basedOn="org.eclipse.datatools.connectivity.oda.spec.valueexpr.CustomFunction:"/>

+               </appInfo>

+            </annotation>

+         </attribute>

+         <attribute name="minArguments" type="string" use="default" value="1">

+            <annotation>

+               <documentation>

+                  The minimum number of arguments required by this function type.  The value must be zero or higher integer value.  The default value is  &quot;1&quot;.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="maxArguments" type="string" use="default" value="1">

+            <annotation>

+               <documentation>

+                  The maximum number of arguments required by this function type.  It must be an integer value greater or equal to the &lt;i&gt;minArgments&lt;/i&gt; value, or &quot;*&quot; for unbounded, i.e. no upper limit on the maximum. The default value is  &quot;1&quot;.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="canIgnoreDuplicates" type="boolean" use="default" value="false">

+            <annotation>

+               <documentation>

+                  Indicates whether this function type is capable of ignoring duplicate values of its input variable. The default value is false.

+               </documentation>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="since"/>

+      </appInfo>

+      <documentation>

+         3.3 (DTP 1.8)

+      </documentation>

+   </annotation>

+

+

+   <annotation>

+      <appInfo>

+         <meta.section type="apiinfo"/>

+      </appInfo>

+      <documentation>

+         See the Java interfaces and classes in the org.eclipse.datatools.connectivity.oda.spec package and its sub-packages.

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="implementation"/>

+      </appInfo>

+      <documentation>

+         A sample implementation of this extension point can be found in the

+&lt;i&gt;org.eclipse.datatools.connectivity.oda.consumer.testdriver&lt;/i&gt; project 

+in DTP Connectivity Git repository under the org.eclipse.datatools.connectivity/tests/ folder.

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="copyright"/>

+      </appInfo>

+      <documentation>

+         Copyright (c) 2009, 2014 Actuate Corporation.

+All rights reserved. This program and the accompanying materials are made available under the  terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html

+      </documentation>

+   </annotation>

+

+</schema>

diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/.gitignore b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/.gitignore
new file mode 100644
index 0000000..93bafad
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/.gitignore
@@ -0,0 +1 @@
+vss*.scc
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IAdvancedQuery.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IAdvancedQuery.java
new file mode 100644
index 0000000..abec49e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IAdvancedQuery.java
@@ -0,0 +1,440 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+import java.sql.Time;
+import java.sql.Timestamp;
+
+/**
+ * An optional, extended query interface for more advanced query capabilities.
+ * It may have complex input parameters, scalar or complex output parameters, 
+ * and/or return a single or multiple result sets. 
+ * <p>A result set may be extended to be referenced by name.
+ * An input parameter may be extended to support the structure or table data type.  
+ * An output parameter may be of scalar or structure data type.
+ * <br>
+ * All advanced query implementations (e.g. stored procedures, SAP R/3 BAPI's) 
+ * should implement this interface.
+ * <p>
+ * A parameter may be referenced by name or position.  
+ * <br>
+ * The case-sensitivity of a name is implementation-dependent.
+ * All indices in this interface are 1-based.
+ * <p>
+ * <b>Note:</b> All IAdvancedQuery interface methods should only be 
+ * called after IQuery.prepare() has been called. 
+ */
+public interface IAdvancedQuery extends IQuery
+{	
+	/**
+	 * Executes the query's prepared query that may return multiple result sets.
+	 * <b>Note:</b> This should only be called after prepare().
+	 * @return	true if the next result is an IResultSet object; 
+	 * 			false if there are no result sets and/or the query is not in a state
+	 *             to retrieve any output data, including output parameter values.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public boolean execute() throws OdaException;
+	
+	/**
+	 * Returns the current result as an IResultSet object. 
+	 * <b>Note:</b> This method should be called only once per result.
+	 * @return	an IResultSet object.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public IResultSet getResultSet() throws OdaException;
+	
+	/**
+	 * Moves to the query's next result set. This method also implicitly 
+	 * closes the current IResultSet object obtained from the previous call to
+	 * getResultSet().
+	 * @return	true, if there are more results in this query object.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public boolean getMoreResults() throws OdaException;
+	
+	/**
+	 * Returns the names of result sets that can be returned by
+	 * this IAdvancedQuery.
+	 * <br>An optional method; only applicable to a query that  
+	 * can retrieve multiple named result sets.
+	 * @return	an array of result set names.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public String[] getResultSetNames() throws OdaException;
+
+	/**
+	 * Returns the metadata of the expected named result.
+	 * @param resultSetName		the name of the result.
+	 * @return					an IResultSetMetaData object.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public IResultSetMetaData getMetaDataOf( String resultSetName ) throws OdaException;
+	
+	/**
+	 * Returns the named result as an IResultSet object, or null if none is 
+	 * available. <b>Note:</b> This method should be called only once per result.
+	 * @param resultSetName		the name of the target result set.
+	 * @return					an IResultSet object.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public IResultSet getResultSet( String resultSetName ) throws OdaException;
+	
+	/**
+	 * Returns an IParameterRowSet object that contains a single row
+	 * representing the named structure input parameter.
+	 * Client will then use the IParameterRowSet 
+	 * setter methods to populate the input parameter values. 
+	 * For example:
+	 * <br>
+	 * <code><br>
+	 * IParameterRowSet myStruct = myQuery.setNewRow( "MyStructureName" );<br>
+	 * myStruct.next();<br>
+	 * myStruct.setString( 1, "myValue" );<br>
+	 * <br></code>
+	 * <br>An optional method; applicable only if named structure input
+	 * parameters are supported.
+	 * @param parameterName		name of the parameter.
+	 * @return					an IParameterRowSet object.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public IParameterRowSet setNewRow( String parameterName ) throws OdaException;
+	
+	/**
+	 * Returns an IParameterRowSet object that contains a single row
+	 * representing the specified structure input parameter.
+	 * Client will then use the IParameterRowSet 
+	 * setter methods to populate the input parameter values.
+	 * <br>An optional method; applicable only if structure input
+	 * parameters are supported.
+	 * @param parameterId		id of the parameter (1-based).
+	 * @return					an IParameterRowSet object.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public IParameterRowSet setNewRow( int parameterId ) throws OdaException;
+	
+	/**
+	 * Returns an empty IParameterRowSet object that represents the named 
+	 * table input parameter.  Client will then use the IParameterRowSet setter 
+	 * methods to populate each row of the input parameter values. 
+	 * For example:
+	 * <br>
+	 * <code><br>
+	 * IParameterRowSet myTable = myQuery.setNewRowSet( "MyTableName" );<br>
+	 * myTable.add();<br>
+	 * myTable.setString( 1, "myValue1" );<br>
+	 * myTable.add();<br>
+	 * myTable.setString( 1, "myValue2" );<br>
+	 * <br></code>
+	 * <br>An optional method; applicable only if named table input
+	 * parameters are supported.
+	 * @param parameterName		name of the parameter.
+	 * @return					an IParameterRowSet object.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public IParameterRowSet setNewRowSet( String parameterName ) throws OdaException;
+	
+	/**
+	 * Returns an empty IParameterRowSet object that represents the specified 
+	 * table input parameter.  Client will then use the IParameterRowSet setter
+	 * methods to populate each row of the input parameter values.
+	 * <br>An optional method; applicable only if table input
+	 * parameters are supported.
+	 * @param parameterId		id of the parameter (1-based).
+	 * @return					an IParameterRowSet object.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public IParameterRowSet setNewRowSet( int parameterId ) throws OdaException;
+	
+	/**
+	 * Returns the integer value from the designated output parameter.
+	 * @param parameterName		name of the parameter.
+	 * @return					the integer value.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public int getInt( String parameterName ) throws OdaException;
+	
+	/**
+	 * Returns the integer value from the designated output parameter.
+	 * @param parameterId		id of the parameter (1-based).
+	 * @return					the integer value.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public int getInt( int parameterId ) throws OdaException;
+	
+	/**
+	 * Returns the double value from the designated output parameter.
+	 * @param parameterName		name of the parameter.
+	 * @return					the double value.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public double getDouble( String parameterName ) throws OdaException;
+	
+	/**
+	 * Returns the double value from the designated output parameter.
+	 * @param parameterId		id of the parameter (1-based).
+	 * @return					the double value.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public double getDouble( int parameterId ) throws OdaException;
+	
+	/**
+	 * Returns the decimal value from the designated output parameter.
+	 * @param parameterName		name of the parameter.
+	 * @return					the decimal value.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public BigDecimal getBigDecimal( String parameterName ) throws OdaException;
+	
+	/**
+	 * Returns the decimal value from the designated output parameter.
+	 * @param parameterId		id of the parameter (1-based).
+	 * @return					the decimal value.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public BigDecimal getBigDecimal( int parameterId ) throws OdaException;
+	
+	/**
+	 * Returns the String value from the designated output parameter.
+	 * An ODA runtime driver may or may not support getString() on a non-String 
+	 * type parameter. The format of the returned string is implementation-
+	 * dependent.
+	 * @param parameterName		name of the parameter.
+	 * @return					the String value.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public String getString( String parameterName ) throws OdaException;
+	
+	/**
+	 * Returns the String value from the designated output parameter.
+	 * An ODA runtime driver may or may not support getString() on a non-String 
+	 * type parameter.  The format of the returned string is implementation-
+	 * dependent.
+	 * @param parameterId		id of the parameter (1-based).
+	 * @return					the String value.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public String getString( int parameterId ) throws OdaException;
+	
+	/**
+	 * Returns the java.sql.Date value from the designated output parameter.
+	 * @param parameterName		name of the parameter.
+	 * @return					the java.sql.Date value.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public Date getDate( String parameterName ) throws OdaException;
+	
+	/**
+	 * Returns the java.sql.Date value from the designated output parameter.
+	 * @param parameterId		id of the parameter (1-based).
+	 * @return					the java.sql.Date value.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public Date getDate( int parameterId ) throws OdaException;
+	
+	/**
+	 * Returns the java.sql.Time value from the designated output parameter.
+	 * @param parameterName		name of the parameter.
+	 * @return					the java.sql.Time value.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public Time getTime( String parameterName ) throws OdaException;
+	
+	/**
+	 * Returns the java.sql.Time value from the designated output parameter.
+	 * @param parameterId		id of the parameter (1-based).
+	 * @return					the java.sql.Time value.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public Time getTime( int parameterId ) throws OdaException;
+	
+	/**
+	 * Returns the java.sql.Timestamp value from the designated output parameter.
+	 * @param parameterName		name of the parameter.
+	 * @return					the java.sql.Timestamp value.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public Timestamp getTimestamp( String parameterName ) throws OdaException;
+	
+	/**
+	 * Returns the java.sql.Timestamp value from the designated output parameter.
+	 * @param parameterId		id of the parameter (1-based).
+	 * @return					the java.sql.Timestamp value.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public Timestamp getTimestamp( int parameterId ) throws OdaException;
+	
+	/**
+	 * Returns the IBlob value from the designated output parameter.
+	 * <p><b>Note:</b> The driver must guarantee that
+	 * the returned IBlob object and its BLOB data would remain valid 
+	 * and accessible until this query instance is closed.
+	 * @param parameterName		name of the parameter.
+	 * @return		an IBlob object that represents the BLOB value; 
+	 * 				or <code>null</code> if the specific parameter 
+	 * 				has null value.
+	 * @throws OdaException		if data source error occurs
+	 * @since		3.0
+	 */
+	public IBlob getBlob( String parameterName ) throws OdaException;
+
+	/**
+	 * Returns the IBlob value from the designated output parameter.
+	 * <p><b>Note:</b> The driver must guarantee that
+	 * the returned IBlob object and its BLOB data would remain valid 
+	 * and accessible until this query instance is closed.
+	 * @param parameterId		id of the parameter (1-based).
+	 * @return		an IBlob object that represents the BLOB value; 
+	 * 				or <code>null</code> if the specific parameter 
+	 * 				has null value.
+	 * @throws OdaException		if data source error occurs
+	 * @since		3.0
+	 */
+	public IBlob getBlob( int parameterId ) throws OdaException;
+	
+	/**
+	 * Returns the IClob value from the designated output parameter.
+	 * <p><b>Note:</b> The driver must guarantee that
+	 * the returned IClob object and its CLOB data would remain valid 
+	 * and accessible until this query instance is closed.
+	 * @param parameterName		name of the parameter.
+	 * @return		an IClob object that represents the CLOB value;
+	 * 				or <code>null</code> if the specific parameter 
+	 * 				has null value.
+	 * @throws OdaException		if data source error occurs
+	 * @since		3.0
+	 */
+	public IClob getClob( String parameterName ) throws OdaException;
+
+	/**
+	 * Returns the IClob value from the designated output parameter.
+	 * <p><b>Note:</b> The driver must guarantee that
+	 * the returned IClob object and its CLOB data would remain valid 
+	 * and accessible until this query instance is closed.
+	 * @param parameterId		id of the parameter (1-based).
+	 * @return		an IClob object that represents the CLOB value;
+	 * 				or <code>null</code> if the specific parameter 
+	 * 				has null value.
+	 * @throws OdaException		if data source error occurs
+	 * @since		3.0
+	 */
+	public IClob getClob( int parameterId ) throws OdaException;
+    
+    /**
+     * Returns the boolean value from the designated output parameter.
+     * @param parameterName     name of the parameter.
+     * @return                  the boolean value.
+     * @throws OdaException     if data source error occurs.
+     * @since       3.1
+     */
+    public boolean getBoolean( String parameterName ) throws OdaException;
+    
+    /**
+     * Returns the boolean value from the designated output parameter.
+     * @param parameterId       id of the parameter (1-based).
+     * @return                  the boolean value.
+     * @throws OdaException     if data source error occurs.
+     * @since       3.1
+     */
+    public boolean getBoolean( int parameterId ) throws OdaException;
+    
+    /**
+     * Returns the value of the designated output parameter as an {@link Object}.
+     * @param parameterName     name of the parameter.
+     * @return                  an {@link Object} holding the output parameter value; may be null
+     * @throws OdaException     if data source error occurs.
+     * @since 3.2 (DTP 1.7)
+     */
+    Object getObject( String parameterName ) throws OdaException;
+    
+    /**
+     * Returns the value of the designated output parameter as an {@link Object}.
+     * @param parameterId       id of the parameter (1-based).
+     * @return                  an {@link Object} holding the output parameter value; may be null
+     * @throws OdaException     if data source error occurs.
+     * @since 3.2 (DTP 1.7)
+     */
+    Object getObject( int parameterId ) throws OdaException;
+	
+	/**
+	 * Returns the structure value from the designated output parameter.  
+	 * This is not intended to return table structures.
+	 * <br>An optional method; applicable only if named structure output
+	 * parameters are supported.
+	 * @param parameterName		name of the parameter.
+	 * @return					an IParameterRowSet object with a single row.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public IParameterRowSet getRow( String parameterName ) throws OdaException;
+	
+	/**
+	 * Returns the structure value from the designated output parameter.
+	 * <br>An optional method; applicable only if structure output
+	 * parameters are supported.
+	 * @param parameterId		id of the parameter (1-based).
+	 * @return					an IParameterRowSet object with a single row.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public IParameterRowSet getRow( int parameterId ) throws OdaException;
+	
+	/**
+	 * Returns the 1-based index of the specified scalar or structure 
+	 * output parameter.
+	 * @param parameterName		name of the output parameter.
+	 * @return					index of the output parameter.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public int findOutParameter( String parameterName ) throws OdaException;
+	
+	/**
+	 * Returns whether the value read from the previous get&lt;type&gt; method was null.
+	 * @return		true, if the last get&lt;type&gt; call was null.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public boolean wasNull() throws OdaException;
+	
+	/**
+	 * Specifies the sort specification for the named result set of
+	 * this <code>IAdvancedQuery</code>.  This setter must be called before this is
+	 * executed.  More sort keys can be added to the SortSpec after 
+	 * it is associated with the query.  The final 
+	 * sort specification is applied to the result set(s) at execution.
+	 * <p>
+	 * It is up to individual ODA runtime drivers to validate the type of sort specification 
+	 * that are acceptable to the provider, based on its level of dynamic sorting support.  
+	 * An <code>OdaException</code> should be thrown if the specified sort 
+	 * specification is not valid or not supported by the driver.
+	 * @param resultSetName		name of the result set.
+	 * @param sortBy			the sort specification to apply to the specified result
+	 * 							set.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public void setSortSpec( String resultSetName, SortSpec sortBy ) throws OdaException;
+	
+	/**
+	 * Returns the sort specification associated with the named result set
+	 * of this <code>IAdvancedQuery</code>.
+	 * @param resultSetName		name of the result set.
+	 * @return					the <code>SortSpec</code> associated with the specified
+	 * 							result set; <code>null</code> if no <code>SortSpec</code> 
+	 * 							was explicitly set.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public SortSpec getSortSpec( String resultSetName ) throws OdaException;
+	
+}
+
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IBlob.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IBlob.java
new file mode 100644
index 0000000..ef6c946
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IBlob.java
@@ -0,0 +1,73 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda;
+
+import java.io.InputStream;
+
+/**
+ * An optional interface that represents a Binary Large Object (BLOB) value.  
+ * <br>The interface must be implemented only if the ODA driver 
+ * supports the BLOB data type.
+ * <p>The IBlob interface provides methods for retrieving a BLOB value
+ * as a Java input stream that can be read in smaller chunks, and
+ * for optionally getting the length of a BLOB value.
+ * <br>
+ * The interface method <code>IResultSet.getBlob</code> returns 
+ * an IBlob instance.
+ * @since	3.0
+ */
+public interface IBlob
+{
+    /**
+     * Retrieves the BLOB value designated by this IBlob instance 
+     * as a binary stream of uninterpreted bytes.
+     * @return	a Java input stream that delivers the BLOB data 
+     * 			as a stream of uninterpreted bytes
+	 * @throws OdaException		if data source error occurs
+     */
+	public InputStream getBinaryStream() throws OdaException;
+	
+	/**
+	 * Retrieves all or part of the BLOB value designated by this 
+	 * IBlob instance as an array of bytes.
+	 * <br>An optional short-cut method to retrieve from the 
+	 * instance's binary stream.  
+	 * The ODA consumer helper framework provides default implementation,
+	 * which is used when an ODA driver throws an UnsupportedOperationException.
+	 * An ODA driver is however encouraged to
+	 * provide a more efficient implementation of this method.
+	 * @param position	the 1-based ordinal position of the first byte 
+	 * 					in the BLOB value to be extracted
+	 * @param length	the number of consecutive bytes to be copied; 
+     *                  a negative value means to copy all remaining bytes
+     *                  available in the binary stream
+	 * @return			a byte array containing up to <code>length</code> 
+	 * 					consecutive bytes from the BLOB value, 
+	 * 					starting with the byte at <code>position</code>
+	 * @throws OdaException		if data source error occurs
+	 */
+	public byte[] getBytes( long position, int length ) throws OdaException;
+	
+	/**
+	 * Returns the number of bytes in the BLOB value designated 
+	 * by this IBlob object.
+	 * An optional method; throws UnsupportedOperationException
+	 * if a driver does not support retrieving the length.
+	 * @return	length of the BLOB value in bytes
+	 * @throws OdaException		if data source error occurs
+	 */
+	public long length() throws OdaException;
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IClob.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IClob.java
new file mode 100644
index 0000000..0cacb80
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IClob.java
@@ -0,0 +1,71 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda;
+
+import java.io.Reader;
+
+/**
+ * An optional interface that represents a Character Large Object (CLOB) value.  
+ * <br>The interface must be implemented only if the ODA driver 
+ * supports the CLOB data type.
+ * <p>The IClob interface provides methods for retrieving a CLOB value
+ * as a Java stream that can be read in smaller chunks, and
+ * for optionally getting the length of a CLOB value.
+ * <br>
+ * The interface method <code>IResultSet.getClob</code> returns 
+ * an IClob instance.
+ * @since	3.0
+ */
+public interface IClob
+{
+    /**
+     * Retrieves the CLOB value designated by this IClob instance 
+     * as a java.io.Reader object for reading a stream of characters.
+     * @return	a java.io.Reader object that contains the CLOB data
+	 * @throws OdaException		if data source error occurs
+     */
+	public Reader getCharacterStream() throws OdaException;
+
+	/**
+	 * Retrieves a copy of the specified substring in the CLOB value 
+	 * designated by this IClob instance. 
+	 * <br>An optional short-cut method to retrieve from the 
+	 * instance's character stream.
+	 * The ODA consumer helper framework provides default implementation,
+	 * which is used when an ODA driver throws an UnsupportedOperationException.
+	 * An ODA driver is however encouraged to
+	 * provide a more efficient implementation of this method.
+	 * @param position	 the first character of the substring to be extracted. 
+	 * 					 The first character is at position 1.
+	 * @param length	 the number of consecutive characters to be copied;
+     *                   a negative value means to copy all remaining characters 
+     *                   available in the stream. 
+	 * @return	the specified substring that begins at <code>position</code>
+	 * 			and has up to <code>length</code> consecutive characters.
+	 * @throws OdaException	if data source error occurs
+	 */
+	public String getSubString( long position, int length ) throws OdaException;
+
+	/**
+	 * Returns the number of characters in the CLOB value 
+	 * designated by this IClob object.
+	 * An optional method; throws UnsupportedOperationException
+	 * if a driver does not support retrieving the length.
+	 * @return	length of the CLOB value in characters
+	 * @throws OdaException		if data source error occurs
+	 */
+	public long length() throws OdaException;
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IConnection.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IConnection.java
new file mode 100644
index 0000000..0acb00a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IConnection.java
@@ -0,0 +1,135 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda;
+
+import java.util.Properties;
+
+import com.ibm.icu.util.ULocale;
+
+/**
+ * A data source connection interface used to
+ * establish a live connection to the underlying data provider.	
+ */
+public interface IConnection
+{
+	/**
+	 * Attempts to establish a connection based on the given connection 
+	 * properties.
+     * Its handling is specific to individual driver implementation.
+     * If any property name is not recognized by the driver,
+     * it should simply ignore, and not throw an exception.
+	 * <br>Note: An ODA driver may use the 
+	 * <code>org.eclipse.datatools.connectivity.oda.util.manifest</code>
+	 * utility package to obtain information on itself,
+	 * such as the content of its plug-in manifest and the driver's
+	 * installation location.
+	 * @param connProperties	Properties necessary to establish a connection. 
+	 * @throws OdaException		if data source error occurs
+	 */
+	public void open( Properties connProperties ) throws OdaException;
+
+	/**
+	 * Sets the connection context passed through from an application.
+	 * Its handling is specific to individual driver implementation.
+	 * The context argument could be null.  The method may be called 
+	 * by an ODA consumer application with a null argument, 
+	 * i.e. passing a null context object to this instance, 
+	 * only if a non-null context was previously passed through to 
+	 * the same instance. 
+	 * <br>
+	 * <b>Note:</b> This method should be called before open().
+	 * It is called regardless of whether the connection is 
+	 * already open.
+	 * <br>An optional method.
+	 * If any part of the context is not recognized by the driver,
+	 * it should simply ignore, and not throw an exception.
+	 * @param context	Application context object of this instance.
+	 * @throws OdaException		if data source error occurs
+	 * @since		3.0
+	 */
+	public void setAppContext( Object context ) throws OdaException;
+	
+	/**
+	 * Attempts to close this connection.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public void close() throws OdaException;
+	
+	/**
+	 * Checks whether this has an established connection
+	 * @return	true if connection is established.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public boolean isOpen() throws OdaException;
+
+	/**
+	 * Returns an IDataSetMetaData object of the the given
+	 * data set type.  The data set type is implementation-dependent.  
+	 * This can be called before this IConnection is opened; however some 
+	 * IDataSetMetaData methods expects and requires an opened connection 
+	 * before being called, e.g. getDataSourceObjects().  
+	 * @param dataSetType		String representation of a data set type. 
+	 * @return					an IDataSetMetaData object.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public IDataSetMetaData getMetaData( String dataSetType ) throws OdaException;
+
+	/**
+	 * Returns an IQuery object of the given data set type.  
+	 * The data set type is implementation-dependent.
+	 * @param dataSetType		String representation of a data set type.
+	 * @return					an IQuery object.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public IQuery newQuery( String dataSetType ) throws OdaException;
+
+	/**
+	 * Returns the maximum number of active queries for any data set types 
+	 * that the driver can support for this connection.
+	 * @return	the maximum number of any type of queries that can be prepared and executed 
+	 * 			concurrently, or 0 if there is no limit or the limit is unknown.
+	 * @throws OdaException		if driver error occurs
+	 */
+	public int getMaxQueries() throws OdaException;
+	
+	/**
+	 * Commits all changes made since the previous commit/rollback.
+	 * <br>
+	 * An optional method.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public void commit() throws OdaException;
+	
+	/**
+	 * Undoes all changes made since the previous commit/rollback.
+	 * <br>
+	 * An optional method.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public void rollback() throws OdaException;
+	
+	/**
+	 * Specifies the locale setting for all locale-sensitive tasks in this connection.
+     * <br>
+     * An optional method.
+	 * This setting, if specified, overrides the driver's default locale setting.
+	 * @param ulocale  a {@link ULocale} setting
+     * @throws OdaException     if data source error occurs
+     * @since 3.2 (DTP 1.7)
+	 */
+	void setLocale( ULocale locale ) throws OdaException;
+	
+}
+
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IDataSetMetaData.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IDataSetMetaData.java
new file mode 100644
index 0000000..7ace078
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IDataSetMetaData.java
@@ -0,0 +1,220 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda;
+
+/**
+ * Provides comprehensive information on the driver's capabilities
+ * for a type of data set query.
+ * <p>
+ * An ODA runtime driver can implement a connection
+ * to work with one or more types of data sets.
+ * Different types of data sets often support different features, and/or implement 
+ * features in different ways.  In addition, a driver may implement  
+ * a feature on top of what the underlying data provider offers.
+ * <br>
+ * Information returned by methods in this interface applies to the capabilities
+ * of a particular driver and a particular type of data set working together.
+ * Note that as used in this documentation, the term "data set" is used 
+ * generically to refer to both the ODA runtime driver and underlying data provider.
+ * <p>
+ * A method that gets information about a feature not supported by the driver
+ * will throw an OdaException.  This includes methods that return an
+ * IResultSet object.
+ * <p>
+ * Some methods may be called before the associated connection is opened, 
+ * while other may require the associated connection to be opened.  For example:
+ * <p> 
+ * <code>
+ * 		&nbsp;&nbsp;&nbsp;&nbsp;
+ * 		// connection is not opened
+ * <br>
+ * 		&nbsp;&nbsp;&nbsp;&nbsp;
+ * 		IDataSetMetaData metadata = connection.getMetaData( ... ); 
+ * <br>
+ * 		&nbsp;&nbsp;&nbsp;&nbsp;
+ * 		metadata.supportsInParameters();
+ * <br>
+ * 		&nbsp;&nbsp;&nbsp;&nbsp;
+ * 		connection.open();
+ * <br>
+ * 		&nbsp;&nbsp;&nbsp;&nbsp;
+ * 		metadata.getDataSourceObjects( ... );	// requires an opened connection
+ * <br>
+ * </code>
+ */
+public interface IDataSetMetaData
+{
+	/**
+	 * The constant indicating that <code>OdaException.getSQLState</code> will 
+	 * return a X/Open SQL CLI SQLSTATE value.
+	 */
+	public static final int sqlStateXOpen = 0;
+	
+	/**
+	 * The constant indicating that <code>OdaException.getSQLState</code> will 
+	 * return a SQL99 SQLSTATE value.
+	 */
+	public static final int sqlStateSQL99 = 1;
+
+	/**
+	 * The constant indicating that dynamic sorting is not supported.
+	 */
+	public static final int sortModeNone = 0;
+	
+	/**
+	 * The constant indicating that all sorted columns must be in the same 
+	 * sort order.
+	 */
+	public static final int sortModeSingleOrder = 1;
+	
+	/**
+	 * The constant indicating that each sorted column can have a different 
+	 * sort order.
+	 */
+	public static final int sortModeColumnOrder = 2;
+	
+	/**
+	 * The constant indicating that only one single column can be sorted.
+	 */
+	public static final int sortModeSingleColumn = 3;
+	
+	/**
+	 * Returns the connection that produced this metadata object.
+	 * @return	the connection that produced this metadata object.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public IConnection getConnection() throws OdaException;
+	
+	/**
+	 * Returns the collection of objects found in a data provider's catalog. 
+	 * Valid arguments to this method are implementation-dependent.
+	 * <br>
+	 * An optional method.
+	 * @param catalog	data provider's catalog.
+	 * @param schema	search pattern for the data provider's schema or 
+	 * 					owner name; could be left empty if not applicable to 
+	 * 					the connected data provider.
+	 * @param object	search pattern for the data provider's object name.
+	 * @param version	data provider's objects version.
+	 * @return	an IResultSet object describing the data provider's objects.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public IResultSet getDataSourceObjects( String catalog,
+											String schema,
+											String object,
+											String version ) throws OdaException;
+
+	/**
+	 * Returns the major version number of the underlying data provider.
+	 * @return	the major version number.
+	 * @throws OdaException		if data source error occurs.
+	 */											
+	public int getDataSourceMajorVersion() throws OdaException;
+	
+	/**
+	 * Returns the minor version number of the underlying data provider.
+	 * @return	the minor version number.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public int getDataSourceMinorVersion() throws OdaException;
+	
+	/**
+	 * Returns the name of this data provider product.
+	 * @return	data provider product name.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public String getDataSourceProductName() throws OdaException;
+	
+	/**
+	 * Returns the version of this data provider product as a <code>String</code>.
+	 * @return	data provider product version.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public String getDataSourceProductVersion() throws OdaException;
+	
+	/**
+	 * Indicates whether the SQLSTATE returned by <code>OdaException.getSQLState()</code> 
+	 * is X/Open SQL CLI or SQL99.
+	 * <br>An optional method.
+	 * @return	the type of SQLSTATE;<br>
+	 * 			one of sqlStateXOpen,<br>
+	 * 			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+	 * 			sqlStateSQL99.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public int getSQLStateType() throws OdaException;
+	
+	/**
+	 * Indicates whether this data set type supports getting 
+	 * multiple <code>IResultSet</code> objects (sequentially or simultaneously),
+	 * in its <code>IAdvancedQuery</code> implementation.
+	 * @return	true if this data set supports getting multiple
+	 * 			<code>IResultSet</code> objects; false otherwise.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public boolean supportsMultipleResultSets() throws OdaException;
+	
+	/**
+	 * Indicates whether this data set type supports getting 
+	 * multiple <code>IResultSet</code> objects simultaneously,
+	 * in its <code>IAdvancedQuery</code> implementation.
+	 * @return	true if this data set supports getting multiple
+	 * 			<code>IResultSet</code> objects simultaneously; false otherwise.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public boolean supportsMultipleOpenResults() throws OdaException;
+	
+	/**
+	 * Indicates whether this data set type supports getting 
+	 * one or more <code>IResultSet</code> objects by name,
+	 * in its <code>IAdvancedQuery</code> implementation.
+	 * @return	true if this data set supports getting one or more 
+	 * 			<code>IResultSet</code> objects by name; false otherwise.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public boolean supportsNamedResultSets() throws OdaException;
+	
+	/**
+	 * Indicates whether this data set type supports named parameters in 
+	 * <code>IQuery</code>.
+	 * @return	true if named parameters are supported; false otherwise.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public boolean supportsNamedParameters() throws OdaException;
+	
+	/**
+	 * Indicates whether this data set type supports input parameters in 
+	 * <code>IQuery</code>.
+	 * @return	true if input parameters are supported; false otherwise.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public boolean supportsInParameters() throws OdaException;
+	
+	/**
+	 * Indicates whether this data set type supports output parameters 
+	 * in its <code>IAdvancedQuery</code> implementation.
+	 * @return	true if output parameters are supported; false otherwise.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public boolean supportsOutParameters() throws OdaException;
+	
+	/**
+	 * Returns the dynamic sorting mode supported by this data set type.  
+	 * @return	the dynamic sorting mode supported by the data source; one 
+	 * 			of <code>sortModeNone</code>, <code>sortModeSingleOrder</code>,
+	 * 			<code>sortModeColumnOrder</code>, <code>sortModeSingleColumn</code>
+	 */
+	public int getSortMode();
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IDriver.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IDriver.java
new file mode 100644
index 0000000..201c4db
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IDriver.java
@@ -0,0 +1,75 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda;
+
+/**
+ * The entry point to a custom ODA run-time driver's implementation.
+ * It is also a connection factory used to produce an IConnection object.
+ */
+public interface IDriver
+{
+	/**
+	 * Returns an IConnection object that can then be 
+	 * used to establish a runtime connection to the underlying 
+	 * data source with the given unique id. 
+	 * @param 	dataSourceId  The id of a type of data source supported by this IDriver.
+	 * 							This matches the data source element id defined in
+	 * 							the data source driver's configuration file.  
+	 * 							A null or empty String will use the default 
+	 * 							data source type supported by this IDriver.
+	 * @return 	an IConnection object
+	 * @see 	IConnection
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public IConnection getConnection( String dataSourceId ) 
+		throws OdaException;
+	
+	/**
+	 * An optional method to set the trace logging configuration of the ODA runtime driver
+	 * for the given type of data source and its runtime connection(s).
+	 * @param logConfig      		The trace logging configuration.
+	 * @throws OdaException			if ODA runtime driver error occurs.
+	 */
+	public void setLogConfiguration( LogConfiguration logConfig ) throws OdaException;
+	
+	/**
+	 * Returns the maximum number of concurrent connections that the driver can support.
+	 * @return	the maximum number of any type of connections that can be open concurrently, 
+	 * 			or 0 if there is no limit or the limit is unknown.
+	 * @throws OdaException		if driver error occurs.
+	 */
+	public int getMaxConnections() throws OdaException;
+
+	/**
+	 * Sets the driver context passed through from an application.
+	 * Its handling is specific to individual driver implementation.
+	 * The context argument could be null.  The method may be called 
+	 * by an ODA consumer application with a null argument, 
+	 * i.e. passing a null context object to this instance, 
+	 * only if a non-null context was previously passed through to 
+	 * the same instance. 
+	 * <br>
+	 * <b>Note:</b> This method should be called before getConnection( String ).
+	 * <br>An optional method.
+	 * If any part of the context is not recognized by the driver,
+	 * it should simply ignore, and not throw an exception.
+	 * @param context	Application context object of this instance.
+	 * @throws OdaException		if data source error occurs
+	 * @since		3.0
+	 */
+	public void setAppContext( Object context ) throws OdaException;
+
+}
+
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IParameterMetaData.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IParameterMetaData.java
new file mode 100644
index 0000000..14585b7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IParameterMetaData.java
@@ -0,0 +1,156 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda;
+
+/**
+ * An interface that represents the meta-data 
+ * of input/output parameters defined in a prepared query.
+ * Its implementation is required only if the driver supports 
+ * query parameters. 
+ * <p>
+ * <b>Note:</b> All parameter indices in this interface are 1-based.
+ */
+public interface IParameterMetaData
+{
+	/**
+	 * The constant indicating that the input/output mode of the 
+	 * parameter is unknown.
+	 */
+	public static final int parameterModeUnknown = 0;
+
+	/**
+	 * The constant indicating that the parameter is an input parameter.
+	 */
+	public static final int parameterModeIn = 1;
+	
+	/**
+	 * The constant indicating that the parameter is both input and output.
+	 */
+	public static final int parameterModeInOut = 2;
+	
+	/**
+	 * The constant indicating that the parameter is an output parameter.
+	 */
+	public static final int parameterModeOut = 3;
+	
+	/**
+	 * The constant indicating that the nullability of the parameter is 
+	 * unknown.
+	 */
+	public static final int parameterNullableUnknown = 0;
+	
+	/**
+	 * The constant indicating that the parameter will not allow NULL
+	 * values.
+	 */
+	public static final int parameterNoNulls = 1;
+	
+	/**
+	 * The constant indicating that the parameter will allow NULL values.
+	 */
+	public static final int parameterNullable = 2;
+	
+	/**
+	 * Returns the number of parameters defined in the 
+	 * prepared IQuery object.
+	 * @return	the number of parameters.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public int getParameterCount() throws OdaException;
+	
+	/**
+	 * Returns the input/output mode of the specified parameter.
+	 * @param param	1-based index of the parameter.
+	 * @return		the input/output mode of the parameter;<br>
+	 * 				one of parameterModeUnknown,<br>
+	 * 				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+	 * 				parameterModeIn,<br>
+	 * 				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+	 * 				parameterModeInOut,<br>
+	 * 				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+	 * 				parameterModeOut.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public int getParameterMode( int param ) throws OdaException;
+    
+    /**
+     * Returns the name of the specific parameter.  
+     * Optional method; a parameter may or may not have a name.
+     * @param param 1-based index of the parameter.
+     * @return      the parameter name, or 
+     *              null if the name is not available or this parameter is not named.
+     * @throws OdaException     if data source error occurs.
+     * @since 3.1
+     */
+    public String getParameterName( int param ) throws OdaException;
+	
+	/**
+	 * Returns the data provider specific code of the parameter's data type.
+	 * The valid values are implementation-specific.
+	 * @param param	1-based index of the parameter.
+	 * @return		the native data type code of the parameter.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public int getParameterType( int param ) throws OdaException;
+	
+	/**
+	 * Returns the data provider specific name of the parameter's data type.
+	 * @param param	1-based index of the parameter.
+	 * @return		the native data type name of the parameter.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public String getParameterTypeName( int param ) throws OdaException;
+	
+	/**
+	 * Returns the maximum number of decimal digits for the specified parameter.
+	 * This method should only apply to numeric data types; however, it is up 
+	 * to an ODA data provider to determine those data types that are 
+	 * applicable. The maximum precision allowed on a data type may vary depending 
+	 * on the data provider.
+	 * <br>An optional method.
+	 * @param param	1-based index of the parameter.
+	 * @return		the precision of the parameter, or -1 if not applicable.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public int getPrecision( int param ) throws OdaException;
+	
+	/**
+	 * Returns the maximum number of digits to the right of the decimal point 
+	 * for the specified parameter. 
+	 * This method should only apply to numeric data types;
+	 * however, it is up to an ODA data provider to determine 
+	 * those data types that are applicable. The maximum scale allowed on 
+	 * a data type may vary depending on the data provider.
+	 * <br>An optional method.
+	 * @param param	1-based index of the parameter.
+	 * @return		the scale of the parameter, or -1 if not applicable.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public int getScale( int param ) throws OdaException;
+	
+	/**
+	 * Returns whether null values are allowed for the specified parameter.
+	 * <br>An optional method.
+	 * @param param	1-based index of the parameter.
+	 * @return		the nullability of the parameter;<br> 
+	 * 				one of parameterNullableUnknown,<br>
+	 * 				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+	 * 				parameterNoNulls,<br>
+	 * 				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+	 * 				parameterNullable.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public int isNullable( int param ) throws OdaException;
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IParameterRowSet.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IParameterRowSet.java
new file mode 100644
index 0000000..9add913
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IParameterRowSet.java
@@ -0,0 +1,258 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+import java.sql.Time;
+import java.sql.Timestamp;
+
+/**
+ * An optional interface that represents complex data type objects 
+ * such as structures and tables.  
+ * <p>
+ * The interface applies only if the ODA driver supports 
+ * the use of complex input and/or output parameters.
+ * A structure can be represented by an IParameterRowSet object with one row.
+ * This interface is used to represent complex parameter data values.  
+ * A complex parameter's metadata 
+ * can be obtained from its inherited getMetaData() method.
+ * <p>
+ * A row set column may be referenced by name or position.  
+ * <br>
+ * The case-sensitivity of a name is implementation-dependent.
+ * All indices in this interface are 1-based.
+ */
+public interface IParameterRowSet extends IResultSet
+{
+	/**
+	 * Moves the cursor to the designated row number.
+	 * @param rowIndex	the row number (1-based).
+	 * @return	true, if cursor is moved successfully to the desired row.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public boolean absolute( int rowIndex ) throws OdaException;
+	
+	/**
+	 * Moves the cursor up one element from its current position.
+	 * <br>An optional method.
+	 * @return	true, if the cursor is moved successfully to a valid row.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public boolean previous() throws OdaException;
+	
+	/**
+	 * Appends a new row to the end of this collection and moves the cursor
+	 * to the new row's position.
+	 * <br>Only required for input parameters.
+	 * @return	0 if this failed to add a new row.  Otherwise, the rowIndex 
+	 * 			of the new row.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public int add() throws OdaException;
+	
+	/**
+	 * Removes all of the elements from this collection.
+	 * <br>An optional method.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public void clear() throws OdaException;
+	
+	/**
+	 * Determines whether this does not contain any elements.
+	 * @return	true, if this is empty.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public boolean isEmpty() throws OdaException;
+	
+	/**
+	 * Returns the number of elements in this collection.
+	 * @return	size of this collection.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public int size() throws OdaException;
+	
+	/**
+	 * Sets the integer value at the designated column.
+	 * @param columnIndex	index of the column.
+	 * @param value			the integer value.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public void setInt( int columnIndex, int value ) throws OdaException;
+	
+	/**
+	 * Sets the integer value at the designated column.
+	 * @param columnName	name of the column.
+	 * @param value			the integer value.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public void setInt( String columnName, int value ) throws OdaException;
+	
+	/**
+	 * Sets the double value at the designated column.
+	 * @param columnIndex	index of the column.
+	 * @param value			the double value.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public void setDouble( int columnIndex, double value ) throws OdaException;
+	
+	/**
+	 * Sets the double value at the designated column.
+	 * @param columnName	name of the column.
+	 * @param value			the double value.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public void setDouble( String columnName, double value ) throws OdaException;
+	
+	/**
+	 * Sets the decimal value at the designated column.
+	 * @param columnIndex	index of the column.
+	 * @param value			the decimal value.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public void setBigDecimal( int columnIndex, BigDecimal value ) throws OdaException;
+	
+	/**
+	 * Sets the decimal value at the designated column.
+	 * @param columnName	name of the column.
+	 * @param value			the decimal value.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public void setBigDecimal( String columnName, BigDecimal value ) throws OdaException;
+	
+	/**
+	 * Sets the string value at the designated column.
+	 * An ODA runtime driver may or may not support setString() on a non-String 
+	 * type column. 
+	 * The format of the string parameter is implementation-dependent.
+	 * @param columnIndex	index of the column.
+	 * @param value			the string value.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public void setString( int columnIndex, String value ) throws OdaException;
+	
+	/**
+	 * Sets the string value at the designated column.
+	 * An ODA runtime driver may or may not support setString() on a non-String 
+	 * type column. 
+	 * The format of the string parameter is implementation-dependent.
+	 * @param columnName	name of the column.
+	 * @param value			the string value.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public void setString( String columnName, String value ) throws OdaException;
+	
+	/**
+	 * Sets the date value at the designated column.
+	 * @param columnIndex	index of the column.
+	 * @param value			the java.sql.Date value.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public void setDate( int columnIndex, Date value ) throws OdaException;
+	
+	/**
+	 * Sets the date value at the designated column.
+	 * @param columnName	name of the column.
+	 * @param value			the java.sql.Date value.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public void setDate( String columnName, Date value ) throws OdaException;
+	
+	/**
+	 * Sets the time value at the designated column.
+	 * @param columnIndex	index of the column.
+	 * @param value			the java.sql.Time value.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public void setTime( int columnIndex, Time value ) throws OdaException;
+	
+	/**
+	 * Sets the time value at the designated column.
+	 * @param columnName	name of the column.
+	 * @param value			the java.sql.Time value.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public void setTime( String columnName, Time value ) throws OdaException;
+	
+	/**
+	 * Sets the time stamp value at the designated column.
+	 * @param columnIndex	index of the column.
+	 * @param value			the java.sql.Timestamp value.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public void setTimestamp( int columnIndex, Timestamp value ) throws OdaException;
+	
+	/**
+	 * Sets the time stamp value at the designated column.
+	 * @param columnName	name of the column.
+	 * @param value			the java.sql.Timestamp value.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public void setTimestamp( String columnName, Timestamp value ) throws OdaException;	
+    
+    /**
+     * Sets the boolean value at the designated column.
+     * @param columnIndex   index of the column.
+     * @param value         the boolean value.
+     * @throws OdaException     if data source error occurs.
+     * @since 3.1
+     */
+    public void setBoolean( int columnIndex, boolean value ) throws OdaException;
+    
+    /**
+     * Sets the boolean value at the designated column.
+     * @param columnName    name of the column.
+     * @param value         the boolean value.
+     * @throws OdaException     if data source error occurs.
+     * @since 3.1
+     */
+    public void setBoolean( String columnName, boolean value ) throws OdaException;
+    
+    /**
+     * Sets the object value at the designated column.
+     * @param columnIndex   index of the column.
+     * @param value         the Java object value.
+     * @throws OdaException     if data source error occurs.
+     * @since 3.2 (DTP 1.7)
+     */
+    public void setObject( int columnIndex, Object value ) throws OdaException;
+    
+    /**
+     * Sets the object value at the designated column.
+     * @param columnName    name of the column.
+     * @param value         the Java object value.
+     * @throws OdaException     if data source error occurs.
+     * @since 3.2 (DTP 1.7)
+     */
+    public void setObject( String columnName, Object value ) throws OdaException;
+    
+    /**
+     * Sets a null value at the designated column.
+     * @param columnIndex   index of the column.
+     * @throws OdaException     if data source error occurs
+     * @since 3.1
+     */
+    public void setNull( int columnIndex ) throws OdaException;
+    
+    /**
+     * Sets a null value at the designated column.
+     * @param columnName    name of the column.
+     * @throws OdaException     if data source error occurs
+     * @since 3.1
+     */
+    public void setNull( String columnName ) throws OdaException;
+
+}
+
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IQuery.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IQuery.java
new file mode 100644
index 0000000..cafe5a1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IQuery.java
@@ -0,0 +1,420 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+import java.sql.Time;
+import java.sql.Timestamp;
+
+import org.eclipse.datatools.connectivity.oda.spec.QuerySpecification;
+
+/**
+ * The base query interface to  
+ * prepare and execute a query text to retrieve data.
+ * This base interface covers most basic query capabilities, 
+ * such as returning data rows in a single result set, and
+ * may support scalar input parameters.
+ * <p>
+ * Note: An IQuery object must <b>always</b> be prepared before 
+ * it can be executed.  For example:
+ * <p>
+ * <code>
+ * query.prepare( "SELECT * FROM TABLE" );<br>
+ * // prepare succeeded, no exception was thrown <br>
+ * query.executeQuery();</pre>
+ * </code>
+ * <p>
+ * An input parameter may be referenced by name or position.  
+ * <br>
+ * The case-sensitivity of a name is implementation-dependent.
+ * All indices in this interface are 1-based.
+ */
+public interface IQuery
+{
+	/**
+	 * Performs necessary checks to determine whether the query text
+	 * is of a valid format supported by this IQuery implementation.
+	 * @param queryText	a query text to prepare or pre-compile; 
+	 * 					it cannot be null.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public void prepare( String queryText ) throws OdaException;
+
+	/**
+	 * Sets the query context passed through from an application.
+	 * Its handling is specific to individual driver implementation.
+	 * The context argument could be null.  The method may be called 
+	 * by an ODA consumer application with a null argument, 
+	 * i.e. passing a null context object to this instance, 
+	 * only if a non-null context was previously passed through to 
+	 * the same instance. 
+	 * <br>
+	 * <b>Note:</b> This method should be called before prepare().
+	 * <br>An optional method.
+	 * If any part of the context is not recognized by the driver,
+	 * it should simply ignore, and not throw an exception.
+	 * @param context	Application context object of this instance.
+	 * @throws OdaException		if data source error occurs
+	 * @since		3.0
+	 */
+	public void setAppContext( Object context ) throws OdaException;
+
+	/**
+	 * Sets the named property with the specified value.  
+	 * Multiple calls using the same property name may be allowed 
+	 * to assign multiple values to the same property.   
+	 * Its handling is specific to individual driver implementation.
+     * If a property name is not recognized by the driver,
+     * it should simply ignore, and not throw an exception.
+	 * <br>Each ODA extension property defined for a data set
+	 * triggers an ODA consumer to call this method
+	 * with corresponding property value, which may be null. 
+	 * An ODA consumer does not distinguish whether a property value
+	 * is not set or explicitly set to null.  
+	 * Its handling is specific to individual driver implementation.
+	 * <br>
+	 * <b>Note:</b> This method should be called after {@link #prepare(String)}, and
+	 * before {@link #executeQuery()} or other extended execution method(s).
+	 * <br>An optional method.
+	 * @param name		name of the property.
+	 * @param value		value to assign to the named property; may be null.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public void setProperty( String name, String value ) throws OdaException;
+
+	/**
+	 * Attempts to close this IQuery.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public void close() throws OdaException;	
+	
+	/**
+	 * Specifies the maximum number of rows that can be fetched from 
+	 * the query's result set(s).
+	 * <br>An optional method.
+	 * @param max	the maximum number of rows that can be fetched from each 
+	 * 				result set of this IQuery; zero means there is no limit.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public void setMaxRows( int max ) throws OdaException;
+	
+	/**
+	 * Returns the maximum number of rows that can be fetched from 
+	 * the query's result set(s).
+	 * <br>An optional method.
+	 * @return	the maximum number of rows that can be fetched from each  
+	 * 			result set of this IQuery; zero means there is no limit.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public int getMaxRows() throws OdaException;
+	
+	/**
+	 * Returns the metadata of the current result set for this prepared IQuery.  
+	 * This can be called only after prepare(). If the method is called before 
+	 * the IQuery is executed, the returned metadata refers to its first result 
+	 * set.
+	 * @return	an IResultSetMetaData object.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public IResultSetMetaData getMetaData() throws OdaException;
+		
+	/**
+	 * Executes the query's prepared query text and returns 
+	 * a single IResultSet object.
+	 * <b>Note:</b> This should only be called after prepare().
+	 * @return	an IResultSet object.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public IResultSet executeQuery() throws OdaException;
+	
+	/**
+	 * An optional method to clear the current input parameter values immediately.
+	 * <p>
+	 * In general, input parameter values remain in force for repeated use of a 
+	 * query.  Setting a parameter value automatically clears its previous value. 
+	 * However, to reset all the parameters to their default values without 
+	 * explicitly setting new values, use this method. 
+	 * @throws OdaException		if data source error occurs
+	 * @throws UnsupportedOperationException
+	 * 							if this operation is not supported
+	 */
+	public void clearInParameters() throws OdaException;
+	
+	/**
+	 * Sets the designated parameter to the given integer value.
+	 * @param parameterName		name of the parameter.
+	 * @param value				integer value.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public void	setInt( String parameterName, int value ) throws OdaException;
+	
+	/**
+	 * Sets the designated parameter to the given integer value.
+	 * @param parameterId		id of the parameter (1-based).
+	 * @param value				integer value.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public void setInt( int parameterId, int value ) throws OdaException;
+	
+	/**
+	 * Sets the designated parameter to the given double value.
+	 * @param parameterName		name of the parameter.
+	 * @param value				double value.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public void setDouble( String parameterName, double value ) throws OdaException;
+	
+	/**
+	 * Sets the designated parameter to the given double value.
+	 * @param parameterId		id of the parameter (1-based).
+	 * @param value				double value.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public void setDouble( int parameterId, double value ) throws OdaException;
+	
+	/**
+	 * Sets the designated parameter to the given decimal value.
+	 * @param parameterName		name of the parameter.
+	 * @param value				decimal value.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public void setBigDecimal( String parameterName, BigDecimal value ) throws OdaException;
+	
+	/**
+	 * Sets the designated parameter to the given decimal value.
+	 * @param parameterId		id of the parameter (1-based).
+	 * @param value				decimal value.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public void setBigDecimal( int parameterId, BigDecimal value ) throws OdaException;
+	
+	/**
+	 * Sets the designated parameter to the given string value.
+	 * An ODA runtime driver may or may not support setString() on a non-String 
+	 * type parameter. 
+	 * The format of the string parameter is implementation-dependent.
+	 * @param parameterName		name of the parameter.
+	 * @param value				string value.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public void setString( String parameterName, String value ) throws OdaException;
+	
+	/**
+	 * Sets the designated parameter to the given string value.
+	 * An ODA runtime driver may or may not support setString() on a non-String 
+	 * type parameter. 
+	 * The format of the string parameter is implementation-dependent.
+	 * @param parameterId		id of the parameter (1-based).
+	 * @param value				string value.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public void setString( int parameterId, String value ) throws OdaException;
+	
+	/**
+	 * Sets the designated parameter to the given Date value.
+	 * @param parameterName		name of the parameter.
+	 * @param value				the java.sql.Date value.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public void setDate( String parameterName, Date value ) throws OdaException;
+	
+	/**
+	 * Sets the designated parameter to the given Date value.
+	 * @param parameterId		id of the parameter (1-based).
+	 * @param value				the java.sql.Date value.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public void setDate( int parameterId, Date value ) throws OdaException;
+	
+	/**
+	 * Sets the designated parameter to the given Time value.
+	 * @param parameterName		name of the parameter.
+	 * @param value				the java.sql.Time value.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public void setTime( String parameterName, Time value ) throws OdaException;
+	
+	/**
+	 * Sets the designated parameter to the given Time value.
+	 * @param parameterId		id of the parameter (1-based).
+	 * @param value				the java.sql.Time value.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public void setTime( int parameterId, Time value ) throws OdaException;
+	
+	/**
+	 * Sets the designated parameter to the given Timestamp value.
+	 * @param parameterName		name of the parameter.
+	 * @param value				the java.sql.Timestamp value.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public void setTimestamp( String parameterName, Timestamp value ) throws OdaException;
+	
+	/**
+	 * Sets the designated parameter to the given Timestamp value.
+	 * @param parameterId		id of the parameter (1-based).
+	 * @param value				the java.sql.Timestamp value.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public void setTimestamp( int parameterId, Timestamp value ) throws OdaException;
+    
+    /**
+     * Sets the designated parameter to the given boolean value.
+     * @param parameterName     name of the parameter.
+     * @param value             boolean value.
+     * @throws OdaException     if data source error occurs
+     * @since 3.1
+     */
+    public void setBoolean( String parameterName, boolean value ) throws OdaException;
+	
+    /**
+     * Sets the designated parameter to the given boolean value.
+     * @param parameterId       id of the parameter (1-based).
+     * @param value             boolean value
+     * @throws OdaException     if data source error occurs
+     * @since 3.1
+     */
+    public void setBoolean(int parameterId, boolean value ) throws OdaException;
+    
+    /**
+     * Sets the value of the designated parameter with the given object.
+     * @param parameterName     name of the parameter.
+     * @param value             an {@link Object} holding the input parameter value
+     * @throws OdaException     if data source error occurs
+     * @since 3.2 (DTP 1.7)
+     */
+    void setObject( String parameterName, Object value ) throws OdaException;
+    
+    /**
+     * Sets the value of the designated parameter with the given object.
+     * @param parameterId       id of the parameter (1-based).
+     * @param value             an {@link Object} holding the input parameter value
+     * @throws OdaException     if data source error occurs
+     * @since 3.2 (DTP 1.7)
+     */
+    void setObject(int parameterId, Object value ) throws OdaException;
+    
+    /**
+     * Sets the designated parameter to a null value.
+     * @param parameterName     name of the parameter.
+     * @throws OdaException     if data source error occurs
+     * @since 3.1
+     */
+    public void setNull( String parameterName ) throws OdaException;
+    
+    /**
+     * Sets the designated parameter to a null value.
+     * @param parameterId       id of the parameter (1-based).
+     * @throws OdaException     if data source error occurs
+     * @since 3.1
+     */
+    public void setNull( int parameterId ) throws OdaException;
+    
+	/**
+	 * Returns the 1-based index of the specified input parameter.
+	 * @param parameterName		name of the parameter.
+	 * @return					index of the parameter.
+	 * @throws OdaException		if data source error occurs
+	 */	
+	public int findInParameter( String parameterName ) throws OdaException;
+	
+	/**
+	 * Returns the count, data types, and other metadata attributes 
+	 * of the parameters defined in this prepared IQuery object.
+	 * Its implementation is required for ODA runtime drivers.
+	 * <p>
+	 * <b>Note:</b> This should only be called after prepare() is called.
+	 * @return	an IParameterMetaData object that contains information about  
+	 * 			this prepared IQuery object's parameters.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public IParameterMetaData getParameterMetaData() throws OdaException;
+
+	/**
+	 * Specifies the sort specification for this <code>IQuery</code>.  
+	 * This method must be called before this <code>IQuery</code> is executed 
+	 * or before {@link IAdvancedQuery#getMoreResults()} is called.  
+	 * More sort keys can be added to the SortSpec after 
+	 * it is associated with the query.  
+	 * The final sort specification is then applied 
+	 * to subsequent result set(s) at execution.  
+	 * <p>
+	 * It is up to individual ODA runtme drivers to validate the type of sort specification 
+	 * that are acceptable to its data provider, based on its level 
+	 * of dynamic sorting support.  
+	 * An <code>OdaException</code> should be thrown if the specified sort 
+	 * specification is not valid or not supported by the driver.
+	 * @param sortBy	the sort specification assigned to this <code>IQuery</code>.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public void setSortSpec( SortSpec sortBy ) throws OdaException;
+	
+	/**
+	 * Returns the sort specification associated with this <code>IQuery</code>.
+	 * @return	the <code>SortSpec</code> assigned to this <code>IQuery</code>; 
+	 * 			<code>null</code> if no <code>SortSpec</code> was explicitly set.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public SortSpec getSortSpec() throws OdaException;
+		
+	/**
+     * Specifies the query characteristics to apply when this query is prepared and executed.
+     * It takes effect only if set prior to preparing a query text on {@link #prepare(String)}.
+     * <p>An optional method.  Driver implementation that does not support this method
+     * should throw an UnsupportedOperationException.
+	 * @param querySpec    specification of query characteristics to apply when 
+	 *                     this is prepared and executed
+	 * @throws OdaException        if data source error occurs
+     * @throws UnsupportedOperationException    if this method is not supported
+     * @since 3.2 (DTP 1.7)
+	 */
+	void setSpecification( QuerySpecification querySpec ) 
+	    throws OdaException, UnsupportedOperationException;
+	
+	/**
+     * Gets the current specification of query characteristics to apply when 
+     * this query is prepared and executed.
+	 * @return the current {@link QuerySpecification}, or null if none is effective or available
+     * @since 3.2 (DTP 1.7)
+	 */
+	QuerySpecification getSpecification();
+	
+	/**
+     * Gets the current effective query text that this query has prepared.
+     * The effective query text may be different from the argument of {@link #prepare(String)},
+     * having been adjusted based on the {@link QuerySpecification} 
+     * set by {@link #setSpecification(QuerySpecification)}.
+     * This may be requested by a consumer before executing this query. 
+     * <br>An optional method.
+     * @return  the current effective query text,
+     *          or null if no query text is effective or available at the current query state
+     * @since 3.2 (DTP 1.7)
+     */
+	String getEffectiveQueryText();
+	
+	/**
+	 * Cancels this query to abort its execution if supported by the underlying data source. 
+	 * This method can be used by one thread to cancel a query that is being executed by another thread.
+     * <p>An optional method.  Driver implementation that does not support this operation
+     * should throw an UnsupportedOperationException.
+     * @throws OdaException     if data source error occurs or this method is called at an invalid state
+     * @throws UnsupportedOperationException    if this operation is not supported at any state
+     * @since 3.2 (DTP 1.7)
+	 */
+	void cancel() throws OdaException, UnsupportedOperationException;
+	
+}
+
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IResultSet.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IResultSet.java
new file mode 100644
index 0000000..9eed2a8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IResultSet.java
@@ -0,0 +1,317 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+import java.sql.Time;
+import java.sql.Timestamp;
+
+/**
+ * The interface used to access a set of data rows retrieved 
+ * by an IQuery object.
+ * An IResultSet object maintains a cursor pointing to its current row of data. 
+ * Initially, the cursor is positioned before the first row.  The next() method 
+ * moves the cursor to the next row until there are no more rows, or if the 
+ * MaxRows limit has been reached.
+ * <p>
+ * A result set column may be referenced by name or position.  
+ * <br>
+ * The case-sensitivity of a name is implementation-dependent.
+ * All indices in this interface are 1-based.
+ */
+public interface IResultSet
+{
+	/**
+	 * Returns the metadata associated with this IResultSet.
+	 * @return	the metadata for this IResultSet
+	 * @throws OdaException		if data source error occurs
+	 */
+	public IResultSetMetaData getMetaData( ) throws OdaException;
+	
+	/**
+	 * Closes the cursor associated with this IResultSet.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public void close( ) throws OdaException;
+	
+	/**
+	 * Specifies the maximum number of rows that can be fetched from this result set.
+	 * <br>An optional method.
+	 * @param max	maximum number of rows that can be fetched from this IResultSet;
+	 * 				zero means there is no limit.
+	 * 				This value should not be greater than the maximum number of rows
+	 * 				specified in the related IQuery.
+	 * @throws OdaException		if data source error occurs
+	 * @since	1.1
+	 */
+	public void setMaxRows( int max ) throws OdaException;
+	
+	/**
+	 * Moves the cursor down one row from its current position.
+	 * @return	true, if next data row exists and the maxRows limit has  
+	 * 			not been reached.
+	 * @throws OdaException		if data source error occurs
+	 */
+	public boolean next( ) throws OdaException;
+	
+	/**
+	 * Returns the current row's 1-based index position.
+	 * <br>An optional method.
+	 * @return	current row's 1-based index position
+	 * @throws OdaException		if data source error occurs
+	 */
+	public int getRow( ) throws OdaException;
+	
+	/**
+	 * Gets the value of the designated column in the current row as a String.
+	 * An ODA runtime driver may or may not support getString() on a non-String 
+	 * type column.  
+	 * The format of the returned string is implementation-dependent.
+	 * @param index	column number (1-based)
+	 * @return		the string value in the specific column of the current row
+	 * @throws OdaException		if data source error occurs
+	 */
+	public String getString( int index ) throws OdaException;
+	
+	/**
+	 * Gets the value of the designated column in the current row as a String.
+	 * An ODA runtime driver may or may not support getString() on a non-String 
+	 * type column.  
+	 * The format of the returned string is implementation-dependent.
+	 * @param columnName	column name
+	 * @return				the string value in the specific column of the current row
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public String getString( String columnName ) throws OdaException;
+	
+	/**
+	 * Gets the value of the designated column in the current row as an int.
+	 * @param index	column number (1-based)
+	 * @return		the integer value in the specific column of the current row
+	 * @throws OdaException		if data source error occurs
+	 */
+	public int getInt( int index ) throws OdaException;
+	
+	/**
+	 * Gets the value of the designated column in the current row as an int.
+	 * @param columnName	column name
+	 * @return				the integer value in the specific column of the current row
+	 * @throws OdaException		if data source error occurs
+	 */
+	public int getInt( String columnName ) throws OdaException;
+	
+	/**
+	 * Gets the value of the designated column in the current row as a double.
+	 * @param index	column number (1-based)
+	 * @return		the double value in the specific column of the current row
+	 * @throws OdaException		if data source error occurs
+	 */
+	public double getDouble( int index ) throws OdaException;
+	
+	/**
+	 * Gets the value of the designated column in the current row as a double.
+	 * @param columnName	column name
+	 * @return				the double value in the specific column of the current row
+	 * @throws OdaException		if data source error occurs
+	 */
+	public double getDouble( String columnName ) throws OdaException;
+	
+	/**
+	 * Gets the value of the designated column in the current row as a decimal.
+	 * @param index	column number (1-based)
+	 * @return		the decimal value in the specific column of the current row
+	 * @throws OdaException		if data source error occurs
+	 * @since	1.1
+	 */
+	public BigDecimal getBigDecimal( int index ) throws OdaException;
+	
+	/**
+	 * Gets the value of the designated column in the current row as a decimal.
+	 * @param columnName	column name
+	 * @return				the decimal value in the specific column of the current row
+	 * @throws OdaException		if data source error occurs
+	 * @since	1.1
+	 */
+	public BigDecimal getBigDecimal( String columnName ) throws OdaException;
+	
+	/**
+	 * Gets the value of the designated column in the current row as a java.sql.Date.
+	 * @param index	column number (1-based)
+	 * @return		the java.sql.Date value in the specific column of the current row
+	 * @throws OdaException		if data source error occurs
+	 */
+	public Date getDate( int index ) throws OdaException;
+	
+	/**
+	 * Gets the value of the designated column in the current row as a java.sql.Date.
+	 * @param columnName	column name
+	 * @return				the java.sql.Date value in the specific column of the current row
+	 * @throws OdaException		if data source error occurs
+	 */
+	public Date getDate( String columnName ) throws OdaException;
+	
+	/**
+	 * Gets the value of the designated column in the current row as a java.sql.Time.
+	 * @param index	column number (1-based)
+	 * @return		the java.sql.Time value in the specific column of the current row
+	 * @throws OdaException		if data source error occurs
+	 */
+	public Time getTime( int index ) throws OdaException;
+    
+	/**
+	 * Gets the value of the designated column in the current row as a java.sql.Time.
+	 * @param columnName	column name
+	 * @return				the java.sql.Time value in the specific column of the current row
+	 * @throws OdaException		if data source error occurs
+	 */
+	public Time getTime( String columnName ) throws OdaException;
+
+	/**
+	 * Gets the value of the designated column in the current row as a java.sql.Timestamp.
+	 * @param index	column number (1-based)
+	 * @return		the java.sql.Timestamp value in the specific column of the current row
+	 * @throws OdaException		if data source error occurs
+	 */
+	public Timestamp getTimestamp( int index ) throws OdaException;
+	
+	/**
+	 * Gets the value of the designated column in the current row as a java.sql.Timestamp.
+	 * @param columnName	column name
+	 * @return				the java.sql.Timestamp value in the specific column of the current row
+	 * @throws OdaException		if data source error occurs
+	 */
+	public Timestamp getTimestamp( String columnName ) throws OdaException;
+
+	/**
+	 * Gets the value of the designated column in the current row 
+	 * as an IBlob object.
+	 * <p><b>Note:</b> The driver must guarantee that
+	 * the returned object and its BLOB data would remain valid 
+	 * and accessible until this result set is closed.
+	 * @param index	column number (1-based)
+	 * @return		an IBlob object that represents the BLOB value 
+	 * 				in the specific column of the current row;
+	 * 				or <code>null</code> if the specific column has null value
+	 * @throws OdaException		if data source error occurs
+	 * @since		3.0
+	 */
+	public IBlob getBlob( int index ) throws OdaException;
+	
+	/**
+	 * Gets the value of the designated column in the current row 
+	 * as an IBlob object.
+	 * <p><b>Note:</b> The driver must guarantee that
+	 * the returned object and its BLOB data would remain valid 
+	 * and accessible until this result set is closed.
+	 * @param columnName	column name
+	 * @return		an IBlob object that represents the BLOB value 
+	 * 				in the specific column of the current row;
+	 * 				or <code>null</code> if the specific column has null value
+	 * @throws OdaException		if data source error occurs
+	 * @since		3.0
+	 */
+	public IBlob getBlob( String columnName ) throws OdaException;
+
+	/**
+	 * Gets the value of the designated column in the current row 
+	 * as an IClob object.
+	 * <p><b>Note:</b> The driver must guarantee that
+	 * the returned object and its CLOB data would remain valid 
+	 * and accessible until this result set is closed.
+	 * @param index	column number (1-based)
+	 * @return		an IClob object that represents the CLOB value 
+	 * 				in the specific column of the current row;
+	 * 				or <code>null</code> if the specific column has null value
+	 * @throws OdaException		if data source error occurs
+	 * @since		3.0
+	 */
+	public IClob getClob( int index ) throws OdaException;
+	
+	/**
+	 * Gets the value of the designated column in the current row 
+	 * as an IClob object.
+	 * <p><b>Note:</b> The driver must guarantee that
+	 * the returned object and its CLOB data would remain valid 
+	 * and accessible until this result set is closed.
+	 * @param columnName	column name
+	 * @return		an IClob object that represents the CLOB value 
+	 * 				in the specific column of the current row;
+	 * 				or <code>null</code> if the specific column has null value
+	 * @throws OdaException		if data source error occurs
+	 * @since		3.0
+	 */
+	public IClob getClob( String columnName ) throws OdaException;
+
+    /**
+     * Gets the value of the designated column in the current row 
+     * as a boolean.
+     * @param index column number (1-based)
+     * @return      the boolean value in the specific column of the current row
+     * @throws OdaException     if data source error occurs
+     * @since       3.1
+     */
+    public boolean getBoolean( int index ) throws OdaException;
+
+    /**
+     * Gets the value of the designated column in the current row 
+     * as a boolean.
+     * @param columnName    column name
+     * @return  the boolean value in the specific column of the current row
+     * @throws OdaException     if data source error occurs
+     * @since       3.1
+     */
+    public boolean getBoolean( String columnName ) throws OdaException;
+
+    /**
+     * Gets the value of the designated column in the current row as an {@link Object}.
+     * If the column value is intended to be sortable by its consumer, the type of Object 
+     * returned must implement the {@link Comparable} interface.
+     * @param index column number (1-based)
+     * @return      an {@link Object} value in the specific column of the current row
+     * @throws OdaException     if data source error occurs
+     * @since 3.2 (DTP 1.7)
+     */
+    Object getObject( int index ) throws OdaException;
+
+    /**
+     * Gets the value of the designated column in the current row as an {@link Object}.
+     * If the column value is intended to be sortable by its consumer, the type of Object 
+     * returned must implement the {@link Comparable} interface.
+     * @param columnName    column name
+     * @return  an {@link Object} value in the specific column of the current row; may be null
+     * @throws OdaException     if data source error occurs
+     * @since 3.2 (DTP 1.7)
+     */
+    Object getObject( String columnName ) throws OdaException;
+
+	/**
+	 * Returns whether the value read from the previous get&lt;type&gt; method
+	 * was invalid or null.  This needs to be called immediately after 
+	 * the call to a get&lt;type&gt; method.
+	 * @return 		true, if the previous get&lt;type&gt; call was invalid or null
+	 * @throws OdaException		if data source error occurs
+	 */
+	public boolean wasNull() throws OdaException;
+    
+	/**
+	 * Returns the column index of the specified column name.
+	 * @param columnName	name or alias of the column
+	 * @return				column index (1-based)
+	 * @throws OdaException		if data source error occurs
+	 */
+	public int findColumn( String columnName ) throws OdaException;
+}
+
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IResultSetMetaData.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IResultSetMetaData.java
new file mode 100644
index 0000000..b7b881c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/IResultSetMetaData.java
@@ -0,0 +1,135 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda;
+
+/**
+ * The interface that represents the meta-data
+ * of an IResultSet object.
+ * An IResultSetMetaData object represents a row containing meta-data 
+ * for each column in the result set.
+ * <p>
+ * <b>Note:</b> All indices in this interface are 1-based.
+ */
+public interface IResultSetMetaData
+{
+	/**
+	 * The constant indicating that a column does not allow 
+	 * <code>NULL</code> value.
+	 */
+	public static final int columnNoNulls = 0;
+	
+	/**
+	 * The constant indicating that a column allows 
+	 * <code>NULL</code> value.
+	 */
+	public static final int columnNullable = 1;
+	
+	/**
+	 * The constant indicating that the nullability of a column's 
+	 * values is unknown.
+	 */
+	public static final int columnNullableUnknown = 2;
+	
+	/**
+	 * Returns the number of columns in the corresponding IResultSet object.
+	 * @return	number of columns.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public int getColumnCount( ) throws OdaException;
+		
+	/**
+	 * Returns the name of the specific column.
+	 * @param index	column number (1-based).
+	 * @return		the column name.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public String getColumnName( int index ) throws OdaException; 
+	
+	/**
+	 * Returns the designated column's suggested title for use 
+	 * in the column heading and/or display name.
+	 * @param index column number (1-based).
+	 * @return		the column's suggested title.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public String getColumnLabel( int index ) throws OdaException;
+	
+	/**
+	 * Returns the data provider specific code of the column's data type.
+	 * The valid values are implementation-specific.
+	 * @param index	column number (1-based).
+	 * @return		the native data type code of the column.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public int getColumnType( int index ) throws OdaException;
+	
+	/**
+	 * Returns the data provider specific name of the column's data type.
+	 * @param index	column number (1-based).
+	 * @return		the native data type name of the column.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public String getColumnTypeName( int index ) throws OdaException;
+	
+	/**
+	 * Returns the display length of the specific column.
+	 * @param index	column number (1-based).
+	 * @return		the column display length, or -1 if unknown.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public int getColumnDisplayLength( int index ) throws OdaException;
+
+	/**
+	 * Returns the maximum number of decimal digits of the specific column.  
+	 * This method should only apply to numeric data types; however, it is 
+	 * up to an ODA data provider to determine those data types that are 
+	 * applicable. The maximum precision allowed on a data type may vary 
+	 * depending on the data provider.
+	 * <br>An optional method.
+	 * @param index	column number (1-based).
+	 * @return		the column precision, or -1 if not applicable.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public int getPrecision( int index ) throws OdaException;
+	
+	/**
+	 * Returns the maximum number of digits to the right of the decimal 
+	 * point of the specific column.  This method should only apply 
+	 * to numeric data types, however, it is up to an ODA data provider 
+	 * to determine those data types that are applicable. 
+	 * The maximum scale allowed on a data type may vary depending on the 
+	 * data provider.
+	 * <br>An optional method.
+	 * @param index	column number.
+	 * @return		the column scale, or -1 if not applicable.
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public int getScale( int index ) throws OdaException;
+	
+	/**
+	 * Indicates the nullability of values in the designated column. 
+	 * <br>An optional method.
+	 * @param index	column number
+	 * @return		the nullability status of the specified column;<br>
+	 * 				one of columnNoNulls,<br>
+	 * 				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+	 * 				columnNullable,<br>
+	 * 				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+	 * 				columnNullableUnknown. 
+	 * @throws OdaException		if data source error occurs.
+	 */
+	public int isNullable( int index ) throws OdaException;	
+}
+
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/LogConfiguration.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/LogConfiguration.java
new file mode 100644
index 0000000..1d986da
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/LogConfiguration.java
@@ -0,0 +1,149 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda;
+
+/**
+ * Encapsulates the trace logging configuration
+ * specified for an ODA run-time driver.
+ */
+public class LogConfiguration
+{
+    private String m_dataSourceId;
+    private int m_logLevel;
+    private String m_logDirectory;
+    private String m_logPrefix;
+	private String m_formatterClassName;
+    
+	/**
+	 * Constructor to set the trace logging configuration of the ODA runtime driver
+	 * for the given type of data source and its runtime connection(s).
+	 * @param dataSourceId      	The id of a type of data source to apply 
+	 * 								the logging configuration.  
+	 * 							    A null or empty String means to apply to all 
+	 * 							    data source types supported by this IDriver.
+	 * @param logLevel				The level of information to log. The value of a 
+	 * 								log level is implementation dependent of the Logger 
+	 * 								used.
+	 * @param logDirectory			The absolute path of the log directory.
+	 * @param logPrefix				The prefix used in the log file name. For example, 
+	 * 								it could be used in the log file format: 
+	 * 								&lt;logPrefix&gt;-YYYYMMDD-hhmmss.log, but its usage 
+	 * 								is implementation dependent.
+	 * @param formatterClassName	The fully qualified class name of a 
+	 * 								<code>LogFormatter</code> implementation class.
+	 */
+	public LogConfiguration( String dataSourceId,
+    						 int logLevel, 
+    						 String logDirectory,
+							 String logPrefix, 
+							 String formatterClassName ) 
+	{
+	    m_dataSourceId = dataSourceId;
+	    setLogConfiguration( logLevel, logDirectory,
+      		  logPrefix, formatterClassName );
+	}
+
+	/**
+	 * Constructor to set the trace logging configuration of the 
+	 * ODA runtime driver
+	 * for all data source types supported by the IDriver.
+	 */
+	public LogConfiguration( int logLevel, 
+					         String logDirectory,
+							 String logPrefix, 
+							 String formatterClassName ) 
+	{
+	    setLogConfiguration( logLevel, logDirectory,
+	            		  logPrefix, formatterClassName );
+	}
+
+    LogConfiguration()
+    {
+    }
+
+    private void setLogConfiguration( int logLevel, 
+					         String logDirectory,
+							 String logPrefix, 
+							 String formatterClassName ) 
+	{
+		m_logLevel = logLevel;
+
+		if( logDirectory != null && logDirectory.length() == 0 )
+		    logDirectory = null;
+		m_logDirectory = logDirectory;
+
+		if( logPrefix != null && logPrefix.length() == 0 )
+		    logPrefix = null;
+		m_logPrefix = logPrefix; 
+
+		if( formatterClassName != null && formatterClassName.length() == 0 )
+		    formatterClassName = null;
+		m_formatterClassName = formatterClassName;
+    }
+    
+    /**
+     * Returns the id of a type of data source to apply 
+	 * the logging configuration. 
+	 * A null or empty String means to apply to all 
+	 * data source types supported by this IDriver.
+     * @return 	the dataSourceId.
+     */
+    public String getDataSourceId()
+    {
+        return m_dataSourceId;
+    }
+    
+    /**
+     * Returns the fully qualified class name of a 
+	 * <code>LogFormatter</code> implementation class,
+	 * suitable for use by the driver-specific logging utility.
+     * @return  the formatterClassName, or null if none is configured.
+     */
+    public String getFormatterClassName()
+    {
+        return m_formatterClassName;
+    }
+    
+    /**
+     * Returns the absolute path of the log directory.
+     * @return  the logDirectory, or null if none is configured.
+     */
+    public String getLogDirectory()
+    {
+        return m_logDirectory;
+    }
+    
+    /**
+	 * Returns the level of information to log. The value of a 
+	 * log level is implementation dependent of the Logger used.
+     * @return  the logLevel.
+     */
+    public int getLogLevel()
+    {
+        return m_logLevel;
+    }
+    
+    /**
+     * Returns the prefix used in the log file name. 
+     * For example, it could be used in the log file format: 
+	 * &lt;logPrefix&gt;-YYYYMMDD-hhmmss.log, but its usage 
+	 * is implementation dependent.
+     * @return  the logPrefix, or null if none is configured.
+     */
+    public String getLogPrefix()
+    {
+        return m_logPrefix;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/OdaException.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/OdaException.java
new file mode 100644
index 0000000..900e5c4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/OdaException.java
@@ -0,0 +1,221 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda;
+
+/**
+ * An exception class that provides information on an ODA runtime driver 
+ * error or other data provider errors.
+ * <P>Each <code>OdaException</code> provides several kinds of information: 
+ * <UL>
+ * <LI> a string describing the error.  This is used as the Java Exception
+ * message, available via the method <code>getMessage</code>.
+ * <LI> a SQLSTATE string, which follows either the XOPEN SQLSTATE conventions
+ * or the SQL 99 conventions.
+ * The values of the SQLSTATE string are described in the corresponding spec.
+ * The method <code>IDataSetMetaData.getSQLStateType()</code>
+ * can be used to discover whether the driver returns the XOPEN type or
+ * the SQL 99 type.
+ * <LI> an integer exception code that is specific to each vendor.  Normally this will
+ * be the actual error code returned by the underlying data provider.
+ * <LI> a chain to the next OdaException.  This can be used to provide additional
+ * error information.
+ * </UL>
+ * <P>
+ * <b>Note:</b> The OdaException chain is different from the "Cause" that was 
+ * introduced in Java SDK 1.4 Throwable.  The chain is meant to handle situations 
+ * where multiple (possibly unrelated) OdaExceptions may occur.
+ */
+public class OdaException extends Exception
+{
+    private static final long serialVersionUID = 1L;
+
+    private String m_sqlState;
+	private int m_vendorCode;
+	private OdaException m_nextException;
+	private boolean m_isCauseSet = false;
+	private Throwable m_cause = null;
+	
+	/**
+	 * Instantiates an OdaException object whose message text defaults to null, 
+	 * SQLSTATE defaults to null, and vendorCode defaults to 0.
+	 */
+	public OdaException()
+	{
+		super();
+		m_sqlState = null;
+		m_vendorCode = 0;
+		m_nextException = null;
+	}
+	
+	/**
+	 * Instantiates an OdaException object with a message. 
+	 * The SQLSTATE defaults to null, and vendorCode defaults to 0.
+	 * @param message	description of the exception.
+	 */
+	public OdaException( String message )
+	{
+		super( message );
+		m_sqlState = null;
+		m_vendorCode = 0;
+		m_nextException = null;
+	}
+	
+	/**
+	 * Instantiates an OdaException object with a message and SQLSTATE.  
+	 * The vendorCode defaults to 0.
+	 * @param message	description of the exception.
+	 * @param sqlState	an XOPEN or SQL 99 code identifying the exception.
+	 */
+	public OdaException( String message, String sqlState )
+	{
+		super( message );
+		m_sqlState = sqlState;
+		m_vendorCode = 0;
+		m_nextException = null;
+	}
+	
+	/**
+	 * Instantiates a fully specified OdaException object.
+	 * @param message		description of the exception.
+	 * @param sqlState		an XOPEN or SQL 99 code identifying the exception.
+	 * @param vendorCode	a data provider vendor-specific exception code.
+	 */
+	public OdaException( String message, String sqlState, int vendorCode )
+	{
+		super( message );
+		m_sqlState = sqlState;
+		m_vendorCode = vendorCode;
+		m_nextException = null;
+	}
+	
+    /**
+     * Instantiates an OdaException object whose message text 
+     * defaults to null, and initialized with given cause.
+     * @param cause     cause of exception
+     */
+    public OdaException( Throwable cause )
+    {
+        super();
+        initCause( cause );
+    }
+    
+	/**
+	 * Returns the SQLSTATE of this <code>OdaException</code> object.
+	 * @return	the SQLSTATE value.
+	 */
+	public String getSQLState()
+	{
+		return m_sqlState;
+	}
+	
+	/**
+	 * Returns the vendor-specific exception code of this <code>OdaException</code>
+	 * object.
+	 * @return	the vendor's exception code.
+	 */
+	public int getErrorCode()
+	{
+		return m_vendorCode;
+	}
+	
+	/**
+	 * Returns the next <code>OdaException</code> chained to this <code>OdaException</code> 
+	 * object.
+	 * @return	the next <code>OdaException</code> object in the chain, 
+	 * 			null if there are none.
+	 */
+	public OdaException getNextException()
+	{
+		return m_nextException;
+	}
+	
+	/**
+	 * Adds an <code>OdaException</code> object to the end of the 
+	 * <code>OdaException</code> chain.
+	 * @param nextException	the new <code>OdaException</code> object to be
+	 * 						added to the <code>OdaException</code> chain.
+	 */
+	public void setNextException( OdaException nextException )
+	{
+		// iterate to the end of the exception chain, which is the 
+		// exception with a null for its next exception.
+		OdaException ex = this;
+		while( ex.m_nextException != null )
+			ex = ex.m_nextException;
+			
+		ex.m_nextException = nextException;
+	}
+
+	/**
+	 * Initializes the <i>cause</i> of this OdaException to the specified value.
+	 * The cause is the throwable that caused this OdaException to get thrown.
+	 * This method can be called at most once.
+	 * @param cause		the cause of this OdaException.  A <code>null</code> value 
+	 * 					is permitted and indicates that the cause is nonexistent or 
+	 * 					unknown.
+	 * @return			a reference to this <code>OdaException</code>.
+	 * @throws	IllegalArgumentException	if <code>cause</code> is this OdaException.
+	 * 			IllegalStateException		if this method has already been called on 
+	 * 										this <code>OdaException</code>.
+	 */
+	public Throwable initCause( Throwable cause ) throws IllegalArgumentException,
+														 IllegalStateException
+	{
+		// provides backward compatibility to JRE earlier than 1.4
+		if( m_isCauseSet )
+			throw new IllegalStateException( "initCause() cannot be called multiple times." );
+			
+		if( this == cause )
+			throw new IllegalArgumentException( "This cannot be caused by itself." );
+			
+		m_cause = cause;
+		m_isCauseSet = true;
+		return this;
+	}
+	
+	/**
+	 * Returns the cause of this <code>OdaException</code>, or <code>null</code> if the 
+	 * cause is nonexistent or unknown.
+	 * @return	the cause of this <code>OdaException</code>, or <code>null</code> if the 
+	 * 			cause is nonexistent or unknown.
+	 */
+	public Throwable getCause()
+	{
+		// provides backward compatibility to JRE earlier than 1.4
+		return m_cause;
+	}
+
+    /* (non-Javadoc)
+     * @see java.lang.Throwable#toString()
+     */
+    public String toString()
+    {
+        String message = super.toString();
+        
+        Throwable cause = getCause();
+        if( cause != null )
+        {        
+            // append cause message
+            String causeString = cause.toString();
+            if( causeString != null && causeString.length() > 0 )
+                message += " ;\n    " + causeString;     //$NON-NLS-1$
+        }
+        if( getNextException() != null )
+            message += " ;\n    " + getNextException();     //$NON-NLS-1$
+        
+        return message;
+    }
+        
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/SortSpec.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/SortSpec.java
new file mode 100644
index 0000000..47d6a62
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/SortSpec.java
@@ -0,0 +1,363 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+
+import com.ibm.icu.util.ULocale;
+
+/**
+ * A class that encapsulates one or more sort keys for 
+ * association with an IQuery.  
+ * The class is designed to be extendable to accommodate 
+ * additional ways of expressing a sort mode or key.
+ * <br><strong>Note</strong>: This class will be deprecated in the release after DTP 1.7, 
+ * being replaced by 
+ * {@link org.eclipse.datatools.connectivity.oda.spec.result.SortSpecification}.
+ */
+public class SortSpec
+{
+	/**
+	 * The constant indicating ascending sort order.
+	 */
+	public static final int sortAsc = 0;
+	
+	/**
+	 * The constant indicating descending sort order.
+	 */
+	public static final int sortDesc = 1;
+	
+	private int m_sortMode;
+	private List m_sortKeys;
+	
+	/**
+	 * Instantiates a <code>SortSpec</code> object for the defined
+	 * <code>sortMode</code>.
+	 * @param sortMode	the sort mode of this <code>SortSpec</code>; one of 
+	 * 					<code>IDataSetMetaData.sortModeNone</code>, 
+	 * 					<code>IDataSetMetaData.sortModeSingleOrder</code>,
+	 * 					<code>IDataSetMetaData.sortModeColumnOrder</code>,
+	 * 					<code>IDataSetMetaData.sortModeSingleColumn</code>.
+	 * @throws IllegalArgumentException	if the <code>sortMode</code> is not a 
+	 * 									valid value.
+	 */
+	public SortSpec( int sortMode )
+	{
+		if( sortMode != IDataSetMetaData.sortModeNone &&
+			sortMode != IDataSetMetaData.sortModeSingleOrder &&
+			sortMode != IDataSetMetaData.sortModeColumnOrder &&
+			sortMode != IDataSetMetaData.sortModeSingleColumn )
+			throw new IllegalArgumentException( 
+					Messages.bind( Messages.sortSpec_INVALID_SORT_MODE_SPECIFIED,
+									new Integer( sortMode ) ));
+		
+		m_sortMode = sortMode;
+		m_sortKeys = new ArrayList();
+	}
+	
+	/**
+	 * Specifies the dynamic sort criteria in this sort mode. 
+	 * The sort criteria are specified by an ODA consumer, using 
+	 * an ordered list of one or more sort keys. 
+	 * The adding sequence of each sortKey corresponds to the major-to-minor 
+	 * ordering.  Validation is done against this <code>SortSpec</code>'s sortMode; 
+	 * i.e. the method throws an exception when adding a sort key that does not
+	 * conform to the sortMode of this <code>SortSpec</code> object.
+	 * @param columnName	name of the result set column to apply dynamic sorting
+	 * 						on.  The specified column should be one of the columns
+	 * 						retrieved in a result set.
+	 * @param sortOrder		value that represents the sorting order; one of 
+	 * 						<code>sortAsc</code>, <code>sortDesc</code>.
+	 * @throws NullPointerException	if <code>columnName</code> is null.
+	 * @throws IllegalArgumentException if <code>columnName</code> is empty; or if 
+	 * 									<code>sortOrder</code> is not <code>sortAsc</code> 
+	 * 									or <code>sortDesc</code>.
+	 * @throws IllegalStateException	if the sortMode of this <code>SortSpec</code> 
+	 * 									is <code>IDataSetMetaData.sortModeNone</code>; 
+	 * 									or if the sortMode of this <code>SortSpec</code> 
+	 * 									is <code>IDataSetMetaData.sortModeSingleColumn</code>, 
+	 * 									and a sort key is already associated; or if the
+	 * 									sortMode of this <code>SortSpec</code> is 
+	 * 									<code>IDataSetMetaData.sortModeSingleOrder</code> 
+	 * 									and the sort order does not match existing sort orders.
+	 */
+	public void addSortKey( String columnName, int sortOrder )
+	{
+		if( columnName == null )
+			throw new NullPointerException( 
+					Messages.sortSpec_NULL_COLUMN_NAME_SPECIFIED );
+		
+		if( columnName.length() == 0 )
+			throw new IllegalArgumentException( 
+					Messages.bind( Messages.sortSpec_INVALID_COLUMN_NAME_SPECIFIED,
+									columnName ) );
+		
+		if( sortOrder != sortAsc && sortOrder != sortDesc )
+			throw new IllegalArgumentException( 
+					Messages.bind( Messages.sortSpec_INVALID_SORT_ORDER_SPECIFIED,
+									new Integer( sortOrder ) ));
+		
+		if( m_sortMode == IDataSetMetaData.sortModeNone )
+			throw new IllegalStateException( 
+					Messages.sortSpec_NO_DYNAMIC_SORT_KEY_FOR_SORTMODENONE );
+		
+		if( m_sortMode == IDataSetMetaData.sortModeSingleColumn &&
+			doGetSortKeyCount() > 0 )
+			throw new IllegalStateException( 
+					Messages.sortSpec_ONE_SORTCOLUMN_FOR_SINGLE_COLUMN_MODE );
+		
+		if( m_sortMode == IDataSetMetaData.sortModeSingleOrder &&
+			doGetSortKeyCount() > 0 )
+		{
+			// enforce that all sortOrders are the same
+			SortKey sortKey = (SortKey) m_sortKeys.get( 0 );
+			if( sortKey.getSortOrder() != sortOrder )
+				throw new IllegalStateException( 
+					Messages.sortSpec_ONE_SORTORDER_FOR_SINGLE_ORDER_MODE );
+		}
+		
+		SortKey sortKey = new SortKey( columnName, sortOrder );
+		m_sortKeys.add( sortKey );
+	}
+	
+	/**
+	 * Returns the sort mode of this <code>SortSpec</code> object.
+	 * @return	the sort mode of this <code>SortSpec</code>; one of 
+	 * 			<code>IDataSetMetaData.sortModeNone</code>, 
+	 * 			<code>IDataSetMetaData.sortModeSingleOrder</code>,
+	 * 			<code>IDataSetMetaData.sortModeColumnOrder</code>,
+	 * 			<code>IDataSetMetaData.sortModeSingleColumn</code>.
+	 */
+	public int getSortMode()
+	{
+		return m_sortMode;
+	}
+	
+	/**
+	 * Returns the number of sort keys associated with this <code>SortSpec</code> 
+	 * object.
+	 * @return	the number of sort keys associated with this 
+	 * 			<code>SortSpec</code> object.
+	 */
+	public int getSortKeyCount()
+	{
+		return doGetSortKeyCount();
+	}
+	
+	private int doGetSortKeyCount()
+	{
+		return m_sortKeys.size();
+	}
+	
+	/**
+	 * Returns the result set column name of the sort key at the <code>index</code> 
+	 * position.
+	 * @param index		index of the sort key (1-based).
+	 * @return			the name of the result set column for the specified sort key.
+	 * @throws 			IndexOutOfBoundsException if <code>index</code> is out of range 
+	 * 					(index < 1 || index > getSortKeyCount()).
+	 */
+	public String getSortColumn( int index )
+	{
+		validateIndex( index );
+	
+		// need to map from 1-based to 0-based collection index.
+		SortKey sortKey = (SortKey) m_sortKeys.get( index - 1 );
+		return sortKey.getColumnName();
+	}
+	
+	/**
+	 * Returns the sort order of the sort key at the <code>index</code> position.
+	 * @param index		index of the sort key (1-based).
+	 * @return			the sort order for the specified sort key.
+	 * @throws 			IndexOutOfBoundsException if <code>index</code> is out of range 
+	 * 					(index < 1 || index > getSortKeyCount()).
+	 */
+	public int getSortOrder( int index )
+	{
+		validateIndex( index );
+	
+		// need to map from 1-based to 0-based collection index.
+		SortKey sortKey = (SortKey) m_sortKeys.get( index - 1 );
+		return sortKey.getSortOrder();
+	}
+	
+	private void validateIndex( int index )
+	{
+		int count = doGetSortKeyCount();
+		if( index < 1 || index > count )
+			throw new IndexOutOfBoundsException( 
+                    Messages.bind( Messages.sortSpec_INDEX_OUT_OF_BOUND,
+                            new Integer( index ), new Integer( count ) ));
+	}
+	
+	/**
+	 * Returns an array of all column names for the sort key of a 
+	 * <code>sortModeSingleOrder</code> <code>SortSpec</code> object.
+	 * @return	an array of all column names for the sort keys of a 
+	 * 			<code>sortModeSingleOrder</code> <code>SortSpec</code> 
+	 * 			object; an empty array if no sort keys are associated 
+	 * 			with this <code>SortSpec</code>.
+	 * @throws IllegalStateException	if this <code>SortSpec</code>'s sort 
+	 * 									mode is not <code>sortModeSingleOrder</code>.
+	 */
+	public String[] getSortColumns()
+	{
+		if( m_sortMode != IDataSetMetaData.sortModeSingleOrder )
+			throw new IllegalStateException( 
+					Messages.sortSpec_ONLY_IN_SINGLE_ORDER_MODE );
+		
+		int size = doGetSortKeyCount();
+		String[] sortColumns = new String[ size ];
+		
+		for( int i = 0; i < size; i++ )
+		{
+			SortKey sortKey = (SortKey) m_sortKeys.get( i );
+			String columnName = sortKey.getColumnName();
+			sortColumns[i] = columnName;
+		}
+
+		return sortColumns;
+	}
+	
+	/**
+	 * Returns the sort order for the sort keys of a <code>sortModeSingleOrder</code>
+	 * <code>SortSpec</code> object.
+	 * @return	the sort order for the sort keys of a <code>sortModeSingleOrder</code> 
+	 * 			<code>SortSpec</code> object; the default value, <code>sortAsc</code>, 
+	 * 			if no sort keys are associated with this <code>SortSpec</code>.
+	 * @throws IllegalStateException	if this <code>SortSpec</code>'s sort 
+	 * 									mode is not <code>sortModeSingleOrder</code>.
+	 */
+	public int getSortOrder()
+	{
+		if( m_sortMode != IDataSetMetaData.sortModeSingleOrder )
+			throw new IllegalStateException( 
+					Messages.sortSpec_ONLY_IN_SINGLE_ORDER_MODE );
+		
+		// if there are no sortKeys associated with this SortSpec, then it does not
+		// matter what we return here.  Since the caller will get an empty string array
+		// from getSortColumns(), it would not know which columns to apply this value for.
+		if( doGetSortKeyCount() == 0 )
+			return sortAsc;
+		
+		// since all the sort orders will be the same (enforced by addSortKey()),
+		// we could just return the sort order of any of our sort keys.
+		SortKey sortKey = (SortKey) m_sortKeys.get( 0 );
+		return sortKey.getSortOrder();
+	}
+	
+	/**
+	 * Sets the locale of this <code>SortSpec</code>. Enables this <code>SortSpec</code> 
+	 * to return localized error messages. The default locale is <code>en_US</code>.
+	 * @param locale	the locale used for localizing error messages.
+	 * @deprecated	obsolete; migrated to use NLS Messages class
+	 */
+	public void setLocale( ULocale locale )
+	{
+//		m_locale = locale;
+	}
+	
+	/**
+	 * Returns a string representation of this <code>SortSpec</code>.
+	 * @return	a string representation of this <code>SortSpec</code>.
+	 */
+	public String toString()
+	{
+		// override default toString() for convenient debugging and logging
+		return "Sort Mode: " + sortModeAsString( m_sortMode ) +  //$NON-NLS-1$
+			   ", Sort Keys: " + m_sortKeys; //$NON-NLS-1$
+	}
+	
+	/* 
+	 * A helper function for converting a sortOrder to its string representation.
+	 */	
+	private static String sortOrderAsString( int sortOrder )
+	{
+		switch( sortOrder )
+		{
+			case sortAsc:
+				return "Ascending"; //$NON-NLS-1$
+				
+			case sortDesc:
+				return "Descending"; //$NON-NLS-1$
+				
+			default:
+				// addSortKey() validation should ensure correct value
+				return ""; //$NON-NLS-1$
+		}
+	}
+	
+	/*
+	 * A helper function for converting a sortMode to its string representation.
+	 */ 	
+	private static String sortModeAsString( int sortMode )
+	{
+		switch( sortMode )
+		{
+			case IDataSetMetaData.sortModeNone:
+				return "sortModeNone"; //$NON-NLS-1$
+			
+			case IDataSetMetaData.sortModeSingleOrder:
+				return "sortModeSingleOrder"; //$NON-NLS-1$
+			
+			case IDataSetMetaData.sortModeColumnOrder:
+				return "sortModeColumnOrder"; //$NON-NLS-1$
+			
+			case IDataSetMetaData.sortModeSingleColumn:
+				return "sortModeSingleColumn"; //$NON-NLS-1$
+			
+			default:
+				// constructor checks ensure correct values
+				return ""; //$NON-NLS-1$
+		}
+	}
+	
+	/*
+	 * A simple private helper class that stores the state of 
+	 * each sort key.
+	 */
+	private static final class SortKey
+	{
+		private String m_columnName;
+		private int m_sortOrder;
+		
+		// the arguments are to be validated by SortSpec class
+		private SortKey( String columnName, int sortOrder )
+		{
+			m_columnName = columnName;
+			m_sortOrder = sortOrder;
+		}
+		
+		private String getColumnName()
+		{
+			return m_columnName;
+		}
+		
+		private int getSortOrder()
+		{
+			return m_sortOrder;
+		}
+		
+		public String toString()
+		{
+			return "{" + m_columnName + ", " +  //$NON-NLS-1$ //$NON-NLS-2$
+				   sortOrderAsString( m_sortOrder ) + "}"; //$NON-NLS-1$
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/.gitignore b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/.gitignore
new file mode 100644
index 0000000..d1c5347
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/.gitignore
@@ -0,0 +1 @@
+*ver.scc
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/Blob.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/Blob.java
new file mode 100644
index 0000000..df0bc5c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/Blob.java
@@ -0,0 +1,82 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.impl;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+
+import org.eclipse.datatools.connectivity.oda.IBlob;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+/**
+ * Default implementation of IBlob for use by ODA runtime drivers.
+ * <code>Blob</code> handles common types of raw data that represent
+ * a BLOB value.
+ * @deprecated  As of 3.1.2, see package documentation.
+ */
+public class Blob implements IBlob
+{
+
+    private byte[] m_byteArray = null;   
+    
+    private InputStream m_stream = null;
+    private long m_length = Long.MIN_VALUE;
+    
+    Blob()
+    {
+        
+    }
+    
+    /**
+     * Create a new Blob from a byte array.
+     * @param byteArray		byte array representing the blob.
+     */
+    public Blob( byte[] byteArray )
+    {
+        m_byteArray = byteArray;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IBlob#getBinaryStream()
+     */
+    public InputStream getBinaryStream() throws OdaException
+    {
+        if ( m_stream == null )
+            m_stream = new ByteArrayInputStream( m_byteArray );
+        
+        return m_stream;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IBlob#getBytes(long, int)
+     */
+    public byte[] getBytes( long position, int length ) throws OdaException
+    {
+        // let the oda.consumer.helper provides default implementation
+	    throw new UnsupportedOperationException();
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IBlob#length()
+     */
+    public long length() throws OdaException
+    {
+        if ( m_length == Long.MIN_VALUE )
+            m_length = m_byteArray.length;
+        
+        return m_length;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/Clob.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/Clob.java
new file mode 100644
index 0000000..d3b963a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/Clob.java
@@ -0,0 +1,82 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.impl;
+
+import java.io.Reader;
+import java.io.StringReader;
+
+import org.eclipse.datatools.connectivity.oda.IClob;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+/**
+ * Default implementation of IClob for use by ODA runtime drivers.
+ * <code>Clob</code> handles common types of raw data that represent
+ * a CLOB value.
+ * @deprecated  As of 3.1.2, see package documentation.
+ */
+public class Clob implements IClob
+{
+    
+    private String m_string = null;
+
+    private Reader m_reader = null;
+    private long m_length = Long.MIN_VALUE;
+    
+    Clob()
+    {        
+    }
+    
+    /**
+     * Create a new Clob from a <code>String</code>.
+     * @param string		String representing the clob.
+     */
+    public Clob( String string )
+    {
+        m_string = string;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IClob#getCharacterStream()
+     */
+    public Reader getCharacterStream() throws OdaException
+    {
+        if ( m_reader == null )
+            m_reader = new StringReader( m_string );
+        
+        return m_reader;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IClob#getSubString()
+     */
+	public String getSubString( long position, int length ) 
+		throws OdaException
+	{
+        // let the oda.consumer.helper provides default implementation
+	    throw new UnsupportedOperationException();
+	}
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IClob#length()
+     */
+    public long length() throws OdaException
+    {
+        if ( m_length == Long.MIN_VALUE )
+            m_length = m_string.length();
+        
+        return m_length;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/SimpleConnection.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/SimpleConnection.java
new file mode 100644
index 0000000..75781cc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/SimpleConnection.java
@@ -0,0 +1,131 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.impl;
+
+import java.util.Properties;
+import org.eclipse.datatools.connectivity.oda.IConnection;
+import org.eclipse.datatools.connectivity.oda.IDataSetMetaData;
+import org.eclipse.datatools.connectivity.oda.IQuery;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+import com.ibm.icu.util.ULocale;
+
+/**
+ * Default implementation of IConnection 
+ * for a simple ODA runtime driver.
+ * @deprecated  As of 3.1.2, see package documentation.
+ */
+public class SimpleConnection implements IConnection
+{
+    private boolean m_isOpen = false;
+    
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IConnection#open(java.util.Properties)
+	 */
+	public void open( Properties connProperties ) throws OdaException
+	{
+	    setIsOpen( true );
+		// TODO data source dependent
+		throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IConnection#setAppContext(java.lang.Object)
+	 */
+	public void setAppContext( Object context ) throws OdaException
+	{
+	    // do nothing; assumes no support for pass-through context
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IConnection#close()
+	 */
+	public void close() throws OdaException
+	{
+	    setIsOpen( false );
+		// TODO data source dependent
+		throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IConnection#isOpen()
+	 */
+	public boolean isOpen() throws OdaException
+	{
+		return m_isOpen;
+	}
+
+	/**
+	 * Set the open state of this connection.
+     * @param isOpen Indicates whether this connection is open.
+     */
+    protected void setIsOpen( boolean isOpen )
+    {
+        m_isOpen = isOpen;
+    }
+
+    /*
+	 * @see org.eclipse.datatools.connectivity.oda.IConnection#getMetaData(java.lang.String)
+	 */
+	public IDataSetMetaData getMetaData( String dataSetType ) throws OdaException
+	{
+	    // ignores the dataSetType, 
+	    // assuming the simple driver supports only one type
+		return new SimpleDataSetMetaData( this );
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IConnection#newQuery(java.lang.String)
+	 */
+	public IQuery newQuery( String dataSetType ) throws OdaException
+	{
+	    // ignores the dataSetType, 
+	    // assuming the simple driver supports only one type
+		return new SimpleQuery();
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IConnection#getMaxQueries()
+	 */
+	public int getMaxQueries() throws OdaException
+	{
+		return 0;	// no limit
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IConnection#commit()
+	 */
+	public void commit() throws OdaException
+	{
+	    // do nothing; assumes no transaction support
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IConnection#rollback()
+	 */
+	public void rollback() throws OdaException
+	{
+	    throw new UnsupportedOperationException();
+	}
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IConnection#setLocale(com.ibm.icu.util.ULocale)
+     */
+    public void setLocale( ULocale uLocale ) throws OdaException
+    {
+        throw new UnsupportedOperationException();
+    }
+	
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/SimpleDataSetMetaData.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/SimpleDataSetMetaData.java
new file mode 100644
index 0000000..f50eaa0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/SimpleDataSetMetaData.java
@@ -0,0 +1,148 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.impl;
+
+import org.eclipse.datatools.connectivity.oda.IConnection;
+import org.eclipse.datatools.connectivity.oda.IDataSetMetaData;
+import org.eclipse.datatools.connectivity.oda.IResultSet;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+/**
+ * Default implementation of IDataSetMetaData 
+ * for a simple ODA runtime driver.
+ * @deprecated  As of 3.1.2, see package documentation.
+ */
+public class SimpleDataSetMetaData implements IDataSetMetaData
+{
+	private IConnection m_connection;
+	
+	protected SimpleDataSetMetaData( IConnection connection )
+	{
+		m_connection = connection;
+	}
+	
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getConnection()
+	 */
+	public IConnection getConnection() throws OdaException
+	{
+		return m_connection;
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getDataSourceObjects(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
+	 */
+	public IResultSet getDataSourceObjects( String catalog, String schema, String object, String version ) throws OdaException
+	{
+	    throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getDataSourceMajorVersion()
+	 */
+	public int getDataSourceMajorVersion() throws OdaException
+	{
+		return 0;
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getDataSourceMinorVersion()
+	 */
+	public int getDataSourceMinorVersion() throws OdaException
+	{
+		return 0;
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getDataSourceProductName()
+	 */
+	public String getDataSourceProductName() throws OdaException
+	{
+		return "Simple Data Source"; //$NON-NLS-1$
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getDataSourceProductVersion()
+	 */
+	public String getDataSourceProductVersion() throws OdaException
+	{
+		return Integer.toString( getDataSourceMajorVersion() ) + "." +  //$NON-NLS-1$
+			   Integer.toString( getDataSourceMinorVersion() );
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getSQLStateType()
+	 */
+	public int getSQLStateType() throws OdaException
+	{
+		return IDataSetMetaData.sqlStateSQL99;
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#supportsMultipleResultSets()
+	 */
+	public boolean supportsMultipleResultSets() throws OdaException
+	{
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#supportsMultipleOpenResults()
+	 */
+	public boolean supportsMultipleOpenResults() throws OdaException
+	{
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#supportsNamedResultSets()
+	 */
+	public boolean supportsNamedResultSets() throws OdaException
+	{
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#supportsNamedParameters()
+	 */
+	public boolean supportsNamedParameters() throws OdaException
+	{
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#supportsInParameters()
+	 */
+	public boolean supportsInParameters() throws OdaException
+	{
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#supportsOutParameters()
+	 */
+	public boolean supportsOutParameters() throws OdaException
+	{
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getSortMode()
+	 */
+	public int getSortMode()
+	{
+		return IDataSetMetaData.sortModeNone;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/SimpleDriver.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/SimpleDriver.java
new file mode 100644
index 0000000..e2b50e1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/SimpleDriver.java
@@ -0,0 +1,75 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2005 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.impl;
+
+import org.eclipse.datatools.connectivity.oda.IConnection;
+import org.eclipse.datatools.connectivity.oda.IDriver;
+import org.eclipse.datatools.connectivity.oda.LogConfiguration;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+/**
+ * Default implementation of IDriver 
+ * for a simple ODA runtime driver.
+ * @deprecated  As of 3.1.2, see package documentation.
+ */
+public class SimpleDriver implements IDriver
+{
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IDriver#getConnection(java.lang.String)
+	 */
+	public IConnection getConnection( String dataSourceType ) throws OdaException
+	{
+		return newConnection( dataSourceType );
+	}
+	
+	/**
+	 * Override to return a specific IConnection instance based on the 
+	 * type of data source.
+	 * @param connectionType	the type of the IConnection to instantiate for the data source.
+	 * @return	an IConnection instance.
+	 * @throws OdaException	if data source error occurs.
+	 */
+	protected IConnection newConnection( String dataSourceType ) throws OdaException
+	{
+	    // assumes that only one type of data source is supported by the simple driver;
+	    // ignores given argument
+		return new SimpleConnection();
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IDriver#setLogConfiguration(org.eclipse.datatools.connectivity.oda.LogConfiguration)
+	 */
+	public void setLogConfiguration( LogConfiguration logConfig ) throws OdaException
+	{
+		// do nothing; assumes simple driver has no logging
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IDriver#getMaxConnections()
+	 */
+	public int getMaxConnections() throws OdaException
+	{
+		return 0;	// no limit
+	}
+	
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IDriver#setAppContext(java.lang.Object)
+	 */
+	public void setAppContext( Object context ) throws OdaException
+	{
+	    // do nothing; assumes no support for pass-through context
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/SimpleParameterMetaData.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/SimpleParameterMetaData.java
new file mode 100644
index 0000000..2574b9b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/SimpleParameterMetaData.java
@@ -0,0 +1,97 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2005, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.impl;
+
+import org.eclipse.datatools.connectivity.oda.IParameterMetaData;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+/**
+ * Default implementation of IParameterMetaData 
+ * for a simple ODA runtime driver.
+ * @deprecated  As of 3.1.2, see package documentation.
+ */
+public class SimpleParameterMetaData implements IParameterMetaData 
+{
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getParameterCount()
+	 */
+	public int getParameterCount() throws OdaException 
+	{
+        // TODO data source dependent
+		throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getParameterMode(int)
+	 */
+	public int getParameterMode( int param ) throws OdaException 
+	{
+        // TODO data source dependent
+		return IParameterMetaData.parameterModeUnknown;
+	}
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getParameterName(int)
+     */
+    public String getParameterName( int param ) throws OdaException
+    {
+        // TODO data source dependent
+        return null;    // name is not available
+    }
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getParameterType(int)
+	 */
+	public int getParameterType( int param ) throws OdaException 
+	{
+        // TODO data source dependent
+		throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getParameterTypeName(int)
+	 */
+	public String getParameterTypeName( int param ) throws OdaException 
+	{
+        // TODO data source dependent
+		return null; 	// unknown
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getPrecision(int)
+	 */
+	public int getPrecision( int param ) throws OdaException 
+	{
+		return -1;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getScale(int)
+	 */
+	public int getScale( int param ) throws OdaException 
+	{
+		return -1;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#isNullable(int)
+	 */
+	public int isNullable( int param ) throws OdaException 
+	{
+		return IParameterMetaData.parameterNullableUnknown;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/SimpleQuery.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/SimpleQuery.java
new file mode 100644
index 0000000..4df5c85
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/SimpleQuery.java
@@ -0,0 +1,349 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.impl;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+import java.sql.Time;
+import java.sql.Timestamp;
+import org.eclipse.datatools.connectivity.oda.IParameterMetaData;
+import org.eclipse.datatools.connectivity.oda.IResultSet;
+import org.eclipse.datatools.connectivity.oda.IResultSetMetaData;
+import org.eclipse.datatools.connectivity.oda.IQuery;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.SortSpec;
+import org.eclipse.datatools.connectivity.oda.spec.QuerySpecification;
+
+/**
+ * Default implementation of IQuery 
+ * for a simple ODA runtime driver.
+ * @deprecated  As of 3.1.2, see package documentation.
+ */
+public class SimpleQuery implements IQuery
+{
+	private int m_maxRows;
+	
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#prepare(java.lang.String)
+	 */
+	public void prepare( String queryText ) throws OdaException
+	{
+		// TODO data source dependent
+		throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+	}
+	
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setAppContext(java.lang.Object)
+	 */
+	public void setAppContext( Object context ) throws OdaException
+	{
+	    // do nothing; assumes no support for pass-through context
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#close()
+	 */
+	public void close() throws OdaException
+	{
+		// TODO data source dependent
+		throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#getMetaData()
+	 */
+	public IResultSetMetaData getMetaData() throws OdaException
+	{
+		// TODO Override to return a specific IResultSetMetaData instance.
+		return new SimpleResultSetMetaData();
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#executeQuery()
+	 */
+	public IResultSet executeQuery() throws OdaException
+	{
+	    // TODO Override to return a specific IResultSet instance.
+		IResultSet resultSet = new SimpleResultSet();
+		resultSet.setMaxRows( getMaxRows() );
+		return resultSet;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setProperty(java.lang.String, java.lang.String)
+	 */
+	public void setProperty( String name, String value ) throws OdaException
+	{
+		// do nothing; assumes no query property
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setMaxRows(int)
+	 */
+	public void setMaxRows( int max ) throws OdaException
+	{
+	    m_maxRows = max;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#getMaxRows()
+	 */
+	public int getMaxRows() throws OdaException
+	{
+		return m_maxRows;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#clearInParameters()
+	 */
+	public void clearInParameters() throws OdaException
+	{
+		// only applies to input parameter
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setInt(java.lang.String, int)
+	 */
+	public void setInt( String parameterName, int value ) throws OdaException
+	{
+		// only applies to named input parameter
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setInt(int, int)
+	 */
+	public void setInt( int parameterId, int value ) throws OdaException
+	{
+		// only applies to input parameter
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setDouble(java.lang.String, double)
+	 */
+	public void setDouble( String parameterName, double value ) throws OdaException
+	{
+		// only applies to named input parameter
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setDouble(int, double)
+	 */
+	public void setDouble( int parameterId, double value ) throws OdaException
+	{
+		// only applies to input parameter
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setBigDecimal(java.lang.String, java.math.BigDecimal)
+	 */
+	public void setBigDecimal( String parameterName, BigDecimal value ) throws OdaException
+	{
+		// only applies to named input parameter
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setBigDecimal(int, java.math.BigDecimal)
+	 */
+	public void setBigDecimal( int parameterId, BigDecimal value ) throws OdaException
+	{
+		// only applies to input parameter
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setString(java.lang.String, java.lang.String)
+	 */
+	public void setString( String parameterName, String value ) throws OdaException
+	{
+		// only applies to named input parameter
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setString(int, java.lang.String)
+	 */
+	public void setString( int parameterId, String value ) throws OdaException
+	{
+		// only applies to input parameter
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setDate(java.lang.String, java.sql.Date)
+	 */
+	public void setDate( String parameterName, Date value ) throws OdaException
+	{
+		// only applies to named input parameter
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setDate(int, java.sql.Date)
+	 */
+	public void setDate( int parameterId, Date value ) throws OdaException
+	{
+		// only applies to input parameter
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setTime(java.lang.String, java.sql.Time)
+	 */
+	public void setTime( String parameterName, Time value ) throws OdaException
+	{
+		// only applies to named input parameter
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setTime(int, java.sql.Time)
+	 */
+	public void setTime( int parameterId, Time value ) throws OdaException
+	{
+		// only applies to input parameter
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setTimestamp(java.lang.String, java.sql.Timestamp)
+	 */
+	public void setTimestamp( String parameterName, Timestamp value ) throws OdaException
+	{
+		// only applies to named input parameter
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setTimestamp(int, java.sql.Timestamp)
+	 */
+	public void setTimestamp( int parameterId, Timestamp value ) throws OdaException
+	{
+		// only applies to input parameter
+	}
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setBoolean(java.lang.String, boolean)
+     */
+    public void setBoolean( String parameterName, boolean value )
+            throws OdaException
+    {
+        // only applies to named input parameter
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setBoolean(int, boolean)
+     */
+    public void setBoolean( int parameterId, boolean value )
+            throws OdaException
+    {
+        // only applies to input parameter
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setObject(java.lang.String, java.lang.Object)
+     */
+    public void setObject( String parameterName, Object value )
+            throws OdaException
+    {
+        // only applies to named input parameter
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setObject(int, java.lang.Object)
+     */
+    public void setObject( int parameterId, Object value ) throws OdaException
+    {
+        // only applies to input parameter
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setNull(java.lang.String)
+     */
+    public void setNull( String parameterName ) throws OdaException
+    {
+        // only applies to named input parameter
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setNull(int)
+     */
+    public void setNull( int parameterId ) throws OdaException
+    {
+        // only applies to input parameter        
+    }
+
+    /*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#findInParameter(java.lang.String)
+	 */
+	public int findInParameter( String parameterName ) throws OdaException
+	{
+		// only applies to named input parameter
+		return 0;
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#getParameterMetaData()
+	 */
+	public IParameterMetaData getParameterMetaData() throws OdaException
+	{
+        // sub-class may override;
+        // @see default implementation in SimpleParameterMetaData class
+		return null;	// has no parameters
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#setSortSpec(org.eclipse.datatools.connectivity.oda.SortSpec)
+	 */
+	public void setSortSpec( SortSpec sortBy ) throws OdaException
+	{
+        // TODO data source dependent
+        throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+	}
+
+	/*
+	 * @see org.eclipse.datatools.connectivity.oda.IQuery#getSortSpec()
+	 */
+	public SortSpec getSortSpec() throws OdaException
+	{
+		// only applies to sorting
+		return null;
+	}
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setSpecification(org.eclipse.datatools.connectivity.oda.spec.QuerySpecification)
+     */
+    public void setSpecification( QuerySpecification querySpec )
+            throws OdaException, UnsupportedOperationException
+    {
+        throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#getSpecification()
+     */
+    public QuerySpecification getSpecification()
+    {
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#getEffectiveQueryText()
+     */
+    public String getEffectiveQueryText()
+    {
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#cancel()
+     */
+    public void cancel() throws OdaException, UnsupportedOperationException
+    {
+        throw new UnsupportedOperationException();
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/SimpleResultSet.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/SimpleResultSet.java
new file mode 100644
index 0000000..a5b28f3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/SimpleResultSet.java
@@ -0,0 +1,296 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.impl;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+import java.sql.Time;
+import java.sql.Timestamp;
+
+import org.eclipse.datatools.connectivity.oda.IBlob;
+import org.eclipse.datatools.connectivity.oda.IClob;
+import org.eclipse.datatools.connectivity.oda.IResultSet;
+import org.eclipse.datatools.connectivity.oda.IResultSetMetaData;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+/**
+ * Default implementation of IResultSet 
+ * for a simple ODA runtime driver.
+ * @deprecated  As of 3.1.2, see package documentation.
+ */
+public class SimpleResultSet implements IResultSet
+{
+	private int m_maxRows;
+	
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getMetaData()
+	 */
+	public IResultSetMetaData getMetaData() throws OdaException
+	{
+		return new SimpleResultSetMetaData();
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#setMaxRows(int)
+	 */
+	public void setMaxRows( int max ) throws OdaException
+	{
+		m_maxRows = max;
+	}
+	
+	/**
+	 * Returns the maximum number of rows that can be fetched from this result set.
+	 * @return the maximum number of rows to fetch.
+	 */
+	protected int getMaxRows()
+	{
+		return m_maxRows;
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#next()
+	 */
+	public boolean next() throws OdaException
+	{
+		// TODO data source dependent
+		throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#close()
+	 */
+	public void close() throws OdaException
+	{
+		// TODO data source dependent
+		throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getRow()
+	 */
+	public int getRow() throws OdaException
+	{
+		// TODO data source dependent
+		throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getString(int)
+	 */
+	public String getString( int index ) throws OdaException
+	{
+		// TODO data source dependent
+		throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getString(java.lang.String)
+	 */
+	public String getString( String columnName ) throws OdaException
+	{
+	    return getString( findColumn( columnName ) );
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getInt(int)
+	 */
+	public int getInt( int index ) throws OdaException
+	{
+		// TODO data source dependent
+		throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getInt(java.lang.String)
+	 */
+	public int getInt( String columnName ) throws OdaException
+	{
+	    return getInt( findColumn( columnName ) );
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getDouble(int)
+	 */
+	public double getDouble( int index ) throws OdaException
+	{
+		// TODO data source dependent
+		throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getDouble(java.lang.String)
+	 */
+	public double getDouble( String columnName ) throws OdaException
+	{
+	    return getDouble( findColumn( columnName ) );
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getBigDecimal(int)
+	 */
+	public BigDecimal getBigDecimal( int index ) throws OdaException
+	{
+		// TODO data source dependent
+		throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getBigDecimal(java.lang.String)
+	 */
+	public BigDecimal getBigDecimal( String columnName ) throws OdaException
+	{
+	    return getBigDecimal( findColumn( columnName ) );
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getDate(int)
+	 */
+	public Date getDate( int index ) throws OdaException
+	{
+		// TODO data source dependent
+		throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getDate(java.lang.String)
+	 */
+	public Date getDate( String columnName ) throws OdaException
+	{
+	    return getDate( findColumn( columnName ) );
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getTime(int)
+	 */
+	public Time getTime( int index ) throws OdaException
+	{
+		// TODO data source dependent
+		throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getTime(java.lang.String)
+	 */
+	public Time getTime( String columnName ) throws OdaException
+	{
+	    return getTime( findColumn( columnName ) );
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getTimestamp(int)
+	 */
+	public Timestamp getTimestamp( int index ) throws OdaException
+	{
+		// TODO data source dependent
+		throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#getTimestamp(java.lang.String)
+	 */
+	public Timestamp getTimestamp( String columnName ) throws OdaException
+	{
+	    return getTimestamp( findColumn( columnName ) );
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#wasNull()
+	 */
+	public boolean wasNull() throws OdaException
+	{
+		// TODO data source dependent
+		throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSet#findColumn(java.lang.String)
+	 */
+	public int findColumn( String columnName ) throws OdaException
+	{
+		// TODO data source dependent
+		throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+	}
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getBlob(int)
+     */
+    public IBlob getBlob( int index ) throws OdaException
+    {
+		// TODO data source dependent
+		throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getBlob(java.lang.String)
+     */
+    public IBlob getBlob( String columnName ) throws OdaException
+    {
+		// TODO data source dependent
+		throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getClob(int)
+     */
+    public IClob getClob( int index ) throws OdaException
+    {
+		// TODO data source dependent
+		throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getClob(java.lang.String)
+     */
+    public IClob getClob( String columnName ) throws OdaException
+    {
+		// TODO data source dependent
+		throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getBoolean(int)
+     */
+    public boolean getBoolean( int index ) throws OdaException
+    {
+        // TODO data source dependent
+        throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getBoolean(java.lang.String)
+     */
+    public boolean getBoolean( String columnName ) throws OdaException
+    {
+        return getBoolean( findColumn( columnName ) );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getObject(int)
+     */
+    public Object getObject( int index ) throws OdaException
+    {
+        // TODO data source dependent
+        throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getObject(java.lang.String)
+     */
+    public Object getObject( String columnName ) throws OdaException
+    {
+        return getObject( findColumn( columnName ) );
+    }   
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/SimpleResultSetMetaData.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/SimpleResultSetMetaData.java
new file mode 100644
index 0000000..96eeaf7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/SimpleResultSetMetaData.java
@@ -0,0 +1,102 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.impl;
+
+import org.eclipse.datatools.connectivity.oda.IResultSetMetaData;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+/**
+ * Default implementation of IResultSetMetaData 
+ * for a simple ODA runtime driver.
+ * @deprecated  As of 3.1.2, see package documentation.
+ */
+public class SimpleResultSetMetaData implements IResultSetMetaData
+{
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getColumnCount()
+	 */
+	public int getColumnCount() throws OdaException
+	{
+		// TODO data source dependent
+		throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getColumnName(int)
+	 */
+	public String getColumnName( int index ) throws OdaException
+	{
+		// TODO data source dependent
+		throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getColumnLabel(int)
+	 */
+	public String getColumnLabel( int index ) throws OdaException
+	{
+		return getColumnName( index );		// default
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getColumnType(int)
+	 */
+	public int getColumnType( int index ) throws OdaException
+	{
+		// TODO data source dependent
+		throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getColumnTypeName(int)
+	 */
+	public String getColumnTypeName( int index ) throws OdaException
+	{
+		// TODO data source dependent
+		throw new UnsupportedOperationException( "Please override and implement me." ); //$NON-NLS-1$
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getColumnDisplayLength(int)
+	 */
+	public int getColumnDisplayLength( int index ) throws OdaException
+	{
+		return 0;
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getPrecision(int)
+	 */
+	public int getPrecision( int index ) throws OdaException
+	{
+		return -1;
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getScale(int)
+	 */
+	public int getScale( int index ) throws OdaException
+	{
+		return -1;
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#isNullable(int)
+	 */
+	public int isNullable( int index ) throws OdaException
+	{
+		return IResultSetMetaData.columnNullableUnknown;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/package.html b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/package.html
new file mode 100644
index 0000000..d245877
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/impl/package.html
@@ -0,0 +1,42 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2004, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+
+[<b>Non-API</b>] Provides a template implementation of the main ODA run-time interfaces.
+These classes assume the behavior of a simple ODA driver,
+and have labelled TODO tags for a driver developer to 
+implement data source dependent behavior.
+These concrete classes are provided for use as templates or 
+base classes to aid in the development of an ODA custom driver.  
+Their use is purely optional.
+
+<!-- Put @see and @since tags down here. -->
+<p>
+@since 2.0
+<p>
+<b>Deprecated</b> As of 3.1.2. 
+<br>Use the ODA Plug-in Project Template Wizard instead to automatically generate 
+a custom ODA plug-in project that contains a template implementation of the main ODA interfaces.  
+<br>The wizard is available in the New->Project... dialog; one for ODA Runtime Driver, 
+another for ODA Designer. 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/internal/OdaPlugin.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/internal/OdaPlugin.java
new file mode 100644
index 0000000..f9c0627
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/internal/OdaPlugin.java
@@ -0,0 +1,57 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.internal;
+
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.ResultExtensionExplorer;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ManifestExplorer;
+import org.osgi.framework.BundleContext;
+
+/**
+ * [<b>Non-API</b>] Bundle activator class.
+ */
+public class OdaPlugin extends Plugin
+{
+    private static OdaPlugin sm_plugin;
+
+    public OdaPlugin()
+    {
+        super();
+        sm_plugin = this;
+    }
+
+    /**
+     * Returns the shared instance of this plugin activator.
+     * @return
+     */
+    public static OdaPlugin getDefault()
+    {
+        return sm_plugin;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
+     */
+    public void stop( BundleContext context ) throws Exception
+    {
+        // release plugin's singleton instance(s)
+        ResultExtensionExplorer.releaseInstance();
+        ManifestExplorer.releaseInstance();
+        
+        super.stop( context );
+        sm_plugin = null;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/nls/Messages.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/nls/Messages.java
new file mode 100644
index 0000000..ffa9cb4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/nls/Messages.java
@@ -0,0 +1,131 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2013 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.nls;
+
+import org.eclipse.osgi.util.NLS;
+
+public class Messages extends NLS
+{
+    private static final String BUNDLE_NAME = "org.eclipse.datatools.connectivity.oda.nls.messages"; //$NON-NLS-1$
+
+    private Messages()
+    {
+    }
+
+    static
+    {
+        // initialize resource bundle
+        NLS.initializeMessages( BUNDLE_NAME, Messages.class );
+    }
+
+    public static String logManager_duplicateName;    
+
+    public static String manifest_CANNOT_FIND_EXTENSION;
+    public static String manifest_nullArgument;
+	public static String manifest_NO_DATA_SOURCE_EXTN_ID_DEFINED;
+	public static String manifest_INVALID_VERSION_VALUE;
+	public static String manifest_NO_DRIVER_CLASS_DEFINED;
+	public static String manifest_INVALID_SET_THREAD_CONTEXT_CLASSLOADER_VALUE;
+	public static String manifest_NO_DATA_SET_TYPES_DEFINED;
+	public static String manifest_NO_ATTRIBUTE_ID_DEFINED;
+	public static String manifest_NO_DATA_TYPE_MAPPINGS_DEFINED;
+	public static String manifest_NO_NATIVE_TYPE_CODE_DEFINED;
+	public static String manifest_INVALID_NATIVE_TYPE_CODE_VALUE;
+	public static String manifest_NO_NATIVE_TYPE_NAME_DEFINED;
+	public static String manifest_NO_ODA_SCALAR_DATA_TYPE_DEFINED_1;
+	public static String manifest_NO_ODA_SCALAR_DATA_TYPE_DEFINED_2;
+	public static String manifest_INVALID_ODA_SCALAR_DATA_TYPE_VALUE;
+	public static String manifest_INVALID_LOG_LEVEL_VALUE;
+    public static String manifest_MISSING_ELEMENT_IN_EXTENSION_MANIFEST;
+	public static String manifest_NO_LOG_FILENAME_PREFIX_DEFINED;
+    public static String manifest_UNKNOWN_BUNDLE_LOCATION;
+
+    public static String profileProperty_GROUP_PROPERTIES;
+    public static String profileProperty_PROFILE_NAME;
+    public static String profileProperty_PROFILE_STORE_PATH;
+
+    public static String querySpec_CUSTOM_AGGR_EXCEED_MAX_ARGS;
+    public static String querySpec_CUSTOM_AGGR_INCOMPATIBLE_DUPL_CHECK;
+    public static String querySpec_CUSTOM_AGGR_INCOMPATIBLE_NULL_CHECK;
+    public static String querySpec_CUSTOM_AGGR_LESS_THAN_MIN_ARGS;
+    public static String querySpec_CUSTOM_FILTER_EXCEED_MAX_ARGS;
+    public static String querySpec_CUSTOM_FILTER_LESS_THAN_MIN_ARGS;
+    public static String querySpec_CUSTOM_FUNC_EXCEED_MAX_ARGS;
+    public static String querySpec_CUSTOM_FUNC_INCOMPATIBLE_DUPL_CHECK;
+    public static String querySpec_CUSTOM_FUNC_LESS_THAN_MIN_ARGS;
+    public static String querySpec_EXTENSION_ID_NOT_FOUND;
+    public static String querySpec_ILLEGAL_CONSTRUCTOR_ARG;
+    public static String querySpec_INCOMPLETE_COMBINED_QUERY;
+    public static String querySpec_INVALID_AGGR_EXPR;
+    public static String querySpec_INVALID_AGGR_HIDE_COLUMN;
+    public static String querySpec_INVALID_ARG;
+    public static String querySpec_INVALID_BASE_QUERY;
+    public static String querySpec_INVALID_CLASS_TYPE_ATTRIBUTE;
+    public static String querySpec_INVALID_COLUMN_IDENTIFIER;
+    public static String querySpec_INVALID_EXT_POINT_ATTR_VALUE;
+    public static String querySpec_INVALID_EXT_POINT_ELEMENT;
+    public static String querySpec_INVALID_FILTER_EXPR;
+    public static String querySpec_INVALID_RESULT_PROJ;
+    public static String querySpec_INVALID_SORT_KEY;
+    public static String querySpec_INVALID_SORT_SPEC;
+    public static String querySpec_INVALID_VALUE_EXPR;
+    public static String querySpec_MAX_ONE_NEGATING_EXPR;
+    public static String querySpec_MISSING_ATOMIC_QUERY_TEXT;
+    public static String querySpec_MISSING_COMBINED_MATCHING_EXPR;
+    public static String querySpec_MISSING_COMPOSITE_MIN_CHILDREN;
+    public static String querySpec_MISSING_EXPR_VARIABLE;
+    public static String querySpec_MISSING_EXT_POINT_ATTR_VALUE;
+    public static String querySpec_MISSING_EXT_POINT_ELEMENT;
+    public static String querySpec_MISSING_EXT_POINT_MIN_ELEMENT;
+    public static String querySpec_NON_DEFINED_COMBINED_OP;
+    public static String querySpec_NON_DEFINED_CUSTOM_AGGR;
+    public static String querySpec_NON_DEFINED_CUSTOM_FILTER;
+    public static String querySpec_NON_DEFINED_CUSTOM_FUNC;
+    public static String querySpec_NON_RELATED_QUERYSPEC;
+    public static String querySpec_NONSUPPORTED_NULL_ORDERING;
+    public static String querySpec_NONSUPPORTED_VAR_DATA_TYPE;
+    public static String querySpec_NOT_EXPR_INCOMPATIBLE;
+    public static String querySpec_NOT_EXPR_MISSING_CHILD;
+    public static String querySpec_NULL_CONSTRUCTOR_3ARGS;
+    public static String querySpec_NULL_CONSTRUCTOR_ARG;
+    public static String querySpec_UNABLE_ADD_TO_NON_LIST_COLLECTION;
+    public static String querySpec_UNEXPECTED_AGGR_EXPR_EXTENSION;
+    public static String querySpec_UNEXPECTED_AGGR_EXPR_TYPE;
+    public static String querySpec_UNEXPECTED_CUSTOM_EXPR_EXTENSION;
+    public static String querySpec_UNEXPECTED_CUSTOM_EXPR_TYPE;
+    public static String querySpec_UNEXPECTED_EXPR_VARIABLE_TYPE;
+    public static String querySpec_UNEXPECTED_FUNC_EXPR_EXTENSION;
+    public static String querySpec_UNEXPECTED_FUNC_EXPR_TYPE;
+
+    public static String sortSpec_INDEX_OUT_OF_BOUND;    
+	public static String sortSpec_INVALID_SORT_MODE_SPECIFIED;
+	public static String sortSpec_NULL_COLUMN_NAME_SPECIFIED;
+	public static String sortSpec_INVALID_COLUMN_NAME_SPECIFIED;
+    public static String sortSpec_INVALID_NULL_ORDERING;
+	public static String sortSpec_INVALID_SORT_ORDER_SPECIFIED;
+	public static String sortSpec_NO_DYNAMIC_SORT_KEY_FOR_SORTMODENONE;
+	public static String sortSpec_ONE_SORTCOLUMN_FOR_SINGLE_COLUMN_MODE;
+	public static String sortSpec_ONE_SORTORDER_FOR_SINGLE_ORDER_MODE;
+	public static String sortSpec_ONLY_IN_SINGLE_ORDER_MODE;
+
+	public static String stringSubUtil_NO_STRING_VALUE_TO_REPLACE;
+	public static String stringSubUtil_DELIMITER_CANNOT_BE_EMPTY;
+	public static String stringSubUtil_DELIMITER_CANNOT_BE_NULL;
+	public static String stringSubUtil_SUBSTITUTION_LIST_CANNOT_BE_NULL;
+	public static String stringSubUtil_SUBSTITUTION_VALUE_CANNOT_BE_NULL;
+	public static String stringSubUtil_TEXT_STRING_CANNOT_BE_NULL;
+	public static String stringSubUtil_NAME_VALUE_MAP_CANNOT_BE_NULL;
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/nls/messages.properties b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/nls/messages.properties
new file mode 100644
index 0000000..6c82768
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/nls/messages.properties
@@ -0,0 +1,110 @@
+#
+#************************************************************************
+# Copyright (c) 2004, 2013 Actuate Corporation.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#  Actuate Corporation - initial API and implementation
+#  
+#************************************************************************
+#
+logManager_duplicateName=Logger with same name exists.
+#
+manifest_CANNOT_FIND_EXTENSION=Cannot find the ODA dataSource extension ({0}).\n Check the workspace log file for any problems with loading the extension bundle and its dependencies.
+manifest_nullArgument=Argument must not be null.
+manifest_NO_DATA_SOURCE_EXTN_ID_DEFINED=The ODA driver plugin.xml data source extension is missing an id attribute.
+manifest_INVALID_VERSION_VALUE=The ODA driver plugin.xml has an invalid odaVersion value ({0}) in the data source extension ({1}).
+manifest_NO_DRIVER_CLASS_DEFINED=The ODA driver plugin.xml is missing a driverClass attribute in the data source extension ({0}).
+manifest_INVALID_SET_THREAD_CONTEXT_CLASSLOADER_VALUE=The ODA driver plugin.xml has an invalid setThreadContextClassLoader value ({0}) in the data source extension ({1}).
+manifest_NO_DATA_SET_TYPES_DEFINED=The ODA data source extension ({0}) has no <dataSet> element defined in the extension manifest.  This is valid configuration, but does limit the ODA extension capabilities.
+manifest_NO_ATTRIBUTE_ID_DEFINED=The ODA driver plugin extension is missing an attribute ({0}) in the ({1}) element.
+manifest_NO_DATA_TYPE_MAPPINGS_DEFINED=The ODA driver plugin.xml should have at least one <dataTypeMapping> element defined for the <dataSet> ({0}).
+manifest_NO_NATIVE_TYPE_CODE_DEFINED=The ODA driver plugin.xml is missing a nativeDataTypeCode attribute in the <dataTypeMapping> ({0}) of the <dataSet> ({1}).
+manifest_INVALID_NATIVE_TYPE_CODE_VALUE=The ODA driver plugin.xml has an invalid nativeDataTypeCode value ({0}) in the <dataTypeMapping> ({1}) of the <dataSet> ({2}).
+manifest_NO_NATIVE_TYPE_NAME_DEFINED=The ODA driver plugin.xml is missing a nativeDataType attribute in the <dataTypeMapping> of the <dataSet> ({0}).
+manifest_NO_ODA_SCALAR_DATA_TYPE_DEFINED_1=The ODA driver plugin.xml is missing an odaScalarDataType attribute in the <dataTypeMapping> ({0}).
+manifest_NO_ODA_SCALAR_DATA_TYPE_DEFINED_2=The ODA driver plugin.xml is missing an odaScalarDataType attribute in the <alternativeOdaDataType> of the <dataTypeMapping> ({0}).
+manifest_INVALID_ODA_SCALAR_DATA_TYPE_VALUE=The ODA driver plugin.xml has an invalid odaScalarDataType value ({0}) in the <dataTypeMapping> ({1}).
+manifest_INVALID_LOG_LEVEL_VALUE=The ODA driver plugin.xml has an invalid logLevel value ({0}) in the data source extension ({1}).
+manifest_MISSING_ELEMENT_IN_EXTENSION_MANIFEST=The extension ({0}) is missing a {1} element.
+manifest_NO_LOG_FILENAME_PREFIX_DEFINED=The ODA driver plugin.xml is missing a logFileNamePrefix attribute in the <traceLogging> of the data source extension ({0}).
+manifest_UNKNOWN_BUNDLE_LOCATION=Unable to locate the installation path of the ODA extension ({0}).  The ODA consumer application must specify a ResourceIdentifiers in the appContext to resolve the path.
+#
+sortSpec_INVALID_SORT_MODE_SPECIFIED=Invalid sort mode specified: {0}.
+sortSpec_NULL_COLUMN_NAME_SPECIFIED=Null column name specified.
+sortSpec_INVALID_COLUMN_NAME_SPECIFIED=Invalid column name specified: {0}.
+sortSpec_INVALID_NULL_ORDERING=Invalid null ordering value: {0}.
+sortSpec_INVALID_SORT_ORDER_SPECIFIED=Invalid sort order specified: {0}.
+sortSpec_NO_DYNAMIC_SORT_KEY_FOR_SORTMODENONE=This sortSpec with sortModeNone does not allow any dynamic sort key.
+sortSpec_ONE_SORTCOLUMN_FOR_SINGLE_COLUMN_MODE=A sort column already exists.  The sortModeSingleColumn mode allows a maximum of one dynamic sort column.
+sortSpec_ONE_SORTORDER_FOR_SINGLE_ORDER_MODE=The sortModeSingleOrder mode supports only one sort order.
+sortSpec_ONLY_IN_SINGLE_ORDER_MODE=Supported only in sortModeSingleOrder mode.
+sortSpec_INDEX_OUT_OF_BOUND=Index: {0}, count: {1}.
+#
+stringSubUtil_NO_STRING_VALUE_TO_REPLACE=No string value to replace: {0}.
+stringSubUtil_DELIMITER_CANNOT_BE_EMPTY=The delimiter cannot be an empty string or contain only white spaces.
+stringSubUtil_DELIMITER_CANNOT_BE_NULL=The delimiter cannot be null.
+stringSubUtil_SUBSTITUTION_LIST_CANNOT_BE_NULL=The string substitution list cannot be null.
+stringSubUtil_SUBSTITUTION_VALUE_CANNOT_BE_NULL=The string substitution value cannot be null.
+stringSubUtil_TEXT_STRING_CANNOT_BE_NULL=The text string cannot be null.
+stringSubUtil_NAME_VALUE_MAP_CANNOT_BE_NULL=The name-value map cannot be null.
+#
+profileProperty_PROFILE_NAME=Connection &Profile Name
+profileProperty_PROFILE_STORE_PATH=Connection Profile Store &URL
+profileProperty_GROUP_PROPERTIES=External Connection Profile Reference
+#
+querySpec_CUSTOM_AGGR_EXCEED_MAX_ARGS=The custom aggregate expression ({0}) has {1} arguments, which exceeds the allowed maximum of {2} arguments.
+querySpec_CUSTOM_AGGR_INCOMPATIBLE_DUPL_CHECK=The custom aggregate type ({0}) cannot ignore duplicate values.
+querySpec_CUSTOM_AGGR_INCOMPATIBLE_NULL_CHECK=The custom aggregate type ({0}) cannot ignore null values.
+querySpec_CUSTOM_AGGR_LESS_THAN_MIN_ARGS=The custom aggregate expression ({0}) has {1} arguments, but requires a minimum of {2} arguments.
+querySpec_CUSTOM_FILTER_EXCEED_MAX_ARGS=The custom filter expression ({0}) has {1} arguments, which exceeds the allowed maximum of {2} arguments.
+querySpec_CUSTOM_FILTER_LESS_THAN_MIN_ARGS=The custom filter expression ({0}) has {1} arguments, but requires a minimum of {2} arguments.
+querySpec_CUSTOM_FUNC_EXCEED_MAX_ARGS=The custom function value expression ({0}) has {1} arguments, which exceeds the allowed maximum of {2} arguments.
+querySpec_CUSTOM_FUNC_INCOMPATIBLE_DUPL_CHECK=The custom function type ({0}) cannot ignore duplicate values.
+querySpec_CUSTOM_FUNC_LESS_THAN_MIN_ARGS=The custom function value expression ({0}) has {1} arguments, but requires a minimum of {2} arguments.
+querySpec_EXTENSION_ID_NOT_FOUND=No {0} extension found with the id ({1}).
+querySpec_ILLEGAL_CONSTRUCTOR_ARG=Illegal {0} constructor argument
+querySpec_INCOMPLETE_COMBINED_QUERY=Incomplete combined query specification.
+querySpec_INVALID_AGGR_EXPR=Invalid aggregate expression.
+querySpec_INVALID_AGGR_HIDE_COLUMN=Invalid aggregate projection on a hidden column {0}.
+querySpec_INVALID_ARG=Invalid argument: {0}.
+querySpec_INVALID_BASE_QUERY=Invalid base query.
+querySpec_INVALID_CLASS_TYPE_ATTRIBUTE=Invalid class type ({0}).  The {1} attribute must be an instance of {2}.
+querySpec_INVALID_COLUMN_IDENTIFIER=Invalid column reference {0}.
+querySpec_INVALID_EXT_POINT_ATTR_VALUE=The {0} extension ({1}) has an invalid value ({2}) for the {3} attribute.
+querySpec_INVALID_EXT_POINT_ELEMENT=The {0} extension ({1}) is invalid.  See the schema definition for required content.
+querySpec_INVALID_FILTER_EXPR=Invalid filter expression.
+querySpec_INVALID_RESULT_PROJ=Invalid result projection.
+querySpec_INVALID_SORT_KEY=Invalid sort key.
+querySpec_INVALID_SORT_SPEC=Invalid sort specification.
+querySpec_INVALID_VALUE_EXPR=Invalid value expression.
+querySpec_MAX_ONE_NEGATING_EXPR=Cannot add more than one negating expression to a {0}.
+querySpec_MISSING_ATOMIC_QUERY_TEXT=Missing query text in atomic base query.
+querySpec_MISSING_COMBINED_MATCHING_EXPR=Missing matching expression in combined condition.
+querySpec_MISSING_COMPOSITE_MIN_CHILDREN=The composite {0} must contain at least {1} child expressions.
+querySpec_MISSING_EXPR_VARIABLE=The filter expression ({0}) is missing an associated variable.
+querySpec_MISSING_EXT_POINT_ATTR_VALUE=The {0} extension ({1}) is missing the {2} attribute value in the {3} element.
+querySpec_MISSING_EXT_POINT_ELEMENT=The {0} extension ({1}) is missing the {2} element.
+querySpec_MISSING_EXT_POINT_MIN_ELEMENT=The {0} extension ({1}) must have at least one {2} element defined .
+querySpec_NON_DEFINED_COMBINED_OP=The Combined Expression Operator type ({0}) is not found in the dynamicResultSet extension registry.
+querySpec_NON_DEFINED_CUSTOM_AGGR=The custom aggregate expression ({0}) is not found in the dynamicResultSet extension registry.
+querySpec_NON_DEFINED_CUSTOM_FILTER=The custom filter expression ({0}) is not found in the dynamicResultSet extension registry.
+querySpec_NON_DEFINED_CUSTOM_FUNC=The custom function ({0}) is not found in the dynamicResultSet extension registry.
+querySpec_NON_RELATED_QUERYSPEC=The column {0} in a combined query expression cannot be qualified by a query that is not one of the combining queries.
+querySpec_NONSUPPORTED_NULL_ORDERING=Null ordering specification is not supported by the data source provider.
+querySpec_NONSUPPORTED_VAR_DATA_TYPE=The ODA data type ({0}) of the value expression ({1}) is not supported by the type of custom expression used.
+querySpec_NOT_EXPR_INCOMPATIBLE=Invalid use of a non-negatable expression ({0}) in a {1}.
+querySpec_NOT_EXPR_MISSING_CHILD=Missing negating expression in NotExpression: ({0}).
+querySpec_NULL_CONSTRUCTOR_3ARGS=Null {0} constructor argument(s): {1}, {2}, {3}.
+querySpec_NULL_CONSTRUCTOR_ARG=Null {0} constructor argument
+querySpec_UNABLE_ADD_TO_NON_LIST_COLLECTION=Unable to add a value to existing values.  The existing value is not a java.util.List.
+querySpec_UNEXPECTED_AGGR_EXPR_EXTENSION=Unable to support the custom aggregate expression ({0}) of other extension.
+querySpec_UNEXPECTED_AGGR_EXPR_TYPE=The custom aggregate expression ({0}) is not a {1} instance. Consumer application must use ExpressionFactory\#createCustomAggregate to create a custom expression instance.
+querySpec_UNEXPECTED_CUSTOM_EXPR_EXTENSION=Unable to support the custom filter expression ({0}) of other extension.
+querySpec_UNEXPECTED_CUSTOM_EXPR_TYPE=The custom filter expression ({0}) is not a {1} instance.\n Consumer application must use ExpressionFactory\#createCustomExpression to create a custom filter expression instance.
+querySpec_UNEXPECTED_EXPR_VARIABLE_TYPE=Cannot support this type of ExpressionVariable ({1}).
+querySpec_UNEXPECTED_FUNC_EXPR_EXTENSION=Unable to support the custom function ({0}) of other extension.
+querySpec_UNEXPECTED_FUNC_EXPR_TYPE=The custom function ({0}) is not a {1} instance. Consumer application must use ExpressionFactory\#createCustomFunction to create a custom function instance.
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/nls/package.html b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/nls/package.html
new file mode 100644
index 0000000..dcccf6f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/nls/package.html
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2004, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+
+[<b>Non-API</b>] Contains internal implementation of internationalization and localization features.
+<br>
+
+<!-- Put @see and @since tags down here. -->
+@since 3.0
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/package.html b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/package.html
new file mode 100644
index 0000000..a2341d4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/package.html
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2004, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+
+[<b>Platform API</b>] Defines the runtime API of the Open Data Access (ODA) extensions.
+ODA provides the capability to plug any external data source into  
+a data consumer application that supports the ODA framework.
+<p>
+The ODA extension framework defines a set of ODA design-time and 
+run-time interfaces.  
+It adopts the Eclipse plug-in framework for one to provide a designer tool, 
+and a runtime driver for data retrieval.
+This public API package specifies the Java interfaces of an 
+ODA extension's runtime driver.
+<br> 
+An ODA consumer application, such as the BIRT Data Engine, uses the 
+data source connection and data set query definitions specified at design time to
+access an ODA runtime driver for query execution and data retrieval.  
+<p>
+The ODA runtime interfaces are JDBC-like, but have been extended to 
+support additional capabilities of non-RDBMS data sources.  
+An ODA driver would implement the public runtime interfaces, 
+which would in turn wrap data-source-specific APIs, such as web services,  
+to retrieve a result set's data rows.
+<p>
+Below is a brief overview of the API's main interfaces.
+<br>The IDriver serves as the entry point to an ODA
+runtime driver.
+The driver produces a dedicated IConnection for establishing
+a connection to the data source provider.
+<br>An open connection in turn creates an IQuery to define
+the specifics of a data set query.  
+A connection also provides meta-data information on the 
+capabilities of the data source, and its
+supported data set types in IDataSetMetaData.
+<br>A query is executed to retrieve one or 
+more IResultSet instances. 
+<br>A result set is then used to fetch result data.  
+It also provides an IResultSetMetaData for its
+meta-data information. 
+
+<!-- Put @see and @since tags down here. -->
+@since 1.0
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/AdvancedQuerySpecification.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/AdvancedQuerySpecification.java
new file mode 100644
index 0000000..08e94c9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/AdvancedQuerySpecification.java
@@ -0,0 +1,112 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.datatools.connectivity.oda.IQuery;
+import org.eclipse.datatools.connectivity.oda.spec.result.ResultSetSpecification;
+
+/**
+ * Extended specification of the query characteristics to apply when preparing and executing 
+ * a query text of an {@link org.eclipse.datatools.connectivity.oda.IAdvancedQuery}.
+ * It takes effect only if assigned prior to an IAdvancedQuery prepares a query text
+ * at {@link IQuery#prepare(String)}.
+ * @since 3.3 (DTP 1.8)
+ */
+public class AdvancedQuerySpecification extends QuerySpecification
+{
+    private Map<String,ResultSetSpecification> m_namedResultSpecs;
+    private Map<Integer,ResultSetSpecification> m_seqResultSpecs;
+    
+    /**
+     * Internal constructor.
+     * <br>Use {@link org.eclipse.datatools.connectivity.oda.spec.util.QuerySpecificationHelper#createAdvancedQuerySpecification()} 
+     * to create an instance.
+     */
+    AdvancedQuerySpecification() {}
+    
+    /**
+     * Specifies the characteristics of the named result set to be retrieved by
+     * the associated {@link org.eclipse.datatools.connectivity.oda.IAdvancedQuery}.
+     * <br>This overrides the default specification set by the base class method
+     * {@link QuerySpecification#setResultSetSpecification(ResultSetSpecification)}.
+     * @param resultSetName     the name of a result set
+     * @param resultSpec    specification of the specified result set
+     */
+    public void setResultSetSpecification( String resultSetName, ResultSetSpecification resultSpec )
+    {
+        getNamedResultSpecs().put( resultSetName, resultSpec );
+    }
+    
+    /**
+     * Gets the specification of the named result set to be retrieved by
+     * the associated {@link org.eclipse.datatools.connectivity.oda.IAdvancedQuery}.
+     * @param resultSetName the name of a result set
+     * @return  the {@link ResultSetSpecification} of the specified result set,
+     *      or null if not specified
+     */
+    public ResultSetSpecification getResultSetSpecification( String resultSetName )
+    {
+        return getNamedResultSpecs().get( resultSetName );
+    }
+ 
+    /**
+     * Specifies the characteristics of the specified result set to be retrieved by
+     * the associated {@link org.eclipse.datatools.connectivity.oda.IAdvancedQuery}.
+     * <br>This overrides the default specification set by the base class method
+     * {@link QuerySpecification#setResultSetSpecification(ResultSetSpecification)}.
+     * @param resultSetNum     a 1-based index number that indicates the sequence of a result set 
+     *                         among a sequential set of multiple result sets
+     * @param resultSpec    specification of the specified result set
+     */
+    public void setResultSetSpecification( int resultSetNum, ResultSetSpecification resultSpec )
+    {
+        getSequencedResultSpecs().put( Integer.valueOf( resultSetNum ), resultSpec );
+    }
+    
+    /**
+     * Gets the specification of the specified result set to be retrieved by
+     * the associated {@link org.eclipse.datatools.connectivity.oda.IAdvancedQuery}.
+     * @param resultSetNum     a 1-based index number that indicates the sequence of a result set 
+     *                         among a sequential set of multiple result sets
+     * @return  the {@link ResultSetSpecification} of the specified result set,
+     *      or null if not specified
+     */
+    public ResultSetSpecification getResultSetSpecification( int resultSetNum )
+    {
+        return getSequencedResultSpecs().get( Integer.valueOf( resultSetNum ) );
+    }
+
+    protected Map<String, ResultSetSpecification> getNamedResultSpecs()
+    {
+        if( m_namedResultSpecs == null )
+        {
+            m_namedResultSpecs = new HashMap<String, ResultSetSpecification>(5);
+        }
+        return m_namedResultSpecs;
+    }
+
+    protected Map<Integer, ResultSetSpecification> getSequencedResultSpecs()
+    {
+        if( m_seqResultSpecs == null )
+        {
+            m_seqResultSpecs = new HashMap<Integer, ResultSetSpecification>(5);
+        }
+        return m_seqResultSpecs;
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/BaseQuery.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/BaseQuery.java
new file mode 100644
index 0000000..b941049
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/BaseQuery.java
@@ -0,0 +1,96 @@
+/*

+ *************************************************************************

+ * Copyright (c) 2013, 2014 Actuate Corporation.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *  Actuate Corporation - initial API and implementation

+ *  

+ *************************************************************************

+ */

+

+package org.eclipse.datatools.connectivity.oda.spec;

+

+import org.eclipse.datatools.connectivity.oda.OdaException;

+import org.eclipse.datatools.connectivity.oda.spec.util.QuerySpecificationHelper;

+

+/**

+ * Specification of a query base in a {@link QuerySpecification}, on which other 

+ * query characteristics are to be applied.

+ * A query base is optional in a QuerySpecification, which defers its specification till 

+ * an {@link org.eclipse.datatools.connectivity.oda.IQuery} is prepared.

+ * When a non-empty query text is provided in the call to the

+ * {@link org.eclipse.datatools.connectivity.oda.IQuery#prepare(String)} method, it

+ * would override and take precedence over this, even if specified.

+ * @since 3.4 (DTP 1.11)

+ */

+public abstract class BaseQuery

+{

+

+    /**

+     * Returns the qualified id of this base query type.

+     * @return  qualified id

+     */

+    public String getQualifiedId()

+    {

+        return getClass().getName();

+    }

+    

+    /**

+     * Gets the name of this base query type.

+     * It may be used to identify this in user messages or logging.

+     * @return  name of this base query type

+     */

+    public String getName()

+    {

+        return getClass().getSimpleName();

+    }

+

+    /**

+     * Validates this base query. 

+     * @throws OdaException if validation failed. The cause is 

+     *          defined by a concrete subclass implementing this method.

+     */

+    public void validate() throws OdaException

+    {

+        validate( null );

+    }

+

+    /**

+     * Validates this query in the specified context. 

+     * @param context   context for validation; may be null which would limit the scope of validation

+     * @throws OdaException if validation failed. The cause is 

+     *          defined by a concrete subclass implementing this method.

+     */

+    public void validate( ValidationContext context ) 

+        throws OdaException

+    {

+        try

+        {

+            validateSyntax( context );

+

+            // pass this to custom validator, if exists, for further overall validation

+            if( context != null && context.getValidator() != null )

+                context.getValidator().validate( this, context );

+        }

+        catch( OdaException ex )

+        {

+            // log the exception before re-throwing it to the caller

+            QuerySpecificationHelper.logValidationException( getName(), ex );

+            throw ex;

+        }

+    }

+

+    /**

+     * Performs syntactic validation of this base query in the specified context. 

+     * @param context   context for validation; may be null which would limit the scope of validation

+     * @throws OdaException if validation failed. The cause is 

+     *          defined by a concrete subclass implementing this method.

+     */

+    public abstract void validateSyntax( ValidationContext context ) 

+        throws OdaException;

+

+}

diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/ExpressionArguments.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/ExpressionArguments.java
new file mode 100644
index 0000000..3861c69
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/ExpressionArguments.java
@@ -0,0 +1,230 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2013 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.spec.result.ColumnIdentifier;
+import org.eclipse.datatools.connectivity.oda.spec.valueexpr.ColumnValueExpression;
+import org.eclipse.datatools.connectivity.oda.spec.valueexpr.SimpleValueExpression;
+
+/**
+ * Runtime argument(s) of an expression defined in an ODA query specification.
+ * <br>Their values are used by an ODA driver to evaluate an expression and its variable
+ * specified in an ODA query specification.
+ * The argument values are normally provided by an ODA consumer application during runtime,
+ * such as by collecting user-input values for an expression's arguments.
+ * @since 3.3 (DTP 1.8)
+ */
+public class ExpressionArguments
+{
+    protected static final String COMMA_SEPARATOR = ", "; //$NON-NLS-1$
+
+    private Object m_values;
+ 
+    /**
+     * Constructor.
+     * @param argValues the argument value(s); may be null if no values,
+     *          a single value, or
+     *          an ordered {@link Collection} that holds multiple values
+     */
+    public ExpressionArguments( Object argValues )
+    {
+        setValues( argValues );
+    }
+    
+    public ExpressionArguments()
+    {}
+    
+    /**
+     * Indicates whether this has argument values.
+     * An empty collection in the values returns false for no values.
+     * @return  true if this argument has one or more values; false otherwise
+     */
+    @SuppressWarnings("unchecked")
+    public boolean hasValues()
+    {
+        if( m_values == null )
+            return false;
+        if( m_values instanceof Collection )
+            return ! ((Collection) m_values).isEmpty();
+        return true;
+    }
+    
+    /**
+     * Returns the number of values in this argument.
+     * @return  the number of argument values
+     */
+    @SuppressWarnings("unchecked")
+    public int valueCount()
+    {
+        if( m_values == null )
+            return 0;
+        
+        if( !( m_values instanceof Collection ))
+            return 1;
+        
+        return ((Collection) m_values).size();
+    }
+    
+    /**
+     * Returns all the argument value(s).
+     * @return  the argument value(s); may be null if no values,
+     *          a single value, or
+     *          an ordered {@link Collection} that holds multiple values
+     */
+    public Object getValues()
+    {
+        return m_values;
+    }
+    
+    /**
+     * Returns the value at the specified position of the ordered collection of argument values.
+     * The value at a position is based on the sequence that a value is added using {@link #addValue(Object)}.
+     * If the argument's values are not kept in a {@link List}, 
+     * all the value(s) are returned at the 0 position.
+     * @param index 0-based position of the list of argument values
+     * @return  the value at the specified position, 
+     *          or null if the index is out of range (index < 0 || index >= size()).
+     * @see #getValueExpression(int)
+     */
+    @SuppressWarnings("unchecked")
+    public Object getValue( int index )
+    {
+        if( index < 0 || index >= valueCount() )
+            return null;
+        
+        if( !( m_values instanceof List ))
+            return ( index == 0 ) ? m_values : null;
+        
+        return ((List) m_values).get( index );
+    }
+    
+    /**
+     * Returns the value expression that represents the value at the specified position 
+     * of the ordered collection of argument values.
+     * @param index 0-based position of the list of argument values
+     * @return  an ValueExpression instance representing the value at the specified position, 
+     *          or null if the index is out of range (index < 0 || index >= size()).
+     * @see #getValue(int)
+     */
+    public ValueExpression getValueExpression( int index )
+    {
+        Object value = getValue( index );
+        if( value instanceof ValueExpression )
+            return (ValueExpression) value;
+
+        if( value instanceof ColumnIdentifier )
+            return new ColumnValueExpression( (ColumnIdentifier)value );
+
+        return new SimpleValueExpression( value );
+    }
+    
+    /**
+     * Appends the specified value to the end of its list of argument values.
+     * It is the responsibility of the caller to ensure compatible type of value object
+     * is added to the list.
+     * Creates an ordered list, if none already exists, to hold the added value object.
+     * @param aValue    a value to add; may be null
+     * @return  this, containing the added value
+     * @throws UnsupportedOperationException if existing values, if any, are not in a {@link List}
+     */
+    @SuppressWarnings("unchecked")
+    public ExpressionArguments addValue( Object aValue )
+    {
+        if( m_values == null )
+            m_values = new ArrayList(3);
+        else
+        {
+            if( !( m_values instanceof List ))
+                throw new UnsupportedOperationException( Messages.querySpec_UNABLE_ADD_TO_NON_LIST_COLLECTION );
+        }
+        
+        ((List) m_values).add( aValue );
+        return this;
+    }
+    
+    /**
+     * A convenient method to append a value in primitive data type.
+     * @param value an int value
+     * @return  this, containing the added value
+     * @see #addValue(Object)
+     */
+    public ExpressionArguments addValue( int value )
+    {
+        return addValue( Integer.valueOf( value ) );
+    }
+    
+    /**
+     * A convenient method to append a value in primitive data type.
+     * @param value a double value
+     * @return  this, containing the added value
+     * @see #addValue(Object)
+     */
+    public ExpressionArguments addValue( double value )
+    {
+        return addValue( Double.valueOf( value ) );
+    }
+    
+    /**
+     * A convenient method to append a value in primitive data type.
+     * @param value a boolean value
+     * @return  this, containing the added value
+     * @see #addValue(Object)
+     */
+    public ExpressionArguments addValue( boolean value )
+    {
+        return addValue( Boolean.valueOf( value ) );
+    }
+
+    /**
+     * Sets all the argument value(s).
+     * @param argValues the argument value(s); may be null if no values,
+     *          a single value, or
+     *          an ordered {@link Collection} that holds multiple values
+     */
+    public void setValues( Object argValues )
+    {
+        m_values = argValues;
+    }
+
+    /* (non-Javadoc)
+     * @see java.lang.Object#toString()
+     */
+    @SuppressWarnings("unchecked")
+    @Override
+    public String toString()
+    {
+        StringBuffer buffer = new StringBuffer( getClass().getSimpleName() + " value(s): (" ); //$NON-NLS-1$
+        if( m_values instanceof List )
+        {
+            List valuesList = (List) m_values;
+            for( int i=0; i < valuesList.size(); i++ )
+            {
+                if( i > 0 )
+                    buffer.append( COMMA_SEPARATOR );
+                buffer.append( valuesList.get(i) );
+            }
+        }
+        else
+            buffer.append( m_values );
+        buffer.append( ") " ); //$NON-NLS-1$
+        return buffer.toString();
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/ExpressionVariable.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/ExpressionVariable.java
new file mode 100644
index 0000000..930cfef
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/ExpressionVariable.java
@@ -0,0 +1,221 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec;
+
+import org.eclipse.datatools.connectivity.oda.spec.result.ColumnIdentifier;
+import org.eclipse.datatools.connectivity.oda.spec.valueexpr.ColumnValueExpression;
+import org.eclipse.datatools.connectivity.oda.spec.valueexpr.FunctionValueExpression;
+import org.eclipse.datatools.connectivity.oda.spec.valueexpr.SimpleValueExpression;
+
+/**
+ * Represents the variable of an expression defined in an ODA query specification.
+ * <br>It is the responsibility of an ODA driver to resolve a variable,
+ * when evaluating it with an expression.
+ * This may be extended to represent complex types of variables.
+ * @since 3.3 (DTP 1.8)
+ */
+public class ExpressionVariable
+{
+    public enum VariableType
+    {
+        RESULT_SET_COLUMN,          // default
+        INSTANCE_OF,
+        QUERY_EXPRESSION
+//        CUBE_DIMENSION_MEMBER,      // reserved
+//        CUBE_DIMENSION_ATTRIBUTE,   // reserved
+//        CUBE_MEASURE                // reserved
+    }
+
+    public static final String ALIAS_SEPARATOR = "_"; //$NON-NLS-1$
+    private static final String FUNCTION_ALIAS_PREFIX = "F_"; //$NON-NLS-1$
+       
+    private String m_alias;
+    private ValueExpression m_valueExpr;
+    
+    /**
+     * Constructor for an expression variable that references a result set column by name or expression.
+     * @param variableIdentfier the name or expression that identifies the variable to use in evaluating an expression.
+     *              The identifier must be in a format recognized by the ODA data provider that will be 
+     *              evaluating the expression.  
+     */
+    public ExpressionVariable( String variableIdentfier )
+    {
+        this( variableIdentfier, VariableType.RESULT_SET_COLUMN );
+    }
+
+    /**
+     * Constructor for an expression variable of the specified type.
+     * @param variableIdentfier the name or expression that identifies the variable to use in evaluating an expression.
+     *              The identifier must be in a format recognized by the ODA data provider that will be 
+     *              evaluating the expression.  
+     * @param type  the type of variable; its value must be one of the pre-defined {@link VariableType}
+     */
+    public ExpressionVariable( String variableIdentfier, VariableType varType )
+    {
+        switch( varType )
+        {
+            case RESULT_SET_COLUMN: 
+                setColumnExpression( new ColumnIdentifier( variableIdentfier ) ); break;
+            case QUERY_EXPRESSION:
+            default:
+                setValueExpression( new SimpleValueExpression( variableIdentfier )); break;
+        }
+    }
+
+    /**
+     * Constructor for an expression variable that references a result set column by its identifier.
+     * @param columnIdentifier  a column identifier
+     */
+    public ExpressionVariable( ColumnIdentifier columnIdentifier )
+    {
+        setColumnExpression( columnIdentifier );
+    }
+    
+    /**
+     * Constructor for an expression variable that references the specified value expression.
+     * @param valueExpr a concrete ValueExpression instance
+     */
+    public ExpressionVariable( ValueExpression valueExpr )
+    {
+        setValueExpression( valueExpr );
+    }
+    
+    private void setColumnExpression( ColumnIdentifier columnIdentifier )
+    {
+        setValueExpression( new ColumnValueExpression( columnIdentifier ) );
+    }
+    
+    private void setValueExpression( ValueExpression valueExpr )
+    {
+        m_valueExpr = valueExpr;
+    }
+    
+    /**
+     * Returns the value expression of this variable.
+     * @return an instance of a concrete ValueExpression
+     */
+    public ValueExpression getValueExpression()
+    {
+        return m_valueExpr;
+    }
+
+    /**
+     * Gets the name or expression that identifies the variable in evaluating an expression.
+     * @return  the name or expression of the variable
+     */
+    public String getIdentifier()
+    {
+        return ( m_valueExpr != null ) ? m_valueExpr.getName() : m_alias; 
+    }
+    
+    /**
+     * Gets the variable alias.  
+     * @return  the alias, or the identifier if no alias is specified
+     */
+    public String getAlias()
+    {
+        if( m_alias != null ) 
+            return m_alias;
+        
+        // a function name is normally a keyword, which should not be used as an alias by default
+        if( m_valueExpr instanceof FunctionValueExpression )
+            return FUNCTION_ALIAS_PREFIX + m_valueExpr.getName();
+        
+        return getIdentifier();
+    }
+
+    /**
+     * Specifies the variable alias.
+     * @param alias the alias to set; may be null
+     */
+    public void setAlias( String alias )
+    {
+        m_alias = alias;
+    }
+
+    /**
+     * Gets the type of this variable, e.g. a column in a query result set.
+     * @return  a VariableType enum value
+     */
+    public VariableType getType()
+    {
+        if( m_valueExpr != null )
+            return m_valueExpr.getVariableType();
+        return VariableType.QUERY_EXPRESSION;   // default
+    }
+    
+    /**
+     * Sets the type of variable, e.g. a column in a query result set.
+     * @param type  a VariableType enum value
+     * @deprecated  replaced by deriving from the type of ValueExpression in this variable
+     */
+    public void setType( VariableType type )
+    {
+        // deprecated method
+    }
+
+    /**
+     * Gets the data provider specific code value of this variable's data type.
+     * The valid values are implementation-specific.  
+     * This serves as an optional hint that may have been specified at design time.
+     * @return      the native data type code of this variable, or null if not available
+     * @deprecated  replaced by {@link #getOdaDataType()}
+     */
+    public Integer getNativeDataType()
+    {
+        // deprecated method
+        return null;    // not available
+    }
+
+    /**
+     * Sets the data type of this variable in a data provider specific code value.
+     * The valid values are implementation-specific.  
+     * This serves as an optional hint that may have been specified at design time,
+     * and may be ignored by the runtime driver, if appropriate.
+     * @param nativeDataTypeCode the native data type code of this variable;
+     *              may be null to unset current value
+     * @deprecated  replaced by {@link ValueExpression#setOdaDataType(Integer)}
+     */
+    public void setNativeDataType( Integer nativeDataTypeCode )
+    {
+        // deprecated method
+    }
+
+    /**
+     * Gets the ODA-defined code value of this variable's data type. 
+     * This serves as an optional hint that may have been specified by the variable expression.
+     * @return      the ODA data type code of this variable, or null if not available
+     */
+    public Integer getOdaDataType()
+    {
+        if( m_valueExpr != null )
+            return m_valueExpr.getOdaDataType();
+        return null;    // not available
+    }
+
+    /* (non-Javadoc)
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString()
+    {
+        StringBuffer buffer = new StringBuffer( getClass().getSimpleName() + " alias= " + m_alias ); //$NON-NLS-1$
+        buffer.append( ", valueExpression = [" ); //$NON-NLS-1$
+        buffer.append( m_valueExpr );
+        buffer.append( "]" ); //$NON-NLS-1$
+        return buffer.toString();
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/IValidator.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/IValidator.java
new file mode 100644
index 0000000..7782681
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/IValidator.java
@@ -0,0 +1,167 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2014 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.spec.result.AggregateExpression;
+import org.eclipse.datatools.connectivity.oda.spec.result.FilterExpression;
+import org.eclipse.datatools.connectivity.oda.spec.result.ResultSetSpecification;
+import org.eclipse.datatools.connectivity.oda.spec.result.SortSpecification;
+
+/**
+ * Interface for a custom validator contributed by an extension of the 
+ * ODA dynamicResultSet extension point.  It may be used by an ODA consumer
+ * to validate a dynamic result set specification or an extension-defined expression that 
+ * may be applied at runtime.
+ * <br>It is implementation-dependent on the scope of validation covered, and 
+ * whether it requires opening a connection to the underlying data source.
+ * @since 3.3 (DTP 1.8)
+ */
+public interface IValidator
+{
+    /**
+     * Validates the specified query specification in the specified context.
+     * @param querySpec  a {@link QuerySpecification} to validate
+     * @param context      context for validation; may be null which would limit the scope of validation;
+     *              should contain the {@link ValidationContext#DATA_PROPERTY_QUERY_TEXT} 
+     *              context property value to extend the scope of validation 
+     * @throws OdaException if validation failed. The cause is defined 
+     *          by the class implementing this method.
+     */
+    public void validate( QuerySpecification querySpec, ValidationContext context ) 
+        throws OdaException;
+
+    /**
+     * Validates the specified result set specification in the specified context.
+     * @param resultSetSpec  a {@link ResultSetSpecification} to validate
+     * @param context      context for validation; may be null, which would limit the scope of validation;
+     *              should contain the {@link ValidationContext#DATA_PROPERTY_QUERY_TEXT} 
+     *              context property value to extend the scope of validation 
+     * @throws OdaException if validation failed. The cause is defined 
+     *          by the class implementing this method.
+     * @see {@link ValidationContext#setQueryText(String)}
+     * @see {@link ValidationContext#setConnectionProfile(Object)}
+     * @since 3.2.2 (DTP 1.7.2)
+     */
+    public void validate( ResultSetSpecification resultSetSpec, ValidationContext context ) 
+        throws OdaException;
+
+    /**
+     * Validates the specified filter expression in the specified context. 
+     * @param filterExpr  the filter expression to validate; may be the root of an expression tree
+     * @param context   context for validation; may be null which would limit the scope of validation
+     * @throws OdaException if validation failed. The cause is defined 
+     *          by the class implementing this method.
+     */
+    public void validate( FilterExpression filterExpr, ValidationContext context ) 
+        throws OdaException;
+
+    /**
+     * Performs syntactic validation of the specified filter expression 
+     * in the specified context. 
+     * @param filterExpr  the filter expression to validate; 
+     *              may be a single filter node at the root, or nested
+     *              within a filter expression tree
+     * @param context   context for validation; may be null which would limit the scope of validation
+     * @throws OdaException if validation failed. The cause is defined 
+     *          by the class implementing this method.
+     */
+    public void validateSyntax( FilterExpression filterExpr, ValidationContext context )
+        throws OdaException;
+
+    /**
+     * Validates the specified aggregate expression in the specified context. 
+     * @param aggrExpr  aggregate expression to validate
+     * @param context   context for validation; may be null which would limit the scope of validation
+     * @throws OdaException if validation failed. The cause is defined 
+     *          by the class implementing this method.
+     */
+    public void validate( AggregateExpression aggrExpr, ValidationContext context ) 
+        throws OdaException;
+
+    /**
+     * Performs syntactic validation of the specified aggregate expression 
+     * in the specified context. 
+     * @param aggrExpr  the aggregate expression to validate
+     * @param context   context for validation; may be null which would limit the scope of validation
+     * @throws OdaException if validation failed. The cause is defined 
+     *          by the class implementing this method.
+     */
+    public void validateSyntax( AggregateExpression aggrExpr, ValidationContext context )
+        throws OdaException;
+
+    /**
+     * Validates the specified value expression in the specified context. 
+     * @param valueExpr  value expression to validate
+     * @param context   context for validation; may be null which would limit the scope of validation
+     * @throws OdaException if validation failed. The cause is defined 
+     *          by the class implementing this method.
+     * @since 3.2.2 (DTP 1.7.2)
+     */
+    public void validate( ValueExpression valueExpr, ValidationContext context ) 
+        throws OdaException;
+
+    /**
+     * Performs syntactic validation of the specified value expression 
+     * in the specified context. 
+     * @param valueExpr  the value expression to validate
+     * @param context   context for validation; may be null which would limit the scope of validation
+     * @throws OdaException if validation failed. The cause is defined 
+     *          by the class implementing this method.
+     * @since 3.2.2 (DTP 1.7.2)
+     */
+    public void validateSyntax( ValueExpression valueExpr, ValidationContext context )
+        throws OdaException;
+    
+    /**
+     * Validates the specified sort specification in the specified context.
+     * @param sortSpec  a {@link SortSpecification} to validate
+     * @param context      context for validation; may be null which would limit the scope of validation
+     * @throws OdaException if validation failed. The cause is defined 
+     *          by the class implementing this method.
+     */
+    public void validate( SortSpecification sortSpec, ValidationContext context ) 
+        throws OdaException;
+
+    /**
+     * Validates the specified base query in the specified context. 
+     * @param baseQuery     a concrete {@link BaseQuery} to validate
+     * @param context      context for validation; may be null which would limit the scope of validation
+     * @throws OdaException if validation failed. The cause is defined 
+     *          by the class implementing this method.
+     * @since 3.4 (DTP 1.11)
+     */
+    public void validate( BaseQuery baseQuery, ValidationContext context ) 
+        throws OdaException;
+
+    /**
+     * Performs syntactic validation of the specified base query in the specified context. 
+     * @param baseQuery     a concrete {@link BaseQuery} to validate
+     * @param context      context for validation; may be null which would limit the scope of validation
+     * @throws OdaException if validation failed. The cause is defined 
+     *          by the class implementing this method.
+     * @since 3.4 (DTP 1.11)
+     */
+    public void validateSyntax( BaseQuery baseQuery, ValidationContext context )
+        throws OdaException;
+
+    /**
+     * Closes any connection handle that a custom validator may have cached in the specified context.
+     * @param validationConnection  connection context used for online validation
+     * @since 3.2.2 (DTP 1.7.2)
+     */
+    public void closeConnection( ValidationContext.Connection validationConnection );
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/InternalSpecFactory.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/InternalSpecFactory.java
new file mode 100644
index 0000000..5d5902d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/InternalSpecFactory.java
@@ -0,0 +1,32 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec;
+
+/**
+ *  Internal factory of package classes. 
+ */
+public class InternalSpecFactory
+{
+    public static AdvancedQuerySpecification createAdvancedQuerySpecification()
+    {
+        return new AdvancedQuerySpecification();
+    }
+    
+    public static QuerySpecification createQuerySpecification()
+    {
+        return new QuerySpecification();
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/QuerySpecification.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/QuerySpecification.java
new file mode 100644
index 0000000..da42d06
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/QuerySpecification.java
@@ -0,0 +1,574 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2014 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.spec.result.ResultSetSpecification;
+import org.eclipse.datatools.connectivity.oda.spec.util.QuerySpecificationHelper;
+
+/**
+ * Specification of the query characteristics to apply when preparing and executing 
+ * an {@link org.eclipse.datatools.connectivity.oda.IQuery}.
+ * @since 3.2 (DTP 1.7)
+ */
+public class QuerySpecification
+{
+    private ResultSetSpecification m_resultSpec;
+    private Map<String,Object> m_propertyMap;
+    private Map<ParameterIdentifier,Object> m_parameterValues;
+    private BaseQuery m_baseQuery;
+
+    // trace logging variables
+    private static final String sm_className = QuerySpecification.class.getName();
+    
+    /*
+     * Internal constructor.
+     * <br>Use {@link org.eclipse.datatools.connectivity.oda.spec.util.QuerySpecificationHelper#createQuerySpecification()} 
+     * to create an instance.
+     */
+    QuerySpecification() {}
+
+    /**
+     * Specifies the value(s) of a data set query property, overriding existing values if any.  
+     * <br>A property may have multiple values kept in a {@link java.util.Collection}.
+     * The property value specified here may be the same as the value set separately
+     * by {@link org.eclipse.datatools.connectivity.oda.IQuery#setProperty(String, String)},
+     * which is set after a query is prepared.  
+     * <br>A property value may be null, whose handling is specific to individual 
+     * driver implementation.
+     * An ODA consumer does not necessarily distinguish whether a property value
+     * is not set or explicitly set to null.
+     * @param propertyName  name of the property
+     * @param value the value of the specified property; may be null
+     */
+    public void setProperty( String propertyName, Object value )
+    {
+        getProperties().put( propertyName, value );
+    }
+    
+    /**
+     * Gets the value(s) of a data set query property.  
+     * <br>A property may have multiple values kept in a {@link java.util.Collection}.
+     * The property value specified here may be the same as the value set separately
+     * by {@link org.eclipse.datatools.connectivity.oda.IQuery#setProperty(String, String)}, 
+     * which is set after a query is prepared.  
+     * <br>Its handling is optional and specific to individual driver implementation
+     * on whether to apply this property value(s) when preparing a query.
+     * <br>If a property name is not recognized by the driver,
+     * it should simply ignore, and not throw an exception.
+     * <br>A property value may be null, whose handling is specific to individual 
+     * driver implementation.
+     * An ODA consumer does not necessarily distinguish whether a property value
+     * is not set or explicitly set to null.  
+     * @param propertyName  name of the property
+     * @return value the value of the specified property; may be null
+     */
+    public Object getProperty( String propertyName )
+    {
+        if( m_propertyMap == null )
+            return null;
+        return m_propertyMap.get( propertyName );
+    }
+
+    /**
+     * Specifies the values of all data set query properties, with each property name 
+     * as the key to its corresponding value(s).
+     * <br>A property may have multiple values kept in a {@link java.util.Collection}.
+     * The property values specified here may be the same as those set separately
+     * by {@link org.eclipse.datatools.connectivity.oda.IQuery#setProperty(String, String)}, 
+     * which are set after a query is prepared.  
+     * <br>A property value may be null, whose handling is specific to individual 
+     * driver implementation.
+     * An ODA consumer does not necessarily distinguish whether a property value
+     * is not set or explicitly set to null.  
+     * @param propertyMap   a {@link Map} of data set query properties in name-value pairs
+     */
+    public void setProperties( Map<String,Object> propertyMap )
+    {
+        m_propertyMap = propertyMap;
+    }
+    
+    /**
+     * Gets the values of all data set query properties, with each property name 
+     * as the key to its corresponding value(s).
+     * <br>A property may have multiple values kept in a {@link java.util.Collection}.
+     * The property values specified here may be the same as those set separately
+     * by {@link org.eclipse.datatools.connectivity.oda.IQuery#setProperty(String, String)}, 
+     * which are set after a query is prepared.  
+     * <br>Its handling is optional and specific to individual driver implementation
+     * on whether to apply these property values when preparing a query.
+     * <br>If a property name is not recognized by the driver,
+     * it should simply ignore, and not throw an exception.
+     * <br>A property value may be null, whose handling is specific to individual 
+     * driver implementation.
+     * An ODA consumer does not necessarily distinguish whether a property value
+     * is not set or explicitly set to null.  
+     * @return  a {@link Map} of all currently specified data set query properties 
+     *          with each property name as the key to its corresponding value(s); 
+     *          may be empty if no property value is specified
+     */
+    public Map<String,Object> getProperties()
+    {
+        if( m_propertyMap == null )
+            m_propertyMap = new HashMap<String,Object>(5);
+        return m_propertyMap;
+    }
+
+    /**
+     * Specifies the input value(s) of a data set query parameter, identified by its native name.  
+     * <br>A parameter may have multiple input values kept in a {@link java.util.Collection}.
+     * The parameter value specified here may be the same as the value set separately
+     * by a query's set by data type method, which is set after a query is prepared.
+     * <br>A value in primitive data type is specified in its corresponding object type.
+     * A parameter value may be null, whose handling is specific to individual 
+     * driver implementation.
+     * @param parameterName native name of the parameter
+     * @param value input value of the specified parameter
+     * @see #setParameterValue(int, Object)
+     */
+    public void setParameterValue( String parameterName, Object value )
+    {
+        setParameterValue( new ParameterIdentifier( parameterName ), value );
+    }
+
+    /**
+     * Specifies the input value(s) of a data set query parameter, identified by its id.  
+     * <br>A parameter may have multiple input values kept in a {@link java.util.Collection}.
+     * The parameter value specified here may be the same as the value set separately
+     * by a query's set by data type method, which is set after a query is prepared.
+     * <br>A value in primitive data type is specified in its corresponding object type.
+     * A parameter value may be null, whose handling is specific to individual 
+     * driver implementation.
+     * @param parameterId   id of the parameter (1-based)
+     * @param value input value of the specified parameter
+     * @see #setParameterValue(String, Object)
+     */
+    public void setParameterValue( int parameterId, Object value )
+    {
+        setParameterValue( new ParameterIdentifier( parameterId ), value );
+    }
+
+    /**
+     * Specifies the input value(s) of a data set query parameter, identified by native name or id.  
+     * @param paramIdentifier   a {@link ParameterIdentifier}
+     *                          that identifies an input parameter by its native name or id (1-based)
+     * @param value input value of the specified parameter
+     * @see #setParameterValue(String, Object)
+     * @see #setParameterValue(int, Object)
+     */
+    public void setParameterValue( ParameterIdentifier paramIdentifier, Object value )
+    {
+        getParameterValues().put( paramIdentifier, value );
+    }
+    
+    /**
+     * Gets the input value(s) of a data set query parameter, identified by its native name.  
+     * <br>A parameter may have multiple input values kept in a {@link java.util.Collection}.
+     * The parameter value specified here may be the same as the value set separately
+     * by a query's set by data type method, which is set after a query is prepared.
+     * <br>Its handling is optional and specific to individual driver implementation
+     * on whether to apply the parameter input value(s) when preparing a query.
+     * <br>A value in primitive data type is specified in its corresponding object type.
+     * A parameter value may be null, whose handling is specific to individual 
+     * driver implementation.
+     * @param parameterName native name of the parameter
+     * @return input value of the specified parameter
+     * @see #getParameterValue(int)
+     */
+    public Object getParameterValue( String parameterName )
+    {
+        return getParameterValue( new ParameterIdentifier( parameterName ));
+    }
+    
+    /**
+     * Gets the input value(s) of a data set query parameter, identified by its native name.  
+     * <br>A parameter may have multiple input values kept in a {@link java.util.Collection}.
+     * The parameter value specified here may be the same as the value set separately
+     * by a query's set by data type method, which is set after a query is prepared.
+     * <br>Its handling is optional and specific to individual driver implementation
+     * on whether to apply the parameter input value(s) when preparing a query.
+     * <br>A value in primitive data type is specified in its corresponding object type.
+     * A parameter value may be null, whose handling is specific to individual 
+     * driver implementation.
+     * @param parameterId   id of the parameter (1-based)
+     * @return input value of the specified parameter
+     * @see #getParameterValue(String)
+     */
+    public Object getParameterValue( int parameterId )
+    {
+        return getParameterValue( new ParameterIdentifier( parameterId ));
+    }
+    
+    /**
+     * Gets the input value(s) of a data set query parameter, identified by native name or id.  
+     * @param paramIdentifier   a {@link ParameterIdentifier}
+     *                          that identifies an input parameter by its native name or id (1-based)
+     * @return  input value of the specified parameter
+     * @see #getParameterValue(String)
+     * @see #getParameterValue(int)
+     */
+    public Object getParameterValue( ParameterIdentifier paramIdentifier )
+    {
+        if( m_parameterValues == null )
+            return null;
+        
+        Object paramValue = m_parameterValues.get( paramIdentifier );
+        if( paramValue != null )
+            return paramValue;
+        
+        // try match by name or id
+        for( Entry<ParameterIdentifier, Object> entry : m_parameterValues.entrySet() )
+        {
+            ParameterIdentifier paramIdKey = entry.getKey();
+            if( paramIdKey.matchesByNameOrId( paramIdentifier ) )
+                return entry.getValue();
+        }
+        return null;
+    }
+    
+    /**
+     * Specifies the values of all input parameters of the associated 
+     * {@link org.eclipse.datatools.connectivity.oda.IQuery}, with  
+     * each parameter identified by name or id as the key to its corresponding input value(s).
+     * <br>A parameter may have multiple input values kept in a {@link java.util.Collection}.
+     * The parameter values specified here may be the same as those set separately
+     * by a query's set by data type methods, which are set after a query is prepared.
+     * <br>A value in primitive data type is specified in its corresponding object type.
+     * A parameter value may be null, whose handling is specific to individual 
+     * driver implementation.
+     * @param paramValues   a {@link Map} of {@link ParameterIdentifier} as the key 
+     *              to its corresponding input value(s)
+     */
+    public void setParameterValues( Map<ParameterIdentifier,Object> paramValues )
+    {
+        m_parameterValues = paramValues;
+    }
+    
+    /**
+     * Gets the values of all input parameters of the associated 
+     * {@link org.eclipse.datatools.connectivity.oda.IQuery}, with  
+     * each parameter identified by name or id as the key to its corresponding input value(s).
+     * <br>A parameter may have multiple input values kept in a {@link java.util.Collection}.
+     * The parameter values specified here may be the same as those set separately
+     * by a query's set by data type methods, which are set after a query is prepared.
+     * <br>Its handling is optional and specific to individual driver implementation
+     * on whether to apply these parameter input values when preparing a query.
+     * <br>A value in primitive data type is specified in its corresponding object type.
+     * A parameter value may be null, whose handling is specific to individual 
+     * driver implementation.
+     * @return  a {@link Map} of all currently specified data set query parameters 
+     *          with each {@link ParameterIdentifier} as the key 
+     *          to its corresponding input value(s);
+     *          may be empty if no parameter value is specified
+     */
+    public Map<ParameterIdentifier,Object> getParameterValues()
+    {
+        if( m_parameterValues == null )
+            m_parameterValues = new HashMap<ParameterIdentifier,Object>(5);
+        return m_parameterValues;
+    }
+    
+    /**
+     * Specifies the characteristics of all the result set(s) to be retrieved by
+     * the associated {@link org.eclipse.datatools.connectivity.oda.IQuery}.
+     * @param resultSpec    specification of a query's result set(s)
+     */
+    public void setResultSetSpecification( ResultSetSpecification resultSpec )
+    {
+        m_resultSpec = resultSpec;
+    }
+    
+    /**
+     * Gets the current result set specification of an {@link org.eclipse.datatools.connectivity.oda.IQuery}.
+     * @return  the current {@link ResultSetSpecification}, or null if not specified
+     */
+    public ResultSetSpecification getResultSetSpecification()
+    {
+        return m_resultSpec;
+    }
+
+    /**
+     * Indicates whether this contains a ResultSetSpecification with a non-empty content.
+     * @return  true if this contains a non-empty ResultSetSpecification; false otherwise
+     * @since 3.3.1 (DTP 1.8.1)
+     */
+    public boolean hasResultSetSpecification()
+    {
+        ResultSetSpecification resultSetSpec = getResultSetSpecification();
+        return ( resultSetSpec != null && ! resultSetSpec.isEmpty() );
+    }
+
+    /**
+     * Specifies the optional base query on which this query specification is to be applied.
+     * @param baseQuery     a concrete type of BaseQuery; may be null to defer the specification 
+     *                  until an {@link org.eclipse.datatools.connectivity.oda.IQuery} is prepared.
+     * @since 3.4 (DTP 1.11)
+     */
+    public void setBaseQuery( BaseQuery baseQuery )
+    {
+        m_baseQuery = baseQuery;
+    }
+
+    /**
+     * Gets the base query on which this query specification is to be applied.
+     * @return     a concrete type of BaseQuery; may be null to defer the specification 
+     *                  until an {@link org.eclipse.datatools.connectivity.oda.IQuery} is prepared.
+     * @since 3.4 (DTP 1.11)
+     */
+    public BaseQuery getBaseQuery()
+    {
+        return m_baseQuery;
+    }
+
+    /**
+     * Validates this in the specified context. 
+     * @param context   context for validation; may be null which would limit the scope of validation
+     * @throws OdaException if validation failed.  The exception thrown may be a chained OdaException, 
+     *          which identifies each of those specification component(s) that has caused 
+     *          the validation exception.
+     * @see {@link org.eclipse.datatools.connectivity.oda.spec.util.ValidatorUtil}
+     * @since 3.2.2 (DTP 1.7.2)
+     */
+    public void validate( ValidationContext context ) 
+        throws OdaException
+    {
+        // pass this to custom validator, if exists, for overall validation
+        try
+        {
+            if( context != null && context.getValidator() != null )
+                context.getValidator().validate( this, context );
+        }
+        catch( OdaException ex )
+        {
+            // log the exception before re-throwing it to the caller
+            QuerySpecificationHelper.logValidationException( sm_className, ex );
+            throw ex;
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see java.lang.Object#toString()
+     * @see {@link QuerySpecificationHelper#getContentAsString(QuerySpecification)}
+     */
+    @Override
+    public String toString()
+    {
+        StringBuffer buffer = new StringBuffer( QuerySpecification.class.getSimpleName() );
+        buffer.append( "\n    { property count: " ); //$NON-NLS-1$
+        buffer.append( getProperties().size() );
+        buffer.append( " }; { parameter count: " ); //$NON-NLS-1$
+        buffer.append( getParameterValues().size() );
+        buffer.append( " }\n    { base query: " ); //$NON-NLS-1$
+        buffer.append( m_baseQuery );
+        buffer.append( " }\n    { resultSpec: " ); //$NON-NLS-1$
+        buffer.append( m_resultSpec );
+        buffer.append( " }" ); //$NON-NLS-1$
+        return buffer.toString();
+    }
+
+    /**
+     * The identifier of a data set query parameter, defined by its native name and/or id (1-based).
+     * <br>A name if specified takes precedence over its specified id.
+     * This may be used as an unique key in a {@link Map}.
+     * Comparison by name is case-sensitive.
+     */
+    public class ParameterIdentifier
+    {
+        private String m_paramName;
+        private Integer m_paramId;
+        
+        private static final String LOG_CLASSNAME_PREFIX = "ParameterIdentifier@"; //$NON-NLS-1$
+        private static final String LOG_ID_LABEL = " [id= "; //$NON-NLS-1$
+        private static final String LOG_NAME_LABEL = ", name= "; //$NON-NLS-1$
+        private static final String LOG_END_BRACKET = "]"; //$NON-NLS-1$
+
+        /**
+         * Creates a parameter identifier with its native name.
+         * @param paramName native name of the parameter
+         * @throws IllegalArgumentException if specified argument is null or empty
+         */
+        public ParameterIdentifier( String paramName )
+        {
+            setParameterName( paramName );
+        }
+        
+        /**
+         * Creates a parameter identifier with its id.
+         * @param paramId   id of the parameter (1-based)
+         * @throws IllegalArgumentException if specified argument is not greater or equal to 1
+         */
+        public ParameterIdentifier( int paramId )
+        {
+            setParameterId( paramId );
+        }
+
+        /**
+         * Creates a parameter identifier with both its native name and id.
+         * @param paramName native name of the parameter
+         * @param paramId   id of the parameter (1-based)
+         */
+        public ParameterIdentifier( String paramName, int paramId )
+        {
+            setParameterName( paramName );
+            setParameterId( paramId );
+        }
+        
+        private void setParameterId( int paramId )
+        {
+            if( paramId < 1 )
+                throw new IllegalArgumentException( Integer.valueOf( paramId ).toString() );
+            
+            m_paramId = Integer.valueOf( paramId );
+        }
+        
+        private void setParameterName( String paramName )
+        {
+            if( paramName == null || paramName.length() == 0 )
+                throw new IllegalArgumentException( paramName );
+            
+            m_paramName = paramName;
+        }
+        
+        /**
+         * Gets the parameter id, if specified.
+         * @return  parameter id, or null if not specified
+         */
+        public Integer getParameterId()
+        {
+            return m_paramId;
+        }
+
+        /**
+         * Gets the parameter's native name, if specified.
+         * @return  parameter's native name, or null if not specified
+         */
+        public String getParameterName()
+        {
+            return m_paramName;
+        }
+
+        /**
+         * Indicates whether this has a native name.
+         * @return  true if a native name exists; false otherwise
+         */
+        public boolean hasName()
+        {
+            return ( m_paramName != null && m_paramName.length() > 0 );
+        }
+        
+        /**
+         * Indicates whether this has an 1-based id.
+         * @return  true if an id exists; false otherwise
+         */
+        public boolean hasId()
+        {
+            return ( m_paramId != null && m_paramId.intValue() > 0 );
+        }
+        
+        private boolean matchesByNameOrId( Object obj )
+        {
+            if( ! (obj instanceof ParameterIdentifier) )
+                return false;
+
+            ParameterIdentifier thatObj = (ParameterIdentifier) obj;
+            if( this == thatObj )
+                return true;
+            
+            // compares by name first, if exists
+            boolean matchesName = false;
+            if( this.hasName() && thatObj.hasName() )
+            {
+                if( this.m_paramName.equals( thatObj.m_paramName ) )
+                    matchesName = true;
+                else
+                    return false;
+            }
+
+            // compares by id, if exists
+            if( this.hasId() && thatObj.hasId() )
+                return( this.m_paramId.equals( thatObj.m_paramId ));
+            
+            return matchesName;
+        }
+        
+        /* (non-Javadoc)
+         * @see java.lang.Object#equals(java.lang.Object)
+         */
+        @Override
+        public boolean equals( Object obj )
+        {
+            if( ! (obj instanceof ParameterIdentifier) )
+                return false;
+
+            ParameterIdentifier thatObj = (ParameterIdentifier) obj;
+            if( this == thatObj )
+                return true;
+            
+            // compares by name first, if exists
+            boolean isNameEqual = false;
+            if( this.hasName() )
+            {
+                if( this.m_paramName.equals( thatObj.m_paramName ) )
+                    isNameEqual = true;
+                else
+                    return false;
+            }
+
+            // compares by id, if exists
+            if( this.hasId() )
+                return( this.m_paramId.equals( thatObj.m_paramId ));
+            
+            return isNameEqual;
+        }
+
+        /* (non-Javadoc)
+         * @see java.lang.Object#hashCode()
+         */
+        @Override
+        public int hashCode()
+        {
+            int hashCode = 0;
+            // use its name for hashcode if exists
+            if( hasName() )
+                hashCode = m_paramName.hashCode();
+            
+            if( hasId() )
+                return hashCode ^ m_paramId.hashCode();
+            
+            return (hashCode == 0) ? super.hashCode() : hashCode;
+        }
+
+        /* (non-Javadoc)
+         * @see java.lang.Object#toString()
+         */
+        @Override
+        public String toString()
+        {
+            StringBuffer buffer = new StringBuffer( LOG_CLASSNAME_PREFIX );
+            buffer.append( super.hashCode() );
+            buffer.append( LOG_ID_LABEL );
+            buffer.append( m_paramId ); 
+            buffer.append( LOG_NAME_LABEL );
+            buffer.append( m_paramName );
+            buffer.append( LOG_END_BRACKET ); 
+            return buffer.toString();
+        } 
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/ValidationContext.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/ValidationContext.java
new file mode 100644
index 0000000..354d7a2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/ValidationContext.java
@@ -0,0 +1,254 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Map.Entry;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.ExtensionContributor;
+
+
+/**
+ * The context for validation of a query specification and associated query specification expressions.
+ * It may include a custom validator and/or the contributor of the expression being validated.
+ * @since 3.3 (DTP 1.8)
+ */
+public class ValidationContext
+{
+    private static final String NAMESPACE = ValidationContext.class.getName();
+    
+    /**
+     * Pre-defined property names of validation context data that may be used at validation
+     */
+    protected static final String DATA_PROPERTY_QUERY_TEXT = NAMESPACE + ".QueryTextProp"; //$NON-NLS-1$
+    protected static final String DATA_PROPERTY_CONNECTION = NAMESPACE + ".ConnProp";  //$NON-NLS-1$
+    
+    private ExtensionContributor m_contributor;
+    private IValidator m_validator;
+    private Map<String,Object> m_customData;
+    
+    public ValidationContext( ExtensionContributor contributor )
+    {
+        m_contributor = contributor;
+    }
+    
+    public ValidationContext( IValidator validator )
+    {
+        m_validator = validator;
+    }
+    
+    /**
+     * Gets the contributor of a custom filter expression being validated.
+     * @return  an instance of the {@link ExtensionContributor} that defines its scope and capabilities,
+     *      or null if none is available
+     */
+    public ExtensionContributor getContributor()
+    {
+        return m_contributor;
+    }
+
+    /**
+     * Gets the custom validator of a filter expression being validated.
+     * @return  an {@link IValidator} instance, or null if none is available
+     */
+    public IValidator getValidator()
+    {
+        if( m_validator != null )
+            return m_validator;
+        
+        if( m_contributor != null )
+        {
+            try
+            {
+                m_validator = m_contributor.getValidator();
+                return m_validator;
+            }
+            catch( OdaException ex )
+            {
+                // TODO log warning
+            }
+        }
+        
+        return null;
+    }
+    
+    /**
+     * Sets the custom validator of a filter expression being validated.
+     * @param validator    an {@link IValidator} instance
+     */
+    public void setValidator( IValidator validator )
+    {
+        m_validator = validator;
+    }
+    
+    /**
+     * Gets the value of a named property.
+     * An extension contributor may associate arbitrary object to an extension-defined property 
+     * for use at validation. 
+     * @param key   the name of property
+     * @return      the value of the named property, or null if it has not been set
+     */
+    public Object getData( String key )
+    {
+        if( m_customData == null )
+            return null;
+        return m_customData.get( key );
+    }
+
+    /**
+     * Sets the value of a named property.
+     * An extension contributor may associate arbitrary object to an extension-defined property 
+     * for use at validation. 
+     * @param key   the name of property
+     * @param value the new value of the named property
+     */
+    public void setData( String key, Object value )
+    {
+        if( m_customData == null )
+            m_customData = new HashMap<String,Object>();
+        m_customData.put( key, value );
+    }
+    
+    /**
+     * Gets the optional query text specified in this context.
+     * @return  the query text specified in context, may be null if none is specified
+     */
+    public String getQueryText()
+    {
+        Object value = getData( DATA_PROPERTY_QUERY_TEXT );
+        return (value instanceof String) ? (String) value : null;
+    }
+    
+    /**
+     * Sets the query text specified in this context.
+     * @param queryText query text; may be null to unset previous value
+     */
+    public void setQueryText( String queryText )
+    {
+        setData( DATA_PROPERTY_QUERY_TEXT, queryText );
+    }
+    
+    /**
+     * Gets the optional connection context that may be used by an {@link IValidator} implementation
+     * for online validation.
+     * A client may optimize performance by re-using its properties for opening a related connection 
+     * to prepare and execute a query.     
+     * @return  the connection context for online validation; may be null if none is specified
+     */
+    public Connection getConnection()
+    {
+        Object value = getData( DATA_PROPERTY_CONNECTION );
+        return (value instanceof Connection) ? (Connection)value : null;
+    }
+
+    /**
+     * Sets the connection context for online validation.
+     * The connection context, if exists, may be used by an {@link IValidator} implementation
+     * to open a connection to perform online validation.
+     * @param props connection properties for opening a connection for online validation 
+     */
+    public void setConnection( Connection validationConn )
+    {
+        setData( DATA_PROPERTY_CONNECTION, validationConn );
+    }
+    
+    
+    /**
+     * A connection context for online validation.  An instance can be shared 
+     * by multiple ValidationContext.  
+     * Its optional use by a client would expand the scope of validation performed.  
+     * An instance must contain the connection properties needed by a validator to open a connection.
+     * An {@link IValidator} implementation may add its own name-value pairs to its properties, 
+     * such as a connection handle, for optimizing its performance.  
+     * The client is responsible to close the connection context when it is no longer needed.
+     */
+    public class Connection
+    {
+        private Properties m_properties;
+        
+        public Connection( Properties props )
+        {
+            m_properties = props;
+        }
+        
+        public Properties getProperties()
+        {
+            return m_properties;
+        }
+
+        public void setProperties( Properties props )
+        {
+            if( ! hasProperties( props ) )
+            {
+                // close any existing connection handle before replacing the existing properties
+                close();    
+                m_properties = props;
+            }
+        }
+        
+        /**
+         * Closes this connection context.
+         * <br>The client is responsible to close this when it is no longer needed.
+         */
+        public void close()
+        {
+            if( m_properties != null && ! m_properties.isEmpty() )
+            {
+                IValidator validator = getValidator();
+                if( validator != null )
+                    validator.closeConnection( this );
+            }
+        }
+        
+        /*
+         * Checks whether this connection's existing properties 
+         * contain each and every key-value pair of the specified props.
+         * It is ok if existing properties have additional entries than the specified ones.
+         */
+        private boolean hasProperties( Properties props )
+        {
+            if( props == null || props.isEmpty() || props == m_properties )
+                return true;
+            if( m_properties == null || m_properties.isEmpty() )
+                return false;
+
+            if( props.size() > m_properties.size() )
+                return false;
+
+            // check whether the key and value of each specified property exist
+            for( Entry<Object, Object> newPropEntry : props.entrySet() )
+            {
+                Object key = newPropEntry.getKey();
+                Object value = newPropEntry.getValue();
+                if( value == null )
+                {
+                    if( !( m_properties.containsKey( key ) && m_properties.get( key ) == null ) )
+                        return false;
+                }
+                else
+                {
+                    if( ! value.equals( m_properties.get( key ) ) )
+                        return false;
+                }
+            }
+
+            return true;
+        }
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/ValueExpression.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/ValueExpression.java
new file mode 100644
index 0000000..459ccbb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/ValueExpression.java
@@ -0,0 +1,178 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec;
+
+import java.sql.Types;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionVariable.VariableType;
+import org.eclipse.datatools.connectivity.oda.spec.util.QuerySpecificationHelper;
+
+/**
+ * The abstract base class for an ODA expression
+ * that resolves to a value.
+ * It may be associated with an {@link ExpressionVariable} or
+ * {@link ExpressionArguments} in an ODA query specification.
+ * <br>It is the responsibility of an ODA driver to resolve an expression,
+ * when evaluating it with a query result spec expression.
+ * This may be extended to represent complex types of value expression.
+ * @since 3.3 (DTP 1.8)
+ */
+public abstract class ValueExpression
+{
+    public static final Integer UNKNOWN_ODA_DATA_TYPE = Integer.valueOf( Types.NULL );
+
+    protected static final String SPACE = " "; //$NON-NLS-1$    
+    protected static final String LEFT_PARANTHESIS = "("; //$NON-NLS-1$
+    protected static final String RIGHT_PARANTHESIS = ")"; //$NON-NLS-1$
+    protected static final String LEFT_CURLY_BRACKET = " {"; //$NON-NLS-1$
+    protected static final String RIGHT_CURLY_BRACKET = "} "; //$NON-NLS-1$
+    // trace logging variables
+    private static final String sm_className = ValueExpression.class.getName();
+    
+    private Integer m_odaDataType; 
+    
+    /**
+     * Returns the qualified id of this value expression type.
+     * @return  qualified id
+     */
+    public String getQualifiedId()
+    {
+        return getClass().getName();
+    }
+    
+    /**
+     * Gets the name of this value expression type.
+     * It may be used to identify this in user messages or logging.
+     * @return  name of this value expression
+     */
+    public String getName()
+    {
+        return getClass().getSimpleName();
+    }
+    
+    /**
+     * Returns the type of expression. 
+     * @return
+     */
+    public VariableType getVariableType()
+    {
+        return VariableType.QUERY_EXPRESSION;
+    }
+
+    /**
+     * Gets the ODA-defined code value of this variable's data type.
+     * This serves as an optional hint that may have been specified based on the resolved expression.
+     * @return      the ODA data type code of this variable, or null if not available
+     */
+    public Integer getOdaDataType()
+    {
+        return m_odaDataType;
+    }
+
+    /**
+     * Sets the ODA data type of this variable.
+     * This serves as an optional hint that may have been specified based on the resolved expression,
+     * and may be ignored by the runtime driver, if appropriate.
+     * @param odaDataTypeCode the ODA data type code of this variable;
+     *              may be null to unset current value
+     */
+    public void setOdaDataType( Integer odaDataType )
+    {
+        m_odaDataType = odaDataType;
+    }
+
+    protected static boolean isNumeric( Integer odaDataType )
+    {
+        if( odaDataType == null || odaDataType == UNKNOWN_ODA_DATA_TYPE )
+            return false;
+        
+        int odaDataTypeCode = odaDataType.intValue();
+        return odaDataTypeCode == Types.INTEGER || 
+                odaDataTypeCode == Types.DOUBLE || 
+                odaDataTypeCode == Types.DECIMAL;
+    }
+
+    /**
+     * Checks whether two objects are equal using the
+     * <code>equals(Object)</code> method of the <code>left</code> object.
+     * This method handles <code>null</code> for either the <code>left</code>
+     * or <code>right</code> object.
+     * @param left the first object to compare; may be <code>null</code>.
+     * @param right the second object to compare; may be <code>null</code>.
+     * @return <code>true</code> if the two objects are equivalent;
+     *         <code>false</code> otherwise.
+     */
+    protected static final boolean equals( final Object left, final Object right )
+    {
+        return left == null ? right == null : 
+                            ((right != null) && left.equals( right ));
+    }
+
+    /**
+     * Validates this value expression. 
+     * @throws OdaException if validation failed. The concrete cause is 
+     *          defined by the subclass implementing this method.
+     */
+    public void validate() throws OdaException
+    {
+        validate( null );
+    }
+
+    /**
+     * Validates this expression in the specified context. 
+     * @param context   context for validation; may be null which would limit the scope of validation
+     * @throws OdaException if validation failed. The concrete cause is 
+     *          defined by the subclass implementing this method.
+     */
+    public void validate( ValidationContext context ) 
+        throws OdaException
+    {
+        try
+        {
+            validateSyntax( context );
+
+            // pass this to custom validator, if exists, for further overall validation
+            if( context != null && context.getValidator() != null )
+                context.getValidator().validate( this, context );
+        }
+        catch( OdaException ex )
+        {
+            // log the exception before re-throwing it to the caller
+            QuerySpecificationHelper.logValidationException( sm_className, ex );
+            throw ex;
+        }
+    }
+
+    /**
+     * Performs syntactic validation of this expression in the specified context. 
+     * @param context   context for validation; may be null which would limit the scope of validation
+     * @throws OdaException if validation failed. The concrete cause is 
+     *          defined by the subclass implementing this method.
+     */
+    public abstract void validateSyntax( ValidationContext context ) 
+        throws OdaException;
+
+    /* (non-Javadoc)
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString()
+    {
+        StringBuffer buffer = new StringBuffer( getName() + SPACE + getVariableType() );
+        return buffer.toString();
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/basequery/AtomicQuery.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/basequery/AtomicQuery.java
new file mode 100644
index 0000000..fc5bb7e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/basequery/AtomicQuery.java
@@ -0,0 +1,74 @@
+/*

+ *************************************************************************

+ * Copyright (c) 2013, 2014 Actuate Corporation.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *  Actuate Corporation - initial API and implementation

+ *  

+ *************************************************************************

+ */

+

+package org.eclipse.datatools.connectivity.oda.spec.basequery;

+

+import org.eclipse.datatools.connectivity.oda.OdaException;

+import org.eclipse.datatools.connectivity.oda.nls.Messages;

+import org.eclipse.datatools.connectivity.oda.spec.BaseQuery;

+import org.eclipse.datatools.connectivity.oda.spec.ValidationContext;

+import org.eclipse.datatools.connectivity.oda.spec.util.ValidatorUtil;

+

+/**

+ * A concrete base query that specifies the query text to be prepared by 

+ * {@link org.eclipse.datatools.connectivity.oda.IQuery#prepare(String)}.

+ * When a non-empty query text is passed in as argument to the #prepare method, 

+ * it would override and take precedence over this specification.

+ * @since 3.4 (DTP 1.11)

+ */

+public class AtomicQuery extends BaseQuery

+{

+    private String m_queryText;

+    

+    public AtomicQuery( String queryText )

+    {

+        setQueryText( queryText );

+    }

+    

+    public void setQueryText( String queryText )

+    {

+        m_queryText = queryText;

+    }

+

+    public String getQueryText()

+    {

+        return m_queryText;

+    }

+    

+    public boolean hasQueryText()

+    {

+        return getQueryText() != null && ! getQueryText().trim().isEmpty();

+    }

+

+    @Override

+    /* (non-Javadoc)

+     * @see org.eclipse.datatools.connectivity.oda.spec.BaseQuery#validateSyntax(org.eclipse.datatools.connectivity.oda.spec.ValidationContext)

+     */

+    public void validateSyntax( ValidationContext context ) throws OdaException

+    {

+        if( ! hasQueryText() )

+            throw ValidatorUtil.newBaseQueryException( Messages.querySpec_MISSING_ATOMIC_QUERY_TEXT, this );

+    }

+

+    @Override

+    public String toString()

+    {

+        StringBuffer buffer = new StringBuffer( AtomicQuery.class.getSimpleName() );

+        buffer.append( "  { query text: " ); //$NON-NLS-1$

+        buffer.append( m_queryText );

+        buffer.append( " }" ); //$NON-NLS-1$

+        return buffer.toString();

+    }

+    

+}

diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/basequery/CombinedQuery.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/basequery/CombinedQuery.java
new file mode 100644
index 0000000..4f063bc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/basequery/CombinedQuery.java
@@ -0,0 +1,325 @@
+/*

+ *************************************************************************

+ * Copyright (c) 2013, 2014 Actuate Corporation.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *  Actuate Corporation - initial API and implementation

+ *  

+ *************************************************************************

+ */

+

+package org.eclipse.datatools.connectivity.oda.spec.basequery;

+

+import org.eclipse.datatools.connectivity.oda.OdaException;

+import org.eclipse.datatools.connectivity.oda.nls.Messages;

+import org.eclipse.datatools.connectivity.oda.spec.BaseQuery;

+import org.eclipse.datatools.connectivity.oda.spec.QuerySpecification;

+import org.eclipse.datatools.connectivity.oda.spec.ValidationContext;

+import org.eclipse.datatools.connectivity.oda.spec.ValueExpression;

+import org.eclipse.datatools.connectivity.oda.spec.result.ColumnIdentifier;

+import org.eclipse.datatools.connectivity.oda.spec.result.FilterExpression;

+import org.eclipse.datatools.connectivity.oda.spec.result.filter.AtomicExpression;

+import org.eclipse.datatools.connectivity.oda.spec.result.filter.CompositeExpression;

+import org.eclipse.datatools.connectivity.oda.spec.util.ValidatorUtil;

+import org.eclipse.datatools.connectivity.oda.spec.valueexpr.ColumnValueExpression;

+import org.eclipse.datatools.connectivity.oda.spec.valueexpr.CombinedValueExpression;

+import org.eclipse.datatools.connectivity.oda.spec.valueexpr.NestedValueExpression;

+

+/**

+ * A composite base query formed by dynamically combining two sets of

+ * query characteristics under a specified condition.

+ * Each combining query, specified in a {@link QuerySpecification}, may in turn be based on

+ * a nested CombinedQuery, with the lowest level of nested base query being an {@link AtomicQuery}.

+ * @since 3.4 (DTP 1.11)

+ */

+public class CombinedQuery extends BaseQuery

+{

+    public enum CombinedType

+    {

+        INNER_JOIN,

+        LEFT_OUTER,

+        RIGHT_OUTER,

+        FULL_OUTER;

+    }

+    

+    private CombinedType m_combinedType;

+    private QuerySpecification m_leftQuery;

+    private QuerySpecification m_rightQuery;

+    private CombinedQueryCondition m_combinedCondition;

+    

+    public CombinedQuery()

+    {

+        this( CombinedType.INNER_JOIN );  // default

+    }

+    

+    public CombinedQuery( CombinedType combinedType )

+    {

+        m_combinedType = combinedType;

+    }

+

+    /** 

+     * Specifies the left and right sets of {@link QuerySpecification} to combine 

+     * under the CombinedQueryCondition.

+     * @param leftQuery     the left query to combine

+     * @param rightQuery    the right query to combine

+     * @param combinedCondition     the condition to evaluate in combining the 2 queries

+     * @throws OdaException     when the specified combining components are invalid

+     */

+    public void setCombinedQuery( QuerySpecification leftQuery, QuerySpecification rightQuery, CombinedQueryCondition combinedCondition ) 

+        throws OdaException

+    {

+        m_leftQuery = leftQuery;

+        m_rightQuery = rightQuery;        

+        m_combinedCondition = combinedCondition;

+        

+        validateSyntax( null );

+    }

+

+    /**

+     * Gets the left query to combine.

+     * @return  the {@link QuerySpecification} of the combining left query

+     */

+    public QuerySpecification getLeftQuery()

+    {

+        return m_leftQuery;

+    }

+

+    /**

+     * Gets the right query to combine.

+     * @return  the {@link QuerySpecification} of the combining right query

+     */

+    public QuerySpecification getRightQuery()

+    {

+        return m_rightQuery;

+    }

+

+    /**

+     * Gets the type of this CombinedQuery.

+     * @return  a {@link CombinedType}

+     */

+    public CombinedType getCombinedType()

+    {

+        return m_combinedType;

+    }

+

+    /**

+     * Gets the condition to evaluate in combining the 2 sets of queries.

+     * @return  a {@link CombinedQueryCondition}

+     */

+    public CombinedQueryCondition getCombinedCondition()

+    {

+        return m_combinedCondition;

+    }

+

+    @Override

+    /* (non-Javadoc)

+     * @see org.eclipse.datatools.connectivity.oda.spec.BaseQuery#validateSyntax(org.eclipse.datatools.connectivity.oda.spec.ValidationContext)

+     */

+    public void validateSyntax( ValidationContext context ) throws OdaException

+    {

+        if( m_leftQuery == null || m_rightQuery == null || m_combinedCondition == null )

+            throw ValidatorUtil.newBaseQueryException( Messages.querySpec_INCOMPLETE_COMBINED_QUERY, this );

+

+        try

+        {

+            m_combinedCondition.validateSyntax( context );

+        }

+        catch( OdaException ex )

+        {

+            throw ValidatorUtil.newBaseQueryException( this, ex );

+        }

+    }

+

+    private void validateCombiningExpression( FilterExpression combiningExpr ) 

+            throws OdaException

+    {

+        if( combiningExpr instanceof AtomicExpression )

+        {

+            AtomicExpression atomicCombiningExpr = (AtomicExpression)combiningExpr;

+

+            // validate the variable's querySpec qualifier, if exists

+            validateQueryQualifier( atomicCombiningExpr.getVariable().getValueExpression() );

+

+            int numArgs = atomicCombiningExpr.getArguments().valueCount();

+            for( int i=0; i < numArgs; i++ )

+            {

+                // validate each argument's querySpec qualifier, if exists

+                validateQueryQualifier( atomicCombiningExpr.getArguments().getValueExpression(i) );

+            }

+            return;

+        }

+

+        if( combiningExpr instanceof CompositeExpression )

+        {

+            FilterExpression[] childExprs = ((CompositeExpression)combiningExpr).getChildren();

+            for( int i= 0; i < childExprs.length; i++ )

+                validateCombiningExpression( childExprs[i] );

+            return;

+        }

+    }

+    

+    private void validateQueryQualifier( ValueExpression valueExpr )

+        throws OdaException

+    {

+        if( valueExpr instanceof ColumnValueExpression )

+        {

+            ColumnIdentifier columnIdentifier = ((ColumnValueExpression)valueExpr).getColumnReference();

+            if( columnIdentifier != null )

+            {

+                // validate that its querySpec qualifier, if exists, must be one of the combining queries

+                QuerySpecification columnQuerySpec = columnIdentifier.getQueryQualifier();

+                if( columnQuerySpec != null && ! containsCombiningQuery( columnQuerySpec ) )

+                    throw ValidatorUtil.newValueExprException( 

+                        Messages.bind( Messages.querySpec_NON_RELATED_QUERYSPEC, columnIdentifier ), valueExpr );

+                return;              

+            }

+        }

+

+        if( valueExpr instanceof NestedValueExpression )

+        {

+            validateQueryQualifier( ((NestedValueExpression)valueExpr).getNestedExpression() );

+            return;

+        }

+

+        if( valueExpr instanceof CombinedValueExpression )

+        {

+            validateQueryQualifier( ((CombinedValueExpression)valueExpr).getLeftExpression() );

+            validateQueryQualifier( ((CombinedValueExpression)valueExpr).getRightExpression() );

+            return;

+        }

+    }

+

+    /*

+     *  Checks whether the specified querySpec is one of the combining queries, which may be nested.

+     */

+    private boolean containsCombiningQuery( QuerySpecification querySpec )

+    {

+        if( querySpec == getLeftQuery() )

+            return true;

+        if( querySpec == getRightQuery() )

+            return true;

+        

+        // check nested combining queries

+        CombinedQuery nestedCombinedQuery;

+        if( getLeftQuery().getBaseQuery() instanceof CombinedQuery )

+        {

+            nestedCombinedQuery = (CombinedQuery)getLeftQuery().getBaseQuery();

+            if( nestedCombinedQuery != this && nestedCombinedQuery.containsCombiningQuery( querySpec ) )

+                return true;

+        }

+        if( getRightQuery().getBaseQuery() instanceof CombinedQuery )

+        {

+            nestedCombinedQuery = (CombinedQuery)getRightQuery().getBaseQuery();

+            if( nestedCombinedQuery != this && nestedCombinedQuery.containsCombiningQuery( querySpec ) )

+                return true;

+        }

+        return false;

+    }

+

+    @Override

+    public String toString()

+    {

+        StringBuffer buffer = new StringBuffer( CombinedQuery.class.getSimpleName() );

+        buffer.append( " " ); //$NON-NLS-1$

+        buffer.append( m_combinedType.name() );

+        buffer.append( "\n    { leftQuery: " ); //$NON-NLS-1$

+        buffer.append( m_leftQuery );

+        buffer.append( " }\n    { rightQuery: " ); //$NON-NLS-1$

+        buffer.append( m_rightQuery );

+        buffer.append( " }\n    { combinedQueryCondition: " ); //$NON-NLS-1$

+        buffer.append( m_combinedCondition );

+        buffer.append( " }" ); //$NON-NLS-1$

+        return buffer.toString();

+    }

+

+    /**

+     * Instantiates a new CombinedQueryCondition that specifies the matching criteria to apply

+     * in combining 2 sets of queries.

+     * @param combinedExpr  a root-level filter expression for evaluation of combining criteria

+     * @return  a {@link CombinedQueryCondition} that may be used to define a CombinedQuery

+     * @since 3.4.1 (DTP 1.11.1)

+     */

+    public CombinedQueryCondition createCombinedCondition( FilterExpression combinedExpr )

+    {

+        return this.new CombinedQueryCondition( combinedExpr );

+    }

+

+    /**

+     * Specifies the condition under which two query specifications are to be combined.

+     */

+    public class CombinedQueryCondition

+    {

+        private FilterExpression m_expr;

+        

+        /**

+         * Constructor.

+         * @param combiningExpr    a root-level {@link FilterExpression} for evaluation of matching criteria

+         *                  to combine two sets of query specification

+         */

+        CombinedQueryCondition( FilterExpression combiningExpr )

+        {

+            m_expr = combiningExpr;

+        }

+        

+        /**

+         * Gets the root-level filter expression for evaluation of matching criteria to combine

+         * two sets of query specification.

+         * @return  a {@link FilterExpression}

+         * @since 3.4.1 (DTP 1.11.1)

+         */

+        public FilterExpression getCombiningExpression()

+        {

+            return m_expr;

+        }

+

+        /**

+         * Validates this condition. 

+         * @throws OdaException if validation failed. The concrete cause is 

+         *          defined by the subclass implementing this method.

+         */

+        public void validate() throws OdaException

+        {

+            validate( null );

+        }

+

+        /**

+         * Validates this condition in the specified context. 

+         * @param context   context for validation; may be null which would limit the scope of validation

+         * @throws OdaException if validation failed

+         */

+        public void validate( ValidationContext context ) 

+            throws OdaException

+        {

+            validateSyntax( context );

+            m_expr.validate( context );

+        }

+

+        /**

+         * Performs syntactic validation of this condition in the specified context. 

+         * @param context   context for validation; may be null which would limit the scope of validation

+         * @throws OdaException if validation failed.

+         */

+        public void validateSyntax( ValidationContext context ) 

+            throws OdaException

+        {

+            if( m_expr == null )

+                throw new OdaException( Messages.querySpec_MISSING_COMBINED_MATCHING_EXPR );

+            m_expr.validateSyntax( context );

+            validateCombiningExpression( m_expr );

+        }

+

+        @Override

+        public String toString()

+        {

+            StringBuffer buffer = new StringBuffer( " { combining expr: " ); //$NON-NLS-1$

+            buffer.append( m_expr );

+            buffer.append( " }" ); //$NON-NLS-1$

+            return buffer.toString();

+        }

+    }

+

+}

diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/basequery/package.html b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/basequery/package.html
new file mode 100644
index 0000000..ebd60fd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/basequery/package.html
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2013, 2014 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+Defines the concrete BaseQuery classes for use in the Open Data Access (ODA) 
+query specification.
+<p>
+
+<!-- Put @see and @since tags down here. -->
+@since 3.4 (DTP 1.11)
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/impl/ValidatorBaseImpl.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/impl/ValidatorBaseImpl.java
new file mode 100644
index 0000000..d83ff6e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/impl/ValidatorBaseImpl.java
@@ -0,0 +1,183 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2013 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.impl;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.spec.BaseQuery;
+import org.eclipse.datatools.connectivity.oda.spec.IValidator;
+import org.eclipse.datatools.connectivity.oda.spec.QuerySpecification;
+import org.eclipse.datatools.connectivity.oda.spec.ValidationContext;
+import org.eclipse.datatools.connectivity.oda.spec.ValidationContext.Connection;
+import org.eclipse.datatools.connectivity.oda.spec.ValueExpression;
+import org.eclipse.datatools.connectivity.oda.spec.result.AggregateExpression;
+import org.eclipse.datatools.connectivity.oda.spec.result.FilterExpression;
+import org.eclipse.datatools.connectivity.oda.spec.result.ResultSetSpecification;
+import org.eclipse.datatools.connectivity.oda.spec.result.SortSpecification;
+import org.eclipse.datatools.connectivity.oda.spec.util.QuerySpecificationHelper;
+
+/**
+ * A base class that provides stub implementation of all the {@link IValidator} interface methods.
+ * <br>An oda.dynamicResultSet extension may optionally extend this base class for its 
+ * IValidator implementation, and overrides only those methods that it supports.
+ */
+public class ValidatorBaseImpl implements IValidator
+{
+    protected ValidatorBaseImpl() {}
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.IValidator#closeConnection(org.eclipse.datatools.connectivity.oda.spec.ValidationContext.Connection)
+     */
+    public void closeConnection( Connection validationConnection )
+    {
+        // sub-class to extend
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.IValidator#validate(org.eclipse.datatools.connectivity.oda.spec.QuerySpecification, org.eclipse.datatools.connectivity.oda.spec.ValidationContext)
+     */
+    public void validate( QuerySpecification querySpec,
+            ValidationContext context ) throws OdaException
+    {
+        if( querySpec == null )
+            return;     // nothing to validate
+
+        // set atomic query text if exists in context for validation
+        boolean hasSetQueryText = setContextQueryTextFromSpec( context, querySpec );
+
+        validate( querySpec.getResultSetSpecification(), context );
+        if( querySpec.getBaseQuery() != null )
+            validate( querySpec.getBaseQuery(), context );
+
+        // restore the original state in context
+        if( hasSetQueryText )
+            context.setQueryText( null );
+
+        // sub-class to extend to validate the data set query properties and/or 
+        // input parameters in querySpec, as appropriate
+    }
+
+    protected boolean setContextQueryTextFromSpec( ValidationContext context, QuerySpecification querySpec )
+    {
+        if( context == null || context.getQueryText() != null )
+            return false;     // no context, or already has query text; leave it as is
+        
+        if( ! QuerySpecificationHelper.hasAtomicQueryText( querySpec ) )
+            return false;     // no query text available in the querySpec
+        
+        context.setQueryText( QuerySpecificationHelper.getAtomicQuery( querySpec ).getQueryText() );
+        return true;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.IValidator#validate(org.eclipse.datatools.connectivity.oda.spec.result.ResultSetSpecification, org.eclipse.datatools.connectivity.oda.spec.ValidationContext)
+     */
+    public void validate( ResultSetSpecification resultSetSpec,
+            ValidationContext context ) throws OdaException
+    {
+        // sub-class to extend
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.IValidator#validate(org.eclipse.datatools.connectivity.oda.spec.result.FilterExpression, org.eclipse.datatools.connectivity.oda.spec.ValidationContext)
+     */
+    public void validate( FilterExpression filterExpr, ValidationContext context )
+            throws OdaException
+    {
+        validateSyntax( filterExpr, context );
+        
+        // sub-class to extend
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.IValidator#validate(org.eclipse.datatools.connectivity.oda.spec.result.AggregateExpression, org.eclipse.datatools.connectivity.oda.spec.ValidationContext)
+     */
+    public void validate( AggregateExpression aggrExpr,
+            ValidationContext context ) throws OdaException
+    {
+        validateSyntax( aggrExpr, context );
+
+        // sub-class to extend
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.IValidator#validate(org.eclipse.datatools.connectivity.oda.spec.ValueExpression, org.eclipse.datatools.connectivity.oda.spec.ValidationContext)
+     */
+    public void validate( ValueExpression valueExpr, ValidationContext context )
+            throws OdaException
+    {
+        validateSyntax( valueExpr, context );
+
+        // sub-class to extend
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.IValidator#validate(org.eclipse.datatools.connectivity.oda.spec.result.SortSpecification, org.eclipse.datatools.connectivity.oda.spec.ValidationContext)
+     */
+    public void validate( SortSpecification sortSpec, ValidationContext context )
+            throws OdaException
+    {
+        // sub-class to extend
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.IValidator#validate(org.eclipse.datatools.connectivity.oda.spec.BaseQuery, org.eclipse.datatools.connectivity.oda.spec.ValidationContext)
+     * @since 3.4 (DTP 1.11)
+     */
+    public void validate( BaseQuery baseQuery, ValidationContext context )
+        throws OdaException
+    {
+        validateSyntax( baseQuery, context );
+        
+        // sub-class to extend
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.IValidator#validateSyntax(org.eclipse.datatools.connectivity.oda.spec.result.FilterExpression, org.eclipse.datatools.connectivity.oda.spec.ValidationContext)
+     */
+    public void validateSyntax( FilterExpression filterExpr,
+            ValidationContext context ) throws OdaException
+    {
+        // sub-class to extend
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.IValidator#validateSyntax(org.eclipse.datatools.connectivity.oda.spec.result.AggregateExpression, org.eclipse.datatools.connectivity.oda.spec.ValidationContext)
+     */
+    public void validateSyntax( AggregateExpression aggrExpr,
+            ValidationContext context ) throws OdaException
+    {
+        // sub-class to extend
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.IValidator#validateSyntax(org.eclipse.datatools.connectivity.oda.spec.ValueExpression, org.eclipse.datatools.connectivity.oda.spec.ValidationContext)
+     */
+    public void validateSyntax( ValueExpression valueExpr,
+            ValidationContext context ) throws OdaException
+    {
+        // sub-class to extend
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.IValidator#validateSyntax(org.eclipse.datatools.connectivity.oda.spec.BaseQuery, org.eclipse.datatools.connectivity.oda.spec.ValidationContext)
+     * @since 3.4 (DTP 1.11)
+     */
+    public void validateSyntax( BaseQuery baseQuery, ValidationContext context ) 
+        throws OdaException
+    {
+        // sub-class to extend
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/impl/package.html b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/impl/package.html
new file mode 100644
index 0000000..48460b5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/impl/package.html
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2009, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+
+Implementation classes of the Open Data Access (ODA) dynamicResultSet extension point.
+<p>
+
+<!-- Put @see and @since tags down here. -->
+@since 3.3 (DTP 1.8)
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/AggregateDefinition.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/AggregateDefinition.java
new file mode 100644
index 0000000..6029f1f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/AggregateDefinition.java
@@ -0,0 +1,277 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.manifest;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionVariable;
+import org.eclipse.datatools.connectivity.oda.spec.IValidator;
+import org.eclipse.datatools.connectivity.oda.spec.result.CustomAggregate;
+import org.eclipse.datatools.connectivity.oda.spec.result.InternalResultSpecFactory;
+
+/**
+ * Represents the definition of a contributed aggregate type, as specifed in an extension of the
+ * <i>org.eclipse.datatools.connectivity.oda.dynamicResultSet</i> extension point.
+ * @since 3.2 (DTP 1.7)
+ */
+public class AggregateDefinition
+{
+    // element and attribute tags defined in the extension point schema definition
+    public static final String ELEMENT_NAME = "aggregateType"; //$NON-NLS-1$
+    public static final String ATTR_ID = "id"; //$NON-NLS-1$
+    public static final String ATTR_NAME = "displayName"; //$NON-NLS-1$
+    public static final String ATTR_DESC = "description"; //$NON-NLS-1$
+    public static final String ATTR_CLASS = "class"; //$NON-NLS-1$
+    public static final String ATTR_MIN_VARS = "minInputVariables"; //$NON-NLS-1$
+    public static final String ATTR_MAX_VARS = "maxInputVariables"; //$NON-NLS-1$
+    public static final String ATTR_CAN_IGNORE_DUPLS = "canIgnoreDuplicates"; //$NON-NLS-1$
+    public static final String ATTR_CAN_IGNORE_NULLS = "canIgnoreNull"; //$NON-NLS-1$
+
+    static final Integer ATTR_VARS_DEFAULT_VALUE = Integer.valueOf(1);
+    
+    private IConfigurationElement m_exprElement;
+    private ExtensionContributor m_contributorInfo;
+    private String m_id;
+    private String m_name;
+    private String m_desc;
+    private Integer m_minVars;
+    private Integer m_maxVars;  // null value means unlimited maximum number of arguments
+    private boolean m_canIgnoreDupls;
+    private boolean m_canIgnoreNull;
+    private VariableRestrictions m_varRestrictions;
+
+    AggregateDefinition( IConfigurationElement exprElement, ExtensionContributor providerInfo ) throws OdaException
+    {
+        init( exprElement, providerInfo );
+    }
+    
+    private void init( IConfigurationElement exprElement, ExtensionContributor contributorInfo ) throws OdaException
+    {
+        ResultExtensionUtil.validateConfigurationElement( exprElement );
+        
+        m_exprElement = exprElement;
+        m_contributorInfo = contributorInfo;
+        m_id = getIdAttributeValue( exprElement );
+        
+        m_name = exprElement.getAttribute( ATTR_NAME );
+
+        m_desc = exprElement.getAttribute( ATTR_DESC );
+        
+        // minInputVariables
+        m_minVars = ResultExtensionUtil.getMinAttributeValue( exprElement, ATTR_MIN_VARS, ATTR_VARS_DEFAULT_VALUE );
+        
+        // maxInputVariables
+        m_maxVars = ResultExtensionUtil.getMaxAttributeValue( exprElement, ATTR_MAX_VARS, 
+                        ATTR_VARS_DEFAULT_VALUE, m_minVars );
+
+        m_canIgnoreDupls = ResultExtensionUtil.getBooleanAttributeValue( exprElement, ATTR_CAN_IGNORE_DUPLS, false );
+
+        m_canIgnoreNull = ResultExtensionUtil.getBooleanAttributeValue( exprElement, ATTR_CAN_IGNORE_NULLS, false );
+
+        // process children of variable restrictions
+        m_varRestrictions = new VariableRestrictions( exprElement );
+    }
+    
+    /**
+     * For internal use only.
+     */
+    public static String getIdAttributeValue( IConfigurationElement exprElement ) throws OdaException
+    {
+        return ResultExtensionUtil.getRequiredAttributeValue( exprElement, ATTR_ID, ELEMENT_NAME );
+    }
+    
+    /**
+     * Creates and returns an instance of CustomAggregate for use in an ODA aggregate projection specification,
+     * based on the class defined in the attribute specified in this definition.
+     * @return  an instance of {@link CustomAggregate} or its subclass
+     * @throws OdaException
+     */
+    public CustomAggregate createExpression() throws OdaException
+    {
+        return createExpression( null );
+    }
+    
+    /**
+     * Creates and returns an instance of CustomAggregate for use in an ODA aggregate projection specification,
+     * based on the class defined in the attribute specified in this definition.
+     * @param variable  the initial input source variable to set on the created instance; may be null
+     * @return  an instance of {@link CustomAggregate} or its subclass
+     * @throws OdaException
+     */
+    public CustomAggregate createExpression( ExpressionVariable variable ) throws OdaException
+    {
+    
+        String className = m_exprElement.getAttribute( ATTR_CLASS );
+        if( className != null && className.length() > 0 )
+        {
+            try
+            {
+                Object clazz = m_exprElement.createExecutableExtension( ATTR_CLASS );
+                if( clazz instanceof CustomAggregate )
+                {
+                    if( variable != null )
+                        ((CustomAggregate) clazz).add( variable );
+                    return (CustomAggregate) clazz;
+                }
+                else
+                    throw new OdaException( Messages.bind( Messages.querySpec_INVALID_CLASS_TYPE_ATTRIBUTE, 
+                            new Object[]{ className, ATTR_CLASS, CustomAggregate.class.getName()} ));
+            }
+            catch( CoreException ex )
+            {
+                throw new OdaException( ex );
+            }
+        }
+        
+        // no class attribute value, use the default class provided by the ODA framework
+        return InternalResultSpecFactory.createCustomAggregate( getDeclaringExtensionId(), getId(), variable );
+    }
+    
+    /**
+     * Indicates whether this type of custom aggregate type supports
+     * the specified data set type of the specified data source type.
+     * @param odaDataSourceId   id of an ODA data source extension
+     * @param odaDataSetId      id of an ODA data set defined within the data source extension
+     * @return  true if this ODA data set type can be used with this type of custom aggregate type; false otherwise
+     */
+    public boolean supportsDataSetType( String odaDataSourceId, String odaDataSetId )
+    {
+        return m_contributorInfo.supportsDataSetType( odaDataSourceId, odaDataSetId );
+    }
+
+    /**
+     * Gets the unique id of the dynamicResultSets extension that declares this type of custom aggregate type.
+     * @return  unique id of the declaring dynamicResultSets extension 
+     */
+    public String getDeclaringExtensionId()
+    {
+        return m_contributorInfo.getDeclaringExtensionId();
+    }
+
+    /**
+     * Gets the id that uniquely identifies this type of custom aggregate type 
+     * within the contributing extension.
+     * @return  id of this type of custom aggregate type
+     */
+    public String getId()
+    {
+        return m_id;
+    }
+
+    /**
+     * Gets the translateable name that can be used to refer to this particular aggregate type in dialogs presented to the user.
+     * Defaults to the expression type id if no name is specified.  The name should be unique within the extension.
+     * @return  display name of this type of custom aggregate type
+     */
+    public String getDisplayName()
+    {
+        if( m_name != null && m_name.trim().length() > 0 )
+            return m_name;
+        return m_id;    // default to the expression id if no name is specified.
+    }
+   
+    /**
+     * Gets the brief translateable description, if any.
+     * @return description text, or null if none
+     */
+    public String getDescription()
+    {
+        return m_desc;
+    }
+
+    /**
+     * Returns the contributor of this type of custom aggregate expression.
+     * @return  an instance of the {@link ExtensionContributor} that defines its scope and capabilities
+     */
+    public ExtensionContributor getContributor()
+    {
+        return m_contributorInfo;
+    }
+    
+    /**
+     * Gets the concrete class that implements the {@link IValidator} to validate this expression. 
+     * @return  an instance of the contributor's validator, or null if none is specified
+     * @throws  OdaException if exception occurs in instantiating its defined validator class
+     */
+    public IValidator getValidator() throws OdaException
+    {
+        return m_contributorInfo.getValidator();
+    }
+    
+    /**
+     * Gets the minimum number of input source variables required by this expression type. 
+     * The value may be greater than or equal to 0. 
+     * @return  an Integer for the minimum number of expected input variables
+     */
+    public Integer getMinInputVariables()
+    {
+        return m_minVars;
+    }
+    
+    /**
+     * Indicates whether this expression type has no upper limit on the number of input source variables.
+     * @return  true if no upper limit on number of input variables; false otherwise
+     */
+    public boolean supportsUnboundedMaxInputVariables()
+    {
+        return ( getMaxInputVariables() == null );
+    }
+    
+    /**
+     * Gets the maximum number of input source variables required by this expression type.
+     * @return  an Integer for the maximum number of expected input variables,
+     *          or null if no upper limit on the maximum.
+     * @see {@link #supportsUnboundedMaxInputVariables()}
+     */
+    public Integer getMaxInputVariables()
+    {
+        return m_maxVars;
+    }
+    
+    /**
+     * Indicates whether this aggregate type is capable of ignoring duplicate values of its input variable. 
+     * Default value is false if none is specified in the extension.
+     * @return true if this aggregate type is capable of ignoring duplicate values of its target variable;
+     *          false otherwise 
+     */
+    public boolean canIgnoreDuplicateValues()
+    {
+        return m_canIgnoreDupls;
+    }
+    
+    /**
+     * Indicates whether this aggregate type is capable of ignoring null values of its input variable. 
+     * Default value is false if none is specified in the extension.
+     * @return true if this aggregate type is capable of ignoring null values of its input variable;
+     *          false otherwise 
+     */
+    public boolean canIgnoreNullValues()
+    {
+        return m_canIgnoreNull;
+    }
+
+    /**
+     * Gets the restriction info on the types of expression variable that can be applied
+     * with this type of aggregate expression.
+     * @return an instance of VariableRestrictions
+     */
+    public VariableRestrictions getVariableRestrictions()
+    {
+        return m_varRestrictions;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/CombinedExpressionOperatorDefinition.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/CombinedExpressionOperatorDefinition.java
new file mode 100644
index 0000000..8fe77f6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/CombinedExpressionOperatorDefinition.java
@@ -0,0 +1,180 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.manifest;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.spec.valueexpr.CombinedValueExpression;
+import org.eclipse.datatools.connectivity.oda.spec.valueexpr.CombinedValueExpressionOperator;
+import org.eclipse.datatools.connectivity.oda.spec.valueexpr.InternalValueExprFactory;
+
+/**
+ * Represents the definition of a value expression combined operator type, as specified in an extension of the
+ * <i>org.eclipse.datatools.connectivity.oda.dynamicResultSet</i> extension point.
+ * @since 3.2.2 (DTP 1.7.2)
+ */
+public class CombinedExpressionOperatorDefinition
+{
+    // element and attribute tags defined in the extension point schema definition
+    static final String SUPPORTED_ELEMENT_NAME = "supportedOdaCombinedOperator"; //$NON-NLS-1$
+    static final String CUSTOM_ELEMENT_NAME = "combinedOperatorType"; //$NON-NLS-1$
+    protected static final String ATTR_ID = "id"; //$NON-NLS-1$
+    protected static final String ATTR_LITERAL = "literal"; //$NON-NLS-1$
+    protected static final String ATTR_CLASS = "class"; //$NON-NLS-1$
+
+    private String m_id;
+    private CombinedValueExpressionOperator m_customInstance;
+
+    CombinedExpressionOperatorDefinition( IConfigurationElement exprElement ) throws OdaException
+    {
+        init( exprElement );
+    }
+
+    private CombinedExpressionOperatorDefinition() {}
+    
+    private void init( IConfigurationElement opElement ) throws OdaException
+    {
+        ResultExtensionUtil.validateConfigurationElement( opElement );
+        
+        m_id = getIdAttributeValue( opElement );;
+        
+        m_customInstance = createCustomOperator( opElement );
+    }
+    
+    /**
+     * For internal use only.
+     */
+    public static String getIdAttributeValue( IConfigurationElement opElement ) throws OdaException
+    {
+        return ResultExtensionUtil.getRequiredAttributeValue( opElement, ATTR_ID, SUPPORTED_ELEMENT_NAME );
+    }
+
+    /**
+     * For internal use only.
+     */
+    public static String getCustomLiteralAttributeValue( IConfigurationElement opElement ) throws OdaException
+    {
+        // may return null;
+        // the literal attribute only exists in custom combinedOperatorType element
+        return opElement.getAttribute( ATTR_LITERAL );
+    }
+    
+    protected CombinedValueExpressionOperator createCustomOperator( IConfigurationElement opElement )
+        throws OdaException
+    {
+        String className = opElement.getAttribute( ATTR_CLASS );
+        if( className == null || className.length() == 0 )
+            return null;
+
+        // create an instance of the specified class attribute
+        try
+        {
+            Object clazz = opElement.createExecutableExtension( ATTR_CLASS );
+            if( clazz instanceof CombinedValueExpressionOperator )
+            {
+                CombinedValueExpressionOperator customInstance = (CombinedValueExpressionOperator) clazz;
+                return customInstance;
+            }
+            else
+                throw new OdaException( Messages.bind( Messages.querySpec_INVALID_CLASS_TYPE_ATTRIBUTE, 
+                        new Object[]{ className, ATTR_CLASS, CombinedValueExpressionOperator.class.getName()} ));
+        }
+        catch( CoreException ex )
+        {
+            throw new OdaException( ex );
+        }
+    }
+    
+    public String getId()
+    {
+        return m_id;
+    }
+    
+    public String getDisplayName()
+    {
+        return getId();
+    }
+    
+    public boolean isBuiltInOperator()
+    {
+        return true;
+    }
+    
+    /**
+     * Returns an instance of ValueExpressionCombinedOperator for use in an ODA {@link CombinedValueExpression},
+     * based on the class attribute specified in this definition.
+     * @return  an instance of {@link CombinedValueExpressionOperator} or its subclass
+     */
+    public CombinedValueExpressionOperator getOperator()
+    {
+        if( m_customInstance != null )
+            return m_customInstance;
+        return CombinedValueExpressionOperator.get( m_id );
+    }
+
+    static CustomCombinedOperatorDefinition newCustomDefinition( IConfigurationElement opElement ) 
+        throws OdaException
+    {
+        return (new CombinedExpressionOperatorDefinition()).new CustomCombinedOperatorDefinition( opElement );
+    }
+    
+    public class CustomCombinedOperatorDefinition extends CombinedExpressionOperatorDefinition
+    {
+        private static final String ATTR_NAME = "displayName"; //$NON-NLS-1$
+
+        private String m_name;
+        
+        private CustomCombinedOperatorDefinition( IConfigurationElement opElement )
+            throws OdaException
+        {
+            super( opElement );            
+            m_name = opElement.getAttribute( ATTR_NAME );
+        }
+        
+        protected CombinedValueExpressionOperator createCustomOperator( IConfigurationElement opElement )
+            throws OdaException
+        {
+            // create an instance of custom class, if specified
+            CombinedValueExpressionOperator customOp = super.createCustomOperator( opElement );
+
+            // if no custom class specified, use the base class
+            if( customOp == null )
+            {
+                // literal attribute is required in custom combinedOperatorType element
+                String literal = ResultExtensionUtil.getRequiredAttributeValue( opElement, ATTR_LITERAL, 
+                        CUSTOM_ELEMENT_NAME );
+                customOp = InternalValueExprFactory.createCombinedOperator( getId(), literal );
+            }
+            return customOp;
+        }
+        
+        @Override
+        public String getDisplayName()
+        {
+            if( m_name != null && m_name.trim().length() > 0 )
+                return m_name;
+            return m_id;    // default to the operator id if no name is specified.
+        }
+
+        @Override
+        public boolean isBuiltInOperator()
+        {
+            return false;
+        }        
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/ExtensionContributor.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/ExtensionContributor.java
new file mode 100644
index 0000000..6377ac8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/ExtensionContributor.java
@@ -0,0 +1,405 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2013 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.manifest;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IContributor;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.spec.IValidator;
+import org.eclipse.datatools.connectivity.oda.spec.result.filter.AndExpression;
+import org.eclipse.datatools.connectivity.oda.spec.result.filter.NotExpression;
+import org.eclipse.datatools.connectivity.oda.spec.result.filter.OrExpression;
+import org.eclipse.datatools.connectivity.oda.spec.util.QuerySpecificationFactory;
+
+/**
+ * Represents the contributor defining its scope and capabilities, as specifed in an extension of the
+ * <i>org.eclipse.datatools.connectivity.oda.dynamicResultSet</i> extension point.
+ * @since 3.2 (DTP 1.7)
+ */
+public class ExtensionContributor implements IContributor
+{
+    public static final String ELEMENT_NAME = "contributor"; //$NON-NLS-1$
+    public static final String SUB_ELEMENT_FILTER_EXPRESSION_TYPE = "supportedOdaFilterExpression"; //$NON-NLS-1$
+    public static final String ATTR_ODA_FILTER_EXPR_NAME = "name"; //$NON-NLS-1$
+    public static final String ATTR_VALIDATOR_CLASS = "validatorClass"; //$NON-NLS-1$
+    public static final String ATTR_SPEC_FACTORY_CLASS = "specificationFactoryClass"; //$NON-NLS-1$
+    public static final String SUB_ELEMENT_ROW_ORDERING_SUPPORT = "supportsRowOrdering"; //$NON-NLS-1$
+    public static final String ATTR_NULL_ORDERING_SUPPORT = "nullValueOrdering"; //$NON-NLS-1$
+    public static final String ATTR_NESTED_VALUEEXPR_SUPPORT = "supportsNestedExpressions"; //$NON-NLS-1$
+    public static final String SUB_ELEMENT_COMBINE_QUERIES_SUPPORT = "supportsCombiningQueries"; //$NON-NLS-1$
+    
+    private static final String[] EMPTY_STRING_ARRAY = new String[0];
+    
+    private IConfigurationElement m_contributorElement;
+    private List<SupportedDataSetType> m_dataSetTypes;
+    private List<String> m_supportedOdaFilterExprNames;
+    private IValidator m_validator;
+    private QuerySpecificationFactory m_specFactory;
+    private boolean m_supportsRowOrdering;
+    private boolean m_supportsNullOrdering;
+    private boolean m_supportsNestedValueExprs;
+    private boolean m_supportsCombineQueries;
+    
+    public ExtensionContributor( IConfigurationElement contributorElement ) throws OdaException
+    {
+        init( contributorElement );
+    }
+    
+    private void init( IConfigurationElement contributorElement ) throws OdaException
+    {
+        m_contributorElement = contributorElement;
+        if( ! m_contributorElement.isValid() || getDeclaringExtensionId() == null )
+            throw new OdaException( Messages.bind( Messages.querySpec_INVALID_EXT_POINT_ELEMENT,
+                                    ResultExtensionExplorer.DTP_ODA_DYNAMIC_RESULT_SETS_EXT_POINT, contributorElement.getContributor().getName() ) );
+        
+        // supportedDataSetType child elements
+        m_dataSetTypes = processDataSetTypeElements( m_contributorElement );
+        
+        // supportedOdaExpression child elements are in the filterExpressionTypes element,
+        // whose processing will be initiated by ResultExtensionExplorer
+        
+        // supportsRowOrdering child element
+        m_supportsRowOrdering = false;  // default value
+        m_supportsNullOrdering = false;
+        IConfigurationElement[] rowOrderingElements = contributorElement.getChildren( SUB_ELEMENT_ROW_ORDERING_SUPPORT );
+        if( rowOrderingElements.length > 0 )
+        {
+            m_supportsRowOrdering = true;
+            String attrValue = rowOrderingElements[0].getAttribute( ATTR_NULL_ORDERING_SUPPORT );
+            if( attrValue != null )
+                m_supportsNullOrdering = Boolean.parseBoolean( attrValue );
+        }
+
+        // supportsCombiningQueries child element
+        m_supportsCombineQueries = false;   // default value
+        IConfigurationElement[] combineQueriesElements = contributorElement.getChildren( SUB_ELEMENT_COMBINE_QUERIES_SUPPORT );
+        if( combineQueriesElements.length > 0 )
+        {
+            m_supportsCombineQueries = true;
+        }
+       
+        // processing of optional validator and specificationFactory attributes are deferred till it is needed
+    }
+
+    void setSupportedOdaFilterExpressions( IConfigurationElement element ) 
+        throws OdaException
+    {
+        m_supportedOdaFilterExprNames = processSupportedOdaFilterExpressions( element );
+    }
+    
+    /**
+     * An utility method to process the specified contributor configuration element and 
+     * returns a list of its supported data set types.
+     * @param contributorElement    contributor configuration element
+     * @return  a list of {@link SupportedDataSetType} declared as supported in the contributor element
+     * @throws OdaException if specified element has invalid configuration content
+     */
+    public static List<SupportedDataSetType> processDataSetTypeElements( IConfigurationElement contributorElement ) 
+        throws OdaException
+    {
+        IConfigurationElement[] dataSetTypeElements = contributorElement.getChildren( SupportedDataSetType.ELEMENT_NAME );
+        if( dataSetTypeElements.length == 0 )
+            throw new OdaException( Messages.bind( Messages.querySpec_MISSING_EXT_POINT_MIN_ELEMENT, 
+                    new Object[]{ ResultExtensionExplorer.DTP_ODA_DYNAMIC_RESULT_SETS_EXT_POINT, 
+                        contributorElement.getDeclaringExtension().getUniqueIdentifier(), SupportedDataSetType.ELEMENT_NAME} ) );
+        
+        List<SupportedDataSetType> dataSetTypes = new ArrayList<SupportedDataSetType>( dataSetTypeElements.length );
+        for( int i = 0; i < dataSetTypeElements.length; i++ )
+        {
+            dataSetTypes.add( new SupportedDataSetType( dataSetTypeElements[i] ));
+        }
+        return dataSetTypes;
+    }
+    
+    private static List<String> processSupportedOdaFilterExpressions( IConfigurationElement element ) 
+        throws OdaException
+    {
+        IConfigurationElement[] odaExprElements = element.getChildren( SUB_ELEMENT_FILTER_EXPRESSION_TYPE );
+        if( odaExprElements.length == 0 )
+            return null;
+        
+        List<String> odaExprNames = new ArrayList<String>( odaExprElements.length );
+        for( int i = 0; i < odaExprElements.length; i++ )
+        {
+            String exprName = odaExprElements[i].getAttribute( ATTR_ODA_FILTER_EXPR_NAME );
+            if( exprName != null && 
+                ( exprName.equalsIgnoreCase( AndExpression.class.getSimpleName() ) ||
+                  exprName.equalsIgnoreCase( OrExpression.class.getSimpleName() ) || 
+                  exprName.equalsIgnoreCase( NotExpression.class.getSimpleName() ) ) )
+            {
+                if( ! odaExprNames.contains( exprName ) )    // adds only if not already exists in collection
+                    odaExprNames.add( exprName );
+            }
+            // else ignore unexpected value
+        }
+        return odaExprNames;
+    }
+    
+    void processSupportedValueExpressionType( IConfigurationElement valueExprGroupElement )
+    {
+        m_supportsNestedValueExprs = false;  // default value
+        String attrValue = valueExprGroupElement.getAttribute( ATTR_NESTED_VALUEEXPR_SUPPORT );
+        if( attrValue != null )
+            m_supportsNestedValueExprs = Boolean.parseBoolean( attrValue );
+    }
+    
+    /**
+     * Gets the unique extension id that declares this dynamicResultSet contributor.
+     * @return unique extension id of this contributor
+     */
+    public String getDeclaringExtensionId()
+    {
+        return m_contributorElement.getDeclaringExtension().getUniqueIdentifier();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.core.runtime.IContributor#getName()
+     */
+    public String getName()
+    {
+        return m_contributorElement.getContributor().getName();
+    }
+    
+    /**
+     * Indicates whether this supports the specified data set type defined within the specified data source type.
+     * @param odaDataSourceId   id of an ODA data source extension
+     * @param odaDataSetId      id of an ODA data set defined within the data source extension
+     * @return  true if this contributes support of the specified ODA data set type; false otherwise
+     */
+    public boolean supportsDataSetType( String odaDataSourceId, String odaDataSetId )
+    {
+        for( int i=0; i < m_dataSetTypes.size(); i++ )
+        {
+            SupportedDataSetType dataSetType = m_dataSetTypes.get( i );
+            if( dataSetType.matches( odaDataSourceId, odaDataSetId ) )
+                return true;
+        }
+        return false;
+    }
+    
+    /**
+     * Indicates whether this supports the specified data set type.
+     * @param dataSetType   an instance of {@link SupportedDataSetType} 
+     * @return  true if this contributes support of the specified ODA data set type; false otherwise
+     */
+    public boolean supportsDataSetType( SupportedDataSetType dataSetType )
+    {
+        if( dataSetType == null )
+            return false;
+        return supportsDataSetType( dataSetType.getOdaDataSourceId(), dataSetType.getOdaDataSetId() );
+    }
+
+    /**
+     * Gets a collection of data set types supported by this contributor.
+     * @return  an array of {@link SupportedDataSetType} 
+     */
+    public SupportedDataSetType[] getSupportedDataSetTypes()
+    {
+        return m_dataSetTypes.toArray( new SupportedDataSetType[ m_dataSetTypes.size() ] ); 
+    }
+
+    /**
+     * Indicates whether this supports the specified ODA defined filter expression.
+     * @param odaExprName   simple name of an ODA defined filter expression 
+     * @return  true if the specified filter expression is supported; false otherwise
+     */
+    public boolean supportsOdaFilterExpression( String odaExprName )
+    {
+        if( m_supportedOdaFilterExprNames == null )
+            return false;
+        return m_supportedOdaFilterExprNames.contains( odaExprName );
+    }
+    
+    /**
+     * Gets a collection of the ODA defined filter expression names supported by this contributor.
+     * @return  an array of the simple names of supported ODA defined filter expressions 
+     */
+    public String[] getSupportedOdaFilterExpressions()
+    {
+        if( m_supportedOdaFilterExprNames == null )
+            return EMPTY_STRING_ARRAY;
+        return m_supportedOdaFilterExprNames.toArray( new String[ m_supportedOdaFilterExprNames.size() ] ); 
+    }
+
+    /**
+     * Indicates whether this contributor supports dynamic row ordering of its result sets 
+     * for all its supported data set types.
+     * @return  true if dynamic row ordering is supported; false otherwise
+     */
+    public boolean supportsDynamicRowOrdering()
+    {
+        return m_supportsRowOrdering;
+    }
+
+    /**
+     * Indicates whether this contributor supports dynamic operation that combines
+     * two or more queries for all its supported data set types.
+     * @return  true if dynamic combining queries is supported; false otherwise
+     * @since 3.4 (DTP 1.11)
+     */
+    public boolean supportsDynamicCombiningQueries()
+    {
+        return m_supportsCombineQueries;
+    }
+
+    /**
+     * Indicates whether this contributor's support of dynamic row ordering includes
+     * control over the ordering of null vs. non-null values in the row order.
+     * @return  true if dynamic null value ordering is supported; false otherwise
+     */
+    public boolean supportsNullValueOrdering()
+    {
+        return supportsDynamicRowOrdering() && m_supportsNullOrdering;
+    }
+    
+    /**
+     * Indicates whether this supports the specified ODA built-in combined operator type.
+     * @param builtInOperatorId the id of a built-in value expression combined operator type; 
+     *          the constants are defined in 
+     *          {@link org.eclipse.datatools.connectivity.oda.spec.valueexpr.CombinedValueExpressionOperator}
+     * @return  true if the specified built-in combined operator type is supported;
+     *          false otherwise
+     * @see {@link org.eclipse.datatools.connectivity.oda.spec.util.ExpressionFactory#getCombinedOperator(String, String)}
+     * @since 3.2.2 (DTP 1.7.2)
+     */
+    public boolean supportsOdaCombinedOperator( String builtInOperatorId )
+    {
+        return ResultExtensionExplorer.getInstance()
+                    .supportsOdaCombinedOperator( getDeclaringExtensionId(), builtInOperatorId );
+    }
+
+    /**
+     * Indicates whether this extension supports handling of combined value expression type.
+     * @return true if supported; false otherwise
+     * @since 3.2.2 (DTP 1.7.2)
+     */
+    public boolean supportsCombinedValueExpressionType()
+    {
+        return ResultExtensionExplorer.getInstance()
+                    .supportsCombinedValueExpressionType( getDeclaringExtensionId() );
+    }
+
+    /**
+     * Indicates whether this extension supports handling of nested value expression type.
+     * @return true if supported; false otherwise
+     * @since 3.2.2 (DTP 1.7.2)
+     */
+    public boolean supportsNestedValueExpressionType()
+    {
+        return m_supportsNestedValueExprs;
+    }
+    
+    /**
+     * Indicates whether this extension supports handling of function value expression type.
+     * @return true if supported; false otherwise
+     * @since 3.2.2 (DTP 1.7.2)
+     */
+    public boolean supportsFunctionValueExpressionType()
+    {
+        return ResultExtensionExplorer.getInstance()
+                    .supportsFunctionValueExpressionType( getDeclaringExtensionId() );
+    }
+
+    /**
+     * Gets the {@link IValidator} instance of this contributor.
+     * @return  validator instance;
+     *          or null if none is specified in the dynamicResultSet extension 
+     * @throws  OdaException if exception occurs in instantiating the validator class
+     */
+    public IValidator getValidator() throws OdaException
+    {
+        if( m_validator == null )
+        {
+            String validatorClassName = m_contributorElement.getAttribute( ATTR_VALIDATOR_CLASS );
+            if( validatorClassName == null || validatorClassName.length() == 0 ) // no validator class specified
+                return null;
+            
+            // create validator instance based on extension provider's validatorClass name
+            try
+            {
+                Object validatorClass = m_contributorElement.createExecutableExtension( ATTR_VALIDATOR_CLASS );
+                if( validatorClass instanceof IValidator )
+                    m_validator = (IValidator) validatorClass;
+                else
+                    throw new OdaException( Messages.bind( Messages.querySpec_INVALID_CLASS_TYPE_ATTRIBUTE, 
+                        new Object[]{ validatorClassName, ATTR_VALIDATOR_CLASS, IValidator.class.getName()} ));
+            }
+            catch( CoreException ex )
+            {
+                throw new OdaException( ex );
+            }
+        }
+        
+        return m_validator;
+    }
+
+    /**
+     * 
+     * @return
+     * @throws OdaException
+     */
+    public QuerySpecificationFactory getSpecificationFactory() throws OdaException
+    {
+        if( m_specFactory == null )
+        {
+            String factoryClassName = m_contributorElement.getAttribute( ATTR_SPEC_FACTORY_CLASS );
+            if( factoryClassName == null || factoryClassName.length() == 0 ) // no factory class specified
+                return null;
+            
+            // create factory instance based on extension provider's factoryClassName
+            try
+            {
+                Object factoryClass = m_contributorElement.createExecutableExtension( ATTR_SPEC_FACTORY_CLASS );
+                if( factoryClass instanceof QuerySpecificationFactory )
+                    m_specFactory = (QuerySpecificationFactory) factoryClass;
+                else
+                    throw new OdaException( Messages.bind( Messages.querySpec_INVALID_CLASS_TYPE_ATTRIBUTE, 
+                        new Object[]{ factoryClassName, ATTR_SPEC_FACTORY_CLASS, QuerySpecificationFactory.class.getName()} ));
+            }
+            catch( CoreException ex )
+            {
+                throw new OdaException( ex );
+            }
+        }
+        
+        return m_specFactory;
+    }
+
+    /* (non-Javadoc)
+     * @see java.lang.Object#hashCode()
+     */
+    @Override
+    public int hashCode()
+    {
+        return m_contributorElement.hashCode();
+    }
+
+    /* (non-Javadoc)
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    @Override
+    public boolean equals( Object obj )
+    {
+        if( ! (obj instanceof ExtensionContributor) )
+            return false;
+        return m_contributorElement.equals( ((ExtensionContributor)obj).m_contributorElement );
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/FilterExpressionDefinition.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/FilterExpressionDefinition.java
new file mode 100644
index 0000000..607650e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/FilterExpressionDefinition.java
@@ -0,0 +1,282 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.manifest;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionArguments;
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionVariable;
+import org.eclipse.datatools.connectivity.oda.spec.IValidator;
+import org.eclipse.datatools.connectivity.oda.spec.result.filter.CustomExpression;
+import org.eclipse.datatools.connectivity.oda.spec.result.filter.InternalFilterFactory;
+
+/**
+ * Represents the definition of a contributed filter expression type, as specifed in an extension of the
+ * <i>org.eclipse.datatools.connectivity.oda.dynamicResultSet</i> extension point.
+ * @since 3.2 (DTP 1.7)
+ */
+public class FilterExpressionDefinition
+{
+    // element and attribute tags defined in the extension point schema definition
+    public static final String ELEMENT_NAME = "filterType"; //$NON-NLS-1$
+    public static final String ATTR_ID = "id"; //$NON-NLS-1$
+    public static final String ATTR_NAME = "displayName"; //$NON-NLS-1$
+    public static final String ATTR_DESC = "description"; //$NON-NLS-1$
+    public static final String ATTR_CLASS = "class"; //$NON-NLS-1$
+    public static final String ATTR_MIN_ARGS = "minArguments"; //$NON-NLS-1$
+    public static final String ATTR_MAX_ARGS = "maxArguments"; //$NON-NLS-1$
+    public static final String ATTR_NEGATABLE = "isNegatable"; //$NON-NLS-1$
+    public static final String ATTR_OPTIONABLE = "isOptionable"; //$NON-NLS-1$
+
+    static final Integer ATTR_MIN_ARGS_DEFAULT_VALUE = Integer.valueOf(1);
+    
+    private IConfigurationElement m_exprElement;
+    private ExtensionContributor m_contributorInfo;
+    private String m_id;
+    private String m_name;
+    private String m_desc;
+    private Integer m_minArgs;
+    private Integer m_maxArgs;  // null value means unlimited maximum number of arguments
+    private boolean m_isNegatable;
+    private boolean m_isOptionable;
+    private VariableRestrictions m_varRestrictions;
+    
+    FilterExpressionDefinition( IConfigurationElement exprElement, ExtensionContributor providerInfo ) throws OdaException
+    {
+        init( exprElement, providerInfo );
+    }
+    
+    private void init( IConfigurationElement exprElement, ExtensionContributor contributorInfo ) throws OdaException
+    {
+        ResultExtensionUtil.validateConfigurationElement( exprElement );
+        
+        m_exprElement = exprElement;
+        m_contributorInfo = contributorInfo;
+        m_id = getIdAttributeValue( exprElement );
+        
+        m_name = exprElement.getAttribute( ATTR_NAME );
+        
+        m_desc = exprElement.getAttribute( ATTR_DESC );
+        
+        // minArguments
+        m_minArgs = ResultExtensionUtil.getMinAttributeValue( exprElement, ATTR_MIN_ARGS, ATTR_MIN_ARGS_DEFAULT_VALUE );
+        
+        // maxArguments; default value is null for unbounded maximum
+        m_maxArgs = ResultExtensionUtil.getMaxAttributeValue( exprElement, ATTR_MAX_ARGS, 
+                            null, m_minArgs );
+        
+        // isNegatable
+        m_isNegatable = ResultExtensionUtil.getBooleanAttributeValue( exprElement, ATTR_NEGATABLE, false );
+
+        // isOptional
+        m_isOptionable = ResultExtensionUtil.getBooleanAttributeValue( exprElement, ATTR_OPTIONABLE, false );
+        
+        // process children of variable restrictions
+        m_varRestrictions = new VariableRestrictions( exprElement );
+    }
+    
+    /**
+     * For internal use only.
+     */
+    public static String getIdAttributeValue( IConfigurationElement exprElement ) throws OdaException
+    {
+        return ResultExtensionUtil.getRequiredAttributeValue( exprElement, ATTR_ID, ELEMENT_NAME );
+    }
+    
+    /**
+     * Creates and returns an instance of CustomExpression for use in an ODA filter specification,
+     * based on the class defined in the attribute specified in this definition.
+     * @return  an instance of {@link CustomExpression} or its subclass
+     * @throws OdaException
+     */
+    public CustomExpression createExpression() throws OdaException
+    {
+        return createExpression( null, null );
+    }
+    
+    /**
+     * Creates and returns an instance of CustomExpression for use in an ODA filter specification,
+     * based on the class defined in the attribute specified in this definition.
+     * @param variable  the expression variable to set on the created instance; may be null
+     * @param args      the expression arguments to set on the created instance; may be null
+     * @return  an instance of {@link CustomExpression} or its subclass
+     * @throws OdaException
+     */
+    public CustomExpression createExpression( ExpressionVariable variable, ExpressionArguments args )
+        throws OdaException
+    {
+        String className = m_exprElement.getAttribute( ATTR_CLASS );
+        if( className != null && className.length() > 0 )
+        {
+            try
+            {
+                Object clazz = m_exprElement.createExecutableExtension( ATTR_CLASS );
+                if( clazz instanceof CustomExpression )
+                {
+                    CustomExpression newExpr = (CustomExpression) clazz;
+                    newExpr.setVariable( variable );
+                    newExpr.setArguments( args );
+                    return newExpr;
+                }
+                else
+                    throw new OdaException( Messages.bind( Messages.querySpec_INVALID_CLASS_TYPE_ATTRIBUTE, 
+                            new Object[]{ className, ATTR_CLASS, CustomExpression.class.getName()} ));
+            }
+            catch( CoreException ex )
+            {
+                throw new OdaException( ex );
+            }
+        }
+        
+        // no class attribute value, use the default class provided by the ODA framework
+        return InternalFilterFactory.createCustomFilter( getDeclaringExtensionId(), getId(), variable, args );
+    }
+    
+    /**
+     * Indicates whether this type of custom filter expression supports
+     * the specified data set type of the specified data source type.
+     * @param odaDataSourceId   id of an ODA data source extension
+     * @param odaDataSetId      id of an ODA data set defined within the data source extension
+     * @return  true if this ODA data set type can be used with this type of custom expression; false otherwise
+     */
+    public boolean supportsDataSetType( String odaDataSourceId, String odaDataSetId )
+    {
+        return m_contributorInfo.supportsDataSetType( odaDataSourceId, odaDataSetId );
+    }
+
+    /**
+     * Gets the unique id of the dynamicResultSets extension that declares this type of custom filter expression.
+     * @return  unique id of the declaring dynamicResultSets extension 
+     */
+    public String getDeclaringExtensionId()
+    {
+        return m_contributorInfo.getDeclaringExtensionId();
+    }
+
+    /**
+     * Gets the id that uniquely identifies this type of custom filter expression 
+     * within the contributing extension.
+     * @return  id of this type of custom filter expression
+     */
+    public String getId()
+    {
+        return m_id;
+    }
+
+    /**
+     * Gets the translateable name that can be used to refer to this particular expression in dialogs presented to the user.
+     * Defaults to the expression type id if no name is specified.  The name should be unique within the extension.
+     * @return  display name of this type of custom filter expression
+     */
+    public String getDisplayName()
+    {
+        if( m_name != null && m_name.trim().length() > 0 )
+            return m_name;
+        return m_id;    // default to the expression id if no name is specified.
+    }
+   
+    /**
+     * Gets the brief translateable description of this type of filter expression.
+     * @return  description text, or null if none
+     */
+    public String getDescription()
+    {
+        return m_desc;
+    }
+
+    /**
+     * Returns the contributor of this type of custom expression.
+     * @return  an instance of the {@link ExtensionContributor} that defines its scope and capabilities
+     */
+    public ExtensionContributor getContributor()
+    {
+        return m_contributorInfo;
+    }
+    
+    /**
+     * Gets the concrete class that implements the {@link IValidator} to validate this expression. 
+     * @return  an instance of the contributor's validator, or null if none is specified
+     * @throws  OdaException if exception occurs in instantiating its defined validator class
+     */
+    public IValidator getValidator() throws OdaException
+    {
+        return m_contributorInfo.getValidator();
+    }
+    
+    /**
+     * Gets the minimum number of argument values required by this expression type. 
+     * The value may be greater than or equal to 0. 
+     * @return  an Integer for the minimum number of expected argument values
+     */
+    public Integer getMinArguments()
+    {
+        return m_minArgs;
+    }
+    
+    /**
+     * Indicates whether this expression type has no upper limit on the number of argument values.
+     * @return  true if no upper limit on number of argument values; false otherwise
+     */
+    public boolean supportsUnboundedMaxArguments()
+    {
+        return ( getMaxArguments() == null );
+    }
+    
+    /**
+     * Gets the maximum number of argument values required by this expression type.
+     * @return  an Integer for the maximum number of expected argument values,
+     *          or null if no upper limit on the maximum arguments.
+     * @see {@link #supportsUnboundedMaxArguments()}
+     */
+    public Integer getMaxArguments()
+    {
+        return m_maxArgs;
+    }
+    
+    /**
+     * Indicates whether this expression can be negated, i.e. applied with a NotExpression.  
+     * Default value is false if none is specified in the extension.
+     * @return  true if this expression can be negated; false otherwise
+     */
+    public boolean isNegatable()
+    {
+        return m_isNegatable;
+    }
+    
+    /**
+     * Indicates whether this expression can be optional and skipped in a filter specification, if 
+     * none of its expected argument values are provided.  
+     * Default value is false if none is specified in the extension.
+     * @return true if this expression can be skipped when no argument values are available; 
+     *          false otherwise 
+     */
+    public boolean isOptionable()
+    {
+        return m_isOptionable;
+    }
+
+    /**
+     * Gets the restriction info on the types of expression variable that can be applied
+     * with this type of filter expression.
+     * @return an instance of VariableRestrictions
+     */
+    public VariableRestrictions getVariableRestrictions()
+    {
+        return m_varRestrictions;
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/FunctionExpressionDefinition.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/FunctionExpressionDefinition.java
new file mode 100644
index 0000000..3927915
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/FunctionExpressionDefinition.java
@@ -0,0 +1,262 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.manifest;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.spec.IValidator;
+import org.eclipse.datatools.connectivity.oda.spec.valueexpr.CustomFunction;
+import org.eclipse.datatools.connectivity.oda.spec.valueexpr.InternalValueExprFactory;
+
+/**
+ * Represents the definition of a value expression function type, as specified in an extension of the
+ * <i>org.eclipse.datatools.connectivity.oda.dynamicResultSet</i> extension point.
+ * @since 3.2.2 (DTP 1.7.2)
+ */
+public class FunctionExpressionDefinition
+{
+    // element and attribute tags defined in the extension point schema definition
+    public static final String ELEMENT_NAME = "functionExpressionType"; //$NON-NLS-1$
+    public static final String ATTR_ID = "id"; //$NON-NLS-1$
+    public static final String ATTR_NAME = "name"; //$NON-NLS-1$
+    public static final String ATTR_DISPLAY_NAME = "displayName"; //$NON-NLS-1$
+    public static final String ATTR_DESC = "description"; //$NON-NLS-1$
+    public static final String ATTR_CLASS = "class"; //$NON-NLS-1$
+    public static final String ATTR_MIN_ARGS = "minArguments"; //$NON-NLS-1$
+    public static final String ATTR_MAX_ARGS = "maxArguments"; //$NON-NLS-1$
+    public static final String ATTR_CAN_IGNORE_DUPLS = "canIgnoreDuplicates"; //$NON-NLS-1$
+
+    static final Integer ATTR_ARGS_DEFAULT_VALUE = Integer.valueOf(1);
+    
+    private IConfigurationElement m_exprElement;
+    private ExtensionContributor m_contributorInfo;
+    private String m_id;
+    private String m_name;
+    private String m_displayName;
+    private String m_desc;
+    private Integer m_minArgs;
+    private Integer m_maxArgs;  // null value means unlimited maximum number of arguments
+    private boolean m_canIgnoreDupls;
+    private VariableRestrictions m_varRestrictions;
+    
+    FunctionExpressionDefinition( IConfigurationElement exprElement, ExtensionContributor providerInfo ) throws OdaException
+    {
+        init( exprElement, providerInfo );
+    }
+    
+    private void init( IConfigurationElement exprElement, ExtensionContributor contributorInfo ) throws OdaException
+    {
+        ResultExtensionUtil.validateConfigurationElement( exprElement );
+        
+        m_exprElement = exprElement;
+        m_contributorInfo = contributorInfo;
+        m_id = getIdAttributeValue( exprElement );
+        
+        m_name = exprElement.getAttribute( ATTR_NAME );
+        m_displayName = exprElement.getAttribute( ATTR_DISPLAY_NAME );
+        m_desc = exprElement.getAttribute( ATTR_DESC );
+        
+        // minArguments
+        m_minArgs = ResultExtensionUtil.getMinAttributeValue( exprElement, ATTR_MIN_ARGS, ATTR_ARGS_DEFAULT_VALUE );
+        
+        // maxArguments
+        m_maxArgs = ResultExtensionUtil.getMaxAttributeValue( exprElement, ATTR_MAX_ARGS, 
+                ATTR_ARGS_DEFAULT_VALUE, m_minArgs );
+
+        m_canIgnoreDupls = ResultExtensionUtil.getBooleanAttributeValue( exprElement, ATTR_CAN_IGNORE_DUPLS, false );
+
+        // process children of variable restrictions
+        m_varRestrictions = new VariableRestrictions( exprElement );
+    }
+    
+    /**
+     * For internal use only.
+     */
+    public static String getIdAttributeValue( IConfigurationElement exprElement ) throws OdaException
+    {
+        return ResultExtensionUtil.getRequiredAttributeValue( exprElement, ATTR_ID, ELEMENT_NAME );
+    }
+    
+    /**
+     * Creates and returns an instance of CustomFunction 
+     * based on the class attribute specified in this definition.
+     * @return  an instance of {@link CustomFunction} or its subclass,
+     *          with no assigned function arguments
+     * @throws OdaException
+     */
+    public CustomFunction createExpression() throws OdaException
+    {
+    
+        String className = m_exprElement.getAttribute( ATTR_CLASS );
+        if( className != null && className.length() > 0 )
+        {
+            try
+            {
+                Object clazz = m_exprElement.createExecutableExtension( ATTR_CLASS );
+                if( clazz instanceof CustomFunction )
+                {
+                    return (CustomFunction) clazz;
+                }
+                else
+                    throw new OdaException( Messages.bind( Messages.querySpec_INVALID_CLASS_TYPE_ATTRIBUTE, 
+                            new Object[]{ className, ATTR_CLASS, CustomFunction.class.getName()} ));
+            }
+            catch( CoreException ex )
+            {
+                throw new OdaException( ex );
+            }
+        }
+        
+        // no class attribute value, use the default class provided by the ODA framework
+        return InternalValueExprFactory.createCustomFunction( getDeclaringExtensionId(), getId() );
+    }
+    
+    /**
+     * Indicates whether this type of custom function type supports
+     * the specified data set type of the specified data source type.
+     * @param odaDataSourceId   id of an ODA data source extension
+     * @param odaDataSetId      id of an ODA data set defined within the data source extension
+     * @return  true if this ODA data set type can be used with this type of custom function type; false otherwise
+     */
+    public boolean supportsDataSetType( String odaDataSourceId, String odaDataSetId )
+    {
+        return m_contributorInfo.supportsDataSetType( odaDataSourceId, odaDataSetId );
+    }
+
+    /**
+     * Gets the unique id of the dynamicResultSets extension that declares this type of custom function type.
+     * @return  unique id of the declaring dynamicResultSets extension 
+     */
+    public String getDeclaringExtensionId()
+    {
+        return m_contributorInfo.getDeclaringExtensionId();
+    }
+
+    /**
+     * Gets the id that uniquely identifies this type of custom function type 
+     * within the contributing extension.
+     * @return  id of this type of custom function type
+     */
+    public String getId()
+    {
+        return m_id;
+    }
+    
+    /**
+     * Gets the expression name of this function type.  Default to the function id if no name is specified. 
+     * @return  the name of this type of custom function type
+     */
+    public String getName()
+    {
+        if( m_name != null && m_name.trim().length() > 0 )
+            return m_name;
+        return m_id;    // default to the expression id if no name is specified.
+    }
+
+    /**
+     * Gets the translatable name that will be used to refer to this particular 
+     * function expression type in dialogs presented to the user. 
+     * Default to the function name if no display name is specified.
+     * @return  the display name of this type of custom function type
+     */
+    public String getDisplayName()
+    {
+        if( m_displayName != null && m_displayName.trim().length() > 0 )
+            return m_displayName;
+        return getName();    // default to the expression name if no display name is specified.
+    }
+   
+    /**
+     * Gets the brief translateable description, if any.
+     * @return description text, or null if none
+     */
+    public String getDescription()
+    {
+        return m_desc;
+    }
+
+    /**
+     * Returns the contributor of this type of custom function expression.
+     * @return  an instance of the {@link ExtensionContributor} that defines its scope and capabilities
+     */
+    public ExtensionContributor getContributor()
+    {
+        return m_contributorInfo;
+    }
+    
+    /**
+     * Gets the concrete class that implements the {@link IValidator} to validate this expression. 
+     * @return  an instance of the contributor's validator, or null if none is specified
+     * @throws  OdaException if exception occurs in instantiating its defined validator class
+     */
+    public IValidator getValidator() throws OdaException
+    {
+        return m_contributorInfo.getValidator();
+    }
+    
+    /**
+     * Gets the minimum number of argument values required by this expression type. 
+     * The value may be greater than or equal to 0. 
+     * @return  an Integer for the minimum number of expected argument values
+     */
+    public Integer getMinArguments()
+    {
+        return m_minArgs;
+    }
+    
+    /**
+     * Indicates whether this expression type has no upper limit on the number of argument values.
+     * @return  true if no upper limit on number of argument values; false otherwise
+     */
+    public boolean supportsUnboundedMaxArguments()
+    {
+        return ( getMaxArguments() == null );
+    }
+    
+    /**
+     * Gets the maximum number of argument values required by this expression type.
+     * @return  an Integer for the maximum number of expected argument values,
+     *          or null if no upper limit on the maximum arguments.
+     * @see {@link #supportsUnboundedMaxArguments()}
+     */
+    public Integer getMaxArguments()
+    {
+        return m_maxArgs;
+    }
+    
+    /**
+     * Indicates whether this function type is capable of ignoring duplicate values of its input variable. 
+     * Default value is false if none is specified in the extension.
+     * @return true if this function type is capable of ignoring duplicate values of its target variable;
+     *          false otherwise 
+     */
+    public boolean canIgnoreDuplicateValues()
+    {
+        return m_canIgnoreDupls;
+    }
+
+    /**
+     * Gets the restriction info on the types of expression variable that can be applied
+     * with this type of function value expression.
+     * @return an instance of VariableRestrictions
+     */
+    public VariableRestrictions getVariableRestrictions()
+    {
+        return m_varRestrictions;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/ResultExtensionExplorer.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/ResultExtensionExplorer.java
new file mode 100644
index 0000000..cb62a17
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/ResultExtensionExplorer.java
@@ -0,0 +1,939 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.manifest;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ManifestExplorer;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ManifestUtil;
+
+
+/**
+ * This singleton explorer is the entry point to explore and access
+ * the manifest of all the extensions that implement the 
+ * <code>org.eclipse.datatools.connectivity.oda.dynamicResultSet</code> extension point.
+ * The <code>ResultExtensionExplorer</code> singleton instance is retrieved 
+ * using the <code>getInstance()</code> method.
+ * @since 3.3 (DTP 1.8)
+ */
+public class ResultExtensionExplorer
+{
+    public static final String DTP_ODA_DYNAMIC_RESULT_SETS_EXT_POINT = 
+        "org.eclipse.datatools.connectivity.oda.dynamicResultSet";  //$NON-NLS-1$
+    public static final String FILTER_GROUP_NAME = "filterExpressionTypes"; //$NON-NLS-1$
+    public static final String AGGREGATE_GROUP_NAME = "aggregateExpressionTypes"; //$NON-NLS-1$
+    public static final String VALUE_EXPR_GROUP_NAME = "valueExpressionTypes"; //$NON-NLS-1$
+    private static final String COMBINED_OPERATOR_SUBGROUP_NAME = "combinedOperatorTypes"; //$NON-NLS-1$
+    
+    private static ResultExtensionExplorer sm_instance = null;
+    
+    // trace logging variables
+    private static Logger sm_logger = null;
+
+    private static final ExtensionContributor[] EMTPY_CONTRIBUTOR_ARRAY = new ExtensionContributor[0];
+    private static final FilterExpressionDefinition[] EMPTY_FILTER_EXPRS_ARRAY = new FilterExpressionDefinition[0];
+    private static final AggregateDefinition[] EMPTY_AGGR_EXPRS_ARRAY = new AggregateDefinition[0];
+    private static final CombinedExpressionOperatorDefinition[] EMPTY_COMBINED_OP_ARRAY = 
+        new CombinedExpressionOperatorDefinition[0];
+    private static final FunctionExpressionDefinition[] EMPTY_FUNC_TYPES_ARRAY = new FunctionExpressionDefinition[0];
+    
+    private Map<ExtensionContributor,Map<String,FilterExpressionDefinition>> 
+        m_filterTypesByExtn;  // cached copy of filter expression type map by extension contributor
+    private Map<ExtensionContributor,Map<String,AggregateDefinition>> 
+        m_aggregateTypesByExtn;  // cached copy of aggregate type map by extension contributor
+    private Map<String,Map<String,CombinedExpressionOperatorDefinition>>
+        m_combinedOpTypesByExtnId;  // cached copy of supported combined operator type map by extension id
+    private Map<String,Map<String,FunctionExpressionDefinition>>
+        m_functionTypesByExtnId;  // cached copy of value expression function type map by extension id
+    
+    /**
+     * Gets the singleton instance to explore the manifest of the dynamicResultSet extensions.
+     * @return  the singleton instance
+     */
+    public static ResultExtensionExplorer getInstance()
+    {
+        if( sm_instance == null )
+        {
+            synchronized( ResultExtensionExplorer.class )
+            {
+                if( sm_instance == null )
+                {
+                    sm_instance = new ResultExtensionExplorer();
+                }
+            }
+        }
+        
+        return sm_instance;
+    }
+    
+    /**
+     * Singleton instance release method.
+     */
+    public static void releaseInstance()
+    {
+        synchronized( ResultExtensionExplorer.class )
+        {
+            sm_instance = null;
+            sm_logger = null;
+        }
+    }
+    
+    static Logger getLogger()
+    {
+        if( sm_logger == null )
+        {
+            synchronized( ResultExtensionExplorer.class )
+            {
+                if( sm_logger == null )
+                    sm_logger = Logger.getLogger( ResultExtensionExplorer.class.getPackage().getName() );
+            }
+        }
+        return sm_logger;
+    }
+
+    private ResultExtensionExplorer() 
+    {
+        // look up all dynamicResultSet extensions in registry, create definitions and cache in instance             
+        addAllExtensions();
+    }
+    
+    /**
+     * Refresh the explorer, and allows it to get the latest extension manifests.
+     */
+    public void refresh()
+    {
+        addAllExtensions();     // re-add current extensions to cache
+    }
+
+    private void resetCache()
+    {
+        if( m_filterTypesByExtn != null )
+            m_filterTypesByExtn.clear();
+        if( m_aggregateTypesByExtn != null )
+            m_aggregateTypesByExtn.clear();
+        if( m_combinedOpTypesByExtnId != null )
+            m_combinedOpTypesByExtnId.clear();      
+        if( m_functionTypesByExtnId != null )
+            m_functionTypesByExtnId.clear();
+    }
+    
+    private Map<ExtensionContributor,Map<String,FilterExpressionDefinition>> getCachedFilterExtensions()
+    {
+        if( m_filterTypesByExtn == null )
+        {
+            synchronized( this )
+            {
+                if( m_filterTypesByExtn == null )
+                {
+                    m_filterTypesByExtn = new HashMap<ExtensionContributor,Map<String,FilterExpressionDefinition>>(4);
+                }
+            }
+        }
+        return m_filterTypesByExtn;
+    }
+    
+    /**
+     * Gets the filter definitions cached for the contributor defined with the specified extensionId.
+     * @param extensionId   oda.dynamicResultSet extension id
+     * @return  may be null if specified extensionId is not found in cache
+     */
+    private Map<String,FilterExpressionDefinition> getCachedFilterDefinitionsByExtension( String extensionId )
+    {
+        ExtensionContributor contributor = findCachedContributorOfFilterExtension( extensionId );
+        if( contributor != null )   // extensionId is cached
+            return getCachedFilterExtensions().get( contributor );
+        return null;
+    }
+    
+    private ExtensionContributor findCachedContributorOfFilterExtension( String extensionId )
+    {
+        if( getCachedFilterExtensions().isEmpty() )
+            return null;
+        
+        // iterate thru each contributor key in cache to find matching contributor of the specified extensionId
+        Iterator<ExtensionContributor> iter = getCachedFilterExtensions().keySet().iterator();
+        while( iter.hasNext() )
+        {
+            ExtensionContributor aContributor = iter.next();
+            if( aContributor.getDeclaringExtensionId().equals( extensionId ) )
+                return aContributor;
+        }
+
+        return null;
+    }
+    
+    private Map<ExtensionContributor,Map<String,AggregateDefinition>> getCachedAggregateExtensions()
+    {
+        if( m_aggregateTypesByExtn == null )
+        {
+            synchronized( this )
+            {
+                if( m_aggregateTypesByExtn == null )
+                {
+                    m_aggregateTypesByExtn = new HashMap<ExtensionContributor,Map<String,AggregateDefinition>>(4);
+                }
+            }
+        }
+        return m_aggregateTypesByExtn;
+    }
+    
+    /**
+     * Gets the aggregate definitions cached for the contributor defined with the specified extensionId.
+     * @param extensionId   oda.dynamicResultSet extension id
+     * @return  may be null if specified extensionId is not found in cache
+     */
+    private Map<String,AggregateDefinition> getCachedAggregateDefinitionsByExtension( String extensionId )
+    {
+        ExtensionContributor contributor = findCachedContributorOfAggregateExtension( extensionId );
+        if( contributor != null )
+            return getCachedAggregateExtensions().get( contributor );
+        return null;
+    }   
+    
+    private ExtensionContributor findCachedContributorOfAggregateExtension( String extensionId )
+    {
+        if( getCachedAggregateExtensions().isEmpty() )
+            return null;
+        
+        // iterate thru each contributor key in cache to find matching contributor of the specified extensionId
+        Iterator<ExtensionContributor> iter = getCachedAggregateExtensions().keySet().iterator();
+        while( iter.hasNext() )
+        {
+            ExtensionContributor aContributor = iter.next();
+            if( aContributor.getDeclaringExtensionId().equals( extensionId ) )
+                return aContributor;
+        }
+
+        return null;
+    }    
+
+    private Map<String,Map<String,CombinedExpressionOperatorDefinition>> 
+        getCachedCombinedOperatorExtensions()
+    {
+        if( m_combinedOpTypesByExtnId == null )
+        {
+            synchronized( this )
+            {
+                if( m_combinedOpTypesByExtnId == null )
+                {
+                    m_combinedOpTypesByExtnId = new HashMap<String,Map<String,CombinedExpressionOperatorDefinition>>(4);
+                }
+            }
+        }
+        return m_combinedOpTypesByExtnId;
+    }
+    
+    /**
+     * Gets the CombinedExpressionOperatorDefinition instances cached for the contributor defined with the specified extensionId.
+     * @param extensionId   oda.dynamicResultSet extension id
+     * @return  may be null if specified extensionId is not found in cache
+     */
+    private Map<String,CombinedExpressionOperatorDefinition> getCachedCombinedOpDefinitionsByExtension( String extensionId )
+    {
+        return getCachedCombinedOperatorExtensions().get( extensionId );
+    }   
+    
+    /**
+     * Gets the FunctionExpressionDefinition instances cached for the contributor defined with the specified extensionId.
+     * @param extensionId   oda.dynamicResultSet extension id
+     * @return  may be null if specified extensionId is not found in cache
+     */
+    private Map<String,FunctionExpressionDefinition> getCachedFunctionDefinitionsByExtension( String extensionId )
+    {
+        return getCachedFunctionExtensions().get( extensionId );
+    }   
+
+    private Map<String,Map<String,FunctionExpressionDefinition>> getCachedFunctionExtensions()
+    {
+        if( m_functionTypesByExtnId == null )
+        {
+            synchronized( this )
+            {
+                if( m_functionTypesByExtnId == null )
+                {
+                    m_functionTypesByExtnId = new HashMap<String,Map<String,FunctionExpressionDefinition>>(4);
+                }
+            }
+        }
+        return m_functionTypesByExtnId;
+    }
+    
+    private static FilterExpressionDefinition[] convertFilterDefnValuesToSortByNameArray( 
+            Map<String,FilterExpressionDefinition> exprDefns )
+    {   
+        if( exprDefns == null )
+            return EMPTY_FILTER_EXPRS_ARRAY;
+
+        // sort given expression definitions by their display names
+        TreeMap<String,FilterExpressionDefinition> sortedDefnsByName = new TreeMap<String,FilterExpressionDefinition>();
+        for( FilterExpressionDefinition exprDefn : exprDefns.values() )
+        {
+            sortedDefnsByName.put( exprDefn.getDisplayName(), exprDefn );
+        }
+        
+        return sortedDefnsByName.values().toArray( new FilterExpressionDefinition[ sortedDefnsByName.size() ] );
+    }
+
+    private static AggregateDefinition[] convertAggregateDefnValuesToSortByNameArray( 
+            Map<String,AggregateDefinition> exprDefns )
+    {   
+        if( exprDefns == null )
+            return EMPTY_AGGR_EXPRS_ARRAY;
+        
+        // sort given expression definitions by their display names
+        TreeMap<String,AggregateDefinition> sortedDefnsByName = new TreeMap<String,AggregateDefinition>();
+        for( AggregateDefinition exprDefn : exprDefns.values() )
+        {
+            sortedDefnsByName.put( exprDefn.getDisplayName(), exprDefn );
+        }
+
+        return sortedDefnsByName.values().toArray( new AggregateDefinition[ sortedDefnsByName.size() ] );
+    }
+
+    private static CombinedExpressionOperatorDefinition[] convertCombinedOpDefnValuesToArray( 
+            Map<String,CombinedExpressionOperatorDefinition> combinedOpDefns )
+    {   
+        if( combinedOpDefns == null )
+            return EMPTY_COMBINED_OP_ARRAY;
+        
+        return combinedOpDefns.values().toArray( new CombinedExpressionOperatorDefinition[ combinedOpDefns.size() ] );
+    }
+
+    private static FunctionExpressionDefinition[] convertFunctionDefnValuesToSortByNameArray( 
+            Map<String,FunctionExpressionDefinition> functionTypes )
+    {   
+        if( functionTypes == null )
+            return EMPTY_FUNC_TYPES_ARRAY;
+        
+        // sort given expression definitions by their display names
+        TreeMap<String,FunctionExpressionDefinition> sortedDefnsByName = new TreeMap<String,FunctionExpressionDefinition>();
+        for( FunctionExpressionDefinition functionType : functionTypes.values() )
+        {
+            sortedDefnsByName.put( functionType.getDisplayName(), functionType );
+        }
+
+        return sortedDefnsByName.values().toArray( new FunctionExpressionDefinition[ sortedDefnsByName.size() ] );
+    }
+    
+    /**
+     * Gets the collection of contributors that contribute dynamicResultSet extension to the specified data set type
+     * defined within the specified data source type.
+     * @param odaDataSourceId   id of an ODA data source extension
+     * @param odaDataSetId      id of an ODA data set defined within the data source extension
+     * @return  an array of {@link ExtensionContributor};
+     *          or an empty array if no supporting contributor is registered 
+     * @throws OdaException
+     */
+    public ExtensionContributor[] getContributorsOfDataSet( String odaDataSourceId, String odaDataSetId ) 
+        throws IllegalArgumentException, OdaException
+    {
+        validateArgumentExists( odaDataSourceId );        
+        validateArgumentExists( odaDataSetId );        
+        
+        // first check if specified data set type is already in cache, and use it
+        ExtensionContributor[] contributors = findCachedContributorsByDataSet( odaDataSourceId, odaDataSetId );
+        return ( contributors == null ) ? EMTPY_CONTRIBUTOR_ARRAY : contributors;
+    }
+
+    private ExtensionContributor[] findCachedContributorsByDataSet( String odaDataSourceId, String odaDataSetId )
+    {
+        // a data set type may be supported by multiple contributors, 
+        // with separate ones for filter vs. aggregate expressions
+        Set<ExtensionContributor> contributors = new HashSet<ExtensionContributor>(4);
+
+        List<ExtensionContributor> filterContributors = findCachedContributorsOfFilterExtension( odaDataSourceId, odaDataSetId );
+        if( filterContributors != null )
+            contributors.addAll( filterContributors );
+        
+        List<ExtensionContributor> aggrContributors = findCachedContributorsOfAggregateExtension( odaDataSourceId, odaDataSetId );
+        if( aggrContributors != null )
+            contributors.addAll( aggrContributors );    // only unique contributors get added to the Set
+
+        return contributors.isEmpty() ? null : 
+                contributors.toArray( new ExtensionContributor[ contributors.size() ] );
+    }
+
+    private List<ExtensionContributor> findCachedContributorsOfFilterExtension( String odaDataSourceId, String odaDataSetId )
+    {
+        if( getCachedFilterExtensions().isEmpty() )
+            return null;
+
+        // iterate thru each contributor key in cache to find matching contributor of the specified extensionId
+        return findSupportingContributors( getCachedFilterExtensions().keySet().iterator(), 
+                    odaDataSourceId, odaDataSetId );
+    }
+  
+    private List<ExtensionContributor> findCachedContributorsOfAggregateExtension( String odaDataSourceId, String odaDataSetId )
+    {
+        if( getCachedAggregateExtensions().isEmpty() )
+            return null;
+
+        return findSupportingContributors( getCachedAggregateExtensions().keySet().iterator(), 
+                    odaDataSourceId, odaDataSetId );
+    }
+    
+    private List<ExtensionContributor> findSupportingContributors( Iterator<ExtensionContributor> iter,
+            String odaDataSourceId, String odaDataSetId )
+    {
+        List<ExtensionContributor> contributors = null;
+        
+        // iterate thru each contributor to find all contributors that support the specified data set type
+        while( iter.hasNext() )
+        {
+            ExtensionContributor aContributor = iter.next();
+            if( aContributor.supportsDataSetType( odaDataSourceId, odaDataSetId ) )
+            {
+                if( contributors == null )
+                    contributors = new ArrayList<ExtensionContributor>(4);
+                contributors.add( aContributor );
+            }
+        }
+
+        return ( contributors == null || contributors.isEmpty() ) ? null : contributors;
+    }    
+    
+    /**
+     * Gets the collection of custom filter expression definitions declared by the specified contributor.
+     * @param extensionContributor  contributor of a dynamicResultSet extension
+     * @return  an array of {@link FilterExpressionDefinition} declared by the specified contributor; 
+     *          or an empty array if none
+     * @throws IllegalArgumentException
+     * @throws OdaException
+     */
+    public FilterExpressionDefinition[] getContributedFilterDefinitions( ExtensionContributor extensionContributor )
+        throws IllegalArgumentException, OdaException
+    {
+        Map<String,FilterExpressionDefinition> filterExprDefns = getFilterDefinitionsByContributor( extensionContributor );
+        return convertFilterDefnValuesToSortByNameArray( filterExprDefns );
+    }
+
+    /**
+     * Gets the definition of the specified custom filter expression declared by the
+     * specified expression contributor.
+     * @param extensionContributor  contributor of a dynamicResultSet extension
+     * @param exprId    id of a custom filter expression 
+     * @return  an instance of {@link FilterExpressionDefinition}, or null if no matching definition is found
+     * @throws IllegalArgumentException
+     * @throws OdaException
+     */
+    public FilterExpressionDefinition getContributedFilterDefinition( ExtensionContributor extensionContributor, String exprId ) 
+        throws IllegalArgumentException, OdaException
+    {
+        validateArgumentExists( exprId );
+
+        Map<String,FilterExpressionDefinition> filterExprDefns = getFilterDefinitionsByContributor( extensionContributor );
+        return ( filterExprDefns == null ) ? null : filterExprDefns.get( exprId );
+    }
+    
+    /**
+     * Gets the collection of custom filter expression definitions declared by the specified extension.
+     * @param extensionId   unique id of an extension that implements the dynamicResultSet extension point
+     * @return  an array of {@link FilterExpressionDefinition} defined by the specified extension; 
+     *          or an empty array if none
+     * @throws OdaException
+     */
+    public FilterExpressionDefinition[] getExtensionFilterDefinitions( String extensionId ) 
+        throws IllegalArgumentException, OdaException
+    {
+        Map<String,FilterExpressionDefinition> filterExprDefns = getFilterDefinitionsByExtension( extensionId );
+        return convertFilterDefnValuesToSortByNameArray( filterExprDefns );
+    }
+
+    /**
+     * Gets the definition of the specified custom filter expression type declared by the
+     * specified extension.
+     * @param extensionId   unique id of an extension that implements the dynamicResultSet extension point
+     * @param exprId    id of a custom filter expression 
+     * @return  an instance of {@link FilterExpressionDefinition}, or null if no matching definition is found
+     * @throws IllegalArgumentException
+     * @throws OdaException
+     */
+    public FilterExpressionDefinition getExtensionFilterDefinition( String extensionId, String exprId ) 
+        throws IllegalArgumentException, OdaException
+    {
+        validateArgumentExists( exprId );
+        
+        Map<String,FilterExpressionDefinition> filterExprDefns = getFilterDefinitionsByExtension( extensionId );
+        
+        // get the definition of the specified expression 
+        return ( filterExprDefns == null ) ? null : filterExprDefns.get( exprId );
+    }
+    
+    private Map<String,FilterExpressionDefinition> getFilterDefinitionsByExtension( String extensionId )
+        throws IllegalArgumentException, OdaException
+    {
+        validateArgumentExists( extensionId );        
+        
+        // since all extensions should already be loaded in instance,
+        // just check if specified extension is already in cache, and use it
+        Map<String,FilterExpressionDefinition> filterExprDefns = getCachedFilterDefinitionsByExtension( extensionId );
+        return filterExprDefns;
+    }
+    
+    private Map<String,FilterExpressionDefinition> getFilterDefinitionsByContributor( ExtensionContributor extensionContributor )
+        throws IllegalArgumentException, OdaException
+    {
+        validateArgumentExists( extensionContributor );  
+        
+        // since all extensions should already be loaded in instance,
+        // just check if specified extension is already in cache, and use it
+        Map<String,FilterExpressionDefinition> filterExprDefns = 
+                        getCachedFilterExtensions().get( extensionContributor );
+        return filterExprDefns;
+    }
+    
+    /**
+     * Returns the contributor of the specified extension.
+     * @param extensionId   unique id of an extension that implements the dynamicResultSet extension point
+     * @return  an instance of the {@link ExtensionContributor} that defines its scope and capabilities
+     * @throws OdaException
+     */
+    public ExtensionContributor getExtensionContributor( String extensionId ) 
+        throws OdaException
+    {
+        // first try find from the filter definition map
+        ExtensionContributor contributor = findCachedContributorOfFilterExtension( extensionId );
+        if( contributor != null )   // found contributor
+            return contributor;
+        
+        // not found; next try find from the aggregate definition map
+        contributor = findCachedContributorOfAggregateExtension( extensionId );
+        return contributor;       
+    }
+    
+    /* 
+     * Look up all current extensions in registry, and add each corresponding definitions to cached copy
+     * if not already in cache.  Existing cached extensions, if any, are left as is.
+     */
+    private void addAllExtensions()
+    {
+        IExtension[] extensions = ManifestExplorer.getExtensions( DTP_ODA_DYNAMIC_RESULT_SETS_EXT_POINT );
+        synchronized( this )
+        {
+            // first clear cached collections, if exist
+            resetCache();
+            
+            for( int i=0; i < extensions.length; i++ )
+            {
+                try
+                {
+                    addExtension( extensions[i], false );
+                }
+                catch( OdaException ex )
+                {
+                    // log warning on invalid extension manifest
+                    getLogger().log( Level.WARNING, 
+                            "Ignoring invalid " + DTP_ODA_DYNAMIC_RESULT_SETS_EXT_POINT + " extension.",  //$NON-NLS-1$ //$NON-NLS-2$
+                            ex );
+                }
+            }
+        }
+    }
+        
+    /**
+     * Adds the specified extension definition to cached copy.  An extension is added 
+     * if not already in cache.  Existing cached copy may be replaced as controlled by the
+     * replaceExisting argument.
+     * @param dynamicResultExtn
+     * @param replaceExisting   indicates whether to replace the cached extension if already exists
+     * @return  may return an empty map
+     * @throws OdaException
+     */
+    private ExtensionContributor addExtension( IExtension dynamicResultExtn, boolean replaceExisting )
+        throws OdaException
+    {
+        // contributor element
+        IConfigurationElement contributorElement =
+            ManifestUtil.getNamedElement( dynamicResultExtn, ExtensionContributor.ELEMENT_NAME );
+        if( contributorElement == null )
+            throw new OdaException( Messages.bind( Messages.querySpec_MISSING_EXT_POINT_ELEMENT, 
+                    new Object[]{ ResultExtensionExplorer.DTP_ODA_DYNAMIC_RESULT_SETS_EXT_POINT, 
+                                    dynamicResultExtn.getUniqueIdentifier(), ExtensionContributor.ELEMENT_NAME} ));
+        
+        ExtensionContributor contributor = new ExtensionContributor( contributorElement );
+
+        // if replace existing filter expressions in cache, or nothing in cache for this contributor
+        if( replaceExisting || getCachedFilterExtensions().get( contributor ) == null ) 
+        {       
+            // process the filterExpressionTypes group element, if any, in extension; expects 0 or 1 group element
+            IConfigurationElement[] filterExprGroup =
+                ManifestUtil.getNamedElements( dynamicResultExtn, FILTER_GROUP_NAME );
+            if( filterExprGroup.length > 0 )
+            {
+                // process supportedOdaFilterExpression child elements
+                contributor.setSupportedOdaFilterExpressions( filterExprGroup[0] );
+                
+                // process custom filterType child elements
+                IConfigurationElement[] filterExprElements = filterExprGroup[0].getChildren( FilterExpressionDefinition.ELEMENT_NAME ); 
+    
+                Map<String,FilterExpressionDefinition> filterExprs = new HashMap<String,FilterExpressionDefinition>(filterExprElements.length);
+                for( int i=0; i < filterExprElements.length; i++ )
+                {
+                    FilterExpressionDefinition filerExprDefn =
+                        new FilterExpressionDefinition( filterExprElements[i], contributor );
+                    filterExprs.put( filerExprDefn.getId(), filerExprDefn );   // replace existing entry, if exists
+                }
+                
+                // cache contributed filter expression map by contributor
+                getCachedFilterExtensions().put( contributor, filterExprs );   
+            }
+        }
+ 
+        // next process the aggregateExpressionTypes group element in extension; expects 0 or 1 group element
+        if( replaceExisting || getCachedAggregateExtensions().get( contributor ) == null ) 
+        {
+            IConfigurationElement[] aggregateExprGroup =
+                ManifestUtil.getNamedElements( dynamicResultExtn, AGGREGATE_GROUP_NAME );
+            if( aggregateExprGroup.length > 0 )
+            {
+                IConfigurationElement[] aggregateElements = aggregateExprGroup[0].getChildren( AggregateDefinition.ELEMENT_NAME ); 
+        
+                Map<String,AggregateDefinition> aggregateExprs = new HashMap<String,AggregateDefinition>(aggregateElements.length);
+                for( int i=0; i < aggregateElements.length; i++ )
+                {
+                    AggregateDefinition aggregateDefn =
+                        new AggregateDefinition( aggregateElements[i], contributor );
+                    aggregateExprs.put( aggregateDefn.getId(), aggregateDefn );   // replace existing entry, if exists
+                }
+                
+                // cache contributed aggregate type map by contributor
+                getCachedAggregateExtensions().put( contributor, aggregateExprs );
+            }
+        }
+        
+        // next process the valueExpressionTypes group element in extension; expects 0 or 1 group element
+        if( replaceExisting || getCachedCombinedOperatorExtensions().get( contributor.getDeclaringExtensionId() ) == null ) 
+        {           
+            IConfigurationElement[] valueExprGroup =
+                ManifestUtil.getNamedElements( dynamicResultExtn, VALUE_EXPR_GROUP_NAME );
+            if( valueExprGroup.length > 0 )
+                addExtensionValueExprGroupElement( contributor, valueExprGroup[0] );            
+        }
+        
+        return contributor;
+    }
+    
+    private void addExtensionValueExprGroupElement( ExtensionContributor contributor, IConfigurationElement valueExprGroupElement )
+        throws OdaException
+    {
+        // process the combinedOperatorTypes subgroup element in extension; expects 0 or 1 subgroup element
+        IConfigurationElement[] combinedOperatorGroup =
+            valueExprGroupElement.getChildren( COMBINED_OPERATOR_SUBGROUP_NAME ); 
+        if( combinedOperatorGroup.length > 0 )
+            addExtensionCombinedOperatorGroupElement( contributor.getDeclaringExtensionId(), combinedOperatorGroup[0] );
+
+        // process the functionExpressionType sub elements in extension
+        IConfigurationElement[] functionTypeElements = valueExprGroupElement.getChildren( FunctionExpressionDefinition.ELEMENT_NAME ); 
+        addExtensionFunctionTypeElements( contributor, functionTypeElements );
+        
+        // delegates to the contributor to process the types of value expression declared as supported
+        contributor.processSupportedValueExpressionType( valueExprGroupElement );
+    }
+    
+    private void addExtensionCombinedOperatorGroupElement( String extensionId, IConfigurationElement combinedOperatorGroup )
+        throws OdaException
+    {
+        IConfigurationElement[] supportedOdaCombinedOpElements = 
+            combinedOperatorGroup.getChildren( CombinedExpressionOperatorDefinition.SUPPORTED_ELEMENT_NAME ); 
+        IConfigurationElement[] customCombinedOpElements = 
+            combinedOperatorGroup.getChildren( CombinedExpressionOperatorDefinition.CUSTOM_ELEMENT_NAME ); 
+
+        Map<String,CombinedExpressionOperatorDefinition> combinedOperatorTypes = 
+            new HashMap<String,CombinedExpressionOperatorDefinition>(
+                supportedOdaCombinedOpElements.length + customCombinedOpElements.length );
+        for( int i=0; i < supportedOdaCombinedOpElements.length; i++ )
+        {
+            CombinedExpressionOperatorDefinition supportedOdaCombinedOpDefn =
+                new CombinedExpressionOperatorDefinition( supportedOdaCombinedOpElements[i] );
+            combinedOperatorTypes.put( supportedOdaCombinedOpDefn.getId(), supportedOdaCombinedOpDefn );   // replace existing entry, if exists
+        }
+        for( int i=0; i < customCombinedOpElements.length; i++ )
+        {
+            CombinedExpressionOperatorDefinition.CustomCombinedOperatorDefinition customCombinedOpDefn =
+                CombinedExpressionOperatorDefinition.newCustomDefinition( customCombinedOpElements[i] );
+            combinedOperatorTypes.put( customCombinedOpDefn.getId(), customCombinedOpDefn );   // replace existing entry, if exists
+        }
+        
+        // cache supported and custom combined operator type map by extension id
+        getCachedCombinedOperatorExtensions().put( extensionId, combinedOperatorTypes );
+    }
+ 
+    private void addExtensionFunctionTypeElements( ExtensionContributor contributor, IConfigurationElement[] functionTypeElements )
+        throws OdaException
+    {
+        if( functionTypeElements.length == 0 )
+            return;     // nothing to add
+        
+        Map<String,FunctionExpressionDefinition> functionTypes = 
+            new HashMap<String,FunctionExpressionDefinition>( functionTypeElements.length );
+        for( int i=0; i < functionTypeElements.length; i++ )
+        {
+            FunctionExpressionDefinition funcDefn = new FunctionExpressionDefinition( functionTypeElements[i], contributor );
+            functionTypes.put( funcDefn.getId(), funcDefn );  // replace existing entry, if exists
+        }
+
+        // cache supported and custom combined operator type map by extension id
+        getCachedFunctionExtensions().put( contributor.getDeclaringExtensionId(), functionTypes );        
+    }
+    
+    /**
+     * Gets the collection of custom aggregate definitions declared by the specified contributor.
+     * @param extensionContributor  contributor of a dynamicResultSet extension
+     * @return  an array of {@link AggregateDefinition} declared by the specified contributor; 
+     *          or an empty array if none
+     * @throws IllegalArgumentException if specified argument is invalid or null
+     * @throws OdaException
+     */
+    public AggregateDefinition[] getContributedAggregateDefinitions( ExtensionContributor extensionContributor )
+        throws IllegalArgumentException, OdaException
+    {
+        Map<String,AggregateDefinition> aggrExprDefns = getAggregateDefinitionsByContributor( extensionContributor );
+        return convertAggregateDefnValuesToSortByNameArray( aggrExprDefns );
+    }
+
+    /**
+     * Gets the definition of the specified custom aggregate declared by the
+     * specified expression contributor.
+     * @param extensionContributor  contributor of a dynamicResultSet extension
+     * @param exprId    id of an aggregate type
+     * @return  an instance of {@link AggregateDefinition}, or null if no matching definition is found
+     * @throws IllegalArgumentException if any specified argument is invalid or null
+     * @throws OdaException
+     */
+    public AggregateDefinition getContributedAggregateDefinition( ExtensionContributor extensionContributor, String exprId ) 
+        throws IllegalArgumentException, OdaException
+    {
+        validateArgumentExists( exprId );
+
+        Map<String,AggregateDefinition> aggrExprDefns = getAggregateDefinitionsByContributor( extensionContributor );
+        return ( aggrExprDefns == null ) ? null : aggrExprDefns.get( exprId );
+    }
+    
+    /**
+     * Gets the collection of custom aggregate definitions declared by the specified extension.
+     * @param extensionId   unique id of an extension that implements the dynamicResultSet extension point
+     * @return  an array of {@link AggregateDefinition} defined by the specified extension; 
+     *          or an empty array if none
+     * @throws IllegalArgumentException if specified argument is invalid or null
+     * @throws OdaException
+     */
+    public AggregateDefinition[] getExtensionAggregateDefinitions( String extensionId ) 
+        throws IllegalArgumentException, OdaException
+    {
+        Map<String,AggregateDefinition> aggrExprDefns = getAggregateDefinitionsByExtension( extensionId );
+        return convertAggregateDefnValuesToSortByNameArray( aggrExprDefns );
+    }
+    
+    /**
+     * Gets the definition of the specified custom aggregate type declared by the
+     * specified extension.
+     * @param extensionId   unique id of an extension that implements the dynamicResultSet extension point
+     * @param exprId    id of an aggregate type
+     * @return  an instance of {@link AggregateDefinition}, or null if no matching definition is found
+     * @throws IllegalArgumentException if any specified argument is null or empty
+     * @throws OdaException
+     */
+    public AggregateDefinition getExtensionAggregateDefinition( String extensionId, String exprId ) 
+        throws IllegalArgumentException, OdaException
+    {
+        validateArgumentExists( exprId );
+        
+        Map<String,AggregateDefinition> aggrExprDefns = getAggregateDefinitionsByExtension( extensionId );
+        
+        // get the definition of the specified expression 
+        return ( aggrExprDefns == null ) ? null : aggrExprDefns.get( exprId );
+    }
+    
+    private Map<String,AggregateDefinition> getAggregateDefinitionsByExtension( String extensionId )
+        throws IllegalArgumentException, OdaException
+    {
+        validateArgumentExists( extensionId );        
+        
+        // since all extensions should already be loaded in instance,
+        // just check if specified extension is already in cache, and use it
+        Map<String,AggregateDefinition> exprDefns = getCachedAggregateDefinitionsByExtension( extensionId );
+        return exprDefns;
+    }
+    
+    private Map<String,AggregateDefinition> getAggregateDefinitionsByContributor( ExtensionContributor extensionContributor )
+        throws OdaException
+    {
+        validateArgumentExists( extensionContributor );  
+        
+        // since all extensions should already be loaded in instance,
+        // just check if specified extension is already in cache, and use it
+        Map<String,AggregateDefinition> aggregateDefns = 
+                        getCachedAggregateExtensions().get( extensionContributor );
+        return aggregateDefns;
+    }
+    
+    /**
+     * Gets the collection of supported and custom value expression combined operator definitions 
+     * declared by the specified extension.
+     * @param extensionId   unique id of an extension that implements the dynamicResultSet extension point
+     * @return  an array of {@link CombinedExpressionOperatorDefinition} defined by the specified extension; 
+     *          or an empty array if none
+     * @throws IllegalArgumentException if specified argument is invalid or null
+     * @throws OdaException
+     */
+    public CombinedExpressionOperatorDefinition[] getExtensionCombinedOperatorDefinitions( String extensionId ) 
+        throws IllegalArgumentException, OdaException
+    {
+        validateArgumentExists( extensionId );        
+
+        // since all extensions should already be loaded in instance,
+        // just check if specified extension is already in cache, and use it
+        Map<String,CombinedExpressionOperatorDefinition> combinedOpDefns = 
+            getCachedCombinedOpDefinitionsByExtension( extensionId );
+        return convertCombinedOpDefnValuesToArray( combinedOpDefns );
+    }
+    
+    /**
+     * Gets the definition of the specified supported or custom value expression combined operator 
+     * declared by the specified extension.
+     * @param extensionId   unique id of an extension that implements the dynamicResultSet extension point
+     * @param operatorId    the id of a value expression combined operator type; 
+     *              may be an ODA built-in operator or a custom type contributed by the extension
+     * @return  an instance of {@link CombinedExpressionOperatorDefinition}, or null if no matching definition is found
+     * @throws IllegalArgumentException if any specified argument is null or empty
+     * @throws OdaException
+     */
+    public CombinedExpressionOperatorDefinition getExtensionCombinedOperatorDefinition( String extensionId, String operatorId ) 
+        throws IllegalArgumentException, OdaException
+    {
+        validateArgumentExists( extensionId );        
+        validateArgumentExists( operatorId );
+        
+        Map<String,CombinedExpressionOperatorDefinition> combinedOpDefns = 
+            getCachedCombinedOpDefinitionsByExtension( extensionId );
+        
+        // get the definition of the specified operator 
+        return ( combinedOpDefns == null ) ? null : combinedOpDefns.get( operatorId );
+    }
+    
+    /**
+     * Indicates whether the specified extension supports the specified built-in combined operator type.
+     * @param extensionId      unique id of an extension that implements the dynamicResultSet extension point
+     * @param builtInOperatorId the id of a built-in value expression combined operator type; 
+     *          the constants are defined in 
+     *          {@link org.eclipse.datatools.connectivity.oda.spec.valueexpr.CombinedValueExpressionOperator}
+     * @return  true if the specified built-in combined operator type is supported by the specified extension;
+     *          false otherwise
+     * @see {@link org.eclipse.datatools.connectivity.oda.spec.util.ExpressionFactory#getCombinedOperator(String, String)}
+     */
+    boolean supportsOdaCombinedOperator( String extensionId, String builtInOperatorId )
+    {
+        CombinedExpressionOperatorDefinition opDefn = null;
+        try
+        {
+            opDefn = getExtensionCombinedOperatorDefinition( extensionId, builtInOperatorId );
+        }
+        catch( IllegalArgumentException ex )
+        {
+            // ignore
+            return false;
+        }
+        catch( OdaException ex )
+        {
+            // ignore
+            return false;
+        }
+        
+        return opDefn != null && opDefn.isBuiltInOperator();
+    }
+    
+    boolean supportsCombinedValueExpressionType( String extensionId )
+    {
+        // if extension has at least 1 supported combined operator, 
+        // it supports the complex expression type
+        Map<String,CombinedExpressionOperatorDefinition> combinedOpDefns =
+                getCachedCombinedOpDefinitionsByExtension( extensionId );
+        return combinedOpDefns != null && ! combinedOpDefns.isEmpty();
+    }
+   
+    /**
+     * Gets the collection of supported and custom value expression function definitions 
+     * declared by the specified extension.
+     * @param extensionId   unique id of an extension that implements the dynamicResultSet extension point
+     * @return  an array of {@link FunctionExpressionDefinition} defined by the specified extension; 
+     *          or an empty array if none
+     * @throws IllegalArgumentException if specified argument is invalid or null
+     * @throws OdaException
+     */
+    public FunctionExpressionDefinition[] getExtensionFunctionDefinitions( String extensionId ) 
+        throws IllegalArgumentException, OdaException
+    {
+        validateArgumentExists( extensionId );        
+
+        // since all extensions should already be loaded in instance,
+        // just check if specified extension is already in cache, and use it
+        Map<String,FunctionExpressionDefinition> functionDefns = getCachedFunctionDefinitionsByExtension( extensionId );
+        return convertFunctionDefnValuesToSortByNameArray( functionDefns );
+    }
+    
+    /**
+     * Gets the definition of the specified supported or custom value expression function
+     * declared by the specified extension.
+     * @param extensionId   unique id of an extension that implements the dynamicResultSet extension point
+     * @param functionId    the id of a value expression function type contributed by the extension
+     * @return  an instance of {@link FunctionExpressionDefinition}, or null if no matching definition is found
+     * @throws IllegalArgumentException if any specified argument is null or empty
+     * @throws OdaException
+     */
+    public FunctionExpressionDefinition getExtensionFunctionDefinition( String extensionId, String functionId ) 
+        throws IllegalArgumentException, OdaException
+    {
+        validateArgumentExists( extensionId );        
+        validateArgumentExists( functionId );
+        
+        Map<String,FunctionExpressionDefinition> functionDefns = getCachedFunctionDefinitionsByExtension( extensionId );
+        
+        // get the definition of the specified function 
+        return ( functionDefns == null ) ? null : functionDefns.get( functionId );
+    }
+    
+    boolean supportsFunctionValueExpressionType( String extensionId )
+    {
+        // if extension has at least 1 supported custom function, 
+        // it supports the function expression type
+        Map<String,FunctionExpressionDefinition> functionDefns =
+            getCachedFunctionDefinitionsByExtension( extensionId );
+        return functionDefns != null && ! functionDefns.isEmpty();
+    }
+
+    private static void validateArgumentExists( String arg ) throws IllegalArgumentException
+    {
+        ResultExtensionUtil.validateArgumentExists( arg );        
+    }
+    
+    private static void validateArgumentExists( ExtensionContributor contributor ) throws IllegalArgumentException
+    {
+        ResultExtensionUtil.validateArgumentExists( contributor ) ;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/ResultExtensionUtil.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/ResultExtensionUtil.java
new file mode 100644
index 0000000..c955ec4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/ResultExtensionUtil.java
@@ -0,0 +1,133 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.manifest;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+
+/**
+ * Internal utility class for processing the ODA dynamicResultSet extension manifest.
+ */
+class ResultExtensionUtil
+{
+    static final String ATTR_UNBOUNDED_MAX_ARGS = "*"; //$NON-NLS-1$
+    
+    static String getRequiredAttributeValue( IConfigurationElement element, 
+            String attributeName, String elementName ) throws OdaException
+    {
+        String value = element.getAttribute( attributeName );
+        if( value == null || value.length() == 0 )
+            throw new OdaException( Messages.bind( Messages.querySpec_MISSING_EXT_POINT_ATTR_VALUE, 
+                    new Object[] { ResultExtensionExplorer.DTP_ODA_DYNAMIC_RESULT_SETS_EXT_POINT, 
+                                    element.getContributor().getName(), attributeName, elementName} ));
+        return value;
+    }
+    
+    static Integer getMinAttributeValue( IConfigurationElement element, String attributeName, 
+            Integer defaultValue )    
+        throws OdaException
+    {
+        String attrValueText = element.getAttribute( attributeName );
+        if( attrValueText == null )     // no value is specified, uses default value
+            return defaultValue;
+        
+        // a value is specified; convert value to Integer value
+        Integer minValue = null;        
+        try
+        {
+            minValue = Integer.valueOf( attrValueText );
+        }
+        catch( NumberFormatException ex )
+        {
+        }
+        if( minValue == null || minValue.intValue() < 0 )
+            throw newInvalidAttributeValueException( element.getContributor().getName(), 
+                    attrValueText, attributeName );
+
+        return minValue;
+    }
+    
+    /**
+     * Returns the value of the specified attribute; 
+     * may be a null value to represent unlimited maximum number of arguments
+     */
+    static Integer getMaxAttributeValue( IConfigurationElement element, String attributeName, 
+                                        Integer defaultValue, Integer minValue )
+        throws OdaException
+    {
+        String attrValueText = element.getAttribute( attributeName );
+        if( attrValueText == null )     // no value is specified, uses default value
+            return defaultValue;
+        
+        // a value is specified
+        
+        // if unbounded, returns NULL to represent unlimited maximum number of arguments
+        if( attrValueText.equals( ATTR_UNBOUNDED_MAX_ARGS ) )
+            return null;
+
+        // convert value to Integer value
+        Integer maxValue = null;        
+        try
+        {
+            maxValue = Integer.valueOf( attrValueText );
+        }
+        catch( NumberFormatException ex )
+        {
+        }
+        if( maxValue == null || maxValue.intValue() < minValue.intValue() )
+            throw newInvalidAttributeValueException( element.getContributor().getName(), 
+                    attrValueText, attributeName );
+
+        return maxValue;
+    }
+    
+    static boolean getBooleanAttributeValue( IConfigurationElement element, String attributeName, 
+                                            boolean defaultValue )
+    {
+        boolean booleanValue = defaultValue;  
+        String attrValueText = element.getAttribute( attributeName );
+        if( attrValueText != null )
+            booleanValue = Boolean.parseBoolean( attrValueText );
+        return booleanValue;
+    }
+    
+    static void validateArgumentExists( String arg ) throws IllegalArgumentException
+    {
+        if( arg == null || arg.length() == 0 )
+            throw new IllegalArgumentException( arg );        
+    }
+    
+    static void validateArgumentExists( ExtensionContributor contributor ) throws IllegalArgumentException
+    {
+        if( contributor == null )
+            throw new IllegalArgumentException( new NullPointerException() );  
+    }
+
+    static void validateConfigurationElement( IConfigurationElement element ) throws OdaException
+    {
+        if( element == null || ! element.isValid() )
+            throw new OdaException( Messages.bind( Messages.querySpec_INVALID_EXT_POINT_ELEMENT,
+                                        ResultExtensionExplorer.DTP_ODA_DYNAMIC_RESULT_SETS_EXT_POINT, 
+                                        element.getContributor().getName() ) );
+    }
+
+    static OdaException newInvalidAttributeValueException( String extensionId, String attrValue, String attrName )
+    {
+        return new OdaException( Messages.bind( Messages.querySpec_INVALID_EXT_POINT_ATTR_VALUE,
+                new Object[] { ResultExtensionExplorer.DTP_ODA_DYNAMIC_RESULT_SETS_EXT_POINT, 
+                               extensionId, attrValue, attrName} ) );
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/SupportedDataSetType.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/SupportedDataSetType.java
new file mode 100644
index 0000000..b6a3f92
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/SupportedDataSetType.java
@@ -0,0 +1,86 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.manifest;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+
+/**
+ * Represents the ODA Data Set Type supported by an extension of the
+ * <i>org.eclipse.datatools.connectivity.oda.dynamicResultSet</i> extension point.
+ * @since 3.2 (DTP 1.7)
+ */
+public class SupportedDataSetType
+{
+    public static final String ELEMENT_NAME = "supportedDataSetType"; //$NON-NLS-1$
+    public static final String ATTR_DATA_SOURCE_ID = "odaDataSourceId"; //$NON-NLS-1$
+    public static final String ATTR_DATA_SET_ID = "odaDataSetId"; //$NON-NLS-1$
+
+    private String m_odaDataSourceId;
+    private String m_odaDataSetId;
+
+    SupportedDataSetType( IConfigurationElement dataSetTypeElement ) throws OdaException
+    {
+        init( dataSetTypeElement );
+    }
+    
+    private void init( IConfigurationElement dataSetTypeElement ) throws OdaException
+    {
+        m_odaDataSourceId = dataSetTypeElement.getAttribute( ATTR_DATA_SOURCE_ID );
+        if( m_odaDataSourceId == null || m_odaDataSourceId.length() == 0 )
+            throw new OdaException( Messages.bind( Messages.querySpec_MISSING_EXT_POINT_ATTR_VALUE, 
+                new Object[] { ResultExtensionExplorer.DTP_ODA_DYNAMIC_RESULT_SETS_EXT_POINT, 
+                    dataSetTypeElement.getContributor().getName(), ATTR_DATA_SOURCE_ID, ELEMENT_NAME} ));
+
+        m_odaDataSetId = dataSetTypeElement.getAttribute( ATTR_DATA_SET_ID );
+        if( m_odaDataSetId == null || m_odaDataSetId.length() == 0 )
+            throw new OdaException( Messages.bind( Messages.querySpec_MISSING_EXT_POINT_ATTR_VALUE, 
+                new Object[] { ResultExtensionExplorer.DTP_ODA_DYNAMIC_RESULT_SETS_EXT_POINT, 
+                    dataSetTypeElement.getContributor().getName(), ATTR_DATA_SET_ID, ELEMENT_NAME} ));
+    }
+
+    /**
+     * Returns the id of the ODA data source type for which this contributor 
+     * is contributing custom filter expressions.
+     * @return id of an ODA data source extension
+     */
+    public String getOdaDataSourceId()
+    {
+        return m_odaDataSourceId;
+    }
+
+    /**
+     * Returns the id of an ODA data set type defined within the supported data source extension.
+     * @return id of an ODA data set defined within the data source extension
+     */
+    public String getOdaDataSetId()
+    {
+        return m_odaDataSetId;
+    }
+    
+    /**
+     * Indicates whether this matches the specified data set type defined within the specified data source type.
+     * @param odaDataSourceId   id of an ODA data source extension
+     * @param odaDataSetId      id of an ODA data set defined within the data source extension
+     * @return  true if the specified type matches; false otherwise
+     */
+    public boolean matches( String odaDataSourceId, String odaDataSetId )
+    {
+        return( getOdaDataSourceId().equals( odaDataSourceId ) &&
+                getOdaDataSetId().equals( odaDataSetId ) );
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/VariableRestrictions.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/VariableRestrictions.java
new file mode 100644
index 0000000..d610362
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/VariableRestrictions.java
@@ -0,0 +1,379 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.manifest;
+
+import java.sql.Types;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionVariable.VariableType;
+import org.eclipse.datatools.connectivity.oda.util.manifest.DataTypeMapping;
+
+/**
+ * Represents the restrictions on the types of expression variable that can be applied
+ * with an extension-defined expression, as specifed in an extension of the
+ * <i>org.eclipse.datatools.connectivity.oda.dynamicResultSet</i> extension point.
+ * @since 3.2 (DTP 1.7)
+ */
+public class VariableRestrictions
+{
+    public static final String SUB_ELEMENT_VARIABLE_RESTRICTION = "variableRestriction"; //$NON-NLS-1$
+    public static final String ATTR_VARIABLE_TYPE = "variableType"; //$NON-NLS-1$
+    public static final String ATTR_VARIABLE_TYPE_RESULT_COLUMN = "ResultSetColumn"; //$NON-NLS-1$
+    public static final String ATTR_VARIABLE_TYPE_INSTANCE_OF = "InstanceOf"; //$NON-NLS-1$
+    public static final String ATTR_VARIABLE_TYPE_QUERY_EXPR = "QueryExpression"; //$NON-NLS-1$
+
+    public static final String SUB_ELEMENT_VARIABLE_RESTRICTION_ODA_DATA_TYPE = "variableOdaDataTypeRestriction"; //$NON-NLS-1$
+    public static final String ATTR_ODA_SCALAR_DATA_TYPE = "odaScalarDataType"; //$NON-NLS-1$
+    public static final String SUB_ELEMENT_VARIABLE_RESTRICTION_INSTANCE = "variableClassRestriction"; //$NON-NLS-1$  
+    public static final String ATTR_RESULT_INSTANCE_TYPE = "class"; //$NON-NLS-1$
+
+    private List<VariableType> m_restrictedVariableTypes;
+    @SuppressWarnings("unchecked")
+    private Map<VariableType,List> m_restrictedDataTypesByVarType;
+
+    VariableRestrictions( IConfigurationElement exprElement )
+    {
+        m_restrictedDataTypesByVarType = new HashMap<VariableType,List>(3);
+        m_restrictedVariableTypes = processRestrictedVariableTypes( exprElement, m_restrictedDataTypesByVarType );
+    }
+    
+    @SuppressWarnings("unchecked")
+    private static List<VariableType> processRestrictedVariableTypes( IConfigurationElement exprElement, 
+            Map<VariableType, List> restrictedDataTypesByVarType )
+    {        
+        IConfigurationElement[] varRestrictionElements = exprElement.getChildren( SUB_ELEMENT_VARIABLE_RESTRICTION );
+        
+        int arraySize = varRestrictionElements.length;
+        if( arraySize == 0 )
+            arraySize = 1;
+        List<VariableType> restrictedVariableTypes = new ArrayList<VariableType>( arraySize );
+        
+        for( int i = 0; i < varRestrictionElements.length; i++ )
+        {
+            VariableType aRestrictedVarType = VariableType.RESULT_SET_COLUMN;  // default if no value is specified
+            String value = varRestrictionElements[i].getAttribute( ATTR_VARIABLE_TYPE );
+            if( value != null && value.length() > 0 )
+            {
+                if( value.equalsIgnoreCase( ATTR_VARIABLE_TYPE_RESULT_COLUMN ) )
+                    aRestrictedVarType = VariableType.RESULT_SET_COLUMN;
+                else if( value.equalsIgnoreCase( ATTR_VARIABLE_TYPE_QUERY_EXPR ) )
+                    aRestrictedVarType = VariableType.QUERY_EXPRESSION;
+                else if( value.equalsIgnoreCase( ATTR_VARIABLE_TYPE_INSTANCE_OF ) )
+                    aRestrictedVarType = VariableType.INSTANCE_OF;
+                else // an unexpected value
+                    continue;   // skip
+            }
+            restrictedVariableTypes.add( aRestrictedVarType );
+            
+            processRestrictedDataTypes( restrictedDataTypesByVarType, aRestrictedVarType, varRestrictionElements[i] );
+        }
+
+        if( restrictedVariableTypes.isEmpty() )
+            restrictedVariableTypes.add( VariableType.RESULT_SET_COLUMN );    // default if no valid value is specified
+        return restrictedVariableTypes;
+    }
+    
+    @SuppressWarnings("unchecked")
+    private static void processRestrictedDataTypes( Map<VariableType, List> restrictedDataTypesByVarType, VariableType type, IConfigurationElement varRestrictionElement )
+    {
+        if( type == VariableType.RESULT_SET_COLUMN || type == VariableType.QUERY_EXPRESSION )
+        {
+            IConfigurationElement[] dataTypeElements = varRestrictionElement.getChildren( SUB_ELEMENT_VARIABLE_RESTRICTION_ODA_DATA_TYPE );    
+            if( dataTypeElements.length > 0 )
+            {
+                List<Integer> restrictedDataTypes = new ArrayList<Integer>( dataTypeElements.length );
+                restrictedDataTypesByVarType.put( type, restrictedDataTypes );
+                
+                for( int i = 0; i < dataTypeElements.length; i++ )
+                {
+                    String odaDataTypeLiteral = dataTypeElements[i].getAttribute( ATTR_ODA_SCALAR_DATA_TYPE );
+                    int odaDataTypeCode = DataTypeMapping.toOdaDataTypeCode( odaDataTypeLiteral );
+                    if( odaDataTypeCode == Types.NULL )
+                        continue;   // ignore
+                    
+                    restrictedDataTypes.add( new Integer( odaDataTypeCode ) );
+                }
+            }
+        }
+        else if( type == VariableType.INSTANCE_OF )   // instance type restrictions
+        {
+            IConfigurationElement[] dataTypeElements = varRestrictionElement.getChildren( SUB_ELEMENT_VARIABLE_RESTRICTION_INSTANCE );    
+            if( dataTypeElements.length > 0 )
+            {
+                List<String> restrictedClassTypes = new ArrayList<String>( dataTypeElements.length );
+                restrictedDataTypesByVarType.put( type, restrictedClassTypes );
+                
+                for( int i = 0; i < dataTypeElements.length; i++ )
+                {
+                    String className = dataTypeElements[i].getAttribute( ATTR_RESULT_INSTANCE_TYPE );
+                    if( className == null || className.length() == 0 )
+                        continue;   // ignore
+                    
+                    restrictedClassTypes.add( className );
+                }
+            }
+        }
+        
+        // ignore data type restriction on other unexpected variable types        
+        // TODO - log warning
+    }
+
+    /**
+     * Indicates whether the specified type of variable can be applied for evaluation with this expression type.
+     * @param type  the type of variable; its value must be one of the pre-defined {@link ExpressionVariable#VariableType}
+     * @return  true if the specified variable type is supported by this type of custom expression; false otherwise
+     */
+    public boolean supportsVariableType( VariableType type )
+    {
+        if( m_restrictedVariableTypes.contains( type ) )
+            return true;     // support is explicitly specified, done
+        
+        // A QueryExpression variable type is a superset that covers any value expression types 
+        // including a ResultSetColumn reference
+        if( type == VariableType.RESULT_SET_COLUMN )
+            return m_restrictedVariableTypes.contains( VariableType.QUERY_EXPRESSION );
+
+        return false;
+    }
+
+    /**
+     * Returns the restrictions on the type of variables that can be applied with this type of expression.
+     * @return an array of {@link VariableType} supported by this expression type
+     */
+    public VariableType[] getRestrictedVariableTypes()
+    {
+        return m_restrictedVariableTypes.toArray( new VariableType[ m_restrictedVariableTypes.size() ] );
+    }
+    
+    /**
+     * Indicates whether this has any restrictions on the data type of 
+     * the specified type of variable.
+     * @param type  the type of variable; its value must be one of the pre-defined {@link ExpressionVariable#VariableType}
+     * @return  true if data type restrictions exists; false if this has no data type restrictions
+     */
+    public boolean hasDataTypeRestrictions( VariableType type )
+    {
+        if( getRestrictedDataTypeList(type).size() > 0 )    // has explicit data type restrictions
+            return true;
+        
+        // result column data type restrictions are implied from those of VariableType.QUERY_EXPRESSION, 
+        // if none explicitly defined
+        if( type == VariableType.RESULT_SET_COLUMN )
+            return getRestrictedDataTypeList(VariableType.QUERY_EXPRESSION).size() > 0;
+
+        return false;
+    }
+    
+    /**
+     * Indicates whether this supports the specified ODA data type of the specified type of variable.
+     * @param varType  the type of variable; its value must be one of the pre-defined {@link ExpressionVariable#VariableType}
+     * @param odaDataType   ODA scalar data type code
+     * @return  true if the specified ODA data type is supported; false otherwise
+     */
+    public boolean supportsOdaDataType( VariableType varType, int odaDataType )
+    {
+        if( varType == VariableType.INSTANCE_OF )  // this type does not support odaDataType
+            return false;
+        if( ! supportsVariableType( varType ) )
+            return false;
+        
+        if( ! hasDataTypeRestrictions( varType ) )
+            return true;
+        
+        int[] restrictedDataTypes = ( varType == VariableType.RESULT_SET_COLUMN ) ?
+                getResultColumnRestrictedOdaDataTypes() : getQueryExpressionRestrictedOdaDataTypes();
+        for( int i=0; i < restrictedDataTypes.length; i++ )
+        {
+            if( restrictedDataTypes[i] == odaDataType )
+                return true;
+        }
+        
+        // no matching data type found in variable restricted type list
+        return false;
+    }
+    
+    /**
+     * A convenient method to indicate whether this supports all the ODA numeric data types 
+     * of the specified type of variable.
+     * @param varType  the type of variable; its value must be one of the pre-defined {@link ExpressionVariable#VariableType}
+     * @return  true if all ODA numeric data types are supported; false otherwise
+     * @see #supportsOdaDataType(VariableType, int)
+     */
+    public boolean supportsOdaNumericDataTypes( VariableType varType )
+    {
+        return supportsOdaDataTypes( varType, DataTypeMapping.ODA_NUMERIC_DATA_TYPE_CODES );
+    }
+    
+    /**
+     * A convenient method to indicate whether this supports the ODA string/character data type 
+     * of the specified type of variable.
+     * @param varType  the type of variable; its value must be one of the pre-defined {@link ExpressionVariable#VariableType}
+     * @return  true if the ODA string/character data type is supported; false otherwise
+     * @see #supportsOdaDataType(VariableType, int)
+     */
+    public boolean supportsOdaStringDataTypes( VariableType varType )
+    {
+        return supportsOdaDataTypes( varType, DataTypeMapping.ODA_STRING_DATA_TYPE_CODES );
+    }
+    
+    /**
+     * A convenient method to indicate whether this supports all the ODA date and/or datetime data types 
+     * of the specified type of variable.
+     * @param varType  the type of variable; its value must be one of the pre-defined {@link ExpressionVariable#VariableType}
+     * @return  true if all ODA date and/or time data types are supported; false otherwise
+     * @see #supportsOdaDataType(VariableType, int)
+     */
+    public boolean supportsOdaDatetimeDataTypes( VariableType varType )
+    {
+        return supportsOdaDataTypes( varType, DataTypeMapping.ODA_DATETIME_DATA_TYPE_CODES );
+    }
+    
+    /**
+     * A convenient method to indicate whether this supports the ODA boolean data type 
+     * of the specified type of variable.
+     * @param varType  the type of variable; its value must be one of the pre-defined {@link ExpressionVariable#VariableType}
+     * @return  true if the ODA boolean data type is supported; false otherwise
+     * @see #supportsOdaDataType(VariableType, int)
+     */
+    public boolean supportsOdaBooleanDataTypes( VariableType varType )
+    {
+        return supportsOdaDataTypes( varType, DataTypeMapping.ODA_BOOLEAN_DATA_TYPE_CODES );
+    }
+    
+    private boolean supportsOdaDataTypes( VariableType varType, int[] odaDataTypeCodes )
+    {
+        for( int i=0; i < odaDataTypeCodes.length; i++ )
+        {
+            if( ! supportsOdaDataType( varType, odaDataTypeCodes[i] ) )
+                return false;
+        }
+        return true;    // supports all the specified data types
+    }
+    
+    /**
+     * Indicates whether this supports the specified class of the specified type of variable.
+     * @param type  the type of variable; its value must be one of the pre-defined {@link ExpressionVariable#VariableType}
+     * @param className the type of instance variable
+     * @return  true if the specified class is supported; false otherwise
+     */
+    @SuppressWarnings("unchecked")
+    public boolean supportsClassType( VariableType type, String className )
+    {
+        if( type != VariableType.INSTANCE_OF )    // this type does not support class type
+            return false;
+        if( ! supportsVariableType( type ) )
+            return false;
+
+        if( ! hasDataTypeRestrictions( type ) )
+            return true;
+        
+        Iterator<String> iter = getRestrictedDataTypeList(type).iterator();
+        while( iter.hasNext() )
+        {
+            if( iter.next().equalsIgnoreCase( className ) )
+                return true;
+        }
+        
+        // no matching type found in variable restricted type list
+        return false;
+    }
+    
+    /**
+     * Gets the collection of ODA data type(s) of result set column variables that can be applied with this expression.
+     * For example, a pattern matching expression may only be applicable to a result set column with a String data type.
+     * @return  an array of ODA data type code(s) allowed;
+     *          an empty array indicates this expression has no data type restrictions, i.e. all data types are compatible.     
+     */
+    @SuppressWarnings("unchecked")
+    public int[] getResultColumnRestrictedOdaDataTypes()
+    {
+        List<Integer> restrictedDataTypeList = 
+            (List<Integer>) getRestrictedDataTypeList( VariableType.RESULT_SET_COLUMN );
+        
+        // result column data type restrictions are implied from those of VariableType.QUERY_EXPRESSION, 
+        // if none explicitly defined
+        if( restrictedDataTypeList.isEmpty() && ! m_restrictedVariableTypes.contains( VariableType.RESULT_SET_COLUMN ) )
+            restrictedDataTypeList = (List<Integer>) getRestrictedDataTypeList( VariableType.QUERY_EXPRESSION );
+
+        return convertListToArrayInt( restrictedDataTypeList );
+    }
+    
+    /**
+     * Gets the collection of ODA data type(s) of query expression variables that can be applied with this expression.
+     * @return  An array of ODA data type code(s) allowed;
+     *          an empty array indicates this expression has no data type restrictions, i.e. all data types are compatible.
+     */
+    @SuppressWarnings("unchecked")
+    public int[] getQueryExpressionRestrictedOdaDataTypes()
+    {
+        List<Integer> restrictedDataTypeList = 
+            (List<Integer>) getRestrictedDataTypeList( VariableType.QUERY_EXPRESSION );
+        
+        return convertListToArrayInt( restrictedDataTypeList );
+    }
+
+    /* 
+     * Converts to an array of int.
+     */
+    private static int[] convertListToArrayInt( List<Integer> restrictedDataTypeList )
+    {
+        int[] restrictedTypeCodes = new int[restrictedDataTypeList.size()];
+        for( int i=0; i < restrictedDataTypeList.size(); i++ )
+        {
+            restrictedTypeCodes[i] = restrictedDataTypeList.get( i ).intValue();
+        }
+        return restrictedTypeCodes;
+    }
+    
+    /**
+     * Gets the collection of class names of instance variables that can be applied with this expression.
+     * @return  An array of class names allowed;
+     *          an empty array indicates this expression has no type restrictions, i.e. all types are compatible.
+     */
+    @SuppressWarnings("unchecked")
+    public String[] getInstanceRestrictedTypes()
+    {
+        List<String> restrictedDataTypeList = 
+            (List<String>) getRestrictedDataTypeList( VariableType.INSTANCE_OF );
+        return restrictedDataTypeList.toArray( new String[ restrictedDataTypeList.size() ] );
+    }
+    
+    @SuppressWarnings("unchecked")
+    private List getRestrictedDataTypeList( VariableType type )
+    {
+        if( m_restrictedDataTypesByVarType == null )
+            m_restrictedDataTypesByVarType = new HashMap<VariableType,List>();
+        
+        List restrictedDataTypes = m_restrictedDataTypesByVarType.get( type );
+        if( restrictedDataTypes == null )
+        {
+            if( type == VariableType.RESULT_SET_COLUMN )
+                restrictedDataTypes = new ArrayList<Integer>(0);
+            else if( type == VariableType.QUERY_EXPRESSION )
+                restrictedDataTypes = new ArrayList<Integer>(0);
+            else // if( type == VariableType.INSTANCE_OF )
+                restrictedDataTypes = new ArrayList<String>(0);
+            
+            m_restrictedDataTypesByVarType.put( type, restrictedDataTypes );
+        }
+        return restrictedDataTypes;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/package.html b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/package.html
new file mode 100644
index 0000000..6b0dd0c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/manifest/package.html
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2009, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+
+Provides a utility component for accessing the capabilities registered by an 
+ODA extension that implements the
+<code>org.eclipse.datatools.connectivity.oda.dynamicResultSet</code> extension point.
+<br>
+It provides the service to explore all ODA dynamicResultSet extensions, and access each 
+extension's capabilities registered in its extension manifest.
+It can be used by an ODA consumer and/or a data provider to discover 
+a dynamicResultSet extension's capabilities.
+<p>
+Use the singleton <code>ResultExtensionExplorer</code> as the entry point of this utility.
+<p>
+
+<!-- Put @see and @since tags down here. -->
+@since 3.3 (DTP 1.8)
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/package.html b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/package.html
new file mode 100644
index 0000000..039896e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/package.html
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2009, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+
+The runtime API for an ODA data set query's dynamic result set specification. 
+<p>
+This package and its sub-packages specify the dynamic operations, such as filtering, 
+row ordering and projection, on a query's result set.
+Support of the optional dynamic operations for an ODA data source extension
+is contributed by an extension that implements
+the <i>org.eclipse.datatools.connectivity.oda.dynamicResultSet</i> extension point.
+<p>
+
+<!-- Put @see and @since tags down here. -->
+@since 3.3 (DTP 1.8)
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/AggregateExpression.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/AggregateExpression.java
new file mode 100644
index 0000000..26679f8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/AggregateExpression.java
@@ -0,0 +1,228 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.result;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionVariable;
+import org.eclipse.datatools.connectivity.oda.spec.ValidationContext;
+import org.eclipse.datatools.connectivity.oda.spec.util.QuerySpecificationHelper;
+
+/**
+ * The abstract base class for all ODA aggregate expressions.
+ * <p>
+ * An expression may be validated by an {@link org.eclipse.datatools.connectivity.oda.spec.IValidator} implemented
+ * by an extension of the org.eclipse.datatools.connectivity.oda.dynamicResultSet extension point.
+ * </p>
+ * @since 3.3 (DTP 1.8)
+ */
+public abstract class AggregateExpression
+{    
+    private List<ExpressionVariable> m_inputVariables;   // 0..n ExpressionVariable
+    private boolean m_ignoresDups = false;
+    private boolean m_ignoresNull = true;
+    private String m_alias;
+
+    private static final String LOG_VAR_ENTRY = "\n      "; //$NON-NLS-1$
+    private static final String sm_className = AggregateExpression.class.getName();
+
+    /**
+     * Constructor with a single input source variable.
+     * @param inputSourceVar an {@link ExpressionVariable} that identifies the source of input values 
+     *                  to apply in the aggregate
+     */
+    protected AggregateExpression( ExpressionVariable inputSourceVar )
+    {
+        if( inputSourceVar != null )
+            add( inputSourceVar );
+    }
+    
+    /**
+     * Appends the specified input source variable to this.
+     * @param inputSourceVar  an {@link ExpressionVariable} that identifies the source of input values 
+     *                  to apply in the aggregate
+     * @return  this
+     */
+    public AggregateExpression add( ExpressionVariable inputSourceVar )
+    {
+        getVariables().add( inputSourceVar );
+        return this;
+    }
+
+    /**
+     * Returns the input source variables.
+     * @return 
+     */
+    public List<ExpressionVariable> getVariables()
+    {
+        if( m_inputVariables == null )
+        {
+            m_inputVariables = new ArrayList<ExpressionVariable>(1);
+        }
+        return m_inputVariables;
+    }
+
+    /**
+     * Sets an ordered list of input source variables.
+     * @param variables the list of variables to set; may be an empty list
+     */
+    public void setVariables( List<ExpressionVariable> variables )
+    {
+        m_inputVariables = variables;
+    }
+
+    /**
+     * Returns the qualified id of this expression type.
+     * @return  qualified id
+     */
+    public String getQualifiedId()
+    {
+        return getClass().getName();
+    }
+    
+    /**
+     * Gets the name of this expression type.
+     * It may be used to identify this in user messages or logging.
+     * @return  name of this expression
+     */
+    public String getName()
+    {
+        return getClass().getSimpleName();
+    }
+
+    /**
+     * Gets the alias of this aggregate expression instance.  The alias may be used to reference
+     * an instance.
+     * @return  the alias; may be null
+     */
+    public String getAlias()
+    {
+        return m_alias;
+    }
+    
+    /**
+     * Specifies the alias.
+     * @param alias the alias to set
+     */
+    public void setAlias( String alias )
+    {
+        m_alias = alias;
+    }
+
+    /**
+     * Indicates whether this aggregate should ignore duplicate input values 
+     * of its input source variable(s).
+     * @return  true to ignore; false otherwise
+     */
+    public boolean ignoresDuplicateValues()
+    {
+        return m_ignoresDups;
+    }
+
+    /**
+     * Specifies whether this aggregate to ignore duplicate values 
+     * of its input source variable(s).
+     * @param ignoresDups true to ignore; false otherwise
+     */
+    public void setIgnoreDuplicateValues( boolean ignoresDups )
+    {
+        m_ignoresDups = ignoresDups;
+    }
+
+    /**
+     * Indicates whether this aggregate should ignore duplicate null values 
+     * of its input source variable(s).
+     * @return  true to ignore; false otherwise
+     */
+    public boolean ignoresNullValues()
+    {
+        return m_ignoresNull;
+    }
+
+    /**
+     * Specifies whether this aggregate should ignore duplicate null values 
+     * of its input source variable(s).
+     * @param ignoresNull true to ignore; false otherwise
+     */
+    public void setIgnoreNullValues( boolean ignoresNull )
+    {
+        m_ignoresNull = ignoresNull;
+    }
+
+    /**
+     * Validates this expression. 
+     * @throws OdaException
+     */
+    public void validate() throws OdaException
+    {
+        validate( null );
+    }
+
+    /**
+     * Validates this expression in the specified context. 
+     * @param context   context for validation; may be null which would limit the scope of validation
+     * @throws OdaException if validation failed. The concrete reason is 
+     *          defined by the subclass implementing this method.
+     */
+    public void validate( ValidationContext context ) 
+        throws OdaException
+    {
+        try
+        {
+            validateSyntax( context );
+   
+            // pass this to custom validator, if exists, for further overall validation;
+            // up to custom validator class to resolve a variable's data type and validate
+            // against one of the expression's restricted data types
+            if( context != null && context.getValidator() != null )
+                context.getValidator().validate( this, context );
+        }
+        catch( OdaException ex )
+        {
+            // log the exception before re-throwing it to the caller
+            QuerySpecificationHelper.logValidationException( sm_className, ex );
+            throw ex;
+        }
+    }
+
+    /**
+     * Performs syntactic validation of this expression in the specified context. 
+     * @param context   context for validation; may be null which would limit the scope of validation
+     * @throws OdaException if validation failed. The concrete cause is 
+     *          defined by the subclass implementing this method.
+     */
+    public abstract void validateSyntax( ValidationContext context ) 
+        throws OdaException;
+
+    /* (non-Javadoc)
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString()
+    {
+        StringBuffer buffer = new StringBuffer( getQualifiedId() );
+        buffer.append( "\n    ( input variable(s): " ); //$NON-NLS-1$
+        if( m_inputVariables != null )
+        {
+            for( ExpressionVariable inputVar : m_inputVariables )
+                buffer.append( LOG_VAR_ENTRY + inputVar );
+        }
+        buffer.append( " )" ); //$NON-NLS-1$
+        return buffer.toString();
+    }
+   
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/ColumnIdentifier.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/ColumnIdentifier.java
new file mode 100644
index 0000000..eba8077
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/ColumnIdentifier.java
@@ -0,0 +1,304 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2013 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.result;
+
+import org.eclipse.datatools.connectivity.oda.spec.QuerySpecification;
+
+/**
+ * The identifier of a result set column, defined by its number and/or native name/expression.
+ * <br>A column number, if specified, takes precedence over its specified name/expression.
+ * A column number is 1-based, as defined in an {@link org.eclipse.datatools.connectivity.oda.IResultSet}
+ * before any dynamic projection is applied.
+ * <br>A ColumnIdentifier instance may be used as an unique key in a {@link java.util.Map}.
+ * Comparison by name is case-sensitive.
+ */
+public class ColumnIdentifier
+{
+    private Integer m_pos;
+    private String m_nameExpr;
+    private QuerySpecification m_querySpecRef;
+ 
+    private static final String LOG_CLASSNAME_PREFIX = "ColumnIdentifier@"; //$NON-NLS-1$
+    private static final String LOG_ORDINAL_LABEL = " [ordinal= "; //$NON-NLS-1$
+    private static final String LOG_NAME_LABEL = ", name= "; //$NON-NLS-1$
+    private static final String LOG_QUERYSPEC_LABEL = ", querySpec= "; //$NON-NLS-1$
+    private static final String LOG_END_BRACKET = "]"; //$NON-NLS-1$
+
+    /**
+     * Constructor to create an instance that identifies a result set column by both its ordinal
+     * position and native name/expression.  This would uniquely identify a column when multiple columns
+     * in a result set have the same name.
+     * @param pos   column number (1-based)
+     * @param nameExpr native name or expression of the column
+     */
+    public ColumnIdentifier( int pos, String nameExpr )
+    {
+        this( pos );
+        setNameExpression( nameExpr );
+    }
+    
+    /**
+     * Constructor to create an instance that identifies a result set column by its ordinal
+     * position.
+     * @param pos   column number (1-based)
+     * @throws IllegalArgumentException if specified argument is not greater or equal to 1
+     */
+    public ColumnIdentifier( int pos )
+    {
+        if( pos < 1 )
+            throw new IllegalArgumentException( Integer.valueOf( pos ).toString() );
+        
+        m_pos = Integer.valueOf( pos );
+    }
+    
+    /**
+     * Constructor to create an instance that identifies a result set column by its 
+     * native name or expression.
+     * @param nameExpr native name or expression of the column
+     * @throws IllegalArgumentException if specified argument is null or empty
+     */
+    public ColumnIdentifier( String nameExpr )
+    {
+        if( nameExpr == null || nameExpr.length() == 0 )
+            throw new IllegalArgumentException( nameExpr );
+        
+        m_nameExpr = nameExpr;
+    }
+
+    /**
+     * Constructor to create an instance that identifies a column by its
+     * native name or expression in the result set defined in a query specification.
+     * @param nameExpr   native name or expression of the column
+     * @param queryQualifier    the optional {@link QuerySpecification} qualifier of this column identifier
+     * @since 3.4.1 (DTP 1.11.1)
+     */
+    public ColumnIdentifier( String nameExpr, QuerySpecification queryQualifier )
+    {
+        this( nameExpr );
+        setQueryQualifier( queryQualifier );
+    }
+
+    /**
+     * Constructor that copies the content of the specified identifier.
+     * @param thatIdentifier    the ColumnIdentifier to copy from
+     * @since 3.4.1 (DTP 1.11.1)
+     */
+    public ColumnIdentifier( ColumnIdentifier thatIdentifier )
+    {
+        this.m_nameExpr = thatIdentifier.m_nameExpr;
+        this.m_pos = thatIdentifier.m_pos;
+        this.m_querySpecRef =  thatIdentifier.m_querySpecRef;
+    }
+
+    /**
+     * Sets the column number.
+     * @param pos column number; may be null
+     */
+    public void setNumber( Integer pos )
+    {
+        m_pos = pos;
+    }
+
+    /**
+     * Sets the column's native name or expression.
+     * @param nameExpr a column's native name or expression; may be null
+     */
+    public void setNameExpression( String nameExpr )
+    {
+        m_nameExpr = nameExpr;
+    }
+    
+    /**
+     * Sets the column's native name or expression.
+     * @param valueExpr a column's native name or expression; may be null
+     * @deprecated  replaced by {@link #setNameExpression(String)}
+     */
+    public void setValueExpression( String valueExpr )
+    {
+        setNameExpression( valueExpr );
+    }
+
+    /**
+     * Gets the column number, if specified.
+     * @return  column number, or null if not specified
+     */
+    public Integer getNumber()
+    {
+        return m_pos;
+    }
+
+    /**
+     * Gets the column's native name or expression, if specified.
+     * @return  column's native name or expression, or null if not specified
+     */
+    public String getNameExpression()
+    {
+        return m_nameExpr;
+    }
+    
+    /**
+     * Gets the column's native name or expression, if specified.
+     * @return  column's native name or expression, or null if not specified
+     * @deprecated {@link #getNameExpression()}
+     */
+    public String getValueExpression()
+    {
+        return getNameExpression();
+    }
+
+    /**
+     * Indicates whether this has a valid number that is used as the identifier.
+     * @return  true if this is identified by the column number; false otherwise
+     */
+    public boolean isIdentifiedByNumber()
+    {
+        return ( m_pos != null && m_pos.intValue() > 0 );
+    }
+    
+    /**
+     * Indicates whether this has a name expression specified.
+     * The name expression is superceded by the ordinal position identifier, if exists. 
+     * @return  true if this has a name expression; false otherwise
+     */
+    public boolean hasNameExpression()
+    {
+        return ( m_nameExpr != null && m_nameExpr.length() > 0 );
+    }
+
+    /**
+     * Indicates whether this has a name expression specified.
+     * The name expression, if exists, is ignored if this is identified by number. 
+     * @return  true if this has a name expression; false otherwise
+     * @deprecated replaced by {@link #hasNameExpression()}
+     */
+    public boolean hasValueExpression()
+    {
+        return hasNameExpression();
+    }
+
+    /**
+     * Specifies the query that projects this identified column in its result set.  
+     * This may be used to optionally qualify a column, when its name may be ambiguous. 
+     * @param querySpec     the optional {@link QuerySpecification} qualifier of this column identifier
+     * @since 3.4.1 (DTP 1.11.1)
+     */
+    public void setQueryQualifier( QuerySpecification querySpec )
+    {
+        m_querySpecRef = querySpec;
+    }
+
+    /**
+     * Gets the column's query qualifier, if specified.
+     * @return  the QuerySpecification that projects this column in its result set; may be null if not specified
+     * @since 3.4.1 (DTP 1.11.1)
+     */
+    public QuerySpecification getQueryQualifier()
+    {
+        return m_querySpecRef;
+    }
+
+    /**
+     * Indicates whether this column has a query qualifier.
+     * @return  true if this is qualified by the query that projects it in its result set; false otherwise
+     * @since 3.4.1 (DTP 1.11.1)
+     */
+    public boolean hasQueryQualifier()
+    {
+        return m_querySpecRef != null;
+    }
+
+    /**
+     * Indicates whether this has either a valid number or name expression.
+     * @return  true if this has a valid number or name expression; false otherwise
+     */
+    public boolean isValid()
+    {
+        if( isIdentifiedByNumber() )
+            return true;
+        if( hasNameExpression() )
+            return true;
+        return false;
+    }
+    
+    /* (non-Javadoc)
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    @Override
+    public boolean equals( Object obj )
+    {
+        if( ! (obj instanceof ColumnIdentifier) )
+            return false;
+
+        ColumnIdentifier thatObj = (ColumnIdentifier) obj;
+        if( this == thatObj )
+            return true;
+
+        // compares by position first, if exists
+        if( this.isIdentifiedByNumber() )
+        {
+            if( ! this.m_pos.equals( thatObj.m_pos ) )
+                return false;
+        }
+        
+        // compares by name, if exists
+        if( this.hasNameExpression() )
+        {
+            if( ! this.m_nameExpr.equals( thatObj.m_nameExpr ) )
+                return false;
+        }
+        
+        // compares the query qualifier
+        return this.getQueryQualifier() == thatObj.getQueryQualifier();
+    }
+
+    /* (non-Javadoc)
+     * @see java.lang.Object#hashCode()
+     */
+    @Override
+    public int hashCode()
+    {
+        int hashCode = 0;
+        // use its position for hashcode if exists
+        if( isIdentifiedByNumber() )
+            hashCode = m_pos.hashCode();
+        
+        if( hasNameExpression() )
+            hashCode = hashCode ^ m_nameExpr.hashCode();
+        
+        if( m_querySpecRef != null )
+            return hashCode ^ m_querySpecRef.hashCode();
+
+        return (hashCode == 0) ? super.hashCode() : hashCode;
+    }
+
+    /* (non-Javadoc)
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString()
+    {
+        StringBuffer buffer = new StringBuffer( LOG_CLASSNAME_PREFIX );
+        buffer.append( super.hashCode() );
+        buffer.append( LOG_ORDINAL_LABEL );
+        buffer.append( m_pos ); 
+        buffer.append( LOG_NAME_LABEL );
+        buffer.append( m_nameExpr );
+        buffer.append( LOG_QUERYSPEC_LABEL );
+        buffer.append( m_querySpecRef );
+        buffer.append( LOG_END_BRACKET ); 
+        return buffer.toString();
+    }                  
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/CustomAggregate.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/CustomAggregate.java
new file mode 100644
index 0000000..b4c3a37
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/CustomAggregate.java
@@ -0,0 +1,326 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.result;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExecutableExtension;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionVariable;
+import org.eclipse.datatools.connectivity.oda.spec.IValidator;
+import org.eclipse.datatools.connectivity.oda.spec.ValidationContext;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.AggregateDefinition;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.ResultExtensionExplorer;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.SupportedDataSetType;
+import org.eclipse.datatools.connectivity.oda.spec.util.ValidatorUtil;
+
+/**
+ * Represents an instance of custom aggregate expression contributed by an extension of
+ * the org.eclipse.datatools.connectivity.oda.dynamicResultSet extension point.
+ * @since 3.2 (DTP 1.7)
+ */
+public class CustomAggregate extends AggregateExpression implements IExecutableExtension
+{
+    private static final String QUALIFIER_SEPARATOR = "."; //$NON-NLS-1$
+    private String m_id;
+    private String m_extensionId;
+    private Map<String,Object> m_customData;
+    private AggregateDefinition m_definition;  // expects 1-n-only-1 associated AggregateDefinition
+
+    /*
+     * Base class constructor.
+     * Use ExpressionFactory#createCustomAggregate to create a custom aggregate instance.
+     */
+    protected CustomAggregate( String extensionId, String id, ExpressionVariable inputSourceVar )
+    {
+        super( inputSourceVar );
+        m_extensionId = extensionId;
+        m_id = id;
+    }
+
+    /*
+     * Base class constructor.
+     * Use ExpressionFactory#createCustomAggregate to create a custom aggregate instance.
+     */
+    protected CustomAggregate( String extensionId, String id )
+    {
+        this( extensionId, id, null );
+    }
+    
+    /*
+     * Constructor for use by org.eclipse.core.runtime.IExecutableExtension#createExecutableExtension
+     * to instantiate an extended class.
+     * Use ExpressionFactory#createCustomAggregate to create a custom aggregate instance.
+     */
+    protected CustomAggregate()
+    {
+        super( null );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.core.runtime.IExecutableExtension#setInitializationData(org.eclipse.core.runtime.IConfigurationElement, java.lang.String, java.lang.Object)
+     */
+    public void setInitializationData( IConfigurationElement exprElement,
+            String propertyName, Object data ) throws CoreException
+    {
+        m_extensionId = exprElement.getDeclaringExtension().getUniqueIdentifier();
+        try
+        {
+            m_id = AggregateDefinition.getIdAttributeValue( exprElement );
+        }
+        catch( OdaException ex )
+        {
+            throw new CoreException( new Status( IStatus.ERROR, exprElement.getContributor().getName(), ex.getLocalizedMessage() ) );
+        }
+    }
+
+    /**
+     * Gets the expression id.  It is unique within the contributing extension.
+     * @return the expression id
+     */
+    public String getId()
+    {
+        return m_id;
+    }
+    
+    /**
+     * Gets the unique id of the dynamicResultSet extension that declares this custom expression type.
+     * @return unique id of declaring extension
+     */
+    public String getDeclaringExtensionId()
+    {
+        return m_extensionId;
+    }
+ 
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.result.AggregateExpression#getQualifiedId()
+     */
+    public String getQualifiedId()
+    {
+        return m_extensionId + QUALIFIER_SEPARATOR + m_id;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.result.AggregateExpression#getName()
+     */
+    @Override
+    public String getName()
+    {
+        AggregateDefinition defn = getDefinition();
+        if( defn == null )
+            return getQualifiedId();
+        return m_extensionId + QUALIFIER_SEPARATOR + defn.getDisplayName();
+    }
+
+    /**
+     * Indicates whether this expression can be applied to the specified data set type within the data source type.
+     * @param odaDataSourceId   id of an ODA data source extension
+     * @param odaDataSetId      id of an ODA data set defined within the data source extension
+     * @return  true if this can be applied to the specified data set type; false otherwise
+     */
+    public boolean supportsDataSetType( String odaDataSourceId, String odaDataSetId )
+    {
+        AggregateDefinition defn = getDefinition();
+        if( defn == null )
+            return false;
+        
+        return defn.supportsDataSetType( odaDataSourceId, odaDataSetId );
+    }
+    
+    /**
+     * Indicates whether this expression can be applied to the specified data set type.
+     * @param dataSetType   an instance of {@link SupportedDataSetType} 
+     * @return  true if this can be applied to the specified ODA data set type; false otherwise
+     */
+    public boolean supportsDataSetType( SupportedDataSetType dataSetType )
+    {
+        if( dataSetType == null )
+            return false;
+        return supportsDataSetType( dataSetType.getOdaDataSourceId(), dataSetType.getOdaDataSetId() );
+    }
+    
+    /**
+     * Indicates whether this aggregate type is capable of ignoring duplicate values of its input variable. 
+     * Default value is false if none is specified in the extension.
+     * @return true if this aggregate type is capable of ignoring duplicate values of its input variable;
+     *          false otherwise 
+     */
+    public boolean canIgnoreDuplicateValues()
+    {
+        AggregateDefinition defn = getDefinition();
+        return ( defn == null ) ? false : defn.canIgnoreDuplicateValues();
+    }
+
+    /**
+     * Indicates whether this aggregate type is capable of ignoring null values of its input variable. 
+     * Default value is false if none is specified in the extension.
+     * @return true if this aggregate type is capable of ignoring null values of its input variable;
+     *          false otherwise 
+     */
+    public boolean canIgnoreNullValues()
+    {
+        AggregateDefinition defn = getDefinition();
+        return ( defn == null ) ? false : defn.canIgnoreNullValues();
+    }
+
+    /**
+     * Gets the definition of this expression's capabilities and metadata, as registered by the provider 
+     * in its extension of the <i>org.eclipse.datatools.connectivity.oda.dynamicResultSet</i> extension point.
+     * @return  definition of this custom aggregate expression
+     */
+    public AggregateDefinition getDefinition()
+    {
+        // obtain from extension manifest explorer by extensionId + id
+        if( m_definition == null )
+        {
+            try
+            {
+                m_definition = ResultExtensionExplorer.getInstance()
+                    .getExtensionAggregateDefinition( getDeclaringExtensionId(), getId() );
+            }
+            catch( OdaException ex )
+            {
+                // TODO log warning
+                return null;
+            }
+        }
+        return m_definition;
+    }
+    
+    /**
+     * Gets the value of an extension-defined property of the specified name.
+     * An extension contributor may have arbitrary objects associated with an expression. 
+     * @param key   the name of property
+     * @return      the value of the named property, or null if it has not been set
+     */
+    public Object getData( String key )
+    {
+        if( m_customData == null )
+            return null;
+        return m_customData.get( key );
+    }
+
+    /**
+     * Sets the value of an extension-defined property of the specified name.
+     * An extension contributor may use this to associate arbitrary objects with an expression.
+     * @param key   the name of property
+     * @param value the new value of the named property
+     */
+    public void setData( String key, Object value )
+    {
+        if( m_customData == null )
+            m_customData = new HashMap<String,Object>();
+        m_customData.put( key, value );
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.result.AggregateExpression#validateSyntax(org.eclipse.datatools.connectivity.oda.spec.ValidationContext)
+     */
+    @Override
+    public void validateSyntax( ValidationContext context ) throws OdaException
+    {
+        try
+        {
+            AggregateDefinition defn = getDefinition();
+            if( defn == null )
+                throw new OdaException( 
+                        Messages.bind( Messages.querySpec_NON_DEFINED_CUSTOM_AGGR, getName() ));
+            
+            validateSyntax( context, defn );     
+
+            // pass to custom validator, if exists, for further validation
+            IValidator customValidator = getValidator( context, defn );
+            if( customValidator != null )
+                customValidator.validateSyntax( this, context );
+        }
+        catch( OdaException ex )
+        {
+            throw ValidatorUtil.newAggregateException( this, ex );
+        }                
+    }
+
+    /**
+     * Validates that this expression meets the restriction specified
+     * by the expression definition. 
+     * @param defn
+     * @throws OdaException  if validation fails
+     */
+    protected void validateSyntax( ValidationContext context, AggregateDefinition defn ) throws OdaException
+    {
+        assert( defn != null );
+        
+        // validate number of associated variable
+        int numArgs = getVariables().size();
+
+        int minArgs = defn.getMinInputVariables().intValue();
+        if( numArgs < minArgs )
+            throw newAggregateException( 
+                    Messages.bind( Messages.querySpec_CUSTOM_AGGR_LESS_THAN_MIN_ARGS,
+                                new Object[]{ getName(), Integer.valueOf(numArgs), Integer.valueOf(minArgs) } ));
+
+        if( ! defn.supportsUnboundedMaxInputVariables() ) // no unbounded upper limit, validate max arguments
+        {
+            int maxArgs = defn.getMaxInputVariables().intValue();
+            if( numArgs > maxArgs )
+                throw newAggregateException( 
+                    Messages.bind( Messages.querySpec_CUSTOM_AGGR_EXCEED_MAX_ARGS, 
+                                new Object[]{ getName(), Integer.valueOf(numArgs), Integer.valueOf(maxArgs) } ) );
+        }       
+        
+        // validates the capabilities
+        if( ignoresDuplicateValues() && ! defn.canIgnoreDuplicateValues() )
+            throw newAggregateException( 
+                    Messages.bind( Messages.querySpec_CUSTOM_AGGR_INCOMPATIBLE_DUPL_CHECK, getName() ) );
+ 
+        if( ignoresNullValues() && ! defn.canIgnoreNullValues() )
+            throw newAggregateException( 
+                    Messages.bind( Messages.querySpec_CUSTOM_AGGR_INCOMPATIBLE_NULL_CHECK, getName() ) );
+    }
+
+    protected OdaException newAggregateException( String message )
+    {
+        return ValidatorUtil.newAggregateException( message, this );
+    }
+   
+    protected IValidator getValidator( ValidationContext context, AggregateDefinition defn )
+    {
+        // try use the validator in the context, if available
+        if( context != null && context.getValidator() != null )
+            return context.getValidator();
+
+        // use validator in the definition, if specified
+        try
+        {
+            if( defn != null )
+                return defn.getValidator();
+        }
+        catch( OdaException ex )
+        {
+            // TODO log warning
+        }
+
+        return null;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/FilterExpression.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/FilterExpression.java
new file mode 100644
index 0000000..05a7791
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/FilterExpression.java
@@ -0,0 +1,120 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.result;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.spec.ValidationContext;
+import org.eclipse.datatools.connectivity.oda.spec.util.QuerySpecificationHelper;
+
+
+/**
+ * The abstract base class for all ODA filter expressions.
+ * <p>
+ * An expression may be validated by an {@link org.eclipse.datatools.connectivity.oda.spec.IValidator} implemented 
+ * by an extension of the org.eclipse.datatools.connectivity.oda.dynamicResultSet extension point.
+ * </p>
+ * @since 3.3 (DTP 1.8)
+ */
+public abstract class FilterExpression
+{
+    // trace logging variables
+    private static final String sm_className = FilterExpression.class.getName();
+
+    /**
+     * Returns the qualified id of this expression type.
+     * @return  qualified id
+     */
+    public String getQualifiedId()
+    {
+        return getClass().getName();
+    }
+    
+    /**
+     * Gets the name of this filter expression type.
+     * It may be used to identify this in user messages or logging.
+     * @return  name of this filter expression
+     */
+    public String getName()
+    {
+        return getClass().getSimpleName();
+    }
+
+    /**
+     * Checks whether two objects are equal using the
+     * <code>equals(Object)</code> method of the <code>left</code> object.
+     * This method handles <code>null</code> for either the <code>left</code>
+     * or <code>right</code> object.
+     * @param left the first object to compare; may be <code>null</code>.
+     * @param right the second object to compare; may be <code>null</code>.
+     * @return <code>true</code> if the two objects are equivalent;
+     *         <code>false</code> otherwise.
+     */
+    protected static final boolean equals( final Object left, final Object right )
+    {
+        return left == null ? right == null : 
+                            ((right != null) && left.equals( right ));
+    }
+
+    /**
+     * Validates this expression. 
+     * @throws OdaException if validation failed. The concrete cause is 
+     *          defined by the subclass implementing this method.
+     */
+    public void validate() throws OdaException
+    {
+        validate( null );
+    }
+
+    /**
+     * Validates this expression in the specified context. 
+     * @param context   context for validation; may be null which would limit the scope of validation
+     * @throws OdaException if validation failed. The concrete cause is 
+     *          defined by the subclass implementing this method.
+     */
+    public void validate( ValidationContext context ) 
+        throws OdaException
+    {
+        try
+        {
+            validateSyntax( context );
+
+            // pass this to custom validator, if exists, for further overall validation
+            if( context != null && context.getValidator() != null )
+                context.getValidator().validate( this, context );
+        }
+        catch( OdaException ex )
+        {
+            // log the exception before re-throwing it to the caller
+            QuerySpecificationHelper.logValidationException( sm_className, ex );
+            throw ex;
+        }
+    }
+
+    /**
+     * Performs syntactic validation of this expression in the specified context. 
+     * @param context   context for validation; may be null which would limit the scope of validation
+     * @throws OdaException if validation failed. The concrete cause is 
+     *          defined by the subclass implementing this method.
+     */
+    public abstract void validateSyntax( ValidationContext context ) 
+        throws OdaException;
+
+    /**
+     * Indicates whether this expression can be negated.
+     * @return  true if expression can be negated; false otherwise
+     */
+    public abstract boolean isNegatable();
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/InternalResultSpecFactory.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/InternalResultSpecFactory.java
new file mode 100644
index 0000000..78bd42f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/InternalResultSpecFactory.java
@@ -0,0 +1,54 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.result;
+
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionVariable;
+
+/**
+ *  Internal factory of package classes. 
+ */
+public class InternalResultSpecFactory
+{
+    public static CustomAggregate createCustomAggregate( String extensionId, String id, ExpressionVariable inputSourceVar )
+    {
+        return new CustomAggregate( extensionId, id, inputSourceVar );
+    }
+    
+    public static CustomAggregate createCustomAggregate( String extensionId, String id )
+    {
+        return new CustomAggregate( extensionId, id );
+    }
+
+    public static ResultProjection createResultProjection()
+    {
+        return new ResultProjection();
+    }
+    
+    public static ResultSetSpecification createResultSetSpecification()
+    {
+        return new ResultSetSpecification();
+    }
+    
+    public static SortSpecification createSortSpecification()
+    {
+        return new SortSpecification();
+    }
+    
+    public static SortSpecification createSortSpecification( int sortMode )
+    {
+        return new SortSpecification( sortMode );
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/ResultProjection.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/ResultProjection.java
new file mode 100644
index 0000000..17265a6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/ResultProjection.java
@@ -0,0 +1,232 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.result;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionVariable;
+import org.eclipse.datatools.connectivity.oda.spec.util.ValidatorUtil;
+
+/**
+ * Specification for the projection of an {@link org.eclipse.datatools.connectivity.oda.IResultSet} 
+ * to be retrieved by an associated {@link org.eclipse.datatools.connectivity.oda.IQuery}.
+ * @since 3.3 (DTP 1.8)
+ */
+public class ResultProjection
+{
+    private Map<ColumnIdentifier,AggregateExpression> m_aggregateSpecByColumn;
+    private Map<ColumnIdentifier,ExpressionVariable> m_addedColumns;
+    private List<ColumnIdentifier> m_hiddenColumns;
+    private static final int MAP_INITIAL_CAPACITY = 5;
+
+    private static final String LOG_SUB_ENTRY = "\n * "; //$NON-NLS-1$
+    private static final String LOG_PAIR_ENTRY_SEPARATOR = " ->\n    "; //$NON-NLS-1$
+    
+    /**
+     * Base class constructor.
+     * <br>Use {@link org.eclipse.datatools.connectivity.oda.spec.util.QuerySpecificationHelper#createResultProjection()} 
+     * to create an instance.
+     */
+    protected ResultProjection() {}
+    
+    /**
+     * Specifies an aggregate expression whose output value is projected on the 
+     * specified result set column identifier.
+     * <br>The aggregation is applied on the values of its input source variable(s) 
+     * across a set of data records.
+     * Each set is grouped by the unique values of all the other result set column(s) 
+     * that do not have an aggregate expression projected.  Hidden result set column(s) 
+     * are excluded from the groupings.  
+     * If the result set has sorting specification defined, the order of the
+     * column groupings should be in the same sequence as the sorted columns.
+     * <br>A projected tabular result set returns one row for each group. 
+     * @param resultColumn   the column identifier in the projected result set targeted for the 
+     *          output of the specified aggregate expression
+     * @param aggregate an {@link AggregateExpression} whose output value is projected on the 
+     *                  specified result set column
+     * @throws OdaException
+     */
+    public void setProjection( ColumnIdentifier resultColumn, AggregateExpression aggregate ) throws OdaException
+    {
+        validateColumnIdentifier( resultColumn );
+        if( getHiddenResultColumns().contains( resultColumn ) )
+            throw ValidatorUtil.newAggregateException( 
+                    Messages.bind( Messages.querySpec_INVALID_AGGR_HIDE_COLUMN, resultColumn ), 
+                    aggregate );
+        
+        getAggregatedColumns().put( resultColumn, aggregate );
+    }
+    
+    /**
+     * Gets the aggregate expression on the specified result set column.
+     * @param resultColumnNum  the projected column number (1-based) in the result set
+     * @return  an {@link AggregateExpression} whose output value is projected on the 
+     *                  specified result set column, or null if none is specified
+     * @see #setProjection(ColumnIdentifier, AggregateExpression)
+     */
+    public AggregateExpression getAggregateProjection( ColumnIdentifier resultColumn )
+    {
+        return getAggregatedColumns().get( resultColumn );
+    }
+    
+    /**
+     * Returns a map of projected columns, each with corresponding aggregate expression.
+     * @return  the map of projected column aggregation;
+     *          may be empty if no column aggregate is specified
+     * @see #setProjection(ColumnIdentifier, AggregateExpression)
+     * @see #addResultColumn(AggregateExpression)
+     */
+    public Map<ColumnIdentifier,AggregateExpression> getAggregatedColumns()
+    {
+        if( m_aggregateSpecByColumn == null )
+            m_aggregateSpecByColumn = new LinkedHashMap<ColumnIdentifier,AggregateExpression>(MAP_INITIAL_CAPACITY);
+
+        return m_aggregateSpecByColumn;
+    }
+    
+    /**
+     * Appends a new result column to the query result set.  
+     * The appended result column can be referenced in the result set by the specified variable's alias.
+     * @param columnExprVariable  a variable that resolves to the value of the new column
+     * @throws OdaException
+     */
+    public void addResultColumn( ExpressionVariable columnExprVariable ) throws OdaException
+    {
+        getAddedResultColumns().put( new ColumnIdentifier( columnExprVariable.getAlias() ), 
+                                    columnExprVariable );
+    }
+    
+    /**
+     * Returns a map of result columns that are to be dynamically added to the query result set.
+     * Each result column in the map is associated with an input variable 
+     * that resolves to the column value.
+     * @return  the map of projected new result columns; 
+     *          may be empty if no column is to be dynamically added
+     * @see #addResultColumn(ExpressionVariable)
+     * @see #addResultColumn(AggregateExpression)
+     */
+    public Map<ColumnIdentifier,ExpressionVariable> getAddedResultColumns()
+    {
+        if( m_addedColumns == null )
+            m_addedColumns = new LinkedHashMap<ColumnIdentifier, ExpressionVariable>(MAP_INITIAL_CAPACITY);
+        
+        return m_addedColumns;
+    }
+    
+    /**
+     * Hides the specified result column in the query result.
+     * Any associated aggregate projection is also removed.
+     * @param resultColumn
+     * @throws OdaException
+     */
+    public void hideResultColumn( ColumnIdentifier resultColumn ) throws OdaException
+    {
+        validateColumnIdentifier( resultColumn );
+
+        // remove aggregate projection, if any, on the hidden column
+        getAggregatedColumns().remove( resultColumn );
+        
+        // if specified column is a dynamically added column
+        if( getAddedResultColumns().containsKey( resultColumn ) )
+        {
+            // simply remove it from added column collection
+            getAddedResultColumns().remove( resultColumn );
+        }
+        else    // add to dynamically hidden column collection, if not already exists
+        {
+            if( ! getHiddenResultColumns().contains( resultColumn ) )
+                getHiddenResultColumns().add( resultColumn );
+        }
+    }
+
+    /**
+     * Returns a list of result columns that are to be dynamically hidden from the query result set.
+     * @return  the map of projected hidden result columns; 
+     *          may be empty if no column is to be dynamically hidden
+     * @see #hideResultColumn(ColumnIdentifier)
+     */
+    public List<ColumnIdentifier> getHiddenResultColumns()
+    {
+        if( m_hiddenColumns == null )
+            m_hiddenColumns = new ArrayList<ColumnIdentifier>(MAP_INITIAL_CAPACITY);
+        
+        return m_hiddenColumns;
+    }
+    
+    /**
+     * Indicates whether this has an empty content.
+     * @return  true if this has an empty content; false otherwise
+     * @since 3.3.1 (DTP 1.8.1)
+     */
+    public boolean isEmpty()
+    {
+        return( getAddedResultColumns().isEmpty() && 
+                getAggregatedColumns().isEmpty() && 
+                getHiddenResultColumns().isEmpty() );
+    }
+    
+    private void validateColumnIdentifier( ColumnIdentifier resultColumn ) throws OdaException
+    {
+        if( resultColumn == null || ! resultColumn.isValid() )
+            throw new OdaException( new IllegalArgumentException( 
+                    Messages.bind( Messages.querySpec_INVALID_COLUMN_IDENTIFIER, resultColumn )) );
+    }
+
+    /* (non-Javadoc)
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString()
+    {
+        StringBuffer buffer = new StringBuffer( ResultProjection.class.getSimpleName() + " [" ); //$NON-NLS-1$
+        
+        buffer.append( "\nAdded result columns <ColumnIdentifier, ExpressionVariable>:" ); //$NON-NLS-1$
+        if( m_addedColumns != null )
+        {
+            for( Entry<ColumnIdentifier, ExpressionVariable> addedColumnPair : m_addedColumns.entrySet() )
+            {
+                buffer.append( LOG_SUB_ENTRY + addedColumnPair.getKey() +
+                        LOG_PAIR_ENTRY_SEPARATOR + addedColumnPair.getValue() );
+            }
+        }
+        
+        buffer.append( "\nHidden result columns <ColumnIdentifier>: " ); //$NON-NLS-1$
+        if( m_hiddenColumns != null )
+        {
+            for( ColumnIdentifier hiddenColumnIdentifier : m_hiddenColumns )
+                buffer.append( LOG_SUB_ENTRY + hiddenColumnIdentifier );
+        }
+        
+        buffer.append( "\nAggregated columns <ColumnIdentifier, AggregateExpression>: " ); //$NON-NLS-1$
+        if( m_aggregateSpecByColumn != null )
+        {
+            for( Entry<ColumnIdentifier, AggregateExpression> aggrColumnPair : m_aggregateSpecByColumn.entrySet() )
+            {
+                buffer.append( LOG_SUB_ENTRY + aggrColumnPair.getKey() +
+                        LOG_PAIR_ENTRY_SEPARATOR + aggrColumnPair.getValue() );
+            }
+        }
+        
+        buffer.append( "]" ); //$NON-NLS-1$
+        return buffer.toString();
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/ResultSetSpecification.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/ResultSetSpecification.java
new file mode 100644
index 0000000..a2f0ce7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/ResultSetSpecification.java
@@ -0,0 +1,152 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.result;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.spec.ValidationContext;
+import org.eclipse.datatools.connectivity.oda.spec.util.QuerySpecificationHelper;
+
+
+/**
+ * Specification of the characteristics of an {@link org.eclipse.datatools.connectivity.oda.IResultSet} 
+ * to be retrieved by the associated {@link org.eclipse.datatools.connectivity.oda.IQuery}.
+ * <br>Its application would impact the shape of data retrieved in a result set,
+ * in addition to any specification expressed in a query text.
+ * @since 3.3 (DTP 1.8)
+ */
+public class ResultSetSpecification
+{
+    private FilterExpression m_filterSpec;
+    private ResultProjection m_projectionSpec;
+    private SortSpecification m_sortSpec;
+    // trace logging variables
+    private static final String sm_className = ResultSetSpecification.class.getName();
+    
+    /**
+     * Base class constructor.
+     * <br>Use {@link org.eclipse.datatools.connectivity.oda.spec.util.QuerySpecificationHelper#createResultSetSpecification()} 
+     * to create an instance.
+     */
+    protected ResultSetSpecification() {}
+    
+    /**
+     * Specifies the filtering characteristics of a query result set.
+     * @param filterExpr    a composite or atomic {@link FilterExpression} 
+     *             with corresponding variable and argument values
+     */
+    public void setFilterSpecification( FilterExpression filterExpr ) 
+    {
+        m_filterSpec = filterExpr; 
+    }
+
+    /**
+     * Gets the current filtering specification of a query result set.
+     * @return  the current{@link FilterExpression}, 
+     *             or null if not explicitly specified
+     */
+    public FilterExpression getFilterSpecification()
+    {
+        return m_filterSpec;
+    }
+
+    /**
+     * Specifies the projection of a query result set.
+     * @param projectionSpec    a {@link ResultProjection}
+     */
+    public void setResultProjection( ResultProjection projectionSpec )
+    {
+        m_projectionSpec = projectionSpec;
+    }
+    
+    /**
+     * Gets the current projection of a query result set.
+     * @return  the current {@link ResultProjection}, 
+     *          or null if not explicitly specified
+     */
+    public ResultProjection getResultProjection()
+    {
+        return m_projectionSpec;
+    }
+
+    /**
+     * Specifies the sorting characteristics of a query result set.
+     * <br>It is up to individual ODA runtme drivers to validate the type of sort specification 
+     * that are acceptable to its data provider, based on its level 
+     * of dynamic sorting support. 
+     * <p>
+     * This will replace 
+     * {@link org.eclipse.datatools.connectivity.oda.IQuery#setSortSpec(org.eclipse.datatools.connectivity.oda.SortSpec)} 
+     * when it becomes API.
+     * @param sortBy    a {@link SortSpecification}
+     */
+    public void setSortSpecification( SortSpecification sortSpec )
+    {
+        m_sortSpec = sortSpec;
+    }
+    
+    /**
+     * Gets the current sorting specification of a query result set.
+     * <p>
+     * This will replace {@link org.eclipse.datatools.connectivity.oda.IQuery#getSortSpec()} 
+     * when it becomes API.
+     * @return  the current {@link SortSpecification},
+     *          or null if not explicitly specified
+     */
+    public SortSpecification getSortSpecification()
+    {
+        return m_sortSpec;
+    }
+
+    /**
+     * Indicates whether this has an empty content.
+     * @return  true if this has an empty content; false otherwise
+     * @since 3.3.1 (DTP 1.8.1)
+     */
+    public boolean isEmpty()
+    {
+        if( getFilterSpecification() != null || getSortSpecification() != null )
+            return false;
+
+        ResultProjection resultProj = getResultProjection();
+        return ( resultProj == null || resultProj.isEmpty() );
+    }
+    
+    /**
+     * Validates this in the specified context. 
+     * @param context   context for validation; may be null which would limit the scope of validation
+     * @throws OdaException if validation failed.  The exception thrown may be a chained OdaException, 
+     *          which identifies each of those specification component(s) that has caused 
+     *          the validation exception.
+     * @see {@link org.eclipse.datatools.connectivity.oda.spec.util.ValidatorUtil}
+     * @since 3.2.2 (DTP 1.7.2)
+     */
+    public void validate( ValidationContext context ) 
+        throws OdaException
+    {
+        try
+        {
+            // pass this to custom validator, if exists, for overall validation
+            if( context != null && context.getValidator() != null )
+                context.getValidator().validate( this, context );
+        }
+        catch( OdaException ex )
+        {
+            // log the exception before re-throwing it to the caller
+            QuerySpecificationHelper.logValidationException( sm_className, ex );
+            throw ex;
+        }
+    }
+        
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/SortSpecification.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/SortSpecification.java
new file mode 100644
index 0000000..05d4f1e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/SortSpecification.java
@@ -0,0 +1,479 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.result;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.oda.IDataSetMetaData;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.spec.ValidationContext;
+import org.eclipse.datatools.connectivity.oda.spec.util.QuerySpecificationHelper;
+
+/**
+ * Specification of one or more dynamic sort keys of a query result set.
+ * <br>Its application would impact the ordering of data rows retrieved in a result set,
+ * in addition to any required sort specification expressed in a query text.
+ * This may be extended to define additional ways of expressing a sort mode or key.
+ * @since 3.3 (DTP 1.8)
+ */
+public class SortSpecification
+{
+	/**
+	 * The constant that specifies ascending ordering of a sort key.
+	 */
+	public static final int ORDERING_ASC = 0;
+	
+	/**
+	 * The constant that specifies descending ordering of a sort key.
+	 */
+	public static final int ORDERING_DESC = 1;
+	
+	/**
+	 * Constants that specify the null ordering specification of a sort key.
+	 */
+	public static final int NULL_ORDERING_NONE = 0;
+    public static final int NULL_ORDERING_FIRST = 1;
+    public static final int NULL_ORDERING_LAST = 2;
+
+	private static final int SORT_MODE_UNDEFINED = -1;
+	
+	private int m_sortMode;
+	private List<SortKey> m_sortKeys;
+
+    private static final String LOG_NEWLINE_CHAR = "\n "; //$NON-NLS-1$
+    private static final String sm_className = SortSpecification.class.getName();
+	
+	/**
+	 * Base class constructor with no pre-defined restriction on its sort mode.
+     * <br>Use {@link org.eclipse.datatools.connectivity.oda.spec.util.QuerySpecificationHelper#createSortSpecification()} 
+     * to create an instance.
+	 */
+	protected SortSpecification()
+	{
+	    this( SORT_MODE_UNDEFINED );
+	}
+	
+	/**
+	 * Base class constructor with the defined <code>sortMode</code>.
+     * By specifiying a sort mode, a sort key that gets added to this specification
+     * will be validated to match the sort mode.
+     * <br>Use {@link org.eclipse.datatools.connectivity.oda.spec.util.QuerySpecificationHelper#createSortSpecification(int)} 
+     * to create an instance.
+	 * @param sortMode	the sort mode of this <code>SortSpecification</code>; one of 
+	 * 					<code>IDataSetMetaData.sortModeNone</code>, 
+	 * 					<code>IDataSetMetaData.sortModeSingleOrder</code>,
+	 * 					<code>IDataSetMetaData.sortModeColumnOrder</code>,
+	 * 					<code>IDataSetMetaData.sortModeSingleColumn</code>.
+	 * @throws IllegalArgumentException	if the <code>sortMode</code> is not a 
+	 * 									valid value.
+	 */
+	protected SortSpecification( int sortMode )
+	{
+		if( sortMode != IDataSetMetaData.sortModeNone &&
+			sortMode != IDataSetMetaData.sortModeSingleOrder &&
+			sortMode != IDataSetMetaData.sortModeColumnOrder &&
+			sortMode != IDataSetMetaData.sortModeSingleColumn &&
+			sortMode != SORT_MODE_UNDEFINED )
+			throw new IllegalArgumentException( 
+					Messages.bind( Messages.sortSpec_INVALID_SORT_MODE_SPECIFIED,
+									new Integer( sortMode ) ));
+		
+		m_sortMode = sortMode;
+		m_sortKeys = new ArrayList<SortKey>();
+	}
+	
+	/**
+	 * Adds a dynamic sort key for a specified result set column and sort direction.
+	 * See {@link #addSortKey(ColumnIdentifier, int, int)} for more description. 
+	 * @param column	identifier of the result set column to apply dynamic sorting
+	 * 						on.  The specified column should be one of the columns
+	 * 						retrieved in a result set
+	 * @param sortDirection	constant value for the sort direction; must be one of the
+     *                      constant values: <code>ORDERING_ASC</code>, <code>ORDERING_DESC</code>
+	 * @see #addSortKey(ColumnIdentifier, int, int)
+	 */
+	public void addSortKey( ColumnIdentifier column, int sortDirection )
+	{
+	    addSortKey( column, sortDirection, NULL_ORDERING_NONE );
+	}
+	
+	/**
+     * Adds a dynamic sort key for a specified result set column, sort direction and null ordering. 
+     * The sort criteria are specified by an ODA consumer, using 
+     * an ordered list of one or more sort keys. 
+     * The adding sequence of each sortKey corresponds to the major-to-minor 
+     * ordering.  Validation is done against this sortMode if defined in constructor; 
+     * i.e. this method throws an exception when adding a sort key that does not
+     * conform to a defined sortMode of this <code>SortSpecification</code>.
+     * @param column    identifier of the result set column to apply dynamic sorting
+     *                      on.  The specified column should be one of the columns
+     *                      retrieved in a result set
+     * @param sortDirection constant value for the sort direction; must be one of the
+     *                      constant values: <code>ORDERING_ASC</code>, <code>ORDERING_DESC</code>
+     * @param nullOrdering  constant value for the ordering of null values vs. non-null values 
+     *                      in the sort order; must be one of the constant values: 
+     *                      <code>NULL_ORDERING_NONE</code>, 
+     *                      <code>NULL_ORDERING_FIRST</code>,
+     *                      <code>NULL_ORDERING_LAST</code>
+     * @throws NullPointerException if <code>column</code> is null.
+     * @throws IllegalArgumentException if specified column is invalid; or if specified
+     *                                  sortDirection or nullOrdering  has invalid value.
+     * @throws IllegalStateException    if the sortMode of this <code>SortSpecification</code> 
+     *                                  is <code>IDataSetMetaData.sortModeNone</code>, 
+     *                                  or <code>IDataSetMetaData.sortModeSingleColumn</code>, 
+     *                                  and a sort key is already associated; 
+     *                                  or if the sortMode is 
+     *                                  <code>IDataSetMetaData.sortModeSingleOrder</code> 
+     *                                  and the sort direction does not match existing directions
+     * @see #addSortKey(ColumnIdentifier, int)
+	 */
+	public void addSortKey( ColumnIdentifier column, int sortDirection, int nullOrdering )
+	{
+		if( column == null )
+			throw new NullPointerException( 
+					Messages.sortSpec_NULL_COLUMN_NAME_SPECIFIED );
+		
+		if( ! column.isValid() )
+			throw new IllegalArgumentException( 
+					Messages.bind( Messages.sortSpec_INVALID_COLUMN_NAME_SPECIFIED,
+									column ) );
+		
+		if( sortDirection != ORDERING_ASC && sortDirection != ORDERING_DESC )
+			throw new IllegalArgumentException( 
+					Messages.bind( Messages.sortSpec_INVALID_SORT_ORDER_SPECIFIED,
+									new Integer( sortDirection ) ));
+		
+		if( nullOrdering < NULL_ORDERING_NONE || nullOrdering > NULL_ORDERING_LAST )
+            throw new IllegalArgumentException( 
+                    Messages.bind( Messages.sortSpec_INVALID_NULL_ORDERING,
+                                    new Integer( nullOrdering ) ));
+		    
+		if( m_sortMode == IDataSetMetaData.sortModeNone )
+			throw new IllegalStateException( 
+					Messages.sortSpec_NO_DYNAMIC_SORT_KEY_FOR_SORTMODENONE );
+		
+		if( m_sortMode == IDataSetMetaData.sortModeSingleColumn &&
+			getSortKeyCountImpl() > 0 )
+			throw new IllegalStateException( 
+					Messages.sortSpec_ONE_SORTCOLUMN_FOR_SINGLE_COLUMN_MODE );
+		
+		if( m_sortMode == IDataSetMetaData.sortModeSingleOrder &&
+			getSortKeyCountImpl() > 0 )
+		{
+			// enforce that all sortOrders are the same
+			SortKey sortKey = (SortKey) m_sortKeys.get( 0 );
+			if( sortKey.getSortDirection() != sortDirection )
+				throw new IllegalStateException( 
+					Messages.sortSpec_ONE_SORTORDER_FOR_SINGLE_ORDER_MODE );
+		}
+		
+		SortKey sortKey = new SortKey( column, sortDirection, nullOrdering );
+		m_sortKeys.add( sortKey );
+	}
+	
+	/**
+	 * Returns the sort mode of this <code>SortSpecification</code> object.
+	 * @return	the sort mode of this <code>SortSpecification</code>; one of 
+	 * 			<code>IDataSetMetaData.sortModeNone</code>, 
+	 * 			<code>IDataSetMetaData.sortModeSingleOrder</code>,
+	 * 			<code>IDataSetMetaData.sortModeColumnOrder</code>,
+	 * 			<code>IDataSetMetaData.sortModeSingleColumn</code>.
+	 */
+	public int getSortMode()
+	{
+	    if( m_sortMode != SORT_MODE_UNDEFINED )
+	        return m_sortMode;
+
+        // if sortMode is undefined, derive the mode based on existing sort keys
+        int numSortKeys = getSortKeyCount();
+        if( numSortKeys == 0 )
+            return IDataSetMetaData.sortModeNone;
+        if( numSortKeys == 1 )
+            return IDataSetMetaData. sortModeSingleColumn;
+        
+        // check if multiple sort keys have different sort direction
+        int firstKeySortDirection = getSortDirection( 1 );
+        for( int i=2; i <= numSortKeys; i++ )
+        {
+            if( firstKeySortDirection != getSortDirection(i) )
+                return IDataSetMetaData.sortModeColumnOrder;
+        }
+        
+        // all sort keys have the same sort direction
+        return IDataSetMetaData.sortModeSingleOrder;
+	}
+	
+	/**
+	 * Returns the number of sort keys associated with this <code>SortSpecification</code> 
+	 * object.
+	 * @return	the number of sort keys associated with this 
+	 * 			<code>SortSpecification</code> object.
+	 */
+	public int getSortKeyCount()
+	{
+		return getSortKeyCountImpl();
+	}
+	
+	protected int getSortKeyCountImpl()
+	{
+		return m_sortKeys.size();
+	}
+	
+	/**
+	 * Returns the result set column identifier of the sort key 
+     * at the specified position.
+	 * @param pos       sequence position of the sort key (1-based).
+     * @return          the name of the result set column for the specified sort key.
+     * @throws          IndexOutOfBoundsException if <code>pos</code> is out of range 
+     *                  (pos < 1 || pos > getSortKeyCount()).
+	 */
+	public ColumnIdentifier getSortColumn( int pos )
+	{
+        ColumnIdentifier column = getSortKey( pos ).getColumn();
+        return ( column != null && column.isValid() ) ? column : null;
+	}
+	
+	/**
+	 * Returns the sort direction of the sort key at the specified position.
+	 * @param pos		sequence position of the sort key (1-based)
+	 * @return			constant value of the sort direction for the specified sort key
+	 * @throws 			IndexOutOfBoundsException if <code>pos</code> is out of range 
+	 * 					(pos < 1 || pos > getSortKeyCount()).
+	 */
+	public int getSortDirection( int pos )
+	{
+		return getSortKey( pos ).getSortDirection();
+	}
+
+	/**
+     * Returns the null ordering of the sort key at the specified position.
+     * @param pos       sequence position of the sort key (1-based)
+     * @return          constant value of the null ordering type for the specified sort key
+     * @throws          IndexOutOfBoundsException if <code>pos</code> is out of range 
+     *                  (pos < 1 || pos > getSortKeyCount()).
+	 */
+    public int getNullOrdering( int pos )
+    {
+        return getSortKey( pos ).getNullOrdering();
+    }
+
+    protected SortKey getSortKey( int pos ) throws IndexOutOfBoundsException
+    {
+        validatePosition( pos );
+        
+        // maps from 1-based to 0-based collection index.
+        return (SortKey) m_sortKeys.get( pos - 1 );
+    }
+    
+	protected void validatePosition( int pos )
+	{
+		int count = getSortKeyCountImpl();
+		if( pos < 1 || pos > count )
+			throw new IndexOutOfBoundsException( 
+                    Messages.bind( Messages.sortSpec_INDEX_OUT_OF_BOUND,
+                            new Integer( pos ), new Integer( count ) ));
+	}
+	
+	/**
+	 * Returns an array of all column identifiers for the sort keys.
+	 * @return	an array of all column identifiers for the sort keys;
+	 *          may be an empty array if no sort keys are associated 
+	 * 			with this <code>SortSpecification</code>
+	 */
+	public ColumnIdentifier[] getSortColumns()
+	{
+		int size = getSortKeyCountImpl();
+		ColumnIdentifier[] sortColumns = new ColumnIdentifier[ size ];
+		
+		for( int i = 0; i < size; i++ )
+		{
+			SortKey sortKey = (SortKey) m_sortKeys.get( i );
+			ColumnIdentifier column = sortKey.getColumn();
+			sortColumns[i] = column;
+		}
+
+		return sortColumns;
+	}
+	
+	/**
+	 * Returns the sort direction for the sort keys of a <code>sortModeSingleOrder</code>
+	 * <code>SortSpecification</code> object.
+	 * @return	the sort direction for the sort keys of a <code>sortModeSingleOrder</code> 
+	 * 			<code>SortSpecification</code> object; the default value, <code>sortAsc</code>, 
+	 * 			if no sort keys are associated with this <code>SortSpecification</code>.
+	 * @throws IllegalStateException	if this <code>SortSpecification</code>'s sort 
+	 * 									mode is not <code>sortModeSingleOrder</code>.
+	 */
+	public int getSortDirection()
+	{
+		if( getSortMode() != IDataSetMetaData.sortModeSingleOrder )
+			throw new IllegalStateException( 
+					Messages.sortSpec_ONLY_IN_SINGLE_ORDER_MODE );
+		
+		// if there are no sortKeys associated with this SortSpecification, then it does not
+		// matter what we return here.  Since the caller will get an empty string array
+		// from getSortColumns(), it would not know which columns to apply this value for.
+		if( getSortKeyCountImpl() == 0 )
+			return ORDERING_ASC;
+		
+		// since all the sort directions will be the same (enforced by addSortKey()),
+		// we could just return the sort direction of any of our sort keys.
+		SortKey sortKey = (SortKey) m_sortKeys.get( 0 );
+		return sortKey.getSortDirection();
+	}
+	
+	/* (non-Javadoc)
+	 * @see java.lang.Object#toString()
+	 */
+	public String toString()
+	{
+		// override default toString() for convenient debugging and logging
+        StringBuffer buffer = new StringBuffer( SortSpecification.class.getSimpleName() + " [" ); //$NON-NLS-1$
+        
+        buffer.append( "Sort Mode: " + getSortModeLiteral( getSortMode() ));  //$NON-NLS-1$
+        buffer.append( "\nSort Keys: "); //$NON-NLS-1$
+        if( m_sortKeys != null )
+        {
+            for( SortKey sortKey : m_sortKeys )
+                buffer.append( LOG_NEWLINE_CHAR + sortKey );
+        }
+        
+        buffer.append( "]" ); //$NON-NLS-1$
+        return buffer.toString();
+	}
+	
+	/* 
+	 * A helper function for converting a sortOrder to its string representation.
+	 */	
+	private static String getSortDirectionLiteral( int sortOrder )
+	{
+		switch( sortOrder )
+		{
+			case ORDERING_ASC:
+				return "Ascending"; //$NON-NLS-1$
+				
+			case ORDERING_DESC:
+				return "Descending"; //$NON-NLS-1$
+				
+			default:
+				// addSortKey() validation should ensure correct value
+				return ""; //$NON-NLS-1$
+		}
+	}
+
+	private static String getNullOrderingLiteral( int nullOrdering )
+	{
+	    switch( nullOrdering )
+	    {
+            case NULL_ORDERING_FIRST:   return "Nulls_First"; //$NON-NLS-1$
+            case NULL_ORDERING_LAST:   return "Nulls_Last"; //$NON-NLS-1$
+            case NULL_ORDERING_NONE:
+	        default:                   return "No_Null_Ordering"; //$NON-NLS-1$
+	    }
+	}
+	
+	/*
+	 * A helper function for converting a sortMode to its string representation.
+	 */ 	
+	private static String getSortModeLiteral( int sortMode )
+	{
+		switch( sortMode )
+		{
+			case IDataSetMetaData.sortModeNone:
+				return "sortModeNone"; //$NON-NLS-1$
+			
+			case IDataSetMetaData.sortModeSingleOrder:
+				return "sortModeSingleOrder"; //$NON-NLS-1$
+			
+			case IDataSetMetaData.sortModeColumnOrder:
+				return "sortModeColumnOrder"; //$NON-NLS-1$
+			
+			case IDataSetMetaData.sortModeSingleColumn:
+				return "sortModeSingleColumn"; //$NON-NLS-1$
+			
+			case SORT_MODE_UNDEFINED:
+			    return "sortModeUndefined"; //$NON-NLS-1$
+			default:
+				// constructor checks ensure correct values
+				return ""; //$NON-NLS-1$
+		}
+	}
+
+    /**
+     * Validates this expression in the specified context. 
+     * @param context   context for validation; may be null which would limit the scope of validation
+     * @throws OdaException if validation failed. The concrete reason is 
+     *          defined by the subclass implementing this method.
+     */
+    public void validate( ValidationContext context ) 
+        throws OdaException
+    {
+        try
+        {
+            // pass this to custom validator, if exists, for overall validation
+            if( context != null && context.getValidator() != null )
+                context.getValidator().validate( this, context );
+        }
+        catch( OdaException ex )
+        {
+            // log the exception before re-throwing it to the caller
+            QuerySpecificationHelper.logValidationException( sm_className, ex );
+            throw ex;
+        }
+    }
+
+	/*
+	 * A simple private helper class that stores the state of 
+	 * each sort key.
+	 */
+	private static final class SortKey
+	{
+		private ColumnIdentifier m_column;
+		private int m_sortDirection;
+		private int m_nullOrdering;
+		
+		// the arguments are to be validated by SortSpecification class
+		private SortKey( ColumnIdentifier column, int sortDirection, int nullOrdering )
+		{
+			m_column = column;
+			m_sortDirection = sortDirection;
+			m_nullOrdering = nullOrdering;
+		}
+		
+		private ColumnIdentifier getColumn()
+		{
+		    return m_column;
+		}
+
+		private int getSortDirection()
+		{
+			return m_sortDirection;
+		}
+		
+		private int getNullOrdering()
+		{
+		    return m_nullOrdering;
+		}
+		
+		public String toString()
+		{
+			return "{" + m_column + ", " +  //$NON-NLS-1$ //$NON-NLS-2$
+				   getSortDirectionLiteral( m_sortDirection ) + ", " + //$NON-NLS-1$
+                   getNullOrderingLiteral( m_nullOrdering ) + "}"; //$NON-NLS-1$
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/filter/AndExpression.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/filter/AndExpression.java
new file mode 100644
index 0000000..96d4463
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/filter/AndExpression.java
@@ -0,0 +1,51 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.result.filter;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.spec.ValidationContext;
+
+/**
+ * A runtime composite filter expression whose child expressions are combined by the And boolean operator.  
+ * This composite expression is evaluated to be true only if all its child expressions are evaluated as true.  
+ * @since 3.2 (DTP 1.7)
+ */
+public class AndExpression extends CompositeExpression
+{
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.result.filter.CompositeExpression#validateChildren(org.eclipse.datatools.connectivity.oda.spec.ValidationContext)
+     */
+    @Override
+    protected void validateChildren( ValidationContext context )
+            throws OdaException
+    {
+        validateMinElements( 2 );
+        super.validateChildren( context, true );
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    public boolean equals( final Object object )
+    {
+        if( !(object instanceof AndExpression) )
+            return false;
+
+        final AndExpression that = (AndExpression) object;
+        return equals( this.getExpressions(), that.getExpressions() );
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/filter/AtomicExpression.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/filter/AtomicExpression.java
new file mode 100644
index 0000000..6b051ba
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/filter/AtomicExpression.java
@@ -0,0 +1,117 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.result.filter;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionArguments;
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionVariable;
+import org.eclipse.datatools.connectivity.oda.spec.ValidationContext;
+import org.eclipse.datatools.connectivity.oda.spec.result.FilterExpression;
+import org.eclipse.datatools.connectivity.oda.spec.util.ValidatorUtil;
+
+/**
+ * The abstract base class for all basic, indivisible unit of filter expressions
+ * that can be evaluated by itself.
+ * @since 3.2 (DTP 1.7)
+ */
+public abstract class AtomicExpression extends FilterExpression
+{
+    private ExpressionVariable m_variable;      // 0..1; optional
+    private ExpressionArguments m_args;         // 1; an instance may contain no values
+    
+    protected AtomicExpression( ExpressionVariable variable, ExpressionArguments args )
+    {
+        setVariable( variable );
+        setArguments( args );
+    }
+    
+    /**
+     * Returns the expression variable.
+     * @return may be null
+     */
+    public ExpressionVariable getVariable()
+    {
+        return m_variable;
+    }
+
+    /**
+     * @param variable the expression variable to set
+     */
+    public void setVariable( ExpressionVariable variable )
+    {
+        m_variable = variable;
+    }
+
+    /**
+     * Returns the expression arguments.
+     * @return 
+     */
+    public ExpressionArguments getArguments()
+    {
+        if( m_args == null )
+            m_args = new ExpressionArguments( null );     // default argument with no value
+        return m_args;
+    }
+
+    /**
+     * @param args the arguments to set
+     */
+    public void setArguments( ExpressionArguments args )
+    {
+        m_args = args;
+    }
+
+    /**
+     * Indicates whether this expression can be optional and skipped in a filter specification if 
+     * all its expected argument values are null.  
+     * Default value is false if none is specified in the extension.
+     * @return true if this expression can be skipped when no argument values are available; 
+     *          false otherwise 
+     */
+    public boolean isOptionable()
+    {
+        return false;   // an optional expression needs special handling and is not the default behavior
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.result.FilterExpression#validate(org.eclipse.datatools.connectivity.oda.spec.ValidationContext)
+     */
+    public void validate( ValidationContext context ) throws OdaException
+    {
+        try
+        {
+            super.validate( context );
+        }
+        catch( OdaException ex )
+        {
+            throw ValidatorUtil.newFilterExprException( this, ex );
+        }                
+    }
+
+    /* (non-Javadoc)
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString()
+    {
+        StringBuffer buffer = new StringBuffer( getName() + " -> \n\t" ); //$NON-NLS-1$
+        buffer.append( m_variable );
+        buffer.append( ";\n\t" ); //$NON-NLS-1$
+        buffer.append( m_args );
+        return buffer.toString();
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/filter/CompositeExpression.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/filter/CompositeExpression.java
new file mode 100644
index 0000000..445a876
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/filter/CompositeExpression.java
@@ -0,0 +1,191 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.result.filter;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.spec.ValidationContext;
+import org.eclipse.datatools.connectivity.oda.spec.result.FilterExpression;
+import org.eclipse.datatools.connectivity.oda.spec.util.ValidatorUtil;
+
+/**
+ * The abstract base class for all composites of one or multiple child filter expressions.  
+ * Its child expressions are ordered; their relationships are defined by its concrete extended classes.
+ * @since 3.2 (DTP 1.7)
+ */
+public abstract class CompositeExpression extends FilterExpression
+{
+    private static final FilterExpression[] EMPTY_ARRAY = new FilterExpression[0];
+
+    protected List<FilterExpression> m_expressions;
+
+    /**
+     * Appends the specified FilterExpression to its collection of child expressions.
+     * @param expression    any type of filter expression
+     * @return  this
+     */
+    public CompositeExpression add( FilterExpression expression )
+    {
+        if( expression == null )
+            throw new IllegalArgumentException( "null FilterExpression" ); //$NON-NLS-1$
+        if( m_expressions == null )
+            m_expressions = new ArrayList<FilterExpression>( 2 );
+        m_expressions.add( expression );
+        return this;
+    }
+
+    /**
+     * Returns the number of child expressions in this composite.
+     * @return  the number of child expressions
+     */
+    public int childCount()
+    {
+        return ( m_expressions == null ) ? 0 : m_expressions.size();
+    }
+    
+    /**
+     * Returns the collection of child expressions in this composite.
+     * @return  an array of child {@link FilterExpression}; an empty array is returned if no child expression is set
+     */
+    public FilterExpression[] getChildren()
+    {
+        if( m_expressions == null )
+            return EMPTY_ARRAY;
+        return (FilterExpression[]) m_expressions
+                .toArray( new FilterExpression[m_expressions.size()] );
+    }
+
+    protected List<FilterExpression> getExpressions()
+    {
+        if( m_expressions == null )
+            m_expressions = new ArrayList<FilterExpression>( 2 );
+        return m_expressions;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.result.FilterExpression#validateSyntax(org.eclipse.datatools.connectivity.oda.spec.ValidationContext)
+     */
+    @Override
+    public void validateSyntax( ValidationContext context ) throws OdaException
+    {
+        // syntactic validation of each of its children individually, if exists
+        validateChildren( context );
+    }
+
+    /**
+     * Iteratively walks thru each nested child node to validate individually.
+     * Subclass implementation would determine its scope of validation and call 
+     * {@link #validateChildren(ValidationContext, boolean)} as appropriate.
+     */
+    protected abstract void validateChildren( ValidationContext context ) 
+        throws OdaException;
+    
+    /**
+     * Iteratively walks thru each nested child node to validate individually.
+     * Note that any child node that is a CustomExpression will also be validated 
+     * by custom IValidator#validateSyntax implementation.
+     * @param context   validation context
+     * @param validateAll   indicates whether to continue validate all children regardless if 
+     *           one is found to have validation exception.  True to validate all children and
+     *           append all validation exceptions in the thrown OdaException chain; 
+     *           false otherwise and throws an OdaException at the first detection
+     * @throws OdaException
+     */
+    protected void validateChildren( ValidationContext context, boolean validateAll ) 
+        throws OdaException
+    {
+        if( m_expressions == null )
+            return;     // no children to validate
+
+        OdaException rootEx = null;
+        for( Iterator<FilterExpression> iter = m_expressions.iterator(); iter.hasNext(); )
+        {
+            FilterExpression childExpr = iter.next();
+            try
+            {
+                if( childExpr instanceof CompositeExpression )
+                    ((CompositeExpression)childExpr).validateChildren( context );
+                else
+                    childExpr.validateSyntax( context );
+            }
+            catch( OdaException ex )
+            {
+                if( ! validateAll )
+                    throw ex;
+                
+                // append exception to chain, and continue iterate next child expression
+                rootEx = ValidatorUtil.addException( rootEx, ex );
+            }
+        }  
+        
+        if( rootEx != null )
+            throw rootEx;
+    }
+
+    /**
+     * Validates that this has the specified minimum number of child expressions.
+     * @param minimumChildren   minimum number of child expressions expected
+     * @throws OdaException if validation failed
+     */
+    protected void validateMinElements( int minimumChildren ) throws OdaException
+    {
+        if( getExpressions().size() < minimumChildren )
+            throw ValidatorUtil.newFilterExprException( Messages.bind( Messages.querySpec_MISSING_COMPOSITE_MIN_CHILDREN,
+                    getName(), Integer.valueOf( minimumChildren ) ), this );
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.result.FilterExpression#isNegatable()
+     */
+    @Override
+    public boolean isNegatable()
+    {
+        return true;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString()
+    {
+        StringBuffer buffer = new StringBuffer( getName() + " [" ); //$NON-NLS-1$
+        
+        if( m_expressions == null )
+            buffer.append( m_expressions );
+        else if( m_expressions.size() == 1 )
+        {
+            buffer.append( "\n     " + m_expressions.get(0) ); //$NON-NLS-1$
+        }
+        else
+        {
+            int i=0;
+            for( FilterExpression childExpr : m_expressions )
+            {
+                buffer.append( "\n " + (++i) + ": " + childExpr ); //$NON-NLS-1$ //$NON-NLS-2$
+            }
+        }
+        
+        buffer.append( "]" ); //$NON-NLS-1$
+        return buffer.toString();
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/filter/CustomExpression.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/filter/CustomExpression.java
new file mode 100644
index 0000000..42e4c3b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/filter/CustomExpression.java
@@ -0,0 +1,335 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.result.filter;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExecutableExtension;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionArguments;
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionVariable;
+import org.eclipse.datatools.connectivity.oda.spec.IValidator;
+import org.eclipse.datatools.connectivity.oda.spec.ValidationContext;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.FilterExpressionDefinition;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.ResultExtensionExplorer;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.SupportedDataSetType;
+import org.eclipse.datatools.connectivity.oda.spec.util.ValidatorUtil;
+
+/**
+ * Represents an instance of custom filter expression contributed by an extension of
+ * the org.eclipse.datatools.connectivity.oda.dynamicResultSet extension point.
+ * @since 3.2 (DTP 1.7)
+ */
+public class CustomExpression extends AtomicExpression implements IExecutableExtension
+{
+    private static final String QUALIFIER_SEPARATOR = "."; //$NON-NLS-1$
+    private String m_id;
+    private String m_extensionId;
+    private Map<String,Object> m_customData;
+    private FilterExpressionDefinition m_definition;  // expects 1-n-only-1 associated FilterExpressionDefinition
+
+    /*
+     * Base class constructor.
+     * Use ExpressionFactory#createCustomExpression to create a custom filter expression instance.
+     */
+    protected CustomExpression( String extensionId, String id )
+    {
+        this( extensionId, id, null, null );
+    }
+    
+    /*
+     * Base class constructor.
+     * Use ExpressionFactory#createCustomExpression to create a custom filter expression instance.
+     */
+    protected CustomExpression( String extensionId, String id, ExpressionVariable variable, ExpressionArguments args )
+    {
+        super( variable, args );
+        m_extensionId = extensionId;
+        m_id = id;
+    }
+    
+    /*
+     * Constructor for use by org.eclipse.core.runtime.IExecutableExtension#createExecutableExtension
+     * to instantiate an extended class.
+     * Use ExpressionFactory#createCustomExpression to create a custom filter expression instance.
+     */
+    protected CustomExpression()
+    {
+        super( null, null );
+        // the actual extension id and expression id will be filled by #setInitializationData
+        // when instantiated by ExpressionFactory
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.core.runtime.IExecutableExtension#setInitializationData(org.eclipse.core.runtime.IConfigurationElement, java.lang.String, java.lang.Object)
+     */
+    public void setInitializationData( IConfigurationElement exprElement,
+            String propertyName, Object data ) throws CoreException
+    {
+        m_extensionId = exprElement.getDeclaringExtension().getUniqueIdentifier();
+        try
+        {
+            m_id = FilterExpressionDefinition.getIdAttributeValue( exprElement );
+        }
+        catch( OdaException ex )
+        {
+            throw new CoreException( new Status( IStatus.ERROR, exprElement.getContributor().getName(), ex.getLocalizedMessage() ) );
+        }
+    }
+
+    /**
+     * Gets the expression id.  It is unique within the contributing extension.
+     * @return the expression id
+     */
+    public String getId()
+    {
+        return m_id;
+    }
+    
+    /**
+     * Gets the unique id of the ODA dynamicResultSet extension that declares this custom expression type.
+     * @return unique id of declaring extension
+     */
+    public String getDeclaringExtensionId()
+    {
+        return m_extensionId;
+    }
+ 
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.result.FilterExpression#getQualifiedId()
+     */
+    public String getQualifiedId()
+    {
+        return m_extensionId + QUALIFIER_SEPARATOR + m_id;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.result.FilterExpression#getName()
+     */
+    @Override
+    public String getName()
+    {
+        FilterExpressionDefinition defn = getDefinition();
+        if( defn == null )
+            return getQualifiedId();
+        return m_extensionId + QUALIFIER_SEPARATOR + defn.getDisplayName();
+    }
+
+    /**
+     * Indicates whether this expression can be applied to the specified data set type within the data source type.
+     * @param odaDataSourceId   id of an ODA data source extension
+     * @param odaDataSetId      id of an ODA data set defined within the data source extension
+     * @return  true if this can be applied to the specified data set type; false otherwise
+     */
+    public boolean supportsDataSetType( String odaDataSourceId, String odaDataSetId )
+    {
+        FilterExpressionDefinition defn = getDefinition();
+        if( defn == null )
+            return false;
+        
+        return defn.supportsDataSetType( odaDataSourceId, odaDataSetId );
+    }
+    
+    /**
+     * Indicates whether this expression can be applied to the specified data set type.
+     * @param dataSetType   an instance of {@link SupportedDataSetType} 
+     * @return  true if this can be applied to the specified ODA data set type; false otherwise
+     */
+    public boolean supportsDataSetType( SupportedDataSetType dataSetType )
+    {
+        if( dataSetType == null )
+            return false;
+        return supportsDataSetType( dataSetType.getOdaDataSourceId(), dataSetType.getOdaDataSetId() );
+    }
+    
+    /**
+     * Gets the value of an extension-defined property of the specified name.
+     * An extension contributor may have arbitrary objects associated with an expression. 
+     * @param key   the name of property
+     * @return      the value of the named property, or null if it has not been set
+     */
+    public Object getData( String key )
+    {
+        if( m_customData == null )
+            return null;
+        return m_customData.get( key );
+    }
+
+    /**
+     * Sets the value of an extension-defined property of the specified name.
+     * An extension contributor may use this to associate arbitrary objects with an expression.
+     * @param key   the name of property
+     * @param value the new value of the named property
+     */
+    public void setData( String key, Object value )
+    {
+        if( m_customData == null )
+            m_customData = new HashMap<String,Object>();
+        m_customData.put( key, value );
+    }
+    
+    /**
+     * Gets the definition of this expression's capabilities and metadata, as registered by the provider 
+     * in its extension of the <i>org.eclipse.datatools.connectivity.oda.dynamicResultSet</i> extension point.
+     * @return  definition of this custom filter expression
+     */
+    public FilterExpressionDefinition getDefinition()
+    {
+        // obtain from extension manifest explorer by extensionId + id
+        if( m_definition == null )
+        {
+            try
+            {
+                m_definition = ResultExtensionExplorer.getInstance()
+                    .getExtensionFilterDefinition( getDeclaringExtensionId(), getId() );
+            }
+            catch( OdaException ex )
+            {
+                // TODO log warning
+                return null;
+            }
+            catch( IllegalArgumentException argEx )
+            {
+                // TODO log warning
+                return null;
+            }
+        }
+        return m_definition;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.result.FilterExpression#validateSyntax(org.eclipse.datatools.connectivity.oda.spec.ValidationContext)
+     */
+    @Override
+    public void validateSyntax( ValidationContext context ) throws OdaException
+    {
+        try
+        {
+            FilterExpressionDefinition defn = getDefinition();
+            if( defn == null )
+                throw newFilterExprException( Messages.bind( Messages.querySpec_NON_DEFINED_CUSTOM_FILTER, getName() ) );
+            
+            validateSyntax( context, defn );
+
+            // pass to custom validator, if exists, for further validation
+            IValidator customValidator = getValidator( context, defn );
+            if( customValidator != null )
+                customValidator.validateSyntax( this, context );
+        }
+        catch( OdaException ex )
+        {
+            throw ValidatorUtil.newFilterExprException( this, ex );
+        }                
+    }
+
+    /**
+     * Validates that this expression meets the restriction specified
+     * by the expression definition. 
+     * @param context
+     * @param defn
+     * @throws OdaException  if validation fails
+     */
+    protected void validateSyntax( ValidationContext context, FilterExpressionDefinition defn ) throws OdaException
+    {
+        assert( defn != null );
+        
+        // ODA filter spec allows for 0..1 associated ExpressionVariable; up to driver to add validation
+        // on the type of variable that it supports
+
+        // validates the associated arguments
+        validateExpressionArguments( context, defn );
+    }
+    
+    /**
+     * Validates the number of argument values matches the range of arguments defined for the expression
+     * @param context
+     * @param defn
+     * @throws OdaException  if validation fails
+     */
+    protected void validateExpressionArguments( ValidationContext context, FilterExpressionDefinition defn ) 
+        throws OdaException
+    {
+        int numArgs = getArguments().valueCount();
+
+        int minArgs = defn.getMinArguments().intValue();
+        if( numArgs < minArgs )
+            throw newFilterExprException( 
+                    Messages.bind( Messages.querySpec_CUSTOM_FILTER_LESS_THAN_MIN_ARGS,
+                                new Object[]{ getName(), Integer.valueOf(numArgs), Integer.valueOf(minArgs) } ));
+
+        if( ! defn.supportsUnboundedMaxArguments() ) // not unbounded upper limit, validate max arguments
+        {
+            int maxArgs = defn.getMaxArguments().intValue();
+            if( numArgs > maxArgs )
+                throw newFilterExprException( 
+                    Messages.bind( Messages.querySpec_CUSTOM_FILTER_EXCEED_MAX_ARGS, 
+                                new Object[]{ getName(), Integer.valueOf(numArgs), Integer.valueOf(maxArgs) } ) );
+        }       
+    }
+    
+    protected IValidator getValidator( ValidationContext context, FilterExpressionDefinition defn )
+    {
+        // try use the validator in the context, if available
+        if( context != null && context.getValidator() != null )
+            return context.getValidator();
+
+        // use validator in the definition, if specified
+        try
+        {
+            if( defn != null )
+                return defn.getValidator();
+        }
+        catch( OdaException ex )
+        {
+            // TODO log warning
+        }
+
+        return null;
+    }
+
+    protected OdaException newFilterExprException( String message )
+    {
+        return ValidatorUtil.newFilterExprException( message, this );
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.result.FilterExpression#isNegatable()
+     */
+    @Override
+    public boolean isNegatable()
+    {
+        FilterExpressionDefinition defn = getDefinition();
+        return ( defn == null ) ? false : defn.isNegatable();   // default value is false
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.result.filter.AtomicExpression#isOptionable()
+     */
+    public boolean isOptionable()
+    {
+        FilterExpressionDefinition defn = getDefinition();
+        return ( defn == null ) ? super.isOptionable() : defn.isOptionable();
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/filter/InternalFilterFactory.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/filter/InternalFilterFactory.java
new file mode 100644
index 0000000..519f5ad
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/filter/InternalFilterFactory.java
@@ -0,0 +1,35 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.result.filter;
+
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionArguments;
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionVariable;
+
+/**
+ *  Internal factory of package classes. 
+ */
+public class InternalFilterFactory
+{
+    public static CustomExpression createCustomFilter( String extensionId, String id )
+    {
+        return new CustomExpression( extensionId, id );
+    }
+
+    public static CustomExpression createCustomFilter( String extensionId, String id, ExpressionVariable variable, ExpressionArguments args )
+    {
+        return new CustomExpression( extensionId, id, variable, args );
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/filter/NotExpression.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/filter/NotExpression.java
new file mode 100644
index 0000000..00282ca
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/filter/NotExpression.java
@@ -0,0 +1,98 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.result.filter;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.spec.ValidationContext;
+import org.eclipse.datatools.connectivity.oda.spec.result.FilterExpression;
+import org.eclipse.datatools.connectivity.oda.spec.util.ValidatorUtil;
+
+/**
+ * A negated runtime filter expression.
+ * @since 3.2 (DTP 1.7)
+ */
+public class NotExpression extends CompositeExpression
+{
+    public NotExpression( FilterExpression expression ) 
+    {
+        Assert.isNotNull( expression );
+        super.add( expression );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.result.filter.CompositeExpression#add(org.eclipse.datatools.connectivity.oda.spec.result.FilterExpression)
+     */
+    @Override
+    public CompositeExpression add( FilterExpression expression )
+    {
+        throw new IllegalStateException( Messages.bind( Messages.querySpec_MAX_ONE_NEGATING_EXPR, 
+                getName() ));
+    }
+
+    /**
+     * Returns the filter expression to be negated.
+     * @return  any type of filter expression
+     */
+    public FilterExpression getNegatingExpression()
+    {
+        return ( childCount() == 0 ) ?
+                    null :
+                    this.getExpressions().get( 0 );
+    }
+   
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.result.filter.CompositeExpression#validateChildren(org.eclipse.datatools.connectivity.oda.spec.ValidationContext)
+     */
+    @Override
+    protected void validateChildren( ValidationContext context )
+            throws OdaException
+    {
+        try
+        {
+            validateMinElements( 1 );
+
+            // validate the child expression
+            FilterExpression negatingExpr = getNegatingExpression();
+            if( ! negatingExpr.isNegatable() )
+            {
+                throw ValidatorUtil.newOdaException( Messages.bind( Messages.querySpec_NOT_EXPR_INCOMPATIBLE,
+                            negatingExpr.getName(), getName() ), 
+                        negatingExpr.getQualifiedId() );
+            }
+
+            super.validateChildren( context, false );
+        }
+        catch( OdaException ex )
+        {
+            // set this NotExpression as a root cause of exception
+            throw ValidatorUtil.newFilterExprException( this, ex );
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    public boolean equals( final Object object ) 
+    {
+        if( !(object instanceof NotExpression) )
+            return false;
+
+        final NotExpression that = (NotExpression) object;
+        return getNegatingExpression().equals( that.getNegatingExpression() );
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/filter/OrExpression.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/filter/OrExpression.java
new file mode 100644
index 0000000..8ba1997
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/filter/OrExpression.java
@@ -0,0 +1,60 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.result.filter;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.spec.ValidationContext;
+import org.eclipse.datatools.connectivity.oda.spec.util.ValidatorUtil;
+
+/**
+ * A runtime composite filter expression whose child expressions are combined by the Or boolean operator.  
+ * This composite expression is evaluated to be true if any of its child expressions is evaluated as true.  
+ * @since 3.2 (DTP 1.7)
+ */
+public class OrExpression extends CompositeExpression
+{
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.result.filter.CompositeExpression#validateChildren(org.eclipse.datatools.connectivity.oda.spec.ValidationContext)
+     */
+    @Override
+    protected void validateChildren( ValidationContext context )
+            throws OdaException
+    {
+        try
+        {
+            validateMinElements( 2 );
+            super.validateChildren( context, false );
+        }
+        catch( OdaException ex )
+        {
+            // set this OrExpression as a root cause of exception if any child is invalid
+            throw ValidatorUtil.newFilterExprException( this, ex );
+        }
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    public boolean equals( final Object object )
+    {
+        if( !(object instanceof OrExpression) )
+            return false;
+
+        final OrExpression that = (OrExpression) object;
+        return equals( this.getExpressions(), that.getExpressions() );
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/filter/package.html b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/filter/package.html
new file mode 100644
index 0000000..dc241a7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/filter/package.html
@@ -0,0 +1,31 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2009, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+
+Defines the concrete filter expressions for use in the Open Data Access (ODA) 
+result set filtering specification.
+<p>
+
+<!-- Put @see and @since tags down here. -->
+@since 3.3 (DTP 1.8)
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/package.html b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/package.html
new file mode 100644
index 0000000..2eaf669
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/result/package.html
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2009, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+
+Defines the result set specification of the Open Data Access (ODA) dynamicResultSet extension point.
+<p>
+
+<!-- Put @see and @since tags down here. -->
+@since 3.3 (DTP 1.8)
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/util/ExpressionFactory.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/util/ExpressionFactory.java
new file mode 100644
index 0000000..0c32beb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/util/ExpressionFactory.java
@@ -0,0 +1,193 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.util;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionArguments;
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionVariable;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.AggregateDefinition;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.CombinedExpressionOperatorDefinition;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.FunctionExpressionDefinition;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.FilterExpressionDefinition;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.ResultExtensionExplorer;
+import org.eclipse.datatools.connectivity.oda.spec.result.CustomAggregate;
+import org.eclipse.datatools.connectivity.oda.spec.result.filter.CustomExpression;
+import org.eclipse.datatools.connectivity.oda.spec.valueexpr.CombinedValueExpressionOperator;
+import org.eclipse.datatools.connectivity.oda.spec.valueexpr.CustomFunction;
+
+/**
+ * Factory of expression instances for use in a 
+ * {@link org.eclipse.datatools.connectivity.oda.spec.QuerySpecification}.
+ * <br>Provides convenient methods to create expression instances.
+ * @since 3.3 (DTP 1.8)
+ */
+public class ExpressionFactory
+{
+    private static final String DOT_SEPARATOR = "."; //$NON-NLS-1$
+    
+    /**
+     * Creates a custom filter expression instance of the specified filter expression
+     * contributed by the specified dynamicResultSet extension. 
+     * The custom filter expression may be applied as part of an ODA filter specification.
+     * @param extensionId   unique id of an extension that implements the dynamicResultSet extension point
+     * @param exprId    id of a custom filter expression 
+     * @return  an instance of CustomExpression or its subclass contributed by 
+     *          the specified dynamicResultSet extension
+     * @throws IllegalArgumentException if the specified extension and/or expression are not valid
+     * @throws OdaException
+     */
+    public static CustomExpression createCustomExpression( String extensionId, String exprId ) 
+        throws IllegalArgumentException, OdaException
+    {
+        return findCustomFilterDefinition( extensionId, exprId ).createExpression();
+    }
+ 
+    /**
+     * Creates a custom filter expression instance, with the given expression context, 
+     * of the specified filter expression contributed by the specified dynamicResultSet extension. 
+     * The custom filter expression may be applied as part of an ODA filter specification.
+     * @param extensionId   unique id of an extension that implements the dynamicResultSet extension point
+     * @param exprId    id of a custom filter expression 
+     * @param variable  the expression variable to set on the created instance; may be null
+     * @param args  the expression arguments to set on the created instance; may be null
+     * @return  an instance of CustomExpression or its subclass contributed by 
+     *          the specified dynamicResultSet extension
+     * @throws IllegalArgumentException if the specified extension and/or expression are not valid
+     * @throws OdaException
+     */
+    public static CustomExpression createCustomExpression( String extensionId, String exprId,
+            ExpressionVariable variable, ExpressionArguments args ) 
+        throws IllegalArgumentException, OdaException
+    {
+        return findCustomFilterDefinition( extensionId, exprId ).createExpression( variable, args );
+    }
+    
+    private static FilterExpressionDefinition findCustomFilterDefinition( String extensionId, String exprId ) 
+        throws IllegalArgumentException, OdaException
+    {
+        FilterExpressionDefinition filterExprDefn =
+            ResultExtensionExplorer.getInstance().getExtensionFilterDefinition( extensionId, exprId );
+        if( filterExprDefn == null )
+            throw new IllegalArgumentException( Messages.bind( Messages.querySpec_NON_DEFINED_CUSTOM_FILTER, 
+                    extensionId + DOT_SEPARATOR + exprId ));
+        return filterExprDefn;
+    }
+
+    /**
+     * Creates a custom aggregate expression instance of the specified aggregate expression 
+     * contributed by the specified dynamicResultSet extension. 
+     * The custom aggregate expression may be applied in an ODA 
+     * {@link org.eclipse.datatools.connectivity.oda.spec.result.ResultProjection} specification.
+     * @param extensionId   unique id of an extension that implements the dynamicResultSet extension point
+     * @param exprId    id of a custom filter expression 
+     * @return  an instance of CustomAggregate or its subclass contributed by 
+     *          the specified dynamicResultSet extension
+     * @throws IllegalArgumentException if the specified extension and/or expression are not valid
+     * @throws OdaException
+     */
+    public static CustomAggregate createCustomAggregate( String extensionId, String exprId )
+        throws IllegalArgumentException, OdaException
+    {
+        return findCustomAggregateDefinition( extensionId, exprId ).createExpression();
+    }
+    
+    /**
+     * Creates a custom aggregate expression instance, with the given expression variable, 
+     * of the specified aggregate expression contributed by the specified dynamicResultSet extension. 
+     * The custom aggregate expression may be applied in an ODA 
+     * {@link org.eclipse.datatools.connectivity.oda.spec.result.ResultProjection} specification.
+     * @param extensionId   unique id of an extension that implements the dynamicResultSet extension point
+     * @param exprId    id of a custom filter expression 
+     * @param variable  the input source variable to set on the created instance; may be null
+     * @return  an instance of CustomAggregate or its subclass contributed by 
+     *          the specified dynamicResultSet extension
+     * @throws IllegalArgumentException if the specified extension and/or expression are not valid
+     * @throws OdaException
+     */
+    public static CustomAggregate createCustomAggregate( String extensionId, String exprId, ExpressionVariable variable )
+        throws IllegalArgumentException, OdaException
+    {
+        return findCustomAggregateDefinition( extensionId, exprId ).createExpression( variable );
+    }
+    
+    private static AggregateDefinition findCustomAggregateDefinition( String extensionId, String exprId ) 
+        throws IllegalArgumentException, OdaException
+    {
+        AggregateDefinition aggrgExprDefn =
+            ResultExtensionExplorer.getInstance().getExtensionAggregateDefinition( extensionId, exprId );
+        if( aggrgExprDefn == null )
+            throw new IllegalArgumentException( Messages.bind( Messages.querySpec_NON_DEFINED_CUSTOM_AGGR, 
+                    extensionId + DOT_SEPARATOR + exprId ));
+        return aggrgExprDefn;
+    }
+ 
+    /**
+     * Obtains the instance of the specified combined operator type,
+     * as supported or contributed by the specified dynamicResultSet extension.
+     * A dynamicResultSet extension may override a built-in operator type, whose custom implementation
+     * would be returned.
+     * The returned operator instance may be applied to combine value expressions in an ODA 
+     * {@link org.eclipse.datatools.connectivity.oda.spec.valueexpr.CombinedValueExpression}.
+     * @param extensionId   unique id of an extension that implements the dynamicResultSet extension point
+     * @param operatorId    the id of a value expression combined operator type
+     * @return  an instance of ValueExpressionCombinedOperator or its subclass contributed by 
+     *          the specified dynamicResultSet extension
+     * @throws IllegalArgumentException if the specified extension and/or operator are not valid
+     * @throws OdaException
+     */
+    public static CombinedValueExpressionOperator getCombinedOperator( String extensionId, String operatorId ) 
+        throws IllegalArgumentException, OdaException
+    {
+        CombinedExpressionOperatorDefinition combinedOpDefn =
+            ResultExtensionExplorer.getInstance().getExtensionCombinedOperatorDefinition( extensionId, operatorId );
+        if( combinedOpDefn == null )
+            throw new IllegalArgumentException( Messages.bind( Messages.querySpec_NON_DEFINED_COMBINED_OP, 
+                    extensionId + DOT_SEPARATOR + operatorId ));
+
+        return combinedOpDefn.getOperator();
+    }
+
+    /**
+     * Creates a custom function value expression instance of the specified function type
+     * contributed by the specified dynamicResultSet extension. 
+     * Caller may use the returned instance as a value expression, and 
+     * assign function arguments to it as appropriate.
+     * @param extensionId   unique id of an extension that implements the dynamicResultSet extension point
+     * @param functionId    id of a custom function expression type
+     * @return  an instance of CustomFunction or its subclass contributed by 
+     *          the specified dynamicResultSet extension
+     * @throws IllegalArgumentException if the specified extension and/or function ids are not valid
+     * @throws OdaException
+     */
+    public static CustomFunction createCustomFunction( String extensionId, String functionId )
+        throws IllegalArgumentException, OdaException
+    {
+        return findCustomFunctionDefinition( extensionId, functionId ).createExpression();
+    }
+    
+    private static FunctionExpressionDefinition findCustomFunctionDefinition( String extensionId, 
+            String functionId ) 
+        throws IllegalArgumentException, OdaException
+    {
+        FunctionExpressionDefinition functionDefn =
+            ResultExtensionExplorer.getInstance().getExtensionFunctionDefinition( extensionId, functionId );
+        if( functionDefn == null )
+            throw new IllegalArgumentException( Messages.bind( Messages.querySpec_NON_DEFINED_CUSTOM_FUNC, 
+                    extensionId + DOT_SEPARATOR + functionId ));
+        return functionDefn;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/util/QuerySpecificationFactory.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/util/QuerySpecificationFactory.java
new file mode 100644
index 0000000..61f65f9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/util/QuerySpecificationFactory.java
@@ -0,0 +1,120 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.util;
+
+import org.eclipse.datatools.connectivity.oda.spec.AdvancedQuerySpecification;
+import org.eclipse.datatools.connectivity.oda.spec.InternalSpecFactory;
+import org.eclipse.datatools.connectivity.oda.spec.QuerySpecification;
+import org.eclipse.datatools.connectivity.oda.spec.result.FilterExpression;
+import org.eclipse.datatools.connectivity.oda.spec.result.InternalResultSpecFactory;
+import org.eclipse.datatools.connectivity.oda.spec.result.ResultProjection;
+import org.eclipse.datatools.connectivity.oda.spec.result.ResultSetSpecification;
+import org.eclipse.datatools.connectivity.oda.spec.result.SortSpecification;
+
+/**
+ * The factory base class to create instances of query specification classes 
+ * for use in preparing a query.
+ * <br>An ODA dynamicResultSet extension may extend this base class to create
+ * customized specification classes.
+ */
+public class QuerySpecificationFactory
+{
+    protected QuerySpecificationFactory() {}
+    
+    /**
+     * Returns an empty query specification instance.
+     * @return  a new {@link QuerySpecification} instance
+     */
+    protected QuerySpecification createQuerySpecification()
+    {
+        return InternalSpecFactory.createQuerySpecification();
+    }
+    
+    /**
+     * Returns an empty advanced query specification instance.
+     * @return  a new {@link AdvancedQuerySpecification} instance
+     */
+    protected AdvancedQuerySpecification createAdvancedQuerySpecification()
+    {
+        return InternalSpecFactory.createAdvancedQuerySpecification();
+    }
+    
+    /**
+     * Returns an empty result set specification instance.
+     * @return  a new {@link ResultSetSpecification} instance
+     */
+    protected ResultSetSpecification createResultSetSpecification()
+    {
+        return InternalResultSpecFactory.createResultSetSpecification();
+    }
+    
+    /**
+     * Returns an empty result projection instance.
+     * @return  a new {@link ResultProjection} instance
+     */
+    protected ResultProjection createResultProjection()
+    {
+        return InternalResultSpecFactory.createResultProjection();
+    }
+    
+    /**
+     * Returns an empty sort specification instance.
+     * @return  a new {@link SortSpecification} instance
+     */
+    protected SortSpecification createSortSpecification()
+    {
+        return InternalResultSpecFactory.createSortSpecification();
+    }
+   
+    /**
+     * Returns an empty sort specification instance.
+     * By specifiying a sort mode, a sort key that gets added to the sort specification
+     * will be validated to match the sort mode.
+     * @param sortMode  the sort mode of this <code>SortSpecification</code>; one of 
+     *                  <code>IDataSetMetaData.sortModeNone</code>, 
+     *                  <code>IDataSetMetaData.sortModeSingleOrder</code>,
+     *                  <code>IDataSetMetaData.sortModeColumnOrder</code>,
+     *                  <code>IDataSetMetaData.sortModeSingleColumn</code>.
+     * @return  a new {@link SortSpecification} instance with the defined mode,
+     */
+    protected SortSpecification createSortSpecification( int sortMode )
+    {
+        return InternalResultSpecFactory.createSortSpecification( sortMode );
+    }
+
+    /**
+     * A convenience method to create a query specification instance with 
+     * the specified filter expression root, result projection, and/or sort specification.
+     * @param filterExpr    a composite or atomic FilterExpression with corresponding variable 
+     *                  and argument values; may be null  
+     * @param projectionSpec    the projection specification of a query result set; may be null 
+     * @param sortSpec  the SortSpecification representing sorting characteristics; may be null  
+     *                  of a query result set
+     * @return  a new {@link QuerySpecification} instance
+     */
+    protected QuerySpecification createQuerySpecification( FilterExpression filterExpr,
+            ResultProjection projectionSpec, SortSpecification sortSpec )
+    {
+        ResultSetSpecification resultSetSpec = createResultSetSpecification();
+        resultSetSpec.setFilterSpecification( filterExpr );
+        resultSetSpec.setResultProjection( projectionSpec );
+        resultSetSpec.setSortSpecification( sortSpec );
+        
+        QuerySpecification newQuerySpec = createQuerySpecification();
+        newQuerySpec.setResultSetSpecification( resultSetSpec );
+        return newQuerySpec;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/util/QuerySpecificationHelper.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/util/QuerySpecificationHelper.java
new file mode 100644
index 0000000..f3dd819
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/util/QuerySpecificationHelper.java
@@ -0,0 +1,413 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2013 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.util;
+
+import java.util.Map.Entry;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.spec.AdvancedQuerySpecification;
+import org.eclipse.datatools.connectivity.oda.spec.BaseQuery;
+import org.eclipse.datatools.connectivity.oda.spec.QuerySpecification;
+import org.eclipse.datatools.connectivity.oda.spec.QuerySpecification.ParameterIdentifier;
+import org.eclipse.datatools.connectivity.oda.spec.basequery.AtomicQuery;
+import org.eclipse.datatools.connectivity.oda.spec.basequery.CombinedQuery;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.ExtensionContributor;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.ResultExtensionExplorer;
+import org.eclipse.datatools.connectivity.oda.spec.result.FilterExpression;
+import org.eclipse.datatools.connectivity.oda.spec.result.ResultProjection;
+import org.eclipse.datatools.connectivity.oda.spec.result.ResultSetSpecification;
+import org.eclipse.datatools.connectivity.oda.spec.result.SortSpecification;
+
+/**
+ * The helper that locates the factory class, associated
+ * with an org.eclipse.datatools.connectivity.oda.dynamicResultSet extension,
+ * to create and/or access the content of a {@link QuerySpecification}.
+ * <br>Provides convenient methods to create and access specification instances.
+ * @since 3.3 (DTP 1.8)
+ */
+public class QuerySpecificationHelper
+{    
+    private static final String LOG_NEWLINE_CHAR = "\n "; //$NON-NLS-1$
+    private static final String LOG_PAIR_ENTRY_SEPARATOR = " -> "; //$NON-NLS-1$
+    private static final String SPACE = " "; //$NON-NLS-1$
+
+    private QuerySpecificationFactory m_factory;
+    
+    /**
+     * Constructor for use with the specified dynamicResultSet extension id.
+     * @param dynamicResultSetExtnId    the id of an extension that implements 
+     *                the oda.dynamicResultSet extension point; 
+     *                may be null to use the default factory
+     */
+    public QuerySpecificationHelper( String dynamicResultSetExtnId )
+    {
+        if( dynamicResultSetExtnId == null )
+            return;     // use the base class factory by default
+
+        try
+        {
+            ExtensionContributor contributor =
+                ResultExtensionExplorer.getInstance().getExtensionContributor( dynamicResultSetExtnId );
+            setFactory( contributor );            
+        }
+        catch( OdaException e )
+        {
+            // TODO log warning
+            // ignore, use the base class factory by default
+        }
+    }
+    
+    /**
+     * Constructor for use with the specified dynamicResultSet extension contributor.
+     * @param contributor   contributor of a dynamicResultSet extension;
+     *                      may be null to use the default factory
+     */
+    public QuerySpecificationHelper( ExtensionContributor contributor )
+    {
+        setFactory( contributor );
+    }
+    
+    /**
+     * Constructor for use with the specified query specification factory.
+     * @param factory   the factory to create instances of query specification classes 
+     */
+    public QuerySpecificationHelper( QuerySpecificationFactory factory )
+    {
+        m_factory = factory;
+    }
+    
+    QuerySpecificationHelper()
+    {
+        this( (QuerySpecificationFactory) null );
+    }
+    
+    private void setFactory( ExtensionContributor contributor )
+    {
+        if( contributor == null )
+            return;     // use the base class factory by default
+        
+        try
+        {
+            m_factory = contributor.getSpecificationFactory();
+        }
+        catch( OdaException e )
+        {
+            // TODO log warning
+            // ignore, use the base class factory by default
+        }
+    }
+    
+    /**
+     * Gets the associated query specification factory instance.
+     * @return  associated query specification factory instance
+     */
+    public QuerySpecificationFactory getFactory()
+    {
+        if( m_factory == null )
+        {
+            m_factory = new QuerySpecificationFactory();    // use the base class by default
+        }
+        return m_factory;
+    }
+    
+    /**
+     * Creates a query specification instance with the specified filter expression root.
+     * @param filterExpr    a composite or atomic FilterExpression with corresponding variable 
+     *                  and argument values; may be null 
+     * @return  a new {@link QuerySpecification} instance
+     */
+    public QuerySpecification createQuerySpecification( FilterExpression filterExpr )
+    {
+        return createQuerySpecification( filterExpr, null, null );
+    }
+    
+    /**
+     * Creates a query specification instance with the specified result projection.
+     * @param projectionSpec    the projection specification of a query result set; may be null 
+     * @return  a new {@link QuerySpecification} instance
+     */
+    public QuerySpecification createQuerySpecification( ResultProjection projectionSpec )
+    {
+        return createQuerySpecification( null, projectionSpec, null );
+    }
+    
+    /**
+     * Creates a query specification instance with the specified sort specification.
+     * @param sortSpec  the SortSpecification representing sorting characteristics 
+     *                  of a query result set; may be null 
+     * @return  a new {@link QuerySpecification} instance
+     */
+    public QuerySpecification createQuerySpecification( SortSpecification sortSpec )
+    {
+        return createQuerySpecification( null, null, sortSpec );
+    }
+
+    /**
+     * Creates a query specification instance with the specified filter expression root,
+     * result projection, and/or sort specification.
+     * @param filterExpr    a composite or atomic FilterExpression with corresponding variable 
+     *                  and argument values; may be null  
+     * @param projectionSpec    the projection specification of a query result set; may be null 
+     * @param sortSpec  the SortSpecification representing sorting characteristics; may be null  
+     *                  of a query result set
+     * @return  a new {@link QuerySpecification} instance
+     */
+    public QuerySpecification createQuerySpecification( FilterExpression filterExpr,
+            ResultProjection projectionSpec, SortSpecification sortSpec )
+    {
+        return getFactory().createQuerySpecification( filterExpr, projectionSpec, sortSpec );
+    }
+    
+    /**
+     * Returns an empty query specification instance created by the QuerySpecificationFactory 
+     * specified in the constructor.
+     * @return  a new {@link QuerySpecification} instance
+     */
+    public QuerySpecification createQuerySpecification()
+    {
+        return getFactory().createQuerySpecification();
+    }
+
+    /**
+     * Returns an empty advanced query specification instance created by the QuerySpecificationFactory 
+     * specified in the constructor.
+     * @return  a new {@link AdvancedQuerySpecification} instance
+     */
+    public AdvancedQuerySpecification createAdvancedQuerySpecification()
+    {
+        return getFactory().createAdvancedQuerySpecification();
+    }
+    
+    /**
+     * Returns an empty result set specification instance created by the QuerySpecificationFactory specified 
+     * in the constructor.
+     * @return  a new {@link ResultSetSpecification} instance
+     */
+    public ResultSetSpecification createResultSetSpecification()
+    {
+        return getFactory().createResultSetSpecification();
+    }
+    
+    /**
+     * Returns an empty result projection instance created by the QuerySpecificationFactory specified 
+     * in the constructor.
+     * @return  a new {@link ResultProjection} instance
+     */
+    public ResultProjection createResultProjection()
+    {
+        return getFactory().createResultProjection();
+    }
+    
+    /**
+     * Returns an empty sort specification instance created by the QuerySpecificationFactory specified 
+     * in the constructor.
+     * @return  a new {@link SortSpecification} instance
+     */
+    public SortSpecification createSortSpecification()
+    {
+        return getFactory().createSortSpecification();
+    }
+    
+    /**
+     * Returns an empty sort specification instance
+     * created by the QuerySpecificationFactory specified in the constructor.
+     * By specifiying a sort mode, a sort key that gets added to the sort specification
+     * will be validated to match the sort mode.
+     * @param sortMode  the sort mode of this <code>SortSpecification</code>; one of 
+     *                  <code>IDataSetMetaData.sortModeNone</code>, 
+     *                  <code>IDataSetMetaData.sortModeSingleOrder</code>,
+     *                  <code>IDataSetMetaData.sortModeColumnOrder</code>,
+     *                  <code>IDataSetMetaData.sortModeSingleColumn</code>.
+     * @return  a new {@link SortSpecification} instance with the defined mode,
+     */
+    public SortSpecification createSortSpecification( int sortMode )
+    {
+        return getFactory().createSortSpecification( sortMode );
+    }
+    
+    /**
+     * Gets the filter expression root from the specified querySpec. 
+     * @param querySpec a query specification
+     * @return  the composite or atomic FilterExpression with corresponding variable 
+     *                  and argument values, or null if none is available
+     */
+    public static FilterExpression getFilterSpecification( QuerySpecification querySpec )
+    {
+        ResultSetSpecification resultSpec = getResultSetSpecification( querySpec );
+        return ( resultSpec != null ) ? resultSpec.getFilterSpecification() : null;
+    }
+    
+    /**
+     * Gets the result projection from the specified querySpec. 
+     * @param querySpec a query specification
+     * @return  the projection specification of the query's result set(s), 
+     *          or null if none is available
+     */
+    public static ResultProjection getResultProjection( QuerySpecification querySpec )
+    {
+        ResultSetSpecification resultSpec = getResultSetSpecification( querySpec );
+        return ( resultSpec != null ) ? resultSpec.getResultProjection() : null;
+    }
+    
+    /**
+     * Gets the sort specification from the specified querySpec. 
+     * @param querySpec a query specification
+     * @return  the sort specification of the query's result set(s), 
+     *          or null if none is available
+     */
+    public static SortSpecification getSortSpecification( QuerySpecification querySpec )
+    {
+        ResultSetSpecification resultSpec = getResultSetSpecification( querySpec );
+        return ( resultSpec != null ) ? resultSpec.getSortSpecification() : null;
+    }
+    
+    /**
+     * Gets the result set specification from the specified querySpec. 
+     * @param querySpec a query specification
+     * @return  the result set specification instance in the specified querySpec,
+     *          or null if none is available
+     */
+    public static ResultSetSpecification getResultSetSpecification( QuerySpecification querySpec )
+    {
+        return ( querySpec != null ) ? querySpec.getResultSetSpecification() : null;
+    }
+
+    /**
+     * Gets the atomic base query from the specified querySpec.
+     * @param querySpec a query specification
+     * @return  the {@link AtomicQuery} in the specified querySpec, or null if none is available
+     * @since 3.4 (DTP 1.11)
+     */
+    public static AtomicQuery getAtomicQuery( QuerySpecification querySpec )
+    {
+        BaseQuery baseQuery = querySpec != null ? querySpec.getBaseQuery() : null;
+        return baseQuery instanceof AtomicQuery ? (AtomicQuery)baseQuery : null;
+    }
+
+    /**
+     * Gets the combined base query from the specified querySpec.
+     * @param querySpec a query specification
+     * @return the {@link CombinedQuery} in the specified querySpec, or null if none is available
+     * @since 3.4 (DTP 1.11)
+     */
+    public static CombinedQuery getCombinedQuery( QuerySpecification querySpec )
+    {
+        BaseQuery baseQuery = querySpec != null ? querySpec.getBaseQuery() : null;
+        return baseQuery instanceof CombinedQuery ? (CombinedQuery)baseQuery : null;
+    }
+
+    /**
+     * Indicates whether the specified querySpec contains an atomic base query defined with
+     * a query text.
+     * @return  true if an atomic base query text is specified; false otherwise
+     * @since 3.4 (DTP 1.11)
+     */
+    public static boolean hasAtomicQueryText( QuerySpecification querySpec )
+    {
+        AtomicQuery atomicQuery = getAtomicQuery( querySpec );
+        return atomicQuery != null ? 
+                    atomicQuery.hasQueryText() : 
+                    false;
+    }
+
+    /**
+     * Indicates whether the specified querySpec contains a composite base query.
+     * @return  true if a combined base query is specified; false otherwise
+     * @since 3.4 (DTP 1.11)
+     */
+    public static boolean hasCombinedQuery( QuerySpecification querySpec )
+    {
+        return getCombinedQuery( querySpec ) != null;
+    }
+
+    /**
+     * Returns the string representation of the content found in the specified QuerySpecification.
+     * This utility method may be used for logging and debugging purpose.
+     * @param querySpec  a query specification
+     * @return  string representation of the query specification
+     */
+    public static String getContentAsString( QuerySpecification querySpec )
+    {
+        StringBuffer buffer = new StringBuffer( QuerySpecification.class.getSimpleName() + " [" ); //$NON-NLS-1$
+        if( querySpec == null )
+        {
+            buffer.append( "null]" ); //$NON-NLS-1$
+            return buffer.toString();
+        }
+
+        buffer.append( "\nProperty name-value pairs: " ); //$NON-NLS-1$
+        for( Entry<String,Object> propValuePair : querySpec.getProperties().entrySet() )
+        {
+            String propValueClassName = propValuePair.getValue() != null ?
+                    propValuePair.getValue().getClass().getSimpleName() : "null"; //$NON-NLS-1$
+            buffer.append( LOG_NEWLINE_CHAR + propValuePair.getKey() +
+                    LOG_PAIR_ENTRY_SEPARATOR + propValueClassName +
+                    SPACE + propValuePair.getValue() );
+        }
+
+        buffer.append( "\nParameter values: " ); //$NON-NLS-1$
+        for( Entry<ParameterIdentifier,Object> parameterValuePair : querySpec.getParameterValues().entrySet() )
+        {
+            String paramValueClassName = parameterValuePair.getValue() != null ?
+                    parameterValuePair.getValue().getClass().getSimpleName() : "null"; //$NON-NLS-1$
+            buffer.append( LOG_NEWLINE_CHAR + parameterValuePair.getKey() +
+                    LOG_PAIR_ENTRY_SEPARATOR + paramValueClassName +
+                    SPACE + parameterValuePair.getValue() );
+        }
+        
+        buffer.append( "\nFilter spec: " ); //$NON-NLS-1$
+        buffer.append( getFilterSpecification( querySpec ) );
+
+        buffer.append( "\nResult projection: " ); //$NON-NLS-1$
+        buffer.append( getResultProjection( querySpec ) );
+
+        buffer.append( "\nSort spec: " ); //$NON-NLS-1$
+        buffer.append( getSortSpecification( querySpec ) );
+
+        buffer.append( "]" ); //$NON-NLS-1$
+        return buffer.toString();
+    }
+    
+    /**
+     * Gets a Logger by the specified name.
+     * @param loggerName    the name of logger 
+     * @return  the Logger associated with the specified name
+     */
+    public static Logger getLogger( String loggerName )
+    {
+        return Logger.getLogger( loggerName );
+    }
+    
+    /**
+     * Logs the validation exception message at the FINE log level.
+     * @param className     name of class that initiates the logging
+     * @param exception     validation exception
+     */
+    public static void logValidationException( String className, Throwable exception )
+    {
+        if( exception == null )
+            return;     // nothing to log
+
+        final String loggerName = "org.eclipse.datatools.connectivity.oda.spec"; //$NON-NLS-1$
+        final String methodName = "validate(ValidationContext)"; //$NON-NLS-1$
+        final String logMsg = "Validation result: "; //$NON-NLS-1$
+
+        getLogger( loggerName )
+            .logp( Level.FINE, className, methodName, logMsg + exception.toString() );
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/util/SortSpecMigrator.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/util/SortSpecMigrator.java
new file mode 100644
index 0000000..27cfcc6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/util/SortSpecMigrator.java
@@ -0,0 +1,73 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.util;
+
+import org.eclipse.datatools.connectivity.oda.SortSpec;
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.spec.result.SortSpecification;
+import org.eclipse.datatools.connectivity.oda.spec.result.ColumnIdentifier;
+
+/**
+ * An utility to convert a pre-3.2 {@link SortSpec} instance to and from
+ * a {@link SortSpecification} instance.
+ * @since 3.3 (DTP 1.8)
+ */
+public class SortSpecMigrator
+{
+    /**
+     * Converts the specified pre-3.2 {@link SortSpec} instance to a 
+     * {@link SortSpecification} instance that can be used in a QuerySpecification.
+     * @param oldSortSpec   a pre-3.2 {@link SortSpec} instance to convert from
+     * @return  a new {@link SortSpecification} instance
+     */
+    public static SortSpecification convertSortSpecification( SortSpec oldSortSpec )
+    {
+        if( oldSortSpec == null )
+            return null;
+        
+        SortSpecification resultSortSpec = 
+            new QuerySpecificationHelper().createSortSpecification( oldSortSpec.getSortMode() );
+        for( int i=1; i <= oldSortSpec.getSortKeyCount(); i++ )
+        {
+            resultSortSpec.addSortKey( 
+                    new ColumnIdentifier( oldSortSpec.getSortColumn( i )), 
+                    oldSortSpec.getSortOrder( i ) );
+        }
+        return resultSortSpec;
+    }
+    
+    /**
+     * Converts the specified {@link SortSpecification} instance used in a QuerySpecification
+     * to a pre-3.2 {@link SortSpec} instance.
+     * @param resultSortSpec    a {@link SortSpecification} instance to convert from
+     * @return  a new pre-3.2 {@link SortSpec} instance
+     */
+    public static SortSpec convertSortSpecification( SortSpecification resultSortSpec )
+    {
+        if( resultSortSpec == null )
+            return null;
+        
+        SortSpec oldSortSpec = new SortSpec( resultSortSpec.getSortMode() );
+        for( int i=1; i <= resultSortSpec.getSortKeyCount(); i++ )
+        {
+            ColumnIdentifier sortColumn = resultSortSpec.getSortColumn( i );
+            if( sortColumn == null )
+                throw new IllegalArgumentException( Messages.bind( Messages.querySpec_INVALID_ARG, resultSortSpec ));
+            oldSortSpec.addSortKey( sortColumn.getNameExpression(), resultSortSpec.getSortDirection( i ) );
+        }
+        return oldSortSpec;
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/util/ValidatorUtil.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/util/ValidatorUtil.java
new file mode 100644
index 0000000..2ead053
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/util/ValidatorUtil.java
@@ -0,0 +1,900 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2013 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.util;
+
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.spec.BaseQuery;
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionVariable;
+import org.eclipse.datatools.connectivity.oda.spec.ValueExpression;
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionVariable.VariableType;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.VariableRestrictions;
+import org.eclipse.datatools.connectivity.oda.spec.result.AggregateExpression;
+import org.eclipse.datatools.connectivity.oda.spec.result.CustomAggregate;
+import org.eclipse.datatools.connectivity.oda.spec.result.FilterExpression;
+import org.eclipse.datatools.connectivity.oda.spec.result.ResultProjection;
+import org.eclipse.datatools.connectivity.oda.spec.result.ResultSetSpecification;
+import org.eclipse.datatools.connectivity.oda.spec.result.SortSpecification;
+import org.eclipse.datatools.connectivity.oda.spec.result.filter.AtomicExpression;
+import org.eclipse.datatools.connectivity.oda.spec.result.filter.CompositeExpression;
+import org.eclipse.datatools.connectivity.oda.spec.result.filter.CustomExpression;
+import org.eclipse.datatools.connectivity.oda.spec.valueexpr.CustomFunction;
+
+/**
+ * Utility class for use by implementation of IValidator.
+ * @since 3.3 (DTP 1.8)
+ */
+public class ValidatorUtil
+{
+    private static final String AT_SYMBOL = "@"; //$NON-NLS-1$
+    
+    /**
+     * Validates the specified CustomExpression to be an instance of the specified class.
+     * @param customExpr    a custom filter expression instance
+     * @param expectedExprClass  the expected class of the custom expression
+     * @throws OdaException if validation fails
+     */
+    public static void validateCustomExprType( CustomExpression customExpr, Class<?> expectedExprClass ) 
+        throws OdaException
+    {
+        if( expectedExprClass.isInstance( customExpr ) )
+            return;     // is expected type
+
+        // not an instance of the expected class
+        throw newFilterExprException( 
+                Messages.bind( Messages.querySpec_UNEXPECTED_CUSTOM_EXPR_TYPE,
+                        customExpr.getName(), expectedExprClass.getName() ), 
+                customExpr );
+    }
+
+    /**
+     * Validates the specified CustomAggregate to be an instance of the specified class.
+     * @param customExpr    a custom aggregate expression instance
+     * @param expectedExprClass the expected class of the custom expression
+     * @throws OdaException  if validation fails
+     */
+    public static void validateCustomExprType( CustomAggregate customExpr, Class<?> expectedExprClass ) 
+        throws OdaException
+    {
+        if( expectedExprClass.isInstance( customExpr ) )
+            return;     // is expected type
+    
+        // not an instance of the expected class
+        throw newAggregateException( 
+                Messages.bind( Messages.querySpec_UNEXPECTED_AGGR_EXPR_TYPE,
+                        customExpr.getName(), expectedExprClass.getName() ), 
+                customExpr );
+    }
+
+    /**
+     * Validates the specified CustomFunction to be an instance of the specified class.
+     * @param customExpr    a custom function value expression instance
+     * @param expectedExprClass the expected class of the custom function value expression
+     * @throws OdaException  if validation fails
+     * @since 3.2.3
+     */
+    public static void validateCustomExprType( CustomFunction customExpr, Class<?> expectedExprClass ) 
+        throws OdaException
+    {
+        if( expectedExprClass.isInstance( customExpr ) )
+            return;     // is expected type
+    
+        // not an instance of the expected class
+        throw newValueExprException( 
+                Messages.bind( Messages.querySpec_UNEXPECTED_FUNC_EXPR_TYPE,
+                        customExpr.getName(), expectedExprClass.getName() ), 
+                customExpr );
+    }
+
+    /**
+     * Validates each and every CustomExpression nested in the specified FilterExpression 
+     * to be an instance of the specified class.
+     * @param customExpr    a custom filter expression instance
+     * @param expectedExprClass  the expected class of the custom expression
+     * @throws OdaException if validation fails
+     */
+    public static void validateAllCustomExprType( FilterExpression expr, Class<?> expectedExprClass ) 
+        throws OdaException
+    {
+        if( expr instanceof CustomExpression )
+        {
+            validateCustomExprType( (CustomExpression) expr, expectedExprClass );
+            return;
+        }
+        
+        if( expr instanceof CompositeExpression )
+        {
+            CompositeExpression parentExpr = (CompositeExpression) expr;
+            FilterExpression[] childrenExpr = parentExpr.getChildren();
+            for( int i= 0; i < childrenExpr.length; i++ )
+            {
+                validateAllCustomExprType( childrenExpr[i], expectedExprClass );
+            }
+            return;
+        }
+    }
+        
+    /**
+     * Validates that the specified CustomExpression is contributed by the specified dynamicResultSet
+     * extension id.
+     * @param customExpr    a custom filter expression instance
+     * @param expectedExtensionId   id of the expected oda dynamicResultSet extension
+     * @throws OdaException if validation fails
+     */
+    public static void validateCustomExprExtension( CustomExpression customExpr, String expectedExtensionId )
+        throws OdaException
+    {
+        if( ! expectedExtensionId.equals( customExpr.getDeclaringExtensionId() ) )
+            throw newFilterExprException( 
+                    Messages.bind( Messages.querySpec_UNEXPECTED_CUSTOM_EXPR_EXTENSION, customExpr.getName() ), 
+                    customExpr );
+    }
+
+    /**
+     * Validates that the specified CustomAggregate is contributed by the specified dynamicResultSet
+     * extension id.
+     * @param customAggrExpr    a custom aggregate expression instance
+     * @param expectedExtensionId   id of the expected oda dynamicResultSet extension
+     * @throws OdaException if validation fails
+     */
+    public static void validateCustomExprExtension( CustomAggregate customAggrExpr, String expectedExtensionId )
+        throws OdaException
+    {
+        if( ! expectedExtensionId.equals( customAggrExpr.getDeclaringExtensionId() ) )
+            throw newAggregateException( 
+                    Messages.bind( Messages.querySpec_UNEXPECTED_AGGR_EXPR_EXTENSION, customAggrExpr.getName() ), 
+                    customAggrExpr );
+    }
+
+    /**
+     * Validates that the specified CustomFunction is contributed by the specified dynamicResultSet
+     * extension id.
+     * @param customFuncExpr    a custom function value expression instance
+     * @param expectedExtensionId   id of the expected oda dynamicResultSet extension
+     * @throws OdaException if validation fails
+     * @since 3.2.3
+     */
+    public static void validateCustomExprExtension( CustomFunction customFuncExpr, String expectedExtensionId )
+        throws OdaException
+    {
+        if( ! expectedExtensionId.equals( customFuncExpr.getDeclaringExtensionId() ) )
+            throw newValueExprException( 
+                    Messages.bind( Messages.querySpec_UNEXPECTED_FUNC_EXPR_EXTENSION, customFuncExpr.getName() ), 
+                    customFuncExpr );
+    }
+ 
+    /**
+     * Validates that the specified AtomicExpression has an associated ExpressionVariable.
+     * @param expr    an atomic filter expression instance
+     * @throws OdaException if validation fails
+     */
+    public static void validateHasExprVariable( AtomicExpression expr )
+        throws OdaException
+    {
+        if( expr.getVariable() == null )
+            throw newFilterExprException( 
+                    Messages.bind( Messages.querySpec_MISSING_EXPR_VARIABLE, expr.getName() ), 
+                            expr );
+    }
+    
+    /**
+     * Validates that the expression variable of the specified filter expression 
+     * is one of the specified variable types.
+     * @param expr    an atomic filter expression instance
+     * @param supportedVarTypes array of supported types of expression variable
+     * @throws OdaException if validation fails
+     */
+    public static void validateSupportedVariableTypes( AtomicExpression expr, 
+            ExpressionVariable.VariableType[] supportedVarTypes )
+        throws OdaException
+    {
+        ExpressionVariable exprVar = expr.getVariable();
+        for( int i=0; i < supportedVarTypes.length; i++ )
+        {
+            if( exprVar.getType() == supportedVarTypes[i] )
+                return;     // is a supported type
+        }
+        
+        // expr variable is not a supported type
+        throw newFilterExprException( 
+                Messages.bind( Messages.querySpec_UNEXPECTED_EXPR_VARIABLE_TYPE, exprVar ), 
+                expr );
+    }
+
+    /**
+     * Validates that the input expression variable of the specified aggregate expression 
+     * is one of the specified variable types.
+     * @param expr    a custom aggregate expression instance
+     * @param supportedVarTypes array of supported types of expression variable
+     * @throws OdaException if validation fails
+     */
+    public static void validateSupportedVariableTypes( CustomAggregate expr, 
+            ExpressionVariable.VariableType[] supportedVarTypes )
+        throws OdaException
+    {
+        if( expr.getVariables().isEmpty() )
+            return;     // no input variables to validate
+        
+        // iterator thru each input variable to check if it is one of the supported types
+        Iterator<ExpressionVariable> iterVars = expr.getVariables().iterator();
+        while( iterVars.hasNext() )
+        {
+            ExpressionVariable exprVar = iterVars.next();
+            
+            boolean isSupported = false;
+            for( int i=0; i < supportedVarTypes.length; i++ )
+            {
+                if( exprVar.getType() == supportedVarTypes[i] )
+                {
+                    isSupported = true;     // is a supported type
+                    break;
+                }
+            }
+            
+            // expr variable is not a supported type
+            if( ! isSupported )
+                throw newAggregateException( 
+                        Messages.bind( Messages.querySpec_UNEXPECTED_EXPR_VARIABLE_TYPE, exprVar ), 
+                        expr );
+        }        
+    }
+
+    /**
+     * Validates that the data type of the specified expression variable is one of the
+     * supported data types listed in the VariableRestrictions.
+     * @param exprVar   an expression variable
+     * @param varRestrictions   supported data types defined by an oda dynamicResultSet extension
+     * @param odaDataSourceId   the id of an oda.dataSource extension
+     * @param dataSetType       the id of a data set type defined by an oda.dataSource extension;
+     *                          used to map native data type to corresponding ODA data type
+     * @throws OdaException  if validation fails
+     */
+    public static void validateSupportedVariableDataTypes( ExpressionVariable exprVar, 
+            VariableRestrictions varRestrictions, String odaDataSourceId, String dataSetType ) 
+        throws OdaException
+    {
+        validateSupportedVariableDataTypes( exprVar.getValueExpression(), varRestrictions, 
+                odaDataSourceId, dataSetType );
+    }
+    
+    /**
+     * Validates that the data type of the specified value expression is one of the
+     * supported data types listed in the VariableRestrictions.
+     * @param valueExpr a value expression
+     * @param varRestrictions   supported data types defined by an oda dynamicResultSet extension
+     * @param odaDataSourceId   the id of an oda.dataSource extension
+     * @param dataSetType       the id of a data set type defined by an oda.dataSource extension;
+     *                          used to map native data type to corresponding ODA data type
+     * @throws OdaException  if validation fails
+     */
+    public static void validateSupportedVariableDataTypes( ValueExpression valueExpr, 
+            VariableRestrictions varRestrictions, String odaDataSourceId, String dataSetType ) 
+        throws OdaException
+    {
+        // TODO - validate ExpressionVariable's instance type is one of restrictedInstanceTypes 
+        if( valueExpr.getVariableType() == VariableType.INSTANCE_OF )
+            return;     // validation is not supported yet 
+        
+        // look up oda data type if available in the value expression
+        Integer odaDataType = valueExpr.getOdaDataType();
+        if( odaDataType == null || odaDataType == ValueExpression.UNKNOWN_ODA_DATA_TYPE )
+            return;     // no data type to validate
+        
+        int[] restrictedOdaDataTypes = null;
+//        String[] restrictedInstanceTypes = null;
+        boolean hasRestrictedOdaDataTypes = false;
+        boolean hasRestrictedInstanceTypes = false;
+        switch( valueExpr.getVariableType() )
+        {
+            case RESULT_SET_COLUMN:
+                restrictedOdaDataTypes = varRestrictions.getResultColumnRestrictedOdaDataTypes();
+                if( restrictedOdaDataTypes.length > 0 )
+                    hasRestrictedOdaDataTypes = true;
+                break;
+            case QUERY_EXPRESSION:
+                restrictedOdaDataTypes = varRestrictions.getQueryExpressionRestrictedOdaDataTypes();
+                if( restrictedOdaDataTypes.length > 0 )
+                    hasRestrictedOdaDataTypes = true;
+                break;
+//            case INSTANCE_OF:
+//                restrictedInstanceTypes = varRestrictions.getInstanceRestrictedTypes();
+//                if( restrictedInstanceTypes.length > 0 )
+//                    hasRestrictedInstanceTypes = true;
+//                break;
+            default:
+                break;
+        }
+        if( ! hasRestrictedOdaDataTypes && ! hasRestrictedInstanceTypes )
+            return;     // has no type restrictions
+        
+        boolean meetsRestriction = false;
+        if( hasRestrictedOdaDataTypes )
+        {            
+            // check if the variable's oda type is one of the allowed data types
+            for( int i=0; i < restrictedOdaDataTypes.length; i++ )
+            {
+                if( restrictedOdaDataTypes[i] == odaDataType.intValue() )
+                {
+                    meetsRestriction = true;
+                    break;
+                }
+            }
+
+            if( ! meetsRestriction )
+                throw new OdaException( Messages.bind( Messages.querySpec_NONSUPPORTED_VAR_DATA_TYPE,
+                        odaDataType, valueExpr.getName() ));
+        }
+    }
+
+    /**
+     * Validates that null ordering is not specified in the given sortSpec.
+     * This utility method can be used by the custom validator of an ODA driver that does not support null ordering.
+     * @param sortSpec      the sort specification found in a query spec
+     * @throws OdaException  if validation fails
+     */
+    public static void validateHasNoNullOrderingSpec( SortSpecification sortSpec ) 
+        throws OdaException
+    {
+        if( sortSpec == null || sortSpec.getSortKeyCount() == 0 )
+            return;     // nothing to validate
+
+        // null ordering is not supported, validate that none of the sort keys have specified null ordering
+        int numSortKeys = sortSpec.getSortKeyCount();
+        for( int i=1; i <= numSortKeys; i++ )
+        {
+            int nullOrderingType = sortSpec.getNullOrdering( i );
+            if( nullOrderingType != SortSpecification.NULL_ORDERING_NONE )
+                throw newSortSpecException( Messages.querySpec_NONSUPPORTED_NULL_ORDERING,
+                        sortSpec );
+        }
+    }
+
+    private static OdaException newOdaException( String message, String causeIdentifier, 
+            OdaException chainedEx )
+    {
+        if( causeIdentifier == null )
+            return ( chainedEx != null ) ? chainedEx : new OdaException( message );
+        
+        OdaException rootEx = newOdaException( message, causeIdentifier );
+        addException( rootEx, chainedEx );
+        return rootEx;
+    }
+
+    /**
+     * Creates and returns an OdaException with the specified message and
+     * an IllegalArgumentException cause with the specified causeIdentifier.
+     * @param message
+     * @param causeIdentifier
+     * @return  a new OdaException
+     */
+    public static OdaException newOdaException( String message, String causeIdentifier )
+    {
+        OdaException odaEx = new OdaException( message );
+        odaEx.initCause( new IllegalArgumentException( causeIdentifier ) );
+        return odaEx;
+    }
+
+    private static boolean isCauseOfException( OdaException odaEx, String causeIdentifier )
+    {
+        if( causeIdentifier == null )
+            return false;
+
+        while( odaEx != null )
+        {
+            Throwable cause = odaEx.getCause();
+            if( cause instanceof IllegalArgumentException && 
+                    causeIdentifier.equals( cause.getMessage() ) )
+                return true;
+
+            // check on nested cause, if exists
+            if( cause instanceof OdaException )
+            {
+                if( isCauseOfException( (OdaException)cause, causeIdentifier ) )
+                    return true;
+            }
+                            
+            odaEx = odaEx.getNextException();
+        }
+
+        return false;
+    }
+    
+    /**
+     * Adds the new OdaException object to the end of the OdaException chain.
+     * @param rootEx    the root of an OdaException chain
+     * @param newEx     a new OdaException to append to the end of the chain
+     * @return
+     */
+    public static OdaException addException( OdaException rootEx, OdaException newEx )
+    {
+        if( rootEx == null )
+            return newEx;  // nothing to append to
+        if( newEx != null )
+            rootEx.setNextException( newEx );
+        return rootEx;
+    }
+    
+    /**
+     * Creates and returns a top-level OdaException to indicate that the 
+     * specified FilterExpression is the cause of the specified driverEx exception.
+     * @param invalidFilterExpr a top-level FilterExpression that is invalid
+     * @param driverEx  optional detail OdaException thrown by an ODA driver that has detected 
+     *              the invalid state; may be null
+     * @return  an OdaException chain with the specified invalid FilterExpression
+     *          identified as the cause
+     * @see {@link #isInvalidFilterExpression(FilterExpression, OdaException)}
+     */
+    public static OdaException newFilterExprException( FilterExpression invalidFilterExpr, OdaException driverEx )
+    {
+        return newFilterExprException( Messages.querySpec_INVALID_FILTER_EXPR, invalidFilterExpr, driverEx );
+    }
+    
+    /**
+     * Creates and returns an OdaException with the specified FilterExpression identified as the cause.
+     * @param message   custom exception message
+     * @param invalidFilterExpr    the invalid FilterExpression to set as the cause
+     * @return  an OdaException with the specified message and invalid FilterExpression
+     *          identified as the cause
+     * @see {@link #isInvalidFilterExpression(FilterExpression, OdaException)}
+     */
+    public static OdaException newFilterExprException( String message, FilterExpression invalidFilterExpr )
+    {
+        return newFilterExprException( message, invalidFilterExpr, null );
+    }
+    
+    private static OdaException newFilterExprException( String message, FilterExpression invalidFilterExpr, 
+            OdaException chainedEx )
+    {
+        // if this filter expr is already identified as a cause in the caught exception,
+        // proceed to use it as is; otherwise, add this filter expr as the root cause 
+        if( chainedEx != null && isInvalidFilterExpression( invalidFilterExpr, chainedEx ) )
+            return chainedEx;
+        return newOdaException( message, getInstanceId( invalidFilterExpr ), chainedEx );
+    }
+    
+    /**
+     * Indicates whether the specified FilterExpression is one of the cause(s)
+     * in the specified OdaException chain.
+     * @param filterExpr    a filter expression whose processing might have caused
+     *          an OdaException
+     * @param rootEx    the root of an OdaException chain caught while processing 
+     *          the filter expression
+     * @return  true if the specified FilterExpression is one of the cause(s) in the OdaException chain;
+     *          false otherwise
+     */
+    public static boolean isInvalidFilterExpression( FilterExpression filterExpr, OdaException rootEx )
+    {
+        if( filterExpr == null )
+            return true;
+        return isCauseOfException( rootEx, getInstanceId( filterExpr ) );
+    }
+    
+    /**
+     * Creates and returns a top-level OdaException to indicate that the 
+     * specified aggregate expression is the cause of the specified driverEx exception.
+     * @param invalidAggrExpr the invalid AggregateExpression to set as the cause
+     * @param driverEx  optional detail OdaException thrown by an ODA driver that has detected 
+     *              the invalid state; may be null
+     * @return  an OdaException chain with the specified invalid aggregate expression
+     *          identified as the cause
+     * @see {@link #isInvalidAggregateExpression(AggregateExpression, OdaException)}
+     */
+    public static OdaException newAggregateException( AggregateExpression invalidAggrExpr, OdaException driverEx )
+    {
+        return newAggregateException( Messages.querySpec_INVALID_AGGR_EXPR, invalidAggrExpr, driverEx );
+    }
+    
+    /**
+     * Creates and returns an OdaException with the specified AggregateExpression identified as the cause.
+     * @param message   custom exception message
+     * @param invalidAggrExpr    the invalid AggregateExpression to set as the cause
+     * @return  an OdaException with the specified message and invalid AggregateExpression
+     *          identified as the cause
+     * @see {@link #isInvalidAggregateExpression(AggregateExpression, OdaException)}
+     */
+    public static OdaException newAggregateException( String message, AggregateExpression invalidAggrExpr )
+    {
+        return newAggregateException( message, invalidAggrExpr, null );
+    }
+    
+    private static OdaException newAggregateException( String message, AggregateExpression invalidAggrExpr, 
+            OdaException chainedEx )
+    {
+        // if this aggregate expr is already identified as a cause in the caught exception,
+        // proceed to use it as is; otherwise, add this expr as the root cause 
+        if( chainedEx != null && isInvalidAggregateExpression( invalidAggrExpr, chainedEx ) )
+            return chainedEx;
+        return newOdaException( message, getInstanceId( invalidAggrExpr ), chainedEx );
+    }
+    
+    /**
+     * Indicates whether the specified aggregate expression is one of the cause(s)
+     * in the specified OdaException chain.
+     * @param aggrExpr    an aggregate expression whose processing might have caused an OdaException
+     * @param rootEx    the root of an OdaException chain caught while processing 
+     *          the aggregate expression
+     * @return  true if the specified aggregate expression is one of the cause(s) in the OdaException chain;
+     *          false otherwise
+     */
+    public static boolean isInvalidAggregateExpression( AggregateExpression aggrExpr, OdaException rootEx )
+    {
+        if( aggrExpr == null )
+            return true;
+        return isCauseOfException( rootEx, getInstanceId( aggrExpr ) );
+    }
+    
+    /**
+     * Creates and returns a top-level OdaException to indicate that the 
+     * specified value expression is the cause of the specified driverEx exception.
+     * @param invalidValueExpr the invalid ValueExpression to set as the cause
+     * @param driverEx  optional detail OdaException thrown by an ODA driver that has detected 
+     *              the invalid state; may be null
+     * @return  an OdaException chain with the specified invalid value expression
+     *          identified as the cause
+     * @see {@link #isInvalidValueExpression(ValueExpression, OdaException)}
+     */
+    public static OdaException newValueExprException( ValueExpression invalidValueExpr, OdaException driverEx )
+    {
+        return newValueExprException( Messages.querySpec_INVALID_VALUE_EXPR, invalidValueExpr, driverEx );
+    }
+    
+    /**
+     * Creates and returns an OdaException with the specified value expression identified as the cause.
+     * @param message   custom exception message
+     * @param invalidValueExpr    the invalid ValueExpression to set as the cause
+     * @return  an OdaException with the specified message and invalid ValueExpression
+     *          identified as the cause
+     * @see {@link #isInvalidValueExpression(ValueExpression, OdaException)}
+     */
+    public static OdaException newValueExprException( String message, ValueExpression invalidValueExpr )
+    {
+        return newValueExprException( message, invalidValueExpr, null );
+    }
+    
+    private static OdaException newValueExprException( String message, ValueExpression invalidValueExpr, 
+            OdaException chainedEx )
+    {
+        // if this value expr is already identified as a cause in the caught exception,
+        // proceed to use it as is; otherwise, add this expr as the root cause 
+        if( chainedEx != null && isInvalidValueExpression( invalidValueExpr, chainedEx ) )
+            return chainedEx;
+        return newOdaException( message, getInstanceId( invalidValueExpr ), chainedEx );
+    }
+    
+    /**
+     * Indicates whether the specified value expression is one of the cause(s)
+     * in the specified OdaException chain.
+     * @param valueExpr    a value expression whose processing might have caused an OdaException
+     * @param rootEx    the root of an OdaException chain caught while processing 
+     *          the value expression
+     * @return  true if the specified value expression is one of the cause(s) in the OdaException chain;
+     *          false otherwise
+     */
+    public static boolean isInvalidValueExpression( ValueExpression valueExpr, OdaException rootEx )
+    {
+        if( valueExpr == null )
+            return true;
+        return isCauseOfException( rootEx, getInstanceId( valueExpr ) );
+    }
+    
+    /**
+     * Creates and returns a top-level OdaException to indicate that the 
+     * specified result projection is the cause of the specified driverEx exception.
+     * @param resultProj  the invalid ResultProjection to set as the cause
+     * @param driverEx    optional detail OdaException thrown by an ODA driver that has detected 
+     *              the invalid state; may be null
+     * @return  an OdaException chain with the specified invalid result projection
+     *          identified as the cause
+     * @see {@link #isInvalidResultProjection(ResultProjection, OdaException)}
+     */
+    public static OdaException newResultProjectionException( ResultProjection resultProj, OdaException driverEx )
+    {
+        return newResultProjectionException( Messages.querySpec_INVALID_RESULT_PROJ, resultProj, driverEx );
+    }
+    
+    /**
+     * Creates and returns a top-level OdaException to indicate that the 
+     * specified result projection is the cause of the specified driverEx exception.
+     * @param message   custom exception message
+     * @param resultProj  the invalid ResultProjection to set as the cause
+     * @return  an OdaException with the specified message and invalid result projection
+     *          identified as the cause
+     * @see {@link #isInvalidResultProjection(ResultProjection, OdaException)}
+     */
+    public static OdaException newResultProjectionException( String message, ResultProjection resultProj )
+    {
+        return newResultProjectionException( message, resultProj, null );
+    }
+    
+    private static OdaException newResultProjectionException( String message, ResultProjection resultProj, 
+            OdaException chainedEx )
+    {
+        // if this result projection is already identified as a cause in the caught exception,
+        // proceed to use it as is; otherwise, add this expr as the root cause 
+        if( chainedEx != null && isInvalidResultProjection( resultProj, chainedEx ) )
+            return chainedEx;
+        return newOdaException( message, getInstanceId( resultProj ), chainedEx );
+    }
+    
+    /**
+     * Indicates whether the specified result projection is one of the cause(s)
+     * in the specified OdaException chain.
+     * @param resultProj  a result projection whose processing might have caused an OdaException
+     * @param rootEx    the root of an OdaException chain caught while processing the result projection
+     * @return  true if the specified result projection is one of the cause(s) in the OdaException chain;
+     *          false otherwise
+     */
+    public static boolean isInvalidResultProjection( ResultProjection resultProj, OdaException rootEx )
+    {
+        if( resultProj == null )
+            return true;
+        return isCauseOfException( rootEx, getInstanceId( resultProj ) );
+    }
+    
+    /**
+     * Creates and returns a top-level OdaException to indicate that the 
+     * specified sort key is the cause of the specified driverEx exception.
+     * @param sortKeySequenceOrder the sequence ordering position of a sort key that is invalid
+     * @param driverEx  optional detail OdaException thrown by an ODA driver that has detected 
+     *              the invalid state; may be null
+     * @return  an OdaException chain with the specified invalid sort key
+     *          identified as the cause
+     * @see {@link #isInvalidSortKey(int, OdaException)}
+     */
+    public static OdaException newSortKeyException( int sortKeySequenceOrder, OdaException driverEx )
+    {
+        return newSortKeyException( Messages.querySpec_INVALID_SORT_KEY, sortKeySequenceOrder, driverEx );
+    }
+    
+    /**
+     * Creates and returns a top-level OdaException to indicate that the 
+     * specified sort key is the cause of the specified driverEx exception.
+     * @param message   custom exception message
+     * @param sortKeySequenceOrder the sequence ordering position of a sort key that is invalid
+     * @return  an OdaException with the specified message and invalid sort key
+     *          identified as the cause
+     * @see {@link #isInvalidSortKey(int, OdaException)}
+     */
+    public static OdaException newSortKeyException( String message, int sortKeySequenceOrder )
+    {
+        return newSortKeyException( message, sortKeySequenceOrder, null );
+    }
+    
+    private static OdaException newSortKeyException( String message, int sortKeySequenceOrder, 
+            OdaException chainedEx )
+    {
+        // if this sort key is already identified as a cause in the caught exception,
+        // proceed to use it as is; otherwise, add this expr as the root cause 
+        if( chainedEx != null && isInvalidSortKey( sortKeySequenceOrder, chainedEx ) )
+            return chainedEx;
+        return newOdaException( message, String.valueOf( sortKeySequenceOrder ), chainedEx );
+    }
+    
+    /**
+     * Indicates whether the specified sort key is one of the cause(s)
+     * in the specified OdaException chain.
+     * @param sortKeySequenceOrder  the sequence ordering position (1-based) of a sort key
+     *                  whose processing might have caused an OdaException
+     * @param rootEx    the root of an OdaException chain caught while processing the sort key
+     * @return  true if the specified sort key is one of the cause(s) in the OdaException chain;
+     *          false otherwise
+     */
+    public static boolean isInvalidSortKey( int sortKeySequenceOrder, OdaException rootEx )
+    {
+        if( sortKeySequenceOrder == 0 )
+            return true;
+
+        String sortKeyId = String.valueOf( sortKeySequenceOrder );
+        return isCauseOfException( rootEx, sortKeyId );
+    }
+    
+    /**
+     * Creates and returns a top-level OdaException to indicate that the 
+     * specified sort specification is the cause of the specified driverEx exception.
+     * @param sortSpec  the invalid SortSpecification to set as the cause
+     * @param driverEx    optional detail OdaException thrown by an ODA driver that has detected 
+     *              the invalid state; may be null
+     * @return  an OdaException chain with the specified invalid sort key
+     *          identified as the cause
+     * @see {@link #isInvalidSortSpec(SortSpecification, OdaException)}
+     */
+    public static OdaException newSortSpecException( SortSpecification sortSpec, OdaException driverEx )
+    {
+        return newSortSpecException( Messages.querySpec_INVALID_SORT_SPEC, sortSpec, driverEx );
+    }
+    
+    /**
+     * Creates and returns a top-level OdaException to indicate that the 
+     * specified sort specification is the cause of the specified driverEx exception.
+     * @param message   custom exception message
+     * @param sortSpec  the invalid SortSpecification to set as the cause
+     * @return  an OdaException with the specified message and invalid sort key
+     *          identified as the cause
+     * @see {@link #isInvalidSortSpec(SortSpecification, OdaException)}
+     */
+    public static OdaException newSortSpecException( String message, SortSpecification sortSpec )
+    {
+        return newSortSpecException( message, sortSpec, null );
+    }
+    
+    private static OdaException newSortSpecException( String message, SortSpecification sortSpec, 
+            OdaException chainedEx )
+    {
+        // if this sort spec is already identified as a cause in the caught exception,
+        // proceed to use it as is; otherwise, add this expr as the root cause 
+        if( chainedEx != null && isInvalidSortSpec( sortSpec, chainedEx ) )
+            return chainedEx;
+        return newOdaException( message, getInstanceId( sortSpec ), chainedEx );
+    }
+    
+    /**
+     * Indicates whether the specified sort specification is one of the cause(s)
+     * in the specified OdaException chain.
+     * @param sortSpec  a sort specification whose processing might have caused an OdaException
+     * @param rootEx    the root of an OdaException chain caught while processing the sort specification
+     * @return  true if the specified sort specification is one of the cause(s) in the OdaException chain;
+     *          false otherwise
+     */
+    public static boolean isInvalidSortSpec( SortSpecification sortSpec, OdaException rootEx )
+    {
+        if( sortSpec == null )
+            return true;
+        return isCauseOfException( rootEx, getInstanceId( sortSpec ) );
+    }
+    
+    /**
+     * Creates and returns a top-level OdaException to indicate that the 
+     * specified result set specification is the cause of the specified driverEx exception.
+     * @param message   custom exception message
+     * @param resultSetSpec  the invalid ResultSetSpecification to set as the cause
+     * @param driverEx    optional detail OdaException thrown by an ODA driver that has detected 
+     *              the invalid state; may be null
+     * @return  an OdaException chain with the specified invalid result set specification
+     *          identified as the cause
+     * @see {@link #isInvalidResultSetSpec(ResultSetSpecification, OdaException)}
+     */
+    public static OdaException newResultSetSpecException( String message, ResultSetSpecification resultSetSpec, 
+            OdaException chainedEx )
+    {
+        // if this result set spec is already identified as a cause in the caught exception,
+        // proceed to use it as is; otherwise, add this spec as the root cause 
+        if( chainedEx != null && isInvalidResultSetSpec( resultSetSpec, chainedEx ) )
+            return chainedEx;
+        return newOdaException( message, getInstanceId( resultSetSpec ), chainedEx );
+    }
+    
+    /**
+     * Indicates whether the specified result set specification is one of the cause(s)
+     * in the specified OdaException chain.
+     * @param resultSetSpec  a result set specification whose processing might have caused an OdaException
+     * @param rootEx    the root of an OdaException chain caught while processing the result set specification
+     * @return  true if the specified result set specification is one of the cause(s) in the OdaException chain;
+     *          false otherwise
+     */
+    public static boolean isInvalidResultSetSpec( ResultSetSpecification resultSetSpec, OdaException rootEx )
+    {
+        if( resultSetSpec == null )
+            return true;
+        return isCauseOfException( rootEx, getInstanceId( resultSetSpec ) );
+    }
+
+    /**
+     * Creates and returns a top-level OdaException to indicate that the 
+     * specified invalidBaseQuery is the cause of the specified driverEx exception.
+     * @param invalidBaseQuery a {@link BaseQuery} that is invalid
+     * @param driverEx  optional detail OdaException thrown by an ODA driver that has detected 
+     *              the invalid state; may be null
+     * @return  an OdaException chain with the specified invalidBaseQuery
+     *          identified as the cause
+     * @see {@link #isInvalidBaseQuery(BaseQuery, OdaException)}
+     * @since 3.4 (DTP 1.11)
+     */
+    public static OdaException newBaseQueryException( BaseQuery invalidBaseQuery, OdaException driverEx )
+    {
+        return newBaseQueryException( Messages.querySpec_INVALID_BASE_QUERY, invalidBaseQuery, driverEx );
+    }
+    
+    /**
+     * Creates and returns an OdaException with the specified invalidBaseQuery identified as the cause.
+     * @param message   custom exception message
+     * @param invalidBaseQuery    the invalid {@link BaseQuery} to set as the cause
+     * @return  an OdaException with the specified message and invalidBaseQuery
+     *          identified as the cause
+     * @see {@link #isInvalidBaseQuery(BaseQuery, OdaException)}
+     * @since 3.4 (DTP 1.11)
+     */
+    public static OdaException newBaseQueryException( String message, BaseQuery invalidBaseQuery )
+    {
+        return newBaseQueryException( message, invalidBaseQuery, null );
+    }
+    
+    private static OdaException newBaseQueryException( String message, BaseQuery invalidBaseQuery, 
+            OdaException chainedEx )
+    {
+        // if this BaseQuery is already identified as a cause in the caught exception,
+        // proceed to use chainedEx as is; otherwise, add this BaseQuery as the root cause 
+        if( chainedEx != null && isInvalidBaseQuery( invalidBaseQuery, chainedEx ) )
+            return chainedEx;
+        return newOdaException( message, getInstanceId( invalidBaseQuery ), chainedEx );
+    }
+    
+    /**
+     * Indicates whether the specified baseQuery is one of the cause(s)
+     * in the specified OdaException chain.
+     * @param baseQuery    a {@link BaseQuery} whose processing might have caused an OdaException
+     * @param rootEx    the root of an OdaException chain caught while processing the baseQuery
+     * @return  true if the specified baseQuery is one of the cause(s) in the OdaException chain;
+     *          false otherwise
+     * @since 3.4 (DTP 1.11)
+     */
+    public static boolean isInvalidBaseQuery( BaseQuery baseQuery, OdaException rootEx )
+    {
+        if( baseQuery == null )
+            return true;
+        return isCauseOfException( rootEx, getInstanceId( baseQuery ) );
+    }
+
+    private static String getInstanceId( FilterExpression filterExpr )
+    {
+        if( filterExpr == null )
+            return null;
+        return filterExpr.getQualifiedId() + AT_SYMBOL + Integer.toHexString( filterExpr.hashCode() );
+    }
+    
+    private static String getInstanceId( AggregateExpression aggrExpr )
+    {
+        if( aggrExpr == null )
+            return null;
+        return aggrExpr.getName() + AT_SYMBOL + Integer.toHexString( aggrExpr.hashCode() );
+    }
+    
+    private static String getInstanceId( ValueExpression valueExpr )
+    {
+        if( valueExpr == null )
+            return null;
+        return valueExpr.getName() + AT_SYMBOL + Integer.toHexString( valueExpr.hashCode() );
+    }
+    
+    private static String getInstanceId( ResultProjection resultProj )
+    {
+        if( resultProj == null )
+            return null;
+        return resultProj.getClass().getSimpleName() + AT_SYMBOL + Integer.toHexString( resultProj.hashCode() );
+    }
+    
+    private static String getInstanceId( SortSpecification sortSpec )
+    {
+        if( sortSpec == null )
+            return null;
+        return sortSpec.getClass().getSimpleName() + AT_SYMBOL + Integer.toHexString( sortSpec.hashCode() );
+    }
+    
+    private static String getInstanceId( ResultSetSpecification resultSetSpec )
+    {
+        if( resultSetSpec == null )
+            return null;
+        return resultSetSpec.getClass().getSimpleName() + AT_SYMBOL + Integer.toHexString( resultSetSpec.hashCode() );
+    }
+
+    private static String getInstanceId( BaseQuery baseQuery )
+    {
+        if( baseQuery == null )
+            return null;
+        return baseQuery.getName() + AT_SYMBOL + Integer.toHexString( baseQuery.hashCode() );
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/util/package.html b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/util/package.html
new file mode 100644
index 0000000..600d07a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/util/package.html
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2009, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+
+Defines utilities for use with the Open Data Access (ODA) query specification.
+<p>
+
+<!-- Put @see and @since tags down here. -->
+@since 3.3 (DTP 1.8)
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/AtomicValueExpression.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/AtomicValueExpression.java
new file mode 100644
index 0000000..fd7d57e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/AtomicValueExpression.java
@@ -0,0 +1,27 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.valueexpr;
+
+import org.eclipse.datatools.connectivity.oda.spec.ValueExpression;
+
+/**
+ * The abstract base class for all basic, indivisible unit of value expressions
+ * that can be evaluated by itself.
+ * @since 3.2.2 (DTP 1.7.2)
+ */
+public abstract class AtomicValueExpression extends ValueExpression
+{
+ 
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/ColumnValueExpression.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/ColumnValueExpression.java
new file mode 100644
index 0000000..067748f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/ColumnValueExpression.java
@@ -0,0 +1,118 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.valueexpr;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.spec.ValidationContext;
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionVariable.VariableType;
+import org.eclipse.datatools.connectivity.oda.spec.result.ColumnIdentifier;
+import org.eclipse.datatools.connectivity.oda.spec.util.ValidatorUtil;
+
+/**
+ * A concrete value expression whose value is based on 
+ * that of a referenced result set column.
+ * <br>An ODA driver that implements the ODA dynamicResultSet extension point
+ * must support this type of expressions defined in a 
+ * {@link org.eclipse.datatools.connectivity.oda.spec.QuerySpecification}.
+ * @since 3.2.2 (DTP 1.7.2)
+ */
+public class ColumnValueExpression extends AtomicValueExpression
+{
+    private ColumnIdentifier m_columnRef;
+    
+    public ColumnValueExpression( ColumnIdentifier columnRef )
+    {
+        if( columnRef == null )
+            throw new NullPointerException( Messages.bind( Messages.querySpec_NULL_CONSTRUCTOR_ARG, 
+                    ColumnValueExpression.class.getName() ));
+        if( ! columnRef.isValid() )
+            throw new IllegalArgumentException( Messages.bind( Messages.querySpec_ILLEGAL_CONSTRUCTOR_ARG, 
+                    ColumnValueExpression.class.getName() ) );
+        
+        m_columnRef = columnRef;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.ValueExpression#getName()
+     */
+    @Override
+    public String getName()
+    {
+        if( m_columnRef.hasNameExpression() )
+            return m_columnRef.getNameExpression();    // use the column name or expression
+        return m_columnRef.getNumber().toString();  // use the column ordinal value
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.valueexpr.AtomicValueExpression#getVariableType()
+     */
+    @Override
+    public VariableType getVariableType()
+    {
+        return VariableType.RESULT_SET_COLUMN;
+    }
+
+    /**
+     * Gets the referenced column number, if specified. 
+     * @return  column number, or null if not specified
+     */
+    public Integer getColumnNumber()
+    {
+        return getColumnReference().getNumber();
+    }
+
+    /**
+     * Gets the referenced column name or expression.
+     * @return  column name or expression
+     */
+    public String getColumnExpression()
+    {
+        return getColumnReference().getNameExpression();
+    }
+    
+    /**
+     * Gets the column reference of this value expression.
+     * @return 
+     */
+    public ColumnIdentifier getColumnReference()
+    {
+        return m_columnRef;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.ValueExpression#validateSyntax(org.eclipse.datatools.connectivity.oda.spec.ValidationContext)
+     */
+    @Override
+    public void validateSyntax( ValidationContext context ) throws OdaException
+    {
+        if( ! getColumnReference().isValid() )
+            throw ValidatorUtil.newValueExprException( 
+                    Messages.bind( Messages.querySpec_INVALID_COLUMN_IDENTIFIER, getColumnReference() ), 
+                    this );
+    }
+
+    /* (non-Javadoc)
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString()
+    {
+        StringBuffer buffer = new StringBuffer( getName() + SPACE );
+        buffer.append( getColumnReference() );
+        return buffer.toString();
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/CombinedValueExpression.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/CombinedValueExpression.java
new file mode 100644
index 0000000..3822781
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/CombinedValueExpression.java
@@ -0,0 +1,163 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.valueexpr;
+
+import java.sql.Types;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionVariable;
+import org.eclipse.datatools.connectivity.oda.spec.ValidationContext;
+import org.eclipse.datatools.connectivity.oda.spec.ValueExpression;
+
+/**
+ * A complex value expression whose value is resolved by combining
+ * two value expressions with a combined operator.
+ * @since 3.2.2 (DTP 1.7.2)
+ */
+public class CombinedValueExpression extends ValueExpression
+{
+    private ValueExpression m_leftExpr;
+    private ValueExpression m_rightExpr;
+    private CombinedValueExpressionOperator m_operator;
+    
+    public CombinedValueExpression( ValueExpression leftExpr, 
+            CombinedValueExpressionOperator operator, 
+            ValueExpression rightExpr )
+    {
+        if( leftExpr == null || rightExpr == null || operator == null )
+            throw new NullPointerException( Messages.bind( Messages.querySpec_NULL_CONSTRUCTOR_3ARGS, 
+                    new Object[]{CombinedValueExpression.class.getName(),leftExpr, operator, rightExpr} ));
+
+        m_leftExpr = leftExpr;
+        m_rightExpr = rightExpr;
+        m_operator = operator;
+    }
+
+    /**
+     * Returns the left value expression.
+     * @return  an instance of ValueExpression
+     */
+    public ValueExpression getLeftExpression()
+    {
+        return m_leftExpr;
+    }
+
+    /**
+     * Returns the right value expression.
+     * @return an instance of ValueExpression
+     */
+    public ValueExpression getRightExpression()
+    {
+        return m_rightExpr;
+    }
+
+    /**
+     * Returns the combined operator.
+     * @return 
+     */
+    public CombinedValueExpressionOperator getCombinedOperator()
+    {
+        return m_operator;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.ValueExpression#validateSyntax(org.eclipse.datatools.connectivity.oda.spec.ValidationContext)
+     */
+    @Override
+    public void validateSyntax( ValidationContext context ) throws OdaException
+    {
+        m_leftExpr.validateSyntax( context );
+        m_rightExpr.validateSyntax( context );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.ValueExpression#getName()
+     */
+    @Override
+    public String getName()
+    {
+        return m_leftExpr.getName() + 
+        ExpressionVariable.ALIAS_SEPARATOR + 
+        m_operator.getLiteral() + 
+        ExpressionVariable.ALIAS_SEPARATOR + 
+        m_rightExpr.getName();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.ValueExpression#getOdaDataType()
+     */
+    @Override
+    public Integer getOdaDataType()
+    {
+        // no data type explicitly specified
+        if( super.getOdaDataType() != null )
+            return super.getOdaDataType();
+
+        // not a built-in combined operator type
+        if( CombinedValueExpressionOperator.get( m_operator.getId() ) == null )
+            return UNKNOWN_ODA_DATA_TYPE;
+
+        // derive from the combined operator and/or combined expressions
+        // compare operator by id in case it is a custom contributed instance
+        if( m_operator.getId().equals( CombinedValueExpressionOperator.CONCATENATE ) )  // string concatenation
+            return Integer.valueOf( Types.CHAR );
+        
+        Integer leftOdaDataType = m_leftExpr.getOdaDataType();
+        Integer rightOdaDataType = m_rightExpr.getOdaDataType();
+        if( leftOdaDataType == rightOdaDataType || 
+            (leftOdaDataType != null && leftOdaDataType.equals( rightOdaDataType )) )
+            return rightOdaDataType;
+
+        // for remaining built-in combined operator types
+
+        if( leftOdaDataType == null || leftOdaDataType == UNKNOWN_ODA_DATA_TYPE ||
+            rightOdaDataType == null || rightOdaDataType == UNKNOWN_ODA_DATA_TYPE )
+            return UNKNOWN_ODA_DATA_TYPE;
+
+        if( isNumeric( leftOdaDataType ) && isNumeric( rightOdaDataType ) )
+        {
+            int leftOdaDataTypeCode = leftOdaDataType.intValue();
+            int rightOdaDataTypeCode = rightOdaDataType.intValue();
+
+            // combined data type is the most scaled data type of the 2 operands
+            if( leftOdaDataTypeCode == Types.DECIMAL || rightOdaDataTypeCode == Types.DECIMAL )
+                return Integer.valueOf( Types.DECIMAL );
+            if( leftOdaDataTypeCode == Types.DOUBLE || rightOdaDataTypeCode == Types.DOUBLE )
+                return Integer.valueOf( Types.DOUBLE );
+            if( leftOdaDataTypeCode == Types.INTEGER || rightOdaDataTypeCode == Types.INTEGER )
+                return Integer.valueOf( Types.INTEGER );
+        }
+        
+        // TODO - handles other data types besides numeric ones      
+        return UNKNOWN_ODA_DATA_TYPE;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.ValueExpression#toString()
+     */
+    @Override
+    public String toString()
+    {
+        StringBuffer buffer = new StringBuffer( CombinedValueExpression.class.getSimpleName() + SPACE );
+        buffer.append( m_leftExpr.getName() + SPACE + m_operator.getLiteral() + SPACE + m_rightExpr.getName() );
+        buffer.append( "\n     leftExpr=" + LEFT_CURLY_BRACKET + m_leftExpr + RIGHT_CURLY_BRACKET ); //$NON-NLS-1$
+        buffer.append( "\n     operator= " + m_operator ); //$NON-NLS-1$
+        buffer.append( "\n     rightExpr=" + LEFT_CURLY_BRACKET + m_rightExpr + RIGHT_CURLY_BRACKET ); //$NON-NLS-1$
+        return buffer.toString();
+    }
+   
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/CombinedValueExpressionOperator.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/CombinedValueExpressionOperator.java
new file mode 100644
index 0000000..768953f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/CombinedValueExpressionOperator.java
@@ -0,0 +1,188 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.valueexpr;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExecutableExtension;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.CombinedExpressionOperatorDefinition;
+
+/**
+ * Represents the operator that combines two value expressions in a {@link CombinedValueExpression}.
+ * <br>An ODA dynamicResultSet extension declares its support of specific built-in operator types
+ * in the combinedOperatorTypes element in its extension manifest.  
+ * <br>An extension may extend this class to override the literal representation 
+ * of a built-in combined operator, or to implement its custom combined operator type(s). 
+ * A subclass specified in a dynamicResultSet extension manifest must implement IExecutableExtension
+ * with a public 0-arg constructor, and override the #setLiteral and/or #getLiteral methods.
+ * @since 3.2.2 (DTP 1.7.2)
+ */
+public class CombinedValueExpressionOperator implements IExecutableExtension
+{
+    /**
+     * The id of built-in combined operator types.
+     */
+    public static final String ADD = "Add"; //$NON-NLS-1$
+    public static final String SUBTRACT = "Subtract"; //$NON-NLS-1$
+    public static final String MULTIPLY = "Multiply"; //$NON-NLS-1$
+    public static final String DIVIDE = "Divide"; //$NON-NLS-1$
+    public static final String CONCATENATE = "Concatenate"; //$NON-NLS-1$
+
+    /**
+     * Literal instances of built-in combined operator types.
+     */
+    public static final CombinedValueExpressionOperator ADD_LITERAL = new CombinedValueExpressionOperator( ADD, "+" ); //$NON-NLS-1$
+    public static final CombinedValueExpressionOperator SUBTRACT_LITERAL = new CombinedValueExpressionOperator( SUBTRACT, "-" ); //$NON-NLS-1$
+    public static final CombinedValueExpressionOperator MULTIPLY_LITERAL = new CombinedValueExpressionOperator( MULTIPLY, "*" ); //$NON-NLS-1$
+    public static final CombinedValueExpressionOperator DIVIDE_LITERAL = new CombinedValueExpressionOperator( DIVIDE, "/" ); //$NON-NLS-1$
+    public static final CombinedValueExpressionOperator CONCATENATE_LITERAL = new CombinedValueExpressionOperator( CONCATENATE, "+" ); //$NON-NLS-1$
+
+    private static Map<String,CombinedValueExpressionOperator> sm_builtInOperators = null;
+    
+    /**
+     * Returns the literal instance of the specified built-in combined operator type.
+     * @param type  the type code of a built-in combined operator
+     * @return  literal instance of the specified operator type
+     */
+    public static final CombinedValueExpressionOperator get( String builtInOperatorId )
+    {
+        if( sm_builtInOperators == null )
+        {
+            synchronized( CombinedValueExpressionOperator.class )
+            {
+                if( sm_builtInOperators == null )
+                {
+                    sm_builtInOperators = new HashMap<String,CombinedValueExpressionOperator>(5);
+                    sm_builtInOperators.put( ADD, ADD_LITERAL );
+                    sm_builtInOperators.put( SUBTRACT, SUBTRACT_LITERAL );
+                    sm_builtInOperators.put( MULTIPLY, MULTIPLY_LITERAL );
+                    sm_builtInOperators.put( DIVIDE, DIVIDE_LITERAL );
+                    sm_builtInOperators.put( CONCATENATE, CONCATENATE_LITERAL );
+                }
+            }
+        }
+
+        return sm_builtInOperators.get( builtInOperatorId );
+    }
+
+    // instance variables
+    private String m_id;
+    private String m_literal;
+
+    /**
+     * Base class constructor.
+     */
+    protected CombinedValueExpressionOperator( String id, String literal )
+    {
+        setId( id );
+        setLiteral( literal );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.core.runtime.IExecutableExtension#setInitializationData(org.eclipse.core.runtime.IConfigurationElement, java.lang.String, java.lang.Object)
+     */
+    public void setInitializationData( IConfigurationElement config,
+            String propertyName, Object data ) throws CoreException
+    {
+        // default implementation for custom extended class, which may override as needed
+        setId( config );
+        setLiteral( config );
+    }
+
+    /**
+     * Initializes the operator id with the id attribute value specified in a 
+     * supportedOdaCombinedOperator or combinedOperatorType element declared in an extension manifest.
+     * For use by a subclass that implements IExecutableExtension with a public 0-argument constructor.
+     * @param config
+     * @throws CoreException
+     * @see org.eclipse.core.runtime.IExecutableExtension#setInitializationData(org.eclipse.core.runtime.IConfigurationElement, java.lang.String, java.lang.Object)
+     */
+    protected void setId( IConfigurationElement config ) throws CoreException
+    {
+        try
+        {
+            setId( CombinedExpressionOperatorDefinition.getIdAttributeValue( config ) );
+        }
+        catch( OdaException ex )
+        {
+            throw new CoreException( new Status( IStatus.ERROR, config.getNamespaceIdentifier(), ex.getLocalizedMessage(), ex ));
+        }
+    }
+    
+    /**
+     * Initializes the operator's literal symbol with the literal attribute value specified in a 
+     * combinedOperatorType element declared in an extension manifest.
+     * For use by a subclass that implements IExecutableExtension with a public 0-argument constructor.
+     * @param config
+     * @throws CoreException
+     * @see org.eclipse.core.runtime.IExecutableExtension#setInitializationData(org.eclipse.core.runtime.IConfigurationElement, java.lang.String, java.lang.Object)
+     */
+    protected void setLiteral( IConfigurationElement config ) throws CoreException
+    {
+        try
+        {
+            setLiteral( CombinedExpressionOperatorDefinition.getCustomLiteralAttributeValue( config ) );
+        }
+        catch( OdaException ex )
+        {
+            throw new CoreException( new Status( IStatus.ERROR, config.getNamespaceIdentifier(), ex.getLocalizedMessage(), ex ));
+        }
+    }
+
+    protected void setId( String id )
+    {
+        m_id = id;
+    }
+
+    protected void setLiteral( String literal )
+    {
+        m_literal = literal;
+    }
+    
+    /**
+     * Returns the id of this operator.
+     * @return  combined operator id
+     */
+    public String getId()
+    {
+        return m_id;
+    }
+
+    /**
+     * Returns the literal symbol or representation of this operator.
+     * @return  literal representation
+     */
+    public String getLiteral()
+    {
+        return m_literal;
+    }
+
+    /* (non-Javadoc)
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString()
+    {
+        return getClass().getName() + " [id= " + m_id +   //$NON-NLS-1$
+        ", literal= " + m_literal + "]"; //$NON-NLS-1$ //$NON-NLS-2$
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/CustomFunction.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/CustomFunction.java
new file mode 100644
index 0000000..a040850
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/CustomFunction.java
@@ -0,0 +1,305 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.valueexpr;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExecutableExtension;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.spec.IValidator;
+import org.eclipse.datatools.connectivity.oda.spec.ValidationContext;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.FunctionExpressionDefinition;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.ResultExtensionExplorer;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.SupportedDataSetType;
+import org.eclipse.datatools.connectivity.oda.spec.util.ValidatorUtil;
+
+/**
+ * Represents a custom function value expression contributed by an extension of
+ * the org.eclipse.datatools.connectivity.oda.dynamicResultSet extension point.
+ * <br>An ODA dynamicResultSet extension declares its contribution of 
+ * each custom function value expression in a functionExpressionType element 
+ * in its extension manifest.  
+ * @since 3.2.2 (DTP 1.7.2)
+ */
+public class CustomFunction extends FunctionValueExpression implements IExecutableExtension
+{
+    private static final String QUALIFIER_SEPARATOR = "."; //$NON-NLS-1$
+
+    private String m_extensionId;
+    private String m_id;
+    private FunctionExpressionDefinition m_definition;  // expects 1-n-only-1 associated definition
+    private Map<String,Object> m_customData;
+    
+    /*
+     * Base class constructor.
+     * Use ExpressionFactory#createCustomFunction to create a custom function instance.
+     */
+    protected CustomFunction( String extensionId, String id )
+    {
+        super( null );  // initialize with no function arguments
+        m_extensionId = extensionId;
+        m_id = id;
+    }
+    
+    /*
+     * Constructor for use by org.eclipse.core.runtime.IExecutableExtension#createExecutableExtension
+     * to instantiate an extended class.
+     * Use ExpressionFactory#createCustomFunction to create a custom function instance.
+     */
+    protected CustomFunction()
+    {
+        super( null );  // no function arguments
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.core.runtime.IExecutableExtension#setInitializationData(org.eclipse.core.runtime.IConfigurationElement, java.lang.String, java.lang.Object)
+     */
+    public void setInitializationData( IConfigurationElement exprElement,
+            String propertyName, Object data ) throws CoreException
+    {
+        m_extensionId = exprElement.getDeclaringExtension().getUniqueIdentifier();
+        try
+        {
+            m_id = FunctionExpressionDefinition.getIdAttributeValue( exprElement );
+        }
+        catch( OdaException ex )
+        {
+            throw new CoreException( new Status( IStatus.ERROR, exprElement.getContributor().getName(), ex.getLocalizedMessage() ) );
+        }
+    }
+
+    /**
+     * Gets the expression id.  It is unique within the contributing extension.
+     * @return the expression id
+     */
+    public String getId()
+    {
+        return m_id;
+    }
+    
+    /**
+     * Gets the unique id of the dynamicResultSet extension that declares this custom expression type.
+     * @return unique id of declaring extension
+     */
+    public String getDeclaringExtensionId()
+    {
+        return m_extensionId;
+    }
+ 
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.valueexpr.FunctionValueExpression#getQualifiedId()
+     */
+    public String getQualifiedId()
+    {
+        return m_extensionId + QUALIFIER_SEPARATOR + m_id;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.ValueExpression#getName()
+     */
+    @Override
+    public String getName()
+    {
+        FunctionExpressionDefinition defn = getDefinition();
+        if( defn == null )
+            return getId();
+        return defn.getName();
+    }
+
+    /**
+     * Indicates whether this expression can be applied to the specified data set type within the data source type.
+     * @param odaDataSourceId   id of an ODA data source extension
+     * @param odaDataSetId      id of an ODA data set defined within the data source extension
+     * @return  true if this can be applied to the specified data set type; false otherwise
+     */
+    public boolean supportsDataSetType( String odaDataSourceId, String odaDataSetId )
+    {
+        FunctionExpressionDefinition defn = getDefinition();
+        if( defn == null )
+            return false;
+        
+        return defn.supportsDataSetType( odaDataSourceId, odaDataSetId );
+    }
+    
+    /**
+     * Indicates whether this expression can be applied to the specified data set type.
+     * @param dataSetType   an instance of {@link SupportedDataSetType} 
+     * @return  true if this can be applied to the specified ODA data set type; false otherwise
+     */
+    public boolean supportsDataSetType( SupportedDataSetType dataSetType )
+    {
+        if( dataSetType == null )
+            return false;
+        return supportsDataSetType( dataSetType.getOdaDataSourceId(), dataSetType.getOdaDataSetId() );
+    }
+    
+    /**
+     * Indicates whether this function type is capable of ignoring duplicate values of its input argument. 
+     * Default value is false if none is specified in the extension.
+     * @return true if this function type is capable of ignoring duplicate values of its input argument;
+     *          false otherwise 
+     */
+    public boolean canIgnoreDuplicateValues()
+    {
+        FunctionExpressionDefinition defn = getDefinition();
+        return ( defn == null ) ? false : defn.canIgnoreDuplicateValues();
+    }
+
+    /**
+     * Gets the definition of this expression's capabilities and metadata, as registered by the provider 
+     * in its extension of the <i>org.eclipse.datatools.connectivity.oda.dynamicResultSet</i> extension point.
+     * @return  definition of this custom function value expression
+     */
+    public FunctionExpressionDefinition getDefinition()
+    {
+        // obtain from extension manifest explorer by extensionId + id
+        if( m_definition == null )
+        {
+            try
+            {
+                m_definition = ResultExtensionExplorer.getInstance()
+                    .getExtensionFunctionDefinition( getDeclaringExtensionId(), getId() );
+            }
+            catch( OdaException ex )
+            {
+                // TODO log warning
+                return null;
+            }
+        }
+        return m_definition;
+    }
+    
+    /**
+     * Gets the value of an extension-defined property of the specified name.
+     * An extension contributor may have arbitrary objects associated with an expression. 
+     * @param key   the name of property
+     * @return      the value of the named property, or null if it has not been set
+     */
+    public Object getData( String key )
+    {
+        if( m_customData == null )
+            return null;
+        return m_customData.get( key );
+    }
+
+    /**
+     * Sets the value of an extension-defined property of the specified name.
+     * An extension contributor may use this to associate arbitrary objects with an expression.
+     * @param key   the name of property
+     * @param value the new value of the named property
+     */
+    public void setData( String key, Object value )
+    {
+        if( m_customData == null )
+            m_customData = new HashMap<String,Object>();
+        m_customData.put( key, value );
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.ValueExpression#validateSyntax(org.eclipse.datatools.connectivity.oda.spec.ValidationContext)
+     */
+    public void validateSyntax( ValidationContext context ) throws OdaException
+    {
+        try
+        {
+            FunctionExpressionDefinition defn = getDefinition();
+            if( defn == null )
+                throw new OdaException( 
+                        Messages.bind( Messages.querySpec_NON_DEFINED_CUSTOM_FUNC, getName() ));
+            
+            validateSyntax( context, defn );     
+
+            // pass to custom validator, if exists, for further validation
+            IValidator customValidator = getValidator( context, defn );
+            if( customValidator != null )
+                customValidator.validateSyntax( this, context );
+        }
+        catch( OdaException ex )
+        {
+            throw ValidatorUtil.newValueExprException( this, ex );
+        }                
+    }
+
+    /**
+     * Validates that this expression meets the restriction specified
+     * by the expression definition. 
+     * @param defn
+     * @throws OdaException  if validation fails
+     */
+    protected void validateSyntax( ValidationContext context, FunctionExpressionDefinition defn ) throws OdaException
+    {
+        assert( defn != null );
+        
+        // validate number of associated arguments
+        int numArgs = getArguments().valueCount();
+
+        int minArgs = defn.getMinArguments().intValue();
+        if( numArgs < minArgs )
+            throw newValueExprException( 
+                    Messages.bind( Messages.querySpec_CUSTOM_FUNC_LESS_THAN_MIN_ARGS,
+                                new Object[]{ getName(), Integer.valueOf(numArgs), Integer.valueOf(minArgs) } ));
+
+        if( ! defn.supportsUnboundedMaxArguments() ) // no unbounded upper limit, validate max arguments
+        {
+            int maxArgs = defn.getMaxArguments().intValue();
+            if( numArgs > maxArgs )
+                throw newValueExprException( 
+                    Messages.bind( Messages.querySpec_CUSTOM_FUNC_EXCEED_MAX_ARGS, 
+                                new Object[]{ getName(), Integer.valueOf(numArgs), Integer.valueOf(maxArgs) } ) );
+        }       
+        
+        // validates the capabilities
+        if( ignoresDuplicateValues() && ! defn.canIgnoreDuplicateValues() )
+            throw newValueExprException( 
+                    Messages.bind( Messages.querySpec_CUSTOM_FUNC_INCOMPATIBLE_DUPL_CHECK, getName() ) ); 
+        
+        // up to custom validator to validate the data type of function arguments
+    }
+
+    protected OdaException newValueExprException( String message )
+    {
+        return ValidatorUtil.newValueExprException( message, this );
+    }
+   
+    protected IValidator getValidator( ValidationContext context, FunctionExpressionDefinition defn )
+    {
+        // try use the validator in the context, if available
+        if( context != null && context.getValidator() != null )
+            return context.getValidator();
+
+        // use validator in the definition, if specified
+        try
+        {
+            if( defn != null )
+                return defn.getValidator();
+        }
+        catch( OdaException ex )
+        {
+            // TODO log warning
+        }
+
+        return null;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/FunctionValueExpression.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/FunctionValueExpression.java
new file mode 100644
index 0000000..cd079ca
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/FunctionValueExpression.java
@@ -0,0 +1,137 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2013 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.valueexpr;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionArguments;
+import org.eclipse.datatools.connectivity.oda.spec.ValidationContext;
+
+/**
+ * The abstract base class for all ODA function value expressions.
+ * <p>
+ * A value expression may be validated by an {@link org.eclipse.datatools.connectivity.oda.spec.IValidator} implemented
+ * by an extension of the org.eclipse.datatools.connectivity.oda.dynamicResultSet extension point.
+ * </p>
+ * @since 3.2.2 (DTP 1.7.2)
+ */
+public abstract class FunctionValueExpression extends AtomicValueExpression
+{
+    protected static final String ARG_SEPARATOR = ", "; //$NON-NLS-1$
+    
+    private ExpressionArguments m_args;     // function arguments
+    private boolean m_ignoresDups = false;
+
+    protected FunctionValueExpression( ExpressionArguments args )
+    {
+        if( args != null )
+            setArguments( args );
+    }
+
+    /**
+     * Returns the qualified id of this expression type.
+     * @return  qualified id
+     */
+    public String getQualifiedId()
+    {
+        return getClass().getName();
+    }
+
+    public ExpressionArguments getArguments()
+    {
+        if( m_args == null )
+            m_args = new ExpressionArguments();     // an empty arguments instance
+        return m_args;
+    }
+
+    public void setArguments( ExpressionArguments mArgs )
+    {
+        m_args = mArgs;
+    }
+
+    /**
+     * Indicates whether this function should ignore duplicate values 
+     * of its input variable(s).
+     * @return  true to ignore; false otherwise
+     */
+    public boolean ignoresDuplicateValues()
+    {
+        return m_ignoresDups;
+    }
+
+    /**
+     * Specifies whether this function to ignore duplicate values 
+     * of its input variable(s).
+     * @param ignoresDups true to ignore; false otherwise
+     */
+    public void setIgnoreDuplicateValues( boolean ignoresDups )
+    {
+        m_ignoresDups = ignoresDups;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.ValueExpression#getOdaDataType()
+     */
+    @Override
+    public Integer getOdaDataType()
+    {
+        Integer functionDataType = super.getOdaDataType();
+
+        // no data type explicitly specified, try derive from the function arguments, if exists
+        if( (functionDataType == null || functionDataType == UNKNOWN_ODA_DATA_TYPE)
+                && getArguments().hasValues() )
+        {
+            Integer derivedDataType = functionDataType;
+            int numArgs = getArguments().valueCount();
+            for( int i=0; i < numArgs; i++ )
+            {
+                Integer argDataType = getArguments().getValueExpression(i).getOdaDataType();
+                if( argDataType != null )
+                {
+                    // another argument has a different data type
+                    if( derivedDataType != null && derivedDataType != argDataType)
+                        return functionDataType;        // not able to derive data type from arguments
+                    derivedDataType = argDataType;
+                }
+            }
+            return derivedDataType;
+        }
+        
+        return functionDataType;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.ValueExpression#validateSyntax(org.eclipse.datatools.connectivity.oda.spec.ValidationContext)
+     */
+    @Override
+    public void validateSyntax( ValidationContext context ) throws OdaException
+    {
+        // TODO Auto-generated method stub
+        
+    }
+
+    /* (non-Javadoc)
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString()
+    {
+        StringBuffer buffer = new StringBuffer( getQualifiedId() );
+        buffer.append( "\n    ( function " ); //$NON-NLS-1$
+        buffer.append( getArguments() );
+        buffer.append( " )" ); //$NON-NLS-1$
+        return buffer.toString();
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/InternalValueExprFactory.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/InternalValueExprFactory.java
new file mode 100644
index 0000000..9d920cb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/InternalValueExprFactory.java
@@ -0,0 +1,32 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.valueexpr;
+
+/**
+ *  Internal factory of package classes. 
+ */
+public class InternalValueExprFactory
+{
+    public static CustomFunction createCustomFunction( String extensionId, String id )
+    {
+        return new CustomFunction( extensionId, id );
+    }
+    
+    public static CombinedValueExpressionOperator createCombinedOperator( String id, String literal )
+    {
+        return new CombinedValueExpressionOperator( id, literal );
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/NestedValueExpression.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/NestedValueExpression.java
new file mode 100644
index 0000000..c701aee
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/NestedValueExpression.java
@@ -0,0 +1,93 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.valueexpr;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.spec.ValidationContext;
+import org.eclipse.datatools.connectivity.oda.spec.ValueExpression;
+
+/**
+ * A complex value expression with a nested expression.
+ * @since 3.2.2 (DTP 1.7.2)
+ */
+public class NestedValueExpression extends ValueExpression
+{
+    private static final String NAME_PREFIX = "NESTED_"; //$NON-NLS-1$
+    
+    private ValueExpression m_nestedExpr;
+    
+    public NestedValueExpression( ValueExpression nestedExpr )
+    {
+        if( nestedExpr == null )
+            throw new NullPointerException( Messages.bind( Messages.querySpec_NULL_CONSTRUCTOR_ARG, 
+                    NestedValueExpression.class.getName() ) );
+        
+        m_nestedExpr = nestedExpr;
+    }
+
+    /**
+     * Returns the nested value expression.
+     * @return 
+     */
+    public ValueExpression getNestedExpression()
+    {
+        return m_nestedExpr;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.ValueExpression#validateSyntax(org.eclipse.datatools.connectivity.oda.spec.ValidationContext)
+     */
+    @Override
+    public void validateSyntax( ValidationContext context ) throws OdaException
+    {
+        m_nestedExpr.validateSyntax( context );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.ValueExpression#getName()
+     */
+    @Override
+    public String getName()
+    {
+        return NAME_PREFIX + m_nestedExpr.getName();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.ValueExpression#getOdaDataType()
+     */
+    @Override
+    public Integer getOdaDataType()
+    {
+        // no data type explicitly specified, derive from the nested expression
+        if( super.getOdaDataType() == null )
+            return m_nestedExpr.getOdaDataType();
+        
+        return super.getOdaDataType();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.ValueExpression#toString()
+     */
+    @Override
+    public String toString()
+    {
+        StringBuffer buffer = new StringBuffer( NestedValueExpression.class.getSimpleName() + SPACE + LEFT_PARANTHESIS );
+        buffer.append( m_nestedExpr.getName() + RIGHT_PARANTHESIS );
+        buffer.append( "\n      nestedExpr=" + LEFT_CURLY_BRACKET + m_nestedExpr + RIGHT_CURLY_BRACKET ); //$NON-NLS-1$
+        return buffer.toString();
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/SimpleValueExpression.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/SimpleValueExpression.java
new file mode 100644
index 0000000..52d4766
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/SimpleValueExpression.java
@@ -0,0 +1,99 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.valueexpr;
+
+import java.sql.Types;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.spec.ValidationContext;
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionVariable.VariableType;
+import org.eclipse.datatools.connectivity.oda.util.manifest.DataTypeMapping;
+
+/**
+ * A concrete value expression associated with an object as its value.
+ * The associated value object will be simply processed as is.
+ * <br>An ODA driver that implements the ODA dynamicResultSet extension point
+ * must support this type of expressions defined in a 
+ * {@link org.eclipse.datatools.connectivity.oda.spec.QuerySpecification}.
+ * @since 3.2.2 (DTP 1.7.2)
+ */
+public class SimpleValueExpression extends AtomicValueExpression
+{
+    private Object m_value;
+
+    public SimpleValueExpression( Object value )
+    {
+        m_value = value;
+        setOdaDataType( getValueOdaDataType( value ) );
+    }
+    
+    /**
+     * Returns the value of this simple expression.
+     * @return  expression value; may be null
+     */
+    public Object getValue()
+    {
+        return m_value;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.ValueExpression#getName()
+     */
+    @Override
+    public String getName()
+    {
+        return String.valueOf( m_value );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.valueexpr.AtomicValueExpression#getVariableType()
+     */
+    @Override
+    public VariableType getVariableType()
+    {
+        return ( m_value instanceof String ) ? VariableType.QUERY_EXPRESSION : VariableType.INSTANCE_OF;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.ValueExpression#validateSyntax(org.eclipse.datatools.connectivity.oda.spec.ValidationContext)
+     */
+    @Override
+    public void validateSyntax( ValidationContext context ) throws OdaException
+    {
+        // no validation is done; expression value is used as is
+    }
+
+    private static Integer getValueOdaDataType( Object exprValue )
+    {
+        // derive the ODA data type from the type of object value
+        int odaDataTypeCode = DataTypeMapping.getOdaDataTypeCodeOfObject( exprValue );
+        return ( odaDataTypeCode == Types.NULL ) ? 
+                UNKNOWN_ODA_DATA_TYPE : 
+                Integer.valueOf( odaDataTypeCode );
+    }
+
+    /* (non-Javadoc)
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString()
+    {
+        StringBuffer buffer = new StringBuffer( getClass().getSimpleName() + SPACE );
+        buffer.append( "value: " + (getValue() == null ? SPACE : getValue().getClass().getSimpleName()) ); //$NON-NLS-1$
+        buffer.append( SPACE + getName() );
+        return buffer.toString();
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/package.html b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/package.html
new file mode 100644
index 0000000..e3322b1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/spec/valueexpr/package.html
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2009, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+
+Defines the specialized Value Expression classes for use in the Open Data Access (ODA) query specification. 
+<p>
+
+<!-- Put @see and @since tags down here. -->
+@since 3.3 (DTP 1.8)
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/.gitignore b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/.gitignore
new file mode 100644
index 0000000..6344838
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/.gitignore
@@ -0,0 +1,2 @@
+OdaResources_*_*.java
+vssver.*
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/ResourceIdentifiers.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/ResourceIdentifiers.java
new file mode 100644
index 0000000..bc7024e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/ResourceIdentifiers.java
@@ -0,0 +1,534 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2008, 2014 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.util;
+
+import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.net.URI;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.logging.Logger;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+/**
+ *  Represents the resource identifiers of an ODA consumer application.
+ *  An ODA consumer application may optionally specify its resource identifiers in an instance,
+ *  and pass it to an ODA runtime driver in an application context map.
+ *  An application context map is normally passed through the ODA runtime interfaces' setAppContext method(s).
+ *  Its support and usage by an individual ODA runtime driver is optional and implementation-dependent.
+ *  @since 3.2 (DTP 1.7)
+ */
+public class ResourceIdentifiers
+{
+    /**
+     * A pre-defined key to associate an instance of ResourceIdentifiers in an application context map.
+     */
+    public static final String ODA_APP_CONTEXT_KEY_CONSUMER_RESOURCE_IDS = 
+        "org.eclipse.datatools.connectivity.oda.util_" + "consumerResourceIds"; //$NON-NLS-1$ //$NON-NLS-2$
+    
+    private static final String APPL_RESOURCE_TYPE = "ApplResourceType"; //$NON-NLS-1$
+    private static final String DESIGN_RESOURCE_TYPE = "DesignResourceType"; //$NON-NLS-1$
+    private static final String EMPTY_STRING = ""; //$NON-NLS-1$
+
+    private static String sm_loggerName = ResourceIdentifiers.class.getName();
+    private static Logger sm_logger = Logger.getLogger( sm_loggerName );
+    
+    private HashMap<String, URILocator> m_uriLocators;
+
+    /**
+     * A convenience method to obtain the ResourceIdentifiers instance stored in 
+     * the specified application context Map with the pre-defined key.
+     * @param appContext    an application context Map
+     * @return  a ResourceIdentifiers instance, normally set by an ODA consumer application;
+     *          may be null if none is available
+     * @since 3.3.2 (DTP 1.9)
+     */
+    public static ResourceIdentifiers get( Object appContext )
+    {
+        if( !(appContext instanceof Map) )
+            return null;
+        Object mapValue = ((Map<?,?>)appContext).get( ODA_APP_CONTEXT_KEY_CONSUMER_RESOURCE_IDS );
+        return ( mapValue instanceof ResourceIdentifiers ) ? 
+                (ResourceIdentifiers)mapValue : null;
+    }
+    
+    public ResourceIdentifiers()
+    {
+        m_uriLocators = new HashMap<String, URILocator>(2);
+    }
+
+    /**
+     * A convenience method for a client to invoke the method {@link #resolveApplResource(URI)}
+     * on the specified ResourceIdentifiers instance.  
+     * This supports the use case where the class of the specified instance 
+     * is not accessible by this class loader(s).
+     * @param instance  an instance of {@link ResourceIdentifiers}
+     * @param uri   the URI to be resolved against the application resource base URI
+     * @return      the resulting URI
+     * @since 3.3.3 (DTP 1.9.2)
+     * @see #resolveApplResource(URI)
+     */
+    public static URI resolveApplResource( Object instance, URI uri )
+    {
+        if( instance == null )   // not available
+            return null;    // unable to resolve the specified URI
+        
+        final String instMethodName = "resolveApplResource"; //$NON-NLS-1$
+        URI resolvedFilePathURI = (instance instanceof ResourceIdentifiers) ?
+                ((ResourceIdentifiers)instance).resolveApplResource( uri ) :
+                    // use reflection to invoke the method
+                ReflectionHelper.invokeResolveMethod( instance, instMethodName, uri );
+        
+        return resolvedFilePathURI;
+    }
+
+    /**
+     * A convenience method for a client to invoke the method {@link #getApplResourceBaseURI()}
+     * on the specified ResourceIdentifiers instance.  
+     * This supports the use case where the class of the specified instance 
+     * is not accessible by this class loader(s).
+     * @param instance  an instance of {@link ResourceIdentifiers}
+     * @return      the resulting URI
+     * @since 3.3.3 (DTP 1.9.2)
+     * @see {@link #getApplResourceBaseURI()}
+     */
+    public static URI getApplResourceBaseURI( Object instance )
+    {
+        if( instance == null )   // not available
+            return null;    // unable to resolve the specified URI
+        
+        final String instMethodName = "getApplResourceBaseURI"; //$NON-NLS-1$
+        URI resourceBaseURI = (instance instanceof ResourceIdentifiers) ?
+                ((ResourceIdentifiers)instance).getApplResourceBaseURI() :
+                    // use reflection to invoke method
+                 ReflectionHelper.invokeGetURIMethod( instance, instMethodName );
+        
+        return resourceBaseURI;
+    }
+
+    /**
+     * Resolves the specified URI against the base URI of an ODA consumer application's 
+     * general purpose resources.
+     * It uses the application resource URI Locator registered by an ODA consumer application 
+     * to resolve an application resource URI.
+     * @param uri   the URI to be resolved against the application resource base URI
+     * @return      the resulting URI
+     * @since DTP 1.7
+     */
+    public URI resolveApplResource( URI uri )
+    {
+        return resolveResourceURI( APPL_RESOURCE_TYPE, uri );
+    }
+    
+    /**
+     * Returns the base URI of general purpose resources of an ODA consumer application.
+     * The returned URI is application-dependent, and may be not well defined. 
+     * In such case, the client should use {@link #resolveApplResource(URI)} or
+     * get the URI locator in {@link #getApplResourceURILocator()} to resolve a relative URI reference.
+     * @return  base URI; may be null
+     * @see #resolveApplResource(URI)
+     * @see #getApplResourceURILocator()
+     */
+    public URI getApplResourceBaseURI()
+    {
+        return getResourceBaseURI( APPL_RESOURCE_TYPE );
+    }
+
+    /**
+     * Specifies the base URI of general purpose resources of an ODA consumer application.
+     * It registers an {@link URILocator} that can be used by a client
+     * to resolve a resource URI against the specified baseURI.
+     * Any previously registered application resource URILocator and its base URI is replaced.
+     * @param baseURI   base URI; may be null
+     * @see #registerApplResourceURILocator(URILocator)
+     */
+    public void setApplResourceBaseURI( URI baseURI )
+    {
+        setResourceBaseURI( APPL_RESOURCE_TYPE, baseURI );
+    }
+
+    /**
+     * Returns the URI Locator registered by an ODA consumer application for its application resources.
+     * A custom ODA designer may use the URI locator to resolve an application resource URI.
+     * @return  application resource URI locator; may be null if none is available
+     * @see #getApplResourceBaseURI()
+     */
+    public URILocator getApplResourceURILocator()
+    {
+        return getResourceURILocator( APPL_RESOURCE_TYPE );
+    }
+
+    /**
+     * Registers an URILocator defined by an ODA consumer application for its application resources.
+     * Replaces any previously registered application resources URILocator and its base URI.
+     * @param uriLocator    an application resource URI locator
+     * @see #setApplResourceBaseURI(URI)
+     */
+    public void registerApplResourceURILocator( URILocator uriLocator )
+    {
+        registerResourceURILocator( APPL_RESOURCE_TYPE, uriLocator );
+    }
+
+    /**
+     * A convenience method for a client to invoke the method {@link #resolveDesignResource(URI)}
+     * on the specified ResourceIdentifiers instance.  
+     * This supports the use case where the class of the specified instance 
+     * is not accessible by this class loader(s).
+     * @param instance  an instance of {@link ResourceIdentifiers}
+     * @param uri   the URI to be resolved against the design resource base URI
+     * @return      the resulting URI
+     * @since 3.3.3 (DTP 1.9.2)
+     * @see #resolveDesignResource(URI)
+     */
+    public static URI resolveDesignResource( Object instance, URI uri )
+    {
+        if( instance == null )   // not available
+            return null;    // unable to resolve the specified URI
+        
+        final String instMethodName = "resolveDesignResource"; //$NON-NLS-1$
+        URI resolvedFilePathURI = (instance instanceof ResourceIdentifiers) ?
+                ((ResourceIdentifiers)instance).resolveDesignResource( uri ) :
+                    // use reflection to invoke method
+                 ReflectionHelper.invokeResolveMethod( instance, instMethodName, uri );
+        
+        return resolvedFilePathURI;
+    }
+
+    /**
+     * A convenience method for a client to invoke the method {@link #getDesignResourceBaseURI()}
+     * on the specified ResourceIdentifiers instance.  
+     * This supports the use case where the class of the specified instance 
+     * is not accessible by this class loader(s).
+     * @param instance  an instance of {@link ResourceIdentifiers}
+     * @return      the resulting URI
+     * @since 3.3.3 (DTP 1.9.2)
+     * @see {@link #getDesignResourceBaseURI()}
+     */
+    public static URI getDesignResourceBaseURI( Object instance )
+    {
+        if( instance == null )   // not available
+            return null;    // unable to resolve the specified URI
+        
+        final String instMethodName = "getDesignResourceBaseURI"; //$NON-NLS-1$
+        URI resourceBaseURI = (instance instanceof ResourceIdentifiers) ?
+                ((ResourceIdentifiers)instance).getDesignResourceBaseURI() :
+                    // use reflection to invoke method
+                 ReflectionHelper.invokeGetURIMethod( instance, instMethodName );
+        
+        return resourceBaseURI;
+    }
+
+    /**
+     * Resolves the specified URI against the base URI of an ODA consumer application's design resources.
+     * It uses the design resource URI Locator registered by an ODA consumer application 
+     * to resolve a design resource URI.
+     * @param uri   the URI to be resolved against the design resource base URI
+     * @return      the resulting URI
+     * @since DTP 1.7
+     */
+    public URI resolveDesignResource( URI uri )
+    {
+        return resolveResourceURI( DESIGN_RESOURCE_TYPE, uri );
+    }
+    
+    /**
+     * Returns the base URI of the design resources of an ODA consumer application.
+     * The definition of a design resource is dependent on individual consumer application.
+     * The returned URI is application-dependent, and may be not well defined. 
+     * In such case, the client should use {@link #resolveDesignResource(URI)} or
+     * get the URI locator in {@link #getDesignResourceURILocator()} to resolve a relative URI reference.
+     * @return  base URI reference; may be null
+     * @see #resolveDesignResource(URI)
+     * @see #getDesignResourceURILocator()
+     */
+    public URI getDesignResourceBaseURI()
+    {
+        return getResourceBaseURI( DESIGN_RESOURCE_TYPE );
+    }
+
+    /**
+     * Specifies the base URI of the design resources of an ODA consumer application.
+     * The definition of a design resource is dependent on individual consumer application.
+     * It registers an {@link URILocator} that can be used by a client
+     * to resolve a resource URI against the specified baseURI.
+     * Any previously registered design resource URILocator and its base URI is replaced.
+     * @param baseURI  base URI; may be null
+     * @see #registerDesignResourceURILocator(URILocator)
+     */
+    public void setDesignResourceBaseURI( URI baseURI )
+    {
+        setResourceBaseURI( DESIGN_RESOURCE_TYPE, baseURI );
+    }
+
+    /**
+     * Returns the URI Locator registered by an ODA consumer application for its design resources.
+     * A custom ODA designer may use the URI locator to resolve a design resource URI.
+     * @return  design resource URI locator; may be null if none is available
+     * @see #getDesignResourceBaseURI()
+     */
+    public URILocator getDesignResourceURILocator()
+    {
+        return getResourceURILocator( DESIGN_RESOURCE_TYPE );
+    }
+
+    /**
+     * Registers a URILocator defined by an ODA consumer application for its design resources.
+     * Replaces any previously registered design resources URILocator and its base URI.
+     * @param uriLocator    a design resource URI locator
+     * @see #setDesignResourceBaseURI(URI)
+     */
+    public void registerDesignResourceURILocator( URILocator uriLocator )
+    {
+        registerResourceURILocator( DESIGN_RESOURCE_TYPE, uriLocator );
+    }
+
+    private URI getResourceBaseURI( String resourceType )
+    {
+        URILocator locator = getResourceURILocator( resourceType );
+        return ( locator != null ) ? locator.getBaseURI() : null;
+    }
+    
+    private void setResourceBaseURI( String resourceType, URI baseURI )
+    {
+        // create a new URILocator with the specified baseURI to
+        // replace any previously registered URILocator and its base URI
+        URILocator locator = createURILocator( baseURI );
+        registerResourceURILocator( resourceType, locator );
+    }
+    
+    private URI resolveResourceURI( String resourceType, URI uri )
+    {
+        URILocator locator = getResourceURILocator( resourceType );
+        return ( locator != null ) ? locator.resolve( uri ) : uri;
+    }
+
+    private URILocator getResourceURILocator( String resourceType )
+    {
+        return m_uriLocators.get( resourceType );
+    }
+
+    private void registerResourceURILocator( String resourceType, URILocator uriLocator )
+    {
+        m_uriLocators.put( resourceType, uriLocator );
+    }
+
+    /**
+     * Creates an URILocator based on the specified base URI.
+     * An ODA consumer application may extend to create a custom URILocator.
+     * @param baseURI  base URI; may be null
+     * @return  a new instance of URILocator based on the specified base URI
+     */
+    protected URILocator createURILocator( URI baseURI )
+    {
+        return new URILocator( baseURI );
+    }
+    
+    /**
+     * Converts and resolves the specified resource location path to a URI, based on the 
+     * registered resource URILocator and its base URI.  
+     * This will first attempt to use the application resources URILocator, if exists;
+     * otherwise, its design resources URILocator is used.
+     * @param resourcePath  the path to be encoded and resolved to a URI;
+     *              may be an absolute or relative path
+     * @return  resolved URI; may be null if not able to resolve
+     * @since 3.3.2 (DTP 1.9)
+     */
+    public URI resolveResourceLocation( String resourcePath )
+    {
+        // use the application resource locator, if available, to resolve runtime location;
+        // otherwise, use the design resource locator if available
+        URILocator locator = getApplResourceURILocator();
+        if( locator == null )
+            locator = getDesignResourceURILocator();
+        return locator != null ?
+                    locator.resolve( resourcePath ) : 
+                    null;     // not able to resolve    
+    }
+
+    /**
+     * Encode non-US-ASCII characters in specified file path into an URI.
+     * @param filePath  the string representation of a file, 
+     * @return  the encoded URI, or null if unable to encode
+     * @since 3.3.3 (DTP 1.9.2)
+     */
+    public static URI encodeToURI( String filePath )
+    {
+        try
+        {
+            // use URI encoding implementation;
+            String encodedLocation = new File( filePath ).toURI( ).toASCIIString( );
+            String target =  new File( EMPTY_STRING ).toURI( ).toASCIIString( );
+            // strip out the interim root path added by the file conversion
+            encodedLocation = encodedLocation.replace( target, EMPTY_STRING );
+            return new URI( encodedLocation );
+        }
+        catch( Exception ex )
+        {
+            // log and ignore
+            sm_logger.info( "encodeToURI(String): " + ex.toString() );  //$NON-NLS-1$
+        }
+        return null;
+    }
+
+    /**
+     * The default locator of a resource URI relative to a specified base URI.
+     * An ODA consumer application may extend to customize how it proposes to
+	 * resolve a relative URI reference against its resource base URI.
+     * An ODA data provider may use the locator to resolve a resource's relative URI;
+     * or if the application-dependent base URI is well defined, get the base URI 
+     * for its own processing.
+     */
+    public class URILocator
+    {
+        private URI m_baseURI;
+        
+        public URILocator( URI baseURI )
+        {
+            m_baseURI = baseURI;
+        }
+        
+        public URI getBaseURI()
+        {
+            return m_baseURI;
+        }
+        
+        public URI resolve( URI uri )
+        {
+            return resolveImpl( uri );
+        }
+        
+        /** 
+         * Resolves the specified string to a URI.
+         * @param str   the string to be encoded and parsed into a URI
+         * @return  resolved URI; may be null if not able to resolve
+         * @since 3.3.2 (DTP 1.9)
+         */
+        public URI resolve( String str )
+        {
+            URI uri = encodeToURI( str );
+            return resolve( uri );
+        }
+        
+        protected URI resolveImpl( URI uri )
+        {
+            if( m_baseURI == null || uri == null )
+                return uri;
+            return m_baseURI.resolve( uri );
+        }
+    }
+    
+    /*
+     * Internal helper to invoke method(s) by reflection.
+     */
+    private static class ReflectionHelper
+    {
+        private static URI invokeResolveMethod( Object instance, String methodName, URI argValue ) 
+        {
+            Method resolveMethod = getMethod( instance, methodName, URI.class );
+            if( resolveMethod != null )
+            {
+                Object returnValue = null;
+                try
+                {
+                    returnValue = invokeMethod( instance, resolveMethod, argValue );
+                    if( returnValue instanceof URI )
+                        return (URI)returnValue;
+                }
+                catch( OdaException ex )
+                {
+                    sm_logger.fine( "Unable to invoke method (" + methodName +  //$NON-NLS-1$
+                            ") on the specified ResourceIdentifiers instance: " + ex.getMessage() );   //$NON-NLS-1$
+                }
+            }
+            return null;  
+        }
+
+        private static URI invokeGetURIMethod( Object instance, String methodName ) 
+        {
+            Method resolveMethod = getMethod( instance, methodName, null );
+            if( resolveMethod != null )
+            {
+                Object returnValue = null;
+                try
+                {
+                    returnValue = invokeMethod( instance, resolveMethod, null );
+                    if( returnValue instanceof URI )
+                        return (URI)returnValue;
+                }
+                catch( OdaException ex )
+                {
+                    sm_logger.fine( "Unable to invoke method (" + methodName +  //$NON-NLS-1$
+                            ") on the specified ResourceIdentifiers instance: " + ex.getMessage() );   //$NON-NLS-1$
+                }
+            }
+            return null;  
+        }
+                        
+        private static Method getMethod( Object instance, String methodName, Class<?> argClazz )
+        {
+            if( instance == null )
+                return null;
+            
+            try
+            {
+                if( argClazz == null )
+                    return instance.getClass().getMethod( methodName );
+                else
+                    return instance.getClass().getMethod( methodName, argClazz );
+            }
+            catch( SecurityException ex )
+            {
+                sm_logger.fine( "Unable to get method (" + methodName +  //$NON-NLS-1$
+                        ") from the specified ResourceIdentifiers instance: " + ex.getMessage() );   //$NON-NLS-1$
+            }
+            catch( NoSuchMethodException ex )
+            {
+                sm_logger.fine( "Unable to get method (" + methodName +  //$NON-NLS-1$
+                        ") from the specified ResourceIdentifiers instance: " + ex.getMessage() );   //$NON-NLS-1$
+            }            
+            return null;
+        }
+        
+        private static Object invokeMethod( Object instance, Method method, Object argValue )
+            throws OdaException
+        {
+            if( instance == null || method == null )
+                throw new OdaException( new IllegalArgumentException( "Null" ) ); //$NON-NLS-1$
+
+            try
+            {
+                if( argValue == null )
+                    return method.invoke( instance );
+                else
+                    return method.invoke( instance, argValue );
+            }
+            catch ( IllegalArgumentException ex )
+            {
+                throw new OdaException( ex );
+            }
+            catch ( IllegalAccessException ex )
+            {
+                throw new OdaException( ex );
+            }
+            catch ( InvocationTargetException ex )
+            {
+                throw new OdaException( ex );
+            }
+        }
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/StringSubstitutionUtil.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/StringSubstitutionUtil.java
new file mode 100644
index 0000000..fdf5917
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/StringSubstitutionUtil.java
@@ -0,0 +1,806 @@
+/*
+ ******************************************************************************
+ * Copyright (c) 2004, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *     
+ ******************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.util;
+
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+
+/**
+ * StringSubstitutionUtil is a general utility that any ODA provider can use, 
+ * which performs string substitutions.  The utility is designed for ODA 
+ * data sources that has a concept of embedded delimited strings in text strings.  
+ * For example, an ODA driver query text could contain embedded parameters in the 
+ * form of a colon followed by a parameter name, like ":myVariable".  Two forms of 
+ * string substitutions are supported by the utility: subsitution by index 
+ * or by name.
+ */
+public final class StringSubstitutionUtil 
+{	
+	private StringSubstitutionUtil()
+	{
+		// class is not meant to be instantiated
+	}
+
+	//---------------------------------------------------------------
+	// For logging purposes
+	//---------------------------------------------------------------
+	
+	private static String sm_loggerName = StringSubstitutionUtil.class.getName();;
+	private static Logger sm_logger = Logger.getLogger( sm_loggerName );
+	
+	/**
+	 * Sets the <code>StringSubstitutionUtil</code> logger to log its 
+	 * utility methods.
+	 * @param logger	the logger that <code>StringSubstitutionUti</code> 
+	 * 					uses to log its methods.
+	 */
+	public static void setLogger( Logger logger )
+	{
+		sm_logger = logger;
+	}
+	
+	/**
+	 * Resets the <code>StringSubstitutionUtil</code> logger.  The caller 
+	 * of <code>setLogger</code> should call this to remove its logger from 
+	 * the <code>StringSubstituionUtil</code>.  Otherwise, subsequent calls 
+	 * to this utility's methods by other callers may be logged in the 
+	 * set logger.
+	 */
+	public static void resetLogger()
+	{
+		sm_logger = null;
+	}
+	
+	private static void log( String message )
+	{
+		if( sm_logger != null )
+			sm_logger.log( Level.FINEST, message );
+	}
+	
+	private static void log( Throwable thrown )
+	{
+		if( sm_logger != null )
+			sm_logger.log( Level.WARNING, thrown.getLocalizedMessage(),
+			        		thrown );
+	}
+	
+	/**
+	 * Returns the number of named and un-named delimited strings in the text argument, where 
+	 * the delimited strings are labeled by only a start delimiter. Calls 
+	 * <code>getDelimitedStringCount( text, startDelimiter, false )</code>.
+	 * @param text				string containing delimited strings.
+	 * @param startDelimiter	the start delimiter string.
+	 * @return					the number of named and un-named delimited strings.
+	 * @see StringSubstitutionUtil#getDelimitedStringCount(String, String, boolean) 
+	 * 		getDelimitedStringCount
+	 */
+	public static int getDelimitedStringCount( String text,
+									 		   String startDelimiter )
+	{
+		return getDelimitedStringCount( text, startDelimiter, 
+										false /* requiresNamedDelimiters */ );
+	}
+	
+	/**
+	 * Returns the number of delimited strings in the text argument, where the delimited 
+	 * strings are labeled by only a start delimiter.  If <code>requiresNamedDelimiters</code> 
+	 * is set to true, only the named delimiters will be counted.  This should be used when 
+	 * the caller wants to perform substitution by name on the text string. Otherwise, both named 
+	 * and un-named delimiters will be counted.  This should be used when the caller wants 
+	 * to perform substitution by index on the text string.
+	 * <br>
+	 * <br>
+	 * <b>For example:</b><br>
+	 * text = ":param1 :param2 :param3"<br>
+	 * startDelimiter = ":"<br>
+	 * returns: 3
+	 * @param text					string containing delimited strings.
+	 * @param startDelimiter		the start delimiter string.
+	 * @param requiresNamedDelimiters
+	 * 								determines whether only named delimiters will be counted.
+	 * @return						the number of delimited strings.
+	 * @throws NullPointerException	if text or startDelimiter is <code>null</code>.
+	 */
+	public static int getDelimitedStringCount( String text,
+	 		   								   String startDelimiter, 
+											   boolean requiresNamedDelimiters )
+	{
+		String context = "StringSubstitutionUtil.getDelimitedStringCount( " + //$NON-NLS-1$
+						 text + ", " + startDelimiter + ", " +  //$NON-NLS-1$ //$NON-NLS-2$
+						 requiresNamedDelimiters + " )\t"; //$NON-NLS-1$
+		log( context + "Called." ); //$NON-NLS-1$
+	
+		sanityCheck( text, startDelimiter );
+	
+		// we'll remove all beginning and trailing whitespaces
+		startDelimiter = sanityCheckDelimiter( startDelimiter );
+		int startDelimiterLength = startDelimiter.length();
+	
+		StringBuffer stringBuffer = new StringBuffer( text );
+	
+		int index = 0;
+		int numOfDelimitedStrings = 0;
+		while( ( index = text.indexOf( startDelimiter, index ) ) >= 0 )
+		{
+			log( context + "index: " + index ); //$NON-NLS-1$
+	
+			int endIndex = getDelimitedStringEndIndex( stringBuffer, index, 
+						   							   startDelimiterLength,
+													   requiresNamedDelimiters );
+			if( endIndex == -1 )
+			{
+				index += startDelimiterLength;
+				continue;
+			}
+	
+			numOfDelimitedStrings++;
+			index = endIndex + 1;
+		}
+	
+		log( context + "Exiting: " + numOfDelimitedStrings ); //$NON-NLS-1$
+		return numOfDelimitedStrings;
+	}
+	
+	/**
+	 * Returns the number of named and un-named delimited strings in the text 
+	 * argument, where the delimited strings are labeled by a start delimiter 
+	 * and an end delimiter. Calls 
+	 * <code>getDelimitedStringCount( text, startDelimiter, endDelimiter, false )</code>.
+	 * @param text				string containing delimited strings.
+	 * @param startDelimiter	the start delimiter string.
+	 * @param endDelimiter		the end delimiter string.
+	 * @return					the number of named and un-named delimited strings.
+	 * @see	StringSubstitutionUtil#getDelimitedStringCount(String, String, String, boolean)
+	 * 		getDelimitedStringCount
+	 */
+	public static int getDelimitedStringCount( String text,
+											   String startDelimiter,
+											   String endDelimiter )
+	{
+		return getDelimitedStringCount( text, startDelimiter, endDelimiter, 
+				 						false /* requiresNamedDelimiters */ );
+	}
+	
+	/**
+	 * Returns the number of delimited strings in the text argument, where the delimited 
+	 * strings are labeled by a start delimiter and an end delimiter. If <code>requiresNamedDelimiters</code> 
+	 * is set to true, only the named delimiters will be counted.  This should be used when 
+	 * the caller wants to perform substitution by name on the text string. Otherwise, both named 
+	 * and un-named delimiters will be counted.  This should be used when the caller wants 
+	 * to perform substitution by index on the text string.
+	 * <br>
+	 * <br>
+	 * <b>For example:</b><br>
+	 * text = "select &lt;start&gt;param1&lt;end&gt;.* from STUDENT"<br>
+	 * startDelimiter = "&lt;start&gt;"<br>
+	 * endDelimiter = "&lt;end&gt;"<br>
+	 * returns: 1
+	 * @param text					string containing delimited strings.
+	 * @param startDelimiter		the start delimiter string.
+	 * @param endDelimiter			the end delimiter string.
+	 * @param requiresNamedDelimiters
+	 * 								determines whether only named delimiters will be counted.
+	 * @return						the number of delimited strings.
+	 * @throws NullPointerException	if text, startDelimiter, or endDelimiter
+	 * 								is <code>null</code>.
+	 */
+	public static int getDelimitedStringCount( String text,
+			   								   String startDelimiter,
+											   String endDelimiter,
+											   boolean requiresNamedDelimiters )
+	{
+		String context = "StringSubstitutionUtil.getDelimitedStringCount( " + //$NON-NLS-1$
+		 				 text + ", " + startDelimiter + ", " + endDelimiter +  //$NON-NLS-1$ //$NON-NLS-2$
+						 ", " + requiresNamedDelimiters +" )\t"; //$NON-NLS-1$ //$NON-NLS-2$
+		log( context + "Called." ); //$NON-NLS-1$
+
+		sanityCheck( text, startDelimiter, endDelimiter );
+
+		// we'll remove all beginning and trailing whitespaces
+		startDelimiter = sanityCheckDelimiter( startDelimiter );
+		endDelimiter = sanityCheckDelimiter( endDelimiter );
+
+		int startDelimiterLength = startDelimiter.length();
+		int endDelimiterLength = endDelimiter.length();
+
+		StringBuffer stringBuffer = new StringBuffer( text );
+
+		int startIndex = 0;
+		int currIndex = 0;
+		int numOfDelimitedStrings = 0;
+		while( ( startIndex = text.indexOf( startDelimiter, currIndex ) ) >= 0 )
+		{
+			log( context + "startIndex: " + startIndex + ", currIndex: " + currIndex ); //$NON-NLS-1$ //$NON-NLS-2$
+
+			currIndex = startIndex + startDelimiterLength;
+
+			// check whether it's really a start delimiter
+			if( ! isStartDelimiter( startIndex, stringBuffer ) )
+				continue;
+
+			int endIndex = getDelimitedStringEndIndex( stringBuffer, startIndex, 
+								 	   				   startDelimiterLength, 
+													   endDelimiter,
+													   requiresNamedDelimiters );
+
+			if( endIndex < 0 )
+				break;
+
+			numOfDelimitedStrings++;
+			endIndex += endDelimiterLength;
+			currIndex = endIndex;
+		}
+
+		log( context + "Exiting: " + numOfDelimitedStrings ); //$NON-NLS-1$
+		return numOfDelimitedStrings;		
+	}
+	
+	/**
+	 * Performs string substitution based on index, where the delimited strings
+	 * are labeled by only a start delimiter.
+	 * <br>
+	 * <br>
+	 * <b>For example:</b><br>
+	 * text = "SELECT STUDENT.:COLUMN, STUDENT.:COLUMN FROM STUDENT"<br>
+	 * startDelimiter = ":"<br>
+	 * substitutionList = ["ID", "NAME"]<br>
+	 * returns: "SELECT STUDENT.ID, STUDENT.NAME FROM STUDENT"
+	 * @param text					text string containing delimited strings.
+	 * @param startDelimiter		the start delimiter string.
+	 * @param substitutionList		list of substitution values for the delimited strings.
+	 * @return						the fully substituted string.
+	 * @throws NullPointerException	if text, startDelimiter, or substitutionList
+	 * 								is <code>null</code>.
+	 */
+	public static String substituteByIndex( String text,
+											String startDelimiter,
+											List substitutionList )
+	{
+		String context = "StringSubstitutionUtil.substituteByIndex( " +  //$NON-NLS-1$
+						 text + ", " + startDelimiter + ", " +  //$NON-NLS-1$ //$NON-NLS-2$
+						 substitutionList + " )\t"; //$NON-NLS-1$
+		log( context + "Called." ); //$NON-NLS-1$
+		
+		sanityCheck( text, startDelimiter, substitutionList );
+		
+		// we'll remove all beginning and trailing whitespaces
+		startDelimiter = sanityCheckDelimiter( startDelimiter );
+		int startDelimiterLength = startDelimiter.length();
+		
+		// string buffer is more efficient for manipulating strings
+		StringBuffer stringBuffer = new StringBuffer( text );
+		
+		int index = 0;
+		ListIterator substitutionListIter = substitutionList.listIterator();
+		// find the index of the delimiter
+		while( ( index = stringBuffer.toString().indexOf( startDelimiter, index ) ) >= 0 )
+		{
+			log( context + "index: " + index ); //$NON-NLS-1$
+			
+			int endIndex = getDelimitedStringEndIndex( stringBuffer, index, 
+													   startDelimiterLength,
+													   false /* requiresNamedDelimiters */ );
+			if( endIndex == -1 )
+			{
+				index += startDelimiterLength;
+				continue;
+			}
+			
+			if( ! substitutionListIter.hasNext() )
+			{
+			    String message = Messages.bind( Messages.stringSubUtil_NO_STRING_VALUE_TO_REPLACE,
+						   				stringBuffer.substring( index + startDelimiterLength, 
+						   			        								endIndex ) );            
+				throw newIllegalArgumentException( message );
+			}
+			
+			String replacementString = ( String ) substitutionListIter.next();
+			if( replacementString == null )
+			{
+				throw newIllegalArgumentException( Messages.stringSubUtil_SUBSTITUTION_VALUE_CANNOT_BE_NULL );
+			}
+			
+			stringBuffer.replace( index, endIndex, replacementString );
+			index += ( replacementString.length() );
+		}
+		
+		String ret = stringBuffer.toString();
+		
+		log( context + "Exiting: " + ret ); //$NON-NLS-1$
+		return ret; 
+	}
+
+	/**
+	 * Performs string substitution based on index, where the delimited strings
+	 * are labeled by a start delimiter and an end delimiter.
+	 * <br>
+	 * <br>
+	 * <b>For example:</b><br>
+	 * text = "SELECT &lt;start&gt;TABLE&lt;end&gt;.&lt;start&gt;COLUMN&lt;end&gt; FROM STUDENT"<br>
+	 * startDelimiter = "&lt;start&gt;"<br>
+	 * endDelimiter = "&lt;end&gt;"<br>
+	 * substitutionList = ["STUDENT", "NAME"]<br>
+	 * returns: "SELECT STUDENT.NAME FROM STUDENT"
+	 * @param text					text string containing delimited strings.
+	 * @param startDelimiter		the start delimiter string.
+	 * @param endDelimiter			the end delimiter string.
+	 * @param substitutionList		list of substitution values for the delimited strings.
+	 * @return						the fully substituted string.
+	 * @throws NullPointerException	if text, startDelimiter, endDelimiter, or
+	 * 								substitutionList is <code>null</code>.
+	 */
+	public static String substituteByIndex( String text,
+											String startDelimiter,
+											String endDelimiter,
+											List substitutionList )
+	{
+		String context = "StringSubstitutionUtil.substituteByIndex( " +  //$NON-NLS-1$
+						 text + ", " + startDelimiter + ", " + endDelimiter +  //$NON-NLS-1$ //$NON-NLS-2$
+						 ", " + substitutionList + " )\t"; //$NON-NLS-1$ //$NON-NLS-2$
+		log( context + "Called." ); //$NON-NLS-1$
+		
+		sanityCheck( text, startDelimiter, endDelimiter, 
+					 substitutionList );
+
+		// we'll remove all beginning and trailing whitespaces
+		startDelimiter = sanityCheckDelimiter( startDelimiter );
+		endDelimiter = sanityCheckDelimiter( endDelimiter );
+		
+		int startDelimiterLength = startDelimiter.length();
+		int endDelimiterLength = endDelimiter.length();
+
+		// string buffer is more efficient for manipulating strings
+		StringBuffer stringBuffer = new StringBuffer( text );
+		
+		ListIterator substitutionListIter = substitutionList.listIterator();
+		int startIndex = 0;
+		int currIndex = 0;
+		while( ( startIndex = stringBuffer.toString().indexOf( startDelimiter, currIndex ) ) >= 0 )
+		{
+			log( context + "startIndex: " + startIndex + ", currIndex: " + currIndex ); //$NON-NLS-1$ //$NON-NLS-2$
+			
+			currIndex = startIndex + startDelimiterLength;
+			
+			// check whether it's really a start delimiter
+			if( ! isStartDelimiter( startIndex, stringBuffer ) )
+				continue;
+			
+			int endIndex = getDelimitedStringEndIndex( stringBuffer, startIndex, 
+												 	   startDelimiterLength, 
+													   endDelimiter,
+													   false /* requiresNamedDelimiters */ );
+
+			if( endIndex < 0 )
+				break;
+			
+			if( ! substitutionListIter.hasNext() )
+			{
+			    String message = Messages.bind( Messages.stringSubUtil_NO_STRING_VALUE_TO_REPLACE,
+											   stringBuffer.substring( startIndex + startDelimiterLength, 
+											           						endIndex ) );
+				throw newIllegalArgumentException( message );
+			}
+			
+			String replacementString = ( String ) substitutionListIter.next();	
+			if( replacementString == null )
+				throw newIllegalArgumentException( Messages.stringSubUtil_SUBSTITUTION_VALUE_CANNOT_BE_NULL );
+			
+			endIndex += endDelimiterLength;
+			stringBuffer.replace( startIndex, endIndex, replacementString );
+			currIndex = startIndex + replacementString.length();
+		}
+
+		String ret = stringBuffer.toString();
+		
+		log( context + "Exiting: " + ret ); //$NON-NLS-1$
+		return ret;
+	}
+	
+	/**
+	 * Performs string substitution based on name, where the delimited strings
+	 * are labeled by only a start delimiter.
+	 * <br>
+	 * <br>
+	 * <b>For example:</b><br>
+	 * text = "SELECT ?PARAM.?PARAM1 FROM ?PARAM"<br>
+	 * startDelimiter = "?"<br>
+	 * nameValues = {PARAM=PEOPLE, PARAM1=NAME}<br>
+	 * returns: "SELECT PEOPLE.NAME FROM PEOPLE"<br>
+	 * @param text					text string containing delimited strings.
+	 * @param startDelimiter		the start delimiter string.
+	 * @param nameValues			map of substitution name-value pairs.
+	 * @return						the fully substituted string.
+	 * @throws NullPointerException	if text, startDelimiter, or nameValues is
+	 * 								<code>null</code>.
+	 */
+	public static String substituteByName( String text,
+										   String startDelimiter,
+										   Map nameValues )
+	{
+		String context = "StringSubstitutionUtil.substituteByName( " +  //$NON-NLS-1$
+						 text + ", " + startDelimiter + ", " + nameValues + " )\t"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		log( context + "Called." ); //$NON-NLS-1$
+		
+		sanityCheck( text, startDelimiter, nameValues );
+		
+		// we'll remove all beginning and trailing whitespaces
+		startDelimiter = sanityCheckDelimiter( startDelimiter );
+		int startDelimiterLength = startDelimiter.length();
+		
+		// string buffer is more efficient for manipulating strings
+		StringBuffer stringBuffer = new StringBuffer( text );
+		
+		int index = 0;
+		// find the index of the delimiter
+		while( ( index = stringBuffer.toString().indexOf( startDelimiter, index ) ) >= 0 )
+		{
+			log( context + "index: " + index ); //$NON-NLS-1$
+			
+			int endIndex = getDelimitedStringEndIndex( stringBuffer, index, 
+													   startDelimiterLength,
+													   true /* requiresNamedDelimiters */ );
+			if( endIndex == -1 )
+			{
+				index += startDelimiterLength;
+				continue;
+			}
+			
+			// found the start and end of the delimited string
+			String delimitedString = stringBuffer.substring( index + startDelimiterLength, 
+														   endIndex );
+			String replacementString = ( String ) nameValues.get( delimitedString );
+			if( replacementString == null )
+			{
+			    String message = Messages.stringSubUtil_SUBSTITUTION_VALUE_CANNOT_BE_NULL;
+			    message += " [" + delimitedString + "]"; //$NON-NLS-1$ //$NON-NLS-2$
+				throw newIllegalArgumentException( message );
+			}
+			
+			stringBuffer.replace( index, endIndex, replacementString );
+			index += ( replacementString.length() );
+		}
+		
+		String ret = stringBuffer.toString();
+		
+		log( context + "Exiting: " + ret ); //$NON-NLS-1$
+		return ret;
+	}
+	
+	/**
+	 * Performs string substitution based on name, where the delimited strings
+	 * are labeled by a start delimiter and an end delimiter.
+	 * <br>
+	 * <br>
+	 * <b>For example:</b><br>
+	 * text = "SELECT :PARAM:.:PARAM1: FROM :PARAM:<br>
+	 * startDelimiter = ":"<br>
+	 * endDelimiter = ":"<br>
+	 * nameValues = {PARAM=PEOPLE, PARAM1=NAME}<br>
+	 * returns: "SELECT PEOPLE.NAME FROM PEOPLE"<br>
+	 * @param text					text string containing delimited strings.
+	 * @param startDelimiter		the start delimiter string.
+	 * @param endDelimiter			the end delimiter string.
+	 * @param nameValues			map of substitution name-value pairs.
+	 * @return						the fully substituted string.
+	 * @throws NullPointerException	if text, startDelimiter, endDelimiter, or
+	 * 								nameValues is <code>null</code>.
+	 */
+	public static String substituteByName( String text,
+										   String startDelimiter,
+										   String endDelimiter,
+										   Map nameValues )
+	{
+		String context = "StringSubstitutionUtil.substituteByName( " +  //$NON-NLS-1$
+						 text + ", " + startDelimiter + ", " + endDelimiter +  //$NON-NLS-1$ //$NON-NLS-2$
+						 ", " + nameValues + " )\t"; //$NON-NLS-1$ //$NON-NLS-2$
+		log( context + "Called." ); //$NON-NLS-1$
+		
+		sanityCheck( text, startDelimiter, 
+					 endDelimiter, nameValues );
+
+		// we'll remove all beginning and trailing whitespaces
+		startDelimiter = sanityCheckDelimiter( startDelimiter );
+		endDelimiter = sanityCheckDelimiter( endDelimiter );
+
+		int startDelimiterLength = startDelimiter.length();
+		int endDelimiterLength = endDelimiter.length();
+		
+		// string buffer is more efficient for manipulating strings
+		StringBuffer stringBuffer = new StringBuffer( text );
+
+		int startIndex = 0;
+		int currIndex = 0;
+		while( ( startIndex = stringBuffer.toString().indexOf( startDelimiter, currIndex ) ) >= 0 )
+		{
+			log( context + "startIndex: " + startIndex + ", currIndex: " + currIndex ); //$NON-NLS-1$ //$NON-NLS-2$
+			
+			currIndex = startIndex + startDelimiterLength;
+			
+			// check whether it's really a start delimiter
+			if( ! isStartDelimiter( startIndex, stringBuffer ) )
+				continue;
+			
+			int endIndex = getDelimitedStringEndIndex( stringBuffer, startIndex, 
+												 	   startDelimiterLength, 
+													   endDelimiter,
+													   true /* requiresNamedDelimiters */ );
+
+			if( endIndex < 0 )
+				break;
+			
+			String delimitedString = stringBuffer.substring( startIndex + startDelimiterLength,
+														   endIndex );
+			
+			String replacementString = ( String ) nameValues.get( delimitedString );
+			if( replacementString == null )
+			{
+			    String message = Messages.stringSubUtil_SUBSTITUTION_VALUE_CANNOT_BE_NULL;
+			    message += " [" + delimitedString + "]"; //$NON-NLS-1$ //$NON-NLS-2$
+				throw newIllegalArgumentException( message );
+			}
+			
+			endIndex += endDelimiterLength;
+			stringBuffer.replace( startIndex, endIndex, replacementString );
+			currIndex = startIndex + replacementString.length();
+		}
+
+		String ret = stringBuffer.toString();
+		
+		log( context + "Exiting: " + ret ); //$NON-NLS-1$
+		return ret;
+	}
+
+	//-------------------------------------------------------------------------
+	// helper methods for sanity checks
+	
+	private static void sanityCheck( String text,
+									 String startDelimiter,
+									 String endDelimiter,
+									 Object listOrMap )
+	{
+		sanityCheck( text, startDelimiter, endDelimiter );
+		
+		sanityCheck( listOrMap );
+	}
+	
+	private static void sanityCheck( String text, 
+									 String startDelimiter,
+									 Object listOrMap )
+	{
+		sanityCheck( text, startDelimiter );
+		
+		sanityCheck( listOrMap );
+	}
+
+	private static void sanityCheck( String text,
+									 String startDelimiter,
+									 String endDelimiter )
+	{
+		sanityCheck( text, startDelimiter );
+		
+		if( endDelimiter == null )
+			throw newNullPointerException( Messages.stringSubUtil_DELIMITER_CANNOT_BE_NULL );
+	}
+	
+	private static void sanityCheck( String text,
+								     String startDelimiter )
+	{
+		if( text == null )
+			throw newNullPointerException( Messages.stringSubUtil_TEXT_STRING_CANNOT_BE_NULL );
+		
+		if( startDelimiter == null )
+			throw newNullPointerException( Messages.stringSubUtil_DELIMITER_CANNOT_BE_NULL );
+	}
+	
+	private static void sanityCheck( Object listOrMap )
+	{
+		if( listOrMap == null )
+		{
+			String message = listOrMap instanceof List  ? 
+        						Messages.stringSubUtil_SUBSTITUTION_LIST_CANNOT_BE_NULL :
+        						Messages.stringSubUtil_NAME_VALUE_MAP_CANNOT_BE_NULL;	
+			throw newNullPointerException( message );
+		}
+	}
+	
+	private static String sanityCheckDelimiter( String delimiter )
+	{
+		String trimmed = delimiter.trim();
+		int length = trimmed.length();
+		if( length == 0 )
+			throw newIllegalArgumentException( Messages.stringSubUtil_DELIMITER_CANNOT_BE_EMPTY );
+		
+		return trimmed;
+	}
+	
+	// returns -1 if we see that the delimiter isn't part of a delimited string, 
+	// otherwise it will return the end index of the delimited string
+	
+	private static int getDelimitedStringEndIndex( StringBuffer stringBuffer, 
+												   int index,
+												   int startDelimiterLength, 
+												   boolean requiresNamedDelimiters )
+	{
+		String context = "StringSubstitutionUtil.getDelimitedStringEndIndex( " + //$NON-NLS-1$
+						 stringBuffer + ", " + index + ", " + //$NON-NLS-1$ //$NON-NLS-2$
+						 startDelimiterLength + " )\t"; //$NON-NLS-1$
+		log( context + "Called." ); //$NON-NLS-1$
+		
+		// check whether it's really a start delimiter
+		if( ! isStartDelimiter( index, stringBuffer ) )
+		{
+			log( context + "Not a start delimiter. Exiting: -1" ); //$NON-NLS-1$
+			return -1;
+		}
+		
+		int endIndex = index + startDelimiterLength;
+		while( endIndex < stringBuffer.length() && 
+			   isStringMarkerCharacter( stringBuffer.charAt( endIndex ) ) )
+			endIndex++;
+
+		// if the endIndex is still the same as the index after the start delimiter, 
+		// then it may be an empty marker.  We only support empty markers for substitution 
+		// by index.  We also need to check the character to see whether it's the 
+		// end of the string or a white space character.
+		// if that's the case, then it would be considered an embedded marker.
+		// i.e.: select * from aaa where id  = ? and aaaId < ?
+		// where the ? is the delimiter
+		if( endIndex == index + startDelimiterLength &&
+			( requiresNamedDelimiters || 
+			  ( endIndex < stringBuffer.length() &&
+			  	! Character.isWhitespace( stringBuffer.charAt( endIndex ) ) ) ) )
+		{
+			log( context + "Not an embedded marker. Exiting: -1" ); //$NON-NLS-1$
+			return -1;
+		}
+
+		log( context + "Exiting: " + endIndex ); //$NON-NLS-1$
+		return endIndex; 
+	}
+	
+	private static int getDelimitedStringEndIndex( StringBuffer stringBuffer, 
+											 	   int startIndex, 
+												   int startDelimiterLength,
+												   String endDelimiter,
+												   boolean requiresNamedDelimiters )
+	{
+		String context = "StringSubstitutional.getDelimitedStringEndIndex( " + //$NON-NLS-1$
+						 stringBuffer + ", " + startIndex + ", " +  //$NON-NLS-1$ //$NON-NLS-2$
+						 startDelimiterLength + ", " + endDelimiter + " )\t"; //$NON-NLS-1$ //$NON-NLS-2$
+		log( context + "Called." ); //$NON-NLS-1$
+		
+		int currIndex = startIndex + startDelimiterLength;
+		int endDelimiterLength = endDelimiter.length();
+		
+		int endIndex = -1;
+		String string = stringBuffer.toString();
+		while( ( endIndex = string.indexOf( endDelimiter, currIndex ) ) >= 0 )
+		{
+			log( context + "endIndex: " + endIndex + ", currIndex: " + currIndex ); //$NON-NLS-1$ //$NON-NLS-2$
+			
+			// check whether it's really an end delimiter
+			if( isEndDelimiter( startIndex + startDelimiterLength, endIndex,
+				  			    endDelimiterLength, string, requiresNamedDelimiters ) )
+				break;
+			
+			// look for another end delimiter
+			currIndex = endIndex + endDelimiterLength;
+		}		
+		
+		log( context + "Exiting: " + endIndex ); //$NON-NLS-1$
+		return endIndex;
+	}
+
+	private static boolean isStringMarkerCharacter( char c )
+	{
+		return Character.isLetterOrDigit( c ) ||
+			   isContinuatorCharacter( c );
+	}
+	
+	private static boolean isContinuatorCharacter( char c )
+	{
+		return ( c == '_' );
+	}
+	
+	private static boolean isEscapeCharacter( char c )
+	{
+		return ( c == '\\' );
+	}
+
+	private static boolean isStartDelimiter( int startDelimiterIndex,
+											 StringBuffer stringBuffer )
+	{
+		String context = "StringSubstitutionUtil.isStartDelimiter( " +  //$NON-NLS-1$
+						 startDelimiterIndex + ", " + stringBuffer + " )\t"; //$NON-NLS-1$ //$NON-NLS-2$
+		log( context + "Called." ); //$NON-NLS-1$
+		
+		// it's a start delimiter if it's at the beginning of the string
+		if( startDelimiterIndex == 0 )
+		{
+			log( context + "Beginning of string. Exiting: " + true ); //$NON-NLS-1$
+			return true;
+		}
+		
+		// check that the character before the start delimiter isn't 
+		// an alpha numeric character or underscore or the escape character
+		char prevChar = stringBuffer.charAt( startDelimiterIndex - 1 );
+		boolean ret = ( ! isStringMarkerCharacter( prevChar ) &&
+				 		! isEscapeCharacter( prevChar ) );
+		
+		log( context + "Exiting: " + ret ); //$NON-NLS-1$
+		return ret;
+	}
+	
+	private static boolean isEndDelimiter( int afterStartDelimiterIndex, int endIndex,
+										   int endDelimiterLength, String string,
+										   boolean requiresNamedDelimiters )
+	{
+		String context = "StringSubsitutionUtil.isEndDelimiter( " +  //$NON-NLS-1$
+						 afterStartDelimiterIndex + ", " + endIndex + ", " +  //$NON-NLS-1$ //$NON-NLS-2$
+						 endDelimiterLength + ", " + string + " )\t"; //$NON-NLS-1$ //$NON-NLS-2$
+		log( context + "Called." ); //$NON-NLS-1$
+		
+		// if the end delimiter occurs right after the start delimiter and 
+		// we require named delimiters, then it's not an end delimiter.
+		if( endIndex == afterStartDelimiterIndex &&
+			requiresNamedDelimiters )
+		{
+			log( context + "Requires a named delimiter. Exiting: " + false ); //$NON-NLS-1$
+			return false;
+		}
+		
+		// check whether the character right before the end delimiter is the
+		// escape character, which would mean it's not really an end delimiter 
+		// unless it's part of the start delimiter
+		if( endIndex - 1 >= afterStartDelimiterIndex &&
+			isEscapeCharacter( string.charAt( endIndex - 1 ) ) )
+		{
+			log( context + "End delimiter escaped. Exiting: " + false ); //$NON-NLS-1$
+			return false;
+		}
+		
+		// it also wouldn't be an end delimiter if the end delimiter were 
+		// immediately followed by an alpha numeric character		
+		boolean ret = !( endIndex + endDelimiterLength < string.length() &&
+					  	 isStringMarkerCharacter( string.charAt( endIndex + endDelimiterLength ) ) );
+		
+		log( context + "Exiting: " + ret ); //$NON-NLS-1$
+		return ret;
+	}
+	
+	private static IllegalArgumentException newIllegalArgumentException( String msg )
+	{
+		IllegalArgumentException ex = 
+			new IllegalArgumentException( msg );
+		
+		log( ex );
+		return ex;
+	}
+	
+	private static NullPointerException newNullPointerException( String msg )
+	{
+		NullPointerException ex = 
+			new NullPointerException( msg );
+		
+		log( ex );
+		return ex;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/FileHandler.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/FileHandler.java
new file mode 100644
index 0000000..aadda20
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/FileHandler.java
@@ -0,0 +1,162 @@
+/*
+ ******************************************************************************
+ * Copyright (c) 2004, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *     
+ ******************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.util.logging;
+
+import java.io.File;
+import java.io.FileOutputStream;
+
+/**
+ * The <code>FileHandler</code> is a file logging <code>Handler</code> 
+ * that publishes <code>LogRecords</code> to a specified file.
+ */
+public class FileHandler extends StreamHandler
+{ 
+	private String m_filename;
+	private File m_file;
+	
+    // Constructors
+    FileHandler()
+    {
+    	// no default constructor
+    }
+
+    /**
+     * Creates a <code>FileHandler</code> to publish <code>LogRecords</code> 
+     * to the specified file.  This will use the default <code>SimpleFormatter</code> 
+     * to format the <code>LogRecords</code>.  This does not create the physical 
+     * file or the parent directories until publish() is called.
+     * @param filename	the file to publish <code>LogRecords</code> to.
+     */
+    public FileHandler( String filename )
+    {
+    	m_filename = filename;
+    }
+    
+    /**
+     * Creates a <code>FileHandler</code> to publish <code>LogRecords</code> 
+     * to the sepcified file using the specified <code>LogFormatter</code>. 
+     * This does not create the physical file or the parent directories until 
+     * publish() is called.
+     * @param filename	the file to publish <code>LogRecords</code> to.
+     * @param formatter	the <code>LogFormatter</code> to format the 
+     * 					<code>LogRecords</code>.
+     */
+    public FileHandler( String filename, LogFormatter formatter )
+    {
+    	m_filename = filename;
+    	
+    	setFormatter( formatter );
+    }
+    
+    /**
+     * Creates the log file and its applicable parent directories when called 
+     * for the first time.
+     * @param record	the record to publish.
+     */
+    public void publish( LogRecord record )
+    {
+    	if( m_file == null )
+    		setOutputFile( m_filename );
+    	
+    	super.publish( record );
+    }
+    
+    /**
+     * Closes the current file handler.
+     */
+    public void close()
+    {
+    	super.close();
+    	
+    	m_file = null;
+    	m_filename = null;
+    }
+
+    /** 
+     * Generates a file with an unique filename based on the specified preferred name. 
+     * This is for the case when two consumer instances run concurrently and 
+     * each tries to create a file with the same name.
+     * @param preferredFileName
+     * @return
+     */
+    private File getUniqueFile( String preferredFileName )
+    {
+        try
+        {
+            File file = new File( preferredFileName );
+        
+            createParentDirectory( file );
+            
+            // must use createNewFile() for atomicity!
+            // if this file is already locked by someone else, we'll append a 
+            // numeric value to our filename, we'll repeat this 10 times only to
+            // prevent infinite loops.
+            int looping = 0;
+            int index = preferredFileName.lastIndexOf( "." ); //$NON-NLS-1$
+            String prefix = preferredFileName.substring( 0, index );
+            String suffix = preferredFileName.substring( index, preferredFileName.length() );
+            while( ! file.createNewFile() && looping < 10 )    
+            {
+                file = new File( prefix + "-" + looping + suffix ); //$NON-NLS-1$
+                looping++;
+            }
+            return file;
+        }
+        catch( java.io.FileNotFoundException ex )
+        {
+            return null;
+        }
+        catch( java.io.IOException ex )
+        {
+            return null;
+        }
+    }
+    
+    // this may not be the actual unique name of the File handle.
+    String getPreferredFilename()
+    {
+    	return m_filename;
+    }
+    
+    // create any parent directory if necessary
+    private void createParentDirectory( File file )
+    {
+    	File parentDirectory = file.getParentFile();
+    	
+    	// parent directory could be null if the file is at the top most 
+    	// directory.
+    	// if there's a parent directory but it doesn't exist, then we'll 
+    	// need to create it.
+    	if( parentDirectory != null && ! parentDirectory.exists() )
+    		parentDirectory.mkdirs();
+    }
+
+    void setOutputFile( String filename )
+    {
+        try
+        {
+            m_file = getUniqueFile( filename );
+            
+            if( m_file != null )
+                setOutputStream( new FileOutputStream( m_file ) );
+            else
+            	reportError( "", null, LoggingErrorHandler.OPEN_FAILURE ); //$NON-NLS-1$
+        }
+        catch( java.io.FileNotFoundException ex )
+        {
+        	reportError( "", ex, LoggingErrorHandler.OPEN_FAILURE ); //$NON-NLS-1$
+        }
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/Filter.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/Filter.java
new file mode 100644
index 0000000..32ed8db
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/Filter.java
@@ -0,0 +1,37 @@
+/*
+ ******************************************************************************
+ * Copyright (c) 2004, 2005 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *     
+ ******************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.util.logging;
+
+/**
+ *	A Filter can provide more control on what is logged.
+ *  It filters LogRecords from its parent handler based on the rules 
+ *  that are implemented in isLoggable().
+ *	<br>
+ *	<br>
+ *	Each Handler can have an associated Filter and calls the 
+ *	<code>isLoggable</code> method to check whether the 
+ *	<code>LogRecord</code> should be published.
+ */
+
+public interface Filter
+{
+	/**
+	 * Checks if the the <code>LogRecord</code> should be published.
+	 * @param record	the log record.
+	 * @return			<code>true</code> if the log record should
+	 * 					be published; <code>false</code> otherwise.
+	 */
+    public boolean isLoggable( LogRecord record );
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/Handler.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/Handler.java
new file mode 100644
index 0000000..78b5f46
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/Handler.java
@@ -0,0 +1,162 @@
+/*
+ ******************************************************************************
+ * Copyright (c) 2004, 2005 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *     
+ ******************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.util.logging;
+
+/**
+ * <code>Handler</code> is an abstract class that takes <code>LogRecords</code> 
+ * from a <code>Logger</code> and processes them using its Formatter. 
+ * All log handler should inherit from this class and may publish 
+ * log records to its supported sources. (e.g. console, file, etc. )
+ */
+public abstract class Handler
+{
+    // member variables
+    private LoggingErrorHandler   	m_errorHandler;
+    private Filter                	m_filter;
+    private LogFormatter			m_formatter;
+    private Level                 	m_level;
+
+    /**
+     * Creates a <code>Handler</code> instance.
+     */
+    protected Handler()
+    {
+    }
+
+    /**
+     * Close the <code>Handler</code> and free up resources.
+     */
+    public abstract void close();
+
+    /**
+     * Flushes buffered output.
+     */
+    public abstract void flush();
+
+    /**
+     * Publish the specified <code>LogRecord</code>.  The record should 
+     * only be published if it has the adequate log level, passes the 
+     * associated <code>Filter</code>.  This is responsible for formatting 
+     * the <code>LogRecord</code>, if necessary.
+     * @param record	the log record to publish.
+     */
+    public abstract void publish( LogRecord record );
+
+    /**
+     * Checks whether the specified <code>LogRecord</code> should be logged. 
+     * This checks whether the <code>LogRecord</code> has the adequate log level, 
+     * passes the associated <code>Filter</code>, or other <code>Handler</code> 
+     * specific checks.
+     * @param record	the log record.
+     * @return			true if the log record should be logged.
+     */
+    public boolean isLoggable( LogRecord record )
+    {
+    	// loggable if the record's log level is higher and if the handler's 
+    	// level isn't set to OFF, and if there's no associated filter or the 
+    	// filter allows the record to be logged.
+    	return( ( record.getLevel().intValue() >= m_level.intValue() ) &&
+    			m_level.intValue() <= Level.SEVERE &&
+    			( m_filter == null || m_filter.isLoggable( record ) ) );
+    }
+
+    /**
+     * Reports an error to the assocated <code>LoggingErrorHandler</code>.
+     * @param message		the error message.
+     * @param exception		the exception that caused the error.
+     * @param errorCode		the error code.
+     */
+    protected void reportError( String message, Exception exception, 
+    							int errorCode )
+    {
+    	if( m_errorHandler != null )
+    		m_errorHandler.error( message, exception, errorCode );
+    }
+
+    /**
+     * Sets the <code>LoggingErrorHandler</code> for this <code>Handler</code>.
+     * @param errorHandler	the error handler to set.
+     */
+    public void setLoggingErrorHandler( LoggingErrorHandler errorHandler )
+    {
+        m_errorHandler = errorHandler;
+    }
+
+    /**
+     * Gets the <code>LoggingErrorHandler</code> associated with this <code>Handler</code>.
+     * @return	the associated error handler.
+     */
+    public LoggingErrorHandler getLoggingErrorHandler()
+    {
+        return m_errorHandler;
+    }
+
+    /**
+     * Sets the <code>Filter</code> for this <code>Handler</code>.
+     * @param filter	the filter to set.
+     */
+    public void setFilter( Filter filter )
+    {
+        m_filter = filter;
+    }
+
+    /**
+     * Gets the <code>Filter</code> associated with this <code>Handler</code>.
+     * @return	the associated filter.
+     */
+    public Filter getFilter()
+    {
+        return m_filter;
+    }
+
+    /**
+     * Sets the <code>LogFormatter</code> for this <code>Handler</code>.
+     * @param formatter		the formatter to set.
+     */
+    public void setFormatter( LogFormatter formatter )
+    {
+    	if( formatter == null )
+    		throw new NullPointerException();
+    	
+        m_formatter = formatter;
+    }
+
+    /**
+     * Gets the <code>LogFormatter</code> associated with this <code>Handler</code>.
+     * @return	the associated formatter.
+     */
+    public LogFormatter getFormatter()
+    {
+        return m_formatter;
+    }
+
+    /**
+     * Sets the <code>Level</code> for this <code>Handler</code>.
+     * @param level		the level to set.
+     */
+    public void setLevel( Level level )
+    {
+        m_level = level;
+    }
+
+    /**
+     * Gets the <code>Level</code> associated with this <code>Handler</code>.
+     * @return	the associated level.
+     */
+    public Level getLevel()
+    {
+        return m_level;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/Level.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/Level.java
new file mode 100644
index 0000000..1decb3b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/Level.java
@@ -0,0 +1,182 @@
+/*
+ ******************************************************************************
+ * Copyright (c) 2004, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *     
+ ******************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.util.logging;
+
+/**
+ * <code>Level</code> represents logging levels within the logging framework. 
+ * It defines a standard set of logging levels to control logging.
+ */
+public final class Level
+{
+    private static final int        AC_LOG_LEVEL_MAX    = Integer.MAX_VALUE;
+    private static final int        AC_LOG_LEVEL_MIN    = Integer.MIN_VALUE;
+    
+    /**
+     * The constant indicating the integer value of OFF.
+     */
+    public static final int         OFF				= AC_LOG_LEVEL_MAX;
+    
+    /**
+     * The constant indicating the integer value of SEVERE.
+     */
+    public static final int         SEVERE      	= 1000;
+    
+    /**
+     * The constant indicating the integer value of WARNING.
+     */
+    public static final int         WARNING     	= 900;
+    
+    /**
+     * The constant indicating the integer value of INFO.
+     */
+    public static final int         INFO        	= 800;
+    
+    /**
+     * The constant indicating the integer value of CONFIG.
+     */
+    public static final int         CONFIG      	= 700;
+    
+    /**
+     * The constant indicating the integer value of FINE.
+     */
+    public static final int         FINE        	= 500;
+    
+    /**
+     * The constant indicating the integer value of FINER.
+     */
+    public static final int         FINER       	= 400;
+    
+    /**
+     * The constant indicating the integer value of FINEST.
+     */
+    public static final int         FINEST      	= 300;
+    
+    /**
+     * The constant indicating the integer value of ALL.
+     */
+    public static final int         ALL             = AC_LOG_LEVEL_MIN;
+
+    /**
+     * The constant indicating the log level OFF. OFF should be used to turn 
+     * off logging.
+     */
+    public static final Level		OFF_LEVEL		= new Level( "OFF", OFF ); //$NON-NLS-1$
+    
+    /**
+     * The constant indicating the log level SEVERE. SEVERE should be used to 
+     * indicate a serious failure.
+     */
+    public static final Level		SEVERE_LEVEL	= new Level( "SEVERE", SEVERE ); //$NON-NLS-1$
+    
+    /**
+     * The constant indicating the log level WARNING. WARNING should be used to 
+     * indicate potential problems.
+     */
+    public static final Level		WARNING_LEVEL	= new Level( "WARNING", WARNING ); //$NON-NLS-1$
+    
+    /**
+     * The constant indicating the log level INFO. INFO should be used for 
+     * informational messages.
+     */
+    public static final Level		INFO_LEVEL		= new Level( "INFO", INFO ); //$NON-NLS-1$
+    
+    /**
+     * The constant indicating the log level CONFIG. CONFIG should be used for 
+     * configuration messages.
+     */
+    public static final Level		CONFIG_LEVEL	= new Level( "CONFIG", CONFIG ); //$NON-NLS-1$
+    
+    /**
+     * The constant indicating the log level FINE. FINE should be used for 
+     * relatively detailed trace logging.
+     */
+    public static final Level		FINE_LEVEL		= new Level( "FINE", FINE ); //$NON-NLS-1$
+    
+    /**
+     * The constant indicating the log level FINER. FINER should be used for 
+     * detailed trace logging.
+     */
+    public static final Level		FINER_LEVEL		= new Level( "FINER", FINER ); //$NON-NLS-1$
+    
+    /**
+     * The constant indicating the log level FINEST.  FINEST should be used for 
+     * very detailed trace logging.
+     */
+    public static final Level		FINEST_LEVEL	= new Level( "FINEST", FINEST ); //$NON-NLS-1$
+    
+    /**
+     * The constant indicating the log level ALL.  ALL should be used to log 
+     * everything.
+     */
+    public static final Level		ALL_LEVEL		= new Level( "ALL", ALL ); //$NON-NLS-1$
+    
+    // member variables
+    private String                  m_name;
+    private int                     m_level;
+
+    /**
+     * Creates a <code>Level</code> instance with the specified name and 
+     * integer log level value.
+     * @param name	the log level name.
+     * @param value	the integer log level value.
+     */
+    protected Level( String name, int value )
+    {
+        m_name = name;
+        m_level = value;
+    }
+
+    /**
+     * Checks whether the two objects have the same log level value.
+     * @param obj	the object to compare against.
+     * @return		true, if both objects have the same log level value.
+     */
+    public boolean equals( Object obj )
+    {
+        if( ! ( obj instanceof Level ) )
+            return false;
+
+        Level level = ( Level ) obj;
+        return ( level.intValue() == m_level );
+    }
+    
+    /**
+     * Generate a hashcode based on the log level value.
+     * @return	the hashcode based on the log level value.
+     */
+    public int hashCode()
+    {
+    	// override hashCode() along with equals()
+    	return m_level;
+    }
+
+    /**
+     * Gets the log level name.
+     * @return	the log level name.
+     */
+    public String getName()
+    {
+        return m_name;
+    }
+
+    /**
+     * Gets the log level value.
+     * @return	the log level value.
+     */
+    public int intValue()
+    {
+        return m_level;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/LogFormatter.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/LogFormatter.java
new file mode 100644
index 0000000..910c4d3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/LogFormatter.java
@@ -0,0 +1,37 @@
+/*
+ ******************************************************************************
+ * Copyright (c) 2004, 2005 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *     
+ ******************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.util.logging;
+
+/**
+ *	<code>LogFormatter</code> is an abstract class from which all 
+ *	formatter classes should implement.  It converts <code>LogRecords</code> 
+ * 	into formatted strings based on <code>format()</code> rules.
+ */
+public abstract class LogFormatter
+{
+	/**
+	 * Creates a <code>LogFormatter</code> instance.
+	 */
+    protected LogFormatter()
+    {
+    }
+
+    /**
+     * Format the specified <code>LogRecord</code> into a string.
+     * @param record	the log record to format.
+     * @return			the formatted string.
+     */
+    public abstract String format( LogRecord record );
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/LogManager.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/LogManager.java
new file mode 100644
index 0000000..b0eb7bf
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/LogManager.java
@@ -0,0 +1,435 @@
+/*
+ ******************************************************************************
+ * Copyright (c) 2004, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *     
+ ******************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.util.logging;
+
+import java.io.File;
+import java.io.IOException;
+import java.sql.Timestamp;
+import java.text.ParseException;
+import java.util.Hashtable;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.datatools.connectivity.oda.internal.OdaPlugin;
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+
+import com.ibm.icu.text.SimpleDateFormat;
+
+/**
+ *	LogManager is a static class that maintains a set of named 
+ *	<code>Loggers</code>. It provides the interface to create 
+ *	named <code>Loggers</code> and to retrieve the loggers for 
+ *	logging purposes.
+ */
+public class LogManager
+{
+    private static final String LOG_SUBFOLDER_NAME = "logs"; //$NON-NLS-1$
+    
+	private static Hashtable<String, Logger> m_loggers = new Hashtable<String, Logger>();
+    private static SimpleDateFormat sm_dateFormat;
+
+	private LogManager()
+	{
+		// not meant to be instantiated.
+	}
+	
+	/**
+	 * Creates a named {@link Logger} with the specified 
+	 * log configuration.  The specified logger name 
+	 * should be specific to the application using the logging 
+	 * framework to prevent name collision in the logger namespace, 
+	 * since multiple loggers under this management cannot have the same 
+	 * logger name.  
+	 * @param loggerName	the name of the logger to be created
+	 * @param logLevel		the logger log level
+	 * @param logDirectory	the required directory to store the logs
+	 * @param logPrefix		the required file name prefix of the log 
+	 * 						file name; the format will be 
+	 * 						&lt;logPrefix&gt;-YYMMDD-hhmmss.log
+	 * @param formatterClassName	a {@link LogFormatter} class 
+	 * 								name; if this is null or empty, the 
+	 * 								default <code>LogFormatter</code> will be 
+	 * 								used. The customized log formatter must inherit 
+	 * 								from <code>org.eclipse.datatools.connectivity.oda.logging.LogFormatter</code> 
+	 * 								and implements the <code>format()</code> method
+	 * @return		the constructed named {@link Logger}
+	 * @throws IllegalArgumentException		if logger with the same name already exists.
+	 * @see #createLogger(String, int, String, String, String, boolean)
+	 */
+    public static Logger createLogger( String loggerName,
+    								   int logLevel,
+									   String logDirectory,
+									   String logPrefix,
+									   String formatterClassName )
+    {
+        return LogManager.createLogger( loggerName, logLevel, logDirectory, logPrefix, formatterClassName, true );
+    }
+    
+    /**
+     * Creates a named {@link Logger} with the specified log configuration.
+     * @param loggerName    the name of the logger to be created
+     * @param logLevel      the logger log level
+     * @param logDirectory  the required directory to store the logs
+     * @param logPrefix     the required file name prefix of the log 
+     *                      file name
+     * @param formatterClassName    a {@link LogFormatter} class name
+     * @param isManaged indicates whether the created logger should be managed by this;
+     *          if true, the logger name must be unique and the logger instance can be obtained 
+     *          by {@link #getLogger(String)}; 
+     *          if false, this does not maintain a reference to the created logger
+     * @return      the constructed named {@link Logger}
+     * @throws IllegalArgumentException     if logger is to be managed and the same name already exists.     
+     * @see #createLogger(String, int, String, String, String)
+     * @since 3.2 (DTP 1.7)
+     */
+    public static Logger createLogger( String loggerName,
+            int logLevel,
+            String logDirectory,
+            String logPrefix,
+            String formatterClassName,
+            boolean isManaged )
+    {
+    	if( isManaged && m_loggers.containsKey( loggerName ) )
+    		throw new IllegalArgumentException( Messages.logManager_duplicateName );
+    	
+    	validateInput( logLevel, logDirectory, logPrefix );
+
+    	Logger logger = new Logger( loggerName );
+    	
+    	// set up the logger
+    	setLoggerLevel( logger, logLevel );
+    	
+    	// if the caller wants the logger off, then don't bother setting the 
+    	// rest of the settings since they'll be empty strings
+		if( isLogLevelOff( logger.getLevel().intValue() ) )
+    		return logger;
+    	
+    	resetLoggerFileConfig( logger, logDirectory, logPrefix, formatterClassName );
+    	
+    	if( isManaged )
+    	    m_loggers.put( loggerName, logger );
+    	
+    	return logger;
+    }
+    
+	private static void validateInput( int logLevel, String logDirectory, String logPrefix )
+	{
+		// no validation for log directory and log prefix if the caller just wants 
+		// the logger off.
+		if( isLogLevelOff( logLevel ) )
+			return;
+		
+		if( logDirectory == null || logPrefix == null )
+    		throw new NullPointerException();
+    	
+    	if( logDirectory.length() == 0 || logPrefix.length() == 0 )
+    		throw new IllegalArgumentException();
+	}
+
+	/**
+	 * Creates a named <code>Logger</code> with the specified log configuration 
+	 * information, if the named <code>Logger</code> doesn't already exist.  If the 
+	 * named <code>Logger</code> already exists, then it will be updated the specified log 
+	 * configuration.  If the specified log level or the formatter class is different, 
+	 * then the new values will be set while maintaining the same log file.  If either 
+	 * the log directory or the log prefix has changed, then a new log file will be 
+	 * created. 
+	 * @param loggerName			the name of the logger to be created or updated.
+	 * @param logLevel				the logger log level.
+	 * @param logDirectory			the required directory to store the logs.
+	 * @param logPrefix				the required file name prefix of the log 
+	 * 								file name; the format will be 
+	 * 								&lt;logPrefix&gt;-YYMMDD-hhmmss.log.
+	 * @param formatterClassName	a <code>LogFormatter</code> class 
+	 * 								name; if this is null or empty, the 
+	 * 								default <code>LogFormatter</code> will be 
+	 * 								used. The customized log formatter must inherit 
+	 * 								from <code>org.eclipse.datatools.connectivity.oda.logging.LogFormatter</code> 
+	 * 								and implements the <code>format()</code> 
+	 * 								method.
+	 * @return	the constructed or updated named <code>Logger</code>.
+	 */
+	public static Logger getLogger( String loggerName, 
+    							  	int logLevel,
+									String logDirectory,
+									String logPrefix,
+									String formatterClassName )
+    {
+		validateInput( logLevel, logDirectory, logPrefix );
+		
+    	Logger logger = getLogger( loggerName );
+    	
+    	// if it didn't already exist, create it
+    	if( logger == null )
+    		return createLogger( loggerName, logLevel, logDirectory, 
+    							 logPrefix, formatterClassName );
+    	
+    	// the named logger already exists, update it.
+    	
+    	// update with new log level
+    	setLoggerLevel( logger, logLevel );
+    	
+    	// if the caller wants the logger off, then don't bother setting the 
+    	// rest of the settings since they'll be empty strings
+    	if( isLogLevelOff( logger.getLevel().intValue() ) )
+    	{
+    	    logger.setHandler( null );
+    		return logger;
+    	}
+    	
+    	// if the previous handler wasn't a file handler, then we need 
+    	// to replace the existing handler with a new file handler
+    	Handler handler = logger.getHandler();
+    	if( ! ( handler instanceof FileHandler ) )
+    	{
+    		resetLoggerFileConfig( logger, logDirectory, logPrefix, formatterClassName );
+    		return logger;
+    	}
+    	
+    	// check whether the file configuration has changed.
+    	FileHandler fileHandler = (FileHandler) handler;
+    	if( hasLoggerFileConfigChanged( logger, fileHandler, 
+    									logDirectory, logPrefix ) )
+    	{
+    		resetLoggerFileConfig( logger, logDirectory, logPrefix, formatterClassName );
+    		return logger;
+    	}
+    	
+    	// check if the formatter has changed
+    	LogFormatter origFormatter = fileHandler.getFormatter();
+    	String origFormatterClassName = origFormatter.getClass().getName();
+    	
+    	if( origFormatterClassName.equals( formatterClassName ) )
+    		return logger;
+    	
+    	// formatter class was changed, try to change to the new formatter
+    	try
+		{
+    		LogFormatter formatter = getLogFormatterInstance( formatterClassName );
+    		fileHandler.setFormatter( formatter );
+		}
+    	catch( Exception ex )
+		{
+    		// couldn't instantiate the new formatter class through reflection, 
+    		// so we're stuck using the old one, log the exception
+    		logger.severe( ex );
+		}
+    	
+    	return logger;
+    }
+	
+	private static boolean hasLoggerFileConfigChanged( Logger logger,
+													   FileHandler fileHandler, 
+													   String newLogDirectory, 
+													   String newLogPrefix )
+	{
+    	String fullFilename = fileHandler.getPreferredFilename();
+    	File origFile = new File( fullFilename );
+    	
+    	File origDir = null;
+    	File newDir = null;
+    	
+    	try
+		{
+    		origDir = origFile.getParentFile().getCanonicalFile();
+    		newDir = ( new File( newLogDirectory ) ).getCanonicalFile();
+		}
+    	catch( IOException ex )
+		{
+    		// shouldn't be in here, but just in case that we can't resolve the 
+    		// canonical path for the original file's parent directory, then we 
+    		// need to create a new FileHandler based on the new log directory.  Otherwise, 
+    		// the new directory couldn't be resolved, then we keep our old FileHandler.
+    		logger.severe( ex );
+    		return( origDir == null );
+		}
+    	
+    	// check if the log directories are the same
+    	if( ! origDir.equals( newDir ) )
+    		return true;
+    	
+    	// this gets just the file name without the directory part: 
+    	// <prefix>-YYYYMMDD-hhmmss.log
+    	String origFilename = origFile.getName();
+    	
+    	// check if the file name ends with the ".log" suffix and has the 
+    	// same prefix
+    	if( ! origFilename.startsWith( newLogPrefix ) || 
+    		! origFilename.endsWith( ".log" ) ) //$NON-NLS-1$
+    		return true;
+    	
+    	// validate whether the portion between the prefix and the log file 
+    	// suffix was our proper time stamp format
+    	// (prefix length + 1)	(length of string - 4)
+    	// 		    V			  V
+    	// <prefix>-YYYYMMDD-hhmmss.log
+    	String origTimetamp = origFilename.substring( newLogPrefix.length() + 1, 
+    												  origFilename.length() - 4 );
+    	
+    	// the length needs to be the same length as our time stamp format
+    	if( origTimetamp.length() != 15 )
+    		return true;
+    	
+    	try
+		{
+    		if( getDateFormat().parse( origTimetamp ) == null )
+    			return true;
+		}
+    	catch( ParseException ex )
+		{
+    		// if there's parse exception, then the timestamp portion wasn't 
+    		// a time stamp, so it must have been something else which means that
+    		// the file name has changed.
+    		return true;
+		}
+    	
+    	// the file config hasn't changed.
+    	return false;
+	}
+    
+    private static void setLoggerLevel( Logger logger, int logLevel )
+    {
+    	// set to the specified level
+    	Level level = new Level( "", logLevel ); //$NON-NLS-1$
+    	logger.setLevel( level );
+    }
+
+    private static void resetLoggerFileConfig( Logger logger, String logDirectory, 
+    										   String logPrefix, String formatterClassName )
+    {   	
+    	// set the file handler with the file name and formatter
+    	String logfileName = generateAbsoluteFileName( logDirectory, logPrefix );
+    	
+    	// cache exceptions that could occur when users use a customized 
+    	// formatter, so that they can take a look at the log to see if something
+    	// went wrong
+    	Exception formatterException = null;
+    	
+    	FileHandler handler = null;
+    	try
+		{
+    		LogFormatter formatter = getLogFormatterInstance( formatterClassName );
+    		handler = ( formatter == null ) ? new FileHandler( logfileName ) : 
+    				  new FileHandler( logfileName, formatter );
+		}
+    	catch( Exception ex )
+		{
+    		formatterException = ex;
+    		
+    		// if a formatter class name wasn't specified or it can't be found using reflection,
+        	// then we default back to the SimpleFormatter
+    		handler = new FileHandler( logfileName );
+		}
+
+    	logger.setHandler( handler );
+    	
+    	// log the exception that we saw when looking for the formatter class
+    	if( formatterException != null )
+    		logger.severe( formatterException );  	
+    }
+
+	/**
+     * Gets a previously created <code>Logger</code> by name. The 
+     * specified name must be the same name used in the 
+     * <code>createLogger()</code> method. 
+     * @param loggerName	the logger's name.
+     * @return				the <code>Logger</code> associated with the name; 
+     * 						<code>null</code> if no <code>Logger</code> is 
+     * 						associated with the specified name.
+     */
+    public static Logger getLogger( String loggerName )
+    {
+    	return (Logger) m_loggers.get( loggerName );
+    }
+
+    private static SimpleDateFormat getDateFormat()
+    {
+        if( sm_dateFormat == null ) 
+            sm_dateFormat = new SimpleDateFormat( "yyyyMMdd-HHmmss" ); //$NON-NLS-1$
+        return sm_dateFormat;
+    }
+    
+    /**
+     * Logic to generate the absolute file name:
+     * <logDirectory>/<logPrefix>-YYYYMMDD-HHmmss.log
+     * If the specified <logDirectory> is not an absolute path,
+     * set it relative to the oda plugin's default log folder.
+     */ 
+    private static String generateAbsoluteFileName( String logDirectory,
+    										        String logFilePrefix )
+    {
+        File logDir = getAbsoluteParent( logDirectory );
+        
+        // format the filename with given prefix, followed by timestamp and .log suffix
+        String logfileName = logFilePrefix + "-"; //$NON-NLS-1$
+    	
+    	Timestamp timestamp = new Timestamp( System.currentTimeMillis() );
+    	logfileName += getDateFormat().format( timestamp ) + ".log"; //$NON-NLS-1$    	
+       
+    	return new File( logDir, logfileName ).getPath();
+    }
+    
+    private static File getAbsoluteParent( String logDirectory )
+    {
+        assert( logDirectory != null && logDirectory.length() > 0 );
+        File logParent = new File( logDirectory );
+        if( logParent.isAbsolute() )
+            return logParent;   // use as is
+        
+        // the specified logDirectory is relative, 
+        // set its parent to be the oda plugin's default log folder 
+        IPath pluginLogPath = getPluginLogPath();
+        logParent = pluginLogPath != null ?
+                pluginLogPath.append( logDirectory ).toFile() :
+                null; 
+        return logParent;
+    }
+    
+    /**
+     * Returns the plugin's default log parent file
+     * in the workspace state location.
+     * @return
+     * @throws  IllegalStateException when the plugin activator 
+     * 					is not instantiated yet
+     */
+    private static IPath getPluginLogPath() throws IllegalStateException
+    {
+        // try to use oda plugin's default state location's log folder as its parent
+        OdaPlugin odaPlugin = OdaPlugin.getDefault();
+        if( odaPlugin == null )     // not on OSGi platform
+        {
+            return null;            // unable to obtain plugin path
+        }
+
+        return odaPlugin.getStateLocation()
+                        .append( LOG_SUBFOLDER_NAME ); 	
+    }
+    
+    // use reflection to generate the specified log formatter class instance
+    private static LogFormatter getLogFormatterInstance( String formatterClassName ) throws Exception
+    {
+    	if( formatterClassName == null || formatterClassName.length() == 0 )
+    		return null;
+    		
+    	Class<?> formatterClass = Class.forName( formatterClassName );
+    	return (LogFormatter) formatterClass.newInstance();
+    }
+
+    // checks if the given log level is set to OFF
+    private static boolean isLogLevelOff( int logLevel )
+    {
+		return ( logLevel > Level.SEVERE );
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/LogRecord.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/LogRecord.java
new file mode 100644
index 0000000..b487f46
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/LogRecord.java
@@ -0,0 +1,118 @@
+/*
+ ******************************************************************************
+ * Copyright (c) 2004, 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *     
+ ******************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.util.logging;
+
+import java.io.Serializable;
+
+/**
+ * <code>LogRecord</code> contains information that can be logged 
+ * by a <code>Handler</code>.
+ */
+public class LogRecord implements Serializable
+{
+    private static final long serialVersionUID = 1L;
+    // member variables
+    private Level     	m_level;
+    private String      m_message;
+    private long        m_millis;
+    private Throwable	m_thrown;
+
+    /**
+     * Creates a <code>LogRecord</code> instance with the specified 
+     * log level and message.  The <code>LogRecord</code> will automatically 
+     * be set with the current time.
+     * @param level		the log level.
+     * @param message	the log message.
+     */
+    public LogRecord( Level level, String message )
+    {
+        m_level = level;
+        m_message = message;
+        
+        m_millis = System.currentTimeMillis();
+    }
+
+    /**
+     * Gets the logging level.
+     * @return	the logging level.
+     */
+    public Level getLevel()
+    {
+        return m_level;
+    }
+
+    /**
+     * Sets the logging level to the specified value.
+     * @param level		the new logging level.
+     */
+    public void setLevel( Level level )
+    {
+        m_level = level;
+    }
+
+    /**
+     * Sets the <code>LogRecord</code> message to the specified value.
+     * @param message	the new log message.
+     */
+    public void setMessage( String message )
+    {
+        m_message = message;
+    }
+
+    /**
+     * Gets the log message.
+     * @return	the log message.
+     */
+    public String getMessage()
+    {
+        return m_message;
+    }
+
+    /**
+     * Sets the <code>LogRecord</code> time to the specified value.
+     * @param millis	the new time.
+     */
+    public void setMillis( long millis )
+    {
+        m_millis = millis;
+    }
+
+    /**
+     * Gets the log time.
+     * @return	the log time.
+     */
+    public long getMillis()
+    {
+        return m_millis;
+    }
+    
+    /**
+     * Sets an associated <code>Throwable</code> to the <code>LogRecord</code>.
+     * @param thrown	the <code>Throwable</code>.
+     */
+    public void setThrown( Throwable thrown )
+    {
+    	m_thrown = thrown;
+    }
+    
+    /**
+     * Gets the associated <code>Throwable</code>.
+     * @return	the <code>Throwable</code>.
+     */
+    public Throwable getThrown()
+    {
+    	return m_thrown;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/Logger.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/Logger.java
new file mode 100644
index 0000000..2d87e3b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/Logger.java
@@ -0,0 +1,249 @@
+/*
+ ******************************************************************************
+ * Copyright (c) 2004, 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *     
+ ******************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.util.logging;
+
+/**
+ * <code>Logger</code> allows callers to log messages for their application. 
+ * Loggers should be created using the <code>LogManager.createLogger</code> 
+ * method, which creates named loggers with specific logging settings. 
+ * Loggers should be named appropriately based on the application using the 
+ * logging framework to prevent logger name collision.  For example, if 
+ * logging were done on javax.sql package, then an appropriate logger name 
+ * would be "javax.sql".
+ */
+public class Logger
+{
+    // Member Variables
+    private String 	            	m_loggerName;
+    private Level 		    		m_level;
+    private Handler 		    	m_handler;
+
+    // Package-level constructor to deal with handling the deprecated 
+    // use of the "global" logger
+    Logger()
+    {
+    	m_loggerName = "global"; //$NON-NLS-1$
+    	
+    	// default to logging level OFF.
+    	m_level = Level.OFF_LEVEL;
+    }
+    
+    /**
+     * Creates a <code>Logger</code> instance with the specified name. 
+     * The name should be appropriately named based on the application 
+     * that is doing the logging.
+     * @param loggerName	the name of the logger.
+     */
+    protected Logger( String loggerName )
+    {
+        m_loggerName = loggerName;
+        
+        // default to logging level OFF.
+        m_level = Level.OFF_LEVEL;
+    }
+	
+    /**
+     * Log a SEVERE error or exception.
+     * @param thrown	the throwable being thrown.
+     */
+    public void severe( Throwable thrown )
+    {
+    	log( Level.SEVERE_LEVEL, thrown );
+    }
+    
+    /**
+     * Log a SEVERE log message.
+     * @param message	the log message.
+     */
+    public void severe( String message )
+    {
+    	log( Level.SEVERE_LEVEL, message );
+    }
+    
+    /**
+     * Log a WARNING exception.
+     * @param thrown    the throwable being thrown.
+     */
+    public void warning( Throwable thrown )
+    {
+        log( Level.WARNING_LEVEL, thrown );
+    }
+
+    /**
+     * Log a WARNING log message.
+     * @param message	the log message.
+     */
+    public void warning( String message )
+    {
+    	log( Level.WARNING_LEVEL, message );
+    }
+
+    /**
+     * Log a INFO log message.
+     * @param message	the log message.
+     */
+    public void info( String message )
+    {
+    	log( Level.INFO_LEVEL, message );
+    }
+
+    /**
+     * Log a CONFIG log message.
+     * @param message	the log message.
+     */
+    public void config( String message )
+    {
+    	log( Level.CONFIG_LEVEL, message );
+    }
+
+    /**
+     * Log a FINE log message.
+     * @param message	the log message.
+     */
+    public void fine( String message )
+    {
+    	log( Level.FINE_LEVEL, message );
+    }
+
+    /**
+     * Log a FINER log message.
+     * @param message	the log message.
+     */
+    public void finer( String message )
+    {
+    	log( Level.FINER_LEVEL, message );
+    }
+
+    /**
+     * Log a FINEST log message.
+     * @param message	the log message.
+     */
+    public void finest( String message )
+    {
+    	log( Level.FINEST_LEVEL, message );
+    }
+
+    /**
+     * Log a message at the specified level.
+     * @param level		the log level to log the message.
+     * @param message	the log message.
+     */
+    public void log( Level level, String message )
+    {
+        if( isLoggable( level ) && m_handler != null )
+        {
+            LogRecord record = new LogRecord( level, message );
+            m_handler.publish( record );
+        }
+    }
+    
+    /**
+     * Log a throwable at the specified level.
+     * @param level		the log level to log the throwable.
+     * @param thrown	the throwable to log.
+     */
+    public void log( Level level, Throwable thrown )
+    {
+    	if( isLoggable( level ) && m_handler != null )
+    	{
+    		LogRecord record = new LogRecord( level, "" ); //$NON-NLS-1$
+			record.setThrown( thrown );
+			m_handler.publish( record );
+    	}
+    }
+
+    /**
+     * Get the associated log level.
+     * @return	the associated log level.
+     */
+    public Level getLevel()
+    {
+        return m_level;
+    }
+
+    /**
+     * Sets the level to associate with this <code>Logger</code>.
+     * @param level		the log level to associate.
+     */
+    public void setLevel( Level level )
+    {
+        m_level = level;
+        
+        if( m_handler != null )
+        	m_handler.setLevel( m_level );
+    }
+
+    /**
+     * Gets the name of this <code>Logger</code>.
+     * @return	the name of the <cdoe>Logger</code>.
+     */
+    public String getName()
+    {
+        return m_loggerName;
+    }
+
+    /**
+     * Gets the associated <code>Handler</code>.
+     * @return	the associated <code>Handler</code>.
+     */
+    protected Handler getHandler()
+    {
+        return m_handler;
+    }
+
+    /**
+     * Sets the specified <code>Handler</code> to associate with this
+     * <code>Logger</code>.
+     * @param handler	the <code>Handler</code> to associate.
+     */
+    protected void setHandler( Handler handler )
+    {
+    	// if there's an existing handler and it isn't the same one 
+    	// that's being set, then we should close the existing one 
+    	// before assigning the new one.
+    	if( m_handler != null && m_handler != handler )
+    		m_handler.close();
+    	
+        m_handler = handler;
+        if( m_handler != null )
+            m_handler.setLevel( m_level );
+    }
+
+    /**
+     * Checks whether the specified level is loggable by this 
+     * <code>Logger</code>.  Also checks whether the <code>Logger</code> 
+     * level is set to OFF.
+     * @param level		the log level.
+     * @return			true if the specified level is higher or equal 
+     * 					to the <code>Logger</code>'s level and if the 
+     * 					<code>Logger</code>'s level isn't OFF.
+     */
+    public boolean isLoggable( Level level )
+    {
+        return ( level.intValue() >= m_level.intValue() && 
+        		 m_level.intValue() <= Level.SEVERE );
+    }
+
+    void changeLogFile( String filename )
+    {
+        if( m_handler != null )
+        {
+            m_handler.close();
+            ( ( FileHandler ) m_handler ).setOutputFile( filename );
+        }
+        else    //in the case where the previous file creation failed.
+            m_handler = new FileHandler( filename );
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/LoggingErrorHandler.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/LoggingErrorHandler.java
new file mode 100644
index 0000000..67b2259
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/LoggingErrorHandler.java
@@ -0,0 +1,88 @@
+/*
+ ******************************************************************************
+ * Copyright (c) 2004, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *     
+ ******************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.util.logging;
+
+/**
+ *	<code>LoggingErrorHandler</code> can be associated with 
+ *	<code>Handlers</code> to process any exceptions that occur 
+ *	during logging.  This will alleviate the log caller from 
+ *	having to handle logging errors.
+ */
+public class LoggingErrorHandler
+{
+	/**
+	 * The constant indicating a <code>close</code> of an  
+	 * <code>OutputStream</code> fails.
+	 */
+    public static int       CLOSE_FAILURE   = 0;
+    
+    /**
+     * The constant indicating a <code>flush</code> of an 
+     * <code>OutputStream</code> fails.
+     */
+    public static int       FLUSH_FAILURE   = 1;
+    
+    /**
+     * The constant indicating that formatting failed.
+     */
+    public static int       FORMAT_FAILURE  = 2;
+    
+    /**
+     * The constant indicating a failure not in the other 
+     * categories.
+     */
+    public static int       GENERIC_FAILURE = 3;
+    
+    /**
+     * The constant indicating a <code>open</code> of an 
+     * <code>OutputStream</code> fails.
+     */
+    public static int       OPEN_FAILURE    = 4;
+    
+    /**
+     * The constant indicating a <code>write</code> of an 
+     * <code>OutputStream</code> fails.
+     */
+    public static int       WRITE_FAILURE   = 5;
+
+    /**
+     *	Creates a <code>LoggingErrorHandler</code> instance.
+     */
+    public LoggingErrorHandler()
+    {
+    }
+
+    /**
+     * This method is called when a <code>Handler</code> failure occurs.  
+     * It outputs the failure to <code>System.err</code>.
+     * @param message		the error message.
+     * @param exception		the <code>Exception</code> that caused the 
+     * 						<code>Handler</code> to fail.
+     * @param errorCode		the error code constant.
+     */
+    public void error( String message, Exception exception, 
+    				   int errorCode )
+    {
+    	// print out to System.err similar to JDK
+    	String err = "org.eclipse.datatools.connectivity.oda.util.logging (" + errorCode + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+    	if( message != null && message.length() > 0 )
+    		err += ": " + message; //$NON-NLS-1$
+    	
+    	System.err.println( err );
+    	
+    	if( exception != null )
+    		exception.printStackTrace();
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/SimpleFormatter.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/SimpleFormatter.java
new file mode 100644
index 0000000..dec5e31
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/SimpleFormatter.java
@@ -0,0 +1,72 @@
+/*
+ ******************************************************************************
+ * Copyright (c) 2004, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *     
+ ******************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.util.logging;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.sql.Timestamp;
+
+/**
+ * Formats a <code>LogRecord</code> into an understandable format.
+ * It generates a string output of the LogRecord in the form of:
+ * <br>
+ * Log Level       Time        Log Message
+ * <br>
+ * <Exception stack trace> ...
+ */
+public class SimpleFormatter extends LogFormatter
+{
+	/**
+	 * Creates an <code>SimpleFormatter</code> instance.
+	 */
+    public SimpleFormatter()
+    {
+    }
+
+    /**
+     * Formats the specified <code>LogRecord</code> to an understandable 
+     * format.
+     * @param record	the <code>LogRecord</code> to format.
+     * @return			the formatted string.
+     */
+    public String format( LogRecord record )
+    {
+        // resulting string:
+        //  Log Level       Time        Log Message
+        //	<Exception stack trace> ...
+        //	...
+        Timestamp stamp = new Timestamp( record.getMillis() );
+        StringBuffer buffer = new StringBuffer();
+        buffer.append( record.getLevel().intValue() );
+        buffer.append( "\t" ); //$NON-NLS-1$
+        buffer.append( stamp.toString() );
+        buffer.append( "\t\t" ); //$NON-NLS-1$
+        buffer.append( record.getMessage() );
+        buffer.append( "\n" ); //$NON-NLS-1$
+        
+		Throwable thrown = record.getThrown();
+		if( thrown != null )
+		{
+			StringWriter stringWriter = new StringWriter();
+			PrintWriter printWriter = new PrintWriter( stringWriter );
+			thrown.printStackTrace( printWriter );
+			buffer.append( stringWriter.toString() );
+			printWriter.close();
+			// StringWriter.close() does nothing
+		}
+        
+        return buffer.toString();
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/StreamHandler.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/StreamHandler.java
new file mode 100644
index 0000000..6b7199b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/StreamHandler.java
@@ -0,0 +1,164 @@
+/*
+ ******************************************************************************
+ * Copyright (c) 2004, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *     
+ ******************************************************************************
+*/
+
+package org.eclipse.datatools.connectivity.oda.util.logging;
+
+import java.io.IOException;
+import java.io.OutputStream;
+
+/**
+ *	<code>StreamHandler</code> is a stream based logging 
+ *	<code>Handler</code>.
+ */
+public class StreamHandler extends Handler
+{
+    // member Variables
+    private OutputStream m_outStream;
+    
+    /**
+     * Creates a <code>StreamHandler</code> with no output stream.
+     */
+    public StreamHandler()
+    {
+    	// defaults to SimpleFormatter
+    	setFormatter( new SimpleFormatter() );
+    }
+
+    /**
+     * Creates a <code>StreamHandler</code> with the specified output 
+     * stream and <code>LogFormatter</code>.
+     * @param output		the output stream.
+     * @param formatter		the log formatter.
+     */
+    public StreamHandler( OutputStream output, LogFormatter formatter )
+    {
+    	setOutputStream( output );
+    	setFormatter( formatter );
+    }
+    
+    /**
+     * Closes the current output stream.
+     */
+    public void close()
+    {
+        try
+        {
+        	// flush before closing
+        	flush();
+        	
+        	// this could happen if output stream was never specified.
+        	if( m_outStream != null )
+            	m_outStream.close();
+        }
+        catch( IOException ex )
+        {
+            reportError( "", ex, LoggingErrorHandler.CLOSE_FAILURE ); //$NON-NLS-1$
+        }
+    }
+
+    /**
+     * Cleans up this <code>StreamHandler</code> by calling the 
+     * <code>close</code> method.
+     */
+    protected void finalize()
+    {
+    	close();
+    }
+    
+    /**
+     * Flushes buffered message to the output stream.
+     */
+    public void flush()
+    {
+        try
+        {
+        	if( m_outStream != null )
+        		m_outStream.flush();
+        }
+        catch( IOException ex )
+        {
+        	reportError( "", ex, LoggingErrorHandler.FLUSH_FAILURE ); //$NON-NLS-1$
+        }
+    }
+
+    /**
+     * Format and publish the specified <code>LogRecord</code>.  This first checks 
+     * that there is an associated <code>OutputStream</code> and the specified 
+     * <code>LogRecord</code> has the required log level.  This also checks the 
+     * <code>LogRecord</code> with the associated <code>Filter</code> to see if 
+     * the record should be published.  Then this uses its <code>LogFormatter</code> 
+     * to format the record and publishes the result to the <code>OutputStream</code>.
+     * @param record	the <code>LogRecord</code> to format and publish.
+     */
+    public void publish( LogRecord record )
+    {
+        if( ! isLoggable( record ) )
+            return;
+
+        try
+        {
+    		String recordString = getFormatter().format( record );
+    		m_outStream.write( recordString.getBytes() );	
+        }
+        catch( IOException ex )
+        {
+            reportError( "", ex, LoggingErrorHandler.WRITE_FAILURE ); //$NON-NLS-1$
+        }
+        catch( Exception ex )
+		{
+        	reportError( "", ex, LoggingErrorHandler.FORMAT_FAILURE ); //$NON-NLS-1$
+		}
+    }
+    
+    /**
+     * Checks if this <code>StreamHandler</code> has an associated 
+     * <code>OutputStream</code>, whether the <code>LogRecord</code> has the 
+     * adequate log level, and whether it satisfies the associated <code>Filter</code>.
+     * @param record	the <code>LogRecord</code> to check.
+     * @return			true if the <code>LogRecord</code> should be logged.
+     */
+    public boolean isLoggable( LogRecord record )
+    {
+    	return( super.isLoggable( record ) && m_outStream != null );
+    }
+    
+    /**
+     * Sets the <code>LogFormatter</code> for this <code>StreamHandler</code>.  
+     * If the formatter is <code>null</code>, then default <code>SimpleFormatter</code> 
+     * will be used.
+     * @param formatter		the formatter to set.
+     */
+    public void setFormatter( LogFormatter formatter )
+    {
+    	formatter = ( formatter != null ) ? formatter :
+    				new SimpleFormatter();
+    	
+    	super.setFormatter( formatter );
+    }
+    
+    /**
+     * Sets the output stream.
+     * @param outStream		the output stream.
+     */
+    protected void setOutputStream( OutputStream outStream )
+    {
+    	if( outStream == null )
+    		throw new NullPointerException();
+    	
+    	// flush the existing stream
+    	flush();
+    	
+        m_outStream = outStream;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/package.html b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/package.html
new file mode 100644
index 0000000..b2d90bc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/logging/package.html
@@ -0,0 +1,41 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2004, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+
+Provides a trace logging utility to an 
+ODA runtime extension.
+<p>
+The package provides a default implementation of trace logging framework,
+which does not impose dependency on other packages or specific platforms.
+<br>It may serve to encapsulate the type of logging framework used, 
+by simply extending its implementation.  
+Each ODA runtime driver is then not required to make any direct changes when
+switching to another logging framework. 
+<p> 
+The use of this logging utility is purely optional.  
+An ODA runtime driver extension may directly use its driver-specific logging 
+utility, as appropriate.
+
+<!-- Put @see and @since tags down here. -->
+@since 1.0
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/.gitignore b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/.gitignore
new file mode 100644
index 0000000..93bafad
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/.gitignore
@@ -0,0 +1 @@
+vss*.scc
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/ConnectionProfileProperty.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/ConnectionProfileProperty.java
new file mode 100644
index 0000000..ff1e590
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/ConnectionProfileProperty.java
@@ -0,0 +1,98 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007, 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.util.manifest;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+
+/**
+ * The property definition that references an ODA connection profile.
+ */
+public class ConnectionProfileProperty
+{
+    
+    // property names for connection profile info
+    //      for use as a key in connection properties collection
+    public static final String PROFILE_NAME_PROP_KEY = "OdaConnProfileName"; //$NON-NLS-1$
+    public static final String PROFILE_STORE_FILE_PATH_PROP_KEY = "OdaConnProfileStorePath"; //$NON-NLS-1$
+
+    // @since 3.3.3 (DTP 1.9.2)
+    //      for use as a key in a transient collection of connection properties 
+    public static final String TRANSIENT_PROFILE_STORE_RESOLVED_PATH_PROP_KEY = 
+                "org.eclipse.datatools.connectivity.oda_transient.profileStorePath"; //$NON-NLS-1$
+
+    //      for use as a key in oda.consumer.IPropertyProvider's 
+    //      connection property context map
+    public static final String PROFILE_STORE_FILE_PROP_KEY = "OdaConnProfileStore"; //$NON-NLS-1$
+
+    private static final String PROPERTY_GROUP_NAME = "ConnectionProfileProperties"; //$NON-NLS-1$
+
+    /**
+     * Checks whether the specified connection properties 
+     * contain the property that references an external profile by name
+     * @param connProperties   data source connection properties 
+     * @return  true if the specified properties contain a non-empty value 
+     *          for the profile name property; false otherwise
+     * @since 3.2.2 (DTP 1.7.2)
+     */
+    public static boolean hasProfileName( Properties connProperties )
+    {
+        if( connProperties == null )
+            return false;
+        String profileName = connProperties.getProperty( PROFILE_NAME_PROP_KEY );
+        return ( profileName != null && profileName.length() > 0 );
+    }
+    
+    /**
+     * Returns a new property definition for the specified property name.
+     * Such property definitions are defined by the ODA framework,
+     * and may be automatically added to an
+     * ODA runtme extension's manifest, if not explicitly defined. 
+     * @param propertyName  must be one of those defined here.
+     * @return
+     */
+    static Property createPropertyDefinition( String propertyName )
+    {
+        assert( propertyName != null );
+        assert( propertyName == PROFILE_NAME_PROP_KEY ||
+                propertyName == PROFILE_STORE_FILE_PATH_PROP_KEY );
+        
+        // get localized display names
+        String propDisplayName = getPropertyDisplayName( propertyName );
+        String groupDisplayName = getPropertyDisplayName( PROPERTY_GROUP_NAME );
+             
+        Property newProp = new Property( propertyName, propDisplayName, 
+                             PROPERTY_GROUP_NAME, groupDisplayName );
+        // profile_name value should be handled as a literal string
+        if( propertyName == PROFILE_NAME_PROP_KEY )
+            newProp.setAllowsEmptyValueAsNull( false ); 
+        return newProp;
+    }
+    
+    static private String getPropertyDisplayName( String propertyName )
+    {
+        if( propertyName == PROFILE_NAME_PROP_KEY )
+            return Messages.profileProperty_PROFILE_NAME;
+        
+        if( propertyName == PROFILE_STORE_FILE_PATH_PROP_KEY )
+            return Messages.profileProperty_PROFILE_STORE_PATH;
+        
+        if( propertyName == PROPERTY_GROUP_NAME )
+            return Messages.profileProperty_GROUP_PROPERTIES;
+
+        return propertyName;    // use name for display name
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/DataSetType.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/DataSetType.java
new file mode 100644
index 0000000..9edfbc8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/DataSetType.java
@@ -0,0 +1,335 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.util.manifest;
+
+import java.sql.Types;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Properties;
+import java.util.Vector;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+
+/**
+ * Defines a type of data set supported by the ODA data source extension. 
+ * A data set definition has a unique id, display name
+ * and a set of driver-specific data type to ODA data type(s) mappings.
+ */
+public class DataSetType
+{
+	private String m_id;
+	private String m_displayName;
+	private Hashtable<Integer, DataTypeMapping> m_dataTypeMappingsByNativeCode;
+    private Hashtable<String, DataTypeMapping> m_dataTypeMappingsByNativeName;
+	private Property[] m_properties = null;
+	private Properties m_propsVisibility;
+    private IConfigurationElement m_configElement;
+    private List<Relationship> m_relationships;
+	
+	DataSetType( IConfigurationElement dataSetElement ) throws OdaException
+    {
+        init( dataSetElement );
+    }
+    
+    protected DataSetType()
+    {
+    }
+
+    protected void init( IConfigurationElement dataSetElement ) throws OdaException
+	{
+		m_id = dataSetElement.getAttribute( "id" ); //$NON-NLS-1$
+		assert( m_id != null );		// this check is already done by caller		
+		m_displayName = ManifestExplorer.getElementDisplayName( dataSetElement );
+
+		// dataTypeMapping elements
+		m_dataTypeMappingsByNativeCode = new Hashtable<Integer, DataTypeMapping>();
+        m_dataTypeMappingsByNativeName = new Hashtable<String, DataTypeMapping>();
+		IConfigurationElement[] typeMappings = dataSetElement.getChildren( "dataTypeMapping" ); //$NON-NLS-1$
+		int numOfTypeMappings = typeMappings.length;
+		if( numOfTypeMappings == 0 )
+			throw new OdaException( Messages.bind( Messages.manifest_NO_DATA_TYPE_MAPPINGS_DEFINED,
+													m_id ) );
+		
+		for( int i = 0; i < numOfTypeMappings; i++ )
+		{
+			IConfigurationElement typeMapping = typeMappings[i];
+            
+            DataTypeMapping dataTypeMap = new DataTypeMapping( typeMapping, m_id );
+			m_dataTypeMappingsByNativeCode.put( 
+                    new Integer( dataTypeMap.getNativeTypeCode() ), dataTypeMap );
+            m_dataTypeMappingsByNativeName.put( dataTypeMap.getNativeType(), dataTypeMap );
+		}
+		
+		// properties element
+		IConfigurationElement[] propertiesElements = dataSetElement.getChildren( "properties" ); //$NON-NLS-1$
+		if ( propertiesElements.length > 0 )
+		{
+			// if multiple properties elements exist, use the last one
+		    IConfigurationElement propertiesElement =
+	            propertiesElements[ propertiesElements.length - 1 ];
+
+		    ArrayList<Property> extensionProps = ExtensionManifest.getPropertyDefinitions( propertiesElement );
+            m_properties = (Property[]) extensionProps.toArray( new Property[ extensionProps.size() ] );      
+
+            m_propsVisibility = ExtensionManifest.getPropertyVisibilities( propertiesElement );
+		}
+        
+        // relationship element
+        m_relationships = Relationship.createInstances( dataSetElement );
+        
+        // successfully initialized
+        m_configElement = dataSetElement;
+	}
+	
+	/**
+     * Returns the configuration element used to initialize this instance.
+     */
+    protected IConfigurationElement getConfigurationElement()
+    {
+        return m_configElement;
+    }
+
+    /**
+	 * Returns the ID which uniquely identifes the type of data set among 
+	 * all ODA data sets supported by the driver.
+	 * @return	the data set type name.
+	 */
+	public String getID()
+	{
+		return m_id;
+	}
+	
+	/**
+	 * Returns the display name of the ODA data set type element.
+	 * Defaults to element ID if no display name is specified.
+	 * It can be used by the designer tool of an ODA consumer application
+	 * to display a list of ODA data sets.
+	 * @return	The display name of the ODA data set element.
+	 */
+	public String getDisplayName()
+	{
+	    return m_displayName;
+	}
+	
+	/**
+	 * Returns the data type mapping for the specified native data type code.
+	 * @param nativeDataTypeCode	a native data type code.
+     * @return  the data type mapping for the specified native type code, or null 
+     *          if there is no corresponding data type mapping defined in 
+     *          this data set type.
+	 */
+	public DataTypeMapping getDataTypeMapping( int nativeDataTypeCode )
+	{
+		Integer typeCode = new Integer( nativeDataTypeCode );
+		return (DataTypeMapping) m_dataTypeMappingsByNativeCode.get( typeCode );
+	}
+    
+    /**
+     * Returns the data type mapping for the specified native data type name.
+     * @param nativeDataTypeName    a native data type name.
+     * @return  the data type mapping for the specified native type name, or null 
+     *          if there is no corresponding data type mapping defined in 
+     *          this data set type.
+     * @since 3.0.3
+     */
+    public DataTypeMapping getDataTypeMapping( String nativeDataTypeName )
+    {
+        return (DataTypeMapping) m_dataTypeMappingsByNativeName.get( nativeDataTypeName );
+    }
+	
+	/**
+	 * Returns the data type mappings for the data set type, or an 
+	 * empty array if no mappings exist.
+	 * @return	the data type mappings for this data set type, or an 
+	 * 			empty array if no mappings exist.
+	 */
+	public DataTypeMapping[] getDataTypeMappings()
+	{
+		Collection<DataTypeMapping> typeMappings = m_dataTypeMappingsByNativeCode.values();
+		int count = typeMappings.size();
+		return ( DataTypeMapping[] ) typeMappings.toArray( new DataTypeMapping[count] );
+	}
+    
+    /**
+     * Returns the primary ODA scalar data type code
+     * that the specified native data type is mapped to.
+     * <br>If none or unknown native data type value (0) is specified, 
+     * maps to an ODA String data type by default.  
+     * If no default ODA data type mapping is defined by the driver
+     * for the specified native data type, returns Types.NULL
+     * for unknown ODA data type.
+     * @return  the primary ODA scalar data type code;
+     *          may be java.sql.Types.NULL if no mapping is found.
+     */
+    public int getDefaultOdaDataTypeCode( int nativeDataTypeCode )
+    {
+        DataTypeMapping mapping = getDataTypeMapping( nativeDataTypeCode );
+        if( mapping != null )
+            return mapping.getOdaScalarDataTypeCode();
+
+        // no mapping is defined by the ODA driver
+        // for the specified nativeDataTypeCode,
+        // maps a 0 native data type (defined as none or unknown value in
+        // the oda.design model) to an ODA String data type by default
+        if( nativeDataTypeCode == 0 )   
+            return Types.CHAR;          
+
+        // unknown ODA data type
+        return Types.NULL;           
+    }
+	
+	/**
+	 * Returns an array of Property definition instances that represent
+	 * all the properties defined by this data set element.
+	 * The collection includes both top-level properties and
+	 * those in a group, and could be defined as either visible or hidden.
+	 * @return	an array of all property definitions; 
+	 * 			an empty array is returned if no properties are defined.
+	 */
+	public Property[] getProperties()
+	{
+	    if ( m_properties == null )
+	    {
+	        // creates an empty array to return
+	        m_properties = new Property[ 0 ];
+	    }
+	    return m_properties;
+	}
+
+    /**
+     * A convenience method to return an array of Property definition instances 
+     * that represent the properties defined as visible by this data set element.
+     * The collection includes both top-level properties and those in a group.
+     * @return  an array of visible property definitions; 
+     *          an empty array is returned if no visible properties are defined.
+     */
+    public Property[] getVisibleProperties()
+    {
+        return ManifestUtil.getVisiblePropertiesDefn( getProperties(), 
+                getPropertiesVisibility());
+    }
+
+    /**
+     * A convenience method to return an array of Property definition instances 
+     * that represent the properties defined as hidden by this data set element.
+     * The collection includes both top-level properties and those in a group.
+     * @return  an array of hidden property definitions; 
+     *          an empty array is returned if no hidden properties are defined.
+     */
+    public Property[] getHiddenProperties()
+    {
+        return ManifestUtil.getHiddenPropertiesDefn( getProperties(), 
+                getPropertiesVisibility());
+    }
+
+    /**
+     * Returns the Property definition instance that matches the specified name
+     * in the list of properties defined by this data set element.
+     * @param propertyName  the name of a property
+     * @return  the matching Property definition, or null if no match is found.
+     */
+    public Property getProperty( String propertyName )
+    {
+        if ( propertyName == null || propertyName.length() == 0 )
+            return null;
+        
+        Property[] props = getProperties();
+        for( int i = 0; i < props.length; i++ )
+        {
+            if ( propertyName.equals( props[ i ].getName() ))
+                return props[ i ];
+        }
+        
+        return null;    // no matching property
+    }
+
+	/**
+	 * Returns a Properties collecton of property visibilty settings.
+	 * @return	Properties with the property name as key, and
+	 * 			its visibility setting as value.
+	 * 			An empty collection if no property visibility is defined.
+	 */
+	public Properties getPropertiesVisibility()
+	{
+	    if ( m_propsVisibility == null )
+	        m_propsVisibility = new Properties();
+	    return m_propsVisibility;
+	}
+    
+    /**
+     * Indicates whether this data set type is defined to be deprecated.
+     * @return  true if this data set type is deprecated; false otherwise
+     * @since 3.0.3
+     */
+    public boolean isDeprecated()
+    {
+        List<Relationship> replacedBy = getRelationships( Relationship.TYPE_REPLACED_BY_CODE );
+        return ( replacedBy != null && ! replacedBy.isEmpty() );
+    }
+
+    /**
+     * Indicates whether this data set type is defined to be a wrapper.
+     * @since 3.1.2
+     */
+    public boolean isWrapper()
+    {
+        List<Relationship> wrappersOf = getRelationships( Relationship.TYPE_WRAPPER_OF_CODE );
+        return ( wrappersOf != null && ! wrappersOf.isEmpty() );
+    }
+
+    /**
+     * Gets the related oda data set element id, if specified.
+     * For backward compatibility, this returns the first related replacedBy id.
+     * @return  the related oda data set element id, or 
+     *          null if none is specified.
+     * @since 3.0.3
+     * @deprecated  As of 3.1.2, replaced by {@link #getRelationships(int)}
+     */
+    public String getRelatedDataSetId()
+    {
+        List<Relationship> relationships = getRelationships( Relationship.TYPE_REPLACED_BY_CODE );
+        if( relationships == null )
+            return null;
+        Relationship replacedBy = (Relationship) relationships.get( 0 );
+        return ( replacedBy != null ) ? replacedBy.getRelatedId() : null;
+    }
+
+    /**
+     * Returns a list of data set relationships defined with the specified type. 
+     * @param relationshipType    constant for the type of relationship
+     * @return  a list of specified type of relationships, or
+     *          null if the specified relationshipType is not defined in this data set type.
+     * @see {@link Relationship.TYPE_* constants}
+     * @since 3.1.2
+     */
+    public List<Relationship> getRelationships( int relationshipType )
+    {
+        if( m_relationships == null || m_relationships.isEmpty() )
+            return null;
+        
+        Vector<Relationship> matchingRelationships = new Vector<Relationship>( m_relationships.size() );
+        for( Relationship aRelationship : m_relationships )
+        {
+            if( aRelationship.getType() == relationshipType )
+                matchingRelationships.add( aRelationship );
+        }
+        return matchingRelationships.isEmpty() ? null : matchingRelationships;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/DataTypeMapping.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/DataTypeMapping.java
new file mode 100644
index 0000000..027b9a7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/DataTypeMapping.java
@@ -0,0 +1,318 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.util.manifest;
+
+import java.math.BigDecimal;
+import java.sql.Time;
+import java.sql.Timestamp;
+import java.sql.Types;
+import java.util.Hashtable;
+import java.util.Locale;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+
+/**
+ * The data type mapping of a data provider's native data type to one or more ODA 
+ * data types. A single native data type must be mapped to a primary ODA scalar 
+ * data type. The driver can optionally provide a list of alternate ODA data types 
+ * to which it is capable of converting the native data type.
+ */
+public class DataTypeMapping
+{
+    public static final int[] ODA_NUMERIC_DATA_TYPE_CODES = new int[] { Types.INTEGER, Types.DOUBLE, Types.DECIMAL };
+    public static final int[] ODA_STRING_DATA_TYPE_CODES = new int[] { Types.CHAR };
+    public static final int[] ODA_DATETIME_DATA_TYPE_CODES = new int[]{ Types.DATE, Types.TIMESTAMP };
+    public static final int[] ODA_BOOLEAN_DATA_TYPE_CODES = new int[] { Types.BOOLEAN };
+
+    private static Hashtable<String,Integer> sm_odaTypeCodes;
+    
+	private int m_nativeTypeCode;
+	private String m_nativeType;
+	private String m_odaScalarType;
+	private String[] m_alternativeDataTypes;
+    private int[] m_alternativeDataTypeCodes;
+	
+	DataTypeMapping( IConfigurationElement dataTypeMapping,
+					 String dataSetTypeName ) throws OdaException
+	{
+		
+		m_nativeType = dataTypeMapping.getAttribute( "nativeDataType" ); //$NON-NLS-1$
+		if( m_nativeType == null )
+			throw new OdaException( Messages.bind( Messages.manifest_NO_NATIVE_TYPE_NAME_DEFINED,
+													dataSetTypeName ) );
+		
+		String nativeDataTypeCode = dataTypeMapping.getAttribute( "nativeDataTypeCode" ); //$NON-NLS-1$
+		if( nativeDataTypeCode == null )
+			throw new OdaException( Messages.bind( Messages.manifest_NO_NATIVE_TYPE_CODE_DEFINED,
+													m_nativeType, dataSetTypeName ) );
+		
+		try
+		{
+			m_nativeTypeCode = Integer.parseInt( nativeDataTypeCode );
+		}
+		catch( NumberFormatException ex )
+		{
+			throw new OdaException( Messages.bind( Messages.manifest_INVALID_NATIVE_TYPE_CODE_VALUE,
+													new Object[] { m_nativeType, nativeDataTypeCode, dataSetTypeName } ) );
+		}
+
+		m_odaScalarType = dataTypeMapping.getAttribute( "odaScalarDataType" ); //$NON-NLS-1$
+		sanityCheckOdaScalarType( m_odaScalarType, false /* isForAlternatives */ );
+		
+		IConfigurationElement[] alternativeDataTypes = 
+			dataTypeMapping.getChildren( "alternativeOdaDataType" ); //$NON-NLS-1$
+		int length = alternativeDataTypes.length;
+		m_alternativeDataTypes = new String[length];
+		
+		for( int i = 0; i < length; i++ )
+		{
+			m_alternativeDataTypes[i] = 
+				alternativeDataTypes[i].getAttribute( "odaScalarDataType" ); //$NON-NLS-1$
+			sanityCheckOdaScalarType( m_alternativeDataTypes[i], true /* isForAlternatives */ );
+		}
+	}
+    
+    protected DataTypeMapping( int nativeTypeCode, String nativeType, 
+                                String odaScalarType, 
+                                String[] alternativeDataTypes )
+    {
+        m_nativeTypeCode = nativeTypeCode;
+        m_nativeType = nativeType;
+        m_odaScalarType = odaScalarType;
+        m_alternativeDataTypes = alternativeDataTypes;
+    }
+	
+	private void sanityCheckOdaScalarType( String odaScalarType, boolean isForAlternatives )
+		throws OdaException
+	{
+		if( odaScalarType == null )
+			throw new OdaException( isForAlternatives ? 
+					Messages.bind( Messages.manifest_NO_ODA_SCALAR_DATA_TYPE_DEFINED_2, m_nativeType ) :
+					Messages.bind( Messages.manifest_NO_ODA_SCALAR_DATA_TYPE_DEFINED_1, m_nativeType ) );
+        
+        if( ! getOdaTypeCodes().containsKey( toOdaTypeKey( odaScalarType ) ))
+			throw new OdaException( Messages.bind( Messages.manifest_INVALID_ODA_SCALAR_DATA_TYPE_VALUE,
+													odaScalarType, m_nativeType ) );
+	}
+	
+	/**
+	 * Returns the native type name of the data type mapping.
+	 * @return	the native type name.
+	 */
+	public String getNativeType()
+	{
+		return m_nativeType;
+	}
+	
+	/**
+	 * Returns the native type code of the data type mapping. 
+	 * Its value must match one of the data type codes returned in the 
+	 * driver's ODA interface implementation.
+	 * @return	the native type code.
+	 */
+	public int getNativeTypeCode()
+	{
+		return m_nativeTypeCode;
+	}
+	
+	/**
+	 * Returns the primary ODA scalar data type that the native data type maps to
+	 * @return	the primary ODA scalar data type.
+	 */
+	public String getOdaScalarDataType()
+	{
+		return m_odaScalarType;
+	}
+
+    /**
+     * Returns the primary ODA scalar data type code
+     * that the native data type maps to.
+     * @return  the primary ODA scalar data type code.
+     */
+    public int getOdaScalarDataTypeCode()
+    {
+        return toOdaDataTypeCode( m_odaScalarType );
+    }
+    
+	/**
+	 * Returns the alternative ODA data types of the data type mapping, or 
+	 * an empty array if no alternative ODA data types exist.
+	 * @return	the alternative ODA data types, or an empty array if no alternative 
+	 * 			ODA data types exist.
+	 */
+	public String[] getAlternativeOdaDataTypes()
+	{
+		return m_alternativeDataTypes;
+	}
+    
+    /**
+     * Returns the alternative ODA data type codes of the data type mapping, or 
+     * an empty array if no alternative ODA data types exist.
+     * @return  the alternative ODA data type codes, or an empty array if no alternative 
+     *          ODA data types exist.
+     */
+    public int[] getAlternativeOdaDataTypeCodes()
+    {
+        if( m_alternativeDataTypeCodes == null )
+        {
+            int numCodes = m_alternativeDataTypes.length;
+            m_alternativeDataTypeCodes = new int[numCodes];
+            
+            for( int i = 0; i < numCodes; i++ )
+            {
+                m_alternativeDataTypeCodes[i] = 
+                    toOdaDataTypeCode( m_alternativeDataTypes[i] );
+            }
+        }
+        return m_alternativeDataTypeCodes;
+    }
+    
+    /**
+     * A convenient method to indicate whether the ODA data provider 
+     * is capable of converting this mapping's native data type 
+     * to the specified ODA data type code.
+     * @param odaDataTypeCode   an ODA data type code
+     * @return  true if the specified ODA data type can be converted from this
+     *          mapping's native data type; false otherwise.
+     */
+    public boolean canConvertToOdaType( int odaDataTypeCode )
+    {
+        // check if the specified code is the primary ODA data type 
+        // defined in this native type's mapping
+        if( odaDataTypeCode == getOdaScalarDataTypeCode() )
+            return true;
+        
+        // check if the specified code is one of the alternative ODA data types
+        // defined in this native type's mapping
+        int[] alternateOdaTypes = getAlternativeOdaDataTypeCodes();
+        for( int i = 0; i < alternateOdaTypes.length; i++ )
+        {
+            if( odaDataTypeCode == alternateOdaTypes[i] )
+                return true;
+        }
+        
+        return false;
+    }
+    
+    /**
+     * Converts an ODA data type literal value to its
+     * corresponding code value.
+     * @param odaDataTypeLiteral    a literal value of an ODA data type 
+     * @return  corresponding ODA data type code value,
+     *          or Types.NULL if specified literal value is
+     *          not recognized
+     */
+    public static int toOdaDataTypeCode( String odaDataTypeLiteral )
+    {
+        if( odaDataTypeLiteral == null ||
+            odaDataTypeLiteral.length() == 0 )
+            return Types.NULL;
+        
+        Integer typeCode = 
+            getOdaTypeCodes().get( toOdaTypeKey( odaDataTypeLiteral ) );
+        if( typeCode != null )
+            return typeCode.intValue();       
+        return Types.NULL;
+    }
+
+    /**
+     * Returns the default ODA data type code of the specified value based on its object type.
+     * @param valueObj  a value object
+     * @return  an ODA data type code; may be Types.NULL for unknown data type 
+     * @since 3.2.2 (DTP 1.7.2)
+     */
+    public static int getOdaDataTypeCodeOfObject( Object valueObj )
+    {
+        if( valueObj == null )
+            return Types.NULL;
+        
+        if( valueObj instanceof String )
+            return Types.CHAR;
+        if( valueObj instanceof Integer )
+            return Types.INTEGER;
+        if( valueObj instanceof Double )
+            return Types.DOUBLE;
+        if( valueObj instanceof BigDecimal )
+            return Types.DECIMAL;
+        if( valueObj instanceof Time )
+            return Types.TIME;
+        if( valueObj instanceof Timestamp )
+            return Types.TIMESTAMP;
+        if( valueObj instanceof java.util.Date )    // includes subclass java.sql.Date
+            return Types.DATE;
+        if( valueObj instanceof Boolean )
+            return Types.BOOLEAN;
+        
+        // the remaining possible ODA data types cannot be derived for certain
+        // Types.BLOB
+        // Types.CLOB
+        // Types.JAVA_OBJECT
+        
+        return Types.NULL;  // unknown data type
+    }
+        
+    /**
+     * Returns the cached table that maps each ODA data type name 
+     * to its corresponding data type code.
+     * The data type name serves as the key in the cached table.
+     */
+    private static Hashtable<String, Integer> getOdaTypeCodes()
+    {
+        if( sm_odaTypeCodes == null )
+        {
+            synchronized( DataTypeMapping.class )
+            {
+                if( sm_odaTypeCodes == null )
+                {
+                    sm_odaTypeCodes = new Hashtable<String,Integer>( 11 );
+            
+                    sm_odaTypeCodes.put( toOdaTypeKey( "String" ), //$NON-NLS-1$
+                                new Integer( Types.CHAR )); 
+                    sm_odaTypeCodes.put( toOdaTypeKey( "Integer" ), //$NON-NLS-1$ 
+                                new Integer( Types.INTEGER )); 
+                    sm_odaTypeCodes.put( toOdaTypeKey( "Double" ), //$NON-NLS-1$  
+                                new Integer( Types.DOUBLE )); 
+                    sm_odaTypeCodes.put( toOdaTypeKey( "Decimal" ), //$NON-NLS-1$ 
+                                new Integer( Types.DECIMAL )); 
+                    sm_odaTypeCodes.put( toOdaTypeKey( "Date" ), //$NON-NLS-1$ 
+                                new Integer( Types.DATE )); 
+                    sm_odaTypeCodes.put( toOdaTypeKey( "Time" ), //$NON-NLS-1$ 
+                                new Integer( Types.TIME )); 
+                    sm_odaTypeCodes.put( toOdaTypeKey( "Timestamp" ), //$NON-NLS-1$ 
+                                new Integer( Types.TIMESTAMP ));
+                    sm_odaTypeCodes.put( toOdaTypeKey( "Blob" ), //$NON-NLS-1$ 
+                                new Integer( Types.BLOB )); 
+                    sm_odaTypeCodes.put( toOdaTypeKey( "Clob" ), //$NON-NLS-1$ 
+                                new Integer( Types.CLOB )); 
+                    sm_odaTypeCodes.put( toOdaTypeKey( "Boolean" ), //$NON-NLS-1$ 
+                                new Integer( Types.BOOLEAN )); 
+                    sm_odaTypeCodes.put( toOdaTypeKey( "JavaObject" ), //$NON-NLS-1$ 
+                                new Integer( Types.JAVA_OBJECT )); 
+                }
+            }
+        }
+        
+        return sm_odaTypeCodes;        
+    }
+    
+    private static String toOdaTypeKey( String odaDataTypeLiteral )
+    {
+        assert odaDataTypeLiteral != null;
+        return odaDataTypeLiteral.toLowerCase( Locale.US );
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/ExtensionManifest.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/ExtensionManifest.java
new file mode 100644
index 0000000..6f7889b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/ExtensionManifest.java
@@ -0,0 +1,593 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.util.manifest;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Properties;
+import java.util.Set;
+import java.util.Vector;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+
+/**
+ * Encapsulates access to the content of an ODA data source
+ * plug-in extension manifest.
+ */
+public class ExtensionManifest
+{
+    public static final String CLASS_ATTRIBUTE_NAME = "driverClass";  //$NON-NLS-1$
+    static final String ATTR_SET_THREAD_LOADER = "setThreadContextClassLoader"; //$NON-NLS-1$
+    static final String ATTR_OVERRIDE_FILTERING = "overrideExplorerFiltering"; //$NON-NLS-1$
+
+    private String m_namespace;
+	private String m_dataSourceElementId;
+	private String m_odaVersion;
+	private String m_displayName;
+	private RuntimeInterface m_runtime;
+	private Hashtable<String, DataSetType> m_dataSetTypes;
+	private TraceLogging m_traceLogging;
+    private Property[] m_extensionDefinedProperties = null;
+	private Property[] m_properties = null;
+	private Properties m_propsVisibility;
+    private IConfigurationElement m_dataSourceElement;
+    private IExtension m_dataSourceExtn;
+    private List<Relationship> m_relationships;
+    private boolean m_overrideFiltering = false;
+
+	ExtensionManifest( IExtension dataSourceExtn ) throws OdaException
+    {
+        init( dataSourceExtn );
+    }
+    
+    protected ExtensionManifest()
+    {
+    }
+    
+    protected void init( IExtension dataSourceExtn ) throws OdaException
+	{
+        m_dataSourceElement = 
+	        ManifestExplorer.getDataSourceElement( dataSourceExtn );
+		assert( m_dataSourceElement != null );
+		m_namespace = dataSourceExtn.getContributor().getName();
+		
+		// first cache the data source element's attributes
+		m_dataSourceElementId = m_dataSourceElement.getAttribute( "id" ); //$NON-NLS-1$
+		if( m_dataSourceElementId == null || m_dataSourceElementId.length() == 0 )
+			throw new OdaException( Messages.manifest_NO_DATA_SOURCE_EXTN_ID_DEFINED );
+		
+		m_odaVersion = m_dataSourceElement.getAttribute( "odaVersion" ); //$NON-NLS-1$
+
+		m_displayName = ManifestExplorer.getElementDisplayName( m_dataSourceElement );
+
+		// runtime interface
+		String driverClass = m_dataSourceElement.getAttribute( CLASS_ATTRIBUTE_NAME );
+		if( driverClass == null )
+			throw new OdaException( Messages.bind( Messages.manifest_NO_DRIVER_CLASS_DEFINED,
+												m_dataSourceElementId ) );
+				
+		boolean needSetThreadContextClassLoader = ManifestUtil.getBooleanAttributeValue( 
+		            m_dataSourceElement, ATTR_SET_THREAD_LOADER, false );
+		m_runtime = 
+			new JavaRuntimeInterface( driverClass, needSetThreadContextClassLoader, m_namespace );
+		
+		m_overrideFiltering = ManifestUtil.getBooleanAttributeValue( 
+		            m_dataSourceElement, ATTR_OVERRIDE_FILTERING, false );
+		
+		// data set definition elements in the same extension
+		m_dataSetTypes = ManifestExplorer.getDataSetElements( dataSourceExtn, m_dataSourceElementId );
+		
+		// trace logging element
+		IConfigurationElement[] traceLogging = m_dataSourceElement.getChildren( "traceLogging" ); //$NON-NLS-1$
+		int numOfTraceLogging = traceLogging.length;
+		// if multiple trace logging configuration exist, use the last one
+		if( numOfTraceLogging > 0 )
+			m_traceLogging = new TraceLogging( traceLogging[ numOfTraceLogging - 1 ], m_dataSourceElementId );
+
+		// properties element
+		IConfigurationElement[] propertiesElements = m_dataSourceElement.getChildren( "properties" ); //$NON-NLS-1$
+		if( propertiesElements.length > 0 )
+		{
+			// if multiple properties elements exist, use the last one
+		    IConfigurationElement propertiesElement =
+	            propertiesElements[ propertiesElements.length - 1 ];
+		    
+		    ArrayList<Property> extensionProps = getPropertyDefinitions( propertiesElement );		    
+		    m_extensionDefinedProperties = (Property[]) extensionProps.toArray( new Property[ extensionProps.size() ] );      
+
+		    // appends framework-defined data source properties to extension-defined ones
+		    m_properties = addDataSourceFrameworkProperties( extensionProps );
+		    
+		    m_propsVisibility = getPropertyVisibilities( propertiesElement );
+		}
+        
+        // relationship element
+        m_relationships = Relationship.createInstances( m_dataSourceElement );
+        
+        // successfully initialized
+        m_dataSourceExtn = dataSourceExtn;
+	}
+    
+    /**
+     * Returns the data source extension element used to initialize this instance.
+     */
+    protected IExtension getDataSourceExtension()
+    {
+        return m_dataSourceExtn;
+    }
+
+    /* 
+     * Parse and return all the extension-defined property definitions, 
+     * combining both top-level and grouped properties.
+     */ 
+    static ArrayList<Property> getPropertyDefinitions( IConfigurationElement propertiesElement )
+		throws OdaException
+	{
+		IConfigurationElement[] propElements = propertiesElement.getChildren( "property" ); //$NON-NLS-1$
+		IConfigurationElement[] propGroupElements = propertiesElement.getChildren( "propertyGroup" ); //$NON-NLS-1$
+	    int numProperties = propElements.length + propGroupElements.length;
+
+	    ArrayList<Property> properties = new ArrayList<Property>();
+	    if ( numProperties <= 0 )
+	        return properties;     // returns an empty list
+ 
+        // first convert top-level property elements defined by an extension
+		for( int i = 0, size = propElements.length; i < size; i++ )
+		{
+			IConfigurationElement propElement = propElements[i];
+			properties.add( new Property( propElement ) );
+		}
+        
+        // next convert property elements in each group
+		for( int j = 0, size2 = propGroupElements.length; j < size2; j++ )
+		{
+			IConfigurationElement propGroupElement = propGroupElements[j];
+	        // no validation is done; up to the consumer to process
+			String groupName = propGroupElement.getAttribute( "name" );			     //$NON-NLS-1$
+		    String groupDisplayName = ManifestExplorer.getElementDisplayName( propGroupElement );
+
+		    IConfigurationElement[] groupedPropElements = propGroupElement.getChildren( "property" ); //$NON-NLS-1$
+			for( int i = 0, size = groupedPropElements.length; i < size; i++ )
+			{
+				IConfigurationElement groupedPropElement = groupedPropElements[i];
+				properties.add( new Property( groupedPropElement, groupName, groupDisplayName ) );
+			}
+		}
+		
+        return properties;
+	}
+
+    /**
+     * Appends framework-defined data source properties to specified collection, 
+     * if not already defined.
+	 * @since 3.1
+     */
+    private Property[] addDataSourceFrameworkProperties( ArrayList<Property> propDefinitions )
+	{
+        if( propDefinitions == null )
+            propDefinitions = new ArrayList<Property>();
+        
+        if( ! containsProperty( ConnectionProfileProperty.PROFILE_NAME_PROP_KEY, propDefinitions ) )
+        {
+            propDefinitions.add( 
+                ConnectionProfileProperty.createPropertyDefinition( 
+                        ConnectionProfileProperty.PROFILE_NAME_PROP_KEY ) );
+        }
+        
+        if( ! containsProperty( ConnectionProfileProperty.PROFILE_STORE_FILE_PATH_PROP_KEY, propDefinitions ) )
+        {
+            propDefinitions.add( 
+                ConnectionProfileProperty.createPropertyDefinition( 
+                        ConnectionProfileProperty.PROFILE_STORE_FILE_PATH_PROP_KEY ) );
+        }
+        
+        return (Property[]) propDefinitions.toArray( new Property[ propDefinitions.size() ] );	    
+	}
+
+    /**
+     * Determines whether the specified collection contains a property
+     * with the specified property name.
+     */
+    private static boolean containsProperty( String propertyName, ArrayList<Property> properties )
+    {
+        if( properties.isEmpty() )
+            return false;
+        
+        for( Property aProp : properties )
+        {
+            if( aProp != null && propertyName.equals( aProp.getName() ) )
+                return true;
+        }
+        return false;
+    }
+    
+	/*
+	 * Parse and return the property visibility definitions.
+	 */
+	static Properties getPropertyVisibilities( IConfigurationElement propertiesElement )
+		throws OdaException
+	{
+		// convert propertyVisibility elements to a collection
+		IConfigurationElement[] propVisibilityElements = 
+		    propertiesElement.getChildren( "propertyVisibility" ); //$NON-NLS-1$
+		if ( propVisibilityElements.length == 0 )
+		    return null;		// done
+		
+		Properties propsVisibility = new Properties();
+		for( int i = 0, size = propVisibilityElements.length; i < size; i++ )
+		{
+			IConfigurationElement propVisibltyElement = propVisibilityElements[i];
+			
+	        // no validation is done; up to the consumer to process
+			String propName = propVisibltyElement.getAttribute( "name" ); //$NON-NLS-1$
+			String propVisbility = propVisibltyElement.getAttribute( "visibility" ); //$NON-NLS-1$
+			propsVisibility.setProperty( propName, propVisbility );
+		}
+		return propsVisibility;
+	}
+	
+	/**
+     * Returns the namespace of the plugin that contributes this ODA runtime extension.
+	 * @return	the plugin namespace for the ODA driver, null if the driver does not have 
+	 * 			a namespace.
+	 */
+	public String getNamespace()
+	{
+		return m_namespace;
+	}
+	
+	/**
+	 * Returns the ID that uniquely identifies this 
+	 * ODA data source extension in an ODA consumer application's 
+	 * environment.  This is the extension that implements
+	 * the org.eclipse.datatools.connectivity.oda.dataSource extension point.
+	 * <br>Since each data source extension 
+	 * has one and only one data source element, the element ID
+	 * is used as the extension ID.
+	 * @return	the data source extension ID.
+	 */
+	public String getExtensionID()
+	{
+		return getDataSourceElementID();
+	}
+	
+	/**
+	 * Returns the ID that uniquely identifies the dataSource element defined
+	 * in the ODA data source extension.
+	 * @return	the data source element ID.
+	 */
+	public String getDataSourceElementID()
+	{
+		return m_dataSourceElementId;
+	}
+
+    /**
+     * Returns the configuration element of this extension's
+     * data source element.
+     * @return  a dataSource configuration element 
+     */
+    public IConfigurationElement getDataSourceElement()
+    {
+        return m_dataSourceElement;
+    }
+	
+	/**
+	 * Returns the driver installation location.
+	 * @return	the driver directory.
+	 * @throws IOException	if an IO error occurs.
+	 */
+	public URL getDriverLocation() throws IOException
+	{
+		// should be same as the runtime library location in this case
+		return m_runtime.getLibraryLocation();
+	}
+	
+	/**
+	 * Returns the version of the <i>org.eclipse.datatools.connectivity.oda</i> 
+	 * interfaces for which this driver is developed.
+	 * @return	The ODA interface version.  Its format is as defined
+	 * 			in the extension point schema.
+	 */
+	public String getOdaVersion()
+	{
+		return m_odaVersion;
+	}
+
+	/**
+	 * Returns the display name of the data source element
+	 * defined in the ODA data source extension.  
+	 * Defaults to element ID if no display name is specified.
+	 * It can be used by an ODA consumer application's designer tool 
+	 * to display a list of ODA data source extensions.
+	 * @return	The display name of the ODA data source element.
+	 */
+	public String getDataSourceDisplayName()
+	{
+	    return m_displayName;
+	}
+	
+	/**
+	 * Returns an array of DataSetType instances that
+	 * represent the dataSet elements defined in
+	 * this data source extension.
+	 * @return	an array of data set types; may return an empty array
+     *          if no dataSet elements are defined.
+	 */
+	public DataSetType[] getDataSetTypes()
+	{
+		Collection<DataSetType> dataSetTypes = m_dataSetTypes.values();
+		int size = dataSetTypes.size();
+		return (DataSetType[]) dataSetTypes.toArray( new DataSetType[size] );
+	}
+	
+	/**
+	 * Returns an array of ids of the dataSet elements 
+	 * defined in this data source extension.
+	 * @return	an array of data set type IDs; may return an empty array
+     *          if no dataSet elements are defined.
+	 */
+	public String[] getDataSetTypeIDs()
+	{
+		Set<String> dataSetTypeIDs = m_dataSetTypes.keySet();
+		int size = dataSetTypeIDs.size();
+		return (String[]) dataSetTypeIDs.toArray( new String[size] );
+	}
+	
+    /**
+     * Returns the number of data set types defined in this ODA data source extension.
+     * @return  number of data set types defined; may be zero if none is defined
+     */
+    public int getDataSetTypeCount()
+    {
+       return m_dataSetTypes.size(); 
+    }
+    
+	/**
+	 * Returns the DataSetType instance that
+	 * represents the dataSet element with the given ID
+	 * defined in this data source extension.
+	 * If the given data set element ID is null and the data source
+	 * extension supports only one data set type, that
+	 * data set element will be returned by default.
+	 * @param dataSetElementID	the id of the data set element.
+	 * @return	the data set element definition.
+	 * @throws OdaException	if there is no data set definition associated 
+	 * 									with the specified data set element ID, or 
+	 * 									if there are more than one data set elements 
+	 * 									that match the ID.
+	 */
+	public DataSetType getDataSetType( String dataSetElementID ) throws OdaException
+	{
+		if( dataSetElementID == null )
+		{
+			// find default data set element and return it if found
+			if( m_dataSetTypes.size() != 1 )
+			    throwsIllegalArgumentOdaException( dataSetElementID );
+
+			Collection<DataSetType> dataSetTypes = m_dataSetTypes.values();
+			assert( dataSetTypes.size() == 1 );
+			return (DataSetType) dataSetTypes.toArray()[0];
+		}
+		
+		DataSetType dsType = (DataSetType) m_dataSetTypes.get( dataSetElementID );
+
+		if( dsType == null )
+		    throwsIllegalArgumentOdaException( dataSetElementID );
+		
+		return dsType;
+	}
+	
+	private void throwsIllegalArgumentOdaException( String arg ) throws OdaException
+	{
+	    Exception illegalArg = new IllegalArgumentException( arg );
+	    OdaException ex = new OdaException( illegalArg.toString() );
+	    ex.initCause( illegalArg );
+	    throw ex;
+	}
+	
+	/**
+	 * Returns the optional trace logging configuration for the driver.
+	 * @return	the trace logging configuration, or null if no trace logging 
+	 * 			configuration was specified.
+	 */
+	public TraceLogging getTraceLogging()
+	{
+		return m_traceLogging;
+	}
+	
+	/**
+	 * Returns the runtime interface configuration.
+	 * @return	the runtime interface configuration.
+	 */
+	public RuntimeInterface getRuntimeInterface()
+	{
+		return m_runtime;
+	}
+	
+	/**
+     * Returns an array of Property definition instances that represent
+     * all the properties defined and inherited by this data source extension.
+     * The collection includes both top-level properties and
+     * those in a group, and could be defined as either visible or hidden.
+     * @return  an array of all property definitions; 
+     *          an empty array is returned if no properties are defined.
+	 */
+	public Property[] getProperties()
+	{
+	    return getProperties( true );
+	}
+
+	/**
+     * Returns an array of Property definition instances that represent
+     * all the properties defined by this data source extension, plus
+     * optionally include inherited ones.
+     * The collection includes both top-level properties and
+     * those in a group, and could be defined as either visible or hidden.
+	 * @param includeInheritedProps    indicates whether to include
+	 *          property definitions inherited from the ODA framework
+     * @return  an array of all property definitions; 
+     *          an empty array is returned if no properties are defined.
+	 * @since 3.1
+	 */
+	public Property[] getProperties( boolean includeInheritedProps )
+	{
+	    Property[] props = includeInheritedProps ? 
+	                        m_properties : m_extensionDefinedProperties;
+        if ( props == null )
+        {
+            // creates an empty array to return
+            props = new Property[ 0 ];
+        }
+        return props;
+	}
+
+    /**
+     * A convenience method to return an array of Property definition instances 
+     * that represent the properties defined as visible by this data source extension.
+     * The collection includes both top-level properties and those in a group.
+     * @return  an array of visible property definitions; 
+     *          an empty array is returned if no visible properties are defined.
+     */
+    public Property[] getVisibleProperties()
+    {
+        return ManifestUtil.getVisiblePropertiesDefn( getProperties(), 
+                getPropertiesVisibility());
+    }
+
+    /**
+     * A convenience method to return an array of Property definition instances 
+     * that represent the properties defined as hidden by this data source extension.
+     * The collection includes both top-level properties and those in a group.
+     * @return  an array of hidden property definitions; 
+     *          an empty array is returned if no hidden properties are defined.
+     */
+    public Property[] getHiddenProperties()
+    {
+        return ManifestUtil.getHiddenPropertiesDefn( getProperties(), 
+                getPropertiesVisibility());
+    }
+    
+    /**
+     * Returns the Property definition instance that matches the specified name
+     * in the list of properties defined by this data source extension.
+     * @param propertyName  the name of a property
+     * @return  the matching Property definition, or null if no match is found.
+     */
+    public Property getProperty( String propertyName )
+    {
+        if ( propertyName == null || propertyName.length() == 0 )
+            return null;
+        
+        Property[] props = getProperties();
+        for( int i = 0; i < props.length; i++ )
+        {
+            if ( propertyName.equals( props[ i ].getName() ))
+                return props[ i ];
+        }
+        
+        return null;    // no matching property
+    }
+
+	/**
+	 * Returns a Properties collecton of property visibilty settings.
+	 * @return	Properties with the property name as key, and
+	 * 			its visibility setting as value.
+	 * 			An empty collection if no property visibility is defined.
+	 */
+	public Properties getPropertiesVisibility()
+	{
+	    if ( m_propsVisibility == null )
+	        m_propsVisibility = new Properties();
+	    return m_propsVisibility;
+	}
+    
+    /**
+     * Indicates whether this extension is defined to be deprecated.
+     * @since 3.0.3
+     */
+    public boolean isDeprecated()
+    {
+        List<Relationship> replacedBy = getRelationships( Relationship.TYPE_REPLACED_BY_CODE );
+        return ( replacedBy != null && ! replacedBy.isEmpty() );
+    }
+
+    /**
+     * Indicates whether this extension is defined to be a wrapper.
+     * @since 3.1.2
+     */
+    public boolean isWrapper()
+    {
+        List<Relationship> wrappersOf = getRelationships( Relationship.TYPE_WRAPPER_OF_CODE );
+        return ( wrappersOf != null && ! wrappersOf.isEmpty() );
+    }
+
+    /**
+     * Returns the related oda data source element id, if specified.
+     * For backward compatibility, this returns the first related replacedBy id.
+     * @return  the related oda data source element id, or 
+     *          null if none is specified.
+     * @since 3.0.3
+     * @deprecated  As of 3.1.2, replaced by {@link #getRelationships(int)}
+     */
+    public String getRelatedDataSourceId()
+    {
+        List<Relationship> relationships = getRelationships( Relationship.TYPE_REPLACED_BY_CODE );
+        if( relationships == null )
+            return null;
+        Relationship replacedBy = (Relationship) relationships.get( 0 );
+        return ( replacedBy != null ) ? replacedBy.getRelatedId() : null;
+    }
+
+    /**
+     * Returns a list of data source relationships defined with the specified type. 
+     * @param relationshipType    constant for the type of relationship
+     * @return  a list of specified type of relationships, or
+     *          null if the specified relationshipType is not defined in this extension.
+     * @see {@link Relationship.TYPE_* constants}
+     * @since 3.1.2
+     */
+    public List<Relationship> getRelationships( int relationshipType )
+    {
+        if( m_relationships == null || m_relationships.isEmpty() )
+            return null;
+        
+        Vector<Relationship> matchingRelationships = new Vector<Relationship>( m_relationships.size() );
+        for( Relationship aRelationship : m_relationships )
+        {
+            if( aRelationship.getType() == relationshipType )
+                matchingRelationships.add( aRelationship );
+        }
+        return matchingRelationships.isEmpty() ? null : matchingRelationships;
+    }
+
+    /**
+     * Indicates whether the visibility of this extension should override that of the filtering by the
+     * ODA extension explorer.
+     * @return 
+     * @since 3.2.2 (DTP 1.7.2)
+     */
+    public boolean overrideFiltering()
+    {
+        return m_overrideFiltering;
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/JavaRuntimeInterface.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/JavaRuntimeInterface.java
new file mode 100644
index 0000000..a353216
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/JavaRuntimeInterface.java
@@ -0,0 +1,283 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2014 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.util.manifest;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URL;
+import java.security.ProtectionDomain;
+import java.util.Enumeration;
+import java.util.Map;
+import java.util.logging.Level;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+import org.eclipse.datatools.connectivity.oda.util.ResourceIdentifiers;
+import org.osgi.framework.Bundle;
+
+/**
+ * This class encapsulates the Java runtime interface specific configurations.
+ */
+public class JavaRuntimeInterface extends RuntimeInterface
+{
+	private String m_driverClass;
+	private boolean m_needSetThreadContextClassLoader;
+	private String m_namespace;
+	private IPath m_loadedBundlePath;
+	
+    private static final String sm_className = JavaRuntimeInterface.class.getName();
+    private static final String PLUGIN_ROOT_PATH = "/"; //$NON-NLS-1$
+    private static final String PLUGIN_VERSION_SEPARATOR = "_"; //$NON-NLS-1$
+    private static final String BUNDLE_MANIFEST_RELATIVE_PATH = "META-INF/MANIFEST.MF"; //$NON-NLS-1$
+    private static final String UPPER_RELATIVE_PATH = ".."; //$NON-NLS-1$
+
+	JavaRuntimeInterface( String driverClass,
+						  boolean needSetThreadContextClassLoader,
+						  String namespace )
+	{
+		m_driverClass = driverClass;
+		m_needSetThreadContextClassLoader = needSetThreadContextClassLoader;
+		m_namespace = namespace;
+	}
+	
+	public int getInterfaceType()
+	{
+		return JAVA_TYPE;
+	}
+	
+	/**
+	 * Returns the fully qualified concrete class that implements the 
+	 * <i>org.eclipse.datatools.connectivity.oda.IDriver</i> interface. 
+	 * This is the entry point of the ODA runtime extension.
+	 * @return	the fully qualified connection factory class name.
+	 */
+	public String getDriverClass()
+	{
+		return m_driverClass;
+	}
+	
+	/**
+	 * If true, the consumer of the ODA runtime extension plugin should set the 
+	 * thread context class loader to the class loader used to load this driver 
+	 * before calling any ODA interface method.  The default is false.
+	 * @return	true if the thread context classloader is to be set for the 
+	 * 			ODA runtime extension plugin.
+	 */
+	public boolean needSetThreadContextClassLoader()
+	{
+		return m_needSetThreadContextClassLoader;
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.util.manifest.RuntimeInterface#getLibraryLocation()
+	 */
+	public URL getLibraryLocation() throws IOException
+	{
+		return getLocation( PLUGIN_ROOT_PATH );
+	}
+	
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.util.manifest.RuntimeInterface#getDriverFileLocation(java.lang.String)
+	 */
+	public URL getDriverFileLocation( String filename ) throws IOException
+	{
+		return getLocation( filename );
+	}
+	
+	private URL getLocation( String entry ) throws IOException
+	{
+		Bundle bundle = Platform.getBundle( m_namespace );
+		if( bundle != null ) 
+		{
+			URL url = bundle.getEntry( entry );
+			return FileLocator.toFileURL( url );
+		}
+		
+		// no bundle handle; probably on non-OSGi platform
+		
+		if( m_loadedBundlePath == null )  // unknown bundle path
+		    throw new IOException( Messages.bind( Messages.manifest_UNKNOWN_BUNDLE_LOCATION,
+		            m_namespace ) );
+
+	    IPath entryPath = entry.equals( PLUGIN_ROOT_PATH ) ?
+	                        m_loadedBundlePath :
+	                        m_loadedBundlePath.append( entry );
+	    return entryPath.toFile().toURI().toURL();
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.util.manifest.RuntimeInterface#getLibraries()
+	 */
+	public String[] getLibraries()
+	{
+		// Eclipse core classes doesn't expose this information
+		throw new UnsupportedOperationException();
+	}
+	
+	/**
+	 * Set the location of the ODA runtime extension bundle that contains the specified driver class.
+	 * @param driverClass  the class of an ODA extension that implements the 
+	 *             {@link org.eclipse.datatools.connectivity.oda.IDriver} interface
+	 * @param appContext   an application context Map that might contain a {@link ResourceIdentifiers},
+	 *             set by an ODA consumer application, to resolve the bundle location; 
+	 *             optional, may be null
+	 * @since 3.3.2 (DTP 1.9)
+	 */
+	public void setLoadedClassLocation( Class<?> driverClass, Object appContext )
+	{
+	    m_loadedBundlePath = null;     // reset any existing value
+	    
+	    // first try to resolve the bundle location based on appContext, if exists
+	    if( appContext instanceof Map )
+	    {
+	        ResourceIdentifiers resourceIdentifiers = ResourceIdentifiers.get( appContext );
+	        if( resourceIdentifiers != null )
+	        {
+	            URI driverPathUri = resourceIdentifiers.resolveResourceLocation( m_namespace );
+	            m_loadedBundlePath = convertToExistingFilePath( driverPathUri );
+	        }
+	    }
+	    
+	    // not able to get from appContext, try to get from the driver class loader
+	    if( m_loadedBundlePath == null )
+	        m_loadedBundlePath = getLoadedBundlePath( m_namespace, driverClass.getClassLoader() );
+	    
+	    // next try to get from the loaded class domain
+	    if( m_loadedBundlePath == null )
+            m_loadedBundlePath = getDomainBundlePath( m_namespace, driverClass );
+	}
+	
+	private static IPath convertToExistingFilePath( URI pathUri )
+	{
+        final String methodName = "convertToExistingFilePath(URI)"; //$NON-NLS-1$
+
+	    if( pathUri == null )
+	        return null;
+	    
+        try
+        {
+            URL pathURL = pathUri.toURL();
+            IPath filePath = new Path( pathURL.getPath() );
+            if( filePath.toFile().exists() )    // the file path exists
+                return filePath;
+        }
+        catch( Exception ex )
+        {
+            // log and ignore
+            ManifestExplorer.getLogger().logp( Level.FINE, sm_className, methodName, 
+                    Messages.bind( "The specified URI ({0}) is not a valid file path.", pathUri), ex ); //$NON-NLS-1$
+        }
+        return null;
+	}
+	
+	private static IPath getLoadedBundlePath( String bundleName, ClassLoader cl )
+	{
+        final String methodName = "getLoadedBundlePath(String,ClassLoader)"; //$NON-NLS-1$
+        
+        Enumeration<URL> foundURLs;
+        try
+        {
+            // search for the plugin manifest file, which should always exist 
+            // at one level below the plugin path
+            foundURLs = cl.getResources( BUNDLE_MANIFEST_RELATIVE_PATH );
+        }
+        catch( IOException ex )
+        {
+            // log and ignore
+            ManifestExplorer.getLogger().logp( Level.FINE, sm_className, methodName, 
+                    Messages.bind( "Unable to locate the installation path of the specified bundle ({0}).", bundleName ),  //$NON-NLS-1$
+                    ex );
+            return null;
+        }
+        
+        String pluginNameFragment = bundleName + PLUGIN_VERSION_SEPARATOR;
+        while( foundURLs.hasMoreElements() )
+        {
+            URL manifestURL = foundURLs.nextElement();
+            if( ! manifestURL.getPath().contains( pluginNameFragment ) )
+                continue;
+
+            // found the first plugin in classpath that has matching bundleName 
+            // TODO - handle multiple matching entries
+            try
+            {
+                URL pluginLocURL = new URL( manifestURL, UPPER_RELATIVE_PATH );
+                return new Path( pluginLocURL.getPath() );
+            }
+            catch( MalformedURLException ex )
+            {
+                // log and ignore
+                ManifestExplorer.getLogger().logp( Level.FINE, sm_className, methodName, 
+                        Messages.bind( "Unable to resolve the installation path ({0}/{1}) of the specified bundle ({2}).",  //$NON-NLS-1$
+                                new Object[]{manifestURL, UPPER_RELATIVE_PATH, bundleName} ), 
+                        ex );
+                return null;
+            }
+        }
+
+        return null;       
+	}
+	
+	private static IPath getDomainBundlePath( String bundleName, Class<?> clazz )
+	{
+	    final String methodName = "getDomainBundlePath(Class,String)"; //$NON-NLS-1$
+	    
+        if( clazz == null )
+            return null;
+
+        try
+        {
+            ProtectionDomain protectionDomain = clazz.getProtectionDomain();
+            URL classFileLocation = protectionDomain.getCodeSource().getLocation();
+            if( classFileLocation == null ) 
+                return null;
+            
+            // strip path up to plugin parent folder, i.e. matching the bundle name
+            IPath classPath = new Path( classFileLocation.getPath() );
+            int bundleSegmentIndex = -1;
+            String[] classPathSegments = classPath.segments();
+            for( int i=0; i < classPathSegments.length; i++ )
+            {
+                if( bundleName.equals( classPathSegments[i] ) )
+                {
+                    bundleSegmentIndex = i;
+                    break;
+                }
+            }
+            if( bundleSegmentIndex >= 0 )
+            {
+                IPath bundleRoot = classPath.uptoSegment( bundleSegmentIndex+1 );
+                if( bundleRoot.toFile().exists() )
+                {
+                    return bundleRoot;
+                }
+            }
+        }
+        catch( Throwable ex )
+        {
+            // log and ignore
+            ManifestExplorer.getLogger().logp( Level.FINE, sm_className, methodName, 
+                    "Unable to obtain bundle installation path from ProtectionDomain.", ex ); //$NON-NLS-1$
+        }
+        
+        // unable to obtain the bundle installation path from the clazz
+        return null;
+    }
+	
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/ManifestExplorer.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/ManifestExplorer.java
new file mode 100644
index 0000000..4c7963d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/ManifestExplorer.java
@@ -0,0 +1,710 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.util.manifest;
+
+import java.sql.Types;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Map;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+
+/**
+ * The Manifest Explorer is the entry point to explore and access
+ * the manifest of all the ODA plug-ins extensions that implement the 
+ * <code>org.eclipse.datatools.connectivity.oda.dataSource</code> extension point.
+ * The <code>ManifestExplorer</code> singleton instance is retrieved 
+ * using the <code>getInstance()</code> method.
+ */
+public class ManifestExplorer
+{
+	private static ManifestExplorer sm_instance = null;
+	
+    // trace logging variables
+	private static Logger sm_logger = null;
+
+	private Map<String, ExtensionManifest> m_manifestsById;  // cached copy of manifests by odaDataSourceId
+
+	private static final String DTP_ODA_EXT_POINT = 
+	    	"org.eclipse.datatools.connectivity.oda.dataSource";  //$NON-NLS-1$
+
+    // works around bug in some J2EE servers - Bugzilla #126073
+    private static final String PACKAGE_NAME  = 
+            "org.eclipse.datatools.connectivity.oda.util.manifest";  //$NON-NLS-1$
+	
+	/**
+	 * Gets the <code>ManifestExplorer</code> instance to  
+	 * explore the manifest of the data source extensions.
+	 * @return	the <code>ManifestExplorer</code> instance.
+	 */
+	public static ManifestExplorer getInstance()
+	{
+	    if( sm_instance == null )
+	    {
+            synchronized( ManifestExplorer.class )
+            {
+                if( sm_instance == null )
+                {
+                    sm_instance = new ManifestExplorer();
+                }
+            }
+	    }
+	    
+        return sm_instance;
+	}
+    
+    /**
+     * Singleton instance release method.
+     */
+    public static void releaseInstance()
+    {
+        synchronized( ManifestExplorer.class )
+        {
+            sm_instance = null;
+            sm_logger = null;
+        }
+    }
+    
+    static Logger getLogger()
+    {
+        if( sm_logger == null )
+        {
+            synchronized( ManifestExplorer.class )
+            {
+                if( sm_logger == null )
+                    sm_logger = Logger.getLogger( PACKAGE_NAME );
+            }
+        }
+        return sm_logger;
+    }
+	
+	private ManifestExplorer()
+	{
+	}
+    
+    /**
+     * Refresh the manifest explorer, and allows it to get
+     * the latest ODA extension manifests.
+     */
+    public void refresh()
+    {
+        if( m_manifestsById == null || m_manifestsById.isEmpty() )
+            return;     // done; nothing to reset
+
+        // reset the cached collection of ODA extension manifest instances
+        m_manifestsById.clear();
+    }
+
+    private Map<String, ExtensionManifest> getCachedManifests()
+    {
+    	if( m_manifestsById == null )
+    	{
+            synchronized( this )
+            {
+                if( m_manifestsById == null )
+                    m_manifestsById = Collections.synchronizedMap( new HashMap<String, ExtensionManifest>() );
+            }
+    	}
+    	return m_manifestsById;
+    }
+	
+	/**
+	 * Returns a collection of identifiers of all ODA data source extensions.
+	 * The extension's data source element ID and display name
+	 * are stored as the key and value in the returned Properties instance.
+     * The returned collection includes all matching extensions, including those
+     * with no dataSet elements defined.
+     * @return  a <code>Properties</code> containing the id and display name 
+     *          of all ODA data source extensions.  
+     *          May be an empty collection if no data source extensions are found.
+	 */
+	public Properties getDataSourceIdentifiers()
+	{
+        // does not hide any ODA extensions 
+        return getDataSourceIdentifiers( null );
+	}
+	
+	/**
+     * Returns a collection of identifiers of all ODA data source extensions that meet
+     * the specified filter criteria.
+     * The extension's data source element ID and display name
+     * are stored as the key and value in the returned Properties instance.
+     * @param collectionFilter  specifies the types of extension to exclude in
+     *                          the returned collection; 
+     *                          may be null if no filtering is needed
+     * @return  a <code>Properties</code> containing the id and display name 
+     *          of all ODA data source extensions that meet the specified filter criteria.  
+     *          May be an empty collection if no data source extensions are found.
+     * @since 3.1.2 (DTP 1.6)
+	 */
+    public Properties getDataSourceIdentifiers( Filter dataSourceFilter )
+    {
+        ExtensionManifest[] odaManifests = getExtensionManifests( dataSourceFilter );
+        Properties extensionIds = new Properties();
+        for( int i = 0; i < odaManifests.length; i++ )
+        {
+            ExtensionManifest odaManifest = odaManifests[i];
+            
+            String dataSourceId = odaManifest.getDataSourceElementID();
+            String dataSourceDisplayName = odaManifest.getDataSourceDisplayName();
+            extensionIds.setProperty( dataSourceId, dataSourceDisplayName );
+        }
+        
+        return extensionIds;
+    }
+
+	/**
+	 * Returns the extension configuration information found 
+	 * in the plugin manifest file of the data source extension
+	 * that contains the specified data source element and 
+	 * implements the DTP ODA run-time extension point -
+	 * org.eclipse.datatools.connectivity.oda.dataSource.
+	 * @param dataSourceId	the unique id of the data source element
+	 * 						in a data source extension.
+	 * @return				the extension manifest information
+	 * @throws OdaException	if the extension manifest is invalid.
+	 * @throws IllegalArgumentException if no extension is found.
+	 */
+	public ExtensionManifest getExtensionManifest( String dataSourceId ) 
+		throws OdaException
+	{
+	    ExtensionManifest manifest = 
+	        getExtensionManifest( dataSourceId, DTP_ODA_EXT_POINT );
+	    
+	    if( manifest != null )
+	        return manifest;
+
+	    throw new IllegalArgumentException( 
+	            Messages.bind( Messages.manifest_CANNOT_FIND_EXTENSION, dataSourceId ));
+	}
+	
+	/**
+	 * Returns the extension configuration information found 
+	 * in the plugin manifest file of the data source extension
+	 * that contains the specified data source element and 
+	 * implements the specified ODA extension point.
+	 * @param dataSourceId		the unique id of the data source element
+	 * 							in a data source extension.
+	 * @param extensionPoint	the id of the extension point to search
+	 * @return					the extension manifest information,
+	 * 							or null if no extension configuration is found.
+	 * @throws OdaException		if the extension manifest is invalid.
+     * @throws IllegalArgumentException if no argument(s) are specified
+	 */
+	public ExtensionManifest getExtensionManifest( String dataSourceId, 
+	        									   String extensionPoint ) 
+		throws OdaException
+	{
+	    if ( dataSourceId == null || dataSourceId.length() == 0 )
+			throw new IllegalArgumentException( dataSourceId );
+	    
+	    if ( extensionPoint == null || extensionPoint.length() == 0 )
+			throw new IllegalArgumentException( extensionPoint );
+	    
+        // first check if specified dataSourceId's manifest
+        // is already in cache, and use it
+        ExtensionManifest aManifest =
+            (ExtensionManifest) getCachedManifests().get( dataSourceId );
+        if( aManifest != null )
+            return aManifest;
+	
+	    IExtension[] extensions = getExtensions( extensionPoint );
+	    
+	    IExtension dataSourceExtn = findExtension( dataSourceId, extensions );
+	
+        if ( dataSourceExtn == null )    // not found
+            return null;
+        
+        // found extension 
+        
+        return getExtensionManifest( dataSourceExtn );
+	}
+    
+    /**
+     * Returns the extension configuration information found
+     * in the plugin manifest file for the specified data source
+     * extension. 
+     * Applies the matching manifest from the cached collection, 
+     * if exists.  Otherwise, instantiates a new manifest, and saves in cache.
+     * @param dataSourceExtn    data source extension object
+     * @return                  the extension manifest information
+     * @throws OdaException     if the extension manifest is invalid
+     */
+    private ExtensionManifest getExtensionManifest( IExtension dataSourceExtn )
+        throws OdaException
+    {
+        if( dataSourceExtn == null )
+            throw new OdaException( 
+                    new IllegalArgumentException( Messages.manifest_nullArgument ));
+
+        IConfigurationElement dataSourceElement = 
+            getDataSourceElement( dataSourceExtn );
+        assert( dataSourceElement != null );
+        
+        String dataSourceId = dataSourceElement.getAttribute( "id" ); //$NON-NLS-1$
+
+        // first check if specified extension's dataSourceId manifest
+        // is already in cache, and use it
+        ExtensionManifest aManifest = 
+            (ExtensionManifest) getCachedManifests().get( dataSourceId );
+        if( aManifest == null )
+        {                   
+            // validate and create its extension manifest first before locking the cached collection
+            ExtensionManifest newManifest = new ExtensionManifest( dataSourceExtn );
+            
+            // save it in the cached collection in a synchronized manner
+            aManifest = addToCachedManifests( dataSourceId, newManifest );
+        }
+        
+        return aManifest;
+    }
+
+    /**
+     * Adds specified extension manifest to the synchronized collection in cache.
+     * This method expects a new manifest is first created, to minimize the locking on 
+     * the cached collection.
+     * @param dataSourceId  the oda data source id that serves as the mapping key
+     * @param manifest		new manifest to add to collection iff data source id mapping does not exist yet
+     * @return  the cached extension manifest kept in the cached collection
+     */
+    private ExtensionManifest addToCachedManifests( String dataSourceId, ExtensionManifest manifest )
+    {
+        Map<String, ExtensionManifest> manifestMap = getCachedManifests();
+        ExtensionManifest cachedManifest;
+        synchronized( manifestMap )
+        {
+            // in case another thread has added to the same key in between this checking, use
+            // the currently cached value
+            cachedManifest = (ExtensionManifest) manifestMap.get( dataSourceId );
+            if( cachedManifest == null )
+            {                                   
+                // save the specified default manifest in cached collection
+                cachedManifest = manifest;
+                manifestMap.put( dataSourceId, cachedManifest );
+            }
+        }
+        return cachedManifest;
+    }
+    
+	/**
+	 * Returns an array of DTP ODA dataSource extension configuration information  
+	 * found in corresponding plugin manifest file.
+     * Returns an empty array if there are no data source extensions found.
+	 * Invalid data source extension definitions are ignored.
+	 * @return	an <code>ExtensionManifest</code> array containing 
+	 * 			the definition of all matching ODA data source extensions.
+	 */
+	public ExtensionManifest[] getExtensionManifests()
+	{
+        return getExtensionManifests( DTP_ODA_EXT_POINT );
+    }
+    
+    /**
+     * Returns an array of DTP ODA dataSource extension configuration information
+     * of those extensions that implement the DTP ODA extension point and
+     * meet the filter criteria.  
+     * @param collectionFilter  specifies the types of extensions to exclude in
+     *                          the returned collection; 
+     *                          may be null if no filtering is needed
+     * @return  an <code>ExtensionManifest</code> array containing 
+     *          the definition of all matching ODA data source extensions.
+     * @since 3.1.2 (DTP 1.6)
+     */
+    public ExtensionManifest[] getExtensionManifests( Filter collectionFilter )
+    {
+        return getExtensionManifests( DTP_ODA_EXT_POINT, collectionFilter );
+    }
+
+    /**
+     * Returns an array of ODA dataSource extension configuration information
+     * of those extensions that implement the specified extension point.  
+     * Returns an empty array if there are no data source extensions found.
+     * Invalid data source extension definitions are ignored.
+     * @param extensionPoint    name of an ODA data source extension point  
+     * @return  an <code>ExtensionManifest</code> array containing 
+     *          the definition of all matching ODA data source extensions.
+     */
+    public ExtensionManifest[] getExtensionManifests( String extensionPoint )
+    {
+        // for backward compatibility, hide those extensions 
+        // that have no data set elements defined, but
+        // include deprecated and wrapper extensions
+        Filter aFilter = createFilter();
+        aFilter.setMissingDataSetTypesFilter( true );
+        aFilter.setDeprecatedFilter( false );
+        aFilter.setHideWrapper( false );
+        return getExtensionManifests( extensionPoint, aFilter );
+    }
+    
+    /**
+     * Returns an array of DTP ODA dataSource extension configuration information  
+     * found in corresponding plugin manifest file.
+     * The argument specifies whether to include all matching extensions, regardless of
+     * whether it has defined no dataSet element, such as a driver adapter plugin.
+     * @param includesAllExtensions     true to return all matching extensions,
+     *              including those with no valid dataSet element defined;
+     *              false to include only those matching extensions
+     *              with at least one valid dataSet element defined 
+     * @return an <code>ExtensionManifest</code> array containing 
+     *          the definition of all matching ODA data source extensions.
+     * @deprecated  As of DTP 1.0, replaced by 
+     *      {@link #getExtensionManifests(String, org.eclipse.datatools.connectivity.oda.util.manifest.ManifestExplorer.Filter)}
+     */
+    public ExtensionManifest[] getExtensionManifests( boolean includesAllExtensions )
+    {
+        return getExtensionManifests( DTP_ODA_EXT_POINT, includesAllExtensions );
+	}
+    
+    /**
+     * Returns an array of ODA dataSource extension configuration information
+     * of those extensions that implement the specified extension point.  
+     * The argument specifies whether to include all matching extensions, regardless of
+     * whether it has defined no dataSet element, such as a driver adapter plugin.
+     * @param extensionPoint    name of an ODA data source extension point  
+     * @param includesAllExtensions     true to return all matching extensions,
+     *              including those with no valid dataSet element defined;
+     *              false to include only those matching extensions
+     *              with at least one valid dataSet element defined 
+     * @return  an <code>ExtensionManifest</code> array containing 
+     *          the definition of all matching ODA data source extensions.
+     * @deprecated  As of DTP 1.0, replaced by 
+     *      {@link #getExtensionManifests(String, org.eclipse.datatools.connectivity.oda.util.manifest.ManifestExplorer.Filter)}
+     */
+    public ExtensionManifest[] getExtensionManifests( String extensionPoint, 
+                                                boolean includesAllExtensions )
+    {
+        Filter aFilter = createFilter();
+        aFilter.setMissingDataSetTypesFilter( includesAllExtensions == false );
+        aFilter.setDeprecatedFilter( false );
+        return getExtensionManifests( extensionPoint, aFilter );
+    }
+    
+    /**
+     * Returns an array of ODA dataSource extension configuration information
+     * of those extensions that implement the specified extension point and
+     * meet the filter criteria.  
+     * @param extensionPoint    name of an ODA data source extension point  
+     * @param collectionFilter  specifies the types of extensions to exclude in
+     *                          the returned collection; 
+     *                          may be null if no filtering is needed
+     * @return  an <code>ExtensionManifest</code> array containing 
+     *          the definition of all matching ODA data source extensions.
+     * @since 3.0.3
+     */
+    public ExtensionManifest[] getExtensionManifests( String extensionPoint, 
+                                                        Filter collectionFilter )
+    {
+		IExtension[] extensions = getExtensions( extensionPoint );
+		int length = ( extensions == null ) ? 
+						0 : extensions.length;
+		ArrayList<ExtensionManifest> manifestList = new ArrayList<ExtensionManifest>( length );
+		for( int i = 0; i < length; i++ )
+		{
+			IExtension dataSourceExtn = extensions[i];	
+			try
+			{
+                ExtensionManifest manifest = getExtensionManifest( dataSourceExtn );
+                
+                boolean includeExtension = true;
+                
+                // applies filter options, if specified and not overriden by extension
+                if( collectionFilter != null && ! manifest.overrideFiltering() )
+                {
+                    /* excludes this extension manifest if the specified filter argument  
+                     * indicates to filter out those without a data set element
+                     */
+                    if( collectionFilter.isMissingDataSetTypesFilterOn() && 
+                        manifest.getDataSetTypeCount() <= 0 )
+                        includeExtension = false;
+                    
+                    /* excludes this extension manifest if the filter argument
+                     * indicates to filter out deprecated extensions
+                     */
+                    else if( collectionFilter.isDeprecatedFilterOn() &&
+                        manifest.isDeprecated() )
+                        includeExtension = false;
+                    
+                    /* excludes this extension manifest if the filter argument
+                     * indicates to hide wrapper extensions
+                     */
+                    else if( collectionFilter.isHideWrapperFilterOn() &&
+                        manifest.isWrapper() )
+                        includeExtension = false;
+               }
+                
+                if( includeExtension )
+                    manifestList.add( manifest );
+			}
+			catch( OdaException ex )
+			{
+                getLogger().log( Level.WARNING, "Ignoring invalid extension.", ex );  //$NON-NLS-1$
+			}
+		}
+		
+		int numOfValidExtensions = manifestList.size();
+		return (ExtensionManifest[]) 
+			manifestList.toArray( new ExtensionManifest[ numOfValidExtensions ] );
+	}
+
+	private IExtension findExtension( String dataSourceId, IExtension[] extensions )
+		throws OdaException
+	{
+	    int length = ( extensions == null ) ? 
+				0 : extensions.length;
+
+		for( int i = 0; i < length; i++ )
+		{
+			IExtension extension = extensions[i];
+			
+			String extnDataSourceId = null;
+			try
+			{
+				/* Each odaDataSource extension should have only 
+				 * one dataSource element.
+				 */
+				IConfigurationElement dataSourceElement = 
+				    		getDataSourceElement( extension );
+				extnDataSourceId = dataSourceElement.getAttribute( "id" );  //$NON-NLS-1$
+			}
+			catch( OdaException ex )
+			{
+                getLogger().log( Level.WARNING, "Ignoring invalid extension.", ex );  //$NON-NLS-1$
+				continue;
+			}
+			
+			/* The first extension found with matching dataSourceId 
+			 * in its dataSource element is considered a match.
+			 */
+			if( extnDataSourceId != null &&
+			    extnDataSourceId.equalsIgnoreCase( dataSourceId ) )
+				return extension;
+		}
+		
+		return null;
+	}
+
+    // Package static helper methods
+    
+    /*
+     * Returns all the plugin extensions that implements the given
+     * extension point.
+     */
+    public static IExtension[] getExtensions( String extPoint )
+    {
+        IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+        if( pluginRegistry == null )    // possible in web deployment
+            return null;
+        IExtensionPoint extensionPoint = 
+            pluginRegistry.getExtensionPoint( extPoint );
+        if ( extensionPoint == null )
+            return null;
+        return extensionPoint.getExtensions();
+    }
+	
+	/*
+	 * Returns the dataSource element of the given data source extension.
+	 */
+	static IConfigurationElement getDataSourceElement( IExtension extension ) 
+		throws OdaException
+    {
+        return ManifestUtil.getNamedElement( extension, "dataSource", "id" );  //$NON-NLS-1$ //$NON-NLS-2$
+    }
+	
+	/*
+	 * Returns a collection of dataSet elements of the given data source extension.
+     * May return an empty collection if no dataSet elements are defined.
+	 */
+	static Hashtable<String, DataSetType> getDataSetElements( IExtension extension, 
+            String dataSourceElementId )
+		throws OdaException
+	{
+        IConfigurationElement[] configElements =
+            ManifestUtil.getNamedElements( extension, "dataSet", "id" ); //$NON-NLS-1$ //$NON-NLS-2$
+		Hashtable<String, DataSetType> dataSetElements = new Hashtable<String, DataSetType>();
+        
+        int numConfigElements = configElements.length;
+		for( int i = 0; i < numConfigElements; i++ )
+		{
+			IConfigurationElement configElement = configElements[i];
+
+			String dataSetTypeId = configElement.getAttribute( "id" );  //$NON-NLS-1$
+
+			// if duplicated data set type ids exist in the extension,  
+			// only the last one applies
+			dataSetElements.put( dataSetTypeId, new DataSetType( configElement ) );
+		}
+
+		if( dataSetElements.size() < 1 )
+        {
+			String msg = Messages.bind( Messages.manifest_NO_DATA_SET_TYPES_DEFINED,
+										dataSourceElementId );
+            if( numConfigElements >= 1 )    // defined elements are all invalid
+                throw new OdaException( msg );
+            
+            // no dataSet elements are defined; ok to proceed
+            getLogger().log( Level.CONFIG, msg );
+        }
+        
+		return dataSetElements;
+	}
+
+	/*
+	 * Encapsulates the logic of finding the most appropriate
+	 * display name to use for the given element.
+	 */ 
+	static String getElementDisplayName( IConfigurationElement dsElement )
+	{
+	    String displayName = dsElement.getAttribute( "defaultDisplayName" );  //$NON-NLS-1$
+
+	    // Default to its id or name, if no display name is specified
+		if ( displayName == null || displayName.length() == 0 )
+		{
+		    displayName = dsElement.getAttribute( "name" );  //$NON-NLS-1$
+		    if ( displayName == null )  // no such attribute
+			    displayName = dsElement.getAttribute( "id" );  //$NON-NLS-1$
+		}
+		
+		return displayName;
+	}
+
+    /**
+     * Converts the specified native data type code to 
+     * its default ODA data type code,
+     * based on the data type mapping defined
+     * by the specified ODA data source and data set types.
+     * @param nativeTypeCode    native type code specific to the ODA data source
+     * @param odaDataSourceId   the ODA data source element id
+     * @param dataSetType       the type of data set
+     * @return  the converted ODA data type code, 
+     *          or java.sql.Types.NULL if no valid mapping is found
+     */
+    public int getDefaultOdaDataTypeCode( int nativeTypeCode, 
+                                String odaDataSourceId, String dataSetType )
+    {
+        DataSetType setType = null;
+        try
+        {
+            ExtensionManifest manifest = getExtensionManifest( odaDataSourceId );
+            if( manifest == null )
+                return Types.NULL;
+            
+            setType = manifest.getDataSetType( dataSetType );
+        }
+        catch( OdaException e )
+        {
+            // ignore
+        }
+        
+        if( setType == null )
+            return Types.NULL;
+        
+        return setType.getDefaultOdaDataTypeCode( nativeTypeCode );        
+    }
+
+    /**
+     * Instantiates a new Filter object for the manifest explorer to apply when
+     * retrieving a collection of ODA data source extension manifests.
+     * @return  a new Filter object
+     * @since 3.0.3
+     */
+    public static Filter createFilter()
+    {
+        return getInstance().new Filter();
+    }
+    
+    /**
+     * Filtering options for the manifest explorer to apply when
+     * retrieving a collection of ODA data source extension manifests.
+     * @since 3.0.3
+     */
+    public class Filter
+    {
+        private boolean m_noDataSetTypes;   // extensions with no data set types defined
+        private boolean m_hideDeprecated;       // deprecated extensions
+        private boolean m_hideWrapper;          // wrapper extensions
+        
+        Filter()
+        {
+            m_noDataSetTypes = false;
+            m_hideDeprecated = true;
+            m_hideWrapper = true;
+        }
+        
+        /**
+         * Specifies whether to hide extensions with no data set types defined.
+         * @param hide   true to hide, false otherwise.
+         */
+        public void setMissingDataSetTypesFilter( boolean hide )
+        {
+            m_noDataSetTypes = hide;
+        }
+        
+        /**
+         * Specifies whether to hide deprecated extensions.
+         * @param hide   true to hide, false otherwise.
+         */
+        public void setDeprecatedFilter( boolean hide )
+        {
+            m_hideDeprecated = hide;
+        }
+
+        /**
+         * Specifies whether to hide wrapper extensions.
+         * @param hide   true to hide, false otherwise.
+         * @since 3.1.2 (DTP 1.6)
+         */
+        public void setHideWrapper( boolean hide )
+        {
+            m_hideWrapper = hide;
+        }
+
+        /**
+         * Indicates whether to hide extensions with no data set types defined.
+         */
+        public boolean isMissingDataSetTypesFilterOn()
+        {
+            return m_noDataSetTypes;
+        }
+
+        /**
+         * Indicates whether to hide deprecated extensions.
+         */
+        public boolean isDeprecatedFilterOn()
+        {
+            return m_hideDeprecated;
+        }        
+
+        /**
+         * Indicates whether to hide wrapper extensions.
+         * @since 3.1.2 (DTP 1.6)
+         */
+        public boolean isHideWrapperFilterOn()
+        {
+            return m_hideWrapper;
+        }
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/ManifestUtil.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/ManifestUtil.java
new file mode 100644
index 0000000..3cde78f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/ManifestUtil.java
@@ -0,0 +1,177 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.util.manifest;
+
+import java.util.ArrayList;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+
+/**
+ * Utility class for the ODA extension manifest.
+ */
+public class ManifestUtil
+{
+    
+    /**
+     * Returns the configuration element of the given extension
+     * and element name.
+     * <br>For internal use only.
+     */
+    public static IConfigurationElement getNamedElement( IExtension extension,
+            String elementName ) 
+        throws OdaException
+    {
+            return getNamedElement( extension, elementName, null );
+    }
+    
+    /**
+     * Returns the configuration element with the given name
+     * in the given extension.  
+     * Validates that the element has the named attribute with a non-empty value.
+     * @return the first matching configuration element
+     * <br>For internal use only.
+     */
+    public static IConfigurationElement getNamedElement( IExtension extension,
+            String elementName, String requiredAttributeName ) 
+        throws OdaException
+    {
+        IConfigurationElement[] configElements =
+                        getNamedElements( extension, elementName, requiredAttributeName );
+        if( configElements.length == 0 )
+            throw new OdaException( Messages.bind( Messages.manifest_MISSING_ELEMENT_IN_EXTENSION_MANIFEST, 
+                    extension.getUniqueIdentifier(), elementName ));
+
+        return configElements[0];   // returns the first matching element
+    }
+    
+    /**
+     * Returns a collection of configuration elements with the given name
+     * in the given extension.  
+     * @return a collection of matching configuration elements
+     * <br>For internal use only.
+     */
+    public static IConfigurationElement[] getNamedElements( 
+                                            IExtension extension,
+                                            String elementName ) 
+        throws OdaException
+    {
+        return getNamedElements( extension, elementName, null );
+    }
+    
+    /**
+     * Returns a collection of configuration elements with the given name
+     * in the given extension.  
+     * Validates that each element has the specified attribute defined.
+     * @return a collection of matching configuration elements
+     * <br>For internal use only.
+     */
+    public static IConfigurationElement[] getNamedElements( 
+                                            IExtension extension,
+                                            String elementName, 
+                                            String requiredAttributeName ) 
+        throws OdaException
+    {
+        IConfigurationElement[] configElements = extension.getConfigurationElements();
+        ArrayList<IConfigurationElement> matchedElements = new ArrayList<IConfigurationElement>();
+        for( int i = 0, n = configElements.length; i < n; i++ )
+        {
+            IConfigurationElement configElement = configElements[i];
+            if( ! configElement.getName().equalsIgnoreCase( elementName ) )
+                continue;
+
+            // validate that the element has the required attribute with non-empty value
+            if( requiredAttributeName != null )
+            {
+                String attrValue = configElement.getAttribute( requiredAttributeName );
+                if( attrValue == null || attrValue.length() == 0 )
+                    throw new OdaException( 
+                            Messages.bind( Messages.manifest_NO_ATTRIBUTE_ID_DEFINED, 
+                                            requiredAttributeName, elementName ));
+            }
+            
+            matchedElements.add( configElement );
+        }
+        
+        return (IConfigurationElement[]) matchedElements.toArray( 
+                    new IConfigurationElement[ matchedElements.size() ] );
+    }
+
+    /**
+     * Returns a collection of property definition from the 
+     * specified driverDefinedProps that are defined to be visible.
+     * <br>For internal use only.
+     */
+    public static Property[] getVisiblePropertiesDefn( 
+            Property[] driverDefinedProps, Properties propertiesVisibility )
+    {
+        if( driverDefinedProps.length == 0 )
+            return driverDefinedProps;
+        
+        ArrayList<Property> visibleProps = new ArrayList<Property>();
+        for( int i = 0, size = driverDefinedProps.length; i < size; i++ )
+        {
+            Property aProp = driverDefinedProps[i];
+            if( aProp.isVisible( propertiesVisibility ) )
+                visibleProps.add( aProp );
+        }
+        
+        return (Property[]) visibleProps.toArray( new Property[ visibleProps.size() ] );        
+    }
+
+    /**
+     * Returns a collection of property definition from the 
+     * specified driverDefinedProps that are defined to be hidden.
+     * <br>For internal use only.
+     */
+    public static Property[] getHiddenPropertiesDefn( 
+            Property[] driverDefinedProps, Properties propertiesVisibility )
+    {
+        if( driverDefinedProps.length == 0 )
+            return driverDefinedProps;
+        
+        ArrayList<Property> hiddenProps = new ArrayList<Property>();
+        for( int i = 0, size = driverDefinedProps.length; i < size; i++ )
+        {
+            Property aProp = driverDefinedProps[i];
+            if( ! aProp.isVisible( propertiesVisibility ) )
+                hiddenProps.add( aProp );
+        }
+        
+        return (Property[]) hiddenProps.toArray( new Property[ hiddenProps.size() ] );        
+    }
+    
+    /**
+     * For internal use only.
+     * Process the specified boolean attribute of the specified element.
+     * @param element       an extension element
+     * @param attributeName name of the boolean attribute
+     * @param defaultValue  default value of the boolean attribute
+     * @return  the attribute value if specified; the default value otherwise
+     */
+    static boolean getBooleanAttributeValue( IConfigurationElement element, String attributeName, 
+                                            boolean defaultValue )
+    {
+        boolean booleanValue = defaultValue;  
+        String attrValueText = element.getAttribute( attributeName );
+        if( attrValueText != null )
+            booleanValue = Boolean.parseBoolean( attrValueText );
+        return booleanValue;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/Property.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/Property.java
new file mode 100644
index 0000000..dee8104
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/Property.java
@@ -0,0 +1,305 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.util.manifest;
+
+import java.util.ArrayList;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+
+/**
+ * The definition of a property defined by an ODA data source extension or 
+ * its supported data set definitions.
+ * <br>
+ * No validation is done on the attribute values; 
+ * it is up to the consumer to process as appropriate.
+ */
+public class Property
+{
+    private static final String VISIBILITY_LOCK = "lock"; //$NON-NLS-1$
+    private static final String VISIBILITY_CHANGE = "change"; //$NON-NLS-1$
+    private static final String VISIBILITY_HIDE = "hide"; //$NON-NLS-1$
+    private static final String LITERAL_TRUE = "true"; //$NON-NLS-1$
+    private static final String LITERAL_FALSE = "false"; //$NON-NLS-1$
+    
+    private static final String NAME_ATTR = "name";  //$NON-NLS-1$
+    private static final String TYPE_ATTR = "type";  //$NON-NLS-1$
+    private static final String DEFAULT_VALUE_ATTR = "defaultValue";  //$NON-NLS-1$
+    private static final String ENCRYPTABLE_ATTR = "isEncryptable";  //$NON-NLS-1$
+    private static final String CAN_INHERIT_ATTR = "canInherit";  //$NON-NLS-1$
+    private static final String EMPTY_VALUE_TYPE_ATTR = "allowsEmptyValueAsNull";  //$NON-NLS-1$
+    private static final String CHOICE_ELEMENT = "choice";   //$NON-NLS-1$
+    
+    private String m_name;
+    private String m_displayName;
+    private String m_groupName;
+    private String m_groupDisplayName;
+    private String m_type = "string"; //$NON-NLS-1$;
+    private boolean m_canInherit = true;
+    private String m_defaultValue;
+    private boolean m_isEncryptable = false;
+    private PropertyChoice[] m_choices = null;
+    private boolean m_allowsEmptyValueAsNull = true;
+
+    Property( IConfigurationElement propertyElement )
+    {
+        setAttributes( propertyElement, null, null );
+    }
+    
+    Property( IConfigurationElement propertyElement,
+              String groupName, String groupDisplayName )
+    {
+        setAttributes( propertyElement, groupName, groupDisplayName );
+    }
+    
+    Property( String name, String displayName, 
+              String groupName, String groupDisplayName )
+    {
+        // no validation is done; up to the consumer to process
+        assert( name != null && name.length() > 0 );
+        m_name = name;
+        m_displayName = displayName;  
+        m_groupName = groupName;
+        m_groupDisplayName = groupDisplayName;
+     }
+    
+    private void setAttributes( IConfigurationElement propertyElement,
+            String groupName, String groupDisplayName )
+    {
+        // no validation is done; up to the consumer to process
+        m_name = propertyElement.getAttribute( NAME_ATTR );
+        m_displayName = ManifestExplorer.getElementDisplayName( propertyElement );  
+        m_groupName = groupName;
+        m_groupDisplayName = groupDisplayName;
+        String propType = propertyElement.getAttribute( TYPE_ATTR );
+        if( propType != null && propType.length() >= 0 )
+        	m_type = propType;     // use this instead of default type
+        m_defaultValue = propertyElement.getAttribute( DEFAULT_VALUE_ATTR );
+
+        Boolean boolValue = convertBooleanValue( 
+                propertyElement.getAttribute( ENCRYPTABLE_ATTR ) );
+        if( boolValue != null )
+            m_isEncryptable = boolValue.booleanValue();
+
+        boolValue = convertBooleanValue( 
+                propertyElement.getAttribute( CAN_INHERIT_ATTR ) );
+        if( boolValue != null )
+            m_canInherit = boolValue.booleanValue();
+		
+        boolValue = convertBooleanValue( 
+                propertyElement.getAttribute( EMPTY_VALUE_TYPE_ATTR ) );
+        if( boolValue != null )
+            m_allowsEmptyValueAsNull = boolValue.booleanValue();
+        
+		// choice elements
+		IConfigurationElement[] choiceElements = 
+		    propertyElement.getChildren( CHOICE_ELEMENT );
+		int numChoices = choiceElements.length;
+		if ( numChoices <= 0 )
+		    return;		// done
+		
+		ArrayList<PropertyChoice> choices = new ArrayList<PropertyChoice>( numChoices );
+		for( int i = 0; i < numChoices; i++ )
+		{
+			IConfigurationElement choiceElement = choiceElements[i];
+			choices.add( new PropertyChoice( choiceElement ) );
+		}
+		m_choices = (PropertyChoice[]) choices.toArray( new PropertyChoice[ numChoices ] );
+
+    }
+
+    private Boolean convertBooleanValue( String value )
+    {
+        if ( value == null || value.length() == 0 )
+            return null;
+        
+        if ( value.equalsIgnoreCase( LITERAL_TRUE ) || 
+             value.equalsIgnoreCase( LITERAL_FALSE ) )
+            return Boolean.valueOf( value );
+        return null;
+    }
+    
+    /**
+     * Returns the property name.
+     * @return	property name
+     */
+    public String getName()
+    {
+        return m_name;
+    }
+    
+    /**
+	 * Returns the display name of the extension-defined property.  
+	 * Defaults to property name if no display name is specified.
+	 * @return	The display name of the property
+	 */
+    public String getDisplayName()
+    {
+        return m_displayName;
+    }
+    
+    /**
+     * If the property is defined in a group, returns
+     * the group's name.  Returns null for top-level property.
+     * @return	the group name of the property, if applicable.
+     */
+    public String getGroupName()
+    {
+        return m_groupName;
+    }
+    
+    /**
+     * If the property is defined in a group, returns
+     * the group's display name.  
+	 * Defaults to group name if no display name is specified.
+     * Returns null for top-level property.
+     * @return	the group display name of the property, if applicable.
+     */
+     public String getGroupDisplayName()
+    {
+        return m_groupDisplayName;
+    }
+    
+    /**
+     * Returns the type of property.  See the extension point
+     * schema for a list of valid type values.
+     * @return	property type.
+     */
+    public String getType()
+    {
+        return m_type;
+    }
+    
+    /**
+     * Returns whether the property can inherit from parent.
+     * Defaults to true if none is specified.
+     * @return	whether the property can inherit.
+     */
+    public boolean canInherit()
+    {
+        return m_canInherit;
+    }
+    
+    /**
+     * Returns the default value of the property.  
+     * Could be null value.
+     * @return	property default value.
+     */
+    public String getDefaultValue()
+    {
+        return m_defaultValue;
+    }
+    
+    /**
+     * Returns a flag indicating whether this property value should be encrypted
+     * in the persistent report design file.
+     * @return	'true' or 'false' value that indicates whether
+     * 			the property value should be encrypted.
+     */
+    public boolean isEncryptable()
+    {
+        return m_isEncryptable;
+    }
+
+    /**
+     * Returns a flag that indicates whether an empty value of this property 
+     * can be treated as a null value.
+     * @return  true if this property's empty value can be handled by the client 
+     *              as a null value
+     */
+    public boolean allowsEmptyValueAsNull()
+    {
+        return m_allowsEmptyValueAsNull;
+    }
+
+    /**
+     * Overrides the default setting of whether an empty value of this property 
+     * can be treated as a null value.
+     * @param allowsEmptyValueAsNull    a boolean flag to indicate
+     *              whether an empty value of this property 
+     *              can be treated as a null value.
+     */
+    void setAllowsEmptyValueAsNull( boolean allowsEmptyValueAsNull )
+    {
+        m_allowsEmptyValueAsNull = allowsEmptyValueAsNull;
+    }
+
+    /**
+     * Returns the selection list of choices for the property value.
+     * An empty array is returned if no choices are specified.
+     * @return	an array of PropertyChoice instances that
+     * 			represent the choice elements defined for the property.
+     */
+    public PropertyChoice[] getChoices()
+    {
+        if ( m_choices == null )
+        {
+    		m_choices = new PropertyChoice[ 0 ];
+        }
+        return m_choices;
+    }
+
+    /**
+     * Indicates whether this property should be visible
+     * per the definition specified in the properties element.
+     * @param propertiesVisibility  the collection of property visibility
+     *          defined for the element associated with
+     *          this property
+     * @return  true if property is defined to be visible;
+     *          false otherwise
+     */
+    public boolean isVisible( Properties propertiesVisibility )
+    {
+        String visibility = 
+            getVisibility( getName(), propertiesVisibility );
+        if( visibility.equalsIgnoreCase( VISIBILITY_HIDE ) )
+            return false;
+        return true;
+    }
+
+    /**
+     * Indicates whether this property value should be editable,
+     * per the definition specified in the properties element.
+     * @param propertiesVisibility  the collection of property visibility
+     *          defined for the element associated with
+     *          this property
+     * @return  true if property is defined to be editable;
+     *          false if the property value should be read only.
+     */
+    public boolean isEditable( Properties propertiesVisibility )
+    {
+        String visibility = 
+            getVisibility( getName(), propertiesVisibility );
+        if( visibility.equalsIgnoreCase( VISIBILITY_HIDE ) ||
+            visibility.equalsIgnoreCase( VISIBILITY_LOCK ) )
+            return false;
+        return true;
+    }
+    
+    /**
+     * Finds the property visibility value.
+     */
+    private String getVisibility( String propName, 
+                            Properties propertiesVisibility )
+    {
+        if( propertiesVisibility == null || 
+            propertiesVisibility.size() == 0 )
+            return VISIBILITY_CHANGE;   // default
+        
+        assert( propName != null );
+        return propertiesVisibility.getProperty( 
+                            propName, VISIBILITY_CHANGE );
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/PropertyChoice.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/PropertyChoice.java
new file mode 100644
index 0000000..d8184fd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/PropertyChoice.java
@@ -0,0 +1,64 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.util.manifest;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+
+/**
+ * A choice of property values for an extension-defined property.
+ */
+public class PropertyChoice
+{
+    private String m_name;
+    private String m_displayName;
+    private String m_value;
+   
+    PropertyChoice( IConfigurationElement choiceElement )
+    {
+        // no validation is done; up to the consumer to process
+        m_name = choiceElement.getAttribute( "name" ); //$NON-NLS-1$
+        m_displayName = ManifestExplorer.getElementDisplayName( choiceElement );  
+        m_value = choiceElement.getAttribute( "value" ); //$NON-NLS-1$
+    }
+    
+    /**
+     * Returns the name of the choice element.
+     * @return	the name of the choice
+     */
+    public String getName()
+    {
+        return m_name;
+    }
+    
+    /**
+     * Returns the display name of the choice element.
+     * Defaults to the choice name if no display name is specified.
+     * @return	the display name of the choice
+     */
+    public String getDisplayName()
+    {
+        return m_displayName;
+    }
+    
+    /**
+     * Returns the value of this choice of property values.
+     * @return	the value of the choice.
+     */
+    public String getValue()
+    {
+        return m_value;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/Relationship.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/Relationship.java
new file mode 100644
index 0000000..7dd7607
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/Relationship.java
@@ -0,0 +1,154 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.util.manifest;
+
+import java.util.List;
+import java.util.Vector;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.nls.Messages;
+
+/**
+ * Represents a data source extension manifest's relationship element.
+ * @since 3.0.3
+ */
+class Relationship
+{
+    static final String ELEMENT_NAME = "relationship";  //$NON-NLS-1$
+    static final String RELATED_ID_ATTRIBUTE_NAME = "relatedId";  //$NON-NLS-1$
+    static final String TYPE_ATTRIBUTE_NAME = "type";  //$NON-NLS-1$
+
+    // relationship types
+    static final int TYPE_REPLACED_BY_CODE = 1;
+    static final int TYPE_WRAPPER_OF_CODE = 2;
+    static final String[] sm_typeValues = 
+    { 
+        "none",             //$NON-NLS-1$
+        "replacedBy",       //$NON-NLS-1$
+        "wrapperOf"         //$NON-NLS-1$
+    };
+    
+    private int m_type;
+    private String m_relatedId;
+    
+    /**
+     * Instantiates a Relationship object that represents the content
+     * of the relationship element in the specified parent element.
+     * @param relationshipParentElement    configuration element that may contain
+     *                                     a relationship element
+     * @return  a list of relationship instances, or null if none is defined or 
+     *          has an invalid element
+     */
+    static List<Relationship> createInstances( IConfigurationElement relationshipParentElement )
+    {
+        if( relationshipParentElement == null )
+            return null;       // nothing to create from
+        IConfigurationElement[] elements =
+            relationshipParentElement.getChildren( ELEMENT_NAME );
+        if( elements.length < 1 )           // no relationship element
+            return null;
+        
+        Vector<Relationship> instances = new Vector<Relationship>( elements.length );
+        for( int i=0; i < elements.length; i++ )
+        {
+            Relationship anInstance = new Relationship();
+            try
+            {
+                anInstance.init( elements[i] );
+            }
+            catch( OdaException e )
+            {
+                // none or invalid relationship element, ignore and skip element
+                anInstance = null;
+            }
+
+            if( anInstance != null )
+                instances.add( anInstance );
+        }
+        
+        return instances.isEmpty() ? null : instances;
+    }
+    
+    private Relationship()
+    {           
+    }
+        
+    private void init( IConfigurationElement relationshipElement )
+        throws OdaException
+    {    
+        m_relatedId = relationshipElement.getAttribute( RELATED_ID_ATTRIBUTE_NAME );
+        if( m_relatedId == null || m_relatedId.length() == 0 )
+            throw new OdaException( 
+                    Messages.bind( Messages.manifest_NO_ATTRIBUTE_ID_DEFINED, 
+                            RELATED_ID_ATTRIBUTE_NAME, ELEMENT_NAME ));
+        
+        setRelationshipType( relationshipElement.getAttribute( TYPE_ATTRIBUTE_NAME ) );
+    }
+    
+    private void setRelationshipType( String typeAttributeValue )
+        throws OdaException
+    {
+        if( typeAttributeValue == null || typeAttributeValue.length() == 0 )
+            throw new OdaException();
+
+        for( int i = 1; i < sm_typeValues.length; i++ )
+        {
+            if( typeAttributeValue.equalsIgnoreCase( sm_typeValues[i] ) )
+            {
+                m_type = i;
+                return;     // found a match, done with setting type value
+            }
+        }
+                
+        // not a recognized type
+        throw new OdaException();            
+    }
+    
+    /**
+     * Indicates whether this extension is defined to be deprecated with
+     * a replacedBy relationship type.
+     */
+    boolean isDeprecated()
+    {
+        return ( m_type == TYPE_REPLACED_BY_CODE );
+    }
+
+    /**
+     * Indicates whether this extension is defined to be a wrapper 
+     * with a wrapperOf relationship type.
+     */
+    boolean isWrapper()
+    {
+        return ( m_type == TYPE_WRAPPER_OF_CODE );
+    }
+   
+    /**
+     * Returns the relationship type constant.
+     */
+    int getType()
+    {
+        return m_type;
+    }
+    
+    /**
+     * Returns the related id.
+     */
+    String getRelatedId()
+    {
+        return m_relatedId;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/RuntimeInterface.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/RuntimeInterface.java
new file mode 100644
index 0000000..ca6b5c2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/RuntimeInterface.java
@@ -0,0 +1,64 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2005 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.util.manifest;
+
+import java.io.IOException;
+import java.net.URL;
+
+/**
+ * Encapsulates the runtime interface specific configurations
+ * of an ODA driver that implements a data source extension.
+ */
+public abstract class RuntimeInterface
+{
+	/**
+	 * Implements C/C++ runtime interface.
+	 */
+	public static final int C_TYPE = 0;
+	
+	/**
+	 * Implements Java runtime interface.
+	 */
+	public static final int JAVA_TYPE = 1;
+	
+	/**
+	 * Returns the interface type of the runtime.  Either RuntimeInterface.C_TYPE 
+	 * or RuntimeInterface.JAVA_TYPE.
+	 * @return	runtime interface type: RuntimeInterface.C_TYPE or 
+	 * 			RuntimeInterface.JAVA_TYPE.
+	 */
+	public abstract int getInterfaceType();
+	
+	/**
+	 * Returns the library location for the current OS platform.
+	 * @return	the library location URL.
+	 * @throws IOException	if an IO error occurs.
+	 */
+	public abstract URL getLibraryLocation() throws IOException;
+	
+	/**
+	 * Returns the driver file location for the current OS platform.
+	 * @param filename	the name of the driver file.
+	 * @return	the driver file location URL.
+	 * @throws IOException	if an IO error occurs.
+	 */
+	public abstract URL getDriverFileLocation( String filename ) throws IOException;
+	
+	/**
+	 * Returns the list of libraries for the current OS platform.
+	 * @return	the list of libraries.
+	 */
+	public abstract String[] getLibraries();
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/TraceLogging.java b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/TraceLogging.java
new file mode 100644
index 0000000..57d3c8a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/TraceLogging.java
@@ -0,0 +1,141 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.util.manifest;
+
+import java.util.HashMap;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.util.logging.Level;
+
+/**
+ * Configuration of the driver's trace logging settings
+ * for a data source extension.
+ */
+public class TraceLogging
+{
+	private int m_logLevel;
+	private String m_logFileNamePrefix;
+	private String m_logDirectory;
+	private String m_logFormatterClass;
+    private static HashMap<String, Integer> sm_logLevelLiterals = null;
+	
+	TraceLogging( IConfigurationElement traceLogging, String dataSourceElementId ) throws OdaException
+	{
+		String logLevelString = traceLogging.getAttribute( "logLevel" ); //$NON-NLS-1$
+		m_logLevel = toLogLevelNumber( logLevelString );
+		
+		m_logFileNamePrefix = traceLogging.getAttribute( "logFileNamePrefix" );		 //$NON-NLS-1$
+		m_logDirectory = traceLogging.getAttribute( "logDirectory" ); //$NON-NLS-1$
+		m_logFormatterClass = traceLogging.getAttribute( "logFormatterClass" ); //$NON-NLS-1$
+	}
+	
+	/**
+	 * Returns the value for the driver's log level,
+	 * as defined in the ODA data source extension point schema.
+	 * @return	the log level.
+	 */
+	public int getLogLevel()
+	{
+		return m_logLevel;
+	}
+	
+	/**
+	 * Returns the string prefix for driver's log file names.
+	 * @return	the log file name prefix.
+	 */
+	public String getLogFileNamePrefix()
+	{
+		return m_logFileNamePrefix;
+	}
+	
+	/**
+	 * Returns the optional directory for log files.
+	 * @return	the log directory, or null if a log directory was not specified.
+	 */
+	public String getLogDirectory()
+	{
+		return m_logDirectory;
+	}
+	
+	/**
+	 * Returns the full class name of a concrete log formatter implementation, 
+	 * suitable for use by the driver-specific logging utility.
+	 * @return	the fully qualified class name for the log formatter class, or 
+	 * 			null if the class was not specified.
+	 */
+	public String getLogFormatterClass()
+	{
+		return m_logFormatterClass;
+	}
+    
+    /**
+     * Converts a string that represents a log level name or 
+     * numeric value to a number.  
+     * Returns the default WARNING log level if given string value is null or
+     * not valid.
+     * @param logLevelName		A string that represents a log level name or numeric value.
+     * @return                  A log level number.
+     */
+    static public int toLogLevelNumber( String logLevelName ) 
+    {
+        int defaultLogLevel = Level.WARNING;
+        if( logLevelName == null || logLevelName.length() == 0 )
+            return defaultLogLevel;
+        
+        // first check if given string value is a pre-defined log level name or number
+        Integer mappedLevel = (Integer) getLogLevelLiterals().get( logLevelName );
+        if( mappedLevel != null )   // found a match
+            return mappedLevel.intValue();
+        
+        // could be numeric string value, try to convert to number
+        try
+        {
+            int logLevel = Short.parseShort( logLevelName );
+    		if( logLevel > Level.SEVERE )
+    		    logLevel = Level.OFF;
+    		return logLevel;
+        }
+        catch( NumberFormatException ex )
+        {
+            return defaultLogLevel;
+        }
+    }
+    
+    static private HashMap<String, Integer> getLogLevelLiterals()
+    {
+        if( sm_logLevelLiterals != null )
+            return sm_logLevelLiterals;
+        
+        sm_logLevelLiterals = new HashMap<String, Integer>( 18, 1 );
+        sm_logLevelLiterals.put( "SEVERE", new Integer( Level.SEVERE ) ); //$NON-NLS-1$
+        sm_logLevelLiterals.put( "1000", new Integer( Level.SEVERE ) ); //$NON-NLS-1$
+        sm_logLevelLiterals.put( "WARNING", new Integer( Level.WARNING ) ); //$NON-NLS-1$
+        sm_logLevelLiterals.put( "900", new Integer( Level.WARNING ) ); //$NON-NLS-1$
+        sm_logLevelLiterals.put( "INFO", new Integer( Level.INFO ) ); //$NON-NLS-1$
+        sm_logLevelLiterals.put( "800", new Integer( Level.INFO ) ); //$NON-NLS-1$
+        sm_logLevelLiterals.put( "CONFIG", new Integer( Level.CONFIG ) ); //$NON-NLS-1$
+        sm_logLevelLiterals.put( "700", new Integer( Level.CONFIG ) ); //$NON-NLS-1$
+        sm_logLevelLiterals.put( "FINE", new Integer( Level.FINE ) ); //$NON-NLS-1$
+        sm_logLevelLiterals.put( "500", new Integer( Level.FINE ) ); //$NON-NLS-1$
+        sm_logLevelLiterals.put( "FINER", new Integer( Level.FINER ) ); //$NON-NLS-1$
+        sm_logLevelLiterals.put( "400", new Integer( Level.FINER ) ); //$NON-NLS-1$
+        sm_logLevelLiterals.put( "FINEST", new Integer( Level.FINEST ) ); //$NON-NLS-1$
+        sm_logLevelLiterals.put( "300", new Integer( Level.FINEST ) ); //$NON-NLS-1$
+        sm_logLevelLiterals.put( "ALL", new Integer( Level.ALL ) ); //$NON-NLS-1$
+        sm_logLevelLiterals.put( "0", new Integer( Level.ALL ) ); //$NON-NLS-1$
+        sm_logLevelLiterals.put( "OFF", new Integer( Level.OFF ) ); //$NON-NLS-1$
+        return sm_logLevelLiterals;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/package.html b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/package.html
new file mode 100644
index 0000000..f851475
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/manifest/package.html
@@ -0,0 +1,43 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2004, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+
+Provides a utility component for accessing the content of an 
+ODA data source extension's manifest.
+<br>
+It can be used by an ODA consumer and/or a data provider
+to discover the plug-in extension configuration.
+<p>
+The utility's initial entry point is the singleton <code>ManifestExplorer</code>.
+It provides the service to explore all the static
+ODA data source extensions, and access to each 
+extension's configuration information specified 
+in its plug-in manifest file.
+<br>  
+The content of such ODA data source extension configuration
+is encapsulated in an <code>ExtensionManifest</code> and its
+associated objects.
+
+<!-- Put @see and @since tags down here. -->
+@since 2.0
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/package.html b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/package.html
new file mode 100644
index 0000000..1a1a6f9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.oda/src/org/eclipse/datatools/connectivity/oda/util/package.html
@@ -0,0 +1,33 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+ *************************************************************************
+ * Copyright (c) 2004, 2010 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body bgcolor="white">
+
+Provides utility components for the development of Open Data Access (ODA) 
+consumers and providers.  This package includes functionalities that 
+are commonly needed by both ODA providers and consumers, such as
+accessing the content of an ODA data source extension's manifest,
+and a string substitution utility.
+
+<!-- Put @see and @since tags down here. -->
+@since 1.0
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/.classpath b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/.gitignore b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/.gitignore
new file mode 100644
index 0000000..6fc31d9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/.gitignore
@@ -0,0 +1,4 @@
+bin
+temp.folder
+build.xml
+rdb.core.ui.jar
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/.options b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/.options
new file mode 100644
index 0000000..109b718
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/.options
@@ -0,0 +1,16 @@
+# Logging && Tracing options for the com.ibm.datatools.core.ui plug-in
+
+# Turn on general debugging for the com.ibm.datatools.core.ui plug-in
+
+com.ibm.datatools.core.ui/debug=true
+
+# Turn on tracing for the com.ibm.datatools.core.ui
+
+com.ibm.datatools.core.ui/modelExplorer/trace=true
+com.ibm.datatools.core.ui/modelExplorerDecoration/trace=true
+
+# Turn on Logging for the com.ibm.datatools.core.ui
+
+com.ibm.datatools.core.ui/modelExplorer/log=true
+com.ibm.datatools.core.ui/editor/log=true
+com.ibm.datatools.core.ui/plugin/log=true
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/.project b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/.project
new file mode 100644
index 0000000..9597dfe
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/.project
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.sqm.core.ui</name>
+	<comment></comment>
+	<projects>
+		<project>com.ibm.datatools.core</project>
+		<project>com.ibm.datatools.modelExtension</project>
+		<project>com.ibm.xtools.ecore.transfer.provider</project>
+		<project>com.ibm.xtools.jdt.transfer.provider</project>
+		<project>com.ibm.xtools.modeler.ui.views</project>
+		<project>com.ibm.xtools.modeler.ui.views.jdt</project>
+		<project>com.ibm.xtools.modeler.ui.views.viz</project>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..1b1fcab
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Fri Feb 26 12:06:25 PST 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/.template b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/.template
new file mode 100644
index 0000000..f3bcd41
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/.template
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<form>

+   <p/><p><b>Tips on working with this plug-in project</b></p><li>For the view of the new plug-in at a glance, go to the <img href="pageImage"/><a href="OverviewPage">Overview</a>.</li><li>You can test the contributions of this plug-in by launching another instance of the workbench. On the <b>Run</b> menu, click <b>Run As</b> and choose <img href="runTimeWorkbenchImage"/><a href="action.run">Run-time Workbench</a> from the available choices.</li><li>You can add more functionality to this plug-in by adding extensions using the <a href="action.newExtension">New Extension Wizard</a>.</li><li>The plug-in project contains Java code that you can debug. Place breakpoints in Java classes. On the <b>Run</b> menu, select <b>Debug As</b> and choose <img href="runTimeWorkbenchImage"/><a href="action.debug">Run-time Workbench</a> from the available choices.</li>

+</form>

diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..b69ff2b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,49 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.sqm.core.ui; singleton:=true
+Bundle-Version: 1.4.1.qualifier
+Bundle-Activator: org.eclipse.datatools.connectivity.sqm.core.internal.ui.RDBCoreUIPlugin
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Export-Package: org.eclipse.datatools.connectivity.sqm.core.internal.ui,
+ org.eclipse.datatools.connectivity.sqm.core.internal.ui.dialogs,
+ org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter,
+ org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.helpers,
+ org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.popup,
+ org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.popup.providers,
+ org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.content.virtual,
+ org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators,
+ org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators.impl,
+ org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.services,
+ org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual,
+ org.eclipse.datatools.connectivity.sqm.core.internal.ui.icons,
+ org.eclipse.datatools.connectivity.sqm.core.internal.ui.l10n,
+ org.eclipse.datatools.connectivity.sqm.core.internal.ui.preferences,
+ org.eclipse.datatools.connectivity.sqm.core.internal.ui.services,
+ org.eclipse.datatools.connectivity.sqm.core.internal.ui.util,
+ org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources,
+ org.eclipse.datatools.connectivity.sqm.core.internal.ui.widgets,
+ org.eclipse.datatools.connectivity.sqm.core.ui.explorer.filter,
+ org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual,
+ org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual,
+ org.eclipse.datatools.connectivity.sqm.core.ui.services
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.core.resources,
+ org.eclipse.ui.navigator,
+ org.eclipse.emf.ecore,
+ org.eclipse.emf.ecore.xmi,
+ org.eclipse.datatools.modelbase.sql,
+ org.eclipse.datatools.modelbase.dbdefinition,
+ org.eclipse.datatools.connectivity.sqm.core,
+ org.eclipse.datatools.connectivity.ui,
+ org.eclipse.datatools.connectivity,
+ org.eclipse.datatools.help;visibility:=reexport,
+ org.eclipse.help.base;resolution:=optional
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Import-Package: com.ibm.icu.text,
+ com.ibm.icu.util
+
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/about.html b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/build.properties b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/build.properties
new file mode 100644
index 0000000..4146f4f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/build.properties
@@ -0,0 +1,28 @@
+###############################################################################
+# Copyright (c) 2001, 2004 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+bin.includes = plugin.xml,\
+               .,\
+               schema/,\
+               plugin.properties,\
+               icons/,\
+               .options,\
+               about.html,\
+               META-INF/
+source.. = src/
+output.. = bin/
+jars.extra.classpath =
+src.dir =		src/
+plugin.version =	1.0.1.200708201
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/build.xml b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/build.xml
new file mode 100644
index 0000000..54422db
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/build.xml
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ *************************************************************************
+ * Copyright (c) 2005 Sybase, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Sybase, Inc.  - initial API and implementation
+ *  
+ ***************************************************************************
+ -->
+<project name="org.eclipse.datatools.connectivity.sqm.core.ui" default="build.jars" basedir=".">
+	<import file="../org.eclipse.datatools.build/common_build.xml" optional="true"/>
+	<property name="module.name" value="org.eclipse.datatools.connectivity.sqm.core.ui"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="eclipse.home" location="."/>
+	<property file="build.properties"/>
+	<!-- JavaDoc settings -->
+	<property name="javadocWindowTitle" value="DTP SQL Query Model Core UI"/>
+	<property name="javadocDocTitle" value="DTP SQL Query Model Core UI API (Internal)"/>
+	<property name="javadocPackages" value="org.eclipse.datatools.connectivity.sqm.core.ui.*"/>
+	<property name="javadocFooter" value="&lt;i>Copyright &#169;  2005 IBM Corporation and others. All rights reserved. &lt;/i>"/>
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="true"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="true"/>
+	<property name="javacSource" value="${javac.source}"/>
+	<property name="javacTarget" value="${javac.target}"/>
+	<property name="compilerArg" value=""/>
+	<path id="path_bootclasspath">
+		<fileset dir="${java.home}/lib">
+			<include name="*.jar"/>
+		</fileset>
+		<fileset dir="${eclipse.home}/plugins">
+			<!-- Include jared plug-ins -->
+			<include name="org.eclipse.core.runtime_*.jar"/>
+			<include name="org.eclipse.osgi_*.jar"/>
+			<include name="org.eclipse.core.resources_*.jar"/>
+			<include name="org.eclipse.emf.ecore_*.jar"/>
+			<include name="org.eclipse.emf.common_*.jar"/>
+			<include name="org.eclipse.emf.ecore.sdo_*.jar"/>
+			<include name="org.eclipse.emf.commonj.sdo_*.jar"/>
+			<include name="org.eclipse.emf.ecore.xmi_*.jar"/>
+			<include name="org.eclipse.emf.ecore.change_*.jar"/>
+			<include name="org.eclipse.ui_*.jar"/>
+			<include name="org.eclipse.swt_*.jar"/>
+			<include name="org.eclipse.swt.*_*.jar"/>
+			<include name="org.eclipse.jface_*.jar"/>
+			<include name="org.eclipse.core.commands_*.jar"/>
+			<include name="org.eclipse.ui.workbench_*.jar"/>
+			<include name="org.eclipse.core.resources_*.jar"/>
+			<include name="com.ibm.icu_*.jar"/>
+			<!-- Include expanded plug-ins -->
+			<include name="org.eclipse.core.runtime_*/org.eclipse.core.runtime_*.jar"/>
+			<include name="org.eclipse.osgi_*/org.eclipse.osgi_*.jar"/>
+			<include name="org.eclipse.core.resources_*/org.eclipse.core.resources_*.jar"/>
+			<include name="org.eclipse.emf.ecore_*/org.eclipse.emf.ecore*.jar"/>
+			<include name="org.eclipse.emf.common_*/org.eclipse.emf.common*.jar"/>
+			<include name="org.eclipse.emf.ecore.sdo_*/org.eclipse.emf.ecore.sdo*.jar"/>
+			<include name="org.eclipse.emf.commonj.sdo_*/org.eclipse.emf.commonj.sdo*.jar"/>
+			<include name="org.eclipse.emf.ecore.xmi_*/org.eclipse.emf.ecore.xmi*.jar"/>
+			<include name="org.eclipse.emf.ecore.change_*/org.eclipse.emf.ecore.change*.jar"/>
+			<include name="org.eclipse.ui_*/org.eclipse.ui_*.jar"/>
+			<include name="org.eclipse.swt_*/org.eclipse.swt_*.jar"/>
+			<include name="org.eclipse.swt.*_*/org.eclipse.swt.*_*.jar"/>
+			<include name="org.eclipse.jface_*/org.eclipse.jface_*.jar"/>
+			<include name="org.eclipse.core.commands_*/org.eclipse.core.commands_*.jar"/>
+			<include name="org.eclipse.ui.workbench_*/org.eclipse.ui.workbench_*.jar"/>
+			<include name="org.eclipse.core.resources_*/org.eclipse.core.resources_*.jar"/>
+		</fileset>
+		<!-- Dependencies on other DTP plug-ins, built before this one -->
+		<fileset dir="../">
+			<include name="org.eclipse.datatools.modelbase.dbdefinition/bin/*"/>
+			<include name="org.eclipse.datatools.modelbase.dbdefinition/databasedefinition.jar"/>
+			<include name="org.eclipse.datatools.modelbase.sql/bin/*"/>
+			<include name="org.eclipse.datatools.modelbase.sql/sqlmodel.jar"/>
+			<include name="org.eclipse.datatools.connectivity.sqm.core/bin/*"/>
+			<include name="org.eclipse.datatools.connectivity.sqm.core/rdbcore.jar"/>
+			<include name="org.eclipse.datatools.connectivity/bin/*"/>
+			<include name="org.eclipse.datatools.connectivity/connectivity.jar"/>
+			<include name="org.eclipse.datatools.connectivity.ui/bin/*"/>
+			<include name="org.eclipse.datatools.connectivity.ui/connectivityui.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins">
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/${module.name}">
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.datatools.connectivity.sqm.core.ui for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<zip destfile="${plugin.destination}/${module.name}_${plugin.version}.jar" basedir="${temp.folder}/${module.name}_${plugin.version}" filesonly="false" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="rdb.core.ui.jar" depends="init" unless="rdb.core.ui.jar" description="Create jar: org.eclipse.datatools.connectivity.sqm.core.ui rdb.core.ui.jar.">
+		<delete dir="${temp.folder}/rdb.core.ui.jar.bin"/>
+		<mkdir dir="${temp.folder}/rdb.core.ui.jar.bin"/>
+		<!-- compile the source code -->
+		<javac destdir="${temp.folder}/rdb.core.ui.jar.bin" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bootclasspath}" source="${javacSource}" target="${javacTarget}"		>
+			<compilerarg line="${compilerArg}"/>
+			<classpath refid="path_bootclasspath"/>
+			<src path="src/"			/>
+			</javac>
+		<!-- Copy necessary resources -->
+		<copy todir="${temp.folder}/rdb.core.ui.jar.bin" failonerror="true" overwrite="false">
+			<fileset dir="src/" excludes="**/*.java, **/package.htm*,null"			/>
+		</copy>
+		<mkdir dir="${build.result.folder}"/>
+		<jar destfile="${build.result.folder}/rdb.core.ui.jar" basedir="${temp.folder}/rdb.core.ui.jar.bin"/>
+		<delete dir="${temp.folder}/rdb.core.ui.jar.bin"/>
+	</target>
+
+	<target name="rdb.core.uisrc.zip" depends="init" unless="rdb.core.uisrc.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<zip destfile="${build.result.folder}/rdb.core.uisrc.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/" includes="**/*.java"			/>
+		</zip>
+	</target>
+
+	<target name="build.jars" depends="init" description="Build all the jars for the plug-in: org.eclipse.datatools.connectivity.sqm.core.ui.">
+		<available property="rdb.core.ui.jar" file="${build.result.folder}/rdb.core.ui.jar"/>
+		<antcall target="rdb.core.ui.jar"/>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="rdb.core.uisrc.zip" file="${build.result.folder}/rdb.core.uisrc.zip"/>
+		<antcall target="rdb.core.uisrc.zip"/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/${module.name}_${plugin.version}"/>
+		<copy todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}" includes="rdb.core.ui.jar"			/>
+		</copy>
+		<copy todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="true" overwrite="false">
+			<fileset dir="${basedir}" includes="plugin.xml,META-INF/,rdb.core.ui.jar,schema/,plugin.properties,icons/,.options,about.html"/>
+		</copy>
+		<copy todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}" includes="rdb.core.uisrc.zip"/>
+		</copy>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/${module.name}_${plugin.version}"/>
+		<copy file="${build.result.folder}/rdb.core.uisrc.zip" todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="false" overwrite="false"/>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/${module.name}_${plugin.version}"/>
+		<copy file="${temp.folder}/rdb.core.ui.jar.bin.log" todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="false" overwrite="false"/>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.datatools.connectivity.sqm.core.ui of all the zips, jars and logs created.">
+		<delete file="${build.result.folder}/rdb.core.ui.jar"/>
+		<delete file="${build.result.folder}/rdb.core.uisrc.zip"/>
+		<delete file="${plugin.destination}/${module.name}_${plugin.version}.jar"/>
+		<delete file="${plugin.destination}/${module.name}_${plugin.version}.zip"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="C:/V3/3.1/eclipse/workspace-dtp/org.eclipse.datatools.connectivity.sqm.core.ui" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.datatools.connectivity.sqm.core.ui.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}" includes="**/*.bin.log"			/>
+		</delete>
+		<zip destfile="${plugin.destination}/${module.name}_${plugin.version}.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+</project>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/bookmark.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/bookmark.gif
new file mode 100644
index 0000000..ca07cd6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/bookmark.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/cachedConnection.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/cachedConnection.gif
new file mode 100644
index 0000000..1a4f6e8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/cachedConnection.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/closedFolder.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/closedFolder.gif
new file mode 100644
index 0000000..42e027c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/closedFolder.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/collapseall.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/collapseall.gif
new file mode 100644
index 0000000..a2d80a9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/collapseall.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/columns.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/columns.gif
new file mode 100644
index 0000000..4facf11
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/columns.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/connect.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/connect.gif
new file mode 100644
index 0000000..6e6ec47
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/connect.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/connectcache.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/connectcache.gif
new file mode 100644
index 0000000..d4d1f9d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/connectcache.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/connection.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/connection.gif
new file mode 100644
index 0000000..9a2594b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/connection.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/connectionFolder.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/connectionFolder.gif
new file mode 100644
index 0000000..1894a3e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/connectionFolder.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/connection_wiz.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/connection_wiz.gif
new file mode 100644
index 0000000..22a34ed
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/connection_wiz.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/constraint.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/constraint.gif
new file mode 100644
index 0000000..eb72b80
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/constraint.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/database.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/database.gif
new file mode 100644
index 0000000..b2361a3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/database.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/delete.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/delete.gif
new file mode 100644
index 0000000..b6922ac
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/delete.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/dependency.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/dependency.gif
new file mode 100644
index 0000000..90daaaf
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/dependency.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/dependency24.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/dependency24.gif
new file mode 100644
index 0000000..d40b1e0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/dependency24.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/dependencyFolder.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/dependencyFolder.gif
new file mode 100644
index 0000000..cf056ea
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/dependencyFolder.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/disconnect_server.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/disconnect_server.gif
new file mode 100644
index 0000000..0994e24
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/disconnect_server.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/domain.bmp b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/domain.bmp
new file mode 100644
index 0000000..b340d7b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/domain.bmp
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/domain.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/domain.gif
new file mode 100644
index 0000000..bb2d794
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/domain.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/edit_server.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/edit_server.gif
new file mode 100644
index 0000000..31a4ba8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/edit_server.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/filter.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/filter.gif
new file mode 100644
index 0000000..a4c9e60
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/filter.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/filter_decorate.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/filter_decorate.gif
new file mode 100644
index 0000000..2f11048
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/filter_decorate.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/filter_wiz.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/filter_wiz.gif
new file mode 100644
index 0000000..47f4862
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/filter_wiz.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/filter_wiz.png b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/filter_wiz.png
new file mode 100644
index 0000000..d223a8a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/filter_wiz.png
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/fk.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/fk.gif
new file mode 100644
index 0000000..d261a1d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/fk.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/fk_decorate.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/fk_decorate.gif
new file mode 100644
index 0000000..6479dea
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/fk_decorate.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/fk_rdbcolumn.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/fk_rdbcolumn.gif
new file mode 100644
index 0000000..cbb4da6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/fk_rdbcolumn.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/generate_code.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/generate_code.gif
new file mode 100644
index 0000000..cf6e89f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/generate_code.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/generate_ddl_wiz.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/generate_ddl_wiz.gif
new file mode 100644
index 0000000..7a4d03d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/generate_ddl_wiz.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/generate_ddl_wiz.png b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/generate_ddl_wiz.png
new file mode 100644
index 0000000..8c1c2d9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/generate_ddl_wiz.png
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/group.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/group.gif
new file mode 100644
index 0000000..136400f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/group.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/index.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/index.gif
new file mode 100644
index 0000000..a08a5de
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/index.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/loading1.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/loading1.gif
new file mode 100644
index 0000000..eae118a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/loading1.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/loading2.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/loading2.gif
new file mode 100644
index 0000000..c37f13d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/loading2.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/loading3.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/loading3.gif
new file mode 100644
index 0000000..10a87c2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/loading3.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/loading4.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/loading4.gif
new file mode 100644
index 0000000..7c6cfa8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/loading4.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/new.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/new.gif
new file mode 100644
index 0000000..da17316
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/new.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/notNullColumn.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/notNullColumn.gif
new file mode 100644
index 0000000..652c38f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/notNullColumn.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/nullColumn.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/nullColumn.gif
new file mode 100644
index 0000000..ea43895
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/nullColumn.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/nullColumnDecoration.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/nullColumnDecoration.gif
new file mode 100644
index 0000000..cd4a752
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/nullColumnDecoration.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/package.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/package.gif
new file mode 100644
index 0000000..ee29632
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/package.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/parameter.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/parameter.gif
new file mode 100644
index 0000000..83ccb54
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/parameter.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/pkColumn.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/pkColumn.gif
new file mode 100644
index 0000000..549efe1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/pkColumn.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/pk_decorate.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/pk_decorate.gif
new file mode 100644
index 0000000..2727106
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/pk_decorate.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/pkfk_decorate.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/pkfk_decorate.gif
new file mode 100644
index 0000000..2683e76
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/pkfk_decorate.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/pkfk_rdbcolumn.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/pkfk_rdbcolumn.gif
new file mode 100644
index 0000000..fda65f3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/pkfk_rdbcolumn.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/primaryKey.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/primaryKey.gif
new file mode 100644
index 0000000..c8df4fa
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/primaryKey.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/properties.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/properties.gif
new file mode 100644
index 0000000..b2361a3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/properties.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/refresh.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/refresh.gif
new file mode 100644
index 0000000..e383147
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/refresh.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/reverse_engr.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/reverse_engr.gif
new file mode 100644
index 0000000..d4f9b0b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/reverse_engr.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/role.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/role.gif
new file mode 100644
index 0000000..50c50e4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/role.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/sample.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/sample.gif
new file mode 100644
index 0000000..366a687
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/sample.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/sampleContents.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/sampleContents.gif
new file mode 100644
index 0000000..19c6ade
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/sampleContents.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/save.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/save.gif
new file mode 100644
index 0000000..654ad7b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/save.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/save_edit.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/save_edit.gif
new file mode 100644
index 0000000..ad505a9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/save_edit.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/schema.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/schema.gif
new file mode 100644
index 0000000..a653cf7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/schema.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/select_table.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/select_table.gif
new file mode 100644
index 0000000..af1a7c7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/select_table.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/sequence.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/sequence.gif
new file mode 100644
index 0000000..7486cd5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/sequence.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/server_explorer.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/server_explorer.gif
new file mode 100644
index 0000000..7ef3c2c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/server_explorer.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/stored_procedure.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/stored_procedure.gif
new file mode 100644
index 0000000..d66a4be
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/stored_procedure.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/table.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/table.gif
new file mode 100644
index 0000000..9bee723
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/table.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/table24.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/table24.gif
new file mode 100644
index 0000000..2d44c80
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/table24.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/trigger.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/trigger.gif
new file mode 100644
index 0000000..f144bfb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/trigger.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/udf.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/udf.gif
new file mode 100644
index 0000000..4f6e53e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/udf.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/udt.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/udt.gif
new file mode 100644
index 0000000..88e0e74
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/udt.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/user.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/user.gif
new file mode 100644
index 0000000..90a0014
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/user.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/view.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/view.gif
new file mode 100644
index 0000000..bd2c560
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/view.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/view24.gif b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/view24.gif
new file mode 100644
index 0000000..150b2f0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/icons/view24.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/plugin.properties b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/plugin.properties
new file mode 100644
index 0000000..fdbf807
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/plugin.properties
@@ -0,0 +1,177 @@
+###############################################################################
+# Copyright (c) 2001, 2004, 2008 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName=Eclipse Data Tools Platform SQM UI Plug-in
+providerName=Eclipse Data Tools Platform
+
+#
+## Extension Point Names
+#
+LABEL_SERVICE_EXTENSION_POINT_NAME=labelService
+ELEMENT_ID_EXTENSION_POINT_NAME=elementID
+MARKER_NAVIGATION_PROVIDER_EXTENSION_POINT_NAME=markerNavigationProvider
+DATA_SOURCE_EXPLORER_SORTER=sorterValidatorProvider
+FILTER_INFORMATION_EXTENSION_POINT_NAME=filterInformation
+
+#
+## Model Explorer Selection
+#
+datatools.core.ui.modelExplorerSelection = Model Explorer Selection
+
+#
+## Preferences for Label Decoration
+#
+datatools.core.ui.preferences.labeldecorators = Label Decorations
+
+#
+## Preferences
+#
+datatools.core.ui.preferences.data = SQL Development
+datatools.core.ui.preferences.output = Output
+
+#
+## Views
+#
+datatools.core.ui.modelElementProperties = Data Model Element Properties
+datatools.core.ui.views.interactiveSQL = Show SQL
+
+#
+## Model Explorer
+#
+datatools.core.ui.contentProviders = Physical Model Content Provider
+datatools.core.ui.parserProviders = Physical Model Parser Provider
+datatools.core.ui.iconProviders = Physical Model Icon Provider
+
+#
+## Nature 
+#
+datatools.core.ui.projectNature = Database Project Data Nature
+
+#
+## Wizards
+# 
+datatools.core.ui.category.project = Database
+datatools.core.ui.category.model = Database Model
+datatools.core.ui.project.basic = Data Design Project
+datatools.core.ui.project.description = Create a Data Design Project
+datatools.core.ui.model.basic = Physical Data Model
+
+#
+## Preferences
+#
+datatools.core.ui.preferences.modeler = Data
+datatools.core.ui.preferences.default = Database Defaults
+
+#
+## Popup && Actions
+#
+datatools.core.ui.actions.close = Close
+datatools.core.ui.actions.add = Add SQL
+datatools.core.ui.actions.addMQT = MQT
+datatools.core.ui.actions.addSchema = Schema
+datatools.core.ui.actions.addTable = Table
+datatools.core.ui.actions.addView = View
+datatools.core.ui.actions.addColumn = Column
+datatools.core.ui.actions.delete = Delete
+datatools.core.ui.actions.addTrigger = Trigger
+datatools.core.ui.globalActionHandlerProviders = Data Global Actions
+datatools.core.ui.actions.selectSupplier = Navigate To Unique Constraint Table
+datatools.core.ui.actions.fe=Generate DDL...
+datatools.core.ui.actions.re=Reverse Engineer from DDL...
+datatools.core.ui.actions.dataModeler = Data Modeler
+datatools.core.ui.actions.addDomain = Domain
+datatools.core.ui.actions.addSequence = Sequence
+datatools.core.ui.actions.addStoredProcedure = Stored Procedure
+datatools.core.ui.actions.addJavaStoredProcedure = Java Stored Procedure
+datatools.core.ui.actions.generateForeignKeyIndex = Index
+datatools.core.ui.actions.generatePrimaryKeyIndex = Index
+datatools.core.ui.actions.addDatabase = Database
+datatools.core.ui.actions.addTableIndex = Index
+datatools.core.ui.actions.addTableCheckConstraint = Check Constraint
+datatools.core.ui.actions.addUniqueConstraint = Unique Constraint
+datatools.core.ui.actions.addAlias = Alias
+datatools.core.ui.actions.addDistinctUDT = Distinct User Defined Type
+datatools.core.ui.actions.addStructuredUDT = Structured User Defined Type
+datatools.core.ui.actions.addMQTIndex = Index
+datatools.core.ui.actions.addMQTTrigger = Trigger
+#
+## Editors
+#
+datatools.core.ui.model.editor = SQL Model Editor
+
+#
+## Decorators
+#
+datatools.core.ui.modelexplorer.modelExplorerColumnDecoration = Data Tools - Column Data Type
+datatools.core.ui.modelexplorer.modelExplorerForeignKeyDecoration = Data Tools - Foreign or Primary Key Indicator
+datatools.core.ui.modelexplorer.DependencyDecoration = Data Tools - Dependency Decoration
+datatools.core.ui.modelexplorer.bookmarkDecoration  = Data Tools - Bookmark Indicator
+datatools.core.ui.modelexplorer.filterDecoration = Data Tools - Server Explorer Filter Node Indicator
+datatools.core.ui.modelexplorer.indextriggerDecoration = Data Tools - Index and Trigger Decoration
+
+#
+## Model Explorer Sorter Provider
+#
+datatools.core.ui.modelexplorer.sorterProviders = Model Explorer Sorter Provider
+datatools.core.ui.modelexplorer.menu.storageOrderSorter = Storage Order
+datatools.core.ui.modelexplorer.menu.name = Name
+datatools.core.ui.modelexplorer.menu.type = Type
+datatools.core.ui.modelexplorer.menu.stereotype = Stereotype
+datatools.core.ui.modelexplorer.menu.visibility = Visibility
+
+#
+## Model Explorer DnD
+#
+datatools.core.ui.modelexplorer.dragDrop = Drag and Drop
+
+#
+## Marker
+#
+datatools.core.ui.modelexplorer.marker.dangling = Dangling Reference
+
+
+#
+## Type for Label Service 
+#
+database = Database
+schema = Schema
+baseTable = Table
+column = Column
+domain = Domain
+udt = User Defined Type
+index = Index
+procedure = Stored Procedure
+view = View
+parameter = Parameter
+trigger = Trigger
+sequence = Sequence
+source= Source
+attributeDefinition = Attribute Definition
+function = User-Defined Function
+dependency = Dependency
+primaryKey = Primary Key
+foreignKey = Foreign Key
+folder = Logical Folder
+CheckConstraint = Check Constraint
+UniqueConstraint = Unique Constraint
+existingConnection = Connections Folder
+connectedConnection = Live Connection
+disconnectedConnection = Disconnected Connection
+cachedConnection = Cached Connection
+catalog = Catalog
+user = User
+group = Group
+role = Role
+authorization = Authorization ID
+
+DEFAULT_SCHEMA_FILTER_PROPERTY_PAGE_NAME=Default Schema Filter
+DEFAULT_TABLE_FILTER_PROPERTY_PAGE_NAME=Default Table Filter
+DEFAULT_STORED_PROCEDURE_FILTER_PROPERTY_PAGE_NAME=Default Stored Procedure Filter
+FILTER_SETTINGS_PROPERTY_PAGE_NAME=Filter Settings
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/plugin.xml b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/plugin.xml
new file mode 100644
index 0000000..a590fb2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/plugin.xml
@@ -0,0 +1,383 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+
+   <extension-point id="labelService" name="%LABEL_SERVICE_EXTENSION_POINT_NAME" schema="schema/labelService.exsd"/>
+   <extension-point id="elementID" name="%ELEMENT_ID_EXTENSION_POINT_NAME" schema="schema/elementID.exsd"/>
+   <extension-point id="markerNavigationProvider" name="%MARKER_NAVIGATION_PROVIDER_EXTENSION_POINT_NAME" schema="schema/markerNavigationProvider.exsd"/>
+   <extension-point id="sorterValidatorProvider" name="%DATA_SOURCE_EXPLORER_SORTER" schema="schema/sorterValidatorProvider.exsd"/>
+   <extension-point id="filterInformation" name="%FILTER_INFORMATION_EXTENSION_POINT_NAME" schema="schema/filterInformation.exsd"/>
+   <extension-point id="creationInfoProvider" name="Creation Info Provider" schema="schema/creationInfoProvider.exsd"/>
+   <extension-point id="addObjectProvider" name="Add Object Provider" schema="schema/addObjectProvider.exsd"/>
+
+   <extension
+         point="org.eclipse.ui.preferencePages">
+      <!-- SQL Development Node -->
+      <!-- Moved to org.eclipse.datatools.sqltools.common.ui 
+      <page
+            name="%datatools.core.ui.preferences.data"
+            class="org.eclipse.datatools.connectivity.sqm.core.internal.ui.preferences.PreferencePage"
+            id="org.eclipse.datatools.connectivity.sqm.core.internal.ui.preferences.data"
+            category="org.eclipse.datatools.connectivity.ui.preferences.dataNode">            
+      </page>      -->
+   	  <!-- Preference page for Label Decorations -->
+      <page
+            name="%datatools.core.ui.preferences.labeldecorators"
+            category="org.eclipse.datatools.connectivity.ui.preferences.dataNode"
+            class="org.eclipse.datatools.connectivity.sqm.core.internal.ui.preferences.LabelDecoratorPreference"
+            id="org.eclipse.datatools.connectivity.sqm.core.ui.preferences.labelDecorations">
+      </page>
+	  <!-- Preference page for Output
+      <page
+      		name="%datatools.core.ui.preferences.output"
+      		category="org.eclipse.datatools.connectivity.sqm.core.internal.ui.preferences.data"
+      		class="org.eclipse.datatools.connectivity.sqm.core.internal.ui.preferences.OutputPreference"
+      		id="org.eclipse.datatools.connectivity.sqm.core.ui.preferences.output">
+     </page>
+      -->
+	</extension>
+
+<!-- Decoration of the Explorer - lightweight Decoration -->
+   <extension
+         id="org.eclipse.datatools.connectivity.sqm.core.internal.ui.modelexplorer.decorator"
+         name="%org.eclipse.datatools.connectivity.sqm.core.internal.ui.modelexplorer.decorator"
+         point="org.eclipse.ui.decorators">
+<!-- Decoration for the Dependencies -->
+	  <decorator
+            lightweight="true"
+            location="TOP_LEFT"
+            adaptable="false"
+            label="%datatools.core.ui.modelexplorer.DependencyDecoration"
+            state="true"
+            class="org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators.impl.DependencyDecorationService"
+            id="org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.DependencyDecoration">
+         <enablement>
+	            <objectClass
+	                  name="org.eclipse.datatools.modelbase.sql.schema.Dependency">
+	            </objectClass>
+         </enablement>
+	  </decorator>
+<!-- Decoration for Column -->
+      <decorator
+            lightweight="true"
+            location="TOP_LEFT"
+            adaptable="false"
+            label="%datatools.core.ui.modelexplorer.modelExplorerColumnDecoration"
+            state="true"
+            class="org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators.impl.ColumnDecorationService"
+            id="org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.ColumnDecoration">
+         <enablement>
+	            <objectClass
+	                  name="org.eclipse.datatools.modelbase.sql.tables.Column">
+	            </objectClass>
+         </enablement>
+      </decorator>
+<!-- Foreign Key Decoration -->
+      <decorator
+            lightweight="true"
+            adaptable="false"
+            label="%datatools.core.ui.modelexplorer.modelExplorerForeignKeyDecoration"
+            state="true"
+            class="org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators.impl.ForeignKeyDecorationService"
+            id="org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.ForeignKeyDecoration">
+         <enablement>
+	            <objectClass
+	            	  name="org.eclipse.datatools.modelbase.sql.constraints.ForeignKey">
+	            </objectClass>
+         </enablement>
+      </decorator>
+<!-- Trigger Decoration -->
+      <decorator
+            lightweight="true"
+            adaptable="false"
+            label="%datatools.core.ui.modelexplorer.indextriggerDecoration"
+            state="true"
+            class="org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators.impl.IndexTriggerDecorationService"
+            id="org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.IndexTriggerDecoration">
+         <enablement>
+	            <objectClass
+	            	  name="org.eclipse.datatools.modelbase.sql.tables.Trigger">
+	            </objectClass>
+         </enablement>
+      </decorator>
+<!-- Decorator for the Bookmark -->
+	  <decorator
+            lightweight="true"
+            adaptable="false"
+            label="%datatools.core.ui.modelexplorer.bookmarkDecoration"
+            state="true"
+            class="org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators.impl.BookmarkDecorationService"
+            id="org.eclipse.datatools.connectivity.internal.core.ui.bookmarkDecoration">
+         <enablement>
+            <or> 
+	            <objectClass
+	                  name="org.eclipse.datatools.modelbase.sql.schema.SQLObject">
+	            </objectClass>
+	            <objectClass
+	                  name="org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode">
+	            </objectClass>
+	        </or>
+         </enablement>
+      </decorator>
+      
+<!-- Decoration for the Filtering on IVirtualNode -->
+	  <decorator
+            lightweight="true"
+            location="BOTTOM_RIGHT"
+            adaptable="false"
+            label="%datatools.core.ui.modelexplorer.filterDecoration"
+            state="true"
+            class="org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators.impl.FilterNodeDecorationService"
+            id="org.eclipse.datatools.connectivity.internal.core.ui.FilterNodeDecoration">
+         <enablement>
+	            <objectClass
+	                  name="org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter.IFilterNode">
+	            </objectClass>
+         </enablement>
+	  </decorator>
+   </extension>
+
+<!-- Support for Bookmark in the Explorers -->
+   <extension
+         id="explorerBookmark"
+         point="org.eclipse.core.resources.markers">
+   </extension>
+   <extension 
+   		id="persistentBookmark" point="org.eclipse.core.resources.markers">
+      	<super 
+      		type="org.eclipse.datatools.connectivity.sqm.core.ui.explorerBookmark">
+      	</super>
+      	<super 
+      		type="org.eclipse.core.resources.bookmark">
+      	</super>
+      	<persistent value="true">
+      	</persistent>
+      	<attribute
+      		name="elementId">
+     	</attribute>
+   </extension>
+   <extension 
+   		id="transientBookmark" point="org.eclipse.core.resources.markers">
+      	<super 
+      		type="org.eclipse.datatools.connectivity.sqm.core.ui.explorerBookmark">
+      	</super>
+      	<super 
+      		type="org.eclipse.core.resources.bookmark">
+      	</super>
+      	<persistent value="false">
+      	</persistent>
+      	<attribute
+      		name="elementId">
+     	</attribute>
+      	<attribute
+      		name="connectionName">
+     	</attribute>
+   </extension>
+
+<!-- Label Providers -->
+	<extension point = "org.eclipse.datatools.connectivity.sqm.core.ui.labelService">
+		<contributor
+			type = "org.eclipse.datatools.modelbase.sql.schema.Database"
+			iconLocation = "/icons/database.gif"
+			displayType = "%database">
+		</contributor>
+		<contributor
+			type = "org.eclipse.datatools.modelbase.sql.schema.Schema"
+			iconLocation = "/icons/schema.gif"
+			displayType = "%schema">
+		</contributor>
+		<contributor
+			type = "org.eclipse.datatools.modelbase.sql.tables.BaseTable"
+			iconLocation = "/icons/table.gif"
+			displayType = "%baseTable">
+		</contributor>
+		<contributor
+			type = "org.eclipse.datatools.modelbase.sql.tables.Column"
+			iconLocation = "/icons/columns.gif"
+			displayType = "%column">
+		</contributor>
+		<contributor
+			type = "org.eclipse.datatools.modelbase.sql.datatypes.Domain"
+			iconLocation = "/icons/domain.gif"
+			displayType = "%domain">
+		</contributor>
+		<contributor
+			type = "org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType"
+			iconLocation = "/icons/udt.gif"
+			displayType = "%udt">
+		</contributor>
+		<contributor
+			type = "org.eclipse.datatools.modelbase.sql.constraints.Index"
+			iconLocation = "/icons/index.gif"
+			displayType = "%index">
+		</contributor>
+		<contributor
+			type = "org.eclipse.datatools.modelbase.sql.routines.Procedure"
+			iconLocation = "/icons/stored_procedure.gif"
+			displayType = "%procedure">
+		</contributor>
+		<contributor
+			type = "org.eclipse.datatools.modelbase.sql.tables.ViewTable"
+			iconLocation = "/icons/view.gif"
+			displayType = "%view">
+		</contributor>
+		<contributor
+			type = "org.eclipse.datatools.modelbase.sql.tables.Table"
+			iconLocation = "/icons/table.gif"
+			displayType = "%baseTable">
+		</contributor>
+		<contributor
+			type = "org.eclipse.datatools.modelbase.sql.routines.Parameter"
+			iconLocation = "/icons/parameter.gif"
+			displayType = "%parameter">
+		</contributor>
+		<contributor
+			type = "org.eclipse.datatools.modelbase.sql.tables.Trigger"
+			iconLocation = "/icons/trigger.gif"
+			displayType = "%trigger">
+		</contributor>
+		<contributor
+			type = "org.eclipse.datatools.modelbase.sql.schema.Sequence"
+			iconLocation = "/icons/sequence.gif"
+			displayType = "%sequence">
+		</contributor>
+		<contributor
+			type = "org.eclipse.datatools.modelbase.sql.routines.Source"
+			iconLocation = "/icons/sample.gif"
+			displayType = "%source">
+		</contributor>
+		<contributor
+			type = "org.eclipse.datatools.modelbase.sql.constraints.CheckConstraint"
+			iconLocation = "/icons/constraint.gif"
+			displayType = "%CheckConstraint">
+		</contributor>
+		<contributor
+			type = "org.eclipse.datatools.modelbase.sql.constraints.UniqueConstraint"
+			iconLocation = "/icons/constraint.gif"
+			displayType = "%UniqueConstraint">
+		</contributor>
+		<contributor
+			type = "org.eclipse.datatools.modelbase.sql.datatypes.AttributeDefinition"
+			iconLocation = "/icons/sample.gif"
+			displayType = "%attributeDefinition">
+		</contributor>
+		<contributor
+			type = "org.eclipse.datatools.modelbase.sql.routines.Function"
+			iconLocation = "/icons/udf.gif"
+			displayType = "%function">
+		</contributor>
+		<contributor
+			type = "org.eclipse.datatools.modelbase.sql.schema.Dependency"
+			iconLocation = "/icons/dependency.gif"
+			displayType = "%dependency">
+		</contributor>
+		<contributor
+			type= "org.eclipse.datatools.modelbase.sql.constraints.PrimaryKey"
+			iconLocation = "/icons/primaryKey.gif"
+			displayType = "%primaryKey">
+		</contributor>
+		<contributor
+			type = "org.eclipse.datatools.modelbase.sql.constraints.ForeignKey"
+			iconLocation = "/icons/fk.gif"
+			displayType = "%foreignKey">
+		</contributor>
+		<contributor
+			type= "org.eclipse.datatools.modelbase.sql.accesscontrol.User"
+			selector = "org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.label.UserSelector"
+			iconLocation = "/icons/user.gif"
+			displayType = "%user">
+		</contributor>
+		<contributor
+			type= "org.eclipse.datatools.modelbase.sql.accesscontrol.User"
+			selector = "org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.label.AuthorizationSelector"
+			iconLocation = "/icons/user.gif"
+			displayType = "%authorization">
+		</contributor>
+		<contributor
+			type= "org.eclipse.datatools.modelbase.sql.accesscontrol.Group"
+			iconLocation = "/icons/group.gif"
+			displayType = "%group">
+		</contributor>
+		<contributor
+			type= "org.eclipse.datatools.modelbase.sql.accesscontrol.Role"
+			iconLocation = "/icons/role.gif"
+			displayType = "%role">
+		</contributor>
+		<contributor
+			type = "org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode"
+			iconLocation = "/icons/closedFolder.gif"
+			displayType = "%folder">
+		</contributor>
+		<contributor
+			type = "org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IDependencyNode"
+			iconLocation = "/icons/dependencyFolder.gif"
+			displayType = "%folder">
+		</contributor>
+		<contributor
+			type = "org.eclipse.datatools.modelbase.sql.schema.Catalog"
+			iconLocation = "/icons/database.gif"
+			displayType = "%catalog">
+		</contributor>
+	</extension>
+ <extension
+       point="org.eclipse.ui.propertyPages">
+    <page
+          class="org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter.SchemaFilterPropertyPage"
+          id="org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter.SchemaFilterPropertyPage"
+          name="%DEFAULT_SCHEMA_FILTER_PROPERTY_PAGE_NAME">
+      <filter
+            name="org.eclipse.datatools.connectivity.profile.property.factoryID"
+            value="org.eclipse.datatools.connectivity.sqm.core.connection.ConnectionInfo"/>
+      <filter
+            name="org.eclipse.datatools.connectivity.profile.property.categoryID"
+            value="org.eclipse.datatools.connectivity.db.category"/>
+      <enabledWhen>
+         <instanceof
+               value="org.eclipse.datatools.connectivity.IConnectionProfile">
+         </instanceof>
+      </enabledWhen>
+    </page>
+    <page
+          class="org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter.DefaultTableFilterPropertyPage"
+          id="org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter.DefaultTableFilterPropertyPage"
+          name="%DEFAULT_TABLE_FILTER_PROPERTY_PAGE_NAME">
+      <filter
+            name="org.eclipse.datatools.connectivity.profile.property.factoryID"
+            value="org.eclipse.datatools.connectivity.sqm.core.connection.ConnectionInfo"/>
+      <filter
+            name="org.eclipse.datatools.connectivity.profile.property.categoryID"
+            value="org.eclipse.datatools.connectivity.db.category"/>
+      <enabledWhen>
+         <instanceof
+               value="org.eclipse.datatools.connectivity.IConnectionProfile">
+         </instanceof>
+      </enabledWhen>
+    </page>
+    <page
+          class="org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter.DefaultSPFilterPropertyPage"
+          id="org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter.DefaultSPFilterPropertyPage"
+          name="%DEFAULT_STORED_PROCEDURE_FILTER_PROPERTY_PAGE_NAME">
+      <filter
+            name="org.eclipse.datatools.connectivity.profile.property.factoryID"
+            value="org.eclipse.datatools.connectivity.sqm.core.connection.ConnectionInfo"/>
+      <filter
+            name="org.eclipse.datatools.connectivity.profile.property.categoryID"
+            value="org.eclipse.datatools.connectivity.db.category"/>
+      <enabledWhen>
+         <instanceof
+               value="org.eclipse.datatools.connectivity.IConnectionProfile">
+         </instanceof>
+      </enabledWhen>
+    </page>
+    <page
+          class="org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter.FilterNodeFilterPropertyPage"
+          id="org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter.FilterNodeFilterPropertyPage"
+          name="%FILTER_SETTINGS_PROPERTY_PAGE_NAME">
+       <enabledWhen>
+          <instanceof
+                value="org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter.IFilterNode">
+          </instanceof>
+       </enabledWhen>
+    </page>
+ </extension>
+</plugin>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema-doc/org_eclipse_datatools_connectivity_sqm_core_ui_elementID.html b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema-doc/org_eclipse_datatools_connectivity_sqm_core_ui_elementID.html
new file mode 100644
index 0000000..00a78a0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema-doc/org_eclipse_datatools_connectivity_sqm_core_ui_elementID.html
@@ -0,0 +1,44 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>elementID</title>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.sdk_3.1.0/book.css");</style>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.platform.doc.isv_3.1.0/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>elementID</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.connectivity.sqm.core.ui.elementID<p></p>
+<h6 class=CaptionFigColumn id=header>Since: </h6>[Enter the first release in which this extension point appears.]
+<p></p>
+
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>[Enter description of this extension point.]</p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.provider">provider</a>)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.provider">provider</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST provider</p>
+<p class=code id=dtdAttlist>class&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>class</b> - </li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>Examples: </h6>[Enter extension point usage example here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>API Information: </h6>[Enter API information here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>Supplied Implementation: </h6>[Enter information about supplied implementation of this extension point.]
+<p></p>
+
+<br>
+<p class=note id=copyright>
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema-doc/org_eclipse_datatools_connectivity_sqm_core_ui_labelService.html b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema-doc/org_eclipse_datatools_connectivity_sqm_core_ui_labelService.html
new file mode 100644
index 0000000..45b149f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema-doc/org_eclipse_datatools_connectivity_sqm_core_ui_labelService.html
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>labelService</title>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.sdk_3.1.0/book.css");</style>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.platform.doc.isv_3.1.0/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>labelService</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.connectivity.sqm.core.ui.labelService<p></p>
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>This extension point will provide plugins a way to supply their own Icons as well as a displayType for SQLObject element.</p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.contributor">contributor</a>)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+This extension point will provide plugins a way to supply their own Icons as well as a displayType for SQLObject element.</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.contributor">contributor</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST contributor</p>
+<p class=code id=dtdAttlist>type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>iconLocation&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>displayType&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>selector&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>type</b> - The EMF type contributed by your provider of the LabelService</li>
+<li><b>iconLocation</b> - This is the Icon location so that the core.ui plugin can load your icon</li>
+<li><b>displayType</b> - This is the type to display in UI such as the property browser. By default the type to display will be the metaclass name eClass().getName()</li>
+<li><b>selector</b> - The name of a class that implements the org.eclipse.datatools.connectivity.sqm.core.internal.ui.LabelSelector interface.  If provided, this class will be used in
+                  addition to the type to determine if the label information should be passed back for the given object.</li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>Examples: </h6><extension point = "com.ibm.datatools.core.ui.labelService">
+  <contributor
+   type = "com.ibm.db.models.sql.schema.Database"
+   iconLocation = "/icons/database.gif"
+   displayType = "%database">
+  </contributor>
+    </extension>
+<p></p>
+
+<br>
+<p class=note id=copyright>
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema-doc/org_eclipse_datatools_connectivity_sqm_core_ui_markerNavigationProvider.html b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema-doc/org_eclipse_datatools_connectivity_sqm_core_ui_markerNavigationProvider.html
new file mode 100644
index 0000000..60a1be8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema-doc/org_eclipse_datatools_connectivity_sqm_core_ui_markerNavigationProvider.html
@@ -0,0 +1,45 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>markerNavigationProvider</title>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.sdk_3.1.0/book.css");</style>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.platform.doc.isv_3.1.0/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>markerNavigationProvider</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.connectivity.sqm.core.ui.markerNavigationProvider<p></p>
+<h6 class=CaptionFigColumn id=header>Since: </h6>[Enter the first release in which this extension point appears.]
+<p></p>
+
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>[Enter description of this extension point.]</p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.provider">provider</a>)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.provider">provider</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST provider</p>
+<p class=code id=dtdAttlist>class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>elementType&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>class</b> - class implementing the interface org.eclipse.datatools.connectivity.sqm.core.internal.ui.services.IMarkerNavigationSelectionProvider</li>
+<li><b>elementType</b> - Type of element that this provider will provide Navigation for</li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>Examples: </h6>[Enter extension point usage example here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>API Information: </h6>[Enter API information here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>Supplied Implementation: </h6>[Enter information about supplied implementation of this extension point.]
+<p></p>
+
+<br>
+<p class=note id=copyright>
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema/addObjectProvider.exsd b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema/addObjectProvider.exsd
new file mode 100644
index 0000000..c4d2e80
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema/addObjectProvider.exsd
@@ -0,0 +1,109 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.connectivity.sqm.core.ui" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.datatools.connectivity.sqm.core.ui" id="addObjectProvider" name="Add Object Provider"/>
+      </appInfo>
+      <documentation>
+         This extension point provides the option for users to add objects to nodes.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appInfo>
+            <meta.element />
+         </appInfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="addObjectProvider"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="addObjectProvider">
+      <complexType>
+         <attribute name="node" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Node to which we are adding an object
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="provider" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Class that implements the code
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IAddObjectProvider"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiinfo"/>
+      </appInfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema/creationInfoProvider.exsd b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema/creationInfoProvider.exsd
new file mode 100644
index 0000000..e0453a1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema/creationInfoProvider.exsd
@@ -0,0 +1,116 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.connectivity.sqm.core.ui" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.datatools.connectivity.sqm.core.ui" id="creationInfoProvider" name="Creation Info Provider"/>
+      </appinfo>
+      <documentation>
+         This extension point provides more information on the creation of elements under the virtual node.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="provider" minOccurs="1" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="provider">
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual.ICreationInfoProvider"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+         <attribute name="product" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="version" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiinfo"/>
+      </appinfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="implementation"/>
+      </appinfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema/elementID.exsd b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema/elementID.exsd
new file mode 100644
index 0000000..3669b6c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema/elementID.exsd
@@ -0,0 +1,85 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.connectivity.sqm.core.ui">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.datatools.connectivity.sqm.core.ui" id="elementID" name="elementID"/>
+      </appInfo>
+      <documentation>
+         [Enter description of this extension point.]
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <complexType>
+         <sequence>
+            <element ref="provider"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="provider">
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema/filterInformation.exsd b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema/filterInformation.exsd
new file mode 100644
index 0000000..818d19f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema/filterInformation.exsd
@@ -0,0 +1,131 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.connectivity.sqm.core.ui" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.datatools.connectivity.sqm.core.ui" id="filterInformation" name="filterInformation"/>
+      </appinfo>
+      <documentation>
+         This extension point will provide plugins a way to supply a filter with a database&apos;s vendor, database&apos;s version, filtering object type as well as the option of using multi-predicates mode.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <documentation>
+            This extension point will provide plugins a way to supply a filter with a database&apos;s vendor, database&apos;s version, filtering object type as well as the option of using multi-predicates mode.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="filterInformation" minOccurs="1" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="filterInformation">
+      <complexType>
+         <sequence>
+            <element ref="object" minOccurs="1" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="vendor" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The vendor of a database.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="version" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The version of a database.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="supportsMultiplePredicates" type="boolean">
+            <annotation>
+               <documentation>
+                  An option to use the mutiple predicates mode.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="object">
+      <complexType>
+         <attribute name="type" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The object that needs the filtering. It is a type of virtual node.
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiinfo"/>
+      </appinfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="implementation"/>
+      </appinfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema/labelService.exsd b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema/labelService.exsd
new file mode 100644
index 0000000..a6e2bca
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema/labelService.exsd
@@ -0,0 +1,132 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.connectivity.sqm.core.ui">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.datatools.connectivity.sqm.core.ui" id="labelService" name="labelService"/>
+      </appInfo>
+      <documentation>
+         This extension point will provide plugins a way to supply their own Icons as well as a displayType for SQLObject element.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <documentation>
+            This extension point will provide plugins a way to supply their own Icons as well as a displayType for SQLObject element.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="contributor"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="contributor">
+      <complexType>
+         <attribute name="type" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The EMF type contributed by your provider of the LabelService
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="iconLocation" type="string" use="required">
+            <annotation>
+               <documentation>
+                  This is the Icon location so that the core.ui plugin can load your icon
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="displayType" type="string">
+            <annotation>
+               <documentation>
+                  This is the type to display in UI such as the property browser. By default the type to display will be the metaclass name eClass().getName()
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="selector" type="string" use="optional">
+            <annotation>
+               <documentation>
+                  The name of a class that implements the org.eclipse.datatools.connectivity.sqm.core.internal.ui.LabelSelector interface.  If provided, this class will be used in
+                  addition to the type to determine if the label information should be passed back for the given object.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         &lt;extension point = &quot;com.ibm.datatools.core.ui.labelService&quot;&gt;
+		&lt;contributor
+			type = &quot;com.ibm.db.models.sql.schema.Database&quot;
+			iconLocation = &quot;/icons/database.gif&quot;
+			displayType = &quot;%database&quot;&gt;
+		&lt;/contributor&gt;
+    &lt;/extension&gt;
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema/markerNavigationProvider.exsd b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema/markerNavigationProvider.exsd
new file mode 100644
index 0000000..a7ea6fa
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema/markerNavigationProvider.exsd
@@ -0,0 +1,106 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.connectivity.sqm.core.ui">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.datatools.connectivity.sqm.core.ui" id="markerNavigationProvider" name="markerNavigationProvider"/>
+      </appInfo>
+      <documentation>
+         [Enter description of this extension point.]
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <complexType>
+         <sequence>
+            <element ref="provider"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="provider">
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  class implementing the interface org.eclipse.datatools.connectivity.sqm.core.internal.ui.services.IMarkerNavigationSelectionProvider
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="elementType" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Type of element that this provider will provide Navigation for
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema/sorterValidatorProvider.exsd b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema/sorterValidatorProvider.exsd
new file mode 100644
index 0000000..1b4d358
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/schema/sorterValidatorProvider.exsd
@@ -0,0 +1,85 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.connectivity.sqm.core.ui">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.datatools.connectivity.sqm.core.ui" id="sorterValidatorProvider" name="sorterValidatorProvider"/>
+      </appInfo>
+      <documentation>
+         [Enter description of this extension point.]
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <complexType>
+         <sequence>
+            <element ref="provider"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="provider">
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/IHelpContextsSQMCoreUI.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/IHelpContextsSQMCoreUI.java
new file mode 100644
index 0000000..eb3f139
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/IHelpContextsSQMCoreUI.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui;
+
+public interface IHelpContextsSQMCoreUI {
+
+	/**
+	 * TPS_helpKey_constants_for_plug-in: org.eclipse.datatools.connectivity.sqm.core.ui
+	 */
+
+	/*
+	 * DEFAULT_STORED_PROCEDURE_FILTER_PROPERTY_PAGE -
+	 * SP filter page for connection profile properties
+	 */
+	public static final String DEFAULT_STORED_PROCEDURE_FILTER_PROPERTY_PAGE = "DEFAULT_STORED_PROCEDURE_FILTER_PROPERTY_PAGE";
+
+	/*
+	 * DEFAULT_TABLE_FILTER_PROPERTY_PAGE -
+	 * table filter page for connection profile properties
+	 */
+	public static final String DEFAULT_TABLE_FILTER_PROPERTY_PAGE = "DEFAULT_TABLE_FILTER_PROPERTY_PAGE";
+
+	/*
+	 * DEFAULT_SCHEMA_FILTER_PROPERTY_PAGE -
+	 * schema filter page for connection profile properties
+	 */
+	public static final String DEFAULT_SCHEMA_FILTER_PROPERTY_PAGE = "DEFAULT_SCHEMA_FILTER_PROPERTY_PAGE";
+
+	/*
+	 * LABEL_DECORATOR_PREFERENCE_PAGE - 
+	 * SQL Development->Label Decorator preference page
+	 */
+	public static final String LABEL_DECORATOR_PREFERENCE_PAGE = "LABEL_DECORATOR_PREFERENCE_PAGE";
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/RDBCoreUIPlugin.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/RDBCoreUIPlugin.java
new file mode 100644
index 0000000..9fd6056
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/RDBCoreUIPlugin.java
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui;
+import java.net.URL;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.CatalogTaskLabelProvider;
+import org.eclipse.datatools.connectivity.sqm.internal.core.util.CatalogUtil;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * @author ljulien
+ */
+public class RDBCoreUIPlugin extends AbstractUIPlugin
+{
+	private static RDBCoreUIPlugin plugin;
+	
+	/**
+	 * Will keep in memory the images needed by our plugin
+	 */
+	private ImageRegistry imageRegistry;
+
+	/**
+	 * @param descriptor
+	 */
+    public RDBCoreUIPlugin()
+    {
+        super ();
+        plugin = this;
+    }
+	/**
+	 * @return The core.ui plugin
+	 */
+	public static RDBCoreUIPlugin getDefault() 
+	{
+		return plugin;
+	}
+    
+	/**
+	 * To use for manipulating images
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#getImageRegistry()
+	 */
+	public ImageRegistry getImageRegistry ()
+	{
+		return imageRegistry;
+	}
+	
+	/**
+	 * @return Will return the plugin ID
+	 */
+	public static String getPluginId ()
+	{
+		return getDefault().getBundle().getSymbolicName();
+	}
+	
+	/**
+	 * @return
+	 */
+	public static URL getInstallURL ()
+	{
+	   return getDefault().getBundle().getEntry("/");  //$NON-NLS-1$
+	}
+	
+	/**
+	 * 
+	 */
+	public void start(BundleContext ctx) throws Exception
+	{
+        try
+        {
+            super.start(ctx);
+            CatalogUtil.setDefaultCatalogTaskLabelProvider(new CatalogTaskLabelProvider());
+            imageRegistry = this.createImageRegistry();
+        }
+        catch (Throwable e)
+        {
+        }
+	}
+	
+	/**
+	 * 
+	 */
+	public void stop(BundleContext ctx) throws Exception
+	{
+        try
+        {
+            CatalogUtil.setDefaultCatalogTaskLabelProvider(null);
+            super.stop(ctx);
+        }
+        catch (Throwable e)
+        {
+        }
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/dialogs/FilterListSelectionDialog.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/dialogs/FilterListSelectionDialog.java
new file mode 100644
index 0000000..2854252
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/dialogs/FilterListSelectionDialog.java
@@ -0,0 +1,172 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.dialogs;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.regex.Pattern;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.emf.ecore.ENamedElement;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.viewers.CheckStateChangedEvent;
+import org.eclipse.jface.viewers.CheckboxTreeViewer;
+import org.eclipse.jface.viewers.ICheckStateListener;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.dialogs.CheckedTreeSelectionDialog;
+
+/**
+ * @author bmcnichols
+ */
+public class FilterListSelectionDialog extends CheckedTreeSelectionDialog
+{
+    public FilterListSelectionDialog( Shell parentShell, ITreeContentProvider contentProvider, ILabelProvider labelProvider )
+    {
+        this( parentShell, contentProvider, labelProvider, new ListSelectionFilter() );
+    }
+
+    public FilterListSelectionDialog( Shell parentShell, ITreeContentProvider contentProvider, ILabelProvider labelProvider, ListSelectionFilter filter )
+    {
+        super( parentShell, labelProvider, contentProvider );
+        addFilter( filter );
+        setMessage( ResourceLoader.getResourceLoader().queryString( "DATATOOLS.CORE.UI.DIALOGS.FILTERLISTSELECTIONDIALOG.MESSAGE") ); //$NON-NLS-1$
+        setTitle( ResourceLoader.getResourceLoader().queryString( "DATATOOLS.CORE.UI.DIALOGS.FILTERLISTSELECTIONDIALOG.TITLE") ); //$NON-NLS-1$
+        setContainerMode( true );
+    }
+    
+    protected void computeResult() { setResult( checkedItems ); }    
+    
+	protected Control createDialogArea(Composite parent)
+	{
+		Composite parentComposite = new Composite( parent, SWT.NONE );
+        GridLayout gridLayout = new GridLayout( 1, false );
+        parentComposite.setLayout( gridLayout );
+        GridData data = new GridData( GridData.FILL_BOTH );
+        parentComposite.setLayoutData( data );
+		
+		Composite filterComposite = new Composite( parentComposite, SWT.NONE );
+        GridLayout filterCompositeGridLayout = new GridLayout( 1, false );
+        filterCompositeGridLayout.marginWidth = convertHorizontalDLUsToPixels( IDialogConstants.HORIZONTAL_MARGIN );
+        filterCompositeGridLayout.horizontalSpacing = convertHorizontalDLUsToPixels( IDialogConstants.HORIZONTAL_SPACING );
+        filterComposite.setLayout( filterCompositeGridLayout );
+        filterComposite.setLayoutData( new GridData( GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL ) );
+		
+        Label filterLabel = new Label( filterComposite, SWT.NULL );
+        filterLabel.setText( ResourceLoader.getResourceLoader().queryString( "DATATOOLS.CORE.UI.DIALOGS.FILTERLISTSELECTIONDIALOG.FILTERLABEL") ); //$NON-NLS-1$
+        filterText = new Text( filterComposite, SWT.SINGLE | SWT.BORDER );
+        filterText.setLayoutData( new GridData( GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL ) );
+        filterText.addKeyListener( new KeyAdapter() 
+        {
+            public void keyReleased( KeyEvent e ) { refreshFilter( filterText.getText() ); }
+        });
+        
+        super.createDialogArea( parentComposite );
+		return parentComposite;
+	}
+	
+	protected CheckboxTreeViewer createTreeViewer( Composite parent )
+	{
+	    CheckboxTreeViewer treeViewer = super.createTreeViewer( parent );
+	    treeViewer.addCheckStateListener( new ICheckStateListener() 
+        {
+            public void checkStateChanged( CheckStateChangedEvent event ) 
+            {  
+                setCheckedState( getTreeViewer(), event.getElement() ); 
+            }
+        } );
+	    return treeViewer;
+	}
+	
+    private void setCheckedState( CheckboxTreeViewer treeViewer, Object element )
+    {
+        ITreeContentProvider contentProvider = ( ITreeContentProvider )treeViewer.getContentProvider();
+        if( contentProvider.hasChildren( element ) )
+        {
+            Iterator childrenIterator = getAllChildren( element, contentProvider, treeViewer.getFilters() ).iterator();
+            while( childrenIterator.hasNext() )
+            {
+                Object child = childrenIterator.next();
+                if( treeViewer.getChecked( child ) ) checkedItems.add( child );
+                else checkedItems.remove( child );
+            }
+        }
+        else if( treeViewer.getChecked( element ) ) checkedItems.add( element );
+        else checkedItems.remove( element );
+    }
+    
+    private List getAllChildren( Object element, ITreeContentProvider contentProvider, ViewerFilter[] filters )
+    {
+        if( contentProvider.hasChildren( element ) )
+        {
+            Object children[] = filterElements( contentProvider.getChildren( element ), element, filters );
+            List childrenList = new ArrayList( children.length );
+            for( int i=0; i<children.length; i++ ) childrenList.addAll( getAllChildren( children[i], contentProvider, filters ) );
+            return childrenList;
+        }
+        else return Collections.singletonList( element );
+    }
+    
+    private Object[] filterElements( Object elements[], Object parent, ViewerFilter[] filters )
+    {
+        Object[] filteredElements = elements;
+        for( int i=0; i<filters.length; i++ ) filteredElements = filters[i].filter(getTreeViewer(), parent, filteredElements );
+        return filteredElements;
+    }
+    
+	private void refreshFilter( String filterString )
+	{
+	    ListSelectionFilter filter = ( ListSelectionFilter )getTreeViewer().getFilters()[0];
+	    filter.setFilter( filterString );
+        getTreeViewer().refresh();
+        getTreeViewer().setCheckedElements( checkedItems.toArray() );
+	}
+
+	public static class ListSelectionFilter extends ViewerFilter
+	{
+	    public boolean isElementFilterable( Viewer viewer, Object parentElement, Object element ) { return true; }
+        final public boolean select( Viewer viewer, Object parentElement, Object element)
+        {
+            if( !isElementFilterable( viewer, parentElement, element ) ) return true;
+            if( !( element instanceof ENamedElement ) ) return false;
+            else return ( ( filter == null ) || filter.matcher( ( ( ENamedElement )element ).getName() ).matches() );
+        }
+        
+        void setFilter( String filterString ) 
+        {  
+            if( ( filterString == null ) || filterString.equals( "" ) ) filter = null; //$NON-NLS-1$
+            else 
+            {
+                String filterPattern = filterString.replaceAll( "\\\\", "\\\\\\\\" ).replaceAll( "\\.", "\\\\.").replaceAll( "\\?", "." ).replaceAll( "\\*", ".*"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$
+                filter = Pattern.compile( filterPattern, Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE );
+            }
+        }
+        
+        private Pattern filter;
+	}
+	
+	private Text filterText;
+    private List checkedItems = new ArrayList();
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/dialogs/ResourceChooserDialog.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/dialogs/ResourceChooserDialog.java
new file mode 100644
index 0000000..547ab42
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/dialogs/ResourceChooserDialog.java
@@ -0,0 +1,261 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.dialogs;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.widgets.DataContainerSelectionGroup;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.widgets.IDataSelectionValidator;
+import org.eclipse.jface.resource.JFaceColors;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.dialogs.SelectionDialog;
+
+/**
+ * A standard selection dialog which solicits a container resource from the
+ * user. The <code>getResult</code> method returns the selected container
+ * resource.
+ * <p>
+ * This class may be instantiated; it is not intended to be subclassed.
+ * </p>
+ * <p>
+ * Example:
+ * 
+ * <pre>
+ * ContainerSelectionDialog dialog = new ContainerSelectionDialog(getShell(),
+ *         initialSelection, allowNewContainerName(), msg);
+ * dialog.open();
+ * Object[] result = dialog.getResult();
+ * </pre>
+ * 
+ * </p>
+ * 
+ * The original implementation of this class was copied from
+ * org.eclipse.ui.dialogs.ContainerSelectionDialog.
+ *  
+ */
+public class ResourceChooserDialog extends SelectionDialog {
+	private static final ResourceLoader resource = ResourceLoader.getResourceLoader();
+    // the widget group;
+    DataContainerSelectionGroup group;
+
+    // the root resource to populate the viewer with
+    private IContainer initialSelection;
+
+    // the file preselected in the viewer
+    private IFile selectedFile;
+
+    // allow the user to type in a new container name
+    private boolean allowNewContainerName = true;
+
+    // the validation message
+    Label statusMessage;
+
+    //for validating the selection
+    IDataSelectionValidator validator;
+
+    // show closed projects by default
+    private boolean showClosedProjects = true;
+
+    // show files by default
+    private boolean showFiles = true;
+
+    // show all files by default
+    private String[] fileFilter = new String[0];
+
+    // show projects regardless of nature by default
+    private String[] projectNatureFilter = new String[0];
+    
+    private boolean allowMultipleSelection = false;
+    
+    private String[] filesToExclude = new String[0];
+
+    /**
+     * Creates a resource container selection dialog rooted at the given
+     * resource. All selections are considered valid.
+     * 
+     * @param parentShell
+     *            the parent shell
+     * @param initialRoot
+     *            the initial selection in the tree
+     * @param allowNewContainerName
+     *            <code>true</code> to enable the user to type in a new
+     *            container name, and <code>false</code> to restrict the user
+     *            to just selecting from existing ones
+     * @param message
+     *            the message to be displayed at the top of this dialog, or
+     *            <code>null</code> to display a default message
+     */
+    public ResourceChooserDialog(Shell parentShell, IContainer initialRoot,
+            boolean allowNewContainerName, String message, boolean showFiles) {
+        super(parentShell);
+        if (showFiles){
+            setTitle(resource.queryString("_UI_TITLE_FILE_CHOOSER")); //$NON-NLS-1$
+        } else {
+            setTitle(resource.queryString("_UI_TITLE_FOLDER_CHOOSER")); //$NON-NLS-1$
+        }
+        this.initialSelection = initialRoot;
+        this.showFiles = showFiles;
+        this.allowNewContainerName = allowNewContainerName;
+        if (message != null)
+        {
+            setMessage(message);
+        }
+        else 
+        {
+            if (showFiles){
+                setMessage(resource.queryString("_UI_DESCRIPTION_FILE")); //$NON-NLS-1$
+            } else {
+            setMessage(resource.queryString("_UI_DESCRIPTION_FOLDER"));    //$NON-NLS-1$
+            }
+        }
+        setShellStyle(getShellStyle() | SWT.RESIZE);
+    }
+
+    /**
+     * Creates a resource container selection dialog rooted at the given
+     * resource. All selections are considered valid.
+     * 
+     * @param parentShell
+     *            the parent shell
+     * @param initialRoot
+     *            the initial selection in the tree
+     * @param initialFile
+     *            the initial file selection in the tree
+     * @param allowNewContainerName
+     *            <code>true</code> to enable the user to type in a new
+     *            container name, and <code>false</code> to restrict the user
+     *            to just selecting from existing ones
+     * @param message
+     *            the message to be displayed at the top of this dialog, or
+     *            <code>null</code> to display a default message
+     */
+    public ResourceChooserDialog(Shell parentShell, IContainer initialRoot, IFile initialFile,
+            boolean allowNewContainerName, String message, boolean showFiles) {
+        this(parentShell, initialRoot, allowNewContainerName, message, showFiles);
+        this.selectedFile = initialFile;
+    }
+
+    /*
+     * (non-Javadoc) Method declared on Dialog.
+     */
+    protected Control createDialogArea(Composite parent) {
+        // create composite
+        Composite area = (Composite) super.createDialogArea(parent);
+
+        Listener listener = new Listener() {
+            public void handleEvent(Event event) {
+                if (statusMessage != null && validator != null) {
+                    String errorMsg = validator.isValid(group
+                            .getSelection());
+                    if (errorMsg == null || errorMsg.equals("")) { //$NON-NLS-1$
+                        statusMessage.setText(""); //$NON-NLS-1$
+                        getOkButton().setEnabled(true);
+                    } else {
+                        statusMessage.setForeground(JFaceColors
+                                .getErrorText(statusMessage.getDisplay()));
+                        statusMessage.setText(errorMsg);
+                        getOkButton().setEnabled(false);
+                    }
+                }
+            }
+        };
+
+        // container selection group
+        group = new DataContainerSelectionGroup(area, listener,
+                allowNewContainerName, getMessage(), showClosedProjects,
+                projectNatureFilter, showFiles, fileFilter, this.allowMultipleSelection, filesToExclude);
+        
+        if (selectedFile != null) {
+            group.setSelectedFile(selectedFile);
+        } 
+        else if (initialSelection != null) {
+            group.setSelectedContainer(initialSelection);
+        }
+
+        statusMessage = new Label(group, SWT.NONE);
+        statusMessage.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+        statusMessage.setFont(parent.getFont());
+
+        return dialogArea;
+    }
+
+    /**
+     * The <code>ContainerSelectionDialog</code> implementation of this
+     * <code>Dialog</code> method builds a list of the selected resource
+     * containers for later retrieval by the client and closes this dialog.
+     */
+    protected void okPressed() {
+
+        List selectionList = new ArrayList();
+        IStructuredSelection returnValue = group.getSelection();
+        if (returnValue != null)
+            selectionList.add(returnValue);
+        setResult(selectionList);
+        super.okPressed();
+    }
+
+    /**
+     * Sets the validator to use.
+     * 
+     * @param validator
+     *            A selection validator
+     */
+    public void setValidator(IDataSelectionValidator validator) {
+        this.validator = validator;
+    }
+
+    /**
+     * Set whether or not closed projects should be shown in the selection
+     * dialog.
+     * 
+     * @param show
+     *            Whether or not to show closed projects.
+     */
+    public void showClosedProjects(boolean show) {
+        this.showClosedProjects = show;
+    }
+
+    public void setFileFilter(String[] filter) {
+        this.fileFilter = filter;
+    }
+
+    /**
+     * Specify the natures of projects to be displayed. Default is to show
+     * projects regardless of nature.
+     * 
+     * @param naturesToShow
+     *            String[] containing the project natures a project must have to
+     *            be displayed
+     */
+    public void setProjectNatureFilter(String[] naturesToShow) {
+        this.projectNatureFilter = naturesToShow;
+    }
+    
+    public void allowMultipleSelections(boolean allow){
+        this.allowMultipleSelection = allow;
+    }  
+    
+    public void setExcludedFiles(String[] filesToExclude){
+        this.filesToExclude = filesToExclude;
+    }
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/ColumnCellModifier.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/ColumnCellModifier.java
new file mode 100644
index 0000000..2604f2a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/ColumnCellModifier.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter;
+
+import java.text.Collator;
+
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.Predicate;
+import org.eclipse.jface.viewers.ICellModifier;
+import org.eclipse.swt.widgets.TableItem;
+
+public class ColumnCellModifier implements ICellModifier {
+	private ColumnTable m_columnTable;
+
+	private String[] comboItems;
+
+	private int index;
+
+	private TableItem item;
+
+	private Predicate predicate;
+
+	public ColumnCellModifier(ColumnTable columnTable) {
+		m_columnTable = columnTable;
+	}
+
+	public Object getValue(Object element, String property) {
+		predicate = (Predicate) element;
+
+		Collator collator =Collator.getInstance(); 
+		collator.setStrength(Collator.PRIMARY);
+		if (collator.compare(property,m_columnTable.getFirstColumnName()) == 0)
+			return new Integer(predicate.getOperator() - 1);
+		else
+			return predicate.getValue();
+	}
+
+	public void modify(Object element, String property, Object value) {
+		item = (TableItem) element;
+		predicate = (Predicate) item.getData();
+
+		Collator collator =Collator.getInstance(); 
+		collator.setStrength(Collator.PRIMARY);
+		if (collator.compare(property,m_columnTable.getFirstColumnName()) == 0){
+			index = ((Integer) value).intValue();
+			predicate.setOperator(index + 1);
+		} else {
+			predicate.setValue((value.toString()));
+		}
+		m_columnTable.updatePredicate(predicate);
+	}
+
+	public boolean canModify(Object element, String property) {
+		return true;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/ColumnContentProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/ColumnContentProvider.java
new file mode 100644
index 0000000..e981ba3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/ColumnContentProvider.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter;
+
+import java.util.ArrayList;
+
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+public class ColumnContentProvider implements IStructuredContentProvider {
+	private ArrayList predicates;
+
+	public ColumnContentProvider(ConnectionFilter connFilter) {
+		predicates = connFilter.getPredicatesCollection();
+	}
+
+	public Object[] getElements(Object parent) {
+		return predicates.toArray();
+	}
+
+	public void dispose() {
+	}
+
+	public void inputChanged(Viewer v, Object oldInput, Object newInput) {
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/ColumnLabelProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/ColumnLabelProvider.java
new file mode 100644
index 0000000..d8adaf9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/ColumnLabelProvider.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter;
+
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.Predicate;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+public class ColumnLabelProvider extends LabelProvider implements
+		ITableLabelProvider {
+	Predicate predicate;
+
+	ColumnTable columnTable;
+
+	public ColumnLabelProvider(ColumnTable columnTable) {
+		this.columnTable = columnTable;
+	}
+
+	public String getColumnText(Object element, int columnIndex) {
+		predicate = (Predicate) element;
+
+		if (columnIndex == 0)
+			return columnTable.getSQLOperator(predicate.getOperator());
+		else
+			return predicate.getValue();
+	}
+
+	public Image getColumnImage(Object element, int columnIndex) {
+		return null;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/ColumnTable.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/ColumnTable.java
new file mode 100644
index 0000000..eb29271
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/ColumnTable.java
@@ -0,0 +1,457 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.RDBCoreUIPlugin;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ImagePath;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.Predicate;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.ComboBoxCellEditor;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TextCellEditor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.osgi.framework.Bundle;
+
+/**
+ * This class creates the table columns.
+ * 
+ * @author David Archer <a href="mailto:dwarcher@us.ibm.com">dwarcher@us.ibm.com</a>
+ */
+public class ColumnTable {
+	
+	private static final ResourceLoader resource = ResourceLoader.getResourceLoader();
+	
+	Bundle bundle = RDBCoreUIPlugin.getDefault().getBundle();
+	
+	private static final String ICONS_DIRECTORY = "/icons/"; //$NON-NLS-1$
+	
+	private ConnectionFilter connFilter = null;
+
+	private ToolItem m_newColumnToolItem = null;
+
+	private ToolItem m_deleteColumnToolItem = null;
+
+	private Image m_newColumnImage = null;
+
+	private Image m_deleteColumnImage = null;
+
+	private Button andRadioButton;
+
+	private Button orRadioButton;
+
+	private Table m_columnTable = null;
+
+	private TableColumn tableColumn;
+
+	private TableViewer m_columnTableViewer = null;
+
+	private GridData gd;
+
+	private List columnNames = new ArrayList();
+
+	private List editors = new ArrayList();
+
+	private int currentSelectedIndex = -1;
+
+	private Predicate predicate;
+
+	private ArrayList predicates;
+
+	public static final int STARTS_WITH_OPERATOR = 1;
+
+	public static final int CONTAINS_OPERATOR = 2;
+
+	public static final int ENDS_WITH_OPERATOR = 3;
+
+	public static final int NOT_START_WITH_OPERATOR = 4;
+
+	public static final int NOT_CONTAIN_OPERATOR = 5;
+
+	public static final int NOT_END_WITH_OPERATOR = 6;
+
+	public static final int SELECTION_OPERATOR = 7;
+
+	private String STARTS_WITH_TEXT = resource
+			.queryString("_UI_COMBO_STARTS_WITH"); //$NON-NLS-1$
+
+	private String CONTAINS_TEXT = resource.queryString("_UI_COMBO_CONTAINS"); //$NON-NLS-1$
+
+	private String ENDS_WITH_TEXT = resource.queryString("_UI_COMBO_ENDS_WITH"); //$NON-NLS-1$
+
+	private String NOT_START_WITH_TEXT = resource
+			.queryString("_UI_COMBO_NOT_START_WITH"); //$NON-NLS-1$;
+
+	private String NOT_CONTAIN_TEXT = resource
+			.queryString("_UI_COMBO_NOT_CONTAIN"); //$NON-NLS-1$;
+
+	private String NOT_END_WITH_TEXT = resource
+			.queryString("_UI_COMBO_NOT_END_WITH"); //$NON-NLS-1$;
+
+	private String[] predicatesArray = { STARTS_WITH_TEXT, CONTAINS_TEXT,
+			ENDS_WITH_TEXT, NOT_START_WITH_TEXT, NOT_CONTAIN_TEXT,
+			NOT_END_WITH_TEXT };
+
+	private ConnectionFilterPropertyPage page;
+	
+	private boolean isAnded = true;
+	
+	private CommonTableCursor cursor;
+	
+	//Used for Translated Column Name String
+	private String firstColumnName;
+	
+	public ColumnTable(Composite composite,
+			ConnectionFilterPropertyPage filterWizardPage,
+			ConnectionFilter connectionFilter) {
+		
+		page = filterWizardPage;
+		connFilter = connectionFilter;
+		isAnded = connFilter.isMeetsAllConditions();
+		
+		GridLayout compositeLayout = new GridLayout(3, false);
+		composite.setLayout(compositeLayout);
+
+		// toolbar
+		ToolBar toolbar = new ToolBar(composite, SWT.FLAT);
+		gd = new GridData();
+		gd.verticalAlignment = GridData.BEGINNING;
+		gd.horizontalAlignment = GridData.BEGINNING;
+		gd.widthHint = 100;
+		toolbar.setLayoutData(gd);
+
+		// add button
+		m_newColumnToolItem = new ToolItem(toolbar, SWT.NONE);
+		m_newColumnToolItem.setToolTipText(resource
+				.queryString("_UI_TOOLTIP_NEW"));
+		m_newColumnImage = resource.queryAbsolutePathImageFromRegistry(bundle, ICONS_DIRECTORY + ImagePath.NEW);//ImageDescription.getNewDescriptor().createImage();
+		m_newColumnToolItem.setImage(m_newColumnImage);
+		m_newColumnToolItem.addSelectionListener(new SelectionListener() {
+			public void widgetDefaultSelected(SelectionEvent event) {
+				// TODO Auto-generated method stub
+			}
+
+			public void widgetSelected(SelectionEvent event) {
+				predicate = new Predicate(1, "");
+				m_columnTableViewer.add(predicate);
+				updateDeleteButtonState();
+				page.setPageValidity();
+			}
+		});
+
+		// delete button
+		m_deleteColumnToolItem = new ToolItem(toolbar, SWT.NONE);
+		m_deleteColumnToolItem.setToolTipText(resource
+				.queryString("_UI_TOOLTIP_DELETE"));
+		m_deleteColumnImage = resource.queryAbsolutePathImageFromRegistry(bundle, ICONS_DIRECTORY + ImagePath.DELETE);
+		m_deleteColumnToolItem.setImage(m_deleteColumnImage);
+
+		m_deleteColumnToolItem.addSelectionListener(new SelectionListener() {
+			public void widgetDefaultSelected(SelectionEvent event) {//
+			}
+
+			public void widgetSelected(SelectionEvent event) {
+
+				predicate = (Predicate) ((IStructuredSelection) m_columnTableViewer
+						.getSelection()).getFirstElement();
+
+				currentSelectedIndex = m_columnTable.getSelectionIndex();
+
+				if ((m_columnTable.getItemCount() - 1) == currentSelectedIndex)
+					m_columnTable.setSelection(currentSelectedIndex - 1);
+				else
+					m_columnTable.setSelection(currentSelectedIndex + 1);
+
+				m_columnTableViewer.remove(predicate);
+				updateDeleteButtonState();
+				m_columnTableViewer.refresh(predicate);
+			}
+		});
+
+		Composite radioButtonComposite = new Composite(composite, SWT.NONE);
+		compositeLayout = new GridLayout(2, false);
+		gd = new GridData();
+		gd.horizontalSpan = 2;
+		gd.verticalAlignment = GridData.BEGINNING;
+		gd.horizontalAlignment = GridData.END;
+		radioButtonComposite.setLayout(compositeLayout);
+		radioButtonComposite.setLayoutData(gd);
+
+		// AND radio button
+		andRadioButton = new Button(radioButtonComposite, SWT.RADIO);
+		andRadioButton.setText(resource.queryString("_UI_RADIO_BUTTON_AND")); //$NON-NLS-1$		
+		gd = new GridData();
+		gd.verticalAlignment = GridData.BEGINNING;
+		gd.horizontalAlignment = GridData.END;
+		andRadioButton.setLayoutData(gd);
+		andRadioButton.addSelectionListener(new SelectionListener(){
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				// TODO Auto-generated method stub
+				
+			}
+
+			public void widgetSelected(SelectionEvent e) {
+				isAnded = true;
+			}
+			
+		});
+
+		// OR radio button
+		orRadioButton = new Button(radioButtonComposite, SWT.RADIO);
+		orRadioButton.setText(resource.queryString("_UI_RADIO_BUTTON_OR")); //$NON-NLS-1$
+		gd = new GridData();
+		gd.verticalAlignment = GridData.BEGINNING;
+		gd.horizontalAlignment = GridData.END;
+		orRadioButton.setLayoutData(gd);
+		orRadioButton.addSelectionListener(new SelectionListener(){
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				// TODO Auto-generated method stub
+				
+			}
+
+			public void widgetSelected(SelectionEvent e) {
+				isAnded = false;
+			}
+			
+		});
+		
+		
+		if (connFilter.isMeetsAllConditions())
+			andRadioButton.setSelection(true);
+		else
+			orRadioButton.setSelection(true);
+
+		// table
+		m_columnTable = new Table(composite, SWT.SINGLE | SWT.BORDER
+				| SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
+		m_columnTable.setHeaderVisible(true);
+		gd = new GridData(GridData.FILL_BOTH);
+		gd.verticalAlignment = GridData.BEGINNING;
+		gd.horizontalSpan = 3;
+		gd.heightHint = 90;
+		gd.widthHint = 50;
+		m_columnTable.setLayoutData(gd);
+		m_columnTable.setLinesVisible(true);
+
+		// operator Column
+		tableColumn = new TableColumn(m_columnTable, SWT.LEFT);
+		tableColumn.setText(resource.queryString("_UI_COMBO_PREDICATE"));
+		columnNames.add(resource.queryString("_UI_COMBO_PREDICATE"));
+		setFirstColumnName(resource.queryString("_UI_COMBO_PREDICATE"));
+		tableColumn.setWidth(200);
+		tableColumn.setResizable(true);
+
+		// value Column
+		tableColumn = new TableColumn(m_columnTable, SWT.LEFT);
+		tableColumn.setText(resource.queryString("_UI_TEXT_VALUE"));
+		columnNames.add(resource.queryString("_UI_TEXT_VALUE"));
+		tableColumn.setWidth(390);
+		tableColumn.setResizable(true);
+
+		// predicate combo box
+		ComboBoxCellEditor predicateEditor = new ComboBoxCellEditor(
+				m_columnTable, predicatesArray, SWT.READ_ONLY);
+		editors.add(predicateEditor);
+		TextCellEditor valueEditor = new TextCellEditor(m_columnTable);
+		editors.add(valueEditor);
+
+		// table viewer
+		m_columnTableViewer = new TableViewer(m_columnTable);
+		m_columnTableViewer.setColumnProperties((String[]) columnNames
+				.toArray(new String[columnNames.size()]));
+		m_columnTableViewer.setCellEditors((CellEditor[]) editors
+				.toArray(new CellEditor[editors.size()]));
+		m_columnTableViewer.setLabelProvider(new ColumnLabelProvider(this));
+		
+		if(page.hideSelectionOption){
+			m_columnTableViewer.setContentProvider(new ColumnContentProvider(
+					connFilter));
+		}
+		
+		m_columnTableViewer.setCellModifier(new ColumnCellModifier(this));
+		cursor = new CommonTableCursor(m_columnTableViewer);
+	}
+
+	// Gets the predicate of the first row (for migration purpose only)
+	protected String getPredicate() {
+		return getOperators()[0];
+	}
+
+	// Gets the value of the first row (for migration purpose only)
+	protected String getValue() {
+		return getValues()[0];
+	}
+	
+	//Use for Translated Column Name String
+	public String getFirstColumnName() {
+		return firstColumnName;
+	}
+
+	//Use for Translated Column Name String
+	public void setFirstColumnName(String firstColumnName) {
+		this.firstColumnName = firstColumnName;
+	}
+
+	protected boolean hasEmptyExpression() {
+		boolean isEmptyExpression = false;
+		String[] values = getValues();
+
+		for (int i = 0; i < values.length; i++) {
+
+			if (values[i].length() == 0) {
+				isEmptyExpression = true;
+				i = values.length + 1;
+			}
+		}
+		return isEmptyExpression;
+	}
+
+	protected boolean hasQuoteInExpression() {
+		boolean isQuoteInExpression = false;
+		String[] values = getValues();
+
+		for (int i = 0; i < values.length; i++) {
+
+			if ((values[i].indexOf("'") > -1) || (values[i].indexOf('"') > -1)) {
+				isQuoteInExpression = true;
+				i = values.length + 1;
+			}
+		}
+		return isQuoteInExpression;
+	}
+
+	public void enableTableSpecificationControls(boolean isEnabled) {
+
+		if (isEnabled) {
+			m_newColumnToolItem.setEnabled(true);
+			andRadioButton.setEnabled(true);
+			orRadioButton.setEnabled(true);
+			m_columnTable.setEnabled(true);
+		} else {
+			m_newColumnToolItem.setEnabled(false);
+			m_deleteColumnToolItem.setEnabled(false);
+			andRadioButton.setEnabled(false);
+			orRadioButton.setEnabled(false);
+			m_columnTable.setEnabled(false);
+		}
+	}
+
+	private void clearTable(){
+		m_columnTable.removeAll();
+		predicate = new Predicate(1, "");
+		m_columnTableViewer.add(predicate);
+	}
+	protected void initializeValues(boolean isExpressionRadioButtonSelected) {
+
+		if(!isExpressionRadioButtonSelected){
+			clearTable();
+		}
+		else{
+			predicates = connFilter.getPredicatesCollection();
+	
+			if (predicates.size() > 0)
+				predicate = (Predicate) predicates.get(0);
+	
+			if (connFilter.getPredicatesCollection().size() == 0
+					|| predicate.getOperator() == SELECTION_OPERATOR) {
+				clearTable();
+			} else {
+	
+				for (int i = 0; i < predicates.size(); i++) {
+					predicate = (Predicate) predicates.get(i);
+					m_columnTableViewer.add(predicate);
+				}
+			}
+		}
+		updateDeleteButtonState();
+	}
+
+	private void updateDeleteButtonState() {
+
+		if (m_columnTable.getItemCount() > 1)
+			m_deleteColumnToolItem.setEnabled(true);
+		else
+			m_deleteColumnToolItem.setEnabled(false);
+	}
+
+	protected String getSQLOperator(int operator) {
+		String SQLOperator = null;
+
+		if (operator == STARTS_WITH_OPERATOR)
+			SQLOperator = STARTS_WITH_TEXT;
+		else if (operator == CONTAINS_OPERATOR)
+			SQLOperator = CONTAINS_TEXT;
+		else if (operator == ENDS_WITH_OPERATOR)
+			SQLOperator = ENDS_WITH_TEXT;
+		else if (operator == NOT_START_WITH_OPERATOR)
+			SQLOperator = NOT_START_WITH_TEXT;
+		else if (operator == NOT_CONTAIN_OPERATOR)
+			SQLOperator = NOT_CONTAIN_TEXT;
+		else if (operator == NOT_END_WITH_OPERATOR)
+			SQLOperator = NOT_END_WITH_TEXT;
+
+		return SQLOperator;
+	}
+
+	protected String[] getOperators() {
+		TableItem[] tableItems = m_columnTable.getItems();
+		String[] operators = new String[tableItems.length];
+
+		for (int i = 0; i < operators.length; i++) {
+			operators[i] = tableItems[i].getText(0);
+		}
+
+		return operators;
+	}
+
+	protected String[] getValues() {
+		TableItem[] tableItems = m_columnTable.getItems();
+		String[] values = new String[tableItems.length];
+
+		for (int i = 0; i < values.length; i++) {
+			values[i] = tableItems[i].getText(1);
+		}
+
+		return values;
+	}
+
+	protected void updatePredicate(Predicate predicate) {
+		m_columnTableViewer.update(predicate, null);
+		page.setPageValidity();
+	}
+	
+	protected void performDefaults(){
+		connFilter.setPredicate("");
+		initializeValues(true);
+	}
+	
+	protected boolean isAnded(){
+		return isAnded;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/CommonTableCursor.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/CommonTableCursor.java
new file mode 100644
index 0000000..487242d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/CommonTableCursor.java
@@ -0,0 +1,232 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2008 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter;
+
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.ICellEditorListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TextCellEditor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.TableCursor;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.TraverseEvent;
+import org.eclipse.swt.events.TraverseListener;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.Text;
+
+public class CommonTableCursor extends TableCursor {
+    
+	protected TableViewer tableViewer;
+	
+	public CommonTableCursor(TableViewer tableViewer) {
+		super(tableViewer.getTable(), SWT.NONE);
+		this.tableViewer = tableViewer;
+		setBackground(Display.getDefault().getSystemColor(SWT.COLOR_LIST_SELECTION));
+		setForeground(Display.getDefault().getSystemColor(SWT.COLOR_LIST_SELECTION_TEXT));
+		
+		registerCellEditorsListener();
+		registerKeyListener();
+		registerMouseListener();
+		registerTraverseListener();
+		
+		addListeners();
+	}
+
+    protected void registerTraverseListener() {
+		addTraverseListener(new TraverseListener() {
+            public void keyTraversed(TraverseEvent e) {
+                handleTraverse(e);
+                
+            }
+		});     
+    }
+	
+    protected void registerMouseListener() {
+		addMouseListener(new MouseListener() {
+            public void mouseDoubleClick(MouseEvent e) {
+            }
+            public void mouseDown(MouseEvent e) {
+                if (e.button==1)
+                    edit();
+            }
+            public void mouseUp(MouseEvent e) {
+            }
+		});
+    }
+
+    protected void registerKeyListener() {
+		addKeyListener(new KeyListener() {
+			public void keyPressed(KeyEvent e) {
+				if(e.character!='\0' && e.character!=SWT.CR && e.character!=SWT.LF &&
+				        e.character!=SWT.BS && e.character!=SWT.DEL && e.character!=SWT.TAB &&
+				        e.character!=SWT.ESC
+				    && (e.stateMask==0 || e.stateMask==SWT.SHIFT)){
+					
+					edit();
+					
+					CellEditor editor = tableViewer.getCellEditors()[getColumn()];
+					if (editor instanceof TextCellEditor) {
+						editor.setValue(String.valueOf(e.character));
+						((Text)editor.getControl()).setSelection(1);
+					}
+//					else {
+//					    int temp;
+//					    temp = 0;
+//					}
+				}
+                else if (e.keyCode == SWT.F2) {
+                    edit();
+                }
+			}
+			public void keyReleased(KeyEvent e) {
+			}
+		});	
+    }
+
+
+
+    protected void registerCellEditorsListener()
+	{
+		ICellEditorListener editorListener = new ICellEditorListener() {
+            public void applyEditorValue() {
+        		setVisible(true);
+           		redraw();
+            }
+            public void cancelEditor() {
+                setVisible(true);
+            }
+            public void editorValueChanged(boolean oldValidState, boolean newValidState) { 
+            }
+		};
+		
+		
+		CellEditor editors[] = tableViewer.getCellEditors();
+		if(editors == null) return;
+		for (int i=0; i<editors.length; ++i)
+		    if (editors[i]!=null)
+		        editors[i].addListener(editorListener);
+	}
+	
+	public void edit() {
+	    Object o = getRow().getData();
+		tableViewer.editElement(o, getColumn());
+	}
+	
+	protected void handleTraverse(TraverseEvent event)
+	{
+	    if (event.widget == this) {
+            return;
+        }
+	    int row = (getRow()==null) ? 0 : tableViewer.getTable().indexOf(getRow());
+		int col = getColumn();
+		
+		switch (event.detail) {
+		case SWT.TRAVERSE_TAB_PREVIOUS:		    
+		    if (col!=0)
+		        col--;
+		    else { 
+		        if (row!=0 ) {
+			        col=tableViewer.getTable().getColumnCount()-1;
+			        row--;
+		        } else {
+		            return;
+		        }
+		    }
+		    setSelection(row, col);
+			event.doit = false;
+			return;
+		case SWT.TRAVERSE_TAB_NEXT:
+		    if (col!=tableViewer.getTable().getColumnCount()-1)
+		        col++;
+		    else {
+		        if (row!=tableViewer.getTable().getItemCount()-1) {				            
+		            col=0;
+		            row++;
+		        } else {
+		            return;
+		        }
+		    }
+		    setSelection(row, col);
+		    event.doit = false;
+		    return;
+		}
+		    
+	}
+	
+	protected void addListeners() {
+		this.addSelectionListener(new SelectionAdapter() {
+            // when the TableEditor is over a cell, select the corresponding row in 
+            // the table
+            public void widgetSelected(SelectionEvent e) {
+                tableViewer.setSelection(new StructuredSelection(tableViewer.getElementAt(tableViewer.getTable().indexOf(getRow()))));
+            }
+            // when the user hits "ENTER" in the TableCursor, pop up a text editor so that 
+            // they can change the text of the cell
+            public void widgetDefaultSelected(SelectionEvent e) {
+                //TableItem row = cursor.getRow();
+                int column = getColumn();
+                IStructuredSelection selection= (IStructuredSelection) tableViewer.getSelection();
+                if (!selection.isEmpty()) {
+                    tableViewer.editElement(selection.getFirstElement(), column);
+                }
+            }
+        });
+
+        // Hide the TableCursor when the user hits the "CTRL" or "SHIFT" key.
+        // This alows the user to select multiple items in the table.
+        this.addKeyListener(new KeyAdapter() {
+            public void keyPressed(KeyEvent e) {
+                if (e.keyCode == SWT.CTRL
+                    || e.keyCode == SWT.SHIFT
+                    || (e.stateMask & SWT.CONTROL) != 0
+                    || (e.stateMask & SWT.SHIFT) != 0) {
+                    setVisible(false);
+                }
+            }
+        });
+        // Show the TableCursor when the user releases the "SHIFT" or "CTRL" key.
+        // This signals the end of the multiple selection task.
+        tableViewer.getTable().addKeyListener(new KeyAdapter() {
+            public void keyReleased(KeyEvent e) {
+                if (e.keyCode == SWT.CONTROL && (e.stateMask & SWT.SHIFT) != 0)
+                    return;
+                if (e.keyCode == SWT.SHIFT && (e.stateMask & SWT.CONTROL) != 0)
+                    return;
+                if (e.keyCode != SWT.CONTROL
+                    && (e.stateMask & SWT.CONTROL) != 0)
+                    return;
+                if (e.keyCode != SWT.SHIFT && (e.stateMask & SWT.SHIFT) != 0)
+                    return;
+
+                Table table = tableViewer.getTable();
+                TableItem[] selection = table.getSelection();
+                
+                if (table.getItemCount() > 0) {
+                    TableItem row = (selection.length == 0) ? table.getItem(table.getTopIndex()) : selection[0];
+                    table.showItem(row);
+                    setSelection(row, getColumn());
+                    setVisible(true);
+                    setFocus();
+                }
+            }
+        });
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/ConnectionFilterComposite.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/ConnectionFilterComposite.java
new file mode 100644
index 0000000..73bea2d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/ConnectionFilterComposite.java
@@ -0,0 +1,1021 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2008 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Vector;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentService;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.dialogs.DialogPage;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Cursor;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.Widget;
+
+import com.ibm.icu.text.Collator;
+
+public class ConnectionFilterComposite extends Composite implements Listener {
+
+	private static final ResourceLoader resource = ResourceLoader
+			.getResourceLoader();
+
+	protected ISelection selection;
+
+	private Button disableFilterCheckbox;
+
+	private Button expressionRadioButton;
+
+	private Button selectionRadioButton;
+
+	private Group expressionGroup;
+
+	private Group selectionGroup;
+
+	private Label expressionLabel;
+
+	private Combo expressionPredicate;
+
+	private Text expressionField;
+
+	private Combo selectionPredicate;
+
+	protected Table selectionTable;
+
+	private Button selectAllButton;
+
+	private Button deselectAllButton;
+
+	private String STARTS_WITH_TEXT;
+
+	private String CONTAINS_TEXT;
+
+	private String ENDS_WITH_TEXT;
+
+	private String NOT_START_WITH_TEXT;
+
+	private String NOT_CONTAIN_TEXT;
+
+	private String NOT_END_WITH_TEXT;
+
+	private String INCLUDE_ITEMS_TEXT;
+
+	private String EXCLUDE_ITEMS_TEXT;
+
+	private static String LIKE_PREDICATE_TEXT = "LIKE"; //$NON-NLS-1$
+
+	private static String IN_PREDICATE_TEXT = "IN"; //$NON-NLS-1$
+
+	private static String NOT_PREDICATE_TEXT = "NOT"; //$NON-NLS-1$
+
+	protected boolean isSelectionListPopulated = false;
+
+	private static String IDENTIFIER_DELIMITER = "'"; //$NON-NLS-1$
+
+	public String DEFAULT_MESSAGE = resource
+			.queryString("_UI_DESCRIPTION_FILTER"); //$NON-NLS-1$
+
+	private boolean hideExpressionOption = false;
+
+	private boolean hideSelectionOption = false;
+
+	private Collator collator = Collator.getInstance(Locale.getDefault());
+	
+	private IConnectionFilterProvider connectionFilterProvider;
+
+	private ColumnTable columnTable;
+	
+	private boolean isMultiplePredicatesMode = false;
+	
+	public ConnectionFilterComposite(Composite parent, int style, IConnectionFilterProvider connectionFilterProvider,
+			boolean hideExpressionOption, boolean hideSelectionOption) {
+		super(parent, style);
+		this.hideExpressionOption = hideExpressionOption;
+		this.hideSelectionOption = hideSelectionOption;
+		this.connectionFilterProvider = connectionFilterProvider;
+		
+		GridLayout layout = new GridLayout();
+		layout.numColumns = 1;
+		layout.verticalSpacing = 5;
+		this.setLayout(layout);
+		this.setLayoutData(new GridData(GridData.FILL_BOTH));
+		
+		GridData gd = null;
+
+		if (!hideExpressionOption) {
+			expressionRadioButton = new Button(this, SWT.RADIO);
+			expressionRadioButton.setText(resource
+					.queryString("_UI_RADIO_BUTTON_EXPRESSION")); //$NON-NLS-1$
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			expressionRadioButton.setLayoutData(gd);
+
+			expressionGroup = new Group(this, SWT.NONE);
+			layout = new GridLayout();
+			layout.numColumns = 3;
+			layout.verticalSpacing = 5;
+			expressionGroup.setLayout(layout);
+			gd = new GridData(GridData.GRAB_HORIZONTAL
+					| GridData.FILL_HORIZONTAL);
+			gd.verticalAlignment = GridData.BEGINNING;
+			expressionGroup.setLayoutData(gd);
+
+			expressionLabel = new Label(expressionGroup, SWT.NONE);
+			expressionLabel.setText(resource
+					.queryString("_UI_LABEL_EXPRESSION")); //$NON-NLS-1$
+			gd = new GridData();
+			expressionLabel.setLayoutData(gd);
+
+			expressionPredicate = new Combo(expressionGroup, SWT.READ_ONLY);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			expressionPredicate.setLayoutData(gd);
+			STARTS_WITH_TEXT = resource.queryString("_UI_COMBO_STARTS_WITH"); //$NON-NLS-1$
+			CONTAINS_TEXT = resource.queryString("_UI_COMBO_CONTAINS"); //$NON-NLS-1$
+			ENDS_WITH_TEXT = resource.queryString("_UI_COMBO_ENDS_WITH"); //$NON-NLS-1$
+			NOT_START_WITH_TEXT = resource
+					.queryString("_UI_COMBO_NOT_START_WITH"); //$NON-NLS-1$;
+			NOT_CONTAIN_TEXT = resource.queryString("_UI_COMBO_NOT_CONTAIN"); //$NON-NLS-1$;
+			NOT_END_WITH_TEXT = resource.queryString("_UI_COMBO_NOT_END_WITH"); //$NON-NLS-1$;
+
+			expressionPredicate.add(STARTS_WITH_TEXT);
+			expressionPredicate.add(CONTAINS_TEXT);
+			expressionPredicate.add(ENDS_WITH_TEXT);
+			expressionPredicate.add(NOT_START_WITH_TEXT);
+			expressionPredicate.add(NOT_CONTAIN_TEXT);
+			expressionPredicate.add(NOT_END_WITH_TEXT);
+
+			expressionField = new Text(expressionGroup, SWT.BORDER);
+			gd = new GridData(GridData.FILL_HORIZONTAL);
+			expressionField.setLayoutData(gd);
+		}
+
+		if (!hideSelectionOption) {
+			selectionRadioButton = new Button(this, SWT.RADIO);
+			selectionRadioButton.setText(resource
+					.queryString("_UI_RADIO_BUTTON_SELECTION")); //$NON-NLS-1$
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			selectionRadioButton.setLayoutData(gd);
+
+			selectionGroup = new Group(this, SWT.NONE);
+			layout = new GridLayout();
+			layout.numColumns = 2;
+			layout.verticalSpacing = 5;
+			selectionGroup.setLayout(layout);
+			gd = new GridData(GridData.FILL_BOTH | GridData.GRAB_VERTICAL);
+			selectionGroup.setLayoutData(gd);
+
+			selectionPredicate = new Combo(selectionGroup, SWT.READ_ONLY);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 2;
+			selectionPredicate.setLayoutData(gd);
+			INCLUDE_ITEMS_TEXT = resource
+					.queryString("_UI_COMBO_INCLUDE_ITEMS"); //$NON-NLS-1$
+			EXCLUDE_ITEMS_TEXT = resource
+					.queryString("_UI_COMBO_EXCLUDE_ITEMS"); //$NON-NLS-1$
+			selectionPredicate.add(INCLUDE_ITEMS_TEXT);
+			selectionPredicate.add(EXCLUDE_ITEMS_TEXT);
+
+			selectionTable = new Table(selectionGroup, SWT.CHECK | SWT.BORDER);
+			gd = new GridData(GridData.FILL_BOTH);
+			gd.heightHint = 140;
+			selectionTable.setLayoutData(gd);
+
+			Composite buttonComposite = new Composite(selectionGroup, SWT.NONE);
+			layout = new GridLayout();
+			layout.numColumns = 1;
+			layout.verticalSpacing = 5;
+			buttonComposite.setLayout(layout);
+			buttonComposite.setLayoutData(new GridData(GridData.FILL_VERTICAL
+					| GridData.VERTICAL_ALIGN_BEGINNING));
+
+			selectAllButton = new Button(buttonComposite, SWT.NONE);
+			selectAllButton.setText(resource
+					.queryString("_UI_BUTTON_SELECT_ALL")); //$NON-NLS-1$
+			selectAllButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL
+					| GridData.VERTICAL_ALIGN_BEGINNING));
+
+			deselectAllButton = new Button(buttonComposite, SWT.NONE);
+			deselectAllButton.setText(resource
+					.queryString("_UI_BUTTON_DESELECT_ALL")); //$NON-NLS-1$
+			deselectAllButton.setLayoutData(new GridData(
+					GridData.FILL_HORIZONTAL
+							| GridData.VERTICAL_ALIGN_BEGINNING));
+		}
+
+		disableFilterCheckbox = new Button(this, SWT.CHECK);
+		disableFilterCheckbox.setText(resource
+				.queryString("_UI_CHECKBOX_DISABLE_FILTER")); //$NON-NLS-1$
+		gd = new GridData();
+		gd.verticalAlignment = GridData.BEGINNING;
+		disableFilterCheckbox.setLayoutData(gd);
+
+		disableFilterCheckbox.addListener(SWT.Selection, this);
+		if (!hideExpressionOption) {
+			expressionRadioButton.addListener(SWT.Selection, this);
+			if (!hideSelectionOption)
+				selectionRadioButton.addListener(SWT.Selection, this);
+			expressionField.addListener(SWT.Modify, this);
+		}
+		if (!hideSelectionOption) {
+			selectionTable.addListener(SWT.Selection, this);
+			selectionPredicate.addListener(SWT.Selection, this);
+			selectAllButton.addListener(SWT.Selection, this);
+			deselectAllButton.addListener(SWT.Selection, this);
+		}
+
+		disableFilterCheckbox.setSelection(false);
+		if (!hideExpressionOption) {
+			expressionRadioButton.setSelection(true);
+			expressionPredicate.select(expressionPredicate
+					.indexOf(STARTS_WITH_TEXT));
+			if (!hideSelectionOption) {
+				selectionPredicate.select(selectionPredicate
+						.indexOf(INCLUDE_ITEMS_TEXT));
+				enableSelectionGroupControls(false);
+			}
+		} else if (!hideSelectionOption) {
+			selectionPredicate.select(selectionPredicate
+					.indexOf(INCLUDE_ITEMS_TEXT));
+		}
+	}
+	
+	public ConnectionFilterComposite(Composite parent, int style, IConnectionFilterProvider connectionFilterProvider,
+			boolean hideExpressionOption, boolean hideSelectionOption, boolean isMultiplePredicatesMode, ConnectionFilter connFilter, ConnectionFilterPropertyPage connectionFilterPropertyPage) {
+		super(parent, style);
+		
+		this.hideExpressionOption = hideExpressionOption;
+		this.hideSelectionOption = hideSelectionOption;
+		this.connectionFilterProvider = connectionFilterProvider;
+		this.isMultiplePredicatesMode = isMultiplePredicatesMode;
+		
+		GridLayout layout = new GridLayout();
+		layout.numColumns = 1;
+		layout.verticalSpacing = 5;
+		this.setLayout(layout);
+		this.setLayoutData(new GridData(GridData.FILL_BOTH));
+		
+		GridData gd = null;
+
+		if (!hideExpressionOption) {
+			expressionRadioButton = new Button(this, SWT.RADIO);
+			expressionRadioButton.setText(resource
+					.queryString("_UI_RADIO_BUTTON_EXPRESSION")); //$NON-NLS-1$
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			expressionRadioButton.setLayoutData(gd);
+
+			expressionGroup = new Group(this, SWT.NONE);
+			layout = new GridLayout();
+			layout.numColumns = 3;
+			layout.verticalSpacing = 5;
+			expressionGroup.setLayout(layout);
+			gd = new GridData(GridData.GRAB_HORIZONTAL
+					| GridData.FILL_HORIZONTAL);
+			gd.verticalAlignment = GridData.BEGINNING;
+			expressionGroup.setLayoutData(gd);
+
+			columnTable = new ColumnTable(expressionGroup, connectionFilterPropertyPage, connFilter);
+			
+			STARTS_WITH_TEXT = resource.queryString("_UI_COMBO_STARTS_WITH"); //$NON-NLS-1$
+			CONTAINS_TEXT = resource.queryString("_UI_COMBO_CONTAINS"); //$NON-NLS-1$
+			ENDS_WITH_TEXT = resource.queryString("_UI_COMBO_ENDS_WITH"); //$NON-NLS-1$
+			NOT_START_WITH_TEXT = resource
+					.queryString("_UI_COMBO_NOT_START_WITH"); //$NON-NLS-1$;
+			NOT_CONTAIN_TEXT = resource.queryString("_UI_COMBO_NOT_CONTAIN"); //$NON-NLS-1$;
+			NOT_END_WITH_TEXT = resource.queryString("_UI_COMBO_NOT_END_WITH"); //$NON-NLS-1$;
+		}
+
+		if (!hideSelectionOption) {
+			selectionRadioButton = new Button(this, SWT.RADIO);
+			selectionRadioButton.setText(resource
+					.queryString("_UI_RADIO_BUTTON_SELECTION")); //$NON-NLS-1$
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			selectionRadioButton.setLayoutData(gd);
+
+			selectionGroup = new Group(this, SWT.NONE);
+			layout = new GridLayout();
+			layout.numColumns = 2;
+			layout.verticalSpacing = 5;
+			selectionGroup.setLayout(layout);
+			gd = new GridData(GridData.FILL_BOTH | GridData.GRAB_VERTICAL);
+			selectionGroup.setLayoutData(gd);
+
+			selectionPredicate = new Combo(selectionGroup, SWT.READ_ONLY);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 2;
+			selectionPredicate.setLayoutData(gd);
+			INCLUDE_ITEMS_TEXT = resource
+					.queryString("_UI_COMBO_INCLUDE_ITEMS"); //$NON-NLS-1$
+			EXCLUDE_ITEMS_TEXT = resource
+					.queryString("_UI_COMBO_EXCLUDE_ITEMS"); //$NON-NLS-1$
+			selectionPredicate.add(INCLUDE_ITEMS_TEXT);
+			selectionPredicate.add(EXCLUDE_ITEMS_TEXT);
+
+			selectionTable = new Table(selectionGroup, SWT.CHECK | SWT.BORDER);
+			gd = new GridData(GridData.FILL_BOTH);
+			gd.heightHint = 140;
+			selectionTable.setLayoutData(gd);
+
+			Composite buttonComposite = new Composite(selectionGroup, SWT.NONE);
+			layout = new GridLayout();
+			layout.numColumns = 1;
+			layout.verticalSpacing = 5;
+			buttonComposite.setLayout(layout);
+			buttonComposite.setLayoutData(new GridData(GridData.FILL_VERTICAL
+					| GridData.VERTICAL_ALIGN_BEGINNING));
+
+			selectAllButton = new Button(buttonComposite, SWT.NONE);
+			selectAllButton.setText(resource
+					.queryString("_UI_BUTTON_SELECT_ALL")); //$NON-NLS-1$
+			selectAllButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL
+					| GridData.VERTICAL_ALIGN_BEGINNING));
+
+			deselectAllButton = new Button(buttonComposite, SWT.NONE);
+			deselectAllButton.setText(resource
+					.queryString("_UI_BUTTON_DESELECT_ALL")); //$NON-NLS-1$
+			deselectAllButton.setLayoutData(new GridData(
+					GridData.FILL_HORIZONTAL
+							| GridData.VERTICAL_ALIGN_BEGINNING));
+		}
+
+		disableFilterCheckbox = new Button(this, SWT.CHECK);
+		disableFilterCheckbox.setText(resource
+				.queryString("_UI_CHECKBOX_DISABLE_FILTER")); //$NON-NLS-1$
+		gd = new GridData();
+		gd.verticalAlignment = GridData.BEGINNING;
+		disableFilterCheckbox.setLayoutData(gd);
+
+		disableFilterCheckbox.addListener(SWT.Selection, this);
+		if (!hideExpressionOption) {
+			expressionRadioButton.addListener(SWT.Selection, this);
+			if (!hideSelectionOption)
+				selectionRadioButton.addListener(SWT.Selection, this);
+		}
+		if (!hideSelectionOption) {
+			selectionTable.addListener(SWT.Selection, this);
+			selectionPredicate.addListener(SWT.Selection, this);
+			selectAllButton.addListener(SWT.Selection, this);
+			deselectAllButton.addListener(SWT.Selection, this);
+		}
+
+		disableFilterCheckbox.setSelection(false);
+		if (!hideExpressionOption) {
+			expressionRadioButton.setSelection(true);
+			
+			if (!hideSelectionOption) {
+				selectionPredicate.select(selectionPredicate
+						.indexOf(INCLUDE_ITEMS_TEXT));
+				enableSelectionGroupControls(false);
+			}
+		} else if (!hideSelectionOption) {
+			selectionPredicate.select(selectionPredicate
+					.indexOf(INCLUDE_ITEMS_TEXT));
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
+	 */
+	public void handleEvent(Event event) {
+		Widget source = event.widget;
+		if (source == disableFilterCheckbox) {
+			enableFilterSpecificationControls(!disableFilterCheckbox
+					.getSelection());
+		} else if (source == expressionRadioButton) {
+			enableFilterSpecificationControls(true);
+		} else if (source == selectAllButton) {
+			setAllTableItemsChecked(true);
+		} else if (source == deselectAllButton) {
+			setAllTableItemsChecked(false);
+		}
+		connectionFilterProvider.dataChanged();
+	}
+
+	private void setAllTableItemsChecked(boolean checked) {
+		TableItem[] tableItems = selectionTable.getItems();
+		int tableItemCount = tableItems.length;
+		for (int index = 0; index < tableItemCount; index++) {
+			tableItems[index].setChecked(checked);
+		}
+	}
+
+	private void enableExpressionGroupControls(boolean isEnabled) {
+		if (!hideExpressionOption) {
+
+			if (!isMultiplePredicatesMode) {
+				expressionGroup.setEnabled(isEnabled);
+				expressionLabel.setEnabled(isEnabled);
+				expressionPredicate.setEnabled(isEnabled);
+				expressionField.setEnabled(isEnabled);
+			} else {
+				expressionGroup.setEnabled(isEnabled);
+			}
+		}
+	}
+
+	private void enableSelectionGroupControls(boolean isEnabled) {
+		if (!hideSelectionOption) {
+			selectionGroup.setEnabled(isEnabled);
+			selectionPredicate.setEnabled(isEnabled);
+			selectionTable.setEnabled(isEnabled);
+			selectAllButton.setEnabled(isEnabled);
+			deselectAllButton.setEnabled(isEnabled);
+			TableItem[] tableItems = selectionTable.getItems();
+			int tableItemCount = tableItems.length;
+			for (int index = 0; index < tableItemCount; index++) {
+				tableItems[index].setGrayed(!isEnabled);
+			}
+			if (isEnabled && !isSelectionListPopulated) {
+				populateSelectionTableWithBusyCursor();
+			}
+		}
+	}
+
+	private void enableFilterSpecificationControls(boolean isEnabled) {
+		if (!hideExpressionOption) {
+			if (!isMultiplePredicatesMode) {
+				if (isEnabled) {
+					expressionRadioButton.setEnabled(true);
+					if (!hideSelectionOption)
+						selectionRadioButton.setEnabled(true);
+					if (expressionRadioButton.getSelection()) {
+						enableSelectionGroupControls(false);
+						enableExpressionGroupControls(true);
+					} else {
+						enableExpressionGroupControls(false);
+						enableSelectionGroupControls(true);
+					}
+				} else {
+					enableExpressionGroupControls(false);
+					enableSelectionGroupControls(false);
+					expressionRadioButton.setEnabled(false);
+					if (!hideSelectionOption)
+						selectionRadioButton.setEnabled(false);
+				}
+			}else { // Added for the new mode
+				if (isEnabled) {
+					expressionRadioButton.setEnabled(true);
+					selectionRadioButton.setEnabled(true);
+					
+					if (expressionRadioButton.getSelection()) {
+						enableSelectionGroupControls(false);
+						enableExpressionGroupControls(true);
+						columnTable.enableTableSpecificationControls(true);
+					} else {
+						enableExpressionGroupControls(false);
+						columnTable.enableTableSpecificationControls(false);
+						enableSelectionGroupControls(true);
+					}
+				} else {
+					enableExpressionGroupControls(false);
+					enableSelectionGroupControls(false);
+					expressionRadioButton.setEnabled(false);
+					columnTable.enableTableSpecificationControls(false);
+					selectionRadioButton.setEnabled(false);
+				}
+			}
+		} else {
+			enableSelectionGroupControls(isEnabled);
+		}
+	}
+
+	public void initializeValues() {
+		isSelectionListPopulated = false;
+		if (!hideSelectionOption)
+			selectionTable.removeAll();
+
+		ConnectionFilter connFilter = connectionFilterProvider.getConnectionFilter();
+
+		if (connFilter != null) {
+			disableFilterCheckbox.setSelection(false);
+			String predicate = connFilter.getPredicate();
+			
+			if (!hideExpressionOption && isPredicateAnExpression(predicate)) {
+				
+				expressionRadioButton.setSelection(true);
+				if (!hideSelectionOption)
+					selectionRadioButton.setSelection(false);
+				
+				if(!isMultiplePredicatesMode){
+					expressionPredicate.select(expressionPredicate
+							.indexOf(findExpressionPredicate(predicate)));
+					expressionField.setText(findExpressionValue(predicate));
+				}
+				else
+					columnTable.initializeValues(true);
+
+				enableFilterSpecificationControls(true);
+			} else {
+				if (!hideExpressionOption) {
+					if (!hideSelectionOption)
+						selectionRadioButton.setSelection(true);
+					expressionRadioButton.setSelection(false);
+					
+					if (isMultiplePredicatesMode){
+						columnTable.initializeValues(false);
+					}
+				}
+				if (!hideSelectionOption) {
+					if (isPredicateNegated(predicate)) {
+						selectionPredicate.select(selectionPredicate
+								.indexOf(EXCLUDE_ITEMS_TEXT));
+					}
+					populateSelectionTableWithBusyCursor();
+					selectSelectionFilterItems(findSelectionFilterItems(predicate));
+				}
+				enableFilterSpecificationControls(true);
+			}
+		} else {
+			disableFilterCheckbox.setSelection(true);
+			enableFilterSpecificationControls(false);
+			
+			if(isMultiplePredicatesMode)
+				columnTable.initializeValues(false);
+		}
+	}
+
+	private String[] findSelectionFilterItems(String filterPredicate) {
+		String[] filterItems = {};
+		if (filterPredicate != null) {
+			String[] predicateSubStrings = filterPredicate
+					.split(IDENTIFIER_DELIMITER);
+			// Remove first and last items from array
+			int predicateSubStringsCount = predicateSubStrings.length;
+			Vector filterItemCollection = new Vector();
+			for (int index = 1; index < (predicateSubStringsCount - 1); index++) {
+				filterItemCollection.add(predicateSubStrings[index]);
+			}
+			filterItems = new String[filterItemCollection.size()];
+			filterItemCollection.copyInto(filterItems);
+		}
+		return filterItems;
+	}
+
+	private void selectSelectionFilterItems(String[] filterItems) {
+		TableItem[] tableItems = selectionTable.getItems();
+		Hashtable tableItemsCollection = new Hashtable();
+		int tableItemsCount = tableItems.length;
+		for (int index = 0; index < tableItemsCount; index++) {
+			tableItemsCollection.put(tableItems[index].getText(),
+					tableItems[index]);
+		}
+		int filterItemsCount = filterItems.length;
+		for (int index = 0; index < filterItemsCount; index++) {
+			Object tableItem = tableItemsCollection.get(filterItems[index]);
+			if (tableItem != null) {
+				((TableItem) tableItem).setChecked(true);
+			}
+		}
+	}
+
+	private boolean isPredicateAnExpression(String filterPredicate) {
+		boolean isExpression = false;
+		if (filterPredicate != null
+				&& filterPredicate.split(IDENTIFIER_DELIMITER)[0]
+						.indexOf(LIKE_PREDICATE_TEXT) != -1) {
+			isExpression = true;
+		}
+		return isExpression;
+	}
+
+	private boolean isPredicateNegated(String filterPredicate) {
+		boolean isNegated = false;
+		if (filterPredicate != null
+				&& filterPredicate.split(IDENTIFIER_DELIMITER)[0]
+						.indexOf(NOT_PREDICATE_TEXT) != -1) {
+			isNegated = true;
+		}
+		return isNegated;
+	}
+
+	private String findExpressionValue(String filterPredicate) {
+		String expressionValue = filterPredicate.split(IDENTIFIER_DELIMITER)[1];
+		if (expressionValue.startsWith("%")) { //$NON-NLS-1$
+			expressionValue = expressionValue.substring(1);
+		}
+
+		if (expressionValue.endsWith("%")) { //$NON-NLS-1$
+			expressionValue = expressionValue.substring(0, (expressionValue
+					.length() - 1));
+		}
+
+		return expressionValue;
+	}
+
+	private String findExpressionPredicate(String filterPredicate) {
+		String expressionPredicate = CONTAINS_TEXT;
+		boolean isNotLike = false;
+		boolean startsWithPercentSign = false;
+		boolean endsWithPercentSign = false;
+		if (filterPredicate.startsWith(NOT_PREDICATE_TEXT)) {
+			isNotLike = true;
+		}
+		String expressionValue = filterPredicate.split(IDENTIFIER_DELIMITER)[1];
+		if (expressionValue.startsWith("%")) { //$NON-NLS-1$
+			startsWithPercentSign = true;
+		}
+
+		if (expressionValue.endsWith("%")) { //$NON-NLS-1$
+			endsWithPercentSign = true;
+		}
+
+		if (startsWithPercentSign && endsWithPercentSign) {
+			if (isNotLike) {
+				expressionPredicate = NOT_CONTAIN_TEXT;
+			} else {
+				expressionPredicate = CONTAINS_TEXT;
+			}
+		} else if (startsWithPercentSign) {
+			if (isNotLike) {
+				expressionPredicate = NOT_END_WITH_TEXT;
+			} else {
+				expressionPredicate = ENDS_WITH_TEXT;
+			}
+		} else if (endsWithPercentSign) {
+			if (isNotLike) {
+				expressionPredicate = NOT_START_WITH_TEXT;
+			} else {
+				expressionPredicate = STARTS_WITH_TEXT;
+			}
+		}
+		return expressionPredicate;
+	}
+
+	public boolean validatePage(DialogPage page) {
+		boolean isValid = true;
+		if (!disableFilterCheckbox.getSelection()) {
+			if (!hideExpressionOption && expressionRadioButton.getSelection()) {
+				
+				if (!isMultiplePredicatesMode) {
+					if (expressionField.getText().length() == 0) {
+						page.setMessage(resource
+								.queryString("_UI_MESSAGE_CRITERIA_REQUIRED")); //$NON-NLS-1$
+						page.setErrorMessage(null);
+						isValid = false;
+					} else if ((expressionField.getText().indexOf(
+							IDENTIFIER_DELIMITER) > -1)
+							|| (expressionField.getText().indexOf('"') > -1)) {
+						page.setErrorMessage(resource
+								.queryString("_UI_MESSAGE_NO_QUOTES")); //$NON-NLS-1$
+						page.setDescription(DEFAULT_MESSAGE);
+						isValid = false;
+					}
+				} else {
+					if (columnTable.hasEmptyExpression()) {
+						page.setMessage(resource
+								.queryString("_UI_MESSAGE_CRITERIA_REQUIRED")); //$NON-NLS-1$
+						page.setErrorMessage(null);
+						isValid = false;
+					} else if (columnTable.hasQuoteInExpression()) {
+						page.setErrorMessage(resource
+								.queryString("_UI_MESSAGE_NO_QUOTES")); //$NON-NLS-1$
+						page.setMessage(DEFAULT_MESSAGE);
+						isValid = false;
+					}
+				}
+			} else if (!hideSelectionOption) {
+				TableItem[] items = selectionTable.getItems();
+				int itemCount = items.length;
+				boolean isItemSelected = false;
+				for (int index = 0; index < itemCount; index++) {
+					if (items[index].getChecked()) {
+						isItemSelected = true;
+						break;
+					}
+				}
+				if (!isItemSelected) {
+					page.setMessage(resource
+							.queryString("_UI_MESSAGE_SELECTION_REQUIRED")); //$NON-NLS-1$
+					page.setErrorMessage(null);
+					isValid = false;
+				}
+			}
+		}
+		if (isValid) {
+			page.setMessage(DEFAULT_MESSAGE);
+			page.setErrorMessage(null);
+		}
+		return isValid;
+	}
+
+	public String getPredicate() {
+		String predicate = ""; //$NON-NLS-1$
+		if (isFilterSpecified()) {
+			if (!hideExpressionOption && expressionRadioButton.getSelection()) {
+				String selectedPredicate = expressionPredicate
+						.getItem(expressionPredicate.getSelectionIndex());
+				String cleanedString = expressionField.getText().trim();
+				if (selectedPredicate.equals(STARTS_WITH_TEXT)) {
+					predicate = LIKE_PREDICATE_TEXT + " " //$NON-NLS-1$
+							+ IDENTIFIER_DELIMITER + cleanedString + "%" //$NON-NLS-1$
+							+ IDENTIFIER_DELIMITER;
+				} else if (selectedPredicate.equals(NOT_START_WITH_TEXT)) {
+					predicate = NOT_PREDICATE_TEXT + " " //$NON-NLS-1$
+							+ LIKE_PREDICATE_TEXT + " " //$NON-NLS-1$
+							+ IDENTIFIER_DELIMITER + cleanedString + "%" //$NON-NLS-1$
+							+ IDENTIFIER_DELIMITER;
+				} else if (selectedPredicate.equals(CONTAINS_TEXT)) {
+					predicate = LIKE_PREDICATE_TEXT + " " //$NON-NLS-1$
+							+ IDENTIFIER_DELIMITER + "%" + cleanedString + "%" //$NON-NLS-1$ //$NON-NLS-2$
+							+ IDENTIFIER_DELIMITER;
+				} else if (selectedPredicate.equals(NOT_CONTAIN_TEXT)) {
+					predicate = NOT_PREDICATE_TEXT + " " //$NON-NLS-1$
+							+ LIKE_PREDICATE_TEXT + " " //$NON-NLS-1$
+							+ IDENTIFIER_DELIMITER + "%" + cleanedString + "%" //$NON-NLS-1$ //$NON-NLS-2$
+							+ IDENTIFIER_DELIMITER;
+				} else if (selectedPredicate.equals(ENDS_WITH_TEXT)) {
+					predicate = LIKE_PREDICATE_TEXT + " " //$NON-NLS-1$
+							+ IDENTIFIER_DELIMITER + "%" + cleanedString //$NON-NLS-1$
+							+ IDENTIFIER_DELIMITER;
+				} else if (selectedPredicate.equals(NOT_END_WITH_TEXT)) {
+					predicate = NOT_PREDICATE_TEXT + " " //$NON-NLS-1$
+							+ LIKE_PREDICATE_TEXT + " " //$NON-NLS-1$
+							+ IDENTIFIER_DELIMITER + "%" + cleanedString //$NON-NLS-1$
+							+ IDENTIFIER_DELIMITER;
+				}
+			} else if (!hideSelectionOption) {
+				String itemList = ""; //$NON-NLS-1$
+
+				// Generate Item list
+				TableItem[] items = selectionTable.getItems();
+				Vector selectedItemsCollection = new Vector();
+				int itemCount = items.length;
+				for (int index = 0; index < itemCount; index++) {
+					if (items[index].getChecked()) {
+						selectedItemsCollection.add(items[index]);
+					}
+				}
+				TableItem[] selectedItems = new TableItem[selectedItemsCollection
+						.size()];
+				selectedItemsCollection.copyInto(selectedItems);
+				int selectedItemCount = selectedItems.length;
+				if (selectedItemCount > 0) {
+					itemList = itemList + IDENTIFIER_DELIMITER
+							+ selectedItems[0].getText() + IDENTIFIER_DELIMITER;
+					for (int index = 1; index < selectedItemCount; index++) {
+						itemList = itemList + ", " + IDENTIFIER_DELIMITER //$NON-NLS-1$
+								+ selectedItems[index].getText()
+								+ IDENTIFIER_DELIMITER;
+					}
+					predicate = IN_PREDICATE_TEXT + "(" + itemList + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+					if (selectionPredicate.getItem(
+							selectionPredicate.getSelectionIndex()).equals(
+							EXCLUDE_ITEMS_TEXT)) {
+						predicate = NOT_PREDICATE_TEXT + " " + predicate; //$NON-NLS-1$
+					}
+				}
+			}
+		}
+		return predicate;
+	}
+	
+	public String getPredicates() {
+		
+		String predicates = "";
+		
+		if (isFilterSpecified()) {
+
+			if (!hideExpressionOption && expressionRadioButton.getSelection()) {
+				String[] operators = columnTable.getOperators();
+				String[] values = columnTable.getValues();
+				String condition = null;
+				String SQLPredicate = "";
+				
+				if(columnTable.isAnded())
+					condition = "AND";
+				else
+					condition = "OR";
+				
+				for (int i = 0; i < operators.length; i++) {
+
+					if (operators[i].equals(STARTS_WITH_TEXT)) {
+						SQLPredicate = LIKE_PREDICATE_TEXT + " " //$NON-NLS-1$
+								+ IDENTIFIER_DELIMITER + values[i] + "%" //$NON-NLS-1$
+								+ IDENTIFIER_DELIMITER;
+
+					} else if (operators[i].equals(NOT_START_WITH_TEXT)) {
+						SQLPredicate = NOT_PREDICATE_TEXT + " " //$NON-NLS-1$
+								+ LIKE_PREDICATE_TEXT + " " //$NON-NLS-1$
+								+ IDENTIFIER_DELIMITER + values[i] + "%" //$NON-NLS-1$
+								+ IDENTIFIER_DELIMITER;
+
+					} else if (operators[i].equals(CONTAINS_TEXT)) {
+						SQLPredicate = LIKE_PREDICATE_TEXT + " " //$NON-NLS-1$
+								+ IDENTIFIER_DELIMITER + "%" + values[i] + "%" //$NON-NLS-1$ //$NON-NLS-2$
+								+ IDENTIFIER_DELIMITER;
+
+					} else if (operators[i].equals(NOT_CONTAIN_TEXT)) {
+						SQLPredicate = NOT_PREDICATE_TEXT + " " //$NON-NLS-1$
+								+ LIKE_PREDICATE_TEXT + " " //$NON-NLS-1$
+								+ IDENTIFIER_DELIMITER + "%" + values[i] + "%" //$NON-NLS-1$ //$NON-NLS-2$
+								+ IDENTIFIER_DELIMITER;
+
+					} else if (operators[i].equals(ENDS_WITH_TEXT)) {
+						SQLPredicate = LIKE_PREDICATE_TEXT + " " //$NON-NLS-1$
+								+ IDENTIFIER_DELIMITER + "%" + values[i] //$NON-NLS-1$
+								+ IDENTIFIER_DELIMITER;
+
+					} else if (operators[i].equals(NOT_END_WITH_TEXT)) {
+						SQLPredicate = NOT_PREDICATE_TEXT + " " //$NON-NLS-1$
+								+ LIKE_PREDICATE_TEXT + " " //$NON-NLS-1$
+								+ IDENTIFIER_DELIMITER + "%" + values[i] //$NON-NLS-1$
+								+ IDENTIFIER_DELIMITER;
+					}
+					
+					if(operators.length == 1)
+						predicates = SQLPredicate;
+					else
+						predicates =  predicates + " {" + i + "} " + SQLPredicate;
+					
+					if ((i + 1) != operators.length)
+						predicates = predicates + " " + condition;
+				}
+
+			} else if (!hideSelectionOption) {
+				String itemList = ""; //$NON-NLS-1$
+
+				// Generate Item list
+				TableItem[] items = selectionTable.getItems();
+				Vector selectedItemsCollection = new Vector();
+				int itemCount = items.length;
+				for (int index = 0; index < itemCount; index++) {
+					if (items[index].getChecked()) {
+						selectedItemsCollection.add(items[index]);
+					}
+				}
+				TableItem[] selectedItems = new TableItem[selectedItemsCollection
+						.size()];
+				selectedItemsCollection.copyInto(selectedItems);
+				int selectedItemCount = selectedItems.length;
+				if (selectedItemCount > 0) {
+					itemList = itemList + IDENTIFIER_DELIMITER
+							+ selectedItems[0].getText() + IDENTIFIER_DELIMITER;
+					for (int index = 1; index < selectedItemCount; index++) {
+						itemList = itemList + ", " + IDENTIFIER_DELIMITER //$NON-NLS-1$
+								+ selectedItems[index].getText()
+								+ IDENTIFIER_DELIMITER;
+					}
+					
+					predicates = IN_PREDICATE_TEXT + "(" + itemList + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+					if (selectionPredicate.getItem(
+							selectionPredicate.getSelectionIndex()).equals(
+							EXCLUDE_ITEMS_TEXT)) {
+						predicates = NOT_PREDICATE_TEXT + " " + predicates; //$NON-NLS-1$
+					}
+				}
+			}
+		}
+		return predicates.trim();
+	}
+	
+	public boolean isFilterSpecified() {
+		return !disableFilterCheckbox.getSelection();
+	}
+
+	public boolean isIncludeSelected() {
+		if (selectionPredicate.getItem(selectionPredicate.getSelectionIndex())
+				.equals(INCLUDE_ITEMS_TEXT)) {
+			return true;
+		}
+		return false;
+	}
+
+	private EObject getParentEObject(Object current) {
+		while (!(current instanceof EObject)
+				&& (current = ((IVirtualNode) current).getParent()) != null)
+			;
+		return (EObject) current;
+	}
+
+	public void populateSelectionTable() {
+		populateSelectionTableWithBusyCursor();
+	}
+	
+	public void populateSelectionTable(Table selectionTable) {
+		if (selection != null) {
+			Object sel = ((StructuredSelection) selection).getFirstElement();
+			selectionTable.removeAll();
+			if (sel instanceof IVirtualNode) {
+				ContainmentService containmentService = RDBCorePlugin
+						.getDefault().getContainmentService();
+				EObject schema = (EObject) getParentEObject(sel);
+				Collection viewsCollection = containmentService
+						.getContainedDisplayableElements(schema,
+								((IVirtualNode) sel).getGroupID());
+				ArrayList viewsList = new ArrayList(viewsCollection);
+				Collections.sort(viewsList, new Comparator() {
+					public int compare(Object sqlObject1, Object sqlObject2) {
+						return collator
+								.getCollationKey(
+										((SQLObject) sqlObject1).getName())
+								.compareTo(
+										collator
+												.getCollationKey(((SQLObject) sqlObject2)
+														.getName()));
+					}
+				});
+				Iterator views = viewsList.iterator();
+				while (views.hasNext()) {
+					TableItem tableItem = new TableItem(selectionTable,
+							SWT.NONE);
+					tableItem.setText(((SQLObject) views.next()).getName());
+				}			
+			}
+		}
+	}
+	
+	private void populateSelectionTableWithBusyCursor() {
+		try {
+			Cursor waitCursor = new Cursor(this.getShell().getDisplay(),
+					SWT.CURSOR_WAIT);
+			this.getShell().setCursor(waitCursor);
+			connectionFilterProvider.populateSelectionTable(selectionTable);
+			isSelectionListPopulated = true;
+		} catch (Exception e) {
+			// Since populateSelectonTable() can be overridden by subclasses,
+			// we need to insulate this class from exceptions so that we don't
+			// have the cursor hung-up in the busy cursor.
+		} finally {
+			this.getShell().setCursor(null);
+		}
+	}
+	
+	public boolean isHideExpressionOption(){
+		return this.hideExpressionOption;
+	}
+	
+	public boolean isHideSelectionOption(){
+		return this.hideSelectionOption;
+	}
+	
+    public void performDefaults()
+    {
+        //Restore default values and settings
+        disableFilterCheckbox.setSelection(true);
+        
+        if(!isMultiplePredicatesMode)
+        {
+        	expressionField.setText("");
+        	expressionPredicate.select(0);
+        }
+        else
+        {
+        	columnTable.performDefaults();
+        }
+        
+        if (!hideSelectionOption) {
+        	selectionTable.removeAll();
+        	selectionPredicate.select(0);
+            selectionRadioButton.setSelection(false);
+        }
+        expressionRadioButton.setSelection(true);
+        enableFilterSpecificationControls(false);
+        isSelectionListPopulated = false;
+    }  
+    
+    public void setSelection(ISelection selection){
+    	this.selection = selection;
+    }
+    
+    public void setSelectionListPopulated(boolean isPopulated){
+        this.isSelectionListPopulated = isPopulated;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/ConnectionFilterPropertyPage.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/ConnectionFilterPropertyPage.java
new file mode 100644
index 0000000..9d9c473
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/ConnectionFilterPropertyPage.java
@@ -0,0 +1,293 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2008 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.helpers.FilterHelper;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilterImpl;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.ui.dialogs.PropertyPage;
+
+/**
+ * @author ledunnel
+ */
+public abstract class ConnectionFilterPropertyPage extends PropertyPage
+		implements IConnectionFilterProvider {
+
+	private static final ResourceLoader resource = ResourceLoader
+			.getResourceLoader();
+
+	protected ISelection selection;
+	
+	private Label descriptionLabel;
+
+	private String DEFAULT_MESSAGE = resource
+			.queryString("_UI_DESCRIPTION_FILTER"); //$NON-NLS-1$
+
+	private static final String SELECTION_ONLY_MESSAGE = resource
+			.queryString("_UI_DESCRIPTION_SELECTION_ONLY"); //$NON-NLS-1$
+	
+	private static final String EXPRESSION_ONLY_MESSAGE = resource
+		.queryString("_UI_DESCRIPTION_EXPRESSION_ONLY"); //$NON-NLS-1$
+	
+	protected String defaultTitleText = resource
+		.queryString("_UI_TITLE_FILTER_DIALOG"); //$NON-NLS-1$
+
+	private ConnectionFilterComposite filterComposite;
+	
+	boolean hideSelectionOption = false;
+	
+	private boolean isMultiplePredicatesMode = false;
+	
+	private ConnectionFilter connFilter;
+	
+	public ConnectionFilterPropertyPage() {
+		super();
+		setTitle(getDefaultPageTitle());
+	}
+
+	public void dataChanged() {
+		setValid(validatePage());
+	}
+	
+	public Table getSelectionTable(){
+	    return filterComposite.selectionTable;
+	}
+	    
+	public void setSelectionListPopulated( boolean populated){
+	    filterComposite.isSelectionListPopulated = populated;
+	}
+
+	protected Control createContents(Composite parent) {
+		return createContents(parent, false);
+	}
+
+	protected Control createContents(Composite parent, boolean hideExpressionOption) {
+		isMultiplePredicatesMode = FilterHelper.INSTANCE.supportsMultiplePredicatesMode(this.getElement());
+		
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridLayout layout = new GridLayout();
+		layout.numColumns = 1;
+		layout.verticalSpacing = 5;
+		composite.setLayout(layout);
+		composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+		GridData gd = null;
+
+		descriptionLabel = new Label(composite, SWT.WRAP);
+		descriptionLabel.setText(DEFAULT_MESSAGE);
+		gd = new GridData();
+		gd.verticalAlignment = GridData.BEGINNING;
+		gd.horizontalIndent = -5;
+		descriptionLabel.setLayoutData(gd);
+		
+		Label spacer = new Label ( composite, SWT.NONE);
+		spacer.setText(" ");
+		gd = new GridData();
+		gd.verticalAlignment = GridData.BEGINNING;
+		spacer.setLayoutData(gd);
+
+		if(!isMultiplePredicatesMode){
+			filterComposite = new ConnectionFilterComposite(composite, SWT.NONE, this, hideExpressionOption, hideSelectionOption);
+			filterComposite.initializeValues();
+		}
+		else {
+			connFilter = getConnectionFilter();
+			
+			if(connFilter == null)
+				connFilter = new ConnectionFilterImpl();
+			
+			filterComposite = new ConnectionFilterComposite(composite, SWT.NONE, this, hideExpressionOption, hideSelectionOption, isMultiplePredicatesMode, connFilter, this);
+			filterComposite.initializeValues();
+		}
+		
+		if (filterComposite.isHideExpressionOption()) {
+			DEFAULT_MESSAGE = SELECTION_ONLY_MESSAGE;
+			this.setDescription(DEFAULT_MESSAGE);
+		}
+		else if (filterComposite.isHideSelectionOption()) {
+			DEFAULT_MESSAGE = EXPRESSION_ONLY_MESSAGE;
+			this.setDescription(DEFAULT_MESSAGE);
+		}
+		else {
+			this.setDescription(DEFAULT_MESSAGE);
+		}
+		initializeDialogUnits(composite);
+		setValid(validatePage());
+		return composite;
+	}
+	
+	protected void setPageValidity() {
+		setValid(validatePage());
+	}
+	
+	protected boolean validatePage() {
+		boolean isValid = true;
+
+		if (filterComposite != null){
+			isValid = filterComposite.validatePage(this);
+		}
+		
+		if (isValid) {
+			this.setMessage(null);
+			this.setErrorMessage(null);
+			this.setDescription(DEFAULT_MESSAGE);
+			this.setTitle(getDefaultPageTitle());
+			this.setValid(isValid);
+		}
+		return isValid;
+	}
+
+	public String getPredicate() {
+		return filterComposite.getPredicate();
+	}
+	
+	public String getPredicates() {
+		return filterComposite.getPredicates();
+	}
+
+	public boolean isFilterSpecified() {
+		return filterComposite.isFilterSpecified();
+	}
+
+	public boolean isIncludeSelected() {
+		return filterComposite.isIncludeSelected();
+	}
+
+	public void populateSelectionTable(Table selectionTable) {
+	    // Clear filter
+	 	String predicate = getCurrentPredicate();
+	 	setConnectionFilter(null);
+
+		filterComposite.setSelection(selection);
+		filterComposite.populateSelectionTable(selectionTable);
+		
+        // Re-apply filter
+        setConnectionFilter(predicate);
+	}
+
+	public abstract ConnectionFilter getConnectionFilter();
+
+	protected abstract IConnectionProfile getConnectionProfile();
+	
+	protected abstract String getConnectionFilterType();
+	
+	public boolean performOk() {
+		
+		String filterType = getConnectionFilterType();
+		if (filterType != null) {
+					
+			String predicate = null;
+			
+			if(!isMultiplePredicatesMode)
+			{
+				predicate = getPredicate();
+			}
+			else
+			{
+				predicate = getPredicates();
+			}
+			setConnectionFilter(predicate);
+		}			
+		
+		return true;
+	}
+	
+	private String getCurrentPredicate(){
+		String predicate = null;
+		String filterType = getConnectionFilterType();
+		if (filterType != null) {
+			IConnectionProfile profile = getConnectionProfile();
+			Properties props = profile
+					.getProperties(ConnectionFilter.FILTER_SETTINGS_PROFILE_EXTENSION_ID);
+			
+			predicate = props.getProperty(filterType);	
+		}
+		return predicate;
+	}
+	
+	private void setConnectionFilter(String predicate) {
+		String filterType = getConnectionFilterType();
+		if (filterType != null) {
+		IConnectionProfile profile = getConnectionProfile();
+		Properties props = profile
+				.getProperties(ConnectionFilter.FILTER_SETTINGS_PROFILE_EXTENSION_ID);
+		if (predicate == null || predicate.length() == 0) {
+			props.remove(filterType);
+		} else {
+			props.setProperty(filterType, predicate);
+		}
+		profile.setProperties(
+				ConnectionFilter.FILTER_SETTINGS_PROFILE_EXTENSION_ID, props);
+		}
+	}
+
+    protected void performDefaults()
+    {
+        super.performDefaults();
+        
+        //Restore default values and settings
+        filterComposite.performDefaults();
+        setErrorMessage(null);
+        setValid(true);
+    }    
+    
+    protected void performApply(){
+		String filterType = getConnectionFilterType();
+		if (filterType != null) {
+					
+			String predicate = null;
+			
+			if(!isMultiplePredicatesMode)
+			{
+				predicate = getPredicate();
+			}
+			else
+			{
+				predicate = getPredicates();
+			}
+			setConnectionFilter(predicate);
+		}		
+    }
+    
+    public void setDefaultPageTitle ( String title ) {
+    	defaultTitleText = title;
+    }
+    
+    public String getDefaultPageTitle () {
+    	return defaultTitleText;
+    }
+    
+    public boolean getHideSelectionOption() {
+    	return hideSelectionOption;
+    }
+
+    public void setHideSelectionOption(boolean flag) {
+    	hideSelectionOption = flag;
+    }
+
+	public void setDescription(String description) {
+		if (this.descriptionLabel != null) {
+			this.descriptionLabel.setText(description);
+		}
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/DefaultFilterPropertyPage.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/DefaultFilterPropertyPage.java
new file mode 100644
index 0000000..b1f8fda
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/DefaultFilterPropertyPage.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ *          IBM Corporation - fix for defect 222691
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilterImpl;
+
+public abstract class DefaultFilterPropertyPage extends ConnectionFilterPropertyPage {
+
+	public DefaultFilterPropertyPage() {
+		super();
+		setHideSelectionOption(true);
+	}
+
+	public ConnectionFilter getConnectionFilter() {
+		IConnectionProfile profile = getConnectionProfile();
+		if (profile == null) {
+			return null;
+		}
+
+		String predicate = profile.getProperties(
+				ConnectionFilter.FILTER_SETTINGS_PROFILE_EXTENSION_ID)
+				.getProperty(getConnectionFilterType());
+		if (predicate == null || predicate.length() == 0) {
+			return null;
+		}
+		return new ConnectionFilterImpl(predicate);
+	}
+
+	protected IConnectionProfile getConnectionProfile() {
+		IAdaptable element = getElement();
+		if (element instanceof IConnectionProfile) {
+			return (IConnectionProfile) element;
+		}
+		return null;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/DefaultSPFilterPropertyPage.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/DefaultSPFilterPropertyPage.java
new file mode 100644
index 0000000..b489f0a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/DefaultSPFilterPropertyPage.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.IHelpContextsSQMCoreUI;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.RDBCoreUIPlugin;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.help.IContextProvider;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+public class DefaultSPFilterPropertyPage 
+	extends DefaultFilterPropertyPage
+	implements IContextProvider {
+
+	public DefaultSPFilterPropertyPage() {
+		super();
+		setDefaultPageTitle(
+				ResourceLoader.getResourceLoader().queryString("_UI_SP_FILTER_PAGE_TITLE")); //$NON-NLS-1$
+	}
+
+	protected String getConnectionFilterType() {
+		return ConnectionFilter.STORED_PROCEDURE_FILTER;
+	}
+
+	private ContextProviderDelegate contextProviderDelegate =
+		new ContextProviderDelegate(RDBCoreUIPlugin.getDefault().getBundle().getSymbolicName());
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+
+	protected Control createContents(Composite parent) {
+		Control contents = super.createContents(parent);
+		getShell().setData( HelpUtil.CONTEXT_PROVIDER_KEY, this);
+		HelpUtil.setHelp( getControl(), 
+				HelpUtil.getContextId(IHelpContextsSQMCoreUI.DEFAULT_STORED_PROCEDURE_FILTER_PROPERTY_PAGE, 
+							RDBCoreUIPlugin.getDefault().getBundle().getSymbolicName()));
+		return contents;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/DefaultTableFilterPropertyPage.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/DefaultTableFilterPropertyPage.java
new file mode 100644
index 0000000..195b148
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/DefaultTableFilterPropertyPage.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.IHelpContextsSQMCoreUI;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.RDBCoreUIPlugin;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.help.IContextProvider;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+public class DefaultTableFilterPropertyPage 
+	extends DefaultFilterPropertyPage
+	implements IContextProvider {
+
+	public DefaultTableFilterPropertyPage() {
+		super();
+		setDefaultPageTitle(
+				ResourceLoader.getResourceLoader().queryString("_UI_TABLE_FILTER_PAGE_TITLE")); //$NON-NLS-1$
+	}
+
+	protected String getConnectionFilterType() {
+		return ConnectionFilter.TABLE_FILTER;
+	}
+
+	private ContextProviderDelegate contextProviderDelegate =
+		new ContextProviderDelegate(RDBCoreUIPlugin.getDefault().getBundle().getSymbolicName());
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+
+	protected Control createContents(Composite parent) {
+		Control contents = super.createContents(parent);
+		getShell().setData( HelpUtil.CONTEXT_PROVIDER_KEY, this);
+		HelpUtil.setHelp( getControl(), 
+				HelpUtil.getContextId(IHelpContextsSQMCoreUI.DEFAULT_TABLE_FILTER_PROPERTY_PAGE, 
+							RDBCoreUIPlugin.getDefault().getBundle().getSymbolicName()));
+		return contents;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/FilterNodeFilterPropertyPage.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/FilterNodeFilterPropertyPage.java
new file mode 100644
index 0000000..d3ab843
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/FilterNodeFilterPropertyPage.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004, 2008 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo;
+import org.eclipse.jface.viewers.StructuredSelection;
+
+/**
+ * @author ledunnel
+ */
+public class FilterNodeFilterPropertyPage extends ConnectionFilterPropertyPage {
+
+	public FilterNodeFilterPropertyPage() {
+		super();
+		//setHideSelectionOption(true);
+	}
+
+	public void setElement(IAdaptable element) {
+		super.setElement(element);
+		// The following is for backward compatibility for those relying on 
+		IFilterNode filterNode = getFilterNode();
+		if (filterNode == null) {
+			selection = null;
+		}
+		else {
+			selection = new StructuredSelection(filterNode);
+		}
+	}
+
+	public ConnectionFilter getConnectionFilter() {
+		IFilterNode filterNode = getFilterNode();
+		if (filterNode == null) {
+			return null;
+		}
+
+		ConnectionInfo connection = filterNode.getParentConnection();
+		if (connection == null) {
+			return null;
+		}
+		return connection.getFilter(filterNode.getFilterName());
+	}
+
+	protected IConnectionProfile getConnectionProfile() {
+		IFilterNode filterNode = getFilterNode();
+		if (filterNode == null) {
+			return null;
+		}
+
+		ConnectionInfo connection = filterNode.getParentConnection();
+		if (connection instanceof IConnection) {
+			return ((IConnection)connection).getConnectionProfile();
+		}
+		return null;
+	}
+	
+	protected IFilterNode getFilterNode() {
+		IAdaptable element = this.getElement();
+		IFilterNode filterNode = (IFilterNode) element
+				.getAdapter(IFilterNode.class);
+		if (filterNode == null) {
+			filterNode = (IFilterNode) Platform.getAdapterManager()
+					.loadAdapter(element, IFilterNode.class.getName());
+		}
+		return filterNode;
+	}
+
+	protected String getConnectionFilterType() {
+		IFilterNode filterNode = getFilterNode();
+		if (filterNode == null) {
+			return null;
+		}
+		return filterNode.getFilterName();
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/FilterUtil.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/FilterUtil.java
new file mode 100644
index 0000000..3abdf85
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/FilterUtil.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentService;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfoImpl;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.DatabaseConnectionRegistry;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+/**
+ * @author ljulien
+ */
+public class FilterUtil
+{
+    private static final ContainmentService containment = RDBCorePlugin.getDefault().getContainmentService();
+ //   private static final ConnectionManager manager = RDBCorePlugin.getDefault().getConnectionManager();
+    
+    private static Database getDatabase (SQLObject sqlObject)
+    {
+        while (sqlObject != null 
+                && !(sqlObject instanceof Database) 
+                && !((sqlObject = (SQLObject)containment.getContainer(sqlObject)) instanceof Database));
+        return sqlObject instanceof Database ? (Database) sqlObject : null;
+    }
+    
+    private static SQLObject getFilterParent (Object parent)
+    {
+        while (parent != null 
+                && !(parent instanceof SQLObject) 
+                && !((parent = ((IVirtualNode)parent).getParent()) instanceof SQLObject));
+        return parent instanceof SQLObject ? (SQLObject) parent : null;
+    }
+    
+    public static boolean hasFilter (IFilterNode filterNode)
+    {
+        Database database = getDatabase (getFilterParent (filterNode));
+        ConnectionInfo connectionInfo = database != null ? DatabaseConnectionRegistry.getInstance().getConnectionForDatabase(database) : null;
+        return connectionInfo != null && connectionInfo.getFilter(filterNode.getFilterName()) != null ? true : false;
+    
+    }
+}
+
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/IConnectionFilterProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/IConnectionFilterProvider.java
new file mode 100644
index 0000000..c15e441
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/IConnectionFilterProvider.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter;
+
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.swt.widgets.Table;
+
+public interface IConnectionFilterProvider {
+	public ConnectionFilter getConnectionFilter();
+	public void populateSelectionTable(Table selectionTable);
+	public void dataChanged();
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/IFilterNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/IFilterNode.java
new file mode 100644
index 0000000..b0e3aa1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/IFilterNode.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+
+/**
+ * @author ljulien
+ */
+public interface IFilterNode extends IVirtualNode
+{
+    public final static String SEPARATOR = "::"; //$NON-NLS-1$
+    public String getFilterName ();
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/SchemaFilterPropertyPage.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/SchemaFilterPropertyPage.java
new file mode 100644
index 0000000..a94da89
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/SchemaFilterPropertyPage.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.IHelpContextsSQMCoreUI;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.RDBCoreUIPlugin;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.help.IContextProvider;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+public class SchemaFilterPropertyPage 
+	extends DefaultFilterPropertyPage
+	implements IContextProvider {
+
+	public SchemaFilterPropertyPage() {
+		super();
+		setDefaultPageTitle(
+				ResourceLoader.getResourceLoader().queryString("_UI_SCHEMA_FILTER_PAGE_TITLE")); //$NON-NLS-1$
+	}
+
+	protected String getConnectionFilterType() {
+		return ConnectionFilter.SCHEMA_FILTER;
+	}
+
+	private ContextProviderDelegate contextProviderDelegate =
+		new ContextProviderDelegate(RDBCoreUIPlugin.getDefault().getBundle().getSymbolicName());
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+
+	protected Control createContents(Composite parent) {
+		Control contents = super.createContents(parent);
+		getShell().setData( HelpUtil.CONTEXT_PROVIDER_KEY, this);
+		HelpUtil.setHelp( getControl(), 
+				HelpUtil.getContextId(IHelpContextsSQMCoreUI.DEFAULT_SCHEMA_FILTER_PROPERTY_PAGE, 
+							RDBCoreUIPlugin.getDefault().getBundle().getSymbolicName()));
+		return contents;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/helpers/ColumnHelper.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/helpers/ColumnHelper.java
new file mode 100644
index 0000000..a989a85
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/helpers/ColumnHelper.java
@@ -0,0 +1,183 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.helpers;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinitionRegistry;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.services.IColumnHelperService;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.sql.constraints.Constraint;
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.constraints.PrimaryKey;
+import org.eclipse.datatools.modelbase.sql.constraints.ReferenceConstraint;
+import org.eclipse.datatools.modelbase.sql.datatypes.DataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+import org.eclipse.datatools.modelbase.sql.schema.Catalog;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.common.util.EList;
+
+
+/**
+ * @author ljulien
+ */
+public class ColumnHelper implements IColumnHelperService
+{
+    private DatabaseDefinitionRegistry dbRegistry = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry();
+    private static final String BLANK = ""; //$NON-NLS-1$
+	/**
+	 * Will get the constraint associated with the parent Table
+	 * @param column
+	 * @param type - the type of constraint that we want PrimaryKey, ForeignKey...
+	 * @return the constraints found
+	 */
+	private ReferenceConstraint[] getConstraints (Column column, Class type)
+	{
+		Table parentTable = column.getTable();
+		List list = new ArrayList ();
+		if (parentTable instanceof BaseTable)
+		{	
+			EList constraints = ((BaseTable)parentTable).getConstraints();
+			for (Iterator i = constraints.iterator(); i.hasNext();)
+			{
+				Constraint constraint = (Constraint) i.next();
+				if (type.isAssignableFrom(constraint.getClass()))
+				{
+					list.add (constraint);
+				}
+			}
+		}
+		return (ReferenceConstraint []) list.toArray(new ReferenceConstraint[list.size()]);
+	}
+	
+	/**
+	 * @param column
+	 * @param type
+	 * @return true if the column is a constraint of the given type
+	 */
+	private ReferenceConstraint getConstraint (Column column, Class type)
+	{
+		ReferenceConstraint [] constraints = getConstraints (column, type);
+		for (int i = 0, n = constraints.length; i < n; i++)
+		{
+			for (Iterator iterator = constraints[i].getMembers().iterator(); iterator.hasNext();)
+			{
+				if (column.equals(iterator.next()))
+				{
+					return constraints[i];
+				}
+			}
+		}
+		return null;
+	}
+	
+	/**
+	 * @param column the foreign Key
+	 * @return the parent table
+	 */
+	public Table getParentTableOfForeignKey (Column column)
+	{
+		ForeignKey constraint = (ForeignKey) getConstraint (column, ForeignKey.class);
+		return constraint.getUniqueConstraint().getBaseTable();
+	}
+	
+	/**
+	 * @param column the column to look at
+	 * @return True if the column is a primary key
+	 */
+	public boolean isPrimaryKey (Column column)
+	{
+		return getConstraint (column, PrimaryKey.class) != null;
+	}
+	
+	/**
+	 * @param column the column to look at
+	 * @return true if the column is a foreign key
+	 */
+	public boolean isForeignKey (Column column)
+	{
+		return getConstraint (column, ForeignKey.class) != null;
+	}
+	
+	/**
+	 * @param column - The column that has been removed
+	 * @param constraint - The Reference constraint to remove as this column was its last member
+	 */
+	private void removeConstraint (Column column, ReferenceConstraint constraint)
+	{
+		Table table = column.getTable();
+		if (table instanceof BaseTable)
+		{
+			// ME TODO : Should we set the Resource to null ?
+			((BaseTable)table).getConstraints().remove(constraint);
+		}
+	}
+
+	public String getDataType (Column column)
+	{
+        Table table;
+        Schema schema;
+        Catalog catalog;
+        Database database;
+	    DataType datatype = column.getDataType();
+        if ((table = column.getTable()) != null && (schema = table.getSchema()) != null && (((catalog = schema.getCatalog()) != null && (database = catalog.getDatabase()) != null) || (database = schema.getDatabase()) != null))
+        {
+	        DatabaseDefinition definition = dbRegistry.getDefinition(database);
+	        if(datatype != null && datatype.getName() != null) 
+	        {
+				if (datatype instanceof PredefinedDataType) 
+				{
+					return definition.getPredefinedDataTypeFormattedName((PredefinedDataType)datatype);		
+				}
+				else 
+				{
+					return datatype.getName();
+				}
+	        }
+        }
+        return BLANK;
+	}
+	
+	/**
+	 * Will update all the reference constraints when a column has been deleted
+	 * Might delete the constraint is the deleted column was the last member
+	 * @param column - The deleted column
+	 */
+	public void updateConstraintsOnColumnDeleted (Column column)
+	{
+		ReferenceConstraint [] constraints = getConstraints(column, ReferenceConstraint.class);
+		for (int i = 0, n = constraints.length; i < n; i++)
+		{
+			ReferenceConstraint constraint = constraints[i];
+			EList members = constraint.getMembers();
+			for (int j = 0; j < members.size(); j++)
+			{
+				Column currentColumn = (Column) members.get(j);
+				if (currentColumn.equals(column))
+				{
+					members.remove(currentColumn);
+					break;
+				}
+			}
+			if (members.size() == 0)
+			{
+				removeConstraint (column, constraint);
+			}
+		} 
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/helpers/FilterHelper.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/helpers/FilterHelper.java
new file mode 100644
index 0000000..d66d9c1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/helpers/FilterHelper.java
@@ -0,0 +1,103 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.helpers;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Vector;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.sqm.core.connection.ConnectionInfo;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+import org.eclipse.ui.internal.dialogs.AdaptableForwarder;
+
+public class FilterHelper
+{
+	public static final FilterHelper INSTANCE = new FilterHelper();
+	
+	private Map dbCollection = new HashMap ();
+	
+    private FilterHelper()
+    {
+    	IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+		IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("org.eclipse.datatools.connectivity.sqm.core.ui", "filterInformation");//$NON-NLS-1$ //$NON-NLS-2$
+		IExtension[] extensions = extensionPoint.getExtensions();
+		for(int i=0; i<extensions.length; ++i) 
+		{
+			IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+			for(int j=0; j<configElements.length; ++j) 
+			{
+				if(configElements[j].getName().equals("filterInformation"))//$NON-NLS-1$
+				{
+					String vendor = configElements[j].getAttribute("vendor");//$NON-NLS-1$
+					String version = configElements[j].getAttribute("version");//$NON-NLS-1$	
+					IConfigurationElement[] configElementsObjectType = configElements[j].getChildren("object");//$NON-NLS-1$
+					
+					Vector objectType = new Vector();
+					for(int k = 0; k < configElementsObjectType.length; k++)
+						objectType.add(configElementsObjectType[k].getAttribute("type"));//$NON-NLS-1$
+					
+					Boolean temp = new Boolean(configElements[j].getAttribute("supportsMultiplePredicates")); //$NON-NLS-1$
+					boolean supportsMultiplePredicates = temp.booleanValue();
+					
+					if(supportsMultiplePredicates){
+						
+						if(dbCollection.containsKey(vendor + " " + version)){
+							Object obj = dbCollection.get(vendor + " " + version);
+							Vector type = (Vector)obj;
+							
+							for(int m = 0; m < objectType.size(); m++)
+								type.add(objectType.get(m));
+							
+							dbCollection.put(vendor + " " + version, type);
+						}
+						else
+							dbCollection.put(vendor + " " + version, objectType);
+					}
+				}
+			}
+		}
+    }
+
+    public boolean supportsMultiplePredicatesMode(IAdaptable element){
+    	
+		IVirtualNode virtualNodeAdapter = (IVirtualNode) element
+				.getAdapter(IVirtualNode.class);
+		
+    	if (virtualNodeAdapter != null) {
+    		
+			IVirtualNode virtualNode = (IVirtualNode) virtualNodeAdapter;
+			ConnectionInfo connectionInfo = virtualNode.getParentConnection();
+			String vendor = connectionInfo.getDatabaseDefinition().getProduct();
+			String version = connectionInfo.getDatabaseDefinition()
+					.getVersion();
+
+			if (dbCollection.containsKey(vendor + " " + version)) {
+				Vector objectType = (Vector) dbCollection.get(vendor + " "
+						+ version);
+
+				for (int i = 0; i < objectType.size(); i++) {
+					if (virtualNode.getClass().getInterfaces()[0].getName()
+							.equals(objectType.get(i)))
+						return true;
+				}
+			}
+
+		}
+		return false;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/helpers/ForeignKeyHelper.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/helpers/ForeignKeyHelper.java
new file mode 100644
index 0000000..3a833fe
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/helpers/ForeignKeyHelper.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.helpers;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.services.IColumnHelperService;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.services.IForeignKeyHelperService;
+import org.eclipse.datatools.connectivity.sqm.core.ui.services.IDataToolsUIServiceManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.constraints.UniqueConstraint;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.ecore.EAnnotation;
+
+/**
+ * @author ljulien
+ */
+public class ForeignKeyHelper implements IForeignKeyHelperService
+{
+	private IColumnHelperService columnHelper = IDataToolsUIServiceManager.INSTANCE.getColumnHelperService();
+	/**
+	 * @see org.eclipse.datatools.connectivity.sqm.core.internal.ui.ui.services.IForeignKeyHelper#isIdentifyingConstraint(org.eclipse.sql.constraints.ForeignKey)
+	 */
+	public boolean isIdentifyingConstraint(ForeignKey constraint)
+	{
+        EAnnotation eAnnotation = constraint.getEAnnotation(RDBCorePlugin.FK_MODELING_RELATIONSHIP);
+        if (eAnnotation != null)
+        {
+            return new Boolean ((String)eAnnotation.getDetails().get(RDBCorePlugin.FK_IS_IDENTIFYING_RELATIONSHIP)).booleanValue();
+        }
+        return true;
+	}
+	/**
+	 * @see org.eclipse.datatools.connectivity.sqm.core.internal.ui.ui.services.IForeignKeyHelper#isNonIdentifyingConstraint(org.eclipse.sql.constraints.ForeignKey)
+	 */
+	public boolean isNonIdentifyingConstraint(ForeignKey constraint)
+	{
+		return !isIdentifyingConstraint(constraint);
+	}
+
+	public Table getTarget (ForeignKey fk)
+    {
+        UniqueConstraint constraint = fk.getUniqueConstraint();
+        if (constraint != null)
+        {
+            return constraint.getBaseTable();
+        }
+        else if (fk.getUniqueIndex() != null)
+        {
+            return fk.getUniqueIndex().getTable();
+        }
+        else
+        {
+            return fk.getReferencedTable();
+        }
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/helpers/IndexHelper.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/helpers/IndexHelper.java
new file mode 100644
index 0000000..934487b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/helpers/IndexHelper.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.helpers;
+
+import java.text.MessageFormat;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+
+/**
+ * @author ljulien
+ */
+public class IndexHelper
+{
+    public static final IndexHelper INSTANCE = new IndexHelper ();
+
+    private static final String FORMAT = " [{0}]"; //$NON-NLS-1$
+    private static final String BLANK = ""; //$NON-NLS-1$
+    
+    private static final ResourceLoader resource = ResourceLoader.getResourceLoader();
+    private static final String UNIQUE = resource.queryString("DATATOOLS.CORE.UI.INDEX_UNIQUE.DECORATION"); //$NON-NLS-1$
+ 
+    private IndexHelper () 
+    {
+    }
+    
+    public String getDecoration (Index index)
+    {
+        if (index.isUnique())
+        {
+            return MessageFormat.format(FORMAT, new String [] {UNIQUE});
+        }
+        return BLANK;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/helpers/TriggerHelper.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/helpers/TriggerHelper.java
new file mode 100644
index 0000000..9d35934
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/helpers/TriggerHelper.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.helpers;
+
+import java.text.MessageFormat;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.modelbase.sql.tables.ActionTimeType;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+
+/**
+ * @author ljulien
+ */
+public class TriggerHelper
+{
+    public static final TriggerHelper INSTANCE = new TriggerHelper ();
+
+    private static final String FORMAT = " [{0} / {1}]"; //$NON-NLS-1$
+    private static final String SEPARATION = " - "; //$NON-NLS-1$
+    private static final String BLANK = ""; //$NON-NLS-1$
+    private static final ResourceLoader resource = ResourceLoader.getResourceLoader();
+    private static final String UPDATE = resource.queryString("DATATOOLS.CORE.UI.TRIGGER_UPDATE.DECORATION"); //$NON-NLS-1$
+    private static final String DELETE = resource.queryString("DATATOOLS.CORE.UI.TRIGGER_DELETE.DECORATION"); //$NON-NLS-1$
+    private static final String INSERT = resource.queryString("DATATOOLS.CORE.UI.TRIGGER_INSERT.DECORATION"); //$NON-NLS-1$
+    private static final String BEFORE = resource.queryString("DATATOOLS.CORE.UI.TRIGGER_BEFORE.DECORATION"); //$NON-NLS-1$
+    private static final String AFTER = resource.queryString("DATATOOLS.CORE.UI.TRIGGER_AFTER.DECORATION"); //$NON-NLS-1$
+    private static final String INSTEADOF = resource.queryString("DATATOOLS.CORE.UI.TRIGGER_INSTEADOF.DECORATION"); //$NON-NLS-1$
+
+    private TriggerHelper () 
+    {
+    }
+    
+    public String getDecoration (Trigger trigger)
+    {
+        String triggerType = null;
+        String triggerTime = null;
+        if (trigger.isInsertType())
+        {
+            triggerType = INSERT;
+        }
+        if (trigger.isDeleteType())
+        {
+            if (triggerType == null)
+            {
+                triggerType = DELETE;
+            }
+            else
+            {
+                triggerType += SEPARATION + DELETE;
+            }
+        }
+        if (trigger.isUpdateType())
+        {
+            if (triggerType == null)
+            {
+                triggerType = UPDATE;
+            }
+            else
+            {
+                triggerType += SEPARATION + UPDATE;
+            }
+        }
+        
+        ActionTimeType type = trigger.getActionTime();
+        if (type == ActionTimeType.AFTER_LITERAL)
+        {
+            triggerTime = AFTER;
+        }
+        else if (type == ActionTimeType.BEFORE_LITERAL)
+        {
+            triggerTime = BEFORE;
+        }
+        else if (type == ActionTimeType.INSTEADOF_LITERAL)
+        {
+            triggerTime = INSTEADOF;
+        }
+        return MessageFormat.format(FORMAT, new String [] {triggerType != null ? triggerType : BLANK, triggerTime != null ? triggerTime : BLANK});
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/popup/AbstractAction.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/popup/AbstractAction.java
new file mode 100644
index 0000000..af53ab3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/popup/AbstractAction.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.popup;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.ui.navigator.CommonViewer;
+
+public abstract class AbstractAction extends Action implements ISelectionChangedListener
+{
+	protected SelectionChangedEvent event;
+	protected CommonViewer viewer;
+	
+	public AbstractAction ()
+	{
+		initialize ();
+	}
+	
+	protected abstract void initialize ();
+
+	protected void initializeAction (ImageDescriptor image, ImageDescriptor disabledImage, String text, String toopTip)
+    {
+		if (image != null)
+		{
+			this.setImageDescriptor(image);
+		}
+		if (disabledImage != null)
+		{
+			this.setDisabledImageDescriptor(disabledImage);
+		}
+		this.setText(text);
+		this.setToolTipText(toopTip);
+    }
+
+	public void setCommonViewer (CommonViewer viewer)
+	{
+		this.viewer = viewer;
+	}
+	
+    public void selectionChanged(SelectionChangedEvent event)
+    {
+    	this.event = event;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/popup/providers/AbstractActionProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/popup/providers/AbstractActionProvider.java
new file mode 100644
index 0000000..d1222da
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/popup/providers/AbstractActionProvider.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.popup.providers;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.popup.AbstractAction;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.ui.navigator.CommonActionProvider;
+import org.eclipse.ui.navigator.CommonViewer;
+import org.eclipse.ui.navigator.ICommonActionExtensionSite;
+import org.eclipse.ui.navigator.ICommonMenuConstants;
+
+public abstract class AbstractActionProvider extends CommonActionProvider
+{
+    protected CommonViewer viewer;
+    protected ISelectionProvider selectionProvider;
+    protected ActionContributionItem ITEM;
+	
+    protected abstract AbstractAction getAction();
+ 
+    protected boolean isActionVisible ()
+    {
+        return true;
+    }
+    
+    protected void initActionContributionItem() 
+    {
+        ITEM = new ActionContributionItem(getAction());
+    }
+	
+	protected String getGroupID ()
+	{
+		return ICommonMenuConstants.GROUP_ADDITIONS;
+	}
+    
+    protected ActionContributionItem getActionContributionItem()
+    {
+        return ITEM;
+    }
+    
+	public void init(ICommonActionExtensionSite aSite)
+	{
+		super.init(aSite);
+		this.selectionProvider = aSite.getViewSite().getSelectionProvider();
+		this.viewer = (CommonViewer) aSite.getStructuredViewer();
+		initActionContributionItem();
+	}	
+	
+    public void fillContextMenu(IMenuManager menu) 
+    {
+		getAction().setCommonViewer(this.viewer);
+    	getAction().selectionChanged(new SelectionChangedEvent(this.selectionProvider, this.getContext().getSelection()));
+    	if (isActionVisible())
+        {
+    	    menu.appendToGroup(getGroupID (), getActionContributionItem());
+        }
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/popup/providers/AbstractSubMenuActionProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/popup/providers/AbstractSubMenuActionProvider.java
new file mode 100644
index 0000000..6174ccc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/popup/providers/AbstractSubMenuActionProvider.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.popup.providers;
+
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+
+public abstract class AbstractSubMenuActionProvider extends AbstractActionProvider
+{
+    protected abstract String getSubMenuId ();
+    
+    public void fillContextMenu(IMenuManager menu)
+	{
+		IMenuManager subMenu = (IMenuManager) menu.find(getSubMenuId());
+		getAction().setCommonViewer(this.viewer);
+		getAction().selectionChanged(new SelectionChangedEvent(this.selectionProvider, this.getContext().getSelection()));
+		subMenu.add(getActionContributionItem());
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/AuthorizationIDNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/AuthorizationIDNode.java
new file mode 100644
index 0000000..2bb0ab2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/AuthorizationIDNode.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.content.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IAuthorizationIDNode;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual.VirtualNode;
+import org.eclipse.datatools.connectivity.sqm.internal.core.containment.GroupID;
+
+public class AuthorizationIDNode extends VirtualNode implements IAuthorizationIDNode
+{
+	public AuthorizationIDNode(String name, String displayName, Object parent)
+	{
+		super(name, displayName, parent);
+	}
+
+	public String getGroupID()
+	{
+		return GroupID.USER;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/CatalogNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/CatalogNode.java
new file mode 100644
index 0000000..786b3d8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/CatalogNode.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.content.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter.IFilterNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.ICatalogNode;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual.VirtualNode;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.connectivity.sqm.internal.core.containment.GroupID;
+
+
+public class CatalogNode extends VirtualNode implements ICatalogNode, IFilterNode
+{
+	/**
+	 * @param name
+	 * @param displayName
+	 */
+	public CatalogNode(String name, String displayName, Object parent)
+	{
+		super(name, displayName, parent);
+	}
+
+    public String getGroupID ()
+    {
+        return GroupID.CATALOG;
+    }
+
+    public String getFilterName()
+    {
+        return ConnectionFilter.CATALOG_FILTER;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/ColumnNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/ColumnNode.java
new file mode 100644
index 0000000..e61c8f3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/ColumnNode.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.content.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IColumnNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.icons.ImageDescription;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual.VirtualNode;
+import org.eclipse.datatools.connectivity.sqm.internal.core.containment.GroupID;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.jface.resource.ImageDescriptor;
+
+
+/**
+ * @author ljulien
+ */
+public class ColumnNode extends VirtualNode implements IColumnNode
+{
+	/**
+	 * @param name
+	 * @param displayName
+	 */
+	public ColumnNode(String name, String displayName, Object parent)
+	{
+		super(name, displayName, parent);
+	}
+
+    public String getGroupID ()
+    {
+        return GroupID.COLUMN;
+    }
+    
+	//@Override
+	public ImageDescriptor[] getCreateImageDescriptor() {
+		return new ImageDescriptor[] {ImageDescription.getColumnDescriptor()};
+	}
+
+	//@Override
+	public String[] getCreateLabel() {
+		return new String[] {ResourceLoader.getResourceLoader().queryString("SCHEMA_MANAGEMENT_ADD_COLUMN")};
+	}
+
+	//@Override
+	public EClass[] getCreateType() {
+		return new EClass[] {SQLTablesPackage.eINSTANCE.getColumn()};
+	}
+
+	//@Override
+	public boolean shouldDisplayCreate() {
+		return false;
+	}
+
+	//@Override
+	public boolean shouldDisplayAdd() {
+		return true;
+	}
+
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/ConstraintNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/ConstraintNode.java
new file mode 100644
index 0000000..8b5b901
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/ConstraintNode.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.content.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IConstraintNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.icons.ImageDescription;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual.VirtualNode;
+import org.eclipse.datatools.connectivity.sqm.internal.core.containment.GroupID;
+import org.eclipse.datatools.modelbase.sql.constraints.SQLConstraintsPackage;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.jface.resource.ImageDescriptor;
+
+
+/**
+ * @author ljulien
+ */
+public class ConstraintNode extends VirtualNode implements IConstraintNode
+{
+	/**
+	 * @param name
+	 * @param displayName
+	 */
+	public ConstraintNode(String name, String displayName, Object parent)
+	{
+		super(name, displayName, parent);
+	}
+
+    public String getGroupID ()
+    {
+        return GroupID.CONSTRAINT;
+    }
+
+    //@Override
+	public ImageDescriptor[] getCreateImageDescriptor() {
+		return new ImageDescriptor[] { 
+				ImageDescription.getTableCheckConstraintDescriptor(),
+				ImageDescription.getTableCheckConstraintDescriptor(),
+				ImageDescription.getFKDecorationDescriptor()
+		};
+	}
+
+	//@Override
+	public String[] getCreateLabel() {
+		return new String[] {
+				ResourceLoader.getResourceLoader().queryString("SCHEMA_MANAGEMENT_ADD_CHECK_CONSTRAINT"),
+				ResourceLoader.getResourceLoader().queryString("SCHEMA_MANAGEMENT_ADD_UNIQUE_CONSTRAINT"),
+				ResourceLoader.getResourceLoader().queryString("SCHEMA_MANAGEMENT_ADD_FOREIGN_KEY")
+		};
+	}
+
+	//@Override
+	public EClass[] getCreateType() {
+		return new EClass[] {
+				SQLConstraintsPackage.eINSTANCE.getCheckConstraint(),
+				SQLConstraintsPackage.eINSTANCE.getUniqueConstraint(),
+				SQLConstraintsPackage.eINSTANCE.getForeignKey()
+		};
+	}
+
+	//@Override
+	public boolean shouldDisplayCreate() {
+		return false;
+	}
+
+	//@Override
+	public boolean shouldDisplayAdd() {
+		return true;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/DependencyNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/DependencyNode.java
new file mode 100644
index 0000000..d67b73d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/DependencyNode.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.content.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IDependencyNode;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual.VirtualNode;
+import org.eclipse.datatools.connectivity.sqm.internal.core.containment.GroupID;
+
+/**
+ * @author ljulien
+ */
+public class DependencyNode extends VirtualNode implements IDependencyNode
+{
+	public DependencyNode(String name, String displayName, Object parent)
+	{
+		super(name, displayName, parent);
+	}
+    public String getGroupID ()
+    {
+        return GroupID.DEPENDENCY;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/GroupNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/GroupNode.java
new file mode 100644
index 0000000..b2fcd70
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/GroupNode.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.content.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IGroupNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.icons.ImageDescription;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual.VirtualNode;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualCreationNode;
+import org.eclipse.datatools.connectivity.sqm.internal.core.containment.GroupID;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.SQLAccessControlPackage;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.jface.resource.ImageDescriptor;
+
+public class GroupNode extends VirtualNode implements IVirtualCreationNode, IGroupNode
+{
+	public GroupNode(String name, String displayName, Object parent)
+	{
+		super(name, displayName, parent);
+	}
+
+	public ImageDescriptor[] getCreateImageDescriptor() {
+		return new ImageDescriptor[] {ImageDescription.getGroupDescriptor()};
+	}
+
+	public String[] getCreateLabel() {
+		return new String[] {ResourceLoader.getResourceLoader().queryString("SCHEMA_MANAGEMENT_CREATE_GROUP")};
+	}
+
+	public EClass[] getCreateType() {
+		return new EClass[] {SQLAccessControlPackage.eINSTANCE.getGroup()};
+	}
+
+	public boolean shouldDisplayAdd() {
+		return false;
+	}
+
+	public boolean shouldDisplayCreate() {
+		return true;
+	}
+	
+	public String getGroupID()
+	{
+		return GroupID.GROUP;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/IndexNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/IndexNode.java
new file mode 100644
index 0000000..d75f68e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/IndexNode.java
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.content.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IIndexNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.icons.ImageDescription;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual.VirtualNode;
+import org.eclipse.datatools.connectivity.sqm.internal.core.containment.GroupID;
+import org.eclipse.datatools.modelbase.sql.constraints.SQLConstraintsPackage;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.jface.resource.ImageDescriptor;
+
+
+/**
+ * @author ljulien
+ */
+public class IndexNode extends VirtualNode implements IIndexNode
+{
+	/**
+	 * @param name
+	 * @param displayName
+	 */
+	public IndexNode(String name, String displayName, Object parent)
+	{
+		super(name, displayName, parent);
+	}
+
+    public String getGroupID ()
+    {
+        return GroupID.INDEX;
+    }
+    
+	//@Override
+	public ImageDescriptor[] getCreateImageDescriptor() {
+		return new ImageDescriptor[] { 
+				ImageDescription.getIndexDescriptor()
+		};
+	}
+
+	//@Override
+	public String[] getCreateLabel() {
+		return new String[] {
+				ResourceLoader.getResourceLoader().queryString("SCHEMA_MANAGEMENT_CREATE_INDEX")
+		};
+	}
+
+	//@Override
+	public EClass[] getCreateType() {
+		return new EClass[] {
+				SQLConstraintsPackage.eINSTANCE.getIndex()
+		};
+	}
+
+	//@Override
+	public boolean shouldDisplayCreate() {
+		return true;
+	}
+
+	//@Override
+	public boolean shouldDisplayAdd() {
+		return false;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/RoleNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/RoleNode.java
new file mode 100644
index 0000000..3f12547
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/RoleNode.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.content.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IRoleNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.icons.ImageDescription;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual.VirtualNode;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualCreationNode;
+import org.eclipse.datatools.connectivity.sqm.internal.core.containment.GroupID;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.SQLAccessControlPackage;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.jface.resource.ImageDescriptor;
+
+public class RoleNode extends VirtualNode implements IVirtualCreationNode, IRoleNode
+{
+	public RoleNode(String name, String displayName, Object parent)
+	{
+		super(name, displayName, parent);
+	}
+
+	public String getGroupID()
+	{
+		return GroupID.ROLE;
+	}
+
+	//@Override
+	public ImageDescriptor[] getCreateImageDescriptor() {
+		return new ImageDescriptor[] {ImageDescription.getRoleDescriptor()};
+	}
+
+	//@Override
+	public String[] getCreateLabel() {
+		return new String[] {ResourceLoader.getResourceLoader().queryString("SCHEMA_MANAGEMENT_CREATE_ROLE")};
+	}
+
+	//@Override
+	public EClass[] getCreateType() {
+		return new EClass[] {SQLAccessControlPackage.eINSTANCE.getRole()};
+	}
+
+	//@Override
+	public boolean shouldDisplayCreate() {
+		return true;
+	}
+
+	public boolean shouldDisplayAdd() {
+		return false;
+	}	
+	
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/SchemaNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/SchemaNode.java
new file mode 100644
index 0000000..47746f1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/SchemaNode.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.content.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter.IFilterNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.ISchemaNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.icons.ImageDescription;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual.VirtualNode;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.connectivity.sqm.internal.core.containment.GroupID;
+import org.eclipse.datatools.modelbase.sql.schema.Catalog;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.jface.resource.ImageDescriptor;
+
+
+/**
+ * @author ljulien
+ */
+public class SchemaNode extends VirtualNode implements ISchemaNode, IFilterNode
+{
+	/**
+	 * @param name
+	 * @param displayName
+	 */
+	public SchemaNode(String name, String displayName, Object parent)
+	{
+		super(name, displayName, parent);
+	}
+
+    public String getGroupID ()
+    {
+        return GroupID.SCHEMA;
+    }
+
+    public String getFilterName() {
+		Object parent = getParent();
+		if (parent instanceof Catalog) {
+			return ((Catalog) parent).getName() + IFilterNode.SEPARATOR
+					+ ConnectionFilter.SCHEMA_FILTER;
+		}
+		return ConnectionFilter.SCHEMA_FILTER;
+	}
+    
+	//@Override
+	public ImageDescriptor[] getCreateImageDescriptor() {
+		return new ImageDescriptor[] {ImageDescription.getSchemaDescriptor()};
+	}
+
+	//@Override
+	public String[] getCreateLabel() {
+		return new String[] {ResourceLoader.getResourceLoader().queryString("SCHEMA_MANAGEMENT_CREATE_SCHEMA")};
+	}
+
+	//@Override
+	public EClass[] getCreateType() {
+		return new EClass[] {SQLSchemaPackage.eINSTANCE.getSchema()};
+	}
+
+	//@Override
+	public boolean shouldDisplayCreate() {
+		return true;
+	}
+
+	public boolean shouldDisplayAdd() {
+		return false;
+	}
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/SequenceNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/SequenceNode.java
new file mode 100644
index 0000000..efc43f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/SequenceNode.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.content.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter.IFilterNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.ISequenceNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.icons.ImageDescription;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual.VirtualNode;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.connectivity.sqm.internal.core.containment.GroupID;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.jface.resource.ImageDescriptor;
+
+/**
+ * @author ljulien
+ */
+public class SequenceNode extends VirtualNode implements ISequenceNode, IFilterNode
+{
+	/**
+	 * @param name
+	 * @param displayName
+	 */
+	public SequenceNode(String name, String displayName, Object parent)
+	{
+		super(name, displayName, parent);
+	}
+
+    public String getGroupID ()
+    {
+        return GroupID.SEQUENCE;
+    }
+
+    public String getFilterName() {
+    	return getFilterName(ConnectionFilter.SEQUENCE_FILTER);
+	}
+    
+	//@Override
+	public ImageDescriptor[] getCreateImageDescriptor() {
+		return new ImageDescriptor[] { 
+				ImageDescription.getSequenceDescriptor()
+		};
+	}
+
+	//@Override
+	public String[] getCreateLabel() {
+		return new String[] {
+				ResourceLoader.getResourceLoader().queryString("SCHEMA_MANAGEMENT_CREATE_SEQUENCE")
+		};
+	}
+
+	//@Override
+	public EClass[] getCreateType() {
+		return new EClass[] {
+				SQLSchemaPackage.eINSTANCE.getSequence()
+		};
+	}
+
+	//@Override
+	public boolean shouldDisplayCreate() {
+		return true;
+	}
+
+	//@Override
+	public boolean shouldDisplayAdd() {
+		return false;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/StoredProcedureNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/StoredProcedureNode.java
new file mode 100644
index 0000000..4fc4d76
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/StoredProcedureNode.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright  2001, 2004 ,2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.content.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter.IFilterNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IStoredProcedureNode;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual.VirtualNode;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.connectivity.sqm.internal.core.containment.GroupID;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+
+/**
+ * @author ljulien
+ */
+public class StoredProcedureNode extends VirtualNode implements IStoredProcedureNode, IFilterNode
+{
+    /**
+     * @param name
+     * @param displayName
+     * @param parent
+     */
+    public StoredProcedureNode(String name, String displayName, Object parent)
+    {
+        super(name, displayName, parent);
+    }
+    public String getGroupID ()
+    {
+        return GroupID.PROCEDURE;
+    }
+
+    public String getFilterName() {
+    	return	getFilterName(ConnectionFilter.STORED_PROCEDURE_FILTER);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/TableNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/TableNode.java
new file mode 100644
index 0000000..d37d28e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/TableNode.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.content.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter.IFilterNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.ITableNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.icons.ImageDescription;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual.VirtualNode;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.connectivity.sqm.internal.core.containment.GroupID;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.jface.resource.ImageDescriptor;
+
+/**
+ * @author ljulien
+ */
+public class TableNode extends VirtualNode implements ITableNode, IFilterNode
+{
+	/**
+	 * @param name
+	 * @param displayName
+	 */
+	public TableNode(String name, String displayName, Object parent)
+	{
+		super(name, displayName, parent);
+	}
+
+    public String getGroupID ()
+    {
+        return GroupID.TABLE;
+    }
+
+    public String getFilterName() {
+		return getFilterName(ConnectionFilter.TABLE_FILTER);
+	}
+    
+	//@Override
+	public ImageDescriptor[] getCreateImageDescriptor() {
+		return new ImageDescriptor[] {ImageDescription.getTableDescriptor()};
+	}
+
+	//@Override
+	public String[] getCreateLabel() {
+		return new String[] {ResourceLoader.getResourceLoader().queryString("SCHEMA_MANAGEMENT_CREATE_TABLE")};
+	}
+
+	//@Override
+	public EClass[] getCreateType() {
+		return new EClass[] {SQLTablesPackage.eINSTANCE.getPersistentTable()};
+	}
+
+	//@Override
+	public boolean shouldDisplayCreate() {
+		return true;
+	}
+
+	public boolean shouldDisplayAdd() {
+		return false;
+	}
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/TriggerNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/TriggerNode.java
new file mode 100644
index 0000000..43bc031
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/TriggerNode.java
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.content.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.ITriggerNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.icons.ImageDescription;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual.VirtualNode;
+import org.eclipse.datatools.connectivity.sqm.internal.core.containment.GroupID;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.jface.resource.ImageDescriptor;
+
+
+/**
+ * @author ljulien
+ */
+public class TriggerNode extends VirtualNode implements ITriggerNode
+{
+	/**
+	 * @param name
+	 * @param displayName
+	 */
+	public TriggerNode(String name, String displayName, Object parent)
+	{
+		super(name, displayName, parent);
+	}
+
+    public String getGroupID ()
+    {
+        return GroupID.TRIGGER;
+    }
+    
+    //@Override
+	public ImageDescriptor[] getCreateImageDescriptor() {
+		return new ImageDescriptor[] { 
+				ImageDescription.getTriggerDescriptor()
+		};
+	}
+
+	//@Override
+	public String[] getCreateLabel() {
+		return new String[] {
+				ResourceLoader.getResourceLoader().queryString("SCHEMA_MANAGEMENT_CREATE_TRIGGER")
+		};
+	}
+
+	//@Override
+	public EClass[] getCreateType() {
+		return new EClass[] {
+				SQLTablesPackage.eINSTANCE.getTrigger()
+		};
+	}
+
+	//@Override
+	public boolean shouldDisplayCreate() {
+		return true;
+	}
+
+	//@Override
+	public boolean shouldDisplayAdd() {
+		return false;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/UDFNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/UDFNode.java
new file mode 100644
index 0000000..479f547
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/UDFNode.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright 2001, 2004 ,2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.content.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter.IFilterNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IUDFNode;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual.VirtualNode;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.connectivity.sqm.internal.core.containment.GroupID;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+
+/**
+ * @author ljulien
+ */
+public class UDFNode extends VirtualNode implements IUDFNode, IFilterNode
+{
+    /**
+     * @param name
+     * @param displayName
+     * @param parent
+     */
+    public UDFNode(String name, String displayName, Object parent)
+    {
+        super(name, displayName, parent);
+    }
+
+    public String getGroupID ()
+    {
+        return GroupID.FUNCTION;
+    }
+
+    public String getFilterName() {
+    	return	getFilterName(ConnectionFilter.STORED_PROCEDURE_FILTER);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/UDTNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/UDTNode.java
new file mode 100644
index 0000000..3bbb14d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/UDTNode.java
@@ -0,0 +1,254 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.content.virtual;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter.IFilterNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IUDTNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.icons.ImageDescription;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual.AddObjectRegistry;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual.VirtualNode;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IAddObjectProvider;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.connectivity.sqm.internal.core.containment.GroupID;
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataTypesPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.jface.resource.ImageDescriptor;
+
+/**
+ * @author ljulien
+ */
+public class UDTNode extends VirtualNode implements IUDTNode, IFilterNode
+{
+	protected boolean isStructuredUDTSupported;
+	protected boolean isArrayTypeSupported;
+	protected boolean isRowTypeSupported;
+	protected boolean isDistinctTypeSupported;
+	protected ImageDescriptor addObjectDescriptor = null;
+	protected String addObjectLabel = null;
+	protected EClass addObjectEClass = null;
+	
+	/**
+	 * @param name
+	 * @param displayName
+	 */
+	public UDTNode(String name, String displayName, Object parent)
+	{
+        super(name, displayName, parent);
+        isDistinctTypeSupported = isDistinctTypeSupported();
+        isStructuredUDTSupported = isStructuredUserDefinedTypeSupported();
+        isArrayTypeSupported = isArrayTypeSupported();
+        isRowTypeSupported = isRowTypeSupported();
+        IAddObjectProvider provider = AddObjectRegistry.INSTANCE.getProvider(this);
+        if (provider != null) {
+            setAddedObjectValues(provider);
+        }
+	}
+
+	public String getGroupID ()
+    {
+        return GroupID.USER_DEFINED_TYPE;
+    }
+
+    public String getFilterName() {
+		return getFilterName(ConnectionFilter.USER_DEFINED_TYPE_FILTER);
+	}
+    
+    //@Override
+	public ImageDescriptor[] getCreateImageDescriptor() {		
+        List imageDescriptors = new ArrayList();
+        if (isDistinctTypeSupported) {
+            imageDescriptors.add(ImageDescription.getUDTDescriptor());  
+        }       
+        if (isStructuredUDTSupported)
+        {
+            imageDescriptors.add(ImageDescription.getUDTDescriptor());
+        }
+        if (isArrayTypeSupported)
+        {
+            imageDescriptors.add(ImageDescription.getUDTDescriptor());
+        }
+        if (isRowTypeSupported)
+        {
+            imageDescriptors.add(ImageDescription.getUDTDescriptor());
+        }
+        if (addObjectDescriptor != null) {
+            imageDescriptors.add(addObjectDescriptor);
+        }
+        return (ImageDescriptor[])imageDescriptors.toArray(new ImageDescriptor[0]);
+        
+        /*return isStructuredUDTSupported ? new ImageDescriptor[] { 
+                ImageDescription.getUDTDescriptor(),
+                ImageDescription.getUDTDescriptor(),
+                ImageDescription.getUDTDescriptor(),
+                ImageDescription.getUDTDescriptor()
+        }
+        : new ImageDescriptor[] { ImageDescription.getUDTDescriptor() }; */
+	}
+
+	//@Override
+	public String[] getCreateLabel() {
+	      List labels = new ArrayList();
+	        if (this.isDistinctTypeSupported) {
+	            labels.add(ResourceLoader.getResourceLoader().queryString("SCHEMA_MANAGEMENT_CREATE_DISTINCT_TYPE"));   
+	        }       
+	        if (isStructuredUDTSupported)
+	        {
+	            labels.add(ResourceLoader.getResourceLoader().queryString("SCHEMA_MANAGEMENT_CREATE_STRUCTURED_TYPE"));
+	        }
+	        if (isArrayTypeSupported)
+	        {
+	            labels.add(ResourceLoader.getResourceLoader().queryString("SCHEMA_MANAGEMENT_CREATE_ARRAY_TYPE"));
+	        }
+	        if (isRowTypeSupported)
+	        {
+	            labels.add(ResourceLoader.getResourceLoader().queryString("SCHEMA_MANAGEMENT_CREATE_ROW_TYPE"));
+	        }
+	        if (addObjectLabel != null) {
+	            labels.add(addObjectLabel);
+	        }
+	        return (String[])labels.toArray(new String[0]);
+	        
+	    /*  return isStructuredUDTSupported ? new String[] {
+	                ResourceLoader.getResourceLoader().queryString("SCHEMA_MANAGEMENT_CREATE_DISTINCT_TYPE"),
+	                ResourceLoader.getResourceLoader().queryString("SCHEMA_MANAGEMENT_CREATE_STRUCTURED_TYPE"),
+	                ResourceLoader.getResourceLoader().queryString("SCHEMA_MANAGEMENT_CREATE_ARRAY_TYPE"),
+	                ResourceLoader.getResourceLoader().queryString("SCHEMA_MANAGEMENT_CREATE_ROW_TYPE")
+	        }
+	        : new String[] { ResourceLoader.getResourceLoader().queryString("SCHEMA_MANAGEMENT_CREATE_DISTINCT_TYPE") }; */
+	}
+
+	//@Override
+	public EClass[] getCreateType() {
+	      List types = new ArrayList();
+	        if (isDistinctTypeSupported) {
+	            types.add(SQLDataTypesPackage.eINSTANCE.getDistinctUserDefinedType());  
+	        }       
+	        if (isStructuredUDTSupported)
+	        {
+	            types.add(SQLDataTypesPackage.eINSTANCE.getStructuredUserDefinedType());
+	        }
+	        if (isArrayTypeSupported)
+	        {
+	            types.add(SQLDataTypesPackage.eINSTANCE.getArrayDataType());
+	        }
+	        if (isRowTypeSupported)
+	        {
+	            types.add(SQLDataTypesPackage.eINSTANCE.getRowDataType());
+	        }
+	        if (addObjectEClass != null) {
+	            types.add(addObjectEClass);
+	        }
+	        return ((EClass[])types.toArray(new EClass[0]));
+	        
+	    /*  return isStructuredUDTSupported ? new EClass[] {
+	                SQLDataTypesPackage.eINSTANCE.getDistinctUserDefinedType(),
+	                SQLDataTypesPackage.eINSTANCE.getStructuredUserDefinedType()
+	        }
+	        : new EClass[] { SQLDataTypesPackage.eINSTANCE.getDistinctUserDefinedType() };
+	    */
+	}
+
+	//@Override
+	public boolean shouldDisplayCreate() {
+		return true;
+	}
+
+	//@Override
+	public boolean shouldDisplayAdd() {
+		return false;
+	}
+
+	protected boolean isDistinctTypeSupported() {
+	    boolean isSupported = false;
+	    Object parent = getParent();
+	    if (parent != null && parent instanceof Schema)
+	    {
+	        Database db = ((Schema)parent).getDatabase();
+	        if (db != null)
+	        {
+	            isSupported = isCreateDistinctTypeSupported(RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(db));
+	        }
+	    }
+	        
+	    return isSupported;
+	}
+
+	protected boolean isStructuredUserDefinedTypeSupported() {
+		boolean isSupported = false;
+		// check with vendor doc for structured UDT support
+		Object parent = getParent();
+		if (parent != null && parent instanceof Schema) {
+			Database db = ((Schema)parent).getDatabase();
+			if (db != null) {
+				isSupported = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(db).supportsStructuredUserDefinedType();	
+			}			
+		}
+		return isSupported;
+	}
+
+	   /**
+     * Gets whether or not Array data type is supported
+     * @return true if array type is supported, false if not
+     */
+    protected boolean isArrayTypeSupported()
+    {       
+        boolean isSupported = false;
+        Object parent = getParent();
+        if (parent != null && parent instanceof Schema)
+        {
+            Database db = ((Schema)parent).getDatabase();
+            if (db != null)
+            {
+                isSupported = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(db).supportsArrayDataType();
+            }
+        }
+        return isSupported; 
+    }
+    
+    /**
+     * Gets whether or not Row data type is supported
+     * @return true if Row data type is supported, false if not
+     */
+    protected boolean isRowTypeSupported()
+    {       
+        boolean isSupported = false;
+        Object parent = getParent();
+        if (parent != null && parent instanceof Schema)
+        {
+            Database db = ((Schema)parent).getDatabase();
+            if (db != null)
+            {
+                isSupported = isCreateRowTypeSupported(RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(db));
+                if (isSupported) {
+                    isSupported = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(db).supportsRowDataType();   
+                }               
+            }
+        }
+        return isSupported; 
+    }
+    
+    protected void setAddedObjectValues(IAddObjectProvider provider) {
+        Object objParent = getParent();
+        if (objParent != null) {
+            addObjectDescriptor = provider.getCreateImageDescriptor(objParent);
+            addObjectLabel = provider.getCreateLabel(objParent);
+            addObjectEClass = provider.getCreateType(objParent);
+        }
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/UserNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/UserNode.java
new file mode 100644
index 0000000..f42a01b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/UserNode.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.content.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IUserNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.icons.ImageDescription;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual.VirtualNode;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualCreationNode;
+import org.eclipse.datatools.connectivity.sqm.internal.core.containment.GroupID;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.SQLAccessControlPackage;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.jface.resource.ImageDescriptor;
+
+public class UserNode extends VirtualNode implements IVirtualCreationNode, IUserNode {
+
+	public UserNode(String name, String displayName, Object parent) {
+		super(name, displayName, parent);
+	}
+
+	public ImageDescriptor[] getCreateImageDescriptor() {
+		return new ImageDescriptor[] {ImageDescription.getUserDescriptor()};
+	}
+
+	public String[] getCreateLabel() {
+		return new String[] {ResourceLoader.getResourceLoader().queryString("SCHEMA_MANAGEMENT_CREATE_USER")};
+	}
+
+	public EClass[] getCreateType() {
+		return new EClass[] {SQLAccessControlPackage.eINSTANCE.getUser()};
+	}
+
+	public boolean shouldDisplayAdd() {
+		return false;
+	}
+
+	public boolean shouldDisplayCreate() {
+		return true;
+	}
+
+	public String getGroupID() {
+		return GroupID.USER;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/ViewNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/ViewNode.java
new file mode 100644
index 0000000..8e774cb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/ViewNode.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.content.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter.IFilterNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IViewNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.icons.ImageDescription;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual.VirtualNode;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.connectivity.sqm.internal.core.containment.GroupID;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.jface.resource.ImageDescriptor;
+
+
+/**
+ * @author ljulien
+ */
+public class ViewNode extends VirtualNode implements IViewNode, IFilterNode
+{
+	/**
+	 * @param name
+	 * @param displayName
+	 */
+	public ViewNode(String name, String displayName, Object parent)
+	{
+		super(name, displayName, parent);
+	}
+
+    public String getGroupID ()
+    {
+        return GroupID.VIEW;
+    }
+
+    public String getFilterName() {
+    	return getFilterName(ConnectionFilter.VIEW_FILTER);
+	}
+
+    //@Override
+	public ImageDescriptor[] getCreateImageDescriptor() {
+		return new ImageDescriptor[] { 
+				ImageDescription.getViewDescriptor()
+		};
+	}
+
+	//@Override
+	public String[] getCreateLabel() {
+		return new String[] {
+				ResourceLoader.getResourceLoader().queryString("SCHEMA_MANAGEMENT_CREATE_VIEW")
+		};
+	}
+
+	//@Override
+	public EClass[] getCreateType() {
+		return new EClass[] {
+				SQLTablesPackage.eINSTANCE.getViewTable()
+		};
+	}
+
+	//@Override
+	public boolean shouldDisplayCreate() {
+		return true;
+	}
+
+	//@Override
+	public boolean shouldDisplayAdd() {
+		return false;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/VirtualNodeServiceFactory.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/VirtualNodeServiceFactory.java
new file mode 100644
index 0000000..0dbee84
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/VirtualNodeServiceFactory.java
@@ -0,0 +1,160 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.content.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.services.IVirtualNodeServiceFactory;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IAuthorizationIDNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.ICatalogNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IColumnNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IConstraintNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IDependencyNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IGroupNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IIndexNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IRoleNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.ISchemaNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.ISequenceNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IStoredProcedureNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.ITableNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.ITriggerNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IUDFNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IUDTNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IUserNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IViewNode;
+
+
+/**
+ * @author ljulien
+ */
+public class VirtualNodeServiceFactory implements IVirtualNodeServiceFactory
+{
+	public static final VirtualNodeServiceFactory INSTANCE = new VirtualNodeServiceFactory ();
+	
+	/**
+	 * @see org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.services.IVirtualNodeServiceFactory#makeColumnNode(java.lang.String, java.lang.String)
+	 */
+	public IColumnNode makeColumnNode (String name, String displayName, Object parent)
+	{
+		return new ColumnNode (name, displayName, parent);
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.services.IVirtualNodeServiceFactory#makeSchemaNode(java.lang.String, java.lang.String)
+	 */
+	public ISchemaNode makeSchemaNode(String name, String displayName, Object parent)
+	{
+		return new SchemaNode (name, displayName, parent);
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.services.IVirtualNodeServiceFactory#makeTableNode(java.lang.String, java.lang.String)
+	 */
+	public ITableNode makeTableNode(String name, String displayName, Object parent)
+	{
+		return new TableNode(name, displayName, parent);
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.services.IVirtualNodeServiceFactory#makeSequenceNode(java.lang.String, java.lang.String)
+	 */
+	public ISequenceNode makeSequenceNode(String name, String displayName, Object parent)
+	{
+		return new SequenceNode (name, displayName, parent);
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.services.IVirtualNodeServiceFactory#makeUDTNode(java.lang.String, java.lang.String)
+	 */
+	public IUDTNode makeUDTNode(String name, String displayName, Object parent)
+	{
+		return new UDTNode (name, displayName, parent);
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.services.IVirtualNodeServiceFactory#makeViewNode(java.lang.String, java.lang.String)
+	 */
+	public IViewNode makeViewNode(String name, String displayName, Object parent)
+	{
+		return new ViewNode (name, displayName, parent);
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.services.IVirtualNodeServiceFactory#makeTriggerNode(java.lang.String, java.lang.String)
+	 */
+	public ITriggerNode makeTriggerNode(String name, String displayName, Object parent)
+	{
+		return new TriggerNode (name, displayName, parent);
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.services.IVirtualNodeServiceFactory#makeIndexNode(java.lang.String, java.lang.String)
+	 */
+	public IIndexNode makeIndexNode(String name, String displayName, Object parent)
+	{
+		return new IndexNode (name, displayName, parent);
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.services.IVirtualNodeServiceFactory#makeConstraintNode(java.lang.String, java.lang.String)
+	 */
+	public IConstraintNode makeConstraintNode(String name, String displayName, Object parent)
+	{
+		return new ConstraintNode (name, displayName, parent);
+	}
+	
+	/**
+	 * @see org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.services.IVirtualNodeServiceFactory#makeDependencyNode(java.lang.String, java.lang.String, java.lang.Object)
+	 */
+	public IDependencyNode makeDependencyNode (String name, String displayName, Object parent)
+	{
+	    return new DependencyNode (name, displayName, parent);
+	}
+
+    /**
+     * 
+     */
+    public IStoredProcedureNode makeStoredProcedureNode(String name, String displayName, Object parent)
+    {
+        return new StoredProcedureNode (name, displayName, parent);
+    }
+
+    /**
+     * 
+     */
+    public IUDFNode makeUDFNode(String name, String displayName, Object parent)
+    {
+        return new UDFNode (name, displayName, parent);
+    }
+
+	public ICatalogNode makeCatalogNode(String name, String displayName, Object parent)
+	{
+		return new CatalogNode (name, displayName, parent);
+	}
+
+	public IAuthorizationIDNode makeAuthorizationIdNode(String name, String displayName, Object parent)
+	{
+		return new AuthorizationIDNode(name, displayName, parent);
+	}
+
+	public IGroupNode makeGroupNode(String name, String displayName, Object parent)
+	{
+		return new GroupNode(name, displayName, parent);
+	}
+
+	public IRoleNode makeRoleNode(String name, String displayName, Object parent)
+	{
+		return new RoleNode(name, displayName, parent);
+	}
+
+	public IUserNode makeUserNode(String name, String displayName, Object parent)
+	{
+		return new UserNode(name, displayName, parent);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/IBookmarkDecorationService.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/IBookmarkDecorationService.java
new file mode 100644
index 0000000..aa0a2a3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/IBookmarkDecorationService.java
@@ -0,0 +1,9 @@
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators;
+
+/**
+ * @author ljulien
+ */
+public interface IBookmarkDecorationService extends IDecorationService
+{
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/IColumnDecorationService.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/IColumnDecorationService.java
new file mode 100644
index 0000000..0eb7da8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/IColumnDecorationService.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators;
+
+/**
+ * @author ljulien
+ */
+public interface IColumnDecorationService extends IDecorationService
+{
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/IDecorationService.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/IDecorationService.java
new file mode 100644
index 0000000..fba1146
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/IDecorationService.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators;
+
+
+/**
+ * @author ljulien
+ */
+public interface IDecorationService
+{
+	public void refreshDecoration (Object element);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/IDependencyDecorationService.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/IDependencyDecorationService.java
new file mode 100644
index 0000000..3a8f481
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/IDependencyDecorationService.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators;
+
+/**
+ * @author ljulien
+ */
+public interface IDependencyDecorationService extends IDecorationService
+{
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/IFilterNodeDecorationService.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/IFilterNodeDecorationService.java
new file mode 100644
index 0000000..20c4bc0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/IFilterNodeDecorationService.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators;
+
+/**
+ * @author ljulien
+ */
+public interface IFilterNodeDecorationService extends IDecorationService
+{
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/IIndexTriggerDecorationService.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/IIndexTriggerDecorationService.java
new file mode 100644
index 0000000..ad1eeda
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/IIndexTriggerDecorationService.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators;
+
+/**
+ * @author ljulien
+ */
+public interface IIndexTriggerDecorationService extends IDecorationService
+{
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/impl/AbstractDecorationService.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/impl/AbstractDecorationService.java
new file mode 100644
index 0000000..ba1c5f3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/impl/AbstractDecorationService.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators.impl;
+
+import java.util.Map;
+import java.util.WeakHashMap;
+
+import org.eclipse.jface.viewers.ILightweightLabelDecorator;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.LabelProviderChangedEvent;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author ljulien
+ */
+public abstract class AbstractDecorationService extends LabelProvider implements ILightweightLabelDecorator
+{
+	protected Map objectMap = new WeakHashMap();
+
+	public void refreshDecoration (Object element)
+	{
+	    fireLabelChangedEvent (new LabelProviderChangedEvent(this, element));
+	}
+
+	/**
+	 * Will notify the Model Explorer to redecorate
+	 * @param event
+	 */
+	protected void fireLabelChangedEvent(final LabelProviderChangedEvent event)
+	{
+	    if (!(event.getElements().length == 1 && event.getElements()[0] == null))
+	    {
+			Display.getDefault().asyncExec(new Runnable()
+			{
+				public void run()
+				{
+					fireLabelProviderChanged(event);
+				}
+			});
+	    }
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/impl/BookmarkDecorationService.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/impl/BookmarkDecorationService.java
new file mode 100644
index 0000000..5f05c75
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/impl/BookmarkDecorationService.java
@@ -0,0 +1,99 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators.impl;
+
+import java.util.Arrays;
+import java.util.Iterator;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators.IBookmarkDecorationService;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.icons.ImageDescription;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.ElementIDUtil;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.DataToolsUIConstants;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.viewers.IDecoration;
+
+/**
+ * @author ljulien
+ */
+public class BookmarkDecorationService extends AbstractDecorationService implements IBookmarkDecorationService
+{
+    private static final String ELEMENT_ID = DataToolsUIConstants.BOOKMARK_ELEMENT_ID;
+    private static final String BLANK_ID = ""; //$NON-NLS-1$
+    
+    private String getElementId (Object object)
+    {
+        return ElementIDUtil.INSTANCE.getElementId(object);
+    }
+    
+	private boolean hasBookmark(Object object) 
+	{
+		IMarker[] bookmarks = null;
+		IResource resource = null;
+		try 
+		{
+		    if (object instanceof EObject)
+		    {
+		        bookmarks = ResourcesPlugin.getWorkspace().getRoot().findMarkers(DataToolsUIConstants.SUPER_BOOKMARK, true, IResource.DEPTH_INFINITE);
+		    }
+		    else if (object instanceof IAdaptable && (resource = (IResource) ((IAdaptable)object).getAdapter(IResource.class)) != null)
+		    {
+		        bookmarks = resource.isAccessible()? resource.findMarkers(DataToolsUIConstants.SUPER_BOOKMARK, true, IResource.DEPTH_INFINITE) : null;
+		    }
+		} 
+		catch (CoreException e) 
+		{
+		    e.printStackTrace();
+		}
+		
+		if (bookmarks == null)
+		{
+		    return false;
+		}
+		
+		IMarker foundMarker = null;
+		String elementID = getElementId(resource != null ? resource : object);
+		String attribute;
+		
+		for (Iterator i = Arrays.asList(bookmarks).iterator(); i.hasNext();) 
+		{
+			IMarker marker = (IMarker) i.next();
+			attribute = (String) marker.getAttribute(ELEMENT_ID, BLANK_ID);
+			if (!attribute.equals(BLANK_ID) && attribute.equals(elementID)) 
+			{
+				foundMarker = marker;
+				break;
+			}
+		}
+		
+		if (foundMarker != null) 
+		{
+			return true;
+		}
+
+		return false;
+	}
+
+	/**
+     * Will decorate the element with the bookmark icon
+     */
+    public void decorate(Object element, IDecoration decoration)
+    {
+        if (hasBookmark (element))
+        {
+            decoration.addOverlay(ImageDescription.getBookmarkDescriptor());
+        }
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/impl/ColumnDecorationService.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/impl/ColumnDecorationService.java
new file mode 100644
index 0000000..c7e5819
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/impl/ColumnDecorationService.java
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators.impl;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators.IColumnDecorationService;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.icons.ImageDescription;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.preferences.ColumnDecoratorUtil;
+import org.eclipse.datatools.connectivity.sqm.core.ui.services.IDataToolsUIServiceManager;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.jface.viewers.IDecoration;
+
+
+/**
+ * @author ljulien
+ */
+public class ColumnDecorationService extends AbstractDecorationService implements IColumnDecorationService
+{
+    private void decorate (Column column, IDecoration decoration)
+	{
+	    boolean pk = column.isPartOfPrimaryKey();
+	    boolean fk = column.isPartOfForeignKey();
+	    boolean nullable = column.isNullable();
+	    String dataType = IDataToolsUIServiceManager.INSTANCE.getColumnHelperService().getDataType(column);
+	    
+		if (fk && pk)
+		{
+			decoration.addSuffix(ColumnDecoratorUtil.getPKFKColumnDecoration(dataType));
+			decoration.addOverlay(ImageDescription.getPKFKDecorationDescriptor());
+		}
+		else if (fk && nullable)
+		{
+		    decoration.addSuffix(ColumnDecoratorUtil.getFKNullableColumnDecoration(dataType));
+			decoration.addOverlay(ImageDescription.getFKDecorationDescriptor());
+		}
+		else if (fk)
+		{
+		    decoration.addSuffix(ColumnDecoratorUtil.getFKColumnDecoration(dataType));
+			decoration.addOverlay(ImageDescription.getFKDecorationDescriptor());
+		}
+		else if (pk)
+		{
+		    decoration.addSuffix(ColumnDecoratorUtil.getPKColumnDecoration(dataType));
+			decoration.addOverlay(ImageDescription.getPKDecorationDescriptor());
+		}
+		else if (nullable)
+		{
+		    decoration.addSuffix(ColumnDecoratorUtil.getNullableColumnDecoration(dataType));
+		}
+		else
+		{
+		    decoration.addSuffix(ColumnDecoratorUtil.getColumnDecoration(dataType));
+		}
+ 	}
+	
+	/**
+	 * @see org.eclipse.jface.viewers.ILightweightLabelDecorator#decorate(java.lang.Object, org.eclipse.jface.viewers.IDecoration)
+	 */
+	public void decorate(Object column, IDecoration decoration)
+	{
+	    if (column instanceof Column)
+	    {
+	        decorate ((Column)column, decoration);
+	    }
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/impl/DependencyDecorationService.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/impl/DependencyDecorationService.java
new file mode 100644
index 0000000..1b6ebb6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/impl/DependencyDecorationService.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators.impl;
+
+import java.text.MessageFormat;
+
+import org.eclipse.datatools.modelbase.sql.schema.Dependency;
+import org.eclipse.emf.ecore.ENamedElement;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.viewers.IDecoration;
+
+/**
+ * @author ljulien
+ */
+public class DependencyDecorationService extends AbstractDecorationService
+{
+    private static final String TARGET_NAME = " --> ({0})"; //$NON-NLS-1$
+
+    private void decorate (Dependency dependency, IDecoration decoration)
+    {
+        EObject eObject = dependency.getTargetEnd();
+        if (eObject instanceof ENamedElement)
+        {
+            decoration.addSuffix(MessageFormat.format(TARGET_NAME, new String [] {((ENamedElement)eObject).getName()}));
+        }
+    }
+    
+	/**
+	 * @see org.eclipse.jface.viewers.ILightweightLabelDecorator#decorate(java.lang.Object, org.eclipse.jface.viewers.IDecoration)
+	 */
+	public void decorate(Object object, IDecoration decoration)
+	{
+	    if (object instanceof Dependency)
+	    {
+	        decorate ((Dependency)object, decoration);
+	    }
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/impl/FilterNodeDecorationService.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/impl/FilterNodeDecorationService.java
new file mode 100644
index 0000000..e4da82b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/impl/FilterNodeDecorationService.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators.impl;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter.FilterUtil;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter.IFilterNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators.IFilterNodeDecorationService;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.icons.ImageDescription;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.jface.viewers.IDecoration;
+import org.eclipse.jface.viewers.ILightweightLabelDecorator;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.LabelProviderChangedEvent;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author ljulien
+ */
+public class FilterNodeDecorationService extends AbstractDecorationService implements ILightweightLabelDecorator, IFilterNodeDecorationService
+{
+    private static final String FILTERED = " " + ResourceLoader.getResourceLoader().queryString("DATATOOLS.SERVER.UI.EXPLORER.FILTER_DECORATION");  //$NON-NLS-1$//$NON-NLS-2$
+    
+    private boolean hasFiltering (IFilterNode filterNode)
+    {
+        return FilterUtil.hasFilter(filterNode);
+    }
+    
+    /**
+     * @see org.eclipse.jface.viewers.ILightweightLabelDecorator#decorate(java.lang.Object, org.eclipse.jface.viewers.IDecoration)
+     */
+    public void decorate(Object element, IDecoration decoration)
+    {
+        IFilterNode filterNode = (IFilterNode) element;
+        if (hasFiltering(filterNode))
+        {
+            decoration.addOverlay(ImageDescription.getFilterDecorationDescriptor(), IDecoration.BOTTOM_RIGHT);
+            decoration.addSuffix(FILTERED);
+        }
+    }
+
+    /**
+     * @see org.eclipse.wst.rdb.core.internal.ui.explorer.providers.decorators.IDecorationService#refreshDecoration(org.eclipse.core.runtime.IAdaptable[])
+     */
+    public void refreshDecoration(Object[] elements)
+    {
+        fireLabelChangedEvent(new LabelProviderChangedEvent(this, elements));
+    }
+
+    /**
+     * Will notify the Model Explorer to redecorate
+     * @param event
+     */
+    protected void fireLabelChangedEvent(final LabelProviderChangedEvent event)
+    {
+        Display.getDefault().asyncExec(new Runnable()
+        {
+            public void run()
+            {
+                fireLabelProviderChanged(event);
+            }
+        });
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/impl/ForeignKeyDecorationService.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/impl/ForeignKeyDecorationService.java
new file mode 100644
index 0000000..baf2b17
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/impl/ForeignKeyDecorationService.java
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators.impl;
+
+import java.text.MessageFormat;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.UniqueConstraint;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.jface.viewers.IDecoration;
+
+
+/**
+ * @author ljulien
+ */
+public class ForeignKeyDecorationService extends AbstractDecorationService
+{
+	private static final String FOREIGN_KEY_NAME = " (-> {0})"; //$NON-NLS-1$
+	private static final String INACTIVE_RELATIONSHIP = ResourceLoader.getResourceLoader().queryString("DATATOOLS.PROJECT.UI.INACTIVE_RELATIONSHIP"); //$NON-NLS-1$
+	
+	/**
+	 * @return The formated Decorated Name for the Foreign key
+	 */
+	private String getForeignKeyDecoration(ForeignKey foreignKey)
+	{
+		String parentTableName = null;
+		SQLObject uc = foreignKey.getUniqueConstraint();
+		if(uc != null) 
+		{
+	         Table tbl = ((UniqueConstraint)uc).getBaseTable();
+	         if(tbl != null) {
+	             parentTableName = tbl.getName();
+	         }
+	         else {
+	             parentTableName = "";
+	         }
+		}
+		else if ((uc = foreignKey.getUniqueIndex()) != null) 
+		{
+			parentTableName = ((Index)uc).getTable().getName();
+		}
+		else 
+		{
+		    parentTableName = INACTIVE_RELATIONSHIP;	   
+		}
+		return MessageFormat.format(FOREIGN_KEY_NAME, new String[] {parentTableName});
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.ILightweightLabelDecorator#decorate(java.lang.Object, org.eclipse.jface.viewers.IDecoration)
+	 */
+	public void decorate(Object element, IDecoration decoration)
+	{
+		if (element instanceof ForeignKey)
+		{
+			decoration.addSuffix(getForeignKeyDecoration((ForeignKey)element));
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/impl/IndexTriggerDecorationService.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/impl/IndexTriggerDecorationService.java
new file mode 100644
index 0000000..72eabcc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/decorators/impl/IndexTriggerDecorationService.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators.impl;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.helpers.IndexHelper;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.helpers.TriggerHelper;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators.IIndexTriggerDecorationService;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+import org.eclipse.jface.viewers.IDecoration;
+
+/**
+ * @author ljulien
+ */
+public class IndexTriggerDecorationService extends AbstractDecorationService implements IIndexTriggerDecorationService
+{
+    private String getDecoration (Object element)
+    {
+        if (element instanceof Trigger)
+        {
+            return TriggerHelper.INSTANCE.getDecoration ((Trigger)element);
+        }
+        else if (element instanceof Index)
+        {
+            return IndexHelper.INSTANCE.getDecoration ((Index)element);
+        }
+        return null;
+    }
+    
+    public void decorate(Object element, IDecoration decoration)
+    {
+        decoration.addSuffix(getDecoration(element));
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/label/AuthorizationSelector.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/label/AuthorizationSelector.java
new file mode 100644
index 0000000..86e6958
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/label/AuthorizationSelector.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.label;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinitionRegistry;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.services.LabelSelector;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.User;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+public class AuthorizationSelector implements LabelSelector {
+	private static final DatabaseDefinitionRegistry REGISTRY = RDBCorePlugin
+			.getDefault().getDatabaseDefinitionRegistry();
+
+	public boolean select(Object element) {
+		Database database = ((User) element).getDatabase();
+		if (database != null) {
+			DatabaseDefinition dd = REGISTRY.getDefinition(database);
+			return dd.isAuthorizationIdentifierSupported()
+					&& !dd.isUserSupported();
+		}
+		return false;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/label/UserSelector.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/label/UserSelector.java
new file mode 100644
index 0000000..f9f0098
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/label/UserSelector.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.label;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinitionRegistry;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.services.LabelSelector;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.User;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+public class UserSelector implements LabelSelector {
+	private static final DatabaseDefinitionRegistry REGISTRY = RDBCorePlugin
+			.getDefault().getDatabaseDefinitionRegistry();
+
+	public boolean select(Object element) {
+		Database database = ((User) element).getDatabase();
+		return database != null ? REGISTRY.getDefinition(database)
+				.isUserSupported() : false;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/services/IExplorerInteractionService.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/services/IExplorerInteractionService.java
new file mode 100644
index 0000000..93278f4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/services/IExplorerInteractionService.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.services;
+
+import org.eclipse.jface.viewers.ISelection;
+
+
+/**
+ * @author ljulien
+ */
+public interface IExplorerInteractionService
+{
+	public void expandNode (ISelection selection);
+	public void selectNode (ISelection selection);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/services/IVirtualNodeServiceFactory.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/services/IVirtualNodeServiceFactory.java
new file mode 100644
index 0000000..9819d0d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/services/IVirtualNodeServiceFactory.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.services;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IAuthorizationIDNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.ICatalogNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IColumnNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IConstraintNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IDependencyNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IGroupNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IIndexNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IRoleNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.ISchemaNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.ISequenceNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IStoredProcedureNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.ITableNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.ITriggerNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IUDFNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IUDTNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IUserNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IViewNode;
+
+
+/**
+ * @author ljulien
+ */
+public interface IVirtualNodeServiceFactory
+{
+	public IColumnNode makeColumnNode (String name, String displayName, Object parent);
+	public ISchemaNode makeSchemaNode (String name, String displayName, Object parent);
+	public ITableNode makeTableNode (String name, String displayName, Object parent);
+	public IStoredProcedureNode makeStoredProcedureNode (String name, String displayName, Object parent);
+	public IUDFNode makeUDFNode (String name, String displayName, Object parent);
+	public ISequenceNode makeSequenceNode (String name, String displayName, Object parent);
+	public IUDTNode makeUDTNode (String name, String displayName, Object parent);
+	public IViewNode makeViewNode (String name, String displayName, Object parent);
+	public ITriggerNode makeTriggerNode (String name, String displayName, Object parent);
+	public IIndexNode makeIndexNode (String name, String displayName, Object parent);
+	public IConstraintNode makeConstraintNode (String name, String displayName, Object parent);
+	public IDependencyNode makeDependencyNode (String name, String displayName, Object parent);
+	public ICatalogNode makeCatalogNode (String name, String displayName, Object parent);
+	public IGroupNode makeGroupNode(String name, String displayName, Object parent);
+	public IAuthorizationIDNode makeAuthorizationIdNode(String name, String displayName, Object parent);
+	public IUserNode makeUserNode(String name, String displayName, Object parent);
+	public IRoleNode makeRoleNode(String name, String displayName, Object parent);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IAuthorizationIDNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IAuthorizationIDNode.java
new file mode 100644
index 0000000..fee7e21
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IAuthorizationIDNode.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+
+public interface IAuthorizationIDNode extends IVirtualNode
+{
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/ICatalogNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/ICatalogNode.java
new file mode 100644
index 0000000..5062666
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/ICatalogNode.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+
+public interface ICatalogNode extends IVirtualNode {
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IColumnNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IColumnNode.java
new file mode 100644
index 0000000..86a40cc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IColumnNode.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualCreationNode;
+
+/**
+ * @author ljulien
+ */
+public interface IColumnNode extends IVirtualCreationNode
+{
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IConstraintNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IConstraintNode.java
new file mode 100644
index 0000000..9c4fd51
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IConstraintNode.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualCreationNode;
+
+/**
+ * @author ljulien
+ */
+public interface IConstraintNode extends IVirtualCreationNode
+{
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IDependencyNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IDependencyNode.java
new file mode 100644
index 0000000..fe0505b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IDependencyNode.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+
+/**
+ * @author ljulien
+ */
+public interface IDependencyNode extends IVirtualNode
+{
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IGroupIDNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IGroupIDNode.java
new file mode 100644
index 0000000..1ff5908
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IGroupIDNode.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual;
+
+/**
+ * @author ljulien
+ */
+public interface IGroupIDNode
+{
+    public static final String CONNECTION = "org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.connection"; //$NON-NLS-1$
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IGroupNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IGroupNode.java
new file mode 100644
index 0000000..0bc7f2c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IGroupNode.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+
+public interface IGroupNode extends IVirtualNode
+{
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IIndexNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IIndexNode.java
new file mode 100644
index 0000000..4ef8a23
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IIndexNode.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualCreationNode;
+
+/**
+ * @author ljulien
+ */
+public interface IIndexNode extends IVirtualCreationNode
+{
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IKeyNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IKeyNode.java
new file mode 100644
index 0000000..01307b2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IKeyNode.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+
+/**
+ * @author ljulien
+ */
+public interface IKeyNode extends IVirtualNode
+{
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IRoleNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IRoleNode.java
new file mode 100644
index 0000000..21a0226
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IRoleNode.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualCreationNode;
+
+public interface IRoleNode extends IVirtualCreationNode {
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/ISchemaNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/ISchemaNode.java
new file mode 100644
index 0000000..b7de76a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/ISchemaNode.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualCreationNode;
+
+/**
+ * @author ljulien
+ */
+public interface ISchemaNode extends IVirtualCreationNode
+{
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/ISequenceNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/ISequenceNode.java
new file mode 100644
index 0000000..a9ec111
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/ISequenceNode.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualCreationNode;
+
+/**
+ * @author ljulien
+ */
+public interface ISequenceNode extends IVirtualCreationNode
+{
+	
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IServerManagerNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IServerManagerNode.java
new file mode 100644
index 0000000..3281c9b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IServerManagerNode.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+
+
+/**
+ * @author ljulien
+ */
+public interface IServerManagerNode extends IVirtualNode
+{
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IStoredProcedureNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IStoredProcedureNode.java
new file mode 100644
index 0000000..f40322a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IStoredProcedureNode.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+
+/**
+ * @author ljulien
+ */
+public interface IStoredProcedureNode extends IVirtualNode
+{
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/ITableNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/ITableNode.java
new file mode 100644
index 0000000..93969a3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/ITableNode.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualCreationNode;
+
+/**
+ * @author ljulien
+ */
+public interface ITableNode extends IVirtualCreationNode
+{
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/ITriggerNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/ITriggerNode.java
new file mode 100644
index 0000000..c706b85
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/ITriggerNode.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualCreationNode;
+
+/**
+ * @author ljulien
+ */
+public interface ITriggerNode extends IVirtualCreationNode
+{
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IUDFNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IUDFNode.java
new file mode 100644
index 0000000..9352f78
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IUDFNode.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+
+/**
+ * @author ljulien
+ */
+public interface IUDFNode extends IVirtualNode
+{
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IUDTNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IUDTNode.java
new file mode 100644
index 0000000..7aa5bd8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IUDTNode.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualCreationNode;
+
+/**
+ * @author ljulien
+ */
+public interface IUDTNode extends IVirtualCreationNode
+{
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IUserNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IUserNode.java
new file mode 100644
index 0000000..d0e04af
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IUserNode.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualCreationNode;
+
+public interface IUserNode extends IVirtualCreationNode {
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IViewNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IViewNode.java
new file mode 100644
index 0000000..a711d6f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/virtual/IViewNode.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualCreationNode;
+
+/**
+ * @author ljulien
+ */
+public interface IViewNode extends IVirtualCreationNode
+{
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/icons/ImageDescription.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/icons/ImageDescription.java
new file mode 100644
index 0000000..4174194
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/icons/ImageDescription.java
@@ -0,0 +1,164 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.icons;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ImagePath;
+import org.eclipse.jface.resource.ImageDescriptor;
+
+
+/**
+ * @author ljulien
+ */
+public class ImageDescription
+{
+    /**
+     * @param urlPath the path to the picture
+     * @return the descriptor for this url
+     */
+    private static ImageDescriptor getDescriptor (String urlPath)
+    {
+        try
+        {
+            return ImageDescriptor.createFromURL(new URL(ImagePath.CORE_UI_ICONS_FOLDER_URL + urlPath));
+        }
+        catch (MalformedURLException e)
+        {
+            e.printStackTrace();
+            return null;
+        }
+    }
+    
+	public static ImageDescriptor getBookmarkDescriptor ()
+	{
+	    return getDescriptor (ImagePath.BOOKMARK);
+	}
+	
+	public static ImageDescriptor getFKDecorationDescriptor ()
+	{
+		return getDescriptor (ImagePath.FK_DECORATION);
+	}
+	
+	public static ImageDescriptor getRoleDescriptor ()
+	{
+		return getDescriptor (ImagePath.ROLE);
+	}
+	public static ImageDescriptor getUserDescriptor ()
+	{
+		return getDescriptor (ImagePath.USER);
+	}
+	public static ImageDescriptor getGroupDescriptor ()
+	{
+		return getDescriptor (ImagePath.GROUP);
+	}
+	
+	public static ImageDescriptor getColumnDescriptor ()
+	{
+	    return getDescriptor (ImagePath.COLUMN);
+	}
+	
+	public static ImageDescriptor getPKDescriptor ()
+	{
+	    return getDescriptor (ImagePath.PK_COLUMN);
+	}
+	
+	public static ImageDescriptor getTriggerDescriptor ()
+	{
+	    return getDescriptor (ImagePath.TRIGGER);
+	}
+	
+	public static ImageDescriptor getIndexDescriptor ()
+	{
+	    return getDescriptor (ImagePath.INDEX);
+	}
+	
+	public static ImageDescriptor getTableDescriptor ()
+	{
+	    return getDescriptor (ImagePath.TABLE);
+	}
+	
+	public static ImageDescriptor getViewDescriptor ()
+	{
+	    return getDescriptor (ImagePath.VIEW);
+	}
+	
+	public static ImageDescriptor getPKFKDecorationDescriptor ()
+	{
+		return getDescriptor (ImagePath.PKFK_DECORATION);
+	}
+	
+	public static ImageDescriptor getPKDecorationDescriptor ()
+	{
+		return getDescriptor (ImagePath.PK_DECORATION);
+	}
+	
+	public static ImageDescriptor getNullableColumnDescriptor ()
+	{
+		return getDescriptor (ImagePath.NULL_COLUMN_DECORATION);
+	}
+	
+	public static ImageDescriptor getSequenceDescriptor ()
+	{
+	    return getDescriptor (ImagePath.SEQUENCE);
+	}
+	
+	public static ImageDescriptor getGenerateDDLWizard ()
+	{
+		return getDescriptor (ImagePath.GENERATE_DDL_WIZARD);
+	}
+	
+	public static ImageDescriptor getServerExplorer ()
+	{
+	    return getDescriptor (ImagePath.SERVER_EXPLORER);
+	}
+	
+	public static ImageDescriptor getGenerateCodeDescriptor ()
+	{
+		return getDescriptor(ImagePath.GENERATE_CODE);
+	}
+
+	public static ImageDescriptor getSchemaDescriptor ()
+	{
+		return getDescriptor(ImagePath.SCHEMA);
+	}
+
+	public static ImageDescriptor getTableCheckConstraintDescriptor()
+	{
+		return getDescriptor (ImagePath.TABLECHECKCONSTRAINT);
+	}
+
+	public static ImageDescriptor getUDTDescriptor()
+	{
+		return getDescriptor (ImagePath.UDT);
+	}
+
+	public static ImageDescriptor getDatabaseDescriptor ()
+	{
+		return getDescriptor (ImagePath.DATABASE);
+	}
+	
+    public static ImageDescriptor getSampleContent ()
+    {
+        return getDescriptor (ImagePath.SAMPLE_CONTENT);
+    }
+    
+    public static ImageDescriptor getFilterDecorationDescriptor ()
+    {
+    	return getDescriptor (ImagePath.FILTER_DECORATION);
+    }
+    
+    public static ImageDescriptor getFilterWizardDescriptor ()
+    {
+        return getDescriptor (ImagePath.FILTER_WIZARD);
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/icons/critical.ico b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/icons/critical.ico
new file mode 100644
index 0000000..502f1ac
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/icons/critical.ico
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/icons/databaseToModelWizard.bmp b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/icons/databaseToModelWizard.bmp
new file mode 100644
index 0000000..d7822d6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/icons/databaseToModelWizard.bmp
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/icons/database_32.ico b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/icons/database_32.ico
new file mode 100644
index 0000000..ba0fa43
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/icons/database_32.ico
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/icons/modelToDatabaseWizard.bmp b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/icons/modelToDatabaseWizard.bmp
new file mode 100644
index 0000000..a5cff0a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/icons/modelToDatabaseWizard.bmp
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/icons/wizardWatermark.bmp b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/icons/wizardWatermark.bmp
new file mode 100644
index 0000000..7554d9a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/icons/wizardWatermark.bmp
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/l10n/datatoolsCoreUI.properties b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/l10n/datatoolsCoreUI.properties
new file mode 100644
index 0000000..ea77bc1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/l10n/datatoolsCoreUI.properties
@@ -0,0 +1,248 @@
+###############################################################################
+# Copyright (c) 2001, 2008 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+##
+###
+##  !!! This property file should only contain resources that are "translatable" !!!
+###
+##
+
+DATATOOLS.CORE.UI.TEST = Test
+
+#
+## Add Action
+#
+DATATOOLS.CORE.UI.NEW.COLUMN_NAME = Column 
+DATATOOLS.CORE.UI.NEW.SCHEMA_NAME = Schema
+DATATOOLS.CORE.UI.NEW.TABLE_NAME = Table
+DATATOOLS.CORE.UI.NEW.TRIGGER_NAME = Trigger
+DATATOOLS.CORE.UI.NEW.DOMAIN_NAME = Domain
+DATATOOLS.CORE.UI.NEW.SEQUENCE_NAME = Sequence
+DATATOOLS.CORE.UI.NEW.STORED_PROCEDURE_NAME = Stored_Procedure
+DATATOOLS.CORE.UI.NEW.DATABASE = New Database
+
+#
+## Label Decorations
+#
+DATATOOLS.CORE.UI.PREFERENCES.COLUMN.DECORATION = Data decorator settings:
+DATATOOLS.CORE.UI.PREFERENCES.COLUMN.TAB = Text
+DATATOOLS.CORE.UI.PREFERENCES.COLUMN.FORMAT = Specify the display format for columns in the explorer:
+DATATOOLS.CORE.UI.PREFERENCES.COLUMN.CFORMAT = &Column format:
+DATATOOLS.CORE.UI.PREFERENCES.COLUMN.VARIABLE = Add &Variables...
+DATATOOLS.CORE.UI.PREFERENCES.COLUMN.EXAMPLE = &Example:
+DATATOOLS.CORE.UI.PREFERENCES.COLUMN.TITLE = Add Variables
+DATATOOLS.CORE.UI.PREFERENCES.COLUMN.MESSAGE = Select the variables to add to the decoration format:
+DATATOOLS.CORE.UI.PREFERENCES.COLUMN.DATATYPE_DESC = {datatype} - the column datatype
+DATATOOLS.CORE.UI.PREFERENCES.COLUMN.NULLABLE_DESC = {nullable} - indicate that the column is nullable
+DATATOOLS.CORE.UI.PREFERENCES.COLUMN.PK_DESC = {primaryKey} - indicate that the column belongs to the primary key constraint
+DATATOOLS.CORE.UI.PREFERENCES.COLUMN.FK_DESC = {foreignKey} - indicate that the column belongs to the foreign key constraint
+
+DATATOOLS.CORE.UI.STATUS.CONNECTION = {0} - Connection "{1}"
+DATATOOLS.CORE.UI.STATUS.PROJECT = {0} - Project "{1}"
+
+#
+## Model Explorer Strings
+#
+DATATOOLS.CORE.UI.EXPLORER.DEPENDENCY=External Dependency
+
+#
+## Commands
+#
+DATATOOLS.CORE.UI.COMMAND.RENAMING = Renaming
+DATATOOLS.CORE.UI.COMMAND.ADD_DATABASE = Add Database
+DATATOOLS.CORE.UI.COMMAND.ADD_FOREIGN_KEY_INDEX= Add Foreign Key Index
+DATATOOLS.CORE.UI.COMMAND.ADD_PRIMARY_KEY_INDEX= Add Primary Key Index
+DATATOOLS.CORE.UI.COMMAND.ADD_SEQUENCE= Add Sequence
+DATATOOLS.CORE.UI.COMMAND.ADD_INDEX = Add Index
+DATATOOLS.CORE.UI.COMMAND.ADD_CHECK_CONSTRAINT = Add Check Constraint
+DATATOOLS.CORE.UI.COMMAND.ADD_ALIAS = Add Alias
+DATATOOLS.CORE.UI.COMMAND.ADD_UNIQUE_CONSTRAINT = Add Unique Constraint
+
+#
+## Explorer Description
+#
+DATATOOLS.CORE.UI.EXPLORER.MULTI_SELECTION= {0} items selected
+
+#
+## DnD Actions
+#
+DATATOOLS.CORE.UI.DND.MOVE = Move
+DATATOOLS.CORE.UI.DND.COPY = Copy
+DATATOOLS.CORE.UI.DND.LINK = Link
+
+#
+## Quick Fix
+#
+DATATOOLS.CORE.UI.QUICKFIX.ADD_DANGLING = Add Dangling Reference to Model
+DATATOOLS.CORE.UI.QUICKFIX.REMOVE_DANGLING = Remove Dangling Reference from Model
+
+#
+## FE Action
+#
+GENERATE_DDL_MENU_TEXT = Generate &DDL...
+
+#
+## FE and RE Wizards
+#
+FE_WIZARD_TITLEBAR_TEXT = Generate DDL
+FE_WELCOME_PAGE_TITLE_TEXT = Welcome to the Forward Engineering Wizard 
+FE_WELCOME_PAGE_DESCRIPTION_TEXT = This wizard guides you through the process of generating\na DDL script from a data model. You will be able to save\nthe script and have the option of executing the script on a\ndatabase.\r\n \r\n  ...to continue, click Next... 
+FE_COMPLETION_PAGE_TITLE_TEXT = Completing the Forward Engineering Wizard 
+FE_COMPLETION_PAGE_DESCRIPTION_TEXT = You have successfully completed the Forward Engineering Wizard. 
+FE_SELECT_OPTIONS_PAGE_HEADER_TITLE	= Select Model Elements 
+FE_SELECT_OPTIONS_PAGE_HEADER_SUBTITLE = Select the model elements that you want to generate into a DDL script. 
+FE_SELECT_DATABASE_PAGE_HEADER_TITLE = Save and Run DDL 
+FE_SELECT_DATABASE_PAGE_HEADER_SUBTITLE = Specify a path to save the generated DDL script.  You can run the DDL script by providing your database connection information. 
+FE_PROGRESS_BAR_PAGE_HEADER_TITLE = Generating DDL 
+FE_PROGRESS_BAR_PAGE_HEADER_SUBTITLE = Please wait while the forward engineering process completes. 
+COMPLETION_PAGE_TITLE_FONT = Verdana
+GENERATE_NO_MNEMONIC_LABEL_TEXT	= Generate: 
+DROP_STATEMENTS_CHECKBOX_TEXT = &Drop statements 
+TABLES_CHECKBOX_TEXT = &Tables 
+TRIGGERS_CHECKBOX_TEXT_2 = T&riggers 
+FULLY_QUALIFIED_NAMES_CHECKBOX_TEXT	= &Fully qualified names 
+COMMENTS_CHECKBOX_TEXT = &Comments 
+VIEWS_CHECKBOX_TEXT = &Views 
+QUOTED_IDENTIFIERS_CHECKBOX_TEXT = &Quoted identifiers 
+INDEXES_CHECKBOX_TEXT = &Indexes 
+TRIGGERS_CHECKBOX_TEXT=	&Triggers
+STORED_PROCEDURES_CHECKBOX_TEXT	= &Stored Procedures
+TABLESPACES_CHECKBOX_TEXT = T&ablespaces
+FILE_PATH_LABEL_TEXT = &File name:
+BROWSE_BUTTON_TEXT_2 = B&rowse... 
+EXECUTE_CHECKBOX_TEXT =	&Run 
+FORWARD_SLASH_SQL_DELIMITER_CHECKBOX_TEXT = &Use '/' as SQL statement delimiter 
+DEFAULT_FILE_EXTENSION = .ddl
+FILE_FILTER_SCRIPT_FILES = *.ddl;*.sql
+FILE_FILTER_ALL_FILES =	*.*
+FILE_FILTER_NAME_SCRIPT_FILES =	Script Files (*.ddl;*.sql)
+FILE_FILTER_NAME_ALL_FILES = All Files (*.*)
+
+#
+## SQL View Menu
+#
+DATATOOLS.CORE.UI.SQLVIEW.LINK=Link with Editor
+DATATOOLS.CORE.UI.SQLVIEW.GENERATE=Generate SQL from Editor
+
+#
+## Bookmark
+#
+DATATOOLS.PROJECT.UI.BOOKMARK.TITLE=Add Bookmark
+DATATOOLS.PROJECT.UI.BOOKMARK.MESSAGE=Enter Bookmark Name:
+
+#
+## Inactive Relationship
+#
+DATATOOLS.PROJECT.UI.INACTIVE_RELATIONSHIP = Implicit
+
+#
+## Filtering Decoration
+#
+DATATOOLS.SERVER.UI.EXPLORER.FILTER_DECORATION = [Filtered]
+
+#
+## Catalog Util
+#
+DATATOOLS.CORE.UI.LOADING=Loading
+
+DATATOOLS.CORE.UI.DIALOGS.FILTERLISTSELECTIONDIALOG.MESSAGE=Select Elements:
+DATATOOLS.CORE.UI.DIALOGS.FILTERLISTSELECTIONDIALOG.TITLE=Select Elements
+DATATOOLS.CORE.UI.DIALOGS.FILTERLISTSELECTIONDIALOG.FILTERLABEL=Apply Name Filter (? = Any character, * = Any string)
+
+#
+## Output Preferences
+#
+DATATOOLS.CORE.UI.PREFERENCES.OUTPUT.DESCRIPTION = You can specify preferences for the result sets returned.
+DATATOOLS.CORE.UI.PREFERENCES.OUTPUT.LIMIT_ROWS_RETRIEVED = &Limit number of rows retrieved
+DATATOOLS.CORE.UI.PREFERENCES.OUTPUT.MAX_ROW_RETRIEVED = Maximum &rows to retrieve:
+DATATOOLS.CORE.UI.PREFERENCES.OUTPUT.MAX_LOB_LENGTH = &Maximum bytes to retrieve for character or binary column:
+DATATOOLS.CORE.UI.PREFERENCES.OUTPUT.ERROR_INVALID_INT = Specify a value between {0} and {1}.
+
+#
+## Index and Trigger Decorations
+#
+DATATOOLS.CORE.UI.INDEX_UNIQUE.DECORATION = UNIQUE
+DATATOOLS.CORE.UI.TRIGGER_UPDATE.DECORATION = UPDATE
+DATATOOLS.CORE.UI.TRIGGER_DELETE.DECORATION = DELETE
+DATATOOLS.CORE.UI.TRIGGER_INSERT.DECORATION = INSERT
+DATATOOLS.CORE.UI.TRIGGER_BEFORE.DECORATION = BEFORE
+DATATOOLS.CORE.UI.TRIGGER_AFTER.DECORATION = AFTER
+DATATOOLS.CORE.UI.TRIGGER_INSTEADOF.DECORATION = INSTEAD OF
+
+#
+## Resource Chooser Dialog
+#
+_UI_TITLE_FILE_CHOOSER = File Selection
+_UI_TITLE_FOLDER_CHOOSER = Folder Selection
+_UI_DESCRIPTION_FILE = Enter or select a file:
+_UI_DESCRIPTION_FOLDER = Enter or select the parent folder:
+_UI_DEFAULT_MSG_NEW_ALLOWED = &Enter or select the parent folder:
+_UI_DEFAULT_MSG_SELECT_ONLY = Select the folder:
+
+#
+## Filter Dialog
+#
+_UI_TITLE_FILTER_DIALOG = Connection Filter Properties
+_UI_TITLE_FILTER = Specify Filter
+_UI_DESCRIPTION_FILTER = Specify a filter by selecting a predicate and entering a value or by indicating whether to include or exclude a selection of items.
+_UI_DESCRIPTION_SELECTION_ONLY = Specify a filter by indicating whether to include or exclude a selection of items.
+_UI_DESCRIPTION_EXPRESSION_ONLY = Specify a filter by selecting a predicate and entering a value.
+_UI_RADIO_BUTTON_EXPRESSION = &Expression
+_UI_LABEL_EXPRESSION = &Name
+_UI_COMBO_STARTS_WITH = Starts with the characters
+_UI_COMBO_NOT_START_WITH = Does not start with the characters
+_UI_COMBO_CONTAINS = Contains the characters
+_UI_COMBO_NOT_CONTAIN = Does not contain the characters
+_UI_COMBO_ENDS_WITH = Ends with the characters
+_UI_COMBO_NOT_END_WITH = Does not end with the characters
+_UI_RADIO_BUTTON_SELECTION = Se&lection
+_UI_COMBO_INCLUDE_ITEMS = Include selected items
+_UI_COMBO_EXCLUDE_ITEMS = Exclude selected items
+_UI_BUTTON_SELECT_ALL = &Select All
+_UI_BUTTON_DESELECT_ALL = &Deselect All
+_UI_CHECKBOX_DISABLE_FILTER = D&isable filter
+_UI_MESSAGE_CRITERIA_REQUIRED = Please specify filtering criteria.
+_UI_MESSAGE_NO_QUOTES = The expression value must not contain quotes.
+_UI_MESSAGE_SELECTION_REQUIRED = Please select at least one item.
+_UI_SP_FILTER_PAGE_TITLE = Stored Procedure Filter Properties
+_UI_TABLE_FILTER_PAGE_TITLE = Table Filter Properties
+_UI_SCHEMA_FILTER_PAGE_TITLE = Schema Filter Properties
+_UI_TOOLTIP_NEW = New
+_UI_TOOLTIP_DELETE = Delete
+_UI_RADIO_BUTTON_AND = Meet all conditions
+_UI_RADIO_BUTTON_OR = Meet any condition
+_UI_COMBO_PREDICATE = Predicate
+_UI_TEXT_VALUE = Value
+
+#
+## Actions for Schema Management
+#
+SCHEMA_MANAGEMENT_CREATE_SCHEMA = Schema
+SCHEMA_MANAGEMENT_CREATE_TABLE = Table
+SCHEMA_MANAGEMENT_CREATE_VIEW = View
+SCHEMA_MANAGEMENT_CREATE_INDEX = Index
+SCHEMA_MANAGEMENT_CREATE_BUFFER_POOL = Buffer Pool
+SCHEMA_MANAGEMENT_CREATE_PARTITION_GROUP = Partition Group
+SCHEMA_MANAGEMENT_CREATE_DISTINCT_TYPE = Distinct User-Defined Type
+SCHEMA_MANAGEMENT_CREATE_STRUCTURED_TYPE = Structured User-Defined Type
+SCHEMA_MANAGEMENT_CREATE_ARRAY_TYPE = Array Data Type
+SCHEMA_MANAGEMENT_CREATE_ROW_TYPE = Row Data Type
+SCHEMA_MANAGEMENT_CREATE_SEQUENCE = Sequence
+SCHEMA_MANAGEMENT_CREATE_MQT = MQT
+SCHEMA_MANAGEMENT_CREATE_ALIAS = Alias
+SCHEMA_MANAGEMENT_CREATE_TRIGGER = Trigger
+SCHEMA_MANAGEMENT_CREATE_ROLE = Role
+SCHEMA_MANAGEMENT_CREATE_USER = User
+SCHEMA_MANAGEMENT_CREATE_GROUP = Group
+#
+SCHEMA_MANAGEMENT_ADD_COLUMN = Column
+SCHEMA_MANAGEMENT_ADD_CHECK_CONSTRAINT = Check Constraint
+SCHEMA_MANAGEMENT_ADD_UNIQUE_CONSTRAINT = Unique Constraint
+SCHEMA_MANAGEMENT_ADD_FOREIGN_KEY = Foreign Key
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/preferences/ColumnDecoratorUtil.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/preferences/ColumnDecoratorUtil.java
new file mode 100644
index 0000000..f2ee5c6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/preferences/ColumnDecoratorUtil.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.preferences;
+
+/**
+ * @author ljulien
+ */
+public class ColumnDecoratorUtil
+{
+    private static final LabelDecoratorPreference preference = new LabelDecoratorPreference();
+    
+    public static String getPKFKColumnDecoration (String dataType)
+    {
+        return preference.getColumnDecoration(dataType, false, true, true);
+    }
+    public static String getPKColumnDecoration (String dataType)
+    {
+        return preference.getColumnDecoration(dataType, false, true, false);
+    }
+    public static String getFKNullableColumnDecoration (String dataType)
+    {
+        return preference.getColumnDecoration(dataType, true, false, true);
+    }
+    public static String getNullableColumnDecoration (String dataType)
+    {
+        return preference.getColumnDecoration(dataType, true, false, false);
+    }
+    public static String getFKColumnDecoration (String dataType)
+    {
+        return preference.getColumnDecoration(dataType, false, false, true);
+    }
+    public static String getColumnDecoration (String dataType)
+    {
+        return preference.getColumnDecoration(dataType, false, false, false);
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/preferences/LabelDecoratorPreference.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/preferences/LabelDecoratorPreference.java
new file mode 100644
index 0000000..a447759
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/preferences/LabelDecoratorPreference.java
@@ -0,0 +1,432 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.preferences;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.regex.PatternSyntaxException;
+
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.IHelpContextsSQMCoreUI;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.RDBCoreUIPlugin;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.connectivity.sqm.core.ui.services.IDataToolsUIServiceManager;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.help.IContextProvider;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
+import org.osgi.service.prefs.Preferences;
+
+/**
+ * @author ljulien
+ */
+public class LabelDecoratorPreference 
+	extends PreferencePage 
+	implements IWorkbenchPreferencePage, IContextProvider
+{
+    private static final String DECORATION_KEY = "org.eclipse.datatools.connectivity.sqm.core.ui.column.decoration"; //$NON-NLS-1$
+    
+    private static final String DECORATION = ResourceLoader.getResourceLoader().queryString("DATATOOLS.CORE.UI.PREFERENCES.COLUMN.DECORATION"); //$NON-NLS-1$
+    private static final String COLUMN_TAB = ResourceLoader.getResourceLoader().queryString("DATATOOLS.CORE.UI.PREFERENCES.COLUMN.TAB"); //$NON-NLS-1$
+    private static final String FORMAT = ResourceLoader.getResourceLoader().queryString("DATATOOLS.CORE.UI.PREFERENCES.COLUMN.FORMAT"); //$NON-NLS-1$
+    private static final String COLUMN_FORMAT = ResourceLoader.getResourceLoader().queryString("DATATOOLS.CORE.UI.PREFERENCES.COLUMN.CFORMAT"); //$NON-NLS-1$
+    private static final String VARIABLE = ResourceLoader.getResourceLoader().queryString("DATATOOLS.CORE.UI.PREFERENCES.COLUMN.VARIABLE"); //$NON-NLS-1$
+    private static final String EXAMPLE = ResourceLoader.getResourceLoader().queryString("DATATOOLS.CORE.UI.PREFERENCES.COLUMN.EXAMPLE"); //$NON-NLS-1$
+    
+    private static final String TITLE = ResourceLoader.getResourceLoader().queryString("DATATOOLS.CORE.UI.PREFERENCES.COLUMN.TITLE"); //$NON-NLS-1$
+    private static final String MESSAGE = ResourceLoader.getResourceLoader().queryString("DATATOOLS.CORE.UI.PREFERENCES.COLUMN.MESSAGE"); //$NON-NLS-1$
+    
+    private static final String DATATYPE_DESCRIPTION = ResourceLoader.getResourceLoader().queryString("DATATOOLS.CORE.UI.PREFERENCES.COLUMN.DATATYPE_DESC"); //$NON-NLS-1$
+    private static final String NULLABLE_DESCRIPTION = ResourceLoader.getResourceLoader().queryString("DATATOOLS.CORE.UI.PREFERENCES.COLUMN.NULLABLE_DESC"); //$NON-NLS-1$
+    private static final String PK_DESCRIPTION = ResourceLoader.getResourceLoader().queryString("DATATOOLS.CORE.UI.PREFERENCES.COLUMN.PK_DESC"); //$NON-NLS-1$
+    private static final String FK_DESCRIPTION = ResourceLoader.getResourceLoader().queryString("DATATOOLS.CORE.UI.PREFERENCES.COLUMN.FK_DESC"); //$NON-NLS-1$
+   
+    private static final String DATATYPE = "{datatype}"; //$NON-NLS-1$
+    private static final String NULLABLE = "{nullable}"; //$NON-NLS-1$
+    private static final String FK = "{foreignKey}"; //$NON-NLS-1$
+    private static final String PK = "{primaryKey}"; //$NON-NLS-1$
+
+    private static final String DATATYPE_REG = "\\{datatype\\}"; //$NON-NLS-1$
+    private static final String NULLABLE_REG = "\\{nullable\\}"; //$NON-NLS-1$
+    private static final String FK_REG = "\\{foreignKey\\}"; //$NON-NLS-1$
+    private static final String PK_REG = "\\{primaryKey\\}"; //$NON-NLS-1$
+
+    private static final String EX_DATATYPE = "VARCHAR(14)";  //$NON-NLS-1$
+    private static final String EX_NAME = "NAME"; //$NON-NLS-1$
+    private static final String EX_NULLABLE = "Nullable"; //$NON-NLS-1$
+    private static final String EX_FK = "FK"; //$NON-NLS-1$
+    private static final String EX_PK = "PK"; //$NON-NLS-1$
+    
+    private static final String BLANK = ""; //$NON-NLS-1$
+    private static final String SPACE = " "; //$NON-NLS-1$
+    private static final String BEG_BRACKET = "["; //$NON-NLS-1$
+    private static final String END_BRACKET = "]"; //$NON-NLS-1$
+    
+    private static final Preferences preferences = new InstanceScope().getNode("org.eclipse.datatools.connectivity.sqm.core.ui"); //$NON-NLS-1$
+    
+    private Text exampleText;
+    private Text columnText;
+    
+    private String getReplacement (String columnString, boolean shouldKey, String reg_key, String key, String replacement)
+    {
+        if (shouldKey)
+        {
+            return columnString.replaceAll(reg_key, replacement);
+        }
+        else 
+        {
+            int index = columnString.indexOf(key);
+            if (index != -1)
+            {
+                int previousIndex = columnString.substring(0, index).lastIndexOf("}"); //$NON-NLS-1$
+                int nextIndex = columnString.indexOf("}", columnString.substring(0, index).length()); //$NON-NLS-1$
+                nextIndex = columnString.indexOf("{", columnString.substring(0, index).length() + 1) != -1 ? ++nextIndex : -1; //$NON-NLS-1$
+                columnString = 
+                    previousIndex == -1 && nextIndex == -1?
+                            columnString.replaceAll(key, BLANK) : nextIndex == -1 ?
+                                columnString.substring(0, previousIndex+1) + columnString.substring(index + key.length(), columnString.length()) :   
+                            	previousIndex == -1 ? columnString.substring(0, index) + columnString.substring(nextIndex, columnString.length()) :
+                                columnString.substring(0, previousIndex+1) + columnString.substring(nextIndex,columnString.length());
+            }
+            return columnString;
+        }
+    }
+    
+    private String getColumnString (String columnString, String dataType, boolean nullable, boolean pk, boolean fk)
+    {
+        if (columnString != null && !columnString.equals(BLANK))
+        {
+	        try
+	        {
+	            // Two passes so that we remove first what we don't want
+	            if (!nullable)
+	            {
+	                while (columnString.indexOf(NULLABLE) != -1)
+	                {
+	                    columnString = getReplacement (columnString, nullable, NULLABLE_REG, NULLABLE, EX_NULLABLE);
+	                }
+                }
+	            if (!fk)
+	            {
+	                while (columnString.indexOf(FK) != -1)
+	                {
+	                    columnString = getReplacement (columnString, fk, FK_REG, FK, EX_FK);
+	                }
+                }
+	            if (!pk)
+	            {
+	                while (columnString.indexOf(PK) != -1)
+	                {
+	                    columnString = getReplacement (columnString, pk, PK_REG, PK, EX_PK);
+	                }
+	            }
+	            if (columnString.indexOf(DATATYPE) == -1)
+	            {
+                    columnString = getReplacement (columnString, true, DATATYPE_REG, DATATYPE, dataType);
+	            }
+	            
+	            // Second pass -> Substitute
+	            if (columnString.indexOf(NULLABLE) != -1 && nullable)
+	            {
+	                columnString = getReplacement (columnString, nullable, NULLABLE_REG, NULLABLE, EX_NULLABLE);
+                }
+	            if (columnString.indexOf(FK) != -1 && fk)
+	            {
+	                columnString = getReplacement (columnString, fk, FK_REG, FK, EX_FK);
+                }
+	            if (columnString.indexOf(PK) != -1 && pk)
+	            {
+	                columnString = getReplacement (columnString, pk, PK_REG, PK, EX_PK);
+	            }
+	            if (columnString.indexOf(DATATYPE) != -1)
+	            {
+	                columnString = getReplacement (columnString, true, DATATYPE_REG, DATATYPE, dataType);
+	            }
+	        }
+	        catch (PatternSyntaxException e)
+	        {
+	            return BLANK;
+	        }
+        }
+        return SPACE + columnString.trim();
+    }
+    
+    private String getExampleTextDefault ()
+    {
+        return EX_NAME + SPACE + getColumnString (columnText.getText(), EX_DATATYPE, true, true, true);
+    }
+    
+    private String getColumnTextDefault ()
+    {
+        return BEG_BRACKET + DATATYPE + SPACE + NULLABLE + SPACE + PK + SPACE + FK + END_BRACKET;
+    }
+    
+    private void addToTextColumn (List list)
+    {
+        if (list.contains(NULLABLE))
+        {
+            columnText.setText(NULLABLE + columnText.getText());
+        }
+        if (list.contains(FK))
+        {
+            columnText.setText(FK + columnText.getText());
+        }
+        if (list.contains(PK))
+        {
+            columnText.setText(PK + columnText.getText());
+        }
+        if (list.contains(DATATYPE))
+        {
+            columnText.setText(DATATYPE + columnText.getText());
+        }
+    }
+    
+    private Control getColumnTabDecorationControl(TabFolder folder)
+    {
+        Composite composite = new Composite(folder, SWT.NONE);
+        composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+        composite.setLayout(new GridLayout(3, false));
+
+        Label label = new Label (composite, SWT.NONE);
+        GridData data = new GridData ();
+        data.horizontalSpan = 3;
+        label.setLayoutData(data);
+        label.setText(FORMAT);
+        
+        label = new Label (composite, SWT.NONE);
+        label.setText(COLUMN_FORMAT);
+        
+        columnText = new Text (composite, SWT.NONE | SWT.BORDER);
+        GridData columnLayout = new GridData (GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL);
+        columnLayout.grabExcessHorizontalSpace = true;
+        columnLayout.widthHint = 240;
+        columnText.setLayoutData(columnLayout);
+        columnText.setText(preferences.get(DECORATION_KEY, getColumnTextDefault()));
+        columnText.addModifyListener(new ModifyListener ()
+        {
+            public void modifyText(ModifyEvent e)
+            {
+                exampleText.setText(getExampleTextDefault());
+            }
+        });
+        
+        Button variableButton = new Button (composite, SWT.PUSH);
+        variableButton.setText(VARIABLE);
+        variableButton.addSelectionListener(new SelectionListener ()
+        {
+            public void widgetSelected(SelectionEvent e)
+            {
+                ElementTreeSelectionDialog dlg = new ElementTreeSelectionDialog(getShell(), new LabelProvider()
+                {
+                    public String getText(Object element)
+                    {
+                        if (element == NULLABLE)
+                        {
+                            return NULLABLE_DESCRIPTION;
+                        }
+                        else if (element == FK)
+                        {
+                            return FK_DESCRIPTION;
+                        }
+                        else if (element == PK)
+                        {
+                            return PK_DESCRIPTION;	
+                        }
+                        else if (element == DATATYPE)
+                        {
+                            return DATATYPE_DESCRIPTION;
+                        }
+                        return null;
+                    }
+                }, new ITreeContentProvider()
+                {
+
+                    public Object[] getChildren(Object parentElement)
+                    {
+                        return new String[] { NULLABLE, FK, PK, DATATYPE };
+                    }
+
+                    public Object getParent(Object element)
+                    {
+                        return null;
+                    }
+
+                    public boolean hasChildren(Object element)
+                    {
+                        return false;
+                    }
+
+                    public Object[] getElements(Object inputElement)
+                    {
+                        return getChildren(inputElement);
+                    }
+
+                    public void dispose()
+                    {
+                    }
+
+                    public void inputChanged(Viewer viewer, Object oldInput, Object newInput)
+                    {
+                    }
+
+                });
+                dlg.setTitle(TITLE);
+                dlg.setMessage(MESSAGE);
+                dlg.setInput(NULLABLE);
+                if (dlg.open() == Window.OK)
+                {
+                    addToTextColumn(Arrays.asList(dlg.getResult()));
+                }
+            }
+
+            public void widgetDefaultSelected(SelectionEvent e)
+            {
+            }
+        });
+        
+        label = new Label (composite, SWT.NONE);
+        label.setText(EXAMPLE);
+        
+        exampleText = new Text (composite, SWT.READ_ONLY | SWT.BORDER);
+        exampleText.setLayoutData(new GridData (GridData.FILL_HORIZONTAL));
+        exampleText.setText(getExampleTextDefault());
+        
+        return composite;
+    }
+
+    private void addColumnTabDecoration(TabFolder folder)
+    {
+        TabItem columnItem = new TabItem(folder, SWT.NONE);
+        columnItem.setText(COLUMN_TAB);
+        columnItem.setControl(getColumnTabDecorationControl(folder));
+    }
+
+    private void addMultiTabDecorations(Composite parent)
+    {
+        TabFolder folder = new TabFolder(parent, SWT.TOP);
+        createStandardLayout(folder);
+
+        addColumnTabDecoration(folder);
+    }
+
+    private void createStandardLayout(Composite composite)
+    {
+        GridLayout layout = new GridLayout();
+        composite.setLayout(layout);
+        composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+    }
+
+    private boolean isSelected (String key)
+    {
+        String columnText = this.columnText.getText();
+        return columnText != null && columnText.indexOf(key) != -1 ? true : false;
+    }
+    
+    private boolean isNullable ()
+    {
+        return isSelected (NULLABLE);
+    }
+    
+    private boolean isFK ()
+    {
+        return isSelected (FK);
+    }
+    
+    private boolean isPK ()
+    {
+        return isSelected(PK);
+    }
+    
+    private boolean isDatatype ()
+    {
+        return isSelected(DATATYPE);
+    }
+    
+    protected void performDefaults()
+    {
+        this.exampleText.setText(this.getExampleTextDefault());
+        this.columnText.setText(this.getColumnTextDefault());
+    }
+
+    public boolean performOk()
+    {
+        preferences.put(DECORATION_KEY, columnText.getText());
+        IDataToolsUIServiceManager.INSTANCE.refreshColumnDecorationService();
+        return true;
+    }
+
+    protected Control createContents(Composite container)
+    {
+        Composite parent = new Composite(container, SWT.NONE);
+        createStandardLayout(parent);
+
+        new Label(parent, SWT.NONE).setText(DECORATION);
+        addMultiTabDecorations(parent);
+
+        return parent;
+    }
+
+    public void init(IWorkbench workbench)
+    {
+
+    }
+    
+    public String getColumnDecoration (String dataType, boolean isNullable, boolean isPK, boolean isFK)
+    {
+        return getColumnString(preferences.get(DECORATION_KEY, getColumnTextDefault()), dataType, isNullable, isPK, isFK);
+    }
+
+
+	private ContextProviderDelegate contextProviderDelegate =
+		new ContextProviderDelegate(RDBCoreUIPlugin.getDefault().getBundle().getSymbolicName());
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+
+	public void createControl(Composite parent) {
+		super.createControl(parent);
+		getShell().setData( HelpUtil.CONTEXT_PROVIDER_KEY, this);
+		HelpUtil.setHelp( getControl(), 
+				HelpUtil.getContextId(IHelpContextsSQMCoreUI.LABEL_DECORATOR_PREFERENCE_PAGE, 
+							RDBCoreUIPlugin.getDefault().getBundle().getSymbolicName()));
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/preferences/OutputPreference.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/preferences/OutputPreference.java
new file mode 100644
index 0000000..3d79721
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/preferences/OutputPreference.java
@@ -0,0 +1,294 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.preferences;
+
+import java.text.MessageFormat;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.internal.core.util.RDBCorePluginConstants;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+/**
+ * Preference for the Output tab in the Data perspective
+ * @author Quy V. On, quyon@us.ibm.com
+ */
+public class OutputPreference extends PreferencePage
+        implements IWorkbenchPreferencePage, ModifyListener
+{ 	
+    private static final String DESCRIPTION = 
+            ResourceLoader.getResourceLoader().queryString(
+            "DATATOOLS.CORE.UI.PREFERENCES.OUTPUT.DESCRIPTION"); //$NON-NLS-1$
+    private static final String LIMIT_ROWS = 
+            ResourceLoader.getResourceLoader().queryString(
+            "DATATOOLS.CORE.UI.PREFERENCES.OUTPUT.LIMIT_ROWS_RETRIEVED"); //$NON-NLS-1$
+    private static final String MAX_ROWS = 
+            ResourceLoader.getResourceLoader().queryString(
+            "DATATOOLS.CORE.UI.PREFERENCES.OUTPUT.MAX_ROW_RETRIEVED"); //$NON-NLS-1$
+    private static final String MAX_LOB_LENGTH = 
+            ResourceLoader.getResourceLoader().queryString(
+            "DATATOOLS.CORE.UI.PREFERENCES.OUTPUT.MAX_LOB_LENGTH"); //$NON-NLS-1$
+    private static final String ERROR_INVALID_INT = 
+            ResourceLoader.getResourceLoader().queryString(
+            "DATATOOLS.CORE.UI.PREFERENCES.OUTPUT.ERROR_INVALID_INT");    //$NON-NLS-1$
+    
+    protected Button bLimitRows;
+    protected Text tMaxRows;
+    protected Text tMaxLobLength;
+        
+    /**
+     * @see org.eclipse.jface.preference.PreferencePage#createContents(Composite)
+     */
+    protected Control createContents(Composite arg0)
+    {
+    	Composite cmp = new Composite(arg0, SWT.NONE);
+        int INDENT = 25;
+        GridLayout gl = new GridLayout();
+        gl.numColumns = 2;
+        cmp.setLayout(gl);        
+        
+        GridData gd01 = new GridData();
+        gd01.horizontalSpan=2;
+        gd01.horizontalAlignment = GridData.FILL;
+        Label lblDescr = new Label(cmp, SWT.WRAP);
+        lblDescr.setText(DESCRIPTION);
+        lblDescr.setLayoutData(gd01);
+        
+        GridData gd02 = new GridData();
+        gd02.horizontalSpan =2;
+        Label placeholder = new Label(cmp, SWT.NONE);
+        placeholder.setText(""); //$NON-NLS-1$
+        placeholder.setLayoutData(gd02);
+        
+        GridData gd11 = new GridData();
+        gd11.horizontalSpan=2;
+        bLimitRows = new Button(cmp, SWT.CHECK);
+        bLimitRows.setText(LIMIT_ROWS);
+        bLimitRows.setLayoutData(gd11);
+        
+        GridData gd12 = new GridData();
+        gd12.horizontalIndent = INDENT;
+        Label lMaxRows = new Label(cmp, SWT.NONE);
+        lMaxRows.setText(MAX_ROWS);
+        lMaxRows.setLayoutData(gd12);
+        
+        GridData gd13 = new GridData();
+        gd13.horizontalAlignment = GridData.FILL;
+        gd13.grabExcessHorizontalSpace = true;
+        gd13.widthHint=50;
+        tMaxRows = new Text(cmp, SWT.BORDER);
+        tMaxRows.setLayoutData(gd13);
+        
+        // create an empty row
+        GridData gd14 = new GridData();
+        gd14.horizontalSpan = 2;
+        Label lblFill1 = new Label(cmp, SWT.NONE);
+        lblFill1.setText(" "); //$NON-NLS-1$
+        lblFill1.setLayoutData(gd14);
+        
+        GridData gd22 = new GridData();
+        Label lMaxLobLength = new Label(cmp, SWT.NONE);
+        lMaxLobLength.setText(MAX_LOB_LENGTH);
+        lMaxLobLength.setLayoutData(gd22);
+        
+        GridData gd23 = new GridData();
+        gd23.horizontalAlignment = GridData.FILL;
+        gd23.widthHint=50;
+        gd23.grabExcessHorizontalSpace = true;
+        tMaxLobLength = new Text(cmp, SWT.BORDER);
+        tMaxLobLength.setLayoutData(gd23);
+        
+        // set values from preferenceStore
+        bLimitRows.setSelection(RDBCorePlugin.getDefault().getPluginPreferences().getBoolean(
+                RDBCorePluginConstants.LIMIT_ROWS_RETRIEVED));
+        // enable and disable max rows as appropriate
+        bLimitRows.addSelectionListener(new SelectionAdapter(){
+            public void widgetSelected(SelectionEvent e)
+            {
+                Object source = e.getSource();
+                if (source == bLimitRows)
+                {
+                	tMaxRows.setEnabled(bLimitRows.getSelection());
+                    if (!bLimitRows.getSelection())
+                    {
+                    	// no limit on rows returned, only need to wory
+                        // about lob length
+                        setValid(isValueValid(tMaxLobLength.getText()));
+                    }
+                    else
+                    {
+                    	// both fields need to be valid
+                        setValid(isValueValid(tMaxLobLength.getText()) &&
+                                isValueValid(tMaxRows.getText()));  
+                    }
+                }
+            }
+            });
+        
+        // check for validity of max row values
+        tMaxRows.addModifyListener(this);
+        tMaxLobLength.addModifyListener(this);
+        
+        tMaxRows.setText(Integer.toString(RDBCorePlugin.getDefault().getPluginPreferences().getInt(
+                RDBCorePluginConstants.MAX_ROW_RETRIEVED)));
+        tMaxLobLength.setText(Integer.toString(RDBCorePlugin.getDefault().getPluginPreferences().getInt(
+        		RDBCorePluginConstants.MAX_LOB_LENGTH)));
+        
+        tMaxRows.setEnabled(bLimitRows.getSelection());        
+        
+        return cmp;
+        
+    }
+    
+    /**
+     * @see org.eclipse.ui.IWorkbenchPreferencePage#init(IWorkbench)
+     */
+    public void init(IWorkbench workbench) {     
+    }
+    
+    /**
+     * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
+     */
+    protected void performDefaults()
+    {
+        bLimitRows.setSelection(RDBCorePlugin.getDefault().getPluginPreferences().getDefaultBoolean(
+                RDBCorePluginConstants.LIMIT_ROWS_RETRIEVED));
+        tMaxRows.setText(Integer.toString(RDBCorePlugin.getDefault().getPluginPreferences().getDefaultInt(
+                RDBCorePluginConstants.MAX_ROW_RETRIEVED)));
+        tMaxLobLength.setText(Integer.toString(RDBCorePlugin.getDefault().getPluginPreferences().getDefaultInt(
+                RDBCorePluginConstants.MAX_LOB_LENGTH)));
+        tMaxRows.setEnabled(bLimitRows.getSelection());
+    }
+    
+    /**
+     * @see org.eclipse.jface.preference.IPreferencePage#performOk()
+     */
+    public boolean performOk()
+    {
+        storePreferences();
+        return super.performOk();   
+    }
+    
+    /**
+     * @see org.eclipse.jface.preference.PreferencePage#performApply()
+     */
+    protected void performApply()
+    {
+        storePreferences();
+        super.performApply();
+    }
+    
+    /**
+     * Calls when text is modified
+     * @param event the ModifyEvent
+     */
+    public void modifyText(ModifyEvent event)
+    {
+    	Object source = event.getSource();
+        if (source == tMaxRows)
+        {
+        	String numberString = tMaxRows.getText();
+            setValid(isValueValid(numberString) &&
+                    isValueValid(tMaxLobLength.getText()));
+        }
+        else if (source == tMaxLobLength)
+        {
+        	String numberString = tMaxLobLength.getText();
+            if (bLimitRows.getSelection())
+            {
+            	// both fields need to be valid
+                setValid(isValueValid(numberString) &&
+                        isValueValid(tMaxRows.getText()));
+            }
+            else
+            {
+            	// only lob needs to be valid
+                setValid(isValueValid(numberString));
+            }
+        }
+    }
+    
+    /**
+     * Checks whether or not the value entered is a valid integer value
+     * @param aNumberString the value as a String object
+     * @return true if value is valid, false if not
+     */
+    private boolean isValueValid(String aNumberString)
+    {
+    	Object[] obj = new Object[]{new Integer(1), new Integer(Integer.MAX_VALUE)};
+        boolean valid = false;
+        try
+        {
+        	int number = Integer.valueOf(aNumberString).intValue();            
+            if (number < 1 || number > Integer.MAX_VALUE)
+            {
+            	String errorMessage = MessageFormat.format(ERROR_INVALID_INT, obj);
+                setErrorMessage(errorMessage);                                
+            }
+            else
+            {
+            	setErrorMessage(null);  
+                valid = true;
+            }
+        }
+        catch (NumberFormatException ex)
+        {
+            String errorMessage = MessageFormat.format(ERROR_INVALID_INT, obj);
+            setErrorMessage(errorMessage);            
+        }
+        return valid;
+    }
+    
+    /**
+     * Stores user preferences to PreferenceStore
+     */
+    private void storePreferences()
+    {
+    	// Whether or not to limit rows retrieved
+        RDBCorePlugin.getDefault().getPluginPreferences().setValue(RDBCorePluginConstants.LIMIT_ROWS_RETRIEVED,
+                bLimitRows.getSelection());
+        // Max rows retrieved
+        int pint;
+        pint = RDBCorePlugin.getDefault().getPluginPreferences().getDefaultInt(RDBCorePluginConstants.MAX_ROW_RETRIEVED);
+        try
+        {
+        	pint = Integer.parseInt(tMaxRows.getText());
+        }
+        catch (Exception ex)
+        {
+        }
+        RDBCorePlugin.getDefault().getPluginPreferences().setValue(RDBCorePluginConstants.MAX_ROW_RETRIEVED, pint);
+        // Max LOB rows retrieved
+        pint = RDBCorePlugin.getDefault().getPluginPreferences().getDefaultInt(RDBCorePluginConstants.MAX_LOB_LENGTH);
+        try
+        {
+        	pint = Integer.parseInt(tMaxLobLength.getText());
+        }
+        catch (Exception ex)
+        {
+        }
+        RDBCorePlugin.getDefault().getPluginPreferences().setValue(RDBCorePluginConstants.MAX_LOB_LENGTH, pint);
+    }
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/DataToolsUIServiceManager.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/DataToolsUIServiceManager.java
new file mode 100644
index 0000000..084bf8a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/DataToolsUIServiceManager.java
@@ -0,0 +1,148 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.services;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.helpers.ColumnHelper;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.helpers.ForeignKeyHelper;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.content.virtual.VirtualNodeServiceFactory;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators.IBookmarkDecorationService;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators.IColumnDecorationService;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.services.IExplorerInteractionService;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.services.IVirtualNodeServiceFactory;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.DataToolsUIConstants;
+import org.eclipse.datatools.connectivity.sqm.core.ui.services.IDataToolsUIServiceManager;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.IDecoratorManager;
+import org.eclipse.ui.PlatformUI;
+
+
+/**
+ * @author ljulien
+ */
+public class DataToolsUIServiceManager implements IDataToolsUIServiceManager, IDecorationService
+{
+	/**
+	 * Model Explorer Interaction service
+	 */
+	private IExplorerInteractionService interactionService;
+	private LabelService labelService;
+	private IMarkerNavigationService markerNavigationService;
+	private IExplorerSorterService explorerSorter;
+	
+	/**
+	 * Initialize our provider
+	 */
+	public DataToolsUIServiceManager ()
+	{
+		this.markerNavigationService = new MarkerNavigationService ();
+		this.explorerSorter = new ExplorerSorterProvider ();
+	}
+	
+	/**
+	 * @param interactionService
+	 */
+	public void setModelExplorerInteractionService (IExplorerInteractionService interactionService)
+	{
+		this.interactionService = interactionService;
+	}
+	
+	/**
+	 * @return
+	 */
+	public IExplorerInteractionService getModelExplorerInteractionService ()
+	{
+		return this.interactionService;
+	}
+	
+	/**
+	 * @see org.eclipse.datatools.connectivity.sqm.core.internal.ui.services.IDecorationService#getColumnDecorationService()
+	 */
+	public IColumnDecorationService getColumnDecorationService ()
+	{
+		IDecoratorManager decoratorManager = PlatformUI.getWorkbench().getDecoratorManager();
+		return (IColumnDecorationService) decoratorManager.getBaseLabelProvider(
+			DataToolsUIConstants.COLUMN_DECORATION_SERVICE); 
+	}
+
+	public IBookmarkDecorationService getBookmarkDecorationService ()
+	{
+	    IDecoratorManager decoratorManager = PlatformUI.getWorkbench().getDecoratorManager();
+	    return (IBookmarkDecorationService) decoratorManager.getBaseLabelProvider(
+	            DataToolsUIConstants.BOOKMARK_DECORATION_SERVICE);
+	}
+
+    public IMarkerNavigationService getMarkerNavigationService()
+    {
+        return this.markerNavigationService;
+    }
+
+	public void refreshColumnDecorationService ()
+	{
+	    IDecoratorManager decoratorManager = PlatformUI.getWorkbench().getDecoratorManager();
+	    decoratorManager.update(DataToolsUIConstants.COLUMN_DECORATION_SERVICE);
+	}
+	
+	/**
+	 * Will provide some column related helper
+	 * @return
+	 */
+	public IColumnHelperService getColumnHelperService ()
+	{
+		return new ColumnHelper();
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.sqm.core.ui.services.IDataToolsUIServiceManager#getForeignKeyHelperService()
+	 */
+	public IForeignKeyHelperService getForeignKeyHelperService()
+	{
+		return new ForeignKeyHelper();
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.sqm.core.ui.services.IDataToolsUIServiceManager#getDecorationService()
+	 */
+	public IDecorationService getDecorationService()
+	{
+		return this;
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.sqm.core.ui.services.IDataToolsUIServiceManager#getVirtualNodeServiceFactory()
+	 */
+	public IVirtualNodeServiceFactory getVirtualNodeServiceFactory()
+	{
+		return VirtualNodeServiceFactory.INSTANCE;
+	}
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.core.ui.services.IDataToolsUIServiceManager#getImageService(java.lang.Object)
+     */
+    public Image getImageService(Object element)
+    {
+        return getLabelService(element).getIcon();
+    }
+
+    public ILabelService getLabelService(Object element)
+    {
+        if (labelService == null)
+        {
+            labelService = new LabelService ();
+        }
+        labelService.setElement (element);
+        return labelService;
+    }
+
+    public IExplorerSorterService getExplorerSorterService ()
+    {
+        return explorerSorter;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/ExplorerSorterProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/ExplorerSorterProvider.java
new file mode 100644
index 0000000..f34d8f0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/ExplorerSorterProvider.java
@@ -0,0 +1,156 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.services;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentService;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+import org.eclipse.datatools.connectivity.sqm.core.ui.services.ISorterValidatorProvider;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+
+import com.ibm.icu.text.Collator;
+
+
+
+/**
+ * @author ljulien
+ */
+public class ExplorerSorterProvider extends ViewerSorter implements IExplorerSorterService
+{
+	private Collator collator = Collator.getInstance(Locale.getDefault());
+	private ContainmentService containment = RDBCorePlugin.getDefault().getContainmentService();
+	private List providerList = new ArrayList ();
+	
+	public ExplorerSorterProvider ()
+	{
+		IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+		IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("org.eclipse.datatools.connectivity.sqm.core.ui", "sorterValidatorProvider"); //$NON-NLS-1$ //$NON-NLS-2$
+		IExtension[] extensions = extensionPoint.getExtensions();
+		for(int i=0; i<extensions.length; ++i) 
+		{
+			IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+			for(int j=0; j<configElements.length; ++j) 
+			{
+				if(configElements[j].getName().equals("provider")) //$NON-NLS-1$
+				{    
+				    try
+                    {
+                        Object provider = configElements[j].createExecutableExtension("class"); //$NON-NLS-1$
+                        providerList.add(provider);
+                    }
+                    catch (CoreException e)
+                    {
+                        e.printStackTrace();
+                    }
+				}
+			}
+		}
+	}
+	
+    private ISorterValidatorProvider shouldCompare (Object element1, Object element2)
+    {
+        if (!providerList.isEmpty())
+        {
+            for (Iterator iterator = providerList.iterator(); iterator.hasNext();)
+            {
+                ISorterValidatorProvider provider = (ISorterValidatorProvider) iterator.next();
+                if (provider.shouldCompare(element1, element2))
+                {
+                    return provider;
+                }
+            }
+        }
+        return null;
+    }
+    
+	protected boolean isValid (Object element1, Object element2)
+	{
+	    if (!providerList.isEmpty())
+	    {
+		    for (Iterator iterator = providerList.iterator(); iterator.hasNext();)
+		    {
+		        ISorterValidatorProvider provider = (ISorterValidatorProvider) iterator.next();
+		        if (provider.isNotValid (element1, element2))
+		        {
+		            return false;
+		        }
+		    }
+		    return true;
+	    }
+	    else
+	    {
+		    if (element1 instanceof SQLObject && element2 instanceof SQLObject)
+		    {
+		        return !(containment.getContainer((SQLObject)element1) instanceof Table) 
+		        		&& !(containment.getContainer((SQLObject)element2) instanceof Table);
+		    }
+		    return true;
+	    }
+	}
+	
+    private String getName (Object object)
+    {
+        if (object instanceof SQLObject)
+        {
+            return ((SQLObject)object).getName();
+        }
+        else if (object instanceof IVirtualNode)
+        {
+            return ((IVirtualNode)object).getDisplayName();
+        }
+        else if (object instanceof IAdaptable)
+        {
+            Object resource = ((IAdaptable)object).getAdapter(IResource.class);
+            if (resource != null)
+            {
+                return ((IResource)resource).getName();
+            }
+        }
+        return null;
+    }
+    
+    public int compare(Object element1, Object element2)
+    {
+    	return compare(null, element1, element2);
+    }
+	
+    public int compare(Viewer viewer, Object element1, Object element2)
+    {
+        ISorterValidatorProvider provider;
+        if ((provider = shouldCompare (element1, element2)) != null)
+        {
+            return provider.compareTo (element1, element2);
+        }
+        if (isValid (element1, element2))
+        {
+            String string1 = getName (element1);
+            String string2 = getName (element2);
+            return string1 != null && string2 != null ? collator.getCollationKey(string1).compareTo(collator.getCollationKey(string2)) : -1;
+        }
+        return -1;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/IColumnHelperService.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/IColumnHelperService.java
new file mode 100644
index 0000000..765f1d0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/IColumnHelperService.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.services;
+
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+
+/**
+ * @author ljulien
+ */
+public interface IColumnHelperService
+{
+	public boolean isPrimaryKey (Column column);
+	public boolean isForeignKey (Column column);
+	public String getDataType (Column column);
+	public void updateConstraintsOnColumnDeleted (Column column);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/IDecorationService.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/IDecorationService.java
new file mode 100644
index 0000000..9a0aea7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/IDecorationService.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.services;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators.IBookmarkDecorationService;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators.IColumnDecorationService;
+
+/**
+ * @author ljulien
+ */
+public interface IDecorationService
+{
+	public IBookmarkDecorationService getBookmarkDecorationService();
+	public IColumnDecorationService getColumnDecorationService ();
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/IElementIDProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/IElementIDProvider.java
new file mode 100644
index 0000000..07e8341
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/IElementIDProvider.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.services;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * @author ljulien
+ */
+public interface IElementIDProvider
+{
+    /**
+     * @param eObject
+     * @return null if no ID supported for this extension
+     */
+    public String getElementID (EObject eObject);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/IExplorerSorterService.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/IExplorerSorterService.java
new file mode 100644
index 0000000..4b71b9e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/IExplorerSorterService.java
@@ -0,0 +1,11 @@
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.services;
+
+import java.util.Comparator;
+
+/**
+ * @author ljulien
+ */
+public interface IExplorerSorterService extends Comparator
+{
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/IForeignKeyHelperService.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/IForeignKeyHelperService.java
new file mode 100644
index 0000000..c563e3e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/IForeignKeyHelperService.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.services;
+
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+
+/**
+ * @author ljulien
+ */
+public interface IForeignKeyHelperService
+{
+	public boolean isIdentifyingConstraint (ForeignKey constraint);
+	public boolean isNonIdentifyingConstraint (ForeignKey constraint);
+    public Table getTarget (ForeignKey constraint);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/ILabelService.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/ILabelService.java
new file mode 100644
index 0000000..2537c28
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/ILabelService.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.services;
+
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @author ljulien
+ */
+public interface ILabelService
+{
+    public Image getIcon ();
+    public String getDisplayType ();
+    public String getName ();
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/IMarkerNavigationSelectionProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/IMarkerNavigationSelectionProvider.java
new file mode 100644
index 0000000..1a68bad
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/IMarkerNavigationSelectionProvider.java
@@ -0,0 +1,19 @@
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.services;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.ui.IEditorPart;
+
+/**
+ * @author ljulien
+ */
+public interface IMarkerNavigationSelectionProvider
+{
+    /**
+     * Clients should used the "com.ibm.datatools.core.ui.markerNavigationProvider" extension point
+     * Will be implemented by clients of wants to provide selection for Marker Navigation
+     * @param the object associated with the Marker that should be selected
+     * @return true if the client did select an object
+     */
+    public boolean provides (IEditorPart editor, IMarker marker);
+    public void doGotoMarker(IMarker marker);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/IMarkerNavigationService.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/IMarkerNavigationService.java
new file mode 100644
index 0000000..dc1764e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/IMarkerNavigationService.java
@@ -0,0 +1,12 @@
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.services;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.ui.IEditorPart;
+
+/**
+ * @author ljulien
+ */
+public interface IMarkerNavigationService
+{
+    public void gotoMarker (IEditorPart editor, IMarker marker);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/LabelSelector.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/LabelSelector.java
new file mode 100644
index 0000000..0569bef
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/LabelSelector.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.services;
+
+/**
+ * @author bmcnichols
+ */
+public interface LabelSelector
+{
+    public boolean select( Object element );
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/LabelService.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/LabelService.java
new file mode 100644
index 0000000..096280b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/LabelService.java
@@ -0,0 +1,505 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.services;
+
+import java.io.File;
+import java.lang.reflect.Method;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Vector;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+import org.eclipse.datatools.connectivity.sqm.core.ui.services.IDataToolsUIServiceManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.util.ConnectionUtil;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.ENamedElement;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.graphics.Image;
+import org.osgi.framework.Bundle;
+
+/**
+ * @author ljulien
+ */
+public class LabelService implements ILabelService
+{
+    private static final ResourceLoader resourceLoader = ResourceLoader.getResourceLoader();
+    
+    private static final String ELEMENT_SELECTED = resourceLoader.queryString("DATATOOLS.CORE.UI.EXPLORER.MULTI_SELECTION"); //$NON-NLS-1$
+    private static final String CONNECTION_NAME = resourceLoader.queryString("DATATOOLS.CORE.UI.STATUS.CONNECTION"); //$NON-NLS-1$
+    private static final String PROJECT_NAME = resourceLoader.queryString("DATATOOLS.CORE.UI.STATUS.PROJECT"); //$NON-NLS-1$
+    private static final String BLANK = ""; //$NON-NLS-1$
+    
+    private Map typeProvider = new HashMap ();
+    
+    private Object element;
+    private LabelInfo labelInfo;
+    
+    public LabelService ()
+    {
+        initializeLabelServiceProvider ();
+    }
+
+    private void initializeLabelServiceProvider ()
+    {
+		IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+		IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("org.eclipse.datatools.connectivity.sqm.core.ui", "labelService");//$NON-NLS-1$ //$NON-NLS-2$
+		IExtension[] extensions = extensionPoint.getExtensions();
+		for(int i=0; i<extensions.length; ++i) 
+		{
+			IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+			for(int j=0; j<configElements.length; ++j) 
+			{
+				if(configElements[j].getName().equals("contributor"))//$NON-NLS-1$
+				{
+					String displayType = configElements[j].getAttribute("displayType");//$NON-NLS-1$
+					String iconLocation = configElements[j].getAttribute("iconLocation");//$NON-NLS-1$
+					String type = configElements[j].getAttribute("type"); //$NON-NLS-1$
+					
+				    try
+                    {
+                        Bundle bundle = Platform.getBundle(configElements[j].getDeclaringExtension().getNamespace());
+                        LabelSelector selector = ( configElements[j].getAttribute("selector") != null ) ?  //$NON-NLS-1$
+                            ( LabelSelector )configElements[j].createExecutableExtension( "selector" ) : null; //$NON-NLS-1$
+                        if( !typeProvider.containsKey( type ) ) typeProvider.put( type, new ArrayList() ); 
+                        ( ( List )typeProvider.get( type ) ).add( new LabelInfo (bundle, iconLocation, displayType, selector ) );
+                    }
+                    catch (CoreException e)
+                    {
+                        e.printStackTrace();
+                    }
+				}
+			}
+		}
+    }
+
+    private LabelInfo getLabelInfo(EClass metaclass)
+    {
+/*        
+        if (this.cache.containsKey(metaclass))
+        {
+            return (LabelInfo) this.cache.get(metaclass);
+        }
+*/        
+        Vector sortedClasses = this.computeClassOrder(metaclass);
+        LabelInfo provider = this.getProvider(sortedClasses);
+/*        
+        if (provider != null)
+        {
+            this.cache.put(metaclass, provider);
+        }
+*/        
+        return provider;
+    }
+    
+    private LabelInfo getLabelInfo (Class metaclass)
+    {
+/*        
+        if (this.cache.containsKey(metaclass))
+        {
+            return (LabelInfo) this.cache.get(metaclass);
+        }
+*/        
+        Vector sortedClasses = this.computeClassOrder(metaclass);
+        LabelInfo provider = this.getClassProvider(sortedClasses);
+/*        
+        if (provider != null)
+        {
+            this.cache.put(metaclass, provider);
+        }
+*/        
+        return provider;
+    }
+  
+    private Vector computeClassOrder(Class metaclass)
+    {
+        Vector result = new Vector(4);
+        result.addElement(metaclass);
+        int index = 0;
+        for (index = 0; index < result.size(); ++index)
+        {
+            Class clazz = (Class) result.elementAt(index);
+            Class[] it = clazz.getInterfaces();
+            for  (int i = 0, n = it.length; i < n; i++)
+            {
+                result.addElement(it[i]);
+            }
+        }
+        return result;
+    }
+    
+    private Vector computeClassOrder(EClass metaclass)
+    {
+        Vector result = new Vector(4);
+        result.addElement(metaclass);
+        int index = 0;
+        for (index = 0; index < result.size(); ++index)
+        {
+            EClass clazz = (EClass) result.elementAt(index);
+            Iterator it = clazz.getESuperTypes().iterator();
+            while (it.hasNext())
+                result.addElement(it.next());
+        }
+        return result;
+    }
+
+    private LabelInfo getClassProvider(Vector classes)
+    {
+        int count = classes.size();
+        for (int i = 0; i < count; ++i)
+        {
+            Class clazz = (Class) classes.elementAt(i);
+            String name = clazz.getName();
+            if (this.typeProvider.containsKey(name))
+            {
+                Iterator labelInfoListIterator = ( ( List )typeProvider.get( name ) ).iterator();
+                while( labelInfoListIterator.hasNext() )
+                {
+                    LabelInfo localLabelInfo = ( LabelInfo )labelInfoListIterator.next();
+                    if( localLabelInfo.getSelector() == null ) return localLabelInfo;
+                    else if( localLabelInfo.getSelector().select( element ) ) return localLabelInfo;
+                }
+            }
+        }
+        return null;
+    }
+
+    private LabelInfo getProvider(Vector classes)
+    {
+        int count = classes.size();
+        for (int i = 0; i < count; ++i)
+        {
+            EClass clazz = (EClass) classes.elementAt(i);
+            String name = clazz.getInstanceClassName();
+            if (this.typeProvider.containsKey(name))
+            {
+                Iterator labelInfoListIterator = ( ( List )typeProvider.get( name ) ).iterator();
+                while( labelInfoListIterator.hasNext() )
+                {
+                    LabelInfo localLabelInfo = ( LabelInfo )labelInfoListIterator.next();
+                    if( localLabelInfo.getSelector() == null ) return localLabelInfo;
+                    else if( localLabelInfo.getSelector().select( element ) ) return localLabelInfo;
+                }
+            }
+        }
+        return null;
+    }
+    
+    private LabelInfo getLabelInfo ()
+    {
+        if( element instanceof EClass ) return getLabelInfo( ( EClass )element );
+        else if (element instanceof EObject)
+        {
+            return getLabelInfo (((EObject)element).eClass());
+        }
+        else if (element instanceof Class)
+        {
+            return getLabelInfo ((Class)element);
+        }
+        else    
+        {
+            return getLabelInfo ((Class)element.getClass());
+        }
+    }
+    
+    private void findService ()
+    {
+        this.labelInfo = (LabelInfo) getLabelInfo ();
+    }
+    
+    private boolean matchLabelService ()
+    {
+        if (this.labelInfo == null)
+        {
+            findService ();
+        }
+        return this.labelInfo != null;
+    }
+
+    public void setElement (Object element)
+    {
+        this.labelInfo = null;
+        this.element = element;
+    }
+    
+    public Image getIcon()
+    {
+    	if (this.element instanceof ILabelProvider)
+    	{
+    		return ((ILabelProvider)this.element).getImage(this.element);
+    	}
+    	else if (matchLabelService ())
+        {
+            return this.labelInfo.getIcon();
+        }
+        return null;
+    }
+
+    public String getDisplayType()
+    {
+        if (matchLabelService())
+        {
+	        String displayType = this.labelInfo.getDisplayType();
+	        return displayType != null ? displayType : 
+	            element instanceof EObject? ((EObject)element).eClass().getName() : 
+	                element instanceof IVirtualNode ? ((IVirtualNode)element).getDisplayName() : null;
+        }
+        return null;
+    }
+    
+    private String buildConnectionName (Object object, String name)
+    {
+        String connectionName = ConnectionUtil.getConnectionForEObject(((ICatalogObject)object).getCatalogDatabase()).getName();
+        return MessageFormat.format(CONNECTION_NAME, new String [] {name, connectionName});
+    }
+    
+    private String buildResourceName (String resourcePath, String name)
+    {
+        return MessageFormat.format(PROJECT_NAME, new String [] {name, resourcePath});
+    }
+    
+	public static String getResourcePath (Resource resource)
+	{
+		String fileName = ""; //$NON-NLS-1$
+		if (resource == null || resource.getURI() == null)
+		{
+		    return null;
+		}
+		String [] segments = resource.getURI().segments();
+		for (int j = 1, n = segments.length; j < n ; j++)
+		{
+			fileName += (segments[j].indexOf(File.separator) != -1)? segments[j] : File.separator + segments[j];
+		}
+		return fileName;
+	}
+
+	private IFile getIFile (Resource resource)
+    {
+		IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
+		String fileString = getResourcePath(resource);
+		if (fileString != null && !fileString.equals(BLANK)) {
+			return workspaceRoot.getFile(new Path(fileString));
+		}
+		return null;
+    }
+    
+    private String getIResourcePath (Object object)
+    {
+        if (object == null || !(object instanceof EObject))
+        {
+            return null;
+        }
+        return getIResourcePath (getIFile(((EObject)object).eResource()));
+    }
+    
+    private String getIResourcePath (IFile file)
+    {
+        return file == null ? null : file.getFullPath().toOSString(); 
+    }
+    
+    private Object getParent (IVirtualNode object)
+    {
+        Object parent = null;
+        while (!((parent = object.getParent()) instanceof SQLObject))
+        {
+            if (parent instanceof IVirtualNode)
+            {
+                object = (IVirtualNode)parent;
+            }
+            else
+            {
+                break;
+            }
+        }
+        return parent;
+    }
+    
+    private String getFullName (ENamedElement object)
+    {
+		return "<" + IDataToolsUIServiceManager.INSTANCE.getLabelService(object).getDisplayType() + "> " + object.getName();  //$NON-NLS-1$//$NON-NLS-2$
+    }
+    
+    private String getFullName (IVirtualNode object)
+    {
+		return "<" + IDataToolsUIServiceManager.INSTANCE.getLabelService(object).getDisplayType() + "> " + object.getDisplayName();  //$NON-NLS-1$//$NON-NLS-2$
+    }
+
+    private String getFullName (EObject object, String name)
+    {
+		return "<" + IDataToolsUIServiceManager.INSTANCE.getLabelService(object).getDisplayType() + "> " + name;  //$NON-NLS-1$//$NON-NLS-2$
+    }
+
+    private String getName (ENamedElement object)
+    {
+        if (object instanceof ICatalogObject)
+        {
+            return buildConnectionName(object, getFullName(object));
+        }
+        else
+        {
+            String projectPath = getIResourcePath (object);
+            if (projectPath == null)
+            {
+                return getFullName(object);
+            }
+            return buildResourceName (projectPath, getFullName(object));
+        }
+    }
+    
+    private String getName (EObject object)
+    {
+        try
+        {
+            Method method = object.getClass().getMethod("getName", new Class [] {});
+            try
+            {
+                String name = (String) method.invoke(object, new Object [] {});
+                if (getIFile(object.eResource()) != null)
+                {
+                    return buildResourceName (getResourcePath(object.eResource()), getFullName(object, name));
+                }
+                else if (object.eContainer() != null && object.eContainer() instanceof ICatalogObject)
+                {
+                    return buildConnectionName(object.eContainer(), getFullName(object, name));
+                }
+                else
+                {
+                    return getFullName(object, name);
+                }
+            }
+            catch (Exception e1)
+            {
+            }
+        }
+        catch (Exception e)
+        {
+        }
+        return BLANK;
+    }
+    
+    private String getName (IAdaptable object)
+    {
+        Object file = ((IAdaptable)object).getAdapter(IFile.class);
+        if (file != null)
+        {
+            return getIResourcePath ((IFile)file);
+        }
+        return BLANK;
+    }
+    
+    private String getName (IVirtualNode object)
+    {
+        Object parent = getParent ((IVirtualNode)object);
+        if (parent != null && parent instanceof ICatalogObject)
+        {
+            return buildConnectionName (parent, getFullName (object));
+        }
+        else if (object instanceof IAdaptable && ((IAdaptable)object).getAdapter(IFile.class) != null)
+        {
+            return buildResourceName (getIResourcePath ((IFile)((IAdaptable)object).getAdapter(IFile.class)), getFullName (object));
+        }
+        else
+        {
+            String project = getIResourcePath (parent);
+            if (project == null)
+            {
+                return getFullName (object);
+            }
+            return buildResourceName (project, getFullName (object));
+        }
+    }
+    
+    private String getName (Object object)
+    {
+        if (object instanceof ENamedElement)
+        {
+            return getName((ENamedElement)object);
+        }
+        else if (object instanceof IVirtualNode)
+        {
+            return getName((IVirtualNode)object);
+        }
+        else if (object instanceof IAdaptable)
+        {
+            return getName((IAdaptable)object);
+        }
+        else if (object instanceof EObject)
+        {
+            return getName ((EObject)object);
+        }
+        else if (object instanceof ILabelProvider)
+        {
+        	return ((ILabelProvider)object).getText(object);
+        }
+        return BLANK;
+    }
+    
+    public String getName ()
+    {
+        if (element instanceof IStructuredSelection)
+        {
+            IStructuredSelection selection = (IStructuredSelection) element;
+	        if (selection.size() == 1)
+	        {
+	            return getName(selection.getFirstElement());
+	        }
+	        else if (selection.size() > 1) 
+	        {
+	            return MessageFormat.format(ELEMENT_SELECTED, new Object [] {BLANK + selection.size()});
+	        }
+        }
+        return getName (element);
+    }
+    
+    private class LabelInfo
+    {
+        private Bundle iconBundle;
+        private String iconLocation;
+        private String displayType;
+        private LabelSelector selector;
+        public LabelInfo (Bundle iconBundle, String iconLocation, String displayType, LabelSelector selector )
+        {
+            this.iconBundle = iconBundle;
+            this.iconLocation = iconLocation;
+            this.displayType = displayType;
+            this.selector = selector;
+        }
+        public Image getIcon()
+        {
+            return resourceLoader.queryAbsolutePathImageFromRegistry(this.iconBundle, this.iconLocation);
+        }
+        public String getDisplayType ()
+        {
+            return this.displayType;
+        }
+        public LabelSelector getSelector() { return selector; }
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/MarkerNavigationService.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/MarkerNavigationService.java
new file mode 100644
index 0000000..14dce4a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/services/MarkerNavigationService.java
@@ -0,0 +1,76 @@
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.services;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.ui.IEditorPart;
+
+/**
+ * @author ljulien
+ */
+public class MarkerNavigationService implements IMarkerNavigationService
+{
+    private static List markerNavigationService = new LinkedList ();
+    
+    private void initializeProviders ()
+    {
+		try
+        {
+            IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+            IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("org.eclipse.datatools.connectivity.sqm.core.ui", "markerNavigationProvider");  //$NON-NLS-1$//$NON-NLS-2$
+            IExtension[] extensions = extensionPoint.getExtensions();
+            for (int i=0; i<extensions.length; ++i) 
+            {
+            	IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+            	for (int j=0; j<configElements.length; ++j) 
+            	{
+            		if (configElements[j].getName().equals("provider")) //$NON-NLS-1$
+            		{
+            		    markerNavigationService.add(configElements[j].createExecutableExtension("class")); //$NON-NLS-1$
+            		}
+            	}
+            }
+        }
+        catch (CoreException e)
+        {
+        }
+    }
+    
+    private void selectWithProviders (IEditorPart editor, IMarker marker)
+    {
+        for (Iterator iterator = markerNavigationService.iterator(); iterator.hasNext ();)
+        {
+            IMarkerNavigationSelectionProvider provider = (IMarkerNavigationSelectionProvider) iterator.next();
+            if (provider.provides(editor, marker))
+            {
+                provider.doGotoMarker(marker);
+                break;
+            }
+        }
+    }
+    
+    public MarkerNavigationService ()
+    {
+        initializeProviders();
+    }
+    
+    public void gotoMarker(IEditorPart editor, IMarker marker)
+    {
+        try
+        {
+        	this.selectWithProviders(editor, marker);
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/util/CatalogTaskLabelProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/util/CatalogTaskLabelProvider.java
new file mode 100644
index 0000000..cb588bb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/util/CatalogTaskLabelProvider.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.util;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.connectivity.sqm.core.ui.services.IDataToolsUIServiceManager;
+import org.eclipse.emf.ecore.ENamedElement;
+
+public class CatalogTaskLabelProvider
+		extends
+		org.eclipse.datatools.connectivity.sqm.internal.core.util.CatalogUtil.CatalogTaskLabelProvider {
+
+	private static final String LOADING = ResourceLoader.getResourceLoader()
+			.queryString("DATATOOLS.CORE.UI.LOADING"); //$NON-NLS-1$
+
+	public String getLabel(ENamedElement element) {
+		String name = element.getName();
+		if (name != null) {
+			String type = IDataToolsUIServiceManager.INSTANCE.getLabelService(
+					element).getDisplayType();
+			name = "<" + type + "> " + name; //$NON-NLS-1$//$NON-NLS-2$
+			return LOADING + " " + name; //$NON-NLS-1$
+		}
+		return null;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/util/EclipseUtilities.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/util/EclipseUtilities.java
new file mode 100644
index 0000000..49da53b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/util/EclipseUtilities.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.util;
+
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author ljulien
+ */
+public class EclipseUtilities
+{
+    /**
+     * @return the active workbench window
+     */
+    public static IWorkbenchWindow getActiveWorkbenchWindow()
+    {
+    	IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+    	return window != null ? window : PlatformUI.getWorkbench().getWorkbenchWindows()[0];
+    }
+    /**
+     * @return All the workbench windows
+     */
+	public static IWorkbenchWindow[] getWorkbenchWindows ()
+	{
+		return PlatformUI.getWorkbench().getWorkbenchWindows();
+	}
+    /**
+     * @return the active page
+     */
+    public static IWorkbenchPage getActivePage()
+    {
+        return getActiveWorkbenchWindow().getActivePage();
+    }
+    /**
+     * @return the active editor
+     */
+    public static IEditorPart getActiveEditor()
+    {
+        return getActivePage().getActiveEditor();
+    }
+    /**
+     * @return the Workspace root
+     */
+    public static IWorkspaceRoot getWorkspaceRoot ()
+    {
+    	return ResourcesPlugin.getWorkspace().getRoot();
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/util/ElementIDUtil.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/util/ElementIDUtil.java
new file mode 100644
index 0000000..ea515a8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/util/ElementIDUtil.java
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.util;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.services.IElementIDProvider;
+import org.eclipse.datatools.connectivity.sqm.internal.core.resources.IDataResource;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+
+/**
+ * @author ljulien
+ */
+public class ElementIDUtil
+{
+    public static final ElementIDUtil INSTANCE = new ElementIDUtil ();
+    
+    public List providerList = new LinkedList ();
+    
+    private ElementIDUtil ()
+    {
+		IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+		IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("org.eclipse.datatools.connectivity.sqm.core.ui", "elementID"); //$NON-NLS-1$ //$NON-NLS-2$
+		IExtension[] extensions = extensionPoint.getExtensions();
+		for(int i=0; i<extensions.length; ++i) 
+		{
+			IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+			for(int j=0; j<configElements.length; ++j) 
+			{
+				if(configElements[j].getName().equals("provider")) //$NON-NLS-1$
+				{    
+				    try
+                    {
+                        Object provider = configElements[j].createExecutableExtension("class"); //$NON-NLS-1$
+                        providerList.add(provider);
+                    }
+                    catch (CoreException e)
+                    {
+                        e.printStackTrace();
+                    }
+				}
+			}
+		}
+    }
+    
+    public String getElementId (Object current)
+    {
+    	
+    	//TODO:  Fix this code if we want bookmark support
+        if (current instanceof EObject)
+        {
+            EObject currentEObject = (EObject) current;
+            Resource resource = currentEObject.eResource();
+            if (resource instanceof IDataResource)
+            {
+                return ((IDataResource)resource).getID(currentEObject);
+            }
+            else 
+            {
+                for (Iterator iterator = providerList.iterator(); iterator.hasNext ();)
+                {
+                    IElementIDProvider provider = (IElementIDProvider) iterator.next();
+                    String id = provider.getElementID(currentEObject);
+                    if (id != null)
+                    {
+                        return id;
+                    }
+                }
+            }
+        }
+        else if (current instanceof IResource)
+        {
+            return ((IResource)current).getName();
+        }
+        return null;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/util/resources/DataToolsUIConstants.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/util/resources/DataToolsUIConstants.java
new file mode 100644
index 0000000..c6cc47a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/util/resources/DataToolsUIConstants.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources;
+
+/**
+ * @author ljulien
+ * Will containt the constants to include all throughout the plugin
+ */
+public final class DataToolsUIConstants
+{
+    public static final String COLUMN_DECORATION_SERVICE = "org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.ColumnDecoration";//$NON-NLS-1$
+    public static final String BOOKMARK_DECORATION_SERVICE = "org.eclipse.datatools.connectivity.internal.core.ui.bookmarkDecoration"; //$NON-NLS-1$
+    public static final String PERSISTENT_BOOKMARK = "org.eclipse.datatools.connectivity.sqm.core.ui.persistentBookmark"; //$NON-NLS-1$
+    public static final String TRANSIENT_BOOKMARK = "org.eclipse.datatools.connectivity.sqm.core.ui.transientBookmark"; //$NON-NLS-1$
+    public static final String SUPER_BOOKMARK = "org.eclipse.datatools.connectivity.sqm.core.ui.explorerBookmark"; //$NON-NLS-1$
+    public static final String BOOKMARK_ELEMENT_ID = "elementId"; //$NON-NLS-1$
+    public static final String CONNECTION_NAME = "connectionName"; //$NON-NLS-1$
+    public static final String BOOKMARK = "org.eclipse.core.resources.bookmark"; //$NON-NLS-1$
+    public static final String BOOKMARK_DIAGRAM_ID = "diagramId"; //$NON-NLS-1$
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/util/resources/ImagePath.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/util/resources/ImagePath.java
new file mode 100644
index 0000000..aff68cf
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/util/resources/ImagePath.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources;
+
+
+/**
+ * @author ljulien
+ */
+public class ImagePath
+{
+    public static final String CORE_UI_ICONS_FOLDER_URL = "platform:/plugin/org.eclipse.datatools.connectivity.sqm.core.ui/icons/"; //$NON-NLS-1$
+    
+	public static final String BOOKMARK = "bookmark.gif"; //$NON-NLS-1$
+	public static final String DATABASE = "database.gif"; //$NON-NLS-1$
+	public static final String TABLE = "table.gif"; //$NON-NLS-1$
+	public static final String ROLE = "role.gif"; //$NON-NLS-1$
+	public static final String USER = "user.gif"; //$NON-NLS-1$
+	public static final String GROUP = "group.gif"; //$NON-NLS-1$
+	public static final String COLUMN = "columns.gif"; //$NON-NLS-1$
+	public static final String NULL_COLUMN = "nullColumn.gif"; //$NON-NLS-1$
+	public static final String NOT_NULL_COLUMN = "notNullColumn.gif"; //$NON-NLS-1$
+	public static final String SCHEMA = "schema.gif"; //$NON-NLS-1$
+	public static final String UDT = "udt.gif"; //$NON-NLS-1$
+	public static final String INDEX = "index.gif"; //$NON-NLS-1$
+	public static final String CONSTRAINT = "constraint.gif"; //$NON-NLS-1$
+	public static final String IDENTIFYING_RELATIONSHIP = "IdentifyingRelationship.gif"; //$NON-NLS-1$
+	public static final String NON_IDENTIFYING_RELATIONSHIP = "NonIdentifyingRelationship.gif"; //$NON-NLS-1$
+	public static final String STORED_PROCEDURE = "stored_procedure.gif"; //$NON-NLS-1$
+	public static final String VIEW = "view.gif"; //$NON-NLS-1$
+	public static final String DOMAIN = "domain.gif"; //$NON-NLS-1$
+	public static final String PARAMETER = "parameter.gif"; //$NON-NLS-1$
+	public static final String TRIGGER = "trigger.gif"; //$NON-NLS-1$
+	public static final String SEQUENCE = "sequence.gif"; //$NON-NLS-1$
+	public static final String ATTRIBUTE_DEFINITION = "sample.gif"; //$NON-NLS-1$
+	public static final String USER_DEFINED_FUNCTION = "udf.gif"; //$NON-NLS-1$
+	public static final String NULL_COLUMN_DECORATION = "nullColumnDecoration.gif"; //$NON-NLS-1$
+	public static final String DEPENDENCY = "dependency.gif"; //$NON-NLS-1$
+	public static final String ADD_SERVER_CONNECTION = "connection.gif"; //$NON-NLS-1$
+	public static final String CONNECTION_FOLDER = "connectionFolder.gif"; //$NON-NLS-1$
+	public static final String DISCONNECT_SERVER_CONNECTION = "disconnect_server.gif"; //$NON-NLS-1$
+	public static final String DISCONNECTED_CONNECTION = "disconnect_server.gif"; //$NON-NLS-1$
+	public static final String CACHED_CONNECTION = "cachedConnection.gif"; //$NON-NLS-1$
+	public static final String COLLAPSE_ALL = "collapseall.gif"; //$NON-NLS-1$
+	public static final String SERVER_EXPLORER = "server_explorer.gif"; //$NON-NLS-1$
+	public static final String DEPENDENCY_FOLDER = "dependencyFolder.gif"; //$NON-NLS-1$
+	public static final String CONNECTION = "connection.gif"; //$NON-NLS-1$
+	public static final String FILTER_WIZARD_DIALOG= "filter.gif"; //$NON-NLS-1$
+	public static final String FILTER_DECORATION = "filter_decorate.gif"; //$NON-NLS-1$
+	public static final String FILTER_WIZARD = "filter_wiz.gif"; //$NON-NLS-1$
+	public static final String PK_COLUMN = "pkColumn.gif"; //$NON-NLS-1$
+	public static final String PKFK_COLUMN = "pkfk_rdbcolumn.gif"; //$NON-NLS-1$
+	public static final String FK_COLUMN = "fk_rdbcolumn.gif"; //$NON-NLS-1$
+	public static final String FK = "fk.gif"; //$NON-NLS-1$
+	public static final String PK = "primaryKey.gif"; //$NON-NLS-1$
+	public static final String FK_DECORATION = "fk_decorate.gif"; //$NON-NLS-1$
+	public static final String PKFK_DECORATION = "pkfk_decorate.gif"; //$NON-NLS-1$
+	public static final String PK_DECORATION = "pk_decorate.gif"; //$NON-NLS-1$
+	public static final String GENERATE_DDL_WIZARD = "generate_ddl_wiz.gif"; //$NON-NLS-1$
+    public static final String REFRESH = "refresh.gif"; //$NON-NLS-1$
+    public static final String GENERATE_CODE = "generate_code.gif"; //$NON-NLS-1$
+    public static final String TABLECHECKCONSTRAINT = "constraint.gif";//$NON-NLS-1$
+    public static final String LOADING1 = "loading1.gif";//$NON-NLS-1$
+    public static final String LOADING2 = "loading2.gif";//$NON-NLS-1$
+    public static final String LOADING3 = "loading3.gif";//$NON-NLS-1$
+    public static final String LOADING4 = "loading4.gif";//$NON-NLS-1$
+    public static final String SAVE = "save.gif";//$NON-NLS-1$
+    public static final String SAVE_DISABLED = "save_edit.gif";//$NON-NLS-1$
+    public static final String NEW = "new.gif";//$NON-NLS-1$
+    public static final String DELETE = "delete.gif";//$NON-NLS-1$
+    public static final String SAMPLE_CONTENT = "sampleContents.gif"; //$NON-NLS-1$
+}
+
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/util/resources/ResourceLoader.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/util/resources/ResourceLoader.java
new file mode 100644
index 0000000..5b77d06
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/util/resources/ResourceLoader.java
@@ -0,0 +1,173 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.util.ResourceBundle;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.RDBCoreUIPlugin;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Display;
+import org.osgi.framework.Bundle;
+
+/**
+ * @author ljulien
+ */
+public class ResourceLoader
+{
+	private static final RDBCoreUIPlugin plugin = RDBCoreUIPlugin.getDefault();
+	private static final String RESOURCE_PATH = "org/eclipse/datatools/connectivity/sqm/core/internal/ui/l10n/"; //$NON-NLS-1$
+	private static final String ICONS_DIRECTORY = "icons/"; //$NON-NLS-1$
+	private static final String UI_RESOURCES = "datatoolsCoreUI"; //$NON-NLS-1$
+	private static final String NO_RESOURCE_FOUND = "NO_RESOURCE_FOUND"; //$NON-NLS-1$
+    private static final ResourceLoader instance = new ResourceLoader ();
+
+	private ResourceBundle bundle = null;
+
+	private static String iconLocation;
+   
+    /**
+    * @return Will return the resource loader
+    * -> The resource loader can be used to create images and get the String resources
+    */
+   	public static ResourceLoader getResourceLoader ()
+   	{
+   		return instance;
+   	}
+   
+    private ResourceLoader()
+    {
+        try
+        {
+            Bundle bundle = RDBCoreUIPlugin.getDefault().getBundle();
+            iconLocation = FileLocator.resolve(bundle.getEntry("/")).getPath() + ICONS_DIRECTORY; //$NON-NLS-1$
+        }
+        catch (IOException e)
+        {
+            e.printStackTrace();
+        }
+        
+        this.bundle = ResourceBundle.getBundle(RESOURCE_PATH + UI_RESOURCES);
+    }
+    
+    private Image queryImage (String imagePath)
+    {
+		Image image = null;
+		if ((image = plugin.getImageRegistry().get(imagePath)) == null)
+		{
+			image = new Image (Display.getDefault(), imagePath);
+			plugin.getImageRegistry().put(imagePath, image);
+		}
+		return image;
+    }
+    
+    /**
+     * Client should use this query Image, as the registry will dispose the image
+     * @param imagePath - The path should be related to the Class Loader
+     * @return the image
+     */
+    public Image queryImageFromRegistry (String imagePath)
+    {
+        return queryAbsolutePathImageFromRegistry (iconLocation + imagePath);
+    }
+ 
+    /**
+     * Image should not be disposed 
+     * @param imagePath the full path to the image. Example: c:\...\myImage.gif
+     * @return the image or null if not found
+     */
+    public Image queryAbsolutePathImageFromRegistry (String imagePath)
+    {
+        return queryImage (imagePath);
+    }
+    
+    public Image queryAbsolutePathImageFromRegistry (Bundle bundle, String imagePath)
+    {
+		Image image = null;
+		if ((image = plugin.getImageRegistry().get(imagePath)) == null)
+		{
+			try
+			{
+            	URL fullPathString = FileLocator.find(bundle, new Path(imagePath), null);
+            	fullPathString = fullPathString != null ? fullPathString : new URL(imagePath);
+            	if (fullPathString != null) 
+            	{
+            		image = ImageDescriptor.createFromURL(fullPathString).createImage();
+            		plugin.getImageRegistry().put(imagePath, image);
+            	}
+			} 
+			catch (IOException e)
+			{
+				return image;
+			}
+		}
+		return image;
+    }
+    
+    public static byte[] getImageData (EObject eObject)
+    {
+        if (eObject instanceof BaseTable)
+        {
+            return getImageData (ImagePath.TABLE);
+        }
+        else if (eObject instanceof ViewTable)
+        {
+            return getImageData (ImagePath.VIEW);
+        }
+        return new byte[100];
+    }
+    
+    public static byte[] getImageData(String name)
+    {
+        String image = iconLocation + name;
+        try
+        {
+            FileInputStream fis = new FileInputStream(image);
+            int size;
+            size = fis.available();
+            byte[] imageBytes = new byte[size];
+            fis.read(imageBytes);
+            fis.close();
+            return imageBytes;
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+        return null;
+    }
+    
+    /**
+     * @param stringID - the key to look for
+     * @return - the localized string
+     */
+    public String queryString (String stringID)
+    {
+        try
+        {
+            String resource = null;
+            resource = this.bundle.getString(stringID);
+            return (resource);
+        }
+        catch (Throwable e)
+        {
+        	return NO_RESOURCE_FOUND;
+        }
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/widgets/DataContainerContentProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/widgets/DataContainerContentProvider.java
new file mode 100644
index 0000000..56cf23b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/widgets/DataContainerContentProvider.java
@@ -0,0 +1,224 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.widgets;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.viewers.IContentProvider;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+/**
+ * Provides content for a tree viewer that shows only containers.
+ * 
+ * The original implementation of this class was copied from
+ * org.eclipse.ui.internal.ide.misc.ContainerContentProvider.
+ */
+public class DataContainerContentProvider implements ITreeContentProvider {
+    private boolean showClosedProjects = true;
+
+    // show all files by default
+    private String[] fileFilter = new String[0];
+
+    // show files by default
+    private boolean showFiles = true;
+
+    private String[] projectNatureFilter = new String[0];
+    
+    private String[] filesToExclude = new String[0];
+
+    /**
+     * Creates a new ResourceContentProvider.
+     */
+    public DataContainerContentProvider() {
+    }
+
+    /**
+     * The visual part that is using this content provider is about to be
+     * disposed. Deallocate all allocated SWT resources.
+     */
+    public void dispose() {
+    }
+
+    /**
+     * @see ITreeContentProvider#getChildren
+     */
+    public Object[] getChildren(Object element) {
+        Object[] theChildren = new Object[0];
+
+        if (element instanceof IWorkspace) {
+            // check if closed projects should be shown
+            IProject[] allProjects = ((IWorkspace) element).getRoot()
+                    .getProjects();
+            if (showClosedProjects) {
+                theChildren = allProjects;
+            } else {
+                ArrayList accessibleProjects = new ArrayList();
+                for (int i = 0; i < allProjects.length; i++) {
+                    if (allProjects[i].isOpen()) {
+                        accessibleProjects.add(allProjects[i]);
+                    }
+                }
+                theChildren = accessibleProjects.toArray();
+            }
+            if (this.projectNatureFilter.length > 0) {
+                ArrayList filteredProjects = new ArrayList();
+                for (int i = 0; i < theChildren.length; i++) {
+                    try {
+                        boolean isProjectAllowed = false;
+                        for (int natureIndex = 0; natureIndex < this.projectNatureFilter.length; natureIndex++) {
+                            if (((IProject) theChildren[i])
+                                    .isNatureEnabled(projectNatureFilter[natureIndex])) {
+                                isProjectAllowed = true;
+                            }
+                            if (isProjectAllowed) {
+                                filteredProjects.add(theChildren[i]);
+                            }
+                        }
+                    } catch (Exception e) {
+                        // If exception occurs move onto next project
+                    }
+                }
+                theChildren = filteredProjects.toArray();
+            }
+        } else if (element instanceof IContainer) {
+            IContainer container = (IContainer) element;
+            if (container.isAccessible()) {
+                try {
+                    List children = new ArrayList();
+                    IResource[] members = container.members();
+                    for (int i = 0; i < members.length; i++) {
+                        if (members[i].getType() != IResource.FILE) {
+                            children.add(members[i]);
+                        }
+                        
+                        if (this.showFiles && (members[i].getType() == IResource.FILE)) {
+                            if (satisfiesFileFilter((IFile)members[i]) && satifiesExcludedFiles((IFile)members[i])){
+                                children.add(members[i]);
+                            }
+                        }
+                    }
+                    theChildren = children.toArray();
+                } catch (CoreException e) {
+                    // this should never happen because we call #isAccessible
+                    // before invoking #members
+                }
+            }
+        }
+        return theChildren;
+    }
+
+    private boolean satisfiesFileFilter(IFile resource){
+        boolean isSatisfied = false;
+        if ((this.fileFilter == null) || (this.fileFilter.length == 0)){
+            isSatisfied = true;
+        } else {
+           for (int index = 0; index < this.fileFilter.length; index++){
+               if ((resource.getFileExtension() != null) && (fileFilter[index].toLowerCase().equals(resource.getFileExtension().toLowerCase()))){
+                   isSatisfied = true;
+               }
+           }
+        }
+        
+        return isSatisfied;
+    }
+      
+    private boolean satifiesExcludedFiles(IFile resource){
+        boolean isSatisfied = false;
+        if ((this.filesToExclude == null) || (this.filesToExclude.length == 0)){
+            isSatisfied = true;
+        } else {
+            boolean isExcluded = false;
+           for (int index = 0; index < this.filesToExclude.length; index++){
+               if (filesToExclude[index].equals(resource.getFullPath().toOSString())){
+                   isExcluded = true;
+               }
+           }
+           if (!isExcluded){
+               isSatisfied = true;
+           }
+        }
+        
+        return isSatisfied;
+    }
+    
+    /**
+     * @see ITreeContentProvider#getElements
+     */
+    public Object[] getElements(Object element) {
+        return getChildren(element);
+    }
+
+    /**
+     * @see ITreeContentProvider#getParent
+     */
+    public Object getParent(Object element) {
+        if (element instanceof IResource)
+            return ((IResource) element).getParent();
+        return null;
+    }
+
+    /**
+     * @see ITreeContentProvider#hasChildren
+     */
+    public boolean hasChildren(Object element) {
+        return getChildren(element).length > 0;
+    }
+
+    /**
+     * @see IContentProvider#inputChanged
+     */
+    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+    }
+
+    /**
+     * Specify whether or not to show closed projects in the tree viewer.
+     * Default is to show closed projects.
+     * 
+     * @param show
+     *            boolean if false, do not show closed projects in the tree
+     */
+    public void showClosedProjects(boolean show) {
+        showClosedProjects = show;
+    }
+
+    public void showFiles(boolean show) {
+        this.showFiles = show;
+    }
+
+    public void setFileFilter(String[] filter) {
+        this.fileFilter = filter;
+    }
+
+    /**
+     * Specify the natures of projects to be displayed. Default is to show
+     * projects regardless of nature.
+     * 
+     * @param naturesToShow
+     *            String[] containing the project natures a project must have to
+     *            be displayed
+     */
+    public void setProjectNatureFilter(String[] naturesToShow) {
+        this.projectNatureFilter = naturesToShow;
+    }
+    
+    public void setExcludedFiles(String[] filesToExclude){
+        this.filesToExclude = filesToExclude;
+    }
+    
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/widgets/DataContainerSelectionGroup.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/widgets/DataContainerSelectionGroup.java
new file mode 100644
index 0000000..8029098
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/widgets/DataContainerSelectionGroup.java
@@ -0,0 +1,349 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.widgets;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.ui.model.WorkbenchLabelProvider;
+import org.eclipse.ui.part.DrillDownComposite;
+
+/**
+ * Workbench-level composite for choosing a container.
+ * 
+ * The original implementation of this class was copied from 
+ * org.eclipse.ui.internal.ide.misc.ContainerSelectionGroup.
+ */
+public class DataContainerSelectionGroup extends Composite {
+	private static final ResourceLoader resource = ResourceLoader.getResourceLoader();
+    
+	// The listener to notify of events
+	private Listener listener;
+
+	// Enable user to type in new container name
+	private boolean allowNewContainerName = true;
+
+	// show all projects by default
+	private boolean showClosedProjects = true;
+	
+	// show files by default
+	private boolean showFiles = true;
+	
+	// show all files by default
+	private String[] fileFilter = new String[]{};
+	
+	// show projects regardless of nature
+	private String[] projectNatureFilter = new String[0];
+	
+	private boolean allowMultipleSelection = false;
+	
+	private String[] filesToExclude = new String[0];
+	
+	// Last selection made by user
+	private IResource selectedContainer;
+	
+	private IStructuredSelection lastSelection;
+	
+	// handle on parts
+	private Text containerNameField;
+	TreeViewer treeViewer;
+	
+
+	// the message to display at the top of this dialog
+	private static final String DEFAULT_MSG_NEW_ALLOWED = resource.queryString("_UI_DEFAULT_MSG_NEW_ALLOWED"); //$NON-NLS-1$
+	private static final String DEFAULT_MSG_SELECT_ONLY = resource.queryString("_UI_DEFAULT_MSG_SELECT_ONLY"); //$NON-NLS-1$
+
+	// sizing constants
+	private static final int SIZING_SELECTION_PANE_WIDTH = 320;
+	private static final int SIZING_SELECTION_PANE_HEIGHT = 300;
+/**
+ * Creates a new instance of the widget.
+ *
+ * @param parent The parent widget of the group.
+ * @param listener A listener to forward events to. Can be null if
+ *	 no listener is required.
+ * @param allowNewContainerName Enable the user to type in a new container
+ *  name instead of just selecting from the existing ones.
+ */
+public DataContainerSelectionGroup (Composite parent, Listener listener, boolean allowNewContainerName) {
+	this(parent, listener, allowNewContainerName, null);
+}
+/**
+ * Creates a new instance of the widget.
+ *
+ * @param parent The parent widget of the group.
+ * @param listener A listener to forward events to.  Can be null if
+ *	 no listener is required.
+ * @param allowNewContainerName Enable the user to type in a new container
+ *  name instead of just selecting from the existing ones.
+ * @param message The text to present to the user.
+ */
+public DataContainerSelectionGroup (Composite parent, Listener listener, boolean allowNewContainerName, String message) {
+	this(parent, listener, allowNewContainerName, message, true, new String[0], true, new String[]{}, false, new String[0]);
+}
+/**
+ * Creates a new instance of the widget.
+ *
+ * @param parent The parent widget of the group.
+ * @param listener A listener to forward events to.  Can be null if
+ *	 no listener is required.
+ * @param allowNewContainerName Enable the user to type in a new container
+ *  name instead of just selecting from the existing ones.
+ * @param message The text to present to the user.
+ * @param showClosedProjects Whether or not to show closed projects.
+ */
+public DataContainerSelectionGroup (Composite parent, Listener listener, boolean allowNewContainerName, String message, boolean showClosedProjects, String[] projectNatureFilter, boolean showFiles, String[] fileFilter, boolean allowMultipleSelection, String [] filesToExclude) {
+	this(parent, listener, allowNewContainerName, message, showClosedProjects, SIZING_SELECTION_PANE_HEIGHT, projectNatureFilter,showFiles, fileFilter, allowMultipleSelection, filesToExclude);
+}
+/**
+ * Creates a new instance of the widget.
+ *
+ * @param parent The parent widget of the group.
+ * @param listener A listener to forward events to.  Can be null if
+ *	 no listener is required.
+ * @param allowNewContainerName Enable the user to type in a new container
+ *  name instead of just selecting from the existing ones.
+ * @param message The text to present to the user.
+ * @param showClosedProjects Whether or not to show closed projects.
+ * @param heightHint height hint for the drill down composite
+ */
+public DataContainerSelectionGroup (Composite parent, Listener listener, boolean allowNewContainerName, String message, boolean showClosedProjects, int heightHint, String[] projectNatureFilter, boolean showFiles, String[] fileFilter, boolean allowMultipleSelection, String[] filesToExclude) {
+	super (parent, SWT.NONE);
+	this.listener = listener;
+	this.allowNewContainerName = allowNewContainerName;
+	this.showClosedProjects = showClosedProjects;
+	this.showFiles = showFiles;
+	this.fileFilter = fileFilter;
+	this.projectNatureFilter = projectNatureFilter; 
+	this.filesToExclude = filesToExclude;
+	this.allowMultipleSelection = allowMultipleSelection;
+	if (message != null)
+		createContents(message, heightHint);
+	else if (allowNewContainerName)
+		createContents(DEFAULT_MSG_NEW_ALLOWED, heightHint);
+	else
+		createContents(DEFAULT_MSG_SELECT_ONLY, heightHint);
+}
+/**
+ * The container selection has changed in the
+ * tree view. Update the container name field
+ * value and notify all listeners.
+ */
+public void containerSelectionChanged(IStructuredSelection selection) {
+    lastSelection = selection;
+    
+    if (!showFiles){
+    IResource container = (IResource) selection.getFirstElement();
+	
+	selectedContainer = container;
+	
+	if (allowNewContainerName) {
+		if (container == null)
+			containerNameField.setText("");//$NON-NLS-1$
+		else
+			containerNameField.setText(container.getFullPath().makeRelative().toString());
+	}
+
+    }
+	// fire an event so the parent can update its controls
+	if (listener != null) {
+		Event changeEvent = new Event();
+		changeEvent.type = SWT.Selection;
+		changeEvent.widget = this;
+		listener.handleEvent(changeEvent);
+	}
+}
+/**
+ * Creates the contents of the composite.
+ */
+public void createContents(String message) {
+	createContents(message, SIZING_SELECTION_PANE_HEIGHT);
+}
+/**
+ * Creates the contents of the composite.
+ * 
+ * @param heightHint height hint for the drill down composite
+ */
+public void createContents(String message, int heightHint) {
+	GridLayout layout = new GridLayout();
+	layout.marginWidth = 0;
+	setLayout(layout);
+	setLayoutData(new GridData(GridData.FILL_BOTH));
+
+	Label label = new Label(this,SWT.WRAP);
+	label.setText(message);
+	label.setFont(this.getFont());
+
+	if (allowNewContainerName) {
+		containerNameField = new Text(this, SWT.SINGLE | SWT.BORDER);
+		containerNameField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		containerNameField.addListener(SWT.Modify, listener);
+		containerNameField.setFont(this.getFont());
+	}
+	else {
+		// filler...
+		new Label(this, SWT.NONE);
+	}
+
+	createTreeViewer(heightHint);
+	Dialog.applyDialogFont(this);
+}
+/**
+ * Returns a new drill down viewer for this dialog.
+ *
+ * @param heightHint height hint for the drill down composite
+ * @return a new drill down viewer
+ */
+protected void createTreeViewer(int heightHint) {
+	// Create drill down.
+	DrillDownComposite drillDown = new DrillDownComposite(this, SWT.BORDER);
+	GridData spec = new GridData(
+		GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL |
+		GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL);
+	spec.widthHint = SIZING_SELECTION_PANE_WIDTH;
+	spec.heightHint = heightHint;
+	drillDown.setLayoutData(spec);
+
+	// Create tree viewer inside drill down.
+	Tree tree = null;
+	if (allowMultipleSelection){
+	tree = new Tree(drillDown, SWT.MULTI);
+	} else {
+	    tree = new Tree(drillDown, SWT.NONE);
+	}
+	treeViewer = new TreeViewer(tree);
+	drillDown.setChildTree(treeViewer);
+	DataContainerContentProvider cp = new DataContainerContentProvider();
+	cp.showClosedProjects(showClosedProjects);
+	cp.showFiles(this.showFiles);
+	cp.setFileFilter(this.fileFilter);
+	cp.setProjectNatureFilter(projectNatureFilter);
+	cp.setExcludedFiles(filesToExclude);
+	treeViewer.setContentProvider(cp);
+	treeViewer.setLabelProvider(WorkbenchLabelProvider.getDecoratingWorkbenchLabelProvider());
+	treeViewer.setSorter(new ViewerSorter());
+	treeViewer.addSelectionChangedListener(
+		new ISelectionChangedListener() {
+			public void selectionChanged(SelectionChangedEvent event) {
+				IStructuredSelection selection = (IStructuredSelection)event.getSelection();
+				containerSelectionChanged(selection);
+			}
+		});
+	treeViewer.addDoubleClickListener(
+		new IDoubleClickListener() {
+			public void doubleClick(DoubleClickEvent event) {
+				ISelection selection = event.getSelection();
+				if (selection instanceof IStructuredSelection) {
+					Object item = ((IStructuredSelection)selection).getFirstElement();
+					if (treeViewer.getExpandedState(item))
+						treeViewer.collapseToLevel(item, 1);
+					else
+						treeViewer.expandToLevel(item, 1);
+				}
+			}
+		});
+
+	// This has to be done after the viewer has been laid out
+	treeViewer.setInput(ResourcesPlugin.getWorkspace());
+}
+/**
+ * Returns the currently entered container name.
+ * Null if the field is empty. Note that the
+ * container may not exist yet if the user
+ * entered a new container name in the field.
+ */
+public IPath getContainerFullPath() {
+	if (allowNewContainerName) {
+		String pathName = containerNameField.getText();
+		if (pathName == null || pathName.length() < 1)
+			return null;
+		else
+			//The user may not have made this absolute so do it for them
+			return (new Path(pathName)).makeAbsolute();
+	} else {
+		if (selectedContainer == null)
+			return null;
+		else
+			return selectedContainer.getFullPath();
+	}
+}
+/**
+ * Gives focus to one of the widgets in the group, as determined by the group.
+ */
+public void setInitialFocus() {
+	if (allowNewContainerName)
+		containerNameField.setFocus();
+	else
+		treeViewer.getTree().setFocus();
+}
+/**
+ * Sets the selected existing container.
+ */
+public void setSelectedContainer(IContainer container) {
+	selectedContainer = container;
+	
+	//expand to and select the specified container
+	List itemsToExpand = new ArrayList();
+	IContainer parent = container.getParent();
+	while (parent != null) {
+		itemsToExpand.add(0,parent);
+		parent = parent.getParent();
+	}
+	treeViewer.setExpandedElements(itemsToExpand.toArray()); 
+	treeViewer.setSelection(new StructuredSelection(container),true);
+}
+
+/**
+ * Sets the selected existing file.
+ */
+public void setSelectedFile(IFile selectedFile) {
+    //expand to and select the specified container
+    List itemsToExpand = new ArrayList();
+    IContainer parent = selectedFile.getParent();
+    while (parent != null) {
+        itemsToExpand.add(0,parent);
+        parent = parent.getParent();
+    }
+    treeViewer.setExpandedElements(itemsToExpand.toArray()); 
+    treeViewer.setSelection(new StructuredSelection(selectedFile),true);
+}
+
+public IStructuredSelection getSelection(){
+    return this.lastSelection;
+}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/widgets/IDataSelectionValidator.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/widgets/IDataSelectionValidator.java
new file mode 100644
index 0000000..7c202a8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/widgets/IDataSelectionValidator.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.datatools.connectivity.sqm.core.internal.ui.widgets;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+
+/**
+ * @author ledunnel
+ */
+public interface IDataSelectionValidator {
+
+    public String isValid(IStructuredSelection selection);
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/filter/ConnectionFilterWizardPage.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/filter/ConnectionFilterWizardPage.java
new file mode 100644
index 0000000..046e34f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/filter/ConnectionFilterWizardPage.java
@@ -0,0 +1,139 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2008 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.datatools.connectivity.sqm.core.ui.explorer.filter;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter.ConnectionFilterComposite;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter.IConnectionFilterProvider;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Table;
+
+public abstract class ConnectionFilterWizardPage extends WizardPage implements IConnectionFilterProvider {
+
+	private static final ResourceLoader resource = ResourceLoader
+			.getResourceLoader();
+
+	protected ISelection selection;
+
+	private static final String SELECTION_ONLY_MESSAGE = resource
+			.queryString("_UI_DESCRIPTION_SELECTION_ONLY"); //$NON-NLS-1$
+	
+	private static final String EXPRESSION_ONLY_MESSAGE = resource
+		.queryString("_UI_DESCRIPTION_EXPRESSION_ONLY"); //$NON-NLS-1$
+	
+	protected String defaultTitleText = resource
+       .queryString("_UI_TITLE_FILTER_DIALOG");
+
+	private ConnectionFilterComposite filterComposite;
+	
+	public ConnectionFilterWizardPage(String pageName) {
+		super(pageName);
+	}
+
+    /**
+     * @param pageName
+     * @param title
+     * @param titleImage
+     */
+    protected ConnectionFilterWizardPage(String pageName, String title,
+            ImageDescriptor titleImage, ISelection sel) {
+        super(pageName, title, titleImage);
+        selection = sel;
+    }
+    
+	public void createControl(Composite parent) {
+		createControl(parent, false, false);
+	}
+
+	public void createControl(Composite parent, boolean hideExpressionOption, boolean hideSelectionOption) {
+		filterComposite = new ConnectionFilterComposite(parent, SWT.NONE, this, hideExpressionOption, hideSelectionOption);
+		filterComposite.initializeValues();
+	    setDescription(filterComposite.DEFAULT_MESSAGE);
+
+        if (filterComposite.isHideExpressionOption()) {
+            filterComposite.DEFAULT_MESSAGE = SELECTION_ONLY_MESSAGE;
+            this.setDescription(filterComposite.DEFAULT_MESSAGE);
+        }
+        else if (filterComposite.isHideSelectionOption()) {
+            filterComposite.DEFAULT_MESSAGE = EXPRESSION_ONLY_MESSAGE;
+            this.setDescription(filterComposite.DEFAULT_MESSAGE);
+        }
+        else {
+            this.setDescription(filterComposite.DEFAULT_MESSAGE);
+        }
+
+		setControl(filterComposite);	
+		validatePage();
+	}
+
+	protected void initializeValues() {
+		filterComposite.initializeValues();
+	}
+
+	protected boolean validatePage() {
+		return filterComposite.validatePage(this);
+	}
+	
+	/**
+	 * This method is called when ever the user changes the filter settings.
+	 */
+	public void dataChanged(){
+		validatePage();
+	}
+
+	/**
+	 * This method returns the filter predicate that should be used to set the connection filter
+	 */
+	public String getPredicate() {
+		return filterComposite.getPredicate();
+	}
+
+	/**
+	 * This method indicates whether the filter is disabled or not.
+	 */
+	public boolean isFilterSpecified() {
+		return filterComposite.isFilterSpecified();
+	}
+	
+	/**
+	 * This method indicates whether the include or exclude option is selected for a selection filter.
+	 */
+	public boolean isIncludeSelected() {
+		return filterComposite.isFilterSpecified();
+	}
+
+	/**
+	 * Override this method to override the default table population implementation.
+	 */
+	public void populateSelectionTable(Table selectionTable) {
+		filterComposite.populateSelectionTable(selectionTable);
+	}
+	
+	/**
+	 * This method will refresh the contents of the table
+	 */
+	public void populateSelectionTable() {
+		filterComposite.populateSelectionTable();
+	}
+
+	public void setSelectionListPopulated(boolean isPopulated){
+	    filterComposite.setSelectionListPopulated(isPopulated);
+	}
+
+	/**
+	 * This method provides the filter to use to initialize the UI.
+	 */
+	public abstract ConnectionFilter getConnectionFilter();  
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/providers/content/virtual/AddObjectRegistry.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/providers/content/virtual/AddObjectRegistry.java
new file mode 100644
index 0000000..7492f94
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/providers/content/virtual/AddObjectRegistry.java
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IAddObjectProvider;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.jface.resource.ImageDescriptor;
+
+public class AddObjectRegistry {
+
+	public static AddObjectRegistry INSTANCE = new AddObjectRegistry();
+
+	private Map providers = new HashMap();
+	
+	private IAddObjectProvider nullProvider = new IAddObjectProvider() {
+
+		public ImageDescriptor getCreateImageDescriptor(Object object) {
+			return null;
+		}
+		public String getCreateLabel(Object object) {
+			return null;
+		}
+		public EClass getCreateType(Object object) {
+			return null;
+		}
+		
+	};
+	
+	public IAddObjectProvider getProvider(Object nodeClass) {
+		if(!providers.containsKey(nodeClass)) {
+			providers.put(nodeClass, loadProvider(nodeClass));
+		}
+		return (IAddObjectProvider)providers.get(nodeClass);
+	}
+
+	private Object loadProvider(Object nodeClass) {
+		IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+		IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("org.eclipse.datatools.connectivity.sqm.core.ui", "addObjectProvider"); //$NON-NLS-1$ //$NON-NLS-2$
+		IExtension[] extensions = extensionPoint.getExtensions();
+		for(int i=0; i<extensions.length; ++i) {
+			IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+			for(int j=0; j<configElements.length; ++j) {
+				if(configElements[j].getName().equals("addObjectProvider")) { //$NON-NLS-1$
+					String node = configElements[j].getAttribute("node"); //$NON-NLS-1$
+					if(node.equals(nodeClass.getClass().getName())) {
+						try {
+							return (IAddObjectProvider) configElements[j].createExecutableExtension("provider"); //$NON-NLS-1$
+						}
+						catch(CoreException e) {
+							e.printStackTrace();
+						}
+					}
+				}
+			}
+		}
+		
+		return this.nullProvider;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/providers/content/virtual/CreationInfoRegistry.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/providers/content/virtual/CreationInfoRegistry.java
new file mode 100644
index 0000000..46581eb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/providers/content/virtual/CreationInfoRegistry.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+
+public class CreationInfoRegistry {
+
+	public static CreationInfoRegistry INSTANCE = new CreationInfoRegistry();
+
+	private Map providers = new HashMap();
+	
+	private ICreationInfoProvider nullProvider = new ICreationInfoProvider() {
+
+		public boolean isCreateActionSupported(IVirtualNode virtualNode) {
+			return true;
+		}
+
+		public boolean isCreateDistinctType() {
+			return true;
+		}
+
+		public boolean isCreateRowTypeSupported() {
+			return true;
+		}
+		
+	};
+	
+	public ICreationInfoProvider getProvider(DatabaseDefinition definition) {
+		if(!providers.containsKey(definition)) {
+			providers.put(definition, loadProvider(definition));
+		}
+		return (ICreationInfoProvider)providers.get(definition);
+	}
+
+	private Object loadProvider(DatabaseDefinition def) {
+		IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+		IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("org.eclipse.datatools.connectivity.sqm.core.ui", "creationInfoProvider"); //$NON-NLS-1$ //$NON-NLS-2$
+		IExtension[] extensions = extensionPoint.getExtensions();
+		for(int i=0; i<extensions.length; ++i) {
+			IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+			for(int j=0; j<configElements.length; ++j) {
+				if(configElements[j].getName().equals("provider")) { //$NON-NLS-1$
+					String product = configElements[j].getAttribute("product"); //$NON-NLS-1$
+					if(product.equals(def.getProduct())) {
+						String version = configElements[j].getAttribute("version"); //$NON-NLS-1$
+						if(version.equals(def.getVersion())) {
+							try {
+								return (ICreationInfoProvider) configElements[j].createExecutableExtension("class"); //$NON-NLS-1$
+							}
+							catch(CoreException e) {
+								e.printStackTrace();
+							}
+						}
+					}
+				}
+			}
+		}
+		
+		return this.nullProvider;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/providers/content/virtual/ICreationInfoProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/providers/content/virtual/ICreationInfoProvider.java
new file mode 100644
index 0000000..e8786a6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/providers/content/virtual/ICreationInfoProvider.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+
+public interface ICreationInfoProvider {
+
+	boolean isCreateActionSupported(IVirtualNode virtualNode);
+
+	boolean isCreateDistinctType();
+
+	boolean isCreateRowTypeSupported();
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/providers/content/virtual/VirtualNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/providers/content/virtual/VirtualNode.java
new file mode 100644
index 0000000..476d6b9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/providers/content/virtual/VirtualNode.java
@@ -0,0 +1,232 @@
+/*******************************************************************************
+ * Copyright  2001, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual;
+
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentService;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter.IFilterNode;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.DatabaseConnectionRegistry;
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.datatools.modelbase.sql.schema.Catalog;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.emf.ecore.EClass;
+
+
+/**
+ * @author ljulien
+ */
+public abstract class VirtualNode implements IVirtualNode, IAdaptable
+{
+	private String name;
+	private String displayName;
+	private Object parent;
+	private List children = new LinkedList ();
+	
+	public VirtualNode (String name, String displayName, Object parent)
+	{
+		this.name = name;
+		this.displayName = displayName;
+		this.parent = parent;
+		if (parent != null && parent instanceof IVirtualNode)
+		{
+		    ((IVirtualNode)parent).addChildren(this);
+		}
+	}
+	
+	/**
+	 * @see org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode#getName()
+	 */
+	public String getName()
+	{
+		return this.name;
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode#getDisplayName()
+	 */
+	public String getDisplayName()
+	{
+		return this.displayName != null? this.displayName : this.name;
+	}
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode#getParent()
+     */
+    public Object getParent()
+    {
+        return parent;
+    }
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode#getChildren()
+     */
+    protected List getChildren()
+    {
+        return children;
+    }
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode#hasChildren()
+     */
+    public boolean hasChildren()
+    {
+        return !children.isEmpty();
+    }
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode#getChildrenArray()
+     */
+    public Object[] getChildrenArray()
+    {
+        return children.toArray(new Object [children.size()]);
+    }
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode#addChildren(java.lang.Object)
+     */
+    public void addChildren(Object child)
+    {
+        if (!children.contains(child))
+        {
+            children.add(child);
+        }
+    }
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode#removeChildren(java.lang.Object)
+     */
+    public void removeChildren(Object child)
+    {
+        if (children.contains(child))
+        {
+            children.remove(child);
+        }
+    }
+
+    /**
+     * Will remove all the children include in the Children collection
+     */
+    public void removeAllChildren ()
+    {
+        children.removeAll(children);
+    }
+    
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode#supports(org.eclipse.emf.ecore.EClass)
+     */
+    public boolean supports(EClass type)
+    {
+        return false;
+    }
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode#addChildren(java.util.Collection)
+     */
+    public void addChildren(Collection collection)
+    {
+        children.removeAll(children);
+        children.addAll(collection);
+    }
+
+	public ConnectionInfo getParentConnection() {
+		return DatabaseConnectionRegistry.getInstance().getConnectionForDatabase(getDatabase());
+	}
+	
+	protected SQLObject getParentSQLObject() {
+		Object parent = this;
+		while (parent != null
+				&& !(parent instanceof SQLObject)
+				&& !((parent = ((IVirtualNode) parent).getParent()) instanceof SQLObject))
+			;
+		return parent instanceof SQLObject ? (SQLObject) parent : null;
+	}
+	
+	protected Database getDatabase() {
+	    ContainmentService containment = RDBCorePlugin.getDefault()
+				.getContainmentService();
+		SQLObject sqlObject = getParentSQLObject();
+		while (sqlObject != null
+				&& !(sqlObject instanceof Database)
+				&& !((sqlObject = (SQLObject) containment
+						.getContainer(sqlObject)) instanceof Database))
+			;
+		return sqlObject instanceof Database ? (Database) sqlObject : null;
+	}
+
+	public Object getAdapter(Class adapter) {
+		if (adapter.isInstance(this)) {
+			return this;
+		}
+		return Platform.getAdapterManager().getAdapter(this,adapter);
+	}
+	
+	public String getFilterName(String virtualNodeType){
+		if(getParent() instanceof Schema){
+    		Schema schema = (Schema) getParent();
+    		if (schema.getCatalog() == null) {
+    			return schema.getName() + IFilterNode.SEPARATOR
+    					+ virtualNodeType;
+    		}
+
+    		return schema.getCatalog().getName() + IFilterNode.SEPARATOR
+    				+ schema.getName() + IFilterNode.SEPARATOR
+    				+ virtualNodeType;    		
+    	}
+    	else if(getParent() instanceof Catalog){
+    		Catalog catalog = (Catalog)getParent();
+    		return catalog.getName() + IFilterNode.SEPARATOR
+    				+ virtualNodeType;
+    	}
+    	else if(getParent() instanceof Routine)
+    	{
+    		Routine routine=(Routine) getParent();
+    		return routine.getName() +IFilterNode.SEPARATOR +virtualNodeType;
+    	}
+    	return null;		
+	}
+	
+	   public boolean isCreateActionSupported(DatabaseDefinition dbdef) {
+	        ICreationInfoProvider provider = CreationInfoRegistry.INSTANCE.getProvider(dbdef);
+	        if (provider != null) {
+	            return provider.isCreateActionSupported(this);
+	        }
+	        return true;
+	    }
+
+	    public boolean isCreateDistinctTypeSupported(
+	            DatabaseDefinition dbdef) {
+	        ICreationInfoProvider provider = CreationInfoRegistry.INSTANCE.getProvider(dbdef);
+	        if (provider != null) {
+	            return provider.isCreateDistinctType();
+	        }
+	        return true;
+	    }
+
+	    public boolean isCreateRowTypeSupported(DatabaseDefinition dbdef) {
+	        ICreationInfoProvider provider = CreationInfoRegistry.INSTANCE.getProvider(dbdef);
+	        if (provider != null) {
+	            return provider.isCreateRowTypeSupported();
+	        }
+	        return true;
+	    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/virtual/IAddObjectProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/virtual/IAddObjectProvider.java
new file mode 100644
index 0000000..9c30839
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/virtual/IAddObjectProvider.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.jface.resource.ImageDescriptor;
+
+public interface IAddObjectProvider {
+
+	ImageDescriptor getCreateImageDescriptor(Object object);
+	String getCreateLabel(Object object);
+	EClass getCreateType(Object object);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/virtual/ICreationInfo.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/virtual/ICreationInfo.java
new file mode 100644
index 0000000..cbd48f1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/virtual/ICreationInfo.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+
+public interface ICreationInfo {
+	boolean isCreateActionSupported(DatabaseDefinition dbdef);
+	boolean isCreateDistinctTypeSupported(DatabaseDefinition dbdef);
+	boolean isCreateRowTypeSupported(DatabaseDefinition dbdef);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/virtual/IVirtualCreationNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/virtual/IVirtualCreationNode.java
new file mode 100644
index 0000000..28648fb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/virtual/IVirtualCreationNode.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.jface.resource.ImageDescriptor;
+
+public interface IVirtualCreationNode extends IVirtualNode {
+	/**
+	 * Get the image descriptors for the Create menu.
+	 * @return An array of ImageDescriptor objects.
+	 */
+	public ImageDescriptor[] getCreateImageDescriptor();
+
+	/**
+	 * Get the labels for the Create menu.
+	 * @return An array of String objects.
+	 */
+	public String[] getCreateLabel();
+
+	/**
+	 * Get the types of objects to be created for the Create menu.
+	 * @return An array of EClass objects.
+	 */
+	public EClass[] getCreateType();
+
+	/**
+	 * Returns true if the Create menu should be displayed as Add.
+	 * @return boolean
+	 */
+	public boolean shouldDisplayAdd();
+
+	/**
+	 * Returns true if the Create menu should be displayed as Create.
+	 * @return boolean
+	 */
+	public boolean shouldDisplayCreate();
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/virtual/IVirtualNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/virtual/IVirtualNode.java
new file mode 100644
index 0000000..6cd9785
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/virtual/IVirtualNode.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo;
+
+/**
+ * @author ljulien
+ */
+public interface IVirtualNode
+{
+	/**
+	 * Name of the Virtual Node
+	 * @return
+	 */
+	public String getName ();
+	
+	/**
+	 * Display Name of the Virtual Node - Will be displayed in the Model Explorer
+	 * if null, getName will be used
+	 * @return
+	 */
+	public String getDisplayName ();
+	
+	/**
+	 * @return the parent of this node in the tree
+	 */
+	public Object getParent ();
+	
+	/**
+	 * @return true if has any children?
+	 */
+	public boolean hasChildren ();
+	
+	/**
+	 * @return The child array
+	 */
+	public Object [] getChildrenArray ();
+	
+	/**
+	 * Will add the following children to the collection
+	 */
+	public void addChildren (Object child);
+
+	/**
+	 * Will add the following children to the collection
+	 */
+	public void addChildren (Collection collection);
+	
+	/**
+	 * Will remove the provided children from the child collection
+	 * @param child
+	 */
+	public void removeChildren (Object child);
+	
+	/**
+	 * Will remove all the children contained within this node
+	 */
+	public void removeAllChildren ();
+	
+	/**
+	 * @return The ID that elements should carry to be included inside this virtual folder
+	 */
+	public String getGroupID ();
+	
+	public ConnectionInfo getParentConnection();
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/services/IDataToolsUIServiceManager.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/services/IDataToolsUIServiceManager.java
new file mode 100644
index 0000000..03f663d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/services/IDataToolsUIServiceManager.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.ui.services;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.services.IVirtualNodeServiceFactory;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.services.DataToolsUIServiceManager;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.services.IColumnHelperService;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.services.IDecorationService;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.services.IExplorerSorterService;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.services.IForeignKeyHelperService;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.services.ILabelService;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.services.IMarkerNavigationService;
+
+
+/**
+ * @author ljulien
+ */
+public interface IDataToolsUIServiceManager
+{
+	public static final DataToolsUIServiceManager INSTANCE = new DataToolsUIServiceManager ();
+	
+	public IDecorationService getDecorationService ();
+	public IColumnHelperService getColumnHelperService ();
+	public IForeignKeyHelperService getForeignKeyHelperService ();
+	public IVirtualNodeServiceFactory getVirtualNodeServiceFactory ();
+	public ILabelService getLabelService (Object element);
+	public void refreshColumnDecorationService ();
+	public IMarkerNavigationService getMarkerNavigationService ();
+	public IExplorerSorterService getExplorerSorterService ();
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/services/ISorterValidatorProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/services/ISorterValidatorProvider.java
new file mode 100644
index 0000000..dc1e809
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/ui/services/ISorterValidatorProvider.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.ui.services;
+
+
+/**
+ * @author ljulien
+ */
+public interface ISorterValidatorProvider 
+{
+    public boolean isNotValid (Object element1, Object element2);
+    public boolean shouldCompare (Object element1, Object element2);
+    public int compareTo (Object element1, Object element2);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/.classpath b/plugins/org.eclipse.datatools.connectivity.sqm.core/.classpath
new file mode 100644
index 0000000..1fa3e68
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/.gitignore b/plugins/org.eclipse.datatools.connectivity.sqm.core/.gitignore
new file mode 100644
index 0000000..4178055
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/.gitignore
@@ -0,0 +1,4 @@
+bin
+temp.folder
+build.xml
+rdbcore.jar
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/.options b/plugins/org.eclipse.datatools.connectivity.sqm.core/.options
new file mode 100644
index 0000000..1899a45
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/.options
@@ -0,0 +1 @@
+org.eclipse.datatools.connectivity.sqm.core/debug = false
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/.project b/plugins/org.eclipse.datatools.connectivity.sqm.core/.project
new file mode 100644
index 0000000..8ff2662
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/.project
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.sqm.core</name>
+	<comment></comment>
+	<projects>
+		<project>com.ibm.datatools.modelExtension</project>
+		<project>org.eclipse.core.resources</project>
+		<project>org.eclipse.emf.ecore</project>
+		<project>org.eclipse.ui</project>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.connectivity.sqm.core/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..190a01f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Fri Feb 26 12:04:10 PST 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/.template b/plugins/org.eclipse.datatools.connectivity.sqm.core/.template
new file mode 100644
index 0000000..f3bcd41
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/.template
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<form>

+   <p/><p><b>Tips on working with this plug-in project</b></p><li>For the view of the new plug-in at a glance, go to the <img href="pageImage"/><a href="OverviewPage">Overview</a>.</li><li>You can test the contributions of this plug-in by launching another instance of the workbench. On the <b>Run</b> menu, click <b>Run As</b> and choose <img href="runTimeWorkbenchImage"/><a href="action.run">Run-time Workbench</a> from the available choices.</li><li>You can add more functionality to this plug-in by adding extensions using the <a href="action.newExtension">New Extension Wizard</a>.</li><li>The plug-in project contains Java code that you can debug. Place breakpoints in Java classes. On the <b>Run</b> menu, select <b>Debug As</b> and choose <img href="runTimeWorkbenchImage"/><a href="action.debug">Run-time Workbench</a> from the available choices.</li>

+</form>

diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.connectivity.sqm.core/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..ccaffae
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/META-INF/MANIFEST.MF
@@ -0,0 +1,38 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.sqm.core; singleton:=true
+Bundle-Version: 1.4.1.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Activator: org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Export-Package: org.eclipse.datatools.connectivity.sqm.core,
+ org.eclipse.datatools.connectivity.sqm.core.connection,
+ org.eclipse.datatools.connectivity.sqm.core.containment,
+ org.eclipse.datatools.connectivity.sqm.core.definition,
+ org.eclipse.datatools.connectivity.sqm.core.mappings,
+ org.eclipse.datatools.connectivity.sqm.core.rte,
+ org.eclipse.datatools.connectivity.sqm.core.rte.fe,
+ org.eclipse.datatools.connectivity.sqm.core.rte.jdbc,
+ org.eclipse.datatools.connectivity.sqm.core.util,
+ org.eclipse.datatools.connectivity.sqm.internal.core,
+ org.eclipse.datatools.connectivity.sqm.internal.core.connection,
+ org.eclipse.datatools.connectivity.sqm.internal.core.containment,
+ org.eclipse.datatools.connectivity.sqm.internal.core.definition,
+ org.eclipse.datatools.connectivity.sqm.internal.core.resources,
+ org.eclipse.datatools.connectivity.sqm.internal.core.rte,
+ org.eclipse.datatools.connectivity.sqm.internal.core.rte.fe,
+ org.eclipse.datatools.connectivity.sqm.internal.core.util,
+ org.eclipse.datatools.connectivity.sqm.loader
+Require-Bundle: org.eclipse.core.resources,
+ org.eclipse.emf.ecore.change,
+ org.eclipse.emf.ecore.xmi,
+ org.eclipse.core.runtime,
+ org.eclipse.datatools.modelbase.sql,
+ org.eclipse.datatools.modelbase.dbdefinition,
+ org.eclipse.datatools.connectivity
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
+Import-Package: com.ibm.icu.text;version="3.6.1",
+ com.ibm.icu.util;version="3.6.1"
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/about.html b/plugins/org.eclipse.datatools.connectivity.sqm.core/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/build.properties b/plugins/org.eclipse.datatools.connectivity.sqm.core/build.properties
new file mode 100644
index 0000000..f911fa5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/build.properties
@@ -0,0 +1,29 @@
+###############################################################################
+# Copyright (c) 2001, 2009 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+bin.includes = plugin.xml,\
+               .,\
+               plugin.properties,\
+               schema/,\
+               .options,\
+               about.html,\
+               META-INF/
+source.. = src/
+#src.includes = component.xml
+
+src.dir =		src/
+plugin.version =	1.1.0.qualifier
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.5
+javac.target =		1.5
+javacSource = 1.5
+javacTarget = 1.5
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/build.xml b/plugins/org.eclipse.datatools.connectivity.sqm.core/build.xml
new file mode 100644
index 0000000..378880c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/build.xml
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ *************************************************************************
+ * Copyright (c) 2005 Sybase, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Sybase, Inc.  - initial API and implementation
+ *  
+ ***************************************************************************
+ -->
+<project name="org.eclipse.datatools.connectivity.sqm.core" default="build.jars" basedir=".">
+	<import file="../org.eclipse.datatools.build/common_build.xml" optional="true"/>
+	<property name="module.name" value="org.eclipse.datatools.connectivity.sqm.core"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="eclipse.home" location="."/>
+	<property file="build.properties"/>
+	<!-- JavaDoc settings -->
+	<property name="javadocWindowTitle" value="DTP SQL Query Model Core"/>
+	<property name="javadocDocTitle" value="DTP SQL Query Model Core API (Internal)"/>
+	<property name="javadocPackages" value="org.eclipse.datatools.connectivity.sqm.core.*"/>
+	<property name="javadocFooter" value="&lt;i>Copyright &#169;  2005 IBM Corporation and others. All rights reserved. &lt;/i>"/>
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="true"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="true"/>
+	<property name="javacSource" value="${javac.source}"/>
+	<property name="javacTarget" value="${javac.target}"/>
+	<property name="compilerArg" value=""/>
+	<path id="path_bootclasspath">
+		<fileset dir="${java.home}/lib">
+			<include name="*.jar"/>
+		</fileset>
+		<fileset dir="${eclipse.home}/plugins">
+			<!-- Include jared plug-ins -->
+			<include name="org.eclipse.core.runtime_*.jar"/>
+			<include name="org.eclipse.osgi_*.jar"/>
+			<include name="org.eclipse.core.resources_*.jar"/>
+			<include name="org.eclipse.emf.ecore_*.jar"/>
+			<include name="org.eclipse.emf.common_*.jar"/>
+			<include name="org.eclipse.emf.ecore.sdo_*.jar"/>
+			<include name="org.eclipse.emf.commonj.sdo_*.jar"/>
+			<include name="org.eclipse.emf.ecore.xmi_*.jar"/>
+			<include name="org.eclipse.emf.ecore.change_*.jar"/>
+			<include name="com.ibm.icu_*.jar"/>
+			<!-- Include expanded plug-ins -->
+			<include name="org.eclipse.core.runtime_*/org.eclipse.core.runtime_*.jar"/>
+			<include name="org.eclipse.osgi_*/org.eclipse.osgi_*.jar"/>
+			<include name="org.eclipse.core.resources_*/org.eclipse.core.resources_*.jar"/>
+			<include name="org.eclipse.emf.ecore_*/org.eclipse.emf.ecore*.jar"/>
+			<include name="org.eclipse.emf.common_*/org.eclipse.emf.common*.jar"/>
+			<include name="org.eclipse.emf.ecore.sdo_*/org.eclipse.emf.ecore.sdo*.jar"/>
+			<include name="org.eclipse.emf.commonj.sdo_*/org.eclipse.emf.commonj.sdo*.jar"/>
+			<include name="org.eclipse.emf.ecore.xmi_*/org.eclipse.emf.ecore.xmi*.jar"/>
+			<include name="org.eclipse.emf.ecore.change_*/org.eclipse.emf.ecore.change*.jar"/>
+		</fileset>
+		<!-- Dependencies on other DTP plug-ins, built before this one -->
+		<fileset dir="../">
+			<include name="org.eclipse.datatools.modelbase.dbdefinition/bin/*"/>
+			<include name="org.eclipse.datatools.modelbase.dbdefinition/databasedefinition.jar"/>
+			<include name="org.eclipse.datatools.modelbase.sql/bin/*"/>
+			<include name="org.eclipse.datatools.modelbase.sql/sqlmodel.jar"/>
+			<include name="org.eclipse.datatools.connectivity/bin/*"/>
+			<include name="org.eclipse.datatools.connectivity/connectivity.jar"/>
+			<include name="org.eclipse.datatools.connectivity.db.generic/bin/*"/>
+			<include name="org.eclipse.datatools.connectivity.db.generic/genericdb.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins">
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/${module.name}">
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+	</target>
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+	</target>
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.datatools.connectivity.sqm.core for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<zip destfile="${plugin.destination}/${module.name}_${plugin.version}.jar" basedir="${temp.folder}/${module.name}_${plugin.version}" filesonly="false" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+	<target name="rdbcore.jar" depends="init" unless="rdbcore.jar" description="Create jar: org.eclipse.datatools.connectivity.sqm.core rdbcore.jar.">
+		<delete dir="${temp.folder}/rdbcore.jar.bin"/>
+		<mkdir dir="${temp.folder}/rdbcore.jar.bin"/>
+		<!-- compile the source code -->
+		<javac destdir="${temp.folder}/rdbcore.jar.bin" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bootclasspath}" source="${javacSource}" target="${javacTarget}">
+			<compilerarg line="${compilerArg}"/>
+			<classpath refid="path_bootclasspath"/>
+			<src path="src/"/>
+		</javac>
+		<!-- Copy necessary resources -->
+		<copy todir="${temp.folder}/rdbcore.jar.bin" failonerror="true" overwrite="false">
+			<fileset dir="src/" excludes="**/*.java, **/package.htm*,null"/>
+		</copy>
+		<mkdir dir="${build.result.folder}"/>
+		<jar destfile="${build.result.folder}/rdbcore.jar" basedir="${temp.folder}/rdbcore.jar.bin"/>
+		<delete dir="${temp.folder}/rdbcore.jar.bin"/>
+	</target>
+	<target name="rdbcoresrc.zip" depends="init" unless="rdbcoresrc.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<zip destfile="${build.result.folder}/rdbcoresrc.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/" includes="**/*.java"/>
+		</zip>
+	</target>
+	<target name="build.jars" depends="init" description="Build all the jars for the plug-in: org.eclipse.datatools.connectivity.sqm.core.">
+		<available property="rdbcore.jar" file="${build.result.folder}/rdbcore.jar"/>
+		<antcall target="rdbcore.jar"/>
+	</target>
+	<target name="build.sources" depends="init">
+		<available property="rdbcoresrc.zip" file="${build.result.folder}/rdbcoresrc.zip"/>
+		<antcall target="rdbcoresrc.zip"/>
+	</target>
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/${module.name}_${plugin.version}"/>
+		<copy todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}" includes="rdbcore.jar"/>
+		</copy>
+		<copy todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="true" overwrite="false">
+			<fileset dir="${basedir}" includes="plugin.xml,META-INF/,rdbcore.jar,plugin.properties,schema/,.options,about.html"/>
+		</copy>
+		<copy todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}" includes="rdbcoresrc.zip"/>
+		</copy>
+	</target>
+	<target name="build.zips" depends="init"/>
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/${module.name}_${plugin.version}"/>
+		<copy file="${build.result.folder}/rdbcoresrc.zip" todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="false" overwrite="false"/>
+		<copy todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}" includes="component.xml"/>
+		</copy>
+	</target>
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/${module.name}_${plugin.version}"/>
+		<copy file="${temp.folder}/rdbcore.jar.bin.log" todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="false" overwrite="false"/>
+	</target>
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.datatools.connectivity.sqm.core of all the zips, jars and logs created.">
+		<delete file="${build.result.folder}/rdbcore.jar"/>
+		<delete file="${build.result.folder}/rdbcoresrc.zip"/>
+		<delete file="${plugin.destination}/${module.name}_${plugin.version}.jar"/>
+		<delete file="${plugin.destination}/${module.name}_${plugin.version}.zip"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="C:/V3/3.1/eclipse/workspace-dtp/org.eclipse.datatools.connectivity.sqm.core" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.datatools.connectivity.sqm.core.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}" includes="**/*.bin.log"/>
+		</delete>
+		<zip destfile="${plugin.destination}/${module.name}_${plugin.version}.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+</project>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/plugin.properties b/plugins/org.eclipse.datatools.connectivity.sqm.core/plugin.properties
new file mode 100644
index 0000000..fbc3262
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/plugin.properties
@@ -0,0 +1,21 @@
+###############################################################################
+# Copyright (c) 2001, 2004 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName=Eclipse Data Tools Platform SQM Core Plug-in
+providerName=Eclipse Data Tools Platform
+databaseDefinitionExtensionPointName=Database Definition
+logicalContainmentExtensionPointName=Logical Containment
+DataModelElementFactoryExtensionPointName=Data Model Element Factory
+DDLReverseEngineeringExtensionPointName=DDL Reverse Engineering
+ForwardEngineeringExtensionPointName=Forward Engineering
+CatalogExtensionPointName=Database Catalog
+DatabaseRecognition=Database Recognition
+FilterProfileExtensionName=SQL Model Filter Settings
+SQLModelConnectionName=SQL Model Connection
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/plugin.xml b/plugins/org.eclipse.datatools.connectivity.sqm.core/plugin.xml
new file mode 100644
index 0000000..b9a1502
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/plugin.xml
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+
+   <extension-point id="databaseDefinition" name="%databaseDefinitionExtensionPointName" schema="schema/databaseDefinition.exsd"/>
+   <extension-point id="logicalContainment" name="%logicalContainmentExtensionPointName" schema="schema/logicalContainment.exsd"/>
+   <extension-point id="dataModelElementFactory" name="%DataModelElementFactoryExtensionPointName" schema="schema/dataModelElementFactory.exsd"/>
+   <extension-point id="ddlParser" name="%DDLParserExtensionPointName" schema="schema/ddlParser.exsd"/>
+   <extension-point id="ddlGeneration" name="%DDLGenerationExtensionPointName" schema="schema/ddlGeneration.exsd"/>
+   <extension-point id="catalog" name="%CatalogExtensionPointName" schema="schema/catalog.exsd"/>
+   <extension-point id="databaseRecognition" name="%DatabaseRecognition" schema="schema/databaseRecognition.exsd"/>
+   <extension-point id="metaDataExtension" name="metaDataExtension" schema="schema/metaDataExtension.exsd"/>
+   <extension-point id="mappings" name="Mappings" schema="schema/mappings.exsd"/>
+   <extension-point id="sqlexceptionHandler" name="sqlexceptionHandler" schema="schema/sqlexceptionHandler.exsd"/>
+   <extension-point id="validConnectionHandler" name="%validConnectionHandlerName" schema="schema/validConnectionHandler.exsd"/>
+   
+
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.logicalContainment">
+      <containment
+            package="http:///org/eclipse/datatools/modelbase/sql/schema.ecore"
+            class="Dependency"
+            provider="org.eclipse.datatools.connectivity.sqm.internal.core.containment.DependencyContainmentProvider">
+      </containment>
+      <containment
+            package="http:///org/eclipse/datatools/modelbase/sql/schema.ecore"
+            class="Database"
+            provider="org.eclipse.datatools.connectivity.sqm.internal.core.containment.DatabaseContainmentProvider">
+      </containment>
+      <containment
+            package="http:///org/eclipse/datatools/modelbase/sql/schema.ecore"
+            class="Schema"
+            provider="org.eclipse.datatools.connectivity.sqm.internal.core.containment.SchemaContainmentProvider">
+      </containment>
+      <containment
+            package="http:///org/eclipse/datatools/modelbase/sql/schema.ecore"
+            class="Comment"
+            provider="org.eclipse.datatools.connectivity.sqm.internal.core.containment.CommentContainmentProvider">
+      </containment>
+      <containment
+            package="http:///org/eclipse/datatools/modelbase/sql/tables.ecore"
+            class="BaseTable"
+            provider="org.eclipse.datatools.connectivity.sqm.internal.core.containment.TableContainmentProvider">
+      </containment>
+      <containment
+            package="http:///org/eclipse/datatools/modelbase/sql/tables.ecore"
+            class="ViewTable"
+            provider="org.eclipse.datatools.connectivity.sqm.internal.core.containment.ViewContainmentProvider">
+      </containment>
+      <containment
+            package="http:///org/eclipse/datatools/modelbase/sql/tables.ecore"
+            class="Column"
+            provider="org.eclipse.datatools.connectivity.sqm.internal.core.containment.ColumnContainmentProvider">
+      </containment>
+      <containment
+            package="http:///org/eclipse/datatools/modelbase/sql/schema.ecore"
+            class="Sequence"
+            provider="org.eclipse.datatools.connectivity.sqm.internal.core.containment.SequenceContainmentProvider">
+      </containment>
+      <containment
+            package="http:///org/eclipse/datatools/modelbase/sql/tables.ecore"
+            class="Trigger"
+            provider="org.eclipse.datatools.connectivity.sqm.internal.core.containment.TriggerContainmentProvider">
+      </containment>
+      <containment
+            package="http:///org/eclipse/datatools/modelbase/sql/constraints.ecore"
+            class="Index"
+            provider="org.eclipse.datatools.connectivity.sqm.internal.core.containment.IndexContainmentProvider">
+      </containment>
+      <containment
+            package="http:///org/eclipse/datatools/modelbase/sql/constraints.ecore"
+            class="Constraint"
+            provider="org.eclipse.datatools.connectivity.sqm.internal.core.containment.ConstraintContainmentProvider">
+      </containment>
+      <containment
+            package="http:///org/eclipse/datatools/modelbase/sql/routines.ecore"
+            class="Routine"
+            provider="org.eclipse.datatools.connectivity.sqm.internal.core.containment.RoutineContainmentProvider">
+      </containment>
+      <containment
+            package="http:///org/eclipse/datatools/modelbase/sql/datatypes.ecore"
+            class="UserDefinedType"
+            provider="org.eclipse.datatools.connectivity.sqm.internal.core.containment.UserDefinedTypeContainmentProvider">
+      </containment>
+      <containment
+            package="http:///org/eclipse/datatools/modelbase/sql/schema.ecore"
+            class="Catalog"
+            provider="org.eclipse.datatools.connectivity.sqm.internal.core.containment.CatalogContainmentProvider">
+      </containment>
+      <containment
+            package="http:///org/eclipse/datatools/modelbase/sql/accesscontrol.ecore"
+            class="AuthorizationIdentifier"
+            provider="org.eclipse.datatools.connectivity.sqm.internal.core.containment.AuthorizationIdContainmentProvider">
+      </containment>
+      <containment
+            package="http:///org/eclipse/datatools/modelbase/sql/accesscontrol.ecore"
+            class="Privilege"
+            provider="org.eclipse.datatools.connectivity.sqm.internal.core.containment.PrivilegeContainmentProvider">
+      </containment>
+      <containment
+            package="http:///org/eclipse/datatools/modelbase/sql/accesscontrol.ecore"
+            class="RoleAuthorization"
+            provider="org.eclipse.datatools.connectivity.sqm.internal.core.containment.RoleAuthorizationContainmentProvider">
+      </containment>
+   </extension>
+   <extension
+         point="org.eclipse.datatools.connectivity.connectionProfile">
+      <connectionFactoryAdapter
+            class="org.eclipse.datatools.connectivity.sqm.core.SQMConnectionFactory"
+            id="org.eclipse.datatools.connectivity.sqm.core.connection.ConnectionInfo"
+            name="%SQLModelConnectionName"
+            factory="java.sql.Connection"/>
+      <profileExtension
+            id="org.eclipse.datatools.connectivity.sqm.filterSettings"
+            name="%FilterProfileExtensionName"
+            profile="org.eclipse.datatools.connectivity.db.generic.connectionProfile"/>
+   </extension>
+</plugin>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/schema-doc/org_eclipse_datatools_connectivity_sqm_core_catalog.html b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema-doc/org_eclipse_datatools_connectivity_sqm_core_catalog.html
new file mode 100644
index 0000000..35d1fed
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema-doc/org_eclipse_datatools_connectivity_sqm_core_catalog.html
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Catalog</title>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.sdk_3.1.0/book.css");</style>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.platform.doc.isv_3.1.0/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>Catalog</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.connectivity.sqm.core.Catalog<p></p>
+<h6 class=CaptionFigColumn id=header>Since: </h6>[Enter the first release in which this extension point appears.]
+<p></p>
+
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>[Enter description of this extension point.]</p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.catalog">catalog</a>+)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.catalog">catalog</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST catalog</p>
+<p class=code id=dtdAttlist>product&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>version&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>provider&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>product</b> - </li>
+<li><b>version</b> - </li>
+<li><b>provider</b> - </li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>Examples: </h6>[Enter extension point usage example here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>API Information: </h6>[Enter API information here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>Supplied Implementation: </h6>[Enter information about supplied implementation of this extension point.]
+<p></p>
+
+<br>
+<p class=note id=copyright>
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/schema-doc/org_eclipse_datatools_connectivity_sqm_core_dataModelElementFactory.html b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema-doc/org_eclipse_datatools_connectivity_sqm_core_dataModelElementFactory.html
new file mode 100644
index 0000000..3ea1025
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema-doc/org_eclipse_datatools_connectivity_sqm_core_dataModelElementFactory.html
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>dataModelElementFactory</title>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.sdk_3.1.0/book.css");</style>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.platform.doc.isv_3.1.0/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>dataModelElementFactory</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.connectivity.sqm.core.dataModelElementFactory<p></p>
+<h6 class=CaptionFigColumn id=header>Since: </h6>[Enter the first release in which this extension point appears.]
+<p></p>
+
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>[Enter description of this extension point.]</p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.factory">factory</a>+)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.factory">factory</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST factory</p>
+<p class=code id=dtdAttlist>product&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>version&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>class&nbsp;&nbsp;&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>product</b> - </li>
+<li><b>version</b> - </li>
+<li><b>class</b> - </li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>Examples: </h6>[Enter extension point usage example here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>API Information: </h6>[Enter API information here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>Supplied Implementation: </h6>[Enter information about supplied implementation of this extension point.]
+<p></p>
+
+<br>
+<p class=note id=copyright>
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/schema-doc/org_eclipse_datatools_connectivity_sqm_core_databaseDefinition.html b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema-doc/org_eclipse_datatools_connectivity_sqm_core_databaseDefinition.html
new file mode 100644
index 0000000..36984da
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema-doc/org_eclipse_datatools_connectivity_sqm_core_databaseDefinition.html
@@ -0,0 +1,50 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Database Definition</title>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.sdk_3.1.0/book.css");</style>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.platform.doc.isv_3.1.0/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>Database Definition</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.connectivity.sqm.core.databaseDefinition<p></p>
+<h6 class=CaptionFigColumn id=header>Since: </h6>[Enter the first release in which this extension point appears.]
+<p></p>
+
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>[Enter description of this extension point.]</p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.definition">definition</a>+)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.definition">definition</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST definition</p>
+<p class=code id=dtdAttlist>description&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>product&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>previous&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>allowsConnections&nbsp;&nbsp;&nbsp;&nbsp;(true | false) <p class=code id=dtdAttlist>productDisplayString&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>versionDisplayString&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>description</b> - </li>
+<li><b>product</b> - </li>
+<li><b>version</b> - </li>
+<li><b>previous</b> - </li>
+<li><b>allowsConnections</b> - </li>
+<li><b>productDisplayString</b> - </li>
+<li><b>versionDisplayString</b> - </li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>Examples: </h6>[Enter extension point usage example here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>API Information: </h6>[Enter API information here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>Supplied Implementation: </h6>[Enter information about supplied implementation of this extension point.]
+<p></p>
+
+<br>
+<p class=note id=copyright>
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/schema-doc/org_eclipse_datatools_connectivity_sqm_core_databaseRecognition.html b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema-doc/org_eclipse_datatools_connectivity_sqm_core_databaseRecognition.html
new file mode 100644
index 0000000..2a9a182
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema-doc/org_eclipse_datatools_connectivity_sqm_core_databaseRecognition.html
@@ -0,0 +1,45 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Database Recognition</title>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.sdk_3.1.0/book.css");</style>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.platform.doc.isv_3.1.0/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>Database Recognition</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.connectivity.sqm.core.databaseRecognition<p></p>
+<h6 class=CaptionFigColumn id=header>Since: </h6>[Enter the first release in which this extension point appears.]
+<p></p>
+
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>[Enter description of this extension point.]</p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.recognizer">recognizer</a>+)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.recognizer">recognizer</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST recognizer</p>
+<p class=code id=dtdAttlist>class&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>class</b> - </li>
+<li><b>name</b> - </li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>Examples: </h6>[Enter extension point usage example here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>API Information: </h6>[Enter API information here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>Supplied Implementation: </h6>[Enter information about supplied implementation of this extension point.]
+<p></p>
+
+<br>
+<p class=note id=copyright>
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/schema-doc/org_eclipse_datatools_connectivity_sqm_core_ddlGeneration.html b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema-doc/org_eclipse_datatools_connectivity_sqm_core_ddlGeneration.html
new file mode 100644
index 0000000..6cce5e4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema-doc/org_eclipse_datatools_connectivity_sqm_core_ddlGeneration.html
@@ -0,0 +1,55 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>DDL Generation</title>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.sdk_3.1.0/book.css");</style>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.platform.doc.isv_3.1.0/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>DDL Generation</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.connectivity.sqm.core.ddlGeneration<p></p>
+<h6 class=CaptionFigColumn id=header>Since: </h6>[Enter the first release in which this extension point appears.]
+<p></p>
+
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>[Enter description of this extension point.]</p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.generator">generator</a>+ , <a href="#e.delta">delta</a>*)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.generator">generator</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST generator</p>
+<p class=code id=dtdAttlist>product&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>class&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>version&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>product</b> - </li>
+<li><b>class</b> - </li>
+<li><b>version</b> - </li>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.delta">delta</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST delta</p>
+<p class=code id=dtdAttlist>product&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>version&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>class&nbsp;&nbsp;&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>product</b> - </li>
+<li><b>version</b> - </li>
+<li><b>class</b> - </li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>Examples: </h6>[Enter extension point usage example here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>API Information: </h6>[Enter API information here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>Supplied Implementation: </h6>[Enter information about supplied implementation of this extension point.]
+<p></p>
+
+<br>
+<p class=note id=copyright>
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/schema-doc/org_eclipse_datatools_connectivity_sqm_core_ddlParser.html b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema-doc/org_eclipse_datatools_connectivity_sqm_core_ddlParser.html
new file mode 100644
index 0000000..9c65f95
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema-doc/org_eclipse_datatools_connectivity_sqm_core_ddlParser.html
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>DDL Parser</title>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.sdk_3.1.0/book.css");</style>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.platform.doc.isv_3.1.0/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>DDL Parser</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.connectivity.sqm.core.ddlParser<p></p>
+<h6 class=CaptionFigColumn id=header>Since: </h6>[Enter the first release in which this extension point appears.]
+<p></p>
+
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>[Enter description of this extension point.]</p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.parser">parser</a>+)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.parser">parser</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST parser</p>
+<p class=code id=dtdAttlist>product&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>class&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>version&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>product</b> - </li>
+<li><b>class</b> - </li>
+<li><b>version</b> - </li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>Examples: </h6>[Enter extension point usage example here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>API Information: </h6>[Enter API information here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>Supplied Implementation: </h6>[Enter information about supplied implementation of this extension point.]
+<p></p>
+
+<br>
+<p class=note id=copyright>
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/schema-doc/org_eclipse_datatools_connectivity_sqm_core_logicalContainment.html b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema-doc/org_eclipse_datatools_connectivity_sqm_core_logicalContainment.html
new file mode 100644
index 0000000..90c8025
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema-doc/org_eclipse_datatools_connectivity_sqm_core_logicalContainment.html
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Logical Containment</title>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.sdk_3.1.0/book.css");</style>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.platform.doc.isv_3.1.0/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>Logical Containment</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.connectivity.sqm.core.logicalContainment<p></p>
+<h6 class=CaptionFigColumn id=header>Since: </h6>1.0
+<p></p>
+
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>[Enter description of this extension point.]</p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.containment">containment</a>+)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.containment">containment</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST containment</p>
+<p class=code id=dtdAttlist>package&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>class&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>provider&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>package</b> - </li>
+<li><b>class</b> - </li>
+<li><b>provider</b> - </li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>Examples: </h6>[Enter extension point usage example here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>API Information: </h6>[Enter API information here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>Supplied Implementation: </h6>[Enter information about supplied implementation of this extension point.]
+<p></p>
+
+<br>
+<p class=note id=copyright>
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/catalog.exsd b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/catalog.exsd
new file mode 100644
index 0000000..fcd940d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/catalog.exsd
@@ -0,0 +1,154 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.connectivity.sqm.core" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.datatools.connectivity.sqm.core" id="Catalog" name="Catalog"/>
+      </appinfo>
+      <documentation>
+         Provides a catalog loader and/or override catalog loader.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <choice>
+            <element ref="catalog"/>
+            <element ref="overrideLoader" minOccurs="1" maxOccurs="unbounded"/>
+         </choice>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="catalog">
+      <complexType>
+         <attribute name="product" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Vendor name for the db definition.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="version" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Version name for the db definition.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="provider" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Providers must implement org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogProvider.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="priority" type="string">
+            <annotation>
+               <documentation>
+                  The priority range is from 0 to 2147483647. The default is 0.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="overrideLoader">
+      <annotation>
+         <documentation>
+            &lt;P&gt;The overrideLoader extension allows implementers to override the catalog loader for a particular level of the JDBC SQL model. This only applies when the default JDBCobject and JDBC catalog loaders are being used in the framework. &lt;/P&gt;
+
+&lt;P&gt;Implementers can specify a replacement catalog loader for a particular DB definition/eclass combination. &lt;/P&gt;
+
+&lt;P&gt;Catalog loader classes need to extend JDBCBaseLoader and should really extend the particular level of loader class from the framework. For instance, if replacing the schema loader, the class should extend JDBCSchemaLoader. The loader also must implement a zero-argument constructor. Just pass in a null to the default constructor of the extended loader class. The catalog object will be set at an appropriate time when needed. &lt;/P&gt;
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="product" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Vendor name for the db definition.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="version" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Version name for the db definition.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="provider" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Catalog loader provider class. Should extend JDBCBaseLoader or one of the other default JDBC loaders and implement a zero-argument constructor.
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.datatools.connectivity.sqm.loader.JDBCBaseLoader"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+         <attribute name="eclass" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Eclass name to indicate which level of the model we&apos;re overriding the loader for. Should correspond to an interface name from the SQL model, i.e. Schema, Catalog, Routine, etc.
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.emf.ecore.EClass"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         0.7
+      </documentation>
+   </annotation>
+
+
+
+
+   <annotation>
+      <appinfo>
+         <meta.section type="copyright"/>
+      </appinfo>
+      <documentation>
+         Copyright 2005, 2007 IBM Corporation and others.&lt;br&gt;
+All rights reserved. This program and the accompanying materials are made 
+available under the terms of the Eclipse Public License v1.0 which 
+accompanies this distribution, and is available at 
+&lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/dataModelElementFactory.exsd b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/dataModelElementFactory.exsd
new file mode 100644
index 0000000..395ddf7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/dataModelElementFactory.exsd
@@ -0,0 +1,106 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.connectivity.sqm.core" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.datatools.connectivity.sqm.core" id="dataModelElementFactory" name="dataModelElementFactory"/>
+      </appinfo>
+      <documentation>
+         Provides a factory for creating data model elements.  The data model element factory, which must implement the &lt;code&gt;org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory&lt;/code&gt; interface, can be used to return an &lt;code&gt;org.eclipse.emf.ecore.EObject&lt;/code&gt; instance of a given &lt;code&gt;org.eclipse.emf.ecore.EClass&lt;/code&gt;
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="factory" minOccurs="1" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="factory">
+      <complexType>
+         <attribute name="product" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Vendor name for the db definition.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="version" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Version name for the db definition.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The fully qualified name of a class that implements org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         0.7
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiInfo"/>
+      </appinfo>
+      <documentation>
+         A factory instance for a given database definition can be obtained using &lt;code&gt;org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getDataModelElementFactory()&lt;/code&gt;
+      </documentation>
+   </annotation>
+
+
+
+   <annotation>
+      <appinfo>
+         <meta.section type="copyright"/>
+      </appinfo>
+      <documentation>
+         Copyright 2005 IBM Corporation and others.&lt;br&gt;
+All rights reserved. This program and the accompanying materials are made 
+available under the terms of the Eclipse Public License v1.0 which 
+accompanies this distribution, and is available at 
+&lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/databaseDefinition.exsd b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/databaseDefinition.exsd
new file mode 100644
index 0000000..435cbab
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/databaseDefinition.exsd
@@ -0,0 +1,144 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.connectivity.sqm.core" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.datatools.connectivity.sqm.core" id="databaseDefinition" name="Database Definition"/>
+      </appinfo>
+      <documentation>
+         Provides a database definition.  The data definition, which must implement the &lt;code&gt;org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition&lt;/code&gt; interface, can be used to obtain meta-information about the database of given type and version, and can also be used to obtain a data model element factory, as contributed by the &lt;code&gt;org.eclipse.datatools.connectivity.sqm.core.dataModelElementFactory&lt;/code&gt; extension point.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="definition" minOccurs="1" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="definition">
+      <complexType>
+         <attribute name="description" type="string">
+            <annotation>
+               <documentation>
+                  A description of the database definition.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="product" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Vendor name for the db definition.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="version" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Version name for the db definition.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="previous" type="string">
+            <annotation>
+               <documentation>
+                  This attribute should be deprecated.  It is never loaded by the code.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="allowsConnections" type="boolean">
+            <annotation>
+               <documentation>
+                  This method should be deprecated. It is left over from WTP and does not make sense in DTP.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="productDisplayString" type="string" use="required">
+            <annotation>
+               <documentation>
+                  A string suitable for display to users for product. See product attribute.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="versionDisplayString" type="string" use="required">
+            <annotation>
+               <documentation>
+                  A string suitable for display to users for version.  See version attribute.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="file" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The  location of the instance of the database definition model file.  The path is relative to the root of the plug-in.
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="resource"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         0.7
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiInfo"/>
+      </appinfo>
+      <documentation>
+         Use the &lt;code&gt;org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinitionRegistry&lt;/code&gt; instance to obtain the database definition.
+      </documentation>
+   </annotation>
+
+
+
+   <annotation>
+      <appinfo>
+         <meta.section type="copyright"/>
+      </appinfo>
+      <documentation>
+         Copyright 2005, 2007 IBM Corporation and others.&lt;br&gt;
+All rights reserved. This program and the accompanying materials are made 
+available under the terms of the Eclipse Public License v1.0 which 
+accompanies this distribution, and is available at 
+&lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/databaseRecognition.exsd b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/databaseRecognition.exsd
new file mode 100644
index 0000000..59407a5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/databaseRecognition.exsd
@@ -0,0 +1,148 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.connectivity.sqm.core" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.datatools.connectivity.sqm.core" id="databaseRecognition" name="Database Recognition"/>
+      </appinfo>
+      <documentation>
+         Provides a database recognizer.  The database recognizer instance, which must implement &lt;code&gt;org.eclipse.datatools.connectivity.sqm.core.definition.IDatabaseRecognizer&lt;/code&gt;, can be used for determining the &lt;code&gt;org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition&lt;/code&gt; instance that is appropriate for a given &lt;code&gt;java.sql.Connection&lt;/code&gt; object.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="recognizer" minOccurs="1" maxOccurs="unbounded"/>
+            <element ref="dbDefinitionMapping" minOccurs="0" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="recognizer">
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The fully qualified name of a class that implements org.eclipse.datatools.connectivity.sqm.core.definition.IDatabaseRecognizer.
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.datatools.connectivity.sqm.core.definition.IDatabaseRecognizer"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  Arbitrary name for the recognizer.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="dbDefinitionMapping">
+      <annotation>
+         <documentation>
+            Specifies the mapping to look up the product and version of a  &lt;code&gt;org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition&lt;/code&gt; instance, given the database product meta-data provided by a JDBC driver.
+ The specialized database recognizer contributed in this extension would first try to determine the appropriate DatabaseDefinition instance.  If it is not able to find a match, these mappings will then get used to determine an appropriate DatabaseDefinition instance.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="jdbcDatabaseProductName" type="string">
+            <annotation>
+               <documentation>
+                  The name of a database product, as specified by a JDBC driver in its implementation of the java.sql.DatabaseMetaData#getDatabaseProductName method.  This attribute value may either be 
+the exact name to compare to (ignoring case), or 
+a RegEx pattern to match
+the value returned by the #getDatabaseProductName method.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="jdbcDatabaseProductVersion" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The version number of a database product, as specified by a JDBC driver in its implementation of the java.sql.DatabaseMetaData#getDatabaseProductVersion method.  This attribute value may either be 
+the exact name to compare to (ignoring case), or 
+a RegEx pattern to match
+the value returned by the #getDatabaseProductVersion method.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="dbdefinitionProduct" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The vendor or product name specified in an extension of the org.eclipse.datatools.connectivity.sqm.core.databaseDefinition extension point.  The value must reference the definition.product attribute in a databaseDefinition extension.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="dbdefinitionVersion" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The version name specified in an extension of the org.eclipse.datatools.connectivity.sqm.core.databaseDefinition extension point.  The value must reference the definition.version attribute in a databaseDefinition extension.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         0.7
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiInfo"/>
+      </appinfo>
+      <documentation>
+         Use the &lt;code&gt;org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinitionRegistry#recognize(Connection)&lt;/code&gt; method to exercise the functionality provided by this extension point.
+      </documentation>
+   </annotation>
+
+
+
+   <annotation>
+      <appinfo>
+         <meta.section type="copyright"/>
+      </appinfo>
+      <documentation>
+         Copyright 2005, 2009 IBM Corporation and others.&lt;br&gt;
+All rights reserved. This program and the accompanying materials are made 
+available under the terms of the Eclipse Public License v1.0 which 
+accompanies this distribution, and is available at 
+&lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/ddlGeneration.exsd b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/ddlGeneration.exsd
new file mode 100644
index 0000000..b3e4b61
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/ddlGeneration.exsd
@@ -0,0 +1,147 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.connectivity.sqm.core" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.datatools.connectivity.sqm.core" id="ddlGeneration" name="DDL Generation"/>
+      </appinfo>
+      <documentation>
+         Provides an implementation of the &lt;code&gt;org.eclipse.datatools.connectivity.sqm.core.rte.DDLGenerator&lt;/code&gt; and &lt;code&gt;org.eclipse.datatools.connectivity.sqm.internal.core.rte.fe.DeltaDDLGenerator&lt;/code&gt; classes that can be used for generating DDLs for a given database definition.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="generator" minOccurs="1" maxOccurs="unbounded"/>
+            <element ref="delta" minOccurs="0" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="generator">
+      <complexType>
+         <attribute name="product" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Vendor name for the db definition.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The fully qualified name of a class that implements org.eclipse.datatools.connectivity.sqm.core.rte.DDLGenerator.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="version" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Version name for the db definition.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="priority" type="string">
+            <annotation>
+               <documentation>
+                  The priority range is from 0 to 2147483647. The default is 0.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="delta">
+      <complexType>
+         <attribute name="product" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Vendor name for the db definition.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="version" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Version name for the db definition.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The fully qualified name of a class that implements org.eclipse.datatools.connectivity.sqm.internal.core.rte.DeltaDDLGenerator.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="priority" type="string">
+            <annotation>
+               <documentation>
+                  The priority range is from 0 to 2147483647. The default is 0.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         0.7
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiInfo"/>
+      </appinfo>
+      <documentation>
+         Use the methods &lt;code&gt;org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getDDLGenerator()&lt;/code&gt; and &lt;code&gt;org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getDeltaDDLGenerator()&lt;/code&gt; to obtain the generator instances for a given database definition.
+      </documentation>
+   </annotation>
+
+
+
+   <annotation>
+      <appinfo>
+         <meta.section type="copyright"/>
+      </appinfo>
+      <documentation>
+         Copyright 2005, 2007 IBM Corporation and others.&lt;br&gt;
+All rights reserved. This program and the accompanying materials are made 
+available under the terms of the Eclipse Public License v1.0 which 
+accompanies this distribution, and is available at 
+&lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/ddlParser.exsd b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/ddlParser.exsd
new file mode 100644
index 0000000..1563145
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/ddlParser.exsd
@@ -0,0 +1,113 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.connectivity.sqm.core" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.datatools.connectivity.sqm.core" id="ddlParser" name="DDL Parser"/>
+      </appinfo>
+      <documentation>
+         Provides the ddl parser for a given database definition.  The ddl parser provided must implement the &lt;code&gt;org.eclipse.datatools.connectivity.sqm.internal.core.rte.DDLParser&lt;/code&gt; interface.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="parser" minOccurs="1" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="parser">
+      <complexType>
+         <attribute name="product" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Vendor name for the db definition.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The fully qualified name of a class that implements org.eclipse.datatools.connectivity.sqm.internal.core.rte.DDLParser.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="version" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Version name for the db definition.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="priority" type="string">
+            <annotation>
+               <documentation>
+                  The priority range is from 0 to 2147483647. The default is 0.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         0.7
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiInfo"/>
+      </appinfo>
+      <documentation>
+         An instance of the ddl parser can be obtained using &lt;code&gt;org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getDdlParser()&lt;/code&gt; method.
+      </documentation>
+   </annotation>
+
+
+
+   <annotation>
+      <appinfo>
+         <meta.section type="copyright"/>
+      </appinfo>
+      <documentation>
+         Copyright 2005, 2007 IBM Corporation and others.&lt;br&gt;
+All rights reserved. This program and the accompanying materials are made 
+available under the terms of the Eclipse Public License v1.0 which 
+accompanies this distribution, and is available at 
+&lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/logicalContainment.exsd b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/logicalContainment.exsd
new file mode 100644
index 0000000..b44ae15
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/logicalContainment.exsd
@@ -0,0 +1,113 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.connectivity.sqm.core" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.datatools.connectivity.sqm.core" id="logicalContainment" name="Logical Containment"/>
+      </appinfo>
+      <documentation>
+         Provides a provider class that can be used to navigate the logical containment structure for a given class of objects.  The provider class must implement the &lt;code&gt;org.eclipse.datatools.connectivity.sqm.internal.core.containment.ContainmentProvider&lt;/code&gt; interface.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="containment" minOccurs="1" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="containment">
+      <complexType>
+         <attribute name="package" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The EMF model package to which the provider applies.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The class to which the provider applies.  Should correspond to an interface name from the SQL model, i.e. Schema, Catalog, Routine, etc.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="provider" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The fullly qualified name of a class that extends org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="priority" type="string">
+            <annotation>
+               <documentation>
+                  The priority range is from 0 to 2147483647. The default is 0.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         0.7
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiInfo"/>
+      </appinfo>
+      <documentation>
+         The functionality provided by these providers can be accessed via &lt;code&gt;org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentService&lt;/code&gt;
+      </documentation>
+   </annotation>
+
+
+
+   <annotation>
+      <appinfo>
+         <meta.section type="copyright"/>
+      </appinfo>
+      <documentation>
+         Copyright 2005, 2007 IBM Corporation and others.&lt;br&gt;
+All rights reserved. This program and the accompanying materials are made 
+available under the terms of the Eclipse Public License v1.0 which 
+accompanies this distribution, and is available at 
+&lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/mappings.exsd b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/mappings.exsd
new file mode 100644
index 0000000..450829c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/mappings.exsd
@@ -0,0 +1,130 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.connectivity.sqm.core" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.datatools.connectivity.sqm.core" id="mappings" name="Mappings"/>
+      </appInfo>
+      <documentation>
+         Provides a metadata-driven way to map a connection profile provider ID or a vendor/version combination to a driver category ID.
+
+&lt;p&gt;&lt;strong&gt;EXPERIMENTAL&lt;/strong&gt;. This class or interface has been added
+as part of a work in progress. There is no guarantee that this API will
+work or that it will remain the same. Please do not use this API
+without consulting with the DTP Connectivity team.&lt;/p&gt;
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appInfo>
+            <meta.element />
+         </appInfo>
+      </annotation>
+      <complexType>
+         <sequence minOccurs="0" maxOccurs="unbounded">
+            <element ref="providerIDtoDriverCategoryID"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="providerIDtoDriverCategoryID">
+      <annotation>
+         <documentation>
+            Map a connection profile provider ID to a driver category ID. If mapped for a particular provider ID, this will override the mapping used in the wizard page and property page classes used for the ExtensibleProfileDetailsWizardPage and ExtensibleProfileDetailsWizardPage
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="providerID" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Connection Profile Provider ID. This maps to the provider ID defined in the connection profile extension point.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="driverCategoryID" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Driver Category ID maps to the category id specified in the driver templates extension.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         DTP 1.7, June 2009
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         An example of use of this mapping can be seen in the org.eclipse.datatools.connectivity.ui plug-in in the o.e.d.connectivity.ui.wizards package for the ExtensibleProfileDetailsPropertyPage and ExtensibleProfileDetailsWizardPage.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiinfo"/>
+      </appInfo>
+      <documentation>
+         Currently this can be accessed from the SQMServices (o.e.d.connectivity.sqm.core.SQMServices) via the method:
+
+public static ProviderIDMappingRegistry getProviderIDMappingRegistry();
+
+From there you can access the Provider ID in a number of ways:
+
+public String getCategoryIDforProviderID ( String providerID );
+public String getProviderIDforDriverCategoryID ( String driverCategoryID );
+public String getProviderIDforVendorVersion ( String vendor, String version);
+
+So you&apos;ll be able to get a driver category ID for a connection profile provider ID, a connection profile provider ID from a driver category ID, and a connection profile provider ID from a vendor/version.
+      </documentation>
+   </annotation>
+
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         Copyright 2009 Sybase, Inc. and others.&lt;br&gt;
+All rights reserved. This program and the accompanying materials are made 
+available under the terms of the Eclipse Public License v1.0 which 
+accompanies this distribution, and is available at 
+&lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/metaDataExtension.exsd b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/metaDataExtension.exsd
new file mode 100644
index 0000000..bb58acc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/metaDataExtension.exsd
@@ -0,0 +1,99 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.connectivity.sqm.core" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.datatools.connectivity.sqm.core" id="metaDataExtension" name="metaDataExtension"/>
+      </appinfo>
+      <documentation>
+         Provides a meta data extension class.  The class must extend the &lt;code&gt;org.eclipse.datatools.connectivity.sqm.internal.core.definition.AbstractMetaDataExtension&lt;/code&gt; class.  This is for internal use only.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="metaDataExtension">
+      <complexType>
+         <attribute name="product" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Vendor name for the db definition.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="version" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Version name for the db definition.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The class needs to implement the interface org.eclipse.datatools.connectivity.sqm.internal.core.definition.MetaDataExtension and extend the abstract class 
+ org.eclipse.datatools.connectivity.sqm.internal.core.definition.AbstractMetaDataExtension
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         1.6
+      </documentation>
+   </annotation>
+
+
+
+
+   <annotation>
+      <appinfo>
+         <meta.section type="copyright"/>
+      </appinfo>
+      <documentation>
+         Copyright 2007 IBM Corporation and others.&lt;br&gt;
+All rights reserved. This program and the accompanying materials are made 
+available under the terms of the Eclipse Public License v1.0 which 
+accompanies this distribution, and is available at 
+&lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/sqlexceptionHandler.exsd b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/sqlexceptionHandler.exsd
new file mode 100644
index 0000000..add6563
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/sqlexceptionHandler.exsd
@@ -0,0 +1,101 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.connectivity.sqm.core" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.datatools.connectivity.sqm.core" id="sqlexceptionHandler" name="sqlexceptionHandler"/>
+      </appInfo>
+      <documentation>
+         Provide the handler for handler sqlexception in StatementAdapter.
+     The handler must implement the interface:
+      org.eclipse.datatools.connectivity.sqm.internal.core.connection.SQLException
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appInfo>
+            <meta.element />
+         </appInfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="handler" minOccurs="1" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="handler">
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiinfo"/>
+      </appInfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/validConnectionHandler.exsd b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/validConnectionHandler.exsd
new file mode 100644
index 0000000..70cb48e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/schema/validConnectionHandler.exsd
@@ -0,0 +1,107 @@
+<?xml version='1.0' encoding='UTF-8'?>

+<!-- Schema file written by PDE -->

+<schema targetNamespace="org.eclipse.datatools.connectivity.sqm.core" xmlns="http://www.w3.org/2001/XMLSchema">

+<annotation>

+      <appInfo>

+         <meta.schema plugin="org.eclipse.datatools.connectivity.sqm.core" id="validConnectionHandler" name="validConnectionHandler"/>

+      </appInfo>

+      <documentation>

+         Provides a ConnectionHandler.  A ConnectionHandler must implement &lt;code&gt;org.eclipse.datatools.connectivity.sqm.core.connection.IValidConnectionHandler&lt;/code&gt;

+It ensures that the underlying JDBC connection is valid.  If not valid, a new connection is reestablished.

+      </documentation>

+   </annotation>

+

+   <element name="extension">

+      <annotation>

+         <appInfo>

+            <meta.element />

+         </appInfo>

+      </annotation>

+      <complexType>

+         <sequence>

+            <element ref="handler" minOccurs="1" maxOccurs="unbounded"/>

+         </sequence>

+         <attribute name="point" type="string" use="required">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="id" type="string">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="name" type="string">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+               <appInfo>

+                  <meta.attribute translatable="true"/>

+               </appInfo>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="handler">

+      <complexType>

+         <attribute name="vendor" type="string" use="required">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="class" type="string" use="required">

+            <annotation>

+               <documentation>

+                  Fully qualified name of class that implements org.eclipse.datatools.connectivity.sqm.core.connection.IValidConnectionHandler

+               </documentation>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="since"/>

+      </appInfo>

+      <documentation>

+         [Enter the first release in which this extension point appears.]

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="examples"/>

+      </appInfo>

+      <documentation>

+         [Enter extension point usage example here.]

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="apiinfo"/>

+      </appInfo>

+      <documentation>

+         [Enter API information here.]

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="implementation"/>

+      </appInfo>

+      <documentation>

+         [Enter information about supplied implementation of this extension point.]

+      </documentation>

+   </annotation>

+

+

+</schema>

diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/SQMConnectionFactory.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/SQMConnectionFactory.java
new file mode 100644
index 0000000..eed9dc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/SQMConnectionFactory.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core;
+
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFactory;
+
+/**
+ * <code>org.eclipse.datatools.connectivity.IConnectionFactory</code> for
+ * creating
+ * <code>org.eclipse.datatools.connectivity.sqm.core.connection.ConnectionInfo</code>
+ * connections.
+ * 
+ * To use this class in a custom DB connection profile, you must make sure your
+ * profile contains a <code>java.sql.Connection</code> connection factory, as
+ * well as a
+ * <code>org.eclipse.datatools.connectivity.ConnectionProfileConstants.PROP_DRIVER_DEFINITION_ID</code>
+ * property. Additionally, the driver specified must contain the following
+ * properties from
+ * <code>org.eclipse.datatools.connectivity.db.generic.IDBDriverDefinitionConstants</code>:
+ * DATABASE_VENDOR_PROP_ID, DATABASE_VERSION_PROP_ID, DATABASE_NAME_PROP_ID.
+ * 
+ * @author ledunnel
+ */
+public class SQMConnectionFactory extends ConnectionFactory {
+	public SQMConnectionFactory() {
+		super();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionFactory#createConnection(org.eclipse.datatools.connectivity.IConnectionProfile)
+	 */
+	public IConnection createConnection(IConnectionProfile profile) {
+		return super.createConnection(profile);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionFactory#createConnection(org.eclipse.datatools.connectivity.IConnectionProfile,
+	 *      java.lang.String, java.lang.String)
+	 */
+	public IConnection createConnection(IConnectionProfile profile, String uid,
+			String pwd) {
+		
+		return super.createConnection(profile, uid, pwd);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/SQMServices.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/SQMServices.java
new file mode 100644
index 0000000..c2a9a3c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/SQMServices.java
@@ -0,0 +1,55 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  brianf - added ProviderIDMappingRegistry reference
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.sqm.core;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentService;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinitionRegistry;
+import org.eclipse.datatools.connectivity.sqm.core.mappings.ProviderIDMappingRegistry;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+
+/**
+ * Public accessor of the SQL Query Model services.
+ */
+public class SQMServices
+{
+    private SQMServices() {}
+    
+    /**
+     * Gets the system registry for access to available {@link DatabaseDefinition}.
+     * @return  a {@link DatabaseDefinitionRegistry}
+     */
+    public static DatabaseDefinitionRegistry getDatabaseDefinitionRegistry() 
+    {
+        return RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry();
+    }
+    
+    /**
+     * Gets the system containment service.
+     * @return  a {@link ContainmentService}
+     */
+    public static ContainmentService getContainmentService()
+    {
+        return RDBCorePlugin.getDefault().getContainmentService();
+    }
+    
+    /**
+     * Gets the provider ID mapping registry service.
+     * @return  a {@link ProviderIDMappingRegistry}
+     */
+    public static ProviderIDMappingRegistry getProviderIDMappingRegistry()
+    {
+        return ProviderIDMappingRegistry.getInstance();
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/connection/ConnectionFilter.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/connection/ConnectionFilter.java
new file mode 100644
index 0000000..457b7bf
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/connection/ConnectionFilter.java
@@ -0,0 +1,110 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.datatools.connectivity.sqm.core.connection;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.Predicate;
+
+/**
+ * Public ConnectionFilter interface, extended internally
+ */
+public interface ConnectionFilter extends Serializable{
+	
+	/**
+	 * Return the filter expression.
+	 */
+	public String getPredicate();
+	
+	/**
+	 * Return all the predicates
+	 */
+	public ArrayList getPredicatesCollection();
+	
+	/**
+	 * Return if the filter expression is valid
+	 */
+	public boolean isValid(String predicate);
+	
+	/**
+	 * Return only the pattern part of the filter expression
+	 */
+	public String getPattern();
+		
+	/**
+	 * Return the elements of only the pattern part of the filter expression
+	 */
+	public String[] getPatternElements();
+
+	/**
+	 * Return whether or not the operator equals "IN"
+	 */
+	public boolean isOperatorInclusive();
+	
+	/**
+	 * Return whether or not the operator equals "NOT IN"
+	 */
+	public boolean isOperatorExclusive();
+	 
+	/**
+	 * Return only the operator part of the filter expression
+	 */
+	public String getOperator();
+	
+	/**
+	 * Returns if the conditions are ORed or ANDed
+	 */
+	public boolean isMeetsAllConditions();
+	
+	/**
+	 * @param name the name of the object to check
+	 * 
+	 * @return true if the object should be filtered
+	 */
+	public boolean isFiltered(String name);
+
+	public static final String OPERATOR_LIKE = "LIKE"; //$NON-NLS-1$
+	public static final String OPERATOR_NOT_LIKE = "NOT LIKE"; //$NON-NLS-1$
+	public static final String OPERATOR_IN = "IN"; //$NON-NLS-1$
+	public static final String OPERATOR_NOT_IN = "NOT IN"; //$NON-NLS-1$
+
+	/**
+	 * The profile extension ID used to store filter settings.
+	 */
+	public static final String FILTER_SETTINGS_PROFILE_EXTENSION_ID = "org.eclipse.datatools.connectivity.sqm.filterSettings"; //$NON-NLS-1$
+
+	public static final String FILTER_SEPARATOR = "::"; //$NON-NLS-1$
+
+	public static final String CATALOG_FILTER = "DatatoolsCatalogFilterPredicate"; //$NON-NLS-1$
+	public static final String SCHEMA_FILTER = "DatatoolsSchemaFilterPredicate"; //$NON-NLS-1$
+	public static final String TABLE_FILTER = "DatatoolsTableFilterPredicate"; //$NON-NLS-1$
+	public static final String VIEW_FILTER = "DatatoolsViewFilterPredicate"; //$NON-NLS-1$
+	public static final String ALIAS_FILTER = "DatatoolsAliasFilterPredicate"; //$NON-NLS-1$
+	public static final String STORED_PROCEDURE_FILTER = "DatatoolsSPFilterPredicate"; //$NON-NLS-1$
+	public static final String JAR_FILTER = "DatatoolsJarFilterPredicate"; //$NON-NLS-1$	
+	public static final String USER_DEFINED_FUNCTION_FILTER = "DatatoolsUDFFilterPredicate"; //$NON-NLS-1$
+	public static final String SEQUENCE_FILTER = "DatatoolsSequenceFilterPredicate"; //$NON-NLS-1$
+	public static final String USER_DEFINED_TYPE_FILTER = "DatatoolsUDTFilterPredicate"; //$NON-NLS-1$
+	public static final String NICKNAME_FILTER = "DatatoolsNicknameFilterPredicate"; //$NON-NLS-1$
+	public static final String MQT_FILTER = "DatatoolsMQTFilterPredicate"; //$NON-NLS-1$
+	public static final String REMOTE_SERVER_FILTER = "DatatoolsRemoteServerFilterPredicate"; //$NON-NLS-1$
+	public static final String REMOTE_SCHEMA_FILTER = "DatatoolsRemoteSchemaFilterPredicate"; //$NON-NLS-1$
+	public static final String REMOTE_TABLE_FILTER = "DatatoolsRemoteTableFilterPredicate"; //$NON-NLS-1$
+	public static final String DISCOVERED_SERVER_FILTER = "DatatoolsDiscoveredServerFilterPredicate"; //$NON-NLS-1$
+	public static final String XSR_OBJECTS_FILTER = "DatatoolsXMLSchemasFilterPredicate"; //$NON-NLS-1$
+	public static final String XML_SCHEMA_DOC_FILTER = "DatatoolsXMLSchemaDocsFilterPredicate"; //$NON-NLS-1$
+	public static final String REMOTE_STORED_PROCEDURE_FILTER = "DatatoolsRemoteStoredProcedureFilterPredicate"; //$NON-NLS-1$
+	public static final String TABLESPACE_FILTER = "DatatoolsTablespaceFilterPredicate"; //$NON-NLS-1$
+	public static final String DATABASE_FILTER = "DatatoolsDatabaseFilterPredicate"; //$NON-NLS-1$
+	public static final String SYNONYM_FILTER = "DatatoolsSynonymFilterPredicate"; //$NON-NLS-1$
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/connection/ConnectionInfo.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/connection/ConnectionInfo.java
new file mode 100644
index 0000000..9421088
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/connection/ConnectionInfo.java
@@ -0,0 +1,107 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.connection;
+
+import java.sql.Connection;
+import java.util.Iterator;
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+
+/**
+ * Public ConnectionInfo interface - extended internally
+ */
+public interface ConnectionInfo {
+	
+	/**
+	 * A user friendly name of the connection info.
+	 * @return the connection info name - null means it is not named.
+	 */
+	public String getName();
+	
+	/**
+	 * @return the database definition associated to this connection info
+	 */
+	public DatabaseDefinition getDatabaseDefinition();
+	
+	/**
+	 * 
+	 * @return the JDBC driver class full name.
+	 */
+	public String getDriverClassName();
+	
+	/**
+	 * 
+	 * @return JDBC connection URL
+	 */
+	public String getURL();
+	
+	/**
+	 * Helper function for property "user". The value can be accessed directly using Properties
+	 * @return value of property "user" 
+	 */
+	public String getUserName();
+	
+	/**
+	 * Helper function for property "password". The value can be accessed directly using Properties
+	 * @return value of property "password" 
+	 */
+	public String getPassword();
+
+	/*
+	 * the following 2 method are used as a work around for some databases 
+	 */
+	public String getDatabaseName();
+	
+	public String getIdentifierQuoteString();
+
+	/**
+	 * 
+	 * @return the properties for JDBC connection
+	 */
+	public Properties getProperties();
+	
+	/**
+	 * Retrive the shared connection.
+	 * @return if no shared connection set, return null.
+	 */
+	public Connection getSharedConnection();
+	
+	/**
+	 * retrieve the shared database
+	 * @return if no shared databsae set, return null
+	 */		
+	public Database getSharedDatabase();
+	
+	/**
+	 * Load a database from workspace cache.
+	 * @return
+	 */
+	public Database getCachedDatabase();
+	
+	public long getCachedDatabaseTimestamp();
+
+	/**
+	 * return all the connection filters
+	 *
+	 */
+	public Iterator getFilters();
+	
+	/**
+	 * return the profile from the connection
+	 * @return IConnectionProfile
+	 */
+	public IConnectionProfile getConnectionProfile();
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/connection/DatabaseConnectionRegistry.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/connection/DatabaseConnectionRegistry.java
new file mode 100644
index 0000000..60a70c8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/connection/DatabaseConnectionRegistry.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    rcernich - initial API and implementation
+ *******************************************************************************/ 
+package org.eclipse.datatools.connectivity.sqm.core.connection;
+
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+/**
+ * Publicly exposes a way to get at the ConnectionInfo for the Database
+ */
+public class DatabaseConnectionRegistry {
+
+	/**
+	 * Returns a ConnectionInfo object for the Database
+	 * @param database
+	 * @return
+	 */
+	public static ConnectionInfo getConnectionForDatabase(Database database) {
+		return org.eclipse.datatools.connectivity.sqm.internal.core.connection.DatabaseConnectionRegistry.getInstance().getConnectionForDatabase(database);
+	}
+
+	/*
+	 * Internal constructor
+	 */
+	private DatabaseConnectionRegistry() {
+		// empty
+	}
+	
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/connection/IValidConnectionHandler.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/connection/IValidConnectionHandler.java
new file mode 100644
index 0000000..5359741
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/connection/IValidConnectionHandler.java
@@ -0,0 +1,25 @@
+package org.eclipse.datatools.connectivity.sqm.core.connection;

+

+import java.sql.Connection;

+import java.sql.SQLException;

+

+import org.eclipse.datatools.connectivity.IConnectionProfile;

+

+/**

+ * Implementers ensure that the connection

+ * is valid by performing a validation action

+ * as defined for the data server and re-establishing

+ * a connection if necessary

+ *

+ */

+public interface IValidConnectionHandler

+{

+	/**

+	 * Performs the validation and ensure that the underlying

+	 * JDBC connection is good

+	 * 

+	 * It is highly recommended that implementors issue a very lightweight

+	 * check, such as JDBC 4.0 isValid()

+	 */

+	public Connection ensureConnectivity(IConnectionProfile profile) throws SQLException;

+}

diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/containment/AbstractContainmentProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/containment/AbstractContainmentProvider.java
new file mode 100644
index 0000000..876d130
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/containment/AbstractContainmentProvider.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.containment;
+
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.internal.core.containment.ContainmentProvider;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public abstract class AbstractContainmentProvider implements ContainmentProvider {
+	public Collection getContainedElements(EObject obj) {
+	    List children = new LinkedList(obj.eContents());
+	    
+	    if (SQLSchemaPackage.eINSTANCE.getSQLObject().isSuperTypeOf(obj.eClass())){
+	    	children.addAll(((SQLObject)obj).getComments());
+	    }
+	    return children;
+	}
+
+	public boolean isDisplayableElement(EObject obj) {
+		return true;
+	}
+
+	public EObject getContainer(EObject obj) {
+		return obj.eContainer();
+	}
+
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+		return obj.eContainingFeature();
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/containment/ContainmentService.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/containment/ContainmentService.java
new file mode 100644
index 0000000..3972b53
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/containment/ContainmentService.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.containment;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public interface ContainmentService {
+	public Collection getContainedElements(EObject obj);
+	public Collection getAllContainedElements(EObject obj);
+	public Collection getContainedDisplayableElements(EObject obj);
+	public Collection getAllContainedDisplayableElements(EObject obj);
+	public Collection getContainedDisplayableElements(EObject obj, String group);
+	public EObject getContainer(EObject obj);
+	public List getAllContainers(EObject obj);
+	public EObject getRootElement(EObject obj);
+	public EStructuralFeature getContainmentFeature(EObject obj);
+	public boolean isDisplayableElement(EObject obj);
+	public String getGroupId(EObject obj);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/containment/ContainmentServiceImpl.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/containment/ContainmentServiceImpl.java
new file mode 100644
index 0000000..ab585da
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/containment/ContainmentServiceImpl.java
@@ -0,0 +1,299 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.containment;
+
+import java.util.Collection;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Vector;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.internal.core.containment.ContainmentProvider;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+
+public final class ContainmentServiceImpl implements ContainmentService {
+    public static final ContainmentService INSTANCE = new ContainmentServiceImpl();
+    
+	public Collection getContainedElements(EObject obj) {
+		EClass metaclass = obj.eClass();
+		ContainmentProvider provider = this.getProvider(metaclass);
+
+		if(provider == null) {
+			Collection children = new LinkedList();
+			children.addAll(obj.eContents());
+			return children;
+		}
+		else {
+			return provider.getContainedElements(obj);
+		}
+	}
+
+	public Collection getAllContainedElements(EObject obj) {
+		Collection allChildren = new LinkedList();
+
+		Collection children = this.getContainedElements(obj);
+		allChildren.addAll(children);
+		
+		Iterator it = children.iterator();
+		while(it.hasNext()) {
+			EObject child = (EObject) it.next();
+			allChildren.addAll(this.getAllContainedElements(child));
+		}		
+		return allChildren;
+	}
+	
+	public Collection getContainedDisplayableElements(EObject obj) {
+		Collection children = getContainedElements(obj);
+		Iterator it = children.iterator();
+		while(it.hasNext()) {
+			EObject child = (EObject) it.next();
+			if(!this.isDisplayableElement(child)) {
+				it.remove();
+			}
+		}		
+		return children;
+	}
+
+	public Collection getAllContainedDisplayableElements(EObject obj) {
+		Collection allChildren = new LinkedList();
+
+		Collection children = this.getContainedDisplayableElements(obj);
+		allChildren.addAll(children);
+		
+		Iterator it = children.iterator();
+		while(it.hasNext()) {
+			EObject child = (EObject) it.next();
+			allChildren.addAll(this.getAllContainedDisplayableElements(child));
+		}		
+		return allChildren;
+	}
+
+	public Collection getContainedDisplayableElements(EObject obj, String group) {
+		Collection children = getContainedElements(obj);
+		Iterator it = children.iterator();
+		while(it.hasNext()) {
+			EObject child = (EObject) it.next();
+			if(this.isDisplayableElement(child)) {
+				String id = this.getGroupId(child);
+				if(id != group && (id == null || !id.startsWith(group))) {
+					it.remove();
+				}
+			}
+			else {
+				it.remove();
+			}
+		}		
+		return children;
+	}
+
+	public boolean isDisplayableElement(EObject obj)
+	{
+		EClass metaclass = obj.eClass();
+		ContainmentProvider provider = this.getProvider(metaclass);
+
+		if(provider == null) {
+			return false;
+		}
+		else {
+			return provider.isDisplayableElement(obj);
+		}
+	}
+
+	public EObject getContainer(EObject obj) {
+		EClass metaclass = obj.eClass();
+		ContainmentProvider provider = this.getProvider(metaclass);
+
+		if(provider == null) {
+			return obj.eContainer();
+		}
+		else {
+			return provider.getContainer(obj);
+		}
+	}
+	
+	public List getAllContainers(EObject obj) {
+	    List containers = new LinkedList();
+	    EObject container = this.getContainer(obj); 
+	    while(container != null) {
+	        containers.add(0, container);
+	        container = this.getContainer(container);
+	    }
+	    return containers;
+	}
+
+	public EObject getRootElement(EObject obj) {
+	    EObject container = getContainer(obj);
+	    while(container != null) {
+	        obj = container;
+		    container = getContainer(obj);	        
+	    }
+	    
+	    return obj;
+	}
+
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+		EClass metaclass = obj.eClass();
+		ContainmentProvider provider = this.getProvider(metaclass);
+
+		if(provider == null) {
+			return obj.eContainmentFeature();
+		}
+		else {
+			return provider.getContainmentFeature(obj);
+		}
+	}
+	
+	public String getGroupId(EObject obj) {
+		EClass metaclass = obj.eClass();
+		ContainmentProvider provider = this.getProvider(metaclass);
+
+		if(provider == null) {
+			return null;
+		}
+		else {
+			return provider.getGroupId(obj);
+		}
+	}
+
+	private ContainmentServiceImpl() {
+		Hashtable providers = new Hashtable();
+		IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+		IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("org.eclipse.datatools.connectivity.sqm.core", "logicalContainment"); //$NON-NLS-1$ //$NON-NLS-2$
+		IExtension[] extensions = extensionPoint.getExtensions();
+		for(int i=0; i<extensions.length; ++i) {
+			IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+			for(int j=0; j<configElements.length; ++j) {
+				if(configElements[j].getName().equals("containment")) { //$NON-NLS-1$
+					String packageURI = configElements[j].getAttribute("package"); //$NON-NLS-1$
+					String className = configElements[j].getAttribute("class"); //$NON-NLS-1$
+					ContainmentProvider provider = null;
+					try {
+						provider = (ContainmentProvider) configElements[j].createExecutableExtension("provider"); //$NON-NLS-1$
+					}
+					catch(CoreException e) {
+					    IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getSymbolicName(), IStatus.ERROR,
+					            "The error was detected when creating the containment provider for " + className + " in "+ packageURI, //$NON-NLS-1$ //$NON-NLS-2$
+					            e);
+						RDBCorePlugin.getDefault().getLog().log(status);
+						continue;
+					}
+
+					String priority = configElements[j].getAttribute("priority"); //$NON-NLS-1$
+					int currentPriority = 0;
+					if (priority != null) {
+						try {
+							currentPriority = Integer.parseInt(priority);
+						}catch (NumberFormatException formatEx){
+						}
+					} 
+					
+					if(this.packages.containsKey(packageURI)) {
+						Hashtable contentProviders = ((Hashtable) this.packages.get(packageURI));
+						if (contentProviders.containsKey(className)) {
+							Provider existProvider = (Provider)  contentProviders.get(className);
+							if (currentPriority > existProvider.getPriority()) {
+								existProvider.setPriority(currentPriority);
+								existProvider.setContainmentProvider(provider);
+							}
+						} else {
+							((Hashtable) this.packages.get(packageURI)).put(className, new Provider(provider,currentPriority));
+						}
+					}
+					else {
+						Hashtable classNames = new Hashtable();
+						classNames.put(className, new Provider(provider,currentPriority));
+						this.packages.put(packageURI, classNames);
+					}
+				}
+			}
+		}
+	}
+
+	private ContainmentProvider getProvider(EClass metaclass) {
+		if(this.cache.containsKey(metaclass)) {
+			return (ContainmentProvider) this.cache.get(metaclass);
+		}
+		
+		Vector sortedClasses = this.computeClassOrder(metaclass);
+		ContainmentProvider provider = this.getProvider(sortedClasses);
+		if(provider != null) this.cache.put(metaclass, provider);
+		return provider;
+	}
+
+	private Vector computeClassOrder(EClass metaclass) {
+		Vector result = new Vector(4);
+		result.addElement(metaclass);			
+		int index = 0;
+		for(index=0; index<result.size(); ++index) {
+			EClass clazz = (EClass) result.elementAt(index);
+			Iterator it = clazz.getESuperTypes().iterator();
+			while(it.hasNext()) result.addElement(it.next());			
+		}
+		return result;
+	}
+	
+	private ContainmentProvider getProvider(Vector classes) {
+		int count = classes.size();
+		for(int i=0; i<count; ++i) {
+			EClass clazz = (EClass) classes.elementAt(i);
+			String uri = clazz.getEPackage().getNsURI();
+			if(this.packages.containsKey(uri)) {
+				Hashtable classNames = (Hashtable) this.packages.get(uri);
+				if(classNames.containsKey(clazz.getName())) {
+					return (ContainmentProvider) ((Provider)classNames.get(clazz.getName())).getContainmentProvider();
+				}
+			}
+		}
+		return null;
+	}
+	
+	private class Provider{
+		private ContainmentProvider provider;
+		private int currentPriority;
+		
+		public Provider(ContainmentProvider provider,int priority) {
+			this.provider  = provider;
+			this.currentPriority = priority;
+		}
+		
+		public int getPriority(){
+			return this.currentPriority;
+		}
+		
+		public void setPriority(int priority) {
+			this.currentPriority = priority;
+		}
+		
+		public ContainmentProvider getContainmentProvider(){
+			return this.provider;
+		}
+		
+		public void setContainmentProvider(ContainmentProvider provider){
+			this.provider = provider;
+		}
+		
+	}
+	private Hashtable packages = new Hashtable();
+	private Hashtable cache = new Hashtable();
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/definition/DataModelElementFactory.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/definition/DataModelElementFactory.java
new file mode 100644
index 0000000..0619d77
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/definition/DataModelElementFactory.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.definition;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+public interface DataModelElementFactory {
+	public EObject create(EClass metaclass);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/definition/DatabaseDefinition.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/definition/DatabaseDefinition.java
new file mode 100644
index 0000000..6fa7c21
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/definition/DatabaseDefinition.java
@@ -0,0 +1,176 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.definition;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.DDLGenerator;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogProvider;
+import org.eclipse.datatools.connectivity.sqm.internal.core.rte.DDLParser;
+import org.eclipse.datatools.connectivity.sqm.internal.core.rte.DeltaDDLGenerator;
+import org.eclipse.datatools.modelbase.dbdefinition.DebuggerDefinition;
+import org.eclipse.datatools.modelbase.dbdefinition.LanguageType;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.datatypes.CharacterStringDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.DataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.ecore.EClass;
+
+
+public interface DatabaseDefinition {
+	public String getProduct();
+	public String getProductDisplayString();
+	public String getVersion();
+	public String getVersionDisplayString();
+	public String getDescription();
+	public DataModelElementFactory getDataModelElementFactory();
+
+	public Iterator getPredefinedDataTypes();
+	public Iterator getSequenceSupportedPredefinedDataTypes();
+	public Iterator getIdentityColumnSupportedPredefinedDataTypes();
+    public Iterator getRoutineParameterPredefinedDataTypeDefinitions();
+	public Iterator getRoutineParameterPredefinedDataTypeDefinitions(LanguageType languageType);
+
+	
+	public boolean supportsSchema();
+	public boolean supportsIdentityColumns();
+	public boolean supportsComputedColumns();
+	public boolean supportsSequence();
+	public boolean supportsMQT();
+	public boolean supportsMQTIndex();
+	public boolean supportsDeferrableConstraints();
+	public boolean supportsInformationalConstraints();
+	public boolean supportsClusteredIndexes();
+	public boolean isUniqueKeyNullable();
+	public List  getParentDeleteDRIRules();
+	public List  getParentUpdateDRIRules();
+	public boolean supportsConstraints();
+	public int queryMaxCommentLength();
+	public int queryMaxIdentifierLength();
+	public int queryMaxCheckExpression();
+	public int queryTriggerMaxReferencePartLength();
+	public int queryTriggerMaxActionBodyLength();
+	public int queryStoredProcedureMaxActionBodyLength();
+	public boolean supportsStoredProcedureNullInputAction();
+	public boolean supportsNicknames();
+	public boolean supportsNicknameConstraints();
+	public boolean supportsNicknameIndex();
+	public boolean supportsQuotedDML();
+	public boolean supportsQuotedDDL();
+
+	public boolean supportsAlias();
+	public boolean supportsSynonym();
+	public boolean supportsTriggers();
+	public boolean supportsTriggerTypes();
+	public boolean supportsInsteadOfTrigger();	
+	public boolean supportsPerColumnUpdateTrigger();
+	public boolean supportsTriggerReferencesClause();
+	public boolean supportsRowTriggerReference();
+	public boolean supportsTableTriggerReference();
+	public boolean supportTriggerWhenClause();
+	public boolean supportsTriggerGranularity();
+	public boolean supportsUserDefinedType();
+	public boolean supportsStructuredUserDefinedType();
+	public boolean supportsDistinctUserDefinedType();
+    public boolean supportsConstructedDataType();
+	public boolean supportsArrayDataType();
+	public boolean supportsMultiSetDataType();
+	public boolean supportsRowDataType();
+	public boolean supportsReferenceDataType();
+	public boolean supportsCursorDataType();
+
+	public boolean supportsSnapshotViews();
+	public boolean supportsViewTriggers();
+	public boolean supportsViewIndex();
+	
+	public boolean isKeyConstraintSupported(DataType dataType);
+	
+	public String getIdentifierQuoteString();
+	public String getHostVariableMarker();
+	public boolean supportsHostVariableMarker();
+	public boolean supportsCastExpression();
+	public boolean supportsDefaultKeywordForInsertValue();
+	public boolean supportsExtendedGrouping();
+	public boolean supportsTableAliasInDelete();
+	
+	public List getProcedureLanguageType();
+	public List getFunctionLanguageType();
+	public boolean supportsSQLStatement();
+	
+	public List getSQLKeywords();
+	public List getSQLOperators();
+	public boolean isSQLKeyword(String word);
+	public boolean isSQLOperator(String word);
+	public String getSQLTerminationCharacter();
+	
+	public int getMaximumIdentifierLength();
+	public int getMaximumIdentifierLength(SQLObject sqlObject);
+	public int getDatabaseMaximumIdentifierLength();
+	public int getSchemaMaximumIdentifierLength();
+	public int getTableMaximumIdentifierLength();
+	public int getViewMaximumIdentifierLength();
+	public int getColumnMaximumIdentifierLength();
+	public int getTriggerMaximumIdentifierLength();
+	public int getPrimarykeyIdentifierLength();
+	public int getForeignKeyMaximumIdentifierLength();
+	public int getCheckConstraintMaximumIdentifierLength();
+	public int getNicknameMaximumIdentifierLength();
+	public int getUserDefinedTypeMaximumIdentifierLength();
+	public int getTablespaceMaximumIdentifierLength();
+	
+	public List getPredefinedDataTypeDefinitionsByJDBCEnumType(int jdbcEnumType);
+	public List getPredefinedDataTypesByJDBCEnumType(int jdbcEnumType);
+	
+	public PredefinedDataType getPredefinedDataType(String dataTypeName);
+	public PredefinedDataTypeDefinition getPredefinedDataTypeDefinition(String dataTypeName);
+	public PredefinedDataType getPredefinedDataType(PredefinedDataTypeDefinition predefinedDataTypeDefinition);
+	
+	public PredefinedDataTypeDefinition getPredefinedDataTypeDefinitionByNameAndJDBCEnumType(String dataTypeName, int jdbcEnumType);
+	public PredefinedDataType getPredefinedDataTypeByNameAndJDBCEnumType(String dataTypeName, int jdbcEnumType);
+	
+	public String getPredefinedDataTypeFormattedName(PredefinedDataType predefinedDataType);
+		
+	public DDLParser getDdlParser();
+
+	public ICatalogProvider getDatabaseCatalogProvider();
+
+	public DDLGenerator getDDLGenerator();
+	public DeltaDDLGenerator getDeltaDDLGenerator();
+	public boolean supportsXML();
+	
+	public DebuggerDefinition getDebuggerDefinition();
+	public boolean supportsEvents();
+	public boolean supportsUDF();
+	public boolean supportsSQLUDFs();
+	public boolean supportsStoredProcedures();
+	
+	public boolean supportsPackage();
+	
+	public boolean isAuthorizationIdentifierSupported();
+	public boolean isRoleSupported();
+	public boolean isUserSupported();
+	public boolean isGroupSupported();
+	public boolean isRoleAuthorizationSupported();
+	
+	public List getPrivilegedElementClasses();
+	public boolean isPrivilegedElementClass(EClass clss);
+	public List getPrivilegeActions(EClass privilegedElementClass);
+	public List getActionElementClasses(EClass privilegedElementClass, String action);
+	
+	public String getLenghtSemantic(CharacterStringDataType characterStringDataType);
+	public void setLenghtSemantic(CharacterStringDataType characterStringDataType, String value);
+	
+	public boolean supportsViewCheckOption();
+	public boolean supportsViewCheckOptionLevels();
+	public List getViewCheckOptionLevels();
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/definition/DatabaseDefinitionRegistry.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/definition/DatabaseDefinitionRegistry.java
new file mode 100644
index 0000000..409289c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/definition/DatabaseDefinitionRegistry.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.definition;
+
+import java.sql.Connection;
+import java.util.Iterator;
+
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+public interface DatabaseDefinitionRegistry {
+	public Iterator getProducts();
+	public Iterator getConnectibleProducts(); 
+	public Iterator getVersions(String product);
+	public Iterator getConnectibleVersions(String product);
+	public DatabaseDefinition getDefinition(String product, String version);
+	public DatabaseDefinition getDefinition(Database database);
+	public DatabaseDefinition recognize(Connection connection);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/definition/DefaultDatabaseDefinition.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/definition/DefaultDatabaseDefinition.java
new file mode 100644
index 0000000..8ea7df1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/definition/DefaultDatabaseDefinition.java
@@ -0,0 +1,1023 @@
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.definition;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.DDLGenerator;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogProvider;
+import org.eclipse.datatools.connectivity.sqm.internal.core.rte.DDLParser;
+import org.eclipse.datatools.connectivity.sqm.internal.core.rte.DeltaDDLGenerator;
+import org.eclipse.datatools.modelbase.dbdefinition.DebuggerDefinition;
+import org.eclipse.datatools.modelbase.dbdefinition.LanguageType;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.datatypes.CharacterStringDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.DataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ * This class lets implementors of DatabaseDefinition choose which APIs
+ * to implement and buffers against compilation problems when new APIs are 
+ * added.
+ * 
+ * @author Thomas Sharp, sharpt@us.ibm.com
+ */
+public class DefaultDatabaseDefinition implements DatabaseDefinition
+{
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getActionElementClasses(org.eclipse.emf.ecore.EClass, java.lang.String)
+    */
+   public List getActionElementClasses(EClass privilegedElementClass,
+      String action)
+   {
+      return new ArrayList();
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getCheckConstraintMaximumIdentifierLength()
+    */
+   public int getCheckConstraintMaximumIdentifierLength()
+   {
+      return 0;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getColumnMaximumIdentifierLength()
+    */
+   public int getColumnMaximumIdentifierLength()
+   {
+      return 0;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getDDLGenerator()
+    */
+   public DDLGenerator getDDLGenerator()
+   {
+      return null;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getDataModelElementFactory()
+    */
+   public DataModelElementFactory getDataModelElementFactory()
+   {
+      return null;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getDatabaseCatalogProvider()
+    */
+   public ICatalogProvider getDatabaseCatalogProvider()
+   {
+      return null;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getDatabaseMaximumIdentifierLength()
+    */
+   public int getDatabaseMaximumIdentifierLength()
+   {
+      return 0;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getDdlParser()
+    */
+   public DDLParser getDdlParser()
+   {
+      return null;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getDebuggerDefinition()
+    */
+   public DebuggerDefinition getDebuggerDefinition()
+   {
+      return null;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getDeltaDDLGenerator()
+    */
+   public DeltaDDLGenerator getDeltaDDLGenerator()
+   {
+      return null;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getDescription()
+    */
+   public String getDescription()
+   {
+      return null;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getForeignKeyMaximumIdentifierLength()
+    */
+   public int getForeignKeyMaximumIdentifierLength()
+   {
+      return 0;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getFunctionLanguageType()
+    */
+   public List getFunctionLanguageType()
+   {
+      return new ArrayList();
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getHostVariableMarker()
+    */
+   public String getHostVariableMarker()
+   {
+      return null;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getIdentifierQuoteString()
+    */
+   public String getIdentifierQuoteString()
+   {
+      return null;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getIdentityColumnSupportedPredefinedDataTypes()
+    */
+   public Iterator getIdentityColumnSupportedPredefinedDataTypes()
+   {
+      return null;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getLenghtSemantic(org.eclipse.datatools.modelbase.sql.datatypes.CharacterStringDataType)
+    */
+   public String getLenghtSemantic(
+      CharacterStringDataType characterStringDataType)
+   {
+      return null;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getMaximumIdentifierLength()
+    */
+   public int getMaximumIdentifierLength()
+   {     
+      return 0;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getMaximumIdentifierLength(org.eclipse.datatools.modelbase.sql.schema.SQLObject)
+    */
+   public int getMaximumIdentifierLength(SQLObject sqlObject)
+   {
+      return 0;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getNicknameMaximumIdentifierLength()
+    */
+   public int getNicknameMaximumIdentifierLength()
+   {
+      return 0;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getParentDeleteDRIRules()
+    */
+   public List getParentDeleteDRIRules()
+   {
+      return new ArrayList();
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getParentUpdateDRIRules()
+    */
+   public List getParentUpdateDRIRules()
+   {
+      return new ArrayList();
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getPredefinedDataType(java.lang.String)
+    */
+   public PredefinedDataType getPredefinedDataType(String dataTypeName)
+   {
+      return null;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getPredefinedDataType(org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition)
+    */
+   public PredefinedDataType getPredefinedDataType(
+      PredefinedDataTypeDefinition predefinedDataTypeDefinition)
+   {
+      return null;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getPredefinedDataTypeByNameAndJDBCEnumType(java.lang.String, int)
+    */
+   public PredefinedDataType getPredefinedDataTypeByNameAndJDBCEnumType(
+      String dataTypeName, int jdbcEnumType)
+   {
+      return null;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getPredefinedDataTypeDefinition(java.lang.String)
+    */
+   public PredefinedDataTypeDefinition getPredefinedDataTypeDefinition(
+      String dataTypeName)
+   {
+      return null;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getPredefinedDataTypeDefinitionByNameAndJDBCEnumType(java.lang.String, int)
+    */
+   public PredefinedDataTypeDefinition getPredefinedDataTypeDefinitionByNameAndJDBCEnumType(
+      String dataTypeName, int jdbcEnumType)
+   {
+      return null;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getPredefinedDataTypeDefinitionsByJDBCEnumType(int)
+    */
+   public List getPredefinedDataTypeDefinitionsByJDBCEnumType(int jdbcEnumType)
+   {
+      return new ArrayList();
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getPredefinedDataTypeFormattedName(org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType)
+    */
+   public String getPredefinedDataTypeFormattedName(
+      PredefinedDataType predefinedDataType)
+   {
+      return null;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getPredefinedDataTypes()
+    */
+   public Iterator getPredefinedDataTypes()
+   {
+      return null;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getPredefinedDataTypesByJDBCEnumType(int)
+    */
+   public List getPredefinedDataTypesByJDBCEnumType(int jdbcEnumType)
+   {
+      return new ArrayList();
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getPrimarykeyIdentifierLength()
+    */
+   public int getPrimarykeyIdentifierLength()
+   {
+      return 0;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getPrivilegeActions(org.eclipse.emf.ecore.EClass)
+    */
+   public List getPrivilegeActions(EClass privilegedElementClass)
+   {
+      return new ArrayList();
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getPrivilegedElementClasses()
+    */
+   public List getPrivilegedElementClasses()
+   {
+      return new ArrayList();
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getProcedureLanguageType()
+    */
+   public List getProcedureLanguageType()
+   {
+      return new ArrayList();
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getProduct()
+    */
+   public String getProduct()
+   {
+      return null;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getProductDisplayString()
+    */
+   public String getProductDisplayString()
+   {
+      return null;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getRoutineParameterPredefinedDataTypeDefinitions()
+    */
+   public Iterator getRoutineParameterPredefinedDataTypeDefinitions()
+   {
+      return null;
+   }
+   
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getRoutineParameterPredefinedDataTypeDefinitions(LanguageType languageType)
+    */
+   public Iterator getRoutineParameterPredefinedDataTypeDefinitions(LanguageType languageType)
+   {
+      return null;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getSQLKeywords()
+    */
+   public List getSQLKeywords()
+   {
+      return new ArrayList();
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getSQLOperators()
+    */
+   public List getSQLOperators()
+   {
+      return new ArrayList();
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getSQLTerminationCharacter()
+    */
+   public String getSQLTerminationCharacter()
+   {
+      return null;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getSchemaMaximumIdentifierLength()
+    */
+   public int getSchemaMaximumIdentifierLength()
+   {
+      return 0;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getSequenceSupportedPredefinedDataTypes()
+    */
+   public Iterator getSequenceSupportedPredefinedDataTypes()
+   {
+      return null;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getTableMaximumIdentifierLength()
+    */
+   public int getTableMaximumIdentifierLength()
+   {
+      return 0;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getTablespaceMaximumIdentifierLength()
+    */
+   public int getTablespaceMaximumIdentifierLength()
+   {
+      return 0;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getTriggerMaximumIdentifierLength()
+    */
+   public int getTriggerMaximumIdentifierLength()
+   {
+      return 0;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getUserDefinedTypeMaximumIdentifierLength()
+    */
+   public int getUserDefinedTypeMaximumIdentifierLength()
+   {
+      return 0;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getVersion()
+    */
+   public String getVersion()
+   {
+      return null;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getVersionDisplayString()
+    */
+   public String getVersionDisplayString()
+   {
+      return null;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getViewCheckOptionLevels()
+    */
+   public List getViewCheckOptionLevels()
+   {
+      return new ArrayList();
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#getViewMaximumIdentifierLength()
+    */
+   public int getViewMaximumIdentifierLength()
+   {
+      return 0;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#isAuthorizationIdentifierSupported()
+    */
+   public boolean isAuthorizationIdentifierSupported()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#isGroupSupported()
+    */
+   public boolean isGroupSupported()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#isKeyConstraintSupported(org.eclipse.datatools.modelbase.sql.datatypes.DataType)
+    */
+   public boolean isKeyConstraintSupported(DataType dataType)
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#isPrivilegedElementClass(org.eclipse.emf.ecore.EClass)
+    */
+   public boolean isPrivilegedElementClass(EClass clss)
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#isRoleAuthorizationSupported()
+    */
+   public boolean isRoleAuthorizationSupported()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#isRoleSupported()
+    */
+   public boolean isRoleSupported()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#isSQLKeyword(java.lang.String)
+    */
+   public boolean isSQLKeyword(String word)
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#isSQLOperator(java.lang.String)
+    */
+   public boolean isSQLOperator(String word)
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#isUniqueKeyNullable()
+    */
+   public boolean isUniqueKeyNullable()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#isUserSupported()
+    */
+   public boolean isUserSupported()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#queryMaxCheckExpression()
+    */
+   public int queryMaxCheckExpression()
+   {
+      return 0;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#queryMaxCommentLength()
+    */
+   public int queryMaxCommentLength()
+   {
+      return 0;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#queryMaxIdentifierLength()
+    */
+   public int queryMaxIdentifierLength()
+   {
+      return 0;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#queryStoredProcedureMaxActionBodyLength()
+    */
+   public int queryStoredProcedureMaxActionBodyLength()
+   {
+      return 0;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#queryTriggerMaxActionBodyLength()
+    */
+   public int queryTriggerMaxActionBodyLength()
+   {
+      return 0;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#queryTriggerMaxReferencePartLength()
+    */
+   public int queryTriggerMaxReferencePartLength()
+   {
+      return 0;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#setLenghtSemantic(org.eclipse.datatools.modelbase.sql.datatypes.CharacterStringDataType, java.lang.String)
+    */
+   public void setLenghtSemantic(
+      CharacterStringDataType characterStringDataType, String value)
+   {
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportTriggerWhenClause()
+    */
+   public boolean supportTriggerWhenClause()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsAlias()
+    */
+   public boolean supportsAlias()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsArrayDataType()
+    */
+   public boolean supportsArrayDataType()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsCastExpression()
+    */
+   public boolean supportsCastExpression()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsClusteredIndexes()
+    */
+   public boolean supportsClusteredIndexes()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsComputedColumns()
+    */
+   public boolean supportsComputedColumns()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsConstraints()
+    */
+   public boolean supportsConstraints()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsConstructedDataType()
+    */
+   public boolean supportsConstructedDataType()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsDefaultKeywordForInsertValue()
+    */
+   public boolean supportsDefaultKeywordForInsertValue()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsDeferrableConstraints()
+    */
+   public boolean supportsDeferrableConstraints()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsDistinctUserDefinedType()
+    */
+   public boolean supportsDistinctUserDefinedType()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsEvents()
+    */
+   public boolean supportsEvents()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsExtendedGrouping()
+    */
+   public boolean supportsExtendedGrouping()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsHostVariableMarker()
+    */
+   public boolean supportsHostVariableMarker()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsIdentityColumns()
+    */
+   public boolean supportsIdentityColumns()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsInformationalConstraints()
+    */
+   public boolean supportsInformationalConstraints()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsInsteadOfTrigger()
+    */
+   public boolean supportsInsteadOfTrigger()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsMQT()
+    */
+   public boolean supportsMQT()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsMQTIndex()
+    */
+   public boolean supportsMQTIndex()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsMultiSetDataType()
+    */
+   public boolean supportsMultiSetDataType()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsNicknameConstraints()
+    */
+   public boolean supportsNicknameConstraints()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsNicknameIndex()
+    */
+   public boolean supportsNicknameIndex()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsNicknames()
+    */
+   public boolean supportsNicknames()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsPackage()
+    */
+   public boolean supportsPackage()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsPerColumnUpdateTrigger()
+    */
+   public boolean supportsPerColumnUpdateTrigger()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsQuotedDDL()
+    */
+   public boolean supportsQuotedDDL()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsQuotedDML()
+    */
+   public boolean supportsQuotedDML()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsReferenceDataType()
+    */
+   public boolean supportsReferenceDataType()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsRowDataType()
+    */
+   public boolean supportsRowDataType()
+   {
+      return false;
+   }
+   
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsCursorDataType()
+    */
+   public boolean supportsCursorDataType()
+   {
+	   return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsRowTriggerReference()
+    */
+   public boolean supportsRowTriggerReference()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsSQLStatement()
+    */
+   public boolean supportsSQLStatement()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsSQLUDFs()
+    */
+   public boolean supportsSQLUDFs()
+   {
+      return false;
+   }
+   
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsUDF()
+    */
+   public boolean supportsUDF()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsSchema()
+    */
+   public boolean supportsSchema()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsSequence()
+    */
+   public boolean supportsSequence()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsSnapshotViews()
+    */
+   public boolean supportsSnapshotViews()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsStoredProcedureNullInputAction()
+    */
+   public boolean supportsStoredProcedureNullInputAction()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsStoredProcedures()
+    */
+   public boolean supportsStoredProcedures()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsStructuredUserDefinedType()
+    */
+   public boolean supportsStructuredUserDefinedType()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsSynonym()
+    */
+   public boolean supportsSynonym()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsTableAliasInDelete()
+    */
+   public boolean supportsTableAliasInDelete()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsTableTriggerReference()
+    */
+   public boolean supportsTableTriggerReference()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsTriggerGranularity()
+    */
+   public boolean supportsTriggerGranularity()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsTriggerReferencesClause()
+    */
+   public boolean supportsTriggerReferencesClause()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsTriggerTypes()
+    */
+   public boolean supportsTriggerTypes()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsTriggers()
+    */
+   public boolean supportsTriggers()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsUserDefinedType()
+    */
+   public boolean supportsUserDefinedType()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsViewCheckOption()
+    */
+   public boolean supportsViewCheckOption()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsViewCheckOptionLevels()
+    */
+   public boolean supportsViewCheckOptionLevels()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsViewIndex()
+    */
+   public boolean supportsViewIndex()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsViewTriggers()
+    */
+   public boolean supportsViewTriggers()
+   {
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition#supportsXML()
+    */
+   public boolean supportsXML()
+   {
+      return false;
+   }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/definition/DefaultDatabaseRecognizer.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/definition/DefaultDatabaseRecognizer.java
new file mode 100644
index 0000000..c53a6e8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/definition/DefaultDatabaseRecognizer.java
@@ -0,0 +1,28 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.sqm.core.definition;
+
+import org.eclipse.datatools.connectivity.sqm.internal.core.definition.ConfigElementDatabaseRecognizer;
+
+/**
+ *  A default IDatabaseRecognizer implementation class that can be specified 
+ *  as a value in the recognizer.class attribute of an extension that implements the
+ *  org.eclipse.datatools.connectivity.sqm.core.databaseRecognition extension point.
+ */
+public class DefaultDatabaseRecognizer extends ConfigElementDatabaseRecognizer
+        implements IDatabaseRecognizer
+{
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/definition/EngineeringOptionID.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/definition/EngineeringOptionID.java
new file mode 100644
index 0000000..423d662
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/definition/EngineeringOptionID.java
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.definition;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.EngineeringOption;
+
+
+
+public class EngineeringOptionID {
+	public final static String GENERATE_FULLY_QUALIFIED_NAME = "GENERATE_FULLY_QUALIFIED_NAME";  //$NON-NLS-1$
+	public final static String GENERATE_QUOTED_IDENTIFIER= "GENERATE_QUOTED_IDENTIFIER"; //$NON-NLS-1$ 
+	public final static String GENERATE_DROP_STATEMENTS ="GENERATE_DROP_STATEMENTS"; //$NON-NLS-1$ 
+	public final static String GENERATE_CREATE_STATEMENTS = "GENERATE_CREATE_STATEMENTS"; //$NON-NLS-1$ 
+	public final static String GENERATE_COMMENTS = "GENERATE_COMMENTS"; //$NON-NLS-1$
+	public final static String GENERATE_DATABASE  = "GENERATE_DATABASE"; //$NON-NLS-1$
+	public final static String GENERATE_SCHEMAS = "GENERATE_SCHEMAS"; //$NON-NLS-1$
+	public final static String GENERATE_TABLES = "GENERATE_TABLES"; //$NON-NLS-1$ 
+	public final static String GENERATE_INDICES = "GENERATE_INDICES"; //$NON-NLS-1$
+	public final static String GENERATE_STOREDPROCEDURES = "GENERATE_STOREDPROCEDURES"; //$NON-NLS-1$
+	public final static String GENERATE_FUNCTIONS = "GENERATE_FUNCTIONS"; //$NON-NLS-1$
+	public final static String GENERATE_VIEWS = "GENERATE_VIEWS"; //$NON-NLS-1$
+	public final static String GENERATE_TRIGGERS = "GENERATE_TRIGGERS"; //$NON-NLS-1$
+	public final static String GENERATE_SEQUENCES = "GENERATE_SEQUENCES"; //$NON-NLS-1$
+	public final static String GENERATE_USER_DEFINED_TYPE = "GENERATE_USER_DEFINED_TYPE"; //$NON-NLS-1$
+	public final static String GENERATE_PK_CONSTRAINTS  = "GENERATE_PK_CONSTRAINTS"; //$NON-NLS-1$
+	public final static String GENERATE_FK_CONSTRAINTS  = "GENERATE_FK_CONSTRAINTS"; //$NON-NLS-1$
+	public final static String GENERATE_CK_CONSTRAINTS  = "GENERATE_CK_CONSTRAINTS"; //$NON-NLS-1$
+	public final static String GENERATE_ASSERTIONS  = "GENERATE_ASSERTIONS"; //$NON-NLS-1$
+		
+    public static final int DATABASE = 1;
+    public static final int SCHEMA = 2;
+    public static final int TABLE = 4;
+    public static final int PROCEDURE = 8;
+    public static final int USER_DEFINED_FUNCTION = 16;
+    public static final int VIEW = 32;
+    public static final int TRIGGER = 64;
+    public static final int INDEX = 128;
+    public static final int SEQUENCE = 256;
+    public static final int USER_DEFINED_TYPE = 512;
+    public static final int UNIQUE_CONSTRAINT = 1024;
+    public static final int FOREIGN_KEY = 2048;
+    public static final int CHECK_CONSTRAINT = 4096; 
+    
+    
+    public static boolean getOptionValue(String optionName, EngineeringOption[] options){
+        boolean ret = false;
+        for (int i = 0; i < options.length; i++){
+            EngineeringOption option = (EngineeringOption) options[i];
+            if (option != null && option.getOptionName().equals(optionName)) { 
+            	ret = option.getBoolean();
+                break;
+            }
+        }
+        return ret;
+    }
+    
+    public static boolean getOptionValueByID(String optionID, EngineeringOption[] options){
+        boolean ret = false;
+        for (int i = 0; i < options.length; i++){
+            EngineeringOption option = (EngineeringOption) options[i];
+            if (option !=null && option.getId().equals(optionID)) { 
+                ret = option.getBoolean();
+                break;
+            }
+        }
+        return ret;
+    }
+
+    public static boolean setOptionValueByID(String optionID, EngineeringOption[] options, boolean value){
+        boolean ret = false;
+        for (int i = 0; i < options.length; i++){
+            EngineeringOption option = (EngineeringOption) options[i];
+            if (option !=null && option.getId().equals(optionID)) { 
+            	option.setBoolean(value);
+                break;
+            }
+        }
+        return ret;
+    }
+
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/definition/IDatabaseRecognizer.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/definition/IDatabaseRecognizer.java
new file mode 100644
index 0000000..a64178e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/definition/IDatabaseRecognizer.java
@@ -0,0 +1,31 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2001, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  IBM Corporation - initial API and implementation
+ *  Actuate Corporation - moved interface from internal package
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.sqm.core.definition;
+
+import java.sql.Connection;
+
+/**
+ *  A database recognizer for determining the {@link DatabaseDefinition} instance 
+ *  that is appropriate for a given {@link Connection} object. 
+ *  <br>Its implementation class is required in the recognizer.class attribute
+ *  of an extension that implements the
+ *  <code>org.eclipse.datatools.connectivity.sqm.core.databaseRecognition</code> extension point.
+ */
+public interface IDatabaseRecognizer
+{
+    public DatabaseDefinition recognize( Connection connection );
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/definition/MetaDataExtension.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/definition/MetaDataExtension.java
new file mode 100644
index 0000000..faaafbd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/definition/MetaDataExtension.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.definition;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.ecore.EClass;
+
+public interface MetaDataExtension {
+	public int getMaximumIdentifierLength(SQLObject sqlObject);
+	
+	public EClass getMetaClass(String metaClassName);
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/mappings/MySafeRunnable.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/mappings/MySafeRunnable.java
new file mode 100644
index 0000000..96c5b31
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/mappings/MySafeRunnable.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Sybase, Inc. and Others
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.mappings;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.ISafeRunnable;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+
+/**
+ * Used to create a ProviderIDtoDriverCategoryIDDescriptor from an extension point
+ * in a thread-safe way.
+ * 
+ * <p><strong>EXPERIMENTAL</strong>. This class or interface has been added
+ * as part of a work in progress. There is no guarantee that this API will
+ * work or that it will remain the same. Please do not use this API
+ * without consulting with the DTP Connectivity team.</p> 
+ * @author brianf
+ */
+public class MySafeRunnable implements ISafeRunnable {
+
+	private ProviderIDtoDriverCategoryIDDescriptor[] mInstances = null;
+	private IConfigurationElement mElement = null;
+	
+	/**
+	 * Constructor
+	 * @param instance
+	 * @param element
+	 */
+	public MySafeRunnable ( ProviderIDtoDriverCategoryIDDescriptor[] instance, IConfigurationElement element ) {
+		this.mInstances = instance;
+		this.mElement = element;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.runtime.ISafeRunnable#handleException(java.lang.Throwable)
+	 */
+	public void handleException(Throwable exception) {
+		ConnectivityPlugin.getDefault().log(exception);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.runtime.ISafeRunnable#run()
+	 */
+	public void run() throws Exception {
+		if (this.mInstances != null)
+			this.mInstances[0] = new ProviderIDtoDriverCategoryIDDescriptor(this.mElement);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/mappings/ProviderIDMappingRegistry.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/mappings/ProviderIDMappingRegistry.java
new file mode 100644
index 0000000..1f65e45
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/mappings/ProviderIDMappingRegistry.java
@@ -0,0 +1,202 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Sybase, Inc. and Others
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.mappings;
+
+import java.util.HashMap;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
+import org.eclipse.datatools.connectivity.drivers.models.CategoryDescriptor;
+import org.eclipse.datatools.connectivity.drivers.models.TemplateDescriptor;
+
+/**
+ * A mapping utility that can be used to get the connection profile provider ID
+ * from a driver template category ID or from a vendor/version combination.
+ * 
+ * <p><strong>EXPERIMENTAL</strong>. This class or interface has been added
+ * as part of a work in progress. There is no guarantee that this API will
+ * work or that it will remain the same. Please do not use this API
+ * without consulting with the DTP Connectivity team.</p> 
+ * @author brianf
+ */
+public class ProviderIDMappingRegistry {
+	
+	private static ProviderIDMappingRegistry sRegistry;
+	private static HashMap<String, String> sProviderIDToCategoryIDMap;
+	private static HashMap<String, String> sCategoryIDtoProviderIDMap;
+	private static HashMap<String, String> sVendorVersionToProviderIDMap;
+	private static HashMap<String, String> sVendorVersionToCategoryIDMap;
+	
+	private static final String VENDORVERSION_SEPARATOR = "::"; //$NON-NLS-1$
+	
+	/**
+	 * Get the public instance
+	 * @return
+	 */
+	public static ProviderIDMappingRegistry getInstance() {
+		if (sRegistry == null) {
+		    synchronized( ProviderIDMappingRegistry.class ) {
+		    	sRegistry = new ProviderIDMappingRegistry();
+		    }
+		}
+		return sRegistry;
+	}
+	
+	/*
+	 * Hidden constructor 
+	 */
+	private ProviderIDMappingRegistry() {
+		loadMaps();
+	}
+
+	/*
+	 * Load the various maps.
+	 * 
+	 * 1) sProviderIDToCategoryIDMap is a mapping from a connection profile provider ID
+	 * 		to a category ID. There may be more than one category ID mapped to a given 
+	 * 		provider ID, so this is a potential issue.
+	 * 2) sCategoryIDtoProviderIDMap maps the other way, from a category ID back to the
+	 * 		connection profile provider ID.
+	 * 3) sVendorVersionToCategoryIDMap maps from an encoded vendor/version combination
+	 * 		to a particular driver category ID. Many vendor/versions may map to the same
+	 * 		category ID.
+	 * 4) sVendorVersionToProviderIDMap completes the circuit, mapping from the vendor/version
+	 * 		combination through the category ID up to the connection profile provider ID.
+	 */
+	private void loadMaps() {
+		ProviderIDtoDriverCategoryIDDescriptor[] categoryIDDescriptors =
+			ProviderIDtoDriverCategoryIDDescriptor.getMappingDescriptors();
+		
+	sProviderIDToCategoryIDMap = new HashMap<String, String>();
+		sCategoryIDtoProviderIDMap = new HashMap<String, String>();
+		
+		if (categoryIDDescriptors != null && categoryIDDescriptors.length > 0) {
+			for (int i = 0; i < categoryIDDescriptors.length; i++) {
+				ProviderIDtoDriverCategoryIDDescriptor descriptor = 
+					categoryIDDescriptors[i];
+				String providerID = descriptor.getProviderId();
+				String categoryID = descriptor.getDriverCategoryID();
+				sProviderIDToCategoryIDMap.put(
+						providerID, 
+						categoryID);
+				sCategoryIDtoProviderIDMap.put(
+						categoryID, 
+						providerID);
+			}
+		}
+
+		sVendorVersionToCategoryIDMap = new HashMap<String, String>();
+
+		TemplateDescriptor[] templates =
+			TemplateDescriptor.getDriverTemplateDescriptors();
+		if (templates != null && templates.length > 0) {
+			for (int i = 0; i < templates.length; i++) {
+				
+				String vendor = 
+					templates[i].getPropertyValueFromId(IJDBCDriverDefinitionConstants.DATABASE_VENDOR_PROP_ID);
+				String version = 
+					templates[i].getPropertyValueFromId(IJDBCDriverDefinitionConstants.DATABASE_VERSION_PROP_ID);
+				
+				if (vendor != null && vendor.trim().length() > 0 &&
+						version != null && version.trim().length() > 0) {
+					String encoded = encodeVendorVersion(vendor, version);
+					String categoryID = templates[i].getParentCategory();
+				        if (categoryID != null) {
+				            sVendorVersionToCategoryIDMap.put(
+				                            encoded, 
+				                            categoryID);
+				         }
+				    }
+			}
+		}
+
+		sVendorVersionToProviderIDMap = new HashMap<String, String>();
+		
+		Iterator<String> iter = sVendorVersionToCategoryIDMap.keySet().iterator();
+		while (iter.hasNext()) {
+			String key = iter.next();
+			String categoryID = sVendorVersionToCategoryIDMap.get(key);
+			
+			String providerID = 
+				getProviderIDforDriverCategoryID(categoryID);
+			if (providerID != null && providerID.trim().length() > 0) {
+				sVendorVersionToProviderIDMap.put(
+						key, 
+						providerID);
+			}
+		}
+	}
+	
+	/**
+	 * Category ID comes in. It either maps directly to a provider ID in the map or indirectly by way of a parent or not at all.
+	 * 
+	 * 1) Check the map with the incoming category ID. If we find a match, pass back the provider ID.
+	 * 2) Get the parent for the incoming category. If the parent isn't the Database category and it's not null,
+	 * 		check to see if the parent's category ID is in the provider ID/category ID map. If so, return it. 
+	 * 3) No matches. Return null
+	 * 
+	 * @param driverCategoryID
+	 * @return
+	 */
+	public String getProviderIDforDriverCategoryID ( String driverCategoryID ) {
+		if (driverCategoryID != null) {
+			if (sCategoryIDtoProviderIDMap.get(driverCategoryID) != null) {
+				return sCategoryIDtoProviderIDMap.get(driverCategoryID);
+			}
+			CategoryDescriptor cd = CategoryDescriptor.getCategoryDescriptor(driverCategoryID);
+			if (cd != null) {
+				CategoryDescriptor parent = cd.getParent();
+				while (parent != null && !parent.getId().equals(IJDBCDriverDefinitionConstants.DATABASE_CATEGORY_ID)) {
+					String providerID = sCategoryIDtoProviderIDMap.get(parent.getId());
+					if (providerID != null)
+						return providerID;
+					parent = parent.getParent();
+				}
+				return sCategoryIDtoProviderIDMap.get(driverCategoryID);
+			}
+		}
+		return null;
+		
+	}
+	
+	/**
+	 * Get the first driver template category mapped to the incoming provider ID.
+	 * Note that there may be multiple categories mapped, so this is a potential issue.
+	 * @param providerID
+	 * @return
+	 */
+	public String getCategoryIDforProviderID ( String providerID ) {
+		if (providerID != null)
+			return sProviderIDToCategoryIDMap.get(providerID);
+		return null;
+	}
+	
+	/**
+	 * Get the provider ID for the incoming vendor/version combo.
+	 * @param vendor
+	 * @param version
+	 * @return
+	 */
+	public String getProviderIDforVendorVersion ( String vendor, String version) {
+		if (vendor != null && version != null)
+			return sVendorVersionToProviderIDMap.get( encodeVendorVersion(vendor, version));
+		return null;
+	}
+
+	/*
+	 * @param vendor
+	 * @param version
+	 * @return
+	 */
+	private static String encodeVendorVersion ( String vendor, String version ) {
+		return vendor + VENDORVERSION_SEPARATOR + version;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/mappings/ProviderIDtoDriverCategoryIDDescriptor.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/mappings/ProviderIDtoDriverCategoryIDDescriptor.java
new file mode 100644
index 0000000..add19d4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/mappings/ProviderIDtoDriverCategoryIDDescriptor.java
@@ -0,0 +1,178 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 Sybase, Inc. and Others
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.mappings;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+
+import com.ibm.icu.text.Collator;
+
+/**
+ * Represents a provider ID to driver category ID mapping which is provided by the
+ * "org.eclipse.datatools.connectivity.sqm.core.mappings.providerIDtoDriverCategoryID" extension point.
+ * 
+ * <p><strong>EXPERIMENTAL</strong>. This class or interface has been added
+ * as part of a work in progress. There is no guarantee that this API will
+ * work or that it will remain the same. Please do not use this API
+ * without consulting with the DTP Connectivity team.</p> 
+ * @author brianf
+ */
+public class ProviderIDtoDriverCategoryIDDescriptor implements Comparable<Object> {
+
+	// extension point details
+	public static final String PROVIDERIDMAPPING_TAG = "providerIDtoDriverCategoryID";//$NON-NLS-1$
+	private static final String EXTENSION_POINT_NAME = "mappings"; //$NON-NLS-1$
+
+	// attributes
+	private static final String PROVIDERID_ATTRIBUTE = "providerID"; //$NON-NLS-1$
+	private static final String DRIVERCATEGORY_ID = "driverCategoryID"; //$NON-NLS-1$
+
+	// local list of descriptors
+	private static ProviderIDtoDriverCategoryIDDescriptor[] fgMappingDescriptors;
+
+	// local copy of configuration element
+	private IConfigurationElement fElement;
+
+	/**
+	 * Creates a new driver type descriptor for the given configuration element.
+	 */
+	protected ProviderIDtoDriverCategoryIDDescriptor(IConfigurationElement element) {
+		this.fElement = element;
+
+		Assert.isNotNull(getProviderId(), "providerID missing for org.eclipse.datatools.connectivity.sqm.core.mappings.providerIDtoDriverCategoryID extension"); //$NON-NLS-1$
+
+		Assert.isNotNull(getDriverCategoryID(), "driverCategoryID missing for org.eclipse.datatools.connectivity.sqm.core.mappings.providerIDtoDriverCategoryID extension"); //$NON-NLS-1$
+	}
+
+	/**
+	 * Returns all contributed provider mapping extensions
+	 */
+	public static ProviderIDtoDriverCategoryIDDescriptor[] getMappingDescriptors() {
+		if (fgMappingDescriptors == null) {
+			IExtensionRegistry registry = Platform.getExtensionRegistry();
+			IConfigurationElement[] elements = registry
+					.getConfigurationElementsFor(RDBCorePlugin.getSymbolicName(),
+							EXTENSION_POINT_NAME);
+			fgMappingDescriptors = createProviderIDtoDriverCategoryIDDescriptors(elements);
+		}
+		return fgMappingDescriptors;
+	}
+
+	/**
+	 * Returns the provider id.
+	 * @return String ID
+	 */
+	public String getProviderId() {
+		return this.fElement.getAttribute(PROVIDERID_ATTRIBUTE);
+	}
+
+	/**
+	 * Returns the driver category id.
+	 * @return String 
+	 */
+	public String getDriverCategoryID() {
+		return this.fElement.getAttribute(DRIVERCATEGORY_ID);
+	}
+	
+	/**
+	 * Returns a merger of the provider and category IDs as a unique ID
+	 * @return String
+	 */
+	public String getProviderIDtoDriverCategoryID_ID() {
+		return getProviderId() + "." + getDriverCategoryID();
+	}
+
+	/**
+	 * Returns the configuration element.
+	 * @return IConfigurationElement
+	 */
+	public IConfigurationElement getElement() {
+		return this.fElement;
+	}
+
+	/* (non-Javadoc)
+	 * Implements a method from IComparable
+	 * @see java.lang.Comparable#compareTo(java.lang.Object)
+	 */
+	public int compareTo(Object o) {
+		if (o instanceof ProviderIDtoDriverCategoryIDDescriptor)
+			return Collator.getInstance().compare(getProviderIDtoDriverCategoryID_ID(),
+					(((ProviderIDtoDriverCategoryIDDescriptor) o).getProviderIDtoDriverCategoryID_ID()));
+		return Integer.MIN_VALUE;
+	}
+
+	/**
+	 * Creates the provider mapping descriptors.
+	 * @param elements
+	 * @return
+	 */
+	private static ProviderIDtoDriverCategoryIDDescriptor[] createProviderIDtoDriverCategoryIDDescriptors(
+			IConfigurationElement[] elements) {
+		List<ProviderIDtoDriverCategoryIDDescriptor> result = new ArrayList<ProviderIDtoDriverCategoryIDDescriptor>(5);
+		Set<String> descIds = new HashSet<String>(5);
+		for (int i = 0; i < elements.length; i++) {
+			final IConfigurationElement element = elements[i];
+			if (PROVIDERIDMAPPING_TAG.equals(element.getName())) {
+
+				final ProviderIDtoDriverCategoryIDDescriptor[] desc = new ProviderIDtoDriverCategoryIDDescriptor[1];
+				SafeRunner
+					.run(new MySafeRunnable ( desc, element));
+
+				if (desc[0] != null && !descIds.contains(desc[0].getProviderIDtoDriverCategoryID_ID())) {
+					result.add(desc[0]);
+					descIds.add(desc[0].getProviderIDtoDriverCategoryID_ID());
+				}
+			}
+		}
+		Collections.sort(result);
+		return (ProviderIDtoDriverCategoryIDDescriptor[]) result
+				.toArray(new ProviderIDtoDriverCategoryIDDescriptor[result.size()]);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.lang.Object#toString()
+	 */
+	public String toString() {
+		return getProviderIDtoDriverCategoryID_ID();
+	}
+
+	/* (non-Javadoc)
+	 * @see java.lang.Object#equals(java.lang.Object)
+	 */
+	public boolean equals(Object obj) {
+		if (obj instanceof ProviderIDtoDriverCategoryIDDescriptor) {
+			ProviderIDtoDriverCategoryIDDescriptor compare = (ProviderIDtoDriverCategoryIDDescriptor) obj;
+			return this.getProviderIDtoDriverCategoryID_ID().equals(compare.getProviderIDtoDriverCategoryID_ID());
+		}
+		return super.equals(obj);
+	}
+
+	/* (non-Javadoc)
+	 * @see java.lang.Object#hashCode()
+	 */
+	public int hashCode() {
+		if (this.getProviderIDtoDriverCategoryID_ID() != null)
+			return this.getProviderIDtoDriverCategoryID_ID().hashCode();
+		return super.hashCode();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/DDLGenerator.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/DDLGenerator.java
new file mode 100644
index 0000000..ce9dd4d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/DDLGenerator.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.rte;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.datatools.connectivity.sqm.internal.core.rte.EngineeringOptionCategory;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+public interface DDLGenerator {
+	public String[] generateDDL(SQLObject[] elements, IProgressMonitor progressMonitor);
+    public String[] createSQLObjects(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor);
+    public String[] dropSQLObjects(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor);
+    public String[] createSQLObjects(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor,IEngineeringCallBack callback);
+	public String[] generateDDL(SQLObject[] elements, IProgressMonitor progressMonitor,IEngineeringCallBack callback);
+    public String[] dropSQLObjects(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor,IEngineeringCallBack callback);
+    public EngineeringOption[] getOptions(SQLObject[] elements);
+    public EngineeringOptionCategory[] getOptionCategories();
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/EngineeringOption.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/EngineeringOption.java
new file mode 100644
index 0000000..601bf15
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/EngineeringOption.java
@@ -0,0 +1,176 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.rte;
+
+import org.eclipse.datatools.connectivity.sqm.internal.core.rte.EngineeringOptionCategory;
+
+public final class EngineeringOption implements Cloneable {
+	public static final class EnumLiteral {
+		public EnumLiteral(String name, String description) {
+			this.name = name;
+			this.desc = description;
+		}
+		public String getName() {
+			return this.name;
+		}
+		public String getDescription() {
+			return this.desc;
+		}
+		private String name;
+		private String desc;
+	}
+
+	public static final byte BOOLEAN_OPTION = 0;
+	public static final byte INTEGER_OPTION = 1;
+	public static final byte STRING_OPTION  = 2;
+	public static final byte ENUM_OPTION    = 3;
+	
+	public EngineeringOption(String name, String description, boolean initialValue) {
+		this.initOption(null,name,description,initialValue,null);
+	}
+	
+	public EngineeringOption(String id,String name, String description, boolean initialValue, EngineeringOptionCategory category) {
+		this.initOption(id,name,description,initialValue,category);
+	}
+	
+	public EngineeringOption(String name, String description, String initialValue) {
+		this.initOption(null,name,description,initialValue,null);
+	}
+
+	public EngineeringOption(String id,String name, String description, String initialValue,EngineeringOptionCategory category) {
+		this.initOption(id,name,description,initialValue,category);
+	}
+
+	public EngineeringOption(String name, String description, int initialValue) {
+		this.initOption(null,name,description,initialValue, null);
+	}
+	public EngineeringOption(String id,String name, String description, int initialValue,EngineeringOptionCategory category) {
+		this.initOption(id,name,description,initialValue,category);
+	}
+	
+	public EngineeringOption(String name, String description, int initialValue, EnumLiteral[] choices) {
+		this.initOption(null,name,description,initialValue,choices,null);
+	}
+	public EngineeringOption(String id,String name, String description, int initialValue, EnumLiteral[] choices,EngineeringOptionCategory category) {
+		this.initOption(id,name,description,initialValue,choices,category);
+	}
+
+	public String  getOptionName() {
+		return this.name;
+	}
+	
+	public String  getOptionDescription() {
+		return this.desc;
+	}
+	
+	public byte    getOptionType() {
+		return this.type;
+	}
+	
+	public EnumLiteral[] getEnumLiterals() {
+		if(this.type != EngineeringOption.ENUM_OPTION) throw new RuntimeException("Invalid Call"); //$NON-NLS-1$
+		return this.choices;
+	}
+	
+	public boolean getBoolean() {
+		if(this.type != EngineeringOption.BOOLEAN_OPTION) throw new RuntimeException("Invalid Call"); //$NON-NLS-1$
+		return this.booleanValue;
+	}
+	
+	public int getInt() {
+		if(this.type != EngineeringOption.INTEGER_OPTION && this.type != EngineeringOption.ENUM_OPTION)
+			throw new RuntimeException("Invalid Call"); //$NON-NLS-1$
+		return this.intValue;
+		
+	}
+	
+	public String  getString() {
+		if(this.type != EngineeringOption.STRING_OPTION) throw new RuntimeException("Invalid Call"); //$NON-NLS-1$
+		return this.stringValue;
+	}
+	
+	public void setBoolean(boolean value) {
+		if(this.type != EngineeringOption.BOOLEAN_OPTION) throw new RuntimeException("Invalid Call"); //$NON-NLS-1$
+		this.booleanValue = value;
+	}
+	
+	public void setInt(int value) {
+		if(this.type != EngineeringOption.INTEGER_OPTION && this.type != EngineeringOption.ENUM_OPTION)
+			throw new RuntimeException("Invalid Call"); //$NON-NLS-1$
+		this.intValue = value;		
+	}
+	
+	public void setString(String value) {
+		if(this.type != EngineeringOption.STRING_OPTION) throw new RuntimeException("Invalid Call"); //$NON-NLS-1$
+		this.stringValue = value;
+	}
+	
+	public String getId() {
+		return id;
+	}
+	
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public EngineeringOptionCategory getCategory() {
+		return category;
+	}
+	public void setCategory(EngineeringOptionCategory category) {
+		this.category = category;
+	}
+
+	private void initOption(String id,String name, String description, boolean initialValue, EngineeringOptionCategory category) {
+		this.type = EngineeringOption.BOOLEAN_OPTION;
+		if (id != null) this.id = id;
+		this.name = name;
+		this.desc = description;
+		this.booleanValue = initialValue;
+		this.category = category;
+	}
+
+	public void initOption (String id,String name, String description, String initialValue,EngineeringOptionCategory category) {
+		this.type = EngineeringOption.STRING_OPTION;
+		if (id != null) this.id = id;
+		this.name = name;
+		this.desc = description;
+		this.stringValue = initialValue;
+		this.category = category;
+	}
+	
+	public void initOption(String id,String name, String description, int initialValue,EngineeringOptionCategory category) {
+		this.type = EngineeringOption.INTEGER_OPTION;
+		if (id != null) this.id = id;
+		this.name = name;
+		this.desc = description;
+		this.intValue = initialValue;		
+		this.category = category;
+	}
+	
+	public void initOption(String id,String name, String description, int initialValue, EnumLiteral[] choices,EngineeringOptionCategory category) {
+		this.type = EngineeringOption.ENUM_OPTION;
+		if (id != null) this.id = id;
+		this.name = name;
+		this.desc = description;
+		this.intValue = initialValue;	
+		this.choices = choices;
+		this.category = category;
+	}
+	private String id = "generated." + this.hashCode(); //$NON-NLS-1$
+	private String name;
+	private String desc;
+	private EngineeringOptionCategory category = null;
+	private boolean booleanValue;
+	private int intValue;
+	private String stringValue;
+	private byte type;
+	private EnumLiteral[] choices;
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/ICatalogObject.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/ICatalogObject.java
new file mode 100644
index 0000000..d40145a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/ICatalogObject.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.rte;
+
+import java.sql.Connection;
+
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+public interface ICatalogObject {
+	public void refresh();
+	public Connection getConnection();
+	public Database getCatalogDatabase();
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/ICatalogObjectListener.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/ICatalogObjectListener.java
new file mode 100644
index 0000000..65b2ab0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/ICatalogObjectListener.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.rte;
+
+
+
+public interface ICatalogObjectListener {
+
+	public void notifyChanged(ICatalogObject dmElement, int eventType);
+	
+	public interface EventTypeEnumeration {
+		public final static byte ELEMENT_REFRESH = 0;
+		public final static byte ENUMERATION_LENGTH = 1;
+	}	
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/ICatalogProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/ICatalogProvider.java
new file mode 100644
index 0000000..b5f1cd3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/ICatalogProvider.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.rte;
+
+import java.sql.Connection;
+
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+public interface ICatalogProvider {
+	public Database getCatalogDatabase(Connection connection);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/IEngineeringCallBack.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/IEngineeringCallBack.java
new file mode 100644
index 0000000..55e0fcf
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/IEngineeringCallBack.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/package org.eclipse.datatools.connectivity.sqm.core.rte;
+
+public interface IEngineeringCallBack {
+	public String[] getMessages();
+	public void writeMessage(String message);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/RefreshManager.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/RefreshManager.java
new file mode 100644
index 0000000..004c122
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/RefreshManager.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.rte;
+
+import java.util.Hashtable;
+import java.util.Vector;
+
+
+
+
+public class RefreshManager {
+	
+	private static RefreshManager instance = null;
+	
+	private RefreshManager(){
+	}
+	
+	public static RefreshManager getInstance(){
+		if (instance == null)
+			instance = new RefreshManager();
+		
+		return instance;
+	}
+	
+	//object can be null. It means the listener care about all the object refresh event
+	public void AddListener(ICatalogObject interestedObject,ICatalogObjectListener listener){
+		if (interestedObject == null) {
+			if (!this.globalListeners.contains(listener)) {
+				this.globalListeners.add(listener);
+			}
+		} else {
+			if (this.listeners.containsKey(interestedObject)){
+				Vector listenerLinks = (Vector) this.listeners.get(interestedObject);
+				if (!listenerLinks.contains(listener)){
+					listenerLinks.add(listener);
+				}
+			} else {
+				Vector listenerLinks = new Vector();
+				listenerLinks.add(listener);
+				this.listeners.put(interestedObject,listenerLinks);
+			}
+		}
+	}
+	public void removeListener(ICatalogObject interestedObject, ICatalogObjectListener listener){
+		if (interestedObject == null){
+			if (this.globalListeners.contains(listener)) {
+				this.globalListeners.remove(listener);
+			}
+		} else {
+			if (this.listeners.containsKey(interestedObject)){
+				Vector listenerLinks = (Vector) this.listeners.get(interestedObject);
+				if (listenerLinks.contains(listener)){
+					listenerLinks.remove(listener);
+				}
+			}
+		}
+	}
+
+	public void clearListener(){
+		this.listeners.clear();
+		this.globalListeners.clear();
+	}
+	
+	public void referesh(ICatalogObject object){
+		for (int i = 0; i < this.globalListeners.size(); i++) {
+			((ICatalogObjectListener)this.globalListeners.elementAt(i)).notifyChanged(object,ICatalogObjectListener.EventTypeEnumeration.ELEMENT_REFRESH);
+		}
+	
+		if (this.listeners.containsKey(object)) {
+			Vector listenerLinks = (Vector) this.listeners.get(object);
+			for (int i = 0; i < listenerLinks.size(); i++ ){
+				ICatalogObjectListener listener = (ICatalogObjectListener)listenerLinks.elementAt(i);
+				listener.notifyChanged(object,ICatalogObjectListener.EventTypeEnumeration.ELEMENT_REFRESH);
+			}
+		}
+	}
+	
+	private Hashtable listeners = new Hashtable();
+	private Vector globalListeners = new Vector();
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/fe/GenericDdlBuilder.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/fe/GenericDdlBuilder.java
new file mode 100644
index 0000000..c3eec38
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/fe/GenericDdlBuilder.java
@@ -0,0 +1,1425 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.rte.fe;
+
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentServiceImpl;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.IEngineeringCallBack;
+import org.eclipse.datatools.connectivity.sqm.internal.core.definition.DatabaseDefinitionRegistryImpl;
+import org.eclipse.datatools.connectivity.sqm.internal.core.util.GenericCatalogMessages;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.AuthorizationIdentifier;
+import org.eclipse.datatools.modelbase.sql.constraints.Assertion;
+import org.eclipse.datatools.modelbase.sql.constraints.CheckConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.Constraint;
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.IndexMember;
+import org.eclipse.datatools.modelbase.sql.constraints.PrimaryKey;
+import org.eclipse.datatools.modelbase.sql.constraints.ReferenceConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.TableConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.UniqueConstraint;
+import org.eclipse.datatools.modelbase.sql.datatypes.AttributeDefinition;
+import org.eclipse.datatools.modelbase.sql.datatypes.DistinctUserDefinedType;
+import org.eclipse.datatools.modelbase.sql.datatypes.Domain;
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.StructuredUserDefinedType;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.routines.Function;
+import org.eclipse.datatools.modelbase.sql.routines.Method;
+import org.eclipse.datatools.modelbase.sql.routines.Parameter;
+import org.eclipse.datatools.modelbase.sql.routines.ParameterMode;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.datatools.modelbase.sql.routines.UserDefinedFunction;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.ReferentialActionType;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.schema.Sequence;
+import org.eclipse.datatools.modelbase.sql.schema.TypedElement;
+import org.eclipse.datatools.modelbase.sql.statements.SQLStatement;
+import org.eclipse.datatools.modelbase.sql.tables.ActionGranularityType;
+import org.eclipse.datatools.modelbase.sql.tables.ActionTimeType;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.datatools.modelbase.sql.tables.CheckType;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.TemporaryTable;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;
+import org.eclipse.emf.ecore.EObject;
+
+import com.ibm.icu.text.MessageFormat;
+import com.ibm.icu.util.StringTokenizer;
+
+public class GenericDdlBuilder {
+    protected final static String NEWLINE              = System.getProperty("line.separator"); //$NON-NLS-1$
+    protected final static String EMPTY_STRING         = ""; //$NON-NLS-1$
+    protected final static String DOT                  = "."; //$NON-NLS-1$
+    protected final static String SPACE                = " "; //$NON-NLS-1$
+    protected final static String COMMA                = ","; //$NON-NLS-1$
+    protected final static String SINGLE_QUOTE         = "'"; //$NON-NLS-1$
+    protected final static String DOUBLE_QUOTE         = "\""; //$NON-NLS-1$
+    protected final static String TAB                  = "\t"; //$NON-NLS-1$
+    protected final static String LEFT_PARENTHESIS     = "("; //$NON-NLS-1$
+    protected final static String RIGHT_PARENTHESIS    = ")"; //$NON-NLS-1$
+    protected final static String DROP                 = "DROP"; //$NON-NLS-1$
+    protected final static String CREATE               = "CREATE"; //$NON-NLS-1$
+    protected final static String ALTER                = "ALTER"; //$NON-NLS-1$
+    protected final static String ADD                  = "ADD"; //$NON-NLS-1$
+    protected final static String DELETE               = "DELETE"; //$NON-NLS-1$
+    protected final static String UPDATE               = "UPDATE"; //$NON-NLS-1$
+    protected final static String CASCADE              = "CASCADE"; //$NON-NLS-1$
+    protected final static String CASCADED             = "CASCADED"; //$NON-NLS-1$
+    protected final static String LOCAL                = "LOCAL"; //$NON-NLS-1$
+    protected final static String OPTION               = "OPTION"; //$NON-NLS-1$
+    protected final static String RESTRICT             = "RESTRICT"; //$NON-NLS-1$
+    protected final static String NULL                 = "NULL"; //$NON-NLS-1$
+    protected final static String NOT                  = "NOT"; //$NON-NLS-1$
+    protected final static String DEFAULT              = "DEFAULT"; //$NON-NLS-1$
+    protected final static String SET                  = "SET"; //$NON-NLS-1$
+    protected final static String TRIGGER              = "TRIGGER"; //$NON-NLS-1$
+    protected final static String TABLE                = "TABLE"; //$NON-NLS-1$
+    protected final static String VIEW                 = "VIEW"; //$NON-NLS-1$
+    protected final static String INDEX                = "INDEX"; //$NON-NLS-1$
+    protected final static String PROCEDURE            = "PROCEDURE"; //$NON-NLS-1$
+    protected final static String FUNCTION             = "FUNCTION"; //$NON-NLS-1$
+    protected final static String CONSTRAINT           = "CONSTRAINT"; //$NON-NLS-1$
+    protected final static String UNIQUE               = "UNIQUE"; //$NON-NLS-1$
+    protected final static String CHECK                = "CHECK"; //$NON-NLS-1$
+    protected final static String TYPE                 = "TYPE"; //$NON-NLS-1$
+    protected final static String ON                   = "ON"; //$NON-NLS-1$
+    protected final static String FOREIGN_KEY          = "FOREIGN KEY"; //$NON-NLS-1$
+    protected final static String REFERENCES           = "REFERENCES"; //$NON-NLS-1$
+    protected final static String PRIMARY_KEY          = "PRIMARY KEY"; //$NON-NLS-1$
+    protected final static String DEFERRABLE           = "DEFERRABLE"; //$NON-NLS-1$
+    protected final static String DEFERRED             = "DEFERRED"; //$NON-NLS-1$
+    protected final static String INITIALLY            = "INITIALLY"; //$NON-NLS-1$
+    protected final static String ALIAS                = "ALIAS"; //$NON-NLS-1$
+    protected final static String AS                   = "AS"; //$NON-NLS-1$
+    protected final static String FOR                  = "FOR"; //$NON-NLS-1$
+    protected final static String LONG                 = "LONG"; //$NON-NLS-1$
+    protected final static String BLOB                 = "BLOB"; //$NON-NLS-1$
+    protected final static String DBCLOB               = "DBCLOB"; //$NON-NLS-1$
+    protected final static String CLOB                 = "CLOB"; //$NON-NLS-1$
+    protected final static String VARCHAR              = "VARCHAR"; //$NON-NLS-1$
+    protected final static String WITH                 = "WITH"; //$NON-NLS-1$
+    protected final static String COMPARISONS          = "COMPARISONS"; //$NON-NLS-1$
+    protected final static String DATALINK             = "DATALINK"; //$NON-NLS-1$
+    protected final static String VARGRAPHIC           = "VARGRAPHIC"; //$NON-NLS-1$
+    protected final static String AFTER                = "AFTER"; //$NON-NLS-1$
+    protected final static String BEFORE               = "BEFORE"; //$NON-NLS-1$
+    protected final static String INSTEAD_OF           = "INSTEAD OF"; //$NON-NLS-1$
+    protected final static String INSERT               = "INSERT"; //$NON-NLS-1$
+    protected final static String NO                   = "NO"; //$NON-NLS-1$
+    protected final static String OF                   = "OF"; //$NON-NLS-1$
+    protected final static String REFERENCING          = "REFERENCING"; //$NON-NLS-1$
+    protected final static String NEW                  = "NEW"; //$NON-NLS-1$
+    protected final static String OLD                  = "OLD"; //$NON-NLS-1$
+    protected final static String NEW_TABLE            = "NEW TABLE"; //$NON-NLS-1$
+    protected final static String OLD_TABLE            = "OLD TABLE"; //$NON-NLS-1$
+    protected final static String EACH                 = "EACH"; //$NON-NLS-1$
+    protected final static String ROW                  = "ROW"; //$NON-NLS-1$
+    protected final static String STATEMENT            = "STATEMENT"; //$NON-NLS-1$
+    protected final static String WHEN                 = "WHEN"; //$NON-NLS-1$
+    protected static final String LANGUAGE             = "LANGUAGE"; //$NON-NLS-1$
+    protected static final String PARAMETER_STYLE      = "PARAMETER STYLE"; //$NON-NLS-1$
+    protected static final String DETERMINISTIC        = "DETERMINISTIC"; //$NON-NLS-1$
+    protected static final String NOT_DETERMINISTIC    = "NOT DETERMINISTIC"; //$NON-NLS-1$
+    protected static final String DYNAMIC_RESULT_SETS  = "DYNAMIC RESULT SETS"; //$NON-NLS-1$
+    protected static final String RETURNS              = "RETURNS"; //$NON-NLS-1$
+    protected static final String CAST_FROM            = "CAST FROM"; //$NON-NLS-1$
+    protected static final String RETURNS_NULL_ON_NULL_INPUT = "RETURNS NULL ON NULL INPUT"; //$NON-NLS-1$
+    protected static final String CALLED_ON_NULL_INPUT = "CALLED ON NULL INPUT"; //$NON-NLS-1$
+    protected static final String TRANSFORM_GROUP      = "TRANSFORM GROUP"; //$NON-NLS-1$
+    protected static final String STATIC_DISPATCH      = "STATIC DISPATCH"; //$NON-NLS-1$
+    protected static final String SCHEMA               = "SCHEMA"; //$NON-NLS-1$
+    protected static final String AUTHORIZATION        = "AUTHORIZATION"; //$NON-NLS-1$
+    protected static final String GLOBAL               = "GLOBAL"; //$NON-NLS-1$
+    protected static final String TEMPORARY            = "TEMPORARY"; //$NON-NLS-1$
+    protected static final String ON_COMMIT            = "ON COMMIT"; //$NON-NLS-1$
+    protected static final String PRESERVE             = "PRESERVE"; //$NON-NLS-1$
+    protected static final String ROWS                 = "ROWS"; //$NON-NLS-1$
+    protected static final String UNDER                = "UNDER"; //$NON-NLS-1$
+    protected static final String INSTANTIABLE         = "INSTANTIABLE"; //$NON-NLS-1$
+    protected static final String NOT_INSTANTIABLE     = "NOT INSTANTIABLE"; //$NON-NLS-1$
+    protected static final String FINAL                = "FINAL"; //$NON-NLS-1$
+    protected static final String NOT_FINAL            = "NOT FINAL"; //$NON-NLS-1$
+    protected static final String OVERRIDING           = "OVERRIDING"; //$NON-NLS-1$
+    protected static final String STATIC               = "STATIC"; //$NON-NLS-1$
+    protected static final String INSTANCE             = "INSTANCE"; //$NON-NLS-1$
+    protected static final String SPECIFIC             = "SPECIFIC"; //$NON-NLS-1$
+    protected static final String DOMAIN               = "DOMAIN"; //$NON-NLS-1$
+    protected static final String REFERENCES_ARE_CHECKED = "REFERENCES ARE CHECKED"; //$NON-NLS-1$
+    protected static final String REFERENCES_ARE_NOT_CHECKED = "REFERENCES ARE NOT CHECKED"; //$NON-NLS-1$
+	protected static final String ASSERTION            = "ASSERTION"; //$NON-NLS-1$
+
+    private IEngineeringCallBack callback = null;
+    private IEngineeringCallBack dummyCallback = null;
+
+    public void setEngineeringCallBack(IEngineeringCallBack callback) {
+    	this.callback = callback;
+    }
+
+    public IEngineeringCallBack getEngineeringCallBack() {
+    	if (this.callback != null) {
+    		return this.callback;
+    	} else{
+    		return this.getDummyEngineeringCallBack();
+    	}
+    }
+
+    public String dropTrigger(Trigger trigger, boolean quoteIdentifiers, boolean qualifyNames) {
+        return DROP + SPACE + TRIGGER + SPACE + getName(trigger, quoteIdentifiers, qualifyNames);
+    }
+
+    public String dropView(ViewTable view, boolean quoteIdentifiers, boolean qualifyNames) {
+        return DROP + SPACE + VIEW + SPACE + getName(view, quoteIdentifiers, qualifyNames);
+    }
+
+    public String dropTableConstraint(TableConstraint constraint, boolean quoteIdentifiers, boolean qualifyNames) {
+        return ALTER + SPACE + TABLE + SPACE + getName(constraint.getBaseTable(), quoteIdentifiers, qualifyNames)
+        	+ " DROP CONSTRAINT " + getName(constraint, quoteIdentifiers); //$NON-NLS-1$
+    }
+    
+    public String dropIndex(Index index, boolean quoteIdentifiers, boolean qualifyNames) {
+        return DROP + SPACE + INDEX + SPACE + getName(index, quoteIdentifiers, qualifyNames);
+    }
+
+    public String dropTable(BaseTable table, boolean quoteIdentifiers, boolean qualifyNames) {
+        return DROP + SPACE + TABLE + SPACE + getName(table, quoteIdentifiers, qualifyNames);
+    }
+
+	public String dropProcedure(Procedure procedure, boolean quoteIdentifiers, boolean qualifyNames) {
+        return DROP + SPACE + PROCEDURE + SPACE + getName(procedure, quoteIdentifiers, qualifyNames);
+	}
+
+	public String dropFunction(UserDefinedFunction function, boolean quoteIdentifiers, boolean qualifyNames) {
+        return DROP + SPACE + FUNCTION + SPACE + getName(function, quoteIdentifiers, qualifyNames);
+	}
+
+	public String dropSchema(Schema schema, boolean quoteIdentifiers, boolean qualifyNames) {
+        return DROP + SPACE + SCHEMA + SPACE + getName(schema, quoteIdentifiers, qualifyNames);
+	}
+
+	public String dropUserDefinedType(UserDefinedType type, boolean quoteIdentifiers, boolean qualifyNames) {
+		if (type instanceof Domain) {
+	        return DROP + SPACE + DOMAIN + SPACE + getName(type, quoteIdentifiers, qualifyNames);
+		}
+        return DROP + SPACE + TYPE + SPACE + getName(type, quoteIdentifiers, qualifyNames);
+	}
+
+	public String dropAssertion(Assertion assertion, boolean quoteIdentifiers, boolean qualifyNames) {
+        return DROP + SPACE + ASSERTION + SPACE + getName(assertion, quoteIdentifiers, qualifyNames);
+	}
+
+	public String createTable(BaseTable table, boolean quoteIdentifiers, boolean qualifyNames) {
+        StringBuffer statement = new StringBuffer();
+        boolean isTemp = table instanceof TemporaryTable;
+        
+        statement.append(CREATE).append(SPACE);
+        if (isTemp) {
+        	if (((TemporaryTable)table).isLocal()) {
+        		statement.append(LOCAL).append(SPACE);
+        	}
+        	else {
+        		statement.append(GLOBAL).append(SPACE);
+        	}
+        	statement.append(TEMPORARY).append(SPACE);
+        }
+        statement.append(TABLE).append(SPACE).append(getName(table, quoteIdentifiers, qualifyNames)).append(SPACE);
+        
+        statement.append(LEFT_PARENTHESIS).append(NEWLINE);
+        Iterator it = table.getColumns().iterator();
+        while(it.hasNext()) {
+            Column column = (Column) it.next();
+            statement.append(TAB).append(TAB).append(getColumnString(column, quoteIdentifiers));
+            if(it.hasNext()) {
+                statement.append(COMMA);                
+            }
+            statement.append(NEWLINE);                
+        }
+        statement.append(TAB).append(RIGHT_PARENTHESIS);
+        
+        if (isTemp) {
+        	statement.append(NEWLINE).append(TAB).append(ON_COMMIT).append(SPACE);
+        	if (((TemporaryTable)table).isDeleteOnCommit()) {
+        		statement.append(DELETE).append(SPACE);
+        	}
+        	else {
+        		statement.append(PRESERVE).append(SPACE);
+        	}
+        	statement.append(ROWS);
+        }
+        
+        return statement.toString();
+    }
+    
+    public String alterTableAddColumn(Column column,  boolean quoteIdentifiers, boolean qualifyNames) {
+    	Table table = column.getTable();
+    	if(table instanceof BaseTable) {
+	        String statement = ALTER + SPACE + TABLE + SPACE + getName(table, quoteIdentifiers, qualifyNames)
+	    		+ " ADD COLUMN " + getColumnString(column, quoteIdentifiers); //$NON-NLS-1$
+	        return statement;
+    	}
+    	return null;
+    }
+
+    public String createView(ViewTable view, boolean quoteIdentifiers, boolean qualifyNames) {
+        String viewDefinition = CREATE + SPACE;
+        viewDefinition += VIEW + SPACE + getName(view, quoteIdentifiers, qualifyNames) + SPACE;
+        
+        String columns = getViewColumnList(view);
+        if(columns != null) {
+            viewDefinition += LEFT_PARENTHESIS + columns + RIGHT_PARENTHESIS + SPACE;
+        }
+        // make sure the queryExpression exists
+        if(view.getQueryExpression()!=null){
+            viewDefinition += AS + NEWLINE;
+            viewDefinition += view.getQueryExpression().getSQL();
+        }
+        CheckType checkType = view.getCheckType();
+        if(checkType == CheckType.CASCADED_LITERAL) {
+            viewDefinition += NEWLINE + WITH + SPACE + CASCADED + SPACE + CHECK + SPACE + OPTION;
+        }
+        else if(checkType == CheckType.LOCAL_LITERAL) {
+            viewDefinition += NEWLINE + WITH + SPACE + LOCAL + SPACE + CHECK + SPACE + OPTION;
+        }
+        return viewDefinition;
+    }
+    
+    
+    public String createIndex(Index index, boolean quoteIdentifiers, boolean qualifyNames) {
+        String statement = CREATE + SPACE;
+        if(index.isUnique()) {
+            statement += UNIQUE + SPACE;
+        }
+        statement += INDEX + SPACE + getName(index, quoteIdentifiers, qualifyNames) + SPACE + ON + SPACE
+        	+ getName(index.getTable(), quoteIdentifiers, qualifyNames) + SPACE + LEFT_PARENTHESIS
+        	+ getIndexKeyColumns(index, quoteIdentifiers) + RIGHT_PARENTHESIS;
+        return statement;
+    }
+	
+    public String createTrigger(Trigger trigger, boolean quoteIdentifiers, boolean qualifyNames) {
+        String statement = CREATE + SPACE + TRIGGER + SPACE + getName(trigger, quoteIdentifiers, qualifyNames) + SPACE;
+
+        final ActionTimeType actionTime = trigger.getActionTime();
+        if(actionTime == ActionTimeType.AFTER_LITERAL) {
+            statement += AFTER;
+        }
+        else if(actionTime == ActionTimeType.BEFORE_LITERAL) {
+            statement += BEFORE;
+        }
+        else if(actionTime == ActionTimeType.INSTEADOF_LITERAL) {
+            statement += INSTEAD_OF;
+        }
+	    statement += SPACE;
+
+        if(trigger.isDeleteType()) {
+    	    statement += DELETE;
+    	}
+    	else if(trigger.isInsertType()) {
+    	    statement += INSERT;
+    	}
+    	else if(trigger.isUpdateType()) {
+    	    statement += UPDATE;
+    	    Collection updateColumns = trigger.getTriggerColumn();
+            if(!updateColumns.isEmpty()) {
+                statement += SPACE + OF + SPACE ;
+                Iterator it = updateColumns.iterator();
+                while(it.hasNext()) {
+                    Column column = (Column) it.next();
+                    statement += column.getName();
+                    if(it.hasNext()) {
+                        statement += COMMA + SPACE;
+                    }
+                }
+            }
+    	}
+    	
+        statement += SPACE + ON + SPACE + getName(trigger.getSubjectTable(), quoteIdentifiers, qualifyNames) + NEWLINE;
+
+        final String newRow = trigger.getNewRow();
+        final String oldRow = trigger.getOldRow();
+        final String newTable = trigger.getNewTable();
+        final String oldTable = trigger.getOldTable();
+
+        if(newRow != null && newRow.length() != 0) {
+            statement += REFERENCING + SPACE + NEW + SPACE + ROW + SPACE + AS + SPACE + newRow + NEWLINE;
+        }
+        if(oldRow != null && oldRow.length() != 0) {
+            statement += REFERENCING + SPACE + OLD + SPACE + ROW + SPACE + AS + SPACE + oldRow + NEWLINE;
+        }
+        if(newTable != null && newTable.length() != 0) {
+            statement += REFERENCING + SPACE + NEW + SPACE + TABLE + SPACE + AS + SPACE + newTable + NEWLINE;
+        }
+        if(oldTable != null && oldTable.length() != 0) {
+            statement += REFERENCING + SPACE + OLD + SPACE + TABLE + SPACE + AS + SPACE + oldTable + NEWLINE;
+        }
+
+        if(trigger.getActionGranularity() == ActionGranularityType.ROW_LITERAL) {
+            statement += FOR + SPACE + EACH + SPACE + ROW + NEWLINE;
+    	}
+        else {
+            statement += FOR + SPACE + EACH + SPACE + STATEMENT + NEWLINE;
+    	}
+
+        String triggerBody = "";
+        Iterator it = trigger.getActionStatement().iterator();
+        while(it.hasNext()) {
+            SQLStatement s = (SQLStatement) it.next();
+            triggerBody += s.getSQL();
+        }
+
+        if (triggerBody.equals("")) {
+	    	this.getEngineeringCallBack().writeMessage(MessageFormat.format(
+	    			GenericCatalogMessages.FE_TRIGGER_ACTION_EMPTY, new Object[] { getName(trigger, false, true)}));
+	    	return null;
+        }
+
+    	statement += triggerBody;
+
+        return statement;
+    }
+    
+    public String createProcedure(Procedure procedure,
+			boolean quoteIdentifiers, boolean qualifyNames) {
+		StringBuffer statement = new StringBuffer();
+
+		// CREATE PROCEDURE procedure_name
+		statement.append(CREATE).append(SPACE).append(PROCEDURE).append(SPACE)
+				.append(getName(procedure, quoteIdentifiers, qualifyNames))
+				.append(SPACE);
+
+		// parameters
+		statement.append(getParameterListClause(procedure,quoteIdentifiers));
+
+		// begin characteristics
+		// language
+		if (procedure.getLanguage() != null
+				&& procedure.getLanguage().length() > 0) {
+			statement.append(TAB).append(LANGUAGE).append(SPACE).append(
+					procedure.getLanguage()).append(NEWLINE);
+		}
+
+		// parameter style
+		if (procedure.getParameterStyle() != null
+				&& procedure.getParameterStyle().length() > 0) {
+			statement.append(TAB).append(PARAMETER_STYLE).append(SPACE).append(
+					procedure.getParameterStyle()).append(NEWLINE);
+		}
+
+		// determinism
+		if (procedure.isDeterministic()) {
+			statement.append(TAB).append(DETERMINISTIC).append(NEWLINE);
+		}
+		else {
+			statement.append(TAB).append(NOT_DETERMINISTIC).append(NEWLINE);
+		}
+
+		// SQL data access
+		if (procedure.getSqlDataAccess() != null) {
+			statement.append(TAB).append(
+					procedure.getSqlDataAccess().toString()).append(NEWLINE);
+		}
+
+		// null-call
+		// nothing to do
+
+		// transform group
+		// nothing to do
+
+		// dynamic result sets
+		if (procedure.getMaxResultSets() > 0) {
+			statement.append(TAB).append(DYNAMIC_RESULT_SETS).append(SPACE)
+					.append(procedure.getMaxResultSets()).append(NEWLINE);
+		}
+		// end characteristics
+
+		// body
+		if (procedure.getSource() != null) {
+			String body = procedure.getSource().getBody();
+			if (body != null && body.length() > 0) {
+				statement.append(body).append(NEWLINE);
+			}
+		}
+
+		return statement.toString();
+	}
+
+    public String createUserDefinedFunction(UserDefinedFunction function, boolean quoteIdentifiers, boolean qualifyNames) {
+		StringBuffer statement = new StringBuffer();
+
+		// CREATE FUNCTION function_name
+		statement.append(CREATE).append(SPACE).append(FUNCTION).append(SPACE)
+				.append(getName(function, quoteIdentifiers, qualifyNames))
+				.append(SPACE);
+
+		// parameters
+		statement.append(getParameterListClause(function,quoteIdentifiers));
+		
+		// returns
+		statement.append(getReturnsClause(function,quoteIdentifiers));
+
+		// begin characteristics
+		// language
+		if (function.getLanguage() != null
+				&& function.getLanguage().length() > 0) {
+			statement.append(TAB).append(LANGUAGE).append(SPACE).append(
+					function.getLanguage()).append(NEWLINE);
+		}
+
+		// parameter style
+		if (function.getParameterStyle() != null
+				&& function.getParameterStyle().length() > 0) {
+			statement.append(TAB).append(PARAMETER_STYLE).append(SPACE).append(
+					function.getParameterStyle()).append(NEWLINE);
+		}
+
+		// determinism
+		if (function.isDeterministic()) {
+			statement.append(TAB).append(DETERMINISTIC).append(NEWLINE);
+		}
+		else {
+			statement.append(TAB).append(NOT_DETERMINISTIC).append(NEWLINE);
+		}
+
+		// SQL data access
+		if (function.getSqlDataAccess() != null) {
+			statement.append(TAB).append(
+					function.getSqlDataAccess().toString()).append(NEWLINE);
+		}
+
+		// null-call
+		if (function.isNullCall()) {
+			statement.append(TAB).append(RETURNS_NULL_ON_NULL_INPUT).append(NEWLINE);
+		}
+		else {
+			statement.append(TAB).append(CALLED_ON_NULL_INPUT).append(NEWLINE);
+		}
+
+		// transform group
+		if (function.getTransformGroup() != null
+				&& function.getTransformGroup().length() > 0) {
+			statement.append(TAB).append(TRANSFORM_GROUP).append(SPACE).append(
+					function.getTransformGroup()).append(NEWLINE);
+		}
+
+		// dynamic result sets
+		// nothing to do
+		// end characteristics
+
+		// dispatch
+		if (function.isStatic()) {
+			statement.append(TAB).append(STATIC_DISPATCH).append(NEWLINE);
+		}
+
+		// body
+		if (function.getSource() != null) {
+			String body = function.getSource().getBody();
+			if (body != null && body.length() > 0) {
+				statement.append(body).append(NEWLINE);
+			}
+		}
+
+		return statement.toString();
+    }
+    
+    protected String getParameterListClause(Routine routine, boolean quoteIdentifiers) {
+    	StringBuffer statement = new StringBuffer();
+		statement.append(LEFT_PARENTHESIS).append(NEWLINE);
+		for (Iterator it = routine.getParameters().iterator(); it.hasNext();) {
+			Parameter param = (Parameter) it.next();
+			String name = param.getName();
+			ParameterMode mode = param.getMode();
+
+			// formatting
+			statement.append(TAB).append(TAB);
+
+			// mode (IN, INOUT, OUT)
+			if (mode != null) {
+				statement.append(mode.toString()).append(SPACE);
+			}
+
+			// name
+			if (name != null && name.length() > 0) {
+				statement.append(
+						quoteIdentifiers ? getQuotedIdentifierString(param)
+								: name).append(SPACE);
+			}
+
+			// type
+			statement.append(getDataTypeString(param, routine.getSchema()));
+
+			// locator
+			// TODO: anything?
+
+			if (it.hasNext()) {
+				// prepare for the next parameter
+				statement.append(COMMA);
+				statement.append(NEWLINE);
+			}
+		}
+		statement.append(RIGHT_PARENTHESIS).append(NEWLINE);
+		
+		return statement.toString();
+    }
+    
+    protected String getReturnsClause(Function function, boolean quoteIdentifiers) {
+    	StringBuffer statement = new StringBuffer();
+    	
+		statement.append(TAB).append(RETURNS).append(SPACE);
+		if (function.getReturnScalar() != null) {
+			statement.append(getDataTypeString(function.getReturnScalar(),
+					function.getSchema()));
+			if (function.getReturnCast() != null) {
+				statement.append(SPACE).append(CAST_FROM).append(
+						getDataTypeString(function.getReturnCast(), function
+								.getSchema()));
+			}
+		}
+		else if (function.getReturnTable() != null) {
+			statement.append(ROW).append(SPACE).append(LEFT_PARENTHESIS).append(NEWLINE);
+			for (Iterator it = function.getReturnTable().getColumns().iterator(); it.hasNext();) {
+				Column col = (Column) it.next();
+				String name = col.getName();
+
+				// formatting
+				statement.append(TAB).append(TAB);
+				
+				// name
+				if (name != null && name.length() > 0) {
+					statement.append(
+							quoteIdentifiers ? getQuotedIdentifierString(col)
+									: name).append(SPACE);
+				}
+				
+				// type
+				statement.append(getDataTypeString(col,function.getSchema()));
+				
+				if (it.hasNext()) {
+					// prepare for the next parameter
+					statement.append(COMMA);
+					statement.append(NEWLINE);
+				}
+			}
+			statement.append(TAB).append(RIGHT_PARENTHESIS);
+		}
+		statement.append(NEWLINE);
+		
+		return statement.toString();
+    }
+
+    public String createSchema(Schema schema, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		StringBuffer statement = new StringBuffer();
+
+		// CREATE SCHEMA schema_name
+		statement.append(CREATE).append(SPACE).append(SCHEMA).append(SPACE)
+				.append(getName(schema, quoteIdentifiers, qualifyNames));
+
+		// AUTHORIZATION
+		if (schema.getOwner() != null) {
+			statement.append(SPACE).append(AUTHORIZATION).append(SPACE).append(
+					getName(schema.getOwner(), quoteIdentifiers));
+		}
+
+		return statement.toString();
+	}
+
+    public String createUserDefinedType(UserDefinedType type, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		if (type instanceof StructuredUserDefinedType) {
+			return createStructuredUserDefinedType((StructuredUserDefinedType)type,quoteIdentifiers,qualifyNames);
+		}
+		else if (type instanceof Domain) {
+			return createDomain((Domain)type,quoteIdentifiers,qualifyNames);
+		}
+		else if (type instanceof DistinctUserDefinedType) {
+			return createDistinctUserDefinedType((DistinctUserDefinedType)type,quoteIdentifiers,qualifyNames);
+		}
+
+		StringBuffer statement = new StringBuffer();
+
+		// CREATE TYPE type_name
+		statement.append(CREATE).append(SPACE).append(TYPE).append(SPACE)
+				.append(getName(type, quoteIdentifiers, qualifyNames));
+
+		return statement.toString();
+	}
+    
+    protected String createStructuredUserDefinedType(StructuredUserDefinedType type, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		StringBuffer statement = new StringBuffer();
+
+		// CREATE TYPE type_name
+		statement.append(CREATE).append(SPACE).append(TYPE).append(SPACE)
+				.append(getName(type, quoteIdentifiers, qualifyNames)).append(NEWLINE);
+
+		// subtype
+		if (type.getSuper() != null) {
+			statement.append(TAB).append(UNDER).append(SPACE).append(getName(type.getSuper(),quoteIdentifiers,qualifyNames)).append(NEWLINE);
+		}
+		
+		statement.append(TAB).append(AS).append(SPACE).append(LEFT_PARENTHESIS).append(NEWLINE);
+		for (Iterator it = type.getAttributes().iterator(); it.hasNext();) {
+			AttributeDefinition attr = (AttributeDefinition)it.next();
+			statement.append(TAB).append(TAB).append(getAttributeString(attr,quoteIdentifiers));
+		}
+		statement.append(TAB).append(RIGHT_PARENTHESIS).append(NEWLINE);
+		
+		// instantiable
+		if (type.isInstantiable()) {
+			statement.append(TAB).append(INSTANTIABLE).append(NEWLINE);
+		}
+		else {
+			statement.append(TAB).append(NOT_INSTANTIABLE).append(NEWLINE);
+		}
+		
+		// finality
+		if (type.isFinal()) {
+			// should never be this
+			statement.append(TAB).append(FINAL).append(NEWLINE);
+		}
+		else {
+			statement.append(TAB).append(NOT_FINAL).append(NEWLINE);
+		}
+		
+		// reference type
+		// nothing to do
+		
+		// cast
+		// nothing to do
+		
+		// method list
+		for (Iterator methodIt = type.getMethods().iterator(); methodIt.hasNext(); ) {
+			Method method = (Method)methodIt.next();
+			
+			if (method.isOverriding()) {
+				statement.append(OVERRIDING).append(SPACE);
+			}
+
+			if (method.isStatic()) {
+				statement.append(STATIC);
+			}
+			else {
+				statement.append(INSTANCE);
+			}
+			statement.append(SPACE).append(getName(method,quoteIdentifiers,qualifyNames)).append(SPACE);
+			
+			// parameters
+			statement.append(getParameterListClause(method,quoteIdentifiers));
+			
+			// returns
+			statement.append(getReturnsClause(method,quoteIdentifiers));
+			
+			if (method.getSpecificName() != null && method.getSpecificName().length() > 0) {
+				statement.append(TAB).append(SPECIFIC).append(SPACE).append(getSpecificName(method,quoteIdentifiers,qualifyNames)).append(NEWLINE);
+			}
+
+			// begin characteristics
+			// language
+			if (method.getLanguage() != null
+					&& method.getLanguage().length() > 0) {
+				statement.append(TAB).append(LANGUAGE).append(SPACE).append(
+						method.getLanguage()).append(NEWLINE);
+			}
+
+			// parameter style
+			if (method.getParameterStyle() != null
+					&& method.getParameterStyle().length() > 0) {
+				statement.append(TAB).append(PARAMETER_STYLE).append(SPACE).append(
+						method.getParameterStyle()).append(NEWLINE);
+			}
+
+			// determinism
+			if (method.isDeterministic()) {
+				statement.append(TAB).append(DETERMINISTIC).append(NEWLINE);
+			}
+			else {
+				statement.append(TAB).append(NOT_DETERMINISTIC).append(NEWLINE);
+			}
+
+			// SQL data access
+			if (method.getSqlDataAccess() != null) {
+				statement.append(TAB).append(
+						method.getSqlDataAccess().toString()).append(NEWLINE);
+			}
+
+			// null-call
+			if (method.isNullCall()) {
+				statement.append(TAB).append(RETURNS_NULL_ON_NULL_INPUT).append(NEWLINE);
+			}
+			else {
+				statement.append(TAB).append(CALLED_ON_NULL_INPUT).append(NEWLINE);
+			}
+
+			// transform group
+			if (method.getTransformGroup() != null
+					&& method.getTransformGroup().length() > 0) {
+				statement.append(TAB).append(TRANSFORM_GROUP).append(SPACE).append(
+						method.getTransformGroup()).append(NEWLINE);
+			}
+			// end characteristics
+
+			if (methodIt.hasNext()) {
+				// prepare for the next parameter
+				statement.append(COMMA);
+				statement.append(NEWLINE);
+			}
+		}
+
+		return statement.toString();
+    }
+
+    protected String createDomain(Domain type, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		StringBuffer statement = new StringBuffer();
+
+		// CREATE DOMAIN type_name
+		statement.append(CREATE).append(SPACE).append(DOMAIN).append(SPACE)
+				.append(getName(type, quoteIdentifiers, qualifyNames)).append(
+						SPACE).append(AS).append(SPACE).append(
+						getDataTypeString(type));
+
+		if (type.getDefaultValue() != null) {
+			statement.append(SPACE).append(DEFAULT).append(SPACE).append(
+					type.getDefaultValue());
+		}
+		
+		for (Iterator it = type.getConstraint().iterator(); it.hasNext(); ) {
+			Object obj = it.next();
+			if (obj instanceof CheckConstraint) {
+				statement.append(NEWLINE).append(getCheckConstraintClause((CheckConstraint)obj, quoteIdentifiers));
+			}
+		}
+
+		return statement.toString();
+	}
+
+    protected String createDistinctUserDefinedType(
+			DistinctUserDefinedType type, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		StringBuffer statement = new StringBuffer();
+
+		// CREATE TYPE type_name
+		statement.append(CREATE).append(SPACE).append(TYPE).append(SPACE)
+				.append(getName(type, quoteIdentifiers, qualifyNames)).append(
+						SPACE).append(AS).append(SPACE).append(
+						getDataTypeString(type)).append(SPACE).append(FINAL);
+
+		return statement.toString();
+	}
+
+    public String createAssertion(Assertion assertion,
+			boolean quoteIdentifiers, boolean qualifyNames) {
+		String text = CREATE + SPACE + ASSERTION + SPACE
+				+ getName(assertion, quoteIdentifiers, qualifyNames) + SPACE
+				+ CHECK + SPACE + LEFT_PARENTHESIS
+				+ assertion.getSearchCondition().getSQL() + RIGHT_PARENTHESIS;
+		if (assertion.isDeferrable()) {
+			text += SPACE + getDeferrableClause(assertion);
+		}
+		return text;
+	}
+
+    public String addCheckConstraint(CheckConstraint constraint, boolean quoteIdentifiers, boolean qualifyNames) {
+        BaseTable table = constraint.getBaseTable();
+        String tableName = table.getName();
+        String schemaName = table.getSchema().getName();
+
+        if(quoteIdentifiers) {
+            tableName = this.getQuotedIdentifierString(table);
+            schemaName = this.getQuotedIdentifierString(table.getSchema());
+        }
+        if(qualifyNames) {
+            tableName = schemaName + DOT + tableName;
+        }
+    
+        return ALTER + SPACE + TABLE + SPACE + getName(constraint.getBaseTable(), quoteIdentifiers, qualifyNames)
+        	+ SPACE + this.getAddCheckConstraintClause(constraint, quoteIdentifiers);
+    }
+
+    public String addUniqueConstraint(UniqueConstraint constraint, boolean quoteIdentifiers, boolean qualifyNames) {
+        String statement = ALTER + SPACE + TABLE + SPACE + getName(constraint.getBaseTable(), quoteIdentifiers, qualifyNames) + SPACE;
+        statement += this.getAddUniqueConstraintClause(constraint, quoteIdentifiers);
+        
+        return statement;
+    }
+
+    public String addForeignKey(ForeignKey foreignKey, boolean quoteIdentifiers, boolean qualifyNames) {
+        UniqueConstraint uniqueConstraint = foreignKey.getUniqueConstraint();
+        Index index = foreignKey.getUniqueIndex();
+        Table parentTable = null;
+        String parentKey = null;
+        if(uniqueConstraint != null) {
+            parentTable = uniqueConstraint.getBaseTable();
+            parentKey = this.getKeyColumns(uniqueConstraint, quoteIdentifiers);
+        }
+        else if(index != null) {
+        	parentTable = index.getTable();
+            parentKey = this.getParentKeyColumns(index, quoteIdentifiers);
+        }
+        if(parentTable == null) {
+        	this.getEngineeringCallBack().writeMessage(MessageFormat.format(
+					GenericCatalogMessages.FE_PARENT_TABLLE_OR_KEY_DO_NOT_EXIST, new Object[] { foreignKey.getName()}));
+        	return null;
+        }
+
+        String statement = ALTER + SPACE + TABLE + SPACE + getName(foreignKey.getBaseTable(), quoteIdentifiers, qualifyNames)
+        	+ SPACE + ADD + SPACE + CONSTRAINT + SPACE + getName(foreignKey, quoteIdentifiers) + SPACE + FOREIGN_KEY 
+        	+ SPACE + LEFT_PARENTHESIS + this.getKeyColumns(foreignKey, quoteIdentifiers) + RIGHT_PARENTHESIS + NEWLINE;
+        statement += TAB + REFERENCES + SPACE + getName(parentTable, quoteIdentifiers, qualifyNames) + SPACE + LEFT_PARENTHESIS
+        	+ parentKey + RIGHT_PARENTHESIS;
+		
+        ReferentialActionType action = foreignKey.getOnDelete();
+        if(action != ReferentialActionType.NO_ACTION_LITERAL) {
+            statement += NEWLINE + TAB + ON + SPACE + DELETE + SPACE;            
+        }
+        statement += getReferentialAction(action);
+        
+        action = foreignKey.getOnUpdate();
+        if(action != ReferentialActionType.NO_ACTION_LITERAL) {
+            statement += NEWLINE + TAB + ON + SPACE + UPDATE + SPACE;            
+        }
+        statement += getReferentialAction(action);
+
+        if(foreignKey.isDeferrable()) {
+            statement += NEWLINE + TAB + getDeferrableClause(foreignKey);
+        }
+        return statement;
+    }
+
+    protected String getDeferrableClause(Constraint constraint) {
+        String clause = null;
+        if(constraint.isDeferrable()) {
+            clause = DEFERRABLE;
+            if(constraint.isInitiallyDeferred()) {
+                clause += SPACE + INITIALLY + SPACE + DEFERRED;
+            }
+        }
+        return clause;
+        
+    }
+    
+    protected String getReferentialAction(ReferentialActionType action) {
+        if(action == ReferentialActionType.CASCADE_LITERAL) {
+            return CASCADE;
+        }
+        else if(action == ReferentialActionType.RESTRICT_LITERAL) {
+            return RESTRICT;
+        }
+        else if(action == ReferentialActionType.SET_DEFAULT_LITERAL) {
+            return SET + SPACE + DEFAULT;
+        }
+        else if(action == ReferentialActionType.SET_NULL_LITERAL) {
+            return SET + SPACE + NULL;
+        }
+        return "";  //$NON-NLS-1$
+    }
+
+    protected String getViewColumnList(ViewTable view) {
+        String columns = null;
+        Iterator it = view.getColumns().iterator();
+        if(it.hasNext()) {
+            Column c = (Column) it.next();
+            columns = c.getName();
+        }
+        else {
+            return null;
+        }
+        
+        while(it.hasNext()) {
+            Column c = (Column) it.next();
+            columns += COMMA + SPACE + c.getName();
+        }
+        
+        return columns;
+        
+    }
+    
+    protected String getColumnString(Column column, boolean quoteIdentifiers) {
+        String columnName = column.getName();
+        if(quoteIdentifiers) {
+            columnName = this.getQuotedIdentifierString(column);
+        }
+        
+        String columnString = columnName + SPACE + getDataTypeString(column,column.getTable().getSchema());
+        String defaultValue = column.getDefaultValue();
+        if(defaultValue != null && defaultValue.trim().length()>0) {
+          columnString = columnString + SPACE + DEFAULT + SPACE + defaultValue;
+        }
+        
+        if(!column.isNullable()) {
+            columnString = columnString + SPACE + NOT + SPACE + NULL;
+        }
+        
+        return columnString;
+    }
+
+    protected String getAttributeString(AttributeDefinition attr, boolean quoteIdentifiers) {
+        String attrName = attr.getName();
+        if(quoteIdentifiers) {
+        	attrName = this.getQuotedIdentifierString(attr);
+        }
+        
+        StringBuffer attrString = new StringBuffer();
+        
+        // name
+        attrString.append(attrName).append(SPACE);
+        
+        // type
+        attrString.append(getDataTypeString(attr,((UserDefinedType)attr.eContainer()).getSchema())).append(SPACE);
+        
+        // scope
+        if (attr.isScopeChecked()) {
+        	attrString.append(REFERENCES_ARE_CHECKED);
+        }
+        else {
+        	attrString.append(REFERENCES_ARE_NOT_CHECKED);
+        }
+        if (attr.getScopeCheck() != null && attr.getScopeCheck() != ReferentialActionType.NO_ACTION_LITERAL) {
+        	attrString.append(SPACE).append(ON).append(SPACE).append(DELETE).append(SPACE);
+        	switch(attr.getScopeCheck().getValue()) {
+        	case ReferentialActionType.CASCADE:
+        		attrString.append(CASCADE);
+        		break;
+        	case ReferentialActionType.RESTRICT:
+        		attrString.append(RESTRICT);
+        		break;
+        	case ReferentialActionType.SET_NULL:
+        		attrString.append(SET).append(SPACE).append(NULL);
+        		break;
+        	case ReferentialActionType.SET_DEFAULT:
+        		attrString.append(SET).append(SPACE).append(DEFAULT);
+        		break;
+        	}
+        }
+        
+        // default
+        if(attr.getDefaultValue() != null) {
+          attrString.append(SPACE).append(DEFAULT).append(SPACE).append(attr.getDefaultValue());
+        }
+        
+        return attrString.toString();
+    }
+
+    protected String getAddUniqueConstraintClause(UniqueConstraint constraint, boolean quoteIdentifiers) {
+        String constraintName = getName(constraint, quoteIdentifiers);
+
+        String text =  ADD + SPACE + CONSTRAINT + SPACE + constraintName 
+        	+ SPACE + getUniqueConstraintType(constraint) + SPACE
+        	+ LEFT_PARENTHESIS + this.getKeyColumns(constraint, quoteIdentifiers) + RIGHT_PARENTHESIS;
+        
+        if(constraint.isDeferrable()) {
+            text += SPACE + getDeferrableClause(constraint);
+        }
+        return text;
+    }
+    
+    protected String getUniqueConstraintType(UniqueConstraint constraint) {
+        if(constraint instanceof PrimaryKey) {
+            return PRIMARY_KEY;
+        }
+        return UNIQUE;
+    }
+
+    protected String getAddCheckConstraintClause(CheckConstraint constraint, boolean quoteIdentifiers) {
+        return ADD + SPACE + getCheckConstraintClause(constraint,quoteIdentifiers);
+    }
+    
+    protected String getCheckConstraintClause(CheckConstraint constraint, boolean quoteIdentifiers) {
+        String constraintName = getName(constraint, quoteIdentifiers);
+
+        String text = CONSTRAINT + SPACE + constraintName + SPACE + CHECK
+        	+ SPACE + LEFT_PARENTHESIS + constraint.getSearchCondition().getSQL() + RIGHT_PARENTHESIS;
+        if(constraint.isDeferrable()) {
+            text += SPACE + getDeferrableClause(constraint);
+        }
+        return text;
+    }
+
+    protected String getKeyColumns(ReferenceConstraint constraint, boolean quoteIdentifiers) {
+        String columns = null;
+        Iterator it = constraint.getMembers().iterator();
+        if(it.hasNext()) {
+            Column c = (Column) it.next();
+            final String columnName;
+            if (quoteIdentifiers) {
+                columnName = getQuotedIdentifierString(c);
+            } else {
+            	columnName = c.getName();
+            }
+            
+            columns = columnName;
+        }
+        else {
+	    	this.getEngineeringCallBack().writeMessage(MessageFormat.format(
+					GenericCatalogMessages.FE_REFERENCE_CONSTAINT_HAS_NO_KEY, new Object[] { constraint.getName()}));
+            return null;
+        }
+        
+        while(it.hasNext()) {
+            Column c = (Column) it.next();
+            final String columnName;
+            if (quoteIdentifiers) {
+                columnName = getQuotedIdentifierString(c);
+            } else {
+            	columnName = c.getName();
+            }
+            columns += COMMA + SPACE + columnName;
+        }
+        
+        return columns;
+    }
+
+    protected String getIndexKeyColumns(Index index, boolean quoteIdentifiers) {
+        String columns;
+
+        Iterator it = index.getMembers().iterator();
+        if(it.hasNext()) {
+            IndexMember m = (IndexMember) it.next();
+            String columnName = m.getColumn().getName();
+            if (quoteIdentifiers) {
+                columnName = this.getQuotedIdentifierString(m.getColumn());
+            }
+            columns = columnName + SPACE + m.getIncrementType().getName();
+        }
+        else {
+	    	this.getEngineeringCallBack().writeMessage(MessageFormat.format(
+					GenericCatalogMessages.FE_INDEX_HAS_NO_MEMBER, new Object[] { getName(index,false,true)}));
+            return null;
+        }
+        
+        while(it.hasNext()) {
+            IndexMember m = (IndexMember) it.next();
+            String columnName = m.getColumn().getName();
+            if(quoteIdentifiers) {
+                columnName = this.getQuotedIdentifierString(m.getColumn());
+            }
+            columns += COMMA + SPACE;
+            columns += columnName + SPACE + m.getIncrementType().getName();
+        }
+        return columns;
+    }
+  
+    protected String getParentKeyColumns(Index index, boolean quoteIdentifiers) {
+        String columns;
+        Iterator it = index.getMembers().iterator();
+        if(it.hasNext()) {
+            IndexMember m = (IndexMember) it.next();
+            String columnName = m.getColumn().getName();
+            if(quoteIdentifiers) {
+                columnName = this.getQuotedIdentifierString(m.getColumn());
+            }
+            columns = columnName;
+        }
+        else {
+	    	this.getEngineeringCallBack().writeMessage(MessageFormat.format(
+					GenericCatalogMessages.FE_INDEX_HAS_NO_MEMBER, new Object[] { getName(index,false,true)}));
+            return null;
+        }
+        
+        while(it.hasNext()) {
+            IndexMember m = (IndexMember) it.next();
+            String columnName = m.getColumn().getName();
+            if (quoteIdentifiers) {
+                columnName = this.getQuotedIdentifierString(m.getColumn());
+            }
+            columns += COMMA + SPACE + columnName;
+        }
+        return columns;
+    }
+  
+    protected String getDataTypeString(TypedElement typedElement, Schema schema) {
+        SQLDataType containedType = typedElement.getContainedType();
+        if(containedType != null) {
+            if(containedType instanceof PredefinedDataType) {
+                EObject root = ContainmentServiceImpl.INSTANCE.getRootElement(typedElement);
+                if(root instanceof Database) {
+                    DatabaseDefinition def = DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition((Database) root);
+                    return def.getPredefinedDataTypeFormattedName((PredefinedDataType) containedType);
+                }
+            }
+        }
+        else {
+            UserDefinedType referencedType = typedElement.getReferencedType();
+            if(referencedType != null) {
+                if (referencedType.getSchema() != schema) {
+                	return this.getName(referencedType,false, true);
+                } else {
+                	return referencedType.getName();
+                }
+            }
+        }
+    	this.getEngineeringCallBack().writeMessage(MessageFormat.format(
+				GenericCatalogMessages.FE_ELEMENT_HAS_NO_TYPE, new Object[] { typedElement.getName()}));
+        return null;
+    }
+
+    protected String getDataTypeString(DistinctUserDefinedType typedElement) {
+		PredefinedDataType containedType = typedElement
+				.getPredefinedRepresentation();
+		if (containedType != null) {
+			EObject root = ContainmentServiceImpl.INSTANCE
+					.getRootElement(typedElement);
+			if (root instanceof Database) {
+				DatabaseDefinition def = DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition((Database) root);
+				return def.getPredefinedDataTypeFormattedName((PredefinedDataType) containedType);
+			}
+		}
+		return null;
+	}
+
+    protected String getName(TableConstraint constraint, boolean quoteIdentifiers) {
+        String name = constraint.getName();
+
+        if(quoteIdentifiers) {
+            name = this.getQuotedIdentifierString(constraint);
+        }
+    
+        return name;
+    }
+
+    protected String getName(Assertion assertion, boolean quoteIdentifiers, boolean qualifyNames) {
+        String name = assertion.getName();
+        String schemaName = assertion.getSchema().getName();
+    
+        if(quoteIdentifiers) {
+            name = this.getQuotedIdentifierString(assertion);
+            schemaName  = this.getQuotedIdentifierString(assertion.getSchema());
+        }
+        if(qualifyNames) {
+            name = schemaName + DOT + name;
+        }
+		
+        return name;
+    }
+
+    protected String getName(Trigger trigger, boolean quoteIdentifiers, boolean qualifyNames) {
+        String name = trigger.getName();
+        String schemaName = trigger.getSchema().getName();
+    
+        if(quoteIdentifiers) {
+            name = this.getQuotedIdentifierString(trigger);
+            schemaName  = this.getQuotedIdentifierString(trigger.getSchema());
+        }
+        if(qualifyNames) {
+            name = schemaName + DOT + name;
+        }
+		
+        return name;
+    }
+
+    protected String getName(Routine routine, boolean quoteIdentifiers, boolean qualifyNames) {
+        String name = routine.getName();
+        String schemaName = routine.getSchema().getName();
+
+        if(quoteIdentifiers) {
+            name = this.getQuotedIdentifierString(routine);
+            schemaName  = this.getQuotedIdentifierString(routine.getSchema());
+        }
+        if(qualifyNames) {
+            name = schemaName + DOT + name;
+        }
+
+        return name;
+    }
+
+    protected String getSpecificName(Method method, boolean quoteIdentifiers, boolean qualifyNames) {
+        String name = method.getSpecificName();
+
+        if(quoteIdentifiers) {
+            name = this.getQuotedIdentifierString(method);
+        }
+
+        return name;
+    }
+
+    protected String getName(Index index, boolean quoteIdentifiers, boolean qualifyNames) {
+        String indexName = index.getName();
+        String schemaName = index.getSchema().getName();
+
+        if(quoteIdentifiers) {
+            indexName = this.getQuotedIdentifierString(index);
+            schemaName = this.getQuotedIdentifierString(index.getSchema());
+        }
+
+        if(qualifyNames) {
+            indexName = schemaName + DOT + indexName;
+	    }
+    
+        return indexName;
+    }
+
+    protected String getName(Table table, boolean quoteIdentifiers, boolean qualifyNames) {
+        String tableName = table.getName();
+        String schemaName = table.getSchema().getName();
+
+        if(quoteIdentifiers) {
+            tableName = this.getQuotedIdentifierString(table);
+            schemaName = this.getQuotedIdentifierString(table.getSchema());
+        }
+
+        if(qualifyNames) {
+            tableName = schemaName + DOT + tableName;
+        }
+    
+        return tableName;
+    }
+
+    protected String getName(Sequence sequence, boolean quoteIdentifiers, boolean qualifyNames) {
+        String sequenceName = sequence.getName();
+        String schemaName = sequence.getSchema().getName();
+
+        if(quoteIdentifiers) {
+            sequenceName = this.getQuotedIdentifierString(sequence);
+            schemaName = this.getQuotedIdentifierString(sequence.getSchema());
+        }
+
+        if(qualifyNames) {
+            sequenceName = schemaName + DOT + sequenceName;
+        }
+    
+        return sequenceName;
+    }
+    
+    protected String getName(UserDefinedType type, boolean quoteIdentifiers, boolean qualifyNames) {
+        String typeName = type.getName();
+        String schemaName = type.getSchema().getName();
+
+        if(quoteIdentifiers) {
+            typeName = this.getQuotedIdentifierString(type);
+            schemaName = this.getQuotedIdentifierString(type.getSchema());
+        }
+
+        if(qualifyNames) {
+            typeName = schemaName + DOT + typeName;
+        }
+    
+        return typeName;
+    }
+    
+    protected String getName(Schema schema, boolean quoteIdentifiers, boolean qualifyNames) {
+        String schemaName = schema.getName();
+
+        if(quoteIdentifiers) {
+            schemaName = this.getQuotedIdentifierString(schema);
+        }
+
+        if(qualifyNames) {
+        	// TODO: need to accommodate catalogs
+        }
+    
+        return schemaName;
+    }
+    
+    protected String getName(AuthorizationIdentifier authID, boolean quoteIdentifiers) {
+        String authIDName = authID.getName();
+
+        if(quoteIdentifiers) {
+        	authIDName = this.getQuotedIdentifierString(authID);
+        }
+
+        return authIDName;
+    }
+    
+    protected DatabaseDefinition getDatabaseDefinition(EObject object) {
+		EObject root = ContainmentServiceImpl.INSTANCE.getRootElement(object);
+		if (root instanceof Database) {
+			return DatabaseDefinitionRegistryImpl.INSTANCE
+					.getDefinition((Database) root);
+		}
+		return null;
+	}
+    
+    protected String getQuotedIdentifierString(SQLObject object) {
+		DatabaseDefinition dbDef = getDatabaseDefinition(object);
+		if (dbDef == null) {
+			return getDoubleQuotedString(object.getName());
+		}
+
+		String quote = dbDef.getIdentifierQuoteString();
+		if (quote == null || quote.length() == 0) 
+			quote = "\""; //$NON-NLS-1$
+		if (quote.equals("\\\"")) // workaround for BZ 224853
+			quote = "\""; //$NON-NLS-1$
+			
+		StringTokenizer tokenizer = new StringTokenizer(object.getName(), quote);
+		String result = null;
+		if (tokenizer.countTokens() > 1) {
+			if (tokenizer.hasMoreTokens()) {
+				result = tokenizer.nextToken();
+			}
+			while (tokenizer.hasMoreTokens()) {
+				result = result + quote + quote + tokenizer.nextToken();
+			}
+		}
+		else {
+			if (tokenizer.hasMoreTokens()) {
+				result = tokenizer.nextToken();
+			}
+		}
+		return quote + result + quote;
+	}
+
+    protected String getSingleQuotedString(String orignal) {
+  	    StringTokenizer tokenizer = new StringTokenizer(orignal, SINGLE_QUOTE);
+        String result = tokenizer.nextToken();
+        while(tokenizer.hasMoreTokens()) {
+            result =  result + SINGLE_QUOTE + SINGLE_QUOTE + tokenizer.nextToken();
+        }
+        return SINGLE_QUOTE + result + SINGLE_QUOTE;
+    }
+  
+    protected String getDoubleQuotedString(String orignal) {
+        StringTokenizer tokenizer = new StringTokenizer(orignal, DOUBLE_QUOTE);
+        String result = null;
+        if(tokenizer.countTokens () > 1) {
+            if(tokenizer.hasMoreTokens()) {
+                result = tokenizer.nextToken();
+            }
+            while (tokenizer.hasMoreTokens()) {
+                result =  result + DOUBLE_QUOTE + DOUBLE_QUOTE + tokenizer.nextToken();
+            }
+        }
+        else {
+            if(tokenizer.hasMoreTokens()) {
+                result = tokenizer.nextToken();
+            }
+        }
+        return DOUBLE_QUOTE + result + DOUBLE_QUOTE;
+    }
+
+    public boolean isImplicitConstraint(TableConstraint constraint) {
+    	return !constraint.isEnforced();
+    }
+
+    private IEngineeringCallBack getDummyEngineeringCallBack(){
+    	if (this.dummyCallback == null) this.dummyCallback = new dummyEngineeringCallBack();
+    	return dummyCallback;
+    }
+
+    private class dummyEngineeringCallBack implements IEngineeringCallBack {
+    	public String[] getMessages(){
+    		return new String[]{};
+    	}
+    	
+    	public void writeMessage(String message) {
+    	}
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/fe/GenericDdlGenerator.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/fe/GenericDdlGenerator.java
new file mode 100644
index 0000000..8290304
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/fe/GenericDdlGenerator.java
@@ -0,0 +1,617 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/package org.eclipse.datatools.connectivity.sqm.core.rte.fe;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.ResourceBundle;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentServiceImpl;
+import org.eclipse.datatools.connectivity.sqm.core.definition.EngineeringOptionID;
+import org.eclipse.datatools.connectivity.sqm.core.rte.DDLGenerator;
+import org.eclipse.datatools.connectivity.sqm.core.rte.EngineeringOption;
+import org.eclipse.datatools.connectivity.sqm.core.rte.IEngineeringCallBack;
+import org.eclipse.datatools.connectivity.sqm.internal.core.rte.EngineeringOptionCategory;
+import org.eclipse.datatools.connectivity.sqm.internal.core.rte.EngineeringOptionCategoryID;
+import org.eclipse.datatools.connectivity.sqm.internal.core.rte.fe.GenericDdlGenerationOptions;
+import org.eclipse.datatools.modelbase.sql.constraints.Assertion;
+import org.eclipse.datatools.modelbase.sql.constraints.CheckConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.UniqueConstraint;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.datatools.modelbase.sql.routines.UserDefinedFunction;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.schema.Sequence;
+import org.eclipse.datatools.modelbase.sql.tables.PersistentTable;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;
+
+public class GenericDdlGenerator implements DDLGenerator {
+	public GenericDdlGenerator() {
+		this.builder = new GenericDdlBuilder();
+	}
+
+	public String[] generateDDL(SQLObject[] elements, IProgressMonitor progressMonitor){
+		return this.generateDDL(elements, progressMonitor, null);
+	}
+
+    public String[] createSQLObjects(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor){
+    	return this.createSQLObjects(elements, quoteIdentifiers, qualifyNames, progressMonitor,null);
+    }
+    
+    public String[] dropSQLObjects(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor){
+    	return this.dropSQLObjects(elements, quoteIdentifiers, qualifyNames, progressMonitor,null);
+    }
+
+    public String[] generateDDL(SQLObject[] elements, IProgressMonitor progressMonitor,IEngineeringCallBack callback) {
+    	this.builder.setEngineeringCallBack(callback);
+    	String[] statements = new String[0];
+
+    	EngineeringOption[] options = this.getSelectedOptions(elements);
+
+    	if (this.generateCreateStatement(options)) {
+    			statements = this.createSQLObjects(elements, this.generateQuotedIdentifiers(options),
+    					this.generateFullyQualifiedNames(options), progressMonitor);
+    	}
+        if(this.generateDropStatement(options)) {
+            String[] drop = this.dropSQLObjects(elements, this.generateQuotedIdentifiers(options),
+            		this.generateFullyQualifiedNames(options), progressMonitor);
+            String[] temp = statements;
+            statements = new String[temp.length + drop.length];
+            for(int i=0; i<drop.length; ++i) {
+                statements[i] = drop[i];
+            }
+            for(int i=0; i<temp.length; ++i) {
+                statements[i+drop.length] = temp[i];
+            }
+            
+        }
+        return statements;
+    }
+
+    public String[] createSQLObjects(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor ,IEngineeringCallBack callback)
+	{
+    	this.builder.setEngineeringCallBack(callback);
+        String[] statements = this.createStatements(elements, quoteIdentifiers,
+        		qualifyNames, progressMonitor, 100);
+        return statements;
+    }
+
+    public String[] dropSQLObjects(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor ,IEngineeringCallBack callback)
+    {
+    	this.builder.setEngineeringCallBack(callback);
+        String[] statements = this.dropStatements(elements, quoteIdentifiers,
+        		qualifyNames, progressMonitor, 100);
+        return statements;
+    }
+    
+    protected String[] createStatements(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor, int task) {
+        GenericDdlScript script = new GenericDdlScript();
+        EngineeringOption[] options = this.getSelectedOptions(elements);        
+
+        Iterator it = this.getAllContainedDisplayableElementSet(elements).iterator();
+        while(it.hasNext()) {
+            Object o = it.next();
+            if(o instanceof PersistentTable) {
+            	if (!this.generateTables(options)) continue;
+                String statement = builder.createTable((PersistentTable) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCreateTableStatement(statement);
+            }
+            else if(o instanceof ViewTable) {
+            	if (!this.generateViews(options)) continue;
+                String statement = builder.createView((ViewTable) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCreateViewStatement(statement);
+            }
+            else if(o instanceof Trigger) {
+            	if (!this.generateTriggers(options)) continue;
+                String statement = builder.createTrigger((Trigger) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCreateTriggerStatement(statement);
+            }
+            else if(o instanceof CheckConstraint) {
+            	if (!this.generateCKConstraints(options)) continue;
+                String statement = builder.addCheckConstraint((CheckConstraint) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addAlterTableAddConstraintStatement(statement);
+            }
+            else if(o instanceof UniqueConstraint) {
+            	if (!this.generatePKConstraints(options) || builder.isImplicitConstraint((UniqueConstraint)o)) continue;
+                String statement = builder.addUniqueConstraint((UniqueConstraint) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addAlterTableAddConstraintStatement(statement);
+            }
+            else if(o instanceof ForeignKey) {
+            	if (!this.generateFKConstraints(options) || builder.isImplicitConstraint((ForeignKey)o)) continue;
+                String statement = builder.addForeignKey((ForeignKey) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addAlterTableAddForeignKeyStatement(statement);
+            }
+            else if(o instanceof Index) {
+            	if (!this.generateIndexes(options)) continue;
+                String statement = builder.createIndex((Index) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCreateIndexStatement(statement);
+            }
+            else if(o instanceof Procedure) {
+            	if (!this.generateStoredProcedures(options)) continue;
+                String statement = builder.createProcedure((Procedure) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCreateStoredProcedureStatement(statement);
+            }
+            else if(o instanceof UserDefinedFunction) {
+            	if (!this.generateFunctions(options)) continue;
+                String statement = builder.createUserDefinedFunction((UserDefinedFunction) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCreateUserDefinedFunctionStatement(statement);
+            }
+            else if(o instanceof Schema) {
+            	if (!this.generateSchemas(options)) continue;
+                String statement = builder.createSchema((Schema) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCreateSchemaStatement(statement);
+            }
+            else if(o instanceof UserDefinedType) {
+            	if (!this.generateUserDefinedTypes(options)) continue;
+                String statement = builder.createUserDefinedType((UserDefinedType) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCreateUserDefinedTypeStatement(statement);
+            }
+            else if(o instanceof Assertion) {
+            	if (!this.generateAssertions(options)) continue;
+                String statement = builder.createAssertion((Assertion) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCreateAssertionStatement(statement);
+            }
+        }
+        return script.getStatements();
+    }
+    
+    protected String[] dropStatements(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor, int task) {
+        GenericDdlScript script = new GenericDdlScript();
+        
+        EngineeringOption[] options = this.getSelectedOptions(elements);        
+
+        Iterator it = this.getAllContainedDisplayableElementSet(elements).iterator();
+        while(it.hasNext()) {
+            Object o = it.next();
+            if(o instanceof PersistentTable) {
+            	if (!this.generateTables(options)) continue;
+                String statement = builder.dropTable((PersistentTable) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addDropTableStatement(statement);
+            }
+            else if(o instanceof ViewTable) {
+            	if (!this.generateViews(options)) continue;
+                String statement = builder.dropView((ViewTable) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addDropViewStatement(statement);
+            }
+            else if(o instanceof Trigger) {
+            	if (!this.generateTriggers(options)) continue;
+                String statement = builder.dropTrigger((Trigger) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addDropTriggerStatement(statement);
+            }
+            else if(o instanceof CheckConstraint) {
+            	if (!this.generateCKConstraints(options)) continue;
+                String statement = builder.dropTableConstraint((CheckConstraint) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addAlterTableDropConstraintStatement(statement);
+            }
+            else if(o instanceof UniqueConstraint) {
+            	if (!this.generatePKConstraints(options) || builder.isImplicitConstraint((UniqueConstraint)o)) continue;
+                String statement = builder.dropTableConstraint((UniqueConstraint) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addAlterTableDropConstraintStatement(statement);
+            }
+            else if(o instanceof ForeignKey) {
+            	if (!this.generateFKConstraints(options) || builder.isImplicitConstraint((ForeignKey)o)) continue;
+                String statement = builder.dropTableConstraint((ForeignKey) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addAlterTableDropForeignKeyStatement(statement);
+            }
+            else if(o instanceof Index) {
+            	if (!this.generateIndexes(options)) continue;
+                String statement = builder.dropIndex((Index) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addDropIndexStatement(statement);
+            }
+            else if(o instanceof Procedure) {
+            	if (!this.generateStoredProcedures(options)) continue;
+                String statement = builder.dropProcedure((Procedure) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addDropStoredProcedureStatement(statement);
+            }
+            else if(o instanceof UserDefinedFunction) {
+            	if (!this.generateFunctions(options)) continue;
+                String statement = builder.dropFunction((UserDefinedFunction) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addDropUserDefinedFunctionStatement(statement);
+            }
+            else if(o instanceof Schema) {
+            	if (!this.generateSchemas(options)) continue;
+                String statement = builder.dropSchema((Schema) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addDropSchemaStatement(statement);
+            }
+            else if(o instanceof UserDefinedType) {
+            	if (!this.generateUserDefinedTypes(options)) continue;
+                String statement = builder.dropUserDefinedType((UserDefinedType) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addDropUserDefinedTypeStatement(statement);
+            }
+            else if(o instanceof Assertion) {
+            	if (!this.generateAssertions(options)) continue;
+                String statement = builder.dropAssertion((Assertion) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addDropAssertionStatement(statement);
+            }
+        }
+        return script.getStatements();
+    }
+    
+    public EngineeringOptionCategory[] getOptionCategories() {
+        if(this.categories == null) {
+            this.categories = GenericDdlGenerationOptions.createDDLGenerationOptionCategories();
+        }
+        return this.categories;
+    }
+    
+    
+    public EngineeringOption[] getOptions(SQLObject[] elements) {
+        return this.calculateOptions(elements);
+    }
+    
+    
+    public EngineeringOption[] getSelectedOptions(SQLObject[] elements) {
+        if (options == null)
+             this.getOptions(elements);
+        return options;
+    }
+
+    
+    public boolean generateDropStatement(EngineeringOption[] options) {
+        return getOptionValueByID(EngineeringOptionID.GENERATE_DROP_STATEMENTS, options);
+    }
+    
+    public boolean generateCreateStatement(EngineeringOption[] options) {
+        return getOptionValueByID(EngineeringOptionID.GENERATE_CREATE_STATEMENTS, options);
+    }
+
+    public boolean generateCommentStatement(EngineeringOption[] options) {
+        return getOptionValueByID(EngineeringOptionID.GENERATE_COMMENTS, options);
+    }
+
+    public boolean generateDatabase(EngineeringOption[] options) {
+        return getOptionValueByID(EngineeringOptionID.GENERATE_DATABASE, options);
+    }
+    
+    public boolean generateSchemas(EngineeringOption[] options) {
+        return getOptionValueByID(EngineeringOptionID.GENERATE_SCHEMAS, options);
+    }
+
+    public boolean generateQuotedIdentifiers(EngineeringOption[] options) {
+        return getOptionValueByID(EngineeringOptionID.GENERATE_QUOTED_IDENTIFIER, options);
+    }
+
+    public boolean generateFullyQualifiedNames(EngineeringOption[] options) {
+        return getOptionValueByID(EngineeringOptionID.GENERATE_FULLY_QUALIFIED_NAME, options);
+    }
+
+    public boolean generateTables(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_TABLES, options);
+    }
+    
+    public boolean generateIndexes(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_INDICES, options);
+    }
+    
+    public boolean generateStoredProcedures(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_STOREDPROCEDURES, options);
+    }
+
+    public boolean generateViews(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_VIEWS, options);
+    }
+
+    public boolean generateTriggers(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_TRIGGERS, options);
+    }
+
+    public boolean generateSequences(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_SEQUENCES, options);
+    }
+    
+    public boolean generateFunctions(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_FUNCTIONS, options);
+    }
+    
+    public boolean generateUserDefinedTypes(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_USER_DEFINED_TYPE, options);
+    }
+
+    public boolean generateCKConstraints(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_CK_CONSTRAINTS, options);
+    }
+    
+    public boolean generatePKConstraints(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_PK_CONSTRAINTS, options);
+    }
+    
+    public boolean generateFKConstraints(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_FK_CONSTRAINTS, options);
+    }
+    
+    public boolean generateAssertions(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_ASSERTIONS, options);
+    }
+    
+    private boolean getOptionValueByID(String optionID, EngineeringOption[] options){
+    	return EngineeringOptionID.getOptionValueByID(optionID, options);
+    }
+    
+	protected Set getAllContainedDisplayableElementSet(SQLObject[] elements) {
+        Set s = new HashSet();
+        for(int i=0; i<elements.length; ++i) {
+            s.add(elements[i]);
+            s.addAll(ContainmentServiceImpl.INSTANCE.getAllContainedDisplayableElements(elements[i]));
+        }
+        return s;
+    }
+
+    private EngineeringOption[] calculateOptions(SQLObject[] elements) {
+    	EngineeringOptionCategory[] categories_new = this.getOptionCategories();
+            
+    	EngineeringOptionCategory general_options =null;
+    	EngineeringOptionCategory additional_element =null;
+        for (int i = 0; i < categories_new.length; i++) {
+          if (categories_new[i].getId().equals(EngineeringOptionCategoryID.GENERATE_OPTIONS)){
+              general_options = categories_new[i];
+          } else if (categories_new[i].getId().equals(EngineeringOptionCategoryID.GENERATE_ELEMENTS)){
+              additional_element = categories_new[i];
+          }
+        }           
+        this.options = this.getOptionDependency(elements, general_options, additional_element);
+        return this.options;
+    }
+
+    
+   private EngineeringOption[] getOptionDependency (SQLObject[] elements,EngineeringOptionCategory general_options, EngineeringOptionCategory additional_element){
+    	Set sOptions = new LinkedHashSet();
+
+    	sOptions.add(EngineeringOptionID.GENERATE_FULLY_QUALIFIED_NAME);
+    	sOptions.add(EngineeringOptionID.GENERATE_QUOTED_IDENTIFIER);
+    	sOptions.add(EngineeringOptionID.GENERATE_DROP_STATEMENTS);
+    	sOptions.add(EngineeringOptionID.GENERATE_CREATE_STATEMENTS);
+    	sOptions.add(EngineeringOptionID.GENERATE_COMMENTS);
+    	sOptions.addAll(this.getAllContainedDisplayableElementSetDepedency(elements));
+
+        int idx = 0, size = 0;
+        EngineeringOption[] options = new EngineeringOption[sOptions.size()];
+        int i = 0;
+        for (Iterator it=sOptions.iterator(); it.hasNext(); i++) {
+            options[i] = this.getEngineeringOption((String)it.next(), general_options, additional_element);
+            if (options[i] != null && options[i].getCategory().getId().equals(EngineeringOptionCategoryID.GENERATE_ELEMENTS)) {
+            	idx = i;
+            	size++;
+            }
+        }
+        if (size == 1) {
+        	EngineeringOption option = options[idx];
+        	option.setBoolean(true);
+        }
+        return options;
+    }
+    
+    
+    protected  EngineeringOption getEngineeringOption(String id, EngineeringOptionCategory general_options, EngineeringOptionCategory additional_element)
+    {
+        ResourceBundle resource = ResourceBundle.getBundle("org.eclipse.datatools.connectivity.sqm.internal.core.rte.fe.GenericDdlGeneration"); //$NON-NLS-1$
+
+        try {
+            if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_FULLY_QUALIFIED_NAME))
+                return new EngineeringOption(id,resource.getString("GENERATE_FULLY_QUALIFIED_NAME"), resource.getString("GENERATE_FULLY_QUALIFIED_NAME_DES"), false,general_options); //$NON-NLS-1$ //$NON-NLS-2$
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_QUOTED_IDENTIFIER))
+                return new EngineeringOption(id,resource.getString("GENERATE_QUOTED_IDENTIFIER"), resource.getString("GENERATE_QUOTED_IDENTIFIER_DES"),false,general_options); //$NON-NLS-1$ //$NON-NLS-2$
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_DROP_STATEMENTS))
+                return new EngineeringOption(id,resource.getString("GENERATE_DROP_STATEMENTS"), resource.getString("GENERATE_DROP_STATEMENTS_DES"),false,general_options); //$NON-NLS-1$ //$NON-NLS-2$
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_CREATE_STATEMENTS))
+                return new EngineeringOption(id,resource.getString("GENERATE_CREATE_STATEMENTS"), resource.getString("GENERATE_CREATE_STATEMENTS_DES"),true,general_options); //$NON-NLS-1$ //$NON-NLS-2$
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_COMMENTS))
+                return new EngineeringOption(id,resource.getString("GENERATE_COMMENTS"), resource.getString("GENERATE_COMMENTS_DES"),true,general_options); //$NON-NLS-1$ //$NON-NLS-2$
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_SCHEMAS))
+                return new EngineeringOption(id,resource.getString("GENERATE_SCHEMAS"), resource.getString("GENERATE_SCHEMAS_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_TABLES))
+                return new EngineeringOption(id,resource.getString("GENERATE_TABLES"), resource.getString("GENERATE_TABLES_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_PK_CONSTRAINTS))
+                return new EngineeringOption(id,resource.getString("GENERATE_PK_CONSTRAINTS"), resource.getString("GENERATE_PK_CONSTRAINTS_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_CK_CONSTRAINTS))
+                return new EngineeringOption(id,resource.getString("GENERATE_CK_CONSTRAINTS"), resource.getString("GENERATE_CK_CONSTRAINTS_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_FK_CONSTRAINTS))
+                return new EngineeringOption(id,resource.getString("GENERATE_FK_CONSTRAINTS"), resource.getString("GENERATE_FK_CONSTRAINTS_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_INDICES))
+                return new EngineeringOption(id,resource.getString("GENERATE_INDEX"), resource.getString("GENERATE_INDEX_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_STOREDPROCEDURES))
+                return new EngineeringOption(id,resource.getString("GENERATE_STOREDPROCEDURE"), resource.getString("GENERATE_STOREDPROCEDURE_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_FUNCTIONS))
+                return new EngineeringOption(id,resource.getString("GENERATE_FUNCTION"), resource.getString("GENERATE_FUNCTION_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_VIEWS))
+                return new EngineeringOption(id,resource.getString("GENERATE_VIEW"), resource.getString("GENERATE_VIEW_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_TRIGGERS))
+                return new EngineeringOption(id,resource.getString("GENERATE_TIGGER"), resource.getString("GENERATE_TIGGER_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_SEQUENCES))
+                return new EngineeringOption(id,resource.getString("GENERATE_SEQUENCE"), resource.getString("GENERATE_SEQUENCE_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_USER_DEFINED_TYPE))
+                return new EngineeringOption(id,resource.getString("GENERATE_USER_DEFINED_TYPE"), resource.getString("GENERATE_USER_DEFINED_TYPE_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_ASSERTIONS))
+                return new EngineeringOption(id,resource.getString("GENERATE_ASSERTIONS"), resource.getString("GENERATE_GENERATE_ASSERTION_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+        } catch (Exception e) {
+            //The resource was not found
+        	e.printStackTrace();
+        }
+        return null;
+    }
+
+    
+    protected Set getAllContainedDisplayableElementSetDepedency(SQLObject[] elements) {
+        SingletonOptionDependency sod = SingletonOptionDependency.getSingletonObject();
+        
+        Set s = new TreeSet();
+        for(int i=0; i<elements.length; ++i) {
+            Class key = null;
+            if(elements[i] instanceof Database) {
+                key = Database.class;
+            } else if(elements[i] instanceof Schema) {
+                key = Schema.class;
+            } else if (elements[i] instanceof PersistentTable) {
+                 key = Table.class;
+            } else if (elements[i] instanceof Index) {
+                key = Index.class;
+            } else if (elements[i] instanceof Procedure) {
+                key = Procedure.class;
+            } else if (elements[i] instanceof UserDefinedFunction) {
+                key = UserDefinedFunction.class;
+            } else if (elements[i] instanceof ViewTable) {
+                key = ViewTable.class;
+            } else if (elements[i] instanceof Trigger) {
+                key = Trigger.class;
+            } else if (elements[i] instanceof Sequence) {
+                key = Sequence.class;
+            } else if (elements[i] instanceof UserDefinedType) {
+                key = UserDefinedType.class;
+            } else if (elements[i] instanceof UniqueConstraint) {
+                key = UniqueConstraint.class;
+            } else if(elements[i] instanceof CheckConstraint) {
+                key = CheckConstraint.class;
+            } else if(elements[i] instanceof ForeignKey) {
+               key = ForeignKey.class;
+            }
+
+            try {
+                int mask = sod.getMask(key).intValue();
+                GenericDdlGenerator.this.populateOptions(s, mask);
+            } catch (Exception e) {
+                System.err.println("Missing definition for: " + elements[i].getClass().toString());
+                e.printStackTrace();
+            }
+        }
+        return s;
+    }
+    
+    
+    protected void populateOptions(Set s, int mask) {
+        if ((mask & EngineeringOptionID.DATABASE) == EngineeringOptionID.DATABASE)
+            s.add(EngineeringOptionID.GENERATE_DATABASE);
+        if ((mask & EngineeringOptionID.TABLE) == EngineeringOptionID.TABLE)
+            s.add(EngineeringOptionID.GENERATE_TABLES);
+        if ((mask & EngineeringOptionID.INDEX) == EngineeringOptionID.INDEX)
+            s.add(EngineeringOptionID.GENERATE_INDICES);
+        if ((mask & EngineeringOptionID.PROCEDURE) == EngineeringOptionID.PROCEDURE)
+            s.add(EngineeringOptionID.GENERATE_STOREDPROCEDURES);
+        if ((mask & EngineeringOptionID.USER_DEFINED_FUNCTION) == EngineeringOptionID.USER_DEFINED_FUNCTION)
+            s.add(EngineeringOptionID.GENERATE_FUNCTIONS);
+        if ((mask & EngineeringOptionID.VIEW) == EngineeringOptionID.VIEW)
+            s.add(EngineeringOptionID.GENERATE_VIEWS);
+        if ((mask & EngineeringOptionID.TRIGGER) == EngineeringOptionID.TRIGGER)
+            s.add(EngineeringOptionID.GENERATE_TRIGGERS);
+        if ((mask & EngineeringOptionID.SEQUENCE) == EngineeringOptionID.SEQUENCE)
+            s.add(EngineeringOptionID.GENERATE_SEQUENCES);
+        if ((mask & EngineeringOptionID.USER_DEFINED_TYPE) == EngineeringOptionID.USER_DEFINED_TYPE)
+            s.add(EngineeringOptionID.GENERATE_USER_DEFINED_TYPE);
+        if ((mask & EngineeringOptionID.UNIQUE_CONSTRAINT) == EngineeringOptionID.UNIQUE_CONSTRAINT)
+            s.add(EngineeringOptionID.GENERATE_PK_CONSTRAINTS);
+        if ((mask & EngineeringOptionID.CHECK_CONSTRAINT) == EngineeringOptionID.CHECK_CONSTRAINT)
+            s.add(EngineeringOptionID.GENERATE_CK_CONSTRAINTS);
+        if ((mask & EngineeringOptionID.FOREIGN_KEY) == EngineeringOptionID.FOREIGN_KEY)
+            s.add(EngineeringOptionID.GENERATE_FK_CONSTRAINTS);
+        if ((mask & EngineeringOptionID.SCHEMA) == EngineeringOptionID.SCHEMA)
+            s.add(EngineeringOptionID.GENERATE_SCHEMAS);
+    }    
+
+
+    public static class SingletonOptionDependency {
+
+        private Map data = new HashMap();
+        private static SingletonOptionDependency ref;
+        
+        private SingletonOptionDependency()
+        {
+        }
+
+        public static SingletonOptionDependency getSingletonObject()
+        {
+            if (ref == null) {
+                ref = new SingletonOptionDependency();
+
+                //Database
+                int mask = EngineeringOptionID.TABLE | EngineeringOptionID.INDEX | EngineeringOptionID.VIEW | 
+                         EngineeringOptionID.TRIGGER | EngineeringOptionID.UNIQUE_CONSTRAINT | 
+                         EngineeringOptionID.CHECK_CONSTRAINT | EngineeringOptionID.FOREIGN_KEY; 
+                ref.data.put(Database.class, new Integer(mask));
+
+                //Schema
+                mask = EngineeringOptionID.TABLE | EngineeringOptionID.INDEX | EngineeringOptionID.VIEW | 
+                         EngineeringOptionID.TRIGGER | EngineeringOptionID.UNIQUE_CONSTRAINT | 
+                         EngineeringOptionID.CHECK_CONSTRAINT | EngineeringOptionID.FOREIGN_KEY; 
+                ref.data.put(Schema.class, new Integer(mask));
+               
+                //Table
+                mask = EngineeringOptionID.TABLE | EngineeringOptionID.INDEX | EngineeringOptionID.TRIGGER | 
+                         EngineeringOptionID.UNIQUE_CONSTRAINT | EngineeringOptionID.CHECK_CONSTRAINT | 
+                         EngineeringOptionID.FOREIGN_KEY;
+                ref.data.put(Table.class, new Integer(mask));
+                
+                
+                //Index
+                mask = EngineeringOptionID.INDEX;
+                ref.data.put(Index.class, new Integer(mask));
+
+                //Procedure
+                mask = EngineeringOptionID.PROCEDURE;
+                ref.data.put(Procedure.class, new Integer(mask));
+
+                //UserDefinedFunction
+                mask = EngineeringOptionID.USER_DEFINED_FUNCTION;
+                ref.data.put(UserDefinedFunction.class, new Integer(mask));
+ 
+                //ViewTable
+                mask = EngineeringOptionID.VIEW | EngineeringOptionID.TRIGGER;
+                ref.data.put(ViewTable.class, new Integer(mask));
+
+                //Trigger
+                mask = EngineeringOptionID.TRIGGER;
+                ref.data.put(Trigger.class, new Integer(mask));
+
+                //Sequence
+                mask = EngineeringOptionID.SEQUENCE;
+                ref.data.put(Sequence.class, new Integer(mask));
+
+                //UserDefinedType
+                mask = EngineeringOptionID.USER_DEFINED_TYPE;
+                ref.data.put(UserDefinedType.class, new Integer(mask));
+
+                //UniqueConstraint
+                mask = EngineeringOptionID.UNIQUE_CONSTRAINT;
+                ref.data.put(UniqueConstraint.class, new Integer(mask));
+
+                //ForeignKey
+                mask = EngineeringOptionID.FOREIGN_KEY;
+                ref.data.put(ForeignKey.class, new Integer(mask));
+
+                //CheckConstraint
+                mask = EngineeringOptionID.CHECK_CONSTRAINT;
+                ref.data.put(CheckConstraint.class, new Integer(mask));
+          }
+          return ref;
+        }        
+       
+        public Integer getMask(Class key) {
+            return (Integer)data.get(key);
+        }
+    }
+    
+    protected final void setDdlBuilder(GenericDdlBuilder builder) {
+    	this.builder = builder;
+    }
+    
+	
+    protected EngineeringOption[] options = null;
+    protected EngineeringOptionCategory[] categories = null;
+	private GenericDdlBuilder builder = null;
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/fe/GenericDdlScript.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/fe/GenericDdlScript.java
new file mode 100644
index 0000000..ef2aab0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/fe/GenericDdlScript.java
@@ -0,0 +1,152 @@
+package org.eclipse.datatools.connectivity.sqm.core.rte.fe;
+
+import java.util.Vector;
+
+public class GenericDdlScript {
+    public void addDropTableStatement(String statement) {
+    	dropTableStatements.addElement(statement);
+    }
+	
+    public void addCreateTableStatement(String statement) {
+    	createTableStatements.addElement(statement);
+    }
+	
+    public void addAlterTableStatement(String statement) {
+    	alterTableStatements.addElement(statement);
+    }
+	
+    public void addDropViewStatement(String statement) {
+    	dropViewStatements.addElement(statement);
+    }
+
+    public void addCreateViewStatement(String statement) {
+    	createViewStatements.addElement(statement);
+    }
+
+    public void addAlterTableDropForeignKeyStatement(String statement) {
+    	dropForeignKeyStatements.addElement(statement);
+    }
+
+    public void addAlterTableAddForeignKeyStatement(String statement) {
+    	addForeignKeyStatements.addElement(statement);
+    }
+	
+    public void addDropIndexStatement(String statement) {
+    	dropIndexStatements.addElement(statement);
+    }
+
+    public void addCreateIndexStatement(String statement) {
+    	createIndexStatements.addElement(statement);
+    }
+	
+    public void addDropTriggerStatement(String statement) {
+    	dropTriggerStatements.addElement(statement);
+    }
+	
+    public void addCreateTriggerStatement(String statement) {
+    	createTriggerStatements.addElement(statement);
+    }
+	
+    public void addAlterTableDropConstraintStatement(String statement) {
+    	dropConstraintStatements.addElement(statement);
+    }
+
+    public void addAlterTableAddConstraintStatement(String statement) {
+    	addConstraintStatements.addElement(statement);
+    }
+	
+    public void addCreateStoredProcedureStatement(String statement) {
+    	createStoredProcedureStatements.addElement(statement);
+    }
+	
+    public void addDropStoredProcedureStatement(String statement) {
+    	dropStoredProcedureStatements.addElement(statement);
+    }
+	
+    public void addCreateUserDefinedFunctionStatement(String statement) {
+    	createUserDefinedFunctionStatements.addElement(statement);
+    }
+	
+    public void addDropUserDefinedFunctionStatement(String statement) {
+    	dropUserDefinedFunctionStatements.addElement(statement);
+    }
+	
+    public void addCreateSchemaStatement(String statement) {
+    	createSchemaStatements.addElement(statement);
+    }
+	
+    public void addDropSchemaStatement(String statement) {
+    	dropSchemaStatements.addElement(statement);
+    }
+	
+    public void addCreateUserDefinedTypeStatement(String statement) {
+    	createUserDefinedTypeStatements.addElement(statement);
+    }
+	
+    public void addDropUserDefinedTypeStatement(String statement) {
+    	dropUserDefinedTypeStatements.addElement(statement);
+    }
+	
+    public void addCreateAssertionStatement(String statement) {
+    	createAssertionStatements.addElement(statement);
+    }
+	
+    public void addDropAssertionStatement(String statement) {
+    	dropAssertionStatements.addElement(statement);
+    }
+	
+	public String[] getStatements(){
+		Vector scriptVec = new Vector();
+		scriptVec.addAll(dropTriggerStatements);
+		scriptVec.addAll(dropForeignKeyStatements);
+		scriptVec.addAll(dropAssertionStatements);
+		scriptVec.addAll(dropConstraintStatements);
+		scriptVec.addAll(dropIndexStatements);
+		scriptVec.addAll(dropViewStatements);
+		scriptVec.addAll(dropTableStatements);
+		scriptVec.addAll(dropStoredProcedureStatements);
+		scriptVec.addAll(dropUserDefinedFunctionStatements);
+		scriptVec.addAll(dropUserDefinedTypeStatements);
+		scriptVec.addAll(dropSchemaStatements);
+		scriptVec.addAll(createSchemaStatements);
+		scriptVec.addAll(createTableStatements);
+		scriptVec.addAll(alterTableStatements);
+		scriptVec.addAll(createViewStatements);
+		scriptVec.addAll(createIndexStatements);
+		scriptVec.addAll(addConstraintStatements);
+		scriptVec.addAll(addForeignKeyStatements);
+		scriptVec.addAll(createTriggerStatements);
+		scriptVec.addAll(createStoredProcedureStatements);
+		scriptVec.addAll(createUserDefinedFunctionStatements);
+		scriptVec.addAll(createUserDefinedTypeStatements);
+		scriptVec.addAll(createAssertionStatements);
+		
+		String[] scripts = new String[scriptVec.size()];
+		scriptVec.copyInto(scripts);
+		return scripts;
+	}
+
+    protected Vector dropForeignKeyStatements               = new Vector();
+    protected Vector dropTableStatements                    = new Vector();
+    protected Vector dropViewStatements                     = new Vector();
+    protected Vector dropConstraintStatements               = new Vector();
+    protected Vector dropTriggerStatements                  = new Vector();
+    protected Vector dropIndexStatements                    = new Vector();
+    protected Vector createTableStatements                  = new Vector();
+    protected Vector alterTableStatements                   = new Vector();
+    protected Vector createViewStatements                   = new Vector();
+    protected Vector addForeignKeyStatements                = new Vector();
+    protected Vector createIndexStatements                  = new Vector();
+    protected Vector createTriggerStatements                = new Vector();
+    protected Vector addConstraintStatements                = new Vector();
+    protected Vector createStoredProcedureStatements        = new Vector();
+    protected Vector createUserDefinedFunctionStatements    = new Vector();
+    protected Vector createSchemaStatements                 = new Vector();
+    protected Vector createUserDefinedTypeStatements        = new Vector();
+    protected Vector createAssertionStatements              = new Vector();
+    protected Vector dropStoredProcedureStatements          = new Vector();
+    protected Vector dropUserDefinedFunctionStatements      = new Vector();
+    protected Vector dropSchemaStatements                   = new Vector();
+    protected Vector dropUserDefinedTypeStatements          = new Vector();
+    protected Vector dropAssertionStatements                = new Vector();
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCCatalog.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCCatalog.java
new file mode 100644
index 0000000..2a93c0b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCCatalog.java
@@ -0,0 +1,167 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.rte.jdbc;
+
+import java.lang.ref.SoftReference;
+import java.sql.Connection;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.core.util.CatalogLoaderOverrideManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilterListener;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.DatabaseConnectionRegistry;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCBaseLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCSchemaLoader;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.schema.impl.CatalogImpl;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class JDBCCatalog extends CatalogImpl implements ICatalogObject {
+
+	private static final long serialVersionUID = 8409098315478607573L;
+
+	public Database getCatalogDatabase() {
+		return getDatabase();
+	}
+
+	public Connection getConnection() {
+		Database db = getCatalogDatabase();
+		if (db instanceof ICatalogObject) {
+			return ((ICatalogObject) db).getConnection();
+		}
+		return null;
+	}
+
+	public void refresh() {
+		synchronized (schemasLoaded) {
+			if (schemasLoaded.booleanValue()) {
+				schemasLoaded = Boolean.FALSE;
+			}
+		}
+
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public EList getSchemas() {
+		synchronized (schemasLoaded) {
+			if (!schemasLoaded.booleanValue())
+				loadSchemas();
+		}
+		return super.getSchemas();
+	}
+
+	protected JDBCSchemaLoader createLoader() {
+		DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().
+			getDefinition(this.getCatalogDatabase());
+	
+		JDBCBaseLoader loader =
+			CatalogLoaderOverrideManager.INSTANCE.getLoaderForDatabase(databaseDefinition, SQLSchemaPackage.eINSTANCE.getSchema().getInstanceClassName());
+		
+		if (loader != null) {
+			JDBCSchemaLoader schemaLoader = (JDBCSchemaLoader) loader;
+			schemaLoader.setCatalogObject(this);
+			return schemaLoader;
+		}
+		return new JDBCSchemaLoader(this);
+	}
+
+	private JDBCSchemaLoader getLoader() {
+		if (schemaLoaderRef == null || schemaLoaderRef.get() == null) {
+			schemaLoaderRef = new SoftReference(createLoader());
+		}
+		return (JDBCSchemaLoader) schemaLoaderRef.get();
+	}
+
+	private void loadSchemas() {
+		boolean deliver = eDeliver();
+		try {
+			List container = super.getSchemas();
+			List existingSchemas = new ArrayList(container);
+			
+			eSetDeliver(false);
+
+			container.clear();
+
+			getLoader().loadSchemas(container, existingSchemas);
+
+			getLoader().clearSchemas(existingSchemas);
+
+			schemasLoaded = Boolean.TRUE;
+
+			if (filterListener == null) {
+				ConnectionInfo connectionInfo = DatabaseConnectionRegistry
+						.getInstance().getConnectionForDatabase(
+								getCatalogDatabase());
+				filterListener = new FilterListener();
+				connectionInfo.addFilterListener(filterListener);
+			}
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		finally {
+			eSetDeliver(deliver);
+		}
+	}
+
+	private String getSchemaFilterKey() {
+		return this.getName() + ConnectionFilter.FILTER_SEPARATOR + ConnectionFilter.SCHEMA_FILTER; //$NON-NLS-1$
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if (id == SQLSchemaPackage.CATALOG__SCHEMAS) {
+			getSchemas();
+		}
+		return super.eIsSet(eFeature);
+	}
+
+	private void handleFilterChanged(String filterKey) {
+		boolean refresh = false;
+		ConnectionInfo conInf = DatabaseConnectionRegistry.getInstance()
+				.getConnectionForDatabase(getCatalogDatabase());
+		if (schemasLoaded.booleanValue()
+				&& (filterKey.equals(getSchemaFilterKey()) || (conInf != null
+						&& ConnectionFilter.SCHEMA_FILTER.equals(filterKey) && conInf
+						.getFilter(getSchemaFilterKey()) == null))) {
+			schemasLoaded = Boolean.FALSE;
+			getLoader().clearSchemas(super.getSchemas());
+			refresh = true;
+		}
+		if (refresh) {
+			RefreshManager.getInstance().referesh(this);
+		}
+	}
+
+	private Boolean schemasLoaded = Boolean.FALSE;
+	private transient ConnectionFilterListener filterListener;
+	private SoftReference schemaLoaderRef;
+
+	private class FilterListener implements ConnectionFilterListener {
+
+		public void connectionFilterAdded(String filterKey) {
+			handleFilterChanged(filterKey);
+		}
+
+		public void connectionFilterRemoved(String filterKey) {
+			handleFilterChanged(filterKey);
+		}
+
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCColumn.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCColumn.java
new file mode 100644
index 0000000..88a44fe
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCColumn.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.rte.jdbc;
+
+import java.sql.Connection;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.tables.impl.ColumnImpl;
+
+
+public class JDBCColumn extends ColumnImpl implements ICatalogObject{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1554651527074889809L;
+
+	public void refresh() {
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}	
+
+	public Database getCatalogDatabase() {
+		return getTable().getSchema().getCatalog().getDatabase();
+	}
+
+	public Connection getConnection() {
+		Database db = getCatalogDatabase();
+		if (db instanceof ICatalogObject) {
+			return ((ICatalogObject) db).getConnection();
+		}
+		return null;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCDatabase.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCDatabase.java
new file mode 100644
index 0000000..f808312
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCDatabase.java
@@ -0,0 +1,164 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.rte.jdbc;
+
+import java.lang.ref.SoftReference;
+import java.sql.Connection;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.core.util.CatalogLoaderOverrideManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilterListener;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.DatabaseConnectionRegistry;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCBaseLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCCatalogLoader;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.schema.impl.DatabaseImpl;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+
+
+
+public class JDBCDatabase extends DatabaseImpl implements ICatalogObject {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 7464150486346999662L;
+	public JDBCDatabase(Connection connection) {
+		if(connection == null) {
+			System.err.println("null connection"); //$NON-NLS-1$
+			throw new RuntimeException();
+		}
+		this.connection = connection;
+	}
+
+	public void refresh() {
+		synchronized (catalogsLoaded) {
+			if (catalogsLoaded.booleanValue()) {
+				catalogsLoaded = Boolean.FALSE;
+			}
+		}
+
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public EList getCatalogs() {
+		synchronized (catalogsLoaded) {
+			if(!catalogsLoaded.booleanValue()) loadCatalogs();
+		}
+		return super.getCatalogs();
+	}
+	
+	protected JDBCCatalogLoader createLoader() {
+		DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().
+			getDefinition(this.getCatalogDatabase());
+
+		JDBCBaseLoader loader =
+			CatalogLoaderOverrideManager.INSTANCE.getLoaderForDatabase(databaseDefinition, SQLSchemaPackage.eINSTANCE.getCatalog().getInstanceClassName());
+		
+		if (loader != null) {
+			JDBCCatalogLoader catLoader = (JDBCCatalogLoader) loader;
+			catLoader.setCatalogObject(this);
+			return catLoader;
+		}
+		
+		return new JDBCCatalogLoader(this);
+	}
+
+	protected final JDBCCatalogLoader getLoader() {
+		if (catalogLoaderRef == null || catalogLoaderRef.get() == null) {
+			catalogLoaderRef = new SoftReference(createLoader());
+		}
+		return (JDBCCatalogLoader)catalogLoaderRef.get();
+	}
+
+	private void loadCatalogs() {
+		boolean deliver = eDeliver();
+		try {
+			List container = super.getCatalogs();
+			List existingCatalogs = new ArrayList(container);
+			
+			eSetDeliver(false);
+
+			container.clear();
+
+			getLoader().loadCatalogs(container, existingCatalogs);
+
+			getLoader().clearCatalogs(existingCatalogs);
+
+			catalogsLoaded = Boolean.TRUE;
+
+			if (filterListener == null) {
+				ConnectionInfo connectionInfo = DatabaseConnectionRegistry
+						.getInstance().getConnectionForDatabase(this);
+				filterListener = new FilterListener();
+				connectionInfo.addFilterListener(filterListener);
+			}
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		finally {
+			eSetDeliver(deliver);
+		}
+	}
+
+	public Connection getConnection() {
+		return connection;
+	}
+	
+	public Database getCatalogDatabase() {
+		return this;		
+	}
+	
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == SQLSchemaPackage.DATABASE__CATALOGS) {
+			getCatalogs();
+		}
+		return super.eIsSet(eFeature);
+	}
+	
+	private void handleFilterChanged(String filterKey) {
+		if (!catalogsLoaded.booleanValue()) {
+			return;
+		}
+		if (ConnectionFilter.CATALOG_FILTER.equals(filterKey)) {
+			refresh();
+		}
+	}
+	
+	private Connection connection;
+	private Boolean catalogsLoaded = Boolean.FALSE;
+	private transient ConnectionFilterListener filterListener;
+	private SoftReference catalogLoaderRef;
+	
+	private class FilterListener implements ConnectionFilterListener {
+
+		public void connectionFilterAdded(String filterKey) {
+			handleFilterChanged(filterKey);
+		}
+
+		public void connectionFilterRemoved(String filterKey) {
+			handleFilterChanged(filterKey);
+		}
+
+	}
+	
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCDistinctUDT.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCDistinctUDT.java
new file mode 100644
index 0000000..cc36600
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCDistinctUDT.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.rte.jdbc;
+
+import java.sql.Connection;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.modelbase.sql.datatypes.impl.DistinctUserDefinedTypeImpl;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+public class JDBCDistinctUDT extends DistinctUserDefinedTypeImpl implements
+		ICatalogObject {
+
+	private static final long serialVersionUID = -8688928454166882219L;
+
+	public Database getCatalogDatabase() {
+		return getSchema().getCatalog().getDatabase();
+	}
+
+	public Connection getConnection() {
+		Database db = getCatalogDatabase();
+		if (db instanceof ICatalogObject) {
+			return ((ICatalogObject) db).getConnection();
+		}
+		return null;
+	}
+
+	public void refresh() {
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCForeignKey.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCForeignKey.java
new file mode 100644
index 0000000..ed41951
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCForeignKey.java
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.datatools.connectivity.sqm.core.rte.jdbc;
+
+import java.sql.Connection;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.constraints.SQLConstraintsPackage;
+import org.eclipse.datatools.modelbase.sql.constraints.impl.ForeignKeyImpl;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+
+public class JDBCForeignKey extends ForeignKeyImpl implements ICatalogObject {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 4142241344656964532L;
+
+
+	public void refresh() {
+		this.eAnnotationLoaded = false;
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public EList getEAnnotations() {
+		if(!this.eAnnotationLoaded) this.loadEAnnotations();
+		return this.eAnnotations;
+	}
+	
+	public Database getCatalogDatabase() {
+		return getBaseTable().getSchema().getCatalog().getDatabase();
+	}
+
+	public Connection getConnection() {
+		Database db = getCatalogDatabase();
+		if (db instanceof ICatalogObject) {
+			return ((ICatalogObject) db).getConnection();
+		}
+		return null;
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == SQLConstraintsPackage.FOREIGN_KEY__EANNOTATIONS) {
+			this.getEAnnotations();
+		}
+		
+		return super.eIsSet(eFeature);
+	}
+
+	private synchronized void loadEAnnotations() {
+		if(this.eAnnotationLoaded) return;
+		EList memberList = super.getEAnnotations();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		this.eAnnotationLoaded = true;
+		
+		JDBCForeignKey.setAsIdentifyingRelatinship(this,this.isIdentifyingRelationship(super.getMembers()));
+		
+		this.eSetDeliver(deliver);		
+	}
+	
+	public static void setAsIdentifyingRelatinship(ForeignKey fk,boolean identifying){
+		EAnnotation eAnnotation = fk.addEAnnotation(RDBCorePlugin.FK_MODELING_RELATIONSHIP);
+		fk.addEAnnotationDetail(eAnnotation,RDBCorePlugin.FK_IS_IDENTIFYING_RELATIONSHIP,new Boolean(identifying).toString());
+
+		fk.addEAnnotationDetail(eAnnotation, RDBCorePlugin.FK_CHILD_MULTIPLICITY, RDBCorePlugin.MANY);
+		fk.addEAnnotationDetail(eAnnotation, RDBCorePlugin.FK_CHILD_ROLE_NAME, new String ());
+		fk.addEAnnotationDetail(eAnnotation, RDBCorePlugin.FK_PARENT_MULTIPLICITY, (fk.getMembers().size() > 0) ? RDBCorePlugin.ZERO_TO_ONE : RDBCorePlugin.ONE);
+		fk.addEAnnotationDetail(eAnnotation, RDBCorePlugin.FK_PARENT_ROLE_NAME, new String ());
+	}
+
+	public boolean isIdentifyingRelationship(EList columns){
+		boolean isIdentifying = true;
+		Iterator it = columns.iterator();
+		while(it.hasNext()) {
+			Column column = (Column) it.next();
+			if(!column.isPartOfPrimaryKey()){
+				isIdentifying = false;
+				break;
+			}
+		}
+		return isIdentifying;
+	}
+	
+	
+	private boolean eAnnotationLoaded=false;
+	
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCIndex.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCIndex.java
new file mode 100644
index 0000000..877bb98
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCIndex.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.rte.jdbc;
+
+import java.sql.Connection;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.modelbase.sql.constraints.impl.IndexImpl;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+
+public class JDBCIndex extends IndexImpl implements ICatalogObject {
+
+	private static final long serialVersionUID = 7639411266165759718L;
+
+	public void refresh() {
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Database getCatalogDatabase() {
+		return getTable().getSchema().getCatalog().getDatabase();
+	}
+
+	public Connection getConnection() {
+		Database db = getCatalogDatabase();
+		if (db instanceof ICatalogObject) {
+			return ((ICatalogObject) db).getConnection();
+		}
+		return null;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCParameter.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCParameter.java
new file mode 100644
index 0000000..ff5495e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCParameter.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.rte.jdbc;
+
+import java.sql.Connection;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.datatools.modelbase.sql.routines.impl.ParameterImpl;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+public class JDBCParameter extends ParameterImpl implements ICatalogObject {
+
+	private static final long serialVersionUID = 57438191469348142L;
+
+	public void refresh() {
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		if (database instanceof ICatalogObject) {
+			return ((ICatalogObject) database).getConnection();
+		}
+		return null;
+	}
+	
+	public Database getCatalogDatabase() {
+        return ((Routine)this.eContainer()).getSchema().getCatalog().getDatabase(); 
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCPrimaryKey.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCPrimaryKey.java
new file mode 100644
index 0000000..c9f1a97
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCPrimaryKey.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.datatools.connectivity.sqm.core.rte.jdbc;
+
+import java.sql.Connection;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.modelbase.sql.constraints.impl.PrimaryKeyImpl;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+
+public class JDBCPrimaryKey extends PrimaryKeyImpl implements ICatalogObject {
+
+	private static final long serialVersionUID = -2333717811520491945L;
+
+	public void refresh() {
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Database getCatalogDatabase() {
+		return getBaseTable().getSchema().getCatalog().getDatabase();
+	}
+
+	public Connection getConnection() {
+		Database db = getCatalogDatabase();
+		if (db instanceof ICatalogObject) {
+			return ((ICatalogObject) db).getConnection();
+		}
+		return null;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCProcedure.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCProcedure.java
new file mode 100644
index 0000000..6a6eef6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCProcedure.java
@@ -0,0 +1,163 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.rte.jdbc;
+
+import java.lang.ref.SoftReference;
+import java.sql.Connection;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.core.util.CatalogLoaderOverrideManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCBaseLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCProcedureColumnLoader;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesFactory;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesPackage;
+import org.eclipse.datatools.modelbase.sql.routines.impl.ProcedureImpl;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class JDBCProcedure extends ProcedureImpl implements ICatalogObject {
+
+	private static final long serialVersionUID = -734520220022088696L;
+	
+	public void refresh() {
+		synchronized (parametersLoaded) {
+			if (parametersLoaded.booleanValue()) {
+				parametersLoaded = Boolean.FALSE;
+			}
+		}
+		synchronized (resultTablesLoaded) {
+			if (resultTablesLoaded.booleanValue()) {
+				resultTablesLoaded = Boolean.FALSE;
+			}
+		}
+
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public Database getCatalogDatabase() {
+		return getSchema().getCatalog().getDatabase();
+	}
+
+	public Connection getConnection() {
+		Database db = getCatalogDatabase();
+		if (db instanceof ICatalogObject) {
+			return ((ICatalogObject) db).getConnection();
+		}
+		return null;
+	}
+
+	public EList getParameters() {
+		synchronized (parametersLoaded) {
+			if (!parametersLoaded.booleanValue())
+				loadParameters();
+		}
+		return super.getParameters();
+	}
+
+	public EList getResultSet() {
+		synchronized (resultTablesLoaded) {
+			if (!resultTablesLoaded.booleanValue())
+				loadRoutineResultTables();
+		}
+		return super.getResultSet();
+	}
+
+	protected JDBCProcedureColumnLoader createParameterLoader() {
+		DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().
+			getDefinition(this.getCatalogDatabase());
+	
+		JDBCBaseLoader loader = 
+			CatalogLoaderOverrideManager.INSTANCE.getLoaderForDatabase(databaseDefinition, 
+					SQLRoutinesFactory.eINSTANCE.createParameter().eClass().getInstanceClassName());
+		
+		if (loader != null) {
+			JDBCProcedureColumnLoader procedureColumnLoader = (JDBCProcedureColumnLoader) loader;
+			procedureColumnLoader.setCatalogObject(this);
+			return procedureColumnLoader;
+		}
+		return new JDBCProcedureColumnLoader(this);
+	}
+
+	protected final JDBCProcedureColumnLoader getParameterLoader() {
+		if (paremeterLoaderRef == null || paremeterLoaderRef.get() == null) {
+			paremeterLoaderRef = new SoftReference(createParameterLoader());
+		}
+		return (JDBCProcedureColumnLoader) paremeterLoaderRef.get();
+	}
+
+	private void loadParameters() {
+		parametersLoaded = Boolean.TRUE;
+
+		boolean deliver = eDeliver();
+		try {
+			List parametersContainer = super.getParameters();
+			List existingParameters = new ArrayList(parametersContainer);
+
+			eSetDeliver(false);
+
+			parametersContainer.clear();
+
+			getParameterLoader().loadParameters(parametersContainer, existingParameters);
+			getParameterLoader().clearColumns(existingParameters);
+			
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		finally {
+			eSetDeliver(deliver);
+		}
+	}
+	
+	private void loadRoutineResultTables() {
+		resultTablesLoaded = Boolean.TRUE;
+
+		boolean deliver = eDeliver();
+		try {
+			List resultTablesContainer = super.getResultSet();
+
+			eSetDeliver(false);
+
+			resultTablesContainer.clear();
+
+			resultTablesContainer.addAll(getParameterLoader().loadRoutineResultTables());
+			
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		finally {
+			eSetDeliver(deliver);
+		}
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		switch (eDerivedStructuralFeatureID(eFeature)) {
+		case SQLRoutinesPackage.PROCEDURE__PARAMETERS:
+			getParameters();
+			break;
+		case SQLRoutinesPackage.PROCEDURE__MAX_RESULT_SETS:
+			getMaxResultSets();
+			break;
+		}
+
+		return super.eIsSet(eFeature);
+	}
+
+	private Boolean parametersLoaded = Boolean.FALSE;
+	private Boolean resultTablesLoaded = Boolean.FALSE;
+	private SoftReference paremeterLoaderRef;
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCProvider.java
new file mode 100644
index 0000000..d59deff
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCProvider.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.datatools.connectivity.sqm.core.rte.jdbc;
+
+import java.sql.Connection;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogProvider;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+
+
+public class JDBCProvider implements ICatalogProvider {
+
+	public JDBCProvider(DatabaseDefinition definition){
+		this.definition = definition;
+	}
+	public Database getCatalogDatabase(Connection connection) {
+		Database database = new JDBCDatabase(connection);
+		database.setVendor(this.definition.getProduct());
+		database.setVersion(this.definition.getVersion());
+		return database;
+	}
+	
+	DatabaseDefinition definition;	
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCSchema.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCSchema.java
new file mode 100644
index 0000000..2cd80a7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCSchema.java
@@ -0,0 +1,534 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.rte.jdbc;
+
+import java.lang.ref.SoftReference;
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Vector;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.core.util.CatalogLoaderOverrideManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilterListener;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.DatabaseConnectionRegistry;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCBaseLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCRoutineLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCUserDefinedTypeLoader;
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataTypesPackage;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Catalog;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.schema.impl.SchemaImpl;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import com.ibm.icu.util.StringTokenizer;
+
+public class JDBCSchema extends SchemaImpl implements ICatalogObject {
+
+	private static final long serialVersionUID = -8922854918009851012L;
+
+	public Database getCatalogDatabase() {
+		return getCatalog().getDatabase();
+	}
+
+	public Connection getConnection() {
+		Database db = getCatalogDatabase();
+		if (db instanceof ICatalogObject) {
+			return ((ICatalogObject) db).getConnection();
+		}
+		return null;
+	}
+
+	public void refresh() {
+		synchronized (tablesLoaded) {
+			if (tablesLoaded.booleanValue()) {
+				tablesLoaded = Boolean.FALSE;
+			}
+		}
+		synchronized (routinesLoaded) {
+			if (routinesLoaded.booleanValue()) {
+				routinesLoaded = Boolean.FALSE;
+			}
+		}
+		synchronized (udtsLoaded) {
+			if (udtsLoaded.booleanValue()) {
+				udtsLoaded = Boolean.FALSE;
+			}
+		}
+
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public EList getTables() {
+		synchronized (tablesLoaded) {
+			if (!tablesLoaded.booleanValue())
+				loadTables();
+		}
+		return super.getTables();
+	}
+
+	protected JDBCTableLoader createTableLoader() {
+		DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().
+			getDefinition(this.getCatalogDatabase());
+	
+		JDBCBaseLoader loader =
+			CatalogLoaderOverrideManager.INSTANCE.getLoaderForDatabase(databaseDefinition, 
+					SQLTablesPackage.eINSTANCE.getTable().getInstanceClassName());
+		
+		if (loader != null) {
+			JDBCTableLoader tableLoader = (JDBCTableLoader) loader;
+			tableLoader.setCatalogObject(this);
+			return tableLoader;
+		}
+		return new JDBCTableLoader(this);
+	}
+
+	protected final JDBCTableLoader getTableLoader() {
+		if (tableLoaderRef == null || tableLoaderRef.get() == null) {
+			tableLoaderRef = new SoftReference(createTableLoader());
+		}
+		return (JDBCTableLoader) tableLoaderRef.get();
+	}
+
+	private void loadTables() {
+		synchronized (tablesLoaded) {
+			boolean deliver = eDeliver();
+			try {
+				List container = super.getTables();
+				List existingTables = new ArrayList(container);
+				
+				eSetDeliver(false);
+
+				container.clear();
+
+				getTableLoader().loadTables(container, existingTables);
+
+				getTableLoader().clearTables(existingTables);
+
+				tablesLoaded = Boolean.TRUE;
+			}
+			catch (Exception e) {
+				e.printStackTrace();
+			}
+			finally {
+				eSetDeliver(deliver);
+			}
+		}
+	}
+
+	private String getTableFilterKey() {
+		return getCatalog().getName() + ConnectionFilter.FILTER_SEPARATOR
+				+ getName() + ConnectionFilter.FILTER_SEPARATOR
+				+ ConnectionFilter.TABLE_FILTER;
+	}
+
+	public EList getRoutines() {
+		synchronized (routinesLoaded) {
+			if (!routinesLoaded.booleanValue())
+				loadRoutines();
+		}
+		return super.getRoutines();
+	}
+
+	protected JDBCRoutineLoader createRoutineLoader() {
+		DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().
+			getDefinition(this.getCatalogDatabase());
+	
+		JDBCBaseLoader loader =
+			CatalogLoaderOverrideManager.INSTANCE.getLoaderForDatabase(databaseDefinition, 
+					SQLRoutinesPackage.eINSTANCE.getRoutine().getInstanceClassName());
+		
+		if (loader != null) {
+			JDBCRoutineLoader routineLoader = (JDBCRoutineLoader) loader;
+			routineLoader.setCatalogObject(this);
+			return routineLoader;
+		}
+		return new JDBCRoutineLoader(this);
+	}
+
+	protected final JDBCRoutineLoader getRoutineLoader() {
+		if (routineLoaderRef == null || routineLoaderRef.get() == null) {
+			routineLoaderRef = new SoftReference(createRoutineLoader());
+		}
+		return (JDBCRoutineLoader) routineLoaderRef.get();
+	}
+
+	private void loadRoutines() {
+		synchronized (routinesLoaded) {
+			boolean deliver = eDeliver();
+			try {
+				List container = super.getRoutines();
+				List existingRoutines = new ArrayList(container);
+				
+				eSetDeliver(false);
+
+				container.clear();
+
+				getRoutineLoader().loadRoutines(container, existingRoutines);
+
+				getRoutineLoader().clearRoutines(existingRoutines);
+
+				routinesLoaded = Boolean.TRUE;
+			}
+			catch (Exception e) {
+				e.printStackTrace();
+			}
+			finally {
+				eSetDeliver(deliver);
+			}
+		}
+	}
+
+	private String getRoutineFilterKey() {
+		return getCatalog().getName() + ConnectionFilter.FILTER_SEPARATOR
+				+ getName() + ConnectionFilter.FILTER_SEPARATOR
+				+ ConnectionFilter.STORED_PROCEDURE_FILTER;
+	}
+
+	public EList getUserDefinedTypes() {
+		synchronized (udtsLoaded) {
+			if (!routinesLoaded.booleanValue())
+				loadUDTs();
+		}
+		return super.getUserDefinedTypes();
+	}
+
+	protected JDBCUserDefinedTypeLoader createUDTLoader() {
+		DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().
+			getDefinition(this.getCatalogDatabase());
+	
+		JDBCBaseLoader loader =
+			CatalogLoaderOverrideManager.INSTANCE.getLoaderForDatabase(databaseDefinition, 
+					SQLDataTypesPackage.eINSTANCE.getUserDefinedType().getInstanceClassName());
+		
+		if (loader != null) {
+			JDBCUserDefinedTypeLoader udtLoader = (JDBCUserDefinedTypeLoader) loader;
+			udtLoader.setCatalogObject(this);
+			return udtLoader;
+		}
+		return new JDBCUserDefinedTypeLoader(this);
+	}
+
+	protected final JDBCUserDefinedTypeLoader getUDTLoader() {
+		if (udtLoaderRef == null || udtLoaderRef.get() == null) {
+			udtLoaderRef = new SoftReference(createUDTLoader());
+		}
+		return (JDBCUserDefinedTypeLoader) udtLoaderRef.get();
+	}
+
+	private void loadUDTs() {
+		synchronized (routinesLoaded) {
+			boolean deliver = eDeliver();
+			try {
+				List container = super.getUserDefinedTypes();
+				List existingUDTs = new ArrayList(container);
+				
+				eSetDeliver(false);
+
+				container.clear();
+
+				getUDTLoader().loadUDTs(container, existingUDTs);
+
+				getUDTLoader().clearUDTs(existingUDTs);
+
+				udtsLoaded = Boolean.TRUE;
+			}
+			catch (Exception e) {
+				e.printStackTrace();
+			}
+			finally {
+				eSetDeliver(deliver);
+			}
+		}
+	}
+
+	private String getUDTFilterKey() {
+		return getCatalog().getName() + ConnectionFilter.FILTER_SEPARATOR
+				+ getName() + ConnectionFilter.FILTER_SEPARATOR
+				+ ConnectionFilter.USER_DEFINED_TYPE_FILTER;
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		switch (eDerivedStructuralFeatureID(eFeature)) {
+		case SQLSchemaPackage.SCHEMA__TABLES:
+			getTables();
+			break;
+		case SQLSchemaPackage.SCHEMA__ROUTINES:
+			getRoutines();
+			break;
+		case SQLSchemaPackage.SCHEMA__USER_DEFINED_TYPES:
+			getUserDefinedTypes();
+			break;
+		}
+		return super.eIsSet(eFeature);
+	}
+
+	/**
+	 * @generated NOT
+	 */
+	public NotificationChain basicSetCatalog(Catalog newCatalog,
+			NotificationChain msgs) {
+		if (catalog != null && catalog.getDatabase() != null) {
+			ConnectionInfo connectionInfo = DatabaseConnectionRegistry
+					.getInstance().getConnectionForDatabase(
+							catalog.getDatabase());
+			connectionInfo.removeFilterListener(filterListener);
+		}
+		if (newCatalog != null && newCatalog.getDatabase() != null) {
+			ConnectionInfo connectionInfo = DatabaseConnectionRegistry
+					.getInstance().getConnectionForDatabase(
+							newCatalog.getDatabase());
+			connectionInfo.addFilterListener(filterListener);
+		}
+		return super.basicSetCatalog(newCatalog, msgs);
+	}
+
+	private void handleFilterChanged(String filterKey) {
+		boolean refresh = false;
+		ConnectionInfo conInf = DatabaseConnectionRegistry.getInstance()
+				.getConnectionForDatabase(getCatalogDatabase());
+		if (tablesLoaded.booleanValue()
+				&& filterKey.equals(getTableFilterKey())
+				|| (conInf != null
+						&& conInf.getFilter(getTableFilterKey()) == null && (ConnectionFilter.TABLE_FILTER
+						.equals(filterKey) || filterKey.equals(getCatalog()
+						.getName()
+						+ ConnectionFilter.FILTER_SEPARATOR
+						+ ConnectionFilter.TABLE_FILTER)))) {
+			tablesLoaded = Boolean.FALSE;
+			getTableLoader().clearTables(super.getTables());
+			refresh = true;
+		}
+		if (routinesLoaded.booleanValue()
+				&& filterKey.equals(getRoutineFilterKey())
+				|| (conInf != null
+						&& conInf.getFilter(getRoutineFilterKey()) == null && (ConnectionFilter.STORED_PROCEDURE_FILTER
+						.equals(filterKey) || filterKey.equals(getCatalog()
+						.getName()
+						+ ConnectionFilter.FILTER_SEPARATOR
+						+ ConnectionFilter.STORED_PROCEDURE_FILTER)))) {
+			routinesLoaded = Boolean.FALSE;
+			getRoutineLoader().clearRoutines(super.getRoutines());
+			refresh = true;
+		}
+		if (udtsLoaded.booleanValue()
+				&& filterKey.equals(getUDTFilterKey())
+				|| (conInf != null
+						&& conInf.getFilter(getUDTFilterKey()) == null && (ConnectionFilter.USER_DEFINED_TYPE_FILTER
+						.equals(filterKey) || filterKey.equals(getCatalog()
+						.getName()
+						+ ConnectionFilter.FILTER_SEPARATOR
+						+ ConnectionFilter.USER_DEFINED_TYPE_FILTER)))) {
+			udtsLoaded = Boolean.FALSE;
+			getUDTLoader().clearUDTs(super.getUserDefinedTypes());
+			refresh = true;
+		}
+		if (refresh) {
+			RefreshManager.getInstance().referesh(this);
+		}
+	}
+
+	private Boolean tablesLoaded = Boolean.FALSE;
+	private SoftReference tableLoaderRef;
+	private Boolean routinesLoaded = Boolean.FALSE;
+	private SoftReference routineLoaderRef;
+	private Boolean udtsLoaded = Boolean.FALSE;
+	private SoftReference udtLoaderRef;
+	private transient ConnectionFilterListener filterListener = new ConnectionFilterListener() {
+
+		public void connectionFilterAdded(String filterKey) {
+			handleFilterChanged(filterKey);
+		}
+
+		public void connectionFilterRemoved(String filterKey) {
+			handleFilterChanged(filterKey);
+		}
+
+	};
+
+	/**
+	 * @deprecated
+	 */
+	public static void loadTables(Connection connection, EList tableList,
+			Schema schema) throws SQLException {
+		Object[] oldList = tableList.toArray();
+		tableList.clear();
+
+		try {
+			String catalogName = null;
+			DatabaseMetaData metaData = connection.getMetaData();
+			if (metaData.supportsCatalogsInTableDefinitions()) {
+				catalogName = connection.getCatalog();
+			}
+			// TODO: Restore filter support after new connection manager is
+			// implemented
+			ConnectionInfo connectionInfo = DatabaseConnectionRegistry
+					.getInstance().getConnectionForDatabase(
+							schema.getDatabase());
+			ConnectionFilter filter = connectionInfo.getFilter(schema.getName()
+					+ "::" + ConnectionFilter.TABLE_FILTER); //$NON-NLS-1$
+			if (filter == null) { // if schema filter is null, then get
+				// default filter
+				filter = connectionInfo
+						.getFilter(ConnectionFilter.TABLE_FILTER);
+			}
+			String[] tableAry = null;
+			String pattern = null;
+			if (filter != null) {
+				String tableFilter = filter.getPredicate();
+				tableFilter = tableFilter.replaceAll(" ", ""); //$NON-NLS-1$ //$NON-NLS-2$
+				if (tableFilter.startsWith("IN(")) //$NON-NLS-1$
+				{
+					tableFilter = tableFilter.substring(3,
+							tableFilter.length() - 1); // skip "IN(" and ")"
+					tableFilter = tableFilter.replaceAll(",", ""); //$NON-NLS-1$ //$NON-NLS-2$
+					tableAry = parseINClause(tableFilter);
+				}
+				if (tableFilter.startsWith("LIKE")) //$NON-NLS-1$
+				{
+					pattern = parseLikeClause(filter.getPredicate());
+				}
+			}
+
+			ResultSet r = null;
+			if (pattern != null) {
+				r = metaData.getTables(catalogName, schema.getName(), pattern,
+						new String[] { "TABLE", "VIEW", "SYSTEM TABLE"}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+
+			}
+			else {
+				r = metaData.getTables(catalogName, schema.getName(), null,
+						new String[] {
+								"TABLE", "VIEW", "TABLE_VIEW", "SYSTEM TABLE"}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+			}
+			while (r.next()) {
+				String tableName = r.getString(3);
+				String type = r.getString(4);
+				String remarks = r.getString(5);
+				Table table;
+
+				if (tableAry != null) {
+					boolean found = false;
+					for (int i = 0; i < tableAry.length; i++) {
+						if (tableName.equals(tableAry[i])) {
+							found = true;
+							break; // for
+						}
+					}
+					if (!found)
+						continue; // while
+				}
+				EClass metaclass = null;
+				if (type.equals("TABLE") || type.equals("SYSTEM TABLE")) { //$NON-NLS-1$ //$NON-NLS-2$
+					metaclass = SQLTablesPackage.eINSTANCE.getPersistentTable();
+				}
+				else if (type.equals("VIEW")) { //$NON-NLS-1$
+					metaclass = SQLTablesPackage.eINSTANCE.getViewTable();
+				}
+
+				Object element = JDBCSchema.findElement(oldList, tableName,
+						metaclass);
+
+				if (element != null) {
+					table = (Table) element;
+					((ICatalogObject) table).refresh();
+				}
+				else {
+					if (type.equals("TABLE") || type.equals("SYSTEM TABLE")) { //$NON-NLS-1$ //$NON-NLS-2$
+						table = new JDBCTable();
+					}
+					else if (type.equals("VIEW")) { //$NON-NLS-1$
+						table = new JDBCView();
+					}
+					else
+						continue;
+					table.setName(tableName);
+				}
+
+				table.setDescription(remarks);
+				tableList.add(table);
+			}
+			r.close();
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	private static Object findElement(Object[] list, String name,
+			EClass metaclass) {
+		Object object = null;
+		for (int i = 0; i < list.length; i++) {
+			SQLObject sqlObject = (SQLObject) list[i];
+			if (sqlObject.getName().equals(name)
+					&& sqlObject.eClass() == metaclass) {
+				object = list[i];
+				break;
+			}
+		}
+		return object;
+	}
+
+	/*
+	 * This method can be moved to util package so that all others metadata
+	 * processing would have access to it
+	 */
+	protected static String[] parseINClause(String toParse) {
+		StringTokenizer tokenizer = new StringTokenizer(toParse, "'"); //$NON-NLS-1$
+		Vector list = new Vector();
+		String result = null;
+		if (tokenizer.countTokens() >= 1) {
+			while (tokenizer.hasMoreTokens()) {
+				list.add(tokenizer.nextToken());
+			}
+		}
+		String[] retStrList = null;
+		if (list.size() > 0) {
+			retStrList = new String[list.size()];
+			for (int i = 0; i < list.size(); i++) {
+				retStrList[i] = (String) list.get(i);
+			}
+		}
+		return retStrList;
+
+	}
+
+	/*
+	 * This method can be moved to util package so that all others metadata
+	 * processing would have access to it
+	 */
+	protected static String parseLikeClause(String toParse) {
+		String retString = toParse.substring(
+				toParse.indexOf("'") + 1, toParse.length() - 1); // Strip off
+		// begin
+		// LIKE' and
+		// end '
+		// //$NON-NLS-1$
+		return retString;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCStructuredUDT.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCStructuredUDT.java
new file mode 100644
index 0000000..a396ebb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCStructuredUDT.java
@@ -0,0 +1,174 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.rte.jdbc;
+
+import java.lang.ref.SoftReference;
+import java.sql.Connection;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.core.util.CatalogLoaderOverrideManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCBaseLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCUDTAttributeLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCUDTSuperTypeLoader;
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataTypesFactory;
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataTypesPackage;
+import org.eclipse.datatools.modelbase.sql.datatypes.StructuredUserDefinedType;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.datatypes.impl.StructuredUserDefinedTypeImpl;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class JDBCStructuredUDT extends StructuredUserDefinedTypeImpl implements
+		ICatalogObject {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -8270619856243796282L;
+	public Database getCatalogDatabase() {
+		return getSchema().getCatalog().getDatabase();
+	}
+
+	public Connection getConnection() {
+		Database db = getCatalogDatabase();
+		if (db instanceof ICatalogObject) {
+			return ((ICatalogObject) db).getConnection();
+		}
+		return null;
+	}
+
+	public void refresh() {
+		synchronized (attributesLoaded) {
+			if (attributesLoaded.booleanValue()) {
+				attributesLoaded = Boolean.FALSE;
+				getParameterLoader().clearAttributeDefinitions(
+						super.getAttributes());
+			}
+		}
+		synchronized (superLoaded) {
+			if (superLoaded.booleanValue()) {
+				superLoaded = Boolean.FALSE;
+				setSuper(null);
+			}
+		}
+
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public EList getAttributes() {
+		synchronized (attributesLoaded) {
+			if (!attributesLoaded.booleanValue())
+				loadAttributes();
+		}
+		return super.getAttributes();
+	}
+
+	protected JDBCUDTAttributeLoader createParameterLoader() {
+		DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().
+			getDefinition(this.getCatalogDatabase());
+	
+		JDBCBaseLoader loader =
+			CatalogLoaderOverrideManager.INSTANCE.getLoaderForDatabase(databaseDefinition, 
+					SQLDataTypesFactory.eINSTANCE.getSQLDataTypesPackage().getAttributeDefinition().getInstanceClassName());
+		
+		if (loader != null) {
+			JDBCUDTAttributeLoader parameterLoader = (JDBCUDTAttributeLoader) loader;
+			parameterLoader.setCatalogObject(this);
+			return parameterLoader;
+		}
+		return new JDBCUDTAttributeLoader(this);
+	}
+
+	protected final JDBCUDTAttributeLoader getParameterLoader() {
+		if (paremeterLoaderRef == null || paremeterLoaderRef.get() == null) {
+			paremeterLoaderRef = new SoftReference(createParameterLoader());
+		}
+		return (JDBCUDTAttributeLoader) paremeterLoaderRef.get();
+	}
+
+	private void loadAttributes() {
+		try {
+			super.getAttributes().addAll(
+					getParameterLoader().loadAttributeDefinitions());
+			attributesLoaded = Boolean.TRUE;
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	public StructuredUserDefinedType getSuper() {
+		synchronized (superLoaded) {
+			if (!superLoaded.booleanValue())
+				loadSuper();
+		}
+		return super.getSuper();
+	}
+
+	protected JDBCUDTSuperTypeLoader createSuperLoader() {
+		DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().
+			getDefinition(this.getCatalogDatabase());
+	
+		JDBCBaseLoader loader =
+			CatalogLoaderOverrideManager.INSTANCE.getLoaderForDatabase(databaseDefinition, 
+					SQLDataTypesFactory.eINSTANCE.getSQLDataTypesPackage().getUserDefinedType().getInstanceClassName());
+		
+		if (loader != null) {
+			JDBCUDTSuperTypeLoader superTypeLoader = (JDBCUDTSuperTypeLoader) loader;
+			superTypeLoader.setCatalogObject(this);
+			return superTypeLoader;
+		}
+		return new JDBCUDTSuperTypeLoader(this);
+	}
+
+	protected final JDBCUDTSuperTypeLoader getSuperLoader() {
+		if (superLoaderRef == null || superLoaderRef.get() == null) {
+			superLoaderRef = new SoftReference(createSuperLoader());
+		}
+		return (JDBCUDTSuperTypeLoader) superLoaderRef.get();
+	}
+
+	private void loadSuper() {
+		try {
+			UserDefinedType udt = getSuperLoader().loadSuperType();
+			if (udt instanceof StructuredUserDefinedType) {
+				setSuper((StructuredUserDefinedType) udt);
+			}
+			superLoaded = Boolean.TRUE;
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		switch (eDerivedStructuralFeatureID(eFeature)) {
+		case SQLDataTypesPackage.STRUCTURED_USER_DEFINED_TYPE__ATTRIBUTES:
+			getAttributes();
+			break;
+		case SQLDataTypesPackage.STRUCTURED_USER_DEFINED_TYPE__SUPER:
+			getSuper();
+			break;
+		}
+
+		return super.eIsSet(eFeature);
+	}
+
+	private Boolean attributesLoaded = Boolean.FALSE;
+	private SoftReference paremeterLoaderRef;
+	private Boolean superLoaded = Boolean.FALSE;
+	private SoftReference superLoaderRef;
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCTable.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCTable.java
new file mode 100644
index 0000000..8ef5153
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCTable.java
@@ -0,0 +1,604 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.rte.jdbc;
+
+import java.lang.ref.SoftReference;
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Vector;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.core.util.CatalogLoaderOverrideManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCBaseLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableColumnLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableConstraintLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableIndexLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableSuperTableLoader;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.constraints.Constraint;
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.constraints.IncrementType;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.IndexMember;
+import org.eclipse.datatools.modelbase.sql.constraints.PrimaryKey;
+import org.eclipse.datatools.modelbase.sql.constraints.SQLConstraintsPackage;
+import org.eclipse.datatools.modelbase.sql.constraints.UniqueConstraint;
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+import org.eclipse.datatools.modelbase.sql.schema.Catalog;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.impl.PersistentTableImpl;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+
+public class JDBCTable extends PersistentTableImpl implements ICatalogObject {
+
+	private static final long serialVersionUID = 1122783015230966825L;
+
+
+	public Connection getConnection() {
+		Database db = this.getCatalogDatabase();
+		if (db instanceof ICatalogObject) {
+			return ((ICatalogObject) db).getConnection();
+		}
+		return null;
+	}
+	
+	public Database getCatalogDatabase() {
+		return this.getSchema().getCatalog().getDatabase();		
+	}
+	
+	public void refresh() {
+		synchronized (columnsLoaded) {
+			if (columnsLoaded.booleanValue()) {
+				columnsLoaded = Boolean.FALSE;
+			}
+		}
+		synchronized (ucsLoaded) {
+			if (ucsLoaded.booleanValue()) {
+				pkLoaded = Boolean.FALSE;
+				ucsLoaded = Boolean.FALSE;
+			}
+		}
+		synchronized (fksLoaded) {
+			if (fksLoaded.booleanValue()) {
+				fksLoaded = Boolean.FALSE;
+			}
+		}
+		synchronized (indexesLoaded) {
+			if (indexesLoaded.booleanValue()) {
+				indexesLoaded = Boolean.FALSE;
+			}
+		}
+		synchronized (supertableLoaded) {
+			if (supertableLoaded.booleanValue()) {
+				supertableLoaded = Boolean.FALSE;
+				setSupertable(null);
+			}
+		}
+
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public EList getColumns(){
+		synchronized (columnsLoaded) {
+			if (!columnsLoaded.booleanValue())
+				loadColumns();
+		}
+		return super.getColumns();
+	}
+
+	protected JDBCTableColumnLoader createColumnLoader() {
+		DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().
+			getDefinition(this.getCatalogDatabase());
+	
+		JDBCBaseLoader loader =
+			CatalogLoaderOverrideManager.INSTANCE.getLoaderForDatabase(databaseDefinition, 
+					SQLTablesPackage.eINSTANCE.getColumn().getInstanceClassName());
+		
+		if (loader != null) {
+			JDBCTableColumnLoader tableColumnLoader = (JDBCTableColumnLoader) loader;
+			tableColumnLoader.setCatalogObject(this);
+			return tableColumnLoader;
+		}
+		return new JDBCTableColumnLoader(this);
+	}
+
+	protected final JDBCTableColumnLoader getColumnLoader() {
+		if (columnLoaderRef == null || columnLoaderRef.get() == null) {
+			columnLoaderRef = new SoftReference(createColumnLoader());
+		}
+		return (JDBCTableColumnLoader) columnLoaderRef.get();
+	}
+
+	private void loadColumns() {
+		boolean deliver = eDeliver();
+		try {
+			List container = super.getColumns();
+			List existingColumns = new ArrayList(container);
+
+			eSetDeliver(false);
+
+			container.clear();
+
+			getColumnLoader().loadColumns(container, existingColumns);
+
+			getColumnLoader().clearColumns(existingColumns);
+
+			columnsLoaded = Boolean.TRUE;
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		finally {
+			eSetDeliver(deliver);
+		}
+	}
+
+	public PrimaryKey getPrimaryKey() {
+		synchronized (ucsLoaded) {
+			if (!pkLoaded.booleanValue())
+				loadUniqueConstraints();
+		}
+		return internalGetPrimaryKey(super.getConstraints());
+	}
+
+	public List getUniqueConstraints() {
+		synchronized (ucsLoaded) {
+			if (!ucsLoaded.booleanValue())
+				loadUniqueConstraints();
+		}
+		return internalGetUniqueConstraints(super.getConstraints());
+	}
+
+	public List getForeignKeys() {
+		synchronized (fksLoaded) {
+			if (!fksLoaded.booleanValue())
+				loadForeignKeys();
+		}
+		return internalGetForeignKeys(super.getConstraints());
+	}
+
+	public EList getConstraints() {
+		synchronized (ucsLoaded) {
+			if (!ucsLoaded.booleanValue())
+				loadUniqueConstraints();
+		}
+		synchronized (fksLoaded) {
+			if (!fksLoaded.booleanValue())
+				loadForeignKeys();
+		}
+		return super.getConstraints();
+	}
+
+	protected JDBCTableConstraintLoader createConstraintLoader() {
+		DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().
+			getDefinition(this.getCatalogDatabase());
+	
+		JDBCBaseLoader loader =
+			CatalogLoaderOverrideManager.INSTANCE.getLoaderForDatabase(databaseDefinition, 
+					SQLConstraintsPackage.eINSTANCE.getTableConstraint().getInstanceClassName());
+		
+		if (loader != null) {
+			JDBCTableConstraintLoader tableConstraintLoader = (JDBCTableConstraintLoader) loader;
+			tableConstraintLoader.setCatalogObject(this);
+			return tableConstraintLoader;
+		}
+		return new JDBCTableConstraintLoader(this);
+	}
+
+	protected final JDBCTableConstraintLoader getConstraintLoader() {
+		if (constraintLoaderRef == null || constraintLoaderRef.get() == null) {
+			constraintLoaderRef = new SoftReference(createConstraintLoader());
+		}
+		return (JDBCTableConstraintLoader) constraintLoaderRef.get();
+	}
+
+	private void loadUniqueConstraints() {
+		boolean deliver = eDeliver();
+		try {
+			List container = super.getConstraints();
+			PrimaryKey existingPK = internalGetPrimaryKey(container);
+			PrimaryKey pk = getConstraintLoader().loadPrimaryKey(existingPK);
+			if (pk != null) {
+				if (existingPK == null) {
+					container.add(0, pk);
+				}
+				else if (!pk.equals(existingPK)) {
+					container.set(container.indexOf(existingPK), pk);
+				}
+				// else PK didn't change
+			}
+			else if (existingPK != null) {
+				container.remove(existingPK);
+			}
+			pkLoaded = Boolean.TRUE;
+
+			List existingUCs = internalGetUniqueConstraints(container);
+			if (pk != null) {
+				existingUCs.remove(pk);
+			}
+			container.removeAll(existingUCs);
+			getConstraintLoader().loadUniqueConstraints(getPrimaryKey(),
+					container, existingUCs);
+			ucsLoaded = Boolean.TRUE;
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		finally {
+			eSetDeliver(deliver);
+		}
+	}
+	
+	private void loadForeignKeys() {
+		boolean deliver = eDeliver();
+		try {
+			List container = super.getConstraints();
+			List existingFKs = internalGetForeignKeys(container);
+			container.removeAll(existingFKs);
+			getConstraintLoader().loadForeignKeys(container, existingFKs);
+			fksLoaded = Boolean.TRUE;
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		finally {
+			eSetDeliver(deliver);
+		}
+	}
+	
+	public EList getIndex() {
+		synchronized (indexesLoaded) {
+			if (!indexesLoaded.booleanValue())
+				loadIndexes();
+		}
+		return super.getIndex();
+	}
+
+	protected JDBCTableIndexLoader createIndexLoader() {
+		DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().
+			getDefinition(this.getCatalogDatabase());
+	
+		JDBCBaseLoader loader =
+			CatalogLoaderOverrideManager.INSTANCE.getLoaderForDatabase(databaseDefinition, 
+					SQLConstraintsPackage.eINSTANCE.getIndex().getInstanceClassName());
+		
+		if (loader != null) {
+			JDBCTableIndexLoader tableIndexLoader = (JDBCTableIndexLoader) loader;
+			tableIndexLoader.setCatalogObject(this);
+			return tableIndexLoader;
+		}
+		return new JDBCTableIndexLoader(this);
+	}
+
+	protected final JDBCTableIndexLoader getIndexLoader() {
+		if (indexLoaderRef == null || indexLoaderRef.get() == null) {
+			indexLoaderRef = new SoftReference(createIndexLoader());
+		}
+		return (JDBCTableIndexLoader) indexLoaderRef.get();
+	}
+
+	private void loadIndexes() {
+		boolean deliver = eDeliver();
+		try {
+			List container = super.getIndex();
+			List existingIndexes = new ArrayList(container);
+			
+			eSetDeliver(false);
+
+			container.clear();
+
+			getIndexLoader().loadIndexes(container, existingIndexes);
+
+			getIndexLoader().clearIndexes(existingIndexes);
+
+			indexesLoaded = Boolean.TRUE;
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+		finally {
+			eSetDeliver(deliver);
+		}
+	}
+	
+	public Table getSupertable() {
+		synchronized (supertableLoaded) {
+			if (!supertableLoaded.booleanValue())
+				loadSupertable();
+		}
+		return super.getSupertable();
+	}
+
+	protected JDBCTableSuperTableLoader createSupertableLoader() {
+		DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().
+			getDefinition(this.getCatalogDatabase());
+	
+		JDBCBaseLoader loader =
+			CatalogLoaderOverrideManager.INSTANCE.getLoaderForDatabase(databaseDefinition, 
+					SQLTablesPackage.eINSTANCE.getTable().getInstanceClassName());
+		
+		if ((loader != null) && (loader instanceof JDBCTableSuperTableLoader)) { 
+			JDBCTableSuperTableLoader tableSuperTableLoader = (JDBCTableSuperTableLoader) loader;
+			tableSuperTableLoader.setCatalogObject(this);
+			return tableSuperTableLoader;
+		}
+		return new JDBCTableSuperTableLoader(this);
+	}
+
+	protected final JDBCTableSuperTableLoader getSupertableLoader() {
+		if (supertableLoaderRef == null || supertableLoaderRef.get() == null) {
+			supertableLoaderRef = new SoftReference(createSupertableLoader());
+		}
+		return (JDBCTableSuperTableLoader) supertableLoaderRef.get();
+	}
+
+	protected void loadSupertable() { 
+		try {
+			setSupertable(getSupertableLoader().loadSuperTable());
+			supertableLoaded = Boolean.TRUE;
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	private PrimaryKey internalGetPrimaryKey(Collection constraints) {
+		for( Iterator it = constraints.iterator(); it.hasNext(); ) {
+			Constraint currentConstraint = (Constraint)it.next();
+			if (currentConstraint instanceof PrimaryKey) {
+				return (PrimaryKey)currentConstraint;
+			}
+		}
+		return null;
+	}
+	
+	private List internalGetUniqueConstraints(Collection constraints) {
+		Vector uniqueConstraints = new Vector();
+		for( Iterator it = constraints.iterator(); it.hasNext(); ) {
+			Constraint currentConstraint = (Constraint)it.next();
+			if (currentConstraint instanceof UniqueConstraint) {
+				uniqueConstraints.add(currentConstraint);
+			}
+		}
+		return uniqueConstraints;
+	}
+	
+	private List internalGetForeignKeys(Collection constraints) {
+		Vector uniqueConstraints = new Vector();
+		for( Iterator it = constraints.iterator(); it.hasNext(); ) {
+			Constraint currentConstraint = (Constraint)it.next();
+			if (currentConstraint instanceof ForeignKey) {
+				uniqueConstraints.add(currentConstraint);
+			}
+		}
+		return uniqueConstraints;
+	}
+	
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		switch (eDerivedStructuralFeatureID(eFeature)) {
+		case SQLTablesPackage.PERSISTENT_TABLE__COLUMNS:
+			getColumns();
+			break;
+		case SQLTablesPackage.PERSISTENT_TABLE__CONSTRAINTS:
+			getConstraints();
+			break;
+		case SQLTablesPackage.PERSISTENT_TABLE__INDEX:
+			getIndex();
+			break;
+		case SQLTablesPackage.PERSISTENT_TABLE__SUPERTABLE:
+			getSupertable();
+		}
+		return super.eIsSet(eFeature);
+	}
+	
+	private Boolean columnsLoaded = Boolean.FALSE;
+	private SoftReference columnLoaderRef;
+	private Boolean pkLoaded = Boolean.FALSE;
+	private Boolean ucsLoaded = Boolean.FALSE;
+	private Boolean fksLoaded = Boolean.FALSE;
+	private SoftReference constraintLoaderRef;
+	private Boolean indexesLoaded = Boolean.FALSE;
+	private SoftReference indexLoaderRef;
+	protected Boolean supertableLoaded = Boolean.FALSE; 
+	private SoftReference supertableLoaderRef;
+	private Boolean subTablesLoaded = Boolean.FALSE;
+
+	
+	/**
+	 * @deprecated
+	 */
+	public static void loadColumns(Connection connection, EList columnList, Table table) throws SQLException {
+		final Schema schema = table.getSchema();
+		final Database database = schema.getDatabase();
+		final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+		final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+
+		Object[] list = columnList.toArray();
+		columnList.clear();
+		
+		try {
+			DatabaseMetaData metaData = connection.getMetaData();
+			ResultSet r = metaData.getColumns(null, schema.getName(), table.getName(), null);
+			while(r.next()) {
+				final String columnName = r.getString(4);
+
+				Object element = JDBCTable.findElement(list, columnName,SQLTablesPackage.eINSTANCE.getColumn());
+				
+				Column column;
+				if (element != null){
+					column = (Column) element;
+					((ICatalogObject)element).refresh();
+				} else {
+					column = new JDBCColumn();
+					column.setName(columnName);
+				}	
+				
+				final String remarks = r.getString(12);
+				column.setDescription(remarks);
+
+				String defaultValue = r.getString(13);
+				column.setDefaultValue(defaultValue);
+
+				String typeName = r.getString(6);
+				
+				PredefinedDataTypeDefinition typeDefinition = databaseDefinition.getPredefinedDataTypeDefinition(typeName);
+				if(typeDefinition != null) {
+					PredefinedDataType type = databaseDefinition.getPredefinedDataType(typeDefinition);
+					if(typeDefinition.isLengthSupported()) {
+						EStructuralFeature feature = type.eClass().getEStructuralFeature("length");  //$NON-NLS-1$
+						type.eSet(feature, new Integer(r.getInt(7)));
+					}
+					else if(typeDefinition.isPrecisionSupported()) {
+						EStructuralFeature feature = type.eClass().getEStructuralFeature("precision"); //$NON-NLS-1$
+						type.eSet(feature, new Integer(r.getInt(10)));
+					}
+					
+					if(typeDefinition.isScaleSupported()) {
+						EStructuralFeature feature = type.eClass().getEStructuralFeature("scale"); //$NON-NLS-1$
+						type.eSet(feature, new Integer(r.getInt(9)));
+					}
+					column.setContainedType(type);
+				}
+				else {
+					System.out.println("Unresolved datatype: " + typeName); //$NON-NLS-1$
+					Iterator it = databaseDefinition.getPredefinedDataTypes();
+					while (it.hasNext()) {
+						PredefinedDataTypeDefinition datatype = (PredefinedDataTypeDefinition)it.next();
+						PredefinedDataType type = databaseDefinition.getPredefinedDataType(datatype);
+						column.setContainedType(type);
+						break;
+					}
+				}
+
+				final String nulls = r.getString(18);
+				if(nulls.equals("YES")) column.setNullable(true);  //$NON-NLS-1$
+				else column.setNullable(false);
+
+				columnList.add(column);
+			}
+			r.close();
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		
+	}
+	
+	/**
+	 * @deprecated
+	 */
+	public static void loadIndexes(Connection connection, EList indexList, Table table) throws SQLException {
+		try {
+			final Schema schema = table.getSchema();
+			final Catalog catalog = schema.getCatalog();
+			final Database database = catalog.getDatabase();
+			final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+			final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+			
+			DatabaseMetaData metaData = connection.getMetaData();
+			ResultSet r = metaData.getIndexInfo(null,schema.getName(),table.getName(),false,false);
+			Index index = null;
+			String indexName=""; //$NON-NLS-1$
+			while(r.next()) {
+				final String indName = r.getString(6);
+				if (indName == null) continue;
+				if (!indName.equals(indexName)){
+					indexName = indName;
+					index = new JDBCIndex();
+					index.setName(indName);
+	
+					final String indSchema = r.getString(2);
+					index.setSchema(JDBCTable.getSchema(table,indSchema));
+
+					final boolean isUnqiue = !r.getBoolean(4);
+					index.setUnique(isUnqiue);
+
+					final short type = r.getShort(7);
+					if (type == DatabaseMetaData.tableIndexClustered) {
+						index.setClustered(true);
+					}
+					
+					indexList.add(index);
+				}
+				final String column_name= r.getString(9);
+				if (column_name !=null){
+					IndexMember member = (IndexMember) factory.create(SQLConstraintsPackage.eINSTANCE.getIndexMember()); 
+					member.setColumn(JDBCTable.getColumn(table,column_name));
+					final String order = r.getString(10);
+					if (order != null) {
+						if(order.equals("A"))  //$NON-NLS-1$
+							member.setIncrementType(IncrementType.ASC_LITERAL);
+						else if(order.equals("D"))  //$NON-NLS-1$
+							member.setIncrementType(IncrementType.DESC_LITERAL);
+					}
+					index.getMembers().add(member);
+				}
+				
+			}
+			r.close();
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	private static Object findElement(Object[] list, String name,EClass metaclass){
+		Object object = null;
+		for (int i = 0; i < list.length; i++){
+			SQLObject sqlObject = (SQLObject) list[i];
+			if (sqlObject.getName().equals(name) && sqlObject.eClass() == metaclass){
+				object = list[i];
+				break;
+			}
+		}
+		return object;
+	}
+	
+	private static Schema getSchema(Table table, String schemaName) {
+		Schema s = table.getSchema();
+		if(s.getName().equals(schemaName)) return s;
+		Database d = s.getDatabase();
+		Iterator it = d.getSchemas().iterator();
+		while(it.hasNext()) {
+			s = (Schema) it.next();
+			if(s.getName().equals(schemaName)) return s;
+		}
+		return null;
+	}
+
+	private static Column getColumn(Table table,String columnName) {
+		Iterator it = table.getColumns().iterator();
+		while(it.hasNext()) {
+			Column c = (Column) it.next();
+			if(c.getName().equals(columnName)) return c;
+		}
+		return null;
+	}
+	
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCTemporaryTable.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCTemporaryTable.java
new file mode 100644
index 0000000..798c4d0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCTemporaryTable.java
@@ -0,0 +1,630 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.rte.jdbc;
+
+import java.lang.ref.SoftReference;
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.Vector;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.core.util.CatalogLoaderOverrideManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCBaseLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableColumnLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableConstraintLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableIndexLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableSuperTableLoader;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.constraints.Constraint;
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.constraints.IncrementType;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.IndexMember;
+import org.eclipse.datatools.modelbase.sql.constraints.PrimaryKey;
+import org.eclipse.datatools.modelbase.sql.constraints.SQLConstraintsPackage;
+import org.eclipse.datatools.modelbase.sql.constraints.UniqueConstraint;
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.impl.TemporaryTableImpl;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+
+public class JDBCTemporaryTable extends TemporaryTableImpl implements ICatalogObject {
+
+	private static final long serialVersionUID = 8448936502194536715L;
+
+	public Database getCatalogDatabase() {
+		return getSchema().getCatalog().getDatabase();
+	}
+
+	public Connection getConnection() {
+		Database db = getCatalogDatabase();
+		if (db instanceof ICatalogObject) {
+			return ((ICatalogObject) db).getConnection();
+		}
+		return null;
+	}
+
+	public void refresh() {
+		synchronized (columnsLoaded) {
+			if (columnsLoaded.booleanValue()) {
+				columnsLoaded = Boolean.FALSE;
+			}
+		}
+		synchronized (ucsLoaded) {
+			if (ucsLoaded.booleanValue()) {
+				pkLoaded = Boolean.FALSE;
+				ucsLoaded = Boolean.FALSE;
+			}
+		}
+		synchronized (fksLoaded) {
+			if (fksLoaded.booleanValue()) {
+				fksLoaded = Boolean.FALSE;
+			}
+		}
+		synchronized (indexesLoaded) {
+			if (indexesLoaded.booleanValue()) {
+				indexesLoaded = Boolean.FALSE;
+			}
+		}
+		synchronized (supertableLoaded) {
+			if (supertableLoaded.booleanValue()) {
+				supertableLoaded = Boolean.FALSE;
+				setSupertable(null);
+			}
+		}
+
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public EList getColumns(){
+		synchronized (columnsLoaded) {
+			if (!columnsLoaded.booleanValue())
+				loadColumns();
+		}
+		return super.getColumns();
+	}
+
+	protected JDBCTableColumnLoader createColumnLoader() {
+		DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().
+			getDefinition(this.getCatalogDatabase());
+	
+		JDBCBaseLoader loader =
+			CatalogLoaderOverrideManager.INSTANCE.getLoaderForDatabase(databaseDefinition, 
+					SQLTablesPackage.eINSTANCE.getColumn().getInstanceClassName());
+		
+		if (loader != null) {
+			JDBCTableColumnLoader tableColumnLoader = (JDBCTableColumnLoader) loader;
+			tableColumnLoader.setCatalogObject(this);
+			return tableColumnLoader;
+		}
+		return new JDBCTableColumnLoader(this);
+	}
+
+	protected final JDBCTableColumnLoader getColumnLoader() {
+		if (columnLoaderRef == null || columnLoaderRef.get() == null) {
+			columnLoaderRef = new SoftReference(createColumnLoader());
+		}
+		return (JDBCTableColumnLoader) columnLoaderRef.get();
+	}
+
+	private void loadColumns() {
+		boolean deliver = eDeliver();
+		try {
+			List container = super.getColumns();
+			List existingColumns = new ArrayList(container);
+
+			eSetDeliver(false);
+
+			container.clear();
+
+			getColumnLoader().loadColumns(container, existingColumns);
+
+			getColumnLoader().clearColumns(existingColumns);
+
+			columnsLoaded = Boolean.TRUE;
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		finally {
+			eSetDeliver(deliver);
+		}
+	}
+
+	public PrimaryKey getPrimaryKey() {
+		synchronized (ucsLoaded) {
+			if (!pkLoaded.booleanValue())
+				loadUniqueConstraints();
+		}
+		return internalGetPrimaryKey(super.getConstraints());
+	}
+
+	public List getUniqueConstraints() {
+		synchronized (ucsLoaded) {
+			if (!ucsLoaded.booleanValue())
+				loadUniqueConstraints();
+		}
+		return internalGetUniqueConstraints(super.getConstraints());
+	}
+
+	public List getForeignKeys() {
+		synchronized (fksLoaded) {
+			if (!fksLoaded.booleanValue())
+				loadForeignKeys();
+		}
+		return internalGetForeignKeys(super.getConstraints());
+	}
+
+	public EList getConstraints() {
+		synchronized (ucsLoaded) {
+			if (!ucsLoaded.booleanValue())
+				loadUniqueConstraints();
+		}
+		synchronized (fksLoaded) {
+			if (!fksLoaded.booleanValue())
+				loadForeignKeys();
+		}
+		return super.getConstraints();
+	}
+
+	protected JDBCTableConstraintLoader createConstraintLoader() {
+		DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().
+			getDefinition(this.getCatalogDatabase());
+	
+		JDBCBaseLoader loader =
+			CatalogLoaderOverrideManager.INSTANCE.getLoaderForDatabase(databaseDefinition, 
+					SQLConstraintsPackage.eINSTANCE.getTableConstraint().getInstanceClassName());
+		
+		if (loader != null) {
+			JDBCTableConstraintLoader tableConstraintLoader = (JDBCTableConstraintLoader) loader;
+			tableConstraintLoader.setCatalogObject(this);
+			return tableConstraintLoader;
+		}
+		return new JDBCTableConstraintLoader(this);
+	}
+
+	protected final JDBCTableConstraintLoader getConstraintLoader() {
+		if (constraintLoaderRef == null || constraintLoaderRef.get() == null) {
+			constraintLoaderRef = new SoftReference(createConstraintLoader());
+		}
+		return (JDBCTableConstraintLoader) constraintLoaderRef.get();
+	}
+
+	private void loadUniqueConstraints() {
+		boolean deliver = eDeliver();
+		try {
+			List container = super.getConstraints();
+			PrimaryKey existingPK = internalGetPrimaryKey(container);
+			PrimaryKey pk = getConstraintLoader().loadPrimaryKey(existingPK);
+			if (pk != null) {
+				if (existingPK == null) {
+					container.add(0, pk);
+				}
+				else if (!pk.equals(existingPK)) {
+					container.set(container.indexOf(existingPK), pk);
+				}
+				// else PK didn't change
+			}
+			else if (existingPK != null) {
+				container.remove(existingPK);
+			}
+			pkLoaded = Boolean.TRUE;
+
+			List existingUCs = internalGetUniqueConstraints(container);
+			container.removeAll(existingUCs);
+			getConstraintLoader().loadUniqueConstraints(getPrimaryKey(),
+					container, existingUCs);
+			ucsLoaded = Boolean.TRUE;
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		finally {
+			eSetDeliver(deliver);
+		}
+	}
+	
+	private void loadForeignKeys() {
+		boolean deliver = eDeliver();
+		try {
+			List container = super.getConstraints();
+			List existingFKs = internalGetForeignKeys(container);
+			container.removeAll(existingFKs);
+			getConstraintLoader().loadForeignKeys(container, existingFKs);
+			fksLoaded = Boolean.TRUE;
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		finally {
+			eSetDeliver(deliver);
+		}
+	}
+	
+	public EList getIndex() {
+		synchronized (indexesLoaded) {
+			if (!indexesLoaded.booleanValue())
+				loadIndexes();
+		}
+		return super.getIndex();
+	}
+
+	protected JDBCTableIndexLoader createIndexLoader() {
+		DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().
+			getDefinition(this.getCatalogDatabase());
+	
+		JDBCBaseLoader loader =
+			CatalogLoaderOverrideManager.INSTANCE.getLoaderForDatabase(databaseDefinition, 
+					SQLConstraintsPackage.eINSTANCE.getIndex().getInstanceClassName());
+		
+		if (loader != null) {
+			JDBCTableIndexLoader tableIndexLoader = (JDBCTableIndexLoader) loader;
+			tableIndexLoader.setCatalogObject(this);
+			return tableIndexLoader;
+		}
+		return new JDBCTableIndexLoader(this);
+	}
+
+	protected final JDBCTableIndexLoader getIndexLoader() {
+		if (indexLoaderRef == null || indexLoaderRef.get() == null) {
+			indexLoaderRef = new SoftReference(createIndexLoader());
+		}
+		return (JDBCTableIndexLoader) indexLoaderRef.get();
+	}
+
+	private void loadIndexes() {
+		boolean deliver = eDeliver();
+		try {
+			List container = super.getIndex();
+			List existingIndexes = new ArrayList(container);
+			
+			eSetDeliver(false);
+
+			container.clear();
+
+			getIndexLoader().loadIndexes(container, existingIndexes);
+
+			getIndexLoader().clearIndexes(existingIndexes);
+
+			indexesLoaded = Boolean.TRUE;
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+		finally {
+			eSetDeliver(deliver);
+		}
+	}
+	
+	public Table getSupertable() {
+		synchronized (supertableLoaded) {
+			if (!supertableLoaded.booleanValue())
+				loadSupertable();
+		}
+		return super.getSupertable();
+	}
+
+	protected JDBCTableSuperTableLoader createSupertableLoader() {
+		DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().
+			getDefinition(this.getCatalogDatabase());
+	
+		JDBCBaseLoader loader =
+			CatalogLoaderOverrideManager.INSTANCE.getLoaderForDatabase(databaseDefinition, 
+					SQLTablesPackage.eINSTANCE.getTable().getInstanceClassName());
+		
+		if (loader != null) {
+			JDBCTableSuperTableLoader tableSuperTableLoader = (JDBCTableSuperTableLoader) loader;
+			tableSuperTableLoader.setCatalogObject(this);
+			return tableSuperTableLoader;
+		}
+		return new JDBCTableSuperTableLoader(this);
+	}
+
+	protected final JDBCTableSuperTableLoader getSupertableLoader() {
+		if (supertableLoaderRef == null || supertableLoaderRef.get() == null) {
+			supertableLoaderRef = new SoftReference(createSupertableLoader());
+		}
+		return (JDBCTableSuperTableLoader) supertableLoaderRef.get();
+	}
+
+	private void loadSupertable() {
+		try {
+			setSupertable(getSupertableLoader().loadSuperTable());
+			supertableLoaded = Boolean.TRUE;
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	private PrimaryKey internalGetPrimaryKey(Collection constraints) {
+		for( Iterator it = constraints.iterator(); it.hasNext(); ) {
+			Constraint currentConstraint = (Constraint)it.next();
+			if (currentConstraint instanceof PrimaryKey) {
+				return (PrimaryKey)currentConstraint;
+			}
+		}
+		return null;
+	}
+	
+	private List internalGetUniqueConstraints(Collection constraints) {
+		Vector uniqueConstraints = new Vector();
+		for( Iterator it = constraints.iterator(); it.hasNext(); ) {
+			Constraint currentConstraint = (Constraint)it.next();
+			if (currentConstraint instanceof UniqueConstraint) {
+				uniqueConstraints.add(currentConstraint);
+			}
+		}
+		return uniqueConstraints;
+	}
+	
+	private List internalGetForeignKeys(Collection constraints) {
+		Vector uniqueConstraints = new Vector();
+		for( Iterator it = constraints.iterator(); it.hasNext(); ) {
+			Constraint currentConstraint = (Constraint)it.next();
+			if (currentConstraint instanceof ForeignKey) {
+				uniqueConstraints.add(currentConstraint);
+			}
+		}
+		return uniqueConstraints;
+	}
+	
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		switch (eDerivedStructuralFeatureID(eFeature)) {
+		case SQLTablesPackage.TEMPORARY_TABLE__COLUMNS:
+			getColumns();
+			break;
+		case SQLTablesPackage.TEMPORARY_TABLE__CONSTRAINTS:
+			getConstraints();
+			break;
+		case SQLTablesPackage.TEMPORARY_TABLE__INDEX:
+			getIndex();
+			break;
+		case SQLTablesPackage.TEMPORARY_TABLE__SUPERTABLE:
+			getSupertable();
+			break;
+		}
+
+		return super.eIsSet(eFeature);
+	}
+	
+	private Boolean columnsLoaded = Boolean.FALSE;
+	private SoftReference columnLoaderRef;
+	private Boolean pkLoaded = Boolean.FALSE;
+	private Boolean ucsLoaded = Boolean.FALSE;
+	private Boolean fksLoaded = Boolean.FALSE;
+	private SoftReference constraintLoaderRef;
+	private Boolean indexesLoaded = Boolean.FALSE;
+	private SoftReference indexLoaderRef;
+	private Boolean supertableLoaded = Boolean.FALSE;
+	private SoftReference supertableLoaderRef;
+
+	/**
+	 * @deprecated
+	 */
+	public static void loadColumns(Connection connection, EList columnList, Table table) throws SQLException {
+		final Schema schema = table.getSchema();
+		final Database database = schema.getDatabase();
+		final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+		final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+
+		Object[] list = columnList.toArray();
+		columnList.clear();
+		
+		try {
+			DatabaseMetaData metaData = connection.getMetaData();
+			ResultSet r = metaData.getColumns(null, schema.getName(), table.getName(), null);
+			while(r.next()) {
+				final String columnName = r.getString(4);
+
+				Object element = JDBCTemporaryTable.findElement(list, columnName,SQLTablesPackage.eINSTANCE.getColumn());
+				
+				Column column;
+				if (element != null){
+					column = (Column) element;
+					((ICatalogObject)element).refresh();
+				} else {
+					column = new JDBCColumn();
+					column.setName(columnName);
+				}	
+				
+				final String remarks = r.getString(12);
+				column.setDescription(remarks);
+
+				String defaultValue = r.getString(13);
+				column.setDefaultValue(defaultValue);
+
+				String typeName = r.getString(6);
+				
+				PredefinedDataTypeDefinition typeDefinition = databaseDefinition.getPredefinedDataTypeDefinition(typeName);
+				if(typeDefinition != null) {
+					PredefinedDataType type = databaseDefinition.getPredefinedDataType(typeDefinition);
+					if(typeDefinition.isLengthSupported()) {
+						EStructuralFeature feature = type.eClass().getEStructuralFeature("length");  //$NON-NLS-1$
+						type.eSet(feature, new Integer(r.getInt(7)));
+					}
+					else if(typeDefinition.isPrecisionSupported()) {
+						EStructuralFeature feature = type.eClass().getEStructuralFeature("precision"); //$NON-NLS-1$
+						type.eSet(feature, new Integer(r.getInt(10)));
+					}
+					
+					if(typeDefinition.isScaleSupported()) {
+						EStructuralFeature feature = type.eClass().getEStructuralFeature("scale"); //$NON-NLS-1$
+						type.eSet(feature, new Integer(r.getInt(9)));
+					}
+					column.setContainedType(type);
+				}
+				else {
+					System.out.println("Unresolved datatype: " + typeName); //$NON-NLS-1$
+					Iterator it = databaseDefinition.getPredefinedDataTypes();
+					while (it.hasNext()) {
+						PredefinedDataTypeDefinition datatype = (PredefinedDataTypeDefinition)it.next();
+						PredefinedDataType type = databaseDefinition.getPredefinedDataType(datatype);
+						column.setContainedType(type);
+						break;
+					}
+				}
+
+				final String nulls = r.getString(18);
+				if(nulls.equals("YES")) column.setNullable(true);  //$NON-NLS-1$
+				else column.setNullable(false);
+
+				columnList.add(column);
+			}
+			r.close();
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		
+	}
+	
+	/**
+	 * @deprecated
+	 */
+	public static void loadIndexes(Connection connection, EList indexList, Table table) throws SQLException {
+		try {
+			final Schema schema = table.getSchema();
+			final Database database = schema.getDatabase();
+			final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+			final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+			
+			DatabaseMetaData metaData = connection.getMetaData();
+			ResultSet r = metaData.getIndexInfo(null,schema.getName(),table.getName(),false,false);
+			Index index = null;
+			String indexName=""; //$NON-NLS-1$
+			while(r.next()) {
+				final String indName = r.getString(6);
+				if (indName == null) continue;
+				if (!indName.equals(indexName)){
+					indexName = indName;
+					index = new JDBCIndex();
+					index.setName(indName);
+	
+					final String indSchema = r.getString(2);
+					index.setSchema(JDBCTemporaryTable.getSchema(table,indSchema));
+
+					final boolean isUnqiue = !r.getBoolean(4);
+					index.setUnique(isUnqiue);
+
+					final short type = r.getShort(7);
+					if (type == DatabaseMetaData.tableIndexClustered) {
+						index.setClustered(true);
+					}
+					
+					indexList.add(index);
+				}
+				final String column_name= r.getString(9);
+				if (column_name !=null){
+					IndexMember member = (IndexMember) factory.create(SQLConstraintsPackage.eINSTANCE.getIndexMember()); 
+					member.setColumn(JDBCTemporaryTable.getColumn(table,column_name));
+					final String order = r.getString(10);
+					if (order != null) {
+						if(order.equals("A"))  //$NON-NLS-1$
+							member.setIncrementType(IncrementType.ASC_LITERAL);
+						else if(order.equals("D"))  //$NON-NLS-1$
+							member.setIncrementType(IncrementType.DESC_LITERAL);
+					}
+					index.getMembers().add(member);
+				}
+				
+			}
+			r.close();
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	private static Object findElement(Object[] list, String name,EClass metaclass){
+		Object object = null;
+		for (int i = 0; i < list.length; i++){
+			SQLObject sqlObject = (SQLObject) list[i];
+			if (sqlObject.getName().equals(name) && sqlObject.eClass() == metaclass){
+				object = list[i];
+				break;
+			}
+		}
+		return object;
+	}
+	
+	private static Schema getSchema(Table table, String schemaName) {
+		Schema s = table.getSchema();
+		if(s.getName().equals(schemaName)) return s;
+		Database d = s.getDatabase();
+		Iterator it = d.getSchemas().iterator();
+		while(it.hasNext()) {
+			s = (Schema) it.next();
+			if(s.getName().equals(schemaName)) return s;
+		}
+		return null;
+	}
+
+	private static Column getColumn(Table table,String columnName) {
+		Iterator it = table.getColumns().iterator();
+		while(it.hasNext()) {
+			Column c = (Column) it.next();
+			if(c.getName().equals(columnName)) return c;
+		}
+		return null;
+	}
+	
+	
+	private static class KeyColumnCollection {
+		public KeyColumnCollection(BaseTable table) {
+			this.table = table;
+		}
+		
+		public void add(int seq, String name) {
+			Column column = this.getColumn(name);
+			String key = "k" + seq; //$NON-NLS-1$
+			this.keyMap.put(key, column);
+		}
+		
+		public Iterator iterator() {
+			return keyMap.values().iterator();
+		}
+		
+		private Column getColumn(String name) {
+			Iterator it = this.table.getColumns().iterator();
+			while(it.hasNext()) {
+				Column column = (Column) it.next();
+				if(column.getName().equals(name)) return column;
+			}
+			return null;
+		}
+		
+		private Map keyMap = new TreeMap();
+		private BaseTable table;
+	}
+	
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCUniqueConstraint.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCUniqueConstraint.java
new file mode 100644
index 0000000..82fc355
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCUniqueConstraint.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     brianf - fixed issue with UniqueConstraint extending PrimaryKey instead
+ *     	of UniqueConstraint for bug 264717
+ *******************************************************************************/
+
+package org.eclipse.datatools.connectivity.sqm.core.rte.jdbc;
+
+import java.sql.Connection;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.modelbase.sql.constraints.impl.UniqueConstraintImpl;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+
+public class JDBCUniqueConstraint extends UniqueConstraintImpl implements ICatalogObject {
+
+	private static final long serialVersionUID = -563457088179839389L;
+
+	public void refresh() {
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Database getCatalogDatabase() {
+		return getBaseTable().getSchema().getCatalog().getDatabase();
+	}
+
+	public Connection getConnection() {
+		Database db = getCatalogDatabase();
+		if (db instanceof ICatalogObject) {
+			return ((ICatalogObject) db).getConnection();
+		}
+		return null;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCUserDefinedFunction.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCUserDefinedFunction.java
new file mode 100644
index 0000000..105ff07
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCUserDefinedFunction.java
@@ -0,0 +1,198 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.rte.jdbc;
+
+import java.lang.ref.SoftReference;
+import java.sql.Connection;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.core.util.CatalogLoaderOverrideManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCBaseLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCUDFColumnLoader;
+import org.eclipse.datatools.modelbase.sql.routines.Parameter;
+import org.eclipse.datatools.modelbase.sql.routines.ParameterMode;
+import org.eclipse.datatools.modelbase.sql.routines.RoutineResultTable;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesFactory;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesPackage;
+import org.eclipse.datatools.modelbase.sql.routines.impl.UserDefinedFunctionImpl;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class JDBCUserDefinedFunction extends UserDefinedFunctionImpl implements
+		ICatalogObject {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -6800525292996291562L;
+	public void refresh() {
+		synchronized (parametersLoaded) {
+			if (parametersLoaded.booleanValue()) {
+				setReturnScalar(null);
+				parametersLoaded = Boolean.FALSE;
+			}
+		}
+
+		synchronized (resultTableLoaded) {
+			if (resultTableLoaded.booleanValue()) {
+				setReturnTable(null);
+				resultTableLoaded = Boolean.FALSE;
+			}
+		}
+
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public Connection getConnection() {
+		Database db = getCatalogDatabase();
+		if (db instanceof ICatalogObject) {
+			return ((ICatalogObject) db).getConnection();
+		}
+		return null;
+	}
+
+	public Database getCatalogDatabase() {
+		return getSchema().getCatalog().getDatabase();
+	}
+
+	public EList getParameters() {
+		synchronized (parametersLoaded) {
+			if (!parametersLoaded.booleanValue())
+				loadParameters();
+		}
+		return super.getParameters();
+	}
+
+	public Parameter getReturnScalar() {
+		synchronized (parametersLoaded) {
+			if (!parametersLoaded.booleanValue())
+				loadParameters();
+		}
+		return super.getReturnScalar();
+	}
+
+	public RoutineResultTable getReturnTable() {
+		synchronized (resultTableLoaded) {
+			if (!resultTableLoaded.booleanValue())
+				loadResultTable();
+		}
+		return super.getReturnTable();
+	}
+
+	protected JDBCUDFColumnLoader createParameterLoader() {
+		DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().
+			getDefinition(this.getCatalogDatabase());
+	
+		JDBCBaseLoader loader = 
+			CatalogLoaderOverrideManager.INSTANCE.getLoaderForDatabase(databaseDefinition, 
+					SQLRoutinesFactory.eINSTANCE.createParameter().eClass().getInstanceClassName());
+		
+		if (loader != null) {
+			JDBCUDFColumnLoader udfColumnLoader = (JDBCUDFColumnLoader) loader;
+			udfColumnLoader.setCatalogObject(this);
+			return udfColumnLoader;
+		}
+		return new JDBCUDFColumnLoader(this);
+	}
+
+	protected final JDBCUDFColumnLoader getParameterLoader() {
+		if (paremeterLoaderRef == null || paremeterLoaderRef.get() == null) {
+			paremeterLoaderRef = new SoftReference(createParameterLoader());
+		}
+		return (JDBCUDFColumnLoader) paremeterLoaderRef.get();
+	}
+
+	private void loadParameters() {
+		parametersLoaded = Boolean.TRUE;
+
+		boolean deliver = eDeliver();
+		try {
+			List parametersContainer = super.getParameters();
+			List existingParameters = new ArrayList(parametersContainer);
+
+			eSetDeliver(false);
+
+			parametersContainer.clear();
+			setReturnScalar(null);
+
+			getParameterLoader().loadParameters(parametersContainer, existingParameters);
+			getParameterLoader().clearColumns(existingParameters);
+			
+			ArrayList removeList = new ArrayList();
+			for (Iterator it = parametersContainer.iterator(); it.hasNext(); ) {
+				Parameter p = (Parameter)it.next();
+				if (p.getMode() == ParameterMode.OUT_LITERAL) {
+					setReturnScalar(p);
+					removeList.add(p);
+					break;
+				}
+			}
+			for (Iterator it = removeList.iterator(); it.hasNext(); ) {
+				Parameter removedObject = (Parameter)it.next();
+				parametersContainer.remove(removedObject);
+			}
+			
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		finally {
+			eSetDeliver(deliver);
+		}
+	}
+	
+	private void loadResultTable() {
+		resultTableLoaded = Boolean.TRUE;
+
+		boolean deliver = eDeliver();
+		try {
+			eSetDeliver(false);
+
+			List returnTableList = getParameterLoader().loadRoutineResultTables();
+			if (returnTableList.size() > 0) {
+				setReturnTable((RoutineResultTable)returnTableList.get(0));
+			}
+			
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		finally {
+			eSetDeliver(deliver);
+		}
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		switch (eDerivedStructuralFeatureID(eFeature)) {
+		case SQLRoutinesPackage.USER_DEFINED_FUNCTION__PARAMETERS:
+			getParameters();
+			break;
+		case SQLRoutinesPackage.USER_DEFINED_FUNCTION__RETURN_TABLE:
+			getReturnTable();
+			break;
+		case SQLRoutinesPackage.USER_DEFINED_FUNCTION__RETURN_SCALAR:
+			getReturnScalar();
+			break;
+		}
+
+		return super.eIsSet(eFeature);
+	}
+
+	private Boolean parametersLoaded = Boolean.FALSE;
+	private Boolean resultTableLoaded = Boolean.FALSE;
+	private SoftReference paremeterLoaderRef;
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCView.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCView.java
new file mode 100644
index 0000000..23a905e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/JDBCView.java
@@ -0,0 +1,246 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.rte.jdbc;
+
+import java.lang.ref.SoftReference;
+import java.sql.Connection;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.core.util.CatalogLoaderOverrideManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCBaseLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableColumnLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableIndexLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableSuperTableLoader;
+import org.eclipse.datatools.modelbase.sql.constraints.SQLConstraintsPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.impl.ViewTableImpl;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+
+public class JDBCView extends ViewTableImpl implements ICatalogObject {
+
+	private static final long serialVersionUID = 2356307832803481033L;
+	
+	public Database getCatalogDatabase() {
+		return getSchema().getCatalog().getDatabase();
+	}
+
+	public Connection getConnection() {
+		Database db = getCatalogDatabase();
+		if (db instanceof ICatalogObject) {
+			return ((ICatalogObject) db).getConnection();
+		}
+		return null;
+	}
+
+	public void refresh() {
+		synchronized (columnsLoaded) {
+			if (columnsLoaded.booleanValue()) {
+				columnsLoaded = Boolean.FALSE;
+			}
+		}
+		synchronized (indexesLoaded) {
+			if (indexesLoaded.booleanValue()) {
+				indexesLoaded = Boolean.FALSE;
+			}
+		}
+		synchronized (supertableLoaded) {
+			if (supertableLoaded.booleanValue()) {
+				supertableLoaded = Boolean.FALSE;
+				setSupertable(null);
+			}
+		}
+
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public EList getColumns(){
+		synchronized (columnsLoaded) {
+			if (!columnsLoaded.booleanValue())
+				loadColumns();
+		}
+		return super.getColumns();
+	}
+
+	protected JDBCTableColumnLoader createColumnLoader() {
+		DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().
+			getDefinition(this.getCatalogDatabase());
+	
+		JDBCBaseLoader loader =
+			CatalogLoaderOverrideManager.INSTANCE.getLoaderForDatabase(databaseDefinition, 
+					SQLTablesPackage.eINSTANCE.getColumn().getInstanceClassName());
+		
+		if (loader != null) {
+			JDBCTableColumnLoader tableColumnLoader = (JDBCTableColumnLoader) loader;
+			tableColumnLoader.setCatalogObject(this);
+			return tableColumnLoader;
+		}
+		return new JDBCTableColumnLoader(this);
+	}
+
+	protected final JDBCTableColumnLoader getColumnLoader() {
+		if (columnLoaderRef == null || columnLoaderRef.get() == null) {
+			columnLoaderRef = new SoftReference(createColumnLoader());
+		}
+		return (JDBCTableColumnLoader) columnLoaderRef.get();
+	}
+
+	private void loadColumns() {
+		boolean deliver = eDeliver();
+		try {
+			List container = super.getColumns();
+			List existingColumns = new ArrayList(container);
+
+			eSetDeliver(false);
+
+			container.clear();
+
+			getColumnLoader().loadColumns(container, existingColumns);
+
+			getColumnLoader().clearColumns(existingColumns);
+
+			columnsLoaded = Boolean.TRUE;
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		finally {
+			eSetDeliver(deliver);
+		}
+	}
+
+	public EList getIndex() {
+		synchronized (indexesLoaded) {
+			if (!indexesLoaded.booleanValue())
+				loadIndexes();
+		}
+		return super.getIndex();
+	}
+
+	protected JDBCTableIndexLoader createIndexLoader() {
+		DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().
+			getDefinition(this.getCatalogDatabase());
+	
+		JDBCBaseLoader loader =
+			CatalogLoaderOverrideManager.INSTANCE.getLoaderForDatabase(databaseDefinition, 
+					SQLConstraintsPackage.eINSTANCE.getIndex().getInstanceClassName());
+		
+		if (loader != null) {
+			JDBCTableIndexLoader tableIndexLoader = (JDBCTableIndexLoader) loader;
+			tableIndexLoader.setCatalogObject(this);
+			return tableIndexLoader;
+		}
+		return new JDBCTableIndexLoader(this);
+	}
+
+	protected final JDBCTableIndexLoader getIndexLoader() {
+		if (indexLoaderRef == null || indexLoaderRef.get() == null) {
+			indexLoaderRef = new SoftReference(createIndexLoader());
+		}
+		return (JDBCTableIndexLoader) indexLoaderRef.get();
+	}
+
+	private void loadIndexes() {
+		boolean deliver = eDeliver();
+		try {
+			List container = super.getIndex();
+			List existingIndexes = new ArrayList(container);
+			
+			eSetDeliver(false);
+
+			container.clear();
+
+			getIndexLoader().loadIndexes(container, existingIndexes);
+
+			getIndexLoader().clearIndexes(existingIndexes);
+
+			indexesLoaded = Boolean.TRUE;
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+		finally {
+			eSetDeliver(deliver);
+		}
+	}
+	
+	public Table getSupertable() {
+		synchronized (supertableLoaded) {
+			if (!supertableLoaded.booleanValue())
+				loadSupertable();
+		}
+		return super.getSupertable();
+	}
+
+	protected JDBCTableSuperTableLoader createSupertableLoader() {
+		DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().
+			getDefinition(this.getCatalogDatabase());
+	
+		JDBCBaseLoader loader =
+			CatalogLoaderOverrideManager.INSTANCE.getLoaderForDatabase(databaseDefinition, 
+					SQLTablesPackage.eINSTANCE.getTable().getInstanceClassName());
+		
+		if ((loader != null) && (loader instanceof JDBCTableSuperTableLoader)) { 
+			JDBCTableSuperTableLoader tableSuperTableLoader = (JDBCTableSuperTableLoader) loader;
+			tableSuperTableLoader.setCatalogObject(this);
+			return tableSuperTableLoader;
+		}
+		return new JDBCTableSuperTableLoader(this);
+	}
+
+	protected final JDBCTableSuperTableLoader getSupertableLoader() {
+		if (supertableLoaderRef == null || supertableLoaderRef.get() == null) {
+			supertableLoaderRef = new SoftReference(createSupertableLoader());
+		}
+		return (JDBCTableSuperTableLoader) supertableLoaderRef.get();
+	}
+
+	private void loadSupertable() {
+		try {
+			setSupertable(getSupertableLoader().loadSuperTable());
+			supertableLoaded = Boolean.TRUE;
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		switch (eDerivedStructuralFeatureID(eFeature)) {
+		case SQLTablesPackage.VIEW_TABLE__COLUMNS:
+			getColumns();
+			break;
+		case SQLTablesPackage.VIEW_TABLE__INDEX:
+			getIndex();
+			break;
+		case SQLTablesPackage.VIEW_TABLE__SUPERTABLE:
+			getSupertable();
+			break;
+		}
+ 
+		return super.eIsSet(eFeature);
+	}
+	
+	private Boolean columnsLoaded = Boolean.FALSE;
+	private SoftReference columnLoaderRef;
+	private Boolean indexesLoaded = Boolean.FALSE;
+	private SoftReference indexLoaderRef;
+	private Boolean supertableLoaded = Boolean.FALSE;
+	private SoftReference supertableLoaderRef;
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/util/CatalogLoaderOverrideManager.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/util/CatalogLoaderOverrideManager.java
new file mode 100644
index 0000000..5d66666
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/util/CatalogLoaderOverrideManager.java
@@ -0,0 +1,206 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2011 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.core.util;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.internal.core.definition.DatabaseDefinitionRegistryImpl;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCBaseLoader;
+
+/**
+ * Manages the overridden catalog loaders.
+ * @author brianf
+ *
+ */
+public final class CatalogLoaderOverrideManager {
+
+	public static final CatalogLoaderOverrideManager INSTANCE = new CatalogLoaderOverrideManager();
+
+	private HashMap loaders = null;
+	
+	public final String EXT_PT_NS = "org.eclipse.datatools.connectivity.sqm.core";//$NON-NLS-1$
+	public final String EXT_PT_NAME = "catalog";//$NON-NLS-1$
+	public final String EXT_OVERRIDE = "overrideLoader";//$NON-NLS-1$
+	public final String EXT_PRODUCT = "product";//$NON-NLS-1$
+	public final String EXT_VERSION = "version";//$NON-NLS-1$
+	public final String EXT_ECLASS = "eclass";//$NON-NLS-1$
+	public final String EXT_PROVIDER = "provider";//$NON-NLS-1$
+	
+	/*
+	 * Hidden constructor 
+	 */
+	private CatalogLoaderOverrideManager() {
+		loadExtensions();
+	}
+	
+	/**
+	 * Load the extension points for overrides
+	 */
+	private void loadExtensions() {
+		if (loaders == null || loaders.size() == 0) {
+			loaders = new HashMap();
+			
+			IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+			IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint(EXT_PT_NS, EXT_PT_NAME);
+			IExtension[] extensions = extensionPoint.getExtensions();
+			for(int i=0; i<extensions.length; ++i) {
+				IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+				for(int j=0; j<configElements.length; ++j) {
+					if(configElements[j].getName().equals(EXT_OVERRIDE)) { 
+						String product = configElements[j].getAttribute(EXT_PRODUCT);
+						String version = configElements[j].getAttribute(EXT_VERSION);
+						String eclassName = configElements[j].getAttribute(EXT_ECLASS);
+						String providerClassName = configElements[j].getAttribute(EXT_PROVIDER);
+						try {
+							JDBCBaseLoader tempLoader = (JDBCBaseLoader) configElements[j].createExecutableExtension(EXT_PROVIDER);
+							
+							LoaderDetails details = new LoaderDetails(product, version, eclassName, tempLoader);
+							DatabaseDefinition definition = details.defn;
+							if(this.loaders.containsKey(definition)) {
+								((Map) this.loaders.get(definition)).put(eclassName, details);
+							}
+							else {
+								Map eClasses = new TreeMap();
+								eClasses.put(eclassName, details);
+								this.loaders.put(definition, eClasses);
+							}
+						}
+						catch(CoreException e) {
+						    IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getSymbolicName(), IStatus.ERROR,
+						            "An error was detected when creating the override catalog loader (" + providerClassName + ") for " //$NON-NLS-1$ //$NON-NLS-2$
+						            + eclassName + " for database " //$NON-NLS-1
+						            + product + " " + version, e); //$NON-NLS-1$
+							RDBCorePlugin.getDefault().getLog().log(status);
+						}
+					}
+				}
+			}
+		}
+	}
+	
+	/**
+	 * Given a Database Definition and an eclass name, provide the loader
+	 * @param defn
+	 * @param eClassName
+	 * @return
+	 */
+	public JDBCBaseLoader getLoaderForDatabase ( DatabaseDefinition defn, String eClassName ) {
+		
+		if (loaders.containsKey(defn)) {
+			Map eClasses = (Map) this.loaders.get(defn);
+			if (eClasses != null && eClasses.containsKey(eClassName)) {
+				LoaderDetails details = (LoaderDetails) eClasses.get(eClassName);
+				JDBCBaseLoader loader = details.loader;
+				if (loader != null) {
+					try {
+						loader = (JDBCBaseLoader) loader.getClass().newInstance();
+					} catch (InstantiationException e) {
+						e.printStackTrace();
+					} catch (IllegalAccessException e) {
+						e.printStackTrace();
+					}
+				}
+				
+				return loader;
+			}
+		}
+		return null;
+	}
+	
+	/**
+	 * Return a list of Database Definitions that have override loaders registered
+	 * @return
+	 */
+	public Iterator getDbDefinitions() {
+		return this.loaders.keySet().iterator();
+	}
+	
+	/**
+	 * Get the list of eclass names with loaders registered for
+	 * the given database definition.
+	 * @param defn
+	 * @return
+	 */
+	public Iterator getEClasses(DatabaseDefinition defn) {
+		Map eClasses = (Map) this.loaders.get(defn);
+		if(eClasses == null) {
+			return new TreeMap().keySet().iterator();
+		}
+		else {
+			return eClasses.keySet().iterator();
+		}
+	}
+	
+	/**
+	 * Get the instance.
+	 * @return
+	 */
+	public CatalogLoaderOverrideManager getInstance() {
+		return INSTANCE;
+	}
+	
+	/**
+	 * Internal class to hold loader references
+	 * @author brianf
+	 */
+	private class LoaderDetails {
+		
+		// properties accessible by parent class
+		protected String vendor;
+		protected String version;
+		protected String keyObject;
+		protected JDBCBaseLoader loader;
+		protected DatabaseDefinition defn;
+		
+		/**
+		 * Empty constructor
+		 */
+		public LoaderDetails() {
+			vendor = null;
+			version = null;
+			keyObject = null;
+			loader = null;
+			defn = null;
+		}
+		
+		/**
+		 * Parameterized constructor
+		 * @param vendor
+		 * @param version
+		 * @param key
+		 * @param loader
+		 */
+		public LoaderDetails ( String vendor, String version, String key, JDBCBaseLoader loader) {
+			this.vendor = vendor;
+			this.version = version;
+			this.keyObject = key;
+			this.loader = loader;
+			DatabaseDefinition def =
+				DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(vendor, version);
+			if (def != null)
+				this.defn = def;
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/RDBCorePlugin.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/RDBCorePlugin.java
new file mode 100644
index 0000000..2f6c082
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/RDBCorePlugin.java
@@ -0,0 +1,124 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Actuate Corporation - added use of default DatabaseRecognizer (BZ 253523),
+ *              plus OSGi stop and restart usage support
+ *     Actuate Corporation - support for OSGi-less platform (Bugzilla 338997)
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.datatools.connectivity.services.PluginResourceLocator;
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentService;
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentServiceImpl;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinitionRegistry;
+import org.eclipse.datatools.connectivity.sqm.internal.core.definition.DatabaseDefinitionRegistryImpl;
+import org.eclipse.datatools.connectivity.sqm.internal.core.util.GenericCatalogMessages;
+import org.eclipse.datatools.connectivity.sqm.internal.core.util.RDBCorePluginConstants;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+
+
+public class RDBCorePlugin extends Plugin {
+	public static String FK_MODELING_RELATIONSHIP = "FK_MODELING_RELATIONSHIP"; //$NON-NLS-1$
+	public static String FK_PARENT_ROLE_NAME = "FK_PARENT_ROLE_NAME"; //$NON-NLS-1$
+	public static String FK_CHILD_ROLE_NAME = "FK_CHILD_ROLE_NAME"; //$NON-NLS-1$
+	public static String FK_PARENT_MULTIPLICITY = "FK_PARENT_MULTIPLICITY"; //$NON-NLS-1$
+	public static String FK_CHILD_MULTIPLICITY = "FK_CHILD_MULTIPLICITY"; //$NON-NLS-1$
+	public static String FK_PARENT_BY_QUALIFIED_NAME = "FK_PARENT_BY_QUALIFIED_NAME"; //$NON-NLS-1$
+	public static String FK_IS_IDENTIFYING_RELATIONSHIP = "FK_IS_IDENTIFYING_RELATIONSHIP"; //$NON-NLS-1$
+	public static String ZERO = "0"; //$NON-NLS-1$
+	public static String ZERO_TO_ONE = "0..1"; //$NON-NLS-1$
+	public static String ONE = "1"; //$NON-NLS-1$
+	public static String ZERO_TO_MANY = "0..*"; //$NON-NLS-1$
+	public static String ONE_TO_MANY = "1..*"; //$NON-NLS-1$
+	public static String MANY = "*"; //$NON-NLS-1$
+	
+    public static final String PLUGIN_ID = "org.eclipse.datatools.connectivity.sqm.core";   //$NON-NLS-1$
+	private static RDBCorePlugin plugin;
+    private static IPath defaultWorkspace;
+
+	public RDBCorePlugin() {
+		plugin = this;
+	}
+	
+	public static RDBCorePlugin getDefault() {
+        if( plugin == null )
+        {
+            synchronized( RDBCorePlugin.class )
+            {
+                if( plugin == null )
+                    new RDBCorePlugin();
+            }
+        }
+        return plugin;
+
+	}
+
+	/* (non-Javadoc)
+     * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
+     */
+    @Override
+    public void stop( BundleContext context ) throws Exception {
+        DatabaseDefinitionRegistryImpl.releaseInstance();
+        
+        super.stop( context );
+        plugin = null;
+    }
+
+    public DatabaseDefinitionRegistry getDatabaseDefinitionRegistry() {
+		return DatabaseDefinitionRegistryImpl.getInstance();
+	}
+	
+	public ContainmentService getContainmentService() {
+		return ContainmentServiceImpl.INSTANCE;
+	}
+
+//	public ConnectionManager getConnectionManager() {
+//		return ConnectionManagerImpl.INSTANCE;
+//	}	
+	
+	protected void initializeDefaultPluginPreferences() {
+	    getPluginPreferences().setDefault(RDBCorePluginConstants.LIMIT_ROWS_RETRIEVED, true);
+	    getPluginPreferences().setDefault(RDBCorePluginConstants.MAX_ROW_RETRIEVED, 50);
+	    getPluginPreferences().setDefault(RDBCorePluginConstants.MAX_LOB_LENGTH, 100);  
+	}
+
+    public static String getSymbolicName() {
+        Bundle theBundle = getDefault().getBundle();
+        return theBundle != null ? 
+                theBundle.getSymbolicName() : 
+                PLUGIN_ID;
+    }
+    
+    /**
+     * Returns the default workspace location of this plug-in.
+     * @return the path of this plug-in's default workspace location.
+     */
+    public static IPath getDefaultStateLocation() {
+        if( defaultWorkspace == null )
+        {
+            IPath wsPath = PluginResourceLocator.getPluginStateLocation( PLUGIN_ID );
+            if( wsPath == null )
+            {
+                String errorMsg = GenericCatalogMessages.RDBCorePlugin_NO_DEFAULT_WORKSPACE;
+                throw new IllegalStateException( errorMsg );
+            }
+            
+            synchronized( RDBCorePlugin.class )
+            {
+                if( defaultWorkspace == null )
+                    defaultWorkspace = wsPath;
+            }
+        }
+        return defaultWorkspace;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/ResourceUtil.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/ResourceUtil.java
new file mode 100644
index 0000000..0adfa72
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/ResourceUtil.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentService;
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentServiceImpl;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+
+public class ResourceUtil {
+	public static void resolveDanglingReferences(Resource resource) {
+		Set visited = new HashSet();
+		List roots = new LinkedList();
+		roots.addAll(resource.getContents());
+		Iterator it = roots.iterator();
+		while(it.hasNext()) {
+			resolveDanglingReferencesInternal(resource, (EObject) it.next(), visited); 
+		}
+	}
+	
+	private static void resolveDanglingReferencesInternal(Resource resource, EObject obj, Set visited) {
+		visited.add(obj);
+		List references = new LinkedList();
+		references.addAll(obj.eCrossReferences());
+		Iterator it = references.iterator();
+		while(it.hasNext()) {
+			EObject reference = (EObject) it.next();
+			if (reference == null) continue;
+			if (reference.eResource() == null) {
+				if (!reference.eIsProxy())
+                {
+				    EObject needResource = reference;
+				    while(needResource.eContainer() != null) needResource = needResource.eContainer(); 
+				    resource.getContents().add(needResource);
+                }
+			}
+			if(!visited.contains(reference)) resolveDanglingReferencesInternal(resource, reference, visited);
+		}
+		
+		List contents = new LinkedList();
+		contents.addAll(obj.eContents());
+		it = contents.iterator();
+		while(it.hasNext()) {
+			EObject content = (EObject) it.next();
+			if(!visited.contains(content)) resolveDanglingReferencesInternal(resource, content, visited);
+		}
+	}	
+
+	public static EObject[] getRootElements(Resource resource) {
+		ContainmentService s = ContainmentServiceImpl.INSTANCE;
+		Collection roots = new ArrayList();
+		Iterator it = resource.getContents().iterator();
+		while(it.hasNext()) {
+			EObject obj = (EObject) it.next();
+			if(s.getContainer(obj) == null) roots.add(obj);
+			else break; // assume that all root elements will be put at the begining
+		}
+		EObject[] r = new EObject[roots.size()];
+		roots.toArray(r);
+		return r;
+	}
+	
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/ConnectionAdapter.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/ConnectionAdapter.java
new file mode 100644
index 0000000..81b3b0e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/ConnectionAdapter.java
@@ -0,0 +1,300 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.connection;
+
+import java.sql.Array;
+import java.sql.Blob;
+import java.sql.CallableStatement;
+import java.sql.Clob;
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.NClob;
+import java.sql.PreparedStatement;
+import java.sql.SQLClientInfoException;
+import java.sql.SQLException;
+import java.sql.SQLWarning;
+import java.sql.SQLXML;
+import java.sql.Savepoint;
+import java.sql.Statement;
+import java.sql.Struct;
+import java.util.Map;
+import java.util.Properties;
+import java.util.concurrent.Executor;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+
+
+
+public class ConnectionAdapter implements Connection {
+	private ConnectionInfoImpl info;
+	private Connection connection;
+	
+	public ConnectionAdapter(ConnectionInfo info, Connection connection) {
+		this.info = (ConnectionInfoImpl) info;
+		this.connection = connection;
+	}
+
+	public ConnectionInfo getConnectionInfo() {
+		return this.info;
+	}
+	
+	public Connection getNativeConnection() {
+		return this.connection;
+	}
+	
+	public Statement createStatement() throws SQLException {
+	    try {
+	        Statement s = connection.createStatement();		
+	        return new StatementAdapter(this, s);
+	    }
+	    catch(SQLException e) {
+		    IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getSymbolicName(), IStatus.ERROR,
+		            e.getClass().getName(),
+		            e);
+			RDBCorePlugin.getDefault().getLog().log(status);
+			this.info.onSQLException(this, e);
+	        throw e;
+	    }
+	}
+
+	public PreparedStatement prepareStatement(String arg0) throws SQLException {
+		return connection.prepareStatement(arg0);
+	}
+
+	public CallableStatement prepareCall(String arg0) throws SQLException {
+		return connection.prepareCall(arg0);
+	}
+
+	public String nativeSQL(String arg0) throws SQLException {
+		return nativeSQL(arg0);
+	}
+
+	public void setAutoCommit(boolean arg0) throws SQLException {
+		connection.setAutoCommit(arg0);
+	}
+
+	public boolean getAutoCommit() throws SQLException {
+		return connection.getAutoCommit();
+	}
+
+	public void commit() throws SQLException {
+		connection.commit();
+	}
+
+	public void rollback() throws SQLException {
+		connection.rollback();
+	}
+
+	public void close() throws SQLException {
+		connection.close();
+	}
+
+	public boolean isClosed() throws SQLException {
+		return connection.isClosed();
+	}
+
+	public DatabaseMetaData getMetaData() throws SQLException {
+		return connection.getMetaData();
+	}
+
+	public void setReadOnly(boolean arg0) throws SQLException {
+		connection.setReadOnly(arg0);
+	}
+
+	public boolean isReadOnly() throws SQLException {
+		return connection.isReadOnly();
+	}
+
+	public void setCatalog(String arg0) throws SQLException {
+		connection.setCatalog(arg0);
+	}
+
+	public String getCatalog() throws SQLException {
+		return connection.getCatalog();
+	}
+
+	public void setTransactionIsolation(int arg0) throws SQLException {
+		connection.setTransactionIsolation(arg0);
+	}
+
+	public int getTransactionIsolation() throws SQLException {
+		return connection.getTransactionIsolation();
+	}
+
+	public SQLWarning getWarnings() throws SQLException {
+		return connection.getWarnings();
+	}
+
+	public void clearWarnings() throws SQLException {
+		connection.clearWarnings();
+	}
+
+	public Statement createStatement(int arg0, int arg1) throws SQLException {
+		return connection.createStatement(arg0, arg1);
+	}
+
+	public PreparedStatement prepareStatement(String arg0, int arg1, int arg2) throws SQLException {
+		return connection.prepareStatement(arg0, arg1, arg2);
+	}
+
+	public CallableStatement prepareCall(String arg0, int arg1, int arg2) throws SQLException {
+		return connection.prepareCall(arg0, arg1, arg2);
+	}
+
+	public Map getTypeMap() throws SQLException {
+		return connection.getTypeMap();
+	}
+
+	public void setTypeMap(Map arg0) throws SQLException {
+		connection.setTypeMap(arg0);
+	}
+
+	public void setHoldability(int arg0) throws SQLException {
+		connection.setHoldability(arg0);
+	}
+
+	public int getHoldability() throws SQLException {
+		return connection.getHoldability();
+	}
+
+	public Savepoint setSavepoint() throws SQLException {
+		return connection.setSavepoint();
+	}
+
+	public Savepoint setSavepoint(String arg0) throws SQLException {
+		return connection.setSavepoint(arg0);
+	}
+
+	public void rollback(Savepoint arg0) throws SQLException {
+		connection.rollback(arg0);
+	}
+
+	public void releaseSavepoint(Savepoint arg0) throws SQLException {
+		connection.releaseSavepoint(arg0);
+	}
+
+	public Statement createStatement(int arg0, int arg1, int arg2) throws SQLException {
+		return connection.createStatement(arg0, arg1, arg2);
+	}
+
+	public PreparedStatement prepareStatement(String arg0, int arg1, int arg2, int arg3) throws SQLException {
+		return connection.prepareStatement(arg0, arg1, arg2, arg3);
+	}
+
+	public CallableStatement prepareCall(String arg0, int arg1, int arg2, int arg3) throws SQLException {
+		return prepareCall(arg0, arg1, arg2, arg3);
+	}
+
+	public PreparedStatement prepareStatement(String arg0, int arg1) throws SQLException {
+		return prepareStatement(arg0, arg1);
+	}
+
+	public PreparedStatement prepareStatement(String arg0, int[] arg1) throws SQLException {
+		return prepareStatement(arg0, arg1);
+	}
+
+	public PreparedStatement prepareStatement(String arg0, String[] arg1) throws SQLException {
+		return prepareStatement(arg0, arg1);
+	}
+
+    public <T> T unwrap(Class<T> iface) throws SQLException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public boolean isWrapperFor(Class<?> iface) throws SQLException {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public Clob createClob() throws SQLException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Blob createBlob() throws SQLException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public NClob createNClob() throws SQLException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public SQLXML createSQLXML() throws SQLException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public boolean isValid(int timeout) throws SQLException {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public void setClientInfo(String name, String value) throws SQLClientInfoException {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public void setClientInfo(Properties properties) throws SQLClientInfoException {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public String getClientInfo(String name) throws SQLException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Properties getClientInfo() throws SQLException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Array createArrayOf(String typeName, Object[] elements) throws SQLException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Struct createStruct(String typeName, Object[] attributes) throws SQLException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+    
+    public int getNetworkTimeout() throws SQLException
+    {
+    	return this.connection.getNetworkTimeout();
+    }
+    
+    public void setNetworkTimeout( final Executor executor, final int milliseconds ) throws SQLException
+    {
+    	this.connection.setNetworkTimeout( executor, milliseconds );
+    }
+    
+    public String getSchema() throws SQLException
+    {
+    	return this.connection.getSchema();
+    }
+
+    public void setSchema( final String schema ) throws SQLException
+    {
+    	this.connection.setSchema( schema );
+    }
+    
+    public void abort( final Executor executor ) throws SQLException
+    {
+    	this.connection.abort( executor );
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/ConnectionFactory.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/ConnectionFactory.java
new file mode 100644
index 0000000..603e0b1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/ConnectionFactory.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.connection;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IOfflineConnection;
+import org.eclipse.datatools.connectivity.IOfflineConnectionFactory;
+
+/**
+ * @author ledunnel
+ * 
+ */
+public class ConnectionFactory implements IOfflineConnectionFactory {
+
+	/**
+	 * 
+	 */
+	public ConnectionFactory() {
+		super();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionFactory#createConnection(org.eclipse.datatools.connectivity.IConnectionProfile)
+	 */
+	public IConnection createConnection(IConnectionProfile profile) {
+		IOfflineConnection connection = new ConnectionInfoImpl(profile, getClass(), true);
+		return connection;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionFactory#createConnection(org.eclipse.datatools.connectivity.IConnectionProfile,
+	 *      java.lang.String, java.lang.String)
+	 */
+	public IConnection createConnection(IConnectionProfile profile, String uid,
+			String pwd) {
+		return createConnection(profile);
+	}
+
+	public boolean canWorkOffline(IConnectionProfile profile) {
+		// check to see if offline data has been cached for this profile
+		return ConnectionInfoImpl.getConnectionFile(profile.getName()).exists();
+	}
+
+	public IOfflineConnection createConnection(IConnectionProfile profile, IProgressMonitor monitor) {
+		IOfflineConnection connection = (IOfflineConnection) createConnection(profile);
+		monitor.done();
+		return connection;
+	}
+
+	public IOfflineConnection createOfflineConnection(IConnectionProfile profile, IProgressMonitor monitor) {
+		// create a connection using offline data
+		IOfflineConnection connection = new ConnectionInfoImpl(profile, getClass(), false);
+		monitor.done();
+		return connection;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/ConnectionFilter.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/ConnectionFilter.java
new file mode 100644
index 0000000..db7ad9b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/ConnectionFilter.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.datatools.connectivity.sqm.internal.core.connection;
+
+public interface ConnectionFilter extends org.eclipse.datatools.connectivity.sqm.core.connection.ConnectionFilter {
+	
+	/**
+	 * Change the filter expression.
+	 * @param predicate - It cannot be null.
+	 */
+	public void setPredicate(String predicate);
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/ConnectionFilterImpl.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/ConnectionFilterImpl.java
new file mode 100644
index 0000000..cb40554
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/ConnectionFilterImpl.java
@@ -0,0 +1,365 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004, 2008 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.connection;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.TreeSet;
+import java.util.Vector;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class ConnectionFilterImpl implements ConnectionFilter {
+
+    /**
+     * Comment for <code>serialVersionUID</code>
+     */
+    private static final long serialVersionUID = 3689626986939299641L;
+
+    private String predicate;
+    private IFilter filter;
+	
+	private static final String NOT_PREDICATE_TEXT = "NOT"; //$NON-NLS-1$
+
+	private static final String IDENTIFIER_DELIMITER = "'"; //$NON-NLS-1$
+
+	public static final int STARTS_WITH_OPERATOR = 1;
+
+	public static final int CONTAINS_OPERATOR = 2;
+
+	public static final int ENDS_WITH_OPERATOR = 3;
+
+	public static final int NOT_START_WITH_OPERATOR = 4;
+
+	public static final int NOT_CONTAIN_OPERATOR = 5;
+
+	public static final int NOT_END_WITH_OPERATOR = 6;
+	
+	private ArrayList predicates = new ArrayList();
+	
+    public ConnectionFilterImpl() {
+
+    }
+
+    public ConnectionFilterImpl(String predicate) {
+        setPredicate(predicate);
+    }
+
+    public void setPredicate(String predicate) {
+    	filter = null;
+        this.predicate = predicate;
+    }
+
+    public String getPredicate() {
+        return this.predicate;
+    }
+
+    public boolean isValid(String predicate) {
+        return predicate != null && predicate.length() > 0;
+    }
+
+    public String getPattern() {
+        String pattern = ""; //$NON-NLS-1$
+        if (predicate != null) {
+            try {
+                if (predicate.indexOf("(") < 0) { //$NON-NLS-1$
+                    pattern = predicate.substring(predicate.indexOf("'"), //$NON-NLS-1$
+                            predicate.length());
+                } else {
+                    pattern = predicate.substring(predicate.indexOf("("), //$NON-NLS-1$
+                            predicate.length());
+                }
+            } catch (Exception e) {
+                // Bury the exception - if the predicate is an unexpected string
+                // we want to return an empty string
+            }
+        }
+        return pattern;
+    }
+
+    public String getOperator() {
+        String operator = ""; //$NON-NLS-1$
+        if (predicate != null) {
+            try {
+                if (predicate.indexOf("(") < 0) { //$NON-NLS-1$
+                    operator = predicate.substring(0, predicate.indexOf("'")).trim(); //$NON-NLS-1$
+                } else {
+                    operator = predicate.substring(0, predicate.indexOf("(")).trim(); //$NON-NLS-1$
+                }
+            } catch (Exception e) {
+                // Bury the exception - if the predicate is an unexpected string
+                // we want to return an empty string
+            }
+        }
+        return operator;
+    }
+
+    public String[] getPatternElements() {
+        String[] elements = new String[] {};
+        Vector patternVector = new Vector();
+        String pattern = this.getPattern();
+        String[] patterns = pattern.split("'"); //$NON-NLS-1$
+        for (int i = 0; i < patterns.length; i++) {
+            if (!patterns[i].equals(", ") && !patterns[i].equals("(") //$NON-NLS-1$ //$NON-NLS-2$
+                    && !patterns[i].equals(")")) { //$NON-NLS-1$
+                patternVector.add(patterns[i]);
+            }
+        }
+        elements = new String[patternVector.size()];
+        patternVector.copyInto(elements);
+        return elements;
+    }
+    
+    public boolean isOperatorInclusive(){
+        boolean isInclusive = false;
+        if (getOperator().equals("IN")){ //$NON-NLS-1$
+            isInclusive = true;
+        }
+        return isInclusive;
+    }
+    
+    public boolean isOperatorExclusive(){
+        boolean isExclusive = false;
+        if (getOperator().equals("NOT IN")){ //$NON-NLS-1$
+            isExclusive = true;
+        }
+        return isExclusive;
+    }
+    
+    public boolean isFiltered(String name) {
+    	if (filter == null) {
+    		createFilter();
+    	}
+    	return filter.isFiltered(name);
+    }
+    
+    private void createFilter() {
+    	String operator = getOperator();
+    	if (OPERATOR_LIKE.equals(operator)) {
+    		filter = new LikeFilter(getPattern());
+    	}
+    	else if (OPERATOR_NOT_LIKE.equals(operator)) {
+    		filter = new NotLikeFilter(getPattern()); 
+    	}
+    	else if (OPERATOR_IN.equals(operator)) {
+    		filter = new InFilter(getPattern()); 
+    	}
+    	else if (OPERATOR_NOT_IN.equals(operator)) {
+    		filter = new NotInFilter(getPattern()); 
+    	}
+    }
+    
+    private static interface IFilter {
+
+		boolean isFiltered(String name);
+	}
+
+	private static class NotLikeFilter implements IFilter {
+
+		Pattern pattern;
+
+		NotLikeFilter(String pattern) {
+			String regex;
+			if (pattern == null || pattern.length() < 2) {
+				regex = new String();
+			}
+			else {
+				regex = quote(pattern.substring(1, pattern.length() - 1));
+			}
+			this.pattern = Pattern.compile(regex);
+		}
+
+		public boolean isFiltered(String name) {
+			return pattern.matcher(name).matches();
+		}
+		
+		private String quote(String pattern) {
+			StringBuffer buf = new StringBuffer();
+			StringTokenizer tokenizer = new StringTokenizer(pattern, "%_", true);
+
+			while (tokenizer.hasMoreTokens()) {
+				String token = tokenizer.nextToken();
+				if ("%".equals(token)) {
+					buf.append(".*");
+				} else if ("_".equals(token)) {
+					buf.append(".?");
+				} else {
+					buf.append(token.replaceAll("\\p{Punct}", "\\\\$0"));
+					/* 
+					 * The following is not supported in JDK 1.4
+					 * buf.append(Pattern.quote(token));
+					 */
+				}
+			}
+			return buf.toString();
+		}
+
+	}
+
+	private static class LikeFilter extends NotLikeFilter {
+
+		LikeFilter(String pattern) {
+			super(pattern);
+		}
+
+		public boolean isFiltered(String name) {
+			return !super.isFiltered(name);
+		}
+	}
+
+	private static class NotInFilter implements IFilter {
+		
+		static Pattern regex = Pattern.compile("'(.*?)'");
+
+		Set values;
+
+		NotInFilter(String pattern) {
+			if (pattern == null || pattern.length() < 2) {
+				values = Collections.EMPTY_SET;
+			}
+			else {
+				values = new TreeSet();
+				for (Matcher m = regex.matcher(pattern); m.find(); values.add(m
+						.group(1))) {
+				}
+			}
+		}
+
+		public boolean isFiltered(String name) {
+			return values.contains(name);
+		}
+	}
+
+	private static class InFilter extends NotInFilter {
+
+		InFilter(String pattern) {
+			super(pattern);
+		}
+
+		public boolean isFiltered(String name) {
+			return !super.isFiltered(name);
+		}
+	}
+
+	public ArrayList getPredicatesCollection() {
+		predicates = new ArrayList();
+		
+		if(predicate != null && !predicate.equals("")){
+			String[] tokenArray = predicate.split(IDENTIFIER_DELIMITER);
+			
+			for(int i = 0; i < tokenArray.length; i++)
+				tokenArray[i] = tokenArray[i].trim();
+			
+			ArrayList tempList = new ArrayList();
+			
+			for(int i = 0; i + 1 < tokenArray.length; i = i + 2){
+				tokenArray[i + 1] = "'" + tokenArray[i + 1] + "'";
+				
+				if(tokenArray[i].startsWith("AND"))
+					tokenArray[i] = tokenArray[i].substring(4, tokenArray[i].length());
+				else if(tokenArray[i].startsWith("OR"))
+					tokenArray[i] = tokenArray[i].substring(3, tokenArray[i].length());
+				
+				tempList.add(tokenArray[i]);
+				tempList.add(tokenArray[i + 1]);
+			}
+			
+			int operator = -1;
+			String value = "";
+			String tempValue = "";
+			
+			for(int j = 0; j + 1 < tempList.size(); j = j + 2){
+				
+				if(tempList.size() == 2)
+					operator = findExpressionOperator(tempList.get(j).toString() + " " + tempList.get(j+1).toString());
+				else {
+					tempValue = tempList.get(j).toString() + " " + tempList.get(j+1).toString();
+					tempValue = tempValue.substring(4, tempValue.length());
+					operator = findExpressionOperator(tempValue);
+				}
+				
+				value = findExpressionValue(tempList.get(j).toString() + " " + tempList.get(j+1).toString());
+				Predicate p = new Predicate(operator, value);
+				predicates.add(p);
+			}
+		}
+		return predicates;
+	}
+
+	private int findExpressionOperator(String filterPredicate) {
+		int enumExpressionPredicate = 1;
+		boolean isNotLike = false;
+		boolean startsWithPercentSign = false;
+		boolean endsWithPercentSign = false;
+		if (filterPredicate.startsWith(NOT_PREDICATE_TEXT)) {
+			isNotLike = true;
+		}
+		String expressionValue = filterPredicate.split(IDENTIFIER_DELIMITER)[1];
+		if (expressionValue.startsWith("%")) { //$NON-NLS-1$
+			startsWithPercentSign = true;
+		}
+
+		if (expressionValue.endsWith("%")) { //$NON-NLS-1$
+			endsWithPercentSign = true;
+		}
+
+		if (startsWithPercentSign && endsWithPercentSign) {
+			if (isNotLike) {
+				enumExpressionPredicate = NOT_CONTAIN_OPERATOR;
+			} else {
+				enumExpressionPredicate = CONTAINS_OPERATOR;
+			}
+		} else if (startsWithPercentSign) {
+			if (isNotLike) {
+				enumExpressionPredicate = NOT_END_WITH_OPERATOR;
+			} else {
+				enumExpressionPredicate = ENDS_WITH_OPERATOR;
+			}
+		} else if (endsWithPercentSign) {
+			if (isNotLike) {
+				enumExpressionPredicate = NOT_START_WITH_OPERATOR;
+			} else {
+				enumExpressionPredicate = STARTS_WITH_OPERATOR;
+			}
+		}
+		return enumExpressionPredicate;
+	}
+
+	private String findExpressionValue(String filterPredicate) {
+		String expressionValue = filterPredicate.split(IDENTIFIER_DELIMITER)[1];
+		if (expressionValue.startsWith("%")) { //$NON-NLS-1$
+			expressionValue = expressionValue.substring(1);
+		}
+
+		if (expressionValue.endsWith("%")) { //$NON-NLS-1$
+			expressionValue = expressionValue.substring(0, (expressionValue
+					.length() - 1));
+		}
+
+		return expressionValue;
+	}
+
+	public boolean isMeetsAllConditions() {
+		predicates = new ArrayList();
+		
+		if(predicate != null && !predicate.equals("")){
+			String[] tokenArray = predicate.split(" ");
+			
+			for(int i = 0; i < tokenArray.length; i++){
+				if(tokenArray[i].equals("AND"))
+					return true;
+				else if(tokenArray[i].equals("OR"))
+					return false;
+			}
+		}
+		return true;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/ConnectionFilterListener.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/ConnectionFilterListener.java
new file mode 100644
index 0000000..b37ec4b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/ConnectionFilterListener.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.connection;
+
+public interface ConnectionFilterListener {
+
+	public void connectionFilterAdded(String filterKey);
+	public void connectionFilterRemoved(String filterKey);
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/ConnectionInfo.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/ConnectionInfo.java
new file mode 100644
index 0000000..a83813c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/ConnectionInfo.java
@@ -0,0 +1,176 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.connection;
+
+import java.io.IOException;
+import java.sql.Connection;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+
+public interface ConnectionInfo extends org.eclipse.datatools.connectivity.sqm.core.connection.ConnectionInfo {
+	
+	public static final String CONNECTION = "connection/"; //$NON-NLS-1$
+	public static final String INFO_FILE_EXTENSION = "info"; //$NON-NLS-1$
+	public static final String FILTER = "filter"; //$NON-NLS-1$
+	
+	/**
+	 * Change the connection info name.
+	 * @param name - a user friendly name. It cannot be null.
+	 */
+	public void setName(String name);
+	
+	/**
+	 * specify the extra class path to load the driver class.
+	 * @param path semicolon separated class path
+	 */
+	public void   setLoadingPath(String path);
+	
+	/**
+	 * 
+	 * @param className the driver class full name.
+	 */
+	public void   setDriverClassName(String className);
+	
+	/**
+	 * 
+	 * @param url JDBC connection URL
+	 */
+	public void   setURL(String url);
+	
+	/**
+	 * Helper function for property "user". The value can be set directly using Properties
+	 * @param id value of property "user"
+	 */
+	public void setUserName(String id);
+
+	/**
+	 * Helper function for property "password". The value can be set directly using Properties
+	 * @param password value of property "password"
+	 */
+	public void setPassword(String password);
+		
+	public void setDatabaseName(String databasename);
+	
+	/**
+	 * Flag for auto-detecting vendor and version when connect.
+	 */
+	public void discoverDatabaseDefinitionWhenConnect();
+
+	/**
+	 * Helper function to create a JDBC connection.
+	 * @return a JDBC connetion
+	 */
+	//	 TODO Restore once new connection manager is implemented
+//	public Connection connect() throws FileNotFoundException, ClassNotFoundException, IllegalAccessException, InstantiationException, SQLException;
+
+	/**
+	 * Share a connection. If there is a shared connection already, an IllegalStateException will be thrown.
+	 * If the function succeeds, notification will be sent out to all registered listeners
+	 * @param connection a live JDBC connection
+	 */
+	public void setSharedConnection(Connection connection);
+	
+	/**
+	 * Remove the shared connection. If no shared connection set, an IllegalStateException will be thrown.
+	 * If the function succeeds, notification will be sent out to all registered listeners
+	 */
+	public void removeSharedConnection();
+	
+	/**
+	 * Share a database associated to this connection info. If there is a shared database already,
+	 * an IllegalStateException will be thrown.
+	 * If the function succeeds, notification will be sent out to all registered listeners
+	 * @param database
+	 */
+	public void setSharedDatabase(Database database);
+	
+	/**
+	 * Remove the shared database. If no shared database set, an IllegalStateException will be thrown.
+	 * If the function succeeds, notification will be sent out to all registered listeners
+	 */
+	public void removeSharedDatabase();
+	
+	/**
+	 * Register a listener to sharing events.
+	 * @param listener
+	 */
+	public boolean addConnectionSharingListener(ConnectionSharingListener listener);
+	
+	/**
+	 * Remove a listener
+	 * @param listener
+	 */
+	public boolean removeConnectionSharingListener(ConnectionSharingListener listener);
+	
+	/**
+	 * Cache a database in the workspace. It could be a time consuming task.
+	 * @param database
+	 */
+	public void cacheDatabase(Database database) throws IOException;
+	
+	/**
+	 * set a filter.
+	 * @param key
+	 * @param filter
+	 */
+	public void addFilter(String key, ConnectionFilter filter);
+
+	/**
+	 * return the filter
+	 * @param key
+	 * @return
+	 */
+	public ConnectionFilter getFilter(String key);
+	
+	
+	/**
+	 * remove the filter
+	 * @param key
+	 * @return
+	 */
+	public void removeFilter(String key);
+	
+	/**
+	 * Add a dependent project. If the project is already in the list, it will be ignored.
+	 * @param proj
+	 */
+	public void addDependentProject(IProject proj);
+	
+	/**
+	 * Remove a dependent project. If the project is not in the list, it will be ignored.
+	 * @param proj
+	 */
+	public void removeDependentProject(IProject proj);	
+
+	/**
+	 * Add a filterListener
+	 * @param listener
+	 * @return
+	 */
+	public boolean addFilterListener(ConnectionFilterListener listener);
+
+	/**
+	 * Remove filterListener
+	 * @param listener
+	 * @return
+	 */
+	public boolean removeFilterListener(ConnectionFilterListener listener);
+
+
+	/**
+	 * Get database product version
+	 * @return
+	 */
+    public String getDatabaseProductVersion();
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/ConnectionInfoImpl.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/ConnectionInfoImpl.java
new file mode 100644
index 0000000..37a905e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/ConnectionInfoImpl.java
@@ -0,0 +1,929 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.connection;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.OutputStream;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.ConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IOfflineConnection;
+import org.eclipse.datatools.connectivity.IPropertySetChangeEvent;
+import org.eclipse.datatools.connectivity.IPropertySetListener;
+import org.eclipse.datatools.connectivity.IServerVersionProvider;
+import org.eclipse.datatools.connectivity.Version;
+import org.eclipse.datatools.connectivity.VersionProviderConnection;
+import org.eclipse.datatools.connectivity.IPropertySetChangeEvent.IChangedProperty;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinitionRegistry;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.internal.core.ResourceUtil;
+import org.eclipse.datatools.connectivity.sqm.internal.core.util.CatalogUtil;
+import org.eclipse.datatools.connectivity.sqm.internal.core.util.DatabaseProviderHelper;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.xmi.XMIResource;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
+
+
+public class ConnectionInfoImpl extends VersionProviderConnection implements ConnectionInfo, IOfflineConnection {
+	
+	private static final String PASSWORD = "password"; //$NON-NLS-1$
+	private static final String USER = "user"; //$NON-NLS-1$
+
+	private DatabaseDefinition definition;
+	private String loadingPath = ""; //$NON-NLS-1$
+	private String driverClassName = ""; //$NON-NLS-1$
+	private String url = ""; //$NON-NLS-1$
+	private Properties properties = new Properties();
+	private String name;
+	private String databaseName = null;
+	private String identifierQuoteString = null;
+    private String databaseProductVersion = null;
+	private Connection sharedConnection = null;
+	private Database sharedDatabase = null;
+	private Collection listeners = new LinkedList();
+	private Hashtable filters = null;
+	private Collection filterListeners = new LinkedList();
+	private Collection projects = null;
+	private boolean detectDefinition = false;
+	private IConnection jdbcConnection;
+	private Throwable connectException;
+	private IPropertySetListener profilePropertyListener = new IPropertySetListener() {
+
+		public void propertySetChanged(IPropertySetChangeEvent event) {
+			if (ConnectionFilter.FILTER_SETTINGS_PROFILE_EXTENSION_ID.equals(event
+					.getPropertySetType())) {
+				processFilterChanges(event);
+			}
+		}
+	};
+	
+	public static final String TECHNOLOGY_ROOT_KEY = "jdbc"; //$NON-NLS-1$
+	
+	/* package */static IPath getConnectionDirectory(String name) {
+		IPath path = RDBCorePlugin.getDefaultStateLocation();
+		path = path.append(ConnectionInfo.CONNECTION);
+		if(name != null) path = path.append(name + "/"); //$NON-NLS-1$
+		return path;
+	}
+	
+	/* package */static File getConnectionFile(String name) {
+		IPath connectionPath = getConnectionDirectory(name);
+		return connectionPath.append("cache.xmi").toFile();
+	}
+	
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		if(this.name == null) throw new IllegalStateException();
+		if(name == null) throw new NullPointerException();
+		if(name.trim().equals("")) throw new IllegalArgumentException(); //$NON-NLS-1$
+//		ConnectionManagerImpl mgr = (ConnectionManagerImpl) RDBCorePlugin.getDefault().getConnectionManager();
+//		if(mgr.getConnectionInfo(name) != null) throw new IllegalArgumentException();
+//		mgr.rename(this.name, name);
+		this.name = name;
+	}
+	
+	public DatabaseDefinition getDatabaseDefinition() {
+		return this.definition;
+	}
+
+	public String getLoadingPath() {
+		return this.loadingPath;
+	}
+
+	public void setLoadingPath(String path) {
+		this.loadingPath = path;
+	}
+
+	public String getDriverClassName() {
+		return this.driverClassName;
+	}
+
+	public void setDriverClassName(String className) {
+		this.driverClassName = className;
+	}
+
+	public String getURL() {
+		return this.url;
+	}
+
+	public void setURL(String url) {
+		this.url = url;
+	}
+
+	public Properties getProperties() {
+		return this.properties;
+	}
+
+	
+//	public Connection connect() throws FileNotFoundException, ClassNotFoundException, IllegalAccessException, InstantiationException, SQLException {
+//		Connection cnn = ((ConnectionManagerImpl) RDBCorePlugin.getDefault().getConnectionManager()).connect(this);
+//		if(cnn != null && this.detectDefinition) {
+//			this.detectDefinition = false;
+//			DatabaseDefinition def = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().recognize(cnn);
+//			if(def != null) {
+//				this.definition = def;
+//			}
+//		}
+//		return cnn;
+//	}
+
+	public String getUserName() {
+		return (String) this.properties.get(USER);
+	}
+
+	public void setUserName(String id) {
+		this.properties.put(USER, id);
+	}
+
+	public String getPassword() {
+		return (String) this.properties.get(PASSWORD);		
+	}
+
+	public void setPassword(String password) {
+		this.properties.put(PASSWORD, password);
+	}
+
+	public String getDatabaseName() {
+		return this.databaseName;
+	}
+
+	public void setDatabaseName(String databasename) {
+		this.databaseName = databasename;
+	}
+
+    public String getIdentifierQuoteString() {
+        return this.identifierQuoteString;
+    }
+
+    public void setIdentifierQuoteString(String quote) {
+        this.identifierQuoteString = quote;
+    }
+    
+    public String getDatabaseProductVersion() {
+       return this.databaseProductVersion;
+    }
+    
+    public void setDatabaseProductVersion(String prodVersion) {
+       this.databaseProductVersion = prodVersion;
+    }
+    
+	public void setSharedConnection(Connection connection) {
+		if(connection == null) {
+			removeSharedConnection();
+		}
+		else {
+			try {
+				if(connection.isClosed()) throw new IllegalStateException();
+			}
+			catch(Throwable o) {
+				throw new IllegalStateException();
+			}
+			
+			if(this.sharedConnection == null) {
+				this.sharedConnection = connection;
+				Collection c = new LinkedList();
+				c.addAll(this.listeners);
+				Iterator it = c.iterator();
+				while(it.hasNext()) {
+					ConnectionSharingListener l = (ConnectionSharingListener) it.next();
+					try {
+						l.sharedConnectionAdded(this, connection);
+					}
+					catch(Throwable o) {
+						this.removeConnectionSharingListener(l);
+					}
+				}
+			}
+			else {
+				throw new IllegalStateException();
+			}			
+		}
+	}
+	
+	public IConnection getJDBCConnectionWrapper()
+	{
+		return jdbcConnection;
+	}
+	
+	/**
+	 * Same effect as calling removeSharedConnection(), 
+	 * followed by setSharedConnection()
+	 * but this does not throw an IllegalStateException
+	 * 
+	 * Its effect is to simply switch out the underlying
+	 * Connection object and notify any listeners
+	 * 	
+	 * @param connection, the Connection object to be replaced
+	 */
+	public void replaceSharedConnection(Connection connection)
+	{
+		Connection existingSharedConnection = sharedConnection;
+		Collection c = new LinkedList();
+		c.addAll(listeners);
+		Iterator removingIterator = c.iterator();
+		while(removingIterator.hasNext()) {
+			ConnectionSharingListener l = (ConnectionSharingListener) removingIterator.next();
+			try {
+				l.sharedConnectionRemove(this, existingSharedConnection);
+			}
+			catch(Throwable o) {
+				this.removeConnectionSharingListener(l);
+			}
+		}
+		
+		sharedConnection = connection;
+			
+		Iterator addingIterator = c.iterator();
+		while(addingIterator.hasNext()) {
+			ConnectionSharingListener l = (ConnectionSharingListener) addingIterator.next();
+			try {
+				l.sharedConnectionAdded(this, connection);
+			}
+			catch(Throwable o) {
+				this.removeConnectionSharingListener(l);
+			}
+		}
+	}
+	
+
+	public Connection getSharedConnection() {
+		return this.sharedConnection;
+	}
+
+	public void removeSharedConnection() {
+		if(this.sharedConnection == null) throw new IllegalStateException();
+		Connection connection = this.sharedConnection;
+		this.sharedConnection = null;
+		Collection c = new LinkedList();
+		c.addAll(this.listeners);
+		Iterator it = c.iterator();
+		while(it.hasNext()) {
+			ConnectionSharingListener l = (ConnectionSharingListener) it.next();
+			try {
+				l.sharedConnectionRemove(this, connection);
+			}
+			catch(Throwable o) {
+				this.removeConnectionSharingListener(l);
+			}
+		}		
+	}
+
+	public void setSharedDatabase(Database database) {
+		if(database == null) {
+			removeSharedDatabase();
+		}
+		else {
+			if(this.sharedDatabase == null) {
+				this.sharedDatabase = database;
+				
+				DatabaseConnectionRegistry.getInstance().registerConnectionForDatabase(this,database);
+
+				Collection c = new LinkedList();
+				c.addAll(this.listeners);
+				Iterator it = c.iterator();
+				while(it.hasNext()) {
+					ConnectionSharingListener l = (ConnectionSharingListener) it.next();
+					try {
+						l.sharedDatabaseAdded(this, database);
+					}
+					catch(Throwable o) {
+						this.removeConnectionSharingListener(l);
+					}
+				}
+			}
+			else {
+				throw new IllegalStateException();				
+			}
+		}
+	}
+
+	public Database getSharedDatabase() {
+		return this.sharedDatabase;
+	}
+
+	public void removeSharedDatabase() {
+		if(this.sharedDatabase == null) throw new IllegalStateException();
+		Database database = this.sharedDatabase;
+
+		DatabaseConnectionRegistry.getInstance().unregisterConnectionForDatabase(database);
+
+		this.sharedDatabase = null;
+		Collection c = new LinkedList();
+		c.addAll(this.listeners);
+		Iterator it = c.iterator();
+		while(it.hasNext()) {
+			ConnectionSharingListener l = (ConnectionSharingListener) it.next();
+			try {
+				l.sharedDatabaseRemove(this, database);
+			}
+			catch(Throwable o) {
+				this.removeConnectionSharingListener(l);
+			}
+		}				
+	}
+
+	public boolean addConnectionSharingListener(ConnectionSharingListener listener) {
+		if(listener == null) throw new NullPointerException();
+		Iterator it = this.listeners.iterator();
+		while(it.hasNext()) {
+			if(listener == it.next()) {
+				return false;
+			}
+		}
+		
+		listeners.add(listener);
+		return true;
+	}
+
+	public boolean removeConnectionSharingListener(ConnectionSharingListener listener) {
+		if(listener == null) throw new NullPointerException();
+		Iterator it = this.listeners.iterator();
+		while(it.hasNext()) {
+			if(listener == it.next()) {
+				it.remove();
+				return true;
+			}
+		}
+		return false;
+	}
+
+	public void cacheDatabase(Database database) throws IOException {
+		if(this.name == null) throw new IllegalStateException();
+	    initConnectionDirectory();
+		OutputStream out = new FileOutputStream(getConnectionFile(name));
+		Resource r = new XMIResourceImpl();
+		r.getContents().add(database);
+		ResourceUtil.resolveDanglingReferences(r);
+		Map options = new HashMap();
+		options.put(XMIResource.OPTION_ENCODING, "UTF-8"); //$NON-NLS-1$
+		r.save(out, options);
+		r.getContents().clear();
+	}
+
+	public Database getCachedDatabase() {
+		if(this.name == null) throw new IllegalStateException();
+		initConnectionDirectory();
+		File file = getConnectionFile(name);
+		if(file.exists()) {
+			Resource r = new XMIResourceImpl();
+			try {
+				InputStream in = new FileInputStream(file);
+				r.load(in, (Map) null);
+				EList l = r.getContents();
+				Database database = (Database) l.get(0);
+				l.clear();
+				return database;
+			}
+			catch(Throwable o) {
+			    o.printStackTrace();
+				// ignore all exceptions
+			}
+		}
+		return null;
+	}
+
+	public long getCachedDatabaseTimestamp() {
+		if(this.name == null) throw new IllegalStateException();
+	    IPath path = initConnectionDirectory();
+		path = path.append("cache.xmi"); //$NON-NLS-1$
+		File file = path.toFile();
+		if(file.exists()) {
+			return file.lastModified();
+		}
+		return 0;
+	}
+
+	void setDatabaseDefinition(DatabaseDefinition def) {
+		this.definition = def;
+	}
+	
+	private IPath initConnectionDirectory() {
+		IPath path = getConnectionDirectory(name);
+		File dir = path.toFile();
+		if(!dir.exists()) {
+			dir.mkdirs();
+		}	
+		return path;
+	}
+
+	public void addFilter(String key, ConnectionFilter filter){
+		if (this.filters == null) this.loadFilterInfo();
+		
+		if (this.filters.containsKey(key)) {
+			this.filters.remove(key);
+		}
+		
+		this.filters.put(key, filter);
+		try {
+			this.saveFilterInfo();
+			
+		} catch (Exception e) {
+			System.out.println(e.toString());
+		}
+		
+		fireFilterAdded(key);
+	}
+	
+	public void removeFilter(String key){
+		if (this.filters == null) this.loadFilterInfo();
+
+		if (this.filters.containsKey(key)){
+			this.filters.remove(key);
+			try {
+				this.saveFilterInfo();
+			}catch(Exception e) {
+			}
+			
+			fireFilterRemoved(key);
+		}
+	}
+
+	public ConnectionFilter getFilter(String key){
+		if (this.filters == null) this.loadFilterInfo();
+		if (key != null) {
+			if (this.filters.containsKey(key)){
+				return (ConnectionFilter) this.filters.get(key);
+			}
+		}
+		return null;
+	}
+
+	public Iterator getFilters(){
+		List filters = new LinkedList();
+
+		Enumeration e = this.filters.elements();
+		while (e.hasMoreElements()) {
+			filters.add(e.nextElement());
+		}
+		
+		return filters.iterator();
+	}
+
+	public IProject[] getDependentProjects() {
+		if(this.projects == null) {
+			loadDependentProjects();
+		}
+		IProject[] p = new IProject[this.projects.size()];
+		this.projects.toArray(p);
+		return p;
+	}
+	
+	public void addDependentProject(IProject proj) {
+		if(this.projects == null) {
+			loadDependentProjects();
+		}
+		this.projects.add(proj);
+		this.saveDependentProjects();
+	}
+	
+	public void removeDependentProject(IProject proj) {
+		if(this.projects == null) {
+			loadDependentProjects();
+		}
+		this.projects.remove(proj);
+		this.saveDependentProjects();
+	}
+	
+	void onSQLException(Connection connection, SQLException exception) {
+		Collection c = new LinkedList();
+		c.addAll(this.listeners);
+		Iterator it = c.iterator();
+		while(it.hasNext()) {
+			ConnectionSharingListener l = (ConnectionSharingListener) it.next();
+			try {
+				l.onSQLException(this, connection, exception);
+			}
+			catch(Throwable o) {
+				this.removeConnectionSharingListener(l);
+			}
+		}			    
+	}
+	
+	private void loadDependentProjects() {
+		this.projects = new HashSet();
+		
+		IPath path = initConnectionDirectory();
+		path = path.append("projects"); //$NON-NLS-1$
+		File file = path.toFile();
+		if(!file.exists()) return;
+		
+		try {
+			InputStream fileInput = new FileInputStream(file);
+			ObjectInputStream objectInput = new ObjectInputStream(fileInput);
+			LinkedList l = (LinkedList) objectInput.readObject();
+			objectInput.close();
+			IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+			Iterator i = l.iterator();
+			while(i.hasNext()) {
+				String name = (String) i.next();
+				IProject p = root.getProject(name);
+				if(p != null) this.projects.add(p);
+			}
+		}
+		catch(Exception e) {
+			// ignore all exceptions
+		}
+	}
+	
+	private void saveDependentProjects() {
+		IPath path = initConnectionDirectory();
+		path = path.append("projects"); //$NON-NLS-1$
+		File file = path.toFile();
+		
+		LinkedList l = new LinkedList();
+		Iterator i = this.projects.iterator();
+		while(i.hasNext()) {
+			l.add(((IProject) i.next()).getName());
+		}
+		
+		try {
+			OutputStream fileOutput = new FileOutputStream(file);
+			ObjectOutputStream objectOutput = new ObjectOutputStream(fileOutput);
+			objectOutput.writeObject(l);
+			objectOutput.close();
+		}
+		catch(IOException e) {
+			// ignore all exceptions
+		}
+	}
+
+	private void saveFilterInfo() throws IOException, FileNotFoundException {
+		if (this.name == null || this.name.equals("")) return; //$NON-NLS-1$
+		
+		IPath path = initConnectionDirectory();
+		String	filename = ConnectionInfo.FILTER + "." + ConnectionInfo.INFO_FILE_EXTENSION; //$NON-NLS-1$ //$NON-NLS-2$
+		path = path.append(filename);
+		File file = path.toFile();
+		
+		OutputStream fileOutput = new FileOutputStream(file);
+		ObjectOutputStream objectOutput = new ObjectOutputStream(fileOutput);
+		objectOutput.writeObject(this.filters);
+		objectOutput.close();
+	}
+	
+	private void loadFilterInfo() {
+		Properties props = getConnectionProfile().getProperties(ConnectionFilter.FILTER_SETTINGS_PROFILE_EXTENSION_ID);
+		this.filters = new Hashtable();
+		for (Iterator it = props.entrySet().iterator(); it.hasNext();) {
+			Map.Entry entry = (Map.Entry) it.next();
+			String filterID = (String) entry.getKey();
+			if (filterID != null) {
+				String predicate = (String) entry.getValue();
+				if (predicate != null && predicate.length() > 0) {
+					ConnectionFilter filter = new ConnectionFilterImpl(
+							predicate);
+					filters.put(filterID, filter);
+				}
+			}
+		}
+	}
+
+	public boolean addFilterListener(ConnectionFilterListener listener) {
+		if(listener == null) throw new NullPointerException();
+		Iterator it = this.filterListeners.iterator();
+		while(it.hasNext()) {
+			if(listener == it.next()) return false;
+		}
+
+		this.filterListeners.add(listener);
+		return true;
+	}
+
+	public boolean removeFilterListener(ConnectionFilterListener listener) {
+		if(listener == null) throw new NullPointerException();
+		Iterator it = this.filterListeners.iterator();
+		while(it.hasNext()) {
+			if(listener == it.next()) {
+				it.remove();
+				return true;
+			}
+		}
+		return false;
+	}
+
+	public void discoverDatabaseDefinitionWhenConnect() {
+		this.detectDefinition = true;
+	}
+	
+	public boolean isDiscoverDatabaseDefinitionWhenConnectEnabled () {
+		return this.detectDefinition;
+	}
+
+    public ConnectionInfoImpl(IConnectionProfile profile, Class factoryClass) {
+        super(profile, factoryClass);
+        String vendor = null;
+        String version = null;
+        String databaseName = null;
+        try{
+            vendor = profile.getBaseProperties().getProperty(
+                IJDBCDriverDefinitionConstants.DATABASE_VENDOR_PROP_ID);
+            version = profile.getBaseProperties().getProperty(
+                IJDBCDriverDefinitionConstants.DATABASE_VERSION_PROP_ID);
+            databaseName = profile.getBaseProperties().getProperty(
+                    IJDBCDriverDefinitionConstants.DATABASE_NAME_PROP_ID);
+            if (databaseName == null || databaseName.trim().length() == 0) {
+            	databaseName = profile.getName();
+           	}
+        } catch (Exception e){
+            e.printStackTrace();
+        }
+        DatabaseDefinitionRegistry defRegistry = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry();
+        DatabaseDefinition dbDef = defRegistry.getDefinition(vendor, version);
+        if (dbDef == null){
+        	dbDef = defRegistry.getDefinition("Generic JDBC", "1.0");
+        }
+        this.setDatabaseDefinition(dbDef);
+        this.setDatabaseName(databaseName);
+        
+        this.name = profile.getName();
+    }
+    
+	public ConnectionInfoImpl(final IConnectionProfile profile, Class factoryClass, boolean createConnection) {
+		this(profile, factoryClass);
+        
+        if (createConnection)
+        {
+        	initializeJDBCConnection();
+        }
+        else
+        {
+            jdbcConnection = null;
+            Database database = getCachedDatabase();
+            if (database != null) {
+            	setSharedDatabase(database);
+            }
+        }
+        profile.addPropertySetListener(profilePropertyListener);
+	}
+	
+	private void initializeJDBCConnection() {
+		IConnectionProfile profile = getConnectionProfile();
+		jdbcConnection = profile.createConnection(Connection.class.getName());
+		connectException = jdbcConnection.getConnectException();
+		Connection connection = (Connection) jdbcConnection.getRawConnection();
+		if (connection != null) {
+			DatabaseDefinition detectedDBDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().recognize(connection);
+			if(detectedDBDefinition != null) {
+				Properties props = copyProperties(profile.getProperties(getConnectionProfile().getProviderId()));
+				props.setProperty(IJDBCDriverDefinitionConstants.DATABASE_VENDOR_PROP_ID, detectedDBDefinition.getProduct());
+				props.setProperty(IJDBCDriverDefinitionConstants.DATABASE_VERSION_PROP_ID, detectedDBDefinition.getVersion());				
+				profile.setProperties(getConnectionProfile().getProviderId(), props);
+				this.setDatabaseDefinition(detectedDBDefinition);
+			}
+			this.setSharedConnection(connection);
+	        new DatabaseProviderHelper().setDatabase(new ConnectionAdapter(this,connection),
+	                this, this.getDatabaseName());
+		}
+	}
+	
+	private Properties copyProperties(Properties properties) {
+		Properties copy = new Properties();
+		Enumeration propertyKeys = properties.keys();
+		while (propertyKeys.hasMoreElements()) {
+			Object key = propertyKeys.nextElement();
+			copy.put(key, properties.get(key));
+		}
+		return copy;
+	}
+	
+	private void processFilterChanges(IPropertySetChangeEvent event) {
+		if (this.filters == null) this.loadFilterInfo();
+		for (Iterator it = event.getChangedProperties().values().iterator(); it.hasNext();) {
+			IChangedProperty changedProperty = (IChangedProperty)it.next();
+			if (changedProperty.getNewValue() == null) {
+				// filter removed
+				filters.remove(changedProperty.getID());
+				fireFilterRemoved(changedProperty.getID());
+			}
+			else if (changedProperty.getOldValue() == null) {
+				// filter added
+				filters.put(changedProperty.getID(), new ConnectionFilterImpl(changedProperty.getNewValue()));
+				fireFilterAdded(changedProperty.getID());
+			}
+			else {
+				// filter changed
+				filters.put(changedProperty.getID(), new ConnectionFilterImpl(changedProperty.getNewValue()));
+				fireFilterChanged(changedProperty.getID());
+			}
+		}
+	}
+	
+	private void fireFilterRemoved(String filterID) {
+		Collection cachedListener = new LinkedList();
+		cachedListener.addAll(filterListeners);
+		Iterator it = cachedListener.iterator();
+		while (it.hasNext()) {
+			ConnectionFilterListener l = (ConnectionFilterListener) it.next();
+			try {
+				l.connectionFilterRemoved(filterID);
+			}
+			catch (Throwable e) {
+				RDBCorePlugin.getDefault().getLog().log(
+						new Status(Status.ERROR, RDBCorePlugin.getSymbolicName(), -1, 
+								e.getLocalizedMessage() == null ? new String()
+								: e.getLocalizedMessage(), e));
+			}
+		}
+	}
+
+	private void fireFilterAdded(String filterID) {
+		Collection cachedListener = new LinkedList();
+		cachedListener.addAll(filterListeners);
+		Iterator it = cachedListener.iterator();
+		while (it.hasNext()) {
+			ConnectionFilterListener l = (ConnectionFilterListener) it.next();
+			try {
+				l.connectionFilterAdded(filterID);
+			}
+			catch (Throwable e) {
+				RDBCorePlugin.getDefault().getLog().log(
+						new Status(Status.ERROR, RDBCorePlugin.getSymbolicName(), -1, 
+								e.getLocalizedMessage() == null ? new String()
+								: e.getLocalizedMessage(), e));
+			}
+		}
+	}
+
+	private void fireFilterChanged(String filterID) {
+		Collection cachedListener = new LinkedList();
+		cachedListener.addAll(filterListeners);
+		Iterator it = cachedListener.iterator();
+		while (it.hasNext()) {
+			ConnectionFilterListener l = (ConnectionFilterListener) it.next();
+			try {
+				l.connectionFilterAdded(filterID);
+			}
+			catch (Throwable e) {
+				RDBCorePlugin.getDefault().getLog().log(
+						new Status(Status.ERROR, RDBCorePlugin.getSymbolicName(), -1, 
+								e.getLocalizedMessage() == null ? new String()
+								: e.getLocalizedMessage(), e));
+			}
+		}
+	}
+
+	private void test(){
+		
+		Database db = this.getSharedDatabase();
+		Iterator schemasIter = db.getSchemas().iterator();
+		
+		while (schemasIter.hasNext()){
+			Schema schema = (Schema)schemasIter.next();
+			System.out.println("Schema " + schema.getName() + " has tables:"); //$NON-NLS-1$ //$NON-NLS-2$
+			EList tables = schema.getTables();
+			Iterator tableIter = tables.iterator();
+			while(tableIter.hasNext()){		
+			System.out.println(((Table)tableIter.next()).getName());
+			}	
+		}
+	}
+	
+	public void close() {
+		getConnectionProfile().removePropertySetListener(
+				profilePropertyListener);
+		if (getSharedDatabase() != null) {
+			setSharedDatabase(null);
+		}
+		if (getSharedConnection() != null) {
+			setSharedConnection(null);
+		}
+		if (jdbcConnection != null) {
+			jdbcConnection.close();
+			jdbcConnection = null;
+		}
+	}
+
+	public Throwable getConnectException() {
+		return connectException;
+	}
+
+	public String getProviderName() {
+		return jdbcConnection == null ? getConnectionProfile().getProperties(
+				ConnectionProfileConstants.VERSION_INFO_PROFILE_EXTENSION_ID)
+				.getProperty(ConnectionProfileConstants.PROP_SERVER_NAME)
+				: ((IServerVersionProvider) jdbcConnection).getProviderName();
+	}
+
+	public Version getProviderVersion() {
+		return jdbcConnection == null ? Version
+				.valueOf(getConnectionProfile()
+						.getProperties(
+								ConnectionProfileConstants.VERSION_INFO_PROFILE_EXTENSION_ID)
+						.getProperty(
+								ConnectionProfileConstants.PROP_SERVER_VERSION))
+				: ((IServerVersionProvider) jdbcConnection)
+						.getProviderVersion();
+	}
+
+	protected String getTechnologyRootKey() {
+		return TECHNOLOGY_ROOT_KEY;
+	}
+
+	public String getTechnologyName() {
+		return jdbcConnection == null ? getConnectionProfile()
+				.getProperties(
+						ConnectionProfileConstants.VERSION_INFO_PROFILE_EXTENSION_ID)
+				.getProperty(
+						ConnectionProfileConstants
+								.createTechnologyNameKey(getTechnologyRootKey()))
+				: ((IServerVersionProvider) jdbcConnection).getTechnologyName();
+	}
+
+	public Version getTechnologyVersion() {
+		return jdbcConnection == null ? Version
+				.valueOf(getConnectionProfile()
+						.getProperties(
+								ConnectionProfileConstants.VERSION_INFO_PROFILE_EXTENSION_ID)
+						.getProperty(
+								ConnectionProfileConstants
+										.createTechnologyVersionKey(getTechnologyRootKey())))
+				: ((IServerVersionProvider) jdbcConnection)
+						.getTechnologyVersion();
+	}
+
+	public Object getRawConnection() {
+		return this;
+	}
+
+	public void attach(IProgressMonitor monitor) throws CoreException {
+		initializeJDBCConnection();
+		monitor.done();
+	}
+
+	public void detach(IProgressMonitor monitor) throws CoreException {
+		save(monitor);
+		removeSharedConnection();
+	}
+
+	public boolean isWorkingOffline() {
+		return connectException == null && sharedConnection == null
+				&& sharedDatabase != null;
+	}
+
+	public void save(IProgressMonitor monitor) throws CoreException {
+		monitor
+				.beginTask(
+						"Save Offline SQL Model for " + getName(), 100);
+		monitor.worked(5);
+		new CatalogUtil().load(sharedDatabase, monitor, 90);
+		if (!monitor.isCanceled()) {
+			monitor.subTask(""); //$NON-NLS-1$
+			try {
+				cacheDatabase(sharedDatabase);
+			}
+			catch (IOException e) {
+				Status status = new Status(Status.ERROR, RDBCorePlugin.getSymbolicName(), -1,
+						"Error saving offline SQL Model for {0}.", e);
+				throw new CoreException(status);
+			}
+		}
+		else {
+			throw new CoreException(Status.CANCEL_STATUS);
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/ConnectionSharingListener.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/ConnectionSharingListener.java
new file mode 100644
index 0000000..474e82d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/ConnectionSharingListener.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.connection;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+public interface ConnectionSharingListener {
+	public void sharedConnectionAdded(ConnectionInfo info, Connection connection);
+	public void sharedConnectionRemove(ConnectionInfo info, Connection connection);
+	public void sharedDatabaseAdded(ConnectionInfo info, Database database);
+	public void sharedDatabaseRemove(ConnectionInfo info, Database database);
+	public void onSQLException(ConnectionInfo info, Connection connection, SQLException exception);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/DatabaseConnectionRegistry.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/DatabaseConnectionRegistry.java
new file mode 100644
index 0000000..1b89053
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/DatabaseConnectionRegistry.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    rcernich - initial API and implementation
+ *******************************************************************************/ 
+package org.eclipse.datatools.connectivity.sqm.internal.core.connection;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+
+public class DatabaseConnectionRegistry {
+
+	private static DatabaseConnectionRegistry sInstance = new DatabaseConnectionRegistry();
+	private Map mDatabaseToConnectionInfo = new HashMap();
+
+	public static DatabaseConnectionRegistry getInstance() {
+		return sInstance;
+	}
+
+	public ConnectionInfo getConnectionForDatabase(Database database) {
+		ConnectionInfo connection = null;
+		synchronized (mDatabaseToConnectionInfo) {
+			if (mDatabaseToConnectionInfo.containsKey(database)) {
+				connection = (ConnectionInfo) mDatabaseToConnectionInfo
+						.get(database);
+			}
+		}
+		return connection;
+	}
+	
+	/*package*/ void registerConnectionForDatabase(ConnectionInfo connection,Database database) {
+		synchronized (mDatabaseToConnectionInfo) {
+			mDatabaseToConnectionInfo.put(database, connection);
+		}
+	}
+	
+	/*package*/ void unregisterConnectionForDatabase(Database database) {
+		synchronized (mDatabaseToConnectionInfo) {
+			mDatabaseToConnectionInfo.remove(database);
+		}
+	}
+	
+	private DatabaseConnectionRegistry() {
+		super();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/IConnectionSharingEnhancedListener.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/IConnectionSharingEnhancedListener.java
new file mode 100644
index 0000000..139dc38
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/IConnectionSharingEnhancedListener.java
@@ -0,0 +1,25 @@
+/*******************************************************************************

+ * Copyright (c) 2010 IBM Corporation and others.

+ * 

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ * 

+ * Contributors:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.datatools.connectivity.sqm.internal.core.connection;

+

+import java.sql.Connection;

+

+public interface IConnectionSharingEnhancedListener extends ConnectionSharingListener 

+{

+	/**

+	 * 

+	 * @param info, ConnectionInfo managing shared connection

+	 * @param connection, java.sql.Connection associated with the error

+	 * @param error, Throwable that implementer would like to handle

+	 */

+	public void onError(ConnectionInfo info, Connection connection, Throwable error);

+}

diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/Predicate.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/Predicate.java
new file mode 100644
index 0000000..6c7068d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/Predicate.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.datatools.connectivity.sqm.internal.core.connection;
+
+import java.io.Serializable;
+
+public class Predicate implements Serializable {
+
+	private static final long serialVersionUID = 2754142397787308454L;
+	private String value = "";
+	private int operator;
+
+	public Predicate(int operator, String value) {
+		this.operator = operator;
+		this.value = value;
+	}
+
+	public String getValue() {
+		return value;
+	}
+
+	public int getOperator() {
+		return operator;
+	}
+
+	public void setValue(String value) {
+		this.value = value;
+	}
+
+	public void setOperator(int operator) {
+		this.operator = operator;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/ResultSetAdapter.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/ResultSetAdapter.java
new file mode 100644
index 0000000..7113024
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/ResultSetAdapter.java
@@ -0,0 +1,743 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.connection;
+
+import java.io.InputStream;
+import java.io.Reader;
+import java.math.BigDecimal;
+import java.net.URL;
+import java.sql.Array;
+import java.sql.Blob;
+import java.sql.Clob;
+import java.sql.Date;
+import java.sql.NClob;
+import java.sql.Ref;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.RowId;
+import java.sql.SQLException;
+import java.sql.SQLWarning;
+import java.sql.SQLXML;
+import java.sql.Statement;
+import java.sql.Time;
+import java.sql.Timestamp;
+import java.util.Calendar;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+
+public class ResultSetAdapter implements ResultSet {
+	private ResultSet resultSet;
+	private StatementAdapter statement;
+	
+	public ResultSetAdapter(StatementAdapter statement, ResultSet resultSet) {
+		this.statement = statement;
+		this.resultSet = resultSet;
+	}
+	public boolean absolute(int arg0) throws SQLException {
+		return resultSet.absolute(arg0);
+	}
+	public void afterLast() throws SQLException {
+		resultSet.afterLast();
+	}
+	public void beforeFirst() throws SQLException {
+		resultSet.beforeFirst();
+	}
+	public void cancelRowUpdates() throws SQLException {
+		resultSet.cancelRowUpdates();
+	}
+	public void clearWarnings() throws SQLException {
+		resultSet.clearWarnings();
+	}
+	public void close() throws SQLException {
+		resultSet.close();
+	}
+	public void deleteRow() throws SQLException {
+		resultSet.deleteRow();
+	}
+	public boolean equals(Object arg0) {
+		return resultSet.equals(arg0);
+	}
+	public int findColumn(String arg0) throws SQLException {
+		return resultSet.findColumn(arg0);
+	}
+	public boolean first() throws SQLException {
+		return resultSet.first();
+	}
+	public Array getArray(int arg0) throws SQLException {
+		return resultSet.getArray(arg0);
+	}
+	public Array getArray(String arg0) throws SQLException {
+		return resultSet.getArray(arg0);
+	}
+	public InputStream getAsciiStream(int arg0) throws SQLException {
+		return resultSet.getAsciiStream(arg0);
+	}
+	public InputStream getAsciiStream(String arg0) throws SQLException {
+		return resultSet.getAsciiStream(arg0);
+	}
+	public BigDecimal getBigDecimal(int arg0) throws SQLException {
+		return resultSet.getBigDecimal(arg0);
+	}
+	public BigDecimal getBigDecimal(int arg0, int arg1) throws SQLException {
+		return resultSet.getBigDecimal(arg0, arg1);
+	}
+	public BigDecimal getBigDecimal(String arg0) throws SQLException {
+		return resultSet.getBigDecimal(arg0);
+	}
+	public BigDecimal getBigDecimal(String arg0, int arg1) throws SQLException {
+		return resultSet.getBigDecimal(arg0, arg1);
+	}
+	public InputStream getBinaryStream(int arg0) throws SQLException {
+		return resultSet.getBinaryStream(arg0);
+	}
+	public InputStream getBinaryStream(String arg0) throws SQLException {
+		return resultSet.getBinaryStream(arg0);
+	}
+	public Blob getBlob(int arg0) throws SQLException {
+		return resultSet.getBlob(arg0);
+	}
+	public Blob getBlob(String arg0) throws SQLException {
+		return resultSet.getBlob(arg0);
+	}
+	public boolean getBoolean(int arg0) throws SQLException {
+		return resultSet.getBoolean(arg0);
+	}
+	public boolean getBoolean(String arg0) throws SQLException {
+		return resultSet.getBoolean(arg0);
+	}
+	public byte getByte(int arg0) throws SQLException {
+		return resultSet.getByte(arg0);
+	}
+	public byte getByte(String arg0) throws SQLException {
+		return resultSet.getByte(arg0);
+	}
+	public byte[] getBytes(int arg0) throws SQLException {
+		return resultSet.getBytes(arg0);
+	}
+	public byte[] getBytes(String arg0) throws SQLException {
+		return resultSet.getBytes(arg0);
+	}
+	public Reader getCharacterStream(int arg0) throws SQLException {
+		return resultSet.getCharacterStream(arg0);
+	}
+	public Reader getCharacterStream(String arg0) throws SQLException {
+		return resultSet.getCharacterStream(arg0);
+	}
+	public Clob getClob(int arg0) throws SQLException {
+		return resultSet.getClob(arg0);
+	}
+	public Clob getClob(String arg0) throws SQLException {
+		return resultSet.getClob(arg0);
+	}
+	public int getConcurrency() throws SQLException {
+		return resultSet.getConcurrency();
+	}
+	public String getCursorName() throws SQLException {
+		return resultSet.getCursorName();
+	}
+	public Date getDate(int arg0) throws SQLException {
+		return resultSet.getDate(arg0);
+	}
+	public Date getDate(int arg0, Calendar arg1) throws SQLException {
+		return resultSet.getDate(arg0, arg1);
+	}
+	public Date getDate(String arg0) throws SQLException {
+		return resultSet.getDate(arg0);
+	}
+	public Date getDate(String arg0, Calendar arg1) throws SQLException {
+		return resultSet.getDate(arg0, arg1);
+	}
+	public double getDouble(int arg0) throws SQLException {
+		return resultSet.getDouble(arg0);
+	}
+	public double getDouble(String arg0) throws SQLException {
+		return resultSet.getDouble(arg0);
+	}
+	public int getFetchDirection() throws SQLException {
+		return resultSet.getFetchDirection();
+	}
+	public int getFetchSize() throws SQLException {
+		return resultSet.getFetchSize();
+	}
+	public float getFloat(int arg0) throws SQLException {
+		return resultSet.getFloat(arg0);
+	}
+	public float getFloat(String arg0) throws SQLException {
+		return resultSet.getFloat(arg0);
+	}
+	public int getInt(int arg0) throws SQLException {
+		try {
+			return resultSet.getInt(arg0);			
+		}
+		catch(SQLException e) {
+		    IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getSymbolicName(), IStatus.ERROR,
+		            e.getClass().getName(),
+		            e);
+			RDBCorePlugin.getDefault().getLog().log(status);
+			ConnectionInfoImpl info =  (ConnectionInfoImpl) ((ConnectionAdapter) this.statement.getConnection()).getConnectionInfo();
+			info.onSQLException(this.statement.getConnection(), e);
+	        throw e;
+		}
+	}
+	public int getInt(String arg0) throws SQLException {
+		try {
+			return resultSet.getInt(arg0);
+		}
+		catch(SQLException e) {
+		    IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getSymbolicName(), IStatus.ERROR,
+		            e.getClass().getName(),
+		            e);
+			RDBCorePlugin.getDefault().getLog().log(status);
+	        throw e;
+		}
+	}
+	public long getLong(int arg0) throws SQLException {
+		return resultSet.getLong(arg0);
+	}
+	public long getLong(String arg0) throws SQLException {
+		return resultSet.getLong(arg0);
+	}
+	public ResultSetMetaData getMetaData() throws SQLException {
+		return resultSet.getMetaData();
+	}
+	public Object getObject(int arg0) throws SQLException {
+		return resultSet.getObject(arg0);
+	}
+	public <T> T getObject(int arg0, Class<T> type) throws SQLException {
+		return resultSet.getObject(arg0, type);
+	}
+	public Object getObject(int arg0, Map arg1) throws SQLException {
+		return resultSet.getObject(arg0, arg1);
+	}
+	public Object getObject(String arg0) throws SQLException {
+		return resultSet.getObject(arg0);
+	}
+	public <T> T getObject(String arg0, Class<T> type) throws SQLException {
+		return resultSet.getObject(arg0, type);
+	}
+	public Object getObject(String arg0, Map arg1) throws SQLException {
+		return resultSet.getObject(arg0, arg1);
+	}
+	public Ref getRef(int arg0) throws SQLException {
+		return resultSet.getRef(arg0);
+	}
+	public Ref getRef(String arg0) throws SQLException {
+		return resultSet.getRef(arg0);
+	}
+	public int getRow() throws SQLException {
+		return resultSet.getRow();
+	}
+	public short getShort(int arg0) throws SQLException {
+		return resultSet.getShort(arg0);
+	}
+	public short getShort(String arg0) throws SQLException {
+		return resultSet.getShort(arg0);
+	}
+	public Statement getStatement() throws SQLException {
+		return resultSet.getStatement();
+	}
+	public String getString(int arg0) throws SQLException {
+		try {
+			return resultSet.getString(arg0);
+		}
+		catch(SQLException e) {
+		    IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getSymbolicName(), IStatus.ERROR,
+		            e.getClass().getName(),
+		            e);
+			RDBCorePlugin.getDefault().getLog().log(status);
+	        throw e;
+		}
+	}
+	public String getString(String arg0) throws SQLException {
+		try {
+			return resultSet.getString(arg0);
+		}
+		catch(SQLException e) {
+		    IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getSymbolicName(), IStatus.ERROR,
+		            e.getClass().getName(),
+		            e);
+			RDBCorePlugin.getDefault().getLog().log(status);
+	        throw e;
+		}
+	}
+	public Time getTime(int arg0) throws SQLException {
+		return resultSet.getTime(arg0);
+	}
+	public Time getTime(int arg0, Calendar arg1) throws SQLException {
+		return resultSet.getTime(arg0, arg1);
+	}
+	public Time getTime(String arg0) throws SQLException {
+		return resultSet.getTime(arg0);
+	}
+	public Time getTime(String arg0, Calendar arg1) throws SQLException {
+		return resultSet.getTime(arg0, arg1);
+	}
+	public Timestamp getTimestamp(int arg0) throws SQLException {
+		return resultSet.getTimestamp(arg0);
+	}
+	public Timestamp getTimestamp(int arg0, Calendar arg1) throws SQLException {
+		return resultSet.getTimestamp(arg0, arg1);
+	}
+	public Timestamp getTimestamp(String arg0) throws SQLException {
+		return resultSet.getTimestamp(arg0);
+	}
+	public Timestamp getTimestamp(String arg0, Calendar arg1)
+			throws SQLException {
+		return resultSet.getTimestamp(arg0, arg1);
+	}
+	public int getType() throws SQLException {
+		return resultSet.getType();
+	}
+	public InputStream getUnicodeStream(int arg0) throws SQLException {
+		return resultSet.getUnicodeStream(arg0);
+	}
+	public InputStream getUnicodeStream(String arg0) throws SQLException {
+		return resultSet.getUnicodeStream(arg0);
+	}
+	public URL getURL(int arg0) throws SQLException {
+		return resultSet.getURL(arg0);
+	}
+	public URL getURL(String arg0) throws SQLException {
+		return resultSet.getURL(arg0);
+	}
+	public SQLWarning getWarnings() throws SQLException {
+		return resultSet.getWarnings();
+	}
+	public int hashCode() {
+		return resultSet.hashCode();
+	}
+	public void insertRow() throws SQLException {
+		resultSet.insertRow();
+	}
+	public boolean isAfterLast() throws SQLException {
+		return resultSet.isAfterLast();
+	}
+	public boolean isBeforeFirst() throws SQLException {
+		return resultSet.isBeforeFirst();
+	}
+	public boolean isFirst() throws SQLException {
+		return resultSet.isFirst();
+	}
+	public boolean isLast() throws SQLException {
+		return resultSet.isLast();
+	}
+	public boolean last() throws SQLException {
+		return resultSet.last();
+	}
+	public void moveToCurrentRow() throws SQLException {
+		resultSet.moveToCurrentRow();
+	}
+	public void moveToInsertRow() throws SQLException {
+		resultSet.moveToInsertRow();
+	}
+	public boolean next() throws SQLException {
+		return resultSet.next();
+	}
+	public boolean previous() throws SQLException {
+		return resultSet.previous();
+	}
+	public void refreshRow() throws SQLException {
+		resultSet.refreshRow();
+	}
+	public boolean relative(int arg0) throws SQLException {
+		return resultSet.relative(arg0);
+	}
+	public boolean rowDeleted() throws SQLException {
+		return resultSet.rowDeleted();
+	}
+	public boolean rowInserted() throws SQLException {
+		return resultSet.rowInserted();
+	}
+	public boolean rowUpdated() throws SQLException {
+		return resultSet.rowUpdated();
+	}
+	public void setFetchDirection(int arg0) throws SQLException {
+		resultSet.setFetchDirection(arg0);
+	}
+	public void setFetchSize(int arg0) throws SQLException {
+		resultSet.setFetchSize(arg0);
+	}
+	public String toString() {
+		return resultSet.toString();
+	}
+	public void updateArray(int arg0, Array arg1) throws SQLException {
+		resultSet.updateArray(arg0, arg1);
+	}
+	public void updateArray(String arg0, Array arg1) throws SQLException {
+		resultSet.updateArray(arg0, arg1);
+	}
+	public void updateAsciiStream(int arg0, InputStream arg1, int arg2)
+			throws SQLException {
+		resultSet.updateAsciiStream(arg0, arg1, arg2);
+	}
+	public void updateAsciiStream(String arg0, InputStream arg1, int arg2)
+			throws SQLException {
+		resultSet.updateAsciiStream(arg0, arg1, arg2);
+	}
+	public void updateBigDecimal(int arg0, BigDecimal arg1) throws SQLException {
+		resultSet.updateBigDecimal(arg0, arg1);
+	}
+	public void updateBigDecimal(String arg0, BigDecimal arg1)
+			throws SQLException {
+		resultSet.updateBigDecimal(arg0, arg1);
+	}
+	public void updateBinaryStream(int arg0, InputStream arg1, int arg2)
+			throws SQLException {
+		resultSet.updateBinaryStream(arg0, arg1, arg2);
+	}
+	public void updateBinaryStream(String arg0, InputStream arg1, int arg2)
+			throws SQLException {
+		resultSet.updateBinaryStream(arg0, arg1, arg2);
+	}
+	public void updateBlob(int arg0, Blob arg1) throws SQLException {
+		resultSet.updateBlob(arg0, arg1);
+	}
+	public void updateBlob(String arg0, Blob arg1) throws SQLException {
+		resultSet.updateBlob(arg0, arg1);
+	}
+	public void updateBoolean(int arg0, boolean arg1) throws SQLException {
+		resultSet.updateBoolean(arg0, arg1);
+	}
+	public void updateBoolean(String arg0, boolean arg1) throws SQLException {
+		resultSet.updateBoolean(arg0, arg1);
+	}
+	public void updateByte(int arg0, byte arg1) throws SQLException {
+		resultSet.updateByte(arg0, arg1);
+	}
+	public void updateByte(String arg0, byte arg1) throws SQLException {
+		resultSet.updateByte(arg0, arg1);
+	}
+	public void updateBytes(int arg0, byte[] arg1) throws SQLException {
+		resultSet.updateBytes(arg0, arg1);
+	}
+	public void updateBytes(String arg0, byte[] arg1) throws SQLException {
+		resultSet.updateBytes(arg0, arg1);
+	}
+	public void updateCharacterStream(int arg0, Reader arg1, int arg2)
+			throws SQLException {
+		resultSet.updateCharacterStream(arg0, arg1, arg2);
+	}
+	public void updateCharacterStream(String arg0, Reader arg1, int arg2)
+			throws SQLException {
+		resultSet.updateCharacterStream(arg0, arg1, arg2);
+	}
+	public void updateClob(int arg0, Clob arg1) throws SQLException {
+		resultSet.updateClob(arg0, arg1);
+	}
+	public void updateClob(String arg0, Clob arg1) throws SQLException {
+		resultSet.updateClob(arg0, arg1);
+	}
+	public void updateDate(int arg0, Date arg1) throws SQLException {
+		resultSet.updateDate(arg0, arg1);
+	}
+	public void updateDate(String arg0, Date arg1) throws SQLException {
+		resultSet.updateDate(arg0, arg1);
+	}
+	public void updateDouble(int arg0, double arg1) throws SQLException {
+		resultSet.updateDouble(arg0, arg1);
+	}
+	public void updateDouble(String arg0, double arg1) throws SQLException {
+		resultSet.updateDouble(arg0, arg1);
+	}
+	public void updateFloat(int arg0, float arg1) throws SQLException {
+		resultSet.updateFloat(arg0, arg1);
+	}
+	public void updateFloat(String arg0, float arg1) throws SQLException {
+		resultSet.updateFloat(arg0, arg1);
+	}
+	public void updateInt(int arg0, int arg1) throws SQLException {
+		resultSet.updateInt(arg0, arg1);
+	}
+	public void updateInt(String arg0, int arg1) throws SQLException {
+		resultSet.updateInt(arg0, arg1);
+	}
+	public void updateLong(int arg0, long arg1) throws SQLException {
+		resultSet.updateLong(arg0, arg1);
+	}
+	public void updateLong(String arg0, long arg1) throws SQLException {
+		resultSet.updateLong(arg0, arg1);
+	}
+	public void updateNull(int arg0) throws SQLException {
+		resultSet.updateNull(arg0);
+	}
+	public void updateNull(String arg0) throws SQLException {
+		resultSet.updateNull(arg0);
+	}
+	public void updateObject(int arg0, Object arg1) throws SQLException {
+		resultSet.updateObject(arg0, arg1);
+	}
+	public void updateObject(int arg0, Object arg1, int arg2)
+			throws SQLException {
+		resultSet.updateObject(arg0, arg1, arg2);
+	}
+	public void updateObject(String arg0, Object arg1) throws SQLException {
+		resultSet.updateObject(arg0, arg1);
+	}
+	public void updateObject(String arg0, Object arg1, int arg2)
+			throws SQLException {
+		resultSet.updateObject(arg0, arg1, arg2);
+	}
+	public void updateRef(int arg0, Ref arg1) throws SQLException {
+		resultSet.updateRef(arg0, arg1);
+	}
+	public void updateRef(String arg0, Ref arg1) throws SQLException {
+		resultSet.updateRef(arg0, arg1);
+	}
+	public void updateRow() throws SQLException {
+		resultSet.updateRow();
+	}
+	public void updateShort(int arg0, short arg1) throws SQLException {
+		resultSet.updateShort(arg0, arg1);
+	}
+	public void updateShort(String arg0, short arg1) throws SQLException {
+		resultSet.updateShort(arg0, arg1);
+	}
+	public void updateString(int arg0, String arg1) throws SQLException {
+		resultSet.updateString(arg0, arg1);
+	}
+	public void updateString(String arg0, String arg1) throws SQLException {
+		resultSet.updateString(arg0, arg1);
+	}
+	public void updateTime(int arg0, Time arg1) throws SQLException {
+		resultSet.updateTime(arg0, arg1);
+	}
+	public void updateTime(String arg0, Time arg1) throws SQLException {
+		resultSet.updateTime(arg0, arg1);
+	}
+	public void updateTimestamp(int arg0, Timestamp arg1) throws SQLException {
+		resultSet.updateTimestamp(arg0, arg1);
+	}
+	public void updateTimestamp(String arg0, Timestamp arg1)
+			throws SQLException {
+		resultSet.updateTimestamp(arg0, arg1);
+	}
+	public boolean wasNull() throws SQLException {
+		return resultSet.wasNull();
+	}
+    public <T> T unwrap(Class<T> iface) throws SQLException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+    
+    public boolean isWrapperFor(Class<?> iface) throws SQLException {
+        // TODO Auto-generated method stub
+        return false;
+    }
+    
+    public RowId getRowId(int columnIndex) throws SQLException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+    
+    public RowId getRowId(String columnLabel) throws SQLException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+    
+    public void updateRowId(int columnIndex, RowId x) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateRowId(String columnLabel, RowId x) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public int getHoldability() throws SQLException {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+    
+    public boolean isClosed() throws SQLException {
+        // TODO Auto-generated method stub
+        return false;
+    }
+    
+    public void updateNString(int columnIndex, String nString) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateNString(String columnLabel, String nString) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateNClob(int columnIndex, NClob nClob) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateNClob(String columnLabel, NClob nClob) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public NClob getNClob(int columnIndex) throws SQLException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+    
+    public NClob getNClob(String columnLabel) throws SQLException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+    
+    public SQLXML getSQLXML(int columnIndex) throws SQLException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+    
+    public SQLXML getSQLXML(String columnLabel) throws SQLException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+    
+    public void updateSQLXML(int columnIndex, SQLXML xmlObject) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateSQLXML(String columnLabel, SQLXML xmlObject) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public String getNString(int columnIndex) throws SQLException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+    
+    public String getNString(String columnLabel) throws SQLException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+    
+    public Reader getNCharacterStream(int columnIndex) throws SQLException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+    
+    public Reader getNCharacterStream(String columnLabel) throws SQLException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+    
+    public void updateNCharacterStream(int columnIndex, Reader x, long length) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateNCharacterStream(String columnLabel, Reader reader, long length) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateAsciiStream(int columnIndex, InputStream x, long length) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateBinaryStream(int columnIndex, InputStream x, long length) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateCharacterStream(int columnIndex, Reader x, long length) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateAsciiStream(String columnLabel, InputStream x, long length) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateBinaryStream(String columnLabel, InputStream x, long length) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateCharacterStream(String columnLabel, Reader reader, long length) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateBlob(int columnIndex, InputStream inputStream, long length) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateBlob(String columnLabel, InputStream inputStream, long length) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateClob(int columnIndex, Reader reader, long length) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateClob(String columnLabel, Reader reader, long length) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateNClob(int columnIndex, Reader reader, long length) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateNClob(String columnLabel, Reader reader, long length) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateNCharacterStream(int columnIndex, Reader x) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateNCharacterStream(String columnLabel, Reader reader) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateAsciiStream(int columnIndex, InputStream x) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateBinaryStream(int columnIndex, InputStream x) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateCharacterStream(int columnIndex, Reader x) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateAsciiStream(String columnLabel, InputStream x) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateBinaryStream(String columnLabel, InputStream x) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateCharacterStream(String columnLabel, Reader reader) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateBlob(int columnIndex, InputStream inputStream) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateBlob(String columnLabel, InputStream inputStream) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateClob(int columnIndex, Reader reader) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateClob(String columnLabel, Reader reader) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateNClob(int columnIndex, Reader reader) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void updateNClob(String columnLabel, Reader reader) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/SQLExceptionHandler.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/SQLExceptionHandler.java
new file mode 100644
index 0000000..25c4d91
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/SQLExceptionHandler.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.connection;
+
+import java.sql.SQLException;
+
+public interface SQLExceptionHandler {
+
+	public void handleException (SQLException e);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/StatementAdapter.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/StatementAdapter.java
new file mode 100644
index 0000000..3fe97a8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/connection/StatementAdapter.java
@@ -0,0 +1,241 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.connection;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.SQLWarning;
+import java.sql.Statement;
+import java.util.ArrayList;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+
+public class StatementAdapter implements Statement {
+	private ConnectionAdapter conection;
+	private Statement statement;
+
+	public StatementAdapter(ConnectionAdapter connection, Statement statement) {
+		this.conection = connection;
+		this.statement = statement;
+	}
+	public void addBatch(String arg0) throws SQLException {
+		statement.addBatch(arg0);
+	}
+	public void cancel() throws SQLException {
+		statement.cancel();
+	}
+	public void clearBatch() throws SQLException {
+		statement.clearBatch();
+	}
+	public void clearWarnings() throws SQLException {
+		statement.clearWarnings();
+	}
+	public void close() throws SQLException {
+		statement.close();
+	}
+	public boolean equals(Object arg0) {
+		return statement.equals(arg0);
+	}
+	public boolean execute(String arg0) throws SQLException {
+		return statement.execute(arg0);
+	}
+	public boolean execute(String arg0, int arg1) throws SQLException {
+		return statement.execute(arg0, arg1);
+	}
+	public boolean execute(String arg0, int[] arg1) throws SQLException {
+		return statement.execute(arg0, arg1);
+	}
+	public boolean execute(String arg0, String[] arg1) throws SQLException {
+		return statement.execute(arg0, arg1);
+	}
+	public int[] executeBatch() throws SQLException {
+		return statement.executeBatch();
+	}
+	public ResultSet executeQuery(String arg0) throws SQLException {
+		try {
+			ResultSet resultSet = statement.executeQuery(arg0); 
+			return new ResultSetAdapter(this, resultSet);
+		}
+		catch(SQLException e) {
+	        notifySQLExceptionHandler(e);
+		    IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getSymbolicName(), IStatus.ERROR,
+		            e.getClass().getName(),
+		            e);
+			RDBCorePlugin.getDefault().getLog().log(status);
+			ConnectionInfoImpl info =  (ConnectionInfoImpl) this.conection.getConnectionInfo();
+			info.onSQLException(this.conection, e);
+	        throw e;
+		}
+	}
+	public int executeUpdate(String arg0) throws SQLException {
+		return statement.executeUpdate(arg0);
+	}
+	public int executeUpdate(String arg0, int arg1) throws SQLException {
+		return statement.executeUpdate(arg0, arg1);
+	}
+	public int executeUpdate(String arg0, int[] arg1) throws SQLException {
+		return statement.executeUpdate(arg0, arg1);
+	}
+	public int executeUpdate(String arg0, String[] arg1) throws SQLException {
+		return statement.executeUpdate(arg0, arg1);
+	}
+	public Connection getConnection() throws SQLException {
+		return this.conection;
+	}
+	public int getFetchDirection() throws SQLException {
+		return statement.getFetchDirection();
+	}
+	public int getFetchSize() throws SQLException {
+		return statement.getFetchSize();
+	}
+	public ResultSet getGeneratedKeys() throws SQLException {
+		return statement.getGeneratedKeys();
+	}
+	public int getMaxFieldSize() throws SQLException {
+		return statement.getMaxFieldSize();
+	}
+	public int getMaxRows() throws SQLException {
+		return statement.getMaxRows();
+	}
+	public boolean getMoreResults() throws SQLException {
+		return statement.getMoreResults();
+	}
+	public boolean getMoreResults(int arg0) throws SQLException {
+		return statement.getMoreResults(arg0);
+	}
+	public int getQueryTimeout() throws SQLException {
+		return statement.getQueryTimeout();
+	}
+	public ResultSet getResultSet() throws SQLException {
+		return statement.getResultSet();
+	}
+	public int getResultSetConcurrency() throws SQLException {
+		return statement.getResultSetConcurrency();
+	}
+	public int getResultSetHoldability() throws SQLException {
+		return statement.getResultSetHoldability();
+	}
+	public int getResultSetType() throws SQLException {
+		return statement.getResultSetType();
+	}
+	public int getUpdateCount() throws SQLException {
+		return statement.getUpdateCount();
+	}
+	public SQLWarning getWarnings() throws SQLException {
+		return statement.getWarnings();
+	}
+	public int hashCode() {
+		return statement.hashCode();
+	}
+	public void setCursorName(String arg0) throws SQLException {
+		statement.setCursorName(arg0);
+	}
+	public void setEscapeProcessing(boolean arg0) throws SQLException {
+		statement.setEscapeProcessing(arg0);
+	}
+	public void setFetchDirection(int arg0) throws SQLException {
+		statement.setFetchDirection(arg0);
+	}
+	public void setFetchSize(int arg0) throws SQLException {
+		statement.setFetchSize(arg0);
+	}
+	public void setMaxFieldSize(int arg0) throws SQLException {
+		statement.setMaxFieldSize(arg0);
+	}
+	public void setMaxRows(int arg0) throws SQLException {
+		statement.setMaxRows(arg0);
+	}
+	public void setQueryTimeout(int arg0) throws SQLException {
+		statement.setQueryTimeout(arg0);
+	}
+	public String toString() {
+		return statement.toString();
+	}
+	
+	private void notifySQLExceptionHandler (SQLException sqlexception) {
+	    ArrayList handlers = getSQLExceptionHandler();
+	    for (int i = 0; i < handlers.size(); i++) {
+	        SQLExceptionHandler handler = (SQLExceptionHandler) handlers.get(i);
+	        handler.handleException(sqlexception);
+	    }
+	}
+	    
+	private ArrayList getSQLExceptionHandler(){
+	    if (handers != null) 
+	        return handers;
+	    handers = new ArrayList();
+	    IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+	    IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("org.eclipse.datatools.connectivity.sqm.core", "sqlexceptionHandler"); //$NON-NLS-1$ //$NON-NLS-2$
+	    IExtension[] extensions = extensionPoint.getExtensions();
+	    for(int i=0; i<extensions.length; ++i) {
+	        IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+	        for(int j=0; j<configElements.length; ++j) {
+	            if(configElements[j].getName().equals("handler")) { //$NON-NLS-1$
+	                try {
+	                    SQLExceptionHandler handler = (SQLExceptionHandler) configElements[j].createExecutableExtension("class"); //$NON-NLS-1$
+	                    handers.add(handler);
+	                } catch(CoreException e) {
+	                    IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getSymbolicName(), IStatus.ERROR,
+	                            "The error was detected when creating the exception handler ", e); //$NON-NLS-1$
+	                    RDBCorePlugin.getDefault().getLog().log(status);
+	                }
+	            }            
+	        }
+	    }
+
+	    return handers;
+	}
+	    
+	private static ArrayList handers = null;
+
+    public <T> T unwrap(Class<T> iface) throws SQLException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+    
+    public boolean isWrapperFor(Class<?> iface) throws SQLException {
+        // TODO Auto-generated method stub
+        return false;
+    }
+    
+    public boolean isClosed() throws SQLException {
+        // TODO Auto-generated method stub
+        return false;
+    }
+    
+    public boolean isCloseOnCompletion() throws SQLException
+    {
+    	return this.statement.isCloseOnCompletion();
+    }
+    
+    public void closeOnCompletion() throws SQLException
+    {
+    	this.statement.closeOnCompletion();
+    }
+    
+    public void setPoolable(boolean poolable) throws SQLException {
+        // TODO Auto-generated method stub
+    }
+    
+    public boolean isPoolable() throws SQLException {
+        // TODO Auto-generated method stub
+        return false;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/AuthorizationIdContainmentProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/AuthorizationIdContainmentProvider.java
new file mode 100644
index 0000000..fdf0789
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/AuthorizationIdContainmentProvider.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.containment;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.AuthorizationIdentifier;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Group;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Role;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.User;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class AuthorizationIdContainmentProvider extends
+		AbstractContainmentProvider {
+
+	public Collection getContainedElements(EObject obj) {
+	    Collection children = super.getContainedElements(obj);
+	    children.addAll(((AuthorizationIdentifier)obj).getReceivedRoleAuthorization());
+	    return children;
+	}
+
+	public EObject getContainer(EObject obj) {
+		return ((AuthorizationIdentifier) obj).getDatabase();
+	}
+
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+		return SQLSchemaPackage.eINSTANCE.getDatabase_AuthorizationIds();
+	}
+
+	public String getGroupId(EObject obj) {
+		if (obj instanceof Group) {
+			return GroupID.GROUP;
+		} 
+		
+		if (obj instanceof User){
+			return GroupID.USER;
+		}
+		
+		if (obj instanceof Role)
+		{
+			return GroupID.ROLE;
+		}
+		return null;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/CatalogContainmentProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/CatalogContainmentProvider.java
new file mode 100644
index 0000000..103e901
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/CatalogContainmentProvider.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.containment;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.modelbase.sql.schema.Catalog;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class CatalogContainmentProvider extends AbstractContainmentProvider {
+
+	public Collection getContainedElements(EObject obj) {
+		Catalog catalog = (Catalog) obj;
+		Collection children = super.getContainedElements(obj);
+		children.addAll(catalog.getSchemas());
+		return children;
+	}
+
+	public EObject getContainer(EObject obj) {
+		return ((Catalog) obj).getDatabase();
+	}
+
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+		return SQLSchemaPackage.eINSTANCE.getDatabase_Catalogs();
+	}
+
+	public String getGroupId(EObject obj) {
+		return GroupID.CATALOG;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/ColumnContainmentProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/ColumnContainmentProvider.java
new file mode 100644
index 0000000..355526d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/ColumnContainmentProvider.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.containment;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.emf.ecore.EObject;
+
+
+public class ColumnContainmentProvider extends AbstractContainmentProvider {
+	public String getGroupId(EObject obj) {
+		return GroupID.COLUMN;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/CommentContainmentProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/CommentContainmentProvider.java
new file mode 100644
index 0000000..b69c503
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/CommentContainmentProvider.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.containment;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.modelbase.sql.schema.Comment;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class CommentContainmentProvider extends AbstractContainmentProvider
+{
+	public EStructuralFeature getContainmentFeature(EObject obj)
+	{
+		return SQLSchemaPackage.eINSTANCE.getSQLObject_Comments();
+	}
+
+	public EObject getContainer(EObject obj)
+	{
+		EObject eObject = ((Comment) obj).getSQLObject();
+		return eObject;
+	}
+
+	public String getGroupId(EObject obj)
+	{
+		return GroupID.COMMENT;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/ConstraintContainmentProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/ConstraintContainmentProvider.java
new file mode 100644
index 0000000..ee2c55f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/ConstraintContainmentProvider.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.containment;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.emf.ecore.EObject;
+
+public class ConstraintContainmentProvider extends AbstractContainmentProvider {
+	public String getGroupId(EObject obj) {
+		return GroupID.CONSTRAINT;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/ContainmentProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/ContainmentProvider.java
new file mode 100644
index 0000000..3d08499
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/ContainmentProvider.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.containment;
+
+import java.util.Collection;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public interface ContainmentProvider {
+	/**
+	 * This function should return a temporary collection of its logicaly 
+	 * contained elements. Each call should use a different collection to
+	 * avoid conflicts. 
+	 * @param obj
+	 * @return
+	 */
+	public Collection getContainedElements(EObject obj);
+
+	/**
+	 * This is a UI hint if it should be shown to end users 
+	 * @param obj
+	 * @return
+	 */
+	public boolean isDisplayableElement(EObject obj);
+	
+	/**
+	 * The should be consistent with its container logical contaimnet provider. In
+	 * other words, the container should contain this element.
+	 * @param obj
+	 * @return
+	 */
+	public EObject getContainer(EObject obj);
+	
+	/**
+	 * Similiar to EObject.eContaningFeature, returns the particular feature of the
+	 * container that actually holds the object, or <code>null</code>, if there is
+	 * no container or feature to hold it.
+	 * @param obj
+	 * @return
+	 */
+	public EStructuralFeature getContainmentFeature(EObject obj);
+	
+	/**
+	 * Elements can have a group id so it can be distinguished from other elements.
+	 * For an example, a table and a view can be under the same feature and container.
+	 * By defining a different group id, you can give a hint to some generic features to
+	 * handle them differently. 
+	 * @param obj
+	 * @return
+	 */
+	public String getGroupId(EObject obj);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/DatabaseContainmentProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/DatabaseContainmentProvider.java
new file mode 100644
index 0000000..029f146
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/DatabaseContainmentProvider.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.containment;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.emf.ecore.EObject;
+
+
+public class DatabaseContainmentProvider extends AbstractContainmentProvider {
+	public Collection getContainedElements(EObject obj) {
+		Database database = (Database) obj;
+	    Collection children = super.getContainedElements(obj);
+	    if (database.getCatalogs() != null && database.getCatalogs().size() > 0) 
+	    	children.addAll(database.getCatalogs());
+	    else
+	    	children.addAll(database.getSchemas());
+	    children.addAll(database.getAuthorizationIds());
+	    return children;
+	}
+
+	public String getGroupId(EObject obj) {
+		return GroupID.DATABASE;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/DependencyContainmentProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/DependencyContainmentProvider.java
new file mode 100644
index 0000000..d4abce0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/DependencyContainmentProvider.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.containment;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.emf.ecore.EObject;
+
+public class DependencyContainmentProvider extends AbstractContainmentProvider {
+	public String getGroupId(EObject obj) {
+		return GroupID.DEPENDENCY;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/GroupID.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/GroupID.java
new file mode 100644
index 0000000..ad41ed3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/GroupID.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.containment;
+
+public interface GroupID {
+	public static final String CORE_PREFIX = "core.";  //$NON-NLS-1$
+	public static final String COLUMN = "core.sql.tables.Column";  //$NON-NLS-1$
+	public static final String CONSTRAINT = "core.sql.constraints.Constraint";  //$NON-NLS-1$
+	public static final String COMMENT = "core.sql.schema.Comment"; //$NON-NLS-1$
+	public static final String DATABASE = "core.sql.schema.Database";  //$NON-NLS-1$
+	public static final String DEPENDENCY = "core.sql.schema.Dependency";  //$NON-NLS-1$
+	public static final String INDEX = "core.sql.constraints.Index";  //$NON-NLS-1$
+	public static final String PROCEDURE = "core.sql.routines.Procedure";  //$NON-NLS-1$
+	public static final String FUNCTION = "core.sql.routines.Function";  //$NON-NLS-1$
+	public static final String SCHEMA = "core.sql.schema.Schema";  //$NON-NLS-1$
+	public static final String SEQUENCE = "core.sql.schema.Sequence";  //$NON-NLS-1$
+	public static final String TABLE = "core.sql.tables.BaseTable";  //$NON-NLS-1$
+	public static final String TRIGGER = "core.sql.tables.Trigger";  //$NON-NLS-1$
+	public static final String USER_DEFINED_TYPE = "core.sql.datatypes.UserDefinedType";  //$NON-NLS-1$
+	public static final String VIEW = "core.sql.tables.ViewTable";  //$NON-NLS-1$
+	public static final String CATALOG = "core.sql.schema.Catalog";  //$NON-NLS-1$
+	public static final String GROUP = "core.sql.schema.Group"; //$NON-NLS-1$
+	public static final String USER = "core.sql.schema.User"; //$NON-NLS-1$
+	public static final String ROLE = "core.sql.schema.Role"; //$NON-NLS-1$
+	public static final String PRIVILEGE = "core.sql.accesscontrol.Privilege"; //$NON-NLS-1$
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/IndexContainmentProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/IndexContainmentProvider.java
new file mode 100644
index 0000000..67ecafe
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/IndexContainmentProvider.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.containment;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+
+public class IndexContainmentProvider extends AbstractContainmentProvider {
+	public EObject getContainer(EObject obj) {
+		return ((Index) obj).getTable();
+	}
+
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+		return SQLTablesPackage.eINSTANCE.getTable_Index();
+	}
+
+	public String getGroupId(EObject obj) {
+		return GroupID.INDEX;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/PrivilegeContainmentProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/PrivilegeContainmentProvider.java
new file mode 100644
index 0000000..8dd2cab
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/PrivilegeContainmentProvider.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.containment;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.emf.ecore.EObject;
+
+public class PrivilegeContainmentProvider extends
+		AbstractContainmentProvider {
+
+	public String getGroupId(EObject obj) {
+		return GroupID.PRIVILEGE;
+	}
+
+	public boolean isDisplayableElement(EObject obj) {
+		return false;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/RoleAuthorizationContainmentProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/RoleAuthorizationContainmentProvider.java
new file mode 100644
index 0000000..6969441
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/RoleAuthorizationContainmentProvider.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.containment;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.RoleAuthorization;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.SQLAccessControlPackage;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class RoleAuthorizationContainmentProvider extends
+		AbstractContainmentProvider {
+
+	public EObject getContainer(EObject obj) {
+		return ((RoleAuthorization) obj).getGrantee();
+	}
+
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+		return SQLAccessControlPackage.eINSTANCE.getAuthorizationIdentifier_ReceivedRoleAuthorization();
+	}
+
+	public String getGroupId(EObject obj) {
+		return null;
+	}
+
+	public boolean isDisplayableElement(EObject obj) {
+		return false;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/RoutineContainmentProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/RoutineContainmentProvider.java
new file mode 100644
index 0000000..89acce2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/RoutineContainmentProvider.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.containment;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.modelbase.sql.routines.Function;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+
+public class RoutineContainmentProvider extends AbstractContainmentProvider {
+	public EObject getContainer(EObject obj) {
+		return ((Routine) obj).getSchema();
+   }
+   
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+      if (this.getContainer(obj) == null)
+         return null;
+      else
+         return SQLSchemaPackage.eINSTANCE.getSchema_Routines();
+   }
+	
+	public String getGroupId(EObject obj) {
+		if(obj instanceof Procedure) {
+			return GroupID.PROCEDURE;
+		}
+		
+		if(obj instanceof Function) {
+			return GroupID.FUNCTION;			
+		}
+		
+		return null;
+	}	
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/SchemaContainmentProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/SchemaContainmentProvider.java
new file mode 100644
index 0000000..61e73d6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/SchemaContainmentProvider.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.containment;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.modelbase.sql.schema.Catalog;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+
+public class SchemaContainmentProvider extends AbstractContainmentProvider {
+	public Collection getContainedElements(EObject obj) {
+		Collection children = super.getContainedElements(obj);
+		Schema schema = (Schema) obj;
+		children.addAll(schema.getTables());
+		children.addAll(schema.getRoutines());
+		children.addAll(schema.getSequences());
+		children.addAll(schema.getUserDefinedTypes());
+		children.addAll(schema.getAssertions());
+		children.addAll(schema.getCharSets());
+		return children;
+	}
+
+	public EObject getContainer(EObject obj) {
+		Catalog catalog = ((Schema) obj).getCatalog();
+		if (catalog != null) {
+			return catalog;
+		} else {
+			return ((Schema) obj).getDatabase();
+		}
+	}
+
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+		return SQLSchemaPackage.eINSTANCE.getCatalog_Schemas();
+	}
+
+	public String getGroupId(EObject obj) {
+		return GroupID.SCHEMA;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/SequenceContainmentProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/SequenceContainmentProvider.java
new file mode 100644
index 0000000..a60fbd4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/SequenceContainmentProvider.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.containment;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Sequence;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+
+public class SequenceContainmentProvider extends AbstractContainmentProvider {
+	public EObject getContainer(EObject obj) {
+		return ((Sequence) obj).getSchema();
+	}
+
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+		return SQLSchemaPackage.eINSTANCE.getSchema_Sequences();
+	}
+
+	public String getGroupId(EObject obj) {
+		return GroupID.SEQUENCE;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/TableContainmentProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/TableContainmentProvider.java
new file mode 100644
index 0000000..5d7d457
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/TableContainmentProvider.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.containment;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class TableContainmentProvider extends AbstractContainmentProvider {
+	public Collection getContainedElements(EObject obj) {
+		Collection children = super.getContainedElements(obj);
+		BaseTable table = (BaseTable) obj;
+		children.addAll(table.getIndex());
+		children.addAll(table.getTriggers());
+		return children;
+	}
+
+	public EObject getContainer(EObject obj) {
+		return ((BaseTable) obj).getSchema();
+	}
+
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+		return SQLSchemaPackage.eINSTANCE.getSchema_Tables();
+	}
+
+	public String getGroupId(EObject obj) {
+		return GroupID.TABLE;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/TriggerContainmentProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/TriggerContainmentProvider.java
new file mode 100644
index 0000000..69f3fc9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/TriggerContainmentProvider.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.containment;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+
+public class TriggerContainmentProvider extends AbstractContainmentProvider {
+	public EObject getContainer(EObject obj) {
+		return ((Trigger) obj).getSubjectTable();
+	}
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+		return SQLTablesPackage.eINSTANCE.getTable_Triggers();
+	}
+
+	public String getGroupId(EObject obj) {
+		return GroupID.TRIGGER;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/UserDefinedTypeContainmentProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/UserDefinedTypeContainmentProvider.java
new file mode 100644
index 0000000..f184727
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/UserDefinedTypeContainmentProvider.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.containment;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.modelbase.sql.datatypes.DistinctUserDefinedType;
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+
+public class UserDefinedTypeContainmentProvider extends AbstractContainmentProvider {
+	
+	// Temporarily work around sql model problem
+	public Collection getContainedElements(EObject obj) {
+		Collection children = super.getContainedElements(obj);
+		if(obj instanceof DistinctUserDefinedType) {
+			PredefinedDataType c = ((DistinctUserDefinedType) obj).getPredefinedRepresentation();
+			if(c!=null) children.add(c);
+		}
+		return children;
+	}
+	
+	public EObject getContainer(EObject obj) {
+		return ((UserDefinedType) obj).getSchema();
+	}
+
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+		return SQLSchemaPackage.eINSTANCE.getSchema_UserDefinedTypes();
+	}
+
+	public String getGroupId(EObject obj) {
+		return GroupID.USER_DEFINED_TYPE;
+	}	
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/ViewContainmentProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/ViewContainmentProvider.java
new file mode 100644
index 0000000..8d83b69
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/containment/ViewContainmentProvider.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.containment;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class ViewContainmentProvider  extends AbstractContainmentProvider {
+	public Collection getContainedElements(EObject obj) {
+		Collection children = super.getContainedElements(obj);
+		ViewTable table = (ViewTable) obj;
+		children.addAll(table.getIndex());
+		children.addAll(table.getTriggers());
+		return children;
+	}
+
+	public EObject getContainer(EObject obj) 
+	{
+		return ((ViewTable) obj).getSchema();
+	}
+
+	public String getGroupId(EObject obj) {
+		return GroupID.VIEW;
+	}
+
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+		return SQLSchemaPackage.eINSTANCE.getSchema_Tables();
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/definition/AbstractMetaDataExtension.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/definition/AbstractMetaDataExtension.java
new file mode 100644
index 0000000..c9b8163
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/definition/AbstractMetaDataExtension.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.definition;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.MetaDataExtension;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.ecore.EClass;
+
+public abstract class AbstractMetaDataExtension implements MetaDataExtension {
+	static int MAX_IDENTIFIER = 128;
+	public int getMaximumIdentifierLength(SQLObject sqlObject) {
+		return MAX_IDENTIFIER;
+	}
+	
+	public EClass getMetaClass(String metaClassName){
+		return null;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/definition/ConfigElementDatabaseRecognizer.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/definition/ConfigElementDatabaseRecognizer.java
new file mode 100644
index 0000000..1fa5d02
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/definition/ConfigElementDatabaseRecognizer.java
@@ -0,0 +1,200 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.sqm.internal.core.definition;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExecutableExtension;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.sqm.core.SQMServices;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.definition.IDatabaseRecognizer;
+import org.eclipse.datatools.connectivity.sqm.internal.core.util.GenericCatalogMessages;
+
+/**
+ * A DatabaseRecognizer that handles the dbDefinitionMapping configuration elements declared
+ * in an extension of the <code>org.eclipse.datatools.connectivity.sqm.core.databaseRecognition</code> 
+ * extension point.
+ */
+public class ConfigElementDatabaseRecognizer implements IDatabaseRecognizer, IExecutableExtension
+{
+    public static final String DB_DEFN_MAPPING = "dbDefinitionMapping"; //$NON-NLS-1$
+    
+    private List<DbDefinitionMapping> m_dbDefnMappings;
+    
+    public ConfigElementDatabaseRecognizer( IExtension dbRecognitionExtension ) throws CoreException
+    {
+        init( dbRecognitionExtension );
+    }
+    
+    public ConfigElementDatabaseRecognizer() {}
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.core.runtime.IExecutableExtension#setInitializationData(org.eclipse.core.runtime.IConfigurationElement, java.lang.String, java.lang.Object)
+     */
+    public void setInitializationData( IConfigurationElement config,
+            String propertyName, Object data ) throws CoreException
+    {
+        init( config.getDeclaringExtension() );
+    }
+
+    private void init( IExtension dbRecognitionExtension ) throws CoreException
+    {
+        IConfigurationElement[] configElements = dbRecognitionExtension.getConfigurationElements();
+        if( configElements.length == 0 )
+            return;     // nothing to initialize
+        
+        m_dbDefnMappings = new ArrayList<DbDefinitionMapping>( configElements.length );        
+        for( int i=0; i < configElements.length; i++ )
+        {
+            if( ! configElements[i].getName().equals( DB_DEFN_MAPPING ) )
+                continue;
+
+            IConfigurationElement dbDefnMapElement = configElements[i];
+            m_dbDefnMappings.add( new DbDefinitionMapping( dbDefnMapElement ));
+        }
+    }
+    
+    public boolean hasJdbcMappings()
+    {
+        return ( m_dbDefnMappings != null && ! m_dbDefnMappings.isEmpty() );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.sqm.core.definition.IDatabaseRecognizer#recognize(java.sql.Connection)
+     */
+    public DatabaseDefinition recognize( Connection connection )
+    {
+        if( connection == null || ! hasJdbcMappings() )
+            return null;
+
+        String jdbcProduct = null;
+        String jdbcVersion = null;
+        try
+        {
+            jdbcProduct = connection.getMetaData().getDatabaseProductName();
+            jdbcVersion = connection.getMetaData().getDatabaseProductVersion();
+        }
+        catch( SQLException ex )
+        {
+            return null;
+        }
+        if( jdbcVersion == null )
+            return null;    // required metadata is not available, cannot recognize db
+        
+        // find mapping of dbdefinition product and version
+        Iterator<DbDefinitionMapping> iter = m_dbDefnMappings.iterator();
+        while( iter.hasNext() )
+        {
+            DbDefinitionMapping dbDefnMap = iter.next();
+            if( dbDefnMap.matchesIgnoreCase( jdbcProduct, jdbcVersion ) || 
+                dbDefnMap.matchesPattern( jdbcProduct, jdbcVersion ) )
+            {
+                return SQMServices.getDatabaseDefinitionRegistry().getDefinition( 
+                            dbDefnMap.m_dbProduct, dbDefnMap.m_dbVersion );
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Internal class to represent the dbDefinitionMapping configuration element 
+     * and provide JDBC product name and version matching services.
+     */
+    private class DbDefinitionMapping
+    {
+        private static final String JDBC_PRODUCT_NAME=  "jdbcDatabaseProductName"; //$NON-NLS-1$
+        private static final String JDBC_PRODUCT_VERSION = "jdbcDatabaseProductVersion"; //$NON-NLS-1$
+        private static final String DB_DEFINITION_PRODUCT = "dbdefinitionProduct"; //$NON-NLS-1$
+        private static final String DB_DEFINITION_VERSION = "dbdefinitionVersion"; //$NON-NLS-1$
+        
+        private String m_jdbcProductName;
+        private String m_jdbcProductVersion;
+        private String m_dbProduct;
+        private String m_dbVersion;
+        
+        private DbDefinitionMapping( IConfigurationElement dbDefnMapElement ) throws CoreException
+        {
+            m_jdbcProductName = dbDefnMapElement.getAttribute( JDBC_PRODUCT_NAME ); // optional attribute
+            m_jdbcProductVersion = dbDefnMapElement.getAttribute( JDBC_PRODUCT_VERSION );
+            m_dbProduct = dbDefnMapElement.getAttribute( DB_DEFINITION_PRODUCT );
+            m_dbVersion = dbDefnMapElement.getAttribute( DB_DEFINITION_VERSION );
+            
+            if( m_jdbcProductVersion == null || m_dbProduct == null || m_dbVersion == null )
+                throw new CoreException( new Status( IStatus.ERROR, dbDefnMapElement.getNamespaceIdentifier(),
+                        GenericCatalogMessages.bind( GenericCatalogMessages.DEFN_MISSING_ATTRIBUTE_VALUES, DB_DEFN_MAPPING)) );
+        }
+        
+        boolean matchesIgnoreCase( String jdbcDbProductName, String jdbcDbProductVersion )
+        {
+            if( ! m_jdbcProductVersion.equalsIgnoreCase( jdbcDbProductVersion ) )
+                return false;
+            if( m_jdbcProductName == null )
+                return true;    // matches any product name
+            return m_jdbcProductName.equalsIgnoreCase( jdbcDbProductName );
+        }
+
+        boolean matchesPattern( String jdbcDbProductName, String jdbcDbProductVersion )
+        {
+            try
+            {
+                Pattern p = Pattern.compile( m_jdbcProductVersion );
+                Matcher m = p.matcher( jdbcDbProductVersion );
+                if( ! m.matches() )
+                    return false;
+                
+                if( m_jdbcProductName == null )
+                    return true;    // matches any pattern
+                
+                p = Pattern.compile( m_jdbcProductName );
+                m = p.matcher( jdbcDbProductName );
+                return m.matches();
+            }
+            catch( Exception ex )
+            {
+            }
+
+            return false;
+        }
+        
+        /* (non-Javadoc)
+         * @see java.lang.Object#equals(java.lang.Object)
+         */
+        @Override
+        public boolean equals( Object obj )
+        {
+            if( ! (obj instanceof DbDefinitionMapping) )
+                return false;
+            
+            DbDefinitionMapping thatObj = (DbDefinitionMapping) obj;
+            if( ! matchesIgnoreCase( thatObj.m_jdbcProductName, thatObj.m_jdbcProductVersion ) )
+                return false;
+            if( ! this.m_dbProduct.equalsIgnoreCase( thatObj.m_dbProduct ) )
+                return false;
+            return this.m_dbVersion.equalsIgnoreCase( thatObj.m_dbVersion );
+        }                
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/definition/DatabaseDefinitionImpl.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/definition/DatabaseDefinitionImpl.java
new file mode 100644
index 0000000..1c6c2c1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/definition/DatabaseDefinitionImpl.java
@@ -0,0 +1,2334 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.definition;
+
+import java.net.URL;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Vector;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.DDLGenerator;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogProvider;
+import org.eclipse.datatools.connectivity.sqm.core.rte.fe.GenericDdlGenerator;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCProvider;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.internal.core.rte.DDLParser;
+import org.eclipse.datatools.connectivity.sqm.internal.core.rte.DeltaDDLGenerator;
+import org.eclipse.datatools.connectivity.sqm.internal.core.rte.fe.GenericDeltaDdlGenerator;
+import org.eclipse.datatools.modelbase.dbdefinition.ColumnDefinition;
+import org.eclipse.datatools.modelbase.dbdefinition.ConstraintDefinition;
+import org.eclipse.datatools.modelbase.dbdefinition.ConstructedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.dbdefinition.DatabaseVendorDefinition;
+import org.eclipse.datatools.modelbase.dbdefinition.DebuggerDefinition;
+import org.eclipse.datatools.modelbase.dbdefinition.FieldQualifierDefinition;
+import org.eclipse.datatools.modelbase.dbdefinition.IndexDefinition;
+import org.eclipse.datatools.modelbase.dbdefinition.LanguageType;
+import org.eclipse.datatools.modelbase.dbdefinition.NicknameDefinition;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.dbdefinition.PrivilegeDefinition;
+import org.eclipse.datatools.modelbase.dbdefinition.PrivilegedElementDefinition;
+import org.eclipse.datatools.modelbase.dbdefinition.QueryDefinition;
+import org.eclipse.datatools.modelbase.dbdefinition.SQLSyntaxDefinition;
+import org.eclipse.datatools.modelbase.dbdefinition.SchemaDefinition;
+import org.eclipse.datatools.modelbase.dbdefinition.SequenceDefinition;
+import org.eclipse.datatools.modelbase.dbdefinition.StoredProcedureDefinition;
+import org.eclipse.datatools.modelbase.dbdefinition.TableDefinition;
+import org.eclipse.datatools.modelbase.dbdefinition.TableSpaceDefinition;
+import org.eclipse.datatools.modelbase.dbdefinition.TriggerDefinition;
+import org.eclipse.datatools.modelbase.dbdefinition.UserDefinedTypeDefinition;
+import org.eclipse.datatools.modelbase.dbdefinition.ViewDefinition;
+import org.eclipse.datatools.modelbase.sql.constraints.CheckConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.PrimaryKey;
+import org.eclipse.datatools.modelbase.sql.constraints.SQLConstraintsPackage;
+import org.eclipse.datatools.modelbase.sql.datatypes.ApproximateNumericDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.BinaryStringDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.CharacterStringDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.DataLinkDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.DataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.DistinctUserDefinedType;
+import org.eclipse.datatools.modelbase.sql.datatypes.FixedPrecisionDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.IntervalDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.IntervalQualifierType;
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.PrimitiveType;
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataTypesFactory;
+import org.eclipse.datatools.modelbase.sql.datatypes.TimeDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.datatools.modelbase.sql.tables.CheckType;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
+
+
+public class DatabaseDefinitionImpl implements DatabaseDefinition {
+	DatabaseDefinitionImpl(String product, String version, String desc, String productDisplayString, String versionDisplayString, URL modelURL) {
+		this.product = product;
+		this.version = version;
+		this.description = desc;
+		this.productDisplayString = productDisplayString;
+		this.versionDisplayString = versionDisplayString;
+		this.modelURL = modelURL;
+	}
+
+	public String getProduct() {
+		return this.product;
+	}
+
+	public String getProductDisplayString() {
+		return this.productDisplayString;
+	}
+
+	public String getVersion() {
+		return this.version;
+	}
+	
+	public String getVersionDisplayString() {
+		return this.versionDisplayString;		
+	}
+
+	public String getDescription() {
+		return this.description;
+	}
+
+	public DataModelElementFactory getDataModelElementFactory() {
+		if(this.factory == null) {
+			this.factory = DefaultDataModelElementFactory.INSTANCE;				
+			
+			IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+			IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("org.eclipse.datatools.connectivity.sqm.core", "dataModelElementFactory"); //$NON-NLS-1$ //$NON-NLS-2$
+			IExtension[] extensions = extensionPoint.getExtensions();
+			for(int i=0; i<extensions.length; ++i) {
+				IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+				for(int j=0; j<configElements.length; ++j) {
+					if(configElements[j].getName().equals("factory")) { //$NON-NLS-1$
+						String product = configElements[j].getAttribute("product"); //$NON-NLS-1$
+						if(!product.equals(this.product)) continue;
+						String version = configElements[j].getAttribute("version"); //$NON-NLS-1$
+						if(!version.equals(this.version)) continue;
+						try {
+							this.factory = (DataModelElementFactory) configElements[j].createExecutableExtension("class"); //$NON-NLS-1$
+						}
+						catch(CoreException e) {
+						    IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getSymbolicName(), IStatus.ERROR,
+						            "The error was detected when creating the element factory for " + product + " " + version, e); //$NON-NLS-1$ //$NON-NLS-2$
+							RDBCorePlugin.getDefault().getLog().log(status);
+						}
+						break;
+					}
+				}
+			}
+		}
+		
+		return this.factory;
+	}
+
+	public ICatalogProvider getDatabaseCatalogProvider() {
+		if(this.catalogProvider == null) {
+			IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+			IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("org.eclipse.datatools.connectivity.sqm.core", "catalog"); //$NON-NLS-1$ //$NON-NLS-2$
+			IExtension[] extensions = extensionPoint.getExtensions();
+			int prePriority = -1;
+			for(int i=0; i<extensions.length; ++i) {
+				IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+				for(int j=0; j<configElements.length; ++j) {
+					if(configElements[j].getName().equals("catalog")) { //$NON-NLS-1$
+						String product = configElements[j].getAttribute("product"); //$NON-NLS-1$
+						if(!product.equals(this.product)) continue;
+						String version = configElements[j].getAttribute("version"); //$NON-NLS-1$
+						if(!version.equals(this.version)) continue;
+						String priority = configElements[j].getAttribute("priority"); //$NON-NLS-1$
+						int currentPriority = 0;
+						if (priority != null) {
+							try {
+								currentPriority = Integer.parseInt(priority);
+							}catch (NumberFormatException formatEx){
+							}
+						} 
+						if (currentPriority <= prePriority) continue;
+						prePriority = currentPriority;
+						try {
+							this.catalogProvider = (ICatalogProvider) configElements[j].createExecutableExtension("provider"); //$NON-NLS-1$
+						}
+						catch(CoreException e) {
+						    IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getSymbolicName(), IStatus.ERROR,
+						            "The error was detected when creating the catalog provider for " + product + " " + version, e); //$NON-NLS-1$ //$NON-NLS-2$
+							RDBCorePlugin.getDefault().getLog().log(status);
+						}
+						break;
+					}
+				}
+			}
+		}
+
+		//if no catalog provider, use JDBC provider
+		if (this.catalogProvider == null) {
+			this.catalogProvider = new JDBCProvider(this);
+		}
+		return this.catalogProvider;
+	}
+
+	public DDLParser getDdlParser() {
+		if(this.parser == null) {
+			IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+			IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("org.eclipse.datatools.connectivity.sqm.core", "ddlParser"); //$NON-NLS-1$ //$NON-NLS-2$
+			IExtension[] extensions = extensionPoint.getExtensions();
+			int prePriority = -1;
+			for(int i=0; i<extensions.length; ++i) {
+				IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+				for(int j=0; j<configElements.length; ++j) {
+					if(configElements[j].getName().equals("parser")) { //$NON-NLS-1$
+						String product = configElements[j].getAttribute("product"); //$NON-NLS-1$
+						if(!product.equals(this.product)) continue;
+						String version = configElements[j].getAttribute("version"); //$NON-NLS-1$
+						if(!version.equals(this.version)) continue;
+						String priority = configElements[j].getAttribute("priority"); //$NON-NLS-1$
+						int currentPriority = 0;
+						if (priority != null) {
+							try {
+								currentPriority = Integer.parseInt(priority);
+							}catch (NumberFormatException formatEx){
+							}
+						} 
+						if (currentPriority <= prePriority) continue;
+						prePriority = currentPriority;
+						try {
+							this.parser = (DDLParser) configElements[j].createExecutableExtension("class"); //$NON-NLS-1$
+						}
+						catch(CoreException e) {
+							// log the error
+							System.out.println(e);
+						}
+						break;
+					}
+				}
+			}
+		}
+
+		return this.parser;
+	}
+
+	public DDLGenerator getDDLGenerator() {
+		if(this.ddlGenerator == null) {
+			IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+			IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("org.eclipse.datatools.connectivity.sqm.core", "ddlGeneration"); //$NON-NLS-1$ //$NON-NLS-2$
+			IExtension[] extensions = extensionPoint.getExtensions();
+			int prePriority = -1;
+			for(int i=0; i<extensions.length; ++i) {
+				IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+				for(int j=0; j<configElements.length; ++j) {
+					if(configElements[j].getName().equals("generator")) { //$NON-NLS-1$
+						String product = configElements[j].getAttribute("product"); //$NON-NLS-1$
+						if(!product.equals(this.product)) continue;
+						String version = configElements[j].getAttribute("version"); //$NON-NLS-1$
+						if(!version.equals(this.version)) continue;
+						String priority = configElements[j].getAttribute("priority"); //$NON-NLS-1$
+						int currentPriority = 0;
+						if (priority != null) {
+							try {
+								currentPriority = Integer.parseInt(priority);
+							}catch (NumberFormatException formatEx){
+							}
+						} 
+						
+						if (currentPriority <= prePriority) continue;
+						
+						prePriority = currentPriority;
+						try {
+							this.ddlGenerator = (DDLGenerator) configElements[j].createExecutableExtension("class"); //$NON-NLS-1$
+						}
+						catch(CoreException e) {
+						    IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getSymbolicName(), IStatus.ERROR,
+						            "The error was detected when creating the DDL generator for " + product + " " + version, e); //$NON-NLS-1$ //$NON-NLS-2$
+							RDBCorePlugin.getDefault().getLog().log(status);
+						}
+						break;
+					}
+				}
+			}
+		}
+
+		//if no ddl generator, use Generic ddl generator
+		if (this.ddlGenerator == null) {
+			this.ddlGenerator = new GenericDdlGenerator();
+		}
+
+		return this.ddlGenerator;
+	}
+
+	public DeltaDDLGenerator getDeltaDDLGenerator() {
+		if(this.deltaDdlGenerator == null) {
+			IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+			IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("org.eclipse.datatools.connectivity.sqm.core", "ddlGeneration"); //$NON-NLS-1$ //$NON-NLS-2$
+			IExtension[] extensions = extensionPoint.getExtensions();
+			int prePriority = -1;
+			for(int i=0; i<extensions.length; ++i) {
+				IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+				for(int j=0; j<configElements.length; ++j) {
+					if(configElements[j].getName().equals("delta")) { //$NON-NLS-1$
+						String product = configElements[j].getAttribute("product"); //$NON-NLS-1$
+						if(!product.equals(this.product)) continue;
+						String version = configElements[j].getAttribute("version"); //$NON-NLS-1$
+						if(!version.equals(this.version)) continue;
+						String priority = configElements[j].getAttribute("priority"); //$NON-NLS-1$
+						int currentPriority = 0;
+						if (priority != null) {
+							try {
+								currentPriority = Integer.parseInt(priority);
+							}catch (NumberFormatException formatEx){
+							}
+						} 
+						if (currentPriority <= prePriority) continue;
+						prePriority = currentPriority;
+						try {
+							this.deltaDdlGenerator = (DeltaDDLGenerator) configElements[j].createExecutableExtension("class"); //$NON-NLS-1$
+						}
+						catch(CoreException e) {
+						    IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getSymbolicName(), IStatus.ERROR,
+						            "The error was detected when creating the DDL generator for " + product + " " + version, e); //$NON-NLS-1$ //$NON-NLS-2$
+							RDBCorePlugin.getDefault().getLog().log(status);
+						}
+						break;
+					}
+				}
+			}
+		}
+		
+		if(this.deltaDdlGenerator == null) this.deltaDdlGenerator = new GenericDeltaDdlGenerator();
+
+		return this.deltaDdlGenerator;
+	}
+
+	public Iterator getPredefinedDataTypes() {
+		this.loadDatabaseDefinition();
+		return this.databaseVendorDefinition.getPredefinedDataTypeDefinitions().iterator();
+	}
+	
+	public List getPredefinedDataTypeDefinitionsByJDBCEnumType(int jdbcEnumType) {
+		List predefinedDataTypeDefinitionList = new Vector();
+		Iterator predefinedDataTypeDefinitionIterator = this.getPredefinedDataTypes();
+	    while (predefinedDataTypeDefinitionIterator.hasNext()) {
+	      Object o = predefinedDataTypeDefinitionIterator.next();
+	      if (o instanceof PredefinedDataTypeDefinition) 
+	        if(((PredefinedDataTypeDefinition)o).getJdbcEnumType() == jdbcEnumType) {
+	        	predefinedDataTypeDefinitionList.add(o);
+	        }
+	    }
+	    return predefinedDataTypeDefinitionList;
+	}
+	
+	public List getPredefinedDataTypesByJDBCEnumType(int jdbcEnumType) {
+		List predefinedDataTypeList = new Vector();
+		Iterator predefinedDataTypeDefinitionIterator = this.getPredefinedDataTypes();
+	    while (predefinedDataTypeDefinitionIterator.hasNext()) {
+	      Object o = predefinedDataTypeDefinitionIterator.next();
+	      if (o instanceof PredefinedDataTypeDefinition) 
+	        if(((PredefinedDataTypeDefinition)o).getJdbcEnumType() == jdbcEnumType) {
+	        	PredefinedDataType predefinedDataType = this.getPredefinedDataType((PredefinedDataTypeDefinition)o);
+	        	if (predefinedDataType != null) {
+	        		predefinedDataTypeList.add(predefinedDataType);
+	        	}
+	        }
+	    }
+	    return predefinedDataTypeList;
+	}
+	
+	public PredefinedDataTypeDefinition getPredefinedDataTypeDefinitionByNameAndJDBCEnumType(String dataTypeName, int jdbcEnumType) {
+		this.loadDatabaseDefinition();
+		return (PredefinedDataTypeDefinition)this.nameAndJDBCEnumToPrimitiveDataTypeDefinitionMap.get(dataTypeName.toUpperCase() + "_" + jdbcEnumType); //$NON-NLS-1$
+	}
+	
+	public PredefinedDataType getPredefinedDataTypeByNameAndJDBCEnumType(String dataTypeName, int jdbcEnumType) {
+		PredefinedDataTypeDefinition predefinedDataTypeDefinition = this.getPredefinedDataTypeDefinitionByNameAndJDBCEnumType(dataTypeName, jdbcEnumType);
+		return this.getPredefinedDataType(predefinedDataTypeDefinition);
+	}
+	
+	public PredefinedDataTypeDefinition getPredefinedDataTypeDefinition(String dataTypeName) {
+		this.loadDatabaseDefinition();
+		PredefinedDataTypeDefinition predefinedDataTypeDefinition = (PredefinedDataTypeDefinition)this.nameToPrimitiveDataTypeDefinitionMap.get(dataTypeName.toUpperCase());
+		if (predefinedDataTypeDefinition == null) {
+			predefinedDataTypeDefinition = (PredefinedDataTypeDefinition)this.nameToPrimitiveDataTypeDefinitionMap.get(dataTypeName);
+		}
+		return predefinedDataTypeDefinition;
+	}
+	
+	public PredefinedDataType getPredefinedDataType(String dataTypeName) {
+		this.loadDatabaseDefinition();
+		PredefinedDataTypeDefinition predefinedDataTypeDefinition = (PredefinedDataTypeDefinition)this.nameToPrimitiveDataTypeDefinitionMap.get(dataTypeName.toUpperCase());
+		return this.getPredefinedDataType(predefinedDataTypeDefinition);
+	}
+	
+	public PredefinedDataType getPredefinedDataType(PredefinedDataTypeDefinition predefinedDataTypeDefinition) {
+		
+		if (predefinedDataTypeDefinition == null) return null;
+		
+		PrimitiveType primitiveType = predefinedDataTypeDefinition.getPrimitiveType();
+		
+		PredefinedDataType predefinedDataType = null;
+		switch(primitiveType.getValue()) {
+			case PrimitiveType.BIGINT: {
+				predefinedDataType = SQLDataTypesFactory.eINSTANCE.createIntegerDataType();
+				predefinedDataType.setName((String)predefinedDataTypeDefinition.getName().get(0));
+				predefinedDataType.setPrimitiveType(primitiveType);
+			}
+			break;
+			
+			case PrimitiveType.BINARY_LARGE_OBJECT: {
+				predefinedDataType = SQLDataTypesFactory.eINSTANCE.createBinaryStringDataType();
+				predefinedDataType.setName((String)predefinedDataTypeDefinition.getName().get(0));
+				predefinedDataType.setPrimitiveType(primitiveType);
+				if (predefinedDataTypeDefinition.isLengthSupported()) {
+					((BinaryStringDataType)predefinedDataType).setLength(predefinedDataTypeDefinition.getDefaultLength());
+				}
+			}
+			break;
+			
+			case PrimitiveType.BOOLEAN: {
+				predefinedDataType = SQLDataTypesFactory.eINSTANCE.createBooleanDataType();	
+				predefinedDataType.setName((String)predefinedDataTypeDefinition.getName().get(0));
+				predefinedDataType.setPrimitiveType(primitiveType);
+			}
+			break;
+			
+			case PrimitiveType.CHARACTER: {
+				predefinedDataType = SQLDataTypesFactory.eINSTANCE.createCharacterStringDataType();	
+				predefinedDataType.setName((String)predefinedDataTypeDefinition.getName().get(0));
+				predefinedDataType.setPrimitiveType(primitiveType);
+				if (predefinedDataTypeDefinition.isLengthSupported()) {
+					((CharacterStringDataType)predefinedDataType).setLength(predefinedDataTypeDefinition.getDefaultLength());
+				}
+			}
+			break;
+			
+			case PrimitiveType.CHARACTER_LARGE_OBJECT: {
+				predefinedDataType = SQLDataTypesFactory.eINSTANCE.createCharacterStringDataType();
+				predefinedDataType.setName((String)predefinedDataTypeDefinition.getName().get(0));
+				predefinedDataType.setPrimitiveType(primitiveType);
+				if (predefinedDataTypeDefinition.isLengthSupported()) {
+					((CharacterStringDataType)predefinedDataType).setLength(predefinedDataTypeDefinition.getDefaultLength());
+				}
+			}
+			break;
+			
+			case PrimitiveType.CHARACTER_VARYING: {
+				predefinedDataType = SQLDataTypesFactory.eINSTANCE.createCharacterStringDataType();	
+				predefinedDataType.setName((String)predefinedDataTypeDefinition.getName().get(0));
+				predefinedDataType.setPrimitiveType(primitiveType);
+				if (predefinedDataTypeDefinition.isLengthSupported()) {
+					((CharacterStringDataType)predefinedDataType).setLength(predefinedDataTypeDefinition.getDefaultLength());
+				}
+			}
+			break;
+			
+			case PrimitiveType.DATE: {
+				predefinedDataType = SQLDataTypesFactory.eINSTANCE.createDateDataType();	
+				predefinedDataType.setName((String)predefinedDataTypeDefinition.getName().get(0));
+				predefinedDataType.setPrimitiveType(primitiveType);
+			}
+			break;
+			
+			case PrimitiveType.DECIMAL: {
+				predefinedDataType = SQLDataTypesFactory.eINSTANCE.createFixedPrecisionDataType();
+				predefinedDataType.setName((String)predefinedDataTypeDefinition.getName().get(0));
+				predefinedDataType.setPrimitiveType(primitiveType);
+				if (predefinedDataTypeDefinition.isPrecisionSupported()) {
+					((FixedPrecisionDataType)predefinedDataType).setPrecision(predefinedDataTypeDefinition.getDefaultPrecision());
+				}
+				if (predefinedDataTypeDefinition.isScaleSupported()) {
+					((FixedPrecisionDataType)predefinedDataType).setScale(predefinedDataTypeDefinition.getDefaultScale());
+				}
+			}
+			break;
+			
+			case PrimitiveType.DOUBLE_PRECISION: {
+				predefinedDataType = SQLDataTypesFactory.eINSTANCE.createApproximateNumericDataType();	
+				predefinedDataType.setName((String)predefinedDataTypeDefinition.getName().get(0));
+				predefinedDataType.setPrimitiveType(primitiveType);
+			}
+			break;
+			
+			case PrimitiveType.FLOAT: {
+				predefinedDataType = SQLDataTypesFactory.eINSTANCE.createApproximateNumericDataType();	
+				predefinedDataType.setName((String)predefinedDataTypeDefinition.getName().get(0));
+				predefinedDataType.setPrimitiveType(primitiveType);
+				if (predefinedDataTypeDefinition.isPrecisionSupported()) {
+					((ApproximateNumericDataType)predefinedDataType).setPrecision(predefinedDataTypeDefinition.getDefaultPrecision());
+				}
+			}
+			break;
+			
+			case PrimitiveType.INTEGER: {
+				predefinedDataType = SQLDataTypesFactory.eINSTANCE.createIntegerDataType();	
+				predefinedDataType.setName((String)predefinedDataTypeDefinition.getName().get(0));
+				predefinedDataType.setPrimitiveType(primitiveType);
+			}
+			break;
+			
+			case PrimitiveType.INTERVAL: {
+				predefinedDataType = SQLDataTypesFactory.eINSTANCE.createIntervalDataType();
+				predefinedDataType.setName((String)predefinedDataTypeDefinition.getName().get(0));		
+				predefinedDataType.setPrimitiveType(primitiveType);
+				if (predefinedDataTypeDefinition.isLeadingFieldQualifierSupported()) {
+					FieldQualifierDefinition leadingFieldQualifierDefinition = predefinedDataTypeDefinition.getDefaultLeadingFieldQualifierDefinition();
+					if (leadingFieldQualifierDefinition != null) {
+						((IntervalDataType)predefinedDataType).setLeadingQualifier(leadingFieldQualifierDefinition.getName());
+						((IntervalDataType)predefinedDataType).setLeadingFieldPrecision(leadingFieldQualifierDefinition.getDefaultPrecision());
+					}
+				}
+				if (predefinedDataTypeDefinition.isTrailingFieldQualifierSupported()) {
+					FieldQualifierDefinition trailingFieldQualifierDefinition = predefinedDataTypeDefinition.getDefaultTrailingFieldQualifierDefinition();
+					if (trailingFieldQualifierDefinition != null) {
+						((IntervalDataType)predefinedDataType).setTrailingQualifier(trailingFieldQualifierDefinition.getName());
+						((IntervalDataType)predefinedDataType).setTrailingFieldPrecision(trailingFieldQualifierDefinition.getDefaultPrecision());
+					}
+				}
+			}
+			break;
+			
+			case PrimitiveType.NATIONAL_CHARACTER: {
+				predefinedDataType = SQLDataTypesFactory.eINSTANCE.createCharacterStringDataType();
+				predefinedDataType.setName((String)predefinedDataTypeDefinition.getName().get(0));		
+				predefinedDataType.setPrimitiveType(primitiveType);
+				if (predefinedDataTypeDefinition.isLengthSupported()) {
+					((CharacterStringDataType)predefinedDataType).setLength(predefinedDataTypeDefinition.getDefaultLength());
+				}
+			}
+			break;
+						
+			case PrimitiveType.NATIONAL_CHARACTER_VARYING: {
+				predefinedDataType = SQLDataTypesFactory.eINSTANCE.createCharacterStringDataType();
+				predefinedDataType.setName((String)predefinedDataTypeDefinition.getName().get(0));		
+				predefinedDataType.setPrimitiveType(primitiveType);
+				if (predefinedDataTypeDefinition.isLengthSupported()) {
+					((CharacterStringDataType)predefinedDataType).setLength(predefinedDataTypeDefinition.getDefaultLength());
+				}
+			}
+			break;
+						
+			case PrimitiveType.NATIONAL_CHARACTER_LARGE_OBJECT: {
+				predefinedDataType = SQLDataTypesFactory.eINSTANCE.createCharacterStringDataType();
+				predefinedDataType.setName((String)predefinedDataTypeDefinition.getName().get(0));		
+				predefinedDataType.setPrimitiveType(primitiveType);
+				if (predefinedDataTypeDefinition.isLengthSupported()) {
+					((CharacterStringDataType)predefinedDataType).setLength(predefinedDataTypeDefinition.getDefaultLength());
+				}
+			}
+			break;
+			
+			case PrimitiveType.NUMERIC: {
+				predefinedDataType = SQLDataTypesFactory.eINSTANCE.createFixedPrecisionDataType();
+				predefinedDataType.setName((String)predefinedDataTypeDefinition.getName().get(0));
+				predefinedDataType.setPrimitiveType(primitiveType);
+				if (predefinedDataTypeDefinition.isPrecisionSupported()) {
+					((FixedPrecisionDataType)predefinedDataType).setPrecision(predefinedDataTypeDefinition.getDefaultPrecision());
+				}
+				if (predefinedDataTypeDefinition.isScaleSupported()) {
+					((FixedPrecisionDataType)predefinedDataType).setScale(predefinedDataTypeDefinition.getDefaultScale());
+				}
+			}
+			break;
+			
+			case PrimitiveType.REAL: {
+				predefinedDataType = SQLDataTypesFactory.eINSTANCE.createApproximateNumericDataType();
+				predefinedDataType.setName((String)predefinedDataTypeDefinition.getName().get(0));	
+				predefinedDataType.setPrimitiveType(primitiveType);
+			}
+			break;
+			
+			case PrimitiveType.SMALLINT: {
+				predefinedDataType = SQLDataTypesFactory.eINSTANCE.createIntegerDataType();
+				predefinedDataType.setName((String)predefinedDataTypeDefinition.getName().get(0));	
+				predefinedDataType.setPrimitiveType(primitiveType);
+			}
+			break;
+			
+			case PrimitiveType.TIME: {
+				predefinedDataType = SQLDataTypesFactory.eINSTANCE.createTimeDataType();	
+				predefinedDataType.setName((String)predefinedDataTypeDefinition.getName().get(0));
+				predefinedDataType.setPrimitiveType(primitiveType);
+				if (predefinedDataTypeDefinition.isPrecisionSupported()) {
+					((TimeDataType)predefinedDataType).setFractionalSecondsPrecision(predefinedDataTypeDefinition.getDefaultPrecision());
+				}
+			}
+			break;
+			
+			case PrimitiveType.TIMESTAMP: {
+				predefinedDataType = SQLDataTypesFactory.eINSTANCE.createTimeDataType();	
+				predefinedDataType.setName((String)predefinedDataTypeDefinition.getName().get(0));	
+				predefinedDataType.setPrimitiveType(primitiveType);
+				if (predefinedDataTypeDefinition.isPrecisionSupported()) {
+					((TimeDataType)predefinedDataType).setFractionalSecondsPrecision(predefinedDataTypeDefinition.getDefaultPrecision());
+				}
+			}
+			break;
+			
+			case PrimitiveType.DATALINK: {
+				predefinedDataType = SQLDataTypesFactory.eINSTANCE.createDataLinkDataType();	
+				predefinedDataType.setName((String)predefinedDataTypeDefinition.getName().get(0));	
+				predefinedDataType.setPrimitiveType(primitiveType);
+				if (predefinedDataTypeDefinition.isLengthSupported()) {
+					((DataLinkDataType)predefinedDataType).setLength(predefinedDataTypeDefinition.getDefaultLength());
+				}
+			}
+			break;
+			
+			case PrimitiveType.BINARY: {
+				predefinedDataType = SQLDataTypesFactory.eINSTANCE.createBinaryStringDataType();	
+				predefinedDataType.setName((String)predefinedDataTypeDefinition.getName().get(0));	
+				predefinedDataType.setPrimitiveType(primitiveType);
+				if (predefinedDataTypeDefinition.isLengthSupported()) {
+					((BinaryStringDataType)predefinedDataType).setLength(predefinedDataTypeDefinition.getDefaultLength());
+				}
+			}
+			break;
+			
+			case PrimitiveType.BINARY_VARYING: {
+				predefinedDataType = SQLDataTypesFactory.eINSTANCE.createBinaryStringDataType();	
+				predefinedDataType.setName((String)predefinedDataTypeDefinition.getName().get(0));	
+				predefinedDataType.setPrimitiveType(primitiveType);
+				if (predefinedDataTypeDefinition.isLengthSupported()) {
+					((BinaryStringDataType)predefinedDataType).setLength(predefinedDataTypeDefinition.getDefaultLength());
+				}
+			}
+			break;
+			
+			case PrimitiveType.XML_TYPE: {
+				predefinedDataType = SQLDataTypesFactory.eINSTANCE.createXMLDataType();	
+				predefinedDataType.setName((String)predefinedDataTypeDefinition.getName().get(0));	
+				predefinedDataType.setPrimitiveType(primitiveType);
+			}
+			break;
+		}
+		return predefinedDataType;
+	}
+	
+	public String getPredefinedDataTypeFormattedName(PredefinedDataType predefinedDataType) {
+		
+		if (predefinedDataType == null) return null;
+		
+		PrimitiveType primitiveType = predefinedDataType.getPrimitiveType();
+		
+		String predefinedDataTypeFormattedName = null;
+		switch(primitiveType.getValue()) {
+			case PrimitiveType.BIGINT: {
+				predefinedDataTypeFormattedName = predefinedDataType.getName();
+			}
+			break;
+			
+			case PrimitiveType.BINARY: {
+				predefinedDataTypeFormattedName = predefinedDataType.getName();
+				PredefinedDataTypeDefinition predefinedDataTypeDefinition = this.getPredefinedDataTypeDefinition(predefinedDataType.getName());
+				if (predefinedDataTypeDefinition != null) {
+					if (predefinedDataTypeDefinition.isDisplayNameSupported()) {
+						String temp = predefinedDataTypeDefinition.getDisplayName();
+						if ( (temp != null) && (temp.length() > 0) && predefinedDataTypeDefinition.isLengthSupported()) {
+							predefinedDataTypeFormattedName = MessageFormat.format(temp, new Object[] {Integer.toString(((BinaryStringDataType)predefinedDataType).getLength())});
+						}
+					}
+					else {
+						if (predefinedDataTypeDefinition.isLengthSupported() &&
+								(((BinaryStringDataType)predefinedDataType).getLength() > 0) ) {
+							predefinedDataTypeFormattedName += "(" + ((BinaryStringDataType)predefinedDataType).getLength() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+						}
+					}
+				}
+			}
+			break;
+			
+			case PrimitiveType.BINARY_LARGE_OBJECT: {
+				predefinedDataTypeFormattedName = predefinedDataType.getName();
+				PredefinedDataTypeDefinition predefinedDataTypeDefinition = this.getPredefinedDataTypeDefinition(predefinedDataTypeFormattedName);
+				if (predefinedDataTypeDefinition.isLengthSupported() &&
+						(((BinaryStringDataType)predefinedDataType).getLength() > 0) ) {
+					predefinedDataTypeFormattedName += "(" + ((BinaryStringDataType)predefinedDataType).getLength() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+				}
+			}
+			break;
+			
+			case PrimitiveType.BINARY_VARYING: {
+				predefinedDataTypeFormattedName = predefinedDataType.getName();
+				PredefinedDataTypeDefinition predefinedDataTypeDefinition = this.getPredefinedDataTypeDefinition(predefinedDataType.getName());
+				if (predefinedDataTypeDefinition != null) {
+					if (predefinedDataTypeDefinition.isDisplayNameSupported()) {
+						String temp = predefinedDataTypeDefinition.getDisplayName();
+						if ( (temp != null) && (temp.length() > 0) && predefinedDataTypeDefinition.isLengthSupported()) {
+							predefinedDataTypeFormattedName = MessageFormat.format(temp, new Object[] {Integer.toString(((BinaryStringDataType)predefinedDataType).getLength())});
+						}
+					}
+					else {
+						if (predefinedDataTypeDefinition.isLengthSupported()) {
+							if (predefinedDataTypeDefinition.isLargeValueSpecifierSupported()) {
+								if (((BinaryStringDataType)predefinedDataType).getLength() == predefinedDataTypeDefinition.getLargeValueSpecifierLength()) {
+									predefinedDataTypeFormattedName += "(" + predefinedDataTypeDefinition.getLargeValueSpecifierName() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+								}
+								else {
+									if (((BinaryStringDataType)predefinedDataType).getLength() > 0) {
+										predefinedDataTypeFormattedName += "(" + ((BinaryStringDataType)predefinedDataType).getLength() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+									}
+								}
+							}
+							else {
+								if (((BinaryStringDataType)predefinedDataType).getLength() > 0) {
+									predefinedDataTypeFormattedName += "(" + ((BinaryStringDataType)predefinedDataType).getLength() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+								}
+							}
+						}
+					}
+				}
+			}
+			break;
+			
+			case PrimitiveType.BOOLEAN: {
+				predefinedDataTypeFormattedName = predefinedDataType.getName();
+			}
+			break;
+			
+			case PrimitiveType.CHARACTER: {
+				predefinedDataTypeFormattedName = predefinedDataType.getName();
+				PredefinedDataTypeDefinition predefinedDataTypeDefinition = this.getPredefinedDataTypeDefinition(predefinedDataTypeFormattedName);
+				if (predefinedDataTypeDefinition.isDisplayNameSupported()) {
+					String temp = predefinedDataTypeDefinition.getDisplayName();
+					if ( (temp != null) && (temp.length() > 0) && predefinedDataTypeDefinition.isLengthSupported()) {
+						if ( predefinedDataTypeDefinition.isLengthSemanticSupported() ) {
+							String lengthSemantic = this.getLenghtSemantic((CharacterStringDataType)predefinedDataType);
+							if ( (lengthSemantic != null) && (lengthSemantic.length() > 0) ) {
+								predefinedDataTypeFormattedName = MessageFormat.format(temp, new Object[] {Integer.toString(((CharacterStringDataType)predefinedDataType).getLength()) + " " + lengthSemantic}); //$NON-NLS-1$
+							}
+							else {
+								predefinedDataTypeFormattedName = MessageFormat.format(temp, new Object[] {Integer.toString(((CharacterStringDataType)predefinedDataType).getLength())});
+							}
+						}
+						else {
+							predefinedDataTypeFormattedName = MessageFormat.format(temp, new Object[] {Integer.toString(((CharacterStringDataType)predefinedDataType).getLength())});
+						}
+					}
+				}
+				else {
+					if (predefinedDataTypeDefinition.isLengthSupported() &&
+							(((CharacterStringDataType)predefinedDataType).getLength() > 0) ) {
+						predefinedDataTypeFormattedName += "(" + ((CharacterStringDataType)predefinedDataType).getLength() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+					}
+				}
+//				if (predefinedDataTypeDefinition.isLengthSupported() &&
+//						(((CharacterStringDataType)predefinedDataType).getLength() > 0)	) {
+//					predefinedDataTypeFormattedName += "(" + ((CharacterStringDataType)predefinedDataType).getLength() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+//				}
+			}
+			break;
+			
+			case PrimitiveType.CHARACTER_LARGE_OBJECT: {
+				predefinedDataTypeFormattedName = predefinedDataType.getName();
+				PredefinedDataTypeDefinition predefinedDataTypeDefinition = this.getPredefinedDataTypeDefinition(predefinedDataTypeFormattedName);
+				if (predefinedDataTypeDefinition.isLengthSupported() &&
+						(((CharacterStringDataType)predefinedDataType).getLength() > 0)	) {
+					predefinedDataTypeFormattedName += "(" + ((CharacterStringDataType)predefinedDataType).getLength() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+				}
+			}
+			break;
+			
+			case PrimitiveType.CHARACTER_VARYING: {
+				predefinedDataTypeFormattedName = predefinedDataType.getName();
+				PredefinedDataTypeDefinition predefinedDataTypeDefinition = this.getPredefinedDataTypeDefinition(predefinedDataTypeFormattedName);
+				if (predefinedDataTypeDefinition != null) {
+					if (predefinedDataTypeDefinition.isDisplayNameSupported()) {
+						String temp = predefinedDataTypeDefinition.getDisplayName();
+						if ( (temp != null) && (temp.length() > 0) && predefinedDataTypeDefinition.isLengthSupported()) {
+							if ( predefinedDataTypeDefinition.isLengthSemanticSupported() ) {
+								String lengthSemantic = this.getLenghtSemantic((CharacterStringDataType)predefinedDataType);
+								if ( (lengthSemantic != null) && (lengthSemantic.length() > 0) ) {
+									predefinedDataTypeFormattedName = MessageFormat.format(temp, new Object[] {Integer.toString(((CharacterStringDataType)predefinedDataType).getLength()) + " " + lengthSemantic}); //$NON-NLS-1$
+								}
+								else {
+									predefinedDataTypeFormattedName = MessageFormat.format(temp, new Object[] {Integer.toString(((CharacterStringDataType)predefinedDataType).getLength())});
+								}
+							}
+							else {
+								predefinedDataTypeFormattedName = MessageFormat.format(temp, new Object[] {Integer.toString(((CharacterStringDataType)predefinedDataType).getLength())});
+							} 
+						}
+					}
+					else {
+						if (predefinedDataTypeDefinition.isLengthSupported()) {
+							if (predefinedDataTypeDefinition.isLargeValueSpecifierSupported()) {
+								if (((CharacterStringDataType)predefinedDataType).getLength() == predefinedDataTypeDefinition.getLargeValueSpecifierLength()) {
+									predefinedDataTypeFormattedName += "(" + predefinedDataTypeDefinition.getLargeValueSpecifierName() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+								}
+								else {
+									if (((CharacterStringDataType)predefinedDataType).getLength() > 0) {
+										predefinedDataTypeFormattedName += "(" + ((CharacterStringDataType)predefinedDataType).getLength() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+									}
+								}
+							}
+							else {
+								if (((CharacterStringDataType)predefinedDataType).getLength() > 0) {
+									predefinedDataTypeFormattedName += "(" + ((CharacterStringDataType)predefinedDataType).getLength() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+								}
+							}
+						}
+					}
+				}
+			}
+			break;
+			
+			case PrimitiveType.DATE: {
+				predefinedDataTypeFormattedName = predefinedDataType.getName();
+			}
+			break;
+			
+			case PrimitiveType.DECIMAL: {
+				predefinedDataTypeFormattedName = predefinedDataType.getName();
+				PredefinedDataTypeDefinition predefinedDataTypeDefinition = this.getPredefinedDataTypeDefinition(predefinedDataTypeFormattedName);
+				if ( predefinedDataTypeDefinition.isPrecisionSupported() && predefinedDataTypeDefinition.isScaleSupported() ) {
+					int precision = ((FixedPrecisionDataType)predefinedDataType).getPrecision();
+					if (precision > 0) {
+						predefinedDataTypeFormattedName += "(" + precision + " , " + ((FixedPrecisionDataType)predefinedDataType).getScale() + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+					}
+				}
+			}
+			break;
+			
+			case PrimitiveType.DOUBLE_PRECISION: {
+				predefinedDataTypeFormattedName = predefinedDataType.getName();
+			}
+			break;
+			
+			case PrimitiveType.FLOAT: {
+				predefinedDataTypeFormattedName = predefinedDataType.getName();
+				PredefinedDataTypeDefinition predefinedDataTypeDefinition = this.getPredefinedDataTypeDefinition(predefinedDataTypeFormattedName);
+				if (predefinedDataTypeDefinition.isPrecisionSupported() &&
+						(((ApproximateNumericDataType)predefinedDataType).getPrecision() > 0) ) {
+					predefinedDataTypeFormattedName += "(" + ((ApproximateNumericDataType)predefinedDataType).getPrecision() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+				}
+			}
+			break;
+			
+			case PrimitiveType.INTEGER: {
+				predefinedDataTypeFormattedName = predefinedDataType.getName();
+			}
+			break;
+			
+			case PrimitiveType.INTERVAL: {
+				predefinedDataTypeFormattedName = predefinedDataType.getName();
+				PredefinedDataTypeDefinition predefinedDataTypeDefinition = this.getPredefinedDataTypeDefinition(predefinedDataType.getName());
+				if (predefinedDataTypeDefinition.isDisplayNameSupported()) {
+					String temp = predefinedDataTypeDefinition.getDisplayName();
+					Vector parameterList = new Vector();
+					IntervalQualifierType leadingQualifier = ((IntervalDataType)predefinedDataType).getLeadingQualifier();
+					IntervalQualifierType trailingQualifier = ((IntervalDataType)predefinedDataType).getTrailingQualifier();
+					
+					if (  (leadingQualifier == null) && (trailingQualifier == null) ) {
+						predefinedDataTypeFormattedName = predefinedDataType.getName();
+						break;
+					}
+					
+					if (  (leadingQualifier != null) && (leadingQualifier.toString().length() > 0) ) {
+						String leadingQualifierString = leadingQualifier.toString();
+						int leadingPrecision = ((IntervalDataType)predefinedDataType).getLeadingFieldPrecision();
+						FieldQualifierDefinition fieldQualifierDefinition = this.getLeadingFieldQualifierDefinition(predefinedDataTypeDefinition, leadingQualifierString);
+						int defaultLeadingPrecision = 0;
+						if (fieldQualifierDefinition != null) {
+							defaultLeadingPrecision = fieldQualifierDefinition.getDefaultPrecision();
+						}
+						if ( (leadingPrecision > 0) && fieldQualifierDefinition.isPrecisionSupported() && (leadingPrecision != defaultLeadingPrecision) ) {
+							leadingQualifierString += "(" + Integer.toString(leadingPrecision) + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+						}
+						parameterList.add(leadingQualifierString);
+					}
+					
+					
+					if ( (trailingQualifier != null) && (trailingQualifier.toString().length() > 0) ) {
+						String trailingQualifierString = trailingQualifier.toString();
+						int trailingPrecision = ((IntervalDataType)predefinedDataType).getTrailingFieldPrecision();
+						FieldQualifierDefinition fieldQualifierDefinition = this.getTrailingFieldQualifierDefinition(predefinedDataTypeDefinition, trailingQualifierString);
+						int defaultTrailingPrecision = 0;
+						if (fieldQualifierDefinition != null) {
+							defaultTrailingPrecision = fieldQualifierDefinition.getDefaultPrecision();
+						}
+						if ( (trailingPrecision > 0) && fieldQualifierDefinition.isPrecisionSupported() && (trailingPrecision != defaultTrailingPrecision) )  {
+								trailingQualifierString += "(" + Integer.toString(trailingPrecision) + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+						}
+						parameterList.add(trailingQualifierString);
+					}
+					
+					Object[] parameters = new Object[parameterList.size()];
+					for(int i=0; i<parameters.length; i++) {
+						parameters[i] = parameterList.get(i);
+					}
+					
+					predefinedDataTypeFormattedName = MessageFormat.format(temp, parameters);
+				}
+			}
+			break;
+			
+			case PrimitiveType.NATIONAL_CHARACTER: {
+				predefinedDataTypeFormattedName = predefinedDataType.getName();
+				PredefinedDataTypeDefinition predefinedDataTypeDefinition = this.getPredefinedDataTypeDefinition(predefinedDataTypeFormattedName);
+				if (predefinedDataTypeDefinition.isLengthSupported()) {
+					predefinedDataTypeFormattedName += "(" + ((CharacterStringDataType)predefinedDataType).getLength() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+				}
+			}
+			break;
+						
+			case PrimitiveType.NATIONAL_CHARACTER_VARYING: {
+				predefinedDataTypeFormattedName = predefinedDataType.getName();
+				PredefinedDataTypeDefinition predefinedDataTypeDefinition = this.getPredefinedDataTypeDefinition(predefinedDataTypeFormattedName);
+				if (predefinedDataTypeDefinition.isLengthSupported()) {
+					if (predefinedDataTypeDefinition.isLargeValueSpecifierSupported()) {
+						if (((CharacterStringDataType)predefinedDataType).getLength() == predefinedDataTypeDefinition.getLargeValueSpecifierLength()) {
+							predefinedDataTypeFormattedName += "(" + predefinedDataTypeDefinition.getLargeValueSpecifierName() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+						}
+						else {
+							if (((CharacterStringDataType)predefinedDataType).getLength() > 0) {
+														predefinedDataTypeFormattedName += "(" + ((CharacterStringDataType)predefinedDataType).getLength() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+							}
+						}
+					}
+					else {
+						if (((CharacterStringDataType)predefinedDataType).getLength() > 0) {
+							predefinedDataTypeFormattedName += "(" + ((CharacterStringDataType)predefinedDataType).getLength() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+						}
+					}
+				}
+			}
+			break;
+						
+			case PrimitiveType.NATIONAL_CHARACTER_LARGE_OBJECT: {
+				predefinedDataTypeFormattedName = predefinedDataType.getName();
+				PredefinedDataTypeDefinition predefinedDataTypeDefinition = this.getPredefinedDataTypeDefinition(predefinedDataTypeFormattedName);
+				if (predefinedDataTypeDefinition.isLengthSupported()) {
+					predefinedDataTypeFormattedName += "(" + ((CharacterStringDataType)predefinedDataType).getLength() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+				}
+			}
+			break;
+			
+			case PrimitiveType.NUMERIC: {
+				predefinedDataTypeFormattedName = predefinedDataType.getName();
+				PredefinedDataTypeDefinition predefinedDataTypeDefinition = this.getPredefinedDataTypeDefinition(predefinedDataTypeFormattedName);
+				if ( predefinedDataTypeDefinition.isPrecisionSupported() && predefinedDataTypeDefinition.isScaleSupported() ) {
+					int precision = ((FixedPrecisionDataType)predefinedDataType).getPrecision();
+					if (precision > 0) {
+						predefinedDataTypeFormattedName += "(" + precision + " , " + ((FixedPrecisionDataType)predefinedDataType).getScale() + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+					}
+				}
+			}
+			break;
+			
+			case PrimitiveType.REAL: {
+				predefinedDataTypeFormattedName = predefinedDataType.getName();
+			}
+			break;
+			
+			case PrimitiveType.SMALLINT: {
+				predefinedDataTypeFormattedName = predefinedDataType.getName();
+			}
+			break;
+			
+			case PrimitiveType.TIME: {
+				predefinedDataTypeFormattedName = predefinedDataType.getName();
+			}
+			break;
+			
+			case PrimitiveType.TIMESTAMP: {
+				predefinedDataTypeFormattedName = predefinedDataType.getName();
+				PredefinedDataTypeDefinition predefinedDataTypeDefinition = this.getPredefinedDataTypeDefinition(predefinedDataTypeFormattedName);
+                if (predefinedDataTypeDefinition != null) {
+                    if (predefinedDataTypeDefinition.isDisplayNameSupported()) {
+                        String temp = predefinedDataTypeDefinition.getDisplayName();
+                        if ( (temp != null) && (temp.length() > 0) && predefinedDataTypeDefinition.isPrecisionSupported()) {
+                            int precision = ((TimeDataType)predefinedDataType).getFractionalSecondsPrecision();
+                            if ( (precision > 0) && (precision != predefinedDataTypeDefinition.getDefaultPrecision()) ) {
+                                predefinedDataTypeFormattedName = MessageFormat.format(temp, new Object[] {Integer.toString(precision)});
+                            }
+                        }
+                    }
+                    else {
+                        if (predefinedDataTypeDefinition.isPrecisionSupported() ) {
+                            int precision = ((TimeDataType)predefinedDataType).getFractionalSecondsPrecision();
+                            if ( (precision > 0) && (precision != predefinedDataTypeDefinition.getDefaultPrecision()) ) {
+                                predefinedDataTypeFormattedName += "(" + precision + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+                            }
+                        }
+                    }
+                }
+			}
+			break;
+			
+			case PrimitiveType.DATALINK: {
+				predefinedDataTypeFormattedName = predefinedDataType.getName();
+				PredefinedDataTypeDefinition predefinedDataTypeDefinition = this.getPredefinedDataTypeDefinition(predefinedDataTypeFormattedName);
+				if (predefinedDataTypeDefinition.isLengthSupported()) {
+					predefinedDataTypeFormattedName += "(" + ((DataLinkDataType)predefinedDataType).getLength() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+				}
+			}
+			break;
+			
+			case PrimitiveType.XML_TYPE: {
+				predefinedDataTypeFormattedName = predefinedDataType.getName();
+			}
+			break;
+		}
+		return predefinedDataTypeFormattedName;
+	}
+	
+	public FieldQualifierDefinition getLeadingFieldQualifierDefinition(PredefinedDataTypeDefinition predefinedDataTypeDefinition, String fieldQualifierName) {
+		Iterator leadingFieldQualifierDefinitionIter = predefinedDataTypeDefinition.getLeadingFieldQualifierDefinition().iterator();
+		while(leadingFieldQualifierDefinitionIter.hasNext()) {
+			FieldQualifierDefinition fieldQualifierDefinition = (FieldQualifierDefinition)leadingFieldQualifierDefinitionIter.next();
+			if (fieldQualifierDefinition.getName().toString().equals(fieldQualifierName)) {
+				return fieldQualifierDefinition;
+			}
+		}
+		
+		return null;
+	}
+	
+	public FieldQualifierDefinition getTrailingFieldQualifierDefinition(PredefinedDataTypeDefinition predefinedDataTypeDefinition, String fieldQualifierName) {
+		Iterator trailingFieldQualifierDefinitionIter = predefinedDataTypeDefinition.getTrailingFieldQualifierDefinition().iterator();
+		while(trailingFieldQualifierDefinitionIter.hasNext()) {
+			FieldQualifierDefinition fieldQualifierDefinition = (FieldQualifierDefinition)trailingFieldQualifierDefinitionIter.next();
+			if (fieldQualifierDefinition.getName().toString().equals(fieldQualifierName)) {
+				return fieldQualifierDefinition;
+			}
+		}
+		
+		return null;
+	}
+	
+	public Iterator getSequenceSupportedPredefinedDataTypes() {
+		this.loadDatabaseDefinition();
+		SequenceDefinition sequenceDefinition = this.databaseVendorDefinition.getSequenceDefinition();
+		if (sequenceDefinition != null) {
+			return sequenceDefinition.getPredefinedDataTypeDefinitions().iterator();
+		}
+		else {
+			return (new Vector()).iterator();
+		}
+	}
+	
+	public Iterator getIdentityColumnSupportedPredefinedDataTypes() {
+		this.loadDatabaseDefinition();
+		ColumnDefinition columnDefinition = this.databaseVendorDefinition.getColumnDefinition();
+		if (columnDefinition != null) {
+			return columnDefinition.getIdentityColumnDataTypeDefinitions().iterator();
+		}
+		else {
+			return (new Vector()).iterator();
+		}
+	}
+	
+	public Iterator getRoutineParameterPredefinedDataTypeDefinitions() {
+	    List datatypes = new ArrayList();
+	    Iterator pdtIter = this.getPredefinedDataTypes();
+	    while(pdtIter.hasNext()) {
+	        datatypes.add(pdtIter.next());
+	    }
+	    Iterator rpdtIter = this.getRoutineParameterSpecificPredefinedDataTypeDefinitions();
+	    while(rpdtIter.hasNext()) {
+	        datatypes.add(rpdtIter.next());
+	    }
+	    return datatypes.iterator();
+	}
+	    
+	public Iterator getRoutineParameterPredefinedDataTypeDefinitions(LanguageType languageType) {
+	    List dataTypeDefinitions = new ArrayList();
+	    Iterator pdtDefIter = this.getPredefinedDataTypes();
+	    while(pdtDefIter.hasNext()) {
+	        PredefinedDataTypeDefinition pdtDef = (PredefinedDataTypeDefinition)pdtDefIter.next();
+	        if ( (languageType != null) && languageType.equals(LanguageType.PLSQL_LITERAL)) {
+	            if (pdtDef.getLanguageType().contains(languageType)) {
+	                dataTypeDefinitions.add(pdtDef);
+	            }
+	        }
+	        else {
+	            dataTypeDefinitions.add(pdtDef);    
+	        }
+	    }
+	    Iterator rpdtIter = this.getRoutineParameterSpecificPredefinedDataTypeDefinitions(languageType);
+	    while(rpdtIter.hasNext()) {
+	        dataTypeDefinitions.add(rpdtIter.next());
+	    }
+	    return dataTypeDefinitions.iterator();
+	}
+	    
+	private Iterator getRoutineParameterSpecificPredefinedDataTypeDefinitions() {
+	    this.loadDatabaseDefinition();
+	    StoredProcedureDefinition storedProcedureDefinition = this.databaseVendorDefinition.getStoredProcedureDefinition();
+	    if (storedProcedureDefinition != null) {
+	        return storedProcedureDefinition.getPredefinedDataTypeDefinitions().iterator();
+	    }
+	    else {
+	        return (new ArrayList()).iterator();
+	    }
+	}
+	    
+	private Iterator getRoutineParameterSpecificPredefinedDataTypeDefinitions(LanguageType languageType) {
+	    List dataTypeDefinitions = new ArrayList();
+	    this.loadDatabaseDefinition();
+	    StoredProcedureDefinition storedProcedureDefinition = this.databaseVendorDefinition.getStoredProcedureDefinition();
+	    if (storedProcedureDefinition != null) {
+	        Iterator pdtDefIter =  storedProcedureDefinition.getPredefinedDataTypeDefinitions().iterator();
+	        while(pdtDefIter.hasNext()) {
+	            PredefinedDataTypeDefinition pdtDef = (PredefinedDataTypeDefinition)pdtDefIter.next();
+	            if ( (languageType != null) && languageType.equals(LanguageType.PLSQL_LITERAL)) {
+	                if (pdtDef.getLanguageType().contains(languageType)) {
+	                    dataTypeDefinitions.add(pdtDef);
+	                }
+	            }
+	            else {
+	                dataTypeDefinitions.add(pdtDef);    
+	            }
+	        }
+	            
+	        return dataTypeDefinitions.iterator();
+	    }
+	    else {
+	        return (new ArrayList()).iterator();
+	    }
+	}
+
+	public boolean isKeyConstraintSupported(DataType dataType) {
+		if (dataType instanceof PredefinedDataType) {
+			PredefinedDataTypeDefinition predefinedDataTypeDefinition = this.getPredefinedDataTypeDefinition(dataType.getName());
+			if (predefinedDataTypeDefinition != null)
+				return predefinedDataTypeDefinition.isKeyConstraintSupported();
+		}
+		
+	    if(dataType instanceof DistinctUserDefinedType){
+	        DistinctUserDefinedType userDefinedType = (DistinctUserDefinedType)dataType;
+	        PredefinedDataTypeDefinition predefinedDataTypeDefinition  = this.getPredefinedDataTypeDefinition(userDefinedType.getPredefinedRepresentation().getName());
+	        if (predefinedDataTypeDefinition  != null)
+	            return predefinedDataTypeDefinition.isKeyConstraintSupported();
+	    }
+
+		return false;
+	}
+	
+	public boolean supportsSchema() {
+		this.loadDatabaseDefinition();
+		return this.databaseVendorDefinition.isSchemaSupported();
+	}
+	
+	public boolean supportsAlias() {
+		this.loadDatabaseDefinition();
+		return this.databaseVendorDefinition.isAliasSupported();
+	}
+	
+	public boolean supportsSynonym() {
+		this.loadDatabaseDefinition();
+		return this.databaseVendorDefinition.isSynonymSupported();
+	}
+	
+	public boolean supportsUserDefinedType() {
+		this.loadDatabaseDefinition();
+		return this.databaseVendorDefinition.isUserDefinedTypeSupported();
+	}
+	
+	public boolean supportsStructuredUserDefinedType() {
+		this.loadDatabaseDefinition();
+		UserDefinedTypeDefinition udtDefinition = this.databaseVendorDefinition.getUdtDefinition();
+		if ( (udtDefinition != null) && this.supportsUserDefinedType() ) {
+			return udtDefinition.isStructuredTypeSupported();
+		}
+		else {
+			return false;
+		}
+	}
+	
+	public boolean supportsDistinctUserDefinedType() {
+		this.loadDatabaseDefinition();
+		UserDefinedTypeDefinition udtDefinition = this.databaseVendorDefinition.getUdtDefinition();
+		if ( (udtDefinition != null) && this.supportsUserDefinedType() ) {
+			return udtDefinition.isDistinctTypeSupported();
+		}
+		else {
+			return false;
+		}
+	}
+	
+	public boolean supportsConstructedDataType() {
+	    this.loadDatabaseDefinition();
+	    return this.databaseVendorDefinition.isUserDefinedTypeSupported();
+	}
+	    
+	public boolean supportsArrayDataType() {
+	    this.loadDatabaseDefinition();
+	    ConstructedDataTypeDefinition constructedDataTypeDefinition = this.databaseVendorDefinition.getConstructedDataTypeDefinition();
+	    if ( (constructedDataTypeDefinition != null) && this.supportsConstructedDataType() ) {
+	        return constructedDataTypeDefinition.isArrayDatatypeSupported();
+	    }
+	    else {
+	        return false;
+	    }
+	}
+	    
+	public boolean supportsMultiSetDataType() {
+	    this.loadDatabaseDefinition();
+	    ConstructedDataTypeDefinition constructedDataTypeDefinition = this.databaseVendorDefinition.getConstructedDataTypeDefinition();
+	    if ( (constructedDataTypeDefinition != null) && this.supportsConstructedDataType() ) {
+	        return constructedDataTypeDefinition.isMultisetDatatypeSupported();
+	    }
+	    else {
+	        return false;
+	    }
+	}
+	    
+	public boolean supportsRowDataType() {
+	    this.loadDatabaseDefinition();
+	    ConstructedDataTypeDefinition constructedDataTypeDefinition = this.databaseVendorDefinition.getConstructedDataTypeDefinition();
+	    if ( (constructedDataTypeDefinition != null) && this.supportsConstructedDataType() ) {
+	        return constructedDataTypeDefinition.isRowDatatypeSupported();
+	    }
+	    else {
+	        return false;
+	    }
+	}
+	    
+	public boolean supportsReferenceDataType() {
+	    this.loadDatabaseDefinition();
+	    ConstructedDataTypeDefinition constructedDataTypeDefinition = this.databaseVendorDefinition.getConstructedDataTypeDefinition();
+	    if ( (constructedDataTypeDefinition != null) && this.supportsConstructedDataType() ) {
+	        return constructedDataTypeDefinition.isReferenceDatatypeSupported();
+	    }
+	    else {
+	        return false;
+	    }
+	}
+
+	public boolean supportsCursorDataType() {
+	    this.loadDatabaseDefinition();
+	    ConstructedDataTypeDefinition constructedDataTypeDefinition = this.databaseVendorDefinition.getConstructedDataTypeDefinition();
+	    if ( (constructedDataTypeDefinition != null) && this.supportsConstructedDataType() ) {
+	        return constructedDataTypeDefinition.isCursorDatatypeSupported();
+	    }
+	    else {
+	        return false;
+	    }
+	}
+	
+	public boolean supportsIdentityColumns() {
+		this.loadDatabaseDefinition();
+		ColumnDefinition columnDefinition = this.databaseVendorDefinition.getColumnDefinition();
+		if (columnDefinition != null) {
+			return columnDefinition.isIdentitySupported();
+		}
+		else {
+			return false;
+		}
+	}
+	
+	public boolean supportsComputedColumns() {
+		this.loadDatabaseDefinition();
+		ColumnDefinition columnDefinition = this.databaseVendorDefinition.getColumnDefinition();
+		if (columnDefinition != null) {
+			return columnDefinition.isComputedSupported();
+		}
+		else {
+			return true;
+		}
+	}
+	
+	public boolean supportsDeferrableConstraints() {
+		this.loadDatabaseDefinition();
+		ConstraintDefinition constraintDefinition = this.databaseVendorDefinition.getConstraintDefinition();
+		if (constraintDefinition != null) {
+			return constraintDefinition.isDeferrableConstraintSupported();
+		}
+		else {
+			return false;
+		}
+	}
+	
+	public boolean supportsInformationalConstraints() {
+		this.loadDatabaseDefinition();
+		ConstraintDefinition constraintDefinition = this.databaseVendorDefinition.getConstraintDefinition();
+		if (constraintDefinition != null) {
+			return constraintDefinition.isInformationalConstraintSupported();
+		}
+		else {
+			return false;
+		}
+	}
+	
+	public boolean supportsSequence() {
+		this.loadDatabaseDefinition();
+		return this.databaseVendorDefinition.isSequenceSupported();
+	}
+	
+	public boolean supportsMQT() {
+		this.loadDatabaseDefinition();
+		return this.databaseVendorDefinition.isMQTSupported();
+	}
+	
+	public boolean supportsMQTIndex() {
+		this.loadDatabaseDefinition();
+		return this.databaseVendorDefinition.isMQTIndexSupported();
+	}
+	
+	public boolean supportsClusteredIndexes() {
+		this.loadDatabaseDefinition();
+		IndexDefinition indexDefinition = this.databaseVendorDefinition.getIndexDefinition();
+		if (indexDefinition != null) {
+			return indexDefinition.isClusteringSupported();
+		}
+		else {
+			return false;
+		}
+	}
+	
+	public boolean isUniqueKeyNullable() {
+		this.loadDatabaseDefinition();
+		ConstraintDefinition constraintDefinition = this.databaseVendorDefinition.getConstraintDefinition();
+		if (constraintDefinition != null) {
+			return constraintDefinition.isUniqueKeyNullable();
+		}
+		else {
+			return false;
+		}
+	}
+	
+	public List getParentDeleteDRIRules() {
+		this.loadDatabaseDefinition();
+		ConstraintDefinition constraintDefinition = this.databaseVendorDefinition.getConstraintDefinition();
+		if (constraintDefinition != null) {
+			return constraintDefinition.getParentDeleteDRIRuleType();
+		}
+		else {
+			return new Vector();
+		}
+	}
+	
+	public List  getParentUpdateDRIRules() {
+		this.loadDatabaseDefinition();
+		ConstraintDefinition constraintDefinition = this.databaseVendorDefinition.getConstraintDefinition();
+		if (constraintDefinition != null) {
+			return constraintDefinition.getParentUpdateDRIRuleType();
+		}
+		else {
+			return new Vector();
+		}
+	}
+	
+	public boolean supportsConstraints() {
+		this.loadDatabaseDefinition();
+		return this.databaseVendorDefinition.isConstraintsSupported();
+	}
+	
+	public int queryMaxCommentLength() {
+		this.loadDatabaseDefinition();
+		return this.databaseVendorDefinition.getMaximumCommentLength();
+	}
+	
+	public int queryMaxIdentifierLength() {
+		this.loadDatabaseDefinition();
+		int len =  this.databaseVendorDefinition.getMaximumIdentifierLength();
+		if(len == 0) len = 128;
+		return len;
+	}
+	
+	public int getDatabaseMaximumIdentifierLength() {
+		this.loadDatabaseDefinition();
+		int len =  this.databaseVendorDefinition.getMaximumIdentifierLength();
+		if(len == 0) len = 128;
+		return len;
+	}
+	
+	public int getSchemaMaximumIdentifierLength() {
+		this.loadDatabaseDefinition();
+		SchemaDefinition schemaDefinition = this.databaseVendorDefinition.getSchemaDefinition();
+		if (schemaDefinition != null) {
+			return schemaDefinition.getMaximumIdentifierLength();
+		}
+		else {
+			return 0;
+		}
+	}
+	
+	public int getTableMaximumIdentifierLength() {
+		this.loadDatabaseDefinition();
+		TableDefinition tableDefinition = this.databaseVendorDefinition.getTableDefinition();
+		if (tableDefinition != null) {
+			return tableDefinition.getMaximumIdentifierLength();
+		}
+		else {
+			return 0;
+		}
+	}
+	
+	public int getViewMaximumIdentifierLength() {
+		this.loadDatabaseDefinition();
+		ViewDefinition viewDefinition = this.databaseVendorDefinition.getViewDefinition();
+		if (viewDefinition != null) {
+			return viewDefinition.getMaximumIdentifierLength();
+		}
+		else {
+			return 0;
+		}
+	}
+	
+	public int getColumnMaximumIdentifierLength() {
+		this.loadDatabaseDefinition();
+		ColumnDefinition columnDefinition = this.databaseVendorDefinition.getColumnDefinition();
+		if (columnDefinition != null) {
+			return columnDefinition.getMaximumIdentifierLength();
+		}
+		else {
+			return 0;
+		}
+	}
+	
+	public int getTriggerMaximumIdentifierLength() {
+		this.loadDatabaseDefinition();
+		TriggerDefinition triggerDefinition = this.databaseVendorDefinition.getTriggerDefinition();
+		if (triggerDefinition != null) {
+			return triggerDefinition.getMaximumIdentifierLength();
+		}
+		else {
+			return 0;
+		}
+	}
+	
+	public int getPrimarykeyIdentifierLength() {
+		this.loadDatabaseDefinition();
+		ConstraintDefinition constraintDefinition = this.databaseVendorDefinition.getConstraintDefinition();
+		if (constraintDefinition != null) {
+			return constraintDefinition.getMaximumPrimaryKeyIdentifierLength();
+		}
+		else {
+			return 0;
+		}
+	}
+	
+	public int getForeignKeyMaximumIdentifierLength() {
+		this.loadDatabaseDefinition();
+		ConstraintDefinition constraintDefinition = this.databaseVendorDefinition.getConstraintDefinition();
+		if (constraintDefinition != null) {
+			return constraintDefinition.getMaximumForeignKeyIdentifierLength();
+		}
+		else {
+			return 0;
+		}
+	}
+	
+	public int getCheckConstraintMaximumIdentifierLength() {
+		this.loadDatabaseDefinition();
+		ConstraintDefinition constraintDefinition = this.databaseVendorDefinition.getConstraintDefinition();
+		if (constraintDefinition != null) {
+			return constraintDefinition.getMaximumCheckConstraintIdentifierLength();
+		}
+		else {
+			return 0;
+		}
+	}
+	
+	public int getNicknameMaximumIdentifierLength() {
+		this.loadDatabaseDefinition();
+		NicknameDefinition nicknameDefinition = this.databaseVendorDefinition.getNicknameDefinition();
+		if (nicknameDefinition != null) {
+			return nicknameDefinition.getMaximumIdentifierLength();
+		}
+		else {
+			return 0;
+		}
+	}
+	
+	public int getUserDefinedTypeMaximumIdentifierLength() {
+		this.loadDatabaseDefinition();
+		UserDefinedTypeDefinition udtDefinition = this.databaseVendorDefinition.getUdtDefinition();
+		if (udtDefinition != null) {
+			return udtDefinition.getMaximumIdentifierLength();
+		}
+		else {
+			return 0;
+		}
+	}
+	
+	public int getTablespaceMaximumIdentifierLength() {
+		this.loadDatabaseDefinition();
+		TableSpaceDefinition tablespaceDefinition = this.databaseVendorDefinition.getTableSpaceDefinition();
+		if (tablespaceDefinition != null) {
+			return tablespaceDefinition.getMaximumIdentifierLength();
+		}
+		else {
+			return 0;
+		}
+	}
+	
+	public int queryMaxCheckExpression() {
+		this.loadDatabaseDefinition();
+		ConstraintDefinition constraintDefinition = this.databaseVendorDefinition.getConstraintDefinition();
+		if (constraintDefinition != null) {
+			return constraintDefinition.getMaximumCheckExpressionLength();
+		}
+		else {
+			return 0;
+		}
+	}
+	
+	public int queryTriggerMaxReferencePartLength() {
+		this.loadDatabaseDefinition();
+		TriggerDefinition triggerDefinition = this.databaseVendorDefinition.getTriggerDefinition();
+		if (triggerDefinition != null) {
+			return triggerDefinition.getMaximumReferencePartLength();
+		}
+		else {
+			return 0;
+		}
+	}
+	
+	public int queryTriggerMaxActionBodyLength() {
+		this.loadDatabaseDefinition();
+		TriggerDefinition triggerDefinition = this.databaseVendorDefinition.getTriggerDefinition();
+		if (triggerDefinition != null) {
+			return triggerDefinition.getMaximumActionBodyLength();
+		}
+		else {
+			return 0;
+		}
+	}
+	
+	public int queryStoredProcedureMaxActionBodyLength() {
+		this.loadDatabaseDefinition();
+		StoredProcedureDefinition storedProcedureDefinition = this.databaseVendorDefinition.getStoredProcedureDefinition();
+		if (storedProcedureDefinition != null) {
+			return storedProcedureDefinition.getMaximumActionBodyLength();
+		}
+		else {
+			return 0;
+		}
+	}
+	
+	public boolean supportsStoredProcedureNullInputAction() {
+		this.loadDatabaseDefinition();
+		StoredProcedureDefinition storedProcedureDefinition = this.databaseVendorDefinition.getStoredProcedureDefinition();
+		if (storedProcedureDefinition != null) {
+			return storedProcedureDefinition.isNullInputActionSupported();
+		}
+		else {
+			return false;
+		}
+	}
+		
+	public boolean supportsTriggers() {
+		this.loadDatabaseDefinition();
+		return this.databaseVendorDefinition.isTriggerSupported();
+	}
+	
+	public boolean supportsTriggerTypes() {
+		this.loadDatabaseDefinition();
+		TriggerDefinition triggerDefinition = this.databaseVendorDefinition.getTriggerDefinition();
+		if (triggerDefinition != null) {
+			return triggerDefinition.isTypeSupported();
+		}
+		else {
+			return false;
+		}
+	}
+	
+	public boolean supportsInsteadOfTrigger() {
+		this.loadDatabaseDefinition();
+		TriggerDefinition triggerDefinition = this.databaseVendorDefinition.getTriggerDefinition();
+		if (triggerDefinition != null) {
+			return triggerDefinition.isInsteadOfTriggerSupported();
+		}
+		else {
+			return false;
+		}
+	}
+	
+	public boolean supportsPerColumnUpdateTrigger() {
+		this.loadDatabaseDefinition();
+		TriggerDefinition triggerDefinition = this.databaseVendorDefinition.getTriggerDefinition();
+		if (triggerDefinition != null) {
+			return triggerDefinition.isPerColumnUpdateTriggerSupported();
+		}
+		else {
+			return false;
+		}
+	}
+	
+	public boolean supportsTriggerReferencesClause() {
+		this.loadDatabaseDefinition();
+		TriggerDefinition triggerDefinition = this.databaseVendorDefinition.getTriggerDefinition();
+		if (triggerDefinition != null) {
+			return triggerDefinition.isReferencesClauseSupported();
+		}
+		else {
+			return false;
+		}
+	}
+	
+	public boolean supportsRowTriggerReference() {
+		this.loadDatabaseDefinition();
+		TriggerDefinition triggerDefinition = this.databaseVendorDefinition.getTriggerDefinition();
+		if (triggerDefinition != null) {
+			return triggerDefinition.isRowTriggerReferenceSupported();
+		}
+		else {
+			return false;
+		}
+	}
+	
+	public boolean supportsTableTriggerReference() {
+		this.loadDatabaseDefinition();
+		TriggerDefinition triggerDefinition = this.databaseVendorDefinition.getTriggerDefinition();
+		if (triggerDefinition != null) {
+			return triggerDefinition.isTableTriggerReferenceSupported();
+		}
+		else {
+			return false;
+		}
+	}
+	
+	public boolean supportTriggerWhenClause() {
+		this.loadDatabaseDefinition();
+		TriggerDefinition triggerDefinition = this.databaseVendorDefinition.getTriggerDefinition();
+		if (triggerDefinition != null) {
+			return triggerDefinition.isWhenClauseSupported();
+		}
+		else {
+			return true;
+		}
+	}
+	
+	public boolean supportsTriggerGranularity() {
+		this.loadDatabaseDefinition();
+		TriggerDefinition triggerDefinition = this.databaseVendorDefinition.getTriggerDefinition();
+		if (triggerDefinition != null) {
+			return triggerDefinition.isGranularitySupported();
+		}
+		else {
+			return false;
+		}
+	}
+	
+	public boolean supportsSnapshotViews() {
+		this.loadDatabaseDefinition();
+		return this.databaseVendorDefinition.isSnapshotViewSupported();
+	}
+	
+	public boolean supportsViewTriggers() {
+		this.loadDatabaseDefinition();
+		return this.databaseVendorDefinition.isViewTriggerSupported();	
+	}
+	
+	public boolean supportsViewIndex() {
+		this.loadDatabaseDefinition();
+		ViewDefinition viewDefinition = this.databaseVendorDefinition.getViewDefinition();
+		if (viewDefinition != null) {
+			return viewDefinition.isIndexSupported();
+		}
+		else {
+			return false;
+		}	
+	}
+	
+	public boolean supportsQuotedDML() {
+		this.loadDatabaseDefinition();
+		return this.databaseVendorDefinition.isQuotedDMLSupported();	
+	}
+	
+	public boolean supportsQuotedDDL() {
+		this.loadDatabaseDefinition();
+		return this.databaseVendorDefinition.isQuotedDDLSupported();	
+	}
+	
+	public String getIdentifierQuoteString() {
+		this.loadDatabaseDefinition();
+		QueryDefinition queryDefinition = this.databaseVendorDefinition.getQueryDefinition();
+		if (queryDefinition != null) {
+			return queryDefinition.getIdentifierQuoteString();
+		}
+		else {
+			return ""; //$NON-NLS-1$
+		}
+	}
+	
+	public String getHostVariableMarker() {
+		this.loadDatabaseDefinition();
+		QueryDefinition queryDefinition = this.databaseVendorDefinition.getQueryDefinition();
+		if (queryDefinition != null) {
+			return queryDefinition.getHostVariableMarker();
+		}
+		else {
+			return ""; //$NON-NLS-1$
+		}
+	}
+	
+	public boolean supportsHostVariableMarker() {
+		this.loadDatabaseDefinition();
+		QueryDefinition queryDefinition = this.databaseVendorDefinition.getQueryDefinition();
+		if (queryDefinition != null) {
+			return queryDefinition.isHostVariableMarkerSupported();
+		}
+		else {
+			return false;
+		}
+	}
+	
+	public boolean supportsCastExpression() {
+		this.loadDatabaseDefinition();
+		QueryDefinition queryDefinition = this.databaseVendorDefinition.getQueryDefinition();
+		if (queryDefinition != null) {
+			return queryDefinition.isCastExpressionSupported();
+		}
+		else {
+			return false;
+		}
+	}
+	
+	public boolean supportsDefaultKeywordForInsertValue() {
+		this.loadDatabaseDefinition();
+		QueryDefinition queryDefinition = this.databaseVendorDefinition.getQueryDefinition();
+		if (queryDefinition != null) {
+			return queryDefinition.isDefaultKeywordForInsertValueSupported();
+		}
+		else {
+			return false;
+		}
+	}
+	
+	public boolean supportsExtendedGrouping() {
+		this.loadDatabaseDefinition();
+		QueryDefinition queryDefinition = this.databaseVendorDefinition.getQueryDefinition();
+		if (queryDefinition != null) {
+			return queryDefinition.isExtendedGroupingSupported();
+		}
+		else {
+			return false;
+		}
+	}
+	
+	public boolean supportsTableAliasInDelete() {
+		this.loadDatabaseDefinition();
+		QueryDefinition queryDefinition = this.databaseVendorDefinition.getQueryDefinition();
+		if (queryDefinition != null) {
+			return queryDefinition.isTableAliasInDeleteSupported();
+		}
+		else {
+			return false;
+		}
+	}
+	
+	public List getProcedureLanguageType() {
+		this.loadDatabaseDefinition();
+		StoredProcedureDefinition storedProcedureDefinition = this.databaseVendorDefinition.getStoredProcedureDefinition();
+		if (storedProcedureDefinition != null) {
+			return storedProcedureDefinition.getLanguageType();
+		}
+		else {
+			return new Vector();
+		}
+	}
+	
+	public List getFunctionLanguageType() {
+		this.loadDatabaseDefinition();
+		StoredProcedureDefinition storedProcedureDefinition = this.databaseVendorDefinition.getStoredProcedureDefinition();
+		if (storedProcedureDefinition != null) {
+			return storedProcedureDefinition.getFunctionLanguageType();
+		}
+		else {
+			return new Vector();
+		}
+	}
+	
+	public boolean supportsSQLStatement() {
+		this.loadDatabaseDefinition();
+		return this.databaseVendorDefinition.isSQLStatementSupported();
+	}
+	
+	public List getSQLKeywords() {
+		this.loadDatabaseDefinition();
+		SQLSyntaxDefinition sqlSyntaxDefinition = this.databaseVendorDefinition.getSQLSyntaxDefinition();
+		if (sqlSyntaxDefinition != null) {
+			return sqlSyntaxDefinition.getKeywords();
+		}
+		else {
+			return new Vector();
+		}
+	}
+	
+	public List getSQLOperators() {
+		this.loadDatabaseDefinition();
+		SQLSyntaxDefinition sqlSyntaxDefinition = this.databaseVendorDefinition.getSQLSyntaxDefinition();
+		if (sqlSyntaxDefinition != null) {
+			return sqlSyntaxDefinition.getOperators();
+		}
+		else {
+			return new Vector();
+		}
+	}
+	
+	public String getSQLTerminationCharacter() {
+		this.loadDatabaseDefinition();
+		SQLSyntaxDefinition sqlSyntaxDefinition = this.databaseVendorDefinition.getSQLSyntaxDefinition();
+		if (sqlSyntaxDefinition != null) {
+			return sqlSyntaxDefinition.getTerminationCharacter();
+		}
+		else {
+			return ";"; //$NON-NLS-1$
+		}
+	}
+	
+	public int getMaximumIdentifierLength() {
+		this.loadDatabaseDefinition();
+		return this.databaseVendorDefinition.getMaximumIdentifierLength();
+	}
+	
+	public int getMaximumIdentifierLength(SQLObject sqlObject) {
+		int maximumLength = 0;
+		
+		this.loadDatabaseDefinition();
+		if (sqlObject instanceof Database) {
+			maximumLength = this.databaseVendorDefinition.getMaximumIdentifierLength();
+		}
+		else if (sqlObject instanceof Schema) {
+			SchemaDefinition schemaDefinition = this.databaseVendorDefinition.getSchemaDefinition();
+			if (schemaDefinition != null) {
+				maximumLength = schemaDefinition.getMaximumIdentifierLength();
+			}
+		}
+		else if (sqlObject instanceof BaseTable) {
+			TableDefinition tableDefinition = this.databaseVendorDefinition.getTableDefinition();
+			if (tableDefinition != null) {
+				maximumLength = tableDefinition.getMaximumIdentifierLength();
+			}
+		}
+		else if (sqlObject instanceof ViewTable) {
+			ViewDefinition viewDefinition = this.databaseVendorDefinition.getViewDefinition();
+			if (viewDefinition != null) {
+				maximumLength = viewDefinition.getMaximumIdentifierLength();
+			}
+		}
+		else if (sqlObject instanceof Column) {
+			ColumnDefinition columnDefinition = this.databaseVendorDefinition.getColumnDefinition();
+			if (columnDefinition != null) {
+				maximumLength = columnDefinition.getMaximumIdentifierLength();
+			}
+		}
+		else if (sqlObject instanceof PrimaryKey) {
+			ConstraintDefinition constraintDefinition = this.databaseVendorDefinition.getConstraintDefinition();
+			if (constraintDefinition != null) {
+				maximumLength = constraintDefinition.getMaximumPrimaryKeyIdentifierLength();
+			}
+		}
+		else if (sqlObject instanceof ForeignKey) {
+			ConstraintDefinition constraintDefinition = this.databaseVendorDefinition.getConstraintDefinition();
+			if (constraintDefinition != null) {
+				maximumLength = constraintDefinition.getMaximumForeignKeyIdentifierLength();
+			}
+		}
+		else if (sqlObject instanceof CheckConstraint) {
+			ConstraintDefinition constraintDefinition = this.databaseVendorDefinition.getConstraintDefinition();
+			if (constraintDefinition != null) {
+				maximumLength = constraintDefinition.getMaximumCheckConstraintIdentifierLength();
+			}
+		}
+		else if (sqlObject instanceof Trigger) {
+			TriggerDefinition triggerDefinition = this.databaseVendorDefinition.getTriggerDefinition();
+			if (triggerDefinition != null) {
+				maximumLength = triggerDefinition.getMaximumIdentifierLength();
+			}
+		}
+		else if (sqlObject instanceof UserDefinedType) {
+			UserDefinedTypeDefinition udtDefinition = this.databaseVendorDefinition.getUdtDefinition();
+			if (udtDefinition != null) {
+				maximumLength = udtDefinition.getMaximumIdentifierLength();
+			}
+		}
+		else if (sqlObject instanceof Procedure) {
+			StoredProcedureDefinition storedProcedureDefinition = this.databaseVendorDefinition.getStoredProcedureDefinition();
+			if (storedProcedureDefinition != null) {
+				maximumLength = storedProcedureDefinition.getMaximumIdentifierLength();
+			}
+		}
+		else if (sqlObject instanceof Index) {
+			IndexDefinition indexDefinition = this.databaseVendorDefinition.getIndexDefinition();
+			if (indexDefinition != null) {
+				maximumLength = indexDefinition.getMaximumIdentifierLength();
+			}
+		}
+		else {
+			if (this.getMetaDataExtension() != null) {
+				maximumLength = this.getMetaDataExtension().getMaximumIdentifierLength(sqlObject);
+			}
+		}
+		
+		return maximumLength;
+	}
+	
+	public boolean isSQLKeyword(String word) {
+		this.loadDatabaseDefinition();
+		SQLSyntaxDefinition sqlSyntaxDefinition = this.databaseVendorDefinition.getSQLSyntaxDefinition();
+		if (sqlSyntaxDefinition != null) {
+			return sqlSyntaxDefinition.getKeywords().contains(word);
+		}
+		else {
+			return false;
+		}
+	}
+	
+	public boolean isSQLOperator(String word) {
+		this.loadDatabaseDefinition();
+		SQLSyntaxDefinition sqlSyntaxDefinition = this.databaseVendorDefinition.getSQLSyntaxDefinition();
+		if (sqlSyntaxDefinition != null) {
+			return sqlSyntaxDefinition.getOperators().contains(word);
+		}
+		else {
+			return false;
+		}
+	}
+	
+	public boolean supportsNicknames() {
+		this.loadDatabaseDefinition();
+		return this.databaseVendorDefinition.isNicknameSupported();
+	}
+	
+	public boolean supportsNicknameConstraints() {
+		this.loadDatabaseDefinition();
+		NicknameDefinition nicknameDefinition = this.databaseVendorDefinition.getNicknameDefinition();
+		if (nicknameDefinition != null) {
+			return nicknameDefinition.isConstraintSupported();
+		}
+		else {
+			return false;
+		}
+	}
+	
+	public boolean supportsNicknameIndex() {
+		this.loadDatabaseDefinition();
+		NicknameDefinition nicknameDefinition = this.databaseVendorDefinition.getNicknameDefinition();
+		if (nicknameDefinition != null) {
+			return nicknameDefinition.isIndexSupported();
+		}
+		else {
+			return false;
+		}
+	}
+	
+	public boolean supportsXML()
+	{
+		this.loadDatabaseDefinition();
+		return this.databaseVendorDefinition.isXmlSupported();	
+	}
+	
+	public boolean supportsEvents() {
+		this.loadDatabaseDefinition();
+		return this.databaseVendorDefinition.isEventSupported();
+	}
+		
+	public boolean supportsSQLUDFs() {
+		this.loadDatabaseDefinition();
+		return this.databaseVendorDefinition.isSqlUDFSupported();
+	}
+	
+	public boolean supportsUDF() {
+	    this.loadDatabaseDefinition();
+	    return this.databaseVendorDefinition.isUDFSupported();
+	}
+		
+	public boolean supportsStoredProcedures() {
+		this.loadDatabaseDefinition();
+		return this.databaseVendorDefinition.isStoredProcedureSupported();
+	}
+		
+	public DebuggerDefinition getDebuggerDefinition() {
+		this.loadDatabaseDefinition();
+		return this.databaseVendorDefinition.getDebuggerDefinition();
+	}
+	
+	public boolean supportsPackage() {
+		this.loadDatabaseDefinition();
+		return this.databaseVendorDefinition.isPackageSupported();
+	}
+	
+	public EClass getMetaClass(String metaClassName) {
+		EClass eClass = null;
+		
+		eClass = (EClass)SQLSchemaPackage.eINSTANCE.getEClassifier(metaClassName);
+		if (eClass == null) {
+			eClass = (EClass)SQLTablesPackage.eINSTANCE.getEClassifier(metaClassName);
+		}
+		if (eClass == null) {
+			eClass = (EClass)SQLRoutinesPackage.eINSTANCE.getEClassifier(metaClassName);
+		}
+		if (eClass == null) {
+			eClass = (EClass)SQLConstraintsPackage.eINSTANCE.getEClassifier(metaClassName);
+		}
+		if (eClass == null) {
+			eClass = (EClass)SQLSchemaPackage.eINSTANCE.getEClassifier(metaClassName);
+		}
+		if (eClass == null) {
+			if (this.getMetaDataExtension() != null) {
+				AbstractMetaDataExtension mde = this.getMetaDataExtension();
+				try {
+					if ( (mde != null) && (mde.getClass().getMethod("getMetaClass", new Class[] {String.class}) != null)) { //$NON-NLS-1$
+						eClass = this.getMetaDataExtension().getMetaClass(metaClassName);
+					}
+				}
+				catch(NoSuchMethodException e) {				
+				}
+			}
+		}
+		
+		return eClass;
+	}
+	
+	public boolean isAuthorizationIdentifierSupported() {
+		this.loadDatabaseDefinition();
+		return this.databaseVendorDefinition.isAuthorizationIdentifierSupported();
+	}
+	
+	public boolean isRoleSupported() {
+		this.loadDatabaseDefinition();
+		return this.databaseVendorDefinition.isRoleSupported();
+	}
+	
+	public boolean isUserSupported() {
+		this.loadDatabaseDefinition();
+		return this.databaseVendorDefinition.isUserSupported();
+	}
+	
+	public boolean isGroupSupported() {
+		this.loadDatabaseDefinition();
+		return this.databaseVendorDefinition.isGroupSupported();
+	}
+	
+	public boolean isRoleAuthorizationSupported() {
+		this.loadDatabaseDefinition();
+		return this.databaseVendorDefinition.isRoleAuthorizationSupported();
+	}
+	
+	public List getPrivilegedElementClasses() {
+		this.loadDatabaseDefinition();
+		
+		this.loadPrivilegeDefinitions();
+		List privilegedElementClasses = new ArrayList();
+		privilegedElementClasses.addAll(this.eClassToPrivilegeDefinitionMap.keySet());
+		
+		return privilegedElementClasses;
+	}
+	
+	public boolean isPrivilegedElementClass(EClass clss) {
+		this.loadDatabaseDefinition();
+		this.loadPrivilegeDefinitions();
+		
+		boolean result = this.eClassToPrivilegeDefinitionMap.keySet().contains(clss);
+		if (result == false) {
+			EClass superClss = this.getSuperMetaClass(clss);
+			result = this.eClassToPrivilegeDefinitionMap.keySet().contains(superClss);
+		}
+		
+		return result;
+	}
+	
+	public List getPrivilegeActions(EClass privilegedElementClass) {
+		this.loadDatabaseDefinition();
+		
+		this.loadPrivilegeDefinitions();
+		List privilegeNames = new ArrayList();
+		List privilegeDefinitions = (List)this.eClassToPrivilegeDefinitionMap.get(privilegedElementClass);
+		if ( (privilegeDefinitions == null) || privilegeDefinitions.isEmpty()) {
+			EClass superClss = this.getSuperMetaClass(privilegedElementClass);
+			privilegeDefinitions = (List)this.eClassToPrivilegeDefinitionMap.get(superClss);
+		}
+		if (privilegeDefinitions != null) {
+			Iterator privilegeDefinitionsIter = privilegeDefinitions.iterator();
+			while(privilegeDefinitionsIter.hasNext()) {
+				PrivilegeDefinition privilegeDefinition = (PrivilegeDefinition)privilegeDefinitionsIter.next();
+				privilegeNames.add(privilegeDefinition.getName());
+			}
+		}
+		
+		return privilegeNames;
+	}
+	
+	public List getActionElementClasses(EClass privilegedElementClass, String action) {
+		this.loadDatabaseDefinition();
+		
+		this.loadPrivilegeDefinitions();
+		List actionElementClasses = new ArrayList();
+		List privilegeDefinitions = (List)this.eClassToPrivilegeDefinitionMap.get(privilegedElementClass);
+		if ( (privilegeDefinitions == null) || privilegeDefinitions.isEmpty()) {
+			EClass superClss = this.getSuperMetaClass(privilegedElementClass);
+			privilegeDefinitions = (List)this.eClassToPrivilegeDefinitionMap.get(superClss);
+		}
+		if (privilegeDefinitions != null) {
+			Iterator privilegeDefinitionsIter = privilegeDefinitions.iterator();
+			while(privilegeDefinitionsIter.hasNext()) {
+				PrivilegeDefinition privilegeDefinition = (PrivilegeDefinition)privilegeDefinitionsIter.next();
+				Iterator actionClassDefinitionsIter = privilegeDefinition.getActionElementDefinitions().iterator();
+				if ( privilegeDefinition.getName().equalsIgnoreCase(action) && !privilegeDefinition.getActionElementDefinitions().isEmpty() ) {
+					while(actionClassDefinitionsIter.hasNext()) {
+						PrivilegedElementDefinition privilegedElementDefinition = (PrivilegedElementDefinition)actionClassDefinitionsIter.next();
+						String metaClassName = privilegedElementDefinition.getName();
+						if ( (metaClassName != null) && (metaClassName.length() > 0) ) {
+							EClass eClass = this.getMetaClass(metaClassName);
+							if (eClass != null) {
+								actionElementClasses.add(eClass);
+							}
+						}
+					}
+				}
+			}
+		}
+		
+		return actionElementClasses;
+	}
+	
+	private EClass getSuperMetaClass(EClass eClass) {
+		if (eClass != null) {
+			Iterator eClassIterator = this.eClassToPrivilegeDefinitionMap.keySet().iterator();
+			while(eClassIterator.hasNext()) {
+				EClass currentEClass = (EClass)eClassIterator.next();
+				if (currentEClass.isSuperTypeOf(eClass)) {
+					return currentEClass;
+				}
+			}
+		}
+		
+		return eClass;
+	}
+	
+	private void loadPrivilegeDefinitions() {
+		if (this.eClassToPrivilegeDefinitionMap == null) {
+			this.eClassToPrivilegeDefinitionMap = new HashMap();
+		}
+		List privilegedElementDefinitions = this.databaseVendorDefinition.getPrivilegedElementDefinitions();
+		if (privilegedElementDefinitions != null) {
+			Iterator privilegedElementIter = privilegedElementDefinitions.iterator();
+			while(privilegedElementIter.hasNext()) {
+				PrivilegedElementDefinition privilegedElementDefinition = (PrivilegedElementDefinition)privilegedElementIter.next();
+				String metaClassName = privilegedElementDefinition.getName();
+				if ( (metaClassName != null) && (metaClassName.length() > 0) ) {
+						EClass eClass = this.getMetaClass(metaClassName);
+						if (eClass != null) {
+							Iterator privilegeDefinitionIter = privilegedElementDefinition.getPrivilegeDefinitions().iterator();
+							List privilegesDefinitions = new ArrayList();
+							while(privilegeDefinitionIter.hasNext()) {
+								privilegesDefinitions.add((PrivilegeDefinition)privilegeDefinitionIter.next());
+							}
+							this.eClassToPrivilegeDefinitionMap.put(eClass, privilegesDefinitions);
+						}
+				}
+			}
+		}
+	}
+	
+	private AbstractMetaDataExtension getMetaDataExtension() {
+		if(this.metaDataExtension == null) {
+			IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+			IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("org.eclipse.datatools.connectivity.sqm.core", "metaDataExtension"); //$NON-NLS-1$ //$NON-NLS-2$
+			IExtension[] extensions = extensionPoint.getExtensions();
+			for(int i=0; i<extensions.length; ++i) {
+				IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+				for(int j=0; j<configElements.length; ++j) {
+					if(configElements[j].getName().equals("metaDataExtension")) { //$NON-NLS-1$
+						String product = configElements[j].getAttribute("product"); //$NON-NLS-1$
+						if(!product.equals(this.product)) continue;
+						String version = configElements[j].getAttribute("version"); //$NON-NLS-1$
+						if(!version.equals(this.version)) continue;
+						try {
+							this.metaDataExtension = (AbstractMetaDataExtension) configElements[j].createExecutableExtension("class"); //$NON-NLS-1$
+						}
+						catch(CoreException e) {
+						    IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getSymbolicName(), IStatus.ERROR,
+						            "The error was detected when creating the meta data extension for " + product + " " + version, e); //$NON-NLS-1$ //$NON-NLS-2$
+							RDBCorePlugin.getDefault().getLog().log(status);
+						}
+						break;
+					}
+				}
+			}
+		}
+		
+		return this.metaDataExtension;
+	}
+	
+	private DatabaseVendorDefinition loadDatabaseDefinition() {
+		if(this.databaseVendorDefinition == null) {
+		    //double check
+		    synchronized(this)
+		    {
+		        if(this.databaseVendorDefinition == null)
+		        {
+		    
+        			// Load specified databaseType on demand
+        			try {
+        				URI uri = URI.createURI(modelURL.toString());
+        				Resource doc = new XMIResourceImpl(uri);
+        				doc.load(null);
+        				EList resourceContents = doc.getContents();
+        				Iterator i = resourceContents.iterator();
+        				while (i.hasNext()) {
+        					Object o = i.next();
+        					if (o instanceof DatabaseVendorDefinition) {
+        						this.databaseVendorDefinition = (DatabaseVendorDefinition)o;
+        						if (this.nameToPrimitiveDataTypeDefinitionMap == null) {
+        							this.nameToPrimitiveDataTypeDefinitionMap = new HashMap();
+        						}
+        						if (this.nameAndJDBCEnumToPrimitiveDataTypeDefinitionMap == null) {
+        							this.nameAndJDBCEnumToPrimitiveDataTypeDefinitionMap = new HashMap();
+        						}
+        						Iterator j = this.databaseVendorDefinition.getPredefinedDataTypeDefinitions().iterator();
+        						while (j.hasNext()) {
+        							Object p = j.next();
+        							if (p instanceof PredefinedDataTypeDefinition) {
+        								PredefinedDataTypeDefinition pd = (PredefinedDataTypeDefinition)p;
+        								Iterator k = pd.getName().iterator();
+        								while (k.hasNext()) {
+        									Object q = k.next();
+        									if (q instanceof String) {
+        										String name = (String)q;
+        										if (this.nameToPrimitiveDataTypeDefinitionMap.get(name) == null) {
+        											this.nameToPrimitiveDataTypeDefinitionMap.put(name, pd);
+        										}
+        										if (this.nameAndJDBCEnumToPrimitiveDataTypeDefinitionMap.get(name + "_" + pd.getJdbcEnumType()) == null ) { //$NON-NLS-1$
+        											this.nameAndJDBCEnumToPrimitiveDataTypeDefinitionMap.put(name + "_" + pd.getJdbcEnumType(), pd); //$NON-NLS-1$
+        										} 
+        									}
+        								}
+        							}
+        						}
+                                StoredProcedureDefinition spdef = this.databaseVendorDefinition.getStoredProcedureDefinition();
+                                if (spdef != null) {
+                                    Iterator m = spdef.getPredefinedDataTypeDefinitions().iterator();
+                                    while (m.hasNext()) {
+                                        Object p = m.next();
+                                        if (p instanceof PredefinedDataTypeDefinition) {
+                                            PredefinedDataTypeDefinition pd = (PredefinedDataTypeDefinition)p;
+                                            Iterator k = pd.getName().iterator();
+                                            while (k.hasNext()) {
+                                                Object q = k.next();
+                                                if (q instanceof String) {
+                                                    String name = (String)q;
+                                                    if (this.nameToPrimitiveDataTypeDefinitionMap.get(name) == null) {
+                                                        this.nameToPrimitiveDataTypeDefinitionMap.put(name, pd);
+                                                    } 
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+        					}
+        				}
+        			}	
+        			catch (Exception e) {
+        				System.out.println("Exception caught while loading database vendor definition document: " + e); //$NON-NLS-1$
+        			}
+        		}
+		    }
+		}
+		
+		return this.databaseVendorDefinition;
+	}
+	
+	public String getLenghtSemantic(CharacterStringDataType characterStringDataType) {
+		EAnnotation eAnnotation = characterStringDataType.getEAnnotation(LENGTH_SEMANTIC);
+		if (eAnnotation != null) {
+			String detail = (String) eAnnotation.getDetails().get(LENGTH_SEMANTIC_TYPE);
+			if (detail != null) return detail;
+		}
+		return null;
+	}
+	
+	public void setLenghtSemantic(CharacterStringDataType characterStringDataType, String value) {
+		EAnnotation eAnnotation = characterStringDataType.addEAnnotation(LENGTH_SEMANTIC);
+		if (eAnnotation != null) {
+			characterStringDataType.addEAnnotationDetail(eAnnotation, LENGTH_SEMANTIC_TYPE, value);
+		}
+	}
+	
+	public boolean supportsViewCheckOption() {
+		this.loadDatabaseDefinition();
+		ViewDefinition viewDefinition = this.databaseVendorDefinition.getViewDefinition();
+		if (viewDefinition != null) {
+			return viewDefinition.isCheckOptionSupported();
+		}
+		else {
+			return false;
+		}
+	}
+	
+	public boolean supportsViewCheckOptionLevels() {
+		this.loadDatabaseDefinition();
+		ViewDefinition viewDefinition = this.databaseVendorDefinition.getViewDefinition();
+		if (viewDefinition != null) {
+			return viewDefinition.isCheckOptionLevelsSupported();
+		}
+		else {
+			return false;
+		}
+	}
+	
+	public List getViewCheckOptionLevels() {
+		List checkOptionLevels = new ArrayList();
+		if (this.supportsViewCheckOption()) {
+			if (this.supportsViewCheckOptionLevels()) {
+				checkOptionLevels.add(CheckType.NONE_LITERAL);
+				checkOptionLevels.add(CheckType.CASCADED_LITERAL);
+				checkOptionLevels.add(CheckType.LOCAL_LITERAL);
+			}
+			else {
+				checkOptionLevels.add(CheckType.NONE_LITERAL);
+			}
+		}
+		
+		return checkOptionLevels;
+	}
+	
+	private String product;
+	private String version;
+	private String description;
+	private String productDisplayString;
+	private String versionDisplayString;
+	private URL modelURL;
+	private DatabaseVendorDefinition databaseVendorDefinition = null;
+	private HashMap nameToPrimitiveDataTypeDefinitionMap = null;
+	private HashMap nameAndJDBCEnumToPrimitiveDataTypeDefinitionMap = null;
+	private HashMap eClassToPrivilegeDefinitionMap = null;
+	
+	private DataModelElementFactory factory = null;
+	private DDLParser parser = null;
+	private DDLGenerator ddlGenerator = null;
+	private DeltaDDLGenerator deltaDdlGenerator = null;
+	private ICatalogProvider catalogProvider = null;
+	private AbstractMetaDataExtension metaDataExtension = null;
+	private static String LENGTH_SEMANTIC = "LENGTH_SEMANTIC";
+	private static String LENGTH_SEMANTIC_TYPE = "LENGTH_SEMANTIC_TYPE";
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/definition/DatabaseDefinitionRegistryImpl.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/definition/DatabaseDefinitionRegistryImpl.java
new file mode 100644
index 0000000..14b8043
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/definition/DatabaseDefinitionRegistryImpl.java
@@ -0,0 +1,242 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Actuate Corporation - added use of default DatabaseRecognizer (BZ 253523),
+ *              plus OSGi stop and restart usage support
+ *     Actuate Corporation - fix for bug 304756
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.definition;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.sql.Connection;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.services.PluginResourceLocator;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinitionRegistry;
+import org.eclipse.datatools.connectivity.sqm.core.definition.IDatabaseRecognizer;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.emf.common.util.URI;
+
+public final class DatabaseDefinitionRegistryImpl implements DatabaseDefinitionRegistry {
+	public static DatabaseDefinitionRegistry INSTANCE = new DatabaseDefinitionRegistryImpl();
+	private static final String uriPlatformScheme = "platform:/plugin"; //$NON-NLS-1$
+	
+	public static DatabaseDefinitionRegistry getInstance() {
+	    if( INSTANCE == null )
+	    {
+	        synchronized( DatabaseDefinitionRegistryImpl.class )
+	        {
+	            if( INSTANCE == null )
+	                INSTANCE = new DatabaseDefinitionRegistryImpl();
+	        }
+	    }
+	    return INSTANCE;
+	}
+	
+	public static void releaseInstance() {
+	    if( INSTANCE == null )
+	        return;    // nothing to release
+        
+	    synchronized( DatabaseDefinitionRegistryImpl.class )
+        {
+            INSTANCE = null;
+        }
+	}
+
+    private Collection recognizers = null;
+    private Map products = new TreeMap();
+    private Map connectibleProductVersions = new TreeMap();
+	
+	public Iterator getProducts() {
+		return this.products.keySet().iterator();
+	}
+	
+	public Iterator getConnectibleProducts() {
+		return this.connectibleProductVersions.keySet().iterator();
+	}
+
+	public Iterator getVersions(String product) {
+		Map versions = (Map) this.products.get(product);
+		if(versions == null) {
+			return new TreeMap().keySet().iterator();
+		}
+		else {
+			return versions.keySet().iterator();
+		}
+	}
+	
+	public Iterator getConnectibleVersions(String product) {
+		Map versions = (Map) this.connectibleProductVersions.get(product);
+		if(versions == null) {
+			return new TreeMap().keySet().iterator();
+		}
+		else {
+			return versions.keySet().iterator();
+		}
+	}
+
+	public DatabaseDefinition getDefinition(Database database) {
+		return this.getDefinition(database.getVendor(), database.getVersion());
+	}
+
+	public DatabaseDefinition getDefinition(String product, String version) {
+	    if (product == null) return null;
+
+		Map versions = (Map) this.products.get(product);
+		if(versions == null) {
+			return null;
+		}
+		else {
+			return (DatabaseDefinition) versions.get(version);
+		}
+	}
+	
+	public DatabaseDefinition recognize(Connection connection) {
+		if(this.recognizers == null) {
+		    synchronized( this ) {
+		        if(this.recognizers == null) 
+		            loadRecognizers();
+		    }
+		}
+		Iterator it = this.recognizers.iterator();
+		while(it.hasNext()) {
+			IDatabaseRecognizer recognizer = (IDatabaseRecognizer) it.next();
+			try {
+				DatabaseDefinition def = recognizer.recognize(connection);
+				if(def != null) return def;
+			}
+			catch(Exception e) {
+			    IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getSymbolicName(), IStatus.ERROR,
+			            "An exception was thrown from database recognizer " + recognizer.getClass().getName(), e); //$NON-NLS-1$
+				RDBCorePlugin.getDefault().getLog().log(status);
+				it.remove();
+			}
+		}
+		return null;
+	}
+
+	private DatabaseDefinitionRegistryImpl() {
+		URL modelURL = null;
+		IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+		IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("org.eclipse.datatools.connectivity.sqm.core", "databaseDefinition"); //$NON-NLS-1$ //$NON-NLS-2$
+		IExtension[] extensions = extensionPoint.getExtensions();
+		for(int i=0; i<extensions.length; ++i) {
+			IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+			for(int j=0; j<configElements.length; ++j) {
+				if(configElements[j].getName().equals("definition")) { //$NON-NLS-1$
+					String product = configElements[j].getAttribute("product"); //$NON-NLS-1$
+					String version = configElements[j].getAttribute("version"); //$NON-NLS-1$
+					String desc = configElements[j].getAttribute("description"); //$NON-NLS-1$					
+					String allowsConnections = configElements[j].getAttribute("allowsConnections"); //$NON-NLS-1$
+					String productDisplayString = configElements[j].getAttribute("productDisplayString"); //$NON-NLS-1$
+					String versionDisplayString = configElements[j].getAttribute("versionDisplayString"); //$NON-NLS-1$
+					String modelLocation = configElements[j].getAttribute("file"); //$NON-NLS-1$
+					if( modelLocation.startsWith(uriPlatformScheme))  { 
+						URI modelURI = URI.createURI(modelLocation);  
+						try {
+							modelURL = new URL(modelURI.toString());
+						} catch (MalformedURLException e) {
+						    IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getSymbolicName(), IStatus.ERROR,
+						            "The error was detected when creating the model url for " + modelLocation + " in "+ product + " " +version, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+						            e);
+							RDBCorePlugin.getDefault().getLog().log(status);
+						}
+					}
+					else {
+					    modelURL = modelLocation == null ? 
+							    null : 
+							    PluginResourceLocator.getPluginEntry( configElements[j], modelLocation );
+					}
+					
+					DatabaseDefinitionImpl definition = new DatabaseDefinitionImpl(product, version, desc, productDisplayString, versionDisplayString, modelURL);
+					
+					if(this.products.containsKey(product)) {
+						((Map) this.products.get(product)).put(version, definition);
+					}
+					else {
+						Map versions = new TreeMap();
+						versions.put(version, definition);
+						this.products.put(product, versions);
+					}
+					
+					if ((allowsConnections == null) || (!allowsConnections.equals("false"))){ //$NON-NLS-1$
+						if(this.connectibleProductVersions.containsKey(product)) {
+							((Map) this.connectibleProductVersions.get(product)).put(version, definition);
+						}
+						else {
+							Map versions = new TreeMap();
+							versions.put(version, definition);
+							this.connectibleProductVersions.put(product, versions);
+						}					
+					}
+				}
+			}
+		}
+	}
+
+	private void loadRecognizers() {
+		this.recognizers = new LinkedList();
+		IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+		IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("org.eclipse.datatools.connectivity.sqm.core", "databaseRecognition"); //$NON-NLS-1$ //$NON-NLS-2$
+		IExtension[] extensions = extensionPoint.getExtensions();
+		for(int i=0; i<extensions.length; ++i) {
+			IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+			boolean isDefaultRecognizer = false;
+			for(int j=0; j<configElements.length; ++j) {
+				if(configElements[j].getName().equals("recognizer")) { //$NON-NLS-1$
+					String className = configElements[j].getAttribute("class"); //$NON-NLS-1$
+					try {
+						IDatabaseRecognizer recognizer = (IDatabaseRecognizer) configElements[j].createExecutableExtension("class"); //$NON-NLS-1$
+						this.recognizers.add(recognizer);
+						
+						if( recognizer instanceof ConfigElementDatabaseRecognizer )
+						    isDefaultRecognizer = true;
+						break;     // expects only 1 recognizer element
+					}
+					catch(CoreException e) {
+					    IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getSymbolicName(), IStatus.ERROR,
+					            "The error was detected when creating the database recognizer " + className, e); //$NON-NLS-1$
+						RDBCorePlugin.getDefault().getLog().log(status);
+					}					
+				}
+			}
+			
+			if( isDefaultRecognizer )
+			    continue;    // has already loaded a ConfigElementDatabaseRecognizer for the extension
+
+			// adds the default database recognizer if extension has mapped JDBC product to DatabaseDefinition
+			try {
+			    ConfigElementDatabaseRecognizer defaultRecognizer = new ConfigElementDatabaseRecognizer( extensions[i] );
+			    if( defaultRecognizer.hasJdbcMappings() )
+			        this.recognizers.add( defaultRecognizer );
+            }
+            catch( CoreException ex ) {
+                IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getSymbolicName(), IStatus.ERROR,
+                        "The error was detected when creating default database recognizer.", ex); //$NON-NLS-1$
+                RDBCorePlugin.getDefault().getLog().log(status);
+            }
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/definition/DefaultDataModelElementFactory.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/definition/DefaultDataModelElementFactory.java
new file mode 100644
index 0000000..7a38a96
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/definition/DefaultDataModelElementFactory.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.definition;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+public class DefaultDataModelElementFactory	implements DataModelElementFactory {
+	public static DataModelElementFactory INSTANCE = new DefaultDataModelElementFactory();
+	 
+	public EObject create(EClass metaclass) {
+		return metaclass.getEPackage().getEFactoryInstance().create(metaclass);
+	}
+	
+	protected DefaultDataModelElementFactory() {
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/definition/IDatabaseRecognizer.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/definition/IDatabaseRecognizer.java
new file mode 100644
index 0000000..7c089a8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/definition/IDatabaseRecognizer.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Actuate Corporation - moved interface from internal package
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.definition;
+
+
+public interface IDatabaseRecognizer 
+    extends org.eclipse.datatools.connectivity.sqm.core.definition.IDatabaseRecognizer {
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/l10n/GenericCatalog.properties b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/l10n/GenericCatalog.properties
new file mode 100644
index 0000000..406e5d4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/l10n/GenericCatalog.properties
@@ -0,0 +1,25 @@
+# NLS_MESSAGEFORMAT_VAR          needed to handle quotes correctly
+#
+#/*******************************************************************************
+# * Copyright (c) 2007, 2011 IBM Corporation and others.
+# * All rights reserved. This program and the accompanying materials
+# * are made available under the terms of the Eclipse Public License v1.0
+# * which accompanies this distribution, and is available at
+# * http://www.eclipse.org/legal/epl-v10.html
+# * 
+# * Contributors:
+# *     IBM Corporation - initial API and implementation
+# *     Actuate Corporation - added messages
+# *******************************************************************************/
+
+#FE
+FE_VIEW_HAS_NO_BODY = The view {0} has no SELECT statement
+FE_TRIGGER_ACTION_EMPTY = The trigger {0} action is empty
+FE_PARENT_TABLLE_OR_KEY_DO_NOT_EXIST = The parent table/key referenced by foreign key {0} does not exist
+FE_REFERENCE_CONSTAINT_HAS_NO_KEY = The refernece constraint {0} does not have any key
+FE_INDEX_HAS_NO_MEMBER = The index {0} does not have any member
+FE_ELEMENT_HAS_NO_TYPE = The typed element {0} does not have any type
+#DEFN
+DEFN_MISSING_ATTRIBUTE_VALUES=Required attribute(s) of {0} configuration element are missing value.
+# RDBCorePlugin
+RDBCorePlugin_NO_DEFAULT_WORKSPACE=Unable to determine the default workspace location.  Check your OSGi-less platform configuration of the plugin or datatools workspace path.
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/resources/IDataResource.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/resources/IDataResource.java
new file mode 100644
index 0000000..d96e1e4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/resources/IDataResource.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.resources;
+
+import org.eclipse.emf.ecore.EObject;
+
+public interface IDataResource
+{
+	  public String getID(EObject eObject);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/DDLParser.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/DDLParser.java
new file mode 100644
index 0000000..2204dec
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/DDLParser.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.rte;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+public interface DDLParser {
+	public Database[] parse(String fileName, Database[] existingDBs, IProgressMonitor progressMonitor);
+	public String[] getParserMessages();
+	public boolean isIncrementalSupported();
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/DeltaDDLGenerator.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/DeltaDDLGenerator.java
new file mode 100644
index 0000000..cc5e949
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/DeltaDDLGenerator.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.rte;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.datatools.connectivity.sqm.core.rte.EngineeringOption;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.change.ChangeDescription;
+
+
+public interface DeltaDDLGenerator {
+	public String[] generateDeltaDDL(EObject rootObject, ChangeDescription changeDescription, IProgressMonitor monitor);
+	public EngineeringOption[] getOptions();
+    public EngineeringOptionCategory[] getOptionCategories();
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/EngineeringOptionCategory.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/EngineeringOptionCategory.java
new file mode 100644
index 0000000..3082e31
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/EngineeringOptionCategory.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.datatools.connectivity.sqm.internal.core.rte;
+
+public final class EngineeringOptionCategory {
+	private String name;
+	private String id;
+	private String description;
+	
+	public EngineeringOptionCategory(String id, String name, String desc) {
+		this.name = name;
+		this.id = id;
+		this.description = desc;
+	}
+	
+	public String getDescription() {
+		return description;
+	}
+	
+	public String getId() {
+		return id;
+	}
+	
+	public String getName() {
+		return name;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/EngineeringOptionCategoryID.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/EngineeringOptionCategoryID.java
new file mode 100644
index 0000000..51f5879
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/EngineeringOptionCategoryID.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.rte;
+
+
+public class EngineeringOptionCategoryID {
+	public final static String GENERATE_OPTIONS = "GENERATE_OPTIONS";  //$NON-NLS-1$
+	public final static String GENERATE_ELEMENTS= "GENERATE_ELEMENTS"; //$NON-NLS-1$
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/fe/GenericDdlGeneration.properties b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/fe/GenericDdlGeneration.properties
new file mode 100644
index 0000000..5716cb9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/fe/GenericDdlGeneration.properties
@@ -0,0 +1,41 @@
+GENERATE_FULLY_QUALIFIED_NAME	=	F&ully qualified name
+GENERATE_FULLY_QUALIFIED_NAME_DES	=	Generate fully qualified name
+GENERATE_QUOTED_IDENTIFIER 		= &Quoted identifier
+GENERATE_QUOTED_IDENTIFIER_DES 		= Generate quoted identifier
+GENERATE_DROP_STATEMENTS 		= &DROP statements
+GENERATE_DROP_STATEMENTS_DES 	= Generate DROP statements
+GENERATE_CREATE_STATEMENTS 		= &CREATE statements
+GENERATE_CREATE_STATEMENTS_DES 	= Generate CREATE statements
+GENERATE_COMMENTS 		= C&omments
+GENERATE_COMMENTS_DES 	= Generate comments
+GENERATE_TABLES 		= &Tables
+GENERATE_TABLES_DES 	= Generate tables
+GENERATE_INDEX			=	&Indexes
+GENERATE_INDEX_DES		=	Generate index
+GENERATE_VIEW			=	&Views
+GENERATE_VIEW_DES		=	Generate view
+GENERATE_TIGGER			=	Tri&ggers
+GENERATE_TIGGER_DES		=	Generate trigger
+GENERATE_STOREDPROCEDURE =	Sto&red procedures
+GENERATE_STOREDPROCEDURE_DES =	Generate stored procedures
+GENERATE_FUNCTION 		=	Function&s
+GENERATE_FUNCTION_DES 	=	Generate functions
+GENERATE_SCHEMAS 		= &Schemas
+GENERATE_SCHEMAS_DES 	= Generate schemas
+GENERATE_PK_CONSTRAINTS 	= &Primary key constraint
+GENERATE_PK_CONSTRAINTS_DES 	= Generate primary key constraint
+GENERATE_FK_CONSTRAINTS 		= &Foreign key constraint
+GENERATE_FK_CONSTRAINTS_DES 	= Generate foreign key constraint
+GENERATE_CK_CONSTRAINTS 		= &Check constraint
+GENERATE_CK_CONSTRAINTS_DES 	= Generate check constraint
+GENERATION_OPTIONS = Generation options
+GENERATION_OPTIONS_DES = Options for generation
+ADDITIONAL_ELEMENTS = Additional elements
+ADDITIONAL_ELEMENTS_DES = Generate additional elements
+GENERATE_GENERATE_ASSERTION_DES = Generate assertions
+GENERATE_USER_DEFINED_TYPE = Generate user defined types
+GENERATE_USER_DEFINED_TYPE_DES = Generate user defined types
+
+DELTA_DDL_MONITOR_TASK_LOOKING_FOR_CHANGES= Looking for the changes...
+DELTA_DDL_MONITOR_TASK_ANALYZING_CHANGES= Analyzing the changes...
+DELTA_DDL_MONITOR_TASK_GENERATING_DDL= Generating the DDL...
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/fe/GenericDdlGenerationOptions.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/fe/GenericDdlGenerationOptions.java
new file mode 100644
index 0000000..fadc1ae
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/fe/GenericDdlGenerationOptions.java
@@ -0,0 +1,62 @@
+package org.eclipse.datatools.connectivity.sqm.internal.core.rte.fe;
+
+import java.util.ResourceBundle;
+import java.util.Vector;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.EngineeringOptionID;
+import org.eclipse.datatools.connectivity.sqm.core.rte.EngineeringOption;
+import org.eclipse.datatools.connectivity.sqm.internal.core.rte.EngineeringOptionCategory;
+import org.eclipse.datatools.connectivity.sqm.internal.core.rte.EngineeringOptionCategoryID;
+
+public class GenericDdlGenerationOptions {
+	public final static byte GENERATE_FULLY_QUALIFIED_NAME = 0;
+	public final static byte GENERATE_QUOTED_IDENTIFIER = 1;
+	public final static byte GENERATE_DROP_STATEMENTS = 2;
+	public final static byte GENERATE_CREATE_STATEMENTS = 3;
+	public final static byte GENERATE_TABLES =4;
+	public final static byte GENERATE_INDICES = 5;
+	public final static byte GENERATE_VIEWS = 6;
+	public final static byte GENERATE_TRIGGERS = 7;
+	
+
+	public static EngineeringOption[] createDDLGenerationOptions(EngineeringOptionCategory[] categories) {
+        ResourceBundle resource = ResourceBundle.getBundle("org.eclipse.datatools.connectivity.sqm.internal.core.rte.fe.GenericDdlGeneration"); //$NON-NLS-1$
+
+        EngineeringOptionCategory general_options =null;
+        EngineeringOptionCategory additional_element =null;
+        for (int i = 0; i < categories.length; i++) {
+        	if (categories[i].getId().equals(EngineeringOptionCategoryID.GENERATE_OPTIONS)){
+        		general_options = categories[i];
+        	} else if (categories[i].getId().equals(EngineeringOptionCategoryID.GENERATE_ELEMENTS)){
+        		additional_element = categories[i];
+        	}
+        }
+        
+        Vector optionVec = new Vector();
+        optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_FULLY_QUALIFIED_NAME,resource.getString("GENERATE_FULLY_QUALIFIED_NAME"), resource.getString("GENERATE_FULLY_QUALIFIED_NAME_DES"), false,general_options)); //$NON-NLS-1$ //$NON-NLS-2$
+        optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_QUOTED_IDENTIFIER,resource.getString("GENERATE_QUOTED_IDENTIFIER"), resource.getString("GENERATE_QUOTED_IDENTIFIER_DES"),false,general_options)); //$NON-NLS-1$ //$NON-NLS-2$
+        optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_DROP_STATEMENTS,resource.getString("GENERATE_DROP_STATEMENTS"), resource.getString("GENERATE_DROP_STATEMENTS_DES"),false,general_options)); //$NON-NLS-1$ //$NON-NLS-2$
+        optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_CREATE_STATEMENTS,resource.getString("GENERATE_CREATE_STATEMENTS"), resource.getString("GENERATE_CREATE_STATEMENTS_DES"),true,general_options)); //$NON-NLS-1$ //$NON-NLS-2$
+        optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_TABLES,resource.getString("GENERATE_TABLES"), resource.getString("GENERATE_TABLES_DES"),true,additional_element)); //$NON-NLS-1$ //$NON-NLS-2$
+        optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_INDICES,resource.getString("GENERATE_INDEX"), resource.getString("GENERATE_INDEX_DES"),true,additional_element)); //$NON-NLS-1$ //$NON-NLS-2$
+        optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_VIEWS,resource.getString("GENERATE_VIEW"), resource.getString("GENERATE_VIEW_DES"),true,additional_element)); //$NON-NLS-1$ //$NON-NLS-2$
+        optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_TRIGGERS,resource.getString("GENERATE_TIGGER"), resource.getString("GENERATE_TIGGER_DES"),true,additional_element)); //$NON-NLS-1$ //$NON-NLS-2$
+        
+        EngineeringOption[] options = new EngineeringOption[optionVec.size()];
+        optionVec.copyInto(options);
+		return options;
+    }
+
+	public static EngineeringOptionCategory[] createDDLGenerationOptionCategories() {
+        ResourceBundle resource = ResourceBundle.getBundle("org.eclipse.datatools.connectivity.sqm.internal.core.rte.fe.GenericDdlGeneration"); //$NON-NLS-1$
+
+        Vector categoryVec = new Vector();
+        categoryVec.add(new EngineeringOptionCategory(EngineeringOptionCategoryID.GENERATE_OPTIONS,resource.getString("GENERATION_OPTIONS"), resource.getString("GENERATION_OPTIONS_DES"))); //$NON-NLS-1$ //$NON-NLS-2$
+        categoryVec.add(new EngineeringOptionCategory(EngineeringOptionCategoryID.GENERATE_ELEMENTS,resource.getString("ADDITIONAL_ELEMENTS"), resource.getString("ADDITIONAL_ELEMENTS_DES"))); //$NON-NLS-1$ //$NON-NLS-2$
+    
+        EngineeringOptionCategory[] categories = new EngineeringOptionCategory[categoryVec.size()];
+        categoryVec.copyInto(categories);
+		return categories;
+	}
+	
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/fe/GenericDeltaDdlGenerator.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/fe/GenericDeltaDdlGenerator.java
new file mode 100644
index 0000000..4e10f90
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/fe/GenericDeltaDdlGenerator.java
@@ -0,0 +1,760 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.rte.fe;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.ResourceBundle;
+import java.util.Vector;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentServiceImpl;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.definition.EngineeringOptionID;
+import org.eclipse.datatools.connectivity.sqm.core.rte.DDLGenerator;
+import org.eclipse.datatools.connectivity.sqm.core.rte.EngineeringOption;
+import org.eclipse.datatools.connectivity.sqm.internal.core.definition.DatabaseDefinitionRegistryImpl;
+import org.eclipse.datatools.connectivity.sqm.internal.core.rte.DeltaDDLGenerator;
+import org.eclipse.datatools.connectivity.sqm.internal.core.rte.EngineeringOptionCategory;
+import org.eclipse.datatools.connectivity.sqm.internal.core.rte.EngineeringOptionCategoryID;
+import org.eclipse.datatools.connectivity.sqm.internal.core.util.ChangeDescriptionUtil;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Privilege;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.RoleAuthorization;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.SQLAccessControlPackage;
+import org.eclipse.datatools.modelbase.sql.constraints.Constraint;
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.UniqueConstraint;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.PersistentTable;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.change.ChangeDescription;
+import org.eclipse.emf.ecore.change.FeatureChange;
+
+public class GenericDeltaDdlGenerator implements DeltaDDLGenerator {
+	protected static final int CREATE       = 1;
+	protected static final int DROP         = 2;
+	protected static final int MODIFIED     = 4;
+	protected static final int RENAME       = 8;
+	protected static final int COMMENT      = 16;
+	protected static final int LABEL        = 32;
+	
+	protected EObject rootObject = null;
+	protected ChangeDescription changeDescription = null;
+	protected Collection redoChanges = null;
+	private EngineeringOption[] options = null;
+	private EngineeringOptionCategory[] categories = null;
+	private ChangeDescriptionUtil changeDescriptionUtil;
+	private boolean destructive = false;
+
+	
+	public String[] generateDeltaDDL(EObject rootObject, ChangeDescription changeDescription, SQLObject[] impacts, IProgressMonitor monitor) 
+	{
+		return generateDeltaDDL (rootObject, changeDescription, monitor);
+	}
+
+	public final String[] generateDeltaDDL(EObject rootObject, ChangeDescription changeDescription, IProgressMonitor monitor) {
+        ResourceBundle resource = ResourceBundle.getBundle("org.eclipse.datatools.connectivity.sqm.internal.core.rte.fe.GenericDdlGeneration"); //$NON-NLS-1$
+        setDestructive(false);
+	    this.rootObject = rootObject;
+		this.changeDescription = changeDescription;
+		changeDescriptionUtil = new ChangeDescriptionUtil(this.changeDescription);
+        monitor.setTaskName(resource.getString("DELTA_DDL_MONITOR_TASK_LOOKING_FOR_CHANGES")); //$NON-NLS-1$
+        Map changeMap = buildChangeMap(monitor);
+        monitor.setTaskName(resource.getString("DELTA_DDL_MONITOR_TASK_ANALYZING_CHANGES")); //$NON-NLS-1$
+        analyze(changeMap);
+        monitor.setTaskName(resource.getString("DELTA_DDL_MONITOR_TASK_GENERATING_DDL")); //$NON-NLS-1$
+        String[] statements = processChangeMap(changeMap, monitor);
+        this.changeDescription = null;
+        this.redoChanges = null;
+        return statements;
+	}
+	
+	public EngineeringOption[] getOptions(){
+        if(this.options == null) {
+            ResourceBundle resource = ResourceBundle.getBundle("org.eclipse.datatools.connectivity.sqm.internal.core.rte.fe.GenericDdlGeneration"); //$NON-NLS-1$
+
+            EngineeringOptionCategory general_options =null;
+            for (int i = 0; i < this.getOptionCategories().length; i++) {
+            	if (categories[i].getId().equals(EngineeringOptionCategoryID.GENERATE_OPTIONS)){
+            		general_options = categories[i];
+            	}
+            }
+            
+            Vector optionVec = new Vector();
+            optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_FULLY_QUALIFIED_NAME,resource.getString("GENERATE_FULLY_QUALIFIED_NAME"), resource.getString("GENERATE_FULLY_QUALIFIED_NAME_DES"), true,general_options)); //$NON-NLS-1$ //$NON-NLS-2$
+            optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_QUOTED_IDENTIFIER,resource.getString("GENERATE_QUOTED_IDENTIFIER"), resource.getString("GENERATE_QUOTED_IDENTIFIER_DES"),true,general_options)); //$NON-NLS-1$ //$NON-NLS-2$
+            
+            EngineeringOption[] options = new EngineeringOption[optionVec.size()];
+            optionVec.copyInto(options);
+            this.options =  options;
+        }
+        
+        return this.options;
+	}
+	
+    public EngineeringOptionCategory[] getOptionCategories(){
+        if(this.categories == null) {
+            ResourceBundle resource = ResourceBundle.getBundle("org.eclipse.datatools.connectivity.sqm.internal.core.rte.fe.GenericDdlGeneration"); //$NON-NLS-1$
+
+            Vector categoryVec = new Vector();
+            categoryVec.add(new EngineeringOptionCategory(EngineeringOptionCategoryID.GENERATE_OPTIONS,resource.getString("GENERATION_OPTIONS"), resource.getString("GENERATION_OPTIONS_DES"))); //$NON-NLS-1$ //$NON-NLS-2$
+        
+            EngineeringOptionCategory[] categories = new EngineeringOptionCategory[categoryVec.size()];
+            categoryVec.copyInto(categories);
+            this.categories =  categories;
+        }
+        return this.categories;
+    }
+
+    protected EngineeringOption[] getEngineeringOption(){
+    	return this.options;
+    }
+    
+    protected void setEngineeringOption(EngineeringOption[] options){
+    	this.options = options ;
+    }
+	
+	protected int getChangeFlag(EObject element, EObject changed, EStructuralFeature feature, FeatureChange setting) {
+		if(element != changed) return MODIFIED; 
+		if(feature == EcorePackage.eINSTANCE.getENamedElement_Name()) return RENAME;
+		if(feature == SQLSchemaPackage.eINSTANCE.getSQLObject_Description()) return COMMENT;
+		if(feature == SQLSchemaPackage.eINSTANCE.getSQLObject_Label()) return LABEL;
+		if(feature == SQLTablesPackage.eINSTANCE.getTable_Columns()) return MODIFIED;
+		if(feature instanceof EReference && feature.isMany() && ((EReference) feature).getEOpposite() != null) return 0;
+		return MODIFIED;
+	}
+	
+	protected void analyze(Map changeMap) {
+		List elements = new LinkedList();
+		elements.addAll(changeMap.keySet());
+		Iterator it = elements.iterator();
+		while(it.hasNext()) {
+			EObject e = (EObject) it.next();
+			int flag = ((Integer) changeMap.get(e)).intValue();
+			if(!needRecreate(e, flag)) continue;
+			if(e instanceof Column) {
+				Column column = (Column) e;
+				Table table = column.getTable();
+	      		changeMap.put(table, new Integer(CREATE | DROP));
+				if(table instanceof PersistentTable){
+					processModifiedTable((PersistentTable)table, changeMap);
+				}
+			}
+			else if(e instanceof PersistentTable) {
+				flag = CREATE | DROP;
+	      		changeMap.put(e, new Integer(flag));
+				processModifiedTable((PersistentTable) e, changeMap);
+			}
+			else if(e instanceof UniqueConstraint) {
+				flag = CREATE | DROP;
+	      		changeMap.put(e, new Integer(flag));
+				processModifiedUniqueConstraint((UniqueConstraint) e, changeMap);				
+			}
+			else if(e instanceof Index) {
+				flag = CREATE | DROP;
+	      		changeMap.put(e, new Integer(flag));
+				processModifiedIndex((Index) e, changeMap);				
+			}
+			else {
+				flag = CREATE | DROP;
+	      		changeMap.put(e, new Integer(flag));
+			}
+		}
+	}
+	
+	protected boolean needRecreate(EObject e, int flag) {
+		return (flag & (MODIFIED | RENAME | COMMENT | LABEL)) != 0;
+	}
+	
+	protected String[] processChangeMap(Map changeMap, IProgressMonitor monitor) {
+        DDLGenerator ddlGenerator = getDDLGenerator();
+        this.undo();
+        String[] drops = getDropStatements(ddlGenerator, changeMap, monitor);
+        this.redo();
+        String[] creates = getCreateStatements(ddlGenerator, changeMap, monitor);
+        this.changeDescription = null;
+        return merge(drops, creates);		
+	}
+	
+	protected final String[] merge(String[] s1, String s2[]) {
+        String[] all= new String[s1.length + s2.length];
+        int k = 0;
+        for(int i = 0; i<s1.length; ++i) {
+        	all[k++] = s1[i];
+        }
+        for(int i = 0; i<s2.length; ++i) {
+        	all[k++] = s2[i];        	
+        }
+        return all;		
+	}
+	
+	private void processModifiedUniqueConstraint(UniqueConstraint uk, Map changeMap) {
+		Iterator it = uk.getForeignKey().iterator();
+		while(it.hasNext()) {
+			ForeignKey fk = (ForeignKey) it.next();
+			if(!changeMap.containsKey(fk)) {
+				changeMap.put(fk, new Integer(CREATE | DROP));
+			}
+		}
+	}
+		
+	private void processModifiedIndex(Index index, Map changeMap) {
+		Iterator it = index.getForeignKey().iterator();
+		while(it.hasNext()) {
+			ForeignKey fk = (ForeignKey) it.next();
+			if(!changeMap.containsKey(fk)) {
+				changeMap.put(fk, new Integer(CREATE | DROP));
+			}
+		}
+	}
+
+	private void processModifiedTable(PersistentTable table, Map changeMap) {
+		Iterator it = table.getUniqueConstraints().iterator();
+		while(it.hasNext()) {
+			UniqueConstraint uk = (UniqueConstraint) it.next();
+			if(!changeMap.containsKey(uk)) {
+				changeMap.put(uk, new Integer(CREATE | DROP));
+				processModifiedUniqueConstraint(uk, changeMap);
+			}
+		}
+		
+		it = table.getIndex().iterator();
+		while(it.hasNext()) {
+			Index index = (Index) it.next();
+			if(!changeMap.containsKey(index)) {
+				changeMap.put(index, new Integer(CREATE | DROP));
+				processModifiedIndex(index, changeMap);
+			}
+		}
+
+		it = table.getForeignKeys().iterator();
+		while(it.hasNext()) {
+			ForeignKey fk = (ForeignKey) it.next();
+			if(!changeMap.containsKey(fk)) {
+				changeMap.put(fk, new Integer(CREATE | DROP));
+			}
+		}
+
+		it = table.getConstraints().iterator();
+		while(it.hasNext()) {
+			Constraint ck = (Constraint) it.next();
+			if(!changeMap.containsKey(ck)) {
+				changeMap.put(ck, new Integer(CREATE));
+			}
+		}
+
+		it = table.getTriggers().iterator();
+		while(it.hasNext()) {
+			Trigger trigger = (Trigger) it.next();
+			if(!changeMap.containsKey(trigger)) {
+				changeMap.put(trigger, new Integer(CREATE | DROP));
+			}
+		}
+	}
+	
+	protected final void undo() {
+		List undoStack = new LinkedList();
+		List redoStack = new LinkedList();
+		Iterator it = changeDescriptionUtil.getChangedDataObjectsGen().iterator();
+		while(it.hasNext()) {
+			Object changedObject = it.next();
+	      	EObject changed = (EObject)changedObject;
+			List oldValues = (List)changeDescriptionUtil.getOldValues(changed);
+			if(oldValues == null) continue;
+			Iterator vi = oldValues.iterator();
+			while(vi.hasNext()) {
+				FeatureChange changeSetting = (FeatureChange) vi.next();
+				EStructuralFeature f= changeSetting.getFeature();
+				changeSetting.getValue();
+				ChangeRecord c1 = new ChangeRecord();
+				c1.element = changed;
+				c1.feature = f;
+				
+				c1.isSet = true;
+				if(f.isUnsettable()) {
+					c1.isSet = changeSetting.isSet();
+				}
+				
+				if(c1.isSet) {
+					c1.value = changeSetting.getValue();
+					if(c1.value instanceof Collection) {
+						List l = new LinkedList();
+						l.addAll((Collection) c1.value);
+						c1.value = l;
+					}					
+				}
+				else {
+					c1.value = null;
+				}
+				undoStack.add(c1);
+				
+				ChangeRecord c2 = new ChangeRecord();
+				c2.element = changed;
+				c2.feature = f;
+
+				c2.isSet = true;
+				if(f.isUnsettable()) {
+					c2.isSet = changed.eIsSet(f);
+				}
+				
+				if(c2.isSet) {
+					c2.value = changed.eGet(f);
+					if(c2.value instanceof Collection) {
+						List l = new LinkedList();
+						l.addAll((Collection) c2.value);
+						c2.value = l;
+					}
+				}
+
+				redoStack.add(c2);
+			}
+		}
+		executeChangeRecords(undoStack);
+		this.redoChanges = redoStack;
+	}
+	
+	protected final void redo() {
+		executeChangeRecords(this.redoChanges);
+	}
+	
+	protected final String[] getDropStatements(DDLGenerator gen, Map changeMap, IProgressMonitor monitor) {
+		Vector elements = new Vector();
+		Iterator it = changeMap.keySet().iterator();
+		while(it.hasNext()) {
+			EObject key = (EObject) it.next();
+			int flag = ((Integer) changeMap.get(key)).intValue();
+			if((flag & (DROP)) != 0) {
+				elements.add(key);
+                if (((flag & (CREATE)) != 0) && 
+                        SQLTablesPackage.eINSTANCE.getPersistentTable().isSuperTypeOf(key.eClass())) 
+                    setDestructive(true);
+			}
+		}
+		if(elements.size() > 0) {
+			SQLObject[] d = new SQLObject[elements.size()];
+			elements.copyInto(d);
+			return gen.dropSQLObjects(d, this.generateQuotedIdentifiers(this.getOptions()), this.generateFullyQualifiedNames(this.getOptions()),  monitor);
+		}
+		else {
+			return new String[0];
+		}
+	}
+	
+	protected final String[] getCreateStatements(DDLGenerator gen, Map changeMap, IProgressMonitor monitor) {
+		Vector elements = new Vector();
+		Iterator it = changeMap.keySet().iterator();
+		while(it.hasNext()) {
+			EObject key = (EObject) it.next();
+			int flag = ((Integer) changeMap.get(key)).intValue();
+			if((flag & CREATE) != 0) {
+				elements.add(key);
+			}
+		}
+		if(elements.size() > 0) {
+			SQLObject[] d = new SQLObject[elements.size()];
+			elements.copyInto(d);
+			return gen.createSQLObjects(d, this.generateQuotedIdentifiers(this.getOptions()), this.generateFullyQualifiedNames(this.getOptions()), monitor);
+		}
+		else {
+			return new String[0];
+		}
+	}
+
+	protected final EObject getDisplayableElement(EObject e) {
+		while(e != null && !ContainmentServiceImpl.INSTANCE.isDisplayableElement(e)) {
+			e = ContainmentServiceImpl.INSTANCE.getContainer(e);
+		}
+		return e;
+	}
+	
+	protected final DDLGenerator getDDLGenerator() {
+		Database database = (Database) ContainmentServiceImpl.INSTANCE.getRootElement(rootObject);
+		DatabaseDefinition def = DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(database);
+		return def.getDDLGenerator();
+	}
+	
+
+	
+	protected final Object getOldValue(EStructuralFeature feature, EObject changed) {
+		Iterator it = changeDescriptionUtil.getOldValues(changed).iterator();
+		while(it.hasNext()) {
+			FeatureChange changeSetting = (FeatureChange) it.next();
+			if(changeSetting.getFeature() == feature) {
+				return changeSetting.getValue();
+			}
+		}
+		return changed.eGet(feature);
+	}
+	
+	protected final boolean ancestorModified(Map changeMap, EObject e) {
+		Iterator it = ContainmentServiceImpl.INSTANCE.getAllContainers(e).iterator();
+		while(it.hasNext()) {
+			Object c = it.next();
+			if(changeMap.containsKey(c)) {
+				int flag = ((Integer) changeMap.get(c)).intValue();
+				if((flag & (CREATE | DROP | MODIFIED | RENAME)) != 0) return true;
+			}
+		}
+		return false;
+	}
+
+
+	private Map buildChangeMap(IProgressMonitor monitor) {
+        Map changeMap = new LinkedHashMap();
+		Iterator it = changeDescriptionUtil.getChangedDataObjectsGen().iterator();
+		while(it.hasNext()) {
+			Object changedObject = it.next();
+			EObject changed = (EObject)changedObject;
+	      	EObject element = getDisplayableElement(changed);
+
+	      	// ignore all disconnected nondisplayable elements
+	      	if(element == null) continue;
+	      		
+	      	int flag = 0;
+	      	if(changeMap.containsKey(element)) flag = ((Integer) changeMap.get(element)).intValue();
+	      	if(flag == DROP || flag == CREATE) continue;
+
+      		if(changeDescriptionUtil.isCreated(element)) {
+      			if (changeDescriptionUtil.isDeleted(element)) continue;
+      			flag = CREATE;
+      		}
+      		else if (changeDescriptionUtil.isDeleted(element)) {
+      			flag = DROP;	      			
+      		}
+	      	else {
+	      		if(changeDescriptionUtil.isCreated(changed)) continue;
+	      		if (changeDescriptionUtil.isDeleted(changed)) continue;
+	      		List oldValues = changeDescriptionUtil.getOldValues(changed);
+				if(oldValues == null) continue;
+				Iterator vi = oldValues.iterator();
+				while(vi.hasNext()) {
+					FeatureChange changeSetting = (FeatureChange) vi.next();
+					EStructuralFeature f= changeSetting.getFeature();
+					//The isSet value returned from the changeSetting is not accurate
+					//when the feature is an attribute and the feature's value type is Boolean.
+					//For example, the nullable attribute of a Column. 
+					if(!(f instanceof EAttribute && changeSetting.getValue() != null && changeSetting.getValue() instanceof Boolean)) {
+						if(!changeSetting.isSet() && !changed.eIsSet(f)) continue;
+					}
+					Object currentValue = changed.eGet(f);
+					Object previousValue = changeSetting.getValue();
+					if(previousValue == null) previousValue = ""; //$NON-NLS-1$
+					if(currentValue == null) {
+						if (this.underContainer(f,changed,previousValue)) {
+	                        if (isDetach(f, changed, previousValue)) flag = DROP;
+	                        else flag = 0;
+							break;
+						} else {
+							currentValue = ""; //$NON-NLS-1$
+						}
+					}
+					// Since we are adding the authorization ids in SDOUtilities (at initialize time),
+					//   we can detect all new and revoked privileges through the auth id received 
+					//   privileges reference.  I think...  Didn't work for new authId to add privilege
+					if (f == SQLSchemaPackage.eINSTANCE.getSQLObject_Privileges()) {
+						buildPrivilegeGrantChangeMapEntries(changeMap,currentValue,previousValue);
+						continue;
+					}
+					if (f == SQLAccessControlPackage.eINSTANCE.getAuthorizationIdentifier_ReceivedPrivilege()) {
+						buildPrivilegeGrantChangeMapEntries(changeMap,currentValue,previousValue);
+						continue;
+					}
+					if (f.getEContainingClass() == SQLAccessControlPackage.eINSTANCE.getPrivilege()) {
+						buildPrivilegeChangeMapEntries(changeMap,(Privilege)changedObject,f,currentValue,previousValue);
+						continue;
+					}
+					if (f == SQLAccessControlPackage.eINSTANCE.getAuthorizationIdentifier_ReceivedRoleAuthorization()) {
+						buildRoleAuthGrantChangeMapEntries(changeMap,currentValue,previousValue);
+						continue;
+					}
+					if (f.getEContainingClass() == SQLAccessControlPackage.eINSTANCE.getRoleAuthorization()) {
+						buildRoleAuthChangeMapEntries(changeMap,(RoleAuthorization)changedObject,f,currentValue,previousValue);
+						continue;
+					}
+					
+					if(currentValue.equals(previousValue)) continue;
+					flag = flag | this.getChangeFlag(element, changed, f, changeSetting);
+				}		
+	      	}
+	      	
+	      	if(flag != 0) {
+	      		changeMap.put(element, new Integer(flag));
+	      	}
+		}      	
+		return changeMap;
+	}
+
+	protected boolean isCreated(EObject element) {
+	    return changeDescriptionUtil.isCreated(element);
+	}
+
+	// START Privilege Specific
+	private void buildPrivilegeGrantChangeMapEntries(Map changeMap,Object currentValue,Object previousValue) {
+		// We need to compare new elements to old elements in the ELists, since
+		// we allow the user to remove privileges from the privileges list.
+		Iterator cVIter;
+		Iterator pVIter;
+		if (currentValue instanceof EList) {
+			cVIter = ((EList)currentValue).iterator();
+			if (previousValue instanceof EList) {
+				// There are previous values to compare against
+				while (cVIter.hasNext()) {
+					Privilege cPrivilege = (Privilege)(cVIter.next());
+					pVIter = ((EList)previousValue).iterator();
+					boolean match = false;
+					while (pVIter.hasNext()) {
+						Privilege pPrivilege = (Privilege)(pVIter.next());
+						if (cPrivilege == pPrivilege) {
+							// We have a match
+							match = true;
+							break;
+						}
+					}
+					if (!match) changeMap.put(cPrivilege,new Integer(CREATE));
+				}
+			}
+			else {
+				// All current values represent new privileges
+				while (cVIter.hasNext()) {
+					Privilege privilege = (Privilege)(cVIter.next());
+					changeMap.put(privilege,new Integer(CREATE));
+				}
+			}
+		}
+		if (previousValue instanceof EList) {
+			pVIter = ((EList)previousValue).iterator();
+			if (currentValue instanceof EList) {
+				// There are previous values to compare against
+				while (pVIter.hasNext()) {
+					Privilege pPrivilege = (Privilege)(pVIter.next());
+					cVIter = ((EList)currentValue).iterator();
+					boolean match = false;
+					while (cVIter.hasNext()) {
+						Privilege cPrivilege = (Privilege)(cVIter.next());
+						if (cPrivilege == pPrivilege) {
+							// We have a match
+							match = true;
+							break;
+						}
+					}
+					if (!match) changeMap.put(pPrivilege,new Integer(DROP));
+				}
+			}
+			else {
+				// All current values represent new privileges
+				while (pVIter.hasNext()) {
+					Privilege privilege = (Privilege)(pVIter.next());
+					changeMap.put(privilege,new Integer(DROP));
+				}
+			}
+		}
+	}
+	
+	private void buildPrivilegeChangeMapEntries(Map changeMap,Privilege changedObject,EStructuralFeature f,Object currentValue,Object previousValue) {
+		if (f.getName().equals("grantable")) { //$NON-NLS-1$
+			// Revoke and re-grant the previous privilege with or without the grant option
+			changeMap.put(changedObject,new Integer(DROP | CREATE));
+		}
+	}
+// END Privilege Specific
+	
+// START RoleAuthorization Specific
+	private void buildRoleAuthGrantChangeMapEntries(Map changeMap,Object currentValue,Object previousValue) {
+		Iterator cVIter;
+		Iterator pVIter;
+		if (currentValue instanceof EList) {
+			cVIter = ((EList)currentValue).iterator();
+			if (previousValue instanceof EList) {
+				// There are previous values to compare against
+				while (cVIter.hasNext()) {
+					RoleAuthorization cRoleAuth = (RoleAuthorization)(cVIter.next());
+					pVIter = ((EList)previousValue).iterator();
+					boolean match = false;
+					while (pVIter.hasNext()) {
+						RoleAuthorization pRoleAuth = (RoleAuthorization)(pVIter.next());
+						if (cRoleAuth == pRoleAuth) {
+							// We have a match
+							match = true;
+							break;
+						}
+					}
+					if (!match) {
+						changeMap.put(cRoleAuth,new Integer(CREATE));
+					}
+				}
+			}
+			else {
+				// All current values represent new role authorizations
+				while (cVIter.hasNext()) {
+					RoleAuthorization roleAuth = (RoleAuthorization)(cVIter.next());
+					changeMap.put(roleAuth,new Integer(CREATE));
+				}
+			}
+		}
+		if (previousValue instanceof EList) {
+			pVIter = ((EList)previousValue).iterator();
+			if (currentValue instanceof EList) {
+				// There are previous values to compare against
+				while (pVIter.hasNext()) {
+					RoleAuthorization pRoleAuth = (RoleAuthorization)(pVIter.next());
+					cVIter = ((EList)currentValue).iterator();
+					boolean match = false;
+					while (cVIter.hasNext()) {
+						RoleAuthorization cRoleAuth = (RoleAuthorization)(cVIter.next());
+						if (cRoleAuth == pRoleAuth) {
+							// We have a match
+							match = true;
+							break;
+						}
+					}
+					if (!match) {
+						changeMap.put(pRoleAuth,new Integer(DROP));
+					}
+				}
+			}
+			else {
+				// All current values represent new role authorizations
+				while (pVIter.hasNext()) {
+					RoleAuthorization roleAuth = (RoleAuthorization)(pVIter.next());
+					changeMap.put(roleAuth,new Integer(DROP));
+				}
+			}
+		}
+	}
+
+	private void buildRoleAuthChangeMapEntries(Map changeMap,RoleAuthorization changedObject,EStructuralFeature f,Object currentValue,Object previousValue) {
+		if (f.getName().equals("grantable")) { //$NON-NLS-1$
+			// Revoke and re-grant the previous privilege with or without the grant option
+			changeMap.put(changedObject,new Integer(DROP | CREATE));
+		}
+	}
+// END RoleAuthorization Specific
+	
+	private  boolean underContainer(EStructuralFeature f,Object obj, Object container) {
+		if (!(obj instanceof EObject) || !(container instanceof EObject)) return false;
+		EStructuralFeature feature  = ((EObject)obj).eContainingFeature();
+		if (feature != null) {
+			return feature.getEContainingClass().isInstance(container);
+		}
+		
+		Iterator it = ((EObject)container).eClass().getEAllReferences().iterator();
+		while(it.hasNext()) {
+			EReference reference = (EReference) it.next();
+			if(reference.isMany()) {
+				EReference opposite = reference.getEOpposite();
+				if (opposite != null && opposite.getContainerClass().isAssignableFrom(obj.getClass())){
+					return true;
+				}
+			}
+		}
+
+		return false;
+
+	}
+
+    private boolean isDetach (EStructuralFeature f,Object obj, Object container) {
+        if (!(obj instanceof EObject) || !(container instanceof EObject)) return false;
+        if (f instanceof EReference){ 
+            Object oldValue = this.getOldValue(((EReference)f).getEOpposite(), (EObject) container);
+            if (oldValue != null) {
+                List oldValueList;
+                if (oldValue instanceof List) {
+                    oldValueList = (List) oldValue;
+                }
+                else {
+                    oldValueList = new ArrayList();
+                    oldValueList.add(oldValue);
+                }
+                
+                List currentValueList;
+                Object currentValue = ((EObject) container).eGet(((EReference)f).getEOpposite());
+                if (currentValue instanceof List) {
+                    currentValueList = (List) currentValue;
+                }
+                else {
+                    currentValueList = new ArrayList();
+                    currentValueList.add(currentValue);
+                }
+                
+                if (oldValueList.contains(obj) && !currentValueList.contains(obj))
+                    return true;
+            }
+        }
+        return false;
+    }
+	
+	private void executeChangeRecords(Collection changeRecords) {
+		Iterator it = changeRecords.iterator();
+		while(it.hasNext()) {
+			ChangeRecord r = (ChangeRecord) it.next();
+			boolean deliver = r.element.eDeliver();
+			r.element.eSetDeliver(false);	
+			if(r.isSet) {
+				if(r.feature.isMany()) {
+					Collection c = (Collection) r.element.eGet(r.feature);
+					c.clear();
+					c.addAll((Collection) r.value);
+				}
+				else {
+					r.element.eSet(r.feature, r.value);
+				}				
+			}
+			else {
+				r.element.eUnset(r.feature);
+			}
+			r.element.eSetDeliver(deliver);
+		}
+	}
+	
+    private boolean generateQuotedIdentifiers(EngineeringOption[] options) {
+        return getOptionValueByID(EngineeringOptionID.GENERATE_QUOTED_IDENTIFIER, options);
+    }
+
+    private boolean generateFullyQualifiedNames(EngineeringOption[] options) {
+        return getOptionValueByID(EngineeringOptionID.GENERATE_FULLY_QUALIFIED_NAME, options);
+    }
+
+    private boolean getOptionValueByID(String optionID, EngineeringOption[] options){
+    	return EngineeringOptionID.getOptionValueByID(optionID, options);
+    }
+    
+    public boolean isDestructive() {
+        return destructive;
+    }
+    
+    protected void setDestructive(boolean iDestructive) {
+        destructive = iDestructive;
+    }
+
+	private static class ChangeRecord {
+		public EObject element;
+		public EStructuralFeature feature;
+		public Object value;
+		public boolean isSet;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/util/CatalogUtil.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/util/CatalogUtil.java
new file mode 100644
index 0000000..604a266
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/util/CatalogUtil.java
@@ -0,0 +1,106 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.util;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentService;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.emf.ecore.ENamedElement;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+
+public class CatalogUtil {
+	
+	private static CatalogTaskLabelProvider sDefaultCatalogTaskLabelProvider = new CatalogTaskLabelProvider();
+	public static void setDefaultCatalogTaskLabelProvider(CatalogTaskLabelProvider provider) {
+		if (provider == null) {
+			sDefaultCatalogTaskLabelProvider = new CatalogTaskLabelProvider();
+		}
+		else {
+			sDefaultCatalogTaskLabelProvider = provider;
+		}
+	}
+
+	public void load(EObject obj, IProgressMonitor monitor, int task) {
+		loadInternal(obj, monitor, task, true);
+		Iterator it = obj.eClass().getEAllStructuralFeatures().iterator();
+		while(it.hasNext()) {
+			EStructuralFeature feature = (EStructuralFeature) it.next();
+			if(!feature.isDerived() && !feature.isTransient()) obj.eGet(feature);
+		}				
+	}
+
+	public void loadWithoutAttributes(EObject obj, IProgressMonitor monitor, int task) {
+		loadInternal(obj, monitor, task, false);
+		Iterator it = obj.eClass().getEAllReferences().iterator();
+		while(it.hasNext()) {
+			EStructuralFeature feature = (EStructuralFeature) it.next();
+			if(!feature.isDerived() && !feature.isTransient()) obj.eGet(feature);
+		}				
+	}
+
+	private double loadInternal(EObject object, IProgressMonitor monitor, double task, boolean includingAttributes) {
+		ContainmentService containmentService = RDBCorePlugin.getDefault().getContainmentService();
+		Collection c = containmentService.getContainedElements(object);
+		
+		double acc = 0;
+		if(c.size() != 0) {
+			double delta = task/c.size();
+			Iterator it = c.iterator();
+			while(it.hasNext()) {
+				EObject child = (EObject) it.next();
+				if(containmentService.isDisplayableElement(child)) {
+					if(child instanceof ENamedElement) {
+						String taskLabel = sDefaultCatalogTaskLabelProvider.getLabel((ENamedElement)child);
+						if (taskLabel != null) {
+							monitor.subTask(taskLabel);
+						}
+					}
+				}
+				acc += loadInternal(child, monitor, delta, includingAttributes);
+				if(monitor.isCanceled()) return 0.0;
+				if(acc >= 1.0) {
+					monitor.worked((int) acc);			
+					acc = acc - (int) acc;
+				}
+			}
+		}
+		else {
+			acc = task;
+		}
+
+		if(includingAttributes) {
+			Iterator it = object.eClass().getEAllStructuralFeatures().iterator();
+			while(it.hasNext()) {
+				EStructuralFeature feature = (EStructuralFeature) it.next();
+				if(!feature.isDerived() && !feature.isTransient()) object.eGet(feature);
+			}
+		}
+		else {
+			Iterator it = object.eClass().getEAllReferences().iterator();
+			while(it.hasNext()) {
+				EStructuralFeature feature = (EStructuralFeature) it.next();
+				if(!feature.isDerived() && !feature.isTransient()) object.eGet(feature);
+			}
+		}
+		return acc;
+	}
+	
+	public static class CatalogTaskLabelProvider {
+		public String getLabel(ENamedElement element) {
+			return element.getName();
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/util/ChangeDescriptionUtil.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/util/ChangeDescriptionUtil.java
new file mode 100644
index 0000000..df25523
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/util/ChangeDescriptionUtil.java
@@ -0,0 +1,118 @@
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.util;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.EMap;
+import org.eclipse.emf.common.util.UniqueEList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.change.ChangeDescription;
+import org.eclipse.emf.ecore.change.FeatureChange;
+import org.eclipse.emf.ecore.util.DelegatingFeatureMap;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.FeatureMapUtil;
+
+public class ChangeDescriptionUtil {
+	private ChangeDescription changeDescription;
+	private Set deletedObjects;
+	private Set createdObjects;
+	
+	public ChangeDescriptionUtil (ChangeDescription changeDescription) {
+		this.changeDescription = changeDescription;		
+	}
+	
+	public boolean isCreated (EObject element) {
+	    if (createdObjects == null) {
+	        createdObjects = new HashSet();
+	        for (Iterator i = EcoreUtil.getAllContents(this.changeDescription.getObjectsToDetach()); i.hasNext(); )
+	        {
+	            createdObjects.add(i.next());
+	        }           
+	    }
+	    return createdObjects.contains(element);    
+	}
+	
+    public boolean isDeleted (EObject element) {
+        if (deletedObjects == null) {
+	        Set deletedObjects = new HashSet();
+	        for (Iterator i = EcoreUtil.getAllContents(this.changeDescription.getObjectsToAttach()); i.hasNext(); )
+	        {
+	            deletedObjects.add(i.next());
+	        }
+        }
+	    return deletedObjects != null && deletedObjects.contains(element);
+    }
+    
+    public Set getDeletedObjects()
+    {
+    	Set deletedObjects = null;
+      if (deletedObjects == null)
+      {
+        deletedObjects = new HashSet();
+        for (Iterator i = EcoreUtil.getAllContents(this.changeDescription.getObjectsToAttach()); i.hasNext(); )
+        {
+          deletedObjects.add(i.next());
+        }
+      }
+      return deletedObjects;
+    }
+
+    public EList getChangedDataObjectsGen()
+    {
+      EList result = new UniqueEList.FastCompare(getDeletedObjects());
+      result.addAll(this.changeDescription.getObjectsToDetach());
+      for (Iterator i = this.changeDescription.getObjectChanges().iterator(); i.hasNext(); )
+      {
+        Map.Entry entry = (Map.Entry)i.next();
+        result.add(entry.getKey());
+      }
+      return result;
+    }
+
+	public List getOldValues(EObject dataObject) {
+		List settings = (List) ((EMap) changeDescription.getObjectChanges())
+				.get(dataObject);
+		if (settings == null) {
+			settings = new ArrayList();
+		} else {
+			for (int i = 0; i < settings.size(); i++) {
+				FeatureChange change = (FeatureChange) settings.get(i);
+				EStructuralFeature feature = change.getFeature();
+				if (FeatureMapUtil.isFeatureMap(feature)) {
+					final List values = (List) change.getValue();
+					DelegatingFeatureMap featureMap = new DelegatingFeatureMap(
+							((InternalEObject) dataObject), feature) {
+						private static final long serialVersionUID = 1L;
+
+						protected final List theList = values;
+
+						// @Override
+						protected List delegateList() {
+							return theList;
+						}
+					};
+
+				}
+			}
+		}
+		return settings;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/util/ConnectionUtil.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/util/ConnectionUtil.java
new file mode 100644
index 0000000..def5549
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/util/ConnectionUtil.java
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.util;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.sqm.core.connection.ConnectionInfo;
+import org.eclipse.datatools.connectivity.sqm.core.connection.DatabaseConnectionRegistry;
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentService;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EObject;
+
+public class ConnectionUtil
+{
+	public static final String CONNECTION_TYPE = "org.eclipse.datatools.connectivity.sqm.core.connection.ConnectionInfo"; //$NON-NLS-1$
+	
+	private static final ContainmentService containmentService = RDBCorePlugin.getDefault().getContainmentService();
+	private static final String CONNECTION_URI = "ConnectionURI"; //$NON-NLS-1$
+	private static final String CONNECTION_URI_KEY = "ConnectionKey"; //$NON-NLS-1$
+
+	private static String getConnectionEAnnotationUri()
+	{
+		return CONNECTION_URI;
+	}
+
+	private static String getConnectionEAnnotationKey()
+	{
+		return CONNECTION_URI_KEY;
+	}
+	
+	public static ConnectionInfo getConnectionForEObject (EObject sqlObject)
+	{
+		while (sqlObject != null && !SQLSchemaPackage.eINSTANCE.getDatabase().isSuperTypeOf(sqlObject.eClass()))
+		{
+			sqlObject = containmentService.getContainer(sqlObject);
+		}
+		return sqlObject != null ? DatabaseConnectionRegistry.getConnectionForDatabase ((Database)sqlObject) : null;
+	}
+
+	public static void setConnectionProfile(SQLObject obj, String infoName)
+	{
+		if (infoName == null) throw new NullPointerException();
+		EAnnotation annotation = obj.getEAnnotation(getConnectionEAnnotationUri());
+		if (annotation == null)
+		{
+			annotation = obj.addEAnnotation(getConnectionEAnnotationUri());
+		}
+		obj.addEAnnotationDetail(annotation, getConnectionEAnnotationKey(), infoName);
+	}
+
+	public static void setConnectionProfile(SQLObject obj, IConnectionProfile info)
+	{
+		setConnectionProfile(obj, info.getName());
+	}
+
+	public static String getConnectionProfileName(SQLObject obj)
+	{
+		EAnnotation annotation = obj.getEAnnotation(getConnectionEAnnotationUri());
+		if (annotation == null) return null;
+		return obj.getEAnnotationDetail(annotation, getConnectionEAnnotationKey());
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/util/DatabaseProviderHelper.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/util/DatabaseProviderHelper.java
new file mode 100644
index 0000000..a3d6043
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/util/DatabaseProviderHelper.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.util;
+
+import java.sql.Connection;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogProvider;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+/**
+ * @author ljulien
+ */
+public class DatabaseProviderHelper
+{
+ //   private static final ConnectionManager connectionManager = RDBCorePlugin.getDefault().getConnectionManager();
+
+    private void setSharedInformation (ConnectionInfo info, Database database)
+    {
+        if (info.getSharedDatabase() != null)
+        {
+            info.removeSharedDatabase();
+        }
+        info.setSharedDatabase(database);
+    }
+    
+    private Database getCatalogDatabase (Connection connection, ConnectionInfo info)
+    {
+		ICatalogProvider catalogProvider = info.getDatabaseDefinition().getDatabaseCatalogProvider();
+		Database database = catalogProvider.getCatalogDatabase(connection);
+		//Need to add an EAnnotation to the database object for the connection profile name
+		ConnectionUtil.setConnectionProfile(database, info.getConnectionProfile());
+		setSharedInformation (info, database);
+		return database;
+    }
+
+    public void setDatabase (Connection connection, ConnectionInfo info, String databaseName)
+	{
+        Database database = getCatalogDatabase (connection, info);
+        if (database.getName() == null || database.getName().trim().length() == 0 ) {
+        	if (databaseName != null && databaseName.length() != 0) {
+        		database.setName(databaseName);
+        	}
+        }
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/util/GenericCatalogMessages.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/util/GenericCatalogMessages.java
new file mode 100644
index 0000000..576c409
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/util/GenericCatalogMessages.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Actuate Corporation - added messages
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.util;
+
+import org.eclipse.osgi.util.NLS;
+
+public class GenericCatalogMessages extends NLS {
+
+	private static final String BUNDLE_NAME = "org.eclipse.datatools.connectivity.sqm.internal.core.l10n.GenericCatalog";//$NON-NLS-1$
+
+	private GenericCatalogMessages() {
+	}
+
+	public static String DEFN_MISSING_ATTRIBUTE_VALUES;
+    public static String FE_VIEW_HAS_NO_BODY;
+	public static String FE_TRIGGER_ACTION_EMPTY;
+	public static String FE_PARENT_TABLLE_OR_KEY_DO_NOT_EXIST;
+	public static String FE_REFERENCE_CONSTAINT_HAS_NO_KEY;
+	public static String FE_INDEX_HAS_NO_MEMBER;
+	public static String FE_ELEMENT_HAS_NO_TYPE;
+    public static String RDBCorePlugin_NO_DEFAULT_WORKSPACE;
+	
+	static {
+		NLS.initializeMessages(BUNDLE_NAME, GenericCatalogMessages.class);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/util/RDBCorePluginConstants.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/util/RDBCorePluginConstants.java
new file mode 100644
index 0000000..3885731
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/util/RDBCorePluginConstants.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.util;
+
+/**
+ * @author Quy V. On, quyon@us.ibm.com
+ */
+public class RDBCorePluginConstants
+{
+    // Constants for the OutputPreference PreferenceStore
+    public static final String LIMIT_ROWS_RETRIEVED = 
+        "OUTPUT_PREFERENCE_LIMIT_ROWS_RETRIEVED"; //$NON-NLS-1$
+    public static final String MAX_ROW_RETRIEVED = 
+        "OUTPUT_PREFERENCE_MAX_ROW_RETRIEVED"; //$NON-NLS-1$
+    public static final String MAX_LOB_LENGTH = 
+        "OUTPUT_PREFERENCE_MAX_LOB_LENGTH"; //$NON-NLS-1$
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/util/RTEHelper.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/util/RTEHelper.java
new file mode 100644
index 0000000..d2c6b4f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/util/RTEHelper.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.internal.core.util;
+
+import java.io.StringWriter;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+
+/**
+ * @author ledunnel
+ */
+public class RTEHelper {
+
+	private static String LINE_RETURN = System.getProperty("line.separator");
+	/**
+	 * @param ddlStatements
+	 * @param databaseDefinition
+	 * @param path
+	 * @param statementTerminator - Use null if you want to use the default terminator.
+	 * @return The generated file.
+	 */
+	public static IFile saveDDL(String[] ddlStatements,
+			DatabaseDefinition databaseDefinition, IPath path, String statementTerminator) {
+		IFile ddlFile = null;
+		StringWriter writer = new StringWriter();
+		String terminator = getDefaultStatementTerminator(databaseDefinition);
+		if (statementTerminator != null){
+			terminator = statementTerminator;
+		}
+		for (int i = 0; i < ddlStatements.length; i++) {
+			writer.write(ddlStatements[i]
+					+ terminator);
+		}
+		ddlFile = SaveDDLUtility.getInstance().saveDDLFileAsResource(writer,
+				path.toString());
+		return ddlFile;
+	}
+
+	private static String getDefaultStatementTerminator(DatabaseDefinition dbDef) {
+    	String statementTerminator = dbDef.getSQLTerminationCharacter();
+    	String fullStatementTermination = "";
+    	
+		if (statementTerminator.length() < 2){
+    		fullStatementTermination += statementTerminator + LINE_RETURN + LINE_RETURN;
+    	} else {
+    		fullStatementTermination += LINE_RETURN + statementTerminator + LINE_RETURN + LINE_RETURN;
+    	}
+		return fullStatementTermination;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/util/SaveDDLUtility.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/util/SaveDDLUtility.java
new file mode 100644
index 0000000..12ac494
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/util/SaveDDLUtility.java
@@ -0,0 +1,239 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.datatools.connectivity.sqm.internal.core.util;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.StringWriter;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+
+/**
+ * @author ljulien
+ *
+ */
+public class SaveDDLUtility
+{
+    
+    private static final String DDL_FILE_EXTENSION = "sql"; //$NON-NLS-1$
+    private static final String ALTERNATE_DDL_FILE_EXTENSION = "ddl";   //$NON-NLS-1$
+  
+	/** @modelguid {29599313-A7BB-48EC-B7A3-1E87ED6ABD2E} */
+	private final static SaveDDLUtility save = new SaveDDLUtility ();
+	
+	/** @modelguid {2827100A-2C5D-4303-A3C1-4ADCB3EC1D3B} */
+	private SaveDDLUtility ()
+	{
+	}
+	
+	/**
+	 * @return the instance to use when you want to save a DDL Document
+	 * @modelguid {BA3DB897-EFBA-49F3-ADDD-6C469CC6B7CD}
+	 */
+	public static SaveDDLUtility getInstance ()
+	{
+		return save;
+	}
+
+	/**
+	 * Will check to see if the document can be saved as an eclipse resource
+	 * @return true if the document can be saved as an Eclipse Resource
+	 * @modelguid {E9E8572B-AA91-4814-A2A3-D72B1283BD5B}
+	 */
+	private IFile shouldSaveAsResource (String filename)
+	{
+        // maintenance of ddl file resource is only supported on OSGi platform
+        if( ! ConnectivityPlugin.isRunningOSGiPlatform() )
+            return null;
+        
+		if (filename != null)
+		{
+			Path thePath = new Path(filename);
+		 	IFile theFile = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(thePath);
+		 	return theFile;
+		}
+		else
+		{
+			return null;
+		}
+	}
+	
+	public IFile saveDDLFileAsResource(StringWriter out, String filename){
+        // maintenance of ddl file resource is only supported on OSGi platform
+        if( ! ConnectivityPlugin.isRunningOSGiPlatform() )
+            return null;
+        
+	    IPath thePath = new Path(filename);
+	    if ((thePath.getFileExtension() == null)  || (!(thePath.getFileExtension().equalsIgnoreCase(DDL_FILE_EXTENSION) || thePath.getFileExtension().equalsIgnoreCase(ALTERNATE_DDL_FILE_EXTENSION)))){
+	        thePath = thePath.addFileExtension(DDL_FILE_EXTENSION);
+	    }
+	    IFile theFile = ResourcesPlugin.getWorkspace().getRoot().getFile(thePath);
+	    OutputStream file = null;
+	    try 
+        {
+	    file = new ByteArrayOutputStream ();
+	    
+	    // Save the file using encoding specified by user in
+	    // Window->Preferences...
+	    String encoding = ResourcesPlugin.getEncoding();
+	    if (encoding != null && !encoding.equals("")) {
+	    	file.write(out.toString().getBytes(encoding));
+	    }
+	    else
+	    {
+	    	file.write(out.toString().getBytes());
+	    }
+	    
+		saveDocumentAsResource (theFile, file);
+        }
+		catch (FileNotFoundException e)
+		{
+		}
+		catch (IOException e)
+		{
+		}
+        finally 
+        {
+			if(file != null) 
+			{
+	        	try
+				{
+					file.close();
+				}
+				catch (IOException e1)
+				{
+				}
+			}
+        }
+        return theFile;   
+	}
+	
+	
+	/**
+	 * Will save a DDL Document for you
+	 * @param document, the document to save
+	 */
+	public void saveDDLFile (StringWriter out, String filename)
+	{
+        OutputStream file = null;
+        try 
+        {
+        	if (shouldSaveAsResource (filename) == null)
+	        {
+	        	File newFile = new File(filename);
+	        	if (newFile.exists() && !newFile.canWrite() && !makeCheckOut(filename))
+	        	{
+	        		return;
+	        	}
+				file = new FileOutputStream(newFile);
+				file.write(out.toString().getBytes());
+	        }
+	        else
+	        {
+	        	file = new ByteArrayOutputStream ();
+				file.write(out.toString().getBytes());
+				saveDocumentAsResource (shouldSaveAsResource (filename), file);
+	        }
+        }
+		catch (FileNotFoundException e)
+		{
+		}
+		catch (IOException e)
+		{
+		}
+        finally 
+        {
+			if(file != null) 
+			{
+	        	try
+				{
+					file.close();
+				}
+				catch (IOException e1)
+				{
+				}
+			}
+        }
+    }
+
+	/**
+	 *@param IFile  theFile that will be written out
+	 *@param Writer the String Writer that will be writen out
+	 * @modelguid {32B1885D-A8E1-4267-B66E-4D3ABA83DC69}
+	 */
+	private void saveDocumentAsResource (IFile theFile, OutputStream writer) 
+	{
+		
+		if (theFile == null)
+		{
+			return;
+		}
+		
+		InputStream input = null;
+		try 
+		{
+			// read the bytes in the outputStreamWriter
+    		input = new ByteArrayInputStream(((ByteArrayOutputStream)writer).toByteArray());
+    		if (theFile.exists()) 
+    		{
+    			if (theFile.isReadOnly())
+    			{
+    				// Check out the file - ME TODO 
+    				if (true)
+    				{
+    					theFile.setContents(input, true, true, null);
+    				}
+    			}
+    			else
+    			{
+    				theFile.setContents(input, true, true, null);	
+    			}
+    		}
+    		else 
+    		{
+    			theFile.create(input, false, null);
+    		}
+		}
+		catch (Exception e) 
+		{
+		}
+		finally 
+		{
+			try 
+			{
+			    input.close();	
+			}
+			catch (Exception e) 
+			{
+			}
+		}
+	} 
+	
+	/**
+	 * @return true if the file should be checked out
+	 * @modelguid {BD043CBA-EC39-4072-BFD4-ECC3A430E13A}
+	 */
+	private boolean makeCheckOut (String fileName)
+	{
+		return false;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/CatalogFilterProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/CatalogFilterProvider.java
new file mode 100644
index 0000000..8d65362
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/CatalogFilterProvider.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.loader;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo;
+
+/**
+ * Implementation for use with the "catalog" object loader.
+ * 
+ * @since 1.0
+ */
+public class CatalogFilterProvider extends ConnectionFilterProvider {
+
+	/*
+	 * (non-Javadoc) Returns the ConnectionFilter to be used when loading
+	 * "catalog" objects from the server. This is only applicable to servers
+	 * supporting multiple catalogs (e.g. Sybase ASE).
+	 * 
+	 * @see org.eclipse.datatools.connectivity.sqm.loader.IConnectionFilterProvider#getConnectionFilter(org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject)
+	 */
+	public ConnectionFilter getConnectionFilter(ICatalogObject catalogObject) {
+		ConnectionInfo ci = getConnectionInfo(catalogObject);
+		return ci.getFilter(ConnectionFilter.CATALOG_FILTER);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/ConnectionFilterProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/ConnectionFilterProvider.java
new file mode 100644
index 0000000..3f8a540
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/ConnectionFilterProvider.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.loader;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.DatabaseConnectionRegistry;
+
+/**
+ * Base implementation for IConnectionFilterProvider. Provides a helper method
+ * for retrieving the ConnectionInfo object associated with the specified
+ * catalog object.
+ * 
+ * @since 1.0
+ */
+public abstract class ConnectionFilterProvider implements
+		IConnectionFilterProvider {
+
+	/**
+	 * @param catalogObject the catalog object
+	 * @return the ConnectionInfo object used to load the specified catalog
+	 *         object
+	 */
+	protected ConnectionInfo getConnectionInfo(ICatalogObject catalogObject) {
+		return DatabaseConnectionRegistry.getInstance()
+				.getConnectionForDatabase(catalogObject.getCatalogDatabase());
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/IConnectionFilterProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/IConnectionFilterProvider.java
new file mode 100644
index 0000000..d4ebc1e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/IConnectionFilterProvider.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.loader;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+
+/**
+ * This interface is used by the generic catalog loader helper classes to
+ * retrieve any ConnectionFilter that may be defined for the specified object.
+ * 
+ * @since 1.0
+ */
+public interface IConnectionFilterProvider {
+
+	/**
+	 * Returns the ConnectionFilter associated with the given catalog object.
+	 * 
+	 * For example: If this object is to be used in conjunction with a table
+	 * loader, this method should return the ConnectionFilter representing the
+	 * table filtering criteria for the specified object (e.g. a particular
+	 * schema object).
+	 * 
+	 * @param catalogObject the catalog object being loaded.
+	 * 
+	 * @return the filter associated with the catalog object.
+	 */
+	ConnectionFilter getConnectionFilter(ICatalogObject catalogObject);
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCBaseLoader.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCBaseLoader.java
new file mode 100644
index 0000000..799eacb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCBaseLoader.java
@@ -0,0 +1,145 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.loader;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+/**
+ * Base object for catalog loader helpers. This object provides basic services
+ * and containment used by the generic catalog loaders.
+ * 
+ * A provides functionality for loading particular information for the object
+ * being loaded. For example, JDBCTableLoader loads the table objects contained
+ * within a specified Schema object.
+ * 
+ * @since 1.0
+ */
+public class JDBCBaseLoader {
+
+	/**
+	 * The catalog object whose contents are loaded by this object. Accessible
+	 * through getCatalogObject().
+	 */
+	private ICatalogObject mCatalogObject;
+	/**
+	 * The IConnectionFilterProvider associated with this loader, if any.
+	 */
+	private IConnectionFilterProvider mConnectionFilterProvider;
+	/**
+	 * The active ConnectionFilter. This object is set by a call to
+	 * initActiveFilter(). The ConnectionFilter may change between executions
+	 * (e.g. if the user changes the filter criteria).
+	 */
+	private ConnectionFilter mActiveFilter;
+
+	/**
+	 * Constructor for the base loader class.
+	 * 
+	 * @param catalogObject the catalog object to which this loader applies.
+	 * @param connectionFilterProvider the connection filter provider for this
+	 *        loader
+	 */
+	public JDBCBaseLoader(ICatalogObject catalogObject,
+							IConnectionFilterProvider connectionFilterProvider) {
+		mCatalogObject = catalogObject;
+		mConnectionFilterProvider = connectionFilterProvider;
+	}
+
+	/**
+	 * @return the catalog object to which this loader applies.
+	 */
+	public ICatalogObject getCatalogObject() {
+		return mCatalogObject;
+	}
+	
+	/**
+	 * Set the base catalog object for the loader
+	 * Necessary to support the zero arg constructor
+	 * @param catalogObject
+	 */
+	public void setCatalogObject ( ICatalogObject catalogObject ) {
+		this.mCatalogObject = catalogObject;
+	}
+
+	/**
+	 * Initializes the active ConnectionFilter used by the loader. This method
+	 * should be invoked prior to loading any catalog data to ensure the filter
+	 * being used is up to date.
+	 */
+	protected void initActiveFilter() {
+		mActiveFilter = null;
+		if (mConnectionFilterProvider != null) {
+			mActiveFilter = mConnectionFilterProvider
+					.getConnectionFilter(mCatalogObject);
+		}
+	}
+
+	/**
+	 * @return a filter pattern that can be used with JDBC meta data calls.
+	 */
+	protected String getJDBCFilterPattern() {
+		if (mActiveFilter != null
+				&& ConnectionFilter.OPERATOR_LIKE.equals(mActiveFilter
+						.getOperator())) {
+			String pattern = mActiveFilter.getPattern();
+			if (pattern.startsWith("'") && pattern.endsWith("'")) {
+				// Strip off leading and trailing "'"
+				pattern = pattern.substring(1, pattern.length() - 1);
+			}
+			return pattern;
+		}
+		return null;
+	}
+
+	/**
+	 * @return the SQL filter expression defined by the filter (e.g. LIKE
+	 *         'sys%'). This expression can be used in a SQL "where" clause.
+	 */
+	protected String getSQLFilterExpression() {
+		if (mActiveFilter == null) {
+			return null;
+		}
+		return mActiveFilter.getPredicate();
+	}
+
+	/**
+	 * This method is used by the catalog loader for determining whether certain
+	 * objects are filtered. This method may be used depending on whether or not
+	 * the meta data query being used by the loader supports pattern matching
+	 * (e.g. NOT LIKE, is not supported directly by JDBC meta data calls) or the
+	 * custom query does not use the SQL filter expression.
+	 * 
+	 * @param name the name of an object to test
+	 * @return true if the object is filtered.
+	 */
+	protected boolean isFiltered(String name) {
+		if (mActiveFilter == null) {
+			return false;
+		}
+		return mActiveFilter.isFiltered(name);
+	}
+
+	protected SQLObject getAndRemoveSQLObject(Collection sqlObjs, String objName) {
+		for (Iterator it = sqlObjs.iterator(); it.hasNext();) {
+			SQLObject obj = (SQLObject) it.next();
+			if (obj.getName().equals(objName)) {
+				it.remove();
+				return obj;
+			}
+		}
+		return null;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCCatalogLoader.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCCatalogLoader.java
new file mode 100644
index 0000000..bb86058
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCCatalogLoader.java
@@ -0,0 +1,253 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.loader;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCCatalog;
+import org.eclipse.datatools.modelbase.sql.schema.Catalog;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+import com.ibm.icu.text.MessageFormat;
+
+/**
+ * Base loader implementation for loading a database's catalog objects. This
+ * class may be specialized as necessary to meet a particular vendor's needs.
+ * 
+ * @since 1.0
+ */
+public class JDBCCatalogLoader extends JDBCBaseLoader {
+
+	/**
+	 * The column name containing the catalog name.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getCatalogs()
+	 */
+	public static final String COLUMN_TABLE_CAT = "TABLE_CAT"; //$NON-NLS-1$
+
+	/**
+	 * This constructs the loader using a CatalogFilterProvider filter.
+	 * 
+	 * @param catalogObject the Database object upon which this loader operates.
+	 */
+	public JDBCCatalogLoader(ICatalogObject catalogObject) {
+		this(catalogObject, new CatalogFilterProvider());
+	}
+
+	/**
+	 * @param catalogObject the Database object upon which this loader operates.
+	 * @param connectionFilterProvider the filter provider used for filtering
+	 *        the "catalog" objects being loaded
+	 */
+	public JDBCCatalogLoader(
+								ICatalogObject catalogObject,
+								IConnectionFilterProvider connectionFilterProvider) {
+		super(catalogObject, connectionFilterProvider);
+		if (catalogObject != null)
+			assert (catalogObject instanceof Database);
+	}
+
+	/**
+	 * @return a collection of Catalog objects
+	 * 
+	 * @throws SQLException if an error occurred during loading.
+	 * 
+	 * @deprecated see {@link #loadCatalogs(List, Collection)}
+	 */
+	public Collection loadCatalogs() throws SQLException {
+		List retVal = new ArrayList();
+		loadCatalogs(retVal, Collections.EMPTY_SET);
+		return retVal;
+	}
+
+	/**
+	 * Loads the "catalog" objects from the database. This method uses the
+	 * result set from createResultSet() to load the "catalog" objects from the
+	 * server. This method first checks the name of the "catalog" to determine
+	 * whether or not it should be filtered. If it is not filtered, it checks to
+	 * see if an object with that name was loaded previously. If it finds an
+	 * existing object, it refreshes that object and adds it to the containment
+	 * list. If the named object does not exist, the result set is passed to
+	 * processRow(), which creates and initializes a new object. Catalog objects
+	 * are created using the factory method, createCatalog() and initialized
+	 * through the initialize() method.
+	 * 
+	 * If no catalogs are loaded, the loader assumes catalogs are not supported
+	 * and creates a default Catalog object with an empty name. (This is mimics
+	 * the behavior of the JDBC meta-data API where objects not belonging to a
+	 * catalog are associated with a "" named catalog.)
+	 * 
+	 * This method should only be overridden as a last resort when the desired
+	 * behavior cannot be acheived by overriding createResultSet(),
+	 * closeResultSet(), processRow(), createCatalog() and initialize().
+	 * 
+	 * @param containmentList the containment list held by parent
+	 * @param existingCatalogs the catalog objects which were previously loaded
+	 * @throws SQLException if an error occurred during loading.
+	 */
+	public void loadCatalogs(List containmentList, Collection existingCatalogs)
+			throws SQLException {
+		ResultSet rs = null;
+		try {
+			initActiveFilter();
+
+			boolean catalogsFiltered = false;
+			for (rs = createResultSet(); rs.next();) {
+				String catalogName = rs
+						.getString(JDBCCatalogLoader.COLUMN_TABLE_CAT);
+				if (catalogName == null || isFiltered(catalogName)) {
+					catalogsFiltered = true;
+					continue;
+				}
+
+				Catalog catalog = (Catalog) getAndRemoveSQLObject(
+						existingCatalogs, catalogName);
+				if (catalog == null) {
+					catalog = processRow(rs);
+					if (catalog != null) {
+						containmentList.add(catalog);
+					}
+				}
+				else {
+					containmentList.add(catalog);
+					if (catalog instanceof ICatalogObject) {
+						((ICatalogObject) catalog).refresh();
+					}
+				}
+			}
+			if (containmentList.size() == 0 && !catalogsFiltered) {
+				// Create a default catalog
+				Catalog catalog = (Catalog) getAndRemoveSQLObject(
+						existingCatalogs, new String());
+				if (catalog == null) {
+					catalog = createCatalog();
+					catalog.setName(new String());
+				}
+				else if (catalog instanceof ICatalogObject) {
+					((ICatalogObject) catalog).refresh();
+				}
+				containmentList.add(catalog);
+			}
+		}
+		finally {
+			if (rs != null) {
+				closeResultSet(rs);
+			}
+		}
+	}
+
+	/**
+	 * Removes the specified catalogs from the model.
+	 * 
+	 * @param catalogs the catalogs to be removed from the model.
+	 */
+	public void clearCatalogs(Collection catalogs) {
+		catalogs.clear();
+	}
+
+	/**
+	 * Creates a result set to be used by the loading logic. The default version
+	 * uses of the JDBC DatabaseMetaData.getCatalog() to create the result set.
+	 * This method may be overridden to use a vendor specific query. However,
+	 * the default logic requires a "TABLE_CAT" column. Keep this in mind if you
+	 * plan to reuse the default logic (e.g. initialize())
+	 * 
+	 * @return a result containing the information used to initialize Catalog
+	 *         objects
+	 * 
+	 * @throws SQLException if an error occurs
+	 */
+	protected ResultSet createResultSet() throws SQLException {
+		try {
+			return getCatalogObject().getConnection().getMetaData()
+					.getCatalogs();
+		}
+		catch (RuntimeException e) {
+			SQLException error = new SQLException(MessageFormat.format(
+					Messages.Error_Unsupported_DatabaseMetaData_Method,
+					new Object[] { "java.sql.DatabaseMetaData.getCatalog()"})); //$NON-NLS-1$
+			error.initCause(e);
+			throw error;
+		}
+	}
+
+	/**
+	 * Closes the result set used for catalog object loading. This method is
+	 * implemented as rs.close(). However, if you used a Statement object to
+	 * create the result set, this is where you would close that Statement.
+	 * 
+	 * @param rs the result set to close. This will be the result set created by
+	 *        createResultSet().
+	 */
+	protected void closeResultSet(ResultSet rs) {
+		try {
+			rs.close();
+		}
+		catch (SQLException e) {
+		}
+	}
+
+	/**
+	 * Processes a single row in the result set. By default, this method invokes
+	 * createCatalog() followed by initialize(), finally returning the newly
+	 * created, initialized Catalog object.
+	 * 
+	 * @param rs the result set
+	 * @return a new Catalog object
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected Catalog processRow(ResultSet rs) throws SQLException {
+		Catalog catalog = createCatalog();
+		initialize(catalog, rs);
+		return catalog;
+	}
+
+	/**
+	 * Returns a new Catalog object. By default, this method returns a new
+	 * JDBCCatalog.
+	 * 
+	 * @return a new Catalog object.
+	 */
+	protected Catalog createCatalog() {
+		return new JDBCCatalog();
+	}
+
+	/**
+	 * Used to initialize a newly created catalog object. By default, this
+	 * method initializes the name of the Catalog. This method may be overridden
+	 * to initialize any vendor specific properties.
+	 * 
+	 * @param catalog a newly created Catalog object
+	 * @param rs the result set containing the information
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected void initialize(Catalog catalog, ResultSet rs)
+			throws SQLException {
+		catalog.setName(rs.getString(COLUMN_TABLE_CAT));
+	}
+
+	/**
+	 * Utility method.
+	 * 
+	 * @return returns the catalog object being operated upon as a Database
+	 *         (i.e. (Database) getCatalogObject()).
+	 */
+	protected Database getDatabase() {
+		return (Database) getCatalogObject();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCProcedureColumnLoader.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCProcedureColumnLoader.java
new file mode 100644
index 0000000..37d2baf
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCProcedureColumnLoader.java
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.loader;
+
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.modelbase.sql.routines.Parameter;
+import org.eclipse.datatools.modelbase.sql.routines.ParameterMode;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+
+/**
+ * Base loader implementation for loading a SP's parameter objects. This class
+ * may be specialized as necessary to meet a particular vendor's needs.
+ * 
+ * @since 1.0
+ */
+public class JDBCProcedureColumnLoader extends JDBCRoutineColumnLoader {
+
+	/**
+	 * This constructs the loader using no filtering.
+	 * 
+	 * @param catalogObject the Procedure object upon which this loader
+	 *        operates.
+	 */
+	public JDBCProcedureColumnLoader(ICatalogObject catalogObject) {
+		this(catalogObject, null);
+	}
+
+	/**
+	 * @param catalogObject the Procedure object upon which this loader
+	 *        operates.
+	 * @param connectionFilterProvider the filter provider used for filtering
+	 *        the "column" objects being loaded
+	 */
+	public JDBCProcedureColumnLoader(
+										ICatalogObject catalogObject,
+										IConnectionFilterProvider connectionFilterProvider) {
+		super(catalogObject, connectionFilterProvider);
+		if (catalogObject != null)
+			assert (catalogObject instanceof Procedure);
+	}
+
+	/**
+	 * Note, if a result set is returned by the SP, it will be added to the end
+	 * of the returned list.
+	 * 
+	 * @return a collection of Parameter objects
+	 * 
+	 * @throws SQLException if an error occurred during loading.
+	 * 
+	 * @deprecated see {@link #loadParameters(List, Collection)},
+	 *             {@link #loadRoutineResultTables()}
+	 */
+	public List loadColumns() throws SQLException {
+		List retVal = new ArrayList();
+		loadParameters(retVal, Collections.EMPTY_SET);
+		List routineResultTables = loadRoutineResultTables();
+		if (routineResultTables.size() > 0) {
+			retVal.add(routineResultTables.get(0));
+		}
+		return retVal;
+	}
+
+	/**
+	 * Used to initialize a newly created parameter object. By default, this
+	 * method initializes the name, description, type and direction
+	 * (in/out/inout). This method may be overridden to initialize any vendor
+	 * specific properties.
+	 * 
+	 * @param parameter a newly created Parameter object
+	 * @param rs the result set containing the information
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected void initParameter(Parameter parameter, ResultSet rs)
+			throws SQLException {
+		parameter.setName(rs.getString(COLUMN_COLUMN_NAME));
+		parameter.setDescription(rs.getString(COLUMN_REMARKS));
+		switch (rs.getShort(COLUMN_COLUMN_TYPE)) {
+		case DatabaseMetaData.procedureColumnIn:
+			parameter.setMode(ParameterMode.IN_LITERAL);
+			break;
+		case DatabaseMetaData.procedureColumnInOut:
+			parameter.setMode(ParameterMode.INOUT_LITERAL);
+			break;
+		case DatabaseMetaData.procedureColumnOut:
+			parameter.setMode(ParameterMode.OUT_LITERAL);
+			break;
+		case DatabaseMetaData.procedureColumnReturn: // Shouldn't happen
+			// TODO: log error
+		case DatabaseMetaData.procedureColumnUnknown:
+		default:
+			// Default to in
+			parameter.setMode(ParameterMode.IN_LITERAL);
+			break;
+		}
+		initType(parameter, rs);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCRoutineColumnLoader.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCRoutineColumnLoader.java
new file mode 100644
index 0000000..3a7b1df
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCRoutineColumnLoader.java
@@ -0,0 +1,691 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.loader;
+
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCColumn;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCParameter;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.routines.Parameter;
+import org.eclipse.datatools.modelbase.sql.routines.ParameterMode;
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.datatools.modelbase.sql.routines.RoutineResultTable;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesFactory;
+import org.eclipse.datatools.modelbase.sql.schema.Catalog;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.schema.TypedElement;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import com.ibm.icu.text.MessageFormat;
+
+/**
+ * Base loader implementation for loading a SP's parameter objects. This class
+ * may be specialized as necessary to meet a particular vendor's needs.
+ * 
+ * @since 1.0
+ */
+public class JDBCRoutineColumnLoader extends JDBCBaseLoader {
+
+	/**
+	 * The column name containing the column's name.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getProcedureColumns()
+	 */
+	public static final String COLUMN_COLUMN_NAME = "COLUMN_NAME"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the column's type.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getProcedureColumns()
+	 */
+	public static final String COLUMN_COLUMN_TYPE = "COLUMN_TYPE"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the column's data type.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getProcedureColumns()
+	 */
+	public static final String COLUMN_DATA_TYPE = "DATA_TYPE"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the column's type name.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getProcedureColumns()
+	 */
+	public static final String COLUMN_TYPE_NAME = "TYPE_NAME"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the column's precision.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getProcedureColumns()
+	 */
+	public static final String COLUMN_PRECISION = "PRECISION"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the column's length.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getProcedureColumns()
+	 */
+	public static final String COLUMN_LENGTH = "LENGTH"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the column's scale.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getProcedureColumns()
+	 */
+	public static final String COLUMN_SCALE = "SCALE"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the column's nullable attribute.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getProcedureColumns()
+	 */
+	public static final String COLUMN_NULLABLE = "NULLABLE"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the column's remarks.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getProcedureColumns()
+	 */
+	public static final String COLUMN_REMARKS = "REMARKS"; //$NON-NLS-1$
+
+	private Pattern mUDTNameMatcherPattern;
+	private boolean mCatalogAtStart;
+
+	/**
+	 * This constructs the loader using no filtering.
+	 * 
+	 * @param catalogObject the Procedure object upon which this loader
+	 *        operates.
+	 */
+	public JDBCRoutineColumnLoader(ICatalogObject catalogObject) {
+		this(catalogObject, null);
+	}
+
+	/**
+	 * @param catalogObject the Procedure object upon which this loader
+	 *        operates.
+	 * @param connectionFilterProvider the filter provider used for filtering
+	 *        the "column" objects being loaded
+	 */
+	public JDBCRoutineColumnLoader(
+										ICatalogObject catalogObject,
+										IConnectionFilterProvider connectionFilterProvider) {
+		super(catalogObject, connectionFilterProvider);
+		if (catalogObject != null)
+			assert (catalogObject instanceof Routine);
+	}
+
+	/**
+	 * Loads the "parameter" objects for the SP. This method uses the result set
+	 * from createParametersResultSet() to load the "parameter" objects from the server.
+	 * Row handling for the result set is delegated to processRow(). Parameter
+	 * objects are created using the factory method, createParameter().
+	 * 
+	 * This method should only be overridden as a last resort when the desired
+	 * behavior cannot be acheived by overriding other methods.
+	 * 
+	 * @return List of Parameter objects.
+	 * 
+	 * @throws SQLException if anything goes wrong
+	 */
+	public void loadParameters(List parameterContainmentList,
+			Collection existingParameters) throws SQLException {
+		ResultSet rs = null;
+		try {
+			initActiveFilter();
+			for (rs = createParametersResultSet(); rs.next();) {
+				if (!isParameter(rs)) {
+					continue;
+				}
+				String parameterName = rs.getString(COLUMN_COLUMN_NAME);
+				if (parameterName == null || isFiltered(parameterName)) {
+					continue;
+				}
+				Parameter parameter = (Parameter) getAndRemoveSQLObject(
+						existingParameters, parameterName);
+				if (parameter == null) {
+					parameter = processParameterColumnRow(rs);
+					if (parameter != null) {
+						parameterContainmentList.add(parameter);
+					}
+				}
+				else {
+					initParameter(parameter, rs);
+					parameterContainmentList.add(parameter);
+					if (parameter instanceof ICatalogObject) {
+						((ICatalogObject) parameter).refresh();
+					}
+				}
+			}
+		}
+		finally {
+			if (rs != null) {
+				closeParametersResultSet(rs);
+			}
+		}
+	}
+
+	/**
+	 * Loads the "routine result table" objects for the SP. This method uses the
+	 * result set from createRoutineResultTableResultSet() to load the "routine result table"
+	 * objects from the server. Row handling for the result set is delegated to
+	 * processRoutineResultTableColumnRow().
+	 * 
+	 * This method should only be overridden as a last resort when the desired
+	 * behavior cannot be acheived by overriding other methods.
+	 * 
+	 * @return List of Parameter objects.
+	 * 
+	 * @throws SQLException if anything goes wrong
+	 */
+	public List loadRoutineResultTables() throws SQLException {
+		ResultSet rs = null;
+		try {
+			List retVal = new ArrayList();
+			initActiveFilter();
+			for (rs = createRoutineResultTableResultSet(); rs.next();) {
+				if (isParameter(rs)) {
+					continue;
+				}
+				int resultTableIndex = getRoutineResultTableIndex(rs);
+				if (resultTableIndex >= retVal.size()) {
+					while (retVal.size() <= resultTableIndex) {
+						retVal.add(null);
+					}
+				}
+				
+				RoutineResultTable rst = (RoutineResultTable) retVal
+						.get(resultTableIndex);
+				if (rst == null) {
+					rst = createRoutineResultTable();
+					initRoutineResultTable(rst, rs);
+					retVal.set(resultTableIndex, rst);
+				}
+				Column column = processRoutineResultTableColumnRow(rs);
+				if (column != null) {
+					rst.getColumns().add(column);
+				}
+			}
+			return retVal;
+		}
+		finally {
+			if (rs != null) {
+				closeRoutineResultTableResultSet(rs);
+			}
+		}
+	}
+
+	/**
+	 * @param columns removes the parameters.
+	 */
+	public void clearColumns(List columns) {
+		columns.clear();
+	}
+
+	/**
+	 * Creates a result set containing the procedure parameters which will be
+	 * used by the loading logic. The default version uses of the JDBC
+	 * DatabaseMetaData.getProcedureColumns() to create the result set. This
+	 * method may be overridden to use a vendor specific query. However, the
+	 * default logic requires columns named according to the "COLUMN_*" fields.
+	 * Keep this in mind if you plan to reuse the default logic (e.g.
+	 * initialize())
+	 * 
+	 * @return a result containing the information used to initialize Parameter
+	 *         objects
+	 * 
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected ResultSet createParametersResultSet() throws SQLException {
+		try {
+			Routine routine = getRoutine();
+			Schema schema = routine.getSchema();
+			return getCatalogObject().getConnection().getMetaData()
+					.getProcedureColumns(schema.getCatalog().getName(),
+							schema.getName(), routine.getName(), null);
+		}
+		catch (RuntimeException e) {
+			SQLException error = new SQLException(
+					MessageFormat
+							.format(
+									Messages.Error_Unsupported_DatabaseMetaData_Method,
+									new Object[] { "java.sql.DatabaseMetaData.getProcedureColumns()"})); //$NON-NLS-1$
+			error.initCause(e);
+			throw error;
+		}
+	}
+
+	/**
+	 * Creates a result set containing result table columns which will be used
+	 * by the loading logic. The default version uses of the JDBC
+	 * DatabaseMetaData.getProcedureColumns() to create the result set. This
+	 * method may be overridden to use a vendor specific query. However, the
+	 * default logic requires columns named according to the "COLUMN_*" fields.
+	 * Keep this in mind if you plan to reuse the default logic (e.g.
+	 * initialize())
+	 * 
+	 * @return a result containing the information used to initialize Parameter
+	 *         objects
+	 * 
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected ResultSet createRoutineResultTableResultSet() throws SQLException {
+		return createParametersResultSet();
+	}
+
+	/**
+	 * Closes the result set used for catalog object loading. This method is
+	 * implemented as rs.close(). However, if you used a Statement object to
+	 * create the result set, this is where you would close that Statement.
+	 * 
+	 * @param rs the result set to close. This will be the result set created by
+	 *        createResultSet().
+	 */
+	protected void closeParametersResultSet(ResultSet rs) {
+		try {
+			rs.close();
+		}
+		catch (SQLException e) {
+		}
+	}
+
+	/**
+	 * Closes the result set used for catalog object loading. This method is
+	 * implemented as rs.close(). However, if you used a Statement object to
+	 * create the result set, this is where you would close that Statement.
+	 * 
+	 * @param rs the result set to close. This will be the result set created by
+	 *        createResultSet().
+	 */
+	protected void closeRoutineResultTableResultSet(ResultSet rs) {
+		try {
+			rs.close();
+		}
+		catch (SQLException e) {
+		}
+	}
+
+	/**
+	 * Processes a single row in the result set. This method invokes
+	 * createParameter(), followed by initParameter(), finally returning the
+	 * newly created, initialized Parameter object.
+	 * 
+	 * @param rs the result set
+	 * @return a new Parameter object
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected Parameter processParameterColumnRow(ResultSet rs)
+			throws SQLException {
+		Parameter retVal = createParameter();
+		initParameter(retVal, rs);
+		return retVal;
+	}
+	
+	/**
+	 * Processes a single row in the result set. This method invokes
+	 * createColumn(), followed by initColumn(), finally returning the newly
+	 * created, initialized Column object.
+	 * 
+	 * @param rs the result set
+	 * @return a new Column object
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected Column processRoutineResultTableColumnRow(ResultSet rs)
+			throws SQLException {
+		Column retVal = createColumn();
+		initColumn(retVal, rs);
+		return retVal;
+	}
+	
+	/**
+	 * Used to determine whether or not the data in the current row represents a
+	 * parameter or a result set column. This logic is required when processing
+	 * results from DatabaseMetaData.getProcedureColumns(). This method returns
+	 * the following:
+	 * 
+	 * rs.getShort(COLUMN_COLUMN_TYPE) != DatabaseMetaData.procedureColumnResult
+	 * 
+	 * @param rs the result set
+	 * @return true if the data in the current row represents a parameter.
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected boolean isParameter(ResultSet rs) throws SQLException {
+		return rs.getShort(COLUMN_COLUMN_TYPE) != DatabaseMetaData.procedureColumnResult;
+	}
+
+	/**
+	 * @return a new Parameter object. Default is ParameterImpl.
+	 */
+	protected Parameter createParameter() {
+		return new JDBCParameter();
+	}
+
+	/**
+	 * @return a new Column object. Default is ColumnImpl.
+	 */
+	protected Column createColumn() {
+		return new JDBCColumn();
+	}
+
+	/**
+	 * @return a new RoutineResultTable object. Default is
+	 *         RoutineResultTableImpl.
+	 */
+	protected RoutineResultTable createRoutineResultTable() {
+		return SQLRoutinesFactory.eINSTANCE.createRoutineResultTable();
+	}
+	
+	/**
+	 * Returns the zero based index of the result table referenced by the data
+	 * in the current row of the result set.
+	 * 
+	 * The default implementation always returns zero as
+	 * DatabaseMetaData.getProcedureColumns() does not provide information about
+	 * the result tables (just the columns within them).
+	 * 
+	 * @param rs the result set
+	 * 
+	 * @return the corresponding, zero based index.
+	 */
+	protected int getRoutineResultTableIndex(ResultSet rs) {
+		return 0;
+	}
+
+	/**
+	 * Used to initialize a newly created parameter object. By default, this
+	 * method initializes the name, description, type and direction
+	 * (in/out/inout). This method may be overridden to initialize any vendor
+	 * specific properties.
+	 * 
+	 * @param parameter a newly created Parameter object
+	 * @param rs the result set containing the information
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected void initParameter(Parameter parameter, ResultSet rs)
+			throws SQLException {
+		parameter.setName(rs.getString(COLUMN_COLUMN_NAME));
+		parameter.setDescription(rs.getString(COLUMN_REMARKS));
+		switch (rs.getShort(COLUMN_COLUMN_TYPE)) {
+		case DatabaseMetaData.procedureColumnIn:
+			parameter.setMode(ParameterMode.IN_LITERAL);
+			break;
+		case DatabaseMetaData.procedureColumnInOut:
+			parameter.setMode(ParameterMode.INOUT_LITERAL);
+			break;
+		case DatabaseMetaData.procedureColumnOut:
+			parameter.setMode(ParameterMode.OUT_LITERAL);
+			break;
+		case DatabaseMetaData.procedureColumnReturn:
+			parameter.setMode(ParameterMode.OUT_LITERAL);
+			break;
+		case DatabaseMetaData.procedureColumnUnknown:
+		default:
+			// Default to in
+			parameter.setMode(ParameterMode.IN_LITERAL);
+			break;
+		}
+		initType(parameter, rs);
+	}
+
+	/**
+	 * Used to initialize a newly created column object. By default, this method
+	 * initializes the name, description, type and nullable. This method may be
+	 * overridden to initialize any vendor specific properties.
+	 * 
+	 * @param column a newly created Column object
+	 * @param rs the result set containing the information
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected void initColumn(Column column, ResultSet rs) throws SQLException {
+		column.setName(rs.getString(COLUMN_COLUMN_NAME));
+		column.setDescription(rs.getString(COLUMN_REMARKS));
+
+		initType(column, rs);
+
+		column
+				.setNullable(rs.getInt(COLUMN_NULLABLE) == DatabaseMetaData.attributeNullable);
+	}
+	
+	/**
+	 * Used to initialize a newly created result table object. By default, this
+	 * method does noting. This method may be overridden to initialize any
+	 * vendor specific properties.
+	 * 
+	 * @param resultTable a newly created RoutineResultTable object
+	 * @param rs the result set containing the information
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected void initRoutineResultTable(RoutineResultTable resultTable,
+			ResultSet rs) {
+	}
+
+	/**
+	 * Initializes the type of the Parameter or Column object. This method will
+	 * resolve any dependencies necessary depending on whether the object is
+	 * typed as a user defined type or predefined data type.
+	 * 
+	 * @param element a Parameter or Column
+	 * @param rs the result set containing the information
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected void initType(TypedElement element, ResultSet rs)
+			throws SQLException {
+		// db definition types are always upper case: make sure the typeName is
+		// upper too
+		String typeName = rs.getString(COLUMN_TYPE_NAME).toUpperCase();
+		int typeCode = rs.getInt(COLUMN_DATA_TYPE);
+
+		// See if it's a predefined type
+		List pdtds = getDatabaseDefinition()
+				.getPredefinedDataTypeDefinitionsByJDBCEnumType(typeCode);
+		if (pdtds.size() > 0) {
+			PredefinedDataTypeDefinition pdtd = null;
+			for (Iterator it = pdtds.iterator(); pdtd == null && it.hasNext();) {
+				PredefinedDataTypeDefinition curPDTD = (PredefinedDataTypeDefinition) it
+						.next();
+				for (Iterator nameIt = curPDTD.getName().iterator(); nameIt
+						.hasNext();) {
+					String name = (String) nameIt.next();
+					if (typeName.equals(name)) {
+						pdtd = curPDTD;
+						break;
+					}
+				}
+			}
+
+			if (pdtd == null) {
+				// See if we can find one for the named type
+				pdtd = getDatabaseDefinition().getPredefinedDataTypeDefinition(
+						typeName);
+			}
+
+			if (pdtd != null
+					|| (pdtd == null && typeCode != Types.OTHER && typeCode != Types.REF)) {
+				if (pdtd == null) {
+					// Use the first element by default
+					pdtd = (PredefinedDataTypeDefinition) pdtds.get(0);
+				}
+
+				PredefinedDataType pdt = getDatabaseDefinition()
+						.getPredefinedDataType(pdtd);
+				if (pdtd.isLengthSupported()) {
+					EStructuralFeature feature = pdt.eClass()
+							.getEStructuralFeature("length"); //$NON-NLS-1$
+					pdt.eSet(feature, new Integer(rs.getInt(COLUMN_LENGTH)));
+				}
+				if (pdtd.isPrecisionSupported()) {
+					EStructuralFeature feature = pdt.eClass()
+							.getEStructuralFeature("precision"); //$NON-NLS-1$
+					pdt.eSet(feature, new Integer(rs.getInt(COLUMN_PRECISION)));
+				}
+				if (pdtd.isScaleSupported()) {
+					EStructuralFeature feature = pdt.eClass()
+							.getEStructuralFeature("scale"); //$NON-NLS-1$
+					pdt.eSet(feature, new Integer(rs.getInt(COLUMN_SCALE)));
+				}
+				element.setDataType(pdt);
+				return;
+			}
+		}
+
+		if (typeName == null) {
+			element.setDataType(null);
+			return;
+		}
+
+		// see if we can locate a UDT
+		UserDefinedType udt = findUserDefinedType(typeName);
+		element.setDataType(udt);
+	}
+
+	/**
+	 * Utility method.
+	 * 
+	 * @return returns the catalog object being operated upon as a Routine
+	 *         (i.e. (Routine) getCatalogObject()).
+	 */
+	protected Routine getRoutine() {
+		return (Routine) getCatalogObject();
+	}
+
+	/**
+	 * Utility method. Retrieves the DatabaseDefinition that applies to the
+	 * catalog object.
+	 * 
+	 * @return the DatabaseDefinition for the catalog object
+	 */
+	protected DatabaseDefinition getDatabaseDefinition() {
+		return RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry()
+				.getDefinition(getCatalogObject().getCatalogDatabase());
+	}
+
+	/**
+	 * Utility method. This method is used to create a Matcher that will be used
+	 * for finding a referenced UDT. The Matcher accounts for the naming scheme
+	 * used by the database (e.g. whether the catalog name is placed at the
+	 * beginning or end of a fully qualified object name).
+	 * 
+	 * @param name the UDT name
+	 * @return a Matcher
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected Matcher getUDTNameMatcher(String name) throws SQLException {
+		if (mUDTNameMatcherPattern == null) {
+			// pattern match
+			// catalog at start
+			// <catalog><catalog separator><schema name><unknown separator><udt
+			// name>
+			// <schema name><unknown separator><udt name><catalog
+			// separator><catalog>
+			DatabaseMetaData dbmd = getCatalogObject().getConnection()
+					.getMetaData();
+			String namePattern = "([a-zA-Z0-9_" + dbmd.getExtraNameCharacters()
+					+ "]*)";
+			String catalogSeparator = dbmd.getCatalogSeparator();
+			String regex = namePattern + "." + namePattern;
+			if (name.indexOf(catalogSeparator) < 0) {
+				regex = regex + "()";
+			}
+			else if (dbmd.isCatalogAtStart()) {
+				mCatalogAtStart = true;
+				regex = namePattern + catalogSeparator + regex;
+			}
+			else {
+				regex = regex + catalogSeparator + namePattern;
+			}
+			mUDTNameMatcherPattern = Pattern.compile(regex);
+		}
+		return mUDTNameMatcherPattern.matcher(name);
+	}
+
+	/**
+	 * Used by initType() to resolve a UDT.
+	 * 
+	 * @param typeName the UDT name being searched for
+	 * @return the UDT, if found; null otherwise.
+	 */
+	protected UserDefinedType findUserDefinedType(String typeName) {
+		Matcher matcher;
+		try {
+			matcher = getUDTNameMatcher(typeName);
+		}
+		catch (SQLException e) {
+			return null;
+		}
+
+		if (matcher.matches()) {
+			String catalogName;
+			String schemaName;
+			String udtName;
+			if (mCatalogAtStart) {
+				catalogName = matcher.group(1);
+				schemaName = matcher.group(2);
+				udtName = matcher.group(3);
+			}
+			else {
+				schemaName = matcher.group(1);
+				udtName = matcher.group(2);
+				catalogName = matcher.group(3);
+			}
+			if (udtName == null) {
+				return null;
+			}
+			if (catalogName == null) {
+				catalogName = new String();
+			}
+			if (schemaName == null) {
+				schemaName = new String();
+			}
+
+			Database db = getCatalogObject().getCatalogDatabase();
+			for (Iterator catIt = db.getCatalogs().iterator(); catIt.hasNext();) {
+				Catalog catalog = (Catalog) catIt.next();
+				if (catalogName.equals(catalog.getName())) {
+					for (Iterator schemIt = catalog.getSchemas().iterator(); schemIt
+							.hasNext();) {
+						Schema schema = (Schema) schemIt.next();
+						if (schemaName.equals(schema.getName())) {
+							for (Iterator udtIt = schema.getUserDefinedTypes()
+									.iterator(); udtIt.hasNext();) {
+								UserDefinedType udt = (UserDefinedType) udtIt
+										.next();
+								if (udtName.equals(udt.getName())) {
+									// found it
+									return udt;
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+		return null;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCRoutineLoader.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCRoutineLoader.java
new file mode 100644
index 0000000..0dcbd0c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCRoutineLoader.java
@@ -0,0 +1,420 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.loader;
+
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCProcedure;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCUserDefinedFunction;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.emf.ecore.EClass;
+
+import com.ibm.icu.text.MessageFormat;
+
+/**
+ * Base loader implementation for loading a database's routine (SP, UDF)
+ * objects. This class may be specialized as necessary to meet a particular
+ * vendor's needs.
+ * 
+ * @since 1.0
+ */
+public class JDBCRoutineLoader extends JDBCBaseLoader {
+
+	/**
+	 * The column name containing the routine's name.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getProcedures()
+	 */
+	public static final String COLUMN_PROCEDURE_NAME = "PROCEDURE_NAME"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the routine's description.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getProcedures()
+	 */
+	public static final String COLUMN_REMARKS = "REMARKS"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the routine's type (SP/UDF).
+	 * 
+	 * @see java.sql.DatabaseMetaData.getProcedures()
+	 */
+	public static final String COLUMN_PROCEDURE_TYPE = "PROCEDURE_TYPE"; //$NON-NLS-1$
+
+	private IRoutineFactory mUserDefinedFunctionFactory;
+	private IRoutineFactory mProcedureFactory;
+
+	/**
+	 * This constructs the loader using the default ProcedureFactory and
+	 * UserDefinedFunctionFactory and uses the
+	 * ConnectionFilter.STORED_PROCEDURE_FILTER filter.
+	 * 
+	 * @param catalogObject the Schema object upon which this loader operates.
+	 */
+	public JDBCRoutineLoader(ICatalogObject catalogObject) {
+		this(catalogObject, new SchemaObjectFilterProvider(
+				ConnectionFilter.STORED_PROCEDURE_FILTER));
+	}
+
+	/**
+	 * This constructs the loader using the default ProcedureFactory and
+	 * UserDefinedFunctionFactory.
+	 * 
+	 * @param catalogObject the Schema object upon which this loader operates.
+	 * @param connectionFilterProvider the filter provider used for filtering
+	 *        the "routine" objects being loaded
+	 */
+	public JDBCRoutineLoader(
+								ICatalogObject catalogObject,
+								IConnectionFilterProvider connectionFilterProvider) {
+		this(catalogObject, connectionFilterProvider,
+				new UserDefinedFunctionFactory(), new ProcedureFactory());
+	}
+
+	/**
+	 * @param catalogObject the Schema object upon which this loader operates.
+	 * @param connectionFilterProvider the filter provider used for filtering
+	 *        the "routine" objects being loaded
+	 * @param udfFactory factory for creating UDF objects
+	 * @param spFactory factory for creating SP objects
+	 */
+	public JDBCRoutineLoader(
+								ICatalogObject catalogObject,
+								IConnectionFilterProvider connectionFilterProvider,
+								IRoutineFactory udfFactory,
+								IRoutineFactory spFactory) {
+		super(catalogObject, connectionFilterProvider);
+		if (catalogObject != null)
+			assert (catalogObject instanceof Schema);
+
+		mUserDefinedFunctionFactory = udfFactory;
+		mProcedureFactory = spFactory;
+	}
+
+	/**
+	 * @return a collection of Routine objects
+	 * 
+	 * @throws SQLException if an error occurred during loading.
+	 * 
+	 * @deprecated see {@link #loadRoutines(List, Collection)}
+	 */
+	public List loadRoutines() throws SQLException {
+		List retVal = new ArrayList();
+		loadRoutines(retVal, Collections.EMPTY_SET);
+		return retVal;
+	}
+
+	/**
+	 * Loads the "routine" objects from the database. This method uses the
+	 * result set from createResultSet() to load the "routine" objects from the
+	 * server. This method first checks the name of the "routine" to determine
+	 * whether or not it should be filtered. If it is not filtered, it checks to
+	 * see if an object with that name was loaded previously. If it finds an
+	 * existing object, it refreshes that object and adds it to the containment
+	 * list. If the named object does not exist, the result set is passed
+	 * processRow(). Routine objects are created and initialized using one of
+	 * the registered factories.
+	 * 
+	 * This method should only be overridden as a last resort when the desired
+	 * behavior cannot be acheived by overriding createResultSet(),
+	 * closeResultSet(), processRow(), and a specialized SP and UDF factories.
+	 * 
+	 * @param containmentList the containment list held by parent
+	 * @param existingRoutines the catalog objects which were previously loaded
+	 * @throws SQLException if an error occurred during loading.
+	 */
+	public void loadRoutines(List containmentList, Collection existingRoutines)
+			throws SQLException {
+		ResultSet rs = null;
+		try {
+			initActiveFilter();
+			for (rs = createResultSet(); rs.next();) {
+				String routineName = rs.getString(COLUMN_PROCEDURE_NAME);
+				if (routineName == null || isFiltered(routineName)) {
+					continue;
+				}
+				Routine routine = (Routine) getAndRemoveSQLObject(
+						existingRoutines, routineName);
+				if (routine == null) {
+					routine = processRow(rs);
+					if (routine != null) {
+						containmentList.add(routine);
+					}
+				}
+				else {
+					if (isProcedure(rs)) {
+						mProcedureFactory.initialize(routine, rs);
+					}
+					else {
+						mUserDefinedFunctionFactory.initialize(routine, rs);
+					}
+					containmentList.add(routine);
+					if (routine instanceof ICatalogObject) {
+						((ICatalogObject) routine).refresh();
+					}
+				}
+			}
+		}
+		finally {
+			if (rs != null) {
+				closeResultSet(rs);
+			}
+		}
+	}
+
+	/**
+	 * Removes the specified routines from the model.
+	 * 
+	 * @param routines the routines to be removed from the model.
+	 */
+	public void clearRoutines(List routines) {
+		routines.clear();
+	}
+
+	/**
+	 * @return the procedure factory used by this object
+	 */
+	public IRoutineFactory getProcedureFactory() {
+		return mProcedureFactory;
+	}
+
+	/**
+	 * Sets the procedure factory used by this object
+	 */
+	public void setProcedureFactory(IRoutineFactory procedureFactory) {
+		mProcedureFactory = procedureFactory;
+	}
+
+	/**
+	 * Sets the UDF factory used by this object
+	 */
+	public IRoutineFactory getUserDefinedFunctionFactory() {
+		return mUserDefinedFunctionFactory;
+	}
+
+	/**
+	 * @return the UDF factory used by this object
+	 */
+	public void setUserDefinedFunctionFactory(
+			IRoutineFactory userDefinedFunctionFactory) {
+		mUserDefinedFunctionFactory = userDefinedFunctionFactory;
+	}
+
+	/**
+	 * Creates a result set to be used by the loading logic. The default version
+	 * uses of the JDBC DatabaseMetaData.getProcedures() to create the result
+	 * set. This method may be overridden to use a vendor specific query.
+	 * However, the default logic requires the columns named by the "COLUMN_*"
+	 * fields. Keep this in mind if you plan to reuse the default logic (e.g.
+	 * ProcedureFactory.initialize())
+	 * 
+	 * @return a result containing the information used to initialize Routine
+	 *         objects
+	 * 
+	 * @throws SQLException if an error occurs
+	 */
+	protected ResultSet createResultSet() throws SQLException {
+		try {
+			Schema schema = getSchema();
+			return getCatalogObject().getConnection().getMetaData()
+					.getProcedures(schema.getCatalog().getName(),
+							schema.getName(), getJDBCFilterPattern());
+		}
+		catch (RuntimeException e) {
+			SQLException error = new SQLException(
+					MessageFormat
+							.format(
+									Messages.Error_Unsupported_DatabaseMetaData_Method,
+									new Object[] { "java.sql.DatabaseMetaData.getProcedures()"})); //$NON-NLS-1$
+			error.initCause(e);
+			throw error;
+		}
+	}
+
+	/**
+	 * Closes the result set used for catalog object loading. This method is
+	 * implemented as rs.close(). However, if you used a Statement object to
+	 * create the result set, this is where you would close that Statement.
+	 * 
+	 * @param rs the result set to close. This will be the result set created by
+	 *        createResultSet().
+	 */
+	protected void closeResultSet(ResultSet rs) {
+		try {
+			rs.close();
+		}
+		catch (SQLException e) {
+		}
+	}
+
+	/**
+	 * Processes a single row in the result set. By default, this method
+	 * determines whether or not the routine is a SP or UDF and invokes
+	 * createRoutine() on the appropriate factory, returning the newly created,
+	 * initialized Routine object.
+	 * 
+	 * @param rs the result set
+	 * @return a new Routine object
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected Routine processRow(ResultSet rs) throws SQLException {
+		IRoutineFactory routineFactory = isProcedure(rs) ? mProcedureFactory
+				: mUserDefinedFunctionFactory;
+		return routineFactory.createRoutine(rs);
+	}
+
+	/**
+	 * Utility method.
+	 * 
+	 * @return returns the catalog object being operated upon as a Schema (i.e.
+	 *         (Schema) getCatalogObject()).
+	 */
+	protected Schema getSchema() {
+		return (Schema) getCatalogObject();
+	}
+
+	/**
+	 * Used by processRow() to determine whether or not the meta-data represents
+	 * a SP or UDF.
+	 * 
+	 * @param rs the result set
+	 * @return true if the meta-data represents a SP; fals if it represents a
+	 *         UDF
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected boolean isProcedure(ResultSet rs) throws SQLException {
+		return rs.getShort(COLUMN_PROCEDURE_TYPE) == DatabaseMetaData.procedureNoResult;
+	}
+
+	/**
+	 * Interface for providing creation logic for routines.
+	 */
+	public static interface IRoutineFactory {
+
+		/**
+		 * @return the EClass used to represent the routine objects created by
+		 *         this factory. This is used to identify existing objects in
+		 *         the model during a refresh (e.g. to reuse the object,
+		 *         preventing external references from breaking).
+		 */
+		EClass getRoutineEClass();
+
+		/**
+		 * Creates and initializes a routine object based on the meta-data in
+		 * the result set.
+		 * 
+		 * @param rs the result set
+		 * @return a new, initialized Routine object.
+		 * @throws SQLException if anything goes wrong
+		 */
+		Routine createRoutine(ResultSet rs) throws SQLException;
+		
+		/**
+		 * Initializes a routine object based on the meta-data in the result
+		 * set. The routine object may be a new routine requiring initialization
+		 * or an existing routine that is being reinitialized.
+		 * 
+		 * @param table the table to initialize
+		 * @param rs the result set
+		 * @throws SQLException if anything goes wrong
+		 */
+		void initialize(Routine routine, ResultSet rs) throws SQLException;
+	}
+
+	/**
+	 * Base factory implementation for SP.
+	 */
+	public static class ProcedureFactory implements IRoutineFactory {
+
+		/**
+		 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCRoutineLoader.IRoutineFactory#getRoutineEClass()
+		 * 
+		 * @return SQLRoutinesPackage.eINSTANCE.getProcedure()
+		 */
+		public EClass getRoutineEClass() {
+			return SQLRoutinesPackage.eINSTANCE.getProcedure();
+		}
+
+		/**
+		 * Creates and initializes a new Procedure object from the meta-data in
+		 * the result set.
+		 * 
+		 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCRoutineLoader.IRoutineFactory#createRoutine(java.sql.ResultSet)
+		 */
+		public Routine createRoutine(ResultSet rs) throws SQLException {
+			Routine retVal = newRoutine();
+			initialize(retVal, rs);
+			return retVal;
+		}
+
+		/**
+		 * Internal factory method. The default implementation returns a new
+		 * JDBCProcedure object.
+		 * 
+		 * @return a new Routine object
+		 */
+		protected Routine newRoutine() {
+			return new JDBCProcedure();
+		}
+
+		/**
+		 * Initializes the new Routine object using the meta-data in the result
+		 * set. This method initializes the name and description of the
+		 * procedure.
+		 * 
+		 * @param routine a new Routine object
+		 * @param rs the result set
+		 * @throws SQLException if anything goes wrong
+		 */
+		public void initialize(Routine routine, ResultSet rs)
+				throws SQLException {
+			routine.setName(rs.getString(COLUMN_PROCEDURE_NAME));
+			routine.setDescription(rs.getString(COLUMN_REMARKS));
+		}
+
+	}
+
+	/**
+	 * Base factory implementation for UDF.
+	 */
+	public static class UserDefinedFunctionFactory extends ProcedureFactory {
+
+		/**
+		 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCRoutineLoader.ProcedureFactory#getRoutineEClass()
+		 * 
+		 * @return SQLRoutinesPackage.eINSTANCE.getUserDefinedFunction()
+		 */
+		public EClass getRoutineEClass() {
+			return SQLRoutinesPackage.eINSTANCE.getUserDefinedFunction();
+		}
+
+		/**
+		 * Internal factory method. The default implementation returns a new
+		 * JDBCUserDefinedFunction object.
+		 * 
+		 * @return a new Routine object
+		 */
+		protected Routine newRoutine() {
+			return new JDBCUserDefinedFunction();
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCSchemaLoader.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCSchemaLoader.java
new file mode 100644
index 0000000..4cc5ecd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCSchemaLoader.java
@@ -0,0 +1,308 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2013 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *      rcernich - initial API and implementation
+ *      Actuate Corporation - re-factoring to expose method to sub-classes (BZ 348160)
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.loader;
+
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCSchema;
+import org.eclipse.datatools.modelbase.sql.schema.Catalog;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+
+import com.ibm.icu.text.MessageFormat;
+
+/**
+ * Base loader implementation for loading a database's schema objects. This
+ * class may be specialized as necessary to meet a particular vendor's needs.
+ */
+public class JDBCSchemaLoader extends JDBCBaseLoader {
+
+	/**
+	 * The column name containing the schema's name.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getSchemas()
+	 */
+	public static final String COLUMN_TABLE_SCHEM = "TABLE_SCHEM"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the schema's catalog name.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getSchemas()
+	 */
+	public static final String COLUMN_TABLE_CATALOG = "TABLE_CATALOG"; //$NON-NLS-1$
+
+	private Set mSupportedColumns;
+
+	/**
+	 * This constructs the loader using a SchemaFilterProvider filter.
+	 * 
+	 * @param catalogObject the Catalog object upon which this loader operates.
+	 */
+	public JDBCSchemaLoader(ICatalogObject catalogObject) {
+		this(catalogObject, new SchemaFilterProvider());
+	}
+
+	/**
+	 * @param catalogObject the Catalog object upon which this loader operates.
+	 * @param connectionFilterProvider the filter provider used for filtering
+	 *        the "schema" objects being loaded
+	 */
+	public JDBCSchemaLoader(ICatalogObject catalogObject,
+							IConnectionFilterProvider connectionFilterProvider) {
+		super(catalogObject, connectionFilterProvider);
+		if (catalogObject != null)
+			assert (catalogObject instanceof Catalog);
+	}
+
+	/**
+	 * @return a collection of Schema objects
+	 * 
+	 * @throws SQLException if an error occurred during loading.
+	 * 
+	 * @deprecated see {@link #loadSchemas(List, Collection)}
+	 */
+	public List loadSchemas() throws SQLException {
+		List retVal = new ArrayList();
+		loadSchemas(retVal, Collections.EMPTY_SET);
+		return retVal;
+	}
+
+	/**
+	 * Loads the "schema" objects from the database. This method uses the result
+	 * set from createResultSet() to load the "schema" objects from the server.
+	 * This method first checks the name of the "schema" to determine whether or
+	 * not it should be filtered. If it is not filtered, it checks to see if an
+	 * object with that name was loaded previously. If it finds an existing
+	 * object, it refreshes that object and adds it to the containment list. If
+	 * the named object does not exist, the result set is passed to
+	 * processRow(). Schema objects are created using the factory method,
+	 * createSchema() and initialized through the initialize() method.
+	 * 
+	 * This method should only be overridden as a last resort when the desired
+	 * behavior cannot be acheived by overriding createResultSet(),
+	 * closeResultSet(), processRow(), createSchema() and initialize().
+	 * 
+	 * @param containmentList the containment list held by parent
+	 * @param existingSchemas the catalog objects which were previously loaded
+	 * @throws SQLException if an error occurred during loading.
+	 */
+	public void loadSchemas(List containmentList, Collection existingSchemas)
+			throws SQLException {
+		ResultSet rs = null;
+		try {
+			initActiveFilter();
+			rs = createResultSet();
+			if (mSupportedColumns == null) {
+				mSupportedColumns = new TreeSet();
+				ResultSetMetaData rsmd = rs.getMetaData();
+				for (int colNum = 1, colCount = rsmd.getColumnCount(); colNum <= colCount; ++colNum) {
+					mSupportedColumns.add(rsmd.getColumnName(colNum));
+				}
+			}
+			while (rs.next()) {
+				if (!isSchemaInCatalog(rs)) {
+					continue;
+				}
+				String schemaName = rs.getString(COLUMN_TABLE_SCHEM);
+				if (schemaName == null || isFiltered(schemaName)) {
+					continue;
+				}
+				Schema schema = (Schema) getAndRemoveSQLObject(existingSchemas,
+						schemaName);
+				if (schema == null) {
+					schema = processRow(rs);
+					if (schema != null) {
+						containmentList.add(schema);
+					}
+				}
+				else {
+					containmentList.add(schema);
+					if (schema instanceof ICatalogObject) {
+						((ICatalogObject) schema).refresh();
+					}
+				}
+			}
+		}
+		finally {
+			if (rs != null) {
+				closeResultSet(rs);
+			}
+		}
+	}
+
+	/**
+	 * Removes the specified schema from the model.
+	 * 
+	 * @param schemas the schemas to be removed from the model.
+	 */
+	public void clearSchemas(List schemas) {
+		schemas.clear();
+	}
+
+	/**
+	 * Creates a result set to be used by the loading logic. The default version
+	 * uses of the JDBC DatabaseMetaData.getSchemas() to create the result set.
+	 * This method may be overridden to use a vendor specific query. However,
+	 * the default logic requires the columns named by the "COLUMN_*" fields.
+	 * Keep this in mind if you plan to reuse the default logic (e.g.
+	 * initialize())
+	 * 
+	 * @return a result containing the information used to initialize Schema
+	 *         objects
+	 * 
+	 * @throws SQLException if an error occurs
+	 */
+	protected ResultSet createResultSet() throws SQLException {
+		try {
+			return getCatalogObject().getConnection().getMetaData()
+					.getSchemas();
+		}
+		catch (RuntimeException e) {
+			SQLException error = new SQLException(MessageFormat.format(
+					Messages.Error_Unsupported_DatabaseMetaData_Method,
+					new Object[] { "java.sql.DatabaseMetaData.getSchemas()"})); //$NON-NLS-1$
+			error.initCause(e);
+			throw error;
+		}
+	}
+
+	/**
+	 * Closes the result set used for catalog object loading. This method is
+	 * implemented as rs.close(). However, if you used a Statement object to
+	 * create the result set, this is where you would close that Statement.
+	 * 
+	 * @param rs the result set to close. This will be the result set created by
+	 *        createResultSet().
+	 */
+	protected void closeResultSet(ResultSet rs) {
+		try {
+			rs.close();
+		}
+		catch (SQLException e) {
+		}
+	}
+
+	/**
+	 * Processes a single row in the result set. By default, this method invokes
+	 * createSchema() followed by initialize(), finally returning the newly
+	 * created, initialized Schema object.
+	 * 
+	 * @param rs the result set
+	 * @return a new Schema object
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected Schema processRow(ResultSet rs) throws SQLException {
+		Schema schema = createSchema();
+		initialize(schema, rs);
+		return schema;
+	}
+
+	/**
+	 * Returns true if the meta-data in the result set represents a schema
+	 * contained by the catalog being loaded. This is a by product of the JDBC
+	 * DatabaseMetaData.getSchemas() call not supporting filtering by catalog.
+	 * 
+	 * If you override createResultSet() to provide a result set specific to the
+	 * catalog being populated, you should override this method as well to
+	 * simply return true (just to save some processing).
+	 * 
+	 * @param rs the result set
+	 * @return true if the meta-data represents a schema in the catalog
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected boolean isSchemaInCatalog(ResultSet rs) throws SQLException {
+	    boolean caseSensitive = isCaseSensitive();
+	    
+		if (mSupportedColumns.contains(COLUMN_TABLE_CATALOG)) {
+			Catalog catalog = getCatalog();
+			String catalogName = rs.getString(COLUMN_TABLE_CATALOG);
+			if (catalogName != null) {
+			    if (caseSensitive) {
+			        return catalog.getName().equalsIgnoreCase (catalogName.toLowerCase ());
+			    } else {
+			        return catalog.getName().equals(catalogName);
+			    }
+			}
+		}
+
+		// NULL/No catalog found. Some databases only return the schema column.
+		return isCurrentCatalog( caseSensitive );
+	}
+	
+	private boolean isCaseSensitive() throws SQLException {
+        DatabaseMetaData databaseMetaData = getCatalogObject().getConnection().getMetaData ();
+	    return databaseMetaData.supportsMixedCaseIdentifiers () || databaseMetaData.supportsMixedCaseQuotedIdentifiers ();
+	}
+
+    /* 
+     * Check to see if the current catalog matches this catalog or
+     * if the current catalog does not exist and this is the catalog
+     * for objects without a catalog.
+	 */
+    protected boolean isCurrentCatalog() throws SQLException {
+        return isCurrentCatalog( null );
+    }
+
+	private boolean isCurrentCatalog( Boolean isCaseSensitive ) throws SQLException {
+	    if( isCaseSensitive == null )
+	        isCaseSensitive = isCaseSensitive();
+		
+		return (isCaseSensitive && getCatalog().getName().equals(getCatalogObject().getConnection().getCatalog()) 
+				|| !isCaseSensitive && getCatalog().getName ().equalsIgnoreCase (getCatalogObject().getConnection().getCatalog()))
+				|| (getCatalog().getName().length() == 0 && getCatalogObject()
+						.getConnection().getCatalog() == null);
+	}
+
+	/**
+	 * Returns a new Schema object. By default, this method returns a new
+	 * JDBCSchema.
+	 * 
+	 * @return a new Schema object.
+	 */
+	protected Schema createSchema() {
+		return new JDBCSchema();
+	}
+
+	/**
+	 * Used to initialize a newly created Schema object. By default, this method
+	 * initializes the name of the Schema. This method may be overridden to
+	 * initialize any vendor specific properties.
+	 * 
+	 * @param schema a newly created Schema object
+	 * @param rs the result set containing the information
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected void initialize(Schema schema, ResultSet rs) throws SQLException {
+		schema.setName(rs.getString(COLUMN_TABLE_SCHEM));
+	}
+
+	/**
+	 * Utility method.
+	 * 
+	 * @return returns the catalog object being operated upon as a Catalog (i.e.
+	 *         (Catalog) getCatalogObject()).
+	 */
+	protected Catalog getCatalog() {
+		return (Catalog) getCatalogObject();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCTableColumnLoader.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCTableColumnLoader.java
new file mode 100644
index 0000000..9bde395
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCTableColumnLoader.java
@@ -0,0 +1,646 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.loader;
+
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCColumn;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.ReferenceDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.StructuredUserDefinedType;
+import org.eclipse.datatools.modelbase.sql.datatypes.TimeDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.schema.Catalog;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import com.ibm.icu.text.MessageFormat;
+
+/**
+ * Base loader implementation for loading a table's column objects. This class
+ * may be specialized as necessary to meet a particular vendor's needs.
+ * 
+ * @since 1.0
+ */
+public class JDBCTableColumnLoader extends JDBCBaseLoader {
+
+	/**
+	 * The column name containing the column's name.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getColumns()
+	 */
+	public static final String COLUMN_COLUMN_NAME = "COLUMN_NAME"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the column's data type.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getColumns()
+	 */
+	public static final String COLUMN_DATA_TYPE = "DATA_TYPE"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the column's type name.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getColumns()
+	 */
+	public static final String COLUMN_TYPE_NAME = "TYPE_NAME"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the column's size.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getColumns()
+	 */
+	public static final String COLUMN_COLUMN_SIZE = "COLUMN_SIZE"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the column's decimal digits.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getColumns()
+	 */
+	public static final String COLUMN_DECIMAL_DIGITS = "DECIMAL_DIGITS"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the column's nullable attribute.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getColumns()
+	 */
+	public static final String COLUMN_NULLABLE = "NULLABLE"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the column's description.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getColumns()
+	 */
+	public static final String COLUMN_REMARKS = "REMARKS"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the column's default value.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getColumns()
+	 */
+	public static final String COLUMN_COLUMN_DEF = "COLUMN_DEF"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the catalog name of the column's UDT reference
+	 * type.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getColumns()
+	 */
+	public static final String COLUMN_SCOPE_CATALOG = "SCOPE_CATALOG"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the schema name of the column's UDT reference
+	 * type.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getColumns()
+	 */
+	public static final String COLUMN_SCOPE_SCHEMA = "SCOPE_SCHEMA"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the table name of the column's UDT reference
+	 * type.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getColumns()
+	 */
+	public static final String COLUMN_SCOPE_TABLE = "SCOPE_TABLE"; //$NON-NLS-1$
+
+	private Pattern mUDTNameMatcherPattern;
+	private boolean mCatalogAtStart;
+
+	/**
+	 * This constructs the loader using no filtering.
+	 * 
+	 * @param catalogObject the Table object upon which this loader operates.
+	 */
+	public JDBCTableColumnLoader(ICatalogObject catalogObject) {
+		this(catalogObject, null);
+	}
+
+	/**
+	 * @param catalogObject the Table object upon which this loader operates.
+	 * @param connectionFilterProvider the filter provider used for filtering
+	 *        the "column" objects being loaded
+	 */
+	public JDBCTableColumnLoader(
+									ICatalogObject catalogObject,
+									IConnectionFilterProvider connectionFilterProvider) {
+		super(catalogObject, connectionFilterProvider);
+		if (catalogObject != null)
+			assert (catalogObject instanceof Table);
+	}
+
+	/**
+	 * @return a collection of Column objects
+	 * 
+	 * @throws SQLException if an error occurred during loading.
+	 * 
+	 * @deprecated see {@link #loadColumns(List, Collection)}
+	 */
+	public List loadColumns() throws SQLException {
+		List retVal = new ArrayList();
+		loadColumns(retVal, Collections.EMPTY_SET);
+		return retVal;
+	}
+
+	/**
+	 * Loads the "column" objects from the database. This method uses the result
+	 * set from createResultSet() to load the "column" objects from the server.
+	 * This method first checks the name of the "column" to determine whether or
+	 * not it should be filtered. If it is not filtered, it checks to see if an
+	 * object with that name was loaded previously. If it finds an existing
+	 * object, it refreshes that object and adds it to the containment list. If
+	 * the named object does not exist, the result set is passed to
+	 * processRow(). Column objects are created using the factory method,
+	 * createColumn() and initialized through the initialize() method.
+	 * 
+	 * This method should only be overridden as a last resort when the desired
+	 * behavior cannot be acheived by overriding createResultSet(),
+	 * closeResultSet(), processRow(), createColumn() and initialize().
+	 * 
+	 * @param containmentList the containment list held by parent
+	 * @param existingColumns the catalog objects which were previously loaded
+	 * 
+	 * @throws SQLException if an error occurred during loading.
+	 */
+	public void loadColumns(List containmentList, Collection existingColumns)
+			throws SQLException {
+		ResultSet rs = null;
+		try {
+			initActiveFilter();
+			for (rs = createResultSet(); rs.next();) {
+				String columnName = rs.getString(COLUMN_COLUMN_NAME);
+				if (columnName == null || isFiltered(columnName)) {
+					continue;
+				}
+				Column column = (Column) getAndRemoveSQLObject(existingColumns,
+						columnName);
+				if (column == null) {
+					column = processRow(rs);
+					if (column != null) {
+						containmentList.add(column);
+					}
+				}
+				else {
+					initialize(column, rs);
+					containmentList.add(column);
+					if (column instanceof ICatalogObject) {
+						((ICatalogObject) column).refresh();
+					}
+				}
+			}
+		}
+		finally {
+			if (rs != null) {
+				closeResultSet(rs);
+			}
+		}
+	}
+
+	/**
+	 * Removes the specified schema from the model.
+	 * 
+	 * @param schemas the schemas to be removed from the model.
+	 */
+	public void clearColumns(List columns) {
+		columns.clear();
+	}
+
+	/**
+	 * Creates a result set to be used by the loading logic. The default version
+	 * uses of the JDBC DatabaseMetaData.getColumns() to create the result set.
+	 * This method may be overridden to use a vendor specific query. However,
+	 * the default logic requires the columns named by the "COLUMN_*" fields.
+	 * Keep this in mind if you plan to reuse the default logic (e.g.
+	 * initialize())
+	 * 
+	 * @return a result containing the information used to initialize Column
+	 *         objects
+	 * 
+	 * @throws SQLException if an error occurs
+	 */
+	protected ResultSet createResultSet() throws SQLException {
+		try {
+			Table table = getTable();
+			Schema schema = table.getSchema();
+			return getCatalogObject().getConnection().getMetaData().getColumns(
+					schema.getCatalog().getName(), schema.getName(),
+					table.getName(), null);
+		}
+		catch (RuntimeException e) {
+			SQLException error = new SQLException(MessageFormat.format(
+					Messages.Error_Unsupported_DatabaseMetaData_Method,
+					new Object[] { "java.sql.DatabaseMetaData.getColumns()"})); //$NON-NLS-1$
+			error.initCause(e);
+			throw error;
+		}
+	}
+
+	/**
+	 * Closes the result set used for catalog object loading. This method is
+	 * implemented as rs.close(). However, if you used a Statement object to
+	 * create the result set, this is where you would close that Statement.
+	 * 
+	 * @param rs the result set to close. This will be the result set created by
+	 *        createResultSet().
+	 */
+	protected void closeResultSet(ResultSet rs) {
+		try {
+			rs.close();
+		}
+		catch (SQLException e) {
+		}
+	}
+
+	/**
+	 * Processes a single row in the result set. By default, this method invokes
+	 * createColumn() followed by initialize(), finally returning the newly
+	 * created, initialized Column object.
+	 * 
+	 * @param rs the result set
+	 * @return a new Column object
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected Column processRow(ResultSet rs) throws SQLException {
+		Column column = createColumn();
+		initialize(column, rs);
+		return column;
+	}
+
+	/**
+	 * Returns a new Column object. By default, this method returns a new
+	 * JDBCColumn.
+	 * 
+	 * @return a new Column object.
+	 */
+	protected Column createColumn() {
+		return new JDBCColumn();
+	}
+
+	/**
+	 * Used to initialize a newly created Column object. By default, this method
+	 * initializes the name, description, default value, data type and nullable
+	 * attribute of the Column. This method may be overridden to initialize any
+	 * vendor specific properties.
+	 * 
+	 * @param column a newly created Column object
+	 * @param rs the result set containing the information
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected void initialize(Column column, ResultSet rs) throws SQLException {
+		column.setName(rs.getString(COLUMN_COLUMN_NAME));
+		column.setDescription(rs.getString(COLUMN_REMARKS));
+		column.setDefaultValue(rs.getString(COLUMN_COLUMN_DEF));
+
+		initColumnType(column, rs);
+
+		column
+				.setNullable(rs.getInt(COLUMN_NULLABLE) == DatabaseMetaData.attributeNullable);
+	}
+
+	/**
+	 * Initializes the type of the Column object. This method will resolve any
+	 * dependencies necessary depending on whether the object is typed as a user
+	 * defined type or predefined data type.
+	 * 
+	 * @param column a Column
+	 * @param rs the result set containing the information
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected void initColumnType(Column column, ResultSet rs)
+			throws SQLException {
+		// db definition types are always upper case: make sure the typeName is
+		// upper too
+		String typeName = rs.getString(COLUMN_TYPE_NAME).toUpperCase();
+		int typeCode = rs.getInt(COLUMN_DATA_TYPE);
+
+		// See if it's a predefined type
+		List pdtds = getDatabaseDefinition()
+				.getPredefinedDataTypeDefinitionsByJDBCEnumType(typeCode);
+		if (pdtds.size() > 0) {
+			PredefinedDataTypeDefinition pdtd = null;
+			for (Iterator it = pdtds.iterator(); pdtd == null && it.hasNext();) {
+				PredefinedDataTypeDefinition curPDTD = (PredefinedDataTypeDefinition) it
+						.next();
+				for (Iterator nameIt = curPDTD.getName().iterator(); nameIt
+						.hasNext();) {
+					String name = (String) nameIt.next();
+					if (typeName.equals(name)) {
+						pdtd = curPDTD;
+						break;
+					}
+				}
+			}
+
+			if (pdtd == null) {
+				// See if we can find one for the named type
+				pdtd = getDatabaseDefinition().getPredefinedDataTypeDefinition(
+						typeName);
+			}
+
+			if (pdtd != null
+					|| (pdtd == null && typeCode != Types.OTHER && typeCode != Types.REF)) {
+				if (pdtd == null) {
+					// If we still couldn't find it, use the first element
+					// that maps to the JDBC type
+					pdtd = (PredefinedDataTypeDefinition) pdtds.get(0);
+				}
+
+				PredefinedDataType pdt = getDatabaseDefinition()
+						.getPredefinedDataType(pdtd);
+				if (pdtd.isLengthSupported()) {
+					EStructuralFeature feature = pdt.eClass()
+							.getEStructuralFeature("length"); //$NON-NLS-1$
+					pdt.eSet(feature,
+							new Integer(rs.getInt(COLUMN_COLUMN_SIZE)));
+				}
+				if (pdtd.isPrecisionSupported()) {
+					EStructuralFeature feature = null;
+				    if (pdt instanceof TimeDataType) {
+				        feature = pdt.eClass().getEStructuralFeature("fractionalSecondsPrecision"); //$NON-NLS-1$
+				    }
+				    else {
+				        feature = pdt.eClass().getEStructuralFeature("precision"); //$NON-NLS-1$
+				     }
+				     if (feature != null) {
+				          pdt.eSet(feature, new Integer(rs.getInt(COLUMN_COLUMN_SIZE)));                                        
+				     }
+				}
+				if (pdtd.isScaleSupported()) {
+					EStructuralFeature feature = pdt.eClass()
+							.getEStructuralFeature("scale"); //$NON-NLS-1$
+					if (feature != null) { // MISSING IF STATEMENT
+						pdt.eSet(feature, new Integer(rs
+							.getInt(COLUMN_DECIMAL_DIGITS)));
+					}
+				}
+				column.setDataType(pdt);
+				return;
+			}
+		}
+
+		// Couldn't find predefined type. Try looking for a ref or udt.
+		if (typeName == null) {
+			column.setDataType(null);
+			return;
+		}
+
+		// see if we can locate a UDT
+		if (Types.REF == typeCode) {
+			ReferenceDataType ref = createReferenceDataType();
+			if (ref == null) {
+				// TODO: Add some logging maybe?
+				column.setDataType(null);
+				return;
+			}
+			UserDefinedType udt = findUserDefinedType(typeName);
+			Table table = findScopedTable(rs.getString(COLUMN_SCOPE_CATALOG),
+					rs.getString(COLUMN_SCOPE_SCHEMA), rs
+							.getString(COLUMN_SCOPE_TABLE));
+			initReferenceDataType(ref, udt, table);
+			column.setDataType(ref);
+		}
+		else {
+			UserDefinedType udt = findUserDefinedType(typeName);
+			column.setDataType(udt);
+		}
+	}
+
+	/**
+	 * Creates a new ReferenceDataType. Default implementation returns null.
+	 * 
+	 * @return a new ReferenceDataType
+	 */
+	protected ReferenceDataType createReferenceDataType() {
+		return null;
+	}
+
+	/**
+	 * Initializes a new ReferenceDataType. Associates the specified UDT with
+	 * the new reference type.
+	 * 
+	 * @param ref a new reference data type
+	 * @param udt a structured user defined type
+	 * @param scopeTable the table to which the reference is scoped
+	 */
+	protected void initReferenceDataType(ReferenceDataType ref,
+			UserDefinedType udt, Table scopeTable) {
+		if (udt instanceof StructuredUserDefinedType) {
+			ref.setReferencedType((StructuredUserDefinedType) udt);
+		}
+		else {
+			// TODO: Add some logging?
+		}
+		ref.setScopeTable(scopeTable);
+	}
+
+	/**
+	 * Utility method.
+	 * 
+	 * @return returns the catalog object being operated upon as a Table (i.e.
+	 *         (Table) getCatalogObject()).
+	 */
+	protected Table getTable() {
+		return (Table) getCatalogObject();
+	}
+
+	/**
+	 * Utility method. Retrieves the DatabaseDefinition that applies to the
+	 * catalog object.
+	 * 
+	 * @return the DatabaseDefinition for the catalog object
+	 */
+	protected DatabaseDefinition getDatabaseDefinition() {
+		return RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry()
+				.getDefinition(getCatalogObject().getCatalogDatabase());
+	}
+
+	/**
+	 * Utility method. This method is used to create a Matcher that will be used
+	 * for finding a referenced UDT. The Matcher accounts for the naming scheme
+	 * used by the database (e.g. whether the catalog name is placed at the
+	 * beginning or end of a fully qualified object name).
+	 * 
+	 * @param name the UDT name
+	 * @return a Matcher
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected Matcher getUDTNameMatcher(String name) throws SQLException {
+		if (mUDTNameMatcherPattern == null) {
+			// pattern match
+			// catalog at start
+			// <catalog><catalog separator><schema name><unknown separator><udt
+			// name>
+			// <schema name><unknown separator><udt name><catalog
+			// separator><catalog>
+			DatabaseMetaData dbmd = getCatalogObject().getConnection()
+					.getMetaData();
+			String namePattern = "([a-zA-Z0-9_" + dbmd.getExtraNameCharacters()
+					+ "]*)";
+			String catalogSeparator = dbmd.getCatalogSeparator();
+			String regex = namePattern + "." + namePattern;
+			if (name.indexOf(catalogSeparator) < 0) {
+				regex = regex + "()";
+			}
+			else if (dbmd.isCatalogAtStart()) {
+				mCatalogAtStart = true;
+				regex = namePattern + catalogSeparator + regex;
+			}
+			else {
+				regex = regex + catalogSeparator + namePattern;
+			}
+			mUDTNameMatcherPattern = Pattern.compile(regex);
+		}
+		return mUDTNameMatcherPattern.matcher(name);
+	}
+
+	/**
+	 * Used by initType() to resolve a UDT.
+	 * 
+	 * @param typeName the UDT name being searched for
+	 * @return the UDT, if found; null otherwise.
+	 */
+	protected UserDefinedType findUserDefinedType(String typeName) {
+		Matcher matcher;
+		try {
+			matcher = getUDTNameMatcher(typeName);
+		}
+		catch (SQLException e) {
+			return null;
+		}
+
+		if (matcher.matches()) {
+			String catalogName;
+			String schemaName;
+			String udtName;
+			if (mCatalogAtStart) {
+				catalogName = matcher.group(1);
+				schemaName = matcher.group(2);
+				udtName = matcher.group(3);
+			}
+			else {
+				schemaName = matcher.group(1);
+				udtName = matcher.group(2);
+				catalogName = matcher.group(3);
+			}
+			if (udtName == null) {
+				return null;
+			}
+			if (catalogName == null) {
+				catalogName = new String();
+			}
+			if (schemaName == null) {
+				schemaName = new String();
+			}
+
+			Database db = getCatalogObject().getCatalogDatabase();
+			for (Iterator catIt = db.getCatalogs().iterator(); catIt.hasNext();) {
+				Catalog catalog = (Catalog) catIt.next();
+				if (catalogName.equals(catalog.getName())) {
+					for (Iterator schemIt = catalog.getSchemas().iterator(); schemIt
+							.hasNext();) {
+						Schema schema = (Schema) schemIt.next();
+						if (schemaName.equals(schema.getName())) {
+							for (Iterator udtIt = schema.getUserDefinedTypes()
+									.iterator(); udtIt.hasNext();) {
+								UserDefinedType udt = (UserDefinedType) udtIt
+										.next();
+								if (udtName.equals(udt.getName())) {
+									// found it
+									return udt;
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Resloves the table scoped to a referenced UDT.
+	 * 
+	 * @param catalogScope catalog containing the scoped table
+	 * @param schemaScope schema containing the scoped table
+	 * @param tableScope the scoped table's name
+	 * @return the scoped table; null if it couldn't be found
+	 */
+	protected Table findScopedTable(String catalogScope, String schemaScope,
+			String tableScope) {
+		if (tableScope == null) {
+			return null;
+		}
+		if (catalogScope == null) {
+			catalogScope = getTable().getSchema().getCatalog().getName();
+			try {
+				if (getCatalogObject().getConnection().getMetaData()
+						.supportsCatalogsInTableDefinitions()) {
+					catalogScope = new String();
+				}
+			}
+			catch (SQLException e) {
+				e.printStackTrace();
+			}
+		}
+		if (schemaScope == null) {
+			schemaScope = getTable().getSchema().getName();
+			try {
+				if (getCatalogObject().getConnection().getMetaData()
+						.supportsSchemasInTableDefinitions()) {
+					schemaScope = new String();
+				}
+			}
+			catch (SQLException e) {
+				e.printStackTrace();
+			}
+		}
+
+		Database db = getCatalogObject().getCatalogDatabase();
+		for (Iterator catIt = db.getCatalogs().iterator(); catIt.hasNext();) {
+			Catalog catalog = (Catalog) catIt.next();
+			if (catalogScope.equals(catalog.getName())) {
+				for (Iterator schemIt = catalog.getSchemas().iterator(); schemIt
+						.hasNext();) {
+					Schema schema = (Schema) schemIt.next();
+					if (schemaScope.equals(schema.getName())) {
+						for (Iterator tableIt = schema.getTables().iterator(); tableIt
+								.hasNext();) {
+							Table table = (Table) tableIt.next();
+							if (tableScope.equals(table.getName())) {
+								// found it
+								return table;
+							}
+						}
+					}
+				}
+			}
+		}
+		return null;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCTableConstraintLoader.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCTableConstraintLoader.java
new file mode 100644
index 0000000..521e148
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCTableConstraintLoader.java
@@ -0,0 +1,751 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.loader;
+
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCForeignKey;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCPrimaryKey;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCUniqueConstraint;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.constraints.PrimaryKey;
+import org.eclipse.datatools.modelbase.sql.constraints.UniqueConstraint;
+import org.eclipse.datatools.modelbase.sql.schema.Catalog;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.ReferentialActionType;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EAnnotation;
+
+import com.ibm.icu.text.MessageFormat;
+
+/**
+ * Base loader implementation for loading a table's constraint objects (e.g. PK,
+ * FK, etc.). This class may be specialized as necessary to meet a particular
+ * vendor's needs.
+ * 
+ * @since 1.0
+ */
+public class JDBCTableConstraintLoader extends JDBCBaseLoader {
+
+	/**
+	 * The column name containing the column's name.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getExportedKeys()
+	 */
+	public static final String COLUMN_COLUMN_NAME = "COLUMN_NAME"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the column's key sequence.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getExportedKeys()
+	 */
+	public static final String COLUMN_KEY_SEQ = "KEY_SEQ"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the primary key's name.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getExportedKeys()
+	 */
+	public static final String COLUMN_PK_NAME = "PK_NAME"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing a primary key's column name.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getExportedKeys()
+	 */
+	public static final String COLUMN_PKCOLUMN_NAME = "PKCOLUMN_NAME"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the primary key's catalog.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getImportedKeys()
+	 */
+	public static final String COLUMN_PKTABLE_CAT = "PKTABLE_CAT"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the primary key's schema.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getImportedKeys()
+	 */
+	public static final String COLUMN_PKTABLE_SCHEM = "PKTABLE_SCHEM"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the primary key's table.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getImportedKeys()
+	 */
+	public static final String COLUMN_PKTABLE_NAME = "PKTABLE_NAME"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the foreign key's name.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getImportedKeys()
+	 */
+	public static final String COLUMN_FKCOLUMN_NAME = "FKCOLUMN_NAME"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the constraint's update rule.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getImportedKeys()
+	 */
+	public static final String COLUMN_UPDATE_RULE = "UPDATE_RULE"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the constraint's delete rule.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getImportedKeys()
+	 */
+	public static final String COLUMN_DELETE_RULE = "DELETE_RULE"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the foreign key's name.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getImportedKeys()
+	 */
+	public static final String COLUMN_FK_NAME = "FK_NAME"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the constraint's deferrability.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getImportedKeys()
+	 */
+	public static final String COLUMN_DEFERRABILITY = "DEFERRABILITY"; //$NON-NLS-1$
+
+	/**
+	 * This constructs the loader using no filter.
+	 * 
+	 * @param catalogObject the Table object upon which this loader operates.
+	 */
+	public JDBCTableConstraintLoader(ICatalogObject catalogObject) {
+		this(catalogObject, null);
+	}
+
+	/**
+	 * @param catalogObject the Catalog object upon which this loader operates.
+	 * @param connectionFilterProvider the filter provider used for filtering
+	 *        the "constraint" objects being loaded
+	 */
+	public JDBCTableConstraintLoader(
+										ICatalogObject catalogObject,
+										IConnectionFilterProvider connectionFilterProvider) {
+		super(catalogObject, connectionFilterProvider);
+		if (catalogObject != null)
+			assert (catalogObject instanceof Table);
+	}
+
+	/**
+	 * @return the table's primary key
+	 * 
+	 * @throws SQLException if an error occurred during loading.
+	 * 
+	 * @deprecated see {@link #loadPrimaryKey(PrimaryKey)}
+	 */
+	public PrimaryKey loadPrimaryKey() throws SQLException {
+		return loadPrimaryKey(null);
+	}
+
+	/**
+	 * Loads the "primary key" object from the database. This method uses the
+	 * result set from createPrimaryKeyResultSet() to load the "primary key"
+	 * object from the server..
+	 * 
+	 * @param existingPK the existing primary key, if one exists.
+	 * @return the table's primary key
+	 * 
+	 * @throws SQLException if an error occurred during loading.
+	 */
+	public PrimaryKey loadPrimaryKey(PrimaryKey existingPK) throws SQLException {
+		ResultSet rs = null;
+		try {
+			Map columns = new TreeMap();
+			PrimaryKey pk = null;
+			for (rs = createPrimaryKeyResultSet(); rs.next();) {
+				if (pk == null) {
+					String pkName = rs.getString(COLUMN_PK_NAME);
+					if (pkName == null) {
+						return null;
+					}
+					if (existingPK != null
+							&& pkName.equals(existingPK.getName())) {
+						pk = existingPK;
+						pk.getMembers().clear();
+						if (existingPK instanceof ICatalogObject) {
+							((ICatalogObject) pk).refresh();
+						}
+					}
+					else {
+						pk = createPrimaryKey();
+						pk.setName(pkName);
+					}
+				}
+				columns.put(new Integer(rs.getShort(COLUMN_KEY_SEQ)),
+						findColumn(rs.getString(COLUMN_COLUMN_NAME)));
+			}
+			for (Iterator it = columns.values().iterator(); it.hasNext();) {
+				pk.getMembers().add(it.next());
+			}
+			return pk;
+		}
+		finally {
+			if (rs != null) {
+				closeResultSet(rs);
+			}
+		}
+	}
+
+	/**
+	 * @param pk the table's primary key. Used to prevent duplicating the PK
+	 *        constraint.
+	 * @return a collection of UniqueConstraint objects
+	 * 
+	 * @throws SQLException if an error occurred during loading.
+	 * 
+	 * @deprecated see
+	 *             {@link #loadUniqueConstraints(PrimaryKey, List, Collection)}
+	 */
+	public Collection loadUniqueConstraints(PrimaryKey pk) throws SQLException {
+		List retVal = new ArrayList();
+		loadUniqueConstraints(pk, retVal, Collections.EMPTY_SET);
+		return retVal;
+	}
+
+	/**
+	 * Loads the "unique constraint" objects from the database. This method uses
+	 * the result set from createUniqueConstraintResultSet() to load the "unique
+	 * constraint" objects from the server.
+	 * 
+	 * @param pk the table's primary key. Used to prevent duplicating the PK
+	 *        constraint.
+	 * @param containmentList the containment list held by parent
+	 * @param existingUCs the catalog objects which were previously loaded
+	 * 
+	 * @throws SQLException if an error occurred during loading.
+	 */
+	public void loadUniqueConstraints(PrimaryKey pk, List containmentList,
+			Collection existingUCs) throws SQLException {
+		ResultSet rs = null;
+		if (pk != null) {
+			// Remove this guy from the list.
+			existingUCs.remove(pk);
+		}
+		try {
+			Map constraints = new HashMap();
+			Map constraintColumns = new HashMap();
+			for (rs = createUniqueConstraintResultSet(); rs.next();) {
+				String ucName = rs.getString(COLUMN_PK_NAME);
+				if (ucName.equals(pk == null ? null : pk.getName())) {
+					// Already seen this guy
+					continue;
+				}
+				else if (!constraints.containsKey(ucName)) {
+					UniqueConstraint uc = (UniqueConstraint) getAndRemoveSQLObject(
+							existingUCs, ucName);
+					if (uc == null) {
+						// create the next UC
+						uc = createUniqueConstraint();
+						uc.setName(ucName);
+					}
+					else {
+						uc.getMembers().clear();
+						if (uc instanceof ICatalogObject) {
+							((ICatalogObject) uc).refresh();
+						}
+					}
+					containmentList.add(uc);
+					constraints.put(ucName, uc);
+					constraintColumns.put(ucName, new TreeMap());
+				}
+				((Map) constraintColumns.get(ucName)).put(new Integer(rs
+						.getShort(COLUMN_KEY_SEQ)), findColumn(rs
+						.getString(COLUMN_PKCOLUMN_NAME)));
+			}
+			for (Iterator it = constraints.entrySet().iterator(); it.hasNext();) {
+				Map.Entry entry = (Map.Entry) it.next();
+				UniqueConstraint uc = (UniqueConstraint) entry.getValue();
+				for (Iterator colIt = ((Map) constraintColumns
+						.get(uc.getName())).values().iterator(); colIt
+						.hasNext();) {
+					uc.getMembers().add(colIt.next());
+				}
+			}
+		}
+		finally {
+			if (rs != null) {
+				closeResultSet(rs);
+			}
+		}
+	}
+
+	/**
+	 * @return a collection of ForeignKey objects
+	 * 
+	 * @throws SQLException if an error occurred during loading.
+	 * 
+	 * @deprecated see {@link #loadForeignKeys(List, Collection)}
+	 */
+	public Collection loadForeignKeys() throws SQLException {
+		List retVal = new ArrayList();
+		loadForeignKeys(retVal, Collections.EMPTY_SET);
+		return retVal;
+	}
+
+	/**
+	 * Loads the "foreign key" objects from the database. This method uses the
+	 * result set from createUniqueConstraintResultSet() to load the "foreign
+	 * key" objects from the server.
+	 * 
+	 * @param containmentList the containment list held by parent
+	 * @param existingFKs the catalog objects which were previously loaded
+	 * @throws SQLException if an error occurred during loading.
+	 */
+	public void loadForeignKeys(List containmentList, Collection existingFKs)
+			throws SQLException {
+		ResultSet rs = null;
+		try {
+			Map constraints = new HashMap();
+			Map constraintColumns = new HashMap();
+			for (rs = createForeignKeyResultSet(); rs.next();) {
+				String fkName = rs.getString(COLUMN_FK_NAME);
+
+				if (!constraints.containsKey(fkName)) {
+					ForeignKey fk = (ForeignKey) getAndRemoveSQLObject(
+							existingFKs, fkName);
+					if (fk == null) {
+						// create the next FK
+						fk = createForeignKey();
+						fk.setName(fkName);
+					}
+					else {
+						fk.getMembers().clear();
+						if (fk instanceof ICatalogObject) {
+							((ICatalogObject) fk).refresh();
+						}
+					}
+					switch (rs.getShort(COLUMN_UPDATE_RULE)) {
+					case DatabaseMetaData.importedKeyCascade:
+						fk.setOnUpdate(ReferentialActionType.CASCADE_LITERAL);
+						break;
+					case DatabaseMetaData.importedKeyRestrict:
+						fk.setOnUpdate(ReferentialActionType.RESTRICT_LITERAL);
+						break;
+					case DatabaseMetaData.importedKeySetDefault:
+						fk
+								.setOnUpdate(ReferentialActionType.SET_DEFAULT_LITERAL);
+						break;
+					case DatabaseMetaData.importedKeySetNull:
+						fk.setOnUpdate(ReferentialActionType.SET_NULL_LITERAL);
+						break;
+					case DatabaseMetaData.importedKeyNoAction:
+					default:
+						fk.setOnUpdate(ReferentialActionType.NO_ACTION_LITERAL);
+						break;
+					}
+					switch (rs.getShort(COLUMN_DELETE_RULE)) {
+					case DatabaseMetaData.importedKeyCascade:
+						fk.setOnDelete(ReferentialActionType.CASCADE_LITERAL);
+						break;
+					case DatabaseMetaData.importedKeyRestrict:
+						fk.setOnDelete(ReferentialActionType.RESTRICT_LITERAL);
+						break;
+					case DatabaseMetaData.importedKeySetDefault:
+						fk
+								.setOnDelete(ReferentialActionType.SET_DEFAULT_LITERAL);
+						break;
+					case DatabaseMetaData.importedKeySetNull:
+						fk.setOnDelete(ReferentialActionType.SET_NULL_LITERAL);
+						break;
+					case DatabaseMetaData.importedKeyNoAction:
+					default:
+						fk.setOnDelete(ReferentialActionType.NO_ACTION_LITERAL);
+						break;
+					}
+					switch (rs.getShort(COLUMN_DEFERRABILITY)) {
+					case DatabaseMetaData.importedKeyInitiallyDeferred:
+						fk.setDeferrable(true);
+						fk.setInitiallyDeferred(true);
+						break;
+					case DatabaseMetaData.importedKeyInitiallyImmediate:
+						fk.setDeferrable(true);
+						fk.setInitiallyDeferred(false);
+						break;
+					case DatabaseMetaData.importedKeyNotDeferrable:
+					default:
+						fk.setDeferrable(false);
+						break;
+					}
+					UniqueConstraint uk = findUniqueConstraint(rs
+							.getString(COLUMN_PKTABLE_CAT), rs
+							.getString(COLUMN_PKTABLE_SCHEM), rs
+							.getString(COLUMN_PKTABLE_NAME), rs
+							.getString(COLUMN_PK_NAME));
+					if (uk == null) continue;
+					fk.setUniqueConstraint(uk);
+
+					containmentList.add(fk);
+					constraints.put(fkName, fk);
+					constraintColumns.put(fkName, new TreeMap());
+
+				}
+				((Map) constraintColumns.get(fkName)).put(new Integer(rs
+						.getShort(COLUMN_KEY_SEQ)), findColumn(rs
+						.getString(COLUMN_FKCOLUMN_NAME)));
+			}
+			for (Iterator it = constraints.entrySet().iterator(); it.hasNext();) {
+				Map.Entry entry = (Map.Entry) it.next();
+				ForeignKey fk = (ForeignKey) entry.getValue();
+				for (Iterator colIt = ((Map) constraintColumns
+						.get(fk.getName())).values().iterator(); colIt
+						.hasNext();) {
+					fk.getMembers().add(colIt.next());
+				}
+				initReferenceAnnotation(fk);
+			}
+		}
+		finally {
+			if (rs != null) {
+				closeResultSet(rs);
+			}
+		}
+	}
+
+	/**
+	 * Removes the specified constraints from the model.
+	 * 
+	 * @param constraintContainer the constraints container
+	 * @param remove the constraints to remove.
+	 */
+	public void clearConstraints(EList constraintContainer, List remove) {
+		constraintContainer.removeAll(remove);
+	}
+
+	/**
+	 * Creates a result set to be used by the primary key loading logic. The
+	 * default version uses of the JDBC DatabaseMetaData.getPrimaryKeys() to
+	 * create the result set. This method may be overridden to use a vendor
+	 * specific query. However, the default logic requires the columns named by
+	 * the "COLUMN_*" fields. Keep this in mind if you plan to reuse the default
+	 * logic (e.g. loadPrimaryKey()).
+	 * 
+	 * @return a result containing the information used to initialize PrimaryKey
+	 * 
+	 * @throws SQLException if an error occurs
+	 */
+	protected ResultSet createPrimaryKeyResultSet() throws SQLException {
+		try {
+			Table table = getTable();
+			Schema schema = table.getSchema();
+			return getCatalogObject().getConnection().getMetaData().getPrimaryKeys(
+					schema.getCatalog().getName(), schema.getName(),
+					table.getName());
+		}
+		catch (RuntimeException e) {
+			SQLException error = new SQLException(
+					MessageFormat
+							.format(
+									Messages.Error_Unsupported_DatabaseMetaData_Method,
+									new Object[] { "java.sql.DatabaseMetaData.getPrimaryKeys()"})); //$NON-NLS-1$
+			error.initCause(e);
+			throw error;
+		}
+	}
+
+	/**
+	 * Creates a result set to be used by the unique constraint loading logic.
+	 * The default version uses of the JDBC DatabaseMetaData.getExportedKeys()
+	 * to create the result set. This method may be overridden to use a vendor
+	 * specific query. However, the default logic requires the columns named by
+	 * the "COLUMN_*" fields. Keep this in mind if you plan to reuse the default
+	 * logic (e.g. loadUniqueConstraints()).
+	 * 
+	 * @return a result containing the information used to initialize
+	 *         UniqueConstraint objects
+	 * 
+	 * @throws SQLException if an error occurs
+	 */
+	protected ResultSet createUniqueConstraintResultSet() throws SQLException {
+		try {
+			Table table = getTable();
+			Schema schema = table.getSchema();
+			return getCatalogObject().getConnection().getMetaData()
+					.getExportedKeys(schema.getCatalog().getName(),
+							schema.getName(), table.getName());
+		}
+		catch (RuntimeException e) {
+			SQLException error = new SQLException(
+					MessageFormat
+							.format(
+									Messages.Error_Unsupported_DatabaseMetaData_Method,
+									new Object[] { "java.sql.DatabaseMetaData.getExportedKeys()"})); //$NON-NLS-1$
+			error.initCause(e);
+			throw error;
+		}
+	}
+
+	/**
+	 * Creates a result set to be used by the unique constraint loading logic.
+	 * The default version uses of the JDBC DatabaseMetaData.getExportedKeys()
+	 * to create the result set. This method may be overridden to use a vendor
+	 * specific query. However, the default logic requires the columns named by
+	 * the "COLUMN_*" fields. Keep this in mind if you plan to reuse the default
+	 * logic (e.g. loadForeignKeys()).
+	 * 
+	 * @return a result containing the information used to initialize ForeignKey
+	 *         objects
+	 * 
+	 * @throws SQLException if an error occurs
+	 */
+	protected ResultSet createForeignKeyResultSet() throws SQLException {
+		try {
+			Table table = getTable();
+			Schema schema = table.getSchema();
+			return getCatalogObject().getConnection().getMetaData()
+					.getImportedKeys(schema.getCatalog().getName(),
+							schema.getName(), table.getName());
+		}
+		catch (RuntimeException e) {
+			SQLException error = new SQLException(
+					MessageFormat
+							.format(
+									Messages.Error_Unsupported_DatabaseMetaData_Method,
+									new Object[] { "java.sql.DatabaseMetaData.getImportedKeys()"})); //$NON-NLS-1$
+			error.initCause(e);
+			throw error;
+		}
+	}
+
+	/**
+	 * Closes the result set used for catalog object loading. This method is
+	 * implemented as rs.close(). However, if you used a Statement object to
+	 * create the result set, this is where you would close that Statement.
+	 * 
+	 * @param rs the result set to close. This will be the result set created by
+	 *        createResultSet().
+	 */
+	protected void closeResultSet(ResultSet rs) {
+		try {
+			rs.close();
+		}
+		catch (SQLException e) {
+		}
+	}
+
+	/**
+	 * Returns a new PrimaryKey object. By default, this method returns a new
+	 * JDBCPrimaryKey.
+	 * 
+	 * @return a new PrimaryKey object.
+	 */
+	protected PrimaryKey createPrimaryKey() {
+		return new JDBCPrimaryKey();
+	}
+
+	/**
+	 * Returns a new UniqueConstraint object. By default, this method returns a
+	 * new JDBCUniqueConstraint.
+	 * 
+	 * @return a new UniqueConstraint object.
+	 */
+	protected UniqueConstraint createUniqueConstraint() {
+		return new JDBCUniqueConstraint();
+	}
+
+	/**
+	 * Returns a new ForeignKey object. By default, this method returns a new
+	 * JDBCForeignKey.
+	 * 
+	 * @return a new ForeignKey object.
+	 */
+	protected ForeignKey createForeignKey() {
+		return new JDBCForeignKey();
+	}
+
+	/**
+	 * Utility method.
+	 * 
+	 * @return returns the catalog object being operated upon as a Table (i.e.
+	 *         (Table) getCatalogObject()).
+	 */
+	protected Table getTable() {
+		return (Table) getCatalogObject();
+	}
+
+	/**
+	 * Initializes the reference annotations for the foreign key.
+	 * 
+	 * @param fk the foreign key to initialize
+	 */
+	protected void initReferenceAnnotation(ForeignKey fk) {
+		EAnnotation eAnnotation = fk
+				.addEAnnotation(RDBCorePlugin.FK_MODELING_RELATIONSHIP);
+		fk.addEAnnotationDetail(eAnnotation,
+				RDBCorePlugin.FK_IS_IDENTIFYING_RELATIONSHIP, new Boolean(
+						foreignKeyIsIdentifyingRelationship(fk)).toString());
+
+		fk.addEAnnotationDetail(eAnnotation,
+				RDBCorePlugin.FK_CHILD_MULTIPLICITY, RDBCorePlugin.MANY);
+		fk.addEAnnotationDetail(eAnnotation, RDBCorePlugin.FK_CHILD_ROLE_NAME,
+				new String());
+		fk.addEAnnotationDetail(eAnnotation,
+				RDBCorePlugin.FK_PARENT_MULTIPLICITY,
+				(fk.getMembers().size() > 0) ? RDBCorePlugin.ZERO_TO_ONE
+						: RDBCorePlugin.ONE);
+		fk.addEAnnotationDetail(eAnnotation, RDBCorePlugin.FK_PARENT_ROLE_NAME,
+				new String());
+	}
+
+	/**
+	 * @param fk the foreign key
+	 * @return true if one of the foreign key's columns is part of a table's
+	 *         primary key
+	 */
+	protected boolean foreignKeyIsIdentifyingRelationship(ForeignKey fk) {
+		boolean isIdentifying = true;
+
+		for (Iterator it = fk.getMembers().iterator(); it.hasNext();) {
+			Column column = (Column) it.next();
+			if (!column.isPartOfPrimaryKey()) {
+				isIdentifying = false;
+				break;
+			}
+		}
+
+		return isIdentifying;
+	}
+
+	/**
+	 * Returns the column object with the specified columnName.
+	 * 
+	 * @param columnName the name of the column to find.
+	 * 
+	 * @return the Column; null if the named column does not exist.
+	 */
+	protected Column findColumn(String columnName) {
+		if (columnName == null) {
+			return null;
+		}
+
+		for (Iterator it = getTable().getColumns().iterator(); it.hasNext();) {
+			Column column = (Column) it.next();
+			if (columnName.equals(column.getName())) {
+				return column;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the unique constraint for the catalog.schema.table.keyName.
+	 * 
+	 * @param catalogName the catalog name
+	 * @param schemaName the schema name
+	 * @param tableName the table name
+	 * @param keyName the key name
+	 * 
+	 * @return the UniqueConstraint; null if it does not exist.
+	 */
+	protected UniqueConstraint findUniqueConstraint(String catalogName,
+			String schemaName, String tableName, String keyName) {
+		if (keyName == null) {
+			return null;
+		}
+		Table table = findTable(catalogName, schemaName, tableName);
+		if (table == null || !(table instanceof BaseTable)) {
+			return null;
+		}
+		for (Iterator it = ((BaseTable) table).getUniqueConstraints()
+				.iterator(); it.hasNext();) {
+			UniqueConstraint uc = (UniqueConstraint) it.next();
+			if (keyName.equals(uc.getName())) {
+				return uc;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the table for the catalog.schema.table.
+	 * 
+	 * @param catalogName the containing catalog's name
+	 * @param schemaName the containing schema's name
+	 * @param tableName the table's name
+	 * 
+	 * @return the Table; null if it does not exit.
+	 */
+	protected Table findTable(String catalogName, String schemaName,
+			String tableName) {
+		if (tableName == null) {
+			return null;
+		}
+		if (catalogName == null) {
+			catalogName = getTable().getSchema().getCatalog().getName();
+			try {
+				if (getCatalogObject().getConnection().getMetaData()
+						.supportsCatalogsInTableDefinitions()) {
+					catalogName = new String();
+				}
+			}
+			catch (SQLException e) {
+				e.printStackTrace();
+			}
+		}
+		if (schemaName == null) {
+			schemaName = getTable().getSchema().getName();
+			try {
+				if (getCatalogObject().getConnection().getMetaData()
+						.supportsSchemasInTableDefinitions()) {
+					schemaName = new String();
+				}
+			}
+			catch (SQLException e) {
+				e.printStackTrace();
+			}
+		}
+
+		Database db = getCatalogObject().getCatalogDatabase();
+		for (Iterator catIt = db.getCatalogs().iterator(); catIt.hasNext();) {
+			Catalog catalog = (Catalog) catIt.next();
+			if (catalogName.equals(catalog.getName())) {
+				for (Iterator schemIt = catalog.getSchemas().iterator(); schemIt
+						.hasNext();) {
+					Schema schema = (Schema) schemIt.next();
+					if (schemaName.equals(schema.getName())) {
+						for (Iterator tableIt = schema.getTables().iterator(); tableIt
+								.hasNext();) {
+							Table table = (Table) tableIt.next();
+							if (tableName.equals(table.getName())) {
+								// found it
+								return table;
+							}
+						}
+					}
+				}
+			}
+		}
+		return null;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCTableIndexLoader.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCTableIndexLoader.java
new file mode 100644
index 0000000..4ebf750
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCTableIndexLoader.java
@@ -0,0 +1,382 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.loader;
+
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCIndex;
+import org.eclipse.datatools.modelbase.sql.constraints.IncrementType;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.IndexMember;
+import org.eclipse.datatools.modelbase.sql.constraints.SQLConstraintsFactory;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+
+import com.ibm.icu.text.MessageFormat;
+
+/**
+ * Base loader implementation for loading a table's index objects. This class
+ * may be specialized as necessary to meet a particular vendor's needs.
+ * 
+ * @since 1.0
+ */
+public class JDBCTableIndexLoader extends JDBCBaseLoader {
+
+	/**
+	 * The column name used to define the uniqueness of the columns in the
+	 * index.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getIndexInfo()
+	 */
+	public static final String COLUMN_NON_UNIQUE = "NON_UNIQUE"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing of the index catalog qualifier.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getIndexInfo()
+	 */
+	public static final String COLUMN_INDEX_QUALIFIER = "INDEX_QUALIFIER"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the index's name.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getIndexInfo()
+	 */
+	public static final String COLUMN_INDEX_NAME = "INDEX_NAME"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the index's type.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getIndexInfo()
+	 */
+	public static final String COLUMN_TYPE = "TYPE"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the index's column's name.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getIndexInfo()
+	 */
+	public static final String COLUMN_COLUMN_NAME = "COLUMN_NAME"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the index's sort order.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getIndexInfo()
+	 */
+	public static final String COLUMN_ASC_OR_DESC = "ASC_OR_DESC"; //$NON-NLS-1$
+
+	/**
+	 * Ascending index sort type.
+	 */
+	public static final String TYPE_ORDER_ASC = "A"; //$NON-NLS-1$
+
+	/**
+	 * Descending index sort type.
+	 */
+	public static final String TYPE_ORDER_DESC = "D"; //$NON-NLS-1$
+
+	/**
+	 * This constructs the loader using no filtering.
+	 * 
+	 * @param catalogObject the Table object upon which this loader operates.
+	 */
+	public JDBCTableIndexLoader(ICatalogObject catalogObject) {
+		this(catalogObject, null);
+	}
+
+	/**
+	 * @param catalogObject the Table object upon which this loader operates.
+	 * @param connectionFilterProvider the filter provider used for filtering
+	 *        the "index" objects being loaded
+	 */
+	public JDBCTableIndexLoader(
+								ICatalogObject catalogObject,
+								IConnectionFilterProvider connectionFilterProvider) {
+		super(catalogObject, connectionFilterProvider);
+		if (catalogObject != null)
+			assert (catalogObject instanceof Table);
+	}
+
+	/**
+	 * @return a collection of Index objects
+	 * 
+	 * @throws SQLException if an error occurred during loading.
+	 * 
+	 * @deprecated see {@link #loadIndexes(List, Collection)}
+	 */
+	public List loadIndexes() throws SQLException {
+		List retVal = new ArrayList();
+		loadIndexes(retVal, Collections.EMPTY_SET);
+		return retVal;
+	}
+
+	/**
+	 * Loads the "index" objects from the database. This method uses the result
+	 * set from createResultSet() to load the "index" objects from the server.
+	 * Index objects are created using the factory method, createIndex().
+	 * 
+	 * This method should only be overridden as a last resort when the desired
+	 * behavior cannot be acheived by overriding createResultSet(),
+	 * closeResultSet(), createIndex(), initIndex(), createIndexMember() and
+	 * initIndexMember().
+	 * 
+	 * @param existingIndexes the catalog objects which were previously loaded
+	 * @param containmentList the containment list held by parent
+	 * @throws SQLException if an error occurred during loading.
+	 */
+	public void loadIndexes(List containmentList, Collection existingIndexes)
+			throws SQLException {
+		ResultSet rs = null;
+		try {
+			initActiveFilter();
+			Index index = null;
+			for (rs = createResultSet(); rs.next();) {
+				String indexName = rs.getString(COLUMN_INDEX_NAME);
+				if (indexName == null
+						|| isFiltered(indexName)
+						|| DatabaseMetaData.tableIndexStatistic == rs
+								.getShort(COLUMN_TYPE)) {
+					continue;
+				}
+				if (index == null || !index.getName().equals(indexName)) {
+					index = (Index) getAndRemoveSQLObject(existingIndexes,
+							indexName);
+					if (index == null) {
+						index = createIndex();
+						initIndex(index, rs);
+					}
+					else {
+						initIndex(index, rs);
+						index.getMembers().clear();
+						if (index instanceof ICatalogObject) {
+							((ICatalogObject) index).refresh();
+						}
+					}
+					containmentList.add(index);
+				}
+				Column column = findColumn(rs.getString(COLUMN_COLUMN_NAME));
+				if (column == null) {
+					continue;
+				}
+				IndexMember im = createIndexMember();
+				if (im == null) {
+					continue;
+				}
+				initIndexMember(im, column, rs);
+				index.getMembers().add(im);
+			}
+		}
+		finally {
+			if (rs != null) {
+				closeResultSet(rs);
+			}
+		}
+	}
+
+	/**
+	 * Removes the specified indexes from the model.
+	 * 
+	 * @param indexes the indexes to be removed from the model.
+	 */
+	public void clearIndexes(List indexes) {
+		indexes.clear();
+	}
+
+	/**
+	 * Creates a result set to be used by the loading logic. The default version
+	 * uses of the JDBC DatabaseMetaData.getIndexInfo() to create the result
+	 * set. This method may be overridden to use a vendor specific query.
+	 * However, the default logic requires the columns named by the "COLUMN_*"
+	 * fields. Keep this in mind if you plan to reuse the default logic (e.g.
+	 * loadIndexes(), initIndex()).
+	 * 
+	 * @return a result containing the information used to initialize Index
+	 *         objects
+	 * 
+	 * @throws SQLException if an error occurs
+	 */
+	protected ResultSet createResultSet() throws SQLException {
+		try {
+			Table table = getTable();
+			Schema schema = table.getSchema();
+			return getCatalogObject().getConnection().getMetaData()
+					.getIndexInfo(schema.getCatalog().getName(),
+							schema.getName(), table.getName(), false, false);
+		}
+		catch (RuntimeException e) {
+			SQLException error = new SQLException(MessageFormat.format(
+					Messages.Error_Unsupported_DatabaseMetaData_Method,
+					new Object[] { "java.sql.DatabaseMetaData.getIndexInfo()"})); //$NON-NLS-1$
+			error.initCause(e);
+			throw error;
+		}
+	}
+
+	/**
+	 * Closes the result set used for catalog object loading. This method is
+	 * implemented as rs.close(). However, if you used a Statement object to
+	 * create the result set, this is where you would close that Statement.
+	 * 
+	 * @param rs the result set to close. This will be the result set created by
+	 *        createResultSet().
+	 */
+	protected void closeResultSet(ResultSet rs) {
+		try {
+			rs.close();
+		}
+		catch (SQLException e) {
+		}
+	}
+
+	/**
+	 * Returns a new Index object. By default, this method returns a new
+	 * JDBCIndex.
+	 * 
+	 * @return a new Index object.
+	 */
+	protected Index createIndex() {
+		return new JDBCIndex();
+	}
+
+	/**
+	 * Used to initialize a newly created Index object. By default, this method
+	 * initializes the name, uniqueness attribute, schema, and clustered
+	 * attribute of the Index. This method may be overridden to initialize any
+	 * vendor specific properties.
+	 * 
+	 * @param index a newly created Index object
+	 * @param rs the result set containing the information
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected void initIndex(Index index, ResultSet rs) throws SQLException {
+		index.setName(rs.getString(COLUMN_INDEX_NAME));
+		index.setUnique(!rs.getBoolean(COLUMN_NON_UNIQUE));
+		index.setSchema(findSchema(rs.getString(COLUMN_INDEX_QUALIFIER)));
+		index.setClustered(DatabaseMetaData.tableIndexClustered == rs
+				.getShort(COLUMN_TYPE));
+	}
+
+	/**
+	 * Used to initialize a newly created IndexMember object. By default, this
+	 * method initializes the column and increment type of the IndexMember. This
+	 * method may be overridden to initialize any vendor specific properties.
+	 * 
+	 * @param im a newly created IndexMember object
+	 * @param column the Column
+	 * @param rs the result set containing the information
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected void initIndexMember(IndexMember im, Column column, ResultSet rs)
+			throws SQLException {
+		im.setColumn(column);
+		im.setIncrementType(getIncrementType(rs.getString(COLUMN_ASC_OR_DESC)));
+	}
+
+	/**
+	 * Utility method.
+	 * 
+	 * @return returns the catalog object being operated upon as a Table (i.e.
+	 *         (Table) getCatalogObject()).
+	 */
+	protected Table getTable() {
+		return (Table) getCatalogObject();
+	}
+
+	/**
+	 * Returns a new IndexMember object. By default, this method returns a new
+	 * IndexMemberImpl.
+	 * 
+	 * @return a new IndexMember object.
+	 */
+	protected IndexMember createIndexMember() {
+		return SQLConstraintsFactory.eINSTANCE.createIndexMember();
+	}
+
+	/**
+	 * Returns the sort order of the index.
+	 * 
+	 * @param type the type as returned by the COLUMN_TYPE column in the result
+	 *        set.
+	 * 
+	 * @return IncrementType.ASC_LITERAL for ascending,
+	 *         IncrementType.DESC_LITERAL for descending, null if not supported.
+	 */
+	protected IncrementType getIncrementType(String type) {
+		if (TYPE_ORDER_ASC.equals(type)) {
+			return IncrementType.ASC_LITERAL;
+		}
+		else if (TYPE_ORDER_DESC.equals(type)) {
+			return IncrementType.DESC_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the column object with the specified columnName.
+	 * 
+	 * @param columnName the name of the column to find.
+	 * 
+	 * @return the Column; null if the named column does not exist.
+	 */
+	protected Column findColumn(String columnName) {
+		if (columnName == null) {
+			return null;
+		}
+
+		for (Iterator it = getTable().getColumns().iterator(); it.hasNext();) {
+			Column column = (Column) it.next();
+			if (columnName.equals(column.getName())) {
+				return column;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the schema object with the specified schema. If the schema name
+	 * is null or cannot be found, the table's schema object is returned.
+	 * 
+	 * @param schemaName the name of the schema to find.
+	 * 
+	 * @return the Schema; null if the named schema does not exist.
+	 */
+	protected Schema findSchema(String schemaName) {
+		if (schemaName == null) {
+			return getTable().getSchema();
+		}
+		Table table = getTable();
+
+		// short circuit
+		if (schemaName.equals(table.getSchema().getName())) {
+			return table.getSchema();
+		}
+
+		for (Iterator schemIt = table.getSchema().getCatalog().getSchemas()
+				.iterator(); schemIt.hasNext();) {
+			Schema schema = (Schema) schemIt.next();
+			if (schemaName.equals(schema.getName())) {
+				return schema;
+			}
+		}
+		// if we get here, we couldn't find the schema. return table's schema
+		return table.getSchema();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCTableLoader.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCTableLoader.java
new file mode 100644
index 0000000..07b37c1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCTableLoader.java
@@ -0,0 +1,587 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.loader;
+
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCColumn;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCTable;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCTemporaryTable;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCView;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.ReferenceType;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.TemporaryTable;
+import org.eclipse.emf.ecore.EClass;
+
+import com.ibm.icu.text.MessageFormat;
+
+/**
+ * Base loader implementation for loading a database's catalog objects. This
+ * class may be specialized as necessary to meet a particular vendor's needs.
+ * 
+ * @author rcernich
+ * 
+ * Created on Aug 28, 2006
+ */
+public class JDBCTableLoader extends JDBCBaseLoader {
+
+	/**
+	 * The column name containing the table's name.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getTables()
+	 */
+	public static final String COLUMN_TABLE_NAME = "TABLE_NAME"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the table's type.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getTables()
+	 */
+	public static final String COLUMN_TABLE_TYPE = "TABLE_TYPE"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the table's description.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getTables()
+	 */
+	public static final String COLUMN_REMARKS = "REMARKS"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the name of the table's self referencing
+	 * column.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getTables()
+	 */
+	public static final String COLUMN_SELF_REFERENCING_COL_NAME = "SELF_REFERENCING_COL_NAME"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the table's reference generation method.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getTables()
+	 */
+	public static final String COLUMN_REF_GENERATION = "REF_GENERATION"; //$NON-NLS-1$
+
+	/**
+	 * TABLE table type.
+	 */
+	public static final String TYPE_TABLE = "TABLE"; //$NON-NLS-1$
+
+	/**
+	 * VIEW table type.
+	 */
+	public static final String TYPE_VIEW = "VIEW"; //$NON-NLS-1$
+
+	/**
+	 * SYSTEM TABLE table type.
+	 */
+	public static final String TYPE_SYSTEM_TABLE = "SYSTEM TABLE"; //$NON-NLS-1$
+
+	/**
+	 * GLOBAL TEMPORARY table type.
+	 */
+	public static final String TYPE_GLOBAL_TEMPORARY = "GLOBAL TEMPORARY"; //$NON-NLS-1$
+
+	/**
+	 * LOCAL TEMPORARY table type.
+	 */
+	public static final String TYPE_LOCAL_TEMPORARY = "LOCAL TEMPORARY"; //$NON-NLS-1$
+
+	/**
+	 * SYSTEM reference type.
+	 */
+	public static final String TYPE_REF_SYSTEM = "SYSTEM"; //$NON-NLS-1$
+
+	/**
+	 * USER reference type.
+	 */
+	public static final String TYPE_REF_USER = "USER"; //$NON-NLS-1$
+
+	/**
+	 * DERIVED reference type.
+	 */
+	public static final String TYPE_REF_DERIVED = "DERIVED"; //$NON-NLS-1$
+
+	protected Map mTableFactories;
+	protected boolean mSupportedColumnsInitialized;
+
+	/**
+	 * This constructs the loader using a ConnectionFilter.TABLE_FILTER filter.
+	 * 
+	 * @param catalogObject the Database object upon which this loader operates.
+	 */
+	public JDBCTableLoader(ICatalogObject catalogObject) {
+		this(catalogObject, new SchemaObjectFilterProvider(
+				ConnectionFilter.TABLE_FILTER));
+	}
+
+	/**
+	 * @param catalogObject the Catalog object upon which this loader operates.
+	 * @param connectionFilterProvider the filter provider used for filtering
+	 *        the "schema" objects being loaded
+	 */
+	public JDBCTableLoader(ICatalogObject catalogObject,
+							IConnectionFilterProvider connectionFilterProvider) {
+		super(catalogObject, connectionFilterProvider);
+		if (catalogObject != null)
+			assert (catalogObject instanceof Schema);
+
+		mTableFactories = new HashMap(5);
+		registerTableFactory(TYPE_TABLE, new TableFactory());
+		registerTableFactory(TYPE_VIEW, new ViewFactory());
+		registerTableFactory(TYPE_SYSTEM_TABLE, new TableFactory());
+		registerTableFactory(TYPE_GLOBAL_TEMPORARY,
+				new GlobalTempTableFactory());
+		registerTableFactory(TYPE_LOCAL_TEMPORARY, new LocalTempTableFactory());
+	}
+
+	/**
+	 * @return a collection of Table objects
+	 * 
+	 * @throws SQLException if an error occurred during loading.
+	 * 
+	 * @deprecated see {@link #loadTables(List, Collection)}
+	 */
+	public List loadTables() throws SQLException {
+		List retVal = new ArrayList();
+		loadTables(retVal, Collections.EMPTY_SET);
+		return retVal;
+	}
+
+	/**
+	 * Loads the "table" objects from the database. This method uses the result
+	 * set from createResultSet() to load the "table" objects from the server.
+	 * This method first checks the name of the "table" to determine whether or
+	 * not it should be filtered. If it is not filtered, it checks to see if an
+	 * object with that name was loaded previously. If it finds an existing
+	 * object, it refreshes that object and adds it to the containment list. If
+	 * the named object does not exist, the result set is passed to
+	 * processRow(). Table objects are created and initialized using one of the
+	 * registered factories.
+	 * 
+	 * This method should only be overridden as a last resort when the desired
+	 * behavior cannot be acheived by overriding createResultSet(),
+	 * closeResultSet(), processRow(), and a specialized factories.
+	 * 
+	 * @param existingTables the catalog objects which were previously loaded
+	 * @param containmentList the containment list held by parent
+	 * @throws SQLException if an error occurred during loading.
+	 */
+	public void loadTables(List containmentList, Collection existingTables)
+			throws SQLException {
+		ResultSet rs = null;
+		try {
+			initActiveFilter();
+			rs = createResultSet();
+			if (!mSupportedColumnsInitialized) {
+				Set supportedColumns = new TreeSet();
+				ResultSetMetaData rsmd = rs.getMetaData();
+				for (int colNum = 1, colCount = rsmd.getColumnCount(); colNum <= colCount; ++colNum) {
+					supportedColumns.add(rsmd.getColumnName(colNum));
+				}
+				for (Iterator it = mTableFactories.values().iterator(); it
+						.hasNext();) {
+					((ITableFactory) it.next())
+							.setSupportedColumns(supportedColumns);
+				}
+			}
+			while (rs.next()) {
+				String tableName = rs.getString(COLUMN_TABLE_NAME);
+				if (tableName == null || isFiltered(tableName)) {
+					continue;
+				}
+				Table table = (Table) getAndRemoveSQLObject(existingTables,
+						tableName);
+				if (table == null) {
+					table = processRow(rs);
+					if (table != null) {
+						containmentList.add(table);
+					}
+				}
+				else {
+					ITableFactory tableFactory = getTableFactory(rs
+							.getString(COLUMN_TABLE_TYPE));
+					if (tableFactory != null) {
+						tableFactory.initialize(table, rs);
+					}
+					containmentList.add(table);
+					if (table instanceof ICatalogObject) {
+						((ICatalogObject) table).refresh();
+					}
+				}
+			}
+		}
+		finally {
+			if (rs != null) {
+				closeResultSet(rs);
+			}
+		}
+	}
+
+	/**
+	 * Removes the specified tables from the model.
+	 * 
+	 * @param tables the tables to be removed from the model.
+	 */
+	public void clearTables(List tables) {
+		tables.clear();
+	}
+
+	/**
+	 * Creates a result set to be used by the loading logic. The default version
+	 * uses of the JDBC DatabaseMetaData.getTables() to create the result set.
+	 * This method may be overridden to use a vendor specific query. However,
+	 * the default logic requires the columns named by the "COLUMN_*" fields.
+	 * Keep this in mind if you plan to reuse the default logic (e.g.
+	 * TableFactory.initialize())
+	 * 
+	 * @return a result containing the information used to initialize Routine
+	 *         objects
+	 * 
+	 * @throws SQLException if an error occurs
+	 */
+	protected ResultSet createResultSet() throws SQLException {
+		try {
+			Schema schema = getSchema();
+			return getCatalogObject().getConnection().getMetaData().getTables(
+					schema.getCatalog().getName(), schema.getName(),
+					getJDBCFilterPattern(), null);
+		}
+		catch (RuntimeException e) {
+			SQLException error = new SQLException(MessageFormat.format(
+					Messages.Error_Unsupported_DatabaseMetaData_Method,
+					new Object[] { "java.sql.DatabaseMetaData.getTables()"})); //$NON-NLS-1$
+			error.initCause(e);
+			throw error;
+		}
+	}
+
+	/**
+	 * Closes the result set used for catalog object loading. This method is
+	 * implemented as rs.close(). However, if you used a Statement object to
+	 * create the result set, this is where you would close that Statement.
+	 * 
+	 * @param rs the result set to close. This will be the result set created by
+	 *        createResultSet().
+	 */
+	protected void closeResultSet(ResultSet rs) {
+		try {
+			rs.close();
+		}
+		catch (SQLException e) {
+		}
+	}
+
+	/**
+	 * Processes a single row in the result set. By default, this method
+	 * determines the table's type (e.g. VIEW, TABLE, etc.) and invokes
+	 * createTable() on the factory registered for that type, returning the
+	 * newly created, initialized Table object.
+	 * 
+	 * @param rs the result set
+	 * @return a new Table object
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected Table processRow(ResultSet rs) throws SQLException {
+		ITableFactory tableFactory = getTableFactory(rs
+				.getString(COLUMN_TABLE_TYPE));
+		if (tableFactory == null) {
+			return null;
+		}
+		return tableFactory.createTable(rs);
+	}
+
+	/**
+	 * Utility method.
+	 * 
+	 * @return returns the catalog object being operated upon as a Schema (i.e.
+	 *         (Schema) getCatalogObject()).
+	 */
+	protected Schema getSchema() {
+		return (Schema) getCatalogObject();
+	}
+
+	/**
+	 * Register a factory for the specified type. The type should match a type
+	 * contained within the result set's "TABLE_TYPE" column.
+	 * 
+	 * @param type the table type (e.g. VIEW, TABLE, etc.)
+	 * @param factory the factory
+	 * @return the previously registered factory; null if no factory was
+	 *         registered for that type.
+	 */
+	public ITableFactory registerTableFactory(String type, ITableFactory factory) {
+		return (ITableFactory) mTableFactories.put(type, factory);
+	}
+
+	/**
+	 * Unregister a factory for the specified type.
+	 * 
+	 * @param type the table type (e.g. VIEW, TABLE, etc.)
+	 * @return the previously registered factory; null if no factory was
+	 *         registered for that type.
+	 */
+	public ITableFactory unregisterTableFactory(String type) {
+		return (ITableFactory) mTableFactories.remove(type);
+	}
+	
+	/**
+	 * Returns the table factory associated with the specified type. Returns
+	 * null if no factory has been associated with the specified type.
+	 * 
+	 * @param type the table type (e.g. VIEW, TABLE, etc.)
+	 * @return the registered factory; null if no factory is registered for the
+	 *         specified type.
+	 */
+	public ITableFactory getTableFactory(String type) {
+		if (mTableFactories.containsKey(type)) {
+			return (ITableFactory) mTableFactories.get(type);
+		}
+		return null;
+	}
+
+	/**
+	 * Interface for providing creation logic for tables.
+	 */
+	public static interface ITableFactory {
+
+		/**
+		 * @return the EClass used to represent the routine objects created by
+		 *         this factory. This is used to identify existing objects in
+		 *         the model during a refresh (e.g. to reuse the object,
+		 *         preventing external references from breaking).
+		 */
+		EClass getTableEClass();
+
+		/**
+		 * Creates and initializes a table object based on the meta-data in the
+		 * result set.
+		 * 
+		 * @param rs the result set
+		 * @return a new, initialized Table object.
+		 * @throws SQLException if anything goes wrong
+		 */
+		Table createTable(ResultSet rs) throws SQLException;
+		
+		/**
+		 * Initializes a table object based on the meta-data in the result set.
+		 * The table object may be a new table requiring initialization or an
+		 * existing table that is being reinitialized.
+		 * 
+		 * @param table the table to initialize
+		 * @param rs the result set
+		 * @throws SQLException if anything goes wrong
+		 */
+		void initialize(Table table, ResultSet rs) throws SQLException;
+
+		/**
+		 * Specify the column names supported by the result set. These names can
+		 * be used to determine whether or not a specific ResultSet.get*()
+		 * method is available for a particular named column.
+		 * 
+		 * @param supportedColumns column names defined within the result set.
+		 */
+		void setSupportedColumns(Set supportedColumns);
+	}
+
+	/**
+	 * Base factory implementation for TABLE type tables.
+	 */
+	public static class TableFactory implements ITableFactory {
+
+		protected Set mSupportedColumns;
+
+		/**
+		 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCTableLoader.ITableFactory#getTableEClass()
+		 * 
+		 * @return SQLTablesPackage.eINSTANCE.getPersistentTable()
+		 */
+		public EClass getTableEClass() {
+			return SQLTablesPackage.eINSTANCE.getPersistentTable();
+		}
+
+		/**
+		 * Creates and initializes a new Table object from the meta-data in the
+		 * result set.
+		 * 
+		 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCTableLoader.ITableFactory#createTable(java.sql.ResultSet)
+		 */
+		public Table createTable(ResultSet rs) throws SQLException {
+			Table retVal = newTable();
+			initialize(retVal, rs);
+			return retVal;
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCTableLoader.ITableFactory#setSupportedColumns(java.util.Set)
+		 */
+		public void setSupportedColumns(Set supportedColumns) {
+			mSupportedColumns = supportedColumns;
+		}
+
+		/**
+		 * Internal factory method. The default implementation returns a new
+		 * JDBCTable object.
+		 * 
+		 * @return a new Table object
+		 */
+		protected Table newTable() {
+			return new JDBCTable();
+		}
+
+		/**
+		 * Initializes the new Table object using the meta-data in the result
+		 * set. This method initializes the name, description and reference
+		 * generation type of the table.
+		 * 
+		 * @param table a new Table object
+		 * @param rs the result set
+		 * @throws SQLException if anything goes wrong
+		 */
+		public void initialize(Table table, ResultSet rs)
+				throws SQLException {
+			if (mSupportedColumns.contains(COLUMN_REF_GENERATION)) {
+				String srcg = rs.getString(COLUMN_REF_GENERATION);
+				if (TYPE_REF_SYSTEM.equals(srcg)) {
+					table
+							.setSelfRefColumnGeneration(ReferenceType.SYSTEM_GENERATED_LITERAL);
+				}
+				else if (TYPE_REF_USER.equals(srcg)) {
+					table
+							.setSelfRefColumnGeneration(ReferenceType.USER_GENERATED_LITERAL);
+				}
+				else if (TYPE_REF_DERIVED.equals(srcg)) {
+					table
+							.setSelfRefColumnGeneration(ReferenceType.DERIVED_SELF_REF_LITERAL);
+				}
+			}
+
+			table.setName(rs.getString(COLUMN_TABLE_NAME));
+
+			if (mSupportedColumns.contains(COLUMN_REMARKS)) {
+				table.setDescription(rs.getString(COLUMN_REMARKS));
+			}
+
+			// String selfRefColName = rs
+			// .getString(COLUMN_SELF_REFERENCING_COL_NAME);
+			// if (selfRefColName != null && selfRefColName.length() > 0) {
+			// Column column = createColumn();
+			// column.setName(selfRefColName);
+			// table.getColumns().add(0, column);
+			// }
+		}
+
+		/**
+		 * Internal factory method. The default implementation returns a new
+		 * JDBCColumn object.
+		 * 
+		 * This method is currently unused. It is intended to be used for
+		 * creating a placeholder column for the self reference column.
+		 * 
+		 * @return a new Column object
+		 */
+		protected Column createColumn() {
+			return new JDBCColumn();
+		}
+	}
+
+	/**
+	 * Base factory implementation for VIEW type tables.
+	 */
+	public static class ViewFactory extends TableFactory {
+
+		/**
+		 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCTableLoader.ITableFactory#getTableEClass()
+		 * 
+		 * @return SQLTablesPackage.eINSTANCE.getViewTable()
+		 */
+		public EClass getTableEClass() {
+			return SQLTablesPackage.eINSTANCE.getViewTable();
+		}
+
+		/**
+		 * Internal factory method. The default implementation returns a new
+		 * JDBCView object.
+		 * 
+		 * @return a new Table object
+		 */
+		protected Table newTable() {
+			return new JDBCView();
+		}
+	}
+
+	/**
+	 * Base factory implementation for GLOBAL TEMPORARY type tables.
+	 */
+	public static class GlobalTempTableFactory extends TableFactory {
+
+		/**
+		 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCTableLoader.ITableFactory#getTableEClass()
+		 * 
+		 * @return SQLTablesPackage.eINSTANCE.getTemporaryTable()
+		 */
+		public EClass getTableEClass() {
+			return SQLTablesPackage.eINSTANCE.getTemporaryTable();
+		}
+
+		/**
+		 * Internal factory method. The default implementation returns a new
+		 * JDBCTemporaryTable object.
+		 * 
+		 * @return a new Table object
+		 */
+		protected Table newTable() {
+			return new JDBCTemporaryTable();
+		}
+
+	}
+
+	/**
+	 * Base factory implementation for LOCAL TEMPORARY type tables.
+	 */
+	public static class LocalTempTableFactory extends TableFactory {
+
+		protected Table newTable() {
+			return new JDBCTemporaryTable();
+		}
+
+		/**
+		 * Initializes the isLocal attribute in addition to the the attributes
+		 * initialized by super().
+		 * 
+		 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCTableLoader.TableFactory#initialize(org.eclipse.datatools.modelbase.sql.tables.Table,
+		 *      java.sql.ResultSet)
+		 */
+		public void initialize(Table table, ResultSet rs)
+				throws SQLException {
+			super.initialize(table, rs);
+			((TemporaryTable) table).setLocal(true);
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCTableSuperTableLoader.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCTableSuperTableLoader.java
new file mode 100644
index 0000000..7117f26
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCTableSuperTableLoader.java
@@ -0,0 +1,158 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.loader;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+
+import com.ibm.icu.text.MessageFormat;
+
+/**
+ * Base loader implementation for loading a table's super table objects. This
+ * class may be specialized as necessary to meet a particular vendor's needs.
+ * 
+ * @since 1.0
+ */
+public class JDBCTableSuperTableLoader extends JDBCBaseLoader {
+
+	/**
+	 * The column name containing the super table's name.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getSuperTables()
+	 */
+	public static final String COLUMN_SUPERTABLE_NAME = "SUPERTABLE_NAME"; //$NON-NLS-1$
+
+	/**
+	 * This constructs the loader using no filtering.
+	 * 
+	 * @param catalogObject the Database object upon which this loader operates.
+	 */
+	public JDBCTableSuperTableLoader(ICatalogObject catalogObject) {
+		this(catalogObject, null);
+	}
+
+	/**
+	 * @param catalogObject the Table object upon which this loader operates.
+	 * @param connectionFilterProvider the filter provider used for filtering
+	 *        the "table" objects being loaded
+	 */
+	public JDBCTableSuperTableLoader(
+										ICatalogObject catalogObject,
+										IConnectionFilterProvider connectionFilterProvider) {
+		super(catalogObject, connectionFilterProvider);
+		if (catalogObject != null)
+			assert (catalogObject instanceof Table);
+	}
+
+	/**
+	 * @return the super table, null if no super table exists.
+	 * @throws SQLException if an error occurred during loading.
+	 */
+	public Table loadSuperTable() throws SQLException {
+		Table retVal = null;
+		ResultSet rs = null;
+		try {
+			rs = createResultSet();
+			if (rs.next()) {
+				retVal = findTable(rs.getString(COLUMN_SUPERTABLE_NAME));
+			}
+			return retVal;
+		}
+		finally {
+			if (rs != null) {
+				closeResultSet(rs);
+			}
+		}
+	}
+
+	/**
+	 * Creates a result set to be used by the loading logic. The default version
+	 * uses of the JDBC DatabaseMetaData.getSuperTables() to create the result
+	 * set. This method may be overridden to use a vendor specific query.
+	 * However, the default logic requires the column named "SUPERTABLE_NAME"
+	 * 
+	 * @return a result containing the information used to initialize Index
+	 *         objects
+	 * 
+	 * @throws SQLException if an error occurs
+	 */
+	protected ResultSet createResultSet() throws SQLException {
+		try {
+			Table table = getTable();
+			Schema schema = table.getSchema();
+			return getCatalogObject().getConnection().getMetaData().getSuperTables(
+					schema.getCatalog().getName(), schema.getName(),
+					table.getName());
+		}
+		catch (RuntimeException e) {
+			SQLException error = new SQLException(
+					MessageFormat
+							.format(
+									Messages.Error_Unsupported_DatabaseMetaData_Method,
+									new Object[] { "java.sql.DatabaseMetaData.getSuperTables()"})); //$NON-NLS-1$
+			error.initCause(e);
+			throw error;
+		}
+	}
+
+	/**
+	 * Closes the result set used for catalog object loading. This method is
+	 * implemented as rs.close(). However, if you used a Statement object to
+	 * create the result set, this is where you would close that Statement.
+	 * 
+	 * @param rs the result set to close. This will be the result set created by
+	 *        createResultSet().
+	 */
+	protected void closeResultSet(ResultSet rs) {
+		try {
+			rs.close();
+		}
+		catch (SQLException e) {
+		}
+	}
+
+	/**
+	 * Utility method.
+	 * 
+	 * @return returns the catalog object being operated upon as a Table (i.e.
+	 *         (Table) getCatalogObject()).
+	 */
+	protected Table getTable() {
+		return (Table) getCatalogObject();
+	}
+
+	/**
+	 * Returns the named table.
+	 * 
+	 * @param tableName the name of the table to find
+	 * @return the Table object if found; null if the table does not exist.
+	 */
+	protected Table findTable(String tableName) {
+		if (tableName == null) {
+			return null;
+		}
+		for (Iterator tableIt = getTable().getSchema().getTables().iterator(); tableIt
+				.hasNext();) {
+			Table table = (Table) tableIt.next();
+			if (tableName.equals(table.getName())) {
+				// found it
+				return table;
+			}
+		}
+		return null;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCUDFColumnLoader.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCUDFColumnLoader.java
new file mode 100644
index 0000000..effcb2c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCUDFColumnLoader.java
@@ -0,0 +1,118 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.loader;
+
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.modelbase.sql.routines.Parameter;
+import org.eclipse.datatools.modelbase.sql.routines.ParameterMode;
+import org.eclipse.datatools.modelbase.sql.routines.UserDefinedFunction;
+
+/**
+ * Base loader implementation for loading a database's catalog objects. This
+ * class may be specialized as necessary to meet a particular vendor's needs.
+ * 
+ * @author rcernich
+ * 
+ * Created on Aug 28, 2006
+ */
+public class JDBCUDFColumnLoader extends JDBCRoutineColumnLoader {
+
+	/**
+	 * This constructs the loader using no filtering.
+	 * 
+	 * @param catalogObject the Database object upon which this loader operates.
+	 */
+	public JDBCUDFColumnLoader(ICatalogObject catalogObject) {
+		this(catalogObject, null);
+	}
+
+	/**
+	 * @param catalogObject the Procedure object upon which this loader
+	 *        operates.
+	 * @param connectionFilterProvider the filter provider used for filtering
+	 *        the "column" objects being loaded
+	 */
+	public JDBCUDFColumnLoader(
+								ICatalogObject catalogObject,
+								IConnectionFilterProvider connectionFilterProvider) {
+		super(catalogObject, connectionFilterProvider);
+		if (catalogObject != null)
+			assert (catalogObject instanceof UserDefinedFunction);
+	}
+
+	/**
+	 * Note, if a result set is returned by the UDF, it will be added to the end
+	 * of the returned list.
+	 * 
+	 * @return a collection of Parameter objects
+	 * 
+	 * @throws SQLException if an error occurred during loading.
+	 * 
+	 * @deprecated see {@link #loadParameters(List, Collection)},
+	 *             {@link #loadRoutineResultTables()}
+	 */
+	public List loadColumns() throws SQLException {
+		List retVal = new ArrayList();
+		loadParameters(retVal, Collections.EMPTY_SET);
+		List routineResultTables = loadRoutineResultTables();
+		if (routineResultTables.size() > 0) {
+			retVal.add(routineResultTables.get(0));
+		}
+		return retVal;
+	}
+
+	/**
+	 * Used to initialize a newly created parameter object. By default, this
+	 * method initializes the name, description, type and direction
+	 * (in/out/inout). This method may be overridden to initialize any vendor
+	 * specific properties.
+	 * 
+	 * @param parameter a newly created Parameter object
+	 * @param rs the result set containing the information
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected void initParameter(Parameter parameter, ResultSet rs)
+			throws SQLException {
+		parameter.setName(rs.getString(COLUMN_COLUMN_NAME));
+		parameter.setDescription(rs.getString(COLUMN_REMARKS));
+		switch (rs.getShort(COLUMN_COLUMN_TYPE)) {
+		case DatabaseMetaData.procedureColumnIn:
+			parameter.setMode(ParameterMode.IN_LITERAL);
+			break;
+		case DatabaseMetaData.procedureColumnInOut:
+			// this shouldn't happen
+			parameter.setMode(ParameterMode.INOUT_LITERAL);
+			break;
+		case DatabaseMetaData.procedureColumnOut:
+			// this shouldn't happen; might be the result
+			parameter.setMode(ParameterMode.OUT_LITERAL);
+			break;
+		case DatabaseMetaData.procedureColumnReturn:
+			parameter.setMode(ParameterMode.OUT_LITERAL);
+			break;
+		case DatabaseMetaData.procedureColumnUnknown:
+		default:
+			// Default to in
+			parameter.setMode(ParameterMode.IN_LITERAL);
+			break;
+		}
+		initType(parameter, rs);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCUDTAttributeLoader.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCUDTAttributeLoader.java
new file mode 100644
index 0000000..bfba2c3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCUDTAttributeLoader.java
@@ -0,0 +1,583 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.loader;
+
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.datatypes.AttributeDefinition;
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.ReferenceDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataTypesFactory;
+import org.eclipse.datatools.modelbase.sql.datatypes.StructuredUserDefinedType;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.schema.Catalog;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import com.ibm.icu.text.MessageFormat;
+
+/**
+ * Base loader implementation for loading a UDT's attribute objects. This class
+ * may be specialized as necessary to meet a particular vendor's needs.
+ * 
+ * @since 1.0
+ */
+public class JDBCUDTAttributeLoader extends JDBCBaseLoader {
+
+	/**
+	 * The column name containing the attribute's name.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getAttributes()
+	 */
+	public static final String COLUMN_ATTR_NAME = "ATTR_NAME"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the attribute's data type.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getAttributes()
+	 */
+	public static final String COLUMN_DATA_TYPE = "DATA_TYPE"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the attribute's type name.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getAttributes()
+	 */
+	public static final String COLUMN_ATTR_TYPE_NAME = "ATTR_TYPE_NAME"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the attribute's size.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getAttributes()
+	 */
+	public static final String COLUMN_ATTR_SIZE = "ATTR_SIZE"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the attribute's decimal digits.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getAttributes()
+	 */
+	public static final String COLUMN_DECIMAL_DIGITS = "DECIMAL_DIGITS"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the attribute's nullable.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getAttributes()
+	 */
+	public static final String COLUMN_NULLABLE = "NULLABLE"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the attribute's description.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getAttributes()
+	 */
+	public static final String COLUMN_REMARKS = "REMARKS"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the attribute's default value.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getAttributes()
+	 */
+	public static final String COLUMN_ATTR_DEF = "ATTR_DEF"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the attribute's scope catalog.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getAttributes()
+	 */
+	public static final String COLUMN_SCOPE_CATALOG = "SCOPE_CATALOG"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the attribute's scope schema.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getAttributes()
+	 */
+	public static final String COLUMN_SCOPE_SCHEMA = "SCOPE_SCHEMA"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the attribute's scope table.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getAttributes()
+	 */
+	public static final String COLUMN_SCOPE_TABLE = "SCOPE_TABLE"; //$NON-NLS-1$
+
+	private Pattern mUDTNameMatcherPattern;
+	private boolean mCatalogAtStart;
+
+	/**
+	 * This constructs the loader using no filtering.
+	 * 
+	 * @param catalogObject the UDT object upon which this loader operates.
+	 */
+	public JDBCUDTAttributeLoader(ICatalogObject catalogObject) {
+		this(catalogObject, null);
+	}
+
+	/**
+	 * @param catalogObject the UDT object upon which this loader operates.
+	 * @param connectionFilterProvider the filter provider used for filtering
+	 *        the "column" objects being loaded
+	 */
+	public JDBCUDTAttributeLoader(
+									ICatalogObject catalogObject,
+									IConnectionFilterProvider connectionFilterProvider) {
+		super(catalogObject, connectionFilterProvider);
+		if (catalogObject != null)
+			assert (catalogObject instanceof UserDefinedType);
+	}
+
+	/**
+	 * Loads the "attribute" objects from the database. This method uses the
+	 * result set from createResultSet() to load the "attribute" objects from
+	 * the server. Row handling for the result set is delegated to processRow().
+	 * AttributeDefinition objects are created using the factory method,
+	 * createAttributeDefinition().
+	 * 
+	 * This method should only be overridden as a last resort when the desired
+	 * behavior cannot be acheived by overriding createResultSet(),
+	 * closeResultSet(), processRow(), createAttributeDefinition() and
+	 * initialize().
+	 * 
+	 * @return a collection of AttributeDefinition objects
+	 * 
+	 * @throws SQLException if an error occurred during loading.
+	 */
+	public List loadAttributeDefinitions() throws SQLException {
+		List retVal = new ArrayList();
+		ResultSet rs = null;
+		try {
+			initActiveFilter();
+			for (rs = createResultSet(); rs.next();) {
+				AttributeDefinition attrDef = processRow(rs);
+				if (attrDef != null) {
+					retVal.add(attrDef);
+				}
+			}
+			return retVal;
+		}
+		finally {
+			if (rs != null) {
+				closeResultSet(rs);
+			}
+		}
+	}
+
+	/**
+	 * Removes the specified attribute definitions from the model.
+	 * 
+	 * @param attrDefs the attribute definitions to be removed from the model.
+	 */
+	public void clearAttributeDefinitions(List attrDefs) {
+		attrDefs.clear();
+	}
+
+	/**
+	 * Creates a result set to be used by the loading logic. The default version
+	 * uses of the JDBC DatabaseMetaData.getAttributes() to create the result
+	 * set. This method may be overridden to use a vendor specific query.
+	 * However, the default logic requires the columns named by the "COLUMN_*"
+	 * fields. Keep this in mind if you plan to reuse the default logic (e.g.
+	 * initialize())
+	 * 
+	 * @return a result containing the information used to initialize
+	 *         AttributeDefinition objects
+	 * 
+	 * @throws SQLException if an error occurs
+	 */
+	protected ResultSet createResultSet() throws SQLException {
+		try {
+			UserDefinedType udt = getUserDefinedType();
+			Schema schema = udt.getSchema();
+			return getCatalogObject().getConnection().getMetaData().getAttributes(
+					schema.getCatalog().getName(), schema.getName(), udt.getName(),
+					"%");
+		}
+		catch (RuntimeException e) {
+			SQLException error = new SQLException(
+					MessageFormat
+							.format(
+									Messages.Error_Unsupported_DatabaseMetaData_Method,
+									new Object[] { "java.sql.DatabaseMetaData.getAttributes()"})); //$NON-NLS-1$
+			error.initCause(e);
+			throw error;
+		}
+	}
+
+	/**
+	 * Closes the result set used for catalog object loading. This method is
+	 * implemented as rs.close(). However, if you used a Statement object to
+	 * create the result set, this is where you would close that Statement.
+	 * 
+	 * @param rs the result set to close. This will be the result set created by
+	 *        createResultSet().
+	 */
+	protected void closeResultSet(ResultSet rs) {
+		try {
+			rs.close();
+		}
+		catch (SQLException e) {
+		}
+	}
+
+	/**
+	 * Processes a single row in the result set. By default, this method
+	 * determines whether or not the named attribute definition is filtered,
+	 * invokes createAttributeDefinition() followed by initialize(), finally
+	 * returning the newly created, initialized AttributeDefinition object.
+	 * 
+	 * @param rs the result set
+	 * @return a new AttributeDefinition object
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected AttributeDefinition processRow(ResultSet rs) throws SQLException {
+		String attrDefName = rs.getString(COLUMN_ATTR_NAME);
+		if (attrDefName == null || isFiltered(attrDefName)) {
+			return null;
+		}
+
+		AttributeDefinition attrDef = createAttributeDefinition();
+		initialize(attrDef, rs);
+
+		return attrDef;
+	}
+
+	/**
+	 * Returns a new AttributeDefinition object. By default, this method returns
+	 * a new AttributeDefinitionImpl.
+	 * 
+	 * @return a new AttributeDefinition object.
+	 */
+	protected AttributeDefinition createAttributeDefinition() {
+		return SQLDataTypesFactory.eINSTANCE.createAttributeDefinition();
+	}
+
+	/**
+	 * Used to initialize a newly created AttributeDefinition object. By
+	 * default, this method initializes the name, description, default value,
+	 * data type and nullable attribute of the Column. This method may be
+	 * overridden to initialize any vendor specific properties.
+	 * 
+	 * @param attrDef a newly created Column object
+	 * @param rs the result set containing the information
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected void initialize(AttributeDefinition attrDef, ResultSet rs)
+			throws SQLException {
+		attrDef.setName(rs.getString(COLUMN_ATTR_NAME));
+		attrDef.setDescription(rs.getString(COLUMN_REMARKS));
+		attrDef.setDefaultValue(rs.getString(COLUMN_ATTR_DEF));
+
+		initAttributeDefinitionType(attrDef, rs);
+	}
+
+	/**
+	 * Initializes the type of the AttributeDefinition object. This method will
+	 * resolve any dependencies necessary depending on whether the object is
+	 * typed as a user defined type or predefined data type.
+	 * 
+	 * @param attrDef a AttributeDefinition
+	 * @param rs the result set containing the information
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected void initAttributeDefinitionType(AttributeDefinition attrDef,
+			ResultSet rs) throws SQLException {
+		// db definition types are always upper case: make sure the typeName is
+		// upper too
+		String typeName = rs.getString(COLUMN_ATTR_TYPE_NAME).toUpperCase();
+		int typeCode = rs.getInt(COLUMN_DATA_TYPE);
+
+		// See if it's a predefined type
+		List pdtds = getDatabaseDefinition()
+				.getPredefinedDataTypeDefinitionsByJDBCEnumType(typeCode);
+		if (pdtds.size() > 0) {
+			PredefinedDataTypeDefinition pdtd = null;
+			for (Iterator it = pdtds.iterator(); pdtd == null && it.hasNext();) {
+				PredefinedDataTypeDefinition curPDTD = (PredefinedDataTypeDefinition) it
+						.next();
+				for (Iterator nameIt = curPDTD.getName().iterator(); nameIt
+						.hasNext();) {
+					String name = (String) nameIt.next();
+					if (typeName.equals(name)) {
+						pdtd = curPDTD;
+						break;
+					}
+				}
+			}
+
+			if (pdtd == null) {
+				// See if we can find one for the named type
+				pdtd = getDatabaseDefinition().getPredefinedDataTypeDefinition(
+						typeName);
+			}
+
+			if (pdtd != null
+					|| (pdtd == null && typeCode != Types.OTHER && typeCode != Types.REF)) {
+				if (pdtd == null) {
+					// Use the first element by default
+					pdtd = (PredefinedDataTypeDefinition) pdtds.get(0);
+				}
+
+				PredefinedDataType pdt = getDatabaseDefinition()
+						.getPredefinedDataType(pdtd);
+				if (pdtd.isLengthSupported()) {
+					EStructuralFeature feature = pdt.eClass()
+							.getEStructuralFeature("length"); //$NON-NLS-1$
+					pdt.eSet(feature, new Integer(rs.getInt(COLUMN_ATTR_SIZE)));
+				}
+				if (pdtd.isPrecisionSupported()) {
+					EStructuralFeature feature = pdt.eClass()
+							.getEStructuralFeature("precision"); //$NON-NLS-1$
+					pdt.eSet(feature, new Integer(rs.getInt(COLUMN_ATTR_SIZE)));
+				}
+				if (pdtd.isScaleSupported()) {
+					EStructuralFeature feature = pdt.eClass()
+							.getEStructuralFeature("scale"); //$NON-NLS-1$
+					pdt.eSet(feature, new Integer(rs
+							.getInt(COLUMN_DECIMAL_DIGITS)));
+				}
+				attrDef.setDataType(pdt);
+				return;
+			}
+		}
+
+		if (typeName == null)
+			return;
+
+		// see if we can locate a UDT
+		if (Types.REF == typeCode) {
+			ReferenceDataType ref = createReferenceDataType();
+			if (ref == null) {
+				// TODO: Add some logging maybe?
+				return;
+			}
+			UserDefinedType udt = findUserDefinedType(typeName);
+			Table table = findScopedTable(rs.getString(COLUMN_SCOPE_CATALOG),
+					rs.getString(COLUMN_SCOPE_SCHEMA), rs
+							.getString(COLUMN_SCOPE_TABLE));
+			initReferenceDataType(ref, udt, table);
+			attrDef.setDataType(ref);
+		}
+		else {
+			UserDefinedType udt = findUserDefinedType(typeName);
+			attrDef.setDataType(udt);
+		}
+	}
+
+	/**
+	 * Creates a new ReferenceDataType. Default implementation returns null.
+	 * 
+	 * @return a new ReferenceDataType
+	 */
+	protected ReferenceDataType createReferenceDataType() {
+		return null;
+	}
+
+	/**
+	 * Initializes a new ReferenceDataType. Associates the specified UDT with
+	 * the new reference type.
+	 * 
+	 * @param ref a new reference data type
+	 * @param udt a structured user defined type
+	 * @param scopeTable the table to which the reference is scoped
+	 */
+	protected void initReferenceDataType(ReferenceDataType ref,
+			UserDefinedType udt, Table scopeTable) {
+		if (udt instanceof StructuredUserDefinedType) {
+			ref.setReferencedType((StructuredUserDefinedType) udt);
+		}
+		else {
+			// TODO: Add some logging?
+		}
+		ref.setScopeTable(scopeTable);
+	}
+
+	/**
+	 * Utility method.
+	 * 
+	 * @return returns the catalog object being operated upon as a
+	 *         UserDefinedType (i.e. (UserDefinedType) getCatalogObject()).
+	 */
+	protected UserDefinedType getUserDefinedType() {
+		return (UserDefinedType) getCatalogObject();
+	}
+
+	/**
+	 * Utility method. Retrieves the DatabaseDefinition that applies to the
+	 * catalog object.
+	 * 
+	 * @return the DatabaseDefinition for the catalog object
+	 */
+	protected DatabaseDefinition getDatabaseDefinition() {
+		return RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry()
+				.getDefinition(getCatalogObject().getCatalogDatabase());
+	}
+
+	/**
+	 * Utility method. This method is used to create a Matcher that will be used
+	 * for finding a referenced UDT. The Matcher accounts for the naming scheme
+	 * used by the database (e.g. whether the catalog name is placed at the
+	 * beginning or end of a fully qualified object name).
+	 * 
+	 * @param name the UDT name
+	 * @return a Matcher
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected Matcher getUDTNameMatcher(String name) throws SQLException {
+		if (mUDTNameMatcherPattern == null) {
+			// pattern match
+			// catalog at start
+			// <catalog><catalog separator><schema name><unknown separator><udt
+			// name>
+			// <schema name><unknown separator><udt name><catalog
+			// separator><catalog>
+			DatabaseMetaData dbmd = getCatalogObject().getConnection()
+					.getMetaData();
+			String namePattern = "([a-zA-Z0-9_" + dbmd.getExtraNameCharacters()
+					+ "]*)";
+			String catalogSeparator = dbmd.getCatalogSeparator();
+			String regex = namePattern + "." + namePattern;
+			if (name.indexOf(catalogSeparator) < 0) {
+				regex = regex + "()";
+			}
+			else if (dbmd.isCatalogAtStart()) {
+				mCatalogAtStart = true;
+				regex = namePattern + catalogSeparator + regex;
+			}
+			else {
+				regex = regex + catalogSeparator + namePattern;
+			}
+			mUDTNameMatcherPattern = Pattern.compile(regex);
+		}
+		return mUDTNameMatcherPattern.matcher(name);
+	}
+
+	/**
+	 * Used by initType() to resolve a UDT.
+	 * 
+	 * @param typeName the UDT name being searched for
+	 * @return the UDT, if found; null otherwise.
+	 */
+	protected UserDefinedType findUserDefinedType(String typeName) {
+		Matcher matcher;
+		try {
+			matcher = getUDTNameMatcher(typeName);
+		}
+		catch (SQLException e) {
+			return null;
+		}
+
+		if (matcher.matches()) {
+			String catalogName;
+			String schemaName;
+			String udtName;
+			if (mCatalogAtStart) {
+				catalogName = matcher.group(1);
+				schemaName = matcher.group(2);
+				udtName = matcher.group(3);
+			}
+			else {
+				schemaName = matcher.group(1);
+				udtName = matcher.group(2);
+				catalogName = matcher.group(3);
+			}
+			if (udtName == null) {
+				return null;
+			}
+			if (catalogName == null) {
+				catalogName = new String();
+			}
+			if (schemaName == null) {
+				schemaName = new String();
+			}
+
+			Database db = getCatalogObject().getCatalogDatabase();
+			for (Iterator catIt = db.getCatalogs().iterator(); catIt.hasNext();) {
+				Catalog catalog = (Catalog) catIt.next();
+				if (catalogName.equals(catalog.getName())) {
+					for (Iterator schemIt = catalog.getSchemas().iterator(); schemIt
+							.hasNext();) {
+						Schema schema = (Schema) schemIt.next();
+						if (schemaName.equals(schema.getName())) {
+							for (Iterator udtIt = schema.getUserDefinedTypes()
+									.iterator(); udtIt.hasNext();) {
+								UserDefinedType udt = (UserDefinedType) udtIt
+										.next();
+								if (udtName.equals(udt.getName())) {
+									// found it
+									return udt;
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Resloves the table scoped to a referenced UDT.
+	 * 
+	 * @param catalogScope catalog containing the scoped table
+	 * @param schemaScope schema containing the scoped table
+	 * @param tableScope the scoped table's name
+	 * @return the scoped table; null if it couldn't be found
+	 */
+	protected Table findScopedTable(String catalogScope, String schemaScope,
+			String tableScope) {
+		if (tableScope == null) {
+			return null;
+		}
+		if (catalogScope == null) {
+			catalogScope = new String();
+		}
+		if (schemaScope == null) {
+			schemaScope = new String();
+		}
+
+		Database db = getCatalogObject().getCatalogDatabase();
+		for (Iterator catIt = db.getCatalogs().iterator(); catIt.hasNext();) {
+			Catalog catalog = (Catalog) catIt.next();
+			if (catalogScope.equals(catalog.getName())) {
+				for (Iterator schemIt = catalog.getSchemas().iterator(); schemIt
+						.hasNext();) {
+					Schema schema = (Schema) schemIt.next();
+					if (schemaScope.equals(schema.getName())) {
+						for (Iterator tableIt = schema.getTables().iterator(); tableIt
+								.hasNext();) {
+							Table table = (Table) tableIt.next();
+							if (tableScope.equals(table.getName())) {
+								// found it
+								return table;
+							}
+						}
+					}
+				}
+			}
+		}
+		return null;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCUDTSuperTypeLoader.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCUDTSuperTypeLoader.java
new file mode 100644
index 0000000..d4bd28b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCUDTSuperTypeLoader.java
@@ -0,0 +1,199 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.loader;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.schema.Catalog;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+
+import com.ibm.icu.text.MessageFormat;
+
+/**
+ * Base loader implementation for loading a UDT's super type object. This class
+ * may be specialized as necessary to meet a particular vendor's needs.
+ * 
+ * @since 1.0
+ */
+public class JDBCUDTSuperTypeLoader extends JDBCBaseLoader {
+
+	/**
+	 * The column name containing the super type's catalog name.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getSuperTypes()
+	 */
+	public static final String COLUMN_SUPERTYPE_CAT = "SUPERTYPE_CAT"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the super type's schema name.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getSuperTypes()
+	 */
+	public static final String COLUMN_SUPERTYPE_SCHEM = "SUPERTYPE_SCHEM"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the super type's name.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getSuperTypes()
+	 */
+	public static final String COLUMN_SUPERTYPE_NAME = "SUPERTYPE_NAME"; //$NON-NLS-1$
+
+	/**
+	 * This constructs the loader using no filtering.
+	 * 
+	 * @param catalogObject the Database object upon which this loader operates.
+	 */
+	public JDBCUDTSuperTypeLoader(ICatalogObject catalogObject) {
+		this(catalogObject, null);
+	}
+
+	/**
+	 * @param catalogObject the Table object upon which this loader operates.
+	 * @param connectionFilterProvider the filter provider used for filtering
+	 *        the "UDT" object being loaded
+	 */
+	public JDBCUDTSuperTypeLoader(
+									ICatalogObject catalogObject,
+									IConnectionFilterProvider connectionFilterProvider) {
+		super(catalogObject, connectionFilterProvider);
+		if (catalogObject != null)
+			assert (catalogObject instanceof UserDefinedType);
+	}
+
+	/**
+	 * @return the super type, null if no super type exists.
+	 * @throws SQLException if an error occurred during loading.
+	 */
+	public UserDefinedType loadSuperType() throws SQLException {
+		UserDefinedType retVal = null;
+		ResultSet rs = null;
+		try {
+			rs = createResultSet();
+			if (rs.next()) {
+				retVal = findUserDefinedType(
+						rs.getString(COLUMN_SUPERTYPE_CAT), rs
+								.getString(COLUMN_SUPERTYPE_SCHEM), rs
+								.getString(COLUMN_SUPERTYPE_NAME));
+			}
+			return retVal;
+		}
+		finally {
+			if (rs != null) {
+				closeResultSet(rs);
+			}
+		}
+	}
+
+	/**
+	 * Creates a result set to be used by the loading logic. The default version
+	 * uses of the JDBC DatabaseMetaData.getSuperTypes() to create the result
+	 * set. This method may be overridden to use a vendor specific query.
+	 * However, the default logic requires the columns named by the "COLUMN_*"
+	 * fields. Keep this in mind if you plan to reuse the default logic (e.g.
+	 * loadSuperType())
+	 * 
+	 * @return a result containing the information used to initialize
+	 *         UserDefinedType object
+	 * 
+	 * @throws SQLException if an error occurs
+	 */
+	protected ResultSet createResultSet() throws SQLException {
+		try {
+			UserDefinedType udt = getUserDefinedType();
+			Schema schema = udt.getSchema();
+			return getCatalogObject().getConnection().getMetaData().getSuperTypes(
+					schema.getCatalog().getName(), schema.getName(), udt.getName());
+		}
+		catch (RuntimeException e) {
+			SQLException error = new SQLException(
+					MessageFormat
+							.format(
+									Messages.Error_Unsupported_DatabaseMetaData_Method,
+									new Object[] { "java.sql.DatabaseMetaData.getSuperTypes()"})); //$NON-NLS-1$
+			error.initCause(e);
+			throw error;
+		}
+	}
+
+	/**
+	 * Closes the result set used for catalog object loading. This method is
+	 * implemented as rs.close(). However, if you used a Statement object to
+	 * create the result set, this is where you would close that Statement.
+	 * 
+	 * @param rs the result set to close. This will be the result set created by
+	 *        createResultSet().
+	 */
+	protected void closeResultSet(ResultSet rs) {
+		try {
+			rs.close();
+		}
+		catch (SQLException e) {
+		}
+	}
+
+	/**
+	 * Utility method.
+	 * 
+	 * @return returns the catalog object being operated upon as a
+	 *         UserDefinedType (i.e. (UserDefinedType) getCatalogObject()).
+	 */
+	protected UserDefinedType getUserDefinedType() {
+		return (UserDefinedType) getCatalogObject();
+	}
+
+	/**
+	 * Used to resolve a UDT.
+	 * 
+	 * @param typeName the UDT name being searched for
+	 * @return the UDT, if found; null otherwise.
+	 */
+	protected UserDefinedType findUserDefinedType(String catalogName,
+			String schemaName, String typeName) {
+		if (typeName == null) {
+			return null;
+		}
+		if (catalogName == null) {
+			catalogName = new String();
+		}
+		if (schemaName == null) {
+			schemaName = new String();
+		}
+
+		Database db = getCatalogObject().getCatalogDatabase();
+		for (Iterator catIt = db.getCatalogs().iterator(); catIt.hasNext();) {
+			Catalog catalog = (Catalog) catIt.next();
+			if (catalogName.equals(catalog.getName())) {
+				for (Iterator schemIt = catalog.getSchemas().iterator(); schemIt
+						.hasNext();) {
+					Schema schema = (Schema) schemIt.next();
+					if (schemaName.equals(schema.getName())) {
+						for (Iterator udtIt = schema.getUserDefinedTypes()
+								.iterator(); udtIt.hasNext();) {
+							UserDefinedType udt = (UserDefinedType) udtIt
+									.next();
+							if (typeName.equals(udt.getName())) {
+								// found it
+								return udt;
+							}
+						}
+					}
+				}
+			}
+		}
+		return null;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCUserDefinedTypeLoader.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCUserDefinedTypeLoader.java
new file mode 100644
index 0000000..2de2255
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/JDBCUserDefinedTypeLoader.java
@@ -0,0 +1,461 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.loader;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCDistinctUDT;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCStructuredUDT;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.modelbase.sql.datatypes.DistinctUserDefinedType;
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataTypesPackage;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.emf.ecore.EClass;
+
+import com.ibm.icu.text.MessageFormat;
+
+/**
+ * Base loader implementation for loading a database's catalog objects. This
+ * class may be specialized as necessary to meet a particular vendor's needs.
+ * 
+ * @since 1.0
+ */
+public class JDBCUserDefinedTypeLoader extends JDBCBaseLoader {
+
+	/**
+	 * The column name containing the UDT's name.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getUDTs()
+	 */
+	public static final String COLUMN_TYPE_NAME = "TYPE_NAME"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the UDT's class name.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getUDTs()
+	 */
+	public static final String COLUMN_CLASS_NAME = "CLASS_NAME"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the UDT's data type.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getUDTs()
+	 */
+	public static final String COLUMN_DATA_TYPE = "DATA_TYPE"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the UDT's description.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getUDTs()
+	 */
+	public static final String COLUMN_REMARKS = "REMARKS"; //$NON-NLS-1$
+
+	/**
+	 * The column name containing the UDT's base type.
+	 * 
+	 * @see java.sql.DatabaseMetaData.getUDTs()
+	 */
+	public static final String COLUMN_BASE_TYPE = "BASE_TYPE"; //$NON-NLS-1$
+
+	private IUDTFactory mDistinctTypeFactory;
+	private IUDTFactory mJavaTypeFactory;
+	private IUDTFactory mStructTypeFactory;
+
+	/**
+	 * This constructs the loader using the default DistinctTypeFactory
+	 * StructTypeFactory, no Java type factory, and uses the
+	 * ConnectionFilter.USER_DEFINED_TYPE_FILTER filter.
+	 * 
+	 * @param catalogObject the Schema object upon which this loader operates.
+	 */
+	public JDBCUserDefinedTypeLoader(ICatalogObject catalogObject) {
+		this(catalogObject, new SchemaObjectFilterProvider(
+				ConnectionFilter.USER_DEFINED_TYPE_FILTER));
+	}
+
+	/**
+	 * This constructs the loader using the default DistinctTypeFactory
+	 * StructTypeFactory, and no Java type factory.
+	 * 
+	 * @param catalogObject the Schema object upon which this loader operates.
+	 */
+	public JDBCUserDefinedTypeLoader(
+										ICatalogObject catalogObject,
+										IConnectionFilterProvider connectionFilterProvider) {
+		this(catalogObject, connectionFilterProvider, new DistinctTypeFactory(
+				RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry()
+						.getDefinition(catalogObject.getCatalogDatabase())),
+				new StructTypeFactory(), null);
+	}
+
+	/**
+	 * @param catalogObject the Schema object upon which this loader operates.
+	 * @param connectionFilterProvider the filter provider used for filtering
+	 *        the "UDT" objects being loaded
+	 * @param distinctTypeFactory factory for distinct UDTs
+	 * @param structTypeFactory factory for struct UDTs
+	 * @param javaTypeFactory factory for Java UDTs
+	 */
+	public JDBCUserDefinedTypeLoader(
+										ICatalogObject catalogObject,
+										IConnectionFilterProvider connectionFilterProvider,
+										IUDTFactory distinctTypeFactory,
+										IUDTFactory structTypeFactory,
+										IUDTFactory javaTypeFactory) {
+		super(catalogObject, connectionFilterProvider);
+		assert (catalogObject instanceof Schema);
+
+		mDistinctTypeFactory = distinctTypeFactory;
+		mJavaTypeFactory = javaTypeFactory;
+		mStructTypeFactory = structTypeFactory;
+	}
+
+	/**
+	 * @return a collection of UserDefinedType objects
+	 * 
+	 * @throws SQLException if an error occurred during loading.
+	 * 
+	 * @deprecated see {@link #loadUDTs(List, Collection)}
+	 */
+	public List loadUDTs() throws SQLException {
+		List retVal = new ArrayList();
+		loadUDTs(retVal, Collections.EMPTY_SET);
+		return retVal;
+	}
+
+	/**
+	 * Loads the "UDT" objects from the database. This method uses the result
+	 * set from createResultSet() to load the "UDT" objects from the server.
+	 * This method first checks the name of the "UDT" to determine whether or
+	 * not it should be filtered. If it is not filtered, it checks to see if an
+	 * object with that name was loaded previously. If it finds an existing
+	 * object, it refreshes that object and adds it to the containment list. If
+	 * the named object does not exist, the result set is passed to
+	 * processRow(). UserDefinedType objects are created and initialized using
+	 * one of the registered factories.
+	 * 
+	 * This method should only be overridden as a last resort when the desired
+	 * behavior cannot be acheived by overriding createResultSet(),
+	 * closeResultSet(), processRow(), and a specialized Struct, Distinct and
+	 * Java type factories.
+	 * 
+	 * @param existingUDTs the catalog objects which were previously loaded
+	 * @param containmentList the containment list held by parent
+	 * @throws SQLException if an error occurred during loading.
+	 */
+	public void loadUDTs(List containmentList, Collection existingUDTs)
+			throws SQLException {
+		ResultSet rs = null;
+		try {
+			initActiveFilter();
+			for (rs = createResultSet(); rs.next();) {
+				String udtName = rs.getString(COLUMN_TYPE_NAME);
+				if (udtName == null || isFiltered(udtName)) {
+					continue;
+				}
+				UserDefinedType udt = (UserDefinedType) getAndRemoveSQLObject(
+						existingUDTs, udtName);
+				if (udt == null) {
+					udt = processRow(rs);
+					if (udt != null) {
+						containmentList.add(udt);
+					}
+				}
+				else {
+					IUDTFactory udtFactory = null;
+					switch (rs.getInt(COLUMN_DATA_TYPE)) {
+					case Types.JAVA_OBJECT:
+						udtFactory = mJavaTypeFactory;
+						break;
+					case Types.STRUCT:
+						udtFactory = mStructTypeFactory;
+						break;
+					case Types.DISTINCT:
+						udtFactory = mDistinctTypeFactory;
+						break;
+					}
+					if (udtFactory != null) {
+						udtFactory.initialize(udt, rs);
+					}
+					containmentList.add(udt);
+					if (udt instanceof ICatalogObject) {
+						((ICatalogObject) udt).refresh();
+					}
+				}
+			}
+		}
+		finally {
+			if (rs != null) {
+				closeResultSet(rs);
+			}
+		}
+	}
+
+	/**
+	 * Removes the specified UDTs from the model.
+	 * 
+	 * @param existingUDTs the UDTs to be removed from the model.
+	 */
+	public void clearUDTs(List existingUDTs) {
+		existingUDTs.clear();
+	}
+
+	/**
+	 * Creates a result set to be used by the loading logic. The default version
+	 * uses of the JDBC DatabaseMetaData.getUDTs() to create the result set.
+	 * This method may be overridden to use a vendor specific query. However,
+	 * the default logic requires the columns named by the "COLUMN_*" fields.
+	 * Keep this in mind if you plan to reuse the default logic (e.g.
+	 * StructTypeFactory.initialize())
+	 * 
+	 * @return a result containing the information used to initialize Routine
+	 *         objects
+	 * 
+	 * @throws SQLException if an error occurs
+	 */
+	protected ResultSet createResultSet() throws SQLException {
+		try {
+			Schema schema = getSchema();
+			return getCatalogObject().getConnection().getMetaData().getUDTs(
+					schema.getCatalog().getName(), schema.getName(),
+					getJDBCFilterPattern(), null);
+		}
+		catch (RuntimeException e) {
+			SQLException error = new SQLException(MessageFormat.format(
+					Messages.Error_Unsupported_DatabaseMetaData_Method,
+					new Object[] { "java.sql.DatabaseMetaData.getUDTs()"})); //$NON-NLS-1$
+			error.initCause(e);
+			throw error;
+		}
+	}
+
+	/**
+	 * Closes the result set used for catalog object loading. This method is
+	 * implemented as rs.close(). However, if you used a Statement object to
+	 * create the result set, this is where you would close that Statement.
+	 * 
+	 * @param rs the result set to close. This will be the result set created by
+	 *        createResultSet().
+	 */
+	protected void closeResultSet(ResultSet rs) {
+		try {
+			rs.close();
+		}
+		catch (SQLException e) {
+		}
+	}
+
+	/**
+	 * Processes a single row in the result set. By default, this method
+	 * determines whether or not the UDT is a struct, distinct or Java type and
+	 * invokes createUDT() on the appropriate factory., returning the newly
+	 * created, initialized UserDefinedType object.
+	 * 
+	 * @param rs the result set
+	 * @return a new UserDefinedType object
+	 * @throws SQLException if anything goes wrong
+	 */
+	protected UserDefinedType processRow(ResultSet rs) throws SQLException {
+		IUDTFactory udtFactory = null;
+		switch (rs.getInt(COLUMN_DATA_TYPE)) {
+		case Types.JAVA_OBJECT:
+			udtFactory = mJavaTypeFactory;
+			break;
+		case Types.STRUCT:
+			udtFactory = mStructTypeFactory;
+			break;
+		case Types.DISTINCT:
+			udtFactory = mDistinctTypeFactory;
+			break;
+		}
+		if (udtFactory == null) {
+			return null;
+		}
+
+		return udtFactory.createUDT(rs);
+	}
+
+	/**
+	 * Utility method.
+	 * 
+	 * @return returns the catalog object being operated upon as a Schema (i.e.
+	 *         (Schema) getCatalogObject()).
+	 */
+	protected Schema getSchema() {
+		return (Schema) getCatalogObject();
+	}
+
+	/**
+	 * Interface for providing creation logic for UDTs.
+	 */
+	public static interface IUDTFactory {
+
+		/**
+		 * @return the EClass used to represent the UDT objects created by this
+		 *         factory. This is used to identify existing objects in the
+		 *         model during a refresh (e.g. to reuse the object, preventing
+		 *         external references from breaking).
+		 */
+		EClass getUDTEClass();
+
+		/**
+		 * Creates and initializes a UDT object based on the meta-data in the
+		 * result set.
+		 * 
+		 * @param rs the result set
+		 * @return a new, initialized UserDefinedType object.
+		 * @throws SQLException if anything goes wrong
+		 */
+		UserDefinedType createUDT(ResultSet rs) throws SQLException;
+		
+		/**
+		 * Initializes a UDT object based on the meta-data in the result set.
+		 * The UDT object may be a new UDT object requiring initialization or an
+		 * existing UDT object that is being reinitialized.
+		 * 
+		 * @param udt the UDT to initialize
+		 * @param rs the result set
+		 * @throws SQLException if anything goes wrong
+		 */
+		void initialize(UserDefinedType udt, ResultSet rs) throws SQLException;
+	}
+
+	/**
+	 * Base factory implementation for distinct UDTs.
+	 */
+	public static class DistinctTypeFactory extends StructTypeFactory {
+
+		private DatabaseDefinition mDatabaseDefinition;
+
+		public DistinctTypeFactory(DatabaseDefinition databaseDefinition) {
+			mDatabaseDefinition = databaseDefinition;
+		}
+
+		/**
+		 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCUserDefinedTypeLoader.StructTypeFactory#getUDTEClass()
+		 * 
+		 * @return SQLDataTypesPackage.eINSTANCE.getDistinctUserDefinedType()
+		 */
+		public EClass getUDTEClass() {
+			return SQLDataTypesPackage.eINSTANCE.getDistinctUserDefinedType();
+		}
+
+		/**
+		 * Internal factory method. The default implementation returns a new
+		 * JDBCDistinctUDT object.
+		 * 
+		 * @return a new UserDefinedType object
+		 * 
+		 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCUserDefinedTypeLoader.StructTypeFactory#newUDT()
+		 */
+		protected UserDefinedType newUDT() {
+			return new JDBCDistinctUDT();
+		}
+
+		/**
+		 * @return the DatabaseDefinition associated with this object
+		 */
+		protected DatabaseDefinition getDatabaseDefinition() {
+			return mDatabaseDefinition;
+		}
+
+		/**
+		 * Initializes the new UserDefinedType object using the meta-data in the
+		 * result set. This method initializes the name, description and type of
+		 * the UDT.
+		 * 
+		 * @param udt a new UserDefinedType object
+		 * @param rs the result set
+		 * @throws SQLException if anything goes wrong
+		 * 
+		 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCUserDefinedTypeLoader.StructTypeFactory#initialize(org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType,
+		 *      java.sql.ResultSet)
+		 */
+		public void initialize(UserDefinedType udt, ResultSet rs)
+				throws SQLException {
+			super.initialize(udt, rs);
+
+			List preDefinedTypes = getDatabaseDefinition()
+					.getPredefinedDataTypesByJDBCEnumType(
+							rs.getShort(COLUMN_BASE_TYPE));
+			if (preDefinedTypes.size() > 0) {
+				// Assume first type listed is the appropriately named type.
+				((DistinctUserDefinedType) udt)
+						.setPredefinedRepresentation((PredefinedDataType) preDefinedTypes
+								.get(0));
+			}
+		}
+	}
+
+	/**
+	 * Base factory implementation for struct UDTs.
+	 */
+	public static class StructTypeFactory implements IUDTFactory {
+
+		/**
+		 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCUserDefinedTypeLoader.IUDTFactory#getUDTEClass()
+		 * 
+		 * @return SQLDataTypesPackage.eINSTANCE.getStructuredUserDefinedType()
+		 */
+		public EClass getUDTEClass() {
+			return SQLDataTypesPackage.eINSTANCE.getStructuredUserDefinedType();
+		}
+
+		/**
+		 * Creates and initializes a new UserDefinedType object from the
+		 * meta-data in the result set.
+		 * 
+		 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCUserDefinedTypeLoader.IUDTFactory#createUDT(java.sql.ResultSet)
+		 */
+		public UserDefinedType createUDT(ResultSet rs) throws SQLException {
+			UserDefinedType retVal = newUDT();
+			initialize(retVal, rs);
+			return retVal;
+		}
+
+		/**
+		 * Internal factory method. The default implementation returns a new
+		 * JDBCStructuredUDT object.
+		 * 
+		 * @return a new UserDefinedType object
+		 */
+		protected UserDefinedType newUDT() {
+			return new JDBCStructuredUDT();
+		}
+
+		/**
+		 * Initializes the new UserDefinedType object using the meta-data in the
+		 * result set. This method initializes the name and description of the
+		 * UDT.
+		 * 
+		 * @param udt a new UserDefinedType object
+		 * @param rs the result set
+		 * @throws SQLException if anything goes wrong
+		 */
+		public void initialize(UserDefinedType udt, ResultSet rs)
+				throws SQLException {
+			udt.setName(rs.getString(COLUMN_TYPE_NAME));
+			udt.setDescription(rs.getString(COLUMN_REMARKS));
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/Messages.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/Messages.java
new file mode 100644
index 0000000..ed7d91f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/Messages.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    rcernich - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.loader;
+
+import org.eclipse.osgi.util.NLS;
+
+public class Messages extends NLS {
+
+	private static final String BUNDLE_NAME = "org.eclipse.datatools.connectivity.sqm.loader.messages"; //$NON-NLS-1$
+	public static String Error_Unsupported_DatabaseMetaData_Method;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
+
+	private Messages() {
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/SchemaFilterProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/SchemaFilterProvider.java
new file mode 100644
index 0000000..85117c9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/SchemaFilterProvider.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.loader;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo;
+import org.eclipse.datatools.modelbase.sql.schema.Catalog;
+
+/**
+ * Filter provider implementation for Schema objects.
+ * 
+ * @since 1.0
+ */
+public class SchemaFilterProvider extends ConnectionFilterProvider {
+
+	/**
+	 * @return the schema ConnectionFilter associated with the specified catalog
+	 *         object (which must be a Catalog).
+	 * 
+	 * @see org.eclipse.datatools.connectivity.sqm.loader.IConnectionFilterProvider#getConnectionFilter(org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject)
+	 */
+	public ConnectionFilter getConnectionFilter(ICatalogObject catalogObject) {
+		ConnectionInfo ci = getConnectionInfo(catalogObject);
+		ConnectionFilter retVal = ci.getFilter(((Catalog) catalogObject)
+				.getName()
+				+ ConnectionFilter.FILTER_SEPARATOR
+				+ ConnectionFilter.SCHEMA_FILTER);
+		if (retVal == null) {
+			retVal = ci.getFilter(ConnectionFilter.SCHEMA_FILTER);
+		}
+		return retVal;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/SchemaObjectFilterProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/SchemaObjectFilterProvider.java
new file mode 100644
index 0000000..b20fae0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/SchemaObjectFilterProvider.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.loader;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+
+/**
+ * Filter provider implementation for objects contained within schema. This
+ * implementation looks for a filter associated with a Schema object (i.e.
+ * catalog.schema.filterType). If that does not exist it searches for a filter
+ * associated with the catalog containing the schema (i.e. catalog.filterType).
+ * If that does not exist, it searches for a default filter on the connection
+ * profile (i.e. filterType).
+ * 
+ * @since 1.0
+ */
+public class SchemaObjectFilterProvider extends ConnectionFilterProvider {
+
+	private String mFilterType;
+
+	/**
+	 * @param filterType the type of filter (e.g. ConnectionFilter.TABLE_FILTER)
+	 */
+	public SchemaObjectFilterProvider(String filterType) {
+		mFilterType = filterType;
+	}
+
+	/**
+	 * @return the schema ConnectionFilter associated with the specified catalog
+	 *         object (which must be a Schema).
+	 * 
+	 * @see org.eclipse.datatools.connectivity.sqm.loader.IConnectionFilterProvider#getConnectionFilter(org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject)
+	 */
+	public ConnectionFilter getConnectionFilter(ICatalogObject catalogObject) {
+		ConnectionFilter retVal = null;
+		ConnectionInfo ci = getConnectionInfo(catalogObject);
+		Schema schema = (Schema) catalogObject;
+		retVal = ci.getFilter(schema.getCatalog().getName()
+				+ ConnectionFilter.FILTER_SEPARATOR + schema.getName()
+				+ ConnectionFilter.FILTER_SEPARATOR + mFilterType);
+		if (retVal == null) {
+			retVal = ci.getFilter(schema.getCatalog().getName()
+					+ ConnectionFilter.FILTER_SEPARATOR + mFilterType);
+		}
+		if (retVal == null) {
+			retVal = ci.getFilter(mFilterType);
+		}
+		return retVal;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/messages.properties b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/messages.properties
new file mode 100644
index 0000000..20a1e38
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/loader/messages.properties
@@ -0,0 +1 @@
+Error_Unsupported_DatabaseMetaData_Method=An exception occurred invoking {0}.
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/.classpath b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/.gitignore b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/.gitignore
new file mode 100644
index 0000000..3f09be5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/.gitignore
@@ -0,0 +1,4 @@
+bin
+temp.folder
+build.xml
+rdb.server.ui.jar
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/.project b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/.project
new file mode 100644
index 0000000..519500e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/.project
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.sqm.server.ui</name>
+	<comment></comment>
+	<projects>
+		<project>com.ibm.datatools.core</project>
+		<project>com.ibm.datatools.core.ui</project>
+		<project>com.ibm.datatools.outputview</project>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..73f4382
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Fri Apr 13 14:14:14 PDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.4
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..2cadf32
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,48 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.sqm.server.ui; singleton:=true
+Bundle-Version: 1.3.1.qualifier
+Bundle-Activator: org.eclipse.datatools.connectivity.sqm.server.internal.ui.ServerUIPlugin
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Export-Package: org.eclipse.datatools.connectivity.sqm.server.internal.ui,
+ org.eclipse.datatools.connectivity.sqm.server.internal.ui.dialogs,
+ org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.actions.popup,
+ org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.content,
+ org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.layout,
+ org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.loading,
+ org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers,
+ org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.bookmark,
+ org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.impl,
+ org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout,
+ org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout.hierar,
+ org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout.vnode,
+ org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.decorators,
+ org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.label,
+ org.eclipse.datatools.connectivity.sqm.server.internal.ui.icons,
+ org.eclipse.datatools.connectivity.sqm.server.internal.ui.l10n,
+ org.eclipse.datatools.connectivity.sqm.server.internal.ui.layout,
+ org.eclipse.datatools.connectivity.sqm.server.internal.ui.services,
+ org.eclipse.datatools.connectivity.sqm.server.internal.ui.util,
+ org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.logging,
+ org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.resources
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.core.resources,
+ org.eclipse.ui.ide,
+ org.eclipse.ui,
+ org.eclipse.datatools.modelbase.sql.edit,
+ org.eclipse.datatools.connectivity.sqm.core,
+ org.eclipse.datatools.connectivity.sqm.core.ui,
+ org.eclipse.datatools.modelbase.dbdefinition,
+ org.eclipse.datatools.connectivity,
+ org.eclipse.datatools.connectivity.ui,
+ org.eclipse.ui.navigator,
+ org.eclipse.ui.views,
+ org.eclipse.emf.edit.ui
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Import-Package: com.ibm.icu.text,
+ com.ibm.icu.util
+
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/about.html b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/build.properties b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/build.properties
new file mode 100644
index 0000000..d78ee2a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/build.properties
@@ -0,0 +1,29 @@
+###############################################################################
+# Copyright (c) 2001, 2004 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+bin.includes = plugin.xml,\
+               schema/,\
+               icons/,\
+               plugin.properties,\
+               .,\
+               about.html,\
+               META-INF/
+source.. = src/
+output.. = bin/
+jars.compile.order = .
+
+jars.extra.classpath =
+src.dir =		src/
+plugin.version =	1.0.0.200709141
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/build.xml b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/build.xml
new file mode 100644
index 0000000..f176ed3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/build.xml
@@ -0,0 +1,217 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ *************************************************************************
+ * Copyright (c) 2005 Sybase, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Sybase, Inc.  - initial API and implementation
+ *  
+ ***************************************************************************
+ -->
+<project name="org.eclipse.datatools.connectivity.sqm.server.ui" default="build.jars" basedir=".">
+	<import file="../org.eclipse.datatools.build/common_build.xml" optional="true"/>
+	<property name="module.name" value="org.eclipse.datatools.connectivity.sqm.server.ui"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="eclipse.home" location="."/>
+	<property file="build.properties"/>
+	<!-- JavaDoc settings -->
+	<property name="javadocWindowTitle" value="DTP SQL Query Model Server UI"/>
+	<property name="javadocDocTitle" value="DTP SQL Query Model Server UI API (Internal)"/>
+	<property name="javadocPackages" value="org.eclipse.datatools.connectivity.sqm.server.ui.*"/>
+	<property name="javadocFooter" value="&lt;i>Copyright &#169;  2005 IBM Corporation and others. All rights reserved. &lt;/i>"/>
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="true"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="true"/>
+	<property name="javacSource" value="${javac.source}"/>
+	<property name="javacTarget" value="${javac.target}"/>
+	<property name="compilerArg" value=""/>
+	<path id="path_bootclasspath">
+		<fileset dir="${java.home}/lib">
+			<include name="*.jar"/>
+		</fileset>
+		<fileset dir="${eclipse.home}/plugins">
+			<!-- Include jared plug-ins -->
+			<include name="org.eclipse.core.runtime_*.jar"/>
+			<include name="org.eclipse.osgi_*.jar"/>
+			<include name="org.eclipse.core.resources_*.jar"/>
+			<include name="org.eclipse.emf.ecore_*.jar"/>
+			<include name="org.eclipse.emf.common_*.jar"/>
+			<include name="org.eclipse.emf.ecore.sdo_*.jar"/>
+			<include name="org.eclipse.emf.commonj.sdo_*.jar"/>
+			<include name="org.eclipse.emf.ecore.xmi_*.jar"/>
+			<include name="org.eclipse.emf.ecore.change_*.jar"/>
+			<include name="org.eclipse.ui_*.jar"/>
+			<include name="org.eclipse.swt_*.jar"/>
+			<include name="org.eclipse.swt.*_*.jar"/>
+			<include name="org.eclipse.jface_*.jar"/>
+			<include name="org.eclipse.core.commands_*.jar"/>
+			<include name="org.eclipse.ui.workbench_*.jar"/>
+			<include name="org.eclipse.ui.navigator_*.jar"/>
+			<include name="com.ibm.icu_*.jar"/>
+			<!-- Include expanded plug-ins -->
+			<include name="org.eclipse.core.runtime_*/org.eclipse.core.runtime_*.jar"/>
+			<include name="org.eclipse.osgi_*/org.eclipse.osgi_*.jar"/>
+			<include name="org.eclipse.core.resources_*/org.eclipse.core.resources_*.jar"/>
+			<include name="org.eclipse.emf.ecore_*/org.eclipse.emf.ecore*.jar"/>
+			<include name="org.eclipse.emf.common_*/org.eclipse.emf.common*.jar"/>
+			<include name="org.eclipse.emf.ecore.sdo_*/org.eclipse.emf.ecore.sdo*.jar"/>
+			<include name="org.eclipse.emf.commonj.sdo_*/org.eclipse.emf.commonj.sdo*.jar"/>
+			<include name="org.eclipse.emf.ecore.xmi_*/org.eclipse.emf.ecore.xmi*.jar"/>
+			<include name="org.eclipse.emf.ecore.change_*/org.eclipse.emf.ecore.change*.jar"/>
+			<include name="org.eclipse.ui_*/org.eclipse.ui_*.jar"/>
+			<include name="org.eclipse.swt_*/org.eclipse.swt_*.jar"/>
+			<include name="org.eclipse.swt.*_*/org.eclipse.swt.*_*.jar"/>
+			<include name="org.eclipse.jface_*/org.eclipse.jface_*.jar"/>
+			<include name="org.eclipse.core.commands_*/org.eclipse.core.commands_*.jar"/>
+			<include name="org.eclipse.ui.workbench_*/org.eclipse.ui.workbench_*.jar"/>
+			<include name="org.eclipse.ui.navigator_*/navigator.jar"/>
+			<include name="org.eclipse.ui.navigator.resources_*/navigator_resources.jar"/>
+		</fileset>
+		<!-- Dependencies on other DTP plug-ins, built before this one -->
+		<fileset dir="../">
+			<include name="org.eclipse.datatools.modelbase.dbdefinition/bin/*"/>
+			<include name="org.eclipse.datatools.modelbase.dbdefinition/databasedefinition.jar"/>
+			<include name="org.eclipse.datatools.modelbase.sql/bin/*"/>
+			<include name="org.eclipse.datatools.modelbase.sql/sqlmodel.jar"/>
+			<include name="org.eclipse.datatools.connectivity.sqm.core/bin/*"/>
+			<include name="org.eclipse.datatools.connectivity.sqm.core/rdbcore.jar"/>
+			<include name="org.eclipse.datatools.connectivity.sqm.core.ui/bin/*"/>
+			<include name="org.eclipse.datatools.connectivity.sqm.core.ui/rdb.core.ui.jar"/>
+			<include name="org.eclipse.datatools.connectivity/bin/*"/>
+			<include name="org.eclipse.datatools.connectivity/connectivity.jar"/>
+			<include name="org.eclipse.datatools.connectivity.ui/bin/*"/>
+			<include name="org.eclipse.datatools.connectivity.ui/connectivityui.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins">
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/${module.name}">
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.datatools.connectivity.sqm.server.ui for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<zip destfile="${plugin.destination}/${module.name}_${plugin.version}.jar" basedir="${temp.folder}/${module.name}_${plugin.version}" filesonly="false" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="rdb.server.ui.jar" depends="init" unless="rdb.server.ui.jar" description="Create jar: org.eclipse.datatools.connectivity.sqm.server.ui rdb.server.ui.jar.">
+		<delete dir="${temp.folder}/rdb.server.ui.jar.bin"/>
+		<mkdir dir="${temp.folder}/rdb.server.ui.jar.bin"/>
+		<!-- compile the source code -->
+		<javac destdir="${temp.folder}/rdb.server.ui.jar.bin" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bootclasspath}" source="${javacSource}" target="${javacTarget}"		>
+			<compilerarg line="${compilerArg}"/>			
+			<classpath refid="path_bootclasspath"/>
+			<src path="src/"			/>
+			</javac>
+		<!-- Copy necessary resources -->
+		<copy todir="${temp.folder}/rdb.server.ui.jar.bin" failonerror="true" overwrite="false">
+			<fileset dir="src/" excludes="**/*.java, **/package.htm*,null"			/>
+		</copy>
+		<mkdir dir="${build.result.folder}"/>
+		<jar destfile="${build.result.folder}/rdb.server.ui.jar" basedir="${temp.folder}/rdb.server.ui.jar.bin"/>
+		<delete dir="${temp.folder}/rdb.server.ui.jar.bin"/>
+	</target>
+
+	<target name="rdb.server.uisrc.zip" depends="init" unless="rdb.server.uisrc.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<zip destfile="${build.result.folder}/rdb.server.uisrc.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/" includes="**/*.java"			/>
+		</zip>
+	</target>
+
+	<target name="build.jars" depends="init" description="Build all the jars for the plug-in: org.eclipse.datatools.connectivity.sqm.server.ui.">
+		<available property="rdb.server.ui.jar" file="${build.result.folder}/rdb.server.ui.jar"/>
+		<antcall target="rdb.server.ui.jar"/>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="rdb.server.uisrc.zip" file="${build.result.folder}/rdb.server.uisrc.zip"/>
+		<antcall target="rdb.server.uisrc.zip"/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/${module.name}_${plugin.version}"/>
+		<copy todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}" includes="rdb.server.ui.jar"			/>
+		</copy>
+		<copy todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="true" overwrite="false">
+			<fileset dir="${basedir}" includes="plugin.xml,META-INF/,schema/,icons/,plugin.properties,rdb.server.ui.jar,about.html"			/>
+		</copy>
+		<copy todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}" includes="rdb.server.uisrc.zip"/>
+		</copy>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/${module.name}_${plugin.version}"/>
+		<copy file="${build.result.folder}/rdb.server.uisrc.zip" todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="false" overwrite="false"/>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/${module.name}_${plugin.version}"/>
+		<copy file="${temp.folder}/rdb.server.ui.jar.bin.log" todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="false" overwrite="false"/>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.datatools.connectivity.sqm.server.ui of all the zips, jars and logs created.">
+		<delete file="${build.result.folder}/rdb.server.ui.jar"/>
+		<delete file="${build.result.folder}/rdb.server.uisrc.zip"/>
+		<delete file="${plugin.destination}/${module.name}_${plugin.version}.jar"/>
+		<delete file="${plugin.destination}/${module.name}_${plugin.version}.zip"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="C:/V3/3.1/eclipse/workspace-dtp/org.eclipse.datatools.connectivity.sqm.server.ui" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.datatools.connectivity.sqm.server.ui.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}" includes="**/*.bin.log"			/>
+		</delete>
+		<zip destfile="${plugin.destination}/${module.name}_${plugin.version}.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+</project>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/icons/connect_server.gif b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/icons/connect_server.gif
new file mode 100644
index 0000000..9a2594b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/icons/connect_server.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/icons/disconnect_server.gif b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/icons/disconnect_server.gif
new file mode 100644
index 0000000..ec8a8b0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/icons/disconnect_server.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/plugin.properties b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/plugin.properties
new file mode 100644
index 0000000..218a767
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/plugin.properties
@@ -0,0 +1,54 @@
+###############################################################################
+# Copyright (c) 2001, 2004 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName=Eclipse Data Tools Platform Server UI Plug-in
+providerName=Eclipse Data Tools Platform
+serverExplorerLayout=Server Explorer Layout Extension
+serverExplorerInitialization=Server Initialization Provider
+SQL_MODEL_CONTENT_EXTENSION_NAME=SQL Model Content Extension
+
+#
+## Providers for the Server Explorer
+#
+org.eclipse.datatools.connectivity.server.ui.serverExplorer = Database Explorer - "Existing Connections" Core
+rdb.server.ui.views.serverExplorer = Database Explorer
+rdb.server.ui.category = Data
+
+#
+## Menus for the Server Explorer
+#
+rdb.server.ui.actions.connect=&New Connection...
+rdb.server.ui.actions.disconnect=Dis&connect
+rdb.server.ui.actions.edit.table = Table
+rdb.server.ui.actions.edit = Add Database
+rdb.server.ui.actions.delete = &Delete
+rdb.server.ui.actions.reconnect = Reconnect
+rdb.server.ui.actions.navigate = Navigate to Target
+
+#
+## Menus for the Data
+#
+rdb.server.ui.actions.fe = &Generate DDL
+rdb.server.ui.actions.refresh = &Refresh
+
+#
+## Actions
+#
+rdb.server.ui.explorer.connect_server = New Connection...
+rdb.server.ui.explorer.reconnect_server = &Reconnect
+rdb.server.ui.explorer.disconnect_server = &Disconnect
+rdb.server.ui.explorer.collapse_all = Collapse All
+rdb.server.ui.actions.editfilter = &Filter...
+
+#
+## Decorations
+#
+rdb.server.ui.serverDecoration = Data Tools - Server Explorer Connection Type Decoration
+rdb.server.ui.filterDecoration = Data Tools - Server Explorer Filter Node Indicator
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/plugin.xml b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/plugin.xml
new file mode 100644
index 0000000..e738eca
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/plugin.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+
+     <extension
+            point="org.eclipse.ui.navigator.navigatorContent">
+         <navigatorContent
+               contentProvider="org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.SQLModelContentProviderExtension"
+               id="org.eclipse.datatools.connectivity.db.sqlModelContent"
+               labelProvider="org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.SQLModelLabelProviderExtension"
+               name="%SQL_MODEL_CONTENT_EXTENSION_NAME">
+            <commonSorter
+            	id ="org.eclipse.datatools.connectivity.sqm.core.internal.ui.services.ExplorerSorterProvider"
+            	class="org.eclipse.datatools.connectivity.sqm.core.internal.ui.services.ExplorerSorterProvider">
+            </commonSorter>   
+            <actionProvider
+            		id="org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.SQLModelContentActionProvider"
+            		class="org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.SQLModelContentActionProvider">
+            <enablement>
+               <instanceof value="org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter.IFilterNode"/>
+            </enablement>
+            </actionProvider>
+            <triggerPoints>
+				<or>
+                  <instanceof value="org.eclipse.datatools.modelbase.sql.schema.SQLObject"/>
+                  <instanceof value="org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode"/>
+			      <and>
+                     <instanceof value="org.eclipse.datatools.connectivity.IConnectionProfile"/>
+				     <test
+						property="org.eclipse.datatools.connectivity.profile.property.factoryID"
+						value="org.eclipse.datatools.connectivity.sqm.core.connection.ConnectionInfo"/>
+                  </and>
+                  <instanceof value="org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.SQLModelContentExtension"/>
+                  <instanceof value="org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.loading.LoadingNode"/>
+                </or>
+            </triggerPoints>
+            <possibleChildren>
+               <or>
+                  <instanceof value="org.eclipse.datatools.modelbase.sql.schema.SQLObject"/>
+                  <instanceof value="org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode"/>
+                  <instanceof value="org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.SQLModelContentExtension"/>
+               </or>
+            </possibleChildren>
+         </navigatorContent>
+      </extension>
+      
+      <extension
+            point="org.eclipse.ui.navigator.viewer">
+         <viewerContentBinding viewerId="org.eclipse.datatools.connectivity.DataSourceExplorerNavigator">
+            <includes>
+               <contentExtension pattern="org.eclipse.datatools.connectivity.db.sqlModelContent"/>
+            </includes>
+         </viewerContentBinding>
+         <viewerActionBinding viewerId="org.eclipse.datatools.connectivity.DataSourceExplorerNavigator">
+            <includes>
+               <actionExtension pattern="org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.actions.popup.*"/>
+            </includes>
+         </viewerActionBinding>
+      </extension>  
+
+   <extension
+         point="org.eclipse.ui.navigator.navigatorContent">
+      <actionProvider
+            class="org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.actions.popup.RefreshActionProvider"
+            id="org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.actions.popup.RefreshActionProvider"
+            overrides="org.eclipse.datatools.connectivity.ui.dse.actions.RefreshActionProvider">
+         <enablement>
+            <or>
+               <instanceof value="org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode"/>
+               <instanceof value="org.eclipse.datatools.modelbase.sql.schema.SQLObject"/>
+            </or>
+         </enablement>
+      </actionProvider>
+   </extension>
+   <extension
+         point="org.eclipse.core.runtime.adapters">
+      <factory
+            adaptableType="org.eclipse.datatools.modelbase.sql.schema.SQLObject"
+            class="org.eclipse.datatools.connectivity.sqm.server.internal.ui.SQLObjectAdapterFactory">
+         <adapter type="org.eclipse.ui.views.properties.IPropertySource"/>
+      </factory>
+   </extension>
+
+<!-- Provide an override of IDs -->
+   <extension
+   		point="org.eclipse.datatools.connectivity.sqm.core.ui.elementID">
+   		<provider class = "org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.TransientEObjectUtil"/>
+   </extension>
+      
+<!-- Add a Navigator Action extension -->
+<!-- Bookmark global Action-->
+   <extension
+         point="org.eclipse.ui.navigator.navigatorContent">
+      <actionProvider
+            class="org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.actions.popup.BookmarkAction"
+            id="org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.actions.popup.BookmarkAction">
+	        <enablement>
+	            <or>
+		        	<adapt type="org.eclipse.datatools.modelbase.sql.schema.SQLObject" /> 
+		        </or>
+			 </enablement>	
+      </actionProvider>
+   </extension>
+</plugin>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/schema-doc/org_eclipse_datatools_connectivity_sqm_server_ui_ServerExplorerInitializationProvider.html b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/schema-doc/org_eclipse_datatools_connectivity_sqm_server_ui_ServerExplorerInitializationProvider.html
new file mode 100644
index 0000000..a67348b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/schema-doc/org_eclipse_datatools_connectivity_sqm_server_ui_ServerExplorerInitializationProvider.html
@@ -0,0 +1,58 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>ServerExplorerInitializationProvider</title>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.sdk_3.1.0/book.css");</style>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.platform.doc.isv_3.1.0/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>ServerExplorerInitializationProvider</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.connectivity.sqm.server.ui.ServerExplorerInitializationProvider<p></p>
+<h6 class=CaptionFigColumn id=header>Since: </h6>[Enter the first release in which this extension point appears.]
+<p></p>
+
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>This extension point will provide a way for Connection provider to populate Servers at start-up time</p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.server">server</a>)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.server">server</a> (<a href="#e.database">database</a>+)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST server</p>
+<p class=code id=dtdAttlist>serverName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>driverClassName&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>loadingPath&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>user&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>password&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>serverName</b> - </li>
+<li><b>driverClassName</b> - </li>
+<li><b>loadingPath</b> - </li>
+<li><b>user</b> - </li>
+<li><b>password</b> - </li>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.database">database</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST database</p>
+<p class=code id=dtdAttlist>name&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>URL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>product&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>version&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>name</b> - </li>
+<li><b>URL</b> - </li>
+<li><b>product</b> - </li>
+<li><b>version</b> - </li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>Examples: </h6>[Enter extension point usage example here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>API Information: </h6>[Enter API information here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>Supplied Implementation: </h6>[Enter information about supplied implementation of this extension point.]
+<p></p>
+
+<br>
+<p class=note id=copyright>
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/schema-doc/org_eclipse_datatools_connectivity_sqm_server_ui_serverExplorerLayout.html b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/schema-doc/org_eclipse_datatools_connectivity_sqm_server_ui_serverExplorerLayout.html
new file mode 100644
index 0000000..0c0de6b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/schema-doc/org_eclipse_datatools_connectivity_sqm_server_ui_serverExplorerLayout.html
@@ -0,0 +1,49 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Server Explorer Layout</title>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.sdk_3.1.0/book.css");</style>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.platform.doc.isv_3.1.0/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>Server Explorer Layout</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.connectivity.sqm.server.ui.serverExplorerLayout<p></p>
+<h6 class=CaptionFigColumn id=header>Since: </h6>[Enter the first release in which this extension point appears.]
+<p></p>
+
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>[Enter description of this extension point.]</p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.provider">provider</a>)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.provider">provider</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST provider</p>
+<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>class&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+Provider of a Layout Extension.</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>id</b> - </li>
+<li><b>name</b> - </li>
+<li><b>class</b> - Should implement the interface com.ibm.datatools.server.ui.layout.IServerExplorerLayoutExtensionProvider</li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>Examples: </h6>[Enter extension point usage example here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>API Information: </h6>[Enter API information here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>Supplied Implementation: </h6>[Enter information about supplied implementation of this extension point.]
+<p></p>
+
+<br>
+<p class=note id=copyright>
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/schema/ServerExplorerInitializationProvider.exsd b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/schema/ServerExplorerInitializationProvider.exsd
new file mode 100644
index 0000000..46f540b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/schema/ServerExplorerInitializationProvider.exsd
@@ -0,0 +1,163 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.connectivity.sqm.server.ui">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.datatools.connectivity.sqm.server.ui" id="ServerExplorerInitializationProvider" name="ServerExplorerInitializationProvider"/>
+      </appInfo>
+      <documentation>
+         This extension point will provide a way for Connection provider to populate Servers at start-up time
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <complexType>
+         <sequence>
+            <element ref="server"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="server">
+      <complexType>
+         <sequence>
+            <element ref="database" minOccurs="1" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="serverName" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="driverClassName" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="loadingPath" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="user" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="password" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="database">
+      <complexType>
+         <attribute name="name" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="URL" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="product" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="version" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/schema/serverExplorerLayout.exsd b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/schema/serverExplorerLayout.exsd
new file mode 100644
index 0000000..41e9af2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/schema/serverExplorerLayout.exsd
@@ -0,0 +1,118 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.connectivity.sqm.server.ui">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.datatools.connectivity.sqm.server.ui" id="serverExplorerLayout" name="Server Explorer Layout"/>
+      </appInfo>
+      <documentation>
+         [Enter description of this extension point.]
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <complexType>
+         <sequence>
+            <element ref="provider"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="provider">
+      <annotation>
+         <documentation>
+            Provider of a Layout Extension.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Should implement the interface com.ibm.datatools.server.ui.layout.IServerExplorerLayoutExtensionProvider
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/SQLObjectAdapterFactory.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/SQLObjectAdapterFactory.java
new file mode 100644
index 0000000..671a6da
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/SQLObjectAdapterFactory.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    rcernich - initial API and implementation
+ *******************************************************************************/ 
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui;
+
+import org.eclipse.core.runtime.IAdapterFactory;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.provider.SQLAccessControlItemProviderAdapterFactory;
+import org.eclipse.datatools.modelbase.sql.constraints.provider.SQLConstraintsItemProviderAdapterFactory;
+import org.eclipse.datatools.modelbase.sql.datatypes.provider.SQLDataTypesItemProviderAdapterFactory;
+import org.eclipse.datatools.modelbase.sql.expressions.provider.SQLExpressionsItemProviderAdapterFactory;
+import org.eclipse.datatools.modelbase.sql.routines.provider.SQLRoutinesItemProviderAdapterFactory;
+import org.eclipse.datatools.modelbase.sql.schema.provider.SQLSchemaItemProviderAdapterFactory;
+import org.eclipse.datatools.modelbase.sql.statements.provider.SQLStatementsItemProviderAdapterFactory;
+import org.eclipse.datatools.modelbase.sql.tables.provider.SQLTablesItemProviderAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.ui.views.properties.IPropertySource;
+
+
+public class SQLObjectAdapterFactory implements IAdapterFactory {
+	
+	private static Class[] sAdapterList = new Class[] {IPropertySource.class};
+	private static AdapterFactoryContentProvider sAdapterFactory;
+
+	public Object getAdapter(Object adaptableObject, Class adapterType) {
+		// RJC: Replace once EMF generated property adapters have been corrected.
+		//return sAdapterFactory.getPropertySource(adaptableObject);
+		return null;
+	}
+
+	public Class[] getAdapterList() {
+		return sAdapterList;
+	}
+	
+	static {
+		ComposedAdapterFactory caf = new ComposedAdapterFactory();
+		caf.addAdapterFactory(new SQLSchemaItemProviderAdapterFactory());
+		caf.addAdapterFactory(new SQLTablesItemProviderAdapterFactory());
+		caf.addAdapterFactory(new SQLRoutinesItemProviderAdapterFactory());
+		caf.addAdapterFactory(new SQLDataTypesItemProviderAdapterFactory());
+		caf.addAdapterFactory(new SQLConstraintsItemProviderAdapterFactory());
+		caf.addAdapterFactory(new SQLAccessControlItemProviderAdapterFactory());
+		caf.addAdapterFactory(new SQLExpressionsItemProviderAdapterFactory());
+		caf.addAdapterFactory(new SQLStatementsItemProviderAdapterFactory());
+		sAdapterFactory = new AdapterFactoryContentProvider(caf);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/ServerUIPlugin.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/ServerUIPlugin.java
new file mode 100644
index 0000000..b78fb92
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/ServerUIPlugin.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui;
+
+import java.net.URL;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObjectListener;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.content.ServerExplorerRefreshListener;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+
+/**
+ * The main plugin class to be used in the desktop.
+ */
+public class ServerUIPlugin extends AbstractUIPlugin
+{
+    //The shared instance.
+    private static ServerUIPlugin plugin;
+    
+    private ICatalogObjectListener refreshListener;
+
+    /**
+     * The constructor.
+     */
+    public ServerUIPlugin()
+    {
+        super();
+        plugin = this;
+    }
+
+    /**
+     * Returns the shared instance.
+     */
+    public static ServerUIPlugin getDefault()
+    {
+        return plugin;
+    }
+
+    public static URL getInstallURL()
+    {
+        return getDefault().getBundle().getEntry("/"); //$NON-NLS-1$
+    }
+    
+    public void start(BundleContext context) throws Exception 
+    {
+        super.start(context);
+        RefreshManager.getInstance().AddListener(null, refreshListener = new ServerExplorerRefreshListener ());
+    }
+    
+    public void stop (BundleContext context) throws Exception 
+    {
+        super.stop(context);
+        RefreshManager.getInstance().removeListener(null, refreshListener);
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/dialogs/SQLExceptionDialog.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/dialogs/SQLExceptionDialog.java
new file mode 100644
index 0000000..1e99dbd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/dialogs/SQLExceptionDialog.java
@@ -0,0 +1,297 @@
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.dialogs;
+
+import java.util.Arrays;
+import java.util.Iterator;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.IconAndMessageDialog;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * @author ljulien
+ */
+public class SQLExceptionDialog extends IconAndMessageDialog
+{
+    private static final ResourceLoader resourceLoader = ResourceLoader.INSTANCE;
+
+    private static final String HEADER_TITLE = resourceLoader.queryString("DATATOOLS.SERVER.UI.CONNECTION.SQLEXCEPTION.TITLE"); //$NON-NLS-1$
+    private static final String RECONNECT = resourceLoader.queryString("DATATOOLS.SERVER.UI.CONNECTION.SQLEXCEPTION.RECONNECT"); //$NON-NLS-1$
+    private static final String DISCONNECT = resourceLoader.queryString("DATATOOLS.SERVER.UI.CONNECTION.SQLEXCEPTION.DISCONNECT"); //$NON-NLS-1$
+    private static final String IGNORE = resourceLoader.queryString("DATATOOLS.SERVER.UI.CONNECTION.SQLEXCEPTION.IGNORE"); //$NON-NLS-1$
+    private static final String MESSAGE = resourceLoader.queryString("DATATOOLS.SERVER.UI.CONNECTION.SQLEXCEPTION.MESSAGE"); //$NON-NLS-1$
+
+    public static final int RECONNECT_ID = 1;
+    public static final int DISCONNECT_ID = 2;
+    public static final int IGNORE_ID = 3;
+    private static boolean AUTOMATED_MODE = false;
+    private static final int LIST_ITEM_COUNT = 7;
+    private static final String NESTING_INDENT = "  "; //$NON-NLS-1$
+
+    private int returnCode;
+    private String title;
+    private List list;
+    private boolean listCreated = false;
+    private int displayMask = 0xFFFF;
+    private java.util.List statusList;
+
+    private Button detailsButton;
+    private IStatus status;
+    private Clipboard clipboard;
+
+    private void populateList(List listToPopulate)
+    {
+        Iterator it = statusList.iterator();
+        while (it.hasNext())
+        {
+            IStatus childStatus = (IStatus) it.next();
+            populateList(listToPopulate, childStatus, 0);
+        }
+    }
+
+    private void populateList(List listToPopulate, IStatus buildingStatus, int nesting)
+    {
+        if (!buildingStatus.matches(displayMask))
+        {
+            return;
+        }
+        StringBuffer sb = new StringBuffer();
+        for (int i = 0; i < nesting; i++)
+        {
+            sb.append(NESTING_INDENT); //$NON-NLS-1$
+        }
+        sb.append(buildingStatus.getMessage());
+        listToPopulate.add(sb.toString());
+        IStatus[] children = buildingStatus.getChildren();
+        for (int i = 0; i < children.length; i++)
+        {
+            populateList(listToPopulate, children[i], nesting + 1);
+        }
+    }
+
+    private void toggleDetailsArea()
+    {
+        Point windowSize = getShell().getSize();
+        Point oldSize = getShell().computeSize(SWT.DEFAULT, SWT.DEFAULT);
+        if (listCreated)
+        {
+            list.dispose();
+            listCreated = false;
+            detailsButton.setText(IDialogConstants.SHOW_DETAILS_LABEL);
+        }
+        else
+        {
+            list = createDropDownList((Composite) getContents());
+            detailsButton.setText(IDialogConstants.HIDE_DETAILS_LABEL);
+        }
+        Point newSize = getShell().computeSize(SWT.DEFAULT, SWT.DEFAULT);
+        getShell().setSize(new Point(windowSize.x, windowSize.y + (newSize.y - oldSize.y)));
+    }
+
+    private void populateCopyBuffer(IStatus buildingStatus, StringBuffer buffer, int nesting)
+    {
+        if (!buildingStatus.matches(displayMask))
+        {
+            return;
+        }
+        for (int i = 0; i < nesting; i++)
+        {
+            buffer.append(NESTING_INDENT); //$NON-NLS-1$
+        }
+        buffer.append(buildingStatus.getMessage());
+        buffer.append("\n"); //$NON-NLS-1$
+        IStatus[] children = buildingStatus.getChildren();
+        for (int i = 0; i < children.length; i++)
+        {
+            populateCopyBuffer(children[i], buffer, nesting + 1);
+        }
+    }
+
+    private void copyToClipboard()
+    {
+        if (clipboard != null)
+            clipboard.dispose();
+        StringBuffer statusBuffer = new StringBuffer();
+        populateCopyBuffer(status, statusBuffer, 0);
+        clipboard = new Clipboard(list.getDisplay());
+        clipboard.setContents(new Object[] { statusBuffer.toString() }, new Transfer[] { TextTransfer.getInstance() });
+    }
+    protected void configureShell(Shell shell)
+    {
+        super.configureShell(shell);
+        shell.setText(title);
+    }
+
+    protected Control createDialogArea(Composite parent)
+    {
+        createMessageArea(parent);
+        // create a composite with standard margins and spacing
+        Composite composite = new Composite(parent, SWT.NONE);
+        GridLayout layout = new GridLayout();
+        layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
+        layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
+        layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
+        layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
+        layout.numColumns = 2;
+        composite.setLayout(layout);
+        GridData childData = new GridData(GridData.FILL_BOTH);
+        childData.horizontalSpan = 2;
+        composite.setLayoutData(childData);
+        composite.setFont(parent.getFont());
+        return composite;
+    }
+
+    protected void createDialogAndButtonArea(Composite parent)
+    {
+        super.createDialogAndButtonArea(parent);
+        if (this.dialogArea instanceof Composite)
+        {
+            Composite dialogComposite = (Composite) dialogArea;
+            if (dialogComposite.getChildren().length == 0)
+                new Label(dialogComposite, SWT.NULL);
+        }
+    }
+
+    protected Image getImage()
+    {
+        if (status != null)
+        {
+            if (status.getSeverity() == IStatus.WARNING)
+                return getWarningImage();
+            if (status.getSeverity() == IStatus.INFO)
+                return getInfoImage();
+        }
+        return getErrorImage();
+    }
+
+    protected List createDropDownList(Composite parent)
+    {
+        list = new List(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI);
+
+        populateList(list);
+        GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL
+                | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_VERTICAL);
+        data.heightHint = list.getItemHeight() * LIST_ITEM_COUNT;
+        data.horizontalSpan = 2;
+        list.setLayoutData(data);
+        list.setFont(parent.getFont());
+        Menu copyMenu = new Menu(list);
+        MenuItem copyItem = new MenuItem(copyMenu, SWT.NONE);
+        copyItem.addSelectionListener(new SelectionListener()
+        {
+            public void widgetSelected(SelectionEvent e)
+            {
+                copyToClipboard();
+            }
+
+            public void widgetDefaultSelected(SelectionEvent e)
+            {
+                copyToClipboard();
+            }
+        });
+        copyItem.setText(JFaceResources.getString("copy")); //$NON-NLS-1$
+        list.setMenu(copyMenu);
+        listCreated = true;
+        return list;
+    }
+
+    
+    protected static boolean shouldDisplay(IStatus status, int mask)
+    {
+        IStatus[] children = status.getChildren();
+        if (children == null || children.length == 0)
+        {
+            return status.matches(mask);
+        }
+        for (int i = 0; i < children.length; i++)
+        {
+            if (children[i].matches(mask))
+                return true;
+        }
+        return false;
+    }
+
+    protected void createButtonsForButtonBar(Composite parent)
+    {
+        createButton(parent, RECONNECT_ID, RECONNECT, true);
+        createButton(parent, DISCONNECT_ID, DISCONNECT, false);
+        createButton(parent, IGNORE_ID, IGNORE, false);
+        this.detailsButton = createButton(parent, IDialogConstants.DETAILS_ID, IDialogConstants.SHOW_DETAILS_LABEL,
+                false);
+    }
+
+    protected void buttonPressed(int buttonId)
+    {
+        this.returnCode = buttonId;
+        if (buttonId == IDialogConstants.DETAILS_ID)
+        {
+            toggleDetailsArea();
+        }
+        else
+        {
+            close();
+        }
+    }
+
+    public SQLExceptionDialog(IStatus status)
+    {
+        this(Display.getCurrent().getActiveShell(), HEADER_TITLE, MESSAGE, status, IStatus.ERROR);
+    }
+
+    public SQLExceptionDialog(Shell parentShell, String dialogTitle, String message, IStatus status, int displayMask)
+    {
+        super(parentShell);
+        this.title = dialogTitle == null ? JFaceResources.getString("Problem_Occurred") : //$NON-NLS-1$
+                dialogTitle;
+        this.message = message == null ? status.getMessage() : JFaceResources.format(
+                "Reason", new Object[] { message, status.getMessage() }); //$NON-NLS-1$
+        this.status = status;
+        statusList = Arrays.asList(status.getChildren());
+        this.displayMask = displayMask;
+        setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE | SWT.APPLICATION_MODAL);
+    }
+
+    public int getReturnCode()
+    {
+        return returnCode;
+    }
+
+    public int open()
+    {
+        if (!AUTOMATED_MODE && shouldDisplay(status, displayMask))
+        {
+            return super.open();
+        }
+        setReturnCode(returnCode);
+        return returnCode;
+    }
+
+    public boolean close()
+    {
+        if (clipboard != null)
+        {
+            clipboard.dispose();
+        }
+        return super.close();
+    }
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/actions/popup/AbstractAction.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/actions/popup/AbstractAction.java
new file mode 100644
index 0000000..0d6766b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/actions/popup/AbstractAction.java
@@ -0,0 +1,127 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.actions.popup;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.ui.IActionDelegate2;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+
+/**
+ * @author ljulien
+ */
+public abstract class AbstractAction implements IViewActionDelegate, IActionDelegate2
+{
+
+	/**
+	 * Will get called back each time that the selection is getting updated
+	 */
+	public void selectionChanged (IAction action, ISelection sel)
+	{
+		setSelection (sel);
+	}
+
+    /**
+     * @see org.eclipse.ui.IObjectActionDelegate#setActivePart(org.eclipse.jface.action.IAction, org.eclipse.ui.IWorkbenchPart)
+     */
+    public void init(IViewPart view)
+    {
+    }
+
+    /**
+	 * @return the selected object - The object will have to be adapted by subclasses
+	 */
+	protected List getMultipleSelection (Class type) throws NullSelectionException
+	{
+		List linkedList = new LinkedList ();
+		if (getSelection () instanceof IStructuredSelection)
+		{
+			for (Iterator i = ((IStructuredSelection)getSelection ()).iterator(); i.hasNext();)
+			{
+				Object nextSelected = i.next();
+				if (type.isAssignableFrom(nextSelected.getClass()))
+				{
+					linkedList.add(nextSelected);
+				}
+			}
+		}
+		setSelection(null);
+		return linkedList;
+	}
+
+    /**
+	 * @return the selected object - The object will have to be adapted by subclasses
+	 */
+	protected Object getUniqueSelection (Class type) throws NullSelectionException
+	{
+		if (getSelection () instanceof IStructuredSelection)
+		{
+			for (Iterator i = ((IStructuredSelection)getSelection ()).iterator(); i.hasNext();)
+			{
+				Object nextSelected = i.next();
+				if (nextSelected instanceof IAdaptable)
+				{
+					setSelection(null);
+					return ((IAdaptable)nextSelected).getAdapter(type);
+				}
+			}
+		}
+		throw new NullSelectionException ();
+	}
+
+    /**
+     * @see org.eclipse.ui.IActionDelegate2#init(org.eclipse.jface.action.IAction)
+     */
+    public void init(IAction action)
+    {
+    }
+
+    /**
+     * @see org.eclipse.ui.IActionDelegate2#dispose()
+     */
+    public void dispose()
+    {
+    }
+
+    /**
+     * @see org.eclipse.ui.IActionDelegate2#runWithEvent(org.eclipse.jface.action.IAction, org.eclipse.swt.widgets.Event)
+     */
+    public void runWithEvent(IAction action, Event event)
+    {
+        run (action);
+    }
+	
+	
+	protected abstract void setSelection (ISelection selection);
+	protected abstract ISelection getSelection ();
+		
+	/**
+	 * Used when the selection retrieved from the selection service does not make any sense
+	 * @author ljulien
+	 */
+	class NullSelectionException extends Exception
+	{
+
+		/**
+		 * Comment for <code>serialVersionUID</code>
+		 */
+		private static final long serialVersionUID = -3990867374859303441L;
+		
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/actions/popup/BookmarkAction.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/actions/popup/BookmarkAction.java
new file mode 100644
index 0000000..702f6e4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/actions/popup/BookmarkAction.java
@@ -0,0 +1,97 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.actions.popup;
+
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.bookmark.BookmarkProvider;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.bookmark.BookmarkSelectionProvider;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.ide.IDEActionFactory;
+import org.eclipse.ui.navigator.CommonActionProvider;
+import org.eclipse.ui.navigator.ICommonActionExtensionSite;
+import org.eclipse.ui.navigator.ICommonViewerWorkbenchSite;
+
+/**
+ * @author ljulien
+ */
+public class BookmarkAction extends CommonActionProvider
+{
+    private BookmarkProvider bookmarkProvider = null;
+    private BookmarkSelectionProvider bookmarkSelectionProvider = null;
+    private ICommonViewerWorkbenchSite viewSite;
+
+    public BookmarkAction() {
+		super();
+	}
+    
+    private boolean isSelectionValid(IStructuredSelection selection)
+    {
+        for (Iterator iterator = selection.iterator(); iterator.hasNext();)
+        {
+            Object selected = iterator.next();
+            if (!(selected instanceof EObject))
+            {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    public void selectionChanged(SelectionChangedEvent event)
+    {
+    }
+
+    public void dispose()
+    {
+        this.viewSite.getActionBars().setGlobalActionHandler(IDEActionFactory.BOOKMARK.getId(), null);
+        if (bookmarkProvider != null)
+        {
+            bookmarkProvider.removeListener();
+            bookmarkSelectionProvider.removeListener();
+        }
+    }
+
+    public void init(ICommonActionExtensionSite aConfig)
+    {
+        this.viewSite = (ICommonViewerWorkbenchSite) aConfig.getViewSite();
+        bookmarkProvider = new BookmarkProvider(this.viewSite);
+        bookmarkSelectionProvider = new BookmarkSelectionProvider();
+    }
+
+    public void fillActionBars(IActionBars theActionBars)
+    {
+        if (isSelectionValid((IStructuredSelection) this.getContext().getSelection()))
+        {
+            theActionBars.setGlobalActionHandler(IDEActionFactory.BOOKMARK.getId(), bookmarkProvider);
+        }
+
+        theActionBars.updateActionBars();
+        theActionBars.getMenuManager().update();
+    }
+
+    public void fillContextMenu(IMenuManager aMenu)
+    {
+    }
+
+    public void restoreState(IMemento aMemento)
+    {
+    }
+
+    public void saveState(IMemento aMemento)
+    {
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/actions/popup/RefreshActionProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/actions/popup/RefreshActionProvider.java
new file mode 100644
index 0000000..b034c4d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/actions/popup/RefreshActionProvider.java
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.actions.popup;
+
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.actions.ActionContext;
+import org.eclipse.ui.actions.ActionFactory;
+import org.eclipse.ui.navigator.CommonActionProvider;
+import org.eclipse.ui.navigator.ICommonActionExtensionSite;
+
+/**
+ * Overrides the refresh menu item for IVirtualNode and
+ * SQLObject objects.
+ * 
+ * @author brianf
+ *
+ */
+public class RefreshActionProvider extends CommonActionProvider {
+
+	private StructuredViewer aViewer;
+    private IStructuredSelection selection;
+    private RevisedRefreshAction addRefreshAction = null;
+
+    /**
+     * Constructor
+     */
+    public RefreshActionProvider() {
+		super();
+	}
+
+	/**
+	 * @param selection
+	 */
+	private void setSelection ( IStructuredSelection selection ) {
+        this.selection = selection;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.ICommonActionProvider#setActionContext(org.eclipse.ui.actions.ActionContext)
+	 */
+	public void setActionContext(ActionContext aContext) {
+        if (aContext.getSelection() instanceof IStructuredSelection)
+        {
+        	setSelection((IStructuredSelection) aContext.getSelection());
+        }
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.ICommonActionProvider#fillContextMenu(org.eclipse.jface.action.IMenuManager)
+	 */
+	public void fillContextMenu(IMenuManager manager) {
+		boolean hasSelection = false;
+		if (selection != null && selection.getFirstElement() != null)
+			hasSelection = true;
+		if (hasSelection ) {
+			addRefreshAction = new RevisedRefreshAction(this.aViewer);
+			addRefreshAction.setActionDefinitionId("org.eclipse.ui.file.refresh"); //$NON-NLS-1$
+			manager.insertAfter("slot3",//$NON-NLS-1$
+					addRefreshAction);
+		}
+
+		return;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.ICommonActionProvider#fillActionBars(org.eclipse.ui.IActionBars)
+	 */
+	public void fillActionBars(IActionBars bars) {
+		bars.setGlobalActionHandler(ActionFactory.REFRESH.getId(),
+				addRefreshAction);
+        bars.updateActionBars();
+        bars.getMenuManager().update();
+        return;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.CommonActionProvider#init(org.eclipse.ui.navigator.ICommonActionExtensionSite)
+	 */
+	public void init(ICommonActionExtensionSite aConfig) {
+        this.aViewer = aConfig.getStructuredViewer();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.actions.ActionGroup#setContext(org.eclipse.ui.actions.ActionContext)
+	 */
+	public void setContext(ActionContext context) {
+		super.setContext(context);
+        if (context != null && context.getSelection() instanceof IStructuredSelection)
+        {
+        	setSelection((IStructuredSelection) context.getSelection());
+        }
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/actions/popup/RevisedAbstractAction.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/actions/popup/RevisedAbstractAction.java
new file mode 100644
index 0000000..066d82d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/actions/popup/RevisedAbstractAction.java
@@ -0,0 +1,117 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Sybase, Inc. - updated action to work within 3.2 navigator framework
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.actions.popup;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.IViewPart;
+
+/**
+ * @author ljulien, brianf
+ *
+ */
+public abstract class RevisedAbstractAction extends Action {
+
+	/**
+	 * Will get called back each time that the selection is getting updated
+	 */
+	public void selectionChanged (IAction action, ISelection sel)
+	{
+		setSelection (sel);
+	}
+
+    /**
+     * @see org.eclipse.ui.IObjectActionDelegate#setActivePart(org.eclipse.jface.action.IAction, org.eclipse.ui.IWorkbenchPart)
+     */
+    public void init(IViewPart view)
+    {
+    }
+
+    /**
+	 * @return the selected object - The object will have to be adapted by subclasses
+	 */
+	protected List getMultipleSelection (Class type) throws NullSelectionException
+	{
+		List linkedList = new LinkedList ();
+		if (getSelection () instanceof IStructuredSelection)
+		{
+			for (Iterator i = ((IStructuredSelection)getSelection ()).iterator(); i.hasNext();)
+			{
+				Object nextSelected = i.next();
+				if (type.isAssignableFrom(nextSelected.getClass()))
+				{
+					linkedList.add(nextSelected);
+				}
+			}
+		}
+		setSelection(null);
+		return linkedList;
+	}
+
+    /**
+	 * @return the selected object - The object will have to be adapted by subclasses
+	 */
+	protected Object getUniqueSelection (Class type) throws NullSelectionException
+	{
+		if (getSelection () instanceof IStructuredSelection)
+		{
+			for (Iterator i = ((IStructuredSelection)getSelection ()).iterator(); i.hasNext();)
+			{
+				Object nextSelected = i.next();
+				if (nextSelected instanceof IAdaptable)
+				{
+					setSelection(null);
+					return ((IAdaptable)nextSelected).getAdapter(type);
+				}
+			}
+		}
+		throw new NullSelectionException ();
+	}
+
+    /**
+     * @see org.eclipse.ui.IActionDelegate2#init(org.eclipse.jface.action.IAction)
+     */
+    public void init(IAction action)
+    {
+    }
+
+    /**
+     * @see org.eclipse.ui.IActionDelegate2#dispose()
+     */
+    public void dispose()
+    {
+    }
+	
+	protected abstract void setSelection (ISelection selection);
+	protected abstract ISelection getSelection ();
+		
+	/**
+	 * Used when the selection retrieved from the selection service does not make any sense
+	 * @author ljulien
+	 */
+	class NullSelectionException extends Exception
+	{
+
+		/**
+		 * Comment for <code>serialVersionUID</code>
+		 */
+		private static final long serialVersionUID = -3990867374859303441L;
+		
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/actions/popup/RevisedRefreshAction.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/actions/popup/RevisedRefreshAction.java
new file mode 100644
index 0000000..32397b3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/actions/popup/RevisedRefreshAction.java
@@ -0,0 +1,136 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Sybase, Inc. - updated to work in 3.2 navigator framework
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.actions.popup;
+
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCCatalog;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.ui.actions.ActionFactory;
+
+
+/**
+ * @author wliu, brianf
+ *  
+ */
+public class RevisedRefreshAction extends RevisedAbstractAction
+{
+    private IStructuredSelection selection;
+	private StructuredViewer aViewer;
+    
+    /**
+     * Constructor
+     * @param viewer
+     */
+    public RevisedRefreshAction( StructuredViewer viewer ) {
+    	super();
+    	this.setText(ResourceLoader.INSTANCE.queryString("DATATOOLS.SERVER.UI.EXPLORER.REFRESH"));//$NON-NLS-1$
+    	this.setToolTipText(this.getText());
+		this.setActionDefinitionId(ActionFactory.REFRESH.getId());
+		this.setAccelerator(SWT.F5);
+		this.aViewer = viewer;
+    }
+
+    private void refreshCatalogObject (Object [] catalogObjects)
+    {
+        for (int i = 0, n = catalogObjects.length; i < n; i++)
+        {
+	        if (catalogObjects[i]  instanceof ICatalogObject)
+	        {
+	            ((ICatalogObject)catalogObjects[i]).refresh();
+	        }
+        }
+    }
+    
+    private void refreshVirtualNode (IVirtualNode virtualNode)
+    {
+		Object object = virtualNode.getParent();
+		
+		// to get around the unused catalog, we skip it and go to the database
+		// hack for bug 248366 BTF
+		if (object != null && 
+				object instanceof JDBCCatalog && 
+					((JDBCCatalog)object).getName().trim().length() == 0)
+			object = ((JDBCCatalog)object).getCatalogDatabase();
+		
+		virtualNode.removeAllChildren();
+		if (object instanceof ICatalogObject)
+		{
+			refreshCatalogObject((ICatalogObject) object);
+		}
+		else if (object instanceof IVirtualNode)
+		{
+			refreshVirtualNode((IVirtualNode) object);
+		}
+	}
+
+    private void refreshCatalogObject (ICatalogObject catalogObject)
+    {
+        refreshCatalogObject (new ICatalogObject [] {catalogObject});
+    }
+    
+    protected void setSelection(ISelection selection)
+    {
+        if (selection instanceof IStructuredSelection)
+        {
+            this.selection = (IStructuredSelection) selection;
+        }
+    }
+
+    protected ISelection getSelection()
+    {
+        return selection;
+    }
+
+    public void selectionChanged (IAction action, ISelection sel)
+	{
+        if (sel instanceof IStructuredSelection && action != null)
+        {
+			if (((IStructuredSelection) sel).size() == 1)
+			{
+				action.setEnabled(true);
+			}
+			else
+			{
+				action.setEnabled(false);
+			}
+		}
+		setSelection (sel);
+	}
+
+    public void run()
+    {
+    	if (this.aViewer != null) {
+    		setSelection(this.aViewer.getSelection());
+    	}
+    	
+        for (Iterator iterator = ((IStructuredSelection)getSelection()).iterator(); iterator.hasNext();)
+        {
+            Object selectedObject = iterator.next();
+            if (selectedObject instanceof IVirtualNode)
+            {
+                refreshVirtualNode ((IVirtualNode)selectedObject);
+            }
+            else if (selectedObject instanceof ICatalogObject)
+            {
+                refreshCatalogObject ((ICatalogObject)selectedObject);
+            }
+        }
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/content/ServerExplorerRefreshListener.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/content/ServerExplorerRefreshListener.java
new file mode 100644
index 0000000..dfeacfd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/content/ServerExplorerRefreshListener.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.content;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObjectListener;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.services.IServerExplorerContentService;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.services.IServicesManager;
+
+
+/**
+ * @author ljulien
+ */
+public class ServerExplorerRefreshListener implements ICatalogObjectListener
+{
+    /**
+     * Will get notified whenever the Server Explorer needs to be refreshed
+     */
+    public void notifyChanged(ICatalogObject dmElement, int eventType)
+    {
+        if (eventType == ICatalogObjectListener.EventTypeEnumeration.ELEMENT_REFRESH)
+        {
+        	IServerExplorerContentService service = IServicesManager.INSTANCE.getServerExplorerContentService();
+        	if (service != null)
+        		service.refreshNode(dmElement);
+        }
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/layout/HierarchicalFolderLayoutAction.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/layout/HierarchicalFolderLayoutAction.java
new file mode 100644
index 0000000..148db8f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/layout/HierarchicalFolderLayoutAction.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.layout;
+
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.services.IServerExplorerContentService;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.services.IServicesManager;
+
+/**
+ * @author ljulien
+ */
+public class HierarchicalFolderLayoutAction
+{
+	/**
+	 * Will enable the Model Explorer Hierarchical Layout Mode 
+	 */
+	public void execute ()
+	{
+		IServerExplorerContentService serverExplorer = IServicesManager.INSTANCE.getServerExplorerContentService();
+		serverExplorer.getServerExplorerLayoutService().enableHierarchicalLayout();
+		serverExplorer.updateLayout();
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/layout/VirtualFolderLayoutAction.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/layout/VirtualFolderLayoutAction.java
new file mode 100644
index 0000000..cf30f6e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/layout/VirtualFolderLayoutAction.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.layout;
+
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.services.IServerExplorerContentService;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.services.IServicesManager;
+
+/**
+ * @author ljulien
+ */
+public class VirtualFolderLayoutAction
+{
+	/**
+	 * Will enable the Server Explorer Virtual Node Layout option
+	 */
+	public void execute ()
+	{
+		IServerExplorerContentService serverExplorer = IServicesManager.INSTANCE.getServerExplorerContentService();
+		serverExplorer.getServerExplorerLayoutService().enableVirtualNodeLayout();
+		serverExplorer.updateLayout();
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/loading/ClearPlaceHolderJob.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/loading/ClearPlaceHolderJob.java
new file mode 100644
index 0000000..e8cf658
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/loading/ClearPlaceHolderJob.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.loading;
+
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.sqm.core.connection.ConnectionInfo;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.jface.viewers.AbstractTreeViewer;
+import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.swt.widgets.Widget;
+import org.eclipse.ui.progress.UIJob;
+
+public class ClearPlaceHolderJob extends UIJob
+{
+	private static final String REMOVING_PLACE_HOLDER = ResourceLoader.INSTANCE
+			.queryString("DATATOOLS.SERVER.UI.EXPLORER.REMOVING_PLACE_HOLDER"); //$NON-NLS-1$
+	private AbstractTreeViewer viewer;
+	private LoadingNode placeHolder;
+	private Object[] children;
+	private Object parent;
+	private Object unconvertedParent;
+
+	public ClearPlaceHolderJob(AbstractTreeViewer viewer, LoadingNode placeHolder, Object parent, Object[] children)
+	{
+		super(REMOVING_PLACE_HOLDER);
+		this.viewer = viewer;
+		this.placeHolder = placeHolder;
+		this.unconvertedParent = parent;
+		this.parent = parent;
+		this.children = children;
+		setRule(new NonConflictingRule());
+	}
+
+	public IStatus runInUIThread(IProgressMonitor monitor)
+	{
+		try
+		{
+			viewer.getControl().setRedraw(false);
+			parent = parent instanceof ConnectionInfo? ((ConnectionInfo)parent).getConnectionProfile() : parent;
+			Widget widget = viewer.testFindItem(parent);
+			if (widget != null && !widget.isDisposed())
+			{
+				TreeItem item = (TreeItem) viewer.testFindItem(placeHolder);
+				if (children != null && children.length != 0)
+				{
+					viewer.add(parent, children);
+				}
+				if (item != null && !item.isDisposed())
+				{
+					if (item.getParentItem() != null && !item.getParentItem().isDisposed() || this.parent instanceof IWorkspaceRoot)
+					{
+						viewer.remove(placeHolder);
+					}
+				}
+			}
+		}
+		finally
+		{
+			placeHolder.dispose(unconvertedParent, placeHolder);
+			viewer.getControl().setRedraw(true);
+		}
+		return Status.OK_STATUS;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/loading/ILoadingService.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/loading/ILoadingService.java
new file mode 100644
index 0000000..26ab11b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/loading/ILoadingService.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.loading;
+
+import org.eclipse.jface.viewers.AbstractTreeViewer;
+
+public interface ILoadingService
+{
+	public static final Object[] EMPTY_ELEMENT_ARRAY = new Object[0];
+
+	public Object[] load (Object parent);
+	public String getLoadingDescription();
+	
+	public class Loading 
+	{
+		public Object [] getChildren (AbstractTreeViewer viewer, Object parent, ILoadingService service)
+		{
+	    	if (!(parent instanceof LoadingNode))
+	    	{
+				LoadingNode placeHolder = LoadingNode.createPlaceHolder(parent, service);
+				if (placeHolder != null && LoadingNode.canBeginLoading(parent, service))
+				{
+					new LoadingJob(viewer, placeHolder, parent, service).schedule();
+					return new Object[] { placeHolder };
+				}
+	    	}
+			return EMPTY_ELEMENT_ARRAY;
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/loading/LoadingJob.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/loading/LoadingJob.java
new file mode 100644
index 0000000..512152a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/loading/LoadingJob.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.loading;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.viewers.AbstractTreeViewer;
+
+public class LoadingJob extends Job
+{
+	private ILoadingService loadingService;
+	private LoadingNode placeHolder;
+	private AbstractTreeViewer viewer;
+	private Object parent;
+
+	public LoadingJob(AbstractTreeViewer viewer, LoadingNode placeHolder, Object parent, ILoadingService loadingService)
+	{
+		super(placeHolder.getText(placeHolder));
+		this.viewer = viewer;
+		this.placeHolder = placeHolder;
+		this.parent = parent;
+		this.loadingService = loadingService;
+		setRule(new NonConflictingRule());
+	}
+
+	protected IStatus run(IProgressMonitor monitor)
+	{
+		LoadingUIJob updateUIJob = new LoadingUIJob(viewer, placeHolder);
+		updateUIJob.schedule();
+		Object[] children = null;
+		try
+		{
+			children = this.loadingService.load(parent);
+		}
+		finally
+		{
+			new ClearPlaceHolderJob(viewer, placeHolder, parent, children).schedule();
+		}
+		return Status.OK_STATUS;
+	}
+	
+	public boolean belongsTo(Object family) 
+	{
+		return family == LoadingNode.LOADING_FAMILY;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/loading/LoadingNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/loading/LoadingNode.java
new file mode 100644
index 0000000..71a963d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/loading/LoadingNode.java
@@ -0,0 +1,139 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.loading;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ImagePath;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.graphics.Image;
+
+public class LoadingNode implements ILabelProvider
+{
+	private static final String LOADING = ResourceLoader.INSTANCE.queryString("DATATOOLS.SERVER.UI.EXPLORER.LOADING"); //$NON-NLS-1$
+	private static final LoadingNodeDoubleKeyCollection loadingFiles = new LoadingNodeDoubleKeyCollection();
+	private static final LoadingNodeDoubleKeyCollection placeHolders = new LoadingNodeDoubleKeyCollection();
+
+	public static final LoadingNode LOADING_FAMILY = new LoadingNode (); 
+	
+	private String text;
+	private String text1;
+	private String text2;
+	private String text3;
+	private int count = 0;
+	private boolean disposed = false;
+
+	public static synchronized LoadingNode createPlaceHolder(Object parent, ILoadingService loadingService)
+	{
+		LoadingNode node = null;
+		if (!placeHolders.containsKey(parent, loadingService))
+		{
+			placeHolders.put(parent, loadingService, node = new LoadingNode(loadingService));
+		}
+		return node;
+	}
+	
+	private LoadingNode ()
+	{
+	}
+	
+	public LoadingNode(ILoadingService loadingService)
+	{
+		text = NLS.bind(LOADING, loadingService.getLoadingDescription());
+		text1 = text + "."; //$NON-NLS-1$
+		text2 = text + ".."; //$NON-NLS-1$
+		text3 = text + "..."; //$NON-NLS-1$
+	}
+
+	public String getText(Object element)
+	{
+		switch (count % 4)
+		{
+			case 0:
+				return text;
+			case 1:
+				return text1;
+			case 2:
+				return text2;
+			case 3:
+			default:
+				return text3;
+		}
+	}
+
+	public Image getImage(Object element)
+	{
+		switch (count = (++count % 4))
+		{
+			case 0:
+				return ResourceLoader.INSTANCE.queryImageFromRegistry(ImagePath.LOADING1);
+			case 1:
+				return ResourceLoader.INSTANCE.queryImageFromRegistry(ImagePath.LOADING2);
+			case 2:
+				return ResourceLoader.INSTANCE.queryImageFromRegistry(ImagePath.LOADING3);
+			case 3:
+			default:
+				return ResourceLoader.INSTANCE.queryImageFromRegistry(ImagePath.LOADING4);
+		}
+	}
+
+	public boolean isDisposed()
+	{
+		return disposed;
+	}
+
+	public void dispose(Object parent, LoadingNode placeHolder)
+	{
+		disposed = true;
+
+		ILoadingService loadingService = placeHolders.queryLoadingService(parent, placeHolder);
+		 
+		loadingFiles.remove(parent, loadingService);
+		placeHolders.remove(parent, loadingService);		
+	}
+
+	public static synchronized boolean canBeginLoading(Object parent, ILoadingService loadingService)
+	{
+		if (!loadingFiles.containsKey(parent, loadingService))
+		{
+			loadingFiles.put(parent, loadingService, null);
+			return true;
+		}
+		return false;
+	}
+	
+	public static boolean isLoading ()
+	{
+		synchronized (loadingFiles)
+		{
+			return !loadingFiles.isEmpty();
+		}
+	}
+	
+	public void addListener(ILabelProviderListener listener)
+	{
+	}
+
+	public boolean isLabelProperty(Object element, String property)
+	{
+		return false;
+	}
+
+	public void removeListener(ILabelProviderListener listener)
+	{
+	}
+
+	public void dispose() {	
+	}
+}
+
+
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/loading/LoadingNodeDoubleKeyCollection.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/loading/LoadingNodeDoubleKeyCollection.java
new file mode 100644
index 0000000..37ba050
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/loading/LoadingNodeDoubleKeyCollection.java
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.loading;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+
+public class LoadingNodeDoubleKeyCollection{
+	
+	private Map collection = new HashMap();
+	
+	public boolean containsKey (Object parent, ILoadingService loadingService){
+		boolean containsKey = false;
+		
+		Iterator keys = collection.keySet().iterator();
+		while (keys.hasNext()){
+			DoubleKey key = (DoubleKey)keys.next();
+			if ((key.getParent() == parent) && (key.getLoadingService() == loadingService)){
+				containsKey = true;
+				break;
+			}
+		}	
+		return containsKey;		
+	}
+	
+	public void put(Object parent, ILoadingService loadingService, Object node){
+		collection.put(new DoubleKey(parent, loadingService), node);
+	}
+	
+	public ILoadingService queryLoadingService(Object parent, LoadingNode placeHolder){
+		ILoadingService loadingService = null;
+		Iterator keys = collection.keySet().iterator();
+		while (keys.hasNext()){
+			DoubleKey key = (DoubleKey)keys.next();
+			if ((key.getParent() == parent) && (collection.get(key) == placeHolder)){
+				loadingService = key.getLoadingService();
+			}
+		}
+		return loadingService;		
+	}
+		
+	public void remove(Object parent, ILoadingService loadingService){
+		Iterator keys = collection.keySet().iterator();
+		while (keys.hasNext()){
+			DoubleKey key = (DoubleKey)keys.next();
+			if ((key.getParent() == parent) && (key.getLoadingService() == loadingService)){
+				collection.remove(key);
+				break;
+			}
+		}	
+	}
+	
+	public boolean isEmpty(){
+		return collection.isEmpty();		
+	}
+	
+	private class DoubleKey{
+		
+		Object parent;
+		ILoadingService loadingService;
+		
+		public DoubleKey(Object parent, ILoadingService loadingService){
+			this.parent = parent;
+			this.loadingService = loadingService;
+		}
+		
+		public void setParent(Object parent){
+			this.parent = parent;
+		}
+		
+		public void setLoadingService(ILoadingService loadingService){
+			this.loadingService = loadingService;
+		}	
+		
+		public Object getParent(){
+			return this.parent;
+		}
+		
+		public ILoadingService getLoadingService(){
+			return this.loadingService;
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/loading/LoadingUIJob.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/loading/LoadingUIJob.java
new file mode 100644
index 0000000..cdc143e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/loading/LoadingUIJob.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.loading;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.ui.progress.UIJob;
+
+public class LoadingUIJob extends UIJob
+{
+	private static final long DELAY = 200;
+	private LoadingNode placeHolder;
+	private StructuredViewer viewer;
+
+	public LoadingUIJob(StructuredViewer viewer, LoadingNode placeHolder)
+	{
+		super(placeHolder.getText(placeHolder));
+		this.viewer = viewer;
+		this.placeHolder = placeHolder;
+		setSystem(true);
+		setRule(new NonConflictingRule());
+	}
+
+	public IStatus runInUIThread(IProgressMonitor monitor)
+	{
+		if (!placeHolder.isDisposed())
+		{
+			viewer.refresh(placeHolder, true);
+			schedule(DELAY);
+		}
+		return Status.OK_STATUS;
+	}
+
+	public boolean belongsTo(Object family) 
+	{
+		return family == LoadingNode.LOADING_FAMILY;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/loading/NonConflictingRule.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/loading/NonConflictingRule.java
new file mode 100644
index 0000000..4618234
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/loading/NonConflictingRule.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.loading;
+
+import org.eclipse.core.runtime.jobs.ISchedulingRule;
+
+public class NonConflictingRule implements ISchedulingRule
+{
+	public boolean contains(ISchedulingRule rule)
+	{
+		return rule == this;
+	}
+
+	public boolean isConflicting(ISchedulingRule rule)
+	{
+		return rule == this;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/SQLModelContentActionProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/SQLModelContentActionProvider.java
new file mode 100644
index 0000000..211cfa2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/SQLModelContentActionProvider.java
@@ -0,0 +1,108 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    rcernich - initial API and implementation
+ *******************************************************************************/ 
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers;
+
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.preference.PreferenceDialog;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.actions.ActionContext;
+import org.eclipse.ui.dialogs.PropertyDialogAction;
+import org.eclipse.ui.navigator.CommonActionProvider;
+import org.eclipse.ui.navigator.ICommonActionExtensionSite;
+import org.eclipse.ui.navigator.ICommonViewerSite;
+import org.eclipse.ui.navigator.INavigatorContentService;
+
+
+public class SQLModelContentActionProvider extends CommonActionProvider {
+	
+	private TitleChangedPropertyDialogAction mPropertiesAction;
+	private ICommonViewerSite mViewSite;
+	private StructuredViewer mStructViewer;
+
+	public SQLModelContentActionProvider() {
+		super();
+	}
+
+	public void init(String anExtensionId, IViewPart aViewPart,
+			INavigatorContentService aContentService,
+			StructuredViewer aStructuredViewer) {
+		mPropertiesAction = new TitleChangedPropertyDialogAction(
+				mStructViewer.getControl().getShell(), 
+				mViewSite.getSelectionProvider());
+		mPropertiesAction.setText(ResourceLoader.INSTANCE.queryString("DATATOOLS.SERVER.UI.EXPLORER.PROPERTIES")); //$NON-NLS-1$
+	}
+
+	public void dispose() {
+	}
+
+	public void setActionContext(ActionContext aContext) {
+	}
+
+	public void fillContextMenu(IMenuManager aMenu) {
+		aMenu.add(new Separator("additions")); //$NON-NLS-1$
+		aMenu.add(mPropertiesAction);
+		return;
+	}
+
+	public void fillActionBars(IActionBars theActionBars) {
+		return;
+	}
+
+	public void restoreState(IMemento aMemento) {
+	}
+
+	public void saveState(IMemento aMemento) {
+	}
+
+	public void init(ICommonActionExtensionSite aConfig) {
+		this.mViewSite = aConfig.getViewSite();
+		this.mStructViewer = aConfig.getStructuredViewer();
+
+		mPropertiesAction = new TitleChangedPropertyDialogAction(
+				mStructViewer.getControl().getShell(), 
+				mViewSite.getSelectionProvider());
+		mPropertiesAction.setText(ResourceLoader.INSTANCE.queryString("DATATOOLS.SERVER.UI.EXPLORER.PROPERTIES")); //$NON-NLS-1$
+		mPropertiesAction.setActionDefinitionId("org.eclipse.ui.file.properties"); //$NON-NLS-1$
+	}
+	
+	class TitleChangedPropertyDialogAction extends PropertyDialogAction {
+	
+		/**
+		 * fix for BZ 319449 to change the Properties dialog label from "Properties for"
+		 * @param shell
+		 * @param provider
+		 * @return
+		 */
+		public TitleChangedPropertyDialogAction(Shell shell,
+				ISelectionProvider provider) {
+			super(shell, provider);
+		}
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.ui.dialogs.PropertyDialogAction#createDialog()
+		 */
+		public PreferenceDialog createDialog() {
+			PreferenceDialog dialog = super.createDialog();
+			dialog.getShell().setText(ResourceLoader.INSTANCE.queryString("DATATOOLS.SERVER.UI.EXPLORER.PROPERTIES_DIALOG_TITLE"));//$NON-NLS-1$
+			return dialog;
+		}
+		
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/SQLModelContentExtension.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/SQLModelContentExtension.java
new file mode 100644
index 0000000..e667f9d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/SQLModelContentExtension.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.sqm.core.connection.ConnectionInfo;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.connectivity.ui.IContentExtension;
+import org.eclipse.datatools.connectivity.ui.ManagedContentExtensionBase;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * Represents the root of the SQL model content contribution. Wraps a
+ * <code>org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo</code>
+ * connection in the navigator.
+ * 
+ * @see IContentExtension
+ */
+public class SQLModelContentExtension extends ManagedContentExtensionBase {
+	private static final ResourceLoader resourceLoader = ResourceLoader.INSTANCE;
+	private static final String LABEL = resourceLoader.queryString("SQL_MODEL_CONTENT_EXTENSION_LABEL"); //$NON-NLS-1$
+
+	public SQLModelContentExtension(IConnectionProfile profile) {
+		super(profile, ConnectionInfo.class.getName());
+	}
+
+	public Image getImage() {
+		return null;
+	}
+
+	public String getLabel() {
+		return LABEL;
+	}
+
+	public boolean isVisible() {
+		return false;
+	}
+	
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/SQLModelContentProviderExtension.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/SQLModelContentProviderExtension.java
new file mode 100644
index 0000000..9a820aa
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/SQLModelContentProviderExtension.java
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.impl.ServerExplorerContentProviderNav;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.ServerToolsUIConstants;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.connectivity.ui.CommonContentProviderBase;
+import org.eclipse.datatools.connectivity.ui.IContentExtension;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * This class is a content provider implemention for navigatorContent
+ * extensions. This class provides SQL model content to the navigator.
+ */
+public class SQLModelContentProviderExtension extends CommonContentProviderBase {
+    private static final String LABEL = ResourceLoader.INSTANCE.queryString("SQL_MODEL_CONTENT_EXTENSION_LABEL"); //$NON-NLS-1$
+
+	public SQLModelContentProviderExtension() {
+		super(new ServerExplorerContentProviderNav());
+	}
+
+	protected IContentExtension createContentExtension(
+			IConnectionProfile profile) {
+		return new SQLModelContentExtension(profile);
+	}
+
+   public IContentExtension getContentExtension(final IConnectionProfile profile) 
+    {
+        final Properties prop = profile.getProperties(ServerToolsUIConstants.OFFLINE_PROPERTY_SET);
+        if (prop == null || prop.isEmpty())
+        {
+            return super.getContentExtension(profile);
+        }
+        else
+        {
+            return new IContentExtension ()
+            {
+                public void closeConnection()
+                {
+                }
+                public void dispose()
+                {
+                }
+                public IConnection getConnection()
+                {
+                    return new IConnection ()
+                    {
+
+                        public void close()
+                        {
+                        }
+
+                        public Throwable getConnectException()
+                        {
+                            return null;
+                        }
+
+                        public IConnectionProfile getConnectionProfile()
+                        {
+                            return profile;
+                        }
+
+                        public Object getRawConnection()
+                        {
+                            return prop.get(ServerToolsUIConstants.CONNECTION_INFO);
+                        }
+                    };
+                }
+                public IConnectionProfile getConnectionProfile()
+                {
+                    return profile;
+                }
+                public Image getImage()
+                {
+                    return null;
+                }
+                public String getLabel()
+                {
+                    return LABEL;
+                }
+                public boolean isVisible()
+                {
+                    return false;
+                }
+                public void openConnection()
+                {
+                }
+            };
+        }
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/SQLModelLabelProviderExtension.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/SQLModelLabelProviderExtension.java
new file mode 100644
index 0000000..13a2703
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/SQLModelLabelProviderExtension.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers;
+
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.label.ServerExplorerLabelProvider;
+import org.eclipse.datatools.connectivity.ui.CommonLabelProviderBase;
+
+/**
+ * This class is a label provider implemention for navigatorContent
+ * extensions. This class provides SQL model labels to the navigator.
+ */
+public class SQLModelLabelProviderExtension extends CommonLabelProviderBase {
+
+	public SQLModelLabelProviderExtension() {
+		super(new ServerExplorerLabelProvider());
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/ServerExplorerManager.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/ServerExplorerManager.java
new file mode 100644
index 0000000..51fc6f7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/ServerExplorerManager.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers;
+
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.services.IServerExplorerContentService;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.services.IServerExplorerNavigationService;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.services.IServerExplorerNodeResolutionService;
+
+
+/**
+ * NON-API
+ * 
+ * @author ljulien
+ */
+public class ServerExplorerManager
+{
+	public static final ServerExplorerManager INSTANCE = new ServerExplorerManager ();
+	private IServerExplorerContentService serverExplorerService;
+	
+	public void setServerExplorerService (IServerExplorerContentService serverExplorerService)
+	{
+		this.serverExplorerService = serverExplorerService;
+	}
+	
+	public IServerExplorerContentService getServerExplorerContentService ()
+	{
+		return this.serverExplorerService;
+	}
+	
+	public IServerExplorerNavigationService getServerExplorerNavigationService ()
+	{
+	    return (IServerExplorerNavigationService)serverExplorerService;
+	}
+	
+	public IServerExplorerNodeResolutionService getServerExplorerNodeResolutionService ()
+	{
+	    return (IServerExplorerNodeResolutionService)serverExplorerService;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/bookmark/BookmarkProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/bookmark/BookmarkProvider.java
new file mode 100644
index 0000000..e336ea8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/bookmark/BookmarkProvider.java
@@ -0,0 +1,247 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.bookmark;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IMarkerDelta;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.datatools.connectivity.sqm.core.connection.ConnectionInfo;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.EclipseUtilities;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.DataToolsUIConstants;
+import org.eclipse.datatools.connectivity.sqm.core.ui.services.IDataToolsUIServiceManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionSharingListener;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.ServerUIDebugOptions;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.TransientEObjectUtil;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.logging.Logger;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.navigator.ICommonViewerWorkbenchSite;
+
+/**
+ * @author ljulien
+ */
+public class BookmarkProvider extends Action
+{
+    private static final String BLANK_ID = ""; //$NON-NLS-1$
+    
+    private static final String ADD_BOOKMARK_TITLE = ResourceLoader.INSTANCE.queryString("DATATOOLS.SERVER.UI.BOOKMARK.TITLE"); //$NON-NLS-1$
+    private static final String ADD_BOOKMARK_MESSAGE = ResourceLoader.INSTANCE.queryString("DATATOOLS.SERVER.UI.BOOKMARK.MESSAGE"); //$NON-NLS-1$
+    private static final String BOOKMARK_VIEW = "org.eclipse.ui.views.BookmarkView"; //$NON-NLS-1$ 
+    
+    private ICommonViewerWorkbenchSite viewSite;
+    private IResourceChangeListener bookmarkListener;
+    private List infoListener = new LinkedList ();
+
+    private String getElementId (EObject eObject) throws Exception
+    {
+        return TransientEObjectUtil.getEObjectId(eObject);
+    }
+    
+    private EObject getElementFromId (String elementID)
+    {
+        return TransientEObjectUtil.getEObjectFromId(elementID);
+    }
+    
+    private IMarker addBookmark(Map attributes, Object element)
+    {
+        try
+        {
+            // Bring up the bookmark view
+            EclipseUtilities.getActivePage().showView(BOOKMARK_VIEW);
+            
+            // Add the Bookmark
+            IMarker marker = ResourcesPlugin.getWorkspace().getRoot().createMarker(DataToolsUIConstants.TRANSIENT_BOOKMARK);
+            marker.setAttributes(attributes);
+            
+            // Fire the decorator
+            IDataToolsUIServiceManager.INSTANCE.getBookmarkDecorationService().refreshDecoration(element);
+            
+            return marker;
+        }
+        catch (CoreException e)
+        {
+            e.printStackTrace();
+        }
+        return null;
+    }
+    
+    private void enableConnectionListener (IMarker marker, EObject eObject)
+    {
+        ConnectionInfo info = TransientEObjectUtil.getConnectionInfo(eObject);
+        try
+        {
+            marker.setAttribute(DataToolsUIConstants.CONNECTION_NAME, info.getName());
+        }
+        catch (CoreException e1)
+        {
+        }
+        if (!infoListener.contains(info))
+        {
+            infoListener.add(info);
+            ((org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo)info).addConnectionSharingListener(new ConnectionSharingListener()
+	        {
+				public void onSQLException(
+						org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo info,
+						Connection connection, SQLException exception) {}
+				
+				public void sharedConnectionAdded(
+						org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo info,
+						Connection connection) {}
+				
+				public void sharedConnectionRemove(
+						org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo info,
+						Connection connection) {}
+				
+				public void sharedDatabaseAdded(
+						org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo info,
+						Database database) {}
+				
+				public void sharedDatabaseRemove(
+						org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo info,
+						Database database) {
+					infoListener.remove(info);
+	                try
+	                {
+	                    IMarker [] markers = ResourcesPlugin.getWorkspace().getRoot().findMarkers(DataToolsUIConstants.BOOKMARK, 
+	                            																  true, 
+	                            																  IResource.DEPTH_INFINITE);
+	                    for (int i = 0, n = markers.length; i < n; i++)
+	                    {
+	                        IMarker marker = markers[i];
+	                        if (info.getName().equals(marker.getAttribute(DataToolsUIConstants.CONNECTION_NAME)))
+	                        {
+	                            marker.delete();
+	                        }
+	                    }
+	                }
+	                catch (CoreException e)
+	                {
+	                }					
+				}
+	        });
+        }
+    }
+
+    private void addEObjectBookmark(EObject eObject, String description)
+    {
+        try
+        {
+            String elementName = IDataToolsUIServiceManager.INSTANCE.getLabelService(eObject).getName();
+
+            HashMap attribMap = new HashMap();
+            attribMap.put(IMarker.LOCATION, elementName);
+            attribMap.put(IMarker.MESSAGE, description);
+            
+            attribMap.put(DataToolsUIConstants.BOOKMARK_ELEMENT_ID, getElementId (eObject));
+            
+            IMarker marker = addBookmark (attribMap, eObject);
+            enableConnectionListener (marker, eObject);
+        }
+        catch (Exception e)
+        {
+            Logger.log(this, e, ServerUIDebugOptions.SERVER_EXPLORER_LOG);
+        }
+    }
+    
+    private void addBookmark(Object element, String name)
+    {
+        InputDialog descriptionDialog = new InputDialog (	Display.getCurrent().getActiveShell(),
+                											ADD_BOOKMARK_TITLE,
+															ADD_BOOKMARK_MESSAGE,
+															name,
+															null);
+        if (descriptionDialog.open() == Dialog.OK)
+        {
+	        if (element instanceof EObject)
+	        {
+	            addEObjectBookmark((EObject) element, descriptionDialog.getValue());
+	        }
+        }
+    }
+
+    public BookmarkProvider(ICommonViewerWorkbenchSite viewSite)
+    {
+        this.viewSite = viewSite;
+        
+        ResourcesPlugin.getWorkspace().addResourceChangeListener(bookmarkListener = new IResourceChangeListener ()
+        {
+            public void resourceChanged(IResourceChangeEvent event)
+            {
+                IMarkerDelta [] delta = event.findMarkerDeltas(DataToolsUIConstants.TRANSIENT_BOOKMARK, false);
+                if (delta.length != 0)
+                {
+                    for (int i = 0, n = delta.length; i < n; i++)
+                    {
+                        if (delta[i].getKind() == IResourceDelta.REMOVED)
+                        {
+                            String id = delta[i].getAttribute(DataToolsUIConstants.BOOKMARK_ELEMENT_ID, BLANK_ID);
+                            if (!id.equals(BLANK_ID))
+                            {
+                                EObject object = getElementFromId(id);
+                                if (object != null)
+                                {
+                                    IDataToolsUIServiceManager.INSTANCE.getBookmarkDecorationService().refreshDecoration(object);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        });
+    }
+
+    /**
+     * Will remove the resource listener to listen to bookmark changes
+     */
+    public void removeListener ()
+    {
+        ResourcesPlugin.getWorkspace().removeResourceChangeListener(bookmarkListener);
+    }
+    
+    public void run ()
+    {
+        ISelection selection = this.viewSite.getSelectionProvider().getSelection();
+        if (selection instanceof IStructuredSelection)
+        {
+            for (Iterator iterator = ((IStructuredSelection) selection).iterator(); iterator.hasNext();)
+            {
+                Object current = iterator.next();
+                String currentName = BLANK_ID;
+                if (current instanceof SQLObject)
+                {
+                    currentName = IDataToolsUIServiceManager.INSTANCE.getLabelService(current).getName();
+                }
+                addBookmark(current, currentName);
+            }
+        }
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/bookmark/BookmarkSelectionProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/bookmark/BookmarkSelectionProvider.java
new file mode 100644
index 0000000..9092bb8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/bookmark/BookmarkSelectionProvider.java
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.bookmark;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.DataToolsUIConstants;
+import org.eclipse.datatools.connectivity.sqm.core.ui.services.IDataToolsUIServiceManager;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.services.IServicesManager;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.ServerUIDebugOptions;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.logging.Logger;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.ISelectionListener;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author ljulien
+ */
+public class BookmarkSelectionProvider
+{
+    private static final String BOOKMARKVIEW = "org.eclipse.ui.views.BookmarkView"; //$NON-NLS-1$
+    private static final String BLANK_ID = ""; //$NON-NLS-1$
+    
+    private ISelectionListener listener = null;
+    
+    public BookmarkSelectionProvider()
+    {
+        IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+        if (page != null)
+        {
+            page.addSelectionListener(BOOKMARKVIEW, listener = new ISelectionListener()
+            {
+                public void selectionChanged(IWorkbenchPart part, ISelection selection)
+                {
+                    if (selection instanceof IStructuredSelection)
+                    {
+	                    IStructuredSelection structuredSelection = (IStructuredSelection) selection;
+	                    Object obj = structuredSelection.getFirstElement();
+	                    if (obj == null || !(obj instanceof IAdaptable))
+	                    {
+	                        return;
+	                    }
+	
+	                    IMarker marker = (IMarker) ((IAdaptable)obj).getAdapter(IMarker.class);
+	                    try
+	                    {
+	                        if (marker.getType().equals(DataToolsUIConstants.TRANSIENT_BOOKMARK))
+	                        {
+	                            String attribute = (String) marker.getAttribute(DataToolsUIConstants.BOOKMARK_ELEMENT_ID, BLANK_ID);
+	                            if (!attribute.equals(BLANK_ID))
+	                            {
+	                                IServicesManager.INSTANCE.getServerExplorerContentService().expandNode(attribute);
+	                            }
+	                        }
+	                        else
+	                        {
+	                            IDataToolsUIServiceManager.INSTANCE.getMarkerNavigationService().gotoMarker(null, marker);
+	                        }
+	                    }
+	                    catch (CoreException e)
+	                    {
+	                        Logger.log(this, e, ServerUIDebugOptions.SERVER_EXPLORER_LOG);
+	                    }
+                    }
+                }
+            });
+        }
+    }
+    
+    public void removeListener ()
+    {
+        if (listener != null)
+        {
+            IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+            if (window != null)
+            {
+                IWorkbenchPage page = window.getActivePage();
+                if (page != null)
+                {
+                    page.removeSelectionListener(BOOKMARKVIEW, listener);
+                }
+            }
+        }
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/content/impl/ServerExplorerContentProviderNav.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/content/impl/ServerExplorerContentProviderNav.java
new file mode 100644
index 0000000..b8ac8db
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/content/impl/ServerExplorerContentProviderNav.java
@@ -0,0 +1,535 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.impl;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IManagedConnection;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentService;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObjectListener;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual.VirtualNode;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo;
+import org.eclipse.datatools.connectivity.sqm.internal.core.util.ConnectionUtil;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.loading.ILoadingService;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.loading.LoadingNode;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.ServerExplorerManager;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout.IServerExplorerLayoutProviderNav;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout.hierar.ServerExplorerHierarchicalLayoutNav;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout.vnode.ServerExplorerVirtualNodeLayoutNav;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.layout.IServerExplorerLayoutExtensionProvider;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.layout.IServerExplorerLayoutExtensionProvider.Layout;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.services.IServerExplorerContentService;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.services.IServerExplorerLayoutService;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.services.IServerExplorerNavigationService;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.services.IServerExplorerNodeResolutionService;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.TransientEObjectUtil;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.TransientEObjectUtil.IGroup;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.emf.ecore.ENamedElement;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.ui.navigator.CommonViewer;
+
+
+/**
+ * @author ljulien
+ */
+public class ServerExplorerContentProviderNav implements IServerExplorerContentService, IServerExplorerNodeResolutionService,
+        IServerExplorerLayoutService, IServerExplorerNavigationService, ICatalogObjectListener, ILoadingService
+{
+    private static final ContainmentService containmentService = RDBCorePlugin.getDefault().getContainmentService();
+    private static final ResourceLoader resourceLoader = ResourceLoader.INSTANCE;
+
+    private static final String DESCRIPTION = resourceLoader.queryString("DATATOOLS.SERVER.UI.EXPLORER.DESCRIPTION"); //$NON-NLS-1$
+
+    private IServerExplorerLayoutProviderNav layoutProvider = new ServerExplorerVirtualNodeLayoutNav(this);
+    private CommonViewer viewer;
+    private List layoutProvidersExtensionList = new LinkedList();
+    
+    /**
+     * Will initialize the Server Explorer
+     */
+    public ServerExplorerContentProviderNav()
+    {
+    	if (this.getClass().equals(ServerExplorerContentProviderNav.class))
+    	{
+    		ServerExplorerManager.INSTANCE.setServerExplorerService(this);
+    	}
+    }
+    
+    /**
+     * @return The viewer used by the Data Server Explorer
+     */
+    private CommonViewer getViewer ()
+    {
+        return this.viewer;
+    }
+
+    /**
+     * @see org.eclipse.ui.views.navigator.INavigatorContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+     */
+    public void inputChanged(Viewer viewer, Object oldInput, Object newInput)
+    {
+    	if (viewer instanceof CommonViewer && this.viewer == null)
+    	{
+    		this.viewer = (CommonViewer) viewer;
+	        this.enableVirtualNodeLayout();
+	        RefreshManager.getInstance().AddListener(null, this);
+    	}
+    }
+    
+    public void notifyChanged(final ICatalogObject dmElement, int eventType) {
+        if (eventType == ICatalogObjectListener.EventTypeEnumeration.ELEMENT_REFRESH && viewer != null)
+        {
+            //this may occur in rare cases where dispose() is not called.
+            if (viewer.getControl().isDisposed())
+            {
+                RefreshManager.getInstance().removeListener(null, this);
+            }
+            else
+            {
+                viewer.getControl().getDisplay().syncExec(new Runnable() {
+                    public void run() {
+                        viewer.refresh(dmElement, true);
+                    }
+                });
+            }
+        }
+	}
+
+	public boolean isServerExplorerViewer ()
+    {
+    	return this.viewer != null;
+    }
+
+	public Object[] getChildren (Object parent)
+	{
+    	return new Loading ().getChildren(this.viewer, parent, this);
+	}
+	
+	public String getLoadingDescription()
+	{
+		return DESCRIPTION;
+	}
+
+    public Object[] load(Object parentElement)
+    {
+		if (parentElement instanceof ConnectionInfo)
+		{
+			return new Object[] { ((ConnectionInfo) parentElement).getSharedDatabase() };
+		}
+		else if (parentElement instanceof VirtualNode && ((IVirtualNode) parentElement).hasChildren())
+		{
+			return ((IVirtualNode) parentElement).getChildrenArray();
+		}
+		else
+		{
+			return layoutProvider.getChildren(parentElement);
+		}
+	}
+
+    /**
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
+	 */
+    public Object getParent(Object element)
+    {
+        if (isServerExplorerViewer ())
+        {
+			Object result = getViewer().testFindItem(element);
+			result = result != null ? ((TreeItem)result).getParentItem().getData() : element instanceof IVirtualNode ? ((IVirtualNode) element).getParent() : null;
+			result = result != null ? result : element instanceof EObject ? containmentService.getContainer((EObject) element)
+					: null;
+			return result;
+		}
+        return null;
+    }
+
+    /**
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
+	 */
+    public boolean hasChildren(Object element)
+    {
+    	if (element instanceof IConnectionProfile)
+    	{
+    		return ((IConnectionProfile) element).getConnectionState() != IConnectionProfile.DISCONNECTED_STATE;
+    	}
+    	return element instanceof ConnectionInfo && ((ConnectionInfo) element).getSharedDatabase() == null ? false : element instanceof LoadingNode ? false : true;
+    }
+
+    /**
+     * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+     */
+    public Object[] getElements(Object inputElement)
+    {
+        return getChildren(inputElement);
+    }
+
+    /**
+     * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+     */
+    public void dispose()
+    {
+        RefreshManager.getInstance().removeListener(null, this);
+    	if (this.getClass().equals(ServerExplorerContentProviderNav.class))
+    	{
+    		ServerExplorerManager.INSTANCE.setServerExplorerService(null);
+    	}
+    }
+
+    private void loadChilds (CommonViewer viewer, Object parent)
+    {
+        viewer.expandToLevel(parent, 1);
+        try
+		{
+        	Job.getJobManager().join(LoadingNode.LOADING_FAMILY, new NullProgressMonitor ());
+		}
+		catch (OperationCanceledException e)
+		{
+			e.printStackTrace();
+		}
+		catch (InterruptedException e)
+		{
+			e.printStackTrace();
+		}
+    }
+    
+    private Object getVirtualNode (CommonViewer viewer, Object parent, String groupID)
+    {
+        if (parent != null)
+        {
+            if (parent instanceof IConnectionProfile)
+            {
+                return parent;
+            }
+            else
+            {
+                TreeItem [] items = getServerExplorerChildren(parent);
+                if (items.length != 0)
+                {   
+                    for (int i = 0, n = items.length; i < n; i++)
+                    {
+                        TreeItem child = items[i];
+                        Object childNode = child.getData ();
+                        if (childNode instanceof IVirtualNode && ((IVirtualNode)childNode).getGroupID().equals(groupID))
+                        {
+                            return (IVirtualNode) child.getData();
+                        }
+                    }
+                }
+            }
+        }
+        return null;
+    }
+    
+    public TreeItem[] getServerExplorerChildren(Object object)
+    {
+        TreeItem w = (TreeItem)this.getViewer().testFindItem(object);
+        return w == null ? new TreeItem[0] : (TreeItem [])w.getItems();
+    }
+
+    private Object getEObjectNode (CommonViewer viewer, Object parent, String name)
+    {
+        if (parent != null)
+        {
+            TreeItem [] items = getServerExplorerChildren(parent);
+            if (items.length != 0)
+            {
+                for (int i = 0, n = items.length; i < n; i++)
+                {
+                    TreeItem child = items[i];
+                    Object childNode = child.getData ();
+                    if (childNode instanceof ENamedElement && ((ENamedElement)childNode).getName().equals (name))
+                    {
+                        return childNode;
+                    }
+                }
+            }
+        }
+        return null;
+    }
+    
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.ui.services.IServerExplorerServices#expandNode(java.lang.Object)
+     */
+    public void expandNode(EObject eObject)
+    {
+        try
+        {
+            expandNode (TransientEObjectUtil.getEObjectId(eObject));
+        }
+        catch (Exception e)
+        {
+        }
+    }
+
+    public void selectAndReveal(ISelection selection)
+    {
+        if (selection instanceof IStructuredSelection)
+        {
+            IStructuredSelection structuredSelection = (IStructuredSelection) selection;
+            for (Iterator iterator = structuredSelection.iterator(); iterator.hasNext();)
+            {
+                Object object = iterator.next();
+                if (object instanceof EObject)
+                {
+                    expandNode ((EObject)object);
+                }
+            }
+        }
+        getViewer().setSelection(selection, true);
+    }
+    
+    public void expandNode (String pathToNavigate)
+    {
+        final CommonViewer viewer = getViewer();
+
+        try
+        {
+        	Object node = getNode(pathToNavigate,viewer);
+        	if (node != null) viewer.setSelection(new StructuredSelection(node));
+        }
+        catch (Exception e)
+        {
+        	e.printStackTrace();
+        }
+    }
+    
+    public EObject getEObjectNode(String pathToNavigate)
+    {
+        final CommonViewer viewer = getViewer();
+
+        Object node = getNode(pathToNavigate,viewer);
+        if (node instanceof EObject) return (EObject)node;
+        return null;
+    }
+    
+    private Object getNode(String pathToNavigate,CommonViewer iViewer)
+    {
+        final CommonViewer viewer = iViewer;
+        Object parent1 = null;
+
+        try
+        {
+            List path = TransientEObjectUtil.getPathFromID (pathToNavigate);
+            Iterator pathIterator = path.iterator();
+            
+            parent1 = ProfileManager.getInstance().getProfileByName((String)pathIterator.next());
+            Object parent2 = null;
+            while (pathIterator.hasNext())
+            {
+                String pathString = (String) pathIterator.next();
+                IGroup group = TransientEObjectUtil.getGroupInfo(pathString);
+                String groupID = group.getGroupId();
+                String elementName = group.getElementName();
+                
+                // If elementName is null then the model
+                // probably has a default catalog and we can skip it.
+                if (elementName != null){  
+	                parent2 = getVirtualNode (viewer, parent1, groupID);
+	                if (parent2 == null)
+	                {
+	                    loadChilds (viewer, parent1);
+	                    parent2 = getVirtualNode (viewer, parent1, groupID);
+	                    if (parent2 == null && parent1 instanceof IVirtualNode)
+	                    {
+	                        Object [] children =  ((IVirtualNode) parent1).getChildrenArray();
+	                        for (int i = 0, n = children.length; i < n; i++)
+	                        {
+	                            Object parent4 = getVirtualNode (viewer, children[i], groupID);
+	                            if (parent4 != null)
+	                            {
+	                                parent2 = parent4;
+	                                break;
+	                            }
+	                        }
+	                    }
+	                }
+	                else
+	                {
+	                    loadChilds (viewer, parent2);
+	                    Object parent3 = getVirtualNode (viewer, parent2, groupID);
+	                    if (parent3 != null)
+	                    {
+	                        parent2 = parent3;
+	                    }
+	                }
+	                parent1 = parent2;
+	                if (elementName != null)
+	                {
+	                    parent2 = getEObjectNode (viewer, parent1, elementName);
+	                    if (parent2 == null)
+	                    {
+	                        loadChilds (viewer, parent1);
+	                        parent2 = getEObjectNode (viewer, parent1, elementName);
+	                    }
+	                }
+	                parent1 = parent2;
+	            }          
+            }
+        }
+        catch (Exception e)
+        {
+        	e.printStackTrace();
+        }
+        return parent1;
+    }
+    
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.ui.services.IServerExplorerServices#getServerExplorerLayoutServices()
+     */
+    public IServerExplorerLayoutService getServerExplorerLayoutService()
+    {
+        return this;
+    }
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.ui.services.IServerExplorerServices#refreshServerExplorer()
+     */
+    public void refreshServerExplorer()
+    {
+    }
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.ui.services.IServerExplorerServices#updateLayout()
+     */
+    public void updateLayout()
+    {
+    }
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.ui.services.IServerExplorerServices#refreshNode(java.lang.Object)
+     */
+    public void refreshNode(final Object node)
+    {
+    	Display.getDefault().asyncExec(new Runnable()
+    	{
+    		public void run ()
+    		{
+    	    	if (isServerExplorerViewer ())
+    	    	{
+    	    		viewer.refresh(node, true);
+    	    	}
+    		}
+    	});
+    }
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.ui.services.IServerExplorerLayoutServices#enableVirtualNodeLayout()
+     */
+    public void enableVirtualNodeLayout()
+    {
+        this.layoutProvider = new ServerExplorerVirtualNodeLayoutNav(this);
+        for (Iterator iterator = layoutProvidersExtensionList.iterator(); iterator.hasNext();)
+        {
+            ((IServerExplorerLayoutExtensionProvider) iterator.next()).enableLayout(Layout.VNODE);
+        }
+    }
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.ui.services.IServerExplorerLayoutServices#enableHierarchicalLayout()
+     */
+    public void enableHierarchicalLayout()
+    {
+        this.layoutProvider = new ServerExplorerHierarchicalLayoutNav(this);
+        for (Iterator iterator = layoutProvidersExtensionList.iterator(); iterator.hasNext();)
+        {
+            ((IServerExplorerLayoutExtensionProvider) iterator.next()).enableLayout(Layout.HIERARCHICAL);
+        }
+    }
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.ui.services.IServerExplorerLayoutServices#isVirtualNodeLayoutSelected()
+     */
+    public boolean isVirtualNodeLayoutSelected()
+    {
+        return this.layoutProvider instanceof ServerExplorerVirtualNodeLayoutNav;
+    }
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.ui.services.IServerExplorerLayoutServices#isHierarchicalLayoutSelected()
+     */
+    public boolean isHierarchicalLayoutSelected()
+    {
+        return this.layoutProvider instanceof ServerExplorerHierarchicalLayoutNav;
+    }
+
+    public void expandNode(Object node, int depth)
+    {
+        while (Display.getDefault().readAndDispatch());
+        viewer.expandToLevel(node, depth);
+    }
+
+    public void updateSelection(ISelection selection)
+    {
+        viewer.setSelection(selection,true);
+    }
+
+	public void init(Object oldInput, Object newInput) 
+	{
+	}
+	
+    private void traverseChildrenForType (List objectsList, TreeItem [] items, Class type)
+    {
+        for (int i = 0, n = items.length; i < n; i++)
+        {
+            TreeItem item = items[i];
+            if (item.getData() != null && type.isAssignableFrom(item.getData().getClass()))
+            {
+                objectsList.add(item.getData());
+            }
+            traverseChildrenForType (objectsList, item.getItems(), type);
+        }
+    }
+
+	public Object[] getDSEExplorerObjectsByType(IConnectionProfile profile, Class type)
+	{
+		IManagedConnection managedConnection = profile.getManagedConnection(ConnectionUtil.CONNECTION_TYPE);
+	    if (managedConnection != null)
+	    {
+	        ConnectionInfo connectionInfo = (ConnectionInfo) managedConnection.getConnection().getRawConnection();
+	        Database database = connectionInfo.getSharedDatabase();
+	        if (database != null || (database = connectionInfo.getCachedDatabase()) != null)
+	        {
+	        	return getDSEExplorerObjectsByType (database, type);
+	        }
+	    }
+	    return new Object[0];
+	}
+
+	public Object[] getDSEExplorerObjectsByType(Object parent, Class type)
+	{
+        List objectsList = new ArrayList ();
+        if (parent != null)
+        {
+            TreeItem [] items =  getServerExplorerChildren (parent);
+            traverseChildrenForType (objectsList, items, type);
+        }
+        return objectsList.toArray(new Object [objectsList.size()]);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/content/layout/AbstractLayoutProviderNav.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/content/layout/AbstractLayoutProviderNav.java
new file mode 100644
index 0000000..236218f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/content/layout/AbstractLayoutProviderNav.java
@@ -0,0 +1,102 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.services.IVirtualNodeServiceFactory;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+import org.eclipse.datatools.connectivity.sqm.core.ui.services.IDataToolsUIServiceManager;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.impl.ServerExplorerContentProviderNav;
+
+
+/**
+ * @author ljulien
+ */
+public abstract class AbstractLayoutProviderNav implements IServerExplorerLayoutProviderNav
+{
+	protected static final IVirtualNodeServiceFactory virtualNodeFactory = IDataToolsUIServiceManager.INSTANCE
+			.getVirtualNodeServiceFactory();
+
+	protected IServerExplorerOnDemandContentProviderNav onDemandContentProvider;
+	protected ServerExplorerContentProviderNav contentProvider;
+	
+	/**
+	 * Will initialize the Content Provider
+	 * @param contentProvider
+	 */
+	protected AbstractLayoutProviderNav (ServerExplorerContentProviderNav contentProvider)
+	{
+		this.contentProvider = contentProvider;
+	}
+
+	protected void addChilds (Object parent, Object [] childs)
+	{
+		if (parent instanceof IVirtualNode)
+		{
+			for (int i = 0, n = childs.length; i < n; i++)
+			{
+			    ((IVirtualNode)parent).addChildren(childs[i]);
+			}
+		}
+	}
+	
+	/**
+	 * @return The viewer that matches the provided viewer - A match will be found when the two underlying object are equals 
+	 */
+	protected Object findElement (Object [] viewers, Object element, int depth)
+	{
+		for (int i = 0, n = viewers.length; i < n; i++)
+		{
+			if (depth == 2 && viewers[i] instanceof IVirtualNode)
+			{
+				Object [] depthChilds = ((IVirtualNode)viewers[i]).getChildrenArray();
+				for (int k = 0, m = depthChilds.length; k < m; k++)
+				{
+				    Object obj = depthChilds[k];
+					if (obj.equals(element))
+					{
+						return obj;
+					}
+				}
+			}
+			else
+			{
+				if (viewers[i].equals(element))
+				{
+					return viewers[i];
+				}
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.internal.ui.explorer.providers.content.layout.IServerExplorerLayoutProvider#getChildren(com.ibm.xtools.common.core.internal.services.explorer.ViewPartInstanceId, com.ibm.xtools.common.core.internal.services.explorer.Object)
+	 */
+	public Object[] getChildren(Object parentElement)
+	{
+		return onDemandContentProvider.getChildren(parentElement);
+	}
+
+	/**
+	 * @return The list of discorved Servers
+	 */
+	public void initializeDiscoveredServers(Object parent)
+	{
+	}
+	
+	/**
+	 * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.internal.ui.explorer.providers.content.layout.IServerExplorerLayoutProvider#getServerDatabases(com.ibm.datatools.core.ui.modelexplorer.virtual.IServerNode)
+	 */
+	public Object [] displayServerChildren (Object server)
+	{
+		return this.onDemandContentProvider.getChildren(server);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/content/layout/AbstractOnDemandContentProviderNav.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/content/layout/AbstractOnDemandContentProviderNav.java
new file mode 100644
index 0000000..0bcb7ce
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/content/layout/AbstractOnDemandContentProviderNav.java
@@ -0,0 +1,247 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentService;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.services.IVirtualNodeServiceFactory;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IAuthorizationIDNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.ICatalogNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IColumnNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IConstraintNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IDependencyNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IGroupNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IIndexNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IRoleNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.ISchemaNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.ISequenceNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IStoredProcedureNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.ITableNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.ITriggerNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IUDFNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IUDTNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IUserNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IViewNode;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+import org.eclipse.datatools.connectivity.sqm.core.ui.services.IDataToolsUIServiceManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.internal.core.containment.GroupID;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.modelbase.sql.constraints.Constraint;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.datatools.modelbase.sql.routines.UserDefinedFunction;
+import org.eclipse.datatools.modelbase.sql.schema.Catalog;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;
+import org.eclipse.emf.ecore.EObject;
+
+
+/**
+ * @author ljulien
+ */
+public abstract class AbstractOnDemandContentProviderNav implements IServerExplorerOnDemandContentProviderNav
+{
+	protected static ResourceLoader resourceLoader = ResourceLoader.INSTANCE;
+
+	protected static final Object[] EMPTY_ELEMENT_ARRAY = new Object[0];
+	protected static final IVirtualNodeServiceFactory nodeFactory = IDataToolsUIServiceManager.INSTANCE.getVirtualNodeServiceFactory();
+	protected static final ContainmentService containmentService = RDBCorePlugin.getDefault().getContainmentService();
+	
+	/**
+	 * @return a IVieverElement array from the collection provided
+	 */
+	protected Object[] getArrays (Object parent, Collection collection)
+	{
+		if (collection.isEmpty())
+		{
+			return EMPTY_ELEMENT_ARRAY;
+		}
+		else
+		{
+		    if (parent instanceof IVirtualNode && !((IVirtualNode)parent).hasChildren())
+		    {
+		        ((IVirtualNode)parent).addChildren(collection);
+		    }
+			return collection.toArray(new Object[collection.size()]);
+		}
+	}
+
+	protected abstract Object [] displayTriggerNodeChildren (Object parent);
+	protected abstract Object [] displayIndexNodeChildren (Object parent);
+	protected abstract Object [] displayConstraintNodeChildren (Object parent);
+	protected abstract Object [] displayColumnNodeChildren (Object parent);
+	protected abstract Object [] displayViewsNodeChildren (Object parent);
+	protected abstract Object[] displayTableChildren (Object parent);
+	protected abstract Object [] displayViewChildren (Object parent);
+	protected abstract Object [] displayDatabaseChildren (Object parent);
+	protected abstract Object[] displayTableNodeChildren (Object parent);
+	protected abstract Object [] displaySequenceNodeChildren (Object parent);
+	protected abstract Object [] displayUDTNodeChildren (Object parent);
+	protected abstract Object[] displaySchemaNodeChildren (Object parent);
+	protected abstract Object[] displaySchemaChildren (Object parent);
+	protected abstract Object[] displayServerChildren (Object parent);
+	protected abstract Object[] displayDependencyNodeChildren (Object parent);
+	protected abstract Object[] displayStoredProcedureChildren (Object parent);
+	protected abstract Object[] displayTriggerChildren (Object parent);
+	protected abstract Object[] displayUDFChildren (Object parent);
+	protected abstract Object[] displayColumnChildren (Object parent);
+	protected abstract Object[] displayIndexChildren (Object parent);
+	protected abstract Object[] displayConstraintChildren (Object parent);
+	protected abstract Object [] displayUDFNodeChildren (Object parent);
+	protected abstract Object [] displayStoredProcedureNodeChildren (Object parent);
+	protected abstract Object[] displayCatalogNodeChildren (Object parent);
+	protected abstract Object[] displayCatalogChildren (Object parent);
+	protected abstract Object [] displayUserNodeChildren (Object parent);
+	protected abstract Object [] displayGroupNodeChildren (Object parent);
+	protected abstract Object [] displayRoleNodeChildren (Object parent);
+
+	private Object [] getChildren (EObject parent)
+	{
+		if (parent instanceof Database && containmentService.getGroupId(parent) == GroupID.DATABASE) 
+		{
+			return displayDatabaseChildren (parent);
+		}
+		else if (parent instanceof Catalog && containmentService.getGroupId(parent) == GroupID.CATALOG)
+		{
+			return displayCatalogChildren (parent);
+		}
+		else if (parent instanceof Schema && containmentService.getGroupId(parent) == GroupID.SCHEMA)
+		{
+			return displaySchemaChildren (parent);
+		}
+		else if (parent instanceof BaseTable && containmentService.getGroupId(parent) == GroupID.TABLE)
+		{
+	        return displayTableChildren(parent);
+		}
+		else if (parent instanceof ViewTable && containmentService.getGroupId(parent) == GroupID.VIEW)
+		{
+			return displayViewChildren (parent);
+		}
+		else if (parent instanceof Procedure && containmentService.getGroupId(parent) == GroupID.PROCEDURE)
+		{
+		    return displayStoredProcedureChildren(parent);
+		}
+		else if (parent instanceof Trigger && containmentService.getGroupId(parent) == GroupID.TRIGGER)
+		{
+		    return displayTriggerChildren (parent);
+		}
+		else if (parent instanceof UserDefinedFunction && containmentService.getGroupId(parent) == GroupID.FUNCTION)
+		{
+		    return displayUDFChildren (parent);
+		}
+		else if (parent instanceof Column && containmentService.getGroupId(parent) == GroupID.COLUMN)
+		{
+		    return displayColumnChildren (parent);
+		}
+		else if (parent instanceof Index && containmentService.getGroupId(parent) == GroupID.INDEX)
+		{
+		    return displayIndexChildren (parent);
+		}
+		else if (parent instanceof Constraint && containmentService.getGroupId(parent) == GroupID.CONSTRAINT)
+		{
+		    return displayConstraintChildren (parent);
+		}
+		return EMPTY_ELEMENT_ARRAY;
+	}
+	
+	private Object [] getChildren (IVirtualNode parent)
+	{
+		if (parent instanceof ICatalogNode)
+		{
+			return displayCatalogNodeChildren (parent);
+		}
+		else if (parent instanceof ISchemaNode)
+		{
+			return displaySchemaNodeChildren (parent);
+		}
+		else if (parent instanceof ITableNode)
+		{
+			return displayTableNodeChildren(parent);
+		}
+		else if (parent instanceof IStoredProcedureNode)
+		{
+		    return displayStoredProcedureNodeChildren(parent);
+		}
+		else if (parent instanceof IUDFNode)
+		{
+		    return displayUDFNodeChildren(parent);
+		}
+		else if (parent instanceof ISequenceNode)
+		{
+			return displaySequenceNodeChildren(parent);
+		}
+		else if (parent instanceof IUDTNode)
+		{
+			return displayUDTNodeChildren(parent);
+		}
+		else if (parent instanceof IViewNode)
+		{
+			return displayViewsNodeChildren(parent);
+		}
+		else if (parent instanceof ITriggerNode)
+		{
+			return displayTriggerNodeChildren(parent);
+		}
+		else if (parent instanceof IIndexNode)
+		{
+			return displayIndexNodeChildren(parent);
+		}
+		else if (parent instanceof IConstraintNode)
+		{
+			return displayConstraintNodeChildren(parent);
+		}
+		else if (parent instanceof IColumnNode)
+		{
+			return displayColumnNodeChildren(parent);
+		}
+		else if (parent instanceof IDependencyNode)
+		{
+		    return displayDependencyNodeChildren(parent);
+		}
+		else if (parent instanceof IUserNode || parent instanceof IAuthorizationIDNode)
+		{
+			return displayUserNodeChildren(parent);
+		}
+		else if (parent instanceof IGroupNode)
+		{
+			return displayGroupNodeChildren(parent);
+		}
+		else if (parent instanceof IRoleNode)
+		{
+			return displayRoleNodeChildren(parent);
+		}
+		return EMPTY_ELEMENT_ARRAY;
+	}
+	
+	/**
+	 * Will query the children for this node solely when the user will expand the parent
+	 * @param parent - The node asked to be expanded
+	 * @return - The array of children contained under this node
+	 */
+	public Object[] getChildren (Object parent)
+	{
+	    if (parent instanceof EObject)
+	    {
+	        return getChildren((EObject)parent);
+	    }
+	    else if (parent instanceof IVirtualNode)
+	    {
+	        return getChildren((IVirtualNode)parent);
+	    }
+		return EMPTY_ELEMENT_ARRAY;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/content/layout/IServerExplorerLayoutProviderNav.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/content/layout/IServerExplorerLayoutProviderNav.java
new file mode 100644
index 0000000..d9ca46d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/content/layout/IServerExplorerLayoutProviderNav.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout;
+
+
+/**
+ * @author ljulien
+ */
+public interface IServerExplorerLayoutProviderNav
+{
+	public Object[] getChildren(Object parentElement);
+	public Object organizeChildren (Object parent);
+	public Object [] displayServerChildren (Object server);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/content/layout/IServerExplorerOnDemandContentProviderNav.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/content/layout/IServerExplorerOnDemandContentProviderNav.java
new file mode 100644
index 0000000..6a4d7d9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/content/layout/IServerExplorerOnDemandContentProviderNav.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout;
+
+
+/**
+ * @author ljulien
+ */
+public interface IServerExplorerOnDemandContentProviderNav
+{
+	/**
+	 * Will return the children available for this on demand provider
+	 * @param parent
+	 * @return
+	 */
+	public Object[] getChildren (Object parent);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/content/layout/hierar/ServerExplorerHierarContentProviderNav.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/content/layout/hierar/ServerExplorerHierarContentProviderNav.java
new file mode 100644
index 0000000..7d2db75
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/content/layout/hierar/ServerExplorerHierarContentProviderNav.java
@@ -0,0 +1,367 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout.hierar;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentService;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout.AbstractOnDemandContentProviderNav;
+import org.eclipse.datatools.modelbase.sql.schema.Catalog;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.ecore.EObject;
+
+
+/**
+ * @author ljulien
+ */
+public class ServerExplorerHierarContentProviderNav extends AbstractOnDemandContentProviderNav
+{
+    private static final ContainmentService containmentService = RDBCorePlugin.getDefault().getContainmentService();
+
+    /**
+     * Will display all the schemas available under this Node for this database
+     * @param schemaNode
+     * @return
+     */
+    protected Object[] displaySchemaNodeChildren(Object parent)
+    {
+        return EMPTY_ELEMENT_ARRAY;
+    }
+
+    /**
+     * Will display all the databases available under this node for this database
+     */
+    protected Object[] displayDatabaseNodeChildren(Object parent)
+    {
+        return EMPTY_ELEMENT_ARRAY;
+    }
+
+    /**
+     * Will display all the databases available under this node for this database
+     */
+    protected Object[] displayCatalogNodeChildren(Object parent)
+    {
+        return EMPTY_ELEMENT_ARRAY;
+    }
+
+    /**
+     * @return No Elements to display for this layout
+     */
+    protected Object[] displayDiagramNodeChildren(Object parent)
+    {
+        return EMPTY_ELEMENT_ARRAY;
+    }
+
+    /**
+     * Will display all the nodes available under each Servers
+     * @param parent - The server node
+     * @return The list of available nodes
+     */
+    protected Object[] displayServerChildren(Object parent)
+    {
+/*        ConnectionInfo info;
+        IServerNode server = (IServerNode) parent;
+        ServerExplorerConfiguration config = new ServerExplorerConfiguration();
+        if (connectionInfoMap.containsKey(server))
+        {
+            Database database = config.getRestoredDatabases((ConnectionInfo) connectionInfoMap.get(server));
+            return getViewerArrays(parent, Arrays.asList(new Database [] {database}));
+        }
+        else if ((info = config.restoreConnectionInfo(server)) != null)
+        {
+            server.setConnected(true);
+            connectionInfoMap.put(server, info);
+            Database database = config.getRestoredDatabases(info);
+            server.setSharedDatabase(database);
+            fillServerInformation(server, info, database);
+            return getViewerArrays(parent, Arrays.asList(new Database [] {database}));
+        }
+        else
+        {
+            return EMPTY_ELEMENT_ARRAY;
+        }
+*/
+        return EMPTY_ELEMENT_ARRAY;
+    }
+
+    /**
+     * Will display all the Nodes available under each schemas
+     * @return
+     */
+    protected Object[] displaySchemaChildren(Object parent)
+    {
+        Schema schema = (Schema) parent;
+        List collection = new LinkedList();
+        collection.addAll(schema.getTables());
+        collection.addAll(schema.getSequences());
+        collection.addAll(schema.getUserDefinedTypes());
+        collection.addAll(schema.getRoutines());
+        collection.addAll(schema.getDependencies());
+        return getArrays(parent, collection);
+    }
+
+    /**
+     * Will display all the Tables available under each Table Node
+     * @param parent
+     * @return
+     */
+    protected Object[] displayTableNodeChildren(Object parent)
+    {
+        return EMPTY_ELEMENT_ARRAY;
+    }
+
+    /**
+     * Will display all the Sequences available under each Sequence Node
+     * @param parent
+     * @return
+     */
+    protected Object[] displaySequenceNodeChildren(Object parent)
+    {
+        return EMPTY_ELEMENT_ARRAY;
+    }
+
+    /**
+     * Will display all the UDT available under each UDT Node
+     * @param parent
+     * @return
+     */
+    protected Object[] displayUDTNodeChildren(Object parent)
+    {
+        return EMPTY_ELEMENT_ARRAY;
+    }
+
+    /**
+     * Will display the nodes availables under each View
+     */
+    protected Object[] displayViewChildren(Object parent)
+    {
+        List collection = new LinkedList();
+        Table table = (Table) parent;
+        collection.addAll(table.getColumns());
+        collection.addAll(table.getTriggers());
+        collection.addAll(table.getDependencies());
+        return getArrays(parent, collection);
+    }
+
+    /**
+     * Will display all the Triggers available under each Table
+     */
+    protected Object[] displayTriggerNodeChildren(Object parent)
+    {
+        return EMPTY_ELEMENT_ARRAY;
+    }
+
+    /**
+     * Will display all the Indexes available under each Table
+     */
+    protected Object[] displayIndexNodeChildren(Object parent)
+    {
+        return EMPTY_ELEMENT_ARRAY;
+    }
+
+    /**
+     * Will display all the Constraints available under each Table
+     */
+    protected Object[] displayConstraintNodeChildren(Object parent)
+    {
+        return EMPTY_ELEMENT_ARRAY;
+    }
+
+    /**
+     * Will display all the Columns available under each Table
+     */
+    protected Object[] displayColumnNodeChildren(Object parent)
+    {
+        return EMPTY_ELEMENT_ARRAY;
+    }
+
+    /**
+     * Will display all the Views available under each View Node
+     * @param parent
+     * @return
+     */
+    protected Object[] displayViewsNodeChildren(Object parent)
+    {
+        return EMPTY_ELEMENT_ARRAY;
+    }
+
+    /**
+     * Will display all the Nodes availables under each Table
+     * @param parent
+     * @return
+     */
+    protected Object[] displayTableChildren(Object parent)
+    {
+        List collection = new LinkedList();
+        Table table = (Table) parent;
+        collection.addAll(table.getColumns());
+        collection.addAll(table.getTriggers());
+        collection.addAll(((BaseTable) table).getConstraints());
+        collection.addAll(((BaseTable) table).getIndex());
+        collection.addAll(((BaseTable) table).getDependencies());
+        return getArrays(parent, collection);
+    }
+
+    /**
+     * Will display the nodes availables under each Database Node
+     * @param parent - The database Node
+     * @return
+     */
+    protected Object[] displayDatabaseChildren(Object parent)
+    {
+        Database database = (Database) parent;
+        List catalogs = new ArrayList(database.getCatalogs());
+        if (catalogs.size() == 0) {
+        	// probably a legacy loader which doesn't support catalogs
+        	return getArrays(database,database.getSchemas());
+        }
+        for (Iterator it = catalogs.iterator(); it.hasNext();) {
+        	Catalog catalog = (Catalog)it.next();
+        	if (catalog.getName().length() == 0) {
+        		// handle special case for schema without a catalog
+        		it.remove();
+        		catalogs.addAll(catalog.getSchemas());
+        		break;
+        	}
+        }
+        return getArrays(parent, catalogs);
+    }
+
+    /**
+     * Will display the nodes availables under each Database Node
+     * @param parent - The catalog Node
+     * @return
+     */
+    protected Object[] displayCatalogChildren(Object parent)
+    {
+        Catalog catalog = (Catalog) parent;
+        return getArrays(parent, catalog.getSchemas());
+    }
+
+    /**
+     * Will return the New list of Children for this node in a relayout use-case
+     * @param parent
+     * @return
+     */
+    public Object[] getNewChildren(Object parent)
+    {
+        return null;
+    }
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout.AbstractOnDemandContentProviderNav#displayDependencyNodeChildren(java.lang.Object)
+     */
+    protected Object[] displayDependencyNodeChildren(Object parent)
+    {
+        return EMPTY_ELEMENT_ARRAY;
+    }
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout.AbstractOnDemandContentProviderNav#displayStoredProcedureChildren(java.lang.Object)
+     */
+    protected Object[] displayStoredProcedureChildren(Object parent)
+    {
+        SQLObject object = (SQLObject) parent;
+        return getArrays(parent, object.getDependencies ());
+    }
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout.AbstractOnDemandContentProviderNav#displayTriggerChildren(java.lang.Object)
+     */
+    protected Object[] displayTriggerChildren(Object parent)
+    {
+        SQLObject object = (SQLObject) parent;
+        return getArrays(parent, object.getDependencies ());
+    }
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout.AbstractOnDemandContentProviderNav#displayUDFChildren(java.lang.Object)
+     */
+    protected Object[] displayUDFChildren(Object parent)
+    {
+        SQLObject object = (SQLObject) parent;
+        return getArrays(parent, object.getDependencies ());
+    }
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout.AbstractOnDemandContentProviderNav#displayColumnChildren(java.lang.Object)
+     */
+    protected Object[] displayColumnChildren(Object parent)
+    {
+        SQLObject object = (SQLObject) parent;
+        return getArrays(parent, object.getDependencies ());
+    }
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout.AbstractOnDemandContentProviderNav#displayIndexChildren(java.lang.Object)
+     */
+    protected Object[] displayIndexChildren(Object parent)
+    {
+        SQLObject object = (SQLObject) parent;
+        return getArrays(parent, object.getDependencies ());
+    }
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout.AbstractOnDemandContentProviderNav#displayConstraintChildren(java.lang.Object)
+     */
+    protected Object[] displayConstraintChildren(Object parent)
+    {
+        SQLObject object = (SQLObject) parent;
+        return getArrays(parent, object.getDependencies ());
+    }
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout.IServerExplorerOnDemandContentProviderNav#getParent(java.lang.Object)
+     */
+    public Object getParent(Object child)
+    {
+        return child instanceof EObject ? containmentService.getContainer((EObject)child) : null;
+    }
+
+    /**
+     * 
+     */
+    protected Object[] displayUDFNodeChildren(Object parent)
+    {
+        return EMPTY_ELEMENT_ARRAY;   
+    }
+
+    /**
+     * 
+     */
+    protected Object[] displayStoredProcedureNodeChildren(Object parent)
+    {
+        return EMPTY_ELEMENT_ARRAY;    
+    }
+    
+	protected Object[] displayGroupNodeChildren(Object parent)
+	{
+		return EMPTY_ELEMENT_ARRAY;	
+	}
+
+	protected Object[] displayRoleNodeChildren(Object parent)
+	{
+		return EMPTY_ELEMENT_ARRAY;	
+	}
+
+	protected Object[] displayUserNodeChildren(Object parent)
+	{
+		return EMPTY_ELEMENT_ARRAY;	
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/content/layout/hierar/ServerExplorerHierarchicalLayoutNav.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/content/layout/hierar/ServerExplorerHierarchicalLayoutNav.java
new file mode 100644
index 0000000..6b63d22
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/content/layout/hierar/ServerExplorerHierarchicalLayoutNav.java
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout.hierar;
+
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.impl.ServerExplorerContentProviderNav;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout.AbstractLayoutProviderNav;
+
+
+/**
+ * @author ljulien
+ */
+public class ServerExplorerHierarchicalLayoutNav extends AbstractLayoutProviderNav
+{
+	public ServerExplorerHierarchicalLayoutNav (ServerExplorerContentProviderNav contentProvider)
+	{
+		super (contentProvider);
+		this.onDemandContentProvider = new ServerExplorerHierarContentProviderNav ();
+	}
+	
+	/**
+	 * Will reorganize the Children
+	 * @param childs
+	 * @param collection
+	 */
+	private void organizeChildren (Object oldParent, Object newParent)
+	{
+/*		if (oldParent != null && !oldParent.isDisposed() && oldParent.hasChildren())
+		{
+			IViewerElement [] oldChilds = oldParent.getChildren();
+
+			if (oldParent instanceof IKnownServerNodeViewer)
+			{
+				IViewerElement [] newChilds = this.onDemandContentProvider.getChildren(oldParent);
+				addChilds (newParent, newChilds);
+				for (int j = 0, m = newChilds.length; j < m; j++)
+				{
+					organizeChildren (findElement (oldChilds, newChilds[j], 1), newChilds[j]);
+				}
+			}
+			else if (oldParent.getElement() instanceof IVirtualNode)
+			{
+				for (int i = 0, n = oldChilds.length; i < n; i++)
+				{
+					newParent.addChild(oldChilds[i]);
+					if (oldChilds[i].hasChildren())
+					{
+						IViewerElement [] subChilds = oldChilds[i].getChildren();
+						for (int j = 0, m = subChilds.length; j < m; j++)
+						{
+							
+							organizeChildren(subChilds[j], oldChilds[i]);
+						}
+					}
+				}
+			}
+		}
+*/	}
+	
+	/**
+	 * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.internal.ui.explorer.providers.content.layout.IServerExplorerLayoutProvider#organizeChildren(com.ibm.xtools.common.core.internal.services.explorer.IViewerElement)
+	 */
+	public Object organizeChildren(Object oldParent)
+	{
+/*		IBaseViewerElement newParent = (IBaseViewerElement)viewerFactory.makeViewerElement(oldParent.getElement());
+		newParent.setInitialized(contentProvider, true);
+		organizeChildren (oldParent, newParent);
+*/		return null;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/content/layout/vnode/ServerExplorerVNodeContentProviderNav.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/content/layout/vnode/ServerExplorerVNodeContentProviderNav.java
new file mode 100644
index 0000000..e8a51b9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/content/layout/vnode/ServerExplorerVNodeContentProviderNav.java
@@ -0,0 +1,501 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout.vnode;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinitionRegistry;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout.AbstractOnDemandContentProviderNav;
+import org.eclipse.datatools.modelbase.sql.schema.Catalog;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+
+/**
+ * @author ljulien
+ */
+public class ServerExplorerVNodeContentProviderNav extends AbstractOnDemandContentProviderNav
+{
+    private static DatabaseDefinitionRegistry registry = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry();
+    
+	private static final String TABLE = resourceLoader.queryString("DATATOOLS.SERVER.UI.EXPLORER.TABLE"); //$NON-NLS-1$
+	private static final String ROUTINE = resourceLoader.queryString("DATATOOLS.SERVER.UI.EXPLORER.ROUTINE"); //$NON-NLS-1$
+	private static final String SEQUENCE = resourceLoader.queryString("DATATOOLS.SERVER.UI.EXPLORER.SEQUENCE"); //$NON-NLS-1$
+	private static final String UDT = resourceLoader.queryString("DATATOOLS.SERVER.UI.EXPLORER.UDT"); //$NON-NLS-1$
+	private static final String VIEW = resourceLoader.queryString("DATATOOLS.SERVER.UI.EXPLORER.VIEW"); //$NON-NLS-1$
+	private static final String TRIGGER = resourceLoader.queryString("DATATOOLS.SERVER.UI.EXPLORER.TRIGGER"); //$NON-NLS-1$
+	private static final String INDEX = resourceLoader.queryString("DATATOOLS.SERVER.UI.EXPLORER.INDEX"); //$NON-NLS-1$
+	private static final String CONSTRAINT = resourceLoader.queryString("DATATOOLS.SERVER.UI.EXPLORER.CONSTRAINT"); //$NON-NLS-1$
+	private static final String COLUMN = resourceLoader.queryString("DATATOOLS.SERVER.UI.EXPLORER.COLUMN"); //$NON-NLS-1$
+	private static final String DATABASE = resourceLoader.queryString("DATATOOLS.SERVER.UI.EXPLORER.DATABASE"); //$NON-NLS-1$
+	private static final String SCHEMA = resourceLoader.queryString("DATATOOLS.SERVER.UI.EXPLORER.SCHEMA"); //$NON-NLS-1$
+	private static final String DEPENDENCY = resourceLoader.queryString("DATATOOLS.SERVER.UI.EXPLORER.DEPENDENCY"); //$NON-NLS-1$
+	private static final String STORED_PROCEDURE = resourceLoader.queryString("DATATOOLS.SERVER.UI.EXPLORER.STORED_PROCEDURE");  //$NON-NLS-1$
+	private static final String UDF = resourceLoader.queryString("DATATOOLS.SERVER.UI.EXPLORER.UDF"); //$NON-NLS-1$
+	private static final String CATALOG = resourceLoader.queryString("DATATOOLS.SERVER.UI.EXPLORER.CATALOG"); //$NON-NLS-1$
+	private static final String AUTHORIZATION_ID = resourceLoader.queryString("DATATOOLS.SERVER.UI.EXPLORER.AUTH_ID"); //$NON-NLS-1$
+	private static final String ROLE = resourceLoader.queryString("DATATOOLS.SERVER.UI.EXPLORER.ROLE"); //$NON-NLS-1$
+	private static final String USER = resourceLoader.queryString("DATATOOLS.SERVER.UI.EXPLORER.USER"); //$NON-NLS-1$
+	private static final String GROUP = resourceLoader.queryString("DATATOOLS.SERVER.UI.EXPLORER.GROUP"); //$NON-NLS-1$
+	
+	private DatabaseDefinition  getDatabaseDefinition (Object parent)
+	{
+		if (parent instanceof Database)
+		{
+			return registry.getDefinition((Database)parent);
+		}
+		else if (parent instanceof ICatalogObject)
+	    {
+	        return registry.getDefinition(((ICatalogObject)parent).getCatalogDatabase());
+	    }
+	    else if (parent instanceof Schema)
+	    {
+	    	Schema schema = (Schema)parent;
+	    	Catalog catalog = schema.getCatalog();
+	    	Database database;
+	    	if (catalog == null) {
+	    		database = schema.getDatabase();
+	    	}
+	    	else {
+	    		database = catalog.getDatabase();
+	    	}
+	        return registry.getDefinition(database);
+	    }
+	    else if (parent instanceof Table)
+	    {
+	        return getDatabaseDefinition(((Table)parent).getSchema());
+	    }
+	    return null;
+	}
+	
+	private Collection getChildren (String groupID, List children)
+	{
+	    List list = new ArrayList (children.size());
+	    for (Iterator iterator = children.iterator(); iterator.hasNext();)
+	    {
+	        EObject child = (EObject) iterator.next();
+	        if (groupID.equals(containmentService.getGroupId(child)))
+	        {
+	            list.add(child);
+	        }
+	    }
+	    return list;
+	}
+	
+	protected Object[] displayCatalogNodeChildren(Object parent) {
+		Database database = (Database) ((IVirtualNode)parent).getParent();
+		return getArrays(parent, getChildren(((IVirtualNode)parent).getGroupID(), database.getCatalogs()));
+	}
+
+	protected Object[] displayCatalogChildren(Object parent) {
+		List collection = new ArrayList (1);
+		collection.add(nodeFactory.makeSchemaNode(SCHEMA, SCHEMA, parent));
+		return getArrays (parent, collection);
+	}
+
+	/**
+	 * Will display all the schemas available under this Node for this database
+	 * @param schemaNode
+	 * @return
+	 */
+	protected Object[] displaySchemaNodeChildren (Object parent)
+	{
+		Object modelParent = ((IVirtualNode)parent).getParent();
+		if (modelParent instanceof Catalog) {
+			return getArrays(parent, getChildren(((IVirtualNode)parent).getGroupID(), ((Catalog)modelParent).getSchemas()));
+		}
+		else {
+			return getArrays(parent, getChildren(((IVirtualNode)parent).getGroupID(), ((Database)modelParent).getSchemas()));
+		}
+	}
+
+	/**
+	 * Will display all the Nodes available under each schemas
+	 * @return
+	 */
+	protected Object[] displaySchemaChildren (Object parent)
+	{
+	    DatabaseDefinition df = getDatabaseDefinition (parent);
+	    
+		List collection = new ArrayList (7);
+		collection.add(nodeFactory.makeTableNode(TABLE, TABLE, parent));
+		collection.add(nodeFactory.makeViewNode(VIEW, VIEW, parent));
+		if (df.supportsStoredProcedures())
+		{
+			collection.add(nodeFactory.makeStoredProcedureNode(STORED_PROCEDURE, STORED_PROCEDURE, parent));
+		}
+		collection.add(nodeFactory.makeUDFNode(UDF, UDF, parent));
+		if (df.supportsSequence())
+		{
+		    collection.add(nodeFactory.makeSequenceNode(SEQUENCE, SEQUENCE, parent));
+		}
+		if (df.supportsUserDefinedType())
+		{
+		    collection.add(nodeFactory.makeUDTNode(UDT, UDT, parent));
+		}
+		collection.add(nodeFactory.makeDependencyNode(DEPENDENCY, DEPENDENCY, parent));
+		return getArrays (parent, collection);
+	}
+	
+	/**
+	 * Will display all the nodes available under each Servers
+	 * @param parent - The server node
+	 * @return The list of available nodes
+	 */
+	protected Object[] displayServerChildren (Object parent)
+	{
+		return EMPTY_ELEMENT_ARRAY;
+	}
+
+	/**
+	 * Will display all the databases available under this node for this database
+	 */
+	protected Object[] displayDatabaseNodeChildren (Object parent)
+	{
+	    return EMPTY_ELEMENT_ARRAY;
+	}
+	
+	/**
+	 * Will display all the Tables available under each Table Node
+	 * @param parent
+	 * @return
+	 */
+	protected Object[] displayTableNodeChildren (Object parent)
+	{
+		EStructuralFeature feature = SQLSchemaPackage.eINSTANCE.getSchema_Tables();
+		return getSchemaChildren(parent, feature);
+	}
+	
+	protected Object[] displayUDFNodeChildren(Object parent)
+    {
+		EStructuralFeature feature = SQLSchemaPackage.eINSTANCE.getSchema_Routines();
+		return getSchemaChildren(parent, feature);
+    }
+
+    /**
+     * 
+     */
+    protected Object[] displayStoredProcedureNodeChildren(Object parent)
+    {
+    	EStructuralFeature feature = SQLSchemaPackage.eINSTANCE.getSchema_Routines();
+		return getSchemaChildren(parent, feature);
+    }
+	
+	/**
+	 * Will display all the Sequences available under each Sequence Node
+	 * @param parent
+	 * @return
+	 */
+	protected Object [] displaySequenceNodeChildren (Object parent)
+	{
+		EStructuralFeature feature = SQLSchemaPackage.eINSTANCE.getSchema_Sequences();
+		return getSchemaChildren(parent, feature);
+	}
+
+	/**
+	 * Will display all the UDT available under each UDT Node
+	 * @param parent
+	 * @return
+	 */
+	protected Object [] displayUDTNodeChildren (Object parent)
+	{
+		EStructuralFeature feature = SQLSchemaPackage.eINSTANCE.getSchema_UserDefinedTypes();
+		return getSchemaChildren(parent, feature);
+	}
+	
+	/**
+	 * Will display all the Views available under each View Node
+	 * @param parent
+	 * @return
+	 */
+	protected Object [] displayViewsNodeChildren (Object parent)
+	{
+		EStructuralFeature feature = SQLSchemaPackage.eINSTANCE.getSchema_Tables();
+		return getSchemaChildren(parent, feature);
+	}
+	
+	/**
+	 * Return all children of feature specified type under each virtual node 
+	 * @param parent
+	 * @param feature
+	 * @return
+	 */
+	protected Object[] getSchemaChildren(Object parent, EStructuralFeature feature)
+	{
+		Object ancestor = ((IVirtualNode)parent).getParent();
+		if(ancestor instanceof Schema)
+		{
+			Schema schema = (Schema) ancestor;
+			return getArrays (parent, getChildren(((IVirtualNode)parent).getGroupID(), (List)schema.eGet(feature)));
+		}
+		else if(ancestor instanceof Database)
+		{
+			List schemas = ((Database)ancestor).getSchemas();
+			return getSchemasChildren(parent, schemas, feature);
+		}
+		else if(ancestor instanceof Catalog)
+		{
+			List schemas = ((Catalog)ancestor).getSchemas();
+			return getSchemasChildren(parent, schemas, feature);
+		}
+		else
+		{
+			return EMPTY_ELEMENT_ARRAY;
+		}
+	}
+	
+	private Object[] getSchemasChildren(Object parent, List schemas, EStructuralFeature feature)
+	{
+		List result = new ArrayList();
+		for (Iterator iterator = schemas.iterator(); iterator.hasNext();) 
+		{
+			Schema schema = (Schema) iterator.next();
+			List objs = (List)schema.eGet(feature);
+			result.addAll(objs);
+		}
+		return getArrays (parent, getChildren(((IVirtualNode)parent).getGroupID(), result));
+	}
+	
+	/**
+	 * Will display all the Triggers available under each Table
+	 */
+	protected Object [] displayTriggerNodeChildren (Object parent)
+	{
+		Table table = (Table) ((IVirtualNode)parent).getParent();
+		return getArrays (parent, getChildren(((IVirtualNode)parent).getGroupID(), table.getTriggers()));
+	}
+
+	/**
+	 * Will display all the Indexes available under each Table
+	 */
+	protected Object [] displayIndexNodeChildren (Object parent)
+	{
+		BaseTable table = (BaseTable) ((IVirtualNode)parent).getParent();
+		return getArrays (parent, getChildren(((IVirtualNode)parent).getGroupID(), table.getIndex()));
+	}
+
+	/**
+	 * Will display all the Constraints available under each Table
+	 */
+	protected Object [] displayConstraintNodeChildren (Object parent)
+	{
+		BaseTable table = (BaseTable) ((IVirtualNode)parent).getParent();
+		return getArrays (parent, getChildren(((IVirtualNode)parent).getGroupID(), table.getConstraints()));
+	}
+
+	/**
+	 * Will display all the Columns available under each Table
+	 */
+	protected Object [] displayColumnNodeChildren (Object parent)
+	{
+		Table table = (Table) ((IVirtualNode)parent).getParent();
+		return getArrays (parent, getChildren(((IVirtualNode)parent).getGroupID(), table.getColumns()));
+	}
+
+	/**
+	 * Will display all the Nodes availables under each Table
+	 * @param parent
+	 * @return
+	 */
+	protected Object[] displayTableChildren (Object parent)
+	{
+	    DatabaseDefinition df = getDatabaseDefinition (parent);
+	    
+		List collection = new ArrayList (5);
+		collection.add(nodeFactory.makeColumnNode(COLUMN, COLUMN, parent));
+		
+		if (df.supportsTriggers())
+		{
+		    collection.add(nodeFactory.makeTriggerNode(TRIGGER, TRIGGER, parent));
+		}
+		
+		collection.add(nodeFactory.makeIndexNode(INDEX, INDEX, parent));
+		collection.add(nodeFactory.makeConstraintNode(CONSTRAINT, CONSTRAINT, parent));
+		collection.add(nodeFactory.makeDependencyNode(DEPENDENCY, DEPENDENCY, parent));
+		return getArrays (parent, collection);
+	}
+	
+	/**
+	 * Will display the nodes availables under each View
+	 */
+	protected Object [] displayViewChildren (Object parent)
+	{
+	    DatabaseDefinition df = getDatabaseDefinition (parent);
+	    
+		List collection = new ArrayList (3);
+		collection.add(nodeFactory.makeColumnNode(COLUMN, COLUMN, parent));
+		
+		if (df.supportsViewTriggers())
+		{
+		    collection.add(nodeFactory.makeTriggerNode(TRIGGER, TRIGGER, parent));
+		}
+		
+		collection.add(nodeFactory.makeDependencyNode(DEPENDENCY, DEPENDENCY, parent));
+		return getArrays (parent, collection);
+	}
+	
+	/**
+	 * Will display the nodes availables under each Database Node
+	 * @param parent - The database Node
+	 * @return
+	 */
+	protected Object[] displayDatabaseChildren(Object parent) {
+		DatabaseDefinition df = getDatabaseDefinition (parent);
+		List collection = new ArrayList(2);
+		List catalogs = ((Database) parent).getCatalogs();
+		if (catalogs.size() == 0) {
+			// probably a legacy loader which doesn't support catalogs
+			collection.add(nodeFactory.makeSchemaNode(SCHEMA, SCHEMA, parent));
+		}
+		else {
+			for (Iterator it = catalogs.iterator(); it.hasNext();) {
+				Catalog catalog = (Catalog) it.next();
+				if (catalog.getName().length() == 0) {
+					// Handle special case where catalog name == "". This
+					// catalog
+					// contains schema not belonging to any specific catalog.
+					collection.add(nodeFactory.makeSchemaNode(SCHEMA, SCHEMA,
+							catalog));
+					break;
+				}
+			}
+		}
+
+		if (collection.size() == 0 || catalogs.size() > 1) {
+			// if this db doesn't support catalogs, we can skip this
+			collection.add(nodeFactory
+					.makeCatalogNode(CATALOG, CATALOG, parent));
+		}
+		
+		if (df.isAuthorizationIdentifierSupported())
+		{
+			boolean isAuthorizationSupported = ! (df.isUserSupported() || df.isGroupSupported() || df.isRoleSupported());
+			if (isAuthorizationSupported)
+			{
+				collection.add(nodeFactory.makeAuthorizationIdNode(AUTHORIZATION_ID, AUTHORIZATION_ID, parent));
+			}
+			if (df.isUserSupported())
+			{
+				collection.add(nodeFactory.makeUserNode(USER, USER, parent));
+			}
+			if (df.isRoleSupported())
+			{
+				collection.add(nodeFactory.makeRoleNode(ROLE, ROLE, parent));
+			}
+			if (df.isGroupSupported())
+			{
+				collection.add(nodeFactory.makeGroupNode(GROUP, GROUP, parent));
+			}
+		}
+		
+		return getArrays(parent, collection);
+	}
+
+    /**
+	 * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout.AbstractOnDemandContentProviderNav#displayDependencyNodeChildren(java.lang.Object)
+	 */
+    protected Object[] displayDependencyNodeChildren(Object parent)
+    {
+		SQLObject object = (SQLObject) ((IVirtualNode)parent).getParent();
+		return getArrays (parent, getChildren(((IVirtualNode)parent).getGroupID(), object.getDependencies()));
+    }
+
+	protected Object[] displayGroupNodeChildren(Object parent)
+	{
+		Database object = (Database) ((IVirtualNode)parent).getParent();
+		return getArrays (parent, getChildren(((IVirtualNode)parent).getGroupID(), object.getAuthorizationIds()));
+	}
+
+	protected Object[] displayRoleNodeChildren(Object parent)
+	{
+		Database object = (Database) ((IVirtualNode)parent).getParent();
+		return getArrays (parent, getChildren(((IVirtualNode)parent).getGroupID(), object.getAuthorizationIds()));
+	}
+
+	protected Object[] displayUserNodeChildren(Object parent)
+	{
+		Database object = (Database) ((IVirtualNode)parent).getParent();
+		return getArrays (parent, getChildren(((IVirtualNode)parent).getGroupID(), object.getAuthorizationIds()));
+	}
+	
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout.AbstractOnDemandContentProviderNav#displayStoredProcedureChildren(java.lang.Object)
+     */
+    protected Object[] displayStoredProcedureChildren(Object parent)
+    {
+		List collection = new ArrayList (1);
+		collection.add(nodeFactory.makeDependencyNode(DEPENDENCY, DEPENDENCY, parent));
+		return getArrays (parent, collection);
+    }
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout.AbstractOnDemandContentProviderNav#displayTriggerChildren(java.lang.Object)
+     */
+    protected Object[] displayTriggerChildren(Object parent)
+    {
+		List collection = new ArrayList (1);
+		collection.add(nodeFactory.makeDependencyNode(DEPENDENCY, DEPENDENCY, parent));
+		return getArrays (parent, collection);
+    }
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout.AbstractOnDemandContentProviderNav#displayUDFChildren(java.lang.Object)
+     */
+    protected Object[] displayUDFChildren(Object parent)
+    {
+		List collection = new ArrayList (1);
+		collection.add(nodeFactory.makeDependencyNode(DEPENDENCY, DEPENDENCY, parent));
+		return getArrays (parent, collection);
+    }
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout.AbstractOnDemandContentProviderNav#displayColumnChildren(java.lang.Object)
+     */
+    protected Object[] displayColumnChildren(Object parent)
+    {
+		List collection = new ArrayList (1);
+		collection.add(nodeFactory.makeDependencyNode(DEPENDENCY, DEPENDENCY, parent));
+		return getArrays (parent, collection);
+    }
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout.AbstractOnDemandContentProviderNav#displayIndexChildren(java.lang.Object)
+     */
+    protected Object[] displayIndexChildren(Object parent)
+    {
+		List collection = new ArrayList (1);
+		collection.add(nodeFactory.makeDependencyNode(DEPENDENCY, DEPENDENCY, parent));
+		return getArrays (parent, collection);
+    }
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout.AbstractOnDemandContentProviderNav#displayConstraintChildren(java.lang.Object)
+     */
+    protected Object[] displayConstraintChildren(Object parent)
+    {
+		List collection = new ArrayList (1);
+		collection.add(nodeFactory.makeDependencyNode(DEPENDENCY, DEPENDENCY, parent));
+		return getArrays (parent, collection);
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/content/layout/vnode/ServerExplorerVirtualNodeLayoutNav.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/content/layout/vnode/ServerExplorerVirtualNodeLayoutNav.java
new file mode 100644
index 0000000..cfa0052
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/content/layout/vnode/ServerExplorerVirtualNodeLayoutNav.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout.vnode;
+
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.impl.ServerExplorerContentProviderNav;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout.AbstractLayoutProviderNav;
+
+
+/**
+ * @author ljulien
+ */
+public class ServerExplorerVirtualNodeLayoutNav extends AbstractLayoutProviderNav
+{
+	public ServerExplorerVirtualNodeLayoutNav (ServerExplorerContentProviderNav contentProvider)
+	{
+		super (contentProvider);
+		this.onDemandContentProvider = new ServerExplorerVNodeContentProviderNav ();
+	}
+	
+	/**
+	 * Will reorganize the Children
+	 * @param childs
+	 * @param collection
+	 */
+	private void organizeChildren (Object oldParent, Object newParent)
+	{
+/*		if (oldParent != null && oldParent.hasChildren())
+		{
+			Object [] oldChilds = oldParent.getChildren();
+			
+			Object [] childs;
+			if (newParent instanceof IKnownServerNodeViewer)
+			{
+				childs = this.onDemandContentProvider.getChildren(oldParent);
+			}
+			else
+			{
+				childs = this.onDemandContentProvider.getChildren(newParent);
+			}
+			addChilds (newParent, childs);
+			if (childs.length != 0 && childs[0].getElement() instanceof IVirtualNode && !(oldChilds[0].getElement() instanceof IVirtualNode))
+			{
+				for (int i = 0, n = childs.length; i < n; i++)
+				{
+					Object [] subChilds = this.onDemandContentProvider.getChildren(childs[i]);
+					addChilds(childs[i], subChilds);
+					for (int j = 0, m = subChilds.length; j < m; j++)
+					{
+						organizeChildren (findElement (oldChilds, subChilds[j], 1), subChilds[j]);
+					}
+				}
+			}
+			else 
+			{
+				for (int i = 0, n = childs.length; i < n; i++)
+				{
+					organizeChildren (findElement (oldChilds, childs[i], 1), childs[i]);
+				}
+			}
+		}
+*/	}
+	
+	/**
+	 * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.internal.ui.explorer.providers.content.layout.IServerExplorerLayoutProvider#organizeChildren(com.ibm.xtools.common.core.internal.services.explorer.IViewerElement)
+	 */
+	public Object organizeChildren (Object oldParent)
+	{
+/*		IBaseViewerElement newParent = (IBaseViewerElement)viewerFactory.makeViewerElement(oldParent.getElement());
+		organizeChildren (oldParent, newParent);
+		return newParent;
+*/
+	    return null;
+	    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/decorators/FilterNodeDecoration.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/decorators/FilterNodeDecoration.java
new file mode 100644
index 0000000..5d93b9c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/decorators/FilterNodeDecoration.java
@@ -0,0 +1,61 @@
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.decorators;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter.FilterUtil;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.filter.IFilterNode;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.icons.ImageDescription;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.services.IFilterNodeDecorationService;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.jface.viewers.IDecoration;
+import org.eclipse.jface.viewers.ILightweightLabelDecorator;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.LabelProviderChangedEvent;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author ljulien
+ */
+public class FilterNodeDecoration extends LabelProvider implements ILightweightLabelDecorator, IFilterNodeDecorationService
+{
+    private static final String FILTERED = " " + ResourceLoader.INSTANCE.queryString("DATATOOLS.SERVER.UI.EXPLORER.FILTER_DECORATION");  //$NON-NLS-1$//$NON-NLS-2$
+    
+    private boolean hasFiltering (IFilterNode filterNode)
+    {
+        return FilterUtil.hasFilter(filterNode);
+    }
+    
+    /**
+     * @see org.eclipse.jface.viewers.ILightweightLabelDecorator#decorate(java.lang.Object, org.eclipse.jface.viewers.IDecoration)
+     */
+    public void decorate(Object element, IDecoration decoration)
+    {
+        IFilterNode filterNode = (IFilterNode) element;
+        if (hasFiltering(filterNode))
+        {
+            decoration.addOverlay(ImageDescription.getFilterDecorationDescriptor(), IDecoration.BOTTOM_RIGHT);
+            decoration.addSuffix(FILTERED);
+        }
+    }
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators.IDecorationService#refreshDecoration(org.eclipse.core.runtime.IAdaptable[])
+     */
+    public void refreshDecoration(Object[] elements)
+    {
+        fireLabelChangedEvent(new LabelProviderChangedEvent(this, elements));
+    }
+
+    /**
+     * Will notify the Model Explorer to redecorate
+     * @param event
+     */
+    protected void fireLabelChangedEvent(final LabelProviderChangedEvent event)
+    {
+        Display.getDefault().asyncExec(new Runnable()
+        {
+            public void run()
+            {
+                fireLabelProviderChanged(event);
+            }
+        });
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/label/ServerExplorerLabelProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/label/ServerExplorerLabelProvider.java
new file mode 100644
index 0000000..2009504
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/label/ServerExplorerLabelProvider.java
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.label;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+import org.eclipse.datatools.connectivity.sqm.core.ui.services.IDataToolsUIServiceManager;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.modelbase.sql.schema.Dependency;
+import org.eclipse.emf.ecore.ENamedElement;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.navigator.ICommonContentExtensionSite;
+import org.eclipse.ui.navigator.ICommonLabelProvider;
+import org.eclipse.ui.navigator.IExtensionStateModel;
+
+
+/**
+ * @author ljulien
+ */
+public class ServerExplorerLabelProvider extends LabelProvider implements ICommonLabelProvider
+{
+	private static final ResourceLoader resourceLoader = ResourceLoader.INSTANCE;
+	private static final IDataToolsUIServiceManager imageService = IDataToolsUIServiceManager.INSTANCE;
+	private static final String EXTERNAL_DEPENDENCY = resourceLoader.queryString("DATATOOLS.SERVER.UI.EXPLORER.EXTERNAL_DEPENDENCY"); //$NON-NLS-1$
+
+	/**
+     * @return the Image associated with this element
+     */
+    public Image getImage(Object element)
+    {
+        return imageService.getLabelService(element).getIcon();
+    }
+
+    /**
+     * @return the Text associated with this element
+     */
+    public String getText(Object element)
+    {
+		if (element instanceof IVirtualNode)
+		{
+			return ((IVirtualNode) element).getDisplayName();
+		}
+		else if (element instanceof Dependency)
+		{
+		    return EXTERNAL_DEPENDENCY;
+		}
+		else if (element instanceof ENamedElement)
+		{
+		    return ((ENamedElement)element).getName();
+		}
+		else 
+		{
+			return imageService.getLabelService(element).getName();
+		}
+    }
+
+	public void initialize(String aViewerId) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public String getDescription(Object selection) {
+        return IDataToolsUIServiceManager.INSTANCE.getLabelService(selection).getName();
+	}
+
+	public void init(IExtensionStateModel aStateModel, ITreeContentProvider aContentProvider) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void restoreState(IMemento aMemento) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void saveState(IMemento aMemento) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void init(ICommonContentExtensionSite aConfig) {
+		// TODO Auto-generated method stub
+		
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/icons/ImageDescription.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/icons/ImageDescription.java
new file mode 100644
index 0000000..e34d68a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/icons/ImageDescription.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.icons;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ImagePath;
+import org.eclipse.jface.resource.ImageDescriptor;
+
+
+/**
+ * @author ljulien
+ */
+public class ImageDescription
+{
+	private static ImageDescriptor getDescriptor (String urlPath)
+	{
+		try
+        {
+            return ImageDescriptor.createFromURL(new URL(ImagePath.CORE_UI_ICONS_FOLDER_URL + urlPath));
+        }
+        catch (MalformedURLException e)
+        {
+            e.printStackTrace();
+            return null;
+        }
+	}
+	public static ImageDescriptor getFilterDecorationDescriptor ()
+	{
+	    return getDescriptor (ImagePath.FILTER_DECORATION);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/l10n/datatoolsServerUI.properties b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/l10n/datatoolsServerUI.properties
new file mode 100644
index 0000000..3659835
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/l10n/datatoolsServerUI.properties
@@ -0,0 +1,147 @@
+###############################################################################
+# Copyright (c) 2001, 2004, 2008 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+##
+###
+##  !!! This property file should only contain resources that are "translatable" !!!
+###
+##
+
+#
+## Loading support
+#
+DATATOOLS.SERVER.UI.EXPLORER.LOADING = Loading {0} provider
+DATATOOLS.SERVER.UI.EXPLORER.REMOVING_PLACE_HOLDER=Removing place holder ...
+DATATOOLS.SERVER.UI.EXPLORER.DESCRIPTION = Core
+
+#
+## Actions
+#
+DATATOOLS.SERVER.UI.EXPLORER.CONNECT_SERVER = Add Server Connection
+DATATOOLS.SERVER.UI.EXPLORER.DISCONNECT_SERVER = Disconnect Server
+DATATOOLS.SERVER.UI.EXPLORER.LAYOUT_OPTIONS = layout
+DATATOOLS.SERVER.UI.EXPLORER.VIRTUAL_FOLDER = Virtual Folder
+DATATOOLS.SERVER.UI.EXPLORER.HIERARCHICAL = Hierarchical
+DATATOOLS.SERVER.UI.EXPLORER.COLLAPSE_ALL = Collapse All
+DATATOOLS.SERVER.UI.EXPLORER.REFRESH = Ref&resh
+DATATOOLS.SERVER.UI.EXPLORER.PROPERTIES = &Properties
+DATATOOLS.SERVER.UI.EXPLORER.PROPERTIES_DIALOG_TITLE = Filter Properties
+
+#
+## Filtering Decoration
+#
+DATATOOLS.SERVER.UI.EXPLORER.FILTER_DECORATION = [Filtered]
+DATATOOLS.SERVER.UI.EXPLORER.FILTER = Filter
+#
+## Developer Actions
+#
+DATATOOLS.SERVER.UI.DEVELOPER.ADD_TABLE = Add Table
+
+#
+## Delete Connection Warning
+#
+DATATOOLS.SERVER.UI.DELETE_CONNECTION_TITLE = Delete Connection
+DATATOOLS.SERVER.UI.DELETE_CONNECTION_MANY = The following Eclipse Projects: {0} are dependent on this connection.\n\nAre you sure you want to delete connection "{1}"?
+DATATOOLS.SERVER.UI.DELETE_CONNECTION_ONE = The following Eclipse Project: {0} is dependent on this connection.\n\nAre you sure you want to delete connection "{1}"?
+
+#
+## Add New Server Dialog
+#
+DATATOOLS.SERVER.UI.ADD_NEW_SERVER_TITLE = Add Server Connection
+DATATOOLS.SERVER.UI.DATABASE_TYPE = Database Type:
+DATATOOLS.SERVER.UI.DATABASE_VERSION = Database Version:
+DATATOOLS.SERVER.UI.SELECT_DATABASE = Select or Enter the Database Name:
+DATATOOLS.SERVER.UI.ADD_NEW_SERVER_ENTER_INFO=Enter Connection Information
+DATATOOLS.SERVER.UI.ADD_NEW_SERVER_CONNECTING=Connecting to Server...
+DATATOOLS.SERVER.UI.ADD_NEW_SERVER_FAILURE=Connection to server failed
+DATATOOLS.SERVER.UI.IDENTIFICATION_LABEL = Server Connection Identification
+DATATOOLS.SERVER.UI.PROVIDER_NOT_FOUND = No provider implemented yet
+DATATOOLS.SERVER.UI.EXPLORER.NULL_CONNECTION = Connection Not Established
+DATATOOLS.SERVER.UI.EXPLORER.CONNECTION_EXCEPTION = SQL Connection Exception with {0}
+DATATOOLS.SERVER.UI.USER_NAME_LABEL = User ID:
+DATATOOLS.SERVER.UI.PASSWORD_LABEL = Password:
+_UI_DIALOG_CONNECTION_TITLE  = New Connection
+
+#
+## Error Connection Dialog
+#
+DATATOOLS.SERVER.UI.CONNECTION.ERROR.TITLE = Invalid Connection Exception
+#Removed for bug 285485
+#DATATOOLS.SERVER.UI.CONNECTION.ERROR.MESSAGE = Connection failed
+DATATOOLS.SERVER.UI.CONNECTION.SQLEXCEPTION.TITLE = SQL Exception Notification
+DATATOOLS.SERVER.UI.CONNECTION.SQLEXCEPTION.RECONNECT = Reconnect
+DATATOOLS.SERVER.UI.CONNECTION.SQLEXCEPTION.DISCONNECT = Disconnect
+DATATOOLS.SERVER.UI.CONNECTION.SQLEXCEPTION.IGNORE = Ignore
+DATATOOLS.SERVER.UI.CONNECTION.SQLEXCEPTION.MESSAGE = Please perform one of the proposed actions:
+DATATOOLS.SERVER.UI.CONNECTION.SQLEXCEPTION.SQLMESSAGE = A SQL Exception was reported during this operation.
+ 
+#
+## Server Disconnect
+#
+DATATOOLS.SERVER.UI.DISCONNECT_SERVER_TITLE = Connection Selection
+DATATOOLS.SERVER.UI.DISCONNECT_SERVER_SELECTION = Select one Connection:
+DATATOOLS.SERVER.UI.DISCONNECT_CONNECTED_SERVERS = Available Connections
+
+#
+## Server Explorer Nodes
+#
+DATATOOLS.SERVER.UI.EXPLORER.KNOWN_SERVERS=Connections
+DATATOOLS.SERVER.UI.EXPLORER.DISC_SERVERS=Discovered Aliases
+DATATOOLS.SERVER.UI.EXPLORER.SCHEMA=Schemas
+DATATOOLS.SERVER.UI.EXPLORER.DATABASE=Databases
+DATATOOLS.SERVER.UI.EXPLORER.TABLE=Tables
+DATATOOLS.SERVER.UI.EXPLORER.ROUTINE=Routines
+DATATOOLS.SERVER.UI.EXPLORER.SEQUENCE=Sequences
+DATATOOLS.SERVER.UI.EXPLORER.UDT=User-Defined Types
+DATATOOLS.SERVER.UI.EXPLORER.VIEW= Views
+DATATOOLS.SERVER.UI.EXPLORER.TRIGGER= Triggers
+DATATOOLS.SERVER.UI.EXPLORER.INDEX=Indexes
+DATATOOLS.SERVER.UI.EXPLORER.CONSTRAINT=Constraints
+DATATOOLS.SERVER.UI.EXPLORER.COLUMN=Columns
+DATATOOLS.SERVER.UI.EXPLORER.PROXY=Proxy
+DATATOOLS.SERVER.UI.EXPLORER.DEPENDENCY= Dependencies
+DATATOOLS.SERVER.UI.EXPLORER.EXTERNAL_DEPENDENCY = External Dependency
+DATATOOLS.SERVER.UI.EXPLORER.DB2_CLOUDSCAPE = localhost [DB2 Cloudscape]
+DATATOOLS.SERVER.UI.EXPLORER.STORED_PROCEDURE=Stored Procedures
+DATATOOLS.SERVER.UI.EXPLORER.UDF=User-Defined Functions
+DATATOOLS.SERVER.UI.EXPLORER.CATALOG=Catalogs
+DATATOOLS.SERVER.UI.EXPLORER.AUTH_ID = Authorization IDs
+DATATOOLS.SERVER.UI.EXPLORER.USER = Users
+DATATOOLS.SERVER.UI.EXPLORER.GROUP = Groups
+DATATOOLS.SERVER.UI.EXPLORER.ROLE = Roles
+
+#
+## Update Offline Items
+#
+DATATOOLS.SERVER.UI.EXPLORER.UPDATE_OFFLINE = &Save Offline
+DATATOOLS.SERVER.UI.EXPLORER.WORKOFFLINE = &Work Offline
+DATATOOLS.SERVER.UI.EXPLORER.UPDATE_OFFLINE_JOB = Save Offline
+DATATOOLS.SERVER.UI.EXPLORER.WORKOFFLINE_JOB = Work Offline
+DATATOOLS.SERVER.UI.CONNECTION.OFFLINE.MESSAGE = Offline content has not been found in your workspace.\nRun "Save Offline" when you are connected.
+DATATOOLS.SERVER.UI.CONNECTION.OFFLINE.TITLE = Connection failed
+#Removed for bug 285485
+#DATATOOLS.SERVER.UI.CONNECTION.ERROR.MESSAGE = Connection has failed. The following error was reported:\n"{0}"\n\nDo you want to work offline?
+
+#
+## Bookmark
+#
+DATATOOLS.SERVER.UI.BOOKMARK.TITLE=Add Bookmark
+DATATOOLS.SERVER.UI.BOOKMARK.MESSAGE=Enter Bookmark Name:
+
+
+SQL_MODEL_CONTENT_EXTENSION_LABEL=SQL Model Content
+
+
+
+
+
+
+
+
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/layout/IServerExplorerLayoutExtensionProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/layout/IServerExplorerLayoutExtensionProvider.java
new file mode 100644
index 0000000..c9aa0f7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/layout/IServerExplorerLayoutExtensionProvider.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.layout;
+
+/**
+ * @author ljulien
+ */
+public interface IServerExplorerLayoutExtensionProvider
+{
+	public void enableLayout (Layout layout);
+
+	/**
+	 * Enumeration that will define the Layout implemented by the Server Explorer
+	 * @author ljulien
+	 */
+	public class Layout 
+	{
+		public static final Layout HIERARCHICAL = new Layout ();
+		public static final Layout VNODE = new Layout ();
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IDecorationService.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IDecorationService.java
new file mode 100644
index 0000000..fff6509
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IDecorationService.java
@@ -0,0 +1,9 @@
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.services;
+
+/**
+ * @author ljulien
+ */
+public interface IDecorationService
+{
+    public void refreshDecoration(Object[] elements); 
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IFilterNodeDecorationService.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IFilterNodeDecorationService.java
new file mode 100644
index 0000000..71a56f5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IFilterNodeDecorationService.java
@@ -0,0 +1,8 @@
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.services;
+
+/**
+ * @author ljulien
+ */
+public interface IFilterNodeDecorationService extends IDecorationService
+{
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IServerExplorerContentService.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IServerExplorerContentService.java
new file mode 100644
index 0000000..53a00c7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IServerExplorerContentService.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.services;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.viewers.ISelection;
+
+/**
+ * @author ljulien
+ */
+public interface IServerExplorerContentService
+{
+    /**
+     * Will expand the node in the Server Explorer 
+     * @param node - Node to expand
+     */
+    public void expandNode(EObject node);
+    
+    /**
+     * Will expand the node in the Server Explorer
+     * @param pathToNavigate - A string built to the requirements of the TransientEObjectUtil class
+     */
+    public void expandNode (String pathToNavigate);
+    
+    /**
+     * Will expand the node inside the Server Explorer to the depth provided
+     * @param node - node to expand from
+     * @param depth - Depth to expan to
+     */
+    public void expandNode (Object node, int depth);
+    
+    /**
+     * @return The Server Explorer Layout options 
+     */
+    public IServerExplorerLayoutService getServerExplorerLayoutService ();
+    
+    /**
+     * Will trigger a refresh of the all Server Explorer
+     */
+    public void refreshServerExplorer ();
+    
+    /**
+     * Will update the current selection inside the Server Explorer
+     * @param selection
+     */
+    public void updateSelection (ISelection selection);
+    
+    /**
+     * Will traverse the Server Explorer Tree and redraw the layout 
+     */
+    public void updateLayout ();
+    
+    /**
+     * Will refresh recursively all the child nodes of this node
+     */
+    public void refreshNode (Object node);
+   
+    /**
+     * Will select and Reveal the selection
+     * @param selection
+     */
+    public void selectAndReveal (ISelection selection);
+    
+    /**
+     * return the objects under that node that match the provided type
+     */
+    public Object[] getDSEExplorerObjectsByType(IConnectionProfile profile, Class type);
+
+    /**
+     * return the objects under that node that match the provided type
+     */
+    public Object[] getDSEExplorerObjectsByType(Object parent, Class type);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IServerExplorerLayoutService.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IServerExplorerLayoutService.java
new file mode 100644
index 0000000..77e0727
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IServerExplorerLayoutService.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.services;
+
+/**
+ * @author ljulien
+ */
+public interface IServerExplorerLayoutService
+{
+	public void enableVirtualNodeLayout ();
+	public void enableHierarchicalLayout ();
+	public boolean isVirtualNodeLayoutSelected ();
+	public boolean isHierarchicalLayoutSelected ();
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IServerExplorerNavigationService.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IServerExplorerNavigationService.java
new file mode 100644
index 0000000..aa12633
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IServerExplorerNavigationService.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.services;
+
+import org.eclipse.jface.viewers.ITreeContentProvider;
+
+/**
+ * @author ljulien
+ */
+public interface IServerExplorerNavigationService extends ITreeContentProvider
+{
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IServerExplorerNodeResolutionService.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IServerExplorerNodeResolutionService.java
new file mode 100644
index 0000000..35188b6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IServerExplorerNodeResolutionService.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.services;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * @author clare
+ */
+public interface IServerExplorerNodeResolutionService
+{
+    /**
+     * Will return the EObject node in the Server Explorer
+     * @param pathToNavigate - A string built to the requirements of the TransientEObjectUtil class
+     */
+    public EObject getEObjectNode(String pathToNavigate);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IServerExplorerRefreshService.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IServerExplorerRefreshService.java
new file mode 100644
index 0000000..b6b84e3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IServerExplorerRefreshService.java
@@ -0,0 +1,9 @@
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.services;
+
+/**
+ * @author ljulien
+ */
+public interface IServerExplorerRefreshService
+{
+    public void refresh (Object objectToRefresh);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IServerExplorerViewPart.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IServerExplorerViewPart.java
new file mode 100644
index 0000000..5dc05da
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IServerExplorerViewPart.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.services;
+
+import org.eclipse.jface.viewers.StructuredViewer;
+
+/**
+ * @author ljulien
+ */
+public interface IServerExplorerViewPart
+{
+    public StructuredViewer getStructuredViewer();
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IServerStatusDecorationService.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IServerStatusDecorationService.java
new file mode 100644
index 0000000..97263ec
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IServerStatusDecorationService.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.services;
+
+/**
+ * @author ljulien
+ */
+public interface IServerStatusDecorationService extends IDecorationService
+{
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IServicesManager.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IServicesManager.java
new file mode 100644
index 0000000..fc25024
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/IServicesManager.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.services;
+
+
+/**
+ * @author ljulien
+ */
+public interface IServicesManager
+{
+	public static final IServicesManager INSTANCE = new ServicesManager();
+	public IServerExplorerRefreshService getServerExplorerRefreshService ();
+	public IServerExplorerContentService getServerExplorerContentService ();
+	public IServerExplorerNavigationService getServerExplorerNavigationService ();
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/ServerExplorerRefreshService.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/ServerExplorerRefreshService.java
new file mode 100644
index 0000000..0642024
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/ServerExplorerRefreshService.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2003 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.services;
+
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.actions.popup.RevisedRefreshAction;
+import org.eclipse.jface.viewers.StructuredSelection;
+
+
+/**
+ * @author ljulien
+ */
+public class ServerExplorerRefreshService implements IServerExplorerRefreshService
+{
+    public void refresh(Object objectToRefresh)
+    {
+    	RevisedRefreshAction action = new RevisedRefreshAction(null);
+        action.selectionChanged(null, new StructuredSelection(objectToRefresh));
+        action.run();
+    }
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/ServicesManager.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/ServicesManager.java
new file mode 100644
index 0000000..1f4fe8e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/services/ServicesManager.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.services;
+
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.ServerExplorerManager;
+
+
+/**
+ * @author ljulien
+ */
+public class ServicesManager implements IServicesManager
+{
+    private ServerExplorerRefreshService refreshService = new ServerExplorerRefreshService();
+    
+	/**
+	 * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.services.IServicesManager#getServerExplorerServices()
+	 */
+	public IServerExplorerContentService getServerExplorerContentService()
+	{
+		return ServerExplorerManager.INSTANCE.getServerExplorerContentService();
+	}
+
+    /**
+     * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.services.IServicesManager#getServerExplorerNavigationService()
+     */
+    public IServerExplorerNavigationService getServerExplorerNavigationService()
+    {
+        return ServerExplorerManager.INSTANCE.getServerExplorerNavigationService ();
+    }
+
+    public IServerExplorerRefreshService getServerExplorerRefreshService()
+    {
+        return refreshService;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/util/ServerToolsUIConstants.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/util/ServerToolsUIConstants.java
new file mode 100644
index 0000000..a1dd45f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/util/ServerToolsUIConstants.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.util;
+
+/**
+ * @author ljulien
+ */
+public class ServerToolsUIConstants
+{
+	public static final String SERVER_EXPLORER_VIEW_ID = "org.eclipse.datatools.connectivity.sqm.server.ui.navigator.serverExplorer"; //$NON-NLS-1$
+	public static final String SERVER_STATUS_DECORATION = "com.ibm.datatools.project.internal.ui.explorer.ServerStateDecoration"; //$NON-NLS-1$
+    public static final String OFFLINE_PROPERTY_SET = "offlineMode"; //$NON-NLS-1$
+    public static final String CONNECTION_INFO = "ConnectionInfo"; //$NON-NLS-1$
+    public static final String SLOT_OFFLINE = "slotOffline"; //$NON-NLS-1$
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/util/ServerUIDebugOptions.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/util/ServerUIDebugOptions.java
new file mode 100644
index 0000000..beef075
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/util/ServerUIDebugOptions.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.util;
+
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.ServerUIPlugin;
+
+/**
+ * @author ljulien
+ */
+public class ServerUIDebugOptions
+{
+	private String value;
+	
+	private ServerUIDebugOptions (String value) {this.value = value;}
+	
+	/**
+	 * @return - The value contained by this Enum
+	 */
+	public String getValue ()
+	{
+		return value;
+	}
+	
+	private static final String PLUGIN = ServerUIPlugin.getDefault().getBundle().getSymbolicName();
+	
+	public static final ServerUIDebugOptions SERVER_EXPLORER_LOG = new ServerUIDebugOptions (PLUGIN + "/serverExplorer/log"); //$NON-NLS-1$
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/util/TransientEObjectUtil.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/util/TransientEObjectUtil.java
new file mode 100644
index 0000000..fc5d467
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/util/TransientEObjectUtil.java
@@ -0,0 +1,168 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.util;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Stack;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.sqm.core.connection.ConnectionInfo;
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentService;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.services.IElementIDProvider;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.internal.core.util.ConnectionUtil;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.ServerExplorerManager;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.services.IServerExplorerNodeResolutionService;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.ecore.ENamedElement;
+import org.eclipse.emf.ecore.EObject;
+
+import com.ibm.icu.util.StringTokenizer;
+
+/**
+ * @author ljulien
+ */
+public class TransientEObjectUtil implements IElementIDProvider
+{
+    private static final ContainmentService containment = RDBCorePlugin.getDefault().getContainmentService();
+   
+    private static final String SEPARATOR = "#"; //$NON-NLS-1$
+    private static final String VIRTUAL_SEPARATOR = "/"; //$NON-NLS-1$
+    private static final String NULL = ""; //$NON-NLS-1$
+
+    private static final Stack stack = new Stack ();
+    
+    private static EObject getRoot (EObject object)
+    {
+        stack.push(object);
+        do
+        {
+            EObject parent = null;
+            if ((parent = containment.getContainer(object)) == null)
+            {
+                return object;
+            }
+            object = parent;
+            stack.push(object);
+        }
+        while (object != null);
+        return object;
+    }
+    
+    public static ConnectionInfo getConnectionInfo (EObject object)
+    {
+        SQLObject root = (SQLObject) getRoot (object);
+        if (root != null)
+        {
+            return ConnectionUtil.getConnectionForEObject(root);
+        }
+        return null;
+    }
+    
+    private static IConnectionProfile getConnectionProfile (EObject object) throws Exception
+    {
+        try
+        {
+        	ConnectionInfo info = getConnectionInfo (object);
+            return info != null ? info.getConnectionProfile() : null;
+        }
+        catch (Exception e)
+        {
+            throw e;
+        }
+    }
+    
+    private static void buildID (StringBuffer buffer, String name)
+    {
+        buffer.append(name + SEPARATOR);
+    }
+    
+    private static void buildID (StringBuffer buffer)
+    {
+        while (!stack.empty())
+        {
+            ENamedElement eObject = (ENamedElement) stack.pop();
+            String groupID = containment.getGroupId(eObject);
+            buffer.append(groupID + VIRTUAL_SEPARATOR + eObject.getName() + SEPARATOR);
+        }
+    }
+    
+    public static String getEObjectId (EObject object) throws Exception
+    {
+        StringBuffer buffer = new StringBuffer();
+        stack.clear();
+        IConnectionProfile profile = getConnectionProfile(object);
+        if (profile != null)
+        {
+        	buildID(buffer, profile.getName());
+        	buildID(buffer);
+        }
+        stack.clear();
+        return buffer.toString();
+    }
+    
+    public static List getPathFromID (String id)
+    {
+        StringTokenizer tokens = new StringTokenizer (id, SEPARATOR);
+        List list = new ArrayList ();
+        while (tokens.hasMoreElements())
+        {
+            list.add(tokens.nextToken());
+        }
+        return list;
+    }
+    
+    public static IGroup getGroupInfo (final String subId)
+    {
+        
+        return new IGroup ()
+        {
+            public String getGroupId()
+            {
+                return subId.substring(0, subId.indexOf(VIRTUAL_SEPARATOR));
+            }
+
+            public String getElementName()
+            {
+                String elementName = subId.substring(subId.indexOf(VIRTUAL_SEPARATOR) + 1);
+                return elementName.equals(NULL) ? null : elementName; 
+            }
+        };
+    }
+    
+    public static EObject getEObjectFromId (String id)
+    {
+    	EObject obj = null;
+    	IServerExplorerNodeResolutionService service = ServerExplorerManager.INSTANCE.getServerExplorerNodeResolutionService();
+    	obj = service.getEObjectNode(id);
+        return obj;
+    }
+
+    public String getElementID(EObject eObject)
+    {
+        try
+        {
+            return eObject instanceof ICatalogObject ? getEObjectId(eObject) : null;
+        }
+        catch (Exception e)
+        {
+            return null;
+        }
+    }
+    
+    public interface IGroup 
+    {
+        public String getGroupId ();
+        public String getElementName ();
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/util/logging/Logger.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/util/logging/Logger.java
new file mode 100644
index 0000000..b103edb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/util/logging/Logger.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.logging;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.ILog;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.ServerUIPlugin;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.ServerUIDebugOptions;
+
+/**
+ * @author ljulien
+ */
+public class Logger
+{
+	private static final ILog		logger;
+	private static final Map		cachedOptions;
+	private static final boolean	DEBUG;
+	static
+	{
+		logger = ServerUIPlugin.getDefault().getLog();
+		cachedOptions = new HashMap();
+		DEBUG = ServerUIPlugin.getDefault().isDebugging();
+	}
+	private static Map getCachedOptions()
+	{
+		return cachedOptions;
+	}
+	/**
+	 * @param option -
+	 *            The option to consider
+	 * @return - True if we should trace this option
+	 */
+	private static boolean shouldLog(ServerUIDebugOptions option)
+	{
+		Boolean value = (Boolean) getCachedOptions().get(option.getValue());
+		if (value == null)
+		{
+			value = new Boolean(Boolean.TRUE.toString().equalsIgnoreCase(Platform.getDebugOption(option.getValue())));
+			getCachedOptions().put(option.getValue(), value);
+		}
+		return value.booleanValue();
+	}
+	/**
+	 * @param owner -
+	 *            The object where the exception has been thrown from -> pass
+	 *            in "this"
+	 * @param exception -
+	 *            The exception to report
+	 */
+	public static void log(Object owner, Throwable exception, ServerUIDebugOptions option)
+	{
+		String className = owner != null ? owner.getClass().getName() : null;
+		logger.log(new Status(IStatus.ERROR, ServerUIPlugin.getDefault().getBundle().getSymbolicName(),
+				IStatus.ERROR, "Detected in Class : " + className, exception)); //$NON-NLS-1$
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/util/resources/ResourceLoader.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/util/resources/ResourceLoader.java
new file mode 100644
index 0000000..5dc8f42
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/util/resources/ResourceLoader.java
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.resources;
+
+import java.util.ResourceBundle;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.RDBCoreUIPlugin;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.ServerUIDebugOptions;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.logging.Logger;
+import org.eclipse.swt.graphics.Image;
+
+
+/**
+ * @author ljulien
+ */
+public class ResourceLoader
+{
+	private static final String RESOURCE_PATH = "org/eclipse/datatools/connectivity/sqm/server/internal/ui/l10n/"; //$NON-NLS-1$
+	private static final String UI_RESOURCES = "datatoolsServerUI"; //$NON-NLS-1$
+	private static final String ICONS_DIRECTORY = "icons/"; //$NON-NLS-1$
+	private static final String NO_RESOURCE_FOUND = "NO_RESOURCE_FOUND"; //$NON-NLS-1$
+
+	private ResourceBundle bundle;
+	
+	public static final ResourceLoader INSTANCE = new ResourceLoader ();
+	
+	private ResourceLoader()
+    {
+        this.bundle = ResourceBundle.getBundle(RESOURCE_PATH + UI_RESOURCES);
+    }
+	
+    /**
+     * Client should use this query Image, as the registry will dispose the image
+     * @param imagePath
+     * @return the image
+     */
+    public Image queryImageFromRegistry (String imageFileName)
+    {
+		return org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader
+				.getResourceLoader().queryAbsolutePathImageFromRegistry(
+						RDBCoreUIPlugin.getDefault().getBundle(), ICONS_DIRECTORY + imageFileName);
+	}
+
+    /**
+     * @param stringID - the key to look for
+     * @return - the localized string
+     */
+    public String queryString (String stringID)
+    {
+        try
+        {
+            String resource = null;
+            resource = this.bundle.getString(stringID);
+            return (resource);
+        }
+        catch (Throwable e)
+        {
+        	Logger.log(this, e, ServerUIDebugOptions.SERVER_EXPLORER_LOG);
+        	return NO_RESOURCE_FOUND;
+        }
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/.classpath b/plugins/org.eclipse.datatools.connectivity.ui.dse/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/.gitignore b/plugins/org.eclipse.datatools.connectivity.ui.dse/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/.project b/plugins/org.eclipse.datatools.connectivity.ui.dse/.project
new file mode 100644
index 0000000..f93e0c4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.ui.dse</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.connectivity.ui.dse/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..73f4382
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Fri Apr 13 14:14:14 PDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.4
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.connectivity.ui.dse/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..b79edb2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/META-INF/MANIFEST.MF
@@ -0,0 +1,32 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Plugin.Name
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.ui.dse; singleton:=true
+Bundle-Version: 1.3.1.qualifier
+Bundle-Activator: org.eclipse.datatools.connectivity.ui.dse.DSEPlugin
+Bundle-Vendor: %Plugin.ProviderName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.core.resources,
+ org.eclipse.ui.ide,
+ org.eclipse.datatools.connectivity;visibility:=reexport,
+ org.eclipse.datatools.connectivity.ui;visibility:=reexport,
+ org.eclipse.ui.views.properties.tabbed,
+ org.eclipse.ui.navigator,
+ org.eclipse.ltk.core.refactoring,
+ org.eclipse.help,
+ org.eclipse.datatools.help,
+ org.eclipse.help.base,
+ org.eclipse.ui.navigator.resources
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.datatools.connectivity.ui.dse,
+ org.eclipse.datatools.connectivity.ui.dse.actions,
+ org.eclipse.datatools.connectivity.ui.dse.dialogs,
+ org.eclipse.datatools.connectivity.ui.dse.dialogs.filters,
+ org.eclipse.datatools.connectivity.ui.dse.dnd,
+ org.eclipse.datatools.connectivity.ui.dse.views
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Import-Package: com.ibm.icu.text,
+ com.ibm.icu.util
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/about.html b/plugins/org.eclipse.datatools.connectivity.ui.dse/about.html
new file mode 100644
index 0000000..129db9d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/build.properties b/plugins/org.eclipse.datatools.connectivity.ui.dse/build.properties
new file mode 100644
index 0000000..ab7ee43
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/build.properties
@@ -0,0 +1,17 @@
+bin.includes = META-INF/,\
+               plugin.xml,\
+               .,\
+               icons/,\
+               plugin.properties,\
+               about.html
+jars.compile.order = .
+source.. = src/
+output.. = bin/
+
+src.dir =		src/
+plugin.version =	1.0.1.200802201
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/build.xml b/plugins/org.eclipse.datatools.connectivity.ui.dse/build.xml
new file mode 100644
index 0000000..46c9cfe
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/build.xml
@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ *************************************************************************
+ * Copyright (c) 2005 Sybase, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Sybase, Inc.  - initial API and implementation
+ *  
+ ***************************************************************************
+ -->
+<project name="org.eclipse.datatools.connectivity.ui.dse" default="build.jars" basedir=".">
+	<import file="../org.eclipse.datatools.build/common_build.xml" optional="true"/>
+	<property name="module.name" value="org.eclipse.datatools.connectivity.ui.dse"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="eclipse.home" location="."/>
+	<property file="build.properties"/>
+	<!-- JavaDoc settings -->
+	<property name="javadocWindowTitle" value="DTP Data Source Explorer"/>
+	<property name="javadocDocTitle" value="DTP Data Source Explorer"/>
+	<property name="javadocPackages" value="org.eclipse.datatools.connectivity.ui.dse.*"/>
+	<property name="javadocFooter" value="&lt;i>Copyright &#169;  2005 Sybase, Inc. and others. All rights reserved. &lt;/i>"/>
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="true"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="true"/>
+	<property name="javacSource" value="${javac.source}"/>
+	<property name="javacTarget" value="${javac.target}"/>
+	<property name="compilerArg" value=""/>
+	<path id="path_bootclasspath">
+		<fileset dir="${java.home}/lib">
+			<include name="*.jar"/>
+		</fileset>
+		<fileset dir="${eclipse.home}/plugins">
+			<!-- Include jared plug-ins -->
+			<include name="org.eclipse.ui_*.jar"/>
+			<include name="org.eclipse.swt_*.jar"/>
+			<include name="org.eclipse.swt.*_*.jar"/>
+			<include name="org.eclipse.jface_*.jar"/>
+			<include name="org.eclipse.core.commands_*.jar"/>
+			<include name="org.eclipse.ui.workbench_*.jar"/>
+			<include name="org.eclipse.core.runtime_*.jar"/>
+			<include name="org.eclipse.osgi_*.jar"/>
+			<include name="org.eclipse.core.resources_*.jar"/>
+			<include name="org.eclipse.ui.ide_*.jar"/>
+			<include name="org.eclipse.ui.views_*.jar"/>
+			<include name="org.eclipse.ui.navigator_*.jar"/>
+			<!-- Include expanded plug-ins -->
+			<include name="org.eclipse.ui_*/org.eclipse.ui_*.jar"/>
+			<include name="org.eclipse.swt_*/org.eclipse.swt_*.jar"/>
+			<include name="org.eclipse.swt.*_*/org.eclipse.swt.*_*.jar"/>
+			<include name="org.eclipse.jface_*/org.eclipse.jface_*.jar"/>
+			<include name="org.eclipse.core.commands_*/org.eclipse.core.commands_*.jar"/>
+			<include name="org.eclipse.ui.workbench_*/org.eclipse.ui.workbench_*.jar"/>
+			<include name="org.eclipse.core.runtime_/org.eclipse.core.runtime_*.jar"/>
+			<include name="org.eclipse.osgi_*/org.eclipse.osgi_*.jar"/>
+			<include name="org.eclipse.core.resources_*/org.eclipse.core.resources_*.jar"/>
+			<include name="org.eclipse.ui.ide_*/org.eclipse.ui.ide_*.jar"/>
+			<include name="org.eclipse.ui.views_*/org.eclipse.ui.views_*.jar"/>
+			<include name="org.eclipse.ui.navigator_*/navigator.jar"/>
+		</fileset>
+		<!-- Dependencies on other DTP plug-ins, built before this one -->
+		<fileset dir="../">
+			<include name="org.eclipse.datatools.connectivity/bin/*"/>
+			<include name="org.eclipse.datatools.connectivity/connectivity.jar"/>
+			<include name="org.eclipse.datatools.connectivity.ui/bin/*"/>
+			<include name="org.eclipse.datatools.connectivity.ui/connectivityui.jar"/>
+			<include name="org.eclipse.datatools.connectivity.navigator.views/bin/*"/>
+			<include name="org.eclipse.datatools.connectivity.navigator.views/navigator.jar"/>
+			<include name="org.eclipse.datatools.connectivity.navigator.common/bin/*"/>
+			<include name="org.eclipse.datatools.connectivity.navigator.common/dtpnavigator.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins">
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/${module.name}">
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+	</target>
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+	</target>
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.datatools.connectivity.ui.dse for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<zip destfile="${plugin.destination}/${module.name}_${plugin.version}.jar" basedir="${temp.folder}/${module.name}_${plugin.version}" filesonly="false" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+	<target name="dse.jar" depends="init" unless="dse.jar" description="Create jar: org.eclipse.datatools.connectivity.ui.dse dse.jar.">
+		<delete dir="${temp.folder}/dse.jar.bin"/>
+		<mkdir dir="${temp.folder}/dse.jar.bin"/>
+		<!-- compile the source code -->
+		<javac destdir="${temp.folder}/dse.jar.bin" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bootclasspath}" source="${javacSource}" target="${javacTarget}">
+			<compilerarg line="${compilerArg}"/>
+			<classpath refid="path_bootclasspath"/>
+			<src path="src/"/>
+		</javac>
+		<!-- Copy necessary resources -->
+		<copy todir="${temp.folder}/dse.jar.bin" failonerror="true" overwrite="false">
+			<fileset dir="src/" excludes="**/*.java, **/package.htm*,null"/>
+		</copy>
+		<mkdir dir="${build.result.folder}"/>
+		<jar destfile="${build.result.folder}/dse.jar" basedir="${temp.folder}/dse.jar.bin"/>
+		<delete dir="${temp.folder}/dse.jar.bin"/>
+	</target>
+	<target name="dsesrc.zip" depends="init" unless="dsesrc.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<zip destfile="${build.result.folder}/dsesrc.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/" includes="**/*.java"/>
+		</zip>
+	</target>
+	<target name="build.jars" depends="init" description="Build all the jars for the plug-in: org.eclipse.datatools.connectivity.ui.dse.">
+		<available property="dse.jar" file="${build.result.folder}/dse.jar"/>
+		<antcall target="dse.jar"/>
+	</target>
+	<target name="build.sources" depends="init">
+		<available property="dsesrc.zip" file="${build.result.folder}/dsesrc.zip"/>
+		<antcall target="dsesrc.zip"/>
+	</target>
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/${module.name}_${plugin.version}"/>
+		<copy todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}" includes="dse.jar"/>
+		</copy>
+		<copy todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="true" overwrite="false">
+			<fileset dir="${basedir}" includes="META-INF/,plugin.xml,about.html,dse.jar,icons/,plugin.properties"/>
+		</copy>
+		<copy todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}" includes="dsesrc.zip"/>
+		</copy>
+	</target>
+	<target name="build.zips" depends="init"/>
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/${module.name}_${plugin.version}"/>
+		<copy file="${build.result.folder}/dsesrc.zip" todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="false" overwrite="false"/>
+	</target>
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/${module.name}_${plugin.version}"/>
+		<copy file="${temp.folder}/dse.jar.bin.log" todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="false" overwrite="false"/>
+	</target>
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.datatools.connectivity.ui.dse of all the zips, jars and logs created.">
+		<delete file="${build.result.folder}/dse.jar"/>
+		<delete file="${build.result.folder}/dsesrc.zip"/>
+		<delete file="${plugin.destination}/${module.name}_${plugin.version}.jar"/>
+		<delete file="${plugin.destination}/${module.name}_${plugin.version}.zip"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="C:/V3/3.1/eclipse/workspace-dtp/org.eclipse.datatools.connectivity.ui.dse" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.datatools.connectivity.ui.dse.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}" includes="**/*.bin.log"/>
+		</delete>
+		<zip destfile="${plugin.destination}/${module.name}_${plugin.version}.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+</project>
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/connection1_newwiz.gif b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/connection1_newwiz.gif
new file mode 100644
index 0000000..864034f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/connection1_newwiz.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/clcl16/add_server.gif b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/clcl16/add_server.gif
new file mode 100644
index 0000000..8b37b6b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/clcl16/add_server.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/clcl16/clear_co.gif b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/clcl16/clear_co.gif
new file mode 100644
index 0000000..2558326
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/clcl16/clear_co.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/clcl16/collapseall.gif b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/clcl16/collapseall.gif
new file mode 100644
index 0000000..a2d80a9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/clcl16/collapseall.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/clcl16/expandall.gif b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/clcl16/expandall.gif
new file mode 100644
index 0000000..7a02b90
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/clcl16/expandall.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/clcl16/export.gif b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/clcl16/export.gif
new file mode 100644
index 0000000..1a7ee91
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/clcl16/export.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/clcl16/extensions.gif b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/clcl16/extensions.gif
new file mode 100644
index 0000000..dda8bae
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/clcl16/extensions.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/clcl16/import.gif b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/clcl16/import.gif
new file mode 100644
index 0000000..7ec1bdf
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/clcl16/import.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/clcl16/remove_server.gif b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/clcl16/remove_server.gif
new file mode 100644
index 0000000..ed7a9ed
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/clcl16/remove_server.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/cview16/enterprise_explorer.gif b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/cview16/enterprise_explorer.gif
new file mode 100644
index 0000000..cb9f3c1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/cview16/enterprise_explorer.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/dlcl16/clear_co.gif b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/dlcl16/clear_co.gif
new file mode 100644
index 0000000..d873c49
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/dlcl16/clear_co.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/dlcl16/collapseall.gif b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/dlcl16/collapseall.gif
new file mode 100644
index 0000000..7dc0de5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/dlcl16/collapseall.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/dlcl16/expandall.gif b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/dlcl16/expandall.gif
new file mode 100644
index 0000000..73be6de
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/dlcl16/expandall.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/elcl16/clear_co.gif b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/elcl16/clear_co.gif
new file mode 100644
index 0000000..6faf8d6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/elcl16/clear_co.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/elcl16/collapseall.gif b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/elcl16/collapseall.gif
new file mode 100644
index 0000000..a2d80a9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/elcl16/collapseall.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/elcl16/expandall.gif b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/elcl16/expandall.gif
new file mode 100644
index 0000000..7a02b90
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/elcl16/expandall.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/elcl16/extensions.gif b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/elcl16/extensions.gif
new file mode 100644
index 0000000..dda8bae
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/elcl16/extensions.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/ovr16/obj_ovr_error.gif b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/ovr16/obj_ovr_error.gif
new file mode 100644
index 0000000..8612eaf
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/full/ovr16/obj_ovr_error.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/new_repository_action.gif b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/new_repository_action.gif
new file mode 100644
index 0000000..0136b56
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/icons/new_repository_action.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/new_repository_action.gif b/plugins/org.eclipse.datatools.connectivity.ui.dse/new_repository_action.gif
new file mode 100644
index 0000000..0f1f65b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/new_repository_action.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/plugin.properties b/plugins/org.eclipse.datatools.connectivity.ui.dse/plugin.properties
new file mode 100644
index 0000000..d0a7583
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/plugin.properties
@@ -0,0 +1,52 @@
+################################################################################
+## Copyright (c) 2005 Sybase, Inc.
+## All rights reserved. This program and the accompanying materials
+## are made available under the terms of the Eclipse Public License v1.0
+## which accompanies this distribution, and is available at
+## http://www.eclipse.org/legal/epl-v10.html
+##
+## Contributors:
+##    Sybase, Inc. - initial API and implementation
+################################################################################ 
+Plugin.Name = Eclipse Data Tools Platform Data Source Explorer Plug-in
+Plugin.ProviderName = Eclipse Data Tools Platform
+
+DSE.Connect.label = &Connect
+DSE.Disconnect.label = &Disconnect
+DSE.Duplicate.label = Du&plicate
+DSE.Delete.label = D&elete
+DSE.Rename.label = Re&name
+DSE.Refresh.label = Ref&resh
+DSE.Ping.label = &Ping...
+DSE.ADDCP_m.label = N
+DSE.AddCP_nm.label = New Connection Profile
+DSE.AddCP.label = &New Connection Profile
+DSE.AddCP.tooltip = New Connection Profile
+DSE.AddRepo.label = New Connection Profile &Repository
+DSE.AddRepo.tooltip = Create a new connection profile repository
+DSE.Import_nm.label = Import
+DSE.Import_m.label = I
+DSE.Import.label = &Import
+DSE.Import.tooltip = Import
+DSE.Export_nm.label = Export
+DSE.Export_m.label = E
+DSE.Export.label = &Export
+DSE.Export.tooltip = Export
+DSE.CollapseAll.label = &Collapse All
+DSE.ExpandAll.label = &Expand All
+DSE.ExpandAll.tooltip = Expand All
+DSE.ShowCategory.command.label = Show Category
+DSE.ShowCategory.command.description = Show Category
+DSE.ShowCategory_nm.label = Show Category
+DSE.ShowCategory_m.label = S
+DSE.ShowCategory.label = &Show Category
+DSE.ShowCategory.tooltip = Show Category
+DSE.Name = Data Source Explorer
+DSE.ContentExtension.Decorator = Connection Profile Decorator
+DSE.ContentExtension.Decorator.Description = Decorate content extension node when connecting to the server fails.
+DSE.content.extended = Data Source Explorer Extension w/Drop Support
+
+category.name.dataTools = Data Management
+category.name.connectivity = Connectivity
+
+General = General
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/plugin.xml b/plugins/org.eclipse.datatools.connectivity.ui.dse/plugin.xml
new file mode 100644
index 0000000..e048606
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/plugin.xml
@@ -0,0 +1,595 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+   <extension
+         point="org.eclipse.ui.views">
+      <view
+            category="org.eclipse.datatools"
+            class="org.eclipse.datatools.connectivity.ui.dse.views.DataSourceExplorerView"
+            icon="icons/full/cview16/enterprise_explorer.gif"
+            id="org.eclipse.datatools.connectivity.DataSourceExplorerNavigator"
+            name="%DSE.Name">
+      </view>
+      <category
+            id="org.eclipse.datatools"
+            name="%category.name.dataTools"/>
+      <category
+      		id="org.eclipse.datatools.connectivity"
+      		name="%category.name.connectivity"/>
+   </extension>
+   <extension
+         point="org.eclipse.ui.decorators">
+      <decorator
+            location="TOP_LEFT"
+            label="%DSE.ContentExtension.Decorator"
+            icon="icons/full/ovr16/obj_ovr_error.gif"
+            id="org.eclipse.datatools.connectivity.ui.decorator.contentextension">
+         <enablement>
+            <and>
+               <objectClass
+                     name="org.eclipse.datatools.connectivity.ui.IContentExtension">
+               </objectClass>
+               <objectState
+                     name="org.eclipse.datatools.connectivity.contentextension.state"
+                     value="true">
+               </objectState>
+            </and>
+         </enablement>
+         <description>
+            %DSE.ContentExtension.Decorator.Description
+         </description>
+      </decorator>
+   </extension>
+   <extension
+         point="org.eclipse.ui.popupMenus">
+         <objectContribution 
+             id="org.eclipse.datatools.connectivity.ui.dse.objectContribution2"
+            objectClass="org.eclipse.datatools.connectivity.IConnectionProfile">
+	         <action
+	               label="%DSE.Ping.label"
+	               class="org.eclipse.datatools.connectivity.ui.actions.PingAction"
+	               menubarPath="slot1"
+	               enablesFor="1"
+	               id="org.eclipse.datatools.connectivity.internal.ui.actions.pingaction">
+	            <enablement>
+	               <objectState
+	                     name="org.eclipse.datatools.connectivity.profile.property.supportsPing"
+	                     value="true">
+	               </objectState>
+	            </enablement>
+	         </action>
+	         <action
+	               label="%DSE.Disconnect.label"
+	               class="org.eclipse.datatools.connectivity.ui.actions.DisconnectAction"
+	               menubarPath="slot1"
+	               enablesFor="1"
+	               id="org.eclipse.datatools.connectivity.internal.ui.actions.disconnectaction">
+	            <enablement>
+	               <and>
+	                  <objectState
+	                        value="true"
+	                        name="org.eclipse.datatools.connectivity.profile.property.maintainConnection"/>
+		               <objectState
+		                     name="org.eclipse.datatools.connectivity.profile.property.isConnected"
+		                     value="true">
+		               </objectState>
+	               </and>
+	            </enablement>
+	         </action>
+	         <action
+	               label="%DSE.Connect.label"
+	               class="org.eclipse.datatools.connectivity.ui.actions.ConnectAction"
+	               menubarPath="slot1"
+	               enablesFor="1"
+	               id="org.eclipse.datatools.connectivity.internal.ui.actions.connectaction">
+	            <enablement>
+<!--	               <and>
+	                  <objectState
+	                        value="true"
+	                        name="org.eclipse.datatools.connectivity.profile.property.maintainConnection"/>
+-->	                      
+	                  <objectState
+	                        name="org.eclipse.datatools.connectivity.profile.property.isConnected"
+	                        value="false">
+	                  </objectState>
+<!--	               </and> -->
+	            </enablement>
+	         </action>
+	         <action
+	               label="%DSE.Duplicate.label"
+	               class="org.eclipse.datatools.connectivity.ui.actions.DuplicateProfileAction"
+	               menubarPath="slot2"
+	               enablesFor="1"
+	               id="org.eclipse.datatools.connectivity.internal.ui.actions.duplicateaction">
+	         </action>
+	         <action
+                class="org.eclipse.datatools.connectivity.ui.actions.DeleteAction"
+                definitionId="org.eclipse.ui.edit.delete"
+                enablesFor="*"
+                id="org.eclipse.datatools.connectivity.internal.ui.actions.deleteaction"
+                label="%DSE.Delete.label"
+                menubarPath="slot2"
+                overrideActionId="org.eclipse.ui.edit.delete">
+	         </action>
+	         <action
+                class="org.eclipse.datatools.connectivity.ui.actions.RenameAction"
+                definitionId="org.eclipse.ui.edit.rename"
+                enablesFor="1"
+                id="org.eclipse.datatools.connectivity.internal.ui.actions.renameaction"
+                label="%DSE.Rename.label"
+                menubarPath="slot2"
+                overrideActionId="org.eclipse.ui.edit.rename">
+	         </action>
+	         <visibility>
+		      	<objectClass name = "org.eclipse.datatools.connectivity.IConnectionProfile"/>
+	         </visibility>
+		 </objectContribution>
+<!--         <objectContribution
+               adaptable="false"
+               id="org.eclipse.datatools.connectivity.ui.dse.refreshContribution"
+               objectClass="java.lang.Object">
+            <action
+                  class="org.eclipse.datatools.connectivity.ui.actions.RefreshViewAction"
+                  definitionId="org.eclipse.ui.file.refresh"
+                  id="org.eclipse.datatools.connectivity.ui.dse.refresh"
+                  label="Refresh2"
+                  menubarPath="slot3">
+               <enablement>
+                  <or>
+                     <objectClass name="org.eclipse.datatools.connectivity.ICategory"/>
+                     <objectClass name="org.eclipse.datatools.connectivity.IConnectionProfile"/>
+                  </or>
+               </enablement>
+            </action>
+         </objectContribution> -->
+   </extension>
+<!--   <extension
+         point="org.eclipse.ui.navigator.navigatorContent">
+      <navigatorContent
+            contentProvider="org.eclipse.datatools.connectivity.ui.dse.views.ConnectionProfileContentProvider"
+            icon="icons/full/cview16/enterprise_explorer.gif"
+            id="org.eclipse.datatools.connectivity.dsexplorer.content"
+            labelProvider="org.eclipse.datatools.connectivity.ui.dse.views.ConnectionProfileLabelProvider"
+            name="%DSE.content"
+            priority="higher">
+         <actionProvider
+               class="org.eclipse.datatools.connectivity.ui.dse.actions.ProfileActionsActionProvider"
+               id="org.eclipse.datatools.connectivity.ui.dse.actions.ProfileActionsActionProvider">
+            <enablement>
+               <or>
+                  <instanceof value="org.eclipse.datatools.connectivity.ICategory"/>
+                  <instanceof value="org.eclipse.datatools.connectivity.IConnectionProfile"/>
+           		  <instanceof value="org.eclipse.datatools.connectivity.internal.ui.LocalRepositoryNode" />
+               </or>
+            </enablement>
+         </actionProvider>
+         <dropAssistant
+               class="org.eclipse.datatools.connectivity.ui.dse.dnd.ConnectionProfileDropAssistant"
+               id="org.eclipse.datatools.connectivity.ui.dse.dnd.connectionProfileDropAssistant">
+            <possibleDropTargets>
+            	<or>
+            		<adapt type="org.eclipse.datatools.connectivity.ICategory"/>
+            		<instanceof value="org.eclipse.datatools.connectivity.IConnectionProfile"/>
+            		<instanceof value="org.eclipse.datatools.connectivity.internal.ui.LocalRepositoryNode" />
+            	</or>
+            </possibleDropTargets>
+         </dropAssistant>
+         <commonSorter
+               class="org.eclipse.datatools.connectivity.ui.dse.views.ConnectionProfileSorter"
+               id="org.eclipse.datatools.connectivity.ui.dse.commonSorter"/>
+         <enablement>
+            <or>
+               <adapt type="org.eclipse.datatools.connectivity.ICategory"/>
+               <adapt type="org.eclipse.datatools.connectivity.IConnectionProfile"/>
+               <adapt type="org.eclipse.datatools.connectivity.ProfileManager"/>
+               <instanceof value="org.eclipse.core.resources.IWorkspaceRoot"/>
+            </or>
+         </enablement>
+      </navigatorContent>
+   </extension> -->
+   <extension
+         point="org.eclipse.ui.navigator.viewer">
+      <viewer
+            viewerId="org.eclipse.datatools.connectivity.DataSourceExplorerNavigator">
+         <options>
+            <property
+                  name="org.eclipse.ui.navigator.enforceHasChildren"
+                  value="true"/> 
+         </options>
+         <popupMenu
+         	allowsPlatformContributions="true"
+          	id="org.eclipse.datatools.connectivity.DataSourceExplorerNavigator.menu">
+        	<insertionPoint
+           		name="slot.Open"
+                separator="true"/>
+            <insertionPoint
+           		name="slot.Create"
+                separator="true"/>
+        	<insertionPoint
+           		name="slot.Data"
+                separator="true"/>
+        	<insertionPoint
+           		name="slot.Control"
+                separator="true"/>
+            <insertionPoint
+           		name="slot.Maintain"
+                separator="true"/>
+            <insertionPoint
+           		name="slot.Share"
+                separator="true"/>
+            <insertionPoint
+           		name="slot.Change"
+                separator="true"/>
+            <insertionPoint
+           		name="slot.Additions"
+                separator="true"/>
+            <insertionPoint
+           		name="slot.Properties"
+                separator="true"/>                    
+        	<insertionPoint
+           		name="group.new"
+                separator="true"/>
+          	<insertionPoint
+               	name="group.goto"
+               	separator="false"/>
+            <insertionPoint
+               	name="group.open"
+               	separator="true"/>
+            <insertionPoint
+               	name="group.openWith"
+               	separator="false"/>
+            <insertionPoint
+               	name="group.edit"
+               	separator="true"/>
+            <insertionPoint
+               	name="group.show"
+               	separator="false"/>
+            <insertionPoint
+               	name="group.reorganize"
+               	separator="true"/>
+            <insertionPoint
+               	name="group.port"
+               	separator="false"/>
+            <insertionPoint
+               	name="group.diagram"
+               	separator="true"/>
+            <insertionPoint
+               	name="group.generate"
+               	separator="true"/>
+            <insertionPoint
+               	name="group.search"
+               	separator="true"/>
+            <insertionPoint
+            	name="group.build"
+                separator="true"/>            
+            <insertionPoint
+               	name="slot1"
+                 separator="true"/>
+            <insertionPoint
+                 name="slotOffline"
+                 separator="true"/>
+            <insertionPoint
+                 name="slot2"
+                 separator="true"/>
+            <insertionPoint
+                 name="slot3"
+                 separator="true"/>
+            <insertionPoint
+                 name="slot4"
+                 separator="true"/>
+            <insertionPoint
+                 name="additions"
+                 separator="true"/>
+            <insertionPoint
+                 name="group.properties"
+                 separator="true"/>
+     	</popupMenu>
+      </viewer>
+      <viewerContentBinding viewerId="org.eclipse.datatools.connectivity.DataSourceExplorerNavigator">
+         <includes>
+            <contentExtension
+                  isRoot="true"
+                  pattern="org.eclipse.datatools.connectivity.dsexplorer.content.extended"/>
+            <contentExtension
+                  pattern="org.eclipse.datatools.connectivity.repositoryContent">
+            </contentExtension>
+         </includes>
+      </viewerContentBinding>
+      <viewerActionBinding viewerId="org.eclipse.datatools.connectivity.DataSourceExplorerNavigator">
+         <includes>
+            <actionExtension pattern="org.eclipse.datatools.connectivity.ui.dse.actions.*"/>
+            <actionExtension
+                  pattern="org.eclipse.datatools.connectivity.internal.ui.actions.*">
+            </actionExtension>
+         </includes>
+      </viewerActionBinding>
+   </extension>
+<!--   <extension
+         point="org.eclipse.ui.navigator.navigatorContent">
+      <actionProvider
+            class="org.eclipse.datatools.connectivity.ui.dse.actions.RefreshActionProvider"
+            id="org.eclipse.datatools.connectivity.ui.dse.actions.RefreshActionProvider">
+         <enablement>
+            <instanceof value="java.lang.Object"/>
+         </enablement>
+      </actionProvider>
+   </extension>-->
+    <extension
+          point="org.eclipse.ui.views.properties.tabbed.propertyContributor">
+       <propertyContributor
+             contributorId="org.eclipse.datatools.connectivity.DataSourceExplorerNavigator"
+             labelProvider="org.eclipse.ui.internal.navigator.resources.workbench.TabbedPropertySheetTitleProvider">
+          <propertyCategory category="general"/>
+          <propertyCategory category="core"/>
+          <propertyCategory category="appearance"/>
+          <propertyCategory category="advanced"/>
+       </propertyContributor>
+    </extension>
+    <extension
+          point="org.eclipse.ui.views.properties.tabbed.propertyTabs">
+       <propertyTabs contributorId="org.eclipse.datatools.connectivity.DataSourceExplorerNavigator">
+          <propertyTab
+                label="%General"
+                category="general"
+                id="CommonNavigator.tab.General"/>
+       </propertyTabs>
+    </extension>
+    <extension
+          point="org.eclipse.ui.views.properties.tabbed.propertySections">
+       <propertySections contributorId="org.eclipse.datatools.connectivity.DataSourceExplorerNavigator">
+          <propertySection
+                class="org.eclipse.ui.views.properties.tabbed.AdvancedPropertySection"
+                id="CommonNavigator.section.General"
+                tab="CommonNavigator.tab.General">
+             <input type="java.lang.Object"/>
+          </propertySection>
+       </propertySections>
+    </extension>
+    <extension
+          point="org.eclipse.ui.navigator.navigatorContent">
+       <navigatorContent
+             activeByDefault="true"
+             contentProvider="org.eclipse.datatools.connectivity.ui.navigator.ConnectionProfileContentProvider"
+             icon="icons/full/cview16/enterprise_explorer.gif"
+             id="org.eclipse.datatools.connectivity.dsexplorer.content.extended"
+             labelProvider="org.eclipse.datatools.connectivity.ui.navigator.ConnectionProfileLabelProvider"
+             name="%DSE.content.extended"
+             priority="higher">
+          <actionProvider
+                class="org.eclipse.datatools.connectivity.ui.navigator.actions.ProfileActionsActionProvider"
+                id="org.eclipse.datatools.connectivity.ui.dse.actions.ProfileActionsActionProvider">
+             <enablement>
+                <or>
+                   <instanceof
+                         value="org.eclipse.datatools.connectivity.ICategory">
+                   </instanceof>
+                   <instanceof
+                         value="org.eclipse.datatools.connectivity.IConnectionProfile">
+                   </instanceof>
+                   <instanceof
+                         value="org.eclipse.datatools.connectivity.internal.ui.LocalRepositoryNode">
+                   </instanceof>
+                </or>
+             </enablement>
+          </actionProvider>
+          <dropAssistant
+                class="org.eclipse.datatools.connectivity.ui.dse.dnd.ConnectionProfileDropAssistant"
+                id="org.eclipse.datatools.connectivity.ui.dse.dnd.connectionProfileDropAssistant">
+             <possibleDropTargets>
+                <or>
+                   <adapt
+                         type="org.eclipse.datatools.connectivity.ICategory">
+                   </adapt>
+                   <instanceof
+                         value="org.eclipse.datatools.connectivity.IConnectionProfile">
+                   </instanceof>
+                   <instanceof
+                         value="org.eclipse.datatools.connectivity.internal.ui.LocalRepositoryNode">
+                   </instanceof>
+                </or>
+             </possibleDropTargets>
+          </dropAssistant>
+          <commonSorter
+                class="org.eclipse.datatools.connectivity.ui.navigator.ConnectionProfileSorter"
+                id="org.eclipse.datatools.connectivity.ui.dse.commonSorter">
+          </commonSorter>
+          <enablement>
+             <or>
+                <adapt
+                      type="org.eclipse.datatools.connectivity.ICategory">
+                </adapt>
+                <adapt
+                      type="org.eclipse.datatools.connectivity.IConnectionProfile">
+                </adapt>
+                <adapt
+                      type="org.eclipse.datatools.connectivity.ProfileManager">
+                </adapt>
+                <instanceof
+                      value="org.eclipse.core.resources.IWorkspaceRoot">
+                </instanceof>
+             </or>
+          </enablement>
+          <override
+                policy="InvokeAlwaysRegardlessOfSuppressedExt"
+                suppressedExtensionId="org.eclipse.datatools.connectivity.dsexplorer.content">
+          </override>
+       </navigatorContent>
+    </extension>
+    <extension
+          point="org.eclipse.ui.menus">
+       <menuContribution
+             locationURI="menu:org.eclipse.datatools.connectivity.DataSourceExplorerNavigator?before=additions">
+          <separator
+                name="slot1"
+                visible="true">
+          </separator>
+          <separator
+                name="slotOffline"
+                visible="true">
+          </separator>
+          <separator
+                name="slot2"
+                visible="true">
+          </separator>
+          <separator
+                name="slot3"
+                visible="true">
+          </separator>
+       </menuContribution>
+       <menuContribution
+             locationURI="toolbar:org.eclipse.datatools.connectivity.DataSourceExplorerNavigator">
+          <separator
+                name="separator1"
+                visible="true">
+          </separator>
+          <command
+                commandId="org.eclipse.datatools.connectivity.commands.showcategory"
+                hoverIcon="icons/full/clcl16/extensions.gif"
+                icon="icons/full/elcl16/extensions.gif"
+                id="org.eclipse.datatools.connectivity.toolbar.showcategory"
+                style="toggle"
+                tooltip="%DSE.ShowCategory.tooltip">
+          </command>
+          <separator
+                name="separator2"
+                visible="true">
+          </separator>
+          <command
+                commandId="org.eclipse.datatools.connectivity.commands.addrepository"
+                hoverIcon="icons/new_repository_action.gif"
+                icon="icons/new_repository_action.gif"
+                id="org.eclipse.datatools.connectivity.toolbar.addrepository"
+                style="push"
+                tooltip="%DSE.AddRepo.tooltip">
+             <visibleWhen>
+                <systemTest
+                      property="org.eclipse.datatools.connectivity.repositoriesEnabled"
+                      value="true">
+                </systemTest>
+             </visibleWhen>
+          </command>
+          <command
+                commandId="org.eclipse.datatools.connectivity.commands.addprofile"
+                hoverIcon="icons/connection1_newwiz.gif"
+                icon="icons/connection1_newwiz.gif"
+                id="org.eclipse.datatools.connectivity.toolbar.addprofile"
+                style="push"
+                tooltip="%DSE.AddCP.tooltip">
+             <parameter
+                   name="org.eclipse.datatools.connectivity.ui.ignoreCategory"
+                   value="true">
+             </parameter>
+             <parameter
+                   name="org.eclipse.datatools.connectivity.ui.useSelection"
+                   value="false">
+             </parameter>
+          </command>
+          <separator
+                name="separator3"
+                visible="true">
+          </separator>
+          <command
+                commandId="org.eclipse.datatools.connectivity.commands.import"
+                hoverIcon="icons/full/clcl16/import.gif"
+                icon="icons/full/clcl16/import.gif"
+                id="org.eclipse.datatools.connectivity.toolbar.import"
+                style="push"
+                tooltip="%DSE.Import.tooltip">
+          </command>
+          <command
+                commandId="org.eclipse.datatools.connectivity.commands.export"
+                hoverIcon="icons/full/clcl16/export.gif"
+                icon="icons/full/clcl16/export.gif"
+                id="org.eclipse.datatools.connectivity.toolbar.export"
+                style="push"
+                tooltip="%DSE.Export.tooltip">
+          </command>
+       </menuContribution>
+       <menuContribution
+             locationURI="menu:org.eclipse.datatools.connectivity.DataSourceExplorerNavigator?before=slot1">
+          <command
+                commandId="org.eclipse.datatools.connectivity.commands.addprofile"
+                hoverIcon="icons/connection1_newwiz.gif"
+                icon="icons/connection1_newwiz.gif"
+                id="org.eclipse.datatools.connectivity.view.menu.addprofile"
+                label="%DSE.AddCP_nm.label"
+                mnemonic="%DSE.ADDCP_m.label"
+                tooltip="%DSE.AddCP.tooltip">
+             <parameter
+                   name="org.eclipse.datatools.connectivity.ui.useSelection"
+                   value="true">
+             </parameter>
+             <parameter
+                   name="org.eclipse.datatools.connectivity.ui.ignoreCategory"
+                   value="false">
+             </parameter>
+          </command>
+       </menuContribution>
+       <menuContribution
+             locationURI="menu:org.eclipse.datatools.connectivity.DataSourceExplorerNavigator?before=slot2">
+          <command
+                commandId="org.eclipse.datatools.connectivity.commands.import"
+                hoverIcon="icons/full/clcl16/import.gif"
+                icon="icons/full/clcl16/import.gif"
+                id="org.eclipse.datatools.connectivity.view.menu.import"
+                label="%DSE.Import_nm.label"
+                mnemonic="%DSE.Import_m.label"
+                tooltip="%DSE.Import.tooltip">
+          </command>
+          <command
+                commandId="org.eclipse.datatools.connectivity.commands.export"
+                hoverIcon="icons/full/clcl16/export.gif"
+                icon="icons/full/clcl16/export.gif"
+                id="org.eclipse.datatools.connectivity.view.menu.export"
+                label="%DSE.Export_nm.label"
+                mnemonic="%DSE.Export_m.label"
+                tooltip="%DSE.Export.tooltip">
+          </command>
+       </menuContribution>
+       <menuContribution
+             locationURI="menu:org.eclipse.datatools.connectivity.DataSourceExplorerNavigator?before=slot3">
+          <command
+                commandId="org.eclipse.datatools.connectivity.commands.showcategory"
+                hoverIcon="icons/full/clcl16/extensions.gif"
+                icon="icons/full/elcl16/extensions.gif"
+                id="org.eclipse.datatools.connectivity.view.menu.showcategory"
+                label="%DSE.ShowCategory_nm.label"
+                mnemonic="%DSE.ShowCategory_m.label"
+                style="toggle"
+                tooltip="%DSE.ShowCategory.tooltip">
+          </command>
+       </menuContribution>
+    </extension>
+    <extension
+          point="org.eclipse.ui.commands">
+       <command
+             defaultHandler="org.eclipse.datatools.connectivity.ui.dse.actions.ShowCategoryAction"
+             description="%DSE.ShowCategory.command.description"
+             id="org.eclipse.datatools.connectivity.commands.showcategory"
+             name="%DSE.ShowCategory.command.label">
+       </command>
+    </extension>
+   
+   <!-- Double-click to reconnect or expand/collapse IConnectionProfile -->
+   <extension
+         point="org.eclipse.ui.navigator.navigatorContent">
+      <actionProvider
+            class="org.eclipse.datatools.connectivity.ui.actions.ExpandProvider"
+            id="org.eclipse.datatools.connectivity.ui.dse.expandAction">
+	        <enablement>
+                  <instanceof
+                        value="org.eclipse.datatools.connectivity.IConnectionProfile">
+                  </instanceof>
+			</enablement>	
+      </actionProvider>
+   </extension>
+   
+   <extension
+          point="org.eclipse.ui.navigator.viewer">
+       <viewerActionBinding viewerId="org.eclipse.datatools.connectivity.DataSourceExplorerNavigator">
+          <includes>
+             <actionExtension pattern="org.eclipse.datatools.connectivity.ui.dse.expandAction"/>
+          </includes>
+       </viewerActionBinding>
+    </extension>
+</plugin>
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/DSEPlugin.java b/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/DSEPlugin.java
new file mode 100644
index 0000000..e18d9dc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/DSEPlugin.java
@@ -0,0 +1,122 @@
+/*******************************************************************************
+ * Copyright (c) 2005-2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.dse;
+
+import java.text.MessageFormat;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The main plugin class to be used in the desktop.
+ */
+public class DSEPlugin extends AbstractUIPlugin {
+
+	public static final String SERVERS_VIEW_VIEWER_ID = "org.eclipse.datatools.connectivity.DataSourceExplorerNavigator"; //$NON-NLS-1$
+
+	public static final String SERVERS_VIEW_CONTENT_EXTENSION_ID = "org.eclipse.datatools.connectivity.dsexplorer.content"; //$NON-NLS-1$
+	
+	public static final String PROP_SHOW_CATEGORIES = "showCategories"; //$NON-NLS-1$
+
+	// The shared instance.
+	private static DSEPlugin plugin;
+	// Resource bundle.
+	private ResourceBundle resourceBundle;
+
+	/**
+	 * The constructor.
+	 */
+	public DSEPlugin() {
+		plugin = this;
+	}
+
+	/**
+	 * This method is called upon plug-in activation
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		/* 
+		 * Note that this is here to correct an issue with plug-in
+		 * loading not loading the org.eclipse.datatools.connectivity.ui
+		 * plug-in in time to make plug-in xml based filters work
+		 * correctly. So we are forcing the plug-in to load early.
+		 * If there is a better solution to this, please let us know.
+		 */
+		ConnectivityUIPlugin.getDefault();
+	}
+
+	/**
+	 * This method is called when the plug-in is stopped
+	 */
+	public void stop(BundleContext context) throws Exception {
+		super.stop(context);
+		plugin = null;
+	}
+
+	/**
+	 * Returns the shared instance.
+	 */
+	public static DSEPlugin getDefault() {
+		return plugin;
+	}
+
+	/**
+	 * Returns an image descriptor for the image file at the given plug-in
+	 * relative path.
+	 * 
+	 * @param path the path
+	 * @return the image descriptor
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return AbstractUIPlugin.imageDescriptorFromPlugin(
+				"org.eclipse.datatools.connectivity.ui.dse", path); //$NON-NLS-1$
+	}
+
+	/**
+	 * Returns the plugin's resource bundle,
+	 */
+	public ResourceBundle getResourceBundle() {
+		try {
+			if (resourceBundle == null)
+				resourceBundle = ResourceBundle
+						.getBundle("org.eclipse.datatools.connectivity.ui.dse.resources"); //$NON-NLS-1$
+		}
+		catch (MissingResourceException x) {
+			resourceBundle = null;
+		}
+		return resourceBundle;
+	}
+
+	public String getResourceString(String key) {
+		try {
+			ResourceBundle resBundle = getResourceBundle();
+			if (resBundle == null) {
+				return key;
+			}
+
+			return resBundle.getString(key);
+		}
+		catch (MissingResourceException e) {
+			return key;
+		}
+	}
+
+	public String getResourceString(String key, Object[] arguments) {
+		MessageFormat f = new MessageFormat(getResourceString(key));
+
+		return f.format(arguments);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/IHelpContextsConnectivityUIDSE.java b/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/IHelpContextsConnectivityUIDSE.java
new file mode 100644
index 0000000..0eed3e0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/IHelpContextsConnectivityUIDSE.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.dse;
+
+public interface IHelpContextsConnectivityUIDSE {
+
+	/**
+	 * TPS_helpKey_constants_for_plug-in: org.eclipse.datatools.connectivity.ui.dse
+	 */
+
+	/*
+	 * CONTEXT_ID_CONNECTIVITY_DSE_VIEW =
+	 * Data Source Explorer
+	 */
+	public static final String CONTEXT_ID_CONNECTIVITY_DSE_VIEW =
+			"CONTEXT_ID_CONNECTIVITY_DSE_VIEW"; //$NON-NLS-1$
+
+
+	/**
+	 * PROFILE_SELECTION_DIALOG Context ID for the Profile Selection Dialog
+	 * 
+	 */
+	public static final String PROFILE_SELECTION_DIALOG = "PROFILE_SELECTION_DIALOG"; //$NON-NLS-1$
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/actions/SelectProfileAction.java b/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/actions/SelectProfileAction.java
new file mode 100644
index 0000000..2a0789e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/actions/SelectProfileAction.java
@@ -0,0 +1,144 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.dse.actions;
+
+import org.eclipse.datatools.connectivity.ui.dse.dialogs.ProfileSelectionDialog;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.window.Window;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.navigator.CommonNavigator;
+
+/**
+ * Opens the profile selection dialog and returns the name
+ * of the selected dialog via getCPName().
+ * 
+ * To set the initial selection, call setCPName() before 
+ * running the action.
+ * 
+ * @author brianf
+ */
+public class SelectProfileAction extends Action implements
+		IObjectActionDelegate {
+
+	// cache the selected object
+	protected Object m_selobj = null;
+	
+	// cache the selected view part
+	protected IViewPart view = null;
+	
+	// cache the initial profile name and the name
+	// to return of the selected profile.
+	protected String profileName = null;
+	
+	/**
+	 * Empty constructor
+	 */
+	public SelectProfileAction() {
+		super();
+	}
+
+	/**
+	 * Simple constructor with action text
+	 * @param text
+	 */
+	public SelectProfileAction(String text) {
+		super(text);
+	}
+
+	/**
+	 * Simple constructor with action text and image
+	 * @param text
+	 */
+	public SelectProfileAction(String text, ImageDescriptor image) {
+		super(text, image);
+	}
+
+	/**
+	 * Simple constructor with action text and style bit
+	 * @param text
+	 * @param style
+	 */
+	public SelectProfileAction(String text, int style) {
+		super(text, style);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IObjectActionDelegate#setActivePart(org.eclipse.jface.action.IAction, org.eclipse.ui.IWorkbenchPart)
+	 */
+	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+		if (targetPart instanceof CommonNavigator) {
+			this.view = (IViewPart) targetPart;
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+	 */
+	public void run(IAction action) {
+		run();
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.action.Action#run()
+	 */
+	public void run() {
+		showProfileSelectionDialog();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+		m_selobj = null;
+		if (selection instanceof IStructuredSelection) {
+			IStructuredSelection structuredSelection = (IStructuredSelection) selection;
+			if (structuredSelection.size() == 1) {
+				m_selobj = structuredSelection.getFirstElement();
+			}
+		}
+	}
+
+	/*
+	 * Actually show the dialog, set the initial selection
+	 * and get the return into the cached String variable. 
+	 */
+	private void showProfileSelectionDialog() {
+		ProfileSelectionDialog dialog = new ProfileSelectionDialog(view.getSite().getShell());
+		if (profileName != null)
+			dialog.setCPName(profileName);
+		int ret = dialog.open();
+		if (ret == Window.OK) {
+			profileName = dialog.getCPName();
+		}
+	}
+	
+	/**
+	 * Set the initially selected profile
+	 * @param name
+	 */
+	public void setCPName( String name ) {
+		this.profileName = name;
+	}
+	
+	/**
+	 * Return the selected profile
+	 * @return
+	 */
+	public String getCPName() {
+		return this.profileName;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/actions/ShowCategoryAction.java b/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/actions/ShowCategoryAction.java
new file mode 100644
index 0000000..1433205
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/actions/ShowCategoryAction.java
@@ -0,0 +1,207 @@
+/*******************************************************************************
+ * Copyright (c) 2005-2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ * 			brianf - adding handler support
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.dse.actions;
+
+import java.util.Map;
+
+import org.eclipse.core.commands.AbstractHandlerWithState;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.HandlerEvent;
+import org.eclipse.core.commands.State;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.ui.dse.DSEPlugin;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.commands.ICommandService;
+import org.eclipse.ui.commands.IElementUpdater;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.eclipse.ui.menus.UIElement;
+import org.eclipse.ui.navigator.CommonNavigator;
+import org.eclipse.ui.navigator.IExtensionStateModel;
+import org.eclipse.ui.navigator.INavigatorContentService;
+
+/**
+ * @author shongxum, brianf
+ * 
+ */
+public class ShowCategoryAction extends AbstractHandlerWithState 
+	implements IViewActionDelegate, IElementUpdater {
+
+	IViewPart view = null;
+	boolean hasBeenSet = false;
+	Object currentInput = ResourcesPlugin.getWorkspace().getRoot();
+	boolean currentState = true;
+	
+	public static String HANDLER_ID = 
+		"org.eclipse.datatools.connectivity.commands.showcategory"; //$NON-NLS-1$
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)
+	 */
+	public void init(IViewPart view) {
+		this.view = view;
+		if (view instanceof CommonNavigator && !hasBeenSet) {
+			IExtensionStateModel stateModel = ((CommonNavigator)view).getNavigatorContentService().findStateModel(DSEPlugin.SERVERS_VIEW_CONTENT_EXTENSION_ID);
+			//set default show_category stateprop to true
+			stateModel.setBooleanProperty(DSEPlugin.PROP_SHOW_CATEGORIES,
+					currentState);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+	 */
+	public void run(IAction action) {
+		currentState = action.isChecked();
+		setCurrentState(currentState);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction,
+	 *      org.eclipse.jface.viewers.ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+		action.setEnabled(true);
+		action.setChecked(currentState);
+	}
+
+	/**
+	 * Get the current state
+	 * @return
+	 */
+	private boolean getCurrentState() {
+		if (view instanceof CommonNavigator) {
+			CommonNavigator commonNav = (CommonNavigator) view;
+			if (currentInput == null) {
+				// do nothing
+			}
+			else if (currentInput instanceof ICategory
+					|| currentInput instanceof ProfileManager
+					|| currentInput instanceof IWorkspaceRoot
+					|| currentInput instanceof IConnectionProfile) {
+				INavigatorContentService ncs = commonNav
+					.getNavigatorContentService();
+				IExtensionStateModel stateModel = ncs
+					.findStateModel(DSEPlugin.SERVERS_VIEW_CONTENT_EXTENSION_ID);
+
+				return stateModel.getBooleanProperty(DSEPlugin.PROP_SHOW_CATEGORIES);
+			}
+		}
+		return true; // default to true
+	}
+
+	/**
+	 * Set the internal state to the passed in flag
+	 * @param flag
+	 */
+	private void setCurrentState ( boolean flag ) {
+		if (view instanceof CommonNavigator) {
+			CommonNavigator commonNav = (CommonNavigator) view;
+			if (currentInput == null) {
+				// do nothing
+			}
+			else if (currentInput instanceof ICategory
+					|| currentInput instanceof ProfileManager
+					|| currentInput instanceof IWorkspaceRoot
+					|| currentInput instanceof IConnectionProfile) {
+				INavigatorContentService ncs = commonNav
+				.getNavigatorContentService();
+				IExtensionStateModel stateModel = ncs
+				.findStateModel(DSEPlugin.SERVERS_VIEW_CONTENT_EXTENSION_ID);
+
+				stateModel.setBooleanProperty(DSEPlugin.PROP_SHOW_CATEGORIES,
+						flag);
+
+				commonNav.getCommonViewer().refresh();
+				if (flag)
+					commonNav.getCommonViewer().expandToLevel(2);
+			}
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+	 */
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		IWorkbenchPart part = HandlerUtil.getActivePart(event);
+		if (part == null && view == null) 
+			return null;
+		else if (part instanceof IViewPart && view == null)
+			init((IViewPart)part);
+		else if (view != null) {
+			hasBeenSet = true;
+		}
+		if (!hasBeenSet) {
+			hasBeenSet = true;
+		}
+		else {
+			currentState = !getCurrentState();
+		}
+
+		setCurrentState(currentState);
+
+		// update our radio button states ... get the service from
+		// a place that's most appropriate
+		ICommandService service = (ICommandService) HandlerUtil
+			.getActiveWorkbenchWindowChecked(event).getService(
+				ICommandService.class);
+		service.refreshElements(event.getCommand().getId(), null);
+		super.fireHandlerChanged(new HandlerEvent(this, false, false));
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.commands.AbstractHandler#isEnabled()
+	 */
+	public boolean isEnabled() {
+		return true;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.commands.AbstractHandler#isHandled()
+	 */
+	public boolean isHandled() {
+		return true;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.commands.IElementUpdater#updateElement(org.eclipse.ui.menus.UIElement, java.util.Map)
+	 */
+	public void updateElement(UIElement element, Map parameters) {
+		element.setChecked(getCurrentState());
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.commands.AbstractHandlerWithState#handleStateChange(org.eclipse.core.commands.State, java.lang.Object)
+	 */
+	public void handleStateChange(State arg0, Object arg1) {
+		if (arg0 != null) {
+			if (arg0.getValue() instanceof Boolean) {
+				setCurrentState(((Boolean)arg0.getValue()).booleanValue());
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/dialogs/ConnectionDisplayProperty.java b/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/dialogs/ConnectionDisplayProperty.java
new file mode 100644
index 0000000..f72d2a2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/dialogs/ConnectionDisplayProperty.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.datatools.connectivity.ui.dse.dialogs;
+
+public class ConnectionDisplayProperty {
+private String property;
+private String value;
+	/**
+	 * @param property
+	 * @param value
+	 */
+	public ConnectionDisplayProperty(String property, String value) {
+		super();
+		this.property = property;
+		this.value = value;
+	}
+/**
+ * @return Returns the property.
+ */
+public String getPropertyName() {
+	return property;
+}
+/**
+ * @param property The property to set.
+ */
+public void setPropertyName(String property) {
+	this.property = property;
+}
+/**
+ * @return Returns the value.
+ */
+public String getValue() {
+	return value;
+}
+/**
+ * @param value The value to set.
+ */
+public void setValue(String value) {
+	this.value = value;
+}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/dialogs/ExistingConnectionProfilesDialogPage.java b/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/dialogs/ExistingConnectionProfilesDialogPage.java
new file mode 100644
index 0000000..98b8973
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/dialogs/ExistingConnectionProfilesDialogPage.java
@@ -0,0 +1,423 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004, 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.dse.dialogs;
+
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Vector;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.ui.ProfileImageRegistry;
+import org.eclipse.datatools.connectivity.ui.actions.AddProfileViewAction;
+import org.eclipse.datatools.connectivity.ui.actions.DeleteAction;
+import org.eclipse.datatools.connectivity.ui.actions.ViewPropertyAction;
+import org.eclipse.datatools.connectivity.ui.dse.DSEPlugin;
+import org.eclipse.jface.dialogs.DialogPage;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.swt.widgets.Widget;
+import org.eclipse.ui.forms.widgets.ExpandableComposite;
+
+public class ExistingConnectionProfilesDialogPage extends DialogPage implements
+		Listener {
+	private Button newConnectionButton;
+
+	private Button editConnectionButton;
+
+	private Button deleteConnectionButton;
+
+	private Group existingConnectionsGroup;
+
+	private TreeViewer existingConnectionsList;
+
+	private Table connectionPropertiesTable;
+
+	private boolean isShowProperties;
+
+	private boolean isPropertiesSectionExpanded;
+
+	protected ExistingConnectionProfilesDialogPage(boolean isShowProperties,
+			boolean isPropertiesSectionExpanded) {
+		super();
+		this.isShowProperties = isShowProperties;
+		this.isPropertiesSectionExpanded = isPropertiesSectionExpanded;
+	}
+
+	protected ExistingConnectionProfilesDialogPage(String title,
+			boolean isShowProperties, boolean isPropertiesSectionExpanded) {
+		super(title);
+		this.isShowProperties = isShowProperties;
+		this.isPropertiesSectionExpanded = isPropertiesSectionExpanded;
+	}
+
+	protected ExistingConnectionProfilesDialogPage(String title,
+			ImageDescriptor image, boolean isShowProperties,
+			boolean isPropertiesSectionExpanded) {
+		super(title, image);
+		this.isShowProperties = isShowProperties;
+		this.isPropertiesSectionExpanded = isPropertiesSectionExpanded;
+	}
+
+	public void createControl(Composite parent) {
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridLayout layout = new GridLayout();
+		composite.setLayout(layout);
+		composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+		existingConnectionsGroup = new Group(composite, SWT.NONE);
+		existingConnectionsGroup
+				.setText(DSEPlugin
+						.getDefault()
+						.getResourceString(
+								"ExistingConnectionsDialogPage.ExistingConnections.group")); //$NON-NLS-1$
+		layout = new GridLayout();
+		layout.horizontalSpacing = 0;
+		existingConnectionsGroup.setLayout(layout);
+		GridData gd = new GridData(GridData.FILL_BOTH);
+		existingConnectionsGroup.setLayoutData(gd);
+
+		Composite existingListComposite = new Composite(
+				existingConnectionsGroup, SWT.NONE);
+		layout = new GridLayout();
+		layout.numColumns = 2;
+		layout.makeColumnsEqualWidth = false;
+		layout.verticalSpacing = 0;
+		layout.marginHeight = 0;
+		layout.marginWidth = 0;
+		existingListComposite.setLayout(layout);
+		existingListComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+		existingConnectionsList = new TreeViewer(existingListComposite,
+				SWT.BORDER | SWT.V_SCROLL);
+		gd = new GridData(GridData.FILL_BOTH);
+		existingConnectionsList.getTree().setLayoutData(gd);
+
+		Composite buttonComposite = new Composite(existingListComposite,
+				SWT.NONE);
+		layout = new GridLayout();
+		layout.horizontalSpacing = 0;
+		layout.marginHeight = 0;
+		layout.marginWidth = 0;
+		buttonComposite.setLayout(layout);
+		gd = new GridData();
+		gd.horizontalAlignment = SWT.END;
+		gd.verticalAlignment = SWT.TOP;
+		buttonComposite.setLayoutData(gd);
+
+		newConnectionButton = new Button(buttonComposite, SWT.NONE);
+		newConnectionButton.setText(DSEPlugin.getDefault().getResourceString(
+				"ExistingConnectionsDialogPage.Button.new")); //$NON-NLS-1$
+		gd = new GridData();
+		gd.widthHint = 80;
+		gd.horizontalAlignment = SWT.END;
+		gd.verticalAlignment = SWT.TOP;
+		newConnectionButton.setLayoutData(gd);
+
+		editConnectionButton = new Button(buttonComposite, SWT.NONE);
+		editConnectionButton.setText(DSEPlugin.getDefault().getResourceString(
+				"ExistingConnectionsDialogPage.Button.edit")); //$NON-NLS-1$
+		gd = new GridData();
+		gd.widthHint = 80;
+		gd.horizontalAlignment = SWT.END;
+		gd.verticalAlignment = SWT.TOP;
+		editConnectionButton.setLayoutData(gd);
+
+		deleteConnectionButton = new Button(buttonComposite, SWT.NONE);
+		deleteConnectionButton.setText(DSEPlugin.getDefault()
+				.getResourceString(
+						"ExistingConnectionsDialogPage.Button.delete")); //$NON-NLS-1$
+		gd = new GridData();
+		gd.widthHint = 80;
+		gd.horizontalAlignment = SWT.END;
+		gd.verticalAlignment = SWT.TOP;
+		deleteConnectionButton.setLayoutData(gd);
+
+		if (isShowProperties) {
+			ExpandableComposite expandableComposite = new ExpandableComposite(
+					existingConnectionsGroup,
+					ExpandableComposite.SHORT_TITLE_BAR
+							| ExpandableComposite.TWISTIE);
+			expandableComposite.setText(DSEPlugin.getDefault()
+					.getResourceString(
+							"ExistingConnectionsDialogPage.Properties.label"));
+			expandableComposite.setExpanded(isPropertiesSectionExpanded);
+			layout = new GridLayout();
+			expandableComposite.setLayout(layout);
+			gd = new GridData(GridData.FILL_BOTH);
+			gd.minimumHeight = 170;
+			expandableComposite.setLayoutData(gd);
+			if (expandableComposite.getVerticalBar() != null) {
+				expandableComposite.getVerticalBar().setVisible(false);
+			}
+			if (expandableComposite.getHorizontalBar() != null) {
+				expandableComposite.getHorizontalBar().setVisible(false);
+			}
+
+			connectionPropertiesTable = new Table(expandableComposite,
+					SWT.BORDER);
+			gd = new GridData(GridData.FILL_BOTH);
+			connectionPropertiesTable.setLayoutData(gd);
+			connectionPropertiesTable.setLinesVisible(true);
+			connectionPropertiesTable.setHeaderVisible(true);
+
+			expandableComposite.setClient(connectionPropertiesTable);
+
+			TableColumn tc1 = new TableColumn(connectionPropertiesTable,
+					SWT.NONE);
+			tc1.setText(DSEPlugin.getDefault().getResourceString(
+					"ExistingConnectionsDialogPage.Property.columnHeader")); //$NON-NLS-1$
+			tc1.setResizable(true);
+			tc1.setWidth(140);
+
+			TableColumn tc2 = new TableColumn(connectionPropertiesTable,
+					SWT.NONE);
+			tc2.setText(DSEPlugin.getDefault().getResourceString(
+					"ExistingConnectionsDialogPage.Value.columnHeader")); //$NON-NLS-1$
+			tc2.setResizable(true);
+			tc2.setWidth(250);
+		}
+		initializeDialogUnits(composite);
+
+		newConnectionButton.addListener(SWT.Selection, this);
+		editConnectionButton.addListener(SWT.Selection, this);
+		deleteConnectionButton.addListener(SWT.Selection, this);
+		existingConnectionsList.getTree().addListener(SWT.Selection, this);
+
+		initializeValues();
+	}
+
+	public void handleEvent(Event event) {
+		Widget source = event.widget;
+		if (source == newConnectionButton) {
+			newConnection();
+		} else if (source == editConnectionButton) {
+			editConnection();
+		} else if (source == deleteConnectionButton) {
+			deleteConnection();
+		} else if (source == existingConnectionsList.getTree()) {
+			updateConnectionProperties();
+			updateButtonEnablement();
+		}
+	}
+
+	/**
+	 * Returns the list of existing connections to display to the user. Override
+	 * this method to provide a filtered list of connections.
+	 * 
+	 * @return An array of IConnectionProfile objects that should be displayed
+	 *         in the existing connections list
+	 */
+	protected IConnectionProfile[] getConnectionsToDisplay() {
+		return ProfileManager.getInstance().getProfiles(false);
+	}
+
+	protected void initializeValues() {
+		existingConnectionsList.getTree().removeAll();
+		IConnectionProfile[] connectionProfiles = getConnectionsToDisplay();
+		if (connectionProfiles != null) {
+			Hashtable existingConnections = new Hashtable();
+			Iterator connections = Arrays.asList(connectionProfiles).iterator();
+			IConnectionProfile connection;
+			while (connections.hasNext()) {
+				connection = (IConnectionProfile) connections.next();
+				existingConnections.put(connection.getName(), connection);
+			}
+			Object[] sortedNames = this.sortItems(existingConnections.keySet()
+					.toArray());
+			for (int index = 0; index < sortedNames.length; index++) {
+				String name = (String) sortedNames[index];
+				IConnectionProfile profile = (IConnectionProfile) existingConnections
+						.get(name);
+				TreeItem item = new TreeItem(existingConnectionsList.getTree(),
+						SWT.NONE);
+				item.setText(name);
+				item.setData(existingConnections.get(name));
+				item.setImage(ProfileImageRegistry.getInstance()
+						.getProfileImage(profile.getProvider()));
+			}
+		}
+		updateConnectionProperties();
+		updateButtonEnablement();
+	}
+
+	private Object[] sortItems(Object[] names) {
+		Arrays.sort(names, new Comparator() {
+			public int compare(Object arg0, Object arg1) {
+				int result = -1;
+				if ((arg0 != null) && (arg1 != null)) {
+					result = ((String) arg0).compareToIgnoreCase((String) arg1);
+				}
+				return result;
+			}
+		});
+		return names;
+	}
+
+	private void updateButtonEnablement() {
+		if (existingConnectionsList.getTree().getSelectionCount() > 0) {
+			editConnectionButton.setEnabled(true);
+			deleteConnectionButton.setEnabled(true);
+		} else {
+			editConnectionButton.setEnabled(false);
+			deleteConnectionButton.setEnabled(false);
+		}
+	}
+
+	private void updateConnectionProperties() {
+		if (connectionPropertiesTable != null) {
+			connectionPropertiesTable.removeAll();
+			if (existingConnectionsList.getTree().getSelectionCount() > 0) {
+				IConnectionProfile selectedConnection = (IConnectionProfile) existingConnectionsList
+						.getTree().getSelection()[0].getData();
+				if (selectedConnection != null) {
+					ConnectionDisplayProperty[] properties = getConnectionDisplayProperties(selectedConnection);
+					if (properties != null) {
+						int propertyCount = properties.length;
+						for (int index = 0; index < propertyCount; index++) {
+							TableItem tableItem = new TableItem(
+									connectionPropertiesTable, SWT.NONE);
+							tableItem.setText(new String[] {
+									properties[index].getPropertyName(),
+									properties[index].getValue() });
+						}
+					}
+				}
+			}
+		}
+	}
+
+	private ConnectionDisplayProperty[] getConnectionDisplayProperties(
+			IConnectionProfile connectionProfile) {
+		ConnectionDisplayProperty[] properties = null;
+		Vector propertiesCollection = new Vector();
+
+		propertiesCollection.add(new ConnectionDisplayProperty(DSEPlugin
+				.getDefault().getResourceString(
+						"ExistingConnectionsDialogPage.PropertyName.name"), //$NON-NLS-1$
+				connectionProfile.getName()));
+		propertiesCollection
+				.add(new ConnectionDisplayProperty(
+						DSEPlugin
+								.getDefault()
+								.getResourceString(
+										"ExistingConnectionsDialogPage.PropertyName.description"), //$NON-NLS-1$
+						connectionProfile.getDescription()));
+		propertiesCollection.add(new ConnectionDisplayProperty(DSEPlugin
+				.getDefault().getResourceString(
+						"ExistingConnectionsDialogPage.PropertyName.category"), //$NON-NLS-1$
+				connectionProfile.getCategory().getName()));
+		properties = new ConnectionDisplayProperty[propertiesCollection.size()];
+		propertiesCollection.toArray(properties);
+
+		properties = updateConnectionDisplayProperties(connectionProfile,
+				properties);
+		return properties;
+	}
+
+	/**
+	 * Returns an array of connection properties to display. Override this
+	 * method to provide a custom set of properties.
+	 * 
+	 * @return An array of IConnectionProfile objects that should be displayed
+	 *         in the existing connections list
+	 */
+	protected ConnectionDisplayProperty[] updateConnectionDisplayProperties(
+			IConnectionProfile connectionProfile,
+			ConnectionDisplayProperty[] defaultDisplayProperties) {
+		return defaultDisplayProperties;
+	}
+
+	public void setVisible(boolean visible) {
+		super.setVisible(visible);
+		if (visible) {
+			initializeValues();
+			existingConnectionsList.getTree().setFocus();
+		}
+	}
+
+	/**
+	 * Returns either the existing connection selected by the user or null.
+	 * 
+	 * @return An IConnectionProfile object representing the users selection in
+	 *         the list
+	 */
+	public IConnectionProfile getSelectedConnection() {
+		IConnectionProfile connection = null;
+
+		if (existingConnectionsList.getTree().getSelectionCount() > 0) {
+			connection = (IConnectionProfile) existingConnectionsList.getTree()
+					.getSelection()[0].getData();
+		}
+		return connection;
+	}
+
+	/**
+	 * Sets the selection in the list of connections.
+	 */
+	public void setDefaultConnection(String connectionName) {
+		TreeItem[] items = existingConnectionsList.getTree().getItems();
+		TreeItem foundItem = findTreeItemByName(items, connectionName);
+		if (foundItem != null) {
+			existingConnectionsList.getTree().setSelection(foundItem);
+			updateConnectionProperties();
+		}
+	}
+
+	private TreeItem findTreeItemByName(TreeItem[] items, String name) {
+		TreeItem result = null;
+		for (int index = 0; index < items.length; index++) {
+			if (name.equals(items[index].getText())) {
+				result = items[index];
+				break;
+			}
+		}
+		return result;
+	}
+
+	protected void newConnection() {
+		AddProfileViewAction newConnectionProfileAction = new AddProfileViewAction(
+				(String) null);
+		newConnectionProfileAction.selectionChanged(null, null);
+		newConnectionProfileAction.run(null);
+		this.initializeValues();
+	}
+
+	private void editConnection() {
+		ViewPropertyAction editConnectionProfileAction = new ViewPropertyAction(
+				existingConnectionsList);
+		editConnectionProfileAction.run();
+		this.initializeValues();
+	}
+
+	private void deleteConnection() {
+		DeleteAction deleteConnectionProfileAction = new DeleteAction();
+		deleteConnectionProfileAction.selectionChanged(
+				deleteConnectionProfileAction, existingConnectionsList
+						.getSelection());
+		deleteConnectionProfileAction.run();
+		this.initializeValues();
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/dialogs/ProfileSelectionComposite.java b/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/dialogs/ProfileSelectionComposite.java
new file mode 100644
index 0000000..89e697a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/dialogs/ProfileSelectionComposite.java
@@ -0,0 +1,341 @@
+/*******************************************************************************
+ * Copyright (c) 2005-2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.dse.dialogs;
+
+import java.util.HashMap;
+import java.util.Iterator;
+
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IPropertySetChangeEvent;
+import org.eclipse.datatools.connectivity.IPropertySetListener;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.navigator.CommonViewer;
+
+/**
+ * Composite that hosts the DSE that can be used in a variety of 
+ * ways. Currently we host the composite on a dialog, but it could
+ * also be used on a property, preference, or wizard page where
+ * needed.
+ * 
+ * @author brianf
+ */
+public class ProfileSelectionComposite {
+	
+	// Database category ID
+	public static String JDBC_CATEGORY = "org.eclipse.datatools.connectivity.db.category"; //$NON-NLS-1$
+
+	// Initial profile name for selection
+	protected String _profile = null;
+    
+    // Initial category ID to filter profiles with
+    protected String _category = null;
+    
+    // Hosted dialog page
+    protected ProfileSelectionDialogPage page = null;
+
+    // custom filter for viewer contents
+    protected ViewerFilter _filter;
+    
+    // listener variables
+    protected HashMap _connectListeners = null;
+    protected boolean _listenersInited = false;
+    protected ListenerList changeListeners;
+
+    /**
+     * Simple Constructor
+     * @param parent
+     * @param style
+     */
+    public ProfileSelectionComposite(Composite parent, int style) {
+    	this(parent, style, null);
+    }
+
+    /**
+     * Constructor with category ID to narrow the profile list
+     * @param parent
+     * @param style
+     * @param category
+     */
+    public ProfileSelectionComposite(Composite parent, int style, String category) {
+    	this(parent, style, category, true, true, true, false, true);
+    }
+    
+    /**
+     * Constructor with category ID and setting to either show
+     * or hide profile contents.
+     * @param parent
+     * @param style
+     * @param category
+     * @param limitToProfiles
+     */
+    public ProfileSelectionComposite(Composite parent, int style, String category, boolean limitToProfiles) {
+    	this(parent, style, category, limitToProfiles, true, true, false);
+    }
+    
+    public ProfileSelectionComposite(Composite parent, int style, String category, boolean limitToProfiles, boolean canNew, boolean canConnect, boolean canSelect) {
+    	this(parent, style, category, limitToProfiles, canNew, canConnect, canSelect, true);
+    }
+    /**
+     * Constructor 
+     * @param parent
+     * @param style
+     * @param category - category ID to filter
+     * @param limitToProfiles - indicate whether to show or hide profile contents
+     * @param canNew - indicate whether user can create a new profile or not
+     * @param canConnect - indicate whether user can connect/disconnect profiles
+     * @param canSelect - indicate whether user can select one or more profiles
+     */
+    public ProfileSelectionComposite(Composite parent, int style, String category, boolean limitToProfiles, boolean canNew, boolean canConnect, boolean canSelect, boolean createNow) {
+        _connectListeners = new HashMap();
+        changeListeners = new ListenerList();
+        
+    	this.setCategory(category);
+    	((ProfileSelectionDialogPage)getPage()).setLimitToProfiles(limitToProfiles);
+    	getPage().setShowConnect(canConnect);
+    	getPage().setShowNew(canNew);
+    	getPage().setShowSelectButtons(canSelect);
+    	
+    	if (createNow) {
+    		getPage().createControl(parent, false, false);
+    	
+    		IConnectionProfile profile = null;
+    		if (this._profile != null)
+    			profile = ProfileManager.getInstance().getProfileByName(this._profile);
+    		
+    		((ProfileSelectionDialogPage)getPage()).init( profile, null, this._filter, getCategoryObject());
+    	}
+	}
+
+	/**
+	 * Set up listeners for selection changes 
+	 */
+	private void initListeners() {
+        final CommonViewer viewer = (CommonViewer) getPage().getNavigatorViewer();
+        viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+
+			public void selectionChanged(SelectionChangedEvent event) {
+				StructuredSelection selection = (StructuredSelection) event.getSelection();
+				if (selection.getFirstElement() instanceof IConnectionProfile) {
+					IConnectionProfile profile = (IConnectionProfile) selection.getFirstElement();
+					if (_connectListeners.get(profile) == null) {
+						IPropertySetListener listener = new IPropertySetListener() {
+							public void propertySetChanged(IPropertySetChangeEvent event) {
+								if (IConnectionProfile.CONNECTION_PROFILE_PROPERTY_SET.equals(event
+										.getPropertySetType())
+										&& event
+												.getChangedProperty(IConnectionProfile.CONNECTION_STATE_PROPERTY_ID) != null) {
+									initListboxContent();
+								}
+							}
+						};
+						profile.addPropertySetListener(listener);
+						_connectListeners.put(profile, listener);
+					}
+					if (_listenersInited) {
+						if (ProfileSelectionComposite.this._profile != profile.getName()) {
+							ProfileSelectionComposite.this._profile = profile.getName();
+							fireChangedEvent(ProfileSelectionComposite.this);
+						}
+					}
+				}
+				validate();
+			}
+		});
+        _listenersInited = true;
+    }
+    
+    /**
+     * Create the dialog page being hosted
+     * @return
+     */
+    public ProfileSelectionDialogPage createProfileDatabaseSelectionDialogPage()
+    {
+        return new ProfileSelectionDialogPage(
+                "Property Page Title"); //$NON-NLS-1$ //$NON-NLS-2$
+    }
+
+    /**
+     * Set the category ID to filter the viewer to
+     * @param category
+     */
+    public void setCategory ( String category ) {
+    	this._category = category;
+    }
+    
+    /**
+     * Return the category ID
+     * @return
+     */
+    public String getCategory() {
+    	return this._category;
+    }
+    
+    /**
+     * Get the category object
+     * @return
+     */
+    protected ICategory getCategoryObject() {
+    	if (this._category != null)
+    		return ProfileManager.getInstance().getCategory(this._category);
+    	return null;
+    }
+
+    /**
+     * Return the underlying dialog page the composite is hosting
+     * @return
+     */
+    public ProfileSelectionDialogPage getPage() {
+    	if (this.page == null)
+        	this.page = createProfileDatabaseSelectionDialogPage();
+    	return this.page;
+    }
+
+	/**
+	 * Set up the viewer
+	 */
+	public void fillInDefaultValues()
+    {
+   		initListboxContent();
+		if (!_listenersInited) {
+			initListeners();
+		}
+   		validate();
+    }
+
+	/**
+	 * Initialize the selection
+	 */
+	protected void initListboxContent() {
+		final TreeViewer viewer = (TreeViewer)getPage().getNavigatorViewer();
+		Display.getCurrent().syncExec(new Runnable() {
+
+			public void run() {
+				viewer.refresh();
+				if (getPage().getLimitToProfiles()) 
+					viewer.expandAll();
+			}
+		});
+		Display.getCurrent().readAndDispatch();
+		if (this._profile != null) {
+			Display.getCurrent().syncExec(new Runnable() {
+
+				public void run() {
+					IConnectionProfile profile = 
+						ProfileManager.getInstance().getProfileByName(_profile);
+					getPage().select(profile);
+				}
+			});
+		}
+	}
+
+	/**
+	 * Returns the profile name
+	 * @return
+	 */
+	public String getCPName() {
+		return this._profile;
+	}
+	
+	/**
+	 * Set the profile name if we are to set an 
+	 * initial selection
+	 * @param input
+	 */
+	public void setCPName ( String input ) {
+		this._profile = input;
+	}
+
+	/**
+	 * Returns the custom filter
+	 * @return
+	 */
+	public ViewerFilter getCustomFilter() {
+		return this._filter;
+	}
+	
+	/**
+	 * Set a custom filter for viewer contents
+	 * @param input
+	 */
+	public void setCustomFilter ( ViewerFilter input ) {
+		this._filter = input;
+	}
+
+	/**
+	 * Validate the selection
+	 * @return
+	 */
+	protected boolean validate() {
+		boolean hasProfile = false;
+		if (_profile != null && _profile.trim().length() > 0) {
+			hasProfile = true;
+		}
+		getPage().validate();
+		return hasProfile;
+	}
+	
+	/**
+	 * Dispose of connect listeners
+	 */
+	public void dispose() {
+		if (!this._connectListeners.isEmpty()) {
+			Iterator profileIter = this._connectListeners.keySet().iterator();
+			while (profileIter.hasNext()) {
+				IConnectionProfile profile = (IConnectionProfile) profileIter.next();
+				profile.removePropertySetListener((IPropertySetListener) this._connectListeners.get(profile));
+			}
+		}
+	}
+	
+	/**
+	 * If we changed, fire a changed event.
+	 * 
+	 * @param source
+	 */
+	private void fireChangedEvent(Object source) {
+		ChangeEvent e = new ChangeEvent(source);
+		// inform any listeners of the resize event
+		Object[] listeners = this.changeListeners.getListeners();
+		for (int i = 0; i < listeners.length; ++i) {
+			((ChangeListener) listeners[i]).stateChanged(e);
+		}
+	}
+
+	/**
+	 * Add a change listener
+	 * 
+	 * @param listener
+	 */
+	public void addChangeListener(ChangeListener listener) {
+		this.changeListeners.add(listener);
+	}
+
+	/**
+	 * Remove a change listener.
+	 * 
+	 * @param listener
+	 */
+	public void removeChangeListener(ChangeListener listener) {
+		this.changeListeners.remove(listener);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/dialogs/ProfileSelectionDialog.java b/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/dialogs/ProfileSelectionDialog.java
new file mode 100644
index 0000000..32ade9f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/dialogs/ProfileSelectionDialog.java
@@ -0,0 +1,202 @@
+/*******************************************************************************
+ * Copyright (c) 2005-2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.dse.dialogs;
+
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.eclipse.datatools.connectivity.ui.dse.DSEPlugin;
+import org.eclipse.datatools.connectivity.ui.dse.IHelpContextsConnectivityUIDSE;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.help.IContextProvider;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.TitleAreaDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * Dialog to allow others to select a profile.
+ * @author brianf
+ */
+public class ProfileSelectionDialog extends TitleAreaDialog 
+	implements IContextProvider {
+
+    private String _profile;
+    private String _category;
+	private boolean _limitToProfiles = true;
+	private boolean mShowNew = true;
+	private boolean mShowConnect = true;
+	private boolean mShowSelectButtons = false;
+    
+	private ContextProviderDelegate contextProviderDelegate =
+		new ContextProviderDelegate(DSEPlugin.getDefault().getBundle().getSymbolicName());
+
+	private ProfileSelectionComposite composite = null;
+
+    /**
+     * Constructor
+     * @param parentShell
+     */
+    public ProfileSelectionDialog(Shell parentShell) {
+        super(parentShell);
+        setShellStyle( getShellStyle() | SWT.RESIZE );
+        parentShell.setData( HelpUtil.CONTEXT_PROVIDER_KEY, this);
+        HelpUtil.setHelp(parentShell, HelpUtil.getContextId(IHelpContextsConnectivityUIDSE.PROFILE_SELECTION_DIALOG, DSEPlugin.getDefault().getBundle().getSymbolicName()));
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
+     */
+    protected void configureShell(Shell shell)
+    {
+        super.configureShell(shell);
+        shell.setText(DSEPlugin.getDefault().getResourceString("ProfileSelectionDialog.Dialog.Title")); //$NON-NLS-1$
+    }
+
+	/*
+     * (non-Javadoc)
+     * 
+     * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+     */
+	protected Control createDialogArea(Composite parent) {
+        setTitle(DSEPlugin.getDefault().getResourceString("ProfileSelectionDialog.Title")); //$NON-NLS-1$
+        setMessage(DSEPlugin.getDefault().getResourceString("ProfileSelectionDialog.Message")); //$NON-NLS-1$
+
+        Composite container = new Composite(parent, SWT.NULL);
+        final GridLayout gridLayout = new GridLayout();
+        gridLayout.horizontalSpacing = 0;
+        gridLayout.marginWidth = 0;
+        gridLayout.marginHeight = 0;
+        container.setLayout(gridLayout);
+        
+        container.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+        composite = new ProfileSelectionComposite (container, SWT.NONE, _category, _limitToProfiles, this.mShowNew, this.mShowConnect, this.mShowSelectButtons);
+        composite.setCPName(_profile);
+        
+        fillInDefaultValues();
+        
+        if (!mShowConnect)
+        	composite.getPage().getNavigatorViewer().expandAll();
+
+		return container;
+    }
+	
+	protected ProfileSelectionComposite getComposite() {
+		return this.composite;
+	}
+
+	public void fillInDefaultValues()
+    {
+		getComposite().fillInDefaultValues();
+   		initListeners();
+   		validate();
+    }
+
+    private void initListeners() {
+    	getComposite().addChangeListener(new MyChangeListener());
+    }
+	/**
+	 * Returns the profile name
+	 * @return
+	 */
+	public String getCPName() {
+		return this._profile;
+	}
+	public void setCPName ( String input ) {
+		this._profile = input;
+	}
+	
+	public String getCategoryName() {
+		return this._category;
+	}
+	public void setCategoryName ( String input ) {
+		this._category = input;
+	}
+
+	public void setLimitToProfiles ( boolean flag ) {
+		this._limitToProfiles = flag;
+	}
+	public boolean getLimitToProfiles() {
+		return this._limitToProfiles;
+	}
+
+	public void setShowNew ( boolean flag ) {
+		this.mShowNew = flag;
+	}
+	public boolean getShowNew () {
+		return this.mShowNew;
+	}
+	public void setShowConnect ( boolean flag ) {
+		this.mShowConnect = flag;
+	}
+	public boolean getShowConnect() {
+		return this.mShowConnect;
+	}
+	public void setShowSelectButtons ( boolean flag ) {
+		this.mShowSelectButtons = flag;
+	}
+	public boolean getShowSelectButtons() {
+		return this.mShowSelectButtons;
+	}
+
+	protected void validate() {
+	    Runnable torun = new Runnable() {
+            public void run() {
+        		boolean hasProfile = false;
+        		if (_profile != null && _profile.trim().length() > 0) {
+        			hasProfile = true;
+        		}
+        		Button btn = getButton(IDialogConstants.OK_ID);
+        		if (btn != null && hasProfile) {
+        			btn.setEnabled(true);
+        		}
+        		else if (btn != null)
+        			btn.setEnabled(false);
+            }		        
+	    };
+	    Display.getDefault().asyncExec(torun);
+	}
+
+	public boolean close() {
+		this.getComposite().dispose();
+		return super.close();
+	}
+	
+	private class MyChangeListener implements ChangeListener {
+
+		public void stateChanged(ChangeEvent arg0) {
+			ProfileSelectionDialog.this._profile = ProfileSelectionDialog.this.getComposite().getCPName();
+		}
+		
+	}
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/dialogs/ProfileSelectionDialogPage.java b/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/dialogs/ProfileSelectionDialogPage.java
new file mode 100644
index 0000000..b098b50
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/dialogs/ProfileSelectionDialogPage.java
@@ -0,0 +1,858 @@
+/*******************************************************************************
+ * Copyright (c) 2005-2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.dse.dialogs;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.IConnectionFactoryProvider;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IPropertySetChangeEvent;
+import org.eclipse.datatools.connectivity.IPropertySetListener;
+import org.eclipse.datatools.connectivity.ProfileConnectionManager;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.ui.actions.AddProfileViewAction;
+import org.eclipse.datatools.connectivity.ui.actions.ConnectAction;
+import org.eclipse.datatools.connectivity.ui.actions.DisconnectAction;
+import org.eclipse.datatools.connectivity.ui.dse.DSEPlugin;
+import org.eclipse.datatools.connectivity.ui.dse.dialogs.filters.DownToProfilesOnlyFilter;
+import org.eclipse.datatools.connectivity.ui.dse.dialogs.filters.ProfileCategoryFilter;
+import org.eclipse.datatools.connectivity.ui.navigator.ConnectionProfileContentProvider;
+import org.eclipse.datatools.connectivity.ui.navigator.ConnectionProfileSorter;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.dialogs.DialogPage;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.ui.actions.ActionContext;
+import org.eclipse.ui.actions.ActionGroup;
+import org.eclipse.ui.actions.SelectionProviderAction;
+import org.eclipse.ui.navigator.CommonViewer;
+import org.eclipse.ui.navigator.INavigatorContentExtension;
+import org.eclipse.ui.navigator.INavigatorContentService;
+
+/**
+ * Dialog page that can be hosted in a variety of places to
+ * show the DSE view.
+ * 
+ * @author rcernich, brianf
+ */
+public class ProfileSelectionDialogPage extends
+	DialogPage implements IPropertySetListener {
+
+	// holds the view to a minimum size
+	private static final int MIN_VIEWER_ELEMENTS = 4;
+
+	// title and icon for area
+	public static final String TITLE = null;
+	public static final ImageDescriptor ICON_DESC = null;
+	
+	// initial object to be selected
+    protected Object mInitialSelection;
+	private ICategory mCategory;
+    
+    // profile not selected (profile must be selected to be valid)
+    protected String mMissingEndpointReferenceString;
+
+    // viewer
+	private CommonViewer mViewer;
+	private ViewerFilter mFilter;
+	
+    // Connect and other actions
+    private ActionGroup mConnectActions;
+	private Button mConnect;
+	private Button mNew;
+	private Button mSelectAll;
+	private Button mDeselectAll;
+
+	// various settings
+	private boolean mShowNew = true;
+	private boolean mShowConnect = true;
+	private boolean mShowSelectButtons = true;
+	private boolean mLimitToProfiles = true;
+	private boolean inConnect = false;
+	private boolean doneConnect = false;
+	private boolean failedConnection = false;
+
+	/**
+	 * @param title
+	 * @param image
+	 * @param missingEndpointReferenceString
+	 */
+	public ProfileSelectionDialogPage() {
+		this(TITLE, ICON_DESC);
+	}
+	
+	public ProfileSelectionDialogPage( String title ) {
+		this( title, ICON_DESC);
+	}
+
+	/**
+	 * @param title
+	 * @param image
+	 */
+	public ProfileSelectionDialogPage(String title, ImageDescriptor image) {
+		super(title, image);
+		mMissingEndpointReferenceString = 
+			DSEPlugin.getDefault().getResourceString("ProfileSelectionDialogPage.validation.error"); //$NON-NLS-1$
+	}
+
+	/**
+	 * @param selection
+	 * @param endpointType
+	 * @param filter
+	 * @param category
+	 */
+	public void init(Object selection, Class endpointType, ViewerFilter filter,
+			ICategory category) {
+		mInitialSelection = selection;
+		mFilter = filter;
+		mCategory = category;
+		initControls();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+	 */
+	public void createControl(Composite parent) {
+		Composite content = new Composite(parent, SWT.NONE);
+		content.setLayout(new GridLayout(2, false));
+		content.setLayoutData(new GridData(GridData.FILL_BOTH));
+        
+        doCreateControl(content);
+        
+		initControls();
+
+		setControl(content);
+	}
+
+	/**
+	 * @param content
+	 */
+	protected void doCreateControl(Composite content) {
+		doCreateControl(content, false);
+	}
+	
+	/**
+	 * @param content
+	 * @param flag
+	 */
+	protected void doCreateControl(Composite content, boolean flag) {
+		doCreateControl(content, flag, true);
+	}
+	
+	/**
+	 * @param content
+	 * @param flag
+	 * @param multiSelect
+	 */
+	protected void doCreateControl(Composite content, boolean flag, boolean multiSelect) {
+		INavigatorContentService navigatorService = null;
+		
+		int styles = SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER ;
+		if (multiSelect)
+			styles = SWT.MULTI | styles;
+		else
+			styles = SWT.SINGLE | styles;
+		CommonViewer mCommonViewer = new CommonViewer(DSEPlugin.SERVERS_VIEW_VIEWER_ID, content, styles);			
+		mViewer = mCommonViewer;
+		navigatorService = mCommonViewer.getNavigatorContentService();			
+		
+		// Turn off categories.
+		if (mLimitToProfiles) {
+	        Set rootExtensions = navigatorService
+					.findRootContentExtensions(ProfileManager.getInstance());
+			for (Iterator iterator = rootExtensions.iterator(); iterator.hasNext();) {
+				INavigatorContentExtension extension = (INavigatorContentExtension) iterator
+						.next();
+				ITreeContentProvider provider = extension.getContentProvider();
+				if (extension.getContentProvider() instanceof ConnectionProfileContentProvider) {
+					((ConnectionProfileContentProvider) provider)
+							.setShowCategories(false);
+				}
+			}
+		}
+		
+		Object input = ProfileManager.getInstance();
+
+		final TreeViewer 	tViewer = mViewer;
+		final Object			mInput = input;
+        Display         		display = DSEPlugin.getDefault().getWorkbench().getDisplay();
+        display.syncExec(new Runnable() {
+            public void run() {
+            	if (mInput != null) {
+	            	tViewer.setInput(mInput);
+            	}
+            }
+        });
+        
+        mConnectActions = new ConnectActions();
+        hookContextMenu(mConnectActions);
+        
+		if (mFilter != null) {
+			mViewer.addFilter(mFilter);
+		}
+		
+        //		mViewer.setSorter(new SimpleViewerSorter());		
+		GridData data = new GridData(GridData.FILL_BOTH);
+		data.grabExcessHorizontalSpace = true;
+		data.grabExcessVerticalSpace = true;
+		data.horizontalSpan = 1;
+		data.verticalSpan = MIN_VIEWER_ELEMENTS;
+		data.heightHint = mViewer.getTree().getItemHeight()
+				* MIN_VIEWER_ELEMENTS;
+		mViewer.getControl().setLayoutData(data);
+
+		if (this.mShowConnect) {
+			mConnect = new Button(content, SWT.PUSH);
+			mConnect
+					.setText(DSEPlugin.getDefault().getResourceString("DSE.Connect.label")); //$NON-NLS-1$
+			GridData gridData = new GridData();
+			gridData.horizontalSpan = 1;
+			gridData.horizontalAlignment = SWT.FILL;
+			gridData.verticalAlignment = SWT.TOP;
+			mConnect.setLayoutData(gridData);
+			mConnect.setEnabled(false);
+			mConnect.addSelectionListener(new SelectionAdapter() {
+	
+				public void widgetSelected(SelectionEvent event) {
+					failedConnection = false;
+					handleConnect();
+				}
+			});
+		}
+		if (this.mShowNew) {
+			mNew = new Button(content, SWT.PUSH);
+			
+			mNew.setText(DSEPlugin.getDefault().getResourceString("ServersView.action.newCP")); //$NON-NLS-1$
+			
+			GridData gridData = new GridData();
+			gridData.horizontalSpan = 1;
+			gridData.horizontalAlignment = SWT.FILL;
+			gridData.verticalAlignment = SWT.TOP;
+			mNew.setLayoutData(gridData);
+			mNew.addSelectionListener(new SelectionAdapter() {
+	
+				public void widgetSelected(SelectionEvent event) {
+					handleNew();
+				}
+			});
+		}
+		if ( this.mShowSelectButtons ){
+			mSelectAll = new Button(content, SWT.PUSH);
+			mSelectAll.setText(DSEPlugin.getDefault().getResourceString("DSE.SelectAll.label")); //$NON-NLS-1$
+			GridData gridData = new GridData();
+			gridData.horizontalSpan = 1;
+			gridData.horizontalAlignment = SWT.FILL;
+			gridData.verticalAlignment = SWT.TOP;
+			mSelectAll.setLayoutData(gridData);
+			mSelectAll.addSelectionListener(new SelectionAdapter() {
+	
+				public void widgetSelected(SelectionEvent event) {
+					selectAll();
+				}
+			});
+
+			mDeselectAll = new Button(content, SWT.PUSH);
+			mDeselectAll.setText(DSEPlugin.getDefault().getResourceString("DSE.DeselectAll.label")); //$NON-NLS-1$
+			gridData = new GridData();
+			gridData.horizontalSpan = 1;
+			gridData.horizontalAlignment = SWT.FILL;
+			gridData.verticalAlignment = SWT.TOP;
+			mDeselectAll.setLayoutData(gridData);
+			mDeselectAll.addSelectionListener(new SelectionAdapter() {
+	
+				public void widgetSelected(SelectionEvent event) {
+					unselectAll();
+				}
+			});
+		}
+		
+		mViewer.setSorter(new ConnectionProfileSorter());
+	}
+
+	/**
+	 * set up the controls... 
+	 */
+	protected void initControls() {
+		if (mViewer == null) {
+			return;
+		}
+		if (mInitialSelection != null) {
+			mViewer.setSelection(new StructuredSelection(mInitialSelection));
+			mViewer.getTree().showSelection();
+			if (mViewer.getTree().getItemCount() == 1 && this.mShowConnect) {
+				handleConnect();
+			}
+		}
+		else {
+			validate();
+		}
+
+		setErrorMessage(null);
+
+		boolean hasFilter = false;
+		if (this.mFilter != null) {
+			hasFilter = true;
+			((StructuredViewer)this.mViewer).removeFilter(this.mFilter);
+			((StructuredViewer)this.mViewer).addFilter(this.mFilter);
+		}
+		
+		if (this.mCategory != null) {
+			hasFilter = true;
+			ProfileCategoryFilter categoryFilter = new ProfileCategoryFilter();
+			categoryFilter.setSelectedCategory(this.mCategory.getId());
+			mViewer.addFilter(categoryFilter);
+		}
+
+		if (mLimitToProfiles) {
+			hasFilter = true;
+			DownToProfilesOnlyFilter mProfileFilter =
+				new DownToProfilesOnlyFilter();
+			mViewer.addFilter(mProfileFilter);
+		}
+		
+		if (hasFilter)
+			mViewer.refresh();
+		
+		
+	}
+
+	/**
+	 * validate the selection
+	 */
+	public void validate() {
+		IStructuredSelection selection = (IStructuredSelection) mViewer
+				.getSelection();
+		String error = null;
+		if (selection == null || selection.isEmpty()) {
+			error = mMissingEndpointReferenceString;
+			if (mConnect != null)
+				mConnect.setEnabled(false);
+		}
+		else {
+			Object obj = selection.getFirstElement();
+			boolean isProfile = obj instanceof IConnectionProfile;
+			boolean isProfileDisConnected = isProfile && ((IConnectionProfile) obj).getConnectionState() == IConnectionProfile.DISCONNECTED_STATE;
+
+			if (isProfileDisConnected) {
+				if (mConnect != null)
+					mConnect.setEnabled(true);
+				if (mSelectAll != null)
+					mSelectAll.setEnabled(false);
+			}
+			else {
+				if (mConnect != null)
+					mConnect.setEnabled(false);
+				if (mSelectAll != null)
+					mSelectAll.setEnabled(true);
+			}
+			if (obj instanceof IConnectionProfile) {
+				((IConnectionProfile) obj).removePropertySetListener(this);
+				((IConnectionProfile) obj).addPropertySetListener(this);
+			}
+		}
+
+		setErrorMessage(error);
+//		setIsValid(error == null);
+	}
+
+	/**
+	 * @return
+	 */
+	public TreeViewer getNavigatorViewer() {
+		return mViewer;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.jface.dialogs.IDialogPage#dispose()
+	 */
+	public void dispose() {
+		// Make sure we remove ourself from the listener list to prevent widget
+		// disposed errors.
+		// It would be nice if we kept track of who we registered with, but
+		// I'm not sure if it's worth the effort. Use brute force in its stead.
+		for (Iterator it = Arrays.asList(
+				ProfileManager.getInstance().getProfiles()).iterator(); it
+				.hasNext();) {
+			((IConnectionProfile) it.next()).removePropertySetListener(this);
+		}
+		super.dispose();
+	}
+
+	/**
+	 * Connect
+	 */
+	public void handleConnect() {
+
+		inConnect = true;
+		doneConnect = false;
+		if (failedConnection)
+			return;
+		
+		final IStructuredSelection selection = (IStructuredSelection) mViewer
+				.getSelection();
+
+		final IConnectionProfile profile = (IConnectionProfile) selection.getFirstElement();
+		
+		if (profile != null ) {
+			
+			// Connect to the connection profile
+			Display.getCurrent().readAndDispatch();
+			IConnectionFactoryProvider factoryProvider = profile.getProvider().getConnectionFactory("java.sql.Connection");
+			if(factoryProvider !=null){
+				ProfileConnectionManager.getProfileConnectionManagerInstance().manageProfileConnection(profile, "org.eclipse.datatools.connectivity.sqm.core.connection.ConnectionInfo", this); //$NON-NLS-1$
+			}
+			if (profile.getConnectionState() != IConnectionProfile.CONNECTED_STATE) {
+				
+				try {
+					IRunnableWithProgress op = new IRunnableWithProgress(){
+
+						public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+							IStatus status = profile.connect();
+							switch (status.getSeverity()) {
+								case IStatus.OK:
+								case IStatus.INFO:
+								case IStatus.WARNING:
+									break;
+								case IStatus.ERROR:
+									failedConnection = true;
+									profile.disconnect();
+									break;
+							}
+							if (Display.getCurrent() != null) {
+								Display.getCurrent().readAndDispatch();
+								Display.getCurrent().syncExec(new Runnable() {
+	
+									public void run() {
+										mConnect.setEnabled(((IConnectionProfile) selection.getFirstElement())
+												.getConnectionState() != IConnectionProfile.CONNECTED_STATE);
+										inConnect = false;
+										doneConnect = true;
+					        			if (mViewer != null && !mViewer.getTree().isDisposed())
+					        				mViewer.getTree().setFocus();
+									}
+								});
+							}
+						}};
+				   new ProgressMonitorDialog(getControl().getShell()).run(true, false, op);
+				} catch (InvocationTargetException e) {
+				   // handle exception
+				} catch (InterruptedException e) {
+					failedConnection = true;
+				   profile.disconnect();
+				} finally {
+				}
+			}
+		}
+	}
+
+	/**
+	 * Create new profile
+	 */
+	public void handleNew() {
+		final IStructuredSelection selection = (IStructuredSelection) mViewer
+				.getSelection();
+
+		// Create a new connection profile
+		AddProfileViewAction newAction = new AddProfileViewAction(mCategory);
+		newAction.selectionChanged(null, selection);
+		if (this.mCategory != null)
+			newAction.setCategory(this.mCategory);
+		newAction.run(null);
+
+		mViewer.refresh();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.IPropertySetListener#propertySetChanged(org.eclipse.datatools.connectivity.IPropertySetChangeEvent)
+	 */
+	public void propertySetChanged(IPropertySetChangeEvent event) {
+		if (event.getChangedProperty(IConnectionProfile.CONNECTION_STATE_PROPERTY_ID) != null) {
+		    final IConnectionProfile profile = (IConnectionProfile) event.getConnectionProfile(); 
+		    Runnable torun = new Runnable() {
+                public void run() {
+        			if (profile != null && ((IConnectionProfile) profile).getConnectionState() != IConnectionProfile.CONNECTED_STATE) {
+        				if (mConnect != null && !mConnect.isDisposed() && !mConnect.isEnabled()) {
+        					mConnect.setEnabled(true);
+        				}
+        			}
+        			else {
+        				if (mConnect != null &&  !mConnect.isDisposed() && mConnect.isEnabled()) {
+        					mConnect.setEnabled(false);
+        				}
+        			}
+                }		        
+		    };
+		    Display.getDefault().asyncExec(torun);
+		}
+	}
+	
+	/**
+	 * @param flag
+	 */
+	public void setShowNew ( boolean flag ) {
+		this.mShowNew = flag;
+	}
+	/**
+	 * @return
+	 */
+	public boolean getShowNew () {
+		return this.mShowNew;
+	}
+	/**
+	 * @param flag
+	 */
+	public void setShowConnect ( boolean flag ) {
+		this.mShowConnect = flag;
+	}
+	/**
+	 * @return
+	 */
+	public boolean getShowConnect() {
+		return this.mShowConnect;
+	}
+	/**
+	 * @param flag
+	 */
+	public void setShowSelectButtons ( boolean flag ) {
+		this.mShowSelectButtons = flag;
+	}
+	/**
+	 * @return
+	 */
+	public boolean getShowSelectButtons() {
+		return this.mShowSelectButtons;
+	}
+	/**
+	 * @param flag
+	 */
+	public void setLimitToProfiles ( boolean flag ) {
+		this.mLimitToProfiles = flag;
+	}
+	/**
+	 * @return
+	 */
+	public boolean getLimitToProfiles() {
+		return this.mLimitToProfiles;
+	}
+	/**
+	 * @return
+	 */
+	public boolean getInConnect() {
+		return this.inConnect;
+	}
+	/**
+	 * @return
+	 */
+	public boolean getDoneConnect() {
+		return this.doneConnect;
+	}
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+	 */
+	public void createControl(Composite parent, boolean flag) {
+		createControl(parent, flag, true);
+	}
+	
+	/**
+	 * @param parent
+	 * @param flag
+	 * @param multiSelect
+	 */
+	public void createControl(Composite parent, boolean flag, boolean multiSelect) {
+		Composite content = new Composite(parent, SWT.NONE);
+		content.setLayout(new GridLayout(2, false));
+		content.setLayoutData(new GridData(GridData.FILL_BOTH));
+        
+        doCreateControl(content, flag, multiSelect);
+        
+		setControl(content);
+
+		initControls();
+
+	}
+
+	/**
+	 * @param object
+	 */
+	public void setInput (Object object ) {
+		if (this.getNavigatorViewer() != null)
+			this.getNavigatorViewer().setInput(object);
+	}
+	
+	/**
+	 * @param profile
+	 */
+	public void select(IConnectionProfile profile) {
+		if ( profile != null ) {
+			this.mViewer.setSelection(new StructuredSelection(profile), true);
+		}
+	}
+
+	/**
+	 * Select all profiles
+	 */
+	public void selectAll(){
+		TreeViewer viewer = (TreeViewer) this.getNavigatorViewer();
+		viewer.getTree().selectAll();
+		validate();
+	}
+	
+	/**
+	 * Deselect all profiles
+	 */
+	public void unselectAll(){
+		TreeViewer viewer = (TreeViewer) this.getNavigatorViewer();
+		viewer.getTree().deselectAll();
+	}
+	
+	/**
+	 * @param str_list
+	 * @param token
+	 * @return
+	 */
+	public static String[] parseString(String str_list, String token) {
+		StringTokenizer tk = new StringTokenizer(str_list, token);
+		String[] pieces = new String[tk.countTokens()];
+		int index = 0;
+		while (tk.hasMoreTokens())
+			pieces[index++] = tk.nextToken();
+		return pieces;
+	}
+
+	/**
+	 * @return
+	 */
+	public IConnectionProfile[] getSelectedProfiles() {
+		return new IConnectionProfile[0];
+	}
+
+	/**
+	 * @param selectAllOnStartup
+	 * @return
+	 */
+	public IConnectionProfile[] getSelectedProfiles(boolean selectAllOnStartup) {
+		return new IConnectionProfile[0];
+	}
+	
+	/**
+	 * @return
+	 */
+	public boolean canConnect() {
+		if (this.mConnect != null) {
+			return this.mConnect.isEnabled();
+		}
+		return false;
+	}
+	
+	/**
+	 * @return
+	 */
+	public boolean canNew() {
+		if (this.mNew != null) {
+			return this.mNew.isEnabled();
+		}
+		return false;
+	}
+	
+	/**
+	 * @param flag
+	 */
+	public void setEnabled( boolean flag ) {
+		if (getNavigatorViewer() != null) {
+			getNavigatorViewer().getTree().setEnabled(flag);
+			if (flag) {
+				getNavigatorViewer().getTree().setBackground(getNavigatorViewer().getTree().getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
+			}
+			else {
+				getNavigatorViewer().getTree().setBackground(getNavigatorViewer().getTree().getDisplay().getSystemColor(SWT.COLOR_TITLE_INACTIVE_BACKGROUND));
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.sybase.stf.common.ui.dialogs.IDialogPage#performOk()
+	 */
+	public boolean performOk() {
+		return true;
+	}
+
+    /**
+     * Set context menu
+     * @param actionGroup
+     */
+    protected void hookContextMenu(ActionGroup actionGroup) {
+        MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$
+        menuMgr.setRemoveAllWhenShown(true);
+        menuMgr.addMenuListener(new IMenuListener() {
+
+            public void menuAboutToShow(IMenuManager mgr) {
+                IStructuredSelection selection = (IStructuredSelection) mViewer
+                        .getSelection();
+
+                // force selection changed event generation
+                // to update the enablement of menu items
+                mViewer.setSelection(selection);
+
+                ActionContext context = new ActionContext(selection);
+
+                mConnectActions.setContext(context);
+                mConnectActions.fillContextMenu(mgr);
+            }
+        });
+
+        Menu menu = menuMgr.createContextMenu(mViewer.getControl());
+
+        mViewer.getControl().setMenu(menu);
+    }
+
+    /**
+     * @author brianf
+     *
+     */
+    class ConnectActions extends ActionGroup {
+    	
+        IAction connectAction = new InternalConnectAction(mViewer);
+
+        IAction disconnectAction = new InternalDisconnectAction(mViewer);
+
+        /**
+         * @author brianf
+         *
+         */
+        class InternalConnectAction extends SelectionProviderAction {
+
+            IConnectionProfile connectionProfile;
+
+            /**
+             * @param provider
+             */
+            public InternalConnectAction(ISelectionProvider provider) {
+                super(provider, DSEPlugin.getDefault().getResourceString("DSE.Connect.label")); //$NON-NLS-1$
+            }
+
+            /**
+             * @see org.eclipse.jface.action.IAction#run()
+             */
+            public void run() {
+            	failedConnection = false;
+            	ConnectAction connectAction = new ConnectAction(mViewer.getTree().getShell());
+            	connectAction.selectionChanged(this, this.getSelection());
+            	connectAction.run(this);
+            }
+
+            /**
+             * @see org.eclipse.ui.actions.SelectionProviderAction#selectionChanged(IStructuredSelection)
+             */
+            public void selectionChanged(IStructuredSelection selection) {
+                if (!selection.isEmpty()) {
+                    Object obj = selection.getFirstElement();
+
+                    if (obj instanceof IConnectionProfile) {
+                        connectionProfile = (IConnectionProfile) obj;
+                        setEnabled(connectionProfile.getConnectionState() != IConnectionProfile.CONNECTED_STATE);
+                    }
+                }
+            }
+        }
+
+        /**
+         * @author brianf
+         *
+         */
+        class InternalDisconnectAction extends SelectionProviderAction {
+
+            IConnectionProfile connectionProfile;
+
+            /**
+             * @param provider
+             */
+            public InternalDisconnectAction(ISelectionProvider provider) {
+                super(provider, DSEPlugin.getDefault().getResourceString("DSE.Disconnect.label")); //$NON-NLS-1$
+            }
+
+            /**
+             * @see org.eclipse.jface.action.IAction#run()
+             */
+            public void run() {
+            	DisconnectAction disconnectAction = new DisconnectAction();
+            	disconnectAction.selectionChanged(this, this.getSelection());
+            	disconnectAction.run(this);
+            }
+
+            /**
+             * @see org.eclipse.ui.actions.SelectionProviderAction#selectionChanged(IStructuredSelection)
+             */
+            public void selectionChanged(IStructuredSelection selection) {
+                if (!selection.isEmpty()) {
+                    Object obj = selection.getFirstElement();
+
+                    if (obj instanceof IConnectionProfile) {
+                        connectionProfile = (IConnectionProfile) obj;
+                        setEnabled(connectionProfile.getConnectionState() != IConnectionProfile.DISCONNECTED_STATE);
+                    }
+                }
+            }
+        }
+
+        /* (non-Javadoc)
+         * @see org.eclipse.ui.actions.ActionGroup#fillContextMenu(org.eclipse.jface.action.IMenuManager)
+         */
+        public void fillContextMenu(IMenuManager menu) {
+            ActionContext context = getContext();
+
+            IStructuredSelection selection = (IStructuredSelection) context
+                    .getSelection();
+
+            if (!selection.isEmpty()) {
+                Object obj = selection.getFirstElement();
+
+                if (obj instanceof IConnectionProfile) {
+                	if (mShowConnect) {
+                		menu.add(connectAction);
+                		menu.add(disconnectAction);
+                	}
+                }
+            }
+        }
+     }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/dialogs/filters/DownToProfilesOnlyFilter.java b/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/dialogs/filters/DownToProfilesOnlyFilter.java
new file mode 100644
index 0000000..7f19cb7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/dialogs/filters/DownToProfilesOnlyFilter.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2005-2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package  org.eclipse.datatools.connectivity.ui.dse.dialogs.filters;
+
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ui.LocalRepositoryNode;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+
+/**
+ * Filters the DSE's viewer so only categories and profiles appear
+ * @author brianf
+ *
+ */
+public class DownToProfilesOnlyFilter extends ViewerFilter {
+
+	/**
+	 * Only show down to the category or profile node
+	 *  
+	 */
+	public boolean select(Viewer viewer, Object parentElement, Object element) {
+		if (element instanceof ICategory) {
+			return true;
+		}
+		else if (element instanceof IConnectionProfile) {
+			return true;
+		}
+		else if (element instanceof LocalRepositoryNode) {
+            return true;
+		}
+		return false;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/dialogs/filters/ProfileCategoryFilter.java b/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/dialogs/filters/ProfileCategoryFilter.java
new file mode 100644
index 0000000..cd5814f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/dialogs/filters/ProfileCategoryFilter.java
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package  org.eclipse.datatools.connectivity.ui.dse.dialogs.filters;
+
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+
+/**
+ * Only show a particular category of profiles
+ * @author brianf
+ *
+ */
+public class ProfileCategoryFilter extends ViewerFilter {
+
+	private String mCategory = null;
+	
+	/**
+	 * Only show particular category
+	 *  
+	 */
+	public boolean select(Viewer viewer, Object parentElement, Object element) {
+		if (element instanceof IConnectionProfile) {
+			boolean  retVal = false;
+			ICategory cat = ((IConnectionProfile) element).getProvider()
+					.getCategory();
+			
+			if (mCategory == null)
+				retVal = true;
+			
+			while (cat != null && mCategory != null) {
+				retVal = mCategory.equals(cat.getId());
+				if (retVal) break;
+				cat = cat.getParent();
+			}
+			
+			if (retVal) {
+				return true;
+			}
+		} else if (element instanceof ICategory) {
+			ICategory cat = (ICategory) element;
+			boolean retVal = false;
+			if (mCategory == null)
+				retVal = true;
+			while (cat != null && mCategory != null) {
+				retVal = mCategory.equals(cat.getId());
+				if (retVal)
+					break;
+				cat = cat.getParent();
+			}
+			if (retVal) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Set the category and get the ID from it
+	 * 
+	 * @param category
+	 */
+	public void setSelectedCategory (ICategory category) {
+		if (category != null)
+			this.mCategory = category.getId();
+	}
+
+	/**
+	 * Set the category ID string
+	 * @param category
+	 */
+	public void setSelectedCategory (String category) {
+		this.mCategory = category;
+	}
+	
+	/**
+	 * Get the currently set category ID string
+	 * @return
+	 */
+	public String getSelectedCategory() {
+		return this.mCategory;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/dnd/ConnectionProfileDropAssistant.java b/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/dnd/ConnectionProfileDropAssistant.java
new file mode 100644
index 0000000..10ac7ce
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/dnd/ConnectionProfileDropAssistant.java
@@ -0,0 +1,259 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.dse.dnd;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.ConnectionProfileException;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IManagedConnection;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileProvider;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepository;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepositoryConstants;
+import org.eclipse.datatools.connectivity.internal.ui.LocalRepositoryNode;
+import org.eclipse.datatools.connectivity.internal.ui.refactoring.ConnectionProfileCopyProcessor;
+import org.eclipse.datatools.connectivity.internal.ui.refactoring.ConnectionProfileMoveProcessor;
+import org.eclipse.datatools.connectivity.ui.RefreshProfileJob;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.ltk.core.refactoring.CheckConditionsOperation;
+import org.eclipse.ltk.core.refactoring.PerformRefactoringOperation;
+import org.eclipse.ltk.core.refactoring.participants.CopyRefactoring;
+import org.eclipse.ltk.core.refactoring.participants.MoveRefactoring;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.dnd.TransferData;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.navigator.CommonDropAdapter;
+import org.eclipse.ui.navigator.CommonDropAdapterAssistant;
+import org.eclipse.ui.navigator.CommonNavigator;
+import org.eclipse.ui.navigator.CommonViewer;
+import org.eclipse.ui.views.navigator.LocalSelectionTransfer;
+
+/**
+ * 
+ * @author tqiu
+ * 
+ * this class leverage CNF's built-in dnd support and simply used for DND
+ * connection profiles between different repositories
+ * 
+ */
+public class ConnectionProfileDropAssistant extends CommonDropAdapterAssistant {
+
+	private List mElements;
+
+	public IStatus handleDrop(CommonDropAdapter dropAdapter,
+			DropTargetEvent dropTargetEvent, Object target) {
+		if (LocalSelectionTransfer.getInstance().isSupportedType(
+				dropAdapter.getCurrentTransfer())) {
+			try {
+				switch (dropAdapter.getCurrentOperation()) {
+				case (DND.DROP_COPY):
+					handleDropCopy(target);
+					break;
+				case (DND.DROP_MOVE):
+					handleDropMove(target);
+					break;
+				}
+
+			}
+			catch (ConnectionProfileException e) {
+				e.printStackTrace();
+			}
+			catch (CoreException e) {
+				e.printStackTrace();
+			}
+
+		}
+
+		return Status.CANCEL_STATUS;
+	}
+
+	private void handleDropMove(Object target)
+			throws ConnectionProfileException, CoreException {
+		// handle move cp to Local Repository
+		if (target instanceof LocalRepositoryNode) {
+			PerformRefactoringOperation refOperation = new PerformRefactoringOperation(
+					new MoveRefactoring(new ConnectionProfileMoveProcessor(
+							(IConnectionProfile[]) mElements
+									.toArray(new IConnectionProfile[mElements
+											.size()]), ProfileManager
+									.getInstance())),
+					CheckConditionsOperation.ALL_CONDITIONS);
+
+			ResourcesPlugin.getWorkspace().run(refOperation, null);
+		}
+		// handle move cp to specific repository
+		else if (target instanceof IConnectionProfile) {
+			PerformRefactoringOperation refOperation = new PerformRefactoringOperation(
+					new MoveRefactoring(new ConnectionProfileMoveProcessor(
+							(IConnectionProfile[]) mElements
+									.toArray(new IConnectionProfile[mElements
+											.size()]), target)),
+					CheckConditionsOperation.ALL_CONDITIONS);
+
+			ResourcesPlugin.getWorkspace().run(refOperation, null);
+		}
+	}
+
+	private void handleDropCopy(Object target)
+			throws ConnectionProfileException, CoreException {
+		// handle copy cp to Local Repository
+		if (target instanceof LocalRepositoryNode) {
+			PerformRefactoringOperation refOperation = new PerformRefactoringOperation(
+					new CopyRefactoring(new ConnectionProfileCopyProcessor(
+							(IConnectionProfile[]) mElements
+									.toArray(new IConnectionProfile[mElements
+											.size()]), ProfileManager
+									.getInstance())),
+					CheckConditionsOperation.ALL_CONDITIONS);
+			ResourcesPlugin.getWorkspace().run(refOperation, null);
+		}
+		// handle copy cp to specific repository
+		else if (target instanceof IConnectionProfile) {
+			PerformRefactoringOperation refOperation = new PerformRefactoringOperation(
+					new CopyRefactoring(new ConnectionProfileCopyProcessor(
+							(IConnectionProfile[]) mElements
+									.toArray(new IConnectionProfile[mElements
+											.size()]), target)),
+					CheckConditionsOperation.ALL_CONDITIONS);
+			ResourcesPlugin.getWorkspace().run(refOperation, null);
+		}
+	}
+
+	public IStatus validateDrop(Object target, int operation,
+			TransferData transferType) {
+		IStatus result = Status.OK_STATUS;
+
+		if (LocalSelectionTransfer.getInstance().isSupportedType(transferType)) {
+
+			initializeSelection();
+
+			result = handleValidate(target, operation);
+		}
+
+		return result;
+	}
+
+	private IStatus handleValidate(Object target, int operation) {
+		//disallow dropping of repository data and dropping of profile data from read-only repository
+		for (Iterator iter = mElements.iterator(); iter.hasNext();) {
+			Object data = iter.next();
+			if (data instanceof ConnectionProfile) {
+				IConnectionProfileRepository repo = ((ConnectionProfile) data)
+						.getRepository();
+				// data from non-local read-only repository
+				if (operation != DND.DROP_COPY && repo != null && repo.isReadOnly()) {
+					return Status.CANCEL_STATUS;
+				}
+			}
+		}
+		
+		if (target instanceof LocalRepositoryNode) {
+			// make sure not dropping cp to it's own repository
+			for (Iterator iter = mElements.iterator(); iter.hasNext();) {
+				Object data = iter.next();
+				if (data instanceof IConnectionProfile) {
+					IConnectionProfile profile = (IConnectionProfile) data;
+					if (profile.getParentProfile() == null)
+						return Status.CANCEL_STATUS;
+				}
+				else {
+					return Status.CANCEL_STATUS;
+				}
+			}
+		}
+
+		else if (target instanceof IConnectionProfile) {
+			IManagedConnection imc = ((IConnectionProfile) target)
+					.getManagedConnection(IConnectionProfileRepositoryConstants.REPOSITORY_CONNECTION_FACTORY_ID);
+			if (imc == null || !imc.isConnected()
+					|| imc.getConnection() == null) {
+				return Status.CANCEL_STATUS;
+			}
+
+			IConnectionProfileRepository repo = (IConnectionProfileRepository) imc
+					.getConnection().getRawConnection();
+			if (repo == null || repo.isReadOnly()) {
+				return Status.CANCEL_STATUS;
+			}
+
+			for (Iterator iter = mElements.iterator(); iter.hasNext();) {
+				Object data = iter.next();
+				if (data instanceof IConnectionProfile) {
+					IConnectionProfile profile = (IConnectionProfile) data;
+					// make sure not dropping cp to it's containing
+					// repository
+					if (target.equals(profile.getParentProfile()))
+						return Status.CANCEL_STATUS;
+
+					// make sure the cp is compatible with the target
+					// repository
+					if (!((ConnectionProfileProvider) profile.getProvider())
+							.compatibleWithRepository((IConnectionProfile) target)
+							|| !repo.supportsProfileType(profile
+									.getProviderId()))
+						return Status.CANCEL_STATUS;
+
+				}
+				else {
+					return Status.CANCEL_STATUS;
+				}
+			}
+		}
+
+		return Status.OK_STATUS;
+
+	}
+
+	protected void initializeSelection() {
+		ISelection s = LocalSelectionTransfer.getInstance().getSelection();
+		if (!(s instanceof IStructuredSelection))
+			return;
+		mElements = ((IStructuredSelection) s).toList();
+	}
+
+	protected void refreshViewer(final Object object, final boolean expand) {
+		IViewPart view = PlatformUI
+				.getWorkbench()
+				.getActiveWorkbenchWindow()
+				.getActivePage()
+				.findView(
+						"org.eclipse.datatools.connectivity.DataSourceExplorerNavigator"); //$NON-NLS-1$
+
+		final CommonViewer viewer = ((CommonNavigator) view).getCommonViewer();
+
+		if (viewer instanceof TreeViewer
+				&& object instanceof IConnectionProfile) {
+			RefreshProfileJob.scheduleRefreshProfileJob(
+					(IConnectionProfile) object, (TreeViewer) viewer);
+		}
+		else {
+			Runnable runner = new Runnable() {
+
+				public void run() {
+					((CommonViewer) viewer).refresh();
+				}
+			};
+			viewer.getControl().getDisplay().syncExec(runner);
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/resources.properties b/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/resources.properties
new file mode 100644
index 0000000..8864bef
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/resources.properties
@@ -0,0 +1,68 @@
+################################################################################
+## Copyright (c) 2005 Sybase, Inc.
+## All rights reserved. This program and the accompanying materials
+## are made available under the terms of the Eclipse Public License v1.0
+## which accompanies this distribution, and is available at
+## http://www.eclipse.org/legal/epl-v10.html
+##
+## Contributors:
+##    Sybase, Inc. - initial API and implementation
+################################################################################ 
+plugin.internal_error=Internal Error - org.eclipse.datatools.connectivity
+properties.dialog = Properties Dialog
+properties.category.general = General
+properties.connectionprofile.name = Profile Name
+properties.connectionprofile.desc = Description
+properties.connectionprofile.autoconnect = Auto-connect
+properties.category.name = Category Name
+properties.category.id = Category ID
+DSE.Connect.label = &Connect
+DSE.Disconnect.label = &Disconnect
+DSE.SelectAll.label = Select &All
+DSE.DeselectAll.label = &Deselect All
+DSE.View.Tooltip = Data Source Explorer
+DSE.Jobs.ExpandAll.label = Expand All...
+DSE.Jobs.ExpandAll.Subtask.label = Expanding... {0}
+ServersView.action.newCP = &New...
+ProfileSelectionDialogPage.validation.error = Please select a profile.
+NewConnectionProfileWizard.title = New connection profile
+NewConnectionProfileWizard.create.failure = Create connection profile failure
+NewConnectionProfileWizardPage.Status.DuplicateName = Connection profile name already exists!
+NewConnectionProfileWizardPage.Status.NoName = Please specify connection profile name!
+NewConnectionProfileWizardPage.title = Create connection profile
+NewConnectionProfileWizardPage.desc = Please enter detailed information
+NewConnectionProfileWizardPage.cp_name = Name:
+NewConnectionProfileWizardPage.cp_desc = Description(optional):
+NewConnectionProfileWizardPage.choices = Please select:
+NewConnectionProfileWizardPage.summary_cp_name = Name
+NewConnectionProfileWizardPage.summary_cp_desc = Description
+NewConnectionProfileWizardPage.Button.AutoConnect = Auto-connect when the wizard is finished or when Enterprise Explorer opens.
+NewConnectionProfileWizardPage.Button.AutoConnect1 = Auto-connect when Enterprise Explorer opens.
+NewConnectionProfileWizardPage.summary_autoconnect = Auto connect
+ConnectionProfileDetailsPage.Button.TestConnection = Test Connection
+ConnectionProfileDetailsPage.AskConfirmation = Confirm Dialog
+ConnectionProfileDetailsPage.AskReconnect = This connection profile's connection information has been changed, do you want to reconnect the server?
+SummaryWizardPage.title = Summary
+SummaryWizardPage.description = Information gathered from previous pages.
+SummaryWizardPage.property = Property
+SummaryWizardPage.value = Value
+error.connect = {1}.  See log file for more details.
+error.contentExtension =Error connecting to the "{0}" extension on profile "{1}" (Error: {2})
+CPVersionPropertyPage.desc=Version information for {0}.\nThis information was obtained from the last connection attempt.  If the last attempt to connect was unsuccessful, no version information will be available.
+CPVersionPropertyPage.label.versionUnavailable=Version information is unavailable for this profile.
+CPVersionPropertyPage.label.techVersions=The following technologies are available on this server:
+ConnectionProfileLabelProvider.label.versionIndicator={0} ({1} v. {2}) 
+ProfileSelectionDialog.Dialog.Title=Profile Browse
+ProfileSelectionDialog.Title=Select an available profile
+ProfileSelectionDialog.Message=Select from the list of available profiles.
+ExistingConnectionsDialogPage.ExistingConnections.group = Connections
+ExistingConnectionsDialogPage.Properties.label = Properties
+ExistingConnectionsDialogPage.Property.columnHeader = Property
+ExistingConnectionsDialogPage.Value.columnHeader = Value
+ExistingConnectionsDialogPage.Button.new = New...
+ExistingConnectionsDialogPage.Button.edit = Edit...
+ExistingConnectionsDialogPage.Button.delete = Delete
+ExistingConnectionsDialogPage.PropertyName.name = Name
+ExistingConnectionsDialogPage.PropertyName.description = Description
+ExistingConnectionsDialogPage.PropertyName.category = Category
+
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/views/DataSourceExplorerView.java b/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/views/DataSourceExplorerView.java
new file mode 100644
index 0000000..78e024e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.dse/src/org/eclipse/datatools/connectivity/ui/dse/views/DataSourceExplorerView.java
@@ -0,0 +1,110 @@
+/*******************************************************************************
+ * Copyright (c) 2006-2009 Sybase, Inc.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    rcernich - initial API and implementation
+ *    brianf - updates to set state of ShowCategory handler
+ *    brianf - fixes for BZ 272274
+ *******************************************************************************/ 
+package org.eclipse.datatools.connectivity.ui.dse.views;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.ui.dse.DSEPlugin;
+import org.eclipse.datatools.connectivity.ui.dse.IHelpContextsConnectivityUIDSE;
+import org.eclipse.datatools.connectivity.ui.dse.actions.ShowCategoryAction;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.help.IContext;
+import org.eclipse.help.IContextProvider;
+import org.eclipse.jface.commands.ToggleState;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.handlers.IHandlerService;
+import org.eclipse.ui.navigator.CommonNavigator;
+
+public class DataSourceExplorerView extends CommonNavigator
+	implements IContextProvider {
+	
+	private ContextProviderDelegate contextProviderDelegate =
+		new ContextProviderDelegate(DSEPlugin.getDefault().getBundle().getSymbolicName());
+	
+	/**
+	 * Constructor
+	 */
+	public DataSourceExplorerView() {
+		super();
+	}
+
+	/**
+	 * Override this to provide a different input object to the DSE,
+	 * This used to override the getInitialInput() from the CommonNavigator
+	 * but the signature changed for 3.5 and we ran into some weird 
+	 * JDK 1.4/1.5 incompatibilities with the changes. 
+	 * See BZ 272274 for more details.
+	 * @return IAdaptable
+	 */
+	protected IAdaptable getDSEInitialInput() {
+		return ProfileManager.getInstance();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.help.IContextProvider#getContext(java.lang.Object)
+	 */
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.help.IContextProvider#getContextChangeMask()
+	 */
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.help.IContextProvider#getSearchExpression(java.lang.Object)
+	 */
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.CommonNavigator#createPartControl(org.eclipse.swt.widgets.Composite)
+	 */
+	public void createPartControl(Composite parent) {
+		super.createPartControl(parent);
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(getCommonViewer().getTree(), IHelpContextsConnectivityUIDSE.CONTEXT_ID_CONNECTIVITY_DSE_VIEW);
+		
+		// added for BZ 272274, BTF
+		try {
+			getCommonViewer().getControl().setRedraw(false);
+			getCommonViewer().setInput(getDSEInitialInput()); 
+		} finally { 
+			getCommonViewer().getControl().setRedraw(true);
+		}	
+		
+		createHandlers();
+	}
+	
+	/**
+	 * creates the initial show category handler
+	 */
+	private void createHandlers() {
+
+		// set the initial state of the ShowCategory menu & toolbar button
+		IHandlerService handlerService = (IHandlerService) getSite()
+				.getService(IHandlerService.class);
+		ShowCategoryAction handler = new ShowCategoryAction();
+		handler.init(this);
+		handlerService.activateHandler(ShowCategoryAction.HANDLER_ID, 
+				handler);
+		ToggleState ts = new ToggleState();
+		ts.setValue(Boolean.TRUE);
+		handler.addState("STYLE", ts); //$NON-NLS-1$
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/.classpath b/plugins/org.eclipse.datatools.connectivity.ui.templates/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/.project b/plugins/org.eclipse.datatools.connectivity.ui.templates/.project
new file mode 100644
index 0000000..6d12ceb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.ui.templates</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.connectivity.ui.templates/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..94219fd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name.0
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.ui.templates; singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-Activator: org.eclipse.datatools.connectivity.ui.templates.ConnectivityTemplatesPlugin
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.core.resources,
+ org.eclipse.pde.ui,
+ org.eclipse.pde.ui.templates,
+ org.eclipse.ui.views,
+ org.eclipse.datatools.connectivity
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
+Bundle-Localization: plugin
+Bundle-Vendor: %Plugin.ProviderName
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/about.html b/plugins/org.eclipse.datatools.connectivity.ui.templates/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/about.ini b/plugins/org.eclipse.datatools.connectivity.ui.templates/about.ini
new file mode 100644
index 0000000..76a0356
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/about.ini
@@ -0,0 +1,27 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%blurb
+
+# Property "windowImage" contains path to window icon (16x16)
+# needed for primary features only
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=eclipse32.png
+
+# Property "aboutImage" contains path to product image (500x330 or 115x164)
+# needed for primary features only
+
+# Property "appName" contains name of the application (not translated)
+# needed for primary features only
+
+# Property "welcomePerspective" contains the id of the perspective in which the
+# welcome page is to be opened.
+# optional
+
+# Property "tipsAndTricksHref" contains the Help topic href to a tips and tricks page 
+# optional
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/about.mappings b/plugins/org.eclipse.datatools.connectivity.ui.templates/about.mappings
new file mode 100644
index 0000000..0aacd82
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/about.mappings
@@ -0,0 +1,6 @@
+# about.mappings

+# contains fill-ins for about.properties

+# java.io.Properties file (ISO 8859-1 with "\" escapes)

+# This file does not need to be translated.

+

+0=@BUILD@
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/about.properties b/plugins/org.eclipse.datatools.connectivity.ui.templates/about.properties
new file mode 100644
index 0000000..2dd4309
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/about.properties
@@ -0,0 +1,19 @@
+###############################################################################
+# Copyright (c) 2006 Sybase, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     Sybase, Inc. - initial API and implementation
+###############################################################################
+blurb=Eclipse Data Tools Platform SDK\n\
+\n\
+Visit http://www.eclipse.org/datatools\n\
+\n\
+Copyright (c) 2017 Eclipse Contributors\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/build.properties b/plugins/org.eclipse.datatools.connectivity.ui.templates/build.properties
new file mode 100644
index 0000000..ab42fe1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/build.properties
@@ -0,0 +1,21 @@
+bin.includes = plugin.xml,\
+               META-INF/,\
+               .,\
+               about.html,\
+               icons/,\
+               plugin.properties,\
+               templates_3.2/,\
+               about.ini,\
+               about.mappings,\
+               about.properties,\
+               eclipse32.png
+jars.compile.order = .
+source.. = src/
+output.. = bin/
+src.dir =		src/
+plugin.version =	1.0.0.200710041
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/eclipse32.png b/plugins/org.eclipse.datatools.connectivity.ui.templates/eclipse32.png
new file mode 100644
index 0000000..568fac1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/eclipse32.png
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/icons/etool16/jdbc_16.gif b/plugins/org.eclipse.datatools.connectivity.ui.templates/icons/etool16/jdbc_16.gif
new file mode 100644
index 0000000..ef7809c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/icons/etool16/jdbc_16.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/icons/etool16/newex_wiz.gif b/plugins/org.eclipse.datatools.connectivity.ui.templates/icons/etool16/newex_wiz.gif
new file mode 100644
index 0000000..b1526e9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/icons/etool16/newex_wiz.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/icons/etool16/newexprj_wiz.gif b/plugins/org.eclipse.datatools.connectivity.ui.templates/icons/etool16/newexprj_wiz.gif
new file mode 100644
index 0000000..4e5f1cf
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/icons/etool16/newexprj_wiz.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/plugin.properties b/plugins/org.eclipse.datatools.connectivity.ui.templates/plugin.properties
new file mode 100644
index 0000000..bffdfd8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/plugin.properties
@@ -0,0 +1,46 @@
+#******************************************************************************
+# * Copyright (c) 2007 Sybase, Inc.
+# * 
+# * All rights reserved. This program and the accompanying materials are made
+# * available under the terms of the Eclipse Public License v1.0 which
+# * accompanies this distribution, and is available at
+# * http://www.eclipse.org/legal/epl-v10.html
+# * 
+# * Contributors: brianf - initial API and implementation
+#******************************************************************************
+
+#Properties file for org.eclipse.datatools.connectivity.ui.templates
+Bundle-Name.0 = DTP Connectivity Templates Plug-in
+Plugin.ProviderName = Eclipse Data Tools Platform
+wizard.name.profile = Plug-in with a DTP connection profile
+wizard.name.profile.description=\
+This wizard creates a plug-in for a DTP Connection Profile.\
+<p><b>Extension Used</b></p>\
+<li>org.eclipse.datatools.connectivity.connectionProfile</li>
+wizard.name.driver = Plug-in with a DTP driver template
+wizard.name.driver.description=\
+This wizard creates a plug-in for a DTP Driver Template.\
+<p><b>Extension Used</b></p>\
+<li>org.eclipse.datatools.connectivity.driverTemplate</li>
+template.name.profile = DTP Connection Profile
+template.name.driver = DTP Driver Template
+template.connectionProfile.name = DTP Connection Profile
+template.driverTemplate.name = DTP Driver Template
+template.connectionProfile.desc = \
+This template creates a plug-in for a DTP Connection Profile.\
+<p><b>Extension Used</b></p>\
+<li>org.eclipse.datatools.connectivity.connectionProfile</li>
+template.driverTemplate.desc = \
+This template creates a plug-in for a DTP Driver Template.\
+<p><b>Extension Used</b></p>\
+<li>org.eclipse.datatools.connectivity.driverTemplate</li>
+
+PluginSampleTemplateWizard = Plug-in with a DTP JDBC Connection Profile
+PluginSampleTemplate = DTP Sample Profile
+
+PluginSampleTemplateWizard.profile.description=\
+This wizard creates a plug-in for a DTP JDBC Connection Profile\
+with a wizard and property page.\
+<p><b>Extensions Used</b></p>\
+<li>org.eclipse.datatools.connectivity.connectionProfile</li>\
+<li>org.eclipse.ui.propertyPages</li>
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/plugin.xml b/plugins/org.eclipse.datatools.connectivity.ui.templates/plugin.xml
new file mode 100644
index 0000000..f72952c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/plugin.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+
+   <extension
+         point="org.eclipse.pde.ui.pluginContent">
+      <wizard
+            class="org.eclipse.datatools.connectivity.ui.templates.ConnectivityPluginTemplateWizard"
+            icon="$nl$/icons/etool16/newexprj_wiz.gif"
+            id="org.eclipse.datatools.connectivity.ui.templates.connectionProfileWizard"
+            java="true"
+            name="%wizard.name.profile"
+            requiresActivator="false"
+            ui-content="true">
+         <description>
+         	%wizard.name.profile.description
+		</description>
+      </wizard>
+      <wizard
+            class="org.eclipse.datatools.connectivity.ui.templates.DriverTemplatePluginTemplateWizard"
+            icon="$nl$/icons/etool16/newexprj_wiz.gif"
+            id="org.eclipse.datatools.connectivity.ui.templates.driverTemplateWizard"
+            java="true"
+            name="%wizard.name.driver"
+            requiresActivator="false"
+            ui-content="true">
+         <description>
+         	%wizard.name.driver.description
+		</description>
+      </wizard>
+      <wizard
+            class="org.eclipse.datatools.connectivity.ui.templates.ProfileSamplePluginTemplateWizard"
+            icon="$nl$/icons/etool16/newexprj_wiz.gif"
+            id="org.eclipse.datatools.connectivity.ui.templates.sampleProfileWizard"
+            java="true"
+            name="%PluginSampleTemplateWizard"
+            requiresActivator="false"
+            ui-content="true">
+         <description>
+            %PluginSampleTemplateWizard.profile.description
+         </description>
+      </wizard>
+   </extension>
+   <extension
+         point="org.eclipse.pde.ui.templates">
+      <template
+            class="org.eclipse.datatools.connectivity.ui.templates.ConnectionProfileTemplateSection"
+            contributingId="org.eclipse.datatools.connectivity.connectionProfile"
+            id="org.eclipse.datatools.connectivity.templates.connectionProfile"
+            name="%template.name.profile">
+      </template>
+      <template
+            class="org.eclipse.datatools.connectivity.ui.templates.DriverTemplateSection"
+            contributingId="org.eclipse.datatools.connectivity.driverExtension"
+            id="org.eclipse.datatools.connectivity.templates.driverTemplate"
+            name="%template.name.driver">
+      </template>
+      <template
+            class="org.eclipse.datatools.connectivity.ui.templates.ProfileSamplePluginTemplateWizard"
+            contributingId="org.eclipse.datatools.connectivity.connectionProfile"
+            id="org.eclipse.datatools.connectivity.templates.sampleTemplate"
+            name="%PluginSampleTemplate">
+      </template>
+   </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/AbstractConnectivityTemplateSection.java b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/AbstractConnectivityTemplateSection.java
new file mode 100644
index 0000000..15e51e4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/AbstractConnectivityTemplateSection.java
@@ -0,0 +1,241 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.templates;
+
+import java.net.URL;
+import java.util.ResourceBundle;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.osgi.service.resolver.VersionRange;
+import org.eclipse.pde.core.plugin.IPluginModelBase;
+import org.eclipse.pde.core.plugin.IPluginReference;
+import org.eclipse.pde.ui.IFieldData;
+import org.eclipse.pde.ui.templates.OptionTemplateSection;
+import org.eclipse.pde.ui.templates.TemplateOption;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.Version;
+
+/**
+ * Abstract template section that provides many helper functions to
+ * other Connectivity PDE templates.
+ * 
+ * @author brianf
+ *
+ */
+public abstract class AbstractConnectivityTemplateSection extends OptionTemplateSection {
+
+	static final String SPACE_CHAR = " ";  //$NON-NLS-1$    
+	static final String COLON_CHAR = ":"; //$NON-NLS-1$
+	static final String REQUIRED_INDICATOR = "*"; //$NON-NLS-1$
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.ui.templates.OptionTemplateSection#getInstallURL()
+	 */
+	protected URL getInstallURL() {
+		return ConnectivityTemplatesPlugin.getDefault().getInstallURL();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.ui.templates.AbstractTemplateSection#getPluginResourceBundle()
+	 */
+	protected ResourceBundle getPluginResourceBundle() {
+		Bundle bundle = Platform.getBundle( ConnectivityTemplatesPlugin.getPluginId() );
+		return Platform.getResourceBundle( bundle );
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.ui.templates.ITemplateSection#getNewFiles()
+	 */
+	public String[] getNewFiles() {
+		return new String[] { "META-INF/",   //$NON-NLS-1$
+				"plugin.xml",   //$NON-NLS-1$
+		"plugin.properties" };  //$NON-NLS-1$
+	}
+
+	/**
+	 * Adds a required template option with specified name and label with required indicator 
+	 * to first page with no initial value.
+	 * @param name  option name
+	 * @param label option label/prompt
+	 * @return  the newly created option
+	 */
+	protected TemplateOption addRequiredOption( String name, String label )
+	{
+		return addRequiredOption(name, label, 0);
+	}
+
+	/**
+	 * Adds a required template option with specified name and label with required indicator 
+	 * to page index passed in with no initial value.
+	 * @param name  option name
+	 * @param label option label/prompt
+	 * @param page option page index
+	 * @return  the newly created option
+	 */
+	protected TemplateOption addRequiredOption( String name, String label, int page )
+	{
+		TemplateOption newOption =
+			addOption( name, label + REQUIRED_INDICATOR + COLON_CHAR, (String) null, page );
+		newOption.setRequired( true );
+		return newOption;
+	}
+
+	/**
+	 * Adds an optional template option with specified name and label 
+	 * to first page with no initial value.
+	 * @param name  option name
+	 * @param label option label/prompt
+	 * @return  the newly created option
+	 */
+	protected TemplateOption addOptionalOption( String name, String label )
+	{
+		return addOptionalOption(name, label, 0);
+	}
+
+	/**
+	 * Adds an optional template option with specified name and label with required indicator 
+	 * to page index passed in with no initial value.
+	 * @param name  option name
+	 * @param label option label/prompt
+	 * @param page option page index
+	 * @return  the newly created option
+	 */
+	protected TemplateOption addOptionalOption( String name, String label, int page )
+	{
+		TemplateOption newOption = addOption( name, label + COLON_CHAR, (String) null, page );
+		newOption.setRequired( false );
+		return newOption;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.pde.ui.templates.BaseOptionTemplateSection#initializeFields(org.eclipse.pde.ui.IFieldData)
+	 */
+	protected void initializeFields( IFieldData data )   
+	{
+		// lazy initialization of page options before it is made visible
+		super.initializeFields( data );
+		initializeOptions();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.oda.template.internal.ui.OdaTemplateSection#initializeFields(org.eclipse.pde.core.plugin.IPluginModelBase)
+	 */
+	public void initializeFields( IPluginModelBase model )
+	{
+		super.initializeFields( model );
+		initializeOptions();
+	}
+
+	/**
+	 * Initializes option values
+	 */
+	protected abstract void initializeOptions();
+
+	/**
+	 * Returns dependencies for the new plug-in
+	 * @return
+	 */
+	public IPluginReference[] getDependencies()
+	{
+		Version version150 = new Version( 1, 5, 0 );
+		Version version200 = new Version( 2, 0, 0 );
+		VersionRange compatible150 = new VersionRange( version150, true, version200, false );       
+
+		return new IPluginReference[] 
+		                            { new CompatiblePluginReference( 
+		                            		"org.eclipse.datatools.connectivity",  //$NON-NLS-1$
+		                            		compatible150.toString() ),
+		                            };
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.pde.ui.templates.AbstractTemplateSection#addPages(org.eclipse.jface.wizard.Wizard)
+	 */
+	public void addPages( Wizard wizard )
+	{
+		WizardPage page = createPage( 0, null );
+		page.setTitle( getWizardPageTitle() ); 
+		page.setDescription( getWizardPageDescription() );  
+		wizard.addPage( page );
+		markPagesAdded();
+	}
+
+	/**
+	 * Returns the wizard page title defined by a subclass.
+	 */
+	protected abstract String getWizardPageTitle();
+
+	/**
+	 * Returns the wizard page description defined by a subclass.
+	 */
+	protected abstract String getWizardPageDescription();
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.pde.ui.templates.BaseOptionTemplateSection#validateOptions(org.eclipse.pde.ui.templates.TemplateOption)
+	 */
+	public void validateOptions( TemplateOption changedOption )
+	{
+		if( ! isOptionValueValid( changedOption ) )
+			return;
+
+		// next check all other options on same page is valid
+		TemplateOption[] pageOptions = getOptions(0);
+		for( int i = 0; i < pageOptions.length; i++ ) 
+		{
+			if( ! isOptionValueValid( pageOptions[i] ) )
+				return;
+		}
+
+		// no missing or invalid options, ok to reset page
+		resetPageState();
+	}
+
+	/**
+	 * Validates whether the specified option has valid value defined.
+	 * @param changedOption
+	 * @return  true if the option's value is valid; false otherwise.
+	 */
+	private boolean isOptionValueValid( TemplateOption changedOption )
+	{
+		if( changedOption.isRequired() && changedOption.isEmpty() ) 
+		{
+			flagMissingRequiredOption( changedOption );
+			return false;
+		}
+
+		if( ! isJavaPackageValid( changedOption ) )
+			return false;
+
+		return true;
+	}
+
+	/**
+	 * Determines if the package name is valid
+	 * @param changedOption
+	 * @return
+	 */
+	private boolean isJavaPackageValid (TemplateOption changedOption) {
+		if (changedOption.getName().equals(KEY_PACKAGE_NAME)) {
+			String value = (String) changedOption.getValue();
+			if (value.indexOf("package") > -1) { //$NON-NLS-1$
+				return false;
+			}
+		}
+		return true;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/CompatiblePluginReference.java b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/CompatiblePluginReference.java
new file mode 100644
index 0000000..bf925df
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/CompatiblePluginReference.java
@@ -0,0 +1,115 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.ui.templates;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.pde.core.plugin.IPluginReference;
+
+/**
+ * Reference of a generated plug-in that uses the compatible match rule. 
+ */
+class CompatiblePluginReference implements IPluginReference
+{
+    private String m_id;
+    private String m_version;
+    private int m_match = COMPATIBLE;
+
+    public CompatiblePluginReference( String id, String version )
+    {
+        m_id = id;
+        m_version = version;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.pde.core.IIdentifiable#getId()
+     */
+    public String getId()
+    {
+        return m_id;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.pde.core.plugin.IPluginReference#getVersion()
+     */
+    public String getVersion()
+    {
+        return m_version;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.pde.core.plugin.IPluginReference#getMatch()
+     */
+    public int getMatch()
+    {
+        return m_match;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.pde.core.IIdentifiable#setId(java.lang.String)
+     */
+    public void setId( String id ) throws CoreException
+    {
+        m_id = id;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.pde.core.plugin.IPluginReference#setVersion(java.lang.String)
+     */
+    public void setVersion( String version ) throws CoreException
+    {
+        m_version = version;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.pde.core.plugin.IPluginReference#setMatch(int)
+     */
+    public void setMatch( int match ) throws CoreException
+    {
+        m_match = match;
+    }
+
+    /* (non-Javadoc)
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    public boolean equals( Object obj )
+    {
+        if ( ! ( obj instanceof IPluginReference ) )
+            return false;
+
+        IPluginReference other = (IPluginReference) obj;
+        if( m_match != other.getMatch() )
+            return false;
+        
+        if( m_id == null && other.getId() != null )
+            return false;
+        if( m_id != null && other.getId() == null )
+            return false;
+        if( m_id != null &&
+            ! m_id.equals( other.getId() ))
+            return false;
+        
+        if( m_version == null && other.getVersion() != null )
+            return false;
+        if( m_version != null && other.getVersion() == null )
+            return false;
+        if( m_version != null &&
+            ! m_version.equals( other.getVersion() ))
+            return false;
+
+        // all three attributes are an exact match
+        return true;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/ConnectionProfileTemplateSection.java b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/ConnectionProfileTemplateSection.java
new file mode 100644
index 0000000..8051317
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/ConnectionProfileTemplateSection.java
@@ -0,0 +1,219 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.templates;
+
+import java.util.ArrayList;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osgi.service.resolver.VersionRange;
+import org.eclipse.pde.core.plugin.IPluginBase;
+import org.eclipse.pde.core.plugin.IPluginElement;
+import org.eclipse.pde.core.plugin.IPluginExtension;
+import org.eclipse.pde.core.plugin.IPluginModelFactory;
+import org.eclipse.pde.core.plugin.IPluginReference;
+import org.osgi.framework.Version;
+
+/**
+ * PDE template section for defining a new connection profile plug-in
+ * 
+ * @author brianf
+ *
+ */
+public class ConnectionProfileTemplateSection extends AbstractConnectivityTemplateSection {
+
+	private static final String EXTENSION_POINT = "org.eclipse.datatools.connectivity.connectionProfile"; //$NON-NLS-1$
+	private static final String KEY_PROFILE_ID = "profileID"; //$NON-NLS-1$
+	private static final String KEY_CATEGORY_ID = "categoryID"; //$NON-NLS-1$
+	private static final String KEY_PROFILE_NAME = "profileName"; //$NON-NLS-1$
+	private static final String KEY_ICON = "icon"; //$NON-NLS-1$
+	private static final String KEY_PING_FACTORY = "pingFactory"; //$NON-NLS-1$
+	private static final String KEY_WIZARD_CLASS = "newWizardClass"; //$NON-NLS-1$
+	private static final String GEN_JDBC_CATEGORY = "org.eclipse.datatools.connectivity.db.category"; //$NON-NLS-1$
+
+	/**
+	 * Constructor
+	 */
+	public ConnectionProfileTemplateSection() {
+		super();
+		setPageCount( 1 );
+		createOptions();       
+		initializeOptions();
+	}
+
+	/*
+	 * Creates base options
+	 */
+	private void createOptions() {
+		addRequiredOption(KEY_PROFILE_NAME, Messages.getString("ConnectionProfileTemplateSection.ProfileNameLabel")); //$NON-NLS-1$
+		addRequiredOption(KEY_PROFILE_ID, Messages.getString("ConnectionProfileTemplateSection.ProfileIDLabel")); //$NON-NLS-1$
+		addRequiredOption(KEY_CATEGORY_ID, Messages.getString("ConnectionProfileTemplateSection.CategoryIDLabel")); //$NON-NLS-1$
+		addOptionalOption(KEY_ICON, Messages.getString("ConnectionProfileTemplateSection.IconPathLabel")); //$NON-NLS-1$
+		addOptionalOption(KEY_PACKAGE_NAME, Messages.getString("ConnectionProfileTemplateSection.PackageNameLabel")); //$NON-NLS-1$
+		addOptionalOption(KEY_PING_FACTORY, Messages.getString("ConnectionProfileTemplateSection.PingFactoryLabel")); //$NON-NLS-1$
+		addOptionalOption(KEY_WIZARD_CLASS, Messages.getString("ConnectionProfileTemplateSection.WizardClassLabel")); //$NON-NLS-1$
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.ui.templates.OptionTemplateSection#getSectionId()
+	 */
+	public String getSectionId() {
+		return "connectionProfile";  //$NON-NLS-1$
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.ui.templates.AbstractTemplateSection#updateModel(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	protected void updateModel(IProgressMonitor monitor) throws CoreException {
+		/*
+		 * id, category, name, configurationType, icon, maintainConnection, 
+		 * pingFactory, propertiesPersistenceHook
+		 */
+		IPluginBase plugin = model.getPluginBase();
+		IPluginModelFactory factory = model.getPluginFactory();
+
+		IPluginExtension extension = 
+			createExtension(EXTENSION_POINT, true);
+
+		IPluginElement element = factory.createElement(extension);
+		element.setName("connectionProfile"); //$NON-NLS-1$
+		element.setAttribute("id", getStringOption(KEY_PROFILE_ID)); //$NON-NLS-1$
+
+		element.setAttribute("name", "%connection.profile.name"); //getStringOption(KEY_PROFILE_NAME)); //$NON-NLS-1$ //$NON-NLS-2$
+
+		String pingFactory = getStringOption(KEY_PING_FACTORY);
+		String pingFactoryPackage = getStringOption(KEY_PACKAGE_NAME);
+		if (pingFactory == null || pingFactory.trim().length() == 0) {
+			pingFactory = ""; //$NON-NLS-1$
+		}
+		if (pingFactoryPackage == null || pingFactoryPackage.trim().length() == 0) {
+			pingFactoryPackage = ""; //$NON-NLS-1$
+		}
+		if (pingFactory.trim().length() > 0 && pingFactoryPackage.trim().length() > 0) {
+			String fullClassName = pingFactoryPackage + "." + pingFactory; //$NON-NLS-1$
+			element.setAttribute("pingFactory", fullClassName); //$NON-NLS-1$
+		}
+
+		String category = getStringOption(KEY_CATEGORY_ID);
+		if (category != null && category.trim().length() > 0) {
+			element.setAttribute("category", category); //$NON-NLS-1$
+
+			IPluginElement categoryElement = factory.createElement(extension);
+			categoryElement.setName("category"); //$NON-NLS-1$
+			categoryElement.setAttribute("id", category); //$NON-NLS-1$
+			categoryElement.setAttribute("name", "%category.name"); //$NON-NLS-1$ //$NON-NLS-2$
+			extension.add(categoryElement);
+		}
+
+		String wizard = getStringOption(KEY_WIZARD_CLASS);
+		if (wizard != null && wizard.trim().length() > 0) {
+			IPluginElement wizardElement = factory.createElement(extension);
+			wizardElement.setName("newWizard"); //$NON-NLS-1$
+			
+			String id = getStringOption(KEY_PROFILE_ID) + ".newWizard"; //$NON-NLS-1$
+			wizardElement.setAttribute("id", id); //$NON-NLS-1$
+			wizardElement.setAttribute("name", "%wizard.name"); //$NON-NLS-1$ //$NON-NLS-2$
+			wizardElement.setAttribute("icon", "icons/new_db_element.gif"); //$NON-NLS-1$ //$NON-NLS-2$
+
+			String fullClassName = getStringOption(KEY_PACKAGE_NAME) + "." + wizard;  //$NON-NLS-1$
+			wizardElement.setAttribute("class", fullClassName); //$NON-NLS-1$
+			wizardElement.setAttribute("profile", getStringOption(KEY_PROFILE_ID)); //$NON-NLS-1$
+			extension.add(wizardElement);
+		}
+
+		String icon = getStringOption(KEY_ICON);
+		if (icon != null && icon.trim().length() > 0) {
+			element.setAttribute("icon", icon); //$NON-NLS-1$
+		}
+
+		extension.add(element);
+		plugin.add(extension);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.ui.templates.ITemplateSection#getUsedExtensionPoint()
+	 */
+	public String getUsedExtensionPoint() {
+		return EXTENSION_POINT;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.ui.templates.AbstractConnectivityTemplateSection#initializeOptions()
+	 */
+	protected void initializeOptions()
+	{
+		String profileName = Messages.getString("ConnectionProfileTemplateSection.DefaultProfileName");  //$NON-NLS-1$
+		String sanitizedProfileName = profileName.replaceAll(" ", ""); //$NON-NLS-1$ //$NON-NLS-2$
+		sanitizedProfileName = sanitizedProfileName.replaceAll("_", ""); //$NON-NLS-1$ //$NON-NLS-2$
+		sanitizedProfileName = sanitizedProfileName.replaceAll("\\.", ""); //$NON-NLS-1$ //$NON-NLS-2$
+		
+		String packageName = "org.mycompany." + sanitizedProfileName.toLowerCase();//$NON-NLS-1$
+		initializeOption( KEY_PROFILE_NAME, profileName);
+		initializeOption( KEY_PROFILE_ID, Messages.getString("ConnectionProfileTemplateSection.DefaultProfileID")); //$NON-NLS-1$
+		initializeOption( KEY_CATEGORY_ID, GEN_JDBC_CATEGORY);
+		initializeOption( KEY_ICON, "icons/jdbc_16.gif"); //$NON-NLS-1$
+		initializeOption( KEY_PING_FACTORY, sanitizedProfileName + "PingFactory"); //$NON-NLS-1$
+		initializeOption( KEY_WIZARD_CLASS, sanitizedProfileName + "Wizard"); //$NON-NLS-1$
+		initializeOption( KEY_PACKAGE_NAME, packageName);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.ui.templates.AbstractTemplateSection#getDependencies(java.lang.String)
+	 */
+	public IPluginReference[] getDependencies( String schemaVersion )
+	{
+		Version version101 = new Version( 1, 0, 1 );
+		Version version200 = new Version( 2, 0, 0 );
+		VersionRange compatible150 = new VersionRange( version101, true, version200, false );       
+
+		return new IPluginReference[] 
+		                            { new CompatiblePluginReference( 
+		                            		"org.eclipse.datatools.connectivity",  //$NON-NLS-1$
+		                            		compatible150.toString() ),
+		                            		new CompatiblePluginReference( 
+		                            				"org.eclipse.datatools.connectivity.ui",  //$NON-NLS-1$
+		                            				compatible150.toString() )
+		                            };
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.ui.templates.AbstractConnectivityTemplateSection#getWizardPageDescription()
+	 */
+	protected String getWizardPageDescription() {
+		return Messages.getString("ConnectionProfileTemplateSection.WizardPageDesc"); //$NON-NLS-1$
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.ui.templates.AbstractConnectivityTemplateSection#getWizardPageTitle()
+	 */
+	protected String getWizardPageTitle() {
+		return Messages.getString("ConnectionProfileTemplateSection.WizardPageTitle"); //$NON-NLS-1$
+	}
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.template.internal.ui.OdaTemplateSection#getNewFiles()
+     */
+    public String[] getNewFiles()
+    {
+        // merge the inherited list with own file(s)
+        String[] baseBuildList = super.getNewFiles();
+        ArrayList buildList = new ArrayList( baseBuildList.length + 1 );
+        for( int i = 0; i < baseBuildList.length; i++ )
+        {
+            buildList.add( baseBuildList[i] );
+        }
+        
+        // add an entry for the icons
+        buildList.add( "icons/" ); //$NON-NLS-1$
+        
+        return (String[]) buildList.toArray( new String[ buildList.size() ] );
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/ConnectivityPluginTemplateWizard.java b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/ConnectivityPluginTemplateWizard.java
new file mode 100644
index 0000000..9982b16
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/ConnectivityPluginTemplateWizard.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.templates;
+
+import org.eclipse.pde.ui.IFieldData;
+import org.eclipse.pde.ui.templates.ITemplateSection;
+import org.eclipse.pde.ui.templates.NewPluginTemplateWizard;
+
+/**
+ * Wizard to wrap the Connection Profile template
+ * @author brianf
+ *
+ */
+public class ConnectivityPluginTemplateWizard extends NewPluginTemplateWizard {
+
+	protected IFieldData fData;
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.ui.templates.NewPluginTemplateWizard#createTemplateSections()
+	 */
+	public ITemplateSection[] createTemplateSections() {
+		return new ITemplateSection[] {
+				new ConnectionProfileTemplateSection()};
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.ui.templates.AbstractNewPluginTemplateWizard#init(org.eclipse.pde.ui.IFieldData)
+	 */
+	public void init(IFieldData data) {
+        super.init( data );
+        setWindowTitle( Messages.getString("ConnectivityPluginTemplateWizard.WindowTitle") );  //$NON-NLS-1$
+        setNeedsProgressMonitor( true );
+		fData = data;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/ConnectivityTemplatesPlugin.java b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/ConnectivityTemplatesPlugin.java
new file mode 100644
index 0000000..b360bbd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/ConnectivityTemplatesPlugin.java
@@ -0,0 +1,94 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.templates;
+
+import java.net.URL;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ * 
+ * @author brianf
+ *
+ */
+public class ConnectivityTemplatesPlugin extends AbstractUIPlugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.datatools.connectivity.ui.templates"; //$NON-NLS-1$
+
+	// The shared instance
+	private static ConnectivityTemplatesPlugin plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public ConnectivityTemplatesPlugin() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static ConnectivityTemplatesPlugin getDefault() {
+		return plugin;
+	}
+
+	/**
+	 * Returns an image descriptor for the image file at the given
+	 * plug-in relative path
+	 *
+	 * @param path the path
+	 * @return the image descriptor
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return imageDescriptorFromPlugin(PLUGIN_ID, path);
+	}
+
+	/**
+     * Returns the installation URL of this plugin.
+     */
+    public URL getInstallURL() 
+    {
+        return getDefault().getBundle().getEntry( "/" ); //$NON-NLS-1$
+    }
+
+    /**
+     * Returns the plugin ID for this plugin
+     */
+    public static String getPluginId() 
+    {
+        if( getDefault() == null )  // not instantiated yet
+            return PLUGIN_ID;
+        return getDefault().getBundle().getSymbolicName();
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/DriverPropertyDialog.java b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/DriverPropertyDialog.java
new file mode 100644
index 0000000..23098d4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/DriverPropertyDialog.java
@@ -0,0 +1,275 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.templates;
+
+import org.eclipse.jface.dialogs.TrayDialog;
+import org.eclipse.jface.window.IShellProvider;
+import org.eclipse.jface.window.SameShellProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * Dialog for editing driver properties
+ * 
+ * @author brianf
+ *
+ */
+public class DriverPropertyDialog extends TrayDialog {
+
+	private boolean inInitialize = false;
+	private PropertyObject propObject = null;
+	private Text idText = null;
+	private Text nameText = null;
+	private Text descriptionText = null;
+	private Text valueText = null;
+	private Text categoryText = null;
+	private Combo requiredCombo = null;
+	private Combo visibleCombo = null;
+	
+	/**
+	 * Constructor
+	 * @param parentShell
+	 */
+	protected DriverPropertyDialog(IShellProvider parentShell) {
+		super(parentShell);
+	}
+	
+	/**
+	 * Constructor
+	 * @param shell
+	 */
+	protected DriverPropertyDialog (Shell shell) {
+		super (new SameShellProvider(shell));
+	}
+	
+	/**
+	 * Sets the initially selected property object
+	 * @param element
+	 */
+	public void setPropertyObject ( PropertyObject element ) {
+		this.propObject = element;
+	}
+	
+	/**
+	 * Returns the created or edited property object
+	 */
+	public PropertyObject getPropertyObject () {
+		return this.propObject;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
+	 */
+	protected Control createDialogArea(Composite parent) {
+		Composite baseComposite = new Composite(parent, SWT.None);
+		baseComposite.setLayout(new GridLayout(2, false));
+		baseComposite.setLayoutData(new GridData());
+		
+		Label label = new Label(baseComposite, SWT.LEFT);
+		label.setLayoutData(new GridData());
+		label.setText(Messages.getString("DriverPropertyDialog.IDLabel")); //$NON-NLS-1$
+		
+		idText = new Text(baseComposite, SWT.BORDER);
+		idText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+		idText.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				propertiesUpdated();
+			}
+		});
+
+		label = new Label(baseComposite, SWT.LEFT);
+		label.setLayoutData(new GridData());
+		label.setText(Messages.getString("DriverPropertyDialog.NameLabel")); //$NON-NLS-1$
+
+		nameText = new Text(baseComposite, SWT.BORDER);
+		nameText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+		nameText.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				propertiesUpdated();
+			}
+		});
+
+		label = new Label(baseComposite, SWT.LEFT);
+		label.setLayoutData(new GridData());
+		label.setText(Messages.getString("DriverPropertyDialog.DescriptionLabel")); //$NON-NLS-1$
+
+		descriptionText = new Text(baseComposite, SWT.BORDER);
+		descriptionText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+		descriptionText.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				propertiesUpdated();
+			}
+		});
+
+		label = new Label(baseComposite, SWT.LEFT);
+		label.setLayoutData(new GridData());
+		label.setText(Messages.getString("DriverPropertyDialog.ValueLabel")); //$NON-NLS-1$
+		
+		valueText = new Text(baseComposite, SWT.BORDER);
+		valueText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+		valueText.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				propertiesUpdated();
+			}
+		});
+
+		label = new Label(baseComposite, SWT.LEFT);
+		label.setLayoutData(new GridData());
+		label.setText(Messages.getString("DriverPropertyDialog.CategoryLabel")); //$NON-NLS-1$
+		
+		categoryText = new Text(baseComposite, SWT.BORDER);
+		categoryText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+		categoryText.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				propertiesUpdated();
+			}
+		});
+
+		label = new Label(baseComposite, SWT.LEFT);
+		label.setLayoutData(new GridData());
+		label.setText(Messages.getString("DriverPropertyDialog.VisibleLabel")); //$NON-NLS-1$
+
+		visibleCombo = new Combo(baseComposite, SWT.DROP_DOWN | SWT.READ_ONLY);
+		visibleCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+		visibleCombo.add(Boolean.toString(false), 0);
+		visibleCombo.add(Boolean.toString(true), 1);
+		visibleCombo.select(1);
+		visibleCombo.addSelectionListener(new SelectionListener() {
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				propertiesUpdated();
+			}
+
+			public void widgetSelected(SelectionEvent e) {
+				widgetDefaultSelected(e);
+			}
+		});
+
+		label = new Label(baseComposite, SWT.LEFT);
+		label.setLayoutData(new GridData());
+		label.setText(Messages.getString("DriverPropertyDialog.RequiredLabel")); //$NON-NLS-1$
+		
+		requiredCombo = new Combo(baseComposite, SWT.DROP_DOWN | SWT.READ_ONLY);
+		requiredCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+		requiredCombo.add(Boolean.toString(false), 0);
+		requiredCombo.add(Boolean.toString(true), 1);
+		requiredCombo.select(1);
+		requiredCombo.addSelectionListener(new SelectionListener() {
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				propertiesUpdated();
+			}
+
+			public void widgetSelected(SelectionEvent e) {
+				widgetDefaultSelected(e);
+			}
+		});
+		
+		initialize();
+		
+		return baseComposite;
+	}
+	
+	/**
+	 * Update the generated property object if the properties of
+	 * the dialog change
+	 */
+	private void propertiesUpdated() {
+		if (inInitialize)
+			return;
+		this.propObject = generateElement();
+	}
+	
+	/**
+	 * Create the property object from the dialog properties
+	 * @return
+	 */
+	private PropertyObject generateElement() {
+		propObject.setPropertyID(idText.getText());
+		propObject.setPropertyName(nameText.getText());
+		if (descriptionText.getText().trim().length() > 0)
+			propObject.setPropertyDescription(descriptionText.getText());
+		if (valueText.getText().trim().length() > 0)
+			propObject.setPropertyValue(valueText.getText());
+		if (categoryText.getText().trim().length() > 0)
+			propObject.setPropertyCategory(categoryText.getText());
+		
+		propObject.setPropertyVisible(visibleCombo.getText());
+		propObject.setPropertyRequired(requiredCombo.getText());
+			
+		return propObject;
+	}
+	
+	/**
+	 * Initialize the UI from the incoming property object 
+	 * or from default values 
+	 */
+	private void initialize() {
+		inInitialize = true;
+		if (propObject != null) {
+			String id = propObject.getPropertyID();
+			String name = propObject.getPropertyName();
+			String description = propObject.getPropertyDescription();
+			String value = propObject.getPropertyValue();
+			String visible = propObject.getPropertyVisible();
+			String required = propObject.getPropertyRequired();
+			String category = propObject.getPropertyCategory();
+			boolean visibleFlag = Boolean.getBoolean(visible.toLowerCase());
+			boolean requiredFlag = Boolean.getBoolean(required.toLowerCase());
+			
+			if (id != null && id.trim().length() > 0 && idText != null) {
+				idText.setText(id);
+			}
+			if (name != null && name.trim().length() > 0 && nameText != null) {
+				nameText.setText(name);
+			}
+			if (description != null && description.trim().length() > 0 && descriptionText != null) {
+				descriptionText.setText(description);
+			}
+			if (value != null && value.trim().length() > 0 && valueText != null) {
+				valueText.setText(value);
+			}
+			if (category != null && category.trim().length() > 0 && categoryText != null) {
+				categoryText.setText(category);
+			}
+			if (visible != null && visible.trim().length() > 0 && visibleCombo != null) {
+				if (visibleFlag)
+					visibleCombo.select(1);
+				else
+					visibleCombo.select(0);
+			}
+			if (required != null && required.trim().length() > 0 && requiredCombo != null) {
+				if (requiredFlag)
+					requiredCombo.select(1);
+				else
+					requiredCombo.select(0);
+			}
+		}
+		else {
+			propObject = new PropertyObject();
+			idText.setText(propObject.getPropertyID());
+			nameText.setText(propObject.getPropertyName());
+			valueText.setText(propObject.getPropertyValue());
+		}
+		inInitialize = false;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/DriverTemplatePluginTemplateWizard.java b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/DriverTemplatePluginTemplateWizard.java
new file mode 100644
index 0000000..7168aee
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/DriverTemplatePluginTemplateWizard.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.templates;
+
+import org.eclipse.pde.ui.IFieldData;
+import org.eclipse.pde.ui.templates.ITemplateSection;
+import org.eclipse.pde.ui.templates.NewPluginTemplateWizard;
+
+/**
+ * Wizard to wrap the driver template PDE template 
+ * 
+ * @author brianf
+ *
+ */
+public class DriverTemplatePluginTemplateWizard extends NewPluginTemplateWizard {
+
+	protected IFieldData fData;
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.ui.templates.NewPluginTemplateWizard#createTemplateSections()
+	 */
+	public ITemplateSection[] createTemplateSections() {
+		return new ITemplateSection[] {new DriverTemplateSection()};
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.ui.templates.AbstractNewPluginTemplateWizard#init(org.eclipse.pde.ui.IFieldData)
+	 */
+	public void init(IFieldData data) {
+        super.init( data );
+        setWindowTitle( Messages.getString("DriverTemplatePluginTemplateWizard.WindowTitle") );  //$NON-NLS-1$
+        setNeedsProgressMonitor( true );
+		fData = data;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/DriverTemplateSection.java b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/DriverTemplateSection.java
new file mode 100644
index 0000000..c842bd7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/DriverTemplateSection.java
@@ -0,0 +1,229 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.templates;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.osgi.service.resolver.VersionRange;
+import org.eclipse.pde.core.plugin.IPluginBase;
+import org.eclipse.pde.core.plugin.IPluginElement;
+import org.eclipse.pde.core.plugin.IPluginExtension;
+import org.eclipse.pde.core.plugin.IPluginModelFactory;
+import org.eclipse.pde.core.plugin.IPluginReference;
+import org.osgi.framework.Version;
+
+/**
+ * PDE template for Driver Templates 
+ * 
+ * @author brianf
+ *
+ */
+public class DriverTemplateSection extends AbstractConnectivityTemplateSection {
+
+    private static final String EXTENSION_POINT = "org.eclipse.datatools.connectivity.driverExtension"; //$NON-NLS-1$
+	private static final String KEY_DRIVER_ID = "driverID"; //$NON-NLS-1$
+    private static final String KEY_DRIVER_NAME = "driverName"; //$NON-NLS-1$
+    private static final String KEY_DRIVER_DESCRIPTION = "driverDesc"; //$NON-NLS-1$
+    private static final String KEY_DRIVER_CATEGORY = "driverCategory"; //$NON-NLS-1$
+    private static final String KEY_DRIVER_JARLIST = "driverJarList"; //$NON-NLS-1$
+    private static final String KEY_DRIVER_CREATEDEFAULT = "driverCreateDefault"; //$NON-NLS-1$
+    private static final String KEY_DRIVER_EMPTYJARLISTOK = "driverEmptyJarListIsOK"; //$NON-NLS-1$
+    private static final String KEY_DRIVER_PROPERTIES = "properties"; //$NON-NLS-1$
+    
+    /**
+     * Constructor
+     */
+    public DriverTemplateSection() {
+        setPageCount( 2 );
+        createOptions();       
+        initializeOptions();
+	}
+
+	/**
+	 * Creates the options for the template UI
+	 */
+	private void createOptions() {
+		addRequiredOption(KEY_DRIVER_ID, Messages.getString("DriverTemplateSection.DriverTemplateIDLabel")); //$NON-NLS-1$
+		addRequiredOption(KEY_DRIVER_NAME, Messages.getString("DriverTemplateSection.DriverTemplateNameLabel")); //$NON-NLS-1$
+		addRequiredOption(KEY_DRIVER_JARLIST, Messages.getString("DriverTemplateSection.JarListLabel")); //$NON-NLS-1$
+		addOptionalOption(KEY_DRIVER_DESCRIPTION, Messages.getString("DriverTemplateSection.DescriptionLabel")); //$NON-NLS-1$
+		addOptionalOption(KEY_DRIVER_CATEGORY, Messages.getString("DriverTemplateSection.CategoryLabel")); //$NON-NLS-1$
+
+		addOption(KEY_DRIVER_CREATEDEFAULT, Messages.getString("DriverTemplateSection.CreateDefaultLabel"), //$NON-NLS-1$
+				new String [][] {
+					{"true", "true"}, //$NON-NLS-1$ //$NON-NLS-2$
+					{"false", "false"}}, //$NON-NLS-1$ //$NON-NLS-2$
+					"false", 0); //$NON-NLS-1$
+		addOption(KEY_DRIVER_EMPTYJARLISTOK, Messages.getString("DriverTemplateSection.EmptyJarListLabel"), //$NON-NLS-1$
+				new String [][] {
+						{"true", "true"}, //$NON-NLS-1$ //$NON-NLS-2$
+						{"false", "false"}}, //$NON-NLS-1$ //$NON-NLS-2$
+						"false", 0); //$NON-NLS-1$
+
+		registerOption(new PropertyTemplateOption(this, KEY_DRIVER_PROPERTIES, Messages.getString("DriverTemplateSection.PropertiesLabel")), "", 1); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.ui.templates.AbstractConnectivityTemplateSection#getWizardPageDescription()
+	 */
+	protected String getWizardPageDescription() {
+		return Messages.getString("DriverTemplateSection.WizardPageDesc"); //$NON-NLS-1$
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.ui.templates.AbstractConnectivityTemplateSection#getWizardPageTitle()
+	 */
+	protected String getWizardPageTitle() {
+		return Messages.getString("DriverTemplateSection.WizardPageTitle"); //$NON-NLS-1$
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.ui.templates.AbstractConnectivityTemplateSection#initializeOptions()
+	 */
+	protected void initializeOptions() {
+		initializeOption(KEY_DRIVER_ID, Messages.getString("DriverTemplateSection.DefaultDriverID")); //$NON-NLS-1$
+		initializeOption(KEY_DRIVER_NAME, Messages.getString("DriverTemplateSection.DefaultDriverName")); //$NON-NLS-1$
+		initializeOption(KEY_DRIVER_JARLIST, Messages.getString("DriverTemplateSection.DefaultDriverJarList")); //$NON-NLS-1$
+		initializeOption(KEY_DRIVER_DESCRIPTION, Messages.getString("DriverTemplateSection.DefaultDriverDescription")); //$NON-NLS-1$
+		initializeOption(KEY_DRIVER_CATEGORY, ""); //$NON-NLS-1$
+		initializeOption(KEY_DRIVER_CREATEDEFAULT, "false"); //$NON-NLS-1$
+		initializeOption(KEY_DRIVER_EMPTYJARLISTOK, "false"); //$NON-NLS-1$
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.ui.templates.OptionTemplateSection#getSectionId()
+	 */
+	public String getSectionId() {
+		return "driverTemplate"; //$NON-NLS-1$
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.ui.templates.AbstractTemplateSection#updateModel(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	protected void updateModel(IProgressMonitor monitor) throws CoreException {
+		/*
+		 * id, category, name, configurationType, icon, maintainConnection, 
+		 * pingFactory, propertiesPersistenceHook
+		 */
+		IPluginBase plugin = model.getPluginBase();
+		IPluginModelFactory factory = model.getPluginFactory();
+		
+		IPluginExtension extension = 
+			createExtension(getUsedExtensionPoint(), true);
+		
+		IPluginElement element = factory.createElement(extension);
+		element.setName("driverTemplate"); //$NON-NLS-1$
+		element.setAttribute("id", getStringOption(KEY_DRIVER_ID)); //$NON-NLS-1$
+
+		String category = getStringOption(KEY_DRIVER_CATEGORY);
+		if (category != null && category.trim().length() > 0) {
+			element.setAttribute("parentCategory", category); //$NON-NLS-1$
+
+			IPluginElement categoryElement = factory.createElement(extension);
+			categoryElement.setName("category"); //$NON-NLS-1$
+			categoryElement.setAttribute("id", category); //$NON-NLS-1$
+			categoryElement.setAttribute("name", "%driverCategory.name"); //$NON-NLS-1$ //$NON-NLS-2$
+			extension.add(categoryElement);
+		}
+		element.setAttribute("name", "%driverTemplate.name"); //$NON-NLS-1$ //$NON-NLS-2$
+		
+		String description = getStringOption(KEY_DRIVER_DESCRIPTION);
+		if (description == null || description.trim().length() == 0) {
+			description = ""; //$NON-NLS-1$
+		}
+		else
+			element.setAttribute("description", "%driverTemplate.description"); //$NON-NLS-1$ //$NON-NLS-2$
+
+		element.setAttribute("jarList", getStringOption(KEY_DRIVER_JARLIST)); //$NON-NLS-1$
+		String value = (String) getValue(KEY_DRIVER_CREATEDEFAULT);
+		element.setAttribute("createDefault", value); //$NON-NLS-1$
+		value = (String) getValue(KEY_DRIVER_EMPTYJARLISTOK);
+		element.setAttribute("emptyJarListIsOK", value); //$NON-NLS-1$
+		
+		if (getValue(KEY_DRIVER_PROPERTIES) != null) {
+			ArrayList properties = (ArrayList) getValue(KEY_DRIVER_PROPERTIES);
+			if (!properties.isEmpty()) {
+				
+				IPluginElement propsElement = factory.createElement(element);
+				propsElement.setName("properties"); //$NON-NLS-1$
+				Iterator iter = properties.iterator();
+				boolean addedProperties = false;
+				while (iter.hasNext()) {
+					PropertyObject property = (PropertyObject) iter.next();
+					if (property != null) {
+						addedProperties = true;
+						IPluginElement propElement = factory.createElement(propsElement);
+						propElement.setName("property"); //$NON-NLS-1$
+						propElement.setAttribute("id", property.getPropertyID()); //$NON-NLS-1$
+						propElement.setAttribute("name", property.getPropertyName()); //$NON-NLS-1$
+						if (property.getPropertyDescription() != null && property.getPropertyDescription().trim().length() > 0)
+							propElement.setAttribute("description", property.getPropertyDescription()); //$NON-NLS-1$
+						propElement.setAttribute("value", property.getPropertyValue()); //$NON-NLS-1$
+						propElement.setAttribute("visible", property.getPropertyVisible()); //$NON-NLS-1$
+						propElement.setAttribute("required", property.getPropertyRequired()); //$NON-NLS-1$
+						if (property.getPropertyCategory() != null && property.getPropertyCategory().trim().length() > 0)
+							propElement.setAttribute("category", property.getPropertyCategory()); //$NON-NLS-1$
+						propsElement.add(propElement);
+					}
+				}
+				if (addedProperties)
+					element.add(propsElement);
+			}
+		}
+
+		extension.add(element);
+		plugin.add(extension);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.ui.templates.ITemplateSection#getUsedExtensionPoint()
+	 */
+	public String getUsedExtensionPoint() {
+		return EXTENSION_POINT;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.ui.templates.AbstractConnectivityTemplateSection#addPages(org.eclipse.jface.wizard.Wizard)
+	 */
+	public void addPages(Wizard wizard) {
+		WizardPage page0 = createPage(0);
+		page0.setTitle( getWizardPageTitle() ); 
+		page0.setDescription( getWizardPageDescription() );  
+		wizard.addPage(page0);
+
+		WizardPage page1 = createPage(1);
+		page1.setTitle( getWizardPageTitle() ); 
+		page1.setDescription( getWizardPageDescription() );  
+		wizard.addPage(page1);
+		markPagesAdded();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.ui.templates.AbstractTemplateSection#getDependencies(java.lang.String)
+	 */
+	public IPluginReference[] getDependencies( String schemaVersion )
+	{
+		Version version101 = new Version( 1, 0, 1 );
+		Version version200 = new Version( 2, 0, 0 );
+		VersionRange compatible150 = new VersionRange( version101, true, version200, false );       
+
+		return new IPluginReference[] 
+		                            { new CompatiblePluginReference( 
+		                            		"org.eclipse.datatools.connectivity",  //$NON-NLS-1$
+		                            		compatible150.toString() ),
+		                            };
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/Messages.java b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/Messages.java
new file mode 100644
index 0000000..e6666ef
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/Messages.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.templates;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * Message manager for templates plugin
+ * @author brianf
+ *
+ */
+public class Messages {
+	private static final String BUNDLE_NAME = 
+		"org.eclipse.datatools.connectivity.ui.templates.messages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	/**
+	 * Constructor
+	 */
+	private Messages() {
+	}
+
+	/**
+	 * Returns a string for the referenced key
+	 * @param key
+	 * @return
+	 */
+	public static String getString(String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/ProfileSamplePluginTemplateWizard.java b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/ProfileSamplePluginTemplateWizard.java
new file mode 100644
index 0000000..cbe0b10
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/ProfileSamplePluginTemplateWizard.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.templates;
+
+import org.eclipse.pde.ui.IFieldData;
+import org.eclipse.pde.ui.templates.ITemplateSection;
+import org.eclipse.pde.ui.templates.NewPluginTemplateWizard;
+
+/**
+ * Wizard to wrap the Profile Sample template
+ * @author brianf
+ *
+ */
+public class ProfileSamplePluginTemplateWizard extends NewPluginTemplateWizard {
+
+	protected IFieldData fData;
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.ui.templates.NewPluginTemplateWizard#createTemplateSections()
+	 */
+	public ITemplateSection[] createTemplateSections() {
+		return new ITemplateSection[] {
+				new ProfileSampleTemplateSection()};
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.ui.templates.AbstractNewPluginTemplateWizard#init(org.eclipse.pde.ui.IFieldData)
+	 */
+	public void init(IFieldData data) {
+        super.init( data );
+        setWindowTitle( Messages.getString("ProfileSamplePluginTemplateWizard.WizardWindowTitle") ); //$NON-NLS-1$
+        setNeedsProgressMonitor( true );
+		fData = data;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/ProfileSampleTemplateSection.java b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/ProfileSampleTemplateSection.java
new file mode 100644
index 0000000..9838265
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/ProfileSampleTemplateSection.java
@@ -0,0 +1,249 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.templates;
+
+import java.util.ArrayList;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.osgi.service.resolver.VersionRange;
+import org.eclipse.pde.core.plugin.IPluginBase;
+import org.eclipse.pde.core.plugin.IPluginElement;
+import org.eclipse.pde.core.plugin.IPluginExtension;
+import org.eclipse.pde.core.plugin.IPluginModelFactory;
+import org.eclipse.pde.core.plugin.IPluginReference;
+import org.osgi.framework.Version;
+
+/**
+ * PDE template section for defining a new connection profile plug-in
+ * based on the sample.
+ * 
+ * @author brianf
+ *
+ */
+public class ProfileSampleTemplateSection extends AbstractConnectivityTemplateSection {
+
+	private static final String PROFILE_PROPERTY_ID = "org.eclipse.datatools.profile.property.id"; //$NON-NLS-1$
+	private static final String GENERIC_JDBC_CONN_FACTORY = "org.eclipse.datatools.connectivity.db.generic.JDBCConnectionFactory"; //$NON-NLS-1$
+	private static final String EXTENSION_POINT = "org.eclipse.datatools.connectivity.connectionProfile"; //$NON-NLS-1$
+	private static final String PROP_EXTENSION_POINT = "org.eclipse.ui.propertyPages"; //$NON-NLS-1$
+	private static final String KEY_PROFILE_ID = "profileID"; //$NON-NLS-1$
+	private static final String KEY_PROFILE_NAME = "profileName"; //$NON-NLS-1$
+	private static final String KEY_ICON = "icon"; //$NON-NLS-1$
+	private static final String KEY_WIZARD_CLASS = "newWizardClass"; //$NON-NLS-1$
+	private static final String KEY_WIZARD_PAGE_CLASS = "newWizardPageClass"; //$NON-NLS-1$
+	private static final String KEY_PROPERTY_PAGE_CLASS = "propertyPageClass"; //$NON-NLS-1$
+	
+	private static final String GEN_JDBC_CATEGORY = "org.eclipse.datatools.connectivity.db.category"; //$NON-NLS-1$
+
+	/**
+	 * Constructor
+	 */
+	public ProfileSampleTemplateSection() {
+		super();
+		setPageCount( 1 );
+		createOptions();       
+		initializeOptions();
+	}
+
+	/*
+	 * Creates base options
+	 */
+	private void createOptions() {
+		addRequiredOption(KEY_PROFILE_NAME, Messages.getString("ConnectionProfileTemplateSection.ProfileNameLabel")); //$NON-NLS-1$
+		addRequiredOption(KEY_PROFILE_ID, Messages.getString("ConnectionProfileTemplateSection.ProfileIDLabel")); //$NON-NLS-1$
+		addOptionalOption(KEY_ICON, Messages.getString("ConnectionProfileTemplateSection.IconPathLabel")); //$NON-NLS-1$
+		addOptionalOption(KEY_PACKAGE_NAME, Messages.getString("ConnectionProfileTemplateSection.PackageNameLabel")); //$NON-NLS-1$
+		addOptionalOption(KEY_WIZARD_CLASS, Messages.getString("ConnectionProfileTemplateSection.WizardClassLabel")); //$NON-NLS-1$
+		addOptionalOption(KEY_WIZARD_PAGE_CLASS, Messages.getString("ProfileSampleTemplateSection.WizardPageClassLabel")); //$NON-NLS-1$
+		addOptionalOption(KEY_PROPERTY_PAGE_CLASS, Messages.getString("ProfileSampleTemplateSection.PropertyPageClassLabel")); //$NON-NLS-1$
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.ui.templates.OptionTemplateSection#getSectionId()
+	 */
+	public String getSectionId() {
+		return "profileSample";  //$NON-NLS-1$
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.ui.templates.AbstractTemplateSection#updateModel(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	protected void updateModel(IProgressMonitor monitor) throws CoreException {
+		/*
+		 * id, category, name, configurationType, icon, maintainConnection, 
+		 * pingFactory, propertiesPersistenceHook
+		 */
+		IPluginExtension extension = 
+			createExtension(EXTENSION_POINT, true);
+
+		IPluginExtension proppageExtension = 
+			createExtension(PROP_EXTENSION_POINT, true);
+
+        IPluginBase plugin = model.getPluginBase();
+        if ( ! extension.isInTheModel() )
+            plugin.add( extension );
+        if ( ! proppageExtension.isInTheModel() )
+            plugin.add( proppageExtension );
+
+		IPluginModelFactory factory = model.getPluginFactory();
+
+		IPluginElement element = factory.createElement(extension);
+		element.setName("connectionProfile"); //$NON-NLS-1$
+		element.setAttribute("id", getStringOption(KEY_PROFILE_ID)); //$NON-NLS-1$
+
+		element.setAttribute("name", "%connection.profile.name"); //getStringOption(KEY_PROFILE_NAME)); //$NON-NLS-1$ //$NON-NLS-2$
+
+		element.setAttribute("pingFactory", GENERIC_JDBC_CONN_FACTORY); //$NON-NLS-1$
+		element.setAttribute("category", GEN_JDBC_CATEGORY); //$NON-NLS-1$
+
+		String wizard = getStringOption(KEY_WIZARD_CLASS);
+		if (wizard != null && wizard.trim().length() > 0) {
+			IPluginElement wizardElement = factory.createElement(extension);
+			wizardElement.setName("newWizard"); //$NON-NLS-1$
+
+			String id = getStringOption(KEY_PROFILE_ID) + ".newWizard"; //$NON-NLS-1$
+			wizardElement.setAttribute("id", id); //$NON-NLS-1$
+			wizardElement.setAttribute("name", "%wizard.name"); //$NON-NLS-1$ //$NON-NLS-2$
+
+			String fullClassName = getStringOption(KEY_PACKAGE_NAME) + "." + wizard;  //$NON-NLS-1$
+			wizardElement.setAttribute("class", fullClassName); //$NON-NLS-1$
+			wizardElement.setAttribute("profile", getStringOption(KEY_PROFILE_ID)); //$NON-NLS-1$
+			wizardElement.setAttribute("icon", "icons/new_db_element.gif"); //$NON-NLS-1$ //$NON-NLS-2$
+			extension.add(wizardElement);
+		}
+
+		String icon = getStringOption(KEY_ICON);
+		if (icon != null && icon.trim().length() > 0) {
+			element.setAttribute("icon", icon); //$NON-NLS-1$
+		}
+
+		extension.add(element);
+
+		IPluginElement proppageElement = factory.createElement(proppageExtension);
+		proppageElement.setName("page"); //$NON-NLS-1$
+		proppageElement.setAttribute("id", getStringOption(KEY_PROFILE_ID) + ".propertyPage"); //$NON-NLS-1$ //$NON-NLS-2$
+		proppageElement.setAttribute("name", "%connection.profile.proppage.name"); //$NON-NLS-1$ //$NON-NLS-2$
+
+		String fullClassName = getStringOption(KEY_PACKAGE_NAME) + "." + getStringOption(KEY_PROPERTY_PAGE_CLASS);  //$NON-NLS-1$
+		proppageElement.setAttribute("class", fullClassName); //$NON-NLS-1$
+
+		IPluginElement filterElement = factory.createElement(proppageElement);
+		filterElement.setName("filter"); //$NON-NLS-1$
+		filterElement.setAttribute("name", PROFILE_PROPERTY_ID); //$NON-NLS-1$
+		filterElement.setAttribute("value", getStringOption(KEY_PROFILE_ID)); //$NON-NLS-1$
+		proppageElement.add(filterElement);
+
+		IPluginElement enabledWhenElement = factory.createElement(proppageElement);
+		enabledWhenElement.setName("enabledWhen"); //$NON-NLS-1$
+		
+		IPluginElement instanceOfElement = factory.createElement(enabledWhenElement);
+		instanceOfElement.setName("instanceof"); //$NON-NLS-1$
+		instanceOfElement.setAttribute("value", IConnectionProfile.class.getName()); //$NON-NLS-1$
+		enabledWhenElement.add(instanceOfElement);
+
+		proppageElement.add(enabledWhenElement);
+
+		proppageExtension.add(proppageElement);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.ui.templates.ITemplateSection#getUsedExtensionPoint()
+	 */
+	public String getUsedExtensionPoint() {
+		return EXTENSION_POINT;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.ui.templates.AbstractConnectivityTemplateSection#initializeOptions()
+	 */
+	protected void initializeOptions()
+	{
+		String profileName = Messages.getString("ConnectionProfileTemplateSection.DefaultProfileName");  //$NON-NLS-1$
+		String sanitizedProfileName = profileName.replaceAll(" ", ""); //$NON-NLS-1$ //$NON-NLS-2$
+		sanitizedProfileName = sanitizedProfileName.replaceAll("_", ""); //$NON-NLS-1$ //$NON-NLS-2$
+		sanitizedProfileName = sanitizedProfileName.replaceAll("\\.", ""); //$NON-NLS-1$ //$NON-NLS-2$
+		
+		String packageName = "org.mycompany." + sanitizedProfileName.toLowerCase();//$NON-NLS-1$
+		String propertyPageName = sanitizedProfileName + "PropertyPage"; //$NON-NLS-1$
+		String wizardName = sanitizedProfileName + "Wizard"; //$NON-NLS-1$
+		String wizardPageName = sanitizedProfileName + "WizardPage"; //$NON-NLS-1$
+		
+		initializeOption( KEY_PROFILE_NAME, profileName);
+		initializeOption( KEY_PROFILE_ID, Messages.getString("ConnectionProfileTemplateSection.DefaultProfileID")); //$NON-NLS-1$
+		initializeOption( KEY_ICON, "icons/jdbc_16.gif"); //$NON-NLS-1$
+		initializeOption( KEY_PACKAGE_NAME, packageName);
+		initializeOption ( KEY_PROPERTY_PAGE_CLASS, propertyPageName);
+		initializeOption ( KEY_WIZARD_CLASS, wizardName);
+		initializeOption ( KEY_WIZARD_PAGE_CLASS, wizardPageName);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.ui.templates.AbstractTemplateSection#getDependencies(java.lang.String)
+	 */
+	public IPluginReference[] getDependencies( String schemaVersion )
+	{
+		Version version100 = new Version( 1, 0, 0 );
+		Version version101 = new Version( 1, 0, 1 );
+		Version version200 = new Version( 2, 0, 0 );
+		VersionRange compatible150 = new VersionRange( version101, true, version200, false );       
+		VersionRange compatible100 = new VersionRange( version100, true, version200, false );       
+
+		return new IPluginReference[] 
+		                            { new CompatiblePluginReference( 
+		                            		"org.eclipse.datatools.connectivity",  //$NON-NLS-1$
+		                            		compatible150.toString() ),
+		                              new CompatiblePluginReference( 
+		                            		"org.eclipse.datatools.connectivity.ui",  //$NON-NLS-1$
+		                            		compatible150.toString() ),
+		                              new CompatiblePluginReference( 
+		                            		"org.eclipse.datatools.connectivity.db.generic",  //$NON-NLS-1$
+		                            		compatible100.toString() ),
+		                              new CompatiblePluginReference( 
+		                            		"org.eclipse.datatools.connectivity.db.generic.ui",  //$NON-NLS-1$
+		                            		compatible100.toString() )
+		                            };
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.ui.templates.AbstractConnectivityTemplateSection#getWizardPageDescription()
+	 */
+	protected String getWizardPageDescription() {
+		return Messages.getString("ConnectionProfileTemplateSection.WizardPageDesc"); //$NON-NLS-1$
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.ui.templates.AbstractConnectivityTemplateSection#getWizardPageTitle()
+	 */
+	protected String getWizardPageTitle() {
+		return Messages.getString("ConnectionProfileTemplateSection.WizardPageTitle"); //$NON-NLS-1$
+	}
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.template.internal.ui.OdaTemplateSection#getNewFiles()
+     */
+    public String[] getNewFiles()
+    {
+        // merge the inherited list with own file(s)
+        String[] baseBuildList = super.getNewFiles();
+        ArrayList buildList = new ArrayList( baseBuildList.length + 1 );
+        for( int i = 0; i < baseBuildList.length; i++ )
+        {
+            buildList.add( baseBuildList[i] );
+        }
+        
+        // add an entry for the icons
+        buildList.add( "icons/" ); //$NON-NLS-1$
+        
+        return (String[]) buildList.toArray( new String[ buildList.size() ] );
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/PropertyListContentProvider.java b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/PropertyListContentProvider.java
new file mode 100644
index 0000000..94661c6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/PropertyListContentProvider.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.templates;
+
+import java.util.ArrayList;
+
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+/**
+ * List content provider for selected driver properties
+ * @author brianf
+ *
+ */
+public class PropertyListContentProvider implements IStructuredContentProvider {
+
+	private ArrayList propertyList = null;
+	
+	/**
+	 * Constructor
+	 */
+	public PropertyListContentProvider() {
+		// empty
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+	 */
+	public Object[] getElements(Object inputElement) {
+		if (this.propertyList != null)
+			return this.propertyList.toArray();
+		return new Object[0];
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+	 */
+	public void dispose() {
+		this.propertyList.clear();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+	 */
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		if (newInput instanceof ArrayList) {
+			this.propertyList = (ArrayList) newInput;
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/PropertyListLabelProvider.java b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/PropertyListLabelProvider.java
new file mode 100644
index 0000000..efe490a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/PropertyListLabelProvider.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.templates;
+
+import org.eclipse.jface.viewers.LabelProvider;
+
+/**
+ * Label provider for selected driver properties
+ * 
+ * @author brianf
+ *
+ */
+public class PropertyListLabelProvider extends LabelProvider {
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
+	 */
+	public String getText(Object element) {
+		if (element instanceof PropertyObject) {
+			return ((PropertyObject)element).getPropertyName();
+		}
+		return super.getText(element);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/PropertyObject.java b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/PropertyObject.java
new file mode 100644
index 0000000..7f0629e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/PropertyObject.java
@@ -0,0 +1,155 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.templates;
+
+/**
+ * Wrapper for driver property instances
+ * 
+ * @author brianf
+ *
+ */
+public class PropertyObject {
+	
+	private static final String DEFAULT_PROPERTY_VALUE = 
+		Messages.getString("PropertyObject.DefaultPropertyValue"); //$NON-NLS-1$
+	private static final String DEFAULT_PROPERTY_NAME = 
+		Messages.getString("PropertyObject.DefaultPropertyName"); //$NON-NLS-1$
+	private static final String DEFAULT_PROPERTY_ID = 
+		Messages.getString("PropertyObject.DefaultPropertyID"); //$NON-NLS-1$
+	private static final String DEFAULT_PROPERTY_VISIBLE = 
+		Messages.getString("PropertyObject.DefaultPropertyVisible"); //$NON-NLS-1$
+	private static final String DEFAULT_PROPERTY_REQUIRED = 
+		Messages.getString("PropertyObject.DefaultPropertyRequired"); //$NON-NLS-1$
+
+	private String propertyID = null;
+	private String propertyName = null;
+	private String propertyDescription = null;
+	private String propertyValue = null;
+	private String propertyVisible = null;
+	private String propertyRequired = null;
+	private String propertyCategory = null;
+	
+	/**
+	 * Constructor
+	 */
+	public PropertyObject() {
+		initialize();
+	}
+	
+	/**
+	 * Initialize to defaults
+	 */
+	private void initialize() {
+		propertyID = DEFAULT_PROPERTY_ID;
+		propertyName = DEFAULT_PROPERTY_NAME;
+		propertyValue = DEFAULT_PROPERTY_VALUE;
+		propertyVisible = DEFAULT_PROPERTY_VISIBLE;
+		propertyRequired = DEFAULT_PROPERTY_REQUIRED;
+	}
+
+	/**
+	 * Getter for propertyID
+	 */
+	public String getPropertyID() {
+		return propertyID;
+	}
+
+	/**
+	 * Setter for propertyID
+	 */
+	public void setPropertyID(String propertyID) {
+		this.propertyID = propertyID;
+	}
+
+	/**
+	 * Getter for property name
+	 */
+	public String getPropertyName() {
+		return propertyName;
+	}
+
+	/**
+	 * Setter for property name
+	 */
+	public void setPropertyName(String propertyName) {
+		this.propertyName = propertyName;
+	}
+
+	/**
+	 * Getter for property description
+	 */
+	public String getPropertyDescription() {
+		return propertyDescription;
+	}
+
+	/**
+	 * Setter for property description
+	 */
+	public void setPropertyDescription(String propertyDescription) {
+		this.propertyDescription = propertyDescription;
+	}
+
+	/**
+	 * Getter for property value
+	 */
+	public String getPropertyValue() {
+		return propertyValue;
+	}
+
+	/**
+	 * Setter for property value
+	 */
+	public void setPropertyValue(String propertyValue) {
+		this.propertyValue = propertyValue;
+	}
+
+	/**
+	 * Getter for property visible
+	 */
+	public String getPropertyVisible() {
+		return propertyVisible;
+	}
+
+	/**
+	 * Setter for property visible
+	 */
+	public void setPropertyVisible(String propertyVisible) {
+		this.propertyVisible = propertyVisible;
+	}
+
+	/**
+	 * Getter for property required
+	 */
+	public String getPropertyRequired() {
+		return propertyRequired;
+	}
+
+	/**
+	 * Setter for property required
+	 */
+	public void setPropertyRequired(String propertyRequired) {
+		this.propertyRequired = propertyRequired;
+	}
+	
+	/**
+	 * Getter for property category
+	 */
+	public String getPropertyCategory() {
+		return propertyCategory;
+	}
+
+	/**
+	 * Setter for property category
+	 */
+	public void setPropertyCategory(String propertyCategory) {
+		this.propertyCategory = propertyCategory;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/PropertyTemplateOption.java b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/PropertyTemplateOption.java
new file mode 100644
index 0000000..9dff79e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/PropertyTemplateOption.java
@@ -0,0 +1,426 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.templates;
+
+import java.util.ArrayList;
+
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.jface.window.Window;
+import org.eclipse.pde.ui.templates.BaseOptionTemplateSection;
+import org.eclipse.pde.ui.templates.TemplateOption;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Tree;
+
+/**
+ * PDE template for Driver Template properties
+ * @author brianf
+ *
+ */
+public class PropertyTemplateOption extends TemplateOption {
+
+	private TreeViewer tv = null;
+	private ListViewer lv = null;
+	private Shell shell = null;
+	private ArrayList properties = new ArrayList();
+	private Button addButton = null;
+	private Button removeButton = null;
+	private Button editButton = null;
+	private Button duplicateButton = null;
+	private Button clearAllButton = null;
+	
+	/**
+	 * Constructor
+	 * @param section
+	 * @param name
+	 * @param label
+	 */
+	public PropertyTemplateOption(BaseOptionTemplateSection section,
+			String name, String label) {
+		super(section, name, label);
+		setRequired(true);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.ui.templates.TemplateField#createControl(org.eclipse.swt.widgets.Composite, int)
+	 */
+	public void createControl(Composite parent, int span) {
+
+		this.shell = parent.getShell();
+		
+		Composite baseComposite = new Composite(parent, SWT.NONE);
+		GridData bcGD = new GridData(SWT.FILL, SWT.FILL, true, true);
+		bcGD.horizontalSpan = span;
+		baseComposite.setLayoutData(bcGD);
+		GridLayout bcGL = new GridLayout (3, false);
+		bcGL.marginHeight = bcGL.marginWidth = 0;
+		baseComposite.setLayout(bcGL);
+		
+		Tree tree = new Tree (baseComposite, SWT.V_SCROLL | SWT.BORDER | SWT.SINGLE );
+		GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
+		gd.verticalSpan = 4;
+		gd.grabExcessHorizontalSpace = true;
+		tree.setLayoutData(gd);
+		tv = new TreeViewer(tree);
+		tv.setContentProvider( new PropertyTreeContentProvider());
+		tv.setLabelProvider(new PropertyTreeLabelProvider());
+		tv.setSorter(new ViewerSorter());
+		if (getValue() != null) {
+			tv.setInput(ResourcesPlugin.getWorkspace().getRoot());
+		}
+		tv.addSelectionChangedListener(new ISelectionChangedListener() {
+
+			public void selectionChanged(SelectionChangedEvent event) {
+				updateButtons();
+			}
+		});
+		
+		Composite buttonArea = new Composite(baseComposite, SWT.NONE);
+		GridLayout layout = new GridLayout(1, false);
+		layout.marginHeight = layout.marginWidth = 0;
+		buttonArea.setLayout(layout);
+		GridData data = new GridData(GridData.VERTICAL_ALIGN_BEGINNING);
+		buttonArea.setLayoutData(data);
+
+		addButton = new Button(buttonArea, SWT.PUSH);
+		gd = new GridData(SWT.LEFT, SWT.TOP, true, false);
+		addButton.setLayoutData(gd);
+		addButton.setText(Messages.getString("PropertyTemplateOption.AddButton")); //$NON-NLS-1$
+		addButton.addSelectionListener(new SelectionListener() {
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				addProperty();
+			}
+
+			public void widgetSelected(SelectionEvent e) {
+				widgetDefaultSelected(e);
+			}
+		});
+		
+		editButton = new Button(buttonArea, SWT.PUSH);
+		editButton.setLayoutData(gd);
+		editButton.setText(Messages.getString("PropertyTemplateOption.EditButton")); //$NON-NLS-1$
+		editButton.addSelectionListener(new SelectionListener() {
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				editProperty();
+			}
+
+			public void widgetSelected(SelectionEvent e) {
+				widgetDefaultSelected(e);
+			}
+		});
+
+		duplicateButton = new Button(buttonArea, SWT.PUSH);
+		duplicateButton.setLayoutData(gd);
+		duplicateButton.setText(Messages.getString("PropertyTemplateOption.DuplicateButton")); //$NON-NLS-1$
+		duplicateButton.addSelectionListener(new SelectionListener() {
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				duplicateProperty();
+			}
+
+			public void widgetSelected(SelectionEvent e) {
+				widgetDefaultSelected(e);
+			}
+		});
+
+		removeButton = new Button(buttonArea, SWT.PUSH);
+		removeButton.setLayoutData(gd);
+		removeButton.setText(Messages.getString("PropertyTemplateOption.RemoveButton")); //$NON-NLS-1$
+		removeButton.addSelectionListener(new SelectionListener() {
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				removeProperty();
+			}
+
+			public void widgetSelected(SelectionEvent e) {
+				widgetDefaultSelected(e);
+			}
+		});
+		
+		clearAllButton = new Button(buttonArea, SWT.PUSH);
+		clearAllButton.setLayoutData(gd);
+		clearAllButton.setText(Messages.getString("PropertyTemplateOption.ClearSelectedButton")); //$NON-NLS-1$
+		clearAllButton.addSelectionListener(new SelectionListener() {
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				clearAllProperties();
+			}
+
+			public void widgetSelected(SelectionEvent e) {
+				widgetDefaultSelected(e);
+			}
+		});
+
+		List list = new List (baseComposite, SWT.V_SCROLL | SWT.BORDER | SWT.SINGLE );
+		gd = new GridData(SWT.FILL, SWT.FILL, true, true);
+		gd.verticalSpan = 4;
+		gd.grabExcessHorizontalSpace = true;
+		list.setLayoutData(gd);
+		lv = new ListViewer(list);
+		lv.setContentProvider( new PropertyListContentProvider());
+		lv.setLabelProvider(new PropertyListLabelProvider());
+		lv.setSorter(new ViewerSorter());
+		if (getValue() != null) {
+			lv.setInput(getValue());
+		}
+		lv.addSelectionChangedListener(new ISelectionChangedListener() {
+
+			public void selectionChanged(SelectionChangedEvent event) {
+				updateButtons();
+			}
+		});
+		
+		updateButtons();
+		
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.ui.templates.TemplateOption#isEmpty()
+	 */
+	public boolean isEmpty() {
+		return getValue() == null || getValue().toString().length() == 0;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.ui.templates.TemplateOption#setEnabled(boolean)
+	 */
+	public void setEnabled(boolean enabled) {
+		super.setEnabled(enabled);
+		if (lv != null) {
+			lv.getList().setEnabled(enabled);
+		}
+	}
+	
+	/**
+	 * Clears the selected property list
+	 */
+	private void clearAllProperties() {
+		properties.clear();
+		lv.refresh();
+		updateButtons();
+	}
+	
+	/**
+	 * Duplicates the selected property
+	 */
+	private void duplicateProperty() {
+		IStructuredSelection selection = (IStructuredSelection) lv.getSelection();
+		PropertyObject selectedPO = (PropertyObject) selection.getFirstElement();
+		PropertyObject duplicatePO = getDuplicateProperty(selectedPO);
+		properties.add(duplicatePO);
+		lv.refresh();
+	}
+	
+	/**
+	 * Works through properties to find a unique ID
+	 * @param ID
+	 * @return
+	 */
+	private String getUniqueID ( String ID ) {
+		int count = 0;
+		String test = ID;
+		boolean foundOne = false;
+		boolean tryAgain = true;
+		while (tryAgain) {
+			for (int i = 0; i < properties.size(); i++) {
+				PropertyObject po = (PropertyObject) properties.get(i);
+				if (po.getPropertyID().equals(test)) {
+					foundOne = true;
+					break;
+				}
+			}
+			if (!foundOne) {
+				break;
+			}
+			if (foundOne) {
+				count++;
+				test = ID + count;
+				tryAgain = true;
+				foundOne = false;
+			}
+			else {
+				tryAgain = false;
+				break;
+			}
+		}
+		return test;
+	}
+
+	/**
+	 * Works through properties to find a unique name
+	 * @param name
+	 * @return
+	 */
+	private String getUniqueName ( String name ) {
+		int count = 0;
+		String test = name;
+		boolean foundOne = false;
+		boolean tryAgain = true;
+		while (tryAgain) {
+			for (int i = 0; i < properties.size(); i++) {
+				PropertyObject po = (PropertyObject) properties.get(i);
+				if (po.getPropertyName().equals(test)) {
+					foundOne = true;
+					break;
+				}
+			}
+			if (!foundOne) {
+				break;
+			}
+			if (foundOne) {
+				count++;
+				test = name + count;
+				foundOne = false;
+			}
+			else {
+				tryAgain = false;
+				break;
+			}
+		}
+		return test;
+	}
+
+	/**
+	 * Removes the selected property
+	 */
+	private void removeProperty() {
+		IStructuredSelection selection = (IStructuredSelection) lv.getSelection();
+		PropertyObject selectedPO = (PropertyObject) selection.getFirstElement();
+		properties.remove(selectedPO);
+		lv.refresh();
+		updateButtons();
+	}
+	
+	/**
+	 * Edits the selected property
+	 */
+	private void editProperty() {
+		IStructuredSelection selection = (IStructuredSelection) lv.getSelection();
+		PropertyObject selectedPO = (PropertyObject) selection.getFirstElement();
+		DriverPropertyDialog dialog = new DriverPropertyDialog(this.shell);
+		dialog.setPropertyObject(selectedPO);
+		int returnCode = dialog.open();
+		if (returnCode == Window.OK) {
+			lv.refresh();
+		}
+		lv.refresh();
+	}
+
+	/**
+	 * Clones a property object
+	 * @param original
+	 * @return
+	 */
+	private PropertyObject getDuplicateProperty(PropertyObject original) {
+		PropertyObject duplicatePO = new PropertyObject();
+		duplicatePO.setPropertyCategory(original.getPropertyCategory());
+		duplicatePO.setPropertyDescription(original.getPropertyDescription());
+		
+		String newID = getUniqueID(original.getPropertyID());
+		duplicatePO.setPropertyID(newID);
+		
+		String newName = getUniqueName(original.getPropertyName());
+		duplicatePO.setPropertyName(newName);
+		duplicatePO.setPropertyRequired(original.getPropertyRequired());
+		duplicatePO.setPropertyValue(original.getPropertyValue());
+		duplicatePO.setPropertyVisible(original.getPropertyVisible());
+		
+		return duplicatePO;
+	}
+	
+	/**
+	 * Add a new property, either from the tree or from a default 
+	 * property object instance
+	 */
+	private void addProperty() {
+		IStructuredSelection selection = (IStructuredSelection) tv.getSelection();
+		if (!selection.isEmpty()) {
+			if (selection.getFirstElement() instanceof TreeObject &&
+					!(selection.getFirstElement() instanceof TreeParent)) {
+				TreeObject selectedTO = (TreeObject) selection.getFirstElement();
+				properties.add(getDuplicateProperty((PropertyObject)selectedTO.getValue()));
+			}
+			else if (selection.getFirstElement() instanceof TreeParent) {
+				TreeParent selectedTP = (TreeParent) selection.getFirstElement();
+				if (!selectedTP.getChildren().isEmpty()) {
+					Object[] children = selectedTP.getChildrenArray();
+					for (int i = 0; i < children.length; i++) {
+						TreeObject to = (TreeObject) children[i];
+						properties.add(getDuplicateProperty((PropertyObject)to.getValue()));
+					}
+				}
+			}
+			lv.refresh();
+			updateButtons();
+		}
+	}
+	
+	/**
+	 * Update buttons based on selected items
+	 */
+	private void updateButtons() {
+		if (lv.getList().isFocusControl()) {
+			IStructuredSelection lvSelection = (IStructuredSelection) lv.getSelection();
+			editButton.setEnabled(!lvSelection.isEmpty());
+			removeButton.setEnabled(!lvSelection.isEmpty());
+			duplicateButton.setEnabled(!lvSelection.isEmpty());
+		} else {
+			editButton.setEnabled(false);
+			removeButton.setEnabled(false);
+			duplicateButton.setEnabled(false);
+		}
+		if (properties.size() > 0)
+			clearAllButton.setEnabled(true);
+		else
+			clearAllButton.setEnabled(false);
+		
+		if (tv.getTree().isFocusControl()) {
+			IStructuredSelection tvSelection = (IStructuredSelection) tv.getSelection();
+			addButton.setEnabled(!tvSelection.isEmpty());
+		} else {
+			addButton.setEnabled(false);
+		}
+		
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.ui.templates.TemplateOption#getValue()
+	 */
+	public Object getValue() {
+		return properties;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.ui.templates.TemplateOption#setValue(java.lang.Object)
+	 */
+	public void setValue(Object value) {
+		super.setValue(value);
+		if (lv != null) {
+			lv.setInput(value);
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/PropertyTreeContentProvider.java b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/PropertyTreeContentProvider.java
new file mode 100644
index 0000000..fd5c3c1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/PropertyTreeContentProvider.java
@@ -0,0 +1,183 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.templates;
+
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+/**
+ * Tree content provider for the available pre-populated property objects
+ * @author brianf
+ *
+ */
+public class PropertyTreeContentProvider implements ITreeContentProvider {
+
+	private TreeParent rootElement = null;
+	
+	/**
+	 * Constructor
+	 */
+	public PropertyTreeContentProvider() {
+		rootElement = new TreeParent();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+	 */
+	public Object[] getElements(Object inputElement) {
+		if (inputElement != null) {
+			return getChildren(inputElement);
+		}
+		return new Object[0];
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+	 */
+	public void dispose() {
+		rootElement.getChildren().clear();
+		rootElement = null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+	 */
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		// empty
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
+	 */
+	public Object[] getChildren(Object parentElement) {
+		if (parentElement instanceof IWorkspaceRoot) {
+			generateChildren();
+			return rootElement.getChildrenArray();
+		}
+		else if (parentElement instanceof TreeParent) {
+			return ((TreeParent)parentElement).getChildrenArray();
+		}
+		return new Object[0];
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
+	 */
+	public Object getParent(Object element) {
+		if (element instanceof TreeObject) {
+			return ((TreeObject) element).getParent();
+		}
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
+	 */
+	public boolean hasChildren(Object element) {
+		if (element instanceof IWorkspaceRoot) {
+			return rootElement.getChildren().size() > 0;
+		}
+		else if (element instanceof TreeParent) {
+			return ((TreeParent) element).getChildren().size() > 0;
+		}
+		return false;
+	}
+	
+	/**
+	 * generates the list of pre-populated children
+	 * TODO: Defining these pre-populated property objects should be migrated at some point to an extension point
+	 */
+	private void generateChildren() {
+		rootElement.getChildren().clear();
+		
+		TreeParent jdbcProps = new TreeParent();
+		jdbcProps.setName(Messages.getString("PropertyTreeContentProvider.Folder.GenericJDBCProperties")); //$NON-NLS-1$
+		jdbcProps.setParent(rootElement);
+		
+		PropertyObject driverClassPO = new PropertyObject();
+		driverClassPO.setPropertyID(Messages.getString("PropertyTreeContentProvider.DriverClassPropertyID")); //$NON-NLS-1$
+		driverClassPO.setPropertyName(Messages.getString("PropertyTreeContentProvider.DriverClassPropertyName")); //$NON-NLS-1$
+		driverClassPO.setPropertyValue(""); //$NON-NLS-1$
+		jdbcProps.addChild(new TreeObject(driverClassPO.getPropertyName(), 
+				driverClassPO));
+		
+		PropertyObject vendorPO = new PropertyObject();
+		vendorPO.setPropertyID(Messages.getString("PropertyTreeContentProvider.VendorPropertyID")); //$NON-NLS-1$
+		vendorPO.setPropertyName(Messages.getString("PropertyTreeContentProvider.VendorPropertyName")); //$NON-NLS-1$
+		vendorPO.setPropertyValue(Messages.getString("PropertyTreeContentProvider.VendorPropertyValue")); //$NON-NLS-1$
+		vendorPO.setPropertyVisible(Messages.getString("PropertyTreeContentProvider.VendorPropertyVisible")); //$NON-NLS-1$
+		jdbcProps.addChild(new TreeObject(vendorPO.getPropertyName(), 
+				vendorPO));
+		
+		PropertyObject versionPO = new PropertyObject();
+		versionPO.setPropertyID(Messages.getString("PropertyTreeContentProvider.VersionPropertyID")); //$NON-NLS-1$
+		versionPO.setPropertyName(Messages.getString("PropertyTreeContentProvider.VersionPropertyName")); //$NON-NLS-1$
+		versionPO.setPropertyValue(Messages.getString("PropertyTreeContentProvider.VersionPropertyValue")); //$NON-NLS-1$
+		versionPO.setPropertyVisible(Messages.getString("PropertyTreeContentProvider.VersionPropertyVisible")); //$NON-NLS-1$
+		jdbcProps.addChild(new TreeObject(versionPO.getPropertyName(), 
+				versionPO));
+		
+		PropertyObject databaseNamePO = new PropertyObject();
+		databaseNamePO.setPropertyID(Messages.getString("PropertyTreeContentProvider.DatabaseNamePropertyID")); //$NON-NLS-1$
+		databaseNamePO.setPropertyName(Messages.getString("PropertyTreeContentProvider.DatabaseNamePropertyName")); //$NON-NLS-1$
+		databaseNamePO.setPropertyValue(Messages.getString("PropertyTreeContentProvider.DatabaseNamePropertyValue")); //$NON-NLS-1$
+		jdbcProps.addChild(new TreeObject(databaseNamePO.getPropertyName(), 
+				databaseNamePO));
+
+		PropertyObject urlPO = new PropertyObject();
+		urlPO.setPropertyID(Messages.getString("PropertyTreeContentProvider.URLPropertyID")); //$NON-NLS-1$
+		urlPO.setPropertyName(Messages.getString("PropertyTreeContentProvider.URLPropertyName")); //$NON-NLS-1$
+		urlPO.setPropertyValue(Messages.getString("PropertyTreeContentProvider.URLPropertyValue")); //$NON-NLS-1$
+		jdbcProps.addChild(new TreeObject(urlPO.getPropertyName(), 
+				urlPO));
+
+		PropertyObject usernamePO = new PropertyObject();
+		usernamePO.setPropertyID(Messages.getString("PropertyTreeContentProvider.UsernamePropertyID")); //$NON-NLS-1$
+		usernamePO.setPropertyName(Messages.getString("PropertyTreeContentProvider.UsernamePropertyName")); //$NON-NLS-1$
+		usernamePO.setPropertyValue(""); //$NON-NLS-1$
+		jdbcProps.addChild(new TreeObject(usernamePO.getPropertyName(), 
+				usernamePO));
+		
+		rootElement.addChild(jdbcProps);
+
+		TreeParent otherProps = new TreeParent();
+		otherProps.setName(Messages.getString("PropertyTreeContentProvider.OtherCommonPropertiesFolder")); //$NON-NLS-1$
+		otherProps.setParent(rootElement);
+
+		PropertyObject passwordPO = new PropertyObject();
+		passwordPO.setPropertyID(Messages.getString("PropertyTreeContentProvider.PasswordPropertyID")); //$NON-NLS-1$
+		passwordPO.setPropertyName(Messages.getString("PropertyTreeContentProvider.PasswordPropertyName")); //$NON-NLS-1$
+		passwordPO.setPropertyValue(""); //$NON-NLS-1$
+		otherProps.addChild(new TreeObject(passwordPO.getPropertyName(), 
+				passwordPO));
+		
+		PropertyObject connectionPropsPO = new PropertyObject();
+		connectionPropsPO.setPropertyID(Messages.getString("PropertyTreeContentProvider.ConnectionPropertiesPropertyID")); //$NON-NLS-1$
+		connectionPropsPO.setPropertyName(Messages.getString("PropertyTreeContentProvider.ConnectionPropertiesPropertyName")); //$NON-NLS-1$
+		connectionPropsPO.setPropertyValue(Messages.getString("PropertyTreeContentProvider.ConnectionPropertiesPropertyValue")); //$NON-NLS-1$
+		otherProps.addChild(new TreeObject(connectionPropsPO.getPropertyName(), 
+				connectionPropsPO));
+
+		rootElement.addChild(otherProps);
+
+		TreeParent customProps = new TreeParent();
+		customProps.setName(Messages.getString("PropertyTreeContentProvider.CustomPropertiesFolder")); //$NON-NLS-1$
+		customProps.setParent(rootElement);
+
+		PropertyObject newPropPO = new PropertyObject();
+		customProps.addChild(new TreeObject(newPropPO.getPropertyName(), 
+				newPropPO));
+
+		rootElement.addChild(customProps);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/PropertyTreeLabelProvider.java b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/PropertyTreeLabelProvider.java
new file mode 100644
index 0000000..c58cb85
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/PropertyTreeLabelProvider.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.templates;
+
+import org.eclipse.jface.viewers.LabelProvider;
+
+/**
+ * Label provider for the pre-populated property objects tree
+ * @author brianf
+ *
+ */
+public class PropertyTreeLabelProvider extends LabelProvider {
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
+	 */
+	public String getText(Object element) {
+		if (element instanceof TreeObject) {
+			return ((TreeObject)element).getName();
+		}
+		return super.getText(element);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/TreeObject.java b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/TreeObject.java
new file mode 100644
index 0000000..960368b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/TreeObject.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.templates;
+
+/**
+ * Simple Tree object for holding a name/value pair
+ * @author brianf
+ *
+ */
+public class TreeObject {
+
+	private Object value = null;
+	private String name = null;
+	private TreeObject parent = null;
+	
+	/**
+	 * Constructor
+	 */
+	public TreeObject() {
+		// empty
+	}
+	
+	/**
+	 * Constructor
+	 * @param name
+	 * @param value
+	 */
+	public TreeObject(String name, Object value) {
+		this.name = name;
+		this.value = value;
+	}
+	
+	/**
+	 * Getter for value
+	 */
+	public Object getValue() {
+		return value;
+	}
+
+	/**
+	 * Setter for value
+	 */
+	public void setValue(Object value) {
+		this.value = value;
+	}
+
+	/**
+	 * Getter for name
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * Setter for name
+	 */
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	/**
+	 * Getter for parent
+	 */
+	public TreeObject getParent() {
+		return parent;
+	}
+
+	/**
+	 * Setter for parent
+	 */
+	public void setParent(TreeObject parent) {
+		this.parent = parent;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/TreeParent.java b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/TreeParent.java
new file mode 100644
index 0000000..4c36cca
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/TreeParent.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.templates;
+
+import java.util.ArrayList;
+
+/**
+ * Specialized tree object that has children
+ * @author brianf
+ *
+ */
+public class TreeParent extends TreeObject {
+
+	private ArrayList children = new ArrayList();
+
+	/**
+	 * Getter for children
+	 */
+	public ArrayList getChildren() {
+		return children;
+	}
+	
+	/**
+	 * Getter for children as array
+	 */
+	public Object[] getChildrenArray() {
+		return children.toArray();
+	}
+
+	/**
+	 * Adds a child
+	 */
+	public void addChild ( TreeObject tobj ) {
+		tobj.setParent(this);
+		children.add(tobj);
+	}
+	
+	/**
+	 * Removes a child
+	 */
+	public boolean removeChild ( TreeObject tobj ) {
+		if (children.contains(tobj)) {
+			children.remove(tobj);
+			return true;
+		}
+		return false;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/messages.properties b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/messages.properties
new file mode 100644
index 0000000..bf7f8a9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/src/org/eclipse/datatools/connectivity/ui/templates/messages.properties
@@ -0,0 +1,73 @@
+DriverTemplatePluginTemplateWizard.WindowTitle=New Driver Template
+DriverTemplateSection.DriverTemplateIDLabel=Driver Template ID
+DriverTemplateSection.DriverTemplateNameLabel=Driver Template Name
+DriverTemplateSection.DescriptionLabel=Driver Template Description
+DriverTemplateSection.CreateDefaultLabel=Driver Template Create Default Instance
+DriverTemplateSection.EmptyJarListLabel=Driver Template Empty Jar List is OK
+DriverTemplateSection.DefaultDriverName=My Driver Template
+DriverTemplateSection.DefaultDriverJarList=myjar.jar,mysecondjar.jar
+DriverTemplateSection.DefaultDriverDescription=Description of My Driver Template
+ConnectivityPluginTemplateWizard.WindowTitle=New Connection Profile
+ConnectionProfileTemplateSection.ProfileNameLabel=Profile Name
+ConnectionProfileTemplateSection.ProfileIDLabel=Profile ID
+ConnectionProfileTemplateSection.CategoryIDLabel=Category ID
+ConnectionProfileTemplateSection.IconPathLabel=Icon Path
+ConnectionProfileTemplateSection.PackageNameLabel=Default Package Name
+ConnectionProfileTemplateSection.PingFactoryLabel=Ping Factory Class Name
+ConnectionProfileTemplateSection.WizardClassLabel=New Profile Wizard Class Name
+ConnectionProfileTemplateSection.DefaultProfileName=My Connection Profile
+ConnectionProfileTemplateSection.DefaultProfileID=my.connection.profile
+ConnectionProfileTemplateSection.WizardPageDesc=Properties for the Connection Profile extension.
+ConnectionProfileTemplateSection.WizardPageTitle=Connection Profile Extension
+PropertyObject.DefaultPropertyValue=Default value
+PropertyTemplateOption.RemoveButton=Remove
+PropertyObject.DefaultPropertyName=New Property
+PropertyObject.DefaultPropertyID=NEW.PROPERTY
+PropertyTemplateOption.AddButton=Add
+PropertyTemplateOption.EditButton=Edit
+PropertyObject.DefaultPropertyVisible=true
+PropertyObject.DefaultPropertyRequired=true
+PropertyTemplateOption.DuplicateButton=Duplicate
+PropertyTemplateOption.ClearSelectedButton=Clear Selected
+PropertyTreeContentProvider.DriverClassPropertyID=org.eclipse.datatools.connectivity.db.driverClass
+PropertyTreeContentProvider.VendorPropertyID=org.eclipse.datatools.connectivity.db.vendor
+PropertyTreeContentProvider.VendorPropertyName=Vendor
+PropertyTreeContentProvider.VendorPropertyValue=Generic JDBC
+PropertyTreeContentProvider.VendorPropertyVisible=false
+PropertyTreeContentProvider.VersionPropertyID=org.eclipse.datatools.connectivity.db.version
+PropertyTreeContentProvider.VersionPropertyName=Version
+PropertyTreeContentProvider.VersionPropertyValue=1.0
+PropertyTreeContentProvider.URLPropertyID=org.eclipse.datatools.connectivity.db.url
+PropertyTreeContentProvider.URLPropertyName=URL
+PropertyTreeContentProvider.URLPropertyValue=jdbc:
+PropertyTreeContentProvider.UsernamePropertyID=org.eclipse.datatools.connectivity.db.username
+PropertyTreeContentProvider.UsernamePropertyName=User Name
+PropertyTreeContentProvider.PasswordPropertyID=org.eclipse.datatools.connectivity.db.password
+PropertyTreeContentProvider.PasswordPropertyName=Password
+DriverPropertyDialog.IDLabel=ID:
+DriverPropertyDialog.NameLabel=Name:
+DriverPropertyDialog.DescriptionLabel=Description:
+DriverTemplateSection.PropertiesLabel=Properties
+DriverTemplateSection.WizardPageDesc=Properties for the Driver Template extension.
+DriverTemplateSection.WizardPageTitle=Driver Template Extension
+DriverTemplateSection.DefaultDriverID=my.driver.id
+DriverPropertyDialog.ValueLabel=Value:
+DriverPropertyDialog.CategoryLabel=Category:
+DriverPropertyDialog.VisibleLabel=Visible:
+DriverPropertyDialog.RequiredLabel=Required:
+DriverTemplateSection.JarListLabel=Driver Template Jar List
+DriverTemplateSection.CategoryLabel=Driver Template Category
+PropertyTreeContentProvider.Folder.GenericJDBCProperties=Generic JDBC Driver Properties
+PropertyTreeContentProvider.DriverClassPropertyName=Driver Class
+ProfileSamplePluginTemplateWizard.WizardWindowTitle=New Connection Profile Sample
+ProfileSampleTemplateSection.WizardPageClassLabel=Wizard Page Class
+ProfileSampleTemplateSection.PropertyPageClassLabel=Property Page Class
+PropertyTreeContentProvider.VersionPropertyVisible=false
+PropertyTreeContentProvider.DatabaseNamePropertyID=org.eclipse.datatools.connectivity.db.databaseName
+PropertyTreeContentProvider.DatabaseNamePropertyName=Database Name
+PropertyTreeContentProvider.DatabaseNamePropertyValue=SAMPLE
+PropertyTreeContentProvider.OtherCommonPropertiesFolder=Other Common Driver Properties
+PropertyTreeContentProvider.ConnectionPropertiesPropertyID=org.eclipse.datatools.connectivity.db.generic.connectionproperties
+PropertyTreeContentProvider.ConnectionPropertiesPropertyName=Connection Properties
+PropertyTreeContentProvider.ConnectionPropertiesPropertyValue=property1=value1,property2=value2
+PropertyTreeContentProvider.CustomPropertiesFolder=Custom Driver Properties
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/connectionProfile/bin/icons/jdbc_16.gif b/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/connectionProfile/bin/icons/jdbc_16.gif
new file mode 100644
index 0000000..ef7809c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/connectionProfile/bin/icons/jdbc_16.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/connectionProfile/bin/icons/new_db_element.gif b/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/connectionProfile/bin/icons/new_db_element.gif
new file mode 100644
index 0000000..1d459ce
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/connectionProfile/bin/icons/new_db_element.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/connectionProfile/java/$newWizardClass$.java b/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/connectionProfile/java/$newWizardClass$.java
new file mode 100644
index 0000000..24bd1bb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/connectionProfile/java/$newWizardClass$.java
@@ -0,0 +1,47 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007 <<Your Company Name here>>
+ *  
+ *************************************************************************
+ */
+package $packageName$;
+
+import java.util.Properties;
+import org.eclipse.datatools.connectivity.ui.wizards.NewConnectionProfileWizard;
+
+/**
+ * Auto-generated implementation of a custom new profile wizard. 
+ *
+ * See the NewConnectionProfileWizard class in the 
+ * org.eclipse.datatools.connectivity.db.generic.ui plug-in
+ * as an example.
+ * 
+ * Implementers are expected to change this exemplary implementation 
+ * as appropriate. 
+ */
+public class $newWizardClass$
+		extends NewConnectionProfileWizard {
+
+	public $newWizardClass$() {
+	}
+
+    /**
+     * @see org.eclipse.datatools.connectivity.ui.wizards.NewConnectionProfileWizard#addCustomPages()
+     */
+	public void addCustomPages() {
+		/*
+		 * Add custom wizard pages here
+		 */
+	}
+
+	/** 
+     * @see org.eclipse.datatools.connectivity.ui.wizards.NewConnectionProfileWizard#getProfileProperties()
+	 */
+	public Properties getProfileProperties() {
+		Properties props = new Properties();
+		/*
+		 * Set properties here
+		 */
+		return props;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/connectionProfile/java/$pingFactory$.java b/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/connectionProfile/java/$pingFactory$.java
new file mode 100644
index 0000000..63e5456
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/connectionProfile/java/$pingFactory$.java
@@ -0,0 +1,54 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007 <<Your Company Name here>>
+ *  
+ *************************************************************************
+ */
+package $packageName$;
+
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionFactory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+
+/**
+ * Auto-generated implementation of a custom ping connection factory
+ * that provides a custom IConnection instance. 
+ * 
+ * <code>org.eclipse.datatools.connectivity.IConnectionFactory</code> for
+ * creating <code>org.eclipse.datatools.connectivity.IConnection</code> connections.
+ * <br>
+ * Implementers are expected to change this exemplary implementation 
+ * as appropriate. 
+ */
+public class $pingFactory$ implements IConnectionFactory {
+
+	/**
+	 * 
+	 */
+	public $pingFactory$() {
+		super();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionFactory#createConnection(org.eclipse.datatools.connectivity.IConnectionProfile)
+	 */
+	public IConnection createConnection(IConnectionProfile profile) {
+		// Must implement an IConnection class or base it on an existing 
+		// connection class such as JDBCConnection 
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionFactory#createConnection(org.eclipse.datatools.connectivity.IConnectionProfile,
+	 *      java.lang.String, java.lang.String)
+	 */
+	public IConnection createConnection(IConnectionProfile profile, String uid,
+			String pwd) {
+		return createConnection(profile);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/connectionProfile/plugin.properties b/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/connectionProfile/plugin.properties
new file mode 100644
index 0000000..540cd6e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/connectionProfile/plugin.properties
@@ -0,0 +1,13 @@
+###############################################################################
+# Copyright (c) 2007 <<Your Company Name here>>
+#
+###############################################################################
+
+###############################################################################
+# NLS String
+###############################################################################
+#
+plugin.name=$profileName$ Connection Profile Plug-in
+connection.profile.name=$profileName$
+category.name=$category$ Category
+wizard.name=New $profileName$ Connection Profile
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/driverTemplate/plugin.properties b/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/driverTemplate/plugin.properties
new file mode 100644
index 0000000..7f72fce
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/driverTemplate/plugin.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2007 <<Your Company Name here>>
+#
+###############################################################################
+
+###############################################################################
+# NLS String
+###############################################################################
+#
+driverTemplate.name = $driverName$ Driver
+driverTemplate.description = $driverDesc$
+driverCategory.name = $driverCategory$ Category
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/profileSample/bin/icons/jdbc_16.gif b/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/profileSample/bin/icons/jdbc_16.gif
new file mode 100644
index 0000000..ef7809c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/profileSample/bin/icons/jdbc_16.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/profileSample/bin/icons/new_db_element.gif b/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/profileSample/bin/icons/new_db_element.gif
new file mode 100644
index 0000000..1d459ce
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/profileSample/bin/icons/new_db_element.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/profileSample/java/$newWizardClass$.java b/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/profileSample/java/$newWizardClass$.java
new file mode 100644
index 0000000..a2a431c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/profileSample/java/$newWizardClass$.java
@@ -0,0 +1,35 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007 <<Your Company Name here>>
+ *  
+ *************************************************************************
+ */
+package $packageName$;
+
+import java.util.Properties;
+import org.eclipse.datatools.connectivity.db.generic.ui.NewConnectionProfileWizard;
+
+/**
+ * Auto-generated implementation of a custom new profile wizard. 
+ *
+ * See the NewConnectionProfileWizard class in the 
+ * org.eclipse.datatools.connectivity.db.generic.ui plug-in
+ * as an example.
+ * 
+ * Implementers are expected to change this exemplary implementation 
+ * as appropriate. 
+ */
+public class $newWizardClass$
+		extends NewConnectionProfileWizard {
+
+	public $newWizardClass$() {
+		super();
+	}
+
+	/** 
+     * @see org.eclipse.datatools.connectivity.ui.wizards.NewConnectionProfileWizard#getProfileProperties()
+	 */
+	public Properties getProfileProperties() {
+		return super.getProfileProperties();
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/profileSample/java/$newWizardPageClass$.java b/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/profileSample/java/$newWizardPageClass$.java
new file mode 100644
index 0000000..61e285a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/profileSample/java/$newWizardPageClass$.java
@@ -0,0 +1,28 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007 <<Your Company Name here>>
+ *  
+ *************************************************************************
+ */
+package $packageName$;
+
+import org.eclipse.datatools.connectivity.db.generic.ui.GenericDBProfileDetailsWizardPage;
+
+/**
+ * Auto-generated implementation of a custom new profile wizard page. 
+ *
+ * See the GenericDBProfileDetailsWizardPage class in the 
+ * org.eclipse.datatools.connectivity.db.generic.ui plug-in
+ * as an example.
+ * 
+ * Implementers are expected to change this exemplary implementation 
+ * as appropriate. 
+ */
+public class $newWizardPageClass$
+		extends GenericDBProfileDetailsWizardPage {
+
+	public $newWizardPageClass$(String pageName) {
+		super(pageName);
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/profileSample/java/$propertyPageClass$.java b/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/profileSample/java/$propertyPageClass$.java
new file mode 100644
index 0000000..699eb52
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/profileSample/java/$propertyPageClass$.java
@@ -0,0 +1,28 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007 <<Your Company Name here>>
+ *  
+ *************************************************************************
+ */
+package $packageName$;
+
+import org.eclipse.datatools.connectivity.db.generic.ui.GenericDBProfilePropertyPage;
+
+/**
+ * Auto-generated implementation of a custom connection profile property page. 
+ *
+ * See the GenericDBProfilePropertyPage class in the 
+ * org.eclipse.datatools.connectivity.db.generic.ui plug-in
+ * as an example.
+ * 
+ * Implementers are expected to change this exemplary implementation 
+ * as appropriate. 
+ */
+public class $propertyPageClass$
+		extends GenericDBProfilePropertyPage {
+
+	public $propertyPageClass$() {
+		super();
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/profileSample/plugin.properties b/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/profileSample/plugin.properties
new file mode 100644
index 0000000..0027ed1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui.templates/templates_3.2/profileSample/plugin.properties
@@ -0,0 +1,14 @@
+###############################################################################
+# Copyright (c) 2007 <<Your Company Name here>>
+#
+###############################################################################
+
+###############################################################################
+# NLS String
+###############################################################################
+#
+plugin.name=$profileName$ Connection Profile Plug-in
+connection.profile.name=$profileName$
+category.name=$category$ Category
+wizard.name=New $profileName$ Connection Profile
+connection.profile.proppage.name=$profileName$ Properties
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/.classpath b/plugins/org.eclipse.datatools.connectivity.ui/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/.gitignore b/plugins/org.eclipse.datatools.connectivity.ui/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/.project b/plugins/org.eclipse.datatools.connectivity.ui/.project
new file mode 100644
index 0000000..458b1fd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.connectivity.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0e5afc3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Fri Feb 26 12:16:32 PST 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.connectivity.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..09d764d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,37 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Plugin.Name
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.ui; singleton:=true
+Bundle-Version: 1.4.1.qualifier
+Bundle-Activator: org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin
+Bundle-Vendor: %Plugin.ProviderName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.core.resources,
+ org.eclipse.ui,
+ org.eclipse.ui.views,
+ org.eclipse.datatools.connectivity,
+ org.eclipse.ui.navigator,
+ org.eclipse.core.expressions,
+ org.eclipse.ltk.core.refactoring,
+ org.eclipse.datatools.help,
+ org.eclipse.help;visibility:=reexport,
+ org.eclipse.datatools.connectivity.sqm.core,
+ org.eclipse.datatools.modelbase.sql
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.datatools.connectivity.internal.ui,
+ org.eclipse.datatools.connectivity.internal.ui.dialogs,
+ org.eclipse.datatools.connectivity.internal.ui.drivers,
+ org.eclipse.datatools.connectivity.internal.ui.preferences,
+ org.eclipse.datatools.connectivity.internal.ui.refactoring,
+ org.eclipse.datatools.connectivity.internal.ui.wizards,
+ org.eclipse.datatools.connectivity.ui,
+ org.eclipse.datatools.connectivity.ui.actions,
+ org.eclipse.datatools.connectivity.ui.navigator,
+ org.eclipse.datatools.connectivity.ui.navigator.actions,
+ org.eclipse.datatools.connectivity.ui.status,
+ org.eclipse.datatools.connectivity.ui.wizards
+Import-Package: com.ibm.icu.text,
+ com.ibm.icu.util
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/about.html b/plugins/org.eclipse.datatools.connectivity.ui/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/build.properties b/plugins/org.eclipse.datatools.connectivity.ui/build.properties
new file mode 100644
index 0000000..0c66ed0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/build.properties
@@ -0,0 +1,18 @@
+bin.includes = plugin.xml,\
+               icons/,\
+               plugin.properties,\
+               about.html,\
+               META-INF/,\
+               .,\
+               schema/
+jars.compile.order = .
+source.. = src/
+output.. = bin/
+
+src.dir =		src/
+plugin.version =	1.1.0.200802201
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/build.xml b/plugins/org.eclipse.datatools.connectivity.ui/build.xml
new file mode 100644
index 0000000..a88e302
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/build.xml
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ *************************************************************************
+ * Copyright (c) 2005 Sybase, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Sybase, Inc.  - initial API and implementation
+ *  
+ ***************************************************************************
+ -->
+<project name="org.eclipse.datatools.connectivity.ui" default="build.jars" basedir=".">
+	<import file="../org.eclipse.datatools.build/common_build.xml" optional="true"/>
+	<property name="module.name" value="org.eclipse.datatools.connectivity.ui"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="eclipse.home" location="."/>
+	<property file="build.properties"/>
+	<!-- JavaDoc settings -->
+	<property name="javadocWindowTitle" value="DTP Driver and Connection Management Frameworks UI"/>
+	<property name="javadocDocTitle" value="DTP Driver and Connection Management Frameworks UI API (Internal)"/>
+	<property name="javadocPackages" value="org.eclipse.datatools.connectivity.ui.*"/>
+	<property name="javadocFooter" value="&lt;i>Copyright &#169;  2005 Sybase, Inc. and others. All rights reserved. &lt;/i>"/>
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="true"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="true"/>
+	<property name="javacSource" value="${javac.source}"/>
+	<property name="javacTarget" value="${javac.target}"/>
+	<property name="compilerArg" value=""/>
+	<path id="path_bootclasspath">
+		<fileset dir="${java.home}/lib">
+			<include name="*.jar"/>
+		</fileset>
+		<fileset dir="${eclipse.home}/plugins">
+			<!-- Include jared plug-ins -->
+			<include name="org.eclipse.core.runtime_*.jar"/>
+			<include name="org.eclipse.osgi_*.jar"/>
+			<include name="org.eclipse.core.resources_*.jar"/>
+			<include name="org.eclipse.ui_*.jar"/>
+			<include name="org.eclipse.swt_*.jar"/>
+			<include name="org.eclipse.swt.*_*.jar"/>
+			<include name="org.eclipse.jface_*.jar"/>
+			<include name="org.eclipse.core.commands_*.jar"/>
+			<include name="org.eclipse.ui.workbench_*.jar"/>
+			<include name="org.eclipse.ui.views_*.jar"/>
+			<include name="org.eclipse.core.expressions_*.jar"/>
+			<include name="com.ibm.icu_*.jar"/>
+			<include name="org.eclipse.ui.navigator_*.jar"/>
+			<!-- Include expanded plug-ins -->
+			<include name="org.eclipse.core.runtime_*/org.eclipse.core.runtime_*.jar"/>
+			<include name="org.eclipse.osgi_*/org.eclipse.osgi_*.jar"/>
+			<include name="org.eclipse.core.resources_*/org.eclipse.core.resources_*.jar"/>
+			<include name="org.eclipse.ui_*/org.eclipse.ui_*.jar"/>
+			<include name="org.eclipse.swt_*/org.eclipse.swt_*.jar"/>
+			<include name="org.eclipse.swt.*_*/org.eclipse.swt.*_*.jar"/>
+			<include name="org.eclipse.jface_*/org.eclipse.jface_*.jar"/>
+			<include name="org.eclipse.core.commands_*/org.eclipse.core.commands_*.jar"/>
+			<include name="org.eclipse.ui.workbench_*/org.eclipse.ui.workbench_*.jar"/>
+			<include name="org.eclipse.ui.views_*/org.eclipse.ui.views_*.jar"/>
+			<include name="org.eclipse.ui.navigator_*/navigator.jar"/>
+			<include name="org.eclipse.core.expressions_*/org.eclipse.core.expressions_*.jar"/>
+		</fileset>
+		<!-- Dependencies on other DTP plug-ins, built before this one -->
+		<fileset dir="../">
+			<include name="org.eclipse.datatools.connectivity/bin/*"/>
+			<include name="org.eclipse.datatools.connectivity/connectivity.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins">
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/${module.name}">
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+	</target>
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+	</target>
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.datatools.connectivity.ui for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<zip destfile="${plugin.destination}/${module.name}_${plugin.version}.jar" basedir="${temp.folder}/${module.name}_${plugin.version}" filesonly="false" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+	<target name="connectivityui.jar" depends="init" unless="connectivityui.jar" description="Create jar: ${module.name} connectivityui.jar.">
+		<delete dir="${temp.folder}/connectivityui.jar.bin"/>
+		<mkdir dir="${temp.folder}/connectivityui.jar.bin"/>
+		<!-- compile the source code -->
+		<javac destdir="${temp.folder}/connectivityui.jar.bin" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bootclasspath}" source="${javacSource}" target="${javacTarget}">
+			<compilerarg line="${compilerArg}"/>
+			<classpath refid="path_bootclasspath"/>
+			<src path="src/"/>
+		</javac>
+		<!-- Copy necessary resources -->
+		<copy todir="${temp.folder}/connectivityui.jar.bin" failonerror="true" overwrite="false">
+			<fileset dir="src/" excludes="**/*.java, **/package.htm*,null"/>
+		</copy>
+		<mkdir dir="${build.result.folder}"/>
+		<jar destfile="${build.result.folder}/connectivityui.jar" basedir="${temp.folder}/connectivityui.jar.bin"/>
+		<delete dir="${temp.folder}/connectivityui.jar.bin"/>
+	</target>
+	<target name="connectivityuisrc.zip" depends="init" unless="connectivityuisrc.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<zip destfile="${build.result.folder}/connectivityuisrc.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/" includes="**/*.java"/>
+		</zip>
+	</target>
+	<target name="build.jars" depends="init" description="Build all the jars for the plug-in: org.eclipse.datatools.connectivity.ui.">
+		<available property="connectivityui.jar" file="${build.result.folder}/connectivityui.jar"/>
+		<antcall target="connectivityui.jar"/>
+	</target>
+	<target name="build.sources" depends="init">
+		<available property="connectivityuisrc.zip" file="${build.result.folder}/connectivityuisrc.zip"/>
+		<antcall target="connectivityuisrc.zip"/>
+	</target>
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/${module.name}_${plugin.version}"/>
+		<copy todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}" includes="connectivityui.jar"/>
+		</copy>
+		<copy todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="true" overwrite="false">
+			<fileset dir="${basedir}" includes="plugin.xml,icons/,plugin.properties,about.html,META-INF/,connectivityui.jar"/>
+		</copy>
+		<copy todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}" includes="connectivityui.jar"/>
+		</copy>
+		<copy todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}" includes="connectivityuisrc.zip"/>
+		</copy>
+	</target>
+	<target name="build.zips" depends="init"/>
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/${module.name}_${plugin.version}"/>
+		<copy file="${build.result.folder}/connectivityuisrc.zip" todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="false" overwrite="false"/>
+	</target>
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/${module.name}_${plugin.version}"/>
+		<copy file="${temp.folder}/connectivityui.jar.bin.log" todir="${destination.temp.folder}/${module.name}_${plugin.version}" failonerror="false" overwrite="false"/>
+	</target>
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.datatools.connectivity.ui of all the zips, jars and logs created.">
+		<delete file="${build.result.folder}/connectivityui.jar"/>
+		<delete file="${build.result.folder}/connectivityuisrc.zip"/>
+		<delete file="${plugin.destination}/${module.name}_${plugin.version}.jar"/>
+		<delete file="${plugin.destination}/${module.name}_${plugin.version}.zip"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="C:/V3/3.1/eclipse/workspace-dtp/org.eclipse.datatools.connectivity.ui" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.datatools.connectivity.ui.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}" includes="**/*.bin.log"/>
+		</delete>
+		<zip destfile="${plugin.destination}/${module.name}_${plugin.version}.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+</project>
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/add_obj2.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/add_obj2.gif
new file mode 100644
index 0000000..06d0915
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/add_obj2.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/change_obj.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/change_obj.gif
new file mode 100644
index 0000000..ce8bdb9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/change_obj.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/connection1_newwiz.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/connection1_newwiz.gif
new file mode 100644
index 0000000..864034f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/connection1_newwiz.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/driver_category_obj.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/driver_category_obj.gif
new file mode 100644
index 0000000..a3fbeb5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/driver_category_obj.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/driver_obj.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/driver_obj.gif
new file mode 100644
index 0000000..86a4007
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/driver_obj.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/clcl16/add_server.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/clcl16/add_server.gif
new file mode 100644
index 0000000..8b37b6b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/clcl16/add_server.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/clcl16/clear_co.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/clcl16/clear_co.gif
new file mode 100644
index 0000000..2558326
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/clcl16/clear_co.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/clcl16/collapseall.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/clcl16/collapseall.gif
new file mode 100644
index 0000000..a2d80a9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/clcl16/collapseall.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/clcl16/expandall.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/clcl16/expandall.gif
new file mode 100644
index 0000000..7a02b90
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/clcl16/expandall.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/clcl16/export.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/clcl16/export.gif
new file mode 100644
index 0000000..1a7ee91
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/clcl16/export.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/clcl16/extensions.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/clcl16/extensions.gif
new file mode 100644
index 0000000..dda8bae
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/clcl16/extensions.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/clcl16/import.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/clcl16/import.gif
new file mode 100644
index 0000000..7ec1bdf
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/clcl16/import.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/clcl16/local_repository.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/clcl16/local_repository.gif
new file mode 100644
index 0000000..1ad5619
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/clcl16/local_repository.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/clcl16/remove_server.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/clcl16/remove_server.gif
new file mode 100644
index 0000000..ed7a9ed
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/clcl16/remove_server.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/cview16/console_view.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/cview16/console_view.gif
new file mode 100644
index 0000000..ea7b666
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/cview16/console_view.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/cview16/enterprise_explorer.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/cview16/enterprise_explorer.gif
new file mode 100644
index 0000000..cb9f3c1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/cview16/enterprise_explorer.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/dlcl16/clear_co.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/dlcl16/clear_co.gif
new file mode 100644
index 0000000..d873c49
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/dlcl16/clear_co.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/dlcl16/collapseall.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/dlcl16/collapseall.gif
new file mode 100644
index 0000000..7dc0de5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/dlcl16/collapseall.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/dlcl16/expandall.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/dlcl16/expandall.gif
new file mode 100644
index 0000000..73be6de
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/dlcl16/expandall.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/elcl16/clear_co.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/elcl16/clear_co.gif
new file mode 100644
index 0000000..6faf8d6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/elcl16/clear_co.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/elcl16/collapseall.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/elcl16/collapseall.gif
new file mode 100644
index 0000000..a2d80a9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/elcl16/collapseall.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/elcl16/expandall.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/elcl16/expandall.gif
new file mode 100644
index 0000000..7a02b90
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/elcl16/expandall.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/elcl16/extensions.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/elcl16/extensions.gif
new file mode 100644
index 0000000..dda8bae
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/elcl16/extensions.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/check_obj.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/check_obj.gif
new file mode 100644
index 0000000..00da14e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/check_obj.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/components_obj.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/components_obj.gif
new file mode 100644
index 0000000..475cfd6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/components_obj.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/default_server_started_obj.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/default_server_started_obj.gif
new file mode 100644
index 0000000..6fc68ac
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/default_server_started_obj.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/default_server_stopped_obj.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/default_server_stopped_obj.gif
new file mode 100644
index 0000000..7bc36a6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/default_server_stopped_obj.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/server_default_obj.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/server_default_obj.gif
new file mode 100644
index 0000000..04b7ac2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/server_default_obj.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/server_obj.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/server_obj.gif
new file mode 100644
index 0000000..7bc36a6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/server_obj.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/server_set_obj.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/server_set_obj.gif
new file mode 100644
index 0000000..3afbcd8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/server_set_obj.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/server_started_obj.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/server_started_obj.gif
new file mode 100644
index 0000000..6fc68ac
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/server_started_obj.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/server_stopped_obj.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/server_stopped_obj.gif
new file mode 100644
index 0000000..7bc36a6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/server_stopped_obj.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/uncheck_obj.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/uncheck_obj.gif
new file mode 100644
index 0000000..7bd1256
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/obj16/uncheck_obj.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/ovr16/error_co.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/ovr16/error_co.gif
new file mode 100644
index 0000000..8612eaf
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/ovr16/error_co.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/ovr16/obj_ovr_error.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/ovr16/obj_ovr_error.gif
new file mode 100644
index 0000000..8612eaf
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/ovr16/obj_ovr_error.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/ovr16/obj_ovr_server.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/ovr16/obj_ovr_server.gif
new file mode 100644
index 0000000..830fd50
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/ovr16/obj_ovr_server.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/ovr16/obj_ovr_server_off.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/ovr16/obj_ovr_server_off.gif
new file mode 100644
index 0000000..25187a0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/ovr16/obj_ovr_server_off.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/ovr16/warning_co.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/ovr16/warning_co.gif
new file mode 100644
index 0000000..3af228c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/ovr16/warning_co.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/full/wizban/new_wiz.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/wizban/new_wiz.gif
new file mode 100644
index 0000000..ecd75f4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/full/wizban/new_wiz.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/jdbc_16.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/jdbc_16.gif
new file mode 100644
index 0000000..ef7809c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/jdbc_16.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/new_db_element.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/new_db_element.gif
new file mode 100644
index 0000000..1d459ce
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/new_db_element.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/new_repository_action.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/new_repository_action.gif
new file mode 100644
index 0000000..0136b56
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/new_repository_action.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/sample.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/sample.gif
new file mode 100644
index 0000000..940ea27
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/sample.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/icons/view_menu.gif b/plugins/org.eclipse.datatools.connectivity.ui/icons/view_menu.gif
new file mode 100644
index 0000000..a492838
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/icons/view_menu.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/plugin.properties b/plugins/org.eclipse.datatools.connectivity.ui/plugin.properties
new file mode 100644
index 0000000..a0f43b5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/plugin.properties
@@ -0,0 +1,38 @@
+################################################################################
+## Copyright (c) 2005 Sybase, Inc.
+## All rights reserved. This program and the accompanying materials
+## are made available under the terms of the Eclipse Public License v1.0
+## which accompanies this distribution, and is available at
+## http://www.eclipse.org/legal/epl-v10.html
+##
+## Contributors:
+##    Sybase, Inc. - initial API and implementation
+################################################################################ 
+Plugin.Name = Data Tools Platform Connectivity UI Plug-in
+Plugin.ProviderName = Eclipse Data Tools Platform
+
+Database.category = Databases
+Extension.PropertyPage.General.Name = Common
+Extension.PropertyPage.Version.Name = Version
+ProfileFailure = Profile Failures
+driverProblem = Driver Problems
+Extension.NewWizard.Name = Connection Profile
+Extension.NewWizard.Description = Create a connection profile
+Extension.NewRepositoryWizard.Name = Connection Profile Repository
+Extension.NewRepositoryWizard.Description = Create a new repository for connection profiles
+datatools.preference.page.name=Connectivity
+drivers.preference.page.name = Driver Definitions
+category.name.connectionProfiles = Connection Profiles
+datatools.core.ui.preferences.data.node = Data Management
+
+DSE.content = Data Source Explorer Extension
+CP.content = Connection Profiles
+
+AddProfile.command.label = New Connection Profile Command
+AddProfile.command.description = Command to create a new connection profile
+AddRepositoryProfile.command.label = New Repository Profile Command
+AddRepositoryProfile.command.description = Command to create a new repository profile
+ExportProfile.command.label = Export Profiles Command
+ExportProfile.command.description = Command to export connection profiles
+ImportProfile.command.label = Import Profiles Command
+ImportProfile.command.description = Command to import connection profiles
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/plugin.xml b/plugins/org.eclipse.datatools.connectivity.ui/plugin.xml
new file mode 100644
index 0000000..75abe06
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/plugin.xml
@@ -0,0 +1,348 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+   <extension-point id="driverPropertyEditor" name="Driver Property Editor" schema="schema/driverPropertyEditor.exsd"/>
+   <extension-point id="driverUIContributor" name="Driver UI Contributor" schema="schema/driverUIContributor.exsd"/>
+   <extension-point id="connectionProfileImage" name="Connection Profile Image" schema="schema/connectionProfileImage.exsd"/>
+   <extension-point id="addConnectListener" name="%extension-point.name.addConnectListener" schema="schema/addConnectListener.exsd"/>   
+   <extension-point id="connectionExceptionHandler" name="Connection Exception Handler" schema="schema/connectionExceptionHandler.exsd"/>
+    
+   <extension point="org.eclipse.ui.preferencePages">
+   	<page name="%datatools.preference.page.name" class="org.eclipse.datatools.connectivity.internal.ui.preferences.DataToolsMainPage"
+   	id = "org.eclipse.datatools.connectivity.internal.ui.preferences.DataToolsMainPage"
+   	category="org.eclipse.datatools.connectivity.ui.preferences.dataNode"/>
+   	</extension>
+   <extension
+         point="org.eclipse.ui.preferencePages">
+      <page
+            name="%drivers.preference.page.name"
+            class="org.eclipse.datatools.connectivity.internal.ui.preferences.DriverPreferences"
+            id="org.eclipse.datatools.connectivity.internal.ui.preferences.DriverPreferences"
+            category="org.eclipse.datatools.connectivity.internal.ui.preferences.DataToolsMainPage">
+      </page>
+      <!-- Data Tooling Node -->
+      <page
+            name="%datatools.core.ui.preferences.data.node"
+            class="org.eclipse.datatools.connectivity.ui.DataPreferencePage"
+            id="org.eclipse.datatools.connectivity.ui.preferences.dataNode">
+      </page>
+   </extension>
+   <extension
+         point="org.eclipse.ui.propertyPages">
+      <page
+            name="%Extension.PropertyPage.General.Name"
+            class="org.eclipse.datatools.connectivity.internal.ui.wizards.CPPropetyPage"
+            id="org.eclipse.datatools.connectivity.internal.ui.properties.ProfileGeneralPropertyPage">
+         <enabledWhen>
+            <instanceof
+                  value="org.eclipse.datatools.connectivity.IConnectionProfile">
+            </instanceof>
+         </enabledWhen>
+      </page>
+      <page
+            class="org.eclipse.datatools.connectivity.internal.ui.wizards.CPVersionPropertyPage"
+            name="%Extension.PropertyPage.Version.Name"
+            id="org.eclipse.datatools.connectivity.internal.ui.properties.ProfileVersionPropertyPage">
+         <enabledWhen>
+            <instanceof
+                  value="org.eclipse.datatools.connectivity.IConnectionProfile">
+            </instanceof>
+         </enabledWhen>
+      </page>
+   </extension>
+   <extension
+         id="profileFailure"
+         name="%ProfileFailure"
+         point="org.eclipse.core.resources.markers">
+      <super
+            type="org.eclipse.core.resources.problemmarker">
+      </super>
+      <persistent
+            value="false">
+      </persistent>
+   </extension>
+   <extension
+         id="org.eclipse.datatools.connectivity.internal.ui.wizards"
+         name="New Connection Profile Wizard"
+         point="org.eclipse.ui.newWizards">
+      <wizard
+            name="%Extension.NewWizard.Name"
+            icon="icons/connection1_newwiz.gif"
+            category="org.eclipse.datatools.connectivity"
+            class="org.eclipse.datatools.connectivity.internal.ui.wizards.NewCPWizard"
+            id="org.eclipse.datatools.connectivity.internal.ui.wizards.newconnectionprofile">
+         <description>
+            %Extension.NewWizard.Description
+         </description>
+      </wizard>
+      <category
+            id="org.eclipse.datatools.connectivity"
+            name="%category.name.connectionProfiles"/>
+      <wizard
+            category="org.eclipse.datatools.connectivity"
+            class="org.eclipse.datatools.connectivity.internal.ui.wizards.NewRepositoryWizard"
+            icon="icons/new_repository_action.gif"
+            id="org.eclipse.datatools.connectivity.ui.wizard.newrepositorywizard"
+            name="%Extension.NewRepositoryWizard.Name">
+         <description>
+            %Extension.NewRepositoryWizard.Description
+         </description>
+      </wizard>
+   </extension>
+
+   <extension
+         point="org.eclipse.core.expressions.propertyTesters">
+      <propertyTester
+            class="org.eclipse.datatools.connectivity.internal.ui.ConnectionProfileActionFilter"
+            id="org.eclipse.datatools.connectivity.ui"
+            namespace="org.eclipse.datatools.connectivity.profile.property"
+            properties="factoryID,isConnected,maintainConnection,supportsPing,hasExtendedProperties,id,extensionID,categoryID,containingViewID,connectionState,dbVendor,dbVersion,repositoryIsReadOnly,canWorkOffline"
+            type="org.eclipse.datatools.connectivity.IConnectionProfile"/>
+      <propertyTester
+            class="org.eclipse.datatools.connectivity.internal.ui.CategoryActionFilter"
+            id="org.eclipse.datatools.connectivity.ui.category"
+            namespace="org.eclipse.datatools.connectivity.category.property"
+            properties="categoryID,repositoryIsReadOnly"
+            type="org.eclipse.datatools.connectivity.ICategory">
+      </propertyTester>
+      <propertyTester
+            class="org.eclipse.datatools.connectivity.internal.ui.WorkbenchWindowPerspectiveActionFilter"
+            id="org.eclipse.datatools.connectivity.ui.workbench.window.perspective"
+            namespace="org.eclipse.datatools.connectivity.workbench.window.perspective.property"
+            properties="perspectiveID"
+            type="org.eclipse.ui.IWorkbenchWindow">
+      </propertyTester>
+   </extension>
+
+   <extension
+         point="org.eclipse.ui.navigator.navigatorContent">
+      <navigatorContent
+            contentProvider="org.eclipse.datatools.connectivity.internal.ui.CPRepositoryContentProviderExtension"
+            id="org.eclipse.datatools.connectivity.repositoryContent"
+            labelProvider="org.eclipse.datatools.connectivity.internal.ui.CPRepositoryLabelProviderExtension"
+            name="%CP.content">
+         <triggerPoints>
+            <or>
+	            <and>
+                     <instanceof value="org.eclipse.datatools.connectivity.IConnectionProfile"/>
+				     <test
+						property="org.eclipse.datatools.connectivity.profile.property.factoryID"
+	                     value="org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepository"/>
+	            </and>
+               <instanceof
+	                     value="org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepository">
+               </instanceof>
+               <instanceof
+                     value="org.eclipse.datatools.connectivity.internal.ui.CPRepositoryContentExtension">
+               </instanceof>
+            </or>
+         </triggerPoints>
+         <possibleChildren>
+            <or>
+               <instanceof
+	                     value="org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepository">
+               </instanceof>
+               <instanceof
+                     value="org.eclipse.datatools.connectivity.internal.ui.CPRepositoryContentExtension">
+               </instanceof>
+            </or>
+         </possibleChildren>
+      </navigatorContent>
+      <actionProvider
+            class="org.eclipse.datatools.connectivity.ui.actions.WorkOfflineActionProvider"
+            id="org.eclipse.datatools.connectivity.internal.ui.actions.WorkOfflineActionProvider">
+            <enablement>
+               <and>
+                  <instanceof
+                        value="org.eclipse.datatools.connectivity.IConnectionProfile">
+                  </instanceof>
+                  <test
+                        property="org.eclipse.datatools.connectivity.profile.property.canWorkOffline"
+                        value="true">
+                  </test>
+               </and>
+         	</enablement>
+      </actionProvider>
+   </extension>
+      <extension
+            point="org.eclipse.ui.navigator.navigatorContent">
+         <navigatorContent
+               contentProvider="org.eclipse.datatools.connectivity.ui.navigator.ConnectionProfileContentProvider"
+               icon="icons/full/cview16/enterprise_explorer.gif"
+               id="org.eclipse.datatools.connectivity.dsexplorer.content"
+               labelProvider="org.eclipse.datatools.connectivity.ui.navigator.ConnectionProfileLabelProvider"
+               name="%DSE.content"
+               priority="high">
+            <actionProvider
+                  class="org.eclipse.datatools.connectivity.ui.navigator.actions.ProfileActionsActionProvider"
+                  id="org.eclipse.datatools.connectivity.ui.dse.actions.ProfileActionsActionProvider">
+               <enablement>
+                  <or>
+                     <instanceof
+                           value="org.eclipse.datatools.connectivity.ICategory">
+                     </instanceof>
+                     <instanceof
+                           value="org.eclipse.datatools.connectivity.IConnectionProfile">
+                     </instanceof>
+                     <instanceof
+                           value="org.eclipse.datatools.connectivity.internal.ui.LocalRepositoryNode">
+                     </instanceof>
+                  </or>
+               </enablement>
+            </actionProvider>
+            <commonSorter
+                  class="org.eclipse.datatools.connectivity.ui.navigator.ConnectionProfileSorter"
+                  id="org.eclipse.datatools.connectivity.ui.dse.commonSorter">
+            </commonSorter>
+            <enablement>
+               <or>
+                  <adapt
+                        type="org.eclipse.datatools.connectivity.ICategory">
+                  </adapt>
+                  <adapt
+                        type="org.eclipse.datatools.connectivity.IConnectionProfile">
+                  </adapt>
+                  <adapt
+                        type="org.eclipse.datatools.connectivity.ProfileManager">
+                  </adapt>
+                  <instanceof
+                        value="org.eclipse.core.resources.IWorkspaceRoot">
+                  </instanceof>
+               </or>
+            </enablement>
+         </navigatorContent>
+      </extension>
+      <extension
+            point="org.eclipse.ui.navigator.navigatorContent">
+         <actionProvider
+               class="org.eclipse.datatools.connectivity.ui.navigator.actions.RefreshActionProvider"
+               id="org.eclipse.datatools.connectivity.ui.dse.actions.RefreshActionProvider">
+            <enablement>
+               <instanceof
+                     value="java.lang.Object">
+               </instanceof>
+            </enablement>
+         </actionProvider>
+      </extension>
+      <extension
+            id="driverProblem"
+            name="%driverProblem"
+            point="org.eclipse.core.resources.markers">
+         <super
+               type="org.eclipse.core.resources.problemmarker">
+         </super>
+         <persistent
+               value="true">
+         </persistent>
+      </extension>
+      <extension
+            point="org.eclipse.ui.commands">
+         <command
+               description="%AddProfile.command.description"
+               id="org.eclipse.datatools.connectivity.commands.addprofile"
+               name="%AddProfile.command.label">
+            <commandParameter
+                  id="org.eclipse.datatools.connectivity.ui.ignoreCategory"
+                  name="ignoreCategory"
+                  optional="true">
+            </commandParameter>
+            <commandParameter
+                  id="org.eclipse.datatools.connectivity.ui.useSelection"
+                  name="useSelection"
+                  optional="true">
+            </commandParameter>
+         </command>
+         <command
+               defaultHandler="org.eclipse.datatools.connectivity.ui.actions.AddRepositoryViewAction"
+               description="%AddRepositoryProfile.command.description"
+               id="org.eclipse.datatools.connectivity.commands.addrepository"
+               name="%AddRepositoryProfile.command.label">
+         </command>
+         <command
+               defaultHandler="org.eclipse.datatools.connectivity.ui.actions.ExportProfileViewAction"
+               description="%ExportProfile.command.description"
+               id="org.eclipse.datatools.connectivity.commands.export"
+               name="%ExportProfile.command.label">
+         </command>
+         <command
+               defaultHandler="org.eclipse.datatools.connectivity.ui.actions.ImportProfileViewAction"
+               description="%ImportProfile.command.description"
+               id="org.eclipse.datatools.connectivity.commands.import"
+               name="%ImportProfile.command.label">
+         </command>
+      </extension>
+      <extension
+            point="org.eclipse.ui.handlers">
+         <handler
+               class="org.eclipse.datatools.connectivity.ui.actions.AddProfileViewAction"
+               commandId="org.eclipse.datatools.connectivity.commands.addprofile">
+            <enabledWhen>
+               <or>
+                  <with
+                        variable="selection">
+                     <count
+                           value="0">
+                     </count>
+                  </with>
+                  <with
+                        variable="selection">
+                     <count
+                           value="+">
+                     </count>
+                     <iterate>
+                        <instanceof
+                              value="org.eclipse.datatools.connectivity.internal.ui.LocalRepositoryNode">
+                        </instanceof>
+                     </iterate>
+                  </with>
+                  <not>
+                     <and>
+                        <count
+                              value="+">
+                        </count>
+                        <or>
+                           <with
+                                 variable="selection">
+                              <iterate>
+                                 <instanceof
+                                       value="org.eclipse.datatools.connectivity.IConnectionProfile">
+                                 </instanceof>
+                                 <test
+                                       property="org.eclipse.datatools.connectivity.profile.property.repositoryIsReadOnly"
+                                       value="true">
+                                 </test>
+                              </iterate>
+                           </with>
+                           <with
+                                 variable="selection">
+                              <iterate>
+                                 <instanceof
+                                       value="org.eclipse.datatools.connectivity.ICategory">
+                                 </instanceof>
+                                 <test
+                                       property="org.eclipse.datatools.connectivity.category.property.repositoryIsReadOnly"
+                                       value="true">
+                                 </test>
+                              </iterate>
+                           </with>
+                           <with
+                                 variable="selection">
+                              <iterate>
+                                 <instanceof
+                                       value="org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepository">
+                                 </instanceof>
+                                 <test
+                                       property="org.eclipse.datatools.connectivity.repository.property.repositoryIsReadOnly"
+                                       value="true">
+                                 </test>
+                              </iterate>
+                           </with>
+                        </or>
+                     </and>
+                  </not>
+               </or>
+            </enabledWhen>
+         </handler>
+      </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/schema/addConnectListener.exsd b/plugins/org.eclipse.datatools.connectivity.ui/schema/addConnectListener.exsd
new file mode 100644
index 0000000..ccc5334
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/schema/addConnectListener.exsd
@@ -0,0 +1,114 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.connectivity.ui" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.datatools.connectivity.ui" id="addConnectListener" name="Add connect listener to profile"/>
+      </appInfo>
+      <documentation>
+         This extension point is to provide a method of adding a connect listener to a profile.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appInfo>
+            <meta.element />
+         </appInfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="addConnectProvider"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="addConnectProvider">
+      <annotation>
+         <documentation>
+            Specify the provider for the connection listener.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Specify the Connection type;  i.e, IConnectionProfile
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="provider" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Specify the Java class that implements the connection listener.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.datatools.connectivity.ui.IAddConnectListener"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiinfo"/>
+      </appInfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/schema/connectionExceptionHandler.exsd b/plugins/org.eclipse.datatools.connectivity.ui/schema/connectionExceptionHandler.exsd
new file mode 100644
index 0000000..fb52c5f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/schema/connectionExceptionHandler.exsd
@@ -0,0 +1,127 @@
+<?xml version='1.0' encoding='UTF-8'?>

+<!-- Schema file written by PDE -->

+<schema targetNamespace="org.eclipse.datatools.connectivity.ui" xmlns="http://www.w3.org/2001/XMLSchema">

+<annotation>

+      <appInfo>

+         <meta.schema plugin="org.eclipse.datatools.connectivity.ui" id="connectionExceptionHandler" name="Connection Exception Handler"/>

+      </appInfo>

+      <documentation>

+         Provides a ConnectionExceptionHandler.  

+A ConnectionExceptionHandler must implement org.eclipse.datatools.connectivity.ui.status.IConnectionExceptionHandler.  It is used to provide a useful message when an error has occurred.

+When a connection error occurs, the SQLException generated may not always contain useful information.  A ConnectionExceptionHandler can take the exception and context and use it to generate a new SQLException that contains a better message.

+Since SQL codes vary by database vendor, implementers designate a class to generate the enhanced SQLException based on the vendor.

+This SQLException can be passed wrapped in Status object for proper handling.

+      </documentation>

+   </annotation>

+

+   <element name="extension">

+      <annotation>

+         <appInfo>

+            <meta.element />

+         </appInfo>

+      </annotation>

+      <complexType>

+         <sequence>

+            <element ref="handler" minOccurs="1" maxOccurs="unbounded"/>

+         </sequence>

+         <attribute name="point" type="string" use="required">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="id" type="string">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="name" type="string">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+               <appInfo>

+                  <meta.attribute translatable="true"/>

+               </appInfo>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="handler">

+      <complexType>

+         <attribute name="vendor" type="string" use="required">

+            <annotation>

+               <documentation>

+                  The database platform vendor, for example, as defined in the base properties of a &lt;code&gt;org.eclipse.datatools.connectivity.IConnectionProfile&lt;/code&gt;

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="class" type="string" use="required">

+            <annotation>

+               <documentation>

+                  Fully qualified name of class that implements the org.eclipse.datatools.connectivity.ui.status.IConnectionExceptionHandler interface

+               </documentation>

+               <appInfo>

+                  <meta.attribute kind="java" basedOn=":org.eclipse.datatools.connectivity.ui.status.IConnectionExceptionHandler"/>

+               </appInfo>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="since"/>

+      </appInfo>

+      <documentation>

+         [Enter the first release in which this extension point appears.]

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="examples"/>

+      </appInfo>

+      <documentation>

+         [Enter extension point usage example here.]

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="apiinfo"/>

+      </appInfo>

+      <documentation>

+         [Enter API information here.]

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="implementation"/>

+      </appInfo>

+      <documentation>

+         [Enter information about supplied implementation of this extension point.]

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="copyright"/>

+      </appInfo>

+      <documentation>

+         Copyright (c) 2010 IBM Corporation and others.

+All rights reserved. This program and the accompanying materials

+are made available under the terms of the Eclipse Public License v1.0

+which accompanies this distribution, and is available at

+http://www.eclipse.org/legal/epl-v10.html

+Contributors:

+IBM Corporation - initial API and implementation

+      </documentation>

+   </annotation>

+

+</schema>

diff --git a/plugins/org.eclipse.datatools.connectivity.ui/schema/connectionProfileImage.exsd b/plugins/org.eclipse.datatools.connectivity.ui/schema/connectionProfileImage.exsd
new file mode 100644
index 0000000..5b2a6ae
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/schema/connectionProfileImage.exsd
@@ -0,0 +1,109 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.connectivity.ui">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.datatools.connectivity.ui" id="connectionProfileImage" name="Connection Profile Image"/>
+      </appInfo>
+      <documentation>
+         The Connection Profile Image extension point allows adopters to split out icons from their main connection profile extension into a separate plug-in for UI code and resources. 
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <complexType>
+         <sequence minOccurs="1" maxOccurs="unbounded">
+            <element ref="profileImage"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="profileImage">
+      <complexType>
+         <attribute name="profileID" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="icon" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/schema/driverPropertyEditor.exsd b/plugins/org.eclipse.datatools.connectivity.ui/schema/driverPropertyEditor.exsd
new file mode 100644
index 0000000..3bbfa43
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/schema/driverPropertyEditor.exsd
@@ -0,0 +1,137 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.connectivity.ui">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.datatools.connectivity.ui" id="driverPropertyEditor" name="Driver Property Editor"/>
+      </appInfo>
+      <documentation>
+         [Enter description of this extension point.]
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <complexType>
+         <sequence>
+            <element ref="propertyEditor" minOccurs="1" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="propertyEditor">
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="driverTemplateID" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Required. Provides the ID of the driver template the property descriptor editor should be used for.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="driverPropertyID" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Required. Provides the ID of the driver property the editor should be used for.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="customPropertyDescriptor" type="string">
+            <annotation>
+               <documentation>
+                  Required. Provides a custom property descriptor that extends the class org.eclipse.ui.views.properties.PropertyDescriptor. An example of this is the class org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor, which provides a property editor that masks the characters for a password property. Anything you can implement as a property descriptor for the Properties Viewer, you can use here. Or if you want to make the property values read-only, you can use org.eclipse.ui.views.properties.PropertyDescriptor directly.
+
+Note that your property descriptor must implement a zero-argument constructor in order to be created correctly. This zero-argument constructor should provide the id and display name of the property you are editing. For example:
+
+ private static String DRIVER_CLASS_PROP_ID = &quot;org.eclipse.datatools.connectivity.db.driverClass&quot;; //$NON-NLS-1$
+ 
+ public DriverClassBrowsePropertyDescriptor() {
+  super(DRIVER_CLASS_PROP_ID, 
+    ConnectivityUIPlugin.getDefault().getResourceString(&quot;DriverClassBrowsePropertyDescriptor.property.label&quot;)); //$NON-NLS-1$
+ }
+ 
+Also note that there is a new interface that your Property Descriptor can extend called org.eclipse.datatools.connectivity.drivers.IDriverInstancePropertyDescriptor. This interface allows you to pass the Driver Instance to your descriptor when it is instantiated in the Edit Driver Definition dialog.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.ui.views.properties.PropertyDescriptor"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/schema/driverUIContributor.exsd b/plugins/org.eclipse.datatools.connectivity.ui/schema/driverUIContributor.exsd
new file mode 100644
index 0000000..10e1b40
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/schema/driverUIContributor.exsd
@@ -0,0 +1,119 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.connectivity.ui">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.datatools.connectivity.ui" id="driverUIContributor" name="Driver UI Contributor"/>
+      </appInfo>
+      <documentation>
+         [Enter description of this extension point.]
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <complexType>
+         <sequence>
+            <element ref="driverUIContributor" minOccurs="1" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="driverUIContributor">
+      <complexType>
+         <attribute name="driverTemplateID" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The class must implement the interface org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributor.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributor"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/AddConnectListenerRegistry.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/AddConnectListenerRegistry.java
new file mode 100644
index 0000000..d4960f0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/AddConnectListenerRegistry.java
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.ui.IAddConnectListener;
+
+public class AddConnectListenerRegistry {
+
+	public static AddConnectListenerRegistry INSTANCE = new AddConnectListenerRegistry();
+
+	private Map providers = new HashMap();
+	
+	private IAddConnectListener nullProvider = new IAddConnectListener() {
+
+		public void addConnectListener(IConnectionProfile profile) {
+
+			//do nothing
+		}
+		
+	};
+	
+	public IAddConnectListener getProvider(IConnectionProfile profile) {
+		if(!providers.containsKey(profile.getClass())) {
+			providers.put(profile.getClass(), loadProvider(profile.getClass()));
+		}
+		return (IAddConnectListener)providers.get(profile.getClass());
+	}
+
+	private Object loadProvider(Class objClass) {
+		IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+		IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("org.eclipse.datatools.connectivity.ui", "addConnectListener"); //$NON-NLS-1$ //$NON-NLS-2$
+		IExtension[] extensions = extensionPoint.getExtensions();
+		for(int i=0; i<extensions.length; ++i) {
+			IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+			for(int j=0; j<configElements.length; ++j) {
+				if(configElements[j].getName().equals("addConnectProvider")) { //$NON-NLS-1$
+						String clss = configElements[j].getAttribute("class"); //$NON-NLS-1$
+						if(clss.equals(objClass.getName())) {
+							try {
+								return (IAddConnectListener) configElements[j].createExecutableExtension("provider"); //$NON-NLS-1$
+							}
+							catch(CoreException e) {
+								e.printStackTrace();
+							}
+						}
+					
+				}
+			}
+		}
+		
+		return this.nullProvider;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/CCOverLayIconUtility.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/CCOverLayIconUtility.java
new file mode 100644
index 0000000..1f632b1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/CCOverLayIconUtility.java
@@ -0,0 +1,123 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: sairhart - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.eclipse.jface.resource.CompositeImageDescriptor;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.graphics.Point;
+
+/**
+ * @author sairhart
+ * 
+ */
+public class CCOverLayIconUtility {
+
+	private final static URL BASE_URL = ConnectivityUIPlugin.getDefault()
+			.getBundle().getEntry("/"); //$NON-NLS-1$
+
+	public static final ImageDescriptor RUNNING = create(
+			"icons/full/ovr16/", "obj_ovr_server.gif"); //$NON-NLS-1$ //$NON-NLS-2$
+	public static final ImageDescriptor OFFLINE = create(
+			"icons/full/ovr16/", "obj_ovr_server_off.gif"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	private static CCOverLayIconUtility _Default;
+
+	private CCOverLayIconUtility() {
+		super();
+	}
+
+	public static CCOverLayIconUtility getDefault() {
+		if (_Default == null) {
+			_Default = new CCOverLayIconUtility();
+		}
+
+		return _Default;
+	}
+
+	public Image addOverlayIcon(Image baseImage, ImageDescriptor overlay) {
+		InternalOverlayIcon icon;
+		if (overlay == RUNNING) {
+			icon = new InternalOverlayIcon(baseImage, RUNNING, true, false);
+		}
+		else if (overlay == OFFLINE) {
+			icon = new InternalOverlayIcon(baseImage, OFFLINE, true, false);
+		}
+		else {
+			icon = new InternalOverlayIcon(baseImage, null, true, true);
+		}
+		return icon.createImage();
+	}
+
+	private static ImageDescriptor create(String prefix, String name) {
+		return ImageDescriptor.createFromURL(makeImageURL(prefix, name));
+	}
+
+	private static URL makeImageURL(String prefix, String name) {
+		String path = prefix + name;
+		URL url = null;
+		try {
+			url = new URL(BASE_URL, path);
+		}
+		catch (MalformedURLException e) {
+			return null;
+		}
+		return url;
+	}
+
+	private class InternalOverlayIcon extends CompositeImageDescriptor {
+
+		private ImageDescriptor m_Overlay;
+		private Image m_image;
+		private boolean m_left;
+		private boolean m_top;
+
+		public InternalOverlayIcon(Image baseImage, ImageDescriptor overlay,
+									boolean left, boolean top) {
+			m_image = baseImage;
+			m_Overlay = overlay;
+			m_left = left;
+			m_top = top;
+		}
+
+		protected void drawCompositeImage(int width, int height) {
+			drawImage(m_image.getImageData(), 0, 0);
+			if (m_Overlay != null) {
+				ImageData id = m_Overlay.getImageData();
+				int ox, oy;
+				if (m_left)
+					ox = 0;
+				else
+					ox = width - id.width;
+				if (m_top)
+					oy = 0;
+				else
+					oy = height - id.height;
+				if (id != null) {
+					drawImage(id, ox, oy);
+				}
+			}
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.jface.resource.CompositeImageDescriptor#getSize()
+		 */
+		protected Point getSize() {
+			return new Point(16, 16);
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/CPRepositoryContentExtension.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/CPRepositoryContentExtension.java
new file mode 100644
index 0000000..256a351
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/CPRepositoryContentExtension.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepository;
+import org.eclipse.datatools.connectivity.ui.ManagedContentExtensionBase;
+import org.eclipse.datatools.connectivity.ui.Messages;
+import org.eclipse.swt.graphics.Image;
+
+public class CPRepositoryContentExtension extends ManagedContentExtensionBase {
+
+	public CPRepositoryContentExtension(IConnectionProfile profile) {
+		super(profile, IConnectionProfileRepository.class.getName());
+	}
+
+	public Image getImage() {
+		return SharedImages.get(SharedImages.IMG_CVIEW_EXPLORER);
+	}
+
+	public String getLabel() {
+		return Messages.CPRepositoryContentExtension_CPExtensionName;
+	}
+
+	public boolean isVisible() {
+		return false;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/CPRepositoryContentProvider.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/CPRepositoryContentProvider.java
new file mode 100644
index 0000000..335a144
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/CPRepositoryContentProvider.java
@@ -0,0 +1,207 @@
+/*******************************************************************************
+ * Copyright (c) 2006-2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IManagedConnection;
+import org.eclipse.datatools.connectivity.IProfileListener;
+import org.eclipse.datatools.connectivity.IPropertySetChangeEvent;
+import org.eclipse.datatools.connectivity.IPropertySetListener;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepository;
+import org.eclipse.datatools.connectivity.ui.RefreshProfileJob;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.ui.navigator.CommonViewer;
+import org.eclipse.ui.navigator.IExtensionStateModel;
+
+public class CPRepositoryContentProvider implements ITreeContentProvider {
+	
+	private static final String PROP_SHOW_CATEGORIES = "showCategories"; //$NON-NLS-1$
+	private static final String DSE_VIEW_CONTENT_EXTENSION_ID = "org.eclipse.datatools.connectivity.dsexplorer.content"; //$NON-NLS-1$
+
+	private Viewer mViewer;
+	private Set mRepositories = new HashSet();
+	private boolean mShowCategories = true;
+	private IPropertyChangeListener mPropertyChangeListener = new IPropertyChangeListener() {
+
+		public void propertyChange(PropertyChangeEvent event) {
+			if (PROP_SHOW_CATEGORIES.equals(event.getProperty())) {
+				setShowCategories(((Boolean) event.getNewValue())
+						.booleanValue());
+			}
+		}
+	};
+
+	private IProfileListener mProfileListener = new IProfileListener() {
+
+		public void profileAdded(IConnectionProfile profile) {
+			if (isChildProfile(profile)) {
+				profile.addPropertySetListener(mPropertyListener);
+				refreshViewer(profile.getCategory(), true);
+			}
+		}
+
+		public void profileDeleted(IConnectionProfile profile) {
+			if (isChildProfile(profile)) {
+				profile.removePropertySetListener(mPropertyListener);
+				refreshViewer(profile.getCategory(), true);
+			}
+		}
+
+		public void profileChanged(IConnectionProfile profile) {
+			if (isChildProfile(profile)) {
+				refreshViewer(profile, false);
+			}
+		}
+
+		private boolean isChildProfile(IConnectionProfile profile) {
+			if (profile.getParentProfile() == null
+					|| profile.getConnectionState() == IConnectionProfile.CONNECTED_STATE) {
+				return false;
+			}
+			IManagedConnection imc = profile
+					.getManagedConnection(IConnectionProfileRepository.class
+							.getName());
+			return imc != null && mRepositories.contains(imc.getConnection());
+		}
+
+	};
+	private IPropertySetListener mPropertyListener = new IPropertySetListener() {
+
+		public void propertySetChanged(IPropertySetChangeEvent event) {
+			handleProfilePropertyChanged(event);
+		}
+	};
+
+	public CPRepositoryContentProvider() {
+		super();
+		ProfileManager.getInstance().addProfileListener(mProfileListener);
+	}
+
+	public Object[] getChildren(Object parentElement) {
+		if (parentElement instanceof IConnectionProfileRepository) {
+			if (!mRepositories.contains(parentElement)) {
+				for (Iterator it = Arrays.asList(
+						((IConnectionProfileRepository) parentElement)
+								.getProfiles()).iterator(); it.hasNext();) {
+					((IConnectionProfile) it.next())
+							.addPropertySetListener(mPropertyListener);
+				}
+				mRepositories.add(parentElement);
+			}
+			
+			if (mShowCategories) {
+				List kids = new ArrayList();
+				kids.addAll(Arrays
+						.asList(((IConnectionProfileRepository) parentElement)
+								.getRootCategories()));
+				return kids.toArray();
+			}
+			
+			return ((IConnectionProfileRepository) parentElement).getProfiles();
+		}
+		return new Object[0];
+	}
+
+	public Object getParent(Object element) {
+		if (element instanceof IConnectionProfileRepository) {
+			return ((IConnectionProfileRepository) element)
+					.getRepositoryProfile();
+		}
+		return null;
+	}
+
+	public boolean hasChildren(Object element) {
+		return getChildren(element).length > 0;
+	}
+
+	public Object[] getElements(Object inputElement) {
+		return getChildren(inputElement);
+	}
+
+	public void dispose() {
+		ProfileManager.getInstance().removeProfileListener(mProfileListener);
+		for (Iterator repIt = mRepositories.iterator(); repIt.hasNext();) {
+			for (Iterator it = Arrays
+					.asList(
+							((IConnectionProfileRepository) repIt.next())
+									.getProfiles()).iterator(); it.hasNext();) {
+				((IConnectionProfile) it.next())
+						.removePropertySetListener(mPropertyListener);
+			}
+		}
+	}
+
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		if (mViewer instanceof CommonViewer) {
+			((CommonViewer) mViewer).getNavigatorContentService()
+					.findStateModel(DSE_VIEW_CONTENT_EXTENSION_ID)
+					.removePropertyChangeListener(mPropertyChangeListener);
+		}
+		mViewer = viewer;
+		if (mViewer instanceof CommonViewer) {
+			IExtensionStateModel stateModel = ((CommonViewer) mViewer)
+					.getNavigatorContentService().findStateModel(
+							DSE_VIEW_CONTENT_EXTENSION_ID);
+			stateModel.addPropertyChangeListener(mPropertyChangeListener);
+			setShowCategories(stateModel
+					.getBooleanProperty(PROP_SHOW_CATEGORIES));
+		}
+	}
+
+	public void setShowCategories(boolean showCategories) {
+		if (showCategories != mShowCategories) {
+			mShowCategories = showCategories;
+		}
+	}
+
+	public boolean isShowCategories() {
+		return mShowCategories;
+	}
+
+	protected void refreshViewer(final Object object,
+			final boolean expand) {
+		if (mViewer instanceof TreeViewer && object instanceof IConnectionProfile ) {
+			RefreshProfileJob.scheduleRefreshProfileJob((IConnectionProfile)object,
+					(TreeViewer) mViewer);
+		}
+		else {
+			Runnable runner = new Runnable() {
+
+				public void run() {
+					((CommonViewer) mViewer).refresh();
+				}
+			};
+			mViewer.getControl().getDisplay().syncExec(runner);
+		}
+	}
+
+	protected void handleProfilePropertyChanged(IPropertySetChangeEvent event) {
+		if (IConnectionProfile.CONNECTION_PROFILE_PROPERTY_SET.equals(event
+				.getPropertySetType())
+				&& event
+						.getChangedProperty(IConnectionProfile.CONNECTION_STATE_PROPERTY_ID) != null) {
+			refreshViewer(event.getConnectionProfile(), false);
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/CPRepositoryContentProviderExtension.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/CPRepositoryContentProviderExtension.java
new file mode 100644
index 0000000..7807104
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/CPRepositoryContentProviderExtension.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    rcernich - initial API and implementation
+ *******************************************************************************/ 
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.ui.CommonContentProviderBase;
+import org.eclipse.datatools.connectivity.ui.IContentExtension;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+
+
+public class CPRepositoryContentProviderExtension extends
+		CommonContentProviderBase implements ITreeContentProvider {
+
+	public CPRepositoryContentProviderExtension() {
+		super(new CPRepositoryContentProvider());
+	}
+
+	protected IContentExtension createContentExtension(
+			IConnectionProfile profile) {
+		return new CPRepositoryContentExtension(profile);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/CPRepositoryLabelProviderExtension.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/CPRepositoryLabelProviderExtension.java
new file mode 100644
index 0000000..7fc7fc8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/CPRepositoryLabelProviderExtension.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import org.eclipse.datatools.connectivity.ui.CommonLabelProviderBase;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+
+public class CPRepositoryLabelProviderExtension extends CommonLabelProviderBase
+		implements ILabelProvider {
+
+	public CPRepositoryLabelProviderExtension() {
+		super(new LabelProvider());
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/CategoryActionFilter.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/CategoryActionFilter.java
new file mode 100644
index 0000000..102d6d3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/CategoryActionFilter.java
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import org.eclipse.core.expressions.IPropertyTester;
+import org.eclipse.core.expressions.PropertyTester;
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IManagedConnection;
+import org.eclipse.datatools.connectivity.internal.Category;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepository;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepositoryConstants;
+import org.eclipse.datatools.connectivity.ui.ICategoryActionFilter;
+
+/**
+ * Allows filtering by category properties in plugin.xml
+ * @author brianf
+ *
+ */
+public class CategoryActionFilter extends PropertyTester 
+	implements ICategoryActionFilter, IPropertyTester {
+
+	private static boolean mDebug = ConnectivityPlugin.getDefault().isDebugging();
+	
+	/**
+	 * Constructor
+	 */
+	public CategoryActionFilter() {
+		super();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IActionFilter#testAttribute(java.lang.Object, java.lang.String, java.lang.String)
+	 */
+	public boolean testAttribute(Object target, String name, String value) {
+		if (target == null || !(target instanceof ICategory)) {
+			return false;
+		}
+		ICategory category = (ICategory) target;
+		debug("category testAttribute: name =" + name + ", value = " + value); //$NON-NLS-1$ //$NON-NLS-2$
+		if (name.equals(CATEGORY_PROPERTY_CATEGORY_ID) || name.equals(CATEGORY_ID)) {
+			return category.getId().equals(value);
+		}
+		else if (name.equals(CATEGORY_PROPERTY_REPOSITORY_IS_READ_ONLY) || name.equals(REPOSITORY_IS_READ_ONLY)) {
+			if (category instanceof Category) {
+				IConnectionProfile profile = ((Category) category)
+						.getRepositoryProfile();
+				// disable add action on categories in read-only
+				// non-local repository
+				if (profile != null) {
+					IManagedConnection imc = profile
+							.getManagedConnection(IConnectionProfileRepositoryConstants.REPOSITORY_CONNECTION_FACTORY_ID);
+					if (imc != null && imc.isConnected()) {
+						IConnectionProfileRepository repo = (IConnectionProfileRepository) imc
+								.getConnection().getRawConnection();
+						debug(CATEGORY_PROPERTY_REPOSITORY_IS_READ_ONLY + ", value = " + repo.isReadOnly()); //$NON-NLS-1$
+						return repo.isReadOnly();
+					}
+				}
+			}
+			debug(CATEGORY_PROPERTY_REPOSITORY_IS_READ_ONLY + ", value = " + false); //$NON-NLS-1$
+			return false;
+		}
+		else {
+			return false;
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, java.lang.String, java.lang.Object[], java.lang.Object)
+	 */
+	public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
+		return testAttribute(receiver, property, expectedValue == null ? null : expectedValue.toString());
+	}
+
+	/**
+	 * @param msg
+	 */
+	public static void debug ( String msg ) {
+		if (mDebug)
+			System.out.println("Debug: " + msg); //$NON-NLS-1$
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/CategoryPropertySource.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/CategoryPropertySource.java
new file mode 100644
index 0000000..c291ef8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/CategoryPropertySource.java
@@ -0,0 +1,106 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.ui.views.properties.IPropertyDescriptor;
+import org.eclipse.ui.views.properties.IPropertySource;
+import org.eclipse.ui.views.properties.PropertyDescriptor;
+
+/**
+ * @author shongxum
+ */
+public class CategoryPropertySource implements IPropertySource {
+
+	private static final String P_ID_ENTITY_NAME = "org.eclipse.datatools.connectivity.properties.general.categoryname"; //$NON-NLS-1$
+
+	private static final String P_ID_ENTITY_TYPE = "org.eclipse.datatools.connectivity.properties.general.categoryid"; //$NON-NLS-1$
+
+	private ICategory mCategory;
+
+	public CategoryPropertySource(ICategory category) {
+		mCategory = category;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.views.properties.IPropertySource#getEditableValue()
+	 */
+	public Object getEditableValue() {
+		return mCategory;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.views.properties.IPropertySource#getPropertyDescriptors()
+	 */
+	public IPropertyDescriptor[] getPropertyDescriptors() {
+		PropertyDescriptor desName = new PropertyDescriptor(P_ID_ENTITY_NAME,
+				ConnectivityUIPlugin.getDefault().getResourceString(
+						"properties.category.name")); //$NON-NLS-1$
+		desName.setCategory(ConnectivityUIPlugin.getDefault()
+				.getResourceString("properties.category.general")); //$NON-NLS-1$
+		PropertyDescriptor desType = new PropertyDescriptor(P_ID_ENTITY_TYPE,
+				ConnectivityUIPlugin.getDefault().getResourceString(
+						"properties.category.id")); //$NON-NLS-1$
+		desType.setCategory(ConnectivityUIPlugin.getDefault()
+				.getResourceString("properties.category.general")); //$NON-NLS-1$
+
+		return new IPropertyDescriptor[] { desName, desType};
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.views.properties.IPropertySource#getPropertyValue(java.lang.Object)
+	 */
+	public Object getPropertyValue(Object id) {
+		if (id.equals(P_ID_ENTITY_NAME)) {
+			return mCategory.getName();
+		}
+		else if (id.equals(P_ID_ENTITY_TYPE)) {
+			return mCategory.getId();
+		}
+		else {
+			return null;
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.views.properties.IPropertySource#isPropertySet(java.lang.Object)
+	 */
+	public boolean isPropertySet(Object id) {
+		return true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.views.properties.IPropertySource#resetPropertyValue(java.lang.Object)
+	 */
+	public void resetPropertyValue(Object id) {
+		// Do nothing
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.views.properties.IPropertySource#setPropertyValue(java.lang.Object,
+	 *      java.lang.Object)
+	 */
+	public void setPropertyValue(Object id, Object value) {
+		// Do nothing
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/ConnectionProfileActionFilter.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/ConnectionProfileActionFilter.java
new file mode 100644
index 0000000..88d533a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/ConnectionProfileActionFilter.java
@@ -0,0 +1,167 @@
+/*******************************************************************************
+ * Copyright (c) 2005-2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ * 				brianf - adding new properties (read-only repository)
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import org.eclipse.core.expressions.IPropertyTester;
+import org.eclipse.core.expressions.PropertyTester;
+import org.eclipse.datatools.connectivity.ConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IManagedConnection;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepository;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepositoryConstants;
+import org.eclipse.datatools.connectivity.ui.IConnectionProfileActionFilter;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Connection Profile action filter allows you to filter by profile
+ * properties in plugin.xml.
+ * @author rcernich, brianf
+ *
+ */
+public class ConnectionProfileActionFilter extends PropertyTester 
+	implements IConnectionProfileActionFilter, IPropertyTester {
+
+	private static boolean mDebug = ConnectivityPlugin.getDefault().isDebugging();
+
+	/**
+	 * Constructor 
+	 */
+	public ConnectionProfileActionFilter() {
+		super();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IActionFilter#testAttribute(java.lang.Object, java.lang.String, java.lang.String)
+	 */
+	public boolean testAttribute(Object target, String name, String value) {
+		if (target == null || !(target instanceof IConnectionProfile)) {
+			return false;
+		}
+		IConnectionProfile profile = (IConnectionProfile) target;
+		debug("profile testAttribute: name =" + name + ", value = " + value); //$NON-NLS-1$ //$NON-NLS-2$
+		if (name.equals(PROFILE_PROPERTY_PROFILE_TYPE_ID) || name.equals(TYPE_ID)) {
+			return profile.getProviderId().equals(value);
+		}
+		else if (name.equals(PROFILE_PROPERTY_CATEGORY_ID) || name.equals(CATEGORY_ID)) {
+			return profile.getCategory().getId().equals(value);
+		}
+		else if (name.equals(PROFILE_PROPERTY_HAS_EXTENDED_PROPERTIES) || name.equals(HAS_EXTENDED_PROPERTIES)) {
+			return profile.getProvider().getProfileExtensions().size() != 0;
+		}
+		else if (name.equals(PROFILE_PROPERTY_PROPERTY_EXTENSION_ID) || name.equals(EXTENSION_ID)) {
+			return profile.getProvider().getProfileExtensions().containsKey(
+					value);
+		}
+		else if (name.equals(PROFILE_PROPERTY_MAINTAIN_CONNECTION) || name.equals(MAINTAIN_CONNECTION)) {
+			return profile.getProvider().needsMaintainConnection();
+		}
+		else if (name.equals(PROFILE_PROPERTY_IS_CONNECTED) || name.equals(IS_CONNECTED)) {
+			return profile.getConnectionState() == IConnectionProfile.CONNECTED_STATE; //isConnected();
+		}
+		else if (name.equals(PROFILE_PROPERTY_SUPPORTS_PING) || name.equals(SUPPORTS_PING)) {
+			return profile.getProvider().getConnectionFactories().containsKey(
+					ConnectionProfileConstants.PING_FACTORY_ID);
+		}
+		else if (name.equals(PROFILE_PROPERTY_FACTORY_ID) || name.equals(FACTORY_ID)) {
+			return profile.getProvider().getConnectionFactories().containsKey(
+					value);
+		}
+		else if (name.equals(PROFILE_PROPERTY_VIEW_ID) || name.equals(VIEW_ID)) {
+			IWorkbench workbench = PlatformUI.getWorkbench();
+			IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
+			IWorkbenchPage page = window.getActivePage();
+			IWorkbenchPart part = page.getActivePart();
+			if (part instanceof IViewPart) {
+				IViewPart view = (IViewPart) part;
+				String viewID = view.getViewSite().getId();
+				return viewID.equals(value);
+			}
+			return false;
+		}
+		else if (name.equals(PROFILE_PROPERTY_CONNECTION_STATE) || name.equals(CONNECTION_STATE)) {
+			return profile.getConnectionState() == getConnectionStateFromString(value);
+		}
+		else if (name.equals(PROFILE_PROPERTY_DB_VENDOR) || name.equals(DB_VENDOR)){
+			return profile.getBaseProperties().getProperty("org.eclipse.datatools.connectivity.db.vendor")	//$NON-NLS-1$	
+						.equals(value);
+		}
+		else if (name.equals(PROFILE_PROPERTY_DB_VERSION) || name.equals(DB_VERSION)){
+			return profile.getBaseProperties().getProperty("org.eclipse.datatools.connectivity.db.version")	//$NON-NLS-1$	
+						.equals(value);
+		}
+		else if (name.equals(PROFILE_PROPERTY_REPOSITORY_IS_READ_ONLY) || name.equals(REPOSITORY_IS_READ_ONLY)) {
+			IManagedConnection imc = profile
+				.getManagedConnection(IConnectionProfileRepositoryConstants.REPOSITORY_CONNECTION_FACTORY_ID);
+			if (imc != null && imc.isConnected()) {
+				IConnectionProfileRepository repo = (IConnectionProfileRepository) imc
+						.getConnection().getRawConnection();
+				debug(PROFILE_PROPERTY_REPOSITORY_IS_READ_ONLY + ", value = " + repo.isReadOnly()); //$NON-NLS-1$
+				return repo.isReadOnly();
+			}
+			else {
+				IConnectionProfileRepository repo = ((ConnectionProfile)profile).getRepository();
+				if (repo != null) {
+					debug(PROFILE_PROPERTY_REPOSITORY_IS_READ_ONLY + ", value = " + repo.isReadOnly()); //$NON-NLS-1$
+					return repo.isReadOnly();
+				}
+			}
+			debug(PROFILE_PROPERTY_REPOSITORY_IS_READ_ONLY + ", value = " + false); //$NON-NLS-1$
+			return false;
+		}
+		else if (name.equals(PROFILE_PROPERTY_CAN_WORK_OFFLINE) || name.equals(CAN_WORK_OFFLINE)) {
+			return profile.supportsWorkOfflineMode();
+		}
+		else {
+			return false;
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, java.lang.String, java.lang.Object[], java.lang.Object)
+	 */
+	public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
+		return testAttribute(receiver, property, expectedValue == null ? null : expectedValue.toString());
+	}
+	
+	/**
+	 * @param value
+	 * @return
+	 */
+	private int getConnectionStateFromString(String value) {
+		if ("DISCONNECTED".equalsIgnoreCase(value)) {//$NON-NLS-1$
+			return IConnectionProfile.DISCONNECTED_STATE;
+		}
+		else if ("CONNECTED".equalsIgnoreCase(value)) {//$NON-NLS-1$
+			return IConnectionProfile.CONNECTED_STATE;
+		}
+		else if ("WORKING_OFFLINE".equalsIgnoreCase(value)) {//$NON-NLS-1$
+			return IConnectionProfile.WORKING_OFFLINE_STATE;
+		}
+		return -1;
+	}
+
+	/**
+	 * @param msg
+	 */
+	public static void debug ( String msg ) {
+		if (mDebug)
+			System.out.println("Debug: " + msg); //$NON-NLS-1$
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/ConnectionProfileManagerUI.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/ConnectionProfileManagerUI.java
new file mode 100644
index 0000000..64d606c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/ConnectionProfileManagerUI.java
@@ -0,0 +1,138 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileManager;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.ProfileWizardProvider;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.WizardCategoryProvider;
+import org.eclipse.datatools.connectivity.ui.wizards.IWizardCategoryProvider;
+import org.eclipse.jface.wizard.IWizard;
+
+public class ConnectionProfileManagerUI {
+
+	private static ConnectionProfileManagerUI sInstance = new ConnectionProfileManagerUI();
+
+	private Map mNewWizards = null;
+	private Map mWizardCategories = null;
+	private Map mProfileWizardMap = null;
+	private Map mSuppressedProfileMap = null;
+
+	public static ConnectionProfileManagerUI getInstance() {
+		return sInstance;
+	}
+
+	private ConnectionProfileManagerUI() {
+		super();
+		// Ping the base manager to make sure extension point tracing flag gets
+		// initialized.
+		ConnectionProfileManager.getInstance();
+	}
+
+	public Map getWizardCategories() {
+		if (mWizardCategories == null)
+			processExtensions();
+		return mWizardCategories;
+	}
+
+	public Map getNewWizards() {
+		if (mNewWizards == null)
+			processExtensions();
+		return mNewWizards;
+	}
+
+	public IWizardCategoryProvider getWizardCategory(String id) {
+		return (IWizardCategoryProvider) getWizardCategories().get(id);
+	}
+
+	public IWizard getNewWizard(String id) {
+		Object profileWizard = (ProfileWizardProvider) getNewWizards().get(id);
+		if (profileWizard == null)
+			return null;
+		return ((ProfileWizardProvider) getNewWizards().get(id)).getWizard();
+	}
+
+	private void processNewWizard(IConfigurationElement element) {
+		ProfileWizardProvider c = new ProfileWizardProvider(element);
+		Assert.isTrue(!mNewWizards.containsKey(c.getId()), ConnectivityPlugin
+				.getDefault().getResourceString(
+						"assert.invalid.profile", new Object[] { element //$NON-NLS-1$
+								.toString()}));
+		mNewWizards.put(c.getId(), c);
+		mProfileWizardMap.put(c.getProfile(), c);
+		if (c.getSuppressedProfile() != null) {
+			mSuppressedProfileMap.put(c.getProfile(), c.getSuppressedProfile());
+		}
+	}
+
+	private void processWizardCategory(IConfigurationElement element) {
+		WizardCategoryProvider c = new WizardCategoryProvider(element);
+		Assert.isTrue(!mWizardCategories.containsKey(c.getId()),
+				ConnectivityPlugin.getDefault().getResourceString(
+						"assert.invalid.profile", new Object[] { element //$NON-NLS-1$
+								.toString()}));
+		mWizardCategories.put(c.getId(), c);
+	}
+
+	private void processExtensions() {
+		mNewWizards = new HashMap();
+		mWizardCategories = new HashMap();
+		mProfileWizardMap = new HashMap();
+		mSuppressedProfileMap = new HashMap();
+
+		IExtensionRegistry registry = Platform.getExtensionRegistry();
+		IExtensionPoint exp = registry
+				.getExtensionPoint(ConnectionProfileManager.EXTENSION_ID);
+		IExtension[] exts = exp.getExtensions();
+		for (Iterator xit = Arrays.asList(exts).iterator(); xit.hasNext();) {
+			IExtension ext = (IExtension) xit.next();
+			IConfigurationElement[] elems = ext.getConfigurationElements();
+			for (Iterator eit = Arrays.asList(elems).iterator(); eit.hasNext();) {
+				IConfigurationElement elem = (IConfigurationElement) eit.next();
+				String elemName = elem.getName();
+				if (ConnectionProfileManager.EXT_ELEM_NEW_WIZARD
+						.equals(elemName)) {
+					processNewWizard(elem);
+				}
+				else if (ConnectionProfileManager.EXT_ELEM_WIZARD_CATEGORY
+						.equals(elemName)) {
+					processWizardCategory(elem);
+				}
+			}
+		}
+		processSuppressedProfiles();
+	}
+	
+	private void processSuppressedProfiles() {
+		Iterator it = mSuppressedProfileMap.keySet().iterator();
+		while (it.hasNext()) {
+			String profile = (String)it.next();
+			String suppressedProfile = (String)mSuppressedProfileMap.get(profile);
+			ProfileWizardProvider provider = (ProfileWizardProvider)mProfileWizardMap.get(suppressedProfile);
+			if (provider != null) {
+				mNewWizards.remove(provider.getId());
+			}
+		}
+			
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/ConnectionProfilePropertySource.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/ConnectionProfilePropertySource.java
new file mode 100644
index 0000000..11f2ad7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/ConnectionProfilePropertySource.java
@@ -0,0 +1,139 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.ui.views.properties.IPropertyDescriptor;
+import org.eclipse.ui.views.properties.IPropertySource;
+import org.eclipse.ui.views.properties.PropertyDescriptor;
+
+/**
+ * @author shongxum
+ */
+public class ConnectionProfilePropertySource implements IPropertySource {
+
+	private static final String P_ID_ENTITY_NAME = "org.eclipse.datatools.connectivity.properties.general.cpname"; //$NON-NLS-1$
+
+	private static final String P_ID_ENTITY_DESC = "org.eclipse.datatools.connectivity.properties.general.cpdesc"; //$NON-NLS-1$
+
+	private static final String P_ID_ENTITY_AUTOCONNECT = "org.eclipse.datatools.connectivity.properties.general.cpautoconnect"; //$NON-NLS-1$
+
+	private static final String P_ID_ENTITY_TYPE = "org.eclipse.datatools.connectivity.properties.general.cptype"; //$NON-NLS-1$
+
+	private IConnectionProfile mCP;
+	private boolean _showAutoConnect = true;
+
+	public ConnectionProfilePropertySource(IConnectionProfile cp) {
+		mCP = cp;
+		_showAutoConnect = mCP.getProvider().needsMaintainConnection();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.views.properties.IPropertySource#getEditableValue()
+	 */
+	public Object getEditableValue() {
+		return mCP;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.views.properties.IPropertySource#getPropertyDescriptors()
+	 */
+	public IPropertyDescriptor[] getPropertyDescriptors() {
+		PropertyDescriptor desName = new PropertyDescriptor(P_ID_ENTITY_NAME,
+				ConnectivityUIPlugin.getDefault().getResourceString(
+						"properties.connectionprofile.name")); //$NON-NLS-1$
+		desName.setCategory(ConnectivityUIPlugin.getDefault()
+				.getResourceString("properties.category.general")); //$NON-NLS-1$
+		PropertyDescriptor desDesc = new PropertyDescriptor(P_ID_ENTITY_DESC,
+				ConnectivityUIPlugin.getDefault().getResourceString(
+						"properties.connectionprofile.desc")); //$NON-NLS-1$
+		desDesc.setCategory(ConnectivityUIPlugin.getDefault()
+				.getResourceString("properties.category.general")); //$NON-NLS-1$
+
+		PropertyDescriptor desType = new PropertyDescriptor(P_ID_ENTITY_TYPE,
+				ConnectivityUIPlugin.getDefault().getResourceString(
+						"properties.connectionprofile.type")); //$NON-NLS-1$
+		desType.setCategory(ConnectivityUIPlugin.getDefault()
+				.getResourceString("properties.category.general")); //$NON-NLS-1$
+
+		if (!_showAutoConnect) {
+			return new IPropertyDescriptor[] { desName, desType};
+		}
+		PropertyDescriptor autoConnectType = new PropertyDescriptor(
+				P_ID_ENTITY_AUTOCONNECT, ConnectivityUIPlugin.getDefault()
+						.getResourceString(
+								"properties.connectionprofile.autoconnect")); //$NON-NLS-1$
+		autoConnectType.setCategory(ConnectivityUIPlugin.getDefault()
+				.getResourceString("properties.category.general")); //$NON-NLS-1$
+
+		return new IPropertyDescriptor[] { desName, desDesc, desType, autoConnectType};
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.views.properties.IPropertySource#getPropertyValue(java.lang.Object)
+	 */
+	public Object getPropertyValue(Object id) {
+		if (id.equals(P_ID_ENTITY_NAME)) {
+			return mCP.getName();
+		}
+		else if (id.equals(P_ID_ENTITY_DESC)) {
+			return mCP.getDescription();
+		}
+		else if (id.equals(P_ID_ENTITY_TYPE)) {
+			return mCP.getProviderName();
+		}
+		else if (id.equals(P_ID_ENTITY_AUTOCONNECT)) {
+			if (!_showAutoConnect) {
+				return new Boolean(true);
+			}
+			else {
+				return new Boolean(mCP.isAutoConnect());
+			}
+		}
+		else {
+			return null;
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.views.properties.IPropertySource#isPropertySet(java.lang.Object)
+	 */
+	public boolean isPropertySet(Object id) {
+		return true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.views.properties.IPropertySource#resetPropertyValue(java.lang.Object)
+	 */
+	public void resetPropertyValue(Object id) {
+		// Do nothing
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.views.properties.IPropertySource#setPropertyValue(java.lang.Object,
+	 *      java.lang.Object)
+	 */
+	public void setPropertyValue(Object id, Object value) {
+		// Do nothing
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/ConnectivityUIPlugin.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/ConnectivityUIPlugin.java
new file mode 100644
index 0000000..793c363
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/ConnectivityUIPlugin.java
@@ -0,0 +1,230 @@
+/*******************************************************************************
+ * Copyright (c) 2005-2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import java.text.MessageFormat;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+import org.eclipse.core.runtime.IAdapterFactory;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.ui.IActionFilter;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.eclipse.ui.views.properties.IPropertySource;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The main plugin class to be used in the desktop.
+ */
+public class ConnectivityUIPlugin extends AbstractUIPlugin {
+
+	public static final int INTERNAL_ERROR = 10001;
+
+	public static final String FILTER_PROPERTY_CONTEN_EXTENSION_ID = "org.eclipse.datatools.connectivity.contentextension.id"; //$NON-NLS-1$
+
+	public static final String FILTER_PROPERTY_CONTEN_EXTENSION_STATE = "org.eclipse.datatools.connectivity.contentextension.state"; //$NON-NLS-1$
+
+	public static final String SERVERS_VIEW_CONTENT_EXTENSION_ID = "org.eclipse.datatools.connectivity.dsexplorer.content"; //$NON-NLS-1$
+	
+	public static final String PROP_SHOW_CATEGORIES = "showCategories"; //$NON-NLS-1$
+
+	public static final String SERVERS_VIEW_VIEWER_ID = "org.eclipse.datatools.connectivity.DataSourceExplorerNavigator"; //$NON-NLS-1$
+
+	// The shared instance.
+	private static ConnectivityUIPlugin plugin;
+	// Resource bundle.
+	private ResourceBundle resourceBundle;
+
+	/**
+	 * The constructor.
+	 */
+	public ConnectivityUIPlugin() {
+		super();
+		plugin = this;
+	}
+
+	/**
+	 * Returns the shared instance.
+	 */
+	public static ConnectivityUIPlugin getDefault() {
+		return plugin;
+	}
+
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		addIConnectionProfileAdapter();
+		addICategoryAdapter();
+		addIWorkbenchWindowAdapter();
+	}
+
+	public void stop(BundleContext context) throws Exception {
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the plugin's resource bundle,
+	 */
+	public ResourceBundle getResourceBundle() {
+		try {
+			if (resourceBundle == null)
+				resourceBundle = ResourceBundle
+						.getBundle("org.eclipse.datatools.connectivity.internal.ui.resources"); //$NON-NLS-1$
+		}
+		catch (MissingResourceException x) {
+			resourceBundle = null;
+		}
+		return resourceBundle;
+	}
+
+	public String getResourceString(String key) {
+		try {
+			ResourceBundle resBundle = getResourceBundle();
+			if (resBundle == null) {
+				return key;
+			}
+
+			return resBundle.getString(key);
+		}
+		catch (MissingResourceException e) {
+			return key;
+		}
+	}
+
+	public String getResourceString(String key, Object[] arguments) {
+		MessageFormat f = new MessageFormat(getResourceString(key));
+
+		return f.format(arguments);
+	}
+
+	/*
+	 * Register an IPropertySource for IConnectionProfile.
+	 */
+	private static void addIConnectionProfileAdapter() {
+		IAdapterFactory pr = new IAdapterFactory() {
+
+			public Class[] getAdapterList() {
+				Class[] c = new Class[2];
+				c[0] = IPropertySource.class;
+				c[1] = IActionFilter.class;
+				return c;
+			}
+
+			public Object getAdapter(Object adaptableObject, Class adapterType) {
+
+				if (adapterType.isAssignableFrom(IPropertySource.class)) {
+					final IConnectionProfile icp = (IConnectionProfile) adaptableObject;
+					return new ConnectionProfilePropertySource(icp);
+				}
+				else if (adapterType.isAssignableFrom(IActionFilter.class)) {
+					return new ConnectionProfileActionFilter();
+				}
+				return null;
+			}
+		};
+		Platform.getAdapterManager().registerAdapters(pr,
+				IConnectionProfile.class);
+	}
+
+	/*
+	 * Register an IPropertySource for ICategory.
+	 */
+	private static void addICategoryAdapter() {
+		IAdapterFactory pr = new IAdapterFactory() {
+
+			public Class[] getAdapterList() {
+				Class[] c = new Class[2];
+				c[0] = IPropertySource.class;
+				c[1] = IActionFilter.class;
+				return c;
+			}
+
+			public Object getAdapter(Object adaptableObject, Class adapterType) {
+
+				if (adapterType.isAssignableFrom(IPropertySource.class)) {
+					final ICategory icp = (ICategory) adaptableObject;
+					return new CategoryPropertySource(icp);
+				}
+				else if (adapterType.isAssignableFrom(IActionFilter.class)) {
+					return new CategoryActionFilter();
+				}
+				return null;
+			}
+		};
+		Platform.getAdapterManager().registerAdapters(pr, ICategory.class);
+	}
+
+	/*
+	 * Register an IPropertySource for ICategory.
+	 */
+	private static void addIWorkbenchWindowAdapter() {
+		IAdapterFactory pr = new IAdapterFactory() {
+
+			public Class[] getAdapterList() {
+				Class[] c = new Class[2];
+				c[0] = IPropertySource.class;
+				c[1] = IActionFilter.class;
+				return c;
+			}
+
+			public Object getAdapter(Object adaptableObject, Class adapterType) {
+
+				if (adapterType.isAssignableFrom(IActionFilter.class)) {
+					return new WorkbenchWindowPerspectiveActionFilter();
+				}
+				return null;
+			}
+		};
+		Platform.getAdapterManager().registerAdapters(pr, IWorkbenchWindow.class);
+	}
+
+	/**
+	 * Logs runtime status.
+	 * 
+	 * @param status Runtime status.
+	 */
+	public void log(IStatus status) {
+		getLog().log(status);
+	}
+
+	/**
+	 * Logs error message.
+	 * 
+	 * @param message Error message.
+	 */
+	public void log(String message) {
+		log(createErrorStatus(message));
+	}
+
+	/**
+	 * Logs and exception.
+	 * 
+	 * @param e Exception.
+	 */
+	public void log(Throwable e) {
+		log(createErrorStatus(e));
+	}
+
+	public IStatus createErrorStatus(String message) {
+		return new Status(IStatus.ERROR, getBundle().getSymbolicName(),
+				INTERNAL_ERROR, message, null);
+	}
+
+	public IStatus createErrorStatus(Throwable e) {
+		return new Status(IStatus.ERROR, getBundle().getSymbolicName(),
+				INTERNAL_ERROR, getResourceString("plugin.internal_error"), e); //$NON-NLS-1$
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DelimitedStringList.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DelimitedStringList.java
new file mode 100644
index 0000000..a0b10ec
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DelimitedStringList.java
@@ -0,0 +1,513 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005, 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ *          IBM Corporation - defect fix #213266
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.datatools.connectivity.drivers.DriverMgmtMessages;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Text;
+
+import com.ibm.icu.util.StringTokenizer;
+
+/**
+ * Composite that provides a method of managing a delimited list of strings.
+ * 
+ * @author brianf
+ */
+public class DelimitedStringList extends Composite {
+
+	// delimiter used
+	private static final String DELIMITER = ",";//$NON-NLS-1$
+
+	// ui elements
+	private Button mAddButton;
+	private Button mClearAllButton;
+	private Button mRemoveButton;
+	private Button mDownButton;
+	private Button mUpButton;
+	private List mPropsList;
+	private Text mAddText;
+	private Text mHiddenText;
+	private boolean isReadOnly = false;
+
+	// current delimiter
+	private String mDelimiter = DELIMITER;
+
+	// Warning
+	private String mWarning = null;
+
+	// change listeners
+	private ListenerList changeListeners;
+
+	private class AddTextModifyListener implements ModifyListener {
+
+		private DelimitedStringList parent;
+
+		public AddTextModifyListener(DelimitedStringList parent) {
+			this.parent = parent;
+		}
+
+		public void modifyText(ModifyEvent e) {
+			updatePropertyButtons();
+			fireChangedEvent(parent);
+		}
+	}
+
+	/**
+	 * Constructor
+	 * 
+	 * @param parent
+	 * @param style
+	 */
+	public DelimitedStringList(Composite parent, int style) {
+		this(parent, style, false);
+	}
+	
+	/**
+	 * Constructor
+	 * 
+	 * @param parent
+	 * @param style
+	 */
+	public DelimitedStringList(Composite parent, int style, boolean isReadOnly) {
+		super(parent, style);
+		this.isReadOnly = isReadOnly;
+		this.changeListeners = new ListenerList();
+		
+		int additionalStyles = SWT.NONE;
+		if (isReadOnly){
+			additionalStyles = SWT.READ_ONLY;
+		}
+		
+		final GridLayout gridLayout = new GridLayout();
+		gridLayout.marginWidth = 0;
+		gridLayout.marginHeight = 0;
+		gridLayout.numColumns = 2;
+		setLayout(gridLayout);
+		{
+			this.mAddText = new Text(this, SWT.BORDER | additionalStyles);
+			this.mAddText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+			this.mAddText.addModifyListener(new AddTextModifyListener(this));
+		}
+		{
+			this.mAddButton = new Button(this, SWT.NONE);
+			this.mAddButton.setLayoutData(new GridData(
+					GridData.HORIZONTAL_ALIGN_FILL));
+			this.mAddButton.setText(DriverMgmtMessages
+					.getString("DelimitedStringList.button.add"));//$NON-NLS-1$
+			this.mAddButton.addSelectionListener(new SelectionAdapter() {
+
+				public void widgetSelected(SelectionEvent e) {
+					addStringToList();
+					fireChangedEvent(e.getSource());
+				}
+			});
+			
+			this.mAddButton.setEnabled(false);
+		}
+		{
+			final Composite mSpacerComposite = new Composite(this, SWT.NONE);
+			final GridData gridData = new GridData();
+			gridData.heightHint = 10;
+			gridData.horizontalSpan = 2;
+			mSpacerComposite.setLayoutData(gridData);
+			mSpacerComposite.setLayout(new GridLayout());
+		}
+		{
+			this.mPropsList = new List(this, SWT.BORDER);
+			final GridData gridData = new GridData(
+					GridData.HORIZONTAL_ALIGN_FILL
+							| GridData.VERTICAL_ALIGN_FILL);
+			gridData.verticalSpan = 5;
+			this.mPropsList.setLayoutData(gridData);
+			this.mPropsList.addSelectionListener(new SelectionAdapter() {
+
+				public void widgetSelected(SelectionEvent e) {
+					updatePropertyButtons();
+				}
+			});
+		}
+		{
+			this.mUpButton = new Button(this, SWT.NONE);
+			this.mUpButton.setLayoutData(new GridData(
+					GridData.HORIZONTAL_ALIGN_FILL));
+			this.mUpButton.setText(DriverMgmtMessages
+					.getString("DelimitedStringList.button.up"));//$NON-NLS-1$
+			this.mUpButton.setEnabled(false);
+			this.mUpButton.addSelectionListener(new SelectionAdapter() {
+
+				public void widgetSelected(SelectionEvent e) {
+					moveUpInList();
+				}
+			});
+		}
+		{
+			this.mDownButton = new Button(this, SWT.NONE);
+			this.mDownButton.setLayoutData(new GridData(
+					GridData.HORIZONTAL_ALIGN_FILL));
+			this.mDownButton.setText(DriverMgmtMessages
+					.getString("DelimitedStringList.button.down"));//$NON-NLS-1$
+			this.mDownButton.setEnabled(false);
+			this.mDownButton.addSelectionListener(new SelectionAdapter() {
+
+				public void widgetSelected(SelectionEvent e) {
+					moveDownInList();
+				}
+			});
+		}
+		{
+			this.mRemoveButton = new Button(this, SWT.NONE);
+			this.mRemoveButton.setLayoutData(new GridData(
+					GridData.HORIZONTAL_ALIGN_FILL));
+			this.mRemoveButton.setText(DriverMgmtMessages
+					.getString("DelimitedStringList.button.remove"));//$NON-NLS-1$
+			this.mRemoveButton.setEnabled(false);
+			this.mRemoveButton.addSelectionListener(new SelectionAdapter() {
+
+				public void widgetSelected(SelectionEvent e) {
+					removeFromList();
+				}
+			});
+		}
+		{
+			this.mClearAllButton = new Button(this, SWT.NONE);
+			this.mClearAllButton.setEnabled(false);
+			this.mClearAllButton.setLayoutData(new GridData(
+					GridData.HORIZONTAL_ALIGN_FILL));
+			this.mClearAllButton.setText(DriverMgmtMessages
+					.getString("DelimitedStringList.button.clear"));//$NON-NLS-1$
+			this.mClearAllButton.addSelectionListener(new SelectionAdapter() {
+
+				public void widgetSelected(SelectionEvent e) {
+					DelimitedStringList.this.mPropsList.removeAll();
+					DelimitedStringList.this.mHiddenText.setText(DelimitedStringList.this.getSelection().trim());
+					updatePropertyButtons();
+				}
+			});
+		}
+		{
+			this.mHiddenText = new Text(this, SWT.BORDER);
+			final GridData gridData = new GridData();
+			gridData.horizontalSpan = 2;
+			this.mHiddenText.setLayoutData(gridData);
+			this.mHiddenText.setVisible(false);
+		}
+		updatePropertyButtons();
+	}
+
+	/**
+	 * Add a listener to receive notifications when the property list is
+	 * modified.
+	 * 
+	 * @param listener
+	 */
+	public void addModifyListener(ModifyListener listener) {
+		this.mHiddenText.addModifyListener(listener);
+	}
+
+	public void removeModifyListener(ModifyListener listener) {
+		this.mHiddenText.removeModifyListener(listener);
+	}
+
+	public void dispose() {
+		super.dispose();
+	}
+
+	protected void checkSubclass() {
+		// empty
+	}
+
+	/**
+	 * Add a new string to the list
+	 */
+	private void addStringToList() {
+		if (this.mAddText.getText().length() > 0) {
+			this.mPropsList.add(this.mAddText.getText().trim());
+			if (!isReadOnly){
+				this.mClearAllButton.setEnabled(true);
+			}
+			String selected = getSelection();
+			this.mHiddenText.setText(selected.trim());
+			this.mAddText.setSelection(0, this.mAddText.getText().length());
+			this.mAddText.setFocus();
+		}
+	}
+
+	/**
+	 * Remove a string from the list
+	 */
+	private void removeFromList() {
+		if (this.mPropsList.getSelectionCount() == 1) {
+			int index = this.mPropsList.getSelectionIndex();
+			this.mPropsList.remove(index);
+			String selected = getSelection();
+			this.mHiddenText.setText(selected.trim());
+
+			try {
+				if (this.mPropsList.getItem(index) != null) {
+					this.mPropsList.select(index);
+				}
+			}
+			catch (IllegalArgumentException e) {
+				// do nothing
+			}
+		}
+
+		this.mPropsList.setFocus();
+
+		updatePropertyButtons();
+	}
+
+	/**
+	 * Move a string up in the list
+	 */
+	private void moveUpInList() {
+		if (this.mPropsList.getSelectionCount() == 1) {
+			int selection = this.mPropsList.getSelectionIndex();
+			int destination = -1;
+			if (selection > 0) {
+				destination = selection - 1;
+				String value_a = this.mPropsList.getItem(destination);
+				String value_b = this.mPropsList.getItem(selection);
+
+				String[] items = this.mPropsList.getItems();
+				this.mPropsList.removeAll();
+
+				int counter = 0;
+				while (counter < items.length) {
+					if (counter == destination) {
+						this.mPropsList.add(value_b);
+						this.mPropsList.add(value_a);
+						counter = counter + 2;
+					}
+					else {
+						this.mPropsList.add(items[counter]);
+						counter++;
+					}
+				}
+
+				String selected = getSelection();
+				this.mHiddenText.setText(selected.trim());
+				this.mPropsList.setSelection(destination);
+			}
+		}
+		this.mPropsList.setFocus();
+		updatePropertyButtons();
+	}
+
+	/**
+	 * Move a string down in the list
+	 */
+	private void moveDownInList() {
+		if (this.mPropsList.getSelectionCount() == 1) {
+			int selection = this.mPropsList.getSelectionIndex();
+			int destination = -1;
+			if (selection < this.mPropsList.getItemCount() - 1) {
+
+				destination = selection + 1;
+
+				String value_a = this.mPropsList.getItem(destination);
+				String value_b = this.mPropsList.getItem(selection);
+
+				String[] items = this.mPropsList.getItems();
+				this.mPropsList.removeAll();
+
+				int counter = 0;
+				while (counter < items.length) {
+					if (counter == selection) {
+						this.mPropsList.add(value_a);
+						this.mPropsList.add(value_b);
+					}
+					else if (counter == destination) {
+						// empty
+					}
+					else {
+						this.mPropsList.add(items[counter]);
+					}
+					counter++;
+				}
+
+				String selected = getSelection();
+				this.mHiddenText.setText(selected.trim());
+				this.mPropsList.setSelection(destination);
+
+			}
+		}
+		this.mPropsList.setFocus();
+		updatePropertyButtons();
+	}
+
+	/**
+	 * Return the current selection
+	 */
+	public String getSelection() {
+		String selectString = ""; //$NON-NLS-1$
+		for (int i = 0; i < this.mPropsList.getItems().length; i++) {
+			String testitem = this.mPropsList.getItem(i).trim();
+			selectString = selectString + testitem;
+			if (i < this.mPropsList.getItems().length - 1) {
+				selectString = selectString + this.mDelimiter; //$NON-NLS-1$
+			}
+		}
+		return selectString;
+	}
+
+	/**
+	 * Update button state based on what's selected
+	 */
+	public void updatePropertyButtons() {
+		if (!isReadOnly){
+			this.mDownButton.setEnabled(false);
+			this.mUpButton.setEnabled(false);
+			this.mRemoveButton.setEnabled(false);
+			this.mClearAllButton.setEnabled(false);
+				
+			if (this.mPropsList.getItemCount() > 0) {
+				
+				this.mClearAllButton.setEnabled(true);
+				
+				if(this.mPropsList.getSelectionCount() == 1){
+					int selection = this.mPropsList.getSelectionIndex();
+	
+					this.mRemoveButton.setEnabled(true);
+	
+					if (selection - 1 >= 0)
+						this.mUpButton.setEnabled(true);
+	
+					if (selection + 1 < this.mPropsList.getItemCount())
+						this.mDownButton.setEnabled(true);
+				}
+			}
+	
+			String value = ""; //$NON-NLS-1$
+			value = this.mAddText.getText();
+			boolean flag = value != null && value.trim().length() > 0;
+			boolean valid = validateText(value);
+			this.mAddButton.setEnabled(flag && valid);
+		}
+	}
+
+	private boolean validateText(String text) {
+		if (text != null && text.trim().length() > 0 && text.indexOf(",") > -1) { //$NON-NLS-1$
+			this.mWarning = DriverMgmtMessages
+					.getString("DelimitedStringList.ValidationMsg.NoCommas"); //$NON-NLS-1$
+			return false;
+		}
+		this.mWarning = null;
+		return true;
+	}
+
+	/**
+	 * Set focus to the add text box
+	 */
+	public boolean setFocus() {
+		if (this.mAddText != null)
+			return this.mAddText.setFocus();
+		return false;
+	}
+
+	/**
+	 * Set the initial delimited list
+	 * 
+	 * @param str_list
+	 */
+	public void setSelection(String str_list) {
+		String[] str_array = parseString(str_list);
+		this.mPropsList.setItems(str_array);
+		updatePropertyButtons();
+	}
+
+	/**
+	 * Parse the list
+	 * 
+	 * @param str_list
+	 * @return
+	 */
+	private String[] parseString(String str_list) {
+		StringTokenizer tk = new StringTokenizer(str_list, this.mDelimiter);
+		String[] pieces = new String[tk.countTokens()];
+		int index = 0;
+		while (tk.hasMoreTokens())
+			pieces[index++] = tk.nextToken();
+		return pieces;
+	}
+
+	/**
+	 * Change the delimiter
+	 * 
+	 * @param delimiter
+	 */
+	public void setDelimiter(String delimiter) {
+		this.mDelimiter = delimiter;
+	}
+
+	/**
+	 * Return the delimiter
+	 * 
+	 * @return
+	 */
+	public String getDelimiter() {
+		return this.mDelimiter;
+	}
+
+	public String getWarning() {
+		return this.mWarning;
+	}
+
+	/**
+	 * If we changed, fire a changed event.
+	 * 
+	 * @param source
+	 */
+	private void fireChangedEvent(Object source) {
+		ChangeEvent e = new ChangeEvent(source);
+		// inform any listeners of the resize event
+		Object[] listeners = this.changeListeners.getListeners();
+		for (int i = 0; i < listeners.length; ++i) {
+			((ChangeListener) listeners[i]).stateChanged(e);
+		}
+	}
+
+	/**
+	 * Add a change listener
+	 * 
+	 * @param listener
+	 */
+	public void addChangeListener(ChangeListener listener) {
+		this.changeListeners.add(listener);
+	}
+
+	/**
+	 * Remove a change listener.
+	 * 
+	 * @param listener
+	 */
+	public void removeChangeListener(ChangeListener listener) {
+		this.changeListeners.remove(listener);
+	}
+	
+	
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DriverImages.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DriverImages.java
new file mode 100644
index 0000000..a301030
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DriverImages.java
@@ -0,0 +1,116 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+/**
+ * Set of images that are used for decorating resources are maintained here.
+ * This acts as a image registry and hence there is a single copy of the image
+ * files floating around the project.
+ * 
+ * @author brianf
+ * 
+ */
+public class DriverImages {
+
+	// image keys
+	public static String ERROR_KEY = "Error"; //$NON-NLS-1$
+	public static String WARNING_KEY = "Warning"; //$NON-NLS-1$
+	public static String MISSING_KEY = "Missing"; //$NON-NLS-1$
+	public static String DRIVER_KEY = "Driver"; //$NON-NLS-1$
+	public static String CATEGORY_KEY = "Category"; //$NON-NLS-1$
+	public static String CHANGE_KEY = "Change"; //$NON-NLS-1$
+
+	// image descriptors
+	public static ImageDescriptor ERROR = AbstractUIPlugin
+			.imageDescriptorFromPlugin(ConnectivityUIPlugin.getDefault()
+					.getBundle().getSymbolicName(),
+					"icons/full/ovr16/error_co.gif"); //$NON-NLS-1$
+	public static ImageDescriptor WARNING = AbstractUIPlugin
+			.imageDescriptorFromPlugin(ConnectivityUIPlugin.getDefault()
+					.getBundle().getSymbolicName(),
+					"icons/full/ovr16/warning_co.gif"); //$NON-NLS-1$
+	public static ImageDescriptor NULLIMAGE = ImageDescriptor
+			.getMissingImageDescriptor();
+	public static ImageDescriptor DRIVER = AbstractUIPlugin
+			.imageDescriptorFromPlugin(ConnectivityUIPlugin.getDefault()
+					.getBundle().getSymbolicName(), "icons/driver_obj.gif"); //$NON-NLS-1$
+	public static ImageDescriptor CATEGORY = AbstractUIPlugin
+			.imageDescriptorFromPlugin(ConnectivityUIPlugin.getDefault()
+					.getBundle().getSymbolicName(),
+					"icons/driver_category_obj.gif"); //$NON-NLS-1$
+	public static ImageDescriptor CHANGE = AbstractUIPlugin
+		.imageDescriptorFromPlugin(ConnectivityUIPlugin.getDefault()
+				.getBundle().getSymbolicName(), "icons/change_obj.gif"); //$NON-NLS-1$
+
+	/**
+	 * Constructor for DriverImages.
+	 */
+	public DriverImages() {
+		super();
+	}
+
+	public ImageData getErrorImageData() {
+		return ERROR.getImageData();
+	}
+
+	public ImageData getWarningImageData() {
+		return WARNING.getImageData();
+	}
+
+	public ImageData getMissingImageData() {
+		return NULLIMAGE.getImageData();
+	}
+
+	public ImageData getDriverImageData() {
+		return DRIVER.getImageData();
+	}
+
+	public ImageData getCategoryImageData() {
+		return CATEGORY.getImageData();
+	}
+
+	public ImageData getChangeImageData() {
+		return CHANGE.getImageData();
+	}
+
+	/**
+	 * Get the image data depending on the key
+	 * 
+	 * @return image data
+	 * 
+	 */
+	public ImageData getImageData(String imageKey) {
+		if (imageKey.equals(ERROR_KEY)) {
+			return getErrorImageData();
+		}
+		if (imageKey.equals(WARNING_KEY)) {
+			return getWarningImageData();
+		}
+		if (imageKey.equals(MISSING_KEY)) {
+			return getMissingImageData();
+		}
+		if (imageKey.equals(DRIVER_KEY)) {
+			return getDriverImageData();
+		}
+		if (imageKey.equals(CATEGORY_KEY)) {
+			return getCategoryImageData();
+		}
+		if (imageKey.equals(CHANGE_KEY)) {
+			return getChangeImageData();
+		}
+		return null;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DriverInstancePropertySource.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DriverInstancePropertySource.java
new file mode 100644
index 0000000..9def50f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DriverInstancePropertySource.java
@@ -0,0 +1,287 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ * 				 brianf - updated property descriptor to use createExecutableExtension
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.Iterator;
+
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.drivers.IDriverInstancePropertyDescriptor;
+import org.eclipse.datatools.connectivity.drivers.IPropertySet;
+import org.eclipse.datatools.connectivity.drivers.models.OverrideTemplateDescriptor;
+import org.eclipse.datatools.connectivity.drivers.models.TemplateDescriptor;
+import org.eclipse.datatools.connectivity.internal.ui.dialogs.ExceptionHandler;
+import org.eclipse.datatools.connectivity.internal.ui.drivers.DriverPropertyEditorDescriptor;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.views.properties.IPropertyDescriptor;
+import org.eclipse.ui.views.properties.IPropertySource;
+import org.eclipse.ui.views.properties.PropertyDescriptor;
+import org.eclipse.ui.views.properties.TextPropertyDescriptor;
+
+/**
+ * @author brianf
+ */
+public class DriverInstancePropertySource implements IPropertySource {
+
+	private static final String P_NAME = "name"; //$NON-NLS-1$
+	private static final String P_ID = "id"; //$NON-NLS-1$
+	private static final String P_VISIBLE = "visible"; //$NON-NLS-1$
+	private static final String P_CATEGORY = "category"; //$NON-NLS-1$
+	private static final String P_CUSTOM_PROPERTY_DESCRIPTOR = "customPropertyDescriptor"; //$NON-NLS-1$
+	
+	private DriverInstance mDI;
+	private TemplateDescriptor descriptor = null;
+	
+	// change listeners
+	private ListenerList changeListeners;
+
+	/**
+	 * Constructor
+	 * @param di - incoming driver instance
+	 */
+	public DriverInstancePropertySource(DriverInstance di) {
+		mDI = di;
+		this.descriptor = mDI.getTemplate();
+		changeListeners = new ListenerList();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.views.properties.IPropertySource#getEditableValue()
+	 */
+	public Object getEditableValue() {
+		return mDI;
+	}
+	
+	/*
+	 * Pass in an instance to work on
+	 * @param di
+	 */
+	public void setDriverInstance (DriverInstance di) {
+		mDI = di;
+		this.descriptor = mDI.getTemplate();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.views.properties.IPropertySource#getPropertyDescriptors()
+	 */
+	public IPropertyDescriptor[] getPropertyDescriptors() {
+		
+		ArrayList descList = new ArrayList();
+		
+		if (descriptor != null) {
+			IConfigurationElement[] props = descriptor.getProperties();
+			ArrayList list = new ArrayList();
+			OverrideTemplateDescriptor[] otds = 
+				OverrideTemplateDescriptor.getByDriverTemplate(descriptor.getId());
+			for (int i = 0; i < props.length; i++) {
+				String id = props[i].getAttribute(P_ID);
+				String visible = props[i].getAttribute(P_VISIBLE);
+				boolean remove = false;
+				if (otds != null && otds.length > 0) {
+					String temp =
+						otds[0].getPropertyVisibleFromId(id);
+					if (temp != null && temp.length() > 0)
+						visible = temp;
+					remove = otds[0].getPropertyRemoveFlagFromID(id);
+				}
+				boolean propvisible = true;
+				if (visible != null && visible.equalsIgnoreCase(Boolean.toString(false)))
+					propvisible = false;
+				if (propvisible && !remove)
+					list.add(props[i]);
+			}
+			if (list.size() > 0) {
+				Iterator iter = list.iterator();
+				while (iter.hasNext()) {
+					IConfigurationElement ice = (IConfigurationElement) iter.next();
+					String id = ice.getAttribute(P_ID);
+					String name = ice.getAttribute(P_NAME);
+					if (otds != null && otds.length > 0) {
+						String temp =
+							otds[0].getPropertyNameFromId(id);
+						if (temp != null && temp.length() > 0)
+							name = temp;
+					}
+					String ctceClass = ice.getAttribute(P_CUSTOM_PROPERTY_DESCRIPTOR);
+					DriverPropertyEditorDescriptor[] dpeds =
+						DriverPropertyEditorDescriptor.getByDriverTemplateAndProperty(descriptor.getId(), id);
+					if (dpeds != null && dpeds.length > 0) {
+						ctceClass = dpeds[0].getCustomPropertyEditor();
+						ice = dpeds[0].getElement();
+					}
+					if (otds != null && otds.length > 0) {
+						String temp =
+							otds[0].getPropertyCustomPropDescriptorFromId(id);
+						if (temp != null && temp.length() > 0)
+							ctceClass = temp;
+					}
+					String category = ice.getAttribute(P_CATEGORY);
+					if (otds != null && otds.length > 0) {
+						String temp =
+							otds[0].getPropertyCategoryFromId(id);
+						if (temp != null && temp.length() > 0)
+							category = temp;
+					}
+					if (category == null) {
+						category = ConnectivityUIPlugin.getDefault().getResourceString("properties.category.general"); //$NON-NLS-1$
+					}
+					if (ctceClass != null) {
+						if (ctceClass != null) {
+							try {
+								PropertyDescriptor pd = (PropertyDescriptor) ice.createExecutableExtension(P_CUSTOM_PROPERTY_DESCRIPTOR);
+								
+								if (category != null) {
+									pd.setCategory(category);
+								}
+								
+								if (pd instanceof IDriverInstancePropertyDescriptor ) {
+									((IDriverInstancePropertyDescriptor)pd).setDriverInstance(this.mDI);
+								}
+								
+								descList.add(pd);
+							} catch (SecurityException e) {
+								ExceptionHandler.showException(new Shell(), 
+										ConnectivityUIPlugin.getDefault().getResourceString("PropertyDescriptor.error.title"), //$NON-NLS-1$
+										e.getLocalizedMessage(), e);
+								e.printStackTrace();
+							} catch (IllegalArgumentException e) {
+								ExceptionHandler.showException(new Shell(), 
+										ConnectivityUIPlugin.getDefault().getResourceString("PropertyDescriptor.error.title"), //$NON-NLS-1$
+										e.getLocalizedMessage(), e);
+								e.printStackTrace();
+							} catch (CoreException e ) {
+								ExceptionHandler.showException(new Shell(), 
+										ConnectivityUIPlugin.getDefault().getResourceString("PropertyDescriptor.error.title"), //$NON-NLS-1$
+										e.getLocalizedMessage(), e);
+								e.printStackTrace();
+							}
+						}
+					}
+					else {
+						TextPropertyDescriptor tpd = new TextPropertyDescriptor(id, name);
+						if (category != null) {
+							tpd.setCategory(category);
+						}
+						descList.add(tpd);
+					}
+				}
+			}
+			if (descList.size() > 0) {
+				IPropertyDescriptor[] pdArray = (IPropertyDescriptor[]) descList.toArray(new IPropertyDescriptor[descList.size()]);
+				Arrays.sort(pdArray, new Comparator(){
+
+					public int compare(Object o1, Object o2) {
+						IPropertyDescriptor pd1 = (IPropertyDescriptor) o1;
+						IPropertyDescriptor pd2 = (IPropertyDescriptor) o2;
+						return pd1.getDisplayName().compareTo(pd2.getDisplayName());
+					}});
+				return pdArray;
+			}
+		}
+
+		return new IPropertyDescriptor[0];
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.views.properties.IPropertySource#getPropertyValue(java.lang.Object)
+	 */
+	public Object getPropertyValue(Object id) {
+		if (descriptor != null) {
+			String idStr = (String) id;
+			IPropertySet propSet = mDI.getPropertySet();
+			String propval = propSet.getBaseProperties()
+					.getProperty(idStr);
+			if (propval != null && propval.length() > 0) {
+				return propval;
+			}
+		}
+		return ""; //$NON-NLS-1$
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.views.properties.IPropertySource#isPropertySet(java.lang.Object)
+	 */
+	public boolean isPropertySet(Object id) {
+		return true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.views.properties.IPropertySource#resetPropertyValue(java.lang.Object)
+	 */
+	public void resetPropertyValue(Object id) {
+		// Do nothing
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.views.properties.IPropertySource#setPropertyValue(java.lang.Object,
+	 *      java.lang.Object)
+	 */
+	public void setPropertyValue(Object id, Object value) {
+		String strid = (String) id;
+		if (this.mDI.getPropertySet() != null) {
+			this.mDI.getPropertySet().getBaseProperties().setProperty(strid, (String) value);
+			fireChangedEvent(this);
+		}
+	}
+	
+	/*
+	 * If we changed, fire a changed event.
+	 * 
+	 * @param source
+	 */
+	private void fireChangedEvent(Object source) {
+		ChangeEvent e = new ChangeEvent(source);
+		// inform any listeners of the resize event
+		Object[] listeners = this.changeListeners.getListeners();
+		for (int i = 0; i < listeners.length; ++i) {
+			((ChangeListener) listeners[i]).stateChanged(e);
+		}
+	}
+
+	/**
+	 * Add a change listener
+	 * 
+	 * @param listener
+	 */
+	public void addChangeListener(ChangeListener listener) {
+		this.changeListeners.add(listener);
+	}
+
+	/**
+	 * Remove a change listener.
+	 * 
+	 * @param listener
+	 */
+	public void removeChangeListener(ChangeListener listener) {
+		this.changeListeners.remove(listener);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DriverListCombo.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DriverListCombo.java
new file mode 100644
index 0000000..c6ce796
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DriverListCombo.java
@@ -0,0 +1,1132 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2010 Sybase, Inc. and others
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ *         IBM Corporation - defect fix #213266
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Properties;
+
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.drivers.DriverManager;
+import org.eclipse.datatools.connectivity.drivers.DriverMgmtMessages;
+import org.eclipse.datatools.connectivity.drivers.DriverValidator;
+import org.eclipse.datatools.connectivity.drivers.IDriverMgmtConstants;
+import org.eclipse.datatools.connectivity.drivers.IPropertySet;
+import org.eclipse.datatools.connectivity.drivers.PropertySetImpl;
+import org.eclipse.datatools.connectivity.drivers.models.CategoryDescriptor;
+import org.eclipse.datatools.connectivity.drivers.models.TemplateDescriptor;
+import org.eclipse.datatools.connectivity.internal.ui.dialogs.DriverDialog;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.DecorationOverlayIcon;
+import org.eclipse.jface.viewers.IDecoration;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.accessibility.AccessibleAdapter;
+import org.eclipse.swt.accessibility.AccessibleEvent;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+import com.ibm.icu.util.StringTokenizer;
+
+/**
+ * Composite that provides a drop-down list of available drivers as well as a
+ * button to launch the Driver Management dialog to manage those drivers.
+ * 
+ * @author brianf
+ */
+public class DriverListCombo {
+
+	// ui pieces
+	private Composite mPanel;
+	private Combo mComboList;
+	private Label mLabel;
+	private String mLabelText;
+	private String mCategoryId;
+	private String mErrorMessage;
+	private String mInitialDriverName;
+	private boolean mNullDriverValid = true;
+	private String mFilter = null;
+	private boolean isReadOnly = false;
+
+	// show the label?
+	private boolean mShowLabel = true;
+
+	// change listeners
+	private ListenerList changeListeners;
+
+	private Image mDriverImage = null;
+	private Image mDriverWithPlusImage = null;
+	private Image mChangeImage = null;
+
+	private static ImageDescriptor PLUS = null;
+
+	private static ImageDescriptor ARROW = null;
+
+	private static ImageDescriptor CHANGE = null;
+
+	private Image mArrowImage = null;
+
+	// show the new driver button?
+	private boolean mShowNewDriverButton = true;
+	private boolean mShowGenericDriverButton = false;
+	private boolean mShowMenu = false;
+	private boolean mShowEditButton = true;
+	private ToolItem mTBButtonEdit;
+	private ToolItem item1;
+	private ToolItem item2;
+	private ToolItem item3;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param parent
+	 * @param style
+	 */
+	public DriverListCombo() {
+		this(false);
+	}
+	
+	public DriverListCombo(boolean isReadOnly) {
+		this.changeListeners = new ListenerList();
+		this.isReadOnly = isReadOnly;
+	}
+
+	/**
+	 * Return the error message back to the consumer.
+	 * 
+	 * @return
+	 */
+	public String getErrorMessage() {
+		return this.mErrorMessage;
+	}
+
+	/**
+	 * Set the initial driver name to be selected.
+	 * 
+	 * @param driverName
+	 */
+	public void setInitialDriverName(String driverName) {
+		this.mInitialDriverName = driverName;
+	}
+
+	/**
+	 * Return the initial driver name to be selected.
+	 * 
+	 * @return
+	 */
+	public String getInitialDriverName() {
+		return this.mInitialDriverName;
+	}
+
+	/**
+	 * Set the category to display in the drop-down.
+	 * 
+	 * @param category
+	 */
+	public void setCategory(String category) {
+		this.mCategoryId = category;
+	}
+
+	/**
+	 * Return the category.
+	 * 
+	 * @return
+	 */
+	public String getCategory() {
+		return this.mCategoryId;
+	}
+
+	public void setFilter(String filter) {
+		this.mFilter = filter;
+	}
+
+	public String getFilter() {
+		return this.mFilter;
+	}
+
+	/**
+	 * Indicate whether the default label should be shown or not.
+	 * 
+	 * @param flag
+	 */
+	public void setShowLabel(boolean flag) {
+		this.mShowLabel = flag;
+	}
+	public void setShowNewDriverButton(boolean flag) {
+		this.mShowNewDriverButton = flag;
+	}
+	public void setShowGenericDriverButton(boolean flag) {
+		this.mShowGenericDriverButton = flag;
+	}
+	public void setShowMenu(boolean flag) {
+		this.mShowMenu = flag;
+	}
+	public void setShowEditButton(boolean flag) {
+		this.mShowEditButton = flag;
+	}
+
+	/**
+	 * Indicate the state of the "show label" flag
+	 * 
+	 * @return
+	 */
+	public boolean getShowLabel() {
+		return this.mShowLabel;
+	}
+
+	/**
+	 * Change the text of the label
+	 * 
+	 * @param label
+	 */
+	public void setLabelText(String label) {
+		this.mLabelText = label;
+	}
+
+	/**
+	 * Return the text of the label
+	 * 
+	 * @return
+	 */
+	public String getLabelText() {
+		return this.mLabelText;
+	}
+
+	public boolean getNullDriverIsValid() {
+		return this.mNullDriverValid;
+	}
+
+	public void setNullDriverIsValid(boolean flag) {
+		this.mNullDriverValid = flag;
+	}
+
+	/**
+	 * Create the UI contents
+	 * 
+	 * @param parent
+	 */
+	public void createContents(Composite parent) {
+		makeImages();
+		this.mPanel = new Composite(parent, SWT.NULL);
+
+		GridData vdata = new GridData(GridData.FILL_HORIZONTAL);
+		this.mPanel.setLayoutData(vdata);
+
+		GridLayout gridLayout = new GridLayout();
+		gridLayout.numColumns = 3;
+		gridLayout.marginWidth = 0;
+		gridLayout.marginHeight = 0;
+		this.mPanel.setLayout(gridLayout);
+
+		if (this.mShowLabel) {
+			this.mLabel = new Label(this.mPanel, SWT.NONE);
+			GridData ldata = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+			ldata.horizontalSpan = 1;
+			this.mLabel.setLayoutData(ldata);
+			this.mLabel.setText(this.mLabelText);
+		}
+
+		this.mComboList = new Combo(this.mPanel, SWT.DROP_DOWN | SWT.BORDER
+				| SWT.READ_ONLY);
+		this.mComboList.setEnabled(!isReadOnly);
+		GridData cdata = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);
+		cdata.widthHint = 20;
+		this.mComboList.setLayoutData(cdata);
+
+		ComboSelectionListener listener = new ComboSelectionListener(this);
+
+		this.mComboList.addModifyListener(listener);
+		this.mComboList.addSelectionListener(listener);
+		
+		Composite tempComposite = new Composite(this.mPanel, SWT.NONE);
+		tempComposite.setLayout(new FillLayout());
+
+		if (mShowNewDriverButton) {
+		    final ToolBar toolBar = new ToolBar(tempComposite/*this.mPanel*/, SWT.FLAT);
+		    /*final ToolItem*/ item1 = new ToolItem(toolBar, SWT.PUSH);
+		    item1.setImage(mDriverWithPlusImage);
+		    item1.setToolTipText(DriverMgmtMessages.getString("DriverListCombo.button.newdriver")); //$NON-NLS-1$
+			item1
+				.addSelectionListener(new NewButtonSelectionChangedListener(
+					this));
+			item1.setEnabled(!isReadOnly);
+			toolBar.getAccessible().addAccessibleListener(
+					new AccessibleAdapter() {			
+						public void getName(AccessibleEvent e) {
+							e.result = DriverMgmtMessages.getString("DriverListCombo.button.newdriver"); //$NON-NLS-1$
+						}
+					}
+			);		
+		}
+		
+		if (mShowGenericDriverButton) {
+		    final ToolBar toolBar = new ToolBar(tempComposite/*this.mPanel*/, SWT.FLAT);
+		    /*final ToolItem*/ item2 = new ToolItem(toolBar, SWT.PUSH);
+		    item2.setImage(mDriverImage);
+		    item2.setToolTipText(DriverMgmtMessages.getString("DriverListCombo.button.generic")); //$NON-NLS-1$
+			item2.
+				addSelectionListener(new NewGenericSelectionChangedListener(
+						this));
+			item2.setEnabled(!isReadOnly);
+			toolBar.getAccessible().addAccessibleListener(
+					new AccessibleAdapter() {			
+						public void getName(AccessibleEvent e) {
+							e.result = DriverMgmtMessages.getString("DriverListCombo.button.generic"); //$NON-NLS-1$
+						}
+					}
+			);		
+		}
+		
+		if (mShowEditButton) {
+		    final ToolBar toolBar = new ToolBar(tempComposite/*this.mPanel*/, SWT.FLAT);
+			mTBButtonEdit = new ToolItem(toolBar, SWT.PUSH);
+			mTBButtonEdit.setImage(mChangeImage);
+			mTBButtonEdit.setToolTipText(DriverMgmtMessages.getString("DriverListCombo.EditDriverButton.tooltip")); //$NON-NLS-1$
+			mTBButtonEdit.
+				addSelectionListener(new EditButtonSelectionChangedListener(
+					this));
+			toolBar.getAccessible().addAccessibleListener(
+					new AccessibleAdapter() {			
+						public void getName(AccessibleEvent e) {
+							e.result = DriverMgmtMessages.getString("DriverListCombo.EditDriverButton.tooltip"); //$NON-NLS-1$
+						}
+					}
+			);		
+		}
+
+		if (mShowMenu) {
+		    final ToolBar toolBar = new ToolBar(tempComposite/*this.mPanel*/, SWT.FLAT);
+			final Menu menu = new Menu (this.mPanel.getShell(), SWT.POP_UP);
+			MenuItem mitem1 = new MenuItem(menu, SWT.PUSH);
+			mitem1.setText(DriverMgmtMessages.getString("DriverListCombo.button.newdriver")); //$NON-NLS-1$
+			mitem1.addSelectionListener(new NewButtonSelectionChangedListener(this));
+			MenuItem mitem2 = new MenuItem(menu, SWT.PUSH);
+			mitem2.setText(DriverMgmtMessages.getString("DriverListCombo.button.generic")); //$NON-NLS-1$
+			mitem2.addSelectionListener(new NewGenericSelectionChangedListener(this));
+
+			/*final ToolItem*/ item3 = new ToolItem(toolBar, SWT.PUSH );
+			item3.setImage(mArrowImage);
+		    item3.addListener (SWT.Selection, new Listener () {
+		        public void handleEvent (org.eclipse.swt.widgets.Event event) {
+	                Rectangle rect = item3.getBounds ();
+	                Point pt = new Point (rect.x, rect.y + rect.height);
+	                pt = toolBar.toDisplay (pt);
+	                menu.setLocation (pt.x, pt.y);
+	                menu.setVisible (true);
+		        }
+		    });
+		    item3.setEnabled(!isReadOnly);
+		}
+		refreshCombo();
+	}
+
+	/**
+	 * Return the combo list
+	 * 
+	 * @return
+	 */
+	public Combo getCombo() {
+		return this.mComboList;
+	}
+
+	/**
+	 * If we changed, fire a changed event.
+	 * 
+	 * @param source
+	 */
+	private void fireChangedEvent(Object source) {
+		ChangeEvent e = new ChangeEvent(source);
+		// inform any listeners of the resize event
+		Object[] listeners = this.changeListeners.getListeners();
+		for (int i = 0; i < listeners.length; ++i) {
+			((ChangeListener) listeners[i]).stateChanged(e);
+		}
+	}
+
+	/**
+	 * Add a change listener
+	 * 
+	 * @param listener
+	 */
+	public void addChangeListener(ChangeListener listener) {
+		this.changeListeners.add(listener);
+	}
+
+	/**
+	 * Remove a change listener.
+	 * 
+	 * @param listener
+	 */
+	public void removeChangeListener(ChangeListener listener) {
+		this.changeListeners.remove(listener);
+	}
+
+	/**
+	 * Parse the list of jars
+	 * 
+	 * @param str_list
+	 * @return
+	 */
+	protected String[] parseString(String str_list) {
+		return parseString(str_list, IDriverMgmtConstants.PATH_DELIMITER);
+	}
+
+	protected String[] parseString(String str_list, String token) {
+		StringTokenizer tk = new StringTokenizer(str_list, token);
+		String[] pieces = new String[tk.countTokens()];
+		int index = 0;
+		while (tk.hasMoreTokens())
+			pieces[index++] = tk.nextToken();
+		return pieces;
+	}
+
+	/**
+	 * Return the instance of the selected driver.
+	 * 
+	 * @return
+	 */
+	private IPropertySet getSelectedDriver() {
+		int keyIndex = this.mComboList.getSelectionIndex();
+		if (keyIndex > -1) {
+			String keyString = this.mComboList.getItem(keyIndex);
+			if (this.mComboList.getData(keyString) != null) {
+				IPropertySet ps = (IPropertySet) this.mComboList
+						.getData(keyString);
+				return ps;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Return a Driver Instance from the combo.
+	 * 
+	 * @return
+	 */
+	public DriverInstance getSelectedDriverInstance() {
+		IPropertySet ps = getSelectedDriver();
+		if (ps != null)
+			return new DriverInstance(ps);
+		return null;
+	}
+
+	/**
+	 * Return the name of the selected driver.
+	 * 
+	 * @return
+	 */
+	public String getSelectedDriverName() {
+		IPropertySet ps = getSelectedDriver();
+		if (ps != null) {
+			return ps.getName();
+		}
+		return null;
+	}
+
+	/**
+	 * Return the ID of the selected driver.
+	 * 
+	 * @return
+	 */
+	public String getSelectedDriverID() {
+		IPropertySet ps = getSelectedDriver();
+		if (ps != null) {
+			return ps.getID();
+		}
+		return null;
+	}
+
+	/**
+	 * Set the initial selection
+	 * 
+	 * @param name
+	 */
+	public void setSelection(String name) {
+		List list = Arrays.asList(this.mComboList.getItems());
+		if (list.contains(name)) {
+			this.mComboList.select(list.indexOf(name));
+			this.mComboList.setText(name);
+		}
+	}
+
+	public void setSelectionToID(String id) {
+		String driverName = null;
+		List list = Arrays.asList(this.mComboList.getItems());
+		for (int i = 0; i < list.size(); i++) {
+			String keyString = DriverListCombo.this.mComboList.getItem(i);
+			if (DriverListCombo.this.mComboList.getData(keyString) != null) {
+				IPropertySet ps = (IPropertySet) DriverListCombo.this.mComboList
+						.getData(keyString);
+				if (ps.getID().equals(id)) {
+					driverName = keyString;
+					break;
+				}
+			}
+		}
+		if (driverName != null) {
+			this.mComboList.select(list.indexOf(driverName));
+			this.mComboList.setText(driverName);
+		}
+	}
+	
+	public void selectFirstItem() {
+		if (this.mComboList.getItemCount() > 0) {
+			this.mComboList.select(0);
+		}
+		else {
+			if (DriverListCombo.this.mNullDriverValid)
+				DriverListCombo.this.mErrorMessage = null;
+			else
+				DriverListCombo.this.mErrorMessage = DriverMgmtMessages
+						.getString("DriverValidator.msg.no_driver_selected"); //$NON-NLS-1$
+		}
+
+		fireChangedEvent(this.mComboList.getParent());
+	}
+
+	private boolean passesFilter(TemplateDescriptor template, IPropertySet pset) {
+		boolean rtn = true;
+		if (this.mFilter != null && template != null && pset != null) {
+			String[] filters = parseString(this.mFilter, ","); //$NON-NLS-1$
+			for (int i = 0; i < filters.length; i++) {
+				String filter = filters[i];
+				String args[] = parseString(filter, "="); //$NON-NLS-1$
+				String arg = args[0].trim();
+				String value = args[1].trim();
+				if (arg.equals("id")) { //$NON-NLS-1$
+					if (pset.getID().indexOf(value) == -1) {
+						rtn = false;
+						break;
+					}
+				}
+				else if (arg.equals("name")) { //$NON-NLS-1$
+					if (pset.getName().indexOf(value) == -1) {
+						rtn = false;
+						break;
+					}
+				}
+				else if (arg.equals("templateID")) { //$NON-NLS-1$
+					if (template.getId().indexOf(value) == -1) {
+						rtn = false;
+						break;
+					}
+				}
+				else if (arg.equals("templateIDStartsWith")) { //$NON-NLS-1$
+					if (!template.getId().startsWith(value)) {
+						rtn = false;
+						break;
+					}
+				}
+				else if (arg.equals("templateIDEndsWith")) { //$NON-NLS-1$
+					if (!template.getId().endsWith(value)) {
+						rtn = false;
+						break;
+					}
+				}
+				else if (arg.equals("templateIDContains")) { //$NON-NLS-1$
+					if (template.getId().indexOf(value) == -1) {
+						rtn = false;
+						break;
+					}
+				}
+			}
+		}
+		return rtn;
+	}
+
+	private class TemplateDescriptorComparator implements Comparator {
+
+		public int compare(Object arg0, Object arg1) {
+			TemplateDescriptor td1 = (TemplateDescriptor) arg0;
+			TemplateDescriptor td2 = (TemplateDescriptor) arg1;
+			return td1.getName().compareToIgnoreCase(td2.getName());
+		}
+		
+	}
+	
+	private class PropertySetComparator implements Comparator {
+
+		public int compare(Object arg0, Object arg1) {
+			IPropertySet ps1 = (IPropertySet) arg0;
+			IPropertySet ps2 = (IPropertySet) arg1;
+			return ps1.getName().compareToIgnoreCase(ps2.getName());
+		}
+		
+	}
+
+	/**
+	 * Refresh the combo list
+	 */
+	public void refreshCombo() {
+
+		getCombo().removeAll();
+
+		IPropertySet[] psets = new IPropertySet[0];
+		IPropertySet[] comboPsets = new IPropertySet[0];
+		DriverInstance[] dilist = DriverManager.getInstance().getAllDriverInstances();
+		if (dilist != null && dilist.length > 0) {
+			psets = new IPropertySet[dilist.length];
+			for (int i = 0; i< psets.length; i++) {
+				psets[i] = dilist[i].getPropertySet();
+			}
+		}
+
+		if (this.mCategoryId != null) {
+			CategoryDescriptor category = CategoryDescriptor
+					.getCategoryDescriptor(this.mCategoryId);
+			List templates = new ArrayList();
+			if (category == null) {
+				CategoryDescriptor[] categories = CategoryDescriptor.getRootCategories();
+				for (int index = 0, count = categories.length; index < count; ++index) {
+					populateAssociatedDriverTypes(categories[index],templates);
+				}
+			}
+			else {
+				populateAssociatedDriverTypes(category,templates);
+			}
+			TemplateDescriptorComparator comparator = 
+				new TemplateDescriptorComparator();
+			Object[] templatesArray = templates.toArray();
+			Arrays.sort(templatesArray, comparator);
+			Arrays.sort(psets, new PropertySetComparator());
+			
+			ArrayList listForCombo = new ArrayList();
+			for (int i = 0; i < templatesArray.length; i++)  {
+				TemplateDescriptor template = (TemplateDescriptor) templatesArray[i];
+				for (int j = 0; j < psets.length; j++) {
+					IPropertySet pset = psets[j];
+					String driverType = pset.getBaseProperties().getProperty(
+							IDriverMgmtConstants.PROP_DEFN_TYPE); //$NON-NLS-1$
+					if (driverType.equals(template.getId())) {
+						if (passesFilter(template, pset)) {
+							listForCombo.add(pset);
+						}
+					}
+				}
+			}
+			comboPsets = (IPropertySet[]) listForCombo.toArray(new IPropertySet[listForCombo.size()]);
+		}
+		else {
+			comboPsets = psets;
+		}
+		
+		if (comboPsets != null && comboPsets.length > 0) {
+			PropertySetComparator comparator = 
+				new PropertySetComparator();
+			Arrays.sort(comboPsets, comparator);
+			for (int i = 0; i < comboPsets.length; i++) {
+				IPropertySet pset = comboPsets[i];
+				getCombo().add(pset.getName());
+				getCombo().setData(pset.getName(), pset);
+			}
+		}
+
+		if (mTBButtonEdit != null) // && !isReadOnly)
+			mTBButtonEdit.setEnabled(false);
+		String text = getCombo().getText();
+		if (text != null && text.trim().length() > 0) {
+			for (int i = 0; i < getCombo().getItemCount(); i++) {
+				if (getCombo().getItem(i).equals(text)) {
+					getCombo().select(i);
+					break;
+				}
+			}
+		}
+		else {
+			if (getCombo().getItemCount() > 0) { // && !isReadOnly) {
+				if (mTBButtonEdit != null){				
+					mTBButtonEdit.setEnabled(true);
+				}
+			}
+		}
+	}
+	
+	private void populateAssociatedDriverTypes(CategoryDescriptor category,List templates) {
+		templates.addAll(category.getAssociatedDriverTypes());
+		for (Iterator it = category.getChildCategories().iterator(); it.hasNext();) {
+			populateAssociatedDriverTypes((CategoryDescriptor)it.next(),templates);
+		}
+	}
+
+	/**
+	 * Listener for combo selection events
+	 * 
+	 * @author brianf
+	 */
+	private class ComboSelectionListener implements SelectionListener,
+			ModifyListener {
+
+		private DriverListCombo parent;
+
+		public ComboSelectionListener(DriverListCombo combo) {
+			this.parent = combo;
+		}
+
+		public void widgetSelected(SelectionEvent e) {
+			int keyIndex = DriverListCombo.this.mComboList.getSelectionIndex();
+			if (keyIndex == -1 && mTBButtonEdit != null) // && !isReadOnly)
+				mTBButtonEdit.setEnabled(false);
+			else if (keyIndex > -1 && mTBButtonEdit != null) // && !isReadOnly)
+				mTBButtonEdit.setEnabled(true);
+			if (keyIndex > -1) {
+				
+				String keyString = DriverListCombo.this.mComboList
+						.getItem(keyIndex);
+				if (DriverListCombo.this.mComboList.getData(keyString) != null) {
+					IPropertySet ps = (IPropertySet) DriverListCombo.this.mComboList
+							.getData(keyString);
+					if (ps != null) {
+						String driverType = ps.getBaseProperties().getProperty(
+								IDriverMgmtConstants.PROP_DEFN_TYPE); //$NON-NLS-1$
+						if (driverType != null) {
+							TemplateDescriptor template = TemplateDescriptor
+									.getDriverTemplateDescriptor(driverType);
+							if (template != null) {
+								DriverValidator validator = new DriverValidator(
+										template, ps);
+								DriverListCombo.this.mErrorMessage = null;
+								if (!validator.isValid(false)) {
+									DriverListCombo.this.mErrorMessage = validator
+											.getMessage();
+								}
+							}
+						}
+					}
+				}
+			}
+			else {
+				if (DriverListCombo.this.mNullDriverValid)
+					DriverListCombo.this.mErrorMessage = null;
+				else
+					DriverListCombo.this.mErrorMessage = DriverMgmtMessages
+							.getString("DriverValidator.msg.no_driver_selected"); //$NON-NLS-1$
+			}
+
+			fireChangedEvent(this.parent);
+		}
+
+		public void widgetDefaultSelected(SelectionEvent e) {
+			widgetSelected(e);
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
+		 */
+		public void modifyText(ModifyEvent e) {
+			String keyString = DriverListCombo.this.mComboList.getText();
+			if (keyString.length() > 0) {
+				if (DriverListCombo.this.mComboList.getData(keyString) != null) {
+					IPropertySet ps = (IPropertySet) DriverListCombo.this.mComboList
+							.getData(keyString);
+					if (ps != null) {
+						String driverType = ps.getBaseProperties().getProperty(
+								IDriverMgmtConstants.PROP_DEFN_TYPE); //$NON-NLS-1$
+						if (driverType != null) {
+							TemplateDescriptor template = TemplateDescriptor
+									.getDriverTemplateDescriptor(driverType);
+							if (template != null) {
+								DriverValidator validator = new DriverValidator(
+										template, ps);
+								DriverListCombo.this.mErrorMessage = null;
+								if (!validator.isValid(false)) {
+									DriverListCombo.this.mErrorMessage = validator
+											.getMessage();
+								}
+							}
+						}
+					}
+				}
+			}
+			else {
+				if (DriverListCombo.this.mNullDriverValid)
+					DriverListCombo.this.mErrorMessage = null;
+				else
+					DriverListCombo.this.mErrorMessage = DriverMgmtMessages
+							.getString("DriverValidator.msg.no_driver_selected"); //$NON-NLS-1$
+			}
+			fireChangedEvent(this.parent);
+		}
+
+	}
+
+	/**
+	 * Listener for edit button clicks events
+	 * 
+	 * @author brianf
+	 */
+	public class NewButtonSelectionChangedListener implements
+			SelectionListener {
+
+		private DriverListCombo parent;
+
+		public NewButtonSelectionChangedListener(DriverListCombo combo) {
+			this.parent = combo;
+		}
+
+		public void widgetSelected(SelectionEvent e) {
+			Shell newShell = parent.getCombo().getShell();
+			DriverDialog dlg;
+			if (DriverListCombo.this.mCategoryId != null) {
+				dlg = new DriverDialog(newShell,
+						DriverListCombo.this.mCategoryId);
+			}
+			else {
+				dlg = new DriverDialog(newShell);
+			}
+
+			int rtn = dlg.open();
+			if (rtn != Window.OK)
+				return;
+
+			String tempStore = DriverListCombo.this.mComboList.getText();
+			
+			if (dlg.getPropertySet() != null) {
+				DriverManager.getInstance().addDriverInstance(dlg.getPropertySet());
+//				saveChanges();
+			}
+			
+			refreshCombo();
+
+			boolean fireEvent = false;
+			if (dlg.getSelectedDefinition() != null) {
+				fireEvent = true;
+				String driverName = dlg.getSelectedDefinition().getName();
+				String[] itemList = DriverListCombo.this.mComboList.getItems();
+				if (itemList.length > 0) {
+					for (int i = 0; i < itemList.length; i++) {
+						String item = itemList[i];
+						IPropertySet temp = (IPropertySet) DriverListCombo.this.mComboList
+								.getData(item);
+						if (temp.getID().equals(
+								dlg.getSelectedDefinition().getID())) {
+							DriverListCombo.this.mComboList.setText(driverName);
+							DriverListCombo.this.mComboList.select(i);
+
+							String driverType = temp
+									.getBaseProperties()
+									.getProperty(
+											IDriverMgmtConstants.PROP_DEFN_TYPE); //$NON-NLS-1$
+							if (driverType != null) {
+								TemplateDescriptor template = TemplateDescriptor
+										.getDriverTemplateDescriptor(driverType);
+								if (template != null) {
+									DriverValidator validator = new DriverValidator(
+											template, temp);
+									DriverListCombo.this.mErrorMessage = null;
+									if (!validator.isValid(false)) {
+										DriverListCombo.this.mErrorMessage = validator
+												.getMessage();
+									}
+								}
+							}
+							break;
+						}
+					}
+				}
+			}
+			else
+				DriverListCombo.this.mComboList.setText(tempStore);
+
+			int keyIndex = DriverListCombo.this.mComboList.getSelectionIndex();
+			if (keyIndex == -1 && mTBButtonEdit != null) // && !isReadOnly)
+				mTBButtonEdit.setEnabled(false);
+			else if (keyIndex > -1 && mTBButtonEdit != null) // && !isReadOnly)
+				mTBButtonEdit.setEnabled(true);
+			
+			if (fireEvent)
+				fireChangedEvent(this.parent);
+		}
+
+		public void widgetDefaultSelected(SelectionEvent e) {
+			widgetSelected(e);
+		}
+	}
+
+	public class NewGenericSelectionChangedListener implements
+		SelectionListener {
+
+		private DriverListCombo parent;
+
+		public NewGenericSelectionChangedListener(DriverListCombo combo) {
+			this.parent = combo;
+		}
+
+		public void widgetSelected(SelectionEvent e) {
+			Shell newShell = parent.getCombo().getShell();
+			DriverDialog dlg;
+			if (DriverListCombo.this.mCategoryId != null) {
+				dlg = new DriverDialog(newShell,
+						DriverListCombo.this.mCategoryId);
+			}
+			else {
+				dlg = new DriverDialog(newShell);
+			}
+			dlg.setHideDriverList(true);
+			dlg.setInitialTemplate("org.eclipse.datatools.connectivity.db.generic.genericDriverTemplate"); //$NON-NLS-1$
+
+			int rtn = dlg.open();
+			if (rtn != Window.OK)
+				return;
+
+			String tempStore = DriverListCombo.this.mComboList.getText();
+
+			if (dlg.getPropertySet() != null) {
+				DriverManager.getInstance().addDriverInstance(dlg.getPropertySet());
+//				saveChanges();
+			}
+
+			refreshCombo();
+
+			boolean fireEvent = false;
+			if (dlg.getSelectedDefinition() != null) {
+				fireEvent = true;
+				String driverName = dlg.getSelectedDefinition().getName();
+				String[] itemList = DriverListCombo.this.mComboList.getItems();
+				if (itemList.length > 0) {
+					for (int i = 0; i < itemList.length; i++) {
+						String item = itemList[i];
+						IPropertySet temp = (IPropertySet) DriverListCombo.this.mComboList
+						.getData(item);
+						if (temp.getID().equals(
+								dlg.getSelectedDefinition().getID())) {
+							DriverListCombo.this.mComboList.setText(driverName);
+							DriverListCombo.this.mComboList.select(i);
+
+							String driverType = temp
+							.getBaseProperties()
+							.getProperty(
+									IDriverMgmtConstants.PROP_DEFN_TYPE); //$NON-NLS-1$
+							if (driverType != null) {
+								TemplateDescriptor template = TemplateDescriptor
+								.getDriverTemplateDescriptor(driverType);
+								if (template != null) {
+									DriverValidator validator = new DriverValidator(
+											template, temp);
+									DriverListCombo.this.mErrorMessage = null;
+									if (!validator.isValid(false)) {
+										DriverListCombo.this.mErrorMessage = validator
+										.getMessage();
+									}
+								}
+							}
+							break;
+						}
+					}
+				}
+			}
+			else
+				DriverListCombo.this.mComboList.setText(tempStore);
+
+			int keyIndex = DriverListCombo.this.mComboList.getSelectionIndex();
+			if (keyIndex == -1 && mTBButtonEdit != null) // && !isReadOnly)
+				mTBButtonEdit.setEnabled(false);
+			else if (keyIndex > -1 && mTBButtonEdit != null) // && !isReadOnly)
+				mTBButtonEdit.setEnabled(true);
+
+			if (fireEvent)
+				fireChangedEvent(this.parent);
+		}
+
+		public void widgetDefaultSelected(SelectionEvent e) {
+			widgetSelected(e);
+		}
+	}
+
+	/**
+	 * Listener for edit button clicks events
+	 * 
+	 * @author brianf
+	 */
+	public class EditButtonSelectionChangedListener implements
+			SelectionListener {
+
+		private DriverListCombo parent;
+
+		public EditButtonSelectionChangedListener(DriverListCombo combo) {
+			this.parent = combo;
+		}
+
+		public void widgetSelected(SelectionEvent e) {
+			Shell newShell = parent.getCombo().getShell();
+			DriverDialog dlg;
+			if (DriverListCombo.this.mCategoryId != null) {
+				dlg = new DriverDialog(newShell,
+						DriverListCombo.this.mCategoryId);
+			}
+			else {
+				dlg = new DriverDialog(newShell);
+			}
+			dlg.setIsEditable(!isReadOnly);
+			if (parent.getSelectedDriver() == null) 
+				return;
+			
+			IPropertySet copy = duplicatePropertySet(parent.getSelectedDriver());
+			dlg.setPropertySet(copy);
+			dlg.setEditMode(true);
+			
+			int rtn = dlg.open();
+			if (rtn != Window.OK)
+				return;
+
+			copy = dlg.getPropertySet();
+			copyPropertySet(copy, parent.getSelectedDriver());
+			DriverManager.getInstance().removeDriverInstance(parent.getSelectedDriver().getID());
+			
+			/*
+			 * This call to garbage collect is to try and reclaim
+			 * the classloader held by the last instance of the 
+			 * DriverInstance that is being dropped and re-added.
+			 * Note that if the class is in use (i.e. any profile
+			 * is connected that uses the referenced driver), it 
+			 * won't be unloaded and subsequent connections will 
+			 * fail.
+			 */
+			System.gc();
+			
+			DriverManager.getInstance().addDriverInstance(copy);
+
+			refreshCombo();
+
+			boolean fireEvent = false;
+			if (dlg.getSelectedDefinition() != null) {
+				fireEvent = true;
+				String driverName = dlg.getSelectedDefinition().getName();
+				String[] itemList = DriverListCombo.this.mComboList.getItems();
+				if (itemList.length > 0) {
+					for (int i = 0; i < itemList.length; i++) {
+						String item = itemList[i];
+						IPropertySet temp = (IPropertySet) DriverListCombo.this.mComboList
+								.getData(item);
+						if (temp.getID().equals(
+								dlg.getSelectedDefinition().getID())) {
+							DriverListCombo.this.mComboList.setText(driverName);
+							DriverListCombo.this.mComboList.select(i);
+
+							String driverType = temp
+									.getBaseProperties()
+									.getProperty(
+											IDriverMgmtConstants.PROP_DEFN_TYPE); //$NON-NLS-1$
+							if (driverType != null) {
+								TemplateDescriptor template = TemplateDescriptor
+										.getDriverTemplateDescriptor(driverType);
+								if (template != null) {
+									DriverValidator validator = new DriverValidator(
+											template, temp);
+									DriverListCombo.this.mErrorMessage = null;
+									if (!validator.isValid(false)) {
+										DriverListCombo.this.mErrorMessage = validator
+												.getMessage();
+									}
+								}
+							}
+							break;
+						}
+					}
+				}
+			}
+			else
+				DriverListCombo.this.mComboList.setText(copy.getName());
+
+			int keyIndex = DriverListCombo.this.mComboList.getSelectionIndex();
+			if (keyIndex == -1 && mTBButtonEdit != null) // && !isReadOnly)
+				mTBButtonEdit.setEnabled(false);
+			else if (keyIndex > -1 && mTBButtonEdit != null) // && !isReadOnly)
+				mTBButtonEdit.setEnabled(true);
+
+			if (fireEvent)
+				fireChangedEvent(this.parent);
+		}
+
+		public void widgetDefaultSelected(SelectionEvent e) {
+			widgetSelected(e);
+		}
+	}
+
+	public void dispose() {
+		if (this.mDriverImage != null)
+			this.mDriverImage.dispose();
+		if (this.mDriverWithPlusImage != null)
+			this.mDriverWithPlusImage.dispose();
+		if (this.mChangeImage != null)
+			this.mChangeImage.dispose();
+		if (this.mArrowImage != null)
+			this.mArrowImage.dispose();
+	}
+	
+	private void makeImages() {
+		mDriverImage = DriverImages.DRIVER.createImage();
+
+		PLUS = AbstractUIPlugin
+			.imageDescriptorFromPlugin(ConnectivityUIPlugin.getDefault()
+				.getBundle().getSymbolicName(), "icons/add_obj2.gif"); //$NON-NLS-1$
+
+		DecorationOverlayIcon icon = new DecorationOverlayIcon(mDriverImage, PLUS, IDecoration.TOP_RIGHT);
+		mDriverWithPlusImage = icon.createImage();
+
+		ARROW = AbstractUIPlugin
+			.imageDescriptorFromPlugin(ConnectivityUIPlugin.getDefault()
+					.getBundle().getSymbolicName(), "icons/view_menu.gif"); //$NON-NLS-1$
+		
+		mArrowImage = ARROW.createImage();
+
+		CHANGE = AbstractUIPlugin
+			.imageDescriptorFromPlugin(ConnectivityUIPlugin.getDefault()
+					.getBundle().getSymbolicName(), "icons/change_obj.gif"); //$NON-NLS-1$
+		
+		mChangeImage = CHANGE.createImage();
+	}
+
+	private IPropertySet duplicatePropertySet ( IPropertySet pset ) {
+		IPropertySet newPset = new PropertySetImpl(pset.getName(), pset.getID());
+		if (pset.getBaseProperties().size() > 0) {
+			Properties newProps = new Properties();
+			newPset.setBaseProperties(newProps);
+			newPset.getBaseProperties().putAll(pset.getBaseProperties());
+		}
+		return newPset;
+	}
+
+	private void copyPropertySet ( IPropertySet fromPset, IPropertySet topset ) {
+		topset.setID(fromPset.getID());
+		topset.setName(fromPset.getName());
+		if (topset.getBaseProperties().size() > 0) {
+			topset.getBaseProperties().putAll(fromPset.getBaseProperties());
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DriverPropertySourceProvider.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DriverPropertySourceProvider.java
new file mode 100644
index 0000000..cc40108
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DriverPropertySourceProvider.java
@@ -0,0 +1,111 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.drivers.IPropertySet;
+import org.eclipse.datatools.connectivity.drivers.models.TemplateDescriptor;
+import org.eclipse.ui.views.properties.IPropertySource;
+import org.eclipse.ui.views.properties.IPropertySourceProvider;
+
+/**
+ * @author brianf
+ *
+ */
+public class DriverPropertySourceProvider implements IPropertySourceProvider, ChangeListener {
+
+	// Cached driver instance and property source
+	private DriverInstance di = null;
+	private DriverInstancePropertySource dips = null;
+	
+	// change listeners
+	private static ListenerList changeListeners  = new ListenerList();
+
+	/**
+	 * Constructor 
+	 */
+	public DriverPropertySourceProvider() {
+	}
+	
+	/**
+	 * Constructor 
+	 * @param propSet
+	 * @param descriptor
+	 */
+	public DriverPropertySourceProvider ( IPropertySet propSet, TemplateDescriptor descriptor ) {
+		this();
+		di = new DriverInstance(descriptor, propSet);
+		dips = new DriverInstancePropertySource(this.di);
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.views.properties.IPropertySourceProvider#getPropertySource(java.lang.Object)
+	 */
+	public IPropertySource getPropertySource(Object object) {
+		
+		if (object instanceof DriverInstance) {
+			dips.removeChangeListener(this);
+			dips.setDriverInstance((DriverInstance) object);
+			dips.addChangeListener(this);
+			return dips;
+		}
+		else if (object instanceof IPropertySet) {
+			dips.removeChangeListener(this);
+			dips.setDriverInstance(this.di);
+			dips.addChangeListener(this);
+			return dips;
+		}
+		return null;
+	}
+
+	/*
+	 * If we changed, fire a changed event.
+	 * 
+	 * @param source
+	 */
+	private void fireChangedEvent(Object source) {
+		ChangeEvent e = new ChangeEvent(source);
+		// inform any listeners of the resize event
+		Object[] listeners = DriverPropertySourceProvider.changeListeners.getListeners();
+		for (int i = 0; i < listeners.length; ++i) {
+			((ChangeListener) listeners[i]).stateChanged(e);
+		}
+	}
+
+	/**
+	 * Add a change listener
+	 * 
+	 * @param listener
+	 */
+	public void addChangeListener(ChangeListener listener) {
+		DriverPropertySourceProvider.changeListeners.add(listener);
+	}
+
+	/**
+	 * Remove a change listener.
+	 * 
+	 * @param listener
+	 */
+	public void removeChangeListener(ChangeListener listener) {
+		DriverPropertySourceProvider.changeListeners.remove(listener);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.swing.event.ChangeListener#stateChanged(javax.swing.event.ChangeEvent)
+	 */
+	public void stateChanged(ChangeEvent e) {
+		fireChangedEvent(this);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DriverTableFilter.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DriverTableFilter.java
new file mode 100644
index 0000000..5734147
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DriverTableFilter.java
@@ -0,0 +1,38 @@
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.drivers.IPropertySet;
+import org.eclipse.datatools.connectivity.drivers.models.TemplateDescriptor;
+import org.eclipse.datatools.connectivity.internal.ui.DriverTreeFilter;
+import org.eclipse.jface.viewers.Viewer;
+
+public class DriverTableFilter extends DriverTreeFilter {
+
+	public DriverTableFilter() {
+		super();
+	}
+	
+	public DriverTableFilter ( boolean flag ) {
+		super(flag);
+	}
+
+	public boolean select(Viewer viewer, Object parentElement, Object element) {
+		if (element instanceof IPropertySet) {
+			IPropertySet propSet = (IPropertySet) element;
+			DriverInstance di = new DriverInstance(propSet);
+			TemplateDescriptor td = di.getTemplate();
+			if (td != null) {
+				if (this.okTemplateIds.contains(td.getId()))
+					return true;
+				if (this.okCategoryIds.contains(td.getParentCategory()))
+					return true;
+				if (td.getParent() != null && td.getParent().getParent() != null) {
+					if (this.okCategoryIds.contains(td.getParent().getParentCategory()))
+						return true;
+				}
+			}
+			return false;
+		}
+		return super.select(viewer, parentElement, element);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DriverTreeContentProvider.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DriverTreeContentProvider.java
new file mode 100644
index 0000000..9797fc3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DriverTreeContentProvider.java
@@ -0,0 +1,241 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.drivers.DriverManager;
+import org.eclipse.datatools.connectivity.drivers.IDriverMgmtConstants;
+import org.eclipse.datatools.connectivity.drivers.IPropertySet;
+import org.eclipse.datatools.connectivity.drivers.XMLFileManager;
+import org.eclipse.datatools.connectivity.drivers.models.CategoryDescriptor;
+import org.eclipse.datatools.connectivity.drivers.models.DriversProvider;
+import org.eclipse.datatools.connectivity.drivers.models.TemplateDescriptor;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+/**
+ * Content provider for the driver tree.
+ * 
+ * Note that this is used on both the preference page, the management dialog,
+ * and the add driver dialog. In the first two cases, it is used to display
+ * categories and driver instances. In the last case, it is used to display
+ * categories and driver templates.
+ * 
+ * @author brianf
+ */
+public class DriverTreeContentProvider implements ITreeContentProvider {
+
+	// local list of driver instances
+	private List psetsList;
+
+	// local stash of file modified date
+	private String modified;
+
+	// flag indicating whether to show templates or not
+	private boolean mShowDriverTemplates = false;
+
+	/**
+	 * Constructor
+	 */
+	public DriverTreeContentProvider() {
+		super();
+	}
+
+	/**
+	 * Constructor with flag to show templates
+	 * 
+	 * @param showDriverTemplates
+	 */
+	public DriverTreeContentProvider(boolean showDriverTemplates) {
+		this();
+		this.mShowDriverTemplates = showDriverTemplates;
+	}
+
+	/**
+	 * Return a list of driver instances
+	 * 
+	 * @return
+	 */
+	public List getDriverInstances() {
+		return this.psetsList;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+	 */
+	public void dispose() {
+		if (this.psetsList != null)
+			this.psetsList.clear();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
+	 */
+	public Object[] getChildren(Object element) {
+		List children = new ArrayList();
+		if (element instanceof DriversProvider) {
+			children = Arrays.asList(CategoryDescriptor.getRootCategories());
+		}
+		if (element instanceof CategoryDescriptor) {
+			CategoryDescriptor descriptor = (CategoryDescriptor) element;
+			children = descriptor.getChildCategories();
+			if (descriptor.getAssociatedDriverTypes().size() > 0) {
+				if (this.mShowDriverTemplates) {
+					children.addAll(descriptor.getAssociatedDriverTypes());
+				}
+				else {
+					List driverTypes = descriptor.getAssociatedDriverTypes();
+					Iterator iter = driverTypes.iterator();
+					while (iter.hasNext()) {
+						TemplateDescriptor template = (TemplateDescriptor) iter
+								.next();
+						children.addAll(Arrays.asList(getDriverDefn(template
+								.getId())));
+					}
+				}
+			}
+		}
+		else if (element instanceof TemplateDescriptor) {
+			if (!this.mShowDriverTemplates) {
+				TemplateDescriptor descriptor = (TemplateDescriptor) element;
+				children = Arrays.asList(getDriverDefn(descriptor.getId()));
+			}
+		}
+		return children.toArray();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+	 */
+	public Object[] getElements(Object element) {
+		List children = new ArrayList();
+		if (element instanceof DriversProvider) {
+			children = Arrays.asList(CategoryDescriptor.getRootCategories());
+		}
+		else if (element instanceof CategoryDescriptor) {
+			CategoryDescriptor descriptor = (CategoryDescriptor) element;
+			children = descriptor.getChildCategories();
+			children.addAll(descriptor.getAssociatedDriverTypes());
+			Iterator iter = descriptor.getAssociatedDriverTypes().iterator();
+			while (iter.hasNext()) {
+				TemplateDescriptor template = (TemplateDescriptor) iter
+						.next();
+				children.addAll(Arrays.asList(getDriverDefn(template
+						.getId())));
+			}
+		}
+		return children.toArray();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
+	 */
+	public Object getParent(Object element) {
+		if (element instanceof DriversProvider)
+			return null;
+		else if (element instanceof CategoryDescriptor) {
+			CategoryDescriptor descriptor = (CategoryDescriptor) element;
+			return descriptor.getParent();
+		}
+		else if (element instanceof TemplateDescriptor) {
+			TemplateDescriptor descriptor = (TemplateDescriptor) element;
+			return descriptor.getParent();
+		}
+		else if (element instanceof IPropertySet) {
+			IPropertySet propset = (IPropertySet) element;
+			DriverInstance di = DriverManager.getInstance().getDriverInstanceByID(propset.getID());
+			if (di != null)
+				return di.getTemplate();
+		}
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
+	 */
+	public boolean hasChildren(Object element) {
+		Object[] children = getChildren(element);
+		if (children != null && children.length > 0)
+			return true;
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
+	 *      java.lang.Object, java.lang.Object)
+	 */
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		this.psetsList = null;
+	}
+
+	/*
+	 * Return a list of driver instances based on a category id
+	 */
+	private Object[] getDriverDefn(String categoryID) {
+
+		XMLFileManager.setFileName(IDriverMgmtConstants.DRIVER_FILE);
+		String newModified = XMLFileManager.getFileDateTimeStamp();
+		if (this.psetsList == null || (modified == null && newModified != null)
+				|| ((this.modified != null) && !(this.modified
+						.equals(newModified)))) {
+
+			DriverManager.getInstance().resetDefaultInstances();
+
+			this.modified = XMLFileManager.getFileDateTimeStamp();
+
+			try {
+				this.psetsList = new ArrayList();
+				IPropertySet[] psets = XMLFileManager.loadPropertySets();
+				if (psets.length > 0) {
+					java.util.List tempList = Arrays.asList(psets);
+					this.psetsList.addAll(tempList);
+				}
+			}
+			catch (CoreException e) {
+				ConnectivityUIPlugin.getDefault().log(e);
+				return new Object[0];
+			}
+		}
+
+		List children = new ArrayList();
+		if (this.psetsList.size() > 0) {
+			for (int i = 0; i < this.psetsList.size(); i++) {
+				IPropertySet pset = (IPropertySet) this.psetsList.get(i);
+				Properties props = pset.getBaseProperties();
+				String category = props
+						.getProperty(IDriverMgmtConstants.PROP_DEFN_TYPE); //$NON-NLS-1$
+				if (category.equals(categoryID)) {
+					children.add(pset);
+				}
+			}
+		}
+		return children.toArray();
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DriverTreeFilter.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DriverTreeFilter.java
new file mode 100644
index 0000000..94c8b30
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DriverTreeFilter.java
@@ -0,0 +1,184 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import java.util.ArrayList;
+
+import org.eclipse.datatools.connectivity.drivers.IPropertySet;
+import org.eclipse.datatools.connectivity.drivers.models.CategoryDescriptor;
+import org.eclipse.datatools.connectivity.drivers.models.TemplateDescriptor;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+
+/**
+ * Filters the tree to only show those categories or templates you want.
+ * 
+ * @author brianf
+ */
+public class DriverTreeFilter extends ViewerFilter {
+
+	// applicable category and driver template IDs
+	private String mCategoryId;
+	private CategoryDescriptor mCategoryDescriptor;
+	private String mDriverTemplateId;
+
+	// Lists of OK categories and templates
+	protected ArrayList okCategoryIds;
+	protected ArrayList okTemplateIds;
+	
+	private boolean parentIsOk = true;
+
+	/**
+	 * Constructor
+	 */
+	public DriverTreeFilter() {
+		super();
+	}
+	
+	public DriverTreeFilter( boolean flag ) {
+		super();
+		parentIsOk = flag;
+	}
+
+	/**
+	 * Set the category id
+	 * 
+	 * @param categoryId
+	 */
+	public void setCategoryId(String categoryId) {
+		this.mCategoryId = categoryId;
+		mCategoryDescriptor = CategoryDescriptor
+				.getCategoryDescriptor(categoryId);
+		refreshOkList();
+	}
+	
+	public String getCategoryId() {
+		return this.mCategoryId;
+	}
+	
+	public CategoryDescriptor getCategoryDescriptor() {
+		return this.mCategoryDescriptor;
+	}
+
+	/**
+	 * Set the driver template id
+	 * 
+	 * @param driverTypeId
+	 */
+	public void setDriverTemplateId(String driverTemplateId) {
+		this.mDriverTemplateId = driverTemplateId;
+	}
+
+	/*
+	 * Refresh the OK lists
+	 */
+	private void refreshOkList() {
+		this.okCategoryIds = new ArrayList();
+		this.okTemplateIds = new ArrayList();
+		if (this.mCategoryId != null) {
+			this.okCategoryIds = new ArrayList();
+			this.okCategoryIds.add(this.mCategoryId);
+
+			CategoryDescriptor category = CategoryDescriptor
+					.getCategoryDescriptor(this.mCategoryId);
+			if (category != null) {
+				if (category.getParentCategory() != null && parentIsOk ) {
+					CategoryDescriptor parent = CategoryDescriptor
+							.getCategoryDescriptor(category.getParentCategory());
+					this.okCategoryIds.add(parent.getId());
+					while (parent.getParentCategory() != null) {
+						parent = CategoryDescriptor
+								.getCategoryDescriptor(parent
+										.getParentCategory());
+						this.okCategoryIds.add(parent.getId());
+					}
+				}
+				else {
+					addChildren(category);
+				}
+			}
+		}
+		else if (this.mDriverTemplateId != null) {
+			this.okTemplateIds.add(this.mDriverTemplateId);
+
+			TemplateDescriptor template = TemplateDescriptor
+					.getDriverTemplateDescriptor(this.mDriverTemplateId);
+			if (template != null) {
+				if (template.getParentCategory() != null) {
+					CategoryDescriptor parent = CategoryDescriptor
+							.getCategoryDescriptor(template.getParentCategory());
+					this.okCategoryIds.add(parent.getId());
+					while (parent.getParentCategory() != null) {
+						parent = CategoryDescriptor
+								.getCategoryDescriptor(parent
+										.getParentCategory());
+						this.okCategoryIds.add(parent.getId());
+					}
+				}
+			}
+		}
+	}
+
+	/*
+	 * Add child categories for the given parent
+	 */
+	private void addChildren(CategoryDescriptor parent) {
+		Object children[] = parent.getChildCategories().toArray();
+		if (children.length > 0) {
+			for (int i = 0; i < children.length; i++) {
+				CategoryDescriptor child = (CategoryDescriptor) children[i];
+				this.okCategoryIds.add(child.getId());
+				addChildren(child);
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer,
+	 *      java.lang.Object, java.lang.Object)
+	 */
+	public boolean select(Viewer viewer, Object parentElement, Object element) {
+
+		if (element instanceof TemplateDescriptor) {
+			for (CategoryDescriptor cd = ((TemplateDescriptor)element).getParent(); cd != null; cd = cd.getParent()) {
+				if (cd.getId().equals(mCategoryId)) {
+					return true;
+				}
+			}
+		}
+		else if (element instanceof CategoryDescriptor) {
+			for (CategoryDescriptor cd = mCategoryDescriptor; cd != null; cd = cd
+					.getParent()) {
+				if (cd.getId().equals(((CategoryDescriptor)element).getId())) {
+					return true;
+				}
+			}
+			for (CategoryDescriptor cd = (CategoryDescriptor) element; cd != null; cd = cd
+					.getParent()) {
+				if (cd.getId().equals(mCategoryId)) {
+					return true;
+				}
+			}
+		}
+		else if (element instanceof IPropertySet) {
+			if (this.mDriverTemplateId != null) {
+				TemplateDescriptor template = (TemplateDescriptor) element;
+				if (this.okTemplateIds.contains(template.getId()))
+					return true;
+			}
+			return true;
+		}
+
+		return false;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DriverTreeLabelProvider.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DriverTreeLabelProvider.java
new file mode 100644
index 0000000..c864665
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DriverTreeLabelProvider.java
@@ -0,0 +1,175 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import java.util.Vector;
+
+import org.eclipse.datatools.connectivity.drivers.DriverValidator;
+import org.eclipse.datatools.connectivity.drivers.IDriverMgmtConstants;
+import org.eclipse.datatools.connectivity.drivers.IPropertySet;
+import org.eclipse.datatools.connectivity.drivers.models.CategoryDescriptor;
+import org.eclipse.datatools.connectivity.drivers.models.DriversProvider;
+import org.eclipse.datatools.connectivity.drivers.models.TemplateDescriptor;
+import org.eclipse.jface.viewers.ILabelDecorator;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * Label provider and decorator for the driver tree
+ * 
+ * @author brianf
+ */
+public class DriverTreeLabelProvider extends LabelProvider implements
+		ILabelDecorator {
+
+	// Images
+	private Image mNullImage = DriverImages.NULLIMAGE.createImage();
+	private Image mDriverImage = DriverImages.DRIVER.createImage();
+	private Image mCategoryImage = DriverImages.CATEGORY.createImage();
+    
+	// List of images
+	private static DriverImages driverImage_ = new DriverImages();
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+	 */
+	public void dispose() {
+		// no resources to dispose
+		this.mNullImage.dispose();
+		this.mDriverImage.dispose();
+		this.mCategoryImage.dispose();
+		this.mNullImage = null;
+		this.mDriverImage = null;
+		this.mCategoryImage = null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
+	 */
+	public Image getImage(Object element) {
+		Image returnImage = null;
+        if (element instanceof DriversProvider)
+			returnImage = null;
+		else if (element instanceof CategoryDescriptor) {
+			returnImage = this.mCategoryImage;
+		}
+		else if (element instanceof TemplateDescriptor) {
+			returnImage = this.mDriverImage;
+		}
+		else if (element instanceof IPropertySet) {
+			returnImage = this.mDriverImage;
+		}
+
+		return returnImage;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
+	 */
+	public String getText(Object element) {
+		if (element instanceof DriversProvider)
+			return null;
+		else if (element instanceof CategoryDescriptor) {
+			return ((CategoryDescriptor) element).getName();
+		}
+		else if (element instanceof TemplateDescriptor) {
+			return ((TemplateDescriptor) element).getName();
+		}
+		else if (element instanceof IPropertySet) {
+			return ((IPropertySet) element).getName();
+		}
+		return ""; //$NON-NLS-1$
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ILabelDecorator#decorateImage(org.eclipse.swt.graphics.Image,
+	 *      java.lang.Object)
+	 */
+	public Image decorateImage(Image image, Object element) {
+		if (!(element instanceof IPropertySet))
+			return null;
+
+		IPropertySet instance = (IPropertySet) element;
+		String driverType = instance.getBaseProperties().getProperty(
+				IDriverMgmtConstants.PROP_DEFN_TYPE);
+		TemplateDescriptor template = TemplateDescriptor
+				.getDriverTemplateDescriptor(driverType);
+		DriverValidator validator = new DriverValidator(template, instance);
+		if (validator.isValid())
+			return null;
+
+		Vector decoratorImageKeys = new Vector();
+		decoratorImageKeys.add(DriverImages.ERROR_KEY);
+
+		if (decoratorImageKeys.size() != 0) {
+			image = drawIconImage(image, decoratorImageKeys);
+			return image;
+		}
+		// The resource need not be decorated
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ILabelDecorator#decorateText(java.lang.String,
+	 *      java.lang.Object)
+	 */
+	public String decorateText(String text, Object element) {
+		return null;
+	}
+
+	/**
+	 * Function to draw icon image
+	 * 
+	 * @param baseImage base image of the object resource
+	 * @param decoratorImageKeys vector of image keys
+	 * 
+	 * @return icon image with which the resource is to be decorated
+	 */
+	private Image drawIconImage(Image baseImage, Vector decoratorImageKeys) {
+		Image image;
+		OverlayImageIcon overlayIcon = new OverlayImageIcon(baseImage,
+				driverImage_, decoratorImageKeys);
+		image = overlayIcon.getImage();
+		return image;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.LabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
+	 */
+	public void addListener(ILabelProviderListener listener) {
+		// nothing
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.LabelProvider#isLabelProperty(java.lang.Object, java.lang.String)
+	 */
+	public boolean isLabelProperty(Object element, String property) {
+		return false;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.LabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
+	 */
+	public void removeListener(ILabelProviderListener listener) {
+		// nothing
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DriverTreeSorter.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DriverTreeSorter.java
new file mode 100644
index 0000000..97a5d0f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DriverTreeSorter.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import org.eclipse.jface.viewers.ViewerSorter;
+
+/**
+ * Default sorter for the tree.
+ * 
+ * @author brianf
+ */
+public class DriverTreeSorter extends ViewerSorter {
+
+	public DriverTreeSorter() {
+		super();
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DropListViewer.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DropListViewer.java
new file mode 100644
index 0000000..a9d9ac7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/DropListViewer.java
@@ -0,0 +1,185 @@
+/*******************************************************************************
+ * Copyright (c) 2003-2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Widget;
+
+/**
+ * @author rcernich
+ *
+ * To change this generated comment edit the template variable "typecomment":
+ * Window>Preferences>Java>Templates.
+ * To enable and disable the creation of type comments go to
+ * Window>Preferences>Java>Code Generation.
+ */
+public class DropListViewer extends StructuredViewer {
+
+	/**
+	 * This viewer's list control.
+	 */
+	private Combo mCombo;
+
+	/**
+	 * A list of viewer elements (element type: <code>Object</code>).
+	 */
+	private List listMap = new ArrayList();
+
+	public DropListViewer(Composite parent, int style) {
+		mCombo = new Combo(parent, style | SWT.READ_ONLY);
+		hookControl(mCombo);
+	}
+
+	/**
+	 * Creates a list viewer on a newly-created Combo control under the given parent.
+	 * The Combo control is created using the SWT style bits <code>DROP_DOWN</code> and <code>READ_ONLY</code>.
+	 * The viewer has no input, no content provider, a default label provider, 
+	 * no sorter, and no filters.
+	 *
+	 * @param parent the parent control
+	 */
+	public DropListViewer(Composite parent) {
+		this(parent, SWT.BORDER | SWT.DROP_DOWN);
+	}
+
+	public Combo getCombo() {
+		return mCombo;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.StructuredViewer#doFindInputItem(Object)
+	 */
+	protected Widget doFindInputItem(Object element) {
+		if (element != null && element.equals(getRoot()))
+			return getCombo();
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.StructuredViewer#doFindItem(Object)
+	 */
+	protected Widget doFindItem(Object element) {
+		if (element != null && listMap.contains(element)) {
+			return getCombo();
+		}
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.StructuredViewer#doUpdateItem(Widget, Object, boolean)
+	 */
+	protected void doUpdateItem(Widget item, Object element, boolean fullMap) {
+		if (element != null) {
+			int ix = listMap.indexOf(element);
+			if (ix >= 0) {
+				ILabelProvider labelProvider =
+					(ILabelProvider) getLabelProvider();
+				mCombo.setItem(ix, labelProvider.getText(element));
+			}
+		}
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.StructuredViewer#getSelectionFromWidget()
+	 */
+	protected List getSelectionFromWidget() {
+		int index = getCombo().getSelectionIndex();
+		ArrayList list = new ArrayList();
+		if (index >= 0) {
+			Object o = listMap.get(index);
+			if (o != null) {
+				list.add(o);
+			}
+		}
+		return list;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.StructuredViewer#internalRefresh(Object)
+	 */
+	protected void internalRefresh(Object element) {
+		if (element == null || element.equals(getRoot())) {
+			Combo combo = getCombo();
+			Object[] children = getSortedChildren(getRoot());
+			String labels[] = new String[children.length];
+			List selection = getSelectionFromWidget();
+
+			combo.setRedraw(false);
+			listMap.clear();
+			combo.removeAll();
+			unmapAllElements();
+
+			for (int index = 0, count = children.length;
+				index < count;
+				++index) {
+				Object o = children[index];
+				labels[index] =
+					((ILabelProvider) getLabelProvider()).getText(o);
+				listMap.add(o);
+				mapElement(o, combo);
+			}
+
+			combo.setItems(labels);
+
+			combo.setRedraw(true);
+			setSelectionToWidget(selection, false);
+		}
+		else {
+			doUpdateItem(getCombo(), element, true);
+		}
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.StructuredViewer#reveal(Object)
+	 */
+	public void reveal(Object element) {
+		// Empty
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.StructuredViewer#setSelectionToWidget(List, boolean)
+	 */
+	protected void setSelectionToWidget(List l, boolean reveal) {
+		Combo combo = getCombo();
+		if (l == null || l.size() == 0) {
+			combo.clearSelection();
+		}
+		else {
+			combo.select(listMap.indexOf(l.get(0)));
+		}
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.Viewer#getControl()
+	 */
+	public Control getControl() {
+		return mCombo;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.Viewer#inputChanged(Object, Object)
+	 */
+	protected void inputChanged(Object input, Object oldInput) {
+		internalRefresh(getRoot());
+		setSelectionToWidget((List) null, false);
+
+		super.inputChanged(input, oldInput);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/IHelpConstants.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/IHelpConstants.java
new file mode 100644
index 0000000..851f295
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/IHelpConstants.java
@@ -0,0 +1,168 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brandow - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+
+/**
+ * @author brandow, brianf
+ */
+public interface IHelpConstants {
+	
+	/**
+	 * TPS_helpKey_constants_for_plug-in: org.eclipse.datatools.connectivity.ui
+	 */
+
+	/*
+	 * CONTEXT_ID_CP_PROPERTY_PAGE =
+	 * Basic profile name/description/auto-connect property page
+	 */
+	public static final String CONTEXT_ID_CP_PROPERTY_PAGE = 
+			"CONTEXT_ID_CP_PROPERTY_PAGE"; //$NON-NLS-1$
+
+	/*
+	 * CONTEXT_ID_CP_WIZARD_PAGE =
+	 * wizard selection page in New Connection Profile wizard
+	 */
+	public static final String CONTEXT_ID_CP_WIZARD_PAGE = 
+			"CONTEXT_ID_CP_WIZARD_PAGE"; //$NON-NLS-1$
+
+	/*
+	 * CONTEXT_ID_INTRO_WIZARD_PAGE =
+	 * Basic intro page for new connection profile wizard
+	 */
+	public static final String CONTEXT_ID_INTRO_WIZARD_PAGE = 
+			"CONTEXT_ID_INTRO_WIZARD_PAGE"; //$NON-NLS-1$
+
+	/*
+	 * CONTEXT_ID_CONNECTION_PROFILE_SUMMARY_PAGE =
+	 * Basic summary page for new connection profile wizard
+	 */
+	public static final String CONTEXT_ID_CONNECTION_PROFILE_SUMMARY_PAGE = 
+			"CONTEXT_ID_CONNECTION_PROFILE_SUMMARY_PAGE"; //$NON-NLS-1$
+
+	/*
+	 * CONTEXT_ID_NEW_CONNECTION_PROFILE_PAGE =
+	 * Basic profile name/description/auto-connect wizard page
+	 */
+	public static final String CONTEXT_ID_NEW_CONNECTION_PROFILE_PAGE = 
+			"CONTEXT_ID_NEW_CONNECTION_PROFILE_PAGE"; //$NON-NLS-1$
+
+	/*
+	 * CONTEXT_ID_PROFILE_DETAILS_PROPERTY_PAGE =
+	 * Basic profile name/description/auto-connect property page
+	 */
+	public static final String CONTEXT_ID_PROFILE_DETAILS_PROPERTY_PAGE = 
+			"CONTEXT_ID_PROFILE_DETAILS_PROPERTY_PAGE"; //$NON-NLS-1$
+
+	/*
+	 * CONTEXT_ID_DRIVER_DEFINITION_DIALOG =
+	 * Driver Definition Dialog, which is the dialog equivalent to the
+	 * functionality on the Driver Preferences page. This dialog is 
+	 * available from the driver drop-down on most profile wizard/property
+	 * pages.
+	 */
+	public static final String CONTEXT_ID_DRIVER_DEFINITION_DIALOG = 
+		"CONTEXT_ID_DRIVER_DEFINITION_DIALOG"; //$NON-NLS-1$
+
+	/*
+	 * CONTEXT_ID_EDIT_DRIVER_DIALOG =
+	 * Edit Driver Dialog, allows users to edit a driver definition's name,
+	 * description, and properties
+	 */
+	public static final String CONTEXT_ID_EDIT_DRIVER_DIALOG = 
+		"CONTEXT_ID_EDIT_DRIVER_DIALOG"; //$NON-NLS-1$
+
+	/*
+	 * CONTEXT_ID_NEW_DRIVER_DIALOG =
+	 * New Driver Dialog, allows users to select a driver category and create
+	 * a new driver (Edit Driver Dialog typically follows it once a category
+	 * is selected)
+	 */
+	public static final String CONTEXT_ID_NEW_DRIVER_DIALOG = 
+		"CONTEXT_ID_NEW_DRIVER_DIALOG"; //$NON-NLS-1$
+
+	/*
+	 * CONTEXT_ID_EXPORT_PROFILES_DIALOG =
+	 * Export Profiles Dialog
+	 */
+	public static final String CONTEXT_ID_EXPORT_PROFILES_DIALOG = 
+		"CONTEXT_ID_EXPORT_PROFILES_DIALOG"; //$NON-NLS-1$
+
+	/*
+	 * CONTEXT_ID_IMPORT_PROFILES_DIALOG =
+	 * Import Profiles Dialog
+	 */
+	public static final String CONTEXT_ID_IMPORT_PROFILES_DIALOG = 
+		"CONTEXT_ID_IMPORT_PROFILES_DIALOG"; //$NON-NLS-1$
+
+	/*
+	 * CONTEXT_ID_DRIVER_PREFERENCES =
+	 * Driver Preferences page (see New Driver Dialog)
+	 */
+	public static final String CONTEXT_ID_DRIVER_PREFERENCES = 
+		"CONTEXT_ID_DRIVER_PREFERENCES"; //$NON-NLS-1$
+
+	/*
+	 * CONTEXT_ID_PROFILE_VERSION_PROPERTIES =
+	 * Version Property Page for connection profiles, shows the version info
+	 * that comes back from the connection
+	 */
+	public static final String CONTEXT_ID_PROFILE_VERSION_PROPERTIES = 
+		"CONTEXT_ID_PROFILE_VERSION_PROPERTIES"; //$NON-NLS-1$
+
+	/*
+	 * CONTEXT_ID_NEW_CP_WIZARD =
+	 * New Connection Profile Wizard
+	 */
+	public static final String CONTEXT_ID_NEW_CP_WIZARD = 
+		"CONTEXT_ID_NEW_CP_WIZARD"; //$NON-NLS-1$
+
+	/*
+	 * CONTEXT_ID_NEW_REPOSITORY_WIZARD =
+	 * New Repository Wizard
+	 */
+	public static final String CONTEXT_ID_NEW_REPOSITORY_WIZARD = 
+		"CONTEXT_ID_NEW_REPOSITORY_WIZARD"; //$NON-NLS-1$
+
+	/*
+	 * CONTEXT_ID_NEW_CONNECTION_PROFILE_WIZARD =
+	 * New Connection Profile Wizard (overridden by each individual type of profile)
+	 */
+	public static final String CONTEXT_ID_NEW_CONNECTION_PROFILE_WIZARD = 
+		"CONTEXT_ID_NEW_CONNECTION_PROFILE_WIZARD"; //$NON-NLS-1$
+
+	/*
+	 * CONTEXT_ID_CONNECTIVITY_PREFERENCE_PAGE =
+	 * Data Management->Connectivity preference page
+	 */
+	public static final String CONTEXT_ID_CONNECTIVITY_PREFERENCE_PAGE = 
+		"CONTEXT_ID_CONNECTIVITY_PREFERENCE_PAGE"; //$NON-NLS-1$
+
+	/*
+	 * GENERIC_DB_PROFILE_WIZARD_PAGE = the wizard page that collects SQL Model - JDBC Connection profile
+	 * details such as the JDBC url, user id, password, etc.
+	 */
+	public static final String GENERIC_DB_PROFILE_WIZARD_PAGE = 
+		"GENERIC_DB_PROFILE_WIZARD_PAGE"; //$NON-NLS-1$
+
+	/*
+	 * GENERIC_DB_PROFILE_PROPERTY_PAGE = the property page that collects SQL Model - JDBC Connection profile
+	 * details such as the JDBC url, user id, password, etc.
+	 */
+	public static final String GENERIC_DB_PROFILE_PROPERTY_PAGE = 
+		"GENERIC_DB_PROFILE_PROPERTY_PAGE"; //$NON-NLS-1$
+
+	/*
+	 * GENERIC_DB_PROFILE_WIZARD = the actual New SQL Model - JDBC Connection Profile wizard
+	 */
+	public static final String GENERIC_DB_PROFILE_WIZARD = 
+		"GENERIC_DB_PROFILE_WIZARD"; //$NON-NLS-1$
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/LocalRepositoryNode.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/LocalRepositoryNode.java
new file mode 100644
index 0000000..247e5c4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/LocalRepositoryNode.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.Platform;
+
+/**
+ * Placeholder node for local connection profile repository
+ * 
+ * @author rcernich
+ * 
+ * Created on Mar 22, 2007
+ */
+public class LocalRepositoryNode implements IAdaptable {
+
+	public Object getAdapter(Class adapter) {
+		if (adapter.isInstance(this)) {
+			return this;
+		}
+		return Platform.getAdapterManager().getAdapter(this, adapter);
+	}
+
+	public int hashCode() {
+		return 1;
+	}
+
+	public boolean equals(Object obj) {
+		return obj instanceof LocalRepositoryNode;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/OverlayImageIcon.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/OverlayImageIcon.java
new file mode 100644
index 0000000..7460fca
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/OverlayImageIcon.java
@@ -0,0 +1,146 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: balajik - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import java.util.Vector;
+
+import org.eclipse.jface.resource.CompositeImageDescriptor;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.graphics.Point;
+
+/**
+ * @author balajik
+ * 
+ * This class is used for overlaying image icons
+ * 
+ * This class was taken from the Eclipse article.
+ */
+public class OverlayImageIcon extends CompositeImageDescriptor {
+
+	/**
+	 * Base image of the object
+	 */
+	private Image baseImage_;
+
+	/**
+	 * Size of the base image
+	 */
+	private Point sizeOfImage_;
+
+	/**
+	 * Vector of image keys
+	 */
+	private Vector imageKey_;
+
+	/**
+	 * Demo Image instance
+	 */
+	private DriverImages driverImage_;
+
+	private static final int TOP_LEFT = 0;
+	private static final int TOP_RIGHT = 1;
+	private static final int BOTTOM_LEFT = 2;
+	private static final int BOTTOM_RIGHT = 3;
+
+	/**
+	 * Constructor for overlayImageIcon.
+	 */
+	public OverlayImageIcon(Image baseImage, DriverImages demoImage,
+							Vector imageKey) {
+		// Base image of the object
+		this.baseImage_ = baseImage;
+		// Demo Image Object
+		this.driverImage_ = demoImage;
+		this.imageKey_ = imageKey;
+		this.sizeOfImage_ = new Point(baseImage.getBounds().width, baseImage
+				.getBounds().height);
+	}
+
+	/**
+	 * @see org.eclipse.jface.resource.CompositeImageDescriptor#drawCompositeImage(int,
+	 *      int) DrawCompositeImage is called to draw the composite image.
+	 * 
+	 */
+	protected void drawCompositeImage(int arg0, int arg1) {
+		// Draw the base image
+		drawImage(this.baseImage_.getImageData(), 0, 0);
+		int[] locations = organizeImages();
+		for (int i = 0; i < this.imageKey_.size(); i++) {
+			ImageData imageData = this.driverImage_
+					.getImageData((String) this.imageKey_.get(i));
+			switch (locations[i]) {
+			// Draw on the top left corner
+			case TOP_LEFT:
+				drawImage(imageData, 0, 0);
+				break;
+
+			// Draw on top right corner
+			case TOP_RIGHT:
+				drawImage(imageData, this.sizeOfImage_.x - imageData.width, 0);
+				break;
+
+			// Draw on bottom left
+			case BOTTOM_LEFT:
+				drawImage(imageData, 0, this.sizeOfImage_.y - imageData.height);
+				break;
+
+			// Draw on bottom right corner
+			case BOTTOM_RIGHT:
+				drawImage(imageData, this.sizeOfImage_.x - imageData.width,
+						this.sizeOfImage_.y - imageData.height);
+				break;
+
+			}
+		}
+
+	}
+
+	/**
+	 * Organize the images. This function scans through the image key and finds
+	 * out the location of the images
+	 */
+	private int[] organizeImages() {
+		int[] locations = new int[this.imageKey_.size()];
+		String imageKeyValue;
+		for (int i = 0; i < this.imageKey_.size(); i++) {
+			imageKeyValue = (String) this.imageKey_.get(i);
+			if (imageKeyValue.equals(DriverImages.ERROR_KEY)) {
+				// Draw he lock icon in top left corner.
+				locations[i] = TOP_LEFT;
+			}
+			if (imageKeyValue.equals(DriverImages.WARNING_KEY)) //$NON-NLS-1$
+			{
+				// Draw dirty flag indicator in the top right corner
+				locations[i] = TOP_RIGHT;
+			}
+		}
+		return locations;
+	}
+
+	/**
+	 * @see org.eclipse.jface.resource.CompositeImageDescriptor#getSize() get
+	 *      the size of the object
+	 */
+	protected Point getSize() {
+		return this.sizeOfImage_;
+	}
+
+	/**
+	 * Get the image formed by overlaying different images on the base image
+	 * 
+	 * @return composite image
+	 */
+	public Image getImage() {
+		return createImage();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/ProfileImageDescriptor.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/ProfileImageDescriptor.java
new file mode 100644
index 0000000..84eb8f8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/ProfileImageDescriptor.java
@@ -0,0 +1,200 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.datatools.connectivity.ui.Messages;
+
+import com.ibm.icu.text.Collator;
+
+/**
+ * Represents a way to specify a profile image descriptor which is provided by the
+ * "org.eclipse.datatools.connectivity.ui.connectionProfileImage" extension point.
+ * 
+ * @author brianf
+ */
+public class ProfileImageDescriptor implements Comparable {
+
+	// extension details
+	public static final String PROFILE_IMAGE_TAG = "profileImage";//$NON-NLS-1$
+	private static final String EXTENSION_POINT_NAME = "connectionProfileImage"; //$NON-NLS-1$
+
+	// attributes
+	public static final String ATTR_ID = "profileID"; //$NON-NLS-1$
+	public static final String ATTR_ICON = "icon"; //$NON-NLS-1$
+
+	private URL mIconURL;
+
+	private static final ProfileImageDescriptor[] EMPTY = {};
+
+	// local list of driver templates
+	private static Map fgProfileImageDescriptors;
+
+	// local copy of configuration element
+	private IConfigurationElement fElement;
+	
+	/**
+	 * Creates a new driver property editor template descriptor for the given configuration
+	 * element.
+	 */
+	protected ProfileImageDescriptor(IConfigurationElement element) {
+		this.fElement = element;
+
+		/*
+		 * "An extension for extension-point
+		 * org.eclipse.datatools.connectivity.ui.connectionProfileImage does not provide a
+		 * valid ID");
+		 */
+		Assert.isNotNull(getId(), 
+				Messages.ProfileImageDescriptor_target_profile_id_not_null_msg);
+		Assert.isNotNull(getIcon(), 
+			Messages.ProfileImageDescriptor_target_profile_image_not_null);
+	}
+
+	/**
+	 * Returns all contributed driver property editor descriptors.
+	 */
+	public static ProfileImageDescriptor[] getProfileImageDescriptors() {
+		if (fgProfileImageDescriptors == null) {
+			IExtensionRegistry registry = Platform.getExtensionRegistry();
+			IConfigurationElement[] elements = registry
+					.getConfigurationElementsFor(ConnectivityUIPlugin
+							.getDefault().getBundle().getSymbolicName(),
+							EXTENSION_POINT_NAME);
+			createProfileImageDescriptors(elements);
+		}
+		if (fgProfileImageDescriptors.size() > 0)
+			return (ProfileImageDescriptor[]) fgProfileImageDescriptors.values().toArray(new ProfileImageDescriptor[fgProfileImageDescriptors.size()]);
+		else
+			return EMPTY;
+	}
+	
+	public static ProfileImageDescriptor[] getProfileImageDescriptorsForProfileID ( String profileID ) {
+		ProfileImageDescriptor[] descriptors = getProfileImageDescriptors();
+		if (descriptors != null && descriptors.length > 0) {
+			ArrayList result = new ArrayList();
+			for (int i = 0; i < descriptors.length; i++) {
+				if (descriptors[i].getId().equals(profileID)) {
+					result.add(descriptors[i]);
+				}
+			}
+			return (ProfileImageDescriptor[]) result.toArray(new ProfileImageDescriptor[result.size()]);
+		}
+		return EMPTY;
+	}
+
+	/**
+	 * Returns the property editor id.
+	 */
+	public String getId() {
+		return this.fElement.getAttribute(ATTR_ID);
+	}
+
+	/**
+	 * Returns the target property id
+	 */
+	public String getIcon() {
+		return this.fElement.getAttribute(ATTR_ICON);
+	}
+
+	/**
+	 * Returns the configuration element.
+	 */
+	public IConfigurationElement getElement() {
+		return this.fElement;
+	}
+
+	/*
+	 * Implements a method from IComparable
+	 */
+	public int compareTo(Object o) {
+		if (o instanceof ProfileImageDescriptor)
+			return Collator.getInstance().compare(getId(),
+					((ProfileImageDescriptor) o).getId());
+		return Integer.MIN_VALUE;
+	}
+
+	/**
+	 * Creates the profile image descriptors.
+	 */
+	private static void createProfileImageDescriptors(
+			IConfigurationElement[] elements) {
+		fgProfileImageDescriptors = new HashMap();
+		
+		for (int i = 0; i < elements.length; ++i) {
+			final IConfigurationElement element = elements[i];
+			if (PROFILE_IMAGE_TAG.equals(element.getName())) {
+
+				final ProfileImageDescriptor[] desc = new ProfileImageDescriptor[1];
+				SafeRunner
+					.run(new ProfileImageSafeRunnable ( desc, element));
+
+				if (desc != null) {
+					fgProfileImageDescriptors.put(desc[0].getId(), desc[0]);
+				}
+			}
+		}
+	}
+	
+	/* (non-Javadoc)
+	 * @see java.lang.Object#equals(java.lang.Object)
+	 */
+	public boolean equals(Object obj) {
+		if (obj instanceof ProfileImageDescriptor) {
+			ProfileImageDescriptor compare = (ProfileImageDescriptor) obj;
+			return this.getId().equals(compare.getId());
+		}
+		return super.equals(obj);
+	}
+
+	/* (non-Javadoc)
+	 * @see java.lang.Object#hashCode()
+	 */
+	public int hashCode() {
+		if (this.getId() != null)
+			return this.getId().hashCode();
+		return super.hashCode();
+	}
+
+	private void processIconAttr() {
+		String iconAttr = fElement == null ? null : fElement
+				.getAttribute(ATTR_ICON);
+		if (iconAttr != null && iconAttr.trim().length() > 0) {
+			if (iconAttr.startsWith("platform:/")){ //$NON-NLS-1$
+				try {
+					mIconURL = new URL(iconAttr);
+				} catch (MalformedURLException e) {
+					// Do nothing
+				}
+			} else {
+				mIconURL = Platform.getBundle(fElement.getContributor().getName())
+						.getEntry(iconAttr);
+			}
+		}
+	}
+
+	public URL getIconURL() {
+		if (mIconURL == null) {
+			processIconAttr();
+		}
+		return mIconURL;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/ProfileImageSafeRunnable.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/ProfileImageSafeRunnable.java
new file mode 100644
index 0000000..7c87e2d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/ProfileImageSafeRunnable.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.ISafeRunnable;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+
+/**
+ * Creates a ProfileImageDescriptor in a UI-safe thread
+ * @author brianf
+ *
+ */
+public class ProfileImageSafeRunnable implements ISafeRunnable {
+
+	private ProfileImageDescriptor[] mInstances = null;
+	private IConfigurationElement mElement = null;
+	
+	/**
+	 * Constructor
+	 * @param instance
+	 * @param element
+	 */
+	public ProfileImageSafeRunnable ( ProfileImageDescriptor[] instance, IConfigurationElement element ) {
+		this.mInstances = instance;
+		this.mElement = element;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.runtime.ISafeRunnable#handleException(java.lang.Throwable)
+	 */
+	public void handleException(Throwable exception) {
+		ConnectivityPlugin.getDefault().log(exception);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.runtime.ISafeRunnable#run()
+	 */
+	public void run() throws Exception {
+		if (this.mInstances != null)
+			this.mInstances[0] = new ProfileImageDescriptor(this.mElement);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/ProfileUIManager.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/ProfileUIManager.java
new file mode 100644
index 0000000..80d380b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/ProfileUIManager.java
@@ -0,0 +1,104 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007, 2008 Sybase, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Sybase, Inc. - initial API and implementation
+ *  Actuate Corporation - extracted implementation to this utility class
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.ui.wizards.ProfilePropertyPage;
+import org.eclipse.jface.preference.IPreferenceNode;
+import org.eclipse.jface.preference.IPreferencePage;
+import org.eclipse.jface.preference.PreferenceDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.dialogs.PreferencesUtil;
+
+/**
+ *  An internal utility class of the Connection Profile UI Manager.
+ *  This has now switched from using internal Platform UI packages 
+ *  to Platform UI API methods that were added in 3.4 (Bugzilla 208830). 
+ *  Backward compatibility to Eclipse Platform version 3.3 is no longer supported from DTP 1.7 on.
+ *  @since DTP 1.6
+ */
+public class ProfileUIManager
+{
+    /**
+     * Indicates whether the specified element has at least one property page contributor.
+     * @param element   an adapter element of a property page
+     * @return  true for having at least one contributor; false otherwise
+     */
+    public static boolean hasContributors( Object element ) 
+    {
+        return PreferencesUtil.hasPropertiesContributors( element );
+    }
+
+    /**
+     * Creates a new preference dialog that shows all property page contributions of the 
+     * specified element.  The pages shown meet the same filtering criteria the search uses.
+     * @param parentShell   the shell to use to parent the dialog if required
+     * @param element       an adaptable element to open the dialog on
+     * @return  A preference dialog showing properties for the specified element, or
+     *         <code>null</code> if it could not be created
+     */
+    public static PreferenceDialog createPreferenceDialog( Shell parentShell, Object element )
+    {
+        if ( element == null || !(element instanceof IAdaptable) )
+            return null;
+
+        IPreferenceNode[] nodes = PreferencesUtil.propertiesContributorsFor( element ); 
+        
+        String[] displayedIds = new String[nodes.length]; 
+        for ( int i = 0; i < nodes.length; i++ ) 
+        { 
+            displayedIds[i] = nodes[i].getId(); 
+        } 
+        PreferenceDialog propertyDialog = 
+                PreferencesUtil.createPropertyDialogOn( parentShell, (IAdaptable) element, 
+                        null, displayedIds, null ); 
+        return propertyDialog; 
+    }
+    
+    /**
+     * Creates a new property page contribution of the specified connection profile.
+     * @param profile   a connection profile
+     * @return  the profile property page
+     */
+    public static ProfilePropertyPage createPropertyPage( IConnectionProfile profile )
+    {
+        IPreferenceNode[] nodes = PreferencesUtil.propertiesContributorsFor( profile );
+        
+        for( int i=0; i < nodes.length; i++ )
+        {
+            IPreferenceNode pageNode = nodes[i];
+            IPreferencePage propPage = pageNode.getPage();
+            if( propPage == null )  // page is not created yet
+            {
+                pageNode.createPage();
+                propPage = pageNode.getPage();
+            }
+            
+            if( ! ( propPage instanceof ProfilePropertyPage ))
+            {
+                if( propPage != null )
+                    pageNode.disposeResources();
+                continue;   // try the next page contribution node
+            }
+            
+            return (ProfilePropertyPage) propPage;
+        }
+
+        return null;
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/PropertiesContentProvider.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/PropertiesContentProvider.java
new file mode 100644
index 0000000..e71fd14
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/PropertiesContentProvider.java
@@ -0,0 +1,97 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import java.util.ArrayList;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.datatools.connectivity.drivers.models.OverrideTemplateDescriptor;
+import org.eclipse.datatools.connectivity.drivers.models.TemplateDescriptor;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+/**
+ * Table content provider
+ * 
+ * @author brianf
+ */
+public class PropertiesContentProvider implements IStructuredContentProvider {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+	 */
+	public Object[] getElements(Object inputElement) {
+		return getChildren(inputElement);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+	 */
+	public void dispose() {
+		// empty
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
+	 *      java.lang.Object, java.lang.Object)
+	 */
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		if (newInput != null && newInput.equals(oldInput)) {
+			return;
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(Object)
+	 */
+	public Object[] getChildren(Object parentElement) {
+		Object children[];
+
+		if (parentElement instanceof TemplateDescriptor) {
+			TemplateDescriptor target = (TemplateDescriptor) parentElement;
+			IConfigurationElement[] props = target.getProperties();
+			ArrayList list = new ArrayList();
+			for (int i = 0; i < props.length; i++) {
+				String id = props[i].getAttribute("id");//$NON-NLS-1$
+				String visible = props[i].getAttribute("visible"); //$NON-NLS-1$
+				OverrideTemplateDescriptor[] otds = 
+					OverrideTemplateDescriptor.getByDriverTemplate(target.getId());
+				if (otds != null && otds.length > 0) {
+					String temp =
+						otds[0].getPropertyVisibleFromId(id);
+					if (temp != null && temp.length() > 0)
+						visible = temp;
+				}
+				boolean propvisible = true;
+				if (visible != null && visible.equals("false")) //$NON-NLS-1$
+					propvisible = false;
+				if (propvisible)
+					list.add(props[i]);
+			}
+			children = list.toArray(new IConfigurationElement[list.size()]);
+		}
+		else if (parentElement instanceof IConfigurationElement) {
+			children = new Object[0];
+		}
+		else {
+			children = new Object[0];
+		}
+		return children;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/PropertiesLabelProvider.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/PropertiesLabelProvider.java
new file mode 100644
index 0000000..5853673
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/PropertiesLabelProvider.java
@@ -0,0 +1,133 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.datatools.connectivity.drivers.DriverMgmtMessages;
+import org.eclipse.datatools.connectivity.drivers.IPropertySet;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * Properties table label provider
+ * 
+ * @author brianf
+ */
+public class PropertiesLabelProvider implements ITableLabelProvider {
+
+	// local property set
+	private IPropertySet mPropSet;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param pset
+	 */
+	public PropertiesLabelProvider(IPropertySet pset) {
+		this.mPropSet = pset;
+	}
+
+	public void setPropertySet(IPropertySet pset) {
+		this.mPropSet = pset;
+	}
+
+	public IPropertySet getPropertySet() {
+		return this.mPropSet;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.emf.edit.provider.ITableItemLabelProvider#getColumnText(java.lang.Object,
+	 *      int)
+	 */
+	public String getColumnText(Object object, int columnIndex) {
+		String val = ""; //$NON-NLS-1$
+
+		if (object instanceof IConfigurationElement) {
+			IConfigurationElement prop = (IConfigurationElement) object;
+			String name = prop.getAttribute("name"); //$NON-NLS-1$
+			String id = prop.getAttribute("id"); //$NON-NLS-1$
+			String value = prop.getAttribute("value"); //$NON-NLS-1$
+			String visible = prop.getAttribute("visible"); //$NON-NLS-1$
+			boolean propvisible = true;
+			if (visible != null && visible.equals("false")) //$NON-NLS-1$
+				propvisible = false;
+			if (propvisible) {
+				switch (columnIndex) {
+				case 0:
+					val = name;
+					break;
+				case 1:
+					val = value;
+					if (this.mPropSet != null) {
+						String propval = this.mPropSet.getBaseProperties()
+								.getProperty(id);
+						if (propval != null && propval.length() > 0) {
+							val = propval;
+						}
+					}
+					break;
+				}
+			}
+		}
+
+		return val == null ? "" : val; //$NON-NLS-1$
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object,
+	 *      int)
+	 */
+	public Image getColumnImage(Object element, int columnIndex) {
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
+	 */
+	public void addListener(ILabelProviderListener listener) {
+		// empty
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+	 */
+	public void dispose() {
+		// empty
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object,
+	 *      java.lang.String)
+	 */
+	public boolean isLabelProperty(Object element, String property) {
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
+	 */
+	public void removeListener(ILabelProviderListener listener) {
+		// empty
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/RepositoriesDropList.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/RepositoriesDropList.java
new file mode 100644
index 0000000..ac16966
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/RepositoriesDropList.java
@@ -0,0 +1,137 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.ConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IManagedConnection;
+import org.eclipse.datatools.connectivity.Version;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileProvider;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepository;
+import org.eclipse.datatools.connectivity.ui.ProfileImageRegistry;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+
+import com.ibm.icu.text.MessageFormat;
+
+public class RepositoriesDropList extends DropListViewer {
+
+	private RepositoriesFilter mRepositoriesFilter;
+
+	public RepositoriesDropList(ConnectionProfileProvider profileProvider,
+								Composite parent) {
+		super(parent);
+		setContentProvider(new RepositoriesContentProvider());
+		setLabelProvider(new RepositoriesLabelProvider());
+		mRepositoriesFilter = new RepositoriesFilter(profileProvider);
+		addFilter(mRepositoriesFilter);
+	}
+
+	public boolean hasRepositories() {
+		return mRepositoriesFilter.hasRepositories();
+	}
+
+	private static class RepositoriesContentProvider implements
+			IStructuredContentProvider {
+
+		public Object[] getElements(Object inputElement) {
+			return (Object[]) inputElement;
+		}
+
+		public void dispose() {
+		}
+
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		}
+
+	}
+
+	private static class RepositoriesLabelProvider extends LabelProvider {
+
+		public Image getImage(Object element) {
+			IConnectionProfile profile = (IConnectionProfile) element;
+			return ProfileImageRegistry.getInstance().getProfileImage(
+					profile.getProvider());
+		}
+
+		public String getText(Object element) {
+			IConnectionProfile profile = (IConnectionProfile) element;
+			StringBuffer sb = new StringBuffer(profile.getName());
+			if (profile.getConnectionState() != IConnectionProfile.DISCONNECTED_STATE) {
+				Properties props = profile
+						.getProperties(ConnectionProfileConstants.VERSION_INFO_PROFILE_EXTENSION_ID);
+				String serverName = props
+						.getProperty(ConnectionProfileConstants.PROP_SERVER_NAME);
+				Version serverVersion = Version
+						.valueOf(props
+								.getProperty(ConnectionProfileConstants.PROP_SERVER_VERSION));
+				if ((serverName != null && serverName.length() > 0)
+						|| serverVersion != Version.NULL_VERSION) {
+					String versionStr = MessageFormat
+							.format(
+									ConnectivityUIPlugin
+											.getDefault()
+											.getResourceString(
+													"CommonLabelProviderBase.label.version"), //$NON-NLS-1$
+									new String[] { profile.getName(),
+											serverName,
+											serverVersion.toString()});
+
+					sb = new StringBuffer(versionStr);
+				}
+			}
+			return sb.toString();
+		}
+
+	}
+
+	private class RepositoriesFilter extends ViewerFilter {
+
+		private ConnectionProfileProvider mProfileProvider;
+		private boolean mHasRepositories;
+
+		public RepositoriesFilter(ConnectionProfileProvider profileProvider) {
+			mProfileProvider = profileProvider;
+		}
+
+		public boolean select(Viewer viewer, Object parentElement,
+				Object element) {
+			ConnectionProfile repo = (ConnectionProfile) element;
+			IManagedConnection managedConnection = repo
+					.getManagedConnection(IConnectionProfileRepository.class
+							.getName());
+			IConnectionProfileRepository repoConn = managedConnection
+					.isConnected() ? ((IConnectionProfileRepository) managedConnection
+					.getConnection().getRawConnection())
+					: null;
+			boolean retVal = repoConn != null
+					&& !repoConn.isReadOnly()
+					&& (mProfileProvider == null || (mProfileProvider
+							.compatibleWithRepository(repo) && repoConn
+							.supportsProfileType(mProfileProvider.getId())));
+			mHasRepositories |= retVal;
+			return retVal;
+		}
+
+		public boolean hasRepositories() {
+			return mHasRepositories;
+		}
+
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/SharedImages.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/SharedImages.java
new file mode 100644
index 0000000..53d2d62
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/SharedImages.java
@@ -0,0 +1,196 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * Maintains the list of IDs and image descriptors of several commonly used
+ * images.
+ * 
+ * @author shongxum
+ */
+public class SharedImages {
+
+	private static URL _iconBaseURL;
+
+	static {
+		String prefix = "icons/full/"; //$NON-NLS-1$
+
+		_iconBaseURL = ConnectivityUIPlugin.getDefault().getBundle().getEntry(
+				prefix);
+	}
+
+	private static final ImageRegistry IMAGE_REGISTRY = ConnectivityUIPlugin
+			.getDefault().getImageRegistry();
+
+	private static final String NAME_PREFIX = "org.eclipse.datatools.connectivity.ui."; //$NON-NLS-1$
+
+	/*
+	 * Set of predefined image identifiers.
+	 */
+
+	public static String IMAGE_RUNNING = "/image/running"; //$NON-NLS-1$
+
+	public static String IMAGE_OFFLINE = "/image/offline"; //$NON-NLS-1$
+
+	public static final String IMG_OBJ_SERVER_STARTED = NAME_PREFIX
+			+ "server_started_obj.gif"; //$NON-NLS-1$
+
+	public static final String IMG_OBJ_SERVER_STOPPED = NAME_PREFIX
+			+ "server_stopped_obj.gif"; //$NON-NLS-1$
+
+	public static final String IMG_OBJ_DEFAULT_SERVER_STARTED = NAME_PREFIX
+			+ "default_server_started_obj.gif"; //$NON-NLS-1$
+
+	public static final String IMG_OBJ_DEFAULT_SERVER_STOPPED = NAME_PREFIX
+			+ "default_server_stopped_obj.gif"; //$NON-NLS-1$
+
+	public static final String IMG_ADD_SERVER = NAME_PREFIX + "add_server.gif"; //$NON-NLS-1$
+
+	public static final String IMG_REMOVE_SERVER = NAME_PREFIX
+			+ "remove_server.gif"; //$NON-NLS-1$
+
+	public static final String IMG_OBJ_CHECK = NAME_PREFIX + "check_obj.gif"; //$NON-NLS-1$
+
+	public static final String IMG_OBJ_UNCHECK = NAME_PREFIX
+			+ "uncheck_obj.gif"; //$NON-NLS-1$
+
+	public static final String IMG_CVIEW_EXPLORER = NAME_PREFIX + "enterprise_explorer.gif"; //$NON-NLS-1$
+
+	// console
+	public static final String IMG_CLEAR = NAME_PREFIX + "clear_co.gif"; //$NON-NLS-1$
+
+	public static final String IMG_WIZBAN = NAME_PREFIX + "new_wiz.gif"; //$NON-NLS-1$
+
+	public static final String IMG_LOCAL_REPOSITORY = NAME_PREFIX + "local_repository.gif"; //$NON-NLS-1$
+
+	private static final String T_OBJ = "obj16"; //$NON-NLS-1$
+
+	private static final String T_WIZBAN = "wizban"; //$NON-NLS-1$
+
+	private static final String T_CLCL = "clcl16"; //$NON-NLS-1$
+
+	private static final String T_DLCL = "dlcl16"; //$NON-NLS-1$
+
+	private static final String T_ELCL = "elcl16"; //$NON-NLS-1$
+
+	private static final String T_CVIEW = "cview16"; //$NON-NLS-1$
+
+	public static final ImageDescriptor DESC_OBJ_SERVER_STARTED = createManaged(
+			T_OBJ, IMG_OBJ_SERVER_STARTED);
+
+	public static final ImageDescriptor DESC_OBJ_SERVER_STOPPED = createManaged(
+			T_OBJ, IMG_OBJ_SERVER_STOPPED);
+
+	public static final ImageDescriptor DESC_OBJ_DEFAULT_SERVER_STARTED = createManaged(
+			T_OBJ, IMG_OBJ_DEFAULT_SERVER_STARTED);
+
+	public static final ImageDescriptor DESC_OBJ_DEFAULT_SERVER_STOPPED = createManaged(
+			T_OBJ, IMG_OBJ_DEFAULT_SERVER_STOPPED);
+
+	public static final ImageDescriptor DESC_LOCAL_REPOSITORY = createManaged(T_CLCL,
+			IMG_LOCAL_REPOSITORY);
+
+	public static final ImageDescriptor DESC_ADD_SERVER = createManaged(T_CLCL,
+			IMG_ADD_SERVER);
+
+	public static final ImageDescriptor DESC_REMOVE_SERVER = createManaged(
+			T_CLCL, IMG_REMOVE_SERVER);
+
+	public static final ImageDescriptor DESC_OBJ_CHECK = createManaged(T_OBJ,
+			IMG_OBJ_CHECK);
+
+	public static final ImageDescriptor DESC_OBJ_UNCHECK = createManaged(T_OBJ,
+			IMG_OBJ_UNCHECK);
+
+	public static final ImageDescriptor DESC_CVIEW_EXPLORER = createManaged(T_CVIEW,
+			IMG_CVIEW_EXPLORER);
+
+	// console
+	public static final ImageDescriptor DESC_CLEAR = createManaged(T_CLCL,
+			IMG_CLEAR);
+
+	public static final ImageDescriptor DESC_CLEAR_DISABLED = createManaged(
+			T_DLCL, IMG_CLEAR);
+
+	public static final ImageDescriptor DESC_CLEAR_ENABLED = createManaged(
+			T_ELCL, IMG_CLEAR);
+
+	// wizard banners
+	public static final ImageDescriptor DESC_WIZBAN = createManaged(T_WIZBAN,
+			IMG_WIZBAN);
+
+	/**
+	 * Retrieves image that corresponds to a given identifier.
+	 * 
+	 * @param key Identifier of the image
+	 * @return Image that corresponds to the supplied identifier.
+	 */
+	public static Image get(String key) {
+		return IMAGE_REGISTRY.get(key);
+	}
+
+	/**
+	 * Returns image registry.
+	 * 
+	 * @return Image registry object.
+	 */
+	public static ImageRegistry getImageRegistry() {
+		return IMAGE_REGISTRY;
+	}
+
+	/**
+	 * Creates descriptor of the image and adds it to the registry cache.
+	 * 
+	 * @param id Identifier of the image
+	 * @return Descriptor of the image
+	 */
+	private static ImageDescriptor createManaged(String prefix, String id) {
+		String name = id.substring(NAME_PREFIX.length());
+
+		try {
+			ImageDescriptor result = ImageDescriptor
+					.createFromURL(createIconFileURL(prefix, name));
+
+			IMAGE_REGISTRY.put(id, result);
+
+			return result;
+		}
+		catch (MalformedURLException e) {
+			return ImageDescriptor.getMissingImageDescriptor();
+		}
+	}
+
+	/**
+	 * Creates a URL for the icon with the given file name.
+	 * 
+	 * @param name File name of the icon
+	 * @return URL that encapulates path to the icon
+	 */
+	private static URL createIconFileURL(String prefix, String name)
+			throws MalformedURLException {
+		if (_iconBaseURL == null) {
+			throw new MalformedURLException();
+		}
+
+		StringBuffer buffer = new StringBuffer(prefix);
+		buffer.append('/');
+		buffer.append(name);
+
+		return new URL(_iconBaseURL, buffer.toString());
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/WorkbenchWindowPerspectiveActionFilter.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/WorkbenchWindowPerspectiveActionFilter.java
new file mode 100644
index 0000000..f346597
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/WorkbenchWindowPerspectiveActionFilter.java
@@ -0,0 +1,84 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui;
+
+import org.eclipse.core.expressions.IPropertyTester;
+import org.eclipse.core.expressions.PropertyTester;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+import org.eclipse.datatools.connectivity.ui.IWorkbenchWindowPerspectiveActionFilter;
+import org.eclipse.ui.IPerspectiveDescriptor;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+
+/**
+ * Allows filtering of Workbench Window properties, specifically for
+ * perspective ID filtering. See the TODO in the constructor.
+ * @author brianf
+ *
+ */
+public class WorkbenchWindowPerspectiveActionFilter extends PropertyTester implements IWorkbenchWindowPerspectiveActionFilter, IPropertyTester {
+
+	private static boolean mDebug = ConnectivityPlugin.getDefault().isDebugging();
+	
+	/**
+	 * This class is used to check the perspective ID for the current workbench
+	 * window. 
+	 * 
+	 * TODO: This class needs to be removed once we're no longer supporting
+	 * Eclipse 3.3. In Eclipse 3.4, there is a new action filter built-in to
+	 * the platform to handle this. ISources.ACTIVE_WORKBENCH_WINDOW_ACTIVE_PERSPECTIVE,
+	 * which is basically "activeWorkbenchWindow.activePerspective" as the test.
+	 */
+	public WorkbenchWindowPerspectiveActionFilter() {
+		super();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IActionFilter#testAttribute(java.lang.Object, java.lang.String, java.lang.String)
+	 */
+	public boolean testAttribute(Object target, String name, String value) {
+		if (target == null || !(target instanceof IWorkbenchWindow)) {
+			return false;
+		}
+		final IWorkbenchWindow window = (IWorkbenchWindow) target;
+		debug("WorkbenchWindow testAttribute: name =" + name + ", value = " + value); //$NON-NLS-1$ //$NON-NLS-2$
+		if (name.equals(WORKBENCH_WINDOW_PERSPECTIVE_PROPERTY_PERSPECTIVE_ID) || name.equals(PERSPECTIVE_ID)) {
+			IWorkbenchPage page = window.getActivePage();
+			if (page != null) {
+				IPerspectiveDescriptor persp = page.getPerspective();
+				if (persp != null) {
+					if (persp.getId().equals(value)) {
+						debug(WORKBENCH_WINDOW_PERSPECTIVE_PROPERTY_PERSPECTIVE_ID + ", value = " + true); //$NON-NLS-1$
+						return true;
+					}
+				}
+			}
+			debug(WORKBENCH_WINDOW_PERSPECTIVE_PROPERTY_PERSPECTIVE_ID + ", value = " + false); //$NON-NLS-1$
+			return false;
+		}
+		return false;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, java.lang.String, java.lang.Object[], java.lang.Object)
+	 */
+	public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
+		return testAttribute(receiver, property, expectedValue == null ? null : expectedValue.toString());
+	}
+
+	/**
+	 * @param msg
+	 */
+	public static void debug ( String msg ) {
+		if (mDebug)
+			System.out.println("Debug: " + msg); //$NON-NLS-1$
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/AbstractInvertableTableSorter.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/AbstractInvertableTableSorter.java
new file mode 100644
index 0000000..e3a3f5e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/AbstractInvertableTableSorter.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.dialogs;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+
+public abstract class AbstractInvertableTableSorter extends InvertableSorter {
+
+	private final InvertableSorter inverse = new InvertableSorter() {
+		 
+		public int compare(Viewer viewer, Object e1, Object e2) {
+			return (-1)*AbstractInvertableTableSorter.this
+							.compare(viewer, e1, e2);
+		}
+ 
+		InvertableSorter getInverseSorter() {
+			return AbstractInvertableTableSorter.this;
+		}
+ 
+		public int getSortDirection() {
+			return SWT.DOWN;
+		}
+	};
+ 
+	InvertableSorter getInverseSorter() {
+		return inverse;
+	}
+ 
+	public int getSortDirection() {
+		return SWT.UP;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/CategoryDescriptorNameComparator.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/CategoryDescriptorNameComparator.java
new file mode 100644
index 0000000..48b7a8e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/CategoryDescriptorNameComparator.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.dialogs;
+
+import java.util.Comparator;
+
+import org.eclipse.datatools.connectivity.drivers.models.CategoryDescriptor;
+
+public class CategoryDescriptorNameComparator implements Comparator {
+
+	public int compare(Object arg0, Object arg1) {
+		if (arg0 instanceof CategoryDescriptor &&
+				arg1 instanceof CategoryDescriptor) {
+			CategoryDescriptor cd0 = (CategoryDescriptor) arg0;
+			CategoryDescriptor cd1 = (CategoryDescriptor) arg1;
+			return cd0.getName().compareToIgnoreCase(cd1.getName());
+		}
+		return 0;
+	}
+	
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/CategoryRoot.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/CategoryRoot.java
new file mode 100644
index 0000000..94328e2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/CategoryRoot.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.dialogs;
+
+public class CategoryRoot {
+
+	public CategoryRoot() {
+		
+	}
+	
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/CategoryUtils.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/CategoryUtils.java
new file mode 100644
index 0000000..9ea3474
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/CategoryUtils.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.dialogs;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.drivers.models.CategoryDescriptor;
+
+public class CategoryUtils {
+	
+	public static CategoryDescriptor[] getOrderedRootCategories(){
+		CategoryDescriptor[] roots = CategoryDescriptor.getRootCategories();
+		if (roots != null && roots.length > 0) {
+			Arrays.sort(roots, new CategoryDescriptorNameComparator());
+			return roots;
+		}
+		return null;
+	}
+	
+	public static CategoryDescriptor[] getOrderedChildCategories ( String id ) {
+		CategoryDescriptor cdById = 
+			CategoryDescriptor.getCategoryDescriptor(id);
+		if (cdById != null) {
+			List childList = cdById.getChildCategories();
+			if (childList != null && childList.size() > 0) {
+				CategoryDescriptor[] children = 
+					(CategoryDescriptor[]) childList.toArray(
+							new CategoryDescriptor[childList.size()]);
+				Arrays.sort(children, new CategoryDescriptorNameComparator());
+				return children;
+			}
+			return new CategoryDescriptor[0];
+		}
+		return null;
+	}
+	
+	public static CategoryDescriptor getCategoryDescriptorByName ( String name ) {
+		CategoryDescriptor[] descriptors = 
+			CategoryDescriptor.getCategoryDescriptors();
+		for (int i = 0; i < descriptors.length; i++) {
+			if (descriptors[i].getName().equals(name))
+				return descriptors[i];
+		}
+		return null;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/DriverDefinitionsDialog.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/DriverDefinitionsDialog.java
new file mode 100644
index 0000000..2e8afb8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/DriverDefinitionsDialog.java
@@ -0,0 +1,692 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.dialogs;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.drivers.DriverManager;
+import org.eclipse.datatools.connectivity.drivers.DriverMgmtMessages;
+import org.eclipse.datatools.connectivity.drivers.DriverValidator;
+import org.eclipse.datatools.connectivity.drivers.IDriverMgmtConstants;
+import org.eclipse.datatools.connectivity.drivers.IPropertySet;
+import org.eclipse.datatools.connectivity.drivers.PropertySetImpl;
+import org.eclipse.datatools.connectivity.drivers.models.CategoryDescriptor;
+import org.eclipse.datatools.connectivity.drivers.models.DriversProvider;
+import org.eclipse.datatools.connectivity.drivers.models.TemplateDescriptor;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.DriverTreeContentProvider;
+import org.eclipse.datatools.connectivity.internal.ui.DriverTreeFilter;
+import org.eclipse.datatools.connectivity.internal.ui.DriverTreeLabelProvider;
+import org.eclipse.datatools.connectivity.internal.ui.DriverTreeSorter;
+import org.eclipse.datatools.connectivity.internal.ui.IHelpConstants;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.help.IContextProvider;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.TitleAreaDialog;
+import org.eclipse.jface.resource.JFaceColors;
+import org.eclipse.jface.viewers.DecoratingLabelProvider;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * Driver Management dialog
+ * 
+ * @author brianf
+ */
+public class DriverDefinitionsDialog extends TitleAreaDialog 
+	implements IContextProvider {
+
+	// memento keys
+	public final static String MEMENTO_ROOT = "Drivers Definitions Driver_Dialog_Root";//$NON-NLS-1$
+	public final static String MEMENTO_DIALOG_SIZE_HEIGHT = "Dialog_Size_Height";//$NON-NLS-1$
+	public final static String MEMENTO_DIALOG_SIZE_WIDTH = "Dialog_Size_Width";//$NON-NLS-1$
+
+	// ui components
+	private Button mAddButton;
+	private Button mRemoveButton;
+	private Button mEditButton;
+	private Button mCopyButton;
+	private TreeViewer mTreeViewer;
+	private Label mErrorLabel;
+
+	// viewer filter
+	private DriverTreeFilter mViewerFilter;
+
+	// dirty flag
+	private boolean mDirty = false;
+
+	// Category id
+	private String mCategoryId;
+
+	// Initial driver name
+	private String mInitialDriverName;
+
+	// stashed selected propertyset
+	private IPropertySet selectedPS = null;
+	
+	// OK Button
+	private Button mOKButton = null;
+
+	private ContextProviderDelegate contextProviderDelegate =
+		new ContextProviderDelegate(ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName());
+
+	/**
+	 * Constructor
+	 * 
+	 * @param parentShell
+	 */
+	public DriverDefinitionsDialog(Shell parentShell) {
+		super(parentShell);
+		this.setShellStyle(getShellStyle() | SWT.RESIZE | SWT.DIALOG_TRIM);
+	}
+
+	/**
+	 * Constructor
+	 * 
+	 * @param parentShell
+	 * @param category
+	 */
+	public DriverDefinitionsDialog(Shell parentShell, String category) {
+		this(parentShell);
+		if (CategoryDescriptor.getCategoryDescriptor(category) != null) {
+			this.mViewerFilter = new DriverTreeFilter();
+			this.mViewerFilter.setCategoryId(category);
+			this.mCategoryId = category;
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
+	 */
+	protected Control createDialogArea(Composite parent) {
+        getShell().setData( HelpUtil.CONTEXT_PROVIDER_KEY, this);
+        HelpUtil.setHelp( getShell(), 
+        		HelpUtil.getContextId(IHelpConstants.CONTEXT_ID_DRIVER_DEFINITION_DIALOG, 
+        				ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName()));
+		Composite area = (Composite) super.createDialogArea(parent);
+
+		Font font = parent.getFont();
+
+		Composite content = new Composite(area, SWT.NONE);
+		GridLayout layout = new GridLayout();
+		layout.numColumns = 2;
+		content.setLayout(layout);
+		GridData data = new GridData(GridData.FILL_BOTH);
+		content.setLayoutData(data);
+		content.setFont(font);	
+		content.addDisposeListener(new DisposeListener(){
+			public void widgetDisposed(DisposeEvent e) {
+				saveState();			
+			}});
+
+		this.mErrorLabel = new Label(content, SWT.LEFT | SWT.WRAP);
+		data = new GridData(GridData.VERTICAL_ALIGN_FILL
+				| GridData.FILL_HORIZONTAL);
+		data.horizontalSpan = 2;
+		data.heightHint = 35;
+		this.mErrorLabel.setLayoutData(data);
+		this.mErrorLabel.setForeground(JFaceColors.getErrorText(content
+				.getDisplay()));
+		this.mErrorLabel.setFont(font);
+
+		Label label = new Label(content, SWT.NONE);
+		label.setText(DriverMgmtMessages
+				.getString("DriverDefinitionsDialog.label.properties")); //$NON-NLS-1$
+		GridData gridData = new GridData();
+		gridData.horizontalSpan = 2;
+		label.setLayoutData(gridData);
+		
+		this.mTreeViewer = new TreeViewer(content, SWT.BORDER);
+		data = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);
+		this.mTreeViewer.getTree().setLayoutData(data);
+		this.mTreeViewer.getTree().setFont(font);
+
+		this.mTreeViewer.setContentProvider(new DriverTreeContentProvider());
+		this.mTreeViewer.setLabelProvider(new DecoratingLabelProvider(
+				new DriverTreeLabelProvider(), new DriverTreeLabelProvider()));
+		this.mTreeViewer.setSorter(new DriverTreeSorter());
+		if (this.mViewerFilter != null) {
+			this.mTreeViewer.addFilter(this.mViewerFilter);
+		}
+		this.mTreeViewer.setInput(DriversProvider.getInstance());
+		this.mTreeViewer.expandToLevel(3);
+
+		this.mTreeViewer
+				.addSelectionChangedListener(new ISelectionChangedListener() {
+
+					public void selectionChanged(SelectionChangedEvent event) {
+						DriverDefinitionsDialog.this.selectedPS = null;
+						StructuredSelection selection = (StructuredSelection) DriverDefinitionsDialog.this.mTreeViewer
+								.getSelection();
+						if (selection.getFirstElement() instanceof CategoryDescriptor) {
+							DriverDefinitionsDialog.this.mAddButton
+									.setEnabled(true);
+							DriverDefinitionsDialog.this.mRemoveButton
+									.setEnabled(false);
+							DriverDefinitionsDialog.this.mEditButton
+									.setEnabled(false);
+							DriverDefinitionsDialog.this.mErrorLabel
+									.setText(""); //$NON-NLS-1$
+							DriverDefinitionsDialog.this.mErrorLabel
+									.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+							if (DriverDefinitionsDialog.this.mOKButton != null)
+								DriverDefinitionsDialog.this.mOKButton
+									.setEnabled(false);
+						}
+						else if (selection.getFirstElement() instanceof IPropertySet) {
+							DriverDefinitionsDialog.this.mAddButton
+									.setEnabled(false);
+							DriverDefinitionsDialog.this.mRemoveButton
+									.setEnabled(true);
+							DriverDefinitionsDialog.this.mEditButton
+									.setEnabled(true);
+							DriverDefinitionsDialog.this.selectedPS = (IPropertySet) selection
+									.getFirstElement();
+							if (DriverDefinitionsDialog.this.mOKButton != null)
+								DriverDefinitionsDialog.this.mOKButton
+									.setEnabled(true);
+							if (DriverDefinitionsDialog.this.selectedPS != null) {
+								validate(DriverDefinitionsDialog.this.selectedPS);
+							}
+						}
+					}
+
+				});
+
+		Composite groupComponent = new Composite(content, SWT.NULL);
+		GridLayout groupLayout = new GridLayout();
+		groupLayout.marginWidth = 0;
+		groupLayout.marginHeight = 0;
+		groupComponent.setLayout(groupLayout);
+		data = new GridData();
+		data.verticalAlignment = GridData.BEGINNING;
+		data.horizontalAlignment = GridData.FILL;
+		groupComponent.setLayoutData(data);
+		groupComponent.setFont(font);
+
+		this.mAddButton = new Button(groupComponent, SWT.PUSH);
+		this.mAddButton.setText(DriverMgmtMessages
+				.getString("DriverDefinitionsDialog.button.addDriver")); //$NON-NLS-1$
+		this.mAddButton.setLayoutData(new GridData());
+		this.mAddButton.setFont(font);
+		setButtonLayoutData(this.mAddButton);
+		this.mAddButton.addSelectionListener(new SelectionListener() {
+
+			public void widgetSelected(SelectionEvent e) {
+				StructuredSelection selection = (StructuredSelection) DriverDefinitionsDialog.this.mTreeViewer
+						.getSelection();
+				if (selection.getFirstElement() instanceof CategoryDescriptor) {
+					addDriver(selection);
+				}
+			}
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				widgetSelected(e);
+			}
+
+		});
+
+		this.mEditButton = new Button(groupComponent, SWT.PUSH);
+		this.mEditButton.setText(DriverMgmtMessages
+				.getString("DriverDefinitionsDialog.button.editDriver")); //$NON-NLS-1$
+		this.mEditButton.setLayoutData(new GridData());
+		this.mEditButton.setFont(font);
+		setButtonLayoutData(this.mEditButton);
+		this.mEditButton.addSelectionListener(new SelectionListener() {
+
+			public void widgetSelected(SelectionEvent e) {
+				StructuredSelection selection = (StructuredSelection) DriverDefinitionsDialog.this.mTreeViewer
+						.getSelection();
+				if (selection.getFirstElement() instanceof IPropertySet) {
+					editDriver(selection);
+				}
+			}
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				widgetSelected(e);
+			}
+
+		});
+
+		this.mRemoveButton = new Button(groupComponent, SWT.PUSH);
+		this.mRemoveButton.setText(DriverMgmtMessages
+				.getString("DriverDefinitionsDialog.button.removeDriver")); //$NON-NLS-1$
+		this.mRemoveButton.setLayoutData(new GridData());
+		this.mRemoveButton.setFont(font);
+		setButtonLayoutData(this.mRemoveButton);
+		this.mRemoveButton.addSelectionListener(new SelectionListener() {
+
+			public void widgetSelected(SelectionEvent e) {
+				StructuredSelection selection = (StructuredSelection) DriverDefinitionsDialog.this.mTreeViewer
+						.getSelection();
+				if (selection.getFirstElement() instanceof IPropertySet) {
+					removeDriver(selection);
+				}
+			}
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				widgetSelected(e);
+			}
+
+		});
+
+		this.mCopyButton = new Button(groupComponent, SWT.PUSH);
+		this.mCopyButton.setText(DriverMgmtMessages
+				.getString("DriverDefinitionsDialog.button.copyDriver")); //$NON-NLS-1$
+		this.mCopyButton.setLayoutData(new GridData());
+		this.mCopyButton.setFont(font);
+		setButtonLayoutData(this.mCopyButton);
+		this.mCopyButton.addSelectionListener(new SelectionListener() {
+
+			public void widgetSelected(SelectionEvent e) {
+				StructuredSelection selection = (StructuredSelection) DriverDefinitionsDialog.this.mTreeViewer
+						.getSelection();
+				if (selection.getFirstElement() instanceof IPropertySet) {
+					copyDriver(selection);
+				}
+			}
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				widgetSelected(e);
+			}
+
+		});
+
+		setTitle(DriverMgmtMessages.getString("DriverDefinitionsDialog.title")); //$NON-NLS-1$
+		setMessage(DriverMgmtMessages
+				.getString("DriverDefinitionsDialog.message")); //$NON-NLS-1$
+
+		IPropertySet pset = null;
+		IStructuredSelection selection = null;
+		if (this.mInitialDriverName != null) {
+			DriverInstance di = 
+				DriverManager.getInstance().getDriverInstanceByName(this.mInitialDriverName);
+			pset = di.getPropertySet();
+			
+		}
+
+		if (pset == null) {
+			if (this.mCategoryId == null) {
+				if (CategoryDescriptor.getRootCategories() == null || 
+						CategoryDescriptor.getRootCategories().length == 0) {
+					selection = null;
+				}
+				else {
+					selection = new StructuredSelection(CategoryDescriptor.getRootCategories()[0]);
+				}
+			} else {
+				selection = new StructuredSelection(CategoryDescriptor.getCategoryDescriptor(this.mCategoryId));
+			}
+		} else {
+			selection = new StructuredSelection(pset);
+		}
+		if (selection != null) {
+			mTreeViewer.expandToLevel(selection.getFirstElement(),1);
+			mTreeViewer.setSelection(selection,true);
+		}
+		else {
+			mTreeViewer.expandToLevel(3);
+		}
+		
+		return content;
+
+	}
+
+	/*
+	 * Validate the current instance and reset the error label
+	 */
+	private void validate(IPropertySet instance) {
+		String driverType = instance.getBaseProperties().getProperty(
+				IDriverMgmtConstants.PROP_DEFN_TYPE); //$NON-NLS-1$
+		if (driverType != null) {
+			TemplateDescriptor template = TemplateDescriptor
+					.getDriverTemplateDescriptor(driverType);
+			if (template != null) {
+				DriverValidator validator = new DriverValidator(template,
+						instance);
+				String mErrorMessage = ""; //$NON-NLS-1$
+				if (!validator.isValid()) {
+					mErrorMessage = validator.getMessage();
+				}
+				this.mErrorLabel.setText(mErrorMessage);
+				this.mErrorLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
+	 */
+	protected void createButtonsForButtonBar(Composite parent) {
+		this.mOKButton = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL,
+				true);
+		createButton(parent, IDialogConstants.CANCEL_ID,
+				IDialogConstants.CANCEL_LABEL, false);
+		if (this.selectedPS == null ) {
+			this.mOKButton.setEnabled(false);
+		}
+		else {
+			this.mOKButton.setEnabled(true);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
+	 */
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		int width = 500;
+		int height = 400;
+		
+		newShell.setText(DriverMgmtMessages
+				.getString("DriverDefinitionsDialog.windowTitle")); //$NON-NLS-1$
+
+		IDialogSettings dset = ConnectivityUIPlugin.getDefault()
+				.getDialogSettings();
+		if (dset != null) {
+			IDialogSettings dSection = dset.getSection(MEMENTO_ROOT);
+			if (dSection != null) {
+				if (dSection.get(MEMENTO_DIALOG_SIZE_HEIGHT) != null
+						&& dSection.get(MEMENTO_DIALOG_SIZE_HEIGHT).trim()
+								.length() > 0) {
+					height = dSection.getInt(MEMENTO_DIALOG_SIZE_HEIGHT);
+					width = dSection.getInt(MEMENTO_DIALOG_SIZE_WIDTH);
+				}
+			}
+		}
+		newShell.setSize(width, height);
+		centerDialog(newShell);
+	}
+	
+	/*
+	 * Center the dialog relative to its parent
+	 */
+	private void centerDialog(Shell newShell){
+		Composite parent = newShell.getParent();
+		Rectangle parentSize = parent.getBounds();
+		Rectangle newShellSize = newShell.getBounds();
+
+		int x, y;
+		x = (parentSize.width - newShellSize.width)/2 + parentSize.x;
+		y = (parentSize.height - newShellSize.height)/2 + parentSize.y;
+
+		newShell.setLocation(new Point(x, y));		
+	}
+
+	/*
+	 * Save the dialog settings
+	 */
+	private void saveState() {
+		IDialogSettings dset = ConnectivityUIPlugin.getDefault()
+				.getDialogSettings();
+		if (dset != null) {
+			IDialogSettings dSection = dset.getSection(MEMENTO_ROOT);
+			if (dSection == null)
+				dSection = dset.addNewSection(MEMENTO_ROOT);
+			if (dSection != null) {
+				Point size = getShell().getSize();
+				dSection.put(MEMENTO_DIALOG_SIZE_HEIGHT, size.y);
+				dSection.put(MEMENTO_DIALOG_SIZE_WIDTH, size.x);
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
+	 */
+	protected void okPressed() {
+		if (this.mDirty) {
+			saveChanges();
+		}
+		super.okPressed();
+	}
+
+	/*
+	 * Save the instances back to the file
+	 */
+	private void saveChanges() {
+		// no longer necessary, as this is handled by the DriverManager
+		// BZ 166637 - BTF 12192006
+		this.mDirty = false;
+	}
+
+	/**
+	 * Retrieve the selected instance
+	 * 
+	 * @return
+	 */
+	public IPropertySet getSelectedDefinition() {
+		return this.selectedPS;
+	}
+
+	/*
+	 * Retrieve the category from the instance.
+	 */
+	private CategoryDescriptor getCategoryFromPropertySet(IPropertySet instance) {
+		if (instance != null) {
+			if (instance.getBaseProperties().getProperty(
+					IDriverMgmtConstants.PROP_DEFN_TYPE) != null) {
+				String driverType = instance.getBaseProperties().getProperty(
+						IDriverMgmtConstants.PROP_DEFN_TYPE);
+				TemplateDescriptor descriptor = TemplateDescriptor
+						.getDriverTemplateDescriptor(driverType);
+				if (descriptor != null) {
+					CategoryDescriptor category = CategoryDescriptor
+							.getCategoryDescriptor(descriptor
+									.getParentCategory());
+					return category;
+				}
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Set the initial driver name
+	 * 
+	 * @param driverName
+	 */
+	public void setInitialDriverName(String driverName) {
+		this.mInitialDriverName = driverName;
+	}
+
+	/**
+	 * Return the initial driver name.
+	 * 
+	 * @return
+	 */
+	public String getInitialDriverName() {
+		return this.mInitialDriverName;
+	}
+
+	private IPropertySet duplicatePropertySet ( IPropertySet pset ) {
+		IPropertySet newPset = new PropertySetImpl(pset.getName(), pset.getID());
+		if (pset.getBaseProperties().size() > 0) {
+			Properties newProps = new Properties();
+			newPset.setBaseProperties(newProps);
+			newPset.getBaseProperties().putAll(pset.getBaseProperties());
+		}
+		return newPset;
+	}
+
+	private void copyPropertySet ( IPropertySet fromPset, IPropertySet topset ) {
+		topset.setID(fromPset.getID());
+		topset.setName(fromPset.getName());
+		if (topset.getBaseProperties().size() > 0) {
+			topset.getBaseProperties().putAll(fromPset.getBaseProperties());
+		}
+	}
+
+	private void addDriver(ISelection selection) {
+		StructuredSelection sselection = (StructuredSelection) selection;
+
+		// Add a new driver instance from one of the templates for the category
+		if (sselection.getFirstElement() instanceof CategoryDescriptor) {
+
+			CategoryDescriptor descriptor = (CategoryDescriptor) sselection
+					.getFirstElement();
+			NewDriverDialog dlg = null;
+			if (DriverDefinitionsDialog.this.mCategoryId != null) {
+				dlg = new NewDriverDialog(getShell(), descriptor
+						.getId());
+			}
+			else {
+				dlg = new NewDriverDialog(getShell());
+			}
+			if (dlg.open() == Window.OK) {
+				IPropertySet instance = dlg.getNewDriverInstance();
+
+				DriverDefinitionsDialog.this.mDirty = true;
+
+				// Should we edit immediately? if yes, pop up the edit dialog
+				if (dlg.getEditImmediately()) {
+					EditDriverDialog editdlg = new EditDriverDialog(getShell(),
+							instance);
+					int rtn_code = editdlg.open();
+					if (rtn_code != EditDriverDialog.OK) {
+						instance = editdlg.getInitialPropertySet();
+					}
+				}
+
+				// stash the new instance
+				DriverManager.getInstance().addDriverInstance(instance);
+
+				// refresh
+				this.mTreeViewer.setInput(DriversProvider.getInstance());
+				this.mTreeViewer.refresh();
+				this.mTreeViewer.expandToLevel(descriptor, 1);
+				this.mTreeViewer.reveal(descriptor);
+
+			}
+		}
+	}
+
+	private void editDriver(ISelection selection) {
+		StructuredSelection sselection = (StructuredSelection) selection;
+		if (sselection.getFirstElement() instanceof IPropertySet) {
+			IPropertySet instance = (IPropertySet) sselection.getFirstElement();
+			IPropertySet copy = duplicatePropertySet(instance);
+			EditDriverDialog dlg = new EditDriverDialog(getShell(), copy);
+			if (dlg.open() == Window.OK) {
+				
+				copyPropertySet(copy, instance);
+				DriverManager.getInstance().removeDriverInstance(instance.getID());
+				
+				/*
+				 * This call to garbage collect is to try and reclaim
+				 * the classloader held by the last instance of the 
+				 * DriverInstance that is being dropped and re-added.
+				 * Note that if the class is in use (i.e. any profile
+				 * is connected that uses the referenced driver), it 
+				 * won't be unloaded and subsequent connections will 
+				 * fail.
+				 */
+				System.gc();
+				
+				DriverManager.getInstance().addDriverInstance(instance);
+				DriverDefinitionsDialog.this.mDirty = true;
+				DriverDefinitionsDialog.this.mTreeViewer.refresh();
+				validate(instance);
+			}
+		}
+	}
+
+	private void removeDriver(ISelection selection) {
+		StructuredSelection sselection = (StructuredSelection) selection;
+		if (sselection.getFirstElement() instanceof IPropertySet) {
+			IPropertySet instance = (IPropertySet) sselection.getFirstElement();
+			if (MessageDialog.openQuestion(getShell(), DriverMgmtMessages
+					.getString("DriverPreferences.title.removeMessage"), //$NON-NLS-1$
+					DriverMgmtMessages.format(
+							"DriverPreferences.text.removeMessage", //$NON-NLS-1$ 
+							new String[] { instance.getName()})) == true) {
+				DriverManager.getInstance().removeDriverInstance(instance.getID());
+
+				CategoryDescriptor category = getCategoryFromPropertySet(instance);
+				DriverDefinitionsDialog.this.mTreeViewer.refresh(category);
+				DriverDefinitionsDialog.this.mDirty = true;
+				DriverDefinitionsDialog.this.mErrorLabel.setText(""); //$NON-NLS-1$
+			}
+		}
+	}
+
+	private void copyDriver(ISelection selection) {
+		StructuredSelection sselection = (StructuredSelection) selection;
+		if (sselection.getFirstElement() instanceof IPropertySet) {
+			IPropertySet instance = (IPropertySet) sselection.getFirstElement();
+			if (instance != null) {
+				IPropertySet cloned = (IPropertySet) ((PropertySetImpl) instance)
+						.clone();
+
+				String copyPrefix = DriverMgmtMessages
+						.getString("PropertySetImpl.copy_prefix"); //$NON-NLS-1$
+				String copyIdSuffix = DriverMgmtMessages
+						.getString("PropertySetImpl.copy_id_suffix"); //$NON-NLS-1$
+				String name = copyPrefix + instance.getName();
+				String id = instance.getID() + copyIdSuffix;
+				cloned.setID(id);
+				cloned.setName(name);
+				
+				DriverManager.getInstance().addDriverInstance(cloned);
+
+				DriverDefinitionsDialog.this.mTreeViewer.refresh();
+
+				DriverDefinitionsDialog.this.mTreeViewer
+						.setSelection(new StructuredSelection(cloned));
+			}
+		}
+	}
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/DriverDialog.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/DriverDialog.java
new file mode 100644
index 0000000..f425895
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/DriverDialog.java
@@ -0,0 +1,1571 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ *               IBM Corporation - fix for 243829
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.dialogs;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.Properties;
+
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.drivers.DriverManager;
+import org.eclipse.datatools.connectivity.drivers.DriverMgmtMessages;
+import org.eclipse.datatools.connectivity.drivers.DriverValidator;
+import org.eclipse.datatools.connectivity.drivers.IDriverMgmtConstants;
+import org.eclipse.datatools.connectivity.drivers.IDriverValuesProvider;
+import org.eclipse.datatools.connectivity.drivers.IPropertySet;
+import org.eclipse.datatools.connectivity.drivers.PropertySetImpl;
+import org.eclipse.datatools.connectivity.drivers.models.CategoryDescriptor;
+import org.eclipse.datatools.connectivity.drivers.models.OverrideTemplateDescriptor;
+import org.eclipse.datatools.connectivity.drivers.models.TemplateDescriptor;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.DriverPropertySourceProvider;
+import org.eclipse.datatools.connectivity.internal.ui.DriverTreeFilter;
+import org.eclipse.datatools.connectivity.internal.ui.IHelpConstants;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.TitleAreaDialog;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.TreeColumn;
+import org.eclipse.ui.part.IPage;
+import org.eclipse.ui.part.PageBook;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+
+import com.ibm.icu.text.Collator;
+import com.ibm.icu.util.StringTokenizer;
+
+public class DriverDialog extends TitleAreaDialog {
+
+	// memento keys
+	public final static String MEMENTO_ROOT = "Alt Drivers Definitions Driver_Dialog_Root";//$NON-NLS-1$
+	public final static String MEMENTO_DIALOG_SIZE_HEIGHT = "Dialog_Size_Height";//$NON-NLS-1$
+	public final static String MEMENTO_DIALOG_SIZE_WIDTH = "Dialog_Size_Width";//$NON-NLS-1$
+
+	private Text mDriverNameText;
+	private Combo mTypeCombo;
+	private Combo mVendorCombo;
+	private TreeViewer mTreeViewer;
+	private PageBook book = null;
+	private List list;
+	private Text mDriverTypeText;
+	private Button mAddJar;
+	private Button mEditJar;
+	private Button mRemoveJar;
+	private Button mClearAll;
+	private Button mOKButton;
+	private TemplateDescriptor descriptor = null;
+	private IPropertySet mPropertySet = null;
+	private IPropertySet mInitialPropertySet = null;
+	private boolean hideDriverList = false;
+	private DriverPropertySourceProvider mpsp = null;
+	
+	private static String ALL_STRING = DriverMgmtMessages.getString("DriverDialog.AllFilter"); //$NON-NLS-1$
+
+	// driver properties
+	private String mDriverName;
+	private String mJarList;
+	private boolean mInEdit = false;
+	private boolean mIsEditable = true;
+	private static String previouslyBrowsedDirectory = ""; //$NON-NLS-1$
+
+	// tree filter
+	private DriverTreeFilter mViewerFilter;
+	private DriverTreeFilter mTypeFilter;
+	private DriverTreeFilter mVendorFilter;
+	
+	//tabs
+	private TabItem generalTab;
+	private TabItem jarListTab;
+	private TabItem propertiesTab;
+	private Composite generalComposite;
+	private Composite jarListComposite;
+	private Composite propertiesComposite;
+	
+	private ContextProviderDelegate contextProviderDelegate =
+		new ContextProviderDelegate(ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName());
+
+	// listener for property changes to re-validate 
+	private ChangeListener psetChangedListener = new ChangeListener(){
+
+		public void stateChanged(ChangeEvent arg0) {
+			boolean flag = isValid(true);
+			validateName();
+			if (DriverDialog.this.mOKButton != null && !DriverDialog.this.mOKButton.isDisposed())
+				DriverDialog.this.mOKButton.setEnabled(flag);			
+		}
+	};
+	
+	public void setIsEditable (boolean flag) {
+		this.mIsEditable = flag;
+	}
+	
+	public void setEditMode ( boolean flag ) {
+		this.mInEdit = flag;
+	}
+
+	public DriverDialog(Shell parentShell) {
+		super(parentShell);
+		this.setShellStyle(getShellStyle() | SWT.RESIZE | SWT.DIALOG_TRIM);
+	}
+
+	/**
+	 * Constructor
+	 * 
+	 * @param parentShell
+	 * @param category
+	 */
+	public DriverDialog(Shell parentShell, String category) {
+		this(parentShell);
+		
+		if (CategoryDescriptor.getCategoryDescriptor(category) != null) {
+			this.mViewerFilter = new DriverTreeFilter();
+			this.mViewerFilter.setCategoryId(category);
+		}
+	}
+	
+	private void handleSelection() {
+		if (this.mTreeViewer != null && !this.mTreeViewer.getTree().isDisposed())
+			this.mTreeViewer.getTree().setRedraw(false);
+		if (mTypeFilter != null && mTreeViewer != null) {
+			mTreeViewer.removeFilter(mTypeFilter);
+		}
+		mVendorCombo.removeAll();
+		if (mTypeCombo.getSelectionIndex() > -1) {
+			mVendorCombo.setEnabled(true);
+			String selectedText = mTypeCombo.getText();
+			if (selectedText.trim().length() > 0) {
+				CategoryDescriptor[] kids = null;
+				if (mTypeCombo.getData(selectedText) instanceof CategoryDescriptor) {
+					CategoryDescriptor cd = 
+						(CategoryDescriptor) mTypeCombo.getData(selectedText);
+					kids = CategoryUtils.getOrderedChildCategories(cd.getId());
+					if (cd != null && mTreeViewer != null) {
+						mTypeFilter = new DriverTreeFilter();
+						mTypeFilter.setCategoryId(cd.getId());
+						mTreeViewer.addFilter(mTypeFilter);
+						mTreeViewer.refresh();
+						mTreeViewer.expandToLevel(2);
+					}
+				}
+				else if (mTypeCombo.getData(selectedText) instanceof CategoryDescriptor[]) {
+					kids = (CategoryDescriptor[]) mTypeCombo.getData(selectedText);
+					Arrays.sort(kids, new CategoryDescriptorNameComparator());
+					mTreeViewer.expandToLevel(2);
+				}
+				if (kids != null && !selectedText.equals(ALL_STRING)) {
+					mVendorCombo.add(ALL_STRING);
+					for (int j = 0; j < kids.length; j++) {
+						mVendorCombo.add(kids[j].getName());
+						mVendorCombo.setData(kids[j].getName(), kids[j]);
+					}
+					if (mVendorCombo.getItemCount() == 0) {
+						mVendorCombo.setEnabled(false);
+					}
+				}
+				else {
+					mVendorCombo.add(ALL_STRING);
+					for (int j = 0; j < kids.length; j++) {
+						CategoryDescriptor[] details =
+							CategoryUtils.getOrderedChildCategories(kids[j].getId());
+						if (details != null && details.length > 0) {
+							for (int i = 0; i < details.length; i++) {
+								mVendorCombo.add(details[i].getName());
+								mVendorCombo.setData(details[i].getName(), details[i]);
+							}
+						}
+					}
+					if (mVendorCombo.getItemCount() == 0) {
+						mVendorCombo.setEnabled(false);
+					}
+				}
+				mVendorCombo.select(0);
+			}
+		}
+		else {
+			mVendorCombo.setEnabled(false);
+		}
+		if (this.mTreeViewer != null && !this.mTreeViewer.getTree().isDisposed())
+			this.mTreeViewer.getTree().setRedraw(true);
+	}
+	
+	private void handleVendorSelected() {
+		if (this.mTreeViewer != null && !this.mTreeViewer.getTree().isDisposed())
+			this.mTreeViewer.getTree().setRedraw(false);
+		if (mVendorFilter != null && mTreeViewer != null) {
+			mTreeViewer.removeFilter(mVendorFilter);
+		}
+		if (mTreeViewer != null && mVendorCombo != null && mVendorCombo.getText().trim().length() > 0) {
+			String selText = mVendorCombo.getText().trim();
+			CategoryDescriptor cd = (CategoryDescriptor) mVendorCombo.getData(selText);
+			if (cd != null) {
+				mVendorFilter = new DriverTreeFilter();
+				mVendorFilter.setCategoryId(cd.getId());
+				mTreeViewer.addFilter(mVendorFilter);
+				mTreeViewer.refresh();
+				mTreeViewer.expandToLevel(2);
+			}
+		}
+		if (this.mTreeViewer != null && !this.mTreeViewer.getTree().isDisposed())
+			this.mTreeViewer.getTree().setRedraw(true);
+	}
+	
+	private void processEnabledStateForComposite(Composite parent, boolean enabled) {
+		if (parent != null && parent.equals(jarListComposite)) {
+			parent.setEnabled(enabled);
+			mAddJar.setEnabled(enabled);
+			mEditJar.setEnabled(enabled);
+			mClearAll.setEnabled(enabled);
+			mRemoveJar.setEnabled(enabled);
+		}
+		else if (parent != null && parent.equals(propertiesComposite)) {
+			parent.setEnabled(enabled);
+			book.setEnabled(enabled);
+		}
+	}
+
+	protected Control createDialogArea(Composite parent) {
+        getShell().setData( HelpUtil.CONTEXT_PROVIDER_KEY, this);
+        if (!this.mInEdit)
+        	HelpUtil.setHelp( getShell(), 
+        		HelpUtil.getContextId(IHelpConstants.CONTEXT_ID_NEW_DRIVER_DIALOG, 
+        				ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName()));
+        else
+        	HelpUtil.setHelp( getShell(), 
+            		HelpUtil.getContextId(IHelpConstants.CONTEXT_ID_EDIT_DRIVER_DIALOG, 
+            				ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName()));
+
+        Composite area = (Composite) super.createDialogArea(parent);
+
+		Composite contents = new Composite(area, SWT.NONE);
+		contents.setLayout(new GridLayout());
+		contents.setLayoutData(new GridData(GridData.FILL_BOTH));
+		contents.addDisposeListener(new DisposeListener(){
+			public void widgetDisposed(DisposeEvent e) {
+			}
+		});
+		
+		TabFolder baseComposite = new TabFolder(contents, SWT.TOP);
+		baseComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+		generalTab = new TabItem(baseComposite, SWT.None);
+		generalTab.setText(DriverMgmtMessages.getString("DriverDialog.Name.Type.Tab")); //$NON-NLS-1$
+
+		jarListTab = new TabItem(baseComposite, SWT.None);
+		jarListTab.setText(DriverMgmtMessages.getString("DriverDialog.JarList.Tab")); //$NON-NLS-1$
+		
+		propertiesTab = new TabItem(baseComposite, SWT.None);
+		propertiesTab.setText(DriverMgmtMessages.getString("DriverDialog.Properties.Tab")); //$NON-NLS-1$
+		
+		generalComposite = new Composite(baseComposite, SWT.NULL);
+		GridLayout layout = new GridLayout();
+		generalComposite.setLayout(layout);
+		generalTab.setControl(generalComposite);
+
+		jarListComposite = new Composite(baseComposite, SWT.NULL);
+		GridLayout jl_layout = new GridLayout();
+		jarListComposite.setLayout(jl_layout);
+		jarListTab.setControl(jarListComposite);
+
+		propertiesComposite = new Composite(baseComposite, SWT.NULL);
+		GridLayout p_layout = new GridLayout();
+		propertiesComposite.setLayout(p_layout);
+		propertiesTab.setControl(propertiesComposite);
+
+		if (!mInEdit && !hideDriverList ) {
+			Composite comboComposite = null; 
+			
+			CategoryDescriptor[] roots = CategoryUtils.getOrderedRootCategories();
+			if (mViewerFilter != null) {
+				roots = new CategoryDescriptor[] {((DriverTreeFilter) mViewerFilter).getCategoryDescriptor()};
+			}
+			if (roots != null && roots.length > 1) {
+				if (comboComposite == null)
+					comboComposite = createComboComposite(generalComposite);
+				Label tlabel = new Label(comboComposite, SWT.LEFT);
+				tlabel.setText(DriverMgmtMessages.getString("DriverDialog.DriverTypeFilter")); //$NON-NLS-1$
+				tlabel.setLayoutData(new GridData());
+				
+				mTypeCombo = new Combo (comboComposite, SWT.BORDER | SWT.READ_ONLY );
+				mTypeCombo.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false));
+				
+				mTypeCombo.add(ALL_STRING);
+				mTypeCombo.setData(ALL_STRING, roots);
+				
+				for (int i = 0; i < roots.length; i++) {
+					mTypeCombo.add(roots[i].getName());
+					mTypeCombo.setData(roots[i].getName(), roots[i]);
+				}
+				
+				mTypeCombo.addSelectionListener(new SelectionListener() {
+
+					public void widgetDefaultSelected(SelectionEvent e) {
+						handleSelection();
+					}
+
+					public void widgetSelected(SelectionEvent e) {
+						widgetDefaultSelected(e);
+					}
+				});
+			}
+
+			if (roots[0] != null && roots[0].getParent() != null && roots[0].getParent().getParent() == null) {
+				// too deep
+			}
+			else {
+				if (comboComposite == null)
+					comboComposite = createComboComposite(generalComposite);
+
+				Label vLabel = new Label(comboComposite, SWT.LEFT);
+				vLabel.setText(DriverMgmtMessages.getString("DriverDialog.VendorFilter")); //$NON-NLS-1$
+				vLabel.setLayoutData(new GridData());
+				
+				mVendorCombo = new Combo (comboComposite, SWT.BORDER | SWT.READ_ONLY );
+				mVendorCombo.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false));
+				
+				mVendorCombo.addSelectionListener( new SelectionListener() {
+	
+					public void widgetDefaultSelected(SelectionEvent e) {
+						handleVendorSelected();
+					}
+	
+					public void widgetSelected(SelectionEvent e) {
+						widgetDefaultSelected(e);
+					}
+				});
+				mVendorCombo.setEnabled(mIsEditable);
+				
+				if (roots != null && roots.length == 1 && roots[0] != null) {
+					CategoryDescriptor[] children = 
+						CategoryUtils.getOrderedChildCategories(roots[0].getId());
+					if (children != null && children.length > 0) {
+						mVendorCombo.add(ALL_STRING);
+						for (int i = 0; i < children.length; i++) {
+							mVendorCombo.add(children[i].getName());
+							mVendorCombo.setData(children[i].getName(), children[i]);
+						}
+					}
+					else if (mIsEditable) {
+						mVendorCombo.setEnabled(false);
+					}
+				}
+			}
+			
+			Label label = new Label(generalComposite, SWT.LEFT);
+			label.setText(DriverMgmtMessages
+					.getString("NewDriverDialog.label.availableTemplates")); //$NON-NLS-1$
+			GridData data = new GridData();
+			data.horizontalAlignment = GridData.FILL;
+			data.horizontalSpan = 2;
+			label.setLayoutData(data);
+			
+			mTreeViewer = new TreeViewer(generalComposite, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
+			mTreeViewer.setContentProvider(new DriverTreeTableContentProvider());
+			mTreeViewer.setLabelProvider(new DriverTreeTableLabelProvider());
+			mTreeViewer.setSorter(new ViewerSorter());
+			GridData tvGD = new GridData(SWT.FILL, SWT.FILL, true, true);
+			mTreeViewer.getTree().setLayoutData(tvGD);
+			mTreeViewer.getTree().setHeaderVisible(true);
+			if (this.mViewerFilter != null) {
+				mTreeViewer.addFilter(this.mViewerFilter);
+			}
+
+			TreeSortSelectionListener tssl1 = createTableColumn(mTreeViewer, DriverMgmtMessages.getString("DriverDialog.NameColumn"), DriverMgmtMessages.getString("DriverDialog.DriverNameColumn"), //$NON-NLS-1$ //$NON-NLS-2$
+					new TextSorter(0), SWT.UP, false);
+			tssl1.getColumn().setWidth(200);
+			tssl1.getColumn().setResizable(true);
+			tssl1.chooseColumnForSorting();
+			
+			TreeSortSelectionListener tssl2 = createTableColumn(mTreeViewer, DriverMgmtMessages.getString("DriverDialog.VendorColumn"), DriverMgmtMessages.getString("DriverDialog.DriverVendorColumn"), //$NON-NLS-1$ //$NON-NLS-2$
+					new TextSorter(1), SWT.UP, true);
+			tssl2.getColumn().setWidth(200);
+			tssl2.getColumn().setResizable(true);
+			
+			TreeSortSelectionListener tssl3 = createTableColumn(mTreeViewer, DriverMgmtMessages.getString("DriverDialog.Version"), DriverMgmtMessages.getString("DriverDialog.DriverVersionColumn"), //$NON-NLS-1$ //$NON-NLS-2$
+					new TextSorter(2), SWT.UP, false);
+			tssl3.getColumn().setWidth(100);
+			tssl3.getColumn().setResizable(true);
+	
+			mTreeViewer.setInput(new CategoryRoot());
+			mTreeViewer.expandToLevel(2);
+	
+			mTreeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+	
+				public void selectionChanged(SelectionChangedEvent event) {
+					DriverDialog.this.setErrorMessage(null);
+					StructuredSelection selection = (StructuredSelection) DriverDialog.this.mTreeViewer
+							.getSelection();
+					if (selection.getFirstElement() instanceof TemplateDescriptor) {
+						TemplateDescriptor descriptor = (TemplateDescriptor) selection
+								.getFirstElement();
+						// added for bug 249424 - BTF
+						if (DriverDialog.this.descriptor != null && DriverDialog.this.descriptor.equals(descriptor)) {
+							return;
+						}
+						DriverDialog.this.updateFromDescriptor(descriptor);
+						DriverDialog.this.mDriverNameText.setEnabled(true);
+					}
+					else if (selection.getFirstElement() instanceof CategoryDescriptor) {
+						DriverDialog.this.updateFromDescriptor(null);
+						DriverDialog.this.mDriverNameText.setEnabled(false);
+					}
+				}
+			});
+			
+			mTreeViewer.getTree().setEnabled(mIsEditable);
+		}
+		
+		Label label = new Label(generalComposite, SWT.NONE);
+		label.setText(DriverMgmtMessages
+				.getString("NewDriverDialog.label.driverNameText")); //$NON-NLS-1$
+
+		this.mDriverNameText = new Text(generalComposite, SWT.BORDER);
+		this.mDriverNameText.setLayoutData(new GridData(
+				GridData.FILL_HORIZONTAL));
+		this.mDriverNameText.setEnabled(mIsEditable);
+		this.mDriverNameText.addModifyListener(new ModifyListener() {
+
+			public void modifyText(ModifyEvent e) {
+				DriverDialog.this.mDriverName = DriverDialog.this.mDriverNameText
+						.getText();
+				validateName();
+			}
+		});
+		
+		{
+			final Label label2 = new Label(generalComposite, SWT.NONE);
+			label2.setText(DriverMgmtMessages
+					.getString("EditDriverDialog.label.driverTypeText")); //$NON-NLS-1$
+		}
+		{
+			this.mDriverTypeText = new Text(generalComposite, SWT.BORDER | SWT.READ_ONLY);
+			this.mDriverTypeText.setLayoutData(new GridData(
+					GridData.FILL_HORIZONTAL));
+		}
+		{
+			final Composite composite_1 = new Composite(jarListComposite, SWT.NONE);
+			GridData gridData = new GridData(GridData.FILL_BOTH
+					| GridData.GRAB_VERTICAL);
+			gridData.horizontalIndent = -5;
+			gridData.horizontalSpan = 2;
+			composite_1.setLayoutData(gridData);
+			final GridLayout gridLayout_1 = new GridLayout();
+			gridLayout_1.numColumns = 3;
+			composite_1.setLayout(gridLayout_1);
+			
+			{
+				final Label label1 = new Label(composite_1, SWT.NONE);
+				label1.setText(DriverMgmtMessages
+						.getString("EditDriverDialog.label.driverFileList")); //$NON-NLS-1$
+				gridData = new GridData();
+				gridData.horizontalSpan = 2;
+				label1.setLayoutData(gridData);
+			}
+			
+			{
+				this.list = new List(composite_1, SWT.BORDER | SWT.H_SCROLL
+						| SWT.V_SCROLL);
+				final GridData gridData_1 = new GridData(GridData.FILL_BOTH);
+				gridData_1.verticalSpan = 4;
+				gridData_1.horizontalSpan = 2;
+				this.list.setLayoutData(gridData_1);
+
+				this.list.addSelectionListener(new SelectionListener() {
+
+					public void widgetSelected(SelectionEvent e) {
+						boolean enabled = (DriverDialog.this.list
+								.getSelectionCount() > 0);
+						DriverDialog.this.mEditJar.setEnabled(enabled);
+						DriverDialog.this.mRemoveJar
+								.setEnabled(enabled);
+					}
+
+					public void widgetDefaultSelected(SelectionEvent e) {
+						widgetSelected(e);
+					}
+
+				});
+				this.list.setEnabled(mIsEditable);
+			}
+			{
+				this.mAddJar = new Button(composite_1, SWT.NONE);
+				this.mAddJar.addSelectionListener(new SelectionAdapter() {
+
+					public void widgetSelected(SelectionEvent e) {
+						handleLocationBrowseButtonPressed();
+						updateJarList();
+					}
+				});
+				this.mAddJar.setLayoutData(new GridData(
+						GridData.HORIZONTAL_ALIGN_FILL));
+				this.mAddJar.setText(DriverMgmtMessages
+						.getString("EditDriverDialog.button.addJar")); //$NON-NLS-1$
+				this.mAddJar.setEnabled(mIsEditable);
+			}
+			{
+				this.mEditJar = new Button(composite_1, SWT.NONE);
+				this.mEditJar.addSelectionListener(new SelectionAdapter() {
+
+					public void widgetSelected(SelectionEvent e) {
+						if (DriverDialog.this.list.getSelectionCount() > 0) {
+							String selectedItem = DriverDialog.this.list
+									.getItem(DriverDialog.this.list
+											.getSelectionIndex());
+							handleLocationEditButtonPressed(selectedItem);
+							updateJarList();
+						}
+					}
+				});
+				this.mEditJar.setLayoutData(new GridData(
+						GridData.HORIZONTAL_ALIGN_FILL));
+				this.mEditJar.setText(DriverMgmtMessages
+						.getString("EditDriverDialog.button.editJar")); //$NON-NLS-1$
+				this.mEditJar.setEnabled(mIsEditable);
+			}
+			{
+				this.mRemoveJar = new Button(composite_1, SWT.NONE);
+				this.mRemoveJar
+						.addSelectionListener(new SelectionAdapter() {
+
+							public void widgetSelected(SelectionEvent e) {
+								if (DriverDialog.this.list
+										.getSelectionCount() > 0) {
+									String[] selected = DriverDialog.this.list
+											.getSelection();
+									int selIndex = DriverDialog.this.list.getSelectionIndex();
+									for (int i = 0; i < selected.length; i++) {
+										DriverDialog.this.list
+												.remove(selected[i]);
+									}
+									if (selIndex < DriverDialog.this.list.getItemCount() &&
+											selIndex > -1) {
+										DriverDialog.this.list.setSelection(selIndex);
+									}
+									else if ((selIndex - 1) > -1) {
+										selIndex = selIndex - 1;
+										if (DriverDialog.this.list.getItem(selIndex) != null) {
+											DriverDialog.this.list.setSelection(selIndex);
+										}
+									}
+									else {
+										DriverDialog.this.mEditJar.setEnabled(false);
+										DriverDialog.this.mRemoveJar.setEnabled(false);
+									}
+									updateJarList();
+								}
+							}
+						});
+				this.mRemoveJar.setLayoutData(new GridData(
+						GridData.HORIZONTAL_ALIGN_FILL));
+				this.mRemoveJar.setText(DriverMgmtMessages
+						.getString("EditDriverDialog.button.removeJar")); //$NON-NLS-1$
+				this.mRemoveJar.setEnabled(mIsEditable);
+			}
+			{
+				this.mClearAll = new Button(composite_1, SWT.NONE);
+				this.mClearAll.setLayoutData(new GridData(
+						GridData.HORIZONTAL_ALIGN_FILL
+								| GridData.VERTICAL_ALIGN_BEGINNING));
+				this.mClearAll.setText(DriverMgmtMessages
+						.getString("EditDriverDialog.button.clearAllJars")); //$NON-NLS-1$
+				this.mClearAll.addSelectionListener(new SelectionAdapter() {
+
+					public void widgetSelected(SelectionEvent e) {
+						DriverDialog.this.list.removeAll();
+						updateJarList();
+					}
+				});
+				this.mClearAll.setEnabled(mIsEditable);
+			}
+		}
+
+		final Composite composite_2 = new Composite(propertiesComposite,
+				SWT.NONE);
+		GridData gridData = new GridData(GridData.FILL_BOTH);
+		gridData.horizontalIndent = -5;
+		gridData.horizontalSpan = 2;
+		composite_2.setLayoutData(gridData);
+		final GridLayout gridLayout_2 = new GridLayout();
+		gridLayout_2.numColumns = 1;
+		composite_2.setLayout(gridLayout_2);
+		
+		final Label label3 = new Label(composite_2, SWT.NONE);
+		label3.setText(DriverMgmtMessages
+				.getString("EditDriverDialog.label.properties")); //$NON-NLS-1$
+		gridData = new GridData();
+		gridData.horizontalSpan = 2;
+		label3.setLayoutData(gridData);
+		
+		{
+			book = new PageBook(composite_2, SWT.BORDER);
+			book.setLayoutData(new GridData(GridData.FILL_BOTH));
+	        PropertySheetPage page = new PropertySheetPage();
+	        page.createControl(book);
+	        if (mpsp != null) {
+	        	mpsp.removeChangeListener(psetChangedListener);
+	        }
+			mpsp = null;
+			if (this.mPropertySet != null) {
+				mpsp = new DriverPropertySourceProvider(this.mPropertySet, this.descriptor);
+			}
+			else {
+				mpsp = new DriverPropertySourceProvider();
+			}
+			mpsp.addChangeListener(psetChangedListener);
+			page.setPropertySourceProvider(mpsp);
+	        book.showPage(page.getControl());
+	        if (this.mPropertySet != null)
+	        	page.selectionChanged(null, new StructuredSelection(this.mPropertySet));
+	        book.setEnabled(mIsEditable);
+		}
+
+		this.mDriverNameText.setEnabled(false);
+		if (mTypeCombo != null) {
+			if (mTypeFilter != null && mTreeViewer != null) {
+				mTreeViewer.addFilter(mTypeFilter);
+				mTypeCombo.setText(mTypeFilter.getCategoryDescriptor().getName());
+			}
+			else {
+				mTypeCombo.select(0);
+			}
+			handleSelection();
+		}
+		if (mVendorCombo != null && mVendorCombo.getItemCount() > 0) {
+			if (mVendorFilter != null && mTreeViewer != null) {
+				mTreeViewer.addFilter(mVendorFilter);
+				mVendorCombo.setText(mVendorFilter.getCategoryDescriptor().getName());
+			}
+			else {
+				mVendorCombo.select(0);
+			}
+			handleVendorSelected();
+		}
+		
+		if (!mInEdit) {
+			setTitle(DriverMgmtMessages.getString("NewDriverDialog.title")); //$NON-NLS-1$
+			setMessage(DriverMgmtMessages.getString("DriverDialog.DialogMessage")); //$NON-NLS-1$
+
+			if (this.descriptor != null) {
+				this.mDriverName = this.descriptor.getName();
+			}
+			String quickName =
+				DriverMgmtMessages
+					.format("DriverDialog.quickdriver.name",  //$NON-NLS-1$
+						new String[]{this.mDriverName});
+			if (this.descriptor != null && this.mTreeViewer != null) {
+				mTreeViewer.setSelection(new StructuredSelection(this.descriptor), true);
+				this.mDriverName = quickName;
+				this.mDriverNameText.setText(this.mDriverName);
+			}
+			else if (this.descriptor != null){
+				updateFromDescriptor(descriptor);
+				this.mDriverName = quickName;
+				this.mDriverNameText.setText(this.mDriverName);
+			}
+			processEnabledStateForComposite(jarListComposite, false);
+			processEnabledStateForComposite(propertiesComposite, false);
+
+		}
+		else {
+			DriverInstance di = new DriverInstance(mInitialPropertySet);
+			if (di != null) {
+				this.mPropertySet = di.getPropertySet();
+				this.descriptor = di.getTemplate();
+				updateFromPropertySet();
+				updatePropertyDescriptors();
+			}
+			setTitle(DriverMgmtMessages.getString("EditDriverDialog.title")); //$NON-NLS-1$
+			setMessage(DriverMgmtMessages.getString("DriverDialog.EditDriver.message")); //$NON-NLS-1$
+		}
+		return area;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.dialogs.TitleAreaDialog#createContents(org.eclipse.swt.widgets.Composite)
+	 */
+	protected Control createContents(Composite parent) {
+		Control dialogComposite = super.createContents(parent);
+		
+		// to fix NPE reported in bug 233518, this code was moved here so OK button has been created - BTF
+		if (this.mOKButton != null || (this.mOKButton != null && !mIsEditable))
+			this.mOKButton.setEnabled(false);
+		return dialogComposite;
+	}
+
+	private Composite createComboComposite( Composite parent ) {
+		Composite comboComposite = new Composite ( parent, SWT.NONE);
+		comboComposite.setLayout(new GridLayout(2, false));
+		GridData CCdata = new GridData();
+		CCdata.horizontalAlignment = GridData.FILL;
+		CCdata.horizontalSpan = 2;
+		comboComposite.setLayoutData(CCdata);
+		return comboComposite;
+	}
+
+	private class TextSorter extends AbstractInvertableTableSorter {
+ 
+		private int mColumn = -1;
+		
+		public TextSorter ( int column ) {
+			super();
+			this.mColumn = column;
+		}
+		
+		public int compare(Viewer viewer, Object e1, Object e2) {
+			if (viewer instanceof TreeViewer) {
+				TreeViewer tv = (TreeViewer) viewer;
+				if (tv.getLabelProvider() instanceof DriverTreeTableLabelProvider) {
+					DriverTreeTableLabelProvider dtlp = 
+						(DriverTreeTableLabelProvider) tv.getLabelProvider();
+					String text1 = dtlp.getColumnText(e1, this.mColumn);
+					String text2 = dtlp.getColumnText(e2, this.mColumn);
+					return Collator.getInstance().compare(text1, text2);
+				}
+			}
+			if (e1 instanceof CategoryDescriptor && e2 instanceof CategoryDescriptor) {
+				String name1 = ((CategoryDescriptor)e1).getName();
+				String name2 = ((CategoryDescriptor)e2).getName();
+				return Collator.getInstance().compare(name1, name2);
+			}
+			else if (e1 instanceof TemplateDescriptor && e2 instanceof TemplateDescriptor) {
+				String name1 = ((TemplateDescriptor)e1).getName();
+				String name2 = ((TemplateDescriptor)e2).getName();
+				return Collator.getInstance().compare(name1, name2);
+			}
+			return Collator.getInstance().compare((String) e1, (String) e2);
+		}
+	}
+
+	public static TreeSortSelectionListener createTableColumn(
+			TreeViewer viewer, String text, String tooltip,
+			AbstractInvertableTableSorter sorter, int initialDirection,
+			boolean keepDirection) {
+		TreeColumn column = new TreeColumn(viewer.getTree(), SWT.LEFT);
+		column.setText(text);
+		column.setToolTipText(tooltip);
+		return new TreeSortSelectionListener(viewer, column, sorter,
+				initialDirection, keepDirection);
+	}
+ 
+	/*
+	 * Create the property sheet page
+	 * @param book
+	 * @return
+	 */
+	protected IPage createDefaultPage(PageBook book) {
+        PropertySheetPage page = new PropertySheetPage();
+        page.createControl(book);
+        return page;
+    }
+
+	/*
+	 * Is the property set valid?
+	 */
+	private boolean isValid() {
+		return isValid(false);
+	}
+
+	/*
+	 * Is the property set valid?
+	 */
+	private boolean isValid(boolean inflag) {
+		IPropertySet testSet = null;
+		if (inflag == true && this.mPropertySet != null) {
+			testSet = this.mPropertySet;
+		}
+		else if (this.descriptor != null){
+			testSet = createTestPSet();
+		}
+		if (testSet != null) {
+			DriverValidator testValidator = new DriverValidator(
+					this.descriptor, testSet);
+			boolean flag = testValidator.isValid(false);
+			if (!flag) {
+				try {
+					setErrorMessage(testValidator.getMessage());
+					return flag;
+				} catch (SWTException e) {
+					if (e.code == SWT.ERROR_WIDGET_DISPOSED) {
+						// move on... this is to get around a weird
+						// bug in the platform having to do with
+						// custom property descriptors 
+					}
+					else
+						throw e;
+				}
+			}
+			else
+				try {
+					setErrorMessage(null);
+					return flag;
+				} catch (SWTException e) {
+					if (e.code == SWT.ERROR_WIDGET_DISPOSED) {
+						// move on... this is to get around a weird
+						// bug in the platform having to do with
+						// custom property descriptors 
+					}
+					else
+						throw e;
+				}
+
+			if (this.mOKButton != null && !this.mOKButton.isDisposed())
+				this.mOKButton.setEnabled(flag);
+		}
+		else {
+			if (this.mOKButton != null && !this.mOKButton.isDisposed())
+				this.mOKButton.setEnabled(false);
+			return false;
+		}
+		return true;
+	}
+
+	/*
+	 * Create a test set for validation
+	 */
+	private IPropertySet createTestPSet() {
+		String propIdPrefix = DriverMgmtMessages
+				.getString("EditDriverDialog.text.id_test_prefix"); //$NON-NLS-1$
+		String propId = propIdPrefix + this.mDriverName;
+		IPropertySet testPropertySet =
+			DriverManager.getInstance().createDefaultInstance(this.descriptor.getId());
+		testPropertySet.setID(propId);
+		
+
+		Properties props = testPropertySet.getBaseProperties();
+		if (props
+				.getProperty(IDriverMgmtConstants.PROP_DEFN_JARLIST) != null) {
+			String jarlist = props
+					.getProperty(IDriverMgmtConstants.PROP_DEFN_JARLIST);
+			this.mJarList = jarlist.trim();
+		}
+		
+		testPropertySet.setName(this.mDriverName);
+		props = new Properties();
+		if (this.mJarList == null) {
+			String jarList = DriverManager.getInstance().updatePluginJarList(this.descriptor);
+			this.mJarList = jarList;
+		}
+		props
+				.setProperty(IDriverMgmtConstants.PROP_DEFN_JARLIST,
+						this.mJarList);
+
+		IConfigurationElement[] templateprops = this.descriptor.getProperties();
+		if (templateprops != null && templateprops.length > 0) {
+			for (int i = 0; i < templateprops.length; i++) {
+				IConfigurationElement prop = templateprops[i];
+
+				String propid = prop.getAttribute("id"); //$NON-NLS-1$
+				String propvalue = prop.getAttribute("value"); //$NON-NLS-1$
+
+				IDriverValuesProvider driverValsProvider = null;
+				IDriverValuesProvider overrideDriverValsProvider = null;
+
+				OverrideTemplateDescriptor[] otds = null;
+
+				if (descriptor != null) {
+					
+					otds = OverrideTemplateDescriptor.getByDriverTemplate(descriptor.getId());
+					if (otds != null && otds.length > 0) {
+						overrideDriverValsProvider =
+							otds[0].getValuesProviderClass();
+					}
+					driverValsProvider =
+						(IDriverValuesProvider) descriptor.getValuesProviderClass();
+				}
+
+				boolean removeIt = false;
+				if (driverValsProvider != null) {
+					String valsPropValue = driverValsProvider.createDefaultValue(propid);
+					if (valsPropValue != null) {
+						propvalue = valsPropValue;
+					}
+				}
+				if (overrideDriverValsProvider != null) {
+					String overrideValsPropValue = overrideDriverValsProvider.createDefaultValue(propid);
+					if (overrideValsPropValue != null) {
+						propvalue = overrideValsPropValue;
+					}
+				}
+				if (otds != null && otds.length > 0) {
+					String temp =
+						otds[0].getPropertyValueFromId(propid);
+					if (temp != null && temp.length() > 0) {
+						propvalue = temp;
+					}
+					if (otds[0].getPropertyRemoveFlagFromID(propid)) {
+						removeIt = true;
+					}
+				}
+				if (this.mPropertySet != null && this.mPropertySet.getBaseProperties() != null) {
+					propvalue = this.mPropertySet.getBaseProperties().getProperty(
+							propid);
+				}
+				if (propvalue == null) {
+					if (!removeIt) 
+						props.setProperty(propid, propvalue == null ? new String()
+							: propvalue);
+					else
+						props.remove(propid);
+				}
+				if (propvalue == null) propvalue = ""; //$NON-NLS-1$
+				props.setProperty(propid, propvalue);
+			}
+		}
+		props.setProperty(IDriverMgmtConstants.PROP_DEFN_TYPE, this.descriptor
+				.getId());
+		testPropertySet.setBaseProperties(props);
+		return testPropertySet;
+	}
+	
+	/**
+	 * Return the property set
+	 */
+	public IPropertySet getPropertySet() {
+		return this.mPropertySet;
+	}
+	
+	/**
+	 * Return the initial property set (used to cancel pending changes)
+	 */
+	public IPropertySet getInitialPropertySet() {
+		return this.mInitialPropertySet;
+	}
+
+	/*
+	 * Make sure the name isn't used already
+	 */
+	private void validateName() {
+		/*
+		 * Name is valid if:
+		 * 1) It's not null or an empty string
+		 * 2) If we're creating a new driver (i.e. !mInEdit),
+		 * 		check name. If name brings back a driver, 
+		 * 		check the IDs.
+		 * 3) If we're editing a new driver (i.e. mInEdit),
+		 * 		if name stays same, we're ok. If name brings back
+		 * 		a different driver, it's not ok.
+		 */
+		
+		boolean isOk = false;
+		String testName = "";//$NON-NLS-1$
+		if (this.mDriverName != null)
+			testName = this.mDriverName.trim();
+		else if (this.mDriverName == null) {
+			return;
+		}
+
+		// changed the if slightly to fix BZ 176781 - BTF
+		if (testName.trim().length() == 0 && this.mPropertySet != null) {
+			String errorMessage = DriverMgmtMessages
+				.getString("DriverValidator.msg.empty_name"); //$NON-NLS-1$
+			this.setErrorMessage(errorMessage);
+			return;
+		}
+
+		String propId = null;
+		if (this.mPropertySet != null) {
+			propId = this.mPropertySet.getID();
+		}
+		
+		// Check to see if we got back something by name
+		Object obj = DriverManager.getInstance().getDriverInstanceByName(
+				testName);
+		if (obj != null) {
+			if (!mInEdit) {
+				// creating new driver, name matches existing driver
+				String errorMessage = DriverMgmtMessages
+					.getString("NewDriverDialog.driverExistsWithName"); //$NON-NLS-1$
+				try {
+					this.setErrorMessage(errorMessage);
+				} catch (SWTException swt_e) {
+					// just in case the message widget is disposed, since we can't grab
+					// it directly
+				}
+				return;
+			}
+			else {
+				// We're in edit mode and user cannot change the name so do nothing
+				isOk = true;
+			}
+		}
+		else if (obj == null) {
+			isOk = true;
+		}
+
+		if (isOk && this.mTreeViewer != null && this.descriptor == null) {
+			StructuredSelection selection = (StructuredSelection) DriverDialog.this.mTreeViewer
+					.getSelection();
+			if (selection != null && selection.getFirstElement() instanceof TemplateDescriptor) {
+				TemplateDescriptor descriptor = (TemplateDescriptor) selection
+						.getFirstElement();
+				this.descriptor = descriptor;
+			}
+			isOk = isValid(true);
+		}
+		else if (this.descriptor != null) {
+			isOk = isValid(true);
+		}
+
+		if (this.mOKButton != null && !this.mOKButton.isDisposed())
+			this.mOKButton.setEnabled(isOk);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
+	 */
+	protected void createButtonsForButtonBar(Composite parent) {
+		this.mOKButton = createButton(parent, IDialogConstants.OK_ID,
+				IDialogConstants.OK_LABEL, true);
+		createButton(parent, IDialogConstants.CANCEL_ID,
+				IDialogConstants.CANCEL_LABEL, false);
+	}
+
+	/**
+	 * Set the instance
+	 * 
+	 * @param propset
+	 */
+	public void setPropertySet(IPropertySet propset) {
+		this.mPropertySet = propset;
+		this.mInitialPropertySet = DuplicatePropertySet(propset);
+	}
+
+	public void setInitialTemplate(String templateID) {
+		TemplateDescriptor td = TemplateDescriptor.getDriverTemplateDescriptor(templateID);
+		if (td != null) {
+			this.descriptor = td;
+		}
+	}
+
+	/*
+	 * Duplicates the passed in property set
+	 * @param pset
+	 * @return
+	 */
+	private IPropertySet DuplicatePropertySet ( IPropertySet pset ) {
+		IPropertySet newPset = new PropertySetImpl(pset.getName(), pset.getID());
+		if (pset.getBaseProperties().size() > 0) {
+			Properties newProps = new Properties();
+			newPset.setBaseProperties(newProps);
+			newPset.getBaseProperties().putAll(pset.getBaseProperties());
+		}
+		return newPset;
+	}
+
+	/*
+	 * Open an appropriate directory browser
+	 */
+	private void handleLocationBrowseButtonPressed() {
+		FileDialog dialog = new FileDialog(getShell());
+		dialog.setText(DriverMgmtMessages
+				.getString("EditDriverDialog.title.filebrowse")); //$NON-NLS-1$
+
+		String dirName = previouslyBrowsedDirectory;
+
+		if (dirName.length() == 0) //$NON-NLS-1$
+			dialog.setFilterPath(ResourcesPlugin.getWorkspace().getRoot()
+					.getLocation().toOSString());
+		else {
+			File path = new File(dirName);
+			if (path.exists()) {
+				dialog.setFilterPath(new Path(dirName).toOSString());
+			} else {
+				dialog.setFilterPath(new Path(System.getProperty("user.home")).toOSString());
+			}
+		}
+
+		String selectedDirectory = dialog.open();
+		if (selectedDirectory != null) {
+			previouslyBrowsedDirectory = new Path(selectedDirectory).removeLastSegments(1).toOSString();
+			this.list.add(selectedDirectory);
+		}
+	}
+
+	/*
+	 * Update the jar list
+	 */
+	private void updateJarList() {
+		this.mJarList = createList(this.list.getItems());
+		if (this.mPropertySet != null)
+			this.mPropertySet.getBaseProperties().setProperty(
+				IDriverMgmtConstants.PROP_DEFN_JARLIST, this.mJarList);
+		validateName();
+		updatePropertyDescriptors();
+		if (this.mJarList.trim().length() > 0) {
+			this.mClearAll.setEnabled(true);
+		}
+		else {
+			this.mClearAll.setEnabled(false);
+		}
+	}
+
+	/*
+	 * Create a list from an array of strings
+	 * 
+	 * @param items
+	 * @return
+	 */
+	private String createList(String[] items) {
+		StringBuffer buffer = new StringBuffer();
+		for (int i = 0; i < items.length; i++) {
+			if (items[i] != null) {
+				buffer.append(items[i]);
+				if (i + 1 < items.length)
+					buffer.append(IDriverMgmtConstants.PATH_DELIMITER);
+			}
+		}
+		return buffer.toString();
+	}
+
+	/*
+	 * Update property descriptors for the selected instance
+	 */
+	private void updatePropertyDescriptors() {
+        PropertySheetPage page = new PropertySheetPage();
+        page.createControl(book);
+		DriverPropertySourceProvider mpsp = null;
+		if (this.mPropertySet != null && this.descriptor != null) {
+			mpsp = new DriverPropertySourceProvider(this.mPropertySet, this.descriptor);
+		}
+		else {
+			mpsp = new DriverPropertySourceProvider();
+		}
+		page.setPropertySourceProvider(mpsp);
+        book.showPage(page.getControl());
+        if (this.mPropertySet != null) {
+        	page.selectionChanged(null, new StructuredSelection(this.mPropertySet));
+        }
+	}
+
+	private void updateFromDescriptor (TemplateDescriptor descriptor) {
+		
+		if (descriptor != null) {
+			this.descriptor = descriptor;
+			processEnabledStateForComposite(jarListComposite, true);
+			processEnabledStateForComposite(propertiesComposite, true);
+			this.mDriverTypeText.setText(DriverDialog.this.descriptor.getName());
+			this.mPropertySet = null;
+			this.mJarList = null;
+			this.list.removeAll();
+			if (!mInEdit) {
+				this.mPropertySet = createTestPSet();
+				this.mPropertySet.setName(descriptor.getName());
+			}
+			updateFromPropertySet();
+			updatePropertyDescriptors();
+			validateName();
+			boolean isOk = isValid();
+			if (this.mOKButton != null)
+				this.mOKButton.setEnabled(isOk);
+		}
+		else {
+			this.descriptor = null;
+			this.mPropertySet = null;
+			this.mJarList = null;
+			this.mDriverName = "";
+			this.mDriverTypeText.setText("");
+			this.mDriverNameText.setText("");
+			this.list.removeAll();
+			updateJarList();
+			updateFromPropertySet();
+			updatePropertyDescriptors();
+			validateName();
+			boolean isOk = isValid();
+			if (this.mOKButton != null)
+				this.mOKButton.setEnabled(isOk);
+		}
+	}
+	
+	/*
+	 * Update the UI from the property set
+	 */
+	private void updateFromPropertySet() {
+		if (this.descriptor != null) {
+			this.mDriverTypeText.setText(this.descriptor.getName());
+			if (this.descriptor.getJarList() != null
+					&& this.descriptor.getJarList().length() > 0) {
+				String[] jarListArray = parseString(this.descriptor
+						.getJarList());
+				this.list.removeAll();
+				for (int i = 0; i < jarListArray.length; i++) {
+					this.list.add(jarListArray[i]);
+				}
+			}
+		}
+
+		if (mIsEditable) {
+			mAddJar.setEnabled(true);
+			mEditJar.setEnabled(false);
+			mRemoveJar.setEnabled(false);
+			mClearAll.setEnabled(false);
+		}
+		
+		if (this.mPropertySet != null) {
+			this.mDriverNameText.setText(this.mPropertySet.getName());
+			this.mDriverName = this.mPropertySet.getName();
+
+			String jarList = this.mPropertySet.getBaseProperties().getProperty(
+					IDriverMgmtConstants.PROP_DEFN_JARLIST);
+			this.mJarList = jarList;
+			String[] jarListArray = parseString(jarList);
+			this.list.removeAll();
+			for (int i = 0; i < jarListArray.length; i++) {
+				this.list.add(jarListArray[i]);
+			}
+			if (jarList != null && jarList.trim().length() > 0 && mIsEditable) {
+				mClearAll.setEnabled(true);
+			}
+		}
+		else {
+			mAddJar.setEnabled(false);
+		}
+
+		isValid(true);
+		if (this.mPropertySet != null)
+			validateName();
+	}
+
+	/*
+	 * Parse a string into an array
+	 */
+	private String[] parseString(String str_list) {
+		StringTokenizer tk = new StringTokenizer(str_list,
+				IDriverMgmtConstants.PATH_DELIMITER);
+		String[] pieces = new String[tk.countTokens()];
+		int index = 0;
+		while (tk.hasMoreTokens())
+			pieces[index++] = tk.nextToken();
+		return pieces;
+	}
+
+	/*
+	 * Browse for a location, with the location passed in as the default
+	 */
+	private void handleLocationEditButtonPressed(String editLocation) {
+		FileDialog dialog = new FileDialog(getShell());
+		dialog.setText(DriverMgmtMessages
+				.getString("EditDriverDialog.title.filebrowse")); //$NON-NLS-1$
+
+		String dirName = editLocation;
+
+		dialog.setFileName(dirName);
+		if (dirName.length() == 0) //$NON-NLS-1$
+			dialog.setFilterPath(ResourcesPlugin.getWorkspace().getRoot()
+					.getLocation().toOSString());
+		else {
+			File path = new File(dirName);
+			if (path.exists())
+				dialog.setFilterPath(new Path(dirName).toOSString());
+			else {
+				dialog.setFilterPath(dirName);
+			}
+		}
+
+		String selectedDirectory = dialog.open();
+		if (selectedDirectory != null) {
+			previouslyBrowsedDirectory = new Path(selectedDirectory).removeLastSegments(1).toOSString();
+			this.list.remove(editLocation);
+			this.list.add(selectedDirectory);
+
+			if (this.list.getItemCount() > 1) {
+				if (MessageDialog
+						.openQuestion(
+								this.getShell(),
+								DriverMgmtMessages
+										.getString("EditDriverDialog.msg.updateAllJarsToSamePath.title"), //$NON-NLS-1$
+								DriverMgmtMessages
+										.getString("EditDriverDialog.msg.updateAllJarsToSamePath.message")) == true) { //$NON-NLS-1$
+					String[] items = this.list.getItems();
+
+					String separator = "\\";//$NON-NLS-1$
+					if (selectedDirectory.indexOf("/") > -1)//$NON-NLS-1$
+						separator = "/";//$NON-NLS-1$
+
+					int location = selectedDirectory.lastIndexOf(separator);
+					if (location > -1
+							&& location < selectedDirectory.length() - 1) {
+						String path = selectedDirectory.substring(0, location);
+						for (int i = 0; i < items.length; i++) {
+							String directory = items[i];
+							if (!directory.equals(selectedDirectory)) {
+								int location2 = directory
+										.lastIndexOf(separator);
+								String filename = directory;
+								if (location2 > -1
+										&& location2 < directory.length() - 1) {
+									filename = directory.substring(
+											location2 + 1, directory.length());
+								}
+								String newdirectory = path + separator
+										+ filename;
+								this.list.remove(directory);
+								this.list.add(newdirectory);
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+
+	protected void okPressed() {
+		
+		if (!this.mInEdit) {
+			if (this.descriptor != null) {
+				String propId = DriverMgmtMessages
+						.getString("NewDriverDialog.text.id_prefix") + this.mDriverName; //$NON-NLS-1$
+
+				if (this.mPropertySet == null) {
+					DriverInstance newDriver =
+						DriverManager.getInstance().createNewDriverInstance(this.descriptor.getId(),
+								this.mDriverName.trim(), null);
+					this.mPropertySet = newDriver.getPropertySet();
+				}
+				this.mPropertySet.setID(propId);
+			}
+		}
+		
+		String propIdPrefix = DriverMgmtMessages
+			.getString("EditDriverDialog.text.id_prefix"); //$NON-NLS-1$
+		String propId = propIdPrefix + this.descriptor.getId() + "." + this.mDriverName; //$NON-NLS-1$
+//		String propId = propIdPrefix + this.mDriverName;
+		if (this.mPropertySet == null) {
+			this.mPropertySet = new PropertySetImpl(propId, this.mDriverName);
+		}
+		else {
+			this.mPropertySet.setID(propId);
+		}
+		this.mPropertySet.setName(this.mDriverName);
+		Properties props = new Properties();
+		props
+				.setProperty(IDriverMgmtConstants.PROP_DEFN_JARLIST,
+						this.mJarList);
+		
+		IConfigurationElement[] templateprops = this.descriptor.getProperties();
+		if (templateprops != null && templateprops.length > 0) {
+			for (int i = 0; i < templateprops.length; i++) {
+				IConfigurationElement prop = templateprops[i];
+				String id = prop.getAttribute("id"); //$NON-NLS-1$
+				String value = this.mPropertySet.getBaseProperties()
+						.getProperty(id);
+				if (value == null) {
+					value = prop.getAttribute("value"); //$NON-NLS-1$
+					OverrideTemplateDescriptor[] otds = 
+						OverrideTemplateDescriptor.getByDriverTemplate(this.descriptor.getId());
+					if (otds != null && otds.length > 0) {
+						boolean removetemp =
+							otds[0].getPropertyRemoveFlagFromID(id);
+						if (removetemp) continue;
+						String valuetemp =
+							otds[0].getPropertyValueFromId(id);
+						if (valuetemp != null && valuetemp.length() > 0)
+							value = valuetemp;
+					}
+				}
+				props.setProperty(id, value);
+			}
+		}
+		props.setProperty(IDriverMgmtConstants.PROP_DEFN_TYPE, this.descriptor
+				.getId());
+		this.mPropertySet.setBaseProperties(props);
+		
+		this.psetChangedListener = null;
+	
+		saveState();
+
+		super.okPressed();
+	}
+
+	/**
+	 * Retrieve the selected instance
+	 * 
+	 * @return
+	 */
+	public IPropertySet getSelectedDefinition() {
+		return this.mPropertySet;
+	}
+
+	public void setHideDriverList (boolean flag ) {
+		this.hideDriverList = flag;
+	}
+	
+	public boolean getHideDriverList() {
+		return this.hideDriverList;
+	}
+
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+
+		int width = 600;
+		int height = 500;
+
+		if (!this.mInEdit)
+			newShell.setText(DriverMgmtMessages
+				.getString("NewDriverDialog.windowTitle")); //$NON-NLS-1$
+		else
+			newShell.setText(DriverMgmtMessages
+					.getString("EditDriverDialog.windowTitle")); //$NON-NLS-1$
+			
+
+		IDialogSettings dset = ConnectivityUIPlugin.getDefault()
+			.getDialogSettings();
+		if (dset != null) {
+			IDialogSettings dSection = dset.getSection(MEMENTO_ROOT);
+			if (dSection != null) {
+				if (dSection.get(MEMENTO_DIALOG_SIZE_HEIGHT) != null
+						&& dSection.get(MEMENTO_DIALOG_SIZE_HEIGHT).trim()
+								.length() > 0) {
+					height = dSection.getInt(MEMENTO_DIALOG_SIZE_HEIGHT);
+					width = dSection.getInt(MEMENTO_DIALOG_SIZE_WIDTH);
+				}
+			}
+		}
+		newShell.setSize(width, height);
+		centerDialog(newShell);
+	}
+
+	/*
+	 * Center the dialog relative to its parent
+	 */
+	private void centerDialog(Shell newShell){
+		Composite parent = newShell.getParent();
+		Rectangle parentSize = parent.getBounds();
+		Rectangle newShellSize = newShell.getBounds();
+
+		int x, y;
+		x = (parentSize.width - newShellSize.width)/2 + parentSize.x;
+		y = (parentSize.height - newShellSize.height)/2 + parentSize.y;
+
+		newShell.setLocation(new Point(x, y));		
+	}
+
+	/*
+	 * Save the dialog settings
+	 */
+	private void saveState() {
+		IDialogSettings dset = ConnectivityUIPlugin.getDefault()
+				.getDialogSettings();
+		if (dset != null) {
+			IDialogSettings dSection = dset.getSection(MEMENTO_ROOT);
+			if (dSection == null)
+				dSection = dset.addNewSection(MEMENTO_ROOT);
+			if (dSection != null) {
+				Point size = getShell().getSize();
+				dSection.put(MEMENTO_DIALOG_SIZE_HEIGHT, size.y);
+				dSection.put(MEMENTO_DIALOG_SIZE_WIDTH, size.x);
+			}
+		}
+	}
+	
+	public void setVendorFilter ( DriverTreeFilter filter ) {
+		this.mViewerFilter = filter;
+	}
+	public void setTypeFilter ( DriverTreeFilter filter ) {
+		this.mTypeFilter = filter;
+	}
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+	
+   /**
+     * Initializes the bounds (location, size) of the dialog.  This implementation adjusts the width of
+     * the dialog so that the complete current message can be displayed.
+     * </p>
+     */
+    protected void initializeBounds() {
+        super.initializeBounds();
+        
+        Shell shell = getShell();
+        Rectangle boundsRect = shell.getBounds();
+        int dialogWidth = boundsRect.width;
+        
+        int preferredMsgAreaWidth = getPreferredMessageAreaWidth();
+        int preferredDialogWidth = preferredMsgAreaWidth + 20; // add some dialog border width
+        if (dialogWidth < preferredDialogWidth) {
+            Rectangle newBoundsRect = new Rectangle(boundsRect.x, boundsRect.y, preferredDialogWidth, boundsRect.height);
+            Rectangle constrainedBoundsRect = getConstrainedShellBounds(newBoundsRect);
+            shell.setBounds(constrainedBoundsRect);
+        }
+    }
+
+    /**
+     * Gets the preferred width for the message area.  The message area for a TitleAreaDialog is hard-coded 
+     * to show only two lines for the message, so our preferred width is the width of the current message 
+     * divided by two plus a "fudge factor" to account for the message image area and word-wrapping variances.
+     *  
+     * @return the preferred message area width
+     */
+    private int getPreferredMessageAreaWidth() {
+        int msgWidth = 0;
+        
+        Control dialogArea = getDialogArea();
+        if (dialogArea != null) {
+            GC gc = new GC(dialogArea);
+            String dialogMessage = DriverMgmtMessages.getString("DriverDialog.DialogMessage");
+            Point strExtent = gc.stringExtent(dialogMessage);
+            int strWidth = strExtent.x;
+            gc.dispose();
+            msgWidth = (strWidth / 2) + 100; // add fudge factor
+        }
+        
+        return msgWidth;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/DriverListContentProvider.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/DriverListContentProvider.java
new file mode 100644
index 0000000..692bb28
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/DriverListContentProvider.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.dialogs;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.drivers.DriverManager;
+import org.eclipse.datatools.connectivity.drivers.models.DriversProvider;
+import org.eclipse.datatools.connectivity.internal.ui.DriverTreeContentProvider;
+
+public class DriverListContentProvider extends DriverTreeContentProvider {
+
+	public Object[] getElements(Object element) {
+		if (element instanceof DriversProvider) {
+			DriverInstance[] dinstances = 
+				DriverManager.getInstance().getAllDriverInstances();
+			ArrayList list = new ArrayList();
+			for (int i = 0; i < dinstances.length; i++) {
+				list.add(dinstances[i].getPropertySet());
+			}
+			return list.toArray();
+		}
+		return super.getElements(element);
+	}
+
+	public List getDriverInstances() {
+		DriverInstance[] dinstances = 
+			DriverManager.getInstance().getAllDriverInstances();
+		ArrayList list = new ArrayList();
+		for (int i = 0; i < dinstances.length; i++) {
+			list.add(dinstances[i].getPropertySet());
+		}
+		return list;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/DriverListLabelProvider.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/DriverListLabelProvider.java
new file mode 100644
index 0000000..efe729c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/DriverListLabelProvider.java
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.dialogs;
+
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.drivers.IPropertySet;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
+import org.eclipse.datatools.connectivity.internal.ui.DriverTreeLabelProvider;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+public class DriverListLabelProvider extends DriverTreeLabelProvider implements ITableLabelProvider {
+
+	public String getText(Object element) {
+		if (element instanceof IPropertySet) {
+			return ((IPropertySet)element).getName();
+		}
+		return super.getText(element);
+	}
+
+	public Image getColumnImage(Object element, int columnIndex) {
+		return null;
+	}
+
+	public String getColumnText(Object element, int columnIndex) {
+		if (element instanceof IPropertySet) {
+			IPropertySet pset = (IPropertySet) element;
+			DriverInstance di = new DriverInstance(pset);
+			String vendor = 
+				di.getNamedPropertyByID(IJDBCDriverDefinitionConstants.DATABASE_VENDOR_PROP_ID);
+			String version = 
+				di.getNamedPropertyByID(IJDBCDriverDefinitionConstants.DATABASE_VERSION_PROP_ID);
+
+			DatabaseDefinition dbDef =
+				RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(vendor, version);
+
+			String versionDisplay = null;
+			String vendorDisplay = null;
+			if (dbDef != null) {
+				versionDisplay = dbDef.getVersionDisplayString();
+				vendorDisplay = dbDef.getProductDisplayString();
+			}
+			
+			if (columnIndex == 0)
+				return di.getName();
+			else if (columnIndex == 1) {
+				if (vendorDisplay != null && vendorDisplay.trim().length() > 0) {
+					return vendorDisplay;
+				}
+			}
+			else if (columnIndex == 2) {
+				if (versionDisplay != null && versionDisplay.trim().length() > 0) {
+					return versionDisplay;
+				}
+			}
+		}
+		return null;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/DriverTreeTableContentProvider.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/DriverTreeTableContentProvider.java
new file mode 100644
index 0000000..3f7eaf0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/DriverTreeTableContentProvider.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.dialogs;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.drivers.DriverManager;
+import org.eclipse.datatools.connectivity.drivers.models.CategoryDescriptor;
+import org.eclipse.datatools.connectivity.drivers.models.TemplateDescriptor;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+public class DriverTreeTableContentProvider implements ITreeContentProvider {
+
+	public DriverTreeTableContentProvider() {
+		// empty
+	}
+
+	public Object[] getChildren(Object parentElement) {
+		if (parentElement instanceof CategoryRoot) {
+			return CategoryDescriptor.getRootCategories();
+		}
+		else if (parentElement instanceof CategoryDescriptor) {
+			CategoryDescriptor cd = (CategoryDescriptor) parentElement;
+			ArrayList templateList = new ArrayList();
+			gatherTemplates(cd, templateList);
+			return templateList.toArray();
+		}
+		return new Object[0];
+	}
+
+	public Object getParent(Object element) {
+		if (element instanceof CategoryDescriptor) {
+			return ((CategoryDescriptor)element).getParent();
+		}
+		else if (element instanceof TemplateDescriptor) {
+			return ((TemplateDescriptor)element).getParent();
+		}
+		return null;
+	}
+
+	public boolean hasChildren(Object element) {
+		return getChildren(element).length > 0;
+	}
+
+	public Object[] getElements(Object inputElement) {
+		return getChildren(inputElement);
+	}
+
+	public void dispose() {
+	}
+
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+	}
+
+	private void gatherTemplates ( CategoryDescriptor cd, List totalList ) {
+		if (cd.getAssociatedDriverTypes().size() > 0 )
+			totalList.addAll(cd.getAssociatedDriverTypes());
+		if (cd.getChildCategories().size() > 0) {
+			Iterator iter = cd.getChildCategories().iterator();
+			while (iter.hasNext()) {
+				gatherTemplates((CategoryDescriptor) iter.next(), totalList);
+			}
+		}
+	}
+
+	public List getDriverInstances() {
+		DriverInstance[] dinstances = 
+			DriverManager.getInstance().getAllDriverInstances();
+		ArrayList list = new ArrayList();
+		for (int i = 0; i < dinstances.length; i++) {
+			list.add(dinstances[i].getPropertySet());
+		}
+		return list;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/DriverTreeTableLabelProvider.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/DriverTreeTableLabelProvider.java
new file mode 100644
index 0000000..43c86fd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/DriverTreeTableLabelProvider.java
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.dialogs;
+
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
+import org.eclipse.datatools.connectivity.drivers.models.CategoryDescriptor;
+import org.eclipse.datatools.connectivity.drivers.models.TemplateDescriptor;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.osgi.util.TextProcessor;
+import org.eclipse.swt.graphics.Image;
+
+public class DriverTreeTableLabelProvider extends LabelProvider implements
+		ITableLabelProvider {
+
+	public Image getColumnImage(Object element, int columnIndex) {
+		return null;
+	}
+
+	public String getColumnText(Object element, int columnIndex) {
+		if (element instanceof TemplateDescriptor) {
+			TemplateDescriptor td = (TemplateDescriptor) element;
+
+			String name = TextProcessor.process(td.getName());
+			String vendor = 
+				td.getPropertyValueFromId(IJDBCDriverDefinitionConstants.DATABASE_VENDOR_PROP_ID);
+			String version = 
+				td.getPropertyValueFromId(IJDBCDriverDefinitionConstants.DATABASE_VERSION_PROP_ID);
+			
+			if (vendor == null)
+				vendor = ""; //$NON-NLS-1$
+			if (version == null)
+				version = ""; //$NON-NLS-1$
+			DatabaseDefinition dbDef =
+				RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(vendor, version);
+
+			String versionDisplay = null;
+			String vendorDisplay = null;
+			if (dbDef != null) {
+				versionDisplay = TextProcessor.process(dbDef.getVersionDisplayString());
+				vendorDisplay = TextProcessor.process(dbDef.getProductDisplayString());
+			}
+
+			switch (columnIndex) {
+			case 0:
+				return name;
+			case 1: 
+				return vendorDisplay;
+			case 2:
+				return versionDisplay;
+			default:
+				return ""; //$NON-NLS-1$
+			}
+		}
+		else if (element instanceof CategoryDescriptor) {
+			CategoryDescriptor cd = (CategoryDescriptor) element;
+			String name = cd.getName();
+			switch (columnIndex) {
+				case 0:
+					return name;
+				default:
+					return ""; //$NON-NLS-1$
+			}
+		}
+		return new String();
+	}
+
+	public String getText(Object element) {
+		if (element instanceof TemplateDescriptor) {
+			TemplateDescriptor td = (TemplateDescriptor) element;
+			String name = td.getName();
+			return name;
+		}
+		else if (element instanceof CategoryDescriptor) {
+			CategoryDescriptor cd = (CategoryDescriptor) element;
+			String name = cd.getName();
+			return name;
+		}
+		return super.getText(element);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/EditDriverDialog.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/EditDriverDialog.java
new file mode 100644
index 0000000..4142a48
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/EditDriverDialog.java
@@ -0,0 +1,932 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.dialogs;
+
+import java.io.File;
+import java.util.Properties;
+
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.datatools.connectivity.drivers.DriverManager;
+import org.eclipse.datatools.connectivity.drivers.DriverMgmtMessages;
+import org.eclipse.datatools.connectivity.drivers.DriverValidator;
+import org.eclipse.datatools.connectivity.drivers.IDriverMgmtConstants;
+import org.eclipse.datatools.connectivity.drivers.IPropertySet;
+import org.eclipse.datatools.connectivity.drivers.PropertySetImpl;
+import org.eclipse.datatools.connectivity.drivers.models.CategoryDescriptor;
+import org.eclipse.datatools.connectivity.drivers.models.OverrideTemplateDescriptor;
+import org.eclipse.datatools.connectivity.drivers.models.TemplateDescriptor;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.DriverPropertySourceProvider;
+import org.eclipse.datatools.connectivity.internal.ui.IHelpConstants;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.help.IContextProvider;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.TitleAreaDialog;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.part.IPage;
+import org.eclipse.ui.part.PageBook;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+
+import com.ibm.icu.util.StringTokenizer;
+
+/**
+ * Dialog used to edit a driver instance.
+ * 
+ * @author brianf
+ */
+public class EditDriverDialog extends TitleAreaDialog 
+	implements IContextProvider {
+
+	// memento keys
+	public final static String MEMENTO_ROOT = "Drivers Edit Driver_Dialog_Root";//$NON-NLS-1$
+	public final static String MEMENTO_DIALOG_SIZE_HEIGHT = "Dialog_Size_Height";//$NON-NLS-1$
+	public final static String MEMENTO_DIALOG_SIZE_WIDTH = "Dialog_Size_Width";//$NON-NLS-1$
+
+	// previous directory browsed
+	private static String previouslyBrowsedDirectory = ""; //$NON-NLS-1$
+	private PageBook book = null;
+	private IPropertySet mPropertySet = null;
+	private IPropertySet mInitialPropertySet = null;
+	private TemplateDescriptor descriptor = null;
+
+	// ui components
+	private List list;
+	private Text mDriverNameText;
+	private Text mDriverTypeText;
+	private Button mAddJar;
+	private Button mEditJar;
+	private Button mRemoveJar;
+	private Button mClearAll;
+	private Button mOKButton;
+
+	// driver properties
+	private String mDriverName;
+	private String mJarList;
+	private String mDriverTypeID;
+
+	private ContextProviderDelegate contextProviderDelegate =
+		new ContextProviderDelegate(ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName());
+	
+	// listener for property changes to re-validate 
+	private ChangeListener psetChangedListener = new ChangeListener(){
+
+		public void stateChanged(ChangeEvent arg0) {
+			isValid();
+		}
+	};
+
+	/**
+	 * Constructor
+	 * 
+	 * @param parentShell
+	 */
+	public EditDriverDialog(Shell parentShell) {
+		super(parentShell);
+		this.setShellStyle(getShellStyle() | SWT.RESIZE | SWT.DIALOG_TRIM);
+	}
+
+	/**
+	 * Constructor
+	 * @param parentShell
+	 * @param driverTypeID
+	 */
+	public EditDriverDialog(Shell parentShell, String driverTypeID) {
+		this(parentShell);
+		this.mDriverTypeID = driverTypeID;
+		this.descriptor = TemplateDescriptor
+				.getDriverTemplateDescriptor(this.mDriverTypeID);
+	}
+
+	/**
+	 * Constructor
+	 * @param parentShell
+	 * @param pset
+	 */
+	public EditDriverDialog(Shell parentShell, IPropertySet pset) {
+		this(parentShell);
+		setPropertySet(pset);
+		if (this.mPropertySet.getBaseProperties().getProperty(
+				IDriverMgmtConstants.PROP_DEFN_TYPE) != null) {
+			String driverType = this.mPropertySet.getBaseProperties()
+					.getProperty(IDriverMgmtConstants.PROP_DEFN_TYPE);
+			this.mDriverTypeID = driverType;
+			this.descriptor = TemplateDescriptor
+					.getDriverTemplateDescriptor(this.mDriverTypeID);
+		}
+	}
+
+	/*
+	 * Create the property sheet page
+	 * @param book
+	 * @return
+	 */
+	protected IPage createDefaultPage(PageBook book) {
+        PropertySheetPage page = new PropertySheetPage();
+        page.createControl(book);
+        return page;
+    }
+    
+    /*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
+	 */
+	protected Control createDialogArea(Composite parent) {
+        getShell().setData( HelpUtil.CONTEXT_PROVIDER_KEY, this);
+        HelpUtil.setHelp( getShell(), 
+        		HelpUtil.getContextId(IHelpConstants.CONTEXT_ID_EDIT_DRIVER_DIALOG, 
+        				ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName()));
+		Composite area = (Composite) super.createDialogArea(parent);
+
+		Composite contents = new Composite(area, SWT.NONE);
+		contents.setLayout(new GridLayout());
+		contents.setLayoutData(new GridData(GridData.FILL_BOTH));
+		contents.addDisposeListener(new DisposeListener(){
+			public void widgetDisposed(DisposeEvent e) {
+				saveState();			
+			}});
+		{
+			final Composite composite = new Composite(contents, SWT.NONE);
+			composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+			final GridLayout gridLayout = new GridLayout();
+			composite.setLayout(gridLayout);
+			{
+				final Label label = new Label(composite, SWT.NONE);
+				label.setText(DriverMgmtMessages
+						.getString("EditDriverDialog.label.driverNameText")); //$NON-NLS-1$
+			}
+			{
+				this.mDriverNameText = new Text(composite, SWT.BORDER);
+				this.mDriverNameText.setLayoutData(new GridData(
+						GridData.FILL_HORIZONTAL));
+				this.mDriverNameText.addModifyListener(new ModifyListener() {
+
+					public void modifyText(ModifyEvent e) {
+						EditDriverDialog.this.mDriverName = EditDriverDialog.this.mDriverNameText
+								.getText();
+						validateName();
+					}
+				});
+			}
+			{
+				final Label label = new Label(composite, SWT.NONE);
+				label.setText(DriverMgmtMessages
+						.getString("EditDriverDialog.label.driverTypeText")); //$NON-NLS-1$
+			}
+			{
+				this.mDriverTypeText = new Text(composite, SWT.BORDER | SWT.READ_ONLY);
+				this.mDriverTypeText.setLayoutData(new GridData(
+						GridData.FILL_HORIZONTAL));
+			}
+			{
+				final Composite composite_1 = new Composite(composite, SWT.NONE);
+				GridData gridData = new GridData(GridData.FILL_BOTH
+						| GridData.GRAB_VERTICAL);
+				gridData.horizontalIndent = -5;
+				gridData.horizontalSpan = 2;
+				composite_1.setLayoutData(gridData);
+				final GridLayout gridLayout_1 = new GridLayout();
+				gridLayout_1.numColumns = 3;
+				composite_1.setLayout(gridLayout_1);
+				
+				{
+					final Label label = new Label(composite_1, SWT.NONE);
+					label.setText(DriverMgmtMessages
+							.getString("EditDriverDialog.label.driverFileList")); //$NON-NLS-1$
+					gridData = new GridData();
+					gridData.horizontalSpan = 2;
+					label.setLayoutData(gridData);
+				}
+				
+				{
+					this.list = new List(composite_1, SWT.BORDER | SWT.H_SCROLL
+							| SWT.V_SCROLL);
+					final GridData gridData_1 = new GridData(GridData.FILL_BOTH);
+					gridData_1.verticalSpan = 4;
+					gridData_1.horizontalSpan = 2;
+					this.list.setLayoutData(gridData_1);
+
+					this.list.addSelectionListener(new SelectionListener() {
+
+						public void widgetSelected(SelectionEvent e) {
+							boolean enabled = (EditDriverDialog.this.list
+									.getSelectionCount() > 0);
+							EditDriverDialog.this.mEditJar.setEnabled(enabled);
+							EditDriverDialog.this.mRemoveJar
+									.setEnabled(enabled);
+						}
+
+						public void widgetDefaultSelected(SelectionEvent e) {
+							widgetSelected(e);
+						}
+
+					});
+				}
+				{
+					this.mAddJar = new Button(composite_1, SWT.NONE);
+					this.mAddJar.addSelectionListener(new SelectionAdapter() {
+
+						public void widgetSelected(SelectionEvent e) {
+							handleLocationBrowseButtonPressed();
+							updateJarList();
+						}
+					});
+					this.mAddJar.setLayoutData(new GridData(
+							GridData.HORIZONTAL_ALIGN_FILL));
+					this.mAddJar.setText(DriverMgmtMessages
+							.getString("EditDriverDialog.button.addJar")); //$NON-NLS-1$
+				}
+				{
+					this.mEditJar = new Button(composite_1, SWT.NONE);
+					this.mEditJar.addSelectionListener(new SelectionAdapter() {
+
+						public void widgetSelected(SelectionEvent e) {
+							if (EditDriverDialog.this.list.getSelectionCount() > 0) {
+								String selectedItem = EditDriverDialog.this.list
+										.getItem(EditDriverDialog.this.list
+												.getSelectionIndex());
+								handleLocationEditButtonPressed(selectedItem);
+								updateJarList();
+							}
+						}
+					});
+					this.mEditJar.setLayoutData(new GridData(
+							GridData.HORIZONTAL_ALIGN_FILL));
+					this.mEditJar.setText(DriverMgmtMessages
+							.getString("EditDriverDialog.button.editJar")); //$NON-NLS-1$
+				}
+				{
+					this.mRemoveJar = new Button(composite_1, SWT.NONE);
+					this.mRemoveJar
+							.addSelectionListener(new SelectionAdapter() {
+
+								public void widgetSelected(SelectionEvent e) {
+									if (EditDriverDialog.this.list
+											.getSelectionCount() > 0) {
+										String[] selected = EditDriverDialog.this.list
+												.getSelection();
+										for (int i = 0; i < selected.length; i++) {
+											EditDriverDialog.this.list
+													.remove(selected[i]);
+										}
+										updateJarList();
+									}
+								}
+							});
+					this.mRemoveJar.setLayoutData(new GridData(
+							GridData.HORIZONTAL_ALIGN_FILL));
+					this.mRemoveJar.setText(DriverMgmtMessages
+							.getString("EditDriverDialog.button.removeJar")); //$NON-NLS-1$
+				}
+				{
+					this.mClearAll = new Button(composite_1, SWT.NONE);
+					this.mClearAll.setLayoutData(new GridData(
+							GridData.HORIZONTAL_ALIGN_FILL
+									| GridData.VERTICAL_ALIGN_BEGINNING));
+					this.mClearAll.setText(DriverMgmtMessages
+							.getString("EditDriverDialog.button.clearAllJars")); //$NON-NLS-1$
+					this.mClearAll.addSelectionListener(new SelectionAdapter() {
+
+						public void widgetSelected(SelectionEvent e) {
+							EditDriverDialog.this.list.removeAll();
+							updateJarList();
+						}
+					});
+				}
+			}
+			{
+				if (hasVisibleProperties()) {
+					
+					final Composite composite_2 = new Composite(composite,
+							SWT.NONE);
+					GridData gridData = new GridData(GridData.FILL_BOTH);
+					gridData.horizontalIndent = -5;
+					gridData.horizontalSpan = 2;
+					composite_2.setLayoutData(gridData);
+					final GridLayout gridLayout_2 = new GridLayout();
+					gridLayout_2.numColumns = 1;
+					composite_2.setLayout(gridLayout_2);
+					
+					final Label label = new Label(composite_2, SWT.NONE);
+					label.setText(DriverMgmtMessages
+							.getString("EditDriverDialog.label.properties")); //$NON-NLS-1$
+					gridData = new GridData();
+					gridData.horizontalSpan = 2;
+					label.setLayoutData(gridData);
+					
+					{
+						book = new PageBook(composite_2, SWT.BORDER);
+						book.setLayoutData(new GridData(GridData.FILL_BOTH));
+				        PropertySheetPage page = new PropertySheetPage();
+				        page.createControl(book);
+						DriverPropertySourceProvider mpsp = null;
+						if (this.mPropertySet != null) {
+							mpsp = new DriverPropertySourceProvider(this.mPropertySet, this.descriptor);
+						}
+						else {
+							mpsp = new DriverPropertySourceProvider();
+						}
+						mpsp.addChangeListener(psetChangedListener);
+						page.setPropertySourceProvider(mpsp);
+				        book.showPage(page.getControl());
+						page.selectionChanged(null, new StructuredSelection(this.mPropertySet));
+					}
+				}
+			}
+		}
+		setTitle(DriverMgmtMessages.getString("EditDriverDialog.title")); //$NON-NLS-1$
+		setMessage(DriverMgmtMessages.getString("EditDriverDialog.message")); //$NON-NLS-1$
+
+		boolean enabled = (this.list.getSelectionCount() > 0);
+		this.mEditJar.setEnabled(enabled);
+		this.mRemoveJar.setEnabled(enabled);
+
+		updateFromPropertySet();
+		isValid(true);
+
+		return area;
+	}
+	
+	
+	/*
+	 * Update property descriptors for the selected instance
+	 */
+	private void updatePropertyDescriptors() {
+        PropertySheetPage page = new PropertySheetPage();
+        page.createControl(book);
+		DriverPropertySourceProvider mpsp = null;
+		if (this.mPropertySet != null) {
+			mpsp = new DriverPropertySourceProvider(this.mPropertySet, this.descriptor);
+		}
+		else {
+			mpsp = new DriverPropertySourceProvider();
+		}
+		page.setPropertySourceProvider(mpsp);
+        book.showPage(page.getControl());
+		page.selectionChanged(null, new StructuredSelection(this.mPropertySet));
+	}
+
+	/*
+	 * Make sure the name isn't used already
+	 */
+	private void validateName() {
+		boolean isOk = false;
+
+		String testName = this.mDriverName;
+		Object obj = DriverManager.getInstance().getDriverInstanceByName(
+				testName);
+
+		// changed the if slightly to fix BZ 176781 - BTF
+		if ((obj == null)||
+			    (obj != null && testName.equals(this.mPropertySet.getName()))) { 
+			isOk = true;
+			this.setErrorMessage(null);
+		}
+		else {
+			String errorMessage = DriverMgmtMessages
+					.getString("NewDriverDialog.driverExistsWithName"); //$NON-NLS-1$
+			this.setErrorMessage(errorMessage);
+		}
+
+		if (this.mOKButton != null)
+			this.mOKButton.setEnabled(isOk);
+	}
+
+	/*
+	 * Update the jar list
+	 */
+	private void updateJarList() {
+		this.mJarList = createList(this.list.getItems());
+		this.mPropertySet.getBaseProperties().setProperty(
+				IDriverMgmtConstants.PROP_DEFN_JARLIST, this.mJarList);
+		isValid();
+		updatePropertyDescriptors();
+	}
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
+	 */
+	protected void createButtonsForButtonBar(Composite parent) {
+		this.mOKButton = createButton(parent, IDialogConstants.OK_ID,
+				IDialogConstants.OK_LABEL, true);
+		createButton(parent, IDialogConstants.CANCEL_ID,
+				IDialogConstants.CANCEL_LABEL, false);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
+	 */
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		int width = 500;
+		int height = 700;
+		newShell.setText(DriverMgmtMessages
+				.getString("EditDriverDialog.windowTitle")); //$NON-NLS-1$
+
+		IDialogSettings dset = ConnectivityUIPlugin.getDefault()
+				.getDialogSettings();
+		if (dset != null) {
+			IDialogSettings dSection = dset.getSection(MEMENTO_ROOT);
+			if (dSection != null) {
+				if (dSection.get(MEMENTO_DIALOG_SIZE_HEIGHT) != null
+						&& dSection.get(MEMENTO_DIALOG_SIZE_HEIGHT).trim()
+								.length() > 0) {
+					height = dSection.getInt(MEMENTO_DIALOG_SIZE_HEIGHT);
+					width = dSection.getInt(MEMENTO_DIALOG_SIZE_WIDTH);					
+				}
+			}
+		}
+		newShell.setSize(width, height);
+		centerDialog(newShell);
+	}
+	
+	/*
+	 * Center the dialog relative to its parent
+	 */
+	private void centerDialog(Shell newShell){
+		Composite parent = newShell.getParent();
+		Rectangle parentSize = parent.getBounds();
+		Rectangle newShellSize = newShell.getBounds();
+
+		int x, y;
+		x = (parentSize.width - newShellSize.width)/2 + parentSize.x;
+		y = (parentSize.height - newShellSize.height)/2 + parentSize.y;
+
+		newShell.setLocation(new Point(x, y));		
+	}
+
+	/*
+	 * Open an appropriate directory browser
+	 */
+	private void handleLocationBrowseButtonPressed() {
+		FileDialog dialog = new FileDialog(getShell());
+		dialog.setText(DriverMgmtMessages
+				.getString("EditDriverDialog.title.filebrowse")); //$NON-NLS-1$
+
+		String dirName = previouslyBrowsedDirectory;
+
+		if (dirName.length() == 0) //$NON-NLS-1$
+			dialog.setFilterPath(ResourcesPlugin.getWorkspace().getRoot()
+					.getLocation().toOSString());
+		else {
+			File path = new File(dirName);
+			if (path.exists()) {
+				dialog.setFilterPath(new Path(dirName).toOSString());
+			} else {
+				dialog.setFilterPath(new Path(System.getProperty("user.home")).toOSString());
+			}
+		}
+
+		String selectedDirectory = dialog.open();
+		if (selectedDirectory != null) {
+			previouslyBrowsedDirectory = new Path(selectedDirectory).removeLastSegments(1).toOSString();
+			this.list.add(selectedDirectory);
+		}
+	}
+
+	/*
+	 * Browse for a location, with the location passed in as the default
+	 */
+	private void handleLocationEditButtonPressed(String editLocation) {
+		FileDialog dialog = new FileDialog(getShell());
+		dialog.setText(DriverMgmtMessages
+				.getString("EditDriverDialog.title.filebrowse")); //$NON-NLS-1$
+
+		String dirName = editLocation;
+
+		dialog.setFileName(dirName);
+		if (dirName.length() == 0) //$NON-NLS-1$
+			dialog.setFilterPath(ResourcesPlugin.getWorkspace().getRoot()
+					.getLocation().toOSString());
+		else {
+			File path = new File(dirName);
+			if (path.exists())
+				dialog.setFilterPath(new Path(dirName).toOSString());
+			else {
+				dialog.setFilterPath(dirName);
+			}
+		}
+
+		String selectedDirectory = dialog.open();
+		if (selectedDirectory != null) {
+			previouslyBrowsedDirectory = new Path(selectedDirectory).removeLastSegments(1).toOSString();
+			this.list.remove(editLocation);
+			this.list.add(selectedDirectory);
+
+			if (this.list.getItemCount() > 1) {
+				if (MessageDialog
+						.openQuestion(
+								this.getShell(),
+								DriverMgmtMessages
+										.getString("EditDriverDialog.msg.updateAllJarsToSamePath.title"), //$NON-NLS-1$
+								DriverMgmtMessages
+										.getString("EditDriverDialog.msg.updateAllJarsToSamePath.message")) == true) { //$NON-NLS-1$
+					String[] items = this.list.getItems();
+
+					String separator = "\\";//$NON-NLS-1$
+					if (selectedDirectory.indexOf("/") > -1)//$NON-NLS-1$
+						separator = "/";//$NON-NLS-1$
+
+					int location = selectedDirectory.lastIndexOf(separator);
+					if (location > -1
+							&& location < selectedDirectory.length() - 1) {
+						String path = selectedDirectory.substring(0, location);
+						for (int i = 0; i < items.length; i++) {
+							String directory = items[i];
+							if (!directory.equals(selectedDirectory)) {
+								String sep2 = "\\";//$NON-NLS-1$
+								if (directory.indexOf("/") > -1)//$NON-NLS-1$
+									sep2 = "/";//$NON-NLS-1$
+								int location2 = directory
+										.lastIndexOf(sep2);
+								String filename = directory;
+								if (location2 > -1
+										&& location2 < directory.length() - 1) {
+									filename = directory.substring(
+											location2 + 1, directory.length());
+								}
+								String newdirectory = path + separator
+										+ filename;
+								// System.out.println(directory + "=" +
+								// newdirectory);
+								this.list.remove(directory);
+								this.list.add(newdirectory);
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
+	 */
+	protected void okPressed() {
+		String propIdPrefix = DriverMgmtMessages
+			.getString("EditDriverDialog.text.id_prefix"); //$NON-NLS-1$
+		String propId = propIdPrefix + this.mDriverName;
+		if (this.mPropertySet == null) {
+			this.mPropertySet = new PropertySetImpl(propId, this.mDriverName);
+		}
+		this.mPropertySet.setName(this.mDriverName);
+		Properties props = new Properties();
+		props
+				.setProperty(IDriverMgmtConstants.PROP_DEFN_JARLIST,
+						this.mJarList);
+		
+		IConfigurationElement[] templateprops = this.descriptor.getProperties();
+		if (templateprops != null && templateprops.length > 0) {
+			for (int i = 0; i < templateprops.length; i++) {
+				IConfigurationElement prop = templateprops[i];
+				String id = prop.getAttribute("id"); //$NON-NLS-1$
+				String value = this.mPropertySet.getBaseProperties()
+						.getProperty(id);
+				if (value == null) {
+					value = prop.getAttribute("value"); //$NON-NLS-1$
+					OverrideTemplateDescriptor[] otds = 
+						OverrideTemplateDescriptor.getByDriverTemplate(this.descriptor.getId());
+					if (otds != null && otds.length > 0) {
+						boolean removetemp =
+							otds[0].getPropertyRemoveFlagFromID(id);
+						if (removetemp) continue;
+						String valuetemp =
+							otds[0].getPropertyValueFromId(id);
+						if (valuetemp != null && valuetemp.length() > 0)
+							value = valuetemp;
+					}
+				}
+				props.setProperty(id, value);
+			}
+		}
+		props.setProperty(IDriverMgmtConstants.PROP_DEFN_TYPE, this.descriptor
+				.getId());
+		this.mPropertySet.setBaseProperties(props);
+
+		this.psetChangedListener = null;
+
+		super.okPressed();
+	}
+
+	/*
+	 * Create a test set for validation
+	 */
+	private IPropertySet createTestPSet() {
+		String propIdPrefix = DriverMgmtMessages
+				.getString("EditDriverDialog.text.id_test_prefix"); //$NON-NLS-1$
+		String propId = propIdPrefix + this.mDriverName;
+		IPropertySet testPropertySet = new PropertySetImpl(propId,
+				this.mDriverName);
+		testPropertySet.setName(this.mDriverName);
+		Properties props = new Properties();
+		props
+				.setProperty(IDriverMgmtConstants.PROP_DEFN_JARLIST,
+						this.mJarList);
+
+		IConfigurationElement[] templateprops = this.descriptor.getProperties();
+		if (templateprops != null && templateprops.length > 0) {
+			for (int i = 0; i < templateprops.length; i++) {
+				IConfigurationElement prop = templateprops[i];
+				String id = prop.getAttribute("id"); //$NON-NLS-1$
+
+				String value = null;
+				if (this.mPropertySet.getBaseProperties() != null) {
+					value = this.mPropertySet.getBaseProperties().getProperty(
+							id);
+				}
+				if (value == null) {
+					value = prop.getAttribute("value"); //$NON-NLS-1$
+					OverrideTemplateDescriptor[] otds = 
+						OverrideTemplateDescriptor.getByDriverTemplate(this.descriptor.getId());
+					if (otds != null && otds.length > 0) {
+						boolean removetemp =
+							otds[0].getPropertyRemoveFlagFromID(id);
+						if (removetemp) continue;
+						String valuetemp =
+							otds[0].getPropertyValueFromId(id);
+						if (valuetemp != null && valuetemp.length() > 0)
+							value = valuetemp;
+					}
+				}
+				props.setProperty(id, value);
+			}
+		}
+		props.setProperty(IDriverMgmtConstants.PROP_DEFN_TYPE, this.descriptor
+				.getId());
+		testPropertySet.setBaseProperties(props);
+		return testPropertySet;
+	}
+
+	/**
+	 * Return the property set
+	 */
+	public IPropertySet getPropertySet() {
+		return this.mPropertySet;
+	}
+	
+	/**
+	 * Return the initial property set (used to cancel pending changes)
+	 */
+	public IPropertySet getInitialPropertySet() {
+		return this.mInitialPropertySet;
+	}
+
+	/**
+	 * Return the category descriptor
+	 * 
+	 * @return
+	 */
+	public CategoryDescriptor getCategoryDescriptor() {
+		if (this.descriptor != null) {
+			CategoryDescriptor category = CategoryDescriptor
+					.getCategoryDescriptor(this.descriptor.getParentCategory());
+			return category;
+		}
+		return null;
+	}
+
+	/*
+	 * Update the UI from the property set
+	 */
+	private void updateFromPropertySet() {
+		if (this.descriptor != null) {
+			this.mDriverTypeText.setText(this.descriptor.getName());
+			if (this.descriptor.getJarList() != null
+					&& this.descriptor.getJarList().length() > 0) {
+				String[] jarListArray = parseString(this.descriptor
+						.getJarList());
+				this.list.removeAll();
+				for (int i = 0; i < jarListArray.length; i++) {
+					this.list.add(jarListArray[i]);
+				}
+			}
+		}
+
+		if (this.mPropertySet != null) {
+			this.mDriverNameText.setText(this.mPropertySet.getName());
+			this.mDriverName = this.mPropertySet.getName();
+
+			String jarList = this.mPropertySet.getBaseProperties().getProperty(
+					IDriverMgmtConstants.PROP_DEFN_JARLIST);
+			this.mJarList = jarList;
+			String[] jarListArray = parseString(jarList);
+			this.list.removeAll();
+			for (int i = 0; i < jarListArray.length; i++) {
+				this.list.add(jarListArray[i]);
+			}
+
+		}
+
+		isValid();
+	}
+
+	/**
+	 * Set the instance
+	 * 
+	 * @param propset
+	 */
+	public void setPropertySet(IPropertySet propset) {
+		this.mPropertySet = propset;
+		this.mInitialPropertySet = DuplicatePropertySet(propset);
+	}
+
+	/*
+	 * Create a list from an array of strings
+	 * 
+	 * @param items
+	 * @return
+	 */
+	private String createList(String[] items) {
+		StringBuffer buffer = new StringBuffer();
+		for (int i = 0; i < items.length; i++) {
+			if (items[i] != null) {
+				buffer.append(items[i]);
+				if (i + 1 < items.length)
+					buffer.append(IDriverMgmtConstants.PATH_DELIMITER);
+			}
+		}
+		return buffer.toString();
+	}
+
+	/*
+	 * Parse a string into an array
+	 */
+	private String[] parseString(String str_list) {
+		String token = IDriverMgmtConstants.PATH_DELIMITER;
+		if (str_list.indexOf(token) == -1) {
+			if (str_list.indexOf(',') > -1) {//$NON-NLS-1$
+				token = ",";//$NON-NLS-1$
+			}
+		}
+		StringTokenizer tk = new StringTokenizer(str_list,
+				token);
+		String[] pieces = new String[tk.countTokens()];
+		int index = 0;
+		while (tk.hasMoreTokens())
+			pieces[index++] = tk.nextToken();
+		return pieces;
+	}
+
+	/*
+	 * Determine if the template has visible properties
+	 */
+	private boolean hasVisibleProperties() {
+		return this.descriptor == null ? false: this.descriptor.hasVisibleProperties();
+	}
+
+	/*
+	 * Is the property set valid?
+	 */
+	private void isValid() {
+		isValid(false);
+	}
+
+	/*
+	 * Is the property set valid?
+	 */
+	private void isValid(boolean inflag) {
+		IPropertySet testSet = null;
+		if (inflag == true) {
+			testSet = this.mPropertySet;
+		}
+		else {
+			testSet = createTestPSet();
+		}
+		if (testSet != null) {
+			DriverValidator testValidator = new DriverValidator(
+					this.descriptor, testSet);
+			boolean flag = testValidator.isValid();
+			if (!flag) {
+				try {
+					setErrorMessage(testValidator.getMessage());
+				} catch (SWTException e) {
+					if (e.code == SWT.ERROR_WIDGET_DISPOSED) {
+						// move on... this is to get around a weird
+						// bug in the platform having to do with
+						// custom property descriptors 
+					}
+					else
+						throw e;
+				}
+			}
+			else
+				try {
+					setErrorMessage(null);
+				} catch (SWTException e) {
+					if (e.code == SWT.ERROR_WIDGET_DISPOSED) {
+						// move on... this is to get around a weird
+						// bug in the platform having to do with
+						// custom property descriptors 
+					}
+					else
+						throw e;
+				}
+		}
+	}
+
+	/*
+	 * Save the dialog settings
+	 */
+	private void saveState() {
+		IDialogSettings dset = ConnectivityUIPlugin.getDefault()
+				.getDialogSettings();
+		if (dset != null) {
+			IDialogSettings dSection = dset.getSection(MEMENTO_ROOT);
+			if (dSection == null)
+				dSection = dset.addNewSection(MEMENTO_ROOT);
+			if (dSection != null) {
+				Point size = getShell().getSize();
+				dSection.put(MEMENTO_DIALOG_SIZE_HEIGHT, size.y);
+				dSection.put(MEMENTO_DIALOG_SIZE_WIDTH, size.x);
+			}
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.dialogs.Dialog#cancelPressed()
+	 */
+	protected void cancelPressed() {
+		this.mPropertySet = this.mInitialPropertySet;
+		this.psetChangedListener = null;
+		super.cancelPressed();
+	}
+	
+	/*
+	 * Duplicates the passed in property set
+	 * @param pset
+	 * @return
+	 */
+	private IPropertySet DuplicatePropertySet ( IPropertySet pset ) {
+		IPropertySet newPset = new PropertySetImpl(pset.getName(), pset.getID());
+		if (pset.getBaseProperties().size() > 0) {
+			Properties newProps = new Properties();
+			newPset.setBaseProperties(newProps);
+			newPset.getBaseProperties().putAll(pset.getBaseProperties());
+		}
+		return newPset;
+	}
+	                                                        
+	/* (non-Javadoc)
+	 * @see org.eclipse.help.IContextProvider#getContext(java.lang.Object)
+	 */
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.help.IContextProvider#getContextChangeMask()
+	 */
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.help.IContextProvider#getSearchExpression(java.lang.Object)
+	 */
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/ExceptionDialog.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/ExceptionDialog.java
new file mode 100644
index 0000000..600120a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/ExceptionDialog.java
@@ -0,0 +1,167 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: mbarrett - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.dialogs;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.IconAndMessageDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * Exception dialog that displays an exception message in a message box, and
+ * prints a stack trace in an expandable text box.
+ * 
+ * @author mbarrett
+ */
+public class ExceptionDialog extends IconAndMessageDialog {
+
+	private Button _detailsButton;
+	private Text _textArea;
+	private String _title;
+	private boolean _textCreated = false;
+	private Throwable _exception;
+	private Display _display;
+
+	/**
+	 * @param parentShell
+	 */
+	protected ExceptionDialog(Shell parentShell, String title, String msg,
+								Throwable ex) {
+		super(parentShell);
+		this._title = title;
+		this.message = msg;
+		this._exception = ex;
+		this._display = parentShell.getDisplay();
+		setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE | SWT.APPLICATION_MODAL);
+	}
+
+	/*
+	 * (non-Javadoc) Method declared in Window.
+	 */
+	protected void configureShell(Shell shell) {
+		super.configureShell(shell);
+		shell.setText(_title);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.dialogs.IconAndMessageDialog#getImage()
+	 */
+	protected Image getImage() {
+		return _display.getSystemImage(SWT.ICON_ERROR);
+	}
+
+	/*
+	 * (non-Javadoc) Method declared on Dialog.
+	 */
+	protected void createButtonsForButtonBar(Composite parent) {
+		// create OK and Details buttons
+		createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL,
+				true);
+		_detailsButton = createButton(parent, IDialogConstants.DETAILS_ID,
+				IDialogConstants.SHOW_DETAILS_LABEL, false);
+	}
+
+	// If Details button is pressed, toggle the detail area
+	// Otherwise, call the super handler
+	protected void buttonPressed(int id) {
+		if (id == IDialogConstants.DETAILS_ID) {
+			// was the details button pressed?
+			toggleDetailsArea();
+		}
+		else {
+			super.buttonPressed(id);
+		}
+	}
+
+	/**
+	 * Toggles the unfolding of the details area. This is triggered by the user
+	 * pressing the details button.
+	 */
+	private void toggleDetailsArea() {
+		Point windowSize = getShell().getSize();
+		Point oldSize = getShell().computeSize(SWT.DEFAULT, SWT.DEFAULT);
+
+		if (_textCreated) {
+			_textArea.dispose();
+			_textCreated = false;
+			_detailsButton.setText(IDialogConstants.SHOW_DETAILS_LABEL);
+		}
+		else {
+			_textArea = createTextArea((Composite) getContents());
+			_detailsButton.setText(IDialogConstants.HIDE_DETAILS_LABEL);
+		}
+
+		Point newSize = getShell().computeSize(SWT.DEFAULT, SWT.DEFAULT);
+
+		getShell()
+				.setSize(
+						new Point(windowSize.x, windowSize.y
+								+ (newSize.y - oldSize.y)));
+
+	}
+
+	protected Control createDialogArea(Composite parent) {
+
+		createMessageArea(parent);
+
+		// create a composite with standard margins and spacing
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridLayout layout = new GridLayout();
+		layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
+		layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
+		layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
+		layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
+		layout.numColumns = 2;
+		composite.setLayout(layout);
+		GridData childData = new GridData(GridData.FILL_BOTH);
+		childData.horizontalSpan = 2;
+		composite.setLayoutData(childData);
+		composite.setFont(parent.getFont());
+		return composite;
+
+	}
+
+	protected Text createTextArea(Composite parent) {
+		_textArea = new Text(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL
+				| SWT.MULTI);
+
+		StringWriter sw = new StringWriter();
+		PrintWriter pw = new PrintWriter(sw);
+		_exception.printStackTrace(pw);
+
+		_textArea.setText(sw.toString());
+
+		GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL
+				| GridData.GRAB_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL
+				| GridData.GRAB_VERTICAL);
+		data.heightHint = 200;
+		data.horizontalSpan = 2;
+		_textArea.setLayoutData(data);
+		_textArea.setFont(parent.getFont());
+		_textArea.setEditable(false);
+		_textCreated = true;
+		return _textArea;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/ExceptionHandler.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/ExceptionHandler.java
new file mode 100644
index 0000000..8cd1b10
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/ExceptionHandler.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: mbarrett - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.dialogs;
+
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * Exception handler that displays an exception in a message box, and prints a
+ * stack trace.
+ * 
+ * @author mbarrett
+ */
+public class ExceptionHandler {
+
+	public static void showException(Shell parentShell, String title,
+			String msg, Throwable ex) {
+		new ExceptionDialog(parentShell, title, msg, ex).open();
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/InvertableSorter.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/InvertableSorter.java
new file mode 100644
index 0000000..f00dde2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/InvertableSorter.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.dialogs;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+
+public abstract class InvertableSorter extends ViewerSorter {
+
+	public abstract int compare(Viewer viewer, Object e1, Object e2);
+	 
+	abstract InvertableSorter getInverseSorter();
+ 
+	public abstract int getSortDirection();
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/NewDriverDialog.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/NewDriverDialog.java
new file mode 100644
index 0000000..af98f01
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/NewDriverDialog.java
@@ -0,0 +1,530 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.dialogs;
+
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.drivers.DriverManager;
+import org.eclipse.datatools.connectivity.drivers.DriverMgmtMessages;
+import org.eclipse.datatools.connectivity.drivers.DriverValidator;
+import org.eclipse.datatools.connectivity.drivers.IDriverValuesProvider;
+import org.eclipse.datatools.connectivity.drivers.IPropertySet;
+import org.eclipse.datatools.connectivity.drivers.models.CategoryDescriptor;
+import org.eclipse.datatools.connectivity.drivers.models.DriversProvider;
+import org.eclipse.datatools.connectivity.drivers.models.OverrideTemplateDescriptor;
+import org.eclipse.datatools.connectivity.drivers.models.TemplateDescriptor;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.DriverTreeContentProvider;
+import org.eclipse.datatools.connectivity.internal.ui.DriverTreeFilter;
+import org.eclipse.datatools.connectivity.internal.ui.DriverTreeLabelProvider;
+import org.eclipse.datatools.connectivity.internal.ui.IHelpConstants;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.dialogs.TitleAreaDialog;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * Driver to add a new instance of a driver template.
+ * 
+ * @author brianf
+ */
+public class NewDriverDialog extends TitleAreaDialog {
+
+	// Memento flags
+	public final static String MEMENTO_ROOT = "Drivers New Driver_Dialog_Root";//$NON-NLS-1$
+	public final static String MEMENTO_DIALOG_SIZE_HEIGHT = "Dialog_Size_Height";//$NON-NLS-1$
+	public final static String MEMENTO_DIALOG_SIZE_WIDTH = "Dialog_Size_Width";//$NON-NLS-1$
+	public final static String MEMENTO_DIALOG_EDIT_IMMEDIATELY = "Edit Immediately";//$NON-NLS-1$
+
+	// local shell
+	private Shell shell;
+
+	// ui elements
+	private TreeViewer mTreeViewer;
+	private Text mDriverNameText;
+	private Button mEditImmediatelyButton;
+	private Button mOKButton;
+
+	// tree filter
+	private DriverTreeFilter mViewerFilter;
+
+	// template descriptor
+	private TemplateDescriptor mDriverTemplateDescriptor = null;
+
+	// driver instance
+	private IPropertySet mPropertySet = null;
+
+	// new driver name
+	private String mDriverName;
+
+	// flag indicating whether we should edit the new
+	// instance immediately or not.
+	// NOTE: this flag only remembers user's choice, so when the driver don't support
+	// editImmediately, we won't change this flag.
+	private boolean mEditImmediately = true;
+	
+	private String mErrorMessage = null;
+
+	private ContextProviderDelegate contextProviderDelegate =
+		new ContextProviderDelegate(ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName());
+
+	/**
+	 * Constructor
+	 * 
+	 * @param parentShell
+	 */
+	public NewDriverDialog(Shell parentShell) {
+		super(parentShell);
+		this.setShellStyle(getShellStyle() | SWT.RESIZE | SWT.DIALOG_TRIM);
+	}
+
+	/**
+	 * Constructor
+	 * 
+	 * @param parentShell
+	 * @param category
+	 */
+	public NewDriverDialog(Shell parentShell, String category) {
+		this(parentShell);
+
+		if (CategoryDescriptor.getCategoryDescriptor(category) != null) {
+			this.mViewerFilter = new DriverTreeFilter();
+			this.mViewerFilter.setCategoryId(category);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
+	 */
+	protected Control createDialogArea(Composite parent) {
+        getShell().setData( HelpUtil.CONTEXT_PROVIDER_KEY, this);
+        HelpUtil.setHelp( getShell(), 
+        		HelpUtil.getContextId(IHelpConstants.CONTEXT_ID_NEW_DRIVER_DIALOG, 
+        				ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName()));
+
+        Font font = parent.getFont();
+
+		Composite area = (Composite) super.createDialogArea(parent);
+		Composite contents = new Composite(area, SWT.NONE);
+		contents.setLayout(new GridLayout());
+		contents.setLayoutData(new GridData(GridData.FILL_BOTH));
+		contents.addDisposeListener(new DisposeListener(){
+			public void widgetDisposed(DisposeEvent e) {
+				saveState();			
+			}});
+
+		Label label = new Label(contents, SWT.LEFT);
+		label.setText(DriverMgmtMessages
+				.getString("NewDriverDialog.label.availableTemplates")); //$NON-NLS-1$
+		GridData data = new GridData();
+		data.horizontalAlignment = GridData.FILL;
+		data.horizontalSpan = 2;
+		label.setLayoutData(data);
+		label.setFont(font);
+
+		this.mTreeViewer = new TreeViewer(contents, SWT.BORDER);
+		data = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);
+		this.mTreeViewer.getTree().setLayoutData(data);
+		this.mTreeViewer.getTree().setFont(font);
+
+		this.mTreeViewer
+				.setContentProvider(new DriverTreeContentProvider(true));
+		this.mTreeViewer.setLabelProvider(new DriverTreeLabelProvider());
+		if (this.mViewerFilter != null) {
+			this.mTreeViewer.addFilter(this.mViewerFilter);
+		}
+		this.mTreeViewer.setInput(DriversProvider.getInstance());
+		this.mTreeViewer.expandToLevel(3);
+
+		this.mTreeViewer
+				.addSelectionChangedListener(new ISelectionChangedListener() {
+
+					public void selectionChanged(SelectionChangedEvent event) {
+						StructuredSelection selection = (StructuredSelection) NewDriverDialog.this.mTreeViewer
+								.getSelection();
+						if (selection.getFirstElement() instanceof TemplateDescriptor) {
+							TemplateDescriptor descriptor = (TemplateDescriptor) selection
+									.getFirstElement();
+									
+							String name = descriptor.getDefaultDefinitionName();
+							IDriverValuesProvider driverValsProvider = null;
+							IDriverValuesProvider overrideDriverValsProvider = null;
+							OverrideTemplateDescriptor[] otds = null; 
+							if (descriptor != null) {
+								
+								otds = OverrideTemplateDescriptor.getByDriverTemplate(descriptor.getId());
+								if (otds != null && otds.length > 0) {
+									overrideDriverValsProvider =
+										otds[0].getValuesProviderClass();
+								}
+								driverValsProvider =
+									(IDriverValuesProvider) descriptor.getValuesProviderClass();
+							}
+
+							if (driverValsProvider != null) {
+								String driverValsName = driverValsProvider.createDefaultValue(IDriverValuesProvider.VALUE_NAME);
+								if (driverValsName != null) {
+									name = driverValsName;
+								}
+								String driverValsDefaultDefinitionName = driverValsProvider.createDefaultValue(IDriverValuesProvider.VALUE_DEFAULT_DEFINITION_NAME);
+								if (driverValsDefaultDefinitionName != null) {
+									name = driverValsDefaultDefinitionName;
+								}
+							}
+							if (overrideDriverValsProvider != null) {
+								String overrideDriverValsName = overrideDriverValsProvider.createDefaultValue(IDriverValuesProvider.VALUE_NAME);
+								if (overrideDriverValsName != null) {
+									name = overrideDriverValsName;
+								}
+								String overrideDriverValsDefaultDefinitionName = overrideDriverValsProvider.createDefaultValue(IDriverValuesProvider.VALUE_DEFAULT_DEFINITION_NAME);
+								if (overrideDriverValsDefaultDefinitionName != null) {
+									name = overrideDriverValsDefaultDefinitionName;
+								}
+							}
+							NewDriverDialog.this.mDriverNameText
+									.setText(name);
+							NewDriverDialog.this.mDriverTemplateDescriptor = descriptor;
+							// NewDriverDialog.this.mOKButton.setEnabled(true);
+							if (!needEditImmediately(descriptor)) {
+								NewDriverDialog.this.mEditImmediatelyButton.setEnabled(false);
+								NewDriverDialog.this.mEditImmediatelyButton.setSelection(false);
+							}
+							else {
+								NewDriverDialog.this.mEditImmediatelyButton.setEnabled(true);
+								NewDriverDialog.this.mEditImmediatelyButton.setSelection(mEditImmediately);
+							}
+						}
+						// else {
+						// NewDriverDialog.this.mOKButton.setEnabled(false);
+						// }
+						validateName();
+					}
+
+				});
+		
+		this.mTreeViewer.addDoubleClickListener( new IDoubleClickListener() {
+
+			public void doubleClick(DoubleClickEvent event) {
+				StructuredSelection selection = (StructuredSelection) NewDriverDialog.this.mTreeViewer
+					.getSelection();
+				if (selection.getFirstElement() instanceof TemplateDescriptor) {
+					if (NewDriverDialog.this.mErrorMessage == null)
+						okPressed();
+				}
+			}
+		});
+
+		label = new Label(contents, SWT.NONE);
+		label.setText(DriverMgmtMessages
+				.getString("NewDriverDialog.label.driverNameText")); //$NON-NLS-1$
+
+		this.mDriverNameText = new Text(contents, SWT.BORDER);
+		this.mDriverNameText.setLayoutData(new GridData(
+				GridData.FILL_HORIZONTAL));
+		this.mDriverNameText.addModifyListener(new ModifyListener() {
+
+			public void modifyText(ModifyEvent e) {
+				NewDriverDialog.this.mDriverName = NewDriverDialog.this.mDriverNameText
+						.getText();
+				validateName();
+			}
+		});
+
+		this.mEditImmediatelyButton = new Button(contents, SWT.CHECK);
+		this.mEditImmediatelyButton.setText(DriverMgmtMessages
+				.getString("NewDriverDialog.button.edit_immediately"));//$NON-NLS-1$
+		this.mEditImmediatelyButton.setSelection(true);
+		this.mEditImmediatelyButton
+				.addSelectionListener(new SelectionListener() {
+
+					public void widgetSelected(SelectionEvent e) {
+						NewDriverDialog.this.mEditImmediately = NewDriverDialog.this.mEditImmediatelyButton
+								.getSelection();
+					}
+
+					public void widgetDefaultSelected(SelectionEvent e) {
+						widgetSelected(e);
+					}
+				});
+
+		setTitle(DriverMgmtMessages.getString("NewDriverDialog.title")); //$NON-NLS-1$
+		setMessage(DriverMgmtMessages.getString("NewDriverDialog.message")); //$NON-NLS-1$
+
+		getEditImmediatelyState();
+		this.mEditImmediatelyButton.setSelection(this.mEditImmediately);
+
+		return area;
+	}
+
+	private void validateName() {
+		boolean isOk = false;
+
+		String testName = this.mDriverName;
+
+		Object obj = DriverManager.getInstance().getDriverInstanceByName(
+				testName);
+		if (obj == null) {
+			isOk = true;
+			this.setErrorMessage(null);
+			this.mErrorMessage = null;
+		}
+		else {
+			isOk = false;
+			String errorMessage = DriverMgmtMessages
+					.getString("NewDriverDialog.driverExistsWithName"); //$NON-NLS-1$
+			this.setErrorMessage(errorMessage);
+			this.mErrorMessage = errorMessage;
+		}
+
+		if (testName != null
+				&& (testName.startsWith(" ") || testName.endsWith(" "))) { //$NON-NLS-1$ //$NON-NLS-2$
+			isOk = false;
+			String errorMessage = DriverMgmtMessages
+					.getString("NewDriverDialog.driverNameNoSpaces"); //$NON-NLS-1$
+			this.setErrorMessage(errorMessage);
+			this.mErrorMessage = errorMessage;
+		}
+
+		StructuredSelection selection = (StructuredSelection) NewDriverDialog.this.mTreeViewer
+				.getSelection();
+		boolean isOkSelection = false;
+		if (selection.getFirstElement() instanceof TemplateDescriptor) {
+			isOkSelection = true;
+		}
+		else {
+			isOkSelection = false;
+		}
+		this.mOKButton.setEnabled(isOk && isOkSelection);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
+	 */
+	protected void createButtonsForButtonBar(Composite parent) {
+		this.mOKButton = createButton(parent, IDialogConstants.OK_ID,
+				IDialogConstants.OK_LABEL, true);
+		this.mOKButton.setEnabled(false);
+
+		createButton(parent, IDialogConstants.CANCEL_ID,
+				IDialogConstants.CANCEL_LABEL, false);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
+	 */
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		this.shell = newShell;
+		
+		int width = 400;
+		int height = 500;
+			
+		newShell.setText(DriverMgmtMessages
+				.getString("NewDriverDialog.windowTitle")); //$NON-NLS-1$
+
+		IDialogSettings dset = ConnectivityUIPlugin.getDefault()
+				.getDialogSettings();
+		if (dset != null) {
+			IDialogSettings dSection = dset.getSection(MEMENTO_ROOT);
+			if (dSection != null) {
+				if (dSection.get(MEMENTO_DIALOG_SIZE_HEIGHT) != null
+						&& dSection.get(MEMENTO_DIALOG_SIZE_HEIGHT).trim()
+								.length() > 0) {
+					height = dSection.getInt(MEMENTO_DIALOG_SIZE_HEIGHT);
+					width = dSection.getInt(MEMENTO_DIALOG_SIZE_WIDTH);
+				}
+			}
+		}
+		this.shell.setSize(width, height);
+		centerDialog(newShell);
+	}
+	
+	/*
+	 * Center the dialog relative to its parent
+	 */
+	private void centerDialog(Shell newShell){
+		Composite parent = newShell.getParent();
+		Rectangle parentSize = parent.getBounds();
+		Rectangle newShellSize = newShell.getBounds();
+
+		int x, y;
+		x = (parentSize.width - newShellSize.width)/2 + parentSize.x;
+		y = (parentSize.height - newShellSize.height)/2 + parentSize.y;
+
+		newShell.setLocation(new Point(x, y));		
+	}
+
+	/**
+	 * Return the state of the edit immediately.
+	 * 
+	 * @return
+	 */
+	public boolean getEditImmediately() {
+		return this.mEditImmediately;
+	}
+
+	/**
+	 * Return the template descriptor.
+	 * 
+	 * @return
+	 */
+	public TemplateDescriptor getDriverTypeDescriptor() {
+		return this.mDriverTemplateDescriptor;
+	}
+
+	/**
+	 * Return the driver instance.
+	 * 
+	 * @return
+	 */
+	public IPropertySet getNewDriverInstance() {
+		return this.mPropertySet;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
+	 */
+	protected void okPressed() {
+		if (this.mDriverTemplateDescriptor != null) {
+			String propId = DriverMgmtMessages
+					.getString("NewDriverDialog.text.id_prefix") + this.mDriverName; //$NON-NLS-1$
+
+			if (this.mPropertySet == null) {
+				DriverInstance newDriver =
+					DriverManager.getInstance().createNewDriverInstance(this.mDriverTemplateDescriptor.getId(),
+							this.mDriverName.trim(), null);
+				this.mPropertySet = newDriver.getPropertySet();
+			}
+			this.mPropertySet.setID(propId);
+		}
+
+		// after saveState, user's choice of "edit immediately" has been saved,
+		// we reset this flag to the current selection's corresponding state, so
+		// getEditImmediately() will return correct value.
+		mEditImmediately = mEditImmediatelyButton.getSelection();
+		
+		super.okPressed();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.dialogs.Dialog#cancelPressed()
+	 */
+	protected void cancelPressed() {
+		if (this.mPropertySet != null) {
+			// just make sure that the marker is removed
+			DriverValidator.removeOldProblemMarkers(this.mPropertySet.getName());
+		}
+		super.cancelPressed();
+	}
+
+	/**
+	 * Return the category descriptor
+	 * 
+	 * @return
+	 */
+	public CategoryDescriptor getCategoryDescriptor() {
+		if (this.mDriverTemplateDescriptor != null) {
+			CategoryDescriptor category = CategoryDescriptor
+					.getCategoryDescriptor(this.mDriverTemplateDescriptor
+							.getParentCategory());
+			return category;
+		}
+		return null;
+	}
+
+	/*
+	 * Save the property sets
+	 */
+	private void saveState() {
+		IDialogSettings dset = ConnectivityUIPlugin.getDefault()
+				.getDialogSettings();
+		if (dset != null) {
+			IDialogSettings dSection = dset.getSection(MEMENTO_ROOT);
+			if (dSection == null)
+				dSection = dset.addNewSection(MEMENTO_ROOT);
+			if (dSection != null) {
+				Point size = getShell().getSize();
+				dSection.put(MEMENTO_DIALOG_SIZE_HEIGHT, size.y);
+				dSection.put(MEMENTO_DIALOG_SIZE_WIDTH, size.x);
+
+				dSection.put(MEMENTO_DIALOG_EDIT_IMMEDIATELY,
+						this.mEditImmediately);
+			}
+		}
+	}
+
+	/*
+	 * Return the state of the edit immediately state from the dialog settings.
+	 */
+	private void getEditImmediatelyState() {
+		IDialogSettings dset = ConnectivityUIPlugin.getDefault()
+				.getDialogSettings();
+		if (dset != null) {
+			IDialogSettings dSection = dset.getSection(MEMENTO_ROOT);
+			if (dSection != null) {
+				if (dSection.get(MEMENTO_DIALOG_EDIT_IMMEDIATELY) != null) {
+					this.mEditImmediately = dSection
+							.getBoolean(MEMENTO_DIALOG_EDIT_IMMEDIATELY);
+				}
+			}
+		}
+
+	}
+	
+	protected boolean needEditImmediately(TemplateDescriptor descriptor) {
+		return !descriptor.getEmptyJarListIsOKFlag() || descriptor.hasVisibleProperties();
+	}
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/TableSortSelectionListener.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/TableSortSelectionListener.java
new file mode 100644
index 0000000..9011422
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/TableSortSelectionListener.java
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.dialogs;
+
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.widgets.TableColumn;
+
+public class TableSortSelectionListener implements SelectionListener {
+
+	private final TableViewer viewer;
+	private final TableColumn column;
+	private final InvertableSorter sorter;
+	private final boolean keepDirection;
+	private InvertableSorter currentSorter;
+ 
+	/**
+	 * The constructor of this listener.
+	 * 
+	 * @param viewer
+	 *            the tableviewer this listener belongs to
+	 * @param column
+	 *            the column this listener is responsible for
+	 * @param sorter
+	 *            the sorter this listener uses
+	 * @param defaultDirection
+	 *            the default sorting direction of this Listener. Possible
+	 *            values are {@link SWT.UP} and {@link SWT.DOWN}
+	 * @param keepDirection
+	 *            if true, the listener will remember the last sorting direction
+	 *            of the associated column and restore it when the column is
+	 *            reselected. If false, the listener will use the default soting
+	 *            direction
+	 */
+	public TableSortSelectionListener(TableViewer viewer, TableColumn column,
+			AbstractInvertableTableSorter sorter, int defaultDirection,
+			boolean keepDirection) {
+		this.viewer = viewer;
+		this.column = column;
+		this.keepDirection = keepDirection;
+		this.sorter = (defaultDirection == SWT.UP) ?
+			sorter : sorter.getInverseSorter();
+		this.currentSorter = this.sorter;
+ 
+		this.column.addSelectionListener(this);
+	}
+ 
+	/**
+	 * Chooses the colum of this listener for sorting of the table. Mainly used
+	 * when first initialising the table.
+	 */
+	public void chooseColumnForSorting() {
+		viewer.getTable().setSortColumn(column);
+		viewer.getTable().setSortDirection(currentSorter.getSortDirection());
+		viewer.setSorter(currentSorter);
+	}
+ 
+	public void widgetSelected(SelectionEvent e) {
+		InvertableSorter newSorter;
+		if (viewer.getTable().getSortColumn() == column) {
+			newSorter = ((InvertableSorter) viewer.getSorter())
+					.getInverseSorter();
+		} else {
+			if (keepDirection) {
+				newSorter = currentSorter;
+			} else {
+				newSorter = sorter;
+			}
+		}
+ 
+		currentSorter = newSorter;
+		chooseColumnForSorting();
+	}
+ 
+	public void widgetDefaultSelected(SelectionEvent e) {
+		widgetSelected(e);
+	}
+	
+	public TableColumn getColumn() {
+		return this.column;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/TreeSortSelectionListener.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/TreeSortSelectionListener.java
new file mode 100644
index 0000000..b301b35
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/dialogs/TreeSortSelectionListener.java
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.dialogs;
+
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.widgets.TreeColumn;
+
+public class TreeSortSelectionListener implements SelectionListener {
+
+	private final TreeViewer viewer;
+	private final TreeColumn column;
+	private final InvertableSorter sorter;
+	private final boolean keepDirection;
+	private InvertableSorter currentSorter;
+ 
+	/**
+	 * The constructor of this listener.
+	 * 
+	 * @param viewer
+	 *            the tableviewer this listener belongs to
+	 * @param column
+	 *            the column this listener is responsible for
+	 * @param sorter
+	 *            the sorter this listener uses
+	 * @param defaultDirection
+	 *            the default sorting direction of this Listener. Possible
+	 *            values are {@link SWT.UP} and {@link SWT.DOWN}
+	 * @param keepDirection
+	 *            if true, the listener will remember the last sorting direction
+	 *            of the associated column and restore it when the column is
+	 *            reselected. If false, the listener will use the default soting
+	 *            direction
+	 */
+	public TreeSortSelectionListener(TreeViewer viewer, TreeColumn column,
+			AbstractInvertableTableSorter sorter, int defaultDirection,
+			boolean keepDirection) {
+		this.viewer = viewer;
+		this.column = column;
+		this.keepDirection = keepDirection;
+		this.sorter = (defaultDirection == SWT.UP) ?
+			sorter : sorter.getInverseSorter();
+		this.currentSorter = this.sorter;
+ 
+		this.column.addSelectionListener(this);
+	}
+ 
+	/**
+	 * Chooses the colum of this listener for sorting of the table. Mainly used
+	 * when first initialising the table.
+	 */
+	public void chooseColumnForSorting() {
+		viewer.getTree().setSortColumn(column);
+		viewer.getTree().setSortDirection(currentSorter.getSortDirection());
+		viewer.setSorter(currentSorter);
+	}
+ 
+	public void widgetSelected(SelectionEvent e) {
+		InvertableSorter newSorter;
+		if (viewer.getTree().getSortColumn() == column) {
+			newSorter = ((InvertableSorter) viewer.getSorter())
+					.getInverseSorter();
+		} else {
+			if (keepDirection) {
+				newSorter = currentSorter;
+			} else {
+				newSorter = sorter;
+			}
+		}
+ 
+		currentSorter = newSorter;
+		chooseColumnForSorting();
+	}
+ 
+	public void widgetDefaultSelected(SelectionEvent e) {
+		widgetSelected(e);
+	}
+	
+	public TreeColumn getColumn() {
+		return this.column;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/drivers/DriverClassEditDialog.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/drivers/DriverClassEditDialog.java
new file mode 100644
index 0000000..b4a2ede
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/drivers/DriverClassEditDialog.java
@@ -0,0 +1,388 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.drivers;
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.jar.JarFile;
+import java.util.zip.ZipException;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.datatools.connectivity.internal.DriverUtil;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.dialogs.ExceptionHandler;
+import org.eclipse.datatools.connectivity.ui.Messages;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.dialogs.SelectionDialog;
+
+/**
+ * This dialog allows the user to either type the driver class for
+ * a driver definition or populate the list from the available jars
+ * and allow the user to select one.
+ *
+ * @since 1.6
+ */
+public class DriverClassEditDialog extends SelectionDialog {
+
+	private String[] mJarList = null;
+	
+	private IStructuredContentProvider fContentProvider;
+
+    private ILabelProvider fLabelProvider;
+
+    private Object fInput;
+
+    private TableViewer fTableViewer;
+    
+    private Button typeOption;
+    
+    private Text classNameText;
+    
+    private Button browseOption;
+    
+//    private Button browseButton;
+
+    private boolean fAddCancelButton = true;
+
+    private int widthInChars = 55;
+
+    private int heightInChars = 15;
+
+    /**
+     * Create a new instance of the receiver with parent shell of parent.
+     * @param parent
+     */
+    public DriverClassEditDialog(Shell parent) {
+        super(parent);
+        fContentProvider = new ListContentProvider(new ArrayList());
+        fLabelProvider = new ListLabelProvider();
+    }
+
+    /**
+     * @param input The input for the list.
+     */
+    public void setInput(Object input) {
+        fInput = input;
+    }
+
+    public void setJarList ( String[] jars ) {
+    	this.mJarList = jars;
+    }
+    
+    /**
+     *@param addCancelButton if <code>true</code> there will be a cancel
+     * button.
+     */
+    public void setAddCancelButton(boolean addCancelButton) {
+        fAddCancelButton = addCancelButton;
+    }
+
+    protected void createButtonsForButtonBar(Composite parent) {
+        if (!fAddCancelButton) {
+			createButton(parent, IDialogConstants.OK_ID,
+                    IDialogConstants.OK_LABEL, true);
+		} else {
+			super.createButtonsForButtonBar(parent);
+		}
+    }
+
+    protected Control createDialogArea(Composite container) {
+        Composite parent = (Composite) super.createDialogArea(container);
+        createMessageArea(parent);
+        
+        typeOption = new Button (parent, SWT.RADIO);
+        typeOption.setText(Messages.DriverClassEditDialog_Type_option_button);
+        typeOption.setLayoutData(new GridData());
+        typeOption.setSelection(true);
+        typeOption.addSelectionListener( new SelectionListener() {
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				handleOptionSelection();
+			}
+
+			public void widgetSelected(SelectionEvent e) {
+				widgetDefaultSelected(e);
+			}
+		});
+        
+        
+        classNameText = new Text (parent, SWT.BORDER);
+        classNameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
+        classNameText.addModifyListener(new ModifyListener() {
+
+			public void modifyText(ModifyEvent e) {
+				if (classNameText.getText() != null) {
+					ArrayList selected = new ArrayList();
+					selected.add(classNameText.getText().trim());
+					setResult(selected);
+				}
+			}
+		});
+        
+        browseOption = new Button (parent, SWT.RADIO);
+        browseOption.setText(Messages.DriverClassEditDialog_Browse_option_button);
+        browseOption.setLayoutData(new GridData());
+        browseOption.setSelection(false);
+        browseOption.addSelectionListener( new SelectionListener() {
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				handleOptionSelection();
+			}
+
+			public void widgetSelected(SelectionEvent e) {
+				widgetDefaultSelected(e);
+			}
+		});
+        
+/*        browseButton = new Button (parent, SWT.PUSH);
+        browseButton.setText(Messages.DriverClassEditDialog_populate_classes_button);
+        browseButton.setLayoutData(new GridData());
+        browseButton.addSelectionListener(new SelectionListener(){
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				DriverClassEditDialog.this.populateClassList();
+			}
+
+			public void widgetSelected(SelectionEvent e) {
+				widgetDefaultSelected(e);
+			}
+		});
+*/
+        fTableViewer = new TableViewer(parent, getTableStyle());
+        fTableViewer.setContentProvider(fContentProvider);
+        fTableViewer.setLabelProvider(fLabelProvider);
+        if (fInput instanceof List) 
+        	fTableViewer.setInput(fInput);
+        else if (fInput instanceof String)
+        	classNameText.setText( (String) fInput);
+        
+        fTableViewer.addDoubleClickListener(new IDoubleClickListener() {
+            public void doubleClick(DoubleClickEvent event) {
+                if (fAddCancelButton) {
+					okPressed();
+				}
+            }
+        });
+        List initialSelection = getInitialElementSelections();
+        if (initialSelection != null) {
+			fTableViewer
+                    .setSelection(new StructuredSelection(initialSelection));
+		}
+        GridData gd = new GridData(GridData.FILL_BOTH);
+        gd.heightHint = convertHeightInCharsToPixels(heightInChars);
+        gd.widthHint = convertWidthInCharsToPixels(widthInChars);
+        Table table = fTableViewer.getTable();
+        table.setLayoutData(gd);
+        table.setFont(container.getFont());
+        handleOptionSelection();
+        return parent;
+    }
+    
+    private void handleOptionSelection() {
+    	if (typeOption.getSelection()) {
+    		classNameText.setEnabled(true);
+//    		browseButton.setEnabled(false);
+    		fTableViewer.getTable().setEnabled(false);
+    	}
+    	else {
+    		classNameText.setEnabled(false);
+//    		browseButton.setEnabled(true);
+    		fTableViewer.getTable().setEnabled(true);
+    		populateClassList();
+    	}
+    }
+
+    /**
+     * Return the style flags for the table viewer.
+     * @return int
+     */
+    private int getTableStyle() {
+        return SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER;
+    }
+
+    /*
+     * Overrides method from Dialog
+     */
+    protected void okPressed() {
+    	if (fTableViewer.getTable().getEnabled()) {
+	        // Build a list of selected children.
+	        IStructuredSelection selection = (IStructuredSelection) fTableViewer
+	                .getSelection();
+	        setResult(selection.toList());
+    	}
+    	else if (classNameText.getEnabled()) {
+			if (classNameText.getText() != null) {
+				ArrayList selected = new ArrayList();
+				selected.add(classNameText.getText().trim());
+				setResult(selected);
+			}
+    	}
+        super.okPressed();
+    }
+   
+    private ArrayList getClassList() {
+		final ArrayList classes = new ArrayList();
+		for (int i = 0; i < mJarList.length; i++) {
+			String filepath = mJarList[i];
+			final File file = new File(filepath);
+			try {
+				new JarFile(file);
+			} catch (ZipException e) {
+				// must not be a zip file - skip it
+				continue;
+			} catch (IOException e) {
+				String msg = e.getLocalizedMessage();
+				if (e.getLocalizedMessage() == null || e.getLocalizedMessage().trim().length() == 0) {
+					msg = ConnectivityUIPlugin.getDefault().getResourceString("PropertyDescriptor.error.msg");//$NON-NLS-1$
+				}
+				ExceptionHandler.showException(getShell(), 
+						ConnectivityUIPlugin.getDefault().getResourceString("PropertyDescriptor.error.title"), //$NON-NLS-1$
+						msg, e);
+				return null;
+			}
+			ProgressMonitorDialog pmd = new ProgressMonitorDialog(getShell());
+			try {
+				pmd.run(true, false, new IRunnableWithProgress() {
+
+					public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+						try {
+							String[] classStr = DriverUtil.getDriverClassesFromJar(file, monitor);
+							classes.addAll(Arrays.asList(classStr));
+						} catch (Exception e1) {
+							InvocationTargetException ce = new InvocationTargetException(e1);
+							throw ce;
+						}
+					}
+				});
+			} catch (InvocationTargetException e) {
+				String msg = e.getLocalizedMessage();
+				if (e.getLocalizedMessage() == null || e.getLocalizedMessage().trim().length() == 0) {
+					msg = ConnectivityUIPlugin.getDefault().getResourceString("PropertyDescriptor.error.msg");//$NON-NLS-1$
+				}
+				ExceptionHandler.showException(getShell(), 
+						ConnectivityUIPlugin.getDefault().getResourceString("PropertyDescriptor.error.title"), //$NON-NLS-1$
+						msg, e);
+				return null;
+			} catch (InterruptedException e) {
+				String msg = e.getLocalizedMessage();
+				if (e.getLocalizedMessage() == null || e.getLocalizedMessage().trim().length() == 0) {
+					msg = ConnectivityUIPlugin.getDefault().getResourceString("PropertyDescriptor.error.msg");//$NON-NLS-1$
+				}
+				ExceptionHandler.showException(getShell(), 
+						ConnectivityUIPlugin.getDefault().getResourceString("PropertyDescriptor.error.title"), //$NON-NLS-1$
+						msg, e);
+				return null;
+			}
+		}
+		return classes;
+    }
+
+	private class ListContentProvider implements IStructuredContentProvider {
+		
+		private ArrayList mList = null;
+		
+		public ListContentProvider(ArrayList list) {
+			mList = list;
+		}
+		
+		public void setList( ArrayList list ) {
+			mList = list;
+		}
+		
+		public Object[] getElements(Object inputElement) {
+			return mList.toArray();
+		}
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+		 */
+		public void dispose() {
+		}
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+		 */
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		}
+	}
+
+	private class ListLabelProvider extends LabelProvider {
+		public String getText(Object obj) {
+			String name = (String)obj;
+			if (name!=null)
+				return name;
+			return (name != null) ? name : "";
+		}
+		public Image getImage(Object obj) {
+			return null;
+		}
+	}
+	
+	private void populateClassList() {
+		ArrayList list = getClassList();
+		if (list != null) {
+			fContentProvider = new ListContentProvider(list);
+			fTableViewer.setContentProvider(fContentProvider);
+        	fTableViewer.setInput(list);
+        	fTableViewer.getTable().setFocus();
+            List initialSelection = getInitialElementSelections();
+            if (initialSelection == null || initialSelection.size() == 0) {
+            	if (classNameText != null && classNameText.getText().trim().length() > 0) {
+            		initialSelection = new ArrayList();
+            		initialSelection.add(classNameText.getText().trim());
+            	}
+            }
+            if (initialSelection != null && initialSelection.size() > 0) {
+    			fTableViewer
+                        .setSelection(new StructuredSelection(initialSelection));
+    			fTableViewer.reveal(initialSelection);
+    		}
+		}
+		else {
+			String title = 
+				ConnectivityUIPlugin.getDefault().getResourceString("DriverClassBrowsePropertyDescriptor.noclasses.title");//$NON-NLS-1$
+			String message = 
+				ConnectivityUIPlugin.getDefault().getResourceString("DriverClassBrowsePropertyDescriptor.noclasses.msg");//$NON-NLS-1$
+			MessageDialog.openInformation(getShell(),
+					title, 
+					message);
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/drivers/DriverPropertyEditorDescriptor.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/drivers/DriverPropertyEditorDescriptor.java
new file mode 100644
index 0000000..c293a18
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/drivers/DriverPropertyEditorDescriptor.java
@@ -0,0 +1,216 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.drivers;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+
+import com.ibm.icu.text.Collator;
+
+/**
+ * Represents a way to specify a driver property descriptor which is provided by the
+ * "org.eclipse.datatools.connectivity.ui.driverPropertyEditor" extension point.
+ * 
+ * @author brianf
+ */
+public class DriverPropertyEditorDescriptor implements Comparable {
+
+	// extension details
+	public static final String PROPERTY_EDITOR_TAG = "propertyEditor";//$NON-NLS-1$
+	private static final String EXTENSION_POINT_NAME = "driverPropertyEditor"; //$NON-NLS-1$
+
+	// attributes
+	public static final String ATTR_ID = "driverTemplateID"; //$NON-NLS-1$
+	public static final String ATTR_TEMPLATE_ID = "driverTemplateID"; //$NON-NLS-1$
+	public static final String ATTR_PROP_ID = "driverPropertyID"; //$NON-NLS-1$
+	public static final String ATTR_PROPERTY_EDITOR = "customPropertyDescriptor"; //$NON-NLS-1$
+
+	private static final DriverPropertyEditorDescriptor[] EMPTY = {};
+
+	// local list of driver templates
+	private static Map fgDriverPropertyEditorDescriptors;
+
+	// local copy of configuration element
+	private IConfigurationElement fElement;
+	
+	/**
+	 * Creates a new driver property editor template descriptor for the given configuration
+	 * element.
+	 */
+	protected DriverPropertyEditorDescriptor(IConfigurationElement element) {
+		this.fElement = element;
+
+		/*
+		 * "An extension for extension-point
+		 * org.eclipse.datatools.connectivity.driverExtension does not provide a
+		 * valid ID");
+		 */
+		Assert.isNotNull(getId(), 
+				ConnectivityUIPlugin.getDefault().getResourceString("DriverPropertyEditorDescriptor.InvalidID")); //$NON-NLS-1$
+		Assert.isNotNull(getTargetTemplateId(), 
+				ConnectivityUIPlugin.getDefault().getResourceString("DriverPropertyEditorDescriptor.InvalidTargetTemplateID")); //$NON-NLS-1$
+		Assert.isNotNull(getTargetPropertyId(), 
+				ConnectivityUIPlugin.getDefault().getResourceString("DriverPropertyEditorDescriptor.InvalidTargetPropertyId")); //$NON-NLS-1$
+		Assert.isNotNull(getCustomPropertyEditor(), 
+				ConnectivityUIPlugin.getDefault().getResourceString("DriverPropertyEditorDescriptor.InvalidCustomPropertyEditorClass")); //$NON-NLS-1$
+	}
+
+	/**
+	 * Returns any driver property editor descriptors for the template/
+	 * property ID combo.
+	 * 
+	 * @param driverTemplateId
+	 * @param driverPropertyId
+	 * @return
+	 */
+	public static DriverPropertyEditorDescriptor[] getByDriverTemplateAndProperty(String driverTemplateId, String driverPropertyId) {
+		if (fgDriverPropertyEditorDescriptors == null) {
+			IExtensionRegistry registry = Platform.getExtensionRegistry();
+			IConfigurationElement[] elements = registry
+					.getConfigurationElementsFor(ConnectivityUIPlugin
+							.getDefault().getBundle().getSymbolicName(),
+							EXTENSION_POINT_NAME);
+			createDriverTemplateDescriptors(elements);
+		}
+
+		ArrayList descriptors = (ArrayList) fgDriverPropertyEditorDescriptors.get(driverTemplateId);
+		ArrayList result = new ArrayList();
+		if (descriptors != null) {
+			Iterator iter = descriptors.iterator();
+			while (iter.hasNext()) {
+				DriverPropertyEditorDescriptor dped = (DriverPropertyEditorDescriptor) iter.next();
+				if (dped.getTargetPropertyId().equals(driverPropertyId)) {
+					result.add(dped);
+				}
+			}
+		}
+		
+		return result != null ?
+				(DriverPropertyEditorDescriptor[]) result.toArray(new DriverPropertyEditorDescriptor[result.size()]) : EMPTY;
+	}
+
+	/**
+	 * Returns all contributed driver property editor descriptors.
+	 */
+	public static DriverPropertyEditorDescriptor[] getDriverPropertyEditorDescriptors() {
+		if (fgDriverPropertyEditorDescriptors == null) {
+			IExtensionRegistry registry = Platform.getExtensionRegistry();
+			IConfigurationElement[] elements = registry
+					.getConfigurationElementsFor(ConnectivityUIPlugin
+							.getDefault().getBundle().getSymbolicName(),
+							EXTENSION_POINT_NAME);
+			createDriverTemplateDescriptors(elements);
+		}
+		return (DriverPropertyEditorDescriptor[]) fgDriverPropertyEditorDescriptors.values().toArray(new DriverPropertyEditorDescriptor[fgDriverPropertyEditorDescriptors.size()]);
+	}
+
+	/**
+	 * Returns the property editor id.
+	 */
+	public String getId() {
+		return this.fElement.getAttribute(ATTR_ID);
+	}
+
+	/**
+	 * Returns the target property id
+	 */
+	public String getTargetPropertyId() {
+		return this.fElement.getAttribute(ATTR_PROP_ID);
+	}
+
+	/**
+	 * Returns the target template id
+	 */
+	public String getTargetTemplateId() {
+		return this.fElement.getAttribute(ATTR_TEMPLATE_ID);
+	}
+
+	/**
+	 * Returns the custom property editor class name
+	 */
+	public String getCustomPropertyEditor() {
+		return this.fElement.getAttribute(ATTR_PROPERTY_EDITOR);
+	}
+	
+	/**
+	 * Returns the configuration element.
+	 */
+	public IConfigurationElement getElement() {
+		return this.fElement;
+	}
+
+	/*
+	 * Implements a method from IComparable
+	 */
+	public int compareTo(Object o) {
+		if (o instanceof DriverPropertyEditorDescriptor)
+			return Collator.getInstance().compare(getId(),
+					((DriverPropertyEditorDescriptor) o).getId());
+		return Integer.MIN_VALUE;
+	}
+
+	/**
+	 * Creates the property editor descriptors.
+	 */
+	private static void createDriverTemplateDescriptors(
+			IConfigurationElement[] elements) {
+		fgDriverPropertyEditorDescriptors = new HashMap();
+		
+		for (int i = 0; i < elements.length; ++i) {
+			final IConfigurationElement element = elements[i];
+			if (PROPERTY_EDITOR_TAG.equals(element.getName())) {
+
+				final DriverPropertyEditorDescriptor[] desc = new DriverPropertyEditorDescriptor[1];
+				SafeRunner
+						.run(new DriverPropertyEditorSafeRunnable ( desc, element));
+
+				if (desc[0] != null) {
+					List descriptors = (List)fgDriverPropertyEditorDescriptors.get(desc[0].getTargetTemplateId());
+					if (descriptors == null) {
+						descriptors = new ArrayList(1);
+						fgDriverPropertyEditorDescriptors.put(desc[0].getTargetTemplateId(), descriptors);
+					}
+					descriptors.add(desc[0]);
+				}
+			}
+		}
+	}
+	
+	/* (non-Javadoc)
+	 * @see java.lang.Object#equals(java.lang.Object)
+	 */
+	public boolean equals(Object obj) {
+		if (obj instanceof DriverPropertyEditorDescriptor) {
+			DriverPropertyEditorDescriptor compare = (DriverPropertyEditorDescriptor) obj;
+			return this.getId().equals(compare.getId());
+		}
+		return super.equals(obj);
+	}
+
+	/* (non-Javadoc)
+	 * @see java.lang.Object#hashCode()
+	 */
+	public int hashCode() {
+		if (this.getId() != null)
+			return this.getId().hashCode();
+		return super.hashCode();
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/drivers/DriverPropertyEditorSafeRunnable.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/drivers/DriverPropertyEditorSafeRunnable.java
new file mode 100644
index 0000000..e316399
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/drivers/DriverPropertyEditorSafeRunnable.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.drivers;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.ISafeRunnable;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+
+/**
+ * Safe runnable to handle creating the descriptor
+ * @author brianf
+ */
+public class DriverPropertyEditorSafeRunnable implements ISafeRunnable {
+
+	private DriverPropertyEditorDescriptor[] mInstances = null;
+	private IConfigurationElement mElement = null;
+	
+	/*
+	 * Constructor
+	 * @param instances
+	 * @param element
+	 */
+	public DriverPropertyEditorSafeRunnable ( DriverPropertyEditorDescriptor[] instances, IConfigurationElement element ) {
+		this.mInstances = instances;
+		this.mElement = element;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.runtime.ISafeRunnable#handleException(java.lang.Throwable)
+	 */
+	public void handleException(Throwable exception) {
+		ConnectivityPlugin.getDefault().log(exception);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.runtime.ISafeRunnable#run()
+	 */
+	public void run() throws Exception {
+		if (this.mInstances != null)
+			this.mInstances[0] = new DriverPropertyEditorDescriptor(this.mElement);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/preferences/DataToolsMainPage.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/preferences/DataToolsMainPage.java
new file mode 100644
index 0000000..5996128
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/preferences/DataToolsMainPage.java
@@ -0,0 +1,72 @@
+package org.eclipse.datatools.connectivity.internal.ui.preferences;
+
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.IHelpConstants;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.help.IContextProvider;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+public class DataToolsMainPage extends PreferencePage implements
+		IWorkbenchPreferencePage, IContextProvider {
+
+	private ContextProviderDelegate contextProviderDelegate =
+		new ContextProviderDelegate(ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName());
+
+	public DataToolsMainPage() {
+		super();
+		noDefaultAndApplyButton();
+	}
+
+	public DataToolsMainPage(String title) {
+		super(title);
+	}
+
+	public DataToolsMainPage(String title, ImageDescriptor image) {
+		super(title, image);
+	}
+
+	protected Control createContents(Composite parent) {
+		Composite comp = new Composite(parent, SWT.NONE);
+		GridLayout layout = new GridLayout();
+		layout.marginHeight = 0;
+		layout.marginWidth = 0;
+		comp.setLayout(layout);
+
+		Label descLabel = new Label(comp, SWT.NONE);
+		descLabel.setText(Messages.Connectivity_description);
+
+		return comp;
+	}
+
+	public void init(IWorkbench workbench) {
+	}
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+
+	public void createControl(Composite parent) {
+		super.createControl(parent);
+		getShell().setData(HelpUtil.CONTEXT_PROVIDER_KEY, this);
+		HelpUtil.setHelp(getControl(), HelpUtil.getContextId(IHelpConstants.CONTEXT_ID_CONNECTIVITY_PREFERENCE_PAGE, ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName()));
+
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/preferences/DriverPreferences.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/preferences/DriverPreferences.java
new file mode 100644
index 0000000..53c394e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/preferences/DriverPreferences.java
@@ -0,0 +1,928 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ * 				brianf - update for usability work
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.preferences;
+
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.drivers.DriverManager;
+import org.eclipse.datatools.connectivity.drivers.DriverMgmtMessages;
+import org.eclipse.datatools.connectivity.drivers.DriverValidator;
+import org.eclipse.datatools.connectivity.drivers.IDriverMgmtConstants;
+import org.eclipse.datatools.connectivity.drivers.IPropertySet;
+import org.eclipse.datatools.connectivity.drivers.PropertySetImpl;
+import org.eclipse.datatools.connectivity.drivers.XMLFileManager;
+import org.eclipse.datatools.connectivity.drivers.models.CategoryDescriptor;
+import org.eclipse.datatools.connectivity.drivers.models.DriversProvider;
+import org.eclipse.datatools.connectivity.drivers.models.TemplateDescriptor;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.DriverTableFilter;
+import org.eclipse.datatools.connectivity.internal.ui.DriverTreeFilter;
+import org.eclipse.datatools.connectivity.internal.ui.DriverTreeSorter;
+import org.eclipse.datatools.connectivity.internal.ui.IHelpConstants;
+import org.eclipse.datatools.connectivity.internal.ui.dialogs.AbstractInvertableTableSorter;
+import org.eclipse.datatools.connectivity.internal.ui.dialogs.CategoryDescriptorNameComparator;
+import org.eclipse.datatools.connectivity.internal.ui.dialogs.CategoryUtils;
+import org.eclipse.datatools.connectivity.internal.ui.dialogs.DriverDialog;
+import org.eclipse.datatools.connectivity.internal.ui.dialogs.DriverListContentProvider;
+import org.eclipse.datatools.connectivity.internal.ui.dialogs.DriverListLabelProvider;
+import org.eclipse.datatools.connectivity.internal.ui.dialogs.EditDriverDialog;
+import org.eclipse.datatools.connectivity.internal.ui.dialogs.TableSortSelectionListener;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.help.IContextProvider;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+import com.ibm.icu.text.Collator;
+
+/**
+ * Driver management preference page.
+ * 
+ * @author brianf
+ */
+public class DriverPreferences extends PreferencePage implements
+		IWorkbenchPreferencePage, IContextProvider {
+
+	private static String ALL_STRING = DriverMgmtMessages.getString("DriverDialog.AllFilter"); //$NON-NLS-1$
+
+	// ui elements
+	private Button mAddButton;
+	private Button mRemoveButton;
+	private Button mEditButton;
+	private Button mCopyButton;
+	private TableViewer mTableViewer;
+	private Combo mTypeCombo;
+	private Combo mVendorCombo;
+
+	private Action mAddAction;
+	private Action mRemoveAction;
+	private Action mEditAction;
+	private Action mCopyAction;
+
+	// dirty flag for save/no save
+	private boolean mDirty = false;
+
+	// viewer filter
+	private DriverTableFilter mViewerFilter;
+	private DriverTableFilter mTypeFilter;
+	private DriverTableFilter mVendorFilter;
+
+	// stashed selected propertyset
+	private IPropertySet selectedPS = null;
+	
+	private String mMessage = null;
+
+	private ContextProviderDelegate contextProviderDelegate =
+		new ContextProviderDelegate(ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName());
+
+	/**
+	 * Default Constructor
+	 */
+	public DriverPreferences() {
+		super();
+		this.noDefaultAndApplyButton();
+	}
+
+	/**
+	 * Constructor with a page title
+	 * 
+	 * @param title
+	 */
+	public DriverPreferences(String title) {
+		super(title);
+		this.noDefaultAndApplyButton();
+	}
+
+	/**
+	 * Constructor with a title and icon
+	 * 
+	 * @param title
+	 * @param image
+	 */
+	public DriverPreferences(String title, ImageDescriptor image) {
+		super(title, image);
+		this.noDefaultAndApplyButton();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
+	 */
+	protected Control createContents(Composite parent) {
+		mMessage = getMessage();
+        Font font = parent.getFont();
+
+		Composite content = new Composite(parent, SWT.NONE);
+		GridLayout layout = new GridLayout();
+		layout.numColumns = 2;
+		layout.marginWidth = 0;
+		layout.marginHeight = 0;
+		content.setLayout(layout);
+		GridData data = new GridData();
+		data.verticalAlignment = GridData.FILL;
+		data.horizontalAlignment = GridData.FILL;
+		content.setLayoutData(data);
+		content.setFont(font);
+
+		Composite comboComposite = new Composite ( content, SWT.NONE);
+		GridLayout combolayout = new GridLayout(2, false);
+		combolayout.marginWidth = 0;
+		combolayout.marginHeight = 0;
+		comboComposite.setLayout(combolayout);
+		GridData CCdata = new GridData();
+		CCdata.horizontalAlignment = GridData.FILL;
+		CCdata.horizontalSpan = 2;
+		comboComposite.setLayoutData(CCdata);
+		
+		CategoryDescriptor[] roots = CategoryUtils.getOrderedRootCategories();
+		if (mViewerFilter != null) {
+			roots = new CategoryDescriptor[] {((DriverTreeFilter) mViewerFilter).getCategoryDescriptor()};
+		}
+		if (roots != null && roots.length > 1) {
+			Label tlabel = new Label(comboComposite, SWT.LEFT);
+			tlabel.setText(DriverMgmtMessages.getString("DriverPreferences.DriverTypeFilter")); //$NON-NLS-1$
+			tlabel.setLayoutData(new GridData());
+			
+			mTypeCombo = new Combo (comboComposite, SWT.BORDER | SWT.READ_ONLY );
+			mTypeCombo.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false));
+			
+			mTypeCombo.add(ALL_STRING);
+			mTypeCombo.setData(ALL_STRING, roots);
+			
+			for (int i = 0; i < roots.length; i++) {
+				mTypeCombo.add(roots[i].getName());
+				mTypeCombo.setData(roots[i].getName(), roots[i]);
+			}
+			
+			mTypeCombo.addSelectionListener(new SelectionListener() {
+
+				public void widgetDefaultSelected(SelectionEvent e) {
+					handleTypeSelection();
+				}
+
+				public void widgetSelected(SelectionEvent e) {
+					widgetDefaultSelected(e);
+				}
+			});
+		}
+
+		if (roots[0].getParent() != null && roots[0].getParent().getParent() == null) {
+			// too deep
+		}
+		else {
+			Label vLabel = new Label(comboComposite, SWT.LEFT);
+			vLabel.setText(DriverMgmtMessages.getString("DriverPreferences.VendorFilter")); //$NON-NLS-1$
+			vLabel.setLayoutData(new GridData());
+			
+			mVendorCombo = new Combo (comboComposite, SWT.BORDER | SWT.READ_ONLY );
+			mVendorCombo.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false));
+			
+			mVendorCombo.addSelectionListener( new SelectionListener() {
+
+				public void widgetDefaultSelected(SelectionEvent e) {
+					handleVendorSelection();
+				}
+
+				public void widgetSelected(SelectionEvent e) {
+					widgetDefaultSelected(e);
+				}
+			});
+			
+			if (roots != null && roots.length == 1) {
+				CategoryDescriptor[] children = 
+					CategoryUtils.getOrderedChildCategories(roots[0].getId());
+				if (children != null && children.length > 0) {
+					mVendorCombo.add(ALL_STRING);
+					for (int i = 0; i < children.length; i++) {
+						mVendorCombo.add(children[i].getName());
+						mVendorCombo.setData(children[i].getName(), children[i]);
+					}
+				}
+				else {
+					mVendorCombo.setEnabled(false);
+				}
+			}
+		}
+
+		this.mTableViewer = new TableViewer(content, SWT.BORDER | SWT.FULL_SELECTION);
+		data = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);
+		this.mTableViewer.getTable().setLayoutData(data);
+		this.mTableViewer.getTable().setFont(font);
+		this.mTableViewer.getTable().setHeaderVisible( true );
+
+		makeActions();
+		hookContextMenu();
+
+
+		TableSortSelectionListener tssl1 = createTableColumn(mTableViewer, DriverMgmtMessages.getString("DriverPreferences.NameColumn"), DriverMgmtMessages.getString("DriverPreferences.DriverNameColumn"), //$NON-NLS-1$ //$NON-NLS-2$
+				new TextSorter(0), SWT.UP, false);
+		tssl1.getColumn().setWidth(200);
+		tssl1.getColumn().setResizable(true);
+		tssl1.chooseColumnForSorting();
+		
+		TableSortSelectionListener tssl2 = createTableColumn(mTableViewer, DriverMgmtMessages.getString("DriverPreferences.VendorColumn"), DriverMgmtMessages.getString("DriverPreferences.DriverVendorColumn"), //$NON-NLS-1$ //$NON-NLS-2$
+				new TextSorter(1), SWT.UP, true);
+		tssl2.getColumn().setWidth(200);
+		tssl2.getColumn().setResizable(true);
+		
+		TableSortSelectionListener tssl3 = createTableColumn(mTableViewer, DriverMgmtMessages.getString("DriverPreferences.VersionColumn"), DriverMgmtMessages.getString("DriverPreferences.DriverVersionColumn"), //$NON-NLS-1$ //$NON-NLS-2$
+				new TextSorter(2), SWT.UP, false);
+		tssl3.getColumn().setWidth(100);
+		tssl3.getColumn().setResizable(true);
+
+		this.mTableViewer.setContentProvider(new DriverListContentProvider());
+		this.mTableViewer.setLabelProvider(new DriverListLabelProvider()); //DecoratingLabelProvider(
+//				new DriverTreeLabelProvider(), new DriverTreeLabelProvider()));
+		this.mTableViewer.setSorter(new DriverTreeSorter());
+		if (this.mViewerFilter != null) {
+			this.mTableViewer.addFilter(this.mViewerFilter);
+		}
+		this.mTableViewer.setInput(DriversProvider.getInstance());
+//		this.mTableViewer.expandToLevel(3);
+
+		this.mTableViewer
+				.addSelectionChangedListener(new ISelectionChangedListener() {
+
+					public void selectionChanged(SelectionChangedEvent event) {
+						DriverPreferences.this.setMessage(DriverPreferences.this.mMessage);
+						DriverPreferences.this.setErrorMessage(null);
+						
+						DriverPreferences.this.selectedPS = null;
+						StructuredSelection selection = (StructuredSelection) DriverPreferences.this.mTableViewer
+								.getSelection();
+						updateButtons(selection.getFirstElement());
+					}
+
+				}
+			);
+		
+		mTableViewer.addDoubleClickListener(new IDoubleClickListener() {
+
+			public void doubleClick(DoubleClickEvent event) {
+				StructuredSelection selection = (StructuredSelection) DriverPreferences.this.mTableViewer
+					.getSelection();
+				DriverPreferences.this.editDriver(selection);
+			}
+		});
+
+		Composite groupComponent = new Composite(content, SWT.NULL);
+		GridLayout groupLayout = new GridLayout();
+		groupLayout.marginWidth = 0;
+		groupLayout.marginHeight = 0;
+		groupComponent.setLayout(groupLayout);
+		data = new GridData();
+		data.verticalAlignment = GridData.FILL;
+		data.horizontalAlignment = GridData.FILL;
+		groupComponent.setLayoutData(data);
+		groupComponent.setFont(font);
+
+		this.mAddButton = new Button(groupComponent, SWT.PUSH);
+		this.mAddButton.setText(DriverMgmtMessages
+				.getString("DriverPreferences.button.addDriver")); //$NON-NLS-1$
+		this.mAddButton.setLayoutData(data);
+		this.mAddButton.setFont(font);
+		setButtonLayoutData(this.mAddButton);
+		this.mAddButton.addSelectionListener(new SelectionListener() {
+
+			public void widgetSelected(SelectionEvent e) {
+				addDriver(DriverPreferences.this.mTableViewer.getSelection());
+			}
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				widgetSelected(e);
+			}
+
+		});
+
+		this.mEditButton = new Button(groupComponent, SWT.PUSH);
+		this.mEditButton.setText(DriverMgmtMessages
+				.getString("DriverPreferences.button.editDriver")); //$NON-NLS-1$
+		this.mEditButton.setLayoutData(data);
+		this.mEditButton.setFont(font);
+		setButtonLayoutData(this.mEditButton);
+		this.mEditButton.addSelectionListener(new SelectionListener() {
+
+			public void widgetSelected(SelectionEvent e) {
+				editDriver(DriverPreferences.this.mTableViewer.getSelection());
+			}
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				widgetSelected(e);
+			}
+
+		});
+
+		this.mRemoveButton = new Button(groupComponent, SWT.PUSH);
+		this.mRemoveButton.setText(DriverMgmtMessages
+				.getString("DriverPreferences.button.removeDriver")); //$NON-NLS-1$
+		this.mRemoveButton.setLayoutData(data);
+		this.mRemoveButton.setFont(font);
+		setButtonLayoutData(this.mRemoveButton);
+		this.mRemoveButton.addSelectionListener(new SelectionListener() {
+
+			public void widgetSelected(SelectionEvent e) {
+				removeDriver(DriverPreferences.this.mTableViewer.getSelection());
+			}
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				widgetSelected(e);
+			}
+
+		});
+
+		this.mCopyButton = new Button(groupComponent, SWT.PUSH);
+		this.mCopyButton.setText(DriverMgmtMessages
+				.getString("DriverPreferences.button.copyDriver")); //$NON-NLS-1$
+		this.mCopyButton.setLayoutData(data);
+		this.mCopyButton.setFont(font);
+		setButtonLayoutData(this.mCopyButton);
+		this.mCopyButton.addSelectionListener(new SelectionListener() {
+
+			public void widgetSelected(SelectionEvent e) {
+				copyDriver(DriverPreferences.this.mTableViewer.getSelection());
+			}
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				widgetSelected(e);
+			}
+
+		});
+
+		if (CategoryDescriptor.getRootCategories() != null && CategoryDescriptor.getRootCategories().length > 0)
+			this.mTableViewer.setSelection(new StructuredSelection(
+					CategoryDescriptor.getRootCategories()[0]));
+		
+		if (mTypeCombo != null) {
+			mTypeCombo.select(0);
+			handleTypeSelection();
+		}
+		if (mVendorCombo != null && mVendorCombo.getItemCount() > 0) {
+			mVendorCombo.select(0);
+			handleVendorSelection();
+		}
+
+		updateButtons(null);
+
+		return content;
+	}
+
+	private void updateButtons ( Object selection ) {
+		DriverPreferences.this.mAddButton
+			.setEnabled(true);
+		if (selection instanceof IPropertySet) {
+			DriverPreferences.this.mRemoveAction
+					.setEnabled(true);
+			DriverPreferences.this.mEditAction
+					.setEnabled(true);
+			DriverPreferences.this.mCopyAction
+				.setEnabled(true);
+			DriverPreferences.this.mRemoveButton
+				.setEnabled(true);
+			DriverPreferences.this.mEditButton
+				.setEnabled(true);
+			DriverPreferences.this.mCopyButton
+				.setEnabled(true);
+			DriverPreferences.this.selectedPS = (IPropertySet) selection;
+			if (DriverPreferences.this.selectedPS != null) {
+				validate(DriverPreferences.this.selectedPS);
+			}
+//			updateButtons(selection);
+		}
+		else {
+			DriverPreferences.this.mRemoveAction
+				.setEnabled(false);
+			DriverPreferences.this.mEditAction
+					.setEnabled(false);
+			DriverPreferences.this.mCopyAction
+				.setEnabled(false);
+			DriverPreferences.this.mRemoveButton
+				.setEnabled(false);
+			DriverPreferences.this.mEditButton
+				.setEnabled(false);
+			DriverPreferences.this.mCopyButton
+				.setEnabled(false);
+		}
+//		DriverPreferences.this.mAddButton.setEnabled(true);
+//		// if they selected a category...
+//		if (selection instanceof CategoryDescriptor) {
+//			DriverPreferences.this.mRemoveAction
+//					.setEnabled(false);
+//			DriverPreferences.this.mEditAction
+//					.setEnabled(false);
+//			DriverPreferences.this.mCopyAction
+//					.setEnabled(false);
+//		}
+//		// if they selected a driver instance
+//		else if (selection instanceof IPropertySet) {
+//			DriverPreferences.this.mRemoveAction
+//					.setEnabled(true);
+//			DriverPreferences.this.mEditAction.setEnabled(true);
+//			DriverPreferences.this.mCopyAction.setEnabled(true);
+//
+//			IPropertySet ps = (IPropertySet) selection;
+//			if (ps != null) {
+//				validate(ps);
+//			}
+//		}
+//		else {
+//			DriverPreferences.this.mRemoveAction.setEnabled(false);
+//			DriverPreferences.this.mEditAction.setEnabled(false);
+//			DriverPreferences.this.mCopyAction.setEnabled(false);
+//		}
+	}
+	
+	private void addDriver(ISelection selection) {
+		DriverDialog ddtt = new DriverDialog(this.getShell());
+		ddtt.setEditMode(false); // NEW Driver Dialog
+		ddtt.setVendorFilter(this.mVendorFilter);
+		ddtt.setTypeFilter(this.mTypeFilter);
+		int rtn_code = ddtt.open();
+		if (rtn_code != EditDriverDialog.OK) {
+			// do nothing
+			return;
+		}
+
+		// stash the new instance
+		DriverManager.getInstance().addDriverInstance(ddtt.getPropertySet());
+
+		// refresh
+		this.mTableViewer.getControl().setRedraw(false);
+		this.mTableViewer.setInput(DriversProvider.getInstance());
+		this.mTableViewer.refresh();
+		this.mDirty = true;
+		
+		DriverInstance instance =
+			DriverManager.getInstance().getDriverInstanceByName(ddtt.getPropertySet().getName());
+		this.mTableViewer.setSelection(new StructuredSelection(instance.getPropertySet()), true);
+		this.mTableViewer.getControl().setRedraw(true);
+
+	}
+
+	private void editDriver(ISelection selection) {
+		StructuredSelection sselection = (StructuredSelection) selection;
+		if (sselection.getFirstElement() instanceof IPropertySet) {
+			IPropertySet instance = (IPropertySet) sselection.getFirstElement();
+			IPropertySet copy = duplicatePropertySet(instance);
+			DriverDialog dlg = new DriverDialog(this.getShell());
+			dlg.setEditMode(true); // EDIT Driver Dialog
+			dlg.setPropertySet(copy);
+			if (dlg.open() == Window.OK) {
+				
+				copy = dlg.getPropertySet();
+				copyPropertySet(copy, instance);
+				DriverManager.getInstance().removeDriverInstance(instance.getID());
+				
+				/*
+				 * This call to garbage collect is to try and reclaim
+				 * the classloader held by the last instance of the 
+				 * DriverInstance that is being dropped and re-added.
+				 * Note that if the class is in use (i.e. any profile
+				 * is connected that uses the referenced driver), it 
+				 * won't be unloaded and subsequent connections will 
+				 * fail.
+				 */
+				System.gc();
+				
+				DriverManager.getInstance().addDriverInstance(copy);
+				this.mDirty = true;
+				this.mTableViewer.refresh();
+				validate(instance);
+			}
+		}
+	}
+
+	private void removeDriver(ISelection selection) {
+		StructuredSelection sselection = (StructuredSelection) selection;
+		if (sselection.getFirstElement() instanceof IPropertySet) {
+			IPropertySet instance = (IPropertySet) sselection.getFirstElement();
+			if (MessageDialog.openQuestion(getShell(), DriverMgmtMessages
+					.getString("DriverPreferences.title.removeMessage"), //$NON-NLS-1$
+					DriverMgmtMessages.format(
+							"DriverPreferences.text.removeMessage", //$NON-NLS-1$ 
+							new String[] { instance.getName()})) == true) {
+				int selIndex = this.mTableViewer.getTable().getSelectionIndex();
+				DriverManager.getInstance().removeDriverInstance(instance.getID());
+
+				this.mTableViewer.refresh();//category);
+				if (selIndex < this.mTableViewer.getTable().getItemCount() &&
+						selIndex > -1) {
+					Object obj = this.mTableViewer.getTable().getItem(selIndex).getData();
+					StructuredSelection ssel = new StructuredSelection(obj);
+					this.mTableViewer.setSelection(ssel, true);
+				}
+				else if ((selIndex - 1) > -1) {
+					selIndex = selIndex - 1;
+					if (this.mTableViewer.getTable().getItem(selIndex) != null) {
+						Object obj = this.mTableViewer.getTable().getItem(selIndex).getData();
+						StructuredSelection ssel = new StructuredSelection(obj);
+						this.mTableViewer.setSelection(ssel, true);
+					}
+				}
+				this.mDirty = true;
+			}
+		}
+	}
+
+	private void copyDriver(ISelection selection) {
+		StructuredSelection sselection = (StructuredSelection) selection;
+		if (sselection.getFirstElement() instanceof IPropertySet) {
+			IPropertySet instance = (IPropertySet) sselection.getFirstElement();
+			if (instance != null) {
+				IPropertySet cloned = (IPropertySet) ((PropertySetImpl) instance)
+						.clone();
+
+				String copyPrefix = DriverMgmtMessages
+						.getString("PropertySetImpl.copy_prefix"); //$NON-NLS-1$
+				String copyIdSuffix = DriverMgmtMessages
+						.getString("PropertySetImpl.copy_id_suffix"); //$NON-NLS-1$
+				String name = copyPrefix + instance.getName();
+				String defnType = null;
+				Properties props = instance.getBaseProperties();
+				Iterator iter = props.entrySet().iterator();
+				while (iter.hasNext()) {
+					Map.Entry entry = (Map.Entry) iter.next();
+					String key = (String)entry.getKey();
+					if(key.equals(IDriverMgmtConstants.PROP_DEFN_TYPE))
+						defnType = (String) entry.getValue();
+				}
+				
+				String propIdPrefix = DriverMgmtMessages
+					.getString("EditDriverDialog.text.id_prefix"); //$NON-NLS-1$
+				String id = propIdPrefix + defnType + "." + copyPrefix + instance.getName(); //$NON-NLS-1$
+				cloned.setID(id);
+				cloned.setName(name);
+				
+				DriverManager.getInstance().addDriverInstance(cloned);
+
+				this.mTableViewer.refresh();
+				this.mDirty = true;
+				this.mTableViewer
+						.setSelection(new StructuredSelection(cloned));
+			}
+		}
+	}
+
+	private void makeActions() {
+		this.mAddAction = new AddAction();
+		this.mAddAction.setText(DriverMgmtMessages
+				.getString("DriverPreferences.button.addDriver")); //$NON-NLS-1$
+		this.mEditAction = new EditAction();
+		this.mEditAction.setText(DriverMgmtMessages
+				.getString("DriverPreferences.button.editDriver")); //$NON-NLS-1$
+		this.mRemoveAction = new RemoveAction();
+		this.mRemoveAction.setText(DriverMgmtMessages
+				.getString("DriverPreferences.button.removeDriver")); //$NON-NLS-1$
+		this.mCopyAction = new CopyAction();
+		this.mCopyAction.setText(DriverMgmtMessages
+				.getString("DriverPreferences.button.copyDriver")); //$NON-NLS-1$
+	}
+
+	private void hookContextMenu() {
+		MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$
+		menuMgr.setRemoveAllWhenShown(true);
+		menuMgr.addMenuListener(new IMenuListener() {
+
+			public void menuAboutToShow(IMenuManager manager) {
+				manager.add(DriverPreferences.this.mAddAction);
+				manager.add(DriverPreferences.this.mEditAction);
+				manager.add(DriverPreferences.this.mRemoveAction);
+				manager.add(DriverPreferences.this.mCopyAction);
+			}
+		});
+		Menu menu = menuMgr.createContextMenu(this.mTableViewer.getControl());
+		this.mTableViewer.getControl().setMenu(menu);
+	}
+
+	/**
+	 * Validate the property set and put an appropriate error message up
+	 * 
+	 * @param instance
+	 */
+	private void validate(IPropertySet instance) {
+		DriverPreferences.this.setMessage(DriverPreferences.this.mMessage);
+		this.setErrorMessage(null);
+		String driverType = instance.getBaseProperties().getProperty(
+				IDriverMgmtConstants.PROP_DEFN_TYPE); //$NON-NLS-1$
+		if (driverType != null) {
+			TemplateDescriptor template = TemplateDescriptor
+					.getDriverTemplateDescriptor(driverType);
+			if (template != null) {
+				DriverValidator validator = new DriverValidator(template,
+						instance);
+				String mErrorMessage = ""; //$NON-NLS-1$
+				if (!validator.isValid()) {
+					mErrorMessage = validator.getMessage();
+					this.setErrorMessage(mErrorMessage);
+				}
+//				this.mErrorLabel.setText(mErrorMessage);
+//				this.mErrorLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
+	 */
+	public void init(IWorkbench workbench) {
+		// empty
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.preference.PreferencePage#performApply()
+	 */
+	protected void performApply() {
+		// if there have been changes, save them
+		if (this.mDirty)
+			saveChanges();
+		super.performApply();
+	}
+
+	/**
+	 * Save the changes back to the instances file.
+	 */
+	private void saveChanges() {
+		// this code isn't needed any more because 
+		XMLFileManager.setFileName(IDriverMgmtConstants.DRIVER_FILE);
+		List psetsList = ((DriverListContentProvider) this.mTableViewer
+				.getContentProvider()).getDriverInstances();
+		Object[] objs = psetsList.toArray();
+		IPropertySet[] propsets = new IPropertySet[objs.length];
+		for (int i = 0; i < objs.length; i++) {
+			propsets[i] = (IPropertySet) objs[i];
+		}
+		try {
+			XMLFileManager.saveNamedPropertySet(propsets);
+		}
+		catch (CoreException e) {
+			ConnectivityUIPlugin.getDefault().log(e);
+		}
+		this.mDirty = false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.preference.IPreferencePage#performOk()
+	 */
+	public boolean performOk() {
+		// if there have been changes, save them
+		if (this.mDirty)
+			saveChanges();
+		return super.performOk();
+	}
+
+	private class AddAction extends Action {
+
+		public void run() {
+			addDriver(DriverPreferences.this.mTableViewer.getSelection());
+		}
+	}
+
+	private class RemoveAction extends Action {
+
+		public void run() {
+			removeDriver(DriverPreferences.this.mTableViewer.getSelection());
+		}
+	}
+
+	private class EditAction extends Action {
+
+		public void run() {
+			editDriver(DriverPreferences.this.mTableViewer.getSelection());
+		}
+	}
+
+	private class CopyAction extends Action {
+
+		public void run() {
+			copyDriver(DriverPreferences.this.mTableViewer.getSelection());
+		}
+	}
+
+	private IPropertySet duplicatePropertySet ( IPropertySet pset ) {
+		IPropertySet newPset = new PropertySetImpl(pset.getName(), pset.getID());
+		if (pset.getBaseProperties().size() > 0) {
+			Properties newProps = new Properties();
+			newPset.setBaseProperties(newProps);
+			newPset.getBaseProperties().putAll(pset.getBaseProperties());
+		}
+		return newPset;
+	}
+
+	private void copyPropertySet ( IPropertySet fromPset, IPropertySet topset ) {
+		topset.setID(fromPset.getID());
+		topset.setName(fromPset.getName());
+		if (topset.getBaseProperties().size() > 0) {
+			topset.getBaseProperties().putAll(fromPset.getBaseProperties());
+		}
+	}
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+
+	public void createControl(Composite parent) {
+		super.createControl(parent);
+		getShell().setData(HelpUtil.CONTEXT_PROVIDER_KEY, this);
+		HelpUtil.setHelp(getControl(), HelpUtil.getContextId(IHelpConstants.CONTEXT_ID_DRIVER_PREFERENCES, ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName()));
+
+	}
+
+	private class TextSorter extends AbstractInvertableTableSorter {
+		 
+		private int mColumn = -1;
+		
+		public TextSorter ( int column ) {
+			super();
+			this.mColumn = column;
+		}
+		
+		public int compare(Viewer viewer, Object e1, Object e2) {
+			if (viewer instanceof TableViewer) {
+				TableViewer tv = (TableViewer) viewer;
+				if (tv.getLabelProvider() instanceof DriverListLabelProvider) {
+					DriverListLabelProvider dtlp = 
+						(DriverListLabelProvider) tv.getLabelProvider();
+					String text1 = dtlp.getColumnText(e1, this.mColumn);
+					String text2 = dtlp.getColumnText(e2, this.mColumn);
+					if (text1 == null) text1 = ""; //$NON-NLS-1$
+					if (text2 == null) text2 = ""; //$NON-NLS-1$
+					return Collator.getInstance().compare(text1, text2);
+				}
+			}
+			return Collator.getInstance().compare((String) e1, (String) e2);
+		}
+	}
+
+	public static TableSortSelectionListener createTableColumn(
+			TableViewer viewer, String text, String tooltip,
+			AbstractInvertableTableSorter sorter, int initialDirection,
+			boolean keepDirection) {
+		TableColumn column = new TableColumn(viewer.getTable(), SWT.LEFT);
+		column.setText(text);
+		column.setToolTipText(tooltip);
+		return new TableSortSelectionListener(viewer, column, sorter,
+				initialDirection, keepDirection);
+	}
+
+	private void handleTypeSelection() {
+		if (this.mTableViewer != null && !this.mTableViewer.getTable().isDisposed())
+			this.mTableViewer.getTable().setRedraw(false);
+		if (this.mTypeCombo == null)
+			return;
+		if (mTypeFilter != null && mTableViewer != null) {
+			mTableViewer.removeFilter(mTypeFilter);
+		}
+		mVendorCombo.removeAll();
+		if (mTypeCombo.getSelectionIndex() > -1) {
+			String selectedText = mTypeCombo.getText().trim();
+			if (selectedText.length() > 0) {
+				Object data = mTypeCombo.getData(selectedText);
+				CategoryDescriptor[] kids = null;
+				if (data instanceof CategoryDescriptor) {
+					CategoryDescriptor cd = (CategoryDescriptor) data;
+					mTypeFilter = new DriverTableFilter();
+					mTypeFilter.setCategoryId(cd.getId());
+					mTableViewer.addFilter(mTypeFilter);
+					mTableViewer.refresh();
+					kids = CategoryUtils.getOrderedChildCategories(cd.getId());
+				}
+				else if (data instanceof CategoryDescriptor[]) {
+					kids = (CategoryDescriptor[]) data;
+					Arrays.sort(kids, new CategoryDescriptorNameComparator());
+				}
+				if (kids != null && !selectedText.equals(ALL_STRING)) {
+					mVendorCombo.add(ALL_STRING);
+					for (int j = 0; j < kids.length; j++) {
+						mVendorCombo.add(kids[j].getName());
+						mVendorCombo.setData(kids[j].getName(), kids[j]);
+					}
+					if (mVendorCombo.getItemCount() == 0) {
+						mVendorCombo.setEnabled(false);
+					}
+				}
+				else {
+					mVendorCombo.add(ALL_STRING);
+					for (int j = 0; j < kids.length; j++) {
+						CategoryDescriptor[] details =
+							CategoryUtils.getOrderedChildCategories(kids[j].getId());
+						if (details != null && details.length > 0) {
+							for (int i = 0; i < details.length; i++) {
+								mVendorCombo.add(details[i].getName());
+								mVendorCombo.setData(details[i].getName(), details[i]);
+							}
+						}
+					}
+					if (mVendorCombo.getItemCount() == 0) {
+						mVendorCombo.setEnabled(false);
+					}
+				}
+				mVendorCombo.select(0);
+			}
+		}
+		else {
+			mVendorCombo.setEnabled(false);
+		}
+		if (this.mTableViewer != null && !this.mTableViewer.getTable().isDisposed())
+			this.mTableViewer.getTable().setRedraw(true);
+	}
+	
+	private void handleVendorSelection() {
+		if (this.mTableViewer != null && !this.mTableViewer.getTable().isDisposed())
+			this.mTableViewer.getTable().setRedraw(false);
+		if (this.mVendorCombo == null)
+			return;
+		if (mTypeFilter != null && mTableViewer != null) {
+			mTableViewer.removeFilter(mTypeFilter);
+		}
+		if (mTableViewer != null && mVendorCombo != null && mVendorCombo.getText().trim().length() > 0) {
+			String selText = mVendorCombo.getText().trim();
+			if (!selText.equalsIgnoreCase(ALL_STRING)) {
+				CategoryDescriptor cd = (CategoryDescriptor) mVendorCombo.getData(selText);
+				if (cd != null) {
+					mTypeFilter = new DriverTableFilter(false);
+					mTypeFilter.setCategoryId(cd.getId());
+					mTableViewer.addFilter(mTypeFilter);
+					mTableViewer.refresh();
+				}
+			}
+			else {
+				if (mTypeCombo != null) {
+					String selectedText = mTypeCombo.getText().trim();
+					if (selectedText.length() > 0) {
+						Object data = mTypeCombo.getData(selectedText);
+						if (data instanceof CategoryDescriptor) {
+							CategoryDescriptor cd = (CategoryDescriptor) data;
+							mTypeFilter = new DriverTableFilter();
+							mTypeFilter.setCategoryId(cd.getId());
+							mTableViewer.addFilter(mTypeFilter);
+							mTableViewer.refresh();
+						}
+					}
+				}
+			}
+		}
+		if (this.mTableViewer != null && !this.mTableViewer.getTable().isDisposed())
+			this.mTableViewer.getTable().setRedraw(true);
+	}
+
+}
+
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/preferences/Messages.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/preferences/Messages.java
new file mode 100644
index 0000000..dea899b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/preferences/Messages.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase on 2008-3-14
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.preferences;
+
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * @author renj
+ */
+public final class Messages extends NLS 
+{
+
+    private static final String BUNDLE_NAME = Messages.class.getPackage().getName()+".messages";	//$NON-NLS-1$
+
+    private Messages() 
+    {
+        // Do not instantiate
+    }
+
+    public static String Connectivity_description;
+    
+    static 
+    {
+        NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/preferences/messages.properties b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/preferences/messages.properties
new file mode 100644
index 0000000..bc13f85
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/preferences/messages.properties
@@ -0,0 +1 @@
+Connectivity_description=Expand the tree to edit preferences for connectivity.
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileBaseCreateChange.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileBaseCreateChange.java
new file mode 100644
index 0000000..c1b5025
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileBaseCreateChange.java
@@ -0,0 +1,190 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.refactoring;
+
+import java.text.MessageFormat;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.datatools.connectivity.ConnectionProfileException;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.dialogs.ExceptionHandler;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.CompositeChange;
+import org.eclipse.ltk.core.refactoring.NullChange;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.participants.DeleteArguments;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * Creates a new profile but does not add an undo action (delete)
+ * @author brianf
+ *
+ */
+public class ConnectionProfileBaseCreateChange extends Change {
+	
+	private String mNewProfileName;
+	private String mNewProfileDescription;
+	private String mNewProfileProviderID;
+	private Properties mNewProfileProperties;
+	private String mNewProfileParentProfile;
+	private boolean mNewProfileAutoConnect;
+	private IConnectionProfile mProfile;
+	private Shell mShell;
+
+	/**
+	 * @param name
+	 * @param description
+	 * @param providerID
+	 * @param baseProperties
+	 * @param parentProfile
+	 * @param autoConnect
+	 * @param shell
+	 */
+	public ConnectionProfileBaseCreateChange(String name, String description,
+			String providerID, Properties baseProperties, String parentProfile,
+			boolean autoConnect, Shell shell)
+	{
+		super();
+		mNewProfileName = name;
+		mNewProfileDescription = description;
+		mNewProfileProviderID = providerID;
+		mNewProfileProperties = baseProperties;
+		mNewProfileParentProfile = parentProfile;
+		mNewProfileAutoConnect = autoConnect;
+		mShell = shell;
+	}
+	
+	public ConnectionProfileBaseCreateChange ( IConnectionProfile profile, Shell shell) {
+		super();
+		mProfile = profile;
+		mShell = shell;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#getName()
+	 */
+	public String getName()
+	{
+		if (mNewProfileName != null)
+			return MessageFormat.format(ConnectivityUIPlugin.getDefault().getResourceString("CPCreateChange.name"), //$NON-NLS-1$
+					new Object[] { mNewProfileName });
+		if (mProfile != null)
+			return MessageFormat.format(ConnectivityUIPlugin.getDefault().getResourceString("CPCreateChange.name"), //$NON-NLS-1$
+					new Object[] { mProfile.getName() });
+		return MessageFormat.format(ConnectivityUIPlugin.getDefault().getResourceString("CPCreateChange.name"), //$NON-NLS-1$
+				new Object[] { "" }); //$NON-NLS-1$
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#initializeValidationData(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public void initializeValidationData(IProgressMonitor pm)
+	{
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#isValid(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException, OperationCanceledException
+	{
+		RefactoringStatus result = new RefactoringStatus();
+		
+		if (mProfile != null)
+			return result;
+
+		// Make sure we have appropriate information
+		if (mNewProfileName == null || mNewProfileName.trim().length() == 0)
+		{
+			result.addFatalError(ConnectivityUIPlugin.getDefault().getResourceString("CPCreateChange.error.NewProfileDoesNotHaveName")); //$NON-NLS-1$
+		}
+		else if ( ProfileManager.getInstance().getProfileByName(mNewProfileName) != null)
+		{
+			result.addFatalError(ConnectivityUIPlugin.getDefault().getResourceString("CPCreateChange.error.NewProfileAlreadyExists")); //$NON-NLS-1$
+		}
+		
+		if (mNewProfileProviderID == null || mNewProfileProviderID.trim().length() == 0)
+		{
+			result.addFatalError(ConnectivityUIPlugin.getDefault().getResourceString("CPCreateChange.error.NewProfileDoesNotHaveProviderID")); //$NON-NLS-1$
+		}
+
+		if (mNewProfileProperties == null)
+		{
+			result.addFatalError(ConnectivityUIPlugin.getDefault().getResourceString("CPCreateChange.error.NewProfileDoesNotHaveNonNullPropertiesObject")); //$NON-NLS-1$
+		}
+
+		return result;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#perform(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public Change perform(IProgressMonitor pm) throws CoreException
+	{
+		CompositeChange undo = new CompositeChange(getName());
+		undo.markAsSynthetic();
+		undo.add(createProfile(pm));
+		return new NullChange();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#getModifiedElement()
+	 */
+	public Object getModifiedElement()
+	{
+		return mNewProfileName;
+	}
+
+	/**
+	 * @param pm
+	 * @return
+	 */
+	private Change createProfile(IProgressMonitor pm) {
+		try {
+			if (mProfile != null) {
+				ProfileManager.getInstance().addProfile(mProfile);
+			}
+			else {
+				if (mNewProfileDescription == null)
+					mNewProfileDescription = ""; //$NON-NLS-1$
+				if (mNewProfileParentProfile == null)
+					mNewProfileParentProfile = ""; //$NON-NLS-1$
+				ProfileManager.getInstance().createProfile(
+						mNewProfileName,
+						mNewProfileDescription, 
+						mNewProfileProviderID,
+						mNewProfileProperties, 
+						mNewProfileParentProfile,
+						mNewProfileAutoConnect);
+			}
+		}
+		catch (ConnectionProfileException e) {
+			ExceptionHandler.showException(mShell, ConnectivityUIPlugin
+					.getDefault().getResourceString(
+							"CPCreateChange.create.failure"), e //$NON-NLS-1$
+					.getLocalizedMessage(), e);
+			return new NullChange();
+		}
+		
+		IConnectionProfile newProfile = null;
+		
+		if (mNewProfileName != null)
+			newProfile = ProfileManager.getInstance().getProfileByName(mNewProfileName);
+		else 
+			newProfile = ProfileManager.getInstance().getProfileByName(mProfile.getName());
+		
+		return new ConnectionProfileBaseDeleteChange(newProfile, new DeleteArguments());
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileBaseDeleteChange.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileBaseDeleteChange.java
new file mode 100644
index 0000000..bca1f36
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileBaseDeleteChange.java
@@ -0,0 +1,115 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.refactoring;
+
+import java.text.MessageFormat;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.datatools.connectivity.ConnectionProfileException;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.dialogs.ExceptionHandler;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.NullChange;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.participants.DeleteArguments;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * Deletes a profile but does not add an undo action (create)
+ * @author brianf
+ *
+ */
+public class ConnectionProfileBaseDeleteChange extends Change {
+
+	private IConnectionProfile mProfileToDelete;
+
+	/**
+	 * @param profile
+	 * @param args
+	 */
+	public ConnectionProfileBaseDeleteChange(IConnectionProfile profile, DeleteArguments args)
+	{
+		super();
+		mProfileToDelete = profile;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#getName()
+	 */
+	public String getName()
+	{
+		return MessageFormat.format(ConnectivityUIPlugin.getDefault().getResourceString("CPDeleteChange.name"), //$NON-NLS-1$
+				new Object[] { mProfileToDelete.getName()});
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#initializeValidationData(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public void initializeValidationData(IProgressMonitor pm)
+	{
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#isValid(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException, OperationCanceledException
+	{
+		RefactoringStatus result = new RefactoringStatus();
+
+		// Make sure the element exists
+		if (mProfileToDelete == null || ProfileManager.getInstance().getProfileByName(mProfileToDelete.getName()) == null)
+		{
+			result.addFatalError(ConnectivityUIPlugin.getDefault().getResourceString("CPDeleteChange.error.ProfileDoesNotExist")); //$NON-NLS-1$
+		}
+
+		return result;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#perform(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public Change perform(IProgressMonitor pm) throws CoreException
+	{
+		return deleteProfile(pm);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#getModifiedElement()
+	 */
+	public Object getModifiedElement()
+	{
+		return mProfileToDelete;
+	}
+
+	/**
+	 * @param pm
+	 * @return
+	 */
+	private Change deleteProfile(IProgressMonitor pm) {
+		Shell shell = new Shell();
+		try {
+			ProfileManager.getInstance().deleteProfile(mProfileToDelete);
+		} catch (ConnectionProfileException e) {
+			ExceptionHandler.showException(shell, ConnectivityUIPlugin
+					.getDefault().getResourceString(
+							"CPDeleteChange.delete.failure"), e //$NON-NLS-1$
+					.getLocalizedMessage(), e);
+			return new NullChange();
+//			return new ConnectionProfileBaseCreateChange(mProfileToDelete, shell);
+		}
+		return new ConnectionProfileBaseCreateChange(mProfileToDelete, shell);
+//		return new NullChange();
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileChange.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileChange.java
new file mode 100644
index 0000000..795b79c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileChange.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.refactoring;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.ltk.core.refactoring.Change;
+
+/**
+ * Used by the rename change
+ * @author brianf
+ *
+ */
+public abstract class ConnectionProfileChange extends Change {
+
+	protected IConnectionProfile mSource;
+	protected IConnectionProfile mTarget;
+
+	/**
+	 * @param source
+	 * @param target
+	 */
+	public ConnectionProfileChange ( IConnectionProfile source, IConnectionProfile target ) {
+		super();
+		mSource = source;
+		mTarget = target;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#getAffectedObjects()
+	 */
+	public Object[] getAffectedObjects() {
+		return new Object[] {mSource};
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#getModifiedElement()
+	 */
+	public Object getModifiedElement() {
+		return mTarget;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileCopyChange.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileCopyChange.java
new file mode 100644
index 0000000..f11188c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileCopyChange.java
@@ -0,0 +1,143 @@
+/*******************************************************************************
+ * Copyright (c) 2006-2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.refactoring;
+
+import java.text.MessageFormat;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.ConnectionProfileException;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.InternalProfileManager;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.CompositeChange;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.participants.CopyArguments;
+import org.eclipse.ltk.core.refactoring.participants.DeleteArguments;
+import org.eclipse.ltk.core.refactoring.participants.ReorgExecutionLog;
+
+/**
+ * Duplicates a profile and adds an undo action (delete duplicate).
+ * @author brianf
+ *
+ */
+public class ConnectionProfileCopyChange extends Change {
+
+	private IConnectionProfile mProfileToDuplicate;
+	private IConnectionProfile mNewProfile;
+	private CopyArguments mArguments;
+	
+	/**
+	 * @param profile
+	 * @param args
+	 */
+	public ConnectionProfileCopyChange(IConnectionProfile profile, CopyArguments arguments)
+	{
+		super();
+		mProfileToDuplicate = profile;
+		mArguments = arguments;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#getName()
+	 */
+	public String getName()
+	{
+		return MessageFormat.format(ConnectivityUIPlugin.getDefault().getResourceString("CPCopyChange.name"), //$NON-NLS-1$
+				new Object[] { mProfileToDuplicate.getName()});
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#initializeValidationData(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public void initializeValidationData(IProgressMonitor pm)
+	{
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#isValid(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException, OperationCanceledException
+	{
+		RefactoringStatus result = new RefactoringStatus();
+
+		// Make sure the element exists
+		if (mProfileToDuplicate == null)
+		{
+			result.addFatalError(ConnectivityUIPlugin.getDefault().getResourceString("CPCopyChange.error.ProfileDoesNotExist")); //$NON-NLS-1$
+		}
+
+		return result;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#perform(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public Change perform(IProgressMonitor pm) throws CoreException
+	{
+		CompositeChange undo = new CompositeChange(getName());
+		undo.markAsSynthetic();
+		undo.add(copyProfile(pm));
+		return undo;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#getModifiedElement()
+	 */
+	public Object getModifiedElement()
+	{
+		// RJC: I think this should be the underlying repository
+		// return mArguments.getDestination();
+		return mProfileToDuplicate;
+	}
+
+	public Object[] getAffectedObjects() {
+		return new Object[] { mArguments.getDestination()};
+	}
+
+	public Object getAdapter(Class adapter)
+	{
+		if (adapter.isAssignableFrom(ReorgExecutionLog.class))
+		{
+			return mArguments.getExecutionLog();
+		}
+		return super.getAdapter(adapter);
+	}
+	
+	/**
+	 * @param pm
+	 * @return
+	 */
+	private Change copyProfile(IProgressMonitor pm) throws CoreException {
+		try {
+			Object destination = mArguments.getDestination();
+			IConnectionProfile repo = destination instanceof IConnectionProfile ? (IConnectionProfile) destination
+					: null;
+			mNewProfile = InternalProfileManager.getInstance().copyProfile(
+					mProfileToDuplicate,
+					repo,
+					mArguments.getExecutionLog()
+							.getNewName(mProfileToDuplicate));
+			return new ConnectionProfileBaseDeleteChange(mNewProfile,
+					new DeleteArguments());
+		}
+		catch (ConnectionProfileException e) {
+			Status status = new Status(Status.ERROR, ConnectivityUIPlugin
+					.getDefault().getBundle().getSymbolicName(), -1, e
+					.getMessage(), e);
+			throw new CoreException(status);
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileCopyProcessor.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileCopyProcessor.java
new file mode 100644
index 0000000..b3116e9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileCopyProcessor.java
@@ -0,0 +1,280 @@
+/*******************************************************************************
+ * Copyright (c) 2006-2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.refactoring;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IManagedConnection;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileProvider;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+import org.eclipse.datatools.connectivity.internal.InternalProfileManager;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepository;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.CompositeChange;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
+import org.eclipse.ltk.core.refactoring.participants.CopyArguments;
+import org.eclipse.ltk.core.refactoring.participants.CopyProcessor;
+import org.eclipse.ltk.core.refactoring.participants.ParticipantManager;
+import org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant;
+import org.eclipse.ltk.core.refactoring.participants.ReorgExecutionLog;
+import org.eclipse.ltk.core.refactoring.participants.SharableParticipants;
+import org.eclipse.osgi.util.TextProcessor;
+
+/**
+ * Uses the Duplicate change to perform a duplicate that can be undone/redone.
+ * 
+ * @author brianf
+ * 
+ */
+public class ConnectionProfileCopyProcessor extends CopyProcessor {
+
+	public static final String PROCESSOR_ID = "org.eclipse.datatools.connectivity.ui.copyProcessor"; //$NON-NLS-1$
+	private IConnectionProfile[] mProfiles;
+	private List mProfilesToCopy;
+	private CopyArguments mArguments;
+
+	/**
+	 * @param profile
+	 */
+	public ConnectionProfileCopyProcessor(IConnectionProfile[] profiles,
+											Object destination) {
+		super();
+		mProfiles = profiles;
+		mProfilesToCopy = new ArrayList();
+		mArguments = new CopyArguments(destination, new ReorgExecutionLog());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getElements()
+	 */
+	public Object[] getElements() {
+		return mProfiles;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getIdentifier()
+	 */
+	public String getIdentifier() {
+		return PROCESSOR_ID;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getProcessorName()
+	 */
+	public String getProcessorName() {
+		return ConnectivityUIPlugin.getDefault().getResourceString(
+				"CPDuplicateProcessor.name"); //$NON-NLS-1$
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#isApplicable()
+	 */
+	public boolean isApplicable() throws CoreException {
+		// Do some checking to make sure we can rename these profiles.
+		// We should always be able to rename any profile
+		return true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#checkInitialConditions(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public RefactoringStatus checkInitialConditions(IProgressMonitor pm)
+			throws CoreException, OperationCanceledException {
+		RefactoringStatus result = new RefactoringStatus();
+		// verify status of target repository
+		getTargetRepository();
+		return result;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#checkFinalConditions(org.eclipse.core.runtime.IProgressMonitor,
+	 *      org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext)
+	 */
+	public RefactoringStatus checkFinalConditions(IProgressMonitor pm,
+			CheckConditionsContext context) throws CoreException,
+			OperationCanceledException {
+		RefactoringStatus result = new RefactoringStatus();
+
+		ReorgExecutionLog reorgLog = mArguments.getExecutionLog();
+
+		// Find target repository
+		IConnectionProfileRepository repo = getTargetRepository();
+
+		// RJC: TODO: we should really prompt the user for the new name. i.e.
+		// behavior should be similar to copying a resource in the workspace
+		// Calculate new names for copied objects
+		for (int index = 0, count = mProfiles.length; index < count; ++index) {
+			// Verify that the profile is compatible with the repository
+			if (repo != null
+					&& (repo.isReadOnly()
+							|| !repo.supportsProfileType(mProfiles[index]
+									.getProviderId()) || !((ConnectionProfileProvider) mProfiles[index]
+							.getProvider()).compatibleWithRepository(repo
+							.getRepositoryProfile()))) {
+				continue;
+			}
+
+			// calculate new name
+			String newName = calculateNewName(mProfiles[index], repo);
+
+			// set name in the copy args
+			reorgLog.setNewName(mProfiles[index], TextProcessor.process(newName));
+
+			mProfilesToCopy.add(mProfiles[index]);
+		}
+
+		return result;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#createChange(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public Change createChange(IProgressMonitor pm) throws CoreException,
+			OperationCanceledException {
+		CompositeChange change = new CompositeChange(new String());
+		change.markAsSynthetic();
+
+		for (Iterator it = mProfilesToCopy.iterator(); it.hasNext();) {
+			change.add(new ConnectionProfileCopyChange((IConnectionProfile) it
+					.next(), mArguments));
+		}
+
+		return change;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#loadParticipants(org.eclipse.ltk.core.refactoring.RefactoringStatus,
+	 *      org.eclipse.ltk.core.refactoring.participants.SharableParticipants)
+	 */
+	public RefactoringParticipant[] loadParticipants(RefactoringStatus status,
+			SharableParticipants sharedParticipants) throws CoreException {
+		List participants = new ArrayList();
+		for (int index = 0, count = mProfiles.length; index < count; ++index) {
+			participants.addAll(Arrays.asList(ParticipantManager
+					.loadCopyParticipants(status, this, mProfiles[index],
+							mArguments, new String[0], sharedParticipants)));
+		}
+
+		return (RefactoringParticipant[]) participants
+				.toArray(new RefactoringParticipant[participants.size()]);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.core.runtime.PlatformObject#getAdapter(java.lang.Class)
+	 */
+	public Object getAdapter(Class adapter) {
+		if (adapter.isAssignableFrom(ReorgExecutionLog.class)) {
+			return mArguments.getExecutionLog();
+		}
+		return super.getAdapter(adapter);
+	}
+
+	private String calculateNewName(IConnectionProfile profile,
+			IConnectionProfileRepository repo) {
+		String newName = profile.getName();
+		String profileName = profile.getName();
+		if (repo == null) {
+			InternalProfileManager ipm = InternalProfileManager.getInstance();
+			int i = 0;
+			while (ipm.getProfileByName(newName,false) != null) {
+				newName = ConnectivityPlugin.getDefault().getResourceString(
+						"duplicate.profile.name", //$NON-NLS-1$
+						new Object[] { profileName, new Integer(i)});
+				i++;
+			}
+		}
+		else {
+			int i = 0;
+			while (repo.getProfileByName(newName) != null) {
+				newName = ConnectivityPlugin.getDefault().getResourceString(
+						"duplicate.profile.name", //$NON-NLS-1$
+						new Object[] { profileName, new Integer(i)});
+				i++;
+			}
+		}
+		return newName;
+	}
+
+	private IConnectionProfileRepository getTargetRepository()
+			throws CoreException {
+		Object destination = mArguments.getDestination();
+		if (destination instanceof ProfileManager) {
+			return null;
+		}
+		else if (destination instanceof IConnectionProfile) {
+			IManagedConnection imc = ((IConnectionProfile) destination)
+					.getManagedConnection(IConnectionProfileRepository.class
+							.getName());
+			if (imc == null) {
+				// invalid profile
+				Status status = new Status(Status.ERROR, ConnectivityUIPlugin
+						.getDefault().getBundle().getSymbolicName(), -1,
+						ConnectivityUIPlugin.getDefault().getResourceString(
+								"CPCopyChange.error.InvalidTarget"), null); //$NON-NLS-1$
+				throw new CoreException(status);
+			}
+			else if (!imc.isConnected() || imc.getConnection() == null
+					|| imc.getConnection().getRawConnection() == null) {
+				// repository must be connected
+				Status status = new Status(
+						Status.ERROR,
+						ConnectivityUIPlugin.getDefault().getBundle()
+								.getSymbolicName(),
+						-1,
+						ConnectivityUIPlugin
+								.getDefault()
+								.getResourceString(
+										"CPCopyChange.error.RepositoryNotConnected", //$NON-NLS-1$
+										new Object[] { ((IConnectionProfile) destination)
+												.getName()}), null);
+				throw new CoreException(status);
+			}
+			return (IConnectionProfileRepository) imc.getConnection()
+					.getRawConnection();
+		}
+		// unsupported type
+		Status status = new Status(Status.ERROR, ConnectivityUIPlugin
+				.getDefault().getBundle().getSymbolicName(), -1,
+				ConnectivityUIPlugin.getDefault().getResourceString(
+						"CPCopyChange.error.InvalidTarget"), null); //$NON-NLS-1$
+		throw new CoreException(status);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileCreateChange.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileCreateChange.java
new file mode 100644
index 0000000..dcce058
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileCreateChange.java
@@ -0,0 +1,209 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.refactoring;
+
+import java.text.MessageFormat;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.datatools.connectivity.ConnectionProfileException;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.internal.InternalProfileManager;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.dialogs.ExceptionHandler;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.CompositeChange;
+import org.eclipse.ltk.core.refactoring.NullChange;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.participants.DeleteArguments;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * Creates a new profile and adds an undo action (delete).
+ * @author brianf
+ *
+ */
+public class ConnectionProfileCreateChange extends Change {
+	
+	private String mNewProfileName;
+	private String mNewProfileDescription;
+	private String mNewProfileProviderID;
+	private Properties mNewProfileProperties;
+	private String mNewProfileParentProfile;
+	private boolean mNewProfileAutoConnect;
+	private boolean mNewProfileAutoConnectOnFinish;
+	private IConnectionProfile mProfile;
+	private Shell mShell;
+
+	public ConnectionProfileCreateChange(String name, String description,
+			String providerID, Properties baseProperties, String parentProfile,
+			boolean autoConnect, Shell shell) {
+		this(name, description, providerID, baseProperties, parentProfile, autoConnect, shell, false);
+	}
+	/**
+	 * @param name
+	 * @param description
+	 * @param providerID
+	 * @param baseProperties
+	 * @param parentProfile
+	 * @param autoConnect
+	 * @param shell
+	 */
+	public ConnectionProfileCreateChange(String name, String description,
+			String providerID, Properties baseProperties, String parentProfile,
+			boolean autoConnect, Shell shell, boolean autoConnectOnFinish)
+	{
+		super();
+		mNewProfileName = name;
+		mNewProfileDescription = description;
+		mNewProfileProviderID = providerID;
+		mNewProfileProperties = baseProperties;
+		mNewProfileParentProfile = parentProfile;
+		mNewProfileAutoConnect = autoConnect;
+		mShell = shell;
+		mNewProfileAutoConnectOnFinish = autoConnectOnFinish;
+	}
+	
+	public ConnectionProfileCreateChange ( IConnectionProfile profile, Shell shell) {
+		super();
+		mProfile = profile;
+		mShell = shell;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#getName()
+	 */
+	public String getName()
+	{
+		if (mNewProfileName != null)
+			return MessageFormat.format(ConnectivityUIPlugin.getDefault().getResourceString("CPCreateChange.name"), //$NON-NLS-1$
+					new Object[] { mNewProfileName });
+		if (mProfile != null)
+			return MessageFormat.format(ConnectivityUIPlugin.getDefault().getResourceString("CPCreateChange.name"), //$NON-NLS-1$
+					new Object[] { mProfile.getName() });
+		return MessageFormat.format(ConnectivityUIPlugin.getDefault().getResourceString("CPCreateChange.name"), //$NON-NLS-1$
+				new Object[] { "" }); //$NON-NLS-1$
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#initializeValidationData(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public void initializeValidationData(IProgressMonitor pm)
+	{
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#isValid(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException, OperationCanceledException
+	{
+		RefactoringStatus result = new RefactoringStatus();
+		
+		if (mProfile != null)
+			return result;
+
+		// Make sure we have appropriate information
+		if (mNewProfileName == null || mNewProfileName.trim().length() == 0)
+		{
+			result.addFatalError(ConnectivityUIPlugin.getDefault().getResourceString("CPCreateChange.error.NewProfileDoesNotHaveName")); //$NON-NLS-1$
+		}
+		if ( mNewProfileParentProfile != null ) {
+			IConnectionProfile repo =
+				ProfileManager.getInstance().getProfileByInstanceID(mNewProfileParentProfile);
+			if (repo != null) {
+				String path = repo.getName() + 
+					InternalProfileManager.PROFILE_PATH_SEPARATOR +
+					mNewProfileName;
+				if (ProfileManager.getInstance().getProfileByFullPath(path) != null)
+					result.addFatalError(ConnectivityUIPlugin.getDefault().getResourceString("CPCreateChange.error.NewProfileAlreadyExists")); //$NON-NLS-1$
+			}
+		}
+		
+		if (mNewProfileProviderID == null || mNewProfileProviderID.trim().length() == 0)
+		{
+			result.addFatalError(ConnectivityUIPlugin.getDefault().getResourceString("CPCreateChange.error.NewProfileDoesNotHaveProviderID")); //$NON-NLS-1$
+		}
+
+		if (mNewProfileProperties == null)
+		{
+			result.addFatalError(ConnectivityUIPlugin.getDefault().getResourceString("CPCreateChange.error.NewProfileDoesNotHaveNonNullPropertiesObject")); //$NON-NLS-1$
+		}
+
+		return result;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#perform(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public Change perform(IProgressMonitor pm) throws CoreException
+	{
+		CompositeChange undo = new CompositeChange(getName());
+		undo.markAsSynthetic();
+		undo.add(createProfile(pm));
+		return undo;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#getModifiedElement()
+	 */
+	public Object getModifiedElement()
+	{
+		return mNewProfileName;
+	}
+
+	/**
+	 * @param pm
+	 * @return
+	 */
+	private Change createProfile(IProgressMonitor pm) {
+		try {
+			if (mProfile != null) {
+				ProfileManager.getInstance().addProfile(mProfile);
+			}
+			else {
+				if (mNewProfileDescription == null)
+					mNewProfileDescription = ""; //$NON-NLS-1$
+				if (mNewProfileParentProfile == null)
+					mNewProfileParentProfile = ""; //$NON-NLS-1$
+				ProfileManager.getInstance().createProfile(
+						mNewProfileName,
+						mNewProfileDescription, 
+						mNewProfileProviderID,
+						mNewProfileProperties, 
+						mNewProfileParentProfile,
+						mNewProfileAutoConnect);
+			}
+		}
+		catch (ConnectionProfileException e) {
+			ExceptionHandler.showException(mShell, ConnectivityUIPlugin
+					.getDefault().getResourceString(
+							"CPCreateChange.create.failure"), e //$NON-NLS-1$
+					.getLocalizedMessage(), e);
+			return new NullChange();
+		}
+		
+		IConnectionProfile newProfile = null;
+		
+		if (mNewProfileName != null)
+			newProfile = ProfileManager.getInstance().getProfileByName(mNewProfileName);
+		else 
+			newProfile = ProfileManager.getInstance().getProfileByName(mProfile.getName());
+		
+		if (newProfile != null && mNewProfileAutoConnectOnFinish) {
+			newProfile.connect();
+		}
+		
+		return new ConnectionProfileBaseDeleteChange(newProfile, new DeleteArguments());
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileCreateProcessor.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileCreateProcessor.java
new file mode 100644
index 0000000..23b1f60
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileCreateProcessor.java
@@ -0,0 +1,176 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.refactoring;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.CompositeChange;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
+import org.eclipse.ltk.core.refactoring.participants.CreateArguments;
+import org.eclipse.ltk.core.refactoring.participants.ParticipantManager;
+import org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant;
+import org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor;
+import org.eclipse.ltk.core.refactoring.participants.SharableParticipants;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * Uses the create profile change to create an undoable/redoable create.
+ * Note that due to some weirdness in the refactoring undo/redo code in
+ * Eclipse, creates and deletes, unless part of some other action, can
+ * not be undone/redone. 
+ * 
+ * @author brianf
+ *
+ */
+public class ConnectionProfileCreateProcessor extends RefactoringProcessor {
+
+	public static final String PROCESSOR_ID = "org.eclipse.datatools.connectivity.ui.createProcessor"; //$NON-NLS-1$
+
+	private String mNewProfileName;
+	private String mNewProfileDescription;
+	private String mNewProfileProviderID;
+	private Properties mNewProfileProperties;
+	private String mNewProfileParentProfile;
+	private boolean mNewProfileAutoConnect;
+	private Shell mShell;
+
+	/**
+	 * @param name
+	 * @param description
+	 * @param providerID
+	 * @param baseProperties
+	 * @param parentProfile
+	 * @param autoConnect
+	 * @param shell
+	 */
+	public ConnectionProfileCreateProcessor(String name, String description,
+			String providerID, Properties baseProperties, String parentProfile,
+			boolean autoConnect, Shell shell)
+	{
+		super();
+		mNewProfileName = name;
+		mNewProfileDescription = description;
+		mNewProfileProviderID = providerID;
+		mNewProfileProperties = baseProperties;
+		mNewProfileParentProfile = parentProfile;
+		mNewProfileAutoConnect = autoConnect;
+		mShell = shell;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getElements()
+	 */
+	public Object[] getElements()
+	{
+		return new Object[] {mNewProfileName};
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getIdentifier()
+	 */
+	public String getIdentifier()
+	{
+		return PROCESSOR_ID;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getProcessorName()
+	 */
+	public String getProcessorName()
+	{
+		return MessageFormat.format(ConnectivityUIPlugin.getDefault().getResourceString("CPCreateChange.name"), //$NON-NLS-1$
+				new Object[] { mNewProfileName });
+//		return ConnectivityUIPlugin.getDefault().getResourceString("CPCreateProcessor.name");
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#isApplicable()
+	 */
+	public boolean isApplicable() throws CoreException
+	{
+		// Do some checking to make sure we can rename these profiles.
+		// We should always be able to rename any profile
+		return true;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#checkInitialConditions(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException, OperationCanceledException
+	{
+		RefactoringStatus result = new RefactoringStatus();
+		return result;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#checkFinalConditions(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext)
+	 */
+	public RefactoringStatus checkFinalConditions(IProgressMonitor pm, CheckConditionsContext context) throws CoreException, OperationCanceledException
+	{
+		RefactoringStatus result = new RefactoringStatus();
+
+		return result;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#createChange(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public Change createChange(IProgressMonitor pm) throws CoreException, OperationCanceledException
+	{
+		CompositeChange change = new CompositeChange(new String());
+		change.markAsSynthetic();
+		Change createchange = new ConnectionProfileCreateChange(
+				mNewProfileName,
+				mNewProfileDescription, 
+				mNewProfileProviderID,
+				mNewProfileProperties, 
+				mNewProfileParentProfile,
+				mNewProfileAutoConnect,
+				mShell);
+		change.add(createchange);
+
+		return change;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#loadParticipants(org.eclipse.ltk.core.refactoring.RefactoringStatus, org.eclipse.ltk.core.refactoring.participants.SharableParticipants)
+	 */
+	public RefactoringParticipant[] loadParticipants(RefactoringStatus status, SharableParticipants sharedParticipants) throws CoreException
+	{
+		List participants = new ArrayList();
+		participants.addAll(Arrays.asList(ParticipantManager.loadCreateParticipants(status, this, mNewProfileName,
+					new CreateArguments(), new String[0], sharedParticipants)));
+
+		return (RefactoringParticipant[]) participants.toArray(new RefactoringParticipant[participants.size()]);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.runtime.PlatformObject#getAdapter(java.lang.Class)
+	 */
+	public Object getAdapter(Class adapter)
+	{
+		//if (adapter.isAssignableFrom(ReorgExecutionLog.class))
+		//{
+		//	return mArguments.getDestination();
+		//}
+		return super.getAdapter(adapter);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileDeleteChange.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileDeleteChange.java
new file mode 100644
index 0000000..760d375
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileDeleteChange.java
@@ -0,0 +1,125 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.refactoring;
+
+import java.text.MessageFormat;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.datatools.connectivity.ConnectionProfileException;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.dialogs.ExceptionHandler;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.CompositeChange;
+import org.eclipse.ltk.core.refactoring.NullChange;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.participants.DeleteArguments;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * Deletes a profile and adds an undo action (create).
+ * @author brianf
+ *
+ */
+public class ConnectionProfileDeleteChange extends Change {
+
+	private IConnectionProfile mProfileToDelete;
+
+	/**
+	 * @param profile
+	 * @param args
+	 */
+	public ConnectionProfileDeleteChange(IConnectionProfile profile, DeleteArguments args)
+	{
+		super();
+		mProfileToDelete = profile;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#getName()
+	 */
+	public String getName()
+	{
+		return MessageFormat.format(ConnectivityUIPlugin.getDefault().getResourceString("CPDeleteChange.name"), //$NON-NLS-1$
+				new Object[] { mProfileToDelete.getName()});
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#initializeValidationData(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public void initializeValidationData(IProgressMonitor pm)
+	{
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#isValid(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException, OperationCanceledException
+	{
+		RefactoringStatus result = new RefactoringStatus();
+
+		// Make sure the element exists
+		if (mProfileToDelete == null) // || ProfileManager.getInstance().getProfileByName(mProfileToDelete.getName()) == null)
+		{
+			result.addFatalError(ConnectivityUIPlugin.getDefault().getResourceString("CPDeleteChange.error.ProfileDoesNotExist")); //$NON-NLS-1$
+		}
+		else {
+			String path = ProfileManager.getInstance().getProfilePath(mProfileToDelete);
+			if (ProfileManager.getInstance().getProfileByFullPath(path) == null) {
+				result.addFatalError(ConnectivityUIPlugin.getDefault().getResourceString("CPDeleteChange.error.ProfileDoesNotExist")); //$NON-NLS-1$
+			}
+		}
+
+		return result;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#perform(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public Change perform(IProgressMonitor pm) throws CoreException
+	{
+		CompositeChange undo = new CompositeChange(getName());
+		undo.markAsSynthetic();
+		undo.add(deleteProfile(pm));
+		return undo;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#getModifiedElement()
+	 */
+	public Object getModifiedElement()
+	{
+		return mProfileToDelete;
+	}
+
+	/**
+	 * @param pm
+	 * @return
+	 */
+	private Change deleteProfile(IProgressMonitor pm) {
+		Shell shell = new Shell();
+		try {
+			ProfileManager.getInstance().deleteProfile(mProfileToDelete);
+		} catch (ConnectionProfileException e) {
+			ExceptionHandler.showException(shell, ConnectivityUIPlugin
+					.getDefault().getResourceString(
+							"CPDeleteChange.delete.failure"), e //$NON-NLS-1$
+					.getLocalizedMessage(), e);
+			return new NullChange();
+		}
+		return new ConnectionProfileCreateChange(
+				mProfileToDelete,
+				shell);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileDeleteProcessor.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileDeleteProcessor.java
new file mode 100644
index 0000000..8161f9a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileDeleteProcessor.java
@@ -0,0 +1,148 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.refactoring;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
+import org.eclipse.ltk.core.refactoring.participants.DeleteArguments;
+import org.eclipse.ltk.core.refactoring.participants.DeleteProcessor;
+import org.eclipse.ltk.core.refactoring.participants.ParticipantManager;
+import org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant;
+import org.eclipse.ltk.core.refactoring.participants.SharableParticipants;
+
+/**
+ * Uses the delete profile change to create an undoable/redoable delete.
+ * Note that due to some weirdness in the refactoring undo/redo code in
+ * Eclipse, creates and deletes, unless part of some other action, can
+ * not be undone/redone.
+ *  
+ * @author brianf
+ *
+ */
+public class ConnectionProfileDeleteProcessor extends DeleteProcessor {
+
+	public static final String PROCESSOR_ID = "org.eclipse.datatools.connectivity.ui.deleteProcessor"; //$NON-NLS-1$
+	private IConnectionProfile mProfile;
+
+	/**
+	 * @param profile
+	 */
+	public ConnectionProfileDeleteProcessor(IConnectionProfile profile)
+	{
+		super();
+		mProfile = profile;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getElements()
+	 */
+	public Object[] getElements()
+	{
+		return new Object[] {mProfile};
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getIdentifier()
+	 */
+	public String getIdentifier()
+	{
+		return PROCESSOR_ID;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getProcessorName()
+	 */
+	public String getProcessorName()
+	{
+		return MessageFormat.format(ConnectivityUIPlugin.getDefault().getResourceString("CPDeleteChange.name"), //$NON-NLS-1$
+				new Object[] { mProfile.getName()});
+//		return ConnectivityUIPlugin.getDefault().getResourceString("CPDeleteProcessor.name");
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#isApplicable()
+	 */
+	public boolean isApplicable() throws CoreException
+	{
+		// Do some checking to make sure we can delete these profiles.
+		// We should always be able to delete any profile
+		return true;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#checkInitialConditions(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException, OperationCanceledException
+	{
+		RefactoringStatus result = new RefactoringStatus();
+		return result;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#checkFinalConditions(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext)
+	 */
+	public RefactoringStatus checkFinalConditions(IProgressMonitor pm, CheckConditionsContext context) throws CoreException, OperationCanceledException
+	{
+		RefactoringStatus result = new RefactoringStatus();
+
+		return result;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#createChange(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public Change createChange(IProgressMonitor pm) throws CoreException, OperationCanceledException
+	{
+//		CompositeChange change = new CompositeChange(new String());
+//		change.markAsSynthetic();
+//		change.add(new ConnectionProfileDeleteChange(mProfile, new DeleteArguments()));
+//
+//		return change;
+		return new ConnectionProfileDeleteChange(mProfile, new DeleteArguments());
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#loadParticipants(org.eclipse.ltk.core.refactoring.RefactoringStatus, org.eclipse.ltk.core.refactoring.participants.SharableParticipants)
+	 */
+	public RefactoringParticipant[] loadParticipants(RefactoringStatus status, SharableParticipants sharedParticipants) throws CoreException
+	{
+		List participants = new ArrayList();
+		participants.addAll(Arrays.asList(ParticipantManager.loadDeleteParticipants(status, this, mProfile,
+					new DeleteArguments(), new String[0], sharedParticipants)));
+
+		return (RefactoringParticipant[]) participants.toArray(new RefactoringParticipant[participants.size()]);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.runtime.PlatformObject#getAdapter(java.lang.Class)
+	 */
+	public Object getAdapter(Class adapter)
+	{
+		//if (adapter.isAssignableFrom(ReorgExecutionLog.class))
+		//{
+		//	return mArguments.getDestination();
+		//}
+		return super.getAdapter(adapter);
+	}
+
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileMoveChange.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileMoveChange.java
new file mode 100644
index 0000000..af4c2e2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileMoveChange.java
@@ -0,0 +1,192 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.refactoring;
+
+import java.text.MessageFormat;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.ConnectionProfileException;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IManagedConnection;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.InternalProfileManager;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepository;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.CompositeChange;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.participants.MoveArguments;
+
+public class ConnectionProfileMoveChange extends Change {
+
+	private IConnectionProfile mProfileToMove;
+	private IConnectionProfile mSourceRepository;
+	private MoveArguments mArguments;
+
+	public ConnectionProfileMoveChange(IConnectionProfile profile,
+										MoveArguments arguments) {
+		super();
+		mProfileToMove = profile;
+		mSourceRepository = profile.getParentProfile();
+		mArguments = arguments;
+
+	}
+
+	public Object getModifiedElement() {
+		return new Object[] { mArguments.getDestination()};
+	}
+
+	public Object[] getAffectedObjects() {
+		Object o = null;
+		if (mSourceRepository == null) {
+			o = ProfileManager.getInstance();
+		} else {
+			o = mSourceRepository;
+		}
+		return new Object[] { o };
+	}
+
+	public String getName() {
+		return MessageFormat.format(ConnectivityUIPlugin.getDefault()
+				.getResourceString("CPMoveChange.name"), //$NON-NLS-1$
+				new Object[] { mProfileToMove.getName()});
+	}
+
+	public void initializeValidationData(IProgressMonitor pm) {
+	}
+
+	public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException,
+			OperationCanceledException {
+		RefactoringStatus result = new RefactoringStatus();
+
+		// Make sure the element exists
+		if (mProfileToMove == null) {
+			result
+					.addFatalError(ConnectivityUIPlugin.getDefault()
+							.getResourceString(
+									"CPMoveChange.error.ProfileDoesNotExist")); //$NON-NLS-1$
+		}
+
+		return result;
+	}
+
+	public Change perform(IProgressMonitor pm) throws CoreException {
+		CompositeChange undo = new CompositeChange(getName());
+		undo.markAsSynthetic();
+		undo.add(moveProfile());
+		return undo;
+	}
+
+	private Change moveProfile() throws CoreException {
+		IConnectionProfile oldParent = mProfileToMove.getParentProfile();
+		IConnectionProfileRepository oldRepo = ((ConnectionProfile) mProfileToMove)
+				.getRepository();
+		IConnectionProfileRepository newRepo = getTargetRepository();
+
+		try {
+			// Remove it from the old repository
+			if (oldRepo == null) {
+				InternalProfileManager.getInstance().removeProfile(
+						mProfileToMove);
+			}
+			else {
+				oldRepo.removeProfile(mProfileToMove);
+			}
+
+			try {
+				// Add it to the new repository
+				if (newRepo == null) {
+					InternalProfileManager.getInstance().addProfile(
+							mProfileToMove);
+				}
+				else {
+					newRepo.addProfile(mProfileToMove);
+				}
+			}
+			catch (ConnectionProfileException e) {
+				// Try to put it back where it was
+				if (oldRepo == null) {
+					InternalProfileManager.getInstance().addProfile(
+							mProfileToMove);
+				}
+				else {
+					oldRepo.addProfile(mProfileToMove);
+				}
+				throw e;
+			}
+		}
+		catch (ConnectionProfileException e) {
+			Status status = new Status(Status.ERROR, ConnectivityUIPlugin
+					.getDefault().getBundle().getSymbolicName(), -1, e
+					.getMessage(), e);
+			throw new CoreException(status);
+		}
+		Object o = null;
+		if (oldParent == null) {
+			o = ProfileManager.getInstance();
+		} else {
+			o = oldParent;
+		}
+		return new ConnectionProfileMoveChange(mProfileToMove,
+				new MoveArguments(o, mArguments
+						.getUpdateReferences()));
+	}
+
+	private IConnectionProfileRepository getTargetRepository()
+			throws CoreException {
+		Object destination = mArguments.getDestination();
+		if (destination instanceof ProfileManager) {
+			return null;
+		}
+		else if (destination instanceof IConnectionProfile) {
+			IManagedConnection imc = ((IConnectionProfile) destination)
+					.getManagedConnection(IConnectionProfileRepository.class
+							.getName());
+			if (imc == null) {
+				// invalid profile
+				Status status = new Status(Status.ERROR, ConnectivityUIPlugin
+						.getDefault().getBundle().getSymbolicName(), -1,
+						ConnectivityUIPlugin.getDefault().getResourceString(
+								"CPCopyChange.error.InvalidTarget"), null); //$NON-NLS-1$
+				throw new CoreException(status);
+			}
+			else if (!imc.isConnected() || imc.getConnection() == null
+					|| imc.getConnection().getRawConnection() == null) {
+				// repository must be connected
+				Status status = new Status(
+						Status.ERROR,
+						ConnectivityUIPlugin.getDefault().getBundle()
+								.getSymbolicName(),
+						-1,
+						ConnectivityUIPlugin
+								.getDefault()
+								.getResourceString(
+										"CPCopyChange.error.RepositoryNotConnected", //$NON-NLS-1$
+										new Object[] { ((IConnectionProfile) destination)
+												.getName()}), null);
+				throw new CoreException(status);
+			}
+			return (IConnectionProfileRepository) imc.getConnection()
+					.getRawConnection();
+		}
+		// unsupported type
+		Status status = new Status(Status.ERROR, ConnectivityUIPlugin
+				.getDefault().getBundle().getSymbolicName(), -1,
+				ConnectivityUIPlugin.getDefault().getResourceString(
+						"CPCopyChange.error.InvalidTarget"), null); //$NON-NLS-1$
+		throw new CoreException(status);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileMoveProcessor.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileMoveProcessor.java
new file mode 100644
index 0000000..39edf76
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileMoveProcessor.java
@@ -0,0 +1,192 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.refactoring;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IManagedConnection;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileProvider;
+import org.eclipse.datatools.connectivity.internal.InternalProfileManager;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepository;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.CompositeChange;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
+import org.eclipse.ltk.core.refactoring.participants.MoveArguments;
+import org.eclipse.ltk.core.refactoring.participants.MoveProcessor;
+import org.eclipse.ltk.core.refactoring.participants.ParticipantManager;
+import org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant;
+import org.eclipse.ltk.core.refactoring.participants.SharableParticipants;
+
+/**
+ * 
+ * @author tqiu
+ * 
+ * Uses the Move change to perform move operation
+ * 
+ * 
+ */
+public class ConnectionProfileMoveProcessor extends MoveProcessor {
+
+	public static final String PROCESSOR_ID = "org.eclipse.datatools.connectivity.ui.moveProcessor"; //$NON-NLS-1$
+
+	private IConnectionProfile[] mProfiles;
+	private List mProfilesToMove;
+	private MoveArguments mArguments;
+
+	public ConnectionProfileMoveProcessor(IConnectionProfile[] profiles,
+											Object destination) {
+		super();
+		mProfiles = profiles;
+		mProfilesToMove = new ArrayList();
+		mArguments = new MoveArguments(destination, true);
+	}
+
+	public RefactoringStatus checkFinalConditions(IProgressMonitor pm,
+			CheckConditionsContext context) throws CoreException,
+			OperationCanceledException {
+		RefactoringStatus result = new RefactoringStatus();
+
+		// Find target repository
+		IConnectionProfileRepository repo = getTargetRepository();
+
+		// RJC: TODO: we should really prompt the user for overwrites. i.e.
+		// behavior should be similar to moving a resource in the workspace
+		for (int index = 0, count = mProfiles.length; index < count; ++index) {
+			// Verify that the profile is compatible with the repository
+			if (repo != null) {
+				if (repo.isReadOnly()
+						|| repo.getProfileByName(mProfiles[index].getName()) != null
+						|| !repo.supportsProfileType(mProfiles[index]
+								.getProviderId())
+						|| !((ConnectionProfileProvider) mProfiles[index]
+								.getProvider()).compatibleWithRepository(repo
+								.getRepositoryProfile())) {
+					continue;
+				}
+			}
+			else if (InternalProfileManager.getInstance().getProfileByName(
+					mProfiles[index].getName(), false) != null) {
+				continue;
+			}
+
+			mProfilesToMove.add(mProfiles[index]);
+		}
+
+		return result;
+	}
+
+	public RefactoringStatus checkInitialConditions(IProgressMonitor pm)
+			throws CoreException, OperationCanceledException {
+		RefactoringStatus result = new RefactoringStatus();
+		return result;
+	}
+
+	public Change createChange(IProgressMonitor pm) throws CoreException,
+			OperationCanceledException {
+		CompositeChange change = new CompositeChange(new String());
+		change.markAsSynthetic();
+
+		for (Iterator it = mProfilesToMove.iterator(); it.hasNext();) {
+			change.add(new ConnectionProfileMoveChange((IConnectionProfile) it
+					.next(), mArguments));
+		}
+
+		return change;
+	}
+
+	public Object[] getElements() {
+		return mProfiles;
+	}
+
+	public String getIdentifier() {
+		return PROCESSOR_ID;
+	}
+
+	public String getProcessorName() {
+		return ConnectivityUIPlugin.getDefault().getResourceString(
+				"CPMoveProcessor.name"); //$NON-NLS-1$
+	}
+
+	public boolean isApplicable() throws CoreException {
+		// do some checking if we can move these profiles
+		return true;
+	}
+
+	public RefactoringParticipant[] loadParticipants(RefactoringStatus status,
+			SharableParticipants sharedParticipants) throws CoreException {
+		List participants = new ArrayList();
+		for (int index = 0, count = mProfiles.length; index < count; ++index) {
+			participants.addAll(Arrays.asList(ParticipantManager
+					.loadMoveParticipants(status, this, mProfiles[index],
+							mArguments, new String[0], sharedParticipants)));
+		}
+
+		return (RefactoringParticipant[]) participants
+				.toArray(new RefactoringParticipant[participants.size()]);
+	}
+
+	private IConnectionProfileRepository getTargetRepository()
+			throws CoreException {
+		Object destination = mArguments.getDestination();
+		if (destination instanceof ProfileManager) {
+			return null;
+		}
+		else if (destination instanceof IConnectionProfile) {
+			IManagedConnection imc = ((IConnectionProfile) destination)
+					.getManagedConnection(IConnectionProfileRepository.class
+							.getName());
+			if (imc == null) {
+				// invalid profile
+				Status status = new Status(Status.ERROR, ConnectivityUIPlugin
+						.getDefault().getBundle().getSymbolicName(), -1,
+						ConnectivityUIPlugin.getDefault().getResourceString(
+								"CPCopyChange.error.InvalidTarget"), null); //$NON-NLS-1$
+				throw new CoreException(status);
+			}
+			else if (!imc.isConnected() || imc.getConnection() == null
+					|| imc.getConnection().getRawConnection() == null) {
+				// repository must be connected
+				Status status = new Status(
+						Status.ERROR,
+						ConnectivityUIPlugin.getDefault().getBundle()
+								.getSymbolicName(),
+						-1,
+						ConnectivityUIPlugin
+								.getDefault()
+								.getResourceString(
+										"CPCopyChange.error.RepositoryNotConnected", //$NON-NLS-1$
+										new Object[] { ((IConnectionProfile) destination)
+												.getName()}), null);
+				throw new CoreException(status);
+			}
+			return (IConnectionProfileRepository) imc.getConnection()
+					.getRawConnection();
+		}
+		// unsupported type
+		Status status = new Status(Status.ERROR, ConnectivityUIPlugin
+				.getDefault().getBundle().getSymbolicName(), -1,
+				ConnectivityUIPlugin.getDefault().getResourceString(
+						"CPCopyChange.error.InvalidTarget"), null); //$NON-NLS-1$
+		throw new CoreException(status);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileRenameChange.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileRenameChange.java
new file mode 100644
index 0000000..d7cd57e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileRenameChange.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.refactoring;
+
+import java.text.MessageFormat;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.datatools.connectivity.ConnectionProfileException;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.dialogs.ExceptionHandler;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.CompositeChange;
+import org.eclipse.ltk.core.refactoring.NullChange;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.participants.RenameArguments;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * Renames a profile and adds an undo action (rename back).
+ * @author brianf
+ *
+ */
+public class ConnectionProfileRenameChange extends ConnectionProfileChange {
+	
+	private RenameArguments mRenameArguments;
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.internal.ui.refactoring.ConnectionProfileChange#getName()
+	 */
+	public String getName() {
+		return MessageFormat.format(ConnectivityUIPlugin.getDefault().getResourceString("CPRenameChange.name"), //$NON-NLS-1$
+				new Object[] { mSource.getName()});
+	}
+
+	/**
+	 * @param source
+	 * @param args
+	 */
+	public ConnectionProfileRenameChange(IConnectionProfile source, RenameArguments args) {
+		super(source, null);
+		mRenameArguments = args;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#initializeValidationData(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public void initializeValidationData(IProgressMonitor pm) {
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#isValid(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException,
+			OperationCanceledException {
+		return new RefactoringStatus();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.Change#perform(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public Change perform(IProgressMonitor pm) throws CoreException {
+		CompositeChange undo = new CompositeChange(getName());
+		undo.markAsSynthetic();
+		undo.add(renameProfile(pm));
+		return undo;
+	}
+	
+	/**
+	 * @param pm
+	 * @return
+	 */
+	private Change renameProfile(IProgressMonitor pm) {
+		Shell shell = new Shell();
+		String oldName = mSource.getName();
+		RenameArguments oldArgs = new RenameArguments(oldName, true);
+		try {
+			ProfileManager.getInstance().modifyProfile(mSource, mRenameArguments.getNewName(), mSource.getDescription());
+		} catch (ConnectionProfileException e) {
+			ExceptionHandler.showException(shell, ConnectivityUIPlugin
+					.getDefault().getResourceString(
+							"CPRenameChange.title.error"), e //$NON-NLS-1$
+					.getLocalizedMessage(), e);
+			return new NullChange();
+		}
+		return new ConnectionProfileRenameChange(mSource, oldArgs);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileRenameProcessor.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileRenameProcessor.java
new file mode 100644
index 0000000..a4a96fd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/refactoring/ConnectionProfileRenameProcessor.java
@@ -0,0 +1,147 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.refactoring;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.CompositeChange;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
+import org.eclipse.ltk.core.refactoring.participants.ParticipantManager;
+import org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant;
+import org.eclipse.ltk.core.refactoring.participants.RenameArguments;
+import org.eclipse.ltk.core.refactoring.participants.RenameProcessor;
+import org.eclipse.ltk.core.refactoring.participants.SharableParticipants;
+
+/**
+ * Does an undoable/redoable rename using the rename change.
+ * @author brianf
+ *
+ */
+public class ConnectionProfileRenameProcessor extends RenameProcessor {
+
+	public static final String PROCESSOR_ID = "org.eclipse.datatools.connectivity.ui.renameProcessor"; //$NON-NLS-1$
+	private IConnectionProfile mProfile;
+	private RenameArguments mArguments;
+
+	/**
+	 * @param profile
+	 * @param newName
+	 */
+	public ConnectionProfileRenameProcessor(IConnectionProfile profile, String newName)
+	{
+		super();
+		mProfile = profile;
+		mArguments = new RenameArguments(newName, true);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getElements()
+	 */
+	public Object[] getElements()
+	{
+		return new Object[] {mProfile};
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getIdentifier()
+	 */
+	public String getIdentifier()
+	{
+		return PROCESSOR_ID;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getProcessorName()
+	 */
+	public String getProcessorName()
+	{
+		return MessageFormat.format(ConnectivityUIPlugin.getDefault().getResourceString("CPRenameChange.name"), //$NON-NLS-1$
+				new Object[] { mProfile.getName()});
+//		return ConnectivityUIPlugin.getDefault().getResourceString("CPRenameProcessor.name");
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#isApplicable()
+	 */
+	public boolean isApplicable() throws CoreException
+	{
+		// Do some checking to make sure we can rename these profiles.
+		// We should always be able to rename any profile
+		return true;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#checkInitialConditions(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException, OperationCanceledException
+	{
+		RefactoringStatus result = new RefactoringStatus();
+		return result;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#checkFinalConditions(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext)
+	 */
+	public RefactoringStatus checkFinalConditions(IProgressMonitor pm, CheckConditionsContext context) throws CoreException, OperationCanceledException
+	{
+		RefactoringStatus result = new RefactoringStatus();
+
+		return result;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#createChange(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public Change createChange(IProgressMonitor pm) throws CoreException, OperationCanceledException
+	{
+		CompositeChange change = new CompositeChange(new String());
+		change.markAsSynthetic();
+		change.add(new ConnectionProfileRenameChange(mProfile, mArguments));
+
+		return change;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#loadParticipants(org.eclipse.ltk.core.refactoring.RefactoringStatus, org.eclipse.ltk.core.refactoring.participants.SharableParticipants)
+	 */
+	public RefactoringParticipant[] loadParticipants(RefactoringStatus status, SharableParticipants sharedParticipants) throws CoreException
+	{
+		List participants = new ArrayList();
+		participants.addAll(Arrays.asList(ParticipantManager.loadRenameParticipants(status, this, mProfile,
+					mArguments, new String[0], sharedParticipants)));
+
+		return (RefactoringParticipant[]) participants.toArray(new RefactoringParticipant[participants.size()]);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.runtime.PlatformObject#getAdapter(java.lang.Class)
+	 */
+	public Object getAdapter(Class adapter)
+	{
+		//if (adapter.isAssignableFrom(ReorgExecutionLog.class))
+		//{
+		//	return mArguments.getDestination();
+		//}
+		return super.getAdapter(adapter);
+	}
+
+}
+
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/resources.properties b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/resources.properties
new file mode 100644
index 0000000..c5cbaea
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/resources.properties
@@ -0,0 +1,191 @@
+################################################################################
+## Copyright (c) 2005, 2009 Sybase, Inc.
+## All rights reserved. This program and the accompanying materials
+## are made available under the terms of the Eclipse Public License v1.0
+## which accompanies this distribution, and is available at
+## http://www.eclipse.org/legal/epl-v10.html
+##
+## Contributors:
+##    Sybase, Inc. - initial API and implementation
+##	  IBM Corporation = bug fix #203829
+##	  Actuate Corporation - bug fix #261452
+################################################################################ 
+plugin.internal_error=Internal Error - org.eclipse.datatools.connectivity
+ImportProfilesDialog.btnOverwrite.text=&Overwrite existing connection profiles with same names
+ExportProfilesDialog.button.text2=&Browse...
+ExportProfilesDialog.group.text=Select the connection profiles to be exported\:
+ExportProfilesDialog.button.text1=&Deselect all
+ExportProfilesDialog.button.text=&Select all
+ImportProfilesDialog.button.text=&Browse...
+ExportProfilesDialog.label.text=Specify a &file name:
+ImportProfilesDialog.label.text=Specify a &file name:
+ImportProfilesDialog.text.text=Note\: the connection profile to be imported should be those types you can \n  create using the new connection profile wizard, unsupported types of \n  connection profiles will be discarded.
+ExportProfilesDialog.null.title=Export Connection Profiles
+ImportProfilesDialog.null.title=Import Connection Profiles
+ExportProfilesDialog.btnEncryption.text=&Encrypt file content
+actions.export.noselection = Please select at least one connection profile!
+actions.export.nofile = Please specify file name!
+actions.export.norepository = Please specify a target repository!
+actions.export.notvalidfile = Please specify a valid file name and path!
+dialog.exception.title = Exception
+dialog.exception.message = Exception caught: {0}
+NewCPWizard.title = New Connection Profile
+IntroductionWizardPage.title = Introduction Page
+IntroductionWizardPage.intro = This wizard walks through the steps to create a connection profile.
+CPWizardSelectionPage.title = Connection Profile
+CPWizardSelectionPage.desc = Select a connection profile type.
+CPWizardSelectionPage.group = &Connection Profile Types:
+CPWizardSelectionPage.defaultName =New {0}
+CPWizardSelectionPage.defaultNameExtended =New {0}({1})
+actions.connect.job = Connect server job
+actions.connect.uijob = Refreshing View
+actions.ping.job = Ping server job
+actions.ping.uijob = Show dialog job
+actions.connect.title = Connecting to the server...
+actions.ping.title = Pinging the server...
+actions.ping.success = Ping succeeded!
+actions.ping.failure = Ping failed!
+actions.delete.title = Delete confirmation
+actions.delete.confirm = Are you sure you want to delete connection profile "{0}"?
+properties.dialog = Properties Dialog
+properties.category.general = General
+properties.connectionprofile.name = Profile Name
+properties.connectionprofile.desc = Description
+properties.connectionprofile.autoconnect = Auto-connect
+properties.category.name = Category Name
+properties.category.id = Category ID
+ServersView.action.showproperties = &Properties
+ServersView.action.refresh = &Refresh
+ServersView.action.newCP = &New...
+ServersView.action.exportCPs = &Export...
+ServersView.action.importCPs = &Import...
+NewConnectionProfileWizard.title = New connection profile
+NewConnectionProfileWizard.create.failure = Create connection profile failure
+NewConnectionProfileWizardPage.Status.DuplicateName = Connection profile name already exists!
+NewConnectionProfileWizardPage.Status.NoName = Please specify connection profile name!
+NewConnectionProfileWizardPage.Status.NoRepository = Please specify a repository.
+NewConnectionProfileWizardPage.Status.NoSpacesInName = Connection profile name must not start or end with spaces!
+NewConnectionProfileWizardPage.title = Create Connection Profile
+NewConnectionProfileWizardPage.desc = Enter the profile information.
+NewConnectionProfileWizardPage.cp_name = Na&me:
+NewConnectionProfileWizardPage.cp_desc = &Description (optional):
+NewConnectionProfileWizardPage.choices = Please select:
+NewConnectionProfileWizardPage.summary_cp_name = Name
+NewConnectionProfileWizardPage.summary_cp_desc = Description
+NewConnectionProfileWizardPage.Button.AutoConnect = &Auto-connect at startup
+NewConnectionProfileWizardPage.Button.AutoConnect1 = Auto-connect at startup.
+NewConnectionProfileWizardPage.summary_autoconnect = Auto connect at startup
+NewConnectionProfileWizardPage.summary_autoconnect_on_finish = Auto connect on finish
+NewConnectionProfileWizardPage.localRepository = Create in workspace repository (local)
+NewConnectionProfileWizardPage.chooseRepository = Choose repository:
+ConnectionProfileDetailsPage.Button.TestConnection = &Test Connection
+ConnectionProfileDetailsPage.AskConfirmation = Confirm Dialog
+ConnectionProfileDetailsPage.AskReconnect = This connection profile's connection information has been changed, do you want to reconnect the server?
+SummaryWizardPage.title = Summary
+SummaryWizardPage.description = Information gathered from previous pages.
+SummaryWizardPage.property = Property
+SummaryWizardPage.value = Value
+dialog.title.error = Error
+dialog.title.success = Success
+rename.dialog.title = Rename Dialog
+rename.dialog.message = Please input a new connection profile name:
+rename.dialog.errmsg.existing = Name exists, please input a different one!
+rename.dialog.errmsg.invalid = Invalid name, please type in a valid name!
+rename.dialog.errmsg.NoSpacesInName = Connection profile name must not start or end with spaces!
+error.connect = {1}.  See log file for more details.
+error.contentExtension =Error connecting to the "{0}" extension on profile "{1}" (Error: {2})
+CPVersionPropertyPage.desc=Version information for {0}.\nThis information was obtained from the last connection attempt.  If the last attempt to connect was unsuccessful, no version information will be available.
+CPVersionPropertyPage.button.updateVersion=Connect and Update Version Information
+CPVersionPropertyPage.label.versionUnavailable=Version information is unavailable for this profile.
+CPVersionPropertyPage.label.techVersions=The following technologies are available on this server:
+ConnectionProfileSummaryPage.button.testConnection=&Test Connection
+CommonLabelProviderBase.label.version={0} ({1} v. {2}) 
+CommonLabelProviderBase.label.version.versionless={0} ({1}) 
+CommonLabelProviderBase.label.localRepository=Workspace Repository (Local)
+
+properties.connectionprofile.type = Profile Type
+DSE.Refresh.label = Ref&resh
+DSE.View.Tooltip = Data Source Explorer
+
+CPDeleteChange.name = Delete {0} Connection Profile
+CPDeleteChange.error.ProfileDoesNotExist = The connection profile you are trying to delete does not exist.
+CPDeleteChange.delete.failure = Failed to delete connection profile.
+CPDeleteProcessor.name = DTP Connectivity Delete Processor
+CPDuplicateProcessor.name = DTP Connection Profile Duplicate Processor
+CPCopyChange.name = Duplicate {0} Connection Profile
+CPCopyChange.error.ProfileDoesNotExist = The connection profile you are trying to duplicate does not exist.
+CPCopyChange.title.error = Failed to duplicate connection profile.
+CPCopyChange.error.InvalidTarget = The specified target is not a valid connection profile repository.
+CPCopyChange.error.RepositoryNotConnected = Not connected to the target connection profile repository {0}.
+CPMoveProcessor.name = DTP Connection Profile Move Processor
+CPMoveChange.name = Move {0} Connection Profile
+CPMoveChange.error.ProfileDoesNotExist = The connection profile you are trying to move does not exist.
+CPMoveChange.title.error = Failed to move connection profile.
+CPCreateChange.name = Create {0} Connection Profile
+CPCreateChange.error.NewProfileDoesNotHaveName = A name is required to create the new connection profile.
+CPCreateChange.error.NewProfileAlreadyExists = A connection profile with the new name already exists.
+CPCreateChange.error.NewProfileDoesNotHaveProviderID = A connection profile provider ID is required to create the new connection profile.
+CPCreateChange.error.NewProfileDoesNotHaveNonNullPropertiesObject = A non-null properties object is required to create the new connection profile.
+CPCreateChange.create.failure = Failed to create connection profile.
+CPCreateProcessor.name = DTP Connectivity Create Processor
+CPRenameChange.name = Rename {0} Connection Profile
+CPRenameProcessor.name = DTP Connectivity Rename Processor
+CPRenameChange.title.error = Failed to rename connection profile.
+
+PropertyDescriptor.error.title = Error processing property descriptor for driver definition
+PropertyDescriptor.error.msg = Error encountered while processing properties for the driver definition.
+PasswordTextPropertyDescriptor.property.label = Password
+DriverClassBrowsePropertyDescriptor.property.label = Driver Class
+DriverClassBrowsePropertyDescriptor.jardialog.title = Available Classes from Jar List
+DriverClassBrowsePropertyDescriptor.jardialog.msg = Provide the name of the driver class or select a class from the available jars.
+DriverClassBrowsePropertyDescriptor.noclasses.title = No Available Driver Classes
+DriverClassBrowsePropertyDescriptor.noclasses.msg = There are no driver classes available for the current jar list.
+
+StatusBar.Connected = Connected
+StatusBar.Disconnected = Disconnected
+StatusBar.ConnectedMessage = {0} ({1})
+StatusBar.WorkingOffline = Working offline
+
+DATATOOLS.SERVER.UI.EXPLORER.WORKOFFLINE = &Work Offline
+DATATOOLS.SERVER.UI.EXPLORER.UPDATE_OFFLINE = &Save Offline
+
+DriverPropertyEditorDescriptor.InvalidID = Driver Property Editor descriptor is missing a valid ID
+DriverPropertyEditorDescriptor.InvalidTargetTemplateID = Driver Property Editor descriptor is missing a valid target template ID
+DriverPropertyEditorDescriptor.InvalidTargetPropertyId = Driver Property Editor descriptor is missing a valid target property ID
+DriverPropertyEditorDescriptor.InvalidCustomPropertyEditorClass = Driver Property Editor descriptor is missing a valid custom property editor
+
+ExtensibleProfileDetailsWizardPage.title = Specify a Driver and Connection Details
+ExtensibleProfileDetailsWizardPage.description = Select a driver from the drop-down and provide login details for the connection.
+ExtensibleProfileDetailsWizardPage.driverCombo.label = &Drivers:
+ExtensibleNewConnectionProfileWizard.title = New Connection Profile
+
+DriverUIContributorComposite.group = Properties
+
+CommonDriverUIContributor.optionaltab = &Optional
+CommonDriverUIContributor.optionalProps.label = Additional properties:
+CommonDriverUIContributor.generaltab = G&eneral
+
+OtherDriverUIContributor.databaseName.label = D&atabase:
+OtherDriverUIContributor.url.label = &URL:
+OtherDriverUIContributor.userName.label = U&ser name:
+OtherDriverUIContributor.password.label = Pass&word:
+OtherDriverUIContributor.savePassword.label = Sa&ve password
+OtherDriverUIContributor.summaryData.database = Database
+OtherDriverUIContributor.summaryData.username = User name
+OtherDriverUIContributor.summaryData.savePassword = Save Password
+OtherDriverUIContributor.summaryData.true = true
+OtherDriverUIContributor.summaryData.false = false
+OtherDriverUIContributor.summaryData.url = URL
+
+OtherDriverUIContributor.errormessage.requiresdatabase = Enter a database name.
+OtherDriverUIContributor.errormessage.requiresurl = Enter a URL.
+OtherDriverUIContributor.errormessage.requiresusername = Enter a user name.
+
+ConnectAction.title = Properties for {0}
+
+Boolean.true = true
+Boolean.false = false
+
+NewRepositoryWizard.title = New Repository Wizard Window
+
+NewConnectionProfileWizardPage.Status.ContainsColon= Connection profile name cannot contain colon(:)!
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/BaseWizard.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/BaseWizard.java
new file mode 100644
index 0000000..31a083a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/BaseWizard.java
@@ -0,0 +1,171 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.wizards;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jface.wizard.Wizard;
+
+/**
+ * Base class for all wizards.
+ * 
+ * @author shongxum
+ */
+abstract public class BaseWizard extends Wizard implements ISummaryDataSource,
+		IMediator {
+
+	/**
+	 * Method declared on IWizard. Returns the next page for the wizard to
+	 * display. This implementation ignores skipped pages.
+	 * 
+	 * @return the next wizard page
+	 * @see org.eclipse.jface.wizard.IWizard#getNextPage(IWizardPage)
+	 */
+	public IWizardPage getNextPage(IWizardPage page) {
+		IWizardAction wizActions = null;
+		IWizardPage nextPage = null;
+		ISkippable nextPG = null;
+		if (page instanceof IWizardAction) {
+			wizActions = (IWizardAction) page;
+			if (!wizActions.onWizardNext()) {
+				return page;
+			}
+		}
+		nextPage = super.getNextPage(page);
+		while ((nextPage != null) && (nextPage instanceof ISkippable)) {
+			nextPG = (ISkippable) nextPage;
+			if (!nextPG.getSkippable()) {
+				break;
+			}
+			nextPage = super.getNextPage(nextPage);
+		}
+		if (nextPage != null && nextPage instanceof IWizardAction) {
+			wizActions = (IWizardAction) nextPage;
+			wizActions.onSetActive();
+		}
+		return nextPage;
+	}
+
+	/**
+	 * Method declared on IWizard. Returns the previous page displayed in the
+	 * wizard. This implementation ignores skipped pages.
+	 * 
+	 * @return the previous wizard page
+	 * @see org.eclipse.jface.wizard.IWizard#getPreviousPage(IWizardPage)
+	 */
+	public IWizardPage getPreviousPage(IWizardPage page) {
+		IWizardPage prevPage = null;
+		ISkippable prevPG = null;
+		prevPage = super.getPreviousPage(page);
+		while ((prevPage != null) && (prevPage instanceof ISkippable)) {
+			prevPG = (ISkippable) prevPage;
+			if (!prevPG.getSkippable()) {
+				break;
+			}
+			prevPage = super.getPreviousPage(prevPage);
+		}
+		return prevPage;
+	}
+
+	/**
+	 * Method declared on IWizard. By default this is the first page inserted
+	 * into the wizard. This implementation ignores skipped pages.
+	 * 
+	 * @return the first wizard page
+	 * @see org.eclipse.jface.wizard.IWizard#getStartingPage()
+	 */
+	public IWizardPage getStartingPage() {
+		IWizardAction wizActions = null;
+		IWizardPage[] pages = getPages();
+		IWizardPage page = null;
+		ISkippable pg = null;
+		if (pages.length == 0)
+			return page;
+		for (int i = 0; i < pages.length; i++) {
+			page = pages[i];
+			if (page instanceof ISkippable) {
+				pg = (ISkippable) page;
+				if (!pg.getSkippable()) {
+					break;
+				}
+			}
+			else {
+				break;
+			}
+		}
+		if (page != null && page instanceof IWizardAction) {
+			wizActions = (IWizardAction) page;
+			wizActions.onSetActive();
+		}
+		return page;
+	}
+
+	/**
+	 * Method declared on IWizard. Default implementation allows the wizard to
+	 * finish if current page is a summary page.
+	 * 
+	 * @return <tt>true</tt> if it is valid to finish the wizard in its
+	 *         current state; <tt>false</tt> otherwise
+	 * @see org.eclipse.jface.wizard.IWizard#canFinish()
+	 */
+	public boolean canFinish() {
+		IWizardPage[] pages = getPages();
+		for (int i = 0; i < pages.length; i++) {
+			if (!pages[i].isPageComplete())
+				if ((pages[i] instanceof ISkippable)
+						&& ((ISkippable) pages[i]).getSkippable())
+					continue;
+				else
+					return false;
+		}
+		return true;
+		// return getContainer().getCurrentPage() instanceof ISummary;
+	}
+
+	/**
+	 * Traverses the set of pages owned by the wizard and selects the summary
+	 * data from ones that are summary data sources. This implementation ignores
+	 * skipped pages.
+	 * 
+	 * @return the list of summary data from all (not skipped) wizard pages
+	 * @see SummaryDataSource#getSummaryData()
+	 */
+	public List getSummaryData() {
+		List data = new ArrayList();
+		IWizardPage[] pages = getPages();
+		for (int i = 0; i < pages.length; i++) {
+			if (pages[i] instanceof ISummaryDataSource) {
+				if (pages[i] instanceof ISkippable) {
+					ISkippable page = (ISkippable) pages[i];
+					if (page.getSkippable()) {
+						continue;
+					}
+				}
+				data.addAll(((ISummaryDataSource) pages[i]).getSummaryData());
+			}
+		}
+		return data;
+	}
+
+	/**
+	 * Client need to override this method if mediation is needed. Mediation is
+	 * made by the wizard controller to allow wizard pages independent of each
+	 * other, it can be used to initialize data for wizard page, or can be used
+	 * to make some wizard pages invisible if a certain condition is met.
+	 * 
+	 * @see org.eclipse.datatools.connectivity.common.ui.wizards.IMediator#mediatePage(org.eclipse.jface.wizard.IWizardPage)
+	 */
+	public void mediatePage(IWizardPage wizardPage) {
+		// Do nothing by default
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/BaseWizardPage.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/BaseWizardPage.java
new file mode 100644
index 0000000..ed4403c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/BaseWizardPage.java
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.wizards;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.jface.wizard.WizardPage;
+
+/**
+ * Base class for every wizard page in the plugin. Provides default support for
+ * listening to wizard switching pages and visibility (through skippable)
+ * control.
+ * 
+ * @author shongxum
+ */
+abstract public class BaseWizardPage extends WizardPage implements
+		IWizardAction, ISkippable, ISummaryDataSource {
+
+	private boolean _skippable = false;
+	private boolean _needMediation = false;
+
+	/**
+	 * Default constructor.
+	 */
+	public BaseWizardPage(String name) {
+		super(name);
+	}
+
+	/**
+	 * @param pageName
+	 * @param title
+	 * @param titleImage
+	 */
+	public BaseWizardPage(String pageName, String title,
+							ImageDescriptor titleImage) {
+		super(pageName, title, titleImage);
+	}
+
+	/**
+	 * @see ISkippable#getSkippable()
+	 */
+	public boolean getSkippable() {
+		return _skippable;
+	}
+
+	/**
+	 * @see ISkippable#setSkippable(boolean)
+	 */
+	public void setSkippable(boolean b) {
+		_skippable = b;
+	}
+
+	public void setNeedMediation(boolean needMediation) {
+		_needMediation = needMediation;
+	}
+
+	/**
+	 * @see IWizardAction#onWizardNext()
+	 */
+	public boolean onWizardNext() {
+		if (!_needMediation)
+			return true;
+
+		IWizard wiz = getWizard();
+		if (wiz instanceof IMediator) {
+			((IMediator) wiz).mediatePage(this);
+		}
+		return true;
+	}
+
+	/**
+	 * @see com.sybase.wst.eclipse.internal.ui.wizards.IWizardAction#onSetActive()
+	 */
+	public void onSetActive() {
+		// Empty
+	}
+
+	/**
+	 * @see com.sybase.wst.eclipse.internal.ui.wizards.ISummaryDataSource#getSummaryData()
+	 */
+	public List getSummaryData() {
+		return new ArrayList();
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/CPCategoryWizardNode.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/CPCategoryWizardNode.java
new file mode 100644
index 0000000..79de664
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/CPCategoryWizardNode.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.wizards;
+
+import org.eclipse.datatools.connectivity.ui.wizards.IProfileWizardProvider;
+import org.eclipse.jface.wizard.IWizard;
+
+public class CPCategoryWizardNode extends CPWizardNode {
+
+	public CPCategoryWizardNode(IProfileWizardProvider provider) {
+		super(provider);
+	}
+
+	protected IWizard createWizard() {
+		return new NewCategoryWizard();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/CPPropetyPage.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/CPPropetyPage.java
new file mode 100644
index 0000000..155a55a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/CPPropetyPage.java
@@ -0,0 +1,263 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.wizards;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.jobs.ISchedulingRule;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.datatools.connectivity.ConnectionProfileException;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.ProfileRule;
+import org.eclipse.datatools.connectivity.internal.InternalProfileManager;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.IHelpConstants;
+import org.eclipse.datatools.connectivity.internal.ui.dialogs.ExceptionHandler;
+import org.eclipse.datatools.connectivity.ui.Messages;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.help.IContextProvider;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.dialogs.PropertyPage;
+
+public class CPPropetyPage extends PropertyPage 
+	implements IContextProvider {
+	
+	private static Map sProfileToProfileRuleMap = new HashMap(); // IConnectionProfile,ProfileRule
+
+	private Text txtProfileName;
+
+	private Text txtProfileDesc;
+
+	private Button btnAutoConnect;
+	
+	private ISchedulingRule profileRule;
+
+	private ContextProviderDelegate contextProviderDelegate =
+		new ContextProviderDelegate(ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName());
+
+	/**
+	 * Constructor for FileProfilePropetyPage.
+	 */
+	public CPPropetyPage() {
+		super();
+		noDefaultAndApplyButton();
+	}
+
+	/**
+	 * @see PreferencePage#createContents(Composite)
+	 */
+	protected Control createContents(Composite parent) {
+		Label label;
+		GridData gd;
+		Composite content = new Composite(parent, SWT.NULL);
+		GridLayout layout = new GridLayout(2, false);
+		content.setLayout(layout);
+
+		label = new Label(content, SWT.NULL);
+		label.setLayoutData(new GridData());
+		label.setText(ConnectivityUIPlugin.getDefault().getResourceString(
+				"NewConnectionProfileWizardPage.cp_name")); //$NON-NLS-1$
+
+		txtProfileName = new Text(content, SWT.BORDER);
+		txtProfileName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		txtProfileName.addModifyListener(new ModifyListener() {
+
+			public void modifyText(ModifyEvent e) {
+				validate();
+			}
+		});
+
+		label = new Label(content, SWT.NULL);
+		label.setLayoutData(new GridData());
+		label.setText(ConnectivityUIPlugin.getDefault().getResourceString(
+				"NewConnectionProfileWizardPage.cp_desc")); //$NON-NLS-1$
+
+		txtProfileDesc = new Text(content, SWT.BORDER);
+		txtProfileDesc.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+		btnAutoConnect = new Button(content, SWT.CHECK);
+		btnAutoConnect.setText(Messages.ConnectionProfileDetailsPage_Autoconnect_startup);
+
+		gd = new GridData(GridData.FILL_HORIZONTAL);
+		gd.horizontalSpan = 2;
+//		gd.horizontalIndent = 20;
+		btnAutoConnect.setLayoutData(gd);
+
+		initControls();
+//		PlatformUI.getWorkbench().getHelpSystem().setHelp(parent,
+//				IHelpConstants.CONTEXT_ID_CP_PROPERTY_PAGE);
+		getShell().setData( HelpUtil.CONTEXT_PROVIDER_KEY, this);
+		HelpUtil.setHelp( getControl(), HelpUtil.getContextId(IHelpConstants.CONTEXT_ID_CP_PROPERTY_PAGE, ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName()));
+
+		return content;
+	}
+
+	public boolean performOk() {
+		IConnectionProfile profile = getConnectionProfile();
+		boolean autoConnectChanged = btnAutoConnect.getSelection() != profile.isAutoConnect();
+		if (autoConnectChanged
+				|| !txtProfileName.getText().equals(profile.getName())
+				|| !txtProfileDesc.getText().equals(profile.getDescription())) {
+			if (autoConnectChanged && profileRule == null) {
+				/*
+				 * block connect jobs until the dialog is closed. if the user
+				 * also changed connection related properties, the connect job
+				 * may be executed prior to those changes being committed.
+				 */
+				profileRule = getProfileRule(profile);
+				Job.getJobManager().beginRule(profileRule,
+						null);
+			}
+			try {
+				ProfileManager.getInstance().modifyProfile(profile,
+						txtProfileName.getText(), txtProfileDesc.getText(),
+						new Boolean(btnAutoConnect.getSelection()));
+			}
+			catch (ConnectionProfileException e) {
+				ExceptionHandler.showException(getShell(), ConnectivityUIPlugin
+						.getDefault().getResourceString("dialog.exception.title"), //$NON-NLS-1$
+						ConnectivityUIPlugin.getDefault().getResourceString(
+								"dialog.exception.message", //$NON-NLS-1$
+								new Object[] { e.getMessage()}), e); //$NON-NLS-1$
+			}
+		}
+		return true;
+	}
+
+	private void initControls() {
+		IConnectionProfile profile = getConnectionProfile();
+
+		txtProfileName.setText(profile.getName());
+		txtProfileDesc.setText(profile.getDescription());
+
+		boolean showAutoConnect = profile.getProvider()
+				.needsMaintainConnection();
+		if (!showAutoConnect)
+
+		{
+			btnAutoConnect.setSelection(true);
+			btnAutoConnect.setEnabled(false);
+			btnAutoConnect.setVisible(false);
+		}
+		else {
+			btnAutoConnect.setSelection(profile.isAutoConnect());
+		}
+
+		setErrorMessage(null);
+	}
+
+	private IConnectionProfile getConnectionProfile() {
+		IAdaptable element = getElement();
+		IConnectionProfile profile = (IConnectionProfile) element
+				.getAdapter(IConnectionProfile.class);
+		return profile;
+	}
+
+	private void validate() {
+		String errorMessage = null;
+
+		if (txtProfileName.getText().trim().length() == 0) {
+			errorMessage = ConnectivityUIPlugin.getDefault().getResourceString(
+					"NewConnectionProfileWizardPage.Status.NoName"); //$NON-NLS-1$
+		}
+		else {
+			if (!getConnectionProfile().getName().equals(
+					txtProfileName.getText())) {
+				IConnectionProfile foundProfile = null;
+				String path = ProfileManager.getInstance().getProfilePath(getConnectionProfile());
+				if ( path != null) {
+					String[] parsedPath = ProfileManager.getInstance().tokenize(path, InternalProfileManager.PROFILE_PATH_SEPARATOR);
+					parsedPath[parsedPath.length - 1] = txtProfileName.getText();
+					String updatedPath = ProfileManager.getInstance().unTokenize(parsedPath);
+					foundProfile = ProfileManager.getInstance().getProfileByFullPath(updatedPath);
+				}
+				if (foundProfile != null) {
+					errorMessage = ConnectivityUIPlugin
+							.getDefault()
+							.getResourceString(
+									"NewConnectionProfileWizardPage.Status.DuplicateName"); //$NON-NLS-1$
+				}
+			}
+		}
+
+		setErrorMessage(errorMessage);
+		setValid(errorMessage == null);
+	}
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+
+	public void dispose() {
+		if (profileRule != null) {
+			Job.getJobManager().endRule(profileRule);
+			profileRule = null;
+		}
+		super.dispose();
+	}
+	
+	/**
+	 * This is an internal utility method used to workaround some locking issues
+	 * caused by the way we're using it. The basic problem here is that the
+	 * begin/endRule() calls must be matched, but we can't accommodate that
+	 * given the order of execution within the property dialog, so we have:
+	 * 
+	 * Page1.performOK(), Page2.performOK(), ... PageN.performOK() (which is
+	 * where we call IJobManager.beginRule()).
+	 * 
+	 * followed by:
+	 * 
+	 * Page1.dispose(), Page2.dispose(), ... PageN.dispose() (which is where we
+	 * call IJobManager.endRule()).
+	 * 
+	 * To work around this, we reuse the same rule instance (provided by this
+	 * method) across all pages. This fakes the job manager into thinking the
+	 * calls are nested correctly.
+	 * 
+	 * We use this mechanism to prevent other profile jobs (e.g. connect) from
+	 * running until after all pages have performed their OK logic.
+	 * 
+	 * @param profile
+	 * @return the scheduling rule for the profile
+	 */
+	public static ISchedulingRule getProfileRule(IConnectionProfile profile) {
+		ISchedulingRule rule = (ISchedulingRule) sProfileToProfileRuleMap
+				.get(profile);
+		if (rule == null) {
+			rule = new ProfileRule(profile);
+			sProfileToProfileRuleMap.put(profile, rule);
+		}
+		return rule;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/CPVersionPropertyPage.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/CPVersionPropertyPage.java
new file mode 100644
index 0000000..7c4134a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/CPVersionPropertyPage.java
@@ -0,0 +1,319 @@
+/*******************************************************************************
+ * Copyright (c) 2005-2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ * 			IBM Corporation = bug fix #203829
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.wizards;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.jobs.IJobChangeEvent;
+import org.eclipse.core.runtime.jobs.IJobChangeListener;
+import org.eclipse.datatools.connectivity.ConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IPropertySetChangeEvent;
+import org.eclipse.datatools.connectivity.IPropertySetListener;
+import org.eclipse.datatools.connectivity.IPropertySetChangeEvent.IChangedProperty;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.IHelpConstants;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.help.IContextProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.IWorkbenchPropertyPage;
+import org.eclipse.ui.dialogs.PropertyPage;
+
+/**
+ * @author rcernich
+ * 
+ * Created on Jun 3, 2005
+ */
+public class CPVersionPropertyPage extends PropertyPage implements
+		IWorkbenchPropertyPage, IContextProvider {
+
+	private static final int INDENT_TECH_VERSION = 20;
+
+	private Button mUpdateVersionInfoButton;
+	
+	private ContextProviderDelegate contextProviderDelegate =
+		new ContextProviderDelegate(ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName());
+
+	private IPropertySetListener mPropertySetListener = new IPropertySetListener() {
+
+		public void propertySetChanged(IPropertySetChangeEvent event) {
+			if (ConnectionProfileConstants.VERSION_INFO_PROFILE_EXTENSION_ID
+					.equals(event.getPropertySetType())) {
+				getControl().getDisplay().asyncExec(new Runnable() {
+
+					public void run() {
+						updateVersionInformation();
+					}
+				});
+			}
+			else if (IConnectionProfile.CONNECTION_PROFILE_PROPERTY_SET
+					.equals(event.getPropertySetType())) {
+				final IChangedProperty icp = event
+						.getChangedProperty(IConnectionProfile.CONNECTION_STATE_PROPERTY_ID);
+				if (icp != null) {
+					getControl().getDisplay().asyncExec(new Runnable() {
+
+						public void run() {
+							if (Boolean.valueOf(icp.getNewValue())
+									.booleanValue()) {
+								updateVersionInformation();
+								mUpdateVersionInfoButton.setEnabled(false);
+							}
+							else {
+								mUpdateVersionInfoButton.setEnabled(true);
+							}
+						}
+					});
+				}
+			}
+		}
+	};
+
+	/**
+	 * 
+	 */
+	public CPVersionPropertyPage() {
+		super();
+		noDefaultAndApplyButton();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
+	 */
+	protected Control createContents(Composite parent) {
+        Composite content = new Composite(parent, SWT.NULL);
+		GridLayout layout = new GridLayout();
+		content.setLayout(layout);
+
+		createControls(content);
+
+		getConnectionProfile().addPropertySetListener(mPropertySetListener);
+
+        getShell().setData( HelpUtil.CONTEXT_PROVIDER_KEY, this);
+		HelpUtil.setHelp( getControl(), HelpUtil.getContextId(IHelpConstants.CONTEXT_ID_PROFILE_VERSION_PROPERTIES, ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName()));
+		return content;
+	}
+
+	public void dispose() {
+		getConnectionProfile().removePropertySetListener(mPropertySetListener);
+		super.dispose();
+	}
+
+	private void updateVersionInformation() {
+		Composite content = (Composite) getControl();
+		if (content == null || content.isDisposed()) {
+			return;
+		}
+		deleteControls(content);
+		createControls(content);
+		content.layout(true);
+		content.redraw();
+	}
+
+	private void createControls(Composite content) {
+		IConnectionProfile profile = getConnectionProfile();
+		setDescription(ConnectivityUIPlugin.getDefault().getResourceString(
+				"CPVersionPropertyPage.desc", //$NON-NLS-1$
+				new Object[] { profile.getName()}));
+
+		Properties props = profile
+				.getProperties(ConnectionProfileConstants.VERSION_INFO_PROFILE_EXTENSION_ID);
+		if (props.getProperty(ConnectionProfileConstants.PROP_SERVER_NAME) == null) {
+			Label label = new Label(content, SWT.NULL);
+			label.setText(ConnectivityUIPlugin.getDefault().getResourceString(
+					"CPVersionPropertyPage.label.versionUnavailable")); //$NON-NLS-1$
+			GridData data = new GridData(GridData.FILL_HORIZONTAL);
+			label.setLayoutData(data);
+		}
+		else {
+			Composite serverVersionContainer = new Composite(content, SWT.NULL);
+			GridLayout layout = new GridLayout(2, false);
+			layout.marginHeight = layout.marginWidth = 0;
+			serverVersionContainer.setLayout(layout);
+			GridData data = new GridData(GridData.FILL_HORIZONTAL);
+			serverVersionContainer.setLayoutData(data);
+		
+			String serverName = props
+				.getProperty(ConnectionProfileConstants.PROP_SERVER_NAME);
+			String serverVersion = props
+				.getProperty(ConnectionProfileConstants.PROP_SERVER_VERSION);
+			Label label = new Label(serverVersionContainer, SWT.NULL);
+			if (serverVersion == null){
+				label.setText( serverName);
+			} else {
+				label.setText( serverName + ':');
+			}
+			data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
+			label.setLayoutData(data);
+
+			label = new Label(serverVersionContainer, SWT.NULL);
+			if (serverVersion != null){
+				label.setText(serverVersion);
+			}
+			data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
+			label.setLayoutData(data);
+
+			List techVersions = new ArrayList();
+			for (Iterator it = props.entrySet().iterator(); it.hasNext();) {
+				Map.Entry entry = (Map.Entry) it.next();
+				String key = (String) entry.getKey();
+				if (key != null
+						&& key
+								.startsWith(ConnectionProfileConstants.PROP_TECHNOLOGY_NAME_PREFIX)) {
+					String name = ((String) entry.getValue()) + ':';
+					String verKey = ConnectionProfileConstants.PROP_TECHNOLOGY_VERSION_PREFIX
+							+ key.substring(key.lastIndexOf('.') + 1);
+					String version = props.getProperty(verKey);
+					if (version == null || version.length() == 0) {
+						version = ConnectionProfileConstants.UNKNOWN_VERSION;
+					}
+					techVersions.add(new String[] { name, version});
+				}
+			}
+			if (techVersions.size() > 0) {
+				label = new Label(content, SWT.NULL);
+				label.setText(ConnectivityUIPlugin.getDefault()
+						.getResourceString(
+								"CPVersionPropertyPage.label.techVersions")); //$NON-NLS-1$
+				data = new GridData();
+				data.horizontalSpan = 2;
+				label.setLayoutData(data);
+
+				Composite techVersionContainer = new Composite(content,
+						SWT.NULL);
+				layout = new GridLayout(2, false);
+				techVersionContainer.setLayout(layout);
+				data = new GridData(GridData.FILL_HORIZONTAL);
+				data.horizontalIndent = INDENT_TECH_VERSION;
+				techVersionContainer.setLayoutData(data);
+
+				for (Iterator it = techVersions.iterator(); it.hasNext();) {
+					String pair[] = (String[]) it.next();
+
+					label = new Label(techVersionContainer, SWT.NULL);
+					label.setText(pair[0]);
+					data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
+					label.setLayoutData(data);
+
+					label = new Label(techVersionContainer, SWT.NULL);
+					label.setText(pair[1]);
+					data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
+					label.setLayoutData(data);
+				}
+			}
+		}
+
+		mUpdateVersionInfoButton = new Button(content, SWT.PUSH);
+		mUpdateVersionInfoButton
+				.setText(ConnectivityUIPlugin.getDefault().getResourceString(
+						"CPVersionPropertyPage.button.updateVersion")); //$NON-NLS-1$
+		mUpdateVersionInfoButton.setLayoutData(new GridData(
+				GridData.HORIZONTAL_ALIGN_BEGINNING
+						| GridData.VERTICAL_ALIGN_END));
+		mUpdateVersionInfoButton.addSelectionListener(new SelectionAdapter() {
+
+			public void widgetSelected(SelectionEvent event) {
+				Display.getCurrent().syncExec( new Runnable() {
+
+					public void run() {
+						getConnectionProfile().connect(new IJobChangeListener() {
+
+							public void aboutToRun(IJobChangeEvent event) {
+								// ignore event
+							}
+
+							public void awake(IJobChangeEvent event) {
+								// ignore event
+							}
+
+							public void done(IJobChangeEvent event) {
+								final Composite content = (Composite) getControl();
+								if (content == null || content.isDisposed()) {
+									return;
+								}
+								Display.getDefault().syncExec( new Runnable() {
+
+									public void run() {
+										deleteControls(content);
+										createControls(content);
+										content.layout(true);
+										content.redraw();
+									}
+								});
+							}
+
+							public void running(IJobChangeEvent event) {
+								// ignore event
+							}
+
+							public void scheduled(IJobChangeEvent event) {
+								// ignore event
+							}
+
+							public void sleeping(IJobChangeEvent event) {
+								// ignore event
+							}
+						});
+					}
+				});
+			}
+		});
+
+		mUpdateVersionInfoButton.setEnabled(getConnectionProfile()
+				.getConnectionState() == IConnectionProfile.DISCONNECTED_STATE);
+	}
+
+	private void deleteControls(Composite content) {
+		for (Iterator it = Arrays.asList(content.getChildren()).iterator(); it
+				.hasNext();) {
+			((Control) it.next()).dispose();
+		}
+	}
+
+	private IConnectionProfile getConnectionProfile() {
+		IAdaptable element = getElement();
+		IConnectionProfile profile = (IConnectionProfile) element
+				.getAdapter(IConnectionProfile.class);
+		return profile;
+	}
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/CPWizardNode.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/CPWizardNode.java
new file mode 100644
index 0000000..3f7ac2a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/CPWizardNode.java
@@ -0,0 +1,85 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.wizards;
+
+import org.eclipse.datatools.connectivity.ui.wizards.IProfileWizardProvider;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.jface.wizard.IWizardNode;
+import org.eclipse.swt.graphics.Point;
+
+/**
+ * @author shongxum
+ */
+public class CPWizardNode implements IWizardNode {
+
+	private IProfileWizardProvider provider;
+	private IWizard wizard;
+
+	/**
+	 * @param provider
+	 */
+	public CPWizardNode(IProfileWizardProvider provider) {
+		this.provider = provider;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.wizard.IWizardNode#dispose()
+	 */
+	public void dispose() {
+		if (wizard != null)
+			wizard.dispose();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.wizard.IWizardNode#getExtent()
+	 */
+	public Point getExtent() {
+		return new Point(-1, -1);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.wizard.IWizardNode#getWizard()
+	 */
+	public IWizard getWizard() {
+		if (wizard == null)
+			wizard = createWizard();
+		return wizard;
+	}
+	
+	protected IWizard createWizard() {
+		return provider.getWizard();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.wizard.IWizardNode#isContentCreated()
+	 */
+	public boolean isContentCreated() {
+		if (wizard == null)
+			return false;
+		else
+			return true;
+	}
+
+	/**
+	 * @return Returns the provider.
+	 */
+	public IProfileWizardProvider getProvider() {
+		return provider;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/CPWizardSelectionPage.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/CPWizardSelectionPage.java
new file mode 100644
index 0000000..2954169
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/CPWizardSelectionPage.java
@@ -0,0 +1,665 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2009 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ *  Actuate Corporation - refactored to improve extensibility
+ *  brianf - fixing bug 273663
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.wizards;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectionProfileManagerUI;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.IHelpConstants;
+import org.eclipse.datatools.connectivity.ui.Messages;
+import org.eclipse.datatools.connectivity.ui.wizards.ICPWizard;
+import org.eclipse.datatools.connectivity.ui.wizards.IProfileWizardProvider;
+import org.eclipse.datatools.connectivity.ui.wizards.IWizardCategoryProvider;
+import org.eclipse.datatools.connectivity.ui.wizards.NewConnectionProfileWizard;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.help.IContextProvider;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableLayout;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.jface.wizard.IWizardNode;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.osgi.util.TextProcessor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * @author shongxum
+ * 
+ */
+public class CPWizardSelectionPage 
+	extends WizardSelectionPage
+	implements IContextProvider {
+
+    private static final String EMPTY_STRING = "";      //$NON-NLS-1$
+
+    private Text filterText = null;
+	
+	private WizardFilter mWizFilter = null;
+	
+	private Text mCPName;
+	private Text mCPDesc;
+    private Label mCPNameLabel;
+    private Label mCPDescLabel;
+	
+	private String mCPNameStr;
+	private String mCPDescStr;
+	
+	private boolean mPageIsVisible = false;
+
+	private String category = ""; //$NON-NLS-1$
+	private TableViewer tableViewer;
+
+	private ContextProviderDelegate contextProviderDelegate =
+		new ContextProviderDelegate(ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName());
+
+    private ViewerFilter[] viewerFilters = new ViewerFilter[] { 
+        new ViewerFilter() {
+
+		public boolean select(Viewer viewer, Object parentElement,
+				Object element) {
+			return true;
+		}
+	}};
+
+	class Sorter extends ViewerSorter {
+
+		public int compare(Viewer viewer, Object e1, Object e2) {
+			CPWizardNode item1 = (CPWizardNode) e1;
+			CPWizardNode item2 = (CPWizardNode) e2;
+			return item1.getProvider().getName().compareTo(
+					item2.getProvider().getName());
+		}
+	}
+
+	class TableLabelProvider extends LabelProvider implements
+			ITableLabelProvider {
+
+		private Map<CPWizardNode, Image> cachedImages = new HashMap<CPWizardNode, Image>();
+
+		public String getColumnText(Object element, int columnIndex) {
+			return ((CPWizardNode) element).getProvider().getName();
+		}
+
+		public Image getColumnImage(Object element, int columnIndex) {
+			Image image = this.cachedImages.get(element);
+			if (image == null) {
+				ImageDescriptor descriptor = ((CPWizardNode) element).getProvider().getIcon();
+				image = descriptor.createImage();
+				this.cachedImages.put((CPWizardNode) element, image);
+			}
+			return image;
+		}
+
+		@Override
+		public void dispose() {
+			for (Image image: this.cachedImages.values()) {
+				image.dispose();
+			}
+			super.dispose();
+		}
+	}
+
+	class TableContentProvider implements IStructuredContentProvider {
+
+		private String wizardCategory;
+
+		public void dispose() {
+			// do nothing
+		}
+
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+			wizardCategory = (String) newInput;
+		}
+
+		public Object[] getElements(Object inputElement) {
+			Collection wizardNodes = getCategoryItems(wizardCategory);
+			return (CPWizardNode[]) wizardNodes
+					.toArray(new CPWizardNode[wizardNodes.size()]);
+		}
+	}
+
+    /**
+     * Get wizard for specified category
+     * @param wizardCategory
+     * @return
+     * @deprecated  As of DTP 1.6, replaced by {@link #getCategoryItems(String)}
+     */
+	public List getCatagoryItems(String wizardCategory) {
+	    return getCategoryItems( wizardCategory );
+	}
+	
+	/**
+	 * Get wizard for the specified category
+	 * @param wizardCategory
+	 * @return
+	 */
+	public List getCategoryItems(String wizardCategory) {
+		ConnectionProfileManagerUI manager = ConnectionProfileManagerUI
+				.getInstance();
+		Collection wizards = manager.getNewWizards().values();
+		Collection wizardCats = manager.getWizardCategories().values();
+		List wizardNodes = new ArrayList();
+		IProfileWizardProvider wizardProvider;
+		if (wizards != null) {
+			for (Iterator itr = wizards.iterator(); itr.hasNext();) {
+				wizardProvider = (IProfileWizardProvider) itr.next();
+				if (wizardProvider.getCategory().equals(wizardCategory)) {
+					wizardNodes.add(new CPWizardNode(wizardProvider));
+				}
+			}
+		}
+		if (wizardCats != null) {
+			for (Iterator itr = wizardCats.iterator(); itr.hasNext();) {
+				wizardProvider = (IProfileWizardProvider) itr.next();
+				if (wizardProvider.getCategory().equals(wizardCategory)) {
+					wizardNodes.add(new CPCategoryWizardNode(wizardProvider));
+				}
+			}
+		}
+
+		return wizardNodes;
+	}
+	
+	public CPWizardSelectionPage(String id) {
+		super(id);
+		setTitle(ConnectivityUIPlugin.getDefault().getResourceString(
+				"CPWizardSelectionPage.title")); //$NON-NLS-1$
+		setDescription(ConnectivityUIPlugin.getDefault().getResourceString(
+				"CPWizardSelectionPage.desc")); //$NON-NLS-1$
+	}
+
+	protected CPWizardSelectionPage(String id, ViewerFilter filter) {
+		this(id);
+		if (filter != null)
+			viewerFilters = new ViewerFilter[]{ filter };
+	}
+    
+    /**
+     * Constructor with an array of ViewerFilter.
+     * @param id   page id or name
+     * @param filters  an array of ViewerFilter; may be an empty array, in which case
+     *             the default NewCPWizardCategoryFilter will be used
+     * @since DTP 1.6
+     */
+    protected CPWizardSelectionPage(String id, ViewerFilter[] filters ) {
+        this(id);
+        if ( filters != null )
+            viewerFilters = filters;
+    }
+
+	protected CPWizardSelectionPage(String id, ViewerFilter filter, String cat) {
+		this(id, filter);
+		setCategory( cat );
+	}
+
+	/**
+	 * Specifies the category of connection profiles to include in this wizard selection page. 
+     * @param categoryId   category id
+     * @since DTP 1.6
+	 */
+	protected void setCategory( String categoryId )
+	{
+        category = categoryId;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+	 */
+	public void createControl(Composite parent) {
+        // <!-- Created by SWT-Designer
+		Composite container = new Composite(parent, SWT.NULL);
+		container.setLayout(new GridLayout());
+		setControl(container);
+		{
+			final Group group = new Group(container, SWT.NONE);
+			group.setLayout(new GridLayout());
+			group.setText(ConnectivityUIPlugin.getDefault().getResourceString(
+					"CPWizardSelectionPage.group")); //$NON-NLS-1$
+			group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 8 ));//GridData.FILL_BOTH));
+
+			filterText = new Text (group, SWT.BORDER);
+			filterText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+			filterText.setText(Messages.CPWizardSelectionPage_default_filter_text);
+			filterText.selectAll();
+			filterText.addModifyListener(new ModifyListener(){
+				public void modifyText(ModifyEvent e) {
+					if (tableViewer != null && !tableViewer.getControl().isDisposed()) {
+						String filter = filterText.getText();
+						if (mWizFilter != null) {
+							tableViewer.removeFilter(mWizFilter);
+						}
+						if (filter != null && filter.trim().length() > 0) {
+							mWizFilter = new WizardFilter(filter);
+							tableViewer.addFilter(mWizFilter);
+						}
+						setProfileName(new String());
+						setSelectedNode(null);
+						validate();
+					}
+				}
+			});
+			
+			{
+				tableViewer = new TableViewer(group, SWT.BORDER
+						| SWT.FULL_SELECTION);
+				tableViewer.addDoubleClickListener(new IDoubleClickListener() {
+
+					public void doubleClick(DoubleClickEvent e) {
+						IStructuredSelection iss = (IStructuredSelection) tableViewer
+								.getSelection();
+						if (iss != null && !iss.isEmpty()) {
+							CPWizardNode node = (CPWizardNode) iss
+									.getFirstElement();
+							
+							String newName = ConnectivityUIPlugin.getDefault().getResourceString(
+									"CPWizardSelectionPage.defaultName", new String[] {node.getProvider().getName()});//$NON-NLS-1$
+							int i = 0;
+							while (ProfileManager.getInstance().getProfileByName(newName) != null && i < Integer.MAX_VALUE) {
+								newName = ConnectivityUIPlugin.getDefault().getResourceString(
+										"CPWizardSelectionPage.defaultNameExtended",  //$NON-NLS-1$
+										new String[] {node.getProvider().getName(), 
+										Integer.toString(i)});
+								newName = TextProcessor.process(newName);
+								i++;
+							}
+							setProfileName(newName);
+							setSelectedNode(node);
+							validate();
+							if (getErrorMessage() == null)
+								CPWizardSelectionPage.this.getWizard()
+									.getContainer().showPage(
+											CPWizardSelectionPage.this
+													.getNextPage());
+						}
+					}
+				});
+				tableViewer.setSorter(new Sorter());
+				tableViewer.setLabelProvider(new TableLabelProvider());
+				tableViewer.setContentProvider(new TableContentProvider());
+				final Table table = tableViewer.getTable();
+				
+				// for bug 273663, limiting height of table to avoid huge dialog
+				GridData gdTable = new GridData(GridData.FILL_BOTH);
+				gdTable.heightHint = 240;
+				table.setLayoutData(gdTable);
+				
+				TableLayout tl = new TableLayout();
+				{
+					tl.addColumnData(new ColumnWeightData(100));
+					{
+						final TableColumn tableColumn = new TableColumn(table,
+								SWT.NONE);
+						tableColumn.setWidth(400);
+					}
+				}
+
+				tableViewer.setFilters( viewerFilters );
+				tableViewer.setInput(category);
+			}
+		}
+		// -->
+
+		tableViewer
+				.addSelectionChangedListener(new ISelectionChangedListener() {
+
+					public void selectionChanged(SelectionChangedEvent event) {
+						IStructuredSelection iss = (IStructuredSelection) event
+								.getSelection();
+						if (iss != null && !iss.isEmpty()) {
+							CPWizardNode node = (CPWizardNode) iss
+									.getFirstElement();
+							if (getSelectedNode() != null && getSelectedNode().equals(node))
+								return;
+							int i = 0;
+							String newName = ConnectivityUIPlugin.getDefault().getResourceString(
+								"CPWizardSelectionPage.defaultName", new String[] {node.getProvider().getName()}); //$NON-NLS-1$
+							while (ProfileManager.getInstance().getProfileByName(newName) != null && i < Integer.MAX_VALUE) {
+								newName = ConnectivityUIPlugin.getDefault().getResourceString(
+										"CPWizardSelectionPage.defaultNameExtended",  //$NON-NLS-1$
+										new String[] {node.getProvider().getName(), 
+										Integer.toString(i)});
+								newName = TextProcessor.process(newName);
+								i++;
+							}
+							setProfileName(newName);
+							setDescription(node.getProvider().getDescription());
+							setSelectedNode(node);
+						}
+					}
+				});
+		
+		mCPNameLabel = new Label(container, SWT.NONE);
+		mCPNameLabel.setText(ConnectivityUIPlugin
+				.getDefault().getResourceString(
+						"NewConnectionProfileWizardPage.cp_name")); //$NON-NLS-1$
+		mCPName = new Text(container, SWT.BORDER);
+		if( mCPNameStr != null )
+		    mCPName.setText( mCPNameStr );
+		mCPName.addModifyListener(new ModifyListener() {
+
+			public void modifyText(ModifyEvent e) {
+				mCPNameStr = mCPName.getText();
+				handleModify();
+			}
+		});
+
+		mCPName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+		// Connection profile description
+		mCPDescLabel = new Label(container, SWT.NONE);
+		mCPDescLabel.setText(ConnectivityUIPlugin
+				.getDefault().getResourceString(
+						"NewConnectionProfileWizardPage.cp_desc")); //$NON-NLS-1$
+		mCPDesc = new Text(container, SWT.BORDER);
+        if( mCPDescStr != null )
+            mCPDesc.setText( mCPDescStr );
+		mCPDesc.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		mCPDesc.addModifyListener(new ModifyListener() {
+
+			public void modifyText(ModifyEvent e) {
+				mCPDescStr = mCPDesc.getText();
+				handleModify();
+			}
+		});
+		initializeDialogUnits(container);
+		setPageComplete(false);
+
+        getShell().setData( HelpUtil.CONTEXT_PROVIDER_KEY, this);
+		HelpUtil.setHelp( tableViewer.getTable(), HelpUtil.getContextId(IHelpConstants.CONTEXT_ID_CP_WIZARD_PAGE, ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName()));
+
+	}
+
+	public void onSetActive() {
+		if (tableViewer == null)
+			return;
+		Object obj = tableViewer.getElementAt(0);
+		if (obj != null)
+			tableViewer.setSelection(new StructuredSelection(obj));
+	}
+
+	protected void initWizard(IWizard wizard) {
+		IProfileWizardProvider wizardProvider = ((CPWizardNode) getSelectedNode())
+				.getProvider();
+		initWizard(wizard, wizardProvider);
+	}
+	
+	private void initWizard(IWizard wizard, IProfileWizardProvider wizardProvider) {    
+		if (wizard instanceof ICPWizard) {
+			((ICPWizard) wizard)
+					.initProviderID(((ProfileWizardProvider) wizardProvider)
+							.getProfile());
+			if (getWizard() instanceof NewCPWizard)
+				((ICPWizard) wizard).setParentProfile(((NewCPWizard)getWizard()).getParentProfile());
+		}
+		else if (wizard instanceof NewCategoryWizard) {
+			NewCategoryWizard catWizard = (NewCategoryWizard) wizard;
+			catWizard
+					.initWizardCategory((IWizardCategoryProvider) wizardProvider);
+			catWizard.setWindowTitle(getWizard().getWindowTitle());
+		}
+	}
+	
+	/* (non-Javadoc)
+	 * @see com.sybase.stf.common.ui.wizards.WizardSelectionPage#getNextPage()
+	 */
+	public IWizardPage getNextPage() {
+		IWizardNode selectedNode = this.getSelectedNode();
+		if (selectedNode == null)
+			return null;
+		
+		IProfileWizardProvider wizardProvider = ((CPWizardNode) getSelectedNode())
+				.getProvider();
+		boolean isCreated = selectedNode.isContentCreated();
+		IWizard wizard = selectedNode.getWizard();
+
+		if (wizard == null) {
+			setSelectedNode(null);	
+			return null;
+		}
+
+		if (wizard instanceof NewCategoryWizard) {
+			List categoryItems = getCategoryItems(wizardProvider.getId());
+			if (categoryItems.size() == 1) {
+				// Get next wizard and the wizard provider for next page.
+				IWizardNode wizardNode = (IWizardNode) categoryItems.get(0);
+				isCreated = wizardNode.isContentCreated();
+				wizard = wizardNode.getWizard();
+				wizardProvider = ((CPWizardNode) wizardNode).getProvider();
+			}
+		}
+		
+		if (!isCreated) {
+			initWizard(wizard, wizardProvider);
+
+			if (wizard instanceof NewConnectionProfileWizard) {
+				NewConnectionProfileWizard ancpw = (NewConnectionProfileWizard) wizard;
+				ancpw.setProfileName(getProfileName());
+				ancpw.setProfileDescription(getProfileDescription());
+			}
+
+			// Allow the wizard to create its pages
+			wizard.addPages();
+		}
+		else {
+			if (wizard instanceof NewConnectionProfileWizard) {
+				NewConnectionProfileWizard ancpw = (NewConnectionProfileWizard) wizard;
+				ancpw.setProfileName(getProfileName());
+				ancpw.setProfileDescription(getProfileDescription());
+			}
+		}
+		
+		if (this.mPageIsVisible) {
+			if (wizard instanceof NewConnectionProfileWizard) {
+				NewConnectionProfileWizard ancpw = (NewConnectionProfileWizard) wizard;
+				ancpw.setSkipProfileNamePage(true);
+			}
+		}
+
+		return wizard.getStartingPage();
+	}	
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+
+	public List getSummaryData() {
+		List data = new ArrayList();
+
+		data.add(new String[] {
+				ConnectivityUIPlugin.getDefault().getResourceString(
+						"NewConnectionProfileWizardPage.summary_cp_name"), //$NON-NLS-1$
+				getProfileName()});
+
+		data.add(new String[] {
+				ConnectivityUIPlugin.getDefault().getResourceString(
+						"NewConnectionProfileWizardPage.summary_cp_desc"), //$NON-NLS-1$
+				getProfileDescription()});
+
+		return data;
+	}
+
+	private void handleModify() {
+		validate();
+	}
+
+	private void validate() {
+		String errorMessage = null;
+		String cpName = mCPName.getText();//.trim(); //removed for bug 290785
+		IConnectionProfile foundProfile = null;
+		
+		if (cpName == null || cpName.trim().length() == 0) {
+			errorMessage = ConnectivityUIPlugin.getDefault().getResourceString(
+					"NewConnectionProfileWizardPage.Status.NoName"); //$NON-NLS-1$
+		}
+		else if (cpName.trim().length() < cpName.length() ) {
+			errorMessage = ConnectivityUIPlugin.getDefault().getResourceString(
+					"NewConnectionProfileWizardPage.Status.NoSpacesInName"); //$NON-NLS-1$
+		}
+		else if(cpName.indexOf(":") != -1) { //$NON-NLS-1$
+			errorMessage = ConnectivityUIPlugin.getDefault().getResourceString(
+				"NewConnectionProfileWizardPage.Status.ContainsColon");//$NON-NLS-1$
+		}		
+		else {
+			foundProfile = ProfileManager.getInstance().getProfileByName(cpName.trim());
+			if (foundProfile != null)
+				errorMessage = ConnectivityUIPlugin.getDefault().getResourceString(
+					"NewConnectionProfileWizardPage.Status.DuplicateName"); //$NON-NLS-1$
+		}
+
+		setErrorMessage(errorMessage);
+		setPageComplete(errorMessage == null);
+	}
+
+	public String getProfileName() {
+        return ( mCPName == null || mCPName.isDisposed() ) ? 
+                mCPNameStr : mCPName.getText();
+	}
+
+	public void setProfileName(String name) {
+		this.mCPNameStr = name;
+		if ( mCPName != null && ! mCPName.isDisposed() ) {
+            if ( name == null )
+                name = EMPTY_STRING;
+			mCPName.setText(name);
+		}
+	}
+
+    /**
+     * Set the visibility of the profile name controls.
+     * @param  visible the new visibility state
+     * @since DTP 1.7.2
+     */
+    protected void setProfileNameVisible( boolean visible )
+    {
+        mCPNameLabel.setVisible( visible );
+        mCPName.setVisible( visible );
+    }
+
+	public String getProfileDescription() {
+        return ( mCPDesc == null || mCPDesc.isDisposed() ) ? 
+                mCPDescStr : mCPDesc.getText();
+	}
+
+	public void setProfileDescription(String desc) {
+		this.mCPDescStr = desc;
+		if ( mCPDesc != null && ! mCPDesc.isDisposed() ) {
+            if ( desc == null )
+                desc = EMPTY_STRING;
+			mCPDesc.setText(desc);
+		}
+	}
+
+	/**
+	 * Set the visibility of the profile description controls.
+	 * @param  visible the new visibility state
+     * @since DTP 1.7.2
+	 */
+    protected void setProfileDescriptionVisible( boolean visible )
+    {
+        mCPDescLabel.setVisible( visible );
+        mCPDesc.setVisible( visible );
+    }
+
+	class WizardFilter extends ViewerFilter {
+		
+		private String mFilter;
+		
+		public WizardFilter ( String filter ) {
+			mFilter = filter;
+		}
+
+		public boolean select(Viewer viewer, Object parentElement,
+				Object element) {
+			if (element instanceof CPWizardNode) {
+				CPWizardNode node = (CPWizardNode) element;
+				String name = node.getProvider().getName();
+				if (mFilter != null) {
+					if (name.toUpperCase().startsWith(mFilter.toUpperCase())) {
+						return true;
+					}
+					else if (name.toUpperCase().indexOf(mFilter.toUpperCase()) > 0) {
+						return true;
+					}
+					else
+						return false;
+				}
+			}
+			return true;
+		}
+	}
+
+	public boolean isPageComplete() {
+		if (this.getErrorMessage() != null)
+			return false;
+		if (this.getNextPage() == null)
+			return false;
+		else if (!this.getNextPage().isPageComplete())
+			return false;
+		return super.isPageComplete();
+	}
+
+	public void setVisible(boolean visible) {
+		super.setVisible(visible);
+		this.mPageIsVisible = visible;
+	}
+
+	public boolean canFlipToNextPage() {
+		if (this.getErrorMessage() != null)
+			return false;
+		return super.canFlipToNextPage();
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/DriverUIContributorComposite.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/DriverUIContributorComposite.java
new file mode 100644
index 0000000..1a29479
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/DriverUIContributorComposite.java
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Actuate Corporation - bug fix
+ * 
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.wizards;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributor;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributorInformation;
+import org.eclipse.jface.dialogs.DialogPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StackLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+
+public class DriverUIContributorComposite {
+
+	private Group group = null;
+	private StackLayout stackLayout = null;
+	private DialogPage wizardPage;
+	private IDriverUIContributor uiContributor = null;
+	private IDriverUIContributorInformation contributorInformation;
+	private boolean isReadOnly = false;
+
+	public DriverUIContributorComposite(Composite parent,
+			DialogPage wizardPage,
+			IDriverUIContributorInformation contributorInformation, boolean isReadOnly) {
+		createControls(parent);
+		this.wizardPage = wizardPage;
+		this.contributorInformation = contributorInformation;
+		this.isReadOnly = isReadOnly;
+	}
+
+	public void createControls(Composite parent) {
+		Composite baseComposite = new Composite(parent, SWT.NONE);
+		baseComposite.setLayout(new GridLayout());
+		GridData gridData = new GridData(GridData.FILL_BOTH);
+		gridData.heightHint = 350;
+		gridData.widthHint = 400;
+		baseComposite.setLayoutData(gridData);
+
+		group = new Group(baseComposite, SWT.NONE);
+		group.setText(ConnectivityUIPlugin.getDefault().getResourceString(
+				"DriverUIContributorComposite.group")); //$NON-NLS-1$
+		group.setLayoutData(new GridData(GridData.FILL_BOTH));
+		stackLayout = new StackLayout();
+		stackLayout.marginHeight = 3;
+		stackLayout.marginWidth = 3;
+		group.setLayout(stackLayout);
+	}
+
+	public void setDriverTemplateID(String driverTemplateID) {
+		uiContributor = DriverUIContributorRegistry.getInstance()
+				.getDriverUIContributor(driverTemplateID);
+		Composite contributedComposite = uiContributor
+				.getContributedDriverUI(group, isReadOnly);
+		contributedComposite.setParent(group);
+		uiContributor.setDialogPage(wizardPage);
+		uiContributor.setDriverUIContributorInformation(contributorInformation);
+		uiContributor.determineContributorCompletion();
+		stackLayout.topControl = contributedComposite;
+		group.layout();
+		uiContributor.loadProperties();
+	}
+
+	public boolean determineContributorCompletion() {
+		boolean isComplete = false;
+		if ((uiContributor != null)) {
+			isComplete = uiContributor.determineContributorCompletion();
+		}
+		return isComplete;
+	}
+
+	public List getSummaryData() {
+		List summaryData = new ArrayList();
+		summaryData = uiContributor.getSummaryData();
+		return summaryData;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/DriverUIContributorRegistry.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/DriverUIContributorRegistry.java
new file mode 100644
index 0000000..39d1efb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/DriverUIContributorRegistry.java
@@ -0,0 +1,125 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.wizards;
+
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.List;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.drivers.DriverManager;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributor;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributorInformation;
+import org.eclipse.jface.dialogs.DialogPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+
+public final class DriverUIContributorRegistry {
+
+	private static DriverUIContributorRegistry instance = new DriverUIContributorRegistry();
+
+	private Hashtable driverUIContributorTable = null;
+
+	private BlankDriverUIContributor blankDriverUIContributor = new BlankDriverUIContributor();
+
+	private DriverUIContributorRegistry() {
+		initializeDriverCollection();
+	}
+
+	public static DriverUIContributorRegistry getInstance() {
+		return instance;
+	}
+
+	public IDriverUIContributor getDriverUIContributor(String driverInstanceID) {
+		IDriverUIContributor driverUIContributor = blankDriverUIContributor;
+		if (driverInstanceID != null) {
+			String driverTemplateID = DriverManager.getInstance()
+					.getDriverInstanceByID(driverInstanceID).getTemplate()
+					.getId();
+			if (driverTemplateID != null) {
+				IDriverUIContributor foundDriverUIContributor = (IDriverUIContributor) driverUIContributorTable
+						.get(driverTemplateID);
+				if (foundDriverUIContributor != null) {
+					driverUIContributor = foundDriverUIContributor;
+				}
+			}
+		}
+		return driverUIContributor;
+	}
+
+	private void initializeDriverCollection() {
+		driverUIContributorTable = new Hashtable();
+		IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+		IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint(
+				"org.eclipse.datatools.connectivity.ui", "driverUIContributor"); //$NON-NLS-1$ //$NON-NLS-2$
+		IExtension[] extensions = extensionPoint.getExtensions();
+		for (int extensionIndex = 0; extensionIndex < extensions.length; extensionIndex++) {
+			IConfigurationElement[] configElements = extensions[extensionIndex]
+					.getConfigurationElements();
+			for (int elementIndex = 0; elementIndex < configElements.length; ++elementIndex) {
+				if (configElements[elementIndex].getName().equals(
+						"driverUIContributor")) //$NON-NLS-1$
+				{
+					IConfigurationElement configElement = configElements[elementIndex];
+					String driverTemplateID = configElement
+							.getAttribute("driverTemplateID"); //$NON-NLS-1$
+					IDriverUIContributor driverUIContributor = null;
+					try {
+						driverUIContributor = (IDriverUIContributor) configElement
+								.createExecutableExtension("class"); //$NON-NLS-1$
+					} catch (Exception e) {
+					}
+					if (driverUIContributor != null) {
+						driverUIContributorTable.put(driverTemplateID,
+								driverUIContributor);
+					}
+				}
+			}
+		}
+	}
+
+	private class BlankDriverUIContributor implements IDriverUIContributor {
+		Composite baseComposite = null;
+
+		public BlankDriverUIContributor() {
+		}
+
+		public Composite getContributedDriverUI(Composite parent, boolean isReadOnly) {
+			if ((baseComposite == null) || baseComposite.isDisposed()) {
+				baseComposite = new Composite(parent, SWT.NONE);
+			}
+			return baseComposite;
+		}
+
+		public boolean determineContributorCompletion() {
+			return false;
+		}
+
+		public void setDialogPage(DialogPage parentPage) {
+			// Do nothing
+		}
+
+		public void setDriverUIContributorInformation(
+				IDriverUIContributorInformation information) {
+			// Do nothing
+		}
+
+		public void loadProperties() {
+			// Do nothing
+		}
+
+		public List getSummaryData() {
+			return new ArrayList();
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/ExportProfilesDialog.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/ExportProfilesDialog.java
new file mode 100644
index 0000000..5698ae4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/ExportProfilesDialog.java
@@ -0,0 +1,435 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2011 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *  shongxum - initial API and implementation
+ *  Actuate Corporation - refactored to improve extendability
+******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.wizards;
+
+import java.io.File;
+import java.util.Vector;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.IHelpConstants;
+import org.eclipse.datatools.connectivity.ui.ProfileImageRegistry;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.help.IContextProvider;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.TrayDialog;
+import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.osgi.util.TextProcessor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Layout;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * @author shongxum
+ */
+public class ExportProfilesDialog extends TrayDialog implements IContextProvider{
+
+	private CheckboxTableViewer tvViewer;
+
+	private Text txtFile;
+
+	private Button btnEncryption;
+
+	private IConnectionProfile[] mProfiles;
+
+	private File mFile;
+
+	private boolean mNeedEncryption;
+
+	private ContextProviderDelegate contextProviderDelegate =
+		new ContextProviderDelegate(ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName());
+
+	class TableLabelProvider extends LabelProvider implements
+			ITableLabelProvider {
+
+		public String getColumnText(Object element, int columnIndex) {
+			IConnectionProfile profile = (IConnectionProfile) element;
+			return profile.getName();
+		}
+
+		public Image getColumnImage(Object element, int columnIndex) {
+			IConnectionProfile profile = (IConnectionProfile) element;
+			return ProfileImageRegistry.getInstance().getProfileImage(
+					profile.getProvider());
+		}
+	}
+
+	class ContentProvider implements IStructuredContentProvider {
+
+		public Object[] getElements(Object inputElement) {
+			return ProfileManager.getInstance().getProfiles();
+		}
+
+		public void dispose() {
+		}
+
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		}
+	}
+
+	public ExportProfilesDialog(Shell parentShell) {
+		super(parentShell);
+		setShellStyle(SWT.CLOSE | SWT.RESIZE);
+	}
+
+	protected Control createDialogArea(Composite parent) {
+        
+        Composite container = createParentDialogArea(parent);
+		final GridLayout gridLayout = new GridLayout();
+		gridLayout.marginHeight = 20;
+		gridLayout.numColumns = 3;
+		container.setLayout(gridLayout);
+        
+        // profiles selection group 
+		{
+			final GridLayout groupGridLayout = new GridLayout();
+			groupGridLayout.makeColumnsEqualWidth = true;
+			groupGridLayout.numColumns = 3;
+			final Group group = createProfileSelectionGroup( container, groupGridLayout );
+
+            // profiles selection viewer
+			setupCheckboxTableViewer(group);
+
+			// SelectAll button
+			createSelectAllButton( group, new GridData(
+	                GridData.HORIZONTAL_ALIGN_CENTER) );
+
+			// invisible horizontal spacing between the 2 buttons
+			{
+				new Label(group, SWT.NONE);
+			}
+			
+            // DeselectAll button
+			createDeselectAllButton( group, new GridData(
+	                GridData.HORIZONTAL_ALIGN_CENTER) );
+		}
+
+		createVerticalSpacingLabel( container );
+		
+		// File path label
+		{
+			final GridData gridData = new GridData();
+			gridData.horizontalIndent = 5;
+            createFilePathLabel( container, gridData );
+		}
+		// File path text control
+		{
+			final GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
+			gridData.widthHint = 243;
+			setupFilePathText( container, gridData);
+		}
+		
+		// Browse... button
+		createFilePathBrowseButton( container, new GridData(
+                GridData.HORIZONTAL_ALIGN_CENTER) );
+		
+		// Encrypt file checkbox
+		setupEncryptContentCheckbox( container );
+
+        setupHelp( getShell() );
+		return container;
+	}
+
+    protected Composite createParentDialogArea(Composite parent)
+    {
+        return (Composite) super.createDialogArea(parent);
+    }
+
+    protected Group createProfileSelectionGroup( Composite parent, Layout layout )
+    {
+        final Group group = new Group(parent, SWT.NONE);
+        group.setText(ConnectivityUIPlugin.getDefault().getResourceString(
+        		"ExportProfilesDialog.group.text")); //$NON-NLS-1$
+        final GridData gridData = new GridData(GridData.FILL_BOTH);
+        gridData.horizontalSpan = 3;
+        group.setLayoutData(gridData);
+        group.setLayout(layout);
+        return group;
+    }
+
+    protected CheckboxTableViewer setupCheckboxTableViewer(Composite parent)
+    {
+        final CheckboxTableViewer checkboxTableViewer = CheckboxTableViewer
+                .newCheckList(parent, SWT.V_SCROLL | SWT.BORDER
+                        | SWT.H_SCROLL);
+        checkboxTableViewer.setLabelProvider(new TableLabelProvider());
+        checkboxTableViewer.setContentProvider(new ContentProvider());
+        final Table table = checkboxTableViewer.getTable();
+        final GridData gridData_1 = new GridData(GridData.FILL_BOTH);
+        gridData_1.horizontalSpan = 3;
+        gridData_1.widthHint = 392;
+        table.setLayoutData(gridData_1);
+        checkboxTableViewer.setInput(new Object());
+        checkboxTableViewer.setSorter(new ProfileSorter());
+        tvViewer = checkboxTableViewer;
+        tvViewer.refresh();
+        return tvViewer;
+    }
+
+    protected Button createSelectAllButton( Composite parent, Object layoutData )
+    {
+        final Button button = new Button(parent, SWT.NONE);
+        button.addSelectionListener(new SelectionAdapter() {
+
+            public void widgetSelected(SelectionEvent e) {
+                tvViewer.setAllChecked(true);
+            }
+        });
+        button.setLayoutData(layoutData);
+        button.setText(ConnectivityUIPlugin.getDefault()
+                .getResourceString("ExportProfilesDialog.button.text")); //$NON-NLS-1$
+        return button;
+    }
+    
+    protected Button createDeselectAllButton( Composite parent, Object layoutData )
+    {
+        final Button button = new Button(parent, SWT.NONE);
+        button.addSelectionListener(new SelectionAdapter() {
+
+            public void widgetSelected(SelectionEvent e) {
+                tvViewer.setAllChecked(false);
+            }
+        });
+        button.setLayoutData(layoutData);
+        button.setText(ConnectivityUIPlugin.getDefault()
+                        .getResourceString(
+                                "ExportProfilesDialog.button.text1")); //$NON-NLS-1$
+        return button;
+    }
+    
+    /**
+     * Creates an invisible label to be used for spacing between the group control and 
+     * the file path controls.
+     * @param parent    a composite control which will be the parent of the new label instance 
+     *                  (cannot be null)
+     */
+	protected Label createVerticalSpacingLabel( Composite parent )
+	{
+		final Label label = new Label(parent, SWT.NONE);
+		final GridData gridData = new GridData(
+				GridData.HORIZONTAL_ALIGN_FILL);
+		gridData.horizontalSpan = 3;
+		gridData.widthHint = 495;
+		label.setLayoutData(gridData);
+		return label;
+	}    
+
+    protected Label createFilePathLabel( Composite parent, Object layoutData )
+    {
+        final Label label = new Label(parent, SWT.NONE);
+        label.setLayoutData( layoutData );
+        label.setText(ConnectivityUIPlugin.getDefault().getResourceString(
+                "ExportProfilesDialog.label.text")); //$NON-NLS-1$
+        return label;
+    }
+
+    protected Text setupFilePathText( Composite parent, Object layoutData )
+    {
+        final Text text = new Text(parent, SWT.BORDER);
+        text.setLayoutData(layoutData);
+        txtFile = text;
+        return txtFile;
+    }
+
+    protected Button createFilePathBrowseButton( Composite parent, Object layoutData )
+    {
+		final Button button = new Button(parent, SWT.NONE);
+		button.addSelectionListener(new SelectionAdapter() {
+
+			public void widgetSelected(SelectionEvent e) {
+				String filePath = new FileDialog(getShell()).open();
+				if( filePath != null )
+				    setFilePathText(filePath);
+			}
+		});
+		button.setLayoutData( layoutData );
+		button.setText(ConnectivityUIPlugin.getDefault().getResourceString(
+				"ExportProfilesDialog.button.text2")); //$NON-NLS-1$
+        return button;
+    }
+
+    protected Button setupEncryptContentCheckbox( Composite parent )
+    {
+        final Button button = new Button(parent, SWT.CHECK);
+		final GridData gridData = new GridData(GridData.GRAB_HORIZONTAL);
+		gridData.horizontalIndent = 10;
+		gridData.horizontalSpan = 3;
+		button.setLayoutData(gridData);
+		button.setText(ConnectivityUIPlugin.getDefault().getResourceString(
+				"ExportProfilesDialog.btnEncryption.text")); //$NON-NLS-1$
+		button.setSelection(true);
+		btnEncryption = button;
+		return btnEncryption;
+    }
+
+    protected void setupHelp( Control control )
+    {
+        control.setData( HelpUtil.CONTEXT_PROVIDER_KEY, this);
+//      HelpUtil.setHelp( getShell(), IHelpConstants.CONTEXT_ID_EXPORT_PROFILES_DIALOG);
+        String contextId = HelpUtil.getContextId(IHelpConstants.CONTEXT_ID_EXPORT_PROFILES_DIALOG, 
+                ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName());
+        HelpUtil.setHelp( control, contextId);
+    }
+
+	protected void createButtonsForButtonBar(Composite parent) {
+		createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL,
+				true);
+		createButton(parent, IDialogConstants.CANCEL_ID,
+				IDialogConstants.CANCEL_LABEL, false);
+	}
+
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(ConnectivityUIPlugin.getDefault().getResourceString(
+				"ExportProfilesDialog.null.title")); //$NON-NLS-1$
+	}
+
+	public IConnectionProfile[] getSelectedProfiles() {
+		return mProfiles;
+	}
+
+	public File getFile() {
+		return mFile;
+	}
+
+	public boolean needEncryption() {
+		return mNeedEncryption;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
+	 */
+	protected void okPressed() {
+		Vector vec = new Vector();
+		Object[] elements = tvViewer.getCheckedElements();
+
+		if (elements.length == 0) {
+			MessageDialog.openError(getShell(), ConnectivityUIPlugin
+					.getDefault().getResourceString("dialog.title.error"), //$NON-NLS-1$
+					ConnectivityUIPlugin.getDefault().getResourceString(
+							"actions.export.noselection")); //$NON-NLS-1$
+			return;
+		}
+
+        if ( !validateFilePath() )
+            return;
+		
+		for (int i = 0; i < elements.length; i++) {
+			vec.add(elements[i]);
+		}
+		mProfiles = (IConnectionProfile[]) vec
+				.toArray(new IConnectionProfile[0]);
+		mFile = new File(getFilePathText());
+		
+		/* validate that the file name has a valid directory as parent */
+		String fileParent = mFile.getParent();
+		boolean hasParent = !(fileParent == null || mFile.getParent().length() == 0);
+		boolean pathEndsInFileSeparator = false;
+		boolean hasValidParent = false;
+		if (hasParent) {
+			File parentFile = new File(fileParent);
+			hasValidParent = parentFile.exists();
+			pathEndsInFileSeparator = parentFile.isDirectory();
+		}
+		if (!hasParent || !hasValidParent || !pathEndsInFileSeparator ) {
+			MessageDialog.openError(getShell(), ConnectivityUIPlugin
+					.getDefault().getResourceString("dialog.title.error"), //$NON-NLS-1$
+					ConnectivityUIPlugin.getDefault().getResourceString(
+							"actions.export.notvalidfile")); //$NON-NLS-1$
+			return;
+		}
+		mNeedEncryption = btnEncryption.getSelection();
+		super.okPressed();
+	}
+    
+	/*
+	 * @since DTP 1.9.2
+	 */
+    protected String getFilePathText()
+    {
+        String localizedText = txtFile.getText();
+        return TextProcessor.deprocess( localizedText );
+    }
+    
+    /*
+     * @since DTP 1.9.2
+     */
+    protected void setFilePathText( String text )
+    {
+        String localizedText = TextProcessor.process( text );
+        txtFile.setText( localizedText );
+    }
+
+    /*
+     * @since DTP 1.9.2
+     */
+    protected boolean validateFilePath() 
+    {
+        if ( getFilePathText().trim().length() == 0 ) 
+        {
+            MessageDialog.openError(getShell(), ConnectivityUIPlugin
+                    .getDefault().getResourceString("dialog.title.error"), //$NON-NLS-1$
+                    ConnectivityUIPlugin.getDefault().getResourceString(
+                            "actions.export.nofile")); //$NON-NLS-1$
+            return false;
+        }
+        return true;
+    }
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+	
+	private class ProfileSorter extends ViewerSorter {
+
+		public int compare(Viewer viewer, Object e1, Object e2) {
+			if (e1 instanceof IConnectionProfile && e2 instanceof IConnectionProfile) {
+				return ((IConnectionProfile)e1).getName().compareToIgnoreCase(((IConnectionProfile)e2).getName());
+			}
+			return super.compare(viewer, e1, e2);
+		}
+		
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/ILinkedSummary.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/ILinkedSummary.java
new file mode 100644
index 0000000..5d2dcd1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/ILinkedSummary.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.wizards;
+
+import org.eclipse.jface.wizard.Wizard;
+
+/**
+ * This interface is used by the linked navigator project to link the project
+ * wizard to the profile wizard and present a unified summary page.
+ * 
+ * @author brianf
+ */
+public interface ILinkedSummary {
+
+	public void setParentWizard(Wizard wizard);
+
+	public Wizard getParentWizard();
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/ILinkedWizard.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/ILinkedWizard.java
new file mode 100644
index 0000000..6eb9abd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/ILinkedWizard.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.wizards;
+
+import org.eclipse.jface.wizard.IWizard;
+
+/**
+ * Interface for a linked wizard. Linked wizards can contain other wizards in
+ * their series of pages. Clients should extend the base class LinkedWizardBase.
+ * 
+ * @author rcernich
+ */
+public interface ILinkedWizard extends IWizard {
+
+	/**
+	 * Sets the wizard that precedes this wizard in the chain. Clients should
+	 * not need to invoke this method directly (it is invoked automatically on
+	 * the wizard passed to setNext()).
+	 * 
+	 * @param previous
+	 */
+	public void setPrevious(ILinkedWizard previous);
+
+	/**
+	 * @return the wizard that precedes this wizard in the chain
+	 */
+	public ILinkedWizard getPrevious();
+
+	/**
+	 * Sets the wizard that follows this wizard. Sets next's previous wizard to
+	 * this.
+	 * 
+	 * @param next the next wizard in the chain.
+	 */
+	public void setNext(ILinkedWizard next);
+
+	/**
+	 * @return the next wizard in the chain
+	 */
+	public ILinkedWizard getNext();
+
+	/**
+	 * @return true if this wizard has successfully completed its
+	 *         performFinish() work.
+	 */
+	public boolean isFinished();
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/IMediator.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/IMediator.java
new file mode 100644
index 0000000..b790fd1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/IMediator.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.wizards;
+
+import org.eclipse.jface.wizard.IWizardPage;
+
+/**
+ * Specifies the behaivour of a wizard that can determine which page will be
+ * next in the sequence.
+ * 
+ * Used in conjuction with <cide>ISkippable</code>.
+ * 
+ * @author shongxum
+ */
+public interface IMediator {
+
+	/**
+	 * Mediates the wizard page with respect to which page will be next in the
+	 * sequence.
+	 * 
+	 * @param wizardPage Mediated page
+	 */
+	public void mediatePage(IWizardPage wizardPage);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/ISkippable.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/ISkippable.java
new file mode 100644
index 0000000..c3ac391
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/ISkippable.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.wizards;
+
+/**
+ * Specifies behavior of a wizard page that allows it to decide whether it
+ * belongs to the sequence of wizard pages in the wizard dialog or is skipped.
+ * 
+ * @author shongxum
+ */
+public interface ISkippable {
+
+	/**
+	 * Returns the visibility status of the page.
+	 * 
+	 * @return True if a page should be skipped in a sequence of a wizard
+	 *         dialog.
+	 */
+	public boolean getSkippable();
+
+	/**
+	 * Marks the wizard page as hidden or visible depending on a parameter
+	 * value.
+	 * 
+	 * @param b A value that specifies whether the page should be skipped ina a
+	 *        sequence of a wizard dialog.
+	 */
+	public void setSkippable(boolean b);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/ISummary.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/ISummary.java
new file mode 100644
index 0000000..f15a071
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/ISummary.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: plevin - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.wizards;
+
+import org.eclipse.jface.wizard.IWizardPage;
+
+/**
+ * Tagging interface that is used to mark a wizard page class as one that can
+ * serve a summary wizard page.
+ * 
+ * @author plevin
+ */
+public interface ISummary extends IWizardPage {
+	// Empty
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/ISummaryDataSource.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/ISummaryDataSource.java
new file mode 100644
index 0000000..e95814a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/ISummaryDataSource.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: plevin - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.wizards;
+
+import java.util.List;
+
+/**
+ * Specifies bahavior for a datasource that client wizards use to communicate
+ * summary information to summary page.
+ * 
+ * @author plevin
+ */
+public interface ISummaryDataSource {
+
+	/**
+	 * Returns key-value summary data.
+	 * 
+	 * @return Summary data.
+	 */
+	public List getSummaryData();
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/IWizardAction.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/IWizardAction.java
new file mode 100644
index 0000000..2d8ad99
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/IWizardAction.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.wizards;
+
+/**
+ * Allows the wizard pages to listen to the event of switching of the page.
+ * 
+ * @author shongxum
+ */
+public interface IWizardAction {
+
+	/**
+	 * Called just before switching the page.
+	 * 
+	 * @return boolean
+	 */
+	public boolean onWizardNext();
+
+	/**
+	 * Called before showing this page.
+	 * 
+	 * @return boolean
+	 */
+	public void onSetActive();
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/ImportProfilesDialog.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/ImportProfilesDialog.java
new file mode 100644
index 0000000..1dbf55e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/ImportProfilesDialog.java
@@ -0,0 +1,317 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2011 Sybase, Inc. and others
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ *      Actuate Corporation - added the cipherProvider extension point [BZ 358686]
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.wizards;
+
+import java.io.File;
+import java.io.FileInputStream;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileMgmt;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepositoryConstants;
+import org.eclipse.datatools.connectivity.internal.security.SecurityManager;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.IHelpConstants;
+import org.eclipse.datatools.connectivity.internal.ui.RepositoriesDropList;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.help.IContextProvider;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.TrayDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * @author shongxum
+ */
+public class ImportProfilesDialog extends TrayDialog implements IContextProvider {
+
+	private Text txtFile;
+
+	private Button mLocalRepository;
+	
+	private RepositoriesDropList mRepositories;
+
+	private Button btnOverwrite;
+
+	private Throwable mException;
+
+	private IConnectionProfile[] mProfiles;
+
+	private boolean mOverwrite;
+	
+	private boolean mUseLocalRepository;
+	
+	private IConnectionProfile mRepository;
+
+	private ContextProviderDelegate contextProviderDelegate =
+		new ContextProviderDelegate(ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName());
+
+	public ImportProfilesDialog(Shell parentShell) {
+		super(parentShell);
+		setShellStyle(SWT.CLOSE | SWT.RESIZE);
+	}
+
+	protected Control createDialogArea(Composite parent) {
+        Composite container = (Composite) super.createDialogArea(parent);
+		final GridLayout gridLayout = new GridLayout();
+		gridLayout.marginHeight = 20;
+		gridLayout.numColumns = 3;
+		container.setLayout(gridLayout);
+		{
+			Text text = new Text(container, SWT.BORDER | SWT.MULTI
+					| SWT.READ_ONLY | SWT.WRAP);
+			text.setText(ConnectivityUIPlugin.getDefault().getResourceString(
+					"ImportProfilesDialog.text.text")); //$NON-NLS-1$
+			final GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
+			gridData.heightHint = 60;
+			gridData.horizontalSpan = 3;
+			text.setLayoutData(gridData);
+		}
+		{
+			final Label label = new Label(container, SWT.NONE);
+			final GridData gridData = new GridData(
+					GridData.HORIZONTAL_ALIGN_FILL);
+			gridData.horizontalSpan = 3;
+			gridData.widthHint = 495;
+			label.setLayoutData(gridData);
+		}
+		{
+			final Label label = new Label(container, SWT.NONE);
+			final GridData gridData = new GridData();
+			gridData.horizontalIndent = 5;
+			label.setLayoutData(gridData);
+			label.setText(ConnectivityUIPlugin.getDefault().getResourceString(
+					"ImportProfilesDialog.label.text")); //$NON-NLS-1$
+		}
+		{
+			txtFile = new Text(container, SWT.BORDER);
+			final GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
+			gridData.widthHint = 243;
+			txtFile.setLayoutData(gridData);
+		}
+		{
+			final Button button = new Button(container, SWT.NONE);
+			button.addSelectionListener(new SelectionAdapter() {
+
+				public void widgetSelected(SelectionEvent e) {
+					String text = new FileDialog(getShell()).open();
+					if (text != null)
+						txtFile.setText(text);
+				}
+			});
+			button
+					.setLayoutData(new GridData(
+							GridData.HORIZONTAL_ALIGN_CENTER));
+			button.setText(ConnectivityUIPlugin.getDefault().getResourceString(
+					"ImportProfilesDialog.button.text")); //$NON-NLS-1$
+		}
+		{
+			btnOverwrite = new Button(container, SWT.CHECK);
+			final GridData gridData = new GridData(GridData.GRAB_HORIZONTAL);
+			gridData.horizontalIndent = 10;
+			gridData.horizontalSpan = 3;
+			btnOverwrite.setLayoutData(gridData);
+			btnOverwrite
+					.setText(ConnectivityUIPlugin.getDefault()
+							.getResourceString(
+									"ImportProfilesDialog.btnOverwrite.text")); //$NON-NLS-1$
+		}
+		{
+			Label spacer = new Label(container,SWT.NONE);
+			GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+			gd.heightHint = 20;
+			gd.horizontalSpan = 3;
+			spacer.setLayoutData(gd);
+			
+			Label separator = new Label(container,SWT.SEPARATOR|SWT.HORIZONTAL);
+			gd = new GridData(GridData.FILL_HORIZONTAL);
+			gd.horizontalSpan = 3;
+			separator.setLayoutData(gd);
+
+			mLocalRepository = new Button(container, SWT.CHECK);
+			gd = new GridData();
+			gd.horizontalSpan = 3;
+			mLocalRepository.setLayoutData(gd);
+			mLocalRepository.setText(ConnectivityUIPlugin.getDefault()
+					.getResourceString(
+							"NewConnectionProfileWizardPage.localRepository")); //$NON-NLS-1$
+			mUseLocalRepository = true;
+			mLocalRepository.setSelection(mUseLocalRepository);
+			mLocalRepository.addSelectionListener(new SelectionAdapter() {
+
+				public void widgetSelected(SelectionEvent arg0) {
+					mUseLocalRepository = mLocalRepository.getSelection();
+					mRepositories.getCombo().setEnabled(!mUseLocalRepository);
+				}
+				
+			});
+
+			Label label = new Label(container, SWT.NONE);
+			label.setText(ConnectivityUIPlugin.getDefault().getResourceString(
+					"NewConnectionProfileWizardPage.chooseRepository")); //$NON-NLS-1$
+			mRepositories = new RepositoriesDropList(null, container);
+			gd = new GridData(GridData.FILL_HORIZONTAL);
+			gd.horizontalSpan = 2;
+			mRepositories.getCombo().setLayoutData(gd);
+			mRepositories
+					.setInput(ProfileManager
+							.getInstance()
+							.getProfilesByCategory(
+									IConnectionProfileRepositoryConstants.REPOSITORY_CATEGORY_ID));
+			mRepositories
+					.addSelectionChangedListener(new ISelectionChangedListener() {
+
+						public void selectionChanged(SelectionChangedEvent event) {
+							ISelection selection = event.getSelection();
+							if (selection.isEmpty()) {
+								mRepository = null;
+							}
+							else {
+								mRepository = (IConnectionProfile) ((IStructuredSelection) selection)
+										.getFirstElement();
+							}
+						}
+
+					});
+			mRepositories.getCombo()
+					.setEnabled(!mLocalRepository.getSelection());
+			if (!mRepositories.hasRepositories()) {
+				mLocalRepository.setEnabled(false);
+				mLocalRepository.setVisible(false);
+				label.setVisible(false);
+				separator.setVisible(false);
+				mRepositories.getCombo().setVisible(false);
+			}
+
+		}
+
+		getShell().setData( HelpUtil.CONTEXT_PROVIDER_KEY, this);
+        HelpUtil.setHelp( getShell(), 
+        		HelpUtil.getContextId(IHelpConstants.CONTEXT_ID_IMPORT_PROFILES_DIALOG, 
+        				ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName()));
+
+		return container;
+	}
+
+	protected void createButtonsForButtonBar(Composite parent) {
+		createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL,
+				true);
+		createButton(parent, IDialogConstants.CANCEL_ID,
+				IDialogConstants.CANCEL_LABEL, false);
+	}
+
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(ConnectivityUIPlugin.getDefault().getResourceString(
+				"ImportProfilesDialog.null.title")); //$NON-NLS-1$
+	}
+
+	public Throwable getException() {
+		return mException;
+	}
+
+	public IConnectionProfile[] getProfiles() {
+		return mProfiles;
+	}
+
+	public boolean isOverwritten() {
+		return mOverwrite;
+	}
+	
+	public boolean getUseLocalRepository() {
+		return mUseLocalRepository;
+	}
+	
+	public IConnectionProfile getSelectedRepository() {
+		return mRepository;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
+	 */
+	protected void okPressed() {
+		if (txtFile.getText().length() == 0) {
+			MessageDialog.openError(getShell(), ConnectivityUIPlugin
+					.getDefault().getResourceString("dialog.title.error"), //$NON-NLS-1$
+					ConnectivityUIPlugin.getDefault().getResourceString(
+							"actions.export.nofile")); //$NON-NLS-1$
+			return;
+		}
+		else if (!mUseLocalRepository && mRepository == null) {
+			MessageDialog.openError(getShell(), ConnectivityUIPlugin
+					.getDefault().getResourceString("dialog.title.error"), //$NON-NLS-1$
+					ConnectivityUIPlugin.getDefault().getResourceString(
+							"actions.export.norepository")); //$NON-NLS-1$
+			return;
+		}
+		mOverwrite = btnOverwrite.getSelection();
+		try {
+			byte[] bytes = new byte[5];
+			char[] xml = {'<','?','x','m','l'};
+			FileInputStream fis = new FileInputStream(txtFile.getText());
+			fis.read(bytes);
+			fis.close();
+			boolean isXML = true;
+			for (int i = 0; isXML && i < 5; ++i) {
+				isXML = bytes[i] == xml[i];
+			}
+			if (isXML) {
+				// not encrpyted
+				mProfiles = ConnectionProfileMgmt.importCPs(new File(txtFile
+						.getText()), null, mOverwrite);
+			}
+			else {
+				// encrypted
+                File importFile = new File(txtFile.getText());
+                mProfiles = ConnectionProfileMgmt.importCPs( importFile, 
+                                SecurityManager.getInstance().getCipherProvider( importFile ), 
+                                mOverwrite );
+			}
+		}
+		catch (Exception e) {
+			mException = e;
+		}
+		
+		super.okPressed();
+	}
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/IntroWizardPage.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/IntroWizardPage.java
new file mode 100644
index 0000000..d10d8f7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/IntroWizardPage.java
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: danielva - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.wizards;
+
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.IHelpConstants;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.help.IContextProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * @author danielva
+ * 
+ * Introduction Wizard Page
+ */
+
+public class IntroWizardPage extends BaseWizardPage implements IContextProvider {
+
+	private Text _txtIntroduction;
+	private static final String PAGE_NAME = "IntroductionWizardPage"; //$NON-NLS-1$
+
+	private ContextProviderDelegate contextProviderDelegate =
+		new ContextProviderDelegate(ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName());
+
+	/**
+	 * Constructor
+	 */
+	public IntroWizardPage() {
+		super(PAGE_NAME);
+
+		setTitle(ConnectivityUIPlugin.getDefault().getResourceString(
+				PAGE_NAME + ".title")); //$NON-NLS-1$
+		setDescription(""); //$NON-NLS-1$
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.dialogs.DialogPage#createControl(org.eclipse.swt.widgets.Composite)
+	 */
+	public void createControl(Composite parent) {
+        GridData gd;
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridLayout gl = new GridLayout();
+
+		gl.numColumns = 1;
+		composite.setLayout(gl);
+
+		gd = new GridData();
+		gd.heightHint = 100;
+		gd.widthHint = 404;
+		_txtIntroduction = new Text(composite, SWT.MULTI | SWT.WRAP);
+		_txtIntroduction.setLayoutData(gd);
+		_txtIntroduction.setEditable(false);
+		_txtIntroduction.setText(ConnectivityUIPlugin.getDefault()
+				.getResourceString(PAGE_NAME + ".intro")); //$NON-NLS-1$
+
+		setControl(composite);
+		setPageComplete(true);
+//		PlatformUI.getWorkbench().getHelpSystem().setHelp(parent,
+//				IHelpConstants.CONTEXT_ID_INTRO_WIZARD_PAGE);
+
+        getShell().setData( HelpUtil.CONTEXT_PROVIDER_KEY, this);
+		HelpUtil.setHelp( getControl(), HelpUtil.getContextId(IHelpConstants.CONTEXT_ID_INTRO_WIZARD_PAGE, ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName()));
+
+	}
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/LinkedWizardBase.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/LinkedWizardBase.java
new file mode 100644
index 0000000..428870a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/LinkedWizardBase.java
@@ -0,0 +1,182 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.wizards;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jface.wizard.IWizardPage;
+
+/**
+ * Base linked wizard. Linked wizards can contain other wizards in their series
+ * of pages. To link wizards together, initalize the following wizard in your
+ * wizard's addPages() method, e.g.
+ * 
+ * <pre>
+ *  	public void addPages() {
+ * 		super.addPages();
+ * 		
+ * 		// Add this wizard's pages.
+ * 		...
+ * 		
+ * 		// Create the next wizard
+ * 		MyNextWizard mnw = new MyNextWizard();
+ * 		
+ * 		// Initialize the wizard
+ * 		mnw.init();
+ * 		
+ * 		// Create the wizards pages
+ * 		mnw.addPages();
+ * 		
+ * 		// Link the wizard into the chain
+ * 		setNext(mnw);
+ * 	}
+ * </pre>
+ * 
+ * The linked wizard's starting page is automatically returned by getNextPage()
+ * when all this wizard's pages have been displayed.
+ * 
+ * @author rcernich
+ */
+public abstract class LinkedWizardBase extends BaseWizard implements
+		ILinkedWizard {
+
+	ILinkedWizard mPrevious = null;
+	ILinkedWizard mNext = null;
+	protected boolean mFinished = false;
+
+	/**
+	 * Default constructor.
+	 */
+	public LinkedWizardBase() {
+		super();
+	}
+
+	public void setPrevious(ILinkedWizard previous) {
+		mPrevious = previous;
+		if (mPrevious != null
+				&& (getWindowTitle() == null || getWindowTitle().length() == 0)) {
+			setWindowTitle(mPrevious.getWindowTitle());
+		}
+	}
+
+	public ILinkedWizard getPrevious() {
+		return mPrevious;
+	}
+
+	public void setNext(ILinkedWizard next) {
+		mNext = next;
+		if (next != null)
+			mNext.setPrevious(this);
+	}
+
+	public ILinkedWizard getNext() {
+		return mNext;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.wizard.IWizard#canFinish()
+	 */
+	public boolean canFinish() {
+		boolean canFinish = super.canFinish();
+		if (canFinish && getNext() != null) {
+			canFinish = canFinish && getNext().canFinish();
+		}
+		return canFinish;
+	}
+
+	public boolean isFinished() {
+		return mFinished;
+	}
+
+	/**
+	 * @see org.eclipse.jface.wizard.IWizard#dispose()
+	 */
+	public void dispose() {
+		super.dispose();
+		mPrevious = null;
+	}
+
+	/**
+	 * @see org.eclipse.jface.wizard.IWizard#performFinish()
+	 */
+	public boolean performFinish() {
+		boolean noFailures = true;
+		if (!mFinished) {
+			// Get the last unfinished wizard
+			LinkedWizardBase lastWiz = this;
+			if (getNext() != null && !getNext().isFinished()) {
+				lastWiz = (LinkedWizardBase) getNext();
+				while (lastWiz.getNext() != null
+						&& !lastWiz.getNext().isFinished()) {
+					lastWiz = (LinkedWizardBase) lastWiz.getNext();
+				}
+			}
+
+			// finish the wizards from last to first
+			do {
+				lastWiz.mFinished = lastWiz.doFinish();
+				noFailures = noFailures && lastWiz.isFinished();
+				lastWiz = (LinkedWizardBase) lastWiz.getPrevious();
+			}
+			while (noFailures && lastWiz != null && !lastWiz.isFinished());
+		}
+		return mFinished && noFailures;
+	}
+
+	public abstract boolean doFinish();
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.wizard.IWizard#getNextPage(org.eclipse.jface.wizard.IWizardPage)
+	 */
+	public IWizardPage getNextPage(IWizardPage page) {
+		IWizardPage nextPage = super.getNextPage(page);
+		if ((nextPage == null || nextPage instanceof SummaryWizardPage)
+				&& getNext() != null) {
+			nextPage = getNext().getStartingPage();
+		}
+		return nextPage;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.common.ui.wizards.ISummaryDataSource#getSummaryData()
+	 */
+	public List getSummaryData() {
+		List summaryData;
+		LinkedWizardBase prevWizard = (LinkedWizardBase) getPrevious();
+		if (prevWizard == null) {
+			summaryData = new ArrayList();
+		}
+		else {
+			summaryData = prevWizard.getSummaryData();
+		}
+		IWizardPage[] pages = getPages();
+		for (int i = 0; i < pages.length; i++) {
+			if (pages[i] instanceof ISummaryDataSource) {
+				if (pages[i] instanceof ISkippable) {
+					if (((ISkippable) pages[i]).getSkippable()) {
+						continue;
+					}
+				}
+				summaryData.addAll(((ISummaryDataSource) pages[i])
+						.getSummaryData());
+			}
+		}
+		return summaryData;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/NewCPWizard.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/NewCPWizard.java
new file mode 100644
index 0000000..2fd2a99
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/NewCPWizard.java
@@ -0,0 +1,167 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ *  Actuate Corporation - refactored to improve extensibility
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.wizards;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.IHelpConstants;
+import org.eclipse.datatools.connectivity.internal.ui.SharedImages;
+import org.eclipse.datatools.connectivity.ui.wizards.NewConnectionProfileWizard;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.help.IContextProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.jface.wizard.IWizardNode;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+
+/**
+ * @see Wizard
+ */
+public class NewCPWizard extends BaseWizard implements INewWizard, IContextProvider {
+
+	private CPWizardSelectionPage mProfilePage;
+
+    private ViewerFilter[] mViewerFilters;
+	
+	private IConnectionProfile mParentProfile;
+
+	/**
+	 * 
+	 */
+	public NewCPWizard() {
+		setDefaultPageImageDescriptor(SharedImages.DESC_WIZBAN);
+		setWindowTitle(ConnectivityUIPlugin.getDefault().getResourceString(
+				"NewCPWizard.title")); //$NON-NLS-1$
+	}
+
+	/**
+	 * Constructor with a single ViewerFilter and the parent connection profile.
+	 * @param filter
+	 * @param parentProfile
+	 */
+	public NewCPWizard(ViewerFilter filter,IConnectionProfile parentProfile) {
+        this(parentProfile);
+        if ( filter != null )
+            mViewerFilters = new ViewerFilter[]{ filter };
+	}
+
+	/**
+	 * Constructor with an array of ViewerFilter and the parent connection profile.
+	 * @param filters  an array of ViewerFilter; may be an empty array, in which case
+	 *             the default NewCPWizardCategoryFilter will be used
+	 * @param parentProfile
+	 * @since DTP 1.6
+	 */
+	public NewCPWizard(ViewerFilter[] filters,IConnectionProfile parentProfile) {
+        this(parentProfile);
+        mViewerFilters = filters;
+	}
+
+	private NewCPWizard(IConnectionProfile parentProfile) {
+        this();
+        mParentProfile = parentProfile;
+	}
+	
+	/**
+	 * @see Wizard#performFinish
+	 */
+	public boolean performFinish() {
+		if (mProfilePage != null && !mProfilePage.getControl().isDisposed()) {
+			IWizardNode selectedNode = mProfilePage.getSelectedNode();
+			if (selectedNode == null)
+				return false;
+			
+			IWizard wizard = selectedNode.getWizard();
+
+			if (wizard == null) {
+				return false;
+			}
+			else if (wizard.canFinish())
+				return wizard.performFinish();
+		}
+		// mStore.setValue(DONNT_SHOW_INRO, mIntroPage.isHideIntro());
+		return true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.wizard.IWizard#addPages()
+	 */
+	public void addPages() {
+		super.addPages();
+
+		mProfilePage = new CPWizardSelectionPage(CPWizardSelectionPage.class
+				.getName(), mViewerFilters);
+		addPage(mProfilePage);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench,
+	 *      org.eclipse.jface.viewers.IStructuredSelection)
+	 */
+	public void init(IWorkbench workbench, IStructuredSelection selection) {
+		if (mViewerFilters == null || mViewerFilters.length == 0) {
+			mViewerFilters = new ViewerFilter[]{ new NewCPWizardCategoryFilter(null) };
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.wizard.IWizard#needsPreviousAndNextButtons()
+	 */
+	public boolean needsPreviousAndNextButtons() {
+		return true;
+	}
+	
+	public IConnectionProfile getParentProfile() {
+		return mParentProfile;
+	}
+
+	public void createPageControls(Composite pageContainer) {
+		super.createPageControls(pageContainer);
+		getShell().setData(HelpUtil.CONTEXT_PROVIDER_KEY, this);
+//		HelpUtil.setHelp(getShell(), IHelpConstants.CONTEXT_ID_NEW_CP_WIZARD);
+		HelpUtil.setHelp(getShell(), HelpUtil.getContextId(
+				IHelpConstants.CONTEXT_ID_NEW_CP_WIZARD,
+				ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName()));
+	}
+
+	private ContextProviderDelegate contextProviderDelegate = new ContextProviderDelegate(
+			ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName());
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+
+	public boolean canFinish() {
+		return super.canFinish();
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/NewCPWizardCategoryFilter.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/NewCPWizardCategoryFilter.java
new file mode 100644
index 0000000..909cdf7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/NewCPWizardCategoryFilter.java
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.wizards;
+
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.internal.CategoryProvider;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileManager;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepositoryConstants;
+import org.eclipse.datatools.connectivity.ui.wizards.IWizardCategoryProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+
+
+public class NewCPWizardCategoryFilter extends ViewerFilter {
+	
+	private String categoryID;
+	
+	public NewCPWizardCategoryFilter(String categoryID) {
+		setCategoryID(categoryID);
+	}
+
+	public boolean select(Viewer viewer, Object parentElement,
+			Object element) {
+		CPWizardNode wizardNode = (CPWizardNode) element;
+		if (!(wizardNode.getProvider() instanceof IWizardCategoryProvider)) {
+			ICategory cat = ConnectionProfileManager.getInstance()
+					.getProvider(
+							((ProfileWizardProvider) wizardNode
+									.getProvider()).getProfile())
+					.getCategory();
+			if (categoryID == null
+					|| categoryID.equals(CategoryProvider.ID_CATEGORY_UNKNOWN)) {
+				// Filter out repositories
+				while (cat != null) {
+					if (IConnectionProfileRepositoryConstants.REPOSITORY_CATEGORY_ID
+							.equals(cat.getId()))
+						return false;
+					else
+						cat = cat.getParent();
+				}
+				return true;
+			}
+			else {
+				// Only display wizards belong to a specific category or
+				// a parent category
+				while (cat != null) {
+					if (cat.getId().equals(categoryID))
+						return true;
+					else
+						cat = cat.getParent();
+				}
+			}
+		}
+		else {
+			if (((IWizardCategoryProvider) wizardNode.getProvider())
+					.getId().equals(categoryID))
+				return true;
+		}
+		return false;
+	}
+	
+	public void setCategoryID(String categoryID) {
+		this.categoryID = categoryID;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/NewCategoryWizard.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/NewCategoryWizard.java
new file mode 100644
index 0000000..d4a69f0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/NewCategoryWizard.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.wizards;
+
+import org.eclipse.datatools.connectivity.internal.ui.SharedImages;
+import org.eclipse.datatools.connectivity.ui.wizards.IWizardCategoryProvider;
+
+/**
+ * @author shongxum
+ */
+public class NewCategoryWizard extends BaseWizard {
+
+	private CPWizardSelectionPage mProfilePage;
+
+	private IWizardCategoryProvider mCategory;
+
+	public NewCategoryWizard() {
+		super();
+		setDefaultPageImageDescriptor(SharedImages.DESC_WIZBAN);
+		setForcePreviousAndNextButtons(true);
+	}
+
+	public void initWizardCategory(IWizardCategoryProvider category) {
+		mCategory = category;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.wizard.IWizard#addPages()
+	 */
+	public void addPages() {
+		super.addPages();
+		mProfilePage = new CPWizardSelectionPage(CPWizardSelectionPage.class
+				.getName()
+				+ mCategory.getName(), null, mCategory.getId());
+		mProfilePage.setTitle(mCategory.getWizardTitle());
+		mProfilePage.setDescription(mCategory.getWizardDescription());
+		addPage(mProfilePage);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.wizard.IWizard#performFinish()
+	 */
+	public boolean performFinish() {
+		return true;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/NewRepositoryWizard.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/NewRepositoryWizard.java
new file mode 100644
index 0000000..f37d956
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/NewRepositoryWizard.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.wizards;
+
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepositoryConstants;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.IHelpConstants;
+import org.eclipse.datatools.connectivity.internal.ui.SharedImages;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.swt.widgets.Composite;
+
+public class NewRepositoryWizard extends NewCPWizard {
+
+	public NewRepositoryWizard() {
+		super(new NewCPWizardCategoryFilter(
+				IConnectionProfileRepositoryConstants.REPOSITORY_CATEGORY_ID),
+				null);
+		setDefaultPageImageDescriptor(SharedImages.DESC_WIZBAN);
+		setWindowTitle(ConnectivityUIPlugin.getDefault().getResourceString("NewRepositoryWizard.title")); //$NON-NLS-1$
+	}
+
+	public void createPageControls(Composite pageContainer) {
+		super.createPageControls(pageContainer);
+		getShell().setData(HelpUtil.CONTEXT_PROVIDER_KEY, this);
+		HelpUtil.setHelp(getShell(), HelpUtil.getContextId(
+				IHelpConstants.CONTEXT_ID_NEW_REPOSITORY_WIZARD,
+				ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName()));
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/ProfileWizardProvider.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/ProfileWizardProvider.java
new file mode 100644
index 0000000..ae8880e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/ProfileWizardProvider.java
@@ -0,0 +1,194 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005, 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ *    IBM Corporation - bug fix
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.wizards;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.ISafeRunnable;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileManager;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+import org.eclipse.datatools.connectivity.ui.wizards.IProfileWizardProvider;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.util.SafeRunnable;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @author shongxum
+ */
+public class ProfileWizardProvider implements IProfileWizardProvider {
+
+	public static final String ATTR_ID = "id"; //$NON-NLS-1$
+
+	public static final String ATTR_NAME = "name"; //$NON-NLS-1$
+
+	public static final String ATTR_CLASS = "class"; //$NON-NLS-1$
+
+	public static final String ATTR_ICON = "icon"; //$NON-NLS-1$
+
+	public static final String ATTR_DESC = "description"; //$NON-NLS-1$
+
+	public static final String ATTR_PROFILE = "profile"; //$NON-NLS-1$
+	
+	public static final String ATTR_SUPPRESSED_PROFILE = "suppressedProfile"; //$NON-NLS-1$
+
+	public static final String ATTR_CATEGORY = "category"; //$NON-NLS-1$
+
+	private String mId;
+
+	private String mName;
+
+	private ImageDescriptor mIcon;
+
+	private Image mCachedIcon;
+
+	private String mProfile;
+	
+	private String mSuppressedProfile;
+
+	private String mDescription;
+
+	private String mCategory;
+
+	private IConfigurationElement mElement;
+
+	public ProfileWizardProvider(IConfigurationElement element) {
+		super();
+		init(element);
+	}
+
+	private void init(IConfigurationElement element) {
+		Assert.isTrue(ConnectionProfileManager.EXT_ELEM_NEW_WIZARD
+				.equals(element.getName()));
+
+		mElement = element;
+
+		mId = element.getAttribute(ATTR_ID);
+		mName = element.getAttribute(ATTR_NAME);
+		mProfile = element.getAttribute(ATTR_PROFILE);
+		mSuppressedProfile = element.getAttribute(ATTR_SUPPRESSED_PROFILE);
+		mDescription = element.getAttribute(ATTR_DESC);
+		mCategory = element.getAttribute(ATTR_CATEGORY);
+		if (mCategory == null)
+			mCategory = ""; //$NON-NLS-1$
+		processIconAttr();
+	}
+
+	private void processIconAttr() {
+		String iconAttr = mElement.getAttribute(ATTR_ICON);
+		if (iconAttr != null && iconAttr.trim().length() > 0) {
+			URL url = null;
+			if (iconAttr.startsWith("platform:/")){ //$NON-NLS-1$
+				try {
+					url = new URL(iconAttr);
+				} catch (MalformedURLException e) {
+					// Do nothing
+				}
+			} else {
+				url = Platform.getBundle(
+						mElement.getContributor().getName()).getEntry(
+						iconAttr);
+			}
+			mIcon = ImageDescriptor.createFromURL(url);
+		}
+		else {
+			mIcon = ImageDescriptor.getMissingImageDescriptor();
+		}
+	}
+
+	/**
+	 * @return Returns the description.
+	 */
+	public String getDescription() {
+		return mDescription;
+	}
+
+	/**
+	 * @return Returns the icon.
+	 */
+	public ImageDescriptor getIcon() {
+		return mIcon;
+	}
+
+	public Image getCachedIcon() {
+		if (mCachedIcon == null) {
+			mCachedIcon = mIcon.createImage();
+		}
+		return mCachedIcon;
+	}
+
+	/**
+	 * @return Returns the id.
+	 */
+	public String getId() {
+		return mId;
+	}
+
+	/**
+	 * @return Returns the name.
+	 */
+	public String getName() {
+		return mName;
+	}
+
+	/**
+	 * @return Returns the profile.
+	 */
+	public String getProfile() {
+		return mProfile;
+	}
+
+	/**
+	 * @return Returns the suppressed profile.
+	 */
+	public String getSuppressedProfile() {
+		return mSuppressedProfile;
+	}
+
+	/**
+	 * @return Returns the category.
+	 */
+	public String getCategory() {
+		return mCategory;
+	}
+
+	/**
+	 * Note: do not cache IWizard!!!
+	 * 
+	 * @return Returns the wizard.
+	 */
+	public IWizard getWizard() {
+		final IWizard[] result = new IWizard[1];
+		ISafeRunnable code = new SafeRunnable(ConnectivityPlugin.getDefault()
+				.getResourceString(
+						"dialog.title.error.loadwizard", //$NON-NLS-1$
+						new Object[] { mElement.getDeclaringExtension()
+								.getNamespaceIdentifier()})) {
+
+			/*
+			 * @see org.eclipse.core.runtime.ISafeRunnable#run()
+			 */
+			public void run() throws Exception {
+				result[0] = (IWizard) mElement
+						.createExecutableExtension(ATTR_CLASS);
+			}
+
+		};
+		SafeRunner.run(code);
+		return result[0];
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/SummaryWizardPage.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/SummaryWizardPage.java
new file mode 100644
index 0000000..fe5bbf8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/SummaryWizardPage.java
@@ -0,0 +1,157 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: plevin, shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.wizards;
+
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.jface.viewers.ColumnPixelData;
+import org.eclipse.jface.viewers.TableLayout;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+
+/**
+ * Common wizard page used to summarize information entered in previous pages.
+ * 
+ * @author plevin, shongxum
+ */
+public class SummaryWizardPage extends WizardPage implements ISummary {
+
+	private static final String PAGE = "SummaryWizardPage"; //$NON-NLS-1$
+
+	private static final String TITLE = PAGE + ".title"; //$NON-NLS-1$
+
+	private static final String DESCRIPTION = PAGE + ".description"; //$NON-NLS-1$
+
+	private static final String PROPERTY = PAGE + ".property"; //$NON-NLS-1$
+
+	private static final String VALUE = PAGE + ".value"; //$NON-NLS-1$
+
+	private String mPropertyCol = ""; //$NON-NLS-1$
+
+	private String mValueCol = ""; //$NON-NLS-1$
+
+	private ISummaryDataSource mSource;
+
+	private Table mTable;
+
+	public SummaryWizardPage() {
+		super(PAGE);
+		setTitle(ConnectivityUIPlugin.getDefault().getResourceString(TITLE));
+		setDescription(ConnectivityUIPlugin.getDefault().getResourceString(
+				DESCRIPTION));
+		mPropertyCol = ConnectivityUIPlugin.getDefault().getResourceString(
+				PROPERTY);
+		mValueCol = ConnectivityUIPlugin.getDefault().getResourceString(VALUE);
+	}
+
+	public SummaryWizardPage(ISummaryDataSource source) {
+		this();
+		mSource = source;
+	}
+
+	/**
+	 * @see WizardPage#createControl(Composite)
+	 */
+	public void createControl(Composite parent) {
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridLayout gl = new GridLayout();
+		gl.numColumns = 1;
+		composite.setLayout(gl);
+		mTable = new Table(composite, SWT.BORDER);
+		mTable.setLayoutData(new GridData(GridData.FILL_BOTH));
+		mTable.setHeaderVisible(true);
+		mTable.setLinesVisible(true);
+		TableLayout layout = new TableLayout();
+		mTable.setLayout(layout);
+		layout.addColumnData(new ColumnPixelData(163));
+		layout.addColumnData(new ColumnPixelData(245));
+		TableColumn keyCol = new TableColumn(mTable, SWT.NONE);
+		keyCol.setText(mPropertyCol);
+		TableColumn valueCol = new TableColumn(mTable, SWT.NONE);
+		valueCol.setText(mValueCol);
+		setControl(composite);
+		setPageComplete(true);
+	}
+
+	/**
+	 * @see WizardPage#setVisible(boolean)
+	 */
+	public void setVisible(boolean value) {
+		super.setVisible(value);
+		if (value == true) {
+			loadSummaryData();
+		}
+	}
+
+	/**
+	 * Sets the title for the 1st (property) column.
+	 * 
+	 * @param title
+	 */
+	public void setPropertyColTitle(String title) {
+		mPropertyCol = title;
+
+		if (mTable != null && mTable.getColumnCount() >= 2) {
+			mTable.getColumn(0).setText(mPropertyCol);
+		}
+	}
+
+	/**
+	 * Sets the title for the 2nd (value) column.
+	 * 
+	 * @param title
+	 */
+	public void setValueColTitle(String title) {
+		mValueCol = title;
+
+		if (mTable != null && mTable.getColumnCount() >= 2) {
+			mTable.getColumn(1).setText(mValueCol);
+		}
+	}
+
+	/**
+	 * Sets summary page data source.
+	 * 
+	 * @param source Data source.
+	 */
+	public void setSummaryDataSource(ISummaryDataSource s) {
+		mSource = s;
+	}
+
+	/**
+	 * @see WizardPage#canFlipToNextPage()
+	 */
+	public boolean canFlipToNextPage() {
+		return false;
+	}
+
+	/**
+	 * Populates the table with summary information.
+	 */
+	public void loadSummaryData() {
+		if (mSource == null) {
+			return;
+		}
+		else {
+			Object[] data = mSource.getSummaryData().toArray();
+			mTable.removeAll();
+			for (int i = 0; i < data.length; i++) {
+				TableItem item = new TableItem(mTable, SWT.NONE);
+				item.setText((String[]) data[i]);
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/WizardCategoryProvider.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/WizardCategoryProvider.java
new file mode 100644
index 0000000..1edea3a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/WizardCategoryProvider.java
@@ -0,0 +1,154 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.wizards;
+
+import java.net.URL;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileManager;
+import org.eclipse.datatools.connectivity.ui.wizards.IWizardCategoryProvider;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @author shongxum
+ */
+public class WizardCategoryProvider implements IWizardCategoryProvider {
+
+	public static final String ATTR_ID = "id"; //$NON-NLS-1$
+
+	public static final String ATTR_NAME = "name"; //$NON-NLS-1$
+
+	public static final String ATTR_ICON = "icon"; //$NON-NLS-1$
+
+	public static final String ATTR_DESC = "description"; //$NON-NLS-1$
+
+	public static final String ATTR_PARENT = "parentCategory"; //$NON-NLS-1$
+
+	public static final String ATTR_WIZARD_TITLE = "wizardTitle"; //$NON-NLS-1$
+
+	public static final String ATTR_WIZARD_DESC = "wizardDescription"; //$NON-NLS-1$
+
+	private String mId;
+
+	private String mName;
+
+	private ImageDescriptor mIcon;
+
+	private Image mCachedIcon;
+
+	private String mDescription;
+
+	private String mParentCategory;
+
+	private String mWizardTitle;
+
+	private String mWizardDescription;
+
+	private IConfigurationElement mElement;
+
+	public WizardCategoryProvider(IConfigurationElement element) {
+		super();
+		init(element);
+	}
+
+	private void init(IConfigurationElement element) {
+		Assert.isTrue(ConnectionProfileManager.EXT_ELEM_WIZARD_CATEGORY
+				.equals(element.getName()));
+
+		mElement = element;
+
+		mId = element.getAttribute(ATTR_ID);
+		mName = element.getAttribute(ATTR_NAME);
+		mDescription = element.getAttribute(ATTR_DESC);
+		mParentCategory = element.getAttribute(ATTR_PARENT);
+		if (mParentCategory == null)
+			mParentCategory = ""; //$NON-NLS-1$
+		mWizardTitle = element.getAttribute(ATTR_WIZARD_TITLE);
+		mWizardDescription = element.getAttribute(ATTR_WIZARD_DESC);
+		processIconAttr();
+	}
+
+	private void processIconAttr() {
+		String iconAttr = mElement.getAttribute(ATTR_ICON);
+		if (iconAttr != null && iconAttr.trim().length() > 0) {
+			URL url = Platform.getBundle(
+					mElement.getContributor().getName()).getEntry(
+					iconAttr);
+			mIcon = ImageDescriptor.createFromURL(url);
+		}
+		else {
+			mIcon = ImageDescriptor.getMissingImageDescriptor();
+		}
+	}
+
+	/**
+	 * @return Returns the icon.
+	 */
+	public ImageDescriptor getIcon() {
+		return mIcon;
+	}
+
+	public Image getCachedIcon() {
+		if (mCachedIcon == null) {
+			mCachedIcon = mIcon.createImage();
+		}
+		return mCachedIcon;
+	}
+
+	/**
+	 * @return Returns the id.
+	 */
+	public String getId() {
+		return mId;
+	}
+
+	/**
+	 * @return Returns the name.
+	 */
+	public String getName() {
+		return mName;
+	}
+
+	/**
+	 * @return Returns the description.
+	 */
+	public String getDescription() {
+		return mDescription;
+	}
+
+	/**
+	 * @return Returns the parent category.
+	 */
+	public String getCategory() {
+		return mParentCategory;
+	}
+
+	/**
+	 * Note: do not cache IWizard!!!
+	 * 
+	 * @return Returns the wizard.
+	 */
+	public IWizard getWizard() {
+		return null;
+	}
+
+	public String getWizardDescription() {
+		return mWizardDescription;
+	}
+
+	public String getWizardTitle() {
+		return mWizardTitle;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/WizardSelectionPage.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/WizardSelectionPage.java
new file mode 100644
index 0000000..910213d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/internal/ui/wizards/WizardSelectionPage.java
@@ -0,0 +1,146 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.wizards;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.jface.wizard.IWizardNode;
+import org.eclipse.jface.wizard.IWizardPage;
+
+/**
+ * An abstract implementation of a wizard page that manages a
+ * set of embedded wizards.
+ * <p>
+ * A wizard selection page should present a list of wizard nodes 
+ * corresponding to other wizards. When the end user selects one of
+ * them from the list, the first page of the selected wizard becomes
+ * the next page. The only new methods introduced by this class are 
+ * <code>getSelectedNode</code> and <code>setSelectedNode</code>. 
+ * Otherwise, the subclass contract is the same as <code>WizardPage</code>.
+ * </p>
+ * Added extended behavior to initialize wizard by shongxum
+ */
+public abstract class WizardSelectionPage extends BaseWizardPage {
+
+	/**
+	 * The selected node; <code>null</code> if none.
+	 */
+	private IWizardNode selectedNode = null;
+	
+	/**
+	 * List of wizard nodes that have cropped up in the past
+	 * (element type: <code>IWizardNode</code>).
+	 */
+	private List selectedWizardNodes = new ArrayList();
+/**
+ * Creates a new wizard selection page with the given name, and
+ * with no title or image.
+ *
+ * @param pageName the name of the page
+ */
+protected WizardSelectionPage(String pageName) {
+	super(pageName);
+	// Cannot finish from this page
+	setPageComplete(false);
+}
+/**
+ * Adds the given wizard node to the list of selected nodes if
+ * it is not already in the list.
+ *
+ * @param node the wizard node, or <code>null</code>
+ */
+private void addSelectedNode(IWizardNode node) {
+	if (node == null)
+		return;
+
+	if (selectedWizardNodes.contains(node))
+		return;
+	
+	selectedWizardNodes.add(node);
+}
+/**
+ * The <code>WizardSelectionPage</code> implementation of 
+ * this <code>IWizardPage</code> method returns <code>true</code>
+ * if there is a selected node.
+ */
+public boolean canFlipToNextPage() {
+	return selectedNode != null;
+}
+/**	
+ * The <code>WizardSelectionPage</code> implementation of an <code>IDialogPage</code>
+ * method disposes of all nested wizards. Subclasses may extend.
+ */
+public void dispose() {
+	super.dispose();
+	// notify nested wizards
+	for (int i = 0; i < selectedWizardNodes.size(); i++) {
+		((IWizardNode) selectedWizardNodes.get(i)).dispose();
+	}
+}
+/**
+ * The <code>WizardSelectionPage</code> implementation of 
+ * this <code>IWizardPage</code> method returns the first page 
+ * of the currently selected wizard if there is one.
+ */
+public IWizardPage getNextPage() {
+	if (selectedNode == null)
+		return null;
+
+	boolean isCreated = selectedNode.isContentCreated();
+		
+	IWizard wizard = selectedNode.getWizard();
+
+	if (wizard == null) {
+		setSelectedNode(null);	
+		return null;
+	}	
+
+	if (!isCreated) {
+		// Extended behavior by shongxum
+		initWizard(wizard);
+		// Allow the wizard to create its pages
+		wizard.addPages();
+	}
+		
+	return wizard.getStartingPage();
+}
+
+/**
+ * Added by shongxum
+ * @param wizard
+ */
+protected void initWizard(IWizard wizard) {
+    // Empty
+}
+
+
+/**
+ * Returns the currently selected wizard node within this page.
+ * 
+ * @return the wizard node, or <code>null</code> if no node is selected
+ */
+public IWizardNode getSelectedNode() {
+	return selectedNode;
+}
+/**
+ * Sets or clears the currently selected wizard node within this page. 
+ * 
+ * @param node the wizard node, or <code>null</code> to clear
+ */
+protected void setSelectedNode(IWizardNode node) {
+	addSelectedNode(node);
+	selectedNode = node;
+	if (isCurrentPage()) 
+		getContainer().updateButtons();
+}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/CommonContentProviderBase.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/CommonContentProviderBase.java
new file mode 100644
index 0000000..b917d70
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/CommonContentProviderBase.java
@@ -0,0 +1,323 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005, 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ * 			IBM Corporation - defect fix for 231005
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IProfileListener;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.navigator.CommonViewer;
+import org.eclipse.ui.navigator.ICommonContentExtensionSite;
+import org.eclipse.ui.navigator.ICommonContentProvider;
+import org.eclipse.ui.navigator.IExtensionStateModel;
+import org.eclipse.ui.navigator.INavigatorContentService;
+
+/**
+ * Base content provider class that can be extended for adding content to a
+ * connection profile using a navigatorContent extension.
+ * 
+ * Manages the associations between IConnectionProfile, IContentExtension and
+ * the connection object. Content from the connection object on down is provided
+ * by the delegate content provider.
+ * 
+ * This class allows clients to plug-in existing content providers for a
+ * connection type.
+ * 
+ * @author rcernich
+ * 
+ * Created on Apr 20, 2004
+ */
+public abstract class CommonContentProviderBase implements
+		ICommonContentProvider {
+
+	private Map mProfileToExtensionNode = new HashMap();
+	private Map mConnectionToExtensionNode = new HashMap();
+	private ITreeContentProvider mDelegate;
+	private IExtensionStateModel mStateModel;
+	private Viewer mViewer;
+	private IProfileListener mProfileListener = new IProfileListener() {
+
+		public void profileAdded(IConnectionProfile profile) {
+			handleProfileAdded(profile);
+		}
+
+		public void profileChanged(IConnectionProfile profile) {
+			handleProfileChanged(profile);
+		}
+
+		public void profileDeleted(IConnectionProfile profile) {
+			handleProfileDeleted(profile);
+		}
+		
+	};
+
+	/**
+	 * The delegate content provider should be minimally capable of handling
+	 * the connection object wrapped by the content extension.
+	 * 
+	 * @param contentProvider the delegate content provider.
+	 */
+	protected CommonContentProviderBase(ITreeContentProvider contentProvider) {
+		super();
+		mDelegate = contentProvider;
+	}
+
+	/**
+	 * Create a content extension object for the specified profile
+	 * 
+	 * @param profile
+	 * 
+	 * @return a new content extension object
+	 */
+	protected abstract IContentExtension createContentExtension(
+			IConnectionProfile profile);
+
+	public void dispose() {
+		mDelegate.dispose();
+		ProfileManager.getInstance().removeProfileListener(mProfileListener);
+		for (Iterator it = mProfileToExtensionNode.values().iterator(); it
+				.hasNext();) {
+			((IContentExtension) it.next()).dispose();
+		}
+		mProfileToExtensionNode.clear();
+
+		mStateModel = null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.ICommonContentProvider#init(org.eclipse.ui.navigator.IExtensionStateModel, org.eclipse.ui.IMemento)
+	 */
+	public void init(IExtensionStateModel aStateModel, IMemento aMemento) {
+		mStateModel = aStateModel;
+	}
+
+	public void init(ICommonContentExtensionSite aConfig) {
+		mStateModel = aConfig.getExtensionStateModel();
+		ProfileManager.getInstance().addProfileListener(mProfileListener);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.IMementoAware#restoreState(org.eclipse.ui.IMemento)
+	 */
+	public void restoreState(IMemento aMemento) {
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.IMementoAware#saveState(org.eclipse.ui.IMemento)
+	 */
+	public void saveState(IMemento aMemento) {
+	}
+
+	/**
+	 * @return the delegate contente provider
+	 */
+	protected ITreeContentProvider getDelegate() {
+		return mDelegate;
+	}
+
+	/**
+	 * @return the state model
+	 */
+	protected IExtensionStateModel getStateModel() {
+		return mStateModel;
+	}
+
+	/**
+	 * @param profile
+	 * 
+	 * @return the content extension for the specified profile.  A content
+	 * extension will be created if one does not already exist.
+	 */
+	public IContentExtension getContentExtension(IConnectionProfile profile) {
+		//make sure we create contentExtension only after profile's connected.
+		if(profile.getConnectionState() == IConnectionProfile.DISCONNECTED_STATE) {
+			return null;
+		}
+		IContentExtension extension = (IContentExtension) mProfileToExtensionNode
+				.get(profile);
+		if (extension == null) {
+			extension = createContentExtension(profile);
+			mProfileToExtensionNode.put(profile, extension);
+			if (profile.getConnectionState() == IConnectionProfile.CONNECTED_STATE) {
+				try {
+					extension.openConnection();
+				} catch (ExceptionInInitializerError e) {
+					ConnectivityUIPlugin.getDefault().log(e);
+					extension.closeConnection();
+				} catch (Throwable e2) {
+					ConnectivityUIPlugin.getDefault().log(e2);
+					extension.closeConnection();
+				}
+			}
+		}
+		return extension;
+	}
+
+	/*
+	 * Returns the children of the specified parentElement.
+	 * 
+	 * If the parent element is a IConnectionProfile, a IContentExtension is
+	 * returned if the IContentExtension.isVisible() or if more than one
+	 * extension exists, otherwise it returns
+	 * getChildren(IContentExtension.getConnection()).
+	 * 
+	 * If the parent is a IContentExtension,
+	 * getChildren(IContentExtension.getConnection()) is returned.
+	 * 
+	 * If the parent is anything else, mDelegate.getChildren() is invoked.
+	 */
+	public Object[] getChildren(Object parentElement) {
+		Object[] children = null;
+		if (parentElement instanceof IConnectionProfile) {
+			IContentExtension extension = getContentExtension((IConnectionProfile) parentElement);
+			if (extension == null || extension.getConnection() == null
+					|| extension.getConnection().getConnectException() != null) {
+				children = new Object[0];
+			}
+			else {
+				children = extensionVisible(extension) ? new Object[] { extension}
+						: getChildren(extension);
+			}
+		}
+		else if (parentElement instanceof IContentExtension) {
+			IConnection ic = ((IContentExtension) parentElement)
+					.getConnection();
+			Object connection = ic.getRawConnection();
+			children = mDelegate.getChildren(connection);
+			mConnectionToExtensionNode.put(connection, parentElement);
+		}
+		else {
+			children = mDelegate.getChildren(parentElement);
+		}
+		return children;
+	}
+
+	/*
+	 * If the elemet is an IContentExtension,
+	 * IContentExtension.getConnectionProfile() is returned.
+	 * 
+	 * If the element is a "connection" object, the IContentExtension associated
+	 * with that connection is returned if the content extension is visible,
+	 * otherwise the connection profile is returned.
+	 * 
+	 * For all other objects, mDelegate.getParent() is returned.
+	 */
+	public Object getParent(Object element) {
+		Object parent = null;
+		if (element instanceof IConnectionProfile) {
+			// BEGIN WORKAROUND - Navigator framework bug (for some reason,
+			// we're responsible for this type).
+			// parent = getNavigatorExtensionSite()
+			// .getContentExtension(
+			// "org.eclipse.datatools.connectivity.ui.views.dataSourceExplorer")
+			// .getContentProvider().getParent(element);
+			// END WORKAROUND - Navigator framework bug.
+		}
+		else if (element instanceof IContentExtension) {
+			parent = ((IContentExtension) element).getConnectionProfile();
+		}
+		else {
+			parent = mDelegate.getParent(element);
+			// check to see if the returned parent is the connection
+			if (mConnectionToExtensionNode.containsKey(parent)) {
+				parent = mConnectionToExtensionNode.get(parent);
+				if (parent != null
+						&& !extensionVisible((IContentExtension) parent)) {
+					parent = getParent(parent);
+				}
+			}
+		}
+		return parent;
+	}
+
+	public boolean hasChildren(Object element) {
+		if (element instanceof IConnectionProfile) {
+			IContentExtension extension = getContentExtension((IConnectionProfile) element);
+			if (extension == null || extension.getConnection() == null
+					|| extension.getConnection().getConnectException() != null) {
+				return false;
+			}
+			else {
+				return extensionVisible(extension) ? true
+						: hasChildren(extension);
+			}
+		}
+		if (element instanceof IContentExtension) {
+			IConnection ic = ((IContentExtension) element).getConnection();
+			return mDelegate.hasChildren(ic.getRawConnection());
+		}
+		else {
+			return mDelegate.hasChildren(element);
+		}
+	}
+
+	public Object[] getElements(Object inputElement) {
+		return getChildren(inputElement);
+	}
+
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		mDelegate.inputChanged(viewer, oldInput, newInput);
+		mViewer = viewer;
+	}
+
+	public boolean equals(Object obj) {
+		if (obj instanceof CommonContentProviderBase) {
+			return ((CommonContentProviderBase) obj).mDelegate
+					.equals(mDelegate);
+		}
+		return false;
+	}
+
+	public int hashCode() {
+		return mDelegate.hashCode();
+	}
+
+	private boolean extensionVisible(IContentExtension extension) {
+		if (!(mViewer instanceof CommonViewer)) {
+			// Short circuit if the viewer is not a CommonViewer
+			return true;
+		}
+		CommonViewer viewer = (CommonViewer) mViewer;
+		INavigatorContentService contentService = viewer
+				.getNavigatorContentService();
+		Set contentExtensions = contentService
+				.findRootContentExtensions(extension.getConnectionProfile());
+
+		return extension.isVisible();
+	}
+	
+	protected void handleProfileAdded(IConnectionProfile profile) {
+	}
+	
+	protected void handleProfileChanged(IConnectionProfile profile) {
+	}
+	
+	protected void handleProfileDeleted(IConnectionProfile profile) {
+		if (mProfileToExtensionNode.containsKey(profile)) {
+			IContentExtension contentExtension = (IContentExtension) mProfileToExtensionNode
+					.remove(profile);
+			if (contentExtension != null) {
+				contentExtension.dispose();
+			}
+		}
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/CommonLabelProviderBase.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/CommonLabelProviderBase.java
new file mode 100644
index 0000000..1223688
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/CommonLabelProviderBase.java
@@ -0,0 +1,152 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui;
+
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IServerVersionProvider;
+import org.eclipse.datatools.connectivity.Version;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.navigator.ICommonContentExtensionSite;
+import org.eclipse.ui.navigator.ICommonLabelProvider;
+import org.eclipse.ui.navigator.IExtensionStateModel;
+
+import com.ibm.icu.text.MessageFormat;
+
+/**
+ * Base label provider class that can be extended for adding content to a
+ * connection profile using a navigatorContent extension.
+ * 
+ * Manages the labels for IContentExtension. Labels from the connection object
+ * on down is provided by the delegate label provider.
+ * 
+ * This class allows clients to plug-in existing label providers for a
+ * connection type.
+ * 
+ */
+public class CommonLabelProviderBase implements ICommonLabelProvider {
+
+	private IExtensionStateModel mStateModel;
+	private ITreeContentProvider mContentProvider;
+	private ILabelProvider mDelegate;
+
+	public CommonLabelProviderBase(ILabelProvider delegate) {
+		super();
+		mDelegate = delegate;
+	}
+
+	public void init(IExtensionStateModel aStateModel,
+			ITreeContentProvider aContentProvider) {
+		mStateModel = aStateModel;
+		mContentProvider = aContentProvider;
+	}
+
+	public String getDescription(Object anElement) {
+		return getText(anElement);
+	}
+
+	public void restoreState(IMemento aMemento) {
+	}
+
+	public void saveState(IMemento aMemento) {
+	}
+
+	public Image getImage(Object element) {
+		if (element instanceof IContentExtension) {
+			return ((IContentExtension) element).getImage();
+		}
+		else {
+			return mDelegate.getImage(element);
+		}
+	}
+
+	public String getText(Object element) {
+		if (element instanceof IContentExtension) {
+			IContentExtension ice = (IContentExtension) element;
+			IConnection conn = ice.getConnection();
+			StringBuffer sb = new StringBuffer(ice.getLabel());
+
+			if (conn instanceof IServerVersionProvider) {
+				IServerVersionProvider isvp = (IServerVersionProvider) conn;
+				Version techVersion = isvp.getTechnologyVersion();
+				String techName = isvp.getTechnologyName();
+				if (techName != null && techName.length() > 0) {
+					String versionStr = MessageFormat.format(
+							ConnectivityUIPlugin.getDefault().getResourceString("CommonLabelProviderBase.label.version"),  //$NON-NLS-1$
+							new String[] {sb.toString(),
+								techName,
+								techVersion.toString()});
+					sb = new StringBuffer(versionStr);
+//					sb.append(" ("); //$NON-NLS-1$
+//					sb.append(techName).append(' ');
+//					sb.append(ConnectivityUIPlugin.getDefault().getResourceString("CommonLabelProviderBase.label.version"));//$NON-NLS-1$
+//					sb.append(' ' + techVersion.toString()).append(')');
+				}
+			}
+			return sb.toString();
+		}
+		else {
+			return mDelegate.getText(element);
+		}
+	}
+
+	public void addListener(ILabelProviderListener listener) {
+		mDelegate.addListener(listener);
+	}
+
+	public boolean isLabelProperty(Object element, String property) {
+		return mDelegate.isLabelProperty(element, property);
+	}
+
+	public void removeListener(ILabelProviderListener listener) {
+		mDelegate.removeListener(listener);
+	}
+
+	public void dispose() {
+		mDelegate.dispose();
+
+		mStateModel = null;
+		mContentProvider = null;
+	}
+
+	protected ITreeContentProvider getContentProvider() {
+		return mContentProvider;
+	}
+
+	protected IExtensionStateModel getStateModel() {
+		return mStateModel;
+	}
+
+	protected ILabelProvider getDelegate() {
+		return mDelegate;
+	}
+
+	public boolean equals(Object obj) {
+		if (obj instanceof CommonLabelProviderBase) {
+			return super.equals(obj);
+		}
+		return false;
+	}
+
+	public int hashCode() {
+		return mDelegate.hashCode();
+	}
+
+	public void init(ICommonContentExtensionSite aConfig) {
+		// TODO Auto-generated method stub
+		
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/ContentExtensionBase.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/ContentExtensionBase.java
new file mode 100644
index 0000000..42486c1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/ContentExtensionBase.java
@@ -0,0 +1,156 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.PlatformObject;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.ConnectAdapter;
+import org.eclipse.datatools.connectivity.ConnectEvent;
+import org.eclipse.datatools.connectivity.IConnectListener;
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.ui.IActionFilter;
+
+/**
+ * Base implementation for IContentExtension. Registers a connect listener with
+ * the profile to manage the life cycle of the connection wrapped by this
+ * object.
+ * 
+ * @author shongxum
+ */
+public abstract class ContentExtensionBase extends PlatformObject implements
+		IContentExtension {
+
+	private IConnectionProfile mConnectionProfile;
+
+	private IConnectListener mProfileConnectListener = new ConnectAdapter() {
+
+		public void openConnection(ConnectEvent event) throws CoreException {
+			ContentExtensionBase.this.openConnection();
+			IConnection connection = getConnection();
+			if (connection == null) {
+				// RJC: What to do here?
+			}
+			else {
+				Throwable exception = connection.getConnectException();
+				if (exception != null) {
+					ContentExtensionBase.this.closeConnection();
+					throw new CoreException(new Status(IStatus.ERROR,
+							ConnectivityUIPlugin.getDefault().getBundle()
+									.getSymbolicName(),
+							ConnectivityUIPlugin.INTERNAL_ERROR,
+							ConnectivityUIPlugin.getDefault()
+									.getResourceString(
+											"error.contentExtension", //$NON-NLS-1$
+											new String[] {
+													getLabel(),
+													getConnectionProfile()
+															.getName(),
+													exception.getMessage()}),
+							exception));
+				}
+			}
+		}
+
+		public void closeConnection(ConnectEvent event) throws CoreException {
+			ContentExtensionBase.this.closeConnection();
+		}
+	};
+
+	/**
+	 * @param contentProvider
+	 * @param labelProvider
+	 */
+	public ContentExtensionBase(IConnectionProfile profile) {
+		mConnectionProfile = profile;
+		mConnectionProfile.addConnectListener(mProfileConnectListener);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IContentExtension#getConnectionProfile()
+	 */
+	public IConnectionProfile getConnectionProfile() {
+		return mConnectionProfile;
+	}
+
+	/**
+	 * Extenders should open a connection
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IContentExtension#openConnection()
+	 */
+	public abstract void openConnection();
+
+	/**
+	 * Extenders should make sure the IConnection is closed.
+	 * 
+	 * @see org.eclipse.datatools.connectivity.ui.IContentExtension#closeConnection()
+	 */
+	public abstract void closeConnection();
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IContentExtension#isConnected()
+	 */
+	public abstract IConnection getConnection();
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IContentExtension#dispose()
+	 */
+	public void dispose() {
+		closeConnection();
+		getConnectionProfile().removeConnectListener(mProfileConnectListener);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
+	 */
+	public Object getAdapter(Class adapter) {
+		if (adapter == IActionFilter.class)
+			return new IActionFilter() {
+
+				public boolean testAttribute(Object target, String name,
+						String value) {
+					if (target == null
+							|| !(target instanceof IContentExtension)) {
+						return false;
+					}
+					if (name
+							.equals(ConnectivityUIPlugin.FILTER_PROPERTY_CONTEN_EXTENSION_STATE)) {
+						return getConnection() != null
+								&& getConnection().getConnectException() != null;
+					}
+					else {
+						return false;
+					}
+				}
+			};
+		return super.getAdapter(adapter);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IContentExtension#isVisible()
+	 */
+	public boolean isVisible() {
+		return true;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/ContentExtensionFactoryBase.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/ContentExtensionFactoryBase.java
new file mode 100644
index 0000000..5b51219
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/ContentExtensionFactoryBase.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui;
+
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+
+/**
+ * Extends ContentExtensionBase by implementing the openConnection() and
+ * closeConnection() methods using the connection factory specified to 
+ * create the connection.
+ * 
+ * @author shongxum
+ */
+public abstract class ContentExtensionFactoryBase extends ContentExtensionBase {
+
+	private IConnection mConnection = null;
+
+	private String mFactoryID;
+
+	/**
+	 * @param contentProvider
+	 * @param labelProvider
+	 */
+	public ContentExtensionFactoryBase(IConnectionProfile profile,
+										String factoryID) {
+		super(profile);
+		mFactoryID = factoryID;
+	}
+
+	/**
+	 * Cache the created IConnection in ContentExtensionFactoryBase.
+	 * 
+	 * @see org.eclipse.datatools.connectivity.ui.ContentExtensionBase#openConnection()
+	 */
+	public void openConnection() {
+		if (mConnection == null) {
+			mConnection = getConnectionProfile().createConnection(mFactoryID);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.ContentExtensionBase#closeConnection()
+	 */
+	public void closeConnection() {
+		if (mConnection != null) {
+			try {
+				mConnection.close();
+			}
+			catch (RuntimeException e) {
+				e.printStackTrace();
+			}
+			mConnection = null;
+		}
+	}
+
+	/**
+	 * Each ContentExtensionFactoryBase manages its own connection, clients
+	 * who's calling this api in order to resuse this connection shouldn't try
+	 * to close it or modify its state.
+	 * 
+	 * @see org.eclipse.datatools.connectivity.ui.ContentExtensionBase#isConnected()
+	 */
+	public IConnection getConnection() {
+		return mConnection;
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/DataPreferencePage.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/DataPreferencePage.java
new file mode 100644
index 0000000..713d4f0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/DataPreferencePage.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.ui;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+/**
+ * @author quyon
+ */
+public class DataPreferencePage extends org.eclipse.jface.preference.PreferencePage implements IWorkbenchPreferencePage
+{
+
+    public DataPreferencePage() {
+		super();
+		noDefaultAndApplyButton();
+	}
+
+	protected Control createContents(Composite parent)
+    {
+		Composite comp = new Composite(parent, SWT.NONE);
+		GridLayout layout = new GridLayout();
+		layout.marginHeight = 0;
+		layout.marginWidth = 0;
+		comp.setLayout(layout);
+
+		Label descLabel = new Label(comp, SWT.NONE);
+		descLabel.setText(Messages.Datatooling_description);
+
+		return comp;
+    }
+
+    public void init(IWorkbench workbench)
+    {
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/DriverClassBrowsePropertyDescriptor.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/DriverClassBrowsePropertyDescriptor.java
new file mode 100644
index 0000000..cc57815
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/DriverClassBrowsePropertyDescriptor.java
@@ -0,0 +1,118 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui;
+
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.drivers.IDriverInstancePropertyDescriptor;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.drivers.DriverClassEditDialog;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.DialogCellEditor;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.views.properties.TextPropertyDescriptor;
+
+/**
+ * @author brianf
+ *
+ */
+public class DriverClassBrowsePropertyDescriptor extends TextPropertyDescriptor implements IDriverInstancePropertyDescriptor {
+
+	private static String DRIVER_CLASS_PROP_ID = "org.eclipse.datatools.connectivity.db.driverClass"; //$NON-NLS-1$
+
+	private String[] mJarList = null;
+	
+	/**
+	 * No arg constructor
+	 */
+	public DriverClassBrowsePropertyDescriptor() {
+		super(DRIVER_CLASS_PROP_ID, 
+				ConnectivityUIPlugin.getDefault().getResourceString("DriverClassBrowsePropertyDescriptor.property.label")); //$NON-NLS-1$
+	}
+	
+	/**
+	 * @param id
+	 * @param displayName
+	 * @param jarList
+	 */
+	public DriverClassBrowsePropertyDescriptor(Object id, String displayName, String[] jarList ) {
+		super(id, displayName);
+		this.mJarList = jarList;
+	}
+
+	/**
+	 * @param id
+	 * @param displayName
+	 */
+	public DriverClassBrowsePropertyDescriptor(Object id, String displayName ) {
+		super(id, displayName);
+	}
+	
+	/**
+	 * @param jarList
+	 */
+	public void setJarList( String[] jarList ) {
+		this.mJarList = jarList;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.views.properties.TextPropertyDescriptor#createPropertyEditor(org.eclipse.swt.widgets.Composite)
+	 */
+	public CellEditor createPropertyEditor(Composite parent) {
+		DialogCellEditor editor = new DriverClassDialogCellEditor(parent);
+		return editor;
+	}
+	
+	/**
+	 * @author brianf
+	 *
+	 */
+	private class DriverClassDialogCellEditor extends DialogCellEditor {
+
+		/**
+		 * @param parent
+		 */
+		public DriverClassDialogCellEditor ( Composite parent ) {
+			super(parent);
+		}
+		
+		/* (non-Javadoc)
+		 * @see org.eclipse.jface.viewers.DialogCellEditor#openDialogBox(org.eclipse.swt.widgets.Control)
+		 */
+		protected Object openDialogBox(Control cellEditorWindow) {
+			DriverClassEditDialog listDialog = new DriverClassEditDialog(cellEditorWindow.getShell());
+			listDialog.setJarList(mJarList);
+			listDialog.setTitle(
+					ConnectivityUIPlugin.getDefault().getResourceString("DriverClassBrowsePropertyDescriptor.jardialog.title")); //$NON-NLS-1$
+			listDialog.setMessage(
+					ConnectivityUIPlugin.getDefault().getResourceString("DriverClassBrowsePropertyDescriptor.jardialog.msg")); //$NON-NLS-1$
+			listDialog.setHelpAvailable(false);
+			listDialog.setInput(getValue());
+			int returnCode = listDialog.open();
+			if (returnCode == Window.OK) {
+				Object[] results = listDialog.getResult();
+				if (results.length > 0 && results[0] instanceof String) {
+					return results[0];
+				}
+			}
+			return null;
+		}
+		
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.drivers.IDriverInstancePropertyDescriptor#setDriverInstance(org.eclipse.datatools.connectivity.drivers.DriverInstance)
+	 */
+	public void setDriverInstance(DriverInstance instance) {
+		this.mJarList = instance.getJarListAsArray();
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/IAddConnectListener.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/IAddConnectListener.java
new file mode 100644
index 0000000..ddf585d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/IAddConnectListener.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.ui;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+
+
+
+public abstract interface IAddConnectListener {
+	
+	public abstract void addConnectListener(IConnectionProfile profile);
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/ICategoryActionFilter.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/ICategoryActionFilter.java
new file mode 100644
index 0000000..bce2001
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/ICategoryActionFilter.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    brianf - initial API and implementation
+ *******************************************************************************/ 
+package org.eclipse.datatools.connectivity.ui;
+
+import org.eclipse.ui.IActionFilter;
+
+
+/**
+ * Constants used when evaluating category state through
+ * IActionFilter or IPropertyTester
+ * 
+ * TODO: remove duplicate entries.
+ */
+public interface ICategoryActionFilter extends IActionFilter {
+	
+	/**
+	 * Used to filter profiles within a specific category
+	 */
+	public static final String CATEGORY_PROPERTY_CATEGORY_ID = "org.eclipse.datatools.connectivity.category.property.categoryID"; //$NON-NLS-1$
+	public static final String CATEGORY_ID = "categoryID"; //$NON-NLS-1$
+
+	public static final String CATEGORY_PROPERTY_REPOSITORY_IS_READ_ONLY = "org.eclipse.datatools.connectivity.category.property.repositoryIsReadOnly";//$NON-NLS-1$
+	public static final String REPOSITORY_IS_READ_ONLY = "repositoryIsReadOnly";//$NON-NLS-1$
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/IConnectionProfileActionFilter.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/IConnectionProfileActionFilter.java
new file mode 100644
index 0000000..cba210d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/IConnectionProfileActionFilter.java
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * Copyright (c) 2005-2008 Sybase, Inc.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    rcernich - initial API and implementation
+ *    brianf - updated to add read only repository filter
+ *******************************************************************************/ 
+package org.eclipse.datatools.connectivity.ui;
+
+import org.eclipse.ui.IActionFilter;
+
+
+/**
+ * Constants used when evaluating connection profile state through
+ * IActionFilter or IPropertyTester
+ * 
+ * TODO: remove duplicate entries.
+ */
+public interface IConnectionProfileActionFilter extends IActionFilter {
+	
+	/**
+	 * Used to filter profiles with a specific connection factory
+	 */
+	public static final String PROFILE_PROPERTY_FACTORY_ID = "org.eclipse.datatools.connectivity.profile.property.factoryID"; //$NON-NLS-1$
+	public static final String FACTORY_ID = "factoryID"; //$NON-NLS-1$
+
+	/**
+	 * Used to filter profiles that are connected (or not)
+	 */
+	public static final String PROFILE_PROPERTY_IS_CONNECTED = "org.eclipse.datatools.connectivity.profile.property.isConnected"; //$NON-NLS-1$
+	public static final String IS_CONNECTED = "isConnected"; //$NON-NLS-1$
+
+	/**
+	 * 
+	 */
+	public static final String PROFILE_PROPERTY_MAINTAIN_CONNECTION = "org.eclipse.datatools.connectivity.profile.property.maintainConnection"; //$NON-NLS-1$
+	public static final String MAINTAIN_CONNECTION = "maintainConnection"; //$NON-NLS-1$
+
+	/**
+	 * Used to filter profiles with a ping connection factory
+	 */
+	public static final String PROFILE_PROPERTY_SUPPORTS_PING = "org.eclipse.datatools.connectivity.profile.property.supportsPing"; //$NON-NLS-1$
+	public static final String SUPPORTS_PING = "supportsPing"; //$NON-NLS-1$
+
+	/**
+	 * Used to filter profiles that have extended properties defined
+	 */
+	public static final String PROFILE_PROPERTY_HAS_EXTENDED_PROPERTIES = "org.eclipse.datatools.connectivity.profile.property.hasExtendedProperties"; //$NON-NLS-1$
+	public static final String HAS_EXTENDED_PROPERTIES = "hasExtendedProperties"; //$NON-NLS-1$
+
+	/**
+	 * Used to filter a specific type of profile
+	 */
+	public static final String PROFILE_PROPERTY_PROFILE_TYPE_ID = "org.eclipse.datatools.profile.property.id"; //$NON-NLS-1$
+	public static final String TYPE_ID = "id"; //$NON-NLS-1$
+
+	/**
+	 * Used to filter profiles with a specific property extension
+	 */
+	public static final String PROFILE_PROPERTY_PROPERTY_EXTENSION_ID = "org.eclipse.datatools.connectivity.profile.property.extensionID"; //$NON-NLS-1$
+	public static final String EXTENSION_ID = "extensionID"; //$NON-NLS-1$
+
+	/**
+	 * Used to filter profiles within a specific category
+	 */
+	public static final String PROFILE_PROPERTY_CATEGORY_ID = "org.eclipse.datatools.connectivity.profile.property.categoryID"; //$NON-NLS-1$
+	public static final String CATEGORY_ID = "categoryID"; //$NON-NLS-1$
+
+	/**
+	 * Used to filter profiles displayed within a specific view
+	 */
+	public static final String PROFILE_PROPERTY_VIEW_ID = "org.eclipse.datatools.connectivity.profile.property.containingViewID"; //$NON-NLS-1$
+	public static final String VIEW_ID = "containingViewID"; //$NON-NLS-1$
+
+	/**
+	 * Used to filter profiles with a specific connection state (DISCONNECTED,
+	 * CONNECTED, WORKING_OFFLINE)
+	 */
+	public static final String PROFILE_PROPERTY_CONNECTION_STATE = "org.eclipse.datatools.connectivity.profile.property.connectionState"; //$NON-NLS-1$
+	public static final String CONNECTION_STATE = "connectionState"; //$NON-NLS-1$
+
+	public static final String PROFILE_PROPERTY_DB_VENDOR = "org.eclipse.datatools.connectivity.profile.property.dbVendor";	//$NON-NLS-1$
+	public static final String DB_VENDOR = "dbVendor";	//$NON-NLS-1$
+
+	public static final String PROFILE_PROPERTY_DB_VERSION = "org.eclipse.datatools.connectivity.profile.property.dbVersion";	//$NON-NLS-1$
+	public static final String DB_VERSION = "dbVersion";	//$NON-NLS-1$
+	
+	public static final String PROFILE_PROPERTY_REPOSITORY_IS_READ_ONLY = "org.eclipse.datatools.connectivity.profile.property.repositoryIsReadOnly";//$NON-NLS-1$
+	public static final String REPOSITORY_IS_READ_ONLY = "repositoryIsReadOnly";//$NON-NLS-1$
+
+	public static final String PROFILE_PROPERTY_CAN_WORK_OFFLINE = "org.eclipse.datatools.connectivity.profile.property.canWorkOffline";//$NON-NLS-1$
+	public static final String CAN_WORK_OFFLINE = "canWorkOffline";//$NON-NLS-1$
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/IContentExtension.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/IContentExtension.java
new file mode 100644
index 0000000..b998350
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/IContentExtension.java
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich, shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui;
+
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * This interface is used by the CommonContentProviderBase for managing user
+ * extensions to connection profiles through navigatorContent extensions.
+ * 
+ * @author rcernich, shongxum
+ * 
+ * Created on Jan 15, 2004
+ */
+public interface IContentExtension {
+
+	/**
+	 * @return the connection profile extended by this object.
+	 */
+	IConnectionProfile getConnectionProfile();
+
+	/**
+	 * When invoked, this object should open a connection to the referenced
+	 * connection profile and return the root elements to be displayed under
+	 * this elements node in the tree. If the connection is already open, the
+	 * existing nodes should be returned.
+	 * 
+	 * @return the root nodes to display under the connection profile
+	 */
+	void openConnection();
+
+	/**
+	 * This method should close any active connection referenced by this object.
+	 */
+	void closeConnection();
+
+	/**
+	 * @return the connection used by this extension.
+	 */
+	IConnection getConnection();
+
+	/**
+	 * This method should dispose of any resources allocated by this object,
+	 * including closing open connections to the referenced connection profile.
+	 */
+	void dispose();
+
+	/**
+	 * @return the label to be displayed for this extension node.
+	 */
+	String getLabel();
+
+	/**
+	 * @return the image to be displayed for this extension node.
+	 */
+	Image getImage();
+
+	/**
+	 * @return true if this content extension node should be visible
+	 */
+	boolean isVisible();
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/IWorkbenchWindowPerspectiveActionFilter.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/IWorkbenchWindowPerspectiveActionFilter.java
new file mode 100644
index 0000000..06e563f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/IWorkbenchWindowPerspectiveActionFilter.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    brianf - initial API and implementation
+ *******************************************************************************/ 
+package org.eclipse.datatools.connectivity.ui;
+
+import org.eclipse.ui.IActionFilter;
+
+
+/**
+ * Constants used when evaluating perspective state through
+ * IActionFilter or IPropertyTester
+ * 
+ * TODO: remove duplicate entries.
+ * TODO: When we don't have to support 3.3, we can remove this class.
+ * See the implementation of the WorkbenchWindowPerspectiveActionFilter
+ * for details.
+ */
+public interface IWorkbenchWindowPerspectiveActionFilter extends IActionFilter {
+	
+	/**
+	 * Used to filter views within a specific perspective
+	 */
+	public static final String WORKBENCH_WINDOW_PERSPECTIVE_PROPERTY_PERSPECTIVE_ID = "org.eclipse.datatools.connectivity.workbench.window.perspective.property.perspectiveID"; //$NON-NLS-1$
+	public static final String PERSPECTIVE_ID = "perspectiveID"; //$NON-NLS-1$
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/ManagedContentExtensionBase.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/ManagedContentExtensionBase.java
new file mode 100644
index 0000000..d729009
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/ManagedContentExtensionBase.java
@@ -0,0 +1,84 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui;
+
+import org.eclipse.core.runtime.PlatformObject;
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IManagedConnection;
+
+/**
+ * Base implementation for IContentExtension.  Connection life cycle management
+ * is delegated to the IConnectionProfile.getManagedConnection().
+ * 
+ * @author rcernich
+ * 
+ * Created on Jun 20, 2005
+ */
+public abstract class ManagedContentExtensionBase extends PlatformObject
+		implements IContentExtension {
+
+	private IConnectionProfile mConnectionProfile;
+	private String mFactoryID;
+
+	/**
+	 * @param profile
+	 */
+	public ManagedContentExtensionBase(IConnectionProfile profile,
+										String factoryID) {
+		super();
+		mConnectionProfile = profile;
+		mFactoryID = factoryID;
+	}
+
+	public String getFactoryID() {
+		return mFactoryID;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IContentExtension#getConnectionProfile()
+	 */
+	public IConnectionProfile getConnectionProfile() {
+		return mConnectionProfile;
+	}
+
+	public void dispose() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IContentExtension#openConnection()
+	 */
+	public void openConnection() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IContentExtension#closeConnection()
+	 */
+	public void closeConnection() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IContentExtension#getConnection()
+	 */
+	public IConnection getConnection() {
+		IManagedConnection imc = getConnectionProfile().getManagedConnection(getFactoryID());
+		return imc == null ? null : imc.getConnection();
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/Messages.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/Messages.java
new file mode 100644
index 0000000..81abdfd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/Messages.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase on 2008-3-14
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui;
+
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * @author renj
+ */
+public final class Messages extends NLS 
+{
+
+    private static final String BUNDLE_NAME = Messages.class.getPackage().getName()+".messages";	//$NON-NLS-1$
+
+    private Messages() 
+    {
+        // Do not instantiate
+    }
+
+    public static String ConnectionProfileDetailsPage_Autoconnect_finish;
+	public static String ConnectionProfileDetailsPage_Autoconnect_startup;
+	public static String CPRepositoryContentExtension_CPExtensionName;
+	public static String CPWizardSelectionPage_default_filter_text;
+	public static String Datatooling_description;
+	public static String DriverClassEditDialog_Browse_option_button;
+	public static String DriverClassEditDialog_populate_classes_button;
+	public static String DriverClassEditDialog_Type_option_button;
+	public static String ProfileImageDescriptor_target_profile_id_not_null_msg;
+	public static String ProfileImageDescriptor_target_profile_image_not_null;
+    
+    static 
+    {
+        NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/PasswordTextPropertyDescriptor.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/PasswordTextPropertyDescriptor.java
new file mode 100644
index 0000000..a3333aa
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/PasswordTextPropertyDescriptor.java
@@ -0,0 +1,125 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui;
+
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.TextCellEditor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.views.properties.TextPropertyDescriptor;
+
+/**
+ * @author brianf
+ *
+ */
+public class PasswordTextPropertyDescriptor extends TextPropertyDescriptor {
+
+	private static String PASSWORD_PROP_ID = "org.eclipse.datatools.connectivity.db.password"; //$NON-NLS-1$
+	
+	public PasswordTextPropertyDescriptor() {
+		this(PASSWORD_PROP_ID, 
+				ConnectivityUIPlugin.getDefault().getResourceString("PasswordTextPropertyDescriptor.property.label")); //$NON-NLS-1$
+	}
+	
+	/**
+	 * @param id
+	 * @param displayName
+	 */
+	public PasswordTextPropertyDescriptor(Object id, String displayName) {
+		super(id, displayName);
+		this.setLabelProvider(new PasswordLabelProvider());
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.views.properties.TextPropertyDescriptor#createPropertyEditor(org.eclipse.swt.widgets.Composite)
+	 */
+	public CellEditor createPropertyEditor(Composite parent) {
+        CellEditor editor = new TextCellEditor(parent, SWT.PASSWORD);
+        if (getValidator() != null) {
+			editor.setValidator(getValidator());
+		}
+        return editor;
+	}
+
+	/**
+	 * @author brianf
+	 *
+	 */
+	class PasswordLabelProvider implements ILabelProvider {
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
+		 */
+		public Image getImage(Object element) {
+			return null;
+		}
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
+		 */
+		public String getText(Object element) {
+			if (element instanceof String) {
+				String value = (String) element;
+				if (value != null) {
+					String mask = ""; //$NON-NLS-1$
+					for (int i = 0; i < value.length(); i++) {
+						mask = mask + "*"; //$NON-NLS-1$
+					}
+					return mask;
+				}
+			}
+			else if (element instanceof DriverInstance) {
+				DriverInstance di = (DriverInstance) element;
+				String value = di.getNamedProperty("password"); //$NON-NLS-1$
+				if (value != null) {
+					String mask = ""; //$NON-NLS-1$
+					for (int i = 0; i < value.length(); i++) {
+						mask = mask + "*"; //$NON-NLS-1$
+					}
+					return mask;
+				}
+			}
+			return null;
+		}
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
+		 */
+		public void addListener(ILabelProviderListener listener) {
+		}
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+		 */
+		public void dispose() {
+		}
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object, java.lang.String)
+		 */
+		public boolean isLabelProperty(Object element, String property) {
+			return true;
+		}
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
+		 */
+		public void removeListener(ILabelProviderListener listener) {
+		}
+		
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/PingJob.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/PingJob.java
new file mode 100644
index 0000000..bd02814
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/PingJob.java
@@ -0,0 +1,132 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *  rcernich - initial API and implementation
+ *  Actuate Corporation - refactored to improve extensibility
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.datatools.connectivity.ConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.dialogs.ExceptionHandler;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.progress.UIJob;
+
+/**
+ * Executes a ping operation as a background job.
+ */
+public class PingJob extends Job {
+
+	private IConnectionProfile icp;
+	private Shell shell;
+
+	/**
+	 * @param exceptions
+	 * @param name
+	 */
+	public PingJob(Shell shell, IConnectionProfile profile) {
+		super(ConnectivityUIPlugin.getDefault().getResourceString(
+				"actions.ping.job")); //$NON-NLS-1$
+		setSystem(false);
+		setUser(true);
+		this.shell = shell;
+		icp = profile;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	protected IStatus run(IProgressMonitor monitor) {
+		monitor.beginTask(ConnectivityUIPlugin.getDefault().getResourceString(
+				"actions.ping.title"), //$NON-NLS-1$
+				IProgressMonitor.UNKNOWN);
+
+		IConnection con = createTestConnection( icp );
+
+		monitor.done();
+
+		new PingUIJob( shell, getTestConnectionException( con ) )
+				.schedule();
+		
+		if( con != null )
+		    con.close();
+		
+		return Status.OK_STATUS;
+	}
+
+	public static IConnection createTestConnection( IConnectionProfile icp )
+	{
+	    if( icp == null )
+	        return null;
+	    return icp.createConnection( ConnectionProfileConstants.PING_FACTORY_ID );
+	}
+	
+	public static Throwable getTestConnectionException( IConnection conn )
+	{
+	    return conn != null ? conn.getConnectException()
+                : new RuntimeException( ConnectivityUIPlugin.getDefault()
+                        .getResourceString( "actions.ping.failure" )); //$NON-NLS-1$
+	}
+	
+	public static class PingUIJob extends UIJob {
+
+		private Shell shell;
+		private Throwable exception;
+
+		/**
+		 * @param name
+		 */
+		public PingUIJob(Shell shell, Throwable exception) {
+			super(ConnectivityUIPlugin.getDefault().getResourceString(
+					"actions.ping.uijob")); //$NON-NLS-1$
+			setSystem(false);
+			this.exception = exception;
+			this.shell = shell;
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.ui.progress.UIJob#runInUIThread(org.eclipse.core.runtime.IProgressMonitor)
+		 */
+		public IStatus runInUIThread(IProgressMonitor monitor) {
+		    showTestConnectionMessage( shell, exception );
+			return Status.OK_STATUS;
+		}
+		
+	    public static void showTestConnectionMessage( Shell shell, Throwable exception )
+	    {
+	        if (exception == null) {
+	            MessageDialog.openInformation(shell,
+	                    ConnectivityUIPlugin.getDefault().getResourceString(
+	                            "dialog.title.success"), //$NON-NLS-1$
+	                    ConnectivityUIPlugin.getDefault().getResourceString(
+	                            "actions.ping.success")); //$NON-NLS-1$
+	        }
+	        else {
+	            ExceptionHandler.showException(shell, ConnectivityUIPlugin
+	                    .getDefault().getResourceString("dialog.title.error"), //$NON-NLS-1$
+	                    ConnectivityUIPlugin.getDefault().getResourceString(
+	                            "actions.ping.failure"), //$NON-NLS-1$
+	                    exception);
+	        }
+	    }
+	    
+	}
+	
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/ProfileImageRegistry.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/ProfileImageRegistry.java
new file mode 100644
index 0000000..216b629
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/ProfileImageRegistry.java
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * Copyright (c) 2006-2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui;
+
+import java.net.URL;
+
+import org.eclipse.datatools.connectivity.IConnectionProfileProvider;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.ProfileImageDescriptor;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.swt.graphics.Image;
+
+public class ProfileImageRegistry {
+
+	private static final String IMG_OBJ_SERVER_DEFAULT = "org.eclipse.datatools.connectivity.ui.server_default_obj.gif"; //$NON-NLS-1$
+
+	private static final String IMG_DESC_SERVER_DEFAULT = "icons/full/obj16/server_obj.gif"; //$NON-NLS-1$
+
+	private static ProfileImageRegistry sInstance = new ProfileImageRegistry();
+
+	private ImageRegistry mImageRegistry;
+
+	public static ProfileImageRegistry getInstance() {
+		return sInstance;
+	}
+
+	public Image getProfileImage(IConnectionProfileProvider provider) {
+		Image image = mImageRegistry.get(provider.getId());
+		if (image == null) {
+			ProfileImageDescriptor pids[] =
+				ProfileImageDescriptor.getProfileImageDescriptorsForProfileID(provider.getId());
+			if (pids != null && pids.length > 0) {
+				URL iconURL = pids[0].getIconURL();
+				if (iconURL != null) {
+					ImageDescriptor imageDesc = ImageDescriptor
+							.createFromURL(iconURL);
+					mImageRegistry.put(provider.getId(), imageDesc);
+					image = mImageRegistry.get(provider.getId());
+				}
+			}
+			else {
+				URL iconURL = provider.getIconURL();
+				if (iconURL != null) {
+					ImageDescriptor imageDesc = ImageDescriptor
+							.createFromURL(iconURL);
+					mImageRegistry.put(provider.getId(), imageDesc);
+					image = mImageRegistry.get(provider.getId());
+				}
+			}
+			if (image == null) {
+				image = mImageRegistry.get(IMG_OBJ_SERVER_DEFAULT);
+			}
+		}
+		return image;
+	}
+
+	private ProfileImageRegistry() {
+		mImageRegistry = new ImageRegistry();
+		mImageRegistry.put(IMG_OBJ_SERVER_DEFAULT, ImageDescriptor
+				.createFromURL(ConnectivityUIPlugin.getDefault().getBundle()
+						.getEntry(IMG_DESC_SERVER_DEFAULT)));
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/RefreshProfileJob.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/RefreshProfileJob.java
new file mode 100644
index 0000000..5fd9399
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/RefreshProfileJob.java
@@ -0,0 +1,147 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.IJobChangeEvent;
+import org.eclipse.core.runtime.jobs.IJobChangeListener;
+import org.eclipse.core.runtime.jobs.JobChangeAdapter;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.ProfileRule;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.ui.progress.UIJob;
+
+/**
+ * This class can be used by UI components to refresh a connection profile
+ * within a TreeViewer.  This job synchronizes with other profile jobs and
+ * ensures that refresh(profile) is invoked only once per tree viewer per connection
+ * profile.
+ * 
+ * @author rcernich
+ * 
+ * Created on May 24, 2005
+ */
+public class RefreshProfileJob extends UIJob {
+
+	private IConnectionProfile mProfile;
+
+	private TreeViewer mViewer;
+
+	private final static Map sProfileToJobsMap = new HashMap();
+
+	private static IJobChangeListener sJobListener = new JobChangeAdapter() {
+
+		public void running(IJobChangeEvent event) {
+			RefreshProfileJob job = (RefreshProfileJob) event.getJob();
+			synchronized (sProfileToJobsMap) {
+				// This job has started, so remove it from our list. This will
+				// allow new jobs to be scheduled for this profile/viewer
+				// combination.
+				List jobs = (List) sProfileToJobsMap.get(job.mProfile);
+				jobs.remove(job);
+				if (jobs.isEmpty()) {
+					sProfileToJobsMap.remove(job.mProfile);
+				}
+			}
+		}
+	};
+
+	/**
+	 * @param profile the connection profile to refresh
+	 * @param viewer the viewer containing the profile
+	 */
+	public static void scheduleRefreshProfileJob(IConnectionProfile profile,
+			TreeViewer viewer) {
+		RefreshProfileJob newJob;
+		List jobs;
+		synchronized (sProfileToJobsMap) {
+			// See if we've already scheduled a job for this profile/viewer
+			// combination.
+			if (sProfileToJobsMap.containsKey(profile)) {
+				jobs = (List) sProfileToJobsMap.get(profile);
+				for (Iterator it = jobs.iterator(); it.hasNext();) {
+					RefreshProfileJob job = (RefreshProfileJob) it.next();
+					if (job.mViewer == viewer) {
+						return;
+					}
+				}
+			}
+			else {
+				jobs = new ArrayList();
+				sProfileToJobsMap.put(profile, jobs);
+			}
+
+			// If we got here, we need to schedule a new job.
+			newJob = new RefreshProfileJob(profile, viewer);
+			jobs.add(newJob);
+		}
+		newJob.addJobChangeListener(sJobListener);
+		newJob.schedule();
+	}
+
+	/**
+	 * @param name
+	 */
+	private RefreshProfileJob(IConnectionProfile profile, TreeViewer viewer) {
+		super(ConnectivityUIPlugin.getDefault().getResourceString(
+				"actions.connect.uijob")); //$NON-NLS-1$
+		setRule(new ProfileRule(profile));
+		setSystem(false);
+		setUser(true);
+		if (!viewer.getTree().isDisposed()) {
+			setDisplay(viewer.getTree().getDisplay());
+		}
+		mProfile = profile;
+		mViewer = viewer;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.progress.UIJob#runInUIThread(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public IStatus runInUIThread(IProgressMonitor monitor) {
+		monitor.beginTask(getName(), 1);
+		if (mViewer != null && !mViewer.getTree().isDisposed()) {
+			// BZ 166522: we should be able to refresh the object,
+			// but due to a bug in the platform, we currently have
+			// to refresh the entire viewer
+			// Turns out this is only a problem when adding or
+			// removing a profile.  It needs to be documented that
+			// this class only works to refresh an existing profile,
+			// not added or removed profiles.  For those cases,
+			// the parent category should be refreshed.
+			mViewer.refresh(mProfile); 
+			mViewer.setExpandedState(mProfile, true);
+		}
+		monitor.worked(1);
+		return Status.OK_STATUS;
+	}
+
+	public boolean belongsTo(Object family) {
+		if (family instanceof IConnectionProfile) {
+			return mProfile.equals(family);
+		}
+		else if (family instanceof TreeViewer) {
+			return family == mViewer;
+		}
+		return super.belongsTo(family);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/AddProfileViewAction.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/AddProfileViewAction.java
new file mode 100644
index 0000000..2703295
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/AddProfileViewAction.java
@@ -0,0 +1,536 @@
+/*******************************************************************************
+ * Copyright (c) 2005-2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *  shongxum - initial API and implementation
+ *  Actuate Corporation - refactored to improve extensibility
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.actions;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.HandlerEvent;
+import org.eclipse.core.commands.IHandler;
+import org.eclipse.core.commands.IHandlerListener;
+import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IManagedConnection;
+import org.eclipse.datatools.connectivity.IProfileListener;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.internal.Category;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepository;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepositoryConstants;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.LocalRepositoryNode;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.CPCategoryWizardNode;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.CPWizardNode;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.CPWizardSelectionPage;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.NewCPWizard;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.NewCPWizardCategoryFilter;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.NewCategoryWizard;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.ProfileWizardProvider;
+import org.eclipse.datatools.connectivity.ui.wizards.ICPWizard;
+import org.eclipse.datatools.connectivity.ui.wizards.IWizardCategoryProvider;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * Ideally, this class should be split into two, one is for Action, the other
+ * is for View Action.
+ * 
+ * @author shongxum, brianf
+ */
+public class AddProfileViewAction extends Action 
+	implements IHandler, IViewActionDelegate {
+
+	protected String categoryID;
+	private IConnectionProfile parentProfile;
+	private int returnCode;
+	private IConnectionProfile addedProfile;
+	private Shell shell;
+	private boolean ignoreCategory = false;
+	private boolean useSelection = true;
+	
+	private static String PROP_IGNORE_CATEGORY = "org.eclipse.datatools.connectivity.ui.ignoreCategory";//$NON-NLS-1$
+	private static String PROP_USE_SELECTION = "org.eclipse.datatools.connectivity.ui.useSelection";//$NON-NLS-1$
+	
+	/**
+	 * A collection of objects listening to changes to this manager. This
+	 * collection is <code>null</code> if there are no listeners.
+	 */
+	private transient ListenerList listenerList = null;
+
+	/**
+	 * Constructor
+	 */
+	public AddProfileViewAction() {
+		super();
+		setText(ConnectivityUIPlugin.getDefault().getResourceString(
+				"ServersView.action.newCP")); //$NON-NLS-1$
+	}
+
+	/**
+	 * @param category
+	 */
+	public AddProfileViewAction(ICategory category) {
+		this(category.getId());
+	}
+	
+	/**
+	 * @param categoryID
+	 */
+	public AddProfileViewAction ( String categoryID ) {
+		this.categoryID = categoryID;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)
+	 */
+	public void init(IViewPart viewpart) {
+		shell = viewpart.getSite().getShell();
+	}
+	
+	/**
+	 * Initialize the shell for use as the parent shell of the action's dialog. 
+	 * Use this method when the action is extended to run without being associated 
+	 * with a view.
+	 * @param parentShell
+	 */
+	public void init( Shell parentShell )
+	{
+	    shell = parentShell;
+	}	
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.commands.IHandler#addHandlerListener(org.eclipse.core.commands.IHandlerListener)
+	 */
+	public final void addHandlerListener(final IHandlerListener listener) {
+		if (listenerList == null) {
+			listenerList = new ListenerList(ListenerList.IDENTITY);
+		}
+
+		listenerList.add(listener);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.commands.IHandler#dispose()
+	 */
+	public final void dispose() {
+		listenerList = null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+	 */
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		IWorkbenchPart part = HandlerUtil.getActivePart(event);
+		if (part == null && event.getApplicationContext() != null) 
+			return null;
+		else if (part instanceof IViewPart)
+			init((IViewPart)part);
+		
+	    String ignoreCategoryValue = event.getParameter(PROP_IGNORE_CATEGORY);
+	    if (ignoreCategoryValue != null && ignoreCategoryValue.trim().length() > 0) {
+	    	ignoreCategory = Boolean.valueOf(ignoreCategoryValue).booleanValue();
+	    }
+		
+	    String useSelectionValue = event.getParameter(PROP_USE_SELECTION);
+	    if (useSelectionValue != null && useSelectionValue.trim().length() > 0 ) {
+	    	useSelection = Boolean.valueOf(useSelectionValue).booleanValue();
+	    }
+
+	    if (ignoreCategory) {
+			categoryID = null;
+		}
+		else if (useSelection) {
+			ISelection selection =
+				part.getSite().getSelectionProvider().getSelection();
+			if (selection instanceof IStructuredSelection) {
+				Object sel = ((IStructuredSelection) selection).getFirstElement();
+				// update enabled state for add action on categories.
+				if (sel instanceof ICategory) {
+					setCategory((ICategory)sel);
+				}
+				else if (sel instanceof IConnectionProfile) {
+					setCategory(((IConnectionProfile)sel).getCategory());
+				}
+				else
+					categoryID = null;
+			}
+		}
+
+		IWizard wizard = getDefaultWizard(new String(), categoryID);
+
+		if (wizard == null) {
+	        ViewerFilter[] wizardSelectionFilters = getApplicableFilters( categoryID );
+			wizard = new NewCPWizard(wizardSelectionFilters,parentProfile);
+		}		
+
+		WizardDialog wizardDialog = new WizardDialog(shell, wizard);		
+		wizardDialog.setBlockOnOpen(true);
+		
+		InternalProfileListener listener = new InternalProfileListener();
+		ProfileManager.getInstance().addProfileListener(listener);
+		
+		returnCode = wizardDialog.open();
+		
+		addedProfile = listener.cachedProfile;
+		
+		ProfileManager.getInstance().removeProfileListener(listener);
+		
+		fireHandlerChanged(new HandlerEvent(this, false, false));
+
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.commands.IHandler#removeHandlerListener(org.eclipse.core.commands.IHandlerListener)
+	 */
+	public void removeHandlerListener(IHandlerListener handlerListener) {
+		if (listenerList != null) {
+			listenerList.remove(handlerListener);
+
+			if (listenerList.isEmpty()) {
+				listenerList = null;
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.action.IAction#run()
+	 */
+	public void run() {
+		
+		if (shell == null) {
+			shell = PlatformUI.getWorkbench().getDisplay().getActiveShell();
+		}
+		
+		IWizard wizard = getDefaultWizard(new String(), categoryID);
+
+		if (wizard == null) {
+	        ViewerFilter[] wizardSelectionFilters = getApplicableFilters( categoryID );
+			wizard = new NewCPWizard(wizardSelectionFilters,parentProfile);
+		}		
+
+		WizardDialog wizardDialog = new WizardDialog(shell, wizard);		
+		wizardDialog.setBlockOnOpen(true);
+		
+		InternalProfileListener listener = new InternalProfileListener();
+		ProfileManager.getInstance().addProfileListener(listener);
+		
+		returnCode = wizardDialog.open();
+		
+		addedProfile = listener.cachedProfile;
+		
+		ProfileManager.getInstance().removeProfileListener(listener);
+	}
+    
+    /**
+     * Gets all the applicable filters for the specified category id.
+     * The returned collection starts with the required category filter,
+     * followed by any additional wizard selection filters that may be provided 
+     * by an extended implementation.
+     * @param categoryId    category id
+     * @return an array of ViewerFilter instances
+     */
+	private ViewerFilter[] getApplicableFilters( String categoryId ) {
+        ArrayList filters = new ArrayList();
+
+        // adds required category filter
+        filters.add( getCategoryFilter( categoryId ) );
+        
+        // appends additional wizard selection filters, if any
+        ViewerFilter[] moreFilters = getWizardSelectionFilters();
+        if( moreFilters != null ) {
+            for( int i=0; i < moreFilters.length; i++ ) {
+                filters.add( moreFilters[i] );
+            }
+        }
+
+	    return (ViewerFilter[]) filters.toArray( new ViewerFilter[ filters.size() ] );
+	}
+	
+	/**
+	 * Gets the category filter for the specified category id.
+	 * @param categoryId
+	 * @return  a category ViewerFilter
+	 * @since DTP 1.6
+	 */
+	protected ViewerFilter getCategoryFilter( String categoryId ) {
+	    return new NewCPWizardCategoryFilter( categoryId );
+	}
+
+    /**
+     * Gets the viewer filters for filtering the display of the connection profile 
+     * wizard selection.
+     * @return an array of ViewerFilter instances
+	 * @since DTP 1.6
+     */
+    protected ViewerFilter[] getWizardSelectionFilters() {
+        // this base class provides a category filter only;
+        // subclass may override and provide additional filter(s)
+        return null;
+    }
+	
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+	 */
+	public void run(IAction action) {
+		run();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction,
+	 *      org.eclipse.jface.viewers.ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+		if (selection instanceof IStructuredSelection && action != null) {
+			Object sel = ((IStructuredSelection) selection).getFirstElement();
+			// always enable add action on local repository node.
+			if (sel instanceof LocalRepositoryNode) {
+				action.setEnabled(true);
+			}
+			// disable add action on read-only non-local repository
+			if (sel instanceof IConnectionProfile) {
+				IManagedConnection imc = ((IConnectionProfile) sel)
+						.getManagedConnection(IConnectionProfileRepositoryConstants.REPOSITORY_CONNECTION_FACTORY_ID);
+				if (imc != null && imc.isConnected()) {
+					IConnectionProfileRepository repo = (IConnectionProfileRepository) imc
+							.getConnection().getRawConnection();
+					action.setEnabled(!repo.isReadOnly());
+				}
+			// update enabled state for add action on categories.
+			} else if (sel instanceof ICategory) {
+				if (sel instanceof Category) {
+					IConnectionProfile profile = ((Category) sel)
+							.getRepositoryProfile();
+					// disable add action on categories in read-only
+					// non-local repository
+					if (profile != null) {
+						IManagedConnection imc = profile
+								.getManagedConnection(IConnectionProfileRepositoryConstants.REPOSITORY_CONNECTION_FACTORY_ID);
+						if (imc != null && imc.isConnected()) {
+							IConnectionProfileRepository repo = (IConnectionProfileRepository) imc
+									.getConnection().getRawConnection();
+							action.setEnabled(!repo.isReadOnly());
+						}
+					// enable add action on categories in local repository.
+					} else {
+						action.setEnabled(true);
+					}
+				}
+			}
+		}
+	}
+	
+	/**
+	 * @param category
+	 */
+	public void setCategory ( ICategory category ) {
+		setCategory(category == null ? null : category.getId());
+	}
+	
+	/**
+	 * @param categoryID
+	 */
+	public void setCategory ( String categoryID ) {
+		this.categoryID = categoryID;
+	}
+
+	/**
+	 * @param profile
+	 */
+	public void setParentProfile(IConnectionProfile profile) {
+		parentProfile = profile;
+	}
+	
+	/**
+	 * @return
+	 */
+	public IConnectionProfile getParentProfile() {
+		return parentProfile;
+	}
+	
+	/**
+	 * @return
+	 */
+	public int getWizardReturnCode() {
+		return this.returnCode;
+	}
+	
+	/**
+	 * @return
+	 */
+	public IConnectionProfile getAddedProfile() {
+		return this.addedProfile;
+	}
+	
+	/**
+	 * @param parentCategoryID
+	 * @param categoryID
+	 * @return
+	 */
+	private IWizard getDefaultWizard(String parentCategoryID, String categoryID) {
+		List wizardNodes = new CPWizardSelectionPage(new String())
+				.getCategoryItems(parentCategoryID);
+
+		// include category filter if categoryID is defined
+	    ViewerFilter[] wizardNodeFilters = (categoryID != null) ?
+        	                    getApplicableFilters( categoryID ) :
+        	                    getWizardSelectionFilters();
+        if ( wizardNodeFilters != null && wizardNodeFilters.length > 0 ) {
+			for (Iterator it = wizardNodes.iterator(); it.hasNext();) {
+			    Object wizardNode = it.next();
+			    for ( int i = 0; i < wizardNodeFilters.length; i++ ) {
+		            ViewerFilter filter = wizardNodeFilters[i];
+    				if (!filter.select(null, null, wizardNode)) {
+    					it.remove();
+    					break;     // done with checking on filters
+    				}
+			    }
+			}
+        }
+
+		if (wizardNodes == null || wizardNodes.size() == 0) {
+			return null;
+		}
+		if (wizardNodes.size() > 1) {
+			return null;
+		}
+
+		IWizard wizard;
+		CPWizardNode wizardNode = (CPWizardNode) wizardNodes.get(0);
+		if (wizardNode instanceof CPCategoryWizardNode) {
+			wizard = getDefaultWizard(((CPCategoryWizardNode) wizardNode)
+					.getProvider().getCategory(), null);
+			if (wizard == null) {
+				wizard = wizardNode.getWizard();
+				if (wizard instanceof NewCategoryWizard) {
+					((NewCategoryWizard) wizard)
+							.initWizardCategory((IWizardCategoryProvider) wizardNode
+									.getProvider());
+				}
+			}
+		}
+		else {
+			wizard = wizardNode.getWizard();
+			if (wizard instanceof ICPWizard) {
+				((ICPWizard) wizard)
+						.initProviderID(((ProfileWizardProvider) wizardNode
+								.getProvider()).getProfile());
+				((ICPWizard) wizard).setParentProfile(parentProfile);
+			}
+		}
+		return wizard;
+	}
+	
+	/**
+	 * Internal listener to listen for the new profile
+	 * @author brianf
+	 *
+	 */
+	private class InternalProfileListener implements IProfileListener {
+
+		protected IConnectionProfile cachedProfile;
+		
+		public void profileAdded(IConnectionProfile profile) {
+			cachedProfile = profile;
+		}
+
+		public void profileChanged(IConnectionProfile profile) {
+			// ignore
+		}
+
+		public void profileDeleted(IConnectionProfile profile) {
+			// ignore
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.action.Action#isEnabled()
+	 */
+	public boolean isEnabled() {
+		return true;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.action.Action#isHandled()
+	 */
+	public boolean isHandled() {
+		return true;
+	}
+	
+	/**
+	 * @return
+	 */
+	public boolean getIgnoreCategory() {
+		return this.ignoreCategory;
+	}
+	
+	/**
+	 * @param flag
+	 */
+	public void setIgnoreCategory( boolean flag ) {
+		this.ignoreCategory = flag;
+	}
+
+	/**
+	 * @return
+	 */
+	public boolean getUseSelection() {
+		return this.useSelection;
+	}
+	
+	/**
+	 * @param flag
+	 */
+	public void setUseSelection( boolean flag ) {
+		this.useSelection = flag;
+	}
+
+	/**
+	 * @param handlerEvent
+	 */
+	protected void fireHandlerChanged(final HandlerEvent handlerEvent) {
+		if (handlerEvent == null) {
+			throw new NullPointerException();
+		}
+		if (listenerList == null)
+			return;
+
+		final Object[] listeners = listenerList.getListeners();
+		for (int i = 0; i < listeners.length; i++) {
+			final IHandlerListener listener = (IHandlerListener) listeners[i];
+			listener.handlerChanged(handlerEvent);
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/AddRepositoryViewAction.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/AddRepositoryViewAction.java
new file mode 100644
index 0000000..1548478
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/AddRepositoryViewAction.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2007-2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.actions;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepositoryConstants;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+
+/**
+ * Adds a new profile repository
+ * @author rcernich
+ *
+ */
+public class AddRepositoryViewAction extends AddProfileViewAction {
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.ui.actions.AddProfileViewAction#run()
+	 */
+	public void run() {
+		setCategory(IConnectionProfileRepositoryConstants.REPOSITORY_CATEGORY_ID);
+		super.run();
+	} 
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.ui.actions.AddProfileViewAction#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+		//ignore selection change here because we should always enable repository view
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.ui.actions.AddProfileViewAction#execute(org.eclipse.core.commands.ExecutionEvent)
+	 */
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		setCategory(IConnectionProfileRepositoryConstants.REPOSITORY_CATEGORY_ID);
+		super.setUseSelection(false);
+		return super.execute(event);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/ConnectAction.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/ConnectAction.java
new file mode 100644
index 0000000..ca20538
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/ConnectAction.java
@@ -0,0 +1,226 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005, 2008 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ *               IBM Corporation - fix for 238315
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.actions;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.jobs.IJobChangeEvent;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.jobs.JobChangeAdapter;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileProvider;
+import org.eclipse.datatools.connectivity.internal.ProfileExtensionProvider;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.preference.PreferenceDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.window.SameShellProvider;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.dialogs.PropertyDialogAction;
+import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
+
+/**
+ * @author shongxum, brianf
+ */
+public class ConnectAction implements IObjectActionDelegate, ISelectionProvider {
+
+	private IStructuredSelection mSelection = null;
+	private Shell mShell;
+	
+	/**
+	 * This method blocks until the connection has been created.
+	 * 
+	 * @param profile
+	 * @param viewer
+	 * 
+	 * @deprecated use IConnectionProfile.connect(). The caller is now
+	 *             responsible for updating their view themselves. Note, if you
+	 *             are using a servers viewer, you should not need to update the
+	 *             view as the view listens for connect events and updates
+	 *             itself.
+	 */
+	public static void connectAndRefresh(IConnectionProfile profile,
+			TreeViewer viewer) {
+		profile.connect();
+
+		viewer.refresh(profile);
+		viewer.setExpandedState(profile, true);
+	}
+
+	/**
+	 * @param profile
+	 * @param contentProvider
+	 * @return
+	 * @deprecated use IConnectionProfile.connect(). The caller is now
+	 *             responsible for updating their view themselves. Note, if you
+	 *             are using a servers viewer, you should not need to update the
+	 *             view as the view listens for connect events and updates
+	 *             itself.
+	 */
+	public static Job connect(IConnectionProfile profile,
+			ITreeContentProvider contentProvider) {
+		Job connectJob = ((ConnectionProfile) profile).new ConnectJob();
+		connectJob.schedule();
+		return connectJob;
+	}
+
+	public ConnectAction() {
+		super();
+	}
+
+	public ConnectAction(Shell shell) {
+		this();
+		mShell = shell;
+	}
+
+	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+		mShell = targetPart.getSite().getShell();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+	 */
+	public void run(IAction action) {
+		if (mSelection != null && allProfilesInSelectionAreDisconnected(mSelection)) {
+			List list = mSelection.toList();
+			if (list == null || list.size() == 0) 
+				return;
+			
+			for (int i = 0; i < list.size(); i++) {
+				PropertyDialogAction propertyDialogAction = new PropertyDialogAction(
+						new SameShellProvider(mShell), this);
+				if (list.get(i) instanceof IConnectionProfile) {
+					IConnectionProfile profile = (IConnectionProfile) list.get(i);
+					StructuredSelection ssel = new StructuredSelection(profile);
+					propertyDialogAction.selectionChanged(ssel);
+					if (!profile.arePropertiesComplete()
+							&& propertyDialogAction.isApplicableForSelection()) {
+						PreferenceDialog dialog = propertyDialogAction.createDialog();
+						dialog.getShell().setText(ConnectivityUIPlugin.getDefault().
+								getResourceString("ConnectAction.title",  //$NON-NLS-1$
+										new String[] {profile.getName()}));
+						String initialPage = getInitialPropertyPageID(profile);
+						if (initialPage != null) {
+							((IWorkbenchPreferenceContainer) dialog).openPage(
+									initialPage, null);
+						}
+						if (dialog.open() == Dialog.CANCEL) {
+							return;
+						}
+					}
+					ConnectActionStatusListener listener = new ConnectActionStatusListener(profile);
+					profile.connect(listener);
+				}
+			}
+		}
+	}
+
+	public void selectionChanged(IAction action, ISelection selection) {
+		IStructuredSelection sel = (IStructuredSelection) selection;
+		mSelection = sel;
+		boolean flag = checkSelectionForProfiles(mSelection);
+		boolean allAreDisconnected = false;
+		if (flag) {
+			allAreDisconnected = allProfilesInSelectionAreDisconnected(mSelection);
+		}
+		action.setEnabled(flag && allAreDisconnected);
+	}
+	
+	private boolean checkSelectionForProfiles ( IStructuredSelection selection ) {
+		List list = selection.toList();
+		if (list == null || list.size() == 0) 
+			return false;
+		
+		for (int i = 0; i < list.size(); i++) {
+			if (!(list.get(i) instanceof IConnectionProfile)) {
+				return false;
+			}
+		}
+		return true;
+	}
+	
+	private boolean allProfilesInSelectionAreDisconnected ( IStructuredSelection selection ) {
+		List list = selection.toList();
+		if (list == null || list.size() == 0) 
+			return false;
+		
+		for (int i = 0; i < list.size(); i++) {
+			if (list.get(i) instanceof IConnectionProfile) {
+				IConnectionProfile profile = (IConnectionProfile) list.get(i);
+				if (profile.getConnectionState() == IConnectionProfile.CONNECTED_STATE)
+					return false;
+			}
+		}
+		return true;
+	}
+
+	public ISelection getSelection() {
+		return mSelection;
+	}
+
+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+	}
+
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+	}
+
+	public void setSelection(ISelection selection) {
+		this.mSelection = (IStructuredSelection)selection;
+	}
+	
+	protected String getInitialPropertyPageID(IConnectionProfile profile) {
+		if (!profile.arePropertiesComplete(profile.getProviderId())) {
+			return ((ConnectionProfileProvider)profile.getProvider()).getPropertiesPersistenceHook().getConnectionPropertiesPageID();
+		}
+		for (Iterator it = profile.getProfileExtensions().entrySet().iterator(); it.hasNext(); ) {
+			Map.Entry entry = (Map.Entry)it.next();
+			String extID = (String)entry.getKey();
+			if (!profile.arePropertiesComplete(extID)) {
+				return ((ProfileExtensionProvider)entry.getValue()).getPropertiesPersistenceHook().getConnectionPropertiesPageID();
+			}
+		}
+		return null;
+	}
+
+}
+
+class ConnectActionStatusListener extends JobChangeAdapter
+{	
+	private IConnectionProfile profile;
+	
+	public ConnectActionStatusListener(IConnectionProfile profile)
+	{
+		this.profile = profile;
+	}
+	
+	public void done(IJobChangeEvent event) {
+		IStatus result = event.getResult();
+		if (result.getSeverity() == IStatus.ERROR && profile instanceof ConnectionProfile) {
+			((ConnectionProfile)profile).clearPasswordIfNotCached();
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/DeleteAction.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/DeleteAction.java
new file mode 100644
index 0000000..66603fb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/DeleteAction.java
@@ -0,0 +1,152 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.actions;
+
+import java.util.Iterator;
+
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepository;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.dialogs.ExceptionHandler;
+import org.eclipse.datatools.connectivity.internal.ui.refactoring.ConnectionProfileDeleteProcessor;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ltk.core.refactoring.CheckConditionsOperation;
+import org.eclipse.ltk.core.refactoring.PerformRefactoringOperation;
+import org.eclipse.ltk.core.refactoring.participants.DeleteRefactoring;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IActionDelegate;
+
+/**
+ * @author shongxum, brianf
+ */
+public class DeleteAction extends Action implements IActionDelegate {
+
+	private Shell mParentShell = null;
+	private Iterator mIterator = null;
+
+	/**
+	 * 
+	 */
+	public DeleteAction() {
+		Display display = Display.getCurrent();
+		mParentShell = display.getActiveShell();
+
+	}
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+	 */
+	public void run() {
+		Object object;
+		IConnectionProfile profile;
+		while (mIterator != null && mIterator.hasNext()) {
+			object = mIterator.next();
+			if (object instanceof IConnectionProfile) {
+				profile = (IConnectionProfile) object;
+			}
+			else {
+				continue;
+			}
+
+			boolean ret = MessageDialog.openQuestion(mParentShell,
+					ConnectivityUIPlugin.getDefault().getResourceString(
+							"actions.delete.title"), ConnectivityUIPlugin //$NON-NLS-1$
+							.getDefault().getResourceString(
+									"actions.delete.confirm", //$NON-NLS-1$
+									new String[] { profile.getName()}));
+			if (!ret)
+				return;
+			try {
+				refactor(profile);
+//				ProfileManager.getInstance().deleteProfile(profile);
+//			} catch (ConnectionProfileException e) {
+//				ExceptionHandler.showException(mParentShell,
+//						ConnectivityUIPlugin.getDefault().getResourceString(
+//								"dialog.title.error"), e //$NON-NLS-1$
+//								.getMessage(), e);
+			} catch (CoreException e) {
+				ExceptionHandler.showException(mParentShell, ConnectivityUIPlugin
+				.getDefault().getResourceString("dialog.title.error"), e //$NON-NLS-1$
+				.getMessage(), e);
+			}
+		}
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction,
+	 *      org.eclipse.jface.viewers.ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+		boolean enabled = false;
+		mIterator = null;
+		if (selection instanceof IStructuredSelection) {
+			IStructuredSelection structuredSelection = (IStructuredSelection) selection;
+			if (structuredSelection.size() > 0) {
+				enabled = true;
+				//need to take care of the enabled state of the delete action when multiple 
+				//profiles(even from different repositories) or the repositories themselves are selected.
+				for (Iterator it = structuredSelection.iterator(); enabled && it.hasNext();) {
+					Object obj = it.next();
+					if (obj instanceof ConnectionProfile) {
+						IConnectionProfileRepository repo = ((ConnectionProfile) obj)
+								.getRepository();
+						enabled = repo == null || !repo.isReadOnly();
+					}
+					else {
+						enabled = false;
+					}
+				}
+				if (enabled) {
+					mIterator = structuredSelection.iterator();
+				}
+			}
+		}
+		action.setEnabled(enabled);
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+	 */
+	public void run(IAction action) {
+		run();
+	}
+
+	private void refactor (IConnectionProfile profile) throws CoreException {
+    	//  Refactor for rename
+    	PerformRefactoringOperation refOperation = new PerformRefactoringOperation(
+    			new DeleteRefactoring(new ConnectionProfileDeleteProcessor(profile)), 
+    				CheckConditionsOperation.ALL_CONDITIONS);
+    	try 
+    	{
+    		ResourcesPlugin.getWorkspace().run(refOperation, null);
+    	}
+    	catch (OperationCanceledException oce) 
+    	{
+    		throw new OperationCanceledException();			
+    	}
+    	catch (CoreException ce) 
+    	{
+    		throw ce;
+    	}	
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/DisconnectAction.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/DisconnectAction.java
new file mode 100644
index 0000000..d5a23d2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/DisconnectAction.java
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.actions;
+
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.InternalProfileManager;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepository;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepositoryConstants;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.IActionDelegate;
+
+/**
+ * @author shongxum, brianf
+ */
+public class DisconnectAction implements IActionDelegate {
+	
+	private IStructuredSelection mSelection = null;
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+	 */
+	public void run(IAction action) {
+		if (mSelection != null && allProfilesInSelectionAreConnected(mSelection)) {
+			List list = mSelection.toList();
+			if (list == null || list.size() == 0) 
+				return;
+			
+			for (int i = 0; i < list.size(); i++) {
+				if (list.get(i) instanceof IConnectionProfile) {
+					IConnectionProfile profile = (IConnectionProfile) list.get(i);
+					disConnectSubProfiles(profile);
+					profile.disconnect(null);
+				}
+			}
+		}
+	}
+
+	private void disConnectSubProfiles(IConnectionProfile parent) {
+		if (!parent.getCategory().getId().equals(
+				IConnectionProfileRepositoryConstants.REPOSITORY_CATEGORY_ID)) {
+			return;
+		}
+		IConnectionProfile[] profiles = InternalProfileManager.getInstance()
+				.getProfiles(true);
+		for (int i = 0; i < profiles.length; i++) {
+			ConnectionProfile profile = (ConnectionProfile) profiles[i];
+			IConnectionProfileRepository repository = profile.getRepository();
+			if (repository != null) {
+				if (repository.getRepositoryProfile() != null
+						&& repository.getRepositoryProfile() == parent
+						&& profile.isConnected()) {
+					profile.disconnect();
+					//notify listeners to remove the contentExtension from the mProfileToExtension map.
+					InternalProfileManager.getInstance().fireProfileDeleted(profile);
+				}
+			}
+		}
+	}
+
+	public void selectionChanged(IAction action, ISelection selection) {
+		IStructuredSelection sel = (IStructuredSelection) selection;
+		mSelection = sel;
+		boolean flag = checkSelectionForProfiles(mSelection);
+		boolean allAreConnected = false;
+		if (flag) {
+			allAreConnected = allProfilesInSelectionAreConnected(mSelection);
+		}
+		action.setEnabled(flag && allAreConnected);
+	}
+
+	private boolean checkSelectionForProfiles ( IStructuredSelection selection ) {
+		List list = selection.toList();
+		if (list == null || list.size() == 0) 
+			return false;
+		
+		for (int i = 0; i < list.size(); i++) {
+			if (!(list.get(i) instanceof IConnectionProfile)) {
+				return false;
+			}
+		}
+		return true;
+	}
+	
+	private boolean allProfilesInSelectionAreConnected ( IStructuredSelection selection ) {
+		List list = selection.toList();
+		if (list == null || list.size() == 0) 
+			return false;
+		
+		for (int i = 0; i < list.size(); i++) {
+			if (list.get(i) instanceof IConnectionProfile) {
+				IConnectionProfile profile = (IConnectionProfile) list.get(i);
+				if (profile.getConnectionState() == IConnectionProfile.DISCONNECTED_STATE)
+					return false;
+			}
+		}
+		return true;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/DuplicateProfileAction.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/DuplicateProfileAction.java
new file mode 100644
index 0000000..1ef68fe
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/DuplicateProfileAction.java
@@ -0,0 +1,132 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.actions;
+
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepository;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.dialogs.ExceptionHandler;
+import org.eclipse.datatools.connectivity.internal.ui.refactoring.ConnectionProfileCopyProcessor;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ltk.core.refactoring.CheckConditionsOperation;
+import org.eclipse.ltk.core.refactoring.PerformRefactoringOperation;
+import org.eclipse.ltk.core.refactoring.participants.CopyRefactoring;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IActionDelegate;
+
+/**
+ * @author shongxum, brianf
+ */
+public class DuplicateProfileAction extends Action implements IActionDelegate {
+
+	private Shell mParentShell = null;
+
+	private IConnectionProfile mConnectionProfile = null;
+	
+	/**
+	 * 
+	 */
+	public DuplicateProfileAction() {
+		Display display = Display.getCurrent();
+		mParentShell = display.getActiveShell();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.action.Action#run()
+	 */
+	public void run() {
+		try {
+			refactor(mConnectionProfile);
+//			String newProfile = ProfileManager.getInstance().duplicateProfile(
+//					mConnectionProfile);
+//			IConnectionProfile profile = ProfileManager.getInstance()
+//					.getProfileByName(newProfile);
+//			if (profile.isAutoConnect())
+//				profile.connect();
+			
+//		} catch (ConnectionProfileException e) {
+//			ExceptionHandler.showException(mParentShell, ConnectivityUIPlugin
+//					.getDefault().getResourceString("dialog.title.error"), e //$NON-NLS-1$
+//					.getMessage(), e);
+		} catch (CoreException e) {
+			ExceptionHandler.showException(mParentShell, ConnectivityUIPlugin
+				.getDefault().getResourceString("dialog.title.error"), e //$NON-NLS-1$
+				.getMessage(), e);
+		}
+	}
+	
+	private void refactor (IConnectionProfile profile) throws CoreException {
+    	//  Refactor for rename
+		Object o = null;
+		if (profile.getParentProfile() == null) {
+			o = ProfileManager.getInstance();
+		} else {
+			o = profile.getParentProfile();
+		}
+    	PerformRefactoringOperation refOperation = new PerformRefactoringOperation(
+				new CopyRefactoring(new ConnectionProfileCopyProcessor(
+						new IConnectionProfile[] { profile}, o)),
+				CheckConditionsOperation.ALL_CONDITIONS);
+    	try 
+    	{
+    		ResourcesPlugin.getWorkspace().run(refOperation, null);
+    	}
+    	catch (OperationCanceledException oce) 
+    	{
+    		throw new OperationCanceledException();			
+    	}
+    	catch (CoreException ce) 
+    	{
+    		throw ce;
+    	}	
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+	 */
+	public void run(IAction action) {
+		run();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction,
+	 *      org.eclipse.jface.viewers.ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+		mConnectionProfile = null;
+		if (selection instanceof IStructuredSelection) {
+			IStructuredSelection structuredSelection = (IStructuredSelection) selection;
+			action.setEnabled(false);
+			if (structuredSelection.size() == 1) {
+				Object selectedResource = structuredSelection.getFirstElement();
+				if (selectedResource instanceof ConnectionProfile) {
+					IConnectionProfileRepository repo = ((ConnectionProfile) selectedResource)
+							.getRepository();
+					action.setEnabled(repo == null || !repo.isReadOnly());
+					mConnectionProfile = (IConnectionProfile) selectedResource;
+				}
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/ExpandAction.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/ExpandAction.java
new file mode 100644
index 0000000..9b36a9c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/ExpandAction.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.actions;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.ui.navigator.CommonViewer;
+
+public class ExpandAction extends Action
+{
+	private SelectionChangedEvent event;
+	private CommonViewer viewer;
+		
+	public void initialize (CommonViewer viewer)
+	{
+		this.viewer = viewer;
+	}
+
+	private Object getSelection ()
+	{
+		return ((IStructuredSelection)event.getSelection()).getFirstElement();
+	}
+	
+	private void expand (Object selection)
+	{
+    	if (this.viewer.getExpandedState(selection))
+    	{
+    		this.viewer.collapseToLevel(selection, 1);
+    	}
+    	else 
+    	{
+    		this.viewer.expandToLevel(selection, 1);
+    	}
+	}
+	
+    public void selectionChanged(SelectionChangedEvent event)
+    {
+    	this.event = event;
+    }
+
+    public void run ()
+	{
+    	Object selection = getSelection();
+    	if (selection instanceof IConnectionProfile && (((IConnectionProfile)selection).getConnectionState() == IConnectionProfile.DISCONNECTED_STATE))
+    	{
+    		ConnectAction action = new ConnectAction();
+    		action.setSelection(new StructuredSelection(selection));
+    		action.run(this);
+    		
+    	}
+    	else
+    	{
+    		expand(selection);
+    	}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/ExpandProvider.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/ExpandProvider.java
new file mode 100644
index 0000000..f409a18
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/ExpandProvider.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.actions;
+
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.navigator.CommonActionProvider;
+import org.eclipse.ui.navigator.CommonViewer;
+import org.eclipse.ui.navigator.ICommonActionConstants;
+import org.eclipse.ui.navigator.ICommonActionExtensionSite;
+
+public class ExpandProvider extends CommonActionProvider
+{
+	private ExpandAction action;
+	private ISelectionProvider selectionProvider;
+	
+	private ExpandAction getAction()
+	{
+		return action;
+	}
+
+	public void init(ICommonActionExtensionSite aSite)
+	{
+		super.init(aSite);
+		this.selectionProvider = aSite.getViewSite().getSelectionProvider();
+		this.action = new ExpandAction();
+		this.action.initialize((CommonViewer) aSite.getStructuredViewer());
+	}
+
+	public void fillActionBars(IActionBars theActionBars)
+	{
+		if (getContext().getSelection().isEmpty() || ((IStructuredSelection)getContext().getSelection()).getFirstElement() == null)
+		{
+			return;
+		}
+		getAction().selectionChanged(new SelectionChangedEvent(this.selectionProvider, this.getContext().getSelection()));
+		theActionBars.setGlobalActionHandler(ICommonActionConstants.OPEN, action);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/ExportProfileViewAction.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/ExportProfileViewAction.java
new file mode 100644
index 0000000..3ad56ad
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/ExportProfileViewAction.java
@@ -0,0 +1,237 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2011 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *  shongxum - initial API and implementation
+ *  Actuate Corporation - refactored to improve extendability
+ * 	brianf - added command handler code
+ *  Actuate Corporation - added the cipherProvider extension point [BZ 358686]
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.actions;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.HandlerEvent;
+import org.eclipse.core.commands.IHandler;
+import org.eclipse.core.commands.IHandlerListener;
+import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileMgmt;
+import org.eclipse.datatools.connectivity.internal.security.SecurityManager;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.dialogs.ExceptionHandler;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.ExportProfilesDialog;
+import org.eclipse.datatools.connectivity.security.ICipherProvider;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.custom.BusyIndicator;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * Ideally, this class should be split into two, one is for Action, the other
+ * is for View Action.
+ * 
+ * @author shongxum & brianf
+ */
+public class ExportProfileViewAction extends Action 
+	implements IHandler, IViewActionDelegate {
+
+	/**
+	 * A collection of objects listening to changes to this manager. This
+	 * collection is <code>null</code> if there are no listeners.
+	 */
+	private transient ListenerList listenerList = null;
+
+	protected boolean isCompleted = false;
+	private Shell shell;
+
+	/**
+	 * Constructor
+	 */
+	public ExportProfileViewAction() {
+		super();
+		setText(ConnectivityUIPlugin.getDefault().getResourceString(
+				"ServersView.action.exportCPs")); //$NON-NLS-1$
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.commands.IHandler#addHandlerListener(org.eclipse.core.commands.IHandlerListener)
+	 */
+	public final void addHandlerListener(final IHandlerListener listener) {
+		if (listenerList == null) {
+			listenerList = new ListenerList(ListenerList.IDENTITY);
+		}
+
+		listenerList.add(listener);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.commands.IHandler#dispose()
+	 */
+	public final void dispose() {
+		listenerList = null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+	 */
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		IWorkbenchPart part = HandlerUtil.getActivePart(event);
+		if (part == null && shell == null) 
+			return null;
+		else if (part instanceof IViewPart)
+			init((IViewPart)part);
+
+		isCompleted = false;    // reset state
+		final ExportProfilesDialog dlg = createExportProfilesDialog( shell );
+		int ret = dlg.open();
+		if (ret == Window.OK) {
+			BusyIndicator.showWhile(shell.getDisplay(), 
+			        createSaveExportedProfilesRunnable( shell, dlg ));
+		}
+		fireHandlerChanged(new HandlerEvent(this, false, false));
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.commands.IHandler#removeHandlerListener(org.eclipse.core.commands.IHandlerListener)
+	 */
+	public void removeHandlerListener(IHandlerListener handlerListener) {
+		if (listenerList != null) {
+			listenerList.remove(handlerListener);
+
+			if (listenerList.isEmpty()) {
+				listenerList = null;
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)
+	 */
+	public void init(IViewPart view) {
+		shell = view.getSite().getShell();
+	}
+
+	/**
+	 * Initialize the shell for use as the parent shell of the action's dialog. 
+	 * Use this method when the action is extended to run without being associated 
+	 * with a view.
+	 * @param parentShell
+	 */
+	protected void init( Shell parentShell )
+	{
+	    shell = parentShell;
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.action.IAction#run()
+	 */
+	public void run() {
+		try {
+			execute(new ExecutionEvent());
+		} catch (final ExecutionException e) {
+			// TODO Do something meaningful and poignant.
+		}
+	}
+
+	/**
+	 * @param parentShell
+	 * @return
+	 */
+	protected ExportProfilesDialog createExportProfilesDialog( Shell parentShell )
+	{
+	    return new ExportProfilesDialog( parentShell );
+	}
+	
+	/**
+	 * Returns a new runnable that saves the profiles selected in the
+	 * specified ExportProfilesDialog.
+	 * @param parentShell  the parent shell for display of exception message
+	 * @param dlg  an instance of ExportProfilesDialog or its subclass.
+	 * @return a new runnable for saving exported profiles
+	 */
+    protected Runnable createSaveExportedProfilesRunnable( 
+            final Shell parentShell, 
+            final ExportProfilesDialog dlg )
+    {
+        return new Runnable() {
+        	public void run() {
+                isCompleted = false;    // reset state
+        		try {
+        			ICipherProvider isp = null;
+        			if (dlg.needEncryption()) {
+        				isp = SecurityManager.getInstance()
+                                .getCipherProvider( dlg.getFile() );
+        			}
+        			ConnectionProfileMgmt.saveCPs(
+        					dlg.getSelectedProfiles(), dlg.getFile(), isp);
+        			isCompleted = true;
+        		}
+        		catch (Exception e) {
+        			ExceptionHandler.showException( parentShell, ConnectivityUIPlugin
+        					.getDefault().getResourceString(
+        							"dialog.title.error"), e //$NON-NLS-1$
+        					.getMessage(), e);
+        		}
+        	}
+        };
+    }
+
+    /**
+     * @return
+     */
+    public boolean isCompleted()
+    {
+        return isCompleted;
+    }
+
+    /*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+	 */
+	public void run(IAction action) {
+		run();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction,
+	 *      org.eclipse.jface.viewers.ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+	}
+
+	/**
+	 * @param handlerEvent
+	 */
+	protected void fireHandlerChanged(final HandlerEvent handlerEvent) {
+		if (handlerEvent == null) {
+			throw new NullPointerException();
+		}
+		if( listenerList == null )
+		    return;
+
+		final Object[] listeners = listenerList.getListeners();
+		for (int i = 0; i < listeners.length; i++) {
+			final IHandlerListener listener = (IHandlerListener) listeners[i];
+			listener.handlerChanged(handlerEvent);
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/ImportProfileViewAction.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/ImportProfileViewAction.java
new file mode 100644
index 0000000..af358fe
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/ImportProfileViewAction.java
@@ -0,0 +1,274 @@
+/*******************************************************************************
+ * Copyright (c) 2005-2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ *				brianf - updated for command handler
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.actions;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.HandlerEvent;
+import org.eclipse.core.commands.IHandler;
+import org.eclipse.core.commands.IHandlerListener;
+import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.datatools.connectivity.ConnectionProfileException;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileProvider;
+import org.eclipse.datatools.connectivity.internal.InternalProfileManager;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepository;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.dialogs.ExceptionHandler;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.ImportProfilesDialog;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.custom.BusyIndicator;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * Ideally, this class should be split into two, one is for Action, the other
+ * is for View Action.
+ * 
+ * @author shongxum & brianf
+ */
+public class ImportProfileViewAction extends Action 
+	implements IHandler, IViewActionDelegate {
+
+	/**
+	 * A collection of objects listening to changes to this manager. This
+	 * collection is <code>null</code> if there are no listeners.
+	 */
+	private transient ListenerList listenerList = null;
+	protected boolean isCompleted = false;
+	private Shell shell;
+
+	/**
+	 * Constructor
+	 */
+	public ImportProfileViewAction() {
+		super();
+		setText(ConnectivityUIPlugin.getDefault().getResourceString(
+				"ServersView.action.importCPs")); //$NON-NLS-1$
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)
+	 */
+	public void init(IViewPart view) {
+		this.shell = view.getSite().getShell();
+	}
+
+	/**
+	 * Initialize the shell for use as the parent shell of the action's dialog. 
+	 * Use this method when the action is extended to run without being associated 
+	 * with a view.
+	 * @param parentShell
+	 */
+	public void init( Shell parentShell )
+	{
+	    shell = parentShell;
+	}	
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.commands.IHandler#addHandlerListener(org.eclipse.core.commands.IHandlerListener)
+	 */
+	public final void addHandlerListener(final IHandlerListener listener) {
+		if (listenerList == null) {
+			listenerList = new ListenerList(ListenerList.IDENTITY);
+		}
+
+		listenerList.add(listener);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.commands.IHandler#dispose()
+	 */
+	public final void dispose() {
+		listenerList = null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+	 */
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		IWorkbenchPart part = HandlerUtil.getActivePart(event);
+		if (part == null && shell == null) 
+			return null;
+		else if (part instanceof IViewPart)
+			init((IViewPart)part);
+
+		final ImportProfilesDialog dlg = new ImportProfilesDialog(shell);
+		int ret = dlg.open();
+		if (ret == Window.OK) {
+			final IConnectionProfile[] profiles = dlg.getProfiles();
+			if (profiles == null) {
+				ExceptionHandler.showException(shell,
+						ConnectivityUIPlugin.getDefault().getResourceString(
+								"dialog.title.error"), dlg.getException() //$NON-NLS-1$
+								.getMessage(), dlg.getException());
+				return null;
+			}
+			// Check to see if we need to import these into another repo
+			if (dlg.getUseLocalRepository()) {
+				BusyIndicator.showWhile(shell.getDisplay(), new Runnable() {
+
+					public void run() {
+						ProfileManager manager = ProfileManager.getInstance();
+						try {
+							for (int i = 0; i < profiles.length; i++) {
+								String path = ProfileManager.getInstance().getProfilePath(profiles[i]);
+								IConnectionProfile foundProfile = ProfileManager.getInstance().getProfileByFullPath(path);
+								if (foundProfile != null) {
+									if (dlg.isOverwritten()) {
+										((ConnectionProfile) profiles[i]).migrate();
+										manager.modifyProfile(profiles[i]);
+									}								}
+								else {
+									((ConnectionProfile) profiles[i]).migrate();
+									manager.addProfile(profiles[i]);
+								}
+							}
+						}
+						catch (ConnectionProfileException e) {
+							ExceptionHandler.showException(shell,
+									ConnectivityUIPlugin.getDefault()
+											.getResourceString(
+													"dialog.title.error"), e //$NON-NLS-1$
+											.getMessage(), e);
+						}
+					}
+				});
+			}
+			else {
+				BusyIndicator.showWhile(shell.getDisplay(), new Runnable() {
+
+					public void run() {
+						try {
+							IConnectionProfile repoProfile = dlg
+									.getSelectedRepository();
+							IConnectionProfileRepository repo = (IConnectionProfileRepository) repoProfile
+									.getManagedConnection(
+											IConnectionProfileRepository.class
+													.getName()).getConnection()
+									.getRawConnection();
+							for (int i = 0; i < profiles.length; i++) {
+								if (!repo.supportsProfileType(profiles[i]
+										.getProviderId())
+										|| !((ConnectionProfileProvider) profiles[i]
+												.getProvider())
+												.compatibleWithRepository(repoProfile)) {
+									continue;
+								}
+								String path = ProfileManager.getInstance().getProfilePath(profiles[i]);
+								path = repo.getRepositoryProfile().getName() + InternalProfileManager.PROFILE_PATH_SEPARATOR + path;
+								IConnectionProfile foundProfile = ProfileManager.getInstance().getProfileByFullPath(path);
+								if (foundProfile == null) {
+									((ConnectionProfile) profiles[i]).migrate();
+									repo.addProfile(profiles[i]);
+								}
+								else if (dlg.isOverwritten()) {
+									((ConnectionProfile) profiles[i]).migrate();
+									repo.modifyProfile(profiles[i]);
+								}
+							}
+						}
+						catch (ConnectionProfileException e) {
+							ExceptionHandler.showException(shell,
+									ConnectivityUIPlugin.getDefault()
+											.getResourceString(
+													"dialog.title.error"), e //$NON-NLS-1$
+											.getMessage(), e);
+						}
+					}
+				});
+			}
+		}
+
+		fireHandlerChanged(new HandlerEvent(this, false, false));
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.commands.IHandler#removeHandlerListener(org.eclipse.core.commands.IHandlerListener)
+	 */
+	public void removeHandlerListener(IHandlerListener handlerListener) {
+		if (listenerList != null) {
+			listenerList.remove(handlerListener);
+
+			if (listenerList.isEmpty()) {
+				listenerList = null;
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.action.IAction#run()
+	 */
+	public void run() {
+		try {
+			execute(new ExecutionEvent());
+		} catch (final ExecutionException e) {
+			// TODO Do something meaningful and poignant.
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+	 */
+	public void run(IAction action) {
+		run();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction,
+	 *      org.eclipse.jface.viewers.ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+	}
+
+    /**
+     * @return
+     */
+    public boolean isCompleted()
+    {
+        return isCompleted;
+    }
+
+	/**
+	 * @param handlerEvent
+	 */
+	protected void fireHandlerChanged(final HandlerEvent handlerEvent) {
+		if (handlerEvent == null) {
+			throw new NullPointerException();
+		}
+		if (listenerList == null)
+			return;
+
+		final Object[] listeners = listenerList.getListeners();
+		for (int i = 0; i < listeners.length; i++) {
+			final IHandlerListener listener = (IHandlerListener) listeners[i];
+			listener.handlerChanged(handlerEvent);
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/PingAction.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/PingAction.java
new file mode 100644
index 0000000..ff88332
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/PingAction.java
@@ -0,0 +1,126 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.actions;
+
+import java.util.Iterator;
+import java.util.Map;
+
+import org.eclipse.datatools.connectivity.ConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileProvider;
+import org.eclipse.datatools.connectivity.internal.ProfileExtensionProvider;
+import org.eclipse.datatools.connectivity.ui.PingJob;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.preference.PreferenceDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.window.SameShellProvider;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IActionDelegate;
+import org.eclipse.ui.dialogs.PropertyDialogAction;
+import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
+
+/**
+ * @author shongxum, brianf
+ */
+public class PingAction implements IActionDelegate, ISelectionProvider {
+
+	private Shell mParentShell = null;
+
+	private IConnectionProfile mConnectionProfile = null;
+
+	/**
+	 * 
+	 */
+	public PingAction() {
+		Display display = Display.getCurrent();
+		mParentShell = display.getActiveShell();
+
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+	 */
+	public void run(IAction action) {
+		PropertyDialogAction propertyDialogAction = new PropertyDialogAction(
+				new SameShellProvider(mParentShell), this);
+		propertyDialogAction
+				.selectionChanged((IStructuredSelection) getSelection());
+		if (!mConnectionProfile.arePropertiesComplete()
+				&& propertyDialogAction.isApplicableForSelection()) {
+			PreferenceDialog dialog = propertyDialogAction.createDialog();
+			String initialPage = getInitialPropertyPageID();
+			if (initialPage != null) {
+				((IWorkbenchPreferenceContainer) dialog).openPage(
+						initialPage, null);
+			}
+			if (dialog.open() == Dialog.CANCEL) {
+				return;
+			}
+		}
+		new PingJob(mParentShell, mConnectionProfile).schedule();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction,
+	 *      org.eclipse.jface.viewers.ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+		mConnectionProfile = null;
+		if (selection instanceof IStructuredSelection) {
+			IStructuredSelection structuredSelection = (IStructuredSelection) selection;
+			if (structuredSelection.size() == 1) {
+				Object selectedResource = structuredSelection.getFirstElement();
+				if (selectedResource instanceof IConnectionProfile) {
+					mConnectionProfile = (IConnectionProfile) selectedResource;
+					action.setEnabled(mConnectionProfile.getProvider().getConnectionFactories().containsKey(
+							ConnectionProfileConstants.PING_FACTORY_ID));						
+				}
+			}
+		}
+	}
+
+	protected String getInitialPropertyPageID() {
+		if (!mConnectionProfile.arePropertiesComplete(mConnectionProfile.getProviderId())) {
+			return ((ConnectionProfileProvider)mConnectionProfile.getProvider()).getPropertiesPersistenceHook().getConnectionPropertiesPageID();
+		}
+		for (Iterator it = mConnectionProfile.getProfileExtensions().entrySet().iterator(); it.hasNext(); ) {
+			Map.Entry entry = (Map.Entry)it.next();
+			String extID = (String)entry.getKey();
+			if (!mConnectionProfile.arePropertiesComplete(extID)) {
+				return ((ProfileExtensionProvider)entry.getValue()).getPropertiesPersistenceHook().getConnectionPropertiesPageID();
+			}
+		}
+		return null;
+	}
+
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+	}
+
+	public ISelection getSelection() {
+		return new StructuredSelection(mConnectionProfile);
+	}
+
+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+	}
+
+	public void setSelection(ISelection selection) {
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/RefreshViewAction.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/RefreshViewAction.java
new file mode 100644
index 0000000..9f8c626
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/RefreshViewAction.java
@@ -0,0 +1,97 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.actions;
+
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.actions.ActionFactory;
+import org.eclipse.ui.navigator.CommonNavigator;
+
+/**
+ * @author shongxum, brianf
+ * 
+ */
+public class RefreshViewAction extends Action implements IObjectActionDelegate {
+
+	protected Object m_selobj = null;
+	protected IViewPart view = null;
+	private StructuredViewer aViewer;
+	
+	/**
+	 * Constructor
+	 * @param viewer
+	 */
+	public RefreshViewAction ( StructuredViewer viewer ) {
+		super();
+		setText(ConnectivityUIPlugin.getDefault().getResourceString("DSE.Refresh.label"));//$NON-NLS-1$
+		setToolTipText(this.getText());
+		this.setActionDefinitionId(ActionFactory.REFRESH.getId());
+		this.setAccelerator(SWT.F5);
+		this.aViewer = viewer;
+	}
+	
+	/**
+     * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+     */
+	public void run() {
+    	if (this.aViewer != null) {
+    		selectionChanged(this, this.aViewer.getSelection());
+    	}
+
+    	if (m_selobj != null) {
+			if (view != null && view instanceof CommonNavigator ) {
+				CommonNavigator nav = (CommonNavigator) view;
+				nav.getCommonViewer().refresh(m_selobj);
+			}
+			else if (aViewer != null) {
+				aViewer.refresh(m_selobj);
+			}
+		}
+	}
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.ui.dse.actions.NavigatorActionBase#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection)
+     */
+    public void selectionChanged(IAction action, ISelection selection) {
+		m_selobj = null;
+		if (selection instanceof IStructuredSelection) {
+			IStructuredSelection structuredSelection = (IStructuredSelection) selection;
+			if (structuredSelection.size() == 1) {
+				m_selobj = structuredSelection.getFirstElement();
+			}
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IObjectActionDelegate#setActivePart(org.eclipse.jface.action.IAction, org.eclipse.ui.IWorkbenchPart)
+	 */
+	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+		if (targetPart instanceof CommonNavigator) {
+			this.view = (IViewPart) targetPart;
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+	 */
+	public void run(IAction action) {
+		run();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/RenameAction.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/RenameAction.java
new file mode 100644
index 0000000..3d78a1f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/RenameAction.java
@@ -0,0 +1,183 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2010 Sybase, Inc. and others
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.actions;
+
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.InternalProfileManager;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepository;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.dialogs.ExceptionHandler;
+import org.eclipse.datatools.connectivity.internal.ui.refactoring.ConnectionProfileRenameProcessor;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.IInputValidator;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.window.Window;
+import org.eclipse.ltk.core.refactoring.CheckConditionsOperation;
+import org.eclipse.ltk.core.refactoring.PerformRefactoringOperation;
+import org.eclipse.ltk.core.refactoring.participants.RenameRefactoring;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IActionDelegate;
+
+/**
+ * @author shongxum, brianf
+ */
+public class RenameAction extends Action implements IActionDelegate {
+
+	private final class NameValidator implements IInputValidator {
+		
+		private String initialName = null;
+		
+		public NameValidator(String init) {
+			this.initialName = init;
+		}
+		
+		public String isValid(String newText) {
+			if (newText == null || newText.trim().length() == 0) {
+				return ConnectivityUIPlugin.getDefault().getResourceString(
+						"rename.dialog.errmsg.invalid"); //$NON-NLS-1$
+			}
+			else if (this.initialName.compareTo(newText) != 0 && nameExisting(newText)) {
+				return ConnectivityUIPlugin.getDefault().getResourceString(
+						"rename.dialog.errmsg.existing"); //$NON-NLS-1$                    
+			}
+			else if (newText.trim().length() < newText.length() ) {
+				return ConnectivityUIPlugin.getDefault().getResourceString(
+						"rename.dialog.errmsg.NoSpacesInName"); //$NON-NLS-1$
+			}
+			else {
+				return null;
+			}
+		}
+	}
+
+	private Shell mParentShell;
+
+	private IConnectionProfile mProfile;
+
+    protected static StructuredViewer viewer;
+
+	/**
+	 * 
+	 */
+	public RenameAction() {
+		Display display = Display.getCurrent();
+		mParentShell = display.getActiveShell();
+	}
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.action.Action#run()
+	 */
+	public void run() {
+		IInputValidator inputValidator = new NameValidator(mProfile.getName());
+		InputDialog d = new InputDialog(
+				mParentShell,
+				ConnectivityUIPlugin.getDefault().getResourceString(
+						"rename.dialog.title"), //$NON-NLS-1$
+						ConnectivityUIPlugin.getDefault().getResourceString(
+						"rename.dialog.message"), mProfile.getName(), inputValidator); //$NON-NLS-1$
+		if (d.open() != Window.OK)
+			return;
+
+		try {
+			refactor(mProfile, d.getValue());
+	        if (RenameAction.viewer != null){
+	            viewer.refresh(mProfile);
+	        }
+//			ProfileManager.getInstance().modifyProfile(mProfile, d.getValue(),
+//					null);
+//		} catch (ConnectionProfileException e) {
+//			ExceptionHandler.showException(mParentShell, ConnectivityUIPlugin
+//					.getDefault().getResourceString("dialog.title.error"), e //$NON-NLS-1$
+//					.getMessage(), e);
+		} catch (CoreException e) {
+			ExceptionHandler.showException(mParentShell, ConnectivityUIPlugin
+			.getDefault().getResourceString("dialog.title.error"), e //$NON-NLS-1$
+			.getMessage(), e);
+		}
+	}
+	
+    public void setViewer(StructuredViewer viewer) {
+	    RenameAction.viewer = viewer;
+	}   
+
+	private void refactor (IConnectionProfile profile, String newName) throws CoreException {
+    	//  Refactor for rename
+    	PerformRefactoringOperation refOperation = new PerformRefactoringOperation(
+    			new RenameRefactoring(new ConnectionProfileRenameProcessor(profile, newName)), 
+    				CheckConditionsOperation.ALL_CONDITIONS);
+    	try 
+    	{
+    		ResourcesPlugin.getWorkspace().run(refOperation, null);
+    	}
+    	catch (OperationCanceledException oce) 
+    	{
+    		throw new OperationCanceledException();			
+    	}
+    	catch (CoreException ce) 
+    	{
+    		throw ce;
+    	}	
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+	 */
+	public void run(IAction action) {
+		run();
+	}
+
+	private boolean nameExisting(String newName) {
+		IConnectionProfile foundProfile = null;
+		String path = ProfileManager.getInstance().getProfilePath(mProfile);
+		if ( path != null) {
+			String[] parsedPath = ProfileManager.getInstance().tokenize(path, InternalProfileManager.PROFILE_PATH_SEPARATOR);
+			parsedPath[parsedPath.length - 1] = newName;
+			String updatedPath = ProfileManager.getInstance().unTokenize(parsedPath);
+			foundProfile = ProfileManager.getInstance().getProfileByFullPath(updatedPath);
+		}
+		return foundProfile != null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction,
+	 *      org.eclipse.jface.viewers.ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+		mProfile = null;
+		if (selection instanceof IStructuredSelection) {
+			IStructuredSelection structuredSelection = (IStructuredSelection) selection;
+			action.setEnabled(false);
+			if (structuredSelection.size() == 1) {
+				Object selectedResource = structuredSelection.getFirstElement();
+				if (selectedResource instanceof ConnectionProfile) {
+					IConnectionProfileRepository repo = ((ConnectionProfile) selectedResource)
+							.getRepository();
+					action.setEnabled(repo == null || !repo.isReadOnly());
+					mProfile = (IConnectionProfile) selectedResource;
+				}
+			}
+		}
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/SaveOfflineAction.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/SaveOfflineAction.java
new file mode 100644
index 0000000..080b98e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/SaveOfflineAction.java
@@ -0,0 +1,102 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.actions;
+
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.ui.IActionDelegate2;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.actions.BaseSelectionListenerAction;
+
+public class SaveOfflineAction extends BaseSelectionListenerAction implements
+		IObjectActionDelegate, IActionDelegate2 {
+
+	private ISelectionProvider mSelectionProvider;
+
+	public SaveOfflineAction() {
+		super(ConnectivityUIPlugin.getDefault().getResourceString(
+				"DATATOOLS.SERVER.UI.EXPLORER.UPDATE_OFFLINE"));//$NON-NLS-1$
+		setToolTipText(getText());
+	}
+
+	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+		setSelectionProvider(targetPart.getSite().getSelectionProvider());
+	}
+
+	public void setSelectionProvider(ISelectionProvider selectionProvider) {
+		if (mSelectionProvider != null) {
+			mSelectionProvider.removeSelectionChangedListener(this);
+		}
+		mSelectionProvider = selectionProvider;
+		if (mSelectionProvider != null) {
+			mSelectionProvider.addSelectionChangedListener(this);
+			ISelection selection = mSelectionProvider.getSelection();
+			selectionChanged(selection instanceof IStructuredSelection ? (IStructuredSelection) selection
+					: StructuredSelection.EMPTY);
+		}
+	}
+
+	public void run() {
+		if (!isEnabled()) {
+			return;
+		}
+
+		for (Iterator it = getStructuredSelection().iterator(); it.hasNext();) {
+			((IConnectionProfile) it.next()).saveWorkOfflineData(null);
+		}
+	}
+
+	protected boolean updateSelection(IStructuredSelection selection) {
+		boolean enabled = !selection.isEmpty();
+		for (Iterator it = selection.iterator(); enabled && it.hasNext();) {
+			Object obj = it.next();
+			enabled = obj instanceof IConnectionProfile
+					&& ((IConnectionProfile) obj).supportsWorkOfflineMode()
+					&& ((IConnectionProfile) obj).getConnectionState() == IConnectionProfile.CONNECTED_STATE;
+		}
+		return enabled && super.updateSelection(selection);
+	}
+
+	public void run(IAction action) {
+		run();
+	}
+
+	public void selectionChanged(IAction action, ISelection selection) {
+		if (selection instanceof IStructuredSelection)
+			selectionChanged((IStructuredSelection) selection);
+		else
+			selectionChanged(StructuredSelection.EMPTY);
+	}
+
+	public void dispose() {
+		if (mSelectionProvider != null) {
+			mSelectionProvider.removeSelectionChangedListener(this);
+		}
+		mSelectionProvider = null;
+	}
+
+	public void init(IAction action) {
+	}
+
+	public void runWithEvent(IAction action, Event event) {
+		run();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/ViewPropertyAction.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/ViewPropertyAction.java
new file mode 100644
index 0000000..266165d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/ViewPropertyAction.java
@@ -0,0 +1,353 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.actions;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IManagedConnection;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepository;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepositoryConstants;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.ProfileUIManager;
+import org.eclipse.datatools.connectivity.ui.wizards.ConnectionProfileDetailsPage;
+import org.eclipse.datatools.connectivity.ui.wizards.ProfileDetailsPropertyPage;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.dialogs.IPageChangedListener;
+import org.eclipse.jface.dialogs.PageChangedEvent;
+import org.eclipse.jface.preference.PreferenceDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ControlEvent;
+import org.eclipse.swt.events.ControlListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.ui.dialogs.PropertyPage;
+
+/**
+ * @author shongxum
+ */
+public class ViewPropertyAction extends Action {
+
+	// for stashing the size of the dialog for consistency 
+	public final static String MEMENTO_ROOT = "Connectivity_Property_Dialog_Root";//$NON-NLS-1$
+	public final static String MEMENTO_DIALOG_SIZE_HEIGHT = "Dialog_Size_Height";//$NON-NLS-1$
+	public final static String MEMENTO_DIALOG_SIZE_WIDTH = "Dialog_Size_Width";//$NON-NLS-1$
+	private int mShellWidth = 0;
+	private int mShellHeight = 0;
+
+	private TreeViewer mViewer;
+	private Shell mShell;
+	
+
+	/**
+	 * Constructor
+	 */
+	public ViewPropertyAction(Viewer viewer) {
+		mViewer = (TreeViewer) viewer;
+		setText(ConnectivityUIPlugin.getDefault().getResourceString(
+				"ServersView.action.showproperties")); //$NON-NLS-1$
+	}
+
+	/*
+	 * Facility method added in here so that dependency to eclipse internal api
+	 * is kept to a minimum
+	 */
+	public static boolean hasContributors(Object selected) {
+		return ProfileUIManager.hasContributors( selected );
+	}
+
+	/*
+	 * @see org.eclipse.ui.IAction#run()
+	 */
+	public void run() {
+		Object selected = getSelectedObject();
+		PreferenceDialog propertyDialog = 
+		    ProfileUIManager.createPreferenceDialog( mViewer.getControl().getShell(), 
+		            selected );
+		if( propertyDialog == null )
+		    return;
+
+		// check for size settings
+		IDialogSettings dset = ConnectivityUIPlugin.getDefault()
+			.getDialogSettings();
+		boolean foundSettings = false;
+		if (dset != null) {
+			IDialogSettings dSection = dset.getSection(MEMENTO_ROOT);
+			if (dSection != null) {
+				if (dSection.get(MEMENTO_DIALOG_SIZE_HEIGHT) != null
+						&& dSection.get(MEMENTO_DIALOG_SIZE_HEIGHT).trim()
+								.length() > 0) {
+					mShellHeight = dSection.getInt(MEMENTO_DIALOG_SIZE_HEIGHT);
+					mShellWidth = dSection.getInt(MEMENTO_DIALOG_SIZE_WIDTH);
+					foundSettings = true;
+				}
+			}
+		}
+		// if we found them, set it to the old values
+		if (foundSettings) {
+			propertyDialog.getShell().setSize(mShellWidth, mShellHeight);
+			propertyDialog.getShell().layout();
+		// if not, initialize 'mShellWidth' and 'mShellHeigth'
+		}else{
+			mShellHeight = propertyDialog.getShell().getSize().y;
+			mShellWidth = propertyDialog.getShell().getSize().x;
+		}
+		
+		this.mShell = propertyDialog.getShell();
+        String title = ConnectivityUIPlugin.getDefault().getResourceString(
+                        "properties.dialog"); //$NON-NLS-1$
+        if (selected instanceof IConnectionProfile) {
+        	IConnectionProfile profile = (IConnectionProfile) selected;
+        	title = ConnectivityUIPlugin.getDefault().
+				getResourceString("ConnectAction.title",  //$NON-NLS-1$
+					new String[] {profile.getName()});
+        }
+		propertyDialog.getShell().setText(title);
+		
+		// add a listener to make sure we get any resizes of the dialog
+		// to store for the next time
+		this.mShell.addControlListener(new ControlListener(){
+
+			public void controlMoved(ControlEvent e) {
+			}
+
+			public void controlResized(ControlEvent e) {
+				if (e.getSource() instanceof Shell) {
+					Shell shell = (Shell) e.getSource();
+					ViewPropertyAction.this.mShellHeight = shell.getSize().y;
+					ViewPropertyAction.this.mShellWidth = shell.getSize().x;
+				}
+			}
+		});
+
+		// check to see if the profile is in a read-only repository
+		// and if so, disable the controls on each page selected
+		boolean inReadOnlyRepository = false;
+		if (getSelectedObject() instanceof IConnectionProfile) {
+			IConnectionProfile profile = (IConnectionProfile) getSelectedObject();
+			if (profile.getParentProfile() != null) {
+				IManagedConnection imc = ((IConnectionProfile) profile.getParentProfile())
+					.getManagedConnection(IConnectionProfileRepositoryConstants.REPOSITORY_CONNECTION_FACTORY_ID);
+				if (imc != null && imc.isConnected()) {
+					IConnectionProfileRepository repo = (IConnectionProfileRepository) imc
+							.getConnection().getRawConnection();
+					inReadOnlyRepository = repo.isReadOnly();
+				}
+			}
+		}
+		
+		// handle the initial page selected in the dialog for the
+		// read only repository page disabling...
+		propertyDialog.addPageChangedListener( new PropertyPageChangeListener(inReadOnlyRepository) );
+		if (inReadOnlyRepository && propertyDialog.getSelectedPage() != null) {
+			PropertyPage page = (PropertyPage) propertyDialog.getSelectedPage();
+			if (propertyDialog.getSelectedPage() instanceof ConnectionProfileDetailsPage ||
+					propertyDialog.getSelectedPage() instanceof ProfileDetailsPropertyPage) {
+				if (page.getControl() instanceof Composite) {
+					Composite composite = (Composite) page.getControl();
+					if (inReadOnlyRepository)
+						disableControls(composite, !inReadOnlyRepository, true);
+				}
+			}
+			else if (propertyDialog.getSelectedPage() instanceof PropertyPage) {
+				if (page.getControl() instanceof Composite) {
+					Composite composite = (Composite) page.getControl();
+					disableControls(composite, !inReadOnlyRepository);
+				}
+			}
+		}
+		int rtn_val = propertyDialog.open();
+		if (rtn_val == Dialog.OK)
+			saveState();
+
+		mViewer.setSelection(mViewer.getSelection());
+	}
+	
+	/*
+	 * Page change listener to disable controls for profiles
+	 * in a read-only repository.
+	 * 
+	 * @author brianf
+	 *
+	 */
+	private class PropertyPageChangeListener implements IPageChangedListener {
+		
+		private boolean inReadOnlyRepository = false;
+		
+		/*
+		 * Constructor
+		 * @param flag
+		 */
+		public PropertyPageChangeListener( boolean flag ) {
+			inReadOnlyRepository = flag;
+		}
+		
+		/* (non-Javadoc)
+		 * @see org.eclipse.jface.dialogs.IPageChangedListener#pageChanged(org.eclipse.jface.dialogs.PageChangedEvent)
+		 */
+		public void pageChanged(PageChangedEvent event) {
+			if (event.getSelectedPage() instanceof ConnectionProfileDetailsPage ||
+					event.getSelectedPage() instanceof ProfileDetailsPropertyPage) {
+				PropertyPage page = (PropertyPage) event.getSelectedPage();
+				if (page.getControl() instanceof Composite) {
+					Composite composite = (Composite) page.getControl();
+					if (inReadOnlyRepository)
+						disableControls(composite, !inReadOnlyRepository, true);
+				}
+			}
+			else if (event.getSelectedPage() instanceof PropertyPage) {
+				PropertyPage page = (PropertyPage) event.getSelectedPage();
+				if (page.getControl() instanceof Composite) {
+					Composite composite = (Composite) page.getControl();
+					if (inReadOnlyRepository)
+						disableControls(composite, !inReadOnlyRepository);
+				}
+			}
+		}
+	}
+	
+	/*
+	 * Disable controls on a composite
+	 * @param parent
+	 * @param enabled
+	 */
+	private void disableControls ( Composite parent, boolean enabled ) {
+		disableControls(parent, enabled, false);
+	}
+	
+	/*
+	 * Disable controls on a composite, but have a special case
+	 * for the Test Connection (Ping) button 
+	 * @param parent
+	 * @param enabled
+	 * @param checkForPing
+	 */
+	private void disableControls ( Composite parent, boolean enabled, boolean checkForPing ) {
+		for (int i = 0; i < parent.getChildren().length; i++) {
+			
+			if (parent.getChildren()[i] instanceof TabFolder) {
+				Control[] tabList = ((TabFolder) parent.getChildren()[i]).getTabList();
+				for (int j = 0; j < tabList.length; j++) {
+					if (tabList[j] instanceof Composite) {
+						disableControls((Composite) tabList[j], enabled, checkForPing);
+					}
+					tabList[j].setEnabled(false);
+				}
+			}
+			else if (parent.getChildren()[i] instanceof Composite) {
+				disableControls((Composite) parent.getChildren()[i], enabled, checkForPing);
+				if (parentHasCombo((Composite)parent.getChildren()[i], enabled)) {
+					parent.getChildren()[i].setEnabled(enabled);
+				}
+			}
+			else {
+				if (parent.getChildren()[i] instanceof Label) {
+					// ignore
+				}
+				else if (parent.getChildren()[i] instanceof List) {
+					Color bg = Display.getDefault().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND); 
+					((List)parent.getChildren()[i]).setBackground(bg);
+					((List)parent.getChildren()[i]).setEnabled(enabled);
+				}
+				else if (parent.getChildren()[i] instanceof TabFolder) {
+					//ignore
+				}
+				else if (parent.getChildren()[i] instanceof Button) {
+					if (checkForPing) {
+						String pingLabel = ConnectivityUIPlugin.getDefault().getResourceString(
+							"ConnectionProfileDetailsPage.Button.TestConnection"); //$NON-NLS-1$
+						Button btn = (Button) parent.getChildren()[i];
+						if (!btn.isDisposed() && btn.getText().equals(pingLabel)) {
+							btn.setEnabled(true);
+						}
+						else {
+							btn.setEnabled(enabled);
+						}
+					}
+					else {
+						parent.getChildren()[i].setEnabled(enabled);
+					}
+				}
+				else {
+					parent.getChildren()[i].setEnabled(enabled);
+				}
+			}
+		}
+	}
+	
+	/*
+	 * See if the composite has a combo on it. If so, set the background
+	 * so it looks disabled.
+	 * @param parent
+	 * @param enabled
+	 * @return
+	 */
+	private boolean parentHasCombo ( Composite parent, boolean enabled ) {
+		if (parent.getChildren().length > 0) {
+			Control[] controls = parent.getChildren();
+			for (int i = 0; i < controls.length; i++) {
+				if (controls[i] instanceof Combo) {
+					if (!enabled) {
+						Color bg = Display.getDefault().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND); 
+						((Combo)controls[i]).setBackground(bg);
+					}
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Get the selected object 
+	 * @return
+	 */
+	public Object getSelectedObject() {
+		ISelection selection = mViewer.getSelection();
+		Object selectedObj = null;
+		if (selection == null)
+			return null;
+		if (selection instanceof IStructuredSelection) {
+			IStructuredSelection structuredSelection = (IStructuredSelection) selection;
+			selectedObj = structuredSelection.getFirstElement();
+		}
+		return selectedObj;
+	}
+
+	/*
+	 * Save the dialog settings
+	 */
+	private void saveState() {
+		IDialogSettings dset = ConnectivityUIPlugin.getDefault()
+				.getDialogSettings();
+		if (dset != null && this.mShell != null ) {
+			IDialogSettings dSection = dset.getSection(MEMENTO_ROOT);
+			if (dSection == null)
+				dSection = dset.addNewSection(MEMENTO_ROOT);
+			if (dSection != null) {
+				dSection.put(MEMENTO_DIALOG_SIZE_HEIGHT, mShellHeight);
+				dSection.put(MEMENTO_DIALOG_SIZE_WIDTH, mShellWidth);
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/WorkOfflineAction.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/WorkOfflineAction.java
new file mode 100644
index 0000000..028ddd5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/WorkOfflineAction.java
@@ -0,0 +1,102 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.actions;
+
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.ui.IActionDelegate2;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.actions.BaseSelectionListenerAction;
+
+public class WorkOfflineAction extends BaseSelectionListenerAction implements
+		IObjectActionDelegate, IActionDelegate2 {
+
+	private ISelectionProvider mSelectionProvider;
+
+	public WorkOfflineAction() {
+		super(ConnectivityUIPlugin.getDefault().getResourceString(
+				"DATATOOLS.SERVER.UI.EXPLORER.WORKOFFLINE"));//$NON-NLS-1$
+		setToolTipText(getText());
+	}
+
+	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+		setSelectionProvider(targetPart.getSite().getSelectionProvider());
+	}
+
+	public void setSelectionProvider(ISelectionProvider selectionProvider) {
+		if (mSelectionProvider != null) {
+			mSelectionProvider.removeSelectionChangedListener(this);
+		}
+		mSelectionProvider = selectionProvider;
+		if (mSelectionProvider != null) {
+			mSelectionProvider.addSelectionChangedListener(this);
+			ISelection selection = mSelectionProvider.getSelection();
+			selectionChanged(selection instanceof IStructuredSelection ? (IStructuredSelection) selection
+					: StructuredSelection.EMPTY);
+		}
+	}
+
+	public void run() {
+		if (!isEnabled()) {
+			return;
+		}
+
+		for (Iterator it = getStructuredSelection().iterator(); it.hasNext();) {
+			((IConnectionProfile) it.next()).workOffline(null);
+		}
+	}
+
+	protected boolean updateSelection(IStructuredSelection selection) {
+		boolean enabled = !selection.isEmpty();
+		for (Iterator it = selection.iterator(); enabled && it.hasNext();) {
+			Object obj = it.next();
+			enabled = obj instanceof IConnectionProfile
+					&& ((IConnectionProfile) obj).getConnectionState() != IConnectionProfile.WORKING_OFFLINE_STATE
+					&& ((IConnectionProfile) obj).canWorkOffline();
+		}
+		return enabled && super.updateSelection(selection);
+	}
+
+	public void run(IAction action) {
+		run();
+	}
+
+	public void selectionChanged(IAction action, ISelection selection) {
+		if (selection instanceof IStructuredSelection)
+			selectionChanged((IStructuredSelection) selection);
+		else
+			selectionChanged(StructuredSelection.EMPTY);
+	}
+
+	public void dispose() {
+		if (mSelectionProvider != null) {
+			mSelectionProvider.removeSelectionChangedListener(this);
+		}
+		mSelectionProvider = null;
+	}
+
+	public void init(IAction action) {
+	}
+
+	public void runWithEvent(IAction action, Event event) {
+		run();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/WorkOfflineActionProvider.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/WorkOfflineActionProvider.java
new file mode 100644
index 0000000..2d292e0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/actions/WorkOfflineActionProvider.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.actions;
+
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.ui.navigator.CommonActionProvider;
+import org.eclipse.ui.navigator.ICommonActionExtensionSite;
+
+public class WorkOfflineActionProvider extends CommonActionProvider {
+
+	public static final String OFFLINE_MENU_GROUP = "slotOffline"; //$NON-NLS-1$
+
+	private WorkOfflineAction mWorkOfflineAction;
+	private SaveOfflineAction mSaveOfflineAction;
+
+	public void init(ICommonActionExtensionSite aSite) {
+		super.init(aSite);
+		mWorkOfflineAction = new WorkOfflineAction();
+		mWorkOfflineAction.setSelectionProvider(aSite.getViewSite()
+				.getSelectionProvider());
+
+		mSaveOfflineAction = new SaveOfflineAction();
+		mSaveOfflineAction.setSelectionProvider(aSite.getViewSite()
+				.getSelectionProvider());
+	}
+
+	public void dispose() {
+		mWorkOfflineAction.dispose();
+		mWorkOfflineAction = null;
+		mSaveOfflineAction.dispose();
+		mSaveOfflineAction = null;
+		super.dispose();
+	}
+
+	public void fillContextMenu(IMenuManager menu) {
+		super.fillContextMenu(menu);
+		IStructuredSelection selection = getContext().getSelection() instanceof IStructuredSelection ? (IStructuredSelection) getContext()
+				.getSelection()
+				: StructuredSelection.EMPTY;
+		mWorkOfflineAction.selectionChanged(selection);
+		mSaveOfflineAction.selectionChanged(selection);
+		menu.appendToGroup(OFFLINE_MENU_GROUP, mWorkOfflineAction);
+		menu.appendToGroup(OFFLINE_MENU_GROUP, mSaveOfflineAction);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/messages.properties b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/messages.properties
new file mode 100644
index 0000000..cb0813c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/messages.properties
@@ -0,0 +1,10 @@
+Datatooling_description=Expand the tree to edit preferences for data tooling.
+CPRepositoryContentExtension_CPExtensionName=Connection Profiles
+ProfileImageDescriptor_target_profile_id_not_null_msg=The target connection profile ID for the profile image extension cannot be null.
+ProfileImageDescriptor_target_profile_image_not_null=The icon for the profile image extension cannot be null.
+DriverClassEditDialog_Type_option_button=Type class name
+DriverClassEditDialog_Browse_option_button=Browse for class
+DriverClassEditDialog_populate_classes_button=Populate class list
+ConnectionProfileDetailsPage_Autoconnect_finish=&Connect when the wizard completes
+ConnectionProfileDetailsPage_Autoconnect_startup=Connect every time the workbench is &started
+CPWizardSelectionPage_default_filter_text=type filter text
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/navigator/ConnectionProfileContentProvider.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/navigator/ConnectionProfileContentProvider.java
new file mode 100644
index 0000000..05eca12
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/navigator/ConnectionProfileContentProvider.java
@@ -0,0 +1,478 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2010 Sybase, Inc. and others
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich, shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.navigator;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IProfileListener;
+import org.eclipse.datatools.connectivity.IPropertySetChangeEvent;
+import org.eclipse.datatools.connectivity.IPropertySetListener;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.internal.Category;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepositoryConstants;
+import org.eclipse.datatools.connectivity.internal.ui.AddConnectListenerRegistry;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.LocalRepositoryNode;
+import org.eclipse.datatools.connectivity.ui.IAddConnectListener;
+import org.eclipse.datatools.connectivity.ui.RefreshProfileJob;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.navigator.CommonNavigator;
+import org.eclipse.ui.navigator.CommonViewer;
+import org.eclipse.ui.navigator.ICommonContentExtensionSite;
+import org.eclipse.ui.navigator.ICommonContentProvider;
+import org.eclipse.ui.navigator.IExtensionStateModel;
+import org.eclipse.ui.navigator.INavigatorContentService;
+
+/**
+ * @author rcernich, shongxum, brianf
+ */
+public class ConnectionProfileContentProvider implements ICommonContentProvider {
+
+	private boolean mShowCategories = true;
+
+	private Viewer mViewer;
+
+	private Object mInput;
+	
+	private IExtensionStateModel mStateModel;
+	
+	private LocalRepositoryNode mLocalRepoNode;
+
+	private IProfileListener mProfileListener = new IProfileListener() {
+
+		public void profileAdded(IConnectionProfile profile) {
+			profile.addPropertySetListener(mPropertyListener);
+			refreshViewer(
+					mShowCategories && !isRepositoryProfile(profile) ? profile
+							.getCategory() : null, true);
+		}
+
+		public void profileDeleted(IConnectionProfile profile) {
+			profile.removePropertySetListener(mPropertyListener);
+			refreshViewer(
+					mShowCategories && !isRepositoryProfile(profile) ? profile
+							.getCategory() : null, true);
+		}
+
+		public void profileChanged(IConnectionProfile profile) {
+			// refreshViewer(profile, false);
+		}
+
+	};
+
+	private IPropertySetListener mPropertyListener = new IPropertySetListener() {
+
+		public void propertySetChanged(IPropertySetChangeEvent event) {
+			handleProfilePropertyChanged(event);
+		}
+	};
+	
+	private IPropertyChangeListener mPropertyChangeListener = new IPropertyChangeListener() {
+
+		public void propertyChange(PropertyChangeEvent event) {
+			if (ConnectivityUIPlugin.PROP_SHOW_CATEGORIES.equals(event.getProperty())) {
+				setShowCategories(((Boolean) event.getNewValue())
+						.booleanValue());
+			}
+		}
+	};
+
+	/**
+	 * Constructor
+	 */
+	public ConnectionProfileContentProvider() {
+		super();
+		ProfileManager.getInstance().addProfileListener(mProfileListener);
+	}
+
+	public void setShowCategories(boolean showCategories) {
+		if (showCategories != mShowCategories) {
+			mShowCategories = showCategories;
+			refreshViewer(null, false);
+		}
+	}
+
+	public boolean isShowCategories() {
+		return mShowCategories;
+	}
+
+	protected void refreshViewer(final Object object,
+			final boolean expand) {
+		if (mViewer instanceof TreeViewer && object instanceof IConnectionProfile ) {
+			RefreshProfileJob.scheduleRefreshProfileJob((IConnectionProfile)object,
+					(TreeViewer) mViewer);
+		}
+		else {
+			Runnable runner = new Runnable() {
+
+				public void run() {
+				    if (mViewer instanceof CommonViewer) {
+				    	RuntimeException exception = null;
+				    	try {
+				    		((CommonViewer)mViewer).refresh(object);
+				    	} catch (SWTException swte){
+				    		return;
+				    	} catch (RuntimeException re) {
+				    		exception = re;
+				    		int count = 5;
+				    		while (exception != null && count > 0) {
+				    			count--;
+						    	try {
+						    		((CommonViewer)mViewer).refresh(object);
+						    	} catch (RuntimeException re2) {
+						    		exception = re2;
+						    	}
+				    		}
+				    		if (count == 0 && exception != null)
+				    			ConnectivityUIPlugin.getDefault().log(exception);
+				    	}
+				    }
+				    else if (mViewer instanceof StructuredViewer) {
+				        try {
+							((StructuredViewer)mViewer).refresh(object);
+						} catch (SWTException e) {
+							return;
+						}
+				    }
+				}
+			};
+			if (mViewer != null && !mViewer.getControl().isDisposed()
+					&& !mViewer.getControl().getDisplay().isDisposed())
+				mViewer.getControl().getDisplay().asyncExec(runner);
+		}
+	}
+
+	protected void handleProfilePropertyChanged(IPropertySetChangeEvent event) {
+		if (IConnectionProfile.CONNECTION_PROFILE_PROPERTY_SET.equals(event
+				.getPropertySetType())
+				&& event
+						.getChangedProperty(IConnectionProfile.CONNECTION_STATE_PROPERTY_ID) != null) {
+
+			final IPropertySetChangeEvent finalEvent = event;
+			Display display = PlatformUI.getWorkbench().getDisplay();
+			if (display != null && !display.isDisposed()) {
+				display.asyncExec(new Runnable() {
+
+					public void run() {
+						final IWorkbenchPart dse = PlatformUI.getWorkbench()
+								.getActiveWorkbenchWindow().getActivePage()
+								.findView(ConnectivityUIPlugin.SERVERS_VIEW_VIEWER_ID);
+						if (dse != null) {
+							CommonNavigator navigator = (CommonNavigator) dse;
+							INavigatorContentService contentService = navigator
+									.getNavigatorContentService();
+							String description = contentService
+									.createCommonDescriptionProvider()
+									.getDescription(
+											finalEvent.getConnectionProfile());
+							Image image = contentService
+									.createCommonLabelProvider().getImage(
+											finalEvent.getConnectionProfile());
+							navigator.getViewSite().getActionBars()
+									.getStatusLineManager().setMessage(image,
+											description);
+						}
+					}
+				});
+			}
+			refreshViewer(event.getConnectionProfile(), false);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
+	 */
+	public Object[] getChildren(Object parentElement) {
+		Object[] children = new Object[0];
+		if (parentElement instanceof IWorkspaceRoot) {
+			return getChildren(ProfileManager.getInstance());
+		}
+		else if (parentElement instanceof ProfileManager) {
+			ProfileManager pm = (ProfileManager) parentElement;
+			List kids = new ArrayList();
+
+			if (this.mLocalRepoNode == null)
+				this.mLocalRepoNode = new LocalRepositoryNode();
+			kids.add(this.mLocalRepoNode);
+			recurseSubCategoryProfiles(
+					pm
+							.getCategory(IConnectionProfileRepositoryConstants.REPOSITORY_CATEGORY_ID),
+					kids);
+			if (kids.size() == 1) {
+				// Don't show local repository node if it's the only repository
+				// in use
+				children = getChildren(kids.get(0));
+			}
+			else {
+				children = kids.toArray();
+			}
+		}
+		else if (parentElement instanceof LocalRepositoryNode) {
+			List kids = new ArrayList();
+			ProfileManager pm = ProfileManager.getInstance();			
+			if (mShowCategories) {
+				kids.addAll(Arrays.asList(pm.getRootCategories()));
+				kids
+						.remove(pm
+								.getCategory(IConnectionProfileRepositoryConstants.REPOSITORY_CATEGORY_ID));
+				children = kids.toArray();
+
+			}
+			else {
+				kids.addAll(Arrays.asList(pm.getProfiles(false)));
+				removeRepositoryProfiles(
+						kids,
+						pm
+								.getCategory(IConnectionProfileRepositoryConstants.REPOSITORY_CATEGORY_ID));
+			}
+			children = kids.toArray();
+		}
+		else if (parentElement instanceof Object[]) {
+			children = (Object[]) parentElement;
+		}
+		else if (parentElement instanceof ICategory) {
+			ICategory icat = (ICategory) parentElement;
+			ArrayList arry = new ArrayList();
+			if (mShowCategories) {
+				arry.addAll(icat.getChildCategories());
+				arry.addAll(icat.getAssociatedProfiles());
+			}
+			else {
+				arry.addAll(icat.getAssociatedProfiles());
+				recurseSubCategoryProfiles(icat, arry);
+			}
+			children = arry.toArray();
+		}
+		else if (parentElement instanceof IConnectionProfile) {
+			children = new Object[0];
+		}
+		if (children != null && children.length > 0) {
+			Arrays.sort(children, new Comparator() {
+
+				public int compare(Object e1, Object e2) {
+					// Make sure the local repository node is the first item in the tree
+					if (e1 instanceof LocalRepositoryNode) {
+						return -1;
+					}
+					else if (e2 instanceof LocalRepositoryNode) {
+						return 1;
+					}
+					if (e1 instanceof IConnectionProfile && e2 instanceof IConnectionProfile) {
+						IConnectionProfile icp1 = (IConnectionProfile) e1;
+						IConnectionProfile icp2 = (IConnectionProfile) e2;
+						return icp1.getName().compareToIgnoreCase(icp2.getName());
+					}
+					if (e1 instanceof ICategory && e2 instanceof ICategory) {
+						ICategory icat1 = (ICategory) e1;
+						ICategory icat2 = (ICategory) e2;
+						return icat1.getName().compareToIgnoreCase(icat2.getName());
+					}
+					return 0;
+				}
+			});
+		}
+		return children;
+	}
+	
+	private void removeRepositoryProfiles(List kids, ICategory category) {
+		kids.removeAll(category.getAssociatedProfiles());
+		for (Iterator it = category.getChildCategories().iterator(); it
+				.hasNext();) {
+			removeRepositoryProfiles(kids, (ICategory) it.next());
+		}
+	}
+
+	private void recurseSubCategoryProfiles(ICategory parent, List arry) {
+		arry.addAll(parent.getAssociatedProfiles());
+		for (Iterator it = parent.getChildCategories().iterator(); it.hasNext();) {
+			ICategory sub = (ICategory) it.next();
+			recurseSubCategoryProfiles(sub, arry);
+		}
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
+	 */
+	public Object getParent(Object element) {
+		Object parent = null;
+
+		if (element instanceof ICategory) {
+			parent = ((ICategory) element).getParent();
+			if (parent == null) {
+				parent = ((Category)element).getRepositoryProfile();
+			}
+			if (parent == null) {
+				parent = mInput;
+			}
+		}
+		else if (element instanceof IConnectionProfile) {
+			if (mShowCategories) {
+				parent = ((IConnectionProfile) element).getCategory();
+				if (parent == null
+						|| isRepositoryProfile((IConnectionProfile) element)) {
+					parent = mInput;
+				}
+			}
+			else {
+				parent = ((IConnectionProfile)element).getParentProfile();
+				if (parent == null) {
+					parent = mInput;
+				}
+			}
+		}
+
+		return parent;
+	}
+	
+	private boolean isRepositoryProfile(IConnectionProfile profile) {
+		for (ICategory cat = profile.getCategory(); cat != null; cat = cat
+				.getParent()) {
+			if (IConnectionProfileRepositoryConstants.REPOSITORY_CATEGORY_ID
+					.equals(cat.getId())) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
+	 */
+	public boolean hasChildren(Object element) {
+		return getChildren(element).length > 0;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+	 */
+	public Object[] getElements(Object inputElement) {
+		return getChildren(inputElement);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+	 */
+	public void dispose() {
+		ProfileManager.getInstance().removeProfileListener(mProfileListener);
+		for (Iterator it = Arrays.asList(
+				ProfileManager.getInstance().getProfiles()).iterator(); it
+				.hasNext();) {
+			((IConnectionProfile) it.next())
+					.removePropertySetListener(mPropertyListener);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
+	 *      java.lang.Object, java.lang.Object)
+	 */
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		mInput = newInput;
+		mViewer = viewer;
+		if (mViewer == null) {
+			// Remove listeners
+			for (Iterator it = Arrays.asList(
+					ProfileManager.getInstance().getProfiles()).iterator(); it
+					.hasNext();) {
+				((IConnectionProfile) it.next())
+						.removePropertySetListener(mPropertyListener);
+			}
+		}
+		else {
+			// Add listeners
+			for (Iterator it = Arrays.asList(
+					ProfileManager.getInstance().getProfiles()).iterator(); it
+					.hasNext();) {
+				((IConnectionProfile) it.next())
+						.addPropertySetListener(mPropertyListener);
+			}
+			
+	         for (Iterator it = Arrays.asList(
+	                    ProfileManager.getInstance().getProfiles()).iterator(); it
+	                    .hasNext();) {
+	             IConnectionProfile thisProfile = (IConnectionProfile)it.next();
+	             IAddConnectListener provider = AddConnectListenerRegistry.INSTANCE.getProvider(thisProfile);
+	             if (provider != null) {
+	                 provider.addConnectListener(thisProfile);
+	             }
+	        }
+
+			if (mViewer instanceof CommonViewer) {
+				((CommonViewer) mViewer).getNavigatorContentService()
+						.findStateModel(ConnectivityUIPlugin.SERVERS_VIEW_CONTENT_EXTENSION_ID)
+						.removePropertyChangeListener(mPropertyChangeListener);
+				
+				IExtensionStateModel stateModel = ((CommonViewer) mViewer)
+						.getNavigatorContentService().findStateModel(
+								ConnectivityUIPlugin.SERVERS_VIEW_CONTENT_EXTENSION_ID);
+				
+				stateModel.addPropertyChangeListener(mPropertyChangeListener);
+				
+				boolean testStateCategories =
+					stateModel.getBooleanProperty(ConnectivityUIPlugin.PROP_SHOW_CATEGORIES);
+				if (mShowCategories != testStateCategories)
+					setShowCategories(testStateCategories);
+			}
+		}
+	}
+
+	public void init(ICommonContentExtensionSite aConfig) {
+		mStateModel = aConfig.getExtensionStateModel();
+	}
+
+	public void restoreState(IMemento aMemento) {
+//		String showCatString = aMemento
+//				.getString(ConnectivityUIPlugin.PROP_SHOW_CATEGORIES);
+
+		// Continue to use the default until we figure out how to update the
+		// action state (ShowCategoryAction)
+		//mShowCategories = showCatString == null ? true : Boolean.valueOf(
+		//		showCatString).booleanValue();
+
+		mStateModel.setBooleanProperty(ConnectivityUIPlugin.PROP_SHOW_CATEGORIES,
+				mShowCategories);
+
+	}
+
+	public void saveState(IMemento aMemento) {
+		aMemento.putString(ConnectivityUIPlugin.PROP_SHOW_CATEGORIES, Boolean.toString(isShowCategories()));
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/navigator/ConnectionProfileLabelProvider.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/navigator/ConnectionProfileLabelProvider.java
new file mode 100644
index 0000000..aeeb1f7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/navigator/ConnectionProfileLabelProvider.java
@@ -0,0 +1,273 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ * 			IBM Corporation = bug fix #203829
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.navigator;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.ConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.Version;
+import org.eclipse.datatools.connectivity.internal.ui.CCOverLayIconUtility;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.LocalRepositoryNode;
+import org.eclipse.datatools.connectivity.internal.ui.SharedImages;
+import org.eclipse.datatools.connectivity.ui.ProfileImageRegistry;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.osgi.util.TextProcessor;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.navigator.ICommonContentExtensionSite;
+import org.eclipse.ui.navigator.ICommonLabelProvider;
+import org.eclipse.ui.navigator.IExtensionStateModel;
+
+import com.ibm.icu.text.MessageFormat;
+
+/**
+ * @author rcernich, brianf
+ */
+public class ConnectionProfileLabelProvider extends LabelProvider implements
+		ICommonLabelProvider {
+
+	private static String STATUSBAR_CONNECTED = "StatusBar.Connected"; //$NON-NLS-1$
+	private static String STATUSBAR_OFFLINE = "StatusBar.WorkingOffline"; //$NON-NLS-1$
+	private static String STATUSBAR_DISCONNECTED = "StatusBar.Disconnected"; //$NON-NLS-1$
+	private static String STATUSBAR_MSG = "StatusBar.ConnectedMessage"; //$NON-NLS-1$
+
+	public ConnectionProfileLabelProvider() {
+		super();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
+	 */
+	public Image getImage(Object element) {
+		Image image;
+		if (element instanceof ICategory) {
+			image = PlatformUI.getWorkbench().getSharedImages().getImage(
+					ISharedImages.IMG_OBJ_FOLDER);
+		}
+		else if(element instanceof LocalRepositoryNode){
+			image = SharedImages.get(SharedImages.IMG_LOCAL_REPOSITORY);
+		}
+		else if (element instanceof IConnectionProfile) {
+			IConnectionProfile profile = (IConnectionProfile) element;
+			image = ProfileImageRegistry.getInstance().getProfileImage(
+					profile.getProvider());
+			switch (profile.getConnectionState()) {
+			case IConnectionProfile.CONNECTED_STATE: {
+				ImageRegistry registry = ConnectivityUIPlugin.getDefault()
+						.getImageRegistry();
+				image = registry.get(profile.getName().concat(
+						SharedImages.IMAGE_RUNNING));
+				if (image == null) {
+					image = CCOverLayIconUtility.getDefault().addOverlayIcon(
+							ProfileImageRegistry.getInstance().getProfileImage(
+									profile.getProvider()),
+							CCOverLayIconUtility.RUNNING);
+					registry.put(profile.getName().concat(
+							SharedImages.IMAGE_RUNNING), image);
+				}
+			}
+				break;
+			case IConnectionProfile.WORKING_OFFLINE_STATE: {
+				ImageRegistry registry = ConnectivityUIPlugin.getDefault()
+						.getImageRegistry();
+				image = registry.get(profile.getName().concat(
+						SharedImages.IMAGE_OFFLINE));
+				if (image == null) {
+					image = CCOverLayIconUtility.getDefault().addOverlayIcon(
+							ProfileImageRegistry.getInstance().getProfileImage(
+									profile.getProvider()),
+							CCOverLayIconUtility.OFFLINE);
+					registry.put(profile.getName().concat(
+							SharedImages.IMAGE_OFFLINE), image);
+				}
+			}
+				break;
+			}
+		}
+		else {
+			image = null;
+		}
+		return image;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
+	 */
+	public String getText(Object element) {
+		String text = null;
+		if (element instanceof ProfileManager) {
+			text = ConnectivityUIPlugin.getDefault().
+					getResourceString("DSE.View.Tooltip"); //$NON-NLS-1$
+		}
+		else if (element instanceof ICategory) {
+			text = ((ICategory) element).getName();
+		}
+		else if(element instanceof LocalRepositoryNode){
+			text = ConnectivityUIPlugin
+			.getDefault()
+			.getResourceString(
+					"CommonLabelProviderBase.label.localRepository"); //$NON-NLS-1$
+		}
+		else if (element instanceof IConnectionProfile) {
+			IConnectionProfile profile = (IConnectionProfile) element;
+			StringBuffer sb = new StringBuffer(profile.getName());
+			if (profile.getConnectionState() != IConnectionProfile.DISCONNECTED_STATE) {
+				Properties props = profile
+						.getProperties(ConnectionProfileConstants.VERSION_INFO_PROFILE_EXTENSION_ID);
+				String serverName = props
+						.getProperty(ConnectionProfileConstants.PROP_SERVER_NAME);
+				Version serverVersion = Version
+						.valueOf(props
+								.getProperty(ConnectionProfileConstants.PROP_SERVER_VERSION));
+				if ((serverName != null && serverName.length() > 0)) {
+					String versionStr = null;
+					if(serverVersion.compareTo(Version.NULL_VERSION) == 0) {
+						versionStr = MessageFormat.format(
+								ConnectivityUIPlugin.getDefault().getResourceString("CommonLabelProviderBase.label.version.versionless"),  //$NON-NLS-1$
+								new String[] {sb.toString(),
+									serverName});
+					} else {
+					versionStr = MessageFormat
+							.format(
+									ConnectivityUIPlugin
+											.getDefault()
+											.getResourceString(
+													"CommonLabelProviderBase.label.version"), //$NON-NLS-1$
+									new String[] { profile.getName(),
+											serverName,
+											serverVersion.toString()});
+					}
+					sb = new StringBuffer(versionStr);
+				}
+			}
+			text = sb.toString();
+			
+			// for bug 234423, replace all newline \n characters with spaces
+			text = text.replace('\n', ' ');
+		}
+		else {
+			text = super.getText(element);
+		}
+		if (text != null && text.trim().length() > 0)
+			text = TextProcessor.process(text);
+		return text;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+	 */
+	public void dispose() {
+		super.dispose();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.ICommonLabelProvider#init(org.eclipse.ui.navigator.IExtensionStateModel,
+	 *      org.eclipse.jface.viewers.ITreeContentProvider)
+	 */
+	public void init(IExtensionStateModel aStateModel,
+			ITreeContentProvider aContentProvider) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.IMementoAware#restoreState(org.eclipse.ui.IMemento)
+	 */
+	public void restoreState(IMemento aMemento) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.IMementoAware#saveState(org.eclipse.ui.IMemento)
+	 */
+	public void saveState(IMemento aMemento) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.IDescriptionProvider#getDescription(java.lang.Object)
+	 */
+	public String getDescription(Object element) {
+		String desc;
+		if (element instanceof ICategory) {
+			desc = ((ICategory) element).getName();
+		}
+		else if (element instanceof IConnectionProfile) {
+			IConnectionProfile profile = (IConnectionProfile) element;
+			Properties props = profile.getBaseProperties();
+			String serverName = props
+					.getProperty(ConnectionProfileConstants.PROP_SERVER_NAME);
+			Version serverVersion = Version
+					.valueOf(props
+							.getProperty(ConnectionProfileConstants.PROP_SERVER_VERSION));
+			if ((serverName != null && serverName.length() > 0)
+					|| serverVersion != Version.NULL_VERSION) {
+				desc = MessageFormat.format(ConnectivityUIPlugin.getDefault()
+						.getResourceString(
+								"CommonLabelProviderBase.label.version"), //$NON-NLS-1$
+						new String[] { profile.getName(), serverName,
+								serverVersion.toString()});
+
+			}
+			else {
+				desc = profile.getName();
+			}
+
+			// now add connected state to the status bar BZ 165333 - BTF
+			String connectedState;
+			switch (profile.getConnectionState()) {
+			case IConnectionProfile.CONNECTED_STATE:
+				connectedState = ConnectivityUIPlugin.getDefault()
+						.getResourceString(STATUSBAR_CONNECTED);
+				break;
+			case IConnectionProfile.WORKING_OFFLINE_STATE:
+				connectedState = ConnectivityUIPlugin.getDefault()
+						.getResourceString(STATUSBAR_OFFLINE);
+				break;
+			case IConnectionProfile.DISCONNECTED_STATE:
+			default:
+				connectedState = ConnectivityUIPlugin.getDefault()
+						.getResourceString(STATUSBAR_DISCONNECTED);
+				break;
+			}
+			desc = ConnectivityUIPlugin.getDefault().getResourceString(
+					STATUSBAR_MSG, new String[] { desc, connectedState});
+		}
+		else {
+			desc = null;
+		}
+		if (desc != null && desc.trim().length() > 0)
+			desc = TextProcessor.process(desc);
+		return desc;
+	}
+
+	public void init(ICommonContentExtensionSite aConfig) {
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/navigator/ConnectionProfileSorter.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/navigator/ConnectionProfileSorter.java
new file mode 100644
index 0000000..24fde20
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/navigator/ConnectionProfileSorter.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.navigator;
+
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ui.LocalRepositoryNode;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+
+public class ConnectionProfileSorter extends ViewerSorter {
+
+	public int compare(Viewer viewer, Object e1, Object e2) {
+		// Make sure the local repository node is the first item in the tree
+		if (e1 instanceof LocalRepositoryNode) {
+			return -1;
+		}
+		else if (e2 instanceof LocalRepositoryNode) {
+			return 1;
+		}
+		if (e1 instanceof IConnectionProfile && e2 instanceof IConnectionProfile) {
+			IConnectionProfile icp1 = (IConnectionProfile) e1;
+			IConnectionProfile icp2 = (IConnectionProfile) e2;
+			return icp1.getName().compareToIgnoreCase(icp2.getName());
+		}
+		if (e1 instanceof ICategory && e2 instanceof ICategory) {
+			ICategory icat1 = (ICategory) e1;
+			ICategory icat2 = (ICategory) e2;
+			return icat1.getName().compareToIgnoreCase(icat2.getName());
+		}
+		return super.compare(viewer, e1, e2);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/navigator/actions/CollapseAllActionDelegate.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/navigator/actions/CollapseAllActionDelegate.java
new file mode 100644
index 0000000..0b038b8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/navigator/actions/CollapseAllActionDelegate.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2003 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.navigator.actions;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.navigator.CommonNavigator;
+
+/**
+ * This action delegate collapses all expanded elements in a Navigator view.
+ * <p>
+ * This class is experimental and is subject to change.
+ * </p>
+ */
+public class CollapseAllActionDelegate implements IViewActionDelegate {
+
+	private IViewPart view;
+
+	/**
+	 * Creates a new instance of the receiver
+	 */
+	public CollapseAllActionDelegate() {
+		// empty
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)
+	 */
+	public void init(IViewPart view) {
+		this.view = view;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+	 */
+	public void run(IAction action) {
+		if (this.view instanceof CommonNavigator) {
+			CommonNavigator navigator = (CommonNavigator) this.view;
+			navigator.getCommonViewer().collapseAll();
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction,
+	 *      org.eclipse.jface.viewers.ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+		// empty
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/navigator/actions/ExpandAllActionDelegate.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/navigator/actions/ExpandAllActionDelegate.java
new file mode 100644
index 0000000..9a4b508
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/navigator/actions/ExpandAllActionDelegate.java
@@ -0,0 +1,253 @@
+/*******************************************************************************
+ * Copyright (c) 2005-2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.navigator.actions;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.navigator.CommonNavigator;
+import org.eclipse.ui.navigator.CommonViewer;
+
+/**
+ * This action delegate collapses all expanded elements in a Navigator view.
+ * <p>
+ * This class is experimental and is subject to change.
+ * </p>
+ */
+public class ExpandAllActionDelegate implements IViewActionDelegate {
+
+	private final int EXPAND_TO_LEVEL = 25;
+	private IViewPart view;
+	private Display currentDisplay = Display.getCurrent();
+    private CommonViewer cViewer;
+	private static boolean mDebug = ConnectivityPlugin.getDefault().isDebugging();
+
+	/**
+	 * Creates a new instance of the receiver
+	 */
+	public ExpandAllActionDelegate() {
+		// empty
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)
+	 */
+	public void init(IViewPart view) {
+		this.view = view;
+		if (this.view instanceof CommonNavigator) {
+			CommonNavigator navigator = (CommonNavigator) this.view;
+			cViewer = navigator.getCommonViewer();
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction,
+	 *      org.eclipse.jface.viewers.ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+		// empty
+	}
+
+	/**
+	 * Was the monitor cancelled?
+	 * @param monitor
+	 * @throws InterruptedException
+	 */
+	private void checkCancelled(IProgressMonitor monitor)
+		throws InterruptedException {
+		if (monitor.isCanceled()) {
+			throw new InterruptedException();
+		}
+	}
+	
+	/*
+	 * Actually manage walking through each object in the tree
+	 * and expand it a level at a time to give the user a chance
+	 * to cancel it.
+	 * @param monitor
+	 * @throws InterruptedException
+	 */
+	private void handleOuterExpand2 ( final IProgressMonitor monitor) 
+		throws InterruptedException {
+
+		if (currentDisplay != null) {
+			final Tree tree = cViewer.getTree();
+			currentDisplay.syncExec(new Runnable() {
+				public void run() {
+					int count = tree.getItemCount();
+					monitor.beginTask(ConnectivityUIPlugin.getDefault().getResourceString("DSE.Jobs.ExpandAll.label"),  //$NON-NLS-1$
+							count);
+				}
+			});
+			currentDisplay.syncExec(new Runnable() {
+				public void run() {
+					TreeItem[] children = tree.getItems();
+					for (int i = 0; i < children.length; i++) {
+						processChild(monitor, children[i]);
+						monitor.worked(1);
+						Display.getCurrent().readAndDispatch();
+						try {
+							checkCancelled(monitor);
+						} catch (InterruptedException e) {
+							break;
+						}
+					}
+				}
+			});
+		}
+	}
+	
+	/* Process a tree item
+	 * @param monitor
+	 * @param item
+	 */
+	private void processChild ( IProgressMonitor monitor, TreeItem item ) {
+		String subTask = ConnectivityUIPlugin.getDefault().getResourceString("DSE.Jobs.ExpandAll.Subtask.label", //$NON-NLS-1$
+					new String[] {item.getText()}); 
+		monitor.subTask(subTask);
+		cViewer.setSelection(new StructuredSelection(item), true);
+		long start = System.currentTimeMillis();
+		
+		expandToLevel2(cViewer, item, monitor, EXPAND_TO_LEVEL);
+		
+		try {
+			checkCancelled(monitor);
+		} catch (InterruptedException e) {
+		}
+		
+		long check = System.currentTimeMillis();
+		debug("took " + (check - start) + " ms expanding " + item.getText() ); //$NON-NLS-1$ //$NON-NLS-2$
+		if (item.getItemCount() > 0) {
+			
+		}
+	}
+	
+	/*
+	 * Walk through expanding each element and its children recursively to a particular level
+	 * @param viewer
+	 * @param item
+	 * @param monitor
+	 * @param level
+	 */
+	private void expandToLevel2 (CommonViewer viewer, TreeItem item, IProgressMonitor monitor, int count) {
+		String subTask = ConnectivityUIPlugin.getDefault().getResourceString("DSE.Jobs.ExpandAll.Subtask.label", //$NON-NLS-1$
+				new String[] {item.getText()}); 
+		debug("expanding..." + item.getText() + "... to level " + count); //$NON-NLS-1$ //$NON-NLS-2$
+		monitor.subTask(subTask);
+		if(item.getData()==null) return;
+		
+		viewer.setSelection(new StructuredSelection(item.getData()), true);
+		viewer.setExpandedState(item.getData(), true);
+		if (item.getItemCount() > 0) {
+			TreeItem[] children = item.getItems();
+			Display.getCurrent().readAndDispatch();
+			if (monitor.isCanceled()) return;
+			int tempCount = getCurrentExpandedLevelForItem(viewer, item);
+			if (tempCount < count) {
+				for (int i = 0; i < children.length; i++) {
+					expandToLevel2(viewer, children[i], monitor, count);
+					Display.getCurrent().readAndDispatch();
+					try {
+						checkCancelled(monitor);
+					} catch (InterruptedException e) {
+						break;
+					}
+				}
+			}
+		}
+		Display.getCurrent().readAndDispatch();
+		try {
+			checkCancelled(monitor);
+		} catch (InterruptedException e) {
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+	 */
+	public void run(IAction action) {
+		CommonNavigator navigator = (CommonNavigator) this.view;
+		OuterJob job = new OuterJob();
+		job.setUser(true);
+		PlatformUI.getWorkbench().getProgressService().showInDialog(navigator.getSite().getShell(), job);
+		job.schedule();
+	}
+	
+	/*
+	 * Job class to handle expanding so we can hook into the jobs
+	 * framework and see progress
+	 * @author brianf
+	 */
+	private class OuterJob extends Job {
+		public OuterJob() {
+			super(ConnectivityUIPlugin.getDefault().getResourceString("DSE.Jobs.ExpandAll.label")); //$NON-NLS-1$
+		}
+
+		protected IStatus run(IProgressMonitor monitor) {
+			try {
+				handleOuterExpand2(monitor);
+			} catch (Throwable e) {
+				return Status.CANCEL_STATUS;
+			}
+			return Status.OK_STATUS;
+		}
+	}
+
+	/*
+	 * Return the level of the current item to facilitate checking if
+	 * we have expanded to the level we want
+	 * @param viewer
+	 * @param item
+	 * @return
+	 */
+	private int getCurrentExpandedLevelForItem (CommonViewer viewer, Object item) {
+		int count = 1;
+		if (item instanceof TreeItem) {
+			TreeItem tempItem = (TreeItem) item;
+			while (tempItem.getParentItem() != null) {
+				tempItem = tempItem.getParentItem();
+				count++;
+			}
+		}
+		else {
+			Object tempItem = item;
+			ITreeContentProvider itcp = (ITreeContentProvider) viewer.getContentProvider();
+			while (itcp.getParent(tempItem) != null) {
+				tempItem = itcp.getParent(tempItem);
+				count++;
+			}
+		}
+		return count;
+	}
+
+	public static void debug ( String msg ) {
+		if (mDebug)
+			System.out.println("Debug: " + msg); //$NON-NLS-1$
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/navigator/actions/IActionCategoryDefs.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/navigator/actions/IActionCategoryDefs.java
new file mode 100644
index 0000000..539ff67
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/navigator/actions/IActionCategoryDefs.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.navigator.actions;
+
+/**
+ * Provides some marker IDs for menus in the DSE
+ * @author brianf
+ *
+ */
+public interface IActionCategoryDefs {
+	public static String MARKER_ID_SLOT1 = "slot1";//$NON-NLS-1$
+	public static String MARKER_ID_SLOT2 = "slot2";//$NON-NLS-1$
+	public static String MARKER_ID_SLOT3 = "slot3";//$NON-NLS-1$
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/navigator/actions/ProfileActionsActionProvider.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/navigator/actions/ProfileActionsActionProvider.java
new file mode 100644
index 0000000..620b7e7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/navigator/actions/ProfileActionsActionProvider.java
@@ -0,0 +1,310 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2010 Sybase, Inc. and others
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ *  Actuate Corporation - refactored to improve extensibility
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.navigator.actions;
+
+import org.eclipse.core.commands.operations.IUndoContext;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.Category;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepository;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.LocalRepositoryNode;
+import org.eclipse.datatools.connectivity.ui.actions.AddProfileViewAction;
+import org.eclipse.datatools.connectivity.ui.actions.DeleteAction;
+import org.eclipse.datatools.connectivity.ui.actions.RenameAction;
+import org.eclipse.datatools.connectivity.ui.actions.ViewPropertyAction;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.actions.ActionContext;
+import org.eclipse.ui.actions.ActionFactory;
+import org.eclipse.ui.navigator.CommonActionProvider;
+import org.eclipse.ui.navigator.ICommonActionExtensionSite;
+import org.eclipse.ui.navigator.ICommonViewerWorkbenchSite;
+import org.eclipse.ui.operations.UndoRedoActionGroup;
+
+/**
+ * This class provides default keyboard handling and 
+ * some basic actions to the DSE. Note that if you want to 
+ * override the Delete, Rename, or View Property actions you
+ * will need to do it here (by overriding this action provider)
+ * as well as in the popup menu extension. That is to handle
+ * the keyboard support.
+ * 
+ * @author brianf
+ *
+ */
+public class ProfileActionsActionProvider extends CommonActionProvider {
+
+	private StructuredViewer aViewer;
+    private IStructuredSelection selection;
+    
+	private AddProfileViewAction addCPAction;
+	private ViewPropertyAction propAction;
+    private RenameAction renameAction;
+    private DeleteAction deleteAction;
+
+	private UndoRedoActionGroup undoRedoGroup;
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.ICommonActionProvider#dispose()
+	 */
+	public void dispose() {
+	}
+
+	/**
+	 * @param selection
+	 */
+	private void setSelection ( IStructuredSelection selection ) {
+        this.selection = selection;
+        updateActionBars();
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.ICommonActionProvider#setActionContext(org.eclipse.ui.actions.ActionContext)
+	 */
+	public void setActionContext(ActionContext aContext) {
+        if (aContext.getSelection() instanceof IStructuredSelection)
+        {
+        	setSelection((IStructuredSelection) aContext.getSelection());
+        }
+		undoRedoGroup.setContext(aContext);
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.ICommonActionProvider#fillContextMenu(org.eclipse.jface.action.IMenuManager)
+	 */
+	public void fillContextMenu(IMenuManager manager) {
+		boolean hasSelection = false;
+		if (selection != null && selection.getFirstElement() != null)
+			hasSelection = true;
+		Object selObject = null;
+		if (hasSelection) {
+			selObject = selection.getFirstElement();
+			if (selObject instanceof ICategory) {
+				if(selObject instanceof Category){
+					IConnectionProfile repositoryProfile = ((Category) selObject)
+							.getRepositoryProfile();
+					if (repositoryProfile != null) {
+						//when category is in non-local repository
+						addCPAction.setParentProfile(repositoryProfile);
+					}else{
+						//when category is in local repository
+						addCPAction.setParentProfile(null);
+					}
+				}
+				addCPAction.setCategory((ICategory) selObject);// = new AddProfileViewAction((ICategory) selObject);
+				manager.insertBefore(IActionCategoryDefs.MARKER_ID_SLOT1,
+						addCPAction);
+			}else if(selObject instanceof LocalRepositoryNode){
+				addCPAction.setParentProfile(null);
+				addCPAction.setCategory((ICategory)null);
+				manager.insertBefore(IActionCategoryDefs.MARKER_ID_SLOT1,
+						addCPAction);
+			}
+			else if (selObject instanceof IConnectionProfile
+					&& ((IConnectionProfile) selObject).getConnectionState() == IConnectionProfile.CONNECTED_STATE
+					&& ((IConnectionProfile) selObject).getProvider()
+							.getConnectionFactory(
+									IConnectionProfileRepository.class
+											.getName()) != null) {
+				// This profile is a repository
+				addCPAction.setCategory((ICategory)null);
+				addCPAction.setParentProfile((IConnectionProfile)selObject);
+				manager.insertBefore(IActionCategoryDefs.MARKER_ID_SLOT1,
+						addCPAction);
+			}
+		}
+		else {
+			addCPAction.setCategory((ICategory)null);
+			manager.insertBefore(IActionCategoryDefs.MARKER_ID_SLOT1,
+					addCPAction);
+		}
+
+		if (hasSelection && ViewPropertyAction.hasContributors(selObject)) {
+			manager.add(propAction);
+		}
+		undoRedoGroup.fillContextMenu(manager);
+		return;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.ICommonActionProvider#fillActionBars(org.eclipse.ui.IActionBars)
+	 */
+	public void fillActionBars(IActionBars bars) {
+		undoRedoGroup.fillActionBars(bars);
+		bars.setGlobalActionHandler(ActionFactory.PROPERTIES.getId(),
+				propAction);
+		bars.setGlobalActionHandler(ActionFactory.RENAME.getId(),
+				renameAction);
+		bars.setGlobalActionHandler(ActionFactory.DELETE.getId(),
+				deleteAction);
+        updateActionBars();
+        return;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.CommonActionProvider#init(org.eclipse.ui.navigator.ICommonActionExtensionSite)
+	 */
+	public void init(ICommonActionExtensionSite aConfig) {
+		super.init(aConfig);
+        this.aViewer = aConfig.getStructuredViewer();
+        makeActions();
+
+		IUndoContext workspaceContext = (IUndoContext) ResourcesPlugin
+			.getWorkspace().getAdapter(IUndoContext.class);
+		undoRedoGroup = new UndoRedoActionGroup(((ICommonViewerWorkbenchSite) aConfig.getViewSite()).getSite(),
+				workspaceContext, true);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.actions.ActionGroup#setContext(org.eclipse.ui.actions.ActionContext)
+	 */
+	public void setContext(ActionContext context) {
+		super.setContext(context);
+        if (context.getSelection() instanceof IStructuredSelection)
+        {
+        	setSelection((IStructuredSelection) context.getSelection());
+        }
+	}
+	
+	/**
+	 * 
+	 */
+	private void makeActions() {
+		addCPAction = createAddProfileViewAction( );
+		addCPAction.setUseSelection(false);
+		addCPAction.setIgnoreCategory(false);
+		addCPAction.init(getActionSite().getViewSite().getShell());
+		
+		propAction = createViewPropertyAction(this.aViewer);
+		propAction.setActionDefinitionId("org.eclipse.ui.file.properties"); //$NON-NLS-1$
+
+    	renameAction = createRenameAction();
+    	renameAction.setActionDefinitionId("org.eclipse.ui.edit.rename"); //$NON-NLS-1$
+    	renameAction.setText(ConnectivityUIPlugin.getDefault().getResourceString("DSE.Rename.label")); //$NON-NLS-1$
+        renameAction.setViewer(aViewer);
+    	
+    	deleteAction = createDeleteAction();
+    	deleteAction.setText(ConnectivityUIPlugin.getDefault().getResourceString("DSE.Delete.label")); //$NON-NLS-1$
+    	deleteAction.setActionDefinitionId("org.eclipse.ui.edit.delete"); //$NON-NLS-1$
+	}
+
+	/**
+	 * Creates the action that adds a new connection profile instance.
+	 * Subclass may override to create an extended action.
+	 * @return an AddProfileViewAction instance
+     * @since DTP 1.6
+	 */
+	protected AddProfileViewAction createAddProfileViewAction() {
+        return new AddProfileViewAction();
+    }
+
+	/**
+	 * Sets the action that adds a new connection profile instance. 
+	 * This should be called after {@link #init(ICommonActionExtensionSite)} to override
+	 * the default AddProfileViewAction.
+	 * @param action   an AddProfileViewAction instance
+	 * @since DTP 1.6
+	 */
+	protected void setAddProfileViewAction( AddProfileViewAction action ) {
+	    addCPAction = action;
+	}
+
+	/**
+     * Creates the action that views a profile's properties.
+     * Subclass may override to create an extended action.
+     * @param viewer
+     * @return a ViewPropertyAction instance
+     * @since DTP 1.6
+	 */
+	protected ViewPropertyAction createViewPropertyAction( Viewer viewer ) {
+	    return new ViewPropertyAction( viewer );
+	}
+	
+	/**
+     * Sets the action that views a profile's properties. 
+     * This should be called after {@link #init(ICommonActionExtensionSite)} to override
+     * the default ViewPropertyAction.
+	 * @param action   a ViewPropertyAction instance
+	 * @since DTP 1.6
+	 */
+    protected void setViewPropertyAction( ViewPropertyAction action ) {
+        propAction = action;
+    }
+
+    /**
+     * Creates the action that renames a connection profile instance.
+     * Subclass may override to create an extended action.
+     * @return a RenameAction instance
+     * @since DTP 1.6
+     */
+    protected RenameAction createRenameAction() {
+        return new RenameAction();
+    }
+
+    /**
+     * Sets the action that renames a connection profile instance. 
+     * This should be called after {@link #init(ICommonActionExtensionSite)} to override
+     * the default RenameAction.
+     * @param action   a RenameAction instance
+	 * @since DTP 1.6
+     */
+    protected void setRenameAction( RenameAction action ) {
+        renameAction = action;
+    }
+
+    /**
+     * Creates the action that deletes a connection profile instance.
+     * Subclass may override to create an extended action.
+     * @return a DeleteAction instance
+     * @since DTP 1.6
+     */
+    protected DeleteAction createDeleteAction() {
+        return new DeleteAction();
+    }
+
+    /**
+     * Sets the action that deletes a connection profile instance. 
+     * This should be called after {@link #init(ICommonActionExtensionSite)} to override
+     * the default DeleteAction.
+     * @param action   a DeleteAction instance
+	 * @since DTP 1.6
+     */
+    protected void setDeleteAction( DeleteAction action ) {
+        deleteAction = action;
+    }
+    
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.actions.ActionGroup#updateActionBars()
+	 */
+	public void updateActionBars() {
+		IStructuredSelection selection = null;
+		
+		if (getContext().getSelection() != null)
+			selection = (IStructuredSelection) getContext()
+				.getSelection();
+
+		addCPAction.selectionChanged(addCPAction, selection);
+		renameAction.selectionChanged(renameAction, selection);
+		deleteAction.selectionChanged(deleteAction, selection);
+		
+		Object selected = selection.getFirstElement();
+		boolean hasProperties = ViewPropertyAction.hasContributors(selected);
+		propAction.setEnabled(hasProperties);
+		undoRedoGroup.updateActionBars();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/navigator/actions/RefreshActionProvider.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/navigator/actions/RefreshActionProvider.java
new file mode 100644
index 0000000..c60b5d3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/navigator/actions/RefreshActionProvider.java
@@ -0,0 +1,143 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.navigator.actions;
+
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ui.LocalRepositoryNode;
+import org.eclipse.datatools.connectivity.ui.actions.RefreshViewAction;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.actions.ActionContext;
+import org.eclipse.ui.actions.ActionFactory;
+import org.eclipse.ui.navigator.CommonActionProvider;
+import org.eclipse.ui.navigator.ICommonActionExtensionSite;
+
+/**
+ * Adds a refresh menu item to all DSE objects. This refresh
+ * action can then be overridden as appropriate by profile
+ * implementers.
+ * 
+ * @author brianf
+ *
+ */
+public class RefreshActionProvider extends CommonActionProvider {
+
+	private StructuredViewer aViewer;
+    private IStructuredSelection selection;
+    private RefreshViewAction addRefreshAction;
+    
+    /**
+     * Constructor
+     */
+    public RefreshActionProvider() {
+		super();
+	}
+    
+    /**
+     * 
+     */
+    private void makeActions() {
+		addRefreshAction = new RefreshViewAction(aViewer);
+		addRefreshAction.setActionDefinitionId("org.eclipse.ui.file.refresh"); //$NON-NLS-1$
+    }
+
+	/**
+	 * @param selection
+	 */
+	private void setSelection ( IStructuredSelection selection ) {
+        this.selection = selection;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.ICommonActionProvider#setActionContext(org.eclipse.ui.actions.ActionContext)
+	 */
+	public void setActionContext(ActionContext aContext) {
+        if (aContext.getSelection() instanceof IStructuredSelection)
+        {
+        	setSelection((IStructuredSelection) aContext.getSelection());
+        }
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.ICommonActionProvider#fillContextMenu(org.eclipse.jface.action.IMenuManager)
+	 */
+	public void fillContextMenu(IMenuManager manager) {
+		boolean hasSelection = false;
+		if (selection != null && selection.getFirstElement() != null)
+			hasSelection = true;
+		if (hasSelection ) {
+			
+			// add the refresh action to everything, but only 
+			// enable it by default for ICategory or IConnectionProfile nodes
+			boolean isCategory = selection.getFirstElement() instanceof ICategory;
+			boolean isProfile = selection.getFirstElement() instanceof IConnectionProfile;
+			boolean isLocalRepoNode = selection.getFirstElement() instanceof LocalRepositoryNode;
+			if (!isCategory && !isProfile && !isLocalRepoNode) {
+				addRefreshAction.setEnabled(false);
+			}
+			else {
+				addRefreshAction.setEnabled(true);
+			}
+			
+			manager.insertAfter("slot3", //$NON-NLS-1$
+					(IAction) addRefreshAction);
+		}
+
+		return;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.ICommonActionProvider#fillActionBars(org.eclipse.ui.IActionBars)
+	 */
+	public void fillActionBars(IActionBars bars) {
+		bars.setGlobalActionHandler(ActionFactory.REFRESH.getId(),
+				addRefreshAction);
+        updateActionBars();
+        return;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.CommonActionProvider#init(org.eclipse.ui.navigator.ICommonActionExtensionSite)
+	 */
+	public void init(ICommonActionExtensionSite aConfig) {
+        this.aViewer = aConfig.getStructuredViewer();
+        makeActions();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.actions.ActionGroup#setContext(org.eclipse.ui.actions.ActionContext)
+	 */
+	public void setContext(ActionContext context) {
+		super.setContext(context);
+		if (context != null && context.getSelection() instanceof IStructuredSelection)
+        {
+        	setSelection((IStructuredSelection) context.getSelection());
+        }
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.actions.ActionGroup#updateActionBars()
+	 */
+	public void updateActionBars() {
+		IStructuredSelection selection = (IStructuredSelection) getContext()
+				.getSelection();
+
+		addRefreshAction.selectionChanged(addRefreshAction, selection);
+	}
+	
+	public StructuredViewer getViewer() {
+		return this.aViewer;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/navigator/actions/ShowCategoryAction.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/navigator/actions/ShowCategoryAction.java
new file mode 100644
index 0000000..4c6471d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/navigator/actions/ShowCategoryAction.java
@@ -0,0 +1,103 @@
+/*******************************************************************************
+ * Copyright (c) 2005-2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.navigator.actions;
+
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.navigator.CommonNavigator;
+import org.eclipse.ui.navigator.IExtensionStateModel;
+import org.eclipse.ui.navigator.INavigatorContentService;
+
+/**
+ * @author shongxum, brianf
+ * 
+ */
+public class ShowCategoryAction implements IViewActionDelegate {
+
+	IViewPart view = null;
+	Object currentInput = ResourcesPlugin.getWorkspace().getRoot();
+	boolean currentState = true;
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)
+	 */
+	public void init(IViewPart view) {
+		this.view = view;
+		if (view instanceof CommonNavigator) {
+			IExtensionStateModel stateModel = ((CommonNavigator)view).getNavigatorContentService().findStateModel(ConnectivityUIPlugin.SERVERS_VIEW_CONTENT_EXTENSION_ID);
+			//set default show_category stateprop to true
+			stateModel.setBooleanProperty(ConnectivityUIPlugin.PROP_SHOW_CATEGORIES,
+					currentState);
+		}
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+	 */
+	public void run(IAction action) {
+		currentState = action.isChecked();
+		changeShowCategorySetting(currentState);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction,
+	 *      org.eclipse.jface.viewers.ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+		action.setEnabled(true);
+		action.setChecked(currentState);
+	}
+
+	/**
+	 * Set the show category setting on the content provider.
+	 * 
+	 * @param flag
+	 */
+	private void changeShowCategorySetting(boolean flag) {
+		if (view instanceof CommonNavigator) {
+			CommonNavigator commonNav = (CommonNavigator) view;
+			if (currentInput == null) {
+				// do nothing
+			}
+			else if (currentInput instanceof ICategory
+					|| currentInput instanceof ProfileManager
+					|| currentInput instanceof IWorkspaceRoot
+					|| currentInput instanceof IConnectionProfile) {
+				INavigatorContentService ncs = commonNav
+						.getNavigatorContentService();
+				IExtensionStateModel stateModel = ncs
+						.findStateModel(ConnectivityUIPlugin.SERVERS_VIEW_CONTENT_EXTENSION_ID);
+
+				stateModel.setBooleanProperty(ConnectivityUIPlugin.PROP_SHOW_CATEGORIES,
+						flag);
+
+				commonNav.getCommonViewer().refresh();
+				if (flag)
+					commonNav.getCommonViewer().expandToLevel(2);
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/status/DatatoolsStatus.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/status/DatatoolsStatus.java
new file mode 100644
index 0000000..9e9b863
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/status/DatatoolsStatus.java
@@ -0,0 +1,58 @@
+/*******************************************************************************

+ * Copyright (c) 2010 IBM Corporation and others.

+ * 

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ * 

+ * Contributors:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.datatools.connectivity.ui.status;

+

+import org.eclipse.core.runtime.Status;

+import org.eclipse.datatools.connectivity.IConnection;

+import org.eclipse.datatools.connectivity.IConnectionProfile;

+

+/**

+ * A Status object that contains connectivity information

+ * as provided in the <code>IConnectionProfile</code> and <code>IConnection</code>

+ * 

+ */

+public class DatatoolsStatus extends Status

+{

+	private String name;

+	private IConnectionProfile profile;

+	private IConnection connection;

+	

+	public DatatoolsStatus(int severity, String pluginId, Throwable throwable, 

+			IConnectionProfile profile, IConnection connection)

+	{

+		super(severity, pluginId, (throwable == null ? "" : throwable.getLocalizedMessage()), throwable);

+		

+		this.connection = connection;

+		this.profile = profile;

+	}

+	

+	public IConnection getConnection()

+	{

+		return connection;

+	}

+	

+	public IConnectionProfile getConnectionProfile()

+	{

+		return profile;

+	}

+	

+	public void setName(String name)

+	{

+		this.name = name;

+	}

+	

+	public String getName()

+	{

+		return name;

+	}

+}

+

diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/status/DatatoolsStatusListener.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/status/DatatoolsStatusListener.java
new file mode 100644
index 0000000..f8c8736
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/status/DatatoolsStatusListener.java
@@ -0,0 +1,59 @@
+/*******************************************************************************

+ * Copyright (c) 2010 IBM Corporation and others.

+ * 

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ * 

+ * Contributors:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.datatools.connectivity.ui.status;

+

+import org.eclipse.core.runtime.IStatus;

+import org.eclipse.core.runtime.jobs.IJobChangeEvent;

+import org.eclipse.core.runtime.jobs.JobChangeAdapter;

+import org.eclipse.datatools.connectivity.IConnection;

+import org.eclipse.datatools.connectivity.IConnectionProfile;

+import org.eclipse.datatools.connectivity.IManagedConnection;

+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;

+import org.eclipse.datatools.connectivity.sqm.internal.core.util.ConnectionUtil;

+import org.eclipse.ui.statushandlers.StatusManager;

+

+/**

+ * A <code>IJobChangeListener</code> to handle <code>DatatoolsStatus</code> 

+ *

+ */

+public class DatatoolsStatusListener extends JobChangeAdapter

+{

+	private IConnectionProfile profile;

+	

+	public DatatoolsStatusListener(IConnectionProfile profile)

+	{

+		this.profile = profile;

+	}

+	

+	public void done(IJobChangeEvent event) {

+		IManagedConnection managedConnection = 

+			profile.getManagedConnection(ConnectionUtil.CONNECTION_TYPE);

+

+		if (managedConnection != null) {

+			IConnection internalConnection = managedConnection.getConnection();

+			if (internalConnection == null || internalConnection.getConnectException() == null) {

+				return;

+			}

+			

+			IStatus datatoolsStatus = new DatatoolsStatus(

+					IStatus.ERROR, 

+					ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName(),

+					internalConnection.getConnectException(),

+					profile,

+					internalConnection);

+			

+			((DatatoolsStatus)datatoolsStatus).setName(DatatoolsStatusTypes.CONNECTION_STATUS);

+			StatusManager.getManager().handle(datatoolsStatus, 

+					StatusManager.LOG | StatusManager.SHOW | StatusManager.BLOCK);

+		}

+	}

+}

diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/status/DatatoolsStatusTypes.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/status/DatatoolsStatusTypes.java
new file mode 100644
index 0000000..e77539a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/status/DatatoolsStatusTypes.java
@@ -0,0 +1,22 @@
+/*******************************************************************************

+ * Copyright (c) 2010 IBM Corporation and others.

+ * 

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ * 

+ * Contributors:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.datatools.connectivity.ui.status;

+

+/**

+ * <code>DatatoolsStatus</code> can be further divided by type in case

+ * different types of SQLExceptions should be handled differently

+ *

+ */

+public class DatatoolsStatusTypes

+{

+	public static final String CONNECTION_STATUS = "org.eclipse.datatools.connection.status";

+}

diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/status/IConnectionExceptionHandler.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/status/IConnectionExceptionHandler.java
new file mode 100644
index 0000000..161c71b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/status/IConnectionExceptionHandler.java
@@ -0,0 +1,36 @@
+/*******************************************************************************

+ * Copyright (c) 2010 IBM Corporation and others.

+ * 

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ * 

+ * Contributors:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.datatools.connectivity.ui.status;

+

+import java.sql.SQLException;

+

+import org.eclipse.datatools.connectivity.IConnection;

+

+/**

+ * When a connection error occurs, the SQLException generated may not always contain 

+ * useful information.  

+ * 

+ * A ConnectionExceptionHandler can take the exception and context and use it 

+ * to generate a new SQLException that contains a better message.

+ *

+ */

+public interface IConnectionExceptionHandler 

+{

+	/**

+	 * Generates a SQLException with a platform-specific, meaningful message

+	 * 

+	 * @param throwable, the original Throwable object, possibly null, to be processed.

+	 * @param connection, IConnection object that generated this Throwable

+	 * @return SQLException with a more user-friendly message

+	 */

+	public SQLException generateConnectionException(Throwable throwable, IConnection connection);

+}

diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/status/StatusHandlerService.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/status/StatusHandlerService.java
new file mode 100644
index 0000000..057ef36
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/status/StatusHandlerService.java
@@ -0,0 +1,103 @@
+/*******************************************************************************

+ * Copyright (c) 2010 IBM Corporation and others.

+ * 

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ * 

+ * Contributors:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.datatools.connectivity.ui.status;

+

+import org.eclipse.core.runtime.IConfigurationElement;

+import org.eclipse.core.runtime.IExtension;

+import org.eclipse.core.runtime.IExtensionPoint;

+import org.eclipse.core.runtime.IProduct;

+import org.eclipse.core.runtime.Platform;

+import org.eclipse.datatools.connectivity.IConnectionProfile;

+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;

+

+public class StatusHandlerService

+{

+	private static final String STATUS_HANDLER_EXTENSION_POINT_ID = 

+		"org.eclipse.ui.statusHandlers";	

+	private static final String STATUS_HANDLER_PRODUCT_BINDING = "statusHandlerProductBinding";

+	private static final String PRODUCT_ID = "productId";

+	

+	

+	private static final String PLATFORM_HANDLER_EXTENSION_POINT_ID = 

+		"org.eclipse.datatools.connectivity.ui.connectionExceptionHandler";

+	private final static String HANDLER = "handler";

+	private final static String VENDOR = "vendor";

+	

+	/**

+	 * @param profile

+	 * @return true, if there is a status handler for the current product and 

+	 * an <code>IConnectionExceptionHandler</code> for the current platform. 

+	 * Otherwise, return false

+	 */

+	public static boolean doesDataToolsHandlerExist(IConnectionProfile profile)

+	{					

+		return doesHandlerExistForProduct() && doesHandlerExistForPlatform(profile);

+	}

+

+	private static boolean doesHandlerExistForProduct() {

+		boolean productMappingExists = false;

+		IExtensionPoint extensionPoint = 

+			Platform.getExtensionRegistry().getExtensionPoint(STATUS_HANDLER_EXTENSION_POINT_ID);

+		IExtension[] extensions = extensionPoint.getExtensions();

+		

+		if (extensions.length == 0) {

+			return productMappingExists;

+		}

+		

+		findProductStatusHandler:

+		for (int i = 0; i < extensions.length; i++) {

+			IExtension extension = extensions[i];

+			IConfigurationElement[] elements = extension.getConfigurationElements();

+			

+			for (int k = 0; k < elements.length; k++) {

+				if (elements[k].getName().equals(STATUS_HANDLER_PRODUCT_BINDING)) {

+					String productID = elements[k].getAttribute(PRODUCT_ID);

+					IProduct product = Platform.getProduct();

+					if (product.getId().equals(productID)) {

+						productMappingExists = true;

+						break findProductStatusHandler; 

+					}

+				}			

+			}

+		}

+		return productMappingExists;

+	}

+	

+	private static boolean doesHandlerExistForPlatform(IConnectionProfile profile)

+	{

+		boolean exists = false;

+		

+		String vendor = profile.getBaseProperties().getProperty(

+                IJDBCDriverDefinitionConstants.DATABASE_VENDOR_PROP_ID);

+		

+		IExtensionPoint extensionPoint = 

+			Platform.getExtensionRegistry().getExtensionPoint(PLATFORM_HANDLER_EXTENSION_POINT_ID);

+		

+		IExtension[] extensions = extensionPoint.getExtensions();

+		findExtension: 

+		for (int i = 0; i < extensions.length; i++) {

+			IExtension extension = extensions[i];

+			IConfigurationElement[] elements = extension.getConfigurationElements();

+			for( int j = 0; j < elements.length; j++) {

+				if(elements[j].getName().equals(HANDLER)) {

+					String extensionVendor = elements[j].getAttribute(VENDOR);

+					if (extensionVendor.equalsIgnoreCase(vendor)) {

+						exists = true;

+						break findExtension;

+					}

+					break;

+				}

+			}

+		}

+		return exists;

+	}

+}

diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/ConnectionProfileDetailsPage.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/ConnectionProfileDetailsPage.java
new file mode 100644
index 0000000..4db1ad3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/ConnectionProfileDetailsPage.java
@@ -0,0 +1,293 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2009 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *  shongxum - initial API and implementation
+ *  Actuate Corporation - refactored to improve extensibility
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.wizards;
+
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.IHelpConstants;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.BaseWizardPage;
+import org.eclipse.datatools.connectivity.ui.Messages;
+import org.eclipse.datatools.connectivity.ui.PingJob;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.help.IContextProvider;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.BusyIndicator;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * @author shongxum
+ */
+public abstract class ConnectionProfileDetailsPage 
+	extends BaseWizardPage
+	implements IContextProvider {
+	
+	protected Button btnPing;
+	
+	private boolean defaultAutoConnectOnFinishFlag = true;
+
+	private Button autoConnectOnFinishButton = null;
+	private Button autoConnectOnStartupButton = null;
+
+	private boolean _showAutoConnect = true;
+	private boolean _showAutoConnectOnFinish = true;
+	private boolean _showPing = true;
+
+	private ContextProviderDelegate contextProviderDelegate =
+		new ContextProviderDelegate(ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName());
+
+	/**
+	 * @param name
+	 */
+	public ConnectionProfileDetailsPage(String name) {
+		super(name);
+	}
+
+	/**
+	 * @param pageName
+	 * @param title
+	 * @param titleImage
+	 */
+	public ConnectionProfileDetailsPage(String pageName, String title,
+										ImageDescriptor titleImage) {
+		super(pageName, title, titleImage);
+	}
+
+	public void createControl(Composite parent) {
+		Composite container = new Composite(parent, SWT.NULL);
+		final GridLayout gridLayout = new GridLayout(2, false);
+		gridLayout.horizontalSpacing = 0;
+		gridLayout.marginWidth = 0;
+		gridLayout.marginHeight = 0;
+		container.setLayout(gridLayout);
+		
+		// Client shouldn't call setControl again.
+		setControl(container);
+
+		// setting help now rather than at the end so that 
+		// extenders can override with different context IDs in their
+		// custom UI
+		getShell().setData( HelpUtil.CONTEXT_PROVIDER_KEY, this);
+		HelpUtil.setHelp( getControl(), HelpUtil.getContextId(IHelpConstants.CONTEXT_ID_NEW_CONNECTION_PROFILE_PAGE, ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName()));
+
+		final Composite composite = new Composite(container, SWT.NONE);
+		FillLayout flayout = new FillLayout();
+		flayout.marginHeight = 0;
+		flayout.marginWidth = 0;
+		composite.setLayout(flayout);
+        GridData compositeGD = new GridData(GridData.FILL_BOTH);
+        compositeGD.horizontalSpan = 2;
+		composite.setLayoutData(compositeGD);
+
+		createCustomControl(composite);
+		
+		
+		if (_showAutoConnectOnFinish) {
+			autoConnectOnFinishButton = new Button(container, SWT.CHECK);
+			autoConnectOnFinishButton.setText(Messages.ConnectionProfileDetailsPage_Autoconnect_finish);
+			autoConnectOnFinishButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
+			autoConnectOnFinishButton.addSelectionListener(new SelectionListener() {
+	
+				public void widgetDefaultSelected(SelectionEvent e) {
+					ConnectionProfileDetailsPage.this.setAutoConnectFinish(
+							ConnectionProfileDetailsPage.this.autoConnectOnFinishButton.getSelection());
+				}
+	
+				public void widgetSelected(SelectionEvent e) {
+					widgetDefaultSelected(e);
+				}
+			});
+			autoConnectOnFinishButton.setSelection(defaultAutoConnectOnFinishFlag);
+		}
+
+		if (_showPing) {
+			btnPing = new Button(container, SWT.NONE);
+			btnPing.addSelectionListener(new SelectionAdapter() {
+	
+				public void widgetSelected(SelectionEvent e) {
+					testConnection();
+				}
+			});
+
+			GridData pingGD = new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.FILL_HORIZONTAL);
+			if (!_showAutoConnectOnFinish)
+				pingGD.horizontalSpan = 2;
+			btnPing.setLayoutData(pingGD);
+			btnPing.setText(ConnectivityUIPlugin.getDefault().getResourceString(
+					"ConnectionProfileDetailsPage.Button.TestConnection")); //$NON-NLS-1$
+
+		}
+
+		if (_showAutoConnect) {
+			autoConnectOnStartupButton = new Button(container, SWT.CHECK);
+			autoConnectOnStartupButton.setText(Messages.ConnectionProfileDetailsPage_Autoconnect_startup);
+			GridData acStartupGD = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
+			if (!_showPing)
+				acStartupGD.horizontalSpan = 2;
+			autoConnectOnStartupButton.setLayoutData(acStartupGD);
+			autoConnectOnStartupButton.addSelectionListener(new SelectionListener() {
+	
+				public void widgetDefaultSelected(SelectionEvent e) {
+					ConnectionProfileDetailsPage.this.setAutoConnect(
+							ConnectionProfileDetailsPage.this.autoConnectOnStartupButton.getSelection());
+				}
+	
+				public void widgetSelected(SelectionEvent e) {
+					widgetDefaultSelected(e);
+				}
+			});
+		}
+
+		if (this.getWizard() instanceof NewConnectionProfileWizard) {
+			NewConnectionProfileWizard wiz =
+				(NewConnectionProfileWizard) this.getWizard();
+			wiz.getProfilePage().setAutoConnectOnFinish(defaultAutoConnectOnFinishFlag);
+		}
+	}
+
+	public abstract void createCustomControl(Composite parent);
+
+	protected void testConnection() {
+		IWizard wiz = getWizard();
+		if (wiz instanceof NewConnectionProfileWizard) {
+			NewConnectionProfileWizard wizard = (NewConnectionProfileWizard) wiz;
+			ConnectionProfile profile = new ConnectionProfile(wizard
+					.getProfileName(), wizard.getProfileDescription(), wizard
+					.getProfileProviderID(), wizard.getParentProfile(), wizard
+					.getProfileIsAutoConnect());
+			
+			// ping fails if an error message is set for the page
+			// this fixes BZ 173568 - BTF
+			if (this.getErrorMessage() != null) {
+				MessageDialog.openError(getWizard().getContainer().getShell(),
+						ConnectivityUIPlugin.getDefault().getResourceString(
+								"actions.ping.failure"), //$NON-NLS-1$
+								this.getErrorMessage());
+				return;
+			}
+			
+			profile.setBaseProperties(wizard.getProfileProperties());
+
+			BusyIndicator.showWhile( getShell().getDisplay(), 
+			        createTestConnectionRunnable( profile ) );			
+		}
+	}
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+
+	protected void setPingButtonEnabled(boolean enabled)
+    {
+        if (btnPing != null && !btnPing.isDisposed())
+        {
+            btnPing.setEnabled(enabled);
+        }
+    }
+
+	protected void setPingButtonVisible(boolean visible)
+    {
+        if (btnPing != null && !btnPing.isDisposed())
+        {
+            btnPing.setVisible(visible);
+        }
+    }
+	
+	protected Runnable createTestConnectionRunnable( final IConnectionProfile profile )
+	{
+        final Job pingJob = new PingJob( getShell(), profile );
+        pingJob.schedule();
+        return new Runnable() 
+        {
+            public void run() 
+            {
+                try 
+                {
+                    pingJob.join();
+                }
+                catch (InterruptedException e) 
+                {
+                }
+            }
+        };
+	}
+	
+	private void setAutoConnectFinish ( boolean flag ) {
+		if (this.getWizard() instanceof NewConnectionProfileWizard) {
+			NewConnectionProfileWizard wiz =
+				(NewConnectionProfileWizard) this.getWizard();
+			wiz.getProfilePage().setAutoConnectOnFinish(flag);
+		}
+	}
+
+	private void setAutoConnect ( boolean flag ) {
+		if (this.getWizard() instanceof NewConnectionProfileWizard) {
+			NewConnectionProfileWizard wiz =
+				(NewConnectionProfileWizard) this.getWizard();
+			wiz.getProfilePage().setAutoConnect(flag);
+		}
+	}
+	
+	protected void setAutoConnectOnFinishDefault( boolean flag ){
+		this.defaultAutoConnectOnFinishFlag = flag;
+	}
+	
+	protected boolean getAutoConnectOnFinishDefault() {
+		return this.defaultAutoConnectOnFinishFlag;
+	}
+	
+	protected void setShowAutoConnectOnFinish ( boolean flag ) {
+		this._showAutoConnectOnFinish = flag;
+	}
+
+	protected void setShowAutoConnect ( boolean flag ) {
+		this._showAutoConnect = flag;
+	}
+
+	/**
+	 * Specifies whether to create the controls for the auto connect options on this page.
+	 * @param flag true to create related controls; false otherwise
+     * @since DTP 1.7.2
+	 */
+	public void setCreateAutoConnectControls( boolean flag )
+	{
+        setAutoConnectOnFinishDefault( flag );
+        setShowAutoConnectOnFinish( flag );
+        setShowAutoConnect( flag );
+	}
+	
+	protected void setShowPing ( boolean flag ) {
+		this._showPing = flag;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/ConnectionProfileSummaryPage.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/ConnectionProfileSummaryPage.java
new file mode 100644
index 0000000..1f55f3b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/ConnectionProfileSummaryPage.java
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.wizards;
+
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.IHelpConstants;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.ISummaryDataSource;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.SummaryWizardPage;
+import org.eclipse.datatools.connectivity.ui.PingJob;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.help.IContextProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.BusyIndicator;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * Summary Page + Test Connection
+ * 
+ * @author shongxum
+ */
+public class ConnectionProfileSummaryPage 
+	extends SummaryWizardPage
+	implements IContextProvider {
+
+	private ISummaryDataSource dataSource;
+
+	private ContextProviderDelegate contextProviderDelegate =
+		new ContextProviderDelegate(ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName());
+
+	/**
+	 * @param source
+	 */
+	public ConnectionProfileSummaryPage(ISummaryDataSource source) {
+		super(source);
+		dataSource = source;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+	 */
+	public void createControl(Composite parent) {
+		super.createControl(parent);
+		Composite container = (Composite) getControl();
+		final Button button = new Button(container, SWT.NONE);
+		button.addSelectionListener(new SelectionAdapter() {
+
+			public void widgetSelected(SelectionEvent e) {
+				testConnection();
+			}
+		});
+		button.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
+		button.setText(ConnectivityUIPlugin.getDefault().getResourceString("ConnectionProfileSummaryPage.button.testConnection")); //$NON-NLS-1$
+//		PlatformUI.getWorkbench().getHelpSystem().setHelp(parent,
+//				IHelpConstants.CONTEXT_ID_CONNECTION_PROFILE_SUMMARY_PAGE);
+		getShell().setData( HelpUtil.CONTEXT_PROVIDER_KEY, this);
+		HelpUtil.setHelp( getControl(), HelpUtil.getContextId(IHelpConstants.CONTEXT_ID_CONNECTION_PROFILE_SUMMARY_PAGE, ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName()));
+
+	}
+
+	protected void testConnection() {
+		if (dataSource instanceof NewConnectionProfileWizard) {
+			NewConnectionProfileWizard wizard = (NewConnectionProfileWizard) dataSource;
+			ConnectionProfile profile = new ConnectionProfile(wizard
+					.getProfileName(), wizard.getProfileDescription(), wizard
+					.getProfileProviderID(), wizard.getParentProfile(), wizard
+					.getProfileIsAutoConnect());
+			profile.setBaseProperties(wizard.getProfileProperties());
+
+			final Job pingJob = new PingJob(getShell(), profile);
+			pingJob.schedule();
+			BusyIndicator.showWhile(getShell().getDisplay(), new Runnable() {
+
+				public void run() {
+					try {
+						pingJob.join();
+					}
+					catch (InterruptedException e) {
+					}
+				}
+			});
+		}
+	}
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/ExtensibleNewConnectionProfileWizard.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/ExtensibleNewConnectionProfileWizard.java
new file mode 100644
index 0000000..1ec1594
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/ExtensibleNewConnectionProfileWizard.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.wizards;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.IHelpConstants;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.swt.widgets.Composite;
+
+public class ExtensibleNewConnectionProfileWizard extends
+		NewConnectionProfileWizard {
+
+	private ExtensibleProfileDetailsWizardPage wizardPage = null;
+
+	private boolean isWizardPageCreated = true;
+
+	public ExtensibleNewConnectionProfileWizard(
+			ExtensibleProfileDetailsWizardPage detailsWizardPage) {
+		super();
+		wizardPage = detailsWizardPage;
+		setWindowTitle(ConnectivityUIPlugin.getDefault().getResourceString(
+				"ExtensibleNewConnectionProfileWizard.title")); //$NON-NLS-1$
+	}
+
+	public void createPageControls(Composite pageContainer) {
+		super.createPageControls(pageContainer);
+		getShell().setData(HelpUtil.CONTEXT_PROVIDER_KEY, this);
+		HelpUtil.setHelp(getShell(), HelpUtil.getContextId(
+				IHelpConstants.GENERIC_DB_PROFILE_WIZARD,
+				ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName()));
+	}
+
+	public void addCustomPages() {
+		addPage(wizardPage);
+		setSkipProfileNamePage(true);
+	}
+
+	public Properties getProfileProperties() {
+		return wizardPage.getProperties();
+	}
+
+	public NewConnectionProfileWizardPage getProfilePage() {
+		return mProfilePage;
+	}
+
+	public boolean canFinish() {
+		// This guarantees the Ping button is correctly enabled/disabled.
+		if (isWizardPageCreated) {
+			isWizardPageCreated = false;
+			wizardPage.determinePageCompletion();
+		}
+		return super.canFinish();
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/ExtensibleProfileDetailsPropertyPage.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/ExtensibleProfileDetailsPropertyPage.java
new file mode 100644
index 0000000..bcad8ec
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/ExtensibleProfileDetailsPropertyPage.java
@@ -0,0 +1,182 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.wizards;
+
+import java.util.Enumeration;
+import java.util.Properties;
+
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.eclipse.datatools.connectivity.ConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.DriverListCombo;
+import org.eclipse.datatools.connectivity.internal.ui.IHelpConstants;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.DriverUIContributorComposite;
+import org.eclipse.datatools.connectivity.sqm.core.SQMServices;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+public class ExtensibleProfileDetailsPropertyPage extends
+		ProfileDetailsPropertyPage implements IDriverUIContributorInformation {
+	private String driverCategoryID = ""; //$NON-NLS-1$
+
+	private DriverListCombo driverCombo = null;
+
+	private DriverUIContributorComposite contributedUIComposite = null;
+
+	private Properties properties = null;
+
+	/**
+	 * Requires that a mapping from the driver category ID be made from the provider ID via
+	 * the mappings extension point.
+	 */
+	public ExtensibleProfileDetailsPropertyPage() {
+		super();
+		noDefaultAndApplyButton();
+
+		/*
+		 * This bit of code uses the new provider ID mapping functionality added
+		 * as an experimental API in DTP 1.7.
+		 * <p><strong>EXPERIMENTAL</strong>. This code has been added as
+		 * part of a work in progress. There is no guarantee that this API will
+		 * work or that it will remain the same. Please do not use this API without
+		 * consulting with the DTP Connectivity team.</p>
+		 */
+		this.driverCategoryID = SQMServices.getProviderIDMappingRegistry().getCategoryIDforProviderID(getConnectionProfile().getProviderId());
+	}
+	
+	public ExtensibleProfileDetailsPropertyPage(String driverCategoryID) {
+		super();
+		noDefaultAndApplyButton();
+		this.driverCategoryID = driverCategoryID;
+	}
+
+	protected Properties collectProperties() {
+		return getProperties();
+	}
+
+	protected void createCustomContents(Composite parent, boolean isReadOnly) {
+		/*
+		 * This bit of code uses the new provider ID mapping functionality added
+		 * as an experimental API in DTP 1.7.
+		 * <p><strong>EXPERIMENTAL</strong>. This code has been added as
+		 * part of a work in progress. There is no guarantee that this API will
+		 * work or that it will remain the same. Please do not use this API without
+		 * consulting with the DTP Connectivity team.</p>
+		 */
+		String tempDriverCategoryID = SQMServices.getProviderIDMappingRegistry().getCategoryIDforProviderID(getConnectionProfile().getProviderId());
+		if (tempDriverCategoryID != null && tempDriverCategoryID.trim().length() > 0) {
+			this.driverCategoryID = tempDriverCategoryID;
+		}
+		
+		parent.setLayout(new GridLayout());
+
+		driverCombo = new DriverListCombo(isReadOnly);
+		driverCombo
+				.setLabelText(ConnectivityUIPlugin
+						.getDefault()
+						.getResourceString(
+								"ExtensibleProfileDetailsWizardPage.driverCombo.label")); //$NON-NLS-1$
+		driverCombo.setCategory(this.driverCategoryID);
+		driverCombo.setNullDriverIsValid(false);
+		driverCombo.createContents(parent);
+
+		contributedUIComposite = new DriverUIContributorComposite(parent, this,
+				this, isReadOnly);
+
+		driverCombo.addChangeListener(new ChangeListener() {
+			public void stateChanged(ChangeEvent e) {
+				handleDriverComboSelectionChangeEvent(e);
+			}
+		});
+
+		if (driverCombo.getErrorMessage() != null) {
+			setErrorMessage(driverCombo.getErrorMessage());
+		}
+
+		initialize();
+	}
+
+	protected Control createContents(Composite parent) {
+		Control contents = super.createContents(parent);
+		HelpUtil.setHelp( getControl(), HelpUtil.getContextId(IHelpConstants.GENERIC_DB_PROFILE_PROPERTY_PAGE, ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName()));
+		return contents;
+	}
+
+	private void initialize() {
+		IConnectionProfile connectionProfile = getConnectionProfile();
+		String driverDefinitionID = connectionProfile.getBaseProperties()
+				.getProperty(
+						ConnectionProfileConstants.PROP_DRIVER_DEFINITION_ID);
+		if (driverDefinitionID != null) {
+			driverCombo.setSelectionToID(driverDefinitionID);
+			handleDriverComboSelectionChangeEvent(new ChangeEvent(driverCombo.getCombo()));
+		}
+	}
+
+	private void handleDriverComboSelectionChangeEvent(ChangeEvent e) {
+		if (driverCombo.getErrorMessage() != null) {
+			setErrorMessage(driverCombo.getErrorMessage());
+		}
+		if (driverCombo.getSelectedDriverInstance() != null) {
+			this.properties = copyProperties(getConnectionProfile()
+					.getBaseProperties());
+			this.properties.setProperty(
+					ConnectionProfileConstants.PROP_DRIVER_DEFINITION_ID,
+					driverCombo.getSelectedDriverID());
+		}
+		contributedUIComposite.setDriverTemplateID(driverCombo
+				.getSelectedDriverID());
+	}
+
+	public boolean determinePageCompletion() {
+		boolean isComplete = contributedUIComposite
+				.determineContributorCompletion();
+		if (isComplete) {
+			setErrorMessage(null);
+		}
+		this.setPingButtonEnabled(isComplete);
+		return isComplete;
+	}
+
+	public Properties getProperties() {
+		return this.properties;
+	}
+
+	public void setProperties(Properties properties) {
+		this.properties = properties;
+		determinePageCompletion();
+	}
+
+	private Properties copyProperties(Properties properties) {
+		Properties copy = new Properties();
+		Enumeration propertyKeys = properties.keys();
+		while (propertyKeys.hasMoreElements()) {
+			Object key = propertyKeys.nextElement();
+			copy.put(key, properties.get(key));
+		}
+		return copy;
+	}
+	
+	public Point computeSize(){
+	    return doComputeSize();
+	}
+
+	public void dispose() {
+		this.driverCombo.dispose();
+		super.dispose();
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/ExtensibleProfileDetailsWizardPage.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/ExtensibleProfileDetailsWizardPage.java
new file mode 100644
index 0000000..f12fc4a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/ExtensibleProfileDetailsWizardPage.java
@@ -0,0 +1,188 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Actuate Corporation - fix for Bugzilla 303465
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.wizards;
+
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Properties;
+
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.eclipse.datatools.connectivity.ConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.DriverListCombo;
+import org.eclipse.datatools.connectivity.internal.ui.IHelpConstants;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.DriverUIContributorComposite;
+import org.eclipse.datatools.connectivity.sqm.core.SQMServices;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.jface.dialogs.DialogPage;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+
+public class ExtensibleProfileDetailsWizardPage extends
+		ConnectionProfileDetailsPage implements IDriverUIContributorInformation {
+
+	private String driverCategoryID = ""; //$NON-NLS-1$
+
+	private DriverListCombo driverCombo = null;
+
+	private DriverUIContributorComposite contributedUIComposite = null;
+
+	private Properties properties = null;
+
+	/**
+	 * Requires that a mapping from the driver category ID be made from the provider ID via
+	 * the mappings extension point.
+	 */
+	public ExtensibleProfileDetailsWizardPage(String wizardPageName) {
+		super(wizardPageName);
+		setTitle(ConnectivityUIPlugin.getDefault().getResourceString(
+				"ExtensibleProfileDetailsWizardPage.title")); //$NON-NLS-1$
+		setDescription(ConnectivityUIPlugin.getDefault().getResourceString(
+				"ExtensibleProfileDetailsWizardPage.description")); //$NON-NLS-1$
+	}
+	
+	public ExtensibleProfileDetailsWizardPage(String wizardPageName,
+			String driverCategoryID) {
+		super(wizardPageName);
+		this.driverCategoryID = driverCategoryID;
+		setTitle(ConnectivityUIPlugin.getDefault().getResourceString(
+				"ExtensibleProfileDetailsWizardPage.title")); //$NON-NLS-1$
+		setDescription(ConnectivityUIPlugin.getDefault().getResourceString(
+				"ExtensibleProfileDetailsWizardPage.description")); //$NON-NLS-1$
+	}
+
+	public void createCustomControl(Composite parent) {
+		/*
+		 * This bit of code uses the new provider ID mapping functionality added
+		 * as an experimental API in DTP 1.7.
+		 * <p><strong>EXPERIMENTAL</strong>. This code has been added as
+		 * part of a work in progress. There is no guarantee that this API will
+		 * work or that it will remain the same. Please do not use this API without
+		 * consulting with the DTP Connectivity team.</p>
+		 */
+		IWizard wiz = getWizard();
+		if (wiz instanceof ExtensibleNewConnectionProfileWizard) {
+			ExtensibleNewConnectionProfileWizard wizard = (ExtensibleNewConnectionProfileWizard) wiz;
+			String tempDriverCategoryID = SQMServices.getProviderIDMappingRegistry().getCategoryIDforProviderID(wizard.getProfileProviderID());
+			if (tempDriverCategoryID != null && tempDriverCategoryID.trim().length() > 0)
+				this.driverCategoryID = tempDriverCategoryID;
+		}
+
+		parent.setLayout(new GridLayout());
+
+		driverCombo = new DriverListCombo();
+		driverCombo
+				.setLabelText(ConnectivityUIPlugin
+						.getDefault()
+						.getResourceString(
+								"ExtensibleProfileDetailsWizardPage.driverCombo.label")); //$NON-NLS-1$
+		driverCombo.setCategory(this.driverCategoryID);
+		driverCombo.setNullDriverIsValid(false);
+		driverCombo.createContents(parent);
+
+		contributedUIComposite = new DriverUIContributorComposite(parent, this,
+				this, false);
+
+		driverCombo.addChangeListener(new ChangeListener() {
+			public void stateChanged(ChangeEvent e) {
+				handleDriverComboSelectionChangeEvent(e);
+			}
+		});
+		if (driverCombo.getCombo().getItemCount() > 0) {
+			driverCombo.getCombo().select(0);
+		} else if (driverCombo.getErrorMessage() != null) {
+			setMessage(driverCombo.getErrorMessage(), DialogPage.INFORMATION);//ErrorMessage(driverCombo.getErrorMessage());
+		}
+	}
+
+	public void createControl(Composite parent) {
+		super.createControl(parent);
+		HelpUtil.setHelp( getControl(), HelpUtil.getContextId(IHelpConstants.GENERIC_DB_PROFILE_WIZARD_PAGE, ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName()));
+	}
+
+	private void handleDriverComboSelectionChangeEvent(ChangeEvent e) {
+		if (driverCombo.getErrorMessage() != null) {
+			setErrorMessage(driverCombo.getErrorMessage());
+		}
+		else {
+			setMessage(null);
+		}
+		if (driverCombo.getSelectedDriverInstance() != null) {
+			this.properties = copyProperties(driverCombo
+					.getSelectedDriverInstance().getPropertySet()
+					.getBaseProperties());
+			this.properties.setProperty(
+					ConnectionProfileConstants.PROP_DRIVER_DEFINITION_ID,
+					driverCombo.getSelectedDriverID());
+		}
+		contributedUIComposite.setDriverTemplateID(driverCombo
+				.getSelectedDriverID());
+	}
+
+	public boolean determinePageCompletion() {
+		boolean isComplete = contributedUIComposite != null && 
+		            contributedUIComposite.determineContributorCompletion();
+		if (isComplete) {
+			setErrorMessage(null);
+		}
+		this.setPingButtonEnabled(isComplete);
+		this.setPageComplete(isComplete);
+		return isComplete;
+	}
+
+	public Properties getProperties() {
+		return this.properties;
+	}
+
+	public void setProperties(Properties properties) {
+		this.properties = properties;
+		setPageComplete(determinePageCompletion());
+	}
+
+	public List getSummaryData() {
+		List summaryData = new ArrayList();
+		summaryData = contributedUIComposite.getSummaryData();
+		return summaryData;
+	}
+
+	private Properties copyProperties(Properties properties) {
+		Properties copy = new Properties();
+		Enumeration propertyKeys = properties.keys();
+		while (propertyKeys.hasMoreElements()) {
+			Object key = propertyKeys.nextElement();
+			copy.put(key, properties.get(key));
+		}
+		return copy;
+	}
+
+	public boolean isPageComplete() {
+		if (driverCombo == null) // means this control hasn't been instantiated yet
+			return false;
+		if (driverCombo != null && driverCombo.getSelectedDriverID() == null)
+			return false;
+		if (getErrorMessage() != null)
+			return false;
+		return super.isPageComplete();
+	}
+
+	@Override
+	public void dispose() {
+		if (this.driverCombo != null) {
+			this.driverCombo.dispose();
+		}
+		super.dispose();
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/ICPWizard.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/ICPWizard.java
new file mode 100644
index 0000000..62b58ec
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/ICPWizard.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.wizards;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+
+/**
+ * @author shongxum
+ */
+public interface ICPWizard {
+
+	public void initProviderID(String providerID);
+	
+	public void setParentProfile(IConnectionProfile profile);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/IDriverUIContributor.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/IDriverUIContributor.java
new file mode 100644
index 0000000..dc17c78
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/IDriverUIContributor.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.wizards;
+
+import java.util.List;
+
+import org.eclipse.jface.dialogs.DialogPage;
+import org.eclipse.swt.widgets.Composite;
+
+public interface IDriverUIContributor {
+	public Composite getContributedDriverUI(Composite parent, boolean isReadOnly);
+
+	public boolean determineContributorCompletion();
+
+	public void setDialogPage(DialogPage parentPage);
+
+	public void setDriverUIContributorInformation(
+			IDriverUIContributorInformation contributorInformation);
+
+	public void loadProperties();
+
+	public List getSummaryData();
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/IDriverUIContributorInformation.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/IDriverUIContributorInformation.java
new file mode 100644
index 0000000..9bf9f9a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/IDriverUIContributorInformation.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.wizards;
+
+import java.util.Properties;
+
+public interface IDriverUIContributorInformation {
+	public Properties getProperties();
+
+	public void setProperties(Properties properties);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/IProfileWizardProvider.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/IProfileWizardProvider.java
new file mode 100644
index 0000000..f6cc6d1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/IProfileWizardProvider.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.wizards;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @author shongxum
+ */
+public interface IProfileWizardProvider {
+
+	/**
+	 * @return Returns the icon.
+	 */
+	public abstract ImageDescriptor getIcon();
+
+	/**
+	 * In order to reduce resources' leak
+	 * 
+	 * @return Image
+	 */
+	public abstract Image getCachedIcon();
+
+	/**
+	 * @return Returns the id.
+	 */
+	public abstract String getId();
+
+	/**
+	 * @return Returns the name.
+	 */
+	public abstract String getName();
+
+	/**
+	 * @return Returns the description
+	 */
+	public abstract String getDescription();
+
+	/**
+	 * @return Returns the category id
+	 */
+	public abstract String getCategory();
+
+	/**
+	 * Note: do not cache IWizard!!!
+	 * 
+	 * @return Returns the wizard.
+	 */
+	public abstract IWizard getWizard();
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/IWizardCategoryProvider.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/IWizardCategoryProvider.java
new file mode 100644
index 0000000..6fffc74
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/IWizardCategoryProvider.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.wizards;
+
+
+/**
+ * @author shongxum
+ */
+public interface IWizardCategoryProvider extends IProfileWizardProvider {
+
+	/**
+	 * @return Returns the wizard title
+	 */
+	public abstract String getWizardTitle();
+
+	/**
+	 * @return Returns the wizard description
+	 */
+	public abstract String getWizardDescription();
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/NewConnectionProfileWizard.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/NewConnectionProfileWizard.java
new file mode 100644
index 0000000..f759883
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/NewConnectionProfileWizard.java
@@ -0,0 +1,370 @@
+/*******************************************************************************
+ * Copyright (c) 2005-2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *  shongxum - initial API and implementation
+ *  Actuate Corporation - refactored to improve extensibility
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.wizards;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IManagedConnection;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepository;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.IHelpConstants;
+import org.eclipse.datatools.connectivity.internal.ui.SharedImages;
+import org.eclipse.datatools.connectivity.internal.ui.dialogs.ExceptionHandler;
+import org.eclipse.datatools.connectivity.internal.ui.refactoring.ConnectionProfileCreateChange;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.BaseWizard;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.ISkippable;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.ISummaryDataSource;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.SummaryWizardPage;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.help.IContextProvider;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.ltk.core.refactoring.PerformChangeOperation;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.part.ISetSelectionTarget;
+
+/**
+ * Base connection profile wizard
+ * 
+ * @author shongxum
+ */
+public abstract class NewConnectionProfileWizard extends BaseWizard implements
+		INewWizard, ICPWizard, IContextProvider {
+
+	protected NewConnectionProfileWizardPage mProfilePage;
+	protected SummaryWizardPage mSummaryPage;
+	protected String mProviderID;
+	protected IConnectionProfile mParentProfile;
+	
+    private boolean mSkipProfileNamePage = false;
+    private String mProfileName;
+    private String mProfileDesc;
+	private IFinishTask mFinishTask;
+	
+	private boolean mIsFinished = false;
+
+	public NewConnectionProfileWizard() {
+		setWindowTitle(ConnectivityUIPlugin.getDefault().getResourceString(
+				"NewConnectionProfileWizard.title")); //$NON-NLS-1$
+		setDefaultPageImageDescriptor(SharedImages.DESC_WIZBAN);
+	}
+
+	/**
+	 * Clients need to make "return super.performFinish" as the last line of
+	 * their code if they want to override this method
+	 * 
+	 * @see Wizard#performFinish
+	 */
+	public boolean performFinish() {
+		if( mIsFinished )
+			return true;    // has already completed the finish task
+		
+	    // if the finish task is delegated, use it to perform finish
+	    if( mFinishTask != null ) {
+	    	mIsFinished = mFinishTask.performFinish( this );
+	    	return mIsFinished;
+	    }
+	    
+	    // no delegation is specified, perform default finish task
+		try {
+			doFinish();
+		} catch (CoreException e) {
+			ExceptionHandler.showException(getShell(), ConnectivityUIPlugin
+					.getDefault().getResourceString(
+							"NewConnectionProfileWizard.create.failure"), e //$NON-NLS-1$
+					.getLocalizedMessage(), e);
+			mIsFinished = false;
+			return false;
+		}
+		mIsFinished = true;
+		return true;
+	}
+	
+	public boolean isFinished() {
+		return mIsFinished;
+	}
+	
+	private void doFinish() throws CoreException {
+    	// Refactor for finish
+		IConnectionProfile repo = mProfilePage.getRepository();
+		PerformChangeOperation refOperation = new PerformChangeOperation(
+				new ConnectionProfileCreateChange(
+						mProfilePage.getProfileName(), mProfilePage
+								.getProfileDescription(), mProviderID,
+						getProfileProperties(), repo == null ? null : repo
+								.getInstanceID(), mProfilePage.getAutoConnect(),
+						getShell(), mProfilePage.getAutoConnectOnFinish()));
+    	try 
+    	{
+    		ResourcesPlugin.getWorkspace().run(refOperation, null);
+    	}
+    	catch (OperationCanceledException oce) 
+    	{
+    		throw new OperationCanceledException();			
+    	}
+    	catch (CoreException ce) 
+    	{
+    		throw ce;
+    	}	
+    	
+        // get the view part of DSE.
+    	IWorkbenchPart part = null;
+    	if( PlatformUI.getWorkbench().getActiveWorkbenchWindow() != null )
+			part = PlatformUI
+					.getWorkbench()
+					.getActiveWorkbenchWindow()
+					.getActivePage()
+					.findView(
+							"org.eclipse.datatools.connectivity.DataSourceExplorerNavigator");//$NON-NLS-1$
+		
+    	// select the newly created CP in DSE.
+		if (part != null) {
+			IConnectionProfile profile = null;
+			if (repo != null ) {
+				IManagedConnection imc = ((IConnectionProfile) repo)
+					.getManagedConnection(IConnectionProfileRepository.class
+						.getName());				
+				if (imc != null) {
+					IConnectionProfileRepository repository = 
+						(IConnectionProfileRepository) imc.getConnection().getRawConnection();
+					profile = repository.getProfileByName(getProfileName());
+				}
+			}
+			else {
+				profile = ProfileManager.getInstance().getProfileByName(
+						getProfileName());
+			}
+			if (profile == null)
+				return;
+			
+			final ISelection targetSelection = new StructuredSelection(
+					profile);
+			ISetSelectionTarget target = null;
+			if (part instanceof ISetSelectionTarget) {
+				target = (ISetSelectionTarget) part;
+			} else {
+				target = (ISetSelectionTarget) part
+						.getAdapter(ISetSelectionTarget.class);
+			}
+
+			if (target != null) {
+				final ISetSelectionTarget finalTarget = target;
+				getShell().getDisplay().asyncExec(new Runnable() {
+					public void run() {
+						finalTarget.selectReveal(targetSelection);
+					}
+				});
+			}
+		}
+	}
+
+	/**
+	 * @see Wizard#init
+	 */
+	public void init(IWorkbench workbench, IStructuredSelection selection) {
+		// Do nothing
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.ui.wizards.ICPWizard#setProviderID(java.lang.String)
+	 */
+	public void initProviderID(String providerID) {
+		mProviderID = providerID;
+	}
+
+	/**
+	 * Clients needs to add their customized pages here
+	 */
+	public abstract void addCustomPages();
+
+	public void setProfileNameAndDescription() {
+		if( mProfileName != null )
+			mProfilePage.setProfileName( mProfileName );
+		if( mProfileDesc != null )
+			mProfilePage.setProfileDescription( mProfileDesc );
+	}
+
+	public List getSummaryData() {
+		List data = new ArrayList();
+		IWizardPage[] pages = getPages();
+		for (int i = 0; i < pages.length; i++) {
+			if (pages[i] instanceof ISummaryDataSource) {
+				if (pages[i] instanceof ISkippable) {
+					ISkippable page = (ISkippable) pages[i];
+					if (page instanceof NewConnectionProfileWizardPage){
+						// ignore
+					}
+					else if (page.getSkippable()) {
+						continue;
+					}
+				}
+				data.addAll(((ISummaryDataSource) pages[i]).getSummaryData());
+			}
+		}
+		return data;
+	}
+	
+	public String getProfileProviderID() {
+		return mProviderID;
+	}
+
+	public String getProfileName() {
+		return mProfilePage.getProfileName();
+	}
+
+	public void setProfileName( String name )
+	{
+        // cache the value, in case the page is not yet added
+	    mProfileName = name;
+	    if( mProfilePage != null )
+	        mProfilePage.setProfileName( mProfileName );
+	}
+	
+	public void setProfileDescription( String desc )
+	{
+        // cache the value, in case the page is not yet added
+		mProfileDesc = desc;
+	    if( mProfilePage != null )
+	        mProfilePage.setProfileDescription( mProfileDesc );
+	}
+
+	public String getProfileDescription() {
+		return mProfilePage.getProfileDescription();
+	}
+
+	public boolean getProfileIsAutoConnect() {
+		return mProfilePage.getAutoConnect();
+	}
+
+	/**
+	 * Clients need provide implementation to get extra profile properties
+	 * 
+	 * @return
+	 */
+	public abstract Properties getProfileProperties();
+
+	/**
+	 * Clients may override this method to return the real parent profile
+	 * 
+	 * @return
+	 */
+	public String getParentProfile() {
+		return mParentProfile == null ? new String() : mParentProfile.getName();
+	}
+
+	public void setParentProfile(IConnectionProfile profile) {
+		mParentProfile = profile;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.wizard.IWizard#addPages()
+	 */
+	public void addPages() {
+		super.addPages();
+
+		mProfilePage = new NewConnectionProfileWizardPage();
+		addPage(mProfilePage);
+        if( mProfileName != null )
+            mProfilePage.setProfileName( mProfileName );
+        if( mSkipProfileNamePage )
+            doSkipProfileNamePage( true );
+
+		addCustomPages();
+
+		setProfileNameAndDescription();
+
+		mSummaryPage = new SummaryWizardPage(this);
+		addPage(mSummaryPage);
+	}
+
+	public void createPageControls(Composite pageContainer) {
+		super.createPageControls(pageContainer);
+		getShell().setData(HelpUtil.CONTEXT_PROVIDER_KEY, this);
+		HelpUtil.setHelp(getShell(), HelpUtil.getContextId(
+				IHelpConstants.CONTEXT_ID_NEW_CONNECTION_PROFILE_WIZARD,
+				ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName()));
+	}
+
+	private ContextProviderDelegate contextProviderDelegate = new ContextProviderDelegate(
+			ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName());
+
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+	
+	public void setSkipProfileNamePage( boolean skippable )
+	{
+	    // cache the latest setting, in case the page is not yet added
+	    mSkipProfileNamePage = skippable;	    
+	    doSkipProfileNamePage( skippable );
+	}
+	
+	protected void doSkipProfileNamePage( boolean skippable )
+	{
+        if( mProfilePage == null )
+            return;     // page does not exist yet to skip
+
+		mProfilePage.setSkippable( skippable );
+	}
+	
+	public boolean isProfileNamePageSkippable()
+	{
+	    if( mProfilePage != null )
+	        return mProfilePage.getSkippable();
+	    return mSkipProfileNamePage;
+	}
+	
+	public void delegatesTask( IFinishTask task )
+	{
+	    mFinishTask = task;
+	}
+	
+	/**
+	 * Delegation of the wizard's performFinish task.
+	 */
+	public interface IFinishTask
+	{
+	    public boolean performFinish( NewConnectionProfileWizard delegatingWizard );	    
+	}
+	
+	public NewConnectionProfileWizardPage getProfilePage() {
+		return mProfilePage;
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/NewConnectionProfileWizardPage.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/NewConnectionProfileWizardPage.java
new file mode 100644
index 0000000..b593e69
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/NewConnectionProfileWizardPage.java
@@ -0,0 +1,392 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.wizards;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IConnectionProfileProvider;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileManager;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileProvider;
+import org.eclipse.datatools.connectivity.internal.InternalProfileManager;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepository;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepositoryConstants;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.IHelpConstants;
+import org.eclipse.datatools.connectivity.internal.ui.RepositoriesDropList;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.BaseWizardPage;
+import org.eclipse.datatools.help.ContextProviderDelegate;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.help.IContext;
+import org.eclipse.help.IContextProvider;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * @author shongxum
+ */
+public class NewConnectionProfileWizardPage 
+	extends BaseWizardPage 
+	implements IContextProvider {
+
+	private Text mCPName;
+	private Text mCPDesc;
+	private Button mLocalRepository;
+	private RepositoriesDropList mRepositories;
+
+	private String mCPNameStr;
+	private String mCPDescStr;
+    private boolean mCPAutoConnectValue = false;
+    private boolean mCPAutoConnectOnFinishValue = false;
+	private boolean _showAutoConnect = true;
+
+    private static final String EMPTY_STRING = "";      //$NON-NLS-1$
+    
+	private ContextProviderDelegate contextProviderDelegate =
+		new ContextProviderDelegate(ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName());
+
+	/**
+	 * Constructor
+	 */
+	public NewConnectionProfileWizardPage() {
+		this("NewConnectionProfileWizardPage"); //$NON-NLS-1$
+	}
+
+	/**
+	 * Constructor
+	 * 
+	 * @param name
+	 */
+	public NewConnectionProfileWizardPage(String name) {
+		super(name);
+		setTitle(ConnectivityUIPlugin.getDefault().getResourceString(
+				"NewConnectionProfileWizardPage.title")); //$NON-NLS-1$
+		setDescription(ConnectivityUIPlugin.getDefault().getResourceString(
+				"NewConnectionProfileWizardPage.desc")); //$NON-NLS-1$
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+	 */
+	public void createControl(Composite parent) {
+		String providerID = ((NewConnectionProfileWizard) getWizard())
+				.getProfileProviderID();
+		IConnectionProfileProvider provider = ConnectionProfileManager
+				.getInstance().getProvider(providerID);
+		_showAutoConnect = provider.needsMaintainConnection();
+
+		GridData gd;
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridLayout gl = new GridLayout();
+		gl.numColumns = 2;
+		composite.setLayout(gl);
+		// Connection profile name
+		new Label(composite, SWT.NONE).setText(ConnectivityUIPlugin
+				.getDefault().getResourceString(
+						"NewConnectionProfileWizardPage.cp_name")); //$NON-NLS-1$
+		mCPName = new Text(composite, SWT.BORDER);
+		mCPName.addModifyListener(new ModifyListener() {
+
+			public void modifyText(ModifyEvent e) {
+				handleModify();
+			}
+		});
+
+		mCPName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		// Connection profile description
+		new Label(composite, SWT.NONE).setText(ConnectivityUIPlugin
+				.getDefault().getResourceString(
+						"NewConnectionProfileWizardPage.cp_desc")); //$NON-NLS-1$
+		mCPDesc = new Text(composite, SWT.BORDER);
+		mCPDesc.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+		mLocalRepository = new Button(composite, SWT.CHECK);
+		gd = new GridData();
+		gd.horizontalSpan = 2;
+		mLocalRepository.setLayoutData(gd);
+		mLocalRepository.setText(ConnectivityUIPlugin.getDefault()
+				.getResourceString(
+						"NewConnectionProfileWizardPage.localRepository")); //$NON-NLS-1$
+		mLocalRepository.setSelection(true);
+		mLocalRepository.addSelectionListener(new SelectionAdapter() {
+
+			public void widgetSelected(SelectionEvent arg0) {
+				handleLocalRepositoryChecked();
+			}
+			
+		});
+
+		Label label = new Label(composite, SWT.NONE);
+		label.setText(ConnectivityUIPlugin.getDefault().getResourceString(
+				"NewConnectionProfileWizardPage.chooseRepository")); //$NON-NLS-1$
+		mRepositories = new RepositoriesDropList(
+				getWizard() instanceof NewConnectionProfileWizard ? (ConnectionProfileProvider) ConnectionProfileManager
+						.getInstance().getProvider(
+								((NewConnectionProfileWizard) getWizard())
+										.getProfileProviderID())
+						: null, composite);
+		mRepositories.getCombo().setLayoutData(
+				new GridData(GridData.FILL_HORIZONTAL));
+		mRepositories
+				.setInput(ProfileManager
+						.getInstance()
+						.getProfilesByCategory(
+								IConnectionProfileRepositoryConstants.REPOSITORY_CATEGORY_ID));
+		mRepositories.getCombo().setEnabled(!mLocalRepository.getSelection());
+		mRepositories.addSelectionChangedListener(new ISelectionChangedListener() {
+
+			public void selectionChanged(SelectionChangedEvent event) {
+				validate();
+			}
+			
+		});
+		if (mRepositories.hasRepositories()) {
+			if (getWizard() instanceof NewConnectionProfileWizard) {
+				IConnectionProfileProvider icpp = ConnectionProfileManager
+						.getInstance().getProvider(
+								((NewConnectionProfileWizard) getWizard())
+										.getProfileProviderID());
+				if (icpp.getConnectionFactories().containsKey(
+						IConnectionProfileRepository.class.getName())) {
+					// prevent nesting of repositories
+					mLocalRepository.setEnabled(false);
+					mLocalRepository.setVisible(false);
+					label.setVisible(false);
+					mRepositories.getCombo().setVisible(false);
+				}
+				else {
+					IConnectionProfile parentProfile = ProfileManager
+							.getInstance().getProfileByName(
+									((NewConnectionProfileWizard) getWizard())
+											.getParentProfile());
+					if (parentProfile == null) {
+						mRepositories.getCombo().select(0);
+					}
+					else {
+						mRepositories.setSelection(new StructuredSelection(
+								parentProfile), true);
+						if (mRepositories.getSelection().isEmpty()) {
+							mRepositories.getCombo().select(0);
+						}
+						else {
+							mLocalRepository.setSelection(false);
+							handleLocalRepositoryChecked();
+						}
+					}
+				}
+			}
+			else {
+				mRepositories.getCombo().select(0);
+			}
+		}
+		else {
+			mLocalRepository.setEnabled(false);
+			mLocalRepository.setVisible(false);
+			label.setVisible(false);
+			mRepositories.getCombo().setVisible(false);
+		}
+
+		// Separate
+		label = new Label(composite, SWT.NONE);
+		gd = new GridData(GridData.FILL_HORIZONTAL);
+		gd.horizontalSpan = 2;
+		label.setLayoutData(gd);
+
+		if (mCPNameStr != null) {
+			mCPName.setText(mCPNameStr);
+		}
+		if (mCPDescStr != null) {
+			mCPDesc.setText(mCPDescStr);
+		}
+
+		setControl(composite);
+
+		validate();
+		setErrorMessage(null);
+		
+		getShell().setData( HelpUtil.CONTEXT_PROVIDER_KEY, this);
+		HelpUtil.setHelp( getControl(), HelpUtil.getContextId(IHelpConstants.CONTEXT_ID_NEW_CONNECTION_PROFILE_PAGE, ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName()));
+//		PlatformUI.getWorkbench().getHelpSystem().setHelp(parent,
+//				IHelpConstants.CONTEXT_ID_NEW_CONNECTION_PROFILE_PAGE);
+	}
+
+	private void handleModify() {
+		validate();
+	}
+	
+	private void handleLocalRepositoryChecked() {
+		mRepositories.getCombo().setEnabled(!mLocalRepository.getSelection());
+		validate();
+	}
+	
+	private void validate() {
+		String errorMessage = null;
+		String cpName = mCPName.getText();
+		IConnectionProfile foundProfile = null;
+		String updatedPath = cpName;
+		if (!mLocalRepository.getSelection()
+				&& !mRepositories.getSelection().isEmpty()) {
+			updatedPath = mRepositories.getCombo().getText() + InternalProfileManager.PROFILE_PATH_SEPARATOR + cpName;
+		}
+		foundProfile = ProfileManager.getInstance().getProfileByFullPath(updatedPath);
+
+		if (cpName == null || cpName.trim().length() == 0) {
+			errorMessage = ConnectivityUIPlugin.getDefault().getResourceString(
+					"NewConnectionProfileWizardPage.Status.NoName"); //$NON-NLS-1$
+		}
+		else if (cpName.trim().length() < cpName.length() ) {
+			errorMessage = ConnectivityUIPlugin.getDefault().getResourceString(
+					"NewConnectionProfileWizardPage.Status.NoSpacesInName"); //$NON-NLS-1$
+		}
+		else if (foundProfile != null) { 
+			errorMessage = ConnectivityUIPlugin.getDefault().getResourceString(
+					"NewConnectionProfileWizardPage.Status.DuplicateName"); //$NON-NLS-1$
+		}
+		else if (!mLocalRepository.getSelection()
+				&& mRepositories.getSelection().isEmpty()) {
+			errorMessage = ConnectivityUIPlugin.getDefault().getResourceString(
+					"NewConnectionProfileWizardPage.Status.NoRepository"); //$NON-NLS-1$
+		}
+		setErrorMessage(errorMessage);
+		setPageComplete(errorMessage == null);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.dialogs.IDialogPage#setVisible(boolean)
+	 */
+	public void setVisible(boolean visible) {
+		super.setVisible(visible);
+		if (visible) {
+			mCPName.setFocus();
+		}
+	}
+
+	public String getProfileName() {
+        return ( mCPName == null || mCPName.isDisposed() ) ? 
+                mCPNameStr : mCPName.getText();
+	}
+
+	public void setProfileName(String name) {
+		this.mCPNameStr = name;
+		if ( mCPName != null && ! mCPName.isDisposed() ) {
+            if ( name == null )
+                name = EMPTY_STRING;
+			mCPName.setText(name);
+		}
+	}
+
+	public String getProfileDescription() {
+        return ( mCPDesc == null || mCPDesc.isDisposed() ) ? 
+                mCPDescStr : mCPDesc.getText();
+	}
+
+	public void setProfileDescription(String desc) {
+		this.mCPDescStr = desc;
+		if ( mCPDesc != null && ! mCPDesc.isDisposed() ) {
+            if ( desc == null )
+                desc = EMPTY_STRING;
+			mCPDesc.setText(desc);
+		}
+	}
+
+	public boolean getAutoConnect() {
+        return mCPAutoConnectValue;
+	}
+
+	public boolean getAutoConnectOnFinish() {
+        return mCPAutoConnectOnFinishValue;
+	}
+
+	public void setAutoConnect(boolean selection) {
+        mCPAutoConnectValue = selection;
+	}
+
+	public void setAutoConnectOnFinish(boolean selection) {
+        mCPAutoConnectOnFinishValue = selection;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.sybase.suade.common.ui.wizards.ISummaryDataSource#getSummaryData()
+	 */
+	public List getSummaryData() {
+		List data = new ArrayList();
+
+		data.add(new String[] {
+				ConnectivityUIPlugin.getDefault().getResourceString(
+						"NewConnectionProfileWizardPage.summary_cp_name"), //$NON-NLS-1$
+				getProfileName()});
+
+		data.add(new String[] {
+				ConnectivityUIPlugin.getDefault().getResourceString(
+						"NewConnectionProfileWizardPage.summary_cp_desc"), //$NON-NLS-1$
+				getProfileDescription()});
+
+		if (_showAutoConnect) {
+			data.add(new String[] {
+					ConnectivityUIPlugin
+						.getDefault()
+							.getResourceString(
+								"NewConnectionProfileWizardPage.summary_autoconnect"), //$NON-NLS-1$
+				getAutoConnect() ? ConnectivityUIPlugin.getDefault().getResourceString("Boolean.true") //$NON-NLS-1$
+							: ConnectivityUIPlugin.getDefault().getResourceString("Boolean.false") }); //$NON-NLS-1$
+			data.add(new String[] {
+					ConnectivityUIPlugin
+						.getDefault()
+							.getResourceString(
+								"NewConnectionProfileWizardPage.summary_autoconnect_on_finish"), //$NON-NLS-1$
+					getAutoConnectOnFinish() ? ConnectivityUIPlugin.getDefault().getResourceString("Boolean.true") //$NON-NLS-1$
+							: ConnectivityUIPlugin.getDefault().getResourceString("Boolean.false") }); //$NON-NLS-1$
+		}
+
+		return data;
+	}
+	
+	public IConnectionProfile getRepository() {
+		if (mLocalRepository.getSelection()) {
+			return null;
+		}
+		return (IConnectionProfile) ((IStructuredSelection) mRepositories
+				.getSelection()).getFirstElement();
+	}
+	
+	public IContext getContext(Object target) {
+		return contextProviderDelegate.getContext(target);
+	}
+
+	public int getContextChangeMask() {
+		return contextProviderDelegate.getContextChangeMask();
+	}
+
+	public String getSearchExpression(Object target) {
+		return contextProviderDelegate.getSearchExpression(target);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/NewFilteredCPWizard.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/NewFilteredCPWizard.java
new file mode 100644
index 0000000..0822ae9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/NewFilteredCPWizard.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2008, 2009 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Sybase, Inc. - initial API and implementation
+ *  Actuate Corporation - refactored to improve extensibility
+ *  Sybase, Inc. - created public API version for easier extensibility
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.wizards;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.NewCPWizard;
+import org.eclipse.jface.viewers.ViewerFilter;
+
+/**
+ * @author brianf
+ */
+public class NewFilteredCPWizard extends NewCPWizard {
+
+	public NewFilteredCPWizard() {
+		super();
+	}
+
+	public NewFilteredCPWizard(ViewerFilter filter,
+			IConnectionProfile parentProfile) {
+		super(filter, parentProfile);
+	}
+
+	public NewFilteredCPWizard(ViewerFilter[] filters,
+			IConnectionProfile parentProfile) {
+		super(filters, parentProfile);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/OptionalPropertiesPane.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/OptionalPropertiesPane.java
new file mode 100644
index 0000000..afe5c67
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/OptionalPropertiesPane.java
@@ -0,0 +1,142 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ *               Actuate Corporation - re-factored to a generic component
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.ui.wizards;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.DelimitedStringList;
+import org.eclipse.jface.dialogs.DialogPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ *  A generic pane that collects user input of optional properties in delimited name-value pairs.
+ */
+public class OptionalPropertiesPane extends Composite
+    implements ModifyListener
+{
+    protected boolean isReadOnly = false;
+    protected DelimitedStringList delimitedStringControl;
+    protected Properties properties;
+
+    /**
+     * Constructor.
+     * @param parent    a widget which will be the parent of the new instance (cannot be null)
+     * @param style     the style of widget to construct
+     * @param isReadOnly    true to use read-only controls; false otherwise
+     */
+    public OptionalPropertiesPane( Composite parent, int style, boolean isReadOnly )
+    {
+        super(parent, style);
+        Composite parentComposite = this;
+        
+        this.isReadOnly = isReadOnly;
+
+        GridLayout layout = new GridLayout();
+        layout.numColumns = 1;
+        setLayout( layout );
+        
+        Label optionalPropertiesLabel = new Label( parentComposite, SWT.NULL );
+        GridData gdata = new GridData( GridData.FILL_HORIZONTAL );
+        gdata.horizontalSpan = 2;
+        optionalPropertiesLabel.setLayoutData( gdata );
+        optionalPropertiesLabel.setText( ConnectivityUIPlugin.getDefault()
+                .getResourceString( "CommonDriverUIContributor.optionalProps.label" ) ); //$NON-NLS-1$
+
+        delimitedStringControl = new DelimitedStringList( parentComposite, SWT.NONE, isReadOnly );
+        GridData gd = new GridData( GridData.FILL_HORIZONTAL );
+        gd.horizontalSpan = 2;
+        delimitedStringControl.setLayoutData( gd );
+        
+        addListeners();
+    }
+
+    /**
+     * Passes in the IDriverUIContributorInformation to this pane for the properties information.
+     * This method must be called by the client of this pane.
+     * @param contributorInformation    cannot be null
+     */
+    public void setDriverUIContributorInformation(
+            IDriverUIContributorInformation contributorInformation) {
+        this.properties = contributorInformation.getProperties();
+    }
+
+    protected void addListeners() {
+        delimitedStringControl.addModifyListener( this );
+    }
+
+    protected void removeListeners() {
+        delimitedStringControl.removeModifyListener( this );
+    }
+
+    /**
+     * Indicates whether all the controls in this pane are in a valid state.
+     * @param page  the dialog page to display an error message if controls are not valid
+     * @return  true if controls are valid; false otherwise
+     */
+    public boolean validateControl( DialogPage page ) {
+        boolean isValid = true;
+        if ( delimitedStringControl.getWarning() != null ) {
+            page.setErrorMessage( delimitedStringControl.getWarning() );
+            isValid = false;
+        }    
+        return isValid;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
+     */
+    public void modifyText( ModifyEvent e )
+    {
+        if( isReadOnly )
+            return;
+    
+        // optional properties are updated directly in this.properties, and are not included in 
+        // the parent contributor's generated URL
+        setConnectionInformation();
+    }
+    
+    /**
+     * Loads and displays the connection property values found in the Properties specified by 
+     * {@link #setDriverUIContributorInformation(IDriverUIContributorInformation)}.
+     */
+    public void loadProperties() {
+        removeListeners();
+
+        String propertyList = properties.getProperty(
+                IJDBCConnectionProfileConstants.CONNECTION_PROPERTIES_PROP_ID);
+        if( propertyList != null ) 
+            delimitedStringControl.setSelection( propertyList );
+
+        addListeners();
+    }
+    
+    /**
+     * Updates the connection property values in the Properties specified by
+     * {@link #setDriverUIContributorInformation(IDriverUIContributorInformation)}.
+     */
+    public void setConnectionInformation() {
+        properties.setProperty(
+                IJDBCConnectionProfileConstants.CONNECTION_PROPERTIES_PROP_ID,
+                delimitedStringControl.getSelection() );
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/OtherDriverUIContributor.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/OtherDriverUIContributor.java
new file mode 100644
index 0000000..f9948f4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/OtherDriverUIContributor.java
@@ -0,0 +1,311 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ *               Actuate Corporation - extracted properties tab to a shared component
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.wizards;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.jface.dialogs.DialogPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.swt.widgets.Text;
+
+public class OtherDriverUIContributor implements IDriverUIContributor,
+		Listener {
+	private ScrolledComposite scrolledComposite = null;
+
+	protected Text databaseNameText;
+
+	protected Text urlText;
+
+	protected Text usernameText;
+
+	protected Text passwordText;
+
+	protected Button savePasswordButton;
+
+	protected OptionalPropertiesPane optionalPropsComposite;
+
+	private IDriverUIContributorInformation contributorInformation;
+
+	private Properties properties;
+
+	protected DialogPage parentPage;
+	
+	protected boolean isReadOnly = false;
+
+	public Composite getContributedDriverUI(Composite parent, boolean isReadOnly) {
+		if ((scrolledComposite == null) || scrolledComposite.isDisposed() || (this.isReadOnly != isReadOnly)) {
+			this.isReadOnly = isReadOnly;
+			int additionalStyles = SWT.NONE;
+			if (isReadOnly){
+				additionalStyles = SWT.READ_ONLY;
+			}
+			
+			scrolledComposite = new ScrolledComposite(parent, SWT.H_SCROLL
+					| SWT.V_SCROLL);
+			scrolledComposite.setExpandHorizontal(true);
+			scrolledComposite.setExpandVertical(true);
+			scrolledComposite.setLayout(new GridLayout());
+
+			TabFolder parentComposite = new TabFolder(scrolledComposite,
+					SWT.TOP);
+
+			TabItem generalTab = new TabItem(parentComposite, SWT.None);
+			generalTab.setText(ConnectivityUIPlugin.getDefault()
+					.getResourceString("CommonDriverUIContributor.generaltab")); //$NON-NLS-1$
+
+            // add optional properties tab
+			TabItem optionalTab = new TabItem(parentComposite, SWT.None);
+			optionalTab.setText(ConnectivityUIPlugin.getDefault()
+                    .getResourceString( "CommonDriverUIContributor.optionaltab" ) ); //$NON-NLS-1$
+            optionalPropsComposite = new OptionalPropertiesPane( parentComposite, SWT.NULL, isReadOnly );
+            optionalTab.setControl( optionalPropsComposite );
+
+			Composite generalComposite = new Composite(parentComposite,
+					SWT.NULL);
+			GridLayout layout = new GridLayout();
+			layout.numColumns = 2;
+			generalComposite.setLayout(layout);
+			generalTab.setControl(generalComposite);
+
+			Label databaseNameLabel = new Label(generalComposite, SWT.NULL);
+			databaseNameLabel.setLayoutData(new GridData());
+			databaseNameLabel.setText(ConnectivityUIPlugin.getDefault()
+					.getResourceString(
+							"OtherDriverUIContributor.databaseName.label")); //$NON-NLS-1$
+
+			databaseNameText = new Text(generalComposite, SWT.BORDER | additionalStyles);
+			databaseNameText.setLayoutData(new GridData(
+					GridData.FILL_HORIZONTAL));
+
+			Label urlLabel = new Label(generalComposite, SWT.NULL);
+			urlLabel.setLayoutData(new GridData());
+			urlLabel.setText(ConnectivityUIPlugin.getDefault()
+					.getResourceString("OtherDriverUIContributor.url.label")); //$NON-NLS-1$
+
+			urlText = new Text(generalComposite, SWT.BORDER | additionalStyles);
+			urlText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+			Label usernameLabel = new Label(generalComposite, SWT.NULL);
+			usernameLabel.setLayoutData(new GridData());
+			usernameLabel.setText(ConnectivityUIPlugin.getDefault()
+					.getResourceString(
+							"OtherDriverUIContributor.userName.label")); //$NON-NLS-1$
+
+			usernameText = new Text(generalComposite, SWT.BORDER | additionalStyles);
+			usernameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+			Label passwordLabel = new Label(generalComposite, SWT.NULL);
+			passwordLabel.setLayoutData(new GridData());
+			passwordLabel.setText(ConnectivityUIPlugin.getDefault()
+					.getResourceString(
+							"OtherDriverUIContributor.password.label")); //$NON-NLS-1$
+
+			passwordText = new Text(generalComposite, SWT.BORDER | SWT.PASSWORD | additionalStyles);
+			passwordText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+			savePasswordButton = new Button(generalComposite, SWT.CHECK);
+			savePasswordButton.setText(ConnectivityUIPlugin.getDefault()
+					.getResourceString(
+							"OtherDriverUIContributor.savePassword.label")); //$NON-NLS-1$
+			GridData gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 3;
+			gd.grabExcessHorizontalSpace = true;
+			savePasswordButton.setLayoutData(gd);
+
+			scrolledComposite.setContent(parentComposite);
+			scrolledComposite.setMinSize(parentComposite.computeSize(
+					SWT.DEFAULT, SWT.DEFAULT));
+			initialize();
+		}
+		return scrolledComposite;
+	}
+
+	public void setConnectionInformation() {
+		properties.setProperty(
+				IJDBCDriverDefinitionConstants.DATABASE_NAME_PROP_ID,
+				this.databaseNameText.getText().trim());
+		properties.setProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID,
+				this.passwordText.getText());
+		properties.setProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID,
+				this.usernameText.getText());
+		properties.setProperty(
+				IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID, String
+						.valueOf(savePasswordButton.getSelection()));
+		properties.setProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID,
+				this.urlText.getText().trim());
+        optionalPropsComposite.setConnectionInformation();
+
+        this.contributorInformation.setProperties(properties);
+	}
+
+	private void removeListeners() {
+		databaseNameText.removeListener(SWT.Modify, this);
+		urlText.removeListener(SWT.Modify, this);
+		usernameText.removeListener(SWT.Modify, this);
+		passwordText.removeListener(SWT.Modify, this);
+		savePasswordButton.removeListener(SWT.Selection, this);
+	}
+
+	private void addListeners() {
+		databaseNameText.addListener(SWT.Modify, this);
+		urlText.addListener(SWT.Modify, this);
+		usernameText.addListener(SWT.Modify, this);
+		passwordText.addListener(SWT.Modify, this);
+		savePasswordButton.addListener(SWT.Selection, this);
+	}
+
+	private void initialize() {
+		addListeners();
+	}
+
+	public void handleEvent(Event event) {
+		if (isReadOnly){
+			if (event.widget == savePasswordButton){
+				savePasswordButton.setSelection(!savePasswordButton.getSelection());
+			}
+		} else {
+			setConnectionInformation();
+		}
+	}
+
+	public boolean determineContributorCompletion() {
+		boolean isComplete = true;
+		if (databaseNameText.getText().trim().length() < 1) {
+			parentPage
+					.setErrorMessage(ConnectivityUIPlugin
+							.getDefault()
+							.getResourceString(
+									"OtherDriverUIContributor.errormessage.requiresdatabase")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (urlText.getText().trim().length() < 1) {
+			parentPage
+					.setErrorMessage(ConnectivityUIPlugin
+							.getDefault()
+							.getResourceString(
+									"OtherDriverUIContributor.errormessage.requiresurl")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (usernameText.getText().trim().length() < 1) {
+			parentPage
+					.setErrorMessage(ConnectivityUIPlugin
+							.getDefault()
+							.getResourceString(
+									"OtherDriverUIContributor.errormessage.requiresusername")); //$NON-NLS-1$
+			isComplete = false;
+        } else if (!optionalPropsComposite.validateControl(parentPage)) {
+            isComplete = false;
+        } 
+
+		if (isComplete) {
+			parentPage.setErrorMessage(null);
+		}
+		return isComplete;
+	}
+
+	public void setDialogPage(DialogPage parentPage) {
+		this.parentPage = parentPage;
+	}
+
+	public void setDriverUIContributorInformation(
+			IDriverUIContributorInformation contributorInformation) {
+		this.contributorInformation = contributorInformation;
+		this.properties = contributorInformation.getProperties();
+        optionalPropsComposite.setDriverUIContributorInformation( contributorInformation );
+	}
+
+	public void loadProperties() {
+		removeListeners();
+
+		String databaseName = this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.DATABASE_NAME_PROP_ID);
+		if (databaseName != null) {
+			databaseNameText.setText(databaseName);
+		}
+
+		String url = this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID);
+		if (url != null) {
+			urlText.setText(url);
+		}
+
+		String username = this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID);
+		if (username != null) {
+			usernameText.setText(username);
+		}
+
+		String password = this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID);
+		if (password != null) {
+			passwordText.setText(password);
+		}
+
+		String savePassword = this.properties
+				.getProperty(IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID);
+		if ((savePassword != null)
+				&& Boolean.valueOf(savePassword) == Boolean.TRUE) {
+			savePasswordButton.setSelection(true);
+		}
+
+        // load optional connection properties
+        optionalPropsComposite.loadProperties();
+
+		addListeners();
+		setConnectionInformation();
+	}
+
+	public List getSummaryData() {
+		List summaryData = new ArrayList();
+		summaryData.add(new String[] {
+				ConnectivityUIPlugin.getDefault().getResourceString(
+						"OtherDriverUIContributor.summaryData.database"), //$NON-NLS-1$
+				this.databaseNameText.getText().trim() });
+		summaryData.add(new String[] {
+				ConnectivityUIPlugin.getDefault().getResourceString(
+						"OtherDriverUIContributor.summaryData.username"), //$NON-NLS-1$
+				this.usernameText.getText().trim() });
+		summaryData.add(new String[] {
+				ConnectivityUIPlugin.getDefault().getResourceString(
+						"OtherDriverUIContributor.summaryData.url"), //$NON-NLS-1$
+				this.urlText.getText().trim() });
+		summaryData
+				.add(new String[] {
+						ConnectivityUIPlugin
+								.getDefault()
+								.getResourceString(
+										"OtherDriverUIContributor.summaryData.savePassword"), //$NON-NLS-1$
+						savePasswordButton.getSelection() ? ConnectivityUIPlugin
+								.getDefault()
+								.getResourceString(
+										"OtherDriverUIContributor.summaryData.true") //$NON-NLS-1$
+								: ConnectivityUIPlugin
+										.getDefault()
+										.getResourceString(
+												"OtherDriverUIContributor.summaryData.false") }); //$NON-NLS-1$
+		return summaryData;
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/ProfileDetailsPropertyPage.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/ProfileDetailsPropertyPage.java
new file mode 100644
index 0000000..51a8f68
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/ProfileDetailsPropertyPage.java
@@ -0,0 +1,157 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2007 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *  shongxum - initial API and implementation
+ *  Actuate Corporation - refactored to improve extensibility
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.wizards;
+
+import java.util.Properties;
+
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.IHelpConstants;
+import org.eclipse.datatools.connectivity.ui.PingJob;
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.BusyIndicator;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * Base property page implementation for connection profiles.
+ * 
+ * This implementation takes care of updating the connection profile when
+ * OK is pressed.
+ * 
+ * Bug 237720 - had to pull in super.createContents(Composite) code to get around funky issue with setting help
+ * 
+ * @author shongxum, brianf
+ */
+public abstract class ProfileDetailsPropertyPage extends ProfilePropertyPage {
+
+	protected Button btnPing;
+
+	protected ProfileDetailsPropertyPage() {
+		super(true);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
+	 */
+	protected Control createContents(Composite parent) {
+		Composite container = new Composite(parent, SWT.NULL);
+		final GridLayout gridLayout = new GridLayout();
+		gridLayout.horizontalSpacing = 0;
+		gridLayout.marginWidth = 0;
+		gridLayout.marginHeight = 0;
+		container.setLayout(gridLayout);
+
+		final Composite composite = new Composite(container, SWT.NONE);
+		composite.setLayout(new FillLayout());
+		composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+		getShell().setData( HelpUtil.CONTEXT_PROVIDER_KEY, this);
+		HelpUtil.setHelp( getControl(), HelpUtil.getContextId(IHelpConstants.CONTEXT_ID_PROFILE_DETAILS_PROPERTY_PAGE, ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName()));
+
+		createCustomContents(composite);
+
+		btnPing = new Button(container, SWT.NONE);
+		btnPing.addSelectionListener(new SelectionAdapter() {
+
+			public void widgetSelected(SelectionEvent e) {
+				testConnection();
+			}
+		});
+		btnPing.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
+		btnPing.setText(ConnectivityUIPlugin.getDefault().getResourceString(
+				"ConnectionProfileDetailsPage.Button.TestConnection")); //$NON-NLS-1$
+
+		return container;
+	}
+
+	protected void testConnection() {
+		IConnectionProfile cp = getConnectionProfile();
+		ConnectionProfile profile = new ConnectionProfile(cp.getName(), cp
+				.getDescription(), cp.getProviderId(),
+				cp.getParentProfile() == null ? "" : cp.getParentProfile() //$NON-NLS-1$
+						.getName(), false);
+		profile.setBaseProperties(collectProperties());
+
+        BusyIndicator.showWhile( getShell().getDisplay(), 
+                createTestConnectionRunnable( profile ) );          
+	}
+
+	public void setPingButtonEnabled(boolean enabled)
+    {
+        if (btnPing != null && !btnPing.isDisposed())
+        {
+            btnPing.setEnabled(enabled);
+            if( enabled )
+                enableParent( btnPing );
+        }
+    }
+    
+    /**
+     * Enables the specified control's composite.
+     */
+    private void enableParent( Control control )
+    {
+        Composite parent = control.getParent( );
+        if( parent == null || parent instanceof Shell )
+            return;
+
+        if( ! parent.isEnabled() )
+            parent.setEnabled( true );
+
+        enableParent( parent );
+    }
+
+	protected void setPingButtonVisible(boolean visible)
+    {
+        if (btnPing != null && !btnPing.isDisposed())
+        {
+            btnPing.setVisible(visible);
+        }
+    }
+    
+    protected Runnable createTestConnectionRunnable( final IConnectionProfile profile )
+    {
+        final Job pingJob = new PingJob( getShell(), profile );
+        pingJob.schedule();
+        return new Runnable() 
+        {
+            public void run() 
+            {
+                try 
+                {
+                    pingJob.join();
+                }
+                catch (InterruptedException e) 
+                {
+                }
+            }
+        };
+    }
+
+	protected Properties collectProperties() {
+		return null;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/ProfilePropertyPage.java b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/ProfilePropertyPage.java
new file mode 100644
index 0000000..40c5135
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.ui/src/org/eclipse/datatools/connectivity/ui/wizards/ProfilePropertyPage.java
@@ -0,0 +1,168 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2007, 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ * 			IBM Corporation - fix for defect #213266
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.ui.wizards;
+
+import java.util.Iterator;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.jobs.ISchedulingRule;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.wizards.CPPropetyPage;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.dialogs.PropertyPage;
+
+/**
+ * Base property page implementation for connection profiles.
+ * 
+ * This implementation takes care of updating the connection profile when
+ * OK is pressed.
+ * 
+ * @author shongxum
+ */
+public abstract class ProfilePropertyPage extends PropertyPage {
+	
+	private boolean mAffectsConnectionProperties;
+
+	private ISchedulingRule mProfileRule;
+	
+	private boolean isReadOnly = false;
+
+	protected ProfilePropertyPage() {
+		this(false);
+	}
+
+	protected ProfilePropertyPage(boolean affectsConnectionProperties) {
+		super();
+		mAffectsConnectionProperties = affectsConnectionProperties;
+	}
+
+	public void createControl(Composite parent, boolean isReadOnly){
+		this.isReadOnly = isReadOnly;
+		createControl(parent);
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
+	 */
+	protected Control createContents(Composite parent) {
+		Composite container = new Composite(parent, SWT.NULL);
+		final GridLayout gridLayout = new GridLayout();
+		gridLayout.horizontalSpacing = 0;
+		gridLayout.marginWidth = 0;
+		gridLayout.marginHeight = 0;
+		container.setLayout(gridLayout);
+
+		final Composite composite = new Composite(container, SWT.NONE);
+		composite.setLayout(new FillLayout());
+		composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+		createCustomContents(composite);
+
+		return container;
+	}
+
+	protected void createCustomContents(Composite parent, boolean isReadOnly){};
+
+	protected void createCustomContents(Composite parent){
+		createCustomContents(parent, this.isReadOnly);
+	}
+	
+	protected abstract Properties collectProperties();
+
+	public IConnectionProfile getConnectionProfile() {
+		IAdaptable element = getElement();
+		IConnectionProfile profile = (IConnectionProfile) element
+				.getAdapter(IConnectionProfile.class);
+		return profile;
+	}
+	
+	protected String getPropertiesID() {
+		return getConnectionProfile().getProviderId();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.preference.IPreferencePage#performOk()
+	 */
+	public boolean performOk() {
+		IConnectionProfile profile = getConnectionProfile();
+		Properties oldProps = profile.getProperties(getPropertiesID());
+		Properties newProps = collectProperties();
+
+		boolean changed = false;
+		for (Iterator itr = newProps.keySet().iterator(); !changed
+				&& itr.hasNext();) {
+			Object key = itr.next();
+			Object oldObj = oldProps.get(key);
+			Object newObj = newProps.get(key);
+			changed = (newObj != null && !newObj.equals(oldObj))
+					|| (newObj == null && oldObj != null);
+		}
+
+		if (changed) {
+			profile.setProperties(getPropertiesID(),newProps);
+
+			if (mAffectsConnectionProperties
+					&& profile.getConnectionState() != IConnectionProfile.DISCONNECTED_STATE) {
+				if (MessageDialog
+						.openQuestion(
+								getShell(),
+								ConnectivityUIPlugin
+										.getDefault()
+										.getResourceString(
+												"ConnectionProfileDetailsPage.AskConfirmation"), //$NON-NLS-1$
+								ConnectivityUIPlugin
+										.getDefault()
+										.getResourceString(
+												"ConnectionProfileDetailsPage.AskReconnect"))) { //$NON-NLS-1$
+
+					if (mProfileRule == null) {
+						/*
+						 * block the actual connect attempt until after the dialog
+						 * is closed. this will allow any other property pages to
+						 * commit their changes on the profile prior to the connect
+						 * being executed.
+						 */
+						mProfileRule = CPPropetyPage.getProfileRule(profile);
+						Job.getJobManager().beginRule(mProfileRule,
+								null);
+						profile.disconnect(null);
+						profile.connect(null);
+					}
+				}
+			}
+		}
+
+		return super.performOk();
+	}
+
+	public void dispose() {
+		if (mProfileRule != null) {
+			Job.getJobManager().endRule(mProfileRule);
+			mProfileRule = null;
+		}
+		super.dispose();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/.classpath b/plugins/org.eclipse.datatools.connectivity/.classpath
new file mode 100644
index 0000000..cb01053
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src/"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.connectivity/.gitignore b/plugins/org.eclipse.datatools.connectivity/.gitignore
new file mode 100644
index 0000000..eb450a7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/.gitignore
@@ -0,0 +1,2 @@
+bin
+temp.folder
diff --git a/plugins/org.eclipse.datatools.connectivity/.options b/plugins/org.eclipse.datatools.connectivity/.options
new file mode 100644
index 0000000..89ac882
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/.options
@@ -0,0 +1,5 @@
+# Turn on debug tracing for org.eclipse.datatools.connectivity plugin
+org.eclipse.datatools.connectivity/debug=true
+
+# Reports extensions
+org.eclipse.datatools.connectivity/connectionprofileextension=false
diff --git a/plugins/org.eclipse.datatools.connectivity/.project b/plugins/org.eclipse.datatools.connectivity/.project
new file mode 100644
index 0000000..24bf7ee
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/.project
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity</name>
+	<comment></comment>
+	<projects/>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.connectivity/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.connectivity/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..416f4fb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,11 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/plugins/org.eclipse.datatools.connectivity/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.connectivity/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..108d093
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/META-INF/MANIFEST.MF
@@ -0,0 +1,25 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Plugin.Name
+Bundle-SymbolicName: org.eclipse.datatools.connectivity; singleton:=true
+Bundle-Version: 1.14.1.qualifier
+Bundle-Activator: org.eclipse.datatools.connectivity.internal.ConnectivityPlugin
+Bundle-Vendor: %Plugin.ProviderName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.core.resources
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.datatools.connectivity,
+ org.eclipse.datatools.connectivity.drivers,
+ org.eclipse.datatools.connectivity.drivers.jdbc,
+ org.eclipse.datatools.connectivity.drivers.models,
+ org.eclipse.datatools.connectivity.exceptions,
+ org.eclipse.datatools.connectivity.internal,
+ org.eclipse.datatools.connectivity.internal.repository,
+ org.eclipse.datatools.connectivity.internal.security,
+ org.eclipse.datatools.connectivity.security,
+ org.eclipse.datatools.connectivity.services
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Import-Package: com.ibm.icu.text,
+ com.ibm.icu.util
diff --git a/plugins/org.eclipse.datatools.connectivity/about.html b/plugins/org.eclipse.datatools.connectivity/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity/about.ini b/plugins/org.eclipse.datatools.connectivity/about.ini
new file mode 100644
index 0000000..76a0356
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/about.ini
@@ -0,0 +1,27 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%blurb
+
+# Property "windowImage" contains path to window icon (16x16)
+# needed for primary features only
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=eclipse32.png
+
+# Property "aboutImage" contains path to product image (500x330 or 115x164)
+# needed for primary features only
+
+# Property "appName" contains name of the application (not translated)
+# needed for primary features only
+
+# Property "welcomePerspective" contains the id of the perspective in which the
+# welcome page is to be opened.
+# optional
+
+# Property "tipsAndTricksHref" contains the Help topic href to a tips and tricks page 
+# optional
diff --git a/plugins/org.eclipse.datatools.connectivity/about.mappings b/plugins/org.eclipse.datatools.connectivity/about.mappings
new file mode 100644
index 0000000..d2aa0db
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/about.mappings
@@ -0,0 +1,6 @@
+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=@BUILD@
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity/about.properties b/plugins/org.eclipse.datatools.connectivity/about.properties
new file mode 100644
index 0000000..a6f0c9f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/about.properties
@@ -0,0 +1,19 @@
+###############################################################################
+# Copyright (c) 2006 Sybase, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     Sybase, Inc. - initial API and implementation
+###############################################################################
+blurb=Eclipse Data Tools Platform Connectivity\n\
+\n\
+Visit http://www.eclipse.org/datatools\n\
+\n\
+Copyright (c) 2017 Eclipse Contributors\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html
diff --git a/plugins/org.eclipse.datatools.connectivity/build.properties b/plugins/org.eclipse.datatools.connectivity/build.properties
new file mode 100644
index 0000000..a46f601
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/build.properties
@@ -0,0 +1,23 @@
+bin.includes = plugin.xml,\
+               plugin.properties,\
+               about.html,\
+               schema/,\
+               .options,\
+               META-INF/,\
+               .,\
+               about.ini,\
+               about.mappings,\
+               about.properties,\
+               eclipse32.gif,\
+               eclipse32.png,\
+               icons/
+jars.compile.order = .
+output.. = bin/
+source.. = src/
+src.dir			 = src/
+plugin.version =	1.1.0.200802253
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.connectivity/eclipse32.gif b/plugins/org.eclipse.datatools.connectivity/eclipse32.gif
new file mode 100644
index 0000000..811eccb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/eclipse32.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity/eclipse32.png b/plugins/org.eclipse.datatools.connectivity/eclipse32.png
new file mode 100644
index 0000000..568fac1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/eclipse32.png
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity/icons/jdbc_16.gif b/plugins/org.eclipse.datatools.connectivity/icons/jdbc_16.gif
new file mode 100644
index 0000000..ef7809c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/icons/jdbc_16.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity/plugin.properties b/plugins/org.eclipse.datatools.connectivity/plugin.properties
new file mode 100644
index 0000000..dab38e7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/plugin.properties
@@ -0,0 +1,20 @@
+################################################################################
+## Copyright (c) 2005, 2011 Sybase, Inc. and others.
+## All rights reserved. This program and the accompanying materials
+## are made available under the terms of the Eclipse Public License v1.0
+## which accompanies this distribution, and is available at
+## http://www.eclipse.org/legal/epl-v10.html
+##
+## Contributors:
+##    Sybase, Inc. - initial API and implementation
+##    IBM Corporation -  fix for defect #223855
+##	  Actuate Corporation - added the cipherProvider extension point [BZ 358686]
+################################################################################ 
+Plugin.Name = Data Tools Platform Connectivity Plug-in
+Plugin.ProviderName = Eclipse Data Tools Platform
+
+extension-point.name.cipherProvider = Connection Profiles Store Cipher Provider
+extension-point.name.connectionProfile = Connection Profile Extension
+extension-point.name.driverExtension = driverExtension
+extension-point.name.ProfileManagerInitializationProvider =  ProfileManagerInitializationProvider
+ConnectionProfileRepository.Category.Name = Connection Profile Repositories
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity/plugin.xml b/plugins/org.eclipse.datatools.connectivity/plugin.xml
new file mode 100644
index 0000000..77e9f58
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/plugin.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+
+   <extension-point id="connectionProfile" name="%extension-point.name.connectionProfile" schema="schema/connectionProfile.exsd"/>
+   <extension-point id="driverExtension" name="%extension-point.name.driverExtension" schema="schema/driverExtension.exsd"/>
+   <extension-point id="ProfileManagerInitializationProvider" name="%extension-point.name.ProfileManagerInitializationProvider" schema="schema/ProfileManagerInitializationProvider.exsd"/>
+   <extension-point id="cipherProvider" name="%extension-point.name.cipherProvider" schema="schema/cipherProvider.exsd"/> 
+
+   <extension
+         point="org.eclipse.datatools.connectivity.connectionProfile">
+      <category
+            name="%ConnectionProfileRepository.Category.Name"
+            id="org.eclipse.datatools.connectivity.connectionProfileRepositoryCategory">
+      </category>
+   </extension>
+</plugin>
diff --git a/plugins/org.eclipse.datatools.connectivity/schema-doc/org_eclipse_datatools_connectivity_cipherProvider.html b/plugins/org.eclipse.datatools.connectivity/schema-doc/org_eclipse_datatools_connectivity_cipherProvider.html
new file mode 100644
index 0000000..739fcc9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/schema-doc/org_eclipse_datatools_connectivity_cipherProvider.html
@@ -0,0 +1,91 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

+<HTML>

+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

+<title>Connectivity Profile Store Cipher Provider</title>

+<style type="text/css">@import url("file:/D:/A11SP2/BRDPro/eclipse/configuration/org.eclipse.osgi/bundles/218/1/.cp/book.css");</style>

+<style type="text/css">@import url("file:/D:/A11SP2/BRDPro/eclipse/configuration/org.eclipse.osgi/bundles/218/1/.cp/schema.css");</style>

+</HEAD>

+<BODY>

+<H1 style="text-align:center">Connectivity Profile Store Cipher Provider</H1>

+<p></p>

+<h6 class="CaptionFigColumn SchemaHeader">Identifier: </h6>org.eclipse.datatools.connectivity.cipherProvider<p></p>

+<h6 class="CaptionFigColumn SchemaHeader">Since: </h6>1.2.4 (DTP 1.9.2)

+<p></p>

+

+<h6 class="CaptionFigColumn SchemaHeader">Description: </h6>This cipherProvider extension point allows a client to extend the connection profile store encryption framework with  a custom provider of <i>javax.crypto.Cipher</i> instances.<p></p>

+<h6 class="CaptionFigColumn SchemaHeader">Configuration Markup:</h6>

+<p></p>

+<p class="code SchemaDtd">&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.cipherProvider">cipherProvider</a>+)&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST extension</p>

+<p class="code SchemaDtdAttlist">point&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">name&nbsp;&nbsp;CDATA #IMPLIED</p>&gt;</p>

+<p></p>

+<ul class="ConfigMarkupAttlistDesc">

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.cipherProvider">cipherProvider</a> EMPTY&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST cipherProvider</p>

+<p class="code SchemaDtdAttlist">fileExtension&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+Defines the file extension and its corresponding provider of <i>javax.crypto.Cipher</i> instances for the encryption of connection profile store files.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>fileExtension</b> - The file extension of connection profile store files that shall be encrypted and decrypted using the cipher provider class specified in the  <i>class</i> attribute.  
+<br>This attribute value may include an optional dot before the file extension (e.g. "profiles" or ".profiles").  The keyword "default" may be specified as the attribute value to match files with no file extension.
+<br>The default connection profile store files that persists in the workspace use the ".dat" and ".bak" file extensions.  Adopters may need to handle potential conflict with the default encryption implementation, if implementing a cipherProvider extension for files with these file extensions.</li>

+<li><b>class</b> - The concrete class that implements the <code>org.eclipse.datatools.connectivity.security.ICipherProvider</code> interface to provide the <i>javax.crypto.Cipher</i> instances for the encryption and decryption of connection profile store files.
+<br>A custom class may optionally extend the <code>org.eclipse.datatools.connectivity.security.CipherProviderBase</code> base class implementation, which reads a secret (symmetric) key specification from a bundled resource.</li>

+</ul>

+<br><h6 class="CaptionFigColumn SchemaHeader">Examples: </h6><code><pre class="Example"><span class="code SchemaTag">
+     &lt;extension
+           id=</span><span class="code SchemaCstring">&quot;org.company.connectivity.security.cipherProvider&quot;</span><span class="code SchemaTag">
+           point=</span><span class="code SchemaCstring">&quot;org.eclipse.datatools.connectivity.cipherProvider&quot;</span><span class="code SchemaTag">&gt;
+        &lt;cipherProvider
+              fileExtension=</span><span class="code SchemaCstring">&quot;profile&quot;</span><span class="code SchemaTag">
+              class=</span><span class="code SchemaCstring">&quot;org.company.connectivity.security.ProfileStoreCipherProvider&quot;</span><span class="code SchemaTag">&gt;
+        &lt;/cipherProvider&gt;
+        &lt;cipherProvider
+              fileExtension=</span><span class="code SchemaCstring">&quot;default&quot;</span><span class="code SchemaTag">
+              class=</span><span class="code SchemaCstring">&quot;org.company.connectivity.security.ProfileStoreCipherProvider&quot;</span><span class="code SchemaTag">&gt;
+        &lt;/cipherProvider&gt;
+     &lt;/extension&gt;
+</span></pre></code>
+This example registers org.company.connectivity.security.ProfileStoreCipherProvider as the provider for files with the extension ".profile" and for those with no file extension. 
+<br><br>
+Sample class implementation of the org.eclipse.datatools.connectivity.security.ICipherProvider interface:
+<code><pre class="Example"><span class="code SchemaTag">
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.security.CipherProviderBase;
+import org.eclipse.datatools.connectivity.security.ICipherProvider;
+import org.osgi.framework.Bundle;
+
+public class ProfileStoreCipherProvider extends CipherProviderBase 
+  implements ICipherProvider
+{
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.security.CipherProviderBase#getKeySpec()
+     */
+    @Override
+    protected KeySpec getKeySpec() throws GeneralSecurityException
+    {
+        // TODO override with custom KeySpec
+        return super.getKeySpec();
+    }
+}
+</span></pre></code>

+<p></p>

+

+<h6 class="CaptionFigColumn SchemaHeader">API Information: </h6>[Provisional] An extension must implement the ICipherProvider interface defined in the <code>org.eclipse.datatools.connectivity.security</code> package. See the package's JavaDoc documentation for more information.

+<p></p>

+

+<h6 class="CaptionFigColumn SchemaHeader">Supplied Implementation: </h6><code>org.eclipse.datatools.connectivity.security.CipherProviderBase</code> is the base class implementation of the <code>org.eclipse.datatools.connectivity.security.ICipherProvider</code> interface.  It uses a default bundled encryption key as its <i>javax.crypto.spec.SecretKeySpec</i>.

+<p></p>

+

+<br>

+<p class="note SchemaCopyright">

+Copyright (c) 2011 Actuate Corporation.
+All rights reserved. This program and the accompanying materials are made available under the  terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html .

+

+</p>

+</BODY>

+</HTML>

diff --git a/plugins/org.eclipse.datatools.connectivity/schema-doc/org_eclipse_datatools_connectivity_connectionProfile.html b/plugins/org.eclipse.datatools.connectivity/schema-doc/org_eclipse_datatools_connectivity_connectionProfile.html
new file mode 100644
index 0000000..73abd0a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/schema-doc/org_eclipse_datatools_connectivity_connectionProfile.html
@@ -0,0 +1,206 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Connection Profile</title>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.sdk_3.1.0/book.css");</style>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.platform.doc.isv_3.1.0/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>Connection Profile</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.connectivity.connectionProfile<p></p>
+<h6 class=CaptionFigColumn id=header>Since: </h6>DTP v. 0.x
+<p></p>
+
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>This extension point provides a place for plug-ins to add support for different types of connection profiles.  It also allows extensions to extend the capabilities of defined extension points.
+
+<p>Connection profiles are defined using the <samp>connectionProfile</samp> element.  A connection profile will belong to a single category and a single configuration type.  Categories are used for grouping like types of connection profiles (e.g. queue, database, etc.).  Configuration types are used for specifying the type of configuration information provided by the profile (e.g. New Era Open Transport, JDBC, etc.).</p>
+
+<p>The provider must define a corresponding <samp>newWizard</samp> element for creating the resource.</p>
+
+<p>The provider must define a corresponding <samp>org.eclipse.ui.propertyPages</samp> for editing the connection profile's properties.  The provider should ensure a <samp>filter</samp> element is defined to verify the selected connection profile's provider ID matches the <samp>id</samp> specified for the <samp>connectionProfile</samp> (this is accomplished using the <samp>org.eclipse.datatools.profile.property.id</samp> property).  <samp>org.eclipse.datatools.connectivity.ui.wizards.ProfileDetailsPropertyPage</samp> is a base property page implementation intended to be extended by connection profile providers for this purpose.</p>
+
+<p>Connection factories supporting a given profile may be registered using the <samp>connectionFactory</samp> element.  Connection factories allow plug-ins to create a connection to a server from a connection profile.  A connection profile provider should provide a connection factory extension.  Ideally, a connection factory's ID should correspond with the type of object created when connected (e.g. <samp>java.sql.Connection</samp>).  A connection profile provider should implement a <samp>connectionFactory</samp> with an ID of <samp>org.eclipse.datatools.connectivity.connectionFactory.pingFactory</samp> to enable the ping functionality provided in the base implementations and framework.<p/>
+
+<p>Connection profiles may be extended by other plug-ins by defining the following extension elements:
+<ul>
+<li><samp>connectionFactory - </samp></li>This element enables a plug-in to provide connection creation support for the specified connection profile.
+<li><samp>profileExtension - </samp></li>This element enables a plug-in to provide additional configuration properties for the specified connection profile.  If you are extending a connection profile in this manner and these properties need to be specified when connecting to the server defined by the connection profile, you will need to provide a connection factory extension that makes use of the additional properties.
+</ul>
+</p>
+
+<p>Tooling providers can choose to integrate with connection profiles using a variety of mechanisms.  Tooling can be keyed to a specific profile type (by checking the profile's ID attribute; e.g. the mechanism used for contributing property pages as noted above).  Tooling can also be keyed to work with profiles with a specified connection factory (e.g. DB specific tooling might be keyed to use any profile with a <samp>java.sql.Connection</samp> factory).  This approach allows tooling to work with any type of connection profile that can be represented through a particular connection API.</p>
+
+<p>The following filter properties are provided for filtering connection profile instances: (These are defined in <samp>org.eclipse.datatools.connectivity.ui.IConnectionProfileActionFilter</samp>.)
+<ul>
+<li><samp>org.eclipse.datatools.profile.property.id</samp> - </li>Use for filtering profile instances of a specific type.
+<li><samp>org.eclipse.datatools.connectivity.profile.property.categoryID</samp> - </li>Use for filtering profile instances belonging to a specific category.
+<li><samp>org.eclipse.datatools.connectivity.profile.property.factoryID</samp> - </li>Use for filtering profile instances implementing a specific type of connection factory.
+<li><samp>org.eclipse.datatools.connectivity.profile.property.hasExtendedProperties</samp> - </li>Use for filtering profile instances with one or more <samp>profileExtension</samp>s defined.
+<li><samp>org.eclipse.datatools.connectivity.profile.property.extensionID</samp> - </li>Use for filtering profile instances implementing a specific type of <samp>profileExtension</samp>.
+<li><samp>org.eclipse.datatools.connectivity.profile.property.containingViewID</samp> - </li>Use for filtering profile instances contained within a specific view.
+<li><samp>org.eclipse.datatools.connectivity.profile.property.isConnected</samp> - </li>Use for filtering profile instances based on their connection state.
+<li><samp>org.eclipse.datatools.connectivity.profile.property.supportsPing</samp> - </li>Use for filtering profile instances implementing a ping connection factory (shortcut for name=org.eclipse.datatools.connectivity.profile.property.factoryID, value=org.eclipse.datatools.connectivity.connectionFactory.pingFactory).
+</ul>
+</p></p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.category">category</a>* , <a href="#e.configurationType">configurationType</a>* , <a href="#e.connectionProfile">connectionProfile</a>* , <a href="#e.connectionFactory">connectionFactory</a>* , <a href="#e.profileExtension">profileExtension</a>* , <a href="#e.newWizard">newWizard</a>* , <a href="#e.wizardCategory">wizardCategory</a>*)*&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>point</b> - a fully qualified identifier of the target extension point, <samp>org.eclipse.datatools.connectivity.connectionProfile</samp></li>
+<li><b>id</b> - an optional identifier of the extension instance</li>
+<li><b>name</b> - an optional name of the extension instance</li>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.category">category</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST category</p>
+<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>parentCategory&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+This element is used to identify a category.  Categories are used to group related connection profile types (e.g. databases).</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>id</b> - The id of this category.  This value is referenced by <samp>connectionProfile</samp> elements.</li>
+<li><b>parentCategory</b> - The id of a parent category, if this category has a parent.</li>
+<li><b>name</b> - The display name for this category.</li>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.connectionProfile">connectionProfile</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST connectionProfile</p>
+<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>category&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>configurationType&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>icon&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>maintainConnection&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+This element is used to define a connection profile type.</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>id</b> - The id of this connection profile.  This must uniquely identify this connection profile.</li>
+<li><b>name</b> - The display name for this connection profile type.</li>
+<li><b>category</b> - The category that this connection profile belongs to.  This must map back to a <samp>category/id</samp>.</li>
+<li><b>configurationType</b> - The configuration type for this connection profile.  This must map back to a <samp>configurationType/id</samp>.</li>
+<li><b>icon</b> - The plug-in relative path to an image file.  This image will be used to identify resources of this type in the servers view.</li>
+<li><b>maintainConnection</b> - </li>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.configurationType">configurationType</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST configurationType</p>
+<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>name&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+This element is used to identify a configuration type.  A configuration type is used for determining the format of the configuration data used by a connection profile.  For example, "New Era Open Transport" or "JDBC Connection URL"</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>id</b> - The unique identifier for this configuration type.</li>
+<li><b>name</b> - The name of this configuration type.</li>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.connectionFactory">connectionFactory</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST connectionFactory</p>
+<p class=code id=dtdAttlist>profile&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>name&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>class&nbsp;&nbsp;&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+This element defines a connection factory that can be used to create connections to a server using the properties stored in a connection profile resource.</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>profile</b> - The connection profile supported by this factory.  This should reference a <samp>connectionProfile/id</samp>.</li>
+<li><b>name</b> - The name of this connection factory.</li>
+<li><b>id</b> - The unique identifier for this connection factory.  This id may be used by plug-ins to retrieve an instance of this connection factory.</li>
+<li><b>class</b> - The class that implements this connection factory.  The specified class must be an instance of IConnectionFactory.</li>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.profileExtension">profileExtension</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST profileExtension</p>
+<p class=code id=dtdAttlist>profile&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>name&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+This element is used to define an extension that provides support for setting additional properties on a connection profile.  When implementing this extension point, you should also implement a connection factory if required.</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>profile</b> - The connection profile that this extension supports.  This should map to a <samp>connectionProfile/id</samp>.</li>
+<li><b>name</b> - The name of this extension.</li>
+<li><b>id</b> - A unique identifier for this extension.</li>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.newWizard">newWizard</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST newWizard</p>
+<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>icon&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>description&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>profile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>category&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+This element is used to identify a connection profile wizard. A wizard is used to create a connection profile</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>id</b> - The unique identifier for the new wizard.</li>
+<li><b>name</b> - </li>
+<li><b>class</b> - The class that implements this new wizard.  The specified class must be an instance of IWizard.  <samp>org.eclipse.datatools.connectivity.ui.wizards.NewConnectionProfileWizard</samp> is a base implementation intended to be extended by connection profile providers.  <samp>org.eclipse.datatools.connectivity.ui.wizards.ConnectionProfileDetailsPage</samp> is a base wizard page implementation intended for use with the above wizard implementation.</li>
+<li><b>icon</b> - The plug-in relative path to an image file.  This image will be used to identify the new wizard.</li>
+<li><b>description</b> - Description of the new wizard.</li>
+<li><b>profile</b> - The connection profile supported by this new wizard.  This should reference a <samp>connectionProfile/id</samp>.</li>
+<li><b>category</b> - </li>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.wizardCategory">wizardCategory</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST wizardCategory</p>
+<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>parentCategory&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>icon&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>description&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>wizardTitle&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>wizardDescription&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>id</b> - This element is used to identify a wizard category.  Categories are used to group related connection profile wizards (e.g. databases).</li>
+<li><b>parentCategory</b> - The id of a parent category, if this category has a parent.</li>
+<li><b>name</b> - The display name for this category.</li>
+<li><b>icon</b> - The plug-in relative path to an image file.  This image will be used to identify wizard category in the new connection profile wizard.</li>
+<li><b>description</b> - Description of the new wizard category.</li>
+<li><b>wizardTitle</b> - wizard title</li>
+<li><b>wizardDescription</b> - wizard description</li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>Examples: </h6><pre>
+ <p class=code id=tag>&lt;extension
+   id=<p class=code id=cstring>&quot;sample&quot;</p><p class=code id=tag>
+   name=<p class=code id=cstring>&quot;Sample Server Extension&quot;</p><p class=code id=tag>
+   point=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.connectionProfile&quot;</p><p class=code id=tag>&gt;</p>
+  <p class=code id=tag>&lt;category
+    name=<p class=code id=cstring>&quot;Sample Server Category&quot;</p><p class=code id=tag>
+    id=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.example.sampleCategory&quot;</p><p class=code id=tag>&gt;</p>
+  <p class=code id=tag>&lt;/category&gt;</p>
+  <p class=code id=tag>&lt;configurationType
+    name=<p class=code id=cstring>&quot;Sample Configuration Type&quot;</p><p class=code id=tag>
+    id=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.example.sampleConfigurationType&quot;</p><p class=code id=tag>&gt;</p>
+  <p class=code id=tag>&lt;/configurationType&gt;</p>
+  <p class=code id=tag>&lt;connectionFactory
+    profile=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.example.sampleConnectionProfile&quot;</p><p class=code id=tag>
+    name=<p class=code id=cstring>&quot;Shared Connection Factory&quot;</p><p class=code id=tag>
+    id=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.example.sharedConnectionFactory&quot;</p><p class=code id=tag>
+    class=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.example.SharedConnectionFactory&quot;</p><p class=code id=tag>&gt;</p>
+  <p class=code id=tag>&lt;/connectionFactory&gt;</p>
+  <p class=code id=tag>&lt;connectionFactory
+    profile=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.example.sampleConnectionProfile&quot;</p><p class=code id=tag>
+    name=<p class=code id=cstring>&quot;Ping Connection Factory&quot;</p><p class=code id=tag>
+    id=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.connectionFactory.pingFactory&quot;</p><p class=code id=tag>
+    class=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.example.SharedConnectionFactory&quot;</p><p class=code id=tag>&gt;</p>
+  <p class=code id=tag>&lt;/connectionFactory&gt;</p>
+  <p class=code id=tag>&lt;profileExtension
+    profile=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.example.sampleConnectionProfile&quot;</p><p class=code id=tag>
+    name=<p class=code id=cstring>&quot;Sample Extraneous Properties&quot;</p><p class=code id=tag>
+    id=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.example.sampleConnectionProfileExtension&quot;</p><p class=code id=tag>&gt;</p>
+  <p class=code id=tag>&lt;/profileExtension&gt;</p>
+  <p class=code id=tag>&lt;connectionProfile
+    configurationType=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.example.sampleConfigurationType&quot;</p><p class=code id=tag>
+    name=<p class=code id=cstring>&quot;Sample Connection Profile&quot;</p><p class=code id=tag>
+    icon=<p class=code id=cstring>&quot;icons/sample.gif&quot;</p><p class=code id=tag>
+    category=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.example.sampleCategory&quot;</p><p class=code id=tag>
+    id=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.example.sampleConnectionProfile&quot;</p><p class=code id=tag>&gt;</p>
+  <p class=code id=tag>&lt;/connectionProfile&gt;</p>
+ <p class=code id=tag>&lt;/extension&gt;</p>
+</pre>
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>API Information: </h6>[Enter API information here.]
+<p></p>
+
+<br>
+<p class=note id=copyright>
+<p>Copyright (c) 2004-2005 Sybase, Inc.</p>
+<p>All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+<a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a></p>
+
+<p>Contributors: rcernich - initial API and implementation</p>
+<p></p>
+
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.connectivity/schema-doc/org_eclipse_datatools_connectivity_driverExtension.html b/plugins/org.eclipse.datatools.connectivity/schema-doc/org_eclipse_datatools_connectivity_driverExtension.html
new file mode 100644
index 0000000..88ac794
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/schema-doc/org_eclipse_datatools_connectivity_driverExtension.html
@@ -0,0 +1,133 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Driver Definition</title>
+<style>@import url("file:/F:/Eclipse3.2M6/eclipse/plugins/org.eclipse.sdk_3.2.0.v20060329/book.css");</style>
+<style>@import url("file:/F:/Eclipse3.2M6/eclipse/configuration/org.eclipse.osgi/bundles/77/1/.cp/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>Driver Definition</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.connectivity.driverExtension<p></p>
+<h6 class=CaptionFigColumn id=header>Since: </h6>DTP 0.x
+<p></p>
+
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6><p>
+The driverExtension is used by developers to define templates that describe the mechanical components necessary for opening connections to servers.  Users create specific driver definitions using these templates.
+</p>
+<p>
+The driver definitions are intended to be used in conjunction with connection profiles, where the driver definition specifies the mechanics (e.g. JAR files, driver class names, etc.) necessary for opening the connection and where the connection profile specifies the particulars for connecting to a specific server (e.g. host, port, user ID, password, etc.).
+</p></p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.category">category</a>* , <a href="#e.driverTemplate">driverTemplate</a>)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.category">category</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST category</p>
+<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>description&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>parentCategory&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+This element is used to identify a category.  Categories are used to group related connection profile types (e.g. databases).</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>id</b> - The id of this category.  This value is referenced by <samp>driverTemplate</samp> elements.</li>
+<li><b>name</b> - The display name for this category.</li>
+<li><b>description</b> - The description of this category. This value will be used in the UI to describe a particular category.</li>
+<li><b>parentCategory</b> - The id of a parent category, if this category has a parent.</li>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.driverTemplate">driverTemplate</a> (<a href="#e.properties">properties</a>?)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST driverTemplate</p>
+<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>description&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>parentCategory&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>jarList&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>createDefault&nbsp;&nbsp;&nbsp;&nbsp;(true | false) "true"<p class=code id=dtdAttlist>emptyJarListIsOK&nbsp;(true | false) "false"&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+This element is used to identify a template.</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>id</b> - The id of this driver type.</li>
+<li><b>name</b> - The display name for this driver type.</li>
+<li><b>description</b> - The description of this driver type. This value will be used in the UI to describe a particular type.</li>
+<li><b>parentCategory</b> - The id of the category to which this template belongs.</li>
+<li><b>jarList</b> - The list of JAR files used to create the classpath used when connecting using this driver.</li>
+<li><b>createDefault</b> - Specifies whether or not this template should be used to create a default driver definition instance.  If set to true, a driver definition instance with the name specified in the template is guaranteed to exist in the list of driver definitions.  Default is true.</li>
+<li><b>emptyJarListIsOK</b> - Specifies whether or not it is valid for the jarList property to be empty.  Default is false.</li>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.properties">properties</a> (<a href="#e.property">property</a>+)&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+Parent container for specific driver definition properties.</p>
+<br><br>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.property">property</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST property</p>
+<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>description&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>value&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>visible&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(true | false) "true"<p class=code id=dtdAttlist>example&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>required&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(true | false) "true"<p class=code id=dtdAttlist>generated&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(true | false) "false"<p class=code id=dtdAttlist>customPropertyDescriptor&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>category&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+A property definition for a driver definition.</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>id</b> - The id of this property.  Used to identify this property in the driver definition.</li>
+<li><b>name</b> - The display name for this property.</li>
+<li><b>description</b> - The description of this property. This value will be used in the UI to describe a particular type.</li>
+<li><b>value</b> - The default value for this property.</li>
+<li><b>visible</b> - Specifies whether or not this property is visible and editable to the user.  Default is true.</li>
+<li><b>example</b> - Specifies an example value for this property.</li>
+<li><b>required</b> - Specifies whether or not this is a required property.  Default is true.</li>
+<li><b>generated</b> - currently unused and undefined.</li>
+<li><b>customPropertyDescriptor</b> - Provides a way to specify a custom property descriptor that extends the class org.eclipse.ui.views.properties.PropertyDescriptor. An example of this is the class org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor, which provides a property editor that masks the characters for a password property. Anything you can implement as a property descriptor for the Properties Viewer, you can use here. Or if you want to make the property values read-only, you can use org.eclipse.ui.views.properties.PropertyDescriptor directly.</li>
+<li><b>category</b> - The category tag is used to provide an optional category for your template properties. The default is "General" if no category is specified for the property. You can use this to group properties in arbitrary categories.</li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>Examples: </h6><extension
+         point="org.eclipse.datatools.connectivity.driverExtension">
+      <category
+            id="org.eclipse.datatools.connectivity.db.driverCategory"
+            name="Database"/>
+      <driverTemplate
+            createDefault="false"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.connectivity.db.genericDriverTemplate"
+            jarList=""
+            name="Generic JDBC Driver"
+            parentCategory="org.eclipse.datatools.connectivity.db.driverCategory">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="Driver Class"
+                  value=""
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.dbdefinition"
+                  name="DBDefinition Model Instance"
+                  value=""
+                  required="true"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+   </extension>
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>API Information: </h6>[Enter API information here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>Supplied Implementation: </h6>[Enter information about supplied implementation of this extension point.]
+<p></p>
+
+<br>
+<p class=note id=copyright>
+<p>Copyright (c) 2004-2005 Sybase, Inc.</p>
+<p>All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+<a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a></p>
+
+<p>Contributors: brianf - initial API and implementation</p>
+<p></p>
+
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.connectivity/schema/ProfileManagerInitializationProvider.exsd b/plugins/org.eclipse.datatools.connectivity/schema/ProfileManagerInitializationProvider.exsd
new file mode 100644
index 0000000..24eff06
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/schema/ProfileManagerInitializationProvider.exsd
@@ -0,0 +1,174 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.connectivity">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.datatools.connectivity" id="ProfileManagerInitializationProvider" name="ProfileManagerInitializationProvider"/>
+      </appInfo>
+      <documentation>
+         This extension point will provide a way for a sample profile to be populated at start-up time.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <complexType>
+         <sequence>
+            <element ref="connection"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="connection">
+      <complexType>
+         <sequence>
+            <element ref="property" minOccurs="0" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="jarList" type="string">
+            <annotation>
+               <documentation>
+                  The jar list for the driver definition.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="connectionProfileName" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The name of the generated connection profile.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="connectionProfileID" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The id of the connection profile to generate.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="driverDefinitionName" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The name of the generated driver definition.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="driverTemplateID" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The id of the driver template to generate driver definition from.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="connectionInitializer" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Class that initializes the connection.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.core.runtime.IExecutableExtension"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="property">
+      <annotation>
+         <documentation>
+            Collection of properties for specifying the properties needed by the driver template.
+
+If a property value requires the location of a plugin&apos;s state location, enter the value as follows:
+
+value=&quot;Plugin_State_Location/sample_value&quot;&gt;
+
+Plugin_State_Location will be substituted with the declaring extension&apos;s state location.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The id of the driver template property.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="value" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The value of the driver template property.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         DTP 1.6
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         Copyright (c) 2008 IBM Corporation.
+All rights reserved. This program and the accompanying materials are made
+available under the  terms of the Eclipse Public License v1.0 which accompanies
+this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html.
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.connectivity/schema/cipherProvider.exsd b/plugins/org.eclipse.datatools.connectivity/schema/cipherProvider.exsd
new file mode 100644
index 0000000..c80c928
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/schema/cipherProvider.exsd
@@ -0,0 +1,164 @@
+<?xml version='1.0' encoding='UTF-8'?>

+<!-- Schema file written by PDE -->

+<schema targetNamespace="org.eclipse.datatools.connectivity" xmlns="http://www.w3.org/2001/XMLSchema">

+<annotation>

+      <appInfo>

+         <meta.schema plugin="org.eclipse.datatools.connectivity" id="cipherProvider" name="Connection Profiles Store Cipher Provider"/>

+      </appInfo>

+      <documentation>

+         This cipherProvider extension point allows a client to extend the connection profile store encryption framework with  a custom provider of &lt;i&gt;javax.crypto.Cipher&lt;/i&gt; instances.

+      </documentation>

+   </annotation>

+

+   <element name="extension">

+      <annotation>

+         <appInfo>

+            <meta.element />

+         </appInfo>

+      </annotation>

+      <complexType>

+         <sequence>

+            <element ref="cipherProvider" minOccurs="1" maxOccurs="unbounded"/>

+         </sequence>

+         <attribute name="point" type="string" use="required">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="id" type="string">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="name" type="string">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+               <appInfo>

+                  <meta.attribute translatable="true"/>

+               </appInfo>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="cipherProvider">

+      <annotation>

+         <documentation>

+            Defines the file extension and its corresponding provider of &lt;i&gt;javax.crypto.Cipher&lt;/i&gt; instances for the encryption of connection profile store files.

+         </documentation>

+      </annotation>

+      <complexType>

+         <attribute name="fileExtension" type="string" use="required">

+            <annotation>

+               <documentation>

+                  The file extension of connection profile store files that shall be encrypted and decrypted using the cipher provider class specified in the  &lt;i&gt;class&lt;/i&gt; attribute.  

+&lt;br&gt;This attribute value may include an optional dot before the file extension (e.g. &quot;profiles&quot; or &quot;.profiles&quot;).  The keyword &quot;default&quot; may be specified as the attribute value to match files with no file extension.

+&lt;br&gt;The default connection profile store files that persists in the workspace use the &quot;.dat&quot; and &quot;.bak&quot; file extensions.  Adopters may need to handle potential conflict with the default encryption implementation, if implementing a cipherProvider extension for files with these file extensions.

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="class" type="string" use="required">

+            <annotation>

+               <documentation>

+                  The concrete class that implements the &lt;code&gt;org.eclipse.datatools.connectivity.security.ICipherProvider&lt;/code&gt; interface to provide the &lt;i&gt;javax.crypto.Cipher&lt;/i&gt; instances for the encryption and decryption of connection profile store files.

+&lt;br&gt;A custom class may optionally extend the &lt;code&gt;org.eclipse.datatools.connectivity.security.CipherProviderBase&lt;/code&gt; base class implementation, which reads a secret (symmetric) key specification from a bundled resource.

+               </documentation>

+               <appInfo>

+                  <meta.attribute kind="java" basedOn=":org.eclipse.datatools.connectivity.security.ICipherProvider"/>

+               </appInfo>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="since"/>

+      </appInfo>

+      <documentation>

+         1.2.4 (DTP 1.9.2)

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="examples"/>

+      </appInfo>

+      <documentation>

+         &lt;code&gt;&lt;pre&gt;

+     &lt;extension

+           id=&quot;org.company.connectivity.security.cipherProvider&quot;

+           point=&quot;org.eclipse.datatools.connectivity.cipherProvider&quot;&gt;

+        &lt;cipherProvider

+              fileExtension=&quot;profile&quot;

+              class=&quot;org.company.connectivity.security.ProfileStoreCipherProvider&quot;&gt;

+        &lt;/cipherProvider&gt;

+        &lt;cipherProvider

+              fileExtension=&quot;default&quot;

+              class=&quot;org.company.connectivity.security.ProfileStoreCipherProvider&quot;&gt;

+        &lt;/cipherProvider&gt;

+     &lt;/extension&gt;

+&lt;/pre&gt;&lt;/code&gt;

+This example registers org.company.connectivity.security.ProfileStoreCipherProvider as the provider for files with the extension &quot;.profile&quot; and for those with no file extension. 

+&lt;br&gt;&lt;br&gt;

+Sample class implementation of the org.eclipse.datatools.connectivity.security.ICipherProvider interface:

+&lt;code&gt;&lt;pre&gt;

+import org.eclipse.core.runtime.Platform;

+import org.eclipse.datatools.connectivity.security.CipherProviderBase;

+import org.eclipse.datatools.connectivity.security.ICipherProvider;

+import org.osgi.framework.Bundle;

+

+public class ProfileStoreCipherProvider extends CipherProviderBase 

+ implements ICipherProvider

+{

+    /* (non-Javadoc)

+     * @see org.eclipse.datatools.connectivity.security.CipherProviderBase#getKeyResource()

+     */

+    @Override

+    protected URL getKeyResource()

+    {

+        Bundle bundle = Platform.getBundle( &quot;org.company.connectivity.security&quot; );

+        return bundle != null ? 

+                bundle.getResource( &quot;cpkey&quot; ) :  //$NON-NLS-1$

+                super.getKeyResource();

+    }

+}

+&lt;/pre&gt;&lt;/code&gt;

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="apiinfo"/>

+      </appInfo>

+      <documentation>

+         [Provisional] An extension must implement the ICipherProvider interface defined in the &lt;code&gt;org.eclipse.datatools.connectivity.security&lt;/code&gt; package. See the package&apos;s JavaDoc documentation for more information.

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="implementation"/>

+      </appInfo>

+      <documentation>

+         &lt;code&gt;org.eclipse.datatools.connectivity.security.CipherProviderBase&lt;/code&gt; is the base class implementation of the &lt;code&gt;org.eclipse.datatools.connectivity.security.ICipherProvider&lt;/code&gt; interface.  It uses a default bundled encryption key as its &lt;i&gt;javax.crypto.spec.SecretKeySpec&lt;/i&gt;.

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="copyright"/>

+      </appInfo>

+      <documentation>

+         Copyright (c) 2011 Actuate Corporation.

+All rights reserved. This program and the accompanying materials are made available under the  terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html .

+      </documentation>

+   </annotation>

+

+</schema>

diff --git a/plugins/org.eclipse.datatools.connectivity/schema/connectionProfile.exsd b/plugins/org.eclipse.datatools.connectivity/schema/connectionProfile.exsd
new file mode 100644
index 0000000..d7d1032
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/schema/connectionProfile.exsd
@@ -0,0 +1,627 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.connectivity" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.datatools.connectivity" id="connectionProfile" name="Connection Profile"/>
+      </appInfo>
+      <documentation>
+         This extension point provides a place for plug-ins to add support for different types of connection profiles.  It also allows extensions to extend the capabilities of defined extension points.
+
+&lt;p&gt;Connection profiles are defined using the &lt;samp&gt;connectionProfile&lt;/samp&gt; element.  A connection profile will belong to a single category and a single configuration type.  Categories are used for grouping like types of connection profiles (e.g. queue, database, etc.).  Configuration types are used for specifying the type of configuration information provided by the profile (e.g. New Era Open Transport, JDBC, etc.).&lt;/p&gt;
+
+&lt;p&gt;The provider must define a corresponding &lt;samp&gt;newWizard&lt;/samp&gt; element for creating the resource.&lt;/p&gt;
+
+&lt;p&gt;The provider must define a corresponding &lt;samp&gt;org.eclipse.ui.propertyPages&lt;/samp&gt; for editing the connection profile&apos;s properties.  The provider should ensure a &lt;samp&gt;filter&lt;/samp&gt; element is defined to verify the selected connection profile&apos;s provider ID matches the &lt;samp&gt;id&lt;/samp&gt; specified for the &lt;samp&gt;connectionProfile&lt;/samp&gt; (this is accomplished using the &lt;samp&gt;org.eclipse.datatools.profile.property.id&lt;/samp&gt; property).  &lt;samp&gt;org.eclipse.datatools.connectivity.ui.wizards.ProfileDetailsPropertyPage&lt;/samp&gt; is a base property page implementation intended to be extended by connection profile providers for this purpose.&lt;/p&gt;
+
+&lt;p&gt;Connection factories supporting a given profile may be registered using the &lt;samp&gt;connectionFactory&lt;/samp&gt; element.  Connection factories allow plug-ins to create a connection to a server from a connection profile.  A connection profile provider should provide a connection factory extension.  Ideally, a connection factory&apos;s ID should correspond with the type of object created when connected (e.g. &lt;samp&gt;java.sql.Connection&lt;/samp&gt;).  A connection profile provider should implement a &lt;samp&gt;connectionFactory&lt;/samp&gt; with an ID of &lt;samp&gt;org.eclipse.datatools.connectivity.connectionFactory.pingFactory&lt;/samp&gt; to enable the ping functionality provided in the base implementations and framework.&lt;p/&gt;
+
+&lt;p&gt;Connection profiles may be extended by other plug-ins by defining the following extension elements:
+&lt;ul&gt;
+&lt;li&gt;&lt;samp&gt;connectionFactory - &lt;/samp&gt;&lt;/li&gt;This element enables a plug-in to provide connection creation support for the specified connection profile.
+&lt;li&gt;&lt;samp&gt;profileExtension - &lt;/samp&gt;&lt;/li&gt;This element enables a plug-in to provide additional configuration properties for the specified connection profile.  If you are extending a connection profile in this manner and these properties need to be specified when connecting to the server defined by the connection profile, you will need to provide a connection factory extension that makes use of the additional properties.
+&lt;/ul&gt;
+&lt;/p&gt;
+
+&lt;p&gt;Tooling providers can choose to integrate with connection profiles using a variety of mechanisms.  Tooling can be keyed to a specific profile type (by checking the profile&apos;s ID attribute; e.g. the mechanism used for contributing property pages as noted above).  Tooling can also be keyed to work with profiles with a specified connection factory (e.g. DB specific tooling might be keyed to use any profile with a &lt;samp&gt;java.sql.Connection&lt;/samp&gt; factory).  This approach allows tooling to work with any type of connection profile that can be represented through a particular connection API.&lt;/p&gt;
+
+&lt;p&gt;The following filter properties are provided for filtering connection profile instances: (These are defined in &lt;samp&gt;org.eclipse.datatools.connectivity.ui.IConnectionProfileActionFilter&lt;/samp&gt;.)
+&lt;ul&gt;
+&lt;li&gt;&lt;samp&gt;org.eclipse.datatools.profile.property.id&lt;/samp&gt; - &lt;/li&gt;Use for filtering profile instances of a specific type.
+&lt;li&gt;&lt;samp&gt;org.eclipse.datatools.connectivity.profile.property.categoryID&lt;/samp&gt; - &lt;/li&gt;Use for filtering profile instances belonging to a specific category.
+&lt;li&gt;&lt;samp&gt;org.eclipse.datatools.connectivity.profile.property.factoryID&lt;/samp&gt; - &lt;/li&gt;Use for filtering profile instances implementing a specific type of connection factory.
+&lt;li&gt;&lt;samp&gt;org.eclipse.datatools.connectivity.profile.property.hasExtendedProperties&lt;/samp&gt; - &lt;/li&gt;Use for filtering profile instances with one or more &lt;samp&gt;profileExtension&lt;/samp&gt;s defined.
+&lt;li&gt;&lt;samp&gt;org.eclipse.datatools.connectivity.profile.property.extensionID&lt;/samp&gt; - &lt;/li&gt;Use for filtering profile instances implementing a specific type of &lt;samp&gt;profileExtension&lt;/samp&gt;.
+&lt;li&gt;&lt;samp&gt;org.eclipse.datatools.connectivity.profile.property.containingViewID&lt;/samp&gt; - &lt;/li&gt;Use for filtering profile instances contained within a specific view.
+&lt;li&gt;&lt;samp&gt;org.eclipse.datatools.connectivity.profile.property.isConnected&lt;/samp&gt; - &lt;/li&gt;Use for filtering profile instances based on their connection state.
+&lt;li&gt;&lt;samp&gt;org.eclipse.datatools.connectivity.profile.property.supportsPing&lt;/samp&gt; - &lt;/li&gt;Use for filtering profile instances implementing a ping connection factory (shortcut for name=org.eclipse.datatools.connectivity.profile.property.factoryID, value=org.eclipse.datatools.connectivity.connectionFactory.pingFactory).
+&lt;/ul&gt;
+&lt;/p&gt;
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appInfo>
+            <meta.element />
+         </appInfo>
+      </annotation>
+      <complexType>
+         <sequence minOccurs="0" maxOccurs="unbounded">
+            <element ref="category" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="configurationType" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="connectionProfile" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="connectionFactory" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="profileExtension" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="newWizard" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="wizardCategory" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="connectionFactoryAdapter" minOccurs="0" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  a fully qualified identifier of the target extension point, &lt;samp&gt;org.eclipse.datatools.connectivity.connectionProfile&lt;/samp&gt;
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  an optional identifier of the extension instance
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  an optional name of the extension instance
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="category">
+      <annotation>
+         <documentation>
+            This element is used to identify a category.  Categories are used to group related connection profile types (e.g. databases).
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The id of this category.  This value is referenced by &lt;samp&gt;connectionProfile&lt;/samp&gt; elements.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="parentCategory" type="string">
+            <annotation>
+               <documentation>
+                  The id of a parent category, if this category has a parent.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  The display name for this category.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="connectionProfile">
+      <annotation>
+         <documentation>
+            This element is used to define a connection profile type.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="migration" minOccurs="0" maxOccurs="1"/>
+         </sequence>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The id of this connection profile.  This must uniquely identify this connection profile.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  The display name for this connection profile type.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="category" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The category that this connection profile belongs to.  This must map back to a &lt;samp&gt;category/id&lt;/samp&gt;.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="configurationType" type="string">
+            <annotation>
+               <documentation>
+                  The configuration type for this connection profile.  This must map back to a &lt;samp&gt;configurationType/id&lt;/samp&gt;.
+               </documentation>
+               <appInfo>
+                  <meta.attribute deprecated="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="icon" type="string">
+            <annotation>
+               <documentation>
+                  The plug-in relative path to an image file.  This image will be used to identify resources of this type in the servers view.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="resource"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="maintainConnection" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="pingFactory" type="string">
+            <annotation>
+               <documentation>
+                  Connection factory used to implement &quot;ping&quot; functionality.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.datatools.connectivity.IConnectionFactory"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="propertiesPersistenceHook" type="string">
+            <annotation>
+               <documentation>
+                  Allows a plugin to specify which properties should be persisted by the framework, as well as given the framework a place to query for the &quot;completeness&quot; of a property set.  Please see the javadoc for &lt;code&gt;org.eclipse.datatools.connectivity.IPropertiesPersistenceHook&lt;/code&gt;.  By default, all properties specified will be persisted and the property set will always be treated as &quot;complete.&quot;
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.datatools.connectivity.PropertiesPersistenceHook:org.eclipse.datatools.connectivity.IPropertiesPersistenceHook"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="configurationType">
+      <annotation>
+         <appInfo>
+            <meta.element deprecated="true"/>
+         </appInfo>
+         <documentation>
+            This element is used to identify a configuration type.  A configuration type is used for determining the format of the configuration data used by a connection profile.  For example, &quot;New Era Open Transport&quot; or &quot;JDBC Connection URL&quot;
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The unique identifier for this configuration type.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  The name of this configuration type.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="connectionFactory">
+      <annotation>
+         <documentation>
+            This element defines a connection factory that can be used to create connections to a server using the properties stored in a connection profile resource.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="profile" type="string">
+            <annotation>
+               <documentation>
+                  The connection profile supported by this factory.  This should reference a &lt;samp&gt;connectionProfile/id&lt;/samp&gt;.  If this field is specified, this factory will only be available for the specified profile, otherwise this factory will be available for all profiles with the specified &lt;code&gt;factory&lt;/code&gt;.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  The name of this connection factory.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The unique identifier for this connection factory.  This id may be used by plug-ins to retrieve an instance of this connection factory.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The class that implements this connection factory.  The specified class must be an instance of IConnectionFactory.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.datatools.connectivity.IConnectionFactory"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="priority" type="string">
+            <annotation>
+               <documentation>
+                  The priority is an integer value indicating which connection factory will take precedence when multiple connection factories are registered for a specific profile.  Higher numbers will override lower numbers.  If the priority is not specified then it will be considered the lowest priority.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="profileExtension">
+      <annotation>
+         <documentation>
+            This element is used to define an extension that provides support for setting additional properties on a connection profile.  When implementing this extension point, you should also implement a connection factory if required.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="profile" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The connection profile that this extension supports.  This should map to a &lt;samp&gt;connectionProfile/id&lt;/samp&gt;.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  The name of this extension.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  A unique identifier for this extension.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="propertiesPersistenceHook" type="string">
+            <annotation>
+               <documentation>
+                  Allows a plugin to specify which properties should be persisted by the framework, as well as given the framework a place to query for the &quot;completeness&quot; of a property set.  Please see the javadoc for &lt;code&gt;org.eclipse.datatools.connectivity.IPropertiesPersistenceHook&lt;/code&gt;.  By default, all properties specified will be persisted and the property set will always be treated as &quot;complete.&quot;
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.datatools.connectivity.PropertiesPersistenceHook:org.eclipse.datatools.connectivity.IPropertiesPersistenceHook"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="newWizard">
+      <annotation>
+         <documentation>
+            This element is used to identify a connection profile wizard. A wizard is used to create a connection profile
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The unique identifier for the new wizard.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The class that implements this new wizard.  The specified class must be an instance of IWizard.  &lt;samp&gt;org.eclipse.datatools.connectivity.ui.wizards.NewConnectionProfileWizard&lt;/samp&gt; is a base implementation intended to be extended by connection profile providers.  &lt;samp&gt;org.eclipse.datatools.connectivity.ui.wizards.ConnectionProfileDetailsPage&lt;/samp&gt; is a base wizard page implementation intended for use with the above wizard implementation.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.datatools.connectivity.ui.wizards.NewConnectionProfileWizard:org.eclipse.jface.wizard.IWizard"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="icon" type="string">
+            <annotation>
+               <documentation>
+                  The plug-in relative path to an image file.  This image will be used to identify the new wizard.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="description" type="string">
+            <annotation>
+               <documentation>
+                  Description of the new wizard.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="profile" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The connection profile supported by this new wizard.  This should reference a &lt;samp&gt;connectionProfile/id&lt;/samp&gt;.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="category" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="suppressedProfile" type="string">
+            <annotation>
+               <documentation>
+                  The connection profile suppressed by this new wizard.  This should reference a &lt;samp&gt;connectionProfile/id&lt;/samp&gt;.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="wizardCategory">
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  This element is used to identify a wizard category.  Categories are used to group related connection profile wizards (e.g. databases).
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="parentCategory" type="string">
+            <annotation>
+               <documentation>
+                  The id of a parent category, if this category has a parent.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  The display name for this category.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="icon" type="string">
+            <annotation>
+               <documentation>
+                  The plug-in relative path to an image file.  This image will be used to identify wizard category in the new connection profile wizard.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="description" type="string">
+            <annotation>
+               <documentation>
+                  Description of the new wizard category.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="wizardTitle" type="string">
+            <annotation>
+               <documentation>
+                  wizard title
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="wizardDescription" type="string">
+            <annotation>
+               <documentation>
+                  wizard description
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="connectionFactoryAdapter">
+      <annotation>
+         <documentation>
+            This element defines a factory that can be used to create connections representing a specific type of view onto a server using an existing connection factory to generate the underlying connection object used by the view.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  The name of this connection factory.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The class that implements this connection factory.  The specified class must be an instance of IConnectionFactory.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.datatools.connectivity.IConnectionFactory"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The unique identifier for this connection factory.  This id may be used by plug-ins to retrieve an instance of this connection factory.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="factory" type="string" use="required">
+            <annotation>
+               <documentation>
+                  A connection factory ID to which this adapter applies.  This matches a connectionFactory/@id value.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="profile" type="string">
+            <annotation>
+               <documentation>
+                  The connection profile supported by this factory.  This should reference a &lt;samp&gt;connectionProfile/@id&lt;/samp&gt;.  If this field is specified, this factory will only be available for the specified profile, otherwise this factory will be available for all profiles with the specified &lt;code&gt;factory&lt;/code&gt;.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="migration">
+      <annotation>
+         <documentation>
+            Use this element to add migration support for a deprecated profile type (e.g. ID changes, property changes, etc.).
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence minOccurs="0" maxOccurs="unbounded">
+            <element ref="propertyMigration" minOccurs="0" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="newProviderID" type="string">
+            <annotation>
+               <documentation>
+                  The ID of the new profile provider to which the old profile should be associated with.  If this attribute is not specified, the ID of the profile provider is not changed.  However, propertyMigration elements, if any, will still be processed and applied.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="class" type="string">
+            <annotation>
+               <documentation>
+                  A migration implementation that allows the provider to perform a specialized migration.  Use this method if you require a more complex migration algorithm (i.e. anything other than simple name and property mapping).
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.datatools.connectivity.ConnectionProfileMigratorBase:org.eclipse.datatools.connectivity.IConnectionProfileMigrator"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="propertyMigration">
+      <annotation>
+         <documentation>
+            This element is used to specify a simple mapping for property key names from a source profile to a target profile.
+
+If this element is used, the targetProfile attribute must be set.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="oldPropertyKey" type="string">
+            <annotation>
+               <documentation>
+                  The key name in the source profile.  If this property is not specified, the new property will be defaulted with the value of newValue.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="newPropertyKey" type="string">
+            <annotation>
+               <documentation>
+                  The key name in the target profile.  If this value is not specified, the old property will be deleted.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="newValue" type="string">
+            <annotation>
+               <documentation>
+                  Use this attribute for populating a default property value for a new property.  newPropertyKey must be set.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         DTP v. 0.x
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         &lt;pre&gt;
+ &lt;extension
+   id=&quot;sample&quot;
+   name=&quot;Sample Server Extension&quot;
+   point=&quot;org.eclipse.datatools.connectivity.connectionProfile&quot;&gt;
+  &lt;category
+    name=&quot;Sample Server Category&quot;
+    id=&quot;org.eclipse.datatools.connectivity.example.sampleCategory&quot;&gt;
+  &lt;/category&gt;
+  &lt;configurationType
+    name=&quot;Sample Configuration Type&quot;
+    id=&quot;org.eclipse.datatools.connectivity.example.sampleConfigurationType&quot;&gt;
+  &lt;/configurationType&gt;
+  &lt;connectionFactory
+    profile=&quot;org.eclipse.datatools.connectivity.example.sampleConnectionProfile&quot;
+    name=&quot;Shared Connection Factory&quot;
+    id=&quot;org.eclipse.datatools.connectivity.example.sharedConnectionFactory&quot;
+    class=&quot;org.eclipse.datatools.connectivity.example.SharedConnectionFactory&quot;&gt;
+  &lt;/connectionFactory&gt;
+  &lt;connectionFactory
+    profile=&quot;org.eclipse.datatools.connectivity.example.sampleConnectionProfile&quot;
+    name=&quot;Ping Connection Factory&quot;
+    id=&quot;org.eclipse.datatools.connectivity.connectionFactory.pingFactory&quot;
+    class=&quot;org.eclipse.datatools.connectivity.example.SharedConnectionFactory&quot;&gt;
+  &lt;/connectionFactory&gt;
+  &lt;profileExtension
+    profile=&quot;org.eclipse.datatools.connectivity.example.sampleConnectionProfile&quot;
+    name=&quot;Sample Extraneous Properties&quot;
+    id=&quot;org.eclipse.datatools.connectivity.example.sampleConnectionProfileExtension&quot;&gt;
+  &lt;/profileExtension&gt;
+  &lt;connectionProfile
+    configurationType=&quot;org.eclipse.datatools.connectivity.example.sampleConfigurationType&quot;
+    name=&quot;Sample Connection Profile&quot;
+    icon=&quot;icons/sample.gif&quot;
+    category=&quot;org.eclipse.datatools.connectivity.example.sampleCategory&quot;
+    id=&quot;org.eclipse.datatools.connectivity.example.sampleConnectionProfile&quot;&gt;
+  &lt;/connectionProfile&gt;
+ &lt;/extension&gt;
+&lt;/pre&gt;
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         &lt;p&gt;Copyright (c) 2004-2005 Sybase, Inc.&lt;/p&gt;
+&lt;p&gt;All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+&lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;&lt;/p&gt;
+
+&lt;p&gt;Contributors: rcernich - initial API and implementation&lt;/p&gt;
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.connectivity/schema/driverExtension.exsd b/plugins/org.eclipse.datatools.connectivity/schema/driverExtension.exsd
new file mode 100644
index 0000000..b44442c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/schema/driverExtension.exsd
@@ -0,0 +1,640 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.connectivity" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.datatools.connectivity" id="driverExtension" name="Driver Definition"/>
+      </appinfo>
+      <documentation>
+         &lt;p&gt;
+The driverExtension is used by developers to define templates that describe the mechanical components necessary for opening connections to servers.  Users create specific driver definitions using these templates.
+&lt;/p&gt;
+&lt;p&gt;
+The driver definitions are intended to be used in conjunction with connection profiles, where the driver definition specifies the mechanics (e.g. JAR files, driver class names, etc.) necessary for opening the connection and where the connection profile specifies the particulars for connecting to a specific server (e.g. host, port, user ID, password, etc.).
+&lt;/p&gt;
+&lt;p&gt;
+In addition, using the driverTemplateOverride functionality, adopters can take existing driver templates (such as for one of the Enablement projects) and update the driver&apos;s jar list to actually point to a wrapped jar, or update individual properties of a template to fit a particular use. 
+&lt;/p&gt;
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="category" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="driverTemplate" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="driverTemplateOverride" minOccurs="0" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="category">
+      <annotation>
+         <documentation>
+            This element is used to identify a category.  Categories are used to group related connection profile types (e.g. databases).
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The id of this category.  This value is referenced by &lt;samp&gt;driverTemplate&lt;/samp&gt; elements.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  The display name for this category.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="description" type="string">
+            <annotation>
+               <documentation>
+                  The description of this category. This value will be used in the UI to describe a particular category.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="parentCategory" type="string">
+            <annotation>
+               <documentation>
+                  The id of a parent category, if this category has a parent.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="driverTemplate">
+      <annotation>
+         <documentation>
+            This element is used to identify a template.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="properties" minOccurs="0" maxOccurs="1"/>
+            <element ref="migration" minOccurs="0" maxOccurs="1"/>
+         </sequence>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The id of this driver type.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  The display name for this driver type.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="description" type="string">
+            <annotation>
+               <documentation>
+                  The description of this driver type. This value will be used in the UI to describe a particular type.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="parentCategory" type="string">
+            <annotation>
+               <documentation>
+                  The id of the category to which this template belongs.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="jarList" type="string">
+            <annotation>
+               <documentation>
+                  The list of JAR files used to create the classpath used when connecting using this driver.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="createDefault" type="boolean" use="default" value="true">
+            <annotation>
+               <documentation>
+                  Specifies whether or not this template should be used to create a default driver definition instance.  If set to true, a driver definition instance with the name specified in the template is guaranteed to exist in the list of driver definitions.  Default is true.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="emptyJarListIsOK" type="boolean" use="default" value="false">
+            <annotation>
+               <documentation>
+                  Specifies whether or not it is valid for the jarList property to be empty.  Default is false.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="valuesProvider" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.datatools.connectivity.drivers.IDriverValuesProvider"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+         <attribute name="defaultDefinitionName" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="properties">
+      <annotation>
+         <documentation>
+            Parent container for specific driver definition properties.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="property" minOccurs="1" maxOccurs="unbounded"/>
+         </sequence>
+      </complexType>
+   </element>
+
+   <element name="property">
+      <annotation>
+         <documentation>
+            A property definition for a driver definition.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The id of this property.  Used to identify this property in the driver definition.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The display name for this property.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="description" type="string">
+            <annotation>
+               <documentation>
+                  The description of this property. This value will be used in the UI to describe a particular type.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="value" type="string">
+            <annotation>
+               <documentation>
+                  The default value for this property.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="visible" type="boolean" use="default" value="true">
+            <annotation>
+               <documentation>
+                  Specifies whether or not this property is visible and editable to the user.  Default is true.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="example" type="string">
+            <annotation>
+               <documentation>
+                  Specifies an example value for this property.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="required" type="boolean" use="default" value="true">
+            <annotation>
+               <documentation>
+                  Specifies whether or not this is a required property.  Default is true.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="generated" type="boolean" use="default" value="false">
+            <annotation>
+               <documentation>
+                  currently unused and undefined.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="customPropertyDescriptor" type="string">
+            <annotation>
+               <documentation>
+                  Provides a way to specify a custom property descriptor that extends the class org.eclipse.ui.views.properties.PropertyDescriptor. An example of this is the class org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor, which provides a property editor that masks the characters for a password property. Anything you can implement as a property descriptor for the Properties Viewer, you can use here. Or if you want to make the property values read-only, you can use org.eclipse.ui.views.properties.PropertyDescriptor directly.
+
+Note that your property descriptor must implement a zero-argument constructor in order to be created correctly. This zero-argument constructor should provide the id and display name of the property you are editing. For example:
+
+ private static String DRIVER_CLASS_PROP_ID = &quot;org.eclipse.datatools.connectivity.db.driverClass&quot;; //$NON-NLS-1$
+ 
+ public DriverClassBrowsePropertyDescriptor() {
+  super(DRIVER_CLASS_PROP_ID, 
+    ConnectivityUIPlugin.getDefault().getResourceString(&quot;DriverClassBrowsePropertyDescriptor.property.label&quot;)); //$NON-NLS-1$
+ }
+ 
+Also note that there is a new interface that your Property Descriptor can extend called org.eclipse.datatools.connectivity.drivers.IDriverInstancePropertyDescriptor. This interface allows you to pass the Driver Instance to your descriptor when it is instantiated in the Edit Driver Definition dialog.
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.ui.views.properties.PropertyDescriptor" deprecated="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+         <attribute name="category" type="string">
+            <annotation>
+               <documentation>
+                  The category tag is used to provide an optional category for your template properties. The default is &quot;General&quot; if no category is specified for the property. You can use this to group properties in arbitrary categories.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="driverTemplateOverride">
+      <annotation>
+         <documentation>
+            This element is used to identify a template override
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence minOccurs="0" maxOccurs="1">
+            <element ref="propertyOverrides"/>
+         </sequence>
+         <attribute name="targetId" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The id of the driver template to be overridden.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  The overridden display name for this driver type.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="description" type="string">
+            <annotation>
+               <documentation>
+                  The overridden description of this driver type. This value will be used in the UI to describe a particular type.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="parentCategory" type="string">
+            <annotation>
+               <documentation>
+                  The id of the category to which this template belongs.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="jarList" type="string">
+            <annotation>
+               <documentation>
+                  The list of JAR files used to create the classpath used when connecting using this driver.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="createDefault" type="boolean">
+            <annotation>
+               <documentation>
+                  Specifies whether or not this template should be used to create a default driver definition instance.  If set to true, a driver definition instance with the name specified in the template is guaranteed to exist in the list of driver definitions.  Default is true.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="emptyJarListIsOK" type="boolean">
+            <annotation>
+               <documentation>
+                  Specifies whether or not it is valid for the jarList property to be empty.  Default is false.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="valuesProvider" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.datatools.connectivity.drivers.IDriverValuesProvider"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+         <attribute name="priority" type="string" use="default" value="1">
+            <annotation>
+               <documentation>
+                  The value for priority should be a value of 1 to 5, with 1 being low and 5 being high, indicating the priority for this override. If there are other overrides for the particular target driver template, the priority will be used to indicate which override should take precedence. If no priority is specified, the priority will default to &quot;1&quot;. If multiple overrides have the same priority, the one with the lowest plug-in ID alphabetically (IDs will be sorted in ascending alphabetical order) will take precedence.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="defaultDefinitionName" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  The id attribute, though optional, is required to allow one driverTemplateOverride instance to override another. For example, if driver A has an override B that changes or removes a property, another adopter might implement override C that uses the id of override B as the targetId, thus replacing the overridden driver template with their own. In the case of multiple overrides or overrides of overrides, the priority is taken into account.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="remove" type="boolean">
+            <annotation>
+               <documentation>
+                  Removes the template from the list of available templates.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="propertyOverrides">
+      <annotation>
+         <documentation>
+            Parent container for specific driver definition overridden properties
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence minOccurs="1" maxOccurs="unbounded">
+            <element ref="propertyOverride"/>
+         </sequence>
+      </complexType>
+   </element>
+
+   <element name="propertyOverride">
+      <annotation>
+         <documentation>
+            A property override definition for a driver template
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="targetId" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The id of the property to override. Must match the property ID from the driver template you are overriding.  Used to identify this property in the driver definition.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  The overridden display name for this property.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="description" type="string">
+            <annotation>
+               <documentation>
+                  The overridden description of this property. This value will be used in the UI to describe a particular type.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="value" type="string">
+            <annotation>
+               <documentation>
+                  The overridden default value for this property.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="visible" type="boolean">
+            <annotation>
+               <documentation>
+                  Specifies whether or not this property is visible and editable to the user.  Default is true.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="example" type="string">
+            <annotation>
+               <documentation>
+                  Specifies an example value for this property.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="required" type="boolean">
+            <annotation>
+               <documentation>
+                  Specifies whether or not this is a required property.  Default is true.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="customPropertyDescriptor" type="string">
+            <annotation>
+               <documentation>
+                  Provides a way to override a custom property descriptor that extends the class org.eclipse.ui.views.properties.PropertyDescriptor. An example of this is the class org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor, which provides a property editor that masks the characters for a password property. Anything you can implement as a property descriptor for the Properties Viewer, you can use here. Or if you want to make the property values read-only, you can use org.eclipse.ui.views.properties.PropertyDescriptor directly.
+
+Note that your property descriptor must implement a zero-argument constructor in order to be created correctly. This zero-argument constructor should provide the id and display name of the property you are editing. For example:
+
+ private static String DRIVER_CLASS_PROP_ID = &quot;org.eclipse.datatools.connectivity.db.driverClass&quot;; //$NON-NLS-1$
+ 
+ public DriverClassBrowsePropertyDescriptor() {
+  super(DRIVER_CLASS_PROP_ID, 
+    ConnectivityUIPlugin.getDefault().getResourceString(&quot;DriverClassBrowsePropertyDescriptor.property.label&quot;)); //$NON-NLS-1$
+ }
+ 
+Also note that there is a new interface that your Property Descriptor can extend called org.eclipse.datatools.connectivity.drivers.IDriverInstancePropertyDescriptor. This interface allows you to pass the Driver Instance to your descriptor when it is instantiated in the Edit Driver Definition dialog.
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.ui.views.properties.PropertyDescriptor:" deprecated="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+         <attribute name="category" type="string">
+            <annotation>
+               <documentation>
+                  The category tag is used to override the category for your template properties. The default is &quot;General&quot; if no category is specified for the property. You can use this to group properties in arbitrary categories.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="remove" type="boolean">
+            <annotation>
+               <documentation>
+                  Indicates if this property should be removed
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="migration">
+      <annotation>
+         <documentation>
+            Use this element to add migration support for a deprecated driver type (e.g. ID changes, property changes, etc.). Make sure if you are migrating driver definitions of one template to another and the first driver template was set to &quot;createDefault = true&quot;, that you set the old driver template to createDefault = false or the driver manager will attempt to recreate the older template and then migrate it.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence minOccurs="0" maxOccurs="unbounded">
+            <element ref="propertyMigration" minOccurs="0" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="newDriverTemplateID" type="string">
+            <annotation>
+               <documentation>
+                  The ID of the new driver template to which the old driver template should be associated with.  If this attribute is not specified, the ID of the driver template is not changed.  However, propertyMigration elements, if any, will still be processed and applied.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="class" type="string">
+            <annotation>
+               <documentation>
+                  A migration implementation that allows the provider to perform a specialized migration.  Use this method if you require a more complex migration algorithm (i.e. anything other than simple name and property mapping).
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.datatools.connectivity.drivers.DriverMigratorBase:org.eclipse.datatools.connectivity.drivers.IDriverMigrator"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="propertyMigration">
+      <annotation>
+         <documentation>
+            This element is used to specify a simple mapping for property key names from a source driver definition to a target driver definition
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="oldPropertyKey" type="string">
+            <annotation>
+               <documentation>
+                  The key name in the source driver definition  If this property is not specified, the new property will be defaulted with the value of newValue.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="newPropertyKey" type="string">
+            <annotation>
+               <documentation>
+                  The key name in the target driver definition  If this value is not specified, the old property will be deleted.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="newValue" type="string">
+            <annotation>
+               <documentation>
+                  Use this attribute for populating a default property value for a new property.  newPropertyKey must be set.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         DTP 0.x
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         &lt;extension
+         point=&quot;org.eclipse.datatools.connectivity.driverExtension&quot;&gt;
+      &lt;category
+            id=&quot;org.eclipse.datatools.connectivity.db.driverCategory&quot;
+            name=&quot;Database&quot;/&gt;
+      &lt;driverTemplate
+            createDefault=&quot;false&quot;
+            emptyJarListIsOK=&quot;false&quot;
+            id=&quot;org.eclipse.datatools.connectivity.db.genericDriverTemplate&quot;
+            jarList=&quot;&quot;
+            name=&quot;Generic JDBC Driver&quot;
+            parentCategory=&quot;org.eclipse.datatools.connectivity.db.driverCategory&quot;&gt;
+         &lt;properties&gt;
+            &lt;property
+                  generated=&quot;false&quot;
+                  id=&quot;org.eclipse.datatools.connectivity.db.driverClass&quot;
+                  name=&quot;Driver Class&quot;
+                  value=&quot;&quot;
+                  required=&quot;true&quot;
+                  visible=&quot;true&quot;/&gt;
+            &lt;property
+                  generated=&quot;false&quot;
+                  id=&quot;org.eclipse.datatools.connectivity.db.dbdefinition&quot;
+                  name=&quot;DBDefinition Model Instance&quot;
+                  value=&quot;&quot;
+                  required=&quot;true&quot;
+                  visible=&quot;true&quot;/&gt;
+         &lt;/properties&gt;
+      &lt;/driverTemplate&gt;
+    &lt;driverTemplateOverride
+          jarList=&quot;[PLUGIN]\mydriver\driver.jar&quot;
+          name=&quot;Override for Generic JDBC Driver&quot;
+          targetId=&quot;org.eclipse.datatools.connectivity.db.genericDriverTemplate&quot;&gt;
+       &lt;propertyOverrides&gt;
+          &lt;propertyOverride
+                value=&quot;my.class&quot;
+                targetId=&quot;org.eclipse.datatools.connectivity.db.driverClass&quot;/&gt;
+       &lt;/propertyOverrides&gt;
+    &lt;/driverTemplateOverride&gt;
+   &lt;/extension&gt;
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiInfo"/>
+      </appinfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="implementation"/>
+      </appinfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="copyright"/>
+      </appinfo>
+      <documentation>
+         &lt;p&gt;Copyright (c) 2004-2007 Sybase, Inc.&lt;/p&gt;
+&lt;p&gt;All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+&lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;&lt;/p&gt;
+
+&lt;p&gt;Contributors: brianf - initial API and implementation&lt;/p&gt;
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ConnectAdapter.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ConnectAdapter.java
new file mode 100644
index 0000000..b6c13fd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ConnectAdapter.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+import org.eclipse.core.runtime.CoreException;
+
+/**
+ * @author rcernich
+ * 
+ * Created on May 24, 2005
+ */
+public class ConnectAdapter implements IConnectListener {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectListener#okToClose(org.eclipse.datatools.connectivity.ConnectEvent)
+	 */
+	public boolean okToClose(ConnectEvent event) {
+		return true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectListener#openConnection(org.eclipse.datatools.connectivity.ConnectEvent)
+	 */
+	public void openConnection(ConnectEvent event) throws CoreException {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectListener#closeConnection(org.eclipse.datatools.connectivity.ConnectEvent)
+	 */
+	public void closeConnection(ConnectEvent event) throws CoreException {
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ConnectEvent.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ConnectEvent.java
new file mode 100644
index 0000000..ae263c3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ConnectEvent.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+import java.util.EventObject;
+
+/**
+ * @author rcernich
+ * 
+ * Created on May 24, 2005
+ */
+public class ConnectEvent extends EventObject {
+
+	private IManagedConnection mConnection;
+	private Object mContext;
+
+	/**
+	 * 
+	 */
+	public ConnectEvent(IConnectionProfile profile) {
+		this(profile, null);
+	}
+
+	public ConnectEvent(IConnectionProfile profile, IManagedConnection connection) {
+		this(profile, connection, null);
+	}
+
+	public ConnectEvent(IConnectionProfile profile, IManagedConnection connection,
+						Object context) {
+		super(profile);
+		mConnection = connection;
+		mContext = context;
+	}
+
+	/**
+	 * @return the connection profile associated with this event
+	 */
+	public IConnectionProfile getConnectionProfile() {
+		return (IConnectionProfile) getSource();
+	}
+
+	/**
+	 * @return the managed connection associated with this event
+	 */
+	public IManagedConnection getConnection() {
+		return mConnection;
+	}
+
+	/**
+	 * @return the connection specific context associated with this event
+	 */
+	public Object getContext() {
+		return mContext;
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ConnectionProfileConstants.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ConnectionProfileConstants.java
new file mode 100644
index 0000000..f740d36
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ConnectionProfileConstants.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+
+/**
+ * @author rcernich
+ * 
+ * Created on Jun 1, 2005
+ */
+public class ConnectionProfileConstants {
+
+	/*
+	 * Connection factory used for ping operations. This factory is also used
+	 * for defining server version properties (if supported).
+	 */
+	public static final String PING_FACTORY_ID = "org.eclipse.datatools.connectivity.connectionFactory.pingFactory"; //$NON-NLS-1$
+
+	// Properties
+	public static final String PROP_PREFIX = "org.eclipse.datatools.connectivity."; //$NON-NLS-1$
+
+	// Properties common to all profiles
+	public static final String PROP_UID = PROP_PREFIX + "uid"; //$NON-NLS-1$
+	public static final String PROP_PWD = PROP_PREFIX + "pwd"; //$NON-NLS-1$
+	public static final String PROP_DRIVER_DEFINITION_ID = PROP_PREFIX
+			+ "driverDefinitionID"; //$NON-NLS-1$
+
+	// Version caching
+	/**
+	 * The profile extension ID used to store filter settings.
+	 */
+	public static final String VERSION_INFO_PROFILE_EXTENSION_ID = "org.eclipse.datatools.connectivity.versionInfo"; //$NON-NLS-1$
+
+	public static final String PROP_SERVER_PREFIX = "server."; //$NON-NLS-1$
+
+	public static final String PROP_SERVER_VERSION = PROP_SERVER_PREFIX + "version"; //$NON-NLS-1$
+	public static final String PROP_SERVER_NAME = PROP_SERVER_PREFIX + "name"; //$NON-NLS-1$
+
+	public static final String PROP_TECHNOLOGY_PREFIX = "technology."; //$NON-NLS-1$
+
+	public static final String PROP_TECHNOLOGY_NAME_PREFIX = PROP_TECHNOLOGY_PREFIX + "name."; //$NON-NLS-1$
+	public static final String PROP_TECHNOLOGY_VERSION_PREFIX = PROP_TECHNOLOGY_PREFIX + "version."; //$NON-NLS-1$
+
+	public static final String UNKNOWN_VERSION = ConnectivityPlugin
+			.getDefault().getResourceString(
+					"ConnectionProfileConstants.unknownVersion"); //$NON-NLS-1$
+
+	/**
+	 * @deprecated
+	 */
+	public static final String PROP_TECHNOLOGY_VERSION_SUFFIX = ".version"; //$NON-NLS-1$
+	/**
+	 * @deprecated
+	 */
+	public static final String PROP_TECHNOLOGY_NAME_SUFFIX = ".mame"; //$NON-NLS-1$
+
+	public static final String createTechnologyVersionKey(String technology) {
+		return PROP_TECHNOLOGY_VERSION_PREFIX + technology;
+	}
+
+	public static final String createTechnologyNameKey(String technology) {
+		return PROP_TECHNOLOGY_NAME_PREFIX + technology;
+	}
+
+	// Not intended to be instantiated
+	private ConnectionProfileConstants() {
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ConnectionProfileException.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ConnectionProfileException.java
new file mode 100644
index 0000000..1f8e045
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ConnectionProfileException.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+/**
+ * Base exception type for connection profile operations.
+ * 
+ * @author rcernich
+ * 
+ * Created on Jan 15, 2004
+ */
+public class ConnectionProfileException extends Exception {
+
+	/**
+	 * 
+	 */
+	public ConnectionProfileException() {
+		super();
+	}
+
+	/**
+	 * @param message
+	 */
+	public ConnectionProfileException(String message) {
+		super(message);
+	}
+
+	/**
+	 * @param message
+	 * @param cause
+	 */
+	public ConnectionProfileException(String message, Throwable cause) {
+		super(message, cause);
+	}
+
+	/**
+	 * @param cause
+	 */
+	public ConnectionProfileException(Throwable cause) {
+		super(cause);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ConnectionProfileMigratorBase.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ConnectionProfileMigratorBase.java
new file mode 100644
index 0000000..03650d3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ConnectionProfileMigratorBase.java
@@ -0,0 +1,196 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2011 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExecutableExtension;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileManager;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileProvider;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+import org.eclipse.datatools.connectivity.internal.ProfileExtensionProvider;
+
+/**
+ * Base implementation for {@link IConnectionProfileMigrator}. Extenders can
+ * override {@link #performMigration(IConnectionProfile)} to specialize property
+ * migration for their particular connection profile.
+ * {@link #applyPropertyMigrations(IConnectionProfile)} is supplied to allow
+ * extenders to take advantage of the declarative property migration
+ * functionality available through propertyMigration elements.
+ * 
+ * This API is provisional.
+ * 
+ * @author rcernich
+ * 
+ * Created on Apr 5, 2007
+ */
+public class ConnectionProfileMigratorBase implements
+		IConnectionProfileMigrator, IExecutableExtension {
+
+	private static final String ELEM_PROPERTY_MIGRATION = "propertyMigration"; //$NON-NLS-1$
+	private static final String ATTR_OLD_PROPERTY_KEY = "oldPropertyKey"; //$NON-NLS-1$
+	private static final String ATTR_NEW_PROPERTY_KEY = "newPropertyKey"; //$NON-NLS-1$
+	private static final String ATTR_NEW_VALUE = "newValue"; //$NON-NLS-1$
+	private static final String ATTR_NEW_PROVIDER_ID = "newProviderID"; //$NON-NLS-1$
+
+	private Map mPropertyMigrations; // oldKey,newKey
+	private Map mDefaults; // newKey,default
+	private String mNewProviderID;
+
+	/**
+	 * Default constructor
+	 */
+	public ConnectionProfileMigratorBase() {
+	}
+
+	/**
+	 * Default implementation. Simply invokes
+	 * {@link #applyPropertyMigrations(IConnectionProfile)}
+	 */
+	public void performMigration(IConnectionProfile profile) {
+		applyPropertyMigrations(profile);
+	}
+
+	/**
+	 * @return the new provider ID as specified in the migration element; note,
+	 *         may be the same as the original provider id
+	 */
+	public final String getNewProviderID() {
+		return mNewProviderID;
+	}
+
+	/**
+	 * Applies any property migrations specified through propertyMigration
+	 * elements. These are for simple changes to property keys. For more
+	 * sophisticated migrations, adopters should override
+	 * {@link #performMigration(IConnectionProfile)}.
+	 * 
+	 * @param profile the profile to apply the changes to
+	 */
+	protected final void applyPropertyMigrations(IConnectionProfile profile) {
+		Properties props = profile.getProperties(mNewProviderID);
+		if (props == null) {
+			props = new Properties();
+		}
+
+		// rename/delete existing properties
+		for (Iterator it = mPropertyMigrations.entrySet().iterator(); it
+				.hasNext();) {
+			Map.Entry entry = (Map.Entry) it.next();
+			String oldKey = (String) entry.getKey();
+			String newKey = (String) entry.getValue();
+			String value = props.getProperty(oldKey);
+			props.remove(oldKey);
+			if (newKey != null && value !=null) {
+				props.setProperty(newKey, value);
+			}
+		}
+
+		// set new properties using default
+		for (Iterator it = mDefaults.entrySet().iterator(); it.hasNext();) {
+			Map.Entry entry = (Map.Entry) it.next();
+			String value = (String) entry.getValue();
+			if (value != null) {
+				props.setProperty((String) entry.getKey(), value);
+			}
+		}
+		profile.setProperties(mNewProviderID, props);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.core.runtime.IExecutableExtension#setInitializationData(org.eclipse.core.runtime.IConfigurationElement,
+	 *      java.lang.String, java.lang.Object)
+	 */
+	public final void setInitializationData(IConfigurationElement config,
+			String propertyName, Object data) throws CoreException {
+		mNewProviderID = config.getAttribute(ATTR_NEW_PROVIDER_ID);
+		if (mNewProviderID != null && mNewProviderID.length() < 1) {
+			IConfigurationElement parentElement = (IConfigurationElement) config
+					.getParent();
+			if (ConnectionProfileManager.EXT_ELEM_CONNECTION_PROFILE
+					.equals(parentElement.getName())) {
+				mNewProviderID = parentElement
+						.getAttribute(ConnectionProfileProvider.ATTR_ID);
+			}
+			else if (ConnectionProfileManager.EXT_ELEM_PROFILE_EXTENSION
+					.equals(parentElement.getName())) {
+				mNewProviderID = parentElement
+						.getAttribute(ProfileExtensionProvider.ATTR_ID);
+			}
+			else {
+				Status status = new Status(Status.ERROR, ConnectivityPlugin.getSymbolicName(), -1,
+						ConnectivityPlugin.getDefault().getResourceString(
+								"migration.error.unknownParentElement", //$NON-NLS-1$
+								new Object[] { parentElement.getName()}), null);
+				throw new CoreException(status);
+			}
+		}
+		else if (!ConnectionProfileManager.getInstance().getProviders()
+				.containsKey(mNewProviderID)) {
+			Status status = new Status(Status.ERROR, ConnectivityPlugin.getSymbolicName(), -1,
+					ConnectivityPlugin.getDefault().getResourceString(
+							"migration.error.providerDoesNotExist", //$NON-NLS-1$
+							new Object[] { mNewProviderID}), null);
+			throw new CoreException(status);
+		}
+		parsePropertyMigrations(config);
+	}
+
+	private void parsePropertyMigrations(IConfigurationElement config)
+			throws CoreException {
+		IConfigurationElement[] propertyMigrations = config
+				.getChildren(ELEM_PROPERTY_MIGRATION);
+		mPropertyMigrations = new HashMap(propertyMigrations.length);
+		mDefaults = new HashMap(propertyMigrations.length);
+		if (propertyMigrations == null || propertyMigrations.length == 0) {
+			return;
+		}
+		for (int index = 0, count = propertyMigrations.length; index < count; ++index) {
+			String oldPropertyKey = propertyMigrations[index]
+					.getAttribute(ATTR_OLD_PROPERTY_KEY);
+			if (oldPropertyKey == null || oldPropertyKey.length() == 0) {
+				String newPropertyKey = propertyMigrations[index]
+						.getAttribute(ATTR_NEW_PROPERTY_KEY);
+				if (newPropertyKey == null || newPropertyKey.length() == 0) {
+					Status status = new Status(
+							Status.ERROR,
+							ConnectivityPlugin.getSymbolicName(),
+							-1,
+							ConnectivityPlugin
+									.getDefault()
+									.getResourceString(
+											"migration.error.invalidPropertyMigrationElement"), //$NON-NLS-1$
+							null);
+					throw new CoreException(status);
+				}
+				String value = propertyMigrations[index]
+						.getAttribute(ATTR_NEW_VALUE);
+				if (value != null) {
+					mDefaults.put(newPropertyKey, value);
+				} // else // should we log a warning here?
+			}
+			else {
+				mPropertyMigrations.put(oldPropertyKey,
+						propertyMigrations[index]
+								.getAttribute(ATTR_NEW_PROPERTY_KEY));
+			}
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/DriverConnectionBase.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/DriverConnectionBase.java
new file mode 100644
index 0000000..61ba30f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/DriverConnectionBase.java
@@ -0,0 +1,156 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2010 Sybase, Inc. and others
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ *      Actuate Corporation - fix for Bugzilla 305757
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.drivers.DriverManager;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+
+/**
+ * Base implementation for a connection that uses the driver framework.
+ * Sub-classes should invoke open() from their constructor to create the
+ * connection.
+ * 
+ * This class takes care of working with the driver management framework,
+ * including setting up the class loader required for locating connection
+ * classes.
+ * 
+ * This class depends on the
+ * <code>org.eclipse.datatools.connectivity.ConnectionProfileConstants.PROP_DRIVER_DEFINITION_ID</code>
+ * property being set on the connection profile.
+ * 
+ * @author rcernich
+ */
+public abstract class DriverConnectionBase extends VersionProviderConnection {
+
+	protected DriverInstance mDriver;
+	protected Object mConnection;
+	protected Throwable mConnectException;
+
+	public DriverConnectionBase(IConnectionProfile profile, Class factoryClass) {
+		super(profile, factoryClass);
+	}
+
+	/**
+	 * opens a connection to the server identified by the connection profile.
+	 */
+	public void open() {
+		if (mConnection != null) {
+			close();
+		}
+
+		mConnection = null;
+		mConnectException = null;
+
+		internalCreateConnection();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.IConnection#getRawConnection()
+	 */
+	public Object getRawConnection() {
+		return mConnection;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.IConnection#getConnectException()
+	 */
+	public Throwable getConnectException() {
+		return mConnectException;
+	}
+
+	/**
+	 * Creates the connection to the server identified by the connection
+	 * profile.
+	 * 
+	 * @param cl created from the driver definition (if a class path was
+	 *        specified)
+	 * @return the new connection
+	 * @throws Throwable any error that occurred when trying to create the
+	 *         connection
+	 */
+	protected abstract Object createConnection(ClassLoader cl) throws Throwable;
+	
+	/**
+	 * Initialize version information from the server.
+	 */
+	protected abstract void initVersions();
+
+	/**
+	 * Returns the parent class loader that should be used as the parent to the
+	 * class loader created from the driver definition.
+	 * 
+	 * @return the parent class loader
+	 */
+	protected ClassLoader getParentClassLoader() {
+		return null;
+	}
+
+	private void internalCreateConnection() {
+		try {
+			DriverInstance driver = getDriverDefinition();
+			ClassLoader parentCL = getParentClassLoader();
+			ClassLoader driverCL = parentCL == null ? driver.getClassLoader()
+					: driver.createClassLoader(parentCL);
+			
+			mConnection = createConnection(driverCL);
+
+			if (mConnection == null) {
+				// Connect attempt failed without throwing an exception.
+				// We'll generate one for them.
+				throw new Exception(ConnectivityPlugin.getDefault().getResourceString("DriverConnectionBase.error.unknown")); //$NON-NLS-1$
+			}
+
+			initVersions();
+			updateVersionCache();
+		}
+		catch (Throwable t) {
+			mConnectException = t;
+			clearVersionCache();
+		}
+	}
+
+	/**
+	 * @return the driver definition referenced by the connection profile.
+	 * 
+	 * @throws Exception if the driver cannot be located.
+	 */
+	protected DriverInstance getDriverDefinition() throws Exception {
+		if (mDriver == null) {
+			String driverID = getDriverDefinitionId();
+			if (driverID == null) {
+			    String messageId = "DriverConnectionBase.error.driverDefinitionNotSpecified"; //$NON-NLS-1$
+				throw new Exception(ConnectivityPlugin.getDefault().getResourceString(messageId), 
+				        new Throwable( messageId ));
+			}
+
+			mDriver = DriverManager.getInstance().getDriverInstanceByID(
+					driverID);
+			if (mDriver == null) {
+                String messageId = "DriverConnectionBase.error.driverDefinitionNotFound"; //$NON-NLS-1$
+				throw new Exception(ConnectivityPlugin.getDefault().getResourceString(messageId),
+				        new Throwable( messageId ));
+			}
+		}
+
+		return mDriver;
+	}
+
+	protected String getDriverDefinitionId() {
+        IConnectionProfile profile = getConnectionProfile();
+        if( profile == null )
+            return null;
+        return profile.getBaseProperties().getProperty(
+                ConnectionProfileConstants.PROP_DRIVER_DEFINITION_ID);
+	}
+	
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ICategory.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ICategory.java
new file mode 100644
index 0000000..9e719d3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ICategory.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+import java.util.List;
+
+/**
+ * This interface is used for accessing functionality specific to connection
+ * profile categories.
+ * 
+ * @author rcernich
+ * 
+ * Created on Jan 15, 2004
+ */
+public interface ICategory {
+
+	/**
+	 * @return the id of this category
+	 */
+	String getId();
+
+	/**
+	 * @return the name of this category
+	 */
+	String getName();
+
+	/**
+	 * @return the parent of this category; null if no parent exists.
+	 */
+	ICategory getParent();
+
+	/**
+	 * Returns a List of ICategory objects that are direct children of this
+	 * category.
+	 * 
+	 * @return all child categories of this category
+	 */
+	List getChildCategories();
+
+	/**
+	 * Returns a List of IConnectionProfile objects that are direct children of
+	 * this category
+	 * 
+	 * @return all connection profiles within the specified container.
+	 */
+	List getAssociatedProfiles();
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IConfigurationType.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IConfigurationType.java
new file mode 100644
index 0000000..045eaa1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IConfigurationType.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+/**
+ * This interface is used for accessing functionality specific to configuration
+ * types.
+ * 
+ * @deprecated
+ * @author rcernich
+ * 
+ * Created on Jan 15, 2004
+ */
+public interface IConfigurationType {
+
+	/**
+	 * @return the id of this configuration type
+	 */
+	String getId();
+
+	/**
+	 * @return the name of this configuration type
+	 */
+	String getName();
+
+	/**
+	 * @param obj
+	 * 
+	 * @return getId().equals(obj.getId())
+	 */
+	boolean equals(Object obj);
+
+	/**
+	 * @return getId().hashCode()
+	 */
+	int hashCode();
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IConnectListener.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IConnectListener.java
new file mode 100644
index 0000000..4e8be86
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IConnectListener.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+import org.eclipse.core.runtime.CoreException;
+
+/**
+ * Used by UI components to synchronize connectivity of connection profiles.
+ * When a request is made to open or close a profile, any component referencing
+ * that profile is notifed through this interface. In the event a close is
+ * requested, a check is made prior to issuing the close call to see if any open
+ * connections are in use.
+ * 
+ * @author rcernich
+ * 
+ * @deprecated
+ * 
+ * Created on May 24, 2005
+ */
+public interface IConnectListener {
+
+	/**
+	 * Return false if the connection should be kept open
+	 * 
+	 * @param event
+	 * @return true if the connection can be closed; false if it should be left
+	 *         open.
+	 */
+	boolean okToClose(ConnectEvent event);
+
+	/**
+	 * The listener should open a connection to the server.
+	 * 
+	 * @param event
+	 * @throws CoreException if an error occurs opening the connection.
+	 */
+	void openConnection(ConnectEvent event) throws CoreException;
+
+	/**
+	 * The listener should close its connection to the server.
+	 * 
+	 * @param event
+	 * @throws CoreException if an error occurs closing the connection.
+	 */
+	void closeConnection(ConnectEvent event) throws CoreException;
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IConnection.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IConnection.java
new file mode 100644
index 0000000..6e04c81
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IConnection.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+
+/**
+ * The base interface for working with connections created from connection
+ * profiles.
+ * 
+ * @author rcernich
+ * 
+ * Created on Jan 15, 2004
+ */
+public interface IConnection {
+	
+	/**
+	 * Returns the native object representing the connection to the server. For
+	 * example, a java.sql.Connection object for a JDBC connection.
+	 * 
+	 * @return an object representing the native connection to the server.
+	 */
+	Object getRawConnection();
+
+	/**
+	 * Closes the underlying native connection object. This causes other users
+	 * of this connection to be notified of this connection's closure.
+	 */
+	void close();
+
+	/**
+	 * Return exception in connection
+	 * 
+	 * @return exception thrown when connecting to the server
+	 */
+	Throwable getConnectException();
+	
+	/**
+	 * @return the connection profile used to create this connection.
+	 */
+	IConnectionProfile getConnectionProfile();
+	
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IConnectionFactory.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IConnectionFactory.java
new file mode 100644
index 0000000..8b5942f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IConnectionFactory.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+/**
+ * This interface is used for creating connections to connection profiles. This
+ * interface must be implemented by connection factory extensions.
+ * 
+ * @author rcernich
+ * 
+ * Created on Jan 16, 2004
+ */
+public interface IConnectionFactory {
+
+	/**
+	 * This method creates a connection to a server based on the properties
+	 * specified by the connection profile. This method uses the user id and
+	 * password specified in the profile.
+	 * 
+	 * @param profile the profile to connect to.
+	 * 
+	 * @return a connection if successful
+	 */
+	IConnection createConnection(IConnectionProfile profile);
+
+	/**
+	 * This method creates a connection to a server based on the properties
+	 * specified by the connection profile. This method uses the user id and
+	 * password specified in the method call.
+	 * 
+	 * @param profile the profile to connect to.
+	 * @param uid the user id to use
+	 * @param pwd the password to use
+	 * 
+	 * @return a connection if successful
+	 */
+	IConnection createConnection(IConnectionProfile profile, String uid,
+			String pwd);
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IConnectionFactoryProvider.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IConnectionFactoryProvider.java
new file mode 100644
index 0000000..99a1844
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IConnectionFactoryProvider.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005, 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ *          IBM Corporation - fix for defect 222818
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+/**
+ * This interface is used to access functionality provided by a connection
+ * factory extension.
+ * 
+ * @author rcernich
+ * 
+ * Created on Jan 5, 2004
+ */
+public interface IConnectionFactoryProvider extends IConnectionFactory {
+
+	/**
+	 * @return the id of the provided connection factory
+	 */
+	String getId();
+
+	/**
+	 * @return the name of the provided connection factory
+	 */
+	String getName();
+
+	/**
+	 * @return the class specified by the extension point.
+	 */
+	Class getConnectionFactoryClass();
+	
+	/**
+	 * @return the priority of the provided connection factory
+	 */
+	String getPriority();
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IConnectionProfile.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IConnectionProfile.java
new file mode 100644
index 0000000..3597d5f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IConnectionProfile.java
@@ -0,0 +1,429 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+import java.util.Map;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.jobs.IJobChangeListener;
+
+/**
+ * The interface used when working with an instance of a connection profile.
+ * 
+ * @author rcernich
+ * 
+ * Created on Jan 14, 2004
+ */
+public interface IConnectionProfile {
+	
+	/**
+	 * Property set ID for common connection profile properties
+	 */
+	static final String CONNECTION_PROFILE_PROPERTY_SET = IConnectionProfile.class.getName();
+
+	/**
+	 * Property ID for boolean "connected" state.
+	 * @deprecated use {@link #CONNECTION_STATE_PROPERTY_ID}
+	 */
+	static final String CONNECTED_PROPERTY_ID = "connected"; //$NON-NLS-1$
+
+	/**
+	 * Property ID for "connection" state.
+	 */
+	static final String CONNECTION_STATE_PROPERTY_ID = "connectionState"; //$NON-NLS-1$
+
+	/**
+	 * Property ID for profile name.
+	 */
+	static final String NAME_PROPERTY_ID = "name"; //$NON-NLS-1$
+
+	/**
+	 * Property ID for profile description.
+	 */
+	static final String DESCRIPTION_PROPERTY_ID = "description"; //$NON-NLS-1$
+
+	/**
+	 * Property ID for profile auto-connect.
+	 */
+	static final String AUTO_CONNECT_PROPERTY_ID = "autoConnect"; //$NON-NLS-1$
+
+	/**
+	 * Property ID for profile instance ID.
+	 */
+	static final String INSTANCE_ID_PROPERTY_ID = "instanceID"; //$NON-NLS-1$
+	
+	/**
+	 * Transient marker for profile instance.
+	 */
+	static final String TRANSIENT_PROPERTY_ID = "isTransient"; //$NON-NLS-1$
+
+	// Connection states
+	
+	/**
+	 * When the connection profile is in this state, no active connections to
+	 * the server exist.
+	 */
+	static final int DISCONNECTED_STATE = 0;
+
+	/**
+	 * When the connection profile is in this state, active connections to the
+	 * server exist.
+	 */
+	static final int CONNECTED_STATE = 1;
+
+	/**
+	 * When the connection profile is in this state, no active connections to
+	 * the server exist. However, cached server data has been loaded into memory
+	 * and is available for use.
+	 */
+	static final int WORKING_OFFLINE_STATE = 2;
+
+	// General profile methods
+
+	/**
+	 * @return the name of this connection profile
+	 */
+	String getName();
+
+	/**
+	 * @return the description of this connection profile
+	 */
+	String getDescription();
+
+	/**
+	 * @return whether it's autoconnect or not
+	 */
+	boolean isAutoConnect();
+	
+	/**
+	 * @return the static ID for this connection profile
+	 */
+	String getInstanceID();
+
+	/**
+	 * This method returns the connection profile that this connection profile
+	 * derives from. For example, a JMS queue session may depend on an instance
+	 * of a JNDI connection profile.
+	 * 
+	 * @return the connection profile this connection profile is derived from.
+	 */
+	IConnectionProfile getParentProfile();
+
+	/**
+	 * This method returns the properties managed by the base connection profile
+	 * extension.
+	 * 
+	 * @return a properties object containing properties defined by the base
+	 *         connection profile extension.
+	 */
+	Properties getBaseProperties();
+
+	/**
+	 * This method sets the properties managed by the base connection profile
+	 * extension.
+	 * 
+	 * @param props the properties to set as the base properties.
+	 */
+	void setBaseProperties(Properties props);
+
+	/**
+	 * This method returns the properties associated with a connection profile
+	 * profile extension. The type specified must match the id of a profile
+	 * extension or the base profile.
+	 * 
+	 * @param type the type of properties.
+	 * 
+	 * @return the properties managed by the specified profile extension.
+	 */
+	Properties getProperties(String type);
+
+	/**
+	 * This method sets the properties managed by a specific profile extension.
+	 * The type specified must match the id of a profile extension or the base
+	 * profile.
+	 * 
+	 * @param type the type of properties.
+	 * @param props the properties to set.
+	 */
+	void setProperties(String type, Properties props);
+	
+	/**
+	 * Returns true if all property sets associated with this profile are
+	 * complete; false if more information is required (e.g. authentication
+	 * information is missing). This call is not intended to verify that the
+	 * information will allow for a successful connection, just that the
+	 * information is complete enough to make an attempt.
+	 * 
+	 * @return true if the property set is complete; false if additional
+	 *         information must be specified.
+	 */
+	boolean arePropertiesComplete();
+
+	/**
+	 * Returns true if the specified property set type associated with this
+	 * profile is complete; false if more information is required (e.g.
+	 * authentication information is missing). This call is not intended to
+	 * verify that the information will allow for a successful connection, just
+	 * that the information is complete enough to make an attempt.
+	 * 
+	 * @param type the type of properties
+	 * 
+	 * @return true if the property set is complete; false if additional
+	 *         information must be specified.
+	 */
+	boolean arePropertiesComplete(String type);
+
+	/**
+	 * Sets the connected state for this profile. The connected state is used by
+	 * content extensions and other consumers of the framework as a hint
+	 * indicating that they should create a connection to the profile.
+	 * 
+	 * @param connected the connected state.
+	 * 
+	 * @deprecated Use one of the connect() methods instead. This method now
+	 *             delegates to connect().
+	 */
+	void setConnected(boolean connected);
+
+	/**
+	 * @return true if consumers should create connections to this profile
+	 * 
+	 * @deprecated Use {@link #getConnectionState()}
+	 */
+	boolean isConnected();
+	
+	/**
+	 * @return the connection state of this profile. May be one of:
+	 *         {@link #DISCONNECTED_STATE}, {@link #CONNECTED_STATE},
+	 *         {@link #WORKING_OFFLINE_STATE}
+	 */
+	int getConnectionState();
+
+	/**
+	 * This method blocks until all registered connect listeners have been
+	 * notified to open connections.
+	 * 
+	 * @return the status of the connect operation. Status.OK_STATUS if all went
+	 *         well.
+	 */
+	IStatus connect();
+
+	/**
+	 * This method returns immediately after spawning a Job which notifies all
+	 * registered connect listeners to open connections. The caller can pass in
+	 * a job listener so it can be notified of the status of the job. The status
+	 * returned by the job upon completion can be used to determine whether or
+	 * not the connect operation was successful.
+	 * 
+	 * @param listener a job listener that can be used to notify the caller of
+	 *        the state of the job spawned to open the connections. Can be null.
+	 */
+	void connect(IJobChangeListener listener);
+	
+	/**
+	 * This method blocks until all registered connect listeners have been
+	 * notified to open connections.  Unlike connect(), this method will not 
+	 * spawn a job or display connection errors.
+	 * 
+	 * @return the status of the connect operation. Status.OK_STATUS if all went
+	 *         well.
+	 */
+	IStatus connectWithoutJob();
+
+	/**
+	 * This method blocks until all registered connect listeners have been
+	 * notified to close connections.
+	 * 
+	 * @return the status of the disconnect operation. Status.OK_STATUS if all
+	 *         went well.
+	 */
+	IStatus disconnect();
+
+	/**
+	 * This method returns immediately after spawning a Job which notifies all
+	 * registered connect listeners to close connections. The caller can pass in
+	 * a job listener so it can be notified of the status of the job. The status
+	 * returned by the job upon completion can be used to determine whether or
+	 * not the disconnect operation was successful.
+	 * 
+	 * @param listener a job listener that can be used to notify the caller of
+	 *        the state of the job spawned to close the connections. Can be
+	 *        null.
+	 */
+	void disconnect(IJobChangeListener listener);
+
+	/**
+	 * This method blocks until all registered connect listeners that support
+	 * working offline have been notified to restore offline data.
+	 * 
+	 * @return the status of the operation. Status.OK_STATUS if all went well.
+	 */
+	IStatus workOffline();
+
+	/**
+	 * This method returns immediately after spawning a Job which notifies all
+	 * registered connect listeners that support working offline have been
+	 * notified to restore offline data. The caller can pass in a job listener
+	 * so it can be notified of the status of the job. The status returned by
+	 * the job upon completion can be used to determine whether or not the
+	 * operation was successful.
+	 * 
+	 * @param listener a job listener that can be used to notify the caller of
+	 *        the state of the job spawned to restore offline data. Can be null.
+	 */
+	void workOffline(IJobChangeListener listener);
+	
+	/**
+	 * @return true if one or more connection factories associated with this
+	 *         connection profile's provider support working offline.
+	 */
+	boolean supportsWorkOfflineMode();
+	
+	/**
+	 * @return true if this connection profile supports working offline and data
+	 *         has been saved for working offline.
+	 */
+	boolean canWorkOffline();
+	
+	/**
+	 * Saves the state of the connection profile for working in an offline mode.
+	 * If the connection profile does not support working in an offline mode, no
+	 * exception is thrown and the method will return immediately.
+	 */
+	IStatus saveWorkOfflineData();
+
+	/**
+	 * Saves the state of the connection profile for working in an offline mode.
+	 * Same as {@link #saveWorkOfflineData()} except that it returns
+	 * immediately, without waiting for the save offline data job to complete.
+	 */
+	void saveWorkOfflineData(IJobChangeListener listener);
+
+	/**
+	 * Add a connect listener to this profile.
+	 * 
+	 * @param listener
+	 * 
+	 * @deprecated use IManagedConnection.removeConnectionListener()
+	 */
+	void addConnectListener(IConnectListener listener);
+
+	/**
+	 * Remove a connect listener from this profile.
+	 * 
+	 * @param listener
+	 * 
+	 * @deprecated use IManagedConnection.removeConnectionListener()
+	 */
+	void removeConnectListener(IConnectListener listener);
+	
+	/**
+	 * @param type the ID of the connection factory responsible for creating the
+	 *        connection
+	 * 
+	 * @return the managed connection
+	 */
+	IManagedConnection getManagedConnection(String type);
+
+	/**
+	 * Add property listener to this profile. Property events sent:
+	 * 
+	 * @param listener
+	 */
+	void addPropertySetListener(IPropertySetListener listener);
+
+	/**
+	 * @param listener
+	 */
+	void removePropertySetListener(IPropertySetListener listener);
+
+	// ConnectionProfileProvider derived methods
+
+	/**
+	 * This method is a shortcut for getProvider().getName().
+	 * 
+	 * @return the name of the provider managing this profile
+	 * 
+	 * @see IConnectionProfileProvider#getConfigurationType()
+	 */
+	String getProviderName();
+
+	/**
+	 * This method is a shortcut for getProvider().getProviderId().
+	 * 
+	 * @return the id of the provider managing this profile
+	 */
+	String getProviderId();
+
+	/**
+	 * This method is a shortcut for getProvider().getCategory().
+	 * 
+	 * @return the category this connection profile belongs to.
+	 * 
+	 * @see IConnectionProfileProvider#getCategory()
+	 */
+	ICategory getCategory();
+
+	/**
+	 * This method is a shortcut for getProvider().getConfigurationType().
+	 * 
+	 * @return the configuration type of this connection profile.
+	 * 
+	 * @see IConnectionProfileProvider#getConfigurationType()
+	 * 
+	 * @deprecated
+	 */
+	IConfigurationType getConfigurationType();
+
+	/**
+	 * This method is a shortcut for getProvider().getProfileExtensions().
+	 * 
+	 * @return a list of profile extensions supporting this profile
+	 * 
+	 * @see IConnectionProfileProvider#getProfileExtensions()
+	 */
+	Map getProfileExtensions();
+
+	/**
+	 * This method is a shortcut for
+	 * getProvider()getConnectionFactory(factoryId).createConnection(this).
+	 * 
+	 * @param factory the connection factory id
+	 * 
+	 * @return a connection if successful; otherwise null
+	 * 
+	 * @see IConnectionFactoryProvider#createConnection(IConnectionProfile)
+	 */
+	IConnection createConnection(String factory);
+
+	/**
+	 * This method is a shortcut for
+	 * getProvider()getConnectionFactory(factoryId).createConnection(this,uid,pwd).
+	 * 
+	 * @param factoryId the connection factory id
+	 * @param uid the user id
+	 * @param pwd the user's password
+	 * 
+	 * @return a connection if successful; otherwise null
+	 * 
+	 * @see IConnectionFactoryProvider#createConnection(IConnectionProfile,String,String)
+	 */
+	IConnection createConnection(String factoryId, String uid, String pwd);
+
+	/**
+	 * Returns the provider responsible for managing this connection profile.
+	 * 
+	 * @return the provider managing this connection profile
+	 */
+	IConnectionProfileProvider getProvider();
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IConnectionProfileMigrator.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IConnectionProfileMigrator.java
new file mode 100644
index 0000000..453951f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IConnectionProfileMigrator.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+/**
+ * Interface used by the connection profile framework which allows providers to
+ * hook into profile loading for migration purposes. Extenders may use this
+ * facility to update existing profiles to conform with updated provider
+ * implementations.
+ * 
+ * This interface should not be directly implemented.  Instead, adopters should
+ * extend {@link ConnectionProfileMigratorBase}.
+ * 
+ * This API is provisional.
+ * 
+ * @author rcernich
+ * 
+ * Created on Apr 5, 2007
+ */
+public interface IConnectionProfileMigrator {
+
+	/**
+	 * This method is invoked by the framework when a connection profile of the
+	 * migration extension's sourceProfile type has been loaded. At this point,
+	 * only the profile's provider ID has been updated (to the value in
+	 * targetProfile).
+	 * 
+	 * @param profile the connection profile to migrate.
+	 */
+	public void performMigration(IConnectionProfile profile);
+
+	/**
+	 * @return the ID of the new provider; null if the provider has not changed.
+	 */
+	public String getNewProviderID();
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IConnectionProfileProvider.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IConnectionProfileProvider.java
new file mode 100644
index 0000000..57bd254
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IConnectionProfileProvider.java
@@ -0,0 +1,103 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+import java.net.URL;
+import java.util.Map;
+
+/**
+ * This interface is used for accessing functionality provided by a connection
+ * profile extension.
+ * 
+ * @author rcernich
+ * 
+ * Created on Jan 14, 2004
+ */
+public interface IConnectionProfileProvider {
+
+	/**
+	 * @return the name of this connection profile provider
+	 */
+	String getName();
+
+	/**
+	 * @return the id of this connection profile provider
+	 */
+	String getId();
+
+	/**
+	 * @return the URL for the icon of this connection profile provider
+	 */
+	URL getIconURL();
+
+	/**
+	 * This method returns a connection factory object that corresponds to the
+	 * type specified. The type must match the id of a connection factory
+	 * extension.
+	 * 
+	 * @param type the type or id of a connection factory associated with this
+	 *        connection profile type.
+	 * 
+	 * @return a connection factory provider. null if no factory exists with the
+	 *         specified type.
+	 */
+	IConnectionFactoryProvider getConnectionFactory(String type);
+
+	/**
+	 * This method returns all the connection factories associated with this
+	 * connection profile. The data is returned in a Map object as follows:
+	 * (String id,IConnectionFactoryProvider provider)
+	 * 
+	 * @return the connection factories defined for this connection profile
+	 */
+	Map getConnectionFactories();
+
+	/**
+	 * This method returns all the profile extensions associated with this
+	 * connection profile. The data is returned in a Map object as follows:
+	 * (String id,IProfileExtensionProvider provider)
+	 * 
+	 * @return the profile extensions defined for this connection profile
+	 */
+	Map getProfileExtensions();
+
+	/**
+	 * The configuration type of this connection profile.
+	 * 
+	 * @return the configuration type supported by this connection profile
+	 */
+	IConfigurationType getConfigurationType();
+
+	/**
+	 * The category this connection profile belongs to.
+	 * 
+	 * @return the category this connection profile belongs to.
+	 */
+	ICategory getCategory();
+
+	/**
+	 * The file extension associated with workspace resources of this connection
+	 * profile type.
+	 * 
+	 * @return the file extension of workspace resources belonging to this
+	 *         connection profile type.
+	 */
+	String getFileExtension();
+
+	/**
+	 * This property is used to determin whether we enable "Connect" or
+	 * "Disconnect" for a connection profile.
+	 * 
+	 * @return true if the connection profile is responsible to maintain a
+	 *         connection.
+	 */
+	boolean needsMaintainConnection();
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IManagedConnection.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IManagedConnection.java
new file mode 100644
index 0000000..ff452cd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IManagedConnection.java
@@ -0,0 +1,118 @@
+/*******************************************************************************
+ * Copyright (c) 2006-2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+import org.eclipse.core.runtime.jobs.IJobChangeListener;
+
+/**
+ * Managed connections represent connection instances whose life cycle is
+ * managed by the connection profile it is associated with through the connect()
+ * and disconnnect() methods on IConnectionProfile.
+ * 
+ * The managed connection object exists throughout the life cycle of the
+ * connection profile it is associated with, however it may not always be in a
+ * connected state (e.g. getConnection() may return null if the profile is not
+ * in a connected state or it may return a connection with an error if an error
+ * occurred trying to establish the connection). This allows a consumer to
+ * register a listener at anytime.
+ * 
+ * Clients should register a connection listener so that they may be notified of
+ * life cycle events specific to this connection (e.g. open, close).
+ * 
+ * @author rcernich
+ * 
+ * Created on Jan 19, 2006
+ */
+public interface IManagedConnection {
+
+	/**
+	 * @return true if this object is managing an active connection.
+	 */
+	boolean isConnected();
+
+	/**
+	 * @return the connection object being managed.
+	 */
+	IConnection getConnection();
+
+	/**
+	 * @return the factory ID of the connection factory used to create the
+	 *         connection being managed.
+	 */
+	String getFactoryID();
+
+	/**
+	 * Adds a connection listener to this object.
+	 * 
+	 * @param listener
+	 */
+	void addConnectionListener(IManagedConnectionListener listener);
+
+	/**
+	 * Removes a connection listener from this object.
+	 * 
+	 * @param listener
+	 */
+	void removeConnectionListener(IManagedConnectionListener listener);
+
+	/**
+	 * Used to notify other clients that a change has been made to the server.
+	 * This gives other clients the opportunity to perform any necessary
+	 * updates.
+	 * 
+	 * @param context the context of the change; may be null
+	 */
+	void fireModifiedEvent(Object context);
+
+	/**
+	 * Creates a copy of the connection being managed. By gentlemen's agreement,
+	 * managed connection should be treated as read-only connections. However,
+	 * this agreement need not apply to connections where changes to the server
+	 * are immediately available to other clients (e.g. non-transactional
+	 * connections).
+	 * 
+	 * @return a copy of the connection being managed.
+	 */
+	IConnection cloneConnection();
+
+	/**
+	 * Creates a copy of the connection being managed. By gentlemen's agreement,
+	 * managed connection should be treated as read-only connections. However,
+	 * this agreement need not apply to connections where changes to the server
+	 * are immediately available to other clients (e.g. non-transactional
+	 * connections).
+	 * 
+	 * The connection should be retrieved from the Job by the listener using
+	 * {@link ICloneConnectionJob#getConnection()} after the Job has finished.
+	 * 
+	 * @param listener cannot be null
+	 */
+	void cloneConnection(IJobChangeListener listener);
+
+	/**
+	 * @return true if the active connection represents an offline connection.
+	 */
+	boolean isWorkingOffline();
+	
+	/**
+	 * Interface implemented by the Job used in
+	 * {@link #cloneConnection(IJobChangeListener)}. This interface is provided
+	 * to give the consumer access to the created {@link IConnection}.
+	 */
+	public interface ICloneConnectionJob {
+
+		/**
+		 * @return the connection object created by the Job
+		 */
+		IConnection getConnection();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IManagedConnectionListener.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IManagedConnectionListener.java
new file mode 100644
index 0000000..205059c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IManagedConnectionListener.java
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+/**
+ * IManagedConnection notifies clients of changes to the connection being
+ * managed through this listener interface.
+ * 
+ * @author rcernich
+ * 
+ * Created on Jan 23, 2006
+ */
+public interface IManagedConnectionListener {
+
+	/**
+	 * The connection managed by the associated IManagedConnection has been
+	 * opened.
+	 * 
+	 * @param event
+	 */
+	void opened(ConnectEvent event);
+
+	/**
+	 * The connection manged by the associated IManagedConnection has been
+	 * modifed. The context object in the event may specify details as to what
+	 * on the server has been modified.
+	 * 
+	 * @param event
+	 */
+	void modified(ConnectEvent event);
+
+	/**
+	 * A client (or the user) has requested the connection managed by the
+	 * associated IManagedConnection be closed. This callback gives other
+	 * clients the option of cancelling the operation (e.g. they still require
+	 * access to the connection).
+	 * 
+	 * @param event
+	 * 
+	 * @return false to prevent the connection from being closed.
+	 */
+	boolean okToClose(ConnectEvent event);
+
+	/**
+	 * The connection manged by the associated IManagedConnection is about to be
+	 * closed. Clients may use this opportunity to perform clean up operations
+	 * on the connection prior to it being closed. (Note, this method is called
+	 * after okToClose() and prior to closed().)
+	 * 
+	 * @param event
+	 */
+	void aboutToClose(ConnectEvent event);
+
+	/**
+	 * The connection manged by the associated IManagedConnection has been
+	 * closed.
+	 * 
+	 * @param event
+	 */
+	void closed(ConnectEvent event);
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IManagedConnectionOfflineListener.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IManagedConnectionOfflineListener.java
new file mode 100644
index 0000000..e7529c1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IManagedConnectionOfflineListener.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+/**
+ * Extends the base interface by adding callbacks specific to working offline.
+ * 
+ * @author rcernich
+ * 
+ * Created on May 8, 2007
+ */
+public interface IManagedConnectionOfflineListener extends
+		IManagedConnectionListener {
+
+	/**
+	 * A client (or the user) has requested the "live" connection managed by the
+	 * associated IManagedConnection be closed, replaced with an offline
+	 * version. This callback gives other clients the option of cancelling the
+	 * operation (e.g. they still require access to the "live" connection).
+	 * 
+	 * @param event
+	 * 
+	 * @return false to prevent the connection from being closed.
+	 */
+	boolean okToDetach(ConnectEvent event);
+
+	/**
+	 * The "live" connection manged by the associated IManagedConnection is
+	 * about to be closed. Clients may use this opportunity to perform clean up
+	 * operations on the connection prior to it being closed. (Note, this method
+	 * is called after okToDetach() and prior to workingOffline().)
+	 * 
+	 * @param event
+	 */
+	void aboutToDetach(ConnectEvent event);
+
+	/**
+	 * The "live" connection manged by the associated IManagedConnection has
+	 * been closed or the client (or user) has chosen to open a the connection
+	 * in "offline" mode.
+	 * 
+	 * @param event
+	 */
+	void workingOffline(ConnectEvent event);
+
+	/**
+	 * The "offline" connection manged by the associated IManagedConnection is
+	 * about to be replaced with a "live" connection. Clients may use this
+	 * opportunity to perform any operations on the connection prior to it being
+	 * opened. (Note, this method is called prior to attached().)
+	 * 
+	 * @param event
+	 */
+	void aboutToAttach(ConnectEvent event);
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IOfflineConnection.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IOfflineConnection.java
new file mode 100644
index 0000000..1fc55d5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IOfflineConnection.java
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+
+/**
+ * An offline connection is used to present an offline view of the server to the
+ * user. This may involve loading a model that was persisted the last time the
+ * user connected to the server (as in the case of ConnectionInfo connections
+ * saving a SQL model for the database) or some other provider defined action.
+ * 
+ * @author rcernich
+ * 
+ * Created on Apr 2, 2007
+ */
+public interface IOfflineConnection extends IConnection {
+
+	/**
+	 * Attach this connection to the server. In other words, try to connect to
+	 * the server and update the state of this connection.
+	 * 
+	 * It is up to the provider to determine how to merge offline changes with
+	 * the server.
+	 * 
+	 * @param monitor
+	 * 
+	 * @throws CoreException
+	 */
+	void attach(IProgressMonitor monitor) throws CoreException;
+
+	/**
+	 * Detach this connection from the server. If this connection does not hold
+	 * an active connection to the server, no action is taken.
+	 * 
+	 * The provider may persist the current state of this connection when this
+	 * method is invoked. (The provider may perform this task in close() as
+	 * well.)
+	 * 
+	 * @param monitor
+	 * 
+	 * @throws CoreException
+	 */
+	void detach(IProgressMonitor monitor) throws CoreException;
+
+	/**
+	 * Called by the framework when the user invokes save offline.
+	 * 
+	 * @param monitor
+	 * 
+	 * @throws CoreException
+	 */
+	void save(IProgressMonitor monitor) throws CoreException;
+
+	/**
+	 * @return true if the connection is currently detached from the server
+	 *         (i.e. it's an offline connection)
+	 */
+	boolean isWorkingOffline();
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IOfflineConnectionFactory.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IOfflineConnectionFactory.java
new file mode 100644
index 0000000..bdcafa5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IOfflineConnectionFactory.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+
+/**
+ * Adds offline capabilities to an IConnectionFactory. Connection profiles that
+ * have connection factories defined for them that implement this interface will
+ * have the additional "Work offline..." and "Save offline..." methods.
+ * 
+ * @author rcernich
+ * 
+ * Created on Apr 2, 2007
+ */
+public interface IOfflineConnectionFactory extends IConnectionFactory {
+
+	/**
+	 * Creates an offline connection.
+	 * 
+	 * @param profile
+	 * @param monitor for communicating progress
+	 * 
+	 * @return
+	 */
+	IOfflineConnection createOfflineConnection(IConnectionProfile profile,
+			IProgressMonitor monitor);
+
+	/**
+	 * This method creates a connection to a server based on the properties
+	 * specified by the connection profile. This method uses the user id and
+	 * password specified in the profile.
+	 * 
+	 * @param profile the profile to connect to.
+	 * @param monitor for communicating progress
+	 * 
+	 * @return a connection if successful
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionFactory#createConnection(org.eclipse.datatools.connectivity.IConnectionProfile)
+	 */
+	IOfflineConnection createConnection(IConnectionProfile profile,
+			IProgressMonitor monitor);
+
+	/**
+	 * This method is used by the framework to determine whether or not data for
+	 * a particular connection profile has been saved for offline use.
+	 * 
+	 * @param profile the profile
+	 * 
+	 * @return true if data has been cached for the specified profile (i.e. if
+	 *         an offline connection will contain any data).
+	 */
+	boolean canWorkOffline(IConnectionProfile profile);
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IProfileExtensionProvider.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IProfileExtensionProvider.java
new file mode 100644
index 0000000..f49231f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IProfileExtensionProvider.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+/**
+ * The interface used to access functionality provided by a profile extension.
+ * 
+ * @author rcernich
+ * 
+ * Created on Jan 16, 2004
+ */
+public interface IProfileExtensionProvider {
+
+	/**
+	 * @return the id of this profile extension
+	 */
+	String getId();
+
+	/**
+	 * @return the name of this profile extension
+	 */
+	String getName();
+
+	/**
+	 * @return the connection profile provider extended by this extension
+	 */
+	IConnectionProfileProvider getConnectionProfileProvider();
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IProfileListener.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IProfileListener.java
new file mode 100644
index 0000000..a99106f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IProfileListener.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+/**
+ * Profile Change Listener
+ * 
+ * @author shongxum
+ */
+public interface IProfileListener {
+
+	/**
+	 * The specified profile has been added.
+	 * 
+	 * @param profile
+	 */
+	public void profileAdded(IConnectionProfile profile);
+
+	/**
+	 * The specified profile has been deleted.
+	 * 
+	 * @param profile
+	 */
+	public void profileDeleted(IConnectionProfile profile);
+
+	/**
+	 * The specified profile has been modified.  Modification includes
+	 * changes to any properties, the name, auto-connect flag, etc.
+	 * 
+	 * @param profile
+	 */
+	public void profileChanged(IConnectionProfile profile);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IProfileListener1.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IProfileListener1.java
new file mode 100644
index 0000000..c7195a5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IProfileListener1.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+/**
+ * Profile Change Listener
+ * 
+ * @author shongxum
+ */
+public interface IProfileListener1 extends IProfileListener {
+
+	// Note this api will override the one defined in the IProfileListener
+	public void profileChanged(IConnectionProfile profile, String oldName,
+			String oldDesc, Boolean oldAutoConnect);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IPropertiesPersistenceHook.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IPropertiesPersistenceHook.java
new file mode 100644
index 0000000..1c1f104
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IPropertiesPersistenceHook.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+import java.util.Properties;
+
+public interface IPropertiesPersistenceHook {
+
+	/**
+	 * Returns the property set that should be persisted by the framework. This
+	 * allows extensions to prevent certain properties from being persisted by
+	 * the framework (e.g. authentication information, derived properties,
+	 * etc.). This method is invoked by the framework just prior to the
+	 * properties being persisted.
+	 * 
+	 * @param props the properties currently associated with a connection
+	 *        profile
+	 * 
+	 * @return the properties to be persisted by the framework
+	 */
+	Properties getPersitentProperties(Properties props);
+
+	/**
+	 * Returns a property set which includes any transient or derived properties
+	 * that must be set prior to usage. This allows the provider to alter the
+	 * property set when it is being loaded (e.g. for migration purposes, etc.).
+	 * This method is invoked by the framework after the properties have been
+	 * loaded, but prior to them being associated with the connection profile.
+	 * 
+	 * @param props the properties loaded from the workspace
+	 * 
+	 * @return the modified property set
+	 */
+	Properties populateTransientProperties(Properties props);
+
+	/**
+	 * Allows the framework to determine whether or not a connection dialog
+	 * needs to be displayed prior to opening a connection to the server (e.g.
+	 * authentication information is missing). This call is not intended to
+	 * verify that the information will allow for a successful connection, just
+	 * that the information is complete enough to make an attempt.
+	 * 
+	 * @param props the property set to inspect
+	 * 
+	 * @return true if the property set is complete; false if additional
+	 *         information must be specified.
+	 */
+	boolean arePropertiesComplete(Properties props);
+
+	/**
+	 * Returns the ID of the property page used to collect the information
+	 * required to make the property set complete.
+	 * 
+	 * @return the ID of the property page used to collect the missing required
+	 *         properties
+	 */
+	String getConnectionPropertiesPageID();
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IPropertySetChangeEvent.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IPropertySetChangeEvent.java
new file mode 100644
index 0000000..9302aaf
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IPropertySetChangeEvent.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+import java.util.Map;
+
+/**
+ * Represents changes made to a property set associated with a connection
+ * profile.
+ * 
+ * @author rcernich
+ * 
+ * Created on Jun 1, 2006
+ */
+public interface IPropertySetChangeEvent {
+
+	/**
+	 * @return the connection profile on which the changes occurred
+	 */
+	public IConnectionProfile getConnectionProfile();
+
+	/**
+	 * Returns the ID of the property set that was changed. Changes to the base
+	 * property set can be identified by
+	 * getPropertySetType().equals(getConnectionProfile().getProviderId()).
+	 * 
+	 * @return the ID of the property set that was changed.
+	 */
+	public String getPropertySetType();
+
+	/**
+	 * Returns a Map object representing the properties that have been changed.
+	 * The map is of the form:
+	 * key == property ID
+	 * value == IChangedProperty
+	 * 
+	 * @return the properties that were changed.
+	 */
+	public Map getChangedProperties();
+
+	/**
+	 * Returns the property changes for the specified ID; null if no changes
+	 * were made.
+	 * 
+	 * @param id the property ID
+	 * 
+	 * @return the property changes for the specified ID; null if no changes
+	 * were made.
+	 */
+	public IChangedProperty getChangedProperty(String id);
+
+	/**
+	 * Used to present changes made to a particular property to the consumer.
+	 */
+	public interface IChangedProperty {
+
+		/**
+		 * @return the ID of the property that changed
+		 */
+		public String getID();
+
+		/**
+		 * @return the original value of the property; may be null.
+		 */
+		public String getOldValue();
+
+		/**
+		 * @return the new value of the property; may be null.
+		 */
+		public String getNewValue();
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IPropertySetListener.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IPropertySetListener.java
new file mode 100644
index 0000000..d579241
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IPropertySetListener.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    rcernich - initial API and implementation
+ *******************************************************************************/ 
+package org.eclipse.datatools.connectivity;
+
+
+/**
+ * This interface is used to listen for property changes occurring on a
+ * connection profile. 
+ * 
+ * @author rcernich
+ *
+ * Created on Jun 1, 2006
+ */
+public interface IPropertySetListener {
+	
+	/**
+	 * Indicates one or more properties have been changed on the connection
+	 * profile.
+	 * 
+	 * @param event the change details
+	 */
+	void propertySetChanged(IPropertySetChangeEvent event);
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IServerVersionProvider.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IServerVersionProvider.java
new file mode 100644
index 0000000..0e47fb6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/IServerVersionProvider.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+/**
+ * Provides version information about the server and technology supported by
+ * the server to the connection profile framework.  The provider version is
+ * only collected by connections created from the "ping" connection factory.
+ * 
+ * @author rcernich
+ * 
+ * Created on May 31, 2005
+ */
+public interface IServerVersionProvider {
+
+	/**
+	 * @return the version of the server (e.g. 12.5)
+	 */
+	Version getProviderVersion();
+
+	/**
+	 * @return the name of the provider (e.g. ASE)
+	 */
+	String getProviderName();
+
+	/**
+	 * @return the version of the technology running on the server (e.g. 1.1)
+	 */
+	Version getTechnologyVersion();
+
+	/**
+	 * @return the technology name; null if not supported (e.g. JMS)
+	 */
+	String getTechnologyName();
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ManagedConnectionAdapter.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ManagedConnectionAdapter.java
new file mode 100644
index 0000000..a222426
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ManagedConnectionAdapter.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2006-2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+/**
+ * Base implementation for IManagedConnectionListener.
+ * 
+ * @author rcernich
+ *
+ * Created on Jan 23, 2006
+ */
+public class ManagedConnectionAdapter implements
+		IManagedConnectionOfflineListener {
+
+	public ManagedConnectionAdapter() {
+		super();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.IManagedConnectionListener#opened(org.eclipse.datatools.connectivity.ConnectEvent)
+	 */
+	public void opened(ConnectEvent event) {
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.IManagedConnectionListener#modified(org.eclipse.datatools.connectivity.ConnectEvent)
+	 */
+	public void modified(ConnectEvent event) {
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.IManagedConnectionListener#okToClose(org.eclipse.datatools.connectivity.ConnectEvent)
+	 */
+	public boolean okToClose(ConnectEvent event) {
+		return true;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.IManagedConnectionListener#aboutToClose(org.eclipse.datatools.connectivity.ConnectEvent)
+	 */
+	public void aboutToClose(ConnectEvent event) {
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.IManagedConnectionListener#closed(org.eclipse.datatools.connectivity.ConnectEvent)
+	 */
+	public void closed(ConnectEvent event) {
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.IManagedConnectionOfflineListener#aboutToAttach(org.eclipse.datatools.connectivity.ConnectEvent)
+	 */
+	public void aboutToAttach(ConnectEvent event) {
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.IManagedConnectionOfflineListener#aboutToDetach(org.eclipse.datatools.connectivity.ConnectEvent)
+	 */
+	public void aboutToDetach(ConnectEvent event) {
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.IManagedConnectionOfflineListener#workingOffline(org.eclipse.datatools.connectivity.ConnectEvent)
+	 */
+	public void workingOffline(ConnectEvent event) {
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.IManagedConnectionOfflineListener#okToDetach(org.eclipse.datatools.connectivity.ConnectEvent)
+	 */
+	public boolean okToDetach(ConnectEvent event) {
+		return true;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ProfileConnectionManager.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ProfileConnectionManager.java
new file mode 100644
index 0000000..45f8006
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ProfileConnectionManager.java
@@ -0,0 +1,344 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2011 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf, rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+
+/**
+ * NON-API
+ * 
+ * A simple reference count based connection pool. This class manages the life
+ * cycle of connections by handling <code>ConnectEvent</code>s through a
+ * registered <code>IConnectListener</code>. Connections are only managed for
+ * those profiles and connection factories registered with the manager by a
+ * client (i.e. if no client has registered with the connection manager, no
+ * connections are made).
+ * 
+ * @author brianf, rcernich
+ */
+public class ProfileConnectionManager {
+
+	private static ProfileConnectionManager mConnectionManager = null;
+
+	private HashMap mManagedProfileKeyToConnections;
+	private HashMap mManagedProfileKeyToClientSet;
+	private HashMap mProfileToListenerSet;
+	private HashMap mFactoryIDToListener;
+	private MyProfileListener listener = null;
+
+	public ProfileConnectionManager() {
+		// empty
+		mManagedProfileKeyToConnections = new HashMap();
+		mManagedProfileKeyToClientSet = new HashMap();
+		mProfileToListenerSet = new HashMap();
+		mFactoryIDToListener = new HashMap();
+		listener = new MyProfileListener();
+		ProfileManager.getInstance().addProfileListener(listener);
+	}
+
+	public static ProfileConnectionManager getProfileConnectionManagerInstance() {
+		if (mConnectionManager == null)
+			mConnectionManager = new ProfileConnectionManager();
+		return mConnectionManager;
+	}
+
+	/**
+	 * If the client is an instance of IConnectListener, it will be notified of
+	 * changes to the connect status of the profile. The manager will notify
+	 * each client after it has processed the event itself (i.e. the client will
+	 * be notified after the connection has been opened or closed). For the
+	 * okToClose event, each client is notified until one client returns false.
+	 * At that point, no other clients are notified of the attempt to close.
+	 * 
+	 * @param profile
+	 * @param factoryID
+	 * @param client
+	 */
+	public void manageProfileConnection(IConnectionProfile profile,
+			String factoryID, Object client) {
+		ManagedProfileKey key = new ManagedProfileKey(profile, factoryID);
+		if (!mManagedProfileKeyToConnections.containsKey(key)) {
+			IConnection con = createConnection(profile, factoryID);
+
+			mManagedProfileKeyToConnections.put(key, con);
+			mManagedProfileKeyToClientSet.put(key, new HashSet());
+
+			IConnectListener listener = (IConnectListener) mFactoryIDToListener
+					.get(factoryID);
+			if (listener == null) {
+				listener = new ProfileConnectListener(factoryID);
+				mFactoryIDToListener.put(factoryID, listener);
+			}
+
+			Set listeners = (Set) mProfileToListenerSet.get(profile);
+			if (listeners == null) {
+				listeners = new HashSet();
+				mProfileToListenerSet.put(profile, listeners);
+			}
+			listeners.add(listener);
+			profile.addConnectListener(listener);
+		}
+		((Set) mManagedProfileKeyToClientSet.get(key)).add(client);
+	}
+
+	public void unmanageProfileConnection(IConnectionProfile profile,
+			String factoryID, Object client) {
+		ManagedProfileKey key = new ManagedProfileKey(profile, factoryID);
+		if (mManagedProfileKeyToConnections.containsKey(key)) {
+			Set clientSet = (Set) mManagedProfileKeyToClientSet.get(key);
+			clientSet.remove(client);
+			if (clientSet.size() == 0) {
+				IConnection con = (IConnection) mManagedProfileKeyToConnections
+						.get(key);
+				if (con != null) {
+					try {
+						con.close();
+					}
+					catch (Throwable e) {
+					}
+				}
+				mManagedProfileKeyToConnections.remove(key);
+				mManagedProfileKeyToClientSet.remove(key);
+
+				IConnectListener listener = (IConnectListener) mFactoryIDToListener
+						.get(factoryID);
+				profile.removeConnectListener(listener);
+				((Set) mProfileToListenerSet.get(profile)).remove(listener);
+			}
+		}
+	}
+
+	public IConnection getConnection(IConnectionProfile profile,
+			String factoryID) {
+		ManagedProfileKey key = new ManagedProfileKey(profile, factoryID);
+		if (mManagedProfileKeyToConnections.containsKey(key)) {
+			return (IConnection) mManagedProfileKeyToConnections.get(key);
+		}
+		return null;
+	}
+
+	private class MyProfileListener implements IProfileListener {
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.datatools.connectivity.IProfileListener#profileAdded(org.eclipse.datatools.connectivity.IConnectionProfile)
+		 */
+		public void profileAdded(IConnectionProfile profile) {
+			// do nothing here
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.datatools.connectivity.IProfileListener#profileDeleted(org.eclipse.datatools.connectivity.IConnectionProfile)
+		 */
+		public void profileDeleted(IConnectionProfile profile) {
+			if (!mProfileToListenerSet.containsKey(profile)) {
+				return;
+			}
+			for (Iterator it = ((Set) mProfileToListenerSet.get(profile))
+					.iterator(); it.hasNext();) {
+				ProfileConnectListener listener = (ProfileConnectListener) it
+						.next();
+				ManagedProfileKey key = new ManagedProfileKey(profile, listener
+						.getFactoryID());
+
+				profile.removeConnectListener(listener);
+
+				if (mManagedProfileKeyToConnections.containsKey(profile)) {
+					IConnection con = (IConnection) mManagedProfileKeyToConnections
+							.get(key);
+					if (con != null) {
+						try {
+							con.close();
+						}
+						catch (Throwable e) {
+						}
+					}
+				}
+				mManagedProfileKeyToConnections.remove(key);
+				mManagedProfileKeyToClientSet.remove(key);
+			}
+			mProfileToListenerSet.remove(profile);
+
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.datatools.connectivity.IProfileListener#profileChanged(org.eclipse.datatools.connectivity.IConnectionProfile)
+		 */
+		public void profileChanged(IConnectionProfile profile) {
+			if (mManagedProfileKeyToConnections.containsKey(profile)) {
+				// RJC: Do we need to reconnect here?
+			}
+		}
+
+	}
+
+	/**
+	 * @param icp
+	 * @return
+	 */
+	private IConnection createConnection(IConnectionProfile icp,
+			String factoryID) {
+		IConnection con = null;
+		if (icp.getConnectionState() == IConnectionProfile.CONNECTED_STATE) {
+			con = icp.createConnection(factoryID);
+		}
+		return con;
+	}
+
+	private class ProfileConnectListener extends ConnectAdapter {
+
+		private String mFactoryID;
+
+		public ProfileConnectListener(String factoryID) {
+			mFactoryID = factoryID;
+		}
+
+		public String getFactoryID() {
+			return mFactoryID;
+		}
+
+		public boolean okToClose(ConnectEvent event) {
+			ManagedProfileKey key = new ManagedProfileKey(event
+					.getConnectionProfile(), mFactoryID);
+			if (mManagedProfileKeyToClientSet.containsKey(key)) {
+				for (Iterator it = ((Set) mManagedProfileKeyToClientSet
+						.get(key)).iterator(); it.hasNext();) {
+					Object obj = it.next();
+					if (obj instanceof IConnectListener) {
+						if (!((IConnectListener) obj).okToClose(event)) {
+							return false;
+						}
+					}
+				}
+			}
+			return true;
+		}
+
+		public void closeConnection(ConnectEvent event) throws CoreException {
+			ManagedProfileKey key = new ManagedProfileKey(event
+					.getConnectionProfile(), mFactoryID);
+			if (mManagedProfileKeyToConnections.containsKey(key)) {
+				// Notify any clients that the connection will be closed
+				for (Iterator it = ((Set) mManagedProfileKeyToClientSet
+						.get(key)).iterator(); it.hasNext();) {
+					Object obj = it.next();
+					if (obj instanceof IConnectListener) {
+						try {
+							((IConnectListener) obj).closeConnection(event);
+						}
+						catch (CoreException e) {
+							// Ignore this
+						}
+					}
+				}
+
+				IConnection con = (IConnection) mManagedProfileKeyToConnections
+						.get(key);
+				if (con != null) {
+					try {
+						con.close();
+					}
+					catch (Throwable e) {
+					}
+					mManagedProfileKeyToConnections.put(key, null);
+				}
+			}
+		}
+
+		public void openConnection(ConnectEvent event) throws CoreException {
+			ManagedProfileKey key = new ManagedProfileKey(event
+					.getConnectionProfile(), mFactoryID);
+			if (mManagedProfileKeyToConnections.containsKey(key)) {
+				IConnection con = (IConnection) mManagedProfileKeyToConnections
+						.get(key);
+				if (con == null || con.getConnectException() != null) {
+					con = event.getConnectionProfile().createConnection(
+							mFactoryID);
+					if (con.getConnectException() == null) {
+						mManagedProfileKeyToConnections.put(key, con);
+					}
+					else {
+						throw new CoreException(new Status(IStatus.ERROR,
+								ConnectivityPlugin.getSymbolicName(),
+								ConnectivityPlugin.INTERNAL_ERROR,
+								ConnectivityPlugin.getDefault()
+										.getResourceString(
+												"error.connect", //$NON-NLS-1$
+												new String[] { event
+														.getConnectionProfile()
+														.getName()}), con
+										.getConnectException()));
+					}
+				}
+
+				// Notify any clients that the connection has been closed
+				for (Iterator it = ((Set) mManagedProfileKeyToClientSet
+						.get(key)).iterator(); it.hasNext();) {
+					Object obj = it.next();
+					if (obj instanceof IConnectListener) {
+						try {
+							((IConnectListener) obj).openConnection(event);
+						}
+						catch (CoreException e) {
+							// Ignore this
+						}
+					}
+				}
+			}
+		}
+	}
+
+	private static class ManagedProfileKey {
+
+		private IConnectionProfile mProfile;
+		private String mFactoryID;
+
+		public ManagedProfileKey(IConnectionProfile profile, String factoryID) {
+			mProfile = profile;
+			mFactoryID = factoryID;
+		}
+
+		public IConnectionProfile getConnectionProfile() {
+			return mProfile;
+		}
+
+		public String getFactoryID() {
+			return mFactoryID;
+		}
+
+		public boolean equals(Object object) {
+			if (object instanceof ManagedProfileKey) {
+				ManagedProfileKey other = (ManagedProfileKey) object;
+				return mProfile.equals(other.mProfile)
+						&& mFactoryID.equals(other.mFactoryID);
+			}
+			return false;
+		}
+
+		public int hashCode() {
+			// not the best, but usable
+			return mProfile.hashCode();
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ProfileManager.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ProfileManager.java
new file mode 100644
index 0000000..9bd19d4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ProfileManager.java
@@ -0,0 +1,350 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2009 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ *     Actuate Corporation - enhanced transient profile handling (bug #298357)
+ * 
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+import java.util.Properties;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.internal.InternalProfileManager;
+
+/**
+ * ProfileManger is a singleton class serverd as a helper class for connection
+ * profiles access. It also caches connection profiles and only persists to
+ * storage when changes made and at Eclipse shutdown.
+ * 
+ * @author shongxum
+ */
+public class ProfileManager implements IAdaptable {
+
+	private static ProfileManager mManager = null;
+
+	public static ProfileManager getInstance() {
+		if (mManager == null) {
+			synchronized( ProfileManager.class ) {
+				if (mManager == null)
+					mManager = new ProfileManager();
+			}
+		}
+		return mManager;
+	}
+
+	/**
+	 * Get all connection profiles persisted in workspace
+	 * 
+	 * @return connection profiles
+	 */
+	public IConnectionProfile[] getProfiles() {
+		return InternalProfileManager.getInstance().getProfiles(true);
+	}
+	
+	/**
+	 * Get all connection profiles persisted in workspace
+	 * 
+	 * @param searchRepositories
+	 * @return connection profiles
+	 */
+	public IConnectionProfile[] getProfiles(boolean searchRepositories) {
+		return InternalProfileManager.getInstance().getProfiles(searchRepositories);
+	}
+
+	/**
+	 * Get category by name
+	 * 
+	 * @param catID
+	 * @return ICategory
+	 */
+	public ICategory getCategory(String catID) {
+		return InternalProfileManager.getInstance().getCategory(catID);
+	}
+
+	/**
+	 * Get root categories whose parent category is null
+	 * 
+	 * @return ICategory[]
+	 */
+	public ICategory[] getRootCategories() {
+		return InternalProfileManager.getInstance().getRootCategories();
+	}
+
+	/**
+	 * Get connection profiles by category
+	 * 
+	 * @param catID
+	 * @return IConnectionProfile[]
+	 */
+	public IConnectionProfile[] getProfilesByCategory(String catID) {
+		return InternalProfileManager.getInstance()
+				.getProfilesByCategory(catID,false);
+	}
+
+	/**
+	 * Get connection profile by name
+	 * 
+	 * @param name
+	 * @return IConnectionProfile
+	 */
+	public IConnectionProfile getProfileByName(String name) {
+		return InternalProfileManager.getInstance().getProfileByName(name,true);
+	}
+
+	/**
+	 * Get connection profile by instance ID
+	 * 
+	 * @param id
+	 * @return IConnectionProfile
+	 */
+	public IConnectionProfile getProfileByInstanceID(String id) {
+		return InternalProfileManager.getInstance().getProfileByInstanceID(id);
+	}
+
+	/**
+	 * Get connection profiles by connection profile(cp) provider ID associated
+	 * with each cp
+	 * 
+	 * @param ID
+	 * @return IConnectionProfile[]
+	 */
+	public IConnectionProfile[] getProfileByProviderID(String ID) {
+		return InternalProfileManager.getInstance().getProfileByProviderID(ID,false);
+	}
+
+	/**
+	 * Return the path for a given profile (typically REPOSITORY::PROFILE or PROFILE)
+	 * @param profile
+	 * @return
+	 */
+	public String getProfilePath(IConnectionProfile profile) {
+		return InternalProfileManager.getInstance().getProfileFullPath(profile);
+	}
+	
+	/**
+	 * Return the profile for a given path (typically REPOSITORY::PROFILE or PROFILE)
+	 * @param path
+	 * @return
+	 */
+	public IConnectionProfile getProfileByFullPath(String path ) {
+		return InternalProfileManager.getInstance().getProfileByFullPath(path);
+	}
+
+	public IConnectionProfile createTransientProfile(String providerID, Properties baseProperties) throws ConnectionProfileException {
+		return InternalProfileManager.getInstance().createTransientProfile(null, null, providerID, baseProperties);
+	}
+
+	/**
+     * Disconnect and remove the specified transient profile.
+     * This is for optional use by a client that wants to clean up before the 
+     * connectivity bundle is shutdown.
+     * @param profile  a transient connection profile instance created 
+     *             by {@link #createTransientProfile(String, String, String, Properties)}
+     * @return true if the specified profile is found and deleted; false otherwise
+     * @since DTP 1.7.2
+	 */
+	public boolean deleteTransientProfile(IConnectionProfile profile) {
+	    return InternalProfileManager.getInstance().deleteTransientProfile( profile );
+	}
+	
+    /**
+     * Indicates whether the specified connection profile is of a transient type.
+     * @param profile   a connection profile instance
+     * @return  true if the specified profile is transient; false otherwise
+     * @since DTP 1.7.2
+     */
+	public boolean isTransientProfile( IConnectionProfile profile ) {
+        return InternalProfileManager.isTransientProfile( profile );
+    }
+
+	/**
+	 * Create connection profile
+	 * 
+	 * @param name
+	 * @param description
+	 * @param providerID
+	 * @param baseProperties
+	 * @throws ConnectionProfileException
+	 */
+	public IConnectionProfile createProfile(String name, String description,
+			String providerID, Properties baseProperties)
+			throws ConnectionProfileException {
+		return InternalProfileManager.getInstance().createProfile(name, description,
+				providerID, baseProperties);
+	}
+
+	/**
+	 * Create connection profile
+	 * 
+	 * @param name
+	 * @param description
+	 * @param providerID
+	 * @param baseProperties
+	 * @param parentProfile
+	 * @throws ConnectionProfileException
+	 */
+	public IConnectionProfile createProfile(String name, String description,
+			String providerID, Properties baseProperties, String parentProfile)
+			throws ConnectionProfileException {
+		return InternalProfileManager.getInstance().createProfile(name, description,
+				providerID, baseProperties, parentProfile);
+	}
+
+	/**
+	 * Create connection profile
+	 * 
+	 * @param name
+	 * @param description
+	 * @param providerID
+	 * @param baseProperties
+	 * @param parentProfile
+	 * @param autoConnect
+	 * @throws ConnectionProfileException
+	 */
+	public IConnectionProfile createProfile(String name, String description,
+			String providerID, Properties baseProperties, String parentProfile,
+			boolean autoConnect) throws ConnectionProfileException {
+		return InternalProfileManager.getInstance().createProfile(name, description,
+				providerID, baseProperties, parentProfile, autoConnect);
+	}
+
+	/**
+	 * Duplicate a connection profile
+	 * 
+	 * @param profile
+	 * @throws ConnectionProfileException
+	 */
+	public String duplicateProfile(IConnectionProfile profile)
+			throws ConnectionProfileException {
+		return InternalProfileManager.getInstance().duplicateProfile(profile);
+	}
+
+	/**
+	 * Duplicate a connection profile but won't add it into ProfileManager or IConnectionProfileRepository
+	 * 
+	 * @param profile
+	 * @param newName
+	 * @return IConnectionProfile
+	 * @throws ConnectionProfileException
+	 */
+	public IConnectionProfile copyProfile(IConnectionProfile profile, String newName)
+			throws ConnectionProfileException {
+		return InternalProfileManager.getInstance().cloneProfile(profile, null, newName);
+	}
+	/**
+	 * Add a connection profile object to the profiles cache. Throws
+	 * ConnectionProfileException if the new profile's name already exists in
+	 * cache.
+	 * 
+	 * @param profile
+	 * @throws ConnectionProfileException
+	 */
+	public void addProfile(IConnectionProfile profile)
+			throws ConnectionProfileException {
+		InternalProfileManager.getInstance().addProfile(profile);
+		;
+	}
+
+	/**
+	 * Add a connection profile object to the profiles cache. If the new
+	 * profile's name already exists in cache, replace the cached profile with
+	 * the given profile provided the replaceExisting flag is true; otherwise,
+	 * throws ConnectionProfileException.
+	 * 
+	 * @param profile
+	 * @param replaceExisting
+	 * @throws ConnectionProfileException
+	 */
+	public void addProfile(IConnectionProfile profile, boolean replaceExisting)
+			throws ConnectionProfileException {
+		InternalProfileManager.getInstance().addProfile(profile,
+				replaceExisting);
+	}
+
+	/**
+	 * Delete a connection profile object from the profiles cache
+	 * 
+	 * @param profile
+	 * @throws ConnectionProfileException
+	 */
+	public void deleteProfile(IConnectionProfile profile)
+			throws ConnectionProfileException {
+		InternalProfileManager.getInstance().deleteProfile(profile);
+	}
+
+	/**
+	 * Modify an existing connection profile
+	 * 
+	 * @param profile
+	 * @throws ConnectionProfileException
+	 */
+	public void modifyProfile(IConnectionProfile profile)
+			throws ConnectionProfileException {
+		InternalProfileManager.getInstance().modifyProfile(profile);
+	}
+
+	/**
+	 * Modify an existing connection profile, plus it's name and description We
+	 * don't expose a setName and setDescription in IConnectionProfile, so
+	 * instead we expose this api for that same purpose.
+	 * 
+	 * @param profile
+	 * @throws ConnectionProfileException
+	 */
+	public void modifyProfile(IConnectionProfile profile, String newName,
+			String newDesc) throws ConnectionProfileException {
+		InternalProfileManager.getInstance().modifyProfile(profile, newName,
+				newDesc);
+	}
+
+	/**
+	 * Modify an existing connection profile, plus it's name and description We
+	 * don't expose a setName and setDescription in IConnectionProfile, so
+	 * instead we expose this api for that same purpose.
+	 * 
+	 * @param profile
+	 * @throws ConnectionProfileException
+	 */
+	public void modifyProfile(IConnectionProfile profile, String newName,
+			String newDesc, Boolean autoConnect)
+			throws ConnectionProfileException {
+		InternalProfileManager.getInstance().modifyProfile(profile, newName,
+				newDesc, autoConnect);
+	}
+
+	/**
+	 * Register a listener for proifle operation
+	 * 
+	 * @param listener
+	 */
+	public void addProfileListener(IProfileListener listener) {
+		InternalProfileManager.getInstance().addProfileListener(listener);
+	}
+
+	/**
+	 * Remove the listener for profile operation
+	 * 
+	 * @param listener
+	 */
+	public void removeProfileListener(IProfileListener listener) {
+		InternalProfileManager.getInstance().removeProfileListener(listener);
+	}
+
+	public Object getAdapter(Class adapter) {
+		return Platform.getAdapterManager().getAdapter(this, adapter);
+	}
+
+	public String[] tokenize ( String input, String delim ) {
+		return InternalProfileManager.getInstance().tokenize(input, delim);
+	}
+	public String unTokenize(String[] tokens) {
+		return InternalProfileManager.getInstance().unTokenize(tokens);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ProfileRule.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ProfileRule.java
new file mode 100644
index 0000000..42b7a6a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/ProfileRule.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+import org.eclipse.core.runtime.jobs.ISchedulingRule;
+
+/**
+ * Can be used to synchronize a <code>Job</code> with other <code>Job</code>s
+ * affecting a specific profile.
+ * 
+ * @author rcernich
+ * 
+ * Created on May 24, 2005
+ */
+public class ProfileRule implements ISchedulingRule {
+
+	private IConnectionProfile mProfile;
+
+	/**
+	 * @param profile the profile to synchronize against
+	 */
+	public ProfileRule(IConnectionProfile profile) {
+		super();
+		if (profile == null) {
+			throw new IllegalArgumentException("profile == null"); //$NON-NLS-1$
+		}
+		mProfile = profile;
+	}
+
+	public boolean isConflicting(ISchedulingRule rule) {
+		return rule instanceof ProfileRule
+				&& ((ProfileRule) rule).mProfile.equals(mProfile);
+	}
+
+	public boolean contains(ISchedulingRule rule) {
+		return isConflicting(rule);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/PropertiesPersistenceHook.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/PropertiesPersistenceHook.java
new file mode 100644
index 0000000..85084e5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/PropertiesPersistenceHook.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    rcernich - initial API and implementation
+ *******************************************************************************/ 
+package org.eclipse.datatools.connectivity;
+
+import java.util.Properties;
+
+
+public class PropertiesPersistenceHook implements IPropertiesPersistenceHook {
+
+	public Properties getPersitentProperties(Properties props) {
+		return props;
+	}
+
+	public Properties populateTransientProperties(Properties props) {
+		return props;
+	}
+
+	public boolean arePropertiesComplete(Properties props) {
+		return true;
+	}
+
+	public String getConnectionPropertiesPageID() {
+		return null;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/Version.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/Version.java
new file mode 100644
index 0000000..01929b9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/Version.java
@@ -0,0 +1,184 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+/**
+ * @author rcernich
+ * 
+ * Created on May 31, 2005
+ */
+public class Version implements Comparable {
+
+	public static final Version NULL_VERSION = new Version(0, 0, 0,
+			new String()) {
+
+		public String toString() {
+			return ConnectionProfileConstants.UNKNOWN_VERSION;
+		}
+	};
+
+	private Integer mHash;
+	private int mMajor;
+	private int mMinor;
+	private int mRelease;
+	private String mBuild;
+
+	public static Version valueOf(String version) {
+		if (version == null || version.trim().length() == 0
+				|| version.equals(NULL_VERSION.toString())) {
+			return NULL_VERSION;
+		}
+		int major = 0, minor = 0, release = 0;
+		String build = new String();
+		String[] components = version.split("\\.", 4); //$NON-NLS-1$
+		if (components[0].trim().length() > 0) {
+			try {
+				major = Integer.parseInt(components[0].trim());
+			}
+			catch (NumberFormatException e) {
+			}
+		}
+		if (components.length > 1 && components[1].trim().length() > 0) {
+			try {
+				minor = Integer.parseInt(components[1].trim());
+			}
+			catch (NumberFormatException e) {
+			}
+		}
+		if (components.length > 2 && components[2].trim().length() > 0) {
+			try {
+				release = Integer.parseInt(components[2].trim());
+			}
+			catch (NumberFormatException e) {
+			}
+		}
+		if (components.length > 3 && components[3].trim().length() > 0) {
+			build = components[3].trim();
+		}
+
+		return new Version(major, minor, release, build);
+	}
+
+	public Version(int major, int minor, int release, String build) {
+		mMajor = major;
+		mMinor = minor;
+		mRelease = release;
+		mBuild = build;
+	}
+
+	/**
+	 * @return the major component of this version
+	 */
+	public int getMajor() {
+		return mMajor;
+	}
+
+	/**
+	 * @return the minor component of this version
+	 */
+	public int getMinor() {
+		return mMinor;
+	}
+
+	/**
+	 * @return the release of this version
+	 */
+	public int getRelease() {
+		return mRelease;
+	}
+
+	/**
+	 * @return the build of this version
+	 */
+	public String getBuild() {
+		return mBuild;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Comparable#compareTo(java.lang.Object)
+	 */
+	public int compareTo(Object o) {
+		int retVal;
+		Version v = (Version) o;
+		if (mMajor != v.mMajor) {
+			retVal = mMajor - v.mMajor;
+		}
+		else if (mMinor != v.mMinor) {
+			retVal = mMinor - v.mMinor;
+		}
+		else if (mRelease != v.mRelease) {
+			retVal = mRelease - v.mRelease;
+		}
+		else {
+			retVal = mBuild.compareTo(v.mBuild);
+		}
+
+		if (retVal == 0) {
+			// NULL_VERSION should be < 0.0.0.
+			if (v == NULL_VERSION) {
+				if (this != NULL_VERSION) {
+					retVal = 1;
+				}
+			}
+			else if (this == NULL_VERSION) {
+				retVal = -1;
+			}
+		}
+		return retVal;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Object#equals(java.lang.Object)
+	 */
+	public boolean equals(Object obj) {
+		boolean retVal;
+		if (obj instanceof Version) {
+			retVal = compareTo(obj) == 0;
+		}
+		else {
+			retVal = false;
+		}
+		return retVal;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Object#hashCode()
+	 */
+	public int hashCode() {
+		if (mHash == null) {
+			mHash = new Integer(toString().hashCode());
+		}
+		return mHash.intValue();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Object#toString()
+	 */
+	public String toString() {
+		StringBuffer buf = new StringBuffer();
+		buf.append(getMajor());
+		buf.append('.').append(getMinor());
+		buf.append('.').append(getRelease());
+		if (getBuild() != null && getBuild().length() > 0) {
+			buf.append('.').append(getBuild());
+		}
+		return buf.toString();
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/VersionProviderConnection.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/VersionProviderConnection.java
new file mode 100644
index 0000000..46d4809
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/VersionProviderConnection.java
@@ -0,0 +1,206 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2010 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ * 				IBM Corporation - fix for 240236
+ *              Actuate Corporation - fix for BZ 316995
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.internal.ConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.InternalProfileManager;
+
+/**
+ * Use this class a a base class for your versioned connection implementation.
+ * 
+ * You _must_ invoke updateVersionCache() after successfully connecting to the
+ * target server. If a connection fails, you _should_ invoke
+ * clearConnectionCache() to remove version information from the profile (this
+ * will prevent possible bogus data from being displayed in the property page).
+ * 
+ * Version information is stored in the
+ * ConnectionProfileConstants.VERSION_INFO_PROFILE_EXTENSION_ID properties of
+ * the profile (i.e. IConnectionProfile.getProperties()). The server version
+ * information can be accessed using the keys
+ * ConnectionProfileConstants.PROP_SERVER_VERSION and PROP_SERVER_NAME. The
+ * technology version can be accessed using property keys created using the
+ * createTechnologyNameKey() and createTechnologyVersionKey() methods. (These
+ * methods return strings of the form technology.name.&lt;tech_name&gt; and
+ * technology.version&lt;tech_name&gt;.
+ * 
+ * Server version information is collected from the connection created by the
+ * connection factory that is registered as the ping connection factory for the
+ * profile. Because of this, it is important that you use the most relevant
+ * connection factory as the ping factory (e.g. the EAServer profile uses the
+ * J2EE repository connection factory as its ping factory).
+ * 
+ * @author rcernich
+ * 
+ * Created on Jun 1, 2005
+ */
+public abstract class VersionProviderConnection implements IConnection,
+		IServerVersionProvider {
+
+	private ConnectionProfile mProfile;
+	private Class mFactoryClass;
+
+	/**
+	 * 
+	 */
+	public VersionProviderConnection(IConnectionProfile profile,
+										Class factoryClass) {
+		super();
+		mProfile = (ConnectionProfile) profile;
+		mFactoryClass = factoryClass;
+	}
+
+	public IConnectionProfile getConnectionProfile() {
+		return mProfile;
+	}
+
+	public Class getConnectionFactoryClass() {
+		return mFactoryClass;
+	}
+
+	/**
+	 * Adds server and technology related version properties to the associated
+	 * profile. This method must be called after successfully connecting to
+	 * ensure version information is stored in the profile's properties. Failure
+	 * to call this method will prevent version information from being accessed
+	 * by the profile's property page. Furthermore, if this connection was
+	 * created by the ping factory registered with the profile, server related
+	 * version information will not be displayed in the enterprise explorer.
+	 */
+	protected void updateVersionCache() {
+		Properties props = mProfile.getProperties(ConnectionProfileConstants.VERSION_INFO_PROFILE_EXTENSION_ID);
+		boolean saveProps = updateTechnologyVersion(props);
+
+		saveProps = updateServerVersion(props) || saveProps;
+
+		if (saveProps) {
+			mProfile.internalSetProperties(ConnectionProfileConstants.VERSION_INFO_PROFILE_EXTENSION_ID, props);
+			// save changes of a persistent profile in the persisted profile collection
+			if ( ! InternalProfileManager.isTransientProfile( mProfile ) )
+			    InternalProfileManager.getInstance().saveChanges();
+		}
+	}
+
+	/**
+	 * Removes the server and technology related version properties from the
+	 * associated profile. This method should be called when a connect attempt
+	 * fails.
+	 */
+	protected void clearVersionCache() {
+		boolean saveProps = false;
+		Properties props = mProfile.getProperties(ConnectionProfileConstants.VERSION_INFO_PROFILE_EXTENSION_ID);
+		IConnectionFactoryProvider icfp = mProfile.getProvider()
+				.getConnectionFactory(
+						ConnectionProfileConstants.PING_FACTORY_ID);
+		String techRootKey = getTechnologyRootKey();
+		if (techRootKey != null && techRootKey.length() > 0) {
+			String techVersionKey = ConnectionProfileConstants
+					.createTechnologyVersionKey(techRootKey);
+			String techNameKey = ConnectionProfileConstants
+					.createTechnologyNameKey(techRootKey);
+			if (props.getProperty(techVersionKey, new String()).length() > 0) {
+				props.remove(techVersionKey);
+				saveProps = true;
+			}
+			if (props.getProperty(techNameKey, new String()).length() > 0) {
+				props.remove(techNameKey);
+				saveProps = true;
+			}
+		}
+		if (icfp != null
+				&& icfp.getConnectionFactoryClass().equals(mFactoryClass)) {
+			if (props.getProperty(
+					ConnectionProfileConstants.PROP_SERVER_VERSION,
+					new String()).length() > 0) {
+				props.remove(ConnectionProfileConstants.PROP_SERVER_VERSION);
+				saveProps = true;
+			}
+			if (props.getProperty(ConnectionProfileConstants.PROP_SERVER_NAME,
+					new String()).length() > 0) {
+				props.remove(ConnectionProfileConstants.PROP_SERVER_NAME);
+				saveProps = true;
+			}
+		}
+		if (saveProps) {
+			mProfile.internalSetProperties(ConnectionProfileConstants.VERSION_INFO_PROFILE_EXTENSION_ID, props);
+		}
+	}
+
+	private boolean updateTechnologyVersion(Properties props) {
+		boolean saveProps = false;
+		String techRootKey = getTechnologyRootKey();
+		if (techRootKey != null && techRootKey.length() > 0) {
+			String techVersionKey = ConnectionProfileConstants
+					.createTechnologyVersionKey(techRootKey);
+			String techNameKey = ConnectionProfileConstants
+					.createTechnologyNameKey(techRootKey);
+			String oldTechName = props.getProperty(techNameKey);
+			String techName = getTechnologyName();
+			Version oldTechVersion = Version.valueOf(props.getProperty(
+					techVersionKey, new String()));
+			Version techVersion = getTechnologyVersion();
+			if (!oldTechVersion.equals(techVersion)) {
+				props.setProperty(techVersionKey, techVersion.toString());
+				saveProps = true;
+			}
+			if ((techName == null && oldTechName != null)
+					|| (techName != null && !techName.equals(oldTechName))) {
+				if (techName == null) {
+					props.remove(techNameKey);
+				}
+				else {
+					props.setProperty(techNameKey, techName);
+				}
+				saveProps = true;
+			}
+		}
+		return saveProps;
+	}
+
+	private boolean updateServerVersion(Properties props) {
+		boolean saveProps = false;
+		String oldServerName = props
+				.getProperty(ConnectionProfileConstants.PROP_SERVER_NAME);
+		String serverName = getProviderName();
+		Version oldServerVersion = Version.valueOf(props.getProperty(
+				ConnectionProfileConstants.PROP_SERVER_VERSION, new String()));
+		Version serverVersion = getProviderVersion();
+		if (!oldServerVersion.equals(serverVersion)) {
+			props.setProperty(ConnectionProfileConstants.PROP_SERVER_VERSION,
+					serverVersion.toString());
+			saveProps = true;
+		}
+		if ((serverName == null && oldServerName != null)
+				|| (serverName != null && !serverName.equals(oldServerName))) {
+			if (serverName == null) {
+				props.remove(ConnectionProfileConstants.PROP_SERVER_NAME);
+			}
+			else {
+				props.setProperty(ConnectionProfileConstants.PROP_SERVER_NAME,
+						serverName);
+			}
+			saveProps = true;
+		}
+		return saveProps;
+	}
+
+	/**
+	 * @return the string to be used when constructing the technology related
+	 *         keys in the profile's properties; null to prevent technology
+	 *         related information from being persisted in the profile's
+	 *         properties.
+	 */
+	protected abstract String getTechnologyRootKey();
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/DefaultDriverValuesProvider.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/DefaultDriverValuesProvider.java
new file mode 100644
index 0000000..af6e341
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/DefaultDriverValuesProvider.java
@@ -0,0 +1,21 @@
+package org.eclipse.datatools.connectivity.drivers;
+
+import org.eclipse.datatools.connectivity.drivers.models.TemplateDescriptor;
+
+public class DefaultDriverValuesProvider implements IDriverValuesProvider {
+
+	private TemplateDescriptor mTemplate = null;
+	
+	public String createDefaultValue(String key) {
+		return null;
+	}
+
+	public void setDriverTemplate(TemplateDescriptor template) {
+		this.mTemplate = template;
+	}
+
+	public TemplateDescriptor getDriverTemplate() {
+		return this.mTemplate;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/DriverInstance.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/DriverInstance.java
new file mode 100644
index 0000000..209922f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/DriverInstance.java
@@ -0,0 +1,395 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2011 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.drivers;
+
+import java.io.File;
+import java.lang.ref.SoftReference;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.drivers.models.TemplateDescriptor;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileManager;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+
+import com.ibm.icu.util.StringTokenizer;
+
+/**
+ * Collection of Driver properties
+ * @author brianf
+ */
+public class DriverInstance {
+
+	public static final String ELEM_MIGRATION = "migration"; //$NON-NLS-1$
+	public static final String ATTR_CLASS = "class"; //$NON-NLS-1$
+	public static final String ATTR_DRIVERTEMPLATEID = "newDriverTemplateID"; //$NON-NLS-1$
+
+	private TemplateDescriptor mTemplate;
+	private IPropertySet mInstance;
+	private Properties mInstanceProps;
+	private SoftReference mClassLoader;
+	private IDriverMigrator mMigrator;
+	private boolean mMigratorLoaded = false;
+
+	/**
+	 * Basic constructor. Picks up template details from the property set.
+	 * @param instance An instance of an IPropertySet object
+	 */
+	public DriverInstance(IPropertySet instance) {
+		this.mInstance = instance;
+		this.mInstanceProps = this.mInstance.getBaseProperties();
+
+		if (this.mInstanceProps != null) {
+			String templateId = this.mInstanceProps
+					.getProperty(IDriverMgmtConstants.PROP_DEFN_TYPE);
+			this.mTemplate = TemplateDescriptor
+					.getDriverTemplateDescriptor(templateId);
+		}
+	}
+
+	/**
+	 * Constructor to pass an explicit template along with the property set.
+	 * @param template TemplateDescriptor
+	 * @param instance IPropertySet
+	 */
+	public DriverInstance(TemplateDescriptor template, IPropertySet instance) {
+		this.mTemplate = template;
+		this.mInstance = instance;
+		this.mInstanceProps = this.mInstance.getBaseProperties();
+	}
+
+	/**
+	 * Return the name of the Driver instance
+	 * @return String Driver name
+	 */
+	public String getName() {
+		return this.mInstance.getName();
+	}
+
+	/**
+	 * Return the id of the Driver instance
+	 * @return String Driver ID
+	 */
+	public String getId() {
+		return this.mInstance.getID();
+	}
+
+	/**
+	 * Return the jar list for the driver instance as a 
+	 * comma-delimited string.
+	 * @return String Comma-delimited jar list
+	 */
+	public String getJarList() {
+		if (this.mInstanceProps != null) {
+			if (this.mInstanceProps
+					.getProperty(IDriverMgmtConstants.PROP_DEFN_JARLIST) != null) {
+				String jarlist = this.mInstanceProps
+						.getProperty(IDriverMgmtConstants.PROP_DEFN_JARLIST);
+				return jarlist.trim();
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Return the jar list for the driver instance as an
+	 * array.
+	 * @return String[] String array of jar paths
+	 */
+	public String[] getJarListAsArray() {
+		if (this.mInstanceProps != null && getJarList() != null) {
+			if (getJarList().length() == 0)
+				return new String[0];
+			String[] paths = parseString(getJarList(),
+					IDriverMgmtConstants.PATH_DELIMITER);
+			return paths;
+		}
+		return null;
+	}
+
+	/**
+	 * Retrieve a property value by name.
+	 * @param name Property name
+	 * @return String Property value
+	 */
+	public String getNamedProperty(String name) {
+		String rtnStr = ""; //$NON-NLS-1$
+		if (getTemplate() == null) {
+			handleException(null, 
+					ConnectivityPlugin.getDefault().getResourceString(
+							"drivers.error.finding.property.no.template",  //$NON-NLS-1$
+							new Object[] { name }));
+			return rtnStr;
+		}
+		if (this.mInstanceProps != null) {
+			String id = getTemplate().getPropertyIDFromName(name);
+			if (id != null) {
+				rtnStr = this.mInstanceProps.getProperty(id);
+			}
+		}
+		if (rtnStr == null) {
+			rtnStr = getTemplate().getPropertyValue(name);
+		}
+		return rtnStr;
+	}
+
+	/**
+	 * Retrieve a property value by property id
+	 * @param id Property id
+	 * @return String Property value
+	 */
+	public String getNamedPropertyByID(String id) {
+		String rtnStr = ""; //$NON-NLS-1$
+		if (this.mInstanceProps != null) {
+			if (id != null) {
+				rtnStr = this.mInstanceProps.getProperty(id);
+			}
+		}
+		if (rtnStr == null) {
+			if (getTemplate() == null) {
+				handleException(null, 
+						ConnectivityPlugin.getDefault().getResourceString(
+								"drivers.error.finding.property.no.template",  //$NON-NLS-1$
+								new Object[] { id }));
+				rtnStr = ""; //$NON-NLS-1$
+				return rtnStr;
+			}
+			rtnStr = getTemplate().getPropertyValueFromId(id);
+		}
+		return rtnStr;
+	}
+
+	/**
+	 * Retrieve a property value by property id.
+	 * @param id Property ID
+	 * @return String Property value
+	 */
+	public String getProperty(String id) {
+		String rtnStr = null;
+		if (mInstanceProps != null) {
+			rtnStr = mInstanceProps.getProperty(id);
+		}
+		return rtnStr == null ? new String() : rtnStr;
+	}
+
+	/**
+	 * Get the Template the Driver Instance was based on.
+	 * @return TemplateDescriptor Template information
+	 */
+	public TemplateDescriptor getTemplate() {
+		return this.mTemplate;
+	}
+
+	private String[] parseString(String str_list, String token) {
+		StringTokenizer tk = new StringTokenizer(str_list, token);
+		String[] pieces = new String[tk.countTokens()];
+		int index = 0;
+		while (tk.hasMoreTokens())
+			pieces[index++] = tk.nextToken();
+		return pieces;
+	}
+
+	/**
+	 * Returns the actual property set for the driver instance.
+	 * @return IPropertySet 
+	 */
+	public IPropertySet getPropertySet() {
+		return this.mInstance;
+	}
+
+	/**
+	 * Returns a default class loader (no parent) and loads
+	 * the files from the jar list.
+	 * @return ClassLoader URLClassLoader with jar list pre-loaded
+	 * @throws Exception
+	 */
+	public synchronized ClassLoader getClassLoader() throws Exception {
+		if (mClassLoader == null || mClassLoader.get() == null ) {
+			mClassLoader = new SoftReference(createClassLoader(null));
+		}
+		return (ClassLoader) mClassLoader.get();
+	}
+
+	/**
+	 * Creates a ClassLoader for the Driver Instance and loads
+	 * the files from the jar list.
+	 * @param parentCL ClassLoader parent
+	 * @return ClassLoader URLClassLoader with jar list pre-loaded
+	 * @throws Exception 
+	 */
+	public ClassLoader createClassLoader(ClassLoader parentCL) throws Exception {
+		String jarList = getJarList();
+		if ((jarList == null || jarList.trim().length() == 0)
+				&& !getTemplate().getEmptyJarListIsOKFlag()) {
+			throw new Exception(
+					DriverMgmtMessages.getString("DriverInstance.error.jarListNotDefined")); //$NON-NLS-1$
+		}
+
+		String[] jarStrings = getJarListAsArray();
+		URL[] jars = new URL[jarStrings.length];
+		for (int index = 0, count = jars.length; index < count; ++index) {
+			try {
+				jars[index] = new File(jarStrings[index]).toURL();
+			}
+			catch (MalformedURLException e) {
+				throw new Exception(DriverMgmtMessages.getString("DriverInstance.error.invalidClassPath"), e); //$NON-NLS-1$
+			}
+		}
+		if (parentCL == null) {
+			return URLClassLoader.newInstance(jars);
+		}
+		return URLClassLoader.newInstance(jars, parentCL);
+	}
+
+	/* (non-Javadoc)
+	 * @see java.lang.Object#equals(java.lang.Object)
+	 */
+	public boolean equals(Object obj) {
+		if (obj instanceof DriverInstance) {
+			return obj == this
+					|| getId().equals(((DriverInstance) obj).getId());
+		}
+		return false;
+	}
+
+	/* (non-Javadoc)
+	 * @see java.lang.Object#hashCode()
+	 */
+	public int hashCode() {
+		return getId().hashCode();
+	}
+	
+	/**
+	 * Logs an exception
+	 * @param exception
+	 * @param message
+	 */
+	public void handleException(Throwable exception, String message) {
+		ConnectivityPlugin
+				.getDefault()
+				.log(
+						new Status(
+								Status.ERROR,
+								ConnectivityPlugin.getSymbolicName(),
+								-1,
+								ConnectivityPlugin
+										.getDefault()
+										.getResourceString(
+												"plugin.internal_error", //$NON-NLS-1$
+												new Object[] { message }),
+								exception));
+	}
+
+
+	public synchronized boolean migrate() {
+		if (mTemplate == null || mTemplate.getElement() == null)
+			return false;
+		
+		IDriverMigrator migrator = getMigrator(mTemplate.getElement());
+		if (migrator == null) {
+			return false;
+		}
+		boolean changed = false;
+		String newID = migrator.getNewDriverTemplateID();
+		if (newID != null && !newID.equals(mTemplate.getId())) {
+			// Take care of migrating to the new provider
+			// get the existing base properties
+			Properties baseProps = mInstance.getBaseProperties();
+			// set the current base properties to null
+			mInstance.setBaseProperties(null);
+			
+			// Change the template ID
+			baseProps.setProperty(
+					IDriverMgmtConstants.PROP_DEFN_TYPE, newID);
+			
+			// Now re-set the base properties
+			mInstance.setBaseProperties(baseProps);
+			
+			changed = true;
+		}
+		// let the migrator do its thing
+		boolean migrated = migrator.performMigration(this);
+
+		return changed || migrated;
+	}
+
+	/**
+	 * Retrieves the migrator for the incoming configuration element. 
+	 * The config element must be from the TemplateDescriptor used 
+	 * to define the Driver.
+	 * 
+	 * @param element
+	 * @return
+	 */
+	public IDriverMigrator getMigrator(IConfigurationElement element) {
+		loadMigrator(element);
+		return mMigrator;
+	}
+	
+	/*
+	 * Loads the actual migration class from the configuration element
+	 * @param element
+	 */
+	private void loadMigrator(IConfigurationElement element) {
+		if (!mMigratorLoaded) {
+			mMigratorLoaded = true;
+			if (element == null) {
+				return;
+			}
+			IConfigurationElement[] migrationElements = element
+					.getChildren(ELEM_MIGRATION);
+			if (migrationElements == null || migrationElements.length == 0) {
+				return;
+			}
+			String migratorImpl = migrationElements[0].getAttribute(ATTR_CLASS);
+			String newID = migrationElements[0].getAttribute(ATTR_DRIVERTEMPLATEID);
+			if (migratorImpl != null && migratorImpl.length() > 0) {
+				try {
+					mMigrator = (IDriverMigrator) migrationElements[0]
+							.createExecutableExtension(ATTR_CLASS);
+				}
+				catch (CoreException e) {
+					String error = ConnectivityPlugin.getDefault()
+							.getResourceString("trace.error.migration", //$NON-NLS-1$
+									new Object[] { getId(), migratorImpl});
+					ConnectivityPlugin.getDefault().log(error);
+					if (ConnectionProfileManager.DEBUG_CONNECTION_PROFILE_EXTENSION) {
+						System.err.println(error);
+						e.printStackTrace();
+					}
+				}
+			}
+			else if (newID != null && newID.length() > 0) {
+				try {
+					IDriverMigrator migrator = new DriverMigratorBase();
+					((DriverMigratorBase) migrator)
+							.setInitializationData(migrationElements[0], null,
+									null);
+					mMigrator = migrator;
+				}
+				catch (CoreException e) {
+					String error = ConnectivityPlugin.getDefault()
+							.getResourceString("trace.error.migration", //$NON-NLS-1$
+									new Object[] { getId(), migratorImpl});
+					ConnectivityPlugin.getDefault().log(error);
+					if (ConnectionProfileManager.DEBUG_CONNECTION_PROFILE_EXTENSION) {
+						System.err.println(error);
+						e.printStackTrace();
+					}
+				}
+			}
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/DriverManager.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/DriverManager.java
new file mode 100644
index 0000000..e9956ea
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/DriverManager.java
@@ -0,0 +1,1354 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2013 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ *               IBM Corporation - fix for 243829
+ *               Actuate Corporation - Bugzilla 300464
+ *               Actuate Corporation - support for OSGi-less platform (Bugzilla 338997)
+ *               IBM Corporation - Bugzilla 330725
+ *               Actuate Corporation - Bugzilla 330725: fix for OSGi-less platform support
+ *               IBM Corporation - Bugzilla 399992
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.drivers;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Properties;
+import java.util.Vector;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.drivers.models.CategoryDescriptor;
+import org.eclipse.datatools.connectivity.drivers.models.OverrideTemplateDescriptor;
+import org.eclipse.datatools.connectivity.drivers.models.TemplateDescriptor;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+import org.eclipse.datatools.connectivity.services.PluginResourceLocator;
+
+import com.ibm.icu.util.StringTokenizer;
+
+/**
+ * This class provides a management-level interface for drivers.
+ * 
+ * @author brianf
+ */
+public class DriverManager {
+
+	private static DriverManager sInstance;
+	
+	private static HashMap mDriverInstanceMap;
+	
+	private static boolean refreshDriverMap = false;
+	
+	private static String DRIVER_MARKER_FILE_NAME = "driverManagerPreferences.xml"; //$NON-NLS-1$
+    private static final String EMPTY_STRING = ""; //$NON-NLS-1$
+	
+	private static boolean mDebug = ConnectivityPlugin.getDefault().isDebugging();
+
+	/**
+	 * Retrieve an instance of the DriverManager
+	 * @return DriverManager
+	 */
+	public static synchronized DriverManager getInstance() {
+		if (sInstance == null) {
+			sInstance = new DriverManager();
+		}
+		return sInstance;
+	}
+
+	private synchronized void loadAllInstances() {
+		loadAllInstances(true);
+	}
+	
+	private synchronized void loadAllInstances(boolean migrate) {
+		debug ("loadAllInstances: migrate = " + migrate); //$NON-NLS-1$
+		XMLFileManager.setFileName(IDriverMgmtConstants.DRIVER_FILE);
+		try {
+			IPropertySet[] psets = XMLFileManager.loadPropertySets();
+			if (psets.length > 0) {
+				boolean changed = false;
+				for (int i = 0; i < psets.length; i++) {
+					IPropertySet pset = psets[i];
+					DriverInstance ndi = new DriverInstance(pset);
+					if (migrate) {
+						changed = ndi.migrate();
+					}
+					if (changed) {
+						IPropertySet migratedPset = ndi.getPropertySet();
+						debug ("loadAllInstances: migrated di = " + migratedPset.getID() ); //$NON-NLS-1$
+						psets[i] = migratedPset;
+						DriverInstance mndi = new DriverInstance(migratedPset);
+						mDriverInstanceMap.put(mndi.getId(), mndi);
+						saveChanges(psets);
+						refreshDriverMap = true;
+					}
+					else 
+						mDriverInstanceMap.put(ndi.getId(), ndi);
+				}
+
+				return;
+			}
+		}
+		catch (CoreException e) {
+			ConnectivityPlugin.getDefault().log(e);
+		}
+	}
+
+	private void saveChanges(IPropertySet[] psets) {
+		debug("saveChanges"); //$NON-NLS-1$
+		XMLFileManager.setFileName(IDriverMgmtConstants.DRIVER_FILE);
+		try {
+			XMLFileManager.saveNamedPropertySet(psets);
+//			syncDriverValuesChangesToPreferenceStore();
+//			mDriverInstanceMap = new HashMap();
+//			loadAllInstances();
+		}
+		catch (CoreException e) {
+			ConnectivityPlugin.getDefault().log(e);
+		}
+	}
+
+	private DriverManager() {
+		resetDefaultInstances(true);
+	}
+
+	private DriverInstance getDriverInstanceFromMapByName( String name ) {
+//		updatemDriverInstanceMap();
+        Iterator iter = mDriverInstanceMap.values().iterator();
+        while (iter.hasNext()) {
+            DriverInstance di = (DriverInstance) iter.next();
+            if (di.getName().equals(name))
+                return di;
+        }
+		return null;
+	}
+	
+	private DriverInstance getDriverInstanceFromMapByID( String id ) {
+//		updatemDriverInstanceMap();
+        return (DriverInstance) mDriverInstanceMap.get(id);
+	}
+
+	private DriverInstance[] getDriverInstancesFromMapByCategoryID( String categoryid ) {
+//		updatemDriverInstanceMap();
+		Iterator iter = mDriverInstanceMap.values().iterator();
+		ArrayList<DriverInstance> list = new ArrayList<DriverInstance>();
+		while (iter.hasNext()) {
+			DriverInstance di = (DriverInstance) iter.next();
+			// Bug 311028: It's possible for a template to be null so adding a null check to prevent an NPE
+			TemplateDescriptor template = di.getTemplate();
+			if(template != null) {
+				// Bug 311028: the call to template.getParent() may return null so adding this null check to be safe.
+				CategoryDescriptor templateParent = template.getParent();
+				if((templateParent != null) && templateParent.getId().equals(categoryid)) {
+					list.add(di);					
+				}
+			}
+		}
+		return list.toArray(new DriverInstance[list.size()]);
+	}
+
+	private DriverInstance[] getDriverInstancesFromMapForTemplateID( String templateid ) {
+//		updatemDriverInstanceMap();
+		Iterator iter = mDriverInstanceMap.values().iterator();
+		ArrayList<DriverInstance> list = new ArrayList<DriverInstance>();
+		while (iter.hasNext()) {
+			DriverInstance di = (DriverInstance) iter.next();
+			// Bug 311028: It's possible for a template to be null so adding a null check to prevent an NPE
+			TemplateDescriptor template = di.getTemplate();
+			if((template != null) && template.getId().equals(templateid)) {
+				list.add(di);
+			}
+		}
+		return list.toArray(new DriverInstance[list.size()]);
+	}
+
+	/**
+	 * Retrieve a DriverInstance by Id
+	 * @param id ID of the driver
+	 * @return DriverInstance
+	 */
+	public DriverInstance getDriverInstanceByID(String id) {
+		DriverInstance di = getDriverInstanceFromMapByID(id);
+		if (di == null) {
+			XMLFileManager.setFileName(IDriverMgmtConstants.DRIVER_FILE);
+			try {
+				IPropertySet[] psets = XMLFileManager.loadPropertySets();
+				if (psets.length > 0) {
+					for (int i = 0; i < psets.length; i++) {
+						IPropertySet pset = psets[i];
+						if (pset.getID().equals(id)) {
+							di = new DriverInstance(pset);
+							mDriverInstanceMap.put(di.getId(), di);
+						}
+					}
+				}
+			}
+			catch (CoreException e) {
+				ConnectivityPlugin.getDefault().log(e);
+			}
+		}
+		return di;
+	}
+
+	public DriverInstance[] getDriverInstancesByCategory(String categoryid) {
+		return getDriverInstancesFromMapByCategoryID(categoryid);
+	}
+
+	public DriverInstance[] getDriverInstancesByTemplate(String templateid) {
+		return getDriverInstancesFromMapForTemplateID(templateid);
+	}
+
+	/**
+	 * Retrieve a DriverInstance by name.
+	 * @param name Name of the driver
+	 * @return Driver Instance
+	 */
+	public DriverInstance getDriverInstanceByName(String name) {
+		DriverInstance di = getDriverInstanceFromMapByName(name);
+		if (di == null) {
+			XMLFileManager.setFileName(IDriverMgmtConstants.DRIVER_FILE);
+			try {
+				IPropertySet[] psets = XMLFileManager.loadPropertySets();
+				if (psets.length > 0) {
+					for (int i = 0; i < psets.length; i++) {
+						IPropertySet pset = psets[i];
+						if (pset.getName().equals(name)) {
+							di = new DriverInstance(pset);
+							mDriverInstanceMap.put(di.getId(), di);
+						}
+					}
+				}
+			}
+			catch (CoreException e) {
+				ConnectivityPlugin.getDefault().log(e);
+			}
+		}
+		return di;
+	}
+
+	/**
+     * Retrieve DriverInstances by name.
+     * @param name Name of the driver
+     * @return Driver Instances
+     */
+    public DriverInstance[] getDriverInstancesByName(String name) {
+        Vector driverInstanceCollection = new Vector();
+            XMLFileManager.setFileName(IDriverMgmtConstants.DRIVER_FILE);
+            try {
+//        		updatemDriverInstanceMap();
+                IPropertySet[] psets = XMLFileManager.loadPropertySets();
+                if (psets.length > 0) {
+                    for (int i = 0; i < psets.length; i++) {
+                        IPropertySet pset = psets[i];
+                        if (pset.getName().equals(name)) {
+                            DriverInstance driver = new DriverInstance(pset);
+                            driverInstanceCollection.add(new DriverInstance(pset));
+                            mDriverInstanceMap.put(driver.getId(), driver);
+                        }
+                    }
+                }
+            }
+            catch (CoreException e) {
+                ConnectivityPlugin.getDefault().log(e);
+            }
+            DriverInstance[] driverInstanceArray = new DriverInstance [driverInstanceCollection.size()];
+            driverInstanceCollection.copyInto(driverInstanceArray);
+        return driverInstanceArray;
+    }
+
+	/**
+	 * Return a comma-delimited list of all jars for all drivers.
+	 * @return String
+	 */
+	public String getFullJarList() {
+//		updatemDriverInstanceMap();
+		Object[] drivers = mDriverInstanceMap.values().toArray();
+		String fullList = EMPTY_STRING;
+		for (int x = 0; x < drivers.length; x++) {
+			DriverInstance di = (DriverInstance) drivers[x];
+			if (di.getJarList() != null) {
+				String jarlist = di.getJarList().trim();
+				if (fullList.trim().length() > 0)
+					fullList = fullList + IDriverMgmtConstants.PATH_DELIMITER;
+				fullList = fullList + jarlist
+					+ IDriverMgmtConstants.PATH_DELIMITER;
+			}
+			if (fullList
+					.substring(fullList.length() - 1, fullList.length())
+					.equals(IDriverMgmtConstants.PATH_DELIMITER)) {
+				fullList = fullList.substring(0, fullList.length() - 1);
+			}
+		}
+		if (fullList.trim().length() > 0) {
+			String[] paths = parseString(fullList,
+					IDriverMgmtConstants.PATH_DELIMITER);
+			ArrayList list = new ArrayList();
+			for (int i = 0; i < paths.length; i++) {
+				File testFile = new File(paths[i]);
+				if (testFile.exists()) {
+					if (!list.contains(paths[i]))
+						list.add(paths[i]);
+				}
+			}
+
+			String newList = EMPTY_STRING;
+			Iterator iter2 = list.iterator();
+			while (iter2.hasNext()) {
+				newList = newList + iter2.next()
+						+ IDriverMgmtConstants.PATH_DELIMITER;
+			}
+			if (newList.length() > 0) {
+				if (newList.substring(newList.length() - 1, newList.length())
+						.equals(IDriverMgmtConstants.PATH_DELIMITER)) {
+					newList = newList.substring(0, newList.length() - 1);
+				}
+			}
+			return newList;
+		}
+		return null;
+	}
+
+	/**
+	 * Return an array of all jars for all drivers.
+	 * @return String[]
+	 */
+	public String[] getFullJarListAsArray() {
+		if (getFullJarList() != null) {
+			if (getFullJarList().length() == 0)
+				return new String[0];
+			String[] paths = parseString(getFullJarList(),
+					IDriverMgmtConstants.PATH_DELIMITER);
+			return paths;
+		}
+		return null;
+	}
+
+	/**
+	 * Returns an array of valid driver instances
+	 * @return DriverInstance[]
+	 */
+	public DriverInstance[] getValidDriverInstances() {
+		DriverInstance[] array = new DriverInstance[0];
+//		updatemDriverInstanceMap();
+		Iterator iter = mDriverInstanceMap.values().iterator();
+		ArrayList list = new ArrayList();
+		while (iter.hasNext()) {
+			DriverInstance di = (DriverInstance) iter.next();
+			DriverValidator validator = new DriverValidator(di);
+			if (validator.isValid())
+				list.add(di);
+		}
+		array = new DriverInstance[list.size()];
+		for (int i = 0; i < list.size(); i++) {
+			array[i] = (DriverInstance) list.get(i);
+		}
+
+		return array;
+	}
+	
+	/**
+	 * Returns an array of all driver instances
+	 * @return DriverInstance[]
+	 */
+	public DriverInstance[] getAllDriverInstances() {
+//		updatemDriverInstanceMap();
+		return (DriverInstance[]) 
+			mDriverInstanceMap.values().toArray(
+					new DriverInstance[mDriverInstanceMap.values().size()]);
+	}
+
+	private IPropertySet[] getPropertySetsFromMap() {
+//		updatemDriverInstanceMap();
+		Iterator iter = mDriverInstanceMap.values().iterator();
+		ArrayList list = new ArrayList();
+		while (iter.hasNext()) {
+			DriverInstance di = (DriverInstance) iter.next();
+			list.add(di.getPropertySet());
+		}
+		return (IPropertySet[]) list.toArray(new IPropertySet[list.size()]);
+	}
+
+   /**
+     * Create a new DriverInstance based on the incoming templateID,
+     * driver name, and jar list.
+     * @param templateID String ID of the template
+     * @param name String name to give the driver
+     * @param jarList String jar list to give the driver
+     * @return DriverInstance
+     */
+    public DriverInstance createNewDriverInstance(String templateID,
+            String name, String jarList, String driverClass) {
+        if (templateID == null) return null;
+        if (name == null) return null;
+        
+        IPropertySet pset = createDefaultInstance(templateID);
+        
+        // if for some reason, we get back a null, pass that back
+        if (pset == null)
+            return null;
+        
+        if (name != null)
+            pset.setName(name);
+        String prefix = DriverMgmtMessages
+                .getString("NewDriverDialog.text.id_prefix"); //$NON-NLS-1$
+        String id = prefix + templateID + "." + name; //$NON-NLS-1$
+        pset.setID(id);
+        Properties props = pset.getBaseProperties();
+        if (jarList != null)
+            props.setProperty(IDriverMgmtConstants.PROP_DEFN_JARLIST, jarList);
+        props.setProperty("org.eclipse.datatools.connectivity.db.driverClass", driverClass);
+        addDriverInstance(pset);
+        return getDriverInstanceByID(pset.getID());
+    }
+
+	/**
+	 * Create a new DriverInstance based on the incoming templateID,
+	 * driver name, and jar list.
+	 * @param templateID String ID of the template
+	 * @param name String name to give the driver
+	 * @param jarList String jar list to give the driver
+	 * @return DriverInstance
+	 */
+	public DriverInstance createNewDriverInstance(String templateID,
+			String name, String jarList) {
+		if (templateID == null) return null;
+		if (name == null) return null;
+//		if (jarList == null) return null;
+		
+		IPropertySet pset = createDefaultInstance(templateID);
+		
+		// if for some reason, we get back a null, pass that back
+		if (pset == null)
+			return null;
+		
+		if (name != null)
+			pset.setName(name);
+		String prefix = DriverMgmtMessages
+				.getString("NewDriverDialog.text.id_prefix"); //$NON-NLS-1$
+		String id = prefix + templateID + "." + name; //$NON-NLS-1$
+		pset.setID(id);
+		Properties props = pset.getBaseProperties();
+		if (jarList != null)
+			props.setProperty(IDriverMgmtConstants.PROP_DEFN_JARLIST, jarList);
+		addDriverInstance(pset);
+		return getDriverInstanceByID(pset.getID());
+	}
+
+	/**
+	 * Removes a driver instance based on the id.
+	 * @param id String ID of the driver instance
+	 * @return true on success, false otherwise
+	 */
+	public boolean removeDriverInstance(String id) {
+		boolean rtnFlag = false;
+		if (getDriverInstanceByID(id) != null) {
+			XMLFileManager.setFileName(IDriverMgmtConstants.DRIVER_FILE);
+			try {
+				IPropertySet[] psets = XMLFileManager.loadPropertySets();
+				if (psets.length > 0) {
+					IPropertySet[] newPsets = new IPropertySet[psets.length - 1];
+					int counter = 0;
+					for (int i = 0; i < psets.length; i++) {
+						IPropertySet pset = psets[i];
+						if (pset.getID().equals(id)) {
+							rtnFlag = true;
+							DriverValidator.removeOldProblemMarkers(pset.getName());
+						}
+						else {
+							newPsets[counter] = pset;
+							counter++;
+						}
+					}
+					if (rtnFlag == true) {
+						XMLFileManager.saveNamedPropertySet(newPsets);
+//						syncDriverValuesChangesToPreferenceStore();
+						mDriverInstanceMap = new HashMap();
+						loadAllInstances();
+					}
+				}
+			}
+			catch (CoreException e) {
+				ConnectivityPlugin.getDefault().log(e);
+			}
+		}
+		return rtnFlag;
+	}
+
+	public void addDriverInstance ( DriverInstance di ) {
+//		updatemDriverInstanceMap();
+		mDriverInstanceMap.put(di.getId(), di);
+		IPropertySet[] psets = getPropertySetsFromMap();
+		XMLFileManager.setFileName(IDriverMgmtConstants.DRIVER_FILE);
+		try {
+			XMLFileManager.saveNamedPropertySet(psets);
+//			syncDriverValuesChangesToPreferenceStore();
+			mDriverInstanceMap = new HashMap();
+			loadAllInstances();
+		}
+		catch (CoreException e) {
+			ConnectivityPlugin.getDefault().log(e);
+		}
+	}
+	
+	/**
+	 * Adds a new driver instance to the Drivers file
+	 * @param pset IPropertySet
+	 */
+	public void addDriverInstance(IPropertySet pset) {
+		DriverInstance di = new DriverInstance(pset);
+		addDriverInstance(di);
+	}
+
+	public void addDriverInstances(IPropertySet[] propertySets) {
+		
+		for(int i = 0; i < propertySets.length;i++)	{
+			DriverInstance di = new DriverInstance(propertySets[i]);
+			mDriverInstanceMap.put(di.getId(), di);
+		}
+		IPropertySet[] psets = getPropertySetsFromMap();
+		saveChanges(psets);
+		mDriverInstanceMap = new HashMap();
+		loadAllInstances();
+	}
+	
+	/**
+	 * Parses the incoming string by the token.
+	 * @param str_list String list
+	 * @param token Token to use to break up the string
+	 * @return String array 
+	 */
+	private String[] parseString(String str_list, String token) {
+		StringTokenizer tk = new StringTokenizer(str_list, token);
+		String[] pieces = new String[tk.countTokens()];
+		int index = 0;
+		while (tk.hasMoreTokens())
+			pieces[index++] = tk.nextToken();
+		return pieces;
+	}
+
+	/**
+	 * Checks to see if the default drivers marker exists, which
+	 * indicates that default driver definitions were created already.
+	 * @return
+	 */
+	private boolean wereDefaultDriversCreated() {
+		IPath metadataPath = 
+			ConnectivityPlugin.getWorkspaceFilePath(DRIVER_MARKER_FILE_NAME);
+		File file = metadataPath.toFile();
+		if (file.exists()){
+			FileInputStream fis = null;
+			try {
+				fis = new FileInputStream(file);
+				ConnectivityPlugin.getDefault().loadPreferences( fis );
+			} catch (FileNotFoundException e) {
+				ConnectivityPlugin.getDefault().log(e);
+			} catch (IOException e) {
+				ConnectivityPlugin.getDefault().log(e);
+			} finally {
+				if (fis != null) {
+					try {
+						fis.close();
+					} catch (IOException e) {
+						ConnectivityPlugin.getDefault().log(e);
+					}
+				}
+			}
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * Creates the default drivers marker if it didn't already exist
+	 * @return
+	 */
+	private boolean createDefaultDriversMarker() {
+		IPath metadataPath = 
+			ConnectivityPlugin.getWorkspaceFilePath(DRIVER_MARKER_FILE_NAME);
+		File file = metadataPath.toFile();
+		if (!file.exists()){
+			try {
+				file.createNewFile();
+				return true;
+			} catch (IOException e) {
+			}
+		}
+		return false;
+	}
+	
+	private boolean wasDefaultCreatedBefore(TemplateDescriptor td) {
+		return ConnectivityPlugin.getDefault().getPreferenceBooleanValue( td.getId() );
+	}
+	
+//	/**
+//	 * persists any changes in driver definitions preferences to its preference store 
+//	 * @return true in case both are not equal
+//	 */
+//	public static boolean syncDriverValuesChangesToPreferenceStore(){
+//		boolean changed = syncDriverChangesToPreferenceStore();
+//		if (changed){
+//			syncPreferenceStoreAndDriverManagerXML();
+//		}
+//		return changed;		
+//	}
+
+//	/**
+//	 * persists any Driver definitions preference store changes due to import to Driver definitions 
+//	 * @return true in case both are not equal
+//	 */
+//	public static boolean syncPreferenceStoreChangesToDriverValues(){
+//		boolean changed = syncPreferenceStoreChangesToDriver();
+//		if(changed){
+//			syncPreferenceStoreAndDriverManagerXML();	
+//		}
+//
+//		return changed;
+//	}
+
+//	private static boolean syncDriverChangesToPreferenceStore() {
+//		String driverValues = EMPTY_STRING;
+//		String driverValuesTemp = EMPTY_STRING;
+//		IPath metadataPath = ConnectivityPlugin.getWorkspaceFilePath(IDriverMgmtConstants.DRIVER_FILE);
+//		File file = metadataPath.toFile();
+//		if (file.exists()){
+//			FileReader fr = null;
+//			BufferedReader br = null;
+//			try {				
+//				fr = new FileReader(file);
+//				br = new BufferedReader(fr);
+//
+//				if((driverValuesTemp = br.readLine())!=null){
+//					driverValues = driverValuesTemp;
+//				}
+//				String preferenceStoreDriverValues = ConnectivityPlugin.getDefault().getPreferenceStringValue(IDriverMgmtConstants.DRIVER_VALUES);
+//
+//				if(!(driverValues.equals(preferenceStoreDriverValues))){
+//					// setting key value preference pair in preference store
+//					ConnectivityPlugin.getDefault().setPreferenceValue(IDriverMgmtConstants.DRIVER_VALUES, driverValues);
+//					return true;
+//				}
+//			} catch (FileNotFoundException e) {
+//				ConnectivityPlugin.getDefault().log(e);
+//			} catch (IOException e) {
+//				ConnectivityPlugin.getDefault().log(e);
+//			}finally{
+//				if(br!=null){
+//					try {
+//						br.close();
+//					} catch (IOException e) {
+//						ConnectivityPlugin.getDefault().log(e);
+//					}
+//					if(fr!=null){
+//						try {
+//							fr.close();
+//						} catch (IOException e) {
+//							ConnectivityPlugin.getDefault().log(e);
+//						}
+//					}
+//				}
+//			}
+//		}
+//		return false;
+//	}
+
+//	private static void syncPreferenceStoreAndDriverManagerXML(){
+//		IPath metadataPath = ConnectivityPlugin.getWorkspaceFilePath(DRIVER_MARKER_FILE_NAME);
+//		File file = metadataPath.toFile();
+//		FileOutputStream fos = null;
+//		try {
+//			fos = new FileOutputStream(file);
+//			ConnectivityPlugin.getDefault().storePreferences(fos, "DriverManager.Preferences"); //$NON-NLS-1$
+//		} catch (FileNotFoundException e) {
+//			ConnectivityPlugin.getDefault().log(e);
+//		} catch (IOException e) {
+//			ConnectivityPlugin.getDefault().log(e);
+//		} finally {
+//			if (fos != null) {
+//				try {
+//					fos.close();
+//				} catch (IOException e) {
+//					ConnectivityPlugin.getDefault().log(e);
+//				}
+//			}
+//		}
+//	}
+
+//	private static boolean syncPreferenceStoreChangesToDriver(){
+//		String preferenceStoreDriverValues = 
+//		        ConnectivityPlugin.getDefault().getPreferenceStringValue(IDriverMgmtConstants.DRIVER_VALUES);
+//		if( preferenceStoreDriverValues.equals( EMPTY_STRING ) )
+//		    return false;     // no driver values in preference store, nothing to sync
+//		
+//        String driverValues = EMPTY_STRING;
+//        String driverValuesTemp = EMPTY_STRING;
+//		IPath metadataPath = ConnectivityPlugin.getWorkspaceFilePath(IDriverMgmtConstants.DRIVER_FILE);
+//		File file = metadataPath.toFile();
+//		if (file.exists()){
+//			FileReader fr = null;
+//			BufferedReader br = null;
+//			try {
+//				fr = new FileReader(file);
+//				br = new BufferedReader(fr);
+//
+//				if((driverValuesTemp = br.readLine())!=null){
+//					driverValues = driverValuesTemp;
+//				}
+//
+//			} catch (FileNotFoundException e) {
+//				ConnectivityPlugin.getDefault().log(e);
+//			} catch (IOException e) {
+//				ConnectivityPlugin.getDefault().log(e);
+//			} finally{
+//				if(br!=null){
+//					try {
+//						br.close();
+//					} catch (IOException e) {
+//						ConnectivityPlugin.getDefault().log(e);
+//					}
+//					if(fr!=null){
+//						try {
+//							fr.close();
+//						} catch (IOException e) {
+//							ConnectivityPlugin.getDefault().log(e);
+//						}
+//					}
+//				}
+//			}
+//
+//			if(!(driverValues.equals(preferenceStoreDriverValues))){
+//				FileWriter fw = null;
+//				BufferedWriter bw = null;
+//				try{
+//					fw = new FileWriter(file);
+//					bw = new BufferedWriter(fw);
+//					bw.write(preferenceStoreDriverValues);
+//
+//					return true;
+//				}catch (FileNotFoundException e) {
+//					ConnectivityPlugin.getDefault().log(e);
+//				} catch (IOException e) {
+//					ConnectivityPlugin.getDefault().log(e);
+//				} finally{
+//					if(bw!=null){
+//						try {
+//							bw.close();
+//						} catch (IOException e) {
+//							ConnectivityPlugin.getDefault().log(e);
+//						}
+//						if(fw!=null){
+//							try {
+//								fw.close();
+//							} catch (IOException e) {
+//								ConnectivityPlugin.getDefault().log(e);
+//							}
+//						}
+//					}
+//				}
+//			}
+//		}
+//		//To take care of the case when Driver Definitions are not initialized but preference store has been set due to import 
+//		else if( !file.exists() )
+//		{
+//			FileWriter fw = null;
+//			BufferedWriter bw = null;
+//			try{
+//				fw = new FileWriter(file);
+//				bw = new BufferedWriter(fw);
+//				bw.write(preferenceStoreDriverValues);
+//
+//				return true;
+//			}catch (FileNotFoundException e) {
+//				ConnectivityPlugin.getDefault().log(e);
+//			} catch (IOException e) {
+//				ConnectivityPlugin.getDefault().log(e);
+//			} finally{
+//				if(bw!=null){
+//					try {
+//						bw.close();
+//					} catch (IOException e) {
+//						ConnectivityPlugin.getDefault().log(e);
+//					}
+//					if(fw!=null){
+//						try {
+//							fw.close();
+//						} catch (IOException e) {
+//							ConnectivityPlugin.getDefault().log(e);
+//						}
+//					}
+//				}
+//			}
+//		}
+//		return false;
+//	}
+
+//	/**
+//	 * mDriverInstanceMap containing driver definition objects has to be updated in case there is a change in driver definition preferences 
+//	 * @return true in case update has happened
+//	 */
+//	private boolean updatemDriverInstanceMap(){
+//		if(syncPreferenceStoreChangesToDriverValues()){
+//			mDriverInstanceMap = new HashMap();
+//			loadAllInstances();
+//			return true;
+//		}
+//		return false;
+//	}
+	
+	/**
+	 * Creates any default driver template instances that need to be created.
+	 * This is when the plug-in is loaded.
+	 */
+	public void resetDefaultInstances() {
+		resetDefaultInstances(false);
+	}
+	
+	public void resetDefaultInstances(boolean batchUpdate) {
+		debug ("resetDefaultInstances"); //$NON-NLS-1$
+		
+		// Start building a list
+		ArrayList psets_list = new ArrayList();
+
+		// Grab all the driver templates
+		TemplateDescriptor types[] = TemplateDescriptor
+				.getDriverTemplateDescriptors();
+
+		// prep the file for reading
+		XMLFileManager.setFileName(IDriverMgmtConstants.DRIVER_FILE);
+
+		// load the hash map from the file to in memory
+		if (mDriverInstanceMap == null || refreshDriverMap) {
+			debug ("resetDefaultInstances: loading hash map"); //$NON-NLS-1$
+			mDriverInstanceMap = new HashMap();
+			loadAllInstances(true);
+			if (refreshDriverMap) 
+				refreshDriverMap = false;
+		}
+
+		wereDefaultDriversCreated();
+
+		debug ("resetDefaultInstances: checking for drivers to create by default"); //$NON-NLS-1$
+
+		// Now grab all the driver instances from the file
+		IPropertySet[] psets = getPropertySetsFromMap();
+
+		List<IPropertySet> pendingPropertySets = null;
+		List<TemplateDescriptor> pendingDefaultsCreated = null;
+		boolean updatePending = false;
+		if (batchUpdate) {
+			pendingPropertySets = new ArrayList<IPropertySet>();
+			pendingDefaultsCreated = new ArrayList<TemplateDescriptor>();
+		}
+		
+		// now process the templates and see if we need to
+		// create any instances
+		for (int i = 0; i < types.length; i++) {
+			TemplateDescriptor type = types[i];
+
+			// do we need to create a default instance?
+			boolean alreadyExists = false;
+			if (psets.length > 0) {
+				for (int j = 0; j < psets.length; j++) {
+					IPropertySet pset = psets[j];
+					if (pset.getBaseProperties().getProperty(
+							IDriverMgmtConstants.PROP_DEFN_TYPE) != null) {
+						String category = pset.getBaseProperties().getProperty(
+								IDriverMgmtConstants.PROP_DEFN_TYPE);
+						if (category.equalsIgnoreCase(type.getId())) {
+							alreadyExists = true;
+							psets_list.add(pset);
+						}
+					}
+				}
+			}
+			
+			boolean defaultExists = wasDefaultCreatedBefore(type);
+
+			// if we need to create one and it doesn't already
+			// exist, create one and add it to the list.
+			boolean createDefaultValue = false;
+			if (type.getValuesProviderClass() != null) {
+				String value = 
+					type.getValuesProviderClass().createDefaultValue(IDriverValuesProvider.VALUE_CREATE_DEFAULT);
+				if (value != null) {
+					createDefaultValue = Boolean.valueOf(value).booleanValue();
+				}
+			}
+			IDriverValuesProvider overrideDriverValsProvider = null;
+			OverrideTemplateDescriptor[] otds = 
+				OverrideTemplateDescriptor.getByDriverTemplate(type.getId());
+			if (otds != null && otds.length > 0) {
+				overrideDriverValsProvider =
+					otds[0].getValuesProviderClass();
+				if (overrideDriverValsProvider != null) {
+					String value = 
+						overrideDriverValsProvider.createDefaultValue(IDriverValuesProvider.VALUE_CREATE_DEFAULT);
+					if (value != null) {
+						createDefaultValue = Boolean.valueOf(value).booleanValue();
+					}
+				}
+			}
+			
+			debug("Default already exists for " + type.getId() + ": " + defaultExists); //$NON-NLS-1$ //$NON-NLS-2$
+			if ((createDefaultValue || type.getCreateDefaultFlag()) && !defaultExists && !alreadyExists) {
+				IPropertySet newPset = createDefaultInstance(type);
+				if (newPset != null) {
+					if (batchUpdate) {
+						pendingPropertySets.add(newPset);
+						pendingDefaultsCreated.add(type);
+						updatePending = true;
+					} else {
+						addDriverInstance(newPset);
+						setDefaultCreated( type.getId(), true );
+					}
+				}			
+			}
+		}
+		
+		if (batchUpdate && updatePending) {
+			addDriverInstances(pendingPropertySets.toArray(new IPropertySet[0]));
+			setDefaultCreated(pendingDefaultsCreated.toArray(new TemplateDescriptor[0]), true);
+		}
+		
+		boolean markerCreated = createDefaultDriversMarker();
+		debug("Marker created: " + markerCreated); //$NON-NLS-1$
+	}
+
+	private void setDefaultCreated(TemplateDescriptor[] types, boolean isDefaultCreated) {
+		for (TemplateDescriptor type : types) {
+			ConnectivityPlugin.getDefault().setPreferenceValue( type.getId(), isDefaultCreated );
+		}
+		
+		savePreferences();
+	}
+	
+	private void setDefaultCreated( String driverTemplateId, boolean isDefaultCreated )
+	{
+        ConnectivityPlugin.getDefault().
+            setPreferenceValue( driverTemplateId, isDefaultCreated );
+        
+            savePreferences();
+	}
+	
+	private void savePreferences() {	
+        IPath metadataPath = 
+            ConnectivityPlugin.getWorkspaceFilePath(DRIVER_MARKER_FILE_NAME);
+        File file = metadataPath.toFile();
+        if (!file.exists()){
+            try {
+                file.createNewFile();
+            } catch (IOException e) {
+            }
+        }
+        FileOutputStream fos = null;
+        try {
+            fos = new FileOutputStream(file);
+            ConnectivityPlugin.getDefault().
+                storePreferences( fos, 
+                        "DriverManager.Preferences"); //$NON-NLS-1$
+        } catch (FileNotFoundException e) {
+            ConnectivityPlugin.getDefault().log(e);
+        } catch (IOException e) {
+            ConnectivityPlugin.getDefault().log(e);
+        } finally {
+            if (fos != null) {
+                try {
+                    fos.close();
+                } catch (IOException e) {
+                    ConnectivityPlugin.getDefault().log(e);
+                }
+            }
+        }
+	}
+	
+	/**
+	 * Creates a default instance of the driver.
+	 * @param id String ID of driver
+	 * @return IPropertySet
+	 */
+	public IPropertySet createDefaultInstance(String id) {
+		TemplateDescriptor template = TemplateDescriptor
+				.getDriverTemplateDescriptor(id);
+		IPropertySet pset = createInstance(template);
+		return pset;
+	}
+
+	/**
+	 * Creates an empty instance of the template
+	 * @param template IPropertySet
+	 * @return IPropertySet
+	 */
+	private IPropertySet createInstance(TemplateDescriptor template) {
+		return createDefaultInstance(template, true);
+	}
+
+	/**
+	 * Create a default instance of a driver template.
+	 * 
+	 * @param template
+	 * @return IPropertySet
+	 */
+	private IPropertySet createDefaultInstance(TemplateDescriptor template) {
+		return createDefaultInstance(template, false);
+	}
+
+	/**
+	 * Creates a default instance of the template
+	 * @param template TemplateDescriptor to use
+	 * @param override Boolean flag indicating if the template should be overridden
+	 * @return IPropertySet object
+	 */
+	private IPropertySet createDefaultInstance(TemplateDescriptor template,
+			boolean override) {
+
+		IDriverValuesProvider driverValsProvider = null;
+		IDriverValuesProvider overrideDriverValsProvider = null;
+		OverrideTemplateDescriptor[] otds = null; 
+		if (template != null) {
+			
+			debug("Creating Default Instance of " + template.getId()); //$NON-NLS-1$
+			otds = OverrideTemplateDescriptor.getByDriverTemplate(template.getId());
+			if (otds != null && otds.length > 0) {
+				overrideDriverValsProvider =
+					otds[0].getValuesProviderClass();
+				if (overrideDriverValsProvider != null) {
+					debug("Have a driver values provider from the override"); //$NON-NLS-1$
+				}
+			}
+			driverValsProvider =
+				(IDriverValuesProvider) template.getValuesProviderClass();
+			if (driverValsProvider != null) {
+				debug("Have a driver values provider from the template"); //$NON-NLS-1$
+			}
+		}
+		
+		boolean createDefault = (template != null) ? template.getCreateDefaultFlag() : false;
+		debug("Create Default from the template is " + createDefault); //$NON-NLS-1$
+		if (driverValsProvider != null) {
+			String valsCreateDefault = driverValsProvider.createDefaultValue(IDriverValuesProvider.VALUE_CREATE_DEFAULT);
+			if (valsCreateDefault != null) {
+				createDefault = Boolean.valueOf(valsCreateDefault).booleanValue();
+				debug("Create Default was reset to " + valsCreateDefault + " by the driver values provider"); //$NON-NLS-1$ //$NON-NLS-2$
+			}
+		}
+		if (overrideDriverValsProvider != null) {
+			String overrideValsCreateDefault = overrideDriverValsProvider.createDefaultValue(IDriverValuesProvider.VALUE_CREATE_DEFAULT);
+			if (overrideValsCreateDefault != null) {
+				createDefault = Boolean.valueOf(overrideValsCreateDefault).booleanValue();
+				debug("Create Default was reset to " + overrideValsCreateDefault + " by the override driver values provider"); //$NON-NLS-1$ //$NON-NLS-2$
+			}
+		}
+		
+		if (template != null && (createDefault || override)) {
+
+			// generate the id and name for the new instance
+			String prefix = DriverMgmtMessages
+					.getString("NewDriverDialog.text.id_prefix"); //$NON-NLS-1$
+			String suffix = DriverMgmtMessages
+					.getString("DriverMgmtPlugin.default_instance_suffix"); //$NON-NLS-1$			
+					
+			String name = template.getDefaultDefinitionName() + " " + suffix;//$NON-NLS-1$
+			String id = prefix + template.getId()+ "." + name;
+			
+			debug("Default driver name from the template is " + name); //$NON-NLS-1$
+			if (driverValsProvider != null) {
+				String driverValsName = driverValsProvider.createDefaultValue(IDriverValuesProvider.VALUE_NAME);
+				if (driverValsName != null) {
+					name = driverValsName;
+					debug("Driver name was reset to " + driverValsName + " by the driver values provider"); //$NON-NLS-1$ //$NON-NLS-2$
+				}
+				String driverValsDefaultDefinitionName = driverValsProvider.createDefaultValue(IDriverValuesProvider.VALUE_DEFAULT_DEFINITION_NAME);
+				if (driverValsDefaultDefinitionName != null) {
+					name = driverValsDefaultDefinitionName;
+					debug("Driver name was reset to " + driverValsDefaultDefinitionName + " (Default Definition Name) by the driver values provider"); //$NON-NLS-1$ //$NON-NLS-2$
+				}
+			}
+			if (overrideDriverValsProvider != null) {
+				String overrideDriverValsName = overrideDriverValsProvider.createDefaultValue(IDriverValuesProvider.VALUE_NAME);
+				if (overrideDriverValsName != null) {
+					name = overrideDriverValsName;
+					debug("Driver name was reset to " + overrideDriverValsName + " by the override driver values provider"); //$NON-NLS-1$ //$NON-NLS-2$
+				}
+				String overrideDriverValsDefaultDefinitionName = overrideDriverValsProvider.createDefaultValue(IDriverValuesProvider.VALUE_DEFAULT_DEFINITION_NAME);
+				if (overrideDriverValsDefaultDefinitionName != null) {
+					name = overrideDriverValsDefaultDefinitionName;
+					debug("Driver name was reset to " + overrideDriverValsDefaultDefinitionName + " (Default Definition Name) by the override driver values provider"); //$NON-NLS-1$ //$NON-NLS-2$
+				}
+			}
+
+			// Now create the property set
+			PropertySetImpl propset = new PropertySetImpl(id, template
+					.getName());
+			propset.setID(id);
+			propset.setName(name);
+
+			// create the base properties
+			Properties props = new Properties();
+
+			String jarList = EMPTY_STRING;
+			String valsJarList = null;
+			String overrideValsJarList = null;
+			
+			if (driverValsProvider != null) {
+				valsJarList = driverValsProvider.createDefaultValue(IDriverValuesProvider.VALUE_JARLIST);
+				if (valsJarList != null) {
+					jarList = valsJarList;
+					debug("Jar list was reset to " + valsJarList + " by the driver values provider"); //$NON-NLS-1$ //$NON-NLS-2$
+				}
+			}
+			if (overrideDriverValsProvider != null) {
+				overrideValsJarList = overrideDriverValsProvider.createDefaultValue(IDriverValuesProvider.VALUE_JARLIST);
+				if (overrideValsJarList != null) {
+					jarList = overrideValsJarList;
+					debug("Jar list was reset to " + overrideValsJarList + " by the override driver values provider"); //$NON-NLS-1$ //$NON-NLS-2$
+				}
+			}
+			if (valsJarList == null && overrideValsJarList == null) {
+				jarList = updatePluginJarList(template);
+				debug("Default jar list from the template is " + jarList); //$NON-NLS-1$
+			}
+
+			props.setProperty(IDriverMgmtConstants.PROP_DEFN_JARLIST, jarList);			
+			props.setProperty(IDriverMgmtConstants.PROP_DEFN_TYPE, template
+					.getId());
+
+			// and add all the template properties
+			IConfigurationElement[] templateprops = template.getProperties();
+			if (props != null && templateprops.length > 0) {
+				for (int i = 0; i < templateprops.length; i++) {
+					IConfigurationElement prop = templateprops[i];
+					String propid = prop.getAttribute("id"); //$NON-NLS-1$
+					String propvalue = prop.getAttribute("value"); //$NON-NLS-1$
+					debug("Default Value of property " + propid + " from the template is " + propvalue); //$NON-NLS-1$ //$NON-NLS-2$
+					boolean removeIt = false;
+					if (driverValsProvider != null) {
+						String valsPropValue = driverValsProvider.createDefaultValue(propid);
+						if (valsPropValue != null) {
+							propvalue = valsPropValue;
+							debug("Value of property " + propid + " was reset to " + valsPropValue + " by the driver values provider"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+						}
+					}
+					if (otds != null && otds.length > 0) {
+						String temp =
+							otds[0].getPropertyValueFromId(propid);
+						if (temp != null && temp.length() > 0) {
+							propvalue = temp;
+							debug("Value of property " + propid + " was reset to " + temp + " by a driver override"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+						}
+						if (otds[0].getPropertyRemoveFlagFromID(propid)) {
+							removeIt = true;
+							debug("Property " + propid + " was removed by a driver override"); //$NON-NLS-1$ //$NON-NLS-2$
+						}
+					}
+					if (overrideDriverValsProvider != null) {
+						String overrideValsPropValue = overrideDriverValsProvider.createDefaultValue(propid);
+						if (overrideValsPropValue != null) {
+							propvalue = overrideValsPropValue;
+							debug("Value of property " + propid + " was reset to " + overrideValsPropValue + " by the override driver values provider"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+						}
+					}
+					if (!removeIt) 
+						props.setProperty(propid, propvalue == null ? new String()
+							: propvalue);
+					else
+						props.remove(propid);
+				}
+			}
+
+			// set the base properties
+			propset.setBaseProperties(props);
+
+			// and set it free!
+			return propset;
+		}
+
+		return null;
+	}
+
+	/**
+	 * Removes the default driver instance of the specified driver template,
+	 * if it is invalid.
+	 * It may also optionally reset the state of having created a default instance to false.
+	 * @param driverTemplateId the id of a driver template type
+	 * @param resetDefaultCreated    true to reset the state of having created 
+	 *         a default instance if it is removed; false to leave the state as is
+	 * @return true if the specified driver template's default driver instance is invalid
+	 *             and successfully removed; false otherwise
+	 * @since 1.7.2
+	 */
+	public boolean removeInvalidDefaultInstance( String driverTemplateId, boolean resetDefaultCreated ) {
+	    if( driverTemplateId == null || driverTemplateId.length() == 0 )
+	        return false;
+	    
+        TemplateDescriptor driverTemplate = 
+            TemplateDescriptor.getDriverTemplateDescriptor( driverTemplateId );
+	    if ( driverTemplate == null  )
+	        return false;
+	    
+	    String defaultDefnName = driverTemplate.getDefaultDefinitionName();
+        if ( defaultDefnName == null || defaultDefnName.length() == 0 )
+            return false;
+	    
+        DriverInstance defaultInstance = getDriverInstanceByName( defaultDefnName );
+        if ( defaultInstance == null  )
+            return false;
+
+        if( new DriverValidator( defaultInstance ).isValid( false ) )
+            return false;   // valid driver instance is not removed
+
+	    boolean isRemoved = removeDriverInstance( defaultInstance.getId() );
+
+	    // reset the state of having previously created a default instance to false
+	    if ( isRemoved && resetDefaultCreated )
+	        setDefaultCreated( driverTemplateId, false );
+
+	    return isRemoved;
+	}
+
+	/**
+	 * Updates the jar list if it contains any [PLUGIN] tags, replacing them
+	 * with the actual path referenced. For instance, the install location in 
+	 * the file system for the given plugin.
+	 * @param template TemplateDescriptor
+	 * @return String Updated jar list
+	 */
+	public String updatePluginJarList(TemplateDescriptor template) {
+		String jarList = template.getJarList();
+
+		if (jarList.indexOf("[") > -1) { //$NON-NLS-1$
+			int index = jarList.indexOf(IDriverMgmtConstants.PATH_DELIMITER, 0);
+			if (index > 0) {
+				// don't do anything, the list is fine and already using the platform-specific delimiter
+			}
+			else {
+				index = jarList.indexOf(IDriverMgmtConstants.PATH_DELIMITER_COMMA, 0);
+				if (index > 0) {
+					// found commas, replace with the platform-specific delimiter
+					jarList = jarList.replace(',', IDriverMgmtConstants.PATH_DELIMITER_CHAR);
+				}
+				else {
+					index = jarList.indexOf(IDriverMgmtConstants.PATH_DELIMITER_SEMICOLON, 0);
+					if (index > 0) {
+						// found semi-colons, replace with the platform-specific delimiter
+						jarList = jarList.replace(';', IDriverMgmtConstants.PATH_DELIMITER_CHAR);
+					}
+				}
+			}
+			index = jarList.indexOf("["); //$NON-NLS-1$
+			while (index > -1) {
+				String toReplace = jarList.substring(index, jarList.indexOf(
+						"]", index) + 1); //$NON-NLS-1$
+				String pluginId = null;
+				if (toReplace.toUpperCase().equals("[PLUGIN]")) { //$NON-NLS-1$
+					pluginId = template.getElement().getContributor().getName();
+				}
+				else {
+					pluginId = toReplace.substring(1, toReplace.length() - 1);
+				}
+				String restOfPath = null;
+				if (jarList.indexOf(IDriverMgmtConstants.PATH_DELIMITER, index) > 0) {
+					restOfPath = jarList
+							.substring(
+									jarList.indexOf("]", index) + 1, jarList.indexOf(IDriverMgmtConstants.PATH_DELIMITER, index)); //$NON-NLS-1$
+				}
+				else if (jarList.indexOf(IDriverMgmtConstants.PATH_DELIMITER_COMMA, index) > 0) {
+					restOfPath = jarList
+							.substring(
+									jarList.indexOf("]", index) + 1, jarList.indexOf(IDriverMgmtConstants.PATH_DELIMITER_COMMA, index)); //$NON-NLS-1$
+				}
+				else if (jarList.indexOf(IDriverMgmtConstants.PATH_DELIMITER_SEMICOLON, index) > 0) {
+					restOfPath = jarList
+							.substring(
+									jarList.indexOf("]", index) + 1, jarList.indexOf(IDriverMgmtConstants.PATH_DELIMITER_SEMICOLON, index)); //$NON-NLS-1$
+				}
+				else {
+					restOfPath = jarList.substring(
+							jarList.indexOf("]", index) + 1, jarList.length()); //$NON-NLS-1$
+				}
+
+				if( Platform.getBundle(pluginId) != null || 
+				        ! ConnectivityPlugin.isRunningOSGiPlatform() ) {
+					IPath path = null;
+					if (restOfPath == null || restOfPath.trim().length() == 0) {
+					    path = PluginResourceLocator.getPluginRootPath( pluginId );
+					}
+					else {
+	                    String entry = File.separator + restOfPath + File.separator;
+	                    path = PluginResourceLocator.getPluginEntryPath( pluginId, entry );
+					}
+
+					if (path != null) {
+					    int totalLength = toReplace.length()
+									+ restOfPath.length();
+					    jarList = jarList.substring(0, index)
+									+ path.toOSString()
+									+ jarList.substring(index + totalLength,
+											jarList.length());
+					}
+					else {
+						String[] strs = new String[] { pluginId + restOfPath};
+						String msg = DriverMgmtMessages.format(
+								"DriverMgmtPlugin.FileMissing", strs);//$NON-NLS-1$
+						System.err.println(msg);
+						ConnectivityPlugin.getDefault().log(msg);
+					}
+				}
+				else {
+					String[] strs = new String[] { pluginId};
+					System.err.println(DriverMgmtMessages.format(
+							"DriverMgmtPlugin.BundleMissing", strs)); //$NON-NLS-1$
+					ConnectivityPlugin.getDefault().log(
+							DriverMgmtMessages.format(
+									"DriverMgmtPlugin.BundleMissing", strs)); //$NON-NLS-1$
+				}
+
+				index = jarList.indexOf(IDriverMgmtConstants.PATH_DELIMITER, index);
+				if (index > 0) {
+					index++;
+					index = jarList.indexOf("[", index); //$NON-NLS-1$
+				}
+			}
+		} else {
+			// no [plugin] references, but let's see if we can clean up the delimiters to be platform-specific
+			int index = jarList.indexOf(IDriverMgmtConstants.PATH_DELIMITER, 0);
+			if (index > 0) {
+				// don't do anything, the list is fine and already using the platform-specific delimiter
+				return jarList;
+			}
+			else {
+				index = jarList.indexOf(IDriverMgmtConstants.PATH_DELIMITER_COMMA, 0);
+				if (index > 0) {
+					// found commas, replace with the platform-specific delimiter
+					jarList = jarList.replace(',', IDriverMgmtConstants.PATH_DELIMITER_CHAR);
+				}
+				else {
+					index = jarList.indexOf(IDriverMgmtConstants.PATH_DELIMITER_SEMICOLON, 0);
+					if (index > 0) {
+						// found semi-colons, replace with the platform-specific delimiter
+						jarList = jarList.replace(';', IDriverMgmtConstants.PATH_DELIMITER_CHAR);
+					}
+				}
+			}
+			
+		}
+
+		return jarList;
+	}
+
+	public static void debug ( String msg ) {
+		if (mDebug)
+			System.out.println("Debug: " + msg); //$NON-NLS-1$
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/DriverMgmtMessages.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/DriverMgmtMessages.java
new file mode 100644
index 0000000..1c09a02
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/DriverMgmtMessages.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.drivers;
+
+import java.text.MessageFormat;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * Utility class which helps managing messages
+ * 
+ * @author brianf
+ */
+public class DriverMgmtMessages {
+
+	// constants
+	private static final String RESOURCE_BUNDLE = "org.eclipse.datatools.connectivity.drivers.messages";//$NON-NLS-1$
+	private static ResourceBundle bundle = ResourceBundle
+			.getBundle(RESOURCE_BUNDLE);
+
+	/**
+	 * Private constructor
+	 */
+	private DriverMgmtMessages() {
+		// prevent instantiation of class
+	}
+
+	/**
+	 * Returns the formatted message for the given key in the resource bundle.
+	 * 
+	 * @param key the resource name
+	 * @param args the message arguments
+	 * @return the string
+	 */
+	public static String format(String key, Object[] args) {
+		return MessageFormat.format(getString(key), args);
+	}
+
+	/**
+	 * Returns the resource object with the given key in the resource bundle. If
+	 * there isn't any value under the given key, the key is returned.
+	 * 
+	 * @param key the resource name
+	 * @return the string
+	 */
+	public static String getString(String key) {
+		try {
+			return bundle.getString(key);
+		}
+		catch (MissingResourceException e) {
+			return key;
+		}
+	}
+
+	/**
+	 * Returns the resource object with the given key in the resource bundle. If
+	 * there isn't any value under the given key, the default value is returned.
+	 * 
+	 * @param key the resource name
+	 * @param def the default value
+	 * @return the string
+	 */
+	public static String getString(String key, String def) {
+		try {
+			return bundle.getString(key);
+		}
+		catch (MissingResourceException e) {
+			return def;
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/DriverMigratorBase.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/DriverMigratorBase.java
new file mode 100644
index 0000000..4301486
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/DriverMigratorBase.java
@@ -0,0 +1,192 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2011 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.drivers;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExecutableExtension;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.drivers.models.TemplateDescriptor;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+
+/**
+ * Base implementation for {@link IDriverMigrator}. Extenders can
+ * override {@link #performMigration(DriverInstance)} to specialize property
+ * migration for their particular driver definitions.
+ * {@link #applyPropertyMigrations(DriverInstance)} is supplied to allow
+ * extenders to take advantage of the declarative property migration
+ * functionality available through propertyMigration elements.
+ * 
+ * This API is provisional.
+ * 
+ * @author brianf
+ * 
+ * Created on October 10, 2007
+ */
+public class DriverMigratorBase implements
+		IDriverMigrator, IExecutableExtension {
+
+	private static final String ELEM_PROPERTY_MIGRATION = "propertyMigration"; //$NON-NLS-1$
+	private static final String ATTR_OLD_PROPERTY_KEY = "oldPropertyKey"; //$NON-NLS-1$
+	private static final String ATTR_NEW_PROPERTY_KEY = "newPropertyKey"; //$NON-NLS-1$
+	private static final String ATTR_NEW_VALUE = "newValue"; //$NON-NLS-1$
+	private static final String ATTR_NEW_DRIVER_TEMPLATE_ID = "newDriverTemplateID"; //$NON-NLS-1$
+
+	private static final String VALUE_ATTRIBUTE = "value"; //$NON-NLS-1$	
+	private static final String ID_ATTRIBUTE = "id"; //$NON-NLS-1$	
+
+	private Map mPropertyMigrations; // oldKey,newKey
+	private Map mDefaults; // newKey,default
+	private String mNewDriverTemplateID;
+
+	/**
+	 * Default constructor
+	 */
+	public DriverMigratorBase() {
+	}
+
+	/**
+	 * Default implementation. Simply invokes
+	 * {@link #applyPropertyMigrations(DriverInstance)}
+	 */
+	public boolean performMigration(DriverInstance driver) {
+		return applyPropertyMigrations(driver);
+	}
+
+	/**
+	 * @return the new driver template ID as specified in the migration element; note,
+	 *         may be the same as the original driver template id
+	 */
+	public final String getNewDriverTemplateID() {
+		return mNewDriverTemplateID;
+	}
+
+	/**
+	 * Applies any property migrations specified through propertyMigration
+	 * elements. These are for simple changes to property keys. For more
+	 * sophisticated migrations, adopters should override
+	 * {@link #performMigration(DriverInstance)}.
+	 * 
+	 * @param profile the profile to apply the changes to
+	 */
+	protected final boolean applyPropertyMigrations(DriverInstance driver) {
+		boolean changed = false;
+		Properties props = driver.getPropertySet().getBaseProperties();
+		if (props == null) {
+			props = new Properties();
+		}
+
+		// rename/delete existing properties
+		for (Iterator it = mPropertyMigrations.entrySet().iterator(); it
+				.hasNext();) {
+			Map.Entry entry = (Map.Entry) it.next();
+			String oldKey = (String) entry.getKey();
+			String newKey = (String) entry.getValue();
+			String value = driver.getNamedPropertyByID(oldKey);
+			props.remove(oldKey);
+			if (newKey != null && value !=null) {
+				props.setProperty(newKey, value);
+				changed = true;
+			}
+		}
+		
+		IConfigurationElement[] properties = 
+			TemplateDescriptor.getDriverTemplateDescriptor(mNewDriverTemplateID).getProperties();
+		for (int i = 0; i < properties.length; i++) {
+			String id = properties[i].getAttribute(ID_ATTRIBUTE);
+			String value = properties[i].getAttribute(VALUE_ATTRIBUTE);
+			if (id != null && id.length() > 0) {
+				if (props.getProperty(id) != null) {
+					String testValue = props.getProperty(id);
+					if (testValue != null && testValue.trim().length() > 0) {
+						continue;
+					}
+				}
+				if (value != null && value.trim().length() > 0) {
+					props.setProperty(id, value);
+				}
+			}
+		}
+
+		driver.getPropertySet().setBaseProperties(props);
+		return changed;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.core.runtime.IExecutableExtension#setInitializationData(org.eclipse.core.runtime.IConfigurationElement,
+	 *      java.lang.String, java.lang.Object)
+	 */
+	public final void setInitializationData(IConfigurationElement config,
+			String propertyName, Object data) throws CoreException {
+		mNewDriverTemplateID = config.getAttribute(ATTR_NEW_DRIVER_TEMPLATE_ID);
+		if (TemplateDescriptor.getDriverTemplateDescriptor(
+				mNewDriverTemplateID) == null) {
+			Status status = new Status(Status.ERROR, ConnectivityPlugin.getSymbolicName(), -1,
+					"migration.error.templateDoesNotExist", null); //$NON-NLS-1$
+			throw new CoreException(status);
+		}
+		parsePropertyMigrations(config);
+	}
+
+	/*
+	 * Parses the property migrations from the extension point
+	 * @param config
+	 * @throws CoreException
+	 */
+	private void parsePropertyMigrations(IConfigurationElement config)
+			throws CoreException {
+		IConfigurationElement[] propertyMigrations = config
+				.getChildren(ELEM_PROPERTY_MIGRATION);
+		mPropertyMigrations = new HashMap(propertyMigrations.length);
+		mDefaults = new HashMap(propertyMigrations.length);
+		if (propertyMigrations == null || propertyMigrations.length == 0) {
+			return;
+		}
+		for (int index = 0, count = propertyMigrations.length; index < count; ++index) {
+			String oldPropertyKey = propertyMigrations[index]
+					.getAttribute(ATTR_OLD_PROPERTY_KEY);
+			if (oldPropertyKey == null || oldPropertyKey.length() == 0) {
+				String newPropertyKey = propertyMigrations[index]
+						.getAttribute(ATTR_NEW_PROPERTY_KEY);
+				if (newPropertyKey == null || newPropertyKey.length() == 0) {
+					Status status = new Status(
+							Status.ERROR,
+							ConnectivityPlugin.getSymbolicName(),
+							-1,
+							ConnectivityPlugin
+									.getDefault()
+									.getResourceString(
+											"migration.error.invalidPropertyMigrationElement"), //$NON-NLS-1$
+							null);
+					throw new CoreException(status);
+				}
+				String value = propertyMigrations[index]
+						.getAttribute(ATTR_NEW_VALUE);
+				if (value != null) {
+					mDefaults.put(newPropertyKey, value);
+				} // else // should we log a warning here?
+			}
+			else {
+				mPropertyMigrations.put(oldPropertyKey,
+						propertyMigrations[index]
+								.getAttribute(ATTR_NEW_PROPERTY_KEY));
+			}
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/DriverValidator.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/DriverValidator.java
new file mode 100644
index 0000000..41536fd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/DriverValidator.java
@@ -0,0 +1,266 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2011 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.drivers;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.datatools.connectivity.drivers.models.OverrideTemplateDescriptor;
+import org.eclipse.datatools.connectivity.drivers.models.TemplateDescriptor;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+
+import com.ibm.icu.util.StringTokenizer;
+
+/**
+ * Validates a driver instance.
+ * 
+ * @author brianf
+ */
+public class DriverValidator {
+
+	// template instance
+	private TemplateDescriptor mTemplate;
+
+	// driver instance
+	private IPropertySet mInstance;
+
+	// Message to pass back
+	private String mMessage;
+
+	/**
+	 * Constructor
+	 * @param template
+	 * @param instance
+	 */
+	public DriverValidator(TemplateDescriptor template, IPropertySet instance) {
+		this.mTemplate = template;
+		this.mInstance = instance;
+	}
+
+	/**
+	 * Driver validator constructor 
+	 * @param driverInstance
+	 */
+	public DriverValidator(DriverInstance driverInstance) {
+		this.mTemplate = driverInstance.getTemplate();
+		this.mInstance = driverInstance.getPropertySet();
+	}
+
+	/**
+	 * Return the error message.
+	 * 
+	 * @return String of error message
+	 */
+	public String getMessage() {
+		return this.mMessage;
+	}
+
+	/**
+	 * Return true/false if the driver instance is valid
+	 * 
+	 * @return boolean true if valid, false otherwise
+	 */
+	public boolean isValid() {
+		return isValid(true);
+	}
+	
+	/**
+	 * Checks for validity and adds markers if flag is set
+	 * @param registerMarkers
+	 * @return
+	 */
+	public boolean isValid ( boolean registerMarkers ) {
+		DriverInstance instance = new DriverInstance(this.mInstance);
+		removeOldProblemMarkers(instance.getName());
+		this.mMessage = null;
+		boolean flag = true;
+		flag = validateJarListFiles();
+		if (flag)
+			flag = validateProperties();
+		if (!flag && registerMarkers)
+			addProblemMarker(instance.getName(), getMessage());
+		return flag;
+	}
+
+	/*
+	 * Validate the properties
+	 */
+	private boolean validateProperties() {
+		boolean flag = true;
+		DriverInstance instance = new DriverInstance(this.mInstance);
+
+		IConfigurationElement[] templateProps = this.mTemplate.getProperties();
+		for (int i = 0; i < templateProps.length; i++) {
+			IConfigurationElement element = templateProps[i];
+			String id = element.getAttribute("id");//$NON-NLS-1$
+			OverrideTemplateDescriptor[] otds = 
+				OverrideTemplateDescriptor.getByDriverTemplate(this.mTemplate.getId());
+			String name = element.getAttribute("name"); //$NON-NLS-1$
+			if (otds != null && otds.length > 0) {
+				String temp =
+					otds[0].getPropertyNameFromId(id);
+				if (temp != null && temp.length() > 0)
+					name = temp;
+			}
+			String required = element.getAttribute("required"); //$NON-NLS-1$
+			if (otds != null && otds.length > 0) {
+				String temp =
+					otds[0].getPropertyRequiredFromId(id);
+				if (temp != null && temp.length() > 0)
+					required = temp;
+			}
+			boolean propRequired = true;
+			if (required != null && required.equals("false")) //$NON-NLS-1$
+				propRequired = false;
+			String value = instance.getNamedPropertyByID(id);
+			if (otds != null && otds.length > 0) {
+				String temp =
+					otds[0].getPropertyValueFromId(id);
+				if (temp != null && temp.length() > 0)
+					value = temp;
+			}
+			boolean exists = (value != null);
+			boolean notEmpty = false;
+			if (exists)
+				notEmpty = (value.length() > 0);
+			if (propRequired) {
+				if (!(exists && notEmpty)) {
+					flag = false;
+					this.mMessage = DriverMgmtMessages
+							.format(
+									"DriverValidator.msg.missing_required_property", new String[] { name}); //$NON-NLS-1$ 
+					break;
+				}
+			}
+		}
+
+		return flag;
+	}
+
+	/*
+	 * Validate the jar list files
+	 */
+	protected boolean validateJarListFiles() {
+		boolean flag = true;
+
+		boolean emptyJarListIsOK = this.mTemplate.getEmptyJarListIsOKFlag();
+
+		if (emptyJarListIsOK)
+			return flag;
+
+		Properties baseProps = this.mInstance.getBaseProperties();
+
+		if (baseProps != null
+				&& baseProps
+						.getProperty(IDriverMgmtConstants.PROP_DEFN_JARLIST) != null) {
+			String jarList = baseProps
+					.getProperty(IDriverMgmtConstants.PROP_DEFN_JARLIST);
+
+			if (jarList != null) {
+				if (jarList.length() > 0) {
+					String[] jarListArray = parseString(jarList);
+					for (int i = 0; i < jarListArray.length; i++) {
+						String path = jarListArray[i];
+
+						File testFile = new File(path);
+						if (!testFile.exists()) {
+							flag = false;
+							this.mMessage = DriverMgmtMessages
+									.format(
+											"DriverValidator.msg.jarfile_not_found", new String[] { path}); //$NON-NLS-1$
+							break;
+						}
+					}
+				}
+				else {
+					this.mMessage = DriverMgmtMessages
+							.getString("DriverValidator.msg.empty_jar_list"); //$NON-NLS-1$
+					flag = false;
+				}
+			}
+		}
+		else {
+			this.mMessage = DriverMgmtMessages
+					.getString("DriverValidator.msg.empty_jar_list"); //$NON-NLS-1$
+			flag = false;
+		}
+
+		return flag;
+	}
+
+	/*
+	 * Parse the string
+	 */
+	private String[] parseString(String str_list) {
+		StringTokenizer tk = new StringTokenizer(str_list,
+				IDriverMgmtConstants.PATH_DELIMITER);
+		String[] pieces = new String[tk.countTokens()];
+		int index = 0;
+		while (tk.hasMoreTokens())
+			pieces[index++] = tk.nextToken();
+		return pieces;
+	}
+
+	public static void addProblemMarker(String name, String message) {
+	    // maintenance of problem markers is only applicable on OSGi platform
+	    if( ! ConnectivityPlugin.isRunningOSGiPlatform() )
+	        return;
+	    
+		IResource resource = ResourcesPlugin.getWorkspace().getRoot();
+		Map map = new HashMap(3);
+		map.put(IMarker.MESSAGE, ConnectivityPlugin.getDefault().getResourceString(
+				"drivermarker.error", new String[] { name, message})); //$NON-NLS-1$
+		map.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_ERROR));
+		map.put(IMarker.LOCATION, name);
+		map.put(IMarker.TRANSIENT, Boolean.FALSE.toString());
+
+		try {
+			IMarker marker = resource
+					.createMarker("org.eclipse.datatools.connectivity.ui.driverProblem"); //$NON-NLS-1$
+			marker.setAttributes(map);
+		}
+		catch (CoreException e) {
+		}
+	}
+
+	public static void removeOldProblemMarkers(String name) {
+        // maintenance of problem markers is only applicable on OSGi platform
+        if( ! ConnectivityPlugin.isRunningOSGiPlatform() )
+            return;
+        
+		IResource resource = ResourcesPlugin.getWorkspace().getRoot();
+		try {
+			IMarker[] markers = resource.findMarkers(
+					"org.eclipse.datatools.connectivity.ui.driverProblem", true, //$NON-NLS-1$
+					IResource.DEPTH_INFINITE);
+			for (int i = 0; i < markers.length; i++) {
+				if (markers[i].getAttribute(IMarker.LOCATION, new String())
+						.equals(name)) {
+					markers[i].delete();
+				}
+			}
+		}
+		catch (CoreException e) {
+		}
+	}
+	
+	protected boolean isEmptyJarListOK()
+	{
+		return mTemplate.getEmptyJarListIsOKFlag();
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/IDriverInstancePropertyDescriptor.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/IDriverInstancePropertyDescriptor.java
new file mode 100644
index 0000000..d4e1104
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/IDriverInstancePropertyDescriptor.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.drivers;
+
+/**
+ * Interface to be implemented by custom property descriptors
+ * used by the driver framework to edit driver definitions. 
+ * 
+ * @author brianf
+ *
+ */
+public interface IDriverInstancePropertyDescriptor {
+
+	/**
+	 * Provide the driver instance to the property descriptor
+	 * to get any additional information needed.
+	 * @param instance
+	 */
+	void setDriverInstance(DriverInstance instance);
+	
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/IDriverMgmtConstants.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/IDriverMgmtConstants.java
new file mode 100644
index 0000000..e607048
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/IDriverMgmtConstants.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.drivers;
+
+import java.io.File;
+
+/**
+ * This file contains some constants used by the driver management code.
+ * 
+ * @author brianf
+ */
+public interface IDriverMgmtConstants {
+
+	// base name of the driver management file
+	public static final String DRIVER_FILE = "driverStorage.xml"; //$NON-NLS-1$
+
+	// property prefix
+	public static final String PROP_PREFIX = "org.eclipse.datatools.connectivity.drivers.";//$NON-NLS-1$
+
+	// standard jar list delimiter
+	public static final String PATH_DELIMITER_COMMA = ","; //$NON-NLS-1$
+	public static final String PATH_DELIMITER_SEMICOLON = ";"; //$NON-NLS-1$
+	public static final String PATH_DELIMITER = "" + File.pathSeparatorChar; //$NON-NLS-1$
+	public static final char PATH_DELIMITER_CHAR = File.pathSeparatorChar;
+
+	// jar list, class, and template type
+	public static final String PROP_DEFN_JARLIST = "jarList"; //$NON-NLS-1$
+	public static final String PROP_DEFN_CLASS = PROP_PREFIX
+			+ "defnDriverClass"; //$NON-NLS-1$
+	public static final String PROP_DEFN_TYPE = PROP_PREFIX + "defnType"; //$NON-NLS-1$
+//	public static final String DRIVER_VALUES = "DRIVER_VALUES";
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/IDriverMigrator.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/IDriverMigrator.java
new file mode 100644
index 0000000..e796a46
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/IDriverMigrator.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.drivers;
+
+
+/**
+ * Interface used by the driver framework which allows providers to
+ * hook into driver loading for migration purposes. Extenders may use this
+ * facility to update existing driver definitions to conform with updated driver
+ * implementations.
+ * 
+ * This interface should not be directly implemented.  Instead, adopters should
+ * extend {@link DriverMigratorBase}.
+ * 
+ * This API is provisional.
+ * 
+ * @author brianf
+ * 
+ * Created on October 10, 2007
+ */
+public interface IDriverMigrator {
+
+	/**
+	 * This method is invoked by the framework when a connection profile of the
+	 * migration extension's sourceProfile type has been loaded. At this point,
+	 * only the profile's provider ID has been updated (to the value in
+	 * targetProfile).
+	 * 
+	 * @param profile the connection profile to migrate.
+	 */
+	public boolean performMigration(DriverInstance driver);
+
+	/**
+	 * @return the ID of the new provider; null if the provider has not changed.
+	 */
+	public String getNewDriverTemplateID();
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/IDriverValuesProvider.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/IDriverValuesProvider.java
new file mode 100644
index 0000000..2c9048f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/IDriverValuesProvider.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.drivers;
+
+import org.eclipse.datatools.connectivity.drivers.models.TemplateDescriptor;
+
+public interface IDriverValuesProvider {
+	
+	/* 
+	 * If overriding specific main attributes of a driver template,
+	 * use one of the following constants. If the value key coming in
+	 * is not one of the known keys, it will look for it in the 
+	 * properties for the driver template.
+	 */
+	public static String VALUE_NAME = "name"; //$NON-NLS-1$
+	public static String VALUE_JARLIST = "jarList"; //$NON-NLS-1$
+	public static String VALUE_CREATE_DEFAULT = "createDefault"; //$NON-NLS-1$
+	public static String VALUE_DEFAULT_DEFINITION_NAME = "defaultDefinitionName"; //$NON-NLS-1$
+	
+	public String createDefaultValue(String key);
+	
+	public void setDriverTemplate ( TemplateDescriptor template );
+	
+	public TemplateDescriptor getDriverTemplate ( );
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/IPropertySet.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/IPropertySet.java
new file mode 100644
index 0000000..3b8a298
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/IPropertySet.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.drivers;
+
+import java.util.Properties;
+
+/**
+ * Interface for a property set object.
+ * 
+ * @author brianf
+ */
+public interface IPropertySet {
+
+	// Getter and setter for the property set ID
+	public String getID();
+
+	public void setID(String id);
+
+	// Getter and setter for the property set name
+	public String getName();
+
+	public void setName(String newName);
+
+	// Getter and setter for the property set base properties
+	public Properties getBaseProperties();
+
+	public void setBaseProperties(Properties props);
+
+	// Getter and setter for general properties
+	public Properties getProperties(String type);
+
+	public void setProperties(String type, Properties props);
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/PropertySetImpl.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/PropertySetImpl.java
new file mode 100644
index 0000000..4c5a0a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/PropertySetImpl.java
@@ -0,0 +1,149 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.drivers;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * Implementation class of the property set
+ * 
+ * @author brianf
+ */
+public class PropertySetImpl implements IPropertySet {
+
+	// Properties for the property set
+	private Map mPropertiesMap;
+
+	// Name for the property set
+	private String mName;
+
+	// ID for the property set
+	private String mID;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param name
+	 * @param id
+	 */
+	public PropertySetImpl(String name, String id) {
+		this.mName = name;
+		this.mID = id;
+		this.mPropertiesMap = new HashMap();
+	}
+
+	/**
+	 * Returns the name of the property set
+	 */
+	public String getName() {
+		return this.mName;
+	}
+
+	/**
+	 * Sets the name of the property set
+	 */
+	public void setName(String newName) {
+		this.mName = newName;
+	}
+
+	/**
+	 * Returns the id of the property set
+	 */
+	public String getID() {
+		return this.mID;
+	}
+
+	/**
+	 * Sets the id of the property set
+	 */
+	public void setID(String id) {
+		// reset the key for the base properties if we change
+		// the id
+		if (getProperties(this.mID) != null) {
+			Properties temp = getProperties(this.mID);
+			this.mPropertiesMap.remove(getProperties(this.mID));
+			setProperties(id, temp);
+		}
+		this.mID = id;
+	}
+
+	/**
+	 * Returns the base properties of the property set
+	 */
+	public Properties getBaseProperties() {
+		return getProperties(this.mID);
+	}
+
+	/**
+	 * Sets the base properties of the property set
+	 */
+	public void setBaseProperties(Properties props) {
+		setProperties(this.mID, props);
+	}
+
+	/**
+	 * Gets general properties of the property set
+	 */
+	public Properties getProperties(String type) {
+		return (Properties) this.mPropertiesMap.get(type);
+	}
+
+	/**
+	 * Sets general properties of the property set
+	 */
+	public void setProperties(String type, Properties props) {
+		this.mPropertiesMap.put(type, props);
+	}
+
+	/**
+	 * Clones the property set and returns the clone object.
+	 */
+	public Object clone() {
+		Properties cloneProps = (Properties) getBaseProperties().clone();
+
+		PropertySetImpl cloned = new PropertySetImpl(this.mName, this.mID);
+		cloned.setBaseProperties(cloneProps);
+
+		return cloned;
+	}
+
+	public boolean equals(Object obj) {
+		if (obj instanceof PropertySetImpl) {
+			PropertySetImpl compare = (PropertySetImpl) obj;
+			return this.mID.equals(compare.getID());
+		}
+		return super.equals(obj);
+	}
+
+	public int hashCode() {
+		if (this.mID != null)
+			return this.mID.hashCode();
+		return super.hashCode();
+	}
+
+	public String toString() {
+		StringBuffer buffer = new StringBuffer();
+		buffer.append("ID: " + mID + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
+		buffer.append("Name: " + mName + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
+		Properties props = getBaseProperties();
+		Iterator iter = props.entrySet().iterator();
+		while (iter.hasNext()) {
+			Map.Entry entry = (Map.Entry) iter.next();
+			buffer.append("Property name: " + (String)entry.getKey() + ", "); //$NON-NLS-1$ //$NON-NLS-2$
+			buffer.append("Property value: " + (String) entry.getValue() + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		return buffer.toString();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/XMLFileManager.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/XMLFileManager.java
new file mode 100644
index 0000000..0c05009
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/XMLFileManager.java
@@ -0,0 +1,340 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2011 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.drivers;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Properties;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+import com.ibm.icu.util.StringTokenizer;
+
+/**
+ * Basic XML file manager
+ * 
+ * @author brianf
+ */
+public class XMLFileManager {
+
+	// default file name
+	private final static String FILENAME = "PropertySets.xml"; //$NON-NLS-1$
+
+	// Basic properties
+	private final static String ROOTNAME = "DataTools.PropertySets"; //$NON-NLS-1$
+	private final static String CHILDNAME = "propertySet"; //$NON-NLS-1$
+	private final static String PROPSETNAME = "name"; //$NON-NLS-1$
+	private final static String PROPSETID = "iD"; //$NON-NLS-1$
+	private final static String PROPSETKEYS = "keys"; //$NON-NLS-1$
+
+	// prefix for property names
+	private final static String PROPPREFIX = "prop_"; //$NON-NLS-1$
+
+	// delimiter for property name list
+	private final static String PROPDELIM = " "; //$NON-NLS-1$
+
+	// storage path
+	private static IPath storageLocation = null;
+
+	// file name
+	private static String mFileName = null;
+
+	private static DocumentBuilderFactory documentBuilderFactory = null;
+	private static DocumentBuilder documentBuilder = null;
+	private static TransformerFactory transFactory = null;
+	private static Transformer transformer = null;
+
+	/**
+	 * Constructor
+	 */
+	public XMLFileManager() {
+		mFileName = FILENAME;
+	}
+
+	/**
+	 * Convert an Enumeration to a space-separated String
+	 * 
+	 * @param enu
+	 * @return
+	 */
+	private static String keysToString(Enumeration enu) {
+		StringBuffer keys = new StringBuffer();
+		while (enu.hasMoreElements()) {
+			keys.append((String) enu.nextElement() + " "); //$NON-NLS-1$
+		}
+		return keys.toString();
+	}
+
+	/**
+	 * Convert a String to a Properties object
+	 * 
+	 * @param elem
+	 * @return
+	 */
+	private static Properties keysToProperties(Element elem) {
+		Properties props = new Properties();
+		String keys = elem.getAttribute(PROPSETKEYS), key, value;
+		StringTokenizer st = new StringTokenizer(keys, PROPDELIM);
+		while (st.hasMoreTokens()) {
+			key = st.nextToken();
+			value = elem.getAttribute(PROPPREFIX + key);
+			props.put(key, value);
+		}
+		return props;
+	}
+
+
+	/**
+	 * Save property sets
+	 * 
+	 * @param pss To be saved property sets
+	 * @throws IOException
+	 */
+	public static synchronized void saveNamedPropertySet(IPropertySet[] pss)
+		throws CoreException 
+	{
+		try {
+		    DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
+		    documentBuilderFactory.setNamespaceAware(true);
+		    DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
+		    Document document = documentBuilder.newDocument();
+		    Element rootElement = document.createElement(ROOTNAME);
+		    document.appendChild(rootElement);
+		    Element child = null;
+			IPath path = getStorageLocation();
+			path = path.append(mFileName);
+			File file = path.toFile();
+			if (!file.exists())
+				file.createNewFile();
+			OutputStream outs = new FileOutputStream(file);
+			Writer writer = null;
+			IPropertySet ps;
+			try {
+				OutputStreamWriter outw = new OutputStreamWriter(outs, "UTF-8"); //$NON-NLS-1$
+				writer = new BufferedWriter(outw);
+				for (int i = 0; i < pss.length; i++) {
+					ps = pss[i];
+					if (ps == null) continue;
+					child = document.createElement(CHILDNAME);
+					child.setAttribute(PROPSETNAME, ps.getName());
+					child.setAttribute(PROPSETID, ps.getID());
+					Properties props = ps.getBaseProperties();
+					String keys = keysToString(props.keys());
+					child.setAttribute(PROPSETKEYS, keys);
+					String key, value;
+					for (Enumeration enu = props.propertyNames(); enu
+							.hasMoreElements();) {
+						key = (String) enu.nextElement();
+						value = props.getProperty(key);
+						child.setAttribute(PROPPREFIX + key, value);
+					}
+					rootElement.appendChild(child);
+				}
+				DOMSource source = new DOMSource(document);
+		        StreamResult result = new StreamResult(outw);
+		
+		        getTransformer().transform(source, result);	
+			}
+			finally {
+				if (writer != null) {
+					writer.close();
+				}
+				if (outs != null) {
+					outs.close();
+				}
+			}
+		} catch (IOException e) {
+			throw new CoreException(new Status(Status.ERROR, ConnectivityPlugin.PLUGIN_ID, -1, 
+					ConnectivityPlugin.getDefault().getResourceString("error.savedriversxml"), e));//$NON-NLS-1$
+		} catch (TransformerException e) {
+			throw new CoreException(new Status(Status.ERROR, ConnectivityPlugin.PLUGIN_ID, -1, 
+					ConnectivityPlugin.getDefault().getResourceString("error.savedriversxml"), e));//$NON-NLS-1$
+		} catch (ParserConfigurationException e) {
+			throw new CoreException(new Status(Status.ERROR, ConnectivityPlugin.PLUGIN_ID, -1, 
+					ConnectivityPlugin.getDefault().getResourceString("error.savedriversxml"), e));//$NON-NLS-1$
+		}
+	}
+
+	/**
+	 * Load all property sets from storage
+	 * 
+	 * @return property sets
+	 * @throws IOException
+	 */
+	public static synchronized IPropertySet[] loadPropertySets() throws CoreException 
+	{
+		InputStream fis = null;
+		try {
+			IPath path = getStorageLocation();
+			path = path.append(mFileName);
+			File file = path.toFile();
+			if (!file.exists())
+				return new IPropertySet[0];
+			
+			fis = new FileInputStream(file);
+			InputSource source = new InputSource(fis);
+			source.setEncoding("UTF-8"); //$NON-NLS-1$
+		    Document document = getDocumentBuilder().parse(source);
+			IPropertySet ps;
+			ArrayList pss = new ArrayList();
+		    NodeList nl = document.getElementsByTagName(CHILDNAME);
+			for (int i = 0; i < nl.getLength(); i++) {
+				Node node = nl.item(i);
+				if (node instanceof Element) {
+					Element elem = (Element) node;
+					String name = elem.getAttribute(PROPSETNAME);
+					String id = elem.getAttribute(PROPSETID);
+					Properties props = keysToProperties(elem);
+					ps = new PropertySetImpl(name, id);
+					ps.setBaseProperties(props);
+					pss.add(ps);
+				}
+			}
+			if (fis != null) { 
+				try {
+					fis.close();
+				} catch (IOException e) {
+					throw new CoreException(new Status(Status.ERROR, ConnectivityPlugin.PLUGIN_ID, -1, 
+							ConnectivityPlugin.getDefault().getResourceString("error.loaddriversxml"), e));//$NON-NLS-1$
+				}
+			}				
+			return (IPropertySet[]) pss.toArray(new IPropertySet[0]);
+		} catch (IOException e) {
+			throw new CoreException(new Status(Status.ERROR, ConnectivityPlugin.PLUGIN_ID, -1, 
+					ConnectivityPlugin.getDefault().getResourceString("error.loaddriversxml"), e));//$NON-NLS-1$
+		} catch (SAXException e) {
+			throw new CoreException(new Status(Status.ERROR, ConnectivityPlugin.PLUGIN_ID, -1, 
+					ConnectivityPlugin.getDefault().getResourceString("error.loaddriversxml"), e));//$NON-NLS-1$
+		} finally {
+			if (fis != null) {
+				try {
+					fis.close();
+				} catch (IOException e) {
+					throw new CoreException(new Status(Status.ERROR, ConnectivityPlugin.PLUGIN_ID, -1, 
+							ConnectivityPlugin.getDefault().getResourceString("error.loaddriversxml"), e));//$NON-NLS-1$
+				}
+			}
+		}
+	}
+
+
+	/**
+	 * Get property set storage location
+	 * 
+	 * @return location of the connection profiles
+	 */
+	public static IPath getStorageLocation() {
+		if (storageLocation == null)
+			return ConnectivityPlugin.getStorageLocation();
+		return storageLocation;
+	}
+
+	/**
+	 * Set property set storage location
+	 * 
+	 * @param location where connection profiles storage is put
+	 */
+	public static void setStorageLocation(IPath location) {
+		storageLocation = location;
+	}
+
+	/**
+	 * Return the file name
+	 * 
+	 * @return String
+	 */
+	public static String getFileName() {
+		return mFileName;
+	}
+
+	/**
+	 * Set the file name
+	 * @param name
+	 */
+	public static void setFileName(String name) {
+		mFileName = name;
+	}
+
+	/**
+	 * Returns date last the file was last modified
+	 * @return String
+	 */
+	public static String getFileDateTimeStamp() {
+		IPath path = getStorageLocation();
+		path = path.append(mFileName);
+		File file = path.toFile();
+		if (!file.exists())
+			return null;
+		Long modified = new Long(file.lastModified());
+		return modified.toString();
+	}
+	
+	/**
+	 * Internal method to get a handle to an XML document builder.
+	 * @return
+	 */
+	private static DocumentBuilder getDocumentBuilder() {
+		if (documentBuilder == null) {
+		    documentBuilderFactory = DocumentBuilderFactory.newInstance();
+		    documentBuilderFactory.setNamespaceAware(true);
+		    try {
+				documentBuilder = documentBuilderFactory.newDocumentBuilder();
+			} catch (ParserConfigurationException e) {
+				ConnectivityPlugin.getDefault().log(e);
+			}
+		}
+		return documentBuilder;
+	}
+	
+	/**
+	 * Internal method to get a handle to an XML document transformer.
+	 * @return
+	 */
+	private static Transformer getTransformer() {
+		if (transformer == null) {
+            transFactory = TransformerFactory.newInstance();
+            try {
+            	transformer = transFactory.newTransformer();
+            } catch (TransformerConfigurationException e ) {
+            	ConnectivityPlugin.getDefault().log(e);
+            }
+		}
+		return transformer;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/jdbc/IJDBCConnectionProfileConstants.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/jdbc/IJDBCConnectionProfileConstants.java
new file mode 100644
index 0000000..6b9027e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/jdbc/IJDBCConnectionProfileConstants.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2010 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ *      IBM Corporation - migrated to new wizard framework
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.drivers.jdbc;
+
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
+
+/**
+ * Constant definitions for property keys used to identify DB connection profile
+ * properties.
+ */
+public interface IJDBCConnectionProfileConstants extends IJDBCDriverDefinitionConstants {
+	/**
+	 * The connection profile ID for the generic DB connection profile type.
+	 */
+	public static final String CONNECTION_PROFILE_ID = "org.eclipse.datatools.connectivity.db.generic.connectionProfile"; //$NON-NLS-1$
+
+	/**
+	 * The property page ID for the generic DB connection properties.
+	 */
+	public static final String CONNECTION_PROPERTY_PAGE_ID = "org.eclipse.datatools.connectivity.db.generic.profileProperties"; //$NON-NLS-1$
+
+	/**
+	 * Property used to store JDBC connection properties (i.e. properties passed
+	 * as a <code>Properties</code> object to <code>java.sql.Driver.connect()</code>).
+	 */
+	public static final String CONNECTION_PROPERTIES_PROP_ID = PROP_PREFIX + "connectionProperties"; //$NON-NLS-1$
+
+	/**
+	 * Property used to store the persistence setting for the password.  A value
+	 * of true indicates the password will be persisted within the workspace.
+	 */
+	public static final String SAVE_PASSWORD_PROP_ID = PROP_PREFIX + "savePWD"; //$NON-NLS-1$
+
+	   /**
+     * Property used to store the default schema.  This property is used
+     * the generic DB connection profile wizard during initialization.  This
+     * property is also used by the DB connection profile.
+     */
+    public static final String DEFAULT_SCHEMA_PROP_ID = PROP_PREFIX + "defaultSchema"; //$NON-NLS-1$
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/jdbc/IJDBCDriverDefinitionConstants.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/jdbc/IJDBCDriverDefinitionConstants.java
new file mode 100644
index 0000000..9ef66d3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/jdbc/IJDBCDriverDefinitionConstants.java
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.drivers.jdbc;
+
+/**
+ * Constant definitions for property keys used to identify DB driver definition
+ * properties.
+ */
+public interface IJDBCDriverDefinitionConstants {
+	/**
+	 * Base category ID for DB driver definitions.
+	 */
+	public static final String DATABASE_CATEGORY_ID = "org.eclipse.datatools.connectivity.db.driverCategory"; //$NON-NLS-1$
+
+	/**
+	 * Property prefix used for property keys
+	 */
+	public static final String PROP_PREFIX = "org.eclipse.datatools.connectivity.db."; //$NON-NLS-1$
+
+	/**
+	 * Property used to store the DB vendor name.  This property is used in
+	 * resolving the dbdefinition referenced by the driver.
+	 */
+	public static final String DATABASE_VENDOR_PROP_ID = PROP_PREFIX + "vendor"; //$NON-NLS-1$
+
+	/**
+	 * Property used to store the DB version.  This property is used in
+	 * resolving the dbdefinition referenced by the driver.
+	 */
+	public static final String DATABASE_VERSION_PROP_ID = PROP_PREFIX + "version"; //$NON-NLS-1$
+	
+	/**
+	 * Property used to store the driver class name.  This property is used in
+	 * creating JDBC connections.
+	 */
+	public static final String DRIVER_CLASS_PROP_ID = PROP_PREFIX + "driverClass"; //$NON-NLS-1$
+
+	/**
+	 * Property used to store the default DB name value.  This property is used
+	 * by the generic DB connection profile wizard during initialization.  This
+	 * property is also used by the DB connection profile.
+	 */
+	public static final String DATABASE_NAME_PROP_ID = PROP_PREFIX + "databaseName"; //$NON-NLS-1$
+
+	/**
+	 * Property used to store the default connection URL.  This property is used
+	 * the generic DB connection profile wizard during initialization.  This
+	 * property is also used by the DB connection profile.
+	 */
+	public static final String URL_PROP_ID = PROP_PREFIX + "URL"; //$NON-NLS-1$
+	
+	/**
+	 * Property used to store the default user name.  This property is used
+	 * the generic DB connection profile wizard during initialization.  This
+	 * property is also used by the DB connection profile.
+	 */
+	public static final String USERNAME_PROP_ID = PROP_PREFIX + "username"; //$NON-NLS-1$
+	
+	/**
+	 * Property used to store the default password.  This property is used
+	 * the generic DB connection profile wizard during initialization.  This
+	 * property is also used by the DB connection profile.
+	 */
+	public static final String PASSWORD_PROP_ID = PROP_PREFIX + "password"; //$NON-NLS-1$
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/jdbc/JDBCConnection.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/jdbc/JDBCConnection.java
new file mode 100644
index 0000000..1212a8f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/jdbc/JDBCConnection.java
@@ -0,0 +1,420 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2014 Sybase, Inc. and others
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ *      IBM Corporation - migrated to new wizard framework
+ *      Actuate Corporation - fix for Bugzilla 305757, 406521, 423976
+ *      
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.drivers.jdbc;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.Driver;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Properties;
+import java.util.StringTokenizer;
+
+import org.eclipse.datatools.connectivity.DriverConnectionBase;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.Version;
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.drivers.DriverMgmtMessages;
+import org.eclipse.datatools.connectivity.drivers.DriverValidator;
+import org.eclipse.datatools.connectivity.drivers.IDriverMgmtConstants;
+import org.eclipse.datatools.connectivity.internal.ClassLoaderCacheManager;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+
+/**
+ * NON-API
+ * 
+ * IConnection implementation for <code>java.sql.Connection</code> objects.
+ * This object is responsible for openening and closing JDBC connections.
+ * 
+ * The property keys specified in
+ * <code>org.eclipse.datatools.connectivity.db.generic.IDBConnectionProfileConstants</code>
+ * are used to create the connection.
+ * 
+ * Version information is provided by using <code>java.sql.DatabaseMetaData</code>.
+ */
+public class JDBCConnection extends DriverConnectionBase {
+
+	public static final String TECHNOLOGY_ROOT_KEY = "jdbc"; //$NON-NLS-1$
+	public static final String TECHNOLOGY_NAME = ConnectivityPlugin.getDefault()
+			.getResourceString("JDBCConnection.technologyName"); //$NON-NLS-1$
+	public static final String PROPS_DELIMITER = ",";  //$NON-NLS-1$
+	public static final String NAME_VALUE_EQUALS = "=";      //$NON-NLS-1$
+
+	private Version mTechVersion = Version.NULL_VERSION;
+	private Version mServerVersion = Version.NULL_VERSION;
+	private String mServerName;	
+	private boolean mHasDriverDefn = true;
+    private URL[] m_jdbcJars;
+
+	public JDBCConnection(IConnectionProfile profile, Class factoryClass) {
+		super(profile, factoryClass);
+
+        URL[] jdbcJars = getJdbcDriverJars( profile );
+        if( jdbcJars != null && jdbcJars.length > 0 )
+            m_jdbcJars = jdbcJars;
+	}
+
+	public void open() {
+		if (mConnection != null) {
+			close();
+		}
+
+		mConnection = null;
+		mConnectException = null;
+
+		boolean hasDriver = false;
+		try {
+		    DriverInstance di = getDriverDefinition();
+			if (di != null) {
+                // if the driver definition's properties are invalid, cannot use
+                DriverValidator validator = new DriverValidator( di );
+                if ( ! validator.isValid(false) ) {
+                    // force skip to processing in the catch exception block, which would use 
+                    // the profile's driver properties instead
+                    String causeMsgId = "DriverConnectionBase.error.driverDefinitionNotFound"; //$NON-NLS-1$
+                    throw new Exception( validator.getMessage(),
+                                        new Throwable( causeMsgId ) );
+                }
+                    
+                // the driver definition's jarList and required properties exist
+				hasDriver = true;
+				super.open();
+			}
+		} catch (Exception e) {
+            String exceptionCauseMsg = e.getCause() != null ? e.getCause().getMessage() : null;
+            if (exceptionCauseMsg != null &&
+                   (exceptionCauseMsg.equalsIgnoreCase( "DriverConnectionBase.error.driverDefinitionNotSpecified" ) || //$NON-NLS-1$
+                    exceptionCauseMsg.equalsIgnoreCase( "DriverConnectionBase.error.driverDefinitionNotFound" ) )) //$NON-NLS-1$
+			{
+				if (profileHasDriverDetails()) {
+					mHasDriverDefn = false;
+                    ConnectivityPlugin.getDefault().logInfo( 
+                            ConnectivityPlugin.getDefault().getResourceString(
+                                    "JDBCConnection.invalidDriverDefinition", //$NON-NLS-1$
+                                    new Object[] { e.getLocalizedMessage(), getDriverDefinitionId() } ));
+				}
+				else {
+					e.printStackTrace();
+				}
+			}
+			else
+				e.printStackTrace();
+		}
+		
+		if (!hasDriver)
+			internalCreateConnection();
+
+		// cache the connection's class loader, if appropriate, for re-use in subsequent call to #open
+        cacheConnectionClassLoader( getRawConnection() );
+	}
+	
+	public String[] getJarListAsArray(String jarList) {
+		if (jarList != null) {
+			if (jarList.length() == 0)
+				return new String[0];
+			String[] paths = parseString(jarList,
+					IDriverMgmtConstants.PATH_DELIMITER);
+			return paths;
+		}
+		return null;
+	}
+	
+	public ClassLoader createClassLoader(ClassLoader parentCL) throws Exception {
+		Properties props = getConnectionProfile().getBaseProperties();
+		String jarList = 
+			props.getProperty(IDriverMgmtConstants.PROP_DEFN_JARLIST);
+		if ((jarList == null || jarList.trim().length() == 0)) {
+			throw new Exception(
+					DriverMgmtMessages.getString("DriverInstance.error.jarListNotDefined")); //$NON-NLS-1$
+		}
+
+		String[] jarStrings = getJarListAsArray(jarList);
+		URL[] jars = new URL[jarStrings.length];
+		for (int index = 0, count = jars.length; index < count; ++index) {
+			try {
+				jars[index] = new File(jarStrings[index]).toURL();
+			}
+			catch (MalformedURLException e) {
+				throw new Exception(DriverMgmtMessages.getString("DriverInstance.error.invalidClassPath"), e); //$NON-NLS-1$
+			}
+		}
+		if (parentCL == null) {
+			return URLClassLoader.newInstance(jars);
+		}
+		return URLClassLoader.newInstance(jars, parentCL);
+	}
+
+	protected URL[] getJdbcDriverJars()
+	{
+	    return this.m_jdbcJars;
+	}
+
+	protected URL[] getJdbcDriverJars( IConnectionProfile profile ) {
+        // first try get valid jar list defined in the referenced driver definition
+        String[] connJarArray = getDriverDefinitionJarPaths( true );
+
+        // if none available from driver definition, get the jar list from the profile's properties
+        if( connJarArray == null || connJarArray.length == 0 ) {
+            if( profile == null )
+                return null;   // no jar list available
+
+            String profileJarList = 
+                profile.getBaseProperties().getProperty( IDriverMgmtConstants.PROP_DEFN_JARLIST );
+            connJarArray = getJarListAsArray( profileJarList );  // convert to an array
+
+            if( connJarArray == null || connJarArray.length == 0 )
+                return null;   // no jar list specified
+        }
+        
+        // convert jar paths to URLs
+        ArrayList<URL> jdbcJarURLs = new ArrayList<URL>(connJarArray.length);
+        for( int i=0; i < connJarArray.length; ++i ) {
+            String jarPath = connJarArray[i];       
+            try {
+                URL jarPathURL = new File(jarPath).toURL();
+                jdbcJarURLs.add( jarPathURL );
+            }
+            catch( MalformedURLException ex ) {
+                // ignore this invalid jar path
+                continue;
+            }
+        }
+        return jdbcJarURLs.toArray( new URL[jdbcJarURLs.size()] );
+    }
+
+    protected String[] getDriverDefinitionJarPaths() {
+        return getDriverDefinitionJarPaths( false );
+    }
+    
+    private String[] getDriverDefinitionJarPaths( boolean validateDriver ) {
+        DriverInstance driver;
+        try {
+            driver = getDriverDefinition();
+        }
+        catch( Exception ex ) {
+            return null;
+        }
+        if( driver == null )
+            return null;
+        
+        // validate the driver definition's jarList and required properties exist
+        if( validateDriver ) {
+            if( ! new DriverValidator( driver ).isValid( false ) )           
+                return null;    // the driver definition is invalid, cannot use its jarList            
+        }
+
+        return driver.getJarListAsArray();
+    }
+
+	private void internalCreateConnection() {
+		try {
+			ClassLoader parentCL = getParentClassLoader();
+			ClassLoader driverCL = createClassLoader(parentCL);
+			
+			mConnection = createConnection(driverCL);
+
+			if (mConnection == null) {
+				// Connect attempt failed without throwing an exception.
+				// We'll generate one for them.
+				throw new Exception(ConnectivityPlugin.getDefault().getResourceString("DriverConnectionBase.error.unknown")); //$NON-NLS-1$
+			}
+
+			initVersions();
+			updateVersionCache();
+		}
+		catch (Throwable t) {
+			mConnectException = t;
+			clearVersionCache();
+		}
+	}
+
+    @Override
+    protected ClassLoader getParentClassLoader()
+    {
+        ClassLoader parentClassLoader = 
+                ClassLoaderCacheManager.getInstance().getDriverClassLoader( m_jdbcJars );
+        ClassLoaderCacheManager.getInstance().setIsActive( true );
+        return parentClassLoader != null ? parentClassLoader : super.getParentClassLoader();
+    }
+    
+    protected void cacheConnectionClassLoader( Object sqlConnection )
+    {
+        if( sqlConnection == null )   // not connected yet, no class loader to cache
+            return;
+
+        // if this implementation of #getParentClassLoader is inactive, or has existing parentClassLoader
+        // no need to cache the connection's class loader for re-use in subsequent call to #open
+        if( ! ClassLoaderCacheManager.getInstance().isActive() || getParentClassLoader() != null )
+            return;
+        
+        ClassLoader jdbcDriverCL = sqlConnection.getClass().getClassLoader();
+        if( jdbcDriverCL instanceof URLClassLoader )
+        {
+            ClassLoaderCacheManager.getInstance().addURLClassLoader( (URLClassLoader)jdbcDriverCL );
+        }
+    }
+
+	private boolean profileHasDriverDetails() {
+		Properties props = getConnectionProfile().getBaseProperties();
+		String driverClass = 
+			props.getProperty(IJDBCConnectionProfileConstants.DRIVER_CLASS_PROP_ID);
+		String jarList = 
+			props.getProperty(IDriverMgmtConstants.PROP_DEFN_JARLIST);
+		if (driverClass != null && jarList != null) {
+			return true;
+		}
+		return false;
+	}
+
+	protected Object createConnection(ClassLoader cl) throws Throwable {
+		Properties props = getConnectionProfile().getBaseProperties();
+		Properties connectionProps = new Properties();
+
+//		boolean hasDriver = (getDriverDefinition() != null);
+		String driverClass = null;
+		if (mHasDriverDefn)
+			driverClass = getDriverDefinition().getProperty(
+				IJDBCConnectionProfileConstants.DRIVER_CLASS_PROP_ID);
+		else
+			driverClass = 
+				props.getProperty(IJDBCConnectionProfileConstants.DRIVER_CLASS_PROP_ID);
+		
+		String connectURL = props
+				.getProperty(IJDBCConnectionProfileConstants.URL_PROP_ID);
+		String uid = props
+				.getProperty(IJDBCConnectionProfileConstants.USERNAME_PROP_ID);
+		String pwd = props
+				.getProperty(IJDBCConnectionProfileConstants.PASSWORD_PROP_ID);
+		String nameValuePairs = props
+				.getProperty(IJDBCConnectionProfileConstants.CONNECTION_PROPERTIES_PROP_ID);
+		String propDelim = ",";//$NON-NLS-1$
+
+		if (uid != null) {
+			connectionProps.setProperty("user", uid); //$NON-NLS-1$
+		}
+		if (pwd != null) {
+			connectionProps.setProperty("password", pwd); //$NON-NLS-1$
+		}
+
+		if (nameValuePairs != null && nameValuePairs.length() > 0) {
+			String[] pairs = parseString( nameValuePairs, PROPS_DELIMITER );
+			String addPairs = ""; //$NON-NLS-1$
+			for (int i = 0; i < pairs.length; i++) {
+				String[] namevalue = parseString( pairs[i], NAME_VALUE_EQUALS );
+				connectionProps.setProperty(namevalue[0], namevalue[1]);
+				if (i == 0 || i < pairs.length - 1) {
+					addPairs = addPairs + propDelim;
+				}
+				addPairs = addPairs + pairs[i];
+			}
+		}
+		
+		Driver jdbcDriver = (Driver) cl.loadClass(driverClass).newInstance();
+		return jdbcDriver.connect(connectURL, connectionProps);
+	}
+
+	public void close() {
+		Connection connection = (Connection) getRawConnection();
+		if (connection != null) {
+			try {
+				connection.close();
+			}
+			catch (SQLException e) {
+				// RJC Auto-generated catch block
+				e.printStackTrace();
+			}
+		}
+	}
+
+	public String getProviderName() {
+		return mServerName;
+	}
+
+	public Version getProviderVersion() {
+		return mServerVersion;
+	}
+
+	protected String getTechnologyRootKey() {
+		return TECHNOLOGY_ROOT_KEY;
+	}
+
+	public String getTechnologyName() {
+		return TECHNOLOGY_NAME;
+	}
+
+	public Version getTechnologyVersion() {
+		return mTechVersion;
+	}
+
+	protected void initVersions() {
+		try {
+			DatabaseMetaData dbmd = ((Connection) getRawConnection())
+					.getMetaData();
+			try {
+				mServerName = dbmd.getDatabaseProductName();
+			}
+			catch (Throwable e) {
+			}
+			try {
+				String versionString = dbmd.getDatabaseProductVersion();
+				if (versionString.indexOf('/') > 0) {
+					// Special handling for ASE
+					String versionComps[] = versionString.split("/", 4); //$NON-NLS-1$
+					if (versionComps.length > 2) {
+						versionString = versionComps[1];
+						if (versionComps.length > 3) {
+							versionString += '.' + (versionComps[2]
+									.startsWith("EBF") ? versionComps[2] //$NON-NLS-1$
+									.substring(3).trim() : versionComps[2]);
+						}
+						if (versionComps[0].length() > 0
+								&& !versionComps[0].equals(mServerName)) {
+							// Special case for ASIQ
+							mServerName = versionComps[0];
+						}
+					}
+				}
+				mServerVersion = Version.valueOf(versionString);
+			}
+			catch (Throwable e) {
+			}
+			try {
+				mTechVersion = new Version(dbmd.getJDBCMajorVersion(), dbmd
+						.getJDBCMinorVersion(), 0, new String());
+			}
+			catch (Throwable e) {
+			}
+		}
+		catch (SQLException e) {
+		}
+	}
+
+	/**
+	 * @param str_list
+	 * @param token
+	 * @return
+	 */
+	protected String[] parseString(String str_list, String token) {
+		StringTokenizer tk = new StringTokenizer(str_list, token);
+		String[] pieces = new String[tk.countTokens()];
+		int index = 0;
+		while (tk.hasMoreTokens())
+			pieces[index++] = tk.nextToken();
+		return pieces;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/jdbc/JDBCConnectionFactory.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/jdbc/JDBCConnectionFactory.java
new file mode 100644
index 0000000..386fad4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/jdbc/JDBCConnectionFactory.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ *      IBM Corporation - migrated to new wizard framework
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.drivers.jdbc;
+
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionFactory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+
+/**
+ * <code>org.eclipse.datatools.connectivity.IConnectionFactory</code> for
+ * creating <code>java.sql.Connection</code> connections.
+ * 
+ * To use this class in a custom DB connection profile, you must make sure your
+ * profile contains the following properties from
+ * <code>org.eclipse.datatools.connectivity.db.generic.IDBConnectionProfileConstants</code>:
+ * DRIVER_CLASS_PROP_ID, URL_PROP_ID, as well as
+ * <code>org.eclipse.datatools.connectivity.ConnectionProfileConstants.PROP_DRIVER_DEFINITION_ID</code>.
+ * 
+ * The following properties from
+ * <code>org.eclipse.datatools.connectivity.db.generic.IDBConnectionProfileConstants</code>
+ * are optional: USERNAME_PROP_ID, PASSWORD_PROP_ID,
+ * CONNECTION_PROPERTIES_PROP_ID
+ * 
+ * @author rcernich
+ * 
+ * Created on Oct 17, 2005
+ */
+public class JDBCConnectionFactory implements IConnectionFactory {
+
+	/**
+	 * 
+	 */
+	public JDBCConnectionFactory() {
+		super();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionFactory#createConnection(org.eclipse.datatools.connectivity.IConnectionProfile)
+	 */
+	public IConnection createConnection(IConnectionProfile profile) {
+		JDBCConnection connection = new JDBCConnection(profile, getClass());
+		connection.open();
+		return connection;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionFactory#createConnection(org.eclipse.datatools.connectivity.IConnectionProfile,
+	 *      java.lang.String, java.lang.String)
+	 */
+	public IConnection createConnection(IConnectionProfile profile, String uid,
+			String pwd) {
+		return createConnection(profile);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/jdbc/JDBCPasswordPropertyPersistenceHook.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/jdbc/JDBCPasswordPropertyPersistenceHook.java
new file mode 100644
index 0000000..da79717
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/jdbc/JDBCPasswordPropertyPersistenceHook.java
@@ -0,0 +1,52 @@
+package org.eclipse.datatools.connectivity.drivers.jdbc;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.IPropertiesPersistenceHook;
+import org.eclipse.datatools.connectivity.PropertiesPersistenceHook;
+
+/*******************************************************************************
+ * Copyright (c) 2006,2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ *      IBM Corporation - migrated to new wizard framework
+ ******************************************************************************/
+
+public class JDBCPasswordPropertyPersistenceHook extends
+		PropertiesPersistenceHook implements IPropertiesPersistenceHook {
+
+	public JDBCPasswordPropertyPersistenceHook() {
+		super();
+	}
+
+	public boolean arePropertiesComplete(Properties props) {
+		return persistPassword(props)
+				|| props.getProperty(
+						IJDBCConnectionProfileConstants.PASSWORD_PROP_ID, null) != null;
+	}
+
+	public Properties getPersitentProperties(Properties props) {
+		props = super.getPersitentProperties(props);
+		if (!persistPassword(props)) {
+			props.remove(IJDBCConnectionProfileConstants.PASSWORD_PROP_ID);
+		}
+		return props;
+	}
+
+	protected boolean persistPassword(Properties props) {
+		return Boolean.valueOf(
+				props.getProperty(
+						IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID,
+						Boolean.FALSE.toString())).booleanValue();
+	}
+
+	public String getConnectionPropertiesPageID() {
+		return IJDBCConnectionProfileConstants.CONNECTION_PROPERTY_PAGE_ID;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/messages.properties b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/messages.properties
new file mode 100644
index 0000000..27846e6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/messages.properties
@@ -0,0 +1,130 @@
+################################################################################
+## Copyright (c) 2005 Sybase, Inc.
+## All rights reserved. This program and the accompanying materials
+## are made available under the terms of the Eclipse Public License v1.0
+## which accompanies this distribution, and is available at
+## http://www.eclipse.org/legal/epl-v10.html
+##
+## Contributors:
+##    Sybase, Inc. - initial API and implementation
+################################################################################ 
+# package: org.eclipse.datatools.connectivity.drivers
+DriverMgmtPlugin.default_instance_suffix =  Default
+
+DriverMgmtPlugin.BundleMissing = Plug-in {0} missing while setting up default driver definitions.
+DriverMgmtPlugin.FileMissing = File {0} missing while setting up default driver definitions.
+
+PropertySetImpl.copy_prefix = Copy of 
+PropertiesLabelProvider.url=Default URL
+PropertiesLabelProvider.host=Host
+PropertiesLabelProvider.port=Port
+PropertySetImpl.copy_id_suffix = .copy
+PropertiesLabelProvider.driverClass=Driver Class
+PropertiesLabelProvider.catalog=Catalog
+PropertiesLabelProvider.dbname=Database Name
+PropertiesLabelProvider.schema=Schema
+PropertiesLabelProvider.username=User Name
+PropertiesLabelProvider.password=Password
+
+CategoryDescriptor.msg.id_missing = A category extension for extension-point org.eclipse.datatools.connectivity.driverExtension does not provide a valid ID.
+CategoryDescriptor.msg.name_missing = A category extension for extension-point org.eclipse.datatools.connectivity.driverExtension not provide a valid name.
+CategoryDescriptor.msg.categoryDescriptorCreationError = Problem encountered while creating a category descriptor.
+
+TemplateDescriptor.msg.id_missing = An extension for extension-point org.eclipse.datatools.connectivity.driverExtension does not provide a valid ID.
+TemplateDescriptor.msg.name_missing = An extension for extension-point org.eclipse.datatools.connectivity.driverExtension not provide a valid name.
+TemplateDescriptor.msg.driverTypeDescriptorCreationError = Problem encountered while creating a driver template descriptor.
+
+DriverPreferences.label.availableDrivers = Driver de&finitions:
+DriverPreferences.button.addDriver = &Add...
+DriverPreferences.DriverTypeFilter=Driver Type Filter:
+DriverPreferences.VendorFilter=Filter:
+DriverPreferences.NameColumn=Name
+DriverPreferences.DriverNameColumn=Driver Name
+DriverPreferences.VendorColumn=System Vendor
+DriverPreferences.VersionColumn=System Version
+DriverPreferences.button.editDriver = &Edit...
+DriverPreferences.button.removeDriver = &Remove
+DriverPreferences.button.copyDriver = &Copy
+DriverPreferences.title.removeMessage = Confirm Driver Removal
+DriverPreferences.DriverVersionColumn=Driver Version (if applicable)
+DriverPreferences.text.removeMessage = Are you sure you want to remove the driver {0} ?
+DriverPreferences.DriverVendorColumn=Driver Vendor (if Applicable)
+
+DriverDefinitionsDialog.title = Available Driver Definitions
+DriverDialog.DriverTypeFilter=&Driver Type Filter:
+DriverDialog.VendorFilter=&Vendor Filter:
+DriverDialog.DriverNameColumn=Driver Name
+DriverDialog.VendorColumn=System Vendor
+DriverDialog.DialogMessage=Specify a driver template, then modify details in the fields below to provide a unique name, a list of required jars, and set any available and applicable property values.
+DriverDialog.Properties.Tab=Properties
+DriverDefinitionsDialog.message = Add, edit, or remove driver definitions to manage available driver definitions.
+DriverDialog.DriverVendorColumn=Driver Vendor (if Applicable)
+DriverDefinitionsDialog.windowTitle = Driver Definitions
+DriverDefinitionsDialog.label.properties = &Driver definitions:
+DriverDefinitionsDialog.button.addDriver = &Add...
+DriverDefinitionsDialog.button.editDriver = &Edit...
+DriverDefinitionsDialog.button.removeDriver = &Remove
+DriverDefinitionsDialog.button.copyDriver = &Copy
+DriverDialog.quickdriver.name=Quick {0}
+DriverDialog.NewDriver.title=New Driver Dialog
+
+DelimitedStringList.button.add = Add
+DelimitedStringList.button.up = Up
+DelimitedStringList.button.down = Down
+DelimitedStringList.button.remove = Remove
+DelimitedStringList.button.clear = Clear All
+
+DriverListCombo.button.browse = ...
+DriverListCombo.button.newdriver=New Driver Definition
+DriverListCombo.EditDriverButton.tooltip=Edit Driver Definition
+DriverDialog.DriverVersionColumn=Driver Version (if applicable)
+DriverListCombo.button.generic=Fast Driver (Generic JDBC) Definition
+
+DriverValidator.msg.missing_required_property = Required property in driver definition missing value: {0}.
+DriverValidator.msg.jarfile_not_found = Unable to locate JAR/zip in file system as specified by the driver definition: {0}.
+DriverInstance.error.invalidClassPath=Invalid driver class path.
+DriverValidator.msg.empty_jar_list = Driver files not specified in driver definition.
+DriverDialog.EditDriverDialogTitle=Edit Driver Dialog
+DriverDialog.EditDriver.message=Modify details in the fields below to provide a unique name, a list of required jars, and set any available and applicable property values.
+DriverValidator.msg.empty_name = A driver name must not be an empty string.
+
+DriverValidator.msg.no_driver_selected = Define and select a driver from the drop-down list to continue.
+DriverInstance.error.jarListNotDefined=Invalid driver definition; JAR list not defined.
+
+NewDriverDialog.label.availableTemplates = &Available driver templates:
+NewDriverDialog.label.driverNameText = Driver &name:
+NewDriverDialog.button.edit_immediately = &Edit new driver definition immediately
+NewDriverDialog.title = Specify a Driver Template and Definition Name
+NewDriverDialog.message = Select an available driver template and provide a name for the new driver definition.
+NewDriverDialog.windowTitle = New Driver Definition
+NewDriverDialog.text.id_prefix = DriverDefn.
+NewDriverDialog.driverExistsWithName = A driver already exists with that name. Please provide a unique driver name.
+NewDriverDialog.driverNameNoSpaces = A driver name may not start or end with a space.
+
+EditDriverDialog.label.driverNameText = Driver &name:
+EditDriverDialog.label.driverTypeText = Driver &type:
+EditDriverDialog.label.driverFileList = Driver &files:
+EditDriverDialog.button.addJar = &Add JAR/Zip...
+EditDriverDialog.button.editJar = &Edit JAR/Zip...
+EditDriverDialog.button.removeJar = &Remove JAR/Zip
+EditDriverDialog.button.clearAllJars = &Clear All
+EditDriverDialog.label.properties = &Properties:
+EditDriverDialog.column.name = Name
+EditDriverDialog.column.value = Value
+EditDriverDialog.properties.tooltip.default = List of available driver properties.
+EditDriverDialog.title = Provide Driver Details
+EditDriverDialog.message = Modify details in the fields below to provide a unique name, a list of required jars, and set any available and applicable property values.
+EditDriverDialog.windowTitle = Edit Driver Definition
+EditDriverDialog.title.filebrowse = Select the file:
+EditDriverDialog.text.id_prefix = DriverDefn.
+EditDriverDialog.text.id_test_prefix = TestDriverDefn.
+EditDriverDialog.msg.updateAllJarsToSamePath.title = Update All Jars to Use Same Path?
+EditDriverDialog.msg.updateAllJarsToSamePath.message = Do you want to update the other jar paths to use the same location?
+PropertiesLabelProvider.connectionProps=Connection Properties
+
+DelimitedStringList.ValidationMsg.NoCommas = Commas not allowed within parameter values.
+DriverDialog.AllFilter=All
+DriverDialog.NameColumn=Name
+DriverDialog.Name.Type.Tab=Name/Type
+DriverDialog.JarList.Tab=JAR List
+DriverDialog.Version=System Version
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/models/CategoryDescriptor.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/models/CategoryDescriptor.java
new file mode 100644
index 0000000..d1acf9e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/models/CategoryDescriptor.java
@@ -0,0 +1,294 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2011 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ * 				brianf - added capability of removing a template bug 264520
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.drivers.models;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.datatools.connectivity.drivers.DriverMgmtMessages;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+
+import com.ibm.icu.text.Collator;
+
+/**
+ * Represents a category which is provided by the
+ * "org.eclipse.datatools.connectivity.driverExtension" extension point.
+ * 
+ * @author brianf
+ */
+public class CategoryDescriptor implements Comparable {
+
+	// extension point details
+	public static final String DRIVERTYPE_TAG = "driverExtension";//$NON-NLS-1$
+	private static final String EXTENSION_POINT_NAME = "driverExtension"; //$NON-NLS-1$
+	private static final String CATEGORY_ELEMENT_TAG = "category"; //$NON-NLS-1$
+
+	// attributes
+	private static final String ID_ATTRIBUTE = "id"; //$NON-NLS-1$
+	private static final String NAME_ATTRIBUTE = "name"; //$NON-NLS-1$
+	private static final String DESCRIPTION_ATTRIBUTE = "description"; //$NON-NLS-1$	
+	private static final String PARENTCATEGORY_ATTRIBUTE = "parentCategory"; //$NON-NLS-1$	
+
+	// local list of descriptors
+	private static CategoryDescriptor[] fgCategoryDescriptors;
+
+	// local copy of configuration element
+	private IConfigurationElement fElement;
+
+	/**
+	 * Creates a new driver type descriptor for the given configuration element.
+	 */
+	protected CategoryDescriptor(IConfigurationElement element) {
+		this.fElement = element;
+
+		/*
+		 * "A category extension for extension-point
+		 * org.eclipse.datatools.connectivity.driverExtension does not provide a
+		 * valid ID");
+		 */
+		Assert.isNotNull(getId(), DriverMgmtMessages
+				.getString("CategoryDescriptor.msg.id_missing")); //$NON-NLS-1$
+		/*
+		 * "A category extension for extension-point
+		 * org.eclipse.datatools.connectivity.driverExtension not provide a
+		 * valid name");
+		 */
+		Assert.isNotNull(getName(), DriverMgmtMessages
+				.getString("CategoryDescriptor.msg.name_missing")); //$NON-NLS-1$
+	}
+
+	/**
+	 * Returns all contributed categories
+	 */
+	public static CategoryDescriptor[] getCategoryDescriptors() {
+		if (fgCategoryDescriptors == null) {
+			IExtensionRegistry registry = Platform.getExtensionRegistry();
+			IConfigurationElement[] elements = registry
+					.getConfigurationElementsFor(ConnectivityPlugin.getSymbolicName(),
+							EXTENSION_POINT_NAME);
+			fgCategoryDescriptors = createCategoryDescriptors(elements);
+		}
+		return fgCategoryDescriptors;
+	}
+
+	/**
+	 * Returns a category descriptor matching the id or null.
+	 * 
+	 * @param id
+	 * @return CategoryDescriptor
+	 */
+	public static CategoryDescriptor getCategoryDescriptor(String id) {
+		if (fgCategoryDescriptors == null) {
+			fgCategoryDescriptors = getCategoryDescriptors();
+		}
+		for (int i = 0; i < fgCategoryDescriptors.length; i++) {
+			CategoryDescriptor desc = fgCategoryDescriptors[i];
+			if (desc.getId().equals(id))
+				return desc;
+		}
+		return null;
+	}
+
+	/**
+	 * Returns a list of all root categories (for example 
+	 * those with no parent category).
+	 * 
+	 * @return CategoryDescriptor[]
+	 */
+	public static CategoryDescriptor[] getRootCategories() {
+		Collection col = Arrays.asList(getCategoryDescriptors());
+		ArrayList cats = new ArrayList(col.size());
+		CategoryDescriptor cat;
+		for (Iterator itr = col.iterator(); itr.hasNext();) {
+			cat = (CategoryDescriptor) itr.next();
+			if (cat.getParent() == null)
+				cats.add(cat);
+		}
+		return (CategoryDescriptor[]) cats.toArray(new CategoryDescriptor[cats
+				.size()]);
+	}
+
+	/**
+	 * @return CategoryDescriptor
+	 */
+	public CategoryDescriptor getParent() {
+		if (getParentCategory() != null) {
+			Collection col = Arrays.asList(getCategoryDescriptors());
+			CategoryDescriptor cat;
+			for (Iterator itr = col.iterator(); itr.hasNext();) {
+				cat = (CategoryDescriptor) itr.next();
+				if (cat.getId().equals(getParentCategory()))
+					return cat;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns a list of all child categories for this category.
+	 * @return List
+	 */
+	public List getChildCategories() {
+		Collection col = Arrays.asList(getCategoryDescriptors());
+		ArrayList cats = new ArrayList(col.size());
+		CategoryDescriptor cat;
+		for (Iterator itr = col.iterator(); itr.hasNext();) {
+			cat = (CategoryDescriptor) itr.next();
+			if (cat.getParent() != null
+					&& cat.getParentCategory().equals(getId())) {
+				cats.add(cat);
+			}
+		}
+		return cats;
+	}
+
+	/**
+	 * Returns a list of all associated driver types for this category.
+	 * @return List
+	 */
+	public List getAssociatedDriverTypes() {
+		Collection col = Arrays.asList(TemplateDescriptor
+				.getDriverTemplateDescriptors());
+		ArrayList dts = new ArrayList(col.size());
+		TemplateDescriptor dt;
+		for (Iterator itr = col.iterator(); itr.hasNext();) {
+			dt = (TemplateDescriptor) itr.next();
+			if (dt.getParentCategory() != null
+					&& dt.getParentCategory().equals(getId())) {
+				if (!dt.getRemoveFlag())
+					dts.add(dt);
+			}
+		}
+		return dts;
+	}
+
+	/**
+	 * Returns the category id.
+	 * @return String ID
+	 */
+	public String getId() {
+		return this.fElement.getAttribute(ID_ATTRIBUTE);
+	}
+
+	/**
+	 * Returns the category parent.
+	 * @return String 
+	 */
+	public String getParentCategory() {
+		return this.fElement.getAttribute(PARENTCATEGORY_ATTRIBUTE);
+	}
+
+	/**
+	 * Returns the configuration element.
+	 * @return IConfigurationElement
+	 */
+	public IConfigurationElement getElement() {
+		return this.fElement;
+	}
+
+	/**
+	 * Returns the name.
+	 * @return String
+	 */
+	public String getName() {
+		String name = this.fElement.getAttribute(NAME_ATTRIBUTE);
+		if (name == null && getId() != null)
+			name = getId();
+		return name;
+	}
+
+	/**
+	 * Returns the description.
+	 * 
+	 * @return the description or <code>null</code> if no description is
+	 *         provided
+	 */
+	public String getDescription() {
+		String description = this.fElement.getAttribute(DESCRIPTION_ATTRIBUTE);
+		if (description == null)
+			description = ""; //$NON-NLS-1$
+		return description;
+	}
+
+	/* (non-Javadoc)
+	 * Implements a method from IComparable
+	 * @see java.lang.Comparable#compareTo(java.lang.Object)
+	 */
+	public int compareTo(Object o) {
+		if (o instanceof CategoryDescriptor)
+			return Collator.getInstance().compare(getName(),
+					((CategoryDescriptor) o).getName());
+		return Integer.MIN_VALUE;
+	}
+
+	/**
+	 * Creates the category descriptors.
+	 * @param elements
+	 * @return
+	 */
+	private static CategoryDescriptor[] createCategoryDescriptors(
+			IConfigurationElement[] elements) {
+		List result = new ArrayList(5);
+		Set descIds = new HashSet(5);
+		for (int i = 0; i < elements.length; i++) {
+			final IConfigurationElement element = elements[i];
+			if (CATEGORY_ELEMENT_TAG.equals(element.getName())) {
+
+				final CategoryDescriptor[] desc = new CategoryDescriptor[1];
+				SafeRunner
+					.run(new MySafeRunnable ( desc, element));
+
+				if (desc[0] != null && !descIds.contains(desc[0].getId())) {
+					result.add(desc[0]);
+					descIds.add(desc[0].getId());
+				}
+			}
+		}
+		Collections.sort(result);
+		return (CategoryDescriptor[]) result
+				.toArray(new CategoryDescriptor[result.size()]);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.lang.Object#toString()
+	 */
+	public String toString() {
+		return getName();
+	}
+
+	public boolean equals(Object obj) {
+		if (obj instanceof CategoryDescriptor) {
+			CategoryDescriptor compare = (CategoryDescriptor) obj;
+			return this.getId().equals(compare.getId());
+		}
+		return super.equals(obj);
+	}
+
+	public int hashCode() {
+		if (this.getId() != null)
+			return this.getId().hashCode();
+		return super.hashCode();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/models/DriversProvider.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/models/DriversProvider.java
new file mode 100644
index 0000000..77884ac
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/models/DriversProvider.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.drivers.models;
+
+/**
+ * Provider for the content provider to act as a trigger.
+ * 
+ * @author brianf
+ */
+public class DriversProvider {
+
+	// Local instance
+	private static DriversProvider provider;
+
+	/**
+	 * Hidden constructor
+	 */
+	private DriversProvider() {
+		// empty
+	}
+
+	/**
+	 * Returns an instance of the provider
+	 * @return DriversProvider
+	 */
+	public static DriversProvider getInstance() {
+		if (provider == null)
+			provider = new DriversProvider();
+		return provider;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/models/MySafeRunnable.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/models/MySafeRunnable.java
new file mode 100644
index 0000000..db385a2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/models/MySafeRunnable.java
@@ -0,0 +1,42 @@
+package org.eclipse.datatools.connectivity.drivers.models;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.ISafeRunnable;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+
+public class MySafeRunnable implements ISafeRunnable {
+
+	private TemplateDescriptor[] mInstances = null;
+	private OverrideTemplateDescriptor[] mOverrideInstances = null;
+	private CategoryDescriptor[] mCatInstances = null;
+	private IConfigurationElement mElement = null;
+	
+	public MySafeRunnable ( CategoryDescriptor[] instance, IConfigurationElement element ) {
+		this.mCatInstances = instance;
+		this.mElement = element;
+	}
+	
+	public MySafeRunnable ( TemplateDescriptor[] instance, IConfigurationElement element ) {
+		this.mInstances = instance;
+		this.mElement = element;
+	}
+	
+	public MySafeRunnable ( OverrideTemplateDescriptor[] instance, IConfigurationElement element ) {
+		this.mOverrideInstances = instance;
+		this.mElement = element;
+	}
+
+	public void handleException(Throwable exception) {
+		ConnectivityPlugin.getDefault().log(exception);
+	}
+
+	public void run() throws Exception {
+		if (this.mInstances != null)
+			this.mInstances[0] = new TemplateDescriptor(this.mElement);
+		else if (this.mCatInstances != null)
+			this.mCatInstances[0] = new CategoryDescriptor(this.mElement);
+		else if (this.mOverrideInstances != null)
+			this.mOverrideInstances[0] = new OverrideTemplateDescriptor(this.mElement);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/models/OverrideTemplateDescriptor.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/models/OverrideTemplateDescriptor.java
new file mode 100644
index 0000000..28ab303
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/models/OverrideTemplateDescriptor.java
@@ -0,0 +1,438 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2011 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ * 				brianf - added capability of removing a template bug 264520
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.drivers.models;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.datatools.connectivity.drivers.DriverMgmtMessages;
+import org.eclipse.datatools.connectivity.drivers.IDriverValuesProvider;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+
+/**
+ * Represents a driver template override which is provided by the
+ * "org.eclipse.datatools.connectivity.driverExtension" extension point.
+ * 
+ * @author brianf
+ */
+public class OverrideTemplateDescriptor implements Comparable {
+
+	// extension details
+	public static final String TEMPLATE_TAG = "driverExtension";//$NON-NLS-1$
+	public static final String PLUGIN_LOC = "\\[\\%PLUGIN_LOC\\%\\]"; //$NON-NLS-1$
+	private static final String EXTENSION_POINT_NAME = "driverExtension"; //$NON-NLS-1$
+	private static final String OVERRIDE_DRIVERTEMPLATE_ELEMENT_TAG = "driverTemplateOverride"; //$NON-NLS-1$
+	private static final String OVERRIDE_PROPERTIES_ELEMENT_TAG = "propertyOverrides";//$NON-NLS-1$
+	private static final String OVERRIDE_PROPERTY_ELEMENT_TAG = "propertyOverride";//$NON-NLS-1$
+
+	// attributes
+	private static final String CREATEDEFAULT_TAG = "createDefault"; //$NON-NLS-1$
+	private static final String ID_ATTRIBUTE = "id"; //$NON-NLS-1$
+	private static final String TARGET_ID_ATTRIBUTE = "targetId"; //$NON-NLS-1$
+	private static final String NAME_ATTRIBUTE = "name"; //$NON-NLS-1$
+	private static final String DESCRIPTION_ATTRIBUTE = "description"; //$NON-NLS-1$	
+	private static final String PARENTCATEGORY_ATTRIBUTE = "parentCategory"; //$NON-NLS-1$	
+	private static final String JARLIST_ATTRIBUTE = "jarList"; //$NON-NLS-1$	
+	private static final String VALUE_ATTRIBUTE = "value"; //$NON-NLS-1$	
+	private static final String EMPTYJARLISTOK_TAG = "emptyJarListIsOK"; //$NON-NLS-1$
+	private static final String VISIBLE_ATTRIBUTE = "visible";//$NON-NLS-1$
+	private static final String REMOVE_ATTRIBUTE = "remove";//$NON-NLS-1$
+	private static final String EXAMPLE_ATTRIBUTE = "example";//$NON-NLS-1$
+	private static final String REQUIRED_ATTRIBUTE = "required";//$NON-NLS-1$
+	private static final String CATEGORY_ATTRIBUTE = "category";//$NON-NLS-1$
+	private static final String CUSTOM_PROP_DESCRIPTOR_ATTRIBUTE = "customPropertyDescriptor";//$NON-NLS-1$
+	private static final String PRIORITY_ATTRIBUTE = "priority";//$NON-NLS-1$
+	private static final String VALUESPROVIDER_ATTRIBUTE = "valuesProvider"; //$NON-NLS-1$
+	private static final String DEFAULT_DEFINITION_NAME_ATTRIBUTE = "defaultDefinitionName"; //$NON-NLS-1$
+	
+	private IDriverValuesProvider driverValuesProvider = null;
+
+	private static final OverrideTemplateDescriptor[] EMPTY = {};
+
+	// local list of driver templates
+//	private static OverrideTemplateDescriptor[] fgDriverTemplateDescriptors;
+	private static Map fgDriverTemplateDescriptors;
+	private static Map fgDriverTemplateOverrideDescriptorIDMap;
+
+	// local copy of configuration element
+	private IConfigurationElement fElement;
+
+	/**
+	 * Creates a new driver template descriptor for the given configuration
+	 * element.
+	 */
+	protected OverrideTemplateDescriptor(IConfigurationElement element) {
+		this.fElement = element;
+
+		/*
+		 * "An extension for extension-point
+		 * org.eclipse.datatools.connectivity.driverExtension does not provide a
+		 * valid ID");
+		 */
+		Assert.isNotNull(getTargetId(), DriverMgmtMessages
+				.getString("TemplateDescriptor.msg.id_missing"));//$NON-NLS-1$
+	}
+
+	public static OverrideTemplateDescriptor[] getByDriverTemplate(String driverTemplateId) {
+		if (fgDriverTemplateDescriptors == null) {
+			IExtensionRegistry registry = Platform.getExtensionRegistry();
+			IConfigurationElement[] elements = registry
+					.getConfigurationElementsFor(ConnectivityPlugin.getSymbolicName(),
+							EXTENSION_POINT_NAME);
+			createDriverTemplateDescriptors(elements);
+		}
+
+		List descriptors = (List)fgDriverTemplateDescriptors.get(driverTemplateId);
+		if (descriptors != null && descriptors.size() > 0) {
+			Iterator iter = descriptors.iterator();
+			ArrayList finalList = new ArrayList();
+			while (iter.hasNext()) {
+				OverrideTemplateDescriptor otd = (OverrideTemplateDescriptor) iter.next();
+				if (otd.getId() != null) {
+					List overrides = (List)fgDriverTemplateDescriptors.get(otd.getId());
+					if (overrides != null) {
+						OverrideTemplateDescriptor[] overridesArray = 
+							(OverrideTemplateDescriptor[]) overrides.toArray(new OverrideTemplateDescriptor[descriptors.size()]);
+						Arrays.sort(overridesArray, new OverridesPriorityComparator());
+						finalList.add(overridesArray[0]);
+					}
+					else {
+						finalList.add(otd);
+					}
+				}
+				else {
+					finalList.add(otd);
+				}
+			}
+			OverrideTemplateDescriptor[] array = 
+				(OverrideTemplateDescriptor[]) finalList.toArray(new OverrideTemplateDescriptor[finalList.size()]);
+			Arrays.sort(array);
+			return array;
+		}
+		return EMPTY;
+	}
+
+	/**
+	 * Returns all contributed driver templates.
+	 */
+	public static OverrideTemplateDescriptor[] getOverrideDriverTemplateDescriptors() {
+		if (fgDriverTemplateDescriptors == null) {
+			IExtensionRegistry registry = Platform.getExtensionRegistry();
+			IConfigurationElement[] elements = registry
+					.getConfigurationElementsFor(ConnectivityPlugin.getSymbolicName(),
+							EXTENSION_POINT_NAME);
+			createDriverTemplateDescriptors(elements);
+		}
+		return (OverrideTemplateDescriptor[]) fgDriverTemplateDescriptors.values().toArray(new OverrideTemplateDescriptor[fgDriverTemplateDescriptors.size()]);
+	}
+
+	/**
+	 * Returns the template id.
+	 */
+	public String getTargetId() {
+		return this.fElement.getAttribute(TARGET_ID_ATTRIBUTE);
+	}
+	public String getId() {
+		return this.fElement.getAttribute(ID_ATTRIBUTE);
+	}
+
+	/**
+	 * Returns the template id.
+	 */
+	public int getPriority() {
+		String value = this.fElement.getAttribute(PRIORITY_ATTRIBUTE);
+		if (value == null)
+			return 1;
+		try {
+			int valueInt = Integer.parseInt(value);
+			return valueInt;
+		} catch (NumberFormatException nfe) {
+			return 1;
+		}
+	}
+
+	/**
+	 * Returns the parent category id.
+	 */
+	public String getParentCategory() {
+		return this.fElement.getAttribute(PARENTCATEGORY_ATTRIBUTE);
+	}
+
+	/**
+	 * Returns the file list
+	 */
+	public String getJarList() {
+
+		String jarList = this.fElement.getAttribute(JARLIST_ATTRIBUTE);
+		
+        return TemplateDescriptor.substitutePluginPath( jarList, this.fElement );
+	}
+
+	/**
+	 * Returns the values provider class
+	 */
+	public IDriverValuesProvider getValuesProviderClass() {
+		if (this.fElement.getAttribute(VALUESPROVIDER_ATTRIBUTE) != null &&
+				this.driverValuesProvider == null) {
+			try {
+				driverValuesProvider = (IDriverValuesProvider) fElement
+						.createExecutableExtension(VALUESPROVIDER_ATTRIBUTE);
+				driverValuesProvider.setDriverTemplate(TemplateDescriptor.getDriverTemplateDescriptor(getTargetId()));
+			}
+			catch (CoreException e) {
+				e.printStackTrace();
+				return null;
+			}
+		}
+		return this.driverValuesProvider;
+	}
+
+	/**
+	 * Returns the 'create default' flag value.
+	 */
+	public String getCreateDefaultFlag() {
+		if (this.fElement.getAttribute(CREATEDEFAULT_TAG) != null) {
+			return this.fElement.getAttribute(CREATEDEFAULT_TAG);
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the 'create default' flag value. Default = false
+	 */
+	public String getEmptyJarListIsOKFlag() {
+		if (this.fElement.getAttribute(EMPTYJARLISTOK_TAG) != null) {
+			return this.fElement.getAttribute(EMPTYJARLISTOK_TAG);
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the configuration element.
+	 */
+	public IConfigurationElement getElement() {
+		return this.fElement;
+	}
+
+	/**
+	 * Returns the template name.
+	 */
+	public String getName() {
+		String name = this.fElement.getAttribute(NAME_ATTRIBUTE);
+		return name;
+	}
+
+	public boolean getRemoveFlag() {
+		String name = this.fElement.getAttribute(REMOVE_ATTRIBUTE);
+		if (name != null && name.trim().equalsIgnoreCase(Boolean.toString(true)))
+			return true;
+		return false;
+	}
+
+	/**
+	 * Returns the default definition name.
+	 */
+	public String getDefaultDefinitionName() {
+		String defaultDefinitionName = this.fElement.getAttribute(DEFAULT_DEFINITION_NAME_ATTRIBUTE);
+		if (defaultDefinitionName == null && getName() != null)
+			defaultDefinitionName = getName();
+		return defaultDefinitionName;
+	}
+	/**
+	 * Returns the list of configuration elements for the template properties.
+	 */
+	public IConfigurationElement[] getOverrideProperties() {
+		IConfigurationElement[] propertyRoot = this.fElement
+				.getChildren(OVERRIDE_PROPERTIES_ELEMENT_TAG);
+		if (propertyRoot != null && propertyRoot.length == 1) {
+			IConfigurationElement[] childElements = propertyRoot[0]
+					.getChildren(OVERRIDE_PROPERTY_ELEMENT_TAG); //$NON-NLS-1$
+			return childElements;
+		}
+		return new IConfigurationElement[0];
+	}
+
+	public String getPropertyValueFromId(String propId) {
+		return getPropertyAttributeValueByID(propId, VALUE_ATTRIBUTE);
+	}
+
+	public String getPropertyNameFromId(String propId) {
+		return getPropertyAttributeValueByID(propId, NAME_ATTRIBUTE);
+	}
+
+	public String getPropertyIDFromName(String propName) {
+		return getPropertyAttributeValueByName(propName, TARGET_ID_ATTRIBUTE);
+	}
+
+	public String getPropertyDescriptionFromId(String propId) {
+		return getPropertyAttributeValueByID(propId, DESCRIPTION_ATTRIBUTE);
+	}
+
+	public String getPropertyVisibleFromId(String propId) {
+		return getPropertyAttributeValueByID(propId, VISIBLE_ATTRIBUTE);
+	}
+
+	public String getPropertyExampleFromId(String propId) {
+		return getPropertyAttributeValueByID(propId, EXAMPLE_ATTRIBUTE);
+	}
+
+	public String getPropertyRequiredFromId(String propId) {
+		return getPropertyAttributeValueByID(propId, REQUIRED_ATTRIBUTE);
+	}
+
+	public String getPropertyCustomPropDescriptorFromId(String propId) {
+		return getPropertyAttributeValueByID(propId, CUSTOM_PROP_DESCRIPTOR_ATTRIBUTE);
+	}
+
+	public String getPropertyCategoryFromId(String propId) {
+		return getPropertyAttributeValueByID(propId, CATEGORY_ATTRIBUTE);
+	}
+
+	public boolean getPropertyRemoveFlagFromID( String propId) {
+		String removeStr = getPropertyAttributeValueByID(propId, REMOVE_ATTRIBUTE);
+		if (removeStr != null) {
+			Boolean flag = Boolean.valueOf(removeStr);
+			return flag.booleanValue();
+		}
+		return false;
+	}
+
+	public String getPropertyNameFromConfigElement ( IConfigurationElement element ) {
+		if (element.getAttribute(NAME_ATTRIBUTE) != null) {
+			return element.getAttribute(NAME_ATTRIBUTE);
+		}
+		return "";//$NON-NLS-1$
+	}
+	
+	private String getPropertyAttributeValueByName(String propName, String attribute) {
+		String attr_value = new String();
+		IConfigurationElement[] props = getOverrideProperties();
+		for (int i = 0; i < props.length; i++) {
+			if (props[i].getAttribute(NAME_ATTRIBUTE) != null) {
+				if (propName.equals(props[i].getAttribute(NAME_ATTRIBUTE))) {
+					attr_value = props[i].getAttribute(attribute);
+					break;
+				}
+			}
+		}
+		return attr_value;
+	}
+
+	private String getPropertyAttributeValueByID(String propId, String attribute) {
+		String attr_value = new String();
+		IConfigurationElement[] props = getOverrideProperties();
+		for (int i = 0; i < props.length; i++) {
+			if (props[i].getAttribute(TARGET_ID_ATTRIBUTE) != null) {
+				if (propId.equals(props[i].getAttribute(TARGET_ID_ATTRIBUTE))) {
+					attr_value = props[i].getAttribute(attribute);
+					break;
+				}
+			}
+		}
+		return attr_value;
+	}
+
+	/**
+	 * Returns the description.
+	 * 
+	 * @return the description or <code>null</code> if no description is
+	 *         provided
+	 */
+	public String getDescription() {
+		String description = this.fElement.getAttribute(DESCRIPTION_ATTRIBUTE);
+		if (description == null)
+			description = ""; //$NON-NLS-1$
+		return description;
+	}
+
+	/*
+	 * Implements a method from IComparable
+	 */
+	public int compareTo(Object o) {
+		if (o instanceof OverrideTemplateDescriptor) {
+			return ((OverrideTemplateDescriptor) o).getPriority() - getPriority();
+//			return Collator.getInstance().compare(getName(),
+//					((OverrideTemplateDescriptor) o).getName());
+		}
+		return Integer.MIN_VALUE;
+	}
+
+	/**
+	 * Creates the template descriptors.
+	 */
+	private static void createDriverTemplateDescriptors(
+			IConfigurationElement[] elements) {
+		fgDriverTemplateDescriptors = new HashMap();
+		fgDriverTemplateOverrideDescriptorIDMap = new HashMap();
+		
+		for (int i = 0; i < elements.length; ++i) {
+			final IConfigurationElement element = elements[i];
+			if (OVERRIDE_DRIVERTEMPLATE_ELEMENT_TAG.equals(element.getName())) {
+
+				final OverrideTemplateDescriptor[] desc = new OverrideTemplateDescriptor[1];
+				SafeRunner
+						.run(new MySafeRunnable ( desc, element));
+
+				if (desc[0] != null) {
+					List descriptors = (List)fgDriverTemplateDescriptors.get(desc[0].getTargetId());
+					if (descriptors == null) {
+						descriptors = new ArrayList(1);
+						fgDriverTemplateDescriptors.put(desc[0].getTargetId(), descriptors);
+					}
+					descriptors.add(desc[0]);
+				}
+			}
+		}
+	}
+	
+	/**
+	 * Determine if the template has visible properties 
+	 * @return
+	 */
+    public boolean hasVisibleProperties() {
+		IConfigurationElement[] templateprops = this.getOverrideProperties();
+		if (templateprops != null && templateprops.length > 0) {
+			for (int i=0; i < templateprops.length; i++) {
+				IConfigurationElement prop = templateprops[i];
+				String visible = prop.getAttribute(VISIBLE_ATTRIBUTE);
+				if (visible == null || (visible.equals(Boolean.toString(true)))) {
+					return true;
+				}					
+			}
+		}
+		return false;
+    }
+
+	public boolean equals(Object obj) {
+		if (obj instanceof OverrideTemplateDescriptor) {
+			OverrideTemplateDescriptor compare = (OverrideTemplateDescriptor) obj;
+			return this.getTargetId().equals(compare.getTargetId());
+		}
+		return super.equals(obj);
+	}
+
+	public int hashCode() {
+		if (this.getTargetId() != null)
+			return this.getTargetId().hashCode();
+		return super.hashCode();
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/models/OverridesPriorityComparator.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/models/OverridesPriorityComparator.java
new file mode 100644
index 0000000..9965704
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/models/OverridesPriorityComparator.java
@@ -0,0 +1,15 @@
+package org.eclipse.datatools.connectivity.drivers.models;
+
+import java.util.Comparator;
+
+public class OverridesPriorityComparator implements Comparator {
+
+	public int compare(Object arg0, Object arg1) {
+		OverrideTemplateDescriptor otd0 = (OverrideTemplateDescriptor) arg0;
+		OverrideTemplateDescriptor otd1 = (OverrideTemplateDescriptor) arg1;
+		Integer priority0 = new Integer(otd0.getPriority());
+		Integer priority1 = new Integer(otd1.getPriority());
+		return priority0.compareTo(priority1);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/models/TemplateDescriptor.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/models/TemplateDescriptor.java
new file mode 100644
index 0000000..8ef5955
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/drivers/models/TemplateDescriptor.java
@@ -0,0 +1,490 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2011 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ * 		brianf - added capability of removing a template bug 264520
+ *      Actuate Corporation - support for OSGi-less platform (Bugzilla 338997)
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.drivers.models;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.datatools.connectivity.drivers.DriverMgmtMessages;
+import org.eclipse.datatools.connectivity.drivers.IDriverValuesProvider;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+import org.eclipse.datatools.connectivity.services.PluginResourceLocator;
+
+import com.ibm.icu.text.Collator;
+
+/**
+ * Represents a driver template which is provided by the
+ * "org.eclipse.datatools.connectivity.driverExtension" extension point.
+ * 
+ * @author brianf
+ */
+public class TemplateDescriptor implements Comparable {
+
+	// extension details
+	public static final String TEMPLATE_TAG = "driverExtension";//$NON-NLS-1$
+	public static final String PLUGIN_LOC = "\\[\\%PLUGIN_LOC\\%\\]"; //$NON-NLS-1$
+
+	private static final String EXTENSION_POINT_NAME = "driverExtension"; //$NON-NLS-1$
+	private static final String DRIVERTEMPLATE_ELEMENT_TAG = "driverTemplate"; //$NON-NLS-1$
+	private static final String PROPERTIES_ELEMENT_TAG = "properties";//$NON-NLS-1$
+	private static final String PROPERTY_ELEMENT_TAG = "property";//$NON-NLS-1$
+
+	// attributes
+	private static final String CREATEDEFAULT_TAG = "createDefault"; //$NON-NLS-1$
+	private static final String ID_ATTRIBUTE = "id"; //$NON-NLS-1$
+	private static final String NAME_ATTRIBUTE = "name"; //$NON-NLS-1$
+	private static final String DESCRIPTION_ATTRIBUTE = "description"; //$NON-NLS-1$	
+	private static final String PARENTCATEGORY_ATTRIBUTE = "parentCategory"; //$NON-NLS-1$	
+	private static final String JARLIST_ATTRIBUTE = "jarList"; //$NON-NLS-1$	
+	private static final String VALUE_ATTRIBUTE = "value"; //$NON-NLS-1$	
+	private static final String EMPTYJARLISTOK_TAG = "emptyJarListIsOK"; //$NON-NLS-1$
+	private static final String VALUESPROVIDER_ATTRIBUTE = "valuesProvider"; //$NON-NLS-1$
+	private static final String DEFAULT_DEFINITION_NAME_ATTRIBUTE = "defaultDefinitionName"; //$NON-NLS-1$
+	
+	private IDriverValuesProvider driverValuesProvider = null;
+
+	// local list of driver templates
+	private static TemplateDescriptor[] fgDriverTemplateDescriptors;
+
+	// local copy of configuration element
+	private IConfigurationElement fElement;
+
+	/**
+	 * Creates a new driver template descriptor for the given configuration
+	 * element.
+	 */
+	protected TemplateDescriptor(IConfigurationElement element) {
+		this.fElement = element;
+
+		/*
+		 * "An extension for extension-point
+		 * org.eclipse.datatools.connectivity.driverExtension does not provide a
+		 * valid ID");
+		 */
+		Assert.isNotNull(getId(), DriverMgmtMessages
+				.getString("TemplateDescriptor.msg.id_missing"));//$NON-NLS-1$
+		/*
+		 * "An extension for extension-point
+		 * org.eclipse.datatools.connectivity.driverExtension not provide a
+		 * valid name");
+		 */
+		Assert.isNotNull(getName(), DriverMgmtMessages
+				.getString("TemplateDescriptor.msg.name_missing")); //$NON-NLS-1$
+	}
+
+	/**
+	 * Returns all contributed driver templates.
+	 */
+	public static TemplateDescriptor[] getDriverTemplateDescriptors() {
+		if (fgDriverTemplateDescriptors == null) {
+			IExtensionRegistry registry = Platform.getExtensionRegistry();
+			IConfigurationElement[] elements = registry
+					.getConfigurationElementsFor(ConnectivityPlugin.getSymbolicName(),
+							EXTENSION_POINT_NAME);
+			fgDriverTemplateDescriptors = createDriverTemplateDescriptors(elements);
+		}
+		return fgDriverTemplateDescriptors;
+	}
+
+	/**
+	 * Returns the driver template with the given id.
+	 */
+	public static TemplateDescriptor getDriverTemplateDescriptor(String id) {
+		if (fgDriverTemplateDescriptors == null) {
+			fgDriverTemplateDescriptors = getDriverTemplateDescriptors();
+		}
+		for (int i = 0; i < fgDriverTemplateDescriptors.length; i++) {
+			TemplateDescriptor desc = fgDriverTemplateDescriptors[i];
+			if (desc.getId().equals(id))
+				return desc;
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the parent category of the template
+	 * @return CategoryDescriptor
+	 */
+	public CategoryDescriptor getParent() {
+		Collection col = Arrays.asList(CategoryDescriptor
+				.getCategoryDescriptors());
+		CategoryDescriptor cat;
+		for (Iterator itr = col.iterator(); itr.hasNext();) {
+			cat = (CategoryDescriptor) itr.next();
+			if (cat.getId().equals(getParentCategory()))
+				return cat;
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the template id.
+	 */
+	public String getId() {
+		return this.fElement.getAttribute(ID_ATTRIBUTE);
+	}
+
+	/**
+	 * Returns the values provider class
+	 */
+	public IDriverValuesProvider getValuesProviderClass() {
+		// First of all check overrides:
+//		OverrideTemplateDescriptor[] overrides = OverrideTemplateDescriptor.getByDriverTemplate(getId());
+//		if (overrides != null && overrides.length > 0) {
+//			if (overrides[0].getParentCategory() != null)
+//				return overrides[0].getParentCategory();
+//		}
+		if (this.fElement.getAttribute(VALUESPROVIDER_ATTRIBUTE) != null &&
+				this.driverValuesProvider == null) {
+			try {
+				driverValuesProvider = (IDriverValuesProvider) fElement
+						.createExecutableExtension(VALUESPROVIDER_ATTRIBUTE);
+				driverValuesProvider.setDriverTemplate(this);
+			}
+			catch (CoreException e) {
+				e.printStackTrace();
+			}
+		}
+		return this.driverValuesProvider;
+	}
+
+	/**
+	 * Returns the parent category id.
+	 */
+	public String getParentCategory() {
+		// First of all check overrides:
+		OverrideTemplateDescriptor[] overrides = OverrideTemplateDescriptor.getByDriverTemplate(getId());
+		if (overrides != null && overrides.length > 0) {
+			if (overrides[0].getParentCategory() != null)
+				return overrides[0].getParentCategory();
+		}
+		return this.fElement.getAttribute(PARENTCATEGORY_ATTRIBUTE);
+	}
+
+	/**
+	 * Returns the file list
+	 */
+	public String getJarList() {
+		// First of all check overrides, then take the first one:
+		OverrideTemplateDescriptor[] overrides = OverrideTemplateDescriptor.getByDriverTemplate(getId());
+		StringBuffer jarListBuf = new StringBuffer();
+		if (overrides != null && overrides.length > 0) {
+			if (overrides[0].getJarList() != null && overrides[0].getJarList().length() > 0) {
+				jarListBuf.append(overrides[0].getJarList());
+			}
+		}
+
+		String jarList = jarListBuf.length() > 0 ?
+			jarListBuf.toString() : this.fElement.getAttribute(JARLIST_ATTRIBUTE);
+
+		return substitutePluginPath( jarList, this.fElement );
+	}
+
+	static String substitutePluginPath( String jarList, IConfigurationElement configElement )
+	{
+        if (jarList == null) {
+            jarList = new String();
+        }
+        if (!jarList.matches(".*" + PLUGIN_LOC + ".*")) //$NON-NLS-1$ //$NON-NLS-2$
+            return jarList;
+	    
+        String pluginLoc = getPluginLocation( configElement );
+        jarList = jarList.replaceAll(PLUGIN_LOC, pluginLoc);
+        return jarList;
+	}
+	
+	private static String getPluginLocation( IConfigurationElement configElement )
+	{
+	    IPath pluginLocPath = PluginResourceLocator.getPluginRootPath( configElement );
+	    if( pluginLocPath == null )
+	        return null;
+	    String pluginLoc = pluginLocPath.toString();
+        if (pluginLoc.charAt(0) == '/')
+            pluginLoc = pluginLoc.substring(1);
+        if (pluginLoc.charAt(pluginLoc.length() - 1) == '/')
+            pluginLoc = pluginLoc.substring(0, pluginLoc.length() - 1);
+        return pluginLoc;
+	}
+	
+	/**
+	 * Returns the 'create default' flag value.
+	 */
+	public boolean getCreateDefaultFlag() {
+		// First of all check overrides:
+		OverrideTemplateDescriptor[] overrides = OverrideTemplateDescriptor.getByDriverTemplate(getId());
+		if (overrides != null && overrides.length > 0) {
+			if (overrides[0].getCreateDefaultFlag() != null) {
+				Boolean flag = Boolean.valueOf(overrides[0].getCreateDefaultFlag());
+				return flag.booleanValue();
+			}
+		}
+		if (this.fElement.getAttribute(CREATEDEFAULT_TAG) != null) {
+			Boolean flag = Boolean.valueOf(this.fElement
+					.getAttribute(CREATEDEFAULT_TAG));
+			return flag.booleanValue();
+		}
+		return true;
+	}
+
+	/**
+	 * Returns the 'create default' flag value. Default = false
+	 */
+	public boolean getEmptyJarListIsOKFlag() {
+		OverrideTemplateDescriptor[] overrides = OverrideTemplateDescriptor.getByDriverTemplate(getId());
+		if (overrides != null && overrides.length > 0) {
+			if (overrides[0].getEmptyJarListIsOKFlag() != null) {
+				Boolean flag = Boolean.valueOf(overrides[0].getEmptyJarListIsOKFlag());
+				return flag.booleanValue();
+			}
+		}
+		if (this.fElement.getAttribute(EMPTYJARLISTOK_TAG) != null) {
+			Boolean flag = Boolean.valueOf(this.fElement
+					.getAttribute(EMPTYJARLISTOK_TAG));
+			return flag.booleanValue();
+		}
+		return false;
+	}
+
+	/**
+	 * Returns the configuration element.
+	 */
+	public IConfigurationElement getElement() {
+		return this.fElement;
+	}
+
+	/**
+	 * Returns the template name.
+	 */
+	public String getName() {
+		// First of all check overrides:
+		OverrideTemplateDescriptor[] overrides = OverrideTemplateDescriptor.getByDriverTemplate(getId());
+		if (overrides != null && overrides.length > 0) {
+			if (overrides[0].getName() != null && overrides[0].getName().length() > 0) {
+				String name = overrides[0].getName();
+				if (!name.equals(getId()))
+					return name;
+			}
+		}
+		String name = this.fElement.getAttribute(NAME_ATTRIBUTE);
+		if (name == null && getId() != null)
+			name = getId();
+		return name;
+	}
+	
+	public boolean getRemoveFlag() {
+		// First of all check overrides:
+		OverrideTemplateDescriptor[] overrides = OverrideTemplateDescriptor.getByDriverTemplate(getId());
+		if (overrides != null && overrides.length > 0) {
+			if (overrides[0].getRemoveFlag()) {
+				return overrides[0].getRemoveFlag();
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Returns the default definition name.
+	 */
+	public String getDefaultDefinitionName() {
+		// First of all check overrides:
+		OverrideTemplateDescriptor[] overrides = OverrideTemplateDescriptor.getByDriverTemplate(getId());
+		if (overrides != null && overrides.length > 0) {
+			if (overrides[0].getDefaultDefinitionName() != null && overrides[0].getDefaultDefinitionName().length() > 0) {
+				String overrideDefaultDefinitionName = overrides[0].getDefaultDefinitionName();
+				if (!overrideDefaultDefinitionName.equals(getName()))
+					return overrideDefaultDefinitionName;
+			}
+		}
+		String defaultDefinitionName = this.fElement.getAttribute(DEFAULT_DEFINITION_NAME_ATTRIBUTE);
+		if (defaultDefinitionName == null && getName() != null)
+			defaultDefinitionName = getName();
+		return defaultDefinitionName;
+	}
+
+	/**
+	 * Returns the list of configuration elements for the template properties.
+	 */
+	public IConfigurationElement[] getProperties() {
+		IConfigurationElement[] propertyRoot = this.fElement
+				.getChildren(PROPERTIES_ELEMENT_TAG);
+		if (propertyRoot != null && propertyRoot.length == 1) {
+			IConfigurationElement[] childElements = propertyRoot[0]
+					.getChildren(PROPERTY_ELEMENT_TAG);
+			return childElements;
+		}
+		return new IConfigurationElement[0];
+	}
+	
+	public String getPropertyValue(String propName) {
+		String value = ""; //$NON-NLS-1$
+		IConfigurationElement[] props = getProperties();
+		for (int i = 0; i < props.length; i++) {
+			String id = props[i].getAttribute("id"); //$NON-NLS-1$
+			if (props[i].getAttribute(NAME_ATTRIBUTE) != null) {
+				String name = props[i].getAttribute(NAME_ATTRIBUTE);
+				String tempvalue = props[i].getAttribute(VALUE_ATTRIBUTE);
+				// First of all check overrides:
+				OverrideTemplateDescriptor[] overrides = OverrideTemplateDescriptor.getByDriverTemplate(getId());
+				if (overrides != null && overrides.length > 0) {
+					if (overrides[0].getPropertyValueFromId(id) != null)
+						tempvalue = overrides[0].getPropertyValueFromId(id);
+				}
+				if (name.equals(propName)) {
+					value = tempvalue;
+					break;
+				}
+			}
+		}
+		return value;
+	}
+
+	public String getPropertyValueFromId(String propId) {
+		return getPropertyAttributeValueByID(propId, VALUE_ATTRIBUTE);
+	}
+
+	private String getPropertyAttributeValueByID(String propId, String attribute) {
+		String attr_value = new String();
+		IConfigurationElement[] props = getProperties();
+		for (int i = 0; i < props.length; i++) {
+			if (props[i].getAttribute(ID_ATTRIBUTE) != null) {
+				if (propId.equals(props[i].getAttribute(ID_ATTRIBUTE))) {
+					attr_value = props[i].getAttribute(attribute);
+					break;
+				}
+			}
+		}
+		return attr_value;
+	}
+
+	public String getPropertyIDFromName(String propName) {
+		String id = new String();
+		IConfigurationElement[] props = getProperties();
+		for (int i = 0; i < props.length; i++) {
+			if (props[i].getAttribute(NAME_ATTRIBUTE) != null) {
+				if (propName.equals(props[i].getAttribute(NAME_ATTRIBUTE))) {
+					id = props[i].getAttribute(ID_ATTRIBUTE);
+					break;
+				}
+			}
+		}
+		return id;
+	}
+
+	/**
+	 * Returns the description.
+	 * 
+	 * @return the description or <code>null</code> if no description is
+	 *         provided
+	 */
+	public String getDescription() {
+		String description = this.fElement.getAttribute(DESCRIPTION_ATTRIBUTE);
+
+		OverrideTemplateDescriptor[] overrides = OverrideTemplateDescriptor.getByDriverTemplate(getId());
+		if (overrides != null && overrides.length > 0) {
+			if (overrides[0].getDescription() != null)
+				description = overrides[0].getDescription();
+		}
+		if (description == null)
+			description = ""; //$NON-NLS-1$
+		return description;
+	}
+
+	/*
+	 * Implements a method from IComparable
+	 */
+	public int compareTo(Object o) {
+		if (o instanceof TemplateDescriptor)
+			return Collator.getInstance().compare(getName(),
+					((TemplateDescriptor) o).getName());
+		return Integer.MIN_VALUE;
+	}
+
+	/**
+	 * Creates the template descriptors.
+	 */
+	private static TemplateDescriptor[] createDriverTemplateDescriptors(
+			IConfigurationElement[] elements) {
+		List result = new ArrayList(5);
+		Set descIds = new HashSet(5);
+		for (int i = 0; i < elements.length; i++) {
+			final IConfigurationElement element = elements[i];
+			if (DRIVERTEMPLATE_ELEMENT_TAG.equals(element.getName())) {
+
+				final TemplateDescriptor[] desc = new TemplateDescriptor[1];
+				SafeRunner
+						.run(new MySafeRunnable ( desc, element));
+
+				if (desc[0] != null && !descIds.contains(desc[0].getId())) {
+					result.add(desc[0]);
+					descIds.add(desc[0].getId());
+				}
+			}
+		}
+		Collections.sort(result);
+		return (TemplateDescriptor[]) result
+				.toArray(new TemplateDescriptor[result.size()]);
+	}
+	
+	/**
+	 * Determine if the template has visible properties 
+	 * @return
+	 */
+    public boolean hasVisibleProperties() {
+		IConfigurationElement[] templateprops = this.getProperties();
+		if (templateprops != null && templateprops.length > 0) {
+			for (int i=0; i < templateprops.length; i++) {
+				IConfigurationElement prop = templateprops[i];
+				String id = prop.getAttribute("id"); //$NON-NLS-1$
+				String visible = prop.getAttribute("visible"); //$NON-NLS-1$
+				// First of all check overrides:
+				OverrideTemplateDescriptor[] overrides = OverrideTemplateDescriptor.getByDriverTemplate(getId());
+				if (overrides != null && overrides.length > 0) {
+					if (overrides[0].getPropertyVisibleFromId(id) != null 
+						    && overrides[0].getPropertyVisibleFromId(id).length() > 0)
+						visible = overrides[0].getPropertyVisibleFromId(id);
+				}
+				if (visible == null || (visible.equals("true"))) { //$NON-NLS-1$
+					return true;
+				}					
+			}
+		}
+		return false;
+    }
+
+	public boolean equals(Object obj) {
+		if (obj instanceof TemplateDescriptor) {
+			TemplateDescriptor compare = (TemplateDescriptor) obj;
+			return this.getId().equals(compare.getId());
+		}
+		return super.equals(obj);
+	}
+
+	public int hashCode() {
+		if (this.getId() != null)
+			return this.getId().hashCode();
+		return super.hashCode();
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/exceptions/DBNotStartException.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/exceptions/DBNotStartException.java
new file mode 100644
index 0000000..56823c0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/exceptions/DBNotStartException.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.exceptions;
+
+import java.sql.SQLException;
+
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+
+public class DBNotStartException extends  java.lang.Exception {
+	
+	private String defaultMessage = null ;
+	
+	public DBNotStartException(String theReason, Throwable theCause){
+		super(theReason,theCause);
+	}
+	public DBNotStartException(Throwable theCause){
+		super(null,theCause);
+	}
+
+
+	public String getMessage() {
+	  String message = super.getMessage();
+	  if(message == null){
+		  if((this.getCause() != null)&&(this.getCause() instanceof  SQLException)){
+			  SQLException sqlE = (SQLException)this.getCause() ;
+			  if(sqlE.getSQLState() != null){
+				  message = this.getDefaultMessage(sqlE.getSQLState(),sqlE.getErrorCode()) ;
+			  }else{
+				  message = this.getCause().getMessage() ;
+			  }
+		  }
+	  }
+	  return message ;
+	}
+	
+	private String getDefaultMessage(String sqlState , int errorCode){
+		if(defaultMessage == null){
+			this.defaultMessage = ConnectivityPlugin.getDefault().getResourceString(
+					"error.database.not.start",
+					new Object[] {String.valueOf(errorCode), sqlState});
+		}
+		return this.defaultMessage;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/Category.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/Category.java
new file mode 100644
index 0000000..4a24400
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/Category.java
@@ -0,0 +1,96 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.runtime.PlatformObject;
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepository;
+
+public class Category extends PlatformObject implements ICategory {
+
+	private CategoryProvider mProvider;
+	private IConnectionProfileRepository mRepository;
+
+	public Category(CategoryProvider provider) {
+		this(provider, null);
+	}
+
+	public Category(CategoryProvider provider,
+					IConnectionProfileRepository repository) {
+		mProvider = provider;
+		mRepository = repository;
+	}
+
+	public List getAssociatedProfiles() {
+		if (mRepository == null) {
+			return Arrays.asList(ProfileManager.getInstance()
+					.getProfilesByCategory(getId()));
+		}
+		return Arrays.asList(mRepository.getProfilesByCategory(getId()));
+	}
+
+	public List getChildCategories() {
+		List allChildCats = mProvider.getChildCategories();
+		List childCats = new ArrayList(allChildCats.size());
+		for (Iterator it = allChildCats.iterator(); it.hasNext();) {
+			CategoryProvider provider = (CategoryProvider) it.next();
+			if (mRepository == null
+					|| mRepository.supportsCategory(provider.getId())) {
+				childCats.add(provider.createCategory(mRepository));
+			}
+		}
+		return childCats;
+	}
+
+	public String getId() {
+		return mProvider.getId();
+	}
+
+	public String getName() {
+		return mProvider.getName();
+	}
+
+	public ICategory getParent() {
+		CategoryProvider cp = mProvider.getParent();
+		return cp == null ? null : cp.createCategory(mRepository);
+	}
+	
+	public IConnectionProfile getRepositoryProfile() {
+		return mRepository == null ? null : mRepository.getRepositoryProfile();
+	}
+
+	public boolean equals(Object obj) {
+		if (obj == this) {
+			return true;
+		}
+		if (obj instanceof Category) {
+			Category other = (Category) obj;
+			return getId().equals(other.getId())
+					&& ((mRepository == null && other.mRepository == null) || (mRepository != null
+							&& other.mRepository != null && mRepository
+							.getRepositoryProfile().equals(
+									other.mRepository.getRepositoryProfile())));
+		}
+		return false;
+	}
+
+	public int hashCode() {
+		return getId().hashCode();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/CategoryProvider.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/CategoryProvider.java
new file mode 100644
index 0000000..f4012e8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/CategoryProvider.java
@@ -0,0 +1,103 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepository;
+
+/**
+ * @author shongxum
+ */
+public class CategoryProvider {
+	
+	public static final CategoryProvider UNKNOWN_CATEGORY = new CategoryProvider();
+
+	public static final String ID_CATEGORY_UNKNOWN = "org.eclipse.datatools.connectivity.category.unknown"; //$NON-NLS-1$
+
+	public static final String ATTR_ID = "id"; //$NON-NLS-1$
+
+	public static final String ATTR_PARENTCATEGORY = "parentCategory"; //$NON-NLS-1$
+
+	public static final String ATTR_NAME = "name"; //$NON-NLS-1$
+
+	private String mName;
+
+	private String mId;
+
+	private String mParentCategory;
+
+	/**
+	 * @param element
+	 */
+	public CategoryProvider(IConfigurationElement element) {
+		init(element);
+	}
+	
+	private CategoryProvider() {
+		mName = ConnectivityPlugin.getDefault().getResourceString(
+				"Category.Name.Unknown"); //$NON-NLS-1$
+		mId = ID_CATEGORY_UNKNOWN;
+		mParentCategory = null;
+	}
+
+	/**
+	 * @param element
+	 */
+	private void init(IConfigurationElement element) {
+		mId = element.getAttribute(ATTR_ID);
+		mName = element.getAttribute(ATTR_NAME);
+		mParentCategory = element.getAttribute(ATTR_PARENTCATEGORY);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.ICategory#getId()
+	 */
+	public String getId() {
+		return mId;
+	}
+
+	public String getName() {
+		return mName;
+	}
+
+	public CategoryProvider getParent() {
+		return ConnectionProfileManager.getInstance().getCategory(
+				mParentCategory);
+	}
+
+	public List getChildCategories() {
+		Map map = ConnectionProfileManager.getInstance().getCategories();
+		Set set = map.keySet();
+		ArrayList list = new ArrayList();
+		for (Iterator itr = set.iterator(); itr.hasNext();) {
+			String id = (String) itr.next();
+			CategoryProvider cat = (CategoryProvider) map.get(id);
+			if (cat.getParent() != null
+					&& cat.getParent().getId().equalsIgnoreCase(mId))
+				list.add(cat);
+		}
+		return list;
+	}
+
+	public ICategory createCategory(IConnectionProfileRepository repository) {
+		return new Category(this, repository);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ClassLoaderCacheManager.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ClassLoaderCacheManager.java
new file mode 100644
index 0000000..12738ce
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ClassLoaderCacheManager.java
@@ -0,0 +1,226 @@
+/*

+ *************************************************************************

+ * Copyright (c) 2013 Actuate Corporation.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *  Actuate Corporation - initial API and implementation

+ *  

+ *************************************************************************

+ */

+

+package org.eclipse.datatools.connectivity.internal;

+

+import java.lang.ref.SoftReference;

+import java.net.URL;

+import java.net.URLClassLoader;

+import java.util.Collections;

+import java.util.Map;

+import java.util.TreeMap;

+

+/**

+ *  An utility class that manages caching of class loaders for JDBC drivers.

+ *  @since 1.2.8 (DTP 1.11)

+ */

+public class ClassLoaderCacheManager

+{    

+    private static ClassLoaderCacheManager sm_instance = null;

+    private boolean m_isActive = false;

+    

+    private Map<ClassPathKey,SoftReference<ClassLoader>> m_classLoaders = null;

+

+    public static ClassLoaderCacheManager getInstance()

+    {

+        if( sm_instance == null )

+        {

+            synchronized( ClassLoaderCacheManager.class )

+            {

+                if( sm_instance == null )

+                    sm_instance = new ClassLoaderCacheManager();

+            }

+        }

+        return sm_instance;

+    }

+

+    /**

+     * Singleton instance release method.

+     */

+    public static void releaseInstance()

+    {

+        if( sm_instance == null )

+            return;

+        

+        synchronized( ClassLoaderCacheManager.class )

+        {

+            if( sm_instance != null )

+            {

+                sm_instance.reset();

+                sm_instance = null;

+            }

+        }

+    }

+   

+    private ClassLoaderCacheManager(){}

+    

+    private void reset()

+    {

+        m_classLoaders = null;

+    }    

+

+    private Map<ClassPathKey,SoftReference<ClassLoader>> getClassLoaders()

+    {

+        if( m_classLoaders == null )

+        {

+            synchronized( this )

+            {

+                if( m_classLoaders == null )

+                    m_classLoaders = Collections.synchronizedMap( 

+                            new TreeMap<ClassPathKey, SoftReference<ClassLoader>>() );

+            }

+        }

+        return m_classLoaders;

+    }

+    

+    public ClassLoader getDriverClassLoader( URL[] classLoaderURLs )

+    {

+        if( classLoaderURLs == null || classLoaderURLs.length == 0 )

+            return null;

+        return getDriverClassLoader( new ClassPathKey(classLoaderURLs) );

+    }

+    

+    private ClassLoader getDriverClassLoader( ClassPathKey classPaths )

+    {

+        if( classPaths == null || classPaths.getURLCount() == 0 )

+            return null;

+        SoftReference<ClassLoader> classLdrRef = getClassLoaders().get( classPaths );

+        return classLdrRef != null ? classLdrRef.get() : null;

+    }

+    

+    public void addURLClassLoader( URLClassLoader driverClassLoader )

+    {

+        if( driverClassLoader == null )

+            return;     // nothing to add

+        

+        URL[] classLoaderURLs = driverClassLoader.getURLs();

+        if( classLoaderURLs == null || classLoaderURLs.length == 0 )

+            return;     // no class path to cache by

+        

+        ClassLoader cachedClassLoader = getDriverClassLoader( classLoaderURLs );

+        if( cachedClassLoader != null && driverClassLoader.equals( cachedClassLoader ) )

+            return;     // same class loader is already cached

+        

+        getClassLoaders().put( new ClassPathKey( classLoaderURLs ), 

+                new SoftReference<ClassLoader>( driverClassLoader ));

+    }

+    

+    public void setIsActive( boolean isActive )

+    {

+        m_isActive = isActive;

+    }

+    

+    public boolean isActive()

+    {

+        return m_isActive;

+    }

+

+    /* 

+     * A private class that wraps an array of class path URLs for use as a key in a TreeMap.

+     */

+    private class ClassPathKey implements Comparable<ClassPathKey>

+    {

+        private URL[] m_classPathURLs;

+        

+        ClassPathKey( URL[] classPathURLs )

+        {

+            m_classPathURLs = classPathURLs == null ? new URL[0] : classPathURLs;

+        }

+

+        private URL[] getclassPathURLs()

+        {

+            return m_classPathURLs;

+        }

+        

+        private int getURLCount()

+        {

+            return m_classPathURLs.length;

+        }

+        

+        public int compareTo( ClassPathKey obj )

+        {

+            if( this == obj )

+                return 0;

+            if( this.getURLCount() < obj.getURLCount() )

+                return -1;

+            if( this.getURLCount() > obj.getURLCount() )

+                return 1;

+            

+            // has same number of URLs; check if all their URLs match

+            if( this.hasMatchingURLs( obj ) )

+                return 0;

+            

+            int thisHashCode = this.hashCode();

+            int objHashCode = obj.hashCode();

+            return thisHashCode < objHashCode ? -1 : 1;

+        }

+

+        private boolean hasMatchingURLs( ClassPathKey obj )

+        {

+            if( this.getURLCount() != obj.getURLCount() )

+                return false;

+            

+            URL[] thisURLs = this.getclassPathURLs();

+            URL[] objURLs = obj.getclassPathURLs();

+            for( int i=0; i < thisURLs.length; ++i )

+            {

+                URL thisURL = thisURLs[i];

+                boolean hasMatchingURL = false;

+                for( int j=0; j < objURLs.length; ++j )

+                {

+                    URL objURL = objURLs[j];

+                    if( thisURL.equals( objURL ) )

+                    {

+                        hasMatchingURL = true;

+                        break;

+                    }

+                }

+                

+                if( ! hasMatchingURL ) // no matching URL 

+                    return false;  

+            }

+            

+            // all URLs have a corresponding match

+            return true;

+        }

+        

+        /* (non-Javadoc)

+         * @see java.lang.Object#equals(java.lang.Object)

+         */

+        @Override

+        public boolean equals( Object obj )

+        {

+            if( ! (obj instanceof ClassPathKey ))

+                return false;

+    

+            return this.compareTo( (ClassPathKey)obj ) == 0;

+        }

+

+        /* (non-Javadoc)

+         * @see java.lang.Object#hashCode()

+         */

+        @Override

+        public int hashCode()

+        {

+            int hash = 0;

+            URL[] thisURLs = getclassPathURLs();

+            for( int i=0; i < thisURLs.length; ++i )

+            {

+                hash += thisURLs[i].hashCode();

+            }

+            return hash;

+        }       

+    }

+    

+}

diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/CloseManagedConnectionJob.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/CloseManagedConnectionJob.java
new file mode 100644
index 0000000..d1ab37e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/CloseManagedConnectionJob.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2011 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+
+public class CloseManagedConnectionJob extends Job {
+
+	private Object mFamily;
+	private ManagedConnection mConnection;
+
+	public CloseManagedConnectionJob(ManagedConnection connection, Object family) {
+		super(ConnectivityPlugin.getDefault()
+				.getResourceString(
+						"CloseManagedConnectionJob.name", //$NON-NLS-1$
+						new Object[] {
+								connection.getConnectionProfile().getProvider()
+										.getConnectionFactory(
+												connection.getFactoryID())
+										.getName(),
+								connection.getConnectionProfile().getName()}));
+		setUser(true);
+		mConnection = connection;
+		mFamily = family;
+	}
+
+	protected IStatus run(IProgressMonitor monitor) {
+		IStatus status = Status.OK_STATUS;
+		monitor.beginTask(getName(), IProgressMonitor.UNKNOWN);
+		try {
+			mConnection.close();
+		}
+		catch (Exception e) {
+			status = new Status(IStatus.ERROR, 
+			        ConnectivityPlugin.getSymbolicName(), -1, 
+			        ConnectivityPlugin.getDefault().getResourceString(
+							"CloseManagedConnectionJob.error", //$NON-NLS-1$
+							new Object[] {
+									mConnection.getConnectionProfile()
+											.getProvider()
+											.getConnectionFactory(
+													mConnection.getFactoryID())
+											.getName(),
+									mConnection.getConnectionProfile()
+											.getName(), e.getMessage()}), e);
+		}
+		monitor.done();
+		return status;
+	}
+
+	public boolean belongsTo(Object family) {
+		return mFamily != null && family == mFamily;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ConfigurationTypeProvider.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ConfigurationTypeProvider.java
new file mode 100644
index 0000000..cd1aea7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ConfigurationTypeProvider.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.datatools.connectivity.IConfigurationType;
+
+/**
+ * @author shongxum
+ */
+public class ConfigurationTypeProvider implements IConfigurationType {
+
+	public static final String ATTR_ID = "id"; //$NON-NLS-1$
+	public static final String ATTR_NAME = "name"; //$NON-NLS-1$
+
+	private String mName;
+	private String mId;
+
+	/**
+	 * @param element
+	 */
+	public ConfigurationTypeProvider(IConfigurationElement element) {
+		init(element);
+	}
+
+	/**
+	 * @param element
+	 */
+	private void init(IConfigurationElement element) {
+		mId = element.getAttribute(ATTR_ID);
+		mName = element.getAttribute(ATTR_NAME);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConfigurationType#getId()
+	 */
+	public String getId() {
+		return mId;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConfigurationType#getName()
+	 */
+	public String getName() {
+		return mName;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ConnectionFactoryAdapter.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ConnectionFactoryAdapter.java
new file mode 100644
index 0000000..eea85ea
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ConnectionFactoryAdapter.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class ConnectionFactoryAdapter {
+
+	private ConnectionFactoryAdapterProvider mDefaultFactoryAdapter;
+	private Map mFactoryAdapterOverrides;
+	private final String mId;
+	private final String mFactoryId;
+
+	public ConnectionFactoryAdapter(String id, String factoryId) {
+		super();
+		mId = id;
+		mFactoryId = factoryId;
+		mFactoryAdapterOverrides = new HashMap();
+	}
+
+	public String getId() {
+		return mId;
+	}
+
+	public String getFactoryId() {
+		return mFactoryId;
+	}
+
+	public ConnectionFactoryAdapterProvider getDefault() {
+		return mDefaultFactoryAdapter;
+	}
+
+	public ConnectionFactoryAdapterProvider getOverride(String profileId) {
+		if (mFactoryAdapterOverrides.containsKey(profileId)) {
+			return (ConnectionFactoryAdapterProvider) mFactoryAdapterOverrides
+					.get(profileId);
+		}
+		return null;
+	}
+
+	public void addAdapter(ConnectionFactoryAdapterProvider adapter) {
+		if (adapter.isDefault()) {
+			if (mDefaultFactoryAdapter == null) {
+				mDefaultFactoryAdapter = adapter;
+			}
+			else {
+				if (ConnectionProfileManager.DEBUG_CONNECTION_PROFILE_EXTENSION) {
+					System.err
+							.println(ConnectivityPlugin
+									.getDefault()
+									.getResourceString(
+											"trace.error.multipleDefaultConnectionAdapters", //$NON-NLS-1$
+											new Object[] { mId,
+													mFactoryId}));
+				}
+			}
+		}
+		else {
+			if (mFactoryAdapterOverrides.containsKey(adapter.getProfileOverride())) {
+				if (ConnectionProfileManager.DEBUG_CONNECTION_PROFILE_EXTENSION) {
+					System.err
+							.println(ConnectivityPlugin
+									.getDefault()
+									.getResourceString(
+											"trace.error.multipleConnectionAdapterOverrides", //$NON-NLS-1$
+											new Object[] {
+													mId,
+													mFactoryId,
+													adapter
+															.getProfileOverride()}));
+				}
+			}
+			else {
+				mFactoryAdapterOverrides.put(adapter.getProfileOverride(), adapter);
+			}
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ConnectionFactoryAdapterProvider.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ConnectionFactoryAdapterProvider.java
new file mode 100644
index 0000000..d064247
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ConnectionFactoryAdapterProvider.java
@@ -0,0 +1,179 @@
+/*******************************************************************************
+ * Copyright (c) 2006-2011 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ *           IBM Corporation - fix for defect 222818
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.ISafeRunnable;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionFactory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IOfflineConnection;
+import org.eclipse.datatools.connectivity.IOfflineConnectionFactory;
+
+public class ConnectionFactoryAdapterProvider implements InternalConnectionFactoryProvider {
+
+	public static final String ATTR_FACTORY = "factory"; //$NON-NLS-1$
+	public static final String ATTR_ID = "id"; //$NON-NLS-1$
+	public static final String ATTR_PROFILE = "profile"; //$NON-NLS-1$
+	public static final String ATTR_NAME = "name"; //$NON-NLS-1$
+	public static final String ATTR_CLASS = "class"; //$NON-NLS-1$
+
+	private String mFactoryId;
+	private String mName;
+	private String mId;
+	private String mProfileOverride;
+	private IConnectionFactory mConnectionFactory;
+	private IConfigurationElement mElement;
+
+	public ConnectionFactoryAdapterProvider(IConfigurationElement element) {
+		super();
+		init(element);
+	}
+
+	public IConfigurationElement getConfigurationElement() {
+		return mElement;
+	}
+
+	public String getId() {
+		return mId;
+	}
+	
+	public String getName() {
+		return mName;
+	}
+
+	public boolean isDefault() {
+		return mProfileOverride == null || mProfileOverride.length() == 0;
+	}
+
+	public String getFactoryId() {
+		return mFactoryId;
+	}
+
+	public String getProfileOverride() {
+		return mProfileOverride;
+	}
+
+	public Class getConnectionFactoryClass() {
+		initFactory();
+		if (mConnectionFactory == null) {
+			return null;
+		}
+		return mConnectionFactory.getClass();
+	}
+
+	public IConnection createConnection(IConnectionProfile profile) {
+		initFactory();
+		if (mConnectionFactory == null) {
+			return null;
+		}
+		if (supportsWorkOfflineMode()) {
+			return createConnection(profile,new NullProgressMonitor());
+		}
+		return mConnectionFactory.createConnection(profile);
+	}
+
+	public IConnection createConnection(IConnectionProfile profile, String uid,
+			String pwd) {
+		initFactory();
+		if (mConnectionFactory == null) {
+			return null;
+		}
+		return mConnectionFactory.createConnection(profile, uid, pwd);
+	}
+
+	public boolean supportsWorkOfflineMode() {
+		initFactory();
+		return mConnectionFactory != null
+				&& mConnectionFactory instanceof IOfflineConnectionFactory;
+	}
+
+	public boolean canWorkOffline(IConnectionProfile profile) {
+		return supportsWorkOfflineMode()
+				&& ((IOfflineConnectionFactory) mConnectionFactory)
+						.canWorkOffline(profile);
+	}
+
+	public IOfflineConnection createConnection(IConnectionProfile profile,
+			IProgressMonitor monitor) {
+		if (supportsWorkOfflineMode()) {
+			return ((IOfflineConnectionFactory) mConnectionFactory)
+					.createConnection(profile, monitor);
+		}
+		return null;
+	}
+
+	public IOfflineConnection createOfflineConnection(
+			IConnectionProfile profile, IProgressMonitor monitor) {
+		if (supportsWorkOfflineMode()) {
+			return ((IOfflineConnectionFactory) mConnectionFactory)
+					.createOfflineConnection(profile, monitor);
+		}
+		return null;
+	}
+
+	private void init(IConfigurationElement element) {
+		mElement = element;
+		mName = element.getAttribute(ATTR_NAME);
+		mFactoryId = element.getAttribute(ATTR_FACTORY);
+		mId = element.getAttribute(ATTR_ID);
+		mProfileOverride = element.getAttribute(ATTR_PROFILE);
+	}
+
+	private void initFactory() {
+		if (mConnectionFactory != null) {
+			return;
+		}
+		final IConnectionFactory[] result = new IConnectionFactory[1];
+		ISafeRunnable code = new ISafeRunnable() {
+
+			/*
+			 * @see org.eclipse.core.runtime.ISafeRunnable#run()
+			 */
+			public void run() throws Exception {
+				result[0] = (IConnectionFactory) mElement
+						.createExecutableExtension(ATTR_CLASS);
+			}
+
+			public void handleException(Throwable exception) {
+				ConnectivityPlugin
+						.getDefault()
+						.log(
+								new Status(
+										Status.ERROR,
+										ConnectivityPlugin.getSymbolicName(),
+										-1,
+										ConnectivityPlugin
+												.getDefault()
+												.getResourceString(
+														"dialog.title.error.loadconnectionfactory", //$NON-NLS-1$
+														new Object[] { mElement
+																.getContributor()
+																.getName()}),
+										exception));
+			}
+
+		};
+		SafeRunner.run(code);
+		mConnectionFactory = result[0];
+	}
+
+	public String getPriority() {
+		// Return null since since connection factory adapters do not support priority
+		return null;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ConnectionFactoryProvider.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ConnectionFactoryProvider.java
new file mode 100644
index 0000000..1c41db5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ConnectionFactoryProvider.java
@@ -0,0 +1,212 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ *              IBM Corporation - fix for defect 222818
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.ISafeRunnable;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionFactory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IConnectionProfileProvider;
+import org.eclipse.datatools.connectivity.IOfflineConnection;
+import org.eclipse.datatools.connectivity.IOfflineConnectionFactory;
+
+/**
+ * @author rcernich
+ * 
+ * Created on Jan 16, 2004
+ */
+public class ConnectionFactoryProvider implements InternalConnectionFactoryProvider {
+
+	public static final String ATTR_ID = "id"; //$NON-NLS-1$
+
+	public static final String ATTR_PROFILE = "profile"; //$NON-NLS-1$
+
+	public static final String ATTR_CLASS = "class"; //$NON-NLS-1$
+
+	public static final String ATTR_NAME = "name"; //$NON-NLS-1$
+	
+	public static final String ATTR_PRIORITY = "priority"; //$NON-NLS-1$
+
+	private String mId;
+
+	private String mName;
+	
+	private String mPriority;
+
+	private String mProfile;
+	
+	private String mClassAttr;
+
+	private IConnectionFactory mFactory;
+
+	private IConfigurationElement mElement;
+
+	public ConnectionFactoryProvider(IConfigurationElement element) {
+		super();
+		init(element);
+	}
+	
+	public ConnectionFactoryProvider(IConfigurationElement element, String factoryID, String profileID, String classAttr, String priority) {
+		super();
+		mElement = element;
+		mId = factoryID;
+		mProfile = profileID;
+		mClassAttr = classAttr;
+		mPriority = priority;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionFactoryProvider#createConnection(org.eclipse.datatools.connectivity.IConnectionProfile)
+	 */
+	public IConnection createConnection(IConnectionProfile profile) {
+		initFactory();
+		if (supportsWorkOfflineMode()) {
+			return createConnection(profile, new NullProgressMonitor());
+		}
+		else if (mFactory != null) {
+			return mFactory.createConnection(profile);
+		}
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionFactoryProvider#createConnection(org.eclipse.datatools.connectivity.IConnectionProfile,
+	 *      java.lang.String, java.lang.String)
+	 */
+	public IConnection createConnection(IConnectionProfile profile, String uid,
+			String pwd) {
+		initFactory();
+		if (mFactory != null)
+			if (uid != null)
+				return mFactory.createConnection(profile, uid, pwd);
+			else
+				return createConnection(profile);
+		else
+			return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionFactoryProvider#getConnectionProfileProvider()
+	 */
+	public IConnectionProfileProvider getConnectionProfileProvider() {
+		return ConnectionProfileManager.getInstance().getProvider(mProfile);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionFactoryProvider#getId()
+	 */
+	public String getId() {
+		return mId;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionFactoryProvider#getName()
+	 */
+	public String getName() {
+		return mName;
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionFactoryProvider#getPriority()
+	 */
+	public String getPriority() {
+		return mPriority;
+	}
+
+	private void init(IConfigurationElement element) {
+		Assert.isTrue(ConnectionProfileManager.EXT_ELEM_CONNECTION_FACTORY
+				.equals(element.getName()));
+
+		mElement = element;
+
+		mId = element.getAttribute(ATTR_ID);
+		mName = element.getAttribute(ATTR_NAME);
+		mProfile = element.getAttribute(ATTR_PROFILE);
+		mClassAttr = ATTR_CLASS;
+		mPriority = element.getAttribute(ATTR_PRIORITY);
+	}
+
+	public Class getConnectionFactoryClass() {
+		initFactory();
+		return mFactory.getClass();
+	}
+
+	public boolean supportsWorkOfflineMode() {
+		initFactory();
+		return mFactory != null
+				&& mFactory instanceof IOfflineConnectionFactory;
+	}
+
+	public boolean canWorkOffline(IConnectionProfile profile) {
+		return supportsWorkOfflineMode()
+				&& ((IOfflineConnectionFactory) mFactory)
+						.canWorkOffline(profile);
+	}
+
+	public IOfflineConnection createConnection(IConnectionProfile profile,
+			IProgressMonitor monitor) {
+		if (supportsWorkOfflineMode()) {
+			return ((IOfflineConnectionFactory) mFactory).createConnection(
+					profile, monitor);
+		}
+		return null;
+	}
+
+	public IOfflineConnection createOfflineConnection(
+			IConnectionProfile profile, IProgressMonitor monitor) {
+		if (supportsWorkOfflineMode()) {
+			return ((IOfflineConnectionFactory) mFactory)
+					.createOfflineConnection(profile, monitor);
+		}
+		return null;
+	}
+
+	private void initFactory() {
+		if (mFactory != null)
+			return;
+		final IConnectionFactory[] result = new IConnectionFactory[1];
+		ISafeRunnable code = new ISafeRunnable() {
+
+			/*
+			 * @see org.eclipse.core.runtime.ISafeRunnable#run()
+			 */
+			public void run() throws Exception {
+				result[0] = (IConnectionFactory) mElement
+						.createExecutableExtension(mClassAttr);
+			}
+
+			public void handleException(Throwable exception) {
+				ConnectivityPlugin.getDefault().log(exception);
+			}
+
+		};
+		SafeRunner.run(code);
+		mFactory = result[0];
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ConnectionProfile.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ConnectionProfile.java
new file mode 100644
index 0000000..01d7b31
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ConnectionProfile.java
@@ -0,0 +1,1400 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2013 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich, shongxum - initial API and implementation
+ *     Actuate Corporation - transient and external profiles handling (bug #310356, #413778)
+ *
+ ******************************************************************************/
+
+package org.eclipse.datatools.connectivity.internal;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Vector;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.PlatformObject;
+import org.eclipse.core.runtime.QualifiedName;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.SubProgressMonitor;
+import org.eclipse.core.runtime.jobs.IJobChangeListener;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.datatools.connectivity.ConnectEvent;
+import org.eclipse.datatools.connectivity.ConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.ConnectionProfileException;
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.IConfigurationType;
+import org.eclipse.datatools.connectivity.IConnectListener;
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IConnectionProfileMigrator;
+import org.eclipse.datatools.connectivity.IConnectionProfileProvider;
+import org.eclipse.datatools.connectivity.IManagedConnection;
+import org.eclipse.datatools.connectivity.IPropertySetChangeEvent;
+import org.eclipse.datatools.connectivity.IPropertySetListener;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.ProfileRule;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepository;
+
+/**
+ * @author rcernich, shongxum
+ */
+public class ConnectionProfile extends PlatformObject implements
+		IConnectionProfile {
+
+    static final String PROPERTY_PREFIX = "org.eclipse.ui.workbench.progress"; //$NON-NLS-1$
+
+    public static final QualifiedName NO_IMMEDIATE_ERROR_PROMPT_PROPERTY = new QualifiedName(
+            PROPERTY_PREFIX, "delayErrorPrompt"); //$NON-NLS-1$
+    
+    // (String id,Properties props)
+	private Map mPropertiesMap = new HashMap();
+	private String mName;
+	private String mDescription;
+	private String mParentProfile = ""; //$NON-NLS-1$
+	private boolean mAutoConnect = false;
+	private String mProfileId;
+	private ConnectionProfileProvider mProvider = null;
+	private int mConnectionState = DISCONNECTED_STATE;
+	private ListenerList mConnectListeners = new ListenerList();
+	private ListenerList mPropertySetListeners = new ListenerList();
+	private boolean mIsCreating;
+	private String mInstanceID;
+	private Map mFactoryIDToManagedConnection;
+	private IConnectionProfileRepository mRepository;
+
+	public ConnectionProfile(String name, String desc, String providerID) {
+		this(name, desc, providerID, "", false); //$NON-NLS-1$
+	}
+
+	public ConnectionProfile(String name, String desc, String providerID,
+								String parentProfile) {
+		this(name, desc, providerID, parentProfile, false);
+	}
+
+	public ConnectionProfile(String name, String desc, String providerID,
+								String parentProfile, boolean autoConnect) {
+		this(name, desc, providerID, parentProfile, autoConnect, null);
+	}
+
+	public ConnectionProfile(String name, String desc, String providerID,
+								String parentProfile, boolean autoConnect,
+								String instanceID) {
+		mName = name;
+		mDescription = desc;
+		mProfileId = providerID;
+		mProvider = (ConnectionProfileProvider) ConnectionProfileManager
+				.getInstance().getProvider(mProfileId);
+		mParentProfile = parentProfile;
+		mAutoConnect = autoConnect;
+		mIsCreating = true;
+		mInstanceID = instanceID;
+		
+		initManagedConnections();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionProfile#getName()
+	 */
+	public String getName() {
+		return mName;
+	}
+	
+	public String getProfilePath() {
+		if (mParentProfile == null) {
+			return getName();
+		}
+		else {
+			return ((ConnectionProfile) getParentProfile()).getProfilePath()
+					+ InternalProfileManager.PROFILE_PATH_SEPARATOR + getName();
+		}
+	}
+
+	/*
+	 * For internal use only
+	 */
+	public void setName(String name) {
+		mName = name;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionProfile#getDescription()
+	 */
+	public String getDescription() {
+		return mDescription;
+	}
+
+	/**
+	 * @return Returns the mAutoConnect.
+	 */
+	public boolean isAutoConnect() {
+		return mAutoConnect;
+	}
+
+	/**
+	 * @param autoConnect The mAutoConnect to set.
+	 */
+	public void setAutoConnect(boolean autoConnect) {
+		mAutoConnect = autoConnect;
+	}
+
+	/*
+	 * For internal use only
+	 */
+	public void setDescription(String desc) {
+		mDescription = desc;
+	}
+
+	public String getInstanceID() {
+		if (mInstanceID == null) {
+			mInstanceID = UUID.createUUID().toString();
+		}
+		return mInstanceID;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionProfile#getParentProfile()
+	 */
+	public IConnectionProfile getParentProfile() {
+		if (mParentProfile == null || mParentProfile.length() == 0) {
+			return null;
+		}
+		return ProfileManager.getInstance().getProfileByInstanceID(mParentProfile);
+	}
+
+	
+	public IConnectionProfileRepository getRepository() {
+		return mRepository;
+	}
+
+	
+	public void setRepository(IConnectionProfileRepository repository) {
+		mRepository = repository;
+		if (mRepository == null) {
+			mParentProfile = null;
+		}
+		else {
+			mParentProfile = mRepository.getRepositoryProfile().getInstanceID();
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionProfile#getBaseProperties()
+	 */
+	public Properties getBaseProperties() {
+		return getProperties(mProfileId);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionProfile#setBaseProperties(java.util.Properties)
+	 */
+	public void setBaseProperties(Properties props) {
+		setProperties(mProfileId, props);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionProfile#getProperties(java.lang.String)
+	 */
+	public Properties getProperties(String type) {
+		Properties retVal = new Properties();
+		Properties props = (Properties) mPropertiesMap.get(type);
+		if (props != null) {
+			retVal.putAll(props);
+		}
+		return retVal;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionProfile#setProperties(java.lang.String,
+	 *      java.util.Properties)
+	 */
+	public void setProperties(String type, Properties props) {
+		Properties oldProps = (Properties)mPropertiesMap.get(type);
+		internalSetProperties(type, props);
+		notifyManager();
+		firePropertySetChangeEvent(type,oldProps,props);
+	}
+
+	public void internalSetProperties(String type, Properties props) {
+		if (props == null) {
+			mPropertiesMap.remove(type);
+		}
+		else {
+			Properties newProps = new Properties();
+			newProps.putAll(props);
+			mPropertiesMap.put(type, newProps);
+		}
+		InternalProfileManager.getInstance().setDirty(true);
+	}
+
+	public boolean arePropertiesComplete() {
+		boolean retVal = mProvider.getPropertiesPersistenceHook()
+				.arePropertiesComplete(
+						(Properties) mPropertiesMap.get(mProfileId));
+		for (Iterator it = getProfileExtensions().entrySet().iterator(); retVal
+				&& it.hasNext();) {
+			Map.Entry entry = (Map.Entry) it.next();
+			ProfileExtensionProvider pep = (ProfileExtensionProvider) entry
+					.getValue();
+			retVal = pep.getPropertiesPersistenceHook().arePropertiesComplete(
+					(Properties) mPropertiesMap.get(entry.getKey()));
+		}
+		return retVal;
+	}
+
+	public boolean arePropertiesComplete(String type) {
+		if (mProvider.getId().equals(type)) {
+			return mProvider.getPropertiesPersistenceHook()
+					.arePropertiesComplete(getBaseProperties());
+		}
+		ProfileExtensionProvider pep = (ProfileExtensionProvider) mProvider
+				.getProfileExtensions().get(type);
+		if (pep != null) {
+			return pep.getPropertiesPersistenceHook().arePropertiesComplete(
+					(Properties) mPropertiesMap.get(type));
+		}
+		return true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionProfile#getProviderName()
+	 */
+	public String getProviderName() {
+		return mProvider.getName();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionProfile#getProviderId()
+	 */
+	public String getProviderId() {
+		return mProfileId;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionProfile#getCategory()
+	 */
+	public ICategory getCategory() {
+		ICategory cat = mProvider.getCategory();
+		IConnectionProfile parent = getParentProfile();
+		if (parent == null
+				|| parent.getConnectionState() == IConnectionProfile.DISCONNECTED_STATE) {
+			return cat;
+		}
+		IManagedConnection imc = parent
+				.getManagedConnection(IConnectionProfileRepository.class
+						.getName());
+		if (imc == null || !imc.isConnected()) {
+			return cat;
+		}
+		IConnectionProfileRepository repo = (IConnectionProfileRepository) imc
+				.getConnection().getRawConnection();
+		return repo.getCategory(cat.getId());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionProfile#getConfigurationType()
+	 */
+	public IConfigurationType getConfigurationType() {
+		return mProvider.getConfigurationType();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionProfile#getProfileExtensions()
+	 */
+	public Map getProfileExtensions() {
+		return mProvider.getProfileExtensions();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionProfile#createConnection(java.lang.String)
+	 */
+	public IConnection createConnection(String factoryId) {
+		return mProvider.getConnectionFactory(factoryId).createConnection(this);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionProfile#createConnection(java.lang.String,
+	 *      java.lang.String, java.lang.String)
+	 */
+	public IConnection createConnection(String factoryId, String uid, String pwd) {
+		return mProvider.getConnectionFactory(factoryId).createConnection(this,
+				uid, pwd);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.IConnectionProfile#getSharedConnection(java.lang.String)
+	 */
+	public IManagedConnection getManagedConnection(String type) {
+		return (IManagedConnection) mFactoryIDToManagedConnection.get(type);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionProfile#getProvider()
+	 */
+	public IConnectionProfileProvider getProvider() {
+		return mProvider;
+	}
+
+	public void setConnected(boolean connected) {
+		if (connected) {
+			connect();
+		}
+		else {
+			disconnect();
+		}
+	}
+	
+	public void migrate() {
+		IConnectionProfileMigrator migrator = mProvider.getMigrator();
+		if (migrator == null) {
+			return;
+		}
+		boolean oldIsCreating = mIsCreating;
+		mIsCreating = true;
+		try {
+			String newID = migrator.getNewProviderID();
+			if (newID != null && !newID.equals(mProfileId)) {
+				// Take care of migrating to the new provider
+				// get the existing base properties
+				Properties baseProps = getBaseProperties();
+				// set the current base properties to null
+				setBaseProperties(null);
+				// update the profile provider and provider id
+				mProfileId = newID;
+				mProvider = (ConnectionProfileProvider) ConnectionProfileManager
+						.getInstance().getProvider(newID);
+				// restore the base properties using the new provider id
+				setBaseProperties(baseProps);
+				// re-initialize the managed connections
+				initManagedConnections();
+			}
+			// let the migrator do its thing
+			migrator.performMigration(this);
+			/*
+			 * RJC: TODO: Think about adding migration support to profile
+			 * extensions. We need to get the list of extensions from the old
+			 * provider. Should we delete extensions that do not apply to the
+			 * new provider?
+			 */
+		}
+		finally {
+			mIsCreating = oldIsCreating;
+		}
+	}
+
+	public boolean isConnected() {
+		return mConnectionState == CONNECTED_STATE;
+	}
+
+	public int getConnectionState() {
+		return mConnectionState;
+	}
+
+	public IStatus connectWithoutJob() {
+		IStatus returnStatus = null;
+		if (getConnectionState() == CONNECTED_STATE) {
+			return Status.OK_STATUS;
+		}
+
+		// Create shared connections
+		Vector connectionStatuses = new Vector();
+		List connectionJobs = new ArrayList(mFactoryIDToManagedConnection.size());
+		for (Iterator it = mFactoryIDToManagedConnection.values().iterator(); it
+				.hasNext();) {
+			CreateConnectionJob connectionJob = new CreateConnectionJob(
+					(ManagedConnection) it.next(), this);
+			IStatus status = connectionJob.run(new NullProgressMonitor());
+			connectionJobs.add(connectionJob);	
+			connectionStatuses.add(status);
+		}
+
+		// Notify any connect listeners
+		ConnectEvent event = new ConnectEvent(ConnectionProfile.this);
+		Object[] listeners = mConnectListeners.getListeners();
+		for (int index = 0, count = listeners.length; index < count; ++index) {
+			OpenConnectionEventJob connectionEventJob = new OpenConnectionEventJob(
+					(IConnectListener) listeners[index], event, this);
+			connectionEventJob.setProperty(ConnectionProfile.NO_IMMEDIATE_ERROR_PROMPT_PROPERTY,Boolean.TRUE);
+			connectionEventJob.run(new NullProgressMonitor());
+		}
+
+		
+		boolean someOK = false;
+		int severity = 0;
+		List statuses = new ArrayList(connectionStatuses.size());
+		for (Iterator it = connectionStatuses.iterator(); it.hasNext();) {
+			IStatus status = (IStatus) it
+					.next();
+			if (status.getSeverity() == IStatus.ERROR) {
+			}
+			else {
+				someOK = someOK || (status.getSeverity() == IStatus.OK)
+						|| (status.getSeverity() == IStatus.INFO);
+			}
+			severity |= status.getSeverity();
+			statuses.add(status);
+		}
+
+		if (someOK) {
+			// Notify any property listeners of a state change
+			int oldConnectionState = mConnectionState;
+			mConnectionState = CONNECTED_STATE;
+			Properties oldProperties = new Properties();
+			Properties newProperties = new Properties();
+			oldProperties.setProperty(CONNECTED_PROPERTY_ID, Boolean.FALSE
+					.toString());
+			newProperties.setProperty(CONNECTED_PROPERTY_ID, Boolean.TRUE
+					.toString());
+			oldProperties.setProperty(CONNECTION_STATE_PROPERTY_ID, Integer
+					.toString(oldConnectionState));
+			newProperties.setProperty(CONNECTION_STATE_PROPERTY_ID, Integer
+					.toString(CONNECTED_STATE));
+			firePropertySetChangeEvent(new PropertySetChangeEvent(
+					ConnectionProfile.this,
+					CONNECTION_PROFILE_PROPERTY_SET, oldProperties,
+					newProperties));
+		}
+
+		if (severity == IStatus.OK) { // all OK
+			returnStatus = Status.OK_STATUS;
+		}
+		else {
+			returnStatus = new ConnectMultiStatus(IStatus.ERROR,
+					(IStatus[]) statuses.toArray(new IStatus[statuses
+							.size()]), ConnectivityPlugin.getDefault()
+							.getResourceString(
+									"ConnectJob.status.error", //$NON-NLS-1$
+									new Object[] { ConnectionProfile.this
+											.getName()}));
+		}
+
+		return returnStatus;
+	}
+	
+	public IStatus connect() {
+		/*
+		 * Cancel any jobs currently associated with this profile. Specifically,
+		 * we want to make sure any RefreshProfileJobs are cancelled to prevent
+		 * deadlock in the UI thread.
+		 */
+		Job.getJobManager().cancel(this);
+
+		Job connectJob = new ConnectJob();
+		connectJob.schedule();
+		try {
+			connectJob.join();
+		}
+		catch (InterruptedException e) {
+		}
+
+		return connectJob.getResult();
+	}
+
+	public void connect(IJobChangeListener listener) {
+		Job connectJob = new ConnectJob();
+
+		if (listener != null) {
+			connectJob.addJobChangeListener(listener);
+		}
+
+		connectJob.schedule();
+	}
+
+	public IStatus disconnect() {
+		/*
+		 * Cancel any jobs currently associated with this profile. Specifically,
+		 * we want to make sure any RefreshProfileJobs are cancelled to prevent
+		 * deadlock in the UI thread.
+		 */
+		Job.getJobManager().cancel(this);
+
+		Job disconnectJob = new DisconnectJob();
+		disconnectJob.schedule();
+		try {
+			disconnectJob.join();
+		}
+		catch (InterruptedException e) {
+		}
+
+		clearPasswordIfNotCached();
+		return disconnectJob.getResult();
+	}
+
+	public void disconnect(IJobChangeListener listener) {
+		Job disconnectJob = new DisconnectJob();
+
+		if (listener != null) {
+			disconnectJob.addJobChangeListener(listener);
+		}
+
+		disconnectJob.schedule();
+		clearPasswordIfNotCached();
+	}
+
+	/*
+	 * The password will be cleared when a user disconnects. If the save password option is checked,
+	 * the password will not be cleared.
+	 * Clearing password is applicable only if this profile instance is persisted in the workspace'
+	 * connection profile store.
+	 */
+	public void clearPasswordIfNotCached() 
+	{
+		Properties properties = getBaseProperties();
+		String savePassword = properties.getProperty(IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID);
+		if ( Boolean.valueOf(savePassword) == Boolean.FALSE &&
+		        !InternalProfileManager.isTransientProfile(this) &&
+		        InternalProfileManager.getInstance().getProfileByName( getName(), false ) != null ) {
+			properties.remove(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID);
+			setBaseProperties(properties);
+		}
+	}
+	
+	public boolean canWorkOffline() {
+		boolean retVal = false;
+		for (Iterator it = mFactoryIDToManagedConnection.values().iterator(); !retVal
+				&& it.hasNext();) {
+			retVal = ((ManagedConnection) it.next()).canWorkOffline();
+		}
+		return retVal;
+	}
+
+	public boolean supportsWorkOfflineMode() {
+		boolean retVal = false;
+		for (Iterator it = mFactoryIDToManagedConnection.values().iterator(); !retVal
+				&& it.hasNext();) {
+			retVal = ((ManagedConnection) it.next()).supportsWorkOfflineMode();
+		}
+		return retVal;
+	}
+
+	public IStatus workOffline() {
+		/*
+		 * Cancel any jobs currently associated with this profile. Specifically,
+		 * we want to make sure any RefreshProfileJobs are cancelled to prevent
+		 * deadlock in the UI thread.
+		 */
+		Job.getJobManager().cancel(this);
+
+		Job workOfflineJob = new WorkOfflineJob();
+		workOfflineJob.schedule();
+		try {
+			workOfflineJob.join();
+		}
+		catch (InterruptedException e) {
+		}
+
+		return workOfflineJob.getResult();
+	}
+
+	public void workOffline(IJobChangeListener listener) {
+		Job workOfflineJob = new WorkOfflineJob();
+
+		if (listener != null) {
+			workOfflineJob.addJobChangeListener(listener);
+		}
+
+		workOfflineJob.schedule();
+	}
+
+	public IStatus saveWorkOfflineData() {
+		Job saveWorkOfflineDataJob = new SaveWorkOfflineDataJob();
+		saveWorkOfflineDataJob.schedule();
+		try {
+			saveWorkOfflineDataJob.join();
+		}
+		catch (InterruptedException e) {
+		}
+
+		return saveWorkOfflineDataJob.getResult();
+	}
+
+	public void saveWorkOfflineData(IJobChangeListener listener) {
+		Job saveWorkOfflineDataJob = new SaveWorkOfflineDataJob();
+		
+		if (listener != null) {
+			saveWorkOfflineDataJob.addJobChangeListener(listener);
+		}
+		
+		saveWorkOfflineDataJob.schedule();
+	}
+
+	public void addConnectListener(IConnectListener listener) {
+		mConnectListeners.add(listener);
+	}
+
+	public void removeConnectListener(IConnectListener listener) {
+		mConnectListeners.remove(listener);
+	}
+
+	public void addPropertySetListener(IPropertySetListener listener) {
+		mPropertySetListeners.add(listener);
+	}
+
+	public void removePropertySetListener(IPropertySetListener listener) {
+		mPropertySetListeners.remove(listener);
+	}
+
+	protected void firePropertySetChangeEvent(String type,Properties oldProps, Properties newProps) {
+		if (oldProps == null) {
+			oldProps = new Properties();
+		}
+		if (newProps == null) {
+			newProps = new Properties();
+		}
+		IPropertySetChangeEvent event = new PropertySetChangeEvent(this, type, oldProps, newProps);
+		firePropertySetChangeEvent(event);
+	}
+
+	protected void firePropertySetChangeEvent(IPropertySetChangeEvent event) {
+		if (event.getChangedProperties().size() == 0) {
+			return;
+		}
+
+		Object[] listeners = mPropertySetListeners.getListeners();
+		for (int index = 0, count = listeners.length; index < count; ++index) {
+			try {
+				((IPropertySetListener) listeners[index])
+						.propertySetChanged(event);
+			}
+			catch (Throwable e) {
+				ConnectivityPlugin.getDefault().log(e);
+			}
+		}
+	}
+	
+	/*package*/Map getPropertiesMap() {
+		return Collections.unmodifiableMap(mPropertiesMap);
+	}
+
+	private void notifyManager() {
+	    // notify manager only when updating a non-transient profile;
+	    // note that transient profile has no listener; thus no need to manage its updates (BZ 310356)
+		if (!mIsCreating && !InternalProfileManager.isTransientProfile(this) )
+			try {
+				InternalProfileManager.getInstance().modifyProfile(this);
+			}
+			catch (ConnectionProfileException e) {
+			    if( mConnectListeners.size() > 0 )   // log only if there are listeners that might care
+			        ConnectivityPlugin.getDefault().log(e);
+			}
+	}
+
+	public void setCreated() {
+		mIsCreating = false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Object#equals(java.lang.Object)
+	 */
+	public boolean equals(Object obj) {
+		if (obj instanceof ConnectionProfile) {
+			return obj == this
+					|| (((ConnectionProfile) obj).getInstanceID().equals(getInstanceID()) && (((ConnectionProfile) obj).getName().equals(getName())));
+		}
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Object#hashCode()
+	 */
+	public int hashCode() {
+		return getInstanceID().hashCode();
+	}
+	
+	public void dispose() {
+		Job disconnectJob = new DisconnectJob(true);
+		disconnectJob.schedule();
+		try {
+			disconnectJob.join();
+		}
+		catch (InterruptedException e) {
+		}
+		mPropertySetListeners.clear();
+		mConnectListeners.clear();
+		for (Iterator it = mFactoryIDToManagedConnection.values()
+				.iterator(); it.hasNext();) {
+			ManagedConnection managedConnection = (ManagedConnection) it
+					.next();
+			managedConnection.dispose();
+		}
+		mFactoryIDToManagedConnection.clear();
+	}
+	
+	private void initManagedConnections() {
+		Map connectionFactories = mProvider.getConnectionFactories();
+		connectionFactories.remove(ConnectionProfileConstants.PING_FACTORY_ID);
+		mFactoryIDToManagedConnection = new HashMap(connectionFactories.size());
+		for (Iterator it = connectionFactories.keySet().iterator(); it.hasNext();) {
+			String factoryID = (String)it.next();
+			mFactoryIDToManagedConnection.put(factoryID, new ManagedConnection(
+					this, factoryID));
+		}
+	}
+
+	private void addFailureMarker(IStatus result) {
+        // maintenance of problem markers is only applicable on OSGi platform
+        if( ! ConnectivityPlugin.isRunningOSGiPlatform() )
+            return;
+        
+		IResource resource = ResourcesPlugin.getWorkspace().getRoot();
+		Map map = new HashMap(3);
+		map.put(IMarker.MESSAGE, ConnectivityPlugin.getDefault().getResourceString(
+				"marker.error", new String[] { getName(),result.getMessage()})); //$NON-NLS-1$
+		map.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_ERROR));
+		map.put(IMarker.LOCATION, getName());
+		map.put(IMarker.TRANSIENT, Boolean.TRUE.toString());
+
+		try {
+			IMarker marker = resource
+					.createMarker("org.eclipse.datatools.connectivity.ui.profileFailure"); //$NON-NLS-1$
+			marker.setAttributes(map);
+		}
+		catch (CoreException e) {
+		}
+	}
+
+	private void removeOldFailureMarkers() {
+        // maintenance of problem markers is only applicable on OSGi platform
+        if( ! ConnectivityPlugin.isRunningOSGiPlatform() )
+            return;
+        
+		IResource resource = ResourcesPlugin.getWorkspace().getRoot();
+		try {
+			IMarker[] markers = resource.findMarkers(
+					"org.eclipse.datatools.connectivity.ui.profileFailure", true, //$NON-NLS-1$
+					IResource.DEPTH_INFINITE);
+			for (int i = 0; i < markers.length; i++) {
+				if (markers[i].getAttribute(IMarker.LOCATION, new String())
+						.equals(getName())) {
+					markers[i].delete();
+				}
+			}
+		}
+		catch (CoreException e) {
+		}
+	}
+
+	public class ConnectJob extends Job {
+
+		/**
+		 * 
+		 */
+		public ConnectJob() {
+			super(ConnectivityPlugin.getDefault().getResourceString(
+					"ConnectJob.name", //$NON-NLS-1$
+					new Object[] { ConnectionProfile.this.getName()}));
+			setUser(true);
+			setSystem(false);
+			setRule(new ProfileRule(ConnectionProfile.this));
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.core.internal.jobs.InternalJob#run(org.eclipse.core.runtime.IProgressMonitor)
+		 */
+		protected IStatus run(IProgressMonitor monitor) {
+			if (getConnectionState() == CONNECTED_STATE) {
+				return Status.OK_STATUS;
+			}
+
+			IStatus retVal;
+
+			monitor.beginTask(getName(), mConnectListeners.size()
+					+ mFactoryIDToManagedConnection.size() + 1);
+
+			// Create a group monitor
+			IProgressMonitor group = Job.getJobManager()
+					.createProgressGroup();
+			group.beginTask(getName(), IProgressMonitor.UNKNOWN);
+
+			// Create shared connections
+			List connectionJobs = new ArrayList(mFactoryIDToManagedConnection.size());
+			for (Iterator it = mFactoryIDToManagedConnection.values().iterator(); it
+					.hasNext();) {
+				CreateConnectionJob connectionJob = new CreateConnectionJob(
+						(ManagedConnection) it.next(), this);
+				connectionJob.setProgressGroup(group, IProgressMonitor.UNKNOWN);
+				connectionJob.setProperty(ConnectionProfile.NO_IMMEDIATE_ERROR_PROMPT_PROPERTY,Boolean.TRUE);
+				connectionJob.schedule();
+				connectionJobs.add(connectionJob);
+			}
+
+			// Notify any connect listeners
+			List connectionEventJobs = new ArrayList(mConnectListeners.size());
+			ConnectEvent event = new ConnectEvent(ConnectionProfile.this);
+			Object[] listeners = mConnectListeners.getListeners();
+			for (int index = 0, count = listeners.length; index < count; ++index) {
+				OpenConnectionEventJob connectionEventJob = new OpenConnectionEventJob(
+						(IConnectListener) listeners[index], event, this);
+				connectionEventJob.setProgressGroup(group, IProgressMonitor.UNKNOWN);
+				connectionEventJob.setProperty(ConnectionProfile.NO_IMMEDIATE_ERROR_PROMPT_PROPERTY,Boolean.TRUE);
+				connectionEventJob.schedule();
+				connectionEventJobs.add(connectionEventJob);
+			}
+
+			// Wait for everyone to connect
+			try {
+				Job.getJobManager().join(this, null);
+			}
+			catch (OperationCanceledException e) {
+				// TODO: RJC: Cleanup any connections that got created
+				e.printStackTrace();
+			}
+			catch (InterruptedException e) {
+				// TODO: What exaclty???
+				e.printStackTrace();
+			}
+			
+			removeOldFailureMarkers();
+
+			List statuses = new ArrayList(connectionJobs.size());
+			boolean someOK = false;
+			int severity = 0;
+			for (Iterator it = connectionJobs.iterator(); it.hasNext();) {
+				CreateConnectionJob connectionJob = (CreateConnectionJob) it
+						.next();
+				IStatus status = connectionJob.getResult();
+				if (status.getSeverity() == IStatus.ERROR) {
+					addFailureMarker(status);
+				}
+				else {
+					someOK = someOK || (status.getSeverity() == IStatus.OK)
+							|| (status.getSeverity() == IStatus.INFO);
+				}
+				severity |= status.getSeverity();
+				statuses.add(status);
+			}
+
+			if (someOK) {
+				// Notify any property listeners of a state change
+				int oldConnectionState = mConnectionState;
+				mConnectionState = CONNECTED_STATE;
+				Properties oldProperties = new Properties();
+				Properties newProperties = new Properties();
+				oldProperties.setProperty(CONNECTED_PROPERTY_ID, Boolean.FALSE
+						.toString());
+				newProperties.setProperty(CONNECTED_PROPERTY_ID, Boolean.TRUE
+						.toString());
+				oldProperties.setProperty(CONNECTION_STATE_PROPERTY_ID, Integer
+						.toString(oldConnectionState));
+				newProperties.setProperty(CONNECTION_STATE_PROPERTY_ID, Integer
+						.toString(CONNECTED_STATE));
+				firePropertySetChangeEvent(new PropertySetChangeEvent(
+						ConnectionProfile.this,
+						CONNECTION_PROFILE_PROPERTY_SET, oldProperties,
+						newProperties));
+			}
+			monitor.worked(1);
+
+			if (severity == IStatus.OK) { // all OK
+				retVal = Status.OK_STATUS;
+			}
+			else {
+				retVal = new ConnectMultiStatus(IStatus.ERROR,
+						(IStatus[]) statuses.toArray(new IStatus[statuses
+								.size()]), ConnectivityPlugin.getDefault()
+								.getResourceString(
+										"ConnectJob.status.error", //$NON-NLS-1$
+										new Object[] { ConnectionProfile.this
+												.getName()}));
+			}
+			
+			monitor.done();
+
+			return retVal;
+		}
+
+		public boolean belongsTo(Object family) {
+			return ConnectionProfile.this.equals(family);
+		}
+	}
+	
+	public class OpenConnectionEventJob extends Job {
+
+		private IConnectListener mListener;
+		private ConnectEvent mEvent;
+		private Object mFamily;
+
+		public OpenConnectionEventJob(IConnectListener listener,
+										ConnectEvent event, Object family) {
+			super(ConnectivityPlugin.getDefault().getResourceString(
+					"OpenConnectionEventJob.name", //$NON-NLS-1$
+					new Object[] { event.getConnectionProfile().getName()}));
+			setSystem(true);
+			mListener = listener;
+			mEvent = event;
+			mFamily = family;
+		}
+
+		public boolean belongsTo(Object family) {
+			return mFamily != null && family == mFamily;
+		}
+
+		protected IStatus run(IProgressMonitor monitor) {
+			IStatus status = Status.OK_STATUS;
+			monitor.beginTask(getName(), IProgressMonitor.UNKNOWN);
+			try {
+				mListener.openConnection(mEvent);
+			}
+			catch (CoreException e) {
+				status = e.getStatus();
+			}
+			monitor.done();
+			return status;
+		}
+	}
+
+	public class DisconnectJob extends Job {
+
+		private boolean mForce;
+		
+		public DisconnectJob() {
+			this(false);
+		}
+		
+		/**
+		 * @param force
+		 */
+		public DisconnectJob(boolean force) {
+			super(ConnectivityPlugin.getDefault().getResourceString(
+					"DisconnectJob.name", //$NON-NLS-1$
+					new Object[] { ConnectionProfile.this.getName()}));
+			mForce = force;
+			setUser(true);
+			setSystem(false);
+			setRule(new ProfileRule(ConnectionProfile.this));
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.core.internal.jobs.InternalJob#run(org.eclipse.core.runtime.IProgressMonitor)
+		 */
+		protected IStatus run(IProgressMonitor monitor) {
+			if (getConnectionState() == DISCONNECTED_STATE) {
+				return Status.OK_STATUS;
+			}
+
+			IStatus retVal;
+
+			monitor.beginTask(getName(), mConnectListeners.size()
+					+ mFactoryIDToManagedConnection.size() + 1);
+
+			// Check to make sure nobody is using the connection
+			Object[] listeners = mConnectListeners.getListeners();
+			ConnectEvent event = new ConnectEvent(ConnectionProfile.this);
+			if (!mForce) {
+				for (Iterator it = mFactoryIDToManagedConnection.values()
+						.iterator(); it.hasNext();) {
+					if (!((ManagedConnection) it.next()).okToClose()) {
+						monitor.setCanceled(true);
+						return Status.CANCEL_STATUS;
+					}
+				}
+
+				for (int index = 0, count = listeners.length; index < count; ++index) {
+					try {
+						if (!((IConnectListener) listeners[index])
+								.okToClose(event)) {
+							monitor.setCanceled(true);
+							return Status.CANCEL_STATUS;
+						}
+					}
+					catch (Exception e) {
+						ConnectivityPlugin.getDefault().log(e);
+					}
+				}
+			}
+
+			// Create a group monitor
+			IProgressMonitor group = Job.getJobManager()
+					.createProgressGroup();
+			group.beginTask(getName(), IProgressMonitor.UNKNOWN);
+
+			// Close shared connections
+			List connectionJobs = new ArrayList(mFactoryIDToManagedConnection
+					.size());
+			for (Iterator it = mFactoryIDToManagedConnection.values().iterator(); it
+					.hasNext();) {
+				ManagedConnection mc = (ManagedConnection) it.next();
+				if (!mc.isConnected()) {
+					continue;
+				}
+				CloseManagedConnectionJob connectionJob = new CloseManagedConnectionJob(
+						mc, this);
+				connectionJob.setProgressGroup(group, IProgressMonitor.UNKNOWN);
+				connectionJob.setProperty(ConnectionProfile.NO_IMMEDIATE_ERROR_PROMPT_PROPERTY,Boolean.TRUE);
+				connectionJob.schedule();
+				connectionJobs.add(connectionJob);
+			}
+
+			// Notify any connect listeners
+			List connectionEventJobs = new ArrayList(mConnectListeners.size());
+			for (int index = 0, count = listeners.length; index < count; ++index) {
+				CloseConnectionEventJob connectionEventJob = new CloseConnectionEventJob(
+						(IConnectListener) listeners[index], event, this);
+				connectionEventJob.setProgressGroup(group, IProgressMonitor.UNKNOWN);
+				connectionEventJob.setProperty(ConnectionProfile.NO_IMMEDIATE_ERROR_PROMPT_PROPERTY,Boolean.TRUE);
+				connectionEventJob.schedule();
+				connectionEventJobs.add(connectionEventJob);
+			}
+
+			// Wait for everyone to connect
+			try {
+				Job.getJobManager().join(this, null);
+			}
+			catch (OperationCanceledException e) {
+				// TODO: RJC: This puts us in a weird state, should we recreate
+				// any connections that were closed
+				return Status.CANCEL_STATUS;
+			}
+			catch (InterruptedException e) {
+				// TODO: What exaclty???
+			}
+
+			List statuses = new ArrayList(connectionJobs.size());
+			int severity = 0;
+			for (Iterator it = connectionJobs.iterator(); it.hasNext();) {
+				CloseManagedConnectionJob connectionJob = (CloseManagedConnectionJob) it
+						.next();
+				IStatus status = connectionJob.getResult();
+				severity |= status.getSeverity();
+				statuses.add(status);
+			}
+
+			// Notify any property listeners of a state change
+			int oldConnectionState = mConnectionState;
+			mConnectionState = DISCONNECTED_STATE;
+			Properties oldProperties = new Properties();
+			Properties newProperties = new Properties();
+			oldProperties.setProperty(CONNECTED_PROPERTY_ID, Boolean.TRUE
+					.toString());
+			newProperties.setProperty(CONNECTED_PROPERTY_ID, Boolean.FALSE
+					.toString());
+			oldProperties.setProperty(CONNECTION_STATE_PROPERTY_ID, Integer
+					.toString(oldConnectionState));
+			newProperties.setProperty(CONNECTION_STATE_PROPERTY_ID, Integer
+					.toString(DISCONNECTED_STATE));
+			firePropertySetChangeEvent(new PropertySetChangeEvent(
+					ConnectionProfile.this, CONNECTION_PROFILE_PROPERTY_SET,
+					oldProperties, newProperties));
+
+			monitor.worked(1);
+
+			if (severity == IStatus.OK) { // all OK
+				retVal = Status.OK_STATUS;
+			}
+			else {
+				retVal = new ConnectMultiStatus(IStatus.ERROR,
+						(IStatus[]) statuses.toArray(new IStatus[statuses
+								.size()]), ConnectivityPlugin.getDefault()
+								.getResourceString(
+										"DisconnectJob.status.info", //$NON-NLS-1$
+										new Object[] { ConnectionProfile.this
+												.getName()}));
+			}
+
+			monitor.done();
+
+			return retVal;
+		}
+
+		public boolean belongsTo(Object family) {
+			return ConnectionProfile.this.equals(family);
+		}
+	}
+
+	public class CloseConnectionEventJob extends Job {
+
+		private IConnectListener mListener;
+		private ConnectEvent mEvent;
+		private Object mFamily;
+
+		public CloseConnectionEventJob(IConnectListener listener,
+										ConnectEvent event, Object family) {
+			super(ConnectivityPlugin.getDefault().getResourceString(
+					"OpenConnectionEventJob.name", //$NON-NLS-1$
+					new Object[] { event.getConnectionProfile().getName()}));
+			setSystem(true);
+			mListener = listener;
+			mEvent = event;
+			mFamily = family;
+		}
+
+		public boolean belongsTo(Object family) {
+			return mFamily != null && family == mFamily;
+		}
+
+		protected IStatus run(IProgressMonitor monitor) {
+			IStatus status = Status.OK_STATUS;
+			monitor.beginTask(getName(), IProgressMonitor.UNKNOWN);
+			try {
+				mListener.closeConnection(mEvent);
+			}
+			catch (CoreException e) {
+				status = e.getStatus();
+			}
+			monitor.done();
+			return status;
+		}
+	}
+	
+	private static class ConnectMultiStatus extends MultiStatus {
+
+		public ConnectMultiStatus(int severity, IStatus[] newChildren,
+									String message) {
+			super( ConnectivityPlugin.getSymbolicName(), -1, newChildren, message, null);
+			setSeverity(severity);
+		}
+	}
+
+	public class WorkOfflineJob extends Job {
+
+		/**
+		 * 
+		 */
+		public WorkOfflineJob() {
+			super(ConnectivityPlugin.getDefault().getResourceString(
+					"WorkOfflineJob.name", //$NON-NLS-1$
+					new Object[] { ConnectionProfile.this.getName()}));
+			setUser(true);
+			setSystem(false);
+			setRule(new ProfileRule(ConnectionProfile.this));
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.core.internal.jobs.InternalJob#run(org.eclipse.core.runtime.IProgressMonitor)
+		 */
+		protected IStatus run(IProgressMonitor monitor) {
+			if (getConnectionState() == WORKING_OFFLINE_STATE) {
+				return Status.OK_STATUS;
+			}
+
+			IStatus retVal;
+
+			monitor.beginTask(getName(), mConnectListeners.size()
+					+ mFactoryIDToManagedConnection.size() + 1);
+
+			// Notify any listeners that we are about to close the connection
+			if (getConnectionState() == CONNECTED_STATE) {
+				Object[] listeners = mConnectListeners.getListeners();
+				ConnectEvent event = new ConnectEvent(ConnectionProfile.this);
+				for (Iterator it = mFactoryIDToManagedConnection.values()
+						.iterator(); it.hasNext();) {
+					if (!((ManagedConnection) it.next()).okToClose()) {
+						monitor.setCanceled(true);
+						return Status.CANCEL_STATUS;
+					}
+				}
+			}
+
+			// Create a group monitor
+			IProgressMonitor group = Job.getJobManager()
+					.createProgressGroup();
+			group.beginTask(getName(), IProgressMonitor.UNKNOWN);
+
+			// Create shared connections
+			List connectionJobs = new ArrayList(mFactoryIDToManagedConnection
+					.size());
+			for (Iterator it = mFactoryIDToManagedConnection.values()
+					.iterator(); it.hasNext();) {
+				CreateOfflineConnectionJob connectionJob = new CreateOfflineConnectionJob(
+						(ManagedConnection) it.next(), this);
+				connectionJob.setProgressGroup(group, IProgressMonitor.UNKNOWN);
+				connectionJob.setProperty(
+						ConnectionProfile.NO_IMMEDIATE_ERROR_PROMPT_PROPERTY,
+						Boolean.TRUE);
+				connectionJob.schedule();
+				connectionJobs.add(connectionJob);
+			}
+
+			// Notify any connect listeners
+			// Do nothing as IConnectListener is deprecated
+
+			// Wait for everyone to connect
+			try {
+				Job.getJobManager().join(this, null);
+			}
+			catch (OperationCanceledException e) {
+				// TODO: RJC: Cleanup any connections that got created
+				e.printStackTrace();
+			}
+			catch (InterruptedException e) {
+				// TODO: What exaclty???
+				e.printStackTrace();
+			}
+
+			List statuses = new ArrayList(connectionJobs.size());
+			boolean someOK = false;
+			int severity = 0;
+			for (Iterator it = connectionJobs.iterator(); it.hasNext();) {
+				CreateOfflineConnectionJob connectionJob = (CreateOfflineConnectionJob) it
+						.next();
+				IStatus status = connectionJob.getResult();
+				if (status.getSeverity() == IStatus.ERROR) {
+					addFailureMarker(status);
+				}
+				else {
+					someOK = someOK || (status.getSeverity() == IStatus.OK)
+							|| (status.getSeverity() == IStatus.INFO);
+				}
+				severity |= status.getSeverity();
+				statuses.add(status);
+			}
+
+			if (someOK) {
+				// Notify any property listeners of a state change
+				int oldConnectionState = mConnectionState;
+				mConnectionState = WORKING_OFFLINE_STATE;
+				Properties oldProperties = new Properties();
+				Properties newProperties = new Properties();
+				if (oldConnectionState == CONNECTED_STATE) {
+					oldProperties.setProperty(CONNECTED_PROPERTY_ID,
+							Boolean.TRUE.toString());
+					newProperties.setProperty(CONNECTED_PROPERTY_ID,
+							Boolean.FALSE.toString());
+				}
+				oldProperties.setProperty(CONNECTION_STATE_PROPERTY_ID, Integer
+						.toString(oldConnectionState));
+				newProperties.setProperty(CONNECTION_STATE_PROPERTY_ID, Integer
+						.toString(WORKING_OFFLINE_STATE));
+				firePropertySetChangeEvent(new PropertySetChangeEvent(
+						ConnectionProfile.this,
+						CONNECTION_PROFILE_PROPERTY_SET, oldProperties,
+						newProperties));
+			}
+			monitor.worked(1);
+
+			if (severity == IStatus.OK) { // all OK
+				retVal = Status.OK_STATUS;
+			}
+			else {
+				retVal = new ConnectMultiStatus(IStatus.ERROR,
+						(IStatus[]) statuses.toArray(new IStatus[statuses
+								.size()]), ConnectivityPlugin.getDefault()
+								.getResourceString(
+										"WorkOfflineJob.status.error", //$NON-NLS-1$
+										new Object[] { ConnectionProfile.this
+												.getName()}));
+			}
+
+			monitor.done();
+
+			return retVal;
+		}
+
+		public boolean belongsTo(Object family) {
+			return ConnectionProfile.this.equals(family);
+		}
+	}
+
+	public class SaveWorkOfflineDataJob extends Job {
+
+		public SaveWorkOfflineDataJob() {
+			super(ConnectivityPlugin.getDefault().getResourceString(
+					"SaveWorkOfflineDataJob.name", //$NON-NLS-1$
+					new Object[] { ConnectionProfile.this.getName()}));
+			setUser(true);
+			setSystem(false);
+			setRule(new ProfileRule(ConnectionProfile.this));
+		}
+
+		protected IStatus run(IProgressMonitor monitor) {
+			MultiStatus status = new MultiStatus(ConnectivityPlugin.getSymbolicName(),
+					MultiStatus.OK,
+					ConnectivityPlugin.getDefault().getResourceString(
+							"SaveWorkOfflineDataJob.status"), null); //$NON-NLS-1$
+
+			monitor.beginTask(getName(),
+					mFactoryIDToManagedConnection.size() * 100);
+
+			for (Iterator it = mFactoryIDToManagedConnection.values()
+					.iterator(); it.hasNext();) {
+				ManagedConnection connection = (ManagedConnection) it.next();
+				if (connection.supportsWorkOfflineMode()) {
+					IProgressMonitor subMonitor = new SubProgressMonitor(
+							monitor, 100,
+							SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK);
+					try {
+						connection.save(subMonitor);
+					}
+					catch (CoreException e) {
+						status.add(e.getStatus());
+					}
+					subMonitor.done();
+				}
+				else {
+					monitor.worked(100);
+				}
+			}
+
+			monitor.done();
+
+			return status;
+		}
+
+		public boolean belongsTo(Object family) {
+			return ConnectionProfile.this.equals(family);
+		}
+
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ConnectionProfileManager.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ConnectionProfileManager.java
new file mode 100644
index 0000000..d23a4b4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ConnectionProfileManager.java
@@ -0,0 +1,294 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2008 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich, shongxum - initial API and implementation
+ *               Actuate Corporation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.IConfigurationType;
+import org.eclipse.datatools.connectivity.IConnectionFactoryProvider;
+import org.eclipse.datatools.connectivity.IConnectionProfileProvider;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepositoryConstants;
+
+/**
+ * @author rcernich, shongxum
+ * 
+ * Created on Jan 15, 2004
+ */
+public class ConnectionProfileManager {
+
+	private static ConnectionProfileManager sInstance = new ConnectionProfileManager();
+
+	public static final String EXTENSION_ID = "org.eclipse.datatools.connectivity.connectionProfile"; //$NON-NLS-1$
+
+	public static final String EXT_ELEM_CATEGORY = "category"; //$NON-NLS-1$
+
+	public static final String EXT_ELEM_CONFIGURATION_TYPE = "configurationType"; //$NON-NLS-1$
+
+	public static final String EXT_ELEM_CONNECTION_FACTORY = "connectionFactory"; //$NON-NLS-1$
+
+	public static final String EXT_ELEM_PROFILE_EXTENSION = "profileExtension"; //$NON-NLS-1$
+
+	public static final String EXT_ELEM_CONNECTION_PROFILE = "connectionProfile"; //$NON-NLS-1$
+
+	public static final String EXT_ELEM_NEW_WIZARD = "newWizard"; //$NON-NLS-1$
+
+	public static final String EXT_ELEM_WIZARD_CATEGORY = "wizardCategory"; //$NON-NLS-1$
+
+	public static final String EXT_ELEM_CONNECTION_FACTORY_ADAPTER = "connectionFactoryAdapter"; //$NON-NLS-1$
+
+	public static boolean DEBUG_CONNECTION_PROFILE_EXTENSION = false;
+
+	private static final String OPTION_DEBUG_CONNECTION_PROFILE_EXTENSION = "org.eclipse.datatools.connectivity/connectionprofileextension"; //$NON-NLS-1$
+
+	private Map mProviders = null; // mProviders shouldn't be null after
+	// parsing
+
+	private Map mCategories = null;
+
+	private Map mConfigurationTypes = null;
+
+	private Map mConnectionFactoryAdapters = null;
+	
+	private Collection mDisabledProviders = null;
+
+	public static ConnectionProfileManager getInstance() {
+		return sInstance;
+	}
+
+	private ConnectionProfileManager() {
+		super();
+		String debug = Platform
+				.getDebugOption(OPTION_DEBUG_CONNECTION_PROFILE_EXTENSION);
+		DEBUG_CONNECTION_PROFILE_EXTENSION = debug == null ? false : (debug
+				.equalsIgnoreCase("true") ? true : false); //$NON-NLS-1$
+	}
+
+	public Map getProviders() {
+		if (mProviders == null)
+			processExtensions();
+		return mProviders;
+	}
+
+	public IConnectionProfileProvider getProvider(String id) {
+		Map providers = getProviders();
+		IConnectionProfileProvider provider = (IConnectionProfileProvider) getProviders()
+				.get(id);
+		if (provider == null) {
+			provider = new ConnectionProfileProvider(id);
+			providers.put(id, provider);
+			Map categories = getCategories();
+			if (!categories.containsKey(CategoryProvider.ID_CATEGORY_UNKNOWN)) {
+				categories.put(CategoryProvider.ID_CATEGORY_UNKNOWN,
+						CategoryProvider.UNKNOWN_CATEGORY);
+			}
+		}
+		return provider;
+	}
+
+	public Map getCategories() {
+		if (mProviders == null)
+			processExtensions();
+		return mCategories;
+	}
+
+	public CategoryProvider getCategory(String id) {
+		return (CategoryProvider) getCategories().get(id);
+	}
+
+	public IConfigurationType getConfigurationType(String id) {
+		if (mProviders == null)
+			processExtensions();
+		return (IConfigurationType) mConfigurationTypes.get(id);
+	}
+
+	public List getConnectionProfilesByCategory(ICategory category,
+			boolean recurse, IProject project) {
+		return null;
+	}
+
+	private void processExtensions() {
+		mProviders = new HashMap();
+		mCategories = new HashMap();
+		mConfigurationTypes = new HashMap();
+		mConnectionFactoryAdapters = new HashMap();
+		mDisabledProviders = new HashSet();
+
+		IExtensionRegistry registry = Platform.getExtensionRegistry();
+		IExtensionPoint exp = registry.getExtensionPoint(EXTENSION_ID);
+		IExtension[] exts = exp.getExtensions();
+		List profileExts = new ArrayList(exts.length);
+		for (Iterator xit = Arrays.asList(exts).iterator(); xit.hasNext();) {
+			IExtension ext = (IExtension) xit.next();
+			IConfigurationElement[] elems = ext.getConfigurationElements();
+			for (Iterator eit = Arrays.asList(elems).iterator(); eit.hasNext();) {
+				IConfigurationElement elem = (IConfigurationElement) eit.next();
+				String elemName = elem.getName();
+				if (EXT_ELEM_CONNECTION_PROFILE.equals(elemName)) {
+					processConnectionProfile(elem);
+				}
+				else if (EXT_ELEM_CATEGORY.equals(elemName)) {
+					processCategory(elem);
+				}
+				else if (EXT_ELEM_CONFIGURATION_TYPE.equals(elemName)) {
+					processConfigurationType(elem);
+				}
+				else {
+					profileExts.add(elem);
+				}
+			}
+		}
+
+		for (Iterator eit = profileExts.iterator(); eit.hasNext();) {
+			IConfigurationElement elem = (IConfigurationElement) eit.next();
+			String elemName = elem.getName();
+			if (EXT_ELEM_CONNECTION_FACTORY.equals(elemName)) {
+			    String profileId = elem.getAttribute(ConnectionFactoryProvider.ATTR_PROFILE);
+				ConnectionProfileProvider p = (ConnectionProfileProvider) mProviders.get( profileId );
+				if( p == null )
+				    ConnectivityPlugin.getDefault().log( 
+				            ConnectivityPlugin.getDefault().getResourceString("assert.invalid.profile", //$NON-NLS-1$
+								new Object[] { elemName + "." + ConnectionFactoryProvider.ATTR_PROFILE + ": " + profileId })); //$NON-NLS-1$ //$NON-NLS-2$
+				else
+				    p.addConnectionFactory(elem);
+			}
+			else if (EXT_ELEM_PROFILE_EXTENSION.equals(elemName)) {
+                String profileId = elem.getAttribute(ProfileExtensionProvider.ATTR_PROFILE);
+				ConnectionProfileProvider p = (ConnectionProfileProvider) mProviders.get( profileId );
+                if( p == null )
+                    ConnectivityPlugin.getDefault().log( 
+                            ConnectivityPlugin.getDefault().getResourceString("assert.invalid.profile", //$NON-NLS-1$
+								new Object[] { elemName + "." + ProfileExtensionProvider.ATTR_PROFILE + ": " + profileId })); //$NON-NLS-1$ //$NON-NLS-2$
+                else
+                    p.addProfileExtension(elem);
+			}
+			else if (EXT_ELEM_CONNECTION_FACTORY_ADAPTER.equals(elemName)) {
+				processConnectionFactoryAdapter(elem);
+			}
+		}
+		
+		registerConnectionFactoryAdapters();
+	
+		// Bugzilla 173721
+		mProviders.keySet().removeAll(mDisabledProviders);
+		
+		initializeRepositoriesEnabledProperty();
+	}
+
+	private void processConnectionProfile(IConfigurationElement element) {
+		ConnectionProfileProvider p = new ConnectionProfileProvider(element);
+		if( ! mProviders.containsKey( p.getId() ) )
+	        mProviders.put( p.getId(), p );
+		else  // another profile provider with same id already loaded
+		{
+		    // log and ignore profile provider with duplicated id
+		    ConnectivityPlugin.getDefault().log( 
+		            ConnectivityPlugin.getDefault()
+		                .getResourceString( "assert.invalid.profile", //$NON-NLS-1$
+						new Object[] { p.getId() + ": " + element.toString() } )); //$NON-NLS-1$
+		    
+		    // Mark the existing profile to be disabled
+		    mDisabledProviders.add(p.getId());
+		}
+	}
+
+	private void processCategory(IConfigurationElement element) {
+		CategoryProvider c = new CategoryProvider(element);
+		if (!mCategories.containsKey(c.getId()))
+			mCategories.put(c.getId(), c);
+	}
+
+	private void processConfigurationType(IConfigurationElement element) {
+		ConfigurationTypeProvider c = new ConfigurationTypeProvider(element);
+		Assert.isTrue(!mConfigurationTypes.containsKey(c.getId()),
+				ConnectivityPlugin.getDefault().getResourceString(
+						"assert.invalid.profile", new Object[] { element //$NON-NLS-1$
+								.toString()}));
+		mConfigurationTypes.put(c.getId(), c);
+	}
+
+	private void processConnectionFactoryAdapter(IConfigurationElement element) {
+		ConnectionFactoryAdapterProvider cfap = new ConnectionFactoryAdapterProvider(element);
+		Map adapters = (Map)mConnectionFactoryAdapters.get(cfap.getFactoryId());
+		if (adapters == null) {
+			adapters = new HashMap();
+			mConnectionFactoryAdapters.put(cfap.getFactoryId(), adapters);
+		}
+		ConnectionFactoryAdapter cfa = (ConnectionFactoryAdapter) adapters
+				.get(cfap.getId());
+		if (cfa == null) {
+			cfa = new ConnectionFactoryAdapter(cfap.getId(), cfap.getFactoryId());
+			adapters.put(cfa.getId(), cfa);
+		}
+		cfa.addAdapter(cfap);
+	}
+	
+	private void registerConnectionFactoryAdapters() {
+		for (Iterator provIt = mProviders.values().iterator(); provIt.hasNext();) {
+			ConnectionProfileProvider cpp = (ConnectionProfileProvider) provIt
+					.next();
+			for (Iterator factIt = cpp.getConnectionFactories().values().iterator(); factIt
+					.hasNext();) {
+				IConnectionFactoryProvider icfp = (IConnectionFactoryProvider) factIt
+						.next();
+				if (mConnectionFactoryAdapters.containsKey(icfp.getId())) {
+					for (Iterator adaptIt = ((Map) mConnectionFactoryAdapters
+							.get(icfp.getId())).values().iterator(); adaptIt
+							.hasNext();) {
+						ConnectionFactoryAdapter cap = (ConnectionFactoryAdapter) adaptIt
+								.next();
+						ConnectionFactoryAdapterProvider cfap = cap
+								.getOverride(cpp.getId());
+						if (cfap == null) {
+							cfap = cap.getDefault();
+						}
+						if (cfap != null) {
+							cpp.addConnectionFactory(cfap);
+						}
+					}
+				}
+			}
+		}
+	}
+
+	private void initializeRepositoriesEnabledProperty() {
+		for (Iterator it = mProviders.values().iterator(); it.hasNext();) {
+			ConnectionProfileProvider cpp = (ConnectionProfileProvider) it
+					.next();
+			for (ICategory cat = cpp.getCategory(); cat != null; cat = cat
+					.getParent()) {
+				if (IConnectionProfileRepositoryConstants.REPOSITORY_CATEGORY_ID
+						.equals(cat.getId())) {
+					System
+							.setProperty(
+									ConnectivityPlugin.PROP_SYSTEM_REPOSITORIES_ENABLED,
+									Boolean.TRUE.toString());
+					return;
+				}
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ConnectionProfileMgmt.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ConnectionProfileMgmt.java
new file mode 100644
index 0000000..a471ed5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ConnectionProfileMgmt.java
@@ -0,0 +1,1164 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2013 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ *    Actuate Corporation - added the cipherProvider extension point [BZ 358686]
+ *    Actuate Corporation - fix for Bugzilla 423976
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
+import java.io.Writer;
+import java.security.GeneralSecurityException;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Properties;
+
+import javax.crypto.Cipher;
+import javax.crypto.CipherInputStream;
+import javax.crypto.CipherOutputStream;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.ConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.ConnectionProfileException;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.drivers.DriverManager;
+import org.eclipse.datatools.connectivity.drivers.DriverValidator;
+import org.eclipse.datatools.connectivity.drivers.IDriverMgmtConstants;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
+import org.eclipse.datatools.connectivity.drivers.models.TemplateDescriptor;
+import org.eclipse.datatools.connectivity.internal.security.SecurityManager;
+import org.eclipse.datatools.connectivity.security.ICipherProvider;
+import org.w3c.dom.DOMException;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+import com.ibm.icu.util.StringTokenizer;
+
+/**
+ * This class is used for connection profiles management such as loading and
+ * saving Note: adding and removing connection profiles are supported by loading
+ * and saving because IMemento doesn't support adding and deleting children.
+ * 
+ * @author shongxum
+ */
+public class ConnectionProfileMgmt {
+
+	public final static String FILENAME = "ServerProfiles.dat"; //$NON-NLS-1$
+
+	public final static String BACKUP_FILENAME = "ServerProfiles.bak"; //$NON-NLS-1$
+
+	public final static String DEFAULTCP_FILENAME = "WorkSpaceServerConnectionProfiles.xml"; //$NON-NLS-1$
+
+	private final static String ROOTNAME = "DataTools.ServerProfiles"; //$NON-NLS-1$
+
+	private final static String CHILDNAME = "profile"; //$NON-NLS-1$
+
+	private final static String PROFILENAME = "name"; //$NON-NLS-1$
+
+	private final static String PROFILEDESC = "desc"; //$NON-NLS-1$
+
+	private final static String PROFILEAUTOCONNECT = "autoconnect"; //$NON-NLS-1$
+
+	private final static String PROFILEPARENT = "parent"; //$NON-NLS-1$
+
+	private final static String PROVIDERID = "providerID"; //$NON-NLS-1$
+
+	private final static String PROPKEYS = "keys"; //$NON-NLS-1$
+
+	private final static String PROPPREFIX = "prop_"; //$NON-NLS-1$
+
+	private final static String PROPDELIM = " "; //$NON-NLS-1$
+
+	private final static String LITERAL_YES = "Yes"; //$NON-NLS-1$
+
+	private final static String LITERAL_NO = "No"; //$NON-NLS-1$
+	
+	private final static String PROFILEID = "id"; //$NON-NLS-1$
+	
+	private final static String PROPERTYTAG = "property"; //$NON-NLS-1$
+	
+	private final static String PROPERTYNAMEATTR = "name"; //$NON-NLS-1$
+	
+	private final static String PROPERTYVALUEATTR = "value"; //$NON-NLS-1$
+	
+	private final static String BASEPROPERTIESTAG = "baseproperties"; //$NON-NLS-1$
+	
+	private final static String VERSIONATTR = "version"; //$NON-NLS-1$
+	
+	private final static String VERSIONSTR = "1.0"; //$NON-NLS-1$
+	
+	private final static String DRIVERREFTAG = "driverreference"; //$NON-NLS-1$
+	
+	private final static String DRIVERNAMEATTR = "driverName"; //$NON-NLS-1$
+	
+	private final static String DRIVERTYPEIDATTR = "driverTypeID"; //$NON-NLS-1$
+
+	private static IPath storageLocation = null;
+	
+	private static DocumentBuilderFactory documentBuilderFactory = null;
+	private static DocumentBuilder documentBuilder = null;
+	private static TransformerFactory transFactory = null;
+	private static Transformer transformer = null;
+
+	/**
+	 * Convert a String to a Properties object
+	 * 
+	 * @param xmlChild
+	 * @return
+	 */
+	private static Properties keysToProperties(Element elem) {
+		Properties props = new Properties();
+		String keys = elem.getAttribute(PROPKEYS), key, value;
+		StringTokenizer st = new StringTokenizer(keys, PROPDELIM);
+		while (st.hasMoreTokens()) {
+			key = st.nextToken();
+			value = elem.getAttribute(PROPPREFIX + key);
+			props.put(key, value);
+		}
+		return props;
+	}
+
+	/**
+	 * Save connection profiles
+	 * 
+	 * @param cps To be saved connection profiles
+	 * @throws IOException
+	 * @throws TransformerException 
+	 * @throws ParserConfigurationException 
+	 * @throws TransformerConfigurationException 
+	 */
+	public static void saveCPs(IConnectionProfile[] cps) 
+		throws CoreException 
+	{
+        File outputFile = getStorageLocation().append(FILENAME).toFile();
+        saveCPs( cps, outputFile, SecurityManager.getInstance().getCipherProvider( outputFile ) );
+	}
+
+	/**
+	 * Save connection profiles
+	 * 
+	 * @param cps
+	 * @param file
+	 * @param isp
+	 * @throws IOException
+	 * @throws ParserConfigurationException 
+	 * @throws TransformerException 
+	 * @throws TransformerConfigurationException 
+	 * @throws GeneralSecurityException
+	 * @throws TransformerException 
+	 */
+	public static void saveCPs(IConnectionProfile[] cps, File file,
+			ICipherProvider isp)
+		throws CoreException 
+	{
+		try {
+			DocumentBuilder builder = getDocumentBuilder();
+			Document document;
+			synchronized (builder) {
+				document = builder.newDocument();
+			}
+		    Element rootElement = document.createElement(ROOTNAME);
+		    document.appendChild(rootElement);
+			if (!file.exists())
+				file.createNewFile();
+			OutputStream out = null, outs = new FileOutputStream(file);
+			Writer writer = null;
+			
+			try {
+				if (isp != null) {
+				    Cipher aCipher = isp.createEncryptionCipher();
+				    if (aCipher != null)
+				        out = new CipherOutputStream(outs, aCipher);
+				}
+                if (out == null) {
+					out = outs;
+				}
+				OutputStreamWriter outw = new OutputStreamWriter(out, "UTF-8"); //$NON-NLS-1$
+				writer = new BufferedWriter(outw);
+				writeCPToXML1_0(cps, document, rootElement);
+				DOMSource source = new DOMSource(document);
+	            StreamResult result = new StreamResult(outw);
+	        	
+	            Transformer transformer = getTransformer();
+	            synchronized (transformer) {
+	            	transformer.transform(source, result);
+					try {
+						writer.close();
+						writer = null;
+					}
+					catch (IOException e) {
+						writer = null;
+						throw e;
+					}
+	            }
+	
+			}
+			finally {
+				if (writer != null)
+					writer.close();
+			}
+		} catch (DOMException e) {
+			throw new CoreException(new Status(Status.ERROR, ConnectivityPlugin.PLUGIN_ID, -1, 
+					ConnectivityPlugin.getDefault().getResourceString("error.saveprofilesxml"), e));//$NON-NLS-1$
+		} catch (IOException e) {
+			throw new CoreException(new Status(Status.ERROR, ConnectivityPlugin.PLUGIN_ID, -1, 
+					ConnectivityPlugin.getDefault().getResourceString("error.saveprofilesxml"), e));//$NON-NLS-1$
+		} catch (GeneralSecurityException e) {
+			throw new CoreException(new Status(Status.ERROR, ConnectivityPlugin.PLUGIN_ID, -1, 
+					ConnectivityPlugin.getDefault().getResourceString("error.saveprofilesxml"), e));//$NON-NLS-1$
+		} catch (TransformerException e) {
+			throw new CoreException(new Status(Status.ERROR, ConnectivityPlugin.PLUGIN_ID, -1, 
+					ConnectivityPlugin.getDefault().getResourceString("error.saveprofilesxml"), e));//$NON-NLS-1$
+		}
+	}
+	
+	/**
+	 * Write out the CPs list to XML in the new format
+	 * @param cps
+	 * @param document
+	 * @param rootElement
+	 */
+	private static void writeCPToXML1_0 ( IConnectionProfile[] cps, Document document, Element rootElement ) {
+		IConnectionProfile cp;
+		
+		Element child, extraChild, baseProps;
+		rootElement.setAttribute(VERSIONATTR, VERSIONSTR);
+		
+		for (int i = 0; i < cps.length; i++) {
+			cp = cps[i];
+			child = document.createElement(CHILDNAME);
+			child.setAttribute(PROFILENAME, cp.getName());
+			child.setAttribute(PROFILEDESC, cp.getDescription());
+			child.setAttribute(PROFILEAUTOCONNECT, ((ConnectionProfile) cp)
+					.isAutoConnect() ? LITERAL_YES : LITERAL_NO);
+			child.setAttribute(PROVIDERID, cp.getProviderId());
+			child.setAttribute(PROFILEID, cp.getInstanceID());
+			
+			boolean hasDriverReference = false;
+			String driverID = null;
+			Properties props = cp.getBaseProperties();
+			try {
+				props = ((ConnectionProfileProvider) cp
+						.getProvider()).getPropertiesPersistenceHook()
+						.getPersitentProperties(props);
+			}
+			catch (Exception e) {
+				if (ConnectionProfileManager.DEBUG_CONNECTION_PROFILE_EXTENSION) {
+					System.err
+							.println(ConnectivityPlugin
+									.getDefault()
+									.getResourceString(
+											"trace.error.propertiesPersistenceHookSaveError", //$NON-NLS-1$
+											new Object[] {
+													cp.getName(),
+													cp.getProviderId()}));
+					e.printStackTrace();
+				}
+			}
+			baseProps = document.createElement(BASEPROPERTIESTAG);
+
+			String key, value;
+            String profileJarList = null;
+			for (Enumeration enu = props.propertyNames(); enu
+					.hasMoreElements();) {
+				key = (String) enu.nextElement();
+				value = props.getProperty(key);
+				if (key.equals(ConnectionProfileConstants.PROP_DRIVER_DEFINITION_ID)) {
+					driverID = value;
+					hasDriverReference = true;
+				}
+
+				if (key.equals(IDriverMgmtConstants.PROP_DEFN_JARLIST))
+				    // defer writing the jarList property, so that the actual jarList will be used if available
+                    profileJarList = value;
+				else
+				    appendPropertyToElement ( document, baseProps, key, value );
+			}
+
+            // determine the actual jarList used to write in profile baseProperties
+            if (hasDriverReference && driverID != null) {
+                
+                DriverInstance di = DriverManager.getInstance().getDriverInstanceByID(driverID);
+                if (di != null &&
+                        new DriverValidator(di).isValid(false) ) {
+                    Properties diprops = di.getPropertySet().getBaseProperties();
+                    String driverJarList = diprops.getProperty(IDriverMgmtConstants.PROP_DEFN_JARLIST);
+                    if ( driverJarList != null && driverJarList.length() > 0 )
+                        profileJarList = driverJarList;
+                }
+            }
+            if (profileJarList != null)
+                appendPropertyToElement ( document, baseProps, 
+                    IDriverMgmtConstants.PROP_DEFN_JARLIST, profileJarList );
+
+            child.appendChild(baseProps);
+
+			for (Iterator it = ((ConnectionProfile)cp).getPropertiesMap().entrySet()
+					.iterator(); it.hasNext();) {
+				Map.Entry me = (Map.Entry) it.next();
+				String type = (String) me.getKey();
+
+				if (type.equals(cp.getProviderId())) {
+					continue;
+				}
+				else if (type.equals(BASEPROPERTIESTAG)) {
+					continue;
+				}
+				else if (type.equals(DRIVERREFTAG)) {
+					continue;
+				}
+
+				props = (Properties) me.getValue();
+				extraChild = document.createElement(type);
+				if (props == null) {
+					props = new Properties();
+				}
+				try {
+					ProfileExtensionProvider pep = (ProfileExtensionProvider) cp
+							.getProfileExtensions().get(type);
+					if (pep != null) {
+						props = pep.getPropertiesPersistenceHook()
+								.getPersitentProperties(props);
+					}
+				}
+				catch (Exception e) {
+					if (ConnectionProfileManager.DEBUG_CONNECTION_PROFILE_EXTENSION) {
+						System.err
+								.println(ConnectivityPlugin
+										.getDefault()
+										.getResourceString(
+												"trace.error.propertiesPersistenceHookSaveError", //$NON-NLS-1$
+												new Object[] {
+														cp.getName(),
+														type}));
+						e.printStackTrace();
+					}
+				}
+				for (Enumeration enu = props.propertyNames(); enu
+						.hasMoreElements();) {
+					key = (String) enu.nextElement();
+					value = props.getProperty(key);
+					if (key.equals(ConnectionProfileConstants.PROP_DRIVER_DEFINITION_ID)) {
+						driverID = value;
+						hasDriverReference = true;
+					}
+					appendPropertyToElement ( document, extraChild, key, value );
+				}
+				child.appendChild(extraChild);
+			}
+
+            // write the driver reference element
+            if (hasDriverReference && driverID != null ) {
+				Element driverElem = document.createElement(DRIVERREFTAG);
+				DriverInstance di = DriverManager.getInstance().getDriverInstanceByID(driverID);
+				if (di != null) {
+					String driverName = di.getName();
+					if (di.getTemplate() != null) {
+						String driverType = di.getTemplate().getId();
+						appendPropertyToElement ( document, driverElem, DRIVERNAMEATTR, driverName );
+						appendPropertyToElement ( document, driverElem, DRIVERTYPEIDATTR, driverType );
+						child.appendChild(driverElem);
+					}
+				}
+			}
+			rootElement.appendChild(child);
+		}
+	}
+	
+	/**
+	 * Utility method to add a key/value property to a node
+	 * @param document
+	 * @param parent
+	 * @param key
+	 * @param value
+	 */
+	private static void appendPropertyToElement ( Document document, Element parent, String key, String value ) {
+		Element propElem = document.createElement(PROPERTYTAG);
+		propElem.setAttribute(PROPERTYNAMEATTR, key);
+		propElem.setAttribute(PROPERTYVALUEATTR, value);
+		parent.appendChild(propElem);
+	}
+
+	/**
+	 * Load connection profile by name from storage
+	 * 
+	 * @param cpName
+	 * @return the connection profile object
+	 * @throws IOException
+	 * @throws ParserConfigurationException 
+	 * @throws SAXException 
+	 * @throws TransformerException 
+	 * @throws TransformerConfigurationException 
+	 * @deprecated currently, this isn't used, and shouldn't be. leaving this as
+	 *             deprecated, just in case.
+	 */
+	public static IConnectionProfile loadCP(String cpName)
+			throws CoreException {
+		try {
+			IPath path = getStorageLocation();
+			path = path.append(FILENAME);
+			File file = path.toFile();
+			if (!file.exists())
+				return null;
+			InputStream is = new FileInputStream(file);
+			// CipherInputStream cis = new CipherInputStream(is, CipherManager1
+			// .getInstance().getDecryptCipher());
+			InputSource source = new InputSource(is);
+			source.setEncoding("UTF-8"); //$NON-NLS-1$
+			DocumentBuilder builder = getDocumentBuilder();
+			Document document;
+			synchronized (builder) {
+				document = builder.parse(source);
+			}
+			ConnectionProfile cp = null;
+			NodeList nl = document.getElementsByTagName(CHILDNAME);
+			for (int i = 0; i < nl.getLength(); i++) {
+				Node node = nl.item(i);
+				if (node instanceof Element) {
+					Element elem = (Element) node;
+					if (elem.getAttribute(PROFILENAME).equals(cpName)) {
+						cp = new ConnectionProfile(elem
+								.getAttribute(PROFILENAME), elem
+								.getAttribute(PROFILEDESC), elem
+								.getAttribute(PROVIDERID),elem
+								.getAttribute(PROFILEPARENT), LITERAL_YES
+								.equals(elem.getAttribute(PROFILEAUTOCONNECT)),
+								elem.getAttribute(PROFILEID));
+				
+						if (cp.getProvider() == null)
+							continue;
+						cp.setBaseProperties(keysToProperties(elem));
+				
+						if (cp.getProfileExtensions().size() != 0) {
+							for (Iterator it = cp.getProfileExtensions().entrySet()
+									.iterator(); it.hasNext();) {
+								Map.Entry me = (Map.Entry) it.next();
+								String type = (String) me.getKey();
+								Node xmlExtraChild = elem.getFirstChild();
+								if (xmlExtraChild != null && elem.getTagName().equals(type))
+									cp.setProperties(type,
+											keysToProperties((Element)xmlExtraChild));
+							}
+						}
+				
+						break;
+					}
+				}
+			}
+			cp.setCreated();
+			return cp;
+		} catch (IOException e) {
+			throw new CoreException(new Status(Status.ERROR, ConnectivityPlugin.PLUGIN_ID, -1, 
+					ConnectivityPlugin.getDefault().getResourceString("error.loadprofilesxml"), e));//$NON-NLS-1$
+		} catch (SAXException e) {
+			throw new CoreException(new Status(Status.ERROR, ConnectivityPlugin.PLUGIN_ID, -1, 
+					ConnectivityPlugin.getDefault().getResourceString("error.loadprofilesxml"), e));//$NON-NLS-1$
+		}
+	}
+
+	/**
+	 * @param file
+	 * @return
+	 * @throws CoreException
+	 */
+	public static IConnectionProfile[] loadCPs(File file) throws CoreException {
+        return loadCPsUsingFileExtension( file, null );
+    }
+    
+    /**
+     * Loads the connection profile(s) stored in the specified file,
+     * using the cipher provider registered for the specified file extension.
+     * @param file     a connection profile store file
+     * @param encryptedFileExtension   the file extension for which a cipher provider is registered.
+     *         It may be different from that of the specified file.
+     *         If null value, the extension of the specified file will be used by default.
+     * @return an array of loaded connection profile instances
+     * @throws CoreException
+     * @since 1.2.4 (DTP 1.9.2)
+     */
+    public static IConnectionProfile[] loadCPsUsingFileExtension( File file, String encryptedFileExtension ) 
+        throws CoreException {
+		try {
+			if ( !isEncrypted( file ) ) {
+				// not encrpyted
+				return loadCPs(file, null);
+			}
+			else {
+				// encrypted
+                ICipherProvider cipherProvider = encryptedFileExtension == null ?
+                        SecurityManager.getInstance().getCipherProvider( file ) :    
+                        SecurityManager.getInstance().getCipherProviderForFileExtension( encryptedFileExtension );
+                return loadCPs( file, cipherProvider );
+			}
+		} catch (FileNotFoundException e) {
+			throw new CoreException(new Status(Status.ERROR, ConnectivityPlugin.PLUGIN_ID, -1, 
+					ConnectivityPlugin.getDefault().getResourceString("error.loadprofilesxml"), e));//$NON-NLS-1$
+		} catch (UnsupportedEncodingException e) {
+			throw new CoreException(new Status(Status.ERROR, ConnectivityPlugin.PLUGIN_ID, -1, 
+					ConnectivityPlugin.getDefault().getResourceString("error.loadprofilesxml"), e));//$NON-NLS-1$
+		} catch (IOException e) {
+			throw new CoreException(new Status(Status.ERROR, ConnectivityPlugin.PLUGIN_ID, -1, 
+					ConnectivityPlugin.getDefault().getResourceString("error.loadprofilesxml"), e));//$NON-NLS-1$
+		}
+	}
+	
+	/**
+	 * Determines whether the specified connection profile file is encrypted.
+	 * @param file storage file of connection profile instances
+	 * @return     true if the specified file is encrypted; false otherwise
+	 * @throws IOException
+	 */
+    public static boolean isEncrypted( File file ) throws IOException
+    {
+        // read first 5 bytes from file to check if it can be read, i.e. not encrypted
+        byte[] bytes = new byte[5];
+        char[] xml = {'<','?','x','m','l'};
+        FileInputStream fis = new FileInputStream( file );
+        fis.read( bytes );
+        fis.close();
+        
+        boolean isXML = true;
+        for( int i = 0; isXML && i < 5; ++i ) {
+            isXML = bytes[i] == xml[i];
+        }
+        return ! isXML;
+    }
+
+	/**
+	 * Takes the properties for a given element and converts them to a 
+	 * Properties object.
+	 * @param elem
+	 * @return
+	 */
+	private static Properties keysElementsToProperties(Element elem) {
+		Properties props = new Properties();
+		NodeList nl = elem.getElementsByTagName(PROPERTYTAG);
+		for (int i = 0; i < nl.getLength(); i++) {
+			Node node = nl.item(i);
+			if (!(node instanceof Element))
+				continue;
+
+			Element property = (Element) node;
+			String key = property.getAttribute(PROPERTYNAMEATTR);
+			String value = property.getAttribute(PROPERTYVALUEATTR);
+			props.put(key, value);
+		}
+		return props;
+	}
+
+	/**
+	 * Read back the 1.0 format for CP storage
+	 * @param cps
+	 * @param document
+	 * @return
+	 */
+	private static boolean readCPsFromXML1_0 (ArrayList cps, Document document) {
+		if (cps == null)
+			cps = new ArrayList();
+		boolean updatedIDs = false;
+		NodeList nl = document.getElementsByTagName(CHILDNAME);
+		for (int i = 0; i < nl.getLength(); i++) {
+			Node node = nl.item(i);
+			if (!(node instanceof Element))
+				continue;
+
+			Element elem = (Element) node;
+			ConnectionProfile cp = new ConnectionProfile(elem
+					.getAttribute(PROFILENAME), elem
+					.getAttribute(PROFILEDESC), elem
+					.getAttribute(PROVIDERID), elem
+					.getAttribute(PROFILEPARENT), LITERAL_YES.equals(elem
+					.getAttribute(PROFILEAUTOCONNECT)), elem
+					.getAttribute(PROFILEID));
+
+			if (cp.getProvider() == null)
+				continue;
+			
+			NodeList nl2 = elem.getElementsByTagName(BASEPROPERTIESTAG);
+			if (nl.getLength() > 0) {
+				
+				Element baseProps = null;
+				for (int j = 0; j < nl2.getLength(); j++) {
+					Node testnode = nl2.item(j);
+					if (!(testnode instanceof Element))
+						continue;
+					Element el = (Element) testnode;
+					if (el.getTagName().equals(BASEPROPERTIESTAG)) {
+						baseProps = el;
+						break;
+					}
+				}
+				if (baseProps != null ) {
+					Properties props = keysElementsToProperties(baseProps);
+					try {
+						props = ((ConnectionProfileProvider) cp.getProvider())
+								.getPropertiesPersistenceHook()
+								.populateTransientProperties(props);
+					}
+					catch (Exception e) {
+						if (ConnectionProfileManager.DEBUG_CONNECTION_PROFILE_EXTENSION) {
+							System.err
+									.println(ConnectivityPlugin
+											.getDefault()
+											.getResourceString(
+													"trace.error.propertiesPersistenceHookLoadError", //$NON-NLS-1$
+													new Object[] { cp.getName(),
+															cp.getProviderId()}));
+							e.printStackTrace();
+						}
+					}
+					cp.setBaseProperties(props);
+				}
+			}
+
+			NodeList extElements = elem.getChildNodes();
+			for (int extIndex = 0, extCount = extElements.getLength(); extIndex < extCount; ++extIndex) {
+				Node extNode = extElements.item(extIndex);
+				if (extNode.getNodeType() != Node.ELEMENT_NODE) {
+					continue;
+				}
+				String type = extNode.getNodeName();
+				if (type.equals(BASEPROPERTIESTAG)) {
+					continue;
+				}
+				else if (type.equals(DRIVERREFTAG)) {
+					// check for drivers
+					Properties props = keysElementsToProperties((Element) extNode);
+					String driverName = props.getProperty(DRIVERNAMEATTR);
+					String driverTypeID = props.getProperty(DRIVERTYPEIDATTR);
+					String driverID = ""; //$NON-NLS-1$
+					
+					// Bug 240433 - brianf
+					// Issue with importing 2 profiles with same driver ID but from different exports
+					boolean existingDriverHasName = false;
+	                DriverInstance[] testDI = DriverManager.getInstance().getDriverInstancesByName(driverName);
+	                if (testDI != null) {
+	                    // we found the driver, so we're ok to continue
+	                    for (int index = 0; index < testDI.length; index++){
+	                        if (testDI[index].getTemplate().getId().equalsIgnoreCase(driverTypeID)) {
+	                            // the driver with the same name happens to have the same template ID, so we should be ok
+	                            existingDriverHasName = true;
+	                        }
+	                    }
+	                }
+
+					if (testDI == null || (testDI != null && !existingDriverHasName)) {
+						DriverInstance di = DriverManager.getInstance().createNewDriverInstance(driverTypeID, driverName, new String());
+						if (di != null) {
+							driverID = di.getId();
+							
+							Properties baseProps = cp.getBaseProperties();
+							baseProps.setProperty(ConnectionProfileConstants.PROP_DRIVER_DEFINITION_ID, driverID);
+							cp.setBaseProperties(baseProps);
+							
+							// This section is to fix BZ 213258 -- brianf
+							String jarList = 
+								cp.getBaseProperties().getProperty(IDriverMgmtConstants.PROP_DEFN_JARLIST);
+							String driverClass = cp.getBaseProperties().getProperty(IJDBCDriverDefinitionConstants.DRIVER_CLASS_PROP_ID);
+							if ((jarList != null && jarList.trim().length() > 0) 
+									|| (driverClass != null && driverClass.trim().length() > 0)) {
+								Properties diprops = di.getPropertySet().getBaseProperties();
+								if (jarList != null && jarList.trim().length() > 0) {
+									diprops.setProperty(IDriverMgmtConstants.PROP_DEFN_JARLIST, jarList);
+								}						
+								if (driverClass != null && driverClass.trim().length() > 0){
+									diprops.setProperty(IJDBCDriverDefinitionConstants.DRIVER_CLASS_PROP_ID, driverClass);
+								}
+								di.getPropertySet().setBaseProperties(diprops);
+
+								DriverManager.getInstance().removeDriverInstance(di.getId());
+							
+								/*
+								 * This call to garbage collect is to try and reclaim
+								 * the classloader held by the last instance of the 
+								 * DriverInstance that is being dropped and re-added.
+								 * Note that if the class is in use (i.e. any profile
+								 * is connected that uses the referenced driver), it 
+								 * won't be unloaded and subsequent connections will 
+								 * fail.
+								 */
+								System.gc();
+								
+								DriverManager.getInstance().addDriverInstance(di);
+							}
+							else {
+								String message = ConnectivityPlugin.getDefault().getResourceString(
+										"drivermarker.import.error", new String[] { cp.getName()}); //$NON-NLS-1$
+								ConnectivityPlugin.getDefault().log(message);
+								removeOldDriverProblemMarkers(di.getName());
+								addDriverProblemMarker(di.getName(), message);
+							}
+							// end fix for BZ 213258 -- brianf
+
+							updatedIDs = true;
+						}
+						else {
+							if (ConnectionProfileManager.DEBUG_CONNECTION_PROFILE_EXTENSION) {
+								String message = ConnectivityPlugin
+									.getDefault()
+									.getResourceString(
+										"trace.error.drivermigration", //$NON-NLS-1$
+										new Object[] {
+												cp.getName(), driverTypeID});
+								System.err.println(message);
+								ConnectivityPlugin.getDefault().log(message);
+							}
+						}
+					}
+					continue;
+				}
+				Properties props = keysElementsToProperties((Element) extNode);
+				try {
+					ProfileExtensionProvider pep = (ProfileExtensionProvider) cp
+							.getProfileExtensions().get(type);
+					if (pep != null) {
+						props = pep.getPropertiesPersistenceHook()
+								.populateTransientProperties(props);
+					}
+				}
+				catch (Exception e) {
+					if (ConnectionProfileManager.DEBUG_CONNECTION_PROFILE_EXTENSION) {
+						System.err
+								.println(ConnectivityPlugin
+										.getDefault()
+										.getResourceString(
+												"trace.error.propertiesPersistenceHookLoadError", //$NON-NLS-1$
+												new Object[] {
+														cp.getName(), type}));
+						e.printStackTrace();
+					}
+				}
+				cp.setProperties(type, props);
+			}
+
+			cp.setCreated();
+			cps.add(cp);
+
+			updatedIDs = elem.getAttribute(PROFILEID) == null || updatedIDs;
+		}
+		return updatedIDs;
+	}
+	
+   /**
+     * Import all connection profiles from file
+     * 
+     * @param file
+     * @param isp
+     * @return IConnectionProfile[]
+     * @throws ConnectionProfileException
+     * @throws IOException
+     * @throws GeneralSecurityException
+     * @throws SAXException
+     * @throws TransformerException
+     * @throws ParserConfigurationException
+     * @throws TransformerConfigurationException
+     * @throws TransformerException
+     */
+    public static IConnectionProfile[] importCPs(File file,
+            ICipherProvider isp, boolean isOverwrite) throws CoreException,
+            ConnectionProfileException {
+        IConnectionProfile[] newConnectionProfiles = new IConnectionProfile[0];
+        newConnectionProfiles = loadCPs(file, isp);
+
+        // Post-process imported connection profiles
+        for (int index = 0; index < newConnectionProfiles.length; index++) {
+
+            IConnectionProfile currentConnectionProfile = newConnectionProfiles[index];
+
+            // if isOverwrite then remove existing connection profile with same
+            // name before
+            // adding the new one
+            if (isOverwrite) {
+                IConnectionProfile profile = ProfileManager.getInstance()
+                        .getProfileByName(currentConnectionProfile.getName());
+                if (profile != null) {
+                    ProfileManager.getInstance().deleteProfile(profile);
+                }
+            }
+            ProfileManager.getInstance().addProfile(currentConnectionProfile);
+
+            Properties baseProperties = currentConnectionProfile
+                    .getBaseProperties();
+            String jarList = baseProperties.getProperty(
+                    IDriverMgmtConstants.PROP_DEFN_JARLIST, null);
+            String driverDefinitionID = baseProperties.getProperty(
+                    ConnectionProfileConstants.PROP_DRIVER_DEFINITION_ID, null);
+            String driverTemplateID = baseProperties.getProperty(
+                    IDriverMgmtConstants.PROP_DEFN_TYPE, null);
+            TemplateDescriptor templateDescriptor = TemplateDescriptor
+                    .getDriverTemplateDescriptor(driverTemplateID);
+
+            DriverInstance driverInstance = DriverManager.getInstance()
+                    .getDriverInstanceByID(driverDefinitionID);
+            // Check to see if the jarList specified in the file is the same as
+            // the one in the workspace's driver definition that has same name
+            if (((driverInstance == null) && (jarList != null))
+                    || ((driverInstance != null) && (jarList != null) && !(jarList
+                            .equals(driverInstance.getJarList())))) {
+                // Check to see if there is an existing driver definition that
+                // can be used
+                DriverInstance[] driverInstances = DriverManager.getInstance()
+                        .getDriverInstancesByTemplate(driverTemplateID);
+                String existingDriverDefinitionID = null;
+                for (int driverIndex = 0; driverIndex < driverInstances.length; driverIndex++) {
+                    if (jarList.equals(driverInstances[driverIndex]
+                            .getJarList())) {
+                        // if jarList is the same then re-use the driver
+                        // definition
+                        existingDriverDefinitionID = driverInstances[driverIndex]
+                                .getId();
+                        break;
+                    }
+                }               
+                if (existingDriverDefinitionID != null) {
+                    baseProperties
+                            .setProperty(
+                                    ConnectionProfileConstants.PROP_DRIVER_DEFINITION_ID,
+                                    existingDriverDefinitionID);
+                    currentConnectionProfile.setProperties(
+                            currentConnectionProfile.getProviderId(),
+                            baseProperties);
+                } else {
+                    // Create new driver definition and assign to connection
+                    // profile
+                    String driverDefinitionNameBase = currentConnectionProfile
+                            .getName();
+                    if (templateDescriptor != null) {
+                        driverDefinitionNameBase = templateDescriptor
+                                .getDefaultDefinitionName();
+                    }
+                    String driverClass = baseProperties
+                            .getProperty(IJDBCDriverDefinitionConstants.DRIVER_CLASS_PROP_ID).toString();
+                    String uniqueDriverInstanceName = generateUniqueDriverDefinitionName(driverDefinitionNameBase);
+                    DriverInstance newDriverInstance = DriverManager
+                            .getInstance().createNewDriverInstance(
+                                    driverTemplateID, uniqueDriverInstanceName,
+                                    jarList, driverClass);
+                    if (newDriverInstance != null) {
+                        baseProperties
+                                .setProperty(
+                                        ConnectionProfileConstants.PROP_DRIVER_DEFINITION_ID,
+                                        newDriverInstance.getId());
+                        currentConnectionProfile.setProperties(
+                                currentConnectionProfile.getProviderId(),
+                                baseProperties);
+                    }
+                }
+            }
+        }
+        return newConnectionProfiles;
+    }
+
+    private static String generateUniqueDriverDefinitionName(String baseDriverInstanceName) {
+        int index = 0;
+        if (baseDriverInstanceName == null){
+            baseDriverInstanceName = "0";
+        }   
+        String testName = baseDriverInstanceName;
+        while (DriverManager.getInstance().getDriverInstanceByName(testName) != null) {
+            index++;
+            testName = baseDriverInstanceName + String.valueOf(index);
+        }
+        return testName;
+    }
+
+	/**
+	 * Load all connection profiles from storage
+	 * 
+	 * @param file
+	 * @param isp
+	 * @return IConnectionProfile[]
+	 * @throws IOException
+	 * @throws GeneralSecurityException
+	 * @throws SAXException
+	 * @throws TransformerException 
+	 * @throws ParserConfigurationException
+	 * @throws TransformerConfigurationException
+	 * @throws TransformerException
+	 */
+	public static IConnectionProfile[] loadCPs(File file, ICipherProvider isp)
+		throws CoreException 
+	{
+		IConnectionProfile retVal[] = null;
+		InputStream is = null;
+		try {
+			if (!file.exists())
+				return new IConnectionProfile[0];
+			FileInputStream fis = new FileInputStream(file);
+			if (isp != null) {
+				is = new CipherInputStream(fis, isp.createDecryptionCipher());
+			}
+			else {
+				is = fis;
+			}
+			//ConnectivityPlugin.getDefault().log("Opened file stream");
+			InputSource source = new InputSource(is);
+			source.setEncoding("UTF-8"); //$NON-NLS-1$
+			Document document = null;
+			try {
+				DocumentBuilder builder = getDocumentBuilder();
+				synchronized (builder) {
+					document = builder.parse(source);
+				}
+			} catch (SAXException e) {
+				// if we get this, the parser may already be in use, so try again
+				try {
+					DocumentBuilder builder = getDocumentBuilder(true);
+					synchronized (builder) {
+						document = builder.parse(source);
+					}
+				} catch (SAXException e2) {
+					// if we got this again, some other issue may be occurring
+					throw new CoreException(new Status(Status.ERROR, ConnectivityPlugin.PLUGIN_ID, -1, 
+							ConnectivityPlugin.getDefault().getResourceString("error.loadprofilesxml"), e));//$NON-NLS-1$
+				}
+			}
+			ArrayList cps = new ArrayList();
+			boolean updatedIDs = false;
+			String version = document.getDocumentElement().getAttribute(VERSIONATTR);
+			if (version != null && version.equals(VERSIONSTR))
+				updatedIDs = readCPsFromXML1_0(cps, document);
+			else {
+				NodeList nl = document.getElementsByTagName(CHILDNAME);
+				for (int i = 0; i < nl.getLength(); i++) {
+					Node node = nl.item(i);
+					if (!(node instanceof Element))
+						continue;
+	
+					Element elem = (Element) node;
+					ConnectionProfile cp = new ConnectionProfile(elem
+							.getAttribute(PROFILENAME), elem
+							.getAttribute(PROFILEDESC), elem
+							.getAttribute(PROVIDERID), elem
+							.getAttribute(PROFILEPARENT), LITERAL_YES.equals(elem
+							.getAttribute(PROFILEAUTOCONNECT)), elem
+							.getAttribute(PROFILEID));
+	
+					if (cp.getProvider() == null)
+						continue;
+					
+					Properties props = keysToProperties(elem);
+					try {
+						if (((ConnectionProfileProvider) cp.getProvider())
+								.getPropertiesPersistenceHook() != null)
+							props = ((ConnectionProfileProvider) cp.getProvider())
+								.getPropertiesPersistenceHook()
+								.populateTransientProperties(props);
+					}
+					catch (Exception e) {
+						if (ConnectionProfileManager.DEBUG_CONNECTION_PROFILE_EXTENSION) {
+							System.err
+									.println(ConnectivityPlugin
+											.getDefault()
+											.getResourceString(
+													"trace.error.propertiesPersistenceHookLoadError", //$NON-NLS-1$
+													new Object[] { cp.getName(),
+															cp.getProviderId()}));
+							e.printStackTrace();
+						}
+					}
+	
+					cp.setBaseProperties(props);
+	
+					NodeList extElements = elem.getChildNodes();
+					for (int extIndex = 0, extCount = extElements.getLength(); extIndex < extCount; ++extIndex) {
+						Node extNode = extElements.item(extIndex);
+						if (extNode.getNodeType() != Node.ELEMENT_NODE) {
+							continue;
+						}
+						String type = extNode.getNodeName();
+						props = keysToProperties((Element) extNode);
+						try {
+							ProfileExtensionProvider pep = (ProfileExtensionProvider) cp
+									.getProfileExtensions().get(type);
+							if (pep != null) {
+								props = pep.getPropertiesPersistenceHook()
+										.populateTransientProperties(props);
+							}
+						}
+						catch (Exception e) {
+							if (ConnectionProfileManager.DEBUG_CONNECTION_PROFILE_EXTENSION) {
+								System.err
+										.println(ConnectivityPlugin
+												.getDefault()
+												.getResourceString(
+														"trace.error.propertiesPersistenceHookLoadError", //$NON-NLS-1$
+														new Object[] {
+																cp.getName(), type}));
+								e.printStackTrace();
+							}
+						}
+						cp.setProperties(type, props);
+					}
+	
+					cp.setCreated();
+					cps.add(cp);
+	
+					updatedIDs = elem.getAttribute(PROFILEID) == null || updatedIDs;
+				}
+			}
+			retVal = (IConnectionProfile[]) cps.toArray(new IConnectionProfile[cps.size()]);
+			if (updatedIDs) {
+				saveCPs(retVal,file, isp);
+			}
+		} catch (IOException e) {
+			throw new CoreException(new Status(Status.ERROR, ConnectivityPlugin.PLUGIN_ID, -1, 
+					ConnectivityPlugin.getDefault().getResourceString("error.loadprofilesxml"), e));//$NON-NLS-1$
+		} catch (GeneralSecurityException e) {
+			throw new CoreException(new Status(Status.ERROR, ConnectivityPlugin.PLUGIN_ID, -1, 
+					ConnectivityPlugin.getDefault().getResourceString("error.loadprofilesxml"), e));//$NON-NLS-1$
+//		} catch (SAXException e) {
+//			throw new CoreException(new Status(Status.ERROR, ConnectivityPlugin.PLUGIN_ID, -1, 
+//					ConnectivityPlugin.getDefault().getResourceString("error.loadprofilesxml"), e));//$NON-NLS-1$
+		} finally {
+			if (is != null)
+				try {
+					is.close();
+					//ConnectivityPlugin.getDefault().log("Closed file stream");
+				} catch (IOException e) {
+					throw new CoreException(new Status(Status.ERROR, ConnectivityPlugin.PLUGIN_ID, -1, 
+							ConnectivityPlugin.getDefault().getResourceString("error.loadprofilesxml"), e));//$NON-NLS-1$
+				}
+		}
+		return retVal;
+	}
+
+
+	/**
+	 * Get connection profiles storage location
+	 * 
+	 * @return location of the connection profiles
+	 */
+	public static IPath getStorageLocation() {
+		if (storageLocation == null) {
+			return ConnectivityPlugin.getStorageLocation();
+		}
+		return storageLocation;
+	}
+
+	/**
+	 * Set connection profiles storage location
+	 * 
+	 * @param location where connection profiles storage is put
+	 */
+	public static void setStorageLocation(IPath location) {
+		storageLocation = location;
+	}
+
+	/**
+	 * Internal method to get a handle to an XML document builder.
+	 * @return
+	 */
+	private static DocumentBuilder getDocumentBuilder() {
+		return getDocumentBuilder(false);
+	}
+	private static DocumentBuilder getDocumentBuilder(boolean reset) {
+		if ((documentBuilder == null ) || reset) {
+		    documentBuilderFactory = DocumentBuilderFactory.newInstance();
+		    documentBuilderFactory.setNamespaceAware(true);
+		    try {
+				documentBuilder = documentBuilderFactory.newDocumentBuilder();
+			} catch (ParserConfigurationException e) {
+				ConnectivityPlugin.getDefault().log(e);
+			}
+		}
+		return documentBuilder;
+	}
+	
+	/**
+	 * Internal method to get a handle to an XML document transformer.
+	 * @return
+	 */
+	private static Transformer getTransformer() {
+		if (transformer == null) {
+            transFactory = TransformerFactory.newInstance();
+            try {
+            	transformer = transFactory.newTransformer();
+            } catch (TransformerConfigurationException e ) {
+            	ConnectivityPlugin.getDefault().log(e);
+            }
+		}
+		return transformer;
+	}
+
+	private static void addDriverProblemMarker(String name, String message) {
+        // maintenance of problem markers is only applicable on OSGi platform
+        if( ! ConnectivityPlugin.isRunningOSGiPlatform() )
+            return;
+        
+		IResource resource = ResourcesPlugin.getWorkspace().getRoot();
+		Map map = new HashMap(3);
+		map.put(IMarker.MESSAGE, ConnectivityPlugin.getDefault().getResourceString(
+				"drivermarker.error", new String[] { name, message})); //$NON-NLS-1$
+		map.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_ERROR));
+		map.put(IMarker.LOCATION, name);
+		map.put(IMarker.TRANSIENT, Boolean.FALSE.toString());
+
+		try {
+			IMarker marker = resource
+					.createMarker("org.eclipse.datatools.connectivity.ui.driverProblem"); //$NON-NLS-1$
+			marker.setAttributes(map);
+		}
+		catch (CoreException e) {
+		}
+	}
+
+	private static void removeOldDriverProblemMarkers(String name) {
+        // maintenance of problem markers is only applicable on OSGi platform
+        if( ! ConnectivityPlugin.isRunningOSGiPlatform() )
+            return;
+        
+		IResource resource = ResourcesPlugin.getWorkspace().getRoot();
+		try {
+			IMarker[] markers = resource.findMarkers(
+					"org.eclipse.datatools.connectivity.ui.driverProblem", true, //$NON-NLS-1$
+					IResource.DEPTH_INFINITE);
+			for (int i = 0; i < markers.length; i++) {
+				if (markers[i].getAttribute(IMarker.LOCATION, new String())
+						.equals(name)) {
+					markers[i].delete();
+				}
+			}
+		}
+		catch (CoreException e) {
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ConnectionProfileProvider.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ConnectionProfileProvider.java
new file mode 100644
index 0000000..3d34ec0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ConnectionProfileProvider.java
@@ -0,0 +1,426 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2011 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ *    IBM Corporation - bug fix
+ *    IBM Corporation - fix for defect 222818
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.datatools.connectivity.ConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.ConnectionProfileMigratorBase;
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.IConfigurationType;
+import org.eclipse.datatools.connectivity.IConnectionFactoryProvider;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IConnectionProfileMigrator;
+import org.eclipse.datatools.connectivity.IConnectionProfileProvider;
+import org.eclipse.datatools.connectivity.IPropertiesPersistenceHook;
+import org.eclipse.datatools.connectivity.PropertiesPersistenceHook;
+import org.eclipse.datatools.connectivity.internal.services.PluginResourceLocatorImpl;
+
+/**
+ * @author rcernich
+ * 
+ * Created on Jan 15, 2004
+ */
+public class ConnectionProfileProvider implements IConnectionProfileProvider {
+
+	public static final String ATTR_ID = "id"; //$NON-NLS-1$
+
+	public static final String ATTR_NAME = "name"; //$NON-NLS-1$
+
+	public static final String ATTR_ICON = "icon"; //$NON-NLS-1$
+
+	public static final String ATTR_FILE_EXTENSION = "fileExtension"; //$NON-NLS-1$
+
+	public static final String ATTR_CATEGORY = "category"; //$NON-NLS-1$
+
+	public static final String ATTR_CONFIGURATION_TYPE = "configurationType"; //$NON-NLS-1$
+
+	public static final String ATTR_MAINTAINCONNECTION = "maintainConnection"; //$NON-NLS-1$
+
+	public static final String ATTR_PING_FACTORY = "pingFactory"; //$NON-NLS-1$
+
+	public static final String ATTR_PROPERTIES_PERSISTENCE_HOOK = "propertiesPersistenceHook"; //$NON-NLS-1$
+
+	public static final String ATTR_CLASS = "class"; //$NON-NLS-1$
+
+	public static final String ELEM_MIGRATION = "migration"; //$NON-NLS-1$
+
+    static final IPropertiesPersistenceHook DEFAULT_PROPERTIES_PERSISTENCE_HOOK = new PropertiesPersistenceHook();
+
+	private String mName;
+
+	private String mId;
+	
+	private URL mIconURL;
+
+	private String mCategory;
+
+	private String mConfigType;
+
+	private String mFileExt;
+
+	private Map mProfileExtensions;
+
+	private Map mConnectionFactories;
+
+	private IConfigurationElement mElement;
+
+	private boolean mMaintainConnection = true;
+
+	private IPropertiesPersistenceHook mPropertiesPersistenceHook;
+	
+	private IConnectionProfileMigrator mMigrator;
+	private boolean mMigratorLoaded = false;
+
+	/**
+	 * 
+	 */
+	public ConnectionProfileProvider(IConfigurationElement element) {
+		super();
+		init(element);
+	}
+	
+	public ConnectionProfileProvider(String id) {
+		mName = ConnectivityPlugin.getDefault().getResourceString("NullConnectionProfileProvider.name"); //$NON-NLS-1$
+		mId = id;
+		mIconURL = null;
+		mCategory = CategoryProvider.ID_CATEGORY_UNKNOWN;
+		mConfigType = null;
+		mFileExt = null;
+		mProfileExtensions = Collections.EMPTY_MAP;
+		mConnectionFactories = Collections.EMPTY_MAP;
+		mElement = null;
+		mMaintainConnection = false;
+		mPropertiesPersistenceHook = DEFAULT_PROPERTIES_PERSISTENCE_HOOK;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionProfileProvider#getName()
+	 */
+	public String getName() {
+		return mName;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionProfileProvider#getId()
+	 */
+	public String getId() {
+		return mId;
+	}
+	
+	public URL getIconURL() {
+		return mIconURL;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionProfileProvider#getConnectionFactory(java.lang.String)
+	 */
+	public IConnectionFactoryProvider getConnectionFactory(String type) {
+		return (IConnectionFactoryProvider) mConnectionFactories.get(type);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionProfileProvider#getConnectionFactories()
+	 */
+	public Map getConnectionFactories() {
+		return new HashMap(mConnectionFactories);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionProfileProvider#getConfigurationType()
+	 */
+	public IConfigurationType getConfigurationType() {
+		return ConnectionProfileManager.getInstance().getConfigurationType(
+				mConfigType);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionProfileProvider#getCategory()
+	 */
+	public ICategory getCategory() {
+		return InternalProfileManager.getInstance().getCategory(mCategory);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionProfileProvider#getFileExtension()
+	 */
+	public String getFileExtension() {
+		return mFileExt;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionProfileProvider#getProfileExtensions()
+	 */
+	public Map getProfileExtensions() {
+		return new HashMap(mProfileExtensions);
+	}
+
+	public void addProfileExtension(IConfigurationElement element) {
+		ProfileExtensionProvider pe = new ProfileExtensionProvider(element);
+		if ( mProfileExtensions == Collections.EMPTY_MAP ) {
+	        mProfileExtensions = new HashMap();
+		}
+		Assert.isTrue(!mProfileExtensions.containsKey(pe.getId()),
+				ConnectivityPlugin.getDefault().getResourceString(
+						"assert.invalid.profile", new Object[] { element //$NON-NLS-1$
+								.toString()}));
+		mProfileExtensions.put(pe.getId(), pe);
+	}
+
+	public void addConnectionFactory(IConfigurationElement element) {
+		addConnectionFactory(new ConnectionFactoryProvider(element));
+	}
+
+	public void addConnectionFactory(IConnectionFactoryProvider icfap) {
+		if (mConnectionFactories == Collections.EMPTY_MAP) {
+            mConnectionFactories = new HashMap();
+		}
+	    if( icfap != null && icfap.getId() != null && 
+	    		! mConnectionFactories.containsKey(icfap.getId()) )
+	        mConnectionFactories.put(icfap.getId(), icfap);
+	    else {  
+	    	
+	    	// for some reason, incoming factory ID is null
+	    	if (icfap == null || icfap.getId() == null) {
+	    		// log and ignore null factory
+	    		ConnectivityPlugin.getDefault().log( 
+	    				ConnectivityPlugin.getDefault().getResourceString(
+	    						"assert.invalid.profile.nullFactory", //$NON-NLS-1$
+	    						new Object[] { icfap.getName(), icfap.getId() } ));
+	    	}
+	    	// connection factory id already added
+	    	else if (mConnectionFactories.containsKey(icfap.getId())) {
+	    		// process factories respecting priority
+	    		IConnectionFactoryProvider currentFactory = (IConnectionFactoryProvider)mConnectionFactories.get(icfap.getId());
+	    		String currentFactoryPriority = currentFactory.getPriority();
+	    		String newFactoryPriority = icfap.getPriority();
+	    		if(comparePriority(currentFactoryPriority, newFactoryPriority) > 0 ){
+	    			// do nothing since new factory is lower priority than existing factory
+	    		} else if (comparePriority(currentFactoryPriority, newFactoryPriority) < 0 ){
+	    			// replace existing factory with new higher priority factory
+	    			mConnectionFactories.remove(icfap.getId());
+	    			mConnectionFactories.put(icfap.getId(), icfap);
+	    		} else {
+		    		// log and ignore repeated use of same factory with same priority
+		    		ConnectivityPlugin.getDefault().log( 
+		    				ConnectivityPlugin.getDefault().getResourceString(
+		    						"assert.invalid.profile.duplicateFactory", //$NON-NLS-1$
+		    						new Object[] { icfap.getId() } ));
+	    		}
+	    	}
+	    }
+	}
+	
+	private int comparePriority(String priority1, String priority2){
+		int GREATER_THAN = 1;
+		int EQUALS = 0;
+		int LESS_THAN = -1;
+		int result = EQUALS;
+		
+		if ((priority1 == null) && (priority2 == null)){
+			result = EQUALS;
+		} else if ((priority1 != null) && (priority2 == null)){
+			result = GREATER_THAN;
+		} else if ((priority1 == null) && (priority2 != null)){
+			result = LESS_THAN;
+		} else if ((priority1 != null) && (priority2 != null)){
+			// compare integer values
+			int priority1IntValue = 0;
+			int priority2IntValue = 0;
+			
+			try {
+				priority1IntValue = Integer.parseInt(priority1);
+			} catch (Exception e){
+				// ignore the NumberFormatException, the integer will retain its default value
+			}
+			
+			try {
+				priority2IntValue = Integer.parseInt(priority2);
+			} catch (Exception e){
+				// ignore the NumberFormatException, the integer will retain its default value
+			}
+			
+			if (priority1IntValue > priority2IntValue){
+				result = GREATER_THAN;
+			} else if (priority1IntValue < priority2IntValue) {
+				result = LESS_THAN;
+			} else {
+				result = EQUALS;
+			}
+		}	
+		return result;
+	}
+
+	public IPropertiesPersistenceHook getPropertiesPersistenceHook() {
+		loadPropertiesPersistenceHook();
+		return mPropertiesPersistenceHook;
+	}
+
+	private void loadPropertiesPersistenceHook() {
+		if (mPropertiesPersistenceHook == null) {
+			mPropertiesPersistenceHook = DEFAULT_PROPERTIES_PERSISTENCE_HOOK;
+			if (mElement != null
+					&& mElement.getAttribute(ATTR_PROPERTIES_PERSISTENCE_HOOK) != null) {
+				try {
+					mPropertiesPersistenceHook = (IPropertiesPersistenceHook) mElement
+							.createExecutableExtension(ATTR_PROPERTIES_PERSISTENCE_HOOK);
+				}
+				catch (CoreException e) {
+					if (ConnectionProfileManager.DEBUG_CONNECTION_PROFILE_EXTENSION) {
+						System.err
+								.println(ConnectivityPlugin
+										.getDefault()
+										.getResourceString(
+												"trace.error.propertiesPersistenceHook", //$NON-NLS-1$
+												new Object[] { mId, mId}));
+						e.printStackTrace();
+					}
+				}
+			}
+		}
+	}
+
+	private void init(IConfigurationElement element) {
+		Assert.isTrue(ConnectionProfileManager.EXT_ELEM_CONNECTION_PROFILE
+				.equals(element.getName()));
+		mProfileExtensions = new HashMap();
+		mConnectionFactories = new HashMap();
+		mElement = element;
+
+		mId = element.getAttribute(ATTR_ID);
+		mName = element.getAttribute(ATTR_NAME);
+		mFileExt = element.getAttribute(ATTR_FILE_EXTENSION);
+		mCategory = element.getAttribute(ATTR_CATEGORY);
+		mConfigType = element.getAttribute(ATTR_CONFIGURATION_TYPE);
+		if (element.getAttribute(ATTR_MAINTAINCONNECTION) != null) {
+			mMaintainConnection = new Boolean(element
+					.getAttribute(ATTR_MAINTAINCONNECTION)).booleanValue();
+		}
+		if (element.getAttribute(ATTR_PING_FACTORY) != null) {
+			ConnectionFactoryProvider cfp = new ConnectionFactoryProvider(element,ConnectionProfileConstants.PING_FACTORY_ID,getId(),ATTR_PING_FACTORY, null);
+			mConnectionFactories.put(ConnectionProfileConstants.PING_FACTORY_ID, cfp);
+		}
+
+		processIconAttr();
+	}
+
+	private void processIconAttr() {
+		String iconAttr = mElement == null ? null : mElement
+				.getAttribute(ATTR_ICON);
+		if (iconAttr != null && iconAttr.trim().length() > 0) {
+			if (iconAttr.startsWith("platform:/")){ //$NON-NLS-1$
+				try {
+					mIconURL = new URL(iconAttr);
+				} catch (MalformedURLException e) {
+					// Do nothing
+				}
+			} else {
+			    mIconURL = PluginResourceLocatorImpl.getPluginEntry( mElement, iconAttr );
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionProfileProvider#hasConnectionState()
+	 */
+	public boolean needsMaintainConnection() {
+		return mMaintainConnection;
+	}
+	
+	public IConnectionProfileMigrator getMigrator() {
+		loadMigrator();
+		return mMigrator;
+	}
+	
+	private void loadMigrator() {
+		if (!mMigratorLoaded) {
+			mMigratorLoaded = true;
+			if (mElement == null) {
+				return;
+			}
+			IConfigurationElement[] migrationElements = mElement
+					.getChildren(ELEM_MIGRATION);
+			if (migrationElements == null || migrationElements.length == 0) {
+				return;
+			}
+			String migratorImpl = migrationElements[0].getAttribute(ATTR_CLASS);
+			if (migratorImpl != null && migratorImpl.length() > 0) {
+				try {
+					mMigrator = (IConnectionProfileMigrator) migrationElements[0]
+							.createExecutableExtension(ATTR_CLASS);
+				}
+				catch (CoreException e) {
+					String error = ConnectivityPlugin.getDefault()
+							.getResourceString("trace.error.migration", //$NON-NLS-1$
+									new Object[] { mId, migratorImpl});
+					ConnectivityPlugin.getDefault().log(error);
+					if (ConnectionProfileManager.DEBUG_CONNECTION_PROFILE_EXTENSION) {
+						System.err.println(error);
+						e.printStackTrace();
+					}
+				}
+			}
+			else {
+				try {
+					IConnectionProfileMigrator migrator = new ConnectionProfileMigratorBase();
+					((ConnectionProfileMigratorBase) migrator)
+							.setInitializationData(migrationElements[0], null,
+									null);
+					mMigrator = migrator;
+				}
+				catch (CoreException e) {
+					String error = ConnectivityPlugin.getDefault()
+							.getResourceString("trace.error.migration", //$NON-NLS-1$
+									new Object[] { mId, migratorImpl});
+					ConnectivityPlugin.getDefault().log(error);
+					if (ConnectionProfileManager.DEBUG_CONNECTION_PROFILE_EXTENSION) {
+						System.err.println(error);
+						e.printStackTrace();
+					}
+				}
+			}
+		}
+	}
+
+	public boolean compatibleWithRepository(IConnectionProfile repository) {
+		//RJC: TODO: Implement and integrate this with the new wizard and
+		// copy/move actions
+		// Some profiles may be specific to a particular repository.
+		return true;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ConnectivityPlugin.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ConnectivityPlugin.java
new file mode 100644
index 0000000..e36b514
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ConnectivityPlugin.java
@@ -0,0 +1,430 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2012 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *      Sybase, Inc. - initial API and implementation
+ *      Actuate Corporation - support for OSGi-less platform (Bugzilla 338997)
+ *      Actuate Corporation - Bugzilla 330725: fix for OSGi-less platform support
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URL;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.core.runtime.Preferences;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.internal.services.PluginResourceLocatorImpl;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+
+import com.ibm.icu.text.MessageFormat;
+
+/**
+ * The main plugin class.
+ */
+@SuppressWarnings("deprecation")
+public class ConnectivityPlugin extends Plugin {
+
+	public static final int INTERNAL_ERROR = 10001;
+	
+	public static final String PLUGIN_ID = "org.eclipse.datatools.connectivity";//$NON-NLS-1$
+	public static final String PROP_SYSTEM_REPOSITORIES_ENABLED = "org.eclipse.datatools.connectivity.repositoriesEnabled";//$NON-NLS-1$
+
+	// The shared instance.
+	private static ConnectivityPlugin plugin;
+    private static IPath defaultWorkspace;
+    private static Logger jdkLogger;
+
+	private ResourceBundle resourceBundle;
+    private Preferences localPreferences;
+	
+	/**
+	 * The constructor.
+	 */
+	public ConnectivityPlugin() {
+		super();
+		plugin = this;
+	}
+
+	/**
+	 * Returns the shared instance.
+	 */
+	public static ConnectivityPlugin getDefault() {
+	    if( plugin == null )
+	    {
+	        synchronized( ConnectivityPlugin.class )
+	        {
+	            if( plugin == null )
+	                new ConnectivityPlugin();
+	        }
+	    }
+		return plugin;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		InternalProfileManager.getInstance().dispose();
+		ClassLoaderCacheManager.releaseInstance();
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the plugin's resource bundle,
+	 */
+	public ResourceBundle getResourceBundle() {
+		try {
+			if (resourceBundle == null)
+				resourceBundle = ResourceBundle
+						.getBundle("org.eclipse.datatools.connectivity.internal.resources"); //$NON-NLS-1$
+		}
+		catch (MissingResourceException x) {
+			resourceBundle = null;
+		}
+		return resourceBundle;
+	}
+
+	public String getResourceString(String key) {
+		try {
+			ResourceBundle resBundle = getResourceBundle();
+			if (resBundle == null) {
+				return key;
+			}
+
+			return resBundle.getString(key);
+		}
+		catch (MissingResourceException e) {
+			return key;
+		}
+	}
+
+	public String getResourceString(String key, Object[] arguments) {
+		MessageFormat f = new MessageFormat(getResourceString(key));
+
+		return f.format(arguments);
+	}
+
+	public static String getSymbolicName() {
+	    Bundle theBundle = getDefault().getBundle();
+	    return theBundle != null ? 
+	            theBundle.getSymbolicName() : 
+	            PLUGIN_ID;
+	}
+	
+	/**
+	 * Returns the default workspace location of this plug-in.
+	 * @return the path of this plug-in's default workspace location.
+	 */
+	public static IPath getDefaultStateLocation()
+	{
+        if( defaultWorkspace == null )
+        {
+            IPath wsPath = PluginResourceLocatorImpl.getPluginStateLocation( PLUGIN_ID );
+            if( wsPath == null )
+            {
+                String messageId = "ConnectivityPlugin.error.noDefaultWorkspace"; //$NON-NLS-1$
+                String errorMsg = getDefault().getResourceString( messageId );
+                getDefault().logError( errorMsg );
+                throw new IllegalStateException( errorMsg );
+            }
+            
+            synchronized( ConnectivityPlugin.class )
+            {
+                if( defaultWorkspace == null )
+                    defaultWorkspace = wsPath;
+            }
+        }
+        return defaultWorkspace;
+	}
+
+	/**
+	 * Returns the file path of the specified filename in 
+	 * this plug-in's default workspace location.  
+	 * Provides support for both OSGi and OSGi-less platforms.
+	 * @param filename base file name
+	 * @return the path of of the specified file in this plug-in's 
+	 *         default workspace location
+     * @since DTP 1.10
+	 */
+	public static IPath getWorkspaceFilePath( String filename )
+	{
+        IPath metadataPath = ConnectivityPlugin.getDefaultStateLocation();
+        return metadataPath.append( filename );
+	}
+
+	/**
+	 * Returns the default storage location for persisted files that are 
+	 * configured and consumed by this plug-in, 
+	 * such as those of connection profiles and driver definitions.
+	 * The storage location is created, if it did not exist prior to this call. 
+	 * @return the location path of the default storage area for this plugin
+	 */
+    public static IPath getStorageLocation() 
+    {
+        IPath defaultLocation = getDefaultStateLocation();
+        
+        // create default folder if none exists
+        File file = defaultLocation.toFile();
+        if( ! file.exists() )
+        {
+            try
+            {
+                file.mkdir();
+            }
+            catch( Exception e )
+            {
+                // log warning
+                getDefault().logWarning( e.getMessage() );
+                return null;
+            }
+        }
+        return defaultLocation;
+    }
+    
+    /**
+     * Returns a URL to the entry at the specified path in this plug-in.
+     * @param path  the path name of the entry
+     * @return  A URL to the entry, or null if no entry could be found 
+     */
+	public static URL getEntry( String path )
+	{
+	    return PluginResourceLocatorImpl.getPluginEntry( PLUGIN_ID, path, 
+	            ConnectivityPlugin.class.getClassLoader() );
+	}
+
+	/**
+	 * Find the specified resource from this plugin's class loader. 
+	 * @param name The name of the resource. See {@link ClassLoader#getResource(String)} 
+     *              for a description of the format of a resource name.
+	 * @return A URL to the named resource, or null if the resource could not be found 
+	 */
+	public static URL getResource( String name )
+	{
+	    return PluginResourceLocatorImpl.getPluginResource( PLUGIN_ID, name, 
+	            ConnectivityPlugin.class.getClassLoader() );
+	}
+	
+	/** 
+	 * Indicates whether this plug-in is running on the OSGi platform.
+	 * @return true if running on the OSGi platform; false otherwise
+	 */
+	public static boolean isRunningOSGiPlatform()
+	{
+	    return Platform.getBundle( PLUGIN_ID ) != null;
+	}
+	
+	/**
+	 * Sets the current value of the boolean-valued property with the
+     * specified name. 
+	 * @param name  the name of the property; must not be <code>null</code>
+	 * @param value     the new current value of the property
+	 */
+	public void setPreferenceValue( String name, boolean value ) 
+	{
+        getPreferences().setValue( name, value );
+	}
+
+	/**
+     * Sets the current value of the string-valued property with the
+     * specified name. 
+     * @param name  the name of the property; must not be <code>null</code>
+     * @param value     the new current value of the property
+     * @since DTP 1.10
+	 */
+	public void setPreferenceValue( String name, String value ) 
+    {
+        getPreferences().setValue( name, value );
+    }
+
+	/**
+	 * Returns the current value of the boolean-valued property with the
+     * specified name.
+	 * @param name  the name of the property; must not be <code>null</code>
+	 * @return the boolean-valued property; or the default value (<code>false</code>) 
+     *      if there is no property with the specified name, or if the current value 
+     *      cannot be treated as a boolean
+	 */
+	public boolean getPreferenceBooleanValue( String name ) 
+	{
+        return getPreferences().getBoolean( name );
+	}
+
+	/**
+     * Returns the current value of the string-valued property with the
+     * specified name.
+     * @param name  the name of the property; must not be <code>null</code>
+     * @return the string-valued property; or the default-default value (the empty string "") 
+     *      if there is no property with the specified name
+     * @since DTP 1.10
+	 */
+	public String getPreferenceStringValue( String name ) 
+    {
+        return getPreferences().getString( name );
+    }
+
+	/**
+	 * Saves the non-default-valued preference properties  
+     * to the specified output stream.
+	 * @param out   the output stream 
+     * @param header a comment to be included in the output, or 
+     *    <code>null</code> if none
+     * @exception IOException if there is a problem saving the preference properties
+	 */
+	public void storePreferences( OutputStream out, String header ) 
+	    throws IOException
+	{
+        getPreferences().store( out, header );
+	}
+
+	/**
+	 * Loads the non-default-valued preference properties from the
+     * specified input stream. Default property values are not affected.
+     * @param in the input stream
+     * @exception IOException if there is a problem loading the preference properties
+	 */
+	public void loadPreferences( InputStream in ) 
+	    throws IOException 
+	{
+	    getPreferences().load( in );
+	}
+    
+    private Preferences getPreferences()
+    {
+        if( isRunningOSGiPlatform() ) 
+            return getPluginPreferences();
+
+        // running on non-OSGi platform, use local Preferences instance instead
+       if( localPreferences == null ) 
+           localPreferences = new Preferences();
+       return localPreferences;
+    }
+	
+	/**
+	 * Logs runtime status.
+	 * 
+	 * @param status Runtime status.
+	 */
+	public void log(IStatus status) {
+        if ( isRunningOSGiPlatform() )
+            getLog().log(status);
+        else    // not running OSGi platform, use JDK logger instead
+            getJdkLogger().log( getLogLevel( status ), status.getMessage() );
+	}
+
+	/**
+	 * Logs error message.
+	 * 
+	 * @param message Error message.
+	 */
+	public void log(String message) {
+	    logError(message);
+	}
+	
+    /**
+     * Logs error message.
+     * @param message   error message
+     * @since DTP 1.8
+     */
+    public void logError(String message) {
+        log(createErrorStatus(message));
+    }
+    
+    /**
+     * Logs informational message.
+     * @param message   informational message
+     * @since DTP 1.8
+     */
+    public void logInfo(String message) {
+        log( createStatus( IStatus.INFO, message) );
+    }
+
+    public void logWarning( String message ) {
+        log( createStatus( IStatus.WARNING, message ) );
+    }
+    
+	/**
+	 * Logs and exception.
+	 * 
+	 * @param e Exception.
+	 */
+	public void log(Throwable e) {
+		log(createErrorStatus(e));
+	}
+
+	public IStatus createErrorStatus(String message) {
+	    return createStatus( IStatus.ERROR, message );
+	}
+	
+	private IStatus createStatus(int severity, String message) {
+		return new Status(severity, getSymbolicName(),
+				INTERNAL_ERROR, message, null);
+	}
+
+	public IStatus createErrorStatus(Throwable e) {
+		String message;
+		if (e == null || e.getMessage() == null) {
+			message = getResourceString("plugin.internal_error"); //$NON-NLS-1$
+		}
+		else {
+			message = e.getMessage();
+		}
+		return new Status(IStatus.ERROR, getSymbolicName(),
+				INTERNAL_ERROR, message, e);
+	}
+	
+    private static Logger getJdkLogger()
+    {
+        if( jdkLogger == null )
+        {
+            synchronized( ConnectivityPlugin.class )
+            {
+                if( jdkLogger == null )
+                    jdkLogger = Logger.getLogger( PLUGIN_ID );
+            }
+        }
+        return jdkLogger;
+    }
+	
+    private static Level getLogLevel( IStatus status )
+    {
+        int severity = status.getSeverity();
+        switch( severity )
+        {
+            case IStatus.CANCEL:    return Level.INFO;
+            case IStatus.ERROR:     return Level.SEVERE;
+            case IStatus.INFO:      return Level.INFO;
+            case IStatus.OK:        return Level.FINE;
+            case IStatus.WARNING:   return Level.WARNING;
+        }
+        return Level.WARNING;
+    }
+    
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/CreateConnectionJob.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/CreateConnectionJob.java
new file mode 100644
index 0000000..f8fa119
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/CreateConnectionJob.java
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2006-2011 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionFactoryProvider;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+
+public class CreateConnectionJob extends Job {
+
+	private ManagedConnection mManagedConnection;
+	private Object mFamily;
+
+	public CreateConnectionJob(ManagedConnection managedConnection,
+								Object family) {
+		super(ConnectivityPlugin.getDefault().getResourceString(
+				"CreateConnectionJob.name", //$NON-NLS-1$
+				new Object[] {
+						managedConnection.getConnectionFactoryProvider()
+								.getName(),
+						managedConnection.getConnectionProfile().getName()}));
+		setUser(true);
+		mManagedConnection = managedConnection;
+		mFamily = family;
+	}
+
+	public ManagedConnection getManagedConnection() {
+		return mManagedConnection;
+	}
+
+	private IConnectionFactoryProvider getConnectionFactoryProvider() {
+		return mManagedConnection.getConnectionFactoryProvider();
+	}
+	
+	private IConnectionProfile getConnectionProfile() {
+		return mManagedConnection.getConnectionProfile();
+	}
+
+	protected IStatus run(IProgressMonitor monitor) {
+		IStatus status = Status.OK_STATUS;
+		monitor.beginTask(getName(), IProgressMonitor.UNKNOWN);
+		try {
+			mManagedConnection.createConnection(monitor);
+			IConnection connection = mManagedConnection.getConnection();
+			if (connection.getConnectException() != null) {
+				// when setting the status as warning the user gets an
+				// error message dialog that is more "user friendly"
+				status = new Status(IStatus.WARNING, ConnectivityPlugin.getSymbolicName(), -1,
+						ConnectivityPlugin.getDefault().getResourceString(
+								"CreateConnectionJob.error", //$NON-NLS-1$
+								new Object[] {
+										getConnectionFactoryProvider()
+												.getName(),
+										getConnectionProfile().getName(),
+										connection.getConnectException()
+												.getMessage()}), connection
+								.getConnectException());
+			}
+		}
+		catch (CoreException e) {
+			status = e.getStatus();
+		}
+		catch (Exception e) {
+			status = new Status(IStatus.ERROR, ConnectivityPlugin.getSymbolicName(), -1, 
+					    ConnectivityPlugin.getDefault().getResourceString(
+							"CreateConnectionJob.error", //$NON-NLS-1$
+							new Object[] {
+									getConnectionFactoryProvider().getName(),
+									getConnectionProfile().getName(),
+									e.getMessage()}), e);
+		}
+		monitor.done();
+		return status;
+	}
+
+	public boolean belongsTo(Object family) {
+		return mFamily != null && family == mFamily;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/CreateOfflineConnectionJob.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/CreateOfflineConnectionJob.java
new file mode 100644
index 0000000..449b0f6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/CreateOfflineConnectionJob.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2011 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.datatools.connectivity.IConnectionFactoryProvider;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+
+public class CreateOfflineConnectionJob extends Job {
+
+	private ManagedConnection mManagedConnection;
+	private Object mFamily;
+
+	public CreateOfflineConnectionJob(ManagedConnection managedConnection,
+										Object family) {
+		super(ConnectivityPlugin.getDefault().getResourceString(
+				"CreateOfflineConnectionJob.name", //$NON-NLS-1$
+				new Object[] {
+						managedConnection.getConnectionFactoryProvider()
+								.getName(),
+						managedConnection.getConnectionProfile().getName()}));
+		setUser(true);
+		mManagedConnection = managedConnection;
+		mFamily = family;
+	}
+
+	public ManagedConnection getManagedConnection() {
+		return mManagedConnection;
+	}
+
+	private IConnectionFactoryProvider getConnectionFactoryProvider() {
+		return mManagedConnection.getConnectionFactoryProvider();
+	}
+
+	private IConnectionProfile getConnectionProfile() {
+		return mManagedConnection.getConnectionProfile();
+	}
+
+	protected IStatus run(IProgressMonitor monitor) {
+		IStatus status = Status.OK_STATUS;
+		monitor.beginTask(getName(), IProgressMonitor.UNKNOWN);
+		try {
+			if (mManagedConnection.canWorkOffline()) {
+				mManagedConnection.workOffline(monitor);
+			}
+			else if (mManagedConnection.isConnected()) {
+				mManagedConnection.close();
+			}
+		}
+		catch (CoreException e) {
+			status = e.getStatus();
+		}
+		catch (Exception e) {
+			status = new Status(IStatus.ERROR, ConnectivityPlugin.getSymbolicName(), -1, 
+					ConnectivityPlugin.getDefault().getResourceString(
+							"CreateOfflineConnectionJob.error", //$NON-NLS-1$
+							new Object[] {
+									getConnectionFactoryProvider().getName(),
+									getConnectionProfile().getName(),
+									e.getMessage()}), e);
+		}
+		monitor.done();
+		return status;
+	}
+
+	public boolean belongsTo(Object family) {
+		return mFamily != null && family == mFamily;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/DriverUtil.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/DriverUtil.java
new file mode 100644
index 0000000..1934522
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/DriverUtil.java
@@ -0,0 +1,146 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal;
+
+import java.io.File;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.sql.Driver;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.jar.JarFile;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipException;
+import java.util.zip.ZipFile;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+
+/**
+ * Set of utility methods to process class names from jar files
+ * @author brianf
+ *
+ */
+public class DriverUtil {
+	
+	/**
+	 * empty constructor
+	 */
+	private DriverUtil() {
+		// empty constructor
+	}
+
+	/**
+	 * Returns the number of classes in the jar. This is used for
+	 * the progress monitor.
+	 * 
+	 * @param jarFile
+	 * @return
+	 * @throws Exception
+	 */
+	public static int countClassesToProcess ( File jarFile ) throws Exception {
+		JarFile jar = new JarFile(jarFile);
+		return jar.getManifest().getEntries().size();
+	}
+	
+	/**
+	 * Returns a string array of class names from the jar file.
+	 * @param jarFile
+	 * @param monitor
+	 * @return
+	 * @throws Exception
+	 */
+	public static String[] getDriverClassesFromJar ( File jarFile, IProgressMonitor monitor ) throws Exception {
+		ArrayList list = new ArrayList();
+		JarFile jar = null;
+		try {
+			jar = new JarFile(jarFile);
+		} catch (ZipException e) {
+			// must not be a zip file - return empty list
+			return new String[0];
+		}
+		ZipFile zip = new ZipFile(jarFile);
+		String taskDescription = 
+			ConnectivityPlugin.getDefault().getResourceString("DriverUtil.taskName",  //$NON-NLS-1$
+					new Object[]{jarFile.getName()});
+		int max = zip.size(); 
+		monitor.beginTask(taskDescription, max);
+		Enumeration iter = jar.entries();
+		while (iter.hasMoreElements()) {
+			ZipEntry entry = (ZipEntry) iter.nextElement();
+			monitor.worked(1);
+			if (entry.getName().endsWith(".class")) { //$NON-NLS-1$
+				try {
+					String name = entry.getName();
+					name = name.substring(0, name.length() - 6);
+					name = name.replace('/', '.');
+					Class testClass = getDriverClassesFromJar2(jarFile, name);
+					if (testClass != null) {
+						list.add(testClass.getName());	
+					}
+				} catch (ClassNotFoundException e) {
+					e.printStackTrace();
+				}
+			}
+		}
+		return (String[]) list.toArray(new String[list.size()]);
+	}
+
+	/**
+	 * Gets a Class instance from the jar of the supplied class name 
+	 * @param jarFile
+	 * @param classname
+	 * @return
+	 * @throws Exception
+	 */
+	private static Class getDriverClassesFromJar2 (File jarFile, String classname) throws Exception {
+		Class outclass = null;
+		URL[] jdbcClasspathURL = new URL[1];
+		jdbcClasspathURL[0] = jarFile.toURL();
+
+		//
+		// Create a new ClassLoader using the jdbcClasspathURL and attempt to
+		// load the driver. Delegate to this class' ClassLoader if the class isn't
+		// found.
+		//
+		try {
+			//
+			// Check this classloader's classpath for driver...
+			//
+			URLClassLoader classLoader = URLClassLoader.newInstance(jdbcClasspathURL);
+			Class driverClass = classLoader.loadClass(Driver.class.getName());
+			
+			try {
+				Class testclass = classLoader.loadClass(classname);
+
+				if (driverClass.isAssignableFrom(testclass)) {
+					//	 we've got a JDBC driver
+					outclass = testclass;
+				}
+			} catch (ClassNotFoundException cnfe) {
+				//ignore
+			} catch (NoClassDefFoundError err) {
+				//ignore
+			} catch (UnsupportedClassVersionError err) {
+				String reason = err.toString();
+				Exception ce = new Exception(reason);
+				ce.setStackTrace(err.getStackTrace());
+				ConnectivityPlugin.getDefault().log(ce);
+			}
+		} catch (Exception e) {
+			String reason = e.toString();
+			Exception ce = new Exception(reason);
+			ce.setStackTrace(e.getStackTrace());
+			throw ce;
+		}
+        
+        return outclass;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/InternalConnectionFactoryProvider.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/InternalConnectionFactoryProvider.java
new file mode 100644
index 0000000..df96ee3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/InternalConnectionFactoryProvider.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal;
+
+import org.eclipse.datatools.connectivity.IConnectionFactoryProvider;
+import org.eclipse.datatools.connectivity.IOfflineConnectionFactory;
+
+/**
+ * Internal interface which consolidates offline functionality into connection
+ * factory provider wrappers for use by the framework
+ * 
+ * @author rcernich
+ * 
+ * Created on May 2, 2007
+ */
+public interface InternalConnectionFactoryProvider extends
+		IConnectionFactoryProvider, IOfflineConnectionFactory {
+
+	/**
+	 * Convenience method.
+	 * 
+	 * @return true if the underlying connection factory implementation is an
+	 *         IOfflineConnectionFactory
+	 */
+	boolean supportsWorkOfflineMode();
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/InternalProfileManager.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/InternalProfileManager.java
new file mode 100644
index 0000000..f6d78c5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/InternalProfileManager.java
@@ -0,0 +1,1632 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2011 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ *     IBM Corporation -  fix for defect #223855
+ *     IBM Corporation -  fix for defect #241713
+ *     Actuate Corporation - fix for bug #247587
+ *     brianf - added Transient profile functionality for bug 253606
+ *     Actuate Corporation - enhanced transient profile handling (bug #298357)
+ *     Actuate Corporation - support for OSGi-less platform (Bugzilla 338997)
+ *     
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.ConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.ConnectionProfileException;
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IManagedConnection;
+import org.eclipse.datatools.connectivity.IProfileListener;
+import org.eclipse.datatools.connectivity.IProfileListener1;
+import org.eclipse.datatools.connectivity.IPropertySetChangeEvent;
+import org.eclipse.datatools.connectivity.IPropertySetListener;
+import org.eclipse.datatools.connectivity.ProfileManager;
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.drivers.DriverManager;
+import org.eclipse.datatools.connectivity.drivers.DriverValidator;
+import org.eclipse.datatools.connectivity.internal.repository.IConnectionProfileRepository;
+import org.eclipse.datatools.connectivity.internal.services.PluginResourceLocatorImpl;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleException;
+
+/**
+ * ProfileManger is a singleton class serving as a helper class for connection
+ * profiles access. It also caches connection profiles and only persists to
+ * storage when changes made and at Eclipse shutdown.
+ * 
+ * @author shongxum
+ */
+public class InternalProfileManager {
+	
+	public static String PROFILE_PATH_SEPARATOR = "::"; //$NON-NLS-1$
+
+	private static InternalProfileManager mManager = null;
+
+	private IConnectionProfile[] mProfiles = null;
+	
+	private List mTransientProfiles = null;
+
+	private Set mRepositories = new HashSet();
+
+	private boolean mIsDirty = false;
+	
+	private ListenerList mProfileListeners = new ListenerList();
+	
+	private static final String PLUGIN_STATE_LOCATION = "Plugin_State_Location"; //$NON-NLS-1$
+	private static final String TRANSIENT_PROFILE_NAME_PREFIX = "Transient.";  //$NON-NLS-1$
+	
+	private boolean loadLocal = true;  // do we need to load locally registered db's?
+	
+	private IPropertySetListener mPropertySetListener = new IPropertySetListener() {
+		public void propertySetChanged(IPropertySetChangeEvent event) {
+			setDirty(true);
+			saveChanges();
+			// Pass this through to any listeners on the manager
+			fireProfileChanged(event.getConnectionProfile(),null,null,null);
+		}
+	};
+	
+	private IProfileListener1 mProfileChangeListener = new IProfileListener1() {
+
+		public void profileChanged(IConnectionProfile profile, String oldName,
+				String oldDesc, Boolean oldAutoConnect) {
+			removeOldFailureMarkers(oldName);
+		}
+
+		public void profileAdded(IConnectionProfile profile) {
+		}
+
+		public void profileChanged(IConnectionProfile profile) {
+			removeOldFailureMarkers(profile.getName());
+		}
+
+		public void profileDeleted(IConnectionProfile profile) {
+			removeOldFailureMarkers(profile.getName());
+		}
+		
+	};
+
+	private InternalProfileManager() {
+		// Singleton class
+	}
+
+	public static InternalProfileManager getInstance() {
+		if (mManager == null)
+			synchronized( InternalProfileManager.class ) {
+				if (mManager == null)
+					mManager = new InternalProfileManager();
+			}
+		return mManager;
+	}
+
+	/**
+	 * Get all connection profiles persisted in workspace
+	 * 
+	 * @return connection profiles
+	 */
+	public IConnectionProfile[] getProfiles(boolean searchRepositories) {
+		ArrayList cps = new ArrayList();
+		
+		if (mProfiles == null) 
+		{
+			loadProfiles();
+		}
+		
+		cps.addAll(Arrays.asList(mProfiles));
+		
+		if (searchRepositories) {
+			for (Iterator it = mRepositories.iterator(); it.hasNext(); ) {
+				cps.addAll(Arrays.asList(((IConnectionProfileRepository)it.next()).getProfiles()));
+			}
+		}
+		return (IConnectionProfile[])cps.toArray(new IConnectionProfile[0]);
+	}
+
+	/**
+	 * Get category by name
+	 * 
+	 * @param catID
+	 * @return ICategory
+	 */
+	public ICategory getCategory(String catID) {
+		ConnectionProfileManager cpm = ConnectionProfileManager.getInstance();
+		CategoryProvider cp = cpm.getCategory(catID);
+		return cp == null ? null : cp.createCategory(null);
+	}
+
+	/**
+	 * Get root categories whose parent category is null
+	 * 
+	 * @return ICategory[]
+	 */
+	public ICategory[] getRootCategories() {
+		Collection col = ConnectionProfileManager.getInstance().getCategories()
+				.values();
+		ArrayList cats = new ArrayList(col.size());
+		for (Iterator itr = col.iterator(); itr.hasNext();) {
+			CategoryProvider cp = (CategoryProvider) itr.next();
+			if (cp.getParent() == null)
+				cats.add(cp.createCategory(null));
+		}
+		return (ICategory[]) cats.toArray(new ICategory[cats.size()]);
+	}
+
+	/**
+	 * Get connection profiles by category
+	 * 
+	 * @param catID
+	 * @return IConnectionProfile[]
+	 */
+	public IConnectionProfile[] getProfilesByCategory(String catID, boolean searchRepositories) {
+		ArrayList cps = new ArrayList();
+		IConnectionProfile[] profiles = getProfiles(false);
+		if (catID == null)
+			return profiles;
+		for (int i = 0; i < profiles.length; i++) {
+			if (profiles[i].getProvider().getCategory() != null
+					&& profiles[i].getProvider().getCategory().getId().equals(
+							catID))
+				cps.add(profiles[i]);
+		}
+		if (searchRepositories) {
+			for (Iterator it = mRepositories.iterator(); it.hasNext(); ) {
+				cps.addAll(Arrays.asList(((IConnectionProfileRepository)it.next()).getProfilesByCategory(catID)));
+			}
+		}
+		return (IConnectionProfile[]) cps.toArray(new IConnectionProfile[0]);
+	}
+
+	/**
+	 * Get connection profile by name;
+	 * includes looking up a transient profile.
+	 * @param name
+	 * @param checkRepositories
+	 * @return IConnectionProfile
+	 */
+	public IConnectionProfile getProfileByName(String name,
+			boolean checkRepositories) {
+	    if (name == null)
+	        return null;
+	    
+        IConnectionProfile cp = null;
+
+        // if name has the default transient profile prefix, 
+        // first check among the transient profiles
+        if (name.startsWith( TRANSIENT_PROFILE_NAME_PREFIX )) {
+            cp = getTransientProfileByName( name );
+            if (cp != null)    // found specified profile
+                return cp;
+        }
+        
+		IConnectionProfile[] cps = getProfiles(false);
+		for (int i = 0; i < cps.length; i++) {
+			if (cps[i].getName().equals(name)) {
+				cp = cps[i];
+				break;
+			}
+		}
+		if (checkRepositories) {
+			for (Iterator it = mRepositories.iterator(); cp == null
+					&& it.hasNext();) {
+				cp = ((IConnectionProfileRepository) it.next())
+						.getProfileByName(name);
+			}
+		}
+		
+		// if still not found, perhaps it is a transient profile whose name 
+		// does not start with the default prefix
+		if ( cp == null && ! name.startsWith( TRANSIENT_PROFILE_NAME_PREFIX ))
+            cp = getTransientProfileByName( name );
+
+		return cp;
+	}
+	
+	public IConnectionProfile getProfileByPath(String path) {
+		if (path == null || path.length() == 0) {
+			return null;
+		}
+
+		int separator = path.indexOf(PROFILE_PATH_SEPARATOR);
+		if (separator < 0) {
+			return getProfileByName(path, false);
+		}
+		return getProfileByPath(getProfileByName(path.substring(0, separator),
+				false), path.substring(separator
+				+ PROFILE_PATH_SEPARATOR.length()));
+	}
+
+	/**
+	 * Find a connection profile by the full path. Typically this path is 
+	 * 	REPOSITORY::PROFILE
+	 * @param path
+	 * @return
+	 */
+	public IConnectionProfile getProfileByFullPath ( String path ) {
+		if (path != null) {
+			String[] tokens = tokenize(path, PROFILE_PATH_SEPARATOR);
+			if (tokens != null && tokens.length > 0) {
+				String testForProfile = tokens[0];
+				boolean hasRepository = false;
+				IConnectionProfile testRepo = this.getProfileByName(testForProfile, false);
+				if (testRepo != null && mRepositories.contains(getRepositoryByProfile(testRepo))) {
+					hasRepository = true;
+				}
+				if (testRepo != null && mRepositories.contains(testRepo)) {
+					hasRepository = true;
+				}
+				String shortPath = tokens[tokens.length - 1];
+				if (hasRepository) {
+					shortPath = this.getProfileByName(testForProfile, false).getName() +
+						PROFILE_PATH_SEPARATOR + shortPath;
+				}
+				IConnectionProfile foundProfile = getProfileByPath(shortPath);
+				if (foundProfile != null) 
+					return foundProfile;
+			}
+		}
+		return null;
+	}
+	
+	private IConnectionProfileRepository getRepositoryByProfile(IConnectionProfile profile) {
+		if (profile != null) {
+			IManagedConnection imc = profile.getManagedConnection(IConnectionProfileRepository.class.getName());
+			if (imc != null && imc.getConnection() != null) {
+				return (IConnectionProfileRepository)imc.getConnection().getRawConnection();
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Retokenize by putting an array back together with the path separator between items
+	 * @param tokens
+	 * @return
+	 */
+	public String unTokenize(String[] tokens) {
+		StringBuffer buffer = new StringBuffer();
+		if (tokens != null && tokens.length > 0) {
+			for (int i = 0; i < tokens.length; i++) {
+				buffer.append(tokens[i]);
+				if (i < (tokens.length - 1)) {
+					buffer.append(InternalProfileManager.PROFILE_PATH_SEPARATOR);
+				}
+			}
+		}
+		return buffer.toString();
+	}
+	
+	/**
+	 * Break a delimited string into an array
+	 * @param input
+	 * @param delim
+	 * @return
+	 */
+	public String[] tokenize (String input, String delim) {
+		char[] chars = input.toCharArray();
+		ArrayList list = new ArrayList();
+		String temp = ""; //$NON-NLS-1$
+		boolean skip = false;
+		for (int i = 0; i < chars.length; i++) {
+			char test = chars[i];
+			char test2 = ' ';
+			if (i < (chars.length - 1)) {
+				test2 = chars[i+1];
+			}
+			String testStr = "" + test + test2; //$NON-NLS-1$
+			if (testStr.equals(delim)) {
+				list.add(temp.trim());
+				temp = ""; //$NON-NLS-1$
+				skip = true;
+			}
+			else if (!skip) {
+				temp = temp + test;
+			}
+			else {
+				skip = false;
+			}
+			if (i == (chars.length - 1))
+				list.add(temp.trim());
+		}
+		return (String[]) list.toArray(new String[list.size()]);
+	}
+	
+	/**
+	 * Return the delimited path for a profile (REPO::PROFILE)
+	 * @param profile
+	 * @return
+	 */
+	public String getProfileFullPath ( IConnectionProfile profile ) {
+		String path = null;
+		
+		if (profile != null) {
+			path = profile.getName();
+			
+			if (profile.getCategory() != null) {
+				ICategory category = profile.getCategory();
+				while (category != null) {
+					path = category.getId() + PROFILE_PATH_SEPARATOR + path;
+					category = category.getParent();
+				}
+				
+				IConnectionProfileRepository repository =
+					getRepositoryForProfile(profile);
+				if (repository != null) {
+					path = repository.getRepositoryProfile().getName() + 
+						PROFILE_PATH_SEPARATOR + path;
+				}
+			}
+		}
+		return path;
+	}
+	
+	private IConnectionProfile getProfileByPath(IConnectionProfile parent,
+			String path) {
+		if (parent == null
+				|| parent.getProvider().getConnectionFactory(
+						IConnectionProfileRepository.class.getName()) == null
+				|| path == null || path.length() == 0) {
+			return null;
+		}
+
+		IManagedConnection imc = parent
+				.getManagedConnection(IConnectionProfileRepository.class
+						.getName());
+		if (imc == null || !imc.isConnected() || imc.getConnection() == null) {
+			return null;
+		}
+
+		IConnectionProfileRepository repo = (IConnectionProfileRepository) imc
+				.getConnection().getRawConnection();
+		int separator = path.indexOf(PROFILE_PATH_SEPARATOR);
+		if (separator < 0) {
+			return repo.getProfileByName(path);
+		}
+		return getProfileByPath(repo.getProfileByName(path.substring(0,
+				separator)), path.substring(separator
+				+ PROFILE_PATH_SEPARATOR.length()));
+	}
+
+	/**
+	 * Get connection profile by instance ID
+	 * 
+	 * @param id
+	 * @return IConnectionProfile
+	 */
+	public IConnectionProfile getProfileByInstanceID(String id) {
+		IConnectionProfile[] cps = getProfiles(false);
+		IConnectionProfile cp = null;
+		for (int i = 0; i < cps.length; i++) {
+			if (cps[i].getInstanceID().equals(id)) {
+				cp = cps[i];
+				break;
+			}
+		}
+		for (Iterator it = mRepositories.iterator(); cp == null && it.hasNext(); ) {
+			cp = ((IConnectionProfileRepository)it.next()).getProfileByInstanceID(id);
+		}
+		return cp;
+	}
+
+	/**
+	 * Get connection profiles by connection profile(cp) provider ID associated
+	 * with each cp
+	 * 
+	 * @param ID
+	 * @return IConnectionProfile[]
+	 */
+	public IConnectionProfile[] getProfileByProviderID(String ID, boolean searchRepositories) {
+		IConnectionProfile[] cps = getProfiles(false);
+		ArrayList cpset = new ArrayList();
+		for (int i = 0; i < cps.length; i++) {
+			if (cps[i].getProviderId().equals(ID)) {
+				cpset.add(cps[i]);
+			}
+		}
+		if (searchRepositories) {
+			for (Iterator it = mRepositories.iterator(); it.hasNext(); ) {
+				cpset.addAll(Arrays.asList(((IConnectionProfileRepository)it.next()).getProfileByProviderID(ID)));
+			}
+		}
+		return (IConnectionProfile[]) cpset.toArray(new IConnectionProfile[0]);
+	}
+
+	/**
+	 * Create connection profile
+	 * 
+	 * @param name
+	 * @param description
+	 * @param providerID
+	 * @param baseProperties
+	 * @throws ConnectionProfileException
+	 */
+	public IConnectionProfile createProfile(String name, String description,
+			String providerID, Properties baseProperties)
+			throws ConnectionProfileException {
+		return createProfile(name, description, providerID, baseProperties, "", false); //$NON-NLS-1$
+	}
+
+	/**
+	 * Create transient connection profile
+	 * 
+	 * @param name
+	 * @param description
+	 * @param providerID
+	 * @param baseProperties
+	 * @throws ConnectionProfileException
+	 */
+	public IConnectionProfile createTransientProfile(String name, String description,
+			String providerID, Properties baseProperties) throws ConnectionProfileException {
+		String transientName = name;
+		ConnectionProfile profile = null;
+		if (transientName == null) {
+			transientName = TRANSIENT_PROFILE_NAME_PREFIX + providerID;
+		}
+
+		if (mTransientProfiles == null) {
+            synchronized (this) {
+                if (mTransientProfiles == null) {
+                    mTransientProfiles = Collections.synchronizedList( new ArrayList() );
+                }
+            }
+        }
+
+		synchronized (mTransientProfiles) {
+			transientName = findUniqueTransientProfileName(transientName);
+			profile = new ConnectionProfile(transientName, description,
+					providerID, "", false, UUID.createUUID() //$NON-NLS-1$
+							.toString());
+			baseProperties.setProperty(IConnectionProfile.TRANSIENT_PROPERTY_ID, ""); //$NON-NLS-1$
+			profile.setBaseProperties(baseProperties);
+			profile.setCreated();
+			mTransientProfiles.add(profile);
+		}
+		return profile;
+	}
+	
+	/*
+	 * Private method to avoid name collisions for transient profiles
+	 * @param name
+	 * @return
+	 */
+	private String findUniqueTransientProfileName(String name) {
+			int count = 0;
+			boolean flag = (getTransientProfileByName(name) != null);
+			while (flag) {
+				count++;
+				flag = (getTransientProfileByName(name + count) != null);
+			}
+			return (count == 0) ? name : name + count;
+	}
+
+	/*
+	 * Get a transient connection profile instance by name
+	 * @param name
+	 * @return
+	 */
+	private IConnectionProfile getTransientProfileByName(String name) {
+        if ( mTransientProfiles == null || mTransientProfiles.isEmpty() )
+            return null;
+
+		IConnectionProfile[] cps = (IConnectionProfile[]) mTransientProfiles.toArray(new IConnectionProfile[mTransientProfiles.size()]);
+		IConnectionProfile cp = null;
+		for (int i = 0; i < cps.length; i++) {
+			if (cps[i].getName().equals(name)) {
+				cp = cps[i];
+				break;
+			}
+		}
+		return cp;
+	}
+    
+    /**
+     * Indicates whether the specified connection profile is of a transient type.
+     * @param profile
+     * @return  true if the specified profile is transient; false otherwise
+     */
+    public static boolean isTransientProfile( IConnectionProfile profile ) {
+        if ( profile == null )
+            return false;
+
+        // to optimize performance, simply check if the profile has the transient property 
+        // added by #createTransientProfile
+        return profile.getBaseProperties().getProperty( IConnectionProfile.TRANSIENT_PROPERTY_ID ) != null;
+    }
+
+	/**
+	 * Disconnect and remove the specified transient profile from cache.
+	 * @param profile  a transient connection profile instance created 
+	 *             by {@link #createTransientProfile(String, String, String, Properties)}
+	 * @return true if the specified profile is found and deleted from cache
+	 */
+	public boolean deleteTransientProfile(IConnectionProfile profile) {
+	    if ( mTransientProfiles == null || mTransientProfiles.isEmpty() ||
+	            ! isTransientProfile( profile ) )
+	        return false;
+	    
+        IStatus status = profile.disconnect();
+        if (status == Status.CANCEL_STATUS)
+            return false;
+        
+        // dispose the disconnected transient profile instance to release all its references immediately
+        if ( profile instanceof ConnectionProfile )
+            ((ConnectionProfile)profile).dispose();
+
+        return mTransientProfiles.remove( profile );
+	}
+	
+	/**
+	 * Create connection profile
+	 * 
+	 * @param name
+	 * @param description
+	 * @param providerID
+	 * @param baseProperties
+	 * @param parentProfile
+	 * @throws ConnectionProfileException
+	 */
+	public IConnectionProfile createProfile(String name, String description,
+			String providerID, Properties baseProperties, String parentProfile)
+			throws ConnectionProfileException {
+		return createProfile(name, description, providerID, baseProperties,
+				parentProfile, false);
+	}
+
+	/**
+	 * Create connection profile
+	 * 
+	 * @param name
+	 * @param description
+	 * @param providerID
+	 * @param baseProperties
+	 * @param parentProfile
+	 * @param autoConnect
+	 * @throws ConnectionProfileException
+	 */
+	public IConnectionProfile createProfile(String name, String description,
+			String providerID, Properties baseProperties, String parentProfile,
+			boolean autoConnect) throws ConnectionProfileException {
+		ConnectionProfile profile = new ConnectionProfile(name, description,
+				providerID, parentProfile, autoConnect, UUID.createUUID()
+						.toString());
+		profile.setBaseProperties(baseProperties);
+		
+		IConnectionProfileRepository repo = getRepositoryForProfile(profile);
+		if (repo == null) {
+			addProfile(profile);
+		}
+		else {
+			repo.addProfile(profile);
+		}
+		profile.setCreated();
+		return profile;
+	}
+
+	/**
+	 * Duplicate a connection profile
+	 * 
+	 * @param profile
+	 * @throws ConnectionProfileException
+	 */
+	public String duplicateProfile(IConnectionProfile profile)
+			throws ConnectionProfileException {
+		ConnectionProfile cp = (ConnectionProfile) profile;
+		String profileName;
+		int i = 0;
+		do {
+			profileName = ConnectivityPlugin.getDefault().getResourceString(
+					"duplicate.profile.name", //$NON-NLS-1$
+					new Object[] { cp.getName(), new Integer(i)});
+			i++;
+		}
+		while (getProfileByName(profileName,false) != null);
+		IConnectionProfile newProfile = copyProfile(profile,profile.getParentProfile(),profileName);
+		return newProfile.getName();
+	}
+	
+	/**
+	 * Copy a connection profile
+	 * 
+	 * @param source
+	 * @param repo
+	 * @param newName
+	 * @return
+	 * @throws ConnectionProfileException
+	 */
+	public IConnectionProfile copyProfile(IConnectionProfile source,
+			IConnectionProfile repo, String newName)
+			throws ConnectionProfileException {
+		Properties props = (Properties) source.getBaseProperties().clone();
+		IConnectionProfile newProfile = createProfile(newName, source
+				.getDescription(), source.getProviderId(), props,
+				repo == null ? new String() : repo.getInstanceID(), source
+						.isAutoConnect());
+
+		// now that we have the base profile and its properties set,
+		// walk through any extended properties and grab those also
+		Set extensionIDs = ((ConnectionProfile) source).getPropertiesMap()
+				.keySet();
+		Iterator iter = extensionIDs.iterator();
+		while (iter.hasNext()) {
+			String key = (String) iter.next();
+			Properties oldProps = source.getProperties(key);
+			Properties newProps = (Properties) oldProps.clone();
+			newProfile.setProperties(key, newProps);
+		}
+		return newProfile;
+	}
+
+	/**
+	 * Duplicate a connection profile but won't add it into ProfileManager or IConnectionProfileRepository.
+	 * 
+	 * @param source
+	 * @param repo
+	 * @param newName
+	 * @return IConnectionProfile
+	 * 
+	 */
+	public IConnectionProfile cloneProfile(IConnectionProfile source,
+			IConnectionProfile repo, String newName){
+		Properties props = (Properties) source.getBaseProperties().clone();
+		ConnectionProfile newProfile = new ConnectionProfile(newName, source.getDescription(),
+				source.getProviderId(), repo == null ? new String() : repo.getInstanceID(), source
+						.isAutoConnect() , UUID.createUUID().toString());
+		newProfile.setBaseProperties(props);
+
+		// now that we have the base profile and its properties set,
+		// walk through any extended properties and grab those also
+		Set extensionIDs = ((ConnectionProfile) source).getPropertiesMap()
+				.keySet();
+		Iterator iter = extensionIDs.iterator();
+		while (iter.hasNext()) {
+			String key = (String) iter.next();
+			Properties oldProps = source.getProperties(key);
+			Properties newProps = (Properties) oldProps.clone();
+			newProfile.setProperties(key, newProps);
+		}
+		return newProfile;			
+	}
+	
+	/**
+	 * Add a connection profile object to the profiles cache. Throws
+	 * ConnectionProfileException if the new profile's name already exists in
+	 * cache.
+	 * 
+	 * @param profile
+	 * @throws ConnectionProfileException
+	 */
+	public void addProfile(IConnectionProfile profile)
+			throws ConnectionProfileException {
+		addProfile(profile, false);
+	}
+
+	/**
+	 * Add a connection profile object to the profiles cache. If the new
+	 * profile's name already exists in cache, replace the cached profile with
+	 * the given profile provided the replaceExisting flag is true; otherwise,
+	 * throws ConnectionProfileException.
+	 * 
+	 * @param profile
+	 * @param replaceExisting
+	 * @throws ConnectionProfileException
+	 */
+	public void addProfile(IConnectionProfile profile, boolean replaceExisting)
+			throws ConnectionProfileException {
+		// check if the new profile's name already exists in profiles cache
+		IConnectionProfile[] cps = getProfiles(false);
+		for (int i = 0; i < cps.length; i++) {
+			if (cps[i].getName().equals(profile.getName())) {
+				if (!replaceExisting)
+					throw new ConnectionProfileException(ConnectivityPlugin
+							.getDefault().getResourceString(
+									"profile.duplicate", //$NON-NLS-1$
+									new Object[] { profile.getName()}));
+
+				// replace existing cached profile of same name with the new
+				// profile
+				if (cps[i] != profile)
+					modifyProfile(profile);
+				return;
+			}
+		}
+		
+		((ConnectionProfile)profile).setRepository(null);
+
+		// add new profile to profile caches
+
+		mProfiles = new IConnectionProfile[cps.length + 1];
+		if (cps.length != 0)
+			System.arraycopy(cps, 0, mProfiles, 0, cps.length);
+		mProfiles[cps.length] = profile;
+		
+		profile.addPropertySetListener(mPropertySetListener);
+
+		mIsDirty = true;
+
+		fireProfileAdded(profile);
+		saveChanges();
+		
+		if (profile.isAutoConnect()) {
+			profile.connect(null);
+		}
+	}
+	
+	/**
+	 * Remove a profile from the list of profiles
+	 * 
+	 * @param profile
+	 * @throws ConnectionProfileException
+	 */
+	public void removeProfile(IConnectionProfile profile)
+			throws ConnectionProfileException {
+		if (profile.getParentProfile() != null) {
+			return;
+		}
+
+		IConnectionProfile[] oldProfiles = mProfiles;
+		mProfiles = new IConnectionProfile[oldProfiles.length - 1];
+		int oldIndex = 0, oldCount = oldProfiles.length;
+		for (int newIndex = 0, newCount = oldCount - 1; oldIndex < oldCount
+				&& newIndex < newCount; ++oldIndex, ++newIndex) {
+			if (oldProfiles[oldIndex].equals(profile)) {
+				// remove this profile
+				--newIndex;
+				continue;
+			}
+			mProfiles[newIndex] = oldProfiles[oldIndex];
+		}
+		if (oldIndex != oldProfiles.length
+				&& !oldProfiles[oldProfiles.length-1].equals(profile)) {
+			// Don't know how this happened, but the profile is not contained by
+			// this repository. All that work for nothing.
+			mProfiles = oldProfiles;
+			return;
+		}
+
+		mIsDirty = true;
+
+		fireProfileDeleted(profile);
+
+		saveChanges();
+	}
+
+	/**
+	 * Delete a connection profile object from the profiles cache
+	 * 
+	 * @param profile
+	 * @throws ConnectionProfileException
+	 */
+	public void deleteProfile(IConnectionProfile profile)
+			throws ConnectionProfileException {
+	    
+	    IStatus status = profile.disconnect();
+	    if (status == Status.CANCEL_STATUS)
+        {
+            return;
+        }
+	    
+	    IConnectionProfileRepository repo = getRepositoryForProfile(profile);
+		if (repo != null) {
+			repo.deleteProfile(profile);
+			return;
+		}
+
+		IConnectionProfile[] cps = getProfiles(false);
+		ArrayList cpList = new ArrayList();
+		boolean found = false;
+		int index = -1;
+		for (int i = 0; i < cps.length; i++) {
+			cpList.add(cps[i]);
+			if (cps[i].getName().equals(profile.getName())) {
+				found = true;
+				index = i;
+			}
+		}
+
+		if (!found || cps.length == 0)
+			throw new ConnectionProfileException(ConnectivityPlugin
+					.getDefault().getResourceString("profile.notexist", //$NON-NLS-1$
+							new Object[] { profile.getName()}));
+
+		if (index >= 0)
+			cpList.remove(index);
+		mProfiles = (IConnectionProfile[]) cpList
+				.toArray(new IConnectionProfile[0]);
+
+		mIsDirty = true;
+		
+		fireProfileDeleted(profile);
+		saveChanges();
+	}
+
+	/**
+	 * Remove connection failure markers for the profile when we 
+	 * delete the profile.
+	 * 
+	 * @param oldProfileName
+	 */
+	private void removeOldFailureMarkers(String oldProfileName) {
+        // maintenance of problem markers is only applicable on OSGi platform
+        if( ! ConnectivityPlugin.isRunningOSGiPlatform() )
+            return;
+        
+		IResource resource = ResourcesPlugin.getWorkspace().getRoot();
+		try {
+			IMarker[] markers = resource.findMarkers(
+					"org.eclipse.datatools.connectivity.ui.profileFailure", true, //$NON-NLS-1$
+					IResource.DEPTH_INFINITE);
+			for (int i = 0; i < markers.length; i++) {
+				if (markers[i].getAttribute(IMarker.LOCATION, new String())
+						.equals(oldProfileName)) {
+					markers[i].delete();
+				}
+			}
+		}
+		catch (CoreException e) {
+		}
+	}
+
+	/**
+	 * Modify an existing connection profile
+	 * 
+	 * @param profile
+	 * @throws ConnectionProfileException
+	 */
+	public void modifyProfile(IConnectionProfile profile)
+			throws ConnectionProfileException {
+		IConnectionProfileRepository repo = getRepositoryForProfile(profile);
+		if (repo == null) {
+			modifyProfile(profile, null, null, null);
+		}
+		else {
+			repo.modifyProfile(profile, null, null, null);
+		}
+	}
+
+	/**
+	 * Modify an existing connection profile, plus it's name and description We
+	 * don't expose a setName and setDescription in IConnectionProfile, so
+	 * instead we expose this api for that same purpose.
+	 * 
+	 * @param profile
+	 * @throws ConnectionProfileException
+	 */
+	public void modifyProfile(IConnectionProfile profile, String newName,
+			String newDesc) throws ConnectionProfileException {
+		IConnectionProfileRepository repo = getRepositoryForProfile(profile);
+		if (repo == null) {
+			modifyProfile(profile, newName, newDesc, null);
+		}
+		else {
+			repo.modifyProfile(profile, newName, newDesc, null);
+		}
+	}
+
+	/**
+	 * Modify an existing connection profile, plus it's name and description We
+	 * don't expose a setName and setDescription in IConnectionProfile, so
+	 * instead we expose this api for that same purpose.
+	 * 
+	 * @param profile
+	 * @throws ConnectionProfileException
+	 */
+	public void modifyProfile(IConnectionProfile profile, String newName,
+			String newDesc, Boolean autoConnect)
+			throws ConnectionProfileException {
+		IConnectionProfileRepository repo = getRepositoryForProfile(profile);
+		if (repo != null) {
+			repo.modifyProfile(profile, newName, newDesc, autoConnect);
+			return;
+		}
+
+		IConnectionProfile[] cps = getProfiles(false);
+		boolean found = false;
+		boolean foundnew = false;
+		int index = 0;
+		for (int i = 0; i < cps.length; i++) {
+			if (cps[i].getName().equals(profile.getName())) {
+				found = true;
+				index = i;
+			}
+			if (cps[i].getName().equals(newName)) {
+				foundnew = true;
+			}
+		}
+
+		if (!found)
+			throw new ConnectionProfileException(ConnectivityPlugin
+					.getDefault().getResourceString("profile.notexist", //$NON-NLS-1$
+							new Object[] { profile.getName()}));
+
+		if (foundnew && !profile.getName().equals(newName))
+			throw new ConnectionProfileException(ConnectivityPlugin
+					.getDefault().getResourceString("profile.duplicate", //$NON-NLS-1$
+							new Object[] { newName}));
+
+		ConnectionProfile internalProfile = (ConnectionProfile) profile;
+		String oldName = profile.getName();
+		String oldDesc = profile.getDescription();
+		Boolean oldAutoConnect = new Boolean(profile.isAutoConnect());
+		if (newName != null && !newName.equals(oldName))
+			internalProfile.setName(newName);
+		if (newDesc != null && !newDesc.equals(oldDesc))
+			internalProfile.setDescription(newDesc);
+		if (autoConnect != null && !autoConnect.equals(oldAutoConnect)) {
+			internalProfile.setAutoConnect(autoConnect.booleanValue());
+			if (autoConnect.booleanValue()
+					&& internalProfile.getConnectionState() == IConnectionProfile.DISCONNECTED_STATE) {
+				internalProfile.connect(null);
+			}
+		}
+
+		// Changed to fix bug 247599
+		//cps[index] = profile;
+		if(cps[index] != profile) {
+			removeProfile(cps[index]);
+			addProfile(profile);			
+		}
+
+		mIsDirty = true;
+
+		fireProfileChanged(profile, oldName, oldDesc, oldAutoConnect);
+		saveChanges();
+	}
+
+	/**
+	 * It's called during plugin unloading process, not intended for client use.
+	 */
+	public void saveChanges() {
+		if (mIsDirty) {
+			try {
+				ConnectionProfileMgmt.saveCPs(getProfiles(false));
+
+				// backup to default backup file
+				backupProfilesData(null);
+				
+				setDirty(false);
+			}
+			catch (Exception e) {
+				ConnectivityPlugin.getDefault().log(e);
+			}
+		}
+	}
+
+	/**
+	 * Register a listener for profile operation
+	 * 
+	 * @param listener
+	 */
+	public void addProfileListener(IProfileListener listener) {
+		mProfileListeners.add(listener);
+	}
+
+	/**
+	 * Remove the listener for profile operation
+	 * 
+	 * @param listener
+	 */
+	public void removeProfileListener(IProfileListener listener) {
+		mProfileListeners.remove(listener);
+	}
+
+	private synchronized void loadProfiles() {
+		if (mProfiles != null )
+		{
+			return;
+		}
+		File serverFile = ConnectivityPlugin.getDefaultStateLocation()
+				.append(ConnectionProfileMgmt.FILENAME).toFile();
+		File defaultFile = null;
+
+		try {
+			URL url = ConnectivityPlugin.getEntry( ConnectionProfileMgmt.DEFAULTCP_FILENAME );
+			if (url != null) {
+				defaultFile = new File( PluginResourceLocatorImpl.toFileURL(url).getFile() );
+			}
+		}
+		catch (IOException e) {
+			ConnectivityPlugin.getDefault().log(e);
+		}
+		
+		if (loadLocal) {
+			loadLocal = false;
+			loadLocalRegisteredDatabases();
+		}
+
+		IConnectionProfile[] scps;
+		IConnectionProfile[] dcps;
+
+		// see if the default server file exists or we made a backup
+		if (serverFile.exists() || backupFileExists()) {
+			try {
+				
+				// If we crashed and the main file is gone, restore the backup
+				if (!serverFile.exists() && backupFileExists()) {
+					restoreFromBackupProfilesData();
+				}
+				
+				// Save a checkpoint in case of a crash
+				backupProfilesData(serverFile);
+				
+				scps = ConnectionProfileMgmt.loadCPs(serverFile);
+			}
+			catch (Exception e) {
+				ConnectivityPlugin.getDefault().log(e);
+				scps = new IConnectionProfile[0];
+			}
+		}
+		else {
+			scps = new IConnectionProfile[0];
+		}
+		if (defaultFile != null && defaultFile.exists()
+				&& defaultFile.lastModified() > serverFile.lastModified()) {
+			try {
+
+				dcps = ConnectionProfileMgmt.loadCPs(defaultFile);
+				
+				// save a checkpoint, which automatically creates
+				// a backup
+				saveChanges();
+				
+			}
+			catch (Exception e) {
+				ConnectivityPlugin.getDefault().log(e);
+				dcps = new IConnectionProfile[0];
+			}
+		}
+		else {
+			dcps = new IConnectionProfile[0];
+		}
+
+		Map nameToProfileMap = new HashMap(scps.length + dcps.length);
+		for (int i = 0; i < dcps.length; ++i) {
+			if (dcps[i].getName() != null) {
+				nameToProfileMap.put(dcps[i].getName(), dcps[i]);
+			}
+		}
+
+		for (int i = 0; i < scps.length; ++i) {
+			if (scps[i].getName() != null) {
+				// Don't need to worry if it already exists.
+				// We don't want to use the default if the user has a
+				// profile with this name.
+				nameToProfileMap.put(scps[i].getName(), scps[i]);
+			}
+		}
+
+		
+		
+		for (Iterator it = nameToProfileMap.values().iterator(); it.hasNext(); ) {
+			ConnectionProfile profile = (ConnectionProfile)it.next();
+
+			// Have any profiles migrate themselves from older versions.
+			profile.migrate();
+
+			profile.addPropertySetListener(mPropertySetListener);
+		}
+		
+		
+		mProfiles = (IConnectionProfile[]) nameToProfileMap.values().toArray(
+				new IConnectionProfile[nameToProfileMap.size()]);
+
+		autoConnectProfiles();
+		addProfileListener(mProfileChangeListener);
+	}
+	
+	private void backupProfilesData ( File ioFile ) {
+		if (ioFile != null && ioFile.exists()) {
+			File backupFile = ConnectivityPlugin.getDefaultStateLocation()
+				.append(ConnectionProfileMgmt.BACKUP_FILENAME).toFile();
+			try {
+				copy(ioFile, backupFile);
+			} catch (IOException e) {
+				ConnectivityPlugin.getDefault().log(e);
+			}
+		}
+		else {
+			File serverFile = ConnectivityPlugin.getDefaultStateLocation()
+				.append(ConnectionProfileMgmt.FILENAME).toFile();
+			backupProfilesData(serverFile);
+		}
+	}
+	
+    private void copy(File src, File dst) throws IOException {
+        InputStream in = new FileInputStream(src);
+        OutputStream out = new FileOutputStream(dst);
+    
+        // Transfer bytes from in to out
+        byte[] buf = new byte[1024];
+        int len;
+        while ((len = in.read(buf)) > 0) {
+            out.write(buf, 0, len);
+        }
+        in.close();
+        out.close();
+    }
+
+	private void restoreFromBackupProfilesData() {
+		File serverFile = ConnectivityPlugin.getDefaultStateLocation()
+			.append(ConnectionProfileMgmt.FILENAME).toFile();
+		if (!serverFile.exists()) {
+			File backupFile = ConnectivityPlugin.getDefault().getStateLocation()
+				.append(ConnectionProfileMgmt.BACKUP_FILENAME).toFile();
+			try {
+				copy(backupFile, serverFile);
+			} catch (IOException e) {
+				ConnectivityPlugin.getDefault().log(e);
+			}
+		}
+	}
+	
+	private boolean backupFileExists() {
+		File backupFile = ConnectivityPlugin.getDefaultStateLocation()
+			.append(ConnectionProfileMgmt.BACKUP_FILENAME).toFile();
+		return backupFile.exists();
+	}
+	
+	public void fireProfileAdded(IConnectionProfile profile) {
+		Object[] ls = mProfileListeners.getListeners();
+		for (int i = 0; i < ls.length; ++i) {
+			((IProfileListener) ls[i]).profileAdded(profile);
+		}
+	}
+
+	public void fireProfileDeleted(IConnectionProfile profile) {
+		Object[] ls = mProfileListeners.getListeners();
+		for (int i = 0; i < ls.length; ++i) {
+			((IProfileListener) ls[i]).profileDeleted(profile);
+		}
+	}
+
+	public void fireProfileChanged(IConnectionProfile profile, String oldName,
+			String oldDesc, Boolean oldAutoConnect) {
+		Object[] ls = mProfileListeners.getListeners();
+		for (int i = 0; i < ls.length; ++i) {
+			if (ls[i] instanceof IProfileListener1) {
+				((IProfileListener1) ls[i]).profileChanged(profile, oldName,
+						oldDesc, oldAutoConnect);
+			}
+			else {
+				((IProfileListener) ls[i]).profileChanged(profile);
+			}
+		}
+	}
+
+	private void autoConnectProfiles() {
+		for (int index = 0, count = mProfiles.length; index < count; ++index) {
+			if (mProfiles[index].isAutoConnect()) {
+				mProfiles[index].connect(null);
+			}
+		}
+	}
+
+	/* package */void dispose() {
+		if (mTransientProfiles != null) {
+			synchronized (mTransientProfiles) {
+				if (mTransientProfiles != null) {
+					Iterator transientIter = mTransientProfiles.iterator();
+					while (transientIter.hasNext()) {
+						((ConnectionProfile)transientIter.next()).dispose();
+					}
+	                mTransientProfiles = null;
+				}
+			}
+		}
+		if (mProfiles == null) {
+			return;
+		}
+		mProfileListeners.clear();
+		saveChanges();
+		for (int index = 0, count = mProfiles.length; index < count; ++index) {
+			((ConnectionProfile) mProfiles[index]).dispose();
+		}
+		mManager = null;
+	}
+
+	/**
+	 * If dirty attribute is set to true, then the cached profiles will be
+	 * persisted.
+	 * 
+	 * @param isDirty
+	 */
+	public void setDirty(boolean isDirty) {
+		mIsDirty = isDirty;
+	}
+	
+	/**
+	 * Add a repository to the cache
+	 * @param repository
+	 */
+	public void addRepository(IConnectionProfileRepository repository) {
+
+		checkDuplicatedRepository(repository);
+
+		mRepositories.add(repository);
+	}
+
+	/**
+	 * Since every time the client requests a connection from a repository, a
+	 * new repository instance is generated and in turns calls addRepository()
+	 * method to register itself into the list of the ProfileManager. However,
+	 * this would bring about dozens of duplicated instance of repositories and possibly
+	 * with different phases(e.g. after user modify the configuration and ping
+	 * again). The following method was mainly added to prevent such cases.
+	 * 
+	 * @param repository
+	 */
+	private void checkDuplicatedRepository(
+			IConnectionProfileRepository repository) {
+		
+		Collection cachedRepositoryList = new HashSet();
+		cachedRepositoryList.addAll(mRepositories);
+		for (Iterator itr = cachedRepositoryList.iterator(); itr.hasNext();) {
+			IConnectionProfileRepository eRepository = (IConnectionProfileRepository) itr
+					.next();
+			if (eRepository.equals(repository)) {
+				mRepositories.remove(eRepository);
+			}
+		}
+	}
+
+	/**
+	 * Remove a repository from the cache
+	 * @param repository
+	 */
+	public void removeRepository(IConnectionProfileRepository repository) {
+		mRepositories.remove(repository);
+	}
+	
+	/**
+	 * Return the repository for a given profile
+	 * @param profile
+	 * @return
+	 */
+	public IConnectionProfileRepository getRepositoryForProfile(IConnectionProfile profile) {
+		IConnectionProfile parentProfile = profile.getParentProfile();
+		if (parentProfile != null) {
+			IManagedConnection imc = parentProfile.getManagedConnection(IConnectionProfileRepository.class.getName());
+			if (imc != null && imc.getConnection() != null) {
+				return (IConnectionProfileRepository)imc.getConnection().getRawConnection();
+			}
+		}
+		return null;
+	}
+	
+
+	/**
+	 * Will load the locally registered databases
+	 */
+
+	public void loadLocalRegisteredDatabases()
+	{
+
+		IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+		IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("org.eclipse.datatools.connectivity.ProfileManagerInitializationProvider"); //$NON-NLS-1$
+		IExtension[] extensions = extensionPoint.getExtensions();
+		for (int i = 0; i < extensions.length; ++i)
+		{
+			IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+			for (int j = 0; j < configElements.length; ++j)
+			{
+				if (configElements[j].getName().equals("connection")) //$NON-NLS-1$
+				{
+				
+					String jarList = configElements[j].getAttribute("jarList"); //$NON-NLS-1$
+					String connectionProfileName = configElements[j].getAttribute("connectionProfileName"); //$NON-NLS-1$
+					String connectionProfileID = configElements[j].getAttribute("connectionProfileID"); //$NON-NLS-1$
+					String driverDefinitionName = configElements[j].getAttribute("driverDefinitionName"); //$NON-NLS-1$
+					String driverTemplateID = configElements[j].getAttribute("driverTemplateID"); //$NON-NLS-1$
+					String initializationClass = configElements[j].getAttribute("connectionInitializer"); //$NON-NLS-1$
+				
+					if (initializationClass != null)
+					{
+						initializeLocalDatabase(configElements[j], initializationClass);
+					}
+					if (checkForValidValues(connectionProfileName, connectionProfileID, driverDefinitionName, driverTemplateID)) {
+						enableLocalDatabase(configElements[j].getChildren("property"), jarList, connectionProfileName, connectionProfileID, driverDefinitionName, driverTemplateID); //$NON-NLS-1$
+					}
+				} 
+			}
+		}
+	}
+	
+	
+	/**
+	 * Initialize the local database
+	 * @param config
+	 * @param initializationClass
+	 */
+	private void initializeLocalDatabase (IConfigurationElement config, String initializationClass)
+	{
+		try
+		{
+			config.createExecutableExtension("connectionInitializer"); //$NON-NLS-1$
+		}
+		catch (CoreException e)
+		{
+			ConnectivityPlugin.getDefault().log(e);
+		}
+	}
+	
+
+	/**
+	 * Enable the local database - set up the properties and create the ConnectionProfile
+	 * @param configElements
+	 * @param jarList
+	 * @param connProfileName
+	 * @param connProfileID
+	 * @param driverDefName
+	 * @param driverTemplateID
+	 */
+	private void enableLocalDatabase(IConfigurationElement[] configElements, String jarList, String connProfileName, String connProfileID,
+			String driverDefName, String driverTemplateID)
+	{
+		
+		    if( configElements.length == 0 || 
+	            isBundleActivated( configElements[0] ) || 
+	            ! ConnectivityPlugin.isRunningOSGiPlatform() ) {
+			 
+				DriverInstance driverInstance = getDriverInstance(driverDefName, driverTemplateID, jarList);
+
+				if (driverInstance != null) {
+				
+					Properties connectionProfileProperties = driverInstance
+						.getPropertySet().getBaseProperties();
+					connectionProfileProperties.setProperty(
+						ConnectionProfileConstants.PROP_DRIVER_DEFINITION_ID,
+						driverInstance.getId());
+					List propList = new ArrayList();
+
+					for (int i = 0, n = configElements.length; i < n; i++)
+					{
+
+						String propertyID = configElements[i].getAttribute("id"); //$NON-NLS-1$
+						propList.add(propertyID);
+						String propertyValue = configElements[i].getAttribute("value"); //$NON-NLS-1$
+						propertyValue = substituteLocationDirectory(propertyValue, configElements[i]);
+						connectionProfileProperties.setProperty(propertyID, propertyValue);
+					}
+					getProfileInstance(connProfileName, connProfileID, connectionProfileProperties, propList);
+			    
+				}
+			}
+
+	}
+	
+	
+	private boolean isBundleActivated (IConfigurationElement element)
+	{
+	    try
+        {
+			String pluginID = element.getContributor().getName();
+            Bundle bundle = Platform.getBundle(pluginID);
+            
+            // change from bug 270074
+            if(bundle != null) {
+            	if (bundle.getState() == Bundle.RESOLVED) {
+            		bundle.start();
+            	}
+            	return bundle.getState() == Bundle.ACTIVE;
+            }
+        }
+        catch (BundleException e)
+        {
+			ConnectivityPlugin.getDefault().log(e);
+        }
+        return false;
+	}
+	
+	private String substituteLocationDirectory(String logicalPath, IConfigurationElement element)
+	{
+        int index = logicalPath.indexOf(PLUGIN_STATE_LOCATION);
+        if( index < 0 )             // no keyword found
+            return logicalPath;     // no need to substitute
+        
+		String pluginId = element.getContributor().getName();
+		IPath pluginPath = PluginResourceLocatorImpl.getPluginStateLocation( pluginId );
+
+		if( pluginPath == null )  // not found
+		{
+		    // try get the plugin installation path instead
+		    pluginPath = PluginResourceLocatorImpl.getPluginRootPath( element );		    
+		    if( pluginPath == null )
+		    {
+    		    ConnectivityPlugin.getDefault().logWarning( 
+    		            "#substituteLocationDirectory: Unable to locate the path to substitute the 'Plugin_State_Location' path."  );
+    		    return logicalPath;   // unknown plugin path; unable to substitute, return as is
+		    }
+		}
+		
+	    String stateLocation = pluginPath.toOSString();
+		logicalPath = logicalPath.substring(0, index) + 
+		                stateLocation + 
+		                logicalPath.substring(index + PLUGIN_STATE_LOCATION.length());
+		return logicalPath;
+	}
+	
+	/**
+	 * Get the driver instance for this connection.  If a driver already exists with the associated properties, don't create a new one.
+	 * If a driver with the same name, but different properties exists, modify the name and create a new one.
+	 * @param inName
+	 * @param driverTemplateID
+	 * @param jarList
+	 * @return DriverInstance
+	 */
+	private DriverInstance getDriverInstance(String inName, String driverTemplateID, String jarList) {
+		String defName = inName;
+
+		/* 
+		 * Let's first see if we can find a valid instance of this driver template 
+		 * with the same name and jar list. That would narrow things down.
+		 */
+		DriverInstance[] dilist = DriverManager.getInstance().getDriverInstancesByTemplate(driverTemplateID);
+		if (dilist != null && dilist.length > 0 ) {
+			for (int i = 0; i < dilist.length; i++) {
+				DriverInstance driverInstance = dilist[i];
+				if (driverInstance != null) {
+					// jarList is not required, so it can be null, which isn't going to match any jarList coming back from a DriverInstance
+					if ((jarList == null) || (driverInstance.getJarList().equals(jarList))) {
+						DriverValidator validator = new DriverValidator(driverInstance);
+						if (validator.isValid(false)) {
+							if (driverInstance.getName().equals(inName)) {
+								return driverInstance;
+							}
+						}
+					}
+						
+				}
+			}
+			/*
+			 * If we found drivers of that driver type, but didn't match on the
+			 * jar list, name, or valid property set, then let's do a final check
+			 * to see if we find one with the same name (obviously something's not 
+			 * right with it) and create a new version with a unique name if we
+			 * find one.
+			 */
+			if (DriverManager.getInstance().getDriverInstanceByName(defName) != null)
+				defName = determineUniqueDriverName(defName);
+		}
+		
+		/*
+		 * Now we'll create it (with the original name if we didn't even get close,
+		 * or with the unique name if we did. 
+		 */
+		return DriverManager.getInstance()
+			.createNewDriverInstance(
+				driverTemplateID, 								
+				defName, jarList);
+	}
+	
+	/**
+	 * Determine a unique name for the new driver
+	 * @param inName
+	 * @return String driverName
+	 */
+	private String determineUniqueDriverName(String inName) {
+		int index = 1;
+		String testName = inName + String.valueOf(index);
+		while (DriverManager.getInstance().getDriverInstanceByName(testName) != null) {
+			index++;
+			testName = inName + String.valueOf(index);
+		}
+		return testName;
+	}
+	
+	
+	/**
+	 * Get the connection profile for this connection.  If it already exists, use the existing connection;  else, create a new one
+	 * @param profileName
+	 * @param profileID
+	 * @param connProperties
+	 * @param propList
+	 */
+	private void getProfileInstance(String profileName, String profileID, Properties connProperties, List propList) {
+
+		String profName = profileName;
+        int uniqueNameIndex = 0;
+		IConnectionProfile connProfile = null;
+	    while ( ( connProfile = ProfileManager.getInstance().getProfileByName(profName) ) != null) {
+			Properties props = connProfile.getBaseProperties();
+			if (connProfile.getProviderId().equals(profileID)) {
+				boolean match = true;
+				for (int i = 0; i < propList.size() && match; i++) {
+					String propName = (String)propList.get(i);
+					if (!connProperties.get(propName).equals(props.get(propName))) {
+						match = false;
+					}
+				}
+				if (match) {
+				    return;
+				}
+			}
+			
+			// the existing profile with same name contains different property values, cannot re-use; 
+			// try with the next generated profile name
+			profName = generateProfileName( profileName, ++uniqueNameIndex );
+		}
+
+		try {
+			ProfileManager
+				.getInstance()
+				.createProfile(
+						profName,
+						"", //$NON-NLS-1$
+						profileID,
+						connProperties, "", false); //$NON-NLS-1$
+		
+		} catch (ConnectionProfileException e) {
+			ConnectivityPlugin.getDefault().log(e);
+		}
+	}
+
+    /**
+     * Formats unique connection profile name for the new connection
+     * @param inName
+     * @return String profile name
+     */
+	private String generateProfileName( String inName, int index )
+	{
+	    return inName + String.valueOf(index);
+	}
+	
+	/**
+	 * Make sure that all required items have values - if not, don't attempt driver or connection creation
+	 * @param inProfileName
+	 * @param inProfileID
+	 * @param inDriverDefName
+	 * @param inDriverTemplateID
+	 * @return boolean true if all items have valid values 
+	 */
+	private boolean checkForValidValues(String inProfileName, String inProfileID, String inDriverDefName, String inDriverTemplateID) {
+		boolean validValue = true;
+
+		if ((inProfileName == null) || (inProfileName.equals(""))) { //$NON-NLS-1$
+			validValue = false;
+		} else if ((inProfileID == null) || (inProfileID.equals(""))) { //$NON-NLS-1$
+			validValue = false;
+		} else if ((inDriverDefName == null) || (inDriverDefName.equals(""))) { //$NON-NLS-1$
+			validValue = false;
+		} else if ((inDriverTemplateID == null) || (inDriverTemplateID.equals(""))) { //$NON-NLS-1$
+			validValue = false;
+		}
+		return validValue;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ManagedConnection.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ManagedConnection.java
new file mode 100644
index 0000000..c337b4e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ManagedConnection.java
@@ -0,0 +1,447 @@
+/*******************************************************************************
+ * Copyright (c) 2006-2011 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.IJobChangeListener;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.datatools.connectivity.ConnectEvent;
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IManagedConnection;
+import org.eclipse.datatools.connectivity.IManagedConnectionListener;
+import org.eclipse.datatools.connectivity.IManagedConnectionOfflineListener;
+import org.eclipse.datatools.connectivity.IOfflineConnection;
+import org.eclipse.datatools.connectivity.IServerVersionProvider;
+import org.eclipse.datatools.connectivity.Version;
+
+public class ManagedConnection implements IManagedConnection {
+
+	private IConnectionProfile mProfile;
+	private IConnection mConnection;
+	private String mFactoryID;
+	private Set mListeners = new HashSet();
+
+	public ManagedConnection(IConnectionProfile profile, String factoryID) {
+		super();
+		mProfile = profile;
+		mFactoryID = factoryID;
+	}
+
+	public void addConnectionListener(IManagedConnectionListener listener) {
+		mListeners.add(listener);
+	}
+
+	public void removeConnectionListener(IManagedConnectionListener listener) {
+		mListeners.remove(listener);
+	}
+
+	public void fireModifiedEvent(Object context) {
+		if (!isConnected()) {
+			return;
+		}
+
+		ConnectEvent event = new ConnectEvent(getConnectionProfile(), this,
+				context);
+		for (Iterator it = new ArrayList(mListeners).iterator(); it.hasNext();) {
+			try {
+				((IManagedConnectionListener) it.next()).modified(event);
+			}
+			catch (Exception e) {
+				ConnectivityPlugin.getDefault().log(e);
+			}
+		}
+	}
+
+	public IConnection cloneConnection() {
+		if (!isConnected()) {
+			throw new IllegalStateException();
+		}
+		CloneConnectionJob connectJob = new CloneConnectionJob();
+		connectJob.schedule();
+		try {
+			connectJob.join();
+		}
+		catch (InterruptedException e) {
+		}
+		return connectJob.getConnection();
+	}
+
+	public void cloneConnection(IJobChangeListener listener) {
+		if (!isConnected()) {
+			throw new IllegalStateException();
+		}
+		if (listener == null) {
+			throw new IllegalArgumentException();
+		}
+		CloneConnectionJob connectJob = new CloneConnectionJob();
+		connectJob.addJobChangeListener(listener);
+		connectJob.schedule();
+	}
+
+	public String getFactoryID() {
+		return mFactoryID;
+	}
+
+	public boolean isConnected() {
+		return mConnection != null && mConnection.getConnectException() == null;
+	}
+
+	public IConnection getConnection() {
+		if (mConnection == null) {
+			return null;
+		}
+		if (mConnection instanceof IServerVersionProvider) {
+			return new RestrictedVersionProviderConnection();
+		}
+		return new RestrictedConnection();
+	}
+
+	public IConnectionProfile getConnectionProfile() {
+		return mProfile;
+	}
+
+	public boolean isWorkingOffline() {
+		return isConnected() && mConnection instanceof IOfflineConnection
+				&& ((IOfflineConnection) mConnection).isWorkingOffline();
+	}
+	
+	/* package */InternalConnectionFactoryProvider getConnectionFactoryProvider() {
+		return (InternalConnectionFactoryProvider) getConnectionProfile()
+				.getProvider().getConnectionFactory(getFactoryID());
+	}
+	
+	/* package */boolean supportsWorkOfflineMode() {
+		return getConnectionFactoryProvider().supportsWorkOfflineMode();
+	}
+	
+	/* package */boolean canWorkOffline() {
+		return supportsWorkOfflineMode()
+				&& (isConnected() || getConnectionFactoryProvider()
+						.canWorkOffline(mProfile));
+	}
+	
+	/* package */void createConnection(IProgressMonitor monitor)
+			throws CoreException {
+		ConnectEvent event = new ConnectEvent(getConnectionProfile(), this);
+		if (isWorkingOffline()) {
+			for (Iterator it = new ArrayList(mListeners).iterator(); it
+					.hasNext();) {
+				IManagedConnectionListener listener = (IManagedConnectionListener) it
+						.next();
+				if (listener instanceof IManagedConnectionOfflineListener) {
+					try {
+						((IManagedConnectionOfflineListener) listener)
+								.aboutToAttach(event);
+					}
+					catch (Exception e) {
+						ConnectivityPlugin.getDefault().log(e);
+					}
+				}
+			}
+
+			((IOfflineConnection) mConnection).attach(monitor);
+		}
+		else {
+			if (supportsWorkOfflineMode()) {
+				mConnection = getConnectionFactoryProvider().createConnection(mProfile, monitor);
+			}
+			else {
+				mConnection = getConnectionProfile().createConnection(mFactoryID);
+			}
+		}
+
+		for (Iterator it = new ArrayList(mListeners).iterator(); it.hasNext();) {
+			try {
+				((IManagedConnectionListener) it.next()).opened(event);
+			}
+			catch (Exception e) {
+				ConnectivityPlugin.getDefault().log(e);
+			}
+		}
+		monitor.done();
+	}
+	
+	/* package */void workOffline(IProgressMonitor monitor)
+			throws CoreException {
+		if (!supportsWorkOfflineMode()) {
+			Status status = new Status(Status.ERROR, 
+			        ConnectivityPlugin.getSymbolicName(), -1,
+					ConnectivityPlugin.getDefault().getResourceString(
+							"ManagedConnection_offline_not_supported_error", //$NON-NLS-1$
+							new Object[] { getConnectionFactoryProvider()
+									.getName()}), null);
+			throw new CoreException(status);
+		}
+
+		ConnectEvent event = new ConnectEvent(getConnectionProfile(), this);
+		if (isConnected()) {
+			for (Iterator it = new ArrayList(mListeners).iterator(); it
+					.hasNext();) {
+				IManagedConnectionListener listener = (IManagedConnectionListener) it
+						.next();
+				if (listener instanceof IManagedConnectionOfflineListener) {
+					try {
+						((IManagedConnectionOfflineListener) listener)
+								.aboutToDetach(event);
+					}
+					catch (Exception e) {
+						ConnectivityPlugin.getDefault().log(e);
+					}
+				}
+			}
+
+			((IOfflineConnection) mConnection).detach(monitor);
+		}
+		else {
+			mConnection = getConnectionFactoryProvider()
+					.createOfflineConnection(getConnectionProfile(), monitor);
+		}
+
+		for (Iterator it = new ArrayList(mListeners).iterator(); it.hasNext();) {
+			IManagedConnectionListener listener = (IManagedConnectionListener) it
+					.next();
+			if (listener instanceof IManagedConnectionOfflineListener) {
+				try {
+					((IManagedConnectionOfflineListener) listener)
+							.workingOffline(event);
+				}
+				catch (Exception e) {
+					ConnectivityPlugin.getDefault().log(e);
+				}
+			}
+		}
+		monitor.done();
+	}
+	
+	/* package */void save(IProgressMonitor monitor) throws CoreException {
+		if (!supportsWorkOfflineMode()) {
+			Status status = new Status(Status.ERROR, 
+			        ConnectivityPlugin.getSymbolicName(), -1,
+					ConnectivityPlugin.getDefault().getResourceString(
+							"ManagedConnection_offline_not_supported_error", //$NON-NLS-1$
+							new Object[] { getConnectionFactoryProvider()
+									.getName()}), null);
+			throw new CoreException(status);
+		}
+
+		if (!isConnected()) {
+			Status status = new Status(
+					Status.ERROR,
+					ConnectivityPlugin.getSymbolicName(), -1,
+					ConnectivityPlugin.getDefault().getResourceString(
+									"ManagedConnection_save_not_connected_error"), //$NON-NLS-1$
+					null);
+			throw new CoreException(status);
+		}
+
+		((IOfflineConnection) mConnection).save(monitor);
+
+		monitor.done();
+	}
+
+	/* package */boolean okToClose() {
+		boolean okToClose = true;
+		if (mConnection == null || mConnection.getConnectException() != null) {
+			return okToClose;
+		}
+
+		ConnectEvent event = new ConnectEvent(getConnectionProfile(), this);
+		for (Iterator it = new ArrayList(mListeners).iterator(); okToClose
+				&& it.hasNext();) {
+			try {
+				okToClose = ((IManagedConnectionListener) it.next()).okToClose(event);
+			}
+			catch (Exception e) {
+				ConnectivityPlugin.getDefault().log(e);
+			}
+		}
+		return okToClose;
+	}
+
+	/* package */boolean okToDetach() {
+		if (!canWorkOffline()) {
+			return okToClose();
+		}
+
+		boolean okToDetach = true;
+		ConnectEvent event = new ConnectEvent(getConnectionProfile(), this);
+		for (Iterator it = new ArrayList(mListeners).iterator(); okToDetach
+				&& it.hasNext();) {
+			IManagedConnectionListener listener = (IManagedConnectionListener) it
+					.next();
+			if (listener instanceof IManagedConnectionOfflineListener) {
+				try {
+					okToDetach = ((IManagedConnectionOfflineListener) listener)
+							.okToDetach(event);
+				}
+				catch (Exception e) {
+					ConnectivityPlugin.getDefault().log(e);
+				}
+			}
+		}
+		return okToDetach;
+	}
+
+	/* package */void close() {
+		if (mConnection == null) {
+			return;
+		}
+
+		if (mConnection.getConnectException() != null) {
+			mConnection.close();
+			mConnection = null;
+			return;
+		}
+
+		ConnectEvent event = new ConnectEvent(getConnectionProfile(), this);
+		for (Iterator it = new ArrayList(mListeners).iterator(); it.hasNext();) {
+			try {
+				((IManagedConnectionListener) it.next()).aboutToClose(event);
+			}
+			catch (Exception e) {
+				ConnectivityPlugin.getDefault().log(e);
+			}
+		}
+		mConnection.close();
+		mConnection = null;
+		for (Iterator it = new ArrayList(mListeners).iterator(); it.hasNext();) {
+			try {
+				((IManagedConnectionListener) it.next()).closed(event);
+			}
+			catch (Exception e) {
+				ConnectivityPlugin.getDefault().log(e);
+			}
+		}
+	}
+	
+	/*package*/ void dispose() {
+		if (isConnected()) {
+			try {
+				close();
+			}
+			catch (Exception e) {
+			}
+		}
+		mListeners.clear();
+		mProfile = null;
+	}
+	
+	private class RestrictedConnection implements IConnection {
+
+		public void close() {
+			throw new UnsupportedOperationException();
+		}
+
+		public Throwable getConnectException() {
+			return mConnection.getConnectException();
+		}
+
+		public IConnectionProfile getConnectionProfile() {
+			return mConnection.getConnectionProfile();
+		}
+
+		public Object getRawConnection() {
+			return mConnection.getRawConnection();
+		}
+	}
+	
+	private class RestrictedVersionProviderConnection extends
+			RestrictedConnection implements IServerVersionProvider {
+
+		public String getProviderName() {
+			return ((IServerVersionProvider) mConnection).getProviderName();
+		}
+
+		public Version getProviderVersion() {
+			return ((IServerVersionProvider) mConnection).getProviderVersion();
+		}
+
+		public String getTechnologyName() {
+			return ((IServerVersionProvider) mConnection).getTechnologyName();
+		}
+
+		public Version getTechnologyVersion() {
+			return ((IServerVersionProvider) mConnection)
+					.getTechnologyVersion();
+		}
+
+	}
+	
+	private class CloneConnectionJob extends Job implements ICloneConnectionJob {
+		
+		private IConnection mConnection;
+
+		public CloneConnectionJob() {
+			super(ConnectivityPlugin.getDefault().getResourceString(
+					"CreateConnectionJob.name", //$NON-NLS-1$
+					new Object[] { getConnectionFactoryProvider().getName(),
+							getConnectionProfile().getName()}));
+			setUser(true);
+		}
+
+		public IConnection getConnection() {
+			return mConnection;
+		}
+
+		protected IStatus run(IProgressMonitor monitor) {
+			IStatus status = Status.OK_STATUS;
+			monitor.beginTask(getName(), IProgressMonitor.UNKNOWN);
+			try {
+				if (isWorkingOffline()) {
+					mConnection = getConnectionFactoryProvider()
+							.createOfflineConnection(getConnectionProfile(),
+									monitor);
+				}
+				else {
+					mConnection = getConnectionFactoryProvider()
+							.createConnection(getConnectionProfile());
+				}
+				if (mConnection.getConnectException() != null) {
+					status = new Status(IStatus.ERROR, 
+					        ConnectivityPlugin.getSymbolicName(), -1,
+							ConnectivityPlugin.getDefault().getResourceString(
+									"CreateConnectionJob.error", //$NON-NLS-1$
+									new Object[] {
+											getConnectionFactoryProvider()
+													.getName(),
+											getConnectionProfile().getName(),
+											mConnection.getConnectException()
+													.getMessage()}),
+							mConnection.getConnectException());
+				}
+			}
+			catch (Exception e) {
+                status = new Status(IStatus.ERROR, 
+				        ConnectivityPlugin.getSymbolicName(), -1,
+						ConnectivityPlugin.getDefault().getResourceString(
+								"CreateConnectionJob.error", //$NON-NLS-1$
+								new Object[] {
+										getConnectionFactoryProvider()
+												.getName(),
+										getConnectionProfile().getName(),
+										e.getMessage()}), e);
+			}
+			monitor.done();
+			return status;
+		}
+		
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ProfileExtensionProvider.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ProfileExtensionProvider.java
new file mode 100644
index 0000000..953c346
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/ProfileExtensionProvider.java
@@ -0,0 +1,108 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.datatools.connectivity.IConnectionProfileProvider;
+import org.eclipse.datatools.connectivity.IProfileExtensionProvider;
+import org.eclipse.datatools.connectivity.IPropertiesPersistenceHook;
+
+/**
+ * @author rcernich
+ * 
+ * Created on Jan 16, 2004
+ */
+public class ProfileExtensionProvider implements IProfileExtensionProvider {
+
+	public static final String ATTR_ID = "id"; //$NON-NLS-1$
+	public static final String ATTR_PROFILE = "profile"; //$NON-NLS-1$
+	public static final String ATTR_NAME = "name"; //$NON-NLS-1$
+	public static final String ATTR_PROPERTIES_PERSISTENCE_HOOK = "propertiesPersistenceHook"; //$NON-NLS-1$
+
+	private String mId;
+	private String mName;
+	private String mProfile;
+	private IPropertiesPersistenceHook mPropertiesPersistenceHook;
+	private IConfigurationElement mElement;
+
+	public ProfileExtensionProvider(IConfigurationElement element) {
+		super();
+		init(element);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IProfileExtensionProvider#getConnectionProfileProvider()
+	 */
+	public IConnectionProfileProvider getConnectionProfileProvider() {
+		return ConnectionProfileManager.getInstance().getProvider(mProfile);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IProfileExtensionProvider#getId()
+	 */
+	public String getId() {
+		return mId;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IProfileExtensionProvider#getName()
+	 */
+	public String getName() {
+		return mName;
+	}
+	
+	public IPropertiesPersistenceHook getPropertiesPersistenceHook() {
+		loadPropertiesPersistenceHook();
+		return mPropertiesPersistenceHook;
+	}
+
+	private void init(IConfigurationElement element) {
+		Assert.isTrue(ConnectionProfileManager.EXT_ELEM_PROFILE_EXTENSION
+				.equals(element.getName()));
+
+		mElement = element;
+		mId = element.getAttribute(ATTR_ID);
+		mName = element.getAttribute(ATTR_NAME);
+		mProfile = element.getAttribute(ATTR_PROFILE);
+	}
+	
+	private void loadPropertiesPersistenceHook() {
+		if (mPropertiesPersistenceHook == null) {
+			mPropertiesPersistenceHook = ConnectionProfileProvider.DEFAULT_PROPERTIES_PERSISTENCE_HOOK;
+			if (mElement.getAttribute(ATTR_PROPERTIES_PERSISTENCE_HOOK) != null) {
+				try {
+					mPropertiesPersistenceHook = (IPropertiesPersistenceHook) mElement
+							.createExecutableExtension(ATTR_PROPERTIES_PERSISTENCE_HOOK);
+				}
+				catch (CoreException e) {
+					if (ConnectionProfileManager.DEBUG_CONNECTION_PROFILE_EXTENSION) {
+						System.err
+								.println(ConnectivityPlugin
+										.getDefault()
+										.getResourceString(
+												"trace.error.propertiesPersistenceHook", //$NON-NLS-1$
+												new Object[] { mProfile, mId}));
+						e.printStackTrace();
+					}
+				}
+			}
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/PropertySetChangeEvent.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/PropertySetChangeEvent.java
new file mode 100644
index 0000000..3727cd2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/PropertySetChangeEvent.java
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IPropertySetChangeEvent;
+
+public class PropertySetChangeEvent implements
+		IPropertySetChangeEvent {
+
+	private IConnectionProfile mConnectionProfile;
+	private String mPropertiesType;
+	private Map mChangedProperties;
+
+	private PropertySetChangeEvent(IConnectionProfile profile,
+										String propertiesType) {
+		super();
+		mConnectionProfile = profile;
+		mPropertiesType = propertiesType;
+	}
+
+	public PropertySetChangeEvent(IConnectionProfile profile,
+										String propertiesType, String property,
+										String oldValue, String newValue) {
+		this(profile, propertiesType);
+		mChangedProperties = new HashMap(1);
+		mChangedProperties.put(property, new ChangedProperty(property,
+                oldValue, newValue));
+	}
+
+	public PropertySetChangeEvent(IConnectionProfile profile,
+										String propertiesType,
+										Properties oldProperties,
+										Properties newProperties) {
+		this(profile, propertiesType);
+
+		Set keys = new HashSet(newProperties.keySet());
+		keys.addAll(oldProperties.keySet());
+		mChangedProperties = new HashMap(keys.size());
+		for (Iterator it = keys.iterator(); it.hasNext();) {
+			String key = (String) it.next();
+			String oldValue = oldProperties.getProperty(key);
+			String newValue = newProperties.getProperty(key);
+			if ((oldValue == null && newValue != null)
+					|| (oldValue != null && !oldValue.equals(newValue))) {
+				mChangedProperties.put(key, new ChangedProperty(key, oldValue,
+						newValue));
+			}
+		}
+		mChangedProperties = Collections.unmodifiableMap(mChangedProperties);
+	}
+
+	public Map getChangedProperties() {
+		return mChangedProperties;
+	}
+
+	public IChangedProperty getChangedProperty(String key) {
+		if (mChangedProperties.containsKey(key)) {
+			return (IChangedProperty) mChangedProperties.get(key);
+		}
+		return null;
+	}
+
+	public IConnectionProfile getConnectionProfile() {
+		return mConnectionProfile;
+	}
+
+	public String getPropertySetType() {
+		return mPropertiesType;
+	}
+
+	private static class ChangedProperty implements IChangedProperty {
+
+		private String mKey;
+		private String mNewValue;
+		private String mOldValue;
+
+		private ChangedProperty(String key, String oldValue, String newValue) {
+			mKey = key;
+			mNewValue = newValue;
+			mOldValue = oldValue;
+		}
+
+		public String getNewValue() {
+			return mNewValue;
+		}
+
+		public String getOldValue() {
+			return mOldValue;
+		}
+
+		public String getID() {
+			return mKey;
+		}
+
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/UUID.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/UUID.java
new file mode 100644
index 0000000..81c974b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/UUID.java
@@ -0,0 +1,204 @@
+/*******************************************************************************
+ * Copyright (c) 2002-2005 IBM Corporation and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal;
+
+import java.security.SecureRandom;
+import java.util.GregorianCalendar;
+
+/**
+ * This class is used to generate version 1 UUIDs as specified in <a
+ * href="http://www.ietf.org/rfc/rfc4122.txt">IETF RFC 4122</a>.
+ * 
+ * The UUID generated is compatible with java.util.UUID in JDK 1.5.
+ * 
+ * (Note, DTP 1.0 must be compatible with Eclipse 3.1.x which precludes using
+ * JDK 1.5 specific features.)
+ * 
+ * @author rcernich
+ * 
+ * Created on Dec 21, 2005
+ */
+public class UUID {
+
+	private static int sClockSequence;
+	private static byte sNodeID[];
+	private static long sLastTime;
+	private static int sNum100nsTicks;
+	private static long sEpochOffset;
+	private static char sHexChars[] = { '0', '1', '2', '3', '4', '5', '6', '7',
+			'8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
+	private static char sSeparator = '-';
+
+	private byte mBytes[];
+
+	public static UUID createUUID() {
+		return new UUID();
+	}
+
+	private UUID() {
+		super();
+
+		mBytes = new byte[16];
+		long currentTime = getCurrentTime();
+
+		// bytes 0-3 == time low order bytes
+		for (int i = 3; i > -1; --i) {
+			mBytes[3 - i] = (byte) ((currentTime & (0xffL << (i * 8))) >> i * 8);
+		}
+		// bytes 4-5 == time mid bytes
+		for (int i = 5; i > 3; --i) {
+			mBytes[9 - i] = (byte) ((currentTime & (0xffL << (i * 8))) >> i * 8);
+		}
+		// bytes 6-7 == time high order bytes + version
+		for (int i = 7; i > 5; --i) {
+			mBytes[13 - i] = (byte) ((currentTime & (0xffL << (i * 8))) >> i * 8);
+		}
+		// set the version to version one (0001xxxx)
+		mBytes[6] &= 0x0f;
+		// set the version
+		mBytes[6] |= 0x10;
+
+		// byte 8 == sequence high order byte + variant (10xxxxxx)
+		mBytes[8] = (byte) ((sClockSequence & 0xbf00) >> 8);
+		// set the variant
+		mBytes[8] |= 0x80;
+
+		// byte 9 == sequence low order byte
+		mBytes[9] = (byte) (sClockSequence & 0xff);
+
+		// Copy over the node ID
+		System.arraycopy(sNodeID, 0, mBytes, 10, 6);
+	}
+
+	public long getMostSigBytes() {
+		long msb = 0;
+		for (int i = 0; i < 8; ++i) {
+			msb |= (((long) mBytes[i]) << 56) >>> (8 * (i));
+		}
+		return msb;
+	}
+
+	public long getLeastSigBytes() {
+		long lsb = 0;
+		for (int i = 8; i < 16; ++i) {
+			lsb |= (((long) mBytes[i]) << 56) >>> (8 * (i - 8));
+		}
+		return lsb;
+	}
+
+	public String toString() {
+		StringBuffer sb = new StringBuffer();
+		for (int i = 0; i < 4; ++i) {
+			sb.append(sHexChars[(mBytes[i] & 0xf0) >> 4]);
+			sb.append(sHexChars[mBytes[i] & 0x0f]);
+		}
+		sb.append(sSeparator);
+		for (int i = 4; i < 6; ++i) {
+			sb.append(sHexChars[(mBytes[i] & 0xf0) >> 4]);
+			sb.append(sHexChars[mBytes[i] & 0x0f]);
+		}
+		sb.append(sSeparator);
+		for (int i = 6; i < 8; ++i) {
+			sb.append(sHexChars[(mBytes[i] & 0xf0) >> 4]);
+			sb.append(sHexChars[mBytes[i] & 0x0f]);
+		}
+		sb.append(sSeparator);
+		for (int i = 8; i < 10; ++i) {
+			sb.append(sHexChars[(mBytes[i] & 0xf0) >> 4]);
+			sb.append(sHexChars[mBytes[i] & 0x0f]);
+		}
+		sb.append(sSeparator);
+		for (int i = 10; i < 16; ++i) {
+			sb.append(sHexChars[(mBytes[i] & 0xf0) >> 4]);
+			sb.append(sHexChars[mBytes[i] & 0x0f]);
+		}
+		return sb.toString();
+	}
+
+	/**
+	 * May update sLastTime, sClockSequence, and sNum100nsTicks.
+	 * 
+	 * This basic algorithm used in this method was derived from
+	 * org.eclipse.emf.ecore.util.EcoreUtil.UUID.updateCurrentTime().
+	 * 
+	 * @return the current time in units of 100ns
+	 */
+	private static synchronized long getCurrentTime() {
+		long currentTime = System.currentTimeMillis();
+		if (currentTime < sLastTime) {
+			// clock must have been reset. increment the clock sequence
+			++sClockSequence;
+			if (sClockSequence > 0x3fff) {
+				// roll the sequence over (high bits reserved for variant def)
+				sClockSequence = 0;
+			}
+			// reset the number of sub-milli ticks
+			sNum100nsTicks = 0;
+		}
+		else if (currentTime == sLastTime) {
+			// increment the number of sub-milli ticks
+			++sNum100nsTicks;
+			if (sNum100nsTicks >= 10000) {
+				// need to wait for the system clock to catch up
+				for (currentTime = System.currentTimeMillis(); currentTime == sLastTime; currentTime = System
+						.currentTimeMillis()) {
+					try {
+						Thread.sleep(1);
+					}
+					catch (InterruptedException e) {
+					}
+				}
+				// reset the number of sub-milli ticks
+				sNum100nsTicks = 0;
+			}
+		}
+		else {
+			// reset the number of sub-milli ticks
+			sNum100nsTicks = 0;
+		}
+		// update last time
+		sLastTime = currentTime;
+
+		currentTime += sEpochOffset;
+		currentTime *= 10000; // convert units from ms to 100ns
+		currentTime += sNum100nsTicks;
+
+		return currentTime;
+	}
+
+	static {
+		// Theoretically, we could (should) be persisting this information
+		// between executions
+
+		// Initialize the random number generator
+		SecureRandom rng = new SecureRandom();
+
+		// Initialize the clock sequence
+		sClockSequence = (short) rng.nextInt(0x3fff);
+
+		// Initialize the node ID
+		sNodeID = new byte[6];
+		rng.nextBytes(sNodeID);
+		// Set the multi-cast bit to distinguish this from a real MAC
+		sNodeID[0] |= 0x80;
+
+		sLastTime = System.currentTimeMillis();
+
+		sNum100nsTicks = 0;
+
+		// The following courtesy of org.eclipse.emf.ecore.util.EcoreUtil.UUID
+		sEpochOffset = new GregorianCalendar(1970, 0, 1, 0, 0, 0).getTime()
+				.getTime()
+				- new GregorianCalendar(1582, 9, 15, 0, 0, 0).getTime()
+						.getTime();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/repository/ConnectionProfileRepositoryBase.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/repository/ConnectionProfileRepositoryBase.java
new file mode 100644
index 0000000..f6ab9fa
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/repository/ConnectionProfileRepositoryBase.java
@@ -0,0 +1,423 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: shongxum - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.repository;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.datatools.connectivity.ConnectionProfileException;
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IPropertySetChangeEvent;
+import org.eclipse.datatools.connectivity.IPropertySetListener;
+import org.eclipse.datatools.connectivity.internal.CategoryProvider;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileManager;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+import org.eclipse.datatools.connectivity.internal.InternalProfileManager;
+
+/**
+ * ProfileManger is a singleton class serverd as a helper class for connection
+ * profiles access. It also caches connection profiles and only persists to
+ * storage when changes made and at Eclipse shutdown.
+ * 
+ * @author shongxum
+ */
+public abstract class ConnectionProfileRepositoryBase implements
+		IConnectionProfileRepository {
+
+	private Map mProfiles = null;
+	private IConnectionProfile mProfile;
+	private IPropertySetListener mPropertySetListener = new IPropertySetListener() {
+		public void propertySetChanged(IPropertySetChangeEvent event) {
+			save();
+			// Pass this through to any listeners on the repository
+			fireProfileChanged(event.getConnectionProfile(),null,null,null);
+		}
+	};
+
+	protected ConnectionProfileRepositoryBase(IConnectionProfile profile) {
+		mProfile = profile;
+		InternalProfileManager.getInstance().addRepository(this);
+	}
+	
+	public IConnectionProfile getRepositoryProfile() {
+		return mProfile;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.internal.stores.IConnectionProfileStore#getProfiles()
+	 */
+	public IConnectionProfile[] getProfiles() {
+		return (IConnectionProfile[]) internalGetProfiles().values().toArray(
+				new IConnectionProfile[mProfiles.size()]);
+	}
+
+	protected Map internalGetProfiles() {
+		if (mProfiles == null) {
+			try {
+				load();
+			}
+			catch (CoreException e) {
+				e.printStackTrace();
+				return new HashMap();
+			}
+		}
+		return mProfiles;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.internal.stores.IConnectionProfileStore#getProfilesByCategory(java.lang.String)
+	 */
+	public IConnectionProfile[] getProfilesByCategory(String catID) {
+		if (catID == null)
+			return getProfiles();
+
+		Collection profiles = internalGetProfiles().values();
+		ArrayList cps = new ArrayList();
+		for (Iterator it = profiles.iterator(); it.hasNext();) {
+			IConnectionProfile profile = (IConnectionProfile) it.next();
+			if (profile.getProvider().getCategory() != null
+					&& profile.getProvider().getCategory().getId()
+							.equals(catID))
+				cps.add(profile);
+		}
+		return (IConnectionProfile[]) cps.toArray(new IConnectionProfile[0]);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.internal.stores.IConnectionProfileStore#getProfileByName(java.lang.String)
+	 */
+	public IConnectionProfile getProfileByName(String name) {
+		Map profiles = internalGetProfiles();
+		if (profiles.containsKey(name)) {
+			return (IConnectionProfile) profiles.get(name);
+		}
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.internal.stores.IConnectionProfileStore#getProfileByInstanceID(java.lang.String)
+	 */
+	public IConnectionProfile getProfileByInstanceID(String id) {
+		IConnectionProfile cp = null;
+		Collection profiles = internalGetProfiles().values();
+		for (Iterator it = profiles.iterator(); it.hasNext();) {
+			IConnectionProfile profile = (IConnectionProfile) it.next();
+			if (profile.getInstanceID().equals(id)) {
+				cp = profile;
+				break;
+			}
+		}
+		return cp;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.internal.stores.IConnectionProfileStore#getProfileByProviderID(java.lang.String)
+	 */
+	public IConnectionProfile[] getProfileByProviderID(String ID) {
+		Collection profiles = internalGetProfiles().values();
+		ArrayList cps = new ArrayList();
+		for (Iterator it = profiles.iterator(); it.hasNext();) {
+			IConnectionProfile profile = (IConnectionProfile) it.next();
+			if (profile.getProviderId().equals(ID)) {
+				cps.add(profile);
+			}
+		}
+		return (IConnectionProfile[]) cps.toArray(new IConnectionProfile[cps
+				.size()]);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.internal.stores.IConnectionProfileStore#addProfile(org.eclipse.datatools.connectivity.IConnectionProfile)
+	 */
+	public void addProfile(IConnectionProfile profile)
+			throws ConnectionProfileException {
+		addProfile(profile, false);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.internal.stores.IConnectionProfileStore#addProfile(org.eclipse.datatools.connectivity.IConnectionProfile,
+	 *      boolean)
+	 */
+	public void addProfile(IConnectionProfile profile, boolean replaceExisting)
+			throws ConnectionProfileException {
+		// check if the new profile's name already exists in profiles cache
+		IConnectionProfile existingProfile = getProfileByName(profile.getName());
+		if (existingProfile != null) {
+			if (!replaceExisting)
+				throw new ConnectionProfileException(ConnectivityPlugin
+						.getDefault().getResourceString("profile.duplicate", //$NON-NLS-1$
+								new Object[] { profile.getName()}));
+
+			// replace existing cached profile of same name with the new
+			// profile
+			if (existingProfile != profile)
+				modifyProfile(profile);
+			return;
+		}
+
+		// add new profile to profile caches
+		internalGetProfiles().put(profile.getName(), profile);
+		((ConnectionProfile)profile).setRepository(this);
+		profile.addPropertySetListener(mPropertySetListener);
+
+		fireProfileAdded(profile);
+		save();
+
+		if (profile.isAutoConnect()) {
+			profile.connect(null);
+		}
+	}
+
+	public void removeProfile(IConnectionProfile profile)
+			throws ConnectionProfileException {
+		if (!getRepositoryProfile().equals(profile.getParentProfile())) {
+			return;
+		}
+
+		if (getProfileByName(profile.getName()) != null) {
+
+			mProfiles.remove(profile.getName());
+
+			fireProfileDeleted(profile);
+
+			save();
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.internal.stores.IConnectionProfileStore#deleteProfile(org.eclipse.datatools.connectivity.IConnectionProfile)
+	 */
+	public void deleteProfile(IConnectionProfile profile)
+			throws ConnectionProfileException {
+		Map profiles = internalGetProfiles();
+
+		if (!profiles.containsKey(profile.getName()))
+			throw new ConnectionProfileException(ConnectivityPlugin
+					.getDefault().getResourceString("profile.notexist", //$NON-NLS-1$
+							new Object[] { profile.getName()}));
+
+		profiles.remove(profile.getName());
+
+		profile.disconnect();
+
+		fireProfileDeleted(profile);
+
+		save();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.internal.stores.IConnectionProfileStore#modifyProfile(org.eclipse.datatools.connectivity.IConnectionProfile)
+	 */
+	public void modifyProfile(IConnectionProfile profile)
+			throws ConnectionProfileException {
+		modifyProfile(profile, null, null, null);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.internal.stores.IConnectionProfileStore#modifyProfile(org.eclipse.datatools.connectivity.IConnectionProfile,
+	 *      java.lang.String, java.lang.String)
+	 */
+	public void modifyProfile(IConnectionProfile profile, String newName,
+			String newDesc) throws ConnectionProfileException {
+		modifyProfile(profile, newName, newDesc, null);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.internal.stores.IConnectionProfileStore#modifyProfile(org.eclipse.datatools.connectivity.IConnectionProfile,
+	 *      java.lang.String, java.lang.String, java.lang.Boolean)
+	 */
+	public void modifyProfile(IConnectionProfile profile, String newName,
+			String newDesc, Boolean autoConnect)
+			throws ConnectionProfileException {
+		IConnectionProfile currentProfile = getProfileByName(profile.getName());
+		IConnectionProfile existingProfile = getProfileByName(newName);
+
+		if (currentProfile == null)
+			throw new ConnectionProfileException(ConnectivityPlugin
+					.getDefault().getResourceString("profile.notexist", //$NON-NLS-1$
+							new Object[] { profile.getName()}));
+
+		if (existingProfile != null && !profile.getName().equals(newName))
+			throw new ConnectionProfileException(ConnectivityPlugin
+					.getDefault().getResourceString("profile.duplicate", //$NON-NLS-1$
+							new Object[] { newName}));
+
+		ConnectionProfile internalProfile = (ConnectionProfile) profile;
+		String oldName = profile.getName();
+		String oldDesc = profile.getDescription();
+		Boolean oldAutoConnect = new Boolean(profile.isAutoConnect());
+		if (newName != null && !newName.equals(oldName))
+			internalProfile.setName(newName);
+		if (newDesc != null && !newDesc.equals(oldDesc))
+			internalProfile.setDescription(newDesc);
+		if (autoConnect != null && !autoConnect.equals(oldAutoConnect)) {
+			internalProfile.setAutoConnect(autoConnect.booleanValue());
+			if (autoConnect.booleanValue()
+					&& internalProfile.getConnectionState() == IConnectionProfile.DISCONNECTED_STATE) {
+				internalProfile.connect(null);
+			}
+		}
+
+		internalGetProfiles().remove(oldName);
+		internalGetProfiles().put(profile.getName(), profile);
+
+		fireProfileChanged(profile, oldName, oldDesc, oldAutoConnect);
+
+		save();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.internal.stores.IConnectionProfileStore#save()
+	 */
+	public abstract void save();
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.internal.stores.IConnectionProfileStore#load()
+	 */
+	public void load() throws CoreException {
+		Collection profiles = loadProfiles();
+		if (profiles == null) {
+			mProfiles = new HashMap();
+		}
+		else {
+			mProfiles = new HashMap(profiles.size());
+			for (Iterator it = profiles.iterator(); it.hasNext();) {
+				ConnectionProfile profile = (ConnectionProfile) it.next();
+				profile.setRepository(this);
+				mProfiles.put(profile.getName(), profile);
+				profile.migrate();
+				profile.addPropertySetListener(mPropertySetListener);
+			}
+		}
+
+		autoConnectProfiles();
+	}
+
+	protected abstract Collection loadProfiles() throws CoreException;
+
+	protected final void fireProfileAdded(IConnectionProfile profile) {
+		InternalProfileManager.getInstance().fireProfileAdded(profile);
+	}
+
+	protected final void fireProfileDeleted(IConnectionProfile profile) {
+		InternalProfileManager.getInstance().fireProfileDeleted(profile);
+	}
+
+	protected final void fireProfileChanged(IConnectionProfile profile,
+			String oldName, String oldDesc, Boolean oldAutoConnect) {
+		InternalProfileManager.getInstance().fireProfileChanged(profile,
+				oldName, oldDesc, oldAutoConnect);
+	}
+
+	private void autoConnectProfiles() {
+		for (Iterator it = internalGetProfiles().values().iterator(); it
+				.hasNext();) {
+			IConnectionProfile profile = (IConnectionProfile) it.next();
+			if (profile.isAutoConnect()) {
+				profile.connect(null);
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.internal.stores.IConnectionProfileStore#dispose()
+	 */
+	public void dispose() {
+		if (mProfiles == null) {
+			return;
+		}
+		save();
+		for (Iterator it = internalGetProfiles().values().iterator(); it
+				.hasNext();) {
+			try {
+				((ConnectionProfile) it.next()).dispose();
+			}
+			catch (Exception e) {
+				// RJC Auto-generated catch block
+				e.printStackTrace();
+			}
+		}
+		mProfiles.clear();
+		mProfiles = null;
+		InternalProfileManager.getInstance().removeRepository(this);
+	}
+
+	public ICategory getCategory(String catID) {
+		if (supportsCategory(catID)) {
+			CategoryProvider cp = ConnectionProfileManager.getInstance()
+					.getCategory(catID);
+			return cp == null ? null : cp.createCategory(this);
+		}
+		return null;
+	}
+
+	public ICategory[] getRootCategories() {
+		Collection allRootCategories = ConnectionProfileManager.getInstance()
+				.getCategories().values();
+		List rootCategories = new ArrayList(allRootCategories.size());
+		for (Iterator it = allRootCategories.iterator(); it.hasNext();) {
+			CategoryProvider cp = (CategoryProvider) it.next();
+			if (cp.getParent() == null
+					&& !IConnectionProfileRepositoryConstants.REPOSITORY_CATEGORY_ID
+							.equals(cp.getId()) && supportsCategory(cp.getId())) {
+				rootCategories.add(cp.createCategory(this));
+			}
+		}
+		return (ICategory[]) rootCategories
+				.toArray(new ICategory[rootCategories.size()]);
+	}
+
+	public boolean equals(Object obj) {
+		if(obj instanceof IConnectionProfileRepository){
+			return ((IConnectionProfileRepository) obj).getRepositoryProfile().getName()
+					.equals(getRepositoryProfile().getName());
+		}
+		
+		
+		return false;
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/repository/IConnectionProfileRepository.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/repository/IConnectionProfileRepository.java
new file mode 100644
index 0000000..ead88e2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/repository/IConnectionProfileRepository.java
@@ -0,0 +1,161 @@
+/*******************************************************************************
+ * Copyright (c) 2006-2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.repository;
+
+import org.eclipse.datatools.connectivity.ConnectionProfileException;
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+
+public interface IConnectionProfileRepository {
+
+	/**
+	 * @return the connection profile defining this repository
+	 */
+	public IConnectionProfile getRepositoryProfile();
+
+	/**
+	 * Get all connection profiles persisted in workspace
+	 * 
+	 * @return connection profiles
+	 */
+	public IConnectionProfile[] getProfiles();
+
+	/**
+	 * Get connection profiles by category
+	 * 
+	 * @param catID
+	 * @return IConnectionProfile[]
+	 */
+	public IConnectionProfile[] getProfilesByCategory(String catID);
+
+	/**
+	 * Get connection profile by name
+	 * 
+	 * @param name
+	 * @return IConnectionProfile
+	 */
+	public IConnectionProfile getProfileByName(String name);
+
+	/**
+	 * Get connection profile by instance ID
+	 * 
+	 * @param id
+	 * @return IConnectionProfile
+	 */
+	public IConnectionProfile getProfileByInstanceID(String id);
+
+	/**
+	 * Get connection profiles by connection profile(cp) provider ID associated
+	 * with each cp
+	 * 
+	 * @param ID
+	 * @return IConnectionProfile[]
+	 */
+	public IConnectionProfile[] getProfileByProviderID(String ID);
+
+	/**
+	 * Add a connection profile object to the profiles cache. Throws
+	 * ConnectionProfileException if the new profile's name already exists in
+	 * cache.
+	 * 
+	 * @param profile
+	 * @throws ConnectionProfileException
+	 */
+	public void addProfile(IConnectionProfile profile)
+			throws ConnectionProfileException;
+
+	/**
+	 * Removes the profile from this repository. No action will be taken if the
+	 * profile is not contained by this repository;
+	 * 
+	 * @param profile
+	 */
+	public void removeProfile(IConnectionProfile profile)
+			throws ConnectionProfileException;
+
+	/**
+	 * Add a connection profile object to the profiles cache. If the new
+	 * profile's name already exists in cache, replace the cached profile with
+	 * the given profile provided the replaceExisting flag is true; otherwise,
+	 * throws ConnectionProfileException.
+	 * 
+	 * @param profile
+	 * @param replaceExisting
+	 * @throws ConnectionProfileException
+	 */
+	public void addProfile(IConnectionProfile profile, boolean replaceExisting)
+			throws ConnectionProfileException;
+
+	/**
+	 * Delete a connection profile object from the profiles cache
+	 * 
+	 * @param profile
+	 * @throws ConnectionProfileException
+	 */
+	public void deleteProfile(IConnectionProfile profile)
+			throws ConnectionProfileException;
+
+	/**
+	 * Modify an existing connection profile
+	 * 
+	 * @param profile
+	 * @throws ConnectionProfileException
+	 */
+	public void modifyProfile(IConnectionProfile profile)
+			throws ConnectionProfileException;
+
+	/**
+	 * Modify an existing connection profile, plus it's name and description We
+	 * don't expose a setName and setDescription in IConnectionProfile, so
+	 * instead we expose this api for that same purpose.
+	 * 
+	 * @param profile
+	 * @throws ConnectionProfileException
+	 */
+	public void modifyProfile(IConnectionProfile profile, String newName,
+			String newDesc) throws ConnectionProfileException;
+
+	/**
+	 * Modify an existing connection profile, plus it's name and description We
+	 * don't expose a setName and setDescription in IConnectionProfile, so
+	 * instead we expose this api for that same purpose.
+	 * 
+	 * @param profile
+	 * @throws ConnectionProfileException
+	 */
+	public void modifyProfile(IConnectionProfile profile, String newName,
+			String newDesc, Boolean autoConnect)
+			throws ConnectionProfileException;
+
+	/**
+	 * Get category by name
+	 * 
+	 * @param catID
+	 * @return ICategory
+	 */
+	public ICategory getCategory(String catID);
+
+	/**
+	 * Get root categories whose parent category is null
+	 * 
+	 * @return ICategory[]
+	 */
+	public ICategory[] getRootCategories();
+
+	public boolean supportsCategory(String id);
+
+	public boolean supportsProfileType(String providerID);
+
+	public boolean isReadOnly();
+
+	public void dispose();
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/repository/IConnectionProfileRepositoryConstants.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/repository/IConnectionProfileRepositoryConstants.java
new file mode 100644
index 0000000..8e83715
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/repository/IConnectionProfileRepositoryConstants.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.repository;
+
+public interface IConnectionProfileRepositoryConstants {
+
+	public static final String REPOSITORY_CATEGORY_ID = "org.eclipse.datatools.connectivity.connectionProfileRepositoryCategory"; //$NON-NLS-1$
+	public static final String REPOSITORY_CONNECTION_FACTORY_ID = IConnectionProfileRepository.class.getName();
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/repository/profile_store_reqs.txt b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/repository/profile_store_reqs.txt
new file mode 100644
index 0000000..ca7fa26
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/repository/profile_store_reqs.txt
@@ -0,0 +1,34 @@
+Connection profiles are contained by a store
+
+A connection profile may be moved/copied between stores
+
+A store may be read only
+
+A store provides de/serialization of profiles
+
+need functionality for creating/modifying/deleting stores
+
+do we need namespacing (e.g. store name/profile name)?
+	for now, all profile names must be unique
+	won't work.  can't guarantee that the user won't connect to a store that defines a profile with a duplicate name
+
+should a profile store be implemented as a connection profile?
+	e.g. an app server could expose its db connections and jee connector connections
+	not a bad idea.  there's already a getParent() method on IConnectionProfile
+
+how will profile serialization work?
+	is the store responsible for serialization?
+	what about propertyPersistenceHooks()
+	what about things like the app. server case above?
+		what profile types would it create for existing connections?
+	certain properties may be read-only.
+		how can this be incorporated into the existing profile property pages?
+
+A repository will be a connection profile
+A connection factory type will be defined for repositories
+If this connection factory type exists on a profile it will be identified as a repository
+An interface will be defined for the connection type provided by the factory
+Connection profiles contained by the repository will have their parent profile set to the repository's profile
+A repository may provide its own connection profile types.  These types may not be available for creation in other repositories.
+	Certain connection profile types may only be created in certain repositories
+A repository may not provide support for all profile types.
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/repository/todo.txt b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/repository/todo.txt
new file mode 100644
index 0000000..be299d7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/repository/todo.txt
@@ -0,0 +1 @@
+Add logic to disable profile types for certain repository types.
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/resources.properties b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/resources.properties
new file mode 100644
index 0000000..0101870
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/resources.properties
@@ -0,0 +1,86 @@
+################################################################################
+## Copyright (c) 2005, 2011 Sybase, Inc. and others.
+## All rights reserved. This program and the accompanying materials
+## are made available under the terms of the Eclipse Public License v1.0
+## which accompanies this distribution, and is available at
+## http://www.eclipse.org/legal/epl-v10.html
+##
+## Contributors:
+##    Sybase, Inc. - initial API and implementation
+##    IBM Corporation - migrated to new wizard framework
+##    IBM Corporation - fix for defect 222818
+##    Actuate Corporation - added the cipherProvider extension point [BZ 358686]
+################################################################################ 
+plugin.internal_error=Internal Error - org.eclipse.datatools.connectivity
+ConnectionProfileConstants.unknownVersion=unknown
+dialog.title.error.loadconnectionfactory = Error loading connection factory in "{0}"!
+ConnectJob.name=Creating connections to {0}.
+ConnectJob.status.info=Could not create connections to {0} for one or more extensions.
+ConnectJob.status.error=Could not connect to {0}.
+DisconnectJob.name=Closing connections to {0}.
+DisconnectJob.status.info=Could not close connections to {0} for one or more extensions.
+DisconnectJob.status.error=Could not disconnect from {0}.
+CreateConnectionJob.name=Creating {0} to {1}.
+CreateConnectionJob.error=Error creating {0} connection to {1}. (Error\: {2})
+OpenConnectionEventJob.name=Processing open connection event for {0}.
+CloseManagedConnectionJob.name=Closing {0} connection to {1}.
+CloseManagedConnectionJob.error=Error closing {0} connection to {1}. (Error\: {2})
+CloseConnectionEventJob.name=Processing close connection event for {0}.
+assert.invalid.profile = Parsing error\: invalid attribute ({0})
+assert.invalid.profile.duplicateFactory = Parsing error\: duplicate factory id with duplicate priority ({0})
+assert.invalid.profile.nullFactory = Parsing error\: null factory or factory id ({0}/{1})
+dialog.title.error.loadwizard = Error loading new wizard in "{0}"!
+operation.new.connectionprofile = Creating profile\: "{0}"
+error.connect = Problem connecting to profile "{0}."  See log file for more details.
+marker.error = Problem connecting to profile {0}.  (Error\: {1})
+drivermarker.error = Problem with driver "{0}." (Error\: {1})
+drivermarker.import.error = Missing jar list for driver definition created during import of profile "{0}."
+profile.duplicate = Duplicate connection profile name "{0}"!
+profile.notexist = Connection profile "{0}" does not exist!
+duplicate.profile.name = Copy of {0}({1})
+DriverConnectionBase.error.unknown=Connection failed with unspecified error.
+DriverConnectionBase.error.driverDefinitionNotSpecified=Driver definition not specified.
+DriverConnectionBase.error.driverDefinitionNotFound=Driver definition could not be found.
+error.loadprofilesxml = Error loading connection profile data.
+error.saveprofilesxml = Error saving connection profile data.
+error.loaddriversxml = Error loading driver definition data.
+error.savedriversxml = Error saving driver definition data.
+
+trace.error.propertiesPersistenceHook = Could not load propertiesPersistenceHook, using default (profile type={0}, extension={1})
+trace.error.propertiesPersistenceHookSaveError = Error invoking properties persistent hook; persisting all properties (profile={0}, extension={1})
+trace.error.propertiesPersistenceHookLoadError = Error invoking properties persistent hook; transient properties not set (profile={0}, extension={1})
+trace.error.migration = Error loading migration element for connection profile provider (id={0}, migration class={1})
+trace.error.drivermigration = Error creating driver instance of profile (id={0}, driver id={1})
+
+migration.error.providerDoesNotExist = Error loading migration element: specified newProviderID is invalid (newProviderID={0})
+migration.error.invalidPropertyMigrationElement = Error loading migration element: propertyMigration must specify a newPropertyKey, an oldPropertyKey or both
+migration.error.unknownParentElement = Error loading migration element: unknown parent element (parent element name={0})
+
+DriverUtil.taskName = Procesing Classes in {0}
+
+Category.Name.Unknown=Unsupported
+
+WorkOfflineJob.name = Changing {0} to work offline mode.
+WorkOfflineJob.status.error = Could not create offline connections to {1} for one or more extensions.
+
+SaveWorkOfflineDataJob.name = Save offline data for {0}.
+SaveWorkOfflineDataJob.status = Save offline data status.
+
+CreateOfflineConnectionJob.name = Creating offline {0} connection to {1}.
+CreateOfflineConnectionJob.error = Error creating offline {0} connection to {1}. (Error\: {2})
+
+ManagedConnection_save_not_connected_error = Must be connected to server to save offline data.
+ManagedConnection_offline_not_supported_error = {0} does not support working offline.
+
+drivers.error.finding.property.no.template = Problem attempting to retrieve {0} from driver template.
+
+JDBCConnection.technologyName = JDBC
+JDBCConnection.invalidDriverDefinition = {0}\: {1}. Using the driver properties defined in database profile instead.
+
+error.database.not.start = No start database command was issued. ErrorCode = {0}, SQLState = {1}.
+PluginResourceLocator.invalidURL = Invalid URL {0} (Error\: {1})
+ConnectivityPlugin.error.noDefaultWorkspace = Unable to determine the default workspace location.  Check your OSGi-less platform configuration of the plugin or datatools workspace path.
+CipherProviderExtensions.missingRequiredAttrValue = The {0} element in the {1} extension contributed by {2} is missing a value in one or more of its required attributes: {3}={4}, {5}={6}
+CipherProviderExtensions.invalidClassAttrValue = Invalid class type ({0}) in the {1} extension contributed by {2}.  It must implement the {3} Java interface.
+CipherProviderExtensions.conflictingExtensions = The registered ICipherProvider ({0}) has been replaced by the ICipherProvider ({1}) contributed by another extension in {2} for the same file extension ({3}).
+
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/security/CipherProviderExtensions.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/security/CipherProviderExtensions.java
new file mode 100644
index 0000000..cd0847a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/security/CipherProviderExtensions.java
@@ -0,0 +1,213 @@
+/*

+ *************************************************************************

+ * Copyright (c) 2011 Actuate Corporation.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *  Actuate Corporation - initial API and implementation

+ *  

+ *************************************************************************

+ */

+

+package org.eclipse.datatools.connectivity.internal.security;

+

+import java.io.File;

+import java.util.Collections;

+import java.util.HashMap;

+import java.util.Map;

+

+import org.eclipse.core.runtime.CoreException;

+import org.eclipse.core.runtime.IConfigurationElement;

+import org.eclipse.core.runtime.IExtension;

+import org.eclipse.core.runtime.IExtensionPoint;

+import org.eclipse.core.runtime.IExtensionRegistry;

+import org.eclipse.core.runtime.Platform;

+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;

+import org.eclipse.datatools.connectivity.security.ICipherProvider;

+

+/**

+ *  Internal utility that loads and processes the extensions that implement the

+ *  org.eclipse.datatools.connectivity.cipherProvider extension point.

+ *  @since 1.2.4 (DTP 1.9.2)

+ */

+public class CipherProviderExtensions

+{

+    private static final String CIPHER_PROVIDER_EXT_POINT = "org.eclipse.datatools.connectivity.cipherProvider"; //$NON-NLS-1$

+    private static final String CIPHER_PROVIDER_ELEMENT_NAME = "cipherProvider"; //$NON-NLS-1$

+    private static final String CIPHER_PROVIDER_FILE_EXT_ATTR_NAME = "fileExtension"; //$NON-NLS-1$

+    private static final String CIPHER_PROVIDER_CLASS_ATTR_NAME = "class"; //$NON-NLS-1$

+

+    private static final String NULL_FILE_EXT_CIPHER_PROVIDER_KEY = 

+        "org.eclipse.datatools.connectivity.cipherProvider.nullFileExt"; //$NON-NLS-1$

+    private static final String NULL_FILE_EXT_ATTR_VALUE = "default"; //$NON-NLS-1$

+    private static final String FILE_EXT_SEPARATOR = "."; //$NON-NLS-1$

+    

+    private static Map<String,ICipherProvider> sm_registeredCipherProviders;

+

+    /**

+     * Returns a custom ICipherProvider instance registered for the file extension

+     * of the specified connection profile store file name.

+     * If the specified file has no extension in its file name, 

+     * returns the custom ICipherProvider instance registered for those with no file extension, 

+     * if defined in an org.eclipse.datatools.connectivity.cipherProvider extension.

+     * @param profileStoreFile  a connection profile store {@link File}

+     * @return  the corresponding {@link ICipherProvider} instance,

+     *          or null if none is defined for the specified profileStoreFile

+     *          in an org.eclipse.datatools.connectivity.cipherProvider extension

+     */

+    static ICipherProvider getCipherProviderForFile( File profileStoreFile )

+    {

+        if( profileStoreFile == null )

+            return null;

+        

+        // get the file extension from the specified File instance

+        String profileStoreFilePath = profileStoreFile.getPath();

+        int fileExtSeparatorIndex = profileStoreFilePath.lastIndexOf( FILE_EXT_SEPARATOR );

+

+        String fileExtension = null;

+        // if file has extension

+        if( fileExtSeparatorIndex >= 0 && 

+            profileStoreFilePath.length() > fileExtSeparatorIndex+1 )

+        {

+            fileExtension = profileStoreFilePath.substring( fileExtSeparatorIndex+1 );

+        }

+                          

+        return getCipherProviderForFileExtension( fileExtension ); 

+    }

+

+    /**

+     * Returns a custom ICipherProvider instance defined for the specified file extension

+     * of a connection profile store.

+     * If the specified file has no extension in its file name, 

+     * returns the custom ICipherProvider instance registered for those with no file extension, 

+     * if defined in an org.eclipse.datatools.connectivity.cipherProvider extension.

+     * @param fileExtension    the file extension of a connection profile store file 

+     * @return  the corresponding {@link ICipherProvider} instance,

+     *          or null if none is defined for the specified fileExtension

+     *          in an org.eclipse.datatools.connectivity.cipherProvider extension

+     */

+    static ICipherProvider getCipherProviderForFileExtension( String fileExtension )

+    {

+        // if no file extension, use the default fileExtension provider, if exists

+        if( fileExtension == null )

+            fileExtension = NULL_FILE_EXT_ATTR_VALUE;

+        String fileExtKey = getFileExtMapKey( fileExtension );

+        return getRegisteredCipherProviders().get( fileExtKey );

+    }

+    

+    private static Map<String,ICipherProvider> getRegisteredCipherProviders()

+    {

+        if( sm_registeredCipherProviders == null )

+        {

+            synchronized( CipherProviderExtensions.class )

+            {

+                if( sm_registeredCipherProviders == null )

+                    sm_registeredCipherProviders = loadRegisteredCipherProviders();

+            }

+        }

+        return sm_registeredCipherProviders;

+    }

+

+    private static Map<String,ICipherProvider> loadRegisteredCipherProviders()

+    {

+        IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();

+        IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint( CIPHER_PROVIDER_EXT_POINT );

+        IExtension[] extensions = extensionPoint.getExtensions();

+        if( extensions.length == 0 )

+            return Collections.emptyMap();

+        

+        Map<String,ICipherProvider> cipherProviders = new HashMap<String,ICipherProvider>( extensions.length );

+        for( int i = 0; i < extensions.length; ++i )

+        {

+            IConfigurationElement[] configElements = extensions[i].getConfigurationElements();

+            if( configElements.length < 1 )

+                continue;   // skip this extension with no configuration element

+

+            // iterate through each cipherProvider element in the extension

+            for( int j = 0; j < configElements.length; ++j )

+            {

+                IConfigurationElement configElement = configElements[j];

+                if( ! configElement.getName().equals( CIPHER_PROVIDER_ELEMENT_NAME ) )

+                    continue;

+    

+                String fileExtension = configElement.getAttribute( CIPHER_PROVIDER_FILE_EXT_ATTR_NAME );

+                String providerClassName = configElement.getAttribute( CIPHER_PROVIDER_CLASS_ATTR_NAME );

+                

+                // validate the attribute values are not null or empty

+                if( fileExtension == null || fileExtension.trim().length() == 0 ||

+                    providerClassName == null || providerClassName.trim().length() == 0 )

+                {

+                    // log missing attribute value(s)

+                    ConnectivityPlugin.getDefault().logInfo(  

+                            ConnectivityPlugin.getDefault().getResourceString( 

+                                    "CipherProviderExtensions.missingRequiredAttrValue",  //$NON-NLS-1$

+                                    new Object[]{ CIPHER_PROVIDER_ELEMENT_NAME, 

+                                            CIPHER_PROVIDER_EXT_POINT,

+                                            extensions[i].getContributor().getName(),

+                                            CIPHER_PROVIDER_FILE_EXT_ATTR_NAME, fileExtension,

+                                            CIPHER_PROVIDER_CLASS_ATTR_NAME, providerClassName } ));

+                    continue;   // skip element with missing required attribute value(s)

+                }

+    

+                // create the custom ICipherProvider instance and save in cached Map

+                try

+                {

+                    Object cipherProviderInstance = configElement.createExecutableExtension( CIPHER_PROVIDER_CLASS_ATTR_NAME );

+                    if( !(cipherProviderInstance instanceof ICipherProvider) )

+                    {

+                        // log invalid class

+                        ConnectivityPlugin.getDefault().logInfo(  

+                                ConnectivityPlugin.getDefault().getResourceString( 

+                                        "CipherProviderExtensions.invalidClassAttrValue",  //$NON-NLS-1$

+                                        new Object[]{ providerClassName, CIPHER_PROVIDER_EXT_POINT,

+                                                extensions[i].getContributor().getName(),

+                                                ICipherProvider.class.getName() } ));

+                        continue;   // skip invalid element

+                    }

+

+                    // add the ICipherProvider instance to the Map

+                    String fileExtKey = getFileExtMapKey( fileExtension );

+                    ICipherProvider overriddenProvider = cipherProviders.put( fileExtKey,

+                                                            (ICipherProvider) cipherProviderInstance );

+

+                    if( overriddenProvider != null )

+                    {

+                        // log warning that the provider is being overridden by another extension element

+                        ConnectivityPlugin.getDefault().logWarning(

+                            ConnectivityPlugin.getDefault().getResourceString( 

+                                "CipherProviderExtensions.conflictingExtensions", //$NON-NLS-1$

+                                new Object[]{ overriddenProvider, cipherProviderInstance, 

+                                        extensions[i].getContributor().getName(), fileExtension } ));

+                    }

+                }

+                catch( CoreException e )

+                {

+                    ConnectivityPlugin.getDefault().log( e );

+                    continue;   // skip the element

+                }

+            }

+        }

+        

+        return cipherProviders;

+    }

+

+    /*

+     *  Convert the file extension for use as a Map key.

+     */

+    private static String getFileExtMapKey( String fileExtension )

+    {

+        // strip out any leading file extension separator

+        if( fileExtension.startsWith( FILE_EXT_SEPARATOR ) )

+            fileExtension = fileExtension.substring( FILE_EXT_SEPARATOR.length() );

+

+        // if it is the special keyword for null file extension, use the pre-defined key

+        if( fileExtension.equals( NULL_FILE_EXT_ATTR_VALUE ) )

+            fileExtension = NULL_FILE_EXT_CIPHER_PROVIDER_KEY;

+        

+        return fileExtension;

+    }

+    

+}

diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/security/DefaultCipherProvider.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/security/DefaultCipherProvider.java
new file mode 100644
index 0000000..861c680
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/security/DefaultCipherProvider.java
@@ -0,0 +1,149 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2011 Sybase, Inc. and others.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ *  Actuate Corporation - re-factored to support the cipherProvider extension point [BZ 358686]
+ * 
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.security;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.net.URL;
+import java.security.GeneralSecurityException;
+import java.security.Key;
+import java.security.KeyStoreException;
+import java.security.spec.InvalidKeySpecException;
+import java.security.spec.KeySpec;
+
+import javax.crypto.Cipher;
+import javax.crypto.SecretKeyFactory;
+import javax.crypto.spec.DESKeySpec;
+import javax.crypto.spec.DESedeKeySpec;
+import javax.crypto.spec.SecretKeySpec;
+
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+
+/**
+ * Default cipher provider using a statically defined symmetric key.
+ * 
+ * @author rcernich
+ */
+@SuppressWarnings("deprecation")
+public class DefaultCipherProvider implements ICipherProvider {
+
+    private static final String SECRET_KEY_ALGORITHM_DESEDE = "DESede"; //$NON-NLS-1$
+    private static final String SECRET_KEY_ALGORITHM_DES = "DES"; //$NON-NLS-1$
+    
+	public DefaultCipherProvider() {
+		super();
+	}
+
+	public Cipher createEncryptionCipher() throws GeneralSecurityException {
+		Key k = loadKey();
+		if (k == null)
+		    return null;
+		Cipher c = Cipher.getInstance(k.getAlgorithm());
+		c.init(Cipher.ENCRYPT_MODE, k);
+		return c;
+	}
+
+	public Cipher createDecryptionCipher() throws GeneralSecurityException {
+		Key k = loadKey();
+		Cipher c = Cipher.getInstance(k.getAlgorithm());
+		c.init(Cipher.DECRYPT_MODE, k);
+		return c;
+	}
+
+	private Key loadKey() throws GeneralSecurityException {
+		ObjectInputStream ois = null;
+        try {
+            KeySpec spec = getKeySpec();
+            String algorithm = getDefaultKeyAlgorithm();
+
+            if( spec instanceof SecretKeySpec )
+            {
+                SecretKeySpec secretSpec = (SecretKeySpec)spec;
+
+                // use the algorithm specified in the SecretKeySpec
+                algorithm = secretSpec.getAlgorithm();
+
+                if( SECRET_KEY_ALGORITHM_DESEDE.equals( algorithm ) )
+                    spec = new DESedeKeySpec( secretSpec.getEncoded() );
+                else if( SECRET_KEY_ALGORITHM_DES.equals( algorithm ) )
+                    spec = new DESKeySpec( secretSpec.getEncoded() );
+                // else, use the KeySpec instance as is
+            }
+
+            SecretKeyFactory factory = SecretKeyFactory.getInstance( algorithm );
+            return factory.generateSecret( spec );
+        }
+		finally {
+			if (ois != null) {
+				try {
+					ois.close();
+				}
+				catch (IOException e) {
+				}
+			}
+		}
+	}
+    
+    /**
+     * Returns the default secret-key algorithm to be used by this default implementation.
+     * @return the standard name of a secret-key algorithm
+     * @since DTP 1.9.2
+     */
+    protected String getDefaultKeyAlgorithm()
+    {
+        return SECRET_KEY_ALGORITHM_DESEDE;
+    }
+    
+    /**
+     * Returns a {@link KeySpec} for generating an encryption {@link Key}
+     * for the encyrption and decryption of a target.
+     * @return  a {@link KeySpec}
+     * @throws GeneralSecurityException
+     * @since DTP 1.9.2
+     */
+    protected KeySpec getKeySpec()  
+        throws GeneralSecurityException
+    {
+        URL url = getKeyResource();
+        if (url == null)
+            throw new KeyStoreException();     // key resource is not available
+
+        ObjectInputStream ois;
+        try
+        {
+            ois = new ObjectInputStream( url.openStream() );
+            Object readObject = ois.readObject();
+            if( readObject instanceof KeySpec )
+                return (KeySpec)readObject;
+            throw new InvalidKeySpecException();
+        }
+        catch (IOException e) {
+            throw new InvalidKeySpecException( e );
+        }
+        catch (ClassNotFoundException e) {
+            throw new InvalidKeySpecException( e );
+        }
+    }
+
+    /**
+     * Returns the {@link URL} of a resource that contains a {@link KeySpec} object.
+     * @return  the resource URL that contains a {@link KeySpec} object
+     * @since DTP 1.9.2
+     */
+    protected URL getKeyResource()
+    {
+        return ConnectivityPlugin.getResource( 
+                "org/eclipse/datatools/connectivity/internal/security/cpkey"); //$NON-NLS-1$
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/security/ICipherProvider.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/security/ICipherProvider.java
new file mode 100644
index 0000000..948e159
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/security/ICipherProvider.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2011 Sybase, Inc. and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    rcernich - initial API and implementation
+ *    Actuate Corporation - re-factored to support the cipherProvider extension point [BZ 358686]
+ *
+ *******************************************************************************/ 
+package org.eclipse.datatools.connectivity.internal.security;
+
+/**
+ * Internal interface for accessing functionality provided by security extensions.
+ * <br>
+ * The original internal interface here has been moved to the 
+ * org.eclipse.datatools.connectivity.security package as a public API.
+ * This now extends from it instead, for backward compatibility. 
+ * @deprecated  since 1.2.4 (DTP 1.9.2); 
+ *              replaced by {@link  org.eclipse.datatools.connectivity.security.ICipherProvider}
+ */
+public interface ICipherProvider extends
+        org.eclipse.datatools.connectivity.security.ICipherProvider
+{
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/security/SecurityManager.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/security/SecurityManager.java
new file mode 100644
index 0000000..8ac4765
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/security/SecurityManager.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2011 Sybase, Inc. and others
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: rcernich - initial API and implementation
+ *    Actuate Corporation - added the cipherProvider extension point [BZ 358686]
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.security;
+
+import java.io.File;
+
+/**
+ * This class is intended manage security extensions used by the connection
+ * profile framework.
+ * 
+ * Initially, only a non-configurable default encryption provider will be
+ * implemented.
+ * 
+ * @author rcernich
+ * 
+ * Created on Dec 19, 2005
+ */
+public class SecurityManager {
+
+	private static SecurityManager sInstance;
+
+	@SuppressWarnings("deprecation")
+    private ICipherProvider mDefaultCipherProvider;
+
+	public static SecurityManager getInstance() {
+		if (sInstance == null) {
+			sInstance = new SecurityManager();
+		}
+		return sInstance;
+	}
+
+	private SecurityManager() {
+		super();
+		mDefaultCipherProvider = new DefaultCipherProvider();
+	}
+
+	@SuppressWarnings("deprecation")
+    public ICipherProvider getDefaultCipherProvider() {
+		return mDefaultCipherProvider;
+	}
+    
+	/**
+	 * Returns the cipher provider instance registered for the file extension 
+	 * of the specified file.
+	 * The default cipher provider is returned if no custom cipher provider is registered 
+	 * for the file extension.
+	 * @param profileStoreFile     the abstract representation of a connection profile store file
+     * @return  an instance of {@link org.eclipse.datatools.connectivity.security.ICipherProvider}  
+     *          that provides cipher instances for the specified file's type
+	 * @since 1.2.4 (DTP 1.9.2)
+	 */
+    public org.eclipse.datatools.connectivity.security.ICipherProvider getCipherProvider( File profileStoreFile ) {
+        org.eclipse.datatools.connectivity.security.ICipherProvider provider = 
+                CipherProviderExtensions.getCipherProviderForFile( profileStoreFile );
+        if( provider == null )
+            provider = getDefaultCipherProvider();
+        return provider;
+    }
+
+    /**
+     * Returns the cipher provider instance registered for the specified file extension. 
+     * The default cipher provider is returned if no custom cipher provider is registered 
+     * for the file extension.
+     * @param fileExtension    the file extension for which a cipher provider is registered
+     * @return  an instance of {@link org.eclipse.datatools.connectivity.security.ICipherProvider}  
+     *          that provides cipher instances for the specified file extension
+     * @since 1.2.4 (DTP 1.9.2)
+     */
+    public org.eclipse.datatools.connectivity.security.ICipherProvider getCipherProviderForFileExtension( 
+            String fileExtension ) {
+        org.eclipse.datatools.connectivity.security.ICipherProvider provider = 
+                CipherProviderExtensions.getCipherProviderForFileExtension( fileExtension );
+        if( provider == null )
+            provider = getDefaultCipherProvider();
+        return provider;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/security/cpkey b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/security/cpkey
new file mode 100644
index 0000000..13acab3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/security/cpkey
Binary files differ
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/services/BundleResourceLocator.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/services/BundleResourceLocator.java
new file mode 100644
index 0000000..3328a9f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/services/BundleResourceLocator.java
@@ -0,0 +1,103 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.internal.services;
+
+import java.io.IOException;
+import java.net.URL;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+import org.osgi.framework.Bundle;
+
+/**
+ *  Internal implementation that uses Eclipse OSGi bundle services to locate
+ *  bundle entries and resources running on OSGi platform.
+ *  @since 1.9
+ */
+class BundleResourceLocator extends ResourceLocatorDelegate
+{
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.internal.services.ResourceLocatorDelegate#findPluginEntry(java.lang.String, java.lang.String, java.lang.ClassLoader)
+     */
+    URL findPluginEntry( String pluginId, String path, ClassLoader cl )
+    {
+        Bundle bundle = Platform.getBundle( pluginId );
+        if( bundle == null )
+            return null;
+          
+        URL entryURL = bundle.getEntry( path );
+        if( entryURL == null )
+            return null;
+        try
+        {
+            return resolveURL( entryURL );
+        }
+        catch( IOException e )
+        {
+            ConnectivityPlugin.getDefault().log( e );
+        }        
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.internal.services.ResourceLocatorDelegate#findPluginResource(java.lang.String, java.lang.String, java.lang.ClassLoader)
+     */
+    URL findPluginResource( String pluginId, String name, ClassLoader cl )
+    {
+        Bundle bundle = Platform.getBundle( pluginId );
+        return bundle != null ? bundle.getResource( name ) : null;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.internal.services.ResourceLocatorDelegate#findResourceString(java.lang.String, java.lang.String)
+     */
+    String findResourceString( String pluginId, String value )
+    {
+        Bundle bundle = Platform.getBundle( pluginId );
+        return bundle != null ? Platform.getResourceString( bundle, value ) : null;
+    }
+ 
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.internal.services.ResourceLocatorDelegate#findPluginStateLocation(java.lang.String)
+     */
+    IPath findPluginStateLocation( String pluginId )
+    {
+        Bundle bundle = Platform.getBundle( pluginId );
+        if( bundle == null )
+            return null;
+          
+        IPath stateLocation = Platform.getStateLocation( bundle ); // get specified plugin's state location
+        return stateLocation;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.internal.services.ResourceLocatorDelegate#resolveURL(java.net.URL)
+     */
+    URL resolveURL( URL url ) throws IOException
+    {
+        return FileLocator.resolve( url );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.internal.services.ResourceLocatorDelegate#toFileURL(java.net.URL)
+     */
+    URL toFileURL( URL url ) throws IOException
+    {
+        return FileLocator.toFileURL( url );        
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/services/ClassLoaderResourceLocator.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/services/ClassLoaderResourceLocator.java
new file mode 100644
index 0000000..8224b8e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/services/ClassLoaderResourceLocator.java
@@ -0,0 +1,352 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.internal.services;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+
+
+/**
+ *  Internal implementation that uses class loader services to locate
+ *  entries and resources of plug-ins running on OSGi-less platform.
+ *  @since 1.9
+ */
+class ClassLoaderResourceLocator extends ResourceLocatorDelegate
+{
+    private static final String PLUGIN_VERSION_SEPARATOR = "_"; //$NON-NLS-1$
+    private static final String BUNDLE_MANIFEST_RELATIVE_PATH = "META-INF/MANIFEST.MF"; //$NON-NLS-1$
+    private static final String UPPER_RELATIVE_PATH = ".."; //$NON-NLS-1$
+    private static final String JAR_FILE_EXTENSION = ".jar"; //$NON-NLS-1$
+    private static final String RESOURCE_KEY_PREFIX = "%"; //$NON-NLS-1$
+    private static final String RESOURCE_KEY_DOUBLE_PREFIX = "%%"; //$NON-NLS-1$ 
+    
+    private static Map<ClassLoader,Map<String,URL>> sm_loadedPluginLocs = 
+        Collections.synchronizedMap(new HashMap<ClassLoader,Map<String,URL>>());
+    private static URL notLoadedURL = getNotLoadedURL();       
+    private static IPath datatoolsInstallPath;
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.internal.services.ResourceLocatorDelegate#findPluginEntry(java.lang.String, java.lang.String, java.lang.ClassLoader)
+     */
+    URL findPluginEntry( String pluginId, String path, ClassLoader cl )
+    {
+        return getLoadedPluginEntry( pluginId, path, cl );
+    }
+    
+    private static URL getLoadedPluginEntry( String pluginId, String path, ClassLoader cl )
+    {
+        if( cl == null )
+            cl = ClassLoaderResourceLocator.class.getClassLoader();
+
+        if( path.equals( PluginResourceLocatorImpl.PLUGIN_ROOT_PATH ) )    // looking for the root of a plug-in
+            return getLoadedPluginLoc( pluginId, cl );
+
+        if( path.endsWith( JAR_FILE_EXTENSION ) )   // looking for a jar file entry
+            return getLoadedJarEntry( pluginId, path, cl );
+        
+        return findLoadedResources( pluginId, path, cl );
+    }
+    
+    /**
+     * Return the URL of the root entry of the specified plug-in, using the 
+     * specified class loader.
+     * @param pluginId    unique identifier of a plug-in or bundle 
+     * @param cl    the class loader to be used to search
+     * @return  the root entry URL of the specified plug-in
+     */
+    private static URL getLoadedPluginLoc( String pluginId, ClassLoader cl )
+    {
+        // first check the cached Map to optimize repeated search for plugin location 
+        Map<String,URL> loaderPluginLocs = sm_loadedPluginLocs.get( cl );
+        if( loaderPluginLocs == null || loaderPluginLocs.get( pluginId ) == null )
+        {
+            // not in cached Map, perform the search
+            URL pluginLoc = findLoadedPluginLoc( pluginId, cl );
+            
+            if( loaderPluginLocs == null )
+            {
+                synchronized( ClassLoaderResourceLocator.class )
+                {
+                    // re-check the latest cached Map, which might have been updated since
+                    loaderPluginLocs = sm_loadedPluginLocs.get( cl );
+                    if( loaderPluginLocs == null )
+                    {
+                        loaderPluginLocs = Collections.synchronizedMap(new HashMap<String,URL>());
+                        sm_loadedPluginLocs.put( cl, loaderPluginLocs );
+                    }
+                }
+            }
+            loaderPluginLocs.put( pluginId, pluginLoc );
+        }
+        
+        URL cachedPluginLoc = loaderPluginLocs.get( pluginId );
+        return notLoadedURL.equals( cachedPluginLoc ) ? null : cachedPluginLoc;
+    }
+    
+    private static URL findLoadedPluginLoc( String pluginId, ClassLoader cl )
+    {
+        // search for the plugin manifest file, which should always exist 
+        // at one level below the plugin path
+        URL manifestURL = getLoadedPluginEntry( pluginId, BUNDLE_MANIFEST_RELATIVE_PATH, cl );
+        if( manifestURL == null )
+            return notLoadedURL;
+        
+        try
+        {
+            return new URL( manifestURL, UPPER_RELATIVE_PATH );
+        }
+        catch( MalformedURLException ex )
+        {
+            ConnectivityPlugin.getDefault().logWarning( ex.getMessage() );
+        }
+        return notLoadedURL;
+    }
+    
+    private static URL findLoadedResources( String pluginId, String path, ClassLoader cl )
+    {
+        // looking for a resource entry, use the class loader to search
+        Enumeration<URL> foundURLs;
+        try
+        {
+            foundURLs = cl.getResources( path );
+        }
+        catch( IOException e )
+        {
+            ConnectivityPlugin.getDefault().log( e );
+            return null;
+        }
+        
+        // locate the entries that are found in the specified plug-in
+        ArrayList<URL> matchingEntries = new ArrayList<URL>(2);
+        String pluginNameFragment = pluginId + PLUGIN_VERSION_SEPARATOR;
+        while( foundURLs.hasMoreElements() )
+        {
+            URL resourceURL = foundURLs.nextElement();
+            if( resourceURL.getPath().contains( pluginNameFragment ) )
+                matchingEntries.add( resourceURL );
+        }
+
+        if( matchingEntries.isEmpty() )
+            return null;        
+        if( matchingEntries.size() == 1 )
+            return matchingEntries.get(0);
+        
+        // multiple entries matching the specified path are found
+        
+        // filter to include only those entries, if any, found under the same parent path as this
+        if( ! pluginId.equals( ConnectivityPlugin.PLUGIN_ID ) )
+        {
+            ArrayList<URL> installPathEntries = new ArrayList<URL>(matchingEntries.size());
+            String installPath = getDatatoolsInstallPath( cl ).toString();
+            for( URL entry : matchingEntries )
+            {
+                String entryFilePath = entry.getPath();
+                if( entryFilePath.contains( installPath ) )
+                    installPathEntries.add( entry );
+            }
+            if( installPathEntries.size() >= 1 )
+            {
+                if( installPathEntries.size() == 1 )
+                    return installPathEntries.get(0);
+                matchingEntries = installPathEntries; // include only these entries as candidates
+            }
+        }
+        
+        // return the entry at the upper-most level among the multiple entries found
+        URL upperLevelEntry = null;
+        int upperEntrySegments = 0;
+        for( URL entry : matchingEntries )
+        {
+            int entrySegments = (new Path(entry.getPath())).segmentCount();
+            if( upperLevelEntry == null || entrySegments < upperEntrySegments )
+            {
+                upperLevelEntry = entry;
+                upperEntrySegments = entrySegments;
+            }
+        }
+        return upperLevelEntry;
+    }
+    
+    private static IPath getDatatoolsInstallPath( ClassLoader cl )
+    {
+        if( datatoolsInstallPath == null )
+        {
+            IPath foundPath = getParentInstallPath( ConnectivityPlugin.PLUGIN_ID, 
+                                getLoadedPluginLoc( ConnectivityPlugin.PLUGIN_ID, cl ) );
+            synchronized( ClassLoaderResourceLocator.class )
+            {
+                datatoolsInstallPath = foundPath;
+            }
+        }
+        return datatoolsInstallPath;
+    }
+    
+    /* 
+     * Find and returns the parent path of the Connectivity plugin.
+     */
+    private static IPath getParentInstallPath( String pluginId, URL pluginLoc )
+    {
+        String pluginNameFragment = pluginId + PLUGIN_VERSION_SEPARATOR;
+        IPath pluginPath = PluginResourceLocatorImpl.adaptToPath( pluginLoc );
+        String[] pathSegments = pluginPath.segments();
+        for( int i=0; i < pathSegments.length; i++ )
+        {
+            if( pathSegments[i].startsWith( pluginNameFragment ) )
+            {
+                return pluginPath.uptoSegment( i ); // return up to the parent segment
+            }
+        }
+        return null;
+    }
+    
+    private static URL getLoadedJarEntry( String pluginId, String jarFilePath, ClassLoader cl )
+    {
+        URL pluginLoc = getLoadedPluginLoc( pluginId, cl );
+        if( pluginLoc == null ) // could not find specified plugin
+        {
+            // try find the jarFilePath resource entry directly
+            pluginLoc = findLoadedResources( pluginId, jarFilePath, cl );
+            if( pluginLoc == null )
+                return null;    // no jar entry available
+        }
+
+        // check if the plugin URL is the jarFilePath entry itself, 
+        // which contains an embedded manifest.mf file
+        IPath pluginPath = PluginResourceLocatorImpl.adaptToPath( pluginLoc );
+        if( pluginPath.lastSegment().equalsIgnoreCase( jarFilePath ))
+            return pluginLoc;
+
+        // check if the jarFilePath exists under the plugin root path
+        File jarFile = pluginPath.append( jarFilePath ).toFile();
+        if( ! jarFile.exists() )
+            return null;
+        
+        try
+        {
+            return jarFile.toURL();
+        }
+        catch( MalformedURLException e )
+        {
+            ConnectivityPlugin.getDefault().logInfo( e.getMessage() );
+        }
+        return null;
+    }
+    
+    private static URL getNotLoadedURL()
+    {
+        if( notLoadedURL == null )
+        {
+            synchronized( ClassLoaderResourceLocator.class )
+            {
+                try
+                {
+                    if( notLoadedURL == null )
+                        notLoadedURL = new URL( "file:/" ); //$NON-NLS-1$
+                }
+                catch( MalformedURLException e )
+                {}
+            }
+        }
+        return notLoadedURL;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.internal.services.ResourceLocatorDelegate#findPluginResource(java.lang.String, java.lang.String, java.lang.ClassLoader)
+     */
+    URL findPluginResource( String pluginId, String name, ClassLoader cl )
+    {
+        return getLoadedPluginEntry( pluginId, name, cl );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.internal.services.ResourceLocatorDelegate#findResourceString(java.lang.String, java.lang.String)
+     */
+    String findResourceString( String pluginId, String value )
+    {
+        // adopt similar implementation as org.eclipse.core.internal.runtime.ResourceTranslator, but
+        // without OSGi bundle service 
+        String s = value.trim();
+        if( !s.startsWith( RESOURCE_KEY_PREFIX, 0 ) )
+            return s;
+        if( s.startsWith( RESOURCE_KEY_DOUBLE_PREFIX, 0 ) )
+            return s.substring( 1 );
+
+        int idx = s.indexOf( ' ' );
+        String key = idx == -1 ? 
+                        s.substring( RESOURCE_KEY_PREFIX.length() ) : 
+                        s.substring( RESOURCE_KEY_PREFIX.length(), idx );
+        String defaultValue = idx == -1 ? s : s.substring( idx + 1 );
+
+        // find the plugin properties file, and read its content for the value of the specified key
+        URL pluginPropURL = findLoadedResources( pluginId, "plugin.properties",  //$NON-NLS-1$
+                                this.getClass().getClassLoader() );      
+        if( pluginPropURL == null )
+            return defaultValue;
+
+        Properties pluginProps = new Properties();
+        try
+        {
+            pluginProps.load( pluginPropURL.openStream() );
+        }
+        catch( IOException e )
+        {
+            // log and ignore
+            ConnectivityPlugin.getDefault().logInfo( e.getMessage() );
+            return defaultValue;
+        }
+
+        return pluginProps.getProperty( key, defaultValue );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.internal.services.ResourceLocatorDelegate#findPluginStateLocation(java.lang.String)
+     */
+    IPath findPluginStateLocation( String pluginId )
+    {
+        // get location from configurable variable specified by consumer application
+        return PluginResourceLocatorImpl.getConfigurableWorkspacePath( pluginId );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.internal.services.ResourceLocatorDelegate#resolveURL(java.net.URL)
+     */
+    URL resolveURL( URL url ) throws IOException
+    {
+        // return the original URL as-is
+        return url;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.internal.services.ResourceLocatorDelegate#toFileURL(java.net.URL)
+     */
+    URL toFileURL( URL url ) throws IOException
+    {
+        // return the original URL as-is
+        return url;
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/services/PluginResourceLocatorImpl.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/services/PluginResourceLocatorImpl.java
new file mode 100644
index 0000000..d18b439
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/services/PluginResourceLocatorImpl.java
@@ -0,0 +1,307 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2011, 2012 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation (Bugzilla 338997)
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.internal.services;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+
+/**
+ *  Internal implementation class of the
+ *  {@link org.eclipse.datatools.connectivity.services.PluginResourceLocator}
+ *  to locate plug-in entries and resources.
+ *  <br>It delegates to the appropriate service to locate entries and resources,
+ *  depending on whether this is running on the Eclipse OSGi or OSGi-less platform.
+ *  @since 1.9
+ */
+public class PluginResourceLocatorImpl
+{
+    static final String PLUGIN_ROOT_PATH = "/"; //$NON-NLS-1$
+    private static final String WORKSPACE_PATH_SUFFIX = "_workspacepath"; //$NON-NLS-1$
+    private static final String DATATOOLS_NAMESPACE = "org.eclipse.datatools"; //$NON-NLS-1$
+    
+    private static ResourceLocatorDelegate sm_delegate;
+
+    private static ResourceLocatorDelegate getDelegate()
+    {
+        if( sm_delegate == null )
+        {
+            // first try use OSGi platform bundle service, if available
+            ResourceLocatorDelegate delegate = ConnectivityPlugin.isRunningOSGiPlatform() ? 
+                            new BundleResourceLocator() :
+                            new ClassLoaderResourceLocator();
+
+            synchronized( PluginResourceLocatorImpl.class )
+            {
+                if( sm_delegate == null )
+                    sm_delegate = delegate;
+            }
+        }
+        return sm_delegate;
+    }
+    
+    /**
+     * Implementation of
+     * {@link org.eclipse.datatools.connectivity.services.PluginResourceLocator#getPluginRootPath(IConfigurationElement)}
+     */
+    public static IPath getPluginRootPath( IConfigurationElement configElement )
+    {
+        return adaptToPath( getPluginEntry( configElement, PLUGIN_ROOT_PATH ) );
+    }
+
+    /**
+     * Implementation of
+     * {@link org.eclipse.datatools.connectivity.services.PluginResourceLocator#getPluginRootPath(String)}
+     */
+    public static IPath getPluginRootPath( String pluginId )
+    {
+        return adaptToPath( getPluginEntry( pluginId, PLUGIN_ROOT_PATH, null ) );
+    }
+    
+    /**
+     * Implementation of
+     * {@link org.eclipse.datatools.connectivity.services.PluginResourceLocator#getPluginEntryPath(String, String)}
+     */
+    public static IPath getPluginEntryPath( String pluginId, String path )
+    {
+        return adaptToPath( getPluginEntry( pluginId, path, null ) );
+    }
+
+    /**
+     * Implementation of
+     * {@link org.eclipse.datatools.connectivity.services.PluginResourceLocator#getPluginEntry(IConfigurationElement, String)}
+     */
+    public static URL getPluginEntry( IConfigurationElement configElement, String path )
+    {
+        String bundleName = configElement.getContributor().getName();
+        return getPluginEntry( bundleName, path, configElement.getClass().getClassLoader() );
+    }
+    
+    /**
+     * Returns a URL to the entry at the specified path in the plug-in
+     * from the specified class loader.
+     * @param pluginId    unique identifier of a plug-in or bundle
+     * @param path  the path name of the entry
+     * @param cl    the class loader to search for the specified entry when
+     *              the OSGi platform bundle service is not available; 
+     *              may be null to use this class' loader. 
+     * @return  A URL to the entry, or null if no entry could be found 
+     */
+    public static URL getPluginEntry( String pluginId, String path, ClassLoader cl )
+    {
+        return getDelegate().findPluginEntry( pluginId, path, cl );
+    }
+    
+    /**
+     * Returns the specified resource in the plugin from the specified class loader. 
+     * @param pluginId  unique identifier of a plug-in or bundle 
+     * @param name  The name of the resource. See {@link ClassLoader#getResource(String)} 
+     *              for a description of the format of a resource name.
+     * @param cl    the class loader to search for the specified resource when
+     *              the OSGi platform bundle service is not available; 
+     *              may be null to use this class' loader. 
+     * @return  A URL to the named resource, or null if the resource could not be found 
+     */
+    public static URL getPluginResource( String pluginId, String name, ClassLoader cl )
+    {
+        return getDelegate().findPluginResource( pluginId, name, cl );
+    }
+    
+    static IPath adaptToPath( URL pluginRoot )
+    {
+        if( pluginRoot == null ) 
+            return null;
+        
+        try
+        {
+            pluginRoot = resolve( pluginRoot );
+
+            String path = pluginRoot.getPath();
+            if( path.endsWith("!/") )  //$NON-NLS-1$
+            {
+                path = path.substring(0, path.length() - 2);
+                pluginRoot = new URL( path );
+            }
+
+            pluginRoot = toFileURL( pluginRoot );
+        }
+        catch( IOException ex )
+        {
+            // log and ignore
+            ConnectivityPlugin.getDefault().logWarning( 
+                    ConnectivityPlugin.getDefault().getResourceString( 
+                            "PluginResourceLocator.invalidURL", //$NON-NLS-1$
+                            new Object[]{ pluginRoot, ex.getMessage() }));
+        }
+
+        return new Path( pluginRoot.getFile() ).removeTrailingSeparator();
+    }
+
+    /**
+     * Implementation of
+     * {@link org.eclipse.datatools.connectivity.services.PluginResourceLocator#getPluginStateLocation(String)}.
+     * @see {@link #getConfigurableWorkspaceLocation(String)}
+     */
+    public static IPath getPluginStateLocation( String pluginId )
+    {
+        return getDelegate().findPluginStateLocation( pluginId );
+    }
+    
+    static IPath getConfigurableWorkspacePath( String pluginId )
+    {
+        URL wsURL = getConfigurableWorkspaceLocation( pluginId );
+        return wsURL != null ? new Path( wsURL.getPath() ).removeTrailingSeparator() : null;
+    }
+    
+    /**
+     * Implementation of
+     * {@link org.eclipse.datatools.connectivity.services.PluginResourceLocator#getConfigurableWorkspaceLocation(String)}
+     */
+    public static URL getConfigurableWorkspaceLocation( String pluginId )
+    {
+        String wsLocKey = pluginId + WORKSPACE_PATH_SUFFIX;
+        String value = null;
+        try
+        {
+            // first check if the key is set in system property
+            value = System.getProperty( wsLocKey );
+        }
+        catch( SecurityException  ex )
+        {
+            // log  and ignore
+            ConnectivityPlugin.getDefault().logInfo( ex.getMessage() );
+        }
+
+        // if the system property value is not set, then try the key in an environment variable name
+        if( value == null )
+        {
+            value = System.getenv( wsLocKey );
+            
+            // if no system property or environment variable defined for specified pluginId
+            if( value == null )
+            {
+                if( pluginId.equals( DATATOOLS_NAMESPACE ) )
+                    return null;
+
+                // try get the shared parent workspace location
+                URL parentWsLoc = getConfigurableWorkspaceLocation( DATATOOLS_NAMESPACE );
+                if( parentWsLoc == null )
+                    return null;    // no workspace path defined for specified pluginId
+
+                // verify the parent workspace location is an existing folder
+                if( ! isExistingFolder( parentWsLoc ) )
+                {
+                    ConnectivityPlugin.getDefault().logWarning( 
+                            "PluginResourceLocatorImpl#getConfigurableWorkspaceLocation(String): Invalid parent workspace path (" +   //$NON-NLS-1$
+                            parentWsLoc.getPath() +
+                            "); must specify an existing directory for the " +  //$NON-NLS-1$
+                            DATATOOLS_NAMESPACE + " workspace path." ); //$NON-NLS-1$
+                    return null;
+                }
+
+                // append specified pluginId to the parent workspace location
+                IPath parentWsPath = new Path( parentWsLoc.getPath() );
+                value = parentWsPath.append( pluginId ).toString();
+            }
+        }
+        
+        // handles relative path to the plug-in installation folder
+        if( ! new File( value ).isAbsolute() )
+        {
+            IPath pluginLoc = getPluginRootPath( pluginId );
+            if( pluginLoc != null )
+                value = pluginLoc.append( value ).toString();
+        }
+
+        return convertToURL( value );
+    }
+
+    private static URL convertToURL( String absoluteDirPath )
+    {
+        File workspaceFolder = new File( absoluteDirPath );
+        if( ! workspaceFolder.isAbsolute() ) // ok if directory does not already exist
+        {
+            ConnectivityPlugin.getDefault().logWarning( 
+                    "PluginResourceLocatorImpl#convertToURL(String): Unable to use the workspace location (" +   //$NON-NLS-1$
+                    absoluteDirPath +
+                    "); must specify an absolute path for the workspace." ); //$NON-NLS-1$
+            return null;
+        }
+
+        // BZ 363422 - use File#toURI() to encode any special characters, such as a space, 
+        // embedded in a workspace folder name
+        try
+        {
+            return workspaceFolder.toURI().toURL();
+        }
+        catch( Exception ex )
+        {
+            ConnectivityPlugin.getDefault().logWarning( 
+                    "PluginResourceLocatorImpl#convertToURL(String): Unable to encode and convert workspace location (" +   //$NON-NLS-1$
+                    absoluteDirPath +
+                    ") to an URL;\n Exception message: " + ex.getMessage() ); //$NON-NLS-1$
+        }
+        return null;        
+    }
+    
+    private static boolean isExistingFolder( URL workspaceLoc )
+    {
+        try
+        {
+            File wsFolder = new File( workspaceLoc.toURI() );
+            return wsFolder.isDirectory();        
+        }
+        catch( Exception ex )
+        {
+        }
+        return false;
+    }
+
+    /**
+     * Implementation of
+     * {@link org.eclipse.datatools.connectivity.services.PluginResourceLocator#getResourceString(String, String)}.
+     */
+    public static String getResourceString( String pluginId, String value )
+    {
+        String resourceString = getDelegate().findResourceString( pluginId, value );
+        return resourceString != null ? resourceString :
+                Platform.getResourceString( null, value );    // return the default value
+    }
+
+    /**
+     * Implementation of
+     * {@link org.eclipse.datatools.connectivity.services.PluginResourceLocator#resolve(URL)}.
+     */
+    public static URL resolve( URL url ) throws IOException
+    {
+        return getDelegate().resolveURL( url );
+    }
+    
+    /**
+     * Implementation of
+     * {@link org.eclipse.datatools.connectivity.services.PluginResourceLocator#toFileURL(URL)}.
+     */
+    public static URL toFileURL( URL url ) throws IOException 
+    {
+        return getDelegate().toFileURL( url );
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/services/ResourceLocatorDelegate.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/services/ResourceLocatorDelegate.java
new file mode 100644
index 0000000..8fdbda9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/internal/services/ResourceLocatorDelegate.java
@@ -0,0 +1,95 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.internal.services;
+
+import java.io.IOException;
+import java.net.URL;
+
+import org.eclipse.core.runtime.IPath;
+
+/**
+ *  Internal abstract base class for implementation delegated 
+ *  by {@link PluginResourceLocatorImpl} to locate plug-in entries and resources.
+ *  @since 1.9
+ */
+abstract class ResourceLocatorDelegate
+{
+    /**
+     * Find the entry at the specified path in the plug-in
+     * from the specified class loader.
+     * @param pluginId    unique identifier of a plug-in or bundle
+     * @param path  the path name of the entry
+     * @param cl    the class loader to search for the specified entry when
+     *              the OSGi platform bundle service is not available; 
+     *              may be null to use this class' loader. 
+     * @return  A URL to the entry, or null if no entry could be found 
+     */
+    abstract URL findPluginEntry( String pluginId, String path, ClassLoader cl );
+    
+    /**
+     * Find the specified resource in the plugin from the specified class loader. 
+     * @param pluginId  unique identifier of a plug-in or bundle 
+     * @param name  The name of the resource. See {@link ClassLoader#getResource(String)} 
+     *              for a description of the format of a resource name.
+     * @param cl    the class loader to search for the specified resource when
+     *              the OSGi platform bundle service is not available; 
+     *              may be null to use this class' loader. 
+     * @return  A URL to the named resource, or null if the resource could not be found 
+     */
+    abstract URL findPluginResource( String pluginId, String name, ClassLoader cl );
+    
+    /**
+     * Find the location in the local file system of the plug-in state area 
+     * for the specified plug-in. 
+     * <br>The platform-defined state location is returned, if available.
+     * Otherwise, returns the configurable workspace location of the specified plug-in. 
+     * @param pluginId the unique, symbolic name of a plug-in or bundle
+     * @return  A URL to the location path of the state area for the specified plug-in,
+     *          or null if none is available
+     */
+    abstract IPath findPluginStateLocation( String pluginId );
+    
+    /**
+     * Find the resource string corresponding to the given argument value. 
+     * @param pluginId    unique identifier of a plug-in or bundle
+     *           whose resource bundle is being queried
+     * @param value the value to look for
+     * @return  the resource string
+     */
+    abstract String findResourceString( String pluginId, String value );
+    
+    /**
+     * Converts a URL that uses a client-defined protocol into 
+     * a URL that uses a protocol which is native to the Java class library (file, jar, http, etc). 
+     * @param url   the original URL
+     * @return  the resolved URL or the original if the protocol is unknown to the converter
+     * @throws IOException  if unable to resolve URL, or if an error occurs during the resolution
+     */
+    abstract URL resolveURL( URL url ) throws IOException;
+    
+    /**
+     * Converts a URL that uses a user-defined protocol into a URL that uses the file
+     * protocol. 
+     * <p>
+     * If the protocol for the given URL is not recognized by this converter, the original
+     * URL is returned as-is.
+     * @param url   the original URL
+     * @return the converted file URL or the original URL passed in if it is 
+     *          not recognized by this converter
+     * @throws IOException if an error occurs during the conversion
+     */
+    abstract URL toFileURL( URL url ) throws IOException;        
+
+}
diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/security/CipherProviderBase.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/security/CipherProviderBase.java
new file mode 100644
index 0000000..6f28eba
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/security/CipherProviderBase.java
@@ -0,0 +1,70 @@
+/*

+ *************************************************************************

+ * Copyright (c) 2011 Actuate Corporation and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *  Actuate Corporation - initial API and implementation

+ *  

+ *************************************************************************

+ */

+

+package org.eclipse.datatools.connectivity.security;

+

+import java.net.URL;

+import java.security.GeneralSecurityException;

+import java.security.spec.KeySpec;

+

+import org.eclipse.datatools.connectivity.internal.security.DefaultCipherProvider;

+

+/**

+ * [Provisional]<br>

+ * A base class implementation of the {@link ICipherProvider} interface.

+ * It reads a secret (symmetric) key specification ({@link KeySpec})

+ * from a bundled resource.

+ * A custom ICipherProvider class implementation may optionally extend from this, 

+ * to provide own instance of KeySpec.  

+ * @since 1.2.4 (DTP 1.9.2)

+ */

+public class CipherProviderBase extends DefaultCipherProvider implements

+        ICipherProvider

+{

+    public CipherProviderBase()

+    {

+        super();

+    }

+

+    /* (non-Javadoc)

+     * @see org.eclipse.datatools.connectivity.internal.security.DefaultCipherProvider#getKeySpec()

+     */

+    @Override

+    protected KeySpec getKeySpec() throws GeneralSecurityException

+    {

+        // sub-class may override

+        return super.getKeySpec();

+    }

+

+    /* (non-Javadoc)

+     * @see org.eclipse.datatools.connectivity.internal.security.DefaultCipherProvider#getKeyResource()

+     */

+    @Override

+    protected URL getKeyResource()

+    {

+        // sub-class may override

+        return super.getKeyResource();

+    }

+

+    /* (non-Javadoc)

+     * @see org.eclipse.datatools.connectivity.internal.security.DefaultCipherProvider#getDefaultKeyAlgorithm()

+     */

+    @Override

+    protected String getDefaultKeyAlgorithm()

+    {

+        // sub-class may override

+        return super.getDefaultKeyAlgorithm();

+    }

+

+}

diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/security/ICipherProvider.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/security/ICipherProvider.java
new file mode 100644
index 0000000..9016b96
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/security/ICipherProvider.java
@@ -0,0 +1,41 @@
+/*******************************************************************************

+ * Copyright (c) 2005, 2011 Sybase, Inc. and others.

+ *

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *    rcernich - initial API and implementation

+ *    Actuate Corporation - added the cipherProvider extension point [BZ 358686]

+ *    

+ *******************************************************************************/ 

+package org.eclipse.datatools.connectivity.security;

+

+import java.security.GeneralSecurityException;

+

+import javax.crypto.Cipher;

+

+

+/**

+ * [Provisional]<br>

+ * Interface for accessing functionality provided by security extensions.

+ * 

+ * @author rcernich

+ *

+ * @since 1.2.4 (DTP 1.9.2)

+ */

+public interface ICipherProvider {

+    

+    /**

+     * @return a Cipher object for encryption

+     */

+    public Cipher createEncryptionCipher() throws GeneralSecurityException;

+    

+    /**

+     * @return a Cipher object for decryption

+     */

+    public Cipher createDecryptionCipher() throws GeneralSecurityException;

+

+}

diff --git a/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/services/PluginResourceLocator.java b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/services/PluginResourceLocator.java
new file mode 100644
index 0000000..945ed81
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity/src/org/eclipse/datatools/connectivity/services/PluginResourceLocator.java
@@ -0,0 +1,175 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.services;
+
+import java.io.IOException;
+import java.net.URL;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.datatools.connectivity.internal.services.PluginResourceLocatorImpl;
+
+/**
+ *  Locator of plug-in entries and resources.
+ *  It supports locating entries and service resources in 
+ *  both Eclipse OSGi and OSGi-less platforms.
+ *  @since 1.9
+ */
+public class PluginResourceLocator
+{
+    
+    /**
+     * Returns a IPath to the root entry of the plugin-in 
+     * that contributes the specified configuration element.
+     * @param configElement configuration element 
+     * @return  A IPath to the plug-in root entry, or null if not found
+     */
+    public static IPath getPluginRootPath( IConfigurationElement configElement )
+    {
+        return PluginResourceLocatorImpl.getPluginRootPath( configElement );
+    }
+
+    /**
+     * Returns a IPath to the root entry of the specified plug-in.
+     * @param pluginId    unique identifier of a plug-in or bundle
+     * @return  A IPath to the plug-in root entry, or null if not found
+     */
+    public static IPath getPluginRootPath( String pluginId )
+    {
+        return PluginResourceLocatorImpl.getPluginRootPath( pluginId );
+    }
+    
+    /**
+     * Returns a IPath to the entry at the specified path in the specified plug-in.
+     * @param pluginId    unique identifier of a plug-in or bundle
+     * @param path  the path name of the entry
+     * @return  A IPath to the entry, or null if no entry could be found
+     */
+    public static IPath getPluginEntryPath( String pluginId, String path )
+    {
+        return PluginResourceLocatorImpl.getPluginEntryPath( pluginId, path );
+    }
+
+    /**
+     * Returns a URL to the entry at the specified path in the plugin-in 
+     * that contributes the specified configuration element.
+     * @param configElement configuration element 
+     * @param path  the path name of the entry
+     * @return  A URL to the entry, or null if no entry could be found
+     */
+    public static URL getPluginEntry( IConfigurationElement configElement, String path )
+    {
+        return PluginResourceLocatorImpl.getPluginEntry( configElement, path );
+    }
+    
+    /**
+     * Returns a URL to the entry at the specified path in the specified plug-in.
+     * @param pluginId    unique identifier of a plug-in or bundle
+     * @param path  the path name of the entry
+     * @return  A URL to the entry, or null if no entry could be found 
+     */
+    public static URL getPluginEntry( String pluginId, String path )
+    {
+        return PluginResourceLocatorImpl.getPluginEntry( pluginId, path, null );
+    }
+
+    /**
+     * Returns a URL to the specified resource in the specified plug-in. 
+     * @param pluginId    unique identifier of a plug-in or bundle
+     * @param name The name of the resource. See {@link ClassLoader#getResource(String)} 
+     *              for a description of the format of a resource name.
+     * @return A URL to the named resource, or null if the resource could not be found
+     * @since 1.2.4 (DTP 1.9.2)
+     */
+    public static URL getResource( String pluginId, String name )
+    {
+        return PluginResourceLocatorImpl.getPluginResource( pluginId, name, null );
+    }
+    
+    /**
+     * Returns the location in the local file system of the plug-in state area 
+     * for the specified plug-in. 
+     * <br>The platform-defined state location is returned, if available.
+     * Otherwise, returns the configurable workspace location of the specified plug-in. 
+     * @param pluginId the unique, symbolic name of a plug-in or bundle
+     * @return  A URL to the location path of the state area for the specified plug-in,
+     *          or null if none is available
+     * @see {@link #getConfigurableWorkspaceLocation(String)}
+     */
+    public static IPath getPluginStateLocation( String pluginId )
+    {
+        return PluginResourceLocatorImpl.getPluginStateLocation( pluginId );
+    }
+    
+    /**
+     * Returns the user configurable workspace location of the specified plug-in. 
+     * It returns the value of the system property named "{pluginName}_workspacepath" 
+     * if set, or the value of the environment variable under the same name.
+     * <br>If no workspace path is specifically defined for the plug-in, 
+     * return the path named with the plug-in namespace,
+     * under a shared, parent workspace path.
+     * The parent workspace path is the value of the system property 
+     * named "org.eclipse.datatools_workspacepath" if set, or 
+     * the value of the environment variable under the same name.
+     * @param pluginId the unique, symbolic name of a plug-in or bundle
+     * @return A URL to the absolute workspace location of the specified plug-in, 
+     *          or null if no configurable workspace path is specified
+     */
+    public static URL getConfigurableWorkspaceLocation( String pluginId )
+    {
+        return PluginResourceLocatorImpl.getConfigurableWorkspaceLocation( pluginId );
+    }
+    
+    /**
+     * Converts a URL that uses a client-defined protocol into 
+     * a URL that uses a protocol which is native to the Java class library (file, jar, http, etc). 
+     * @param url   the original URL
+     * @return  the resolved URL or the original if the protocol is unknown to the converter
+     * @throws IOException  if unable to resolve URL, or if an error occurs during the resolution
+     */
+    public static URL resolve( URL url ) throws IOException
+    {
+        return PluginResourceLocatorImpl.resolve( url );
+    }
+    
+    /**
+     * Converts a URL that uses a user-defined protocol into a URL that uses the file
+     * protocol. 
+     * <p>
+     * If the protocol for the given URL is not recognized by this converter, the original
+     * URL is returned as-is.
+     * @param url   the original URL
+     * @return the converted file URL or the original URL passed in if it is 
+     *          not recognized by this converter
+     * @throws IOException if an error occurs during the conversion
+     */
+    public static URL toFileURL( URL url ) throws IOException 
+    {
+        return PluginResourceLocatorImpl.toFileURL( url );
+    }
+    
+    /**
+     * Returns a resource string corresponding to the given argument value. 
+     * @param pluginId    unique identifier of a plug-in or bundle
+     *           whose resource bundle is being queried
+     * @param value the value to look for
+     * @return  the resource string
+     */
+    public static String getResourceString( String pluginId, String value )
+    {
+        return PluginResourceLocatorImpl.getResourceString( pluginId, value );
+    }
+    
+}
diff --git a/plugins/org.eclipse.datatools.doc.isv/.classpath b/plugins/org.eclipse.datatools.doc.isv/.classpath
new file mode 100644
index 0000000..acad1c2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/.classpath
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.doc.isv/.gitignore b/plugins/org.eclipse.datatools.doc.isv/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/plugins/org.eclipse.datatools.doc.isv/.project b/plugins/org.eclipse.datatools.doc.isv/.project
new file mode 100644
index 0000000..705ac32
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.doc.isv</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.doc.isv/BuildDocISV.xml b/plugins/org.eclipse.datatools.doc.isv/BuildDocISV.xml
new file mode 100644
index 0000000..d0cab59
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/BuildDocISV.xml
@@ -0,0 +1,311 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<project name="create.doc.isv" default="Javadoc">
+	
+	<description>Create the API Javadoc of datatools project</description>
+	
+	<property name="bundle-name" value="org.eclipse.datatools.doc.isv"/>
+	<property name="src.dir" value="${buildDirectory}/plugins" />
+	<property name="bin.dir" value="@dot"/>
+	<property name="output.dir" value="./html/reference/api/"/>
+	<property name="schema.out.dir" value="./html/reference/extension-points/"/>
+	
+	<property file="build.properties"/>
+
+	
+	<path id="classpath">
+		<fileset dir="${baseLocation}/plugins">
+			<include name="**/*.jar"/>
+			<exclude name="*.source_*.jar"/>
+		</fileset>
+		<fileset dir="${src.dir}">
+			<include name="*.jar"/>
+			<exclude name="*doc*.jar"/>
+		</fileset>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.apache.derby/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.apache.derby.dbdefinition"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.apache.derby.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.console.profile/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.db.generic/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.db.generic.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.oda/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.oda.consumer/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.oda.design/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.oda.design.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.oda.flatfile/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.oda.flatfile.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.oda.profile/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.oda.template.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.sqm.core/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.sqm.core.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.sqm.server.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.ui.dse/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.ui.templates/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.finfo/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.hsqldb/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.hsqldb.dbdefinition"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.hsqldb.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.ibm.db2.iseries/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.ibm.db2.luw/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.ibm.db2.luw.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.ibm.db2.zseries/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.ibm.informix/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.ibm.informix.dbdefinition"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.ibm.informix.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.ibm.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.ingres/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.ingres.dbdefinition"/>
+        <pathelement path="${src.dir}/org.eclipse.datatools.enablement.ingres.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.jdt.classpath/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.msft.sqlserver/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.msft.sqlserver.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.mysql/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.mysql.dbdefinition"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.mysql.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.oda.ws/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.oda.ws.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.oda.xml/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.oda.xml.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.oracle/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.oracle.dbdefinition"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.oracle.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.postgresql/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.postgresql.dbdefinition"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.postgresql.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sap.maxdb/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sap.maxdb.dbdefinition"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sap.maxdb.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sqlite/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sqlite.dbdefinition"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sqlite.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sybase/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sybase.asa/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sybase.asa.dbdefinition"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sybase.asa.models/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples/${bin.dir}"/>                
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sybase.asa.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sybase.ase/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sybase.ase.dbdefinition"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sybase.ase.models/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sybase.ase.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sybase.models/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sybase.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.modelbase.dbdefinition/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.modelbase.derby/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.modelbase.sql/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.modelbase.sql.edit/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.modelbase.sql.query/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.modelbase.sql.query.edit/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.modelbase.sql.xml.query/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.common.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.data.core/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.data.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.db.derby/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.db.derby.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.db.generic/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.db.generic.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.ddlgen.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.debugger.core/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.debugger.core.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.editor.core/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.editor.core.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.parsers.sql/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.parsers.sql.lexer/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.parsers.sql.query/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.parsers.sql.xml.query/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.plan/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.result/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.result.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.routineeditor/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.routineeditor.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.schemaobjecteditor/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.schemaobjecteditor.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.sql/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.sqlbuilder/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.sqleditor/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.sqlscrapbook/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.sql.ui/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.tabledataeditor/${bin.dir}"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.help/${bin.dir}"/>
+	</path>
+	
+	<path id="path.fileset">
+
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity/src/"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.apache.derby/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.apache.derby/src"/>
+		
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.apache.derby/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.apache.derby.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.console.profile/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.db.generic/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.db.generic.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.oda/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.oda.consumer/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.oda.design/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.oda.design.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.oda.flatfile/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.oda.flatfile.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.oda.profile/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.oda.template.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.sqm.core/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.sqm.core.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.sqm.server.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.ui.dse/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.connectivity.ui.templates/src"/>
+
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.hsqldb/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.hsqldb.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.ibm.db2.iseries/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.ibm.db2.luw/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.ibm.db2.luw.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.ibm.db2.zseries/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.ibm.informix/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.ibm.informix.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.ibm.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.ingres/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.ingres.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.jdt.classpath/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.msft.sqlserver/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.msft.sqlserver.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.mysql/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.mysql.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.oda.ws/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.oda.ws.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.oda.xml/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.oda.xml.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.oracle/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.oracle.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.postgresql/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.postgresql.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sap.maxdb/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sap.maxdb.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sqlite/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sqlite.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sybase/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sybase.asa/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sybase.asa.models/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sybase.asa.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sybase.ase/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sybase.ase.models/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sybase.ase.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sybase.models/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.enablement.sybase.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.modelbase.derby/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.modelbase.sql/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.modelbase.sql.edit/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.modelbase.sql.query/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.modelbase.sql.query.edit/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.modelbase.sql.xml.query/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.common.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.data.core/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.data.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.db.derby/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.db.derby.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.db.generic/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.db.generic.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.ddlgen.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.debugger.core/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.debugger.core.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.editor.core/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.editor.core.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.parsers.sql/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.parsers.sql.lexer/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.parsers.sql.query/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.parsers.sql.xml.query/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.plan/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.result/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.result.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.routineeditor/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.routineeditor.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.schemaobjecteditor/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.schemaobjecteditor.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.sql/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.sqlbuilder/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.sqleditor/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.sqlscrapbook/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.sql.ui/src"/>
+		<pathelement path="${src.dir}/org.eclipse.datatools.sqltools.tabledataeditor/src"/>
+
+	</path>
+	
+	<target name="CreateSchemaReference">
+		
+		<property name="dest" value="html/reference/extension-points" />	
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.sqltools.result/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.connectivity.oda.profile/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.connectivity.sqm.core/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.sqltools.tabledataeditor/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.sqltools.routineeditor.ui/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.sqltools.parsers.sql.query/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.sqltools.sqlscrapbook/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.sqltools.data.ui/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.connectivity.ui/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.connectivity.oda.consumer/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.connectivity.sqm.core.ui/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.help/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.connectivity.oda.design.ui/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.sqltools.sql.ui/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.modelbase.sql/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.sqltools.editor.core/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.sqltools.result.ui/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.sqltools.sqleditor/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.sqltools.schemaobjecteditor.ui/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.sqltools.routineeditor/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.enablement.sybase/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.connectivity/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.connectivity.oda/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.enablement.sybase.ase/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.sqltools.editor.core.ui/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.sqltools.plan/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.sqltools.debugger.core/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.modelbase.sql.query/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.connectivity.sqm.server.ui/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.sqltools.data.core/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.enablement.oda.ecore.ui/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.sqltools.common.ui/plugin.xml" destination="${dest}" />
+		<pde.convertSchemaToHTML manifest="${src.dir}/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/plugin.xml" destination="${dest}" />
+	</target>
+
+	<!-- org.eclipse.datatools.* -->
+	<target name="Javadoc" depends="Clean,CreateSchemaReference">
+		<echo message="src dir: ${src.dir}"/>
+		<echo message="eclipse.home: ${eclipse.home}"/>
+		
+		<property file="connectivity.package.properties"/>
+		<property file="enablement.package.properties"/>
+		<property file="modelbase.package.properties"/>
+		<property file="sqltools.package.properties"/>
+		
+        <javadoc sourcepathref="path.fileset" access="public" author="true" destdir="./html/reference/api/" defaultexcludes="yes"
+		nodeprecated="false" nodeprecatedlist="false" noindex="false" nonavbar="false" 
+		notree="false" source="1.5" splitindex="false" use="true" version="true" useexternalfile="true" 
+		packagenames="${enablement.include.package.names},${connectivity.include.package.names},${modelbase.include.package.names},${sqltools.include.package.names}" 
+        excludepackagenames="${enablement.exclude.package.names},${connectivity.exclude.package.names},${modelbase.exclude.package.names},${sqltools.exclude.package.names}" >
+			<classpath refid="classpath"/>
+		</javadoc>
+    </target>
+	
+	<target name="Clean">
+		<delete dir="${output.dir}" failonerror="false"/>
+		<delete dir="${schema.out.dir}" failonerror="false"/>
+	</target>
+	
+</project>
+
diff --git a/plugins/org.eclipse.datatools.doc.isv/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.doc.isv/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..c8f17a9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/META-INF/MANIFEST.MF
@@ -0,0 +1,9 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Data Tools Documentation Plug-in
+Bundle-SymbolicName: org.eclipse.datatools.doc.isv; singleton:=true
+Bundle-Version: 1.14.1.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: Eclipse Data Tools Platform
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.help
diff --git a/plugins/org.eclipse.datatools.doc.isv/about.html b/plugins/org.eclipse.datatools.doc.isv/about.html
new file mode 100644
index 0000000..266c9b9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 9, 2008</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/plugins/org.eclipse.datatools.doc.isv/build.properties b/plugins/org.eclipse.datatools.doc.isv/build.properties
new file mode 100644
index 0000000..05f2a87
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/build.properties
@@ -0,0 +1,21 @@
+bin.includes = META-INF/,\
+               about.html,\
+               plugin.xml,\
+               tocreference.xml,\
+               toc.xml,\
+               dtp_help_helper_doc.xml,\
+               html/,\
+               projects/
+               
+customBuildCallbacks = customBuildCallbacks.xml
+
+                     
+                        
+
+                        
+                        
+                        
+                        
+                        
+                        
+                    
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/connectivity.package.properties b/plugins/org.eclipse.datatools.doc.isv/connectivity.package.properties
new file mode 100644
index 0000000..a8f3a93
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/connectivity.package.properties
@@ -0,0 +1,16 @@
+connectivity.include.package.names = org.eclipse.datatools.connectivity.*                    
+
+connectivity.exclude.package.names = org.eclipse.datatools.connectivity.**.internal.*,\
+                     	org.eclipse.datatools.connectivity.oda.**.impl*, \
+                        org.eclipse.datatools.connectivity.oda.**.nls*, \
+                        org.eclipse.datatools.connectivity.oda.consumer.helper, \
+                        org.eclipse.datatools.connectivity.oda.profile.provider*, \
+                        org.eclipse.datatools.connectivity.oda.template.ui*,\
+                        org.eclipse.datatools.connectivity.oda.flatfile*,\
+                        org.eclipse.datatools.connectivity.oda.design.ui.profile.db.wizards,\
+                        org.eclipse.datatools.connectivity.oda.profile.*                        
+                        
+                        
+                        
+                        
+                    
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/customBuildCallbacks.xml b/plugins/org.eclipse.datatools.doc.isv/customBuildCallbacks.xml
new file mode 100644
index 0000000..62cfd93
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/customBuildCallbacks.xml
@@ -0,0 +1,159 @@
+<!-- ===================================================================== -->
+<!-- Custom targets called from a project's generated build.xml            -->
+<!-- Set customBuildCallbacks=<path/to/this/file> in your build.properties.-->
+<!-- ===================================================================== -->
+<project name="Build specific targets and properties" default="noDefault">
+
+	<!-- ===================================================================== -->
+	<!-- Default target                                                        -->
+	<!-- ===================================================================== -->
+	<target name="noDefault">
+		<echo message="This file must be called with explicit targets" />
+	</target>
+	
+	<!-- ===================================================================== -->
+	<!-- Steps to do before the target build.jars                              -->
+	<!-- Available parameters :                                                -->
+	<!--   build.result.folder - folder to contain the build results           -->
+	<!-- ===================================================================== -->
+	<target name="pre.build.jars">
+		<ant antfile="BuildDocISV.xml" target="Javadoc"/>
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the target build.jars                               -->
+	<!-- Available parameters :                                                -->
+	<!--   build.result.folder - folder to contain the build results           -->
+	<!-- ===================================================================== -->
+	<target name="post.build.jars">	
+	</target>
+	
+	<!-- ===================================================================== -->
+	<!-- Steps to do before the target build.sources                           -->
+	<!-- Available parameters :                                                -->
+	<!--   build.result.folder - folder to contain the build results           -->
+	<!-- ===================================================================== -->
+	<target name="pre.build.sources">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the target build.sources                            -->
+	<!-- Available parameters :                                                -->
+	<!--   build.result.folder - folder to contain the build results           -->
+	<!-- ===================================================================== -->
+	<target name="post.build.sources">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before the compilation target <name>                      -->
+	<!-- Substitute "name" with the name of the compilation target, eg @dot    -->
+	<!-- Available parameters :                                                -->
+	<!--   source.foldern : n = 1 ... N, the source folders                    -->
+	<!--   target.folder  : where the results of the compilation go            -->
+	<!--   <name>.classpath : name = name of the compilation target. A         -->
+	<!--                      reference to the classpath structure.            -->
+	<!-- ===================================================================== -->
+	<target name="pre.name">
+	</target>
+
+	<target name="pre.@dot">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do during the compilation target <name>, after the compile   -->
+	<!-- but before jaring.  Substitute "name" with the name of the compilation-->
+	<!-- target, eg @dot                                                       -->
+	<!-- Available parameters :                                                -->
+	<!--   source.foldern : n = 1 ... N, the source folders                    -->
+	<!--   target.folder  : where the results of the compilation go            -->
+	<!--   <name>.classpath : name = name of the compilation target. A         -->
+	<!--                      reference to the classpath structure.            -->
+	<!-- ===================================================================== -->
+	<target name="post.compile.name">
+	</target>
+
+	<target name="post.compile.@dot">
+	</target>
+	
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the compilation target <name>                       -->
+	<!-- Substitute "name" with the name of the compilation target, eg @dot    -->
+	<!-- Available parameters :                                                -->
+	<!--   jar.location - the location of the compilation results              -->
+	<!--   <name>.classpath : name = name of the compilation target. A         -->
+	<!--                      reference to the classpath structure.            -->
+	<!-- ===================================================================== -->
+	<target name="post.name">
+	</target>
+
+	<target name="post.@dot">
+	</target>
+	
+	<!-- ===================================================================== -->
+	<!-- Steps to do before the target gather.bin.parts                         -->
+	<!-- Available parameters :                                                -->
+	<!--   build.result.folder - folder containing the build results           -->
+	<!--   target.folder - destination folder                                  -->
+	<!-- ===================================================================== -->
+	<target name="pre.gather.bin.parts">
+	</target>
+		
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the target gather.bin.parts                         -->
+	<!-- Available parameters :                                                -->
+	<!--   build.result.folder - folder containing the build results           -->
+	<!--   target.folder - destination folder                                  -->
+	<!-- ===================================================================== -->
+	<target name="post.gather.bin.parts">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before the target gather.sources                          -->
+	<!-- Available parameters :                                                -->
+	<!--   destination.temp.folder - destination folder                        -->
+	<!-- ===================================================================== -->
+	<target name="pre.gather.sources">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the target gather.sources                           -->
+	<!-- Available parameters :                                                -->
+	<!--   destination.temp.folder - destination folder                        -->
+	<!-- ===================================================================== -->
+	<target name="post.gather.sources">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before the target gather.logs                             -->
+	<!-- Available parameters :                                                -->
+	<!--   destination.temp.folder - destination folder                        -->
+	<!-- ===================================================================== -->
+	<target name="pre.gather.logs">        
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the target gather.logs                              -->
+	<!-- Available parameters :                                                -->
+	<!--   destination.temp.folder - destination folder                        -->
+	<!-- ===================================================================== -->
+	<target name="post.gather.logs">       
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before the target clean                                   -->
+	<!-- Available parameters :                                                -->
+	<!--   destination.temp.folder - destination folder                        -->
+	<!-- ===================================================================== -->
+	<target name="pre.clean">              
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the target clean                                    -->
+	<!-- Available parameters :                                                -->
+	<!--   plugin.destination - final destination of the build                 -->
+	<!--   build.result.folder - results of the compilation                    -->
+	<!--   temp.folder - temporary folder                                      -->
+	<!-- ===================================================================== -->
+	<target name="post.clean">             
+	</target>
+</project>
diff --git a/plugins/org.eclipse.datatools.doc.isv/dtp_help_helper_doc.xml b/plugins/org.eclipse.datatools.doc.isv/dtp_help_helper_doc.xml
new file mode 100644
index 0000000..c99aa85
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/dtp_help_helper_doc.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?NLS TYPE="org.eclipse.help.toc"?>
+	<toc label="Data Tools Platform Help-Helper Documentation"
+     topic="projects/dtp/dtp/en/source/c_overview_of_dtp_help_helper_plugin.html">
+   <topic label="Overview of DTP Help-Helper Plug-in"
+          href="projects/dtp/dtp/en/source/c_overview_of_dtp_help_helper_plugin.html"/>
+   <topic label="Introduction to Context-Sensitive Help"
+          href="projects/dtp/dtp/en/source/c_introduction_to_csh.html">
+      <topic label="Static vs. Dynamic Help Contexts"
+             href="projects/dtp/dtp/en/source/c_static_vs_dynamic_help_contexts.html"/>
+      <topic label="Dynamic Context-Sensitive Help"
+             href="projects/dtp/dtp/en/source/c_dynamic_csh.html"/>
+      <topic label="Help Context Abstraction"
+             href="projects/dtp/dtp/en/source/c_help_context_abstraction.html"/>
+   </topic>
+   <topic label="DTP Help-Helper"
+          href="projects/dtp/dtp/en/source/c_dtp_help_helper.html">
+      <topic label="Help Keys" href="projects/dtp/dtp/en/source/c_help_keys.html"/>
+      <topic label="Context Provider Delegate"
+             href="projects/dtp/dtp/en/source/c_context_provider_delegate.html"/>
+   </topic>
+   <topic label="Context-Sensitive Help UI Implementation"
+          href="projects/dtp/dtp/en/source/c_csh_ui_implementation.html">
+      <topic label="View Implementation Example"
+             href="projects/dtp/dtp/en/source/c_view_implementation_example.html"/>
+      <topic label="Dialog Implementation Example"
+             href="projects/dtp/dtp/en/source/c_dialog_implementation_example.html"/>
+      <topic label="helpKey Constants Interface Class"
+             href="projects/dtp/dtp/en/source/c_helpkey_constants_interface_class.html"/>
+   </topic>
+   <topic label="helpKey Properties Files"
+          href="projects/dtp/dtp/en/source/c_helpkey_properties_files.html">
+      <topic label="helpKey Properties File Names"
+             href="projects/dtp/dtp/en/source/c_helpkey_properties_file_names.html"/>
+   </topic>
+   <topic label="Context-Sensitive Help UA Plug-ins"
+          href="projects/dtp/dtp/en/source/c_csh_ua_plugins.html">
+      <topic label="Eclipse Context XML Files Extension"
+             href="projects/dtp/dtp/en/source/c_eclipse_context_xml_files_extension.html"/>
+      <topic label="helpKey Properties Files Extension"
+             href="projects/dtp/dtp/en/source/c_helpkey_properties_files_extension.html"/>
+      <topic label="Context-Sensitive Help Plug-in IDs"
+             href="projects/dtp/dtp/en/source/c_csh_plugin_ids.html"/>
+   </topic>
+   <topic label="Team Responsibilities and Collaboration"
+          href="projects/dtp/dtp/en/source/c_team_responsibilities_and_collaboration.html">
+      <topic label="Development Team Responsibilities"
+             href="projects/dtp/dtp/en/source/c_development_team_responsibilities.html"/>
+      <topic label="Documentation Team Responsibilities"
+             href="projects/dtp/dtp/en/source/c_documentation_team_responsibilities.html"/>
+   </topic>
+   <topic label="Documentation Team Workflow"
+          href="projects/dtp/dtp/en/source/c_documentation_team_workflow.html">
+      <topic label="Help Context IDs"
+             href="projects/dtp/dtp/en/source/c_help_context_ids.html"/>
+      <topic label="Help Search Expressions"
+             href="projects/dtp/dtp/en/source/c_help_search_expressions.html"/>
+      <topic label="Context-Sensitive Help Plug-ins with DITA"
+             href="projects/dtp/dtp/en/source/c_csh_plugins_with_dita.html">
+         <topic label="UI Plug-ins Associated with Help Contexts"
+                href="projects/dtp/dtp/en/source/c_ui_plugins_associated_with_help_contexts.html"/>
+         <topic label="Related Topics Associated with Help Contexts"
+                href="projects/dtp/dtp/en/source/c_related_topics_associated_with_help_contexts.html"/>
+         <topic label="Context-Specific Help Content"
+                href="projects/dtp/dtp/en/source/c_context_specific_help_content.html"/>
+      </topic>
+   </topic>
+   <topic label="Test Dynamic Context-Sensitive Help"
+          href="projects/dtp/dtp/en/source/c_test_dynamic_context-sensitive_help.html">
+      <topic label="Test Objectives"
+             href="projects/dtp/dtp/en/source/c_test_objectives.html"/>
+      <topic label="Test Procedures"
+             href="projects/dtp/dtp/en/source/c_test_procedures.html"/>
+      <topic label="Plug-in Spy" href="projects/dtp/dtp/en/source/c_plugin_spy.html"/>
+      <topic label="Debug Mode" href="projects/dtp/dtp/en/source/c_debug_mode.html"/>
+   </topic>
+</toc>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/enablement.package.properties b/plugins/org.eclipse.datatools.doc.isv/enablement.package.properties
new file mode 100644
index 0000000..32fbaf0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/enablement.package.properties
@@ -0,0 +1,16 @@
+enablement.include.package.names = org.eclipse.datatools.enablement.*
+
+enablement.exclude.package.names = org.eclipse.datatools.enablement.**.internal.*, \
+                        org.eclipse.datatools.enablement.oda.*
+                        
+
+                        
+                        
+
+                        
+                        
+                        
+                        
+                        
+                        
+                    
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_ProfileManagerInitializationProvider.html b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_ProfileManagerInitializationProvider.html
new file mode 100644
index 0000000..5254145
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_ProfileManagerInitializationProvider.html
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

+<HTML>

+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

+<title>ProfileManagerInitializationProvider</title>

+<style type="text/css">@import url("file:/D:/dev/eclipse_platform/eclipse_37/plugins/org.eclipse.sdk_3.7.0.v201106131736/book.css");</style>

+<style type="text/css">@import url("file:/D:/dev/eclipse_platform/eclipse_37/configuration/org.eclipse.osgi/bundles/624/1/.cp/schema.css");</style>

+</HEAD>

+<BODY>

+<H1 style="text-align:center">ProfileManagerInitializationProvider</H1>

+<p></p>

+<h6 class="CaptionFigColumn SchemaHeader">Identifier: </h6>org.eclipse.datatools.connectivity.ProfileManagerInitializationProvider<p></p>

+<h6 class="CaptionFigColumn SchemaHeader">Since: </h6>DTP 1.6

+<p></p>

+

+<h6 class="CaptionFigColumn SchemaHeader">Description: </h6>This extension point will provide a way for a sample profile to be populated at start-up time.<p></p>

+<h6 class="CaptionFigColumn SchemaHeader">Configuration Markup:</h6>

+<p></p>

+<p class="code SchemaDtd">&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.connection">connection</a>)&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST extension</p>

+<p class="code SchemaDtdAttlist">point&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">name&nbsp;&nbsp;CDATA #IMPLIED</p>&gt;</p>

+<p></p>

+<ul class="ConfigMarkupAttlistDesc">

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.connection">connection</a> (<a href="#e.property">property</a>*)&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST connection</p>

+<p class="code SchemaDtdAttlist">jarList&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">connectionProfileName&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">connectionProfileID&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">driverDefinitionName&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">driverTemplateID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">connectionInitializer&nbsp;CDATA #REQUIRED</p>&gt;</p>

+<p></p>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>jarList</b> - The jar list for the driver definition.</li>

+<li><b>connectionProfileName</b> - The name of the generated connection profile.</li>

+<li><b>connectionProfileID</b> - The id of the connection profile to generate.</li>

+<li><b>driverDefinitionName</b> - The name of the generated driver definition.</li>

+<li><b>driverTemplateID</b> - The id of the driver template to generate driver definition from.</li>

+<li><b>connectionInitializer</b> - Class that initializes the connection.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.property">property</a> EMPTY&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST property</p>

+<p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">value&nbsp;CDATA #REQUIRED</p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+Collection of properties for specifying the properties needed by the driver template.
+
+If a property value requires the location of a plugin's state location, enter the value as follows:
+
+value="Plugin_State_Location/sample_value">
+
+Plugin_State_Location will be substituted with the declaring extension's state location.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>id</b> - The id of the driver template property.</li>

+<li><b>value</b> - The value of the driver template property.</li>

+</ul>

+<br><h6 class="CaptionFigColumn SchemaHeader">Examples: </h6>[Enter extension point usage example here.]

+<p></p>

+

+<h6 class="CaptionFigColumn SchemaHeader">API Information: </h6>[Enter API information here.]

+<p></p>

+

+<h6 class="CaptionFigColumn SchemaHeader">Supplied Implementation: </h6>[Enter information about supplied implementation of this extension point.]

+<p></p>

+

+<br>

+<p class="note SchemaCopyright">

+Copyright (c) 2008 IBM Corporation.
+All rights reserved. This program and the accompanying materials are made
+available under the  terms of the Eclipse Public License v1.0 which accompanies
+this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html.

+

+</p>

+</BODY>

+</HTML>

diff --git a/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_cipherProvider.html b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_cipherProvider.html
new file mode 100644
index 0000000..73740f4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_cipherProvider.html
@@ -0,0 +1,92 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

+<HTML>

+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

+<title>Connection Profiles Store Cipher Provider</title>

+<style type="text/css">@import url("file:/D:/dev/eclipse_platform/eclipse_37/plugins/org.eclipse.sdk_3.7.0.v201106131736/book.css");</style>

+<style type="text/css">@import url("file:/D:/dev/eclipse_platform/eclipse_37/configuration/org.eclipse.osgi/bundles/624/1/.cp/schema.css");</style>

+</HEAD>

+<BODY>

+<H1 style="text-align:center">Connection Profiles Store Cipher Provider</H1>

+<p></p>

+<h6 class="CaptionFigColumn SchemaHeader">Identifier: </h6>org.eclipse.datatools.connectivity.cipherProvider<p></p>

+<h6 class="CaptionFigColumn SchemaHeader">Since: </h6>1.2.4 (DTP 1.9.2)

+<p></p>

+

+<h6 class="CaptionFigColumn SchemaHeader">Description: </h6>This cipherProvider extension point allows a client to extend the connection profile store encryption framework with  a custom provider of <i>javax.crypto.Cipher</i> instances.<p></p>

+<h6 class="CaptionFigColumn SchemaHeader">Configuration Markup:</h6>

+<p></p>

+<p class="code SchemaDtd">&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.cipherProvider">cipherProvider</a>+)&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST extension</p>

+<p class="code SchemaDtdAttlist">point&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">name&nbsp;&nbsp;CDATA #IMPLIED</p>&gt;</p>

+<p></p>

+<ul class="ConfigMarkupAttlistDesc">

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.cipherProvider">cipherProvider</a> EMPTY&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST cipherProvider</p>

+<p class="code SchemaDtdAttlist">fileExtension&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+Defines the file extension and its corresponding provider of <i>javax.crypto.Cipher</i> instances for the encryption of connection profile store files.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>fileExtension</b> - The file extension of connection profile store files that shall be encrypted and decrypted using the cipher provider class specified in the  <i>class</i> attribute.  
+<br>This attribute value may include an optional dot before the file extension (e.g. "profiles" or ".profiles").  The keyword "default" may be specified as the attribute value to match files with no file extension.
+<br>The default connection profile store files that persists in the workspace use the ".dat" and ".bak" file extensions.  Adopters may need to handle potential conflict with the default encryption implementation, if implementing a cipherProvider extension for files with these file extensions.</li>

+<li><b>class</b> - The concrete class that implements the <code>org.eclipse.datatools.connectivity.security.ICipherProvider</code> interface to provide the <i>javax.crypto.Cipher</i> instances for the encryption and decryption of connection profile store files.
+<br>A custom class may optionally extend the <code>org.eclipse.datatools.connectivity.security.CipherProviderBase</code> base class implementation, which reads a secret (symmetric) key specification from a bundled resource.</li>

+</ul>

+<br><h6 class="CaptionFigColumn SchemaHeader">Examples: </h6><code><pre class="Example"><span class="code SchemaTag">
+     &lt;extension
+           id=</span><span class="code SchemaCstring">&quot;org.company.connectivity.security.cipherProvider&quot;</span><span class="code SchemaTag">
+           point=</span><span class="code SchemaCstring">&quot;org.eclipse.datatools.connectivity.cipherProvider&quot;</span><span class="code SchemaTag">&gt;
+        &lt;cipherProvider
+              fileExtension=</span><span class="code SchemaCstring">&quot;profile&quot;</span><span class="code SchemaTag">
+              class=</span><span class="code SchemaCstring">&quot;org.company.connectivity.security.ProfileStoreCipherProvider&quot;</span><span class="code SchemaTag">&gt;
+        &lt;/cipherProvider&gt;
+        &lt;cipherProvider
+              fileExtension=</span><span class="code SchemaCstring">&quot;default&quot;</span><span class="code SchemaTag">
+              class=</span><span class="code SchemaCstring">&quot;org.company.connectivity.security.ProfileStoreCipherProvider&quot;</span><span class="code SchemaTag">&gt;
+        &lt;/cipherProvider&gt;
+     &lt;/extension&gt;
+</span></pre></code>
+This example registers org.company.connectivity.security.ProfileStoreCipherProvider as the provider for files with the extension ".profile" and for those with no file extension. 
+<br><br>
+Sample class implementation of the org.eclipse.datatools.connectivity.security.ICipherProvider interface:
+<code><pre class="Example"><span class="code SchemaTag">
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.security.CipherProviderBase;
+import org.eclipse.datatools.connectivity.security.ICipherProvider;
+import org.osgi.framework.Bundle;
+
+public class ProfileStoreCipherProvider extends CipherProviderBase 
+ implements ICipherProvider
+{
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.security.CipherProviderBase#getKeyResource()
+     */
+    @Override
+    protected URL getKeyResource()
+    {
+        Bundle bundle = Platform.getBundle( "org.company.connectivity.security" );
+        return bundle != null ? 
+                bundle.getResource( "cpkey" ) :  //$NON-NLS-1$
+                super.getKeyResource();
+    }
+}
+</span></pre></code>

+<p></p>

+

+<h6 class="CaptionFigColumn SchemaHeader">API Information: </h6>[Provisional] An extension must implement the ICipherProvider interface defined in the <code>org.eclipse.datatools.connectivity.security</code> package. See the package's JavaDoc documentation for more information.

+<p></p>

+

+<h6 class="CaptionFigColumn SchemaHeader">Supplied Implementation: </h6><code>org.eclipse.datatools.connectivity.security.CipherProviderBase</code> is the base class implementation of the <code>org.eclipse.datatools.connectivity.security.ICipherProvider</code> interface.  It uses a default bundled encryption key as its <i>javax.crypto.spec.SecretKeySpec</i>.

+<p></p>

+

+<br>

+<p class="note SchemaCopyright">

+Copyright (c) 2011 Actuate Corporation.
+All rights reserved. This program and the accompanying materials are made available under the  terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html .

+

+</p>

+</BODY>

+</HTML>

diff --git a/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_connectionProfile.html b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_connectionProfile.html
new file mode 100644
index 0000000..73abd0a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_connectionProfile.html
@@ -0,0 +1,206 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Connection Profile</title>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.sdk_3.1.0/book.css");</style>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.platform.doc.isv_3.1.0/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>Connection Profile</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.connectivity.connectionProfile<p></p>
+<h6 class=CaptionFigColumn id=header>Since: </h6>DTP v. 0.x
+<p></p>
+
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>This extension point provides a place for plug-ins to add support for different types of connection profiles.  It also allows extensions to extend the capabilities of defined extension points.
+
+<p>Connection profiles are defined using the <samp>connectionProfile</samp> element.  A connection profile will belong to a single category and a single configuration type.  Categories are used for grouping like types of connection profiles (e.g. queue, database, etc.).  Configuration types are used for specifying the type of configuration information provided by the profile (e.g. New Era Open Transport, JDBC, etc.).</p>
+
+<p>The provider must define a corresponding <samp>newWizard</samp> element for creating the resource.</p>
+
+<p>The provider must define a corresponding <samp>org.eclipse.ui.propertyPages</samp> for editing the connection profile's properties.  The provider should ensure a <samp>filter</samp> element is defined to verify the selected connection profile's provider ID matches the <samp>id</samp> specified for the <samp>connectionProfile</samp> (this is accomplished using the <samp>org.eclipse.datatools.profile.property.id</samp> property).  <samp>org.eclipse.datatools.connectivity.ui.wizards.ProfileDetailsPropertyPage</samp> is a base property page implementation intended to be extended by connection profile providers for this purpose.</p>
+
+<p>Connection factories supporting a given profile may be registered using the <samp>connectionFactory</samp> element.  Connection factories allow plug-ins to create a connection to a server from a connection profile.  A connection profile provider should provide a connection factory extension.  Ideally, a connection factory's ID should correspond with the type of object created when connected (e.g. <samp>java.sql.Connection</samp>).  A connection profile provider should implement a <samp>connectionFactory</samp> with an ID of <samp>org.eclipse.datatools.connectivity.connectionFactory.pingFactory</samp> to enable the ping functionality provided in the base implementations and framework.<p/>
+
+<p>Connection profiles may be extended by other plug-ins by defining the following extension elements:
+<ul>
+<li><samp>connectionFactory - </samp></li>This element enables a plug-in to provide connection creation support for the specified connection profile.
+<li><samp>profileExtension - </samp></li>This element enables a plug-in to provide additional configuration properties for the specified connection profile.  If you are extending a connection profile in this manner and these properties need to be specified when connecting to the server defined by the connection profile, you will need to provide a connection factory extension that makes use of the additional properties.
+</ul>
+</p>
+
+<p>Tooling providers can choose to integrate with connection profiles using a variety of mechanisms.  Tooling can be keyed to a specific profile type (by checking the profile's ID attribute; e.g. the mechanism used for contributing property pages as noted above).  Tooling can also be keyed to work with profiles with a specified connection factory (e.g. DB specific tooling might be keyed to use any profile with a <samp>java.sql.Connection</samp> factory).  This approach allows tooling to work with any type of connection profile that can be represented through a particular connection API.</p>
+
+<p>The following filter properties are provided for filtering connection profile instances: (These are defined in <samp>org.eclipse.datatools.connectivity.ui.IConnectionProfileActionFilter</samp>.)
+<ul>
+<li><samp>org.eclipse.datatools.profile.property.id</samp> - </li>Use for filtering profile instances of a specific type.
+<li><samp>org.eclipse.datatools.connectivity.profile.property.categoryID</samp> - </li>Use for filtering profile instances belonging to a specific category.
+<li><samp>org.eclipse.datatools.connectivity.profile.property.factoryID</samp> - </li>Use for filtering profile instances implementing a specific type of connection factory.
+<li><samp>org.eclipse.datatools.connectivity.profile.property.hasExtendedProperties</samp> - </li>Use for filtering profile instances with one or more <samp>profileExtension</samp>s defined.
+<li><samp>org.eclipse.datatools.connectivity.profile.property.extensionID</samp> - </li>Use for filtering profile instances implementing a specific type of <samp>profileExtension</samp>.
+<li><samp>org.eclipse.datatools.connectivity.profile.property.containingViewID</samp> - </li>Use for filtering profile instances contained within a specific view.
+<li><samp>org.eclipse.datatools.connectivity.profile.property.isConnected</samp> - </li>Use for filtering profile instances based on their connection state.
+<li><samp>org.eclipse.datatools.connectivity.profile.property.supportsPing</samp> - </li>Use for filtering profile instances implementing a ping connection factory (shortcut for name=org.eclipse.datatools.connectivity.profile.property.factoryID, value=org.eclipse.datatools.connectivity.connectionFactory.pingFactory).
+</ul>
+</p></p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.category">category</a>* , <a href="#e.configurationType">configurationType</a>* , <a href="#e.connectionProfile">connectionProfile</a>* , <a href="#e.connectionFactory">connectionFactory</a>* , <a href="#e.profileExtension">profileExtension</a>* , <a href="#e.newWizard">newWizard</a>* , <a href="#e.wizardCategory">wizardCategory</a>*)*&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>point</b> - a fully qualified identifier of the target extension point, <samp>org.eclipse.datatools.connectivity.connectionProfile</samp></li>
+<li><b>id</b> - an optional identifier of the extension instance</li>
+<li><b>name</b> - an optional name of the extension instance</li>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.category">category</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST category</p>
+<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>parentCategory&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+This element is used to identify a category.  Categories are used to group related connection profile types (e.g. databases).</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>id</b> - The id of this category.  This value is referenced by <samp>connectionProfile</samp> elements.</li>
+<li><b>parentCategory</b> - The id of a parent category, if this category has a parent.</li>
+<li><b>name</b> - The display name for this category.</li>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.connectionProfile">connectionProfile</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST connectionProfile</p>
+<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>category&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>configurationType&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>icon&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>maintainConnection&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+This element is used to define a connection profile type.</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>id</b> - The id of this connection profile.  This must uniquely identify this connection profile.</li>
+<li><b>name</b> - The display name for this connection profile type.</li>
+<li><b>category</b> - The category that this connection profile belongs to.  This must map back to a <samp>category/id</samp>.</li>
+<li><b>configurationType</b> - The configuration type for this connection profile.  This must map back to a <samp>configurationType/id</samp>.</li>
+<li><b>icon</b> - The plug-in relative path to an image file.  This image will be used to identify resources of this type in the servers view.</li>
+<li><b>maintainConnection</b> - </li>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.configurationType">configurationType</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST configurationType</p>
+<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>name&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+This element is used to identify a configuration type.  A configuration type is used for determining the format of the configuration data used by a connection profile.  For example, "New Era Open Transport" or "JDBC Connection URL"</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>id</b> - The unique identifier for this configuration type.</li>
+<li><b>name</b> - The name of this configuration type.</li>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.connectionFactory">connectionFactory</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST connectionFactory</p>
+<p class=code id=dtdAttlist>profile&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>name&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>class&nbsp;&nbsp;&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+This element defines a connection factory that can be used to create connections to a server using the properties stored in a connection profile resource.</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>profile</b> - The connection profile supported by this factory.  This should reference a <samp>connectionProfile/id</samp>.</li>
+<li><b>name</b> - The name of this connection factory.</li>
+<li><b>id</b> - The unique identifier for this connection factory.  This id may be used by plug-ins to retrieve an instance of this connection factory.</li>
+<li><b>class</b> - The class that implements this connection factory.  The specified class must be an instance of IConnectionFactory.</li>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.profileExtension">profileExtension</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST profileExtension</p>
+<p class=code id=dtdAttlist>profile&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>name&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+This element is used to define an extension that provides support for setting additional properties on a connection profile.  When implementing this extension point, you should also implement a connection factory if required.</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>profile</b> - The connection profile that this extension supports.  This should map to a <samp>connectionProfile/id</samp>.</li>
+<li><b>name</b> - The name of this extension.</li>
+<li><b>id</b> - A unique identifier for this extension.</li>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.newWizard">newWizard</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST newWizard</p>
+<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>icon&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>description&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>profile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>category&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+This element is used to identify a connection profile wizard. A wizard is used to create a connection profile</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>id</b> - The unique identifier for the new wizard.</li>
+<li><b>name</b> - </li>
+<li><b>class</b> - The class that implements this new wizard.  The specified class must be an instance of IWizard.  <samp>org.eclipse.datatools.connectivity.ui.wizards.NewConnectionProfileWizard</samp> is a base implementation intended to be extended by connection profile providers.  <samp>org.eclipse.datatools.connectivity.ui.wizards.ConnectionProfileDetailsPage</samp> is a base wizard page implementation intended for use with the above wizard implementation.</li>
+<li><b>icon</b> - The plug-in relative path to an image file.  This image will be used to identify the new wizard.</li>
+<li><b>description</b> - Description of the new wizard.</li>
+<li><b>profile</b> - The connection profile supported by this new wizard.  This should reference a <samp>connectionProfile/id</samp>.</li>
+<li><b>category</b> - </li>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.wizardCategory">wizardCategory</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST wizardCategory</p>
+<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>parentCategory&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>icon&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>description&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>wizardTitle&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>wizardDescription&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>id</b> - This element is used to identify a wizard category.  Categories are used to group related connection profile wizards (e.g. databases).</li>
+<li><b>parentCategory</b> - The id of a parent category, if this category has a parent.</li>
+<li><b>name</b> - The display name for this category.</li>
+<li><b>icon</b> - The plug-in relative path to an image file.  This image will be used to identify wizard category in the new connection profile wizard.</li>
+<li><b>description</b> - Description of the new wizard category.</li>
+<li><b>wizardTitle</b> - wizard title</li>
+<li><b>wizardDescription</b> - wizard description</li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>Examples: </h6><pre>
+ <p class=code id=tag>&lt;extension
+   id=<p class=code id=cstring>&quot;sample&quot;</p><p class=code id=tag>
+   name=<p class=code id=cstring>&quot;Sample Server Extension&quot;</p><p class=code id=tag>
+   point=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.connectionProfile&quot;</p><p class=code id=tag>&gt;</p>
+  <p class=code id=tag>&lt;category
+    name=<p class=code id=cstring>&quot;Sample Server Category&quot;</p><p class=code id=tag>
+    id=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.example.sampleCategory&quot;</p><p class=code id=tag>&gt;</p>
+  <p class=code id=tag>&lt;/category&gt;</p>
+  <p class=code id=tag>&lt;configurationType
+    name=<p class=code id=cstring>&quot;Sample Configuration Type&quot;</p><p class=code id=tag>
+    id=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.example.sampleConfigurationType&quot;</p><p class=code id=tag>&gt;</p>
+  <p class=code id=tag>&lt;/configurationType&gt;</p>
+  <p class=code id=tag>&lt;connectionFactory
+    profile=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.example.sampleConnectionProfile&quot;</p><p class=code id=tag>
+    name=<p class=code id=cstring>&quot;Shared Connection Factory&quot;</p><p class=code id=tag>
+    id=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.example.sharedConnectionFactory&quot;</p><p class=code id=tag>
+    class=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.example.SharedConnectionFactory&quot;</p><p class=code id=tag>&gt;</p>
+  <p class=code id=tag>&lt;/connectionFactory&gt;</p>
+  <p class=code id=tag>&lt;connectionFactory
+    profile=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.example.sampleConnectionProfile&quot;</p><p class=code id=tag>
+    name=<p class=code id=cstring>&quot;Ping Connection Factory&quot;</p><p class=code id=tag>
+    id=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.connectionFactory.pingFactory&quot;</p><p class=code id=tag>
+    class=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.example.SharedConnectionFactory&quot;</p><p class=code id=tag>&gt;</p>
+  <p class=code id=tag>&lt;/connectionFactory&gt;</p>
+  <p class=code id=tag>&lt;profileExtension
+    profile=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.example.sampleConnectionProfile&quot;</p><p class=code id=tag>
+    name=<p class=code id=cstring>&quot;Sample Extraneous Properties&quot;</p><p class=code id=tag>
+    id=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.example.sampleConnectionProfileExtension&quot;</p><p class=code id=tag>&gt;</p>
+  <p class=code id=tag>&lt;/profileExtension&gt;</p>
+  <p class=code id=tag>&lt;connectionProfile
+    configurationType=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.example.sampleConfigurationType&quot;</p><p class=code id=tag>
+    name=<p class=code id=cstring>&quot;Sample Connection Profile&quot;</p><p class=code id=tag>
+    icon=<p class=code id=cstring>&quot;icons/sample.gif&quot;</p><p class=code id=tag>
+    category=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.example.sampleCategory&quot;</p><p class=code id=tag>
+    id=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.example.sampleConnectionProfile&quot;</p><p class=code id=tag>&gt;</p>
+  <p class=code id=tag>&lt;/connectionProfile&gt;</p>
+ <p class=code id=tag>&lt;/extension&gt;</p>
+</pre>
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>API Information: </h6>[Enter API information here.]
+<p></p>
+
+<br>
+<p class=note id=copyright>
+<p>Copyright (c) 2004-2005 Sybase, Inc.</p>
+<p>All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+<a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a></p>
+
+<p>Contributors: rcernich - initial API and implementation</p>
+<p></p>
+
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_driverExtension.html b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_driverExtension.html
new file mode 100644
index 0000000..9638aab
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_driverExtension.html
@@ -0,0 +1,237 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

+<HTML>

+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

+<title>Driver Definition</title>

+<style type="text/css">@import url("file:/D:/dev/eclipse_platform/eclipse_37/plugins/org.eclipse.sdk_3.7.0.v201106131736/book.css");</style>

+<style type="text/css">@import url("file:/D:/dev/eclipse_platform/eclipse_37/configuration/org.eclipse.osgi/bundles/624/1/.cp/schema.css");</style>

+</HEAD>

+<BODY>

+<H1 style="text-align:center">Driver Definition</H1>

+<p></p>

+<h6 class="CaptionFigColumn SchemaHeader">Identifier: </h6>org.eclipse.datatools.connectivity.driverExtension<p></p>

+<h6 class="CaptionFigColumn SchemaHeader">Since: </h6>DTP 0.x

+<p></p>

+

+<h6 class="CaptionFigColumn SchemaHeader">Description: </h6><p>
+The driverExtension is used by developers to define templates that describe the mechanical components necessary for opening connections to servers.  Users create specific driver definitions using these templates.
+</p>
+<p>
+The driver definitions are intended to be used in conjunction with connection profiles, where the driver definition specifies the mechanics (e.g. JAR files, driver class names, etc.) necessary for opening the connection and where the connection profile specifies the particulars for connecting to a specific server (e.g. host, port, user ID, password, etc.).
+</p>
+<p>
+In addition, using the driverTemplateOverride functionality, adopters can take existing driver templates (such as for one of the Enablement projects) and update the driver's jar list to actually point to a wrapped jar, or update individual properties of a template to fit a particular use. 
+</p><p></p>

+<h6 class="CaptionFigColumn SchemaHeader">Configuration Markup:</h6>

+<p></p>

+<p class="code SchemaDtd">&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.category">category</a>* , <a href="#e.driverTemplate">driverTemplate</a>* , <a href="#e.driverTemplateOverride">driverTemplateOverride</a>*)&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST extension</p>

+<p class="code SchemaDtdAttlist">point&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">name&nbsp;&nbsp;CDATA #IMPLIED</p>&gt;</p>

+<p></p>

+<ul class="ConfigMarkupAttlistDesc">

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.category">category</a> EMPTY&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST category</p>

+<p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">description&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">parentCategory&nbsp;CDATA #IMPLIED</p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+This element is used to identify a category.  Categories are used to group related connection profile types (e.g. databases).</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>id</b> - The id of this category.  This value is referenced by <samp>driverTemplate</samp> elements.</li>

+<li><b>name</b> - The display name for this category.</li>

+<li><b>description</b> - The description of this category. This value will be used in the UI to describe a particular category.</li>

+<li><b>parentCategory</b> - The id of a parent category, if this category has a parent.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.driverTemplate">driverTemplate</a> (<a href="#e.properties">properties</a>? , <a href="#e.migration">migration</a>?)&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST driverTemplate</p>

+<p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">description&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">parentCategory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">jarList&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">createDefault&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(true | false) "true"</p><p class="code SchemaDtdAttlist">emptyJarListIsOK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(true | false) "false"</p><p class="code SchemaDtdAttlist">valuesProvider&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">defaultDefinitionName&nbsp;CDATA #IMPLIED</p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+This element is used to identify a template.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>id</b> - The id of this driver type.</li>

+<li><b>name</b> - The display name for this driver type.</li>

+<li><b>description</b> - The description of this driver type. This value will be used in the UI to describe a particular type.</li>

+<li><b>parentCategory</b> - The id of the category to which this template belongs.</li>

+<li><b>jarList</b> - The list of JAR files used to create the classpath used when connecting using this driver.</li>

+<li><b>createDefault</b> - Specifies whether or not this template should be used to create a default driver definition instance.  If set to true, a driver definition instance with the name specified in the template is guaranteed to exist in the list of driver definitions.  Default is true.</li>

+<li><b>emptyJarListIsOK</b> - Specifies whether or not it is valid for the jarList property to be empty.  Default is false.</li>

+<li><b>valuesProvider</b> - </li>

+<li><b>defaultDefinitionName</b> - </li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.properties">properties</a> (<a href="#e.property">property</a>+)&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+Parent container for specific driver definition properties.</p>

+<br><br>

+<p class="code SchemaDtd">&lt;!ELEMENT <a name="e.property">property</a> EMPTY&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST property</p>

+<p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">description&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">value&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">visible&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(true | false) "true"</p><p class="code SchemaDtdAttlist">example&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">required&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(true | false) "true"</p><p class="code SchemaDtdAttlist">generated&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(true | false) "false"</p><p class="code SchemaDtdAttlist">customPropertyDescriptor&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">category&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+A property definition for a driver definition.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>id</b> - The id of this property.  Used to identify this property in the driver definition.</li>

+<li><b>name</b> - The display name for this property.</li>

+<li><b>description</b> - The description of this property. This value will be used in the UI to describe a particular type.</li>

+<li><b>value</b> - The default value for this property.</li>

+<li><b>visible</b> - Specifies whether or not this property is visible and editable to the user.  Default is true.</li>

+<li><b>example</b> - Specifies an example value for this property.</li>

+<li><b>required</b> - Specifies whether or not this is a required property.  Default is true.</li>

+<li><b>generated</b> - currently unused and undefined.</li>

+<li><i style="color: red;">Deprecated</i> <b>customPropertyDescriptor</b> - Provides a way to specify a custom property descriptor that extends the class org.eclipse.ui.views.properties.PropertyDescriptor. An example of this is the class org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor, which provides a property editor that masks the characters for a password property. Anything you can implement as a property descriptor for the Properties Viewer, you can use here. Or if you want to make the property values read-only, you can use org.eclipse.ui.views.properties.PropertyDescriptor directly.
+
+Note that your property descriptor must implement a zero-argument constructor in order to be created correctly. This zero-argument constructor should provide the id and display name of the property you are editing. For example:
+
+ private static String DRIVER_CLASS_PROP_ID = "org.eclipse.datatools.connectivity.db.driverClass"; //$NON-NLS-1$
+ 
+ public DriverClassBrowsePropertyDescriptor() {
+  super(DRIVER_CLASS_PROP_ID, 
+    ConnectivityUIPlugin.getDefault().getResourceString("DriverClassBrowsePropertyDescriptor.property.label")); //$NON-NLS-1$
+ }
+ 
+Also note that there is a new interface that your Property Descriptor can extend called org.eclipse.datatools.connectivity.drivers.IDriverInstancePropertyDescriptor. This interface allows you to pass the Driver Instance to your descriptor when it is instantiated in the Edit Driver Definition dialog.</li>

+<li><b>category</b> - The category tag is used to provide an optional category for your template properties. The default is "General" if no category is specified for the property. You can use this to group properties in arbitrary categories.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.driverTemplateOverride">driverTemplateOverride</a> (<a href="#e.propertyOverrides">propertyOverrides</a>)?&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST driverTemplateOverride</p>

+<p class="code SchemaDtdAttlist">targetId&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">description&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">parentCategory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">jarList&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">createDefault&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(true | false) </p><p class="code SchemaDtdAttlist">emptyJarListIsOK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(true | false) </p><p class="code SchemaDtdAttlist">valuesProvider&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">priority&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA "1"</p><p class="code SchemaDtdAttlist">defaultDefinitionName&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">remove&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(true | false) </p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+This element is used to identify a template override</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>targetId</b> - The id of the driver template to be overridden.</li>

+<li><b>name</b> - The overridden display name for this driver type.</li>

+<li><b>description</b> - The overridden description of this driver type. This value will be used in the UI to describe a particular type.</li>

+<li><b>parentCategory</b> - The id of the category to which this template belongs.</li>

+<li><b>jarList</b> - The list of JAR files used to create the classpath used when connecting using this driver.</li>

+<li><b>createDefault</b> - Specifies whether or not this template should be used to create a default driver definition instance.  If set to true, a driver definition instance with the name specified in the template is guaranteed to exist in the list of driver definitions.  Default is true.</li>

+<li><b>emptyJarListIsOK</b> - Specifies whether or not it is valid for the jarList property to be empty.  Default is false.</li>

+<li><b>valuesProvider</b> - </li>

+<li><b>priority</b> - The value for priority should be a value of 1 to 5, with 1 being low and 5 being high, indicating the priority for this override. If there are other overrides for the particular target driver template, the priority will be used to indicate which override should take precedence. If no priority is specified, the priority will default to "1". If multiple overrides have the same priority, the one with the lowest plug-in ID alphabetically (IDs will be sorted in ascending alphabetical order) will take precedence.</li>

+<li><b>defaultDefinitionName</b> - </li>

+<li><b>id</b> - The id attribute, though optional, is required to allow one driverTemplateOverride instance to override another. For example, if driver A has an override B that changes or removes a property, another adopter might implement override C that uses the id of override B as the targetId, thus replacing the overridden driver template with their own. In the case of multiple overrides or overrides of overrides, the priority is taken into account.</li>

+<li><b>remove</b> - Removes the template from the list of available templates.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.propertyOverrides">propertyOverrides</a> (<a href="#e.propertyOverride">propertyOverride</a>)+&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+Parent container for specific driver definition overridden properties</p>

+<br><br>

+<p class="code SchemaDtd">&lt;!ELEMENT <a name="e.propertyOverride">propertyOverride</a> EMPTY&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST propertyOverride</p>

+<p class="code SchemaDtdAttlist">targetId&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">description&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">value&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">visible&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(true | false) </p><p class="code SchemaDtdAttlist">example&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">required&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(true | false) </p><p class="code SchemaDtdAttlist">customPropertyDescriptor&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">category&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">remove&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(true | false) </p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+A property override definition for a driver template</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>targetId</b> - The id of the property to override. Must match the property ID from the driver template you are overriding.  Used to identify this property in the driver definition.</li>

+<li><b>name</b> - The overridden display name for this property.</li>

+<li><b>description</b> - The overridden description of this property. This value will be used in the UI to describe a particular type.</li>

+<li><b>value</b> - The overridden default value for this property.</li>

+<li><b>visible</b> - Specifies whether or not this property is visible and editable to the user.  Default is true.</li>

+<li><b>example</b> - Specifies an example value for this property.</li>

+<li><b>required</b> - Specifies whether or not this is a required property.  Default is true.</li>

+<li><i style="color: red;">Deprecated</i> <b>customPropertyDescriptor</b> - Provides a way to override a custom property descriptor that extends the class org.eclipse.ui.views.properties.PropertyDescriptor. An example of this is the class org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor, which provides a property editor that masks the characters for a password property. Anything you can implement as a property descriptor for the Properties Viewer, you can use here. Or if you want to make the property values read-only, you can use org.eclipse.ui.views.properties.PropertyDescriptor directly.
+
+Note that your property descriptor must implement a zero-argument constructor in order to be created correctly. This zero-argument constructor should provide the id and display name of the property you are editing. For example:
+
+ private static String DRIVER_CLASS_PROP_ID = "org.eclipse.datatools.connectivity.db.driverClass"; //$NON-NLS-1$
+ 
+ public DriverClassBrowsePropertyDescriptor() {
+  super(DRIVER_CLASS_PROP_ID, 
+    ConnectivityUIPlugin.getDefault().getResourceString("DriverClassBrowsePropertyDescriptor.property.label")); //$NON-NLS-1$
+ }
+ 
+Also note that there is a new interface that your Property Descriptor can extend called org.eclipse.datatools.connectivity.drivers.IDriverInstancePropertyDescriptor. This interface allows you to pass the Driver Instance to your descriptor when it is instantiated in the Edit Driver Definition dialog.</li>

+<li><b>category</b> - The category tag is used to override the category for your template properties. The default is "General" if no category is specified for the property. You can use this to group properties in arbitrary categories.</li>

+<li><b>remove</b> - Indicates if this property should be removed</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.migration">migration</a> (<a href="#e.propertyMigration">propertyMigration</a>*)*&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST migration</p>

+<p class="code SchemaDtdAttlist">newDriverTemplateID&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+Use this element to add migration support for a deprecated driver type (e.g. ID changes, property changes, etc.). Make sure if you are migrating driver definitions of one template to another and the first driver template was set to "createDefault = true", that you set the old driver template to createDefault = false or the driver manager will attempt to recreate the older template and then migrate it.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>newDriverTemplateID</b> - The ID of the new driver template to which the old driver template should be associated with.  If this attribute is not specified, the ID of the driver template is not changed.  However, propertyMigration elements, if any, will still be processed and applied.</li>

+<li><b>class</b> - A migration implementation that allows the provider to perform a specialized migration.  Use this method if you require a more complex migration algorithm (i.e. anything other than simple name and property mapping).</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.propertyMigration">propertyMigration</a> EMPTY&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST propertyMigration</p>

+<p class="code SchemaDtdAttlist">oldPropertyKey&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">newPropertyKey&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">newValue&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+This element is used to specify a simple mapping for property key names from a source driver definition to a target driver definition</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>oldPropertyKey</b> - The key name in the source driver definition  If this property is not specified, the new property will be defaulted with the value of newValue.</li>

+<li><b>newPropertyKey</b> - The key name in the target driver definition  If this value is not specified, the old property will be deleted.</li>

+<li><b>newValue</b> - Use this attribute for populating a default property value for a new property.  newPropertyKey must be set.</li>

+</ul>

+<br><h6 class="CaptionFigColumn SchemaHeader">Examples: </h6><extension
+         point="org.eclipse.datatools.connectivity.driverExtension">
+      <category
+            id="org.eclipse.datatools.connectivity.db.driverCategory"
+            name="Database"/>
+      <driverTemplate
+            createDefault="false"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.connectivity.db.genericDriverTemplate"
+            jarList=""
+            name="Generic JDBC Driver"
+            parentCategory="org.eclipse.datatools.connectivity.db.driverCategory">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="Driver Class"
+                  value=""
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.dbdefinition"
+                  name="DBDefinition Model Instance"
+                  value=""
+                  required="true"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+    <driverTemplateOverride
+          jarList="[PLUGIN]\mydriver\driver.jar"
+          name="Override for Generic JDBC Driver"
+          targetId="org.eclipse.datatools.connectivity.db.genericDriverTemplate">
+       <propertyOverrides>
+          <propertyOverride
+                value="my.class"
+                targetId="org.eclipse.datatools.connectivity.db.driverClass"/>
+       </propertyOverrides>
+    </driverTemplateOverride>
+   </extension>

+<p></p>

+

+<h6 class="CaptionFigColumn SchemaHeader">API Information: </h6>[Enter API information here.]

+<p></p>

+

+<h6 class="CaptionFigColumn SchemaHeader">Supplied Implementation: </h6>[Enter information about supplied implementation of this extension point.]

+<p></p>

+

+<br>

+<p class="note SchemaCopyright">

+<p>Copyright (c) 2004-2007 Sybase, Inc.</p>
+<p>All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+<a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a></p>
+
+<p>Contributors: brianf - initial API and implementation</p>

+

+</p>

+</BODY>

+</HTML>

diff --git a/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_oda_consumer_driverBridge.html b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_oda_consumer_driverBridge.html
new file mode 100644
index 0000000..2177ef6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_oda_consumer_driverBridge.html
@@ -0,0 +1,47 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>DTP ODA Consumer Helper Driver Bridge</title>
+<style>@import url("file:/D:/Lang/eclipse_32M5a/plugins/org.eclipse.sdk_3.2.0.v20060214/book.css");</style>
+<style>@import url("file:/D:/Lang/eclipse_32M5a/configuration/org.eclipse.osgi/bundles/143/1/.cp/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>DTP ODA Consumer Helper Driver Bridge</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.connectivity.oda.consumer.driverBridge<p></p>
+<h6 class=CaptionFigColumn id=header>Since: </h6>3.0
+<p></p>
+
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>This ODA consumer helper component's extension point supports the use of a custom ODA driver bridge.  An extension would specify a run-time driver bridge that extends the consumer helper, and/or servers as an adapter to underlying data provider objects that do not implement the org.eclipse.datatools.connectivity.oda interfaces.</p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.bridge">bridge</a>)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.bridge">bridge</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST bridge</p>
+<p class=code id=dtdAttlist>driverType&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>bridgeId&nbsp;&nbsp;&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+Defines the custom driver bridge for a type of driver.</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>driverType</b> - The type of an underlying data driver for which an ODA driver bridge is applied.  It can be either the interface name or class name of the driver.  A bridge defined for a driver class takes precedence over those defined for a driver's interface(s).</li>
+<li><b>bridgeId</b> - The ODA data source element id of the driver bridge extension that adapts the ODA runtime interfaces for a data driver, and implements the ODA data source extension point <i>org.eclipse.datatools.connectivity.oda.dataSource</i>.
+<br>Its driver bridge extension's <i>driverClass</i> is the concrete class that serves as the custom bridge's entry point.</li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>API Information: </h6>The driver bridge must implement the runtime interfaces defined in the <i>org.eclipse.datatools.connectivity.oda</i> package. See the package's JavaDoc documentation and API interfaces for more information.
+<p></p>
+
+<br>
+<p class=note id=copyright>
+Copyright (c) 2006 Actuate Corporation.
+All rights reserved. This program and the accompanying materials are made available under the  terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+<p></p>
+
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_oda_consumer_propertyProvider.html b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_oda_consumer_propertyProvider.html
new file mode 100644
index 0000000..27e4e55
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_oda_consumer_propertyProvider.html
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

+<HTML>

+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

+<title>DTP ODA Consumer Data Source Property Service Provider</title>

+<style type="text/css">@import url("file:/D:/dev/eclipse_platform/eclipse_37/plugins/org.eclipse.sdk_3.7.0.v201106131736/book.css");</style>

+<style type="text/css">@import url("file:/D:/dev/eclipse_platform/eclipse_37/configuration/org.eclipse.osgi/bundles/624/1/.cp/schema.css");</style>

+</HEAD>

+<BODY>

+<H1 style="text-align:center">DTP ODA Consumer Data Source Property Service Provider</H1>

+<p></p>

+<h6 class="CaptionFigColumn SchemaHeader">Identifier: </h6>org.eclipse.datatools.connectivity.oda.consumer.propertyProvider<p></p>

+<h6 class="CaptionFigColumn SchemaHeader">Since: </h6>3.0.1

+<p></p>

+

+<h6 class="CaptionFigColumn SchemaHeader">Description: </h6>This ODA consumer helper component's extension point allows an ODA consumer application to extend the ODA consumer framework to provide application-specific service to obtain and adjust externalized property names and corresponding values, for use by an ODA run-time driver to connect to a data source.<p></p>

+<h6 class="CaptionFigColumn SchemaHeader">Configuration Markup:</h6>

+<p></p>

+<p class="code SchemaDtd">&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.dataSourcePropertyService">dataSourcePropertyService</a>)&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST extension</p>

+<p class="code SchemaDtdAttlist">point&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">name&nbsp;&nbsp;CDATA #IMPLIED</p>&gt;</p>

+<p></p>

+<ul class="ConfigMarkupAttlistDesc">

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.dataSourcePropertyService">dataSourcePropertyService</a> EMPTY&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST dataSourcePropertyService</p>

+<p class="code SchemaDtdAttlist">consumerApplicationId&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">providerClass&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+Allows an ODA consumer application, such as J2EE application, to extend the ODA consumer framework to provide application-specific service to obtain and adjust configurable, externalized property names and corresponding values, for use by an ODA run-time driver to connect to a data source.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>consumerApplicationId</b> - The unique identifier of an ODA consumer application, such as a J2EE application, which embeds an engine that uses the ODA consumer helper framework.
+This consumer application id must match the value of the IPropertyProvider.ODA_CONSUMER_ID key, contained in a Map passed as the context in the call to the IDriver.setAppContext method.</li>

+<li><b>providerClass</b> - The concrete class that implements the <code>org.eclipse.datatools.connectivity.oda.consumer.services.IPropertyProvider</code> interface to provide an application-specific service to obtain and adjust the data source connection properties.
+<p>
+See <code>org.eclipse.datatools.connectivity.oda.consumer.services.impl.PropertyProviderImpl</code> for an exemplary base class implementation of the <code>IPropertyProvider</code> interface.</li>

+</ul>

+<br><h6 class="CaptionFigColumn SchemaHeader">API Information: </h6>[Provisional] An extension must implement the IPropertyProvider interface defined in the <i>org.eclipse.datatools.connectivity.oda.consumer.services</i> package. See the package's JavaDoc documentation for more information.

+<p></p>

+

+<br>

+<p class="note SchemaCopyright">

+Copyright (c) 2006 Actuate Corporation.
+All rights reserved. This program and the accompanying materials are made available under the  terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html .

+

+</p>

+</BODY>

+</HTML>

diff --git a/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_oda_datasource.html b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_oda_datasource.html
new file mode 100644
index 0000000..87b9491
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_oda_datasource.html
@@ -0,0 +1,333 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

+<HTML>

+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

+<title>Open Data Access</title>

+<style type="text/css">@import url("file:/D:/dev/eclipse_platform/eclipse_37/plugins/org.eclipse.sdk_3.7.0.v201106131736/book.css");</style>

+<style type="text/css">@import url("file:/D:/dev/eclipse_platform/eclipse_37/configuration/org.eclipse.osgi/bundles/624/1/.cp/schema.css");</style>

+</HEAD>

+<BODY>

+<H1 style="text-align:center">Open Data Access</H1>

+<p></p>

+<h6 class="CaptionFigColumn SchemaHeader">Identifier: </h6>org.eclipse.datatools.connectivity.oda.dataSource<p></p>

+<h6 class="CaptionFigColumn SchemaHeader">Since: </h6>3.0

+<p></p>

+

+<h6 class="CaptionFigColumn SchemaHeader">Description: </h6>[API] This extension point is used to support the extension of design-time and run-time data source access by a data application.  Each extension must implement the Open Data Access (ODA) Java runtime interfaces defined in the <i>org.eclipse.datatools.connectivity.oda</i> package.<p></p>

+<h6 class="CaptionFigColumn SchemaHeader">Configuration Markup:</h6>

+<p></p>

+<p class="code SchemaDtd">&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.dataSource">dataSource</a> , <a href="#e.dataSet">dataSet</a>+)&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST extension</p>

+<p class="code SchemaDtdAttlist">point&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">name&nbsp;&nbsp;CDATA #IMPLIED</p>&gt;</p>

+<p></p>

+<ul class="ConfigMarkupAttlistDesc">

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.dataSource">dataSource</a> (<a href="#e.traceLogging">traceLogging</a>? , <a href="#e.properties">properties</a>? , <a href="#e.relationship">relationship</a>*)&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST dataSource</p>

+<p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">odaVersion&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA "3.0"</p><p class="code SchemaDtdAttlist">defaultDisplayName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">driverClass&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">setThreadContextClassLoader&nbsp;(true | false) "false"</p><p class="code SchemaDtdAttlist">overrideExplorerFiltering&nbsp;&nbsp;&nbsp;(true | false) "false"</p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+The definition of a type of ODA data source extension for use at design-time and run-time.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>id</b> - A fully qualified ID that uniquely identifies this ODA data source extension within an ODA consumer application's environment. If a data source designer extension (that implements <i>org.eclipse.datatools.connectivity.oda.design.ui.dataSource</i> extension point) is available for this ODA driver, the value of this attribute must match that of the designer extension's <i>id</i> attribute in its data source element.</li>

+<li><b>odaVersion</b> - Version of the ODA interfaces for which this driver is developed. This element is required and should take the format of Major.Minor or Major.Minor.Service (e.g. 3.0 or 2.0.1).</li>

+<li><b>defaultDisplayName</b> - The display name of the ODA data source extension.  Its value can be localized by using the plugin.properties mechanism.  Default to the extension id if no display name is specified.
+It can be used by an ODA consumer application's designer tool in displaying a list of ODA data source extensions, when they do not have a corresponding data source editor (data source UI extension point).</li>

+<li><b>driverClass</b> - Concrete class that implements the <i>org.eclipse.datatools.connectivity.oda.IDriver</i> interface. This is the entry point of the ODA runtime driver.  The same driver may support multiple data source extensions.</li>

+<li><b>setThreadContextClassLoader</b> - If true, the consumer of the ODA runtime extension plug-in should set the thread context class loader to the one used to load this driver before calling any ODA interface method.
+Any data source plug-in extension with this flag set to true would take precedence, and is applied to all data source extensions implemented by this plug-in. 
+<br>
+If the thread context class loader being set is the OSGi class loader that was used to load this ODA runtime plugin, it is not designed to be used by a plugin to in turn load additional classes.  If further class loading is needed, it is up to individual ODA runtime plugin implementation to provide its own URLClassLoader, and switch thread context class loader as appropriate.</li>

+<li><b>overrideExplorerFiltering</b> - Overrides the ODA extension explorer filtering behavior.  Default value is false.  If set to true, this extension is always made visible to the client even if it would have been excluded by the ODA extension explorer filtering.
+<br>@since 3.2.2 (DTP 1.7.2)</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.dataSet">dataSet</a> (<a href="#e.dataTypeMapping">dataTypeMapping</a>+ , <a href="#e.properties">properties</a>? , <a href="#e.relationship">relationship</a>?)&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST dataSet</p>

+<p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">defaultDisplayName&nbsp;CDATA #IMPLIED</p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+The definition of a type of data set supported by the dataSource extension.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>id</b> - A fully qualified ID that uniquely identifies this ODA data set definition within an ODA consumer application's environment.</li>

+<li><b>defaultDisplayName</b> - The display name of the ODA data set definition.  Its value can be localized by using the plugin.properties mechanism.  Default to its id if no display name is specified.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.dataTypeMapping">dataTypeMapping</a> (<a href="#e.alternativeOdaDataType">alternativeOdaDataType</a>*)&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST dataTypeMapping</p>

+<p class="code SchemaDtdAttlist">nativeDataType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">nativeDataTypeCode&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">odaScalarDataType&nbsp;&nbsp;(Date|Double|Integer|String|Time|Timestamp|Decimal|Blob|Clob|Boolean|JavaObject) "String"</p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+A data types mapping from a data provider's native data type to one or more ODA data types.  
+Each native data type must be mapped to a primary ODA scalar data type.  The driver can optionally provide a list of alternate ODA data types to which it is capable of converting a native data type.
+This data type mapping facilitates all ODA consumers to map from the same set of ODA data types to its own application-specific data types.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>nativeDataType</b> - Native data type name (a string).  Used for information only.</li>

+<li><b>nativeDataTypeCode</b> - Native data type code (an integer). Its value must match one of the data type codes returned in the driver's ODA interface implementation.</li>

+<li><b>odaScalarDataType</b> - The primary ODA scalar data type to which the native type is mapped. Supported ODA data types are: Date, Double, Integer, String, Time, Timestamp, Decimal, Blob, Clob, Boolean and Java Object.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.alternativeOdaDataType">alternativeOdaDataType</a> EMPTY&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST alternativeOdaDataType</p>

+<p class="code SchemaDtdAttlist">odaScalarDataType&nbsp;(Date|Double|Integer|String|Time|Timestamp|Decimal|Blob|Clob|Boolean|JavaObject) </p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+Provide an alternative mapping to an ODA scalar data type.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>odaScalarDataType</b> - The ODA scalar data type to which the native type may be converted by the driver.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.traceLogging">traceLogging</a> EMPTY&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST traceLogging</p>

+<p class="code SchemaDtdAttlist">logLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA "WARNING"</p><p class="code SchemaDtdAttlist">logFileNamePrefix&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">logDirectory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">logFormatterClass&nbsp;CDATA #IMPLIED</p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+Configures the ODA run-time driver's trace logging settings for the data source extension.
+The configured values are passed through to the driver's implementation of the <code>IDriver.setLogConfiguration</code> method.
+<br>It is up to individual ODA driver on how to honor any of these trace logging attributes as appropriate.
+
+<br><br>Note: The trace logging configuration specified in the plug-in PDE .options file would take precedence over those configured in this element, if the debug tracing flag is set to "true".
+<br>The ODA plug-in's PDE tracing options, listed below for cross reference, match the attributes of this element.
+<br>&nbsp;&nbsp;&nbsp;
+&lt;plug-in Id&gt;/debug = true/false
+<br>&nbsp;&nbsp;&nbsp;
+&lt;plug-in Id&gt;/traceLogging/logLevel 
+<br>&nbsp;&nbsp;&nbsp;
+&lt;plug-in Id&gt;/traceLogging/logFileNamePrefix 
+<br>&nbsp;&nbsp;&nbsp;
+&lt;plug-in Id&gt;/traceLogging/logDirectory
+<br>&nbsp;&nbsp;&nbsp;
+&lt;plug-in Id&gt;/traceLogging/logFormatterClass</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>logLevel</b> - The name or numeric value for the driver's log level.
+<br>The log levels' names and corresponding numeric values are:
+<br>
+ "SEVERE"       = 1000;
+ "WARNING"      = 900;
+ "INFO"         = 800;
+ "CONFIG"       = 700;
+ "FINE"         = 500;
+ "FINER"        = 400;
+ "FINEST"       = 300;
+ "ALL"          = 0;
+ "OFF"          = 1001 or higher .</li>

+<li><b>logFileNamePrefix</b> - A string prefix for driver's log file name.</li>

+<li><b>logDirectory</b> - Directory for log file.</li>

+<li><b>logFormatterClass</b> - The class name of a concrete log formatter, suitable for use by the driver-specific logging utility.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.property">property</a> (<a href="#e.choice">choice</a>*)&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST property</p>

+<p class="code SchemaDtdAttlist">name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">defaultDisplayName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(string|choice) "string"</p><p class="code SchemaDtdAttlist">canInherit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(true | false) "true"</p><p class="code SchemaDtdAttlist">defaultValue&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">isEncryptable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(true | false) "false"</p><p class="code SchemaDtdAttlist">allowsEmptyValueAsNull&nbsp;(true | false) "true"</p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+A property whose value can be edited at design-time using an ODA consumer application's designer tool.  Its value is then passed to the ODA runtime driver during run-time.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>name</b> - Unique name of the property.</li>

+<li><b>defaultDisplayName</b> - The default display name.  Its value can be localized by using the plugin.properties mechanism.</li>

+<li><b>type</b> - Type of the property. The property type could be one of the values listed in the Restriction enumerations.</li>

+<li><b>canInherit</b> - Reserved.</li>

+<li><b>defaultValue</b> - Default value of the property, if no property value is set.</li>

+<li><b>isEncryptable</b> - A flag indicating whether this property value is encryptable.  Setting it to "true" indicates to an ODA consumer application that this property's value should be encrypted.</li>

+<li><b>allowsEmptyValueAsNull</b> - A flag that indicates whether an empty value of this property can be treated as a null value.  Default value is true.  This attribute setting applies when an ODA consumer passes the property's value to this ODA runtime driver.  This optional attribute may be used to accommodate the case where a property value's input control does not provide the means to specify a null value.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.propertyGroup">propertyGroup</a> (<a href="#e.property">property</a>+)&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST propertyGroup</p>

+<p class="code SchemaDtdAttlist">name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">defaultDisplayName&nbsp;CDATA #IMPLIED</p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+A grouping of one or more properties in an ODA consumer application's designer tool.  The group attributes are for display only.  All properties listed under a propertyGroup are handled as scalar properties at run-time.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>name</b> - </li>

+<li><b>defaultDisplayName</b> - The default display name.  Its value can be localized by using the plugin.properties mechanism.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.propertyVisibility">propertyVisibility</a> EMPTY&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST propertyVisibility</p>

+<p class="code SchemaDtdAttlist">name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">visibility&nbsp;(change|lock|hide) </p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+Used to set the visibility level of the named property when it is shown in the property sheet of an ODA consumer application's designer tool.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>name</b> - The name of a property that is defined either by this data source extension or is a system-defined property.</li>

+<li><b>visibility</b> - The valid options are: change, hide, lock.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.choice">choice</a> EMPTY&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST choice</p>

+<p class="code SchemaDtdAttlist">name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">value&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">defaultDisplayName&nbsp;CDATA #IMPLIED</p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+Choice of property values.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>name</b> - Name of the choice</li>

+<li><b>value</b> - Value to be used, if the given choice is selected.</li>

+<li><b>defaultDisplayName</b> - The default display name.  Its value can be localized by using the plugin.properties mechanism.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.properties">properties</a> (<a href="#e.property">property</a>* , <a href="#e.propertyGroup">propertyGroup</a>* , <a href="#e.propertyVisibility">propertyVisibility</a>*)&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+A collection of property definitions in a data source extension or its supported data set definitions.</p>

+<br><br>

+<p class="code SchemaDtd">&lt;!ELEMENT <a name="e.relationship">relationship</a> EMPTY&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST relationship</p>

+<p class="code SchemaDtdAttlist">type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(replacedBy|wrapperOf) </p><p class="code SchemaDtdAttlist">relatedId&nbsp;CDATA #REQUIRED</p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+An optional element to specify the relationship(s) of this element.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>type</b> - The type of relationship that this extension's dataSource or dataSet element has with the <i>relatedId</i> element.
+Valid value(s) are: 
+<br>* <i>replacedBy</i>: specifies that this dataSource/dataSet is deprecated and replaced by that of <i>relatedId</i>.  It is up to an ODA host to apply as appropriate, e.g. to migrate its reference of a deprecated extension, and to control which ODA extension to use at runtime.  A deprecated data source type is hidden by default from the list of data sources presented in the ODA design UI framework, such as for creating a new connection profile instance.
+<br>* <i>wrapperOf</i>: specifies that this dataSource/dataSet is a wrapper of the <i>relatedId</i> identifier.  A wrapper data source type is hidden by default from the list of available data sources presented in the ODA design UI framework. Since: 3.1.2.</li>

+<li><b>relatedId</b> - The fully qualified ID of the related ODA data source or data set element.
+Its value for a  <i>replacedBy</i> type must match that of the corresponding <i>dataSource.id</i> or <i>dataSet.id</i> attribute defined in another ODA driver's <i>org.eclipse.datatools.connectivity.oda.dataSource</i> extension.</li>

+</ul>

+<br><h6 class="CaptionFigColumn SchemaHeader">Examples: </h6><p>
+   <pre class="Example"><span class="code SchemaTag">
+   &lt;extension
+         point=</span><span class="code SchemaCstring">&quot;org.eclipse.datatools.connectivity.oda.dataSource&quot;</span><span class="code SchemaTag">&gt;
+      &lt;dataSource
+            odaVersion=</span><span class="code SchemaCstring">&quot;3.1&quot;</span><span class="code SchemaTag">
+            driverClass=</span><span class="code SchemaCstring">&quot;org.eclipse.datatools.connectivity.oda.flatfile.FlatFileDriver&quot;</span><span class="code SchemaTag">
+            defaultDisplayName=</span><span class="code SchemaCstring">&quot;Flat File Data Source&quot;</span><span class="code SchemaTag">
+            id=</span><span class="code SchemaCstring">&quot;org.eclipse.datatools.connectivity.oda.flatfile&quot;</span><span class="code SchemaTag">
+            setThreadContextClassLoader=</span><span class="code SchemaCstring">&quot;false&quot;</span><span class="code SchemaTag">&gt;
+         &lt;properties&gt;
+         &lt;propertyGroup
+               defaultDisplayName=</span><span class="code SchemaCstring">&quot;Connection Properties&quot;</span><span class="code SchemaTag">
+               name=</span><span class="code SchemaCstring">&quot;connectionProperties&quot;</span><span class="code SchemaTag">&gt;
+            &lt;property
+                  type=</span><span class="code SchemaCstring">&quot;string&quot;</span><span class="code SchemaTag">
+                  defaultDisplayName=</span><span class="code SchemaCstring">&quot;Home Folder&quot;</span><span class="code SchemaTag">
+                  canInherit=</span><span class="code SchemaCstring">&quot;true&quot;</span><span class="code SchemaTag">
+                  name=</span><span class="code SchemaCstring">&quot;HOME&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;property
+                  type=</span><span class="code SchemaCstring">&quot;string&quot;</span><span class="code SchemaTag">
+                  defaultDisplayName=</span><span class="code SchemaCstring">&quot;Character Set&quot;</span><span class="code SchemaTag">
+                  canInherit=</span><span class="code SchemaCstring">&quot;true&quot;</span><span class="code SchemaTag">
+                  name=</span><span class="code SchemaCstring">&quot;CHARSET&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;property
+                  type=</span><span class="code SchemaCstring">&quot;string&quot;</span><span class="code SchemaTag">
+                  canInherit=</span><span class="code SchemaCstring">&quot;true&quot;</span><span class="code SchemaTag">
+                  defaultDisplayName=</span><span class="code SchemaCstring">&quot;Includes Data Type (Yes/No)&quot;</span><span class="code SchemaTag">
+                  name=</span><span class="code SchemaCstring">&quot;INCLTYPELINE&quot;</span><span class="code SchemaTag">/&gt;                 
+         &lt;/propertyGroup&gt;
+         &lt;/properties&gt;
+      &lt;/dataSource&gt;
+      &lt;dataSet
+            defaultDisplayName=</span><span class="code SchemaCstring">&quot;Flat File Data Set&quot;</span><span class="code SchemaTag">
+            id=</span><span class="code SchemaCstring">&quot;org.eclipse.datatools.connectivity.oda.flatfile.dataSet&quot;</span><span class="code SchemaTag">&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;BIT&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;-7&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;Integer&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;TINYINT&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;-6&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;Integer&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;SMALLINT&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;5&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;Integer&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;INTEGER&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;4&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;Integer&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;BIGINT&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;-5&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;Decimal&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;FLOAT&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;6&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;Double&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;REAL&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;7&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;Double&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;DOUBLE&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;8&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;Double&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;NUMERIC&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;2&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;Decimal&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;DECIMAL&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;3&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;Decimal&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;CHAR&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;1&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;String&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;VARCHAR&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;12&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;String&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;LONGVARCHAR&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;-1&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;String&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;DATE&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;91&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;Date&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;TIME&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;92&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;Time&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;TIMESTAMP&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;93&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;Timestamp&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;BINARY&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;-2&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;String&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;VARBINARY&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;-3&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;String&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;LONGVARBINARY&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;-4&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;String&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;BOOLEAN&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;16&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;Boolean&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;BLOB&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;2004&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;String&quot;</span><span class="code SchemaTag">/&gt;
+            &lt;dataTypeMapping
+                  nativeDataType=</span><span class="code SchemaCstring">&quot;CLOB&quot;</span><span class="code SchemaTag">
+                  nativeDataTypeCode=</span><span class="code SchemaCstring">&quot;2005&quot;</span><span class="code SchemaTag">
+                  odaScalarDataType=</span><span class="code SchemaCstring">&quot;String&quot;</span><span class="code SchemaTag">/&gt;
+      &lt;/dataSet&gt;
+   &lt;/extension&gt; 
+   </span></pre>
+</p>

+<p></p>

+

+<h6 class="CaptionFigColumn SchemaHeader">API Information: </h6>The data source extension's driver must implement the interfaces defined in the <i>org.eclipse.datatools.connectivity.oda</i> package. See the package's JavaDoc documentation and API interfaces for more information.

+<p></p>

+

+<h6 class="CaptionFigColumn SchemaHeader">Supplied Implementation: </h6>The ODA framework provides an ODA Plug-in Project Template Wizard to automatically generate a custom ODA plug-in project with a set of default implementation of the main ODA interfaces.  The wizard is available in the New->Project... dialog; one for ODA Runtime Driver, another for ODA Designer. 
+<br>
+Their generated implementation classes assume the behavior of a simple ODA driver and designer UI.  They contain TODO task tags for an ODA driver developer to implement data source specific behavior.
+These concrete classes are provided to aid in the development of a custom ODA data source.  Their use is purely optional.

+<p></p>

+

+<br>

+<p class="note SchemaCopyright">

+Copyright (c) 2004-2009 Actuate Corporation.
+All rights reserved. This program and the accompanying materials are made available under the  terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html

+

+</p>

+</BODY>

+</HTML>

diff --git a/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_oda_design_ui_datasource.html b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_oda_design_ui_datasource.html
new file mode 100644
index 0000000..299f9df
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_oda_design_ui_datasource.html
@@ -0,0 +1,148 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Open Data Access Designer</title>
+<style>@import url("file:/D:/Lang/eclipse_32M5a/plugins/org.eclipse.sdk_3.2.0.v20060214/book.css");</style>
+<style>@import url("file:/D:/Lang/eclipse_32M5a/configuration/org.eclipse.osgi/bundles/192/1/.cp/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>Open Data Access Designer</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.connectivity.oda.design.ui.dataSource<p></p>
+<h6 class=CaptionFigColumn id=header>Since: </h6>3.0
+<p></p>
+
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>This extension point provides extensibility to the Open Data Access (ODA) Designer UI framework, through which an user may define an ODA data source design and a data set design.  
+<br>An ODA driver that implements the ODA run-time extension point may optionally extend this ODA UI extension point to contribute customized ODA design wizard and property pages.</p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.dataSourceUI">dataSourceUI</a> , <a href="#e.dataSetUI">dataSetUI</a>+)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.dataSourceUI">dataSourceUI</a> (<a href="#e.newDataSourceWizard">newDataSourceWizard</a>)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST dataSourceUI</p>
+<p class=code id=dtdAttlist>id&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+Allows ODA data providers to define a customized dialog page for an user to create a new ODA data source design instance.</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>id</b> - A fully qualified ID that uniquely identifies the ODA data source extension within an ODA consumer application's environment.  Its value must match that of the <i>dataSource.id</i> attribute defined in the  <i>org.eclipse.datatools.connectivity.oda.dataSource</i> extension of the same ODA driver.  
+When implementing the <i>org.eclipse.datatools.connectivity.connectionProfile</i> extension point, its <i>connectionProfile.id</i> attribute must also match this id value.</li>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.newDataSourceWizard">newDataSourceWizard</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST newDataSourceWizard</p>
+<p class=code id=dtdAttlist>windowTitle&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>includesProgressMonitor&nbsp;(true | false) "true"<p class=code id=dtdAttlist>pageTitle&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>pageClass&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+Defines the customizable behavior of a data source wizard that allows an user to create a new ODA data source design instance.
+<br>The implementation class of the data source wizard is specified in the <i>newWizard.class</i> attribute defined in the <i>org.eclipse.datatools.connectivity.connectionProfile</i> extension point.  
+<br>The wizard class must either use or extend from the ODA framework's wizard base class, <i>org.eclipse.datatools.connectivity.oda.design.ui.wizards.NewDataSourceWizard</i>. 
+<br><br>
+This element includes the attributes to specify the customized wizard starting page that an extension contributes to the data source wizard.</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>windowTitle</b> - The customized title of the data source wizard window.</li>
+<li><b>includesProgressMonitor</b> - Indicates whether the data source wizard should include a progress monitor.  Default value is "true".</li>
+<li><b>pageTitle</b> - The page title of the data source wizard's customized starting page.  This value, if specified, overrides any title that may have been set by the wizard page's constructor.</li>
+<li><b>pageClass</b> - A fully qualified class name that implements the wizard starting page for creating a new ODA data source design instance.
+<br>This class must extend from the ODA abstract base class, <i>org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSourceWizardPage</i>.
+<br>A default concrete implementation class is provided in the ODA framework,  <i>org.eclipse.datatools.connectivity.oda.design.ui.pages.impl.DefaultDataSourceWizardPage</i>.  An ODA extension may choose to use or extend from this default implementation class.</li>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.dataSetUI">dataSetUI</a> (<a href="#e.dataSetWizard">dataSetWizard</a> , <a href="#e.dataSetPage">dataSetPage</a>+)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST dataSetUI</p>
+<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>initialPageId&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>supportsInParameters&nbsp;&nbsp;(true | false) "true"<p class=code id=dtdAttlist>supportsOutParameters&nbsp;(true | false) "false"&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+Allows ODA data providers to define customized dialog page(s) for an user to create or edit an ODA data set design instance.
+The element defines child elements for the data set wizard page(s) and editor page(s).  
+<br>An ODA host designer may use the custom wizard pages' control for editing a data set design instance.</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>id</b> - A fully qualified ID that uniquely identifies the ODA data set type within an ODA data source extension.  Its value must match that of the <i>dataSet.id</i> attribute defined in the  <i>org.eclipse.datatools.connectivity.oda.dataSource</i> extension of the same ODA driver.</li>
+<li><b>initialPageId</b> - Identifies a particular dataSetPage that should be selected in a data set dialog.</li>
+<li><b>supportsInParameters</b> - Indicates that this type of data set design supports input parameter definitions, and that an ODA host designer might need to collect further metadata on the parameter definitions provided by the customized page(s).</li>
+<li><b>supportsOutParameters</b> - Indicates that this type of data set design supports output parameter definitions, and that an ODA host designer might need to collect further metadata on the parameter definitions provided by the customized page(s).</li>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.dataSetWizard">dataSetWizard</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST dataSetWizard</p>
+<p class=code id=dtdAttlist>class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA "org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizard"<p class=code id=dtdAttlist>windowTitle&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+Defines a data set wizard that allows an user to create or edit an ODA data set design instance.</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>class</b> - The implementation class of the data set wizard.  
+<br>The wizard class must either use or extend from the ODA framework's wizard base class, <i>org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizard</i>.</li>
+<li><b>windowTitle</b> - The customized title of the data set wizard window.</li>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.dataSetPage">dataSetPage</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST dataSetPage</p>
+<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>wizardPageClass&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>displayName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>icon&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+Defines a customized page that an extension contributes to an ODA host designer's data set dialog.</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>id</b> - A unique name of this page within a data set dialog.</li>
+<li><b>wizardPageClass</b> - A fully qualified class name that implements a data set wizard page to create or edit an ODA data set design instance.
+<br>This class must extend from the ODA abstract base class, <i>org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizardPage</i>.</li>
+<li><b>displayName</b> - The page title or descriptive name of a customized page that will be displayed in the UI of this page.
+This value, if specified, overrides any title or descriptive name that may have been set by the page's constructor.</li>
+<li><b>path</b> - The path of the page in a data set preference dialog.
+<br>To add the page to the root node, specify "/" in this value.  Default value is "/".
+<br>To add the page as a child of another page node, specify its full path starting with a "/"; and use the  "/" as a separator in between each page node in the hierarchy.
+<br>For example, a path value "/parent" would add this page as a child node to an existing page called "parent".
+<br><br>Note: The page with the name "parent" should have been added before attempting to add the child page.</li>
+<li><b>icon</b> - A relative path to an icon that will be used in the UI in addition to the page's display name.</li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>Examples: </h6><p>
+   <pre>
+   <p class=code id=tag>&lt;extension
+  point=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.oda.design.ui.dataSource&quot;</p><p class=code id=tag>&gt;</p>
+      <p class=code id=tag>&lt;dataSourceUI id=<p class=code id=cstring>&quot;%oda.data.source.id&quot;</p><p class=code id=tag>&gt;</p>
+         <p class=code id=tag>&lt;newDataSourceWizard
+               pageClass=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.oda.flatfile.ui.wizards.FolderSelectionWizardPage&quot;</p><p class=code id=tag>
+               pageTitle=<p class=code id=cstring>&quot;Select Folder&quot;</p><p class=code id=tag>
+               windowTitle=<p class=code id=cstring>&quot;New Flat File Data Source Profile&quot;</p><p class=code id=tag>
+               includesProgressMonitor=<p class=code id=cstring>&quot;false&quot;</p><p class=code id=tag>/&gt;</p>
+      <p class=code id=tag>&lt;/dataSourceUI&gt;</p>
+      <p class=code id=tag>&lt;dataSetUI
+            id=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.oda.flatfile.dataSet&quot;</p><p class=code id=tag>
+            initialPageId=<p class=code id=cstring>&quot;oda.flatfile.ui.tablePage&quot;</p><p class=code id=tag>
+            supportsInParameters=<p class=code id=cstring>&quot;false&quot;</p><p class=code id=tag>
+            supportsOutParameters=<p class=code id=cstring>&quot;false&quot;</p><p class=code id=tag>&gt;</p>
+         <p class=code id=tag>&lt;dataSetWizard
+               class=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizard&quot;</p><p class=code id=tag>
+               windowTitle=<p class=code id=cstring>&quot;Select Table&quot;</p><p class=code id=tag>/&gt;</p>
+         <p class=code id=tag>&lt;dataSetPage
+               displayName=<p class=code id=cstring>&quot;Select Columns&quot;</p><p class=code id=tag>
+               icon=<p class=code id=cstring>&quot;icons/file.gif&quot;</p><p class=code id=tag>
+               id=<p class=code id=cstring>&quot;oda.flatfile.ui.tablePage&quot;</p><p class=code id=tag>
+               path=<p class=code id=cstring>&quot;/&quot;</p><p class=code id=tag>
+               wizardPageClass=<p class=code id=cstring>&quot;org.eclipse.datatools.connectivity.oda.flatfile.ui.wizards.FileSelectionWizardPage&quot;</p><p class=code id=tag>/&gt;</p>
+      <p class=code id=tag>&lt;/dataSetUI&gt;</p>
+   <p class=code id=tag>&lt;/extension&gt;</p>
+   </pre>
+</p>
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>API Information: </h6>[<b>Provisional</b>] An extension must implement the related dialog pages defined in the extension point's schema. 
+See the abstract base classes' JavaDoc documentation in the <i>org.eclipse.datatools.connectivity.oda.design.ui</i> project for more information.
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>Supplied Implementation: </h6>The plug-in <i>org.eclipse.datatools.connectivity.oda.flatfile.ui</i>, supplied with the Eclipse DTP Connectivity source, provides an example for implementing a simple ODA Design UI extension.
+<p></p>
+
+<br>
+<p class=note id=copyright>
+Copyright (c) 2006 Actuate Corporation.
+All rights reserved. This program and the accompanying materials are made available under the  terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
+<p></p>
+
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_oda_dynamicResultSet.html b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_oda_dynamicResultSet.html
new file mode 100644
index 0000000..2e9d8ae
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_oda_dynamicResultSet.html
@@ -0,0 +1,224 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

+<HTML>

+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

+<title>ODA Dynamic Result Set</title>

+<style type="text/css">@import url("file:/D:/dev/eclipse_platform/eclipse_37/plugins/org.eclipse.sdk_3.7.0.v201106131736/book.css");</style>

+<style type="text/css">@import url("file:/D:/dev/eclipse_platform/eclipse_37/configuration/org.eclipse.osgi/bundles/624/1/.cp/schema.css");</style>

+</HEAD>

+<BODY>

+<H1 style="text-align:center">ODA Dynamic Result Set</H1>

+<p></p>

+<h6 class="CaptionFigColumn SchemaHeader">Identifier: </h6>org.eclipse.datatools.connectivity.oda.dynamicResultSet<p></p>

+<h6 class="CaptionFigColumn SchemaHeader">Since: </h6>3.3 (DTP 1.8)

+<p></p>

+

+<h6 class="CaptionFigColumn SchemaHeader">Description: </h6>[API] This extension point is for declaring support of dynamic operations, such as filtering, row ordering and projection, on a result set of an ODA data source extension.<p></p>

+<h6 class="CaptionFigColumn SchemaHeader">Configuration Markup:</h6>

+<p></p>

+<p class="code SchemaDtd">&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.contributor">contributor</a> , <a href="#e.filterExpressionTypes">filterExpressionTypes</a>? , <a href="#e.aggregateExpressionTypes">aggregateExpressionTypes</a>? , <a href="#e.valueExpressionTypes">valueExpressionTypes</a>?)&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST extension</p>

+<p class="code SchemaDtdAttlist">point&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">name&nbsp;&nbsp;CDATA #IMPLIED</p>&gt;</p>

+<p></p>

+<ul class="ConfigMarkupAttlistDesc">

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.contributor">contributor</a> (<a href="#e.supportedDataSetType">supportedDataSetType</a>+ , <a href="#e.supportsRowOrdering">supportsRowOrdering</a>?)&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST contributor</p>

+<p class="code SchemaDtdAttlist">validatorClass&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">specificationFactoryClass&nbsp;CDATA #IMPLIED</p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+Defines the scope and capabilities of this extension's contributor.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>validatorClass</b> - The fully qualified name of a Java concrete class that implements the runtime validator to validate all its contributed expressions and any dynamic result set specification that may be set by an ODA consumer application. The class must be public and implement the <i>org.eclipse.datatools.connectivity.oda.spec.IValidator</i> interface with a public 0-argument constructor.</li>

+<li><b>specificationFactoryClass</b> - The fully qualified name of a Java concrete factory class that creates extended specification classes for use in an ODA extension's dynamic query specification. The class must be public and extends the <i>org.eclipse.datatools.connectivity.oda.spec.util.QuerySpecificationFactory</i> base class with a public 0-argument constructor.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.filterExpressionTypes">filterExpressionTypes</a> (<a href="#e.supportedOdaFilterExpression">supportedOdaFilterExpression</a>* , <a href="#e.filterType">filterType</a>+)&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+A grouping of supportedOdaFilterExpression and filterType elements, defining the types of filter expression supported or contributed by this extension for all its supported data set types.</p>

+<br><br>

+<p class="code SchemaDtd">&lt;!ELEMENT <a name="e.filterType">filterType</a> (<a href="#e.variableRestriction">variableRestriction</a>*)&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST filterType</p>

+<p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">displayName&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">description&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">minArguments&nbsp;CDATA "1"</p><p class="code SchemaDtdAttlist">maxArguments&nbsp;CDATA "*"</p><p class="code SchemaDtdAttlist">isNegatable&nbsp;&nbsp;(true | false) "false"</p><p class="code SchemaDtdAttlist">isOptionable&nbsp;(true | false) "false"</p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+Defines a type of filter expression contributed by this extension.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>id</b> - The id that uniquely identifies this type of filter expression within the extension.</li>

+<li><b>displayName</b> - A translatable name that will be used to refer to this particular expression type in dialogs presented to the user. Default to the expression id if no name is specified.  The name should be unique within the extension.</li>

+<li><b>description</b> - A brief translatable description of this type of filter expression type.  It may be used to describe this particular expression in dialogs presented to the user.</li>

+<li><b>class</b> - The fully qualified name of a concrete implementation class of this custom filter expression. 
+<br>Must extend from the  <i>org.eclipse.datatools.connectivity.oda.spec.result.filter.CustomExpression</i> base class.  The extended class must be public with a public 0-argument constructor.</li>

+<li><b>minArguments</b> - The minimum number of arguments required by this expression type.  The value must be zero or higher integer value.</li>

+<li><b>maxArguments</b> - The maximum number of arguments required by this expression type.  It must be an integer value greater or equal to the <i>minArgments</i> value, or "*" for unbounded, i.e. no upper limit on the maximum.  The default value is  "*" for unbounded.</li>

+<li><b>isNegatable</b> - Indicates whether the expression type can be negated, i.e. applied with a NotExpression. The default value is false.</li>

+<li><b>isOptionable</b> - Indicates whether the custom expression type can be optional and skipped in a filter specification if none of its expected argument values are provided.  The default value is false.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.aggregateExpressionTypes">aggregateExpressionTypes</a> (<a href="#e.aggregateType">aggregateType</a>+)&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+A grouping of one or more aggregateType elements, defining the types of aggregate expression contributed by this extension for all its supported data set types.</p>

+<br><br>

+<p class="code SchemaDtd">&lt;!ELEMENT <a name="e.aggregateType">aggregateType</a> (<a href="#e.variableRestriction">variableRestriction</a>*)&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST aggregateType</p>

+<p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">displayName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">description&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">minInputVariables&nbsp;&nbsp;&nbsp;CDATA "1"</p><p class="code SchemaDtdAttlist">maxInputVariables&nbsp;&nbsp;&nbsp;CDATA "1"</p><p class="code SchemaDtdAttlist">canIgnoreDuplicates&nbsp;(true | false) "false"</p><p class="code SchemaDtdAttlist">canIgnoreNull&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(true | false) "false"</p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+Defines a type of aggregate expression contributed by this extension.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>id</b> - The id that uniquely identifies this aggregate type within the extension.</li>

+<li><b>displayName</b> - A translatable name that will be used to refer to this particular aggregate expression type in dialogs presented to the user. Default to the expression id if no name is specified.  The name should be unique within the extension.</li>

+<li><b>description</b> - A brief translatable description of this type of aggregate.  It may be used to describe this particular aggregate type in dialogs presented to the user.</li>

+<li><b>class</b> - The fully qualified name of a concrete implementation class of this custom aggregate type 
+<br>Must extend from the  <i>org.eclipse.datatools.connectivity.oda.spec.result.CustomAggregate</i> base class.  The extended class must be public with a public 0-argument constructor.</li>

+<li><b>minInputVariables</b> - The minimum number of input source variables required by this aggregate expression type.  The value must be zero or higher integer value.  The default value is  "1".</li>

+<li><b>maxInputVariables</b> - The maximum number of input source variables required by this aggregate expression type.  It must be an integer value greater or equal to the <i>minInputVariables</i> value, or "*" for unbounded, i.e. no upper limit on the maximum.  The default value is  "1".</li>

+<li><b>canIgnoreDuplicates</b> - Indicates whether the aggregate type is capable of ignoring duplicate values of its input source variable. The default value is false.</li>

+<li><b>canIgnoreNull</b> - Indicates whether the aggregate type is capable of ignoring null values of its input source variable. The default value is false.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.variableRestriction">variableRestriction</a> ((<a href="#e.variableOdaDataTypeRestriction">variableOdaDataTypeRestriction</a> | <a href="#e.variableClassRestriction">variableClassRestriction</a>))*&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST variableRestriction</p>

+<p class="code SchemaDtdAttlist">variableType&nbsp;(ResultSetColumn|InstanceOf|QueryExpression) "ResultSetColumn"</p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+Restriction on the type of variables that can be applied with the expression.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>variableType</b> - The type of variables that can be applied with the associated expression.  The ResultSetColumn variable type is applied as the default restriction, if none is specified.  A QueryExpression variable type is a superset that covers any value expression types including a ResultSetColumn reference.
+Further restriction on a type of variable, such as the data types, may be defined by its type-specific variable restriction element. No further restrictions exist if none is specified.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.variableOdaDataTypeRestriction">variableOdaDataTypeRestriction</a> EMPTY&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST variableOdaDataTypeRestriction</p>

+<p class="code SchemaDtdAttlist">odaScalarDataType&nbsp;(String|Integer|Double|Decimal|Date|Time|Timestamp|Boolean|Blob|Clob|JavaObject) </p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+The restriction on the ODA data types of a variable that can be applied with this expression.  For example, a string pattern matching expression would restrict its use with a string-typed variable.
+An expression has no data type restriction if none is specified.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>odaScalarDataType</b> - A compatible data type of the target variable.  It is used to restrict the data type of variables that can be applied with this expression type.   For example, a pattern matching expression may only be applicable to a variable of the String data type.
+It must be an ODA scalar data type supported by the ODA data source provider, as defined in its datasource extension's dataSet.dataTypeMapping.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.variableClassRestriction">variableClassRestriction</a> EMPTY&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST variableClassRestriction</p>

+<p class="code SchemaDtdAttlist">class&nbsp;CDATA #REQUIRED</p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+The restriction on the type of instance variables that can be applied with this expression.  
+An expression has no restriction on the type of instance variable if none is specified.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>class</b> - The concrete class name of an instance variable.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.supportedDataSetType">supportedDataSetType</a> EMPTY&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST supportedDataSetType</p>

+<p class="code SchemaDtdAttlist">odaDataSourceId&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">odaDataSetId&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+The ODA data set type to which this extension contributes filtering support.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>odaDataSourceId</b> - A fully qualified id that uniquely identifies the ODA data source type to which this extension contributes filtering support.  
+Its value must match the <i>dataSource.id</i> attribute value defined in the  <i>org.eclipse.datatools.connectivity.oda.dataSource</i> extension of the supported ODA runtime driver.</li>

+<li><b>odaDataSetId</b> - An id that uniquely identifies the ODA data set type within the supported data source type, whose id is specified in the odaDataSourceId attribute.  
+Its value must match the <i>dataSet.id</i> attribute value defined within the <i>org.eclipse.datatools.connectivity.oda.dataSource</i> extension of the supported ODA runtime driver.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.supportedOdaFilterExpression">supportedOdaFilterExpression</a> EMPTY&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST supportedOdaFilterExpression</p>

+<p class="code SchemaDtdAttlist">name&nbsp;(AndExpression|OrExpression|NotExpression) </p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+The type of ODA composite filter expression supported by the extension for all its supported data set types.  It must be one of the built-in concrete filter expressions pre-defined by the ODA filter framework.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>name</b> - </li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.supportsRowOrdering">supportsRowOrdering</a> EMPTY&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST supportsRowOrdering</p>

+<p class="code SchemaDtdAttlist">nullValueOrdering&nbsp;(true | false) </p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+Indicates this extension contributes dynamic row ordering of its result sets for all its supported data set types.  Absence of this element indicates no support.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>nullValueOrdering</b> - Indicates whether this row ordering support can also handle ordering of null vs. non-null values in the row order. The default value is false for no control over null value ordering.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.valueExpressionTypes">valueExpressionTypes</a> (<a href="#e.combinedOperatorTypes">combinedOperatorTypes</a>? , <a href="#e.functionExpressionType">functionExpressionType</a>*)&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST valueExpressionTypes</p>

+<p class="code SchemaDtdAttlist">supportsNestedExpressions&nbsp;(true | false) </p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+A grouping of value expression type elements, defining the types of value expression supported and contributed by this extension for all its supported data set types.  An extension must implement support of the simple and column value expression types. Support of complex expression types is optional and declared in this element.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>supportsNestedExpressions</b> - Indicates whether this extension supports handling of nested value expression type.  The default value is false for no support.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.combinedOperatorTypes">combinedOperatorTypes</a> (<a href="#e.supportedOdaCombinedOperator">supportedOdaCombinedOperator</a>* , <a href="#e.combinedOperatorType">combinedOperatorType</a>*)&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+A grouping of supportedOdaCombinedOperator and combinedOperatorType elements, defining the types of expression combined operator supported or contributed by this extension for all its supported data set types.</p>

+<br><br>

+<p class="code SchemaDtd">&lt;!ELEMENT <a name="e.supportedOdaCombinedOperator">supportedOdaCombinedOperator</a> EMPTY&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST supportedOdaCombinedOperator</p>

+<p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;(Add|Subtract|Multiply|Divide|Concatenate) </p><p class="code SchemaDtdAttlist">class&nbsp;CDATA #IMPLIED</p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+The type of ODA value expression combined operator supported by the extension for all its supported data set types.  It must be one of the built-in CombinedValueExpressionOperator types pre-defined by the ODA framework.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>id</b> - The id of an ODA built-in combined operator for combining 2 value expressions.</li>

+<li><b>class</b> - The fully qualified name of a concrete implementation class that extends this built-in combined operator.
+<br>The class must extend the  <i>org.eclipse.datatools.connectivity.oda.spec.valueexpr.CombinedValueExpressionOperator</i> base class.  The extended class must be public with a public 0-argument constructor.  Defaults to the built-in operator class.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.combinedOperatorType">combinedOperatorType</a> EMPTY&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST combinedOperatorType</p>

+<p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">displayName&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">literal&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+Defines a type of custom combined operator contributed by this extension.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>id</b> - The id that uniquely identifies this type of combined operator within the extension.</li>

+<li><b>displayName</b> - A translatable name that will be used to refer to this particular combined operator type in dialogs presented to the user. Default to the operator id if no name is specified.  The display name should be unique within the extension.</li>

+<li><b>literal</b> - The default literal representation of this custom combined operator.</li>

+<li><b>class</b> - The fully qualified name of a concrete implementation class of this custom combined operator. 
+<br>Must extend from the  <i>org.eclipse.datatools.connectivity.oda.spec.valueexpr.CombinedValueExpressionOperator</i> base class.  The extended class must be public with a public 0-argument constructor.</li>

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.functionExpressionType">functionExpressionType</a> (<a href="#e.variableRestriction">variableRestriction</a>*)&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST functionExpressionType</p>

+<p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">displayName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">description&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">minArguments&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA "1"</p><p class="code SchemaDtdAttlist">maxArguments&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA "1"</p><p class="code SchemaDtdAttlist">canIgnoreDuplicates&nbsp;(true | false) "false"</p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+Defines a type of custom function value expression contributed by this extension.  
+Its variableRestriction sub-element defines the type of expression variable that can be associated with this function type.  The precise data types of the function argument(s) and return value are implementation-specific.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>id</b> - The id that uniquely identifies this type of function value expression within the extension.</li>

+<li><b>name</b> - The expression name of this function type.  Default to the function id if no name is specified.  
+The name should be unique within the extension.</li>

+<li><b>displayName</b> - A translatable name that will be used to refer to this particular function expression type in dialogs presented to the user. Default to the function name if no display name is specified.  The display name should be unique within the extension.</li>

+<li><b>description</b> - A brief translatable description of this type of function expression.  It may be used to describe this particular function type in dialogs presented to the user.</li>

+<li><b>class</b> - The fully qualified name of a concrete implementation class of this custom function type.
+<br>Must extend from the  <i>org.eclipse.datatools.connectivity.oda.spec.valueexpr.CustomFunction</i> base class.  The extended class must be public with a public 0-argument constructor.</li>

+<li><b>minArguments</b> - The minimum number of arguments required by this function type.  The value must be zero or higher integer value.  The default value is  "1".</li>

+<li><b>maxArguments</b> - The maximum number of arguments required by this function type.  It must be an integer value greater or equal to the <i>minArgments</i> value, or "*" for unbounded, i.e. no upper limit on the maximum. The default value is  "1".</li>

+<li><b>canIgnoreDuplicates</b> - Indicates whether this function type is capable of ignoring duplicate values of its input variable. The default value is false.</li>

+</ul>

+<br><h6 class="CaptionFigColumn SchemaHeader">API Information: </h6>See the Java interfaces and classes in the org.eclipse.datatools.connectivity.oda.spec package and its sub-packages.

+<p></p>

+

+<h6 class="CaptionFigColumn SchemaHeader">Supplied Implementation: </h6>A sample implementation of this extension point can be found in the
+<i>org.eclipse.datatools.connectivity.oda.consumer.testdriver</i> project 
+in DTP CVS under the org.eclipse.datatools.connectivity/tests/ folder.

+<p></p>

+

+<br>

+<p class="note SchemaCopyright">

+Copyright (c) 2009, 2010 Actuate Corporation.
+All rights reserved. This program and the accompanying materials are made available under the  terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html

+

+</p>

+</BODY>

+</HTML>

diff --git a/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_oda_profile_profileStore.html b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_oda_profile_profileStore.html
new file mode 100644
index 0000000..d34f910
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_oda_profile_profileStore.html
@@ -0,0 +1,60 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

+<HTML>

+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

+<title>ODA Connection Profiles Store</title>

+<style type="text/css">@import url("file:/D:/dev/eclipse_platform/eclipse_37/plugins/org.eclipse.sdk_3.7.0.v201106131736/book.css");</style>

+<style type="text/css">@import url("file:/D:/dev/eclipse_platform/eclipse_37/configuration/org.eclipse.osgi/bundles/624/1/.cp/schema.css");</style>

+</HEAD>

+<BODY>

+<H1 style="text-align:center">ODA Connection Profiles Store</H1>

+<p></p>

+<h6 class="CaptionFigColumn SchemaHeader">Identifier: </h6>org.eclipse.datatools.connectivity.oda.profile.profileStore<p></p>

+<h6 class="CaptionFigColumn SchemaHeader">Since: </h6>3.2.7 (DTP 1.9.2)

+<p></p>

+

+<h6 class="CaptionFigColumn SchemaHeader">Description: </h6>The profileStore extension point allows a client to define a default file extension for any connection profiles store that has no file extension.  If no extensions of this extension point are registered, an user may specify a profile stores file with no extension.  If multiple default fileExtension elements are registered, only one will be applied.  Adopters should ensure that its client application installs only one extension of this extension point.<p></p>

+<h6 class="CaptionFigColumn SchemaHeader">Configuration Markup:</h6>

+<p></p>

+<p class="code SchemaDtd">&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.fileExtension">fileExtension</a>)&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST extension</p>

+<p class="code SchemaDtdAttlist">point&nbsp;CDATA #REQUIRED</p><p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</p><p class="code SchemaDtdAttlist">name&nbsp;&nbsp;CDATA #IMPLIED</p>&gt;</p>

+<p></p>

+<ul class="ConfigMarkupAttlistDesc">

+</ul>

+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.fileExtension">fileExtension</a> EMPTY&gt;</p>

+<p class="code SchemaDtd">&lt;!ATTLIST fileExtension</p>

+<p class="code SchemaDtdAttlist">default&nbsp;CDATA #REQUIRED</p>&gt;</p>

+<p></p>

+<p class="ConfigMarkupElementDesc">

+Defines the file extension to be associated with a connection profile store.</p>

+<br>

+<ul class="ConfigMarkupAttlistDesc">

+<li><b>default</b> - Defines the default file extension to be automatically associated with a connection profile store that has no user-defined file extension.
+This attribute value may include an optional dot before the file extension (e.g. "profiles" or ".profiles").</li>

+</ul>

+<br><h6 class="CaptionFigColumn SchemaHeader">Examples: </h6><code><pre class="Example"><span class="code SchemaTag">
+     &lt;extension
+           point=</span><span class="code SchemaCstring">&quot;org.eclipse.datatools.connectivity.oda.profile.profileStore&quot;</span><span class="code SchemaTag">&gt;
+        &lt;fileExtension
+              default=</span><span class="code SchemaCstring">&quot;profiles&quot;</span><span class="code SchemaTag">&gt;
+        &lt;/fileExtension&gt;
+     &lt;/extension&gt;
+</span></pre></code>
+   
+This extension example specifies the default file extension "profiles" to be automatically associated with a connection profile store that has no user-defined file extension.

+<p></p>

+

+<h6 class="CaptionFigColumn SchemaHeader">API Information: </h6>No API implementation is applicable.

+<p></p>

+

+<h6 class="CaptionFigColumn SchemaHeader">Supplied Implementation: </h6>N/A

+<p></p>

+

+<br>

+<p class="note SchemaCopyright">

+Copyright (c) 2011 Actuate Corporation.
+All rights reserved. This program and the accompanying materials are made available under the  terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html.

+

+</p>

+</BODY>

+</HTML>

diff --git a/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_catalog.html b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_catalog.html
new file mode 100644
index 0000000..35d1fed
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_catalog.html
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Catalog</title>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.sdk_3.1.0/book.css");</style>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.platform.doc.isv_3.1.0/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>Catalog</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.connectivity.sqm.core.Catalog<p></p>
+<h6 class=CaptionFigColumn id=header>Since: </h6>[Enter the first release in which this extension point appears.]
+<p></p>
+
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>[Enter description of this extension point.]</p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.catalog">catalog</a>+)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.catalog">catalog</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST catalog</p>
+<p class=code id=dtdAttlist>product&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>version&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>provider&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>product</b> - </li>
+<li><b>version</b> - </li>
+<li><b>provider</b> - </li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>Examples: </h6>[Enter extension point usage example here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>API Information: </h6>[Enter API information here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>Supplied Implementation: </h6>[Enter information about supplied implementation of this extension point.]
+<p></p>
+
+<br>
+<p class=note id=copyright>
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_dataModelElementFactory.html b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_dataModelElementFactory.html
new file mode 100644
index 0000000..3ea1025
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_dataModelElementFactory.html
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>dataModelElementFactory</title>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.sdk_3.1.0/book.css");</style>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.platform.doc.isv_3.1.0/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>dataModelElementFactory</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.connectivity.sqm.core.dataModelElementFactory<p></p>
+<h6 class=CaptionFigColumn id=header>Since: </h6>[Enter the first release in which this extension point appears.]
+<p></p>
+
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>[Enter description of this extension point.]</p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.factory">factory</a>+)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.factory">factory</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST factory</p>
+<p class=code id=dtdAttlist>product&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>version&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>class&nbsp;&nbsp;&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>product</b> - </li>
+<li><b>version</b> - </li>
+<li><b>class</b> - </li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>Examples: </h6>[Enter extension point usage example here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>API Information: </h6>[Enter API information here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>Supplied Implementation: </h6>[Enter information about supplied implementation of this extension point.]
+<p></p>
+
+<br>
+<p class=note id=copyright>
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_databaseDefinition.html b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_databaseDefinition.html
new file mode 100644
index 0000000..36984da
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_databaseDefinition.html
@@ -0,0 +1,50 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Database Definition</title>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.sdk_3.1.0/book.css");</style>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.platform.doc.isv_3.1.0/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>Database Definition</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.connectivity.sqm.core.databaseDefinition<p></p>
+<h6 class=CaptionFigColumn id=header>Since: </h6>[Enter the first release in which this extension point appears.]
+<p></p>
+
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>[Enter description of this extension point.]</p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.definition">definition</a>+)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.definition">definition</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST definition</p>
+<p class=code id=dtdAttlist>description&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>product&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>previous&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>allowsConnections&nbsp;&nbsp;&nbsp;&nbsp;(true | false) <p class=code id=dtdAttlist>productDisplayString&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>versionDisplayString&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>description</b> - </li>
+<li><b>product</b> - </li>
+<li><b>version</b> - </li>
+<li><b>previous</b> - </li>
+<li><b>allowsConnections</b> - </li>
+<li><b>productDisplayString</b> - </li>
+<li><b>versionDisplayString</b> - </li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>Examples: </h6>[Enter extension point usage example here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>API Information: </h6>[Enter API information here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>Supplied Implementation: </h6>[Enter information about supplied implementation of this extension point.]
+<p></p>
+
+<br>
+<p class=note id=copyright>
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_ddlGeneration.html b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_ddlGeneration.html
new file mode 100644
index 0000000..6cce5e4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_ddlGeneration.html
@@ -0,0 +1,55 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>DDL Generation</title>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.sdk_3.1.0/book.css");</style>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.platform.doc.isv_3.1.0/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>DDL Generation</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.connectivity.sqm.core.ddlGeneration<p></p>
+<h6 class=CaptionFigColumn id=header>Since: </h6>[Enter the first release in which this extension point appears.]
+<p></p>
+
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>[Enter description of this extension point.]</p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.generator">generator</a>+ , <a href="#e.delta">delta</a>*)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.generator">generator</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST generator</p>
+<p class=code id=dtdAttlist>product&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>class&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>version&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>product</b> - </li>
+<li><b>class</b> - </li>
+<li><b>version</b> - </li>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.delta">delta</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST delta</p>
+<p class=code id=dtdAttlist>product&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>version&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>class&nbsp;&nbsp;&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>product</b> - </li>
+<li><b>version</b> - </li>
+<li><b>class</b> - </li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>Examples: </h6>[Enter extension point usage example here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>API Information: </h6>[Enter API information here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>Supplied Implementation: </h6>[Enter information about supplied implementation of this extension point.]
+<p></p>
+
+<br>
+<p class=note id=copyright>
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_ddlParser.html b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_ddlParser.html
new file mode 100644
index 0000000..9c65f95
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_ddlParser.html
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>DDL Parser</title>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.sdk_3.1.0/book.css");</style>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.platform.doc.isv_3.1.0/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>DDL Parser</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.connectivity.sqm.core.ddlParser<p></p>
+<h6 class=CaptionFigColumn id=header>Since: </h6>[Enter the first release in which this extension point appears.]
+<p></p>
+
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>[Enter description of this extension point.]</p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.parser">parser</a>+)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.parser">parser</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST parser</p>
+<p class=code id=dtdAttlist>product&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>class&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>version&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>product</b> - </li>
+<li><b>class</b> - </li>
+<li><b>version</b> - </li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>Examples: </h6>[Enter extension point usage example here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>API Information: </h6>[Enter API information here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>Supplied Implementation: </h6>[Enter information about supplied implementation of this extension point.]
+<p></p>
+
+<br>
+<p class=note id=copyright>
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_logicalContainment.html b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_logicalContainment.html
new file mode 100644
index 0000000..90c8025
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_logicalContainment.html
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Logical Containment</title>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.sdk_3.1.0/book.css");</style>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.platform.doc.isv_3.1.0/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>Logical Containment</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.connectivity.sqm.core.logicalContainment<p></p>
+<h6 class=CaptionFigColumn id=header>Since: </h6>1.0
+<p></p>
+
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>[Enter description of this extension point.]</p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.containment">containment</a>+)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.containment">containment</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST containment</p>
+<p class=code id=dtdAttlist>package&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>class&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>provider&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>package</b> - </li>
+<li><b>class</b> - </li>
+<li><b>provider</b> - </li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>Examples: </h6>[Enter extension point usage example here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>API Information: </h6>[Enter API information here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>Supplied Implementation: </h6>[Enter information about supplied implementation of this extension point.]
+<p></p>
+
+<br>
+<p class=note id=copyright>
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_ui_labelService.html b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_ui_labelService.html
new file mode 100644
index 0000000..45b149f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_ui_labelService.html
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>labelService</title>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.sdk_3.1.0/book.css");</style>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.platform.doc.isv_3.1.0/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>labelService</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.connectivity.sqm.core.ui.labelService<p></p>
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>This extension point will provide plugins a way to supply their own Icons as well as a displayType for SQLObject element.</p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.contributor">contributor</a>)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+This extension point will provide plugins a way to supply their own Icons as well as a displayType for SQLObject element.</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.contributor">contributor</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST contributor</p>
+<p class=code id=dtdAttlist>type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>iconLocation&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>displayType&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>selector&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>type</b> - The EMF type contributed by your provider of the LabelService</li>
+<li><b>iconLocation</b> - This is the Icon location so that the core.ui plugin can load your icon</li>
+<li><b>displayType</b> - This is the type to display in UI such as the property browser. By default the type to display will be the metaclass name eClass().getName()</li>
+<li><b>selector</b> - The name of a class that implements the org.eclipse.datatools.connectivity.sqm.core.internal.ui.LabelSelector interface.  If provided, this class will be used in
+                  addition to the type to determine if the label information should be passed back for the given object.</li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>Examples: </h6><extension point = "com.ibm.datatools.core.ui.labelService">
+  <contributor
+   type = "com.ibm.db.models.sql.schema.Database"
+   iconLocation = "/icons/database.gif"
+   displayType = "%database">
+  </contributor>
+    </extension>
+<p></p>
+
+<br>
+<p class=note id=copyright>
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_sqltools_common_ui_preferenceSections.html b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_sqltools_common_ui_preferenceSections.html
new file mode 100644
index 0000000..5289455
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_sqltools_common_ui_preferenceSections.html
@@ -0,0 +1,56 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>DTP Preference Sections</title>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.sdk_3.1.0/book.css");</style>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.platform.doc.isv_3.1.0/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>DTP Preference Sections</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.sqltools.common.ui.preferenceSections<p></p>
+<h6 class=CaptionFigColumn id=header>Since: </h6>[Enter the first release in which this extension point appears.]
+<p></p>
+
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>This extension point provides a way for data server vendors to contribute preference controls to an existing DTP preference page. All preference settings will appear in a tab with the vendor name as the title.</p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.section">section</a>+)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.section">section</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST section</p>
+<p class=code id=dtdAttlist>dbdefinitionid&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>launchConfig&nbsp;&nbsp;&nbsp;(true | false) &gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>dbdefinitionid</b> - db definition id to be defined by Model Base project. (For now, clients should use productName_version for this attribute.)</li>
+<li><b>class</b> - A fully qualified class implementing org.eclipse.datatools.sqltools.common.ui.preferences.IDataServerPreferenceSection.</li>
+<li><b>page</b> - The preference page id. The page should extend AbstractDBPreferenceFieldPage so that vendor specific setting can appear.</li>
+<li><b>launchConfig</b> - Whether this section can be reused in launch configuration dialog. If true, "class" should implement org.eclipse.datatools.common.ui.preferences.IDataServerLaunchPreferenceSection.</li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>Examples: </h6>[Enter extension point usage example here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>API Information: </h6>The contributed preference section must implement org.eclipse.datatools.sqltools.common.ui.preferences.IDataServerPreferenceSection or org.eclipse.datatools.sqltools.common.ui.preferences.IDataServerLaunchPreferenceSection.
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>Supplied Implementation: </h6>[Enter information about supplied implementation of this extension point.]
+<p></p>
+
+<br>
+<p class=note id=copyright>
+Copyright (c) 2005 Sybase, Inc.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Sybase, Inc. - initial API and implementation
+<p></p>
+
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_sqltools_result_reExecuteScript.html b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_sqltools_result_reExecuteScript.html
new file mode 100644
index 0000000..ca70f84
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_sqltools_result_reExecuteScript.html
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Re-execute History Statement</title>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.sdk_3.1.0/book.css");</style>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.platform.doc.isv_3.1.0/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>Re-execute History Statement</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.sqltools.result.reExecuteScript<p></p>
+<h6 class=CaptionFigColumn id=header>Since: </h6>[Enter the first release in which this extension point appears.]
+<p></p>
+
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>[Enter description of this extension point.]</p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> ((<a href="#e.reExecution">reExecution</a>))&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.reExecution">reExecution</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST reExecution</p>
+<p class=code id=dtdAttlist>database_id&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>consumer_name&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>database_id</b> - An id that can uniquely identify a database product, which can be obtained from "Connectivity Layer" given a database connection profile.</li>
+<li><b>consumer_name</b> - The name of the consumer of the SQL Results View.</li>
+<li><b>class</b> - A class which implements <code>IReExecutionRunnable</code>.</li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>Examples: </h6>[Enter extension point usage example here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>API Information: </h6>[Enter API information here.]
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>Supplied Implementation: </h6>[Enter information about supplied implementation of this extension point.]
+<p></p>
+
+<br>
+<p class=note id=copyright>
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_sqltools_routineeditor_documentprovider.html b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_sqltools_routineeditor_documentprovider.html
new file mode 100644
index 0000000..2361dea
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_sqltools_routineeditor_documentprovider.html
@@ -0,0 +1,73 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>SQL Editor Document Provider</title>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.sdk_3.1.0/book.css");</style>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.platform.doc.isv_3.1.0/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>SQL Editor Document Provider</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>com.sybase.stf.dmp.editor.documentprovider<p></p>
+<h6 class=CaptionFigColumn id=header>Since: </h6>0.7.0
+<p></p>
+
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>This extension point allows a document provider to be contributed for SQL Routine editor. Extensions register a <code>org.eclipse.datatools.sqltools.routineeditor.IRoutineEditorDocumentProvider</code> class which will provide additional functions beyond the original document provider. Note: this extension point is intended to be used by DTP SQL debugger only for now.</p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.provider">provider</a>)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+This extension point should be used by debugger only.</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.provider">provider</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST provider</p>
+<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>class&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>id</b> - optional id</li>
+<li><b>class</b> - a fully qualified name of the Java class implementing  org.eclipse.datatools.sqltools.routineeditor.IRoutineEditorDocumentProvider.</li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>Examples: </h6><p><pre>
+<p class=code id=tag>&lt;extension
+          point=<p class=code id=cstring>&quot;org.eclipse.datatools.sqltools.routineeditor.documentprovider&quot;</p><p class=code id=tag>&gt;</p>
+       <p class=code id=tag>&lt;provider class=<p class=code id=cstring>&quot;org.eclipse.datatools.sqltools.debugger.editorextension.SQLDebuggerDocumentProvider&quot;</p><p class=code id=tag>/&gt;</p>
+    <p class=code id=tag>&lt;/extension&gt;</p>
+    </pre></p>
+SQLDebuggerDocumentProvider will be used by SQLEditorDocumentProvider to manage breakpoint positions.
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>API Information: </h6>The class attribute must be a fully qualified name of the Java class implementing  org.eclipse.datatools.sqltools.routineeditor.IRoutineEditorDocumentProvider.
+public interface IRoutineEditorDocumentProvider extends IDocumentProvider, IDocumentProviderExtension2, IDocumentProviderExtension3 
+{
+    /**
+     * Refreshs the routine object from database.
+     * @param element the routine object
+     * @param controlCon control connection that's used by the routine editor
+     * @param proc the routine identifier
+     */
+    public void refreshFromDatabase(Object element, IControlConnection controlCon, ProcIdentifier proc) throws CoreException, SQLException;
+}
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>Supplied Implementation: </h6>[Enter information about supplied implementation of this extension point.]
+<p></p>
+
+<br>
+<p class=note id=copyright>
+Copyright (c) 2005 Sybase, Inc.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Sybase, Inc. - initial API and implementation
+<p></p>
+
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_sqltools_routineeditor_launchConfigurationTypes.html b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_sqltools_routineeditor_launchConfigurationTypes.html
new file mode 100644
index 0000000..ed60adb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_sqltools_routineeditor_launchConfigurationTypes.html
@@ -0,0 +1,71 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Routine Launch Configuration Types</title>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.sdk_3.1.0/book.css");</style>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.platform.doc.isv_3.1.0/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>Routine Launch Configuration Types</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.sqltools.routineeditor.launchConfigurationTypes<p></p>
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>This extension point provides a configurable mechanism for launching SQL procedural objects in modes other than 'Run'.
+Each launch configuration type has a name, one or more modes (run mode is already handled), and specifies a delegate
+responsible for the implementation of launching an application.</p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.launchConfigurationType">launchConfigurationType</a>*)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>point</b> - a fully qualified identifier of the target extension point</li>
+<li><b>id</b> - an optional identifier of the extension instance</li>
+<li><b>name</b> - an optional name of the extension instance</li>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.launchConfigurationType">launchConfigurationType</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST launchConfigurationType</p>
+<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>delegate&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>modes&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>id</b> - specifies a unique identifier for this launch configuration type.</li>
+<li><b>delegate</b> - specifies the fully qualified name of the Java class that implements <samp>ILaunchConfigurationDelegate</samp>.
+Launch configuration instances of this type will delegate to instances of this class to perform launching.</li>
+<li><b>modes</b> - specifies a comma-separated list of the modes this type of lauch configuration supports - "debug".</li>
+<li><b>name</b> - specifies a human-readable name for this type of launch configuration.</li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>Examples: </h6>The following is an example of a launch configuration type extension point:
+
+<p>
+<pre>
+ <p class=code id=tag>&lt;extension point=<p class=code id=cstring>&quot;org.eclipse.datatools.sqltools.routineeditor.launchConfigurationTypes&quot;</p><p class=code id=tag>&gt;</p>
+  <p class=code id=tag>&lt;launchConfigurationType
+   id=<p class=code id=cstring>&quot;com.example.ExampleIdentifier&quot;</p><p class=code id=tag>
+   delegate=<p class=code id=cstring>&quot;com.example.ExampleLaunchConfigurationDelegate&quot;</p><p class=code id=tag>
+   modes=<p class=code id=cstring>&quot;debug&quot;</p><p class=code id=tag>
+   name=<p class=code id=cstring>&quot;Example Application&quot;</p><p class=code id=tag>&gt;</p>
+  <p class=code id=tag>&lt;/launchConfigurationType&gt;</p>
+ <p class=code id=tag>&lt;/extension&gt;</p>
+</pre>
+</p>
+
+In the example above, the specified type of launch configuration supports debug modes.
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>API Information: </h6>Value of the attribute <b>delegate</b> must be a fully qualified name of a Java class that implements the interface <b>org.eclipse.debug.core.model.ILaunchConfigurationDelegate</b>.
+<p></p>
+
+<br>
+<p class=note id=copyright>
+Copyright (c) 2005 Sybase, Inc.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Sybase, Inc. - initial API and implementation
+<p></p>
+
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_sqltools_sqleditor_texthover.html b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_sqltools_sqleditor_texthover.html
new file mode 100644
index 0000000..dd04091
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/html/reference/extension-points/org_eclipse_datatools_sqltools_sqleditor_texthover.html
@@ -0,0 +1,59 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>SQL Editor Text Hover</title>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.sdk_3.1.0/book.css");</style>
+<style>@import url("file:/c:/V3/3.1/eclipse/plugins/org.eclipse.platform.doc.isv_3.1.0/schema.css");</style>
+</HEAD>
+<BODY>
+<H1><CENTER>SQL Editor Text Hover</CENTER></H1>
+<p></p>
+<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.datatools.sqltools.sqleditor.texthover<p></p>
+<h6 class=CaptionFigColumn id=header>Since: </h6>[Enter the first release in which this extension point appears.]
+<p></p>
+
+<p>
+<h6 class=CaptionFigColumn id=header>Description: </h6>This extension point provides support for text hover in SQL editor. Extensions register a <code>org.eclipse.datatools.sqltools.sqleditor.sql.AbstractSQLEditorTextHover</code> class which will provide text hover information.</p>
+<p><h6 class=CaptionFigColumn id=header>Configuration Markup:</h6></p>
+<p class=code id=dtd>&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.hover">hover</a>+)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+</ul>
+<br><p class=code id=dtd>&lt;!ELEMENT <a name="e.hover">hover</a> EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST hover</p>
+<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>class&nbsp;CDATA #REQUIRED&gt;</p>
+<p></p>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>id</b> - </li>
+<li><b>class</b> - subclass of org.eclipse.datatools.sqltools.sqleditor.sql.AbstractSQLEditorTextHover. When there're multiple texthover contributions, sql editor will use the first one that can give hover information at the current position.</li>
+</ul>
+<br><h6 class=CaptionFigColumn id=header>Examples: </h6><p><pre>
+<p class=code id=tag>&lt;extension point=<p class=code id=cstring>&quot;org.eclipse.datatools.sqltools.sqleditor.texthover&quot;</p><p class=code id=tag>&gt;</p>
+       <p class=code id=tag>&lt;hover class=<p class=code id=cstring>&quot;com.sybase.stf.dmp.editorextension.SQLDebugHover&quot;</p><p class=code id=tag> id=<p class=code id=cstring>&quot;com.sybase.stf.dmp.editor.hover&quot;</p><p class=code id=tag>/&gt;</p>
+<p class=code id=tag>&lt;/extension&gt;</p>
+</pre></p>
+Contribute a text hover that will give variable value when the current position is on a variable name.
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>API Information: </h6>the class must implement <code>org.eclipse.datatools.sqltools.sqleditor.sql.AbstractSQLEditorTextHover</code>
+<p></p>
+
+<h6 class=CaptionFigColumn id=header>Supplied Implementation: </h6>[Enter information about supplied implementation of this extension point.]
+<p></p>
+
+<br>
+<p class=note id=copyright>
+Copyright (c) 2005 Sybase, Inc.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ Contributors:
+ Sybase, Inc. - initial API and implementation
+<p></p>
+
+</p>
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.datatools.doc.isv/modelbase.package.properties b/plugins/org.eclipse.datatools.doc.isv/modelbase.package.properties
new file mode 100644
index 0000000..af8d1ed
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/modelbase.package.properties
@@ -0,0 +1,14 @@
+modelbase.include.package.names = org.eclipse.datatools.modelbase.*
+
+modelbase.exclude.package.names = org.eclipse.datatools.modelbase.**.impl
+
+                        
+                        
+
+                        
+                        
+                        
+                        
+                        
+                        
+                    
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/plugin.xml b/plugins/org.eclipse.datatools.doc.isv/plugin.xml
new file mode 100644
index 0000000..c5e8a3f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/plugin.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+	<extension point="org.eclipse.help.toc">
+		<toc file="toc.xml" primary="true"/>
+		<toc file="tocreference.xml"/>
+		<toc file="dtp_help_helper_doc.xml" primary="false"/>
+	</extension>
+</plugin>
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/images/Thumbs.db b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/images/Thumbs.db
new file mode 100644
index 0000000..c3873eb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/images/Thumbs.db
Binary files differ
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/images/dtp_cs_content.jpg b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/images/dtp_cs_content.jpg
new file mode 100644
index 0000000..3f3aa1d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/images/dtp_cs_content.jpg
Binary files differ
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/images/dtp_csh_abstraction_layer.jpg b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/images/dtp_csh_abstraction_layer.jpg
new file mode 100644
index 0000000..3ec0fc9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/images/dtp_csh_abstraction_layer.jpg
Binary files differ
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/images/dtp_csh_runtime_interaction.jpg b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/images/dtp_csh_runtime_interaction.jpg
new file mode 100644
index 0000000..fc63516
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/images/dtp_csh_runtime_interaction.jpg
Binary files differ
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_context_provider_delegate.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_context_provider_delegate.html
new file mode 100644
index 0000000..26a02f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_context_provider_delegate.html
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="Context Provider Delegate"/>
+<meta name="abstract" content="The ContextProviderDelegate allows a UI control to provide the actual help context ID and help search expression to the methods of IContextProvider, while handling references to those strings as an abstract help key (helpKey constant)."/>
+<meta name="description" content="The ContextProviderDelegate allows a UI control to provide the actual help context ID and help search expression to the methods of IContextProvider, while handling references to those strings as an abstract help key (helpKey constant)."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_dtp_help_helper.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_AC2737026FCA4BBFB2804C8B0B1E2BE1"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>Context Provider Delegate</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_AC2737026FCA4BBFB2804C8B0B1E2BE1"><a name="concept_AC2737026FCA4BBFB2804C8B0B1E2BE1"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">Context Provider Delegate</h1>
+
+    
+    <div><p>The ContextProviderDelegate allows a UI control to provide the actual help
+           context ID and help search expression to the methods of IContextProvider, while
+           handling references to those strings as an abstract help key (helpKey constant).
+        </p>
+
+        
+        <div class="p">To support the abstraction from help context ID to helpKey constant, a UI
+           control must:
+            <br/><a name="concept_AC2737026FCA4BBFB2804C8B0B1E2BE1__ul_AF6E7F4929514F6A99A3C75F3B24D0BD"><!-- --></a><ul id="concept_AC2737026FCA4BBFB2804C8B0B1E2BE1__ul_AF6E7F4929514F6A99A3C75F3B24D0BD">
+                <li id="concept_AC2737026FCA4BBFB2804C8B0B1E2BE1__li_E939CD1D126340EC85E3658BA8884C71"><a name="concept_AC2737026FCA4BBFB2804C8B0B1E2BE1__li_E939CD1D126340EC85E3658BA8884C71"><!-- --></a>Adapt to the IContextProvider.class object as a key</li>
+
+                <li id="concept_AC2737026FCA4BBFB2804C8B0B1E2BE1__li_AAD33F3AB2F2484AA55A9A6AE916A98F"><a name="concept_AC2737026FCA4BBFB2804C8B0B1E2BE1__li_AAD33F3AB2F2484AA55A9A6AE916A98F"><!-- --></a>Create an instance of the ContextProviderDelegate, passing in the symbolic
+                    name of the plug-in associated with the help context</li>
+
+                <li id="concept_AC2737026FCA4BBFB2804C8B0B1E2BE1__li_BD0DE9B2BBAA4CE7B7235E0A1D04186B"><a name="concept_AC2737026FCA4BBFB2804C8B0B1E2BE1__li_BD0DE9B2BBAA4CE7B7235E0A1D04186B"><!-- --></a>Implement static methods of IContextProvider (getContext,
+                    getContextChangeMask, and getSearchExpression), each of which returns a
+                    corresponding method of the ContextProviderDelegate instance</li>
+
+                <li id="concept_AC2737026FCA4BBFB2804C8B0B1E2BE1__li_CCE56B6741AC4EFB9DF8CC5DEA7EB4EB"><a name="concept_AC2737026FCA4BBFB2804C8B0B1E2BE1__li_CCE56B6741AC4EFB9DF8CC5DEA7EB4EB"><!-- --></a>Define the help context using IWorkbench.setHelp (for example, in the
+                    createPartControl method), by passing the abstract helpKey constant string</li>
+
+            </ul>
+
+        </div>
+
+        <p>The ContextProviderDelegate methods return the actual help context ID, change
+           mask, or help search expression to the IContextProvider methods.
+        </p>
+
+
+        <div class="note"><span class="notetitle">Note:</span> The DTP help-helper handles unqualified help context IDs defined in
+           properties files to fully-qualify them, before it returns them through
+           ContextProviderDelegate methods.
+        </div>
+
+    </div>
+
+<div>
+<div class="familylinks">
+<div class="parentlink"><strong>Parent topic:</strong> <a href="../../../../../projects/dtp/dtp/en/source/c_dtp_help_helper.html" title="The DTP help-helper plug-in (org.eclipse.datatools.help) provides a “help key” extension point (org.eclipse.datatools.help.helpKeyProperties), and supplies a context provider delegate implementation (org.eclipse.datatools.help.ContextProviderDelegate).">DTP Help-Helper</a></div>
+</div>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_context_specific_help_content.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_context_specific_help_content.html
new file mode 100644
index 0000000..08cc3df
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_context_specific_help_content.html
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="Context-Specific Help Content"/>
+<meta name="abstract" content="The ditamap requires specific markup to implement context-sensitive help."/>
+<meta name="description" content="The ditamap requires specific markup to implement context-sensitive help."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_csh_plugins_with_dita.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_35BBDB9083C84D199602016DEA6ED71B"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>Context-Specific Help Content</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_35BBDB9083C84D199602016DEA6ED71B"><a name="concept_35BBDB9083C84D199602016DEA6ED71B"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">Context-Specific Help Content</h1>
+
+    
+    <div><p>The ditamap requires specific markup to implement context-sensitive help.</p>
+
+        <div class="p">Each 
+           <samp class="codeph">&lt;topicmeta&gt;</samp> element that wraps a 
+           <samp class="codeph">&lt;resourceid&gt;</samp> element may optionally contain one 
+           <samp class="codeph">&lt;searchtitle&gt;</samp> element or one 
+           <samp class="codeph">&lt;shortdesc&gt;</samp> element, or both (one of each):
+            <br/><a name="concept_35BBDB9083C84D199602016DEA6ED71B__ul_0B256D3232FE4A878571157937671353"><!-- --></a><ul id="concept_35BBDB9083C84D199602016DEA6ED71B__ul_0B256D3232FE4A878571157937671353">
+                <li id="concept_35BBDB9083C84D199602016DEA6ED71B__li_D1F99AE153B9492EB74D8CB5AED44849"><a name="concept_35BBDB9083C84D199602016DEA6ED71B__li_D1F99AE153B9492EB74D8CB5AED44849"><!-- --></a>The <samp class="codeph">&lt;searchtitle&gt;</samp> element is used to 
+                    supply the value of the title attribute on the 
+                    <samp class="codeph">&lt;context&gt;</samp> element in the Eclipse context XML file.</li>
+
+                <li id="concept_35BBDB9083C84D199602016DEA6ED71B__li_2439F97A08E6428C8ED67E8F620E130B"><a name="concept_35BBDB9083C84D199602016DEA6ED71B__li_2439F97A08E6428C8ED67E8F620E130B"><!-- --></a>The <samp class="codeph">&lt;shortdesc&gt;</samp> element is used to supply 
+                    the content of the <samp class="codeph">&lt;description&gt;</samp>
+                    element in the Eclipse context XML file. For example:
+                    <pre class="codeblock">
+    &lt;topicref navtitle="label attribute in contexts.xml topic element"
+        href="path/to/topic.xml"&gt;
+        &lt;topicmeta&gt;
+            &lt;searchtitle&gt;Optional text to override the help About title.&lt;/searchtitle&gt;
+            &lt;shortdesc&gt;Text for context description.&lt;/shortdesc&gt;
+            &lt;resourceid id="help_context_ID_string"/&gt;
+        &lt;/topicmeta&gt;
+    &lt;/topicref&gt;
+</pre>
+</li>
+
+            </ul>
+
+        </div>
+
+
+        <div class="note"><span class="notetitle">Note:</span> The <samp class="codeph">&lt;searchtitle&gt;</samp>, <samp class="codeph">&lt;shortdesc&gt;</samp>,
+           and <samp class="codeph">&lt;resourceid&gt;</samp> elements must appear in the 
+           <samp class="codeph">&lt;topicmeta&gt;</samp> element in the order shown above.
+        </div>
+
+        <div class="p">A DITA map that contains the example shown above produces the following content
+           in an Eclipse context XML file:  
+           <pre class="codeblock">
+    &lt;contexts&gt;
+        ...
+        &lt;context id="help_context_ID_string"
+            title="Optional text to override the help About title."&gt;
+            &lt;description&gt;Text for context description.&lt;/description&gt;
+            &lt;topic label="label attribute in contexts.xml topic element"
+                href="PLUGINS_ROOT/<em>doc_plugin_ID</em>/path/to/topic.xml"/&gt;
+        &lt;/context&gt;
+        ...
+    &lt;/contexts&gt;
+</pre>
+
+           where <var class="varname">doc_plugin_ID</var> is the value of the id attribute on the 
+           <samp class="codeph">&lt;map&gt;</samp> element.
+        </div>
+
+        <p>The following illustration shows how the 
+           <samp class="codeph">&lt;searchtitle&gt;</samp> and <samp class="codeph">&lt;shortdesc&gt;</samp> elements
+           in a DITA map can be transformed into markup in the Eclipse context XML file,
+           and how those items in the context XML file provide the context-specific content
+           rendered in the Help view.
+        </p>
+
+        <br/><a name="concept_35BBDB9083C84D199602016DEA6ED71B__image_AECDC92CFEC5476BB3BF3641AF221535"><!-- --></a><div class="imagecenter"><img id="concept_35BBDB9083C84D199602016DEA6ED71B__image_AECDC92CFEC5476BB3BF3641AF221535" src="../images/dtp_cs_content.jpg" alt="Image shows how content in the &lt;searchtitle&gt; and &lt;shortdesc&gt; elements in a DITA map contribute context-specific content for the Eclipse context XML file."/></div><br/>
+    </div>
+
+<div>
+<div class="familylinks">
+<div class="parentlink"><strong>Parent topic:</strong> <a href="../../../../../projects/dtp/dtp/en/source/c_csh_plugins_with_dita.html" title="Any DITA map document that defines an online documentation (doc) plug-in can be modified to also define a corresponding context-sensitive help plug-in by inserting the appropriate context-related markup.">Context-Sensitive Help Plug-ins with DITA</a></div>
+</div>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_csh_plugin_ids.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_csh_plugin_ids.html
new file mode 100644
index 0000000..701d83b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_csh_plugin_ids.html
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="Context-Sensitive Help Plug-in IDs"/>
+<meta name="abstract" content="Context-sensitive help plug-ins can be supplied as dedicated plug-ins, which point to related help topics that are contributed by other, online documentation plug-ins, but do not contribute any help topics themselves."/>
+<meta name="description" content="Context-sensitive help plug-ins can be supplied as dedicated plug-ins, which point to related help topics that are contributed by other, online documentation plug-ins, but do not contribute any help topics themselves."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_csh_ua_plugins.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_69C987C366CB423E88390AF171F731B1"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>Context-Sensitive Help Plug-in IDs</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_69C987C366CB423E88390AF171F731B1"><a name="concept_69C987C366CB423E88390AF171F731B1"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">Context-Sensitive Help Plug-in IDs</h1>
+
+    
+    <div><p>Context-sensitive help plug-ins can be supplied as dedicated plug-ins, which
+           point to related help topics that are contributed by other, online documentation
+           plug-ins, but do not contribute any help topics themselves.
+        </p>
+
+        
+        <div class="p">Dedicated context-sensitive help plug-ins can “mirror” the architecture of the
+           online documentation plug-ins. For each plug-in that contributes topics related
+           to help contexts, a corresponding context-sensitive help plug-in can be
+           delivered. In that case, the context-sensitive help plug-in should be named to
+           match its corresponding online documentation plug-in. For example:
+            <br/><a name="concept_69C987C366CB423E88390AF171F731B1__ul_DB84C88E8C0C407DBB378AFCF189CECE"><!-- --></a><ul id="concept_69C987C366CB423E88390AF171F731B1__ul_DB84C88E8C0C407DBB378AFCF189CECE">
+                <li id="concept_69C987C366CB423E88390AF171F731B1__li_7AF30494D0134D5993A7C964D258FC18"><a name="concept_69C987C366CB423E88390AF171F731B1__li_7AF30494D0134D5993A7C964D258FC18"><!-- --></a>Online documentation plug-in: <samp class="codeph">org.eclipse.datatools.doc.user</samp></li>
+
+                <li id="concept_69C987C366CB423E88390AF171F731B1__li_81C74E96EFDE4167AC5B22B44F0C685A"><a name="concept_69C987C366CB423E88390AF171F731B1__li_81C74E96EFDE4167AC5B22B44F0C685A"><!-- --></a>Context-sensitive help plug-in: <samp class="codeph">org.eclipse.datatools.doc.user<strong>.contexts</strong></samp></li>
+
+            </ul>
+
+        </div>
+
+    </div>
+
+<div>
+<div class="familylinks">
+<div class="parentlink"><strong>Parent topic:</strong> <a href="../../../../../projects/dtp/dtp/en/source/c_csh_ua_plugins.html" title="Context-sensitive help UA plug-ins handle the mapping of help contexts to context-specific help content and related online documentation topics.">Context-Sensitive Help UA Plug-ins</a></div>
+</div>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_csh_plugins_with_dita.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_csh_plugins_with_dita.html
new file mode 100644
index 0000000..99063a8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_csh_plugins_with_dita.html
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="Context-Sensitive Help Plug-ins with DITA"/>
+<meta name="abstract" content="Any DITA map document that defines an online documentation (doc) plug-in can be modified to also define a corresponding context-sensitive help plug-in by inserting the appropriate context-related markup."/>
+<meta name="description" content="Any DITA map document that defines an online documentation (doc) plug-in can be modified to also define a corresponding context-sensitive help plug-in by inserting the appropriate context-related markup."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_documentation_team_workflow.html"/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_ui_plugins_associated_with_help_contexts.html"/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_related_topics_associated_with_help_contexts.html"/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_context_specific_help_content.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_8546020E6F3D47089BBF3DF63A18EAED"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>Context-Sensitive Help Plug-ins with DITA</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_8546020E6F3D47089BBF3DF63A18EAED"><a name="concept_8546020E6F3D47089BBF3DF63A18EAED"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">Context-Sensitive Help Plug-ins with DITA</h1>
+
+    
+    <div><p>Any DITA map document that defines an online documentation (doc) plug-in can be
+           modified to also define a corresponding context-sensitive help plug-in by
+           inserting the appropriate context-related markup.
+        </p>
+
+        
+
+        <p>The DITA map markup does not require
+           DITA specializations; it relies entirely on standard DITA-XML elements and
+           attributes.
+        </p>
+
+    </div>
+
+<div>
+<ul class="ullinks">
+<li class="ulchildlink"><strong><a href="../../../../../projects/dtp/dtp/en/source/c_ui_plugins_associated_with_help_contexts.html">UI Plug-ins Associated with Help Contexts</a></strong><br/>
+DITA maps for context-sensitive help plug-ins must contain a &lt;topicmeta&gt; element as the first child of the &lt;map&gt; element, and for each UI plug-in whose help context IDs are identified in the map, that &lt;topicmeta&gt; element must contain one &lt;othermeta&gt; element that identifies the UI plug-in.</li>
+<li class="ulchildlink"><strong><a href="../../../../../projects/dtp/dtp/en/source/c_related_topics_associated_with_help_contexts.html">Related Topics Associated with Help Contexts</a></strong><br/>
+DITA maps for context-sensitive help plug-ins contain &lt;resourceid&gt; elements, each of which identifies a concrete help context ID associated with a DITA topic.</li>
+<li class="ulchildlink"><strong><a href="../../../../../projects/dtp/dtp/en/source/c_context_specific_help_content.html">Context-Specific Help Content</a></strong><br/>
+The ditamap requires specific markup to implement context-sensitive help.</li>
+</ul>
+
+<div class="familylinks">
+<div class="parentlink"><strong>Parent topic:</strong> <a href="../../../../../projects/dtp/dtp/en/source/c_documentation_team_workflow.html" title="Documentation teams should refer to the product’s architectural specifications to define an appropriate architecture (that is, granularity, content partitioning, plug-in naming, and so on) for online documentation plug-ins. With that information, Documentation teams can begin the process to create context-sensitive help plug-ins.">Documentation Team Workflow</a></div>
+</div>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_csh_ua_plugins.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_csh_ua_plugins.html
new file mode 100644
index 0000000..9fab6b5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_csh_ua_plugins.html
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="Context-Sensitive Help UA Plug-ins"/>
+<meta name="abstract" content="Context-sensitive help UA plug-ins handle the mapping of help contexts to context-specific help content and related online documentation topics."/>
+<meta name="description" content="Context-sensitive help UA plug-ins handle the mapping of help contexts to context-specific help content and related online documentation topics."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_eclipse_context_xml_files_extension.html"/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_helpkey_properties_files_extension.html"/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_csh_plugin_ids.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_CA8D4C4D4DCB48C4B02B8556197A640B"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>Context-Sensitive Help UA Plug-ins</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_CA8D4C4D4DCB48C4B02B8556197A640B"><a name="concept_CA8D4C4D4DCB48C4B02B8556197A640B"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">Context-Sensitive Help UA Plug-ins</h1>
+
+    
+    <div><p>Context-sensitive help UA plug-ins handle the mapping of help contexts to
+           context-specific help content and related online documentation topics.
+        </p>
+
+        
+        <div class="p">For projects that use the DTP help-helper, context-sensitive help plug-ins
+           contribute:
+            <br/><a name="concept_CA8D4C4D4DCB48C4B02B8556197A640B__ul_D60802A9E95B4E728ED3BBB917E6EA06"><!-- --></a><ul id="concept_CA8D4C4D4DCB48C4B02B8556197A640B__ul_D60802A9E95B4E728ED3BBB917E6EA06">
+                <li id="concept_CA8D4C4D4DCB48C4B02B8556197A640B__li_0265CD145B494797AFEB4AA66E7EFE89"><a name="concept_CA8D4C4D4DCB48C4B02B8556197A640B__li_0265CD145B494797AFEB4AA66E7EFE89"><!-- --></a>Eclipse context XML files, which supply the context-specific help content for
+                    each help context, and point to other help topic contributions related to the
+                    help context</li>
+
+                <li id="concept_CA8D4C4D4DCB48C4B02B8556197A640B__li_39066DE080F14A8DA42E24413C458339"><a name="concept_CA8D4C4D4DCB48C4B02B8556197A640B__li_39066DE080F14A8DA42E24413C458339"><!-- --></a>Java properties files, which define the property key-value pairs that map
+                    abstract helpKey constants to concrete help context IDs and context-specific
+                    help search expressions</li>
+
+            </ul>
+
+        </div>
+
+
+        <div class="tip"><span class="tiptitle">Tip:</span> The helpKey properties files are usually contributed in pairs, one each
+           for help context IDs and help search expressions.
+        </div>
+
+        <p>The following diagram shows how a dedicated context-sensitive help plug-in
+           interacts with the DTP help-helper and the Eclipse help system at runtime, to
+           provide dynamic context-sensitive help for a UI plug-in.
+        </p>
+
+        <br/><a name="concept_CA8D4C4D4DCB48C4B02B8556197A640B__image_91AC6C14E1944A8DA1378596459891F2"><!-- --></a><div class="imagecenter"><img id="concept_CA8D4C4D4DCB48C4B02B8556197A640B__image_91AC6C14E1944A8DA1378596459891F2" src="../images/dtp_csh_runtime_interaction.jpg" alt="Image shows runtime interactions between the context-sensitive help UA plug-in, the UI plug-in, and the Eclipse Help system."/></div><br/>
+        <div class="p">During workbench startup:
+            <br/><a name="concept_CA8D4C4D4DCB48C4B02B8556197A640B__ul_F5BBE7E6521448D88B3A9C967A4743EA"><!-- --></a><ul id="concept_CA8D4C4D4DCB48C4B02B8556197A640B__ul_F5BBE7E6521448D88B3A9C967A4743EA">
+                <li id="concept_CA8D4C4D4DCB48C4B02B8556197A640B__li_2348E67775ED4CDEB68457B3E1885A29"><a name="concept_CA8D4C4D4DCB48C4B02B8556197A640B__li_2348E67775ED4CDEB68457B3E1885A29"><!-- --></a>The DTP help-helper registers helpKey properties file contributions, declared
+                    by context-sensitive help plug-ins</li>
+
+                <li id="concept_CA8D4C4D4DCB48C4B02B8556197A640B__li_3E6551997D3F48039727DB25F4B3ACC4"><a name="concept_CA8D4C4D4DCB48C4B02B8556197A640B__li_3E6551997D3F48039727DB25F4B3ACC4"><!-- --></a>The Eclipse help system registers:
+                    <br/><a name="concept_CA8D4C4D4DCB48C4B02B8556197A640B__ul_67F52F4BF4AE47FF9927CF54E561F6E1"><!-- --></a><ul id="concept_CA8D4C4D4DCB48C4B02B8556197A640B__ul_67F52F4BF4AE47FF9927CF54E561F6E1">
+                        <li id="concept_CA8D4C4D4DCB48C4B02B8556197A640B__li_3647D37866A74D5F896091008D117C3F"><a name="concept_CA8D4C4D4DCB48C4B02B8556197A640B__li_3647D37866A74D5F896091008D117C3F"><!-- --></a>IContext content contributions, declared by context-sensitive help plug-ins</li>
+
+                        <li id="concept_CA8D4C4D4DCB48C4B02B8556197A640B__li_64C30B62F3A64592A8CECA9280615BCA"><a name="concept_CA8D4C4D4DCB48C4B02B8556197A640B__li_64C30B62F3A64592A8CECA9280615BCA"><!-- --></a>Online help (TOC and topics) contributions, declared by documentation plug-ins</li>
+
+                    </ul>
+</li>
+
+            </ul>
+
+        </div>
+
+        <p>After the workbench is initialized, the GUI is presented, with workbench parts
+           and controls contributed by UI plug-ins. Context-sensitive help requests are
+           usually handled by a UI plug-in (or its delegated help event listener), for the
+           workbench parts and UI controls that it contributes.
+        </p>
+
+        <div class="p">When the user requests context-sensitive help (for example, by pressing F1, or clicking
+           a help icon), the following sequence occurs:
+            <br/><a name="concept_CA8D4C4D4DCB48C4B02B8556197A640B__ol_A63B9717B1A74241AE5B89553EA0D592"><!-- --></a><ol id="concept_CA8D4C4D4DCB48C4B02B8556197A640B__ol_A63B9717B1A74241AE5B89553EA0D592">
+                <li id="concept_CA8D4C4D4DCB48C4B02B8556197A640B__li_A96ED5F003B14C69BCA00D7CB9F7D1F2"><a name="concept_CA8D4C4D4DCB48C4B02B8556197A640B__li_A96ED5F003B14C69BCA00D7CB9F7D1F2"><!-- --></a>The UI plug-in requests a concrete help context ID from the DTP help-helper,
+                    by passing an abstract helpKey.</li>
+
+                <li id="concept_CA8D4C4D4DCB48C4B02B8556197A640B__li_B8AAD5E4A943439588D38B3B6B6A1F46"><a name="concept_CA8D4C4D4DCB48C4B02B8556197A640B__li_B8AAD5E4A943439588D38B3B6B6A1F46"><!-- --></a>The DTP help-helper looks up the help context ID by its associated helpKey,
+                    in the helpKey properties file that was registered for the UI plug-in.</li>
+
+                <li id="concept_CA8D4C4D4DCB48C4B02B8556197A640B__li_888E2D9BA8E04B059864536E5DA83F4C"><a name="concept_CA8D4C4D4DCB48C4B02B8556197A640B__li_888E2D9BA8E04B059864536E5DA83F4C"><!-- --></a>The DTP help-helper returns the help context ID to the UI plug-in.</li>
+
+                <li id="concept_CA8D4C4D4DCB48C4B02B8556197A640B__li_CE6C78704DE04F19A27F1D55046800FD"><a name="concept_CA8D4C4D4DCB48C4B02B8556197A640B__li_CE6C78704DE04F19A27F1D55046800FD"><!-- --></a>The UI plug-in sets the concrete help context ID on its associated workbench
+                    part or UI control, and then passes that help context ID to the Eclipse help
+                    system to request the display of context-sensitive help.</li>
+
+                <li id="concept_CA8D4C4D4DCB48C4B02B8556197A640B__li_B6D1E499916544D99BDC50BD75F2A79B"><a name="concept_CA8D4C4D4DCB48C4B02B8556197A640B__li_B6D1E499916544D99BDC50BD75F2A79B"><!-- --></a>The Eclipse help system looks up the context-specific content and related
+                    topics by help context ID, retrieves them from the context XML file that was
+                    registered for the UI plug-in, and then displays them in the Help view.</li>
+
+                <li id="concept_CA8D4C4D4DCB48C4B02B8556197A640B__li_2DC6444276F64D94B1C483BC06BF701B"><a name="concept_CA8D4C4D4DCB48C4B02B8556197A640B__li_2DC6444276F64D94B1C483BC06BF701B"><!-- --></a>Upon user request (by clicking a related topic link), the Eclipse help system
+                    retrieves the help topic content contributed by a documentation plug-in and
+                    displays it in the Help view.</li>
+
+            </ol>
+
+        </div>
+
+    </div>
+
+<div>
+<ul class="ullinks">
+<li class="ulchildlink"><strong><a href="../../../../../projects/dtp/dtp/en/source/c_eclipse_context_xml_files_extension.html">Eclipse Context XML Files Extension</a></strong><br/>
+Each plug-in that contributes an Eclipse context XML file must declare an extension to org.eclipse.help.contexts in its plug-in manifest (plugin.xml file).</li>
+<li class="ulchildlink"><strong><a href="../../../../../projects/dtp/dtp/en/source/c_helpkey_properties_files_extension.html">helpKey Properties Files Extension</a></strong><br/>
+Each plug-in that contributes helpKey properties files must declare an extension to org.eclipse.datatools.help.helpKeyProperties in its plug-in manifest (plugin.xml file).</li>
+<li class="ulchildlink"><strong><a href="../../../../../projects/dtp/dtp/en/source/c_csh_plugin_ids.html">Context-Sensitive Help Plug-in IDs</a></strong><br/>
+Context-sensitive help plug-ins can be supplied as dedicated plug-ins, which point to related help topics that are contributed by other, online documentation plug-ins, but do not contribute any help topics themselves.</li>
+</ul>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_csh_ui_implementation.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_csh_ui_implementation.html
new file mode 100644
index 0000000..05578d9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_csh_ui_implementation.html
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="Context-Sensitive Help UI Implementation"/>
+<meta name="abstract" content="Java code examples of dynamic help context implementation in a view and a dialog, with context abstraction, are from the Eclipse Data Tools Platform (DTP) 1.6 source code."/>
+<meta name="description" content="Java code examples of dynamic help context implementation in a view and a dialog, with context abstraction, are from the Eclipse Data Tools Platform (DTP) 1.6 source code."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_view_implementation_example.html"/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_dialog_implementation_example.html"/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_helpkey_constants_interface_class.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_C89CFE21FCFF4115A5D04649D535CEAA"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>Context-Sensitive Help UI Implementation</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_C89CFE21FCFF4115A5D04649D535CEAA"><a name="concept_C89CFE21FCFF4115A5D04649D535CEAA"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">Context-Sensitive Help UI Implementation</h1>
+
+    
+    <div><p>Java code examples of dynamic help context implementation in a view and a dialog, with context abstraction, are from the Eclipse Data Tools Platform (DTP) 1.6 
+           source code.
+        </p>
+
+        
+        
+    </div>
+
+<div>
+<ul class="ullinks">
+<li class="ulchildlink"><strong><a href="../../../../../projects/dtp/dtp/en/source/c_view_implementation_example.html">View Implementation Example</a></strong><br/>
+The DataSourceExplorerView (in org.eclipse.datatools.connectivity.ui.dse) first implements the org.eclipse.help.IContextProvider interface, and then it creates an instance of the org.eclipse.datatools.help.ContextProviderDelegate.</li>
+<li class="ulchildlink"><strong><a href="../../../../../projects/dtp/dtp/en/source/c_dialog_implementation_example.html">Dialog Implementation Example</a></strong><br/>
+Dialogs must set the help context in the createDialogArea method (to provide context-sensitive help for the dialog itself).</li>
+<li class="ulchildlink"><strong><a href="../../../../../projects/dtp/dtp/en/source/c_helpkey_constants_interface_class.html">helpKey Constants Interface Class</a></strong><br/>
+To reference the externalized help context IDs, which are defined in a ResourceBundle properties file, UI components must implement an interface class to declare the abstract helpKey constants.</li>
+</ul>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_debug_mode.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_debug_mode.html
new file mode 100644
index 0000000..ea46150
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_debug_mode.html
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="Debug Mode"/>
+<meta name="abstract" content="The Eclipse platform debug mode can be useful for testing and troubleshooting dynamic context-sensitive help."/>
+<meta name="description" content="The Eclipse platform debug mode can be useful for testing and troubleshooting dynamic context-sensitive help."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_test_dynamic_context-sensitive_help.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_611B618A73C24707888C67CEB522E4C8"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>Debug Mode</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_611B618A73C24707888C67CEB522E4C8"><a name="concept_611B618A73C24707888C67CEB522E4C8"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">Debug Mode</h1>
+
+    
+    
+    <div><p>The Eclipse platform debug mode can be useful for testing
+        and troubleshooting dynamic context-sensitive help.
+    </p>
+
+        <p>Use the following command line options to start the platform
+            in debug mode:
+        </p>
+
+        <pre class="codeblock">
+    -debug -consoleLog
+</pre>
+
+        <p>Set the following debug points in the .options file:
+        </p>
+
+        <pre class="codeblock">
+    org.eclipse.help/debug = true
+    org.eclipse.help/debug/context = true
+</pre>
+
+    </div>
+
+<div>
+<div class="familylinks">
+<div class="parentlink"><strong>Parent topic:</strong> <a href="../../../../../projects/dtp/dtp/en/source/c_test_dynamic_context-sensitive_help.html" title="Dynamic context-sensitive help in Eclipse involves complex interactions between several components, so testing it requires a properly configured runtime platform, with both user interface (UI) components and user assistance (UA) components installed.">Test Dynamic Context-Sensitive Help</a></div>
+</div>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_development_team_responsibilities.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_development_team_responsibilities.html
new file mode 100644
index 0000000..fc0621a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_development_team_responsibilities.html
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="Development Team Responsibilities"/>
+<meta name="abstract" content="Development teams should provide lists of the helpKey constants in the form of Java source files for the helpKey constants interface classes."/>
+<meta name="description" content="Development teams should provide lists of the helpKey constants in the form of Java source files for the helpKey constants interface classes."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_team_responsibilities_and_collaboration.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_60C6551B14084A609894961781745E36"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>Development Team Responsibilities</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_60C6551B14084A609894961781745E36"><a name="concept_60C6551B14084A609894961781745E36"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">Development Team Responsibilities</h1>
+
+    
+    <div><p>Development teams should provide lists of the helpKey constants in the form of
+           Java source files for the helpKey constants interface classes.
+        </p>
+
+        <div class="p">Development teams are primarily responsible to:
+            <br/><a name="concept_60C6551B14084A609894961781745E36__ul_9D628CC75CF3461F9E73253853B0797F"><!-- --></a><ul id="concept_60C6551B14084A609894961781745E36__ul_9D628CC75CF3461F9E73253853B0797F">
+                <li id="concept_60C6551B14084A609894961781745E36__li_8B23985C524F41FDB2E44CA7859612F5"><a name="concept_60C6551B14084A609894961781745E36__li_8B23985C524F41FDB2E44CA7859612F5"><!-- --></a>Implement the Eclipse classes and methods necessary to enable dynamic
+                    context-sensitive help for all appropriate UI controls.</li>
+
+                <li id="concept_60C6551B14084A609894961781745E36__li_E3294AEB6F31421B80CEF353CC8B7CF7"><a name="concept_60C6551B14084A609894961781745E36__li_E3294AEB6F31421B80CEF353CC8B7CF7"><!-- --></a>Implement the interface classes that declare helpKey constants for each UI
+                    plug-in.</li>
+
+                <li id="concept_60C6551B14084A609894961781745E36__li_DFED0A66A4A04B29B9B0182A015AB383"><a name="concept_60C6551B14084A609894961781745E36__li_DFED0A66A4A04B29B9B0182A015AB383"><!-- --></a>Provide lists of the helpKey constants to Documentation teams in a timely
+                    manner.</li>
+
+
+                <li>Test the context-sensitive help UI implementation, with 
+                    context-sensitive help UA plug-ins and online documentation
+                    plug-ins provided by Documentation teams.</li>
+
+            </ul>
+
+        </div>
+
+        
+
+        <p>Java source files provided as helpKey lists must include the help context
+           comments to provide information about each associated UI control.
+        </p>
+
+    </div>
+
+<div>
+<div class="familylinks">
+<div class="parentlink"><strong>Parent topic:</strong> <a href="../../../../../projects/dtp/dtp/en/source/c_team_responsibilities_and_collaboration.html" title="Successful delivery of dynamic context-sensitive help requires a close coordination of UI components and UA components. It imposes responsibilities on both Development teams and Documentation teams, and it requires ongoing collaboration among those teams.">Team Responsibilities and Collaboration</a></div>
+</div>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_dialog_implementation_example.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_dialog_implementation_example.html
new file mode 100644
index 0000000..efe355f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_dialog_implementation_example.html
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="Dialog Implementation Example"/>
+<meta name="abstract" content="Dialogs must set the help context in the createDialogArea method (to provide context-sensitive help for the dialog itself)."/>
+<meta name="description" content="Dialogs must set the help context in the createDialogArea method (to provide context-sensitive help for the dialog itself)."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_csh_ui_implementation.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_2C1E8DCD77A840428662961C62549C81"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>Dialog Implementation Example</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_2C1E8DCD77A840428662961C62549C81"><a name="concept_2C1E8DCD77A840428662961C62549C81"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">Dialog Implementation Example</h1>
+
+    
+    <div><p>Dialogs must set the help context in the createDialogArea method (to provide
+           context-sensitive help for the dialog itself).
+        </p>
+
+        
+        <p>EditDriverDialog (in org.eclipse.datatools.connectivity.internal.ui.dialogs)
+           implements the createDialogArea method like this:
+        </p>
+
+        <pre class="codeblock">
+    protected Control createDialogArea(Composite parent) {
+        getShell().setData( HelpUtil.CONTEXT_PROVIDER_KEY, this);
+        HelpUtil.setHelp( getShell(),
+            HelpUtil.getContextId(IHelpConstants.CONTEXT_ID_EDIT_DRIVER_DIALOG,
+            ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName()));
+       ...
+    }
+</pre>
+
+        <div class="p">This is similar to the technique in the DataSourceExplorerView, except that
+           EditDriverDialog uses methods of the org.eclipse.datatools.help.HelpUtil class
+           to associate an instance of the context provider delegate with the dialog.
+            <br/><a name="concept_2C1E8DCD77A840428662961C62549C81__ul_CF5B754DD3CC4565BE929E9423E0E37B"><!-- --></a><ul id="concept_2C1E8DCD77A840428662961C62549C81__ul_CF5B754DD3CC4565BE929E9423E0E37B">
+                <li id="concept_2C1E8DCD77A840428662961C62549C81__li_06AD0F61732F4389BF63D4214AD3E6AC"><a name="concept_2C1E8DCD77A840428662961C62549C81__li_06AD0F61732F4389BF63D4214AD3E6AC"><!-- --></a>The first call, <samp class="codeph">getShell().setData()</samp> 
+                    tells the help system that the dialog
+                    will use the help-helper’s delegated setHelp method to provide help contexts.</li>
+
+                <li id="concept_2C1E8DCD77A840428662961C62549C81__li_689653B16EB8495F9990104BAE8F4AFE"><a name="concept_2C1E8DCD77A840428662961C62549C81__li_689653B16EB8495F9990104BAE8F4AFE"><!-- --></a>The second call, <samp class="codeph">HelpUtil.setHelp()</samp> is a method that wraps the
+                    IWorkbench.setHelp call in a unique listener, so that the help system can find
+                    the correct help context for this control (in this case, the shell for the
+                    dialog).</li>
+
+            </ul>
+
+        </div>
+
+        <p>To provide more granular help, at a lower level in the dialog, the dialog could
+           call setHelp, with a unique help context for each control in the dialog.
+        </p>
+
+
+        <p>The string passed to the setHelp method is actually an 
+           abstract helpKey constant, whose property key is mapped to a concrete help 
+           context ID string by the ContextProviderDelegate.
+        </p>
+
+        <p>All helpKey constant strings must be declared in an interface class. 
+
+        </p>
+
+    </div>
+
+<div>
+<div class="familylinks">
+<div class="parentlink"><strong>Parent topic:</strong> <a href="../../../../../projects/dtp/dtp/en/source/c_csh_ui_implementation.html" title="Java code examples of dynamic help context implementation in a view and a dialog, with context abstraction, are from the Eclipse Data Tools Platform (DTP) 1.6 source code.">Context-Sensitive Help UI Implementation</a></div>
+</div>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_documentation_team_responsibilities.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_documentation_team_responsibilities.html
new file mode 100644
index 0000000..f167642
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_documentation_team_responsibilities.html
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="Documentation Team Responsibilities"/>
+<meta name="abstract" content="A documentation team has several responsibilities when delivering context-sensitive help content."/>
+<meta name="description" content="A documentation team has several responsibilities when delivering context-sensitive help content."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_team_responsibilities_and_collaboration.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_9167A4694E7E43AB9D32835CBDAB0EE0"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>Documentation Team Responsibilities</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_9167A4694E7E43AB9D32835CBDAB0EE0"><a name="concept_9167A4694E7E43AB9D32835CBDAB0EE0"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">Documentation Team Responsibilities</h1>
+
+    
+    <div><p>A documentation team has several responsibilities when delivering context-sensitive help content.</p>
+
+        <div class="p">Its primarily responsible to:
+            <br/><a name="concept_9167A4694E7E43AB9D32835CBDAB0EE0__ul_DCFCE572127243DE81A734DF3DF49F76"><!-- --></a><ul id="concept_9167A4694E7E43AB9D32835CBDAB0EE0__ul_DCFCE572127243DE81A734DF3DF49F76">
+                <li id="concept_9167A4694E7E43AB9D32835CBDAB0EE0__li_51378EFA35F94C60A80729F30378A81C"><a name="concept_9167A4694E7E43AB9D32835CBDAB0EE0__li_51378EFA35F94C60A80729F30378A81C"><!-- --></a>Develop context-specific help content and context-specific help search
+                    expressions for appropriate UI help contexts.</li>
+
+                <li id="concept_9167A4694E7E43AB9D32835CBDAB0EE0__li_DE806556D8084035804E634F7DC8DA63"><a name="concept_9167A4694E7E43AB9D32835CBDAB0EE0__li_DE806556D8084035804E634F7DC8DA63"><!-- --></a>Define the concrete help context ID strings that associate abstract help
+                    contexts with context-specific help content.</li>
+
+                <li id="concept_9167A4694E7E43AB9D32835CBDAB0EE0__li_33B9307781BF449098A71A1A319B6FD3"><a name="concept_9167A4694E7E43AB9D32835CBDAB0EE0__li_33B9307781BF449098A71A1A319B6FD3"><!-- --></a>Create the Java properties files that define the mapping of abstract help
+                    contexts to concrete help context IDs.</li>
+
+                <li id="concept_9167A4694E7E43AB9D32835CBDAB0EE0__li_9E03F70533474D82B6067001B8C05B0F"><a name="concept_9167A4694E7E43AB9D32835CBDAB0EE0__li_9E03F70533474D82B6067001B8C05B0F"><!-- --></a>Create the context-sensitive help UA plug-ins that contribute Eclipse context
+                    XML files and the Java properties files.</li>
+
+
+                <li>Test the context-sensitive help UA plug-ins and online documentation plug-ins, 
+                    with UI components provided by Development teams.</li>
+
+            </ul>
+
+        </div>
+
+        <p>Documentation teams should rely on the Java source files (for the helpKey
+           constants interface classes) as the original and definitive sources of all
+           helpKey constant strings.
+        </p>
+
+        <p>Creating the Java properties files can be somewhat automated (that is, by
+           processing the Java source files with a simple Perl script).
+        </p>
+
+        <p>Most of the other artifacts required for a context-sensitive help UA plug-in can
+           be generated by XSL transformations of a DITA-XML map document.
+
+        </p>
+
+    </div>
+
+<div>
+<div class="familylinks">
+<div class="parentlink"><strong>Parent topic:</strong> <a href="../../../../../projects/dtp/dtp/en/source/c_team_responsibilities_and_collaboration.html" title="Successful delivery of dynamic context-sensitive help requires a close coordination of UI components and UA components. It imposes responsibilities on both Development teams and Documentation teams, and it requires ongoing collaboration among those teams.">Team Responsibilities and Collaboration</a></div>
+</div>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_documentation_team_workflow.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_documentation_team_workflow.html
new file mode 100644
index 0000000..adc7c82
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_documentation_team_workflow.html
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="Documentation Team Workflow"/>
+<meta name="abstract" content="Documentation teams should refer to the product’s architectural specifications to define an appropriate architecture (that is, granularity, content partitioning, plug-in naming, and so on) for online documentation plug-ins. With that information, Documentation teams can begin the process to create context-sensitive help plug-ins."/>
+<meta name="description" content="Documentation teams should refer to the product’s architectural specifications to define an appropriate architecture (that is, granularity, content partitioning, plug-in naming, and so on) for online documentation plug-ins. With that information, Documentation teams can begin the process to create context-sensitive help plug-ins."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_help_context_ids.html"/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_help_search_expressions.html"/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_csh_plugins_with_dita.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_BB3CED38F0364F5783F6D8D8139CF0DF"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>Documentation Team Workflow</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_BB3CED38F0364F5783F6D8D8139CF0DF"><a name="concept_BB3CED38F0364F5783F6D8D8139CF0DF"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">Documentation Team Workflow</h1>
+
+    
+    <div><p>Documentation teams should refer to the product’s architectural specifications
+           to define an appropriate architecture (that is, granularity, content partitioning,
+           plug-in naming, and so on) for online documentation plug-ins. With that information,
+           Documentation teams can begin the process to create context-sensitive help
+           plug-ins.
+        </p>
+
+        
+
+        <p>The Documentation team workflow described in this section assumes that
+           dedicated context-sensitive help plug-ins will be produced from DITA-XML map
+           documents. The workflow can be adjusted for other help content source formats.
+        </p>
+
+        <div class="p">The following list summarizes the overall Documentation team workflow to create
+           context-sensitive help plug-ins:
+            <br/><a name="concept_BB3CED38F0364F5783F6D8D8139CF0DF__ol_296D684F5956402993FFBAA7EC1F4F53"><!-- --></a><ol id="concept_BB3CED38F0364F5783F6D8D8139CF0DF__ol_296D684F5956402993FFBAA7EC1F4F53">
+                <li id="concept_BB3CED38F0364F5783F6D8D8139CF0DF__li_C87FEFC574A24368B51C367EA27B4D95"><a name="concept_BB3CED38F0364F5783F6D8D8139CF0DF__li_C87FEFC574A24368B51C367EA27B4D95"><!-- --></a>Get the helpKey list (provided as a Java source file) from the UI Development
+                    team for each UI plug-in.</li>
+
+                <li id="concept_BB3CED38F0364F5783F6D8D8139CF0DF__li_574E257AF7754B60B45E16A7D5E16237"><a name="concept_BB3CED38F0364F5783F6D8D8139CF0DF__li_574E257AF7754B60B45E16A7D5E16237"><!-- --></a>Analyze the helpKey list and associated UI controls to define the help
+                    contexts. (For more information, see Defining Help Context IDs.)
+                    <div class="p">The Documentation team must determine whether:
+                        <br/><a name="concept_BB3CED38F0364F5783F6D8D8139CF0DF__ul_BEF274E03B494DA38CAA1804B3C6D1AD"><!-- --></a><ul id="concept_BB3CED38F0364F5783F6D8D8139CF0DF__ul_BEF274E03B494DA38CAA1804B3C6D1AD">
+                            <li id="concept_BB3CED38F0364F5783F6D8D8139CF0DF__li_6719759B40754096A51C377C996D6354"><a name="concept_BB3CED38F0364F5783F6D8D8139CF0DF__li_6719759B40754096A51C377C996D6354"><!-- --></a>The helpKey constants alone are sufficient to identify actual help contexts,
+                                and thus, helpKey constants could map directly to a concrete help context ID,
+                                with the same string value as the helpKey constant.</li>
+
+                            <li id="concept_BB3CED38F0364F5783F6D8D8139CF0DF__li_3A8243729F224F4699EA76083C335D7E"><a name="concept_BB3CED38F0364F5783F6D8D8139CF0DF__li_3A8243729F224F4699EA76083C335D7E"><!-- --></a>Distinct help context ID strings must be defined to combine groups of helpKey
+                                constants into common help contexts.</li>
+
+                        </ul>
+
+                    </div>
+
+
+                    <div class="tip"><span class="tiptitle">Tip:</span> It may be preferable to combine help contexts in the helpKey properties
+                       file, instead of defining the mapping for multiple help contexts to a single
+                       topic in a DITA map. This is a judgment call for the Documentation team lead,
+                       and the IAs responsible for maintaining DITA maps. 
+
+                    </div>
+</li>
+
+                <li id="concept_BB3CED38F0364F5783F6D8D8139CF0DF__li_47A884DAA8644EB59A0127937EF11819"><a name="concept_BB3CED38F0364F5783F6D8D8139CF0DF__li_47A884DAA8644EB59A0127937EF11819"><!-- --></a>Analyze the help contexts and existing (or planned) help topics to define
+                    context-specific help search expressions.</li>
+
+
+                <li id="concept_BB3CED38F0364F5783F6D8D8139CF0DF__li_A892161B33604A8294F109DA788EE0C0"><a name="concept_BB3CED38F0364F5783F6D8D8139CF0DF__li_A892161B33604A8294F109DA788EE0C0"><!-- --></a>Create helpKey properties files, based on the content of each Java source
+                    file.
+                    <br/><a name="concept_BB3CED38F0364F5783F6D8D8139CF0DF__ul_426692ED26034E199125CB31C9BAF7C9"><!-- --></a><ul id="concept_BB3CED38F0364F5783F6D8D8139CF0DF__ul_426692ED26034E199125CB31C9BAF7C9">
+                        <li id="concept_BB3CED38F0364F5783F6D8D8139CF0DF__li_388A29125A004B4698B5B0FF61D5EBA4"><a name="concept_BB3CED38F0364F5783F6D8D8139CF0DF__li_388A29125A004B4698B5B0FF61D5EBA4"><!-- --></a>Define the mapping of helpKey constants to concrete help context IDs and
+                            context-specific help search expressions, based on results of the help context
+                            analysis and help topic (content) analysis.</li>
+
+                        <li id="concept_BB3CED38F0364F5783F6D8D8139CF0DF__li_0F8009E455A04002BCFF975FC13574F4"><a name="concept_BB3CED38F0364F5783F6D8D8139CF0DF__li_0F8009E455A04002BCFF975FC13574F4"><!-- --></a>Save the helpKey properties files in source control, as appropriate.</li>
+
+                    </ul>
+
+
+                    <div class="tip"><span class="tiptitle">Tip:</span> The helpKey properties files are flat ASCII text files, so the authors (or
+                       IAs) responsible for defining the help context IDs and context-specific help
+                       search expressions should use a suitable ASCII text editor to create and edit
+                       those files.
+
+                    </div>
+</li>
+
+                <li id="concept_BB3CED38F0364F5783F6D8D8139CF0DF__li_84D458A3EFC74BBB914374320D6D86C5"><a name="concept_BB3CED38F0364F5783F6D8D8139CF0DF__li_84D458A3EFC74BBB914374320D6D86C5"><!-- --></a>Modify existing DITA maps (if used to produce online documentation plug-ins)
+                    to add the markup for context-sensitive help.</li>
+
+
+
+
+                <li>Test the deployable context-sensitive help plug-ins, with UI components 
+                    provided by Development teams.</li>
+
+
+
+            </ol>
+
+        </div>
+
+    </div>
+
+<div>
+<ul class="ullinks">
+<li class="ulchildlink"><strong><a href="../../../../../projects/dtp/dtp/en/source/c_help_context_ids.html">Help Context IDs</a></strong><br/>
+Because helpKey constants are abstract entities in the Java code, and independent of the actual help context IDs, Documentation teams are responsible for defining the help contexts, which the Eclipse help system uses to locate context-specific help content, and associating each helpKey constant with an actual help context ID.</li>
+<li class="ulchildlink"><strong><a href="../../../../../projects/dtp/dtp/en/source/c_help_search_expressions.html">Help Search Expressions</a></strong><br/>
+Each help context should be associated with a context-specific help search expression, which the Eclipse help system will use to provide Dynamic Help search results in the Help view.</li>
+<li class="ulchildlink"><strong><a href="../../../../../projects/dtp/dtp/en/source/c_csh_plugins_with_dita.html">Context-Sensitive Help Plug-ins with DITA</a></strong><br/>
+Any DITA map document that defines an online documentation (doc) plug-in can be modified to also define a corresponding context-sensitive help plug-in by inserting the appropriate context-related markup.</li>
+</ul>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_dtp_help_helper.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_dtp_help_helper.html
new file mode 100644
index 0000000..c06d9b3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_dtp_help_helper.html
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="DTP Help-Helper"/>
+<meta name="abstract" content="The DTP help-helper plug-in (org.eclipse.datatools.help) provides a “help key” extension point (org.eclipse.datatools.help.helpKeyProperties), and supplies a context provider delegate implementation (org.eclipse.datatools.help.ContextProviderDelegate)."/>
+<meta name="description" content="The DTP help-helper plug-in (org.eclipse.datatools.help) provides a “help key” extension point (org.eclipse.datatools.help.helpKeyProperties), and supplies a context provider delegate implementation (org.eclipse.datatools.help.ContextProviderDelegate)."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_help_keys.html"/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_context_provider_delegate.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_AF938275D5E14495A93FD25CBC4B73D0"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>DTP Help-Helper</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_AF938275D5E14495A93FD25CBC4B73D0"><a name="concept_AF938275D5E14495A93FD25CBC4B73D0"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">DTP Help-Helper</h1>
+
+    
+    <div><p>The DTP help-helper plug-in (org.eclipse.datatools.help) provides a “help key”
+           extension point (org.eclipse.datatools.help.helpKeyProperties), and supplies a
+           context provider delegate implementation (org.eclipse.datatools.help.ContextProviderDelegate).
+        </p>
+
+        
+        <p>The helpKeyProperties extension point allows any plug-in to contribute
+           ResourceBundle properties files that define the mapping of abstract help keys to
+           concrete help context IDs and help search expressions.
+        </p>
+
+        <p>The ContextProviderDelegate, along with abstract help keys, enables help context
+           abstraction for any UI control that implements methods of IContextProvider.
+        </p>
+
+    </div>
+
+<div>
+<ul class="ullinks">
+<li class="ulchildlink"><strong><a href="../../../../../projects/dtp/dtp/en/source/c_help_keys.html">Help Keys</a></strong><br/>
+Rather than declaring help context IDs directly, UI controls use help keys (that is, helpKey constants). Though meaningless to the Eclipse help system, helpKey constants provide an abstraction in the Java code from the actual help context IDs and help search expressions.</li>
+<li class="ulchildlink"><strong><a href="../../../../../projects/dtp/dtp/en/source/c_context_provider_delegate.html">Context Provider Delegate</a></strong><br/>
+The ContextProviderDelegate allows a UI control to provide the actual help context ID and help search expression to the methods of IContextProvider, while handling references to those strings as an abstract help key (helpKey constant).</li>
+</ul>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_dynamic_csh.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_dynamic_csh.html
new file mode 100644
index 0000000..5b7e6e5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_dynamic_csh.html
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="Dynamic Context-Sensitive Help"/>
+<meta name="abstract" content="Since 3.1, Eclipse supports dynamic context-sensitive help."/>
+<meta name="description" content="Since 3.1, Eclipse supports dynamic context-sensitive help."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_introduction_to_csh.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_2C86D6580AB44FD38EE0F314ABCE6DEE"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>Dynamic Context-Sensitive Help</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_2C86D6580AB44FD38EE0F314ABCE6DEE"><a name="concept_2C86D6580AB44FD38EE0F314ABCE6DEE"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">Dynamic Context-Sensitive Help</h1>
+
+    
+    <div><p>Since 3.1, Eclipse supports dynamic context-sensitive help.</p>
+
+        <div class="p"> The two pieces of dynamic context-sensitive help include:
+            <br/><a name="concept_2C86D6580AB44FD38EE0F314ABCE6DEE__ul_8AD3545178F3419F8DCEC3CB2BB8E177"><!-- --></a><ul id="concept_2C86D6580AB44FD38EE0F314ABCE6DEE__ul_8AD3545178F3419F8DCEC3CB2BB8E177">
+                <li id="concept_2C86D6580AB44FD38EE0F314ABCE6DEE__li_D396E801FC374F57AB43C1DD1D1502B0"><a name="concept_2C86D6580AB44FD38EE0F314ABCE6DEE__li_D396E801FC374F57AB43C1DD1D1502B0"><!-- --></a>An interface class (org.eclipse.help.IContextProvider), and</li>
+
+                <li id="concept_2C86D6580AB44FD38EE0F314ABCE6DEE__li_3214765302EC4451A8DEE253D0626A3B"><a name="concept_2C86D6580AB44FD38EE0F314ABCE6DEE__li_3214765302EC4451A8DEE253D0626A3B"><!-- --></a>The Help view (a workbench part)</li>
+
+            </ul>
+
+        </div>
+
+        <div class="p">To provide dynamic context-sensitive help, a UI component must define the
+           associations between its UI controls and help contexts dynamically, by
+           implementing methods of IContextProvider:
+            <br/><a name="concept_2C86D6580AB44FD38EE0F314ABCE6DEE__ul_D0772BF18D3045FD92AE02AEB7598E82"><!-- --></a><ul id="concept_2C86D6580AB44FD38EE0F314ABCE6DEE__ul_D0772BF18D3045FD92AE02AEB7598E82">
+                <li id="concept_2C86D6580AB44FD38EE0F314ABCE6DEE__li_B3398BEEE76F40FC802AF7C1F194C110"><a name="concept_2C86D6580AB44FD38EE0F314ABCE6DEE__li_B3398BEEE76F40FC802AF7C1F194C110"><!-- --></a>getContext(Object target) — returns a help context (ID) for the given target</li>
+
+                <li id="concept_2C86D6580AB44FD38EE0F314ABCE6DEE__li_594BDD3B6EA34AFD9BC5D20996F78425"><a name="concept_2C86D6580AB44FD38EE0F314ABCE6DEE__li_594BDD3B6EA34AFD9BC5D20996F78425"><!-- --></a>getContextChangeMask() — returns the mask created by combining supported
+                    change triggers, using the bitwise OR operation</li>
+
+                <li id="concept_2C86D6580AB44FD38EE0F314ABCE6DEE__li_517EA1FCD50241FF850A05BAA922F76F"><a name="concept_2C86D6580AB44FD38EE0F314ABCE6DEE__li_517EA1FCD50241FF850A05BAA922F76F"><!-- --></a>getSearchExpression(Object target) — returns a search expression that the help
+                system should use to find more help content related to the current target</li>
+
+            </ul>
+
+        </div>
+
+        <p>The Help view tracks the activation of workbench parts (views and editors), and
+           it checks to see if they adapt to the IContextProvider interface. If they do,
+           the Help view uses the IContextProvider methods (implemented in the UI
+           component) to locate a corresponding IContext object.
+        </p>
+
+        <p>The IContextProvider.getContextChangeMask method provides a mask that the Help
+           view uses to determine when a context change occurs dynamically (for example, as a
+           result of a user gesture to change the UI focus).
+        </p>
+
+        <div class="p">When the Help view detects a context change, it updates its context-sensitive
+           help presentation to display:
+            <br/><a name="concept_2C86D6580AB44FD38EE0F314ABCE6DEE__ul_1E715FA0980448D8B32ED4A13894BE5B"><!-- --></a><ul id="concept_2C86D6580AB44FD38EE0F314ABCE6DEE__ul_1E715FA0980448D8B32ED4A13894BE5B">
+                <li id="concept_2C86D6580AB44FD38EE0F314ABCE6DEE__li_8B94327EA3AF4FDA865D9E1754A721DE"><a name="concept_2C86D6580AB44FD38EE0F314ABCE6DEE__li_8B94327EA3AF4FDA865D9E1754A721DE"><!-- --></a>The content of the IContext object that is associated with the current context
+                    (that is, the name and description of the UI control, and a list of related help
+                    topics)</li>
+
+                <li id="concept_2C86D6580AB44FD38EE0F314ABCE6DEE__li_06847842575447B0A12C196B0DD7AF08"><a name="concept_2C86D6580AB44FD38EE0F314ABCE6DEE__li_06847842575447B0A12C196B0DD7AF08"><!-- --></a>Dynamic Help search results — a list of help topics found using the search
+                    expression that was returned by the IContextProvider.getSearchExpression method</li>
+
+            </ul>
+
+        </div>
+
+        <p>The content of an IContext object (and its association with a particular help
+           context ID) is defined by a context XML file, which is usually contributed by a
+           UA component.
+        </p>
+
+        <p>To register IContext content contributions with the help system, a UA plug-in
+           must declare an extension of org.eclipse.help.contexts, identifying both the
+           context XML file and the UI plug-in for which the IContext content is
+           contributed.
+        </p>
+
+
+    </div>
+
+<div>
+<div class="familylinks">
+<div class="parentlink"><strong>Parent topic:</strong> <a href="../../../../../projects/dtp/dtp/en/source/c_introduction_to_csh.html" title="Context-sensitive help is focused user assistance content, specific to the current application context (that is, the help context), and presented on demand when a platform-specific trigger is activated (for example, F1 on Windows).">Introduction to Context-Sensitive Help</a></div>
+</div>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_eclipse_context_xml_files_extension.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_eclipse_context_xml_files_extension.html
new file mode 100644
index 0000000..4f4a959
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_eclipse_context_xml_files_extension.html
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="Eclipse Context XML Files Extension"/>
+<meta name="abstract" content="Each plug-in that contributes an Eclipse context XML file must declare an extension to org.eclipse.help.contexts in its plug-in manifest (plugin.xml file)."/>
+<meta name="description" content="Each plug-in that contributes an Eclipse context XML file must declare an extension to org.eclipse.help.contexts in its plug-in manifest (plugin.xml file)."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_csh_ua_plugins.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_178F79B3CF2D4D35B8C0355A3B49980A"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>Eclipse Context XML Files Extension</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_178F79B3CF2D4D35B8C0355A3B49980A"><a name="concept_178F79B3CF2D4D35B8C0355A3B49980A"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">Eclipse Context XML Files Extension</h1>
+
+    
+    <div><p>Each plug-in that contributes an Eclipse context XML file must declare an
+           extension to org.eclipse.help.contexts in its plug-in manifest (plugin.xml
+           file).</p>
+
+        <p>For example:
+        </p>
+
+        <pre class="codeblock">
+    &lt;extension point="org.eclipse.help.contexts"&gt;
+        &lt;contexts file="dtp_contexts.xml"
+            plugin="org.eclipse.datatools.connectivity.ui"/&gt;
+    &lt;/extension&gt;
+</pre>
+
+        <p>For more information about Eclipse context XML files and contributing them, 
+           see
+            <a href="http://help.eclipse.org/help33/topic/org.eclipse.platform.doc.isv/guide/ua_help_context_xml.htm" target="_blank">Describing and packaging context-sensitive help content</a>
+           in the <cite>Platform Plug-in Developer Guide</cite>.
+        </p>
+
+    </div>
+
+<div>
+<div class="familylinks">
+<div class="parentlink"><strong>Parent topic:</strong> <a href="../../../../../projects/dtp/dtp/en/source/c_csh_ua_plugins.html" title="Context-sensitive help UA plug-ins handle the mapping of help contexts to context-specific help content and related online documentation topics.">Context-Sensitive Help UA Plug-ins</a></div>
+</div>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_help_context_abstraction.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_help_context_abstraction.html
new file mode 100644
index 0000000..71d8de1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_help_context_abstraction.html
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="Help Context Abstraction"/>
+<meta name="abstract" content="Help context abstraction is a technique to simplify the handling of help context IDs and help search expressions in the UI code, by abstracting them to “help keys.”"/>
+<meta name="description" content="Help context abstraction is a technique to simplify the handling of help context IDs and help search expressions in the UI code, by abstracting them to “help keys.”"/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_introduction_to_csh.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_9B577F7CD24240E2925D439CC1E2F313"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>Help Context Abstraction</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_9B577F7CD24240E2925D439CC1E2F313"><a name="concept_9B577F7CD24240E2925D439CC1E2F313"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">Help Context Abstraction</h1>
+
+    
+    <div><p>Help context abstraction is a technique to simplify the handling of help context
+           IDs and help search expressions in the UI code, by abstracting them to “help
+           keys.”
+        </p>
+
+        
+        <div class="p">Help context abstraction provides the following benefits:
+            <br/><a name="concept_9B577F7CD24240E2925D439CC1E2F313__ul_CF8AC6CB65F14CA49EB983B85C178D6E"><!-- --></a><ul id="concept_9B577F7CD24240E2925D439CC1E2F313__ul_CF8AC6CB65F14CA49EB983B85C178D6E">
+                <li id="concept_9B577F7CD24240E2925D439CC1E2F313__li_D2FEF367CBE3485CB93AE96C198F1CD8"><a name="concept_9B577F7CD24240E2925D439CC1E2F313__li_D2FEF367CBE3485CB93AE96C198F1CD8"><!-- --></a>Development teams are free to associate new help contexts with UI controls,
+                    without necessitating that corresponding help context IDs or help search
+                    expressions exist.</li>
+
+                <li id="concept_9B577F7CD24240E2925D439CC1E2F313__li_6EE7CDE942A94065862D4A53F6F02DEA"><a name="concept_9B577F7CD24240E2925D439CC1E2F313__li_6EE7CDE942A94065862D4A53F6F02DEA"><!-- --></a>Documentation teams are free to define UA help contexts, modify help context
+                    IDs, and control the mapping from abstract help contexts to concrete help
+                    context IDs, without necessitating any change in the UI code.</li>
+
+                <li id="concept_9B577F7CD24240E2925D439CC1E2F313__li_26AB981095A643A9A1061E85A07E89FC"><a name="concept_9B577F7CD24240E2925D439CC1E2F313__li_26AB981095A643A9A1061E85A07E89FC"><!-- --></a>Documentation teams are free to define and modify context-specific help search
+                    expressions, and the mapping from abstract help contexts to help search
+                    expressions, without necessitating any change in the UI code.</li>
+
+            </ul>
+
+        </div>
+
+
+        <div class="tip"><span class="tiptitle">Tip:</span> Help search expressions include human-readable text, so they must be
+           externalized for localization.
+        </div>
+
+        <p>This separation of responsibilities enables the project team to provide higher
+           quality, and more precisely targeted, dynamic context-sensitive help.
+        </p>
+
+        <p>Together, the DTP help-helper and a context-sensitive help UA plug-in provide an
+           abstraction layer, which enables dynamic context-sensitive help, with a
+           practical and easily maintained implementation in the UI code.
+        </p>
+
+        <br/><a name="concept_9B577F7CD24240E2925D439CC1E2F313__image_C9359815603B4120B909F47EC022EC44"><!-- --></a><div class="imagecenter"><img id="concept_9B577F7CD24240E2925D439CC1E2F313__image_C9359815603B4120B909F47EC022EC44" src="../images/dtp_csh_abstraction_layer.jpg" alt="Image shows abstraction layer between the UI plug-in and the Eclipse Help system."/></div><br/>
+    </div>
+
+<div>
+<div class="familylinks">
+<div class="parentlink"><strong>Parent topic:</strong> <a href="../../../../../projects/dtp/dtp/en/source/c_introduction_to_csh.html" title="Context-sensitive help is focused user assistance content, specific to the current application context (that is, the help context), and presented on demand when a platform-specific trigger is activated (for example, F1 on Windows).">Introduction to Context-Sensitive Help</a></div>
+</div>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_help_context_ids.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_help_context_ids.html
new file mode 100644
index 0000000..9156d85
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_help_context_ids.html
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="Help Context IDs"/>
+<meta name="abstract" content="Because helpKey constants are abstract entities in the Java code, and independent of the actual help context IDs, Documentation teams are responsible for defining the help contexts, which the Eclipse help system uses to locate context-specific help content, and associating each helpKey constant with an actual help context ID."/>
+<meta name="description" content="Because helpKey constants are abstract entities in the Java code, and independent of the actual help context IDs, Documentation teams are responsible for defining the help contexts, which the Eclipse help system uses to locate context-specific help content, and associating each helpKey constant with an actual help context ID."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_documentation_team_workflow.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_852970055E794BE68BB32AE5A9065CCE"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>Help Context IDs</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_852970055E794BE68BB32AE5A9065CCE"><a name="concept_852970055E794BE68BB32AE5A9065CCE"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">Help Context IDs</h1>
+
+    
+    <div><p>Because helpKey constants are abstract entities in the Java code, and independent
+           of the actual help context IDs, Documentation teams are responsible for defining
+           the help contexts, which the Eclipse help system uses to locate context-specific
+           help content, and associating each helpKey constant with an actual help context
+           ID.
+        </p>
+
+        
+        <div class="p">Additional considerations:
+            <br/><a name="concept_852970055E794BE68BB32AE5A9065CCE__ul_76DE1A03B7BD48ABAE11BAFD3B047761"><!-- --></a><ul id="concept_852970055E794BE68BB32AE5A9065CCE__ul_76DE1A03B7BD48ABAE11BAFD3B047761">
+                <li id="concept_852970055E794BE68BB32AE5A9065CCE__li_911FD703FF19408D8DF5E4138F0BCBE5"><a name="concept_852970055E794BE68BB32AE5A9065CCE__li_911FD703FF19408D8DF5E4138F0BCBE5"><!-- --></a>Each help context ID represents a single help context, but any one help
+                    context could occur more than once in a single UI component (that is, a UI
+                    plug-in). Therefore, any help context ID can be associated with any number of
+                    abstract helpKey constants, but
+                    each helpKey constant must be associated with exactly one help context ID.</li>
+
+                <li id="concept_852970055E794BE68BB32AE5A9065CCE__li_25A756A06A1F472CACF3BBEBA0E51C81"><a name="concept_852970055E794BE68BB32AE5A9065CCE__li_25A756A06A1F472CACF3BBEBA0E51C81"><!-- --></a>Each help context within a UI component should be associated with a unique
+                    help context ID; however, help context IDs need not be unique across all plug-ins. For example, a
+                            particular help context could be declared by more than one UI plug-in, if the
+                            Documentation team determines that the actual help context is the same for
+                            multiple UI plug-ins.</li>
+
+            </ul>
+
+        </div>
+
+    </div>
+
+<div>
+<div class="familylinks">
+<div class="parentlink"><strong>Parent topic:</strong> <a href="../../../../../projects/dtp/dtp/en/source/c_documentation_team_workflow.html" title="Documentation teams should refer to the product’s architectural specifications to define an appropriate architecture (that is, granularity, content partitioning, plug-in naming, and so on) for online documentation plug-ins. With that information, Documentation teams can begin the process to create context-sensitive help plug-ins.">Documentation Team Workflow</a></div>
+</div>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_help_keys.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_help_keys.html
new file mode 100644
index 0000000..2960514
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_help_keys.html
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="Help Keys"/>
+<meta name="abstract" content="Rather than declaring help context IDs directly, UI controls use help keys (that is, helpKey constants). Though meaningless to the Eclipse help system, helpKey constants provide an abstraction in the Java code from the actual help context IDs and help search expressions."/>
+<meta name="description" content="Rather than declaring help context IDs directly, UI controls use help keys (that is, helpKey constants). Though meaningless to the Eclipse help system, helpKey constants provide an abstraction in the Java code from the actual help context IDs and help search expressions."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_dtp_help_helper.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_BA505FE560B547D7A26FB13209A499D9"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>Help Keys</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_BA505FE560B547D7A26FB13209A499D9"><a name="concept_BA505FE560B547D7A26FB13209A499D9"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">Help Keys</h1>
+
+    
+    <div><p>Rather than declaring help context IDs directly, UI controls use help keys
+           (that is, helpKey constants). Though meaningless to the Eclipse help system,
+           helpKey constants provide an abstraction in the Java code from the actual help
+           context IDs and help search expressions.
+        </p>
+
+        
+        <p>Each helpKey constant is used to reference an actual help context ID string and
+           a corresponding help search expression, which are defined in properties files
+           (one each for help context IDs and help search expressions).
+        </p>
+
+
+        <p>Any plug-in can contribute the helpKey properties files for a UI component
+           by declaring an extension to org.eclipse.datatools.help.helpKeyProperties in its
+           plugin.xml file. For example, a dedicated context-sensitive help plug-in could
+           contribute both the helpKey properties files and the Eclipse context XML files,
+           independent of the UI plug-in and the UA content contributor (online
+           documentation) plug-in.
+        </p>
+
+        <p>Similar to externalized messages, helpKey constants are declared as public
+           static final String in an interface class.
+        </p>
+
+        <p>UI components must implement a helpKey constants interface class to reference
+           the externalized help context IDs in a ResourceBundle properties file. 
+
+        </p>
+
+    </div>
+
+<div>
+<div class="familylinks">
+<div class="parentlink"><strong>Parent topic:</strong> <a href="../../../../../projects/dtp/dtp/en/source/c_dtp_help_helper.html" title="The DTP help-helper plug-in (org.eclipse.datatools.help) provides a “help key” extension point (org.eclipse.datatools.help.helpKeyProperties), and supplies a context provider delegate implementation (org.eclipse.datatools.help.ContextProviderDelegate).">DTP Help-Helper</a></div>
+</div>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_help_search_expressions.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_help_search_expressions.html
new file mode 100644
index 0000000..e5dc9bf
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_help_search_expressions.html
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="Help Search Expressions"/>
+<meta name="abstract" content="Each help context should be associated with a context-specific help search expression, which the Eclipse help system will use to provide Dynamic Help search results in the Help view."/>
+<meta name="description" content="Each help context should be associated with a context-specific help search expression, which the Eclipse help system will use to provide Dynamic Help search results in the Help view."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_documentation_team_workflow.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_B3C38B3C7AA14BB68FD301C5A8AA3CC8"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>Help Search Expressions</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_B3C38B3C7AA14BB68FD301C5A8AA3CC8"><a name="concept_B3C38B3C7AA14BB68FD301C5A8AA3CC8"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">Help Search Expressions</h1>
+
+    
+    <div><p>Each help context should be associated with a context-specific help search
+           expression, which the Eclipse help system will use to provide Dynamic Help
+           search results in the Help view.
+        </p>
+
+        
+        <p>Documentation teams are responsible for defining the context-specific help
+           search expressions for each help context.
+        </p>
+
+        <div class="p">Additional considerations:
+            <br/><a name="concept_B3C38B3C7AA14BB68FD301C5A8AA3CC8__ul_3B7BE7BE77E24C458C2FEE727150D6AE"><!-- --></a><ul id="concept_B3C38B3C7AA14BB68FD301C5A8AA3CC8__ul_3B7BE7BE77E24C458C2FEE727150D6AE">
+                <li id="concept_B3C38B3C7AA14BB68FD301C5A8AA3CC8__li_DDEECC7821A14B6BAE0749783B846D9E"><a name="concept_B3C38B3C7AA14BB68FD301C5A8AA3CC8__li_DDEECC7821A14B6BAE0749783B846D9E"><!-- --></a>Each help search expression can be associated with multiple help context IDs,
+                    but
+                    <br/><a name="concept_B3C38B3C7AA14BB68FD301C5A8AA3CC8__ul_76D792A15ED8400CAD54F896B3EDA0D9"><!-- --></a><ul id="concept_B3C38B3C7AA14BB68FD301C5A8AA3CC8__ul_76D792A15ED8400CAD54F896B3EDA0D9">
+                        <li id="concept_B3C38B3C7AA14BB68FD301C5A8AA3CC8__li_2FAF1158AA4A4EBE87C0BBB7627B2CBC"><a name="concept_B3C38B3C7AA14BB68FD301C5A8AA3CC8__li_2FAF1158AA4A4EBE87C0BBB7627B2CBC"><!-- --></a>Each helpKey constant must be associated with exactly one help search
+                            expression.</li>
+
+                    </ul>
+</li>
+
+                <li id="concept_B3C38B3C7AA14BB68FD301C5A8AA3CC8__li_97E3A6D1C277410AA07DE0388214386F"><a name="concept_B3C38B3C7AA14BB68FD301C5A8AA3CC8__li_97E3A6D1C277410AA07DE0388214386F"><!-- --></a>Each help context within a UI component (for example, a UI plug-in) can be associated
+                    with a unique help search expression, however
+                    <br/><a name="concept_B3C38B3C7AA14BB68FD301C5A8AA3CC8__ul_32DD265178BD41DDA452E75B39340992"><!-- --></a><ul id="concept_B3C38B3C7AA14BB68FD301C5A8AA3CC8__ul_32DD265178BD41DDA452E75B39340992">
+                        <li id="concept_B3C38B3C7AA14BB68FD301C5A8AA3CC8__li_E9C2E0DDEEB5441696329C0EF4A3D6F7"><a name="concept_B3C38B3C7AA14BB68FD301C5A8AA3CC8__li_E9C2E0DDEEB5441696329C0EF4A3D6F7"><!-- --></a>It may be more practical to define a “generic” help search expression for each
+                            UI component, which would limit search results to product-specific content,
+                            rather than including all of the help content contributed by any doc plug-in.</li>
+
+                    </ul>
+</li>
+
+            </ul>
+
+        </div>
+
+
+        <p>For each helpKey constant, the help context should be 
+           defined before the
+           help search expression is defined. If the Documentation team chooses to combine
+           multiple helpKey constants in a single help context, all of the helpKey
+           constants associated with that help context should be associated with the same
+           search expression.
+        </p>
+
+    </div>
+
+<div>
+<div class="familylinks">
+<div class="parentlink"><strong>Parent topic:</strong> <a href="../../../../../projects/dtp/dtp/en/source/c_documentation_team_workflow.html" title="Documentation teams should refer to the product’s architectural specifications to define an appropriate architecture (that is, granularity, content partitioning, plug-in naming, and so on) for online documentation plug-ins. With that information, Documentation teams can begin the process to create context-sensitive help plug-ins.">Documentation Team Workflow</a></div>
+</div>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_helpkey_constants_interface_class.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_helpkey_constants_interface_class.html
new file mode 100644
index 0000000..e8b15ce
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_helpkey_constants_interface_class.html
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="helpKey Constants Interface Class"/>
+<meta name="abstract" content="To reference the externalized help context IDs, which are defined in a ResourceBundle properties file, UI components must implement an interface class to declare the abstract helpKey constants."/>
+<meta name="description" content="To reference the externalized help context IDs, which are defined in a ResourceBundle properties file, UI components must implement an interface class to declare the abstract helpKey constants."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_csh_ui_implementation.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_EA01CE3135D245F7BB30A94E130A08C7"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>helpKey Constants Interface Class</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_EA01CE3135D245F7BB30A94E130A08C7"><a name="concept_EA01CE3135D245F7BB30A94E130A08C7"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">helpKey Constants Interface Class</h1>
+
+    
+    <div><p>To reference the externalized help context IDs, which are defined in a
+           ResourceBundle properties file, UI components must implement an interface class
+           to declare the abstract helpKey constants.
+        </p>
+
+        
+        <p>The following example is from the org.eclipse.datatools.connectivity.ui 
+           source code.
+        </p>
+
+        <pre class="codeblock">
+    package org.eclipse.datatools.connectivity.internal.ui;
+
+    /**
+      * helpKey_constants_for_plug-in: org.eclipse.datatools.connectivity.ui
+      */
+
+    public interface IHelpConstants {
+
+        /*
+         * CONTEXT_ID_CP_PROPERTY_PAGE =
+         * Basic profile name/description/auto-connect property page
+         */
+        public static final String CONTEXT_ID_CP_PROPERTY_PAGE =
+            "CONTEXT_ID_CP_PROPERTY_PAGE"; //$NON-NLS-1$
+    
+        /*
+         * CONTEXT_ID_CP_WIZARD_PAGE =
+         * wizard selection page in New Connection Profile wizard
+         */
+        public static final String CONTEXT_ID_CP_WIZARD_PAGE =
+            "CONTEXT_ID_CP_WIZARD_PAGE"; //$NON-NLS-1$
+    
+        /*
+         * CONTEXT_ID_INTRO_WIZARD_PAGE =
+         * Basic intro page for new connection profile wizard
+         */
+        public static final String CONTEXT_ID_INTRO_WIZARD_PAGE =
+            "CONTEXT_ID_INTRO_WIZARD_PAGE"; //$NON-NLS-1$
+
+    ...
+    }
+</pre>
+
+        <div class="p">Notice the following features of the helpKey constants interface class:
+            <br/><a name="concept_EA01CE3135D245F7BB30A94E130A08C7__ul_4480078CAC86431AA55EEBF7FBED5262"><!-- --></a><ul id="concept_EA01CE3135D245F7BB30A94E130A08C7__ul_4480078CAC86431AA55EEBF7FBED5262">
+                <li id="concept_EA01CE3135D245F7BB30A94E130A08C7__li_0D0D7394CD174C5A9324EEA4FAF0F158"><a name="concept_EA01CE3135D245F7BB30A94E130A08C7__li_0D0D7394CD174C5A9324EEA4FAF0F158"><!-- --></a>A Javadoc comment block appears between the package and class declarations.
+                    The comment identifies every UI plug-in that will use this class to pass an
+                    abstract helpKey constant to the ContextProviderDelegate.</li>
+
+                <li id="concept_EA01CE3135D245F7BB30A94E130A08C7__li_AABDA2686CB5490797AF580BE4D46795"><a name="concept_EA01CE3135D245F7BB30A94E130A08C7__li_AABDA2686CB5490797AF580BE4D46795"><!-- --></a>The class declares only helpKey constants; no other constants are declared in
+                    this class.</li>
+
+                <li id="concept_EA01CE3135D245F7BB30A94E130A08C7__li_584E2E0307674FE8A9543844B2389923"><a name="concept_EA01CE3135D245F7BB30A94E130A08C7__li_584E2E0307674FE8A9543844B2389923"><!-- --></a>The class declares all of the helpKey constants for at least one UI plug-in.
+
+                <div class="note"><span class="notetitle">Note:</span> The class can declare helpKey constants for more than one 
+                   UI plug-in, but
+                   all of the helpKey constants for any one UI plug-in must be declared in only one
+                   helpKey constants interface class.
+                </div>
+</li>
+
+                <li id="concept_EA01CE3135D245F7BB30A94E130A08C7__li_47160C7E02E0419795BAF17EA45AB057"><a name="concept_EA01CE3135D245F7BB30A94E130A08C7__li_47160C7E02E0419795BAF17EA45AB057"><!-- --></a>Each helpKey constant declaration should be preceded by a comment, which must
+                    provide sufficient information for the Documentation team to determine the
+                    location and purpose of the associated UI control.</li>
+
+                <li id="concept_EA01CE3135D245F7BB30A94E130A08C7__li_EDF5980A1F9048409BC48F3787CEAEF3"><a name="concept_EA01CE3135D245F7BB30A94E130A08C7__li_EDF5980A1F9048409BC48F3787CEAEF3"><!-- --></a>Each helpKey constant is declared as public static final String, in the form:
+                    <pre class="codeblock">
+    public static final String MY_HELP_KEY = "MY_HELP_KEY";
+</pre>
+
+                    where <span class="cmdname">MY_HELP_KEY</span> is the literal character string used as the helpKey constant
+                    in a UI control.
+
+                    <div class="note"><span class="notetitle">Note:</span> The helpKey constants should be declared as literal 
+                       string values only.
+                       Indirect declarations (such as 
+                       <samp class="codeph">HELP_KEY = PREFIX + "HELP_KEY_STRING"</samp> ) 
+                       should be avoided.
+                    </div>
+</li>
+
+                <li id="concept_EA01CE3135D245F7BB30A94E130A08C7__li_E38BA334BD054F33A29E6F7A1C408E9D"><a name="concept_EA01CE3135D245F7BB30A94E130A08C7__li_E38BA334BD054F33A29E6F7A1C408E9D"><!-- --></a>The only characters allowed in a helpKey constant string are: upper case and
+                    lower case letters (a-z, A-Z), numbers (0-9), and the underscore (_).
+
+                    <div class="note"><span class="notetitle">Note:</span> A helpKey constant string must not appear in the format of a
+                       fully-qualified help context ID. Any period (.) or blank space character will
+                       cause problems, if the helpKey constant is mapped to itself (as an unqualified
+                       help context ID) in the helpKey properties file.
+                    </div>
+</li>
+
+            </ul>
+
+        </div>
+
+    </div>
+
+<div>
+<div class="familylinks">
+<div class="parentlink"><strong>Parent topic:</strong> <a href="../../../../../projects/dtp/dtp/en/source/c_csh_ui_implementation.html" title="Java code examples of dynamic help context implementation in a view and a dialog, with context abstraction, are from the Eclipse Data Tools Platform (DTP) 1.6 source code.">Context-Sensitive Help UI Implementation</a></div>
+</div>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_helpkey_properties_file_names.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_helpkey_properties_file_names.html
new file mode 100644
index 0000000..8cfb896
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_helpkey_properties_file_names.html
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="helpKey Properties File Names"/>
+<meta name="abstract" content="Names of helpKey properties files are arbitrary (as long as they end with .properties). However, a context-sensitive help plug-in could contribute pairs of helpKey properties files for several UI plug-ins, and the files would need to have unique names, if they were located in the same directory."/>
+<meta name="description" content="Names of helpKey properties files are arbitrary (as long as they end with .properties). However, a context-sensitive help plug-in could contribute pairs of helpKey properties files for several UI plug-ins, and the files would need to have unique names, if they were located in the same directory."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_helpkey_properties_files.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_A4299568D6904478B1A1853173097B75"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>helpKey Properties File Names</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_A4299568D6904478B1A1853173097B75"><a name="concept_A4299568D6904478B1A1853173097B75"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">helpKey Properties File Names</h1>
+
+    
+    <div><p>Names of helpKey properties files are arbitrary (as long as they end with
+           .properties). However, a context-sensitive help plug-in could contribute pairs
+           of helpKey properties files for several UI plug-ins, and the files would need to
+           have unique names, if they were located in the same directory.
+        </p>
+
+        
+        <div class="p">As a convention, helpKey properties file names should correspond with the UI
+           plug-in that they serve. For example:
+            <br/><a name="concept_A4299568D6904478B1A1853173097B75__ul_2F353D8DCC7D4289B67306A55342BABA"><!-- --></a><ul id="concept_A4299568D6904478B1A1853173097B75__ul_2F353D8DCC7D4289B67306A55342BABA">
+                <li id="concept_A4299568D6904478B1A1853173097B75__li_BFD679F518D7470E87730FABD98ED4E2"><a name="concept_A4299568D6904478B1A1853173097B75__li_BFD679F518D7470E87730FABD98ED4E2"><!-- --></a>org.eclipse.datatools.connectivity.ui.contextIds.properties</li>
+
+                <li id="concept_A4299568D6904478B1A1853173097B75__li_3D87AE642D8D41FCBC2DCFA718D1A55A"><a name="concept_A4299568D6904478B1A1853173097B75__li_3D87AE642D8D41FCBC2DCFA718D1A55A"><!-- --></a>org.eclipse.datatools.connectivity.ui.searchExpressions.properties</li>
+
+            </ul>
+
+        </div>
+
+        <p>To allow arbitrary names for helpKey properties files, and to abstract the names
+           of helpKey properties files from UI components, the DTP help-helper provides an
+           extension point (org.eclipse.datatools.help.helpKeyProperties). That extension
+           point allows any plug-in to declare helpKey properties file contributions for a
+           UI plug-in.
+        </p>
+
+
+    </div>
+
+<div>
+<div class="familylinks">
+<div class="parentlink"><strong>Parent topic:</strong> <a href="../../../../../projects/dtp/dtp/en/source/c_helpkey_properties_files.html" title="A helpKey properties file defines the mapping of helpKey constants (property keys), either to actual help context IDs, or to context-specific help search expressions.">helpKey Properties Files</a></div>
+</div>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_helpkey_properties_files.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_helpkey_properties_files.html
new file mode 100644
index 0000000..8bddc2a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_helpkey_properties_files.html
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="helpKey Properties Files"/>
+<meta name="abstract" content="A helpKey properties file defines the mapping of helpKey constants (property keys), either to actual help context IDs, or to context-specific help search expressions."/>
+<meta name="description" content="A helpKey properties file defines the mapping of helpKey constants (property keys), either to actual help context IDs, or to context-specific help search expressions."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_helpkey_properties_file_names.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_D622F5DE619B4EF2A5148E21E39698DE"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>helpKey Properties Files</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_D622F5DE619B4EF2A5148E21E39698DE"><a name="concept_D622F5DE619B4EF2A5148E21E39698DE"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">helpKey Properties Files</h1>
+
+    
+    <div><p>A helpKey properties file defines the mapping of helpKey constants (property
+           keys), either to actual help context IDs, or to context-specific help search
+           expressions. </p>
+
+        <p>helpKey properties files are usually contributed in pairs, one for
+           context IDs and one for search expressions.</p>
+
+
+        <p>The help context ID strings defined in a helpKey properties file cannot be
+           fully-qualified context IDs. They must not include any blank space or period (.)
+           characters. The DTP help-helper handles unqualified help context IDs defined in
+           properties files to fully-qualify them, before it returns them to the UI control
+           through the ContextProviderDelegate.
+        </p>
+
+        <p>The following excerpt is from a helpKey properties file, which is contributed by
+           the org.eclipse.datatools.doc.user.contexts plug-in to define concrete help
+           context ID strings.
+        </p>
+
+        <pre class="codeblock">
+    ...
+    #	CONTEXT_ID_CP_PROPERTY_PAGE =
+    #	Basic profile name/description/auto-connect property page
+    CONTEXT_ID_CP_PROPERTY_PAGE = CONNECTION_PROFILE_COMMON_PROPERTY_PAGE
+    
+    #	CONTEXT_ID_CP_WIZARD_PAGE =
+    #	wizard selection page in New Connection Profile wizard
+    CONTEXT_ID_CP_WIZARD_PAGE = NEW_CONNECTION_PROFILE_WIZARD
+    
+    #	CONTEXT_ID_INTRO_WIZARD_PAGE =
+    #	Basic intro page for new connection profile wizard
+    CONTEXT_ID_INTRO_WIZARD_PAGE = NEW_CONNECTION_PROFILE_WIZARD
+    ...
+</pre>
+
+        <p>Notice that two abstract help contexts (represented by the helpKey constants
+           <samp class="codeph">CONTEXT_ID_CP_WIZARD_PAGE</samp> and 
+           <samp class="codeph">CONTEXT_ID_INTRO_WIZARD_PAGE</samp>) are mapped to one
+           concrete help context ID (<samp class="codeph">NEW_CONNECTION_PROFILE_WIZARD</samp>). 
+           This is an example of
+           the flexibility afforded by abstract help contexts, allowing the UA component to
+           combine multiple abstract help contexts in a single, concrete help context ID,
+           which is independent of the help context implementation in the UI component.
+        </p>
+
+        <p>The following example shows the mapping of a helpKey constant to a
+           context-specific help search expression in a helpKey properties file.
+        </p>
+
+        <pre class="codeblock">
+    ...
+    #	 * CONTEXT_ID_CP_PROPERTY_PAGE =
+    #	 * Basic profile name/description/auto-connect property page
+    CONTEXT_ID_CP_PROPERTY_PAGE = "connection profile" AND "properties"
+    ...
+</pre>
+
+        <p>Search expression strings must conform to the rules for Apache Lucene query
+           parser syntax: 
+            <a href="http://lucene.apache.org/java/docs/queryparsersyntax.html" target="_blank">http://lucene.apache.org/java/docs/queryparsersyntax.html</a>
+        </p>
+
+
+        <div class="note"><span class="notetitle">Note:</span> The terms (keywords) in a search expression are not case sensitive, but
+           the Boolean operators (for example, AND, NOT, OR) must be all upper case.
+        </div>
+
+    </div>
+
+<div>
+<ul class="ullinks">
+<li class="ulchildlink"><strong><a href="../../../../../projects/dtp/dtp/en/source/c_helpkey_properties_file_names.html">helpKey Properties File Names</a></strong><br/>
+Names of helpKey properties files are arbitrary (as long as they end with .properties). However, a context-sensitive help plug-in could contribute pairs of helpKey properties files for several UI plug-ins, and the files would need to have unique names, if they were located in the same directory.</li>
+</ul>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_helpkey_properties_files_extension.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_helpkey_properties_files_extension.html
new file mode 100644
index 0000000..c76a14a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_helpkey_properties_files_extension.html
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="helpKey Properties Files Extension"/>
+<meta name="abstract" content="Each plug-in that contributes helpKey properties files must declare an extension to org.eclipse.datatools.help.helpKeyProperties in its plug-in manifest (plugin.xml file)."/>
+<meta name="description" content="Each plug-in that contributes helpKey properties files must declare an extension to org.eclipse.datatools.help.helpKeyProperties in its plug-in manifest (plugin.xml file)."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_csh_ua_plugins.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_C426F6313F5D4449A7D9D7F211F33DEC"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>helpKey Properties Files Extension</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_C426F6313F5D4449A7D9D7F211F33DEC"><a name="concept_C426F6313F5D4449A7D9D7F211F33DEC"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">helpKey Properties Files Extension</h1>
+
+    
+    <div><p>Each plug-in that contributes helpKey properties files must declare an extension
+           to org.eclipse.datatools.help.helpKeyProperties in its plug-in manifest
+           (plugin.xml file).</p>
+
+        <div class="p"> For example:
+            <pre class="codeblock">
+    &lt;extension point="org.eclipse.datatools.help.helpKeyProperties"&gt;
+        &lt;contextIds plugin="org.eclipse.datatools.connectivity.ui"
+            file="org.eclipse.datatools.connectivity.ui.contextIds.properties"/&gt;
+        &lt;searchExpressions plugin="org.eclipse.datatools.connectivity.ui"
+            file="org.eclipse.datatools.connectivity.ui.searchExpressions.properties"/&gt;
+    &lt;/extension&gt;
+</pre>
+
+        </div>
+
+        <p>The <samp class="codeph">&lt;contextIds&gt;</samp> element identifies a helpKey properties 
+           file that defines help context IDs, and the UI plug-in for which it is provided.
+        </p>
+
+        <p>The <samp class="codeph">&lt;searchExpressions&gt;</samp> element identifies a helpKey properties file that
+           defines context-specific help search expressions, and the UI plug-in for which
+           it is provided.
+        </p>
+
+        <p>To accommodate context-sensitive help plug-ins that serve more than one UI
+           plug-in, the <samp class="codeph">&lt;extension&gt;</samp> element can contain any 
+           number of <samp class="codeph">&lt;contextIds&gt;</samp> and 
+           <samp class="codeph">&lt;searchExpressions&gt;</samp> elements.
+        </p>
+
+    </div>
+
+<div>
+<div class="familylinks">
+<div class="parentlink"><strong>Parent topic:</strong> <a href="../../../../../projects/dtp/dtp/en/source/c_csh_ua_plugins.html" title="Context-sensitive help UA plug-ins handle the mapping of help contexts to context-specific help content and related online documentation topics.">Context-Sensitive Help UA Plug-ins</a></div>
+</div>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_introduction_to_csh.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_introduction_to_csh.html
new file mode 100644
index 0000000..aec914a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_introduction_to_csh.html
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="Introduction to Context-Sensitive Help"/>
+<meta name="abstract" content="Context-sensitive help is focused user assistance content, specific to the current application context (that is, the help context), and presented on demand when a platform-specific trigger is activated (for example, F1 on Windows)."/>
+<meta name="description" content="Context-sensitive help is focused user assistance content, specific to the current application context (that is, the help context), and presented on demand when a platform-specific trigger is activated (for example, F1 on Windows)."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_static_vs_dynamic_help_contexts.html"/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_dynamic_csh.html"/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_help_context_abstraction.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_1F9797C4F7B148098584BD3E4D27335E"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>Introduction to Context-Sensitive Help</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_1F9797C4F7B148098584BD3E4D27335E"><a name="concept_1F9797C4F7B148098584BD3E4D27335E"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">Introduction to Context-Sensitive Help</h1>
+
+    
+    <div><p>Context-sensitive help is focused user assistance content, specific to the
+           current application context (that is, the help context), and presented on demand 
+           when a platform-specific trigger is activated (for example, F1 on Windows).
+        </p>
+
+        
+        <p>Context-sensitive help requires interactions between user interface (UI)
+           components, user assistance (UA) components, and the Eclipse platform help
+           system.
+        </p>
+
+        <div class="p">UI components:
+            <br/><a name="concept_1F9797C4F7B148098584BD3E4D27335E__ul_FBD3A9D82FE94D57AAA9FCCE504E0847"><!-- --></a><ul id="concept_1F9797C4F7B148098584BD3E4D27335E__ul_FBD3A9D82FE94D57AAA9FCCE504E0847">
+                <li id="concept_1F9797C4F7B148098584BD3E4D27335E__li_C8A7F74E362E45CAB0298B18EA1EA7F9"><a name="concept_1F9797C4F7B148098584BD3E4D27335E__li_C8A7F74E362E45CAB0298B18EA1EA7F9"><!-- --></a>Contribute UI controls</li>
+
+                <li id="concept_1F9797C4F7B148098584BD3E4D27335E__li_E01E6C825BE947B88E5F44D163E3B8A5"><a name="concept_1F9797C4F7B148098584BD3E4D27335E__li_E01E6C825BE947B88E5F44D163E3B8A5"><!-- --></a>Define the association of help contexts with UI controls</li>
+
+            </ul>
+
+        </div>
+
+        <div class="p">UA components:
+            <br/><a name="concept_1F9797C4F7B148098584BD3E4D27335E__ul_E5B36E4FA82D4AAABA94D8991A3B69AF"><!-- --></a><ul id="concept_1F9797C4F7B148098584BD3E4D27335E__ul_E5B36E4FA82D4AAABA94D8991A3B69AF">
+                <li id="concept_1F9797C4F7B148098584BD3E4D27335E__li_D5B08C3C033243D9A280275208398F9E"><a name="concept_1F9797C4F7B148098584BD3E4D27335E__li_D5B08C3C033243D9A280275208398F9E"><!-- --></a>Contribute context-specific help content and online documentation content</li>
+
+                <li id="concept_1F9797C4F7B148098584BD3E4D27335E__li_86D015E4CF604FD2ADE99638D9BCC03F"><a name="concept_1F9797C4F7B148098584BD3E4D27335E__li_86D015E4CF604FD2ADE99638D9BCC03F"><!-- --></a>Define the association of help contexts with context-specific help content and
+                related online documentation topics</li>
+
+            </ul>
+
+        </div>
+
+        <div class="p">Eclipse help system:
+            <br/><a name="concept_1F9797C4F7B148098584BD3E4D27335E__ul_91F3FD3421DD490ABAC859E50A8ECF15"><!-- --></a><ul id="concept_1F9797C4F7B148098584BD3E4D27335E__ul_91F3FD3421DD490ABAC859E50A8ECF15">
+                <li id="concept_1F9797C4F7B148098584BD3E4D27335E__li_15523C390F2D4DEF8AE5776397242066"><a name="concept_1F9797C4F7B148098584BD3E4D27335E__li_15523C390F2D4DEF8AE5776397242066"><!-- --></a>Resolves help context references to matching context-specific help
+                    contributions</li>
+
+                <li id="concept_1F9797C4F7B148098584BD3E4D27335E__li_4E5B7391376542D090EA3555D1D1DEEB"><a name="concept_1F9797C4F7B148098584BD3E4D27335E__li_4E5B7391376542D090EA3555D1D1DEEB"><!-- --></a>Contributes the help presentation mechanisms (for example, the Help view)</li>
+
+                <li id="concept_1F9797C4F7B148098584BD3E4D27335E__li_82435F15523C4F538138EC5594B2E649"><a name="concept_1F9797C4F7B148098584BD3E4D27335E__li_82435F15523C4F538138EC5594B2E649"><!-- --></a>Provides API to enable context-sensitive help interactions for UI and UA
+                    components</li>
+
+            </ul>
+
+        </div>
+
+    </div>
+
+<div>
+<ul class="ullinks">
+<li class="ulchildlink"><strong><a href="../../../../../projects/dtp/dtp/en/source/c_static_vs_dynamic_help_contexts.html">Static vs. Dynamic Help Contexts</a></strong><br/>
+UI components can define the associations between UI controls and help contexts, either statically or dynamically.</li>
+<li class="ulchildlink"><strong><a href="../../../../../projects/dtp/dtp/en/source/c_dynamic_csh.html">Dynamic Context-Sensitive Help</a></strong><br/>
+Since 3.1, Eclipse supports dynamic context-sensitive help.</li>
+<li class="ulchildlink"><strong><a href="../../../../../projects/dtp/dtp/en/source/c_help_context_abstraction.html">Help Context Abstraction</a></strong><br/>
+Help context abstraction is a technique to simplify the handling of help context IDs and help search expressions in the UI code, by abstracting them to “help keys.”</li>
+</ul>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_overview_of_dtp_help_helper_plugin.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_overview_of_dtp_help_helper_plugin.html
new file mode 100644
index 0000000..28521ff
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_overview_of_dtp_help_helper_plugin.html
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="Overview of DTP Help-Helper Plug-in"/>
+<meta name="abstract" content="The Data Tools Platform (DTP) help-helper plug-in is provided in the Eclipse DTP project, since version 1.5 (released June 29, 2007)."/>
+<meta name="description" content="The Data Tools Platform (DTP) help-helper plug-in is provided in the Eclipse DTP project, since version 1.5 (released June 29, 2007)."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_introduction_to_csh.html"/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_dtp_help_helper.html"/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_csh_ui_implementation.html"/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_helpkey_properties_files.html"/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_csh_ua_plugins.html"/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_team_responsibilities_and_collaboration.html"/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_documentation_team_workflow.html"/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_test_dynamic_context-sensitive_help.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_5DC5CB74635F4CE2B48E456CBBCC5D3C"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>Overview of DTP Help-Helper Plug-in</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_5DC5CB74635F4CE2B48E456CBBCC5D3C"><a name="concept_5DC5CB74635F4CE2B48E456CBBCC5D3C"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">Overview of DTP Help-Helper Plug-in</h1>
+
+    
+    <div><p>The Data Tools Platform (DTP) help-helper plug-in is provided in the Eclipse DTP project, since version 1.5 
+           (released June 29, 2007).</p>
+
+        
+        <div class="p">The DTP help-helper plug-in (org.eclipse.datatools.help) contributes two key
+           enablers for dynamic context-sensitive help:
+            <br/><a name="concept_5DC5CB74635F4CE2B48E456CBBCC5D3C__ul_4B05AE04E5A4412082CB287A3700E49D"><!-- --></a><ul id="concept_5DC5CB74635F4CE2B48E456CBBCC5D3C__ul_4B05AE04E5A4412082CB287A3700E49D">
+                <li id="concept_5DC5CB74635F4CE2B48E456CBBCC5D3C__li_2D72D902D2714A97924ABC945B116697"><a name="concept_5DC5CB74635F4CE2B48E456CBBCC5D3C__li_2D72D902D2714A97924ABC945B116697"><!-- --></a>A ContextProviderDelegate implementation, whose methods allow the abstraction
+                    of help context IDs and context-specific help search expressions from the user
+                    interface (UI) code</li>
+
+                <li id="concept_5DC5CB74635F4CE2B48E456CBBCC5D3C__li_A3109F571A6C41C59D8D0FE5983B9C5E"><a name="concept_5DC5CB74635F4CE2B48E456CBBCC5D3C__li_A3109F571A6C41C59D8D0FE5983B9C5E"><!-- --></a>An extension point (org.eclipse.datatools.help.helpKeyProperties), which
+                    allows other plug-ins to contribute ResourceBundle properties files that define
+                    the mapping of abstract helpKey constants (used in the UI code) to externalized
+                    help context ID strings and context-specific help search expressions</li>
+
+            </ul>
+
+        </div>
+
+    </div>
+
+<div><div class="relconcepts"><strong>Related concepts</strong><br/>
+<div><a href="../../../../../projects/dtp/dtp/en/source/c_introduction_to_csh.html" title="Context-sensitive help is focused user assistance content, specific to the current application context (that is, the help context), and presented on demand when a platform-specific trigger is activated (for example, F1 on Windows).">Introduction to Context-Sensitive Help</a></div>
+<div><a href="../../../../../projects/dtp/dtp/en/source/c_dtp_help_helper.html" title="The DTP help-helper plug-in (org.eclipse.datatools.help) provides a “help key” extension point (org.eclipse.datatools.help.helpKeyProperties), and supplies a context provider delegate implementation (org.eclipse.datatools.help.ContextProviderDelegate).">DTP Help-Helper</a></div>
+<div><a href="../../../../../projects/dtp/dtp/en/source/c_csh_ui_implementation.html" title="Java code examples of dynamic help context implementation in a view and a dialog, with context abstraction, are from the Eclipse Data Tools Platform (DTP) 1.6 source code.">Context-Sensitive Help UI Implementation</a></div>
+<div><a href="../../../../../projects/dtp/dtp/en/source/c_helpkey_properties_files.html" title="A helpKey properties file defines the mapping of helpKey constants (property keys), either to actual help context IDs, or to context-specific help search expressions.">helpKey Properties Files</a></div>
+<div><a href="../../../../../projects/dtp/dtp/en/source/c_csh_ua_plugins.html" title="Context-sensitive help UA plug-ins handle the mapping of help contexts to context-specific help content and related online documentation topics.">Context-Sensitive Help UA Plug-ins</a></div>
+<div><a href="../../../../../projects/dtp/dtp/en/source/c_team_responsibilities_and_collaboration.html" title="Successful delivery of dynamic context-sensitive help requires a close coordination of UI components and UA components. It imposes responsibilities on both Development teams and Documentation teams, and it requires ongoing collaboration among those teams.">Team Responsibilities and Collaboration</a></div>
+<div><a href="../../../../../projects/dtp/dtp/en/source/c_documentation_team_workflow.html" title="Documentation teams should refer to the product’s architectural specifications to define an appropriate architecture (that is, granularity, content partitioning, plug-in naming, and so on) for online documentation plug-ins. With that information, Documentation teams can begin the process to create context-sensitive help plug-ins.">Documentation Team Workflow</a></div>
+<div><a href="../../../../../projects/dtp/dtp/en/source/c_test_dynamic_context-sensitive_help.html" title="Dynamic context-sensitive help in Eclipse involves complex interactions between several components, so testing it requires a properly configured runtime platform, with both user interface (UI) components and user assistance (UA) components installed.">Test Dynamic Context-Sensitive Help</a></div>
+</div>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_plugin_spy.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_plugin_spy.html
new file mode 100644
index 0000000..e35a587
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_plugin_spy.html
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="Plug-in Spy"/>
+<meta name="abstract" content="The Plug-in Spy tool (provided in org.eclipse.pde.runtime, since Eclipse 3.4) shows various information about the workbench, including help context IDs associated with the current (in focus) UI control."/>
+<meta name="description" content="The Plug-in Spy tool (provided in org.eclipse.pde.runtime, since Eclipse 3.4) shows various information about the workbench, including help context IDs associated with the current (in focus) UI control."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_test_dynamic_context-sensitive_help.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_6B818C546E1B4EA39993278E70A93A76"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>Plug-in Spy</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_6B818C546E1B4EA39993278E70A93A76"><a name="concept_6B818C546E1B4EA39993278E70A93A76"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">Plug-in Spy</h1>
+
+    
+    
+    <div><p>The Plug-in Spy tool (provided in org.eclipse.pde.runtime,
+        since Eclipse 3.4) shows various information about the workbench,
+        including help context IDs associated with the current (in focus)
+        UI control.
+    </p>
+
+        <p>Plug-in Spy is particularly useful for testing and troubleshooting
+            context-sensitive help.
+        </p>
+
+    </div>
+
+<div>
+<div class="familylinks">
+<div class="parentlink"><strong>Parent topic:</strong> <a href="../../../../../projects/dtp/dtp/en/source/c_test_dynamic_context-sensitive_help.html" title="Dynamic context-sensitive help in Eclipse involves complex interactions between several components, so testing it requires a properly configured runtime platform, with both user interface (UI) components and user assistance (UA) components installed.">Test Dynamic Context-Sensitive Help</a></div>
+</div>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_related_topics_associated_with_help_contexts.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_related_topics_associated_with_help_contexts.html
new file mode 100644
index 0000000..3c388be
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_related_topics_associated_with_help_contexts.html
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="Related Topics Associated with Help Contexts"/>
+<meta name="abstract" content="DITA maps for context-sensitive help plug-ins contain &lt;resourceid&gt; elements, each of which identifies a concrete help context ID associated with a DITA topic."/>
+<meta name="description" content="DITA maps for context-sensitive help plug-ins contain &lt;resourceid&gt; elements, each of which identifies a concrete help context ID associated with a DITA topic."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_csh_plugins_with_dita.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_40EFB517689D4F1E8A95C4B69C633A2B"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>Related Topics Associated with Help Contexts</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_40EFB517689D4F1E8A95C4B69C633A2B"><a name="concept_40EFB517689D4F1E8A95C4B69C633A2B"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">Related Topics Associated with Help Contexts</h1>
+
+    
+    <div><p>DITA maps for context-sensitive help plug-ins contain 
+           <samp class="codeph">&lt;resourceid&gt;</samp> elements,
+           each of which identifies a concrete help context ID associated with a DITA
+           topic.</p>
+
+        
+        <div class="p">The <samp class="codeph">&lt;resourceid&gt;</samp> element is a child of a 
+           <samp class="codeph">&lt;topicmeta&gt;</samp> element. For example:
+            <pre class="codeblock">
+    &lt;topicmeta&gt;
+        &lt;resourceid id="help_context_ID_string"/&gt;
+    &lt;/topicmeta&gt;
+</pre>
+
+        </div>
+
+        <div class="p">For each DITA topic associated with a help context ID, the 
+           <samp class="codeph">&lt;topicref&gt;</samp> element
+           that points to that topic contains a 
+           <samp class="codeph">&lt;topicmeta&gt;</samp> element (with a 
+           <samp class="codeph">&lt;resourceid&gt;</samp> child element). 
+           This defines the association of a help context ID with that
+           topic. For example:
+            <pre class="codeblock">
+    &lt;topicref navtitle="label attribute in contexts.xml topic element"
+        href="path/to/topic.xml"&gt;
+        &lt;topicmeta&gt;
+            &lt;resourceid id="help_context_ID_string"/&gt;
+        &lt;/topicmeta&gt;
+    &lt;/topicref&gt;
+</pre>
+
+        </div>
+
+        <div class="p">Any DITA topic can be mapped to multiple help context IDs by inserting as many
+           <samp class="codeph">&lt;resourceid&gt;</samp> child elements as necessary in the 
+           <samp class="codeph">&lt;topicmeta&gt;</samp> element. For example:
+            <pre class="codeblock">
+    &lt;topicref navtitle="label attribute in contexts.xml topic element"
+        href="path/to/topic.xml"&gt;
+        &lt;topicmeta&gt;
+            &lt;resourceid id="help_context_ID_1"/&gt;
+            &lt;resourceid id="help_context_ID_2"/&gt;
+            &lt;resourceid id="help_context_ID_3"/&gt;
+        &lt;/topicmeta&gt;
+    &lt;/topicref&gt;
+</pre>
+
+        </div>
+
+
+        <p>It may be preferable to combine help contexts in the helpKey properties
+           file, instead of defining mapping for multiple help contexts to a single topic
+           in the DITA map. This is a judgment call for the Documentation team responsible
+           for maintaining the DITA map. For more information, see Defining Help Context
+           IDs.
+        </p>
+
+        <div class="p">Other considerations for DITA maps that define context-sensitive help plug-ins:
+            <br/><a name="concept_40EFB517689D4F1E8A95C4B69C633A2B__ul_848CD11CE75B458B92C454E3A16493E5"><!-- --></a><ul id="concept_40EFB517689D4F1E8A95C4B69C633A2B__ul_848CD11CE75B458B92C454E3A16493E5">
+                <li id="concept_40EFB517689D4F1E8A95C4B69C633A2B__li_16ABFAF429864AB3814617F8583EBD93"><a name="concept_40EFB517689D4F1E8A95C4B69C633A2B__li_16ABFAF429864AB3814617F8583EBD93"><!-- --></a>Markup for context-to-topic mapping is needed only for the DITA topics that
+                    will be context-sensitive help targets, that is, Related Topics shown in the Help
+                view.</li>
+
+                <li id="concept_40EFB517689D4F1E8A95C4B69C633A2B__li_6670D36692374A92AE4B908CBA33EBFB"><a name="concept_40EFB517689D4F1E8A95C4B69C633A2B__li_6670D36692374A92AE4B908CBA33EBFB"><!-- --></a>When a single DITA topic appears more than once in a map, only the first
+                    instance of a <samp class="codeph">&lt;topicref&gt;</samp> that points to that topic needs the 
+                    context-sensitive help markup.</li>
+
+                <li id="concept_40EFB517689D4F1E8A95C4B69C633A2B__li_C12742C0413147B6BF84EA290B923253"><a name="concept_40EFB517689D4F1E8A95C4B69C633A2B__li_C12742C0413147B6BF84EA290B923253"><!-- --></a>Nested maps that contribute DITA topics related to help contexts must include
+                    the same context-sensitive help markup.</li>
+
+            </ul>
+
+        </div>
+
+    </div>
+
+<div>
+<div class="familylinks">
+<div class="parentlink"><strong>Parent topic:</strong> <a href="../../../../../projects/dtp/dtp/en/source/c_csh_plugins_with_dita.html" title="Any DITA map document that defines an online documentation (doc) plug-in can be modified to also define a corresponding context-sensitive help plug-in by inserting the appropriate context-related markup.">Context-Sensitive Help Plug-ins with DITA</a></div>
+</div>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_static_vs_dynamic_help_contexts.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_static_vs_dynamic_help_contexts.html
new file mode 100644
index 0000000..c66ec9d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_static_vs_dynamic_help_contexts.html
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="Static vs. Dynamic Help Contexts"/>
+<meta name="abstract" content="UI components can define the associations between UI controls and help contexts, either statically or dynamically."/>
+<meta name="description" content="UI components can define the associations between UI controls and help contexts, either statically or dynamically."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_introduction_to_csh.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_D55B323F193F44B19BAC2A5048871468"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>Static vs. Dynamic Help Contexts</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_D55B323F193F44B19BAC2A5048871468"><a name="concept_D55B323F193F44B19BAC2A5048871468"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">Static vs. Dynamic Help Contexts</h1>
+
+    
+    <div><p>UI components can define the associations between UI controls and help contexts,
+           either statically or dynamically.
+            </p>
+
+        <div class="p"><br/><a name="concept_D55B323F193F44B19BAC2A5048871468__ul_C6BAC7CE78E346249DCBFBB13EF0B831"><!-- --></a><ul id="concept_D55B323F193F44B19BAC2A5048871468__ul_C6BAC7CE78E346249DCBFBB13EF0B831">
+                <li id="concept_D55B323F193F44B19BAC2A5048871468__li_232E17A3083E45ECB65FAF6EEB326C45"><a name="concept_D55B323F193F44B19BAC2A5048871468__li_232E17A3083E45ECB65FAF6EEB326C45"><!-- --></a>When defined statically, the effective help context changes only when the user
+                    explicitly requests context-sensitive help, that is, when the context-sensitive
+                    help trigger is activated.</li>
+
+                <li id="concept_D55B323F193F44B19BAC2A5048871468__li_2CBCD85735BC4F6981A1C305B5539708"><a name="concept_D55B323F193F44B19BAC2A5048871468__li_2CBCD85735BC4F6981A1C305B5539708"><!-- --></a>When defined dynamically, the effective help context changes whenever the user
+                    activates any UI control with a dynamic context association, for example, selecting a
+                    menu option, moving from one page to another in a dialog, and so on.</li>
+
+            </ul>
+
+        </div>
+
+        <div class="p">That distinction is significant when the Help view is visible.
+            <br/><a name="concept_D55B323F193F44B19BAC2A5048871468__ul_1EEB65AA3E4F47D3AE6F2D243F1C00DC"><!-- --></a><ul id="concept_D55B323F193F44B19BAC2A5048871468__ul_1EEB65AA3E4F47D3AE6F2D243F1C00DC">
+                <li id="concept_D55B323F193F44B19BAC2A5048871468__li_899559FF86174CB5A89559AB8707BC0E"><a name="concept_D55B323F193F44B19BAC2A5048871468__li_899559FF86174CB5A89559AB8707BC0E"><!-- --></a>When the context association is defined statically, context-specific content
+                    shown in the Help view remains unchanged, regardless of the user’s action,
+                    unless the user explicitly requests context-sensitive help, for example, by pressing
+                    F1.</li>
+
+                <li id="concept_D55B323F193F44B19BAC2A5048871468__li_EFDCBE4DBBA2476DB261A770EC5A6CA0"><a name="concept_D55B323F193F44B19BAC2A5048871468__li_EFDCBE4DBBA2476DB261A770EC5A6CA0"><!-- --></a>When the context association is defined dynamically, context-specific content
+                    shown in the Help view is updated automatically, whenever the user activates a
+                    UI control.</li>
+
+            </ul>
+
+        </div>
+
+        <p>All help contexts are defined and subsequently identified by a help context ID.
+           The Eclipse help system uses help context IDs to locate matching
+           org.eclipse.help.IContext objects, which represent the context-specific help
+           content.
+        </p>
+
+    </div>
+
+<div>
+<div class="familylinks">
+<div class="parentlink"><strong>Parent topic:</strong> <a href="../../../../../projects/dtp/dtp/en/source/c_introduction_to_csh.html" title="Context-sensitive help is focused user assistance content, specific to the current application context (that is, the help context), and presented on demand when a platform-specific trigger is activated (for example, F1 on Windows).">Introduction to Context-Sensitive Help</a></div>
+</div>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_team_responsibilities_and_collaboration.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_team_responsibilities_and_collaboration.html
new file mode 100644
index 0000000..5251560
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_team_responsibilities_and_collaboration.html
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="Team Responsibilities and Collaboration"/>
+<meta name="abstract" content="Successful delivery of dynamic context-sensitive help requires a close coordination of UI components and UA components. It imposes responsibilities on both Development teams and Documentation teams, and it requires ongoing collaboration among those teams."/>
+<meta name="description" content="Successful delivery of dynamic context-sensitive help requires a close coordination of UI components and UA components. It imposes responsibilities on both Development teams and Documentation teams, and it requires ongoing collaboration among those teams."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_development_team_responsibilities.html"/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_documentation_team_responsibilities.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_F5F729295B104C0694482F3F730F4C3E"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>Team Responsibilities and Collaboration</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_F5F729295B104C0694482F3F730F4C3E"><a name="concept_F5F729295B104C0694482F3F730F4C3E"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">Team Responsibilities and Collaboration</h1>
+
+    
+    <div><p>Successful delivery of dynamic context-sensitive help requires a close
+           coordination of UI components and UA components. It imposes responsibilities on
+           both Development teams and Documentation teams, and it requires ongoing
+           collaboration among those teams.
+        </p>
+
+        
+        <p>Development teams must provide lists of helpKey constants to Documentation
+           teams, and they must provide information about the UI control associated with
+           each helpKey constant. Development teams must also provide timely updates to
+           Documentation teams when any change occurs in the helpKey constants.
+        </p>
+
+        <p>Documentation teams must rely on the information provided by Development teams
+           to locate the UI controls, analyze the help contexts, and create appropriate UA
+           content in various formats.
+        </p>
+
+        <p>Since a context-sensitive help plug-in can contribute helpKey properties files
+           and context XML files that support several UI plug-ins, Documentation teams must
+           carefully evaluate the “component level” with which online documentation
+           plug-ins and their corresponding context-sensitive help plug-ins are associated.
+        </p>
+
+        <p>Both Development teams and Documentation teams must rely on the project’s
+           architectural specifications to determine the appropriate capabilities and
+           features with which to coordinate UI and UA components.
+        </p>
+
+
+        <p>And finally, both Development teams and Documentation teams must test the 
+            context-sensitive help UI implementation and the context-sensitive help 
+            UA plug-ins.
+        </p>
+
+
+    </div>
+
+<div>
+<ul class="ullinks">
+<li class="ulchildlink"><strong><a href="../../../../../projects/dtp/dtp/en/source/c_development_team_responsibilities.html">Development Team Responsibilities</a></strong><br/>
+Development teams should provide lists of the helpKey constants in the form of Java source files for the helpKey constants interface classes.</li>
+<li class="ulchildlink"><strong><a href="../../../../../projects/dtp/dtp/en/source/c_documentation_team_responsibilities.html">Documentation Team Responsibilities</a></strong><br/>
+A documentation team has several responsibilities when delivering context-sensitive help content.</li>
+</ul>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_test_dynamic_context-sensitive_help.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_test_dynamic_context-sensitive_help.html
new file mode 100644
index 0000000..80ccb14
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_test_dynamic_context-sensitive_help.html
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="Test Dynamic Context-Sensitive Help"/>
+<meta name="abstract" content="Dynamic context-sensitive help in Eclipse involves complex interactions between several components, so testing it requires a properly configured runtime platform, with both user interface (UI) components and user assistance (UA) components installed."/>
+<meta name="description" content="Dynamic context-sensitive help in Eclipse involves complex interactions between several components, so testing it requires a properly configured runtime platform, with both user interface (UI) components and user assistance (UA) components installed."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_test_objectives.html"/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_test_procedures.html"/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_plugin_spy.html"/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_debug_mode.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_6C4F9C48A3604355B05FA9F1AF439C39"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>Test Dynamic Context-Sensitive Help</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_6C4F9C48A3604355B05FA9F1AF439C39"><a name="concept_6C4F9C48A3604355B05FA9F1AF439C39"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">Test Dynamic Context-Sensitive Help</h1>
+
+    
+    
+    <div><p>Dynamic context-sensitive help in Eclipse involves complex
+        interactions between several components, so testing it requires a
+        properly configured runtime platform, with both user interface (UI)
+        components and user assistance (UA) components installed.
+    </p>
+
+        <p>Like any other functionality, dynamic context-sensitive help
+            should be tested to assess its quality.
+        </p>
+
+        <div class="note"><span class="notetitle">Note:</span> This document deals with testing the functionality
+            of dynamic context-sensitive help, not the quality (or usefulness)
+            of the help content.
+        </div>
+
+    </div>
+
+<div>
+<ul class="ullinks">
+<li class="ulchildlink"><strong><a href="../../../../../projects/dtp/dtp/en/source/c_test_objectives.html">Test Objectives</a></strong><br/>
+For projects that use the DTP help-helper, there are two primary objectives in testing dynamic context-sensitive help:</li>
+<li class="ulchildlink"><strong><a href="../../../../../projects/dtp/dtp/en/source/c_test_procedures.html">Test Procedures</a></strong><br/>
+For each UI control associated with a help context, test procedures should verify the following:</li>
+<li class="ulchildlink"><strong><a href="../../../../../projects/dtp/dtp/en/source/c_plugin_spy.html">Plug-in Spy</a></strong><br/>
+The Plug-in Spy tool (provided in org.eclipse.pde.runtime, since Eclipse 3.4) shows various information about the workbench, including help context IDs associated with the current (in focus) UI control.</li>
+<li class="ulchildlink"><strong><a href="../../../../../projects/dtp/dtp/en/source/c_debug_mode.html">Debug Mode</a></strong><br/>
+The Eclipse platform debug mode can be useful for testing and troubleshooting dynamic context-sensitive help.</li>
+</ul>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_test_objectives.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_test_objectives.html
new file mode 100644
index 0000000..5e8ba78
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_test_objectives.html
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="Test Objectives"/>
+<meta name="abstract" content="For projects that use the DTP help-helper, there are two primary objectives in testing dynamic context-sensitive help:"/>
+<meta name="description" content="For projects that use the DTP help-helper, there are two primary objectives in testing dynamic context-sensitive help:"/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_test_dynamic_context-sensitive_help.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_BBA3841E4A484058B51A07A5E331F693"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>Test Objectives</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_BBA3841E4A484058B51A07A5E331F693"><a name="concept_BBA3841E4A484058B51A07A5E331F693"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">Test Objectives</h1>
+
+    
+    
+    <div><p>For projects that use the DTP help-helper, there are two primary
+        objectives in testing dynamic context-sensitive help:
+    </p>
+
+        <div class="p">
+            <br/><a name="concept_BBA3841E4A484058B51A07A5E331F693__ul_BF5784E1B5264ED4B0AC0A2337F77FAB"><!-- --></a><ul id="concept_BBA3841E4A484058B51A07A5E331F693__ul_BF5784E1B5264ED4B0AC0A2337F77FAB">
+                <li id="concept_BBA3841E4A484058B51A07A5E331F693__li_A9EA2B1CE6704BDEAD7C192D94D356A8"><a name="concept_BBA3841E4A484058B51A07A5E331F693__li_A9EA2B1CE6704BDEAD7C192D94D356A8"><!-- --></a>Determine if all abstract helpKey constants are mapped
+                    to concrete help context IDs (e.g., by comparing the
+                    contexts XML file with helpKey properties files)</li>
+
+                <li id="concept_BBA3841E4A484058B51A07A5E331F693__li_0B4A750014494ABABE471659D4DF7EBD"><a name="concept_BBA3841E4A484058B51A07A5E331F693__li_0B4A750014494ABABE471659D4DF7EBD"><!-- --></a>Determine if help context IDs work correctly, providing
+                    the correct context-specific help content in the Help
+                    view or dialog tray</li>
+
+            </ul>
+
+        </div>
+
+    </div>
+
+<div>
+<div class="familylinks">
+<div class="parentlink"><strong>Parent topic:</strong> <a href="../../../../../projects/dtp/dtp/en/source/c_test_dynamic_context-sensitive_help.html" title="Dynamic context-sensitive help in Eclipse involves complex interactions between several components, so testing it requires a properly configured runtime platform, with both user interface (UI) components and user assistance (UA) components installed.">Test Dynamic Context-Sensitive Help</a></div>
+</div>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_test_procedures.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_test_procedures.html
new file mode 100644
index 0000000..651c13a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_test_procedures.html
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="Test Procedures"/>
+<meta name="abstract" content="For each UI control associated with a help context, test procedures should verify the following:"/>
+<meta name="description" content="For each UI control associated with a help context, test procedures should verify the following:"/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_test_dynamic_context-sensitive_help.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_C924B5B06720432C9816EBA6CF3F292F"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>Test Procedures</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_C924B5B06720432C9816EBA6CF3F292F"><a name="concept_C924B5B06720432C9816EBA6CF3F292F"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">Test Procedures</h1>
+
+    
+    
+    <div><p>For each UI control associated with a help context,
+        test procedures should verify the following:
+    </p>
+
+        <div class="p">
+            <br/><a name="concept_C924B5B06720432C9816EBA6CF3F292F__ul_76B2491ACD0B4FA98371A4B74E2B0BC4"><!-- --></a><ul id="concept_C924B5B06720432C9816EBA6CF3F292F__ul_76B2491ACD0B4FA98371A4B74E2B0BC4">
+                <li id="concept_C924B5B06720432C9816EBA6CF3F292F__li_366C4C9204BB4C459ED957FC7A195C41"><a name="concept_C924B5B06720432C9816EBA6CF3F292F__li_366C4C9204BB4C459ED957FC7A195C41"><!-- --></a>Keyboard shortcut (e.g., F1) opens the Help view or
+                    dialog tray, with correct context-specific content</li>
+
+                <li id="concept_C924B5B06720432C9816EBA6CF3F292F__li_844FC5F2327C49A7A7EC07E99F293924"><a name="concept_C924B5B06720432C9816EBA6CF3F292F__li_844FC5F2327C49A7A7EC07E99F293924"><!-- --></a>Help icon (if available) opens the Help view or dialog
+                    tray, with correct context-specific content</li>
+
+                <li id="concept_C924B5B06720432C9816EBA6CF3F292F__li_E726CA81A23541C4A104F895B1DF85B2"><a name="concept_C924B5B06720432C9816EBA6CF3F292F__li_E726CA81A23541C4A104F895B1DF85B2"><!-- --></a>Changing focus on the UI control invokes refresh in the
+                    open Help view or dialog tray (dynamic context-specific
+                    content)</li>
+
+            </ul>
+
+        </div>
+
+    </div>
+
+<div>
+<div class="familylinks">
+<div class="parentlink"><strong>Parent topic:</strong> <a href="../../../../../projects/dtp/dtp/en/source/c_test_dynamic_context-sensitive_help.html" title="Dynamic context-sensitive help in Eclipse involves complex interactions between several components, so testing it requires a properly configured runtime platform, with both user interface (UI) components and user assistance (UA) components installed.">Test Dynamic Context-Sensitive Help</a></div>
+</div>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_ui_plugins_associated_with_help_contexts.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_ui_plugins_associated_with_help_contexts.html
new file mode 100644
index 0000000..e79292a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_ui_plugins_associated_with_help_contexts.html
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="UI Plug-ins Associated with Help Contexts"/>
+<meta name="abstract" content="DITA maps for context-sensitive help plug-ins must contain a &lt;topicmeta&gt; element as the first child of the &lt;map&gt; element, and for each UI plug-in whose help context IDs are identified in the map, that &lt;topicmeta&gt; element must contain one &lt;othermeta&gt; element that identifies the UI plug-in."/>
+<meta name="description" content="DITA maps for context-sensitive help plug-ins must contain a &lt;topicmeta&gt; element as the first child of the &lt;map&gt; element, and for each UI plug-in whose help context IDs are identified in the map, that &lt;topicmeta&gt; element must contain one &lt;othermeta&gt; element that identifies the UI plug-in."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_csh_plugins_with_dita.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_6245D50571D94B8E8D2B63620A5D9043"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>UI Plug-ins Associated with Help Contexts</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_6245D50571D94B8E8D2B63620A5D9043"><a name="concept_6245D50571D94B8E8D2B63620A5D9043"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">UI Plug-ins Associated with Help Contexts</h1>
+
+    
+    <div><p>DITA maps for context-sensitive help plug-ins must contain a 
+           <samp class="codeph">&lt;topicmeta&gt;</samp> element
+           as the first child of the 
+           <samp class="codeph">&lt;map&gt;</samp> element, and for each UI plug-in 
+           whose help context IDs are identified in the map, that 
+           <samp class="codeph">&lt;topicmeta&gt;</samp> element must contain one
+           <samp class="codeph">&lt;othermeta&gt;</samp> element that identifies the 
+           UI plug-in.
+        </p>
+
+        
+
+        <div class="note"><span class="notetitle">Note:</span> The <samp class="codeph">&lt;othermeta&gt;</samp> elements that identify 
+           UI plug-ins should be the last child element in the 
+           <samp class="codeph">&lt;topicmeta&gt;</samp> element. The 
+           <samp class="codeph">&lt;topicmeta&gt;</samp> element may contain any other valid child elements 
+           (preceding the 
+           <samp class="codeph">&lt;othermeta&gt;</samp> elements that identify UI plug-ins).
+        </div>
+
+        <div class="p">The <samp class="codeph">&lt;othermeta&gt;</samp> element’s name 
+           and content attribute values will be used to
+           identify UI plug-ins in the org.eclipse.help.contexts extension, which is
+           declared in the plug-in manifest (plugin.xml file) of the context-sensitive help
+           plug-in. For example:
+           <pre class="codeblock">
+    &lt;map id="org.eclipse.datatools.ui.doc"&gt;
+        &lt;topicmeta&gt;
+            ...
+            &lt;othermeta name="ui-plugin"
+                content="org.eclipse.datatools.connectivity.ui"/&gt;
+            &lt;othermeta name="ui-plugin"
+                content="org.eclipse.datatools.connectivity.ui.dse"/&gt;
+        &lt;/topicmeta&gt;
+        ...
+    &lt;/map&gt;
+</pre>
+
+        </div>
+
+        <p>The name attribute value "ui-plugin" is a fixed, literal string. The content
+           attribute value is the Eclipse plug-in ID of a UI plug-in.
+        </p>
+
+
+        <p>Nested maps that contribute context-related help topics must include the
+           same markup to identify each UI plug-in whose context IDs are identified in that
+           map.
+        </p>
+
+    </div>
+
+<div>
+<div class="familylinks">
+<div class="parentlink"><strong>Parent topic:</strong> <a href="../../../../../projects/dtp/dtp/en/source/c_csh_plugins_with_dita.html" title="Any DITA map document that defines an online documentation (doc) plug-in can be modified to also define a corresponding context-sensitive help plug-in by inserting the appropriate context-related markup.">Context-Sensitive Help Plug-ins with DITA</a></div>
+</div>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_view_implementation_example.html b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_view_implementation_example.html
new file mode 100644
index 0000000..833bb8b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/projects/dtp/dtp/en/source/c_view_implementation_example.html
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta name="copyright" content="(C) Copyright 2005"/>
+<meta name="DC.rights.owner" content="(C) Copyright 2005"/>
+<meta name="DC.Type" content="concept"/>
+<meta name="DC.Title" content="View Implementation Example"/>
+<meta name="abstract" content="The DataSourceExplorerView (in org.eclipse.datatools.connectivity.ui.dse) first implements the org.eclipse.help.IContextProvider interface, and then it creates an instance of the org.eclipse.datatools.help.ContextProviderDelegate."/>
+<meta name="description" content="The DataSourceExplorerView (in org.eclipse.datatools.connectivity.ui.dse) first implements the org.eclipse.help.IContextProvider interface, and then it creates an instance of the org.eclipse.datatools.help.ContextProviderDelegate."/>
+<meta name="DC.Relation" scheme="URI" content="../../../../../projects/dtp/dtp/en/source/c_csh_ui_implementation.html"/>
+<meta name="DC.Creator" content="dresch"/>
+<meta name="DC.Format" content="XHTML"/>
+<meta name="DC.Identifier" content="concept_8CFF272833D84A6BAC9D1D162A9E86E7"/>
+<meta name="DC.Language" content="en"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/commonltr.css"/>
+<link rel="stylesheet" type="text/css" href="../../../../../styles/doc.css"/>
+<title>View Implementation Example</title>
+<meta name="provider" content="Sybase, Inc."/></head>
+<body id="concept_8CFF272833D84A6BAC9D1D162A9E86E7"><a name="concept_8CFF272833D84A6BAC9D1D162A9E86E7"><!-- --></a>
+<br/>
+
+    <h1 class="topictitle1">View Implementation Example</h1>
+
+    
+    <div><p>The DataSourceExplorerView (in org.eclipse.datatools.connectivity.ui.dse) first
+           implements the org.eclipse.help.IContextProvider interface, and then it creates
+           an instance of the org.eclipse.datatools.help.ContextProviderDelegate.</p>
+
+        
+        <pre class="codeblock">
+    private ContextProviderDelegate contextProviderDelegate = new
+        ContextProviderDelegate(DSEPlugin.getDefault().getBundle().getSymbolicName())
+    ;
+</pre>
+
+        <p>The symbolic name is usually the plug-in ID. Providing the symbolic name as
+           shown above will avoid broken code, if the plug-in’s ID changes.
+        </p>
+
+
+        <p>The plug-in ID passed to the ContextProviderDelegate must indicate which
+           plug-in the help context is actually associated with. In the example above, the
+           help context is associated with the DSEPlugin, that is, the plug-in that
+           contributes the DataSourceExplorerView UI component. However, the help context
+           could be associated with a separate plug-in, for example, if the plug-in “owner”
+           of the UI component is not the same as the plug-in that contributes the UI
+           component.
+        </p>
+
+        <p>Implementation of the IContextProvider methods looks like this:
+        </p>
+
+        <pre class="codeblock">
+    public IContext getContext(Object target) {
+        return contextProviderDelegate.getContext(target);
+    }
+
+    public int getContextChangeMask() {
+        return contextProviderDelegate.getContextChangeMask();
+    }
+
+    public String getSearchExpression(Object target) {
+        return contextProviderDelegate.getSearchExpression(target);
+    }
+</pre>
+
+        <p>After implementing the IContextProvider methods, the view must set the help
+           context for the control in the createPartControl method:
+        </p>
+
+        <pre class="codeblock">
+    public void createPartControl(Composite parent) {
+        super.createPartControl(parent);
+        PlatformUI.getWorkbench().getHelpSystem()
+            .setHelp(getCommonViewer().getTree(),
+                IHelpContextsConnectivityUIDSE.CONTEXT_ID_CONNECTIVITY_DSE_VIEW);
+    }
+</pre>
+
+
+        <p>The string passed to the setHelp method is actually an abstract helpKey
+           constant, whose property key is mapped to a concrete help context ID string by
+           the ContextProviderDelegate.
+        </p>
+
+        <p>All helpKey constant strings must be declared in an interface class. 
+
+        </p>
+
+    </div>
+
+<div>
+<div class="familylinks">
+<div class="parentlink"><strong>Parent topic:</strong> <a href="../../../../../projects/dtp/dtp/en/source/c_csh_ui_implementation.html" title="Java code examples of dynamic help context implementation in a view and a dialog, with context abstraction, are from the Eclipse Data Tools Platform (DTP) 1.6 source code.">Context-Sensitive Help UI Implementation</a></div>
+</div>
+</div>
+<div/>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/sqltools.package.properties b/plugins/org.eclipse.datatools.doc.isv/sqltools.package.properties
new file mode 100644
index 0000000..fe19d90
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/sqltools.package.properties
@@ -0,0 +1,47 @@
+sqltools.include.package.names = org.eclipse.datatools.sqltools.data.*,\
+                        org.eclipse.datatools.sqltools.db.*,\
+                        org.eclipse.datatools.sqltools.debugger.*,\
+                        org.eclipse.datatools.sqltools.editor.*,\
+                        org.eclipse.datatools.sqltools.result.*,\
+                        org.eclipse.datatools.sqltools.routineeditor.*,\
+                        org.eclipse.datatools.sqltools.schemaobjecteditor.ui.internal.ui,\
+                        org.eclipse.datatools.sqltools.schemaobjecteditor.*,\
+                        org.eclipse.datatools.sqltools.sqleditor.*,\
+                        org.eclipse.datatools.sqltools.tabledataeditor.*,\
+	     				org.eclipse.datatools.sqltools.parsers.*,\
+                        org.eclipse.datatools.sqltools.sqlbuilder.*,\
+                        org.eclipse.datatools.sqltools.sqlscrapbook.*,\
+                        org.eclipse.datatools.sqltools.sql.*,\
+                        org.eclipse.datatools.sqltools.plan.*,\
+                        org.eclipse.datatools.sqltools.common.ui.*,\
+                        org.eclipse.datatools.sqltools.ddlgen.ui.*
+
+sqltools.exclude.package.names = org.eclipse.datatools.sqltools.db.generic*, \
+                        org.eclipse.datatools.sqltools.db.**.internal.*, \
+                        org.eclipse.datatools.sqltools.debugger.ui.**.internal*,\
+                        org.eclipse.datatools.sqltools.editor.core.ui.**.internal.*,\
+                        org.eclipse.datatools.sqltools.result.ui.**.internal.*,\
+                        org.eclipse.datatools.sqltools.routineeditor.**.internal.*,\
+                        org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.**.internal*,\
+                        org.eclipse.datatools.sqltools.schemaobjecteditor.ui.internal.core,\
+                        org.eclipse.datatools.sqltools.schemaobjecteditor.ui.internal,\
+                        org.eclipse.datatools.sqltools.schemaobjecteditor.ui.internal.preference,\
+                        org.eclipse.datatools.sqltools.parsers.**.internal*,\
+                        org.eclipse.datatools.sqltools.sqlbuilder.**.internal*,\
+                        org.eclipse.datatools.sqltools.sqlscrapbook.**.internal*,\
+                        org.eclipse.datatools.sqltools.sql.**.internal*,\
+                        org.eclipse.datatools.sqltools.plan.**.internal*,\
+                        org.eclipse.datatools.sqltools.common.ui.**.internal*,\
+                        org.eclipse.datatools.sqltools.ddlgen.ui.**.internal*
+                        
+
+                        
+                        
+
+                        
+                        
+                        
+                        
+                        
+                        
+                    
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.doc.isv/toc.xml b/plugins/org.eclipse.datatools.doc.isv/toc.xml
new file mode 100644
index 0000000..107bc9a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/toc.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?NLS TYPE="org.eclipse.help.toc"?>
+<toc label="Data Tools Platform Plug-in Developer Guide">
+   <topic label="Data Tools Platform Help-Helper Documentation">
+	<link toc="dtp_help_helper_doc.xml"/>
+   </topic>
+   <topic label="Reference">
+      <anchor id="reference"/>
+   </topic>
+</toc>
diff --git a/plugins/org.eclipse.datatools.doc.isv/tocreference.xml b/plugins/org.eclipse.datatools.doc.isv/tocreference.xml
new file mode 100644
index 0000000..22dc195
--- /dev/null
+++ b/plugins/org.eclipse.datatools.doc.isv/tocreference.xml
@@ -0,0 +1,505 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?NLS TYPE="org.eclipse.help.toc"?>
+<toc label="Reference" link_to="toc.xml#reference">
+	<topic label="API Reference">
+		<topic label="org.eclipse.datatools" href="html/reference/api/org/eclipse/datatools/"/>
+		
+		<topic label="org.eclipse.datatools.connectivity" href="html/reference/api/org/eclipse/datatools/connectivity/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.apache.derby.ui.explorer.providers.virtual" href="html/reference/api/org/eclipse/datatools/connectivity/apache/derby/ui/explorer/providers/virtual/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.console.profile.nls" href="html/reference/api/org/eclipse/datatools/connectivity/console/profile/nls/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.db.generic" href="html/reference/api/org/eclipse/datatools/connectivity/db/generic/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.db.generic.ui" href="html/reference/api/org/eclipse/datatools/connectivity/db/generic/ui/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.db.generic.ui.wizard" href="html/reference/api/org/eclipse/datatools/connectivity/db/generic/ui/wizard/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.drivers" href="html/reference/api/org/eclipse/datatools/connectivity/drivers/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.drivers.jdbc" href="html/reference/api/org/eclipse/datatools/connectivity/drivers/jdbc/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.drivers.models" href="html/reference/api/org/eclipse/datatools/connectivity/drivers/models/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.exceptions" href="html/reference/api/org/eclipse/datatools/connectivity/exceptions/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.oda" href="html/reference/api/org/eclipse/datatools/connectivity/oda/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.oda.consumer.services" href="html/reference/api/org/eclipse/datatools/connectivity/oda/consumer/services/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.oda.consumer.util.manifest" href="html/reference/api/org/eclipse/datatools/connectivity/oda/consumer/util/manifest/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.oda.design" href="html/reference/api/org/eclipse/datatools/connectivity/oda/design/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.oda.design.ui.designsession" href="html/reference/api/org/eclipse/datatools/connectivity/oda/design/ui/designsession/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.oda.design.ui.manifest" href="html/reference/api/org/eclipse/datatools/connectivity/oda/design/ui/manifest/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.oda.design.ui.wizards" href="html/reference/api/org/eclipse/datatools/connectivity/oda/design/ui/wizards/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.oda.design.util" href="html/reference/api/org/eclipse/datatools/connectivity/oda/design/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.oda.spec" href="html/reference/api/org/eclipse/datatools/connectivity/oda/spec/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.oda.spec.manifest" href="html/reference/api/org/eclipse/datatools/connectivity/oda/spec/manifest/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.oda.spec.result" href="html/reference/api/org/eclipse/datatools/connectivity/oda/spec/result/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.oda.spec.result.filter" href="html/reference/api/org/eclipse/datatools/connectivity/oda/spec/result/filter/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.oda.spec.util" href="html/reference/api/org/eclipse/datatools/connectivity/oda/spec/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.oda.spec.valueexpr" href="html/reference/api/org/eclipse/datatools/connectivity/oda/spec/valueexpr/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.oda.util" href="html/reference/api/org/eclipse/datatools/connectivity/oda/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.oda.util.logging" href="html/reference/api/org/eclipse/datatools/connectivity/oda/util/logging/package-summary.html"/>	
+		<topic label="org.eclipse.datatools.connectivity.oda.util.manifest" href="html/reference/api/org/eclipse/datatools/connectivity/oda/util/manifest/package-summary.html"/>
+		
+		<topic label="org.eclipse.datatools.connectivity.sqm.core" href="html/reference/api/org/eclipse/datatools/connectivity/sqm/core/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.sqm.core.connection" href="html/reference/api/org/eclipse/datatools/connectivity/sqm/core/connection/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.sqm.core.containment" href="html/reference/api/org/eclipse/datatools/connectivity/sqm/core/containment/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.sqm.core.definition" href="html/reference/api/org/eclipse/datatools/connectivity/sqm/core/definition/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.sqm.core.mappings" href="html/reference/api/org/eclipse/datatools/connectivity/sqm/core/mappings/package-summary.html"/>
+		
+		<topic label="org.eclipse.datatools.connectivity.sqm.core.rte" href="html/reference/api/org/eclipse/datatools/connectivity/sqm/core/rte/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.sqm.core.rte.fe" href="html/reference/api/org/eclipse/datatools/connectivity/sqm/core/rte/fe/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.sqm.core.rte.jdbc" href="html/reference/api/org/eclipse/datatools/connectivity/sqm/core/rte/jdbc/package-summary.html"/>
+		
+		<topic label="org.eclipse.datatools.connectivity.sqm.core.ui.explorer.filter" href="html/reference/api/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/filter/package-summary.html"/>	
+		<topic label="org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual" href="html/reference/api/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/providers/content/virtual/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual" href="html/reference/api/org/eclipse/datatools/connectivity/sqm/core/ui/explorer/virtual/package-summary.html"/>
+		
+		<topic label="org.eclipse.datatools.connectivity.sqm.core.ui.services" href="html/reference/api/org/eclipse/datatools/connectivity/sqm/core/ui/services/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.sqm.core.util" href="html/reference/api/org/eclipse/datatools/connectivity/sqm/core/util/package-summary.html"/>
+
+		<topic label="org.eclipse.datatools.connectivity.sqm.loader" href="html/reference/api/org/eclipse/datatools/connectivity/sqm/loader/package-summary.html"/>
+
+
+		<topic label="org.eclipse.datatools.connectivity.ui" href="html/reference/api/org/eclipse/datatools/connectivity/ui/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.ui.actions" href="html/reference/api/org/eclipse/datatools/connectivity/ui/actions/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.ui.dse" href="html/reference/api/org/eclipse/datatools/connectivity/ui/dse/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.ui.dse.actions" href="html/reference/api/org/eclipse/datatools/connectivity/ui/dse/actions/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.ui.dse.dialogs" href="html/reference/api/org/eclipse/datatools/connectivity/ui/dse/dialogs/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.ui.dse.dialogs.filters" href="html/reference/api/org/eclipse/datatools/connectivity/ui/dse/dialogs/filters/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.ui.dse.dnd" href="html/reference/api/org/eclipse/datatools/connectivity/ui/dse/dnd/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.ui.dse.views" href="html/reference/api/org/eclipse/datatools/connectivity/ui/dse/views/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.ui.navigator" href="html/reference/api/org/eclipse/datatools/connectivity/ui/navigator/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.ui.navigator.actions" href="html/reference/api/org/eclipse/datatools/connectivity/ui/navigator/actions/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.ui.templates" href="html/reference/api/org/eclipse/datatools/connectivity/ui/templates/package-summary.html"/>
+		<topic label="org.eclipse.datatools.connectivity.ui.wizards" href="html/reference/api/org/eclipse/datatools/connectivity/ui/wizards/package-summary.html"/>
+	
+	
+		<topic label="org.eclipse.datatools.enablement.ase" href="html/reference/api/org/eclipse/datatools/enablement/ase/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.ase.catalog" href="html/reference/api/org/eclipse/datatools/enablement/ase/catalog/package-summary.html"/>
+	
+		<topic label="org.eclipse.datatools.enablement.ase.containment" href="html/reference/api/org/eclipse/datatools/enablement/ase/containment/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.ase.ddl" href="html/reference/api/org/eclipse/datatools/enablement/ase/ddl/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.ase.deltaddl" href="html/reference/api/org/eclipse/datatools/enablement/ase/deltaddl/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.ase.util" href="html/reference/api/org/eclipse/datatools/enablement/ase/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.hsqldb.catalog" href="html/reference/api/org/eclipse/datatools/enablement/hsqldb/catalog/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.hsqldb.connection" href="html/reference/api/org/eclipse/datatools/enablement/hsqldb/connection/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.hsqldb.ui" href="html/reference/api/org/eclipse/datatools/enablement/hsqldb/ui/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.hsqldb.ui.catalog" href="html/reference/api/org/eclipse/datatools/enablement/hsqldb/ui/catalog/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.hsqldb.ui.connection" href="html/reference/api/org/eclipse/datatools/enablement/hsqldb/ui/connection/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.hsqldb.ui.connection.drivers" href="html/reference/api/org/eclipse/datatools/enablement/hsqldb/ui/connection/drivers/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.ibm.db2.luw.ui.drivers" href="html/reference/api/org/eclipse/datatools/enablement/ibm/db2/luw/ui/drivers/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.ibm.informix.ui.drivers" href="html/reference/api/org/eclipse/datatools/enablement/ibm/informix/ui/drivers/package-summary.html"/>
+
+		<topic label="org.eclipse.datatools.enablement.ingres.containment" href="html/reference/api/org/eclipse/datatools/enablement/ingres/containment/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.ingres.models.ingressqlmodel" href="html/reference/api/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl" href="html/reference/api/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/impl/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.util" href="html/reference/api/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.jdt.classpath" href="html/reference/api/org/eclipse/datatools/enablement/jdt/classpath/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.msft.sqlserver.ui.drivers" href="html/reference/api/org/eclipse/datatools/enablement/msft/sqlserver/ui/drivers/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.mysql" href="html/reference/api/org/eclipse/datatools/enablement/mysql/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.mysql.catalog" href="html/reference/api/org/eclipse/datatools/enablement/mysql/catalog/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.mysql.catalog.loaders" href="html/reference/api/org/eclipse/datatools/enablement/mysql/catalog/loaders/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.mysql.ddl" href="html/reference/api/org/eclipse/datatools/enablement/mysql/ddl/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.mysql.ddl.shared" href="html/reference/api/org/eclipse/datatools/enablement/mysql/ddl/shared/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.mysql.ui" href="html/reference/api/org/eclipse/datatools/enablement/mysql/ui/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.oracle.ui.drivers" href="html/reference/api/org/eclipse/datatools/enablement/oracle/ui/drivers/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sap.maxdb" href="html/reference/api/org/eclipse/datatools/enablement/sap/maxdb/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sap.maxdb.ui" href="html/reference/api/org/eclipse/datatools/enablement/sap/maxdb/ui/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sqlite" href="html/reference/api/org/eclipse/datatools/enablement/sqlite/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sqlite.connection" href="html/reference/api/org/eclipse/datatools/enablement/sqlite/connection/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sqlite.dbdefcreation" href="html/reference/api/org/eclipse/datatools/enablement/sqlite/dbdefcreation/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sqlite.driver" href="html/reference/api/org/eclipse/datatools/enablement/sqlite/driver/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sqlite.loader" href="html/reference/api/org/eclipse/datatools/enablement/sqlite/loader/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sqlite.ui" href="html/reference/api/org/eclipse/datatools/enablement/sqlite/ui/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sqlite.ui.connection" href="html/reference/api/org/eclipse/datatools/enablement/sqlite/ui/connection/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sqlite.ui.connection.drivers" href="html/reference/api/org/eclipse/datatools/enablement/sqlite/ui/connection/drivers/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase" href="html/reference/api/org/eclipse/datatools/enablement/sybase/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.actions" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/actions/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.base.catalog" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/base/catalog/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.baseloaders" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/baseloaders/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.catalog" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/catalog/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.containment" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/containment/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.ddl" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/ddl/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.deltaddl" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/deltaddl/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.loaders" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/loaders/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.models.sybaseasabasesqlmodel" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/models/sybaseasabasesqlmodel/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.models.sybaseasabasesqlmodel.impl" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/models/sybaseasabasesqlmodel/impl/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.models.sybaseasabasesqlmodel.util" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/models/sybaseasabasesqlmodel/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.models.sybaseasasqlmodel" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/models/sybaseasasqlmodel/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.models.sybaseasasqlmodel.impl" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/models/sybaseasasqlmodel/impl/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.models.sybaseasasqlmodel.util" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/models/sybaseasasqlmodel/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.providers" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/providers/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/schemaobjecteditor/examples/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples.commonui" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/schemaobjecteditor/examples/commonui/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples.commonui.privilege" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/schemaobjecteditor/examples/commonui/privilege/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples.model.validation" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/schemaobjecteditor/examples/model/validation/package-summary.html"/>
+			<topic label="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples.routineeditor" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/schemaobjecteditor/examples/routineeditor/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples.routineeditor.action" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/schemaobjecteditor/examples/routineeditor/action/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples.routineeditor.commonui" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/schemaobjecteditor/examples/routineeditor/commonui/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples.routineeditor.model" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/schemaobjecteditor/examples/routineeditor/model/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples.routineeditor.pages.general" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/schemaobjecteditor/examples/routineeditor/pages/general/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples.routineeditor.pages.privilege" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/schemaobjecteditor/examples/routineeditor/pages/privilege/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples.routineeditor.pages.source" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/schemaobjecteditor/examples/routineeditor/pages/source/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples.routineeditor.utils" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/schemaobjecteditor/examples/routineeditor/utils/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples.services" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/schemaobjecteditor/examples/services/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples.tableeditor" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/schemaobjecteditor/examples/tableeditor/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples.tableeditor.action" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/schemaobjecteditor/examples/tableeditor/action/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples.tableeditor.commonui" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/schemaobjecteditor/examples/tableeditor/commonui/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples.tableeditor.model" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/schemaobjecteditor/examples/tableeditor/model/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples.tableeditor.pages.columns" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/schemaobjecteditor/examples/tableeditor/pages/columns/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples.tableeditor.pages.constraints" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/schemaobjecteditor/examples/tableeditor/pages/constraints/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples.tableeditor.pages.indexes" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/schemaobjecteditor/examples/tableeditor/pages/indexes/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples.tableeditor.pages.privileges" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/schemaobjecteditor/examples/tableeditor/pages/privileges/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples.tableeditor.pages.storage" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/schemaobjecteditor/examples/tableeditor/pages/storage/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples.tableeditor.pages.triggers" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/schemaobjecteditor/examples/tableeditor/pages/triggers/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples.tableeditor.utils" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/schemaobjecteditor/examples/tableeditor/utils/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples.udteditor.action" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/schemaobjecteditor/examples/udteditor/action/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples.udteditor.model" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/schemaobjecteditor/examples/udteditor/model/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples.udteditor.pages.general" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/schemaobjecteditor/examples/udteditor/pages/general/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.schemaobjecteditor.examples.utils" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/schemaobjecteditor/examples/utils/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.ui" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/ui/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.asa.virtual" href="html/reference/api/org/eclipse/datatools/enablement/sybase/asa/virtual/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.ase.models.sybaseasesqlmodel" href="html/reference/api/org/eclipse/datatools/enablement/sybase/ase/models/sybaseasesqlmodel/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.ase.models.sybaseasesqlmodel.impl" href="html/reference/api/org/eclipse/datatools/enablement/sybase/ase/models/sybaseasesqlmodel/impl/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.ase.models.sybaseasesqlmodel.partition" href="html/reference/api/org/eclipse/datatools/enablement/sybase/ase/models/sybaseasesqlmodel/partition/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.ase.models.sybaseasesqlmodel.partition.impl" href="html/reference/api/org/eclipse/datatools/enablement/sybase/ase/models/sybaseasesqlmodel/partition/impl/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.ase.models.sybaseasesqlmodel.partition.util" href="html/reference/api/org/eclipse/datatools/enablement/sybase/ase/models/sybaseasesqlmodel/partition/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.ase.models.sybaseasesqlmodel.util" href="html/reference/api/org/eclipse/datatools/enablement/sybase/ase/models/sybaseasesqlmodel/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.ase.providers" href="html/reference/api/org/eclipse/datatools/enablement/sybase/ase/providers/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.ase.ui" href="html/reference/api/org/eclipse/datatools/enablement/sybase/ase/ui/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.ase.ui.drivers" href="html/reference/api/org/eclipse/datatools/enablement/sybase/ase/ui/drivers/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.ase.virtual" href="html/reference/api/org/eclipse/datatools/enablement/sybase/ase/virtual/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.containment" href="html/reference/api/org/eclipse/datatools/enablement/sybase/containment/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.ddl" href="html/reference/api/org/eclipse/datatools/enablement/sybase/ddl/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.deltaddl" href="html/reference/api/org/eclipse/datatools/enablement/sybase/deltaddl/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.models.sybasesqlmodel" href="html/reference/api/org/eclipse/datatools/enablement/sybase/models/sybasesqlmodel/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.models.sybasesqlmodel.impl" href="html/reference/api/org/eclipse/datatools/enablement/sybase/models/sybasesqlmodel/impl/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.models.sybasesqlmodel.util" href="html/reference/api/org/eclipse/datatools/enablement/sybase/models/sybasesqlmodel/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.parser" href="html/reference/api/org/eclipse/datatools/enablement/sybase/parser/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.ui" href="html/reference/api/org/eclipse/datatools/enablement/sybase/ui/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.ui.filter" href="html/reference/api/org/eclipse/datatools/enablement/sybase/ui/filter/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.ui.util" href="html/reference/api/org/eclipse/datatools/enablement/sybase/ui/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.util" href="html/reference/api/org/eclipse/datatools/enablement/sybase/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.enablement.sybase.virtual" href="html/reference/api/org/eclipse/datatools/enablement/sybase/virtual/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.derby" href="html/reference/api/org/eclipse/datatools/modelbase/derby/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.derby.util" href="html/reference/api/org/eclipse/datatools/modelbase/derby/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.accesscontrol" href="html/reference/api/org/eclipse/datatools/modelbase/sql/accesscontrol/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.accesscontrol.provider" href="html/reference/api/org/eclipse/datatools/modelbase/sql/accesscontrol/provider/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.accesscontrol.util" href="html/reference/api/org/eclipse/datatools/modelbase/sql/accesscontrol/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.constraints" href="html/reference/api/org/eclipse/datatools/modelbase/sql/constraints/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.constraints.provider" href="html/reference/api/org/eclipse/datatools/modelbase/sql/constraints/provider/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.constraints.util" href="html/reference/api/org/eclipse/datatools/modelbase/sql/constraints/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.datatypes" href="html/reference/api/org/eclipse/datatools/modelbase/sql/datatypes/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.datatypes.provider" href="html/reference/api/org/eclipse/datatools/modelbase/sql/datatypes/provider/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.datatypes.util" href="html/reference/api/org/eclipse/datatools/modelbase/sql/datatypes/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.expressions" href="html/reference/api/org/eclipse/datatools/modelbase/sql/expressions/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.expressions.provider" href="html/reference/api/org/eclipse/datatools/modelbase/sql/expressions/provider/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.expressions.util" href="html/reference/api/org/eclipse/datatools/modelbase/sql/expressions/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.query" href="html/reference/api/org/eclipse/datatools/modelbase/sql/query/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.query.helper" href="html/reference/api/org/eclipse/datatools/modelbase/sql/query/helper/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.query.provider" href="html/reference/api/org/eclipse/datatools/modelbase/sql/query/provider/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.query.util" href="html/reference/api/org/eclipse/datatools/modelbase/sql/query/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.routines" href="html/reference/api/org/eclipse/datatools/modelbase/sql/routines/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.routines.provider" href="html/reference/api/org/eclipse/datatools/modelbase/sql/routines/provider/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.routines.util" href="html/reference/api/org/eclipse/datatools/modelbase/sql/routines/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.schema" href="html/reference/api/org/eclipse/datatools/modelbase/sql/schema/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.schema.helper" href="html/reference/api/org/eclipse/datatools/modelbase/sql/schema/helper/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.schema.provider" href="html/reference/api/org/eclipse/datatools/modelbase/sql/schema/provider/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.schema.util" href="html/reference/api/org/eclipse/datatools/modelbase/sql/schema/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.statements" href="html/reference/api/org/eclipse/datatools/modelbase/sql/statements/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.statements.provider" href="html/reference/api/org/eclipse/datatools/modelbase/sql/statements/provider/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.statements.util" href="html/reference/api/org/eclipse/datatools/modelbase/sql/statements/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.tables" href="html/reference/api/org/eclipse/datatools/modelbase/sql/tables/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.tables.helper" href="html/reference/api/org/eclipse/datatools/modelbase/sql/tables/helper/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.tables.provider" href="html/reference/api/org/eclipse/datatools/modelbase/sql/tables/provider/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.tables.util" href="html/reference/api/org/eclipse/datatools/modelbase/sql/tables/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.xml.query" href="html/reference/api/org/eclipse/datatools/modelbase/sql/xml/query/package-summary.html"/>
+		<topic label="org.eclipse.datatools.modelbase.sql.xml.query/util" href="html/reference/api/org/eclipse/datatools/modelbase/sql/xml/query/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.common.ui.actions" href="html/reference/api/org/eclipse/datatools/sqltools/common/ui/actions/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.common.ui.dialog" href="html/reference/api/org/eclipse/datatools/sqltools/common/ui/dialog/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.common.ui.helpsystem" href="html/reference/api/org/eclipse/datatools/sqltools/common/ui/helpsystem/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.common.ui.preferences" href="html/reference/api/org/eclipse/datatools/sqltools/common/ui/preferences/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.common.ui.resource" href="html/reference/api/org/eclipse/datatools/sqltools/common/ui/resource/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.common.ui.sqlstatementarea" href="html/reference/api/org/eclipse/datatools/sqltools/common/ui/sqlstatementarea/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.common.ui.tableviewer" href="html/reference/api/org/eclipse/datatools/sqltools/common/ui/tableviewer/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.common.ui.util" href="html/reference/api/org/eclipse/datatools/sqltools/common/ui/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.data.internal.core" href="html/reference/api/org/eclipse/datatools/sqltools/data/internal/core/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.data.internal.core.common" href="html/reference/api/org/eclipse/datatools/sqltools/data/internal/core/common/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.data.internal.core.common/data" href="html/reference/api/org/eclipse/datatools/sqltools/data/internal/core/common/data/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.data.internal.core.editor" href="html/reference/api/org/eclipse/datatools/sqltools/data/internal/core/editor/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.data.internal.core.extract" href="html/reference/api/org/eclipse/datatools/sqltools/data/internal/core/extract/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.data.internal.core.load" href="html/reference/api/org/eclipse/datatools/sqltools/data/internal/core/load/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.data.internal.ui" href="html/reference/api/org/eclipse/datatools/sqltools/data/internal/ui/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.data.internal.ui.editor" href="html/reference/api/org/eclipse/datatools/sqltools/data/internal/ui/editor/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.data.internal.ui.extract" href="html/reference/api/org/eclipse/datatools/sqltools/data/internal/ui/extract/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.data.internal.ui.load" href="html/reference/api/org/eclipse/datatools/sqltools/data/internal/ui/load/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.db.derby" href="html/reference/api/org/eclipse/datatools/sqltools/db/derby/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.db.derby.core" href="html/reference/api/org/eclipse/datatools/sqltools/db/derby/core/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.db.derby.core.services" href="html/reference/api/org/eclipse/datatools/sqltools/db/derby/core/services/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.db.derby.parser" href="html/reference/api/org/eclipse/datatools/sqltools/db/derby/parser/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.db.derby.sql" href="html/reference/api/org/eclipse/datatools/sqltools/db/derby/sql/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.db.derby.ui" href="html/reference/api/org/eclipse/datatools/sqltools/db/derby/ui/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.debugger.actions" href="html/reference/api/org/eclipse/datatools/sqltools/debugger/actions/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.debugger.breakpoint" href="html/reference/api/org/eclipse/datatools/sqltools/debugger/breakpoint/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.debugger.core" href="html/reference/api/org/eclipse/datatools/sqltools/debugger/core/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.debugger.core.internal" href="html/reference/api/org/eclipse/datatools/sqltools/debugger/core/internal/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.debugger.core.ui" href="html/reference/api/org/eclipse/datatools/sqltools/debugger/core/ui/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.debugger.debug" href="html/reference/api/org/eclipse/datatools/sqltools/debugger/debug/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.debugger.editorext" href="html/reference/api/org/eclipse/datatools/sqltools/debugger/editorext/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.debugger.launching" href="html/reference/api/org/eclipse/datatools/sqltools/debugger/launching/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.debugger.model" href="html/reference/api/org/eclipse/datatools/sqltools/debugger/model/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.debugger.perspectives" href="html/reference/api/org/eclipse/datatools/sqltools/debugger/perspectives/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.debugger.sourcelookup" href="html/reference/api/org/eclipse/datatools/sqltools/debugger/sourcelookup/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.debugger.view.internal" href="html/reference/api/org/eclipse/datatools/sqltools/debugger/view/internal/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.editor" href="html/reference/api/org/eclipse/datatools/sqltools/editor/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.editor.contentassist" href="html/reference/api/org/eclipse/datatools/sqltools/editor/contentassist/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.editor.core.connection" href="html/reference/api/org/eclipse/datatools/sqltools/editor/core/connection/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.editor.core.result" href="html/reference/api/org/eclipse/datatools/sqltools/editor/core/result/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.editor.internal.template" href="html/reference/api/org/eclipse/datatools/sqltools/editor/internal/template/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.editor.template" href="html/reference/api/org/eclipse/datatools/sqltools/editor/template/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.editor.ui.core" href="html/reference/api/org/eclipse/datatools/sqltools/editor/ui/core/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.editor.ui.internal.core" href="html/reference/api/org/eclipse/datatools/sqltools/editor/ui/internal/core/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.parsers.sql" href="html/reference/api/org/eclipse/datatools/sqltools/parsers/sql/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.parsers.sql.lexer" href="html/reference/api/org/eclipse/datatools/sqltools/parsers/sql/lexer/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.parsers.sql.postparse" href="html/reference/api/org/eclipse/datatools/sqltools/parsers/sql/postparse/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.parsers.sql.query" href="html/reference/api/org/eclipse/datatools/sqltools/parsers/sql/query/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.parsers.sql.query.postparse" href="html/reference/api/org/eclipse/datatools/sqltools/parsers/sql/query/postparse/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.parsers.sql.query.util" href="html/reference/api/org/eclipse/datatools/sqltools/parsers/sql/query/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.parsers.sql.util" href="html/reference/api/org/eclipse/datatools/sqltools/parsers/sql/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.parsers.sql.xml.query" href="html/reference/api/org/eclipse/datatools/sqltools/parsers/sql/xml/query/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.plan" href="html/reference/api/org/eclipse/datatools/sqltools/plan/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.plan.treeplan" href="html/reference/api/org/eclipse/datatools/sqltools/plan/treeplan/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.result" href="html/reference/api/org/eclipse/datatools/sqltools/result/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.result.core" href="html/reference/api/org/eclipse/datatools/sqltools/result/core/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.result.export" href="html/reference/api/org/eclipse/datatools/sqltools/result/export/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.result.internal.core" href="html/reference/api/org/eclipse/datatools/sqltools/result/internal/core/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.result.internal.export" href="html/reference/api/org/eclipse/datatools/sqltools/result/internal/export/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.result.internal.filters" href="html/reference/api/org/eclipse/datatools/sqltools/result/internal/filters/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.result.internal.index" href="html/reference/api/org/eclipse/datatools/sqltools/result/internal/index/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.result.internal.model" href="html/reference/api/org/eclipse/datatools/sqltools/result/internal/model/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.result.internal.preference" href="html/reference/api/org/eclipse/datatools/sqltools/result/internal/preference/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.result.internal.ui" href="html/reference/api/org/eclipse/datatools/sqltools/result/internal/ui/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.result.internal.ui.actions" href="html/reference/api/org/eclipse/datatools/sqltools/result/internal/ui/actions/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.result.internal.ui.export" href="html/reference/api/org/eclipse/datatools/sqltools/result/internal/ui/export/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.result.internal.ui.export.actions" href="html/reference/api/org/eclipse/datatools/sqltools/result/internal/ui/export/actions/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.result.internal.ui.export.component" href="html/reference/api/org/eclipse/datatools/sqltools/result/internal/ui/export/component/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.result.internal.ui.filters" href="html/reference/api/org/eclipse/datatools/sqltools/result/internal/ui/filters/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.result.internal.ui.utils" href="html/reference/api/org/eclipse/datatools/sqltools/result/internal/ui/utils/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.result.internal.ui.view" href="html/reference/api/org/eclipse/datatools/sqltools/result/internal/ui/view/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.result.internal.ui.viewer" href="html/reference/api/org/eclipse/datatools/sqltools/result/internal/ui/viewer/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.result.internal.utils" href="html/reference/api/org/eclipse/datatools/sqltools/result/internal/utils/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.result.model" href="html/reference/api/org/eclipse/datatools/sqltools/result/model/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.result.ui" href="html/reference/api/org/eclipse/datatools/sqltools/result/ui/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.result.ui.view" href="html/reference/api/org/eclipse/datatools/sqltools/result/ui/view/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.routineeditor.launching" href="html/reference/api/org/eclipse/datatools/sqltools/routineeditor/launching/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.routineeditor.parameter" href="html/reference/api/org/eclipse/datatools/sqltools/routineeditor/parameter/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.routineeditor.plan" href="html/reference/api/org/eclipse/datatools/sqltools/routineeditor/plan/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.routineeditor.result" href="html/reference/api/org/eclipse/datatools/sqltools/routineeditor/result/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.routineeditor.ui" href="html/reference/api/org/eclipse/datatools/sqltools/routineeditor/ui/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.routineeditor.ui.actions" href="html/reference/api/org/eclipse/datatools/sqltools/routineeditor/ui/actions/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.routineeditor.ui.launching" href="html/reference/api/org/eclipse/datatools/sqltools/routineeditor/ui/launching/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.routineeditor.ui.util" href="html/reference/api/org/eclipse/datatools/sqltools/routineeditor/ui/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.routineeditor.util" href="html/reference/api/org/eclipse/datatools/sqltools/routineeditor/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.schemaobjecteditor" href="html/reference/api/org/eclipse/datatools/sqltools/schemaobjecteditor/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.schemaobjecteditor.ddl" href="html/reference/api/org/eclipse/datatools/sqltools/schemaobjecteditor/ddl/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.schemaobjecteditor.model" href="html/reference/api/org/eclipse/datatools/sqltools/schemaobjecteditor/model/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.schemaobjecteditor.ui" href="html/reference/api/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.schemaobjecteditor.ui.action" href="html/reference/api/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/action/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.schemaobjecteditor.ui.common" href="html/reference/api/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/common/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.schemaobjecteditor.ui.core" href="html/reference/api/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/core/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.schemaobjecteditor.ui.extensions" href="html/reference/api/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/extensions/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.schemaobjecteditor.ui.internal.ui" href="html/reference/api/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/internal/ui/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages" href="html/reference/api/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.ddl" href="html/reference/api/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/ddl/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.intropage" href="html/reference/api/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.utils" href="html/reference/api/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/utils/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.schemaobjecteditor.ui.util" href="html/reference/api/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sql" href="html/reference/api/org/eclipse/datatools/sqltools/sql/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sql.identifier" href="html/reference/api/org/eclipse/datatools/sqltools/sql/identifier/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sql.parser" href="html/reference/api/org/eclipse/datatools/sqltools/sql/parser/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sql.parser.ast" href="html/reference/api/org/eclipse/datatools/sqltools/sql/parser/ast/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sql.parser.util" href="html/reference/api/org/eclipse/datatools/sqltools/sql/parser/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sql.reference" href="html/reference/api/org/eclipse/datatools/sqltools/sql/reference/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sql.ui" href="html/reference/api/org/eclipse/datatools/sqltools/sql/ui/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sql.ui.dialogs" href="html/reference/api/org/eclipse/datatools/sqltools/sql/ui/dialogs/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sql.updater" href="html/reference/api/org/eclipse/datatools/sqltools/sql/updater/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sql.util" href="html/reference/api/org/eclipse/datatools/sqltools/sql/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.actions" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/actions/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.dialogs" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/dialogs/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.expressionbuilder" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/expressionbuilder/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.expressionbuilder.actions" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/expressionbuilder/actions/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.expressionbuilder.caseexpr" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/expressionbuilder/caseexpr/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.expressionbuilder.cast" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/expressionbuilder/cast/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.expressionbuilder.constant" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/expressionbuilder/constant/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.expressionbuilder.function" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/expressionbuilder/function/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.expressionbuilder.multiexpr" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/expressionbuilder/multiexpr/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.expressionbuilder.subquery" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/expressionbuilder/subquery/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.input" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/input/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.model" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/model/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.preferences" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/preferences/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.provider.rdbschema" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/provider/rdbschema/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.sqlbuilderdialog" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/sqlbuilderdialog/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.util" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/util/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.views" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/views/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.views.criteria" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/views/criteria/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.views.delete" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/views/delete/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.views.execute" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/views/execute/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.views.fullselect" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/views/fullselect/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.views.graph" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/views/graph/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.views.graph.commands" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/views/graph/commands/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.views.graph.editparts" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/views/graph/editparts/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.views.graph.figures" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/views/graph/figures/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.views.insert" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/views/insert/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.views.select" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/views/select/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.views.source" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/views/source/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.views.update" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/views/update/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlbuilder.views.with" href="html/reference/api/org/eclipse/datatools/sqltools/sqlbuilder/views/with/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqleditor" href="html/reference/api/org/eclipse/datatools/sqltools/sqleditor/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqleditor.internal" href="html/reference/api/org/eclipse/datatools/sqltools/sqleditor/internal/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqleditor.internal.actions" href="html/reference/api/org/eclipse/datatools/sqltools/sqleditor/internal/actions/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqleditor.internal.actions.selection" href="html/reference/api/org/eclipse/datatools/sqltools/sqleditor/internal/actions/selection/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqleditor.internal.editor" href="html/reference/api/org/eclipse/datatools/sqltools/sqleditor/internal/editor/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqleditor.internal.indent" href="html/reference/api/org/eclipse/datatools/sqltools/sqleditor/internal/indent/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqleditor.internal.matching" href="html/reference/api/org/eclipse/datatools/sqltools/sqleditor/internal/matching/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqleditor.internal.profile" href="html/reference/api/org/eclipse/datatools/sqltools/sqleditor/internal/profile/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqleditor.internal.result" href="html/reference/api/org/eclipse/datatools/sqltools/sqleditor/internal/result/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqleditor.internal.sql" href="html/reference/api/org/eclipse/datatools/sqltools/sqleditor/internal/sql/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqleditor.internal.templates" href="html/reference/api/org/eclipse/datatools/sqltools/sqleditor/internal/templates/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqleditor.internal.templates.dialog" href="html/reference/api/org/eclipse/datatools/sqltools/sqleditor/internal/templates/dialog/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqleditor.internal.utils" href="html/reference/api/org/eclipse/datatools/sqltools/sqleditor/internal/utils/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqleditor.perspectives" href="html/reference/api/org/eclipse/datatools/sqltools/sqleditor/perspectives/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqleditor.plan" href="html/reference/api/org/eclipse/datatools/sqltools/sqleditor/plan/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqleditor.preferences" href="html/reference/api/org/eclipse/datatools/sqltools/sqleditor/preferences/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqleditor.result" href="html/reference/api/org/eclipse/datatools/sqltools/sqleditor/result/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqleditor.sql" href="html/reference/api/org/eclipse/datatools/sqltools/sqleditor/sql/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.sqlscrapbook.actions" href="html/reference/api/org/eclipse/datatools/sqltools/sqlscrapbook/actions/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.tabledataeditor.actions" href="html/reference/api/org/eclipse/datatools/sqltools/tabledataeditor/actions/package-summary.html"/>
+		<topic label="org.eclipse.datatools.sqltools.tabledataeditor.actions.providers" href="html/reference/api/org/eclipse/datatools/sqltools/tabledataeditor/actions/providers/package-summary.html"/>
+	</topic>
+	<topic label="Extension Points Reference">
+  <topic label="org.eclipse.datatools.connectivity.cipherProvider" href="html/reference/extension-points/org_eclipse_datatools_connectivity_cipherProvider.html">
+  </topic>		
+  <topic label="org.eclipse.datatools.connectivity.connectionProfile" href="html/reference/extension-points/org_eclipse_datatools_connectivity_connectionProfile.html">
+  </topic>
+  <topic label="org.eclipse.datatools.connectivity.driverExtension" href="html/reference/extension-points/org_eclipse_datatools_connectivity_driverExtension.html">
+  </topic>		
+  <topic label="org.eclipse.datatools.connectivity.oda.consumer.driverBridge" href="html/reference/extension-points/org_eclipse_datatools_connectivity_oda_consumer_driverBridge.html">
+  </topic>
+  <topic label="org.eclipse.datatools.connectivity.oda.consumer.propertyProvider" href="html/reference/extension-points/org_eclipse_datatools_connectivity_oda_consumer_propertyProvider.html">
+  </topic>
+  <topic label="org.eclipse.datatools.connectivity.oda.dataSource" href="html/reference/extension-points/org_eclipse_datatools_connectivity_oda_dataSource.html">
+  </topic>		
+  <topic label="org.eclipse.datatools.connectivity.oda.design.ui.dataSource" href="html/reference/extension-points/org_eclipse_datatools_connectivity_oda_design_ui_dataSource.html">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_connectivity_oda_dynamicResultSet.html" label="org.eclipse.datatools.connectivity.oda.dynamicResultSet">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_connectivity_oda_profile_profileStore.html" label="org.eclipse.datatools.connectivity.oda.profile.profileStore">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_connectivity_ProfileManagerInitializationProvider.html" label="org.eclipse.datatools.connectivity.ProfileManagerInitializationProvider">
+  </topic>	
+  <topic label="org.eclipse.datatools.connectivity.sqm.core.catalog" href="html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_catalog.html">
+  </topic>
+  <topic label="org.eclipse.datatools.connectivity.sqm.core.databaseDefinition" href="html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_databaseDefinition.html">
+  </topic>
+  <topic label="org.eclipse.datatools.connectivity.sqm.core.dataModelElementFactory" href="html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_dataModelElementFactory.html">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_databaseRecognition.html" label="org.eclipse.datatools.connectivity.sqm.core.databaseRecognition">
+  </topic>
+  <topic label="org.eclipse.datatools.connectivity.sqm.core.ddlGeneration" href="html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_ddlGeneration.html">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_ddlParser.html" label="org.eclipse.datatools.connectivity.sqm.core.ddlParser">
+  </topic>
+  <topic label="org.eclipse.datatools.connectivity.sqm.core.logicalContainment" href="html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_logicalContainment.html">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_mappings.html" label="org.eclipse.datatools.connectivity.sqm.core.mappings">
+  </topic>
+  <topic label="org.eclipse.datatools.connectivity.sqm.core.ui.labelService" href="html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_ui_labelService.html">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_ui_markerNavigationProvider.html" label="org.eclipse.datatools.connectivity.sqm.core.ui.markerNavigationProvider">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_ui_sorterValidatorProvider.html" label="org.eclipse.datatools.connectivity.sqm.core.ui.sorterValidatorProvider">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_validConnectionHandler.html" label="org.eclipse.datatools.connectivity.sqm.core.validConnectionHandler">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_metaDataExtension.html" label="org.eclipse.datatools.connectivity.sqm.core.metaDataExtension">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_sqlexceptionHandler.html" label="org.eclipse.datatools.connectivity.sqm.core.sqlexceptionHandler">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_ui_addObjectProvider.html" label="org.eclipse.datatools.connectivity.sqm.core.ui.addObjectProvider">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_ui_creationInfoProvider.html" label="org.eclipse.datatools.connectivity.sqm.core.ui.creationInfoProvider">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_ui_elementID.html" label="org.eclipse.datatools.connectivity.sqm.core.ui.elementID">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_connectivity_sqm_core_ui_filterInformation.html" label="org.eclipse.datatools.connectivity.sqm.core.ui.filterInformation">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_connectivity_ui_addConnectListener.html" label="org.eclipse.datatools.connectivity.ui.addConnectListener">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_connectivity_ui_connectionExceptionHandler.html" label="org.eclipse.datatools.connectivity.ui.connectionExceptionHandler">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_connectivity_ui_connectionProfileImage.html" label="org.eclipse.datatools.connectivity.ui.connectionProfileImage">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_connectivity_ui_driverPropertyEditor.html" label="org.eclipse.datatools.connectivity.ui.driverPropertyEditor">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_connectivity_ui_driverUIContributor.html" label="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_enablement_sybase_ase_additionalcontroller.html" label="org.eclipse.datatools.enablement.sybase.ase.additionalcontroller">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_enablement_sybase_deltaDdlGenProvider.html" label="DDLGenProtoType.deltaDdlGenProvider">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_help_helpKeyProperties.html" label="org.eclipse.datatools.help.helpKeyProperties">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_modelbase_sql_query_sourceWriterExtension.html" label="org.eclipse.datatools.modelbase.sql.query.sourcewriterextension">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_modelbase_sql_sqlObjectNameHelper.html" label="org.eclipse.datatools.modelbase.sql.sqlObjectNameHelper">
+  </topic>
+  <topic label="org.eclipse.datatools.sqltools.common.ui.preferenceSections" href="html/reference/extension-points/org_eclipse_datatools_sqltools_common_ui_preferenceSections.html">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_sqltools_data_core_columnDataAccessors.html" label="org.eclipse.datatools.sqltools.data.core.columnDataAccessor">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_sqltools_data_core_tableEditorResultFilter.html" label="org.eclipse.datatools.sqltools.data.core.tableEditorResultFilter">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_sqltools_data_ui_externalTableDataEditor.html" label="org.eclipse.datatools.sqltools.data.ui.externalTableDataEditor">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_sqltools_data_ui_externalTableDataExtract.html" label="org.eclipse.datatools.sqltools.data.ui.externalTableDataExtract">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_sqltools_data_ui_externalTableDataLoad.html" label="org.eclipse.datatools.sqltools.data.ui.externalTableDataLoad">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_sqltools_debugger_core_sourceLocatorProvider.html" label="org.eclipse.datatools.sqltools.debugger.core.sourceLocatorProvider">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_sqltools_editor_core_dbConfigurations.html" label="org.eclipse.datatools.sqltools.editor.core.dbConfigurations">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_sqltools_editor_core_SQLBuilderUIComponentService.html" label="org.eclipse.datatools.sqltools.editor.core.SQLBuilderUIComponentService">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_sqltools_editor_core_ui_dbUIConfigurations.html" label="org.eclipse.datatools.sqltools.editor.ui.core.dbUIConfigurations">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_sqltools_parsers_sql_query_vendorExtension.html" label="com.ibm.db.parsers.sql.query.com.ibm.db.parsers.sql.query.vendorextension">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_sqltools_plan_planService.html" label="org.eclipse.datatools.sqltools.plan.planService">
+  </topic>
+  <topic label="org.eclipse.datatools.sqltools.result.reExecuteScript" href="html/reference/extension-points/org_eclipse_datatools_sqltools_result_reExecuteScript.html">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_sqltools_result_resultListener.html" label="org.eclipse.datatools.sqltools.result.resultListener">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_sqltools_result_resultSetOutputter.html" label="org.eclipse.datatools.sqltools.result.resultSetOutputter">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_sqltools_result_ui_parameterViewer.html" label="org.eclipse.datatools.sqltools.result.ui.externalParameterViewer">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_sqltools_result_ui_resultSetViewer.html" label="org.eclipse.datatools.sqltools.result.ui.externalResultSetViewer">
+  </topic>
+  <topic label="org.eclipse.datatools.sqltools.routineeditor.ui.documentprovider" href="html/reference/extension-points/org_eclipse_datatools_sqltools_routineeditor_ui_documentprovider.html">
+  </topic>
+  <topic label="org.eclipse.datatools.sqltools.routineeditor.launchConfigurationTypes" href="html/reference/extension-points/org_eclipse_datatools_sqltools_routineeditor_launchConfigurationTypes.html">
+  </topic>
+  <topic label="org.eclipse.datatools.sqltools.sqleditor.texthover" href="html/reference/extension-points/org_eclipse_datatools_sqltools_sqleditor_texthover.html">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_sqltools_tabledataeditor_externalRunQuery.html" label="org.eclipse.datatools.sqltools.tabledataeditor.externalRunQuery">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_sqltools_sqlscrapbook_dbdeffilter.html" label="org.eclipse.datatools.sqltools.sqlscrapbook.dbdeffilter">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_sqltools_sqleditor_sourceViewerConfiguration.html" label="org.eclipse.datatools.sqltools.sqleditor.sourceViewerConfiguration">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_sqltools_sqleditor_actionExtensions.html" label="org.eclipse.datatools.sqltools.sqleditor.actionExtensions">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_sqltools_sql_ui_sqlNodesImage.html" label="org.eclipse.datatools.sqltools.sql.ui.sqlNodesImage">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_sqltools_schemaobjecteditor_ui_schemaObjectEditor.html" label="org.eclipse.datatools.sqltools.schemaobjecteditor.schemaObjectEditor">
+  </topic>
+  <topic href="html/reference/extension-points/org_eclipse_datatools_sqltools_schemaobjecteditor_ui_pages_introductionPage.html" label="org.eclipse.datatools.sqltools.schemaobjecteditor.introductionPage">
+  </topic>
+	</topic>
+</toc>
diff --git a/plugins/org.eclipse.datatools.enablement.finfo/.project b/plugins/org.eclipse.datatools.enablement.finfo/.project
new file mode 100644
index 0000000..e5306a8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.finfo/.project
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.finfo</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.enablement.finfo/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.enablement.finfo/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..a2699f9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.finfo/META-INF/MANIFEST.MF
@@ -0,0 +1,9 @@
+Manifest-Version: 1.0
+Eclipse-LazyStart: true
+Bundle-Name: %pluginName
+Bundle-Vendor: %providerName
+Bundle-ManifestVersion: 2
+Bundle-Localization: plugin
+Bundle-SymbolicName: org.eclipse.datatools.enablement.finfo; singleton:=true
+Bundle-Version: 1.7.0.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/plugins/org.eclipse.datatools.enablement.finfo/about.html b/plugins/org.eclipse.datatools.enablement.finfo/about.html
new file mode 100644
index 0000000..129db9d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.finfo/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.finfo/about.ini b/plugins/org.eclipse.datatools.enablement.finfo/about.ini
new file mode 100644
index 0000000..76a0356
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.finfo/about.ini
@@ -0,0 +1,27 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%blurb
+
+# Property "windowImage" contains path to window icon (16x16)
+# needed for primary features only
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=eclipse32.png
+
+# Property "aboutImage" contains path to product image (500x330 or 115x164)
+# needed for primary features only
+
+# Property "appName" contains name of the application (not translated)
+# needed for primary features only
+
+# Property "welcomePerspective" contains the id of the perspective in which the
+# welcome page is to be opened.
+# optional
+
+# Property "tipsAndTricksHref" contains the Help topic href to a tips and tricks page 
+# optional
diff --git a/plugins/org.eclipse.datatools.enablement.finfo/about.mappings b/plugins/org.eclipse.datatools.enablement.finfo/about.mappings
new file mode 100644
index 0000000..3f4348a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.finfo/about.mappings
@@ -0,0 +1 @@
+0=@BUILD@
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.finfo/about.properties b/plugins/org.eclipse.datatools.enablement.finfo/about.properties
new file mode 100644
index 0000000..9b2c8bb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.finfo/about.properties
@@ -0,0 +1,19 @@
+###############################################################################
+# Copyright (c) 2006 Sybase, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     Sybase, Inc. - initial API and implementation
+###############################################################################
+blurb=Eclipse Data Tools Platform Enablement\n\
+\n\
+Visit http://www.eclipse.org/datatools\n\
+\n\
+Copyright (c) 2017 Eclipse Contributors\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html
diff --git a/plugins/org.eclipse.datatools.enablement.finfo/build.properties b/plugins/org.eclipse.datatools.enablement.finfo/build.properties
new file mode 100644
index 0000000..235d171
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.finfo/build.properties
@@ -0,0 +1,9 @@
+bin.includes = META-INF/,\
+               about.html,\
+               about.ini,\
+               about.mappings,\
+               about.properties,\
+               eclipse32.gif,\
+               eclipse32.png,\
+               plugin.properties
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.enablement.finfo/eclipse32.gif b/plugins/org.eclipse.datatools.enablement.finfo/eclipse32.gif
new file mode 100644
index 0000000..811eccb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.finfo/eclipse32.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.enablement.finfo/eclipse32.png b/plugins/org.eclipse.datatools.enablement.finfo/eclipse32.png
new file mode 100644
index 0000000..568fac1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.finfo/eclipse32.png
Binary files differ
diff --git a/plugins/org.eclipse.datatools.enablement.finfo/plugin.properties b/plugins/org.eclipse.datatools.enablement.finfo/plugin.properties
new file mode 100644
index 0000000..a65d445
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.finfo/plugin.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2006 Sybase, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     Sybase, Inc. - initial API and implementation
+###############################################################################
+pluginName=Eclipse Data Tools Platform Enablement
+providerName=Eclipse Data Tools Platform
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb.dbdefinition/.gitignore b/plugins/org.eclipse.datatools.enablement.hsqldb.dbdefinition/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb.dbdefinition/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb.dbdefinition/.project b/plugins/org.eclipse.datatools.enablement.hsqldb.dbdefinition/.project
new file mode 100644
index 0000000..40883e4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb.dbdefinition/.project
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.hsqldb.dbdefinition</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb.dbdefinition/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.enablement.hsqldb.dbdefinition/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..b1f6923
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb.dbdefinition/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: org.eclipse.datatools.enablement.hsqldb.dbdefinition; singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: %Bundle-Vendor
+Bundle-Localization: plugin
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb.dbdefinition/about.html b/plugins/org.eclipse.datatools.enablement.hsqldb.dbdefinition/about.html
new file mode 100644
index 0000000..129db9d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb.dbdefinition/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb.dbdefinition/build.properties b/plugins/org.eclipse.datatools.enablement.hsqldb.dbdefinition/build.properties
new file mode 100644
index 0000000..daf4102
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb.dbdefinition/build.properties
@@ -0,0 +1,12 @@
+bin.includes = META-INF/,\
+               runtime/,\
+               plugin.properties,\
+               plugin.xml,\
+               about.html
+src.dir	= src/
+plugin.version =	1.0.0.200801041
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb.dbdefinition/plugin.properties b/plugins/org.eclipse.datatools.enablement.hsqldb.dbdefinition/plugin.properties
new file mode 100644
index 0000000..4208d82
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb.dbdefinition/plugin.properties
@@ -0,0 +1,6 @@
+Bundle-Vendor = Eclipse Data Tools Platform
+Bundle-Name = Eclipse Data Tools Platform HSQLDB Database Definition Enablement Plug-in
+
+product.display.string = HSQLDB
+product.display.version.string = 1.8
+product.display.description = HSQLDB Connection Profile
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb.dbdefinition/plugin.xml b/plugins/org.eclipse.datatools.enablement.hsqldb.dbdefinition/plugin.xml
new file mode 100644
index 0000000..175d22e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb.dbdefinition/plugin.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.databaseDefinition">
+      <definition
+            description="%product.display.description"
+            file="runtime/vendors/HSQLDB_1.8/HSQLDB_1.8.xmi"
+            product="HSQLDB"
+            productDisplayString="%product.display.string"
+            version="1.8"
+            versionDisplayString="%product.display.version.string"/>
+   </extension>
+</plugin>
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb.dbdefinition/runtime/vendors/HSQLDB_1.8/HSQLDB_1.8.xmi b/plugins/org.eclipse.datatools.enablement.hsqldb.dbdefinition/runtime/vendors/HSQLDB_1.8/HSQLDB_1.8.xmi
new file mode 100644
index 0000000..b117134
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb.dbdefinition/runtime/vendors/HSQLDB_1.8/HSQLDB_1.8.xmi
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="HSQLDB" version="1.8" maximumIdentifierLength="64" maximumCommentLength="64" sequenceSupported="true" aliasSupported="true" storedProcedureSupported="false">
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INTEGER</name>
+    <name>INT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE</name>
+    <name>DOUBLE PRECISION</name>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_2" lengthSupported="true" keyConstraintSupported="true" maximumLength="2147483647" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_3" lengthSupported="true" keyConstraintSupported="true" maximumLength="2147483647" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR_IGNORECASE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="2147483647" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR</name>
+    <name>CHARACTER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_4" lengthSupported="true" keyConstraintSupported="true" maximumLength="2147483647" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONGVARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" identitySupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIME_1" keyConstraintSupported="true" identitySupported="true" primitiveType="TIME" jdbcEnumType="92" javaClassName="java.sql.Time">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" identitySupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP</name>
+    <name>DATETIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" scaleSupported="true" precisionSupported="true" keyConstraintSupported="true" identitySupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" scaleSupported="true" precisionSupported="true" keyConstraintSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BOOLEAN_1" keyConstraintSupported="true" identitySupported="true" primitiveType="BOOLEAN" jdbcEnumType="16" javaClassName="boolean">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BOOLEAN</name>
+    <name>BIT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_2" keyConstraintSupported="true" identitySupported="true" primitiveType="SMALLINT" jdbcEnumType="-6" javaClassName="byte">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TINYINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="long">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIGINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" keyConstraintSupported="true" maximumValue="2147483647" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BINARY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_1" keyConstraintSupported="true" maximumValue="2147483647" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARBINARY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_2" keyConstraintSupported="true" maximumValue="2147483647" primitiveType="BINARY_VARYING" jdbcEnumType="-4" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONGVARBINARY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_1" keyConstraintSupported="true" maximumValue="2147483647" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="1111" javaClassName="java.lang.Object">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>OTHER</name>
+    <name>OBJECT</name>
+  </predefinedDataTypeDefinitions>
+  <columnDefinition identitySupported="true" computedSupported="false" identityStartValueSupported="true" identityIncrementSupported="true" identityMinimumSupported="true" identityMaximumSupported="true" identityCycleSupported="true"/>
+  <constraintDefinition clusteredPrimaryKeySupported="true" clusteredUniqueConstraintSupported="true">
+    <parentUpdateDRIRuleType>RESTRICT</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>RESTRICT</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>SET_NULL</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+    <checkOption>NONE</checkOption>
+    <checkOption>LOCAL</checkOption>
+    <checkOption>CASCADE</checkOption>
+  </constraintDefinition>
+</DBDefinition:DatabaseVendorDefinition>
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb.ui/.classpath b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/.classpath
new file mode 100644
index 0000000..ce73933
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb.ui/.gitignore b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb.ui/.project b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/.project
new file mode 100644
index 0000000..7239b47
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.hsqldb.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..73f4382
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Fri Apr 13 14:14:14 PDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.4
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..59d5800
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,26 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: org.eclipse.datatools.enablement.hsqldb.ui;singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-Vendor: %Bundle-Vendor
+Bundle-Activator: org.eclipse.datatools.enablement.hsqldb.ui.HSQLDBActivator
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.datatools.connectivity.sqm.core,
+ org.eclipse.datatools.connectivity,
+ org.eclipse.datatools.connectivity.ui,
+ org.eclipse.datatools.connectivity.db.generic,
+ org.eclipse.datatools.connectivity.db.generic.ui,
+ org.eclipse.datatools.enablement.hsqldb,
+ org.eclipse.datatools.connectivity.sqm.server.ui,
+ org.eclipse.datatools.connectivity.sqm.core.ui,
+ org.eclipse.emf.ecore,
+ org.eclipse.ui.navigator
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.datatools.enablement.hsqldb.ui,
+ org.eclipse.datatools.enablement.hsqldb.ui.connection,
+ org.eclipse.datatools.enablement.hsqldb.ui.connection.drivers
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb.ui/about.html b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb.ui/build.properties b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/build.properties
new file mode 100644
index 0000000..77ce03e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/build.properties
@@ -0,0 +1,19 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               plugin.properties,\
+               about.html,\
+               icons/
+
+jars.compile.order = .
+output.. = bin/
+source.. = src/
+src.dir			 = src/
+plugin.version =	1.0.0.200801041
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb.ui/icons/new_db_element.gif b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/icons/new_db_element.gif
new file mode 100644
index 0000000..1d459ce
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/icons/new_db_element.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb.ui/plugin.properties b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/plugin.properties
new file mode 100644
index 0000000..45739eb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/plugin.properties
@@ -0,0 +1,14 @@
+DRIVER_CLASS_PROPERTY_NAME=Driver Class
+VENDOR_PROPERTY_NAME=Vendor
+VERSION_PROPERTY_NAME=Version
+DATABASE_NAME_PROPERTY_NAME=Database Name
+CONNECTION_URL_PROPERTY_NAME=Connection URL
+USER_ID_PROPERTY_NAME=User ID
+PASSWORD_PROPERTY_NAME=Password
+
+Bundle-Vendor = Eclipse Data Tools Platform
+Bundle-Name = Eclipse Data Tools Platform HSQLDB UI Enablement Plug-in
+profile.page.name = HSQLDB Profile Properties
+
+connection.profile.newwizard = HSQLDB
+connection.profile.newwizard.description = Create an HSQLDB connection profile.
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb.ui/plugin.xml b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/plugin.xml
new file mode 100644
index 0000000..c2c8a7f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/plugin.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension
+         point="org.eclipse.datatools.connectivity.connectionProfile">
+      <newWizard
+            class="org.eclipse.datatools.enablement.hsqldb.ui.connection.NewHSQLDBConnectionProfileWizard"
+            icon="icons/new_db_element.gif"
+            id="org.eclipse.datatools.enablement.hsqldb.connectionProfile.NewConnectionProfileWizard"
+            name="%connection.profile.newwizard"
+            description = "%connection.profile.newwizard.description"
+            profile="org.eclipse.datatools.enablement.hsqldb.connectionProfile"/>
+   </extension>
+   
+      <extension
+         point="org.eclipse.ui.propertyPages">
+      <page
+            class="org.eclipse.datatools.enablement.hsqldb.ui.connection.HSQLDBProfilePropertyPage"
+            id="org.eclipse.datatools.enablement.hsqldb.connectionProfile.profileProperties"
+            name="%profile.page.name">
+         <filter
+               name="org.eclipse.datatools.profile.property.id"
+               value="org.eclipse.datatools.enablement.hsqldb.connectionProfile"/>
+         <enabledWhen>
+            <instanceof
+                  value="org.eclipse.datatools.connectivity.IConnectionProfile">
+            </instanceof>
+         </enabledWhen>
+      </page>
+   </extension>
+   
+   <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.hsqldb.ui.connection.drivers.HSQLDBDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.hsqldb.1_8.driver"
+            id="org.eclipse.datatools.enablement.hsqldb.ui.connection.drivers.1_8.HSQLDBDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+<!--
+   <extension
+         point="org.eclipse.ui.navigator.viewer">
+      <viewerContentBinding viewerId="org.eclipse.datatools.connectivity.DataSourceExplorerNavigator">
+         <includes>
+            <contentExtension pattern="org.eclipse.datatools.enablement.hsqldb.navigatorContent"/>
+         </includes>
+      </viewerContentBinding>
+   </extension>
+
+   <extension
+         point="org.eclipse.ui.navigator.navigatorContent">
+      <navigatorContent
+            activeByDefault="true"
+            contentProvider="org.eclipse.datatools.enablement.hsqldb.catalog.HSQLDBPipelineTreeContentProvider"
+            id="org.eclipse.datatools.enablement.hsqldb.navigatorContent"
+            labelProvider="org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.SQLModelLabelProviderExtension"
+            name="%navigator.content.name"
+            priority="highest">
+         <override
+               policy="InvokeAlwaysRegardlessOfSuppressedExt"
+               suppressedExtensionId="org.eclipse.datatools.connectivity.db.sqlModelContent"/>
+         <triggerPoints>
+            <instanceof value="org.eclipse.datatools.enablement.hsqldb.catalog.HSQLDBCatalogSchema"/>
+         </triggerPoints>
+      </navigatorContent>
+   </extension>
+-->
+</plugin>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb.ui/src/org/eclipse/datatools/enablement/hsqldb/ui/HSQLDBActivator.java b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/src/org/eclipse/datatools/enablement/hsqldb/ui/HSQLDBActivator.java
new file mode 100644
index 0000000..fdfb5a0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/src/org/eclipse/datatools/enablement/hsqldb/ui/HSQLDBActivator.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Brian Fitzpatrick - initial API and implementation
+ * 			IBM Corporation - refactored plug-in
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.hsqldb.ui;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class HSQLDBActivator extends AbstractUIPlugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.datatools.enablement.hsqldb"; //$NON-NLS-1$
+
+	// The shared instance
+	private static HSQLDBActivator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public HSQLDBActivator() {
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static HSQLDBActivator getDefault() {
+		return plugin;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb.ui/src/org/eclipse/datatools/enablement/hsqldb/ui/Messages.java b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/src/org/eclipse/datatools/enablement/hsqldb/ui/Messages.java
new file mode 100644
index 0000000..c97fa4e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/src/org/eclipse/datatools/enablement/hsqldb/ui/Messages.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Brian Fitzpatrick - initial API and implementation
+ * 			IBM Corporation - refactored plug-in
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.hsqldb.ui;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * @author brianf
+ *
+ */
+public class Messages {
+	
+	private static final String BUNDLE_NAME = "org.eclipse.datatools.enablement.hsqldb.ui.messages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	/**
+	 * 
+	 */
+	private Messages() {
+	}
+
+	/**
+	 * @param key
+	 * @return
+	 */
+	public static String getString(String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb.ui/src/org/eclipse/datatools/enablement/hsqldb/ui/catalog/HSQLDBPipelineTreeContentProvider.java b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/src/org/eclipse/datatools/enablement/hsqldb/ui/catalog/HSQLDBPipelineTreeContentProvider.java
new file mode 100644
index 0000000..4975cf8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/src/org/eclipse/datatools/enablement/hsqldb/ui/catalog/HSQLDBPipelineTreeContentProvider.java
@@ -0,0 +1,115 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Brian Fitzpatrick - initial API and implementation
+ * 			IBM Corporation - refactored plug-in
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.hsqldb.ui.catalog;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.content.virtual.StoredProcedureNode;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.impl.ServerExplorerContentProviderNav;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.navigator.ICommonContentExtensionSite;
+import org.eclipse.ui.navigator.IPipelinedTreeContentProvider;
+import org.eclipse.ui.navigator.PipelinedShapeModification;
+import org.eclipse.ui.navigator.PipelinedViewerUpdate;
+
+/**
+ * @author brianf
+ *
+ */
+public class HSQLDBPipelineTreeContentProvider extends ServerExplorerContentProviderNav implements IPipelinedTreeContentProvider {
+
+	/**
+	 * 
+	 */
+	public HSQLDBPipelineTreeContentProvider() {
+		super();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.IPipelinedTreeContentProvider#getPipelinedChildren(java.lang.Object, java.util.Set)
+	 */
+	public void getPipelinedChildren(Object aParent, Set theCurrentChildren) {
+		Object[] children = getChildren(aParent);
+		ArrayList kids = new ArrayList(Arrays.asList(children));
+		theCurrentChildren.clear();
+		for (Iterator iter = kids.iterator(); iter.hasNext();) {
+			if (iter.next() instanceof StoredProcedureNode)
+				iter.remove();
+		}
+		theCurrentChildren.addAll(kids);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.IPipelinedTreeContentProvider#getPipelinedElements(java.lang.Object, java.util.Set)
+	 */
+	public void getPipelinedElements(Object anInput, Set theCurrentElements) {
+		Object[] children = getElements(anInput);
+
+		theCurrentElements.addAll(Arrays.asList(children));
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.IPipelinedTreeContentProvider#getPipelinedParent(java.lang.Object, java.lang.Object)
+	 */
+	public Object getPipelinedParent(Object anObject, Object aSuggestedParent) {
+		return getParent(anObject);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.IPipelinedTreeContentProvider#interceptAdd(org.eclipse.ui.navigator.PipelinedShapeModification)
+	 */
+	public PipelinedShapeModification interceptAdd(
+			PipelinedShapeModification anAddModification) {
+		return anAddModification;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.IPipelinedTreeContentProvider#interceptRefresh(org.eclipse.ui.navigator.PipelinedViewerUpdate)
+	 */
+	public boolean interceptRefresh(
+			PipelinedViewerUpdate aRefreshSynchronization) {
+		return true;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.IPipelinedTreeContentProvider#interceptRemove(org.eclipse.ui.navigator.PipelinedShapeModification)
+	 */
+	public PipelinedShapeModification interceptRemove(
+			PipelinedShapeModification aRemoveModification) {
+		return aRemoveModification;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.IPipelinedTreeContentProvider#interceptUpdate(org.eclipse.ui.navigator.PipelinedViewerUpdate)
+	 */
+	public boolean interceptUpdate(PipelinedViewerUpdate anUpdateSynchronization) {
+		return true;
+	}
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+	 */
+	public void dispose() {
+		super.dispose();
+	}
+
+	public void init(ICommonContentExtensionSite aConfig) {
+	}
+
+	public void restoreState(IMemento aMemento) {
+	}
+
+	public void saveState(IMemento aMemento) {
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb.ui/src/org/eclipse/datatools/enablement/hsqldb/ui/connection/HSQLDBProfileDetailsWizardPage.java b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/src/org/eclipse/datatools/enablement/hsqldb/ui/connection/HSQLDBProfileDetailsWizardPage.java
new file mode 100644
index 0000000..2688ab6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/src/org/eclipse/datatools/enablement/hsqldb/ui/connection/HSQLDBProfileDetailsWizardPage.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.hsqldb.ui.connection;
+
+import org.eclipse.datatools.connectivity.ui.wizards.ExtensibleProfileDetailsWizardPage;
+import org.eclipse.datatools.enablement.hsqldb.ui.IHSQLDBConnectionProfileConstants;
+
+public class HSQLDBProfileDetailsWizardPage extends
+		ExtensibleProfileDetailsWizardPage {
+
+	public HSQLDBProfileDetailsWizardPage(String pageName) {
+		super(pageName, IHSQLDBConnectionProfileConstants.HSQLDB_CATEGORY_ID);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb.ui/src/org/eclipse/datatools/enablement/hsqldb/ui/connection/HSQLDBProfilePropertyPage.java b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/src/org/eclipse/datatools/enablement/hsqldb/ui/connection/HSQLDBProfilePropertyPage.java
new file mode 100644
index 0000000..0009042
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/src/org/eclipse/datatools/enablement/hsqldb/ui/connection/HSQLDBProfilePropertyPage.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.hsqldb.ui.connection;
+
+import org.eclipse.datatools.connectivity.ui.wizards.ExtensibleProfileDetailsPropertyPage;
+import org.eclipse.datatools.enablement.hsqldb.ui.IHSQLDBConnectionProfileConstants;
+
+public class HSQLDBProfilePropertyPage extends
+		ExtensibleProfileDetailsPropertyPage {
+
+	public HSQLDBProfilePropertyPage() {
+		super(IHSQLDBConnectionProfileConstants.HSQLDB_CATEGORY_ID);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb.ui/src/org/eclipse/datatools/enablement/hsqldb/ui/connection/NewHSQLDBConnectionProfileWizard.java b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/src/org/eclipse/datatools/enablement/hsqldb/ui/connection/NewHSQLDBConnectionProfileWizard.java
new file mode 100644
index 0000000..d0cbd41
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/src/org/eclipse/datatools/enablement/hsqldb/ui/connection/NewHSQLDBConnectionProfileWizard.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.hsqldb.ui.connection;
+
+import org.eclipse.datatools.connectivity.ui.wizards.ExtensibleNewConnectionProfileWizard;
+
+public class NewHSQLDBConnectionProfileWizard extends
+		ExtensibleNewConnectionProfileWizard {
+	public NewHSQLDBConnectionProfileWizard() {
+		super(
+				new HSQLDBProfileDetailsWizardPage(
+						"org.eclipse.datatools.enablement.hsqldb.ui.connection.HSQLDBProfileDetailsWizardPage")); //$NON-NLS-1$
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb.ui/src/org/eclipse/datatools/enablement/hsqldb/ui/connection/drivers/HSQLDBDriverUIContributor.java b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/src/org/eclipse/datatools/enablement/hsqldb/ui/connection/drivers/HSQLDBDriverUIContributor.java
new file mode 100644
index 0000000..87b9e69
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/src/org/eclipse/datatools/enablement/hsqldb/ui/connection/drivers/HSQLDBDriverUIContributor.java
@@ -0,0 +1,550 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2008 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ *     IBM Corporation - migrated to new wizard framework
+ *     IBM Corporation - defect fix #213266
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.hsqldb.ui.connection.drivers;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.eclipse.datatools.enablement.hsqldb.ui.Messages;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.datatools.connectivity.ConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.drivers.DriverManager;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
+import org.eclipse.datatools.connectivity.internal.ui.DelimitedStringList;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributor;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributorInformation;
+import org.eclipse.jface.dialogs.DialogPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.swt.widgets.Text;
+
+
+
+public class HSQLDBDriverUIContributor implements IDriverUIContributor,
+		Listener, ModifyListener {
+
+	private static final String CUI_NEWCW_GENERAL_TAB_UI_ = Messages
+			.getString("HSQLDBProfileDetailsWizardPage.general.tab"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_OPTIONAL_TAB_UI_ = Messages
+			.getString("HSQLDBProfileDetailsWizardPage.optional.tab"); //$NON-NLS-1$
+
+	private static String CUI_NEWCW_DATABASE_LBL_UI_ = Messages
+	.getString("HSQLDBProfileDetailsWizardPage.databaseName.label"); //$NON-NLS-1$
+	
+	private static final String CUI_NEWCW_DBLOCATION_LBL_UI_ = Messages
+			.getString("HSQLDBProfileDetailsWizardPage.0"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_DBBROWSE_BTN_UI_ = Messages
+			.getString("HSQLDBProfileDetailsWizardPage.1"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_USERNAME_LBL_UI_ = Messages
+			.getString("HSQLDBProfileDetailsWizardPage.userName.label"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_PASSWORD_LBL_UI_ = Messages
+			.getString("HSQLDBProfileDetailsWizardPage.password.label"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_SAVE_PASSWORD_LBL_UI_ = Messages
+			.getString("HSQLDBProfileDetailsWizardPage.persistpassword.label"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_CONNECTIONURL_LBL_UI_ = Messages
+			.getString("HSQLDBProfileDetailsWizardPage.url.label"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_OPTIONAL_PROPERTIES_LBL_UI_ = Messages
+			.getString("HSQLDBProfileDetailsWizardPage.optionalProps.label"); //$NON-NLS-1$	
+
+	private static final String CUI_NEWCW_DRIVER_NAME_SUMMARY_DATA_TEXT_ = Messages
+			.getString("HSQLDBProfileDetailsWizardPage.summary.driverName.label"); //$NON-NLS-1$
+	
+	private static final String CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_ = Messages
+	.getString("HSQLDBProfileDetailsWizardPage.summary.database.label"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_DATABASE_LOCATION_SUMMARY_DATA_TEXT_ = Messages
+			.getString("HSQLDBProfileDetailsWizardPage.summary.databaselocation.label"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_ = Messages
+			.getString("HSQLDBProfileDetailsWizardPage.summary.userName.label"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_URL_SUMMARY_DATA_TEXT_ = Messages
+			.getString("HSQLDBProfileDetailsWizardPage.summary.url.label"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_ = Messages
+			.getString("HSQLDBProfileDetailsWizardPage.summary.persistpassword.label"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_OPTIONAL_CONNECTION_PROPERTIES_SUMMARY_DATA_TEXT_ = Messages
+			.getString("HSQLDBProfileDetailsWizardPage.summary.connProps.label"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("HSQLDBProfileDetailsWizardPage.summary.true"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("HSQLDBProfileDetailsWizardPage.summary.false"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_FILE_BROWSER_TITLE_TEXT_ = Messages
+			.getString("HSQLDBProfileDetailsWizardPage.FileDialog.title.filebrowse"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_FILE_BROWSER_MESSAGE_TEXT_ = Messages
+			.getString("HSQLDBProfileDetailsWizardPage.FileDialog.msg.filebrowse"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_VALIDATE_DATABASE_REQ_UI_ = Messages
+	.getString("HSQLDBProfileDetailsWizardPage.database.validation.message"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_VALIDATE_DBLOCATION_REQ_UI_ = Messages
+			.getString("HSQLDBProfileDetailsWizardPage.databaselocation.validation.message"); //$NON-NLS-1$
+
+	private ScrolledComposite parentComposite;
+
+	private Label databaseLabel;
+
+	private Text databaseText;
+	
+	private Label databaseLocationLabel;
+
+	private Combo databaseLocationText;
+
+	private Button browseDatabaseLocation;
+
+	private Label usernameLabel;
+
+	private Text usernameText;
+
+	private Label passwordLabel;
+
+	private Text passwordText;
+
+	private Button savePasswordButton;
+
+	private Label urlLabel;
+
+	private Text urlText;
+
+	private DelimitedStringList optionalConnectionProperties;
+
+	private DialogPage parentPage;
+
+	private IDriverUIContributorInformation contributorInformation;
+
+	private Properties properties;
+
+	private boolean isReadOnly = false;
+	
+	public boolean determineContributorCompletion() {
+		boolean isComplete = true;
+		if (databaseText.getText().trim().length() < 1) { //$NON-NLS-1$
+			parentPage.setErrorMessage(CUI_NEWCW_VALIDATE_DATABASE_REQ_UI_);
+			isComplete = false;
+		} else if (databaseLocationText.getText().equals("")) { //$NON-NLS-1$
+			parentPage.setErrorMessage(CUI_NEWCW_VALIDATE_DBLOCATION_REQ_UI_); //$NON-NLS-1$
+			isComplete = false;
+		}
+
+		if (isComplete) {
+			parentPage.setErrorMessage(null);
+		}
+		return isComplete;
+	}
+
+	public Composite getContributedDriverUI(Composite parent, boolean isReadOnly) {
+		if (parentComposite == null || parentComposite.isDisposed() || (this.isReadOnly != isReadOnly)) {
+			this.isReadOnly = isReadOnly;
+			int additionalStyles = SWT.NONE;
+			if (isReadOnly){
+				additionalStyles = SWT.READ_ONLY;
+			}
+			
+			parentComposite = new ScrolledComposite(parent, SWT.H_SCROLL
+					| SWT.V_SCROLL);
+			parentComposite.setExpandHorizontal(true);
+			parentComposite.setExpandVertical(true);
+			parentComposite.setLayout(new GridLayout());
+
+			TabFolder baseComposite = new TabFolder(parentComposite, SWT.TOP);
+
+			TabItem generalTab = new TabItem(baseComposite, SWT.None);
+			generalTab.setText(CUI_NEWCW_GENERAL_TAB_UI_); //$NON-NLS-1$
+
+			TabItem optionalTab = new TabItem(baseComposite, SWT.None);
+			optionalTab.setText(CUI_NEWCW_OPTIONAL_TAB_UI_); //$NON-NLS-1$
+
+			Composite generalComposite = new Composite(baseComposite, SWT.NULL);
+			GridLayout layout = new GridLayout();
+			layout.numColumns = 3;
+			generalComposite.setLayout(layout);
+			generalTab.setControl(generalComposite);
+
+			Composite optionalComposite = new Composite(baseComposite, SWT.NULL);
+			layout = new GridLayout();
+			layout.numColumns = 1;
+			optionalComposite.setLayout(layout);
+			optionalTab.setControl(optionalComposite);
+
+			GridData gd;
+
+			databaseLabel = new Label(generalComposite, SWT.NONE);
+			databaseLabel.setText(CUI_NEWCW_DATABASE_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			databaseLabel.setLayoutData(gd);
+
+			databaseText = new Text(generalComposite, SWT.SINGLE
+					| SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalAlignment = GridData.FILL;
+			gd.horizontalSpan = 2;
+			databaseText.setLayoutData(gd);
+			
+			databaseLocationLabel = new Label(generalComposite, SWT.NONE);
+			databaseLocationLabel.setText(CUI_NEWCW_DBLOCATION_LBL_UI_);
+
+			Composite textAndBrowseComposite = new Composite(generalComposite,
+					SWT.NULL);
+			GridLayout subCompositeLayout = new GridLayout(2, false);
+			subCompositeLayout.marginLeft = -5;
+			subCompositeLayout.marginRight = -5;
+			subCompositeLayout.marginTop = -5;
+			subCompositeLayout.marginBottom = -5;
+			textAndBrowseComposite.setLayout(subCompositeLayout);
+			gd = new GridData(GridData.FILL_HORIZONTAL);
+			gd.horizontalSpan = 2;
+			textAndBrowseComposite.setLayoutData(gd);
+
+			databaseLocationText = new Combo(textAndBrowseComposite,
+					SWT.SINGLE | SWT.BORDER);
+			databaseLocationText.setEnabled(!isReadOnly);
+			gd = new GridData(GridData.FILL_HORIZONTAL);
+			databaseLocationText.setLayoutData(gd);
+
+			browseDatabaseLocation = new Button(textAndBrowseComposite,
+					SWT.PUSH);
+			browseDatabaseLocation.setEnabled(!isReadOnly);
+			browseDatabaseLocation.setText(CUI_NEWCW_DBBROWSE_BTN_UI_);
+			browseDatabaseLocation.setLayoutData(new GridData(
+					GridData.HORIZONTAL_ALIGN_END));
+			browseDatabaseLocation.addListener(SWT.Selection, new Listener() {
+
+				public void handleEvent(Event event) {
+					HSQLDBDriverUIContributor.this.browseForDBFolder();
+				}
+
+			});
+			usernameLabel = new Label(generalComposite, SWT.NONE);
+			usernameLabel.setText(CUI_NEWCW_USERNAME_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			usernameLabel.setLayoutData(gd);
+
+			usernameText = new Text(generalComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			usernameText.setLayoutData(gd);
+
+			passwordLabel = new Label(generalComposite, SWT.NONE);
+			passwordLabel.setText(CUI_NEWCW_PASSWORD_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			passwordLabel.setLayoutData(gd);
+
+			passwordText = new Text(generalComposite, SWT.SINGLE | SWT.BORDER
+					| SWT.PASSWORD | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			passwordText.setLayoutData(gd);
+
+			this.savePasswordButton = new Button(generalComposite, SWT.CHECK);
+			this.savePasswordButton.setText(CUI_NEWCW_SAVE_PASSWORD_LBL_UI_); //$NON-NLS-1$
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 3;
+			gd.grabExcessHorizontalSpace = true;
+			savePasswordButton.setLayoutData(gd);
+
+			urlLabel = new Label(generalComposite, SWT.NONE);
+			urlLabel.setText(CUI_NEWCW_CONNECTIONURL_LBL_UI_);
+
+			urlText = new Text(generalComposite, SWT.SINGLE | SWT.BORDER
+					| SWT.READ_ONLY);
+			gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+			gd.horizontalSpan = 2;
+			urlText.setLayoutData(gd);
+			
+			Label optionalPropertiesLabel = new Label(optionalComposite,
+					SWT.NULL);
+			GridData gdata = new GridData(GridData.FILL_HORIZONTAL);
+			gdata.horizontalSpan = 2;
+			optionalPropertiesLabel.setLayoutData(gdata);
+			optionalPropertiesLabel
+					.setText(CUI_NEWCW_OPTIONAL_PROPERTIES_LBL_UI_); //$NON-NLS-1$
+
+			optionalConnectionProperties = new DelimitedStringList(
+					optionalComposite, SWT.NONE, isReadOnly);
+			gdata = new GridData(GridData.FILL_HORIZONTAL);
+			gdata.horizontalSpan = 2;
+			optionalConnectionProperties.setLayoutData(gdata);
+
+			parentComposite.setContent(baseComposite);
+			parentComposite.setMinSize(baseComposite.computeSize(SWT.DEFAULT,
+					SWT.DEFAULT));
+
+			initialize();
+		}
+
+		return parentComposite;
+	}
+
+	private void initialize() {
+		updateURL();
+		addListeners();
+	}
+
+	public List getSummaryData() {
+		List summaryData = new ArrayList();
+		String driverID = this.properties
+				.getProperty(ConnectionProfileConstants.PROP_DRIVER_DEFINITION_ID);
+		DriverInstance driverInstance = DriverManager.getInstance()
+				.getDriverInstanceByID(driverID);
+
+		summaryData.add(new String[] {
+				CUI_NEWCW_DRIVER_NAME_SUMMARY_DATA_TEXT_, //$NON-NLS-1$
+				driverInstance.getName() });
+		summaryData.add(new String[] {
+				CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_,
+				this.databaseText.getText().trim() });	
+		summaryData.add(new String[] {
+				CUI_NEWCW_DATABASE_LOCATION_SUMMARY_DATA_TEXT_,
+				this.databaseLocationText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_,
+				this.usernameText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_URL_SUMMARY_DATA_TEXT_,
+				this.urlText.getText().trim() });
+		summaryData
+				.add(new String[] {
+						CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_,
+						savePasswordButton.getSelection() ? CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_
+								: CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ });
+		summaryData.add(new String[] {
+				CUI_NEWCW_OPTIONAL_CONNECTION_PROPERTIES_SUMMARY_DATA_TEXT_, //$NON-NLS-1$
+				optionalConnectionProperties.getSelection() });
+		return summaryData;
+	}
+
+	public void loadProperties() {
+		removeListeners();
+		HSQLDBJDBCURL url = new HSQLDBJDBCURL(this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID));
+		databaseLocationText.setText(url.getNode());
+		
+		String databaseName = this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.DATABASE_NAME_PROP_ID);
+		if (databaseName != null) {
+			databaseText.setText(databaseName);
+		}
+		String username = this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID);
+		if (username != null) {
+			usernameText.setText(username);
+		}
+		String password = this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID);
+		if (password != null) {
+			passwordText.setText(password);
+		}
+		String savePassword = this.properties
+				.getProperty(IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID);
+		if ((savePassword != null)
+				&& Boolean.valueOf(savePassword) == Boolean.TRUE) {
+			savePasswordButton.setSelection(true);
+		}
+
+		String connectionProperties = this.properties
+				.getProperty(IJDBCConnectionProfileConstants.CONNECTION_PROPERTIES_PROP_ID);
+		if (connectionProperties != null) {
+			this.optionalConnectionProperties
+					.setSelection(connectionProperties);
+		}
+		updateURL();
+		addListeners();
+		setConnectionInformation();
+	}
+
+	public void setDialogPage(DialogPage parentPage) {
+		this.parentPage = parentPage;
+	}
+
+	public void setConnectionInformation() {
+		properties.setProperty(
+				IJDBCDriverDefinitionConstants.DATABASE_NAME_PROP_ID,
+				this.databaseText.getText().trim());
+		properties.setProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID,
+				this.passwordText.getText());
+		properties.setProperty(
+				IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID, String
+						.valueOf(savePasswordButton.getSelection()));
+		properties.setProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID,
+				this.usernameText.getText());
+		properties.setProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID,
+				this.urlText.getText().trim());
+		properties.setProperty(
+				IJDBCConnectionProfileConstants.CONNECTION_PROPERTIES_PROP_ID,
+				this.optionalConnectionProperties.getSelection());
+		this.contributorInformation.setProperties(properties);
+	}
+
+	public void setDriverUIContributorInformation(
+			IDriverUIContributorInformation contributorInformation) {
+		this.contributorInformation = contributorInformation;
+		this.properties = contributorInformation.getProperties();
+	}
+
+	public void handleEvent(Event event) {
+		if (isReadOnly){
+			if (event.widget == savePasswordButton){
+				savePasswordButton.setSelection(!savePasswordButton.getSelection());
+			}	
+		} else {
+			updateURL();
+			setConnectionInformation();
+		}
+	}
+
+	public void addListeners() {
+		databaseText.addListener(SWT.Modify, this);
+		databaseLocationText.addListener(SWT.Modify, this);
+		browseDatabaseLocation.addListener(SWT.Selection, this);
+		usernameText.addListener(SWT.Modify, this);
+		passwordText.addListener(SWT.Modify, this);
+		savePasswordButton.addListener(SWT.Selection, this);
+		optionalConnectionProperties.addModifyListener(this);
+	}
+
+	protected void removeListeners() {
+		databaseText.removeListener(SWT.Modify, this);
+		databaseLocationText.removeListener(SWT.Modify, this);
+		browseDatabaseLocation.removeListener(SWT.Selection, this);
+		usernameText.removeListener(SWT.Modify, this);
+		passwordText.removeListener(SWT.Modify, this);
+		savePasswordButton.removeListener(SWT.Selection, this);
+		optionalConnectionProperties.removeModifyListener(this);
+	}
+
+	protected void updateURL() {
+		String url = "jdbc:hsqldb:" + databaseLocationText.getText(); //$NON-NLS-1$
+		urlText.setText(url);
+	}
+
+	protected class HSQLDBJDBCURL {
+		protected String subprotocol = ""; //$NON-NLS-1$
+
+		protected String node = ""; //$NON-NLS-1$
+
+		protected String properties = ""; //$NON-NLS-1$
+
+		/**
+		 * @param url
+		 */
+		public HSQLDBJDBCURL(String url) {
+			parseURL(url);
+		}
+
+		/**
+		 * @return Returns the node.
+		 */
+		public String getNode() {
+			return node;
+		}
+
+		/**
+		 * @return Returns the subprotocol.
+		 */
+		public String getSubprotocol() {
+			return subprotocol;
+		}
+
+		protected void parseURL(String url) {
+			try {
+				String remainingURL = url.substring(url.indexOf(':') + 1);
+				this.subprotocol = remainingURL.substring(0, remainingURL
+						.indexOf(':'));
+				remainingURL = remainingURL
+						.substring(remainingURL.indexOf(':') + 1);
+				if (remainingURL.indexOf(';') > -1) {
+					this.node = remainingURL.substring(0, remainingURL
+							.indexOf(';'));
+					remainingURL = remainingURL.substring(remainingURL
+							.indexOf(';') + 1);
+					this.properties = remainingURL;
+				} else {
+					this.node = remainingURL;
+				}
+			} catch (Exception e) {
+			}
+		}
+
+		/**
+		 * @return Returns the properties.
+		 */
+		public String getProperties() {
+			return properties;
+		}
+	}
+
+	/**
+	 * Browse for the database folder
+	 */
+	private void browseForDBFolder() {
+		DirectoryDialog dialog = new DirectoryDialog(databaseLocationText
+				.getShell());
+		dialog.setText(CUI_NEWCW_FILE_BROWSER_TITLE_TEXT_); //$NON-NLS-1$
+		dialog.setMessage(CUI_NEWCW_FILE_BROWSER_MESSAGE_TEXT_); //$NON-NLS-1$
+
+		String dirName = databaseLocationText.getText();
+
+		File path = new File(dirName);
+		if (path.exists()) {
+			dialog.setFilterPath(new Path(dirName).toOSString());
+		}
+
+		String selectedDirectory = dialog.open();
+		if (selectedDirectory != null) {
+			databaseLocationText.setText(selectedDirectory);
+		}
+	}
+
+	public void modifyText(ModifyEvent e) {
+		handleEvent(new Event());
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb.ui/src/org/eclipse/datatools/enablement/hsqldb/ui/messages.properties b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/src/org/eclipse/datatools/enablement/hsqldb/ui/messages.properties
new file mode 100644
index 0000000..c66351b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb.ui/src/org/eclipse/datatools/enablement/hsqldb/ui/messages.properties
@@ -0,0 +1,35 @@
+NewHSQLDBConnectionProfileWizard.HSQLDBWizardTitle=HSQLDB Database
+
+HSQLDBProfileDetailsWizardPage.title = Specify a Driver and Connection Details
+HSQLDBProfileDetailsWizardPage.msg = Select a driver from the drop-down and provide login details for the connection.
+HSQLDBProfileDetailsWizardPage.0=Database location:
+HSQLDBProfileDetailsWizardPage.1=Browse...
+HSQLDBProfileDetailsWizardPage.2=Create database (if required)
+HSQLDBProfileDetailsWizardPage.3=Upgrade database to current version
+HSQLDBProfileDetailsWizardPage.driverCombo.label = Select a driver from the drop-down:
+HSQLDBProfileDetailsWizardPage.databaseName.label = Database:
+HSQLDBProfileDetailsWizardPage.url.label = URL:
+HSQLDBProfileDetailsWizardPage.PingButton=Test connection
+HSQLDBProfileDetailsWizardPage.userName.label = User name:
+HSQLDBProfileDetailsWizardPage.password.label = Password:
+HSQLDBProfileDetailsWizardPage.persistpassword.label = Save Password
+HSQLDBProfileDetailsWizardPage.optionalProps.label = Optional properties:
+HSQLDBProfileDetailsWizardPage.summary.driverName.label = Driver name
+HSQLDBProfileDetailsWizardPage.summary.connProps.label = Connection properties
+HSQLDBProfileDetailsWizardPage.summary.userName.label = User name
+HSQLDBProfileDetailsWizardPage.summary.password.label = Password
+HSQLDBProfileDetailsWizardPage.summary.url.label = URL
+HSQLDBProfileDetailsWizardPage.summary.database.label = Database
+HSQLDBProfileDetailsWizardPage.summary.true = true
+HSQLDBProfileDetailsWizardPage.summary.false = false
+HSQLDBProfileDetailsWizardPage.summary.databaselocation.label = Database location
+HSQLDBProfileDetailsWizardPage.summary.persistpassword.label = Save password
+HSQLDBProfileDetailsWizardPage.FileDialog.title.filebrowse = Browse for Database Folder
+HSQLDBProfileDetailsWizardPage.FileDialog.msg.filebrowse = Select the folder that corresponds to your HSQLDB database.
+HSQLDBProfileDetailsWizardPage.general.tab = General
+HSQLDBProfileDetailsWizardPage.optional.tab = Optional
+HSQLDBProfileDetailsWizardPage.database.validation.message = Enter a database name.
+HSQLDBProfileDetailsWizardPage.databaselocation.validation.message = Enter a database location.
+
+
+
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb/.classpath b/plugins/org.eclipse.datatools.enablement.hsqldb/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb/.gitignore b/plugins/org.eclipse.datatools.enablement.hsqldb/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb/.project b/plugins/org.eclipse.datatools.enablement.hsqldb/.project
new file mode 100644
index 0000000..ea5f712
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.hsqldb</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.enablement.hsqldb/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..73f4382
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Fri Apr 13 14:14:14 PDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.4
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.enablement.hsqldb/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..03f765b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb/META-INF/MANIFEST.MF
@@ -0,0 +1,21 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: org.eclipse.datatools.enablement.hsqldb;singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-Vendor: %Bundle-Vendor
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.datatools.connectivity,
+ org.eclipse.datatools.connectivity.sqm.core,
+ org.eclipse.datatools.modelbase.sql,
+ org.eclipse.datatools.modelbase.dbdefinition,
+ org.eclipse.datatools.connectivity.db.generic,
+ org.eclipse.emf.ecore.xmi
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.datatools.enablement.hsqldb.catalog,
+ org.eclipse.datatools.enablement.hsqldb.connection,
+ org.eclipse.datatools.enablement.hsqldb.internal,
+ org.eclipse.datatools.enablement.hsqldb.ui
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb/about.html b/plugins/org.eclipse.datatools.enablement.hsqldb/about.html
new file mode 100644
index 0000000..129db9d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb/build.properties b/plugins/org.eclipse.datatools.enablement.hsqldb/build.properties
new file mode 100644
index 0000000..b0c4593
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb/build.properties
@@ -0,0 +1,19 @@
+source.. = src/
+output.. = bin/
+bin.includes = plugin.xml,\
+               plugin.properties,\
+               about.html,\
+               META-INF/,\
+               .,\
+               icons/
+jars.compile.order = .
+output.. = bin/
+source.. = src/
+src.dir			 = src/
+plugin.version =	1.0.0.200706071
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
+               
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb/icons/jdbc_16.gif b/plugins/org.eclipse.datatools.enablement.hsqldb/icons/jdbc_16.gif
new file mode 100644
index 0000000..ef7809c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb/icons/jdbc_16.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb/plugin.properties b/plugins/org.eclipse.datatools.enablement.hsqldb/plugin.properties
new file mode 100644
index 0000000..3921f95
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb/plugin.properties
@@ -0,0 +1,22 @@
+Bundle-Vendor = Eclipse Data Tools Platform
+Bundle-Name = Eclipse Data Tools Platform HSQLDB Enablement Plug-in
+
+navigator.content.name = HSQLDB Profile Content Extension
+
+connection.factory = HSQLDB Connection Factory
+connection.profile = HSQLDB Connection Profile
+
+driver.category.name = HSQLDB
+driver.category.description = HSQLDB JDBC Drivers
+driver.version.category.name = 1.8
+driver.version.category.description = HSQLDB JDBC Drivers for Version 1.8
+driver.name = HSQLDB JDBC Driver
+driver.description = JDBC driver for HSQLDB
+
+DRIVER_CLASS_PROPERTY_NAME=Driver Class
+VENDOR_PROPERTY_NAME=Vendor
+VERSION_PROPERTY_NAME=Version
+DATABASE_NAME_PROPERTY_NAME=Database Name
+CONNECTION_URL_PROPERTY_NAME=Connection URL
+USER_ID_PROPERTY_NAME=User ID
+
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb/plugin.xml b/plugins/org.eclipse.datatools.enablement.hsqldb/plugin.xml
new file mode 100644
index 0000000..3bfb26d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb/plugin.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension
+         point="org.eclipse.datatools.connectivity.driverExtension">
+      <category
+            description="%driver.category.description"
+            id="org.eclipse.datatools.enablement.hsqldb.driver.category"
+            name="%driver.category.name"
+            parentCategory="org.eclipse.datatools.connectivity.db.driverCategory"/>
+      <category
+            description="%driver.version.category.description"
+            id="org.eclipse.datatools.enablement.hsqldb.1_8.category"
+            name="%driver.version.category.name"
+            parentCategory="org.eclipse.datatools.enablement.hsqldb.driver.category"/>
+      <driverTemplate
+            createDefault="false"
+            description="%driver.description"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.enablement.hsqldb.1_8.driver"
+            jarList="hsqldb.jar"
+            name="%driver.name"
+            parentCategory="org.eclipse.datatools.enablement.hsqldb.1_8.category">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%DRIVER_CLASS_PROPERTY_NAME"
+                  value="org.hsqldb.jdbcDriver"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%VENDOR_PROPERTY_NAME"
+                  value="HSQLDB"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%VERSION_PROPERTY_NAME"
+                  value="1.8"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%DATABASE_NAME_PROPERTY_NAME"
+                  value="SAMPLE"
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%CONNECTION_URL_PROPERTY_NAME"
+                  value="jdbc:hsqldb:MyDB"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%USER_ID_PROPERTY_NAME"
+                  value="sa"
+                  required="false"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+   </extension>
+
+   <extension
+         point="org.eclipse.datatools.connectivity.connectionProfile">
+      <connectionFactory
+            class="org.eclipse.datatools.enablement.hsqldb.connection.HSQLDBJDBCConnectionFactory"
+            id="java.sql.Connection"
+            name="%connection.factory"
+            profile="org.eclipse.datatools.enablement.hsqldb.connectionProfile"/>
+      <connectionProfile
+            category="org.eclipse.datatools.connectivity.db.category"
+            icon="icons/jdbc_16.gif"
+            id="org.eclipse.datatools.enablement.hsqldb.connectionProfile"
+            name="%connection.profile"
+            pingFactory="org.eclipse.datatools.enablement.hsqldb.connection.HSQLDBJDBCConnectionFactory"/>
+   </extension>
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.mappings">
+      <providerIDtoDriverCategoryID
+            driverCategoryID="org.eclipse.datatools.enablement.hsqldb.driver.category"
+            providerID="org.eclipse.datatools.enablement.hsqldb.connectionProfile">
+      </providerIDtoDriverCategoryID>
+   </extension>
+
+<!--
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.catalog">
+      <overrideLoader
+            provider="org.eclipse.datatools.enablement.hsqldb.catalog.HSQLDBSchemaLoader"
+            eclass="org.eclipse.datatools.modelbase.sql.schema.Schema"
+            product="HSQLDB"
+            version="1.8"/>
+   </extension>
+-->
+</plugin>
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb/src/org/eclipse/datatools/enablement/hsqldb/catalog/HSQLDBCatalogSchema.java b/plugins/org.eclipse.datatools.enablement.hsqldb/src/org/eclipse/datatools/enablement/hsqldb/catalog/HSQLDBCatalogSchema.java
new file mode 100644
index 0000000..526bc97
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb/src/org/eclipse/datatools/enablement/hsqldb/catalog/HSQLDBCatalogSchema.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Brian Fitzpatrick - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.hsqldb.catalog;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCSchema;
+
+/**
+ * @author brianf
+ *
+ */
+public class HSQLDBCatalogSchema extends JDBCSchema {
+
+	private static final long serialVersionUID = -3791642228201292278L;
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb/src/org/eclipse/datatools/enablement/hsqldb/catalog/HSQLDBSchemaLoader.java b/plugins/org.eclipse.datatools.enablement.hsqldb/src/org/eclipse/datatools/enablement/hsqldb/catalog/HSQLDBSchemaLoader.java
new file mode 100644
index 0000000..4c4546d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb/src/org/eclipse/datatools/enablement/hsqldb/catalog/HSQLDBSchemaLoader.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Brian Fitzpatrick - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.hsqldb.catalog;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.loader.IConnectionFilterProvider;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCSchemaLoader;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+
+/**
+ * @author brianf
+ *
+ */
+public class HSQLDBSchemaLoader extends JDBCSchemaLoader {
+
+	public HSQLDBSchemaLoader() {
+		super(null);
+	}
+	
+	/**
+	 * @param catalogObject
+	 */
+	public HSQLDBSchemaLoader(ICatalogObject catalogObject) {
+		super(catalogObject);
+	}
+
+	/**
+	 * @param catalogObject
+	 * @param connectionFilterProvider
+	 */
+	public HSQLDBSchemaLoader(ICatalogObject catalogObject,
+			IConnectionFilterProvider connectionFilterProvider) {
+		super(catalogObject, connectionFilterProvider);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCSchemaLoader#createSchema()
+	 */
+	protected Schema createSchema() {
+		return new HSQLDBCatalogSchema();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb/src/org/eclipse/datatools/enablement/hsqldb/connection/HSQLDBJDBCConnection.java b/plugins/org.eclipse.datatools.enablement.hsqldb/src/org/eclipse/datatools/enablement/hsqldb/connection/HSQLDBJDBCConnection.java
new file mode 100644
index 0000000..509e307
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb/src/org/eclipse/datatools/enablement/hsqldb/connection/HSQLDBJDBCConnection.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Brian Fitzpatrick - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.hsqldb.connection;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.db.generic.JDBCConnection;
+
+/**
+ * @author brianf
+ *
+ */
+public class HSQLDBJDBCConnection extends JDBCConnection {
+
+	/**
+	 * @param profile
+	 * @param factoryClass
+	 */
+	public HSQLDBJDBCConnection(IConnectionProfile profile,
+										Class factoryClass) {
+		super(profile, factoryClass);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb/src/org/eclipse/datatools/enablement/hsqldb/connection/HSQLDBJDBCConnectionFactory.java b/plugins/org.eclipse.datatools.enablement.hsqldb/src/org/eclipse/datatools/enablement/hsqldb/connection/HSQLDBJDBCConnectionFactory.java
new file mode 100644
index 0000000..89ee27d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb/src/org/eclipse/datatools/enablement/hsqldb/connection/HSQLDBJDBCConnectionFactory.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Brian Fitzpatrick - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.hsqldb.connection;
+
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.db.generic.JDBCConnectionFactory;
+
+/**
+ * @author brianf
+ *
+ */
+public class HSQLDBJDBCConnectionFactory extends JDBCConnectionFactory {
+
+	/**
+	 * 
+	 */
+	public HSQLDBJDBCConnectionFactory() {
+		super();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.db.generic.JDBCConnectionFactory#createConnection(org.eclipse.datatools.connectivity.IConnectionProfile)
+	 */
+	public IConnection createConnection(IConnectionProfile profile) {
+		HSQLDBJDBCConnection connection = new HSQLDBJDBCConnection(profile, getClass());
+		connection.open();
+		return connection;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb/src/org/eclipse/datatools/enablement/hsqldb/internal/HSQLDBDBDefinitionWrite.java b/plugins/org.eclipse.datatools.enablement.hsqldb/src/org/eclipse/datatools/enablement/hsqldb/internal/HSQLDBDBDefinitionWrite.java
new file mode 100644
index 0000000..df416e3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb/src/org/eclipse/datatools/enablement/hsqldb/internal/HSQLDBDBDefinitionWrite.java
@@ -0,0 +1,349 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Brian Fitzpatrick - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.hsqldb.internal;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.datatools.modelbase.dbdefinition.CheckOption;
+import org.eclipse.datatools.modelbase.dbdefinition.ColumnDefinition;
+import org.eclipse.datatools.modelbase.dbdefinition.ConstraintDefinition;
+import org.eclipse.datatools.modelbase.dbdefinition.DatabaseDefinitionFactory;
+import org.eclipse.datatools.modelbase.dbdefinition.DatabaseVendorDefinition;
+import org.eclipse.datatools.modelbase.dbdefinition.ParentDeleteDRIRuleType;
+import org.eclipse.datatools.modelbase.dbdefinition.ParentUpdateDRIRuleType;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.datatypes.PrimitiveType;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.xmi.XMIResource;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
+
+/**
+ * @author brianf
+ *
+ */
+public class HSQLDBDBDefinitionWrite {
+
+	/**
+	 * @param arg
+	 */
+	public static void main(String[] arg) {
+			URI uri = URI.createFileURI("C:\\temp\\HSQLDB_1.8.xmi"); //$NON-NLS-1$
+			Resource rf = new XMIResourceImpl(uri);
+			
+			// Database vendor definitions
+			DatabaseVendorDefinition databaseVendorDefinition = DatabaseDefinitionFactory.eINSTANCE.createDatabaseVendorDefinition();
+			databaseVendorDefinition.setVendor("HSQLDB"); //$NON-NLS-1$
+			databaseVendorDefinition.setVersion("1.8"); //$NON-NLS-1$
+			databaseVendorDefinition.setViewTriggerSupported(false);
+			databaseVendorDefinition.setStoredProcedureSupported(false);
+			databaseVendorDefinition.setMaximumIdentifierLength(64);
+			databaseVendorDefinition.setMaximumCommentLength(64);
+			databaseVendorDefinition.setSequenceSupported(true);
+			databaseVendorDefinition.setMQTSupported(false);
+			databaseVendorDefinition.setAliasSupported(true);
+			
+			ColumnDefinition columnDefinition = DatabaseDefinitionFactory.eINSTANCE.createColumnDefinition();
+			columnDefinition.setIdentitySupported(true);
+			columnDefinition.setComputedSupported(false);
+			columnDefinition.setIdentityStartValueSupported(true);
+			columnDefinition.setIdentityIncrementSupported(true);
+			columnDefinition.setIdentityMaximumSupported(true);
+			columnDefinition.setIdentityMinimumSupported(true);
+			columnDefinition.setIdentityCycleSupported(true);
+			databaseVendorDefinition.setColumnDefinition(columnDefinition);
+			
+			ConstraintDefinition constraintDefinition = DatabaseDefinitionFactory.eINSTANCE.createConstraintDefinition();
+			constraintDefinition.setClusteredPrimaryKeySupported(true);
+			constraintDefinition.setClusteredUniqueConstraintSupported(true);
+			constraintDefinition.getParentDeleteDRIRuleType().add(ParentDeleteDRIRuleType.RESTRICT_LITERAL);
+			constraintDefinition.getParentDeleteDRIRuleType().add(ParentDeleteDRIRuleType.CASCADE_LITERAL);
+			constraintDefinition.getParentDeleteDRIRuleType().add(ParentDeleteDRIRuleType.SET_NULL_LITERAL);
+			constraintDefinition.getParentDeleteDRIRuleType().add(ParentDeleteDRIRuleType.NO_ACTION_LITERAL);
+			constraintDefinition.getParentUpdateDRIRuleType().add(ParentUpdateDRIRuleType.RESTRICT_LITERAL);
+			constraintDefinition.getParentUpdateDRIRuleType().add(ParentUpdateDRIRuleType.NO_ACTION_LITERAL);
+			constraintDefinition.getCheckOption().add(CheckOption.NONE_LITERAL);
+			constraintDefinition.getCheckOption().add(CheckOption.LOCAL_LITERAL);
+			constraintDefinition.getCheckOption().add(CheckOption.CASCADE_LITERAL);
+			databaseVendorDefinition.setConstraintDefinition(constraintDefinition);
+			
+			
+			// Primitive type definitions
+			
+			// INTEGER
+			PredefinedDataTypeDefinition integerDataTypeDefinition = DatabaseDefinitionFactory.eINSTANCE.createPredefinedDataTypeDefinition();
+			integerDataTypeDefinition.setPrimitiveType(PrimitiveType.INTEGER_LITERAL);
+			integerDataTypeDefinition.getName().add("INTEGER"); //$NON-NLS-1$
+			integerDataTypeDefinition.getName().add("INT"); //$NON-NLS-1$
+			integerDataTypeDefinition.setKeyConstraintSupported(true);
+			integerDataTypeDefinition.setIdentitySupported(true);
+			integerDataTypeDefinition.getDefaultValueTypes().add("NULL"); //$NON-NLS-1$
+			integerDataTypeDefinition.setJdbcEnumType(java.sql.Types.INTEGER);
+			integerDataTypeDefinition.setJavaClassName("int"); //$NON-NLS-1$
+			databaseVendorDefinition.getPredefinedDataTypeDefinitions().add(integerDataTypeDefinition);
+			((XMIResource)rf).setID(integerDataTypeDefinition, PrimitiveType.INTEGER_LITERAL+"_1"); //$NON-NLS-1$
+
+			// DOUBLE
+			PredefinedDataTypeDefinition doublePrecisionDataTypeDefinition = DatabaseDefinitionFactory.eINSTANCE.createPredefinedDataTypeDefinition();
+			doublePrecisionDataTypeDefinition.setPrimitiveType(PrimitiveType.DOUBLE_PRECISION_LITERAL);
+			doublePrecisionDataTypeDefinition.getName().add("DOUBLE"); //$NON-NLS-1$
+			doublePrecisionDataTypeDefinition.getName().add("DOUBLE PRECISION"); //$NON-NLS-1$
+			doublePrecisionDataTypeDefinition.getName().add("FLOAT"); //$NON-NLS-1$
+			doublePrecisionDataTypeDefinition.setKeyConstraintSupported(true);
+			doublePrecisionDataTypeDefinition.getDefaultValueTypes().add("NULL"); //$NON-NLS-1$
+			doublePrecisionDataTypeDefinition.setJdbcEnumType(java.sql.Types.DOUBLE);
+			doublePrecisionDataTypeDefinition.setJavaClassName("double"); //$NON-NLS-1$
+			databaseVendorDefinition.getPredefinedDataTypeDefinitions().add(doublePrecisionDataTypeDefinition);
+			((XMIResource)rf).setID(doublePrecisionDataTypeDefinition, PrimitiveType.DOUBLE_PRECISION_LITERAL+"_1"); //$NON-NLS-1$
+					
+			// VARCHAR
+			PredefinedDataTypeDefinition varcharDataTypeDefinition = DatabaseDefinitionFactory.eINSTANCE.createPredefinedDataTypeDefinition();
+			varcharDataTypeDefinition.setPrimitiveType(PrimitiveType.CHARACTER_LITERAL);
+			varcharDataTypeDefinition.getName().add("VARCHAR"); //$NON-NLS-1$
+			varcharDataTypeDefinition.setMaximumLength(Integer.MAX_VALUE);
+			varcharDataTypeDefinition.setKeyConstraintSupported(true);
+			varcharDataTypeDefinition.getDefaultValueTypes().add("NULL"); //$NON-NLS-1$
+			varcharDataTypeDefinition.setLengthSupported(true);
+			varcharDataTypeDefinition.setJdbcEnumType(java.sql.Types.VARCHAR);
+			varcharDataTypeDefinition.setJavaClassName("java.lang.String"); //$NON-NLS-1$
+			databaseVendorDefinition.getPredefinedDataTypeDefinitions().add(varcharDataTypeDefinition);
+			((XMIResource)rf).setID(varcharDataTypeDefinition, PrimitiveType.CHARACTER_LITERAL+"_2"); //$NON-NLS-1$
+
+			// VARCHAR IGNORECASE
+			PredefinedDataTypeDefinition varcharIgnoreCaseDataTypeDefinition = DatabaseDefinitionFactory.eINSTANCE.createPredefinedDataTypeDefinition();
+			varcharIgnoreCaseDataTypeDefinition.setPrimitiveType(PrimitiveType.CHARACTER_LITERAL);
+			varcharIgnoreCaseDataTypeDefinition.getName().add("VARCHAR_IGNORECASE"); //$NON-NLS-1$
+			varcharIgnoreCaseDataTypeDefinition.setMaximumLength(Integer.MAX_VALUE);
+			varcharIgnoreCaseDataTypeDefinition.setKeyConstraintSupported(true);
+			varcharIgnoreCaseDataTypeDefinition.getDefaultValueTypes().add("NULL"); //$NON-NLS-1$
+			varcharIgnoreCaseDataTypeDefinition.setLengthSupported(true);
+			varcharIgnoreCaseDataTypeDefinition.setJdbcEnumType(java.sql.Types.VARCHAR);
+			varcharIgnoreCaseDataTypeDefinition.setJavaClassName("java.lang.String"); //$NON-NLS-1$
+			databaseVendorDefinition.getPredefinedDataTypeDefinitions().add(varcharIgnoreCaseDataTypeDefinition);
+			((XMIResource)rf).setID(varcharIgnoreCaseDataTypeDefinition, PrimitiveType.CHARACTER_LITERAL+"_3"); //$NON-NLS-1$
+
+			// CHARACTER
+			PredefinedDataTypeDefinition characterDataTypeDefinition = DatabaseDefinitionFactory.eINSTANCE.createPredefinedDataTypeDefinition();
+			characterDataTypeDefinition.setPrimitiveType(PrimitiveType.CHARACTER_LITERAL);
+			characterDataTypeDefinition.getName().add("CHAR"); //$NON-NLS-1$
+			characterDataTypeDefinition.getName().add("CHARACTER"); //$NON-NLS-1$
+			characterDataTypeDefinition.setMaximumLength(Integer.MAX_VALUE);
+			characterDataTypeDefinition.setKeyConstraintSupported(true);
+			characterDataTypeDefinition.getDefaultValueTypes().add("NULL"); //$NON-NLS-1$
+			characterDataTypeDefinition.setLengthSupported(true);
+			characterDataTypeDefinition.setJdbcEnumType(java.sql.Types.CHAR);
+			characterDataTypeDefinition.setJavaClassName("java.lang.String"); //$NON-NLS-1$
+			databaseVendorDefinition.getPredefinedDataTypeDefinitions().add(characterDataTypeDefinition);
+			((XMIResource)rf).setID(characterDataTypeDefinition, PrimitiveType.CHARACTER_LITERAL+"_1"); //$NON-NLS-1$
+							
+			// LONGVARCHAR
+			PredefinedDataTypeDefinition longvarcharDataTypeDefinition = DatabaseDefinitionFactory.eINSTANCE.createPredefinedDataTypeDefinition();
+			longvarcharDataTypeDefinition.setPrimitiveType(PrimitiveType.CHARACTER_LITERAL);
+			longvarcharDataTypeDefinition.getName().add("LONGVARCHAR"); //$NON-NLS-1$
+			longvarcharDataTypeDefinition.setMaximumLength(Integer.MAX_VALUE);
+			longvarcharDataTypeDefinition.setKeyConstraintSupported(true);
+			longvarcharDataTypeDefinition.getDefaultValueTypes().add("NULL"); //$NON-NLS-1$
+			longvarcharDataTypeDefinition.setLengthSupported(true);
+			longvarcharDataTypeDefinition.setJdbcEnumType(java.sql.Types.LONGVARCHAR);
+			longvarcharDataTypeDefinition.setJavaClassName("java.lang.String"); //$NON-NLS-1$
+			databaseVendorDefinition.getPredefinedDataTypeDefinitions().add(longvarcharDataTypeDefinition);
+			((XMIResource)rf).setID(longvarcharDataTypeDefinition, PrimitiveType.CHARACTER_LITERAL+"_4"); //$NON-NLS-1$
+
+			// DATE
+			PredefinedDataTypeDefinition dateDataTypeDefinition = DatabaseDefinitionFactory.eINSTANCE.createPredefinedDataTypeDefinition();
+			dateDataTypeDefinition.setPrimitiveType(PrimitiveType.DATE_LITERAL);
+			dateDataTypeDefinition.getName().add("DATE"); //$NON-NLS-1$
+			dateDataTypeDefinition.setKeyConstraintSupported(true);
+			dateDataTypeDefinition.setIdentitySupported(true);
+			dateDataTypeDefinition.getDefaultValueTypes().add("NULL"); //$NON-NLS-1$
+			dateDataTypeDefinition.setJdbcEnumType(java.sql.Types.DATE);
+			dateDataTypeDefinition.setJavaClassName("java.sql.Date"); //$NON-NLS-1$
+			databaseVendorDefinition.getPredefinedDataTypeDefinitions().add(dateDataTypeDefinition);
+			((XMIResource)rf).setID(dateDataTypeDefinition, PrimitiveType.DATE_LITERAL+"_1"); //$NON-NLS-1$
+
+			// TIME
+			PredefinedDataTypeDefinition timeDataTypeDefinition = DatabaseDefinitionFactory.eINSTANCE.createPredefinedDataTypeDefinition();
+			timeDataTypeDefinition.setPrimitiveType(PrimitiveType.TIME_LITERAL);
+			timeDataTypeDefinition.getName().add("TIME"); //$NON-NLS-1$
+			timeDataTypeDefinition.setKeyConstraintSupported(true);
+			timeDataTypeDefinition.setIdentitySupported(true);
+			timeDataTypeDefinition.getDefaultValueTypes().add("NULL"); //$NON-NLS-1$
+			timeDataTypeDefinition.setJdbcEnumType(java.sql.Types.TIME);
+			timeDataTypeDefinition.setJavaClassName("java.sql.Time"); //$NON-NLS-1$
+			databaseVendorDefinition.getPredefinedDataTypeDefinitions().add(timeDataTypeDefinition);
+			((XMIResource)rf).setID(timeDataTypeDefinition, PrimitiveType.TIME_LITERAL+"_1"); //$NON-NLS-1$
+
+			// TIMESTAMP
+			PredefinedDataTypeDefinition timestampDataTypeDefinition = DatabaseDefinitionFactory.eINSTANCE.createPredefinedDataTypeDefinition();
+			timestampDataTypeDefinition.setPrimitiveType(PrimitiveType.TIMESTAMP_LITERAL);
+			timestampDataTypeDefinition.getName().add("TIMESTAMP"); //$NON-NLS-1$
+			timestampDataTypeDefinition.getName().add("DATETIME"); //$NON-NLS-1$
+			timestampDataTypeDefinition.setKeyConstraintSupported(true);
+			timestampDataTypeDefinition.setIdentitySupported(true);
+			timestampDataTypeDefinition.getDefaultValueTypes().add("NULL"); //$NON-NLS-1$
+			timestampDataTypeDefinition.setJdbcEnumType(java.sql.Types.TIMESTAMP);
+			timestampDataTypeDefinition.setJavaClassName("java.sql.Timestamp"); //$NON-NLS-1$
+			databaseVendorDefinition.getPredefinedDataTypeDefinitions().add(timestampDataTypeDefinition);
+			((XMIResource)rf).setID(timestampDataTypeDefinition, PrimitiveType.TIMESTAMP_LITERAL+"_1"); //$NON-NLS-1$
+
+			// DECIMAL
+			PredefinedDataTypeDefinition decimalDataTypeDefinition = DatabaseDefinitionFactory.eINSTANCE.createPredefinedDataTypeDefinition();
+			decimalDataTypeDefinition.setPrimitiveType(PrimitiveType.DECIMAL_LITERAL);
+			decimalDataTypeDefinition.getName().add("DECIMAL"); //$NON-NLS-1$
+			decimalDataTypeDefinition.setPrecisionSupported(true);
+			decimalDataTypeDefinition.setScaleSupported(true);
+			decimalDataTypeDefinition.setKeyConstraintSupported(true);
+			decimalDataTypeDefinition.setIdentitySupported(true);
+			decimalDataTypeDefinition.getDefaultValueTypes().add("NULL"); //$NON-NLS-1$
+			decimalDataTypeDefinition.setJdbcEnumType(java.sql.Types.DECIMAL);
+			decimalDataTypeDefinition.setJavaClassName("java.math.BigDecimal"); //$NON-NLS-1$
+			databaseVendorDefinition.getPredefinedDataTypeDefinitions().add(decimalDataTypeDefinition);
+			((XMIResource)rf).setID(decimalDataTypeDefinition, PrimitiveType.DECIMAL_LITERAL+"_1"); //$NON-NLS-1$
+				
+			// NUMERIC
+			PredefinedDataTypeDefinition numericDataTypeDefinition = DatabaseDefinitionFactory.eINSTANCE.createPredefinedDataTypeDefinition();
+			numericDataTypeDefinition.setPrimitiveType(PrimitiveType.NUMERIC_LITERAL);
+			numericDataTypeDefinition.getName().add("NUMERIC"); //$NON-NLS-1$
+			numericDataTypeDefinition.setKeyConstraintSupported(true);
+			numericDataTypeDefinition.setPrecisionSupported(true);
+			numericDataTypeDefinition.setScaleSupported(true);
+			numericDataTypeDefinition.getDefaultValueTypes().add("NULL"); //$NON-NLS-1$
+			numericDataTypeDefinition.setJdbcEnumType(java.sql.Types.NUMERIC);
+			numericDataTypeDefinition.setJavaClassName("java.math.BigDecimal"); //$NON-NLS-1$
+			databaseVendorDefinition.getPredefinedDataTypeDefinitions().add(numericDataTypeDefinition);
+			((XMIResource)rf).setID(numericDataTypeDefinition, PrimitiveType.NUMERIC_LITERAL+"_1"); //$NON-NLS-1$
+					
+			// BOOLEAN/BIT
+			PredefinedDataTypeDefinition booleanDataTypeDefinition = DatabaseDefinitionFactory.eINSTANCE.createPredefinedDataTypeDefinition();
+			booleanDataTypeDefinition.setPrimitiveType(PrimitiveType.BOOLEAN_LITERAL);
+			booleanDataTypeDefinition.getName().add("BOOLEAN"); //$NON-NLS-1$
+			booleanDataTypeDefinition.getName().add("BIT"); //$NON-NLS-1$
+			booleanDataTypeDefinition.setKeyConstraintSupported(true);
+			booleanDataTypeDefinition.setIdentitySupported(true);
+			booleanDataTypeDefinition.getDefaultValueTypes().add("NULL"); //$NON-NLS-1$
+			booleanDataTypeDefinition.setJdbcEnumType(java.sql.Types.BOOLEAN);
+			booleanDataTypeDefinition.setJavaClassName("boolean"); //$NON-NLS-1$
+			databaseVendorDefinition.getPredefinedDataTypeDefinitions().add(booleanDataTypeDefinition);
+			((XMIResource)rf).setID(booleanDataTypeDefinition, PrimitiveType.BOOLEAN_LITERAL+"_1"); //$NON-NLS-1$
+
+			// TINYINT
+			PredefinedDataTypeDefinition tinyintDataTypeDefinition = DatabaseDefinitionFactory.eINSTANCE.createPredefinedDataTypeDefinition();
+			tinyintDataTypeDefinition.setPrimitiveType(PrimitiveType.SMALLINT_LITERAL);
+			tinyintDataTypeDefinition.getName().add("TINYINT"); //$NON-NLS-1$
+			tinyintDataTypeDefinition.setKeyConstraintSupported(true);
+			tinyintDataTypeDefinition.setIdentitySupported(true);
+			tinyintDataTypeDefinition.getDefaultValueTypes().add("NULL"); //$NON-NLS-1$
+			tinyintDataTypeDefinition.setJdbcEnumType(java.sql.Types.TINYINT);
+			tinyintDataTypeDefinition.setJavaClassName("byte"); //$NON-NLS-1$
+			databaseVendorDefinition.getPredefinedDataTypeDefinitions().add(tinyintDataTypeDefinition);
+			((XMIResource)rf).setID(tinyintDataTypeDefinition, PrimitiveType.SMALLINT_LITERAL+"_2"); //$NON-NLS-1$
+
+			// SMALLINT
+			PredefinedDataTypeDefinition smallintDataTypeDefinition = DatabaseDefinitionFactory.eINSTANCE.createPredefinedDataTypeDefinition();
+			smallintDataTypeDefinition.setPrimitiveType(PrimitiveType.SMALLINT_LITERAL);
+			smallintDataTypeDefinition.getName().add("SMALLINT"); //$NON-NLS-1$
+			smallintDataTypeDefinition.setKeyConstraintSupported(true);
+			smallintDataTypeDefinition.setIdentitySupported(true);
+			smallintDataTypeDefinition.getDefaultValueTypes().add("NULL"); //$NON-NLS-1$
+			smallintDataTypeDefinition.setJdbcEnumType(java.sql.Types.SMALLINT);
+			smallintDataTypeDefinition.setJavaClassName("short"); //$NON-NLS-1$
+			databaseVendorDefinition.getPredefinedDataTypeDefinitions().add(smallintDataTypeDefinition);
+			((XMIResource)rf).setID(smallintDataTypeDefinition, PrimitiveType.SMALLINT_LITERAL+"_1"); //$NON-NLS-1$
+
+			// BIGINT
+			PredefinedDataTypeDefinition bigintDataTypeDefinition = DatabaseDefinitionFactory.eINSTANCE.createPredefinedDataTypeDefinition();
+			bigintDataTypeDefinition.setPrimitiveType(PrimitiveType.BIGINT_LITERAL);
+			bigintDataTypeDefinition.getName().add("BIGINT"); //$NON-NLS-1$
+			bigintDataTypeDefinition.setKeyConstraintSupported(true);
+			bigintDataTypeDefinition.setIdentitySupported(true);
+			bigintDataTypeDefinition.getDefaultValueTypes().add("NULL"); //$NON-NLS-1$
+			bigintDataTypeDefinition.setJdbcEnumType(java.sql.Types.BIGINT);
+			bigintDataTypeDefinition.setJavaClassName("long"); //$NON-NLS-1$
+			databaseVendorDefinition.getPredefinedDataTypeDefinitions().add(bigintDataTypeDefinition);
+			((XMIResource)rf).setID(bigintDataTypeDefinition, PrimitiveType.BIGINT_LITERAL+"_1"); //$NON-NLS-1$
+
+			// REAL
+			PredefinedDataTypeDefinition realDataTypeDefinition = DatabaseDefinitionFactory.eINSTANCE.createPredefinedDataTypeDefinition();
+			realDataTypeDefinition.setPrimitiveType(PrimitiveType.REAL_LITERAL);
+			realDataTypeDefinition.getName().add("REAL"); //$NON-NLS-1$
+			realDataTypeDefinition.setKeyConstraintSupported(true);
+			realDataTypeDefinition.getDefaultValueTypes().add("NULL"); //$NON-NLS-1$
+			realDataTypeDefinition.setJdbcEnumType(java.sql.Types.REAL);
+			realDataTypeDefinition.setJavaClassName("double"); //$NON-NLS-1$
+			databaseVendorDefinition.getPredefinedDataTypeDefinitions().add(realDataTypeDefinition);
+			((XMIResource)rf).setID(realDataTypeDefinition, PrimitiveType.REAL_LITERAL+"_1"); //$NON-NLS-1$
+
+			// BINARY
+			PredefinedDataTypeDefinition binaryDataTypeDefinition = DatabaseDefinitionFactory.eINSTANCE.createPredefinedDataTypeDefinition();
+			binaryDataTypeDefinition.setPrimitiveType(PrimitiveType.BINARY_LITERAL);
+			binaryDataTypeDefinition.getName().add("BINARY"); //$NON-NLS-1$
+			binaryDataTypeDefinition.setKeyConstraintSupported(true);
+			binaryDataTypeDefinition.setMaximumValue(Integer.MAX_VALUE);
+			binaryDataTypeDefinition.getDefaultValueTypes().add("NULL"); //$NON-NLS-1$
+			binaryDataTypeDefinition.setJdbcEnumType(java.sql.Types.BINARY);
+			binaryDataTypeDefinition.setJavaClassName("byte[]"); //$NON-NLS-1$
+			databaseVendorDefinition.getPredefinedDataTypeDefinitions().add(binaryDataTypeDefinition);
+			((XMIResource)rf).setID(binaryDataTypeDefinition, PrimitiveType.BINARY_LITERAL+"_1"); //$NON-NLS-1$
+
+			// VARBINARY
+			PredefinedDataTypeDefinition varbinaryDataTypeDefinition = DatabaseDefinitionFactory.eINSTANCE.createPredefinedDataTypeDefinition();
+			varbinaryDataTypeDefinition.setPrimitiveType(PrimitiveType.BINARY_VARYING_LITERAL);
+			varbinaryDataTypeDefinition.getName().add("VARBINARY"); //$NON-NLS-1$
+			varbinaryDataTypeDefinition.setKeyConstraintSupported(true);
+			varbinaryDataTypeDefinition.setMaximumValue(Integer.MAX_VALUE);
+			varbinaryDataTypeDefinition.getDefaultValueTypes().add("NULL"); //$NON-NLS-1$
+			varbinaryDataTypeDefinition.setJdbcEnumType(java.sql.Types.VARBINARY);
+			varbinaryDataTypeDefinition.setJavaClassName("byte[]"); //$NON-NLS-1$
+			databaseVendorDefinition.getPredefinedDataTypeDefinitions().add(varbinaryDataTypeDefinition);
+			((XMIResource)rf).setID(varbinaryDataTypeDefinition, PrimitiveType.BINARY_VARYING_LITERAL+"_1"); //$NON-NLS-1$
+
+			// LONGVARBINARY
+			PredefinedDataTypeDefinition longvarbinaryDataTypeDefinition = DatabaseDefinitionFactory.eINSTANCE.createPredefinedDataTypeDefinition();
+			longvarbinaryDataTypeDefinition.setPrimitiveType(PrimitiveType.BINARY_VARYING_LITERAL);
+			longvarbinaryDataTypeDefinition.getName().add("LONGVARBINARY"); //$NON-NLS-1$
+			longvarbinaryDataTypeDefinition.setKeyConstraintSupported(true);
+			longvarbinaryDataTypeDefinition.setMaximumValue(Integer.MAX_VALUE);
+			longvarbinaryDataTypeDefinition.getDefaultValueTypes().add("NULL"); //$NON-NLS-1$
+			longvarbinaryDataTypeDefinition.setJdbcEnumType(java.sql.Types.LONGVARBINARY);
+			longvarbinaryDataTypeDefinition.setJavaClassName("byte[]"); //$NON-NLS-1$
+			databaseVendorDefinition.getPredefinedDataTypeDefinitions().add(longvarbinaryDataTypeDefinition);
+			((XMIResource)rf).setID(longvarbinaryDataTypeDefinition, PrimitiveType.BINARY_VARYING_LITERAL+"_2"); //$NON-NLS-1$
+
+			// OTHER
+			PredefinedDataTypeDefinition otherDataTypeDefinition = DatabaseDefinitionFactory.eINSTANCE.createPredefinedDataTypeDefinition();
+			otherDataTypeDefinition.setPrimitiveType(PrimitiveType.BINARY_LARGE_OBJECT_LITERAL);
+			otherDataTypeDefinition.getName().add("OTHER"); //$NON-NLS-1$
+			otherDataTypeDefinition.getName().add("OBJECT"); //$NON-NLS-1$
+			otherDataTypeDefinition.setKeyConstraintSupported(true);
+			otherDataTypeDefinition.setMaximumValue(Integer.MAX_VALUE);
+			otherDataTypeDefinition.getDefaultValueTypes().add("NULL"); //$NON-NLS-1$
+			otherDataTypeDefinition.setJdbcEnumType(java.sql.Types.OTHER);
+			otherDataTypeDefinition.setJavaClassName("java.lang.Object"); //$NON-NLS-1$
+			databaseVendorDefinition.getPredefinedDataTypeDefinitions().add(otherDataTypeDefinition);
+			((XMIResource)rf).setID(otherDataTypeDefinition, PrimitiveType.BINARY_LARGE_OBJECT_LITERAL+"_1"); //$NON-NLS-1$
+
+			if (rf != null) {
+				EList resourceContents = rf.getContents();
+				resourceContents.add(databaseVendorDefinition);
+				try {
+					Map options = new HashMap();
+					options.put(XMIResource.OPTION_DECLARE_XML, Boolean.TRUE);
+					rf.save(options);
+				} catch (Exception e) {
+					e.printStackTrace();
+				}
+			}
+	}
+}
+
+
diff --git a/plugins/org.eclipse.datatools.enablement.hsqldb/src/org/eclipse/datatools/enablement/hsqldb/ui/IHSQLDBConnectionProfileConstants.java b/plugins/org.eclipse.datatools.enablement.hsqldb/src/org/eclipse/datatools/enablement/hsqldb/ui/IHSQLDBConnectionProfileConstants.java
new file mode 100644
index 0000000..b6466d8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.hsqldb/src/org/eclipse/datatools/enablement/hsqldb/ui/IHSQLDBConnectionProfileConstants.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Brian Fitzpatrick - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.hsqldb.ui;
+
+/**
+ * @author brianf
+ *
+ */
+public interface IHSQLDBConnectionProfileConstants {
+
+	public static final String HSQLDB_CATEGORY_ID = "org.eclipse.datatools.enablement.hsqldb.driver.category"; //$NON-NLS-1$
+	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition/.gitignore b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition/.gitignore
new file mode 100644
index 0000000..39ea2e1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition/.gitignore
@@ -0,0 +1,2 @@
+bin
+build.xml
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition/.project b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition/.project
new file mode 100644
index 0000000..65c0c78
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition/.project
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..5311ff7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition; singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition/about.html b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition/about.html
new file mode 100644
index 0000000..129db9d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition/build.properties b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition/build.properties
new file mode 100644
index 0000000..d59a9b8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition/build.properties
@@ -0,0 +1,21 @@
+###############################################################################
+# Copyright (c) 2001, 2004 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+bin.includes = plugin.xml,\
+               runtime/,\
+               plugin.properties,\
+               about.html,\
+               META-INF/
+plugin.version =	1.0.0.200706071
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition/plugin.properties b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition/plugin.properties
new file mode 100644
index 0000000..0165d49
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition/plugin.properties
@@ -0,0 +1,22 @@
+###############################################################################
+# Copyright (c) 2001, 2004 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+
+pluginName = DB2 UDB iSeries Database Definition Plug-in
+providerName = Eclipse Data Tools Platform
+
+V5R2ProductString = DB2 for i5/OS
+V5R2VersionString = V5R2
+
+V5R3ProductString = DB2 for i5/OS
+V5R3VersionString = V5R3
+
+V5R2Description = IBM DB2 UDB for iSeries Version 5 Release 2
+V5R3Description = IBM DB2 UDB for iSeries Version 5 Release 3
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition/plugin.xml b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition/plugin.xml
new file mode 100644
index 0000000..3f27b02
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition/plugin.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.databaseDefinition">
+      <definition
+            product="DB2 UDB iSeries"
+            version="V5R2"
+            description="%V5R2Description"
+            productDisplayString="%V5R2ProductString"
+            versionDisplayString="%V5R2VersionString"
+            file="runtime/vendors/DB2 UDB iSeries_5/DB2 UDB iSeries_5.xmi">
+      </definition>
+      <definition
+            product="DB2 UDB iSeries"
+            version="V5R3"
+            description="%V5R3Description"
+            productDisplayString="%V5R3ProductString"
+            versionDisplayString="%V5R3VersionString"
+            file="runtime/vendors/DB2 UDB iSeries_5R3/DB2 UDB iSeries_5R3.xmi">
+      </definition>
+
+   </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition/runtime/vendors/DB2 UDB iSeries_5/DB2 UDB iSeries_5.xmi b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition/runtime/vendors/DB2 UDB iSeries_5/DB2 UDB iSeries_5.xmi
new file mode 100644
index 0000000..0a7a751
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition/runtime/vendors/DB2 UDB iSeries_5/DB2 UDB iSeries_5.xmi
@@ -0,0 +1,790 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="DB2 UDB iSeries" version="5" maximumIdentifierLength="18" tablespacesSupported="false" maximumCommentLength="64" userDefinedTypeSupported="true" aliasSupported="true">
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="BIGINT" jdbcEnumType="-5">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIGINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="BYTE" defaultLength="1024" maximumLength="2147483647" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BLOB</name>
+    <name>BINARY LARGE OBJECT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_1" lengthSupported="true" defaultLength="1" maximumLength="16383" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>GRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_1" lengthSupported="true" defaultLength="32" maximumLength="16370" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARGRAPHIC</name>
+    <name>GRAPHIC VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_2" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARGRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="32766" primitiveType="CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR</name>
+    <name>CHARACTER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="BYTE" defaultLength="1024" maximumLength="2147483647" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CLOB</name>
+    <name>CHARACTER LARGE OBJECT</name>
+    <name>CHAR LARGE OBJECT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="DOUBLE_BYTE" defaultLength="1048576" maximumLength="1073741823" primitiveType="NATIONAL_CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DBCLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" keyConstraintSupported="true" defaultLength="32" maximumLength="32740" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR</name>
+    <name>CHARACTER VARYING</name>
+    <name>CHAR VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_2" primitiveType="CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATALINK_1" lengthSupported="true" defaultLength="200" maximumLength="32717" primitiveType="DATALINK" jdbcEnumType="70" javaClassName="java.net.URL">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATALINK</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>CURRENT_DATE</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" scaleSupported="true" precisionSupported="true" defaultPrecision="5" defaultScale="0" maximumPrecision="31" identitySupported="true" keyConstraintSupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">>
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE</name>
+    <name>DOUBLE PRECISION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" precisionSupported="true" keyConstraintSupported="true" primitiveType="FLOAT" defaultPrecision="53" maximumPrecision="53" cutoffPrecision="25" jdbcEnumType="6" javaClassName="double">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INTEGER</name>
+    <name>INT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTERVAL_1" keyConstraintSupported="true" primitiveType="INTERVAL">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INTERVAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" scaleSupported="true" precisionSupported="true" defaultPrecision="5" defaultScale="0"  maximumPrecision="31" identitySupported="true" keyConstraintSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+    <name>NUM</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_2" keyConstraintSupported="true" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>ROWID</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIME_1" keyConstraintSupported="true" primitiveType="TIME" jdbcEnumType="92" javaClassName="java.sql.Time">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>CURRENT_TIME</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>CURRENT_TIMESTAMP</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP</name>
+    <name>TIMESTMP</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" lengthSupported="true" defaultLength="1" displayNameSupported="true" displayName="CHAR ({0}) FOR BIT DATA" keyConstraintSupported="true" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR FOR BIT DATA</name>
+    <name>CHARACTER FOR BIT DATA</name>
+    <name>CHAR () FOR BIT DATA</name>
+    <name>CHARACTER () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_1" lengthSupported="true" defaultLength="1" displayNameSupported="true" displayName="VARCHAR ({0}) FOR BIT DATA" keyConstraintSupported="true" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR FOR BIT DATA</name>
+    <name>CHARACTER VARYING FOR BIT DATA</name>
+    <name>CHAR VARYING FOR BIT DATA</name>
+    <name>VARCHAR () FOR BIT DATA</name>
+    <name>CHARACTER VARYING () FOR BIT DATA</name>
+    <name>CHAR VARYING () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <storedProcedureDefinition maximumIdentifierLength="128" parameterStyleSupported="true">
+    <parameterStyle>DB2SQL</parameterStyle>
+    <parameterStyle>DB2GENRL</parameterStyle>
+    <parameterStyle>SQL</parameterStyle>
+    <parameterStyle>GENERAL</parameterStyle>
+    <parameterStyle>GENERAL_WITH_NULLS</parameterStyle>
+    <parameterStyle>JAVA</parameterStyle>
+    <languageType>SQL</languageType>
+    <languageType>JAVA</languageType>
+    <languageType>C</languageType>
+    <languageType>COBOL</languageType>
+    <languageType>CPLUSPLUS</languageType>
+    <languageType>CL</languageType>
+    <languageType>COBOLLE</languageType>
+    <languageType>FORTRAN</languageType>
+    <languageType>REXX</languageType>
+    <languageType>RPG</languageType>
+    <languageType>RPGLE</languageType>
+    <functionLanguageType>SQL</functionLanguageType>
+    <functionLanguageType>JAVA</functionLanguageType>
+    <functionLanguageType>C</functionLanguageType>
+  </storedProcedureDefinition>
+  <columnDefinition maximumIdentifierLength="30" identitySupported="true"/>
+  <constraintDefinition maximumPrimaryKeyIdentifierLength="128" maximumForeignKeyIdentifierLength="128" maximumCheckConstraintIdentifierLength="128">
+    <parentDeleteDRIRuleType>RESTRICT</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>SET_NULL</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>SET_DEFAULT</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+  </constraintDefinition>
+  <triggerDefinition maximumIdentifierLength="128"/>
+  <indexDefinition maximumIdentifierLength="128"/>
+  <viewDefinition maximumIdentifierLength="128" indexSupported="true" checkOptionLevelsSupported="true"/>
+  <tableDefinition maximumIdentifierLength="128"/>
+  <schemaDefinition maximumIdentifierLength="10"/>
+  <queryDefinition hostVariableMarker=":"/>
+  <SQLSyntaxDefinition>
+    <keywords>ABSOLUTE</keywords>
+    <keywords>ACCESS</keywords>
+    <keywords>ACTION</keywords>
+    <keywords>ACTIVATE</keywords>
+    <keywords>ADA</keywords>
+    <keywords>ADD</keywords>
+    <keywords>AFTER</keywords>
+    <keywords>ALIAS</keywords>
+    <keywords>ALL</keywords>
+    <keywords>ALLOCATE</keywords>
+    <keywords>ALLOW</keywords>
+    <keywords>ALTER</keywords>
+    <keywords>ALTERIN</keywords>
+    <keywords>ALWAYS</keywords>
+    <keywords>AND</keywords>
+    <keywords>ANY</keywords>
+    <keywords>APPEND</keywords>    
+    <keywords>ARE</keywords>
+    <keywords>AS</keywords>
+    <keywords>ASC</keywords>
+    <keywords>ASCII</keywords>
+    <keywords>ASSERTION</keywords>
+    <keywords>ASSIGNMENT</keywords>
+    <keywords>ASSOCIATE</keywords>    
+    <keywords>ASUTIME</keywords>
+    <keywords>AT</keywords>
+    <keywords>ATOMIC</keywords>    
+    <keywords>ATTRIBUTES</keywords>
+    <keywords>AUTHORIZATION</keywords>    
+    <keywords>AUTHID</keywords>
+    <keywords>AUTOMATIC</keywords>    
+    <keywords>AVG</keywords>
+    <keywords>BEFORE</keywords>
+    <keywords>BEGIN</keywords>
+    <keywords>BETWEEN</keywords>
+    <keywords>BIGINT</keywords>
+    <keywords>BINARY</keywords>
+    <keywords>BIND</keywords>
+    <keywords>BINDADD</keywords>
+    <keywords>BIT</keywords>
+    <keywords>BIT_LENGTH</keywords>
+    <keywords>BLOB</keywords>
+    <keywords>BLOCKED</keywords>
+    <keywords>BOTH</keywords>    
+    <keywords>BUFFERPOOL</keywords>    
+    <keywords>BY</keywords>
+    <keywords>C</keywords>
+    <keywords>CACHE</keywords>
+    <keywords>CALL</keywords>
+    <keywords>CALLED</keywords>
+    <keywords>CALLER</keywords>
+    <keywords>CAPTURE</keywords>
+    <keywords>CARDINALITY</keywords>
+    <keywords>CASCADE</keywords>
+    <keywords>CASCADED</keywords>
+    <keywords>CASE</keywords>
+    <keywords>CAST</keywords>
+    <keywords>CATALOG</keywords>
+    <keywords>CATALOG_NAME</keywords>
+    <keywords>CHANGE</keywords>    
+    <keywords>CHAR</keywords>
+    <keywords>CHAR_LENGTH</keywords>
+    <keywords>CHARACTER</keywords>
+    <keywords>CHARACTER_LENGTH</keywords>    
+    <keywords>CHECK</keywords>
+    <keywords>CHECKED</keywords>
+    <keywords>CL</keywords>
+    <keywords>CLASS_ORIGIN</keywords>
+    <keywords>CLIENT</keywords>
+    <keywords>CLOB</keywords>
+    <keywords>CLOSE</keywords>
+    <keywords>CLUSTER</keywords>
+    <keywords>COBOL</keywords>
+    <keywords>COBOLLE</keywords>
+    <keywords>COLLATE</keywords>
+    <keywords>COLLATION</keywords>    
+    <keywords>COLLECT</keywords>
+    <keywords>COLLID</keywords>
+    <keywords>COLUMN</keywords>    
+    <keywords>COLUMN_NAME</keywords>    
+    <keywords>COMMAND_FUNCTION</keywords>
+    <keywords>COMMENT</keywords>
+    <keywords>COMMIT</keywords>
+    <keywords>COMMITTED</keywords>    
+    <keywords>COMPARISONS</keywords>
+    <keywords>CONCAT</keywords>
+    <keywords>CONDITION</keywords>
+    <keywords>CONDITION_NUMBER</keywords>
+    <keywords>CONNECT</keywords>
+    <keywords>CONNECTION</keywords>    
+    <keywords>CONNECTION_NAME</keywords>    
+    <keywords>CONSERVATIVE</keywords>
+    <keywords>CONSTRAINT</keywords>
+    <keywords>CONSTRAINT_CATALOG</keywords>
+    <keywords>CONSTRAINT_NAME</keywords>
+    <keywords>CONSTRAINT_SCHEMA</keywords>
+    <keywords>CONSTRAINTS</keywords>    
+    <keywords>CONTAINS</keywords>
+    <keywords>CONTINUE</keywords>
+    <keywords>CONTROL</keywords>
+    <keywords>CONVERT</keywords>
+    <keywords>COPY</keywords>
+    <keywords>CORRELATION</keywords>
+    <keywords>CORR</keywords>
+    <keywords>CORRESPONDING</keywords>
+    <keywords>COUNT</keywords>
+    <keywords>COUNT_BIG</keywords>    
+    <keywords>C++</keywords>
+    <keywords>CREATE</keywords>
+    <keywords>CREATEIN</keywords>    
+    <keywords>CREATETAB</keywords>
+    <keywords>CROSS</keywords>
+    <keywords>CUBE</keywords>
+    <keywords>CURRENT</keywords>
+    <keywords>CURRENT_DATE</keywords>      
+    <keywords>CURRENT_PATH</keywords>    
+    <keywords>CURRENT_SCHEMA</keywords>
+    <keywords>CURRENT_SERVER</keywords>
+    <keywords>CURRENT_SQLID</keywords>
+    <keywords>CURRENT_TIME</keywords>
+    <keywords>CURRENT_TIMESTAMP</keywords>
+    <keywords>CURRENT_TIMEZONE</keywords>
+    <keywords>CURRENT_USER</keywords>    
+    <keywords>CURSOR</keywords>
+    <keywords>CURSORS</keywords>
+    <keywords>CURSOR_NAME</keywords>
+    <keywords>CYCLE</keywords>
+    <keywords>DATE</keywords>
+    <keywords>DATA</keywords>
+    <keywords>DATABASE</keywords>
+    <keywords>DATALINK</keywords>     
+    <keywords>DAY</keywords>
+    <keywords>DAYS</keywords>
+    <keywords>DB</keywords>
+    <keywords>DBADM</keywords>
+    <keywords>DBCLOB</keywords>
+    <keywords>DBINFO</keywords>
+    <keywords>DB2DARI</keywords>
+    <keywords>DB2GENRL</keywords>
+    <keywords>DB2GENERAL</keywords>
+    <keywords>DB2OPTIONS</keywords>
+    <keywords>DB2SQL</keywords>
+    <keywords>DEADLOCKS</keywords>
+    <keywords>DEALLOCATE</keywords>
+    <keywords>DEC</keywords>
+    <keywords>DECIMAL</keywords>
+    <keywords>DECLARE</keywords>
+    <keywords>DEFAULT</keywords>
+    <keywords>DEFAULTS</keywords>
+    <keywords>DEFINE</keywords>
+    <keywords>DEFINITION</keywords>
+    <keywords>DEGREE</keywords>    
+    <keywords>DEFERRABLE</keywords>
+    <keywords>DEFERRED</keywords>
+    <keywords>DELETE</keywords>
+    <keywords>DESC</keywords>
+    <keywords>DESCRIBE</keywords>
+    <keywords>DESCRIPTOR</keywords>    
+    <keywords>DETERMINISTIC</keywords>    
+    <keywords>DIAGNOSTICS</keywords>
+    <keywords>DIMENSIONS</keywords>
+    <keywords>DISABLE</keywords>
+    <keywords>DISALLOW</keywords>
+    <keywords>DISCONNECT</keywords>
+    <keywords>DISPATCH</keywords>
+    <keywords>DISTINCT</keywords>    
+    <keywords>DOMAIN</keywords>
+    <keywords>DO</keywords>
+    <keywords>DOUBLE</keywords>
+    <keywords>DROP</keywords>
+    <keywords>DROPIN</keywords>    
+    <keywords>DYNAMIC</keywords>
+    <keywords>DYNAMIC_FUNCTION</keywords>
+    <keywords>EACH</keywords>
+    <keywords>EBCDIC</keywords>
+    <keywords>ELSE</keywords>
+    <keywords>ELSEIF</keywords>    
+    <keywords>ENABLE</keywords>
+    <keywords>END</keywords>
+    <keywords>END-EXEC</keywords>
+    <keywords>ERASE</keywords>
+    <keywords>ESCAPE</keywords>
+    <keywords>EUR</keywords>    
+    <keywords>EVENT</keywords>
+    <keywords>EXACT</keywords>
+    <keywords>EXCEPT</keywords>
+    <keywords>EXCEPTION</keywords>
+    <keywords>EXCLUDE</keywords>
+    <keywords>EXCLUDING</keywords>
+    <keywords>EXCLUSIVE</keywords>
+    <keywords>EXEC</keywords>    
+    <keywords>EXECUTE</keywords>
+    <keywords>EXISTS</keywords>
+    <keywords>EXIT</keywords>    
+    <keywords>EXPLAIN</keywords>    
+    <keywords>EXTENSION</keywords>    
+    <keywords>EXTERNAL</keywords>
+    <keywords>EXTRACT</keywords>
+    <keywords>FALSE</keywords>
+    <keywords>FEDERATED</keywords>
+    <keywords>FENCED</keywords>
+    <keywords>FETCH</keywords>
+    <keywords>FILE</keywords>    
+    <keywords>FINAL</keywords>
+    <keywords>FIRST</keywords>
+    <keywords>FLOAT</keywords>
+    <keywords>FLUSH</keywords>
+    <keywords>FOLLOWING</keywords>
+    <keywords>FOR</keywords>
+    <keywords>FORCE</keywords>
+    <keywords>FOREIGN</keywords>    
+    <keywords>FORTRAN</keywords>
+    <keywords>FOUND</keywords>    
+    <keywords>FROM</keywords>
+    <keywords>FS</keywords>
+    <keywords>FULL</keywords>
+    <keywords>FUNCTION</keywords>
+    <keywords>G</keywords>    
+    <keywords>GENERAL</keywords>    
+    <keywords>GENERATED</keywords>
+    <keywords>GET</keywords>
+    <keywords>GLOBAL</keywords>
+    <keywords>GO</keywords>
+    <keywords>GOTO</keywords>
+    <keywords>GRANT</keywords>
+    <keywords>GRAPHIC</keywords>
+    <keywords>GROUP</keywords>
+    <keywords>GROUPING</keywords>
+    <keywords>HANDLER</keywords>    
+    <keywords>HAVING</keywords>    
+    <keywords>HOLD</keywords>
+    <keywords>HOUR</keywords>
+    <keywords>HOURS</keywords>
+    <keywords>IDENTITY</keywords>
+    <keywords>IF</keywords>
+    <keywords>IMMEDIATE</keywords>
+    <keywords>IMPLICIT_SCHEMA</keywords>
+    <keywords>IN</keywords>
+    <keywords>INCLUDE</keywords>
+    <keywords>INCLUDING</keywords>
+    <keywords>INCREMENT</keywords>    
+    <keywords>INDEX</keywords>    
+    <keywords>INDICATOR</keywords>    
+    <keywords>INHERIT</keywords>
+    <keywords>INITIALLY</keywords>
+    <keywords>INITIAL_INSTS</keywords>
+    <keywords>INITIAL_IOS</keywords>    
+    <keywords>INNER</keywords>
+    <keywords>INOUT</keywords>
+    <keywords>INPUT</keywords>
+    <keywords>INSENSITIVE</keywords>
+    <keywords>INSERT</keywords>    
+    <keywords>INSTEAD</keywords>
+    <keywords>INSTS_PER_ARGBYTE</keywords>
+    <keywords>INSTS_PER_INVOC</keywords>
+    <keywords>INT</keywords>
+    <keywords>INTEGER</keywords>
+    <keywords>INTEGRITY</keywords>
+    <keywords>INTERSECT</keywords>
+    <keywords>INTERVAL</keywords>
+    <keywords>INTO</keywords>    
+    <keywords>IOS_PER_ARGBYTE</keywords>
+    <keywords>IOS_PER_INVOC</keywords>
+    <keywords>IS</keywords>
+    <keywords>ISO</keywords>
+    <keywords>ITERATE</keywords>
+    <keywords>ISOLATION</keywords>
+    <keywords>JAVA</keywords>    
+    <keywords>JIS</keywords>
+    <keywords>JOIN</keywords>
+    <keywords>K</keywords>
+    <keywords>KEY</keywords>    
+    <keywords>LANGUAGE</keywords>
+    <keywords>LARGE</keywords>
+    <keywords>LAST</keywords>
+    <keywords>LEADING</keywords>
+    <keywords>LEAVE</keywords>
+    <keywords>LEFT</keywords>
+    <keywords>LENGTH</keywords>
+    <keywords>LEVEL</keywords>    
+    <keywords>LIKE</keywords>
+    <keywords>LIMIT</keywords>
+    <keywords>LINK</keywords>
+    <keywords>LINKTYPE</keywords>
+    <keywords>LOAD</keywords>
+    <keywords>LOCAL</keywords>
+    <keywords>LOCATOR</keywords>
+    <keywords>LOCATORS</keywords>
+    <keywords>LOCK</keywords>
+    <keywords>LOCKS</keywords>
+    <keywords>LOCKSIZE</keywords>
+    <keywords>LOGGED</keywords>
+    <keywords>LONG</keywords>
+    <keywords>LONGVAR</keywords>
+    <keywords>LOOP</keywords>
+    <keywords>LOWER</keywords>
+    <keywords>M</keywords>
+    <keywords>MAINTAINED</keywords>      
+    <keywords>MAPPING</keywords>
+    <keywords>MATCH</keywords>
+    <keywords>MAX</keywords>     
+    <keywords>MAXVALUE</keywords>
+    <keywords>MESSAGE_LENGTH</keywords>
+    <keywords>MESSAGE_OCTET_LENGTH</keywords>
+    <keywords>MESSAGE_TEXT</keywords>
+    <keywords>METHOD</keywords>    
+    <keywords>MICROSECOND</keywords>
+    <keywords>MICROSECONDS</keywords>    
+    <keywords>MINUTE</keywords>
+    <keywords>MINUTES</keywords>
+    <keywords>MINVALUE</keywords>    
+    <keywords>MODE</keywords>
+    <keywords>MODIFIES</keywords>
+    <keywords>MODULE</keywords>
+    <keywords>MONITOR</keywords>
+    <keywords>MONTH</keywords>
+    <keywords>MONTHS</keywords>
+    <keywords>MORE</keywords>    
+    <keywords>NAMED</keywords>
+    <keywords>NAMES</keywords>
+    <keywords>NATIONAL</keywords>
+    <keywords>NATURAL</keywords>
+    <keywords>NCHAR</keywords>
+    <keywords>NEW</keywords>
+    <keywords>NEW_TABLE</keywords>
+    <keywords>NEXT</keywords>
+    <keywords>NEXTVAL</keywords>
+    <keywords>NICKNAME</keywords>
+    <keywords>NO</keywords>
+    <keywords>NOCACHE</keywords>
+    <keywords>NOCYCLE</keywords>
+    <keywords>NODE</keywords>    
+    <keywords>NOMAXVALUE</keywords>
+    <keywords>NOMINVALUE</keywords>    
+    <keywords>NONE</keywords>
+    <keywords>NOORDER</keywords>
+    <keywords>NOT</keywords>
+    <keywords>NULL</keywords>
+    <keywords>NULLABLE</keywords>    
+    <keywords>NULLS</keywords>    
+    <keywords>NUMBER</keywords>
+    <keywords>NUMERIC</keywords>    
+    <keywords>OCTET_LENGTH</keywords>
+    <keywords>OBJECT</keywords>
+    <keywords>OF</keywords>
+    <keywords>OFF</keywords>
+    <keywords>OLD</keywords>
+    <keywords>OLD_TABLE</keywords>
+    <keywords>OLE</keywords>
+    <keywords>OLEDB</keywords>
+    <keywords>ON</keywords>
+    <keywords>ONCE</keywords>
+    <keywords>ONLINE</keywords>
+    <keywords>ONLY</keywords>
+    <keywords>OPEN</keywords>
+    <keywords>OPTIMIZATION</keywords>
+    <keywords>OPTIMIZE</keywords>
+    <keywords>OPTION</keywords>    
+    <keywords>OR</keywords>
+    <keywords>ORDER</keywords>
+    <keywords>OUT</keywords>
+    <keywords>OUTER</keywords>
+    <keywords>OUTPUT</keywords>
+    <keywords>OVER</keywords>    
+    <keywords>OVERLAPS</keywords>    
+    <keywords>PACKAGE</keywords>
+    <keywords>PAD</keywords>    
+    <keywords>PARTIAL</keywords>
+    <keywords>PARALLEL</keywords>    
+    <keywords>PARAMETER</keywords>
+    <keywords>PASCAL</keywords>
+    <keywords>PASSTHRU</keywords>
+    <keywords>PASSWORD</keywords>
+    <keywords>PATH</keywords>
+    <keywords>PARTITION</keywords>
+    <keywords>PARTITIONING</keywords>    
+    <keywords>PCTFREE</keywords>    
+    <keywords>PERCENT_ARGBYTES</keywords>
+    <keywords>PERMISSION</keywords>
+    <keywords>PIECESIZE</keywords>
+    <keywords>PIPE</keywords>
+    <keywords>PLAN</keywords>
+    <keywords>PLI</keywords>
+    <keywords>POSITION</keywords>
+    <keywords>PRECEDING</keywords>
+    <keywords>PRECISION</keywords>    
+    <keywords>PREPARE</keywords>
+    <keywords>PRESERVE</keywords>
+    <keywords>PRIMARY</keywords>    
+    <keywords>PRIOR</keywords>
+    <keywords>PRIQTY</keywords>
+    <keywords>PRIVILEGES</keywords>
+    <keywords>PROCEDURE</keywords>
+    <keywords>PROGRAM</keywords>    
+    <keywords>PUBLIC</keywords>
+    <keywords>QUERY</keywords>
+    <keywords>QUERYNO</keywords>    
+    <keywords>RANGE</keywords>    
+    <keywords>READ</keywords>
+    <keywords>READS</keywords>
+    <keywords>REAL</keywords>
+    <keywords>RECOMMEND</keywords>    
+    <keywords>RECOVERY</keywords>    
+    <keywords>REF</keywords>
+    <keywords>REFERENCE</keywords>
+    <keywords>REFERENCES</keywords>
+    <keywords>REFERENCING</keywords>
+    <keywords>REFRESH</keywords>
+    <keywords>REGISTERS</keywords>    
+    <keywords>RELATIVE</keywords>
+    <keywords>RELEASE</keywords>     
+    <keywords>RENAME</keywords>
+    <keywords>REPEATABLE</keywords>
+    <keywords>REPEAT</keywords>
+    <keywords>RPG</keywords>
+    <keywords>RPGLE</keywords>
+    <keywords>REPLACE</keywords>
+    <keywords>REPLICATED</keywords>
+    <keywords>RESET</keywords>    
+    <keywords>RESIGNAL</keywords>    
+    <keywords>RESOLVE</keywords>
+    <keywords>RESTART</keywords>
+    <keywords>RESTORE</keywords>
+    <keywords>RESTRICT</keywords>
+    <keywords>RESULT</keywords>
+    <keywords>RESULT_SET_LOCATOR</keywords>    
+    <keywords>RETURNED_SQLSTATE</keywords>
+    <keywords>RETAIN</keywords>
+    <keywords>RETURN</keywords>
+    <keywords>RETURNS</keywords>
+    <keywords>RETURN_STATUS</keywords>    
+    <keywords>REVOKE</keywords>
+    <keywords>RIGHT</keywords>
+    <keywords>ROLLBACK</keywords>
+    <keywords>ROLLUP</keywords>
+    <keywords>ROUTINE</keywords>
+    <keywords>ROW</keywords>
+    <keywords>ROW_COUNT</keywords>
+    <keywords>ROWID</keywords>
+    <keywords>ROWS</keywords>
+    <keywords>RUN</keywords>
+    <keywords>S</keywords>    
+    <keywords>SAVEPOINT</keywords>
+    <keywords>SBCS</keywords>
+    <keywords>SCALE</keywords>
+    <keywords>SCHEMA</keywords>
+    <keywords>SCHEMA_NAME</keywords>
+    <keywords>SCOPE</keywords>
+    <keywords>SCRATCHPAD</keywords>
+    <keywords>SCROLL</keywords>
+    <keywords>SEARCH</keywords>
+    <keywords>SECOND</keywords>
+    <keywords>SECONDS</keywords>
+    <keywords>SECQTY</keywords>
+    <keywords>SECTION</keywords>
+    <keywords>SELECT</keywords>    
+    <keywords>SELECTIVITY</keywords>
+    <keywords>SELF</keywords>
+    <keywords>SEQUENCE</keywords>
+    <keywords>SERIALIZABLE</keywords>
+    <keywords>SERVER</keywords>
+    <keywords>SERVER_NAME</keywords>
+    <keywords>SESSION</keywords>
+    <keywords>SESSION_USER</keywords>
+    <keywords>SET</keywords>
+    <keywords>SETS</keywords>    
+    <keywords>SHARE</keywords>    
+    <keywords>SIGNAL</keywords>
+    <keywords>SIMPLE</keywords>
+    <keywords>SIZE</keywords>
+    <keywords>SMALLINT</keywords>
+    <keywords>SNAPSHOT</keywords>
+    <keywords>SOME</keywords>
+    <keywords>SOURCE</keywords>
+    <keywords>SPACE</keywords>    
+    <keywords>SPECIFIC</keywords>    
+    <keywords>SQL</keywords>
+    <keywords>SQLCODE</keywords>
+    <keywords>SQLERROR</keywords>
+    <keywords>SQLEXCEPTION</keywords>
+    <keywords>SQLWARNING</keywords>
+    <keywords>SQLID</keywords>    
+    <keywords>SQLSTATE</keywords>    
+    <keywords>START</keywords>
+    <keywords>STATE</keywords>
+    <keywords>STATEMENT</keywords>    
+    <keywords>STATISTICS</keywords>
+    <keywords>STAY</keywords>
+    <keywords>STOGROUP</keywords>
+    <keywords>STORAGE</keywords>    
+    <keywords>STYLE</keywords>    
+    <keywords>SUBCLASS_ORIGIN</keywords>
+    <keywords>SUBSTRING</keywords>
+    <keywords>SUMMARY</keywords>
+    <keywords>SWITCH</keywords>
+    <keywords>SYNONYM</keywords>
+    <keywords>SYSTEM</keywords>
+    <keywords>SYSTEM_USER</keywords>
+    <keywords>TABLE</keywords>
+    <keywords>TABLES</keywords>
+    <keywords>TABLE_NAME</keywords>
+    <keywords>TABLESPACE</keywords>
+    <keywords>TABLESPACES</keywords>    
+    <keywords>TEMPORARY</keywords>
+    <keywords>THEN</keywords>
+    <keywords>THREADSAFE</keywords>    
+    <keywords>TIME</keywords>
+    <keywords>TIMESTAMP</keywords>
+    <keywords>TIMEZONE</keywords>
+    <keywords>TIMEZONE_HOUR</keywords>
+    <keywords>TIMEZONE_MINUTE</keywords>
+    <keywords>TO</keywords>
+    <keywords>TRAILING</keywords>
+    <keywords>TRANSACTION</keywords>    
+    <keywords>TRANSFORM</keywords>    
+    <keywords>TRANSLATE</keywords>
+    <keywords>TRANSLATION</keywords>
+    <keywords>TREAT</keywords>
+    <keywords>TRIGGER</keywords>
+    <keywords>TRIM</keywords>
+    <keywords>TRUE</keywords>
+    <keywords>TYPE</keywords>
+    <keywords>UNBOUNDED</keywords>    
+    <keywords>UNCOMMITTED</keywords>
+    <keywords>UNDER</keywords>
+    <keywords>UNDO</keywords>
+    <keywords>UNICODE</keywords>
+    <keywords>UNION</keywords>
+    <keywords>UNIQUE</keywords>
+    <keywords>UNKNOWN</keywords>
+    <keywords>UNLINK</keywords>
+    <keywords>UNTIL</keywords>    
+    <keywords>UPDATE</keywords>
+    <keywords>UPPER</keywords>
+    <keywords>URL</keywords>
+    <keywords>USA</keywords>
+    <keywords>USE</keywords>
+    <keywords>USAGE</keywords>
+    <keywords>USER</keywords>
+    <keywords>USING</keywords>
+    <keywords>VALUE</keywords>
+    <keywords>VALUES</keywords>
+    <keywords>VARCHAR</keywords>
+    <keywords>VARGRAPHIC</keywords>
+    <keywords>VARIANT</keywords>
+    <keywords>VARYING</keywords>
+    <keywords>VCAT</keywords>
+    <keywords>VERSION</keywords>
+    <keywords>VIEW</keywords>    
+    <keywords>WHEN</keywords>
+    <keywords>WHENEVER</keywords>
+    <keywords>WHERE</keywords>
+    <keywords>WHILE</keywords>
+    <keywords>WITH</keywords>
+    <keywords>WITHOUT</keywords>
+    <keywords>WORK</keywords>
+    <keywords>WRAPPER</keywords>
+    <keywords>WRITE</keywords>
+    <keywords>YEAR</keywords>
+    <keywords>YEARS</keywords>
+    <keywords>YES</keywords>    
+    <keywords>ZONE</keywords>
+    <operators>&lt;</operators>
+    <operators>&quot;</operators>
+    <operators>%</operators>
+    <operators>&amp;</operators>
+    <operators>''''</operators>
+    <operators>(</operators>
+    <operators>)</operators>
+    <operators>*</operators>
+    <operators>+</operators>
+    <operators>,</operators>
+    <operators>-</operators>
+    <operators>.</operators>
+    <operators>/</operators>
+    <operators>:</operators>
+    <operators>;</operators>
+    <operators>=</operators>
+    <operators>?</operators>
+    <operators>[</operators>
+    <operators>]</operators>
+    <operators>_</operators>
+    <operators>'|'</operators>
+    <operators>,=</operators>
+    <operators>&lt;=</operators>
+    <operators>||</operators>
+    <operators>..</operators>
+    <operators>'-,'</operators>
+    <operators>!</operators>
+    <operators>~</operators>
+    <operators>:=</operators>
+    <operators>{</operators>
+    <operators>}</operators>
+    <operators>(+)</operators>
+  </SQLSyntaxDefinition>
+</DBDefinition:DatabaseVendorDefinition>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition/runtime/vendors/DB2 UDB iSeries_5R3/DB2 UDB iSeries_5R3.xmi b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition/runtime/vendors/DB2 UDB iSeries_5R3/DB2 UDB iSeries_5R3.xmi
new file mode 100644
index 0000000..d7f2520
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition/runtime/vendors/DB2 UDB iSeries_5R3/DB2 UDB iSeries_5R3.xmi
@@ -0,0 +1,800 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="DB2 UDB iSeries" version="5R3" maximumIdentifierLength="18" tablespacesSupported="false" maximumCommentLength="64" userDefinedTypeSupported="true" aliasSupported="true"
+ sequenceSupported="true" mQTSupported="true">
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="BIGINT" jdbcEnumType="-5">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIGINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="BYTE" defaultLength="1024" maximumLength="2147483647" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BLOB</name>
+    <name>BINARY LARGE OBJECT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_1" lengthSupported="true" defaultLength="1" maximumLength="16383" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>GRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_1" lengthSupported="true" defaultLength="32" maximumLength="16370" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARGRAPHIC</name>
+    <name>GRAPHIC VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_2" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARGRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="32766" primitiveType="CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR</name>
+    <name>CHARACTER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="BYTE" defaultLength="1024" maximumLength="2147483647" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CLOB</name>
+    <name>CHARACTER LARGE OBJECT</name>
+    <name>CHAR LARGE OBJECT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="DOUBLE_BYTE" defaultLength="1048576" maximumLength="1073741823" primitiveType="NATIONAL_CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DBCLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" keyConstraintSupported="true" defaultLength="32" maximumLength="32740" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR</name>
+    <name>CHARACTER VARYING</name>
+    <name>CHAR VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_2" primitiveType="CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATALINK_1" lengthSupported="true" defaultLength="200" maximumLength="32717" primitiveType="DATALINK" jdbcEnumType="70" javaClassName="java.net.URL">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATALINK</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>CURRENT_DATE</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" scaleSupported="true" precisionSupported="true" defaultPrecision="5" defaultScale="0" maximumPrecision="63" identitySupported="true" keyConstraintSupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">>
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE</name>
+    <name>DOUBLE PRECISION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" precisionSupported="true" keyConstraintSupported="true" primitiveType="FLOAT" defaultPrecision="53" maximumPrecision="53" cutoffPrecision="25" jdbcEnumType="6" javaClassName="double">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INTEGER</name>
+    <name>INT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTERVAL_1" keyConstraintSupported="true" primitiveType="INTERVAL">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INTERVAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" scaleSupported="true" precisionSupported="true" defaultPrecision="5" defaultScale="0"  maximumPrecision="63" identitySupported="true" keyConstraintSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+    <name>NUM</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_3" keyConstraintSupported="true" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>ROWID</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIME_1" keyConstraintSupported="true" primitiveType="TIME" jdbcEnumType="92" javaClassName="java.sql.Time">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>CURRENT_TIME</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>CURRENT_TIMESTAMP</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP</name>
+    <name>TIMESTMP</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" lengthSupported="true" defaultLength="1" displayNameSupported="true" displayName="CHAR ({0}) FOR BIT DATA" keyConstraintSupported="true" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR FOR BIT DATA</name>
+    <name>CHARACTER FOR BIT DATA</name>
+    <name>CHAR () FOR BIT DATA</name>
+    <name>CHARACTER () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_1" lengthSupported="true" defaultLength="1" maximumLength="32740" displayNameSupported="true" displayName="VARCHAR ({0}) FOR BIT DATA" keyConstraintSupported="true" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR FOR BIT DATA</name>
+    <name>CHARACTER VARYING FOR BIT DATA</name>
+    <name>CHAR VARYING FOR BIT DATA</name>
+    <name>VARCHAR () FOR BIT DATA</name>
+    <name>CHARACTER VARYING () FOR BIT DATA</name>
+    <name>CHAR VARYING () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_2" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="32765" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BINARY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_2" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="32739" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARBINARY</name>
+    <name>BINARY VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <storedProcedureDefinition maximumIdentifierLength="128" parameterStyleSupported="true">
+    <parameterStyle>DB2SQL</parameterStyle>
+    <parameterStyle>DB2GENRL</parameterStyle>
+    <parameterStyle>SQL</parameterStyle>
+    <parameterStyle>GENERAL</parameterStyle>
+    <parameterStyle>GENERAL_WITH_NULLS</parameterStyle>
+    <parameterStyle>JAVA</parameterStyle>
+    <languageType>SQL</languageType>
+    <languageType>JAVA</languageType>
+    <languageType>C</languageType>
+    <languageType>COBOL</languageType>
+    <languageType>CPLUSPLUS</languageType>
+    <languageType>CL</languageType>
+    <languageType>COBOLLE</languageType>
+    <languageType>FORTRAN</languageType>
+    <languageType>REXX</languageType>
+    <languageType>RPG</languageType>
+    <languageType>RPGLE</languageType>
+    <functionLanguageType>SQL</functionLanguageType>
+    <functionLanguageType>JAVA</functionLanguageType>
+    <functionLanguageType>C</functionLanguageType>
+  </storedProcedureDefinition>
+  <columnDefinition maximumIdentifierLength="30" identitySupported="true"/>
+  <constraintDefinition maximumPrimaryKeyIdentifierLength="128" maximumForeignKeyIdentifierLength="128" maximumCheckConstraintIdentifierLength="128">
+    <parentDeleteDRIRuleType>RESTRICT</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>SET_NULL</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>SET_DEFAULT</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+  </constraintDefinition>
+  <triggerDefinition maximumIdentifierLength="128"/>
+  <indexDefinition maximumIdentifierLength="128"/>
+  <viewDefinition maximumIdentifierLength="128" indexSupported="true" checkOptionLevelsSupported="true"/>
+  <tableDefinition maximumIdentifierLength="128"/>
+  <schemaDefinition maximumIdentifierLength="10"/>
+  <queryDefinition hostVariableMarker=":"/>
+  <SQLSyntaxDefinition>
+    <keywords>ABSOLUTE</keywords>
+    <keywords>ACCESS</keywords>
+    <keywords>ACTION</keywords>
+    <keywords>ACTIVATE</keywords>
+    <keywords>ADA</keywords>
+    <keywords>ADD</keywords>
+    <keywords>AFTER</keywords>
+    <keywords>ALIAS</keywords>
+    <keywords>ALL</keywords>
+    <keywords>ALLOCATE</keywords>
+    <keywords>ALLOW</keywords>
+    <keywords>ALTER</keywords>
+    <keywords>ALTERIN</keywords>
+    <keywords>ALWAYS</keywords>
+    <keywords>AND</keywords>
+    <keywords>ANY</keywords>
+    <keywords>APPEND</keywords>    
+    <keywords>ARE</keywords>
+    <keywords>AS</keywords>
+    <keywords>ASC</keywords>
+    <keywords>ASCII</keywords>
+    <keywords>ASSERTION</keywords>
+    <keywords>ASSIGNMENT</keywords>
+    <keywords>ASSOCIATE</keywords>    
+    <keywords>ASUTIME</keywords>
+    <keywords>AT</keywords>
+    <keywords>ATOMIC</keywords>    
+    <keywords>ATTRIBUTES</keywords>
+    <keywords>AUTHORIZATION</keywords>    
+    <keywords>AUTHID</keywords>
+    <keywords>AUTOMATIC</keywords>    
+    <keywords>AVG</keywords>
+    <keywords>BEFORE</keywords>
+    <keywords>BEGIN</keywords>
+    <keywords>BETWEEN</keywords>
+    <keywords>BIGINT</keywords>
+    <keywords>BINARY</keywords>
+    <keywords>BIND</keywords>
+    <keywords>BINDADD</keywords>
+    <keywords>BIT</keywords>
+    <keywords>BIT_LENGTH</keywords>
+    <keywords>BLOB</keywords>
+    <keywords>BLOCKED</keywords>
+    <keywords>BOTH</keywords>    
+    <keywords>BUFFERPOOL</keywords>    
+    <keywords>BY</keywords>
+    <keywords>C</keywords>
+    <keywords>CACHE</keywords>
+    <keywords>CALL</keywords>
+    <keywords>CALLED</keywords>
+    <keywords>CALLER</keywords>
+    <keywords>CAPTURE</keywords>
+    <keywords>CARDINALITY</keywords>
+    <keywords>CASCADE</keywords>
+    <keywords>CASCADED</keywords>
+    <keywords>CASE</keywords>
+    <keywords>CAST</keywords>
+    <keywords>CATALOG</keywords>
+    <keywords>CATALOG_NAME</keywords>
+    <keywords>CHANGE</keywords>    
+    <keywords>CHAR</keywords>
+    <keywords>CHAR_LENGTH</keywords>
+    <keywords>CHARACTER</keywords>
+    <keywords>CHARACTER_LENGTH</keywords>    
+    <keywords>CHECK</keywords>
+    <keywords>CHECKED</keywords>
+    <keywords>CL</keywords>
+    <keywords>CLASS_ORIGIN</keywords>
+    <keywords>CLIENT</keywords>
+    <keywords>CLOB</keywords>
+    <keywords>CLOSE</keywords>
+    <keywords>CLUSTER</keywords>
+    <keywords>COBOL</keywords>
+    <keywords>COBOLLE</keywords>
+    <keywords>COLLATE</keywords>
+    <keywords>COLLATION</keywords>    
+    <keywords>COLLECT</keywords>
+    <keywords>COLLID</keywords>
+    <keywords>COLUMN</keywords>    
+    <keywords>COLUMN_NAME</keywords>    
+    <keywords>COMMAND_FUNCTION</keywords>
+    <keywords>COMMENT</keywords>
+    <keywords>COMMIT</keywords>
+    <keywords>COMMITTED</keywords>    
+    <keywords>COMPARISONS</keywords>
+    <keywords>CONCAT</keywords>
+    <keywords>CONDITION</keywords>
+    <keywords>CONDITION_NUMBER</keywords>
+    <keywords>CONNECT</keywords>
+    <keywords>CONNECTION</keywords>    
+    <keywords>CONNECTION_NAME</keywords>    
+    <keywords>CONSERVATIVE</keywords>
+    <keywords>CONSTRAINT</keywords>
+    <keywords>CONSTRAINT_CATALOG</keywords>
+    <keywords>CONSTRAINT_NAME</keywords>
+    <keywords>CONSTRAINT_SCHEMA</keywords>
+    <keywords>CONSTRAINTS</keywords>    
+    <keywords>CONTAINS</keywords>
+    <keywords>CONTINUE</keywords>
+    <keywords>CONTROL</keywords>
+    <keywords>CONVERT</keywords>
+    <keywords>COPY</keywords>
+    <keywords>CORRELATION</keywords>
+    <keywords>CORR</keywords>
+    <keywords>CORRESPONDING</keywords>
+    <keywords>COUNT</keywords>
+    <keywords>COUNT_BIG</keywords>    
+    <keywords>C++</keywords>
+    <keywords>CREATE</keywords>
+    <keywords>CREATEIN</keywords>    
+    <keywords>CREATETAB</keywords>
+    <keywords>CROSS</keywords>
+    <keywords>CUBE</keywords>
+    <keywords>CURRENT</keywords>
+    <keywords>CURRENT_DATE</keywords>      
+    <keywords>CURRENT_PATH</keywords>    
+    <keywords>CURRENT_SCHEMA</keywords>
+    <keywords>CURRENT_SERVER</keywords>
+    <keywords>CURRENT_SQLID</keywords>
+    <keywords>CURRENT_TIME</keywords>
+    <keywords>CURRENT_TIMESTAMP</keywords>
+    <keywords>CURRENT_TIMEZONE</keywords>
+    <keywords>CURRENT_USER</keywords>    
+    <keywords>CURSOR</keywords>
+    <keywords>CURSORS</keywords>
+    <keywords>CURSOR_NAME</keywords>
+    <keywords>CYCLE</keywords>
+    <keywords>DATE</keywords>
+    <keywords>DATA</keywords>
+    <keywords>DATABASE</keywords>
+    <keywords>DATALINK</keywords>     
+    <keywords>DAY</keywords>
+    <keywords>DAYS</keywords>
+    <keywords>DB</keywords>
+    <keywords>DBADM</keywords>
+    <keywords>DBCLOB</keywords>
+    <keywords>DBINFO</keywords>
+    <keywords>DB2DARI</keywords>
+    <keywords>DB2GENRL</keywords>
+    <keywords>DB2GENERAL</keywords>
+    <keywords>DB2OPTIONS</keywords>
+    <keywords>DB2SQL</keywords>
+    <keywords>DEADLOCKS</keywords>
+    <keywords>DEALLOCATE</keywords>
+    <keywords>DEC</keywords>
+    <keywords>DECIMAL</keywords>
+    <keywords>DECLARE</keywords>
+    <keywords>DEFAULT</keywords>
+    <keywords>DEFAULTS</keywords>
+    <keywords>DEFINE</keywords>
+    <keywords>DEFINITION</keywords>
+    <keywords>DEGREE</keywords>    
+    <keywords>DEFERRABLE</keywords>
+    <keywords>DEFERRED</keywords>
+    <keywords>DELETE</keywords>
+    <keywords>DESC</keywords>
+    <keywords>DESCRIBE</keywords>
+    <keywords>DESCRIPTOR</keywords>    
+    <keywords>DETERMINISTIC</keywords>    
+    <keywords>DIAGNOSTICS</keywords>
+    <keywords>DIMENSIONS</keywords>
+    <keywords>DISABLE</keywords>
+    <keywords>DISALLOW</keywords>
+    <keywords>DISCONNECT</keywords>
+    <keywords>DISPATCH</keywords>
+    <keywords>DISTINCT</keywords>    
+    <keywords>DOMAIN</keywords>
+    <keywords>DO</keywords>
+    <keywords>DOUBLE</keywords>
+    <keywords>DROP</keywords>
+    <keywords>DROPIN</keywords>    
+    <keywords>DYNAMIC</keywords>
+    <keywords>DYNAMIC_FUNCTION</keywords>
+    <keywords>EACH</keywords>
+    <keywords>EBCDIC</keywords>
+    <keywords>ELSE</keywords>
+    <keywords>ELSEIF</keywords>    
+    <keywords>ENABLE</keywords>
+    <keywords>END</keywords>
+    <keywords>END-EXEC</keywords>
+    <keywords>ERASE</keywords>
+    <keywords>ESCAPE</keywords>
+    <keywords>EUR</keywords>    
+    <keywords>EVENT</keywords>
+    <keywords>EXACT</keywords>
+    <keywords>EXCEPT</keywords>
+    <keywords>EXCEPTION</keywords>
+    <keywords>EXCLUDE</keywords>
+    <keywords>EXCLUDING</keywords>
+    <keywords>EXCLUSIVE</keywords>
+    <keywords>EXEC</keywords>    
+    <keywords>EXECUTE</keywords>
+    <keywords>EXISTS</keywords>
+    <keywords>EXIT</keywords>    
+    <keywords>EXPLAIN</keywords>    
+    <keywords>EXTENSION</keywords>    
+    <keywords>EXTERNAL</keywords>
+    <keywords>EXTRACT</keywords>
+    <keywords>FALSE</keywords>
+    <keywords>FEDERATED</keywords>
+    <keywords>FENCED</keywords>
+    <keywords>FETCH</keywords>
+    <keywords>FILE</keywords>    
+    <keywords>FINAL</keywords>
+    <keywords>FIRST</keywords>
+    <keywords>FLOAT</keywords>
+    <keywords>FLUSH</keywords>
+    <keywords>FOLLOWING</keywords>
+    <keywords>FOR</keywords>
+    <keywords>FORCE</keywords>
+    <keywords>FOREIGN</keywords>    
+    <keywords>FORTRAN</keywords>
+    <keywords>FOUND</keywords>    
+    <keywords>FROM</keywords>
+    <keywords>FS</keywords>
+    <keywords>FULL</keywords>
+    <keywords>FUNCTION</keywords>
+    <keywords>G</keywords>    
+    <keywords>GENERAL</keywords>    
+    <keywords>GENERATED</keywords>
+    <keywords>GET</keywords>
+    <keywords>GLOBAL</keywords>
+    <keywords>GO</keywords>
+    <keywords>GOTO</keywords>
+    <keywords>GRANT</keywords>
+    <keywords>GRAPHIC</keywords>
+    <keywords>GROUP</keywords>
+    <keywords>GROUPING</keywords>
+    <keywords>HANDLER</keywords>    
+    <keywords>HAVING</keywords>    
+    <keywords>HOLD</keywords>
+    <keywords>HOUR</keywords>
+    <keywords>HOURS</keywords>
+    <keywords>IDENTITY</keywords>
+    <keywords>IF</keywords>
+    <keywords>IMMEDIATE</keywords>
+    <keywords>IMPLICIT_SCHEMA</keywords>
+    <keywords>IN</keywords>
+    <keywords>INCLUDE</keywords>
+    <keywords>INCLUDING</keywords>
+    <keywords>INCREMENT</keywords>    
+    <keywords>INDEX</keywords>    
+    <keywords>INDICATOR</keywords>    
+    <keywords>INHERIT</keywords>
+    <keywords>INITIALLY</keywords>
+    <keywords>INITIAL_INSTS</keywords>
+    <keywords>INITIAL_IOS</keywords>    
+    <keywords>INNER</keywords>
+    <keywords>INOUT</keywords>
+    <keywords>INPUT</keywords>
+    <keywords>INSENSITIVE</keywords>
+    <keywords>INSERT</keywords>    
+    <keywords>INSTEAD</keywords>
+    <keywords>INSTS_PER_ARGBYTE</keywords>
+    <keywords>INSTS_PER_INVOC</keywords>
+    <keywords>INT</keywords>
+    <keywords>INTEGER</keywords>
+    <keywords>INTEGRITY</keywords>
+    <keywords>INTERSECT</keywords>
+    <keywords>INTERVAL</keywords>
+    <keywords>INTO</keywords>    
+    <keywords>IOS_PER_ARGBYTE</keywords>
+    <keywords>IOS_PER_INVOC</keywords>
+    <keywords>IS</keywords>
+    <keywords>ISO</keywords>
+    <keywords>ITERATE</keywords>
+    <keywords>ISOLATION</keywords>
+    <keywords>JAVA</keywords>    
+    <keywords>JIS</keywords>
+    <keywords>JOIN</keywords>
+    <keywords>K</keywords>
+    <keywords>KEY</keywords>    
+    <keywords>LANGUAGE</keywords>
+    <keywords>LARGE</keywords>
+    <keywords>LAST</keywords>
+    <keywords>LEADING</keywords>
+    <keywords>LEAVE</keywords>
+    <keywords>LEFT</keywords>
+    <keywords>LENGTH</keywords>
+    <keywords>LEVEL</keywords>    
+    <keywords>LIKE</keywords>
+    <keywords>LIMIT</keywords>
+    <keywords>LINK</keywords>
+    <keywords>LINKTYPE</keywords>
+    <keywords>LOAD</keywords>
+    <keywords>LOCAL</keywords>
+    <keywords>LOCATOR</keywords>
+    <keywords>LOCATORS</keywords>
+    <keywords>LOCK</keywords>
+    <keywords>LOCKS</keywords>
+    <keywords>LOCKSIZE</keywords>
+    <keywords>LOGGED</keywords>
+    <keywords>LONG</keywords>
+    <keywords>LONGVAR</keywords>
+    <keywords>LOOP</keywords>
+    <keywords>LOWER</keywords>
+    <keywords>M</keywords>
+    <keywords>MAINTAINED</keywords>      
+    <keywords>MAPPING</keywords>
+    <keywords>MATCH</keywords>
+    <keywords>MAX</keywords>     
+    <keywords>MAXVALUE</keywords>
+    <keywords>MESSAGE_LENGTH</keywords>
+    <keywords>MESSAGE_OCTET_LENGTH</keywords>
+    <keywords>MESSAGE_TEXT</keywords>
+    <keywords>METHOD</keywords>    
+    <keywords>MICROSECOND</keywords>
+    <keywords>MICROSECONDS</keywords>    
+    <keywords>MINUTE</keywords>
+    <keywords>MINUTES</keywords>
+    <keywords>MINVALUE</keywords>    
+    <keywords>MODE</keywords>
+    <keywords>MODIFIES</keywords>
+    <keywords>MODULE</keywords>
+    <keywords>MONITOR</keywords>
+    <keywords>MONTH</keywords>
+    <keywords>MONTHS</keywords>
+    <keywords>MORE</keywords>    
+    <keywords>NAMED</keywords>
+    <keywords>NAMES</keywords>
+    <keywords>NATIONAL</keywords>
+    <keywords>NATURAL</keywords>
+    <keywords>NCHAR</keywords>
+    <keywords>NEW</keywords>
+    <keywords>NEW_TABLE</keywords>
+    <keywords>NEXT</keywords>
+    <keywords>NEXTVAL</keywords>
+    <keywords>NICKNAME</keywords>
+    <keywords>NO</keywords>
+    <keywords>NOCACHE</keywords>
+    <keywords>NOCYCLE</keywords>
+    <keywords>NODE</keywords>    
+    <keywords>NOMAXVALUE</keywords>
+    <keywords>NOMINVALUE</keywords>    
+    <keywords>NONE</keywords>
+    <keywords>NOORDER</keywords>
+    <keywords>NOT</keywords>
+    <keywords>NULL</keywords>
+    <keywords>NULLABLE</keywords>    
+    <keywords>NULLS</keywords>    
+    <keywords>NUMBER</keywords>
+    <keywords>NUMERIC</keywords>    
+    <keywords>OCTET_LENGTH</keywords>
+    <keywords>OBJECT</keywords>
+    <keywords>OF</keywords>
+    <keywords>OFF</keywords>
+    <keywords>OLD</keywords>
+    <keywords>OLD_TABLE</keywords>
+    <keywords>OLE</keywords>
+    <keywords>OLEDB</keywords>
+    <keywords>ON</keywords>
+    <keywords>ONCE</keywords>
+    <keywords>ONLINE</keywords>
+    <keywords>ONLY</keywords>
+    <keywords>OPEN</keywords>
+    <keywords>OPTIMIZATION</keywords>
+    <keywords>OPTIMIZE</keywords>
+    <keywords>OPTION</keywords>    
+    <keywords>OR</keywords>
+    <keywords>ORDER</keywords>
+    <keywords>OUT</keywords>
+    <keywords>OUTER</keywords>
+    <keywords>OUTPUT</keywords>
+    <keywords>OVER</keywords>    
+    <keywords>OVERLAPS</keywords>    
+    <keywords>PACKAGE</keywords>
+    <keywords>PAD</keywords>    
+    <keywords>PARTIAL</keywords>
+    <keywords>PARALLEL</keywords>    
+    <keywords>PARAMETER</keywords>
+    <keywords>PASCAL</keywords>
+    <keywords>PASSTHRU</keywords>
+    <keywords>PASSWORD</keywords>
+    <keywords>PATH</keywords>
+    <keywords>PARTITION</keywords>
+    <keywords>PARTITIONING</keywords>    
+    <keywords>PCTFREE</keywords>    
+    <keywords>PERCENT_ARGBYTES</keywords>
+    <keywords>PERMISSION</keywords>
+    <keywords>PIECESIZE</keywords>
+    <keywords>PIPE</keywords>
+    <keywords>PLAN</keywords>
+    <keywords>PLI</keywords>
+    <keywords>POSITION</keywords>
+    <keywords>PRECEDING</keywords>
+    <keywords>PRECISION</keywords>    
+    <keywords>PREPARE</keywords>
+    <keywords>PRESERVE</keywords>
+    <keywords>PRIMARY</keywords>    
+    <keywords>PRIOR</keywords>
+    <keywords>PRIQTY</keywords>
+    <keywords>PRIVILEGES</keywords>
+    <keywords>PROCEDURE</keywords>
+    <keywords>PROGRAM</keywords>    
+    <keywords>PUBLIC</keywords>
+    <keywords>QUERY</keywords>
+    <keywords>QUERYNO</keywords>    
+    <keywords>RANGE</keywords>    
+    <keywords>READ</keywords>
+    <keywords>READS</keywords>
+    <keywords>REAL</keywords>
+    <keywords>RECOMMEND</keywords>    
+    <keywords>RECOVERY</keywords>    
+    <keywords>REF</keywords>
+    <keywords>REFERENCE</keywords>
+    <keywords>REFERENCES</keywords>
+    <keywords>REFERENCING</keywords>
+    <keywords>REFRESH</keywords>
+    <keywords>REGISTERS</keywords>    
+    <keywords>RELATIVE</keywords>
+    <keywords>RELEASE</keywords>     
+    <keywords>RENAME</keywords>
+    <keywords>REPEATABLE</keywords>
+    <keywords>REPEAT</keywords>
+    <keywords>RPG</keywords>
+    <keywords>RPGLE</keywords>
+    <keywords>REPLACE</keywords>
+    <keywords>REPLICATED</keywords>
+    <keywords>RESET</keywords>    
+    <keywords>RESIGNAL</keywords>    
+    <keywords>RESOLVE</keywords>
+    <keywords>RESTART</keywords>
+    <keywords>RESTORE</keywords>
+    <keywords>RESTRICT</keywords>
+    <keywords>RESULT</keywords>
+    <keywords>RESULT_SET_LOCATOR</keywords>    
+    <keywords>RETURNED_SQLSTATE</keywords>
+    <keywords>RETAIN</keywords>
+    <keywords>RETURN</keywords>
+    <keywords>RETURNS</keywords>
+    <keywords>RETURN_STATUS</keywords>    
+    <keywords>REVOKE</keywords>
+    <keywords>RIGHT</keywords>
+    <keywords>ROLLBACK</keywords>
+    <keywords>ROLLUP</keywords>
+    <keywords>ROUTINE</keywords>
+    <keywords>ROW</keywords>
+    <keywords>ROW_COUNT</keywords>
+    <keywords>ROWID</keywords>
+    <keywords>ROWS</keywords>
+    <keywords>RUN</keywords>
+    <keywords>S</keywords>    
+    <keywords>SAVEPOINT</keywords>
+    <keywords>SBCS</keywords>
+    <keywords>SCALE</keywords>
+    <keywords>SCHEMA</keywords>
+    <keywords>SCHEMA_NAME</keywords>
+    <keywords>SCOPE</keywords>
+    <keywords>SCRATCHPAD</keywords>
+    <keywords>SCROLL</keywords>
+    <keywords>SEARCH</keywords>
+    <keywords>SECOND</keywords>
+    <keywords>SECONDS</keywords>
+    <keywords>SECQTY</keywords>
+    <keywords>SECTION</keywords>
+    <keywords>SELECT</keywords>    
+    <keywords>SELECTIVITY</keywords>
+    <keywords>SELF</keywords>
+    <keywords>SEQUENCE</keywords>
+    <keywords>SERIALIZABLE</keywords>
+    <keywords>SERVER</keywords>
+    <keywords>SERVER_NAME</keywords>
+    <keywords>SESSION</keywords>
+    <keywords>SESSION_USER</keywords>
+    <keywords>SET</keywords>
+    <keywords>SETS</keywords>    
+    <keywords>SHARE</keywords>    
+    <keywords>SIGNAL</keywords>
+    <keywords>SIMPLE</keywords>
+    <keywords>SIZE</keywords>
+    <keywords>SMALLINT</keywords>
+    <keywords>SNAPSHOT</keywords>
+    <keywords>SOME</keywords>
+    <keywords>SOURCE</keywords>
+    <keywords>SPACE</keywords>    
+    <keywords>SPECIFIC</keywords>    
+    <keywords>SQL</keywords>
+    <keywords>SQLCODE</keywords>
+    <keywords>SQLERROR</keywords>
+    <keywords>SQLEXCEPTION</keywords>
+    <keywords>SQLWARNING</keywords>
+    <keywords>SQLID</keywords>    
+    <keywords>SQLSTATE</keywords>    
+    <keywords>START</keywords>
+    <keywords>STATE</keywords>
+    <keywords>STATEMENT</keywords>    
+    <keywords>STATISTICS</keywords>
+    <keywords>STAY</keywords>
+    <keywords>STOGROUP</keywords>
+    <keywords>STORAGE</keywords>    
+    <keywords>STYLE</keywords>    
+    <keywords>SUBCLASS_ORIGIN</keywords>
+    <keywords>SUBSTRING</keywords>
+    <keywords>SUMMARY</keywords>
+    <keywords>SWITCH</keywords>
+    <keywords>SYNONYM</keywords>
+    <keywords>SYSTEM</keywords>
+    <keywords>SYSTEM_USER</keywords>
+    <keywords>TABLE</keywords>
+    <keywords>TABLES</keywords>
+    <keywords>TABLE_NAME</keywords>
+    <keywords>TABLESPACE</keywords>
+    <keywords>TABLESPACES</keywords>    
+    <keywords>TEMPORARY</keywords>
+    <keywords>THEN</keywords>
+    <keywords>THREADSAFE</keywords>    
+    <keywords>TIME</keywords>
+    <keywords>TIMESTAMP</keywords>
+    <keywords>TIMEZONE</keywords>
+    <keywords>TIMEZONE_HOUR</keywords>
+    <keywords>TIMEZONE_MINUTE</keywords>
+    <keywords>TO</keywords>
+    <keywords>TRAILING</keywords>
+    <keywords>TRANSACTION</keywords>    
+    <keywords>TRANSFORM</keywords>    
+    <keywords>TRANSLATE</keywords>
+    <keywords>TRANSLATION</keywords>
+    <keywords>TREAT</keywords>
+    <keywords>TRIGGER</keywords>
+    <keywords>TRIM</keywords>
+    <keywords>TRUE</keywords>
+    <keywords>TYPE</keywords>
+    <keywords>UNBOUNDED</keywords>    
+    <keywords>UNCOMMITTED</keywords>
+    <keywords>UNDER</keywords>
+    <keywords>UNDO</keywords>
+    <keywords>UNICODE</keywords>
+    <keywords>UNION</keywords>
+    <keywords>UNIQUE</keywords>
+    <keywords>UNKNOWN</keywords>
+    <keywords>UNLINK</keywords>
+    <keywords>UNTIL</keywords>    
+    <keywords>UPDATE</keywords>
+    <keywords>UPPER</keywords>
+    <keywords>URL</keywords>
+    <keywords>USA</keywords>
+    <keywords>USE</keywords>
+    <keywords>USAGE</keywords>
+    <keywords>USER</keywords>
+    <keywords>USING</keywords>
+    <keywords>VALUE</keywords>
+    <keywords>VALUES</keywords>
+    <keywords>VARCHAR</keywords>
+    <keywords>VARGRAPHIC</keywords>
+    <keywords>VARIANT</keywords>
+    <keywords>VARYING</keywords>
+    <keywords>VCAT</keywords>
+    <keywords>VERSION</keywords>
+    <keywords>VIEW</keywords>    
+    <keywords>WHEN</keywords>
+    <keywords>WHENEVER</keywords>
+    <keywords>WHERE</keywords>
+    <keywords>WHILE</keywords>
+    <keywords>WITH</keywords>
+    <keywords>WITHOUT</keywords>
+    <keywords>WORK</keywords>
+    <keywords>WRAPPER</keywords>
+    <keywords>WRITE</keywords>
+    <keywords>YEAR</keywords>
+    <keywords>YEARS</keywords>
+    <keywords>YES</keywords>    
+    <keywords>ZONE</keywords>
+    <operators>&lt;</operators>
+    <operators>&quot;</operators>
+    <operators>%</operators>
+    <operators>&amp;</operators>
+    <operators>''''</operators>
+    <operators>(</operators>
+    <operators>)</operators>
+    <operators>*</operators>
+    <operators>+</operators>
+    <operators>,</operators>
+    <operators>-</operators>
+    <operators>.</operators>
+    <operators>/</operators>
+    <operators>:</operators>
+    <operators>;</operators>
+    <operators>=</operators>
+    <operators>?</operators>
+    <operators>[</operators>
+    <operators>]</operators>
+    <operators>_</operators>
+    <operators>'|'</operators>
+    <operators>,=</operators>
+    <operators>&lt;=</operators>
+    <operators>||</operators>
+    <operators>..</operators>
+    <operators>'-,'</operators>
+    <operators>!</operators>
+    <operators>~</operators>
+    <operators>:=</operators>
+    <operators>{</operators>
+    <operators>}</operators>
+    <operators>(+)</operators>
+  </SQLSyntaxDefinition>
+</DBDefinition:DatabaseVendorDefinition>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/.classpath b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/.gitignore b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/.project b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/.project
new file mode 100644
index 0000000..5506bfb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.ibm.db2.iseries.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..73f4382
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Fri Apr 13 14:14:14 PDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.4
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..77a4538
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.datatools.enablement.ibm.db2.iseries.ui;singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-Localization: plugin
+Bundle-Vendor: %providerName
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.ui,
+ org.eclipse.datatools.connectivity,
+ org.eclipse.datatools.connectivity.ui,
+ org.eclipse.datatools.enablement.ibm.db2.iseries,
+ org.eclipse.datatools.enablement.ibm.ui
+Import-Package: com.ibm.icu.text;version="3.6.1",
+ com.ibm.icu.util;version="3.6.1"
+Export-Package: org.eclipse.datatools.enablement.ibm.db2.iseries.internal.ui,
+ org.eclipse.datatools.enablement.ibm.db2.iseries.internal.ui.drivers
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/about.html b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/about.html
new file mode 100644
index 0000000..ddaf7d2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 15, 2009</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/build.properties b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/build.properties
new file mode 100644
index 0000000..76ad2ae
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/build.properties
@@ -0,0 +1,15 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               icons/,\
+               plugin.properties,\
+               plugin.xml,\
+               about.html
+src.dir	= src/
+plugin.version =	1.0.0.200711021
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/icons/new_db_element.gif b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/icons/new_db_element.gif
new file mode 100644
index 0000000..1d459ce
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/icons/new_db_element.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/plugin.properties b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/plugin.properties
new file mode 100644
index 0000000..ff32247
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/plugin.properties
@@ -0,0 +1,16 @@
+###############################################################################
+# Copyright (c) 2006, 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName=Eclipse Data Tools Platform IBM DB2 UDB UI iSeries Plug-in
+providerName=Eclipse Data Tools Platform
+
+profile.db2.iseries.wizard.title = DB2 for i5/OS
+profile.db2.iseries.wizard.description = Create a DB2 for i5/OS connection profile.
+profile.db2.iseries.properties = Driver Properties
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/plugin.xml b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/plugin.xml
new file mode 100644
index 0000000..c59a9c5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/plugin.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+
+   <extension
+         point="org.eclipse.datatools.connectivity.connectionProfile">
+      <newWizard
+            class="org.eclipse.datatools.enablement.ibm.db2.iseries.internal.ui.NewISeriesConnectionProfileWizard"
+            icon="icons/new_db_element.gif"
+            id="org.eclipse.datatools.enablement.ibm.db2.iseries.NewISeriesConnectionProfileWizard"
+            name="%profile.db2.iseries.wizard.title"
+            description = "%profile.db2.iseries.wizard.description"
+            profile="org.eclipse.datatools.enablement.ibm.db2.iseries.connectionProfile"/>
+   </extension>
+   <extension
+         point="org.eclipse.ui.propertyPages">
+      <page
+            class="org.eclipse.datatools.enablement.ibm.db2.iseries.internal.ui.ISeriesDBProfilePropertyPage"
+            id="org.eclipse.datatools.enablement.ibm.db2.iseries.profileProperties"
+            name="%profile.db2.iseries.properties"
+            objectClass="org.eclipse.datatools.connectivity.IConnectionProfile">
+         <filter
+               name="org.eclipse.datatools.profile.property.id"
+               value="org.eclipse.datatools.enablement.ibm.db2.iseries.connectionProfile"/>
+      </page>
+   </extension>
+   <extension
+         point="org.eclipse.datatools.connectivity.ui.driverPropertyEditor">
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.db2.iseries.other.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.db2.iseries.other.driverTemplate.password">
+      </propertyEditor>
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.db2.iseries.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.db2.iseries.driverTemplate.password">
+      </propertyEditor>
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.db2.iseries.toolbox.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.db2.iseries.toolbox.driverTemplate.password">
+      </propertyEditor>
+   </extension>
+   
+   <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.ibm.db2.iseries.internal.ui.drivers.DB2ISeriesDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.db2.iseries.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.db2.iseries.internal.ui.drivers.DB2ISeriesDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+   <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.ibm.db2.iseries.internal.ui.drivers.DB2ISeriesOtherDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.db2.iseries.other.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.db2.iseries.internal.ui.drivers.DB2ISeriesOtherDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+      <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.ibm.db2.iseries.internal.ui.drivers.DB2ISeriesToolboxDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.db2.iseries.toolbox.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.db2.iseries.internal.ui.drivers.DB2ISeriesToolboxDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+ </plugin>  
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/iseries/internal/ui/ISeriesDBProfileDetailsWizardPage.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/iseries/internal/ui/ISeriesDBProfileDetailsWizardPage.java
new file mode 100644
index 0000000..5b835c3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/iseries/internal/ui/ISeriesDBProfileDetailsWizardPage.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.iseries.internal.ui;
+
+import org.eclipse.datatools.connectivity.ui.wizards.ExtensibleProfileDetailsWizardPage;
+import org.eclipse.datatools.enablement.ibm.db2.internal.iseries.IISeriesConnectionProfileConstants;
+
+public class ISeriesDBProfileDetailsWizardPage 
+	extends ExtensibleProfileDetailsWizardPage{
+
+	public ISeriesDBProfileDetailsWizardPage(String pageName) {
+		super(pageName, IISeriesConnectionProfileConstants.DB2_ISERIES_CATEGORY_ID);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/iseries/internal/ui/ISeriesDBProfilePropertyPage.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/iseries/internal/ui/ISeriesDBProfilePropertyPage.java
new file mode 100644
index 0000000..fe502ab
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/iseries/internal/ui/ISeriesDBProfilePropertyPage.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.iseries.internal.ui;
+
+import org.eclipse.datatools.connectivity.ui.wizards.ExtensibleProfileDetailsPropertyPage;
+import org.eclipse.datatools.enablement.ibm.db2.internal.iseries.IISeriesConnectionProfileConstants;
+
+public class ISeriesDBProfilePropertyPage extends ExtensibleProfileDetailsPropertyPage {
+
+	public ISeriesDBProfilePropertyPage() {
+		super(IISeriesConnectionProfileConstants.DB2_ISERIES_CATEGORY_ID);	
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/iseries/internal/ui/NewISeriesConnectionProfileWizard.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/iseries/internal/ui/NewISeriesConnectionProfileWizard.java
new file mode 100644
index 0000000..5e4bea3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/iseries/internal/ui/NewISeriesConnectionProfileWizard.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.iseries.internal.ui;
+
+import org.eclipse.datatools.connectivity.ui.wizards.ExtensibleNewConnectionProfileWizard;
+
+public class NewISeriesConnectionProfileWizard extends ExtensibleNewConnectionProfileWizard {
+
+	public NewISeriesConnectionProfileWizard() {
+		super( new ISeriesDBProfileDetailsWizardPage("org.eclipse.datatools.enablement.ibm.db2.iseries.internal.ui.ISeriesDBProfileDetailsWizardPage"));
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/iseries/internal/ui/drivers/DB2ISeriesDriverUIContributor.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/iseries/internal/ui/drivers/DB2ISeriesDriverUIContributor.java
new file mode 100644
index 0000000..f318e92
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/iseries/internal/ui/drivers/DB2ISeriesDriverUIContributor.java
@@ -0,0 +1,614 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.iseries.internal.ui.drivers;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+import java.util.StringTokenizer;
+
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributor;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributorInformation;
+import org.eclipse.datatools.enablement.ibm.internal.ui.drivers.IBMJDBCDriverTracingOptionsPane;
+import org.eclipse.datatools.enablement.ibm.internal.ui.drivers.IIBMJDBCDriverProvider;
+import org.eclipse.jface.dialogs.DialogPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.datatools.connectivity.ui.wizards.OptionalPropertiesPane;
+
+import com.ibm.icu.text.MessageFormat;
+
+public class DB2ISeriesDriverUIContributor implements IDriverUIContributor,
+		IIBMJDBCDriverProvider, Listener {
+
+	protected String CUI_NEWCW_DATABASE_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_DATABASE_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_HOST_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_HOST_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_PORT_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_PORT_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_CONNECTIONURL_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_CONNECTIONURL_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_USERNAME_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_USERNAME_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_PASSWORD_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_PASSWORD_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_SAVE_PASSWORD_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_SAVE_PASSWORD_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_DEFAULT_SCHEMA_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_DEFAULT_SCHEMA_LBL_UI_"); //$NON-NLS-1$
+	
+	private static final String CUI_NEWCW_DRIVER_OPTIONS_TAB_UI_ = org.eclipse.datatools.enablement.ibm.internal.ui.drivers.Messages
+			.getString("CUI_NEWCW_DRIVER_OPTIONS_TAB_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_TRACING_OPTIONS_TAB_UI_ = org.eclipse.datatools.enablement.ibm.internal.ui.drivers.Messages
+			.getString("CUI_NEWCW_TRACING_OPTIONS_TAB_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_DEFAULT_SCHEMA_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_DEFAULT_SCHEMA_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+	
+	private static final String CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_URL_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_URL_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private IBMJDBCDriverTracingOptionsPane tracingOptionsComposite;
+
+	private Label databaseLabel;
+
+	private Text databaseText;
+
+	private Label hostLabel;
+
+	private Text hostText;
+
+	private Label portLabel;
+
+	private Text portText;
+
+	private Label usernameLabel;
+
+	private Text usernameText;
+
+	private Label passwordLabel;
+
+	private Text passwordText;
+
+	private Label defaultSchemaLabel;
+
+	private Text defaultSchemaText;
+	
+	private Button savePasswordButton;
+
+	private Label urlLabel;
+
+	private Text urlText;
+
+	private DialogPage parentPage;
+
+	private ScrolledComposite parentComposite;
+
+	private IDriverUIContributorInformation contributorInformation;
+
+	private Properties properties;
+	
+	private String urlOptionalParameters=""; //$NON-NLS-1$
+	
+	private boolean isReadOnly = false;
+	
+	protected OptionalPropertiesPane optionalPropsComposite;
+
+	public Composite getContributedDriverUI(Composite parent, boolean isReadOnly) {
+
+		if ((parentComposite == null) || parentComposite.isDisposed() || (this.isReadOnly != isReadOnly)) {
+			GridData gd;
+
+			this.isReadOnly = isReadOnly;
+			int additionalStyles = SWT.NONE;
+			if (isReadOnly){
+				additionalStyles = SWT.READ_ONLY;
+			}
+			
+			parentComposite = new ScrolledComposite(parent, SWT.H_SCROLL
+					| SWT.V_SCROLL);
+			parentComposite.setExpandHorizontal(true);
+			parentComposite.setExpandVertical(true);
+			parentComposite.setLayout(new GridLayout());
+
+			TabFolder tabComposite = new TabFolder(parentComposite, SWT.TOP);
+
+			TabItem driverOptionsTab = new TabItem(tabComposite, SWT.None);
+			driverOptionsTab.setText(CUI_NEWCW_DRIVER_OPTIONS_TAB_UI_);
+
+			TabItem tracingOptionsTab = new TabItem(tabComposite, SWT.None);
+			tracingOptionsTab.setText(CUI_NEWCW_TRACING_OPTIONS_TAB_UI_);
+
+			Composite driverOptionsComposite = new Composite(tabComposite,
+					SWT.NULL);
+			GridLayout layout = new GridLayout();
+			layout.numColumns = 3;
+			driverOptionsComposite.setLayout(layout);
+			driverOptionsTab.setControl(driverOptionsComposite);
+
+			tracingOptionsComposite = new IBMJDBCDriverTracingOptionsPane(
+					tabComposite, SWT.NULL, this, isReadOnly);
+			tracingOptionsTab.setControl(tracingOptionsComposite);
+
+			databaseLabel = new Label(driverOptionsComposite, SWT.NONE);
+			databaseLabel.setText(CUI_NEWCW_DATABASE_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			databaseLabel.setLayoutData(gd);
+
+			databaseText = new Text(driverOptionsComposite, SWT.SINGLE
+					| SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalAlignment = GridData.FILL;
+			gd.horizontalSpan = 2;
+			databaseText.setLayoutData(gd);
+
+			hostLabel = new Label(driverOptionsComposite, SWT.NONE);
+			hostLabel.setText(CUI_NEWCW_HOST_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			hostLabel.setLayoutData(gd);
+
+			hostText = new Text(driverOptionsComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 2;
+			gd.grabExcessHorizontalSpace = true;
+			hostText.setLayoutData(gd);
+
+			portLabel = new Label(driverOptionsComposite, SWT.NONE);
+			portLabel.setText(CUI_NEWCW_PORT_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			portLabel.setLayoutData(gd);
+
+			portText = new Text(driverOptionsComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			portText.setLayoutData(gd);
+
+			usernameLabel = new Label(driverOptionsComposite, SWT.NONE);
+			usernameLabel.setText(CUI_NEWCW_USERNAME_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			usernameLabel.setLayoutData(gd);
+
+			usernameText = new Text(driverOptionsComposite, SWT.SINGLE
+					| SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			usernameText.setLayoutData(gd);
+
+			passwordLabel = new Label(driverOptionsComposite, SWT.NONE);
+			passwordLabel.setText(CUI_NEWCW_PASSWORD_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			passwordLabel.setLayoutData(gd);
+
+			passwordText = new Text(driverOptionsComposite, SWT.SINGLE
+					| SWT.BORDER | SWT.PASSWORD | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			passwordText.setLayoutData(gd);
+
+			this.savePasswordButton = new Button(driverOptionsComposite,
+					SWT.CHECK);
+			this.savePasswordButton.setText(CUI_NEWCW_SAVE_PASSWORD_LBL_UI_); //$NON-NLS-1$
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 3;
+			gd.grabExcessHorizontalSpace = true;
+			savePasswordButton.setLayoutData(gd);
+
+			defaultSchemaLabel = new Label(driverOptionsComposite, SWT.NONE);
+			defaultSchemaLabel.setText(CUI_NEWCW_DEFAULT_SCHEMA_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			defaultSchemaLabel.setLayoutData(gd);
+
+			defaultSchemaText = new Text(driverOptionsComposite, SWT.SINGLE
+					| SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			defaultSchemaText.setLayoutData(gd);
+			
+			urlLabel = new Label(driverOptionsComposite, SWT.NONE);
+			urlLabel.setText(CUI_NEWCW_CONNECTIONURL_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			urlLabel.setLayoutData(gd);
+
+			urlText = new Text(driverOptionsComposite, SWT.MULTI | SWT.BORDER
+					| SWT.READ_ONLY | SWT.WRAP | SWT.V_SCROLL);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			gd.widthHint = 190;
+			gd.heightHint = 90;
+			urlText.setLayoutData(gd);
+			
+			// add optional properties tab
+	        TabItem optionalPropsTab = new TabItem( tabComposite, SWT.None );
+	        optionalPropsTab.setText( ConnectivityUIPlugin.getDefault()
+	                .getResourceString( "CommonDriverUIContributor.optionaltab" ) ); //$NON-NLS-1$
+            optionalPropsComposite = createOptionalPropertiesPane( tabComposite, SWT.NULL, isReadOnly );
+            optionalPropsTab.setControl( optionalPropsComposite );
+
+			parentComposite.setContent(tabComposite);
+			parentComposite.setMinSize(tabComposite.computeSize(SWT.DEFAULT,
+					SWT.DEFAULT));
+
+			initialize();
+		}
+		return parentComposite;
+	}
+
+	public void setConnectionInformation() {
+		properties.setProperty(
+				IJDBCDriverDefinitionConstants.DATABASE_NAME_PROP_ID,
+				this.databaseText.getText().trim());
+		properties.setProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID,
+				this.passwordText.getText());
+		properties.setProperty(
+				IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID, String
+						.valueOf(savePasswordButton.getSelection()));
+		properties.setProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID,
+				this.usernameText.getText());
+		properties.setProperty(
+				IJDBCConnectionProfileConstants.DEFAULT_SCHEMA_PROP_ID,
+				this.defaultSchemaText.getText().trim());
+		properties.setProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID,
+				this.urlText.getText().trim());
+		
+        optionalPropsComposite.setConnectionInformation();
+		this.contributorInformation.setProperties(properties);
+	}
+
+	public void updateURL() {
+		String url = "jdbc:db2://" + hostText.getText().trim() + ":" //$NON-NLS-1$ //$NON-NLS-2$
+				+ portText.getText().trim()
+				+ "/" + databaseText.getText().trim() //$NON-NLS-1$
+				+ ":retrieveMessagesFromServerOnGetMessage=true;"; //$NON-NLS-1$
+		url += tracingOptionsComposite.getTracingURLProperties();
+		url += getURLOptionalParameters();
+		urlText.setText(url);
+	}
+
+	private void removeListeners() {
+		databaseText.removeListener(SWT.Modify, this);
+		hostText.removeListener(SWT.Modify, this);
+		portText.removeListener(SWT.Modify, this);
+		usernameText.removeListener(SWT.Modify, this);
+		passwordText.removeListener(SWT.Modify, this);
+		savePasswordButton.removeListener(SWT.Selection, this);
+		defaultSchemaText.removeListener(SWT.Modify, this);
+	}
+
+	private void addListeners() {
+		databaseText.addListener(SWT.Modify, this);
+		hostText.addListener(SWT.Modify, this);
+		portText.addListener(SWT.Modify, this);
+		usernameText.addListener(SWT.Modify, this);
+		passwordText.addListener(SWT.Modify, this);
+		savePasswordButton.addListener(SWT.Selection, this);
+		defaultSchemaText.addListener(SWT.Modify, this);
+	}
+
+	private void initialize() {
+		updateURL();
+		addListeners();
+	}
+
+	public void handleEvent(Event event) {
+		if (isReadOnly){
+			if (event.widget == savePasswordButton){
+				savePasswordButton.setSelection(!savePasswordButton.getSelection());
+			}	
+		} else {
+			updateURL();
+			setConnectionInformation();
+		}
+	}
+
+	public boolean determineContributorCompletion() {
+		boolean isComplete = true;
+		if (databaseText.getText().trim().length() < 1) { //$NON-NLS-1$
+			parentPage.setErrorMessage(MessageFormat.format(Messages
+					.getString("CUI_NEWCW_VALIDATE_DATABASE_REQ_UI_"), //$NON-NLS-1$
+					new Object[] { Messages
+							.getString("CUI_NEWCW_DEFDBNAME_VAL_UI_") })); //$NON-NLS-1$
+			isComplete = false;
+		} else if (hostText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_HOST_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (portText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_PORT_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (usernameText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_USERID_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (passwordText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_PASSWORD_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (!tracingOptionsComposite.validateControl(parentPage)) {
+			isComplete = false;
+		} else if (!optionalPropsComposite.validateControl(parentPage)) {
+            isComplete = false;
+        } 
+
+		if (isComplete) {
+			parentPage.setErrorMessage(null);
+		}
+		return isComplete;
+	}
+
+	public void setDialogPage(DialogPage parentPage) {
+		this.parentPage = parentPage;
+	}
+
+	public void setDriverUIContributorInformation(
+			IDriverUIContributorInformation contributorInformation) {
+		this.contributorInformation = contributorInformation;
+		this.properties = contributorInformation.getProperties();
+		optionalPropsComposite.setDriverUIContributorInformation( contributorInformation );
+	}
+
+	public void loadProperties() {
+		removeListeners();
+		DB2JDBCURL url = new DB2JDBCURL(this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID));
+		hostText.setText(url.getNode());
+		portText.setText(url.getPort());
+		databaseText.setText(url.getDatabaseName());
+		String username = this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID);
+		if (username != null) {
+			usernameText.setText(username);
+		}
+		String password = this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID);
+		if (password != null) {
+			passwordText.setText(password);
+		}
+		String savePassword = this.properties
+				.getProperty(IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID);
+		if ((savePassword != null)
+				&& Boolean.valueOf(savePassword) == Boolean.TRUE) {
+			savePasswordButton.setSelection(true);
+		}
+		String defaultSchema = this.properties
+				.getProperty(IJDBCConnectionProfileConstants.DEFAULT_SCHEMA_PROP_ID);
+		if (defaultSchema != null) {
+			defaultSchemaText.setText(defaultSchema);
+		}
+		tracingOptionsComposite.loadProperties(url.getProperties());
+		
+		// load optional connection properties
+		optionalPropsComposite.loadProperties();
+		
+		updateURL();
+		addListeners();
+		setConnectionInformation();
+	}
+
+	public List getSummaryData() {
+		List summaryData = new ArrayList();
+
+		summaryData.add(new String[] { CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_,
+				this.databaseText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_,
+				this.hostText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_,
+				this.portText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_,
+				this.usernameText.getText().trim() });
+		summaryData
+				.add(new String[] {
+						CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_,
+						savePasswordButton.getSelection() ? CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_
+								: CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ });
+		summaryData.add(new String[] {
+				CUI_NEWCW_DEFAULT_SCHEMA_SUMMARY_DATA_TEXT_,
+				this.defaultSchemaText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_URL_SUMMARY_DATA_TEXT_,
+				this.urlText.getText().trim() });
+		return summaryData;
+	}
+	
+	/**
+	 * Creates an OptionalPropertiesPane.  
+	 * Extenders may override to return an extended composite.
+	 */
+	protected OptionalPropertiesPane createOptionalPropertiesPane( Composite parent, int style, 
+            boolean useReadOnlyControls )
+	{
+	    return new OptionalPropertiesPane( parent, style, useReadOnlyControls );
+	}
+
+	private class DB2JDBCURL {
+		private String subprotocol = ""; //$NON-NLS-1$
+
+		private String node = ""; //$NON-NLS-1$
+
+		private String port = ""; //$NON-NLS-1$
+
+		private String databaseName = ""; //$NON-NLS-1$
+
+		private String properties = ""; //$NON-NLS-1$
+
+		/**
+		 * @param url
+		 */
+		public DB2JDBCURL(String url) {
+			if (url != null) {
+				parseURL(url);
+			}
+		}
+
+		/**
+		 * @return Returns the databaseName.
+		 */
+		public String getDatabaseName() {
+			return databaseName;
+		}
+
+		/**
+		 * @return Returns the node.
+		 */
+		public String getNode() {
+			return node;
+		}
+
+		/**
+		 * @return Returns the subprotocol.
+		 */
+		public String getSubprotocol() {
+			return subprotocol;
+		}
+
+		private void parseURL(String url) {
+			try {
+				setURLOptionalParameters(""); //$NON-NLS-1$
+				String remainingURL = url.substring(url.indexOf(':') + 1);
+				this.subprotocol = remainingURL.substring(0, remainingURL
+						.indexOf(':'));
+				remainingURL = remainingURL
+						.substring(remainingURL.indexOf(':') + 3);
+				this.node = remainingURL
+						.substring(0, remainingURL.indexOf('/'));
+				if (this.node.indexOf(':') > -1) {
+					this.port = this.node.substring(this.node.indexOf(':') + 1);
+					this.node = this.node.substring(0, this.node.indexOf(':'));
+				}
+				remainingURL = remainingURL
+						.substring(remainingURL.indexOf('/') + 1);
+				if (remainingURL.indexOf(':') > -1) {
+					this.databaseName = remainingURL.substring(0, remainingURL
+							.indexOf(':'));
+					remainingURL = remainingURL.substring(remainingURL
+							.indexOf(':') + 1);
+					this.properties = remainingURL;
+				} else {
+					this.databaseName = remainingURL;
+				}
+				String userOptionalParameters=""; //$NON-NLS-1$
+				String userParameter = ""; //$NON-NLS-1$
+				if(remainingURL!=null && remainingURL.length()>0)
+				{
+					StringTokenizer st = new StringTokenizer(remainingURL, ";"); //$NON-NLS-1$
+					int tokenLength = st.countTokens();
+					for(int i=0; i< tokenLength; i++)
+					{
+						userParameter = st.nextToken();
+				if(userParameter!=null && userParameter.length()>0){
+							if(!(userParameter.startsWith("retrieveMessagesFromServerOnGetMessage")))
+								userOptionalParameters +=	userParameter+";"; //$NON-NLS-1$
+						}
+					}
+
+					setURLOptionalParameters(userOptionalParameters);
+				}
+			} catch (Exception e) {
+			}
+		}
+
+		/**
+		 * @return Returns the port.
+		 */
+		public String getPort() {
+			return port;
+		}
+
+		/**
+		 * @return Returns the properties.
+		 */
+		public String getProperties() {
+			return properties;
+		}
+	}
+	/**
+	 *  Sets the URL optional properties.
+	 */
+	public void setURLOptionalParameters(String connProp)
+	{
+		this.urlOptionalParameters = connProp;
+	}
+	
+	/**
+	 * @return Returns the URL optional properties.
+	 */
+	public String getURLOptionalParameters()
+	{
+		return this.urlOptionalParameters;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/iseries/internal/ui/drivers/DB2ISeriesOtherDriverUIContributor.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/iseries/internal/ui/drivers/DB2ISeriesOtherDriverUIContributor.java
new file mode 100644
index 0000000..dd0fbd8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/iseries/internal/ui/drivers/DB2ISeriesOtherDriverUIContributor.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.iseries.internal.ui.drivers;
+
+import org.eclipse.datatools.connectivity.ui.wizards.OtherDriverUIContributor;
+
+public class DB2ISeriesOtherDriverUIContributor extends OtherDriverUIContributor {
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/iseries/internal/ui/drivers/DB2ISeriesToolboxDriverUIContributor.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/iseries/internal/ui/drivers/DB2ISeriesToolboxDriverUIContributor.java
new file mode 100644
index 0000000..06c4a3f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/iseries/internal/ui/drivers/DB2ISeriesToolboxDriverUIContributor.java
@@ -0,0 +1,447 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.iseries.internal.ui.drivers;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+import java.util.StringTokenizer;
+
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributor;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributorInformation;
+import org.eclipse.datatools.enablement.ibm.internal.ui.drivers.IIBMJDBCDriverProvider;
+import org.eclipse.jface.dialogs.DialogPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Text;
+
+public class DB2ISeriesToolboxDriverUIContributor implements
+		IDriverUIContributor, IIBMJDBCDriverProvider, Listener {
+
+	private static final String CUI_NEWCW_HOST_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_HOST_LBL_UI_");
+
+	private static final String CUI_NEWCW_USERNAME_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_USERNAME_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_PASSWORD_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_PASSWORD_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_SAVE_PASSWORD_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_SAVE_PASSWORD_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_DEFAULT_SCHEMA_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_DEFAULT_SCHEMA_LBL_UI_"); //$NON-NLS-1$
+	
+	private static final String CUI_NEWCW_CONNECTIONURL_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_CONNECTIONURL_LBL_UI_");
+
+	private static final String CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_DEFAULT_SCHEMA_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_DEFAULT_SCHEMA_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+	
+	private static final String CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_URL_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_URL_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private Label hostLabel;
+
+	private Text hostText;
+
+	private Label usernameLabel;
+
+	private Text usernameText;
+
+	private Label passwordLabel;
+
+	private Text passwordText;
+
+	private Label defaultSchemaLabel;
+
+	private Text defaultSchemaText;
+	
+	private Button savePasswordButton;
+
+	private Label urlLabel;
+
+	private Text urlText;
+
+	private DialogPage parentPage;
+
+	private ScrolledComposite parentComposite;
+
+	private IDriverUIContributorInformation contributorInformation;
+
+	private Properties properties;
+	
+	private String urlOptionalParameters=""; //$NON-NLS-1$
+	
+	private boolean isReadOnly = false;
+
+	public boolean determineContributorCompletion() {
+		boolean isComplete = true;
+		if (hostText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_HOST_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (usernameText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_USERID_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (passwordText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_PASSWORD_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		}
+
+		if (isComplete) {
+			parentPage.setErrorMessage(null);
+		}
+		return isComplete;
+	}
+
+	public Composite getContributedDriverUI(Composite parent, boolean isReadOnly) {
+		if ((parentComposite == null) || parentComposite.isDisposed() || (this.isReadOnly != isReadOnly)) {
+			GridData gd;
+
+			this.isReadOnly = isReadOnly;
+			int additionalStyles = SWT.NONE;
+			if (isReadOnly){
+				additionalStyles = SWT.READ_ONLY;
+			}
+			
+			parentComposite = new ScrolledComposite(parent, SWT.H_SCROLL
+					| SWT.V_SCROLL);
+			parentComposite.setExpandHorizontal(true);
+			parentComposite.setExpandVertical(true);
+			parentComposite.setLayout(new GridLayout());
+
+			Composite baseComposite = new Composite(parentComposite, SWT.NULL);
+			GridLayout layout = new GridLayout();
+			layout.numColumns = 3;
+			baseComposite.setLayout(layout);
+
+			hostLabel = new Label(baseComposite, SWT.NONE);
+			hostLabel.setText(CUI_NEWCW_HOST_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			hostLabel.setLayoutData(gd);
+
+			hostText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 2;
+			gd.grabExcessHorizontalSpace = true;
+			hostText.setLayoutData(gd);
+
+			usernameLabel = new Label(baseComposite, SWT.NONE);
+			usernameLabel.setText(CUI_NEWCW_USERNAME_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			usernameLabel.setLayoutData(gd);
+
+			usernameText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			usernameText.setLayoutData(gd);
+
+			passwordLabel = new Label(baseComposite, SWT.NONE);
+			passwordLabel.setText(CUI_NEWCW_PASSWORD_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			passwordLabel.setLayoutData(gd);
+
+			passwordText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER
+					| SWT.PASSWORD | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			passwordText.setLayoutData(gd);
+
+			this.savePasswordButton = new Button(baseComposite, SWT.CHECK);
+			this.savePasswordButton.setText(CUI_NEWCW_SAVE_PASSWORD_LBL_UI_); //$NON-NLS-1$
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 3;
+			gd.grabExcessHorizontalSpace = true;
+			savePasswordButton.setLayoutData(gd);
+
+			defaultSchemaLabel = new Label(baseComposite, SWT.NONE);
+			defaultSchemaLabel.setText(CUI_NEWCW_DEFAULT_SCHEMA_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			defaultSchemaLabel.setLayoutData(gd);
+
+			defaultSchemaText = new Text(baseComposite, SWT.SINGLE
+					| SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			defaultSchemaText.setLayoutData(gd);
+			
+			urlLabel = new Label(baseComposite, SWT.NONE);
+			urlLabel.setText(CUI_NEWCW_CONNECTIONURL_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			urlLabel.setLayoutData(gd);
+
+			urlText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER
+					| SWT.READ_ONLY);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			urlText.setLayoutData(gd);
+
+			parentComposite.setContent(baseComposite);
+			parentComposite.setMinSize(baseComposite.computeSize(SWT.DEFAULT,
+					SWT.DEFAULT));
+
+			initialize();
+		}
+		return parentComposite;
+	}
+
+	private void initialize() {
+		updateURL();
+		addListeners();
+	}
+
+	public List getSummaryData() {
+		List summaryData = new ArrayList();
+
+		summaryData.add(new String[] { CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_,
+				this.hostText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_,
+				this.usernameText.getText().trim() });
+		summaryData
+				.add(new String[] {
+						CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_,
+						savePasswordButton.getSelection() ? CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_
+								: CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ });
+		summaryData.add(new String[] {
+				CUI_NEWCW_DEFAULT_SCHEMA_SUMMARY_DATA_TEXT_,
+				this.defaultSchemaText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_URL_SUMMARY_DATA_TEXT_,
+				this.urlText.getText().trim() });
+		return summaryData;
+	}
+
+	public void loadProperties() {
+		removeListeners();
+		DB2iSeriesJDBCURL url = new DB2iSeriesJDBCURL(this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID));
+		hostText.setText(url.getNode());
+		String username = this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID);
+		if (username != null) {
+			usernameText.setText(username);
+		}
+		String password = this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID);
+		if (password != null) {
+			passwordText.setText(password);
+		}
+		String savePassword = this.properties
+				.getProperty(IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID);
+		if ((savePassword != null)
+				&& Boolean.valueOf(savePassword) == Boolean.TRUE) {
+			savePasswordButton.setSelection(true);
+		}
+		String defaultSchema = this.properties
+		.getProperty(IJDBCConnectionProfileConstants.DEFAULT_SCHEMA_PROP_ID);
+		if (defaultSchema != null) {
+			defaultSchemaText.setText(defaultSchema);
+		}
+		updateURL();
+		addListeners();
+		setConnectionInformation();
+	}
+
+	public void setDialogPage(DialogPage parentPage) {
+		this.parentPage = parentPage;
+	}
+
+	public void setDriverUIContributorInformation(
+			IDriverUIContributorInformation contributorInformation) {
+		this.contributorInformation = contributorInformation;
+		this.properties = contributorInformation.getProperties();
+	}
+
+	public void setConnectionInformation() {
+		properties.setProperty(
+				IJDBCDriverDefinitionConstants.DATABASE_NAME_PROP_ID, this.hostText
+						.getText().trim());
+		properties.setProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID,
+				this.passwordText.getText());
+		properties.setProperty(
+				IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID, String
+						.valueOf(savePasswordButton.getSelection()));
+		properties.setProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID,
+				this.usernameText.getText());
+		properties.setProperty(
+				IJDBCConnectionProfileConstants.DEFAULT_SCHEMA_PROP_ID,
+				this.defaultSchemaText.getText().trim());
+		properties.setProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID,
+				this.urlText.getText().trim());
+		this.contributorInformation.setProperties(properties);
+	}
+
+	public void updateURL() {
+		String url = "jdbc:as400:" + hostText.getText().trim() + ";prompt=false;"; //$NON-NLS-1$ //$NON-NLS-2$
+		url += getURLOptionalParameters();
+		urlText.setText(url);
+	}
+
+	public void handleEvent(Event event) {
+		if (isReadOnly){
+			if (event.widget == savePasswordButton){
+				savePasswordButton.setSelection(!savePasswordButton.getSelection());
+			}	
+		} else {
+			updateURL();
+			setConnectionInformation();
+		}
+	}
+
+	private void addListeners() {
+		usernameText.addListener(SWT.Modify, this);
+		passwordText.addListener(SWT.Modify, this);
+		savePasswordButton.addListener(SWT.Selection, this);
+		hostText.addListener(SWT.Modify, this);
+		defaultSchemaText.addListener(SWT.Modify, this);
+	}
+
+	private void removeListeners() {
+		usernameText.removeListener(SWT.Modify, this);
+		passwordText.removeListener(SWT.Modify, this);
+		savePasswordButton.removeListener(SWT.Selection, this);
+		hostText.removeListener(SWT.Modify, this);
+		defaultSchemaText.removeListener(SWT.Modify, this);
+	}
+
+	private class DB2iSeriesJDBCURL {
+		private String subprotocol = ""; //$NON-NLS-1$
+
+		private String node = ""; //$NON-NLS-1$
+
+		private String properties = ""; //$NON-NLS-1$
+
+		/**
+		 * @param url
+		 */
+		public DB2iSeriesJDBCURL(String url) {
+			parseURL(url);
+		}
+
+		/**
+		 * @return Returns the node.
+		 */
+		public String getNode() {
+			return node;
+		}
+
+		/**
+		 * @return Returns the subprotocol.
+		 */
+		public String getSubprotocol() {
+			return subprotocol;
+		}
+
+		private void parseURL(String url) {
+			try {
+				setURLOptionalParameters(""); //$NON-NLS-1$
+				String remainingURL = url.substring(url.indexOf(':') + 1);
+				this.subprotocol = remainingURL.substring(0, remainingURL
+						.indexOf(':'));
+				remainingURL = remainingURL
+						.substring(remainingURL.indexOf(':') + 1);
+				this.node = remainingURL
+						.substring(0, remainingURL.indexOf(';'));
+				remainingURL = remainingURL
+						.substring(remainingURL.indexOf(';') + 1);
+				this.properties = remainingURL;
+				String userOptionalParameters=""; //$NON-NLS-1$
+				String userParameter = ""; //$NON-NLS-1$
+				if(remainingURL!=null && remainingURL.length()>0)
+				{
+					StringTokenizer st = new StringTokenizer(remainingURL, ";"); //$NON-NLS-1$
+					int tokenLength = st.countTokens();
+					for(int i=0; i< tokenLength; i++)
+					{
+						userParameter = st.nextToken();
+						if(userParameter!=null && userParameter.length()>0){
+							if(!(userParameter.startsWith("prompt"))) //$NON-NLS-1$
+								userOptionalParameters +=	userParameter+";";  //$NON-NLS-1$
+						}
+					}
+
+					setURLOptionalParameters(userOptionalParameters);
+				}
+			} catch (Exception e) {
+			}
+		}
+
+		/**
+		 * @return Returns the properties.
+		 */
+		public String getProperties() {
+			return properties;
+		}
+	}
+	
+	/**
+	 *  Sets the URL optional properties.
+	 */
+	public void setURLOptionalParameters(String connProp)
+	{
+		this.urlOptionalParameters = connProp;
+	}
+	
+	/**
+	 * @return Returns the URL optional properties.
+	 */
+	public String getURLOptionalParameters()
+	{
+		return this.urlOptionalParameters;
+	}
+	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/iseries/internal/ui/drivers/Messages.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/iseries/internal/ui/drivers/Messages.java
new file mode 100644
index 0000000..7ddec32
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/iseries/internal/ui/drivers/Messages.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.iseries.internal.ui.drivers;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+public class Messages {
+	private static final String BUNDLE_NAME = "org.eclipse.datatools.enablement.ibm.db2.iseries.internal.ui.drivers.messages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private Messages() {
+	}
+
+	public static String getString(String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/iseries/internal/ui/drivers/messages.properties b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/iseries/internal/ui/drivers/messages.properties
new file mode 100644
index 0000000..a717bb7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/iseries/internal/ui/drivers/messages.properties
@@ -0,0 +1,41 @@
+###############################################################################
+# Copyright (c) 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+
+#
+## iSeries Driver UI Contributor
+#
+CUI_NEWCW_DATABASE_LBL_UI_ = Databa&se:
+CUI_NEWCW_HOST_LBL_UI_ = &Host:
+CUI_NEWCW_PORT_LBL_UI_ = Port nu&mber:
+CUI_NEWCW_CONNECTIONURL_LBL_UI_= Connection UR&L:
+CUI_NEWCW_DEFDBNAME_VAL_UI_ = SAMPLE
+CUI_NEWCW_USERNAME_LBL_UI_ = User n&ame:
+CUI_NEWCW_PASSWORD_LBL_UI_ = Pass&word:
+CUI_NEWCW_SAVE_PASSWORD_LBL_UI_ = Sa&ve password
+CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_ = Database
+CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_ = Host
+CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_ = Port number
+CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_ = User name
+CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_ = Save password
+CUI_NEWCW_DEFAULT_SCHEMA_LBL_UI_ = Default schema:
+CUI_NEWCW_DEFAULT_SCHEMA_SUMMARY_DATA_TEXT_ = Default schema
+CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_ = true
+CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ = false
+CUI_NEWCW_URL_SUMMARY_DATA_TEXT_ = URL
+
+CUI_NEWCW_VALIDATE_DATABASE_REQ_UI_ = Enter a database name; for example, {0}.
+CUI_NEWCW_VALIDATE_HOST_REQ_UI_= Enter the host name for the database server.
+CUI_NEWCW_VALIDATE_PORT_REQ_UI_ = Enter the connection port number for the database server.
+CUI_NEWCW_VALIDATE_USERID_REQ_UI_ = Enter a user name.
+CUI_NEWCW_VALIDATE_PASSWORD_REQ_UI_ = Enter a password.
+
+
+
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/.classpath b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/.gitignore b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/.project b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/.project
new file mode 100644
index 0000000..f2007b8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.ibm.db2.iseries</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..73f4382
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Fri Apr 13 14:14:14 PDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.4
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..62b2387
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.datatools.enablement.ibm.db2.iseries;singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-Localization: plugin
+Bundle-Vendor: %providerName
+Export-Package: org.eclipse.datatools.enablement.ibm.db2.internal.iseries
+Require-Bundle: org.eclipse.datatools.connectivity,
+ org.eclipse.datatools.connectivity.sqm.core
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/about.html b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/about.html
new file mode 100644
index 0000000..129db9d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/build.properties b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/build.properties
new file mode 100644
index 0000000..1717542
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/build.properties
@@ -0,0 +1,15 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               plugin.properties,\
+               icons/,\
+               about.html
+src.dir	= src/
+plugin.version =	1.0.0.200706071
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/icons/jdbc_16.gif b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/icons/jdbc_16.gif
new file mode 100644
index 0000000..ef7809c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/icons/jdbc_16.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/plugin.properties b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/plugin.properties
new file mode 100644
index 0000000..7f1345c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/plugin.properties
@@ -0,0 +1,29 @@
+###############################################################################
+# Copyright (c) 2006, 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName=Eclipse Data Tools Platform IBM DB2 UDB iSeries Plug-in
+providerName=Eclipse Data Tools Platform
+
+driverClass = Driver Class
+driverVendor = Vendor
+driverVersion = Version
+driverDBName = Database Name
+driverConnectionURL = Connection URL
+driverUID = User ID
+driverPWD = Password
+
+DB2_UDB_ISERIES_CATEGORY_NAME = DB2 for i5/OS
+
+org.eclipse.datatools.enablement.ibm.db2.iseries.driverTemplate = IBM Data Server Driver for JDBC and SQLJ
+org.eclipse.datatools.enablement.ibm.db2.iseries.other.driverTemplate = Other Driver
+org.eclipse.datatools.enablement.ibm.db2.iseries.toolbox.driverTemplate = AS/400 Toolbox for Java
+
+jdbc.connection.name = JDBC Connection
+profile.db2.iseries.title = DB2 for i5/OS
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/plugin.xml b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/plugin.xml
new file mode 100644
index 0000000..72334d3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/plugin.xml
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.databaseRecognition">
+      <recognizer
+            class="org.eclipse.datatools.enablement.ibm.db2.internal.iseries.ISeriesDatabaseRecognizer">
+      </recognizer>
+   </extension>
+   <extension
+         point="org.eclipse.datatools.connectivity.connectionProfile">
+      <connectionProfile
+            category="org.eclipse.datatools.connectivity.db.category"
+            configurationType="org.eclipse.datatools.connectivity.db.generic.configurationType"
+            icon="icons/jdbc_16.gif"
+            id="org.eclipse.datatools.enablement.ibm.db2.iseries.connectionProfile"
+            name="%profile.db2.iseries.title"
+            pingFactory="org.eclipse.datatools.enablement.ibm.db2.internal.iseries.JDBCISeriesConnectionFactory"
+            propertiesPersistenceHook="org.eclipse.datatools.enablement.ibm.db2.internal.iseries.ISeriesDBPropertiesPersistenceHook"/>
+      <connectionFactory
+            class="org.eclipse.datatools.enablement.ibm.db2.internal.iseries.JDBCISeriesConnectionFactory"
+            id="java.sql.Connection"
+            name="%jdbc.connection.name"
+            profile="org.eclipse.datatools.enablement.ibm.db2.iseries.connectionProfile"/>
+   </extension>
+   
+	<extension
+         point="org.eclipse.datatools.connectivity.driverExtension">    
+         <category
+      		parentCategory="org.eclipse.datatools.connectivity.db.driverCategory"
+            id="org.eclipse.datatools.enablement.ibm.db2.iseries.driverCategory"
+            name="%DB2_UDB_ISERIES_CATEGORY_NAME"/>
+  
+	  <driverTemplate
+            createDefault="false"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.enablement.ibm.db2.iseries.toolbox.driverTemplate"
+            jarList="jt400.jar"
+            name="%org.eclipse.datatools.enablement.ibm.db2.iseries.toolbox.driverTemplate"
+            parentCategory="org.eclipse.datatools.enablement.ibm.db2.iseries.driverCategory">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%driverClass"
+                  value="com.ibm.as400.access.AS400JDBCDriver"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%driverVendor"
+                  value="DB2 UDB iSeries"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%driverVersion"
+                  value="V5R3"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%driverDBName"
+                  value="host"
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%driverConnectionURL"
+                  value="jdbc:as400:host;prompt=false"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%driverUID"
+                  value=""
+                  required="false"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%driverPWD"
+                  required="false"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+
+      <driverTemplate
+            createDefault="false"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.enablement.ibm.db2.iseries.driverTemplate"
+            jarList="C:\Program Files\IBM\SQLLIB\java\db2jcc.jar;C:\Program Files\IBM\SQLLIB\java\db2jcc_license_cisuz.jar"
+            name="%org.eclipse.datatools.enablement.ibm.db2.iseries.driverTemplate"
+            parentCategory="org.eclipse.datatools.enablement.ibm.db2.iseries.driverCategory">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%driverClass"
+                  value="com.ibm.db2.jcc.DB2Driver"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%driverVendor"
+                  value="DB2 UDB iSeries"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%driverVersion"
+                  value="V5R3"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%driverDBName"
+                  value="database"
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%driverConnectionURL"
+                  value="jdbc:db2://host:446/database:retrieveMessagesFromServerOnGetMessage=true;"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%driverUID"
+                  value=""
+                  required="false"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%driverPWD"
+                  required="false"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+
+      <driverTemplate
+            createDefault="false"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.enablement.ibm.db2.iseries.other.driverTemplate"
+            jarList=""
+            name="%org.eclipse.datatools.enablement.ibm.db2.iseries.other.driverTemplate"
+            parentCategory="org.eclipse.datatools.enablement.ibm.db2.iseries.driverCategory">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%driverClass"
+                  value=""
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%driverVendor"
+                  value="DB2 UDB iSeries"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%driverVersion"
+                  value="V5R3"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%driverDBName"
+                  value=""
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%driverConnectionURL"
+                  value=""
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%driverUID"
+                  value=""
+                  required="false"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%driverPWD"
+                  required="false"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+   </extension>
+ <extension
+       point="org.eclipse.datatools.connectivity.sqm.core.mappings">
+    <providerIDtoDriverCategoryID
+          driverCategoryID="org.eclipse.datatools.enablement.ibm.db2.iseries.driverCategory"
+          providerID="org.eclipse.datatools.enablement.ibm.db2.iseries.connectionProfile">
+    </providerIDtoDriverCategoryID>
+ </extension>
+ </plugin>  
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/iseries/IISeriesConnectionProfileConstants.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/iseries/IISeriesConnectionProfileConstants.java
new file mode 100644
index 0000000..d820ca6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/iseries/IISeriesConnectionProfileConstants.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.internal.iseries;
+
+
+public interface IISeriesConnectionProfileConstants {
+
+	public static final String DB2_ISERIES_CATEGORY_ID = "org.eclipse.datatools.enablement.ibm.db2.iseries.driverCategory"; //$NON-NLS-1$
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/iseries/ISeriesDBPropertiesPersistenceHook.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/iseries/ISeriesDBPropertiesPersistenceHook.java
new file mode 100644
index 0000000..2e121e3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/iseries/ISeriesDBPropertiesPersistenceHook.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.internal.iseries;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.drivers.jdbc.JDBCPasswordPropertyPersistenceHook;
+
+
+public class ISeriesDBPropertiesPersistenceHook extends
+		JDBCPasswordPropertyPersistenceHook {
+	
+	public boolean arePropertiesComplete(Properties props) {
+		return super.arePropertiesComplete(props) && areUserNameAndPasswordComplete(props);
+	}
+
+	private boolean areUserNameAndPasswordComplete(Properties props) {
+		String userid = props.getProperty(
+			IJDBCConnectionProfileConstants.USERNAME_PROP_ID, null);
+		String passwd = props.getProperty(
+				IJDBCConnectionProfileConstants.PASSWORD_PROP_ID, null);
+		return userid != null && userid.trim().length() > 0 && passwd != null
+			&& passwd.trim().length() > 0;
+	}
+
+	public String getConnectionPropertiesPageID() {
+		return "org.eclipse.datatools.enablement.ibm.db2.iseries.profileProperties"; //$NON-NLS-1$
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/iseries/ISeriesDatabaseRecognizer.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/iseries/ISeriesDatabaseRecognizer.java
new file mode 100644
index 0000000..ed37a91
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/iseries/ISeriesDatabaseRecognizer.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.internal.iseries;
+
+import java.sql.Connection;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.internal.core.definition.DatabaseDefinitionRegistryImpl;
+import org.eclipse.datatools.connectivity.sqm.internal.core.definition.IDatabaseRecognizer;
+
+public class ISeriesDatabaseRecognizer implements IDatabaseRecognizer {
+    private static final String PRODUCT = "DB2 UDB iSeries"; //$NON-NLS-1$
+    
+    public DatabaseDefinition recognize(Connection connection) {
+        try {
+            String version = connection.getMetaData().getDatabaseProductVersion();          
+            // Support for the version string returned by the Toolbox for Java driver
+            if (version.indexOf("V5R1") > -1){ //$NON-NLS-1$
+                return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, "V5R1"); //$NON-NLS-1$
+            }
+            else if (version.indexOf("V5R2") > -1){ //$NON-NLS-1$
+                return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, "V5R2"); //$NON-NLS-1$
+            }
+            else if (version.indexOf("V5R3") > -1){ //$NON-NLS-1$
+                return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, "V5R3"); //$NON-NLS-1$
+            }
+            // Support for the version string returned by the Universal driver
+            else if (version.indexOf("V05R01") > -1){ //$NON-NLS-1$
+                return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, "V5R1"); //$NON-NLS-1$
+            }
+            else if (version.indexOf("V05R02") > -1){ //$NON-NLS-1$
+                return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, "V5R2"); //$NON-NLS-1$
+            }
+            else if (version.indexOf("V05R03") > -1){ //$NON-NLS-1$
+                return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, "V5R3"); //$NON-NLS-1$
+            }            
+            // Not sure what driver this code is supporting
+            else if(version.startsWith("QSQ050")) { //$NON-NLS-1$
+                    char r = version.charAt(6);
+                    if(r == '1') {
+                        return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, "V5R1");                     //$NON-NLS-1$
+                    }
+                    else if(r == '2') {
+                        return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, "V5R2"); //$NON-NLS-1$
+                    }
+                    else if (r == '3'){
+                        return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, "V5R3"); //$NON-NLS-1$
+                    }
+                    else if(r == '4') {
+                        return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, "V5R4"); //$NON-NLS-1$
+                    }
+                }
+        }
+        catch (Exception e) {
+        }
+
+        return null;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/iseries/JDBCISeriesConnectionFactory.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/iseries/JDBCISeriesConnectionFactory.java
new file mode 100644
index 0000000..3ba8147
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/iseries/JDBCISeriesConnectionFactory.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.datatools.enablement.ibm.db2.internal.iseries;
+
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionFactory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+
+public class JDBCISeriesConnectionFactory implements IConnectionFactory {
+
+	public JDBCISeriesConnectionFactory() {
+		super();
+	}
+
+	public IConnection createConnection(IConnectionProfile profile) {
+		JDBCISeriesJDBCConnection connection = new JDBCISeriesJDBCConnection(profile,
+				getClass());
+		connection.open();
+		return connection;
+	}
+
+	public IConnection createConnection(IConnectionProfile profile, String uid,
+			String pwd) {
+		return createConnection(profile);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/iseries/JDBCISeriesJDBCConnection.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/iseries/JDBCISeriesJDBCConnection.java
new file mode 100644
index 0000000..ff8a45d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.iseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/iseries/JDBCISeriesJDBCConnection.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.internal.iseries;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.SQLException;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.Version;
+import org.eclipse.datatools.connectivity.drivers.jdbc.JDBCConnection;
+import org.eclipse.datatools.connectivity.exceptions.DBNotStartException;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinitionRegistry;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+
+public class JDBCISeriesJDBCConnection extends JDBCConnection {
+
+	private Version techVersion = Version.NULL_VERSION;
+	private Version serverVersion = Version.NULL_VERSION;
+	private String serverName;
+	
+	public JDBCISeriesJDBCConnection(IConnectionProfile profile, Class factoryClass) {
+		super(profile, factoryClass);
+	}
+	
+	public String getProviderName() {
+		return serverName;
+	}
+
+	public Version getProviderVersion() {
+		return serverVersion;
+	}
+
+	public Version getTechnologyVersion() {
+		return techVersion;
+	}
+
+	protected void initVersions() {
+		try {
+			DatabaseMetaData dbmd = ((Connection) this.getRawConnection())
+					.getMetaData();
+			try {
+				DatabaseDefinitionRegistry dbDefRegistry = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry();			
+				DatabaseDefinition dbDef = dbDefRegistry.recognize((Connection) this.getRawConnection());
+				if (dbDef != null) {
+					serverName = dbDef.getProductDisplayString() + " " + dbDef.getVersionDisplayString();
+				}
+			} catch (Exception e) {
+			}
+			try {
+				techVersion = new Version(dbmd.getJDBCMajorVersion(), dbmd
+						.getJDBCMinorVersion(), 0, new String());
+			} catch (Exception e) {
+			}
+		} catch (SQLException e) {
+		}
+	}
+	
+	public Throwable getConnectException() {
+	    Throwable exception = super.getConnectException();
+	    if((exception != null)
+	            &&(exception instanceof SQLException)
+	            &&(((SQLException)exception).getErrorCode()==-4499)
+	            &&(exception.getCause() instanceof java.net.ConnectException)){
+	        exception = new DBNotStartException(exception);
+	    }
+	    return exception ;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/.gitignore b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/.gitignore
new file mode 100644
index 0000000..60463af
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/.gitignore
@@ -0,0 +1,2 @@
+bin
+build.xml
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/.project b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/.project
new file mode 100644
index 0000000..df998bf
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/.project
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..b539725
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition; singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-ActivationPolicy: lazy
+
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/about.html b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/build.properties b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/build.properties
new file mode 100644
index 0000000..9972704
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/build.properties
@@ -0,0 +1,16 @@
+###############################################################################
+# Copyright (c) 2001, 2014 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+bin.includes = plugin.xml,\
+               runtime/,\
+               plugin.properties,\
+               about.html,\
+               META-INF/
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/plugin.properties b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/plugin.properties
new file mode 100644
index 0000000..075fe8b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/plugin.properties
@@ -0,0 +1,46 @@
+###############################################################################
+# Copyright (c) 2001, 2004 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+
+pluginName = Eclipse Data Tools Platform DB2 UDB Database Definition Plug-in
+nl1PluginName = Eclipse Data Tools Platform DB2 UDB Database Definition NL1 Fragment
+providerName = Eclipse Data Tools Platform
+
+V81Description = IBM DB2 UDB for Linux, UNIX, and Windows Version 8.1
+V81ProductString = DB2 for Linux, UNIX, and Windows
+V81VersionString = V8.1
+
+V82Description = IBM DB2 UDB for Linux, UNIX, and Windows Version 8.2
+V82ProductString = DB2 for Linux, UNIX, and Windows
+V82VersionString = V8.2
+
+V91Description = IBM DB2 UDB for Linux, UNIX, and Windows Version 9.1
+V91ProductString = DB2 for Linux, UNIX, and Windows
+V91VersionString = V9.1
+
+V95Description = IBM DB2 for Linux, UNIX, and Windows Version 9.5
+V95ProductString = DB2 for Linux, UNIX, and Windows
+V95VersionString = V9.5
+
+V97Description = IBM DB2 for Linux, UNIX, and Windows Version 9.7
+V97ProductString = DB2 for Linux, UNIX, and Windows
+V97VersionString = V9.7
+
+V98Description = IBM DB2 for Linux, UNIX, and Windows Version 9.8
+V98ProductString = DB2 for Linux, UNIX, and Windows
+V98VersionString = V9.8
+
+V101Description = IBM DB2 for Linux, UNIX, and Windows Version 10.1
+V101ProductString = DB2 for Linux, UNIX, and Windows
+V101VersionString = V10.1
+
+V105Description = IBM DB2 for Linux, UNIX, and Windows Version 10.5
+V105ProductString = DB2 for Linux, UNIX, and Windows
+V105VersionString = V10.5
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/plugin.xml b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/plugin.xml
new file mode 100644
index 0000000..f8d964a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/plugin.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.databaseDefinition">
+      <definition
+            product="DB2 UDB"
+            version="V8.1"
+            description="%V81Description"
+            productDisplayString="%V81ProductString"
+            versionDisplayString="%V81VersionString"
+            file="runtime/vendors/DB2 UDB_8.1/DB2 UDB_8.1.xmi">
+      </definition>
+      <definition
+            product="DB2 UDB"
+            version="V8.2"
+            description="%V82Description"
+            productDisplayString="%V82ProductString"
+            versionDisplayString="%V82VersionString"
+            file="runtime/vendors/DB2 UDB_8.2/DB2 UDB_8.2.xmi">
+      </definition>
+      <definition
+            product="DB2 UDB"
+            version="V9.1"
+            description="%V91Description"
+            productDisplayString="%V91ProductString"
+            versionDisplayString="%V91VersionString"
+            file="runtime/vendors/DB2 UDB_9.1/DB2 UDB_9.1.xmi">
+      </definition>
+      <definition
+            product="DB2 UDB"
+            productDisplayString="%V95ProductString"
+            description="%V95Description"
+            versionDisplayString="%V95VersionString"
+            version="V9.5"
+            file="runtime/vendors/DB2 UDB_9.5/DB2 UDB_9.5.xmi">
+      </definition>
+      <definition
+            description="%V97Description"
+            file="runtime/vendors/DB2 UDB_9.7/DB2 UDB_9.7.xmi"
+            product="DB2 UDB"
+            productDisplayString="%V97ProductString"
+            version="V9.7"
+            versionDisplayString="%V97VersionString">
+      </definition>
+      <definition
+            description="%V98Description"
+            file="runtime/vendors/DB2 UDB_9.8/DB2 UDB_9.8.xmi"
+            product="DB2 UDB"
+            productDisplayString="%V98ProductString"
+            version="V9.8"
+            versionDisplayString="%V98VersionString">
+      </definition>
+      <definition
+            description="%V101Description"
+            file="runtime/vendors/DB2 UDB_10.1/DB2 UDB_10.1.xmi"
+            product="DB2 UDB"
+            productDisplayString="%V101ProductString"
+            version="V10.1"
+            versionDisplayString="%V101VersionString">
+      </definition>
+      <definition
+            description="%V105Description"
+            file="runtime/vendors/DB2 UDB_10.5/DB2 UDB_10.5.xmi"
+            product="DB2 UDB"
+            productDisplayString="%V105ProductString"
+            version="V10.5"
+            versionDisplayString="%V105VersionString">
+      </definition>
+   </extension>
+   
+</plugin>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/runtime/vendors/DB2 UDB_10.1/DB2 UDB_10.1.xmi b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/runtime/vendors/DB2 UDB_10.1/DB2 UDB_10.1.xmi
new file mode 100644
index 0000000..190f491
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/runtime/vendors/DB2 UDB_10.1/DB2 UDB_10.1.xmi
@@ -0,0 +1,1494 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="DB2 UDB" version="V10.1" maximumIdentifierLength="8" viewTriggerSupported="true" maximumCommentLength="64" sequenceSupported="true" mQTSupported="true" aliasSupported="true" userDefinedTypeSupported="true" SQLStatementSupported="true" nicknameSupported="true" xmlSupported="true" packageSupported="true" roleSupported="true" groupSupported="true" userSupported="true" roleAuthorizationSupported="true" constructedDataTypeSupported="true" mQTIndexSupported="true">
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="long">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIGINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_1" lengthSupported="true" maximumLength="2147483647" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob" defaultLength="1048576" lengthUnit="BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="127" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String" defaultLength="1" lengthUnit="DOUBLE_BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>GRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="16336" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String" defaultLength="32" lengthUnit="DOUBLE_BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARGRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_2" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARGRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="254" jdbcEnumType="1" javaClassName="java.lang.String" defaultLength="1">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR</name>
+    <name>CHARACTER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" lengthSupported="true" maximumLength="2147483647" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob" defaultLength="1048576" lengthUnit="BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CLOB</name>
+    <name>CHARACTER LARGE OBJECT</name>
+    <name>CHAR LARGE OBJECT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_LARGE_OBJECT_1" lengthSupported="true" maximumLength="1073741823" primitiveType="NATIONAL_CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob" defaultLength="1048576" lengthUnit="DOUBLE_BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DBCLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="32672" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String" defaultLength="32">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR</name>
+    <name>CHARACTER VARYING</name>
+    <name>CHAR VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_2" primitiveType="CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>CURRENT DATE</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" scaleSupported="true" precisionSupported="true" keyConstraintSupported="true" identitySupported="true" maximumPrecision="31" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal" defaultPrecision="5">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_2" precisionSupported="true" keyConstraintSupported="true" maximumPrecision="34" primitiveType="FLOAT" jdbcEnumType="3" javaClassName="java.math.BigDecimal" defaultPrecision="34">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECFLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE</name>
+    <name>DOUBLE PRECISION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" precisionSupported="true" keyConstraintSupported="true" maximumPrecision="53" primitiveType="FLOAT" jdbcEnumType="6" javaClassName="double" defaultPrecision="53" cutoffPrecision="25">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INTEGER</name>
+    <name>INT</name>
+    <name>BINARY_INTEGER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATALINK_1" lengthSupported="true" maximumLength="200" primitiveType="DATALINK" jdbcEnumType="70" javaClassName="java.net.URL" defaultLength="200" lengthUnit="BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATALINK</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" scaleSupported="true" precisionSupported="true" keyConstraintSupported="true" identitySupported="true" maximumPrecision="31" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal" defaultPrecision="5">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+    <name>NUM</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIME_1" keyConstraintSupported="true" primitiveType="TIME" jdbcEnumType="92" javaClassName="java.sql.Time">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>CURRENT TIME</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" precisionSupported="true" keyConstraintSupported="true" maximumPrecision="12" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp" defaultPrecision="6">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>CURRENT TIMESTAMP</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="254" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]" defaultLength="1" displayName="CHAR ({0}) FOR BIT DATA" displayNameSupported="true">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR FOR BIT DATA</name>
+    <name>CHARACTER FOR BIT DATA</name>
+    <name>CHAR () FOR BIT DATA</name>
+    <name>CHARACTER () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="32672" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]" defaultLength="1" displayName="VARCHAR ({0}) FOR BIT DATA" displayNameSupported="true">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR FOR BIT DATA</name>
+    <name>CHARACTER VARYING FOR BIT DATA</name>
+    <name>CHAR VARYING FOR BIT DATA</name>
+    <name>VARCHAR () FOR BIT DATA</name>
+    <name>CHARACTER VARYING () FOR BIT DATA</name>
+    <name>CHAR VARYING () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_2" primitiveType="BINARY_VARYING" jdbcEnumType="-4" javaClassName="byte[]">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARCHAR FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="XML_TYPE_1" primitiveType="XML_TYPE" jdbcEnumType="1111" orderingSupported="false" groupingSupported="false">
+    <name>XML</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions scaleSupported="true" precisionSupported="true" keyConstraintSupported="true" identitySupported="true" defaultSupported="false" maximumPrecision="31" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMBER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions lengthSupported="true" keyConstraintSupported="true" defaultSupported="false" maximumLength="32672" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String" defaultLength="4096">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR2</name>
+  </predefinedDataTypeDefinitions>
+  <tableSpaceDefinition typeSupported="true" extentSizeSupported="true" prefetchSizeSupported="true" managedBySupported="true" pageSizeSupported="true" bufferPoolSupported="true" maximumIdentifierLength="18">
+    <tableSpaceType>REGULAR</tableSpaceType>
+    <tableSpaceType>TEMPORARY</tableSpaceType>
+    <tableSpaceType>LARGE</tableSpaceType>
+  </tableSpaceDefinition>
+  <storedProcedureDefinition nullInputActionSupported="true" determininsticSupported="true" returnedNullSupported="true" parameterStyleSupported="true" maximumIdentifierLength="128">
+    <predefinedDataTypeDefinitions xmi:id="BOOLEAN_1" primitiveType="BOOLEAN" jdbcEnumType="-7" javaClassName="boolean">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>BOOLEAN</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="CURSOR_1" primitiveType="DATALINK" jdbcEnumType="-100008">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>CURSOR</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="INTEGER_2" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>PLS_INTEGER</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="INTEGER_3" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>BINARY_INTEGER</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="XML_TYPE_2" primitiveType="XML_TYPE" jdbcEnumType="1111" javaClassName="java.sql.Clob">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>XMLTYPE</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="BINARY_2" lengthSupported="true" maximumLength="32767" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]" defaultLength="32767">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>RAW</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_3" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>LONG RAW</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_LARGE_OBJECT_2" primitiveType="NATIONAL_CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>NCLOB</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_2" lengthSupported="true" maximumLength="2000" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String" defaultLength="127">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>NCHAR</name>
+      <name>NATIONAL CHARACTER</name>
+      <name>NATIONAL CHAR</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_3" lengthSupported="true" maximumLength="4000" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String" defaultLength="2048">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>NVARCHAR2</name>
+      <name>NATIONAL CHARACTER VARYING</name>
+      <name>NATIONAL CHAR VARYING</name>
+      <name>NCHAR VARYING</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="INTEGER_4" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>NATURAL</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="CURSOR_2" primitiveType="DATALINK" jdbcEnumType="-100008">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>SYS_REFCURSOR</name>
+      <name>REFCURSOR</name>
+      <name>REF CURSOR</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_3" lengthSupported="true" bitDataSupported="true" maximumLength="4000" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String" defaultLength="1" displayName="STRING({0})" displayNameSupported="true" lengthSemanticSupported="true">
+      <defaultValueTypes>USER</defaultValueTypes>
+      <defaultValueTypes>UID</defaultValueTypes>
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>STRING</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="INTEGER_5" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>POSITIVE</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="INTEGER_6" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>SIGNTYPE</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <languageType>SQL</languageType>
+    <languageType>JAVA</languageType>
+    <languageType>C</languageType>
+    <languageType>COBOL</languageType>
+    <languageType>ASSEMBLY</languageType>
+    <languageType>PLI</languageType>
+    <functionLanguageType>SQL</functionLanguageType>
+    <functionLanguageType>JAVA</functionLanguageType>
+    <functionLanguageType>C</functionLanguageType>
+    <functionLanguageType>OLE</functionLanguageType>
+    <procedureType>PROCEDURE</procedureType>
+    <procedureType>FUNCTION</procedureType>
+  </storedProcedureDefinition>
+  <triggerDefinition granularitySupported="true" referencesClauseSupported="true" perColumnUpdateTriggerSupported="true" rowTriggerReferenceSupported="true" tableTriggerReferenceSupported="true" maximumIdentifierLength="128"/>
+  <columnDefinition identitySupported="true" identityStartValueSupported="true" identityIncrementSupported="true" identityMinimumSupported="true" identityMaximumSupported="true" identityCycleSupported="true" maximumIdentifierLength="128"/>
+  <constraintDefinition informationalConstraintSupported="true" clusteredPrimaryKeySupported="true" clusteredUniqueConstraintSupported="true" maximumPrimaryKeyIdentifierLength="128" maximumForeignKeyIdentifierLength="128" maximumCheckConstraintIdentifierLength="128">
+    <parentUpdateDRIRuleType>RESTRICT</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>RESTRICT</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>SET_NULL</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+    <checkOption>NONE</checkOption>
+    <checkOption>LOCAL</checkOption>
+    <checkOption>CASCADE</checkOption>
+  </constraintDefinition>
+  <indexDefinition clusteringSupported="true" includedColumnsSupported="true" maximumIdentifierLength="128"/>
+  <tableDefinition maximumIdentifierLength="128"/>
+  <sequenceDefinition predefinedDataTypeDefinitions="BIGINT_1 INTEGER_1 SMALLINT_1 DECIMAL_1" defaultDataTypeDefinition="INTEGER_1" typeEnumerationSupported="true" cacheSupported="true" orderSupported="true" noMaximumValueString="NO MAXVALUE" noMinimumValueString="NO MINVALUE" noCacheString="NO CACHE" cacheDefaultValue="20"/>
+  <udtDefinition distinctTypeSupported="true" structuredTypeSupported="true" maximumIdentifierLength="128"/>
+  <queryDefinition/>
+  <SQLSyntaxDefinition>
+    <keywords>ACCESS</keywords>
+    <keywords>ACCESSCTRL</keywords>
+    <keywords>ACCORDING</keywords>
+    <keywords>ACCTNG</keywords>
+    <keywords>ACTION</keywords>
+    <keywords>ACTIVATE</keywords>
+    <keywords>ACTIVATED</keywords>
+    <keywords>ACTIVE</keywords>
+    <keywords>ACTIVITIES</keywords>
+    <keywords>ACTIVITY</keywords>
+    <keywords>ACTIVITYMETRICS</keywords>
+    <keywords>ACTIVITYSTMT</keywords>
+    <keywords>ACTIVITYTOTALTIME</keywords>
+    <keywords>ACTIVITYVALS</keywords>
+    <keywords>ACTUALS</keywords>
+    <keywords>ADAPTIVE</keywords>
+    <keywords>ADD</keywords>
+    <keywords>ADDRESS</keywords>
+    <keywords>ADMIN</keywords>
+    <keywords>ADMINISTRATION</keywords>
+    <keywords>AFTER</keywords>
+    <keywords>AGE</keywords>
+    <keywords>AGENT</keywords>
+    <keywords>AGGREGATE</keywords>
+    <keywords>AGGSQLTEMPSPACE</keywords>
+    <keywords>ALIAS</keywords>
+    <keywords>ALL</keywords>
+    <keywords>ALLOCATE</keywords>
+    <keywords>ALLOW</keywords>
+    <keywords>ALTER</keywords>
+    <keywords>ALTERIN</keywords>
+    <keywords>ALWAYS</keywords>
+    <keywords>ANCHOR</keywords>
+    <keywords>AND</keywords>
+    <keywords>ANY</keywords>
+    <keywords>APPEND</keywords>
+    <keywords>APPLICATION</keywords>
+    <keywords>APPLNAME</keywords>
+    <keywords>APPL_ID</keywords>
+    <keywords>APPL_NAME</keywords>
+    <keywords>APREUSE</keywords>
+    <keywords>ARRAY</keywords>
+    <keywords>ARRAY_AGG</keywords>
+    <keywords>ARRAY_EXISTS</keywords>
+    <keywords>AS</keywords>
+    <keywords>ASC</keywords>
+    <keywords>ASCII</keywords>
+    <keywords>ASENSITIVE</keywords>
+    <keywords>ASSOCIATE</keywords>
+    <keywords>AST</keywords>
+    <keywords>ASUTIME</keywords>
+    <keywords>ASYNCHRONY</keywords>
+    <keywords>AT</keywords>
+    <keywords>ATOMIC</keywords>
+    <keywords>ATTACH</keywords>
+    <keywords>ATTRIBUTE</keywords>
+    <keywords>ATTRIBUTES</keywords>
+    <keywords>AUDIT</keywords>
+    <keywords>AUTHENTICATION</keywords>
+    <keywords>AUTHID</keywords>
+    <keywords>AUTHORIZATION</keywords>
+    <keywords>AUTHORIZATIONS</keywords>
+    <keywords>AUTHORIZED</keywords>
+    <keywords>AUTH_ID</keywords>
+    <keywords>AUTOMATIC</keywords>
+    <keywords>AUTONOMOUS</keywords>
+    <keywords>AUTONOMOUS_TRANSACTION</keywords>
+    <keywords>AUTORESIZE</keywords>
+    <keywords>AUTOSTART</keywords>
+    <keywords>B</keywords>
+    <keywords>BACKUP</keywords>
+    <keywords>BASE</keywords>
+    <keywords>BASE64</keywords>
+    <keywords>BASED</keywords>
+    <keywords>BEFORE</keywords>
+    <keywords>BEGIN</keywords>
+    <keywords>BERNOULLI</keywords>
+    <keywords>BETWEEN</keywords>
+    <keywords>BIGINT</keywords>
+    <keywords>BIN</keywords>
+    <keywords>BINARY</keywords>
+    <keywords>BINARY_INTEGER</keywords>
+    <keywords>BIND</keywords>
+    <keywords>BINDADD</keywords>
+    <keywords>BIT</keywords>
+    <keywords>BLOB</keywords>
+    <keywords>BLOCKED</keywords>
+    <keywords>BLOCKINSERT</keywords>
+    <keywords>BLOCKSIZE</keywords>
+    <keywords>BODY</keywords>
+    <keywords>BOOLEAN</keywords>
+    <keywords>BOTH</keywords>
+    <keywords>BUFFER</keywords>
+    <keywords>BUFFERPOOL</keywords>
+    <keywords>BUFFERPOOLS</keywords>
+    <keywords>BUFFERSIZE</keywords>
+    <keywords>BUILD</keywords>
+    <keywords>BULK</keywords>
+    <keywords>BUSINESS_TIME</keywords>
+    <keywords>BY</keywords>
+    <keywords>BYPASS</keywords>
+    <keywords>BYTE</keywords>
+    <keywords>C</keywords>
+    <keywords>CACHE</keywords>
+    <keywords>CACHING</keywords>
+    <keywords>CALL</keywords>
+    <keywords>CALLED</keywords>
+    <keywords>CALLER</keywords>
+    <keywords>CAPTURE</keywords>
+    <keywords>CARDINALITIES</keywords>
+    <keywords>CARDINALITY</keywords>
+    <keywords>CASCADE</keywords>
+    <keywords>CASCADED</keywords>
+    <keywords>CASE</keywords>
+    <keywords>CAST</keywords>
+    <keywords>CATEGORIES</keywords>
+    <keywords>CCSID</keywords>
+    <keywords>CFGALL</keywords>
+    <keywords>CHANGE</keywords>
+    <keywords>CHANGED</keywords>
+    <keywords>CHANGES</keywords>
+    <keywords>CHANGESUMMARY</keywords>
+    <keywords>CHAR</keywords>
+    <keywords>CHARACTER</keywords>
+    <keywords>CHECK</keywords>
+    <keywords>CHECKED</keywords>
+    <keywords>CHECKING</keywords>
+    <keywords>CLASS</keywords>
+    <keywords>CLIENT</keywords>
+    <keywords>CLIENT_ACCTNG</keywords>
+    <keywords>CLIENT_APPLNAME</keywords>
+    <keywords>CLIENT_USERID</keywords>
+    <keywords>CLIENT_WRKSTNNAME</keywords>
+    <keywords>CLOB</keywords>
+    <keywords>CLOSE</keywords>
+    <keywords>CLR</keywords>
+    <keywords>CLUSTER</keywords>
+    <keywords>COBOL</keywords>
+    <keywords>CODEUNITS16</keywords>
+    <keywords>CODEUNITS32</keywords>
+    <keywords>COLLECT</keywords>
+    <keywords>COLLID</keywords>
+    <keywords>COLUMN</keywords>
+    <keywords>COLUMNS</keywords>
+    <keywords>COMM</keywords>
+    <keywords>COMMENT</keywords>
+    <keywords>COMMIT</keywords>
+    <keywords>COMMITTED</keywords>
+    <keywords>COMPACT</keywords>
+    <keywords>COMPARE</keywords>
+    <keywords>COMPARISONS</keywords>
+    <keywords>COMPILATION</keywords>
+    <keywords>COMPILEDFUNCTION</keywords>
+    <keywords>COMPILEDTRIGGER</keywords>
+    <keywords>COMPONENT</keywords>
+    <keywords>COMPONENTS</keywords>
+    <keywords>COMPOUND</keywords>
+    <keywords>COMPRESS</keywords>
+    <keywords>COMPRESSION</keywords>
+    <keywords>CONCAT</keywords>
+    <keywords>CONCURRENTDBCOORDACTIVITIES</keywords>
+    <keywords>CONCURRENTWORKLOADACTIVITIES</keywords>
+    <keywords>CONCURRENTWORKLOADOCCURRENCES</keywords>
+    <keywords>CONDITION</keywords>
+    <keywords>CONN</keywords>
+    <keywords>CONNECT</keywords>
+    <keywords>CONNECTION</keywords>
+    <keywords>CONNECTIONIDLETIME</keywords>
+    <keywords>CONNECTIONS</keywords>
+    <keywords>CONNECTOPT</keywords>
+    <keywords>CONNECT_BY_ROOT</keywords>
+    <keywords>CONNHEADER</keywords>
+    <keywords>CONNMEMUSE</keywords>
+    <keywords>CONSERVATIVE</keywords>
+    <keywords>CONSTANT</keywords>
+    <keywords>CONSTRAINT</keywords>
+    <keywords>CONSTRAINTS</keywords>
+    <keywords>CONSTRUCTOR</keywords>
+    <keywords>CONTAINERS</keywords>
+    <keywords>CONTAINS</keywords>
+    <keywords>CONTENT</keywords>
+    <keywords>CONTEXT</keywords>
+    <keywords>CONTINUE</keywords>
+    <keywords>CONTROL</keywords>
+    <keywords>CONVERT</keywords>
+    <keywords>COORDINATOR</keywords>
+    <keywords>COPY</keywords>
+    <keywords>CORRELATOR</keywords>
+    <keywords>COUNT</keywords>
+    <keywords>COUNT_BIG</keywords>
+    <keywords>CPU</keywords>
+    <keywords>CPUTIME</keywords>
+    <keywords>CPUTIMEINSC</keywords>
+    <keywords>CREATE</keywords>
+    <keywords>CREATEIN</keywords>
+    <keywords>CREATETAB</keywords>
+    <keywords>CREATE_EXTERNAL_ROUTINE</keywords>
+    <keywords>CREATE_NOT_FENCED</keywords>
+    <keywords>CREATE_NOT_FENCED_ROUTINE</keywords>
+    <keywords>CREATE_SECURE_OBJECT</keywords>
+    <keywords>CROSS</keywords>
+    <keywords>CS</keywords>
+    <keywords>CUBE</keywords>
+    <keywords>CURRENT</keywords>
+    <keywords>CURRENT_DATE</keywords>
+    <keywords>CURRENT_PATH</keywords>
+    <keywords>CURRENT_SCHEMA</keywords>
+    <keywords>CURRENT_SERVER</keywords>
+    <keywords>CURRENT_TIME</keywords>
+    <keywords>CURRENT_TIMESTAMP</keywords>
+    <keywords>CURRENT_TIMEZONE</keywords>
+    <keywords>CURRENT_USER</keywords>
+    <keywords>CURRVAL</keywords>
+    <keywords>CURSOR</keywords>
+    <keywords>CURSORS</keywords>
+    <keywords>CYCLE</keywords>
+    <keywords>DATA</keywords>
+    <keywords>DATAACCESS</keywords>
+    <keywords>DATABASE</keywords>
+    <keywords>DATATAGINSC</keywords>
+    <keywords>DATE</keywords>
+    <keywords>DAY</keywords>
+    <keywords>DAYS</keywords>
+    <keywords>DB</keywords>
+    <keywords>DB2DARI</keywords>
+    <keywords>DB2GENERAL</keywords>
+    <keywords>DB2GENRL</keywords>
+    <keywords>DB2LBACREADARRAY</keywords>
+    <keywords>DB2LBACREADSET</keywords>
+    <keywords>DB2LBACREADTREE</keywords>
+    <keywords>DB2LBACRULES</keywords>
+    <keywords>DB2LBACWRITEARRAY</keywords>
+    <keywords>DB2LBACWRITESET</keywords>
+    <keywords>DB2LBACWRITETREE</keywords>
+    <keywords>DB2SPL</keywords>
+    <keywords>DB2SQL</keywords>
+    <keywords>DB2VALIDATE</keywords>
+    <keywords>DB2_EXCEPTION_INIT</keywords>
+    <keywords>DB2_RETURN_STATUS</keywords>
+    <keywords>DB2_SQL_NESTING_LEVEL</keywords>
+    <keywords>DB2_TEMPORAL_TRIGGER_FROM_VALUE</keywords>
+    <keywords>DB2_TEMPORAL_TRIGGER_TO_VALUE</keywords>
+    <keywords>DB2_TOKEN_STRING</keywords>
+    <keywords>DBADM</keywords>
+    <keywords>DBCFG</keywords>
+    <keywords>DBCFGVALUES</keywords>
+    <keywords>DBCLOB</keywords>
+    <keywords>DBDBMCFG</keywords>
+    <keywords>DBINFO</keywords>
+    <keywords>DBMCFG</keywords>
+    <keywords>DBMCFGVALUES</keywords>
+    <keywords>DBMEMUSE</keywords>
+    <keywords>DBPARTITIONNUM</keywords>
+    <keywords>DBPARTITIONNUMS</keywords>
+    <keywords>DBPARTITIONS</keywords>
+    <keywords>DDL</keywords>
+    <keywords>DDLALL</keywords>
+    <keywords>DDLDATA</keywords>
+    <keywords>DDLFEDERATED</keywords>
+    <keywords>DDLMONITOR</keywords>
+    <keywords>DDLSECURITY</keywords>
+    <keywords>DDLSQL</keywords>
+    <keywords>DDLSTMTEXEC</keywords>
+    <keywords>DDLSTORAGE</keywords>
+    <keywords>DDLWLM</keywords>
+    <keywords>DDLXML</keywords>
+    <keywords>DEACTIVATE</keywords>
+    <keywords>DEADLOCK</keywords>
+    <keywords>DEADLOCKS</keywords>
+    <keywords>DEBUGINFO</keywords>
+    <keywords>DEC</keywords>
+    <keywords>DECFLOAT</keywords>
+    <keywords>DECIMAL</keywords>
+    <keywords>DECLARE</keywords>
+    <keywords>DECOMPOSITION</keywords>
+    <keywords>DEFAULT</keywords>
+    <keywords>DEFAULTS</keywords>
+    <keywords>DEFER</keywords>
+    <keywords>DEFERRED</keywords>
+    <keywords>DEFINE</keywords>
+    <keywords>DEFINER</keywords>
+    <keywords>DEFINITION</keywords>
+    <keywords>DEGREE</keywords>
+    <keywords>DELETE</keywords>
+    <keywords>DELETING</keywords>
+    <keywords>DEPENDENT</keywords>
+    <keywords>DESC</keywords>
+    <keywords>DESCRIPTOR</keywords>
+    <keywords>DETACH</keywords>
+    <keywords>DETAILED</keywords>
+    <keywords>DETAILS</keywords>
+    <keywords>DETERMINED</keywords>
+    <keywords>DETERMINISTIC</keywords>
+    <keywords>DEVICE</keywords>
+    <keywords>DIAGNOSTICS</keywords>
+    <keywords>DIMENSIONS</keywords>
+    <keywords>DIRTY</keywords>
+    <keywords>DISABLE</keywords>
+    <keywords>DISALLOW</keywords>
+    <keywords>DISPATCH</keywords>
+    <keywords>DISTINCT</keywords>
+    <keywords>DISTRIBUTE</keywords>
+    <keywords>DISTRIBUTED</keywords>
+    <keywords>DISTRIBUTION</keywords>
+    <keywords>DLCONN</keywords>
+    <keywords>DLLOCK</keywords>
+    <keywords>DML</keywords>
+    <keywords>DO</keywords>
+    <keywords>DOCUMENT</keywords>
+    <keywords>DOUBLE</keywords>
+    <keywords>DROP</keywords>
+    <keywords>DROPIN</keywords>
+    <keywords>DROPPED</keywords>
+    <keywords>DYNAMIC</keywords>
+    <keywords>EACH</keywords>
+    <keywords>ELEMENT</keywords>
+    <keywords>ELSE</keywords>
+    <keywords>ELSEIF</keywords>
+    <keywords>ELSIF</keywords>
+    <keywords>EMPTY</keywords>
+    <keywords>ENABLE</keywords>
+    <keywords>ENCRYPTION</keywords>
+    <keywords>END</keywords>
+    <keywords>ENDING</keywords>
+    <keywords>ENFORCED</keywords>
+    <keywords>ENFORCEMENT</keywords>
+    <keywords>ENVIRONMENT</keywords>
+    <keywords>ERASE</keywords>
+    <keywords>ERROR</keywords>
+    <keywords>ESCAPE</keywords>
+    <keywords>ESTIMATE</keywords>
+    <keywords>ESTIMATEDCOST</keywords>
+    <keywords>ESTIMATEDSQLCOST</keywords>
+    <keywords>EUR</keywords>
+    <keywords>EVALUATE</keywords>
+    <keywords>EVENT</keywords>
+    <keywords>EVERY</keywords>
+    <keywords>EVMONSTART</keywords>
+    <keywords>EXACT</keywords>
+    <keywords>EXCEEDED</keywords>
+    <keywords>EXCEPT</keywords>
+    <keywords>EXCEPTION</keywords>
+    <keywords>EXCEPTION_INIT</keywords>
+    <keywords>EXCLUDE</keywords>
+    <keywords>EXCLUDES</keywords>
+    <keywords>EXCLUDING</keywords>
+    <keywords>EXCLUSIVE</keywords>
+    <keywords>EXECNODE</keywords>
+    <keywords>EXECUTABLE</keywords>
+    <keywords>EXECUTE</keywords>
+    <keywords>EXECUTETIME</keywords>
+    <keywords>EXECUTION</keywords>
+    <keywords>EXEMPTION</keywords>
+    <keywords>EXISTS</keywords>
+    <keywords>EXIT</keywords>
+    <keywords>EXPAND</keywords>
+    <keywords>EXPLAIN</keywords>
+    <keywords>EXPRESSION</keywords>
+    <keywords>EXTEND</keywords>
+    <keywords>EXTENDED</keywords>
+    <keywords>EXTENSION</keywords>
+    <keywords>EXTENTSIZE</keywords>
+    <keywords>EXTERNAL</keywords>
+    <keywords>EXTRACT</keywords>
+    <keywords>FAILURE</keywords>
+    <keywords>FALSE</keywords>
+    <keywords>FEDERATED</keywords>
+    <keywords>FEDERATED_TOOL</keywords>
+    <keywords>FENCED</keywords>
+    <keywords>FETCH</keywords>
+    <keywords>FILE</keywords>
+    <keywords>FILEREAD</keywords>
+    <keywords>FILEWRITE</keywords>
+    <keywords>FILTER</keywords>
+    <keywords>FINAL</keywords>
+    <keywords>FIRST</keywords>
+    <keywords>FLOAT</keywords>
+    <keywords>FLUSH</keywords>
+    <keywords>FOLLOWING</keywords>
+    <keywords>FOLLOWS</keywords>
+    <keywords>FOR</keywords>
+    <keywords>FORALL</keywords>
+    <keywords>FORCE</keywords>
+    <keywords>FOREIGN</keywords>
+    <keywords>FOUND</keywords>
+    <keywords>FREE</keywords>
+    <keywords>FREEPAGE</keywords>
+    <keywords>FROM</keywords>
+    <keywords>FULL</keywords>
+    <keywords>FUNCTION</keywords>
+    <keywords>G</keywords>
+    <keywords>GBPCACHE</keywords>
+    <keywords>GENERAL</keywords>
+    <keywords>GENERATE</keywords>
+    <keywords>GENERATED</keywords>
+    <keywords>GENERIC</keywords>
+    <keywords>GET</keywords>
+    <keywords>GLOBAL</keywords>
+    <keywords>GOTO</keywords>
+    <keywords>GRANT</keywords>
+    <keywords>GRAPHIC</keywords>
+    <keywords>GROUP</keywords>
+    <keywords>GROUPING</keywords>
+    <keywords>HANDLER</keywords>
+    <keywords>HARD</keywords>
+    <keywords>HASH</keywords>
+    <keywords>HASHED</keywords>
+    <keywords>HASHING</keywords>
+    <keywords>HAVING</keywords>
+    <keywords>HEX</keywords>
+    <keywords>HIDDEN</keywords>
+    <keywords>HIERARCHY</keywords>
+    <keywords>HIGH</keywords>
+    <keywords>HISTOGRAM</keywords>
+    <keywords>HISTOGRAMBIN</keywords>
+    <keywords>HISTORY</keywords>
+    <keywords>HOLD</keywords>
+    <keywords>HOUR</keywords>
+    <keywords>HOURS</keywords>
+    <keywords>HPJ</keywords>
+    <keywords>ID</keywords>
+    <keywords>IDENTITY</keywords>
+    <keywords>IF</keywords>
+    <keywords>IGNORE</keywords>
+    <keywords>IMMEDIATE</keywords>
+    <keywords>IMPLICIT</keywords>
+    <keywords>IMPLICITLY</keywords>
+    <keywords>IMPLICIT_SCHEMA</keywords>
+    <keywords>IN</keywords>
+    <keywords>INACTIVE</keywords>
+    <keywords>INCLUDE</keywords>
+    <keywords>INCLUDES</keywords>
+    <keywords>INCLUDING</keywords>
+    <keywords>INCLUSIVE</keywords>
+    <keywords>INCREASESIZE</keywords>
+    <keywords>INCREMENT</keywords>
+    <keywords>INCREMENTAL</keywords>
+    <keywords>INDEX</keywords>
+    <keywords>INDEXES</keywords>
+    <keywords>INDICATOR</keywords>
+    <keywords>INDICES</keywords>
+    <keywords>INF</keywords>
+    <keywords>INFINITY</keywords>
+    <keywords>INFIX</keywords>
+    <keywords>INFO</keywords>
+    <keywords>INHERIT</keywords>
+    <keywords>INITIALLY</keywords>
+    <keywords>INITIALSIZE</keywords>
+    <keywords>INITIAL_INSTS</keywords>
+    <keywords>INITIAL_IOS</keywords>
+    <keywords>INLINE</keywords>
+    <keywords>INLINEFUNCTION</keywords>
+    <keywords>INLINETRIGGER</keywords>
+    <keywords>INNER</keywords>
+    <keywords>INOUT</keywords>
+    <keywords>INPUT</keywords>
+    <keywords>INSENSITIVE</keywords>
+    <keywords>INSERT</keywords>
+    <keywords>INSERTING</keywords>
+    <keywords>INSTANTIABLE</keywords>
+    <keywords>INSTEAD</keywords>
+    <keywords>INSTS_PER_ARGBYTE</keywords>
+    <keywords>INSTS_PER_INVOC</keywords>
+    <keywords>INT</keywords>
+    <keywords>INTEGER</keywords>
+    <keywords>INTEGRITY</keywords>
+    <keywords>INTERARRIVALTIME</keywords>
+    <keywords>INTERSECT</keywords>
+    <keywords>INTO</keywords>
+    <keywords>INVALID</keywords>
+    <keywords>INVALIDATION</keywords>
+    <keywords>IO</keywords>
+    <keywords>IOS_PER_ARGBYTE</keywords>
+    <keywords>IOS_PER_INVOC</keywords>
+    <keywords>IS</keywords>
+    <keywords>ISO</keywords>
+    <keywords>ISOLATION</keywords>
+    <keywords>ITERATE</keywords>
+    <keywords>JAVA</keywords>
+    <keywords>JIS</keywords>
+    <keywords>JOIN</keywords>
+    <keywords>K</keywords>
+    <keywords>KEEP</keywords>
+    <keywords>KEEPDYNAMIC</keywords>
+    <keywords>KEY</keywords>
+    <keywords>KEYS</keywords>
+    <keywords>L</keywords>
+    <keywords>LABEL</keywords>
+    <keywords>LANGUAGE</keywords>
+    <keywords>LARGE</keywords>
+    <keywords>LAST</keywords>
+    <keywords>LATERAL</keywords>
+    <keywords>LC_CTYPE</keywords>
+    <keywords>LC_MESSAGES</keywords>
+    <keywords>LC_TIME</keywords>
+    <keywords>LEADING</keywords>
+    <keywords>LEAVE</keywords>
+    <keywords>LEFT</keywords>
+    <keywords>LENGTH</keywords>
+    <keywords>LEVEL</keywords>
+    <keywords>LEVEL2</keywords>
+    <keywords>LIBRARY</keywords>
+    <keywords>LIBRARYADM</keywords>
+    <keywords>LIFETIME</keywords>
+    <keywords>LIKE</keywords>
+    <keywords>LIMIT</keywords>
+    <keywords>LIST</keywords>
+    <keywords>LOAD</keywords>
+    <keywords>LOCAL</keywords>
+    <keywords>LOCALE</keywords>
+    <keywords>LOCATION</keywords>
+    <keywords>LOCATOR</keywords>
+    <keywords>LOCATORS</keywords>
+    <keywords>LOCK</keywords>
+    <keywords>LOCKED</keywords>
+    <keywords>LOCKING</keywords>
+    <keywords>LOCKS</keywords>
+    <keywords>LOCKSIZE</keywords>
+    <keywords>LOCK_ACTIVITY_VALUES</keywords>
+    <keywords>LOCK_PARTICIPANTS</keywords>
+    <keywords>LOCK_PARTICIPANT_ACTIVITIES</keywords>
+    <keywords>LOG</keywords>
+    <keywords>LOGGED</keywords>
+    <keywords>LOGICAL</keywords>
+    <keywords>LONG</keywords>
+    <keywords>LONGVAR</keywords>
+    <keywords>LOOP</keywords>
+    <keywords>LOW</keywords>
+    <keywords>LOWER</keywords>
+    <keywords>M</keywords>
+    <keywords>MAIN</keywords>
+    <keywords>MAINTAINED</keywords>
+    <keywords>MANAGED</keywords>
+    <keywords>MANUALSTART</keywords>
+    <keywords>MAP</keywords>
+    <keywords>MAPPING</keywords>
+    <keywords>MARK</keywords>
+    <keywords>MASK</keywords>
+    <keywords>MATCHED</keywords>
+    <keywords>MATCHING</keywords>
+    <keywords>MATERIALIZED</keywords>
+    <keywords>MAX</keywords>
+    <keywords>MAXFILES</keywords>
+    <keywords>MAXFILESIZE</keywords>
+    <keywords>MAXIMUM</keywords>
+    <keywords>MAXSIZE</keywords>
+    <keywords>MAXVALUE</keywords>
+    <keywords>MDC</keywords>
+    <keywords>MEDIUM</keywords>
+    <keywords>MEMBER</keywords>
+    <keywords>MEMBERS</keywords>
+    <keywords>MERGE</keywords>
+    <keywords>MESSAGE_TEXT</keywords>
+    <keywords>METHOD</keywords>
+    <keywords>METHODS</keywords>
+    <keywords>METRICS</keywords>
+    <keywords>MICROSECOND</keywords>
+    <keywords>MICROSECONDS</keywords>
+    <keywords>MINPCTUSED</keywords>
+    <keywords>MINUS</keywords>
+    <keywords>MINUTE</keywords>
+    <keywords>MINUTES</keywords>
+    <keywords>MINVALUE</keywords>
+    <keywords>MISSING</keywords>
+    <keywords>MIXED</keywords>
+    <keywords>MODE</keywords>
+    <keywords>MODIFIES</keywords>
+    <keywords>MODULE</keywords>
+    <keywords>MONITOR</keywords>
+    <keywords>MONTH</keywords>
+    <keywords>MONTHS</keywords>
+    <keywords>MORE</keywords>
+    <keywords>MOVEMENT</keywords>
+    <keywords>MOVETABLE</keywords>
+    <keywords>NAME</keywords>
+    <keywords>NAMESPACE</keywords>
+    <keywords>NAN</keywords>
+    <keywords>NATIONAL</keywords>
+    <keywords>NATURAL</keywords>
+    <keywords>NCHAR</keywords>
+    <keywords>NCLOB</keywords>
+    <keywords>NESTED</keywords>
+    <keywords>NETWORK</keywords>
+    <keywords>NEW</keywords>
+    <keywords>NEW_TABLE</keywords>
+    <keywords>NEXT</keywords>
+    <keywords>NEXTVAL</keywords>
+    <keywords>NICKNAME</keywords>
+    <keywords>NO</keywords>
+    <keywords>NOCACHE</keywords>
+    <keywords>NOCOPY</keywords>
+    <keywords>NOCYCLE</keywords>
+    <keywords>NODE</keywords>
+    <keywords>NODEGROUP</keywords>
+    <keywords>NODES</keywords>
+    <keywords>NOMAXVALUE</keywords>
+    <keywords>NOMINVALUE</keywords>
+    <keywords>NONBLOCKED</keywords>
+    <keywords>NONE</keywords>
+    <keywords>NOORDER</keywords>
+    <keywords>NORCAC</keywords>
+    <keywords>NORMAL</keywords>
+    <keywords>NOT</keywords>
+    <keywords>NULL</keywords>
+    <keywords>NULLS</keywords>
+    <keywords>NUM</keywords>
+    <keywords>NUMBER</keywords>
+    <keywords>NUMBLOCKPAGES</keywords>
+    <keywords>NUMERIC</keywords>
+    <keywords>NUM_EXECUTIONS</keywords>
+    <keywords>NUM_FREQVALUES</keywords>
+    <keywords>NUM_QUANTILES</keywords>
+    <keywords>NVARCHAR</keywords>
+    <keywords>NVARCHAR2</keywords>
+    <keywords>OBJECT</keywords>
+    <keywords>OBJMAINT</keywords>
+    <keywords>OCCURRENCE</keywords>
+    <keywords>OCTETS</keywords>
+    <keywords>OF</keywords>
+    <keywords>OFF</keywords>
+    <keywords>OFFSET</keywords>
+    <keywords>OLD</keywords>
+    <keywords>OLD_TABLE</keywords>
+    <keywords>OLE</keywords>
+    <keywords>OLEDB</keywords>
+    <keywords>ON</keywords>
+    <keywords>ONCE</keywords>
+    <keywords>ONLINE</keywords>
+    <keywords>ONLY</keywords>
+    <keywords>OPEN</keywords>
+    <keywords>OPTIMIZATION</keywords>
+    <keywords>OPTIMIZE</keywords>
+    <keywords>OPTION</keywords>
+    <keywords>OPTIONS</keywords>
+    <keywords>OPTPROFILE</keywords>
+    <keywords>OR</keywords>
+    <keywords>ORDER</keywords>
+    <keywords>ORDINALITY</keywords>
+    <keywords>ORGANIZE</keywords>
+    <keywords>OUT</keywords>
+    <keywords>OUTBOUND</keywords>
+    <keywords>OUTCOME</keywords>
+    <keywords>OUTER</keywords>
+    <keywords>OVER</keywords>
+    <keywords>OVERFLOW</keywords>
+    <keywords>OVERHEAD</keywords>
+    <keywords>OVERLAPS</keywords>
+    <keywords>OVERRIDE</keywords>
+    <keywords>OVERRIDING</keywords>
+    <keywords>OWNERSHIP</keywords>
+    <keywords>P</keywords>
+    <keywords>PACKAGE</keywords>
+    <keywords>PAGE</keywords>
+    <keywords>PAGESIZE</keywords>
+    <keywords>PARALLEL</keywords>
+    <keywords>PARAMETER</keywords>
+    <keywords>PARAMETERS</keywords>
+    <keywords>PARENT</keywords>
+    <keywords>PART</keywords>
+    <keywords>PARTITION</keywords>
+    <keywords>PARTITIONED</keywords>
+    <keywords>PARTITIONING</keywords>
+    <keywords>PARTITIONINGS</keywords>
+    <keywords>PARTITIONS</keywords>
+    <keywords>PASSING</keywords>
+    <keywords>PASSTHRU</keywords>
+    <keywords>PASSWORD</keywords>
+    <keywords>PATH</keywords>
+    <keywords>PATROLLER</keywords>
+    <keywords>PCTDEACTIVATE</keywords>
+    <keywords>PCTFREE</keywords>
+    <keywords>PERCENT</keywords>
+    <keywords>PERCENT_ARGBYTES</keywords>
+    <keywords>PERFORM</keywords>
+    <keywords>PERIOD</keywords>
+    <keywords>PERMISSION</keywords>
+    <keywords>PIECESIZE</keywords>
+    <keywords>PIPE</keywords>
+    <keywords>PKGCACHE</keywords>
+    <keywords>PKGCACHE_METRICS</keywords>
+    <keywords>PKGCACHE_STMT_ARGS</keywords>
+    <keywords>PLACING</keywords>
+    <keywords>PLAN</keywords>
+    <keywords>PLS_INTEGER</keywords>
+    <keywords>POLICY</keywords>
+    <keywords>PORTION</keywords>
+    <keywords>POSITION</keywords>
+    <keywords>PRAGMA</keywords>
+    <keywords>PRECEDING</keywords>
+    <keywords>PRECISION</keywords>
+    <keywords>PREDICATES</keywords>
+    <keywords>PREFETCH</keywords>
+    <keywords>PREFETCHSIZE</keywords>
+    <keywords>PREPARE</keywords>
+    <keywords>PRESERVE</keywords>
+    <keywords>PREVENT</keywords>
+    <keywords>PREVIOUS</keywords>
+    <keywords>PREVVAL</keywords>
+    <keywords>PRIMARY</keywords>
+    <keywords>PRIOR</keywords>
+    <keywords>PRIORITY</keywords>
+    <keywords>PRIQTY</keywords>
+    <keywords>PRIVILEGES</keywords>
+    <keywords>PROCEDURE</keywords>
+    <keywords>PROFILE</keywords>
+    <keywords>PROGRAM</keywords>
+    <keywords>PROPAGATE</keywords>
+    <keywords>PROTOCOL</keywords>
+    <keywords>PRUNE</keywords>
+    <keywords>PUBLIC</keywords>
+    <keywords>PUBLISH</keywords>
+    <keywords>QSTATS</keywords>
+    <keywords>QUERY</keywords>
+    <keywords>QUERYNO</keywords>
+    <keywords>QUERYTAG</keywords>
+    <keywords>QUEUEDACTIVITIES</keywords>
+    <keywords>QUEUEDCONNECTIONS</keywords>
+    <keywords>QUEUETIME</keywords>
+    <keywords>QUIESCE_CONNECT</keywords>
+    <keywords>RAISE</keywords>
+    <keywords>RANGE</keywords>
+    <keywords>RATE</keywords>
+    <keywords>RATIO</keywords>
+    <keywords>RAW</keywords>
+    <keywords>READ</keywords>
+    <keywords>READS</keywords>
+    <keywords>REAL</keywords>
+    <keywords>REBALANCE</keywords>
+    <keywords>RECOMMEND</keywords>
+    <keywords>RECORD</keywords>
+    <keywords>RECOVERY</keywords>
+    <keywords>RECREATE</keywords>
+    <keywords>REDIRECT</keywords>
+    <keywords>REDISTRIBUTE</keywords>
+    <keywords>REDUCE</keywords>
+    <keywords>REF</keywords>
+    <keywords>REFERENCE</keywords>
+    <keywords>REFERENCES</keywords>
+    <keywords>REFERENCING</keywords>
+    <keywords>REFRESH</keywords>
+    <keywords>REGISTERS</keywords>
+    <keywords>REGULAR</keywords>
+    <keywords>REGVAR</keywords>
+    <keywords>REGVARVALUES</keywords>
+    <keywords>REJECT</keywords>
+    <keywords>RELEASE</keywords>
+    <keywords>RELEASED</keywords>
+    <keywords>REMAIN</keywords>
+    <keywords>REMAP</keywords>
+    <keywords>REMOTE</keywords>
+    <keywords>REMOVE</keywords>
+    <keywords>RENAME</keywords>
+    <keywords>REOPT</keywords>
+    <keywords>REORG</keywords>
+    <keywords>REPEAT</keywords>
+    <keywords>REPEATABLE</keywords>
+    <keywords>REPLACE</keywords>
+    <keywords>REPLICATED</keywords>
+    <keywords>REPLICATION</keywords>
+    <keywords>REQUEST</keywords>
+    <keywords>REQUIRE</keywords>
+    <keywords>RESET</keywords>
+    <keywords>RESIDENT</keywords>
+    <keywords>RESIGNAL</keywords>
+    <keywords>RESIZE</keywords>
+    <keywords>RESOLVE</keywords>
+    <keywords>RESTART</keywords>
+    <keywords>RESTORE</keywords>
+    <keywords>RESTRICT</keywords>
+    <keywords>RESULT</keywords>
+    <keywords>RESULT_SET_LOCATOR</keywords>
+    <keywords>RESUME</keywords>
+    <keywords>RETAIN</keywords>
+    <keywords>RETURN</keywords>
+    <keywords>RETURNING</keywords>
+    <keywords>RETURNS</keywords>
+    <keywords>RETURN_STATUS</keywords>
+    <keywords>REUSE</keywords>
+    <keywords>REVERSE</keywords>
+    <keywords>REVOKE</keywords>
+    <keywords>RID</keywords>
+    <keywords>RID_BIT</keywords>
+    <keywords>RIGHT</keywords>
+    <keywords>ROLE</keywords>
+    <keywords>ROLLBACK</keywords>
+    <keywords>ROLLFORWARD</keywords>
+    <keywords>ROLLOUT</keywords>
+    <keywords>ROLLUP</keywords>
+    <keywords>ROOT</keywords>
+    <keywords>ROUNDING</keywords>
+    <keywords>ROUND_CEILING</keywords>
+    <keywords>ROUND_DOWN</keywords>
+    <keywords>ROUND_FLOOR</keywords>
+    <keywords>ROUND_HALF_EVEN</keywords>
+    <keywords>ROUND_HALF_UP</keywords>
+    <keywords>ROUTINES</keywords>
+    <keywords>ROW</keywords>
+    <keywords>ROWS</keywords>
+    <keywords>ROW_COUNT</keywords>
+    <keywords>RR</keywords>
+    <keywords>RS</keywords>
+    <keywords>RULE</keywords>
+    <keywords>RUN</keywords>
+    <keywords>RUNSTATS</keywords>
+    <keywords>S</keywords>
+    <keywords>SAFE</keywords>
+    <keywords>SAMPLED</keywords>
+    <keywords>SAVEPOINT</keywords>
+    <keywords>SBCS</keywords>
+    <keywords>SCANS</keywords>
+    <keywords>SCHEMA</keywords>
+    <keywords>SCOPE</keywords>
+    <keywords>SCRATCHPAD</keywords>
+    <keywords>SCROLL</keywords>
+    <keywords>SCSTATS</keywords>
+    <keywords>SEARCH</keywords>
+    <keywords>SECADM</keywords>
+    <keywords>SECMAINT</keywords>
+    <keywords>SECOND</keywords>
+    <keywords>SECONDS</keywords>
+    <keywords>SECQTY</keywords>
+    <keywords>SECTION</keywords>
+    <keywords>SECURED</keywords>
+    <keywords>SECURITY</keywords>
+    <keywords>SELECT</keywords>
+    <keywords>SELECTION</keywords>
+    <keywords>SELECTIVITY</keywords>
+    <keywords>SELF</keywords>
+    <keywords>SENSITIVE</keywords>
+    <keywords>SEQUENCE</keywords>
+    <keywords>SERIALIZABLE</keywords>
+    <keywords>SERVER</keywords>
+    <keywords>SERVICE</keywords>
+    <keywords>SESSION</keywords>
+    <keywords>SESSION_USER</keywords>
+    <keywords>SET</keywords>
+    <keywords>SETS</keywords>
+    <keywords>SETSESSIONUSER</keywords>
+    <keywords>SETTING</keywords>
+    <keywords>SHARE</keywords>
+    <keywords>SHARES</keywords>
+    <keywords>SHRLEVEL</keywords>
+    <keywords>SIBLINGS</keywords>
+    <keywords>SIGNAL</keywords>
+    <keywords>SIMPLE</keywords>
+    <keywords>SIZE</keywords>
+    <keywords>SKIP</keywords>
+    <keywords>SMALLINT</keywords>
+    <keywords>SNAN</keywords>
+    <keywords>SNAPSHOT</keywords>
+    <keywords>SOFT</keywords>
+    <keywords>SOME</keywords>
+    <keywords>SOURCE</keywords>
+    <keywords>SPECIAL</keywords>
+    <keywords>SPECIFIC</keywords>
+    <keywords>SPECIFICATION</keywords>
+    <keywords>SPLIT</keywords>
+    <keywords>SQL</keywords>
+    <keywords>SQLADM</keywords>
+    <keywords>SQLCODE</keywords>
+    <keywords>SQLDATA</keywords>
+    <keywords>SQLERRM</keywords>
+    <keywords>SQLEXCEPTION</keywords>
+    <keywords>SQLID</keywords>
+    <keywords>SQLINTERNAL</keywords>
+    <keywords>SQLROWSREAD</keywords>
+    <keywords>SQLROWSREADINSC</keywords>
+    <keywords>SQLROWSRETURNED</keywords>
+    <keywords>SQLSTATE</keywords>
+    <keywords>SQLTEMPSPACE</keywords>
+    <keywords>SQLWARNING</keywords>
+    <keywords>SQL_CCFLAGS</keywords>
+    <keywords>SSA</keywords>
+    <keywords>STABILITY</keywords>
+    <keywords>STAGING</keywords>
+    <keywords>START</keywords>
+    <keywords>STARTING</keywords>
+    <keywords>STATE</keywords>
+    <keywords>STATEMENT</keywords>
+    <keywords>STATEMENTS</keywords>
+    <keywords>STATIC</keywords>
+    <keywords>STATISTICS</keywords>
+    <keywords>STATUS</keywords>
+    <keywords>STAY</keywords>
+    <keywords>STMT</keywords>
+    <keywords>STMTHIST</keywords>
+    <keywords>STMTVALS</keywords>
+    <keywords>STMT_EXEC_TIME</keywords>
+    <keywords>STOGROUP</keywords>
+    <keywords>STOP</keywords>
+    <keywords>STORAGE</keywords>
+    <keywords>STRIP</keywords>
+    <keywords>STRIPE</keywords>
+    <keywords>STYLE</keywords>
+    <keywords>SUB</keywords>
+    <keywords>SUBSECTION</keywords>
+    <keywords>SUCCESS</keywords>
+    <keywords>SUMMARY</keywords>
+    <keywords>SUSPEND</keywords>
+    <keywords>SWITCH</keywords>
+    <keywords>SYMMETRIC</keywords>
+    <keywords>SYNONYM</keywords>
+    <keywords>SYSADM</keywords>
+    <keywords>SYSADMIN</keywords>
+    <keywords>SYSCTRL</keywords>
+    <keywords>SYSDATE</keywords>
+    <keywords>SYSMAINT</keywords>
+    <keywords>SYSMON</keywords>
+    <keywords>SYSTEM</keywords>
+    <keywords>SYSTEM_TIME</keywords>
+    <keywords>SYSTEM_USER</keywords>
+    <keywords>SYS_REFCURSOR</keywords>
+    <keywords>T</keywords>
+    <keywords>TABLE</keywords>
+    <keywords>TABLES</keywords>
+    <keywords>TABLESAMPLE</keywords>
+    <keywords>TABLESPACE</keywords>
+    <keywords>TABLESPACES</keywords>
+    <keywords>TAG</keywords>
+    <keywords>TARGET</keywords>
+    <keywords>TEMPLATE</keywords>
+    <keywords>TEMPORAL</keywords>
+    <keywords>TEMPORARY</keywords>
+    <keywords>TEXT</keywords>
+    <keywords>THAN</keywords>
+    <keywords>THEN</keywords>
+    <keywords>THREADSAFE</keywords>
+    <keywords>THRESHOLD</keywords>
+    <keywords>THRESHOLDVIOLATIONS</keywords>
+    <keywords>THROUGH</keywords>
+    <keywords>TIME</keywords>
+    <keywords>TIMEOUT</keywords>
+    <keywords>TIMERONCOST</keywords>
+    <keywords>TIMESTAMP</keywords>
+    <keywords>TIMEZONE</keywords>
+    <keywords>TO</keywords>
+    <keywords>TOKEN</keywords>
+    <keywords>TOTALDBPARTITIONCONNECTIONS</keywords>
+    <keywords>TOTALMEMBERCONNECTIONS</keywords>
+    <keywords>TOTALSCMEMBERCONNECTIONS</keywords>
+    <keywords>TOTALSCPARTITIONCONNECTIONS</keywords>
+    <keywords>TRAILING</keywords>
+    <keywords>TRANSACTION</keywords>
+    <keywords>TRANSACTIONS</keywords>
+    <keywords>TRANSFER</keywords>
+    <keywords>TRANSFERRATE</keywords>
+    <keywords>TRANSFORM</keywords>
+    <keywords>TRANSFORMS</keywords>
+    <keywords>TRANSLATE</keywords>
+    <keywords>TREAT</keywords>
+    <keywords>TREE</keywords>
+    <keywords>TRIGGER</keywords>
+    <keywords>TRIGGERS</keywords>
+    <keywords>TRIM</keywords>
+    <keywords>TRUE</keywords>
+    <keywords>TRUNC</keywords>
+    <keywords>TRUNCATE</keywords>
+    <keywords>TRUSTED</keywords>
+    <keywords>TWOLEVEL</keywords>
+    <keywords>TXNCOMPLETION</keywords>
+    <keywords>TYPE</keywords>
+    <keywords>TYPES</keywords>
+    <keywords>UESCAPE</keywords>
+    <keywords>UNBOUNDED</keywords>
+    <keywords>UNCHECKED</keywords>
+    <keywords>UNCOMMITTED</keywords>
+    <keywords>UNDER</keywords>
+    <keywords>UNDO</keywords>
+    <keywords>UNFORMATTED</keywords>
+    <keywords>UNICODE</keywords>
+    <keywords>UNION</keywords>
+    <keywords>UNIQUE</keywords>
+    <keywords>UNIT</keywords>
+    <keywords>UNITS</keywords>
+    <keywords>UNNEST</keywords>
+    <keywords>UNSAFE</keywords>
+    <keywords>UNSAMPLED</keywords>
+    <keywords>UNTIL</keywords>
+    <keywords>UOW</keywords>
+    <keywords>UOWTOTALTIME</keywords>
+    <keywords>UOW_EXECUTABLE_LIST</keywords>
+    <keywords>UOW_METRICS</keywords>
+    <keywords>UOW_PACKAGE_LIST</keywords>
+    <keywords>UPDATE</keywords>
+    <keywords>UPDATED_SINCE_BOUNDARY_TIME</keywords>
+    <keywords>UPDATING</keywords>
+    <keywords>UPON</keywords>
+    <keywords>UR</keywords>
+    <keywords>URI</keywords>
+    <keywords>USA</keywords>
+    <keywords>USAGE</keywords>
+    <keywords>USE</keywords>
+    <keywords>USER</keywords>
+    <keywords>USERID</keywords>
+    <keywords>USING</keywords>
+    <keywords>UTILALL</keywords>
+    <keywords>UTILLOCATION</keywords>
+    <keywords>UTILPHASE</keywords>
+    <keywords>UTILSTART</keywords>
+    <keywords>UTILSTOP</keywords>
+    <keywords>VALIDATE</keywords>
+    <keywords>VALIDATED</keywords>
+    <keywords>VALUE</keywords>
+    <keywords>VALUES</keywords>
+    <keywords>VARCHAR</keywords>
+    <keywords>VARCHAR2</keywords>
+    <keywords>VARGRAPHIC</keywords>
+    <keywords>VARIABLE</keywords>
+    <keywords>VARIANT</keywords>
+    <keywords>VARRAY</keywords>
+    <keywords>VARYING</keywords>
+    <keywords>VCAT</keywords>
+    <keywords>VERIFY_GROUP_FOR_USER</keywords>
+    <keywords>VERIFY_ROLE_FOR_USER</keywords>
+    <keywords>VERIFY_TRUSTED_CONTEXT_ROLE_FOR_USER</keywords>
+    <keywords>VERSION</keywords>
+    <keywords>VERSIONING</keywords>
+    <keywords>VERSIONS</keywords>
+    <keywords>VIEW</keywords>
+    <keywords>VIOLATIONS</keywords>
+    <keywords>VOLATILE</keywords>
+    <keywords>WAIT</keywords>
+    <keywords>WAITING</keywords>
+    <keywords>WATER</keywords>
+    <keywords>WCSTATS</keywords>
+    <keywords>WHEN</keywords>
+    <keywords>WHERE</keywords>
+    <keywords>WHILE</keywords>
+    <keywords>WHITESPACE</keywords>
+    <keywords>WITH</keywords>
+    <keywords>WITHIN</keywords>
+    <keywords>WITHOUT</keywords>
+    <keywords>WLMADM</keywords>
+    <keywords>WLSTATS</keywords>
+    <keywords>WORK</keywords>
+    <keywords>WORKLOAD</keywords>
+    <keywords>WRAP</keywords>
+    <keywords>WRAPPER</keywords>
+    <keywords>WRITE</keywords>
+    <keywords>WRITEDOWN</keywords>
+    <keywords>WRITEUP</keywords>
+    <keywords>WRKSTNNAME</keywords>
+    <keywords>XACT</keywords>
+    <keywords>XML</keywords>
+    <keywords>XMLAGG</keywords>
+    <keywords>XMLATTRIBUTES</keywords>
+    <keywords>XMLBINARY</keywords>
+    <keywords>XMLCAST</keywords>
+    <keywords>XMLCOMMENT</keywords>
+    <keywords>XMLCONCAT</keywords>
+    <keywords>XMLDECLARATION</keywords>
+    <keywords>XMLDOCUMENT</keywords>
+    <keywords>XMLELEMENT</keywords>
+    <keywords>XMLEXISTS</keywords>
+    <keywords>XMLFOREST</keywords>
+    <keywords>XMLGROUP</keywords>
+    <keywords>XMLNAMESPACES</keywords>
+    <keywords>XMLPARSE</keywords>
+    <keywords>XMLPATTERN</keywords>
+    <keywords>XMLPI</keywords>
+    <keywords>XMLQUERY</keywords>
+    <keywords>XMLROW</keywords>
+    <keywords>XMLSCHEMA</keywords>
+    <keywords>XMLSERIALIZE</keywords>
+    <keywords>XMLTABLE</keywords>
+    <keywords>XMLTEXT</keywords>
+    <keywords>XMLVALIDATE</keywords>
+    <keywords>XQUERY</keywords>
+    <keywords>XSLTRANSFORM</keywords>
+    <keywords>XSROBJECT</keywords>
+    <keywords>YEAR</keywords>
+    <keywords>YEARS</keywords>
+    <keywords>YES</keywords>
+    <operators>&lt;</operators>
+    <operators>&quot;</operators>
+    <operators>%</operators>
+    <operators>&amp;</operators>
+    <operators>''''</operators>
+    <operators>(</operators>
+    <operators>)</operators>
+    <operators>*</operators>
+    <operators>+</operators>
+    <operators>,</operators>
+    <operators>-</operators>
+    <operators>.</operators>
+    <operators>/</operators>
+    <operators>:</operators>
+    <operators>;</operators>
+    <operators>=</operators>
+    <operators>?</operators>
+    <operators>[</operators>
+    <operators>]</operators>
+    <operators>_</operators>
+    <operators>'|'</operators>
+    <operators>,=</operators>
+    <operators>&lt;=</operators>
+    <operators>||</operators>
+    <operators>..</operators>
+    <operators>'-,'</operators>
+    <operators>!</operators>
+    <operators>~</operators>
+    <operators>:=</operators>
+    <operators>{</operators>
+    <operators>}</operators>
+    <operators>(+)</operators>
+  </SQLSyntaxDefinition>
+  <nicknameDefinition constraintSupported="true" indexSupported="true" maximumIdentifierLength="128"/>
+  <schemaDefinition maximumIdentifierLength="128"/>
+  <viewDefinition maximumIdentifierLength="128"/>
+  <privilegedElementDefinitions name="Database">
+    <privilegeDefinitions name="BINDADD"/>
+    <privilegeDefinitions name="CONNECT"/>
+    <privilegeDefinitions name="CREATETAB"/>
+    <privilegeDefinitions name="CREATE_EXTERNAL_ROUTINE"/>
+    <privilegeDefinitions name="CREATE_NOT_FENCED_ROUTINE"/>
+    <privilegeDefinitions name="IMPLICIT_SCHEMA"/>
+    <privilegeDefinitions name="DBADM"/>
+    <privilegeDefinitions name="LOAD"/>
+    <privilegeDefinitions name="QUIESCE_CONNECT"/>
+    <privilegeDefinitions name="SECADM"/>
+    <privilegeDefinitions name="ACCESSCTRL"/>
+    <privilegeDefinitions name="DATAACCESS"/>
+    <privilegeDefinitions name="EXPLAIN"/>
+    <privilegeDefinitions name="SQLADM"/>
+    <privilegeDefinitions name="WLMADM"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Schema">
+    <privilegeDefinitions name="ALTERIN"/>
+    <privilegeDefinitions name="CREATEIN"/>
+    <privilegeDefinitions name="DROPIN"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="PersistentTable">
+    <privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions actionElementDefinitions="COLUMN_1" name="REFERENCES"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions actionElementDefinitions="COLUMN_1" name="UPDATE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="ViewTable">
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions actionElementDefinitions="COLUMN_1" name="UPDATE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Nickname">
+    <privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="REFERENCES"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions name="UPDATE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions xmi:id="COLUMN_1" name="Column"/>
+  <privilegedElementDefinitions name="MaterializedQueryTable">
+    <privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions actionElementDefinitions="COLUMN_1" name="REFERENCES"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions actionElementDefinitions="COLUMN_1" name="UPDATE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Routine">
+    <privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Sequence">
+    <privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="USAGE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Index">
+    <privilegeDefinitions name="CONTROL"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Tablespace">
+    <privilegeDefinitions name="USE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Package">
+    <privilegeDefinitions name="BIND"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Module">
+    <privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="PLSQLPackage">
+    <privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="GlobalVariable">
+    <privilegeDefinitions name="READ"/>
+    <privilegeDefinitions name="WRITE"/>
+  </privilegedElementDefinitions>
+  <constructedDataTypeDefinition arrayDatatypeSupported="true" multisetDatatypeSupported="true" rowDatatypeSupported="true" referenceDatatypeSupported="true" cursorDatatypeSupported="true"/>
+</DBDefinition:DatabaseVendorDefinition>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/runtime/vendors/DB2 UDB_10.5/DB2 UDB_10.5.xmi b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/runtime/vendors/DB2 UDB_10.5/DB2 UDB_10.5.xmi
new file mode 100644
index 0000000..f8ed7b0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/runtime/vendors/DB2 UDB_10.5/DB2 UDB_10.5.xmi
@@ -0,0 +1,1511 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="DB2 UDB" version="V10.5" maximumIdentifierLength="8" viewTriggerSupported="true" maximumCommentLength="64" sequenceSupported="true" mQTSupported="true" aliasSupported="true" userDefinedTypeSupported="true" SQLStatementSupported="true" nicknameSupported="true" xmlSupported="true" packageSupported="true" roleSupported="true" groupSupported="true" userSupported="true" roleAuthorizationSupported="true" constructedDataTypeSupported="true" mQTIndexSupported="true">
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="long">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIGINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_1" lengthSupported="true" maximumLength="2147483647" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob" defaultLength="1048576" lengthUnit="BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="127" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String" defaultLength="1" lengthUnit="DOUBLE_BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>GRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="16336" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String" defaultLength="32" lengthUnit="DOUBLE_BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARGRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_2" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARGRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="254" jdbcEnumType="1" javaClassName="java.lang.String" defaultLength="1">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR</name>
+    <name>CHARACTER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" lengthSupported="true" maximumLength="2147483647" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob" defaultLength="1048576" lengthUnit="BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CLOB</name>
+    <name>CHARACTER LARGE OBJECT</name>
+    <name>CHAR LARGE OBJECT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_LARGE_OBJECT_1" lengthSupported="true" maximumLength="1073741823" primitiveType="NATIONAL_CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob" defaultLength="1048576" lengthUnit="DOUBLE_BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DBCLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="32672" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String" defaultLength="32">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR</name>
+    <name>CHARACTER VARYING</name>
+    <name>CHAR VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_2" primitiveType="CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>CURRENT DATE</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" scaleSupported="true" precisionSupported="true" keyConstraintSupported="true" identitySupported="true" maximumPrecision="31" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal" defaultPrecision="5">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_2" precisionSupported="true" keyConstraintSupported="true" maximumPrecision="34" primitiveType="FLOAT" jdbcEnumType="3" javaClassName="java.math.BigDecimal" defaultPrecision="34">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECFLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE</name>
+    <name>DOUBLE PRECISION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" precisionSupported="true" keyConstraintSupported="true" maximumPrecision="53" primitiveType="FLOAT" jdbcEnumType="6" javaClassName="double" defaultPrecision="53" cutoffPrecision="25">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INTEGER</name>
+    <name>INT</name>
+    <name>BINARY_INTEGER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATALINK_1" lengthSupported="true" maximumLength="200" primitiveType="DATALINK" jdbcEnumType="70" javaClassName="java.net.URL" defaultLength="200" lengthUnit="BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATALINK</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" scaleSupported="true" precisionSupported="true" keyConstraintSupported="true" identitySupported="true" maximumPrecision="31" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal" defaultPrecision="5">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+    <name>NUM</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIME_1" keyConstraintSupported="true" primitiveType="TIME" jdbcEnumType="92" javaClassName="java.sql.Time">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>CURRENT TIME</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" precisionSupported="true" keyConstraintSupported="true" maximumPrecision="12" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp" defaultPrecision="6">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>CURRENT TIMESTAMP</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="254" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]" defaultLength="1" displayName="CHAR ({0}) FOR BIT DATA" displayNameSupported="true">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR FOR BIT DATA</name>
+    <name>CHARACTER FOR BIT DATA</name>
+    <name>CHAR () FOR BIT DATA</name>
+    <name>CHARACTER () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="32672" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]" defaultLength="1" displayName="VARCHAR ({0}) FOR BIT DATA" displayNameSupported="true">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR FOR BIT DATA</name>
+    <name>CHARACTER VARYING FOR BIT DATA</name>
+    <name>CHAR VARYING FOR BIT DATA</name>
+    <name>VARCHAR () FOR BIT DATA</name>
+    <name>CHARACTER VARYING () FOR BIT DATA</name>
+    <name>CHAR VARYING () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_2" primitiveType="BINARY_VARYING" jdbcEnumType="-4" javaClassName="byte[]">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARCHAR FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="XML_TYPE_1" primitiveType="XML_TYPE" jdbcEnumType="1111" orderingSupported="false" groupingSupported="false">
+    <name>XML</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions scaleSupported="true" precisionSupported="true" keyConstraintSupported="true" identitySupported="true" defaultSupported="false" maximumPrecision="31" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMBER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions lengthSupported="true" keyConstraintSupported="true" defaultSupported="false" maximumLength="32672" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String" defaultLength="4096">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR2</name>
+  </predefinedDataTypeDefinitions>
+  <tableSpaceDefinition typeSupported="true" extentSizeSupported="true" prefetchSizeSupported="true" managedBySupported="true" pageSizeSupported="true" bufferPoolSupported="true" maximumIdentifierLength="18">
+    <tableSpaceType>REGULAR</tableSpaceType>
+    <tableSpaceType>TEMPORARY</tableSpaceType>
+    <tableSpaceType>LARGE</tableSpaceType>
+  </tableSpaceDefinition>
+  <storedProcedureDefinition nullInputActionSupported="true" determininsticSupported="true" returnedNullSupported="true" parameterStyleSupported="true" maximumIdentifierLength="128">
+    <predefinedDataTypeDefinitions xmi:id="BOOLEAN_1" primitiveType="BOOLEAN" jdbcEnumType="-7" javaClassName="boolean">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>BOOLEAN</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="CURSOR_1" primitiveType="DATALINK" jdbcEnumType="-100008">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>CURSOR</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="INTEGER_2" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>PLS_INTEGER</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="INTEGER_3" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>BINARY_INTEGER</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="XML_TYPE_2" primitiveType="XML_TYPE" jdbcEnumType="1111" javaClassName="java.sql.Clob">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>XMLTYPE</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="BINARY_2" lengthSupported="true" maximumLength="32767" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]" defaultLength="32767">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>RAW</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_3" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>LONG RAW</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_LARGE_OBJECT_2" primitiveType="NATIONAL_CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>NCLOB</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_2" lengthSupported="true" maximumLength="2000" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String" defaultLength="127">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>NCHAR</name>
+      <name>NATIONAL CHARACTER</name>
+      <name>NATIONAL CHAR</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_3" lengthSupported="true" maximumLength="4000" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String" defaultLength="2048">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>NVARCHAR2</name>
+      <name>NATIONAL CHARACTER VARYING</name>
+      <name>NATIONAL CHAR VARYING</name>
+      <name>NCHAR VARYING</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="INTEGER_4" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>NATURAL</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="CURSOR_2" primitiveType="DATALINK" jdbcEnumType="-100008">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>SYS_REFCURSOR</name>
+      <name>REFCURSOR</name>
+      <name>REF CURSOR</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_3" lengthSupported="true" bitDataSupported="true" maximumLength="4000" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String" defaultLength="1" displayName="STRING({0})" displayNameSupported="true" lengthSemanticSupported="true">
+      <defaultValueTypes>USER</defaultValueTypes>
+      <defaultValueTypes>UID</defaultValueTypes>
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>STRING</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="INTEGER_5" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>POSITIVE</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="INTEGER_6" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>SIGNTYPE</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <languageType>SQL</languageType>
+    <languageType>JAVA</languageType>
+    <languageType>C</languageType>
+    <languageType>COBOL</languageType>
+    <languageType>ASSEMBLY</languageType>
+    <languageType>PLI</languageType>
+    <functionLanguageType>SQL</functionLanguageType>
+    <functionLanguageType>JAVA</functionLanguageType>
+    <functionLanguageType>C</functionLanguageType>
+    <functionLanguageType>OLE</functionLanguageType>
+    <procedureType>PROCEDURE</procedureType>
+    <procedureType>FUNCTION</procedureType>
+  </storedProcedureDefinition>
+  <triggerDefinition granularitySupported="true" referencesClauseSupported="true" perColumnUpdateTriggerSupported="true" rowTriggerReferenceSupported="true" tableTriggerReferenceSupported="true" maximumIdentifierLength="128"/>
+  <columnDefinition identitySupported="true" identityStartValueSupported="true" identityIncrementSupported="true" identityMinimumSupported="true" identityMaximumSupported="true" identityCycleSupported="true" maximumIdentifierLength="128"/>
+  <constraintDefinition informationalConstraintSupported="true" clusteredPrimaryKeySupported="true" clusteredUniqueConstraintSupported="true" maximumPrimaryKeyIdentifierLength="128" maximumForeignKeyIdentifierLength="128" maximumCheckConstraintIdentifierLength="128">
+    <parentUpdateDRIRuleType>RESTRICT</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>RESTRICT</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>SET_NULL</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+    <checkOption>NONE</checkOption>
+    <checkOption>LOCAL</checkOption>
+    <checkOption>CASCADE</checkOption>
+  </constraintDefinition>
+  <indexDefinition clusteringSupported="true" includedColumnsSupported="true" maximumIdentifierLength="128"/>
+  <tableDefinition maximumIdentifierLength="128"/>
+  <sequenceDefinition predefinedDataTypeDefinitions="BIGINT_1 INTEGER_1 SMALLINT_1 DECIMAL_1" defaultDataTypeDefinition="INTEGER_1" typeEnumerationSupported="true" cacheSupported="true" orderSupported="true" noMaximumValueString="NO MAXVALUE" noMinimumValueString="NO MINVALUE" noCacheString="NO CACHE" cacheDefaultValue="20"/>
+  <udtDefinition distinctTypeSupported="true" structuredTypeSupported="true" maximumIdentifierLength="128"/>
+  <queryDefinition/>
+  <SQLSyntaxDefinition>
+    <keywords>ACCESS</keywords>
+    <keywords>ACCESSCTRL</keywords>
+    <keywords>ACCORDING</keywords>
+    <keywords>ACCTNG</keywords>
+    <keywords>ACTION</keywords>
+    <keywords>ACTIVATE</keywords>
+    <keywords>ACTIVATED</keywords>
+    <keywords>ACTIVE</keywords>
+    <keywords>ACTIVITIES</keywords>
+    <keywords>ACTIVITY</keywords>
+    <keywords>ACTIVITYMETRICS</keywords>
+    <keywords>ACTIVITYSTMT</keywords>
+    <keywords>ACTIVITYTOTALTIME</keywords>
+    <keywords>ACTIVITYVALS</keywords>
+    <keywords>ACTUALS</keywords>
+    <keywords>ADAPTIVE</keywords>
+    <keywords>ADD</keywords>
+    <keywords>ADDRESS</keywords>
+    <keywords>ADMIN</keywords>
+    <keywords>ADMINISTRATION</keywords>
+    <keywords>AFTER</keywords>
+    <keywords>AGE</keywords>
+    <keywords>AGENT</keywords>
+    <keywords>AGGREGATE</keywords>
+    <keywords>AGGSQLTEMPSPACE</keywords>
+    <keywords>ALIAS</keywords>
+    <keywords>ALL</keywords>
+    <keywords>ALLOCATE</keywords>
+    <keywords>ALLOW</keywords>
+    <keywords>ALTER</keywords>
+    <keywords>ALTERIN</keywords>
+    <keywords>ALWAYS</keywords>
+    <keywords>ANALYZE_TABLE</keywords>
+    <keywords>ANCHOR</keywords>
+    <keywords>AND</keywords>
+    <keywords>ANY</keywords>
+    <keywords>APPEND</keywords>
+    <keywords>APPLICATION</keywords>
+    <keywords>APPLNAME</keywords>
+    <keywords>APPL_ID</keywords>
+    <keywords>APPL_NAME</keywords>
+    <keywords>APREUSE</keywords>
+    <keywords>ARRAY</keywords>
+    <keywords>ARRAY_AGG</keywords>
+    <keywords>ARRAY_EXISTS</keywords>
+    <keywords>AS</keywords>
+    <keywords>ASC</keywords>
+    <keywords>ASCII</keywords>
+    <keywords>ASENSITIVE</keywords>
+    <keywords>ASSOCIATE</keywords>
+    <keywords>AST</keywords>
+    <keywords>ASUTIME</keywords>
+    <keywords>ASYNCHRONY</keywords>
+    <keywords>AT</keywords>
+    <keywords>ATOMIC</keywords>
+    <keywords>ATTACH</keywords>
+    <keywords>ATTRIBUTE</keywords>
+    <keywords>ATTRIBUTES</keywords>
+    <keywords>AUDIT</keywords>
+    <keywords>AUTHENTICATION</keywords>
+    <keywords>AUTHID</keywords>
+    <keywords>AUTHORIZATION</keywords>
+    <keywords>AUTHORIZATIONS</keywords>
+    <keywords>AUTHORIZED</keywords>
+    <keywords>AUTH_ID</keywords>
+    <keywords>AUTOMATIC</keywords>
+    <keywords>AUTONOMOUS</keywords>
+    <keywords>AUTONOMOUS_TRANSACTION</keywords>
+    <keywords>AUTORESIZE</keywords>
+    <keywords>AUTOSTART</keywords>
+    <keywords>B</keywords>
+    <keywords>BACKUP</keywords>
+    <keywords>BASE</keywords>
+    <keywords>BASE64</keywords>
+    <keywords>BASED</keywords>
+    <keywords>BEFORE</keywords>
+    <keywords>BEGIN</keywords>
+    <keywords>BERNOULLI</keywords>
+    <keywords>BETWEEN</keywords>
+    <keywords>BIGINT</keywords>
+    <keywords>BIN</keywords>
+    <keywords>BINARY</keywords>
+    <keywords>BINARY_INTEGER</keywords>
+    <keywords>BIND</keywords>
+    <keywords>BINDADD</keywords>
+    <keywords>BIT</keywords>
+    <keywords>BLOB</keywords>
+    <keywords>BLOCKED</keywords>
+    <keywords>BLOCKINSERT</keywords>
+    <keywords>BLOCKSIZE</keywords>
+    <keywords>BODY</keywords>
+    <keywords>BOOLEAN</keywords>
+    <keywords>BOTH</keywords>
+    <keywords>BUFFER</keywords>
+    <keywords>BUFFERPOOL</keywords>
+    <keywords>BUFFERPOOLS</keywords>
+    <keywords>BUFFERSIZE</keywords>
+    <keywords>BUILD</keywords>
+    <keywords>BULK</keywords>
+    <keywords>BUSINESS_TIME</keywords>
+    <keywords>BY</keywords>
+    <keywords>BYPASS</keywords>
+    <keywords>BYTE</keywords>
+    <keywords>C</keywords>
+    <keywords>CACHE</keywords>
+    <keywords>CACHING</keywords>
+    <keywords>CALL</keywords>
+    <keywords>CALLED</keywords>
+    <keywords>CALLER</keywords>
+    <keywords>CAPTURE</keywords>
+    <keywords>CARDINALITIES</keywords>
+    <keywords>CARDINALITY</keywords>
+    <keywords>CASCADE</keywords>
+    <keywords>CASCADED</keywords>
+    <keywords>CASE</keywords>
+    <keywords>CAST</keywords>
+    <keywords>CATEGORIES</keywords>
+    <keywords>CCSID</keywords>
+    <keywords>CFGALL</keywords>
+    <keywords>CHANGE</keywords>
+    <keywords>CHANGED</keywords>
+    <keywords>CHANGES</keywords>
+    <keywords>CHANGESUMMARY</keywords>
+    <keywords>CHAR</keywords>
+    <keywords>CHARACTER</keywords>
+    <keywords>CHECK</keywords>
+    <keywords>CHECKED</keywords>
+    <keywords>CHECKING</keywords>
+    <keywords>CLASS</keywords>
+    <keywords>CLIENT</keywords>
+    <keywords>CLIENT_ACCTNG</keywords>
+    <keywords>CLIENT_APPLNAME</keywords>
+    <keywords>CLIENT_USERID</keywords>
+    <keywords>CLIENT_WRKSTNNAME</keywords>
+    <keywords>CLOB</keywords>
+    <keywords>CLOSE</keywords>
+    <keywords>CLR</keywords>
+    <keywords>CLUSTER</keywords>
+    <keywords>COBOL</keywords>
+    <keywords>CODEUNITS16</keywords>
+    <keywords>CODEUNITS32</keywords>
+    <keywords>COLLECT</keywords>
+    <keywords>COLLID</keywords>
+    <keywords>COLUMN</keywords>
+    <keywords>COLUMNS</keywords>
+    <keywords>COMM</keywords>
+    <keywords>COMMENT</keywords>
+    <keywords>COMMIT</keywords>
+    <keywords>COMMITTED</keywords>
+    <keywords>COMPACT</keywords>
+    <keywords>COMPARE</keywords>
+    <keywords>COMPARISONS</keywords>
+    <keywords>COMPILATION</keywords>
+    <keywords>COMPILEDFUNCTION</keywords>
+    <keywords>COMPILEDTRIGGER</keywords>
+    <keywords>COMPILEFRAGMENT</keywords>
+    <keywords>COMPONENT</keywords>
+    <keywords>COMPONENTS</keywords>
+    <keywords>COMPOUND</keywords>
+    <keywords>COMPRESS</keywords>
+    <keywords>COMPRESSION</keywords>
+    <keywords>CONCAT</keywords>
+    <keywords>CONCURRENTDBCOORDACTIVITIES</keywords>
+    <keywords>CONCURRENTWORKLOADACTIVITIES</keywords>
+    <keywords>CONCURRENTWORKLOADOCCURRENCES</keywords>
+    <keywords>CONDITION</keywords>
+    <keywords>CONN</keywords>
+    <keywords>CONNECT</keywords>
+    <keywords>CONNECTION</keywords>
+    <keywords>CONNECTIONIDLETIME</keywords>
+    <keywords>CONNECTIONS</keywords>
+    <keywords>CONNECTOPT</keywords>
+    <keywords>CONNECT_BY_ROOT</keywords>
+    <keywords>CONNHEADER</keywords>
+    <keywords>CONNMEMUSE</keywords>
+    <keywords>CONSERVATIVE</keywords>
+    <keywords>CONSTANT</keywords>
+    <keywords>CONSTRAINT</keywords>
+    <keywords>CONSTRAINTS</keywords>
+    <keywords>CONSTRUCTOR</keywords>
+    <keywords>CONTAINERS</keywords>
+    <keywords>CONTAINS</keywords>
+    <keywords>CONTENT</keywords>
+    <keywords>CONTEXT</keywords>
+    <keywords>CONTINUE</keywords>
+    <keywords>CONTROL</keywords>
+    <keywords>CONVERT</keywords>
+    <keywords>COORDINATOR</keywords>
+    <keywords>COPY</keywords>
+    <keywords>CORRELATOR</keywords>
+    <keywords>COUNT</keywords>
+    <keywords>COUNT_BIG</keywords>
+    <keywords>CPU</keywords>
+    <keywords>CPUTIME</keywords>
+    <keywords>CPUTIMEINSC</keywords>
+    <keywords>CREATE</keywords>
+    <keywords>CREATEIN</keywords>
+    <keywords>CREATETAB</keywords>
+    <keywords>CREATE_EXTERNAL_ROUTINE</keywords>
+    <keywords>CREATE_NOT_FENCED</keywords>
+    <keywords>CREATE_NOT_FENCED_ROUTINE</keywords>
+    <keywords>CREATE_SECURE_OBJECT</keywords>
+    <keywords>CROSS</keywords>
+    <keywords>CS</keywords>
+    <keywords>CUBE</keywords>
+    <keywords>CURRENT</keywords>
+    <keywords>CURRENT_DATE</keywords>
+    <keywords>CURRENT_PATH</keywords>
+    <keywords>CURRENT_SCHEMA</keywords>
+    <keywords>CURRENT_SERVER</keywords>
+    <keywords>CURRENT_TIME</keywords>
+    <keywords>CURRENT_TIMESTAMP</keywords>
+    <keywords>CURRENT_TIMEZONE</keywords>
+    <keywords>CURRENT_USER</keywords>
+    <keywords>CURRVAL</keywords>
+    <keywords>CURSOR</keywords>
+    <keywords>CURSORS</keywords>
+    <keywords>CYCLE</keywords>
+    <keywords>DATA</keywords>
+    <keywords>DATAACCESS</keywords>
+    <keywords>DATABASE</keywords>
+    <keywords>DATATAGINSC</keywords>
+    <keywords>DATE</keywords>
+    <keywords>DAY</keywords>
+    <keywords>DAYS</keywords>
+    <keywords>DB</keywords>
+    <keywords>DB2DARI</keywords>
+    <keywords>DB2GENERAL</keywords>
+    <keywords>DB2GENRL</keywords>
+    <keywords>DB2LBACREADARRAY</keywords>
+    <keywords>DB2LBACREADSET</keywords>
+    <keywords>DB2LBACREADTREE</keywords>
+    <keywords>DB2LBACRULES</keywords>
+    <keywords>DB2LBACWRITEARRAY</keywords>
+    <keywords>DB2LBACWRITESET</keywords>
+    <keywords>DB2LBACWRITETREE</keywords>
+    <keywords>DB2SPL</keywords>
+    <keywords>DB2SQL</keywords>
+    <keywords>DB2VALIDATE</keywords>
+    <keywords>DB2_EXCEPTION_INIT</keywords>
+    <keywords>DB2_RETURN_STATUS</keywords>
+    <keywords>DB2_SQL_NESTING_LEVEL</keywords>
+    <keywords>DB2_TEMPORAL_TRIGGER_FROM_VALUE</keywords>
+    <keywords>DB2_TEMPORAL_TRIGGER_TO_VALUE</keywords>
+    <keywords>DB2_TOKEN_STRING</keywords>
+    <keywords>DBADM</keywords>
+    <keywords>DBCFG</keywords>
+    <keywords>DBCFGVALUES</keywords>
+    <keywords>DBCLOB</keywords>
+    <keywords>DBDBMCFG</keywords>
+    <keywords>DBINFO</keywords>
+    <keywords>DBMCFG</keywords>
+    <keywords>DBMCFGVALUES</keywords>
+    <keywords>DBMEMUSE</keywords>
+    <keywords>DBPARTITIONNUM</keywords>
+    <keywords>DBPARTITIONNUMS</keywords>
+    <keywords>DBPARTITIONS</keywords>
+    <keywords>DDL</keywords>
+    <keywords>DDLALL</keywords>
+    <keywords>DDLDATA</keywords>
+    <keywords>DDLFEDERATED</keywords>
+    <keywords>DDLMONITOR</keywords>
+    <keywords>DDLSECURITY</keywords>
+    <keywords>DDLSQL</keywords>
+    <keywords>DDLSTMTEXEC</keywords>
+    <keywords>DDLSTORAGE</keywords>
+    <keywords>DDLWLM</keywords>
+    <keywords>DDLXML</keywords>
+    <keywords>DEACTIVATE</keywords>
+    <keywords>DEADLOCK</keywords>
+    <keywords>DEADLOCKS</keywords>
+    <keywords>DEBUGINFO</keywords>
+    <keywords>DEC</keywords>
+    <keywords>DECFLOAT</keywords>
+    <keywords>DECIMAL</keywords>
+    <keywords>DECLARE</keywords>
+    <keywords>DECOMPOSITION</keywords>
+    <keywords>DEFAULT</keywords>
+    <keywords>DEFAULTS</keywords>
+    <keywords>DEFER</keywords>
+    <keywords>DEFERRED</keywords>
+    <keywords>DEFINE</keywords>
+    <keywords>DEFINER</keywords>
+    <keywords>DEFINITION</keywords>
+    <keywords>DEGREE</keywords>
+    <keywords>DELETE</keywords>
+    <keywords>DELETING</keywords>
+    <keywords>DEPENDENT</keywords>
+    <keywords>DESC</keywords>
+    <keywords>DESCRIPTOR</keywords>
+    <keywords>DETACH</keywords>
+    <keywords>DETAILED</keywords>
+    <keywords>DETAILS</keywords>
+    <keywords>DETERMINED</keywords>
+    <keywords>DETERMINISTIC</keywords>
+    <keywords>DEVICE</keywords>
+    <keywords>DIAGNOSTICS</keywords>
+    <keywords>DIMENSIONS</keywords>
+    <keywords>DIRTY</keywords>
+    <keywords>DISABLE</keywords>
+    <keywords>DISALLOW</keywords>
+    <keywords>DISPATCH</keywords>
+    <keywords>DISTINCT</keywords>
+    <keywords>DISTRIBUTE</keywords>
+    <keywords>DISTRIBUTED</keywords>
+    <keywords>DISTRIBUTION</keywords>
+    <keywords>DLCONN</keywords>
+    <keywords>DLLOCK</keywords>
+    <keywords>DML</keywords>
+    <keywords>DO</keywords>
+    <keywords>DOCUMENT</keywords>
+    <keywords>DOUBLE</keywords>
+    <keywords>DROP</keywords>
+    <keywords>DROPIN</keywords>
+    <keywords>DROPPED</keywords>
+    <keywords>DYNAMIC</keywords>
+    <keywords>EACH</keywords>
+    <keywords>ELEMENT</keywords>
+    <keywords>ELSE</keywords>
+    <keywords>ELSEIF</keywords>
+    <keywords>ELSIF</keywords>
+    <keywords>EMPTY</keywords>
+    <keywords>ENABLE</keywords>
+    <keywords>ENCRYPTION</keywords>
+    <keywords>END</keywords>
+    <keywords>ENDING</keywords>
+    <keywords>ENFORCED</keywords>
+    <keywords>ENFORCEMENT</keywords>
+    <keywords>ENVIRONMENT</keywords>
+    <keywords>ERASE</keywords>
+    <keywords>ERROR</keywords>
+    <keywords>ESCAPE</keywords>
+    <keywords>ESTIMATE</keywords>
+    <keywords>ESTIMATEDCOST</keywords>
+    <keywords>ESTIMATEDSQLCOST</keywords>
+    <keywords>EUR</keywords>
+    <keywords>EVALUATE</keywords>
+    <keywords>EVENT</keywords>
+    <keywords>EVERY</keywords>
+    <keywords>EVMONSTART</keywords>
+    <keywords>EXACT</keywords>
+    <keywords>EXCEEDED</keywords>
+    <keywords>EXCEPT</keywords>
+    <keywords>EXCEPTION</keywords>
+    <keywords>EXCEPTION_INIT</keywords>
+    <keywords>EXCLUDE</keywords>
+    <keywords>EXCLUDES</keywords>
+    <keywords>EXCLUDING</keywords>
+    <keywords>EXCLUSIVE</keywords>
+    <keywords>EXECNODE</keywords>
+    <keywords>EXECUTABLE</keywords>
+    <keywords>EXECUTE</keywords>
+    <keywords>EXECUTETIME</keywords>
+    <keywords>EXECUTION</keywords>
+    <keywords>EXEMPTION</keywords>
+    <keywords>EXISTS</keywords>
+    <keywords>EXIT</keywords>
+    <keywords>EXPAND</keywords>
+    <keywords>EXPLAIN</keywords>
+    <keywords>EXPRESSION</keywords>
+    <keywords>EXTEND</keywords>
+    <keywords>EXTENDED</keywords>
+    <keywords>EXTENSION</keywords>
+    <keywords>EXTENTSIZE</keywords>
+    <keywords>EXTERNAL</keywords>
+    <keywords>EXTRACT</keywords>
+    <keywords>FAILURE</keywords>
+    <keywords>FALSE</keywords>
+    <keywords>FEDERATED</keywords>
+    <keywords>FEDERATED_TOOL</keywords>
+    <keywords>FENCED</keywords>
+    <keywords>FETCH</keywords>
+    <keywords>FILE</keywords>
+    <keywords>FILEREAD</keywords>
+    <keywords>FILEWRITE</keywords>
+    <keywords>FILTER</keywords>
+    <keywords>FINAL</keywords>
+    <keywords>FIRST</keywords>
+    <keywords>FLOAT</keywords>
+    <keywords>FLUSH</keywords>
+    <keywords>FOLLOWING</keywords>
+    <keywords>FOLLOWS</keywords>
+    <keywords>FOR</keywords>
+    <keywords>FORALL</keywords>
+    <keywords>FORCE</keywords>
+    <keywords>FOREIGN</keywords>
+    <keywords>FOUND</keywords>
+    <keywords>FREE</keywords>
+    <keywords>FREEPAGE</keywords>
+    <keywords>FROM</keywords>
+    <keywords>FULL</keywords>
+    <keywords>FUNCTION</keywords>
+    <keywords>G</keywords>
+    <keywords>GBPCACHE</keywords>
+    <keywords>GENERAL</keywords>
+    <keywords>GENERATE</keywords>
+    <keywords>GENERATED</keywords>
+    <keywords>GENERIC</keywords>
+    <keywords>GET</keywords>
+    <keywords>GLOBAL</keywords>
+    <keywords>GOTO</keywords>
+    <keywords>GRANT</keywords>
+    <keywords>GRAPHIC</keywords>
+    <keywords>GROUP</keywords>
+    <keywords>GROUPING</keywords>
+    <keywords>HANDLER</keywords>
+    <keywords>HARD</keywords>
+    <keywords>HASH</keywords>
+    <keywords>HASHED</keywords>
+    <keywords>HASHING</keywords>
+    <keywords>HAVING</keywords>
+    <keywords>HEX</keywords>
+    <keywords>HEXLIT</keywords>
+    <keywords>HIDDEN</keywords>
+    <keywords>HIERARCHY</keywords>
+    <keywords>HIGH</keywords>
+    <keywords>HISTOGRAM</keywords>
+    <keywords>HISTOGRAMBIN</keywords>
+    <keywords>HISTORY</keywords>
+    <keywords>HOLD</keywords>
+    <keywords>HOUR</keywords>
+    <keywords>HOURS</keywords>
+    <keywords>HPJ</keywords>
+    <keywords>ID</keywords>
+    <keywords>IDENTITY</keywords>
+    <keywords>IF</keywords>
+    <keywords>IGNORE</keywords>
+    <keywords>IMMEDIATE</keywords>
+    <keywords>IMPLEMENTATION</keywords>
+    <keywords>IMPLICIT</keywords>
+    <keywords>IMPLICITLY</keywords>
+    <keywords>IMPLICIT_SCHEMA</keywords>
+    <keywords>IN</keywords>
+    <keywords>INACTIVE</keywords>
+    <keywords>INCLUDE</keywords>
+    <keywords>INCLUDES</keywords>
+    <keywords>INCLUDING</keywords>
+    <keywords>INCLUSIVE</keywords>
+    <keywords>INCREASESIZE</keywords>
+    <keywords>INCREMENT</keywords>
+    <keywords>INCREMENTAL</keywords>
+    <keywords>INDEX</keywords>
+    <keywords>INDEXES</keywords>
+    <keywords>INDICATOR</keywords>
+    <keywords>INDICES</keywords>
+    <keywords>INF</keywords>
+    <keywords>INFINITY</keywords>
+    <keywords>INFIX</keywords>
+    <keywords>INFO</keywords>
+    <keywords>INHERIT</keywords>
+    <keywords>INITIALLY</keywords>
+    <keywords>INITIALSIZE</keywords>
+    <keywords>INITIAL_INSTS</keywords>
+    <keywords>INITIAL_IOS</keywords>
+    <keywords>INLINE</keywords>
+    <keywords>INLINEFUNCTION</keywords>
+    <keywords>INLINETRIGGER</keywords>
+    <keywords>INNER</keywords>
+    <keywords>INOUT</keywords>
+    <keywords>INPUT</keywords>
+    <keywords>INSENSITIVE</keywords>
+    <keywords>INSERT</keywords>
+    <keywords>INSERTING</keywords>
+    <keywords>INSTANTIABLE</keywords>
+    <keywords>INSTEAD</keywords>
+    <keywords>INSTS_PER_ARGBYTE</keywords>
+    <keywords>INSTS_PER_INVOC</keywords>
+    <keywords>INT</keywords>
+    <keywords>INTEGER</keywords>
+    <keywords>INTEGRITY</keywords>
+    <keywords>INTERARRIVALTIME</keywords>
+    <keywords>INTERSECT</keywords>
+    <keywords>INTO</keywords>
+    <keywords>INVALID</keywords>
+    <keywords>INVALIDATION</keywords>
+    <keywords>IO</keywords>
+    <keywords>IOS_PER_ARGBYTE</keywords>
+    <keywords>IOS_PER_INVOC</keywords>
+    <keywords>IS</keywords>
+    <keywords>ISO</keywords>
+    <keywords>ISOLATION</keywords>
+    <keywords>ITERATE</keywords>
+    <keywords>JAVA</keywords>
+    <keywords>JIS</keywords>
+    <keywords>JOIN</keywords>
+    <keywords>K</keywords>
+    <keywords>KEEP</keywords>
+    <keywords>KEEPDYNAMIC</keywords>
+    <keywords>KEY</keywords>
+    <keywords>KEYS</keywords>
+    <keywords>L</keywords>
+    <keywords>LABEL</keywords>
+    <keywords>LANGUAGE</keywords>
+    <keywords>LARGE</keywords>
+    <keywords>LAST</keywords>
+    <keywords>LATERAL</keywords>
+    <keywords>LC_CTYPE</keywords>
+    <keywords>LC_MESSAGES</keywords>
+    <keywords>LC_TIME</keywords>
+    <keywords>LEADING</keywords>
+    <keywords>LEAVE</keywords>
+    <keywords>LEFT</keywords>
+    <keywords>LENGTH</keywords>
+    <keywords>LEVEL</keywords>
+    <keywords>LEVEL2</keywords>
+    <keywords>LIBRARY</keywords>
+    <keywords>LIBRARYADM</keywords>
+    <keywords>LIFETIME</keywords>
+    <keywords>LIKE</keywords>
+    <keywords>LIMIT</keywords>
+    <keywords>LIST</keywords>
+    <keywords>LOAD</keywords>
+    <keywords>LOCAL</keywords>
+    <keywords>LOCALE</keywords>
+    <keywords>LOCATION</keywords>
+    <keywords>LOCATOR</keywords>
+    <keywords>LOCATORS</keywords>
+    <keywords>LOCK</keywords>
+    <keywords>LOCKED</keywords>
+    <keywords>LOCKING</keywords>
+    <keywords>LOCKS</keywords>
+    <keywords>LOCKSIZE</keywords>
+    <keywords>LOCK_ACTIVITY_VALUES</keywords>
+    <keywords>LOCK_PARTICIPANTS</keywords>
+    <keywords>LOCK_PARTICIPANT_ACTIVITIES</keywords>
+    <keywords>LOG</keywords>
+    <keywords>LOGGED</keywords>
+    <keywords>LOGICAL</keywords>
+    <keywords>LONG</keywords>
+    <keywords>LONGVAR</keywords>
+    <keywords>LOOP</keywords>
+    <keywords>LOW</keywords>
+    <keywords>LOWER</keywords>
+    <keywords>M</keywords>
+    <keywords>MAIN</keywords>
+    <keywords>MAINTAINED</keywords>
+    <keywords>MANAGED</keywords>
+    <keywords>MANUALSTART</keywords>
+    <keywords>MAP</keywords>
+    <keywords>MAPPING</keywords>
+    <keywords>MARK</keywords>
+    <keywords>MASK</keywords>
+    <keywords>MATCHED</keywords>
+    <keywords>MATCHING</keywords>
+    <keywords>MATERIALIZED</keywords>
+    <keywords>MAX</keywords>
+    <keywords>MAXFILES</keywords>
+    <keywords>MAXFILESIZE</keywords>
+    <keywords>MAXIMUM</keywords>
+    <keywords>MAXSIZE</keywords>
+    <keywords>MAXVALUE</keywords>
+    <keywords>MDC</keywords>
+    <keywords>MEDIUM</keywords>
+    <keywords>MEMBER</keywords>
+    <keywords>MEMBERS</keywords>
+    <keywords>MERGE</keywords>
+    <keywords>MESSAGE_TEXT</keywords>
+    <keywords>METHOD</keywords>
+    <keywords>METHODS</keywords>
+    <keywords>METRICS</keywords>
+    <keywords>MICROSECOND</keywords>
+    <keywords>MICROSECONDS</keywords>
+    <keywords>MINPCTUSED</keywords>
+    <keywords>MINUS</keywords>
+    <keywords>MINUTE</keywords>
+    <keywords>MINUTES</keywords>
+    <keywords>MINVALUE</keywords>
+    <keywords>MISSING</keywords>
+    <keywords>MIXED</keywords>
+    <keywords>MODE</keywords>
+    <keywords>MODIFIES</keywords>
+    <keywords>MODULE</keywords>
+    <keywords>MONITOR</keywords>
+    <keywords>MONTH</keywords>
+    <keywords>MONTHS</keywords>
+    <keywords>MORE</keywords>
+    <keywords>MOVEMENT</keywords>
+    <keywords>MOVETABLE</keywords>
+    <keywords>NAME</keywords>
+    <keywords>NAMESPACE</keywords>
+    <keywords>NAN</keywords>
+    <keywords>NATIONAL</keywords>
+    <keywords>NATURAL</keywords>
+    <keywords>NCHAR</keywords>
+    <keywords>NCLOB</keywords>
+    <keywords>NESTED</keywords>
+    <keywords>NETWORK</keywords>
+    <keywords>NEW</keywords>
+    <keywords>NEW_TABLE</keywords>
+    <keywords>NEXT</keywords>
+    <keywords>NEXTVAL</keywords>
+    <keywords>NICKNAME</keywords>
+    <keywords>NO</keywords>
+    <keywords>NOCACHE</keywords>
+    <keywords>NOCOPY</keywords>
+    <keywords>NOCYCLE</keywords>
+    <keywords>NODE</keywords>
+    <keywords>NODEGROUP</keywords>
+    <keywords>NODES</keywords>
+    <keywords>NOMAXVALUE</keywords>
+    <keywords>NOMINVALUE</keywords>
+    <keywords>NONBLOCKED</keywords>
+    <keywords>NONE</keywords>
+    <keywords>NOORDER</keywords>
+    <keywords>NORCAC</keywords>
+    <keywords>NORMAL</keywords>
+    <keywords>NOT</keywords>
+    <keywords>NULL</keywords>
+    <keywords>NULLS</keywords>
+    <keywords>NUM</keywords>
+    <keywords>NUMBER</keywords>
+    <keywords>NUMBLOCKPAGES</keywords>
+    <keywords>NUMERIC</keywords>
+    <keywords>NUM_EXECUTIONS</keywords>
+    <keywords>NUM_FREQVALUES</keywords>
+    <keywords>NUM_QUANTILES</keywords>
+    <keywords>NVARCHAR</keywords>
+    <keywords>NVARCHAR2</keywords>
+    <keywords>OBJECT</keywords>
+    <keywords>OBJMAINT</keywords>
+    <keywords>OCCURRENCE</keywords>
+    <keywords>OCTETS</keywords>
+    <keywords>OF</keywords>
+    <keywords>OFF</keywords>
+    <keywords>OFFSET</keywords>
+    <keywords>OLD</keywords>
+    <keywords>OLD_TABLE</keywords>
+    <keywords>OLE</keywords>
+    <keywords>OLEDB</keywords>
+    <keywords>ON</keywords>
+    <keywords>ONCE</keywords>
+    <keywords>ONLINE</keywords>
+    <keywords>ONLY</keywords>
+    <keywords>OPEN</keywords>
+    <keywords>OPTIMIZATION</keywords>
+    <keywords>OPTIMIZE</keywords>
+    <keywords>OPTION</keywords>
+    <keywords>OPTIONS</keywords>
+    <keywords>OPTPROFILE</keywords>
+    <keywords>OR</keywords>
+    <keywords>ORDER</keywords>
+    <keywords>ORDINALITY</keywords>
+    <keywords>ORGANIZE</keywords>
+    <keywords>OSMETRICS</keywords>
+    <keywords>OUT</keywords>
+    <keywords>OUTBOUND</keywords>
+    <keywords>OUTCOME</keywords>
+    <keywords>OUTER</keywords>
+    <keywords>OVER</keywords>
+    <keywords>OVERFLOW</keywords>
+    <keywords>OVERHEAD</keywords>
+    <keywords>OVERLAPS</keywords>
+    <keywords>OVERRIDE</keywords>
+    <keywords>OVERRIDING</keywords>
+    <keywords>OWNERSHIP</keywords>
+    <keywords>P</keywords>
+    <keywords>PACKAGE</keywords>
+    <keywords>PAGE</keywords>
+    <keywords>PAGESIZE</keywords>
+    <keywords>PARALLEL</keywords>
+    <keywords>PARALLEL_ENABLE</keywords>
+    <keywords>PARAMETER</keywords>
+    <keywords>PARAMETERS</keywords>
+    <keywords>PARENT</keywords>
+    <keywords>PART</keywords>
+    <keywords>PARTITION</keywords>
+    <keywords>PARTITIONED</keywords>
+    <keywords>PARTITIONING</keywords>
+    <keywords>PARTITIONINGS</keywords>
+    <keywords>PARTITIONS</keywords>
+    <keywords>PASSING</keywords>
+    <keywords>PASSTHRU</keywords>
+    <keywords>PASSWORD</keywords>
+    <keywords>PATH</keywords>
+    <keywords>PATROLLER</keywords>
+    <keywords>PCTDEACTIVATE</keywords>
+    <keywords>PCTFREE</keywords>
+    <keywords>PERCENT</keywords>
+    <keywords>PERCENT_ARGBYTES</keywords>
+    <keywords>PERFORM</keywords>
+    <keywords>PERIOD</keywords>
+    <keywords>PERMISSION</keywords>
+    <keywords>PIECESIZE</keywords>
+    <keywords>PIPE</keywords>
+    <keywords>PIPELINED</keywords>
+    <keywords>PKGCACHE</keywords>
+    <keywords>PKGCACHE_METRICS</keywords>
+    <keywords>PKGCACHE_STMT_ARGS</keywords>
+    <keywords>PLACING</keywords>
+    <keywords>PLAN</keywords>
+    <keywords>PLS_INTEGER</keywords>
+    <keywords>POLICY</keywords>
+    <keywords>PORTION</keywords>
+    <keywords>POSITION</keywords>
+    <keywords>PRAGMA</keywords>
+    <keywords>PRECEDING</keywords>
+    <keywords>PRECISION</keywords>
+    <keywords>PREDICATES</keywords>
+    <keywords>PREFETCH</keywords>
+    <keywords>PREFETCHSIZE</keywords>
+    <keywords>PREPARE</keywords>
+    <keywords>PRESERVE</keywords>
+    <keywords>PREVENT</keywords>
+    <keywords>PREVIOUS</keywords>
+    <keywords>PREVVAL</keywords>
+    <keywords>PRIMARY</keywords>
+    <keywords>PRIOR</keywords>
+    <keywords>PRIORITY</keywords>
+    <keywords>PRIQTY</keywords>
+    <keywords>PRIVILEGES</keywords>
+    <keywords>PROCEDURE</keywords>
+    <keywords>PROFILE</keywords>
+    <keywords>PROGRAM</keywords>
+    <keywords>PROPAGATE</keywords>
+    <keywords>PROTOCOL</keywords>
+    <keywords>PRUNE</keywords>
+    <keywords>PUBLIC</keywords>
+    <keywords>PUBLISH</keywords>
+    <keywords>QSTATS</keywords>
+    <keywords>QUERY</keywords>
+    <keywords>QUERYNO</keywords>
+    <keywords>QUERYTAG</keywords>
+    <keywords>QUEUEDACTIVITIES</keywords>
+    <keywords>QUEUEDCONNECTIONS</keywords>
+    <keywords>QUEUETIME</keywords>
+    <keywords>QUIESCE_CONNECT</keywords>
+    <keywords>RAISE</keywords>
+    <keywords>RANDOM</keywords>
+    <keywords>RANGE</keywords>
+    <keywords>RATE</keywords>
+    <keywords>RATIO</keywords>
+    <keywords>RAW</keywords>
+    <keywords>READ</keywords>
+    <keywords>READS</keywords>
+    <keywords>REAL</keywords>
+    <keywords>REBALANCE</keywords>
+    <keywords>RECOMMEND</keywords>
+    <keywords>RECORD</keywords>
+    <keywords>RECOVERY</keywords>
+    <keywords>RECREATE</keywords>
+    <keywords>REDIRECT</keywords>
+    <keywords>REDISTRIBUTE</keywords>
+    <keywords>REDUCE</keywords>
+    <keywords>REF</keywords>
+    <keywords>REFERENCE</keywords>
+    <keywords>REFERENCES</keywords>
+    <keywords>REFERENCING</keywords>
+    <keywords>REFRESH</keywords>
+    <keywords>REGISTERS</keywords>
+    <keywords>REGULAR</keywords>
+    <keywords>REGVAR</keywords>
+    <keywords>REGVARVALUES</keywords>
+    <keywords>REJECT</keywords>
+    <keywords>RELEASE</keywords>
+    <keywords>RELEASED</keywords>
+    <keywords>REMAIN</keywords>
+    <keywords>REMAP</keywords>
+    <keywords>REMOTE</keywords>
+    <keywords>REMOVE</keywords>
+    <keywords>RENAME</keywords>
+    <keywords>REOPT</keywords>
+    <keywords>REORG</keywords>
+    <keywords>REPEAT</keywords>
+    <keywords>REPEATABLE</keywords>
+    <keywords>REPLACE</keywords>
+    <keywords>REPLICATED</keywords>
+    <keywords>REPLICATION</keywords>
+    <keywords>REQUEST</keywords>
+    <keywords>REQUIRE</keywords>
+    <keywords>RESET</keywords>
+    <keywords>RESIDENT</keywords>
+    <keywords>RESIGNAL</keywords>
+    <keywords>RESIZE</keywords>
+    <keywords>RESOLVE</keywords>
+    <keywords>RESTART</keywords>
+    <keywords>RESTORE</keywords>
+    <keywords>RESTRICT</keywords>
+    <keywords>RESULT</keywords>
+    <keywords>RESULT_SET_LOCATOR</keywords>
+    <keywords>RESUME</keywords>
+    <keywords>RETAIN</keywords>
+    <keywords>RETURN</keywords>
+    <keywords>RETURNING</keywords>
+    <keywords>RETURNS</keywords>
+    <keywords>RETURN_STATUS</keywords>
+    <keywords>REUSE</keywords>
+    <keywords>REVERSE</keywords>
+    <keywords>REVOKE</keywords>
+    <keywords>RID</keywords>
+    <keywords>RID_BIT</keywords>
+    <keywords>RIGHT</keywords>
+    <keywords>ROLE</keywords>
+    <keywords>ROLLBACK</keywords>
+    <keywords>ROLLFORWARD</keywords>
+    <keywords>ROLLOUT</keywords>
+    <keywords>ROLLUP</keywords>
+    <keywords>ROOT</keywords>
+    <keywords>ROUNDING</keywords>
+    <keywords>ROUND_CEILING</keywords>
+    <keywords>ROUND_DOWN</keywords>
+    <keywords>ROUND_FLOOR</keywords>
+    <keywords>ROUND_HALF_EVEN</keywords>
+    <keywords>ROUND_HALF_UP</keywords>
+    <keywords>ROUTINES</keywords>
+    <keywords>ROW</keywords>
+    <keywords>ROWS</keywords>
+    <keywords>ROW_COUNT</keywords>
+    <keywords>RR</keywords>
+    <keywords>RS</keywords>
+    <keywords>RULE</keywords>
+    <keywords>RULES</keywords>
+    <keywords>RUN</keywords>
+    <keywords>RUNSTATS</keywords>
+    <keywords>S</keywords>
+    <keywords>SAFE</keywords>
+    <keywords>SAMPLED</keywords>
+    <keywords>SAVEPOINT</keywords>
+    <keywords>SBCS</keywords>
+    <keywords>SCANS</keywords>
+    <keywords>SCHEMA</keywords>
+    <keywords>SCMETRICS</keywords>
+    <keywords>SCOPE</keywords>
+    <keywords>SCRATCHPAD</keywords>
+    <keywords>SCROLL</keywords>
+    <keywords>SCSTATS</keywords>
+    <keywords>SEARCH</keywords>
+    <keywords>SECADM</keywords>
+    <keywords>SECMAINT</keywords>
+    <keywords>SECOND</keywords>
+    <keywords>SECONDS</keywords>
+    <keywords>SECQTY</keywords>
+    <keywords>SECTION</keywords>
+    <keywords>SECURED</keywords>
+    <keywords>SECURITY</keywords>
+    <keywords>SELECT</keywords>
+    <keywords>SELECTION</keywords>
+    <keywords>SELECTIVITY</keywords>
+    <keywords>SELF</keywords>
+    <keywords>SENSITIVE</keywords>
+    <keywords>SEQUENCE</keywords>
+    <keywords>SERIALIZABLE</keywords>
+    <keywords>SERVER</keywords>
+    <keywords>SERVICE</keywords>
+    <keywords>SESSION</keywords>
+    <keywords>SESSION_USER</keywords>
+    <keywords>SET</keywords>
+    <keywords>SETS</keywords>
+    <keywords>SETSESSIONUSER</keywords>
+    <keywords>SETTING</keywords>
+    <keywords>SHARE</keywords>
+    <keywords>SHARES</keywords>
+    <keywords>SHRLEVEL</keywords>
+    <keywords>SIBLINGS</keywords>
+    <keywords>SIGNAL</keywords>
+    <keywords>SIMPLE</keywords>
+    <keywords>SIZE</keywords>
+    <keywords>SKIP</keywords>
+    <keywords>SMALLINT</keywords>
+    <keywords>SNAN</keywords>
+    <keywords>SNAPSHOT</keywords>
+    <keywords>SOFT</keywords>
+    <keywords>SOME</keywords>
+    <keywords>SOURCE</keywords>
+    <keywords>SPECIAL</keywords>
+    <keywords>SPECIFIC</keywords>
+    <keywords>SPECIFICATION</keywords>
+    <keywords>SPLIT</keywords>
+    <keywords>SQL</keywords>
+    <keywords>SQLADM</keywords>
+    <keywords>SQLCODE</keywords>
+    <keywords>SQLDATA</keywords>
+    <keywords>SQLERRM</keywords>
+    <keywords>SQLEXCEPTION</keywords>
+    <keywords>SQLID</keywords>
+    <keywords>SQLINTERNAL</keywords>
+    <keywords>SQLROWSREAD</keywords>
+    <keywords>SQLROWSREADINSC</keywords>
+    <keywords>SQLROWSRETURNED</keywords>
+    <keywords>SQLSTATE</keywords>
+    <keywords>SQLTEMPSPACE</keywords>
+    <keywords>SQLWARNING</keywords>
+    <keywords>SQL_CCFLAGS</keywords>
+    <keywords>SSA</keywords>
+    <keywords>STABILITY</keywords>
+    <keywords>STAGING</keywords>
+    <keywords>START</keywords>
+    <keywords>STARTING</keywords>
+    <keywords>STATE</keywords>
+    <keywords>STATEMENT</keywords>
+    <keywords>STATEMENTS</keywords>
+    <keywords>STATIC</keywords>
+    <keywords>STATISTICS</keywords>
+    <keywords>STATUS</keywords>
+    <keywords>STAY</keywords>
+    <keywords>STMT</keywords>
+    <keywords>STMTHIST</keywords>
+    <keywords>STMTVALS</keywords>
+    <keywords>STMT_EXEC_TIME</keywords>
+    <keywords>STOGROUP</keywords>
+    <keywords>STOP</keywords>
+    <keywords>STORAGE</keywords>
+    <keywords>STRIP</keywords>
+    <keywords>STRIPE</keywords>
+    <keywords>STRONG</keywords>
+    <keywords>STYLE</keywords>
+    <keywords>SUB</keywords>
+    <keywords>SUBSECTION</keywords>
+    <keywords>SUBTYPE</keywords>
+    <keywords>SUCCESS</keywords>
+    <keywords>SUMMARY</keywords>
+    <keywords>SUSPEND</keywords>
+    <keywords>SWITCH</keywords>
+    <keywords>SYMMETRIC</keywords>
+    <keywords>SYNONYM</keywords>
+    <keywords>SYSADM</keywords>
+    <keywords>SYSADMIN</keywords>
+    <keywords>SYSCTRL</keywords>
+    <keywords>SYSDATE</keywords>
+    <keywords>SYSMAINT</keywords>
+    <keywords>SYSMON</keywords>
+    <keywords>SYSTEM</keywords>
+    <keywords>SYSTEM_TIME</keywords>
+    <keywords>SYSTEM_USER</keywords>
+    <keywords>SYS_REFCURSOR</keywords>
+    <keywords>T</keywords>
+    <keywords>TABLE</keywords>
+    <keywords>TABLES</keywords>
+    <keywords>TABLESAMPLE</keywords>
+    <keywords>TABLESPACE</keywords>
+    <keywords>TABLESPACES</keywords>
+    <keywords>TAG</keywords>
+    <keywords>TARGET</keywords>
+    <keywords>TEMPLATE</keywords>
+    <keywords>TEMPORAL</keywords>
+    <keywords>TEMPORARY</keywords>
+    <keywords>TEXT</keywords>
+    <keywords>THAN</keywords>
+    <keywords>THEN</keywords>
+    <keywords>THREADSAFE</keywords>
+    <keywords>THRESHOLD</keywords>
+    <keywords>THRESHOLDVIOLATIONS</keywords>
+    <keywords>THROUGH</keywords>
+    <keywords>TIER</keywords>
+    <keywords>TIME</keywords>
+    <keywords>TIMEOUT</keywords>
+    <keywords>TIMERONCOST</keywords>
+    <keywords>TIMESTAMP</keywords>
+    <keywords>TIMEZONE</keywords>
+    <keywords>TO</keywords>
+    <keywords>TOKEN</keywords>
+    <keywords>TOTALDBPARTITIONCONNECTIONS</keywords>
+    <keywords>TOTALMEMBERCONNECTIONS</keywords>
+    <keywords>TOTALSCMEMBERCONNECTIONS</keywords>
+    <keywords>TOTALSCPARTITIONCONNECTIONS</keywords>
+    <keywords>TRAILING</keywords>
+    <keywords>TRANSACTION</keywords>
+    <keywords>TRANSACTIONS</keywords>
+    <keywords>TRANSFER</keywords>
+    <keywords>TRANSFERRATE</keywords>
+    <keywords>TRANSFORM</keywords>
+    <keywords>TRANSFORMS</keywords>
+    <keywords>TRANSLATE</keywords>
+    <keywords>TREAT</keywords>
+    <keywords>TREE</keywords>
+    <keywords>TRIGGER</keywords>
+    <keywords>TRIGGERS</keywords>
+    <keywords>TRIM</keywords>
+    <keywords>TRUE</keywords>
+    <keywords>TRUNC</keywords>
+    <keywords>TRUNCATE</keywords>
+    <keywords>TRUSTED</keywords>
+    <keywords>TSN</keywords>
+    <keywords>TWOLEVEL</keywords>
+    <keywords>TXNCOMPLETION</keywords>
+    <keywords>TYPE</keywords>
+    <keywords>TYPES</keywords>
+    <keywords>UESCAPE</keywords>
+    <keywords>UNBOUNDED</keywords>
+    <keywords>UNCHECKED</keywords>
+    <keywords>UNCOMMITTED</keywords>
+    <keywords>UNDER</keywords>
+    <keywords>UNDO</keywords>
+    <keywords>UNFORMATTED</keywords>
+    <keywords>UNICODE</keywords>
+    <keywords>UNION</keywords>
+    <keywords>UNIQUE</keywords>
+    <keywords>UNIT</keywords>
+    <keywords>UNITS</keywords>
+    <keywords>UNNEST</keywords>
+    <keywords>UNSAFE</keywords>
+    <keywords>UNSAMPLED</keywords>
+    <keywords>UNTIL</keywords>
+    <keywords>UOW</keywords>
+    <keywords>UOWTOTALTIME</keywords>
+    <keywords>UOW_EXECUTABLE_LIST</keywords>
+    <keywords>UOW_METRICS</keywords>
+    <keywords>UOW_PACKAGE_LIST</keywords>
+    <keywords>UPDATE</keywords>
+    <keywords>UPDATED_SINCE_BOUNDARY_TIME</keywords>
+    <keywords>UPDATING</keywords>
+    <keywords>UPON</keywords>
+    <keywords>UR</keywords>
+    <keywords>URI</keywords>
+    <keywords>USA</keywords>
+    <keywords>USAGE</keywords>
+    <keywords>USE</keywords>
+    <keywords>USER</keywords>
+    <keywords>USERID</keywords>
+    <keywords>USING</keywords>
+    <keywords>UTILALL</keywords>
+    <keywords>UTILLOCATION</keywords>
+    <keywords>UTILPHASE</keywords>
+    <keywords>UTILSTART</keywords>
+    <keywords>UTILSTOP</keywords>
+    <keywords>VALIDATE</keywords>
+    <keywords>VALIDATED</keywords>
+    <keywords>VALUE</keywords>
+    <keywords>VALUES</keywords>
+    <keywords>VARCHAR</keywords>
+    <keywords>VARCHAR2</keywords>
+    <keywords>VARGRAPHIC</keywords>
+    <keywords>VARIABLE</keywords>
+    <keywords>VARIANT</keywords>
+    <keywords>VARRAY</keywords>
+    <keywords>VARYING</keywords>
+    <keywords>VCAT</keywords>
+    <keywords>VERIFY_GROUP_FOR_USER</keywords>
+    <keywords>VERIFY_ROLE_FOR_USER</keywords>
+    <keywords>VERIFY_TRUSTED_CONTEXT_ROLE_FOR_USER</keywords>
+    <keywords>VERSION</keywords>
+    <keywords>VERSIONING</keywords>
+    <keywords>VERSIONS</keywords>
+    <keywords>VIEW</keywords>
+    <keywords>VIOLATIONS</keywords>
+    <keywords>VOLATILE</keywords>
+    <keywords>WAIT</keywords>
+    <keywords>WAITING</keywords>
+    <keywords>WATER</keywords>
+    <keywords>WCSTATS</keywords>
+    <keywords>WEAK</keywords>
+    <keywords>WELLFORMED</keywords>
+    <keywords>WHEN</keywords>
+    <keywords>WHERE</keywords>
+    <keywords>WHILE</keywords>
+    <keywords>WHITESPACE</keywords>
+    <keywords>WITH</keywords>
+    <keywords>WITHIN</keywords>
+    <keywords>WITHOUT</keywords>
+    <keywords>WLMADM</keywords>
+    <keywords>WLMETRICS</keywords>
+    <keywords>WLSTATS</keywords>
+    <keywords>WORK</keywords>
+    <keywords>WORKLOAD</keywords>
+    <keywords>WRAP</keywords>
+    <keywords>WRAPPER</keywords>
+    <keywords>WRITE</keywords>
+    <keywords>WRITEDOWN</keywords>
+    <keywords>WRITEUP</keywords>
+    <keywords>WRKSTNNAME</keywords>
+    <keywords>XACT</keywords>
+    <keywords>XML</keywords>
+    <keywords>XMLAGG</keywords>
+    <keywords>XMLATTRIBUTES</keywords>
+    <keywords>XMLBINARY</keywords>
+    <keywords>XMLCAST</keywords>
+    <keywords>XMLCOMMENT</keywords>
+    <keywords>XMLCONCAT</keywords>
+    <keywords>XMLDECLARATION</keywords>
+    <keywords>XMLDOCUMENT</keywords>
+    <keywords>XMLELEMENT</keywords>
+    <keywords>XMLEXISTS</keywords>
+    <keywords>XMLFOREST</keywords>
+    <keywords>XMLGROUP</keywords>
+    <keywords>XMLNAMESPACES</keywords>
+    <keywords>XMLPARSE</keywords>
+    <keywords>XMLPATTERN</keywords>
+    <keywords>XMLPI</keywords>
+    <keywords>XMLQUERY</keywords>
+    <keywords>XMLROW</keywords>
+    <keywords>XMLSCHEMA</keywords>
+    <keywords>XMLSERIALIZE</keywords>
+    <keywords>XMLTABLE</keywords>
+    <keywords>XMLTEXT</keywords>
+    <keywords>XMLVALIDATE</keywords>
+    <keywords>XQUERY</keywords>
+    <keywords>XSLTRANSFORM</keywords>
+    <keywords>XSROBJECT</keywords>
+    <keywords>YEAR</keywords>
+    <keywords>YEARS</keywords>
+    <keywords>YES</keywords>
+    <operators>&lt;</operators>
+    <operators>&quot;</operators>
+    <operators>%</operators>
+    <operators>&amp;</operators>
+    <operators>''''</operators>
+    <operators>(</operators>
+    <operators>)</operators>
+    <operators>*</operators>
+    <operators>+</operators>
+    <operators>,</operators>
+    <operators>-</operators>
+    <operators>.</operators>
+    <operators>/</operators>
+    <operators>:</operators>
+    <operators>;</operators>
+    <operators>=</operators>
+    <operators>?</operators>
+    <operators>[</operators>
+    <operators>]</operators>
+    <operators>_</operators>
+    <operators>'|'</operators>
+    <operators>,=</operators>
+    <operators>&lt;=</operators>
+    <operators>||</operators>
+    <operators>..</operators>
+    <operators>'-,'</operators>
+    <operators>!</operators>
+    <operators>~</operators>
+    <operators>:=</operators>
+    <operators>{</operators>
+    <operators>}</operators>
+    <operators>(+)</operators>
+  </SQLSyntaxDefinition>
+  <nicknameDefinition constraintSupported="true" indexSupported="true" maximumIdentifierLength="128"/>
+  <schemaDefinition maximumIdentifierLength="128"/>
+  <viewDefinition maximumIdentifierLength="128"/>
+  <privilegedElementDefinitions name="Database">
+    <privilegeDefinitions name="BINDADD"/>
+    <privilegeDefinitions name="CONNECT"/>
+    <privilegeDefinitions name="CREATETAB"/>
+    <privilegeDefinitions name="CREATE_EXTERNAL_ROUTINE"/>
+    <privilegeDefinitions name="CREATE_NOT_FENCED_ROUTINE"/>
+    <privilegeDefinitions name="IMPLICIT_SCHEMA"/>
+    <privilegeDefinitions name="DBADM"/>
+    <privilegeDefinitions name="LOAD"/>
+    <privilegeDefinitions name="QUIESCE_CONNECT"/>
+    <privilegeDefinitions name="SECADM"/>
+    <privilegeDefinitions name="ACCESSCTRL"/>
+    <privilegeDefinitions name="DATAACCESS"/>
+    <privilegeDefinitions name="EXPLAIN"/>
+    <privilegeDefinitions name="SQLADM"/>
+    <privilegeDefinitions name="WLMADM"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Schema">
+    <privilegeDefinitions name="ALTERIN"/>
+    <privilegeDefinitions name="CREATEIN"/>
+    <privilegeDefinitions name="DROPIN"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="PersistentTable">
+    <privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions actionElementDefinitions="COLUMN_1" name="REFERENCES"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions actionElementDefinitions="COLUMN_1" name="UPDATE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="ViewTable">
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions actionElementDefinitions="COLUMN_1" name="UPDATE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Nickname">
+    <privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="REFERENCES"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions name="UPDATE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions xmi:id="COLUMN_1" name="Column"/>
+  <privilegedElementDefinitions name="MaterializedQueryTable">
+    <privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions actionElementDefinitions="COLUMN_1" name="REFERENCES"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions actionElementDefinitions="COLUMN_1" name="UPDATE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Routine">
+    <privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Sequence">
+    <privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="USAGE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Index">
+    <privilegeDefinitions name="CONTROL"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Tablespace">
+    <privilegeDefinitions name="USE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Package">
+    <privilegeDefinitions name="BIND"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Module">
+    <privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="PLSQLPackage">
+    <privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="GlobalVariable">
+    <privilegeDefinitions name="READ"/>
+    <privilegeDefinitions name="WRITE"/>
+  </privilegedElementDefinitions>
+  <constructedDataTypeDefinition arrayDatatypeSupported="true" multisetDatatypeSupported="true" rowDatatypeSupported="true" referenceDatatypeSupported="true" cursorDatatypeSupported="true"/>
+</DBDefinition:DatabaseVendorDefinition>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/runtime/vendors/DB2 UDB_8.1/DB2 UDB_8.1.xmi b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/runtime/vendors/DB2 UDB_8.1/DB2 UDB_8.1.xmi
new file mode 100644
index 0000000..ecd22a2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/runtime/vendors/DB2 UDB_8.1/DB2 UDB_8.1.xmi
@@ -0,0 +1,800 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="DB2 UDB" version="V8.1" maximumIdentifierLength="8" 
+viewTriggerSupported="true" maximumCommentLength="64" sequenceSupported="true" mQTSupported="true" aliasSupported="true" SQLStatementSupported="true" nicknameSupported="true" userDefinedTypeSupported="true" roleSupported="false"
+userSupported="true" groupSupported="true" packageSupported="true">
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="long">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIGINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="BYTE" defaultLength="1024" maximumLength="2147483647" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_1" lengthSupported="true" defaultLength="1" maximumLength="127" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>GRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_1" lengthSupported="true" defaultLength="32" maximumLength="16336" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARGRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_2" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARGRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="254" primitiveType="CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR</name>
+    <name>CHARACTER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="BYTE" defaultLength="1024" maximumLength="2147483647" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CLOB</name>
+    <name>CHARACTER LARGE OBJECT</name>
+    <name>CHAR LARGE OBJECT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="DOUBLE_BYTE" defaultLength="1024" maximumLength="1073741823" primitiveType="NATIONAL_CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DBCLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" keyConstraintSupported="true" defaultLength="32" maximumLength="32672" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR</name>
+    <name>CHARACTER VARYING</name>
+    <name>CHAR VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_2" primitiveType="CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">
+    <defaultValueTypes>CURRENT DATE</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" precisionSupported="true" defaultPrecision="5" maximumPrecision="31" scaleSupported="true" defaultScale="0" keyConstraintSupported="true" identitySupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" keyConstraintSupported="true" primitiveType="FLOAT" precisionSupported="true" defaultPrecision="53" maximumPrecision="53" cutoffPrecision="25" jdbcEnumType="6" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INTEGER</name>
+    <name>INT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATALINK_1" lengthSupported="true" lengthUnit="BYTE" defaultLength="200" maximumLength="200" primitiveType="DATALINK" jdbcEnumType="70" javaClassName="java.net.URL">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATALINK</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" identitySupported="true" precisionSupported="true" defaultPrecision="5" maximumPrecision="31" scaleSupported="true" defaultScale="0" keyConstraintSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+    <name>NUM</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIME_1" keyConstraintSupported="true" primitiveType="TIME" jdbcEnumType="92" javaClassName="java.sql.Time">
+    <defaultValueTypes>CURRENT TIME</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>CURRENT TIMESTAMP</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" lengthSupported="true"  defaultLength="1" displayNameSupported="true" displayName="CHAR ({0}) FOR BIT DATA" keyConstraintSupported="true" maximumLength="254" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR FOR BIT DATA</name>
+    <name>CHARACTER FOR BIT DATA</name>
+    <name>CHAR () FOR BIT DATA</name>
+    <name>CHARACTER () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_1" lengthSupported="true"  defaultLength="1" displayNameSupported="true" displayName="VARCHAR ({0}) FOR BIT DATA" keyConstraintSupported="true" maximumLength="32672" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR FOR BIT DATA</name>
+    <name>CHARACTER VARYING FOR BIT DATA</name>
+    <name>CHAR VARYING FOR BIT DATA</name>
+    <name>VARCHAR () FOR BIT DATA</name>
+    <name>CHARACTER VARYING () FOR BIT DATA</name>
+    <name>CHAR VARYING () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_2" primitiveType="BINARY_VARYING" jdbcEnumType="-4" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARCHAR FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <tableSpaceDefinition maximumIdentifierLength="18" typeSupported="true" extentSizeSupported="true" prefetchSizeSupported="true" managedBySupported="true" pageSizeSupported="true" bufferPoolSupported="true">
+    <tableSpaceType>REGULAR</tableSpaceType>
+    <tableSpaceType>TEMPORARY</tableSpaceType>
+    <tableSpaceType>LARGE</tableSpaceType>
+  </tableSpaceDefinition>
+  <storedProcedureDefinition maximumIdentifierLength="128" nullInputActionSupported="true" determininsticSupported="true" returnedNullSupported="true" parameterStyleSupported="true">
+    <languageType>SQL</languageType>
+    <languageType>JAVA</languageType>
+    <languageType>C</languageType>
+    <languageType>COBOL</languageType>
+    <languageType>ASSEMBLY</languageType>
+    <languageType>PLI</languageType>
+    <functionLanguageType>SQL</functionLanguageType>
+    <functionLanguageType>JAVA</functionLanguageType>
+    <functionLanguageType>C</functionLanguageType>
+    <functionLanguageType>OLE</functionLanguageType>
+    <procedureType>PROCEDURE</procedureType>
+    <procedureType>FUNCTION</procedureType>
+  </storedProcedureDefinition>
+  <triggerDefinition maximumIdentifierLength="18" whenClauseSupported="true" granularitySupported="true" referencesClauseSupported="true" perColumnUpdateTriggerSupported="true" rowTriggerReferenceSupported="true" tableTriggerReferenceSupported="true"/>
+  <columnDefinition maximumIdentifierLength="30" identitySupported="true" computedSupported="true" identityStartValueSupported="true" identityIncrementSupported="true" identityMinimumSupported="true" identityMaximumSupported="true" identityCycleSupported="true"/>
+  <constraintDefinition maximumPrimaryKeyIdentifierLength="18" maximumForeignKeyIdentifierLength="18" maximumCheckConstraintIdentifierLength="18" clusteredPrimaryKeySupported="true" clusteredUniqueConstraintSupported="true" informationalConstraintSupported="true">
+    <parentUpdateDRIRuleType>RESTRICT</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>RESTRICT</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>SET_NULL</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+    <checkOption>NONE</checkOption>
+    <checkOption>LOCAL</checkOption>
+    <checkOption>CASCADE</checkOption>
+  </constraintDefinition>
+  <sequenceDefinition predefinedDataTypeDefinitions="BIGINT_1 INTEGER_1 SMALLINT_1 DECIMAL_1" defaultDataTypeDefinition="INTEGER_1" typeEnumerationSupported="true" cacheSupported="true" orderSupported="true" noMaximumValueString="NO MAXVALUE" noMinimumValueString="NO MINVALUE" noCacheString="NO CACHE" cacheDefaultValue="20"/>
+  <udtDefinition maximumIdentifierLength="18" distinctTypeSupported="true" structuredTypeSupported="true"/>
+  <indexDefinition clusteringSupported="true" maximumIdentifierLength="18"/>
+  <queryDefinition hostVariableMarker=":"/>
+  <nicknameDefinition maximumIdentifierLength="128" constraintSupported="true" indexSupported="true"/>
+  <viewDefinition maximumIdentifierLength="128" checkOptionLevelsSupported="true"/>
+  <tableDefinition maximumIdentifierLength="128"/>
+  <schemaDefinition maximumIdentifierLength="30"/>
+    <privilegedElementDefinitions name="Database">
+    <privilegeDefinitions name="BINDADD"/>
+    <privilegeDefinitions name="CONNECT"/>
+    <privilegeDefinitions name="CREATETAB"/>
+    <privilegeDefinitions name="CREATE_EXTERNAL_ROUTINE"/>
+    <privilegeDefinitions name="CREATE_NOT_FENCED_ROUTINE"/>
+    <privilegeDefinitions name="IMPLICIT_SCHEMA"/>
+    <privilegeDefinitions name="DBADM"/>
+    <privilegeDefinitions name="LOAD"/>
+    <privilegeDefinitions name="QUIESCE_CONNECT"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Schema">
+  	<privilegeDefinitions name="ALTERIN"/>
+  	<privilegeDefinitions name="CREATEIN"/>
+    <privilegeDefinitions name="DROPIN"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="PersistentTable">
+  	<privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="REFERENCES" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="ViewTable">
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Nickname">
+  	<privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="REFERENCES"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions xmi:id="COLUMN_1" name="Column"/>
+  <privilegedElementDefinitions name="MaterializedQueryTable">
+  	<privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="REFERENCES" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Routine">
+  	<privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Sequence">
+  	<privilegeDefinitions name="ALTER"/>
+  	<privilegeDefinitions name="USAGE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Index">
+  	<privilegeDefinitions name="CONTROL"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Tablespace">
+  	<privilegeDefinitions name="USE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Package">
+    <privilegeDefinitions name="BIND"/>
+  	<privilegeDefinitions name="CONTROL"/>
+  	<privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <SQLSyntaxDefinition terminationCharacter=";">
+    <keywords>ABSOLUTE</keywords>
+    <keywords>ACCESS</keywords>
+    <keywords>ACTION</keywords>
+    <keywords>ACTIVATE</keywords>
+    <keywords>ADA</keywords>
+    <keywords>ADD</keywords>
+    <keywords>AFTER</keywords>
+    <keywords>ALIAS</keywords>
+    <keywords>ALL</keywords>
+    <keywords>ALLOCATE</keywords>
+    <keywords>ALLOW</keywords>
+    <keywords>ALTER</keywords>
+    <keywords>ALTERIN</keywords>
+    <keywords>ALWAYS</keywords>
+    <keywords>AND</keywords>
+    <keywords>ANY</keywords>
+    <keywords>APPEND</keywords>    
+    <keywords>ARE</keywords>
+    <keywords>AS</keywords>
+    <keywords>ASC</keywords>
+    <keywords>ASCII</keywords>
+    <keywords>ASSERTION</keywords>
+    <keywords>ASSOCIATE</keywords>    
+    <keywords>ASUTIME</keywords>
+    <keywords>AT</keywords>
+    <keywords>ATOMIC</keywords>        
+    <keywords>AUTHORIZATION</keywords>    
+    <keywords>AUTOMATIC</keywords>    
+    <keywords>AVG</keywords>
+    <keywords>BEFORE</keywords>
+    <keywords>BEGIN</keywords>
+    <keywords>BETWEEN</keywords>
+    <keywords>BIGINT</keywords>
+    <keywords>BINARY</keywords>
+    <keywords>BIND</keywords>
+    <keywords>BINDADD</keywords>
+    <keywords>BIT</keywords>
+    <keywords>BIT_LENGTH</keywords>
+    <keywords>BLOB</keywords>
+    <keywords>BLOCKED</keywords>
+    <keywords>BOTH</keywords>    
+    <keywords>BUFFERPOOL</keywords>    
+    <keywords>BY</keywords>
+    <keywords>C</keywords>
+    <keywords>CACHE</keywords>
+    <keywords>CALL</keywords>
+    <keywords>CALLED</keywords>    
+    <keywords>CAPTURE</keywords>
+    <keywords>CARDINALITY</keywords>
+    <keywords>CASCADE</keywords>
+    <keywords>CASCADED</keywords>
+    <keywords>CASE</keywords>
+    <keywords>CAST</keywords>
+    <keywords>CATALOG</keywords>    
+    <keywords>CHANGE</keywords>    
+    <keywords>CHAR</keywords>
+    <keywords>CHAR_LENGTH</keywords>
+    <keywords>CHARACTER</keywords>
+    <keywords>CHARACTER_LENGTH</keywords>    
+    <keywords>CHECK</keywords>
+    <keywords>CHECKED</keywords>    
+    <keywords>CLIENT</keywords>
+    <keywords>CLOB</keywords>
+    <keywords>CLOSE</keywords>
+    <keywords>CLUSTER</keywords>
+    <keywords>COBOL</keywords>    
+    <keywords>COLLATE</keywords>
+    <keywords>COLLATION</keywords>    
+    <keywords>COLLECT</keywords>
+    <keywords>COLLID</keywords>
+    <keywords>COLUMN</keywords>    
+    <keywords>COMMENT</keywords>
+    <keywords>COMMIT</keywords>
+    <keywords>COMMITTED</keywords>
+    <keywords>COMPARISONS</keywords>
+    <keywords>CONCAT</keywords>
+    <keywords>CONDITION</keywords>    
+    <keywords>CONNECT</keywords>
+    <keywords>CONNECTION</keywords>    
+    <keywords>CONSERVATIVE</keywords>
+    <keywords>CONSTRAINT</keywords>     
+    <keywords>CONSTRAINTS</keywords>
+    <keywords>CONTAINS</keywords>
+    <keywords>CONTINUE</keywords>
+    <keywords>CONTROL</keywords>
+    <keywords>CONVERT</keywords>
+    <keywords>COPY</keywords>
+    <keywords>CORRELATION</keywords>
+    <keywords>CORR</keywords>
+    <keywords>CORRESPONDING</keywords>
+    <keywords>COUNT</keywords>
+    <keywords>COUNT_BIG</keywords>    
+    <keywords>C++</keywords>
+    <keywords>CREATE</keywords>
+    <keywords>CREATEIN</keywords>    
+    <keywords>CREATETAB</keywords>
+    <keywords>CROSS</keywords>
+    <keywords>CUBE</keywords>
+    <keywords>CURRENT</keywords>
+    <keywords>CURRENT_DATE</keywords>    
+    <keywords>CURRENT_EXPLAIN_MODE</keywords>     
+    <keywords>CURRENT_PATH</keywords>    
+    <keywords>CURRENT_SCHEMA</keywords>
+    <keywords>CURRENT_SERVER</keywords>
+    <keywords>CURRENT_SQLID</keywords>
+    <keywords>CURRENT_TIME</keywords>
+    <keywords>CURRENT_TIMESTAMP</keywords>
+    <keywords>CURRENT_TIMEZONE</keywords>
+    <keywords>CURRENT_USER</keywords>    
+    <keywords>CURSOR</keywords>     
+    <keywords>CYCLE</keywords>
+    <keywords>DATE</keywords>
+    <keywords>DATA</keywords>
+    <keywords>DATABASE</keywords>
+    <keywords>DATALINK</keywords>    
+    <keywords>DAY</keywords>
+    <keywords>DAYS</keywords>
+    <keywords>DB</keywords>
+    <keywords>DBADM</keywords>
+    <keywords>DBCLOB</keywords>
+    <keywords>DBINFO</keywords>
+    <keywords>DB2DARI</keywords>
+    <keywords>DB2GENRL</keywords>
+    <keywords>DB2GENERAL</keywords>    
+    <keywords>DB2SQL</keywords>
+    <keywords>DEADLOCKS</keywords>
+    <keywords>DEALLOCATE</keywords>
+    <keywords>DEC</keywords>
+    <keywords>DECIMAL</keywords>
+    <keywords>DECLARE</keywords>
+    <keywords>DEFAULT</keywords>
+    <keywords>DEFAULTS</keywords>
+    <keywords>DEFINE</keywords>
+    <keywords>DEFINITION</keywords>
+    <keywords>DEGREE</keywords>    
+    <keywords>DEFERRABLE</keywords>
+    <keywords>DEFERRED</keywords>
+    <keywords>DELETE</keywords>
+    <keywords>DESC</keywords>
+    <keywords>DESCRIBE</keywords>
+    <keywords>DESCRIPTOR</keywords>    
+    <keywords>DETERMINISTIC</keywords>    
+    <keywords>DIAGNOSTICS</keywords>
+    <keywords>DIMENSIONS</keywords>
+    <keywords>DISABLE</keywords>
+    <keywords>DISALLOW</keywords>
+    <keywords>DISCONNECT</keywords>    
+    <keywords>DISTINCT</keywords>    
+    <keywords>DOMAIN</keywords>
+    <keywords>DO</keywords>
+    <keywords>DOUBLE</keywords>
+    <keywords>DROP</keywords>
+    <keywords>DROPIN</keywords>    
+    <keywords>DYNAMIC</keywords>    
+    <keywords>EACH</keywords>
+    <keywords>EBCDIC</keywords>
+    <keywords>ELSE</keywords>
+    <keywords>ELSEIF</keywords>
+    <keywords>ENABLE</keywords>
+    <keywords>END</keywords>
+    <keywords>END-EXEC</keywords>
+    <keywords>ERASE</keywords>
+    <keywords>ESCAPE</keywords>
+    <keywords>EUR</keywords>    
+    <keywords>EVENT</keywords>
+    <keywords>EXACT</keywords>
+    <keywords>EXCEPT</keywords>
+    <keywords>EXCEPTION</keywords>
+    <keywords>EXCLUDE</keywords>
+    <keywords>EXCLUDING</keywords>
+    <keywords>EXCLUSIVE</keywords>
+    <keywords>EXEC</keywords>    
+    <keywords>EXECUTE</keywords>
+    <keywords>EXISTS</keywords>
+    <keywords>EXIT</keywords>    
+    <keywords>EXPLAIN</keywords>     
+    <keywords>EXTENSION</keywords>    
+    <keywords>EXTERNAL</keywords>
+    <keywords>EXTRACT</keywords>
+    <keywords>FALSE</keywords>
+    <keywords>FEDERATED</keywords>
+    <keywords>FENCED</keywords>
+    <keywords>FETCH</keywords>
+    <keywords>FILE</keywords>    
+    <keywords>FINAL</keywords>
+    <keywords>FIRST</keywords>
+    <keywords>FLOAT</keywords>
+    <keywords>FLUSH</keywords>
+    <keywords>FOLLOWING</keywords>
+    <keywords>FOR</keywords>
+    <keywords>FORCE</keywords>
+    <keywords>FOREIGN</keywords>    
+    <keywords>FORTRAN</keywords>
+    <keywords>FOUND</keywords>    
+    <keywords>FROM</keywords>
+    <keywords>FS</keywords>
+    <keywords>FULL</keywords>
+    <keywords>FUNCTION</keywords>
+    <keywords>G</keywords>    
+    <keywords>GENERAL</keywords>    
+    <keywords>GENERATED</keywords>
+    <keywords>GET</keywords>
+    <keywords>GLOBAL</keywords>
+    <keywords>GO</keywords>
+    <keywords>GOTO</keywords>
+    <keywords>GRANT</keywords>
+    <keywords>GRAPHIC</keywords>
+    <keywords>GROUP</keywords>
+    <keywords>GROUPING</keywords>
+    <keywords>HANDLER</keywords>    
+    <keywords>HAVING</keywords>    
+    <keywords>HOLD</keywords>
+    <keywords>HOUR</keywords>
+    <keywords>HOURS</keywords>
+    <keywords>IDENTITY</keywords>
+    <keywords>IF</keywords>
+    <keywords>IMMEDIATE</keywords>
+    <keywords>IMPLICIT_SCHEMA</keywords>
+    <keywords>IN</keywords>
+    <keywords>INCLUDE</keywords>
+    <keywords>INCLUDING</keywords>
+    <keywords>INCREMENT</keywords>    
+    <keywords>INDEX</keywords>    
+    <keywords>INDICATOR</keywords>    
+    <keywords>INHERIT</keywords>
+    <keywords>INITIALLY</keywords>
+    <keywords>INITIAL_INSTS</keywords>
+    <keywords>INITIAL_IOS</keywords>    
+    <keywords>INNER</keywords>
+    <keywords>INOUT</keywords>
+    <keywords>INPUT</keywords>
+    <keywords>INSENSITIVE</keywords>
+    <keywords>INSERT</keywords>    
+    <keywords>INSTEAD</keywords>
+    <keywords>INSTS_PER_ARGBYTE</keywords>
+    <keywords>INSTS_PER_INVOC</keywords>
+    <keywords>INT</keywords>
+    <keywords>INTEGER</keywords>
+    <keywords>INTEGRITY</keywords>
+    <keywords>INTERSECT</keywords>
+    <keywords>INTERVAL</keywords>
+    <keywords>INTO</keywords>    
+    <keywords>IOS_PER_ARGBYTE</keywords>
+    <keywords>IOS_PER_INVOC</keywords>
+    <keywords>IS</keywords>
+    <keywords>ISO</keywords>
+    <keywords>ISOLATION</keywords>
+    <keywords>ITERATE</keywords>    
+    <keywords>JAVA</keywords>    
+    <keywords>JIS</keywords>
+    <keywords>JOIN</keywords>
+    <keywords>K</keywords>
+    <keywords>KEY</keywords>    
+    <keywords>LANGUAGE</keywords>
+    <keywords>LARGE</keywords>
+    <keywords>LAST</keywords>
+    <keywords>LEADING</keywords>
+    <keywords>LEAVE</keywords>
+    <keywords>LEFT</keywords>
+    <keywords>LENGTH</keywords>
+    <keywords>LEVEL</keywords>    
+    <keywords>LIKE</keywords>
+    <keywords>LIMIT</keywords>
+    <keywords>LINK</keywords>
+    <keywords>LINKTYPE</keywords>
+    <keywords>LOAD</keywords>
+    <keywords>LOCAL</keywords>
+    <keywords>LOCATOR</keywords>
+    <keywords>LOCATORS</keywords>
+    <keywords>LOCK</keywords>
+    <keywords>LOCKS</keywords>
+    <keywords>LOCKSIZE</keywords>    
+    <keywords>LONG</keywords>
+    <keywords>LONGVAR</keywords>
+    <keywords>LOOP</keywords>
+    <keywords>LOWER</keywords>
+    <keywords>M</keywords>
+    <keywords>MAINTAINED</keywords>     
+    <keywords>MAPPING</keywords>
+    <keywords>MATCH</keywords>
+    <keywords>MAX</keywords>     
+    <keywords>MAXVALUE</keywords>     
+    <keywords>METHOD</keywords>    
+    <keywords>MICROSECOND</keywords>
+    <keywords>MICROSECONDS</keywords>    
+    <keywords>MINUTE</keywords>
+    <keywords>MINUTES</keywords>
+    <keywords>MINVALUE</keywords>    
+    <keywords>MODE</keywords>
+    <keywords>MODIFIES</keywords>
+    <keywords>MODULE</keywords>
+    <keywords>MONITOR</keywords>
+    <keywords>MONTH</keywords>
+    <keywords>MONTHS</keywords>    
+    <keywords>NAMED</keywords>
+    <keywords>NAMES</keywords>
+    <keywords>NATIONAL</keywords>
+    <keywords>NATURAL</keywords>
+    <keywords>NCHAR</keywords>
+    <keywords>NEW</keywords>
+    <keywords>NEW_TABLE</keywords>
+    <keywords>NEXT</keywords>
+    <keywords>NEXTVAL</keywords>
+    <keywords>NICKNAME</keywords>
+    <keywords>NO</keywords>
+    <keywords>NOCACHE</keywords>
+    <keywords>NOCYCLE</keywords>
+    <keywords>NODE</keywords>    
+    <keywords>NOMAXVALUE</keywords>
+    <keywords>NOMINVALUE</keywords>    
+    <keywords>NONE</keywords>
+    <keywords>NOORDER</keywords>
+    <keywords>NOT</keywords>
+    <keywords>NULL</keywords>
+    <keywords>NULLABLE</keywords>    
+    <keywords>NULLS</keywords>    
+    <keywords>NUMBER</keywords>
+    <keywords>NUMERIC</keywords>     
+    <keywords>OBJECT</keywords>
+    <keywords>OF</keywords>
+    <keywords>OFF</keywords>
+    <keywords>OLD</keywords>
+    <keywords>OLD_TABLE</keywords>
+    <keywords>OLE</keywords>
+    <keywords>OLEDB</keywords>
+    <keywords>ON</keywords>
+    <keywords>ONCE</keywords>
+    <keywords>ONLINE</keywords>
+    <keywords>ONLY</keywords>
+    <keywords>OPEN</keywords>
+    <keywords>OPTIMIZATION</keywords>
+    <keywords>OPTIMIZE</keywords>
+    <keywords>OPTION</keywords>    
+    <keywords>OR</keywords>
+    <keywords>ORDER</keywords>
+    <keywords>OUT</keywords>
+    <keywords>OUTER</keywords>
+    <keywords>OUTPUT</keywords>
+    <keywords>OVER</keywords>    
+    <keywords>OVERLAPS</keywords>    
+    <keywords>PACKAGE</keywords>
+    <keywords>PAD</keywords>    
+    <keywords>PARTIAL</keywords>
+    <keywords>PARALLEL</keywords>    
+    <keywords>PARAMETER</keywords>
+    <keywords>PASCAL</keywords>
+    <keywords>PASSTHRU</keywords>
+    <keywords>PASSWORD</keywords>
+    <keywords>PATH</keywords>
+    <keywords>PARTITION</keywords>    
+    <keywords>PCTFREE</keywords>    
+    <keywords>PERCENT_ARGBYTES</keywords>
+    <keywords>PERMISSION</keywords>
+    <keywords>PIECESIZE</keywords>
+    <keywords>PIPE</keywords>
+    <keywords>PLAN</keywords>
+    <keywords>PLI</keywords>
+    <keywords>POSITION</keywords>
+    <keywords>PRECEDING</keywords>
+    <keywords>PRECISION</keywords>     
+    <keywords>PREPARE</keywords>
+    <keywords>PRESERVE</keywords>
+    <keywords>PRIMARY</keywords>    
+    <keywords>PRIOR</keywords>
+    <keywords>PRIQTY</keywords>
+    <keywords>PRIVILEGES</keywords>
+    <keywords>PROCEDURE</keywords>
+    <keywords>PROGRAM</keywords>    
+    <keywords>PUBLIC</keywords>
+    <keywords>QUERY</keywords>
+    <keywords>QUERYNO</keywords>    
+    <keywords>RANGE</keywords>    
+    <keywords>READ</keywords>
+    <keywords>READS</keywords>
+    <keywords>REAL</keywords>
+    <keywords>RECOMMEND</keywords>    
+    <keywords>RECOVERY</keywords>    
+    <keywords>REF</keywords>
+    <keywords>REFERENCE</keywords>
+    <keywords>REFERENCES</keywords>
+    <keywords>REFERENCING</keywords>
+    <keywords>REFRESH</keywords>
+    <keywords>REGISTERS</keywords>    
+    <keywords>RELATIVE</keywords>
+    <keywords>RELEASE</keywords>     
+    <keywords>RENAME</keywords>
+    <keywords>REPEATABLE</keywords>
+    <keywords>REPEAT</keywords>    
+    <keywords>REPLACE</keywords>
+    <keywords>REPLICATED</keywords>
+    <keywords>RESET</keywords>    
+    <keywords>RESIGNAL</keywords>    
+    <keywords>RESOLVE</keywords>
+    <keywords>RESTART</keywords>
+    <keywords>RESTORE</keywords>
+    <keywords>RESTRICT</keywords>
+    <keywords>RESULT</keywords>
+    <keywords>RESULT_SET_LOCATOR</keywords>     
+    <keywords>RETAIN</keywords>
+    <keywords>RETURN</keywords>
+    <keywords>RETURNS</keywords>
+    <keywords>RETURN_STATUS</keywords>    
+    <keywords>REVOKE</keywords>
+    <keywords>RIGHT</keywords>
+    <keywords>ROLLBACK</keywords>
+    <keywords>ROLLUP</keywords>
+    <keywords>ROUTINE</keywords>
+    <keywords>ROW</keywords>
+    <keywords>ROW_COUNT</keywords>
+    <keywords>ROWID</keywords>
+    <keywords>ROWS</keywords>
+    <keywords>RUN</keywords>
+    <keywords>S</keywords>    
+    <keywords>SAVEPOINT</keywords>
+    <keywords>SBCS</keywords>
+    <keywords>SCALE</keywords>    
+    <keywords>SCHEMA</keywords>    
+    <keywords>SCOPE</keywords>
+    <keywords>SCRATCHPAD</keywords>
+    <keywords>SCROLL</keywords>
+    <keywords>SEARCH</keywords>
+    <keywords>SECOND</keywords>
+    <keywords>SECONDS</keywords>
+    <keywords>SECQTY</keywords>
+    <keywords>SECTION</keywords>
+    <keywords>SELECT</keywords>    
+    <keywords>SELECTIVITY</keywords>
+    <keywords>SELF</keywords>
+    <keywords>SEQUENCE</keywords>
+    <keywords>SERIALIZABLE</keywords>
+    <keywords>SERVER</keywords>    
+    <keywords>SESSION</keywords>
+    <keywords>SESSION_USER</keywords>
+    <keywords>SET</keywords>
+    <keywords>SETS</keywords>    
+    <keywords>SHARE</keywords>    
+    <keywords>SIGNAL</keywords>
+    <keywords>SIMPLE</keywords>
+    <keywords>SIZE</keywords>
+    <keywords>SMALLINT</keywords>
+    <keywords>SNAPSHOT</keywords>
+    <keywords>SOME</keywords>
+    <keywords>SOURCE</keywords>
+    <keywords>SPACE</keywords>    
+    <keywords>SPECIFIC</keywords>    
+    <keywords>SQL</keywords>
+    <keywords>SQLCODE</keywords>
+    <keywords>SQLERROR</keywords>
+    <keywords>SQLEXCEPTION</keywords>
+    <keywords>SQLWARNING</keywords>
+    <keywords>SQLID</keywords>    
+    <keywords>SQLSTATE</keywords>    
+    <keywords>START</keywords>
+    <keywords>STATE</keywords>
+    <keywords>STATEMENT</keywords>    
+    <keywords>STATISTICS</keywords>
+    <keywords>STAY</keywords>
+    <keywords>STOGROUP</keywords>
+    <keywords>STORAGE</keywords>    
+    <keywords>STYLE</keywords>    
+    <keywords>SUBSTRING</keywords>    
+    <keywords>SWITCH</keywords>
+    <keywords>SYNONYM</keywords>
+    <keywords>SYSTEM</keywords>
+    <keywords>SYSTEM_USER</keywords>
+    <keywords>TABLE</keywords>
+    <keywords>TABLES</keywords>
+    <keywords>TABLE_NAME</keywords>
+    <keywords>TABLESPACE</keywords>
+    <keywords>TABLESPACES</keywords>     
+    <keywords>TEMPORARY</keywords>
+    <keywords>THEN</keywords>
+    <keywords>THREADSAFE</keywords>    
+    <keywords>TIME</keywords>
+    <keywords>TIMESTAMP</keywords>
+    <keywords>TIMEZONE</keywords>
+    <keywords>TIMEZONE_HOUR</keywords>
+    <keywords>TIMEZONE_MINUTE</keywords>
+    <keywords>TO</keywords>
+    <keywords>TRAILING</keywords>
+    <keywords>TRANSACTION</keywords>    
+    <keywords>TRANSFORM</keywords>    
+    <keywords>TRANSLATE</keywords>
+    <keywords>TRANSLATION</keywords>
+    <keywords>TREAT</keywords>
+    <keywords>TRIGGER</keywords>
+    <keywords>TRIM</keywords>
+    <keywords>TRUE</keywords>
+    <keywords>TYPE</keywords>
+    <keywords>UNBOUNDED</keywords>    
+    <keywords>UNCOMMITTED</keywords>
+    <keywords>UNDER</keywords>
+    <keywords>UNDO</keywords>
+    <keywords>UNICODE</keywords>
+    <keywords>UNION</keywords>
+    <keywords>UNIQUE</keywords>
+    <keywords>UNKNOWN</keywords>    
+    <keywords>UNTIL</keywords>    
+    <keywords>UPDATE</keywords>
+    <keywords>UPPER</keywords>
+    <keywords>URL</keywords>
+    <keywords>USA</keywords>
+    <keywords>USE</keywords>
+    <keywords>USAGE</keywords>
+    <keywords>USER</keywords>
+    <keywords>USING</keywords>
+    <keywords>VALUE</keywords>
+    <keywords>VALUES</keywords>
+    <keywords>VARCHAR</keywords>
+    <keywords>VARGRAPHIC</keywords>
+    <keywords>VARIANT</keywords>
+    <keywords>VARYING</keywords>
+    <keywords>VCAT</keywords>
+    <keywords>VERSION</keywords>
+    <keywords>VIEW</keywords>    
+    <keywords>WHEN</keywords>
+    <keywords>WHENEVER</keywords>
+    <keywords>WHERE</keywords>
+    <keywords>WHILE</keywords>
+    <keywords>WITH</keywords>
+    <keywords>WITHOUT</keywords>
+    <keywords>WORK</keywords>
+    <keywords>WRAPPER</keywords>
+    <keywords>WRITE</keywords>
+    <keywords>YEAR</keywords>
+    <keywords>YEARS</keywords>
+    <keywords>YES</keywords>    
+    <keywords>ZONE</keywords>
+    <operators>&lt;</operators>
+    <operators>&quot;</operators>
+    <operators>%</operators>
+    <operators>&amp;</operators>
+    <operators>''''</operators>
+    <operators>(</operators>
+    <operators>)</operators>
+    <operators>*</operators>
+    <operators>+</operators>
+    <operators>,</operators>
+    <operators>-</operators>
+    <operators>.</operators>
+    <operators>/</operators>
+    <operators>:</operators>
+    <operators>;</operators>
+    <operators>=</operators>
+    <operators>?</operators>
+    <operators>[</operators>
+    <operators>]</operators>
+    <operators>_</operators>
+    <operators>'|'</operators>
+    <operators>,=</operators>
+    <operators>&lt;=</operators>
+    <operators>||</operators>
+    <operators>..</operators>
+    <operators>'-,'</operators>
+    <operators>!</operators>
+    <operators>~</operators>
+    <operators>:=</operators>
+    <operators>{</operators>
+    <operators>}</operators>
+    <operators>(+)</operators>
+  </SQLSyntaxDefinition>
+</DBDefinition:DatabaseVendorDefinition>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/runtime/vendors/DB2 UDB_8.2/DB2 UDB_8.2.xmi b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/runtime/vendors/DB2 UDB_8.2/DB2 UDB_8.2.xmi
new file mode 100644
index 0000000..01cee01
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/runtime/vendors/DB2 UDB_8.2/DB2 UDB_8.2.xmi
@@ -0,0 +1,800 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="DB2 UDB" version="V8.2" maximumIdentifierLength="8" 
+viewTriggerSupported="true" maximumCommentLength="64" sequenceSupported="true" mQTSupported="true" aliasSupported="true" SQLStatementSupported="true" nicknameSupported="true" userDefinedTypeSupported="true" roleSupported="false"
+userSupported="true" groupSupported="true" packageSupported="true">
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="long">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIGINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="BYTE" defaultLength="1024" maximumLength="2147483647" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="127" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>GRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_1" lengthSupported="true"  defaultLength="32" keyConstraintSupported="true" maximumLength="16336" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARGRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_2" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARGRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="254" primitiveType="CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR</name>
+    <name>CHARACTER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="BYTE" defaultLength="1024" maximumLength="2147483647" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CLOB</name>
+    <name>CHARACTER LARGE OBJECT</name>
+    <name>CHAR LARGE OBJECT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="DOUBLE_BYTE" defaultLength="1024" maximumLength="1073741823" primitiveType="NATIONAL_CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DBCLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" keyConstraintSupported="true" defaultLength="32" maximumLength="32672" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR</name>
+    <name>CHARACTER VARYING</name>
+    <name>CHAR VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_2" primitiveType="CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">
+    <defaultValueTypes>CURRENT DATE</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" precisionSupported="true" defaultPrecision="5" maximumPrecision="31" scaleSupported="true" defaultScale="0" keyConstraintSupported="true" identitySupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" keyConstraintSupported="true" primitiveType="FLOAT" precisionSupported="true" defaultPrecision="53" maximumPrecision="53" cutoffPrecision="25" jdbcEnumType="6" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INTEGER</name>
+    <name>INT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATALINK_1" lengthSupported="true" lengthUnit="BYTE" defaultLength="200" maximumLength="200" primitiveType="DATALINK" jdbcEnumType="70" javaClassName="java.net.URL">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATALINK</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" identitySupported="true" precisionSupported="true" defaultPrecision="5" maximumPrecision="31" scaleSupported="true" defaultScale="0" keyConstraintSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+    <name>NUM</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIME_1" keyConstraintSupported="true" primitiveType="TIME" jdbcEnumType="92" javaClassName="java.sql.Time">
+    <defaultValueTypes>CURRENT TIME</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>CURRENT TIMESTAMP</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" lengthSupported="true" defaultLength="1" displayNameSupported="true" displayName="CHAR ({0}) FOR BIT DATA" keyConstraintSupported="true" maximumLength="254" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR FOR BIT DATA</name>
+    <name>CHARACTER FOR BIT DATA</name>
+    <name>CHAR () FOR BIT DATA</name>
+    <name>CHARACTER () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_1" lengthSupported="true" defaultLength="1" displayNameSupported="true" displayName="VARCHAR ({0}) FOR BIT DATA" keyConstraintSupported="true" maximumLength="32672" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR FOR BIT DATA</name>
+    <name>CHARACTER VARYING FOR BIT DATA</name>
+    <name>CHAR VARYING FOR BIT DATA</name>
+    <name>VARCHAR () FOR BIT DATA</name>
+    <name>CHARACTER VARYING () FOR BIT DATA</name>
+    <name>CHAR VARYING () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_2" primitiveType="BINARY_VARYING" jdbcEnumType="-4" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARCHAR FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <tableSpaceDefinition maximumIdentifierLength="18" typeSupported="true" extentSizeSupported="true" prefetchSizeSupported="true" managedBySupported="true" pageSizeSupported="true" bufferPoolSupported="true">
+    <tableSpaceType>REGULAR</tableSpaceType>
+    <tableSpaceType>TEMPORARY</tableSpaceType>
+    <tableSpaceType>LARGE</tableSpaceType>
+  </tableSpaceDefinition>
+  <storedProcedureDefinition maximumIdentifierLength="128" nullInputActionSupported="true" determininsticSupported="true" returnedNullSupported="true" parameterStyleSupported="true">
+    <languageType>SQL</languageType>
+    <languageType>JAVA</languageType>
+    <languageType>C</languageType>
+    <languageType>COBOL</languageType>
+    <languageType>ASSEMBLY</languageType>
+    <languageType>PLI</languageType>
+    <functionLanguageType>SQL</functionLanguageType>
+    <functionLanguageType>JAVA</functionLanguageType>
+    <functionLanguageType>C</functionLanguageType>
+    <functionLanguageType>OLE</functionLanguageType>
+    <procedureType>PROCEDURE</procedureType>
+    <procedureType>FUNCTION</procedureType>
+  </storedProcedureDefinition>
+  <triggerDefinition maximumIdentifierLength="18" whenClauseSupported="true" granularitySupported="true" referencesClauseSupported="true" perColumnUpdateTriggerSupported="true" rowTriggerReferenceSupported="true" tableTriggerReferenceSupported="true"/>
+  <columnDefinition maximumIdentifierLength="30" identitySupported="true" computedSupported="true" identityStartValueSupported="true" identityIncrementSupported="true" identityMinimumSupported="true" identityMaximumSupported="true" identityCycleSupported="true"/>
+  <constraintDefinition maximumPrimaryKeyIdentifierLength="18" maximumForeignKeyIdentifierLength="18" maximumCheckConstraintIdentifierLength="18" clusteredPrimaryKeySupported="true" clusteredUniqueConstraintSupported="true" informationalConstraintSupported="true">
+    <parentUpdateDRIRuleType>RESTRICT</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>RESTRICT</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>SET_NULL</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+    <checkOption>NONE</checkOption>
+    <checkOption>LOCAL</checkOption>
+    <checkOption>CASCADE</checkOption>
+  </constraintDefinition>
+  <sequenceDefinition predefinedDataTypeDefinitions="BIGINT_1 INTEGER_1 SMALLINT_1 DECIMAL_1" defaultDataTypeDefinition="INTEGER_1" typeEnumerationSupported="true" cacheSupported="true" orderSupported="true" noMaximumValueString="NO MAXVALUE" noMinimumValueString="NO MINVALUE" noCacheString="NO CACHE" cacheDefaultValue="20"/>
+  <udtDefinition maximumIdentifierLength="18" distinctTypeSupported="true" structuredTypeSupported="true"/>
+  <indexDefinition maximumIdentifierLength="18" clusteringSupported="true"/>
+  <queryDefinition hostVariableMarker=":"/>
+  <nicknameDefinition maximumIdentifierLength="128" constraintSupported="true" indexSupported="true"/>
+  <viewDefinition maximumIdentifierLength="128" checkOptionLevelsSupported="true"/>
+  <tableDefinition maximumIdentifierLength="128"/>
+  <schemaDefinition maximumIdentifierLength="30"/>
+    <privilegedElementDefinitions name="Database">
+    <privilegeDefinitions name="BINDADD"/>
+    <privilegeDefinitions name="CONNECT"/>
+    <privilegeDefinitions name="CREATETAB"/>
+    <privilegeDefinitions name="CREATE_EXTERNAL_ROUTINE"/>
+    <privilegeDefinitions name="CREATE_NOT_FENCED_ROUTINE"/>
+    <privilegeDefinitions name="IMPLICIT_SCHEMA"/>
+    <privilegeDefinitions name="DBADM"/>
+    <privilegeDefinitions name="LOAD"/>
+    <privilegeDefinitions name="QUIESCE_CONNECT"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Schema">
+  	<privilegeDefinitions name="ALTERIN"/>
+  	<privilegeDefinitions name="CREATEIN"/>
+    <privilegeDefinitions name="DROPIN"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="PersistentTable">
+  	<privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="REFERENCES" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="ViewTable">
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Nickname">
+  	<privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="REFERENCES"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions xmi:id="COLUMN_1" name="Column"/>
+  <privilegedElementDefinitions name="MaterializedQueryTable">
+  	<privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="REFERENCES" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Routine">
+  	<privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Sequence">
+  	<privilegeDefinitions name="ALTER"/>
+  	<privilegeDefinitions name="USAGE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Index">
+  	<privilegeDefinitions name="CONTROL"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Tablespace">
+  	<privilegeDefinitions name="USE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Package">
+    <privilegeDefinitions name="BIND"/>
+  	<privilegeDefinitions name="CONTROL"/>
+  	<privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <SQLSyntaxDefinition terminationCharacter=";">
+    <keywords>ABSOLUTE</keywords>
+    <keywords>ACCESS</keywords>
+    <keywords>ACTION</keywords>
+    <keywords>ACTIVATE</keywords>
+    <keywords>ADA</keywords>
+    <keywords>ADD</keywords>
+    <keywords>AFTER</keywords>
+    <keywords>ALIAS</keywords>
+    <keywords>ALL</keywords>
+    <keywords>ALLOCATE</keywords>
+    <keywords>ALLOW</keywords>
+    <keywords>ALTER</keywords>
+    <keywords>ALTERIN</keywords>
+    <keywords>ALWAYS</keywords>
+    <keywords>AND</keywords>
+    <keywords>ANY</keywords>
+    <keywords>APPEND</keywords>    
+    <keywords>ARE</keywords>
+    <keywords>AS</keywords>
+    <keywords>ASC</keywords>
+    <keywords>ASCII</keywords>
+    <keywords>ASSERTION</keywords>
+    <keywords>ASSOCIATE</keywords>    
+    <keywords>ASUTIME</keywords>
+    <keywords>AT</keywords>
+    <keywords>ATOMIC</keywords>        
+    <keywords>AUTHORIZATION</keywords>    
+    <keywords>AUTOMATIC</keywords>    
+    <keywords>AVG</keywords>
+    <keywords>BEFORE</keywords>
+    <keywords>BEGIN</keywords>
+    <keywords>BETWEEN</keywords>
+    <keywords>BIGINT</keywords>
+    <keywords>BINARY</keywords>
+    <keywords>BIND</keywords>
+    <keywords>BINDADD</keywords>
+    <keywords>BIT</keywords>
+    <keywords>BIT_LENGTH</keywords>
+    <keywords>BLOB</keywords>
+    <keywords>BLOCKED</keywords>
+    <keywords>BOTH</keywords>    
+    <keywords>BUFFERPOOL</keywords>    
+    <keywords>BY</keywords>
+    <keywords>C</keywords>
+    <keywords>CACHE</keywords>
+    <keywords>CALL</keywords>
+    <keywords>CALLED</keywords>    
+    <keywords>CAPTURE</keywords>
+    <keywords>CARDINALITY</keywords>
+    <keywords>CASCADE</keywords>
+    <keywords>CASCADED</keywords>
+    <keywords>CASE</keywords>
+    <keywords>CAST</keywords>
+    <keywords>CATALOG</keywords>    
+    <keywords>CHANGE</keywords>    
+    <keywords>CHAR</keywords>
+    <keywords>CHAR_LENGTH</keywords>
+    <keywords>CHARACTER</keywords>
+    <keywords>CHARACTER_LENGTH</keywords>    
+    <keywords>CHECK</keywords>
+    <keywords>CHECKED</keywords>    
+    <keywords>CLIENT</keywords>
+    <keywords>CLOB</keywords>
+    <keywords>CLOSE</keywords>
+    <keywords>CLUSTER</keywords>
+    <keywords>COBOL</keywords>    
+    <keywords>COLLATE</keywords>
+    <keywords>COLLATION</keywords>    
+    <keywords>COLLECT</keywords>
+    <keywords>COLLID</keywords>
+    <keywords>COLUMN</keywords>    
+    <keywords>COMMENT</keywords>
+    <keywords>COMMIT</keywords>
+    <keywords>COMMITTED</keywords>
+    <keywords>COMPARISONS</keywords>
+    <keywords>CONCAT</keywords>
+    <keywords>CONDITION</keywords>    
+    <keywords>CONNECT</keywords>
+    <keywords>CONNECTION</keywords>    
+    <keywords>CONSERVATIVE</keywords>
+    <keywords>CONSTRAINT</keywords>     
+    <keywords>CONSTRAINTS</keywords>
+    <keywords>CONTAINS</keywords>
+    <keywords>CONTINUE</keywords>
+    <keywords>CONTROL</keywords>
+    <keywords>CONVERT</keywords>
+    <keywords>COPY</keywords>
+    <keywords>CORRELATION</keywords>
+    <keywords>CORR</keywords>
+    <keywords>CORRESPONDING</keywords>
+    <keywords>COUNT</keywords>
+    <keywords>COUNT_BIG</keywords>    
+    <keywords>C++</keywords>
+    <keywords>CREATE</keywords>
+    <keywords>CREATEIN</keywords>    
+    <keywords>CREATETAB</keywords>
+    <keywords>CROSS</keywords>
+    <keywords>CUBE</keywords>
+    <keywords>CURRENT</keywords>
+    <keywords>CURRENT_DATE</keywords>    
+    <keywords>CURRENT_EXPLAIN_MODE</keywords>     
+    <keywords>CURRENT_PATH</keywords>    
+    <keywords>CURRENT_SCHEMA</keywords>
+    <keywords>CURRENT_SERVER</keywords>
+    <keywords>CURRENT_SQLID</keywords>
+    <keywords>CURRENT_TIME</keywords>
+    <keywords>CURRENT_TIMESTAMP</keywords>
+    <keywords>CURRENT_TIMEZONE</keywords>
+    <keywords>CURRENT_USER</keywords>    
+    <keywords>CURSOR</keywords>     
+    <keywords>CYCLE</keywords>
+    <keywords>DATE</keywords>
+    <keywords>DATA</keywords>
+    <keywords>DATABASE</keywords>
+    <keywords>DATALINK</keywords>    
+    <keywords>DAY</keywords>
+    <keywords>DAYS</keywords>
+    <keywords>DB</keywords>
+    <keywords>DBADM</keywords>
+    <keywords>DBCLOB</keywords>
+    <keywords>DBINFO</keywords>
+    <keywords>DB2DARI</keywords>
+    <keywords>DB2GENRL</keywords>
+    <keywords>DB2GENERAL</keywords>    
+    <keywords>DB2SQL</keywords>
+    <keywords>DEADLOCKS</keywords>
+    <keywords>DEALLOCATE</keywords>
+    <keywords>DEC</keywords>
+    <keywords>DECIMAL</keywords>
+    <keywords>DECLARE</keywords>
+    <keywords>DEFAULT</keywords>
+    <keywords>DEFAULTS</keywords>
+    <keywords>DEFINE</keywords>
+    <keywords>DEFINITION</keywords>
+    <keywords>DEGREE</keywords>    
+    <keywords>DEFERRABLE</keywords>
+    <keywords>DEFERRED</keywords>
+    <keywords>DELETE</keywords>
+    <keywords>DESC</keywords>
+    <keywords>DESCRIBE</keywords>
+    <keywords>DESCRIPTOR</keywords>    
+    <keywords>DETERMINISTIC</keywords>    
+    <keywords>DIAGNOSTICS</keywords>
+    <keywords>DIMENSIONS</keywords>
+    <keywords>DISABLE</keywords>
+    <keywords>DISALLOW</keywords>
+    <keywords>DISCONNECT</keywords>    
+    <keywords>DISTINCT</keywords>    
+    <keywords>DOMAIN</keywords>
+    <keywords>DO</keywords>
+    <keywords>DOUBLE</keywords>
+    <keywords>DROP</keywords>
+    <keywords>DROPIN</keywords>    
+    <keywords>DYNAMIC</keywords>    
+    <keywords>EACH</keywords>
+    <keywords>EBCDIC</keywords>
+    <keywords>ELSE</keywords>
+    <keywords>ELSEIF</keywords>
+    <keywords>ENABLE</keywords>
+    <keywords>END</keywords>
+    <keywords>END-EXEC</keywords>
+    <keywords>ERASE</keywords>
+    <keywords>ESCAPE</keywords>
+    <keywords>EUR</keywords>    
+    <keywords>EVENT</keywords>
+    <keywords>EXACT</keywords>
+    <keywords>EXCEPT</keywords>
+    <keywords>EXCEPTION</keywords>
+    <keywords>EXCLUDE</keywords>
+    <keywords>EXCLUDING</keywords>
+    <keywords>EXCLUSIVE</keywords>
+    <keywords>EXEC</keywords>    
+    <keywords>EXECUTE</keywords>
+    <keywords>EXISTS</keywords>
+    <keywords>EXIT</keywords>    
+    <keywords>EXPLAIN</keywords>     
+    <keywords>EXTENSION</keywords>    
+    <keywords>EXTERNAL</keywords>
+    <keywords>EXTRACT</keywords>
+    <keywords>FALSE</keywords>
+    <keywords>FEDERATED</keywords>
+    <keywords>FENCED</keywords>
+    <keywords>FETCH</keywords>
+    <keywords>FILE</keywords>    
+    <keywords>FINAL</keywords>
+    <keywords>FIRST</keywords>
+    <keywords>FLOAT</keywords>
+    <keywords>FLUSH</keywords>
+    <keywords>FOLLOWING</keywords>
+    <keywords>FOR</keywords>
+    <keywords>FORCE</keywords>
+    <keywords>FOREIGN</keywords>    
+    <keywords>FORTRAN</keywords>
+    <keywords>FOUND</keywords>    
+    <keywords>FROM</keywords>
+    <keywords>FS</keywords>
+    <keywords>FULL</keywords>
+    <keywords>FUNCTION</keywords>
+    <keywords>G</keywords>    
+    <keywords>GENERAL</keywords>    
+    <keywords>GENERATED</keywords>
+    <keywords>GET</keywords>
+    <keywords>GLOBAL</keywords>
+    <keywords>GO</keywords>
+    <keywords>GOTO</keywords>
+    <keywords>GRANT</keywords>
+    <keywords>GRAPHIC</keywords>
+    <keywords>GROUP</keywords>
+    <keywords>GROUPING</keywords>
+    <keywords>HANDLER</keywords>    
+    <keywords>HAVING</keywords>    
+    <keywords>HOLD</keywords>
+    <keywords>HOUR</keywords>
+    <keywords>HOURS</keywords>
+    <keywords>IDENTITY</keywords>
+    <keywords>IF</keywords>
+    <keywords>IMMEDIATE</keywords>
+    <keywords>IMPLICIT_SCHEMA</keywords>
+    <keywords>IN</keywords>
+    <keywords>INCLUDE</keywords>
+    <keywords>INCLUDING</keywords>
+    <keywords>INCREMENT</keywords>    
+    <keywords>INDEX</keywords>    
+    <keywords>INDICATOR</keywords>    
+    <keywords>INHERIT</keywords>
+    <keywords>INITIALLY</keywords>
+    <keywords>INITIAL_INSTS</keywords>
+    <keywords>INITIAL_IOS</keywords>    
+    <keywords>INNER</keywords>
+    <keywords>INOUT</keywords>
+    <keywords>INPUT</keywords>
+    <keywords>INSENSITIVE</keywords>
+    <keywords>INSERT</keywords>    
+    <keywords>INSTEAD</keywords>
+    <keywords>INSTS_PER_ARGBYTE</keywords>
+    <keywords>INSTS_PER_INVOC</keywords>
+    <keywords>INT</keywords>
+    <keywords>INTEGER</keywords>
+    <keywords>INTEGRITY</keywords>
+    <keywords>INTERSECT</keywords>
+    <keywords>INTERVAL</keywords>
+    <keywords>INTO</keywords>    
+    <keywords>IOS_PER_ARGBYTE</keywords>
+    <keywords>IOS_PER_INVOC</keywords>
+    <keywords>IS</keywords>
+    <keywords>ISO</keywords>
+    <keywords>ISOLATION</keywords>
+    <keywords>ITERATE</keywords>    
+    <keywords>JAVA</keywords>    
+    <keywords>JIS</keywords>
+    <keywords>JOIN</keywords>
+    <keywords>K</keywords>
+    <keywords>KEY</keywords>    
+    <keywords>LANGUAGE</keywords>
+    <keywords>LARGE</keywords>
+    <keywords>LAST</keywords>
+    <keywords>LEADING</keywords>
+    <keywords>LEAVE</keywords>
+    <keywords>LEFT</keywords>
+    <keywords>LENGTH</keywords>
+    <keywords>LEVEL</keywords>    
+    <keywords>LIKE</keywords>
+    <keywords>LIMIT</keywords>
+    <keywords>LINK</keywords>
+    <keywords>LINKTYPE</keywords>
+    <keywords>LOAD</keywords>
+    <keywords>LOCAL</keywords>
+    <keywords>LOCATOR</keywords>
+    <keywords>LOCATORS</keywords>
+    <keywords>LOCK</keywords>
+    <keywords>LOCKS</keywords>
+    <keywords>LOCKSIZE</keywords>    
+    <keywords>LONG</keywords>
+    <keywords>LONGVAR</keywords>
+    <keywords>LOOP</keywords>
+    <keywords>LOWER</keywords>
+    <keywords>M</keywords>
+    <keywords>MAINTAINED</keywords>     
+    <keywords>MAPPING</keywords>
+    <keywords>MATCH</keywords>
+    <keywords>MAX</keywords>     
+    <keywords>MAXVALUE</keywords>     
+    <keywords>METHOD</keywords>    
+    <keywords>MICROSECOND</keywords>
+    <keywords>MICROSECONDS</keywords>    
+    <keywords>MINUTE</keywords>
+    <keywords>MINUTES</keywords>
+    <keywords>MINVALUE</keywords>    
+    <keywords>MODE</keywords>
+    <keywords>MODIFIES</keywords>
+    <keywords>MODULE</keywords>
+    <keywords>MONITOR</keywords>
+    <keywords>MONTH</keywords>
+    <keywords>MONTHS</keywords>    
+    <keywords>NAMED</keywords>
+    <keywords>NAMES</keywords>
+    <keywords>NATIONAL</keywords>
+    <keywords>NATURAL</keywords>
+    <keywords>NCHAR</keywords>
+    <keywords>NEW</keywords>
+    <keywords>NEW_TABLE</keywords>
+    <keywords>NEXT</keywords>
+    <keywords>NEXTVAL</keywords>
+    <keywords>NICKNAME</keywords>
+    <keywords>NO</keywords>
+    <keywords>NOCACHE</keywords>
+    <keywords>NOCYCLE</keywords>
+    <keywords>NODE</keywords>    
+    <keywords>NOMAXVALUE</keywords>
+    <keywords>NOMINVALUE</keywords>    
+    <keywords>NONE</keywords>
+    <keywords>NOORDER</keywords>
+    <keywords>NOT</keywords>
+    <keywords>NULL</keywords>
+    <keywords>NULLABLE</keywords>    
+    <keywords>NULLS</keywords>    
+    <keywords>NUMBER</keywords>
+    <keywords>NUMERIC</keywords>     
+    <keywords>OBJECT</keywords>
+    <keywords>OF</keywords>
+    <keywords>OFF</keywords>
+    <keywords>OLD</keywords>
+    <keywords>OLD_TABLE</keywords>
+    <keywords>OLE</keywords>
+    <keywords>OLEDB</keywords>
+    <keywords>ON</keywords>
+    <keywords>ONCE</keywords>
+    <keywords>ONLINE</keywords>
+    <keywords>ONLY</keywords>
+    <keywords>OPEN</keywords>
+    <keywords>OPTIMIZATION</keywords>
+    <keywords>OPTIMIZE</keywords>
+    <keywords>OPTION</keywords>    
+    <keywords>OR</keywords>
+    <keywords>ORDER</keywords>
+    <keywords>OUT</keywords>
+    <keywords>OUTER</keywords>
+    <keywords>OUTPUT</keywords>
+    <keywords>OVER</keywords>    
+    <keywords>OVERLAPS</keywords>    
+    <keywords>PACKAGE</keywords>
+    <keywords>PAD</keywords>    
+    <keywords>PARTIAL</keywords>
+    <keywords>PARALLEL</keywords>    
+    <keywords>PARAMETER</keywords>
+    <keywords>PASCAL</keywords>
+    <keywords>PASSTHRU</keywords>
+    <keywords>PASSWORD</keywords>
+    <keywords>PATH</keywords>
+    <keywords>PARTITION</keywords>    
+    <keywords>PCTFREE</keywords>    
+    <keywords>PERCENT_ARGBYTES</keywords>
+    <keywords>PERMISSION</keywords>
+    <keywords>PIECESIZE</keywords>
+    <keywords>PIPE</keywords>
+    <keywords>PLAN</keywords>
+    <keywords>PLI</keywords>
+    <keywords>POSITION</keywords>
+    <keywords>PRECEDING</keywords>
+    <keywords>PRECISION</keywords>     
+    <keywords>PREPARE</keywords>
+    <keywords>PRESERVE</keywords>
+    <keywords>PRIMARY</keywords>    
+    <keywords>PRIOR</keywords>
+    <keywords>PRIQTY</keywords>
+    <keywords>PRIVILEGES</keywords>
+    <keywords>PROCEDURE</keywords>
+    <keywords>PROGRAM</keywords>    
+    <keywords>PUBLIC</keywords>
+    <keywords>QUERY</keywords>
+    <keywords>QUERYNO</keywords>    
+    <keywords>RANGE</keywords>    
+    <keywords>READ</keywords>
+    <keywords>READS</keywords>
+    <keywords>REAL</keywords>
+    <keywords>RECOMMEND</keywords>    
+    <keywords>RECOVERY</keywords>    
+    <keywords>REF</keywords>
+    <keywords>REFERENCE</keywords>
+    <keywords>REFERENCES</keywords>
+    <keywords>REFERENCING</keywords>
+    <keywords>REFRESH</keywords>
+    <keywords>REGISTERS</keywords>    
+    <keywords>RELATIVE</keywords>
+    <keywords>RELEASE</keywords>     
+    <keywords>RENAME</keywords>
+    <keywords>REPEATABLE</keywords>
+    <keywords>REPEAT</keywords>    
+    <keywords>REPLACE</keywords>
+    <keywords>REPLICATED</keywords>
+    <keywords>RESET</keywords>    
+    <keywords>RESIGNAL</keywords>    
+    <keywords>RESOLVE</keywords>
+    <keywords>RESTART</keywords>
+    <keywords>RESTORE</keywords>
+    <keywords>RESTRICT</keywords>
+    <keywords>RESULT</keywords>
+    <keywords>RESULT_SET_LOCATOR</keywords>     
+    <keywords>RETAIN</keywords>
+    <keywords>RETURN</keywords>
+    <keywords>RETURNS</keywords>
+    <keywords>RETURN_STATUS</keywords>    
+    <keywords>REVOKE</keywords>
+    <keywords>RIGHT</keywords>
+    <keywords>ROLLBACK</keywords>
+    <keywords>ROLLUP</keywords>
+    <keywords>ROUTINE</keywords>
+    <keywords>ROW</keywords>
+    <keywords>ROW_COUNT</keywords>
+    <keywords>ROWID</keywords>
+    <keywords>ROWS</keywords>
+    <keywords>RUN</keywords>
+    <keywords>S</keywords>    
+    <keywords>SAVEPOINT</keywords>
+    <keywords>SBCS</keywords>
+    <keywords>SCALE</keywords>    
+    <keywords>SCHEMA</keywords>    
+    <keywords>SCOPE</keywords>
+    <keywords>SCRATCHPAD</keywords>
+    <keywords>SCROLL</keywords>
+    <keywords>SEARCH</keywords>
+    <keywords>SECOND</keywords>
+    <keywords>SECONDS</keywords>
+    <keywords>SECQTY</keywords>
+    <keywords>SECTION</keywords>
+    <keywords>SELECT</keywords>    
+    <keywords>SELECTIVITY</keywords>
+    <keywords>SELF</keywords>
+    <keywords>SEQUENCE</keywords>
+    <keywords>SERIALIZABLE</keywords>
+    <keywords>SERVER</keywords>    
+    <keywords>SESSION</keywords>
+    <keywords>SESSION_USER</keywords>
+    <keywords>SET</keywords>
+    <keywords>SETS</keywords>    
+    <keywords>SHARE</keywords>    
+    <keywords>SIGNAL</keywords>
+    <keywords>SIMPLE</keywords>
+    <keywords>SIZE</keywords>
+    <keywords>SMALLINT</keywords>
+    <keywords>SNAPSHOT</keywords>
+    <keywords>SOME</keywords>
+    <keywords>SOURCE</keywords>
+    <keywords>SPACE</keywords>    
+    <keywords>SPECIFIC</keywords>    
+    <keywords>SQL</keywords>
+    <keywords>SQLCODE</keywords>
+    <keywords>SQLERROR</keywords>
+    <keywords>SQLEXCEPTION</keywords>
+    <keywords>SQLWARNING</keywords>
+    <keywords>SQLID</keywords>    
+    <keywords>SQLSTATE</keywords>    
+    <keywords>START</keywords>
+    <keywords>STATE</keywords>
+    <keywords>STATEMENT</keywords>    
+    <keywords>STATISTICS</keywords>
+    <keywords>STAY</keywords>
+    <keywords>STOGROUP</keywords>
+    <keywords>STORAGE</keywords>    
+    <keywords>STYLE</keywords>    
+    <keywords>SUBSTRING</keywords>    
+    <keywords>SWITCH</keywords>
+    <keywords>SYNONYM</keywords>
+    <keywords>SYSTEM</keywords>
+    <keywords>SYSTEM_USER</keywords>
+    <keywords>TABLE</keywords>
+    <keywords>TABLES</keywords>
+    <keywords>TABLE_NAME</keywords>
+    <keywords>TABLESPACE</keywords>
+    <keywords>TABLESPACES</keywords>     
+    <keywords>TEMPORARY</keywords>
+    <keywords>THEN</keywords>
+    <keywords>THREADSAFE</keywords>    
+    <keywords>TIME</keywords>
+    <keywords>TIMESTAMP</keywords>
+    <keywords>TIMEZONE</keywords>
+    <keywords>TIMEZONE_HOUR</keywords>
+    <keywords>TIMEZONE_MINUTE</keywords>
+    <keywords>TO</keywords>
+    <keywords>TRAILING</keywords>
+    <keywords>TRANSACTION</keywords>    
+    <keywords>TRANSFORM</keywords>    
+    <keywords>TRANSLATE</keywords>
+    <keywords>TRANSLATION</keywords>
+    <keywords>TREAT</keywords>
+    <keywords>TRIGGER</keywords>
+    <keywords>TRIM</keywords>
+    <keywords>TRUE</keywords>
+    <keywords>TYPE</keywords>
+    <keywords>UNBOUNDED</keywords>    
+    <keywords>UNCOMMITTED</keywords>
+    <keywords>UNDER</keywords>
+    <keywords>UNDO</keywords>
+    <keywords>UNICODE</keywords>
+    <keywords>UNION</keywords>
+    <keywords>UNIQUE</keywords>
+    <keywords>UNKNOWN</keywords>    
+    <keywords>UNTIL</keywords>    
+    <keywords>UPDATE</keywords>
+    <keywords>UPPER</keywords>
+    <keywords>URL</keywords>
+    <keywords>USA</keywords>
+    <keywords>USE</keywords>
+    <keywords>USAGE</keywords>
+    <keywords>USER</keywords>
+    <keywords>USING</keywords>
+    <keywords>VALUE</keywords>
+    <keywords>VALUES</keywords>
+    <keywords>VARCHAR</keywords>
+    <keywords>VARGRAPHIC</keywords>
+    <keywords>VARIANT</keywords>
+    <keywords>VARYING</keywords>
+    <keywords>VCAT</keywords>
+    <keywords>VERSION</keywords>
+    <keywords>VIEW</keywords>    
+    <keywords>WHEN</keywords>
+    <keywords>WHENEVER</keywords>
+    <keywords>WHERE</keywords>
+    <keywords>WHILE</keywords>
+    <keywords>WITH</keywords>
+    <keywords>WITHOUT</keywords>
+    <keywords>WORK</keywords>
+    <keywords>WRAPPER</keywords>
+    <keywords>WRITE</keywords>
+    <keywords>YEAR</keywords>
+    <keywords>YEARS</keywords>
+    <keywords>YES</keywords>    
+    <keywords>ZONE</keywords>
+    <operators>&lt;</operators>
+    <operators>&quot;</operators>
+    <operators>%</operators>
+    <operators>&amp;</operators>
+    <operators>''''</operators>
+    <operators>(</operators>
+    <operators>)</operators>
+    <operators>*</operators>
+    <operators>+</operators>
+    <operators>,</operators>
+    <operators>-</operators>
+    <operators>.</operators>
+    <operators>/</operators>
+    <operators>:</operators>
+    <operators>;</operators>
+    <operators>=</operators>
+    <operators>?</operators>
+    <operators>[</operators>
+    <operators>]</operators>
+    <operators>_</operators>
+    <operators>'|'</operators>
+    <operators>,=</operators>
+    <operators>&lt;=</operators>
+    <operators>||</operators>
+    <operators>..</operators>
+    <operators>'-,'</operators>
+    <operators>!</operators>
+    <operators>~</operators>
+    <operators>:=</operators>
+    <operators>{</operators>
+    <operators>}</operators>
+    <operators>(+)</operators>
+  </SQLSyntaxDefinition>
+</DBDefinition:DatabaseVendorDefinition>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/runtime/vendors/DB2 UDB_9.1/DB2 UDB_9.1.xmi b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/runtime/vendors/DB2 UDB_9.1/DB2 UDB_9.1.xmi
new file mode 100644
index 0000000..ef25cc6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/runtime/vendors/DB2 UDB_9.1/DB2 UDB_9.1.xmi
@@ -0,0 +1,939 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="DB2 UDB" version="V9.1" maximumIdentifierLength="8" 
+viewTriggerSupported="true" maximumCommentLength="64" sequenceSupported="true" mQTSupported="true" aliasSupported="true" SQLStatementSupported="true" nicknameSupported="true" userDefinedTypeSupported="true" xmlSupported="true" roleSupported="false"
+userSupported="true" groupSupported="true" packageSupported="true" constructedDataTypeSupported="true">
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="long">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIGINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="BYTE" defaultLength="1048576" maximumLength="2147483647" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_1" lengthSupported="true" lengthUnit="DOUBLE_BYTE" defaultLength="1" keyConstraintSupported="true" maximumLength="127" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>GRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_1" lengthSupported="true" lengthUnit="DOUBLE_BYTE" defaultLength="32" keyConstraintSupported="true" maximumLength="16336" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARGRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_2" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARGRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="254" primitiveType="CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR</name>
+    <name>CHARACTER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="BYTE" defaultLength="1048576" maximumLength="2147483647" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CLOB</name>
+    <name>CHARACTER LARGE OBJECT</name>
+    <name>CHAR LARGE OBJECT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="DOUBLE_BYTE" defaultLength="1048576" maximumLength="1073741823" primitiveType="NATIONAL_CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DBCLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" keyConstraintSupported="true" defaultLength="32" maximumLength="32672" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR</name>
+    <name>CHARACTER VARYING</name>
+    <name>CHAR VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_2" primitiveType="CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">
+    <defaultValueTypes>CURRENT DATE</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" precisionSupported="true" defaultPrecision="5" maximumPrecision="31" scaleSupported="true" defaultScale="0" keyConstraintSupported="true" identitySupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" keyConstraintSupported="true" primitiveType="FLOAT" precisionSupported="true" defaultPrecision="53" maximumPrecision="53" cutoffPrecision="25" jdbcEnumType="6" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INTEGER</name>
+    <name>INT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATALINK_1" lengthSupported="true" lengthUnit="BYTE" defaultLength="200" maximumLength="200" primitiveType="DATALINK" jdbcEnumType="70" javaClassName="java.net.URL">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATALINK</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" identitySupported="true" precisionSupported="true" defaultPrecision="5" maximumPrecision="31" scaleSupported="true" defaultScale="0" keyConstraintSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+    <name>NUM</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIME_1" keyConstraintSupported="true" primitiveType="TIME" jdbcEnumType="92" javaClassName="java.sql.Time">
+    <defaultValueTypes>CURRENT TIME</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>CURRENT TIMESTAMP</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" lengthSupported="true" defaultLength="1" displayNameSupported="true" displayName="CHAR ({0}) FOR BIT DATA" keyConstraintSupported="true" maximumLength="254" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR FOR BIT DATA</name>
+    <name>CHARACTER FOR BIT DATA</name>
+    <name>CHAR () FOR BIT DATA</name>
+    <name>CHARACTER () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_1" lengthSupported="true" defaultLength="1" displayNameSupported="true" displayName="VARCHAR ({0}) FOR BIT DATA" keyConstraintSupported="true" maximumLength="32672" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR FOR BIT DATA</name>
+    <name>CHARACTER VARYING FOR BIT DATA</name>
+    <name>CHAR VARYING FOR BIT DATA</name>
+    <name>VARCHAR () FOR BIT DATA</name>
+    <name>CHARACTER VARYING () FOR BIT DATA</name>
+    <name>CHAR VARYING () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_2" primitiveType="BINARY_VARYING" jdbcEnumType="-4" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARCHAR FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="XML_TYPE_1" primitiveType="XML_TYPE" jdbcEnumType="1111" orderingSupported="false" groupingSupported="false" javaClassName="java.lang.String">
+    <name>XML</name>
+  </predefinedDataTypeDefinitions>
+  <tableSpaceDefinition maximumIdentifierLength="18" typeSupported="true" extentSizeSupported="true" prefetchSizeSupported="true" managedBySupported="true" pageSizeSupported="true" bufferPoolSupported="true">
+    <tableSpaceType>REGULAR</tableSpaceType>
+    <tableSpaceType>TEMPORARY</tableSpaceType>
+    <tableSpaceType>LARGE</tableSpaceType>
+  </tableSpaceDefinition>
+  <storedProcedureDefinition maximumIdentifierLength="128" nullInputActionSupported="true" determininsticSupported="true" returnedNullSupported="true" parameterStyleSupported="true">
+    <languageType>SQL</languageType>
+    <languageType>JAVA</languageType>
+    <languageType>C</languageType>
+    <languageType>COBOL</languageType>
+    <languageType>ASSEMBLY</languageType>
+    <languageType>PLI</languageType>
+    <functionLanguageType>SQL</functionLanguageType>
+    <functionLanguageType>JAVA</functionLanguageType>
+    <functionLanguageType>C</functionLanguageType>
+    <functionLanguageType>OLE</functionLanguageType>
+    <procedureType>PROCEDURE</procedureType>
+    <procedureType>FUNCTION</procedureType>
+  </storedProcedureDefinition>
+  <triggerDefinition maximumIdentifierLength="18" whenClauseSupported="true" granularitySupported="true" referencesClauseSupported="true" perColumnUpdateTriggerSupported="true" rowTriggerReferenceSupported="true" tableTriggerReferenceSupported="true"/>
+  <columnDefinition maximumIdentifierLength="30" identitySupported="true" computedSupported="true" identityStartValueSupported="true" identityIncrementSupported="true" identityMinimumSupported="true" identityMaximumSupported="true" identityCycleSupported="true"/>
+  <constraintDefinition maximumPrimaryKeyIdentifierLength="18" maximumForeignKeyIdentifierLength="18" maximumCheckConstraintIdentifierLength="18" clusteredPrimaryKeySupported="true" clusteredUniqueConstraintSupported="true" informationalConstraintSupported="true">
+    <parentUpdateDRIRuleType>RESTRICT</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>RESTRICT</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>SET_NULL</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+    <checkOption>NONE</checkOption>
+    <checkOption>LOCAL</checkOption>
+    <checkOption>CASCADE</checkOption>
+  </constraintDefinition>
+  <sequenceDefinition predefinedDataTypeDefinitions="BIGINT_1 INTEGER_1 SMALLINT_1 DECIMAL_1" defaultDataTypeDefinition="INTEGER_1" typeEnumerationSupported="true" cacheSupported="true" orderSupported="true" noMaximumValueString="NO MAXVALUE" noMinimumValueString="NO MINVALUE" noCacheString="NO CACHE" cacheDefaultValue="20"/>
+  <udtDefinition maximumIdentifierLength="18" distinctTypeSupported="true" structuredTypeSupported="true"/>
+  <constructedDataTypeDefinition referenceDatatypeSupported="true"/>
+  <indexDefinition maximumIdentifierLength="128" clusteringSupported="true"/>
+  <queryDefinition hostVariableMarker=":"/>
+  <nicknameDefinition maximumIdentifierLength="128" constraintSupported="true" indexSupported="true"/>
+  <viewDefinition maximumIdentifierLength="128" checkOptionLevelsSupported="true"/>
+  <tableDefinition maximumIdentifierLength="128"/>
+  <schemaDefinition maximumIdentifierLength="30"/>
+  <privilegedElementDefinitions name="Database">
+    <privilegeDefinitions name="BINDADD"/>
+    <privilegeDefinitions name="CONNECT"/>
+    <privilegeDefinitions name="CREATETAB"/>
+    <privilegeDefinitions name="CREATE_EXTERNAL_ROUTINE"/>
+    <privilegeDefinitions name="CREATE_NOT_FENCED_ROUTINE"/>
+    <privilegeDefinitions name="IMPLICIT_SCHEMA"/>
+    <privilegeDefinitions name="DBADM"/>
+    <privilegeDefinitions name="LOAD"/>
+    <privilegeDefinitions name="QUIESCE_CONNECT"/>
+    <privilegeDefinitions name="SECADM"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Schema">
+  	<privilegeDefinitions name="ALTERIN"/>
+  	<privilegeDefinitions name="CREATEIN"/>
+    <privilegeDefinitions name="DROPIN"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="PersistentTable">
+  	<privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="REFERENCES" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="ViewTable">
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Nickname">
+  	<privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="REFERENCES"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions xmi:id="COLUMN_1" name="Column"/>
+  <privilegedElementDefinitions name="MaterializedQueryTable">
+  	<privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="REFERENCES" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Routine">
+  	<privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Sequence">
+  	<privilegeDefinitions name="ALTER"/>
+  	<privilegeDefinitions name="USAGE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Index">
+  	<privilegeDefinitions name="CONTROL"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Tablespace">
+  	<privilegeDefinitions name="USE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Package">
+    <privilegeDefinitions name="BIND"/>
+  	<privilegeDefinitions name="CONTROL"/>
+  	<privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <SQLSyntaxDefinition terminationCharacter=";">
+    <keywords>ABS</keywords>
+    <keywords>ABSOLUTE</keywords>
+    <keywords>ACCESS</keywords>
+    <keywords>ACTION</keywords>
+    <keywords>ACTIVATE</keywords>
+    <keywords>ADA</keywords>
+    <keywords>ADD</keywords>
+    <keywords>AFTER</keywords>
+    <keywords>ALIAS</keywords>
+    <keywords>ALL</keywords>
+    <keywords>ALLOCATE</keywords>
+    <keywords>ALLOW</keywords>
+    <keywords>ALTER</keywords>
+    <keywords>ALTERIN</keywords>
+    <keywords>ALWAYS</keywords>
+    <keywords>AND</keywords>
+    <keywords>ANY</keywords>
+    <keywords>APPEND</keywords>    
+    <keywords>ARE</keywords>
+    <keywords>ARRAY</keywords>
+    <keywords>AS</keywords>
+    <keywords>ASC</keywords>
+    <keywords>ASCII</keywords>
+    <keywords>ASENSITIVE</keywords>
+    <keywords>ASSERTION</keywords>
+    <keywords>ASSOCIATE</keywords>    
+    <keywords>ASUTIME</keywords>
+    <keywords>ASYMMETRIC</keywords>
+    <keywords>AT</keywords>
+    <keywords>ATOMIC</keywords>
+    <keywords>ATTRIBUTES</keywords>
+    <keywords>AUDIT</keywords>   
+    <keywords>AUTHORIZATION</keywords>    
+    <keywords>AUTOMATIC</keywords>  
+    <keywords>AUX</keywords>
+    <keywords>AUXILIARY</keywords> 
+    <keywords>AVG</keywords>
+    <keywords>BEFORE</keywords>
+    <keywords>BEGIN</keywords>
+    <keywords>BETWEEN</keywords>
+    <keywords>BIGINT</keywords>
+    <keywords>BINARY</keywords>
+    <keywords>BIND</keywords>
+    <keywords>BINDADD</keywords>
+    <keywords>BIT</keywords>
+    <keywords>BIT_LENGTH</keywords>
+    <keywords>BLOB</keywords>
+    <keywords>BLOCKED</keywords>
+    <keywords>BOOLEAN</keywords>
+    <keywords>BOTH</keywords>    
+    <keywords>BUFFERPOOL</keywords>    
+    <keywords>BY</keywords>
+    <keywords>C</keywords>
+    <keywords>CACHE</keywords>
+    <keywords>CALL</keywords>
+    <keywords>CALLED</keywords>    
+    <keywords>CAPTURE</keywords>
+    <keywords>CARDINALITY</keywords>
+    <keywords>CASCADE</keywords>
+    <keywords>CASCADED</keywords>
+    <keywords>CASE</keywords>
+    <keywords>CAST</keywords>
+    <keywords>CATALOG</keywords>
+    <keywords>CCSID</keywords>
+    <keywords>CEIL</keywords>
+    <keywords>CEILING</keywords>
+    <keywords>CHANGE</keywords>    
+    <keywords>CHAR</keywords>
+    <keywords>CHAR_LENGTH</keywords>
+    <keywords>CHARACTER</keywords>
+    <keywords>CHARACTER_LENGTH</keywords>    
+    <keywords>CHECK</keywords>
+    <keywords>CHECKED</keywords>    
+    <keywords>CLIENT</keywords>
+    <keywords>CLOB</keywords>
+    <keywords>CLOSE</keywords>
+    <keywords>CLUSTER</keywords>
+    <keywords>COALESCE</keywords>
+    <keywords>COBOL</keywords>    
+    <keywords>COLLATE</keywords>
+    <keywords>COLLATION</keywords>    
+    <keywords>COLLECT</keywords>
+    <keywords>COLLECTION</keywords>
+    <keywords>COLLID</keywords>
+    <keywords>COLUMN</keywords>    
+    <keywords>COMMENT</keywords>
+    <keywords>COMMIT</keywords>
+    <keywords>COMMITTED</keywords>
+    <keywords>COMPARISONS</keywords>
+    <keywords>CONCAT</keywords>
+    <keywords>CONDITION</keywords>    
+    <keywords>CONNECT</keywords>
+    <keywords>CONNECTION</keywords>    
+    <keywords>CONSERVATIVE</keywords>
+    <keywords>CONSTRAINT</keywords>     
+    <keywords>CONSTRAINTS</keywords>
+    <keywords>CONTAINS</keywords>
+    <keywords>CONTINUE</keywords>
+    <keywords>CONTROL</keywords>
+    <keywords>CONVERT</keywords>
+    <keywords>COPY</keywords>
+    <keywords>CORRELATION</keywords>
+    <keywords>CORR</keywords>
+    <keywords>CORRESPONDING</keywords>
+    <keywords>COUNT</keywords>
+    <keywords>COUNT_BIG</keywords> 
+    <keywords>COVAR_POP</keywords>
+    <keywords>COVAR_SAMP</keywords>
+    <keywords>C++</keywords>
+    <keywords>CREATE</keywords>
+    <keywords>CREATEIN</keywords>    
+    <keywords>CREATETAB</keywords>
+    <keywords>CROSS</keywords>
+    <keywords>CUBE</keywords>
+    <keywords>CUME_DIST</keywords>
+    <keywords>CURRENT</keywords>
+    <keywords>CURRENT_DATE</keywords>
+    <keywords>CURRENT_DEFAULT_TRANSFORM_GROUP</keywords> 
+    <keywords>CURRENT_EXPLAIN_MODE</keywords> 
+    <keywords>CURRENT_LC_CTYPE</keywords>   
+    <keywords>CURRENT_PATH</keywords>
+    <keywords>CURRENT_ROLE</keywords>  
+    <keywords>CURRENT_SCHEMA</keywords>
+    <keywords>CURRENT_SERVER</keywords>
+    <keywords>CURRENT_SQLID</keywords>
+    <keywords>CURRENT_TIME</keywords>
+    <keywords>CURRENT_TIMESTAMP</keywords>
+    <keywords>CURRENT_TIMEZONE</keywords>
+    <keywords>CURRENT_TRANSFORM_GROUP_FOR_TYPE</keywords>
+    <keywords>CURRENT_USER</keywords>    
+    <keywords>CURSOR</keywords>     
+    <keywords>CYCLE</keywords>
+    <keywords>DATA</keywords>      
+    <keywords>DATABASE</keywords>
+    <keywords>DATALINK</keywords>
+    <keywords>DATAPARTITIONNAME</keywords>
+    <keywords>DATAPARTITIONNUM</keywords>
+    <keywords>DATE</keywords>  
+    <keywords>DAY</keywords>
+    <keywords>DAYS</keywords>
+    <keywords>DB</keywords>
+    <keywords>DBADM</keywords>
+    <keywords>DBCLOB</keywords>
+    <keywords>DBINFO</keywords>
+    <keywords>DB2DARI</keywords>
+    <keywords>DB2GENRL</keywords>
+    <keywords>DB2GENERAL</keywords>    
+    <keywords>DB2SQL</keywords>
+    <keywords>DBPARTITIONNAME</keywords>
+    <keywords>DBPARTITIONNUM</keywords>
+    <keywords>DEADLOCKS</keywords>
+    <keywords>DEALLOCATE</keywords>
+    <keywords>DEC</keywords>
+    <keywords>DECIMAL</keywords>
+    <keywords>DECLARE</keywords>
+    <keywords>DEFAULT</keywords>
+    <keywords>DEFAULTS</keywords>
+    <keywords>DEFINE</keywords>
+    <keywords>DEFINITION</keywords>
+    <keywords>DEGREE</keywords>    
+    <keywords>DEFERRABLE</keywords>
+    <keywords>DEFERRED</keywords>
+    <keywords>DELETE</keywords>
+    <keywords>DENSE_RANK</keywords>
+    <keywords>DENSERANK</keywords>
+    <keywords>DEREF</keywords>
+    <keywords>DESC</keywords>
+    <keywords>DESCRIBE</keywords>
+    <keywords>DESCRIPTOR</keywords>
+    <keywords>DSSIZE</keywords>  
+    <keywords>DETERMINISTIC</keywords>    
+    <keywords>DIAGNOSTICS</keywords>
+    <keywords>DIMENSIONS</keywords>
+    <keywords>DISABLE</keywords>
+    <keywords>DISALLOW</keywords>
+    <keywords>DISCONNECT</keywords>    
+    <keywords>DISTINCT</keywords>    
+    <keywords>DOMAIN</keywords>
+    <keywords>DO</keywords>
+    <keywords>DOUBLE</keywords>
+    <keywords>DROP</keywords>
+    <keywords>DROPIN</keywords>    
+    <keywords>DYNAMIC</keywords>    
+    <keywords>EACH</keywords>
+    <keywords>EBCDIC</keywords>
+    <keywords>EDITPROC</keywords>
+    <keywords>ELEMENT</keywords>
+    <keywords>ELSE</keywords>
+    <keywords>ELSEIF</keywords>
+    <keywords>ENABLE</keywords>
+    <keywords>ENCODING</keywords>
+    <keywords>ENCRYPTION</keywords>
+    <keywords>END</keywords>
+    <keywords>END-EXEC</keywords>
+    <keywords>ENDING</keywords>
+    <keywords>ERASE</keywords>
+    <keywords>ESCAPE</keywords>
+    <keywords>EUR</keywords>    
+    <keywords>EVENT</keywords>
+    <keywords>EVERY</keywords>
+    <keywords>EXACT</keywords>
+    <keywords>EXCEPT</keywords>
+    <keywords>EXCEPTION</keywords>
+    <keywords>EXCLUDE</keywords>
+    <keywords>EXCLUDING</keywords>
+    <keywords>EXCLUSIVE</keywords>
+    <keywords>EXEC</keywords>    
+    <keywords>EXECUTE</keywords>
+    <keywords>EXISTS</keywords>
+    <keywords>EXIT</keywords>
+    <keywords>EXP</keywords>   
+    <keywords>EXPLAIN</keywords>     
+    <keywords>EXTENSION</keywords>    
+    <keywords>EXTERNAL</keywords>
+    <keywords>EXTRACT</keywords>
+    <keywords>FALSE</keywords>
+    <keywords>FEDERATED</keywords>
+    <keywords>FENCED</keywords>
+    <keywords>FETCH</keywords>
+    <keywords>FIELDPROC</keywords>
+    <keywords>FILE</keywords>
+    <keywords>FILTER</keywords>   
+    <keywords>FINAL</keywords>
+    <keywords>FIRST</keywords>
+    <keywords>FLOAT</keywords>
+    <keywords>FLOOR</keywords>
+    <keywords>FLUSH</keywords>
+    <keywords>FOLLOWING</keywords>
+    <keywords>FOR</keywords>
+    <keywords>FORCE</keywords>
+    <keywords>FOREIGN</keywords>    
+    <keywords>FORTRAN</keywords>
+    <keywords>FOUND</keywords>
+    <keywords>FREE</keywords>  
+    <keywords>FROM</keywords>
+    <keywords>FS</keywords>
+    <keywords>FULL</keywords>
+    <keywords>FUNCTION</keywords>
+    <keywords>FUSION</keywords>
+    <keywords>G</keywords>    
+    <keywords>GENERAL</keywords>    
+    <keywords>GENERATED</keywords>
+    <keywords>GET</keywords>
+    <keywords>GLOBAL</keywords>
+    <keywords>GO</keywords>
+    <keywords>GOTO</keywords>
+    <keywords>GRANT</keywords>
+    <keywords>GRAPHIC</keywords>
+    <keywords>GROUP</keywords>
+    <keywords>GROUPING</keywords>
+    <keywords>HANDLER</keywords>
+    <keywords>HASH</keywords>
+    <keywords>HASHED_VALUE</keywords>
+    <keywords>HAVING</keywords>
+    <keywords>HINT</keywords>  
+    <keywords>HOLD</keywords>
+    <keywords>HOUR</keywords>
+    <keywords>HOURS</keywords>
+    <keywords>IDENTITY</keywords>
+    <keywords>IF</keywords>
+    <keywords>IMMEDIATE</keywords>
+    <keywords>IMPLICIT_SCHEMA</keywords>
+    <keywords>IN</keywords>
+    <keywords>INCLUDE</keywords>
+    <keywords>INCLUDING</keywords>
+    <keywords>INCLUSIVE</keywords>
+    <keywords>INCREMENT</keywords>    
+    <keywords>INDEX</keywords>    
+    <keywords>INDICATOR</keywords>    
+    <keywords>INHERIT</keywords>
+    <keywords>INITIALLY</keywords>
+    <keywords>INITIAL_INSTS</keywords>
+    <keywords>INITIAL_IOS</keywords>    
+    <keywords>INNER</keywords>
+    <keywords>INOUT</keywords>
+    <keywords>INPUT</keywords>
+    <keywords>INSENSITIVE</keywords>
+    <keywords>INSERT</keywords>    
+    <keywords>INSTEAD</keywords>
+    <keywords>INSTS_PER_ARGBYTE</keywords>
+    <keywords>INSTS_PER_INVOC</keywords>
+    <keywords>INT</keywords>
+    <keywords>INTEGER</keywords>
+    <keywords>INTEGRITY</keywords>
+    <keywords>INTERSECT</keywords>
+    <keywords>INTERSECTION</keywords>
+    <keywords>INTERVAL</keywords>
+    <keywords>INTO</keywords>    
+    <keywords>IOS_PER_ARGBYTE</keywords>
+    <keywords>IOS_PER_INVOC</keywords>
+    <keywords>IS</keywords>
+    <keywords>ISO</keywords>
+    <keywords>ISOBID</keywords>
+    <keywords>ISOLATION</keywords>
+    <keywords>ITERATE</keywords>
+    <keywords>JAR</keywords>
+    <keywords>JAVA</keywords>    
+    <keywords>JIS</keywords>
+    <keywords>JOIN</keywords>
+    <keywords>K</keywords>
+    <keywords>KEY</keywords>
+    <keywords>LABEL</keywords>  
+    <keywords>LANGUAGE</keywords>
+    <keywords>LARGE</keywords>
+    <keywords>LAST</keywords>
+    <keywords>LATERAL</keywords>
+    <keywords>LC_CTYPE</keywords>
+    <keywords>LEADING</keywords>
+    <keywords>LEAVE</keywords>
+    <keywords>LEFT</keywords>
+    <keywords>LENGTH</keywords>
+    <keywords>LEVEL</keywords>    
+    <keywords>LIKE</keywords>
+    <keywords>LIMIT</keywords>
+    <keywords>LINK</keywords>
+    <keywords>LINKTYPE</keywords>
+    <keywords>LN</keywords>
+    <keywords>LOAD</keywords>
+    <keywords>LOCAL</keywords>
+    <keywords>LOCALDATE</keywords>
+    <keywords>LOCALE</keywords>
+    <keywords>LOCALTIME</keywords>
+    <keywords>LOCALTIMESTAMP</keywords>
+    <keywords>LOCATOR</keywords>
+    <keywords>LOCATORS</keywords>
+    <keywords>LOCK</keywords>
+    <keywords>LOCKMAX</keywords>
+    <keywords>LOCKS</keywords>
+    <keywords>LOCKSIZE</keywords>    
+    <keywords>LONG</keywords>
+    <keywords>LONGVAR</keywords>
+    <keywords>LOOP</keywords>
+    <keywords>LOWER</keywords>
+    <keywords>M</keywords>
+    <keywords>MAINTAINED</keywords>     
+    <keywords>MAPPING</keywords>
+    <keywords>MATCH</keywords>
+    <keywords>MATERIALIZED</keywords>
+    <keywords>MAX</keywords>     
+    <keywords>MAXVALUE</keywords>
+    <keywords>MEMBER</keywords>
+    <keywords>MERGE</keywords>   
+    <keywords>METHOD</keywords>    
+    <keywords>MICROSECOND</keywords>
+    <keywords>MICROSECONDS</keywords>
+    <keywords>MIN</keywords>   
+    <keywords>MINUTE</keywords>
+    <keywords>MINUTES</keywords>
+    <keywords>MINVALUE</keywords>
+    <keywords>MOD</keywords>    
+    <keywords>MODE</keywords>
+    <keywords>MODIFIES</keywords>
+    <keywords>MODULE</keywords>
+    <keywords>MONITOR</keywords>
+    <keywords>MONTH</keywords>
+    <keywords>MONTHS</keywords>
+    <keywords>MULTISET</keywords>   
+    <keywords>NAMED</keywords>
+    <keywords>NAMES</keywords>
+    <keywords>NATIONAL</keywords>
+    <keywords>NATURAL</keywords>
+    <keywords>NCHAR</keywords>
+    <keywords>NCLOB</keywords>
+    <keywords>NEW</keywords>
+    <keywords>NEW_TABLE</keywords>
+    <keywords>NEXT</keywords>
+    <keywords>NEXTVAL</keywords>
+    <keywords>NICKNAME</keywords>
+    <keywords>NO</keywords>
+    <keywords>NOCACHE</keywords>
+    <keywords>NOCYCLE</keywords>
+    <keywords>NODE</keywords>
+    <keywords>NODENAME</keywords>
+    <keywords>NODENUMBER</keywords>
+    <keywords>NOMAXVALUE</keywords>
+    <keywords>NOMINVALUE</keywords>    
+    <keywords>NONE</keywords>
+    <keywords>NOORDER</keywords>
+    <keywords>NORMALIZE</keywords>
+    <keywords>NORMALIZED</keywords>
+    <keywords>NOT</keywords>
+    <keywords>NULL</keywords>
+    <keywords>NULLABLE</keywords>
+    <keywords>NULLIF</keywords>   
+    <keywords>NULLS</keywords>    
+    <keywords>NUMBER</keywords>
+    <keywords>NUMERIC</keywords>
+    <keywords>NUMPARTS</keywords>
+    <keywords>OBID</keywords>   
+    <keywords>OBJECT</keywords>
+    <keywords>OCTET_LENGTH</keywords>
+    <keywords>OF</keywords>
+    <keywords>OFF</keywords>
+    <keywords>OLD</keywords>
+    <keywords>OLD_TABLE</keywords>
+    <keywords>OLE</keywords>
+    <keywords>OLEDB</keywords>
+    <keywords>ON</keywords>
+    <keywords>ONCE</keywords>
+    <keywords>ONLINE</keywords>
+    <keywords>ONLY</keywords>
+    <keywords>OPEN</keywords>
+    <keywords>OPTIMIZATION</keywords>
+    <keywords>OPTIMIZE</keywords>
+    <keywords>OPTION</keywords>    
+    <keywords>OR</keywords>
+    <keywords>ORDER</keywords>
+    <keywords>OUT</keywords>
+    <keywords>OUTER</keywords>
+    <keywords>OUTPUT</keywords>
+    <keywords>OVER</keywords>
+    <keywords>OVERLAY</keywords>   
+    <keywords>OVERLAPS</keywords>
+    <keywords>OVERRIDING</keywords>    
+    <keywords>PACKAGE</keywords>
+    <keywords>PAD</keywords>
+    <keywords>PADDED</keywords>
+    <keywords>PAGESIZE</keywords>
+    <keywords>PART</keywords>  
+    <keywords>PARTIAL</keywords>
+    <keywords>PARTITIONED</keywords>
+    <keywords>PARTITIONING</keywords>
+    <keywords>PARTITIONS</keywords>
+    <keywords>PARALLEL</keywords>    
+    <keywords>PARAMETER</keywords>
+    <keywords>PASCAL</keywords>
+    <keywords>PASSTHRU</keywords>
+    <keywords>PASSWORD</keywords>
+    <keywords>PATH</keywords>
+    <keywords>PARTITION</keywords>    
+    <keywords>PCTFREE</keywords>    
+    <keywords>PERCENT_ARGBYTES</keywords>
+    <keywords>PERCENT_RANK</keywords>
+    <keywords>PERCENTILE_CONT</keywords>
+    <keywords>PERCENTILE_DISC</keywords>
+    <keywords>PERMISSION</keywords>
+    <keywords>PIECESIZE</keywords>
+    <keywords>PIPE</keywords>
+    <keywords>PLAN</keywords>
+    <keywords>PLI</keywords>
+    <keywords>POSITION</keywords>
+    <keywords>POWER</keywords>
+    <keywords>PRECEDING</keywords>
+    <keywords>PRECISION</keywords>     
+    <keywords>PREPARE</keywords>
+    <keywords>PRESERVE</keywords>
+    <keywords>PREVVAL</keywords>
+    <keywords>PRIMARY</keywords>    
+    <keywords>PRIOR</keywords>
+    <keywords>PRIQTY</keywords>
+    <keywords>PRIVILEGES</keywords>
+    <keywords>PROCEDURE</keywords>
+    <keywords>PROGRAM</keywords>
+    <keywords>PSID</keywords>  
+    <keywords>PUBLIC</keywords>
+    <keywords>QUERY</keywords>
+    <keywords>QUERYNO</keywords>    
+    <keywords>RANGE</keywords>    
+    <keywords>READ</keywords>
+    <keywords>READS</keywords>
+    <keywords>REAL</keywords>
+    <keywords>RECOMMEND</keywords>    
+    <keywords>RECOVERY</keywords>
+    <keywords>RECURSIVE</keywords>   
+    <keywords>REF</keywords>
+    <keywords>REFERENCE</keywords>
+    <keywords>REFERENCES</keywords>
+    <keywords>REFERENCING</keywords>
+    <keywords>REFRESH</keywords>
+    <keywords>REGISTERS</keywords> 
+    <keywords>REGR_AVGX</keywords> 
+    <keywords>REGR_AVGY</keywords>
+    <keywords>REGR_COUNT</keywords>
+    <keywords>REGR_INTERCEPT</keywords>
+    <keywords>REGR_R2</keywords>
+    <keywords>REGR_SLOPE</keywords>
+    <keywords>REGR_SXX</keywords>
+    <keywords>REGR_SXY</keywords>
+    <keywords>REGR_SYY</keywords>
+    <keywords>RELATIVE</keywords>
+    <keywords>RELEASE</keywords>     
+    <keywords>RENAME</keywords>
+    <keywords>REPEATABLE</keywords>
+    <keywords>REPEAT</keywords>    
+    <keywords>REPLACE</keywords>
+    <keywords>REPLICATED</keywords>
+    <keywords>RESET</keywords>    
+    <keywords>RESIGNAL</keywords>    
+    <keywords>RESOLVE</keywords>
+    <keywords>RESTART</keywords>
+    <keywords>RESTORE</keywords>
+    <keywords>RESTRICT</keywords>
+    <keywords>RESULT</keywords>
+    <keywords>RESULT_SET_LOCATOR</keywords>     
+    <keywords>RETAIN</keywords>
+    <keywords>RETURN</keywords>
+    <keywords>RETURNS</keywords>
+    <keywords>RETURN_STATUS</keywords>    
+    <keywords>REVOKE</keywords>
+    <keywords>RIGHT</keywords>
+    <keywords>ROLLBACK</keywords>
+    <keywords>ROLLUP</keywords>
+    <keywords>ROUTINE</keywords>
+    <keywords>ROW</keywords>    
+    <keywords>ROWID</keywords>
+    <keywords>ROWNUMBER</keywords>
+    <keywords>ROWS</keywords>
+    <keywords>ROWSET</keywords>
+    <keywords>ROW_COUNT</keywords>
+    <keywords>RRN</keywords>   
+    <keywords>RUN</keywords>
+    <keywords>S</keywords>    
+    <keywords>SAVEPOINT</keywords>
+    <keywords>SBCS</keywords>
+    <keywords>SCALE</keywords>    
+    <keywords>SCHEMA</keywords>    
+    <keywords>SCOPE</keywords>
+    <keywords>SCRATCHPAD</keywords>
+    <keywords>SCROLL</keywords>
+    <keywords>SEARCH</keywords>
+    <keywords>SECOND</keywords>
+    <keywords>SECONDS</keywords>
+    <keywords>SECQTY</keywords>
+    <keywords>SECTION</keywords>
+    <keywords>SECURITY</keywords>
+    <keywords>SELECT</keywords>    
+    <keywords>SELECTIVITY</keywords>
+    <keywords>SELF</keywords>
+    <keywords>SENSITIVE</keywords>
+    <keywords>SEQUENCE</keywords>
+    <keywords>SERIALIZABLE</keywords>
+    <keywords>SERVER</keywords>    
+    <keywords>SESSION</keywords>
+    <keywords>SESSION_USER</keywords>
+    <keywords>SET</keywords>
+    <keywords>SETS</keywords>    
+    <keywords>SHARE</keywords>    
+    <keywords>SIGNAL</keywords>
+    <keywords>SIMILAR</keywords>
+    <keywords>SIMPLE</keywords>
+    <keywords>SIZE</keywords>
+    <keywords>SMALLINT</keywords>
+    <keywords>SNAPSHOT</keywords>
+    <keywords>SOME</keywords>
+    <keywords>SOURCE</keywords>
+    <keywords>SPACE</keywords>    
+    <keywords>SPECIFIC</keywords>  
+    <keywords>SPECIFICTYPE</keywords>  
+    <keywords>SQL</keywords>
+    <keywords>SQLCODE</keywords>
+    <keywords>SQLERROR</keywords>
+    <keywords>SQLEXCEPTION</keywords>
+    <keywords>SQLWARNING</keywords>
+    <keywords>SQLID</keywords>    
+    <keywords>SQLSTATE</keywords>
+    <keywords>SQRT</keywords>    
+    <keywords>STACKED</keywords>
+    <keywords>STANDARD</keywords>
+    <keywords>START</keywords>
+    <keywords>STARTING</keywords>
+    <keywords>STATE</keywords>
+    <keywords>STATEMENT</keywords>  
+    <keywords>STATIC</keywords>  
+    <keywords>STATISTICS</keywords>
+    <keywords>STAY</keywords>
+    <keywords>STDDEV_POP</keywords>
+    <keywords>STDDEV_SAMP</keywords>
+    <keywords>STOGROUP</keywords>
+    <keywords>STORAGE</keywords> 
+    <keywords>STORES</keywords>   
+    <keywords>STYLE</keywords>    
+    <keywords>SUBMULTISET</keywords>
+    <keywords>SUBSTRING</keywords> 
+    <keywords>SUM</keywords>
+    <keywords>SUMMARY</keywords>   
+    <keywords>SWITCH</keywords>
+    <keywords>SYMMETRIC</keywords>
+    <keywords>SYNONYM</keywords>
+    <keywords>SYSFUN</keywords>
+    <keywords>SYSIBM</keywords>
+    <keywords>SYSPROC</keywords>
+    <keywords>SYSTEM</keywords>
+    <keywords>SYSTEM_USER</keywords>
+    <keywords>TABLE</keywords>
+    <keywords>TABLES</keywords>
+    <keywords>TABLE_NAME</keywords>
+    <keywords>TABLESPACE</keywords>
+    <keywords>TABLESPACES</keywords>
+    <keywords>TARGET</keywords>
+    <keywords>TEMPLATE</keywords>
+    <keywords>TEMPORARY</keywords>
+    <keywords>THEN</keywords>
+    <keywords>THREADSAFE</keywords>    
+    <keywords>TIME</keywords>
+    <keywords>TIMESTAMP</keywords>
+    <keywords>TIMEZONE</keywords>
+    <keywords>TIMEZONE_HOUR</keywords>
+    <keywords>TIMEZONE_MINUTE</keywords>
+    <keywords>TO</keywords>
+    <keywords>TRAILING</keywords>
+    <keywords>TRANSACTION</keywords>    
+    <keywords>TRANSFORM</keywords>    
+    <keywords>TRANSLATE</keywords>
+    <keywords>TRANSLATION</keywords>
+    <keywords>TREAT</keywords>
+    <keywords>TRIGGER</keywords>
+    <keywords>TRIM</keywords>
+    <keywords>TRUE</keywords>
+    <keywords>TYPE</keywords>
+    <keywords>UESCAPE</keywords>
+    <keywords>UNBOUNDED</keywords>    
+    <keywords>UNCOMMITTED</keywords>
+    <keywords>UNDER</keywords>
+    <keywords>UNDO</keywords>
+    <keywords>UNICODE</keywords>
+    <keywords>UNION</keywords>
+    <keywords>UNIQUE</keywords>
+    <keywords>UNKNOWN</keywords>  
+    <keywords>UNNEST</keywords>  
+    <keywords>UNTIL</keywords>    
+    <keywords>UPDATE</keywords>
+    <keywords>UPPER</keywords>
+    <keywords>URL</keywords>
+    <keywords>USA</keywords>
+    <keywords>USE</keywords>
+    <keywords>USAGE</keywords>
+    <keywords>USER</keywords>
+    <keywords>USING</keywords>
+    <keywords>VALIDPROC</keywords>
+    <keywords>VALUE</keywords>
+    <keywords>VALUES</keywords>
+    <keywords>VARCHAR</keywords>
+    <keywords>VARGRAPHIC</keywords>
+    <keywords>VARIABLE</keywords>
+    <keywords>VARIANT</keywords>
+    <keywords>VARYING</keywords>
+    <keywords>VAR_POP</keywords>
+    <keywords>VAR_SAMP</keywords>
+    <keywords>VCAT</keywords>
+    <keywords>VERSION</keywords>
+    <keywords>VIEW</keywords>  
+    <keywords>VOLATILE</keywords>  
+    <keywords>VOLUMES</keywords>
+    <keywords>WHEN</keywords>
+    <keywords>WHENEVER</keywords>
+    <keywords>WHERE</keywords>
+    <keywords>WHILE</keywords>
+    <keywords>WIDTH_BUCKET</keywords>
+    <keywords>WINDOW</keywords>    
+    <keywords>WITH</keywords>
+    <keywords>WITHIN</keywords>
+    <keywords>WITHOUT</keywords>
+    <keywords>WLM</keywords>
+    <keywords>WORK</keywords>
+    <keywords>WRAPPER</keywords>
+    <keywords>WRITE</keywords>
+    <keywords>XMLELEMENT</keywords>
+    <keywords>XMLEXISTS</keywords>
+    <keywords>YEAR</keywords>
+    <keywords>YEARS</keywords>
+    <keywords>YES</keywords>    
+    <keywords>ZONE</keywords>
+    <operators>&lt;</operators>
+    <operators>&quot;</operators>
+    <operators>%</operators>
+    <operators>&amp;</operators>
+    <operators>''''</operators>
+    <operators>(</operators>
+    <operators>)</operators>
+    <operators>*</operators>
+    <operators>+</operators>
+    <operators>,</operators>
+    <operators>-</operators>
+    <operators>.</operators>
+    <operators>/</operators>
+    <operators>:</operators>
+    <operators>;</operators>
+    <operators>=</operators>
+    <operators>?</operators>
+    <operators>[</operators>
+    <operators>]</operators>
+    <operators>_</operators>
+    <operators>'|'</operators>
+    <operators>,=</operators>
+    <operators>&lt;=</operators>
+    <operators>||</operators>
+    <operators>..</operators>
+    <operators>'-,'</operators>
+    <operators>!</operators>
+    <operators>~</operators>
+    <operators>:=</operators>
+    <operators>{</operators>
+    <operators>}</operators>
+    <operators>(+)</operators>
+  </SQLSyntaxDefinition>
+</DBDefinition:DatabaseVendorDefinition>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/runtime/vendors/DB2 UDB_9.5/DB2 UDB_9.5.xmi b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/runtime/vendors/DB2 UDB_9.5/DB2 UDB_9.5.xmi
new file mode 100644
index 0000000..c4562ad
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/runtime/vendors/DB2 UDB_9.5/DB2 UDB_9.5.xmi
@@ -0,0 +1,1008 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="DB2 UDB" version="V9.5" maximumIdentifierLength="8" viewTriggerSupported="true" maximumCommentLength="64" sequenceSupported="true" mQTSupported="true" aliasSupported="true" userDefinedTypeSupported="true" SQLStatementSupported="true" nicknameSupported="true" xmlSupported="true" packageSupported="true" roleSupported="true" groupSupported="true" userSupported="true" roleAuthorizationSupported="true" mQTIndexSupported="true">
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="long">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIGINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_1" lengthSupported="true" maximumLength="2147483647" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob" defaultLength="1048576" lengthUnit="BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="127" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String" defaultLength="1" lengthUnit="DOUBLE_BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>GRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="16336" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String" defaultLength="32" lengthUnit="DOUBLE_BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARGRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_2" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARGRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="254" jdbcEnumType="1" javaClassName="java.lang.String" defaultLength="1">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR</name>
+    <name>CHARACTER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" lengthSupported="true" maximumLength="2147483647" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob" defaultLength="1048576" lengthUnit="BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CLOB</name>
+    <name>CHARACTER LARGE OBJECT</name>
+    <name>CHAR LARGE OBJECT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_LARGE_OBJECT_1" lengthSupported="true" maximumLength="1073741823" primitiveType="NATIONAL_CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob" defaultLength="1048576" lengthUnit="DOUBLE_BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DBCLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="32672" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String" defaultLength="32">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR</name>
+    <name>CHARACTER VARYING</name>
+    <name>CHAR VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_2" primitiveType="CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>CURRENT DATE</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" scaleSupported="true" precisionSupported="true" keyConstraintSupported="true" identitySupported="true" maximumPrecision="31" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal" defaultPrecision="5">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_2" keyConstraintSupported="true" precisionSupported="true" maximumPrecision="34" primitiveType="FLOAT" jdbcEnumType="3" javaClassName="java.math.BigDecimal" defaultPrecision="34">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECFLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" precisionSupported="true" keyConstraintSupported="true" maximumPrecision="53" primitiveType="FLOAT" jdbcEnumType="6" javaClassName="double" defaultPrecision="53" cutoffPrecision="25">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INTEGER</name>
+    <name>INT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATALINK_1" lengthSupported="true" maximumLength="200" primitiveType="DATALINK" jdbcEnumType="70" javaClassName="java.net.URL" defaultLength="200" lengthUnit="BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATALINK</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" scaleSupported="true" precisionSupported="true" keyConstraintSupported="true" identitySupported="true" maximumPrecision="31" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal" defaultPrecision="5">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+    <name>NUM</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIME_1" keyConstraintSupported="true" primitiveType="TIME" jdbcEnumType="92" javaClassName="java.sql.Time">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>CURRENT TIME</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>CURRENT TIMESTAMP</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="254" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]" defaultLength="1" displayName="CHAR ({0}) FOR BIT DATA" displayNameSupported="true">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR FOR BIT DATA</name>
+    <name>CHARACTER FOR BIT DATA</name>
+    <name>CHAR () FOR BIT DATA</name>
+    <name>CHARACTER () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="32672" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]" defaultLength="1" displayName="VARCHAR ({0}) FOR BIT DATA" displayNameSupported="true">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR FOR BIT DATA</name>
+    <name>CHARACTER VARYING FOR BIT DATA</name>
+    <name>CHAR VARYING FOR BIT DATA</name>
+    <name>VARCHAR () FOR BIT DATA</name>
+    <name>CHARACTER VARYING () FOR BIT DATA</name>
+    <name>CHAR VARYING () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_2" primitiveType="BINARY_VARYING" jdbcEnumType="-4" javaClassName="byte[]">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARCHAR FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="XML_TYPE_1" primitiveType="XML_TYPE" jdbcEnumType="1111" orderingSupported="false" groupingSupported="false">
+    <name>XML</name>
+  </predefinedDataTypeDefinitions>
+  <tableSpaceDefinition typeSupported="true" extentSizeSupported="true" prefetchSizeSupported="true" managedBySupported="true" pageSizeSupported="true" bufferPoolSupported="true" maximumIdentifierLength="18">
+    <tableSpaceType>REGULAR</tableSpaceType>
+    <tableSpaceType>TEMPORARY</tableSpaceType>
+    <tableSpaceType>LARGE</tableSpaceType>
+  </tableSpaceDefinition>
+  <storedProcedureDefinition nullInputActionSupported="true" determininsticSupported="true" returnedNullSupported="true" parameterStyleSupported="true" maximumIdentifierLength="128">
+    <languageType>SQL</languageType>
+    <languageType>JAVA</languageType>
+    <languageType>C</languageType>
+    <languageType>COBOL</languageType>
+    <languageType>ASSEMBLY</languageType>
+    <languageType>PLI</languageType>
+    <functionLanguageType>SQL</functionLanguageType>
+    <functionLanguageType>JAVA</functionLanguageType>
+    <functionLanguageType>C</functionLanguageType>
+    <functionLanguageType>OLE</functionLanguageType>
+    <procedureType>PROCEDURE</procedureType>
+    <procedureType>FUNCTION</procedureType>
+  </storedProcedureDefinition>
+  <triggerDefinition granularitySupported="true" referencesClauseSupported="true" perColumnUpdateTriggerSupported="true" rowTriggerReferenceSupported="true" tableTriggerReferenceSupported="true" maximumIdentifierLength="128"/>
+  <columnDefinition identitySupported="true" identityStartValueSupported="true" identityIncrementSupported="true" identityMinimumSupported="true" identityMaximumSupported="true" identityCycleSupported="true" maximumIdentifierLength="128"/>
+  <constraintDefinition informationalConstraintSupported="true" clusteredPrimaryKeySupported="true" clusteredUniqueConstraintSupported="true" maximumPrimaryKeyIdentifierLength="128" maximumForeignKeyIdentifierLength="128" maximumCheckConstraintIdentifierLength="128">
+    <parentUpdateDRIRuleType>RESTRICT</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>RESTRICT</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>SET_NULL</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+    <checkOption>NONE</checkOption>
+    <checkOption>LOCAL</checkOption>
+    <checkOption>CASCADE</checkOption>
+  </constraintDefinition>
+  <indexDefinition clusteringSupported="true" includedColumnsSupported="true" maximumIdentifierLength="128"/>
+  <tableDefinition maximumIdentifierLength="128"/>
+  <sequenceDefinition predefinedDataTypeDefinitions="BIGINT_1 INTEGER_1 SMALLINT_1 DECIMAL_1" defaultDataTypeDefinition="INTEGER_1" typeEnumerationSupported="true" cacheSupported="true" orderSupported="true" noMaximumValueString="NO MAXVALUE" noMinimumValueString="NO MINVALUE" noCacheString="NO CACHE" cacheDefaultValue="20"/>
+  <udtDefinition distinctTypeSupported="true" structuredTypeSupported="true" maximumIdentifierLength="128"/>
+  <queryDefinition/>
+  <SQLSyntaxDefinition>
+    <keywords>ABS</keywords>
+    <keywords>ABSENT</keywords>
+    <keywords>ABSOLUTE</keywords>
+    <keywords>ACCESS</keywords>
+    <keywords>ACCORDING</keywords>
+    <keywords>ACTION</keywords>
+    <keywords>ACTIVATE</keywords>
+    <keywords>ADA</keywords>
+    <keywords>ADD</keywords>
+    <keywords>AFTER</keywords>
+    <keywords>ALIAS</keywords>
+    <keywords>ALL</keywords>
+    <keywords>ALLOCATE</keywords>
+    <keywords>ALLOW</keywords>
+    <keywords>ALTER</keywords>
+    <keywords>ALTERIN</keywords>
+    <keywords>ALWAYS</keywords>
+    <keywords>AND</keywords>
+    <keywords>ANY</keywords>
+    <keywords>APPEND</keywords>
+    <keywords>ARE</keywords>
+    <keywords>ARRAY</keywords>
+    <keywords>AS</keywords>
+    <keywords>ASC</keywords>
+    <keywords>ASCII</keywords>
+    <keywords>ASENSITIVE</keywords>
+    <keywords>ASSERTION</keywords>
+    <keywords>ASSOCIATE</keywords>
+    <keywords>ASUTIME</keywords>
+    <keywords>ASYMMETRIC</keywords>
+    <keywords>AT</keywords>
+    <keywords>ATOMIC</keywords>
+    <keywords>ATTRIBUTES</keywords>
+    <keywords>AUDIT</keywords>
+    <keywords>AUTHORIZATION</keywords>
+    <keywords>AUTOMATIC</keywords>
+    <keywords>AUX</keywords>
+    <keywords>AUXILIARY</keywords>
+    <keywords>AVG</keywords>
+    <keywords>BASE64</keywords>
+    <keywords>BEFORE</keywords>
+    <keywords>BEGIN</keywords>
+    <keywords>BETWEEN</keywords>
+    <keywords>BIGINT</keywords>
+    <keywords>BINARY</keywords>
+    <keywords>BIND</keywords>
+    <keywords>BINDADD</keywords>
+    <keywords>BIT</keywords>
+    <keywords>BIT_LENGTH</keywords>
+    <keywords>BLOB</keywords>
+    <keywords>BLOCKED</keywords>
+    <keywords>BOOLEAN</keywords>
+    <keywords>BOTH</keywords>
+    <keywords>BUFFERPOOL</keywords>
+    <keywords>BY</keywords>
+    <keywords>C</keywords>
+    <keywords>CACHE</keywords>
+    <keywords>CALL</keywords>
+    <keywords>CALLED</keywords>
+    <keywords>CAPTURE</keywords>
+    <keywords>CARDINALITY</keywords>
+    <keywords>CASCADE</keywords>
+    <keywords>CASCADED</keywords>
+    <keywords>CASE</keywords>
+    <keywords>CAST</keywords>
+    <keywords>CATALOG</keywords>
+    <keywords>CCSID</keywords>
+    <keywords>CEIL</keywords>
+    <keywords>CEILING</keywords>
+    <keywords>CHANGE</keywords>
+    <keywords>CHAR</keywords>
+    <keywords>CHAR_LENGTH</keywords>
+    <keywords>CHARACTER</keywords>
+    <keywords>CHARACTER_LENGTH</keywords>
+    <keywords>CHECK</keywords>
+    <keywords>CHECKED</keywords>
+    <keywords>CLIENT</keywords>
+    <keywords>CLOB</keywords>
+    <keywords>CLOSE</keywords>
+    <keywords>CLUSTER</keywords>
+    <keywords>COALESCE</keywords>
+    <keywords>COBOL</keywords>
+    <keywords>COLLATE</keywords>
+    <keywords>COLLATION</keywords>
+    <keywords>COLLECT</keywords>
+    <keywords>COLLECTION</keywords>
+    <keywords>COLLID</keywords>
+    <keywords>COLUMN</keywords>
+    <keywords>COLUMNS</keywords>
+    <keywords>COMMENT</keywords>
+    <keywords>COMMIT</keywords>
+    <keywords>COMMITTED</keywords>
+    <keywords>COMPARISONS</keywords>
+    <keywords>CONCAT</keywords>
+    <keywords>CONDITION</keywords>
+    <keywords>CONNECT</keywords>
+    <keywords>CONNECTION</keywords>
+    <keywords>CONSERVATIVE</keywords>
+    <keywords>CONSTRAINT</keywords>
+    <keywords>CONSTRAINTS</keywords>
+    <keywords>CONTAINS</keywords>
+    <keywords>CONTENT</keywords>
+    <keywords>CONTINUE</keywords>
+    <keywords>CONTROL</keywords>
+    <keywords>CONVERT</keywords>
+    <keywords>COPY</keywords>
+    <keywords>CORRELATION</keywords>
+    <keywords>CORR</keywords>
+    <keywords>CORRESPONDING</keywords>
+    <keywords>COUNT</keywords>
+    <keywords>COUNT_BIG</keywords>
+    <keywords>COVAR_POP</keywords>
+    <keywords>COVAR_SAMP</keywords>
+    <keywords>C++</keywords>
+    <keywords>CREATE</keywords>
+    <keywords>CREATEIN</keywords>
+    <keywords>CREATETAB</keywords>
+    <keywords>CROSS</keywords>
+    <keywords>CUBE</keywords>
+    <keywords>CUME_DIST</keywords>
+    <keywords>CURRENT</keywords>
+    <keywords>CURRENT_DATE</keywords>
+    <keywords>CURRENT_DEFAULT_TRANSFORM_GROUP</keywords>
+    <keywords>CURRENT_EXPLAIN_MODE</keywords>
+    <keywords>CURRENT_LC_CTYPE</keywords>
+    <keywords>CURRENT_PATH</keywords>
+    <keywords>CURRENT_ROLE</keywords>
+    <keywords>CURRENT_SCHEMA</keywords>
+    <keywords>CURRENT_SERVER</keywords>
+    <keywords>CURRENT_SQLID</keywords>
+    <keywords>CURRENT_TIME</keywords>
+    <keywords>CURRENT_TIMESTAMP</keywords>
+    <keywords>CURRENT_TIMEZONE</keywords>
+    <keywords>CURRENT_TRANSFORM_GROUP_FOR_TYPE</keywords>
+    <keywords>CURRENT_USER</keywords>
+    <keywords>CURSOR</keywords>
+    <keywords>CYCLE</keywords>
+    <keywords>DATA</keywords>
+    <keywords>DATABASE</keywords>
+    <keywords>DATALINK</keywords>
+    <keywords>DATAPARTITIONNAME</keywords>
+    <keywords>DATAPARTITIONNUM</keywords>
+    <keywords>DATE</keywords>
+    <keywords>DAY</keywords>
+    <keywords>DAYS</keywords>
+    <keywords>DB</keywords>
+    <keywords>DBADM</keywords>
+    <keywords>DBCLOB</keywords>
+    <keywords>DBINFO</keywords>
+    <keywords>DB2DARI</keywords>
+    <keywords>DB2GENRL</keywords>
+    <keywords>DB2GENERAL</keywords>
+    <keywords>DB2SQL</keywords>
+    <keywords>DBPARTITIONNAME</keywords>
+    <keywords>DBPARTITIONNUM</keywords>
+    <keywords>DEADLOCKS</keywords>
+    <keywords>DEALLOCATE</keywords>
+    <keywords>DEC</keywords>
+    <keywords>DECIMAL</keywords>
+    <keywords>DECLARE</keywords>
+    <keywords>DEFAULT</keywords>
+    <keywords>DEFAULTS</keywords>
+    <keywords>DEFINE</keywords>
+    <keywords>DEFINITION</keywords>
+    <keywords>DEGREE</keywords>
+    <keywords>DEFERRABLE</keywords>
+    <keywords>DEFERRED</keywords>
+    <keywords>DELETE</keywords>
+    <keywords>DENSE_RANK</keywords>
+    <keywords>DENSERANK</keywords>
+    <keywords>DEREF</keywords>
+    <keywords>DESC</keywords>
+    <keywords>DESCRIBE</keywords>
+    <keywords>DESCRIPTOR</keywords>
+    <keywords>DSSIZE</keywords>
+    <keywords>DETERMINISTIC</keywords>
+    <keywords>DIAGNOSTICS</keywords>
+    <keywords>DIMENSIONS</keywords>
+    <keywords>DISABLE</keywords>
+    <keywords>DISALLOW</keywords>
+    <keywords>DISCONNECT</keywords>
+    <keywords>DISTINCT</keywords>
+    <keywords>DOCUMENT</keywords>
+    <keywords>DOMAIN</keywords>
+    <keywords>DO</keywords>
+    <keywords>DOUBLE</keywords>
+    <keywords>DROP</keywords>
+    <keywords>DROPIN</keywords>
+    <keywords>DYNAMIC</keywords>
+    <keywords>EACH</keywords>
+    <keywords>EBCDIC</keywords>
+    <keywords>EDITPROC</keywords>
+    <keywords>ELEMENT</keywords>
+    <keywords>ELSE</keywords>
+    <keywords>ELSEIF</keywords>
+    <keywords>EMPTY</keywords>
+    <keywords>ENABLE</keywords>
+    <keywords>ENCODING</keywords>
+    <keywords>ENCRYPTION</keywords>
+    <keywords>END</keywords>
+    <keywords>END-EXEC</keywords>
+    <keywords>ENDING</keywords>
+    <keywords>ERASE</keywords>
+    <keywords>ESCAPE</keywords>
+    <keywords>EUR</keywords>
+    <keywords>EVENT</keywords>
+    <keywords>EVERY</keywords>
+    <keywords>EXACT</keywords>
+    <keywords>EXCEPT</keywords>
+    <keywords>EXCEPTION</keywords>
+    <keywords>EXCLUDE</keywords>
+    <keywords>EXCLUDING</keywords>
+    <keywords>EXCLUSIVE</keywords>
+    <keywords>EXEC</keywords>
+    <keywords>EXECUTE</keywords>
+    <keywords>EXISTS</keywords>
+    <keywords>EXIT</keywords>
+    <keywords>EXP</keywords>
+    <keywords>EXPLAIN</keywords>
+    <keywords>EXTENSION</keywords>
+    <keywords>EXTERNAL</keywords>
+    <keywords>EXTRACT</keywords>
+    <keywords>FALSE</keywords>
+    <keywords>FEDERATED</keywords>
+    <keywords>FENCED</keywords>
+    <keywords>FETCH</keywords>
+    <keywords>FIELDPROC</keywords>
+    <keywords>FILE</keywords>
+    <keywords>FILTER</keywords>
+    <keywords>FINAL</keywords>
+    <keywords>FIRST</keywords>
+    <keywords>FLOAT</keywords>
+    <keywords>FLOOR</keywords>
+    <keywords>FLUSH</keywords>
+    <keywords>FOLLOWING</keywords>
+    <keywords>FOR</keywords>
+    <keywords>FORCE</keywords>
+    <keywords>FOREIGN</keywords>
+    <keywords>FORTRAN</keywords>
+    <keywords>FOUND</keywords>
+    <keywords>FREE</keywords>
+    <keywords>FROM</keywords>
+    <keywords>FS</keywords>
+    <keywords>FULL</keywords>
+    <keywords>FUNCTION</keywords>
+    <keywords>FUSION</keywords>
+    <keywords>G</keywords>
+    <keywords>GENERAL</keywords>
+    <keywords>GENERATED</keywords>
+    <keywords>GET</keywords>
+    <keywords>GLOBAL</keywords>
+    <keywords>GO</keywords>
+    <keywords>GOTO</keywords>
+    <keywords>GRANT</keywords>
+    <keywords>GRAPHIC</keywords>
+    <keywords>GROUP</keywords>
+    <keywords>GROUPING</keywords>
+    <keywords>HANDLER</keywords>
+    <keywords>HASH</keywords>
+    <keywords>HASHED_VALUE</keywords>
+    <keywords>HAVING</keywords>
+    <keywords>HINT</keywords>
+    <keywords>HOLD</keywords>
+    <keywords>HOUR</keywords>
+    <keywords>HOURS</keywords>
+    <keywords>HEX</keywords>
+    <keywords>IDENTITY</keywords>
+    <keywords>IF</keywords>
+    <keywords>IMMEDIATE</keywords>
+    <keywords>IMPLICIT_SCHEMA</keywords>
+    <keywords>IN</keywords>
+    <keywords>INCLUDE</keywords>
+    <keywords>INCLUDING</keywords>
+    <keywords>INCLUSIVE</keywords>
+    <keywords>INCREMENT</keywords>
+    <keywords>INDEX</keywords>
+    <keywords>INDICATOR</keywords>
+    <keywords>INHERIT</keywords>
+    <keywords>INITIALLY</keywords>
+    <keywords>INITIAL_INSTS</keywords>
+    <keywords>INITIAL_IOS</keywords>
+    <keywords>INNER</keywords>
+    <keywords>INOUT</keywords>
+    <keywords>INPUT</keywords>
+    <keywords>INSENSITIVE</keywords>
+    <keywords>INSERT</keywords>
+    <keywords>INSTEAD</keywords>
+    <keywords>INSTS_PER_ARGBYTE</keywords>
+    <keywords>INSTS_PER_INVOC</keywords>
+    <keywords>INT</keywords>
+    <keywords>INTEGER</keywords>
+    <keywords>INTEGRITY</keywords>
+    <keywords>INTERSECT</keywords>
+    <keywords>INTERSECTION</keywords>
+    <keywords>INTERVAL</keywords>
+    <keywords>INTO</keywords>
+    <keywords>IOS_PER_ARGBYTE</keywords>
+    <keywords>IOS_PER_INVOC</keywords>
+    <keywords>IS</keywords>
+    <keywords>ISO</keywords>
+    <keywords>ISOBID</keywords>
+    <keywords>ISOLATION</keywords>
+    <keywords>ITERATE</keywords>
+    <keywords>JAR</keywords>
+    <keywords>JAVA</keywords>
+    <keywords>JIS</keywords>
+    <keywords>JOIN</keywords>
+    <keywords>K</keywords>
+    <keywords>KEY</keywords>
+    <keywords>LABEL</keywords>
+    <keywords>LANGUAGE</keywords>
+    <keywords>LARGE</keywords>
+    <keywords>LAST</keywords>
+    <keywords>LATERAL</keywords>
+    <keywords>LC_CTYPE</keywords>
+    <keywords>LEADING</keywords>
+    <keywords>LEAVE</keywords>
+    <keywords>LEFT</keywords>
+    <keywords>LENGTH</keywords>
+    <keywords>LEVEL</keywords>
+    <keywords>LIKE</keywords>
+    <keywords>LIMIT</keywords>
+    <keywords>LINK</keywords>
+    <keywords>LINKTYPE</keywords>
+    <keywords>LN</keywords>
+    <keywords>LOAD</keywords>
+    <keywords>LOCAL</keywords>
+    <keywords>LOCALDATE</keywords>
+    <keywords>LOCALE</keywords>
+    <keywords>LOCALTIME</keywords>
+    <keywords>LOCALTIMESTAMP</keywords>
+    <keywords>LOCATOR</keywords>
+    <keywords>LOCATORS</keywords>
+    <keywords>LOCK</keywords>
+    <keywords>LOCKMAX</keywords>
+    <keywords>LOCKS</keywords>
+    <keywords>LOCKSIZE</keywords>
+    <keywords>LONG</keywords>
+    <keywords>LONGVAR</keywords>
+    <keywords>LOOP</keywords>
+    <keywords>LOWER</keywords>
+    <keywords>M</keywords>
+    <keywords>MAINTAINED</keywords>
+    <keywords>MAPPING</keywords>
+    <keywords>MATCH</keywords>
+    <keywords>MATERIALIZED</keywords>
+    <keywords>MAX</keywords>
+    <keywords>MAXVALUE</keywords>
+    <keywords>MEMBER</keywords>
+    <keywords>MERGE</keywords>
+    <keywords>METHOD</keywords>
+    <keywords>MICROSECOND</keywords>
+    <keywords>MICROSECONDS</keywords>
+    <keywords>MIN</keywords>
+    <keywords>MINUTE</keywords>
+    <keywords>MINUTES</keywords>
+    <keywords>MINVALUE</keywords>
+    <keywords>MOD</keywords>
+    <keywords>MODE</keywords>
+    <keywords>MODIFIES</keywords>
+    <keywords>MODULE</keywords>
+    <keywords>MONITOR</keywords>
+    <keywords>MONTH</keywords>
+    <keywords>MONTHS</keywords>
+    <keywords>MULTISET</keywords>
+    <keywords>NAMED</keywords>
+    <keywords>NAMES</keywords>
+    <keywords>NAMESPACE</keywords>
+    <keywords>NATIONAL</keywords>
+    <keywords>NATURAL</keywords>
+    <keywords>NCHAR</keywords>
+    <keywords>NCLOB</keywords>
+    <keywords>NEW</keywords>
+    <keywords>NEW_TABLE</keywords>
+    <keywords>NEXT</keywords>
+    <keywords>NEXTVAL</keywords>
+    <keywords>NICKNAME</keywords>
+    <keywords>NIL</keywords>
+    <keywords>NO</keywords>
+    <keywords>NOCACHE</keywords>
+    <keywords>NOCYCLE</keywords>
+    <keywords>NODE</keywords>
+    <keywords>NODENAME</keywords>
+    <keywords>NODENUMBER</keywords>
+    <keywords>NOMAXVALUE</keywords>
+    <keywords>NOMINVALUE</keywords>
+    <keywords>NONE</keywords>
+    <keywords>NOORDER</keywords>
+    <keywords>NORMALIZE</keywords>
+    <keywords>NORMALIZED</keywords>
+    <keywords>NOT</keywords>
+    <keywords>NULL</keywords>
+    <keywords>NULLABLE</keywords>
+    <keywords>NULLIF</keywords>
+    <keywords>NULLS</keywords>
+    <keywords>NUMBER</keywords>
+    <keywords>NUMERIC</keywords>
+    <keywords>NUMPARTS</keywords>
+    <keywords>OBID</keywords>
+    <keywords>OBJECT</keywords>
+    <keywords>OCTET_LENGTH</keywords>
+    <keywords>OF</keywords>
+    <keywords>OFF</keywords>
+    <keywords>OLD</keywords>
+    <keywords>OLD_TABLE</keywords>
+    <keywords>OLE</keywords>
+    <keywords>OLEDB</keywords>
+    <keywords>ON</keywords>
+    <keywords>ONCE</keywords>
+    <keywords>ONLINE</keywords>
+    <keywords>ONLY</keywords>
+    <keywords>OPEN</keywords>
+    <keywords>OPTIMIZATION</keywords>
+    <keywords>OPTIMIZE</keywords>
+    <keywords>OPTION</keywords>
+    <keywords>OR</keywords>
+    <keywords>ORDER</keywords>
+    <keywords>OUT</keywords>
+    <keywords>OUTER</keywords>
+    <keywords>OUTPUT</keywords>
+    <keywords>OVER</keywords>
+    <keywords>OVERLAY</keywords>
+    <keywords>OVERLAPS</keywords>
+    <keywords>OVERRIDING</keywords>
+    <keywords>PACKAGE</keywords>
+    <keywords>PAD</keywords>
+    <keywords>PADDED</keywords>
+    <keywords>PAGESIZE</keywords>
+    <keywords>PART</keywords>
+    <keywords>PARTIAL</keywords>
+    <keywords>PARTITIONED</keywords>
+    <keywords>PARTITIONING</keywords>
+    <keywords>PARTITIONS</keywords>
+    <keywords>PARALLEL</keywords>
+    <keywords>PARAMETER</keywords>
+    <keywords>PASCAL</keywords>
+    <keywords>PASSING</keywords>
+    <keywords>PASSTHRU</keywords>
+    <keywords>PASSWORD</keywords>
+    <keywords>PATH</keywords>
+    <keywords>PARTITION</keywords>
+    <keywords>PCTFREE</keywords>
+    <keywords>PERCENT_ARGBYTES</keywords>
+    <keywords>PERCENT_RANK</keywords>
+    <keywords>PERCENTILE_CONT</keywords>
+    <keywords>PERCENTILE_DISC</keywords>
+    <keywords>PERMISSION</keywords>
+    <keywords>PIECESIZE</keywords>
+    <keywords>PIPE</keywords>
+    <keywords>PLAN</keywords>
+    <keywords>PLI</keywords>
+    <keywords>POSITION</keywords>
+    <keywords>POWER</keywords>
+    <keywords>PRECEDING</keywords>
+    <keywords>PRECISION</keywords>
+    <keywords>PREPARE</keywords>
+    <keywords>PRESERVE</keywords>
+    <keywords>PREVVAL</keywords>
+    <keywords>PRIMARY</keywords>
+    <keywords>PRIOR</keywords>
+    <keywords>PRIQTY</keywords>
+    <keywords>PRIVILEGES</keywords>
+    <keywords>PROCEDURE</keywords>
+    <keywords>PROGRAM</keywords>
+    <keywords>PSID</keywords>
+    <keywords>PUBLIC</keywords>
+    <keywords>QUERY</keywords>
+    <keywords>QUERYNO</keywords>
+    <keywords>RANGE</keywords>
+    <keywords>READ</keywords>
+    <keywords>READS</keywords>
+    <keywords>REAL</keywords>
+    <keywords>RECOMMEND</keywords>
+    <keywords>RECOVERY</keywords>
+    <keywords>RECURSIVE</keywords>
+    <keywords>REF</keywords>
+    <keywords>REFERENCE</keywords>
+    <keywords>REFERENCES</keywords>
+    <keywords>REFERENCING</keywords>
+    <keywords>REFRESH</keywords>
+    <keywords>REGISTERS</keywords>
+    <keywords>REGR_AVGX</keywords>
+    <keywords>REGR_AVGY</keywords>
+    <keywords>REGR_COUNT</keywords>
+    <keywords>REGR_INTERCEPT</keywords>
+    <keywords>REGR_R2</keywords>
+    <keywords>REGR_SLOPE</keywords>
+    <keywords>REGR_SXX</keywords>
+    <keywords>REGR_SXY</keywords>
+    <keywords>REGR_SYY</keywords>
+    <keywords>RELATIVE</keywords>
+    <keywords>RELEASE</keywords>
+    <keywords>RENAME</keywords>
+    <keywords>REPEATABLE</keywords>
+    <keywords>REPEAT</keywords>
+    <keywords>REPLACE</keywords>
+    <keywords>REPLICATED</keywords>
+    <keywords>RESET</keywords>
+    <keywords>RESIGNAL</keywords>
+    <keywords>RESOLVE</keywords>
+    <keywords>RESTART</keywords>
+    <keywords>RESTORE</keywords>
+    <keywords>RESTRICT</keywords>
+    <keywords>RESULT</keywords>
+    <keywords>RESULT_SET_LOCATOR</keywords>
+    <keywords>RETAIN</keywords>
+    <keywords>RETURN</keywords>
+    <keywords>RETURNING</keywords>
+    <keywords>RETURNS</keywords>
+    <keywords>RETURN_STATUS</keywords>
+    <keywords>REVOKE</keywords>
+    <keywords>RIGHT</keywords>
+    <keywords>ROLLBACK</keywords>
+    <keywords>ROLLUP</keywords>
+    <keywords>ROUTINE</keywords>
+    <keywords>ROW</keywords>
+    <keywords>ROWID</keywords>
+    <keywords>ROWNUMBER</keywords>
+    <keywords>ROWS</keywords>
+    <keywords>ROWSET</keywords>
+    <keywords>ROW_COUNT</keywords>
+    <keywords>RRN</keywords>
+    <keywords>RUN</keywords>
+    <keywords>S</keywords>
+    <keywords>SAVEPOINT</keywords>
+    <keywords>SBCS</keywords>
+    <keywords>SCALE</keywords>
+    <keywords>SCHEMA</keywords>
+    <keywords>SCOPE</keywords>
+    <keywords>SCRATCHPAD</keywords>
+    <keywords>SCROLL</keywords>
+    <keywords>SEARCH</keywords>
+    <keywords>SECOND</keywords>
+    <keywords>SECONDS</keywords>
+    <keywords>SECQTY</keywords>
+    <keywords>SECTION</keywords>
+    <keywords>SECURITY</keywords>
+    <keywords>SELECT</keywords>
+    <keywords>SELECTIVITY</keywords>
+    <keywords>SELF</keywords>
+    <keywords>SENSITIVE</keywords>
+    <keywords>SEQUENCE</keywords>
+    <keywords>SERIALIZABLE</keywords>
+    <keywords>SERVER</keywords>
+    <keywords>SESSION</keywords>
+    <keywords>SESSION_USER</keywords>
+    <keywords>SET</keywords>
+    <keywords>SETS</keywords>
+    <keywords>SHARE</keywords>
+    <keywords>SIGNAL</keywords>
+    <keywords>SIMILAR</keywords>
+    <keywords>SIMPLE</keywords>
+    <keywords>SIZE</keywords>
+    <keywords>SMALLINT</keywords>
+    <keywords>SNAPSHOT</keywords>
+    <keywords>SOME</keywords>
+    <keywords>SOURCE</keywords>
+    <keywords>SPACE</keywords>
+    <keywords>SPECIFIC</keywords>
+    <keywords>SPECIFICTYPE</keywords>
+    <keywords>SQL</keywords>
+    <keywords>SQLCODE</keywords>
+    <keywords>SQLERROR</keywords>
+    <keywords>SQLEXCEPTION</keywords>
+    <keywords>SQLWARNING</keywords>
+    <keywords>SQLID</keywords>
+    <keywords>SQLSTATE</keywords>
+    <keywords>SQRT</keywords>
+    <keywords>STACKED</keywords>
+    <keywords>STANDALONE</keywords>
+    <keywords>STANDARD</keywords>
+    <keywords>START</keywords>
+    <keywords>STARTING</keywords>
+    <keywords>STATE</keywords>
+    <keywords>STATEMENT</keywords>
+    <keywords>STATIC</keywords>
+    <keywords>STATISTICS</keywords>
+    <keywords>STAY</keywords>
+    <keywords>STDDEV_POP</keywords>
+    <keywords>STDDEV_SAMP</keywords>
+    <keywords>STRIP</keywords>
+    <keywords>STOGROUP</keywords>
+    <keywords>STORAGE</keywords>
+    <keywords>STORES</keywords>
+    <keywords>STYLE</keywords>
+    <keywords>SUBMULTISET</keywords>
+    <keywords>SUBSTRING</keywords>
+    <keywords>SUM</keywords>
+    <keywords>SUMMARY</keywords>
+    <keywords>SWITCH</keywords>
+    <keywords>SYMMETRIC</keywords>
+    <keywords>SYNONYM</keywords>
+    <keywords>SYSFUN</keywords>
+    <keywords>SYSIBM</keywords>
+    <keywords>SYSPROC</keywords>
+    <keywords>SYSTEM</keywords>
+    <keywords>SYSTEM_USER</keywords>
+    <keywords>TABLE</keywords>
+    <keywords>TABLES</keywords>
+    <keywords>TABLE_NAME</keywords>
+    <keywords>TABLESPACE</keywords>
+    <keywords>TABLESPACES</keywords>
+    <keywords>TEMPORARY</keywords>
+    <keywords>THEN</keywords>
+    <keywords>THREADSAFE</keywords>
+    <keywords>TIME</keywords>
+    <keywords>TIMESTAMP</keywords>
+    <keywords>TIMEZONE</keywords>
+    <keywords>TIMEZONE_HOUR</keywords>
+    <keywords>TIMEZONE_MINUTE</keywords>
+    <keywords>TO</keywords>
+    <keywords>TRAILING</keywords>
+    <keywords>TRANSACTION</keywords>
+    <keywords>TRANSFORM</keywords>
+    <keywords>TRANSLATE</keywords>
+    <keywords>TRANSLATION</keywords>
+    <keywords>TREAT</keywords>
+    <keywords>TRIGGER</keywords>
+    <keywords>TRIM</keywords>
+    <keywords>TRUE</keywords>
+    <keywords>TYPE</keywords>
+    <keywords>UESCAPE</keywords>
+    <keywords>UNBOUNDED</keywords>
+    <keywords>UNCOMMITTED</keywords>
+    <keywords>UNDER</keywords>
+    <keywords>UNDO</keywords>
+    <keywords>UNICODE</keywords>
+    <keywords>UNION</keywords>
+    <keywords>UNIQUE</keywords>
+    <keywords>UNKNOWN</keywords>
+    <keywords>UNNEST</keywords>
+    <keywords>UNTIL</keywords>
+    <keywords>UNTYPED</keywords>
+    <keywords>UPDATE</keywords>
+    <keywords>UPPER</keywords>
+    <keywords>URL</keywords>
+    <keywords>URI</keywords>
+    <keywords>USA</keywords>
+    <keywords>USE</keywords>
+    <keywords>USAGE</keywords>
+    <keywords>USER</keywords>
+    <keywords>USING</keywords>
+    <keywords>VALID</keywords>
+    <keywords>VALIDPROC</keywords>
+    <keywords>VALUE</keywords>
+    <keywords>VALUES</keywords>
+    <keywords>VARCHAR</keywords>
+    <keywords>VARGRAPHIC</keywords>
+    <keywords>VARIABLE</keywords>
+    <keywords>VARIANT</keywords>
+    <keywords>VARYING</keywords>
+    <keywords>VAR_POP</keywords>
+    <keywords>VAR_SAMP</keywords>
+    <keywords>VCAT</keywords>
+    <keywords>VERSION</keywords>
+    <keywords>VIEW</keywords>
+    <keywords>VOLATILE</keywords>
+    <keywords>VOLUMES</keywords>
+    <keywords>WHEN</keywords>
+    <keywords>WHENEVER</keywords>
+    <keywords>WHERE</keywords>
+    <keywords>WHILE</keywords>
+    <keywords>WHITESPACE</keywords>
+    <keywords>WIDTH_BUCKET</keywords>
+    <keywords>WINDOW</keywords>
+    <keywords>WITH</keywords>
+    <keywords>WITHIN</keywords>
+    <keywords>WITHOUT</keywords>
+    <keywords>WLM</keywords>
+    <keywords>WORK</keywords>
+    <keywords>WRAPPER</keywords>
+    <keywords>WRITE</keywords>
+    <keywords>XML</keywords>
+    <keywords>XMLAGG</keywords>
+    <keywords>XMLBINARY</keywords>
+    <keywords>XMLCAST</keywords>
+    <keywords>XMLELEMENT</keywords>
+    <keywords>XMLEXISTS</keywords>
+    <keywords>XMLATTRIBUTES</keywords>
+    <keywords>XMLCOMMENT</keywords>
+    <keywords>XMLCONCAT</keywords>
+    <keywords>XMLDECLARATION</keywords>
+    <keywords>XMLDOCUMENT</keywords>
+    <keywords>XMLELEMENT</keywords>
+    <keywords>XMLFOREST</keywords>
+    <keywords>XMLITERATE</keywords>
+    <keywords>XMLNAMESPACES</keywords>
+    <keywords>XMLPARSE</keywords>
+    <keywords>XMLPI</keywords>
+    <keywords>XMLQUERY</keywords>
+    <keywords>XMLSCHEMA</keywords>
+    <keywords>XMLSERIALIZE</keywords>
+    <keywords>XMLTABLE</keywords>
+    <keywords>XMLTEXT</keywords>
+    <keywords>XMLVALIDATE</keywords>
+    <keywords>XMLXSROBJECTID</keywords>
+    <keywords>YEAR</keywords>
+    <keywords>YEARS</keywords>
+    <keywords>YES</keywords>
+    <keywords>ZONE</keywords>
+    <operators>&lt;</operators>
+    <operators>&quot;</operators>
+    <operators>%</operators>
+    <operators>&amp;</operators>
+    <operators>''''</operators>
+    <operators>(</operators>
+    <operators>)</operators>
+    <operators>*</operators>
+    <operators>+</operators>
+    <operators>,</operators>
+    <operators>-</operators>
+    <operators>.</operators>
+    <operators>/</operators>
+    <operators>:</operators>
+    <operators>;</operators>
+    <operators>=</operators>
+    <operators>?</operators>
+    <operators>[</operators>
+    <operators>]</operators>
+    <operators>_</operators>
+    <operators>'|'</operators>
+    <operators>,=</operators>
+    <operators>&lt;=</operators>
+    <operators>||</operators>
+    <operators>..</operators>
+    <operators>'-,'</operators>
+    <operators>!</operators>
+    <operators>~</operators>
+    <operators>:=</operators>
+    <operators>{</operators>
+    <operators>}</operators>
+    <operators>(+)</operators>
+  </SQLSyntaxDefinition>
+  <nicknameDefinition constraintSupported="true" indexSupported="true" maximumIdentifierLength="128"/>
+  <schemaDefinition maximumIdentifierLength="128"/>
+  <viewDefinition maximumIdentifierLength="128"/>
+  <privilegedElementDefinitions name="Database">
+    <privilegeDefinitions name="BINDADD"/>
+    <privilegeDefinitions name="CONNECT"/>
+    <privilegeDefinitions name="CREATETAB"/>
+    <privilegeDefinitions name="CREATE_EXTERNAL_ROUTINE"/>
+    <privilegeDefinitions name="CREATE_NOT_FENCED_ROUTINE"/>
+    <privilegeDefinitions name="IMPLICIT_SCHEMA"/>
+    <privilegeDefinitions name="DBADM"/>
+    <privilegeDefinitions name="LOAD"/>
+    <privilegeDefinitions name="QUIESCE_CONNECT"/>
+    <privilegeDefinitions name="SECADM"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Schema">
+    <privilegeDefinitions name="ALTERIN"/>
+    <privilegeDefinitions name="CREATEIN"/>
+    <privilegeDefinitions name="DROPIN"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="PersistentTable">
+    <privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions actionElementDefinitions="COLUMN_1" name="REFERENCES"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions actionElementDefinitions="COLUMN_1" name="UPDATE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="ViewTable">
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions actionElementDefinitions="COLUMN_1" name="UPDATE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Nickname">
+    <privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="REFERENCES"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions name="UPDATE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions xmi:id="COLUMN_1" name="Column"/>
+  <privilegedElementDefinitions name="MaterializedQueryTable">
+    <privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions actionElementDefinitions="COLUMN_1" name="REFERENCES"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions actionElementDefinitions="COLUMN_1" name="UPDATE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Routine">
+    <privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Sequence">
+    <privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="USAGE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Index">
+    <privilegeDefinitions name="CONTROL"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Tablespace">
+    <privilegeDefinitions name="USE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Package">
+    <privilegeDefinitions name="BIND"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <constructedDataTypeDefinition arrayDatatypeSupported="true"/>
+</DBDefinition:DatabaseVendorDefinition>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/runtime/vendors/DB2 UDB_9.7/DB2 UDB_9.7.xmi b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/runtime/vendors/DB2 UDB_9.7/DB2 UDB_9.7.xmi
new file mode 100644
index 0000000..d1ed112
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/runtime/vendors/DB2 UDB_9.7/DB2 UDB_9.7.xmi
@@ -0,0 +1,1410 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="DB2 UDB" version="V9.7" maximumIdentifierLength="8" viewTriggerSupported="true" maximumCommentLength="64" sequenceSupported="true" mQTSupported="true" aliasSupported="true" userDefinedTypeSupported="true" SQLStatementSupported="true" nicknameSupported="true" xmlSupported="true" packageSupported="true" roleSupported="true" groupSupported="true" userSupported="true" roleAuthorizationSupported="true" constructedDataTypeSupported="true" mQTIndexSupported="true">
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="long">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIGINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_1" lengthSupported="true" maximumLength="2147483647" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob" defaultLength="1048576" lengthUnit="BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="127" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String" defaultLength="1" lengthUnit="DOUBLE_BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>GRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="16336" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String" defaultLength="32" lengthUnit="DOUBLE_BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARGRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_2" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARGRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="254" jdbcEnumType="1" javaClassName="java.lang.String" defaultLength="1">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR</name>
+    <name>CHARACTER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" lengthSupported="true" maximumLength="2147483647" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob" defaultLength="1048576" lengthUnit="BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CLOB</name>
+    <name>CHARACTER LARGE OBJECT</name>
+    <name>CHAR LARGE OBJECT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_LARGE_OBJECT_1" lengthSupported="true" maximumLength="1073741823" primitiveType="NATIONAL_CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob" defaultLength="1048576" lengthUnit="DOUBLE_BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DBCLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="32672" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String" defaultLength="32">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR</name>
+    <name>CHARACTER VARYING</name>
+    <name>CHAR VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_2" primitiveType="CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>CURRENT DATE</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" scaleSupported="true" precisionSupported="true" keyConstraintSupported="true" identitySupported="true" maximumPrecision="31" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal" defaultPrecision="5">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_2" precisionSupported="true" keyConstraintSupported="true" maximumPrecision="34" primitiveType="FLOAT" jdbcEnumType="3" javaClassName="java.math.BigDecimal" defaultPrecision="34">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECFLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE</name>
+    <name>DOUBLE PRECISION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" precisionSupported="true" keyConstraintSupported="true" maximumPrecision="53" primitiveType="FLOAT" jdbcEnumType="6" javaClassName="double" defaultPrecision="53" cutoffPrecision="25">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INTEGER</name>
+    <name>INT</name>
+    <name>BINARY_INTEGER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATALINK_1" lengthSupported="true" maximumLength="200" primitiveType="DATALINK" jdbcEnumType="70" javaClassName="java.net.URL" defaultLength="200" lengthUnit="BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATALINK</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" scaleSupported="true" precisionSupported="true" keyConstraintSupported="true" identitySupported="true" maximumPrecision="31" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal" defaultPrecision="5">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+    <name>NUM</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIME_1" keyConstraintSupported="true" primitiveType="TIME" jdbcEnumType="92" javaClassName="java.sql.Time">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>CURRENT TIME</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" precisionSupported="true" keyConstraintSupported="true" maximumPrecision="12" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp" defaultPrecision="6">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>CURRENT TIMESTAMP</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="254" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]" defaultLength="1" displayName="CHAR ({0}) FOR BIT DATA" displayNameSupported="true">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR FOR BIT DATA</name>
+    <name>CHARACTER FOR BIT DATA</name>
+    <name>CHAR () FOR BIT DATA</name>
+    <name>CHARACTER () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="32672" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]" defaultLength="1" displayName="VARCHAR ({0}) FOR BIT DATA" displayNameSupported="true">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR FOR BIT DATA</name>
+    <name>CHARACTER VARYING FOR BIT DATA</name>
+    <name>CHAR VARYING FOR BIT DATA</name>
+    <name>VARCHAR () FOR BIT DATA</name>
+    <name>CHARACTER VARYING () FOR BIT DATA</name>
+    <name>CHAR VARYING () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_2" primitiveType="BINARY_VARYING" jdbcEnumType="-4" javaClassName="byte[]">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARCHAR FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="XML_TYPE_1" primitiveType="XML_TYPE" jdbcEnumType="1111" orderingSupported="false" groupingSupported="false">
+    <name>XML</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions scaleSupported="true" precisionSupported="true" keyConstraintSupported="true" identitySupported="true" defaultSupported="false" maximumPrecision="31" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMBER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions lengthSupported="true" keyConstraintSupported="true" defaultSupported="false" maximumLength="32672" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String" defaultLength="4096">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR2</name>
+  </predefinedDataTypeDefinitions>
+  <tableSpaceDefinition typeSupported="true" extentSizeSupported="true" prefetchSizeSupported="true" managedBySupported="true" pageSizeSupported="true" bufferPoolSupported="true" maximumIdentifierLength="18">
+    <tableSpaceType>REGULAR</tableSpaceType>
+    <tableSpaceType>TEMPORARY</tableSpaceType>
+    <tableSpaceType>LARGE</tableSpaceType>
+  </tableSpaceDefinition>
+  <storedProcedureDefinition nullInputActionSupported="true" determininsticSupported="true" returnedNullSupported="true" parameterStyleSupported="true" maximumIdentifierLength="128">
+    <predefinedDataTypeDefinitions xmi:id="BOOLEAN_1" primitiveType="BOOLEAN" jdbcEnumType="-7" javaClassName="boolean">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>BOOLEAN</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="CURSOR_1" primitiveType="DATALINK" jdbcEnumType="-100008">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>CURSOR</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="INTEGER_2" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>PLS_INTEGER</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="INTEGER_3" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>BINARY_INTEGER</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="XML_TYPE_2" primitiveType="XML_TYPE" jdbcEnumType="1111" javaClassName="java.sql.Clob">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>XMLTYPE</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="BINARY_2" lengthSupported="true" maximumLength="32767" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]" defaultLength="32767">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>RAW</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_3" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>LONG RAW</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_LARGE_OBJECT_2" primitiveType="NATIONAL_CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>NCLOB</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_2" lengthSupported="true" maximumLength="2000" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String" defaultLength="127">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>NCHAR</name>
+      <name>NATIONAL CHARACTER</name>
+      <name>NATIONAL CHAR</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_3" lengthSupported="true" maximumLength="4000" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String" defaultLength="2048">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>NVARCHAR2</name>
+      <name>NATIONAL CHARACTER VARYING</name>
+      <name>NATIONAL CHAR VARYING</name>
+      <name>NCHAR VARYING</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="INTEGER_4" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>NATURAL</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="CURSOR_2" primitiveType="DATALINK" jdbcEnumType="-100008">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>SYS_REFCURSOR</name>
+      <name>REFCURSOR</name>
+      <name>REF CURSOR</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_3" lengthSupported="true" bitDataSupported="true" maximumLength="4000" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String" defaultLength="1" displayName="STRING({0})" displayNameSupported="true" lengthSemanticSupported="true">
+      <defaultValueTypes>USER</defaultValueTypes>
+      <defaultValueTypes>UID</defaultValueTypes>
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>STRING</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="INTEGER_5" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>POSITIVE</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="INTEGER_6" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>SIGNTYPE</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <languageType>SQL</languageType>
+    <languageType>JAVA</languageType>
+    <languageType>C</languageType>
+    <languageType>COBOL</languageType>
+    <languageType>ASSEMBLY</languageType>
+    <languageType>PLI</languageType>
+    <functionLanguageType>SQL</functionLanguageType>
+    <functionLanguageType>JAVA</functionLanguageType>
+    <functionLanguageType>C</functionLanguageType>
+    <functionLanguageType>OLE</functionLanguageType>
+    <procedureType>PROCEDURE</procedureType>
+    <procedureType>FUNCTION</procedureType>
+  </storedProcedureDefinition>
+  <triggerDefinition granularitySupported="true" referencesClauseSupported="true" perColumnUpdateTriggerSupported="true" rowTriggerReferenceSupported="true" tableTriggerReferenceSupported="true" maximumIdentifierLength="128"/>
+  <columnDefinition identitySupported="true" identityStartValueSupported="true" identityIncrementSupported="true" identityMinimumSupported="true" identityMaximumSupported="true" identityCycleSupported="true" maximumIdentifierLength="128"/>
+  <constraintDefinition informationalConstraintSupported="true" clusteredPrimaryKeySupported="true" clusteredUniqueConstraintSupported="true" maximumPrimaryKeyIdentifierLength="128" maximumForeignKeyIdentifierLength="128" maximumCheckConstraintIdentifierLength="128">
+    <parentUpdateDRIRuleType>RESTRICT</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>RESTRICT</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>SET_NULL</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+    <checkOption>NONE</checkOption>
+    <checkOption>LOCAL</checkOption>
+    <checkOption>CASCADE</checkOption>
+  </constraintDefinition>
+  <indexDefinition clusteringSupported="true" includedColumnsSupported="true" maximumIdentifierLength="128"/>
+  <tableDefinition maximumIdentifierLength="128"/>
+  <sequenceDefinition predefinedDataTypeDefinitions="BIGINT_1 INTEGER_1 SMALLINT_1 DECIMAL_1" defaultDataTypeDefinition="INTEGER_1" typeEnumerationSupported="true" cacheSupported="true" orderSupported="true" noMaximumValueString="NO MAXVALUE" noMinimumValueString="NO MINVALUE" noCacheString="NO CACHE" cacheDefaultValue="20"/>
+  <udtDefinition distinctTypeSupported="true" structuredTypeSupported="true" maximumIdentifierLength="128"/>
+  <queryDefinition/>
+  <SQLSyntaxDefinition>
+    <keywords>ACCESS</keywords>
+    <keywords>ACCESSCTRL</keywords>
+    <keywords>ACCORDING</keywords>
+    <keywords>ACCTNG</keywords>
+    <keywords>ACTION</keywords>
+    <keywords>ACTIVATE</keywords>
+    <keywords>ACTIVITIES</keywords>
+    <keywords>ACTIVITY</keywords>
+    <keywords>ACTIVITYSTMT</keywords>
+    <keywords>ACTIVITYTOTALTIME</keywords>
+    <keywords>ACTIVITYVALS</keywords>
+    <keywords>ADD</keywords>
+    <keywords>ADDRESS</keywords>
+    <keywords>ADMIN</keywords>
+    <keywords>ADMINISTRATION</keywords>
+    <keywords>AFTER</keywords>
+    <keywords>AGE</keywords>
+    <keywords>AGENT</keywords>
+    <keywords>AGGREGATE</keywords>
+    <keywords>AGGSQLTEMPSPACE</keywords>
+    <keywords>ALIAS</keywords>
+    <keywords>ALL</keywords>
+    <keywords>ALLOCATE</keywords>
+    <keywords>ALLOW</keywords>
+    <keywords>ALTER</keywords>
+    <keywords>ALTERIN</keywords>
+    <keywords>ALWAYS</keywords>
+    <keywords>ANCHOR</keywords>
+    <keywords>AND</keywords>
+    <keywords>ANY</keywords>
+    <keywords>APPEND</keywords>
+    <keywords>APPLICATION</keywords>
+    <keywords>APPLNAME</keywords>
+    <keywords>APPL_ID</keywords>
+    <keywords>APPL_NAME</keywords>
+    <keywords>APREUSE</keywords>
+    <keywords>ARRAY</keywords>
+    <keywords>ARRAY_AGG</keywords>
+    <keywords>ARRAY_EXISTS</keywords>
+    <keywords>AS</keywords>
+    <keywords>ASC</keywords>
+    <keywords>ASCII</keywords>
+    <keywords>ASENSITIVE</keywords>
+    <keywords>ASSOCIATE</keywords>
+    <keywords>AST</keywords>
+    <keywords>ASUTIME</keywords>
+    <keywords>ASYNCHRONY</keywords>
+    <keywords>AT</keywords>
+    <keywords>ATOMIC</keywords>
+    <keywords>ATTACH</keywords>
+    <keywords>ATTRIBUTE</keywords>
+    <keywords>ATTRIBUTES</keywords>
+    <keywords>AUDIT</keywords>
+    <keywords>AUTHENTICATION</keywords>
+    <keywords>AUTHID</keywords>
+    <keywords>AUTHORIZATION</keywords>
+    <keywords>AUTHORIZATIONS</keywords>
+    <keywords>AUTHORIZED</keywords>
+    <keywords>AUTH_ID</keywords>
+    <keywords>AUTOMATIC</keywords>
+    <keywords>AUTONOMOUS</keywords>
+    <keywords>AUTONOMOUS_TRANSACTION</keywords>
+    <keywords>AUTORESIZE</keywords>
+    <keywords>AUTOSTART</keywords>
+    <keywords>B</keywords>
+    <keywords>BASE</keywords>
+    <keywords>BASE64</keywords>
+    <keywords>BASED</keywords>
+    <keywords>BEFORE</keywords>
+    <keywords>BEGIN</keywords>
+    <keywords>BERNOULLI</keywords>
+    <keywords>BETWEEN</keywords>
+    <keywords>BIGINT</keywords>
+    <keywords>BIN</keywords>
+    <keywords>BINARY</keywords>
+    <keywords>BINARY_INTEGER</keywords>
+    <keywords>BIND</keywords>
+    <keywords>BINDADD</keywords>
+    <keywords>BIT</keywords>
+    <keywords>BLOB</keywords>
+    <keywords>BLOCKED</keywords>
+    <keywords>BLOCKINSERT</keywords>
+    <keywords>BLOCKSIZE</keywords>
+    <keywords>BODY</keywords>
+    <keywords>BOOLEAN</keywords>
+    <keywords>BOTH</keywords>
+    <keywords>BUFFER</keywords>
+    <keywords>BUFFERPOOL</keywords>
+    <keywords>BUFFERPOOLS</keywords>
+    <keywords>BUFFERSIZE</keywords>
+    <keywords>BUILD</keywords>
+    <keywords>BULK</keywords>
+    <keywords>BY</keywords>
+    <keywords>BYPASS</keywords>
+    <keywords>C</keywords>
+    <keywords>CACHE</keywords>
+    <keywords>CACHING</keywords>
+    <keywords>CALL</keywords>
+    <keywords>CALLED</keywords>
+    <keywords>CALLER</keywords>
+    <keywords>CAPTURE</keywords>
+    <keywords>CARDINALITIES</keywords>
+    <keywords>CARDINALITY</keywords>
+    <keywords>CASCADE</keywords>
+    <keywords>CASCADED</keywords>
+    <keywords>CASE</keywords>
+    <keywords>CAST</keywords>
+    <keywords>CATEGORIES</keywords>
+    <keywords>CCSID</keywords>
+    <keywords>CHANGE</keywords>
+    <keywords>CHANGED</keywords>
+    <keywords>CHANGES</keywords>
+    <keywords>CHAR</keywords>
+    <keywords>CHARACTER</keywords>
+    <keywords>CHECK</keywords>
+    <keywords>CHECKED</keywords>
+    <keywords>CHECKING</keywords>
+    <keywords>CLASS</keywords>
+    <keywords>CLIENT</keywords>
+    <keywords>CLIENT_ACCTNG</keywords>
+    <keywords>CLIENT_APPLNAME</keywords>
+    <keywords>CLIENT_USERID</keywords>
+    <keywords>CLIENT_WRKSTNNAME</keywords>
+    <keywords>CLOB</keywords>
+    <keywords>CLOSE</keywords>
+    <keywords>CLR</keywords>
+    <keywords>CLUSTER</keywords>
+    <keywords>COBOL</keywords>
+    <keywords>CODEUNITS16</keywords>
+    <keywords>CODEUNITS32</keywords>
+    <keywords>COLLECT</keywords>
+    <keywords>COLLID</keywords>
+    <keywords>COLUMN</keywords>
+    <keywords>COLUMNS</keywords>
+    <keywords>COMM</keywords>
+    <keywords>COMMENT</keywords>
+    <keywords>COMMIT</keywords>
+    <keywords>COMMITTED</keywords>
+    <keywords>COMPACT</keywords>
+    <keywords>COMPARE</keywords>
+    <keywords>COMPARISONS</keywords>
+    <keywords>COMPILATION</keywords>
+    <keywords>COMPILEDFUNCTION</keywords>
+    <keywords>COMPILEDTRIGGER</keywords>
+    <keywords>COMPONENT</keywords>
+    <keywords>COMPONENTS</keywords>
+    <keywords>COMPOUND</keywords>
+    <keywords>COMPRESS</keywords>
+    <keywords>COMPRESSION</keywords>
+    <keywords>CONCAT</keywords>
+    <keywords>CONCURRENTDBCOORDACTIVITIES</keywords>
+    <keywords>CONCURRENTWORKLOADACTIVITIES</keywords>
+    <keywords>CONCURRENTWORKLOADOCCURRENCES</keywords>
+    <keywords>CONDITION</keywords>
+    <keywords>CONN</keywords>
+    <keywords>CONNECT</keywords>
+    <keywords>CONNECTION</keywords>
+    <keywords>CONNECTIONIDLETIME</keywords>
+    <keywords>CONNECTIONS</keywords>
+    <keywords>CONNECTOPT</keywords>
+    <keywords>CONNECT_BY_ROOT</keywords>
+    <keywords>CONNHEADER</keywords>
+    <keywords>CONNMEMUSE</keywords>
+    <keywords>CONSERVATIVE</keywords>
+    <keywords>CONSTANT</keywords>
+    <keywords>CONSTRAINT</keywords>
+    <keywords>CONSTRAINTS</keywords>
+    <keywords>CONSTRUCTOR</keywords>
+    <keywords>CONTAINERS</keywords>
+    <keywords>CONTAINS</keywords>
+    <keywords>CONTENT</keywords>
+    <keywords>CONTEXT</keywords>
+    <keywords>CONTINUE</keywords>
+    <keywords>CONTROL</keywords>
+    <keywords>CONVERT</keywords>
+    <keywords>COORDINATOR</keywords>
+    <keywords>COPY</keywords>
+    <keywords>CORRELATOR</keywords>
+    <keywords>COUNT</keywords>
+    <keywords>COUNT_BIG</keywords>
+    <keywords>CPU</keywords>
+    <keywords>CPUTIME</keywords>
+    <keywords>CPUTIMEINSC</keywords>
+    <keywords>CREATE</keywords>
+    <keywords>CREATEIN</keywords>
+    <keywords>CREATETAB</keywords>
+    <keywords>CREATE_EXTERNAL_ROUTINE</keywords>
+    <keywords>CREATE_NOT_FENCED</keywords>
+    <keywords>CREATE_NOT_FENCED_ROUTINE</keywords>
+    <keywords>CROSS</keywords>
+    <keywords>CS</keywords>
+    <keywords>CUBE</keywords>
+    <keywords>CURRENT</keywords>
+    <keywords>CURRENT_DATE</keywords>
+    <keywords>CURRENT_PATH</keywords>
+    <keywords>CURRENT_SCHEMA</keywords>
+    <keywords>CURRENT_SERVER</keywords>
+    <keywords>CURRENT_TIME</keywords>
+    <keywords>CURRENT_TIMESTAMP</keywords>
+    <keywords>CURRENT_TIMEZONE</keywords>
+    <keywords>CURRENT_USER</keywords>
+    <keywords>CURRVAL</keywords>
+    <keywords>CURSOR</keywords>
+    <keywords>CURSORS</keywords>
+    <keywords>CYCLE</keywords>
+    <keywords>DATA</keywords>
+    <keywords>DATAACCESS</keywords>
+    <keywords>DATABASE</keywords>
+    <keywords>DATE</keywords>
+    <keywords>DAY</keywords>
+    <keywords>DAYS</keywords>
+    <keywords>DB</keywords>
+    <keywords>DB2DARI</keywords>
+    <keywords>DB2GENERAL</keywords>
+    <keywords>DB2GENRL</keywords>
+    <keywords>DB2LBACREADARRAY</keywords>
+    <keywords>DB2LBACREADSET</keywords>
+    <keywords>DB2LBACREADTREE</keywords>
+    <keywords>DB2LBACRULES</keywords>
+    <keywords>DB2LBACWRITEARRAY</keywords>
+    <keywords>DB2LBACWRITESET</keywords>
+    <keywords>DB2LBACWRITETREE</keywords>
+    <keywords>DB2SECURITYLABEL</keywords>
+    <keywords>DB2SPL</keywords>
+    <keywords>DB2SQL</keywords>
+    <keywords>DB2VALIDATE</keywords>
+    <keywords>DB2_RETURN_STATUS</keywords>
+    <keywords>DB2_TOKEN_STRING</keywords>
+    <keywords>DBADM</keywords>
+    <keywords>DBCLOB</keywords>
+    <keywords>DBINFO</keywords>
+    <keywords>DBMEMUSE</keywords>
+    <keywords>DBPARTITIONNUM</keywords>
+    <keywords>DBPARTITIONNUMS</keywords>
+    <keywords>DBPARTITIONS</keywords>
+    <keywords>DDL</keywords>
+    <keywords>DEACTIVATE</keywords>
+    <keywords>DEADLOCK</keywords>
+    <keywords>DEADLOCKS</keywords>
+    <keywords>DEBUGINFO</keywords>
+    <keywords>DEC</keywords>
+    <keywords>DECFLOAT</keywords>
+    <keywords>DECIMAL</keywords>
+    <keywords>DECLARE</keywords>
+    <keywords>DECOMPOSITION</keywords>
+    <keywords>DEFAULT</keywords>
+    <keywords>DEFAULTS</keywords>
+    <keywords>DEFER</keywords>
+    <keywords>DEFERRED</keywords>
+    <keywords>DEFINE</keywords>
+    <keywords>DEFINER</keywords>
+    <keywords>DEFINITION</keywords>
+    <keywords>DEGREE</keywords>
+    <keywords>DELETE</keywords>
+    <keywords>DEPENDENT</keywords>
+    <keywords>DESC</keywords>
+    <keywords>DESCRIPTOR</keywords>
+    <keywords>DETACH</keywords>
+    <keywords>DETAILED</keywords>
+    <keywords>DETAILS</keywords>
+    <keywords>DETERMINED</keywords>
+    <keywords>DETERMINISTIC</keywords>
+    <keywords>DEVICE</keywords>
+    <keywords>DIAGNOSTICS</keywords>
+    <keywords>DIMENSIONS</keywords>
+    <keywords>DIRTY</keywords>
+    <keywords>DISABLE</keywords>
+    <keywords>DISALLOW</keywords>
+    <keywords>DISPATCH</keywords>
+    <keywords>DISTINCT</keywords>
+    <keywords>DISTRIBUTE</keywords>
+    <keywords>DISTRIBUTED</keywords>
+    <keywords>DISTRIBUTION</keywords>
+    <keywords>DLCONN</keywords>
+    <keywords>DLLOCK</keywords>
+    <keywords>DML</keywords>
+    <keywords>DO</keywords>
+    <keywords>DOCUMENT</keywords>
+    <keywords>DOUBLE</keywords>
+    <keywords>DROP</keywords>
+    <keywords>DROPIN</keywords>
+    <keywords>DROPPED</keywords>
+    <keywords>DYNAMIC</keywords>
+    <keywords>EACH</keywords>
+    <keywords>ELEMENT</keywords>
+    <keywords>ELSE</keywords>
+    <keywords>ELSEIF</keywords>
+    <keywords>ELSIF</keywords>
+    <keywords>EMPTY</keywords>
+    <keywords>ENABLE</keywords>
+    <keywords>ENCRYPTION</keywords>
+    <keywords>END</keywords>
+    <keywords>ENDING</keywords>
+    <keywords>ENFORCED</keywords>
+    <keywords>ENFORCEMENT</keywords>
+    <keywords>ENVIRONMENT</keywords>
+    <keywords>ERASE</keywords>
+    <keywords>ERROR</keywords>
+    <keywords>ESCAPE</keywords>
+    <keywords>ESTIMATE</keywords>
+    <keywords>ESTIMATEDCOST</keywords>
+    <keywords>ESTIMATEDSQLCOST</keywords>
+    <keywords>EUR</keywords>
+    <keywords>EVALUATE</keywords>
+    <keywords>EVENT</keywords>
+    <keywords>EVERY</keywords>
+    <keywords>EXACT</keywords>
+    <keywords>EXCEEDED</keywords>
+    <keywords>EXCEPT</keywords>
+    <keywords>EXCEPTION</keywords>
+    <keywords>EXCEPTION_INIT</keywords>
+    <keywords>EXCLUDES</keywords>
+    <keywords>EXCLUDING</keywords>
+    <keywords>EXCLUSIVE</keywords>
+    <keywords>EXECNODE</keywords>
+    <keywords>EXECUTE</keywords>
+    <keywords>EXECUTETIME</keywords>
+    <keywords>EXECUTION</keywords>
+    <keywords>EXEMPTION</keywords>
+    <keywords>EXISTS</keywords>
+    <keywords>EXIT</keywords>
+    <keywords>EXPAND</keywords>
+    <keywords>EXPLAIN</keywords>
+    <keywords>EXPRESSION</keywords>
+    <keywords>EXTEND</keywords>
+    <keywords>EXTENDED</keywords>
+    <keywords>EXTENSION</keywords>
+    <keywords>EXTENTSIZE</keywords>
+    <keywords>EXTERNAL</keywords>
+    <keywords>EXTRACT</keywords>
+    <keywords>FAILURE</keywords>
+    <keywords>FALSE</keywords>
+    <keywords>FEDERATED</keywords>
+    <keywords>FEDERATED_TOOL</keywords>
+    <keywords>FENCED</keywords>
+    <keywords>FETCH</keywords>
+    <keywords>FILE</keywords>
+    <keywords>FILEREAD</keywords>
+    <keywords>FILEWRITE</keywords>
+    <keywords>FILTER</keywords>
+    <keywords>FINAL</keywords>
+    <keywords>FIRST</keywords>
+    <keywords>FLOAT</keywords>
+    <keywords>FLUSH</keywords>
+    <keywords>FOLLOWING</keywords>
+    <keywords>FOLLOWS</keywords>
+    <keywords>FOR</keywords>
+    <keywords>FORALL</keywords>
+    <keywords>FORCE</keywords>
+    <keywords>FOREIGN</keywords>
+    <keywords>FOUND</keywords>
+    <keywords>FREE</keywords>
+    <keywords>FREEPAGE</keywords>
+    <keywords>FROM</keywords>
+    <keywords>FULL</keywords>
+    <keywords>FUNCTION</keywords>
+    <keywords>G</keywords>
+    <keywords>GBPCACHE</keywords>
+    <keywords>GENERAL</keywords>
+    <keywords>GENERATE</keywords>
+    <keywords>GENERATED</keywords>
+    <keywords>GET</keywords>
+    <keywords>GLOBAL</keywords>
+    <keywords>GOTO</keywords>
+    <keywords>GRANT</keywords>
+    <keywords>GRAPHIC</keywords>
+    <keywords>GROUP</keywords>
+    <keywords>GROUPING</keywords>
+    <keywords>HANDLER</keywords>
+    <keywords>HARD</keywords>
+    <keywords>HASH</keywords>
+    <keywords>HASHED</keywords>
+    <keywords>HASHING</keywords>
+    <keywords>HAVING</keywords>
+    <keywords>HEX</keywords>
+    <keywords>HIDDEN</keywords>
+    <keywords>HIERARCHY</keywords>
+    <keywords>HIGH</keywords>
+    <keywords>HISTOGRAM</keywords>
+    <keywords>HISTOGRAMBIN</keywords>
+    <keywords>HISTORY</keywords>
+    <keywords>HOLD</keywords>
+    <keywords>HOUR</keywords>
+    <keywords>HOURS</keywords>
+    <keywords>HPJ</keywords>
+    <keywords>ID</keywords>
+    <keywords>IDENTITY</keywords>
+    <keywords>IF</keywords>
+    <keywords>IGNORE</keywords>
+    <keywords>IMMEDIATE</keywords>
+    <keywords>IMPLICIT</keywords>
+    <keywords>IMPLICITLY</keywords>
+    <keywords>IMPLICIT_SCHEMA</keywords>
+    <keywords>IN</keywords>
+    <keywords>INCLUDE</keywords>
+    <keywords>INCLUDES</keywords>
+    <keywords>INCLUDING</keywords>
+    <keywords>INCLUSIVE</keywords>
+    <keywords>INCREASESIZE</keywords>
+    <keywords>INCREMENT</keywords>
+    <keywords>INCREMENTAL</keywords>
+    <keywords>INDEX</keywords>
+    <keywords>INDEXES</keywords>
+    <keywords>INDICATOR</keywords>
+    <keywords>INDICES</keywords>
+    <keywords>INF</keywords>
+    <keywords>INFINITY</keywords>
+    <keywords>INFIX</keywords>
+    <keywords>INFO</keywords>
+    <keywords>INHERIT</keywords>
+    <keywords>INITIALLY</keywords>
+    <keywords>INITIALSIZE</keywords>
+    <keywords>INITIAL_INSTS</keywords>
+    <keywords>INITIAL_IOS</keywords>
+    <keywords>INLINE</keywords>
+    <keywords>INLINEFUNCTION</keywords>
+    <keywords>INLINETRIGGER</keywords>
+    <keywords>INNER</keywords>
+    <keywords>INOUT</keywords>
+    <keywords>INPUT</keywords>
+    <keywords>INSENSITIVE</keywords>
+    <keywords>INSERT</keywords>
+    <keywords>INSTANTIABLE</keywords>
+    <keywords>INSTEAD</keywords>
+    <keywords>INSTS_PER_ARGBYTE</keywords>
+    <keywords>INSTS_PER_INVOC</keywords>
+    <keywords>INT</keywords>
+    <keywords>INTEGER</keywords>
+    <keywords>INTEGRITY</keywords>
+    <keywords>INTERARRIVALTIME</keywords>
+    <keywords>INTERSECT</keywords>
+    <keywords>INTO</keywords>
+    <keywords>INVALID</keywords>
+    <keywords>INVALIDATION</keywords>
+    <keywords>IO</keywords>
+    <keywords>IOS_PER_ARGBYTE</keywords>
+    <keywords>IOS_PER_INVOC</keywords>
+    <keywords>IS</keywords>
+    <keywords>ISO</keywords>
+    <keywords>ISOLATION</keywords>
+    <keywords>ITERATE</keywords>
+    <keywords>JAVA</keywords>
+    <keywords>JIS</keywords>
+    <keywords>JOIN</keywords>
+    <keywords>K</keywords>
+    <keywords>KEEP</keywords>
+    <keywords>KEY</keywords>
+    <keywords>KEYS</keywords>
+    <keywords>L</keywords>
+    <keywords>LABEL</keywords>
+    <keywords>LANGUAGE</keywords>
+    <keywords>LARGE</keywords>
+    <keywords>LAST</keywords>
+    <keywords>LATERAL</keywords>
+    <keywords>LC_CTYPE</keywords>
+    <keywords>LC_MESSAGES</keywords>
+    <keywords>LC_TIME</keywords>
+    <keywords>LEADING</keywords>
+    <keywords>LEAVE</keywords>
+    <keywords>LEFT</keywords>
+    <keywords>LENGTH</keywords>
+    <keywords>LEVEL</keywords>
+    <keywords>LEVEL2</keywords>
+    <keywords>LIBRARY</keywords>
+    <keywords>LIBRARYADM</keywords>
+    <keywords>LIFETIME</keywords>
+    <keywords>LIKE</keywords>
+    <keywords>LIMIT</keywords>
+    <keywords>LIST</keywords>
+    <keywords>LOAD</keywords>
+    <keywords>LOCAL</keywords>
+    <keywords>LOCALE</keywords>
+    <keywords>LOCATION</keywords>
+    <keywords>LOCATOR</keywords>
+    <keywords>LOCATORS</keywords>
+    <keywords>LOCK</keywords>
+    <keywords>LOCKED</keywords>
+    <keywords>LOCKING</keywords>
+    <keywords>LOCKS</keywords>
+    <keywords>LOCKSIZE</keywords>
+    <keywords>LOG</keywords>
+    <keywords>LOGGED</keywords>
+    <keywords>LONG</keywords>
+    <keywords>LONGVAR</keywords>
+    <keywords>LOOP</keywords>
+    <keywords>LOW</keywords>
+    <keywords>LOWER</keywords>
+    <keywords>M</keywords>
+    <keywords>MAIN</keywords>
+    <keywords>MAINTAINED</keywords>
+    <keywords>MANAGED</keywords>
+    <keywords>MANUALSTART</keywords>
+    <keywords>MAP</keywords>
+    <keywords>MAPPING</keywords>
+    <keywords>MARK</keywords>
+    <keywords>MATCHED</keywords>
+    <keywords>MATCHING</keywords>
+    <keywords>MATERIALIZED</keywords>
+    <keywords>MAX</keywords>
+    <keywords>MAXFILES</keywords>
+    <keywords>MAXFILESIZE</keywords>
+    <keywords>MAXSIZE</keywords>
+    <keywords>MAXVALUE</keywords>
+    <keywords>MDC</keywords>
+    <keywords>MEDIUM</keywords>
+    <keywords>MERGE</keywords>
+    <keywords>MESSAGE_TEXT</keywords>
+    <keywords>METHOD</keywords>
+    <keywords>METHODS</keywords>
+    <keywords>METRICS</keywords>
+    <keywords>MICROSECOND</keywords>
+    <keywords>MICROSECONDS</keywords>
+    <keywords>MINPCTUSED</keywords>
+    <keywords>MINUS</keywords>
+    <keywords>MINUTE</keywords>
+    <keywords>MINUTES</keywords>
+    <keywords>MINVALUE</keywords>
+    <keywords>MISSING</keywords>
+    <keywords>MIXED</keywords>
+    <keywords>MODE</keywords>
+    <keywords>MODIFIES</keywords>
+    <keywords>MODULE</keywords>
+    <keywords>MONITOR</keywords>
+    <keywords>MONTH</keywords>
+    <keywords>MONTHS</keywords>
+    <keywords>MORE</keywords>
+    <keywords>MOVEMENT</keywords>
+    <keywords>NAME</keywords>
+    <keywords>NAMESPACE</keywords>
+    <keywords>NAN</keywords>
+    <keywords>NATURAL</keywords>
+    <keywords>NCHAR</keywords>
+    <keywords>NCLOB</keywords>
+    <keywords>NESTED</keywords>
+    <keywords>NETWORK</keywords>
+    <keywords>NEW</keywords>
+    <keywords>NEW_TABLE</keywords>
+    <keywords>NEXT</keywords>
+    <keywords>NEXTVAL</keywords>
+    <keywords>NICKNAME</keywords>
+    <keywords>NO</keywords>
+    <keywords>NOCACHE</keywords>
+    <keywords>NOCOPY</keywords>
+    <keywords>NOCYCLE</keywords>
+    <keywords>NODE</keywords>
+    <keywords>NODEGROUP</keywords>
+    <keywords>NODES</keywords>
+    <keywords>NOMAXVALUE</keywords>
+    <keywords>NOMINVALUE</keywords>
+    <keywords>NONBLOCKED</keywords>
+    <keywords>NONE</keywords>
+    <keywords>NOORDER</keywords>
+    <keywords>NORMAL</keywords>
+    <keywords>NOT</keywords>
+    <keywords>NULL</keywords>
+    <keywords>NULLS</keywords>
+    <keywords>NUM</keywords>
+    <keywords>NUMBER</keywords>
+    <keywords>NUMBLOCKPAGES</keywords>
+    <keywords>NUMERIC</keywords>
+    <keywords>NUM_EXECUTIONS</keywords>
+    <keywords>NUM_FREQVALUES</keywords>
+    <keywords>NUM_QUANTILES</keywords>
+    <keywords>NVARCHAR2</keywords>
+    <keywords>OBJECT</keywords>
+    <keywords>OBJMAINT</keywords>
+    <keywords>OCCURRENCE</keywords>
+    <keywords>OCTETS</keywords>
+    <keywords>OF</keywords>
+    <keywords>OFF</keywords>
+    <keywords>OLD</keywords>
+    <keywords>OLD_TABLE</keywords>
+    <keywords>OLE</keywords>
+    <keywords>OLEDB</keywords>
+    <keywords>ON</keywords>
+    <keywords>ONCE</keywords>
+    <keywords>ONLINE</keywords>
+    <keywords>ONLY</keywords>
+    <keywords>OPEN</keywords>
+    <keywords>OPTIMIZATION</keywords>
+    <keywords>OPTIMIZE</keywords>
+    <keywords>OPTION</keywords>
+    <keywords>OPTIONS</keywords>
+    <keywords>OPTPROFILE</keywords>
+    <keywords>OR</keywords>
+    <keywords>ORDER</keywords>
+    <keywords>ORDINALITY</keywords>
+    <keywords>ORGANIZE</keywords>
+    <keywords>OUT</keywords>
+    <keywords>OUTBOUND</keywords>
+    <keywords>OUTER</keywords>
+    <keywords>OVER</keywords>
+    <keywords>OVERFLOW</keywords>
+    <keywords>OVERHEAD</keywords>
+    <keywords>OVERRIDE</keywords>
+    <keywords>OVERRIDING</keywords>
+    <keywords>OWNERSHIP</keywords>
+    <keywords>P</keywords>
+    <keywords>PACKAGE</keywords>
+    <keywords>PAGE</keywords>
+    <keywords>PAGESIZE</keywords>
+    <keywords>PARALLEL</keywords>
+    <keywords>PARAMETER</keywords>
+    <keywords>PARAMETERS</keywords>
+    <keywords>PARENT</keywords>
+    <keywords>PART</keywords>
+    <keywords>PARTITION</keywords>
+    <keywords>PARTITIONED</keywords>
+    <keywords>PARTITIONING</keywords>
+    <keywords>PARTITIONINGS</keywords>
+    <keywords>PARTITIONS</keywords>
+    <keywords>PASSING</keywords>
+    <keywords>PASSTHRU</keywords>
+    <keywords>PASSWORD</keywords>
+    <keywords>PATH</keywords>
+    <keywords>PATROLLER</keywords>
+    <keywords>PCTDEACTIVATE</keywords>
+    <keywords>PCTFREE</keywords>
+    <keywords>PERCENT</keywords>
+    <keywords>PERCENT_ARGBYTES</keywords>
+    <keywords>PERFORM</keywords>
+    <keywords>PIECESIZE</keywords>
+    <keywords>PIPE</keywords>
+    <keywords>PLACING</keywords>
+    <keywords>PLAN</keywords>
+    <keywords>PLS_INTEGER</keywords>
+    <keywords>POLICY</keywords>
+    <keywords>POSITION</keywords>
+    <keywords>PRAGMA</keywords>
+    <keywords>PRECEDING</keywords>
+    <keywords>PRECISION</keywords>
+    <keywords>PREDICATES</keywords>
+    <keywords>PREFETCH</keywords>
+    <keywords>PREFETCHSIZE</keywords>
+    <keywords>PREPARE</keywords>
+    <keywords>PRESERVE</keywords>
+    <keywords>PREVENT</keywords>
+    <keywords>PREVIOUS</keywords>
+    <keywords>PREVVAL</keywords>
+    <keywords>PRIMARY</keywords>
+    <keywords>PRIOR</keywords>
+    <keywords>PRIORITY</keywords>
+    <keywords>PRIQTY</keywords>
+    <keywords>PRIVILEGES</keywords>
+    <keywords>PROCEDURE</keywords>
+    <keywords>PROFILE</keywords>
+    <keywords>PROGRAM</keywords>
+    <keywords>PROPAGATE</keywords>
+    <keywords>PROTOCOL</keywords>
+    <keywords>PRUNE</keywords>
+    <keywords>PUBLIC</keywords>
+    <keywords>PUBLISH</keywords>
+    <keywords>QSTATS</keywords>
+    <keywords>QUERY</keywords>
+    <keywords>QUERYNO</keywords>
+    <keywords>QUERYTAG</keywords>
+    <keywords>QUEUEDACTIVITIES</keywords>
+    <keywords>QUEUEDCONNECTIONS</keywords>
+    <keywords>QUEUETIME</keywords>
+    <keywords>QUIESCE_CONNECT</keywords>
+    <keywords>RAISE</keywords>
+    <keywords>RAISE_APPLICATION_ERROR</keywords>
+    <keywords>RANGE</keywords>
+    <keywords>RATE</keywords>
+    <keywords>RATIO</keywords>
+    <keywords>RAW</keywords>
+    <keywords>READ</keywords>
+    <keywords>READS</keywords>
+    <keywords>REAL</keywords>
+    <keywords>REBALANCE</keywords>
+    <keywords>RECOMMEND</keywords>
+    <keywords>RECORD</keywords>
+    <keywords>RECOVERY</keywords>
+    <keywords>RECREATE</keywords>
+    <keywords>REDIRECT</keywords>
+    <keywords>REDUCE</keywords>
+    <keywords>REF</keywords>
+    <keywords>REFERENCE</keywords>
+    <keywords>REFERENCES</keywords>
+    <keywords>REFERENCING</keywords>
+    <keywords>REFRESH</keywords>
+    <keywords>REGISTERS</keywords>
+    <keywords>REGULAR</keywords>
+    <keywords>REJECT</keywords>
+    <keywords>RELEASE</keywords>
+    <keywords>REMAP</keywords>
+    <keywords>REMOTE</keywords>
+    <keywords>REMOVE</keywords>
+    <keywords>RENAME</keywords>
+    <keywords>REOPT</keywords>
+    <keywords>REPEAT</keywords>
+    <keywords>REPEATABLE</keywords>
+    <keywords>REPLACE</keywords>
+    <keywords>REPLICATED</keywords>
+    <keywords>REPLICATION</keywords>
+    <keywords>REQUEST</keywords>
+    <keywords>REQUIRE</keywords>
+    <keywords>RESET</keywords>
+    <keywords>RESIDENT</keywords>
+    <keywords>RESIGNAL</keywords>
+    <keywords>RESIZE</keywords>
+    <keywords>RESOLVE</keywords>
+    <keywords>RESTART</keywords>
+    <keywords>RESTRICT</keywords>
+    <keywords>RESULT</keywords>
+    <keywords>RESULT_SET_LOCATOR</keywords>
+    <keywords>RETAIN</keywords>
+    <keywords>RETURN</keywords>
+    <keywords>RETURNING</keywords>
+    <keywords>RETURNS</keywords>
+    <keywords>RETURN_STATUS</keywords>
+    <keywords>REUSE</keywords>
+    <keywords>REVERSE</keywords>
+    <keywords>REVOKE</keywords>
+    <keywords>RID</keywords>
+    <keywords>RID_BIT</keywords>
+    <keywords>RIGHT</keywords>
+    <keywords>ROLE</keywords>
+    <keywords>ROLLBACK</keywords>
+    <keywords>ROLLOUT</keywords>
+    <keywords>ROLLUP</keywords>
+    <keywords>ROOT</keywords>
+    <keywords>ROUNDING</keywords>
+    <keywords>ROUND_CEILING</keywords>
+    <keywords>ROUND_DOWN</keywords>
+    <keywords>ROUND_FLOOR</keywords>
+    <keywords>ROUND_HALF_EVEN</keywords>
+    <keywords>ROUND_HALF_UP</keywords>
+    <keywords>ROUTINES</keywords>
+    <keywords>ROW</keywords>
+    <keywords>ROWS</keywords>
+    <keywords>ROW_COUNT</keywords>
+    <keywords>RR</keywords>
+    <keywords>RS</keywords>
+    <keywords>RULE</keywords>
+    <keywords>RUN</keywords>
+    <keywords>S</keywords>
+    <keywords>SAFE</keywords>
+    <keywords>SAMPLED</keywords>
+    <keywords>SAVEPOINT</keywords>
+    <keywords>SBCS</keywords>
+    <keywords>SCANS</keywords>
+    <keywords>SCHEMA</keywords>
+    <keywords>SCOPE</keywords>
+    <keywords>SCRATCHPAD</keywords>
+    <keywords>SCROLL</keywords>
+    <keywords>SCSTATS</keywords>
+    <keywords>SEARCH</keywords>
+    <keywords>SECADM</keywords>
+    <keywords>SECMAINT</keywords>
+    <keywords>SECOND</keywords>
+    <keywords>SECONDS</keywords>
+    <keywords>SECQTY</keywords>
+    <keywords>SECTION</keywords>
+    <keywords>SECURED</keywords>
+    <keywords>SECURITY</keywords>
+    <keywords>SELECT</keywords>
+    <keywords>SELECTION</keywords>
+    <keywords>SELECTIVITY</keywords>
+    <keywords>SELF</keywords>
+    <keywords>SENSITIVE</keywords>
+    <keywords>SEQUENCE</keywords>
+    <keywords>SERIALIZABLE</keywords>
+    <keywords>SERVER</keywords>
+    <keywords>SERVICE</keywords>
+    <keywords>SESSION</keywords>
+    <keywords>SESSION_USER</keywords>
+    <keywords>SET</keywords>
+    <keywords>SETS</keywords>
+    <keywords>SETSESSIONUSER</keywords>
+    <keywords>SETTING</keywords>
+    <keywords>SHARE</keywords>
+    <keywords>SHRLEVEL</keywords>
+    <keywords>SIBLINGS</keywords>
+    <keywords>SIGNAL</keywords>
+    <keywords>SIMPLE</keywords>
+    <keywords>SIZE</keywords>
+    <keywords>SKIP</keywords>
+    <keywords>SMALLINT</keywords>
+    <keywords>SNAN</keywords>
+    <keywords>SNAPSHOT</keywords>
+    <keywords>SOME</keywords>
+    <keywords>SOURCE</keywords>
+    <keywords>SPECIAL</keywords>
+    <keywords>SPECIFIC</keywords>
+    <keywords>SPECIFICATION</keywords>
+    <keywords>SPLIT</keywords>
+    <keywords>SQL</keywords>
+    <keywords>SQLADM</keywords>
+    <keywords>SQLCODE</keywords>
+    <keywords>SQLDATA</keywords>
+    <keywords>SQLERRM</keywords>
+    <keywords>SQLEXCEPTION</keywords>
+    <keywords>SQLID</keywords>
+    <keywords>SQLINTERNAL</keywords>
+    <keywords>SQLROWSREAD</keywords>
+    <keywords>SQLROWSREADINSC</keywords>
+    <keywords>SQLROWSRETURNED</keywords>
+    <keywords>SQLSTATE</keywords>
+    <keywords>SQLTEMPSPACE</keywords>
+    <keywords>SQLWARNING</keywords>
+    <keywords>SQL_CCFLAGS</keywords>
+    <keywords>SSA</keywords>
+    <keywords>STABILITY</keywords>
+    <keywords>STAGING</keywords>
+    <keywords>START</keywords>
+    <keywords>STARTING</keywords>
+    <keywords>STATE</keywords>
+    <keywords>STATEMENT</keywords>
+    <keywords>STATEMENTS</keywords>
+    <keywords>STATIC</keywords>
+    <keywords>STATISTICS</keywords>
+    <keywords>STATUS</keywords>
+    <keywords>STAY</keywords>
+    <keywords>STMT</keywords>
+    <keywords>STMTHIST</keywords>
+    <keywords>STMTVALS</keywords>
+    <keywords>STMT_EXEC_TIME</keywords>
+    <keywords>STOGROUP</keywords>
+    <keywords>STOP</keywords>
+    <keywords>STORAGE</keywords>
+    <keywords>STRIP</keywords>
+    <keywords>STRIPE</keywords>
+    <keywords>STYLE</keywords>
+    <keywords>SUB</keywords>
+    <keywords>SUBSECTION</keywords>
+    <keywords>SUCCESS</keywords>
+    <keywords>SUMMARY</keywords>
+    <keywords>SWITCH</keywords>
+    <keywords>SYMMETRIC</keywords>
+    <keywords>SYNONYM</keywords>
+    <keywords>SYSADM</keywords>
+    <keywords>SYSADMIN</keywords>
+    <keywords>SYSCTRL</keywords>
+    <keywords>SYSDATE</keywords>
+    <keywords>SYSMAINT</keywords>
+    <keywords>SYSMON</keywords>
+    <keywords>SYSPROC</keywords>
+    <keywords>SYSTEM</keywords>
+    <keywords>SYSTEM_USER</keywords>
+    <keywords>SYS_REFCURSOR</keywords>
+    <keywords>T</keywords>
+    <keywords>TABLE</keywords>
+    <keywords>TABLES</keywords>
+    <keywords>TABLESAMPLE</keywords>
+    <keywords>TABLESPACE</keywords>
+    <keywords>TABLESPACES</keywords>
+    <keywords>TARGET</keywords>
+    <keywords>TEMPLATE</keywords>
+    <keywords>TEMPORARY</keywords>
+    <keywords>THAN</keywords>
+    <keywords>THEN</keywords>
+    <keywords>THREADSAFE</keywords>
+    <keywords>THRESHOLD</keywords>
+    <keywords>THRESHOLDVIOLATIONS</keywords>
+    <keywords>THROUGH</keywords>
+    <keywords>TIME</keywords>
+    <keywords>TIMEOUT</keywords>
+    <keywords>TIMERONCOST</keywords>
+    <keywords>TIMESTAMP</keywords>
+    <keywords>TIMEZONE</keywords>
+    <keywords>TO</keywords>
+    <keywords>TOKEN</keywords>
+    <keywords>TOTALDBPARTITIONCONNECTIONS</keywords>
+    <keywords>TOTALSCPARTITIONCONNECTIONS</keywords>
+    <keywords>TRAILING</keywords>
+    <keywords>TRANSACTION</keywords>
+    <keywords>TRANSACTIONS</keywords>
+    <keywords>TRANSFER</keywords>
+    <keywords>TRANSFERRATE</keywords>
+    <keywords>TRANSFORM</keywords>
+    <keywords>TRANSFORMS</keywords>
+    <keywords>TRANSLATE</keywords>
+    <keywords>TREAT</keywords>
+    <keywords>TREE</keywords>
+    <keywords>TRIGGER</keywords>
+    <keywords>TRIGGERS</keywords>
+    <keywords>TRIM</keywords>
+    <keywords>TRUE</keywords>
+    <keywords>TRUNC</keywords>
+    <keywords>TRUNCATE</keywords>
+    <keywords>TRUSTED</keywords>
+    <keywords>TWOLEVEL</keywords>
+    <keywords>TYPE</keywords>
+    <keywords>TYPES</keywords>
+    <keywords>UESCAPE</keywords>
+    <keywords>UNBOUNDED</keywords>
+    <keywords>UNCHECKED</keywords>
+    <keywords>UNCOMMITTED</keywords>
+    <keywords>UNDER</keywords>
+    <keywords>UNDO</keywords>
+    <keywords>UNFORMATTED</keywords>
+    <keywords>UNICODE</keywords>
+    <keywords>UNION</keywords>
+    <keywords>UNIQUE</keywords>
+    <keywords>UNIT</keywords>
+    <keywords>UNITS</keywords>
+    <keywords>UNNEST</keywords>
+    <keywords>UNSAFE</keywords>
+    <keywords>UNTIL</keywords>
+    <keywords>UOWTOTALTIME</keywords>
+    <keywords>UPDATE</keywords>
+    <keywords>UPDATED_SINCE_BOUNDARY_TIME</keywords>
+    <keywords>UPON</keywords>
+    <keywords>UR</keywords>
+    <keywords>URI</keywords>
+    <keywords>USA</keywords>
+    <keywords>USAGE</keywords>
+    <keywords>USE</keywords>
+    <keywords>USER</keywords>
+    <keywords>USERID</keywords>
+    <keywords>USING</keywords>
+    <keywords>VALIDATE</keywords>
+    <keywords>VALIDATED</keywords>
+    <keywords>VALUE</keywords>
+    <keywords>VALUES</keywords>
+    <keywords>VARCHAR</keywords>
+    <keywords>VARCHAR2</keywords>
+    <keywords>VARGRAPHIC</keywords>
+    <keywords>VARIABLE</keywords>
+    <keywords>VARIANT</keywords>
+    <keywords>VARRAY</keywords>
+    <keywords>VARYING</keywords>
+    <keywords>VCAT</keywords>
+    <keywords>VERSION</keywords>
+    <keywords>VIEW</keywords>
+    <keywords>VIOLATIONS</keywords>
+    <keywords>VOLATILE</keywords>
+    <keywords>WAIT</keywords>
+    <keywords>WAITING</keywords>
+    <keywords>WATER</keywords>
+    <keywords>WCSTATS</keywords>
+    <keywords>WHEN</keywords>
+    <keywords>WHERE</keywords>
+    <keywords>WHILE</keywords>
+    <keywords>WHITESPACE</keywords>
+    <keywords>WITH</keywords>
+    <keywords>WITHIN</keywords>
+    <keywords>WITHOUT</keywords>
+    <keywords>WLMADM</keywords>
+    <keywords>WLSTATS</keywords>
+    <keywords>WORK</keywords>
+    <keywords>WORKLOAD</keywords>
+    <keywords>WRAPPER</keywords>
+    <keywords>WRITE</keywords>
+    <keywords>WRITEDOWN</keywords>
+    <keywords>WRITEUP</keywords>
+    <keywords>WRKSTNNAME</keywords>
+    <keywords>XACT</keywords>
+    <keywords>XML</keywords>
+    <keywords>XMLAGG</keywords>
+    <keywords>XMLATTRIBUTES</keywords>
+    <keywords>XMLBINARY</keywords>
+    <keywords>XMLCAST</keywords>
+    <keywords>XMLCOMMENT</keywords>
+    <keywords>XMLCONCAT</keywords>
+    <keywords>XMLDECLARATION</keywords>
+    <keywords>XMLDOCUMENT</keywords>
+    <keywords>XMLELEMENT</keywords>
+    <keywords>XMLEXISTS</keywords>
+    <keywords>XMLFOREST</keywords>
+    <keywords>XMLGROUP</keywords>
+    <keywords>XMLNAMESPACES</keywords>
+    <keywords>XMLPARSE</keywords>
+    <keywords>XMLPATTERN</keywords>
+    <keywords>XMLPI</keywords>
+    <keywords>XMLQUERY</keywords>
+    <keywords>XMLROW</keywords>
+    <keywords>XMLSCHEMA</keywords>
+    <keywords>XMLSERIALIZE</keywords>
+    <keywords>XMLTABLE</keywords>
+    <keywords>XMLTEXT</keywords>
+    <keywords>XMLVALIDATE</keywords>
+    <keywords>XQUERY</keywords>
+    <keywords>XSLTRANSFORM</keywords>
+    <keywords>XSROBJECT</keywords>
+    <keywords>YEAR</keywords>
+    <keywords>YEARS</keywords>
+    <keywords>YES</keywords>
+    <operators>&lt;</operators>
+    <operators>&quot;</operators>
+    <operators>%</operators>
+    <operators>&amp;</operators>
+    <operators>''''</operators>
+    <operators>(</operators>
+    <operators>)</operators>
+    <operators>*</operators>
+    <operators>+</operators>
+    <operators>,</operators>
+    <operators>-</operators>
+    <operators>.</operators>
+    <operators>/</operators>
+    <operators>:</operators>
+    <operators>;</operators>
+    <operators>=</operators>
+    <operators>?</operators>
+    <operators>[</operators>
+    <operators>]</operators>
+    <operators>_</operators>
+    <operators>'|'</operators>
+    <operators>,=</operators>
+    <operators>&lt;=</operators>
+    <operators>||</operators>
+    <operators>..</operators>
+    <operators>'-,'</operators>
+    <operators>!</operators>
+    <operators>~</operators>
+    <operators>:=</operators>
+    <operators>{</operators>
+    <operators>}</operators>
+    <operators>(+)</operators>
+  </SQLSyntaxDefinition>
+  <nicknameDefinition constraintSupported="true" indexSupported="true" maximumIdentifierLength="128"/>
+  <schemaDefinition maximumIdentifierLength="128"/>
+  <viewDefinition maximumIdentifierLength="128"/>
+  <privilegedElementDefinitions name="Database">
+    <privilegeDefinitions name="BINDADD"/>
+    <privilegeDefinitions name="CONNECT"/>
+    <privilegeDefinitions name="CREATETAB"/>
+    <privilegeDefinitions name="CREATE_EXTERNAL_ROUTINE"/>
+    <privilegeDefinitions name="CREATE_NOT_FENCED_ROUTINE"/>
+    <privilegeDefinitions name="IMPLICIT_SCHEMA"/>
+    <privilegeDefinitions name="DBADM"/>
+    <privilegeDefinitions name="LOAD"/>
+    <privilegeDefinitions name="QUIESCE_CONNECT"/>
+    <privilegeDefinitions name="SECADM"/>
+    <privilegeDefinitions name="ACCESSCTRL"/>
+    <privilegeDefinitions name="DATAACCESS"/>
+    <privilegeDefinitions name="EXPLAIN"/>
+    <privilegeDefinitions name="SQLADM"/>
+    <privilegeDefinitions name="WLMADM"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Schema">
+    <privilegeDefinitions name="ALTERIN"/>
+    <privilegeDefinitions name="CREATEIN"/>
+    <privilegeDefinitions name="DROPIN"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="PersistentTable">
+    <privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions actionElementDefinitions="COLUMN_1" name="REFERENCES"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions actionElementDefinitions="COLUMN_1" name="UPDATE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="TemporaryTable">
+    <privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions actionElementDefinitions="COLUMN_1" name="REFERENCES"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions actionElementDefinitions="COLUMN_1" name="UPDATE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="ViewTable">
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions actionElementDefinitions="COLUMN_1" name="UPDATE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Nickname">
+    <privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="REFERENCES"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions name="UPDATE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions xmi:id="COLUMN_1" name="Column"/>
+  <privilegedElementDefinitions name="MaterializedQueryTable">
+    <privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions actionElementDefinitions="COLUMN_1" name="REFERENCES"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions actionElementDefinitions="COLUMN_1" name="UPDATE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Routine">
+    <privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Sequence">
+    <privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="USAGE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Index">
+    <privilegeDefinitions name="CONTROL"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Tablespace">
+    <privilegeDefinitions name="USE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Package">
+    <privilegeDefinitions name="BIND"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Module">
+    <privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="PLSQLPackage">
+    <privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="GlobalVariable">
+    <privilegeDefinitions name="READ"/>
+    <privilegeDefinitions name="WRITE"/>
+  </privilegedElementDefinitions>
+  <constructedDataTypeDefinition arrayDatatypeSupported="true" multisetDatatypeSupported="true" rowDatatypeSupported="true" referenceDatatypeSupported="true" cursorDatatypeSupported="true"/>
+</DBDefinition:DatabaseVendorDefinition>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/runtime/vendors/DB2 UDB_9.8/DB2 UDB_9.8.xmi b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/runtime/vendors/DB2 UDB_9.8/DB2 UDB_9.8.xmi
new file mode 100644
index 0000000..94fcdb6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition/runtime/vendors/DB2 UDB_9.8/DB2 UDB_9.8.xmi
@@ -0,0 +1,1404 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="DB2 UDB" version="V9.8" maximumIdentifierLength="8" viewTriggerSupported="true" maximumCommentLength="64" sequenceSupported="true" mQTSupported="true" aliasSupported="true" userDefinedTypeSupported="true" SQLStatementSupported="true" nicknameSupported="true" xmlSupported="true" packageSupported="true" roleSupported="true" groupSupported="true" userSupported="true" roleAuthorizationSupported="true" constructedDataTypeSupported="true" mQTIndexSupported="true">
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="long">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIGINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_1" lengthSupported="true" maximumLength="2147483647" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob" defaultLength="1048576" lengthUnit="BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="127" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String" defaultLength="1" lengthUnit="DOUBLE_BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>GRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="16336" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String" defaultLength="32" lengthUnit="DOUBLE_BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARGRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_2" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARGRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="254" jdbcEnumType="1" javaClassName="java.lang.String" defaultLength="1">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR</name>
+    <name>CHARACTER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" lengthSupported="true" maximumLength="2147483647" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob" defaultLength="1048576" lengthUnit="BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CLOB</name>
+    <name>CHARACTER LARGE OBJECT</name>
+    <name>CHAR LARGE OBJECT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_LARGE_OBJECT_1" lengthSupported="true" maximumLength="1073741823" primitiveType="NATIONAL_CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob" defaultLength="1048576" lengthUnit="DOUBLE_BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DBCLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="32672" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String" defaultLength="32">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR</name>
+    <name>CHARACTER VARYING</name>
+    <name>CHAR VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_2" primitiveType="CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>CURRENT DATE</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" scaleSupported="true" precisionSupported="true" keyConstraintSupported="true" identitySupported="true" maximumPrecision="31" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal" defaultPrecision="5">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_2" precisionSupported="true" keyConstraintSupported="true" maximumPrecision="34" primitiveType="FLOAT" jdbcEnumType="3" javaClassName="java.math.BigDecimal" defaultPrecision="34">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECFLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE</name>
+    <name>DOUBLE PRECISION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" precisionSupported="true" keyConstraintSupported="true" maximumPrecision="53" primitiveType="FLOAT" jdbcEnumType="6" javaClassName="double" defaultPrecision="53" cutoffPrecision="25">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INTEGER</name>
+    <name>INT</name>
+    <name>BINARY_INTEGER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATALINK_1" lengthSupported="true" maximumLength="200" primitiveType="DATALINK" jdbcEnumType="70" javaClassName="java.net.URL" defaultLength="200" lengthUnit="BYTE">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATALINK</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" scaleSupported="true" precisionSupported="true" keyConstraintSupported="true" identitySupported="true" maximumPrecision="31" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal" defaultPrecision="5">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+    <name>NUM</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIME_1" keyConstraintSupported="true" primitiveType="TIME" jdbcEnumType="92" javaClassName="java.sql.Time">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>CURRENT TIME</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" precisionSupported="true" keyConstraintSupported="true" maximumPrecision="12" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp" defaultPrecision="6">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>CURRENT TIMESTAMP</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="254" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]" defaultLength="1" displayName="CHAR ({0}) FOR BIT DATA" displayNameSupported="true">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR FOR BIT DATA</name>
+    <name>CHARACTER FOR BIT DATA</name>
+    <name>CHAR () FOR BIT DATA</name>
+    <name>CHARACTER () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="32672" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]" defaultLength="1" displayName="VARCHAR ({0}) FOR BIT DATA" displayNameSupported="true">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR FOR BIT DATA</name>
+    <name>CHARACTER VARYING FOR BIT DATA</name>
+    <name>CHAR VARYING FOR BIT DATA</name>
+    <name>VARCHAR () FOR BIT DATA</name>
+    <name>CHARACTER VARYING () FOR BIT DATA</name>
+    <name>CHAR VARYING () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_2" primitiveType="BINARY_VARYING" jdbcEnumType="-4" javaClassName="byte[]">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARCHAR FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="XML_TYPE_1" primitiveType="XML_TYPE" jdbcEnumType="1111" orderingSupported="false" groupingSupported="false">
+    <name>XML</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions scaleSupported="true" precisionSupported="true" keyConstraintSupported="true" identitySupported="true" defaultSupported="false" maximumPrecision="31" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMBER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions lengthSupported="true" keyConstraintSupported="true" defaultSupported="false" maximumLength="32672" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String" defaultLength="4096">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR2</name>
+  </predefinedDataTypeDefinitions>
+  <tableSpaceDefinition typeSupported="true" extentSizeSupported="true" prefetchSizeSupported="true" managedBySupported="true" pageSizeSupported="true" bufferPoolSupported="true" maximumIdentifierLength="18">
+    <tableSpaceType>REGULAR</tableSpaceType>
+    <tableSpaceType>TEMPORARY</tableSpaceType>
+    <tableSpaceType>LARGE</tableSpaceType>
+  </tableSpaceDefinition>
+  <storedProcedureDefinition nullInputActionSupported="true" determininsticSupported="true" returnedNullSupported="true" parameterStyleSupported="true" maximumIdentifierLength="128">
+    <predefinedDataTypeDefinitions xmi:id="BOOLEAN_1" primitiveType="BOOLEAN" jdbcEnumType="-7" javaClassName="boolean">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>BOOLEAN</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="CURSOR_1" primitiveType="DATALINK" jdbcEnumType="-100008">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>CURSOR</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="INTEGER_2" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>PLS_INTEGER</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="INTEGER_3" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>BINARY_INTEGER</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="XML_TYPE_2" primitiveType="XML_TYPE" jdbcEnumType="1111" javaClassName="java.sql.Clob">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>XMLTYPE</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="BINARY_2" lengthSupported="true" maximumLength="32767" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]" defaultLength="32767">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>RAW</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_3" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>LONG RAW</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_LARGE_OBJECT_2" primitiveType="NATIONAL_CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>NCLOB</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_2" lengthSupported="true" maximumLength="2000" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String" defaultLength="127">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>NCHAR</name>
+      <name>NATIONAL CHARACTER</name>
+      <name>NATIONAL CHAR</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_3" lengthSupported="true" maximumLength="4000" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String" defaultLength="2048">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>NVARCHAR2</name>
+      <name>NATIONAL CHARACTER VARYING</name>
+      <name>NATIONAL CHAR VARYING</name>
+      <name>NCHAR VARYING</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="INTEGER_4" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>NATURAL</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="CURSOR_2" primitiveType="DATALINK" jdbcEnumType="-100008">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>SYS_REFCURSOR</name>
+      <name>REFCURSOR</name>
+      <name>REF CURSOR</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_3" lengthSupported="true" bitDataSupported="true" maximumLength="4000" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String" defaultLength="1" displayName="STRING({0})" displayNameSupported="true" lengthSemanticSupported="true">
+      <defaultValueTypes>USER</defaultValueTypes>
+      <defaultValueTypes>UID</defaultValueTypes>
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>STRING</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="INTEGER_5" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>POSITIVE</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="INTEGER_6" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+      <defaultValueTypes>NULL</defaultValueTypes>
+      <name>SIGNTYPE</name>
+      <languageType>PLSQL</languageType>
+    </predefinedDataTypeDefinitions>
+    <languageType>SQL</languageType>
+    <languageType>JAVA</languageType>
+    <languageType>C</languageType>
+    <languageType>COBOL</languageType>
+    <languageType>ASSEMBLY</languageType>
+    <languageType>PLI</languageType>
+    <functionLanguageType>SQL</functionLanguageType>
+    <functionLanguageType>JAVA</functionLanguageType>
+    <functionLanguageType>C</functionLanguageType>
+    <functionLanguageType>OLE</functionLanguageType>
+    <procedureType>PROCEDURE</procedureType>
+    <procedureType>FUNCTION</procedureType>
+  </storedProcedureDefinition>
+  <triggerDefinition granularitySupported="true" referencesClauseSupported="true" perColumnUpdateTriggerSupported="true" rowTriggerReferenceSupported="true" tableTriggerReferenceSupported="true" maximumIdentifierLength="128"/>
+  <columnDefinition identitySupported="true" identityStartValueSupported="true" identityIncrementSupported="true" identityMinimumSupported="true" identityMaximumSupported="true" identityCycleSupported="true" maximumIdentifierLength="128"/>
+  <constraintDefinition informationalConstraintSupported="true" clusteredPrimaryKeySupported="true" clusteredUniqueConstraintSupported="true" maximumPrimaryKeyIdentifierLength="128" maximumForeignKeyIdentifierLength="128" maximumCheckConstraintIdentifierLength="128">
+    <parentUpdateDRIRuleType>RESTRICT</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>RESTRICT</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>SET_NULL</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+    <checkOption>NONE</checkOption>
+    <checkOption>LOCAL</checkOption>
+    <checkOption>CASCADE</checkOption>
+  </constraintDefinition>
+  <indexDefinition clusteringSupported="true" includedColumnsSupported="true" maximumIdentifierLength="128"/>
+  <tableDefinition maximumIdentifierLength="128"/>
+  <sequenceDefinition predefinedDataTypeDefinitions="BIGINT_1 INTEGER_1 SMALLINT_1 DECIMAL_1" defaultDataTypeDefinition="INTEGER_1" typeEnumerationSupported="true" cacheSupported="true" orderSupported="true" noMaximumValueString="NO MAXVALUE" noMinimumValueString="NO MINVALUE" noCacheString="NO CACHE" cacheDefaultValue="20"/>
+  <udtDefinition distinctTypeSupported="true" structuredTypeSupported="true" maximumIdentifierLength="128"/>
+  <queryDefinition/>
+  <SQLSyntaxDefinition>
+    <keywords>ACCESS</keywords>
+    <keywords>ACCESSCTRL</keywords>
+    <keywords>ACCORDING</keywords>
+    <keywords>ACCTNG</keywords>
+    <keywords>ACTION</keywords>
+    <keywords>ACTIVATE</keywords>
+    <keywords>ACTIVITIES</keywords>
+    <keywords>ACTIVITY</keywords>
+    <keywords>ACTIVITYSTMT</keywords>
+    <keywords>ACTIVITYTOTALTIME</keywords>
+    <keywords>ACTIVITYVALS</keywords>
+    <keywords>ADD</keywords>
+    <keywords>ADDRESS</keywords>
+    <keywords>ADMIN</keywords>
+    <keywords>ADMINISTRATION</keywords>
+    <keywords>AFTER</keywords>
+    <keywords>AGE</keywords>
+    <keywords>AGENT</keywords>
+    <keywords>AGGREGATE</keywords>
+    <keywords>AGGSQLTEMPSPACE</keywords>
+    <keywords>ALIAS</keywords>
+    <keywords>ALL</keywords>
+    <keywords>ALLOCATE</keywords>
+    <keywords>ALLOW</keywords>
+    <keywords>ALTER</keywords>
+    <keywords>ALTERIN</keywords>
+    <keywords>ALWAYS</keywords>
+    <keywords>ANCHOR</keywords>
+    <keywords>AND</keywords>
+    <keywords>ANY</keywords>
+    <keywords>APPEND</keywords>
+    <keywords>APPLICATION</keywords>
+    <keywords>APPLNAME</keywords>
+    <keywords>APPL_ID</keywords>
+    <keywords>APPL_NAME</keywords>
+    <keywords>APREUSE</keywords>
+    <keywords>ARRAY</keywords>
+    <keywords>ARRAY_AGG</keywords>
+    <keywords>ARRAY_EXISTS</keywords>
+    <keywords>AS</keywords>
+    <keywords>ASC</keywords>
+    <keywords>ASCII</keywords>
+    <keywords>ASENSITIVE</keywords>
+    <keywords>ASSOCIATE</keywords>
+    <keywords>AST</keywords>
+    <keywords>ASUTIME</keywords>
+    <keywords>ASYNCHRONY</keywords>
+    <keywords>AT</keywords>
+    <keywords>ATOMIC</keywords>
+    <keywords>ATTACH</keywords>
+    <keywords>ATTRIBUTE</keywords>
+    <keywords>ATTRIBUTES</keywords>
+    <keywords>AUDIT</keywords>
+    <keywords>AUTHENTICATION</keywords>
+    <keywords>AUTHID</keywords>
+    <keywords>AUTHORIZATION</keywords>
+    <keywords>AUTHORIZATIONS</keywords>
+    <keywords>AUTHORIZED</keywords>
+    <keywords>AUTH_ID</keywords>
+    <keywords>AUTOMATIC</keywords>
+    <keywords>AUTONOMOUS</keywords>
+    <keywords>AUTONOMOUS_TRANSACTION</keywords>
+    <keywords>AUTORESIZE</keywords>
+    <keywords>AUTOSTART</keywords>
+    <keywords>B</keywords>
+    <keywords>BASE</keywords>
+    <keywords>BASE64</keywords>
+    <keywords>BASED</keywords>
+    <keywords>BEFORE</keywords>
+    <keywords>BEGIN</keywords>
+    <keywords>BERNOULLI</keywords>
+    <keywords>BETWEEN</keywords>
+    <keywords>BIGINT</keywords>
+    <keywords>BIN</keywords>
+    <keywords>BINARY</keywords>
+    <keywords>BINARY_INTEGER</keywords>
+    <keywords>BIND</keywords>
+    <keywords>BINDADD</keywords>
+    <keywords>BIT</keywords>
+    <keywords>BLOB</keywords>
+    <keywords>BLOCKED</keywords>
+    <keywords>BLOCKINSERT</keywords>
+    <keywords>BLOCKSIZE</keywords>
+    <keywords>BODY</keywords>
+    <keywords>BOOLEAN</keywords>
+    <keywords>BOTH</keywords>
+    <keywords>BUFFER</keywords>
+    <keywords>BUFFERPOOL</keywords>
+    <keywords>BUFFERPOOLS</keywords>
+    <keywords>BUFFERSIZE</keywords>
+    <keywords>BUILD</keywords>
+    <keywords>BULK</keywords>
+    <keywords>BY</keywords>
+    <keywords>BYPASS</keywords>
+    <keywords>C</keywords>
+    <keywords>CACHE</keywords>
+    <keywords>CACHING</keywords>
+    <keywords>CALL</keywords>
+    <keywords>CALLED</keywords>
+    <keywords>CALLER</keywords>
+    <keywords>CAPTURE</keywords>
+    <keywords>CARDINALITIES</keywords>
+    <keywords>CARDINALITY</keywords>
+    <keywords>CASCADE</keywords>
+    <keywords>CASCADED</keywords>
+    <keywords>CASE</keywords>
+    <keywords>CAST</keywords>
+    <keywords>CATEGORIES</keywords>
+    <keywords>CCSID</keywords>
+    <keywords>CHANGE</keywords>
+    <keywords>CHANGED</keywords>
+    <keywords>CHANGES</keywords>
+    <keywords>CHAR</keywords>
+    <keywords>CHARACTER</keywords>
+    <keywords>CHECK</keywords>
+    <keywords>CHECKED</keywords>
+    <keywords>CHECKING</keywords>
+    <keywords>CLASS</keywords>
+    <keywords>CLIENT</keywords>
+    <keywords>CLIENT_ACCTNG</keywords>
+    <keywords>CLIENT_APPLNAME</keywords>
+    <keywords>CLIENT_USERID</keywords>
+    <keywords>CLIENT_WRKSTNNAME</keywords>
+    <keywords>CLOB</keywords>
+    <keywords>CLOSE</keywords>
+    <keywords>CLR</keywords>
+    <keywords>CLUSTER</keywords>
+    <keywords>COBOL</keywords>
+    <keywords>CODEUNITS16</keywords>
+    <keywords>CODEUNITS32</keywords>
+    <keywords>COLLECT</keywords>
+    <keywords>COLLID</keywords>
+    <keywords>COLUMN</keywords>
+    <keywords>COLUMNS</keywords>
+    <keywords>COMM</keywords>
+    <keywords>COMMENT</keywords>
+    <keywords>COMMIT</keywords>
+    <keywords>COMMITTED</keywords>
+    <keywords>COMPACT</keywords>
+    <keywords>COMPARE</keywords>
+    <keywords>COMPARISONS</keywords>
+    <keywords>COMPILATION</keywords>
+    <keywords>COMPILEDFUNCTION</keywords>
+    <keywords>COMPILEDTRIGGER</keywords>
+    <keywords>COMPONENT</keywords>
+    <keywords>COMPONENTS</keywords>
+    <keywords>COMPOUND</keywords>
+    <keywords>COMPRESS</keywords>
+    <keywords>COMPRESSION</keywords>
+    <keywords>CONCAT</keywords>
+    <keywords>CONCURRENTDBCOORDACTIVITIES</keywords>
+    <keywords>CONCURRENTWORKLOADACTIVITIES</keywords>
+    <keywords>CONCURRENTWORKLOADOCCURRENCES</keywords>
+    <keywords>CONDITION</keywords>
+    <keywords>CONN</keywords>
+    <keywords>CONNECT</keywords>
+    <keywords>CONNECTION</keywords>
+    <keywords>CONNECTIONIDLETIME</keywords>
+    <keywords>CONNECTIONS</keywords>
+    <keywords>CONNECTOPT</keywords>
+    <keywords>CONNECT_BY_ROOT</keywords>
+    <keywords>CONNHEADER</keywords>
+    <keywords>CONNMEMUSE</keywords>
+    <keywords>CONSERVATIVE</keywords>
+    <keywords>CONSTANT</keywords>
+    <keywords>CONSTRAINT</keywords>
+    <keywords>CONSTRAINTS</keywords>
+    <keywords>CONSTRUCTOR</keywords>
+    <keywords>CONTAINERS</keywords>
+    <keywords>CONTAINS</keywords>
+    <keywords>CONTENT</keywords>
+    <keywords>CONTEXT</keywords>
+    <keywords>CONTINUE</keywords>
+    <keywords>CONTROL</keywords>
+    <keywords>CONVERT</keywords>
+    <keywords>COORDINATOR</keywords>
+    <keywords>COPY</keywords>
+    <keywords>CORRELATOR</keywords>
+    <keywords>COUNT</keywords>
+    <keywords>COUNT_BIG</keywords>
+    <keywords>CPU</keywords>
+    <keywords>CPUTIME</keywords>
+    <keywords>CPUTIMEINSC</keywords>
+    <keywords>CREATE</keywords>
+    <keywords>CREATEIN</keywords>
+    <keywords>CREATETAB</keywords>
+    <keywords>CREATE_EXTERNAL_ROUTINE</keywords>
+    <keywords>CREATE_NOT_FENCED</keywords>
+    <keywords>CREATE_NOT_FENCED_ROUTINE</keywords>
+    <keywords>CROSS</keywords>
+    <keywords>CS</keywords>
+    <keywords>CUBE</keywords>
+    <keywords>CURRENT</keywords>
+    <keywords>CURRENT_DATE</keywords>
+    <keywords>CURRENT_PATH</keywords>
+    <keywords>CURRENT_SCHEMA</keywords>
+    <keywords>CURRENT_SERVER</keywords>
+    <keywords>CURRENT_TIME</keywords>
+    <keywords>CURRENT_TIMESTAMP</keywords>
+    <keywords>CURRENT_TIMEZONE</keywords>
+    <keywords>CURRENT_USER</keywords>
+    <keywords>CURRVAL</keywords>
+    <keywords>CURSOR</keywords>
+    <keywords>CURSORS</keywords>
+    <keywords>CYCLE</keywords>
+    <keywords>DATA</keywords>
+    <keywords>DATAACCESS</keywords>
+    <keywords>DATABASE</keywords>
+    <keywords>DATE</keywords>
+    <keywords>DAY</keywords>
+    <keywords>DAYS</keywords>
+    <keywords>DB</keywords>
+    <keywords>DB2DARI</keywords>
+    <keywords>DB2GENERAL</keywords>
+    <keywords>DB2GENRL</keywords>
+    <keywords>DB2LBACREADARRAY</keywords>
+    <keywords>DB2LBACREADSET</keywords>
+    <keywords>DB2LBACREADTREE</keywords>
+    <keywords>DB2LBACRULES</keywords>
+    <keywords>DB2LBACWRITEARRAY</keywords>
+    <keywords>DB2LBACWRITESET</keywords>
+    <keywords>DB2LBACWRITETREE</keywords>
+    <keywords>DB2SECURITYLABEL</keywords>
+    <keywords>DB2SPL</keywords>
+    <keywords>DB2SQL</keywords>
+    <keywords>DB2VALIDATE</keywords>
+    <keywords>DB2_RETURN_STATUS</keywords>
+    <keywords>DB2_TOKEN_STRING</keywords>
+    <keywords>DBADM</keywords>
+    <keywords>DBCLOB</keywords>
+    <keywords>DBINFO</keywords>
+    <keywords>DBMEMUSE</keywords>
+    <keywords>DBPARTITIONNUM</keywords>
+    <keywords>DBPARTITIONNUMS</keywords>
+    <keywords>DBPARTITIONS</keywords>
+    <keywords>DDL</keywords>
+    <keywords>DEACTIVATE</keywords>
+    <keywords>DEADLOCK</keywords>
+    <keywords>DEADLOCKS</keywords>
+    <keywords>DEBUGINFO</keywords>
+    <keywords>DEC</keywords>
+    <keywords>DECFLOAT</keywords>
+    <keywords>DECIMAL</keywords>
+    <keywords>DECLARE</keywords>
+    <keywords>DECOMPOSITION</keywords>
+    <keywords>DEFAULT</keywords>
+    <keywords>DEFAULTS</keywords>
+    <keywords>DEFER</keywords>
+    <keywords>DEFERRED</keywords>
+    <keywords>DEFINE</keywords>
+    <keywords>DEFINER</keywords>
+    <keywords>DEFINITION</keywords>
+    <keywords>DEGREE</keywords>
+    <keywords>DELETE</keywords>
+    <keywords>DEPENDENT</keywords>
+    <keywords>DESC</keywords>
+    <keywords>DESCRIPTOR</keywords>
+    <keywords>DETACH</keywords>
+    <keywords>DETAILED</keywords>
+    <keywords>DETAILS</keywords>
+    <keywords>DETERMINED</keywords>
+    <keywords>DETERMINISTIC</keywords>
+    <keywords>DEVICE</keywords>
+    <keywords>DIAGNOSTICS</keywords>
+    <keywords>DIMENSIONS</keywords>
+    <keywords>DIRTY</keywords>
+    <keywords>DISABLE</keywords>
+    <keywords>DISALLOW</keywords>
+    <keywords>DISPATCH</keywords>
+    <keywords>DISTINCT</keywords>
+    <keywords>DISTRIBUTE</keywords>
+    <keywords>DISTRIBUTED</keywords>
+    <keywords>DISTRIBUTION</keywords>
+    <keywords>DLCONN</keywords>
+    <keywords>DLLOCK</keywords>
+    <keywords>DML</keywords>
+    <keywords>DO</keywords>
+    <keywords>DOCUMENT</keywords>
+    <keywords>DOUBLE</keywords>
+    <keywords>DROP</keywords>
+    <keywords>DROPIN</keywords>
+    <keywords>DROPPED</keywords>
+    <keywords>DYNAMIC</keywords>
+    <keywords>EACH</keywords>
+    <keywords>ELEMENT</keywords>
+    <keywords>ELSE</keywords>
+    <keywords>ELSEIF</keywords>
+    <keywords>ELSIF</keywords>
+    <keywords>EMPTY</keywords>
+    <keywords>ENABLE</keywords>
+    <keywords>ENCRYPTION</keywords>
+    <keywords>END</keywords>
+    <keywords>ENDING</keywords>
+    <keywords>ENFORCED</keywords>
+    <keywords>ENFORCEMENT</keywords>
+    <keywords>ENVIRONMENT</keywords>
+    <keywords>ERASE</keywords>
+    <keywords>ERROR</keywords>
+    <keywords>ESCAPE</keywords>
+    <keywords>ESTIMATE</keywords>
+    <keywords>ESTIMATEDCOST</keywords>
+    <keywords>ESTIMATEDSQLCOST</keywords>
+    <keywords>EUR</keywords>
+    <keywords>EVALUATE</keywords>
+    <keywords>EVENT</keywords>
+    <keywords>EVERY</keywords>
+    <keywords>EXACT</keywords>
+    <keywords>EXCEEDED</keywords>
+    <keywords>EXCEPT</keywords>
+    <keywords>EXCEPTION</keywords>
+    <keywords>EXCEPTION_INIT</keywords>
+    <keywords>EXCLUDES</keywords>
+    <keywords>EXCLUDING</keywords>
+    <keywords>EXCLUSIVE</keywords>
+    <keywords>EXECNODE</keywords>
+    <keywords>EXECUTE</keywords>
+    <keywords>EXECUTETIME</keywords>
+    <keywords>EXECUTION</keywords>
+    <keywords>EXEMPTION</keywords>
+    <keywords>EXISTS</keywords>
+    <keywords>EXIT</keywords>
+    <keywords>EXPAND</keywords>
+    <keywords>EXPLAIN</keywords>
+    <keywords>EXPRESSION</keywords>
+    <keywords>EXTEND</keywords>
+    <keywords>EXTENDED</keywords>
+    <keywords>EXTENSION</keywords>
+    <keywords>EXTENTSIZE</keywords>
+    <keywords>EXTERNAL</keywords>
+    <keywords>EXTRACT</keywords>
+    <keywords>FAILURE</keywords>
+    <keywords>FALSE</keywords>
+    <keywords>FEDERATED</keywords>
+    <keywords>FEDERATED_TOOL</keywords>
+    <keywords>FENCED</keywords>
+    <keywords>FETCH</keywords>
+    <keywords>FILE</keywords>
+    <keywords>FILEREAD</keywords>
+    <keywords>FILEWRITE</keywords>
+    <keywords>FILTER</keywords>
+    <keywords>FINAL</keywords>
+    <keywords>FIRST</keywords>
+    <keywords>FLOAT</keywords>
+    <keywords>FLUSH</keywords>
+    <keywords>FOLLOWING</keywords>
+    <keywords>FOLLOWS</keywords>
+    <keywords>FOR</keywords>
+    <keywords>FORALL</keywords>
+    <keywords>FORCE</keywords>
+    <keywords>FOREIGN</keywords>
+    <keywords>FOUND</keywords>
+    <keywords>FREE</keywords>
+    <keywords>FREEPAGE</keywords>
+    <keywords>FROM</keywords>
+    <keywords>FULL</keywords>
+    <keywords>FUNCTION</keywords>
+    <keywords>G</keywords>
+    <keywords>GBPCACHE</keywords>
+    <keywords>GENERAL</keywords>
+    <keywords>GENERATE</keywords>
+    <keywords>GENERATED</keywords>
+    <keywords>GET</keywords>
+    <keywords>GLOBAL</keywords>
+    <keywords>GOTO</keywords>
+    <keywords>GRANT</keywords>
+    <keywords>GRAPHIC</keywords>
+    <keywords>GROUP</keywords>
+    <keywords>GROUPING</keywords>
+    <keywords>HANDLER</keywords>
+    <keywords>HARD</keywords>
+    <keywords>HASH</keywords>
+    <keywords>HASHED</keywords>
+    <keywords>HASHING</keywords>
+    <keywords>HAVING</keywords>
+    <keywords>HEX</keywords>
+    <keywords>HIDDEN</keywords>
+    <keywords>HIERARCHY</keywords>
+    <keywords>HIGH</keywords>
+    <keywords>HISTOGRAM</keywords>
+    <keywords>HISTOGRAMBIN</keywords>
+    <keywords>HISTORY</keywords>
+    <keywords>HOLD</keywords>
+    <keywords>HOUR</keywords>
+    <keywords>HOURS</keywords>
+    <keywords>HPJ</keywords>
+    <keywords>ID</keywords>
+    <keywords>IDENTITY</keywords>
+    <keywords>IF</keywords>
+    <keywords>IGNORE</keywords>
+    <keywords>IMMEDIATE</keywords>
+    <keywords>IMPLICIT</keywords>
+    <keywords>IMPLICITLY</keywords>
+    <keywords>IMPLICIT_SCHEMA</keywords>
+    <keywords>IN</keywords>
+    <keywords>INCLUDE</keywords>
+    <keywords>INCLUDES</keywords>
+    <keywords>INCLUDING</keywords>
+    <keywords>INCLUSIVE</keywords>
+    <keywords>INCREASESIZE</keywords>
+    <keywords>INCREMENT</keywords>
+    <keywords>INCREMENTAL</keywords>
+    <keywords>INDEX</keywords>
+    <keywords>INDEXES</keywords>
+    <keywords>INDICATOR</keywords>
+    <keywords>INDICES</keywords>
+    <keywords>INF</keywords>
+    <keywords>INFINITY</keywords>
+    <keywords>INFIX</keywords>
+    <keywords>INFO</keywords>
+    <keywords>INHERIT</keywords>
+    <keywords>INITIALLY</keywords>
+    <keywords>INITIALSIZE</keywords>
+    <keywords>INITIAL_INSTS</keywords>
+    <keywords>INITIAL_IOS</keywords>
+    <keywords>INLINE</keywords>
+    <keywords>INLINEFUNCTION</keywords>
+    <keywords>INLINETRIGGER</keywords>
+    <keywords>INNER</keywords>
+    <keywords>INOUT</keywords>
+    <keywords>INPUT</keywords>
+    <keywords>INSENSITIVE</keywords>
+    <keywords>INSERT</keywords>
+    <keywords>INSTANTIABLE</keywords>
+    <keywords>INSTEAD</keywords>
+    <keywords>INSTS_PER_ARGBYTE</keywords>
+    <keywords>INSTS_PER_INVOC</keywords>
+    <keywords>INT</keywords>
+    <keywords>INTEGER</keywords>
+    <keywords>INTEGRITY</keywords>
+    <keywords>INTERARRIVALTIME</keywords>
+    <keywords>INTERSECT</keywords>
+    <keywords>INTO</keywords>
+    <keywords>INVALID</keywords>
+    <keywords>INVALIDATION</keywords>
+    <keywords>IO</keywords>
+    <keywords>IOS_PER_ARGBYTE</keywords>
+    <keywords>IOS_PER_INVOC</keywords>
+    <keywords>IS</keywords>
+    <keywords>ISO</keywords>
+    <keywords>ISOLATION</keywords>
+    <keywords>ITERATE</keywords>
+    <keywords>JAVA</keywords>
+    <keywords>JIS</keywords>
+    <keywords>JOIN</keywords>
+    <keywords>K</keywords>
+    <keywords>KEEP</keywords>
+    <keywords>KEY</keywords>
+    <keywords>KEYS</keywords>
+    <keywords>L</keywords>
+    <keywords>LABEL</keywords>
+    <keywords>LANGUAGE</keywords>
+    <keywords>LARGE</keywords>
+    <keywords>LAST</keywords>
+    <keywords>LATERAL</keywords>
+    <keywords>LC_CTYPE</keywords>
+    <keywords>LC_MESSAGES</keywords>
+    <keywords>LC_TIME</keywords>
+    <keywords>LEADING</keywords>
+    <keywords>LEAVE</keywords>
+    <keywords>LEFT</keywords>
+    <keywords>LENGTH</keywords>
+    <keywords>LEVEL</keywords>
+    <keywords>LEVEL2</keywords>
+    <keywords>LIBRARY</keywords>
+    <keywords>LIBRARYADM</keywords>
+    <keywords>LIFETIME</keywords>
+    <keywords>LIKE</keywords>
+    <keywords>LIMIT</keywords>
+    <keywords>LIST</keywords>
+    <keywords>LOAD</keywords>
+    <keywords>LOCAL</keywords>
+    <keywords>LOCALE</keywords>
+    <keywords>LOCATION</keywords>
+    <keywords>LOCATOR</keywords>
+    <keywords>LOCATORS</keywords>
+    <keywords>LOCK</keywords>
+    <keywords>LOCKED</keywords>
+    <keywords>LOCKING</keywords>
+    <keywords>LOCKS</keywords>
+    <keywords>LOCKSIZE</keywords>
+    <keywords>LOG</keywords>
+    <keywords>LOGGED</keywords>
+    <keywords>LONG</keywords>
+    <keywords>LONGVAR</keywords>
+    <keywords>LOOP</keywords>
+    <keywords>LOW</keywords>
+    <keywords>LOWER</keywords>
+    <keywords>M</keywords>
+    <keywords>MAIN</keywords>
+    <keywords>MAINTAINED</keywords>
+    <keywords>MANAGED</keywords>
+    <keywords>MANUALSTART</keywords>
+    <keywords>MAP</keywords>
+    <keywords>MAPPING</keywords>
+    <keywords>MARK</keywords>
+    <keywords>MATCHED</keywords>
+    <keywords>MATCHING</keywords>
+    <keywords>MATERIALIZED</keywords>
+    <keywords>MAX</keywords>
+    <keywords>MAXFILES</keywords>
+    <keywords>MAXFILESIZE</keywords>
+    <keywords>MAXSIZE</keywords>
+    <keywords>MAXVALUE</keywords>
+    <keywords>MDC</keywords>
+    <keywords>MEDIUM</keywords>
+    <keywords>MEMBER</keywords>
+    <keywords>MEMBERS</keywords>
+    <keywords>MERGE</keywords>
+    <keywords>MESSAGE_TEXT</keywords>
+    <keywords>METHOD</keywords>
+    <keywords>METHODS</keywords>
+    <keywords>METRICS</keywords>
+    <keywords>MICROSECOND</keywords>
+    <keywords>MICROSECONDS</keywords>
+    <keywords>MINPCTUSED</keywords>
+    <keywords>MINUS</keywords>
+    <keywords>MINUTE</keywords>
+    <keywords>MINUTES</keywords>
+    <keywords>MINVALUE</keywords>
+    <keywords>MISSING</keywords>
+    <keywords>MIXED</keywords>
+    <keywords>MODE</keywords>
+    <keywords>MODIFIES</keywords>
+    <keywords>MODULE</keywords>
+    <keywords>MONITOR</keywords>
+    <keywords>MONTH</keywords>
+    <keywords>MONTHS</keywords>
+    <keywords>MORE</keywords>
+    <keywords>MOVEMENT</keywords>
+    <keywords>NAME</keywords>
+    <keywords>NAMESPACE</keywords>
+    <keywords>NAN</keywords>
+    <keywords>NATURAL</keywords>
+    <keywords>NCHAR</keywords>
+    <keywords>NCLOB</keywords>
+    <keywords>NESTED</keywords>
+    <keywords>NETWORK</keywords>
+    <keywords>NEW</keywords>
+    <keywords>NEW_TABLE</keywords>
+    <keywords>NEXT</keywords>
+    <keywords>NEXTVAL</keywords>
+    <keywords>NICKNAME</keywords>
+    <keywords>NO</keywords>
+    <keywords>NOCACHE</keywords>
+    <keywords>NOCOPY</keywords>
+    <keywords>NOCYCLE</keywords>
+    <keywords>NODE</keywords>
+    <keywords>NODEGROUP</keywords>
+    <keywords>NODES</keywords>
+    <keywords>NOMAXVALUE</keywords>
+    <keywords>NOMINVALUE</keywords>
+    <keywords>NONBLOCKED</keywords>
+    <keywords>NONE</keywords>
+    <keywords>NOORDER</keywords>
+    <keywords>NORMAL</keywords>
+    <keywords>NOT</keywords>
+    <keywords>NULL</keywords>
+    <keywords>NULLS</keywords>
+    <keywords>NUM</keywords>
+    <keywords>NUMBER</keywords>
+    <keywords>NUMBLOCKPAGES</keywords>
+    <keywords>NUMERIC</keywords>
+    <keywords>NUM_EXECUTIONS</keywords>
+    <keywords>NUM_FREQVALUES</keywords>
+    <keywords>NUM_QUANTILES</keywords>
+    <keywords>NVARCHAR2</keywords>
+    <keywords>OBJECT</keywords>
+    <keywords>OBJMAINT</keywords>
+    <keywords>OCCURRENCE</keywords>
+    <keywords>OCTETS</keywords>
+    <keywords>OF</keywords>
+    <keywords>OFF</keywords>
+    <keywords>OLD</keywords>
+    <keywords>OLD_TABLE</keywords>
+    <keywords>OLE</keywords>
+    <keywords>OLEDB</keywords>
+    <keywords>ON</keywords>
+    <keywords>ONCE</keywords>
+    <keywords>ONLINE</keywords>
+    <keywords>ONLY</keywords>
+    <keywords>OPEN</keywords>
+    <keywords>OPTIMIZATION</keywords>
+    <keywords>OPTIMIZE</keywords>
+    <keywords>OPTION</keywords>
+    <keywords>OPTIONS</keywords>
+    <keywords>OPTPROFILE</keywords>
+    <keywords>OR</keywords>
+    <keywords>ORDER</keywords>
+    <keywords>ORDINALITY</keywords>
+    <keywords>ORGANIZE</keywords>
+    <keywords>OUT</keywords>
+    <keywords>OUTBOUND</keywords>
+    <keywords>OUTER</keywords>
+    <keywords>OVER</keywords>
+    <keywords>OVERFLOW</keywords>
+    <keywords>OVERHEAD</keywords>
+    <keywords>OVERRIDE</keywords>
+    <keywords>OVERRIDING</keywords>
+    <keywords>OWNERSHIP</keywords>
+    <keywords>P</keywords>
+    <keywords>PACKAGE</keywords>
+    <keywords>PAGE</keywords>
+    <keywords>PAGESIZE</keywords>
+    <keywords>PARALLEL</keywords>
+    <keywords>PARAMETER</keywords>
+    <keywords>PARAMETERS</keywords>
+    <keywords>PARENT</keywords>
+    <keywords>PART</keywords>
+    <keywords>PARTITION</keywords>
+    <keywords>PARTITIONED</keywords>
+    <keywords>PARTITIONING</keywords>
+    <keywords>PARTITIONINGS</keywords>
+    <keywords>PARTITIONS</keywords>
+    <keywords>PASSING</keywords>
+    <keywords>PASSTHRU</keywords>
+    <keywords>PASSWORD</keywords>
+    <keywords>PATH</keywords>
+    <keywords>PATROLLER</keywords>
+    <keywords>PCTDEACTIVATE</keywords>
+    <keywords>PCTFREE</keywords>
+    <keywords>PERCENT</keywords>
+    <keywords>PERCENT_ARGBYTES</keywords>
+    <keywords>PERFORM</keywords>
+    <keywords>PIECESIZE</keywords>
+    <keywords>PIPE</keywords>
+    <keywords>PLACING</keywords>
+    <keywords>PLAN</keywords>
+    <keywords>PLS_INTEGER</keywords>
+    <keywords>POLICY</keywords>
+    <keywords>POSITION</keywords>
+    <keywords>PRAGMA</keywords>
+    <keywords>PRECEDING</keywords>
+    <keywords>PRECISION</keywords>
+    <keywords>PREDICATES</keywords>
+    <keywords>PREFETCH</keywords>
+    <keywords>PREFETCHSIZE</keywords>
+    <keywords>PREPARE</keywords>
+    <keywords>PRESERVE</keywords>
+    <keywords>PREVENT</keywords>
+    <keywords>PREVIOUS</keywords>
+    <keywords>PREVVAL</keywords>
+    <keywords>PRIMARY</keywords>
+    <keywords>PRIOR</keywords>
+    <keywords>PRIORITY</keywords>
+    <keywords>PRIQTY</keywords>
+    <keywords>PRIVILEGES</keywords>
+    <keywords>PROCEDURE</keywords>
+    <keywords>PROFILE</keywords>
+    <keywords>PROGRAM</keywords>
+    <keywords>PROPAGATE</keywords>
+    <keywords>PROTOCOL</keywords>
+    <keywords>PRUNE</keywords>
+    <keywords>PUBLIC</keywords>
+    <keywords>PUBLISH</keywords>
+    <keywords>QSTATS</keywords>
+    <keywords>QUERY</keywords>
+    <keywords>QUERYNO</keywords>
+    <keywords>QUERYTAG</keywords>
+    <keywords>QUEUEDACTIVITIES</keywords>
+    <keywords>QUEUEDCONNECTIONS</keywords>
+    <keywords>QUEUETIME</keywords>
+    <keywords>QUIESCE_CONNECT</keywords>
+    <keywords>RAISE</keywords>
+    <keywords>RAISE_APPLICATION_ERROR</keywords>
+    <keywords>RANGE</keywords>
+    <keywords>RATE</keywords>
+    <keywords>RATIO</keywords>
+    <keywords>RAW</keywords>
+    <keywords>READ</keywords>
+    <keywords>READS</keywords>
+    <keywords>REAL</keywords>
+    <keywords>REBALANCE</keywords>
+    <keywords>RECOMMEND</keywords>
+    <keywords>RECORD</keywords>
+    <keywords>RECOVERY</keywords>
+    <keywords>RECREATE</keywords>
+    <keywords>REDIRECT</keywords>
+    <keywords>REDUCE</keywords>
+    <keywords>REF</keywords>
+    <keywords>REFERENCE</keywords>
+    <keywords>REFERENCES</keywords>
+    <keywords>REFERENCING</keywords>
+    <keywords>REFRESH</keywords>
+    <keywords>REGISTERS</keywords>
+    <keywords>REGULAR</keywords>
+    <keywords>REJECT</keywords>
+    <keywords>RELEASE</keywords>
+    <keywords>REMAP</keywords>
+    <keywords>REMOTE</keywords>
+    <keywords>REMOVE</keywords>
+    <keywords>RENAME</keywords>
+    <keywords>REOPT</keywords>
+    <keywords>REPEAT</keywords>
+    <keywords>REPEATABLE</keywords>
+    <keywords>REPLACE</keywords>
+    <keywords>REPLICATED</keywords>
+    <keywords>REPLICATION</keywords>
+    <keywords>REQUEST</keywords>
+    <keywords>REQUIRE</keywords>
+    <keywords>RESET</keywords>
+    <keywords>RESIDENT</keywords>
+    <keywords>RESIGNAL</keywords>
+    <keywords>RESIZE</keywords>
+    <keywords>RESOLVE</keywords>
+    <keywords>RESTART</keywords>
+    <keywords>RESTRICT</keywords>
+    <keywords>RESULT</keywords>
+    <keywords>RESULT_SET_LOCATOR</keywords>
+    <keywords>RETAIN</keywords>
+    <keywords>RETURN</keywords>
+    <keywords>RETURNING</keywords>
+    <keywords>RETURNS</keywords>
+    <keywords>RETURN_STATUS</keywords>
+    <keywords>REUSE</keywords>
+    <keywords>REVERSE</keywords>
+    <keywords>REVOKE</keywords>
+    <keywords>RID</keywords>
+    <keywords>RID_BIT</keywords>
+    <keywords>RIGHT</keywords>
+    <keywords>ROLE</keywords>
+    <keywords>ROLLBACK</keywords>
+    <keywords>ROLLOUT</keywords>
+    <keywords>ROLLUP</keywords>
+    <keywords>ROOT</keywords>
+    <keywords>ROUNDING</keywords>
+    <keywords>ROUND_CEILING</keywords>
+    <keywords>ROUND_DOWN</keywords>
+    <keywords>ROUND_FLOOR</keywords>
+    <keywords>ROUND_HALF_EVEN</keywords>
+    <keywords>ROUND_HALF_UP</keywords>
+    <keywords>ROUTINES</keywords>
+    <keywords>ROW</keywords>
+    <keywords>ROWS</keywords>
+    <keywords>ROW_COUNT</keywords>
+    <keywords>RR</keywords>
+    <keywords>RS</keywords>
+    <keywords>RULE</keywords>
+    <keywords>RUN</keywords>
+    <keywords>S</keywords>
+    <keywords>SAFE</keywords>
+    <keywords>SAMPLED</keywords>
+    <keywords>SAVEPOINT</keywords>
+    <keywords>SBCS</keywords>
+    <keywords>SCANS</keywords>
+    <keywords>SCHEMA</keywords>
+    <keywords>SCOPE</keywords>
+    <keywords>SCRATCHPAD</keywords>
+    <keywords>SCROLL</keywords>
+    <keywords>SCSTATS</keywords>
+    <keywords>SEARCH</keywords>
+    <keywords>SECADM</keywords>
+    <keywords>SECMAINT</keywords>
+    <keywords>SECOND</keywords>
+    <keywords>SECONDS</keywords>
+    <keywords>SECQTY</keywords>
+    <keywords>SECTION</keywords>
+    <keywords>SECURED</keywords>
+    <keywords>SECURITY</keywords>
+    <keywords>SELECT</keywords>
+    <keywords>SELECTION</keywords>
+    <keywords>SELECTIVITY</keywords>
+    <keywords>SELF</keywords>
+    <keywords>SENSITIVE</keywords>
+    <keywords>SEQUENCE</keywords>
+    <keywords>SERIALIZABLE</keywords>
+    <keywords>SERVER</keywords>
+    <keywords>SERVICE</keywords>
+    <keywords>SESSION</keywords>
+    <keywords>SESSION_USER</keywords>
+    <keywords>SET</keywords>
+    <keywords>SETS</keywords>
+    <keywords>SETSESSIONUSER</keywords>
+    <keywords>SETTING</keywords>
+    <keywords>SHARE</keywords>
+    <keywords>SHRLEVEL</keywords>
+    <keywords>SIBLINGS</keywords>
+    <keywords>SIGNAL</keywords>
+    <keywords>SIMPLE</keywords>
+    <keywords>SIZE</keywords>
+    <keywords>SKIP</keywords>
+    <keywords>SMALLINT</keywords>
+    <keywords>SNAN</keywords>
+    <keywords>SNAPSHOT</keywords>
+    <keywords>SOME</keywords>
+    <keywords>SOURCE</keywords>
+    <keywords>SPECIAL</keywords>
+    <keywords>SPECIFIC</keywords>
+    <keywords>SPECIFICATION</keywords>
+    <keywords>SPLIT</keywords>
+    <keywords>SQL</keywords>
+    <keywords>SQLADM</keywords>
+    <keywords>SQLCODE</keywords>
+    <keywords>SQLDATA</keywords>
+    <keywords>SQLERRM</keywords>
+    <keywords>SQLEXCEPTION</keywords>
+    <keywords>SQLID</keywords>
+    <keywords>SQLINTERNAL</keywords>
+    <keywords>SQLROWSREAD</keywords>
+    <keywords>SQLROWSREADINSC</keywords>
+    <keywords>SQLROWSRETURNED</keywords>
+    <keywords>SQLSTATE</keywords>
+    <keywords>SQLTEMPSPACE</keywords>
+    <keywords>SQLWARNING</keywords>
+    <keywords>SQL_CCFLAGS</keywords>
+    <keywords>SSA</keywords>
+    <keywords>STABILITY</keywords>
+    <keywords>STAGING</keywords>
+    <keywords>START</keywords>
+    <keywords>STARTING</keywords>
+    <keywords>STATE</keywords>
+    <keywords>STATEMENT</keywords>
+    <keywords>STATEMENTS</keywords>
+    <keywords>STATIC</keywords>
+    <keywords>STATISTICS</keywords>
+    <keywords>STATUS</keywords>
+    <keywords>STAY</keywords>
+    <keywords>STMT</keywords>
+    <keywords>STMTHIST</keywords>
+    <keywords>STMTVALS</keywords>
+    <keywords>STMT_EXEC_TIME</keywords>
+    <keywords>STOGROUP</keywords>
+    <keywords>STOP</keywords>
+    <keywords>STORAGE</keywords>
+    <keywords>STRIP</keywords>
+    <keywords>STRIPE</keywords>
+    <keywords>STYLE</keywords>
+    <keywords>SUB</keywords>
+    <keywords>SUBSECTION</keywords>
+    <keywords>SUCCESS</keywords>
+    <keywords>SUMMARY</keywords>
+    <keywords>SWITCH</keywords>
+    <keywords>SYMMETRIC</keywords>
+    <keywords>SYNONYM</keywords>
+    <keywords>SYSADM</keywords>
+    <keywords>SYSADMIN</keywords>
+    <keywords>SYSCTRL</keywords>
+    <keywords>SYSDATE</keywords>
+    <keywords>SYSMAINT</keywords>
+    <keywords>SYSMON</keywords>
+    <keywords>SYSPROC</keywords>
+    <keywords>SYSTEM</keywords>
+    <keywords>SYSTEM_USER</keywords>
+    <keywords>SYS_REFCURSOR</keywords>
+    <keywords>T</keywords>
+    <keywords>TABLE</keywords>
+    <keywords>TABLES</keywords>
+    <keywords>TABLESAMPLE</keywords>
+    <keywords>TABLESPACE</keywords>
+    <keywords>TABLESPACES</keywords>
+    <keywords>TARGET</keywords>
+    <keywords>TEMPLATE</keywords>
+    <keywords>TEMPORARY</keywords>
+    <keywords>THAN</keywords>
+    <keywords>THEN</keywords>
+    <keywords>THREADSAFE</keywords>
+    <keywords>THRESHOLD</keywords>
+    <keywords>THRESHOLDVIOLATIONS</keywords>
+    <keywords>THROUGH</keywords>
+    <keywords>TIME</keywords>
+    <keywords>TIMEOUT</keywords>
+    <keywords>TIMERONCOST</keywords>
+    <keywords>TIMESTAMP</keywords>
+    <keywords>TIMEZONE</keywords>
+    <keywords>TO</keywords>
+    <keywords>TOKEN</keywords>
+    <keywords>TOTALDBPARTITIONCONNECTIONS</keywords>
+    <keywords>TOTALMEMBERCONNECTIONS</keywords>
+    <keywords>TOTALSCMEMBERCONNECTIONS</keywords>
+    <keywords>TOTALSCPARTITIONCONNECTIONS</keywords>
+    <keywords>TRAILING</keywords>
+    <keywords>TRANSACTION</keywords>
+    <keywords>TRANSACTIONS</keywords>
+    <keywords>TRANSFER</keywords>
+    <keywords>TRANSFERRATE</keywords>
+    <keywords>TRANSFORM</keywords>
+    <keywords>TRANSFORMS</keywords>
+    <keywords>TRANSLATE</keywords>
+    <keywords>TREAT</keywords>
+    <keywords>TREE</keywords>
+    <keywords>TRIGGER</keywords>
+    <keywords>TRIGGERS</keywords>
+    <keywords>TRIM</keywords>
+    <keywords>TRUE</keywords>
+    <keywords>TRUNC</keywords>
+    <keywords>TRUNCATE</keywords>
+    <keywords>TRUSTED</keywords>
+    <keywords>TWOLEVEL</keywords>
+    <keywords>TYPE</keywords>
+    <keywords>TYPES</keywords>
+    <keywords>UESCAPE</keywords>
+    <keywords>UNBOUNDED</keywords>
+    <keywords>UNCHECKED</keywords>
+    <keywords>UNCOMMITTED</keywords>
+    <keywords>UNDER</keywords>
+    <keywords>UNDO</keywords>
+    <keywords>UNFORMATTED</keywords>
+    <keywords>UNICODE</keywords>
+    <keywords>UNION</keywords>
+    <keywords>UNIQUE</keywords>
+    <keywords>UNIT</keywords>
+    <keywords>UNITS</keywords>
+    <keywords>UNNEST</keywords>
+    <keywords>UNSAFE</keywords>
+    <keywords>UNTIL</keywords>
+    <keywords>UOWTOTALTIME</keywords>
+    <keywords>UPDATE</keywords>
+    <keywords>UPDATED_SINCE_BOUNDARY_TIME</keywords>
+    <keywords>UPON</keywords>
+    <keywords>UR</keywords>
+    <keywords>URI</keywords>
+    <keywords>USA</keywords>
+    <keywords>USAGE</keywords>
+    <keywords>USE</keywords>
+    <keywords>USER</keywords>
+    <keywords>USERID</keywords>
+    <keywords>USING</keywords>
+    <keywords>VALIDATE</keywords>
+    <keywords>VALIDATED</keywords>
+    <keywords>VALUE</keywords>
+    <keywords>VALUES</keywords>
+    <keywords>VARCHAR</keywords>
+    <keywords>VARCHAR2</keywords>
+    <keywords>VARGRAPHIC</keywords>
+    <keywords>VARIABLE</keywords>
+    <keywords>VARIANT</keywords>
+    <keywords>VARRAY</keywords>
+    <keywords>VARYING</keywords>
+    <keywords>VCAT</keywords>
+    <keywords>VERSION</keywords>
+    <keywords>VIEW</keywords>
+    <keywords>VIOLATIONS</keywords>
+    <keywords>VOLATILE</keywords>
+    <keywords>WAIT</keywords>
+    <keywords>WAITING</keywords>
+    <keywords>WATER</keywords>
+    <keywords>WCSTATS</keywords>
+    <keywords>WHEN</keywords>
+    <keywords>WHERE</keywords>
+    <keywords>WHILE</keywords>
+    <keywords>WHITESPACE</keywords>
+    <keywords>WITH</keywords>
+    <keywords>WITHIN</keywords>
+    <keywords>WITHOUT</keywords>
+    <keywords>WLMADM</keywords>
+    <keywords>WLSTATS</keywords>
+    <keywords>WORK</keywords>
+    <keywords>WORKLOAD</keywords>
+    <keywords>WRAPPER</keywords>
+    <keywords>WRITE</keywords>
+    <keywords>WRITEDOWN</keywords>
+    <keywords>WRITEUP</keywords>
+    <keywords>WRKSTNNAME</keywords>
+    <keywords>XACT</keywords>
+    <keywords>XML</keywords>
+    <keywords>XMLAGG</keywords>
+    <keywords>XMLATTRIBUTES</keywords>
+    <keywords>XMLBINARY</keywords>
+    <keywords>XMLCAST</keywords>
+    <keywords>XMLCOMMENT</keywords>
+    <keywords>XMLCONCAT</keywords>
+    <keywords>XMLDECLARATION</keywords>
+    <keywords>XMLDOCUMENT</keywords>
+    <keywords>XMLELEMENT</keywords>
+    <keywords>XMLEXISTS</keywords>
+    <keywords>XMLFOREST</keywords>
+    <keywords>XMLGROUP</keywords>
+    <keywords>XMLNAMESPACES</keywords>
+    <keywords>XMLPARSE</keywords>
+    <keywords>XMLPATTERN</keywords>
+    <keywords>XMLPI</keywords>
+    <keywords>XMLQUERY</keywords>
+    <keywords>XMLROW</keywords>
+    <keywords>XMLSCHEMA</keywords>
+    <keywords>XMLSERIALIZE</keywords>
+    <keywords>XMLTABLE</keywords>
+    <keywords>XMLTEXT</keywords>
+    <keywords>XMLVALIDATE</keywords>
+    <keywords>XQUERY</keywords>
+    <keywords>XSLTRANSFORM</keywords>
+    <keywords>XSROBJECT</keywords>
+    <keywords>YEAR</keywords>
+    <keywords>YEARS</keywords>
+    <keywords>YES</keywords>
+    <operators>&lt;</operators>
+    <operators>&quot;</operators>
+    <operators>%</operators>
+    <operators>&amp;</operators>
+    <operators>''''</operators>
+    <operators>(</operators>
+    <operators>)</operators>
+    <operators>*</operators>
+    <operators>+</operators>
+    <operators>,</operators>
+    <operators>-</operators>
+    <operators>.</operators>
+    <operators>/</operators>
+    <operators>:</operators>
+    <operators>;</operators>
+    <operators>=</operators>
+    <operators>?</operators>
+    <operators>[</operators>
+    <operators>]</operators>
+    <operators>_</operators>
+    <operators>'|'</operators>
+    <operators>,=</operators>
+    <operators>&lt;=</operators>
+    <operators>||</operators>
+    <operators>..</operators>
+    <operators>'-,'</operators>
+    <operators>!</operators>
+    <operators>~</operators>
+    <operators>:=</operators>
+    <operators>{</operators>
+    <operators>}</operators>
+    <operators>(+)</operators>
+  </SQLSyntaxDefinition>
+  <nicknameDefinition constraintSupported="true" indexSupported="true" maximumIdentifierLength="128"/>
+  <schemaDefinition maximumIdentifierLength="128"/>
+  <viewDefinition maximumIdentifierLength="128"/>
+  <privilegedElementDefinitions name="Database">
+    <privilegeDefinitions name="BINDADD"/>
+    <privilegeDefinitions name="CONNECT"/>
+    <privilegeDefinitions name="CREATETAB"/>
+    <privilegeDefinitions name="CREATE_EXTERNAL_ROUTINE"/>
+    <privilegeDefinitions name="CREATE_NOT_FENCED_ROUTINE"/>
+    <privilegeDefinitions name="IMPLICIT_SCHEMA"/>
+    <privilegeDefinitions name="DBADM"/>
+    <privilegeDefinitions name="LOAD"/>
+    <privilegeDefinitions name="QUIESCE_CONNECT"/>
+    <privilegeDefinitions name="SECADM"/>
+    <privilegeDefinitions name="ACCESSCTRL"/>
+    <privilegeDefinitions name="DATAACCESS"/>
+    <privilegeDefinitions name="EXPLAIN"/>
+    <privilegeDefinitions name="SQLADM"/>
+    <privilegeDefinitions name="WLMADM"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Schema">
+    <privilegeDefinitions name="ALTERIN"/>
+    <privilegeDefinitions name="CREATEIN"/>
+    <privilegeDefinitions name="DROPIN"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="PersistentTable">
+    <privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions actionElementDefinitions="COLUMN_1" name="REFERENCES"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions actionElementDefinitions="COLUMN_1" name="UPDATE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="ViewTable">
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions actionElementDefinitions="COLUMN_1" name="UPDATE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Nickname">
+    <privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="REFERENCES"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions name="UPDATE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions xmi:id="COLUMN_1" name="Column"/>
+  <privilegedElementDefinitions name="MaterializedQueryTable">
+    <privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions actionElementDefinitions="COLUMN_1" name="REFERENCES"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions actionElementDefinitions="COLUMN_1" name="UPDATE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Routine">
+    <privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Sequence">
+    <privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="USAGE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Index">
+    <privilegeDefinitions name="CONTROL"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Tablespace">
+    <privilegeDefinitions name="USE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Package">
+    <privilegeDefinitions name="BIND"/>
+    <privilegeDefinitions name="CONTROL"/>
+    <privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Module">
+    <privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="PLSQLPackage">
+    <privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="GlobalVariable">
+    <privilegeDefinitions name="READ"/>
+    <privilegeDefinitions name="WRITE"/>
+  </privilegedElementDefinitions>
+  <constructedDataTypeDefinition arrayDatatypeSupported="true" multisetDatatypeSupported="true" rowDatatypeSupported="true" referenceDatatypeSupported="true" cursorDatatypeSupported="true"/>
+</DBDefinition:DatabaseVendorDefinition>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/.classpath b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/.gitignore b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/.project b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/.project
new file mode 100644
index 0000000..f82e7c1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.ibm.db2.luw.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..73f4382
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Fri Apr 13 14:14:14 PDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.4
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..e1529a0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,22 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.datatools.enablement.ibm.db2.luw.ui;singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-Localization: plugin
+Bundle-Vendor: %providerName
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.datatools.connectivity,
+ org.eclipse.datatools.connectivity.ui,
+ org.eclipse.datatools.enablement.ibm.db2.luw,
+ org.eclipse.datatools.enablement.ibm.ui,
+ org.eclipse.ui
+Import-Package: com.ibm.icu.text;version="3.6.1",
+ com.ibm.icu.util;version="3.6.1"
+Export-Package: org.eclipse.datatools.enablement.ibm.db2.luw.internal.ui,
+ org.eclipse.datatools.enablement.ibm.db2.luw.internal.ui.drivers,
+ org.eclipse.datatools.enablement.ibm.db2.luw.internal.ui.util,
+ org.eclipse.datatools.enablement.ibm.db2.luw.ui.drivers,
+ org.eclipse.datatools.enablement.ibm.db2.luw.ui.l10n
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/about.html b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/build.properties b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/build.properties
new file mode 100644
index 0000000..3154630
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/build.properties
@@ -0,0 +1,15 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               plugin.properties,\
+               icons/,\
+               about.html
+src.dir	= src/
+plugin.version =	1.0.0.200711021
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/icons/new_db_element.gif b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/icons/new_db_element.gif
new file mode 100644
index 0000000..1d459ce
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/icons/new_db_element.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/plugin.properties b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/plugin.properties
new file mode 100644
index 0000000..42bcca6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/plugin.properties
@@ -0,0 +1,16 @@
+###############################################################################
+# Copyright (c) 2006, 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName=Eclipse Data Tools Platform IBM DB2 UDB LUW UI Plug-in
+providerName=Eclipse Data Tools Platform
+
+profile.db2.luw.wizard.title = DB2 for Linux, UNIX, and Windows
+profile.db2.luw.wizard.description = Create a DB2 for Linux, UNIX, and Windows connection profile.
+profile.db2.luw.properties = Driver Properties
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/plugin.xml b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/plugin.xml
new file mode 100644
index 0000000..48cd10e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/plugin.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+	<extension
+         point="org.eclipse.datatools.connectivity.connectionProfile">
+      <newWizard
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.internal.ui.NewLUWConnectionProfileWizard"
+            icon="icons/new_db_element.gif"
+            id="org.eclipse.datatools.enablement.ibm.db2.luw.NewLUWConnectionProfileWizard"
+            name="%profile.db2.luw.wizard.title"
+            description = "%profile.db2.luw.wizard.description"
+            profile="org.eclipse.datatools.enablement.ibm.db2.luw.connectionProfile"/>
+   </extension>
+   <extension
+         point="org.eclipse.ui.propertyPages">
+      <page
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.internal.ui.LUWDBProfilePropertyPage"
+            id="org.eclipse.datatools.enablement.ibm.db2.luw.profileProperties"
+            name="%profile.db2.luw.properties"
+            objectClass="org.eclipse.datatools.connectivity.IConnectionProfile">
+         <filter
+               name="org.eclipse.datatools.profile.property.id"
+               value="org.eclipse.datatools.enablement.ibm.db2.luw.connectionProfile"/>
+      </page>
+   </extension>
+   <extension
+         point="org.eclipse.datatools.connectivity.ui.driverPropertyEditor">
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.db2.luw.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.db2.luw.driverTemplate.password">
+      </propertyEditor>
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.db2.luw.jdbc4.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.db2.luw.jdbc4.driverTemplate.password">
+      </propertyEditor>
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.db2.luw.other.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.db2.luw.other.driverTemplate.password">
+      </propertyEditor>
+   </extension>
+ 
+   <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.internal.ui.drivers.DB2LUWDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.db2.luw.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.db2.luw.internal.ui.drivers.DB2LUWDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+      <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.internal.ui.drivers.DB2LUWKerberosDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.db2.luw.kerberosDriverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.db2.luw.internal.ui.drivers.DB2LUWKerberosDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+   <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.internal.ui.drivers.DB2LUWKerberosDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.db2.luw.jdbc4.kerberosDriverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.db2.luw.internal.ui.drivers.jdbc4.DB2LUWKerberosDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+   <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.internal.ui.drivers.DB2LUWDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.db2.luw.jdbc4.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.db2.luw.internal.ui.drivers.jdbc4.DB2LUWDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+   <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.internal.ui.drivers.DB2LUWOtherDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.db2.luw.other.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.db2.luw.internal.ui.drivers.DB2LUWOtherDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+ </plugin>  
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/src/org/eclipse/datatools/enablement/ibm/db2/luw/internal/ui/LUWDBProfileDetailsWizardPage.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/src/org/eclipse/datatools/enablement/ibm/db2/luw/internal/ui/LUWDBProfileDetailsWizardPage.java
new file mode 100644
index 0000000..06d3c95
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/src/org/eclipse/datatools/enablement/ibm/db2/luw/internal/ui/LUWDBProfileDetailsWizardPage.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.internal.ui;
+
+import org.eclipse.datatools.connectivity.ui.wizards.ExtensibleProfileDetailsWizardPage;
+import org.eclipse.datatools.enablement.ibm.db2.internal.luw.ILUWConnectionProfileConstants;
+
+public class LUWDBProfileDetailsWizardPage extends
+		ExtensibleProfileDetailsWizardPage {
+
+	public LUWDBProfileDetailsWizardPage(String pageName) {
+		super(pageName, ILUWConnectionProfileConstants.DB2_LUW_CATEGORY_ID);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/src/org/eclipse/datatools/enablement/ibm/db2/luw/internal/ui/LUWDBProfilePropertyPage.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/src/org/eclipse/datatools/enablement/ibm/db2/luw/internal/ui/LUWDBProfilePropertyPage.java
new file mode 100644
index 0000000..e04b132
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/src/org/eclipse/datatools/enablement/ibm/db2/luw/internal/ui/LUWDBProfilePropertyPage.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.internal.ui;
+
+import org.eclipse.datatools.connectivity.ui.wizards.ExtensibleProfileDetailsPropertyPage;
+import org.eclipse.datatools.enablement.ibm.db2.internal.luw.ILUWConnectionProfileConstants;
+
+public class LUWDBProfilePropertyPage extends
+		ExtensibleProfileDetailsPropertyPage {
+
+	public LUWDBProfilePropertyPage() {
+		super(ILUWConnectionProfileConstants.DB2_LUW_CATEGORY_ID);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/src/org/eclipse/datatools/enablement/ibm/db2/luw/internal/ui/NewLUWConnectionProfileWizard.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/src/org/eclipse/datatools/enablement/ibm/db2/luw/internal/ui/NewLUWConnectionProfileWizard.java
new file mode 100644
index 0000000..ebe5592
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/src/org/eclipse/datatools/enablement/ibm/db2/luw/internal/ui/NewLUWConnectionProfileWizard.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.internal.ui;
+
+import org.eclipse.datatools.connectivity.ui.wizards.ExtensibleNewConnectionProfileWizard;
+
+public class NewLUWConnectionProfileWizard extends
+		ExtensibleNewConnectionProfileWizard {
+	public NewLUWConnectionProfileWizard() {
+		super(
+				new LUWDBProfileDetailsWizardPage(
+						"org.eclipse.datatools.enablement.ibm.db2.luw.internal.ui.LUWDBProfileDetailsWizardPage")); //$NON-NLS-1$
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/src/org/eclipse/datatools/enablement/ibm/db2/luw/internal/ui/drivers/DB2LUWDriverUIContributor.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/src/org/eclipse/datatools/enablement/ibm/db2/luw/internal/ui/drivers/DB2LUWDriverUIContributor.java
new file mode 100644
index 0000000..f8acaea
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/src/org/eclipse/datatools/enablement/ibm/db2/luw/internal/ui/drivers/DB2LUWDriverUIContributor.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.internal.ui.drivers;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.ui.drivers.DB2LUWDriverUIContributorBase;
+
+public class DB2LUWDriverUIContributor extends DB2LUWDriverUIContributorBase {
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/src/org/eclipse/datatools/enablement/ibm/db2/luw/internal/ui/drivers/DB2LUWKerberosDriverUIContributor.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/src/org/eclipse/datatools/enablement/ibm/db2/luw/internal/ui/drivers/DB2LUWKerberosDriverUIContributor.java
new file mode 100644
index 0000000..c4fdd24
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/src/org/eclipse/datatools/enablement/ibm/db2/luw/internal/ui/drivers/DB2LUWKerberosDriverUIContributor.java
@@ -0,0 +1,701 @@
+/*******************************************************************************
+ * Copyright 2007, 2014 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ *               Actuate Corporation - re-factored to an extendable base class and
+ *                  added the optional properties tab
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.internal.ui.drivers;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+import java.util.StringTokenizer;
+
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributor;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributorInformation;
+import org.eclipse.datatools.connectivity.ui.wizards.OptionalPropertiesPane;
+import org.eclipse.datatools.enablement.ibm.db2.luw.internal.ui.util.ResourceLoader;
+import org.eclipse.datatools.enablement.ibm.internal.ui.drivers.IBMJDBCDriverTracingOptionsPane;
+import org.eclipse.datatools.enablement.ibm.internal.ui.drivers.IIBMJDBCDriverProvider;
+import org.eclipse.jface.dialogs.DialogPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.swt.widgets.Text;
+
+import com.ibm.icu.text.MessageFormat;
+
+public class DB2LUWKerberosDriverUIContributor implements IDriverUIContributor,
+		IIBMJDBCDriverProvider, Listener {
+
+	private static final String EMPTY = ""; //$NON-NLS-1$
+	
+	private String CUI_NEWCW_DATABASE_LBL_UI_ = ResourceLoader.CUI_NEWCW_DATABASE_LBL_UI_;
+
+	private static final String CUI_NEWCW_HOST_LBL_UI_ = ResourceLoader.CUI_NEWCW_HOST_LBL_UI_;
+
+	private static final String CUI_NEWCW_PORT_LBL_UI_ = ResourceLoader.CUI_NEWCW_PORT_LBL_UI_;
+
+	private static final String CUI_NEWCW_CONNECTIONURL_LBL_UI_ = ResourceLoader.CUI_NEWCW_CONNECTIONURL_LBL_UI_;
+
+	private static final String CUI_NEWCW_DEFAULT_SCHEMA_LBL_UI_ = ResourceLoader.CUI_NEWCW_DEFAULT_SCHEMA_LBL_UI_;
+
+	private static final String CUI_NEWCW_DEFAULT_SCHEMA_SUMMARY_DATA_TEXT_ = ResourceLoader.CUI_NEWCW_DEFAULT_SCHEMA_SUMMARY_DATA_TEXT_;
+	
+	private static final String CUI_NEWCW_DRIVER_OPTIONS_TAB_UI_ = org.eclipse.datatools.enablement.ibm.internal.ui.drivers.Messages
+			.getString("CUI_NEWCW_DRIVER_OPTIONS_TAB_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_TRACING_OPTIONS_TAB_UI_ = org.eclipse.datatools.enablement.ibm.internal.ui.drivers.Messages
+			.getString("CUI_NEWCW_TRACING_OPTIONS_TAB_UI_"); //$NON-NLS-1$
+
+	private static final String SECURITY_MECHANISM_PROPERTY_NAME = "securityMechanism"; //$NON-NLS-1$
+
+	private static final String SECURITY_MECHANISM_PROPERTY_VALUE = "11"; //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_ = ResourceLoader.CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_;
+
+	private static final String CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_ = ResourceLoader.CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_;
+
+	private static final String CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_ = ResourceLoader.CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_;
+
+	private static final String CUI_NEWCW_URL_SUMMARY_DATA_TEXT_ = ResourceLoader.CUI_NEWCW_URL_SUMMARY_DATA_TEXT_;
+
+	private static final String CUI_NEWCW_KERBOROS_KINIT_AUTHENTICATION_ = ResourceLoader.CUI_NEWCW_KERBOROS_KINIT_AUTHENTICATION;
+	
+	private static final String CUI_NEWCW_USERNAME_LBL_UI_ = ResourceLoader.CUI_NEWCW_USERNAME_LBL_UI_;
+	
+	private static final String CUI_NEWCW_PASSWORD_LBL_UI_ = ResourceLoader.CUI_NEWCW_PASSWORD_LBL_UI_;
+	
+	private static final String CUI_NEWCW_VALIDATE_USERID_REQ_UI_ = ResourceLoader.CUI_NEWCW_VALIDATE_USERID_REQ_UI_;
+	
+	private static final String CUI_NEWCW_VALIDATE_PASSWORD_REQ_UI_ = ResourceLoader.CUI_NEWCW_VALIDATE_PASSWORD_REQ_UI_;
+	
+	private IBMJDBCDriverTracingOptionsPane tracingOptionsComposite;
+
+	private Label databaseLabel;
+
+	private Text databaseText;
+
+	private Label hostLabel;
+
+	private Text hostText;
+
+	private Label portLabel;
+	
+	private String urlOptionalParameters="";
+	
+	private Button kinitAuthenticationButton;
+	
+	private Button savePasswordButton;
+	
+	private Label userNameLabel;
+	
+	private Label passwordLabel;
+	
+	private Text userNameText;
+	
+	private Text passwordText;
+	
+	private Text portText;
+
+	private Label defaultSchemaLabel;
+
+	private Text defaultSchemaText;
+	
+	private Label urlLabel;
+
+	private Text urlText;
+
+	private DialogPage parentPage;
+
+	private ScrolledComposite parentComposite;
+
+	private IDriverUIContributorInformation contributorInformation;
+
+	private Properties properties;
+	
+	private boolean isReadOnly = false;
+	
+	protected OptionalPropertiesPane optionalPropsComposite;
+
+	public Composite getContributedDriverUI(Composite parent, boolean isReadOnly) {
+		if ((parentComposite == null) || parentComposite.isDisposed()
+				|| (this.isReadOnly != isReadOnly)) {
+			GridData gd;
+
+			this.isReadOnly = isReadOnly;
+			int additionalStyles = SWT.NONE;
+			if (isReadOnly) {
+				additionalStyles = SWT.READ_ONLY;
+			}
+
+			parentComposite = new ScrolledComposite(parent, SWT.H_SCROLL
+					| SWT.V_SCROLL);
+			parentComposite.setExpandHorizontal(true);
+			parentComposite.setExpandVertical(true);
+			parentComposite.setLayout(new GridLayout());
+
+			TabFolder tabComposite = new TabFolder(parentComposite, SWT.TOP);
+
+			TabItem driverOptionsTab = new TabItem(tabComposite, SWT.None);
+			driverOptionsTab.setText(CUI_NEWCW_DRIVER_OPTIONS_TAB_UI_);
+
+			TabItem tracingOptionsTab = new TabItem(tabComposite, SWT.None);
+			tracingOptionsTab.setText(CUI_NEWCW_TRACING_OPTIONS_TAB_UI_);
+
+			Composite driverOptionsComposite = new Composite(tabComposite,
+					SWT.NULL);
+			GridLayout layout = new GridLayout();
+			layout.numColumns = 3;
+			driverOptionsComposite.setLayout(layout);
+			driverOptionsTab.setControl(driverOptionsComposite);
+
+			tracingOptionsComposite = new IBMJDBCDriverTracingOptionsPane(
+					tabComposite, SWT.NULL, this, isReadOnly);
+			tracingOptionsTab.setControl(tracingOptionsComposite);
+
+			databaseLabel = new Label(driverOptionsComposite, SWT.NONE);
+			databaseLabel.setText(CUI_NEWCW_DATABASE_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			databaseLabel.setLayoutData(gd);
+
+			databaseText = new Text(driverOptionsComposite, SWT.SINGLE
+					| SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalAlignment = GridData.FILL;
+			gd.horizontalSpan = 2;
+			databaseText.setLayoutData(gd);
+
+			hostLabel = new Label(driverOptionsComposite, SWT.NONE);
+			hostLabel.setText(CUI_NEWCW_HOST_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			hostLabel.setLayoutData(gd);
+
+			hostText = new Text(driverOptionsComposite, SWT.SINGLE | SWT.BORDER
+					| additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 2;
+			gd.grabExcessHorizontalSpace = true;
+			hostText.setLayoutData(gd);
+
+			portLabel = new Label(driverOptionsComposite, SWT.NONE);
+			portLabel.setText(CUI_NEWCW_PORT_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			portLabel.setLayoutData(gd);
+
+			portText = new Text(driverOptionsComposite, SWT.SINGLE | SWT.BORDER
+					| additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			portText.setLayoutData(gd);
+
+			kinitAuthenticationButton = new Button(driverOptionsComposite, SWT.CHECK);
+			kinitAuthenticationButton.setText(CUI_NEWCW_KERBOROS_KINIT_AUTHENTICATION_);
+			gd = new GridData();
+			gd.horizontalSpan = 3;
+			gd.verticalAlignment = GridData.BEGINNING;
+			kinitAuthenticationButton.setLayoutData(gd);
+			
+			userNameLabel = new Label(driverOptionsComposite, SWT.NONE);
+			userNameLabel.setText(CUI_NEWCW_USERNAME_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			userNameLabel.setLayoutData(gd);
+
+			userNameText = new Text(driverOptionsComposite, SWT.SINGLE | SWT.BORDER
+					| additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			userNameText.setLayoutData(gd);
+
+			passwordLabel = new Label(driverOptionsComposite, SWT.NONE);
+			passwordLabel.setText(CUI_NEWCW_PASSWORD_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			passwordLabel.setLayoutData(gd);
+			
+			passwordText = new Text(driverOptionsComposite, SWT.SINGLE | SWT.BORDER
+					| SWT.PASSWORD | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			passwordText.setLayoutData(gd);
+
+			this.savePasswordButton = new Button(driverOptionsComposite,
+					SWT.CHECK);
+			this.savePasswordButton.setText(ResourceLoader.CUI_NEWCW_SAVE_PASSWORD_LBL_UI_); //$NON-NLS-1$
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 3;
+			gd.grabExcessHorizontalSpace = true;
+			savePasswordButton.setLayoutData(gd);
+			
+			defaultSchemaLabel = new Label(driverOptionsComposite, SWT.NONE);
+			defaultSchemaLabel.setText(CUI_NEWCW_DEFAULT_SCHEMA_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			defaultSchemaLabel.setLayoutData(gd);
+
+			defaultSchemaText = new Text(driverOptionsComposite, SWT.SINGLE
+					| SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			defaultSchemaText.setLayoutData(gd);
+			
+			urlLabel = new Label(driverOptionsComposite, SWT.NONE);
+			urlLabel.setText(CUI_NEWCW_CONNECTIONURL_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			urlLabel.setLayoutData(gd);
+
+			urlText = new Text(driverOptionsComposite, SWT.MULTI | SWT.BORDER
+					| SWT.READ_ONLY | SWT.WRAP | SWT.V_SCROLL);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			gd.widthHint = 190;
+			gd.heightHint = 90;
+			urlText.setLayoutData(gd);
+
+			parentComposite.setContent(tabComposite);
+			parentComposite.setMinSize(tabComposite.computeSize(SWT.DEFAULT,
+					SWT.DEFAULT));
+
+			// add optional properties tab
+            TabItem optionalPropsTab = new TabItem( tabComposite, SWT.None );
+            optionalPropsTab.setText( ConnectivityUIPlugin.getDefault()
+                    .getResourceString( "CommonDriverUIContributor.optionaltab" ) ); //$NON-NLS-1$
+            optionalPropsComposite = createOptionalPropertiesPane( tabComposite, SWT.NULL, isReadOnly );
+            optionalPropsTab.setControl( optionalPropsComposite );
+
+            parentComposite.setContent(tabComposite);
+            parentComposite.setMinSize(tabComposite.computeSize(SWT.DEFAULT,
+                    SWT.DEFAULT));
+                    
+			initialize();
+		}
+		return parentComposite;
+	}
+	
+	 /**
+     * Creates an OptionalPropertiesPane.  
+     * Extenders may override to return an extended composite.
+     */
+    protected OptionalPropertiesPane createOptionalPropertiesPane( Composite parent, int style, 
+            boolean useReadOnlyControls )
+    {
+        return new OptionalPropertiesPane( parent, style, useReadOnlyControls );
+    }
+    
+	private void enableUserProperties()
+	{
+		boolean selection = kinitAuthenticationButton.getSelection();
+		userNameLabel.setEnabled(!selection);
+		passwordLabel.setEnabled(!selection);
+		userNameText.setEnabled(!selection);
+		passwordText.setEnabled(!selection);
+		savePasswordButton.setEnabled(!selection);
+		if (selection)
+		{	
+			String userName = userNameText.getText();
+			String password = passwordText.getText();
+			if (userName != null && !userName.equals(EMPTY) || password != null && !password.equals(EMPTY))
+			{
+				userNameText.removeListener(SWT.Modify, this);
+				passwordText.removeListener(SWT.Modify, this);
+				savePasswordButton.removeListener(SWT.Selection, this);
+				userNameText.setText(EMPTY);
+				passwordText.setText(EMPTY);
+				savePasswordButton.setSelection(false);
+				userNameText.addListener(SWT.Modify, this);
+				passwordText.addListener(SWT.Modify, this);
+				savePasswordButton.addListener(SWT.Selection, this);
+			}
+		}
+	}
+	
+	public void setConnectionInformation() {
+		properties.setProperty(
+				IJDBCDriverDefinitionConstants.DATABASE_NAME_PROP_ID,
+				this.databaseText.getText().trim());
+		properties.setProperty(
+				IJDBCConnectionProfileConstants.DEFAULT_SCHEMA_PROP_ID,
+				this.defaultSchemaText.getText().trim());
+		properties.setProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID,
+				this.urlText.getText().trim());
+		
+		if (!this.kinitAuthenticationButton.getSelection())
+		{
+			properties.setProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID, this.userNameText.getText());
+			properties.setProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID, this.passwordText.getText());		
+			properties.setProperty(IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID, String.valueOf(savePasswordButton.getSelection()));		}
+		else
+		{
+			properties.remove(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID);
+			properties.remove(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID);
+			properties.remove(IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID);
+		}
+	
+		optionalPropsComposite.setConnectionInformation();
+		
+		this.contributorInformation.setProperties(properties);
+	}
+
+	public void updateURL() {
+		String url = "jdbc:db2://" + formatNode(hostText.getText().trim()) + ":" //$NON-NLS-1$ //$NON-NLS-2$
+				+ portText.getText().trim()
+				+ "/" + databaseText.getText().trim() //$NON-NLS-1$
+				+ ":retrieveMessagesFromServerOnGetMessage=true;" //$NON-NLS-1$
+				+ SECURITY_MECHANISM_PROPERTY_NAME + "=" //$NON-NLS-1$
+				+ SECURITY_MECHANISM_PROPERTY_VALUE + ";" //$NON-NLS-1$
+				+ tracingOptionsComposite.getTracingURLProperties();
+		url += getURLOptionalParameters();
+		urlText.setText(url);
+	}
+
+	private String formatNode(String node)
+    {
+    	if (node.indexOf(":") > -1) {
+    		return "[" + node + "]";
+    	}
+    	return node;
+    }
+	
+	private void removeListeners() {
+		savePasswordButton.removeListener(SWT.Selection, this);
+		kinitAuthenticationButton.removeListener(SWT.Selection, this);
+		databaseText.removeListener(SWT.Modify, this);
+		hostText.removeListener(SWT.Modify, this);
+		portText.removeListener(SWT.Modify, this);
+		userNameText.removeListener(SWT.Modify, this);
+		passwordText.removeListener(SWT.Modify, this);
+		defaultSchemaText.removeListener(SWT.Modify, this);
+	}
+
+	private void addListeners() {
+		savePasswordButton.addListener(SWT.Selection, this);
+		kinitAuthenticationButton.addListener(SWT.Selection, this);
+		databaseText.addListener(SWT.Modify, this);
+		hostText.addListener(SWT.Modify, this);
+		portText.addListener(SWT.Modify, this);
+		userNameText.addListener(SWT.Modify, this);
+		passwordText.addListener(SWT.Modify, this);
+		defaultSchemaText.addListener(SWT.Modify, this);
+	}
+
+	private void initialize() {
+		updateURL();
+		addListeners();
+	}
+
+	public void handleEvent(Event event) {
+		if (isReadOnly) {
+			if (event.widget == savePasswordButton) 
+			{
+				savePasswordButton.setSelection(!savePasswordButton.getSelection());
+			}
+		} else {
+			enableUserProperties ();
+			updateURL();
+			setConnectionInformation();
+		}
+	}
+
+	public boolean determineContributorCompletion() {
+		boolean isComplete = true;
+		if (databaseText.getText().trim().length() < 1) {
+			parentPage
+					.setErrorMessage(MessageFormat
+							.format(
+									(ResourceLoader.CUI_NEWCW_VALIDATE_DATABASE_REQ_UI_),
+									new Object[] { ResourceLoader.CUI_NEWCW_DEFDBNAME_VAL_UI_ }));
+			isComplete = false;
+		} else if (hostText.getText().trim().length() < 1) {
+			parentPage
+					.setErrorMessage(ResourceLoader.CUI_NEWCW_VALIDATE_HOST_REQ_UI_);
+			isComplete = false;
+		} else if (portText.getText().trim().length() < 1) {
+			parentPage
+					.setErrorMessage(ResourceLoader.CUI_NEWCW_VALIDATE_PORT_REQ_UI_);
+			isComplete = false;
+		} 
+		else if (!kinitAuthenticationButton.getSelection() && userNameText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(CUI_NEWCW_VALIDATE_USERID_REQ_UI_); //$NON-NLS-1$
+			isComplete = false;
+		} else if (!kinitAuthenticationButton.getSelection() &&  passwordText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(CUI_NEWCW_VALIDATE_PASSWORD_REQ_UI_); //$NON-NLS-1$
+			isComplete = false;
+		}		
+		else if (!tracingOptionsComposite.validateControl(parentPage)) {
+			isComplete = false;
+		}  else if (!optionalPropsComposite.validateControl(parentPage)) {
+			isComplete = false;
+		}
+
+		if (isComplete) {
+			parentPage.setErrorMessage(null);
+		}
+		return isComplete;
+	}
+
+	public void setDialogPage(DialogPage parentPage) {
+		this.parentPage = parentPage;
+	}
+
+	public void setDriverUIContributorInformation(
+			IDriverUIContributorInformation contributorInformation) {
+		this.contributorInformation = contributorInformation;
+		this.properties = contributorInformation.getProperties();
+		optionalPropsComposite.setDriverUIContributorInformation( contributorInformation );
+	}
+
+	public void loadProperties() {
+		removeListeners();
+		String defaultSchema = this.properties
+		.getProperty(IJDBCConnectionProfileConstants.DEFAULT_SCHEMA_PROP_ID);
+		if (defaultSchema != null) {
+			defaultSchemaText.setText(defaultSchema);
+		}
+		DB2JDBCURL url = new DB2JDBCURL(this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID));
+		hostText.setText(url.getNode());
+		portText.setText(url.getPort());
+		databaseText.setText(url.getDatabaseName());
+		tracingOptionsComposite.loadProperties(url.getProperties());
+
+		String username = this.properties.getProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID);
+		if (username != null) 
+		{
+			userNameText.setText(username);
+			this.kinitAuthenticationButton.setSelection(false);
+		}
+		else
+		{
+			this.kinitAuthenticationButton.setSelection(true);
+			userNameText.setEnabled(false);
+		}
+		
+		String password = this.properties.getProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID);
+		if (password != null) 
+		{
+			passwordText.setText(password);
+			String savePassword = this.properties.getProperty(IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID);
+			if ((savePassword != null) && Boolean.valueOf(savePassword) == Boolean.TRUE) 
+			{
+				savePasswordButton.setSelection(true);
+			}
+		}
+		else if (this.kinitAuthenticationButton.getSelection())
+		{
+			passwordText.setEnabled(false);
+			savePasswordButton.setEnabled(false);
+		}
+		
+		// load optional connection properties
+		optionalPropsComposite.loadProperties();
+		
+		updateURL();
+		addListeners();
+		setConnectionInformation();
+	}
+
+	public List getSummaryData() {
+		List summaryData = new ArrayList();
+
+		summaryData.add(new String[] { CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_,
+				this.databaseText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_,
+				this.hostText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_,
+				this.portText.getText().trim() });
+		if (!this.kinitAuthenticationButton.getSelection())
+		{
+			summaryData.add(new String[] { ResourceLoader.CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_,
+					this.userNameText.getText().trim() });
+			summaryData
+					.add(new String[] {
+							ResourceLoader.CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_,
+							savePasswordButton.getSelection() ? ResourceLoader.CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_
+									: ResourceLoader.CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ });
+		}
+		summaryData.add(new String[] { CUI_NEWCW_DEFAULT_SCHEMA_SUMMARY_DATA_TEXT_,
+				this.defaultSchemaText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_URL_SUMMARY_DATA_TEXT_,
+				this.urlText.getText().trim() });
+		return summaryData;
+	}
+
+	private class DB2JDBCURL {
+		private String subprotocol = ""; //$NON-NLS-1$
+
+		private String node = ""; //$NON-NLS-1$
+
+		private String port = ""; //$NON-NLS-1$
+
+		private String databaseName = ""; //$NON-NLS-1$
+
+		private String properties = ""; //$NON-NLS-1$
+		
+		private String urlOptionalParameters=""; 
+
+		/**
+		 * @param url
+		 */
+		public DB2JDBCURL(String url) {
+			if (url != null) {
+				parseURL(url);
+			}
+		}
+
+		/**
+		 * @return Returns the databaseName.
+		 */
+		public String getDatabaseName() {
+			return databaseName;
+		}
+
+		/**
+		 * @return Returns the node.
+		 */
+		public String getNode() {
+			return node;
+		}
+
+		/**
+		 * @return Returns the subprotocol.
+		 */
+		public String getSubprotocol() {
+			return subprotocol;
+		}
+
+		private void parseURL(String url) {
+			try {
+				setURLOptionalParameters("");
+				String remainingURL = url.substring(url.indexOf(':') + 1);
+				this.subprotocol = remainingURL.substring(0, remainingURL
+						.indexOf(':'));
+				remainingURL = remainingURL
+						.substring(remainingURL.indexOf(':') + 3);
+				this.node = remainingURL
+						.substring(0, remainingURL.indexOf('/'));
+				
+				if (node.indexOf('[') > -1 && node.indexOf("]:") > -1) {
+					port = node.substring(node.indexOf("]:") + 2);
+					node = node.substring(1, node.indexOf("]:"));							
+				} else if (node.indexOf(':') > -1) {
+					port = node.substring(node.indexOf(':') + 1);
+					node = node.substring(0, node.indexOf(':'));
+				}
+				remainingURL = remainingURL
+						.substring(remainingURL.indexOf('/') + 1);
+				if (remainingURL.indexOf(':') > -1) {
+					this.databaseName = remainingURL.substring(0, remainingURL
+							.indexOf(':'));
+					remainingURL = remainingURL.substring(remainingURL
+							.indexOf(':') + 1);
+					this.properties = remainingURL;
+				} else {
+						if(remainingURL.indexOf(';') > -1){
+							this.databaseName = remainingURL.substring(0,remainingURL.indexOf(';'));
+							remainingURL=remainingURL.substring(remainingURL.indexOf(';')+1);
+						}
+						else{
+							this.databaseName = remainingURL;
+							remainingURL="";
+						}
+				}
+				
+				String userOptionalParameters="";
+			     String userParameter = "";
+			     if(remainingURL!=null && remainingURL.length()>0)
+			     {
+				     StringTokenizer st = new StringTokenizer(remainingURL, ";");
+				     int tokenLength = st.countTokens();
+				     for(int i=0; i< tokenLength; i++)
+				     {  
+				    	 userParameter = st.nextToken();
+				    	 if(userParameter!=null && userParameter.length()>0){
+				    		 
+				    		 if(!(userParameter.startsWith("retrieveMessagesFromServerOnGetMessage") 
+				    				 || userParameter.equals("securityMechanism=11")
+				    				 || userParameter.startsWith("traceFile")
+				    				 || userParameter.startsWith("traceFileAppend")
+				    				 || userParameter.startsWith("traceLevel")
+				    				 || userParameter.startsWith("traceDirectory")))
+				    			 userOptionalParameters +=	userParameter+";"; 
+				    	 }
+				     }
+		
+					 setURLOptionalParameters(userOptionalParameters);
+			     }
+			} catch (Exception e) {
+			}
+		}
+
+		/**
+		 * @return Returns the port.
+		 */
+		public String getPort() {
+			return port;
+		}
+
+		/**
+		 * @return Returns the properties.
+		 */
+		public String getProperties() {
+			return properties;
+		}
+		
+	}
+	
+	/**
+	 *  Sets the URL optional properties.
+	 */
+	public void setURLOptionalParameters(String connProp)
+	{
+		this.urlOptionalParameters = connProp;
+	}
+	
+	/**
+	 * @return Returns the URL optional properties.
+	 */
+	public String getURLOptionalParameters()
+	{
+		return this.urlOptionalParameters;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/src/org/eclipse/datatools/enablement/ibm/db2/luw/internal/ui/drivers/DB2LUWOtherDriverUIContributor.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/src/org/eclipse/datatools/enablement/ibm/db2/luw/internal/ui/drivers/DB2LUWOtherDriverUIContributor.java
new file mode 100644
index 0000000..bcf43f8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/src/org/eclipse/datatools/enablement/ibm/db2/luw/internal/ui/drivers/DB2LUWOtherDriverUIContributor.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.internal.ui.drivers;
+
+import org.eclipse.datatools.connectivity.ui.wizards.OtherDriverUIContributor;
+
+public class DB2LUWOtherDriverUIContributor extends OtherDriverUIContributor {
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/src/org/eclipse/datatools/enablement/ibm/db2/luw/internal/ui/util/ResourceLoader.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/src/org/eclipse/datatools/enablement/ibm/db2/luw/internal/ui/util/ResourceLoader.java
new file mode 100644
index 0000000..40ec6bf
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/src/org/eclipse/datatools/enablement/ibm/db2/luw/internal/ui/util/ResourceLoader.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright 2004, 2014 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ *               Actuate Corporation - re-factored to an extendable base class and
+ *                  added the optional properties tab
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.internal.ui.util;
+
+import org.eclipse.osgi.util.NLS;
+
+public final class ResourceLoader extends NLS
+{
+
+	private static final String BUNDLE_NAME = "org.eclipse.datatools.enablement.ibm.db2.luw.ui.l10n.DB2LUWUI";//$NON-NLS-1$
+	
+	private ResourceLoader()
+	{
+		// Do not instantiate
+	}
+
+	public static String CUI_NEWCW_DATABASE_LBL_UI_;
+	public static String CUI_NEWCW_HOST_LBL_UI_;
+	public static String CUI_NEWCW_PORT_LBL_UI_;
+	public static String CUI_NEWCW_JDBCDRIVERCLS_LBL_UI_;
+	public static String CUI_NEWCW_JDBCCLSLOCATION_LBL_UI_;
+	public static String CUI_NEWCW_JARBROWSE_BTN_UI_;
+	public static String CUI_NEWCW_CONNECTIONURL_LBL_UI_;
+	public static String CUI_NEWCW_DEFDBNAME_VAL_UI_;
+	public static String CUI_NEWCW_CLIENTAUTHENTICATION_BTN_UI_;
+	public static String CUI_NEWCW_USERNAME_LBL_UI_;
+	public static String CUI_NEWCW_PASSWORD_LBL_UI_;
+	public static String CUI_NEWCW_SAVE_PASSWORD_LBL_UI_;
+	public static String CUI_NEWCW_ENTER_SERVER_PRINCIPAL_MESSAGE_UI_;
+	public static String CUI_NEWCW_SERVER_PRINCIPAL_LBL_UI_;
+	public static String CUI_NEWCW_ENTER_BASE_DN_MESSAGE_UI_;
+	public static String CUI_NEWCW_USE_BASE_DN_BTN_UI_;
+	public static String CUI_NEWCW_BASE_DN_LBL_UI_;
+	public static String CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_;
+	public static String CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_;
+	public static String CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_;
+	public static String CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_;
+	public static String CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_;
+	public static String CUI_NEWCW_URL_SUMMARY_DATA_TEXT_;
+	public static String CUI_NEWCW_BASEDN_SUMMARY_DATA_TEXT_;
+	public static String CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_;
+	public static String CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_;
+	public static String CUI_NEWCW_VALIDATE_DATABASE_REQ_UI_;
+	public static String CUI_NEWCW_VALIDATE_HOST_REQ_UI_;
+	public static String CUI_NEWCW_VALIDATE_PORT_REQ_UI_;
+	public static String CUI_NEWCW_VALIDATE_USERID_REQ_UI_;
+	public static String CUI_NEWCW_VALIDATE_PASSWORD_REQ_UI_;
+	public static String CUI_NEWCW_DEFAULT_SCHEMA_LBL_UI_;
+	public static String CUI_NEWCW_DEFAULT_SCHEMA_SUMMARY_DATA_TEXT_;
+	public static String CUI_NEWCW_KERBOROS_KINIT_AUTHENTICATION;
+	
+	static
+	{
+		NLS.initializeMessages( BUNDLE_NAME, ResourceLoader.class );
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/src/org/eclipse/datatools/enablement/ibm/db2/luw/ui/drivers/DB2LUWDriverUIContributorBase.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/src/org/eclipse/datatools/enablement/ibm/db2/luw/ui/drivers/DB2LUWDriverUIContributorBase.java
new file mode 100644
index 0000000..ce800ed
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/src/org/eclipse/datatools/enablement/ibm/db2/luw/ui/drivers/DB2LUWDriverUIContributorBase.java
@@ -0,0 +1,833 @@
+/*******************************************************************************
+ * Copyright 2007, 2014 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ *               Actuate Corporation - re-factored to an extendable base class and
+ *                  added the optional properties tab
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.ui.drivers;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+import java.util.StringTokenizer;
+
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributor;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributorInformation;
+import org.eclipse.datatools.connectivity.ui.wizards.OptionalPropertiesPane;
+import org.eclipse.datatools.enablement.ibm.db2.luw.internal.ui.util.ResourceLoader;
+import org.eclipse.datatools.enablement.ibm.internal.ui.drivers.IBMJDBCDriverTracingOptionsPane;
+import org.eclipse.datatools.enablement.ibm.internal.ui.drivers.IIBMJDBCDriverProvider;
+import org.eclipse.jface.dialogs.DialogPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.swt.widgets.Text;
+
+import com.ibm.icu.text.MessageFormat;
+
+public class DB2LUWDriverUIContributorBase implements IDriverUIContributor,
+		IIBMJDBCDriverProvider, Listener {
+
+	protected String CUI_NEWCW_DATABASE_LBL_UI_ = ResourceLoader.CUI_NEWCW_DATABASE_LBL_UI_;
+
+	private static final String CUI_NEWCW_HOST_LBL_UI_ = ResourceLoader.CUI_NEWCW_HOST_LBL_UI_;
+
+	private static final String CUI_NEWCW_PORT_LBL_UI_ = ResourceLoader.CUI_NEWCW_PORT_LBL_UI_;
+
+	private static final String CUI_NEWCW_CONNECTIONURL_LBL_UI_ = ResourceLoader.CUI_NEWCW_CONNECTIONURL_LBL_UI_;
+
+	private static final String CUI_NEWCW_CLIENTAUTHENTICATION_BTN_UI_ = ResourceLoader.CUI_NEWCW_CLIENTAUTHENTICATION_BTN_UI_;
+
+	private static final String CUI_NEWCW_USERNAME_LBL_UI_ = ResourceLoader.CUI_NEWCW_USERNAME_LBL_UI_;
+
+	private static final String CUI_NEWCW_PASSWORD_LBL_UI_ = ResourceLoader.CUI_NEWCW_PASSWORD_LBL_UI_;
+
+	private static final String CUI_NEWCW_SAVE_PASSWORD_LBL_UI_ = ResourceLoader.CUI_NEWCW_SAVE_PASSWORD_LBL_UI_;
+
+	private static final String CUI_NEWCW_DEFAULT_SCHEMA_LBL_UI_ = ResourceLoader.CUI_NEWCW_DEFAULT_SCHEMA_LBL_UI_;
+
+	private static final String CUI_NEWCW_DRIVER_OPTIONS_TAB_UI_ = org.eclipse.datatools.enablement.ibm.internal.ui.drivers.Messages
+			.getString("CUI_NEWCW_DRIVER_OPTIONS_TAB_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_TRACING_OPTIONS_TAB_UI_ = org.eclipse.datatools.enablement.ibm.internal.ui.drivers.Messages
+			.getString("CUI_NEWCW_TRACING_OPTIONS_TAB_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_ = ResourceLoader.CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_;
+
+	private static final String CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_ = ResourceLoader.CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_;
+
+	private static final String CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_ = ResourceLoader.CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_;
+
+	private static final String CUI_NEWCW_USE_CLIENT_AUTHENICATION_SUMMARY_DATA_TEXT_ = ResourceLoader.CUI_NEWCW_CLIENTAUTHENTICATION_BTN_UI_;
+
+	private static final String CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_ = ResourceLoader.CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_;
+
+	private static final String CUI_NEWCW_DEFAULT_SCHEMA_SUMMARY_DATA_TEXT_ = ResourceLoader.CUI_NEWCW_DEFAULT_SCHEMA_SUMMARY_DATA_TEXT_;
+
+	private static final String CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_ = ResourceLoader.CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_;
+
+	private static final String CUI_NEWCW_URL_SUMMARY_DATA_TEXT_ = ResourceLoader.CUI_NEWCW_URL_SUMMARY_DATA_TEXT_;
+
+	private static final String CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_ = ResourceLoader.CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_;
+
+	private static final String CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ = ResourceLoader.CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_;
+
+	private static final String CLIENT_AUTHETICATION_TEXT = "securityMechanism=4;"; //$NON-NLS-1$
+
+	private IBMJDBCDriverTracingOptionsPane tracingOptionsComposite;
+
+	protected OptionalPropertiesPane optionalPropsComposite;
+	
+	private Label databaseLabel;
+
+	protected Text databaseText;
+
+	private Label hostLabel;
+
+	protected Text hostText;
+
+	private Label portLabel;
+
+	protected Text portText;
+
+	private Label usernameLabel;
+
+	private Text usernameText;
+
+	private Label passwordLabel;
+
+	private Label defaultSchemaLabel;
+
+	private Text defaultSchemaText;
+
+	private Text passwordText;
+
+	private Button savePasswordButton;
+
+	private Label urlLabel;
+
+	protected Text urlText;
+
+	protected Button clientAuthenticationCheckbox;
+
+	protected DialogPage parentPage;
+
+	private ScrolledComposite parentComposite;
+
+	private IDriverUIContributorInformation contributorInformation;
+
+    private Properties properties;
+    private String urlOptionalParameters=""; //$NON-NLS-1$
+
+	protected boolean isReadOnly = false;
+	
+	public Composite getContributedDriverUI(Composite parent, boolean isReadOnly) {
+
+		if ((parentComposite == null) || parentComposite.isDisposed() || (this.isReadOnly != isReadOnly)) {
+			GridData gd;
+
+			this.isReadOnly = isReadOnly;
+			int additionalStyles = SWT.NONE;
+			if (isReadOnly){
+				additionalStyles = SWT.READ_ONLY;
+			}
+			
+			parentComposite = new ScrolledComposite(parent, SWT.H_SCROLL
+					| SWT.V_SCROLL);
+			parentComposite.setExpandHorizontal(true);
+			parentComposite.setExpandVertical(true);
+			parentComposite.setLayout(new GridLayout());
+
+			TabFolder tabComposite = new TabFolder(parentComposite, SWT.TOP);
+ 
+            // add general tab
+			TabItem driverOptionsTab = new TabItem(tabComposite, SWT.None);
+			driverOptionsTab.setText(CUI_NEWCW_DRIVER_OPTIONS_TAB_UI_);
+
+            // add tracing options tab if applicable
+			if( includeTracingOptionsTab() )
+			{
+    			TabItem tracingOptionsTab = new TabItem(tabComposite, SWT.None);
+    			tracingOptionsTab.setText(CUI_NEWCW_TRACING_OPTIONS_TAB_UI_);
+                tracingOptionsComposite = new IBMJDBCDriverTracingOptionsPane(
+                        tabComposite, SWT.NULL, this, isReadOnly);
+                tracingOptionsTab.setControl(tracingOptionsComposite);
+			}
+			
+            // add optional properties tab
+	        TabItem optionalPropsTab = new TabItem( tabComposite, SWT.None );
+	        optionalPropsTab.setText( ConnectivityUIPlugin.getDefault()
+	                .getResourceString( "CommonDriverUIContributor.optionaltab" ) ); //$NON-NLS-1$
+            optionalPropsComposite = createOptionalPropertiesPane( tabComposite, SWT.NULL, isReadOnly );
+            optionalPropsTab.setControl( optionalPropsComposite );
+
+            // add general tab content
+            Composite driverOptionsComposite = new Composite(tabComposite,
+					SWT.NULL);
+			GridLayout layout = new GridLayout();
+			layout.numColumns = 3;
+			driverOptionsComposite.setLayout(layout);
+			driverOptionsTab.setControl(driverOptionsComposite);
+
+			databaseLabel = new Label(driverOptionsComposite, SWT.NONE);
+			databaseLabel.setText(CUI_NEWCW_DATABASE_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			databaseLabel.setLayoutData(gd);
+
+			databaseText = new Text(driverOptionsComposite, SWT.SINGLE
+					| SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalAlignment = GridData.FILL;
+			gd.horizontalSpan = 2;
+			databaseText.setLayoutData(gd);
+
+			hostLabel = new Label(driverOptionsComposite, SWT.NONE);
+			hostLabel.setText(CUI_NEWCW_HOST_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			hostLabel.setLayoutData(gd);
+
+			hostText = new Text(driverOptionsComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 2;
+			gd.grabExcessHorizontalSpace = true;
+			hostText.setLayoutData(gd);
+
+			portLabel = new Label(driverOptionsComposite, SWT.NONE);
+			portLabel.setText(CUI_NEWCW_PORT_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			portLabel.setLayoutData(gd);
+
+			portText = new Text(driverOptionsComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			portText.setLayoutData(gd);
+
+			clientAuthenticationCheckbox = new Button(driverOptionsComposite,
+					SWT.CHECK);
+			clientAuthenticationCheckbox
+					.setText(CUI_NEWCW_CLIENTAUTHENTICATION_BTN_UI_);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 3;
+			gd.grabExcessHorizontalSpace = true;
+			clientAuthenticationCheckbox.setLayoutData(gd);
+			clientAuthenticationCheckbox
+					.addSelectionListener(new SelectionListener() {
+						public void widgetDefaultSelected(SelectionEvent e) {
+
+						}
+
+						public void widgetSelected(SelectionEvent e) {
+							if (!DB2LUWDriverUIContributorBase.this.isReadOnly){
+								if (((Button) e.widget).getSelection()) {
+									enableAuthenticationControls(false);
+								} else {
+									enableAuthenticationControls(true);
+								}
+							}
+						}
+					});
+
+			usernameLabel = new Label(driverOptionsComposite, SWT.NONE);
+			usernameLabel.setText(CUI_NEWCW_USERNAME_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			usernameLabel.setLayoutData(gd);
+
+			usernameText = new Text(driverOptionsComposite, SWT.SINGLE
+					| SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			usernameText.setLayoutData(gd);
+
+			passwordLabel = new Label(driverOptionsComposite, SWT.NONE);
+			passwordLabel.setText(CUI_NEWCW_PASSWORD_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			passwordLabel.setLayoutData(gd);
+
+			passwordText = new Text(driverOptionsComposite, SWT.SINGLE
+					| SWT.BORDER | SWT.PASSWORD | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			passwordText.setLayoutData(gd);
+
+			this.savePasswordButton = new Button(driverOptionsComposite,
+					SWT.CHECK);
+			this.savePasswordButton.setText(CUI_NEWCW_SAVE_PASSWORD_LBL_UI_);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 3;
+			gd.grabExcessHorizontalSpace = true;
+			savePasswordButton.setLayoutData(gd);
+
+			defaultSchemaLabel = new Label(driverOptionsComposite, SWT.NONE);
+			defaultSchemaLabel.setText(CUI_NEWCW_DEFAULT_SCHEMA_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			defaultSchemaLabel.setLayoutData(gd);
+
+			defaultSchemaText = new Text(driverOptionsComposite, SWT.SINGLE
+					| SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			defaultSchemaText.setLayoutData(gd);
+
+			urlLabel = new Label(driverOptionsComposite, SWT.NONE);
+			urlLabel.setText(CUI_NEWCW_CONNECTIONURL_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			urlLabel.setLayoutData(gd);
+
+			urlText = new Text(driverOptionsComposite, SWT.MULTI | SWT.BORDER
+					| SWT.READ_ONLY | SWT.WRAP | SWT.V_SCROLL);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			gd.widthHint = 190;
+			gd.heightHint = 90;
+			urlText.setLayoutData(gd);
+
+			parentComposite.setContent(tabComposite);
+			parentComposite.setMinSize(tabComposite.computeSize(SWT.DEFAULT,
+					SWT.DEFAULT));
+
+			initialize();
+		}
+		return parentComposite;
+	}
+
+	protected void enableAuthenticationControls(boolean enabled) {
+		usernameLabel.setEnabled(enabled);
+		usernameText.setEnabled(enabled);
+		passwordLabel.setEnabled(enabled);
+		passwordText.setEnabled(enabled);
+		savePasswordButton.setEnabled(enabled);
+	}
+
+	public void setConnectionInformation() {
+		properties.setProperty(
+				IJDBCDriverDefinitionConstants.DATABASE_NAME_PROP_ID,
+				this.databaseText.getText().trim());
+		if (!this.clientAuthenticationCheckbox.getSelection()) {
+			properties.setProperty(
+					IJDBCDriverDefinitionConstants.USERNAME_PROP_ID,
+					this.usernameText.getText());
+			properties.setProperty(
+					IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID,
+					this.passwordText.getText());
+			properties.setProperty(
+					IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID,
+					String.valueOf(savePasswordButton.getSelection()));
+
+		} else {
+			properties.setProperty(
+					IJDBCDriverDefinitionConstants.USERNAME_PROP_ID, System
+							.getProperty("user.name")); //$NON-NLS-1$
+			properties.remove(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID);
+			properties.setProperty(
+					IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID,
+					String.valueOf(false));
+		}
+
+		properties.setProperty(
+				IJDBCConnectionProfileConstants.DEFAULT_SCHEMA_PROP_ID,
+				this.defaultSchemaText.getText().trim());
+		properties.setProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID,
+				this.urlText.getText().trim());
+		
+        optionalPropsComposite.setConnectionInformation();
+
+		this.contributorInformation.setProperties(properties);
+	}
+
+	public void updateURL() {
+	    String tracingProperties = includeTracingOptionsTab() && tracingOptionsComposite != null ? 
+	            tracingOptionsComposite.getTracingURLProperties() : ""; //$NON-NLS-1$
+        String url = getURLHandle(hostText.getText().trim(), 
+                                portText.getText().trim(), 
+                                databaseText.getText().trim(),
+                                clientAuthenticationCheckbox.getSelection(), 
+                                tracingProperties)
+                            .formatURL();
+    	url += getURLOptionalParameters();
+        urlText.setText(url);
+	}
+
+	private void removeListeners() {
+		databaseText.removeListener(SWT.Modify, this);
+		hostText.removeListener(SWT.Modify, this);
+		portText.removeListener(SWT.Modify, this);
+		usernameText.removeListener(SWT.Modify, this);
+		passwordText.removeListener(SWT.Modify, this);
+		savePasswordButton.removeListener(SWT.Selection, this);
+		defaultSchemaText.removeListener(SWT.Modify, this);
+		clientAuthenticationCheckbox.removeListener(SWT.Selection, this);
+	}
+
+	private void addListeners() {
+		databaseText.addListener(SWT.Modify, this);
+		hostText.addListener(SWT.Modify, this);
+		portText.addListener(SWT.Modify, this);
+		usernameText.addListener(SWT.Modify, this);
+		passwordText.addListener(SWT.Modify, this);
+		savePasswordButton.addListener(SWT.Selection, this);
+		defaultSchemaText.addListener(SWT.Modify, this);
+		clientAuthenticationCheckbox.addListener(SWT.Selection, this);
+	}
+
+	private void initialize() {
+		updateURL();
+		addListeners();
+	}
+
+	public void handleEvent(Event event) {
+		if (isReadOnly){
+			if (event.widget == savePasswordButton){
+				savePasswordButton.setSelection(!savePasswordButton.getSelection());
+			} else if 	(event.widget == clientAuthenticationCheckbox){
+				clientAuthenticationCheckbox.setSelection(!clientAuthenticationCheckbox.getSelection());
+			}
+		} else {
+			updateURL();
+			setConnectionInformation();
+		}
+	}
+
+	public boolean determineContributorCompletion() {
+		boolean isComplete = true;
+		if (databaseText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(MessageFormat.format( ResourceLoader.CUI_NEWCW_VALIDATE_DATABASE_REQ_UI_,
+					new Object[] { ResourceLoader.CUI_NEWCW_DEFDBNAME_VAL_UI_ }));
+			isComplete = false;
+		} else if (hostText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage( ResourceLoader.CUI_NEWCW_VALIDATE_HOST_REQ_UI_ );
+			isComplete = false;
+		} else if (portText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage( ResourceLoader.CUI_NEWCW_VALIDATE_PORT_REQ_UI_ );
+			isComplete = false;
+		} else if (!clientAuthenticationCheckbox.getSelection()
+				&& usernameText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage( ResourceLoader.CUI_NEWCW_VALIDATE_USERID_REQ_UI_ );
+			isComplete = false;
+		} else if (!clientAuthenticationCheckbox.getSelection()
+				&& passwordText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage( ResourceLoader.CUI_NEWCW_VALIDATE_PASSWORD_REQ_UI_ );
+			isComplete = false;
+
+		} else if ( tracingOptionsComposite != null && !tracingOptionsComposite.validateControl(parentPage)) {
+			isComplete = false;
+        } else if (!optionalPropsComposite.validateControl(parentPage)) {
+            isComplete = false;
+        } 
+
+		if (isComplete) {
+			parentPage.setErrorMessage(null);
+		}
+		return isComplete;
+	}
+
+	public void setDialogPage(DialogPage parentPage) {
+		this.parentPage = parentPage;
+	}
+
+	public void setDriverUIContributorInformation(
+			IDriverUIContributorInformation contributorInformation) {
+		this.contributorInformation = contributorInformation;
+		this.properties = contributorInformation.getProperties();
+		optionalPropsComposite.setDriverUIContributorInformation( contributorInformation );
+	}
+
+	public void loadProperties() {
+		removeListeners();
+		DB2JDBCURL url = getURLHandle(this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID));
+		// If the properties includes hostname, port or database name, use the values in properties
+//bgp un-comment the following line (and delete the one after that) once the constants class is updated
+//bgp		String host = this.properties.getProperty( IJDBCDriverDefinitionConstants.HOSTNAME_PROP_ID );
+		String host = this.properties.getProperty( "hostname" ); //$NON-NLS-1$
+		if ( host != null ) {
+			hostText.setText( host );
+		}
+		else {
+			hostText.setText( url.getNode() );
+		}
+//bgp un-comment the following line (and delete the one after that) once the constants class is updated
+//bgp		String port = this.properties.getProperty( IJDBCDriverDefinitionConstants.PORT_PROP_ID );
+		String port = this.properties.getProperty( "port" ); //$NON-NLS-1$
+		if ( port != null ) {
+			portText.setText( port );
+		}
+		else {
+			portText.setText(url.getPort());
+		}
+		String database = this.properties.getProperty( IJDBCDriverDefinitionConstants.DATABASE_NAME_PROP_ID );
+		if ( database != null ) {
+			databaseText.setText( database );
+		}
+		else {
+			databaseText.setText(url.getDatabaseName());
+		}
+		
+		if (url.useClientAuthentication()) {
+			clientAuthenticationCheckbox.setSelection(true);
+			enableAuthenticationControls(false);
+		}
+		String username = this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID);
+		if (username != null) {
+			usernameText.setText(username);
+		}
+		String password = this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID);
+		if (password != null) {
+			passwordText.setText(password);
+		}
+		String savePassword = this.properties
+				.getProperty(IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID);
+		if ((savePassword != null)
+				&& Boolean.valueOf(savePassword) == Boolean.TRUE) {
+			savePasswordButton.setSelection(true);
+		}
+		String defaultSchema = this.properties
+				.getProperty(IJDBCConnectionProfileConstants.DEFAULT_SCHEMA_PROP_ID);
+		if (defaultSchema != null) {
+			defaultSchemaText.setText(defaultSchema);
+		}
+		if (tracingOptionsComposite != null)
+			tracingOptionsComposite.loadProperties(url.getProperties());
+
+		// load optional connection properties
+		optionalPropsComposite.loadProperties();
+
+		updateURL();
+		addListeners();
+		setConnectionInformation();
+	}
+
+	public List getSummaryData() {
+		List summaryData = new ArrayList();
+
+		summaryData.add(new String[] { CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_,
+				this.databaseText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_,
+				this.hostText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_,
+				this.portText.getText().trim() });
+		summaryData
+				.add(new String[] {
+						CUI_NEWCW_USE_CLIENT_AUTHENICATION_SUMMARY_DATA_TEXT_,
+						clientAuthenticationCheckbox.getSelection() ? CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_
+								: CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ });
+		if (!clientAuthenticationCheckbox.getSelection()) {
+			summaryData.add(new String[] {
+					CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_,
+					this.usernameText.getText().trim() });
+			summaryData
+					.add(new String[] {
+							CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_,
+							savePasswordButton.getSelection() ? CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_
+									: CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ });
+		}
+		summaryData.add(new String[] {
+				CUI_NEWCW_DEFAULT_SCHEMA_SUMMARY_DATA_TEXT_,
+				this.defaultSchemaText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_URL_SUMMARY_DATA_TEXT_,
+				this.urlText.getText().trim() });
+		return summaryData;
+	}
+
+	/**
+	 * Indicates whether this contributor should include the tracing options tab in the UI.
+	 * Extenders may override to control whether to include the optional tab.
+	 * @return true to include the tracing options tab; false otherwise.  Default is true.
+	 */
+	protected boolean includeTracingOptionsTab()
+	{
+	    return true;
+	}
+	
+	/**
+	 * Creates an OptionalPropertiesPane.  
+	 * Extenders may override to return an extended composite.
+	 */
+	protected OptionalPropertiesPane createOptionalPropertiesPane( Composite parent, int style, 
+            boolean useReadOnlyControls )
+	{
+	    return new OptionalPropertiesPane( parent, style, useReadOnlyControls );
+	}
+	
+    /**
+     * Returns a DB2 JDBC URL handle that parses the specified JDBC URL.
+     * Extenders may override to return an extended URL handle for its own JDBC URL format.
+     * @param url   JDBC connection URL 
+     * @return  an URL handle that provides accessors for each of the attributes found in the specified URL. 
+     */
+    protected DB2JDBCURL getURLHandle( String url ) {
+        return new DB2JDBCURL( url );
+    }
+    
+    /**
+     * Returns a DB2 JDBC URL handle for the specified URL attributes.
+     * @param node  TCP/IP address or TCP/IP host name of the server to which to connect
+     * @param port  the number of the TCP/IP port.
+     * @param databaseName  the name of the database to which to connect
+     * @param useClientAuthentication indicates whether to rely on the client to authenticate the user,
+     *          i.e. use the user ID of the user logged onto the system 
+     *          on which the driver is running when establishing a connection.
+     * @param tracingProperties trace logging URL properties; may be empty if none is specified
+     * @return  an URL handle that can format a DB2 JDBC connection URL based on the specified attributes
+     */
+    protected DB2JDBCURL getURLHandle(String node, String port, String databaseName,
+                                    boolean useClientAuthentication, String tracingProperties) {
+        return new DB2JDBCURL( node, port, databaseName, useClientAuthentication, tracingProperties );
+    }
+	
+    /**
+     * A DB2 JDBC URL handle that formats and parses a driver-specific JDBC connection URL.
+     */
+	protected class DB2JDBCURL {
+	    protected String subprotocol = ""; //$NON-NLS-1$
+
+	    protected String node = ""; //$NON-NLS-1$
+
+	    protected String port = ""; //$NON-NLS-1$
+
+	    protected String databaseName = ""; //$NON-NLS-1$
+	    
+	    protected String urlProperties = ""; //$NON-NLS-1$
+
+        protected boolean useClientAuthentication = false;
+
+		/**
+		 * @param url
+		 */
+		public DB2JDBCURL(String url) {
+			if (url != null) {
+				parseURL(url);
+			}
+		}
+
+        public DB2JDBCURL(String node, String port, String databaseName, 
+                boolean useClientAuthentication, String tracingProperties) {
+            this.node = node;
+            this.port = port;
+            this.databaseName = databaseName;
+            this.useClientAuthentication = useClientAuthentication;
+            this.urlProperties = tracingProperties;
+        }
+
+		/**
+		 * @return Returns the databaseName.
+		 */
+		public String getDatabaseName() {
+			return databaseName;
+		}
+
+		/**
+		 * @return Returns the node.
+		 */
+		public String getNode() {
+			return node;
+		}
+
+		/**
+		 * @return Returns the subprotocol.
+		 */
+		public String getSubprotocol() {
+			return subprotocol;
+		}
+
+        /**
+         * @return Returns the port.
+         */
+        public String getPort() {
+            return port;
+        }
+
+        /**
+         * @return Returns the properties.
+         */
+        public String getProperties() {
+            return urlProperties;
+        }
+
+        /**
+         * @return  Returns whether to use client authentication to connect.
+         */
+        public boolean useClientAuthentication() {
+            return useClientAuthentication;
+        }
+        
+        /**
+         * Formats the driver URL based on values specified in 
+         * constructor {@link DB2JDBCURL(String, String, String, boolean, String)}.
+         */
+        protected String formatURL() {
+            String url = "jdbc:db2://" + formatNode(getNode()) + ":" //$NON-NLS-1$ //$NON-NLS-2$
+                            + getPort()
+                            + "/" + getDatabaseName() //$NON-NLS-1$
+                            + ":retrieveMessagesFromServerOnGetMessage=true;"; //$NON-NLS-1$
+            if( useClientAuthentication() )
+                url += CLIENT_AUTHETICATION_TEXT;
+            if(this.urlProperties!=null && this.urlProperties.length()>0){
+            	url += this.urlProperties;
+            }
+            url += getURLOptionalParameters();
+            return url;
+        }         
+        
+        
+        /**
+         * @return The driver URL formatted in the default URL format
+         */
+		public String getBaseURL() {
+			String url = "jdbc:db2://" + formatNode(getNode()) + ":" //$NON-NLS-1$ //$NON-NLS-2$
+					+ getPort()
+					+ "/" + getDatabaseName() //$NON-NLS-1$
+					+ ":retrieveMessagesFromServerOnGetMessage=true;"; //$NON-NLS-1$
+			if (useClientAuthentication())
+                url += CLIENT_AUTHETICATION_TEXT;
+			return url;
+		}
+
+        private String formatNode(String node)
+        {
+        	if (node.indexOf(":") > -1) { //$NON-NLS-1$
+        		return "[" + node + "]"; //$NON-NLS-1$ //$NON-NLS-2$
+        	}
+        	return node;
+        }
+        
+        /**
+         * Parses the specified URL string into URL attributes that can be accessed 
+         * by the corresponding getter methods.
+         */
+        protected void parseURL(String url) {
+			try {
+				setURLOptionalParameters(""); //$NON-NLS-1$
+				String remainingURL = url.substring(url.indexOf(':') + 1);
+				this.subprotocol = remainingURL.substring(0, remainingURL
+						.indexOf(':'));
+				remainingURL = remainingURL
+						.substring(remainingURL.indexOf(':') + 3);
+				this.node = remainingURL
+						.substring(0, remainingURL.indexOf('/'));
+				
+				if (node.indexOf('[') > -1 && node.indexOf("]:") > -1) { //$NON-NLS-1$
+					port = node.substring(node.indexOf("]:") + 2); //$NON-NLS-1$
+					node = node.substring(1, node.indexOf("]:")); //$NON-NLS-1$				
+				} else if (node.indexOf(':') > -1) {
+					port = node.substring(node.indexOf(':') + 1);
+					node = node.substring(0, node.indexOf(':'));
+				}
+				remainingURL = remainingURL
+						.substring(remainingURL.indexOf('/') + 1);
+				if (remainingURL.indexOf(':') > -1) {
+					this.databaseName = remainingURL.substring(0, remainingURL
+							.indexOf(':'));
+					remainingURL = remainingURL.substring(remainingURL
+							.indexOf(':') + 1);
+					this.urlProperties = remainingURL;
+					this.useClientAuthentication = (this.urlProperties.indexOf(CLIENT_AUTHETICATION_TEXT) > -1 );
+				} else {
+					if(remainingURL.indexOf(';') > -1){
+						this.databaseName = remainingURL.substring(0,remainingURL.indexOf(';'));
+						remainingURL=remainingURL.substring(remainingURL.indexOf(';')+1);
+						
+					}
+					else{
+						this.databaseName = remainingURL;
+						remainingURL=""; //$NON-NLS-1$
+					}
+					
+				}
+				
+				 String userOptionalParameters=""; //$NON-NLS-1$
+			     String userParameter = ""; //$NON-NLS-1$
+			     if(remainingURL!=null && remainingURL.length()>0)
+			     {
+				     StringTokenizer st = new StringTokenizer(remainingURL, ";"); //$NON-NLS-1$
+				     int tokenLength = st.countTokens();
+				     for(int i=0; i< tokenLength; i++)
+				     {  
+				    	 userParameter = st.nextToken();
+				    	 if(userParameter!=null && userParameter.length()>0){
+				    		 
+				    		 if(!(userParameter.startsWith("retrieveMessagesFromServerOnGetMessage") //$NON-NLS-1$
+				    				 ||(userParameter.equals("securityMechanism=4")	//$NON-NLS-1$    				 
+				    				 || userParameter.startsWith("traceFile") //$NON-NLS-1$
+						    		 || userParameter.startsWith("traceFileAppend") //$NON-NLS-1$
+						   			 || userParameter.startsWith("traceLevel") //$NON-NLS-1$
+					 				 || userParameter.startsWith("traceDirectory")))) //$NON-NLS-1$
+				    			 userOptionalParameters +=	userParameter+";"; 
+				    		 //securityMechanism=4 equals Client authentication, so set
+				    		 //clientAuthentication flag
+				    		 if (userParameter.equals("securityMechanism=4")){ //$NON-NLS-1$			
+				    			 useClientAuthentication=true;
+				    		 }
+				    	 }
+				     }
+		
+					 setURLOptionalParameters(userOptionalParameters);
+			     }
+			} catch (Exception e) {
+				//e.printStackTrace();				
+			}
+		}
+	}
+	/**
+	 *  Sets the URL optional properties.
+	 */
+	public void setURLOptionalParameters(String connProp)
+	{
+		this.urlOptionalParameters = connProp;
+	}
+	
+	/**
+	 * @return Returns the URL optional properties.
+	 */
+	public String getURLOptionalParameters()
+	{
+		return this.urlOptionalParameters;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/src/org/eclipse/datatools/enablement/ibm/db2/luw/ui/l10n/DB2LUWUI.properties b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/src/org/eclipse/datatools/enablement/ibm/db2/luw/ui/l10n/DB2LUWUI.properties
new file mode 100644
index 0000000..1276a02
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui/src/org/eclipse/datatools/enablement/ibm/db2/luw/ui/l10n/DB2LUWUI.properties
@@ -0,0 +1,50 @@
+# NLS_MESSAGEFORMAT_VAR          needed to handle quotes correctly
+# NLS_ENCODING=UNICODE
+#
+#  Copyright 2004, 2014 IBM Corporation and others. All rights reserved.
+#  This program and the accompanying materials are made available under the
+#  terms of the Eclipse Public License v1.0 which accompanies this distribution,
+#  and is available at http://www.eclipse.org/legal/epl-v10.html
+#  
+#  Contributors: IBM Corporation - initial API and implementation
+#                Actuate Corporation - re-factored to an extendable base class and
+#                   added the optional properties tab
+#
+
+#
+## Server Explorer LUW Connection Provider
+#
+CUI_NEWCW_DATABASE_LBL_UI_ = &Database:
+CUI_NEWCW_HOST_LBL_UI_ = &Host:
+CUI_NEWCW_PORT_LBL_UI_ = Port nu&mber:
+CUI_NEWCW_JDBCDRIVERCLS_LBL_UI_ = JDBC driver cl&ass:
+CUI_NEWCW_JDBCCLSLOCATION_LBL_UI_ = &Class location:
+CUI_NEWCW_JARBROWSE_BTN_UI_ = Bro&wse...
+CUI_NEWCW_CONNECTIONURL_LBL_UI_= Connection UR&L:
+CUI_NEWCW_DEFDBNAME_VAL_UI_ = SAMPLE
+CUI_NEWCW_CLIENTAUTHENTICATION_BTN_UI_ = Use cl&ient authentication
+CUI_NEWCW_USERNAME_LBL_UI_ = User n&ame:
+CUI_NEWCW_PASSWORD_LBL_UI_ = Pass&word:
+CUI_NEWCW_SAVE_PASSWORD_LBL_UI_ = Sa&ve password
+CUI_NEWCW_ENTER_SERVER_PRINCIPAL_MESSAGE_UI_ = Enter the server principal.
+CUI_NEWCW_SERVER_PRINCIPAL_LBL_UI_ = Se&rver principal:
+CUI_NEWCW_ENTER_BASE_DN_MESSAGE_UI_ = Enter the base DN.
+CUI_NEWCW_USE_BASE_DN_BTN_UI_ = Specify base DN for search
+CUI_NEWCW_BASE_DN_LBL_UI_ = Base DN:
+CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_ = Database
+CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_ = User name
+CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_ = Save password
+CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_ = Host
+CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_ = Port number
+CUI_NEWCW_URL_SUMMARY_DATA_TEXT_ = URL
+CUI_NEWCW_BASEDN_SUMMARY_DATA_TEXT_ = Base DN
+CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_ = true
+CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ = false
+CUI_NEWCW_VALIDATE_DATABASE_REQ_UI_ = Enter a database name; for example, {0}.
+CUI_NEWCW_VALIDATE_HOST_REQ_UI_= Enter the host name for the database server.
+CUI_NEWCW_VALIDATE_PORT_REQ_UI_ = Enter the connection port number for the database server.
+CUI_NEWCW_VALIDATE_USERID_REQ_UI_ = Enter a user name.
+CUI_NEWCW_VALIDATE_PASSWORD_REQ_UI_ = Enter a password.
+CUI_NEWCW_DEFAULT_SCHEMA_LBL_UI_ = Default schema:
+CUI_NEWCW_DEFAULT_SCHEMA_SUMMARY_DATA_TEXT_ = Default schema
+CUI_NEWCW_KERBOROS_KINIT_AUTHENTICATION = Use cached ticket-granting ticket (TGT)
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/.classpath b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/.gitignore b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/.project b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/.project
new file mode 100644
index 0000000..cd8c0c7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.ibm.db2.luw</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..d1c1b73
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/META-INF/MANIFEST.MF
@@ -0,0 +1,23 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.datatools.enablement.ibm.db2.luw;singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.datatools.connectivity,
+ org.eclipse.datatools.connectivity.sqm.core,
+ org.eclipse.datatools.enablement.ibm,
+ org.eclipse.datatools.enablement.ibm.db2,
+ org.eclipse.datatools.modelbase.dbdefinition,
+ org.eclipse.datatools.modelbase.sql,
+ org.eclipse.emf.ecore.change
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.datatools.enablement.ibm.db2.luw,
+ org.eclipse.datatools.enablement.ibm.db2.internal.luw,
+ org.eclipse.datatools.enablement.ibm.db2.luw.catalog,
+ org.eclipse.datatools.enablement.ibm.db2.luw.containment,
+ org.eclipse.datatools.enablement.ibm.db2.luw.model
+Bundle-Vendor: %providerName
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Activator: org.eclipse.datatools.enablement.ibm.db2.luw.DB2LUWPluginActivator
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/about.html b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/build.properties b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/build.properties
new file mode 100644
index 0000000..cea96bc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/build.properties
@@ -0,0 +1,15 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               about.html,\
+               icons/,\
+               plugin.properties,\
+               plugin.xml
+src.dir	= src/
+plugin.version =	1.0.0.200706071
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/icons/jdbc_16.gif b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/icons/jdbc_16.gif
new file mode 100644
index 0000000..ef7809c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/icons/jdbc_16.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/plugin.properties b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/plugin.properties
new file mode 100644
index 0000000..2e76077
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/plugin.properties
@@ -0,0 +1,33 @@
+###############################################################################
+# Copyright (c) 2006, 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName=Eclipse Data Tools Platform IBM DB2 UDB LUW Plug-in
+providerName=Eclipse Data Tools Platform
+
+driverClass = Driver Class
+driverVendor = Vendor
+driverVersion = Version
+driverDBName = Database Name
+driverConnectionURL = Connection URL
+driverUID = User ID
+driverPWD = Password
+
+DB2_UDB_CATEGORY_NAME = DB2 for Linux, UNIX, and Windows
+
+org.eclipse.datatools.enablement.ibm.db2.luw.driverTemplate = IBM Data Server Driver for JDBC and SQLJ
+org.eclipse.datatools.enablement.ibm.db2.luw.kerberosDriverTemplate=IBM Data Server Driver for JDBC and SQLJ using Kerberos security
+org.eclipse.datatools.enablement.ibm.db2.luw.ldapDriverTemplate=IBM Data Server Driver for JDBC and SQLJ using LDAP
+org.eclipse.datatools.enablement.ibm.db2.luw.jdbc4.kerberosDriverTemplate=IBM Data Server Driver for JDBC and SQLJ (JDBC 4.0) using Kerberos security
+org.eclipse.datatools.enablement.ibm.db2.luw.jdbc4.ldapDriverTemplate=IBM Data Server Driver for JDBC and SQLJ (JDBC 4.0) using LDAP
+org.eclipse.datatools.enablement.ibm.db2.luw.jdbc4.driverTemplate = IBM Data Server Driver for JDBC and SQLJ (JDBC 4.0)
+org.eclipse.datatools.enablement.ibm.db2.luw.other.driverTemplate = Other Driver
+
+jdbc.connection.name = JDBC Connection
+profile.db2.luw.title = DB2 for Linux, UNIX, and Windows
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/plugin.xml b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/plugin.xml
new file mode 100644
index 0000000..08393a1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/plugin.xml
@@ -0,0 +1,688 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+      <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.logicalContainment">
+      <containment
+            package="http:///org/eclipse/datatools/enablement/ibm/db2/luw.ecore"
+            class="LUWDatabase"
+            provider="org.eclipse.datatools.enablement.ibm.db2.luw.containment.LUWDatabaseContainmentProvider">
+      </containment>
+            <containment
+            package="http:///org/eclipse/datatools/enablement/ibm/db2/luw.ecore"
+            class="LUWTemporaryTable"
+            provider="org.eclipse.datatools.enablement.ibm.db2.luw.containment.LUWTemporaryTableContainmentProvider">
+      </containment>
+      <containment
+            package="http:///org/eclipse/datatools/enablement/ibm/db2/luw.ecore"
+            class="LUWGlobalVariable"
+            provider="org.eclipse.datatools.enablement.ibm.db2.luw.containment.LUWGlobalVariableContainmentProvider">
+      </containment>
+      <containment
+            package="http:///org/eclipse/datatools/enablement/ibm/db2/luw.ecore"
+            class="LUWNickname"
+            provider="org.eclipse.datatools.enablement.ibm.db2.luw.containment.LUWNicknameContainmentProvider">
+      </containment>
+      <containment
+            package="http:///org/eclipse/datatools/enablement/ibm/db2/luw.ecore"
+            class="LUWServer"
+            provider="org.eclipse.datatools.enablement.ibm.db2.luw.containment.LUWServerContainmentProvider">
+      </containment>
+      <containment
+            package="http:///org/eclipse/datatools/enablement/ibm/db2/luw.ecore"
+            class="LUWPartitionGroup"
+            provider="org.eclipse.datatools.enablement.ibm.db2.luw.containment.LUWPartitionGroupContainmentProvider">
+      </containment>
+      <containment
+            package="http:///org/eclipse/datatools/enablement/ibm/db2/luw.ecore"
+            class="LUWTableSpace"
+            provider="org.eclipse.datatools.enablement.ibm.db2.luw.containment.LUWTableSpaceContainmentProvider">
+      </containment>
+      <containment
+            package="http:///org/eclipse/datatools/enablement/ibm/db2/luw.ecore"
+            class="LUWBufferPool"
+            provider="org.eclipse.datatools.enablement.ibm.db2.luw.containment.LUWBufferPoolContainmentProvider">
+      </containment>
+      <containment
+            package="http:///org/eclipse/datatools/enablement/ibm/db2/luw.ecore"
+            class="LUWDatabasePartition"
+            provider="org.eclipse.datatools.enablement.ibm.db2.luw.containment.LUWDatabasePartitionContainmentProvider">
+      </containment>
+      <containment
+            package="http:///org/eclipse/datatools/enablement/ibm/db2/luw.ecore"
+            class="LUWWrapper"
+            provider="org.eclipse.datatools.enablement.ibm.db2.luw.containment.LUWWrapperContainmentProvider">
+      </containment>
+      <containment
+            package="http:///org/eclipse/datatools/enablement/ibm/db2/luw.ecore"
+            class="FederatedProcedure"
+            provider="org.eclipse.datatools.enablement.ibm.db2.luw.containment.LUWFederatedSPContainmentProvider">
+      </containment>    
+      <containment
+            package="http:///org/eclipse/datatools/enablement/ibm/db2/luw.ecore"
+            class="LUWUserMapping"
+            provider="org.eclipse.datatools.enablement.ibm.db2.luw.containment.LUWUserMappingContainmentProvider">
+      </containment>
+      <containment
+            package="http:///org/eclipse/datatools/enablement/ibm/db2/luw.ecore"
+            class="LUWSecurityPolicy"
+            provider="org.eclipse.datatools.enablement.ibm.db2.luw.containment.LUWSecurityPolicyContainmentProvider">
+      </containment>   
+      <containment
+            package="http:///org/eclipse/datatools/enablement/ibm/db2/luw.ecore"
+            class="LUWSecurityLabelComponent"
+            provider="org.eclipse.datatools.enablement.ibm.db2.luw.containment.LUWSecurityLabelComponentContainmentProvider">
+      </containment>
+      <containment
+            package="http:///org/eclipse/datatools/enablement/ibm/db2/luw.ecore"
+            class="LUWSecurityLabelComponentElement"
+            provider="org.eclipse.datatools.enablement.ibm.db2.luw.containment.LUWSecurityLabelComponentElementContainmentProvider">
+      </containment>
+      <containment
+            package="http:///org/eclipse/datatools/enablement/ibm/db2/luw.ecore"
+            class="LUWSecurityLabel"
+            provider="org.eclipse.datatools.enablement.ibm.db2.luw.containment.LUWSecurityLabelContainmentProvider">
+      </containment>
+      <containment
+            package="http:///org/eclipse/datatools/enablement/ibm/db2/luw.ecore"
+            class="LUWTable"
+            provider="org.eclipse.datatools.enablement.ibm.db2.luw.containment.LUWTableContainmentProvider">
+      </containment>
+   </extension>
+   
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.dataModelElementFactory">
+      <factory
+            version="V8.1"
+            product="DB2 UDB"
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.DB2LUWModelElementFactory">
+      </factory>
+      <factory
+            version="V8.2"
+            product="DB2 UDB"
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.DB2LUWModelElementFactory">
+      </factory>
+      <factory
+            version="V9.1"
+            product="DB2 UDB"
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.DB2LUWModelElementFactory">
+      </factory>
+      <factory
+            version="V9.5"
+            product="DB2 UDB"
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.DB2LUWModelElementFactory">
+      </factory>
+      <factory
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.DB2LUWModelElementFactory"
+            product="DB2 UDB"
+            version="V9.7">
+      </factory>
+      <factory
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.DB2LUWModelElementFactory"
+            product="DB2 UDB"
+            version="V9.8">
+      </factory>
+      <factory
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.DB2LUWModelElementFactory"
+            product="DB2 UDB"
+            version="V10.1">
+      </factory>
+      <factory
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.DB2LUWModelElementFactory"
+            product="DB2 UDB"
+            version="V10.5">
+      </factory>
+   </extension>
+   
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.catalog">
+      <catalog
+            version="V8.1"
+            product="DB2 UDB"
+            provider="org.eclipse.datatools.enablement.ibm.db2.luw.catalog.LUWCatalogProvider"
+            priority = "10">
+      </catalog>
+      <catalog
+            version="V8.2"
+            product="DB2 UDB"
+            provider="org.eclipse.datatools.enablement.ibm.db2.luw.catalog.LUWCatalogProvider"
+            priority = "10">
+      </catalog>
+      <catalog
+            version="V9.1"
+            product="DB2 UDB"
+            provider="org.eclipse.datatools.enablement.ibm.db2.luw.catalog.LUWCatalogProvider"
+            priority = "10">
+      </catalog>
+      <catalog
+            version="V9.5"
+            product="DB2 UDB"
+            provider="org.eclipse.datatools.enablement.ibm.db2.luw.catalog.LUWCatalogProvider"
+            priority = "10">
+      </catalog>
+      <catalog
+            version="V9.7"
+            product="DB2 UDB"
+            provider="org.eclipse.datatools.enablement.ibm.db2.luw.catalog.LUWCatalogProvider"
+            priority = "10">
+      </catalog>
+      <catalog
+            version="V9.8"
+            product="DB2 UDB"
+            provider="org.eclipse.datatools.enablement.ibm.db2.luw.catalog.LUWCatalogProvider"
+            priority = "10">
+      </catalog>
+      <catalog
+            version="V10.1"
+            product="DB2 UDB"
+            provider="org.eclipse.datatools.enablement.ibm.db2.luw.catalog.LUWCatalogProvider"
+            priority = "10">
+      </catalog>
+      <catalog
+            version="V10.5"
+            product="DB2 UDB"
+            provider="org.eclipse.datatools.enablement.ibm.db2.luw.catalog.LUWCatalogProvider"
+            priority = "10">
+      </catalog>
+   </extension>
+ 
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.ddlGeneration">
+      <generator
+            product="DB2 UDB"
+            version="V8.1"
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.ddl.LUWDdlGenerator">
+      </generator>
+      <generator
+            product="DB2 UDB"
+            version="V8.2"
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.ddl.LUWDdlGenerator">
+      </generator>
+      <generator
+            product="DB2 UDB"
+            version="V9.1"
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.ddl.LUWDdlGenerator">
+      </generator>
+      <generator
+            product="DB2 UDB"
+            version="V9.5"
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.ddl.LUWDdlGenerator">
+      </generator>
+      <generator
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.ddl.LUWDdlGenerator"
+            product="DB2 UDB"
+            version="V9.7">
+      </generator>
+      <generator
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.ddl.LUWDdlGenerator"
+            product="DB2 UDB"
+            version="V9.8">
+      </generator>
+      <generator
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.ddl.LUWDdlGenerator"
+            product="DB2 UDB"
+            version="V10.1">
+      </generator>
+      <generator
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.ddl.LUWDdlGenerator"
+            product="DB2 UDB"
+            version="V10.5">
+      </generator>
+      <delta
+            product="DB2 UDB"
+            version="V8.1"
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.ddl.LUWDeltaDdlGenerator">
+      </delta>
+      <delta
+            product="DB2 UDB"
+            version="V8.2"
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.ddl.LUWDeltaDdlGenerator">
+      </delta>
+      <delta
+            product="DB2 UDB"
+            version="V9.1"
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.ddl.LUWDeltaDdlGenerator9">
+      </delta>
+      <delta
+            product="DB2 UDB"
+            version="V9.5"
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.ddl.LUWDeltaDdlGenerator95">
+      </delta>
+      <delta
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.ddl.LUWDeltaDdlGenerator97"
+            product="DB2 UDB"
+            version="V9.7">
+      </delta>
+      <delta
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.ddl.LUWDeltaDdlGenerator97"
+            product="DB2 UDB"
+            version="V9.8">
+      </delta>
+      <delta
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.ddl.LUWDeltaDdlGenerator97"
+            product="DB2 UDB"
+            version="V10.1">
+      </delta>
+      <delta
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.ddl.LUWDeltaDdlGenerator97"
+            product="DB2 UDB"
+            version="V10.5">
+      </delta>
+   </extension>
+ 
+   <extension
+         point="org.eclipse.datatools.sqltools.data.core.columnDataAccessors">
+      <accessor
+            vendor="DB2 UDB"
+            dataType="DATALINK"
+            class="org.eclipse.datatools.enablement.ibm.db2.data.DatalinkAccessor"
+            />
+       <accessor
+            vendor="DB2 UDB"
+            dataType="DISTINCT"
+            class="org.eclipse.datatools.enablement.ibm.db2.data.DistinctAccessor"
+            />   
+   </extension>
+ 
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.databaseRecognition">
+      <recognizer
+            class="org.eclipse.datatools.enablement.ibm.db2.internal.luw.LUWDatabaseRecognizer">
+      </recognizer>
+   </extension>
+
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.metaDataExtension">
+      <metaDataExtension
+            version="V8.1"
+            product="DB2 UDB"
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.LUWMetaDataExtension">
+      </metaDataExtension>
+      <metaDataExtension
+            version="V8.2"
+            product="DB2 UDB"
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.LUWMetaDataExtension">
+      </metaDataExtension>
+      <metaDataExtension
+            version="V9.1"
+            product="DB2 UDB"
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.LUWMetaDataExtension">
+      </metaDataExtension>
+      <metaDataExtension
+            version="V9.5"
+            product="DB2 UDB"
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.LUWMetaDataExtension">
+      </metaDataExtension>
+      <metaDataExtension
+            version="V9.7"
+            product="DB2 UDB"
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.LUWMetaDataExtension">
+      </metaDataExtension> 
+      <metaDataExtension
+            version="V9.8"
+            product="DB2 UDB"
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.LUWMetaDataExtension">
+      </metaDataExtension> 
+      <metaDataExtension
+            version="V10.1"
+            product="DB2 UDB"
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.LUWMetaDataExtension">
+      </metaDataExtension>
+      <metaDataExtension
+            version="V10.5"
+            product="DB2 UDB"
+            class="org.eclipse.datatools.enablement.ibm.db2.luw.LUWMetaDataExtension">
+      </metaDataExtension>
+   </extension>
+
+   <extension point="org.eclipse.datatools.connectivity.driverExtension">
+      <driverTemplateOverride 
+        priority="3" 
+        createDefault="true" 
+        valuesProvider="org.eclipse.datatools.enablement.ibm.db2.luw.DB2LUWDriverValuesProvider" 
+        targetId="org.eclipse.datatools.enablement.ibm.db2.luw.driverTemplate" /> 
+   </extension>
+   
+   <extension point="org.eclipse.datatools.connectivity.driverExtension">
+      <driverTemplateOverride 
+        priority="3" 
+        createDefault="true" 
+        targetId="org.eclipse.datatools.enablement.ibm.db2.luw.other.driverTemplate" /> 
+   </extension>
+ 
+    <extension
+         point="org.eclipse.datatools.connectivity.driverExtension">    
+      <driverTemplate
+            createDefault="true"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.enablement.ibm.db2.luw.kerberosDriverTemplate"
+            jarList="C:\Program Files\IBM\SQLLIB\java\db2jcc.jar,C:\Program Files\IBM\SQLLIB\java\db2jcc_license_cu.jar"
+            name="%org.eclipse.datatools.enablement.ibm.db2.luw.kerberosDriverTemplate"
+            parentCategory="org.eclipse.datatools.enablement.ibm.db2.driverCategory"
+            valuesProvider="org.eclipse.datatools.enablement.ibm.db2.luw.DB2LUWDriverValuesProvider"
+            displayRank="5">
+<!--         <migration
+                  class="org.eclipse.datatools.connectivity.drivers.DriverJarFileMigrator">
+         </migration> -->
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%driverClass"
+                  value="com.ibm.db2.jcc.DB2Driver"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%driverVendor"
+                  value="DB2 UDB"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%driverVersion"
+                  value="V9.1"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%driverDBName"
+                  value="SAMPLE"
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%driverConnectionURL"
+                  value="jdbc:db2://localhost:50000/SAMPLE:retrieveMessagesFromServerOnGetMessage=true;securityMechanism=11;"
+                  required="true"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+   </extension>
+   
+        <extension
+         point="org.eclipse.datatools.connectivity.driverExtension">    
+      <driverTemplate
+            createDefault="true"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.enablement.ibm.db2.luw.jdbc4.kerberosDriverTemplate"
+            jarList="C:\Program Files\IBM\SQLLIB\java\db2jcc4.jar,C:\Program Files\IBM\SQLLIB\java\db2jcc_license_cu.jar"
+            name="%org.eclipse.datatools.enablement.ibm.db2.luw.jdbc4.kerberosDriverTemplate"
+            parentCategory="org.eclipse.datatools.enablement.ibm.db2.driverCategory"
+            valuesProvider="org.eclipse.datatools.enablement.ibm.db2.luw.DB2LUWJDBC4DriverValuesProvider"
+            displayRank="2">
+<!--         <migration
+                  class="org.eclipse.datatools.connectivity.drivers.DriverJarFileMigrator">
+         </migration> -->
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%driverClass"
+                  value="com.ibm.db2.jcc.DB2Driver"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%driverVendor"
+                  value="DB2 UDB"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%driverVersion"
+                  value="V9.1"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%driverDBName"
+                  value="SAMPLE"
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%driverConnectionURL"
+                  value="jdbc:db2://localhost:50000/SAMPLE:retrieveMessagesFromServerOnGetMessage=true;securityMechanism=11;"
+                  required="true"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+   </extension>
+ 
+   <extension
+         point="org.eclipse.datatools.connectivity.driverExtension">   
+    <driverTemplate
+            createDefault="true"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.enablement.ibm.db2.luw.jdbc4.driverTemplate"
+            jarList="C:\Program Files\IBM\SQLLIB\java\db2jcc4.jar;C:\Program Files\IBM\SQLLIB\java\db2jcc_license_cu.jar"
+            name="%org.eclipse.datatools.enablement.ibm.db2.luw.jdbc4.driverTemplate"
+            parentCategory="org.eclipse.datatools.enablement.ibm.db2.driverCategory"
+            valuesProvider="org.eclipse.datatools.enablement.ibm.db2.luw.DB2LUWJDBC4DriverValuesProvider"
+            displayRank="1">
+<!--         <migration
+                  class="org.eclipse.datatools.connectivity.drivers.DriverJarFileMigrator">
+         </migration> -->
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%driverClass"
+                  value="com.ibm.db2.jcc.DB2Driver"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%driverVendor"
+                  value="DB2 UDB"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%driverVersion"
+                  value="V9.1"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%driverDBName"
+                  value="SAMPLE"
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%driverConnectionURL"
+                  value="jdbc:db2://localhost:50000/SAMPLE:retrieveMessagesFromServerOnGetMessage=true;"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%driverUID"
+                  value=""
+                  required="false"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%driverPWD"
+                  required="false"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+   </extension>
+
+   <extension
+         point="org.eclipse.datatools.connectivity.connectionProfile">
+      <connectionProfile
+            category="org.eclipse.datatools.connectivity.db.category"
+            configurationType="org.eclipse.datatools.connectivity.db.generic.configurationType"
+            icon="icons/jdbc_16.gif"
+            id="org.eclipse.datatools.enablement.ibm.db2.luw.connectionProfile"
+            name="%profile.db2.luw.title"
+            pingFactory="org.eclipse.datatools.enablement.ibm.db2.internal.luw.JDBCLUWConnectionFactory"
+            propertiesPersistenceHook="org.eclipse.datatools.enablement.ibm.db2.internal.luw.LUWDBPropertiesPersistenceHook"/>
+      <connectionFactory
+            class="org.eclipse.datatools.enablement.ibm.db2.internal.luw.JDBCLUWConnectionFactory"
+            id="java.sql.Connection"
+            name="%jdbc.connection.name"
+            profile="org.eclipse.datatools.enablement.ibm.db2.luw.connectionProfile"/>
+   </extension>   
+   
+	<extension
+         point="org.eclipse.datatools.connectivity.driverExtension">    
+         <category
+      		parentCategory="org.eclipse.datatools.connectivity.db.driverCategory"
+            id="org.eclipse.datatools.enablement.ibm.db2.driverCategory"
+            name="%DB2_UDB_CATEGORY_NAME"/>    
+   
+      <driverTemplate
+            createDefault="false"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.enablement.ibm.db2.luw.driverTemplate"
+            jarList="C:\Program Files\IBM\SQLLIB\java\db2jcc.jar;C:\Program Files\IBM\SQLLIB\java\db2jcc_license_cu.jar"
+            name="%org.eclipse.datatools.enablement.ibm.db2.luw.driverTemplate"
+            parentCategory="org.eclipse.datatools.enablement.ibm.db2.driverCategory"
+            displayRank="4">
+<!--          <migration
+                  class="org.eclipse.datatools.connectivity.drivers.DriverJarFileMigrator">
+      	 </migration> -->
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%driverClass"
+                  value="com.ibm.db2.jcc.DB2Driver"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%driverVendor"
+                  value="DB2 UDB"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%driverVersion"
+                  value="V9.1"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%driverDBName"
+                  value="SAMPLE"
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%driverConnectionURL"
+                  value="jdbc:db2://localhost:50000/SAMPLE:retrieveMessagesFromServerOnGetMessage=true;"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%driverUID"
+                  value=""
+                  required="false"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%driverPWD"
+                  required="false"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+   </extension>
+   
+   <extension
+         point="org.eclipse.datatools.connectivity.driverExtension">    
+      <driverTemplate
+            createDefault="false"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.enablement.ibm.db2.luw.other.driverTemplate"
+            jarList=""
+            name="%org.eclipse.datatools.enablement.ibm.db2.luw.other.driverTemplate"
+            parentCategory="org.eclipse.datatools.enablement.ibm.db2.driverCategory"
+            displayRank="8">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%driverClass"
+                  value=""
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%driverVendor"
+                  value="DB2 UDB"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%driverVersion"
+                  value="V9.1"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%driverDBName"
+                  value=""
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%driverConnectionURL"
+                  value=""
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%driverUID"
+                  value=""
+                  required="false"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%driverPWD"
+                  required="false"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+   </extension>
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.mappings">
+      <providerIDtoDriverCategoryID
+            driverCategoryID="org.eclipse.datatools.enablement.ibm.db2.driverCategory"
+            providerID="org.eclipse.datatools.enablement.ibm.db2.luw.connectionProfile">
+      </providerIDtoDriverCategoryID>
+   </extension>
+   
+   
+   
+ </plugin>  
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/internal/luw/ILUWConnectionProfileConstants.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/internal/luw/ILUWConnectionProfileConstants.java
new file mode 100644
index 0000000..d48ef7a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/internal/luw/ILUWConnectionProfileConstants.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.internal.luw;
+
+
+public interface ILUWConnectionProfileConstants {
+
+	public static final String DB2_LUW_CATEGORY_ID = "org.eclipse.datatools.enablement.ibm.db2.driverCategory"; //$NON-NLS-1$
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/internal/luw/JDBCLUWConnectionFactory.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/internal/luw/JDBCLUWConnectionFactory.java
new file mode 100644
index 0000000..4272321
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/internal/luw/JDBCLUWConnectionFactory.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.internal.luw;
+
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionFactory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+
+public class JDBCLUWConnectionFactory implements IConnectionFactory {
+
+	public JDBCLUWConnectionFactory() {
+		super();
+	}
+
+	public IConnection createConnection(IConnectionProfile profile) {
+		JDBCLUWJDBCConnection connection = new JDBCLUWJDBCConnection(profile,
+				getClass());
+		connection.open();
+		return connection;
+	}
+
+	public IConnection createConnection(IConnectionProfile profile, String uid,
+			String pwd) {
+		return createConnection(profile);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/internal/luw/JDBCLUWJDBCConnection.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/internal/luw/JDBCLUWJDBCConnection.java
new file mode 100644
index 0000000..8b0483b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/internal/luw/JDBCLUWJDBCConnection.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.internal.luw;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.SQLException;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.Version;
+import org.eclipse.datatools.connectivity.drivers.jdbc.JDBCConnection;
+import org.eclipse.datatools.connectivity.exceptions.DBNotStartException;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinitionRegistry;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+
+public class JDBCLUWJDBCConnection extends JDBCConnection {
+
+	private Version techVersion = Version.NULL_VERSION;
+	private Version serverVersion = Version.NULL_VERSION;
+	private String serverName;
+
+	public JDBCLUWJDBCConnection(IConnectionProfile profile, Class factoryClass) {
+		super(profile, factoryClass);
+	}
+
+	public String getProviderName() {
+		return serverName;
+	}
+
+	public Version getProviderVersion() {
+		return serverVersion;
+	}
+
+	public Version getTechnologyVersion() {
+		return techVersion;
+	}
+
+	protected void initVersions() {
+		try {
+			DatabaseMetaData dbmd = ((Connection) this.getRawConnection())
+					.getMetaData();
+			try {
+				DatabaseDefinitionRegistry dbDefRegistry = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry();			
+				DatabaseDefinition dbDef = dbDefRegistry.recognize((Connection) this.getRawConnection());
+				if (dbDef != null) {
+					serverName = dbDef.getProductDisplayString() + " " + dbDef.getVersionDisplayString();
+				}
+			} catch (Exception e) {
+			}
+			try {
+				techVersion = new Version(dbmd.getJDBCMajorVersion(), dbmd
+						.getJDBCMinorVersion(), 0, new String());
+			} catch (Exception e) {
+			}
+		} catch (SQLException e) {
+		}
+	}
+	
+	public Throwable getConnectException() {
+		Throwable exception = super.getConnectException();
+		if((exception != null)
+				&&(exception instanceof SQLException)
+				&&(((SQLException)exception).getErrorCode()==-4499)
+				&&(exception.getCause() instanceof java.net.ConnectException)){
+			exception = new DBNotStartException(exception);
+		}
+		return exception ;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/internal/luw/LUWDBPropertiesPersistenceHook.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/internal/luw/LUWDBPropertiesPersistenceHook.java
new file mode 100644
index 0000000..4007e84
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/internal/luw/LUWDBPropertiesPersistenceHook.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.internal.luw;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.drivers.jdbc.JDBCPasswordPropertyPersistenceHook;
+
+public class LUWDBPropertiesPersistenceHook extends
+		JDBCPasswordPropertyPersistenceHook {
+
+	public boolean arePropertiesComplete(Properties props) {
+		return super.arePropertiesComplete(props) && areUserNameAndPasswordComplete(props);
+	}
+
+	private boolean areUserNameAndPasswordComplete(Properties props) {
+		String userid = props.getProperty(
+			IJDBCConnectionProfileConstants.USERNAME_PROP_ID, null);
+		String passwd = props.getProperty(
+				IJDBCConnectionProfileConstants.PASSWORD_PROP_ID, null);
+		return userid != null && userid.trim().length() > 0 && passwd != null
+			&& passwd.trim().length() > 0;
+	}
+
+	public String getConnectionPropertiesPageID() {
+		return "org.eclipse.datatools.enablement.ibm.db2.luw.profileProperties"; //$NON-NLS-1$
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/internal/luw/LUWDatabaseRecognizer.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/internal/luw/LUWDatabaseRecognizer.java
new file mode 100644
index 0000000..3cf8602
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/internal/luw/LUWDatabaseRecognizer.java
@@ -0,0 +1,144 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.internal.luw;
+
+import java.sql.Connection;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.internal.core.definition.DatabaseDefinitionRegistryImpl;
+import org.eclipse.datatools.connectivity.sqm.internal.core.definition.IDatabaseRecognizer;
+
+public class LUWDatabaseRecognizer implements IDatabaseRecognizer {
+    private static final String VERSION71 = "V7.1"; //$NON-NLS-1$
+    private static final String VERSION72 = "V7.2"; //$NON-NLS-1$
+    public static final String VERSION81 = "V8.1"; //$NON-NLS-1$
+    public static final String VERSION82 = "V8.2"; //$NON-NLS-1$
+    public static final String VERSION9 = "V9.1"; //$NON-NLS-1$
+    public static final String VERSION95 = "V9.5"; //$NON-NLS-1$
+    public static final String VERSION97 = "V9.7"; //$NON-NLS-1$
+    public static final String VERSION98 = "V9.8"; //$NON-NLS-1$
+    public static final String VERSION101 = "V10.1"; //$NON-NLS-1$
+    public static final String VERSION105 = "V10.5"; //$NON-NLS-1$
+
+    private static final String PRODUCT = "DB2 UDB"; //$NON-NLS-1$
+    
+    // !IMPORTANT!
+    // PLEASE NOTE AND READ THIS BEFORE MAKING MODIFICATIONS TO THIS FILE
+    //
+    // The below code is for version recognition of DB2 LUW databases.
+    // This code is executed at the time when we connect to a DB2 LUW
+    // database. It is vital that the correct DB2 LUW version is
+    // recognized as this is the version that all of our code looks at and
+    // a lot of our code is version specific. A bug in this code can cause
+    // huge issues. As an example there was a bug where the version check
+    // for DB2 LUW v10.1 was as follows.
+    // What it was in error
+    // else if(version.startsWith("SQL10010"))
+    // What it should have been
+    // else if(version.startsWith("SQL1001"))
+    // 
+    // That extra zero caused us to ONLY properly recognize DB2 LUW v10.1
+    // GA version. DB2 LUW v10.1 FP1 or later would not fall into this
+    // category and then would default to DB2 LUW v9.1. First off since
+    // this is done at connect time absolutely every user who uses our
+    // product in conjunction with DB2 LUW v10.1 FP1 or later hit this
+    // issue 100 percent of the time. This causes problems everywhere,
+    // loading code, generateDDL, modeling...
+    //
+    // The Product Release Code that we get from the DB2 LUW database
+    // is in the form of "SQL" followed by VRF (Version, Release and
+    // Fixpack). We only care about and should only be checking for
+    // "SQL" followed by VR (Version and Release).
+    //
+    // Example:
+    // Below are a few databases and their Product Release Code
+    // DB2 LUW v9.8 FP1  - SQL09081
+    // DB2 LUW v9.8 FP4  - SQL09084
+    // DB2 LUW v10.1 GA  - SQL10010
+    // DB2 LUW v10.1 FP2 - SQL10012
+    //
+    // The below version checks will identify and categorize
+    // all of the above databases IGNORING the fixpack value.
+    //
+    // else if(version.startsWith("SQL0908"))
+    // else if(version.startsWith("SQL1001"))
+    //
+    // Please see below an example of how to add a new version
+    // recognizer if a new Version or Release of DB2 LUW came out.
+    // Example: DB2 LUW v11.5 (made up)
+    //
+    // 1. Add a new variable to represent the new Version and/or Release.
+    //
+    //    public static final String VERSION115 = "V11.5"; //$NON-NLS-1$
+    //
+    //
+    // 2. Add a new 'else if' at the bottom to catch databases of this
+    //    type of Version and Release.
+    //
+    //    else if(version.startsWith("SQL1105")) { //$NON-NLS-1$
+    //         return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, VERSION115);
+    //    }
+    //
+    //    NOTE: This 'else if' will catch all databases of v11.5 regardless of fixpack.
+    //    NOTE: If you were to change it to startsWith("SQL11050") then it WOULD ONLY
+    //          CATCH DB2 LUW v11.5 GA AND NOT ANY OF THE FIXPACKS which is of course wrong.
+    //          So please make sure to quadruple check the string you will be matching.
+    //
+    //
+    // PLEASE NOTE AND READ THIS BEFORE MAKING MODIFICATIONS TO THIS FILE
+    // !IMPORTANT!
+    
+    public DatabaseDefinition recognize(Connection connection) {
+        try {
+            String version = connection.getMetaData().getDatabaseProductVersion();
+            
+            // Some versions are recognized in DTP
+            if(version.startsWith("SQL0701")) { //$NON-NLS-1$
+                return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, VERSION71);
+            }
+            else if(version.startsWith("SQL0702")) { //$NON-NLS-1$
+                return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, VERSION72);                
+            }
+            else if(version.startsWith("SQL0801")) { //$NON-NLS-1$
+                return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, VERSION81);
+            }
+            else if(version.startsWith("SQL0802")) { //$NON-NLS-1$
+                return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, VERSION82);                
+            }
+            else if(version.startsWith("SQL0901")) { //$NON-NLS-1$
+                return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, VERSION9);                               
+            } 
+            else if(version.startsWith("SQL0905")) { //$NON-NLS-1$
+                return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, VERSION95);                
+            } 
+            else if(version.startsWith("SQL0907")) { //$NON-NLS-1$
+                return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, VERSION97);                
+            }
+            else if(version.startsWith("SQL0908")) { //$NON-NLS-1$
+                return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, VERSION98);                
+            }
+            else if(version.startsWith("SQL1001")) { //$NON-NLS-1$
+                return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, VERSION101);
+            }
+            //Temporary hack to make 10.2 connection point to 10.5 connection profile
+            else if(version.startsWith("SQL1002")) { //$NON-NLS-1$
+                return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, VERSION105);
+            }
+            else if(version.startsWith("SQL1005")) { //$NON-NLS-1$
+                return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, VERSION105);
+            }
+        }
+        catch (Exception e) {
+        }
+
+        return null;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/DB2LUWDriverValuesProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/DB2LUWDriverValuesProvider.java
new file mode 100644
index 0000000..27c84a9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/DB2LUWDriverValuesProvider.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw;
+
+import org.eclipse.datatools.connectivity.drivers.IDriverValuesProvider;
+import org.eclipse.datatools.connectivity.drivers.models.TemplateDescriptor;
+import org.eclipse.datatools.enablement.ibm.util.ClientUtil;
+
+public class DB2LUWDriverValuesProvider implements IDriverValuesProvider{
+	private TemplateDescriptor  templateDescriptor = null;
+	
+	public String createDefaultValue(String key) {
+		String newKeyValue = null;
+		if (key.equals(VALUE_JARLIST)) { 
+			newKeyValue = locateDB2DriverJars();
+		}		
+		return newKeyValue;
+	}
+
+	public TemplateDescriptor getDriverTemplate() {
+		return templateDescriptor;
+	}
+
+	public void setDriverTemplate(TemplateDescriptor templateDescriptor) {
+		this.templateDescriptor = templateDescriptor;
+	}
+	
+	private String locateDB2DriverJars(){
+		String jarList = null;
+		String path = ClientUtil.getDB2UniversalDriverClientJarsPath();
+		if ((path != null) && (path.length() > 0)){
+			jarList = path;
+		}
+		return jarList;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/DB2LUWJDBC4DriverValuesProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/DB2LUWJDBC4DriverValuesProvider.java
new file mode 100644
index 0000000..c0c0bc1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/DB2LUWJDBC4DriverValuesProvider.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw;
+
+import org.eclipse.datatools.connectivity.drivers.IDriverValuesProvider;
+import org.eclipse.datatools.connectivity.drivers.models.TemplateDescriptor;
+import org.eclipse.datatools.enablement.ibm.util.ClientUtil;
+
+public class DB2LUWJDBC4DriverValuesProvider implements IDriverValuesProvider{
+	private TemplateDescriptor  templateDescriptor = null;
+	
+	public String createDefaultValue(String key) {
+		String newKeyValue = null;
+		if (key.equals(VALUE_JARLIST)) { 
+			newKeyValue = locateDB2DriverJars();
+		}		
+		return newKeyValue;
+	}
+
+	public TemplateDescriptor getDriverTemplate() {
+		return templateDescriptor;
+	}
+
+	public void setDriverTemplate(TemplateDescriptor templateDescriptor) {
+		this.templateDescriptor = templateDescriptor;
+	}
+	
+	private String locateDB2DriverJars(){
+		String jarList = null;
+		String path = ClientUtil.getDB2UniversalDriverJDBC4ClientJarsPath();
+		if ((path != null) && (path.length() > 0)){
+			jarList = path;
+		}
+		return jarList;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/DB2LUWModelElementFactory.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/DB2LUWModelElementFactory.java
new file mode 100644
index 0000000..ee37b52
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/DB2LUWModelElementFactory.java
@@ -0,0 +1,147 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFactory;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelFactory;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.modelbase.sql.constraints.SQLConstraintsPackage;
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataTypesPackage;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesPackage;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+public class DB2LUWModelElementFactory implements DataModelElementFactory {
+
+	public EObject create(EClass metaclass) {
+		if (metaclass == SQLSchemaPackage.eINSTANCE.getDatabase()) {
+			return LUWFactory.eINSTANCE.createLUWDatabase();
+		}
+		else if (metaclass == SQLSchemaPackage.eINSTANCE.getSchema()) {
+			return DB2ModelFactory.eINSTANCE.createDB2Schema();
+		}
+		else if (metaclass == SQLTablesPackage.eINSTANCE.getPersistentTable()) {
+			return LUWFactory.eINSTANCE.createLUWTable();
+		}
+		else if (metaclass == SQLTablesPackage.eINSTANCE.getViewTable()) {
+			return LUWFactory.eINSTANCE.createLUWView();
+		}
+		else if (metaclass == SQLTablesPackage.eINSTANCE.getColumn()) {
+			return LUWFactory.eINSTANCE.createLUWColumn();
+		}
+		else if (metaclass == SQLTablesPackage.eINSTANCE.getTrigger()) {
+			return DB2ModelFactory.eINSTANCE.createDB2Trigger();
+		}
+		else if (metaclass == SQLConstraintsPackage.eINSTANCE.getIndex()) {
+			return LUWFactory.eINSTANCE.createLUWIndex();
+		}
+		else if (metaclass == SQLRoutinesPackage.eINSTANCE.getProcedure()) {
+			return DB2ModelFactory.eINSTANCE.createDB2Procedure();
+		}
+		else if (metaclass == SQLRoutinesPackage.eINSTANCE.getUserDefinedFunction()) {
+			return DB2ModelFactory.eINSTANCE.createDB2UserDefinedFunction();
+		}
+		else if (metaclass == SQLRoutinesPackage.eINSTANCE.getMethod()) {
+			return DB2ModelFactory.eINSTANCE.createDB2Method();
+		}
+		else if (metaclass == SQLRoutinesPackage.eINSTANCE.getSource()) {
+			return DB2ModelFactory.eINSTANCE.createDB2Source();
+		}
+		else if (metaclass == DB2ModelPackage.eINSTANCE.getDB2Alias()) {
+			return DB2ModelFactory.eINSTANCE.createDB2Alias();
+		}
+		else if (metaclass == LUWPackage.eINSTANCE.getLUWMaterializedQueryTable()) {
+			return LUWFactory.eINSTANCE.createLUWMaterializedQueryTable();
+		}
+		else if (metaclass == SQLSchemaPackage.eINSTANCE.getIdentitySpecifier()) {
+			return DB2ModelFactory.eINSTANCE.createDB2IdentitySpecifier();
+		}
+//		else if (metaclass == LUWPackage.eINSTANCE.getLUWRelationalNicknameDefault()) {
+//			return LUWFactory.eINSTANCE.createLUWRelationalNicknameDefault();
+//		}
+//		else if (metaclass == LUWPackage.eINSTANCE.getLUWRelationalServerDefault()) {
+//			return LUWFactory.eINSTANCE.createLUWRelationalServerDefault();
+//		}
+		else if (metaclass == LUWPackage.eINSTANCE.getLUWPartitionGroup()) {
+			return LUWFactory.eINSTANCE.createLUWPartitionGroup();
+		}
+		else if (metaclass == LUWPackage.eINSTANCE.getLUWTableSpace()) {
+			return LUWFactory.eINSTANCE.createLUWTableSpace();
+		}
+		else if (metaclass == LUWPackage.eINSTANCE.getLUWDatabaseContainer()) {
+			return LUWFactory.eINSTANCE.createLUWDatabaseContainer();
+		}
+		else if (metaclass == LUWPackage.eINSTANCE.getLUWPartitionKey()) {
+			return LUWFactory.eINSTANCE.createLUWPartitionKey();
+		}
+		else if (metaclass == LUWPackage.eINSTANCE.getLUWDatabasePartition()) {
+			return LUWFactory.eINSTANCE.createLUWDatabasePartition();
+		}
+		else if (metaclass == LUWPackage.eINSTANCE.getLUWBufferPool()) {
+			return LUWFactory.eINSTANCE.createLUWBufferPool();
+		}		
+		else if (metaclass == SQLDataTypesPackage.eINSTANCE.getAttributeDefinition()) {
+			return LUWFactory.eINSTANCE.createLUWAttributeDefinition();
+		}
+		else if (metaclass == DB2ModelPackage.eINSTANCE.getDB2Package()) {
+			return LUWFactory.eINSTANCE.createLUWDatabasePackage();
+		}
+		else if (metaclass == DB2ModelPackage.eINSTANCE.getDB2PackageStatement()) {
+			return DB2ModelFactory.eINSTANCE.createDB2PackageStatement();
+		}
+		else if (metaclass == LUWPackage.eINSTANCE.getLUWGlobalVariable()) {
+			return LUWFactory.eINSTANCE.createLUWGlobalVariable();
+		}
+		else if (metaclass == LUWPackage.eINSTANCE.getLUWModule()) {
+			return LUWFactory.eINSTANCE.createLUWModule();
+		}
+		else if (metaclass == LUWPackage.eINSTANCE.getLUWModuleCondition()) {
+			return LUWFactory.eINSTANCE.createLUWModuleCondition();
+		}
+		else if (metaclass == LUWPackage.eINSTANCE.getLUWModuleGlobalVariable()) {
+			return LUWFactory.eINSTANCE.createLUWModuleGlobalVariable();
+		}
+		else if (metaclass == LUWPackage.eINSTANCE.getLUWModuleFunction()) {
+			return LUWFactory.eINSTANCE.createLUWModuleFunction();
+		}
+		else if (metaclass == LUWPackage.eINSTANCE.getLUWModuleProcedure()) {
+			return LUWFactory.eINSTANCE.createLUWModuleProcedure();
+		}
+		else if (metaclass == SQLDataTypesPackage.eINSTANCE.getArrayDataType()){
+			return LUWFactory.eINSTANCE.createLUWArrayDataType();
+		}
+		else if (metaclass == SQLDataTypesPackage.eINSTANCE.getRowDataType()){
+			return LUWFactory.eINSTANCE.createLUWRowDataType();
+		}
+		else if (metaclass == LUWPackage.eINSTANCE.getLUWWrapper()) {
+			return LUWFactory.eINSTANCE.createLUWGenericWrapper();
+		}
+		else if (metaclass == LUWPackage.eINSTANCE.getLUWServer()) {
+			return LUWFactory.eINSTANCE.createLUWGenericServer();
+		}
+		else if (metaclass == LUWPackage.eINSTANCE.getLUWUserMapping()) {
+			return LUWFactory.eINSTANCE.createLUWGenericUserMapping();
+		}
+		else if (metaclass == LUWPackage.eINSTANCE.getLUWNickname()) {
+			return LUWFactory.eINSTANCE.createLUWGenericNickname();
+		}		
+		else if (metaclass == LUWPackage.eINSTANCE.getFederatedProcedure()) {
+			return LUWFactory.eINSTANCE.createFederatedProcedure();
+		}
+		else {
+			return metaclass.getEPackage().getEFactoryInstance().create(metaclass);
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/DB2LUWPluginActivator.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/DB2LUWPluginActivator.java
new file mode 100644
index 0000000..ecbbe06
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/DB2LUWPluginActivator.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.core.runtime.Status;
+
+public class DB2LUWPluginActivator extends Plugin {
+    private static DB2LUWPluginActivator instance;
+    public static final String PLUGIN_ID = "org.eclipse.datatools.enablement.ibm.db2.luw"; //$NON-NLS-1$
+    
+    public static DB2LUWPluginActivator getInstance() { return instance; }
+
+    public DB2LUWPluginActivator() {
+        super();
+        instance = this;
+    }
+    
+    /**
+     * Convenience method for <code>log(String, int, Throwable, boolean)</code>
+     * {
+     * 
+     * @param message
+     *            message, if <code>null</code> the message from the throwable
+     *            is used
+     * @param throwable
+     *            optional throwable as details
+     */
+    public void log(String message, Throwable throwable) {
+        if (message == null) {
+            message = throwable.getLocalizedMessage();
+        }
+        log(message, IStatus.ERROR, throwable);
+    }
+
+    /**
+     * Create and add a status message to the eclipse log.
+     * 
+     * @param message
+     *            message
+     * @param severity
+     *            either IStatus.OK, IStatus.CANCEL, IStatus.ERROR,
+     *            IStatus.WARNING or IStatus.INFO
+     * @param throwable
+     *            optional throwable as details
+     * @see org.eclipse.core.runtime.IStatus
+     */
+    public void log(String message, int severity, Throwable throwable) {
+        IStatus status = new Status(severity, instance.getBundle()
+                .getSymbolicName(), IStatus.OK, message, throwable);
+        instance.getLog().log(status);
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/LUWMetaDataExtension.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/LUWMetaDataExtension.java
new file mode 100644
index 0000000..6cdf62a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/LUWMetaDataExtension.java
@@ -0,0 +1,118 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.definition.MetaDataExtension;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.internal.core.definition.AbstractMetaDataExtension;
+import org.eclipse.datatools.enablement.ibm.db2.internal.luw.LUWDatabaseRecognizer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission;
+import org.eclipse.datatools.enablement.ibm.util.ModelHelper;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.emf.ecore.EClass;
+
+public class LUWMetaDataExtension extends AbstractMetaDataExtension implements MetaDataExtension {
+
+	public int getMaximumIdentifierLength(SQLObject sqlObject) {
+		int maximumIdentifierLength = 0;
+		
+		if (sqlObject instanceof LUWTableSpace) {
+			LUWTableSpace tablespace = (LUWTableSpace)sqlObject;
+			LUWPartitionGroup group = tablespace.getGroup();
+			if (group != null) {
+				Database database = group.getDatabase();
+				if (database != null) {
+					DatabaseDefinition dbDef = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+					maximumIdentifierLength = dbDef.getTablespaceMaximumIdentifierLength();
+				}
+			}
+		}
+		else if (sqlObject instanceof LUWIndex) {
+			LUWIndex index = (LUWIndex)sqlObject;
+		
+			Schema schema = index.getSchema();
+			if (schema != null) {
+				Database database = ModelHelper.getDatabase(schema);
+				if (database != null) {
+					DatabaseDefinition dbDef = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+                    String ver = dbDef.getVersion();
+                    if (LUWDatabaseRecognizer.VERSION81.equalsIgnoreCase(ver) || 
+                        LUWDatabaseRecognizer.VERSION81.equalsIgnoreCase(ver)) {
+						maximumIdentifierLength = 18; 
+					}
+                    else if (LUWDatabaseRecognizer.VERSION9.equalsIgnoreCase(ver) || 
+                             LUWDatabaseRecognizer.VERSION95.equalsIgnoreCase(ver)) {
+						maximumIdentifierLength = 128;
+					}
+				}
+			}
+		}
+		else if (sqlObject instanceof LUWBufferPool) {
+			LUWBufferPool bufferPool = (LUWBufferPool)sqlObject;
+			if (bufferPool != null) {
+				maximumIdentifierLength = 18;
+			}
+		}
+		else if ( sqlObject instanceof DB2Permission ||
+				  sqlObject instanceof DB2Mask )
+		{
+			maximumIdentifierLength = 128;
+		}
+		
+		return maximumIdentifierLength;
+	}
+	
+	//TODO
+	public EClass getMetaClass(String metaClassName){
+		EClass eClass = (EClass)LUWPackage.eINSTANCE.getEClassifier(metaClassName);
+		
+		if (eClass == null) {
+			eClass = (EClass)DB2ModelPackage.eINSTANCE.getEClassifier(metaClassName);	
+		}
+		
+		if (eClass == null) {
+			if (metaClassName.equalsIgnoreCase("MaterializedQueryTable")) { //$NON-NLS-1$
+				eClass = (EClass)LUWPackage.eINSTANCE.getEClassifier("LUWMaterializedQueryTable"); //$NON-NLS-1$
+			}
+			else if (metaClassName.equalsIgnoreCase("Nickname")) { //$NON-NLS-1$
+				eClass = (EClass)LUWPackage.eINSTANCE.getEClassifier("LUWGenericNickname"); //$NON-NLS-1$
+			}
+			else if (metaClassName.equalsIgnoreCase("Tablespace")) { //$NON-NLS-1$
+				eClass = (EClass)LUWPackage.eINSTANCE.getEClassifier("LUWTableSpace"); //$NON-NLS-1$
+			}
+			else if (metaClassName.equalsIgnoreCase("Package")) { //$NON-NLS-1$
+				eClass = (EClass)LUWPackage.eINSTANCE.getEClassifier("LUWDatabasePackage"); //$NON-NLS-1$
+			}
+			else if (metaClassName.equalsIgnoreCase("Module")) { //$NON-NLS-1$
+				eClass = (EClass)LUWPackage.eINSTANCE.getEClassifier("LUWModule"); //$NON-NLS-1$
+			}
+			else if (metaClassName.equalsIgnoreCase("PLSQLPackage")) { //$NON-NLS-1$
+				eClass = (EClass)LUWPackage.eINSTANCE.getEClassifier("PLSQLPackage"); //$NON-NLS-1$
+			}
+			else if (metaClassName.equalsIgnoreCase("GlobalVariable")) { //$NON-NLS-1$
+				eClass = (EClass)LUWPackage.eINSTANCE.getEClassifier("LUWGlobalVariable"); //$NON-NLS-1$
+			}
+		}
+		
+		return eClass;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogAlias.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogAlias.java
new file mode 100644
index 0000000..bdd8080
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogAlias.java
@@ -0,0 +1,236 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.enablement.ibm.catalog.IDatabaseObject;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWUtil;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2AliasImpl;
+import org.eclipse.datatools.enablement.ibm.util.CloneUtil;
+import org.eclipse.datatools.modelbase.sql.datatypes.DataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataType;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWCatalogAlias extends DB2AliasImpl implements ICatalogObject,IDatabaseObject  {
+	public void refresh() {
+		this.aliasedTableLoaded = false;
+		this.columnsLoaded = false;
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+	
+	public Database getCatalogDatabase() {
+		return this.getSchema().getDatabase();		
+	}
+	
+	public void refresh(int refreshType){
+		if ((IDatabaseObject.IMPACTS & refreshType)  == IDatabaseObject.IMPACTS) {
+			this.impacts.clear();
+			this.impactsLoaded = false;
+		}
+	}
+
+	public String getDescription(){
+		if (!this.aliasedTableLoaded) this.loadAliasedTable();
+		return this.description;
+	}
+
+	
+	public Table getAliasedTable() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getAliasedTable();
+		} else {
+			if(!this.aliasedTableLoaded) this.loadAliasedTable();
+			return this.aliasedTable;
+		}
+	}
+
+//	public EList getColumns() {
+//		if (LUWOverwriteStatus.IS_OVERWRITE) {
+//			return super.getColumns();
+//		} else {
+//			if(!this.columnsLoaded) this.loadColumns();
+//			return this.columns;
+//		}
+//	}
+
+	public ICatalogObject[] getImpacted(){
+		if (!this.impactsLoaded) {
+			this.impacts = this.getImpactedObjects();
+			this.impactsLoaded = true;
+		}
+		ICatalogObject[] objs = new ICatalogObject[impacts.size()];
+		impacts.toArray(objs);
+		return objs;
+	}
+	
+	public Collection getStatistics(){
+		return new ArrayList();
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == DB2ModelPackage.DB2_ALIAS__DESCRIPTION) {
+			this.getDescription();
+		}
+		else if(id == DB2ModelPackage.DB2_ALIAS__ALIASED_TABLE) {
+			this.getAliasedTable();
+		}
+		else if(id == DB2ModelPackage.DB2_ALIAS__COLUMNS) {
+			this.getColumns();
+		}
+		return super.eIsSet(eFeature);
+	}
+	
+	private synchronized void loadAliasedTable() {
+		if(this.aliasedTableLoaded) return;
+		this.aliasedTableLoaded = true;
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			Connection connection = this.getConnection();
+			Statement s = connection.createStatement();
+			ResultSet r = s.executeQuery("SELECT BASE_TABSCHEMA, BASE_TABNAME,REMARKS FROM SYSCAT.TABLES" //$NON-NLS-1$
+					+ " WHERE TABSCHEMA='" + LUWUtil.getIdentifier(this.getSchema().getName()) + "' AND TABNAME='" + LUWUtil.getIdentifier(this.getName()) + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			r.next();
+			final String aliasedSchemaName = r.getString(1).trim();
+			final String aliasedTableName = r.getString(2);
+			this.setAliasedTable(this.getTable(aliasedSchemaName, aliasedTableName));
+			this.setDescription(r.getString(3));
+			
+			r.close();
+			s.close();
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		
+		this.eSetDeliver(deliver);
+	}
+	
+//	private synchronized void loadColumns() {
+//		if(this.columnsLoaded) return;
+//		this.columnsLoaded = true;
+//
+//		boolean deliver = this.eDeliver();
+//		this.eSetDeliver(false);
+//
+//		EList columns = super.getColumns();
+//		Table table = this.getAliasedTable();
+//		for (Iterator iter = table.getColumns().iterator(); iter.hasNext();){
+//			Column tabColumn = (Column) iter.next();
+//			Column aliasColumn = new LUWCatalogColumn();
+//			this.cloneColumn(tabColumn, aliasColumn);
+//			columns.add(aliasColumn);
+//		}
+//		
+//		this.eSetDeliver(deliver);
+//	}
+
+	private Table getTable(String schemaName, String tableName) {
+		Schema schema = this.getSchema(schemaName);
+		if(schema instanceof LUWCatalogSchema){
+			Table t = ((LUWCatalogSchema)schema).getTable(schemaName,tableName);
+			if (t != null) return t;
+		} 
+		
+		Iterator it = schema.getTables().iterator();
+		while(it.hasNext()) {
+			Table table = (Table) it.next();
+			if(table.getName().equals(tableName)) return table;			
+		}
+
+		Table table = new LUWCatalogTable();
+		table.setName(tableName);
+		table.setSchema(schema);
+
+		return table;
+		
+		
+	}
+	private Schema getSchema(String schemaName) {
+		Schema s = this.getSchema();
+		if(s.getName().equals(schemaName)) return s;
+
+		Database db = s.getDatabase();
+		if (db instanceof LUWCatalogDatabase){
+			s = ((LUWCatalogDatabase)db).getSchema(schemaName);
+			if (s != null) return s;
+		} 
+		
+		Iterator it = db.getSchemas().iterator();
+		while(it.hasNext()) {
+			s = (Schema) it.next();
+			if(s.getName().equals(schemaName)) return s;			
+		}
+		
+		Schema schema = new LUWCatalogSchema();
+		schema.setName(schemaName);
+		schema.setDatabase(db);
+
+		if (db instanceof LUWCatalogDatabase){
+			((LUWCatalogDatabase)db).cacheSchema(schema);
+		}
+		
+		return schema;
+		
+	}
+	
+	private Collection getImpactedObjects(){
+		Collection impacts = new ArrayList();
+		Connection connection = this.getConnection();
+		impacts.addAll(LUWCatalogTable.getImpactedAlias(connection, this));
+		impacts.addAll(LUWCatalogTable.getImpactedTables(connection, this));
+		impacts.addAll(LUWCatalogTable.getImpactedRoutines(connection, this));
+		impacts.addAll(LUWCatalogTable.getImpactedTriggers(connection, this));
+		impacts.addAll(LUWCatalogTable.getImpactedPackages(connection, this));
+		return impacts;
+	}
+
+	private void cloneColumn(Column src, Column target){
+		target.setName(src.getName());
+		DataType datatype = src.getDataType();
+		if (datatype instanceof SQLDataType) {
+			DataType newDataType = (DataType) CloneUtil.cloneSingleObject(datatype);
+			target.setDataType(newDataType);
+		} else {
+			target.setDataType(datatype);
+		}
+	}	
+		
+	private boolean aliasedTableLoaded = false;
+	private boolean columnsLoaded = false;
+	private boolean impactsLoaded = false;
+	private Collection impacts = new ArrayList();
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogArrayDataType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogArrayDataType.java
new file mode 100644
index 0000000..20e6208
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogArrayDataType.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWArrayDataTypeImpl;
+
+public class LUWCatalogArrayDataType extends LUWArrayDataTypeImpl implements ICatalogObject {
+	public void refresh() {
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+	
+	public Database getCatalogDatabase() {
+		return this.getSchema().getDatabase();		
+	}
+	
+	public void refresh(int refreshType){
+	}
+	
+}
+	
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogAttribute.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogAttribute.java
new file mode 100644
index 0000000..2a11dd7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogAttribute.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWAttributeDefinitionImpl;
+
+
+public class LUWCatalogAttribute extends LUWAttributeDefinitionImpl implements ICatalogObject {
+	public void refresh() {
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+	
+	public Database getCatalogDatabase() {
+		return ((LUWCatalogStructuredUserDefinedType) this.eContainer()).getCatalogDatabase();		
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogCheckConstraint.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogCheckConstraint.java
new file mode 100644
index 0000000..2d33076
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogCheckConstraint.java
@@ -0,0 +1,192 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.sql.constraints.SQLConstraintsPackage;
+import org.eclipse.datatools.modelbase.sql.constraints.impl.CheckConstraintImpl;
+import org.eclipse.datatools.modelbase.sql.expressions.SQLExpressionsPackage;
+import org.eclipse.datatools.modelbase.sql.expressions.SearchCondition;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Dependency;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWUtil;
+
+
+public class LUWCatalogCheckConstraint extends CheckConstraintImpl implements ICatalogObject {
+	public void refresh() {
+		this.loaded = false;
+		if (this.dependencyLoaded){
+			this.dependencies.clear();
+			this.dependencyLoaded = false;
+		}
+		RefreshManager.getInstance().referesh(this);
+		
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+	
+	public Database getCatalogDatabase() {
+		return this.getBaseTable().getSchema().getDatabase();		
+	}
+	
+	public SearchCondition getSearchCondition() {
+		if(!this.loaded) this.load();
+		return this.searchCondition;
+	}
+
+	public EList getDependencies() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getDependencies();
+		} else {
+			if(!this.dependencyLoaded) this.loadDependencies();
+			return this.dependencies;
+		}
+	}
+		
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == SQLConstraintsPackage.CHECK_CONSTRAINT__SEARCH_CONDITION) {
+			this.getSearchCondition();
+		}
+		else if(id == SQLConstraintsPackage.CHECK_CONSTRAINT__DEPENDENCIES) {
+			this.getDependencies();
+		}
+		return super.eIsSet(eFeature);
+	}
+
+	private synchronized void loadDependencies() {
+		if(this.dependencyLoaded) return;
+		this.dependencyLoaded = true;
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			LUWCatalogPrimaryKey.loadDependencies(this.getConnection(), super.getDependencies(), this);
+			this.loadDependencies(super.getDependencies());
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);		
+	}
+
+	private synchronized void load() {
+		if(this.loaded) return;
+		this.loaded = true;
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			Connection connection = this.getConnection();
+			Statement s = connection.createStatement();
+			ResultSet r = s.executeQuery("SELECT TEXT FROM SYSCAT.CHECKS" + this.getWhereClause()); //$NON-NLS-1$
+			while(r.next()) {
+				String text = r.getString(1);
+				if (text != null) {
+					//remove un-readable character
+					text = text.replaceAll("[\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u000b\u000c\u000e\u000f" +
+	               		"\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f]", " ");
+				}
+				DataModelElementFactory factory = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(this.getCatalogDatabase()).getDataModelElementFactory();
+				SearchCondition searchCondition = ((SearchCondition) factory.create(SQLExpressionsPackage.eINSTANCE.getSearchConditionDefault()));
+				searchCondition.setSQL(text);
+				this.setSearchCondition(searchCondition);
+			}
+			r.close();
+			s.close();
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		
+		this.eSetDeliver(deliver);				
+	}
+
+	private void loadDependencies(EList dependencyList) throws SQLException {
+		final Table table = (Table) this.eContainer();
+		final Database database = table.getSchema().getDatabase();
+		final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+		final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+			
+		Statement s = this.getConnection().createStatement();
+		ResultSet r = s.executeQuery("SELECT COLNAME FROM SYSCAT.COLCHECKS WHERE CONSTNAME='" //$NON-NLS-1$
+				+ LUWUtil.getIdentifier(this.getName()) + "' AND TABSCHEMA='" //$NON-NLS-1$
+				+ LUWUtil.getIdentifier(table.getSchema().getName()) + "' AND TABNAME='" + LUWUtil.getIdentifier(table.getName()) + "'"); //$NON-NLS-1$ //$NON-NLS-2$
+		try {
+			while(r.next()) {
+				final String colName   = r.getString(1);
+				Column column = this.getColumn(colName);
+				Dependency dep = (Dependency) factory.create(SQLSchemaPackage.eINSTANCE.getDependency());
+				dep.setTargetEnd(column);
+				dependencyList.add(dep);
+			}
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+			
+		r.close();
+		s.close();
+	}
+	
+	private String getWhereClause() {
+		Table table = this.getBaseTable();
+		return " WHERE CONSTNAME='" + LUWUtil.getIdentifier(this.getName()) + "' AND TABSCHEMA='" + LUWUtil.getIdentifier(this.getBaseTable().getSchema().getName())  //$NON-NLS-1$ //$NON-NLS-2$
+				+ "' AND TABNAME='" + LUWUtil.getIdentifier(this.getBaseTable().getName()) + "'"; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+	private Column getColumn(String columnName) {
+		Table table = this.getBaseTable();
+		if (table instanceof LUWCatalogTable) {
+			Column c = ((LUWCatalogTable)table).getColumn(columnName);
+			if (c!= null) return c;
+		} 
+		Iterator it = table.getColumns().iterator();
+		while(it.hasNext()) {
+			Column c = (Column) it.next();
+			if(c.getName().equals(columnName)) return c;
+		}
+		Column column = new LUWCatalogColumn();
+		column.setName(columnName);
+		column.setTable(table);
+
+		return column;
+	}
+
+	
+	private boolean loaded = false;	
+	private boolean dependencyLoaded = false;	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogColumn.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogColumn.java
new file mode 100644
index 0000000..e06c268
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogColumn.java
@@ -0,0 +1,447 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.enablement.ibm.catalog.IDatabaseObject;
+import org.eclipse.datatools.enablement.ibm.catalog.util.CatalogStatistics;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWUtil;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWCatalogMessages;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFactory;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNickname;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWColumnImpl;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2IdentitySpecifier;
+import org.eclipse.datatools.enablement.ibm.util.ModelHelper;
+import org.eclipse.datatools.modelbase.sql.datatypes.DataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.PrimitiveType;
+import org.eclipse.datatools.modelbase.sql.expressions.SQLExpressionsPackage;
+import org.eclipse.datatools.modelbase.sql.expressions.ValueExpression;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.IdentitySpecifier;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWCatalogColumn extends LUWColumnImpl implements ICatalogObject, IDatabaseObject {
+	public void refresh() {
+		this.identitySpecifierLoaded = false;
+		this.generateExpressionLoaded = false;
+		if (this.optionsLoaded) {
+			this.optionsLoaded = false;
+			this.getOptions().clear();
+		}
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}	
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+	
+	public Database getCatalogDatabase() {
+		return this.getTable().getSchema().getDatabase();		
+	}
+	
+	public void refresh(int refreshType){
+		if ((IDatabaseObject.STATISTICS & refreshType)  == IDatabaseObject.STATISTICS) {
+			this.statistics.clear();
+			this.statisticsLoaded = false;
+		}
+	}
+
+	public IdentitySpecifier getIdentitySpecifier() {
+		if(!this.identitySpecifierLoaded) this.loadIdentitySpecifier();
+		return this.identitySpecifier;
+	}
+	
+	public ValueExpression getGenerateExpression() {
+		if(!this.generateExpressionLoaded) this.loadGenerateExrepression();
+		return this.generateExpression;
+	}
+
+	public EList getOptions() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getOptions();
+		} else {
+			if(!this.optionsLoaded) this.loadOptions();
+			return super.getOptions();
+		}
+	}
+	
+	public ICatalogObject[] getImpacted(){
+		ICatalogObject[] objs = new ICatalogObject[0];
+		return objs;
+	}
+
+	public Collection getStatistics(){
+		if (!this.statisticsLoaded) {
+			this.statistics = LUWCatalogColumn.getStatistics(this.getConnection(), this);
+			this.statisticsLoaded = true;
+		}
+		return this.statistics;
+	}
+	
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == SQLTablesPackage.COLUMN__IDENTITY_SPECIFIER) {
+			this.getIdentitySpecifier();
+		}
+		else if(id == SQLTablesPackage.COLUMN__GENERATE_EXPRESSION) {
+			this.getGenerateExpression();
+		}
+		else if(id == LUWPackage.LUW_COLUMN__OPTIONS) {
+			this.getOptions();
+		}
+		
+		return super.eIsSet(eFeature);
+	}
+
+	public synchronized void loadGenerateExrepression() {
+		if(this.generateExpressionLoaded) return;
+		this.generateExpressionLoaded = true;
+		if (!this.isGenerated) return;
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);
+		try {
+			final Table table = this.getTable();
+			final Schema schema = table.getSchema();
+			final Database database = ModelHelper.getDatabase(schema);
+			final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+			final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+			
+			Statement s = this.getConnection().createStatement();
+			ResultSet r = s.executeQuery("SELECT TEXT FROM SYSCAT.COLUMNS" //$NON-NLS-1$
+				+ " WHERE TABSCHEMA='" + LUWUtil.getIdentifier(schema.getName())  //$NON-NLS-1$
+				+ "' AND TABNAME='" + LUWUtil.getIdentifier(table.getName())  //$NON-NLS-1$
+				+ "' AND COLNAME='" + LUWUtil.getIdentifier(this.getName()) + "'"); //$NON-NLS-1$ //$NON-NLS-2$
+		
+			
+			while (r.next()) {
+				String exprValue = r.getString("TEXT"); //$NON-NLS-1$
+				if (exprValue != null && exprValue.length() >0) {
+					ValueExpression expr = (ValueExpression) factory.create(SQLExpressionsPackage.eINSTANCE.getValueExpressionDefault());
+					this.setGenerateExpression(expr);
+					int pos = exprValue.indexOf("AS"); //$NON-NLS-1$
+					if (pos >= 0) {
+						exprValue = exprValue.substring(pos+2).trim();
+					}
+					expr.setSQL(exprValue);
+				}
+			
+			}
+			r.close();
+			s.close();
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+	
+	private synchronized void loadIdentitySpecifier() {
+		if(this.identitySpecifierLoaded) return;
+		this.identitySpecifierLoaded = true;
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);
+		try {
+			//the column is identity column
+			if (this.identitySpecifier != null) {
+				LUWCatalogColumn.loadIdentitySpecifier(this.getConnection(), this.identitySpecifier,this);
+			}
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+	
+	public static void loadIdentitySpecifier(Connection connection, IdentitySpecifier identitySpecifier, Column column) throws SQLException {
+		final Table table = column.getTable();
+		final Schema schema = table.getSchema();		
+		final Database database = ModelHelper.getDatabase(schema);
+		final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+		final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+
+		String query = "Select INCREMENT,START,MAXVALUE,MINVALUE,CYCLE, CACHE " + //$NON-NLS-1$
+				" FROM SYSCAT.COLIDENTATTRIBUTES" + //$NON-NLS-1$
+				" WHERE TABSCHEMA='" +  LUWUtil.getIdentifier(schema.getName()) + "'" + //$NON-NLS-1$ //$NON-NLS-2$
+				" AND TABNAME= '" + LUWUtil.getIdentifier(table.getName()) + "'" + //$NON-NLS-1$ //$NON-NLS-2$
+				" AND COLNAME ='" + LUWUtil.getIdentifier(column.getName()) + "'" ; //$NON-NLS-1$ //$NON-NLS-2$
+		
+		Statement s = connection.createStatement();
+		ResultSet r = s.executeQuery(query);
+
+		try {
+			while(r.next()) {
+				DB2IdentitySpecifier identity = (DB2IdentitySpecifier)identitySpecifier;
+				identity.setIncrement(r.getBigDecimal("INCREMENT").toBigInteger()); //$NON-NLS-1$
+				identity.setStartValue(r.getBigDecimal("START").toBigInteger()); //$NON-NLS-1$
+				identity.setMinimum(r.getBigDecimal("MINVALUE").toBigInteger()); //$NON-NLS-1$
+				identity.setMaximum(r.getBigDecimal("MAXVALUE").toBigInteger()); //$NON-NLS-1$
+				identity.setCache(r.getInt("CACHE")); //$NON-NLS-1$
+
+				if (r.getString("CYCLE").trim().equals("Y")){ //$NON-NLS-1$ //$NON-NLS-2$
+					identitySpecifier.setCycleOption(true);
+				}else {
+					identitySpecifier.setCycleOption(false);
+				}
+			}
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+		
+		r.close();
+		s.close();
+	}
+	
+
+	private synchronized void loadOptions() {
+		if(this.optionsLoaded) return;
+		this.optionsLoaded = true;
+		EList options = super.getOptions();
+		
+		Table table = this.getTable();
+		if (!(table instanceof LUWNickname)) return;  //only nickname column has option
+		
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);
+		try {
+			String query = "SELECT OPTION, SETTING FROM SYSCAT.COLOPTIONS WHERE TABSCHEMA='" //$NON-NLS-1$
+				+ LUWUtil.getIdentifier(this.getTable().getSchema().getName()) + "' AND TABNAME='" + LUWUtil.getIdentifier(this.getTable().getName())  //$NON-NLS-1$
+				+ "' AND COLNAME='" + LUWUtil.getIdentifier(this.getName()) + "'";  //$NON-NLS-1$ //$NON-NLS-2$
+				
+			Statement s = this.getConnection().createStatement();
+			ResultSet r = s.executeQuery(query);
+			try {
+				while(r.next()) {
+					final String name = r.getString(1);
+					final String value = r.getString(2);
+					LUWOption option = LUWFactory.eINSTANCE.createLUWOption();
+					option.setName(name);
+					option.setValue(value);
+					options.add(option);
+				}
+			}
+			catch (Exception e) {
+			}
+			r.close();
+			s.close();
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	public static Collection getStatistics(Connection connection, Column column){
+		Collection statistics = new ArrayList();
+		statistics.addAll(getColumnStatistics(connection,column));
+		statistics.addAll(getDistributeStatistics(connection,column));
+		return statistics;
+	}
+	public static Collection getColumnStatistics(Connection connection, Column column){
+		Collection statistics = new ArrayList();
+		try {
+			Table table = column.getTable();
+			Schema schema = table.getSchema();
+
+			String	query = "SELECT COLCARD,HIGH2KEY,LOW2KEY,AVGCOLLEN, NUMNULLS, SUB_COUNT" +
+				",SUB_DELIM_LENGTH "+
+				" FROM SYSSTAT.COLUMNS" +
+				" WHERE TABSCHEMA='" + LUWUtil.getIdentifier(table.getSchema().getName()) + "'" +
+				" AND TABNAME ='" + LUWUtil.getIdentifier(table.getName()) + "'" +
+				" AND COLNAME = '" + LUWUtil.getIdentifier(column.getName()) + "'" +
+				" FOR FETCH ONLY";
+			Statement s = connection.createStatement();
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				CatalogStatistics stats = null;
+				final BigInteger card = r.getBigDecimal("COLCARD").toBigInteger();
+				if (card.intValue() != -1) {
+					stats = new CatalogStatistics("COLCARD",LUWCatalogMessages.STAT_COL_CARD,LUWCatalogMessages.STAT_COL_CARD_DES,card,"SYSSTAT.COLUMNS");
+					statistics.add(stats);
+				}
+
+				DataType datatype =  column.getDataType();
+				boolean isBinaryData = false;
+				if (datatype instanceof PredefinedDataType) {
+					PredefinedDataType type = (PredefinedDataType)datatype;
+					if (type.getPrimitiveType() == PrimitiveType.BINARY_LITERAL
+							|| type.getPrimitiveType() == PrimitiveType.BINARY_VARYING_LITERAL) {
+						isBinaryData = true;
+					}
+					
+				}
+				
+				if (isBinaryData){
+				} else {
+					final String high2key = r.getString("HIGH2KEY");
+					final String low2key  =  r.getString("LOW2KEY");
+					boolean hasKeyValue = (high2key != null && !high2key.trim().equals("")
+										&& low2key != null && !low2key.trim().equals("")
+										&& !high2key.equals(low2key));
+					
+					if (!"".equals(high2key)) {
+						stats = new CatalogStatistics("HIGH2KEY",LUWCatalogMessages.STAT_HIGH2KEY,LUWCatalogMessages.STAT_HIGH2KEY_DES,LUWUtil.getSingleQuotedString(high2key),hasKeyValue ? "SYSSTAT.COLUMNS":"" );
+						statistics.add(stats);
+					}
+	
+					if (!"".equals(low2key)) {
+						stats = new CatalogStatistics("LOW2KEY",LUWCatalogMessages.STAT_LOW2KEY,LUWCatalogMessages.STAT_LOW2KEY_DES,LUWUtil.getSingleQuotedString(low2key),hasKeyValue ? "SYSSTAT.COLUMNS":"");
+						statistics.add(stats);
+					}
+	
+					final int avgLen = r.getInt("AVGCOLLEN");
+					if (avgLen != -1) {
+						stats = new CatalogStatistics("AVGCOLLEN",LUWCatalogMessages.STAT_AVG_COLLEN,LUWCatalogMessages.STAT_AVG_COLLEN_DES,avgLen,"SYSSTAT.COLUMNS");
+						statistics.add(stats);
+					}
+				
+				}
+				final BigInteger numNulls = r.getBigDecimal("NUMNULLS").toBigInteger();;
+				if (numNulls.intValue() != -1) {
+					stats = new CatalogStatistics("NUMNULLS",LUWCatalogMessages.STAT_NUMNULLS,LUWCatalogMessages.STAT_NUMNULLS_DES,numNulls,"SYSSTAT.COLUMNS");
+					statistics.add(stats);
+				}
+
+				final int subCount = r.getInt("SUB_COUNT");
+				if (subCount != -1) {
+					stats = new CatalogStatistics("SUB_COUNT",LUWCatalogMessages.STAT_SUB_COUNT,LUWCatalogMessages.STAT_SUB_COUNT_DES,subCount,"SYSSTAT.COLUMNS");
+					statistics.add(stats);
+				}
+
+				final int subDelimLen = r.getInt("SUB_DELIM_LENGTH");
+				if (subDelimLen != -1) {
+					stats = new CatalogStatistics("SUB_DELIM_LENGTH",LUWCatalogMessages.STAT_SUB_DELIM_LENGTH,LUWCatalogMessages.STAT_SUB_DELIM_LENGTH_DES,subDelimLen,"SYSSTAT.COLUMNS");
+					statistics.add(stats);
+				}
+
+			}
+			r.close();
+			s.close();
+		}catch(SQLException e) {
+			e.printStackTrace();
+		}
+		return statistics;
+	}
+
+	public static Collection getDistributeStatistics(Connection connection, Column column){
+		Collection statistics = new ArrayList();
+		Collection distStat = new ArrayList();
+		Collection typeGroup = new ArrayList();
+		try {
+			Table table = column.getTable();
+			Schema schema = table.getSchema();
+			int groupNum = 1;
+			
+			String	query = "SELECT TYPE,SEQNO,COLVALUE,VALCOUNT,DISTCOUNT"+
+				" FROM SYSSTAT.COLDIST" +
+				" WHERE TABSCHEMA='" + LUWUtil.getIdentifier(table.getSchema().getName()) + "'" +
+				" AND TABNAME ='" + LUWUtil.getIdentifier(table.getName()) + "'" +
+				" AND COLNAME = '" + LUWUtil.getIdentifier(column.getName()) + "'" +
+				" AND COLVALUE <>''" +
+				" ORDER BY TYPE" +
+				" FOR FETCH ONLY";
+			Statement s = connection.createStatement();
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				CatalogStatistics stats = null;
+				distStat = new ArrayList();
+				final String type = r.getString("TYPE");
+				if (type != null && !type.equals("")) {
+					stats = new CatalogStatistics("TYPE",LUWCatalogMessages.STAT_COLDIST_TYPE,LUWCatalogMessages.STAT_COLDIST_TYPE_DES,type,"");
+					distStat.add(stats);
+				}
+
+				final int seqno = r.getInt("SEQNO");
+				if (seqno != -1 ) {
+					stats = new CatalogStatistics("SEQNO",LUWCatalogMessages.STAT_COLDIST_SEQNO,LUWCatalogMessages.STAT_COLDIST_SEQNO_DES,seqno,"");
+					distStat.add(stats);
+				}
+
+				final String colValue = r.getString("COLVALUE");
+				if (colValue != null && !colValue.equals("")) {
+					stats = new CatalogStatistics("COLVALUE",LUWCatalogMessages.STAT_COLDIST_COLVALUE,LUWCatalogMessages.STAT_COLDIST_COLVALUE_DES,colValue,"SYSSTAT.COLDIST");
+					distStat.add(stats);
+				}
+
+				final BigInteger valueCount = r.getBigDecimal("VALCOUNT").toBigInteger();;
+				if (valueCount.intValue() != -1) {
+					stats = new CatalogStatistics("VALCOUNT",LUWCatalogMessages.STAT_COLDIST_VALCOUNT,LUWCatalogMessages.STAT_COLDIST_VALCOUNT_DES,valueCount,"SYSSTAT.COLDIST");
+					distStat.add(stats);
+				}
+
+				final BigDecimal distColuntValue = r.getBigDecimal("DISTCOUNT");
+				if (distColuntValue != null) {
+					final BigInteger distCount = r.getBigDecimal("DISTCOUNT").toBigInteger();;
+					if (distCount.intValue() != -1) {
+						stats = new CatalogStatistics("DISTCOUNT",LUWCatalogMessages.STAT_COLDIST_DISTCOUNT,LUWCatalogMessages.STAT_COLDIST_DISTCOUNT_DES,distCount,"SYSSTAT.COLDIST");
+						distStat.add(stats);
+					}
+				}
+
+				if (distStat.size() >0 ) {
+					statistics.add(new CatalogStatistics("Distribution " + seqno, MessageFormat.format(LUWCatalogMessages.STAT_COLDIST, new Object[]{new Integer(groupNum++)})
+						,MessageFormat.format(LUWCatalogMessages.STAT_COLDIST_DES,new Object[]{new Integer(seqno)})
+						,distStat,"SYSSTAT.COLDIST"));
+
+				}
+
+				
+			}
+			r.close();
+			s.close();
+		}catch(SQLException e) {
+			e.printStackTrace();
+		}
+		return statistics;
+	}
+	
+	
+	void setGenerated(boolean isGenerated) {
+		this.isGenerated = isGenerated;
+	}
+	
+	private boolean identitySpecifierLoaded = false;
+	private boolean generateExpressionLoaded = false;
+	private boolean optionsLoaded = false;
+	private boolean isGenerated = false;
+	private boolean statisticsLoaded = false;
+	
+	private Collection statistics = new ArrayList();
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogConstant.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogConstant.java
new file mode 100644
index 0000000..3ce3269
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogConstant.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+public class LUWCatalogConstant {
+
+	//Database
+	public static final String PRIVILEGE_BINADD = "BINDADD"; //$NON-NLS-1$
+	public static final String PRIVILEGE_CONNECT = "CONNECT"; //$NON-NLS-1$
+	public static final String PRIVILEGE_CREATETAB = "CREATETAB"; //$NON-NLS-1$
+	public static final String PRIVILEGE_CREATE_EXTERNAL_ROUTINE = "CREATE_EXTERNAL_ROUTINE"; //$NON-NLS-1$
+	public static final String PRIVILEGE_CREATE_NOT_FENCED_ROUTINE = "CREATE_NOT_FENCED_ROUTINE"; //$NON-NLS-1$
+	public static final String PRIVILEGE_IMPLICIT_SCHEMA = "IMPLICIT_SCHEMA"; //$NON-NLS-1$
+	public static final String PRIVILEGE_DBADM = "DBADM"; //$NON-NLS-1$
+	public static final String PRIVILEGE_LOAD = "LOAD"; //$NON-NLS-1$
+	public static final String PRIVILEGE_QUIESCE_CONNECT = "QUIESCE_CONNECT"; //$NON-NLS-1$
+	public static final String PRIVILEGE_SECADM = "SECADM"; //$NON-NLS-1$
+	
+	//schema
+	public static final String PRIVILEGE_ALTERIN = "ALTERIN"; //$NON-NLS-1$
+	public static final String PRIVILEGE_CREATEIN = "CREATEIN"; //$NON-NLS-1$
+	public static final String PRIVILEGE_DROPIN = "DROPIN"; //$NON-NLS-1$
+
+	//Table
+	public static final String PRIVILEGE_ALTER = "ALTER"; //$NON-NLS-1$
+	public static final String PRIVILEGE_CONTROL = "CONTROL"; //$NON-NLS-1$
+	public static final String PRIVILEGE_DELETE = "DELETE"; //$NON-NLS-1$
+	public static final String PRIVILEGE_INDEX = "INDEX"; //$NON-NLS-1$
+	public static final String PRIVILEGE_INSERT = "INSERT"; //$NON-NLS-1$
+	public static final String PRIVILEGE_REFERENCES = "REFERENCES"; //$NON-NLS-1$
+	public static final String PRIVILEGE_SELECT = "SELECT"; //$NON-NLS-1$
+	public static final String PRIVILEGE_UPDATE = "UPDATE"; //$NON-NLS-1$
+
+	//Routine, module/plsqlPackage
+	public static final String PRIVILEGE_EXECUTE = "EXECUTE"; //$NON-NLS-1$
+
+	//SEQUENCE
+	public static final String PRIVILEGE_USAGE = "USAGE"; //$NON-NLS-1$
+	
+	//TABLESPACE
+	public static final String PRIVILEGE_USE = "USE"; //$NON-NLS-1$
+
+	//PACKAGFE
+	public static final String PRIVILEGE_BIND = "BIND"; //$NON-NLS-1$
+
+	//Global Variable
+	public static final String PRIVILEGE_READ = "READ"; //$NON-NLS-1$
+	public static final String PRIVILEGE_WRITE = "WRITE"; //$NON-NLS-1$
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogCursorDataType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogCursorDataType.java
new file mode 100644
index 0000000..51411d3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogCursorDataType.java
@@ -0,0 +1,140 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.Statement;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWUtil;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRowDataType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWCursorDataTypeImpl;
+
+public class LUWCatalogCursorDataType extends LUWCursorDataTypeImpl implements ICatalogObject {
+	public void refresh() {
+		this.rowTypeLoaded = false;
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+	
+	public Database getCatalogDatabase() {
+		return this.getSchema().getDatabase();		
+	}
+	
+	public void refresh(int refreshType){
+	}
+	
+	public LUWRowDataType getRowType() {
+		if (!this.rowTypeLoaded) this.loadRowType();
+		return this.rowType;
+	}
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == LUWPackage.LUW_CURSOR_DATA_TYPE__ROW_TYPE) {
+			this.getRowType();
+		}
+		return super.eIsSet(eFeature);
+	}
+
+	private synchronized void loadRowType() {
+		if(this.rowTypeLoaded) return;
+		this.rowTypeLoaded = true;
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			Connection connection = this.getConnection();
+			Statement s = connection.createStatement();
+			String query = "SELECT  BSCHEMA,BMODULENAME,BNAME" +
+					" FROM SYSCAT.DATATYPEDEP " +
+					" WHERE TYPESCHEMA = '" + LUWUtil.getIdentifier(this.getSchema().getName()) + "'" +
+					" AND TYPENAME = '" + LUWUtil.getIdentifier(this.getName())+"'" +
+					" AND BTYPE ='R'" +
+					" AND TYPEMODULENAME IS NULL";
+			
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String schemaName = r.getString("BSCHEMA").trim();
+				final String moduleName = r.getString("BMODULENAME");
+				final String name = r.getString("BNAME").trim();
+				
+				LUWRowDataType rowType = this.getLUWRowDataType(this, schemaName, moduleName, name);
+				if (rowType != null) {
+					this.setRowType(rowType);
+				}
+			}
+
+			r.close();
+			s.close();
+		}
+		catch (Exception e) {
+			 e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	private static LUWRowDataType getLUWRowDataType(UserDefinedType udt, String schemaName,String moduleName, String userDefinedTypeName) {
+		Schema schema = LUWCatalogStructuredUserDefinedType.getSchema(udt, schemaName);
+		if (moduleName != null && !"".equals(moduleName)) {
+			LUWModule module = LUWCatalogCursorDataType.getLUWModue((DB2Schema) schema, moduleName);
+			if (module != null) {
+				Iterator it = module.getModuleObjects().iterator();
+				while(it.hasNext()) {
+					Object obj = it.next();
+					if (obj instanceof LUWRowDataType && ((SQLObject)obj).getName().equals(userDefinedTypeName) )
+						return (LUWRowDataType) obj;			
+				}
+			}
+		} else {
+			Iterator it = schema.getUserDefinedTypes().iterator();
+			while(it.hasNext()) {
+				UserDefinedType userDefinedType = (UserDefinedType) it.next();
+				if((userDefinedType instanceof LUWRowDataType) && userDefinedType.getName().equals(userDefinedTypeName)) 
+					return (LUWRowDataType) userDefinedType;			
+			}
+
+		}		
+		return null;		
+	}
+
+	private static LUWModule getLUWModue(DB2Schema schema, String moduleName) {
+		for (Iterator iter =  schema.getModules().iterator(); iter.hasNext();){
+			LUWModule module =(LUWModule)iter.next();
+			if (moduleName.trim().equals(module.getName())) return module;
+		}
+		return null;
+	}
+
+	private boolean rowTypeLoaded = false;
+	
+}
+	
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogDatabase.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogDatabase.java
new file mode 100644
index 0000000..e881731
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogDatabase.java
@@ -0,0 +1,1249 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Vector;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilterListener;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.DatabaseConnectionRegistry;
+import org.eclipse.datatools.enablement.ibm.catalog.util.CatalogLoadUtil;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.DatabaseREProvider;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWContainerType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.WrapperType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabaseImpl;
+import org.eclipse.datatools.enablement.ibm.util.IConnectionFilter;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.AuthorizationIdentifier;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Group;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Privilege;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Role;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.SQLAccessControlPackage;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.User;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWCatalogDatabase extends LUWDatabaseImpl implements ICatalogObject {
+	private static StorageProvider storageCatalogProvider = null;
+	private static Vector luwserverProviders = null;
+	private static ModuleCatalogProvider  moduleCatalogPovider = null;
+	
+	public static StorageProvider getCatalogStorageProvider() {
+		IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+		IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("com.ibm.datatools.db2.luw", "luwstorageProvider"); //$NON-NLS-1$ //$NON-NLS-2$
+		if (extensionPoint != null) {
+		    IExtension[] extensions = extensionPoint.getExtensions();
+		    if(extensions.length == 1) {
+		        IConfigurationElement[] configElements = extensions[0].getConfigurationElements();
+		        try {
+		            storageCatalogProvider = (StorageProvider) configElements[0].createExecutableExtension("class"); //$NON-NLS-1$
+		        }
+		        catch(Exception e) {
+		        }
+		    }
+		}
+		return storageCatalogProvider;
+	}
+
+	public static Vector getLUWServerCatalogProvider() {
+		Vector providers = new Vector();
+		IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+		IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("com.ibm.datatools.db2.luw", "luwserverProvider"); //$NON-NLS-1$ //$NON-NLS-2$
+		if (extensionPoint != null) {
+		    IExtension[] extensions = extensionPoint.getExtensions();
+		    for (int i = 0; i < extensions.length; i++ ) {
+		        IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+		        for (int j = 0; j < configElements.length; j++) {
+		            if(configElements[j].getName().equals("provider")) { //$NON-NLS-1$
+		                try {
+		                    LUWServerCatalogProvider provider = (LUWServerCatalogProvider) configElements[j].createExecutableExtension("class"); //$NON-NLS-1$
+		                    providers.add(provider);
+		                }
+		                catch(CoreException e) {
+		                    IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getDefault().getBundle().getSymbolicName(), IStatus.ERROR,
+		                            "The error was detected when creating the LUWServer provider", e); //$NON-NLS-1$
+		                    RDBCorePlugin.getDefault().getLog().log(status);
+		                }
+		                break;
+		            }
+		        }
+		        try {
+		        }
+		        catch(Exception e) {
+		        }
+		    }
+		}
+		luwserverProviders = providers;
+		return luwserverProviders;
+	}
+
+	public static ModuleCatalogProvider getCatalogModuleProvider() {
+		IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+		IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("com.ibm.datatools.db2.luw", "moduleProvider"); //$NON-NLS-1$ //$NON-NLS-2$
+		if (extensionPoint != null) {
+		    IExtension[] extensions = extensionPoint.getExtensions();
+		    if(extensions.length == 1) {
+		        IConfigurationElement[] configElements = extensions[0].getConfigurationElements();
+		        try {
+		            moduleCatalogPovider = (ModuleCatalogProvider) configElements[0].createExecutableExtension("class"); //$NON-NLS-1$
+		        }
+		        catch(Exception e) {
+		        }
+		    }
+		}
+		return moduleCatalogPovider;
+	}
+	
+	public LUWCatalogDatabase(Connection connection) {
+		if(connection == null) {
+			System.err.println("null connection"); //$NON-NLS-1$
+			throw new RuntimeException();
+		}
+		this.connection = connection;
+		
+
+//		((RecoverableConnection)connection).getConnectionInfo().addFilterListener(new FilterListener(this));
+	}
+
+	public synchronized void refresh() {
+		this.schemasLoaded = false;
+		this.partitionGroupLoaded = false;
+		this.bufferpoolLoaded = false;
+		this.wrappersLoaded = false;
+		this.remoteServersLoaded = false;
+		this.tablespaceLoades = false;
+		this.authLoaded = false;
+		this.privilegeLoaded = false;
+		this.propertyLoaded = false;
+		this.containerLoaded = false;
+		RefreshManager.getInstance().referesh(this);
+	}
+	
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		return this.connection;
+	}
+	
+	public Database getCatalogDatabase() {
+		return this;		
+	}
+	
+	public EList getSchemas() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getSchemas();
+		} else {
+			if(!this.schemasLoaded) this.loadSchemas();
+			return this.schemas;
+		}
+	}
+
+	public EList getServers() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getServers();
+		} else {
+			if(!this.remoteServersLoaded) this.loadRemoteServers();
+			return this.servers;
+		}
+	}
+	
+	public EList getWrappers() { //@gsauere
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getWrappers();
+		} else {
+			if (!this.wrappersLoaded) this.loadWrappers();
+			return super.getWrappers();
+		}
+	}
+
+	public boolean isFederated() {
+		if(!this.remoteServersLoaded) this.loadRemoteServers();
+		return this.federated;
+	}
+	
+	public EList getGroups(){
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getGroups();
+		} else {
+			if (!this.partitionGroupLoaded) this.loadPartitionGroups();
+			return this.groups;
+		}
+	}
+
+	public EList getBufferpools(){
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getBufferpools();
+		} else {
+			if (!this.bufferpoolLoaded) this.loadBufferPools();
+			return this.bufferpools;
+		}
+	}
+	
+	public EList getTablespaces() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getTablespaces();
+		} else {
+			if (!this.tablespaceLoades) this.loadTablespaces();
+			return this.tablespaces;
+		}
+	}
+	
+	public EList getAuthorizationIds() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getAuthorizationIds();
+		} else {
+			if (!this.authLoaded) this.loadAuthorizationIds();
+			return this.authorizationIds;
+		}
+	}
+	
+	public EList getPrivileges() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getPrivileges();
+		} else {
+			if (!this.privilegeLoaded) this.loadPrivileges();
+			return this.privileges;
+		}
+	}
+
+	public boolean isPartitioned() {
+		if (!this.propertyLoaded) this.loadProperties();
+		return this.partitioned;
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == LUWPackage.LUW_DATABASE__SCHEMAS) {
+			this.getSchemas();
+		}
+		else if(id == LUWPackage.LUW_DATABASE__SERVERS) {
+			this.getServers();
+		}
+		else if(id == LUWPackage.LUW_DATABASE__FEDERATED) {
+			this.getServers();
+		}
+		else if(id == LUWPackage.LUW_DATABASE__GROUPS) {
+			this.getGroups();
+		}
+		else if(id == LUWPackage.LUW_DATABASE__BUFFERPOOLS) {
+			this.getBufferpools();
+		}
+//		else if(id == LUWPackage.LUW_DATABASE__TABLESPACES) {
+//			this.getTablespaces();
+//		}
+		else if(id == LUWPackage.LUW_DATABASE__WRAPPERS) {
+            this.getWrappers();
+        } 
+		else if(id == LUWPackage.LUW_DATABASE__AUTHORIZATION_IDS) {
+            this.getAuthorizationIds();
+        } 
+		else if(id == LUWPackage.LUW_DATABASE__PRIVILEGES) {
+            this.getPrivileges();
+        } 
+		else if(id == LUWPackage.LUW_DATABASE__PARTITIONED) {
+			this.isPartitioned();
+		}
+		
+		if (filterListener == null) {
+			ConnectionInfo connectionInfo = DatabaseConnectionRegistry
+					.getInstance().getConnectionForDatabase(this);
+			filterListener = new FilterListener(this);
+			connectionInfo.addFilterListener(filterListener);
+		}
+
+		return super.eIsSet(eFeature);
+	}
+
+	private synchronized void loadSchemas() {
+		if(this.schemasLoaded) return;
+		this.schemasLoaded = true;
+
+		this.registerFilterListener();
+
+		EList schemaList = super.getSchemas();
+		schemaList.clear();
+		
+		this.iniCachedSchema();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			
+			ConnectionInfo connectionInfo = DatabaseConnectionRegistry.getInstance().getConnectionForDatabase(this);
+			ConnectionFilter filter = connectionInfo.getFilter(this.getName()+"::"+ConnectionFilter.SCHEMA_FILTER); //$NON-NLS-1$
+			if (filter == null) {  //if schema filter is null, then get default filter
+				filter = connectionInfo.getFilter(ConnectionFilter.SCHEMA_FILTER);
+			}
+			
+			String query = "SELECT SCHEMANAME, REMARKS, OWNER FROM SYSCAT.SCHEMATA"; //$NON-NLS-1$
+			if (filter != null) {
+				query += " WHERE " + CatalogLoadUtil.getFilterString(filter.getPredicate(), "rtrim(SCHEMANAME)"); //$NON-NLS-1$
+			}
+
+			//fix for wsdbu00270310 , make the result sorted by the SCHEMANAME
+			query += " ORDER BY SCHEMANAME" ;
+			
+			Statement s = this.connection.createStatement();
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				String schemaName = r.getString(1).trim();
+				String remarks    = r.getString(2);
+				Schema schema = new LUWCatalogSchema();
+				schema.setName(schemaName);
+				schema.setDescription(remarks);
+				
+				final String owner = r.getString(3).trim();
+				
+				AuthorizationIdentifier authid = this.getAuthorizationId(this, owner, "U");
+		
+				schema.setOwner(authid);
+				
+				schemaList.add(schema);
+				this.cacheSchema(schema);
+			}
+			r.close();
+			s.close();
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+	
+	private synchronized void loadRemoteServers() {
+		if(this.remoteServersLoaded) return;
+		this.remoteServersLoaded = true;
+
+		this.registerFilterListener();
+
+		EList remoteServerList = super.getServers();
+		remoteServerList.clear();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);
+		try {
+			//load LUWServer by extension point
+			this.loadLUWServers(remoteServerList,this);
+			
+			ConnectionInfo connectionInfo = DatabaseConnectionRegistry.getInstance().getConnectionForDatabase(this);
+			ConnectionFilter filter = connectionInfo.getFilter(this.getName()+"::"+ConnectionFilter.REMOTE_SERVER_FILTER); //$NON-NLS-1$
+			if (filter == null) {  //if remote server filter is null, then get default filter
+				filter = connectionInfo.getFilter(ConnectionFilter.REMOTE_SERVER_FILTER);
+			}
+			
+			String query = "SELECT s.SERVERNAME, s.SERVERTYPE, s.SERVERVERSION, s.REMARKS, s.WRAPNAME " + //@gsauere //$NON-NLS-1$
+					" FROM SYSCAT.SERVERS s, SYSCAT.WRAPPERS w" + //$NON-NLS-1$
+					" WHERE s.WRAPNAME = w.WRAPNAME" + //$NON-NLS-1$
+					" AND w.WRAPTYPE='R'"; //$NON-NLS-1$
+			if (filter != null) {
+				query += " AND " + CatalogLoadUtil.getFilterString(filter.getPredicate(), "SERVERNAME"); //$NON-NLS-1$
+			}
+				
+			Statement s = this.connection.createStatement();
+			ResultSet r = s.executeQuery(query);
+			try {
+				while(r.next()) {
+					final String serverName = r.getString(1);
+					final String serverType = r.getString(2);
+					final String serverVersion = r.getString(3);
+					final String remarks = r.getString(4);
+					final String wrapperName = r.getString(5); //@gsauere
+					LUWCatalogFederatedServer server = new LUWCatalogFederatedServer();
+					server.setName(serverName);
+					server.setServerType(serverType);
+					server.setServerVersion(serverVersion);
+					server.setDescription(remarks);
+					server.setWrapperName(wrapperName);//@gsauere
+					remoteServerList.add(server);
+				}
+				this.federated = true;
+			}
+			catch (Exception e) {
+			}
+			r.close();
+			s.close();
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	private synchronized void loadPartitionGroups() {
+		if(this.partitionGroupLoaded) return;
+		this.partitionGroupLoaded = true;
+
+		this.registerFilterListener();
+		EList groupList = super.getGroups();
+		groupList.clear();
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			StorageProvider provider = getCatalogStorageProvider();
+			if (provider != null){
+				Iterator it = provider.getPartitionGroups(this).iterator();
+				while(it.hasNext()) {
+					LUWPartitionGroup pg = (LUWPartitionGroup) it.next();
+					groupList.add(pg);
+				}
+			}
+
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	private synchronized void loadBufferPools() {
+		if(this.bufferpoolLoaded) return;
+		this.bufferpoolLoaded = true;
+
+		this.registerFilterListener();
+
+		
+		EList bpList = super.getBufferpools();
+		bpList.clear();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			StorageProvider provider = getCatalogStorageProvider();
+			if (provider != null){
+				Iterator it = provider.getBufferPools(this).iterator();
+				while(it.hasNext()) {
+					LUWBufferPool bp = (LUWBufferPool) it.next();
+					bpList.add(bp);
+				}
+			}
+
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+	
+	
+	private synchronized void loadTablespaces() {
+		if(this.tablespaceLoades) return;
+		this.tablespaceLoades = true;
+		this.registerFilterListener();
+
+ 		super.getTablespaces().clear();
+		Connection connection = this.getConnection();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			Iterator it = this.getGroups().iterator();
+			while(it.hasNext()) {
+				LUWPartitionGroup pg = (LUWPartitionGroup) it.next();
+				pg.getTableSpaces();
+			}
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);		
+	}
+
+	private synchronized void loadAuthorizationIds() {
+		if(this.authLoaded) return;
+		this.authLoaded = true;
+		this.registerFilterListener();
+
+		EList authList = super.getAuthorizationIds();
+		authList.clear();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			this.cachedAuth.clear();
+	        final DatabaseDefinition definition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(this);
+	        String version = definition.getVersion();
+	        float ver = 9.1f;
+	        try {
+	            ver = Float.parseFloat(version.substring(1));
+	        }
+	        catch (NumberFormatException e) {            
+	        }
+	        
+	        String query = "";
+	        if (ver < 9.1) { 
+	        	query = "SELECT DISTINCT GRANTEE AS AUTHID, GRANTEETYPE AS AUTHIDTYPE,'' AS REMARKS FROM SYSCAT.DBAUTH " +
+					"UNION SELECT DISTINCT GRANTEE AS AUTHID, GRANTEETYPE AS AUTHIDTYPE,'' AS REMARKS FROM SYSCAT.SCHEMAAUTH " +
+					"UNION SELECT DISTINCT GRANTEE AS AUTHID, GRANTEETYPE AS AUTHIDTYPE,'' AS REMARKS FROM SYSCAT.TABAUTH " +
+					"UNION SELECT DISTINCT GRANTEE AS AUTHID, GRANTEETYPE AS AUTHIDTYPE,'' AS REMARKS FROM SYSCAT.PACKAGEAUTH " +
+					"UNION SELECT DISTINCT GRANTEE AS AUTHID, GRANTEETYPE AS AUTHIDTYPE,'' AS REMARKS FROM SYSCAT.INDEXAUTH " +
+					"UNION SELECT DISTINCT GRANTEE AS AUTHID, GRANTEETYPE AS AUTHIDTYPE,'' AS REMARKS FROM SYSCAT.COLAUTH " +
+					"UNION SELECT DISTINCT GRANTEE AS AUTHID, GRANTEETYPE AS AUTHIDTYPE,'' AS REMARKS FROM SYSCAT.SEQUENCEAUTH " +
+					"UNION SELECT DISTINCT GRANTEE AS AUTHID, GRANTEETYPE AS AUTHIDTYPE,'' AS REMARKS FROM SYSCAT.ROUTINEAUTH " +
+					"UNION SELECT DISTINCT GRANTEE AS AUTHID, GRANTEETYPE AS AUTHIDTYPE,'' AS REMARKS FROM SYSCAT.PASSTHRUAUTH " +
+					"ORDER BY AUTHID";
+	        } else if (ver <9.5){
+	        	query = "SELECT DISTINCT AUTHID,AUTHIDTYPE,'' AS REMARKS  FROM SYSIBMADM.AUTHORIZATIONIDS"; //$NON-NLS-1$
+	        } else {
+	        	query = "SELECT DISTINCT AUTHID,AUTHIDTYPE,'' AS REMARKS FROM SYSIBMADM.AUTHORIZATIONIDS" //$NON-NLS-1$
+	        		+ " UNION SELECT DISTINCT ROLENAME AS AUTHID,'R' AS AUTHIDTYPE, REMARKS FROM SYSCAT.ROLES";
+	        }
+			Statement s = this.connection.createStatement();
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String authid = r.getString("AUTHID").trim();
+				final String authtype = r.getString("AUTHIDTYPE");
+				AuthorizationIdentifier auth = null;
+				if ("G".equals(authtype)) {
+					auth = new LUWCatalogGroup();
+				} else if ("U".equals(authtype)) {
+					auth = new LUWCatalogUser();
+				} else if ("R".equals(authtype)) {
+					auth = (AuthorizationIdentifier) this.cachedAuth.get(authid+ ":" +authtype);
+					if (auth != null && auth instanceof Role){
+					}else{
+						auth = new LUWCatalogRole();
+					}
+				} else {
+					continue;
+				}
+				auth.setName(authid);
+				
+				final String remarks = r.getString("REMARKS");
+				auth.setDescription(remarks);
+				
+				authList.add(auth);
+				String authkey = authid + ":" + authtype;
+				this.cachedAuth.put(authkey, auth);
+			}
+			r.close();
+			s.close();
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	private synchronized void loadPrivileges() {
+		if(this.privilegeLoaded) return;
+		this.privilegeLoaded = true;
+		this.registerFilterListener();
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			EList privileges = super.getPrivileges();
+			for (Iterator iter= privileges.iterator(); iter.hasNext();){
+				Privilege privilege = (Privilege) iter.next();
+				privilege.setGrantor(null);
+				privilege.setGrantee(null);
+			}
+			privileges.clear();
+			LUWCatalogDatabase.loadPrivileges(connection, super.getPrivileges(), this,"");
+		}catch( Exception e){
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	
+	private synchronized void loadLUWServers(EList serverList, LUWCatalogDatabase db) {
+		Vector providers = getLUWServerCatalogProvider();
+		for (int i =0; i< providers.size(); i++){
+			LUWServerCatalogProvider provider = (LUWServerCatalogProvider)providers.elementAt(i);
+			Iterator it = provider.getLUWServers(db).iterator();
+			while(it.hasNext()) {
+				LUWServer luwserver = (LUWServer) it.next();
+				serverList.add(luwserver);
+			}
+		}
+	}
+	
+	private synchronized void loadWrappers() {
+		if(this.wrappersLoaded) return;
+		this.wrappersLoaded = true;
+		this.registerFilterListener();
+
+		Connection connection = this.getConnection();
+		if(connection == null) return;
+		
+		super.getWrappers().clear();
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			LUWCatalogDatabase.loadWrappers(this.getConnection(),this);
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		this.eSetDeliver(deliver);		
+	}
+
+	private synchronized void loadProperties() {
+		if(this.propertyLoaded) return;
+		this.propertyLoaded = true;
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			String query = "SELECT COUNT(*) FROM TABLE(DB_PARTITIONS()) AS T";
+			Statement s = this.connection.createStatement();
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final int num = r.getInt(1);
+				if (num > 1 ) {
+					this.partitioned = true;
+				} else {
+					this.partitioned = false;
+				}
+			}
+			r.close();
+			s.close();
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	public static void loadWrappers(Connection connection, LUWDatabase database) throws SQLException {
+		EList wrappersList = database.getWrappers();
+		try {
+			
+			ConnectionInfo connectionInfo = DatabaseConnectionRegistry.getInstance().getConnectionForDatabase(database);
+			//ConnectionFilter filter = connectionInfo.getFilter(database.getName()+"::"+ConnectionFilter.WRAPPER_FILTER); //$NON-NLS-1$
+			//if (filter == null) {  //if schema filter is null, then get default filter
+			//	filter = connectionInfo.getFilter(ConnectionFilter.WRAPPER_FILTER);
+			//}
+			
+			String query = "SELECT WRAPNAME, WRAPTYPE, WRAPVERSION, LIBRARY, REMARKS FROM SYSCAT.WRAPPERS"; //$NON-NLS-1$
+			//if (filter != null) {
+			//	query += " WHERE rtrim(WRAPNAME) " + filter.getPredicate(); //$NON-NLS-1$
+			//}
+
+			Statement s = connection.createStatement();
+			ResultSet r = s.executeQuery(query);
+			
+			try {
+				while(r.next()) {
+					final String name = r.getString("WRAPNAME"); //$NON-NLS-1$
+					final String type = r.getString("WRAPTYPE"); //$NON-NLS-1$
+					final String version = r.getString("WRAPVERSION"); //$NON-NLS-1$
+					final String library = r.getString("LIBRARY"); //$NON-NLS-1$
+					final String description = r.getString("REMARKS"); //$NON-NLS-1$
+	
+					LUWWrapper wrapper = new LUWCatalogWrapper();
+					int iType = type.equals("R") ? 0 : 1; //$NON-NLS-1$
+					WrapperType wrapperType = WrapperType.get(iType);
+					wrapper.setName(name);					
+					wrapper.setWrapperType(wrapperType);
+					wrapper.setVersion(version);
+					wrapper.setLibrary(library);
+					wrapper.setDescription(description);
+					wrappersList.add(wrapper);
+				}
+			} catch (Exception e) {
+			}
+			r.close();
+			s.close();
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public static void loadPrivileges(Connection connection, EList privileges, Database database,String granteeFilter) throws SQLException {
+		try {
+			int options = ((LUWCatalogDatabase)database).getLoadOptions();
+			if ((options & DatabaseREProvider.EXCLUDE_ACCESS_CONTROL)== DatabaseREProvider.EXCLUDE_ACCESS_CONTROL) return;
+
+			Statement s = connection.createStatement();
+			String query = "";
+	        final DatabaseDefinition definition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+	        String version = definition.getVersion();
+	        float ver = 9.5f;
+	        try {
+	            ver = Float.parseFloat(version.substring(1));
+	        }
+	        catch (NumberFormatException e) {            
+	        }
+	        if (ver < 9.1) {
+	        	query = "SELECT GRANTOR,GRANTEE,GRANTEETYPE" +
+						",DBADMAUTH,CREATETABAUTH,BINDADDAUTH,CONNECTAUTH,NOFENCEAUTH" +
+						",IMPLSCHEMAAUTH,LOADAUTH,EXTERNALROUTINEAUTH,QUIESCECONNECTAUTH,'N' AS SECURITYADMAUTH" +
+						" FROM SYSCAT.DBAUTH";
+	        } else {
+	        	query = "SELECT GRANTOR,GRANTEE,GRANTEETYPE" +
+				",DBADMAUTH,CREATETABAUTH,BINDADDAUTH,CONNECTAUTH,NOFENCEAUTH" +
+				",IMPLSCHEMAAUTH,LOADAUTH,EXTERNALROUTINEAUTH,QUIESCECONNECTAUTH,SECURITYADMAUTH" +
+				" FROM SYSCAT.DBAUTH";
+	        }
+	        
+			if (granteeFilter != null && !"".equals(granteeFilter)) query += " WHERE " + granteeFilter;
+
+			ResultSet r = s.executeQuery(query);
+			String userName = connection.getMetaData().getUserName();
+			while(r.next()) {
+				final String grantorId = r.getString("GRANTOR").trim();
+				AuthorizationIdentifier grantor = LUWCatalogDatabase.getAuthorizationId(database, grantorId,null);
+				final String granteeId = r.getString("GRANTEE").trim();
+				AuthorizationIdentifier grantee = null;
+				final String granteeType = r.getString("GRANTEETYPE");
+				if ("G".equals(granteeType)) {
+					grantee = LUWCatalogDatabase.getAuthorizationId(database, granteeId, "G");
+				} else if ("R".equals(granteeType)) {
+					grantee = LUWCatalogDatabase.getAuthorizationId(database, granteeId, "R");
+				}
+				else {
+					grantee = LUWCatalogDatabase.getAuthorizationId(database, granteeId, "U");
+				}
+				
+				LUWCatalogPrivilege privilege = null;
+				EClass metaclass = SQLAccessControlPackage.eINSTANCE.getPrivilege();
+				boolean isSystemGranted  = granteeId.equalsIgnoreCase(userName);
+				String auth = r.getString("DBADMAUTH");
+				if (auth.equals("N")) {
+				} else {
+					privilege = new LUWCatalogPrivilege();
+					privilege.setAction(LUWCatalogConstant.PRIVILEGE_DBADM);
+					privileges.add(privilege);
+					privilege.setGrantor(grantor);
+					privilege.setGrantee(grantee);
+					LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+				}
+
+				auth = r.getString("CREATETABAUTH");
+				if (auth.equals("N")) {
+				} else {
+					privilege = new LUWCatalogPrivilege();
+					privilege.setAction(LUWCatalogConstant.PRIVILEGE_CREATETAB);
+					privileges.add(privilege);
+					privilege.setGrantor(grantor);
+					privilege.setGrantee(grantee);
+					LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+				}
+
+				auth = r.getString("BINDADDAUTH");
+				if (auth.equals("N")) {
+				} else {
+					privilege = new LUWCatalogPrivilege();
+					privilege.setAction(LUWCatalogConstant.PRIVILEGE_BINADD);
+					privileges.add(privilege);
+					privilege.setGrantor(grantor);
+					privilege.setGrantee(grantee);
+					LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+				}
+				auth = r.getString("CONNECTAUTH");
+				if (auth.equals("N")) {
+				} else {
+					privilege = new LUWCatalogPrivilege();
+					privilege.setAction(LUWCatalogConstant.PRIVILEGE_CONNECT);
+					privileges.add(privilege);
+					privilege.setGrantor(grantor);
+					privilege.setGrantee(grantee);
+					LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+				}
+				auth = r.getString("NOFENCEAUTH");
+				if (auth.equals("N")) {
+				} else {
+					privilege = new LUWCatalogPrivilege();
+					privilege.setAction(LUWCatalogConstant.PRIVILEGE_CREATE_NOT_FENCED_ROUTINE);
+					privileges.add(privilege);
+					privilege.setGrantor(grantor);
+					privilege.setGrantee(grantee);
+					LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+				}
+				auth = r.getString("IMPLSCHEMAAUTH");
+				if (auth.equals("N")) {
+				} else {
+					privilege = new LUWCatalogPrivilege();
+					privilege.setAction(LUWCatalogConstant.PRIVILEGE_IMPLICIT_SCHEMA);
+					privileges.add(privilege);
+					privilege.setGrantor(grantor);
+					privilege.setGrantee(grantee);
+					LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+				}
+				auth = r.getString("LOADAUTH");
+				if (auth.equals("N")) {
+				} else {
+					privilege = new LUWCatalogPrivilege();
+					privilege.setAction(LUWCatalogConstant.PRIVILEGE_LOAD);
+					privileges.add(privilege);
+					privilege.setGrantor(grantor);
+					privilege.setGrantee(grantee);
+					LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+				}
+				auth = r.getString("EXTERNALROUTINEAUTH");
+				if (auth.equals("N")) {
+				} else {
+					privilege = new LUWCatalogPrivilege();
+					privilege.setAction(LUWCatalogConstant.PRIVILEGE_CREATE_EXTERNAL_ROUTINE);
+					privileges.add(privilege);
+					privilege.setGrantor(grantor);
+					privilege.setGrantee(grantee);
+					LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+				}
+				auth = r.getString("QUIESCECONNECTAUTH");
+				if (auth.equals("N")) {
+				} else {
+					privilege = new LUWCatalogPrivilege();
+					privilege.setAction(LUWCatalogConstant.PRIVILEGE_QUIESCE_CONNECT);
+					privileges.add(privilege);
+					privilege.setGrantor(grantor);
+					privilege.setGrantee(grantee);
+					LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+				}
+				auth = r.getString("SECURITYADMAUTH");
+				if (auth.equals("N")) {
+				} else {
+					privilege = new LUWCatalogPrivilege();
+					privilege.setAction(LUWCatalogConstant.PRIVILEGE_SECADM);
+					privileges.add(privilege);
+					privilege.setGrantor(grantor);
+					privilege.setGrantee(grantee);
+					LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+				}
+			}
+			r.close();
+			s.close();
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+	
+	}
+	
+	
+	public boolean isBatchLoad(){
+		try {
+			for (Iterator iter = this.getEAnnotations().iterator(); iter.hasNext();){
+				EAnnotation eAnnotation = (EAnnotation)iter.next();
+				String source = eAnnotation.getSource();
+				if (source != null && source.equals(DatabaseREProvider.LOAD_PROPERTY)){
+					String batchLoadStr = (String) eAnnotation.getDetails().get(DatabaseREProvider.IS_BATCH_LOAD);
+					return new Boolean(batchLoadStr).booleanValue();
+				}
+	        }
+		} catch(Exception e){
+			
+		}
+        return false;
+	}
+
+	public int getLoadOptions(){
+		try {
+	        for (Iterator iter = this.getEAnnotations().iterator(); iter.hasNext();){
+				EAnnotation eAnnotation = (EAnnotation)iter.next();
+				String source = eAnnotation.getSource();
+				if (source != null && source.equals(DatabaseREProvider.LOAD_PROPERTY)){
+					String loadOption = (String) eAnnotation.getDetails().get(DatabaseREProvider.LOAD_OPTIONS);
+					return new Integer(loadOption).intValue();
+				}
+	        }
+		}catch(Exception e){
+		}
+		
+		return 0;
+	}
+	
+	public Collection getDatabaseContainer(String tablespaceName) {
+		if (!containerLoaded || this.cachedContainer == null) {
+			this.cachedContainer = new HashMap<String, List<LUWDatabaseContainer>>();
+			this.containerLoaded = true;
+
+			final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(this);
+			final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+
+			try {
+				String query = "select distinct TABLESPACE_NAME, CONTAINER_NAME, CONTAINER_TYPE, TOTAL_PAGES  " + //$NON-NLS-1$
+				" from TABLE (SYSPROC.SNAPSHOT_CONTAINER ( '' , -2)) AS S"; //$NON-NLS-1$
+				Statement s = this.connection.createStatement();
+				ResultSet r = s.executeQuery(query);
+				
+				while(r.next()) {
+					LUWDatabaseContainer container = (LUWDatabaseContainer) factory.create(LUWPackage.eINSTANCE.getLUWDatabaseContainer());
+					
+					final String tspName = r.getString("TABLESPACE_NAME").trim();
+					
+					final String name = r.getString("CONTAINER_NAME").trim(); //$NON-NLS-1$
+					container.setName(name);
+		
+					int containerType = r.getInt("CONTAINER_TYPE");
+					if(containerType == 0) // SMS: Directory 
+					{
+						container.setContainerType(LUWContainerType.DIRECTORY_LITERAL);
+					} else if (containerType == 1 || containerType == 5) {   //DMS: Device
+						container.setContainerType(LUWContainerType.DEVICE_LITERAL);
+					} else {		//DMS: File
+						container.setContainerType(LUWContainerType.FILE_LITERAL);
+					}
+		
+					container.setSizeInPages(r.getInt("TOTAL_PAGES")); //$NON-NLS-1$
+
+					if (!this.cachedContainer.containsKey(tspName)) {
+						ArrayList list = new ArrayList();
+						list.add(container);
+						this.cachedContainer.put(tspName, list);
+					} else {
+						ArrayList list = (ArrayList)this.cachedContainer.get(tspName);
+						list.add(container);
+					}
+				}
+				r.close();
+				s.close();
+				
+				// Update the tablespaces/containers with partition info
+				loadContainerPartitions();
+			}
+			catch(SQLException e)
+			{
+			}
+		}
+		return (ArrayList) this.cachedContainer.get(tablespaceName);
+	}
+
+	private void loadContainerPartitions() throws SQLException {
+		// Map partition number to partition object
+		Map<Integer, LUWDatabasePartition> partnmap = new HashMap<Integer, LUWDatabasePartition>();
+		List<Object> pgroups = getGroups();
+		for ( Object o : pgroups ) {
+			LUWPartitionGroup pgroup = (LUWPartitionGroup)o;
+			
+			if (pgroup.getName().equals( "IBMDEFAULTGROUP" )) { //$NON-NLS-1$
+				for ( Object p : pgroup.getPartitions() ) {
+					LUWDatabasePartition partn = (LUWDatabasePartition)p;
+					
+					partnmap.put( partn.getNumber(), partn );
+				}
+			}
+		}
+		
+		// Map partition number to associated tablespace name(s)
+		Map<Integer, Collection<String>> tbspmap = getTablespacePartitionMap();
+
+		if ( tbspmap.isEmpty() ) {
+			return;
+		}
+		
+		for ( Integer pnum : tbspmap.keySet() ) {
+			String query = "select TABLESPACE_NAME, CONTAINER_NAME " + //$NON-NLS-1$
+					" from TABLE (SYSPROC.SNAPSHOT_CONTAINER ( '' , " + //$NON-NLS-1$
+					pnum.toString() +
+					")) AS S" + //$NON-NLS-1$
+					" order by TABLESPACE_NAME";  //$NON-NLS-1$
+			
+			LUWDatabasePartition partn = partnmap.get( pnum );
+			if (partn == null) {
+				continue;
+			}
+
+			try {
+				Statement s = this.connection.createStatement();
+				ResultSet r = s.executeQuery(query);
+		
+				while(r.next()) {
+					final String cname = r.getString("CONTAINER_NAME").trim(); //$NON-NLS-1$
+					final String tsname = r.getString("TABLESPACE_NAME").trim(); //$NON-NLS-1$
+	
+					List<LUWDatabaseContainer> containers = this.cachedContainer.get( tsname );
+
+					if (containers != null) {
+						for ( LUWDatabaseContainer container : containers ) {
+							if (container.getName().equals( cname )) {
+								container.getPartitions().add( partn );
+							}
+						}
+					}
+				}
+				
+				r.close();
+				s.close();
+			}
+			catch(SQLException e)
+			{
+			}
+		}
+	}
+
+	/**
+	 * Get a map from partition number to names of tablespaces whose containers
+	 * reference the partition
+	 * 
+	 * @return The map
+	 * @throws SQLException
+	 */
+	private Map<Integer, Collection<String>> getTablespacePartitionMap() throws SQLException {
+		String query = "select DBPARTITIONNUM, TBSP_NAME" + //$NON-NLS-1$
+				" from SYSIBMADM.SNAPTBSP_PART" + //$NON-NLS-1$
+				" order by DBPARTITIONNUM"; //$NON-NLS-1$
+		
+		Statement s = this.connection.createStatement();
+		ResultSet r = s.executeQuery(query);
+
+		Map<Integer, Collection<String>> pmap = new HashMap<Integer, Collection<String>>();
+		
+		try {
+			int curpartnum = -1;
+			List<String> names = null;
+			
+			while(r.next()) {
+				int pnum = r.getInt( "DBPARTITIONNUM" );
+				String tsname = r.getString( "TBSP_NAME" ).trim();
+
+				if ( pnum != curpartnum ) {
+					curpartnum = pnum;
+					names = new ArrayList<String>();
+					pmap.put( new Integer( pnum ), names );
+				}
+				
+				names.add( tsname );
+			}
+		}
+		catch(SQLException e)
+		{
+			// Go on
+		}
+		
+		r.close();
+		s.close();
+
+		return pmap;
+	}
+	
+	public Schema getSchema(String schemaName){
+		if (! this.schemasLoaded) this.getSchemas();
+		return (Schema) this.cachedSchema.get(schemaName);
+	}
+
+	protected void cacheSchema(Schema schema){
+		this.cachedSchema.put(schema.getName(),schema);
+	}
+
+	private void iniCachedSchema(){
+		this.cachedSchema = new HashMap();
+	}
+	
+	/*private AuthorizationIdentifier getAuthId(String authId){
+		if (! this.authLoaded) this.getAuthorizationIds();
+		return (AuthorizationIdentifier) this.cachedAuth.get(authId);
+	}
+	*/
+	
+	
+	private AuthorizationIdentifier getAuthId( String authId) {
+		if ( !this.authLoaded )
+			this.getAuthorizationIds();
+		return (AuthorizationIdentifier) this.cachedAuth.get( authId );
+	}
+	
+	
+	
+	private AuthorizationIdentifier getAuthId(String authId, String authType){
+		if (! this.authLoaded) this.getAuthorizationIds();
+		if (authType == null) {
+			return (AuthorizationIdentifier) this.cachedAuth.get(authId);
+		}
+		else {
+		String authkey = authId + ":" + authType;
+		return (AuthorizationIdentifier) this.cachedAuth.get(authkey);
+	    }
+	}
+
+	private void cacheAuth(AuthorizationIdentifier authId){
+		this.cachedAuth.put(authId.getName(),authId);
+	}
+
+	private void iniCachedAuth(){
+		this.cachedAuth = new HashMap();
+	}
+
+	public static AuthorizationIdentifier getAuthorizationId(Database db,String name, String type){
+		AuthorizationIdentifier auth = null;
+		if (db instanceof LUWCatalogDatabase) {
+			if(type==null){
+				auth = ((LUWCatalogDatabase)db).getAuthId(name);
+					
+			}
+			else {
+			auth = ((LUWCatalogDatabase)db).getAuthId(name,type);}
+		
+			if (auth != null ) {
+				if ("G".equals(type) && auth instanceof Group){
+					return auth;
+				} else if ("U".equals(type) && auth instanceof User){
+					return auth;
+				} else if ("R".equals(type) && auth instanceof Role){
+					return auth;
+				} else {
+					return auth;
+				
+				}
+			}
+		} 
+		
+		Iterator it = db.getAuthorizationIds().iterator();
+		while(it.hasNext()) {
+		  auth = (AuthorizationIdentifier) it.next();
+			if(auth.getName().equals(name)) {
+				if ("G".equals(type) && auth instanceof Group){
+					return auth;
+				} else if ("U".equals(type) && auth instanceof User){
+					return auth;
+				} else if ("R".equals(type) && auth instanceof Role){
+					return auth;
+				} else {
+					return auth;
+				}
+			}
+		}
+
+		if ("G".equals(type)){
+			auth = new LUWCatalogGroup();
+		} else if ("U".equals(type)){
+			auth = new LUWCatalogUser();
+		} else if ("R".equals(type)){
+			auth = new LUWCatalogRole();
+		}
+
+		auth.setName(name);
+		auth.setDatabase(db);
+	
+		return auth;
+	}
+	
+	protected void getPrivilegesWithFilter(String granteeFilter) throws SQLException {
+		if (this.privilegeLoaded) return;
+		EList privileges = super.getPrivileges();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogDatabase.loadPrivileges(connection, privileges, this,granteeFilter);
+		}catch( Exception e){
+		}
+		this.eSetDeliver(deliver);
+	}
+	
+	private void registerFilterListener(){
+		if (filterListener == null) {
+			ConnectionInfo connectionInfo = DatabaseConnectionRegistry
+					.getInstance().getConnectionForDatabase(this);
+			filterListener = new FilterListener(this);
+			
+			connectionInfo.addFilterListener(filterListener);
+		}
+
+	}
+	
+	private class FilterListener implements ConnectionFilterListener{
+		FilterListener(LUWCatalogDatabase db){
+			this.db= db;
+		}
+		
+		public void connectionFilterAdded(String filterKey){
+			this.handleFilterUpdate(filterKey);
+		}
+		public void connectionFilterRemoved(String filterKey){
+			this.handleFilterUpdate(filterKey);
+		}
+		
+		private void handleFilterUpdate (String filterKey){
+			if (filterKey.indexOf(ConnectionFilter.SCHEMA_FILTER)>=0 
+					//||	filterKey.indexOf(ConnectionFilter.WRAPPER_FILTER)>=0
+					//||	filterKey.indexOf(ConnectionFilter.SERVER_FILTER)>=0
+					||	filterKey.indexOf(ConnectionFilter.NICKNAME_FILTER)>=0
+					||	filterKey.indexOf(ConnectionFilter.REMOTE_SERVER_FILTER)>=0
+					||	filterKey.indexOf(ConnectionFilter.REMOTE_SERVER_FILTER)>=0
+					||	filterKey.indexOf(IConnectionFilter.TABLESPACE_FILTER)>=0) {
+				this.db.refresh();
+			} else if (filterKey.indexOf(ConnectionFilter.TABLE_FILTER)>=0 
+					||	filterKey.indexOf(ConnectionFilter.VIEW_FILTER)>=0
+					||	filterKey.indexOf(ConnectionFilter.ALIAS_FILTER)>=0
+					||	filterKey.indexOf(ConnectionFilter.MQT_FILTER)>=0
+					||	filterKey.indexOf(ConnectionFilter.SEQUENCE_FILTER)>=0
+					||	filterKey.indexOf(ConnectionFilter.STORED_PROCEDURE_FILTER)>=0
+					||	filterKey.indexOf(ConnectionFilter.USER_DEFINED_FUNCTION_FILTER)>=0
+					||	filterKey.indexOf(ConnectionFilter.USER_DEFINED_TYPE_FILTER)>=0
+					||	filterKey.indexOf(IConnectionFilter.MODULE_FILTER)>=0
+					||	filterKey.indexOf(IConnectionFilter.PLSQL_PACKAGE_FILTER)>=0) {
+				
+//				ICatalogObject schema = (ICatalogObject) db.getSchema(filterKey.substring(0,filterKey.indexOf(ConnectionFilter.FILTER_SEPARATOR)));
+//				if (schema != null) schema.refresh();
+				if(filterKey.indexOf(ConnectionFilter.FILTER_SEPARATOR)>0){
+					ICatalogObject schema = (ICatalogObject) db.getSchema(filterKey.substring(0,filterKey.indexOf(ConnectionFilter.FILTER_SEPARATOR)));
+					if (schema != null) schema.refresh();
+				}else{
+					this.db.refresh();
+				}
+			}
+		}
+		private LUWCatalogDatabase db;
+	
+	}
+	
+
+	protected Connection connection;
+	private boolean schemasLoaded = false;
+	private boolean wrappersLoaded = false;	
+	private boolean remoteServersLoaded = false;
+	private boolean partitionGroupLoaded = false;
+	private boolean bufferpoolLoaded = false;
+	private boolean tablespaceLoades = false;
+	private boolean authLoaded = false;
+	private boolean privilegeLoaded = false;
+	private HashMap cachedSchema = new HashMap();
+	private HashMap cachedAuth = new HashMap();
+	private FilterListener filterListener = null;
+	private Map<String, List<LUWDatabaseContainer>> cachedContainer = null;
+	private boolean propertyLoaded = false;
+	private boolean containerLoaded = false;
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogDatabasePackage.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogDatabasePackage.java
new file mode 100644
index 0000000..dcb815d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogDatabasePackage.java
@@ -0,0 +1,423 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.enablement.ibm.catalog.IDatabaseObject;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.DatabaseREProvider;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWUtil;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabasePackageImpl;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Package;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2PackageStatement;
+import org.eclipse.datatools.enablement.ibm.util.ModelHelper;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.AuthorizationIdentifier;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Privilege;
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.statements.SQLStatement;
+import org.eclipse.datatools.modelbase.sql.statements.SQLStatementDefault;
+import org.eclipse.datatools.modelbase.sql.statements.SQLStatementsPackage;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWCatalogDatabasePackage extends LUWDatabasePackageImpl implements ICatalogObject,IDatabaseObject {
+	public void refresh() {
+		this.privilegeLoaded = false;
+		this.statementLoaded = false;
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+	
+	public Database getCatalogDatabase() {
+		return this.getSchema().getDatabase();		
+	}
+	
+	public void refresh(int refreshType){
+		if ((IDatabaseObject.IMPACTS & refreshType)  == IDatabaseObject.IMPACTS) {
+			this.impacts.clear();
+			this.impactsLoaded = false;
+		}
+	}
+	
+	public ICatalogObject[] getImpacted(){
+		if (!this.impactsLoaded) {
+			this.impacts = this.getImpactedObjects();
+			this.impactsLoaded = true;
+		}
+		ICatalogObject[] objs = new ICatalogObject[impacts.size()];
+		impacts.toArray(objs);
+		return objs;
+	}
+
+	public Collection getStatistics(){
+		return new ArrayList();
+	}
+
+	public EList getPrivileges(){
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getPrivileges();
+		} else {
+			if (!this.privilegeLoaded) this.loadPrivileges();
+			return this.privileges;
+		}
+	}
+	public EList getStatements() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getStatements();
+		} else {
+			if (!this.statementLoaded) this.loadStatements();
+			return this.statements;
+		}
+	}
+	
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == LUWPackage.LUW_DATABASE_PACKAGE__PRIVILEGES) {
+			this.getPrivileges();
+		}
+		else if(id == LUWPackage.LUW_DATABASE_PACKAGE__STATEMENTS) {
+			this.getStatements();
+		}
+		return super.eIsSet(eFeature);
+	}
+	
+	private synchronized void loadPrivileges() {
+		if(this.privilegeLoaded) return;
+		this.privilegeLoaded = true;
+	
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			EList privileges = super.getPrivileges();
+			for (Iterator iter= privileges.iterator(); iter.hasNext();){
+				Privilege privilege = (Privilege) iter.next();
+				privilege.setGrantor(null);
+				privilege.setGrantee(null);
+			}
+			
+			privileges.clear();
+			LUWCatalogDatabasePackage.loadPrivileges(this.getConnection(),privileges, this,"");
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	private synchronized void loadStatements() {
+		if(this.statementLoaded) return;
+		this.statementLoaded = true;
+	
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogDatabasePackage.loadStatements(this.getConnection(),super.getStatements(), this);
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	
+	public static void loadPrivileges(Connection connection, EList privilegeList,DB2Package pkg, String granteeFilter) throws SQLException {
+		final Schema schema = pkg.getSchema();
+		final Database database = ModelHelper.getDatabase(schema);
+		final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+		final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+
+		int options = ((LUWCatalogDatabase)database).getLoadOptions();
+		if ((options & DatabaseREProvider.EXCLUDE_ACCESS_CONTROL)== DatabaseREProvider.EXCLUDE_ACCESS_CONTROL) return;
+
+		Statement s = connection.createStatement();
+		String query = "SELECT GRANTOR,GRANTEE,GRANTEETYPE" +
+					",CONTROLAUTH,BINDAUTH,EXECUTEAUTH" +
+					" FROM SYSCAT.PACKAGEAUTH" + 
+					" WHERE GRANTOR <> GRANTEE " +
+					" AND PKGSCHEMA='" + LUWUtil.getIdentifier(pkg.getSchema().getName()) + "'" +
+					" AND PKGNAME='" + LUWUtil.getIdentifier(pkg.getName()) + "'";
+		if (granteeFilter != null && !"".equals(granteeFilter)) query += " AND " + granteeFilter;
+		
+		ResultSet r = s.executeQuery(query);
+		String userName = connection.getMetaData().getUserName();
+		while(r.next()) {
+			final String grantorId = r.getString("GRANTOR").trim();
+			AuthorizationIdentifier grantor = LUWCatalogDatabase.getAuthorizationId(database, grantorId,null);
+			final String granteeId = r.getString("GRANTEE").trim();
+			AuthorizationIdentifier grantee = null;
+			final String granteeType = r.getString("GRANTEETYPE");
+			if ("G".equals(granteeType)) {
+				grantee = LUWCatalogDatabase.getAuthorizationId(database, granteeId, "G");
+			} else if ("R".equals(granteeType)) {
+				grantee = LUWCatalogDatabase.getAuthorizationId(database, granteeId, "R");
+			} else {
+				grantee = LUWCatalogDatabase.getAuthorizationId(database, granteeId, "U");
+			}
+			
+			LUWCatalogPrivilege privilege = null;
+			boolean isSystemGranted = granteeId.equalsIgnoreCase(userName);
+			final String controlAuth = r.getString("CONTROLAUTH");
+			if (controlAuth.equals("Y")) {
+				privilege = new LUWCatalogPrivilege();
+				privilege.setAction(LUWCatalogConstant.PRIVILEGE_CONTROL);
+				privilegeList.add(privilege);
+				privilege.setGrantor(grantor);
+				privilege.setGrantee(grantee);
+				LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+			}
+			
+			final String bindAuth = r.getString("BINDAUTH");
+			if (bindAuth.equals("N")) {
+			} else {
+				privilege = new LUWCatalogPrivilege();
+				privilege.setAction(LUWCatalogConstant.PRIVILEGE_BIND);
+				if (bindAuth.equals("G")) {
+					privilege.setGrantable(true);
+				}
+				privilegeList.add(privilege);
+				privilege.setGrantor(grantor);
+				privilege.setGrantee(grantee);
+				LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+			}
+
+			final String executeAuth = r.getString("EXECUTEAUTH");
+			if (executeAuth.equals("N")) {
+			} else {
+				privilege = new LUWCatalogPrivilege();
+				privilege.setAction(LUWCatalogConstant.PRIVILEGE_EXECUTE);
+				if (executeAuth.equals("G")) {
+					privilege.setGrantable(true);
+				}
+				privilegeList.add(privilege);
+				privilege.setGrantor(grantor);
+				privilege.setGrantee(grantee);
+				LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+			}
+		}
+
+		r.close();
+		s.close();
+	}
+
+	public static void loadStatements(Connection connection, EList statements,DB2Package pkg) throws SQLException {
+		final Schema schema = pkg.getSchema();
+		final Database database = ModelHelper.getDatabase(schema);
+		final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+		final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+
+		Statement s = connection.createStatement();
+		String query = "SELECT STMTNO, SECTNO, TEXT" +		
+			" FROM SYSCAT.STATEMENTS" + 					
+			" WHERE PKGSCHEMA='" + LUWUtil.getIdentifier(pkg.getSchema().getName()) + "'" +		
+			" AND PKGNAME='" + LUWUtil.getIdentifier(pkg.getName()) + "'" +					
+			(pkg.getVersion().length() > 0 ? (" AND VERSION='" + LUWUtil.getIdentifier(pkg.getVersion()) + "'") : " AND VERSION = ''") +	
+			" ORDER BY STMTNO" +												
+			" FOR FETCH ONLY WITH UR";											
+		
+		ResultSet r = s.executeQuery(query);
+		while (r.next()) {
+			DB2PackageStatement pkgstmt = (DB2PackageStatement) factory.create(DB2ModelPackage.eINSTANCE.getDB2PackageStatement());
+			final int pkgStmtNo = r.getInt("STMTNO");			
+			pkgstmt.setStatementNumber(pkgStmtNo);
+			
+			final int pkgSectNo = r.getInt("SECTNO");			
+			pkgstmt.setSectionNumber(pkgSectNo);
+			
+			final String pkgText = r.getString("TEXT").trim();	
+			SQLStatement sqlstate = (SQLStatement) factory.create(SQLStatementsPackage.eINSTANCE.getSQLStatementDefault());
+			((SQLStatementDefault)sqlstate).setSQL(pkgText);
+			pkgstmt.setSqlStatement(sqlstate);
+			
+			statements.add(pkgstmt);
+		}
+
+		r.close();
+		s.close();
+	}
+
+	protected void getPrivilegesWithFilter(String granteeFilter) throws SQLException {
+		if (this.privilegeLoaded) return;
+		EList privileges = super.getPrivileges();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogDatabasePackage.loadPrivileges(this.getConnection(), privileges, this,granteeFilter);
+		}catch( Exception e){
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	private Collection getImpactedObjects(){
+		Collection impacts = new ArrayList();
+		Connection connection = this.getConnection();
+		impacts.addAll(LUWCatalogDatabasePackage.getImpactedRoutines(connection, this));
+		impacts.addAll(LUWCatalogDatabasePackage.getImpactedTriggers(connection, this));
+		return impacts;
+	}
+
+	protected static Collection getImpactedRoutines(Connection connection, DB2Package db2package) {
+		Collection impacts = new ArrayList();
+		try {
+			Statement s = connection.createStatement();
+			String query = "SELECT ROUTINENAME, ROUTINESCHEMA" +
+					" FROM SYSCAT.ROUTINEDEP" +
+					" WHERE BTYPE = 'K'" +
+					" AND BNAME='" + LUWUtil.getIdentifier(db2package.getName()) + "'" +
+					" AND BSCHEMA='" + LUWUtil.getIdentifier(db2package.getSchema().getName()) + "'" +
+					" FOR FETCH ONLY";
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String routineName = r.getString("ROUTINENAME").trim();
+				final String schemaName = r.getString("ROUTINESCHEMA").trim();
+				Routine routine = LUWCatalogDatabasePackage.getRountine(db2package, schemaName, routineName);
+				if (routine !=  null) {
+					impacts.add(routine);
+				}
+			}
+			r.close();
+			s.close();
+		}catch(SQLException e) {
+			e.printStackTrace();
+		}
+		return impacts;
+	}
+	
+	protected static Collection getImpactedTriggers(Connection connection, DB2Package db2package) {
+		Collection impacts = new ArrayList();
+		try {
+			Statement s = connection.createStatement();
+
+			String query = "SELECT DISTINCT A.TABSCHEMA, A.TABNAME, A.TRIGNAME" +
+			" FROM SYSCAT.TRIGGERS A, SYSCAT.TRIGDEP B" +
+			" WHERE (B.BNAME='" + LUWUtil.getIdentifier(db2package.getName()) + "'" +
+			" AND B.BSCHEMA='" + LUWUtil.getIdentifier(db2package.getSchema().getName()) + "'" +
+			" AND BTYPE ='K'" +
+			" AND A.TRIGNAME=B.TRIGNAME" +
+			" AND A.TRIGSCHEMA=B.TRIGSCHEMA)" +
+			" FOR FETCH ONLY";
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String trigName = r.getString("TRIGNAME").trim();
+				final String tabName = r.getString("TABNAME").trim();
+				final String schemaName = r.getString("TABSCHEMA").trim();
+				Trigger trigger = LUWCatalogDatabasePackage.getTrigger(db2package, schemaName, tabName,trigName);
+				if (trigger !=  null) {
+					impacts.add(trigger);
+				}
+			}
+			r.close();
+			s.close();
+			
+		}catch(SQLException e) {
+			e.printStackTrace();
+		}
+		return impacts;
+	}
+	
+	public static Schema getSchema(DB2Package pkg, String schemaName) {
+		Schema s = pkg.getSchema();
+		if(s.getName().equals(schemaName)) return s;
+		Database db = s.getDatabase();
+		if (db instanceof LUWCatalogDatabase){
+			s = ((LUWCatalogDatabase)db).getSchema(schemaName);
+			if (s != null) return s;
+		} 
+		Iterator it = db.getSchemas().iterator();
+		while(it.hasNext()) {
+			s = (Schema) it.next();
+			if(s.getName().equals(schemaName)) return s;			
+		}
+		
+		Schema schema = new LUWCatalogSchema();
+		schema.setName(schemaName);
+		schema.setDatabase(db);
+
+		if (db instanceof LUWCatalogDatabase){
+			((LUWCatalogDatabase)db).cacheSchema(schema);
+		}
+		
+		return schema;
+	}
+	
+	public static Table getTable(DB2Package pkg, String schemaName, String tableName) {
+		Schema schema = LUWCatalogDatabasePackage.getSchema(pkg, schemaName);
+		if(schema instanceof LUWCatalogSchema){
+			Table t = ((LUWCatalogSchema)schema).getTable(schemaName,tableName);
+			if (t != null) return t;
+		} 
+		
+		Iterator it = schema.getTables().iterator();
+		while(it.hasNext()) {
+			Table table = (Table) it.next();
+			if(table.getName().equals(tableName)) return table;			
+		}
+
+		return null;
+	
+	}
+
+	public static Routine getRountine(DB2Package pkg, String schemaName, String specificName) {
+		Schema schema = LUWCatalogDatabasePackage.getSchema(pkg, schemaName);
+		Iterator it = schema.getRoutines().iterator();
+		while(it.hasNext()) {
+			Routine r = (Routine) it.next();
+			if(specificName.equals(r.getSpecificName())) return r;			
+		}
+		return null;
+	}
+
+	public static Trigger getTrigger(DB2Package pkg, String schemaName, String tabName, String triggerName) {
+		Table table = LUWCatalogDatabasePackage.getTable(pkg, schemaName,tabName);
+		if (table != null) {
+			Iterator it = table.getTriggers().iterator();
+			while(it.hasNext()) {
+				Trigger r = (Trigger) it.next();
+				if(r.getName().equals(triggerName)) return r;			
+			}
+		}
+		return null;
+	}
+
+	private boolean privilegeLoaded = false;
+	private boolean statementLoaded = false;
+	private Collection impacts = new ArrayList();
+	private Collection statistics = new ArrayList();
+	private boolean impactsLoaded = false;
+
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogDistinctUserDefinedType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogDistinctUserDefinedType.java
new file mode 100644
index 0000000..eace09e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogDistinctUserDefinedType.java
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.enablement.ibm.catalog.IDatabaseObject;
+import org.eclipse.datatools.modelbase.sql.datatypes.impl.DistinctUserDefinedTypeImpl;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+public class LUWCatalogDistinctUserDefinedType extends DistinctUserDefinedTypeImpl implements ICatalogObject,IDatabaseObject {
+	public void refresh() {
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+	
+	public Database getCatalogDatabase() {
+		return this.getSchema().getDatabase();		
+	}
+	
+	public void refresh(int refreshType){
+	}
+
+	public ICatalogObject[] getImpacted(){
+		Collection impacts = this.getImpactedObjects();
+		ICatalogObject[] objs = new ICatalogObject[impacts.size()];
+		impacts.toArray(objs);
+		return objs;
+	}
+	
+	public Collection getStatistics(){
+		return new ArrayList();
+	}
+
+
+	private Collection getImpactedObjects(){
+		Collection impacts = new ArrayList();
+		Connection connection = this.getConnection();
+
+		impacts.addAll(LUWCatalogStructuredUserDefinedType.getImpactedTriggers(connection, this));
+		impacts.addAll(LUWCatalogStructuredUserDefinedType.getImpactedTables(connection, this));
+		impacts.addAll(LUWCatalogStructuredUserDefinedType.getImpactedConstraints(connection, this));
+		impacts.addAll(LUWCatalogStructuredUserDefinedType.getImpactedRoutines(connection, this));
+		impacts.addAll(LUWCatalogStructuredUserDefinedType.getImpactedPackages(connection, this));
+
+		return impacts;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogFederatedParameter.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogFederatedParameter.java
new file mode 100644
index 0000000..6ea5801
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogFederatedParameter.java
@@ -0,0 +1,134 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.Statement;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.FederatedParameterImpl;
+
+public class LUWCatalogFederatedParameter extends FederatedParameterImpl implements ICatalogObject{
+
+	public void refresh() {
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+	
+	public Database getCatalogDatabase() {
+		return this.getRoutine().getSchema().getDatabase();	
+	}
+	
+	static public void loadParameterOptions(Connection connection, LUWCatalogFederatedParameter parameter, 
+			                                int routineID, int ordinal){
+	
+		String query="SELECT ORDINAL, OPTION, SETTING" + //$NON-NLS-1$
+				" FROM SYSIBM.SYSROUTINEPARMOPTIONS" + //$NON-NLS-1$
+				" WHERE ROUTINEID=" + routineID +   //$NON-NLS-1$ //$NON-NLS-2$
+				" AND ORDINAL=" + ordinal ; //$NON-NLS-1$
+	
+		try {
+			Statement s = connection.createStatement();
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+                String option = r.getString("OPTION");
+                String setting = r.getString("SETTING");
+                
+   
+              if(option.equals("REMOTE_PARM_NAME")){
+            	  parameter.setName(setting);
+              }else if (option.equals("REMOTE_PARM_TYPESCHEMA")){
+            	  parameter.setRemoteParamTypeSchema(setting);
+              }else if (option.equals("REMOTE_PARM_TYPENAME")){
+            	  parameter.setRemoteParamTypeName(setting);
+              }else if (option.equals("REMOTE_PARM_SCALE")){
+            	  parameter.setRemoteRemoteParamScale(Integer.decode(setting).intValue());
+              }else if (option.equals("REMOTE_PARM_LENGTH")){
+            	  parameter.setRemoteRemoteParamLength(Integer.decode(setting).intValue());
+              }else if (option.equals("REMOTE_CODEPAGE")){
+            	  parameter.setRemoteCodePage(Integer.decode(setting).intValue());
+              }else if (option.equals("REMOTE_PARM_IS_RETURN_VALUE")){
+            	  parameter.setRemoteParamIsReturnValue(setting);
+              }else if (option.equals("REMOTE_PARM_TYPE_ID")){
+            	  parameter.setRemoteParamTypeID(Integer.decode(setting).intValue());
+              }
+			}
+			
+		}catch(Exception e){
+//        	DB2LUWPlugin.getDefault().log("LUWCatalogFederatedParameter:loadParameterOptions: " + e.getMessage(), null); //$NON-NLS-1$
+		}	
+		
+	}
+
+	private void setRemoteParamTypeName(String setting) {
+		remoteParamTypeName = setting;		
+	}
+	
+	private void setRemoteParamIsReturnValue(String setting) {
+		if(setting.equals("Y")){
+			setRemoteParamIsReturnValue(true);
+		}		
+	}
+
+	private void setRemoteParamIsReturnValue(boolean setting) {		
+		remoteParamIsReturnValue = setting;
+	}
+
+	private void setRemoteRemoteParamLength(int setting) {
+		remoteRemoteParamLength = setting;		
+	}
+
+	private void setRemoteRemoteParamScale(int setting) {
+		remoteRemoteParamScale = setting;		
+	}
+
+	private void setRemoteParamTypeSchema(String setting) {
+		remoteParamTypeSchema = setting;		
+	}
+	
+	public String getRemoteParamTypeName() {
+		return remoteParamTypeName;		
+	}
+	
+	public boolean getRemoteParamIsReturnValue() {
+		return remoteParamIsReturnValue;		
+	}
+
+	public int getRemoteRemoteParamLength() {
+		return remoteRemoteParamLength;		
+	}
+
+	public int getRemoteRemoteParamScale() {
+		return remoteRemoteParamScale;		
+	}
+
+	public String getRemoteParamTypeSchema() {
+		return remoteParamTypeSchema;		
+	}
+	
+	boolean remoteParamIsReturnValue=false;
+	int remoteRemoteParamLength=0;
+	int remoteRemoteParamScale=0;
+	String remoteParamTypeName = "";
+	String remoteParamTypeSchema = "";
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogFederatedProcedure.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogFederatedProcedure.java
new file mode 100644
index 0000000..e1f6dd4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogFederatedProcedure.java
@@ -0,0 +1,606 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.math.BigInteger;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.enablement.ibm.catalog.IDatabaseObject;
+import org.eclipse.datatools.enablement.ibm.catalog.util.CatalogStatistics;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWUtil;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWCatalogMessages;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.FederatedProcedureImpl;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.PrimitiveType;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.routines.DataAccess;
+import org.eclipse.datatools.modelbase.sql.routines.ParameterMode;
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Dependency;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWCatalogFederatedProcedure extends FederatedProcedureImpl implements ICatalogObject,IDatabaseObject{
+	public void refresh() {
+		this.loaded = false;
+		if (this.parameterLoaded){
+			this.parameters.clear();
+			this.parameterLoaded = false;
+		}
+		
+		if (this.dependencyLoaded){
+			this.dependencies.clear();
+			this.dependencyLoaded = false;
+		}
+
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public void refresh(int refreshType){
+		if ((IDatabaseObject.IMPACTS & refreshType)  == IDatabaseObject.IMPACTS) {
+			this.impacts.clear();
+			this.impactsLoaded = false;
+		}
+		if ((IDatabaseObject.STATISTICS & refreshType)  == IDatabaseObject.STATISTICS) {
+			this.statistics.clear();
+			this.statisticsLoaded = false;
+		}
+	}
+	
+	public ICatalogObject[] getImpacted(){
+		if (!this.impactsLoaded) {
+			this.impacts = this.getImpactedObjects();
+			this.impactsLoaded = true;
+		}
+		ICatalogObject[] objs = new ICatalogObject[impacts.size()];
+		impacts.toArray(objs);
+		return objs;
+	}
+	
+	private Collection getImpactedObjects(){
+		Collection impacts = new ArrayList();
+		Connection connection = this.getConnection();		
+		impacts.addAll(LUWCatalogProcedure.getImpactedTriggers(connection, this));
+		impacts.addAll(LUWCatalogProcedure.getImpactedTables(connection, this));
+		impacts.addAll(LUWCatalogProcedure.getImpactedConstraints(connection, this));
+		impacts.addAll(LUWCatalogProcedure.getImpactedRoutines(connection, this));
+		impacts.addAll(LUWCatalogProcedure.getImpactedPackages(connection, this));		
+		return impacts;
+	}	
+	
+	public Collection getStatistics(){
+		if (!this.statisticsLoaded) {
+			this.statistics = LUWCatalogFederatedProcedure.getStatistics(this.getConnection(), this);
+			this.statisticsLoaded = true;
+		} 
+		return this.statistics;
+	}
+	
+	public static Collection getStatistics(Connection connection, Routine routine){
+		Collection statistics = new ArrayList();
+		try {
+			String query = "SELECT IOS_PER_INVOC,INSTS_PER_INVOC,IOS_PER_ARGBYTE,INSTS_PER_ARGBYTE" +
+				",PERCENT_ARGBYTES,INITIAL_IOS,INITIAL_INSTS,CARDINALITY,SELECTIVITY" +
+				" FROM SYSSTAT.ROUTINES" + 
+				" WHERE ROUTINESCHEMA='" + LUWUtil.getIdentifier(routine.getSchema().getName()) + "'" +
+				" AND ROUTINENAME ='" + LUWUtil.getIdentifier(routine.getName()) + "'" +
+				" AND SPECIFICNAME ='" + LUWUtil.getIdentifier(routine.getSpecificName()) + "'" +
+				" FOR FETCH ONLY";
+			
+			Statement s = connection.createStatement();
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				CatalogStatistics stats = null;
+
+				final float ios_per_Invoc = r.getFloat("IOS_PER_INVOC");
+				if (ios_per_Invoc != -1) {
+					stats = new CatalogStatistics("IOS_PER_INVOC",LUWCatalogMessages.STAT_IOS_PER_INVOC,LUWCatalogMessages.STAT_IOS_PER_INVOC_DES,ios_per_Invoc,"SYSSTAT.ROUTINES");
+					statistics.add(stats);
+				}
+
+				final float insts_per_Invoc = r.getFloat("INSTS_PER_INVOC");
+				if (insts_per_Invoc != -1) {
+					stats = new CatalogStatistics("INSTS_PER_INVOC",LUWCatalogMessages.STAT_INSTS_PER_INVOC,LUWCatalogMessages.STAT_INSTS_PER_INVOC_DES,insts_per_Invoc,"SYSSTAT.ROUTINES");
+					statistics.add(stats);
+				}
+
+				final float ios_per_Argbyte = r.getFloat("IOS_PER_ARGBYTE");
+				if (ios_per_Argbyte != -1) {
+					stats = new CatalogStatistics("IOS_PER_ARGBYTE",LUWCatalogMessages.STAT_IOS_PER_ARGBYTE,LUWCatalogMessages.STAT_IOS_PER_ARGBYTE_DES,ios_per_Argbyte,"SYSSTAT.ROUTINES");
+					statistics.add(stats);
+				}
+
+				final float insts_per_Argbyte = r.getFloat("INSTS_PER_ARGBYTE");
+				if (insts_per_Argbyte != -1) {
+					stats = new CatalogStatistics("INSTS_PER_ARGBYTE",LUWCatalogMessages.STAT_INSTS_PER_ARGBYTE,LUWCatalogMessages.STAT_INSTS_PER_ARGBYTE_DES,insts_per_Argbyte,"SYSSTAT.ROUTINES");
+					statistics.add(stats);
+				}
+				
+				final int percent_Argbyte = r.getInt("PERCENT_ARGBYTES");
+				if (percent_Argbyte != -1) {
+					stats = new CatalogStatistics("PERCENT_ARGBYTES",LUWCatalogMessages.STAT_PERCENT_ARGBYTE,LUWCatalogMessages.STAT_PERCENT_ARGBYTE_DES,percent_Argbyte,"SYSSTAT.ROUTINES");
+					statistics.add(stats);
+				}
+
+
+				final float initial_ios = r.getFloat("INITIAL_IOS");
+				if (initial_ios != -1) {
+					stats = new CatalogStatistics("INITIAL_IOS",LUWCatalogMessages.STAT_INITIAL_IOS,LUWCatalogMessages.STAT_INITIAL_IOS_DES,initial_ios,"SYSSTAT.ROUTINES");
+					statistics.add(stats);
+				}
+				
+				final float initial_insts = r.getFloat("INITIAL_INSTS");
+				if (initial_insts != -1) {
+					stats = new CatalogStatistics("INITIAL_INSTS",LUWCatalogMessages.STAT_INITIAL_INSTS,LUWCatalogMessages.STAT_INITIAL_INSTS_DES,initial_insts,"SYSSTAT.ROUTINES");
+					statistics.add(stats);
+				}
+				
+				final BigInteger card = r.getBigDecimal("CARDINALITY").toBigInteger();
+				if (card.intValue() != -1) {
+					stats = new CatalogStatistics("CARDINALITY",LUWCatalogMessages.STAT_ROUTINE_CARDINALITY,LUWCatalogMessages.STAT_ROUTINE_CARDINALITY_DES,card,"SYSSTAT.ROUTINES");
+					statistics.add(stats);
+				}
+
+				final float selectivity= r.getFloat("SELECTIVITY");
+				if (selectivity != -1) {
+					stats = new CatalogStatistics("SELECTIVITY",LUWCatalogMessages.STAT_SELECTIVITY,LUWCatalogMessages.STAT_SELECTIVITY_DES,selectivity,"SYSSTAT.ROUTINES");
+					statistics.add(stats);
+				}
+			}
+			r.close();
+			s.close();
+		}catch(SQLException e) {
+			//e.printStackTrace();
+		}
+		return statistics;
+	}
+
+	
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+	
+	public Database getCatalogDatabase() {
+		if(!this.loaded) this.load();
+		return this.getSchema().getDatabase();		
+	}
+	
+	public boolean isDeterministic() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.isDeterministic();
+		} else {
+			if(!this.loaded) this.load();
+			return super.isDeterministic();
+		}
+	}
+	
+	public EList getDependencies() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getDependencies();
+		} else {
+			if(!this.dependencyLoaded) this.loadDependencies();
+			return this.dependencies;
+		}
+	}
+
+	public EList getParameters() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getParameters();
+		} else {
+			if(!this.parameterLoaded) this.loadParameters();
+			return this.parameters;
+		}
+	}
+	
+	public DataAccess getSqlDataAccess() {
+		if(!this.loaded) this.load();
+		return this.sqlDataAccess;
+	}
+
+	public String getRemoteServer(){
+		if(!this.loaded) this.load();
+		return this.remoteServer;
+	}
+	
+	private synchronized void load() {
+		if(this.loaded) return;
+		this.loaded = true;
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);
+		Connection connection = this.getConnection();
+        final DatabaseDefinition definition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(this.getCatalogDatabase());
+        String version = definition.getVersion();
+        float ver = 8.0f;
+        try {
+            ver = Float.parseFloat(version.substring(1));
+            if(ver < 9 ){
+            	//no federated stored procedures prior to V9
+            	return;
+            }
+        }
+        catch (NumberFormatException e) { 
+//        	DB2LUWPlugin.getDefault().log("LUWCatalogFederatedProcedure:load: " + e.getMessage(), null); //$NON-NLS-1$
+        }
+        
+		try {
+			Statement s = connection.createStatement();
+			
+            //get the federated SP options
+			ResultSet r = s.executeQuery("SELECT OPTION, SETTING" +
+				                         " FROM SYSIBM.SYSROUTINEOPTIONS" +
+	                                     " WHERE ROUTINEID=" + routineID);
+
+			while(r.next()) {
+                String option = r.getString("OPTION");
+                String setting = r.getString("SETTING");
+                
+                if(option.equals("REMOTE_UNIQUE_ID")){
+                	this.setRemoteUniqueId(setting);
+                }else if (option.equals("REMOTE_SERVER")){
+                	this.setRemoteServer(setting);
+                }else if (option.equals("SERVER")){
+                	this.setFederatedServerByName(setting);
+                }else if (option.equals("REMOTE_SCHEMA")){
+                	this.setRemoteSchema(setting);
+                }else if (option.equals("REMOTE_PACKAGE")){
+                	this.setRemotePackage(setting);
+                }else if (option.equals("REMOTE_PROCEDURE")){
+                	this.setRemoteProcedureName(setting);
+                }else if (option.equals("REMOTE_NUMPARM")){
+                	this.setNumberOfParameters(Integer.decode(setting).intValue());
+                }else if (option.equals("RESULT_SETS_TO_CLIENT")){
+                	this.setResultSetsToClient(setting);
+                }else if (option.equals("REMOTE_REFCURSORS")){
+                	this.setNumberOfRefCursors(Integer.decode(setting).intValue());
+                }else if (option.equals("ALL_RESULT_SETS_TO_CALLER")){
+                	this.setAllResultSetsToCaller(setting);
+                }else if (option.equals("IS_REMOTE_FUNCTION")){
+                	this.setOracleRemoteFunction(setting);
+                }
+	      
+			}
+			r.close();
+			s.close();
+		}
+		catch (Exception e) {
+//        	DB2LUWPlugin.getDefault().log("LUWCatalogFederatedProcedure:load: " + e.getMessage(), null); //$NON-NLS-1$
+		}
+
+		this.eSetDeliver(deliver);
+	}
+
+    
+	private synchronized void loadDependencies() {
+		if(this.dependencyLoaded) return;
+		this.dependencyLoaded = true;
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			EList dependencyList = super.getDependencies();
+
+			LUWCatalogProcedure.loadDependencies(this.getConnection(), dependencyList, this);
+			
+			if (this.getFederatedServer() != null) {
+				final Database database = this.getSchema().getDatabase();
+				final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+				final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+				Dependency dep = (Dependency) factory.create(SQLSchemaPackage.eINSTANCE.getDependency());
+				dep.setTargetEnd(this.getFederatedServer());
+				dependencyList.add(dep);
+			}
+
+		}
+		catch(Exception e) {
+//        	DB2LUWPlugin.getDefault().log("LUWCatalogFederatedProcedure:loadDependencies: " + e.getMessage(), null); //$NON-NLS-1$
+		}
+		
+		this.eSetDeliver(deliver);		
+	}
+
+	private synchronized void loadParameters() {
+		if(this.parameterLoaded) return;
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			LUWCatalogFederatedProcedure.loadParameters(this.getConnection(), super.getParameters(), this);
+		}
+		catch(Exception e) {
+//        	DB2LUWPlugin.getDefault().log("LUWCatalogFederatedProcedure:loadParameters: " + e.getMessage(), null); //$NON-NLS-1$
+			System.out.println(e.toString());
+		}
+		
+		this.parameterLoaded = true;
+		this.eSetDeliver(deliver);		
+	}
+	
+
+	public static void loadParameters(Connection connection, EList parameterList, LUWCatalogFederatedProcedure fedSP) throws SQLException {
+		final Database database = fedSP.getSchema().getDatabase();
+		final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+//		final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+			
+		String query="SELECT PARMNAME,ROWTYPE,LOCATOR,TYPESCHEMA,TYPENAME,LENGTH,SCALE,CODEPAGE,REMARKS,TARGET_TYPESCHEMA,TARGET_TYPENAME,ORDINAL" + //$NON-NLS-1$
+				" FROM SYSIBM.SYSROUTINEPARMS" + //$NON-NLS-1$
+				" WHERE ROUTINE_ID=" + LUWCatalogFederatedProcedure.getRoutineID(fedSP) +   //$NON-NLS-1$ //$NON-NLS-2$
+				" ORDER BY ORDINAL"; //$NON-NLS-1$
+
+		Statement s = connection.createStatement();
+		ResultSet r = s.executeQuery(query);
+		try {
+			while(r.next()) {
+				
+				final LUWCatalogFederatedParameter parameter = new LUWCatalogFederatedParameter();
+				final String name = r.getString("PARMNAME"); //$NON-NLS-1$
+				parameter.setName(name);
+
+				final String rowtype = r.getString("ROWTYPE").trim(); //$NON-NLS-1$
+				if (rowtype.equals("B")){ //$NON-NLS-1$
+					parameter.setMode(ParameterMode.INOUT_LITERAL);
+				} else if (rowtype.equals("O")) { //$NON-NLS-1$
+					parameter.setMode(ParameterMode.OUT_LITERAL);
+				} else if (rowtype.equals("P")) { //$NON-NLS-1$
+					parameter.setMode(ParameterMode.IN_LITERAL);
+				}
+
+				final String locator = r.getString("LOCATOR"); //$NON-NLS-1$
+				if (locator.equals("Y")) //$NON-NLS-1$
+					parameter.setLocator(true);
+				else 
+					parameter.setLocator(false);
+
+				String typeName = r.getString("TYPENAME"); //$NON-NLS-1$
+				if (typeName.equalsIgnoreCase("FLOAT")){ //$NON-NLS-1$
+					int length = r.getInt("LENGTH"); //$NON-NLS-1$
+					if (length ==4) typeName="REAL"; //$NON-NLS-1$
+					else typeName="DOUBLE"; //$NON-NLS-1$
+				}
+				PredefinedDataTypeDefinition typeDefinition = databaseDefinition.getPredefinedDataTypeDefinition(typeName);
+				if(typeDefinition != null) {
+					
+					if (typeDefinition.getPrimitiveType().getValue() == PrimitiveType.CHARACTER) {
+						final int codePage = r.getInt(8);
+						if(codePage == 0) {
+							typeDefinition = databaseDefinition.getPredefinedDataTypeDefinition("CHAR () FOR BIT DATA"); //$NON-NLS-1$
+						}
+					}
+					else if (typeDefinition.getPrimitiveType().getValue() == PrimitiveType.CHARACTER_VARYING) {
+						final int codePage = r.getInt(8);
+						if(codePage == 0) {
+							typeDefinition = databaseDefinition.getPredefinedDataTypeDefinition("VARCHAR () FOR BIT DATA"); //$NON-NLS-1$
+						}
+					}
+
+					
+					PredefinedDataType 	type = databaseDefinition.getPredefinedDataType(typeDefinition);
+					if(typeDefinition.isLengthSupported()) {
+						final int length = r.getInt("LENGTH"); //$NON-NLS-1$
+						EStructuralFeature feature = type.eClass().getEStructuralFeature("length");  //$NON-NLS-1$
+						type.eSet(feature, new Integer(length));
+					}
+					else if(typeDefinition.isPrecisionSupported()) {
+						final int length = r.getInt("LENGTH"); //$NON-NLS-1$
+						EStructuralFeature feature = type.eClass().getEStructuralFeature("precision"); //$NON-NLS-1$
+						type.eSet(feature, new Integer(length));
+					}
+					
+					if(typeDefinition.isScaleSupported()) {
+						final int length = r.getInt("SCALE"); //$NON-NLS-1$
+						EStructuralFeature feature = type.eClass().getEStructuralFeature("scale"); //$NON-NLS-1$
+						type.eSet(feature, new Integer(length));
+					}
+					
+					parameter.setContainedType(type);
+				}
+				else {
+					if (typeName.equals("REFERENCE")){ //$NON-NLS-1$
+						final String typeSchemaName = r.getString("TARGET_TYPESCHEMA").trim(); //$NON-NLS-1$
+						final String udtName = r.getString("TARGET_TYPENAME"); //$NON-NLS-1$
+						parameter.setReferencedType(LUWCatalogFederatedProcedure.getUserDefinedType(fedSP,typeSchemaName,udtName));
+					} else {
+						final String typeSchemaName = r.getString("TYPESCHEMA").trim(); //$NON-NLS-1$
+						parameter.setReferencedType(LUWCatalogFederatedProcedure.getUserDefinedType(fedSP,typeSchemaName,typeName));
+					}
+				}
+				
+				parameter.setDescription(r.getString("REMARKS")); //$NON-NLS-1$
+				parameter.setFederatedProcedure(fedSP);
+				parameterList.add(parameter);
+				int ordinal = r.getInt("ORDINAL");
+				LUWCatalogFederatedParameter.loadParameterOptions(connection, parameter, 
+						                       LUWCatalogFederatedProcedure.getRoutineID(fedSP),
+						                       ordinal);
+			}
+		}
+		catch(Exception e) {
+//        	DB2LUWPlugin.getDefault().log("LUWCatalogFederatedProcedure:loadParameters: " + e.getMessage(), null); //$NON-NLS-1$
+		}
+			
+		r.close();
+		s.close();
+
+	}
+	
+	
+	public static Schema getSchema(LUWCatalogFederatedProcedure fedSP, String schemaName) {
+		Schema s = fedSP.getSchema();
+		if(s.getName().trim().equals(schemaName.trim())) return s;
+		Database d = s.getDatabase();
+		Iterator it = d.getSchemas().iterator();
+		while(it.hasNext()) {
+			s = (Schema) it.next();
+			if(s.getName().trim().equals(schemaName.trim())) return s;			
+		}
+
+		Schema schema = new LUWCatalogSchema();
+		schema.setName(schemaName);
+		schema.setDatabase(d);
+
+		return schema;
+	}
+	
+	public static Table getTable(LUWCatalogFederatedProcedure fedSP, String schemaName, String tableName) {
+		Schema schema = LUWCatalogFederatedProcedure.getSchema(fedSP, schemaName);
+		Iterator it = schema.getTables().iterator();
+		while(it.hasNext()) {
+			Table table = (Table) it.next();
+			if(table.getName().equals(tableName)) return table;			
+		}
+
+		Table table = new LUWCatalogTable();
+		table.setName(tableName);
+		table.setSchema(schema);
+
+		return table;
+	}
+	
+	public static int getRoutineID(LUWCatalogFederatedProcedure fedSP){
+		if(!fedSP.loaded) fedSP.load();
+		return fedSP.routineID;
+	}
+		
+	public static Routine getRountine(LUWCatalogFederatedProcedure fedSP, String schemaName, String routineName) {
+		Schema schema = LUWCatalogFederatedProcedure.getSchema(fedSP, schemaName);
+		Iterator it = schema.getRoutines().iterator();
+		while(it.hasNext()) {
+			Routine r = (Routine) it.next();
+			if(r.getName().equals(routineName)) return r;			
+		}
+
+		Routine r = new LUWCatalogFederatedProcedure();
+		r.setName(routineName);
+		r.setSchema(schema);
+
+		return r;
+	}
+
+	public static UserDefinedType getUserDefinedType(LUWCatalogFederatedProcedure fedSP, String schemaName, String userDefinedTypeName) {
+		Schema schema = LUWCatalogFederatedProcedure.getSchema(fedSP, schemaName);
+		Iterator it = schema.getUserDefinedTypes().iterator();
+		while(it.hasNext()) {
+			UserDefinedType userDefinedType = (UserDefinedType) it.next();
+			if(userDefinedType.getName().equals(userDefinedTypeName)) return userDefinedType;			
+		}
+
+		UserDefinedType userDefinedType = new LUWCatalogDistinctUserDefinedType();
+		userDefinedType.setName(userDefinedTypeName);
+		userDefinedType.setSchema(schema);
+		
+		return userDefinedType;		
+	}
+	
+	public void setRoutineID(int id){
+		this.routineID=id;
+	}
+	
+	public DataAccess getSQLDataAccess(){
+		if(!this.loaded) this.load();
+		return sqlDataAccess;
+	}
+	
+	public void setSQLDataAccess(DataAccess da){
+		sqlDataAccess = da;
+	}
+	
+	public boolean isExternalAction(){
+		if(!this.loaded) this.load();
+		return externalAction;
+	}
+	
+	public void setExternalAction(String ea){
+		if(ea.trim().equals("E")){
+			externalAction=true;
+		}
+	}
+	
+	private void setAllResultSetsToCaller(String setting) {
+		if(setting.trim().equals("Y")){
+			setAllResultSetsToCaller(true);
+		}else{
+			setAllResultSetsToCaller(false);
+		}
+		
+	}
+	
+	public LUWCatalogFederatedServer getFederatedServer() {
+		if(!this.loaded) this.load();		
+		return server;
+	}
+	
+	private void setFederatedServerByName(String setting) {
+		Database db = getSchema().getDatabase();
+		if(db instanceof LUWCatalogDatabase){
+			EList servers = ((LUWCatalogDatabase)db).getServers();
+			Iterator itrServers = servers.iterator();
+			while(itrServers.hasNext()){
+				SQLObject obj = (SQLObject)itrServers.next();
+				if(obj instanceof LUWCatalogFederatedServer && 
+				   obj.getName().trim().equals(setting.trim())){
+					server = (LUWCatalogFederatedServer)obj;
+					setRemoteServer(server.getName());
+					break;
+				}
+			}
+		}
+		
+	}
+	
+	private void setOracleRemoteFunction(String setting) {
+		if(setting.equals("Y")){
+			remoteFunction = true;
+		}		
+	}
+	
+	public boolean isOracleRemoteFunction() {
+		return remoteFunction;		
+	}
+	
+	
+
+
+	private LUWCatalogFederatedServer server=null;
+	private boolean loaded = false;
+	private boolean dependencyLoaded = false;
+	private boolean parameterLoaded = false;
+    private int routineID=0;
+    private boolean externalAction=false;
+    private boolean remoteFunction=false;
+    
+    private boolean statisticsLoaded = false;
+	private boolean impactsLoaded = false;
+    private Collection impacts = new ArrayList();
+	private Collection statistics = new ArrayList();
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogFederatedServer.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogFederatedServer.java
new file mode 100644
index 0000000..2064ce5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogFederatedServer.java
@@ -0,0 +1,460 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.sqm.core.connection.ConnectionFilter;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.DatabaseConnectionRegistry;
+import org.eclipse.datatools.enablement.ibm.catalog.IDatabaseObject;
+import org.eclipse.datatools.enablement.ibm.catalog.util.CatalogLoadUtil;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWUtil;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFactory;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNickname;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.RelationalRemoteServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.RemoteServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGenericServerImpl;
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWCatalogFederatedServer extends LUWGenericServerImpl implements ICatalogObject,IDatabaseObject {
+	//TODO: Added by Geetika: Won't need these fields here, as plugin called at next level
+	private static RemoteCatalogProvider remoteCatalogProvider = null;
+	private static boolean remoteCatalogProviderLoaded = false;
+
+	private String wrapperName = ""; //@gsauere //$NON-NLS-1$
+	
+	private boolean nicknamesLoaded = false;
+	private boolean wrapperLoaded = false; //@gsauere
+	private boolean userMappingsLoaded = false; //@gsauere
+	private boolean optionsLoaded = false;
+	private boolean remoteServerLoaded = false;
+	private boolean impactsLoaded = false;
+	private Collection impacts = new ArrayList();
+
+	public static RemoteCatalogProvider getRemoteCatalogProvider() {
+		if(!remoteCatalogProviderLoaded) {
+			remoteCatalogProviderLoaded = true;
+			IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+			IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("com.ibm.datatools.db2.luw", "remoteCatalog"); //$NON-NLS-1$ //$NON-NLS-2$
+			IExtension[] extensions = extensionPoint.getExtensions();
+			if(extensions.length == 1) {
+				IConfigurationElement[] configElements = extensions[0].getConfigurationElements();
+				try {
+					remoteCatalogProvider = (RemoteCatalogProvider) configElements[0].createExecutableExtension("class"); //$NON-NLS-1$
+				}
+				catch(Exception e) {
+				}
+			}
+		}
+		return remoteCatalogProvider;
+	}
+
+	public synchronized void refresh() {
+		this.nicknamesLoaded = false;
+		this.wrapperLoaded = false; //@gsauere
+		this.userMappingsLoaded = false; //@gsauere
+		this.optionsLoaded = false;
+		this.getOptions().clear();
+
+		//before clearing the remote server, we must get the remote database object and refresh it
+		//this is necessary to refresh nicknames that eventually exist on tables in that database
+		if (this.remoteServer != null) {
+			//no need to cast to ECatRemoteDatabase since we would have to add a dependency to the ecat plugin and 
+			//we just need to refresh it.
+			ICatalogObject remoteDB = 
+				(ICatalogObject) ((LUWCatalogRelationalRemoteServer) this.remoteServer).getDatabase();
+			if (remoteDB != null) {
+				remoteDB.refresh();
+			}
+		}
+		this.remoteServerLoaded = false;
+		this.remoteServer = null;
+		
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+
+	public Database getCatalogDatabase() {
+		return this.getLUWDatabase();
+	}
+	
+	public EList getNicknames() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getNicknames();
+		} else {
+			if(!this.nicknamesLoaded) this.loadNicknames();
+			return super.getNicknames();
+		}
+	}
+	
+	public EList getOptions() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getOptions();
+		} else {
+			if(!this.optionsLoaded) this.loadOptions();
+			return super.getOptions();
+		}
+	}
+
+	public RemoteServer getRemoteServer() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getRemoteServer();
+		} else {
+			if(!remoteServerLoaded) this.loadRemoteServer();
+			return super.getRemoteServer();
+		}
+	}
+	
+	public LUWWrapper getWrapper() { //@gsauere
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getWrapper();
+		} else {
+			if(!this.wrapperLoaded) this.loadWrapper();
+			return super.getWrapper();
+		}
+	}
+	
+	public EList getUserMappings() { //@gsauere
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getUserMappings();
+		} else {
+			if(!this.userMappingsLoaded) this.loadUserMappings();
+			return super.getUserMappings();
+		}
+	}
+
+	public void refresh(int refreshType){
+		if ((IDatabaseObject.IMPACTS & refreshType)  == IDatabaseObject.IMPACTS) {
+			this.impacts.clear();
+			this.impactsLoaded = false;
+		}
+	}
+
+	public ICatalogObject[] getImpacted(){
+		if (!this.impactsLoaded) {
+			this.impacts = this.getImpactedObjects();
+			this.impactsLoaded = true;
+		}
+		ICatalogObject[] objs = new ICatalogObject[impacts.size()];
+		impacts.toArray(objs);
+		return objs;
+	}
+
+	public Collection getStatistics(){
+		return new ArrayList();
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == LUWPackage.LUW_SERVER) {
+			this.getNicknames();
+		}
+		else if(id == LUWPackage.LUW_SERVER__OPTIONS) {
+			this.getOptions();
+		}
+		else if(id == LUWPackage.LUW_SERVER__REMOTE_SERVER) {
+			this.getRemoteServer();
+		}
+		else if(id == LUWPackage.LUW_SERVER__USER_MAPPINGS) { //@gsauere
+			this.getUserMappings();
+		}
+		else if(id == LUWPackage.LUW_SERVER__WRAPPER){ //@gsauere
+            this.getWrapper();
+		}
+		else if(id == LUWPackage.LUW_SERVER__NICKNAMES){ //@gsauere
+            this.getNicknames();
+		}
+		
+		return super.eIsSet(eFeature);
+	}
+	
+	private synchronized void loadNicknames() {
+		if(this.nicknamesLoaded) return;
+		this.nicknamesLoaded = true;		
+		Connection connection = this.getConnection();
+		
+		ConnectionInfo connectionInfo = DatabaseConnectionRegistry.getInstance().getConnectionForDatabase(this.getCatalogDatabase());
+
+		ConnectionFilter filter = connectionInfo.getFilter(this.name + "::" + ConnectionFilter.NICKNAME_FILTER);
+		String filterStr = "";
+		if(filter != null)
+		{
+			filterStr += CatalogLoadUtil.getFilterString(filter.getPredicate(), "TABNAME"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		
+		filterStr =  filterStr.length()>0? (" AND (" + filterStr+")"):""; //$NON-NLS-1$
+		String query = "SELECT TABSCHEMA, TABNAME FROM SYSCAT.TABOPTIONS" //$NON-NLS-1$
+			+ " WHERE OPTION='SERVER' AND CAST(SUBSTR(SETTING, 1, 128) AS VARCHAR(128))='" + this.getName() + "'" //$NON-NLS-1$ //$NON-NLS-2$ 
+			+ filterStr; 
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			Statement s = connection.createStatement();
+			ResultSet r = s.executeQuery(query); 
+			try {
+				while(r.next()) {
+					final String tabSchema = r.getString(1).trim();
+					final String tabName = r.getString(2).trim();
+					getNickName(tabSchema, tabName,this).getServer();
+				}
+			}
+			catch (Exception e) {
+			}
+			r.close();
+			s.close();			
+		}
+		catch(Exception e) {
+		}
+		this.eSetDeliver(deliver);		
+	}
+	
+	//TODO: Added by Geetika: change implementation of LoadRemoteServer to load RelationalRemoteServer
+	
+	private synchronized void loadRemoteServer() {
+		if(this.remoteServerLoaded) return;
+		//RelationalRemoteServer remoteServer = LUWFactory.eINSTANCE.createRelationalRemoteServer();
+		RelationalRemoteServer remoteServer = new LUWCatalogRelationalRemoteServer();
+		remoteServer.setName(this.getName());
+		//TODO: Added by Geetika: add the remote database name to the object remoteServer
+		//Syscat Server options has this information
+		remoteServer.setLUWServer(this);
+		this.remoteServerLoaded = true;
+	}
+	
+	/*private synchronized void loadRemoteServer() {
+		if(this.remoteServerLoaded) return;
+		RemoteCatalogProvider p = getRemoteCatalogProvider();
+		if(p!= null) {
+			this.remoteServer = p.getRemoteServer(this);
+		}
+		this.remoteServerLoaded = true;
+	}*/
+	
+	private synchronized void loadOptions() {
+		if(this.optionsLoaded) return;
+		EList options = super.getOptions();
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);
+		try {
+			String query = "SELECT OPTION, SETTING, REMARKS FROM SYSCAT.SERVEROPTIONS WHERE SERVERNAME='" + LUWUtil.getIdentifier(this.getName()) + "'"; //$NON-NLS-1$ //$NON-NLS-2$
+				
+			Statement s = this.getConnection().createStatement();
+			ResultSet r = s.executeQuery(query);
+			try {
+				while(r.next()) {
+					final String name = r.getString(1);
+					final String value = r.getString(2);
+					final String remarks = r.getString(3);
+					LUWOption option = LUWFactory.eINSTANCE.createLUWOption();
+					option.setName(name);
+					option.setValue(value);
+					option.setDescription(remarks);
+					options.add(option);
+				}
+			}
+			catch (Exception e) {
+			}
+			r.close();
+			s.close();
+		}
+		catch (Exception e) {
+		}
+		this.optionsLoaded = true;
+		this.eSetDeliver(deliver);
+	}
+
+	private Collection getImpactedObjects(){
+		Collection impacts = new ArrayList();
+		Connection connection = this.getConnection();
+		impacts.addAll(LUWCatalogFederatedServer.getImpacteNicknames(connection, this));
+		impacts.addAll(LUWCatalogFederatedServer.getImpacteFederatedProcedure(connection, this));
+		return impacts;
+	}
+	
+	protected static Collection getImpacteNicknames(Connection connection, LUWGenericServer remoteServer) {
+		Collection impacts = new ArrayList();
+		impacts.addAll(remoteServer.getNicknames());
+		return impacts;
+	}
+
+	protected static Collection getImpacteFederatedProcedure(Connection connection, LUWGenericServer remoteServer) {
+		Collection impacts = new ArrayList();
+		try {
+			Statement s = connection.createStatement();
+			String query = "SELECT ROUTINENAME, ROUTINESCHEMA " +
+						" FROM SYSCAT.ROUTINESFEDERATED " +
+			" WHERE ROUTINETYPE='P'" +
+			" AND SERVERNAME='" + LUWUtil.getIdentifier(remoteServer.getName()) + "'" +
+			" FOR FETCH ONLY";
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String routinName = r.getString("ROUTINENAME").trim();
+				final String schemaName = r.getString("ROUTINESCHEMA").trim();
+				FederatedProcedure proc = LUWCatalogFederatedServer.getFederatedProcedure(schemaName, routinName, remoteServer);
+				if (r !=  null) {
+					impacts.add(proc);
+				}
+			}
+			r.close();
+			s.close();
+		}catch(SQLException e) {
+			// e.printStackTrace();
+		}
+		return impacts;
+	}
+
+	private static LUWNickname getNickName(String schema, String table,LUWGenericServer server) {
+		Schema s = getSchema(schema,server);
+		Iterator it = s.getTables().iterator();
+		while(it.hasNext()) {
+			Table t = (Table) it.next();
+			if(t.getName().equals(table)) return (LUWCatalogNickname)t;
+		}
+		
+		LUWNickname nickName = new LUWCatalogNickname();
+		nickName.setName(table);
+		nickName.setSchema(s);
+		
+		return nickName;
+	}
+
+	private static Schema getSchema(String schemaName,LUWGenericServer server) {
+		Database d = server.getLUWDatabase();
+		Iterator it = d.getSchemas().iterator();
+		while(it.hasNext()) {
+			Schema s = (Schema) it.next();
+			if(s.getName().equals(schemaName)) return s;
+		}
+
+		Schema schema = new LUWCatalogSchema();
+		schema.setName(schemaName);
+		schema.setDatabase(d);
+
+		return schema;
+	}	
+	
+	private static FederatedProcedure getFederatedProcedure(String schema, String federatedproc,LUWGenericServer server) {
+		Schema s = LUWCatalogFederatedServer.getSchema(schema,server);
+		Iterator it = s.getRoutines().iterator();
+		while(it.hasNext()) {
+			Routine r = (Routine) it.next();
+			if (r instanceof FederatedProcedure
+				&& r.getName().equals(federatedproc)
+				&& ((FederatedProcedure)r).getRemoteServer().equals(server.getName())) {
+					return (FederatedProcedure)r;
+			}
+		}
+		
+		return null;
+	}
+
+	private synchronized void loadWrapper() { //@gsauere
+		if(this.wrapperLoaded) return ;
+		this.wrapperLoaded = true;		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			for (Iterator it=this.getLUWDatabase().getWrappers().iterator(); it.hasNext(); )
+			{
+				LUWWrapper m_wrapper = (LUWWrapper)it.next();
+				if (m_wrapper.getName().equalsIgnoreCase(wrapperName)) {
+					this.setWrapper(m_wrapper);
+					break;					
+				}
+			}
+		}
+		catch(Exception e) {
+			System.out.println(e.toString());
+		}
+		this.eSetDeliver(deliver);		
+	}
+
+	private synchronized void loadUserMappings() { //@gsauere
+		if(this.userMappingsLoaded) return ;
+		EList userMappings = super.getUserMappings();
+		// clear userMappings before we load to avoid dups
+		userMappings.clear();
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			String query = "SELECT DISTINCT AUTHID FROM SYSCAT.USEROPTIONS WHERE SERVERNAME='" + LUWUtil.getIdentifier(this.getName()) + "'";  //$NON-NLS-1$ //$NON-NLS-2$
+
+			Statement s = this.getConnection().createStatement();
+			ResultSet r = s.executeQuery(query);
+
+			try {
+				while(r.next()) {
+					final String localAuthId = r.getString("AUTHID"); //$NON-NLS-1$
+					LUWCatalogUserMapping userMapping = new LUWCatalogUserMapping();
+					userMapping.setLocalAuthId(localAuthId);
+					userMapping.setName(localAuthId);
+					userMappings.add(userMapping);
+				}
+			}
+			catch(Exception e) {
+			}
+			r.close();
+			s.close();
+		}
+		catch(Exception e) {
+		}
+		userMappingsLoaded = true;
+		this.eSetDeliver(deliver);		
+	}
+	
+	/**
+	 * @gsauere
+	 * @return Returns the wrapperName.
+	 */
+	public String getWrapperName() {
+		return wrapperName;
+	}
+	/**
+	 * @gsauere
+	 * @param wrapperName The wrapperName to set.
+	 */
+	public void setWrapperName(String wrapperName) {
+		this.wrapperName = wrapperName;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogForeignKey.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogForeignKey.java
new file mode 100644
index 0000000..82e93e3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogForeignKey.java
@@ -0,0 +1,356 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.Statement;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.sql.constraints.Constraint;
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.SQLConstraintsPackage;
+import org.eclipse.datatools.modelbase.sql.constraints.UniqueConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.impl.ForeignKeyImpl;
+import org.eclipse.datatools.modelbase.sql.datatypes.CharacterStringDataType;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.ReferentialActionType;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWUtil;
+
+public class LUWCatalogForeignKey extends ForeignKeyImpl implements ICatalogObject {
+	public void refresh() {
+		if(this.memberLoaded) {
+			this.members.clear();
+			this.memberLoaded = false;
+		}
+		
+		this.uniqueConstraintLoaded = false;
+		
+		if (this.dependencyLoaded){
+			this.dependencies.clear();
+			this.dependencyLoaded = false;
+		}
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public EList getMembers() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getMembers();
+		} else {
+			if(!this.memberLoaded) this.loadMembers();
+			return this.members;
+		}
+	}
+
+	public UniqueConstraint getUniqueConstraint() {
+		if(!this.uniqueConstraintLoaded) this.loadUniqueConstraint();
+		return this.uniqueConstraint;
+	}
+
+	public ReferentialActionType getOnDelete() {
+		if(!this.uniqueConstraintLoaded) this.loadUniqueConstraint();
+		return this.onDelete;
+	}
+	
+	public ReferentialActionType getOnUpdate() {
+		if(!this.uniqueConstraintLoaded) this.loadUniqueConstraint();
+		return this.onUpdate;
+	}
+		
+	public EList getDependencies() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getDependencies();
+		} else {
+			if(!this.dependencyLoaded) this.loadDependencies();
+			return this.dependencies;
+		}
+	}
+	
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == SQLConstraintsPackage.FOREIGN_KEY__MEMBERS) {
+			this.getMembers();
+		}
+		else if(id == SQLConstraintsPackage.FOREIGN_KEY__ON_DELETE) {
+			this.getOnDelete();
+		}
+		else if(id == SQLConstraintsPackage.FOREIGN_KEY__ON_UPDATE) {
+			this.getOnUpdate();
+		}
+		else if(id == SQLConstraintsPackage.FOREIGN_KEY__UNIQUE_CONSTRAINT) {
+			this.getUniqueConstraint();
+		}
+		else if(id == SQLConstraintsPackage.FOREIGN_KEY__DEPENDENCIES) {
+			this.getDependencies();
+		}
+		
+		return super.eIsSet(eFeature);
+	}
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+
+	public Database getCatalogDatabase() {
+		return this.getBaseTable().getSchema().getDatabase();
+	}
+
+	private synchronized void loadMembers() {
+		if(this.memberLoaded) return;
+		this.memberLoaded = true;
+
+		EList memberList = super.getMembers();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			Connection connection = this.getConnection();
+			if(connection == null) return;
+
+			Statement s = connection.createStatement();
+			ResultSet r = s.executeQuery("SELECT COLNAME FROM SYSCAT.KEYCOLUSE" + this.getWhereClause() + "  ORDER BY COLSEQ"); //$NON-NLS-1$ //$NON-NLS-2$
+			while(r.next()) {
+				final String colName = r.getString(1);
+				memberList.add(this.getColumn(colName));
+			}
+			
+			r.close();
+			s.close();
+			setAsIdentifyingRelatinship(this, this.isIdentifyingRelationship(memberList));
+		
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		
+		this.eSetDeliver(deliver);		
+	}
+	public static void setAsIdentifyingRelatinship(ForeignKey fk,boolean identifying){
+		EAnnotation eAnnotation = fk.addEAnnotation(RDBCorePlugin.FK_MODELING_RELATIONSHIP);
+		fk.addEAnnotationDetail(eAnnotation,RDBCorePlugin.FK_IS_IDENTIFYING_RELATIONSHIP,new Boolean(identifying).toString());
+
+		fk.addEAnnotationDetail(eAnnotation, RDBCorePlugin.FK_CHILD_MULTIPLICITY, RDBCorePlugin.MANY);
+		fk.addEAnnotationDetail(eAnnotation, RDBCorePlugin.FK_CHILD_ROLE_NAME, new String ());
+		fk.addEAnnotationDetail(eAnnotation, RDBCorePlugin.FK_PARENT_MULTIPLICITY, (fk.getMembers().size() > 0) ? RDBCorePlugin.ZERO_TO_ONE : RDBCorePlugin.ONE);
+		fk.addEAnnotationDetail(eAnnotation, RDBCorePlugin.FK_PARENT_ROLE_NAME, new String ());
+	}
+	
+	private synchronized void loadUniqueConstraint() {
+		if(this.uniqueConstraintLoaded) return;
+		this.uniqueConstraintLoaded = true;
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			Connection connection = this.getConnection();
+			if(connection == null) return;
+
+			Statement s = connection.createStatement();
+			ResultSet r = s.executeQuery("SELECT REFKEYNAME, REFTABSCHEMA, REFTABNAME, DELETERULE, UPDATERULE FROM SYSCAT.REFERENCES" + this.getWhereClause()); //$NON-NLS-1$
+			while (r.next()) {
+				final String refKeyName   = r.getString(1);
+				final String refTabSchema = r.getString(2).trim();
+				final String refTabName   = r.getString(3);
+				this.setParentConstraint(refTabSchema, refTabName, refKeyName);
+				final String onDeleteStr = r.getString(4);
+				final String onUpdateStr = r.getString(5);
+				if(onDeleteStr.equals("A")) //$NON-NLS-1$
+				{
+					this.onDelete = ReferentialActionType.NO_ACTION_LITERAL;
+				}
+				else if(onDeleteStr.equals("C")) //$NON-NLS-1$
+				{
+					this.onDelete = ReferentialActionType.CASCADE_LITERAL;
+				}
+				else if(onDeleteStr.equals("N")) //$NON-NLS-1$
+				{
+					this.onDelete = ReferentialActionType.SET_NULL_LITERAL;
+				}
+				else if(onDeleteStr.equals("R")) //$NON-NLS-1$
+				{
+					this.onDelete = ReferentialActionType.RESTRICT_LITERAL;
+				}
+				if(onUpdateStr.equals("A")) //$NON-NLS-1$
+				{
+					this.onUpdate = ReferentialActionType.NO_ACTION_LITERAL;
+				}
+				else if(onUpdateStr.equals("R")) //$NON-NLS-1$
+				{
+					this.onUpdate = ReferentialActionType.RESTRICT_LITERAL;
+				}
+			}
+			r.close();
+			s.close();
+			loadMembers();
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		
+		this.eSetDeliver(deliver);		
+	}
+
+	private synchronized void loadDependencies() {
+		if(this.dependencyLoaded) return;
+		this.dependencyLoaded = true;
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			LUWCatalogPrimaryKey.loadDependencies(this.getConnection(), super.getDependencies(), this);
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);		
+	}
+	
+	private String getWhereClause() {
+		Table table = this.getBaseTable();
+		return " WHERE CONSTNAME='" + LUWUtil.getIdentifier(this.getName()) + "' AND TABSCHEMA='" + LUWUtil.getIdentifier(this.getBaseTable().getSchema().getName())  //$NON-NLS-1$ //$NON-NLS-2$
+				+ "' AND TABNAME='" + LUWUtil.getIdentifier(this.getBaseTable().getName()) + "'"; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+	private Column getColumn(String columnName) {
+		BaseTable table = this.getBaseTable();
+		if (table instanceof LUWCatalogTable) {
+			Column c = ((LUWCatalogTable)table).getColumn(columnName);
+			if (c!= null) return c;
+		} 
+		
+		Iterator it = table.getColumns().iterator();
+		while(it.hasNext()) {
+			Column c = (Column) it.next();
+			if(c.getName().equals(columnName)) return c;
+		}
+		Column column = new LUWCatalogColumn();
+		column.setName(columnName);
+		column.setTable(table);
+		Database database = table.getSchema().getDatabase();
+		final DatabaseDefinition def = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+		CharacterStringDataType dataType = (CharacterStringDataType) def.getPredefinedDataType("Char"); //$NON-NLS-1$
+		dataType.setLength(5);
+		column.setContainedType(dataType);
+
+		return column;
+	}
+	
+	private Schema getSchema(String schemaName) {
+		Schema s = this.getBaseTable().getSchema();
+		if(s.getName().equals(schemaName)) return s;
+		Database d = s.getDatabase();
+
+		if (d instanceof LUWCatalogDatabase){
+			s = ((LUWCatalogDatabase)d).getSchema(schemaName);
+			if (s != null) return s;
+		} 
+		Iterator it = d.getSchemas().iterator();
+		while(it.hasNext()) {
+			s = (Schema) it.next();
+			if(s.getName().equals(schemaName)) return s;			
+		}
+		Schema schema = new LUWCatalogSchema();
+		schema.setName(schemaName);
+		schema.setDatabase(d);
+
+		if (d instanceof LUWCatalogDatabase){
+			((LUWCatalogDatabase)d).cacheSchema(schema);
+		}		
+		return schema;
+	}
+	
+	private Table getTable(String schemaName, String tableName) {
+		Schema schema = this.getSchema(schemaName);
+
+		if(schema instanceof LUWCatalogSchema){
+			Table t = ((LUWCatalogSchema)schema).getTable(schemaName,tableName);
+			if (t != null) return t;
+		} 
+		
+		Iterator it = schema.getTables().iterator();
+		while(it.hasNext()) {
+			Table table = (Table) it.next();
+			if(table.getName().equals(tableName)) return table;			
+		}
+
+		Table table = new LUWCatalogTable();
+		table.setName(tableName);
+		table.setSchema(schema);
+
+		return table;
+	}
+	
+	private void setParentConstraint(String schemaName, String tableName, String constraintName) {
+		BaseTable table = (BaseTable) this.getTable(schemaName, tableName);
+		this.setReferencedTable(table);
+		Iterator it = table.getConstraints().iterator();
+		while(it.hasNext()) {
+			Constraint constraint = (Constraint) it.next();
+			if(constraint.getName().equals(constraintName)) {
+				this.setUniqueConstraint((UniqueConstraint) constraint);
+				return;
+			}
+		}
+		
+		Iterator iter = table.getIndex().iterator();
+		while(iter.hasNext()) {
+			Index index = (Index) iter.next();
+			if(index.getName().equals(constraintName)) {
+				this.setUniqueIndex((Index) index);
+				return;
+			}
+		}
+
+		UniqueConstraint uniqueConstrain = new LUWCatalogUniqueConstraint();
+		uniqueConstrain.setName(constraintName);
+		uniqueConstrain.setBaseTable(table);
+		this.setUniqueConstraint(uniqueConstrain);
+
+	}
+		
+	private boolean isIdentifyingRelationship(EList memberList){
+		boolean isIdentifying= true;
+		Iterator it = memberList.iterator();
+		while(it.hasNext()) {
+			Column column = (Column) it.next();
+			if (!column.isPartOfPrimaryKey()) {
+				isIdentifying = false;
+			}
+		}
+		return isIdentifying;
+	}
+	
+	private boolean memberLoaded = false;
+	private boolean uniqueConstraintLoaded = false;
+	private boolean dependencyLoaded = false;
+		
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogGlobalVariable.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogGlobalVariable.java
new file mode 100644
index 0000000..42f4302
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogGlobalVariable.java
@@ -0,0 +1,171 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.AuthorizationIdentifier;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Privilege;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWUtil;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.DatabaseREProvider;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGlobalVariable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGlobalVariableImpl;
+import org.eclipse.datatools.enablement.ibm.util.ModelHelper;
+
+public class LUWCatalogGlobalVariable extends LUWGlobalVariableImpl implements ICatalogObject{
+
+	public void refresh() {
+		this.privilegeLoaded = false;
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		return ((ICatalogObject) this.getCatalogDatabase()).getConnection();
+	}
+
+	public Database getCatalogDatabase() {
+		return this.getSchema().getDatabase();
+	}
+	
+	public EList getPrivileges() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getPrivileges();
+		} else {
+			if (!this.privilegeLoaded) this.loadPrivileges();
+			return this.privileges;
+		}
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == LUWPackage.LUW_GLOBAL_VARIABLE__PRIVILEGES) {
+			this.getPrivileges();
+		}
+		return super.eIsSet(eFeature);
+	}
+	
+	private synchronized void loadPrivileges() {
+		if(this.privilegeLoaded) return;
+		this.privilegeLoaded = true;
+
+		EList privileges = super.getPrivileges();
+		for (Iterator iter= privileges.iterator(); iter.hasNext();){
+			Privilege privilege = (Privilege) iter.next();
+			privilege.setGrantor(null);
+			privilege.setGrantee(null);
+		}
+		
+		privileges.clear();
+	
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogGlobalVariable.loadPrivileges(this.getConnection(),privileges, this,"");
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+	
+	protected static void loadPrivileges(Connection connection, EList privilegeList,LUWGlobalVariable variable, String granteeFilter) throws SQLException {
+		final Schema schema = variable.getSchema();
+		final Database database = ModelHelper.getDatabase(schema);
+
+		int options = ((LUWCatalogDatabase)database).getLoadOptions();
+		if ((options & DatabaseREProvider.EXCLUDE_ACCESS_CONTROL)== DatabaseREProvider.EXCLUDE_ACCESS_CONTROL) return;
+
+		Statement s = connection.createStatement();
+		String query = "SELECT GRANTOR,GRANTORTYPE,GRANTEE,GRANTEETYPE" +
+					",READAUTH,WRITEAUTH" +
+					" FROM SYSCAT.VARIABLEAUTH" + 
+					" WHERE VARSCHEMA='" + LUWUtil.getIdentifier(schema.getName()) + "'" +
+					" AND VARNAME='" + LUWUtil.getIdentifier(variable.getName()) + "'" ;
+		if (granteeFilter != null && !"".equals(granteeFilter)) query += " AND " + granteeFilter;
+
+		ResultSet r = s.executeQuery(query);
+		try {
+			while(r.next()) {
+				final String grantorId = r.getString("GRANTOR").trim();
+				AuthorizationIdentifier grantor = LUWCatalogDatabase.getAuthorizationId(database, grantorId,null);
+				final String granteeId = r.getString("GRANTEE").trim();
+				AuthorizationIdentifier grantee = null;
+				final String granteeType = r.getString("GRANTEETYPE");
+				if ("G".equals(granteeType)) {
+					grantee = LUWCatalogDatabase.getAuthorizationId(database, granteeId, "G");
+				} else if ("R".equals(granteeType)) {
+					grantee = LUWCatalogDatabase.getAuthorizationId(database, granteeId, "R");
+				} else {
+					grantee = LUWCatalogDatabase.getAuthorizationId(database, granteeId, "U");
+				}
+
+				final String grantorType = r.getString("GRANTORTYPE");
+				boolean isSystemGranted = "S".equals(grantorType)? true:false;
+
+				final String readAuth = r.getString("READAUTH");
+				if (readAuth.equals("N")) {
+				} else {
+					LUWCatalogPrivilege privilege = new LUWCatalogPrivilege();
+					privilege.setAction(LUWCatalogConstant.PRIVILEGE_READ);
+					if (readAuth.equals("G")) {
+						privilege.setGrantable(true);
+					}
+					privilegeList.add(privilege);
+					privilege.setGrantor(grantor);
+					privilege.setGrantee(grantee);
+
+					LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+
+				}
+
+				final String writeAuth = r.getString("WRITEAUTH");
+				if (writeAuth.equals("N")) {
+				} else {
+					LUWCatalogPrivilege privilege = new LUWCatalogPrivilege();
+					privilege.setAction(LUWCatalogConstant.PRIVILEGE_WRITE);
+					if (writeAuth.equals("G")) {
+						privilege.setGrantable(true);
+					}
+					privilegeList.add(privilege);
+					privilege.setGrantor(grantor);
+					privilege.setGrantee(grantee);
+
+					LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+				}
+
+			}
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		r.close();
+		s.close();
+	}
+
+	private boolean privilegeLoaded = false;
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogGroup.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogGroup.java
new file mode 100644
index 0000000..6163534
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogGroup.java
@@ -0,0 +1,116 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.SQLAccessControlPackage;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.impl.GroupImpl;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.datatools.enablement.ibm.catalog.ICatalogAuthorizationIdentifier;
+
+public class LUWCatalogGroup extends GroupImpl implements ICatalogObject,ICatalogAuthorizationIdentifier {
+
+	public void refresh() {
+		
+		if (this.receivedPrivilegesLoaded) {
+			this.receivedPrivilegesLoaded = false;
+			this.getReceivedPrivilege().clear();
+		}
+		if (this.receivedRoleAuthorizationLoaded) {
+			this.receivedRoleAuthorization.clear();
+			this.receivedRoleAuthorizationLoaded = false;
+		}
+		this.getGrantedPrivilege().clear();
+		
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database database = this.getDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+	
+	public Database getCatalogDatabase() {
+		return this.getDatabase();
+	}
+
+	/*
+	public EList getReceivedPrivilege(){
+		if (!this.receivedPrivilegesLoaded) this.loadReceivedPrivilege();
+		return this.receivedPrivilege;
+	}
+	*/
+	public EList getReceivedRoleAuthorization(){
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getReceivedRoleAuthorization();
+		} else {
+			if (!this.receivedRoleAuthorizationLoaded) this.loadReceivedRoleAuthorization();
+			return this.receivedRoleAuthorization;
+		}
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == SQLAccessControlPackage.GROUP__RECEIVED_PRIVILEGE) {
+			this.getReceivedPrivilege();
+		} else if (id == SQLAccessControlPackage.GROUP__RECEIVED_ROLE_AUTHORIZATION) {
+			this.getReceivedRoleAuthorization();
+		}
+		return super.eIsSet(eFeature);
+	}
+
+	private synchronized void loadReceivedPrivilege() {
+		if(this.receivedPrivilegesLoaded) return;
+		this.receivedPrivilegesLoaded = true;
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogUser.loadReceivedPrivilege(this.getConnection(),super.getReceivedPrivilege(), this,"G");
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+	
+	private synchronized void loadReceivedRoleAuthorization() {
+		if(this.receivedRoleAuthorizationLoaded) return;
+		this.receivedRoleAuthorizationLoaded = true;
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+
+		LUWCatalogUser.loadReceivedRoleAuthorization(this.getConnection(),super.getReceivedRoleAuthorization(), this);
+
+		this.eSetDeliver(deliver);
+		
+	}
+	
+	//API for PB
+	public EList getCatalogReceivedPrivileges(){
+		this.loadReceivedPrivilege();
+		return this.receivedPrivilege;
+	}
+
+
+	private boolean receivedPrivilegesLoaded = false;
+	private boolean receivedRoleAuthorizationLoaded = false;
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogIndex.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogIndex.java
new file mode 100644
index 0000000..2c5326a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogIndex.java
@@ -0,0 +1,928 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.math.BigInteger;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.enablement.ibm.catalog.IDatabaseObject;
+import org.eclipse.datatools.enablement.ibm.catalog.util.CatalogStatistics;
+//bgp import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.CatalogCache;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.DatabaseREProvider;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWUtil;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWCatalogMessages;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWIndexImpl;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Package;
+import org.eclipse.datatools.enablement.ibm.util.ModelHelper;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.AuthorizationIdentifier;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Privilege;
+import org.eclipse.datatools.modelbase.sql.constraints.IncrementType;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.IndexMember;
+import org.eclipse.datatools.modelbase.sql.constraints.SQLConstraintsPackage;
+import org.eclipse.datatools.modelbase.sql.constraints.TableConstraint;
+import org.eclipse.datatools.modelbase.sql.datatypes.CharacterStringDataType;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWCatalogIndex extends LUWIndexImpl implements ICatalogObject,IDatabaseObject {
+	public void refresh() {
+		if (this.memberLoaded) {
+			this.members.clear();
+			this.memberLoaded = false;
+		}
+		this.privilegeLoaded = false;
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+	
+	public Database getCatalogDatabase() {
+		return this.getTable().getSchema().getDatabase();		
+	}
+
+
+	public void refresh(int refreshType){
+		if ((IDatabaseObject.IMPACTS & refreshType)  == IDatabaseObject.IMPACTS) {
+			this.impacts.clear();
+			this.impactsLoaded = false;
+		}
+		if ((IDatabaseObject.STATISTICS & refreshType)  == IDatabaseObject.STATISTICS) {
+			this.statistics.clear();
+			this.statisticsLoaded = false;
+		}
+	}
+
+	public EList getMembers() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getMembers();
+		} else {
+			if(!this.memberLoaded) this.loadMembers();
+			return this.members;
+		}
+	}
+
+	public EList getIncludedMembers() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getIncludedMembers();
+		} else {
+			if(!this.memberLoaded) this.loadMembers();
+			return this.includedMembers;
+		}
+	}
+	
+	public EList getPrivileges() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getPrivileges();
+		} else {
+			if (!this.privilegeLoaded) this.loadPrivileges();
+			return this.privileges;
+		}
+	}
+
+	public ICatalogObject[] getImpacted(){
+		if (!this.impactsLoaded) {
+			this.impacts = this.getImpactedObjects();
+			this.impactsLoaded = true;
+		}
+		ICatalogObject[] objs = new ICatalogObject[impacts.size()];
+		impacts.toArray(objs);
+		return objs;
+	}
+	
+	public Collection getStatistics(){
+		if (!this.statisticsLoaded) {
+			this.statistics = LUWCatalogIndex.getStatistics(this.getConnection(), this);
+			this.statisticsLoaded = true;
+		}
+		return this.statistics;
+	}
+	
+	public LUWTableSpace getTablespace() {
+		if (!this.tablespaceLoaded)
+			loadTablespace();
+		return this.tablespace;
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == DB2ModelPackage.DB2_INDEX__MEMBERS) {
+			this.getMembers();
+		}
+		else if(id == DB2ModelPackage.DB2_INDEX__INCLUDED_MEMBERS) {
+			this.getIncludedMembers();
+		}
+		else if(id == DB2ModelPackage.DB2_INDEX__PRIVILEGES) {
+			this.getPrivileges();
+		}
+		return super.eIsSet(eFeature);
+	}
+	
+	private void loadMembers() {
+		if(this.memberLoaded) return;
+		this.memberLoaded = true;
+		EList memberList = super.getMembers();
+		EList includedMemberList = super.getIncludedMembers();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			LUWCatalogIndex.loadMembers(this.getConnection(),memberList,includedMemberList, this);
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		this.eSetDeliver(deliver);
+	}
+
+	private synchronized void loadPrivileges() {
+		if(this.privilegeLoaded) return;
+		this.privilegeLoaded = true;
+
+		EList privileges = super.getPrivileges();
+		for (Iterator iter= privileges.iterator(); iter.hasNext();){
+			Privilege privilege = (Privilege) iter.next();
+			privilege.setGrantor(null);
+			privilege.setGrantee(null);
+		}
+		
+		privileges.clear();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogIndex.loadPrivileges(this.getConnection(),privileges, this,"");
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	private synchronized void loadTablespace() {
+		if( this.tablespaceLoaded ) {
+			return;
+		}
+
+		this.tablespaceLoaded = true;
+
+		// Only supported for LUW 9.x and above
+		try
+		{
+			String version = getSchema().getDatabase().getVersion().substring( 1 );
+
+			if ( Float.parseFloat( version ) < 9.1 )
+			{
+				return;
+			}
+		}
+		catch ( Exception e )
+		{
+			return;
+		}
+
+		EList tablespaces = ((LUWDatabase)getCatalogDatabase()).getTablespaces();
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogIndex.loadTablespace( getConnection(), tablespaces, this );
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		this.eSetDeliver(deliver);
+	}
+
+	/**
+	 * Load the members of an index
+	 * 
+	 * @param connection
+	 * @param members
+	 * @param includedMembers
+	 * @param index
+	 * @throws SQLException
+	 */
+	protected static void loadMembers(Connection connection, EList members, EList includedMembers,Index index)throws SQLException  {
+		final Schema schema = index.getSchema();
+		final Database database = ModelHelper.getDatabase(schema);
+
+//bgp		CatalogCache cache = CatalogCache.getCache( database );
+		String propkey = schema.getName() + "." + index.getName(); //$NON-NLS-1$
+		
+//<bgp		// TODO N.B. With very large databases, this uses excessive memory
+//		// we need a way to detect that and throttle the cache
+//		boolean caching = false && cache.isBatchLoading();
+//		
+//		if ( caching ) {
+//			if ( cache.isPropertyCacheLoaded( PROP_INDEX_MEMBERS )) {
+//				loadMembersFromCache( cache, index, propkey, members, includedMembers );
+//				return;
+//			}
+//			
+//			cache.setPropertyCacheLoaded( PROP_INDEX_MEMBERS );
+//bgp>		}
+
+		String query = "SELECT COLNAME, COLORDER, INDSCHEMA, INDNAME" //$NON-NLS-1$
+				+ " FROM SYSCAT.INDEXCOLUSE"; //$NON-NLS-1$
+
+//bgp		if ( !caching ) {
+			query += " WHERE INDSCHEMA='" + LUWUtil.getIdentifier(index.getSchema().getName()) + "'" //$NON-NLS-1$ //$NON-NLS-2$
+						+ " AND INDNAME='" + LUWUtil.getIdentifier(index.getName()) + "'"; //$NON-NLS-1$ //$NON-NLS-2$
+//bgp		}
+		
+		query += " ORDER BY"; //$NON-NLS-1$
+		
+//<bgp		if ( caching ) {
+//			query += " INDSCHEMA, INDNAME,"; //$NON-NLS-1$
+//bgp>		}
+
+		query += " COLSEQ"; //$NON-NLS-1$
+		
+		Statement s = connection.createStatement();
+		ResultSet r = s.executeQuery(query);
+		
+		MembersInfo info = null;
+
+		try {
+			while(r.next()) {
+				final String schemaName = r.getString( "INDSCHEMA" ).trim();  //$NON-NLS-1$
+				final String indexName = r.getString( "INDNAME" ).trim();  //$NON-NLS-1$
+
+				if ( info == null
+						|| !info.idxSchemaName.equals( schemaName )
+						|| !info.indexName.equals( indexName ) ) {
+					info = new MembersInfo();
+					info.idxSchemaName = schemaName;
+					info.indexName = indexName;
+
+//<bgp					if ( caching ) {
+//						cache.cacheProperty( PROP_INDEX_MEMBERS, info.getKey(), info );
+//bgp>					}
+				}
+
+				final String colName = r.getString(1); 
+				final String order = r.getString(2);
+
+				info.addMember( colName, order );
+			}
+
+//bgp			if ( !caching && info != null ) {
+//bgp            info.setMembers( cache, index, members, includedMembers );
+	          if (info != null ) {
+				info.setMembers(index, members, includedMembers );
+			}
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		r.close();
+		s.close();
+		
+//<bgp		if ( caching ) {
+//			loadMembersFromCache( cache, index, propkey, members, includedMembers );
+//bgp>		}
+	}
+
+	/** Object for caching information about index members */
+	private static class MembersInfo {
+		/** Object for caching information about one  index member */
+		private static class MemberInfo {
+			/** The column name */
+			String colName;
+			/** The sort order */
+			String order;
+
+			/**
+			 * Constructor
+			 * 
+			 * @param colName
+			 * @param order
+			 */
+			public MemberInfo( String colName, String order ) {
+				this.colName = colName;
+				this.order = order;
+			}
+		}
+
+		/** The schema containing the index */
+		String idxSchemaName;
+		/** The index we are caching members of */
+		String indexName;
+		/** Index members */
+		List<MemberInfo> members = new ArrayList<MemberInfo>();
+
+		/**
+		 * Get the key for cache lookup
+		 * 
+		 * @return The key
+		 */
+		public String getKey() {
+			return this.idxSchemaName + "." + this.indexName; //$NON-NLS-1$
+		}
+
+		/**
+		 * Add a member to the index
+		 * 
+		 * @param colName
+		 * @param order
+		 */
+		public void addMember( String colName, String order ) {
+			this.members.add( new MemberInfo( colName, order ) );
+		}
+
+		/**
+		 * Update an index
+		 * 
+		 * @param index
+		 * @param members
+		 * @param includedMembers
+		 */
+		public void setMembers(Index index,	List<IndexMember> members, List<IndexMember> includedMembers ) {
+			Database database = index.getSchema().getDatabase();
+
+			final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+			final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+
+			Object[] memberList = members.toArray();
+			members.clear();
+			Object[] includedMemberList = includedMembers.toArray();
+			includedMembers.clear();
+
+			for ( MemberInfo minfo : this.members ) {
+				IndexMember member = LUWCatalogIndex.findIndexMember( memberList, minfo.colName );
+
+				if ( member == null ) {
+					member = LUWCatalogIndex.findIndexMember( includedMemberList, minfo.colName );
+
+					if ( member == null ) {
+						member = (IndexMember)factory.create(
+								SQLConstraintsPackage.eINSTANCE.getIndexMember() ); 
+						Column col = LUWCatalogIndex.getColumn( index, minfo.colName );
+						member.setColumn( col );
+					}
+				}
+				
+				if ( minfo.order.equals( "A" ) ) { //$NON-NLS-1$
+					member.setIncrementType( IncrementType.ASC_LITERAL );
+					members.add(member);
+				}
+				else if ( minfo.order.equals( "D" ) ) { //$NON-NLS-1$
+					member.setIncrementType( IncrementType.DESC_LITERAL );
+					members.add(member);
+				}
+				else if ( minfo.order.equals( "I" ) ) { //$NON-NLS-1$
+					includedMembers.add( member );
+				}
+			}
+		}
+	}
+
+//<bgp	/**
+//	 * Set an index members from the cache
+//	 * 
+//	 * @param cache
+//	 * @param index
+//	 * @param key
+//	 * @param members
+//	 * @param includedMembers
+//	 */
+//	private static void loadMembersFromCache( CatalogCache cache, Index index, String key,
+//			List<IndexMember> members, List<IndexMember> includedMembers ) {
+//		MembersInfo info = (MembersInfo)cache.getCachedProperty( PROP_INDEX_MEMBERS, key );
+//		
+//		if ( info != null ) {
+//			info.setMembers( cache, index, members, includedMembers );
+//		}
+//bgp>	}
+	
+	public static void loadPrivileges(Connection connection, EList privilegeList,Index index,String granteeFilter) throws SQLException {
+		final Schema schema = index.getSchema();
+		final Database database = ModelHelper.getDatabase(schema);
+
+		int options = ((LUWCatalogDatabase)database).getLoadOptions();
+		if ((options & DatabaseREProvider.EXCLUDE_ACCESS_CONTROL)== DatabaseREProvider.EXCLUDE_ACCESS_CONTROL) return;
+
+		Statement s = connection.createStatement();
+		String query = "SELECT GRANTOR,GRANTEE,GRANTEETYPE" +
+					",CONTROLAUTH" +
+					" FROM SYSCAT.INDEXAUTH" + 
+					" WHERE INDSCHEMA='" + LUWUtil.getIdentifier(schema.getName()) + "'" +
+					" AND INDNAME='" + LUWUtil.getIdentifier(index.getName()) + "'" ;
+		if (granteeFilter != null && !"".equals(granteeFilter)) query += " AND " + granteeFilter;
+
+		ResultSet r = s.executeQuery(query);
+		try {
+			String userName = connection.getMetaData().getUserName();
+			while(r.next()) {
+				final String grantorId = r.getString("GRANTOR").trim();
+				AuthorizationIdentifier grantor = LUWCatalogDatabase.getAuthorizationId(database, grantorId,null);
+				final String granteeId = r.getString("GRANTEE").trim();
+				AuthorizationIdentifier grantee = null;
+				final String granteeType = r.getString("GRANTEETYPE");
+				if ("G".equals(granteeType)) {
+					grantee = LUWCatalogDatabase.getAuthorizationId(database, granteeId, "G");
+				} else if ("R".equals(granteeType)) {
+					grantee = LUWCatalogDatabase.getAuthorizationId(database, granteeId, "R");
+				} else {
+					grantee = LUWCatalogDatabase.getAuthorizationId(database, granteeId, "U");
+				}
+				
+				boolean isSystemGranted = granteeId.equalsIgnoreCase(userName);
+				final String alterAuth = r.getString("CONTROLAUTH");
+				if (alterAuth.equals("N")) {
+				} else {
+					LUWCatalogPrivilege privilege = new LUWCatalogPrivilege();
+					privilege.setAction(LUWCatalogConstant.PRIVILEGE_CONTROL);
+					privilegeList.add(privilege);
+					privilege.setGrantor(grantor);
+					privilege.setGrantee(grantee);
+					LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+				}
+
+			}
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		r.close();
+		s.close();
+	}
+	
+	public static void loadTablespace(Connection connection, EList tablespaceList, Index index) throws SQLException {
+		final LUWIndex luwindex = (LUWIndex)index;
+		Statement s = connection.createStatement();
+		String query = "SELECT T.TBSPACE" + //$NON-NLS-1$
+					" FROM SYSIBM.SYSINDEXES I, SYSIBM.SYSTABLESPACES T" +  //$NON-NLS-1$
+					" WHERE I.NAME='" //$NON-NLS-1$
+					+ LUWUtil.getIdentifier(luwindex.getName())
+					+ "' AND I.CREATOR='" //$NON-NLS-1$
+					+ luwindex.getTable().getSchema().getName().trim()
+					+ "' AND I.TBSPACEID=T.TBSPACEID"; //$NON-NLS-1$
+		ResultSet r = s.executeQuery(query);
+
+		try {
+			while (r.next())
+			{
+				final String tbspaceName = r.getString("TBSPACE"); //$NON-NLS-1$
+				
+				for (Iterator iter = tablespaceList.iterator(); iter.hasNext(); ) {
+					LUWTableSpace tbspace = (LUWTableSpace)iter.next();
+					
+					if (tbspace.getName().equals( tbspaceName ))
+					{
+						luwindex.setTablespace( tbspace );
+						tbspace.getIndexes().add( luwindex );
+						break;
+					}
+				}
+			}
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		r.close();
+		s.close();
+	}
+
+	private DatabaseDefinition getDatabaseDefinition() {
+		Database d = this.getSchema().getDatabase();
+		return RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(d);
+	}
+	
+	private static Column getColumn(Index index, String columnName) {
+		Table table = index.getTable();
+		if (table instanceof LUWCatalogTable) {
+			Column c = ((LUWCatalogTable)table).getColumn(columnName);
+			if (c!= null) return c;
+		} 
+
+		Iterator it = table.getColumns().iterator();
+		while(it.hasNext()) {
+			Column c = (Column) it.next();
+			if(c.getName().equals(columnName)) return c;
+		}
+	
+		Column column = new LUWCatalogColumn();
+		column.setName(columnName);
+		column.setTable(table);
+		Database database = table.getSchema().getDatabase();
+		final DatabaseDefinition def = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+		CharacterStringDataType dataType = (CharacterStringDataType) def.getPredefinedDataType("Char"); //$NON-NLS-1$
+		dataType.setLength(5);
+		column.setContainedType(dataType);
+
+		return column;
+		
+	}
+
+	private static IndexMember findIndexMember(Object[] list, String colName){
+		IndexMember member = null;
+		for (int i = 0; i < list.length; i++){
+			Column column = ((IndexMember)list[i]).getColumn();
+			if (column.getName().equals(colName)){
+				member = (IndexMember)list[i];
+				break;
+			}
+		}
+		return member;
+	}
+	
+	private Collection getImpactedObjects(){
+		Collection impacts = new ArrayList();
+		Connection connection = this.getConnection();
+		impacts.addAll(LUWCatalogIndex.getImpactedTables(connection, this));
+		impacts.addAll(LUWCatalogIndex.getImpactedConstraints(connection, this));
+		impacts.addAll(LUWCatalogIndex.getImpactedPackages(connection, this));
+
+		return impacts;
+	}
+	
+	
+	protected static Collection getImpactedTables(Connection connection, Index index) {
+		Collection impacts = new ArrayList();
+		try {
+			Statement s = connection.createStatement();
+			String query = "SELECT TABNAME,TABSCHEMA" +
+					" FROM SYSCAT.TABDEP" +
+					" where BTYPE='I'" +
+					" AND BNAME='" + LUWUtil.getIdentifier(index.getName())+"'" +
+					" AND BSCHEMA ='" + LUWUtil.getIdentifier(index.getSchema().getName()) + "'" +
+					" FOR FETCH ONLY";
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String tabName = r.getString("TABNAME").trim();
+				final String schemaName = r.getString("TABSCHEMA").trim();
+				Table t = LUWCatalogView.getTable(index.getTable(), schemaName, tabName);
+				if (t !=  null) {
+					impacts.add(t);
+				}
+			}
+			r.close();
+			s.close();
+		}catch(SQLException e) {
+			e.printStackTrace();
+		}
+		return impacts;
+	}
+
+	protected static Collection getImpactedConstraints(Connection connection, Index index) {
+		Collection impacts = new ArrayList();
+		try {
+			Statement s = connection.createStatement();
+			String query = "SELECT CONSTNAME,TABNAME,TABSCHEMA" +
+					" FROM SYSCAT.CONSTDEP" +
+					" WHERE BTYPE='I'" +
+					" AND BNAME='" + LUWUtil.getIdentifier(index.getName()) + "'" +
+					" AND BSCHEMA='" + LUWUtil.getIdentifier(index.getSchema().getName()) + "'" +
+					" FOR FETCH ONLY";
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String constName = r.getString("CONSTNAME").trim();
+				final String tabName = r.getString("TABNAME").trim();
+				final String schemaName = r.getString("TABSCHEMA").trim();
+				TableConstraint constraint = LUWCatalogView.getTableConstraint(index.getTable(), schemaName, tabName, constName);
+				if (constraint !=  null) {
+					impacts.add(constraint);
+				}
+			}
+			r.close();
+			s.close();
+		}catch(SQLException e) {
+			e.printStackTrace();
+		}
+		return impacts;
+	}
+
+	protected static Collection getImpactedPackages(Connection connection, Index index) {
+		Collection impacts = new ArrayList();
+		try {
+			Statement s = connection.createStatement();
+			String query = "SELECT PKGNAME, PKGSCHEMA, HEX(UNIQUE_ID) AS UID" +
+					" FROM SYSCAT.PACKAGEDEP" +
+					" WHERE BTYPE = 'I'" +
+					" AND BNAME='" + LUWUtil.getIdentifier(index.getName()) + "'" +
+					" AND BSCHEMA='" + LUWUtil.getIdentifier(index.getSchema().getName()) + "'" +
+					" FOR FETCH ONLY";
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String pkgName = r.getString("PKGNAME").trim();
+				final String schemaName = r.getString("PKGSCHEMA").trim();
+				final String pkgUniqueID = r.getString("UID").trim();
+				DB2Package pkg = LUWCatalogView.getDb2Package(index.getTable(), schemaName, pkgName, pkgUniqueID);
+				if (pkg !=  null) {
+					impacts.add(pkg);
+				}
+			}
+			r.close();
+			s.close();
+		}catch(SQLException e) {
+			e.printStackTrace();
+		}
+		return impacts;
+	}
+
+	
+	public static Collection getStatistics(Connection connection, Index index){
+		Collection statistics = new ArrayList();
+		try {
+			
+	        final DatabaseDefinition definition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(index.getTable().getSchema().getDatabase());
+	        String version = definition.getVersion();
+	        float ver = 8.0f;
+	        try {
+	            ver = Float.parseFloat(version.substring(1));
+	        }
+	        catch (NumberFormatException e) {            
+	        }
+	        
+	        String query = "";
+	        if (ver < 9.0f) {
+				query = "SELECT I.STATS_TIME,S.NLEAF, S.NLEVELS,S.FIRSTKEYCARD,S.FIRST2KEYCARD,S.FIRST3KEYCARD" +
+						",S.FIRST4KEYCARD,S.FULLKEYCARD,S.CLUSTERRATIO,S.CLUSTERFACTOR,S.SEQUENTIAL_PAGES,S.DENSITY,S.PAGE_FETCH_PAIRS" +
+						",S.NUMRIDS,S.NUMRIDS_DELETED,S.NUM_EMPTY_LEAFS,S.AVERAGE_RANDOM_FETCH_PAGES" +
+						",S.AVERAGE_RANDOM_PAGES,S.AVERAGE_SEQUENCE_GAP,S.AVERAGE_SEQUENCE_FETCH_GAP" +
+						",S.AVERAGE_SEQUENCE_PAGES,S.AVERAGE_SEQUENCE_FETCH_PAGES" +
+						",-1 AS AVGPARTITION_CLUSTERRATIO, -1 AS AVGPARTITION_CLUSTERFACTOR, '' AS AVGPARTITION_PAGE_FETCH_PAIRS" +
+						",-1 AS DATAPARTITION_CLUSTERFACTOR, -1 AS INDCARD" +
+						" FROM SYSSTAT.INDEXES S, SYSCAT.INDEXES I" +
+						" WHERE S.INDSCHEMA = I.INDSCHEMA" +
+						" AND S.INDNAME = I.INDNAME" +
+						" AND S.INDSCHEMA='" + LUWUtil.getIdentifier(index.getSchema().getName()) + "'" + //$NON-NLS-1$ //$NON-NLS-2$
+						" AND S.INDNAME='" + LUWUtil.getIdentifier(index.getName()) + "'" +	 //$NON-NLS-1$ //$NON-NLS-2$
+						" FOR FETCH ONLY";
+	        } else {
+				query = "SELECT I.STATS_TIME,S.NLEAF, S.NLEVELS,S.FIRSTKEYCARD,S.FIRST2KEYCARD,S.FIRST3KEYCARD" +
+					",S.FIRST4KEYCARD,S.FULLKEYCARD,S.CLUSTERRATIO,S.CLUSTERFACTOR,S.SEQUENTIAL_PAGES,S.DENSITY,S.PAGE_FETCH_PAIRS" +
+					",S.NUMRIDS,S.NUMRIDS_DELETED,S.NUM_EMPTY_LEAFS,S.AVERAGE_RANDOM_FETCH_PAGES" +
+					",S.AVERAGE_RANDOM_PAGES,S.AVERAGE_SEQUENCE_GAP,S.AVERAGE_SEQUENCE_FETCH_GAP" +
+					",S.AVERAGE_SEQUENCE_PAGES,S.AVERAGE_SEQUENCE_FETCH_PAGES" +
+					",S.AVGPARTITION_CLUSTERRATIO,S.AVGPARTITION_CLUSTERFACTOR,S.AVGPARTITION_PAGE_FETCH_PAIRS" +
+					",S.DATAPARTITION_CLUSTERFACTOR,S.INDCARD" +
+					" FROM SYSSTAT.INDEXES S, SYSCAT.INDEXES I" +
+					" WHERE S.INDSCHEMA = I.INDSCHEMA" +
+					" AND S.INDNAME = I.INDNAME" +
+					" AND S.INDSCHEMA='" + LUWUtil.getIdentifier(index.getSchema().getName()) + "'" + //$NON-NLS-1$ //$NON-NLS-2$
+					" AND S.INDNAME='" + LUWUtil.getIdentifier(index.getName()) + "'" +	 //$NON-NLS-1$ //$NON-NLS-2$
+					" FOR FETCH ONLY";
+	        }
+			
+			Statement s = connection.createStatement();
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				CatalogStatistics stats = null;
+
+				final Timestamp stats_time = r.getTimestamp("STATS_TIME");
+				if (stats_time != null) {
+					stats = new CatalogStatistics("STATS_TIME",LUWCatalogMessages.STAT_TIME,LUWCatalogMessages.STAT_TIME_DES,stats_time,"");
+					statistics.add(stats);
+				}
+				
+				final int nLeaf = r.getInt("NLEAF");
+				if (nLeaf  != -1) {
+					stats = new CatalogStatistics("NLEAF",LUWCatalogMessages.STAT_NLEAF,LUWCatalogMessages.STAT_NLEAF_DES,nLeaf,"SYSSTAT.INDEXES");
+					statistics.add(stats);
+				}
+				
+				final int nLevel = r.getInt("NLEVELS");
+				if (nLevel != -1) {
+					stats = new CatalogStatistics("NLEVELS",LUWCatalogMessages.STAT_NLEVELS,LUWCatalogMessages.STAT_NLEVELS_DES,nLevel,"SYSSTAT.INDEXES");
+					statistics.add(stats);
+				}
+
+				final BigInteger firstKeyCard =  r.getBigDecimal("FIRSTKEYCARD").toBigInteger();
+				if (firstKeyCard.intValue() != -1) {
+					stats = new CatalogStatistics("FIRSTKEYCARD",LUWCatalogMessages.STAT_FIRST_KEYCARD,LUWCatalogMessages.STAT_FIRST_KEYCARD_DES,firstKeyCard,"SYSSTAT.INDEXES");
+					statistics.add(stats);
+				}
+
+				final BigInteger first2KeyCard = r.getBigDecimal("FIRST2KEYCARD").toBigInteger();
+				if (firstKeyCard.intValue() != -1) {
+					stats = new CatalogStatistics("FIRST2KEYCARD",LUWCatalogMessages.STAT_FIRST2_KEYCARD,LUWCatalogMessages.STAT_FIRST2_KEYCARD_DES,first2KeyCard,"SYSSTAT.INDEXES");
+					statistics.add(stats);
+				}
+				
+				final BigInteger first3KeyCard = r.getBigDecimal("FIRST3KEYCARD").toBigInteger();;
+				if (first3KeyCard.intValue() != -1) {
+					stats = new CatalogStatistics("FIRST3KEYCARD",LUWCatalogMessages.STAT_FIRST3_KEYCARD,LUWCatalogMessages.STAT_FIRST3_KEYCARD_DES,first3KeyCard,"SYSSTAT.INDEXES");
+					statistics.add(stats);
+				}
+
+				final BigInteger first4KeyCard = r.getBigDecimal("FIRST4KEYCARD").toBigInteger();;
+				if (first4KeyCard.intValue() != -1) {
+					stats = new CatalogStatistics("FIRST4KEYCARD",LUWCatalogMessages.STAT_FIRST4_KEYCARD,LUWCatalogMessages.STAT_FIRST4_KEYCARD_DES,first4KeyCard,"SYSSTAT.INDEXES");
+					statistics.add(stats);
+				}
+				
+				final BigInteger fullKeyCard = r.getBigDecimal("FULLKEYCARD").toBigInteger();;
+				if (fullKeyCard.intValue() != -1) {
+					stats = new CatalogStatistics("FULLKEYCARD",LUWCatalogMessages.STAT_FULL_KEYCARD,LUWCatalogMessages.STAT_FULL_KEYCARD_DES,fullKeyCard,"SYSSTAT.INDEXES");
+					statistics.add(stats);
+				}
+				
+				final int clusterRatio = r.getInt("CLUSTERRATIO");
+				if (clusterRatio != -1) {
+					stats = new CatalogStatistics("CLUSTERRATIO",LUWCatalogMessages.STAT_CLUSTER_RATIO,LUWCatalogMessages.STAT_CLUSTER_RATIO_DES,clusterRatio,"SYSSTAT.INDEXES");
+					statistics.add(stats);
+				}
+
+				final float clusterFactor = r.getFloat("CLUSTERFACTOR");
+				if (clusterFactor != -1) {
+					stats = new CatalogStatistics("CLUSTERFACTOR",LUWCatalogMessages.STAT_CLUSTER_FACTOR,LUWCatalogMessages.STAT_CLUSTER_FACTOR_DES,clusterFactor,"SYSSTAT.INDEXES");
+					statistics.add(stats);
+				}
+				
+				final int sequentialPages = r.getInt("SEQUENTIAL_PAGES");
+				if (sequentialPages != -1) {
+					stats = new CatalogStatistics("SEQUENTIAL_PAGES",LUWCatalogMessages.STAT_SEQUENTIAL_PAGES,LUWCatalogMessages.STAT_SEQUENTIAL_PAGES_DES,sequentialPages,"SYSSTAT.INDEXES");
+					statistics.add(stats);
+				}
+
+				final int density = r.getInt("DENSITY");
+				if (density != -1) {
+					stats = new CatalogStatistics("DENSITY",LUWCatalogMessages.STAT_DENSITY,LUWCatalogMessages.STAT_DENSITY_DES,density,"SYSSTAT.INDEXES");
+					statistics.add(stats);
+				}
+
+				final String fetchPair = r.getString("PAGE_FETCH_PAIRS");
+				if (fetchPair != null && !"".equals(fetchPair)) {
+					stats = new CatalogStatistics("PAGE_FETCH_PAIRS",LUWCatalogMessages.STAT_PAGE_FETCH_PAIRS,LUWCatalogMessages.STAT_PAGE_FETCH_PAIRS_DES,LUWUtil.getSingleQuotedString(fetchPair),"SYSSTAT.INDEXES");
+					statistics.add(stats);
+				}
+
+				final BigInteger numberRID = r.getBigDecimal("NUMRIDS").toBigInteger();;
+				if (numberRID.intValue() != -1) {
+					stats = new CatalogStatistics("NUMRIDS",LUWCatalogMessages.STAT_NUMRIDS,LUWCatalogMessages.STAT_NUMRIDS_DES,numberRID,"SYSSTAT.INDEXES");
+					statistics.add(stats);
+				}
+
+				final BigInteger numberRIDDeleted = r.getBigDecimal("NUMRIDS_DELETED").toBigInteger();;
+				if (numberRIDDeleted.intValue() != -1) {
+					stats = new CatalogStatistics("NUMRIDS_DELETED",LUWCatalogMessages.STAT_NUMRIDS_DELETED,LUWCatalogMessages.STAT_NUMRIDS_DELETED_DES,numberRIDDeleted,"SYSSTAT.INDEXES");
+					statistics.add(stats);
+				}
+
+				final BigInteger numEmptyLeafs = r.getBigDecimal("NUM_EMPTY_LEAFS").toBigInteger();;
+				if (numEmptyLeafs.intValue() != -1) {
+					stats = new CatalogStatistics("NUM_EMPTY_LEAFS",LUWCatalogMessages.STAT_NUM_EMPTY_LEAFS,LUWCatalogMessages.STAT_NUM_EMPTY_LEAFS_DES,numEmptyLeafs,"SYSSTAT.INDEXES");
+					statistics.add(stats);
+				}
+
+				final float avgRandomFetchPages = r.getFloat("AVERAGE_RANDOM_FETCH_PAGES");
+				if (avgRandomFetchPages != -1) {
+					stats = new CatalogStatistics("AVERAGE_RANDOM_FETCH_PAGES",LUWCatalogMessages.STAT_AVERAGE_RANDOM_FETCH_PAGES,LUWCatalogMessages.STAT_AVERAGE_RANDOM_FETCH_PAGES_DES,avgRandomFetchPages,"SYSSTAT.INDEXES");
+					statistics.add(stats);
+				}
+
+				final float avgRandomPages = r.getFloat("AVERAGE_RANDOM_PAGES");
+				if (avgRandomPages != -1) {
+					stats = new CatalogStatistics("AVERAGE_RANDOM_PAGES",LUWCatalogMessages.STAT_AVERAGE_RANDOM_PAGES,LUWCatalogMessages.STAT_AVERAGE_RANDOM_PAGES_DES,avgRandomPages,"SYSSTAT.INDEXES");
+					statistics.add(stats);
+				}
+
+				final float avgSequenceGap = r.getFloat("AVERAGE_SEQUENCE_GAP");
+				if (avgSequenceGap != -1) {
+					stats = new CatalogStatistics("AVERAGE_SEQUENCE_GAP",LUWCatalogMessages.STAT_AVERAGE_SEQUENCE_GAP,LUWCatalogMessages.STAT_AVERAGE_SEQUENCE_GAP_DES,avgSequenceGap,"SYSSTAT.INDEXES");
+					statistics.add(stats);
+				}
+
+				final float avgSequenceFetchGap = r.getFloat("AVERAGE_SEQUENCE_FETCH_GAP");
+				if (avgSequenceFetchGap != -1) {
+					stats = new CatalogStatistics("AVERAGE_SEQUENCE_FETCH_GAP",LUWCatalogMessages.STAT_AVERAGE_SEQUENCE_FETCH_GAP,LUWCatalogMessages.STAT_AVERAGE_SEQUENCE_FETCH_GAP_DES,avgSequenceFetchGap,"SYSSTAT.INDEXES");
+					statistics.add(stats);
+				}
+
+				final float avgSequencePage = r.getFloat("AVERAGE_SEQUENCE_PAGES");
+				if (avgSequencePage != -1) {
+					stats = new CatalogStatistics("AVERAGE_SEQUENCE_PAGES",LUWCatalogMessages.STAT_AVERAGE_SEQUENCE_PAGES,LUWCatalogMessages.STAT_AVERAGE_SEQUENCE_PAGES_DES,avgSequencePage,"SYSSTAT.INDEXES");
+					statistics.add(stats);
+				}
+
+				final float avgSequenceFetchPage = r.getFloat("AVERAGE_SEQUENCE_FETCH_PAGES");
+				if (avgSequenceFetchPage != -1) {
+					stats = new CatalogStatistics("AVERAGE_SEQUENCE_FETCH_PAGES",LUWCatalogMessages.STAT_AVERAGE_SEQUENCE_FETCH_PAGES,LUWCatalogMessages.STAT_AVERAGE_SEQUENCE_FETCH_PAGES_DES,avgSequenceFetchPage,"SYSSTAT.INDEXES");
+					statistics.add(stats);
+				}
+
+				final int partClusterRatio= r.getInt("AVGPARTITION_CLUSTERRATIO");
+				if (partClusterRatio != -1) {
+					stats = new CatalogStatistics("AVGPARTITION_CLUSTERRATIO",LUWCatalogMessages.STAT_AVERAGE_PARTITION_CLUSTERRATIO,LUWCatalogMessages.STAT_AVERAGE_PARTITION_CLUSTERRATIO_DES,partClusterRatio,"SYSSTAT.INDEXES");
+					statistics.add(stats);
+				}
+				
+				final float partClusterFactor = r.getFloat("AVGPARTITION_CLUSTERFACTOR");
+				if (partClusterFactor != -1) {
+					stats = new CatalogStatistics("AVGPARTITION_CLUSTERFACTOR",LUWCatalogMessages.STAT_AVERAGE_PARTITION_CLUSTERFACTOR,LUWCatalogMessages.STAT_AVERAGE_PARTITION_CLUSTERFACTOR_DES,partClusterFactor,"SYSSTAT.INDEXES");
+					statistics.add(stats);
+				}
+
+				final String partFetchPair = r.getString("AVGPARTITION_PAGE_FETCH_PAIRS");
+				if (partFetchPair != null && !"".equals(partFetchPair)) {
+					stats = new CatalogStatistics("AVGPARTITION_PAGE_FETCH_PAIRS",LUWCatalogMessages.STAT_AVERAGE_PARTITION_PAGE_FETCH_PAIRS,LUWCatalogMessages.STAT_AVERAGE_PARTITION_PAGE_FETCH_PAIRS_DES,partFetchPair,"SYSSTAT.INDEXES");
+					statistics.add(stats);
+				}
+
+				final float dataClusterFactor = r.getFloat("DATAPARTITION_CLUSTERFACTOR");
+				if (dataClusterFactor != -1) {
+					stats = new CatalogStatistics("DATAPARTITION_CLUSTERFACTOR",LUWCatalogMessages.STAT_DATAPARTITION_CLUSTERFACTOR,LUWCatalogMessages.STAT_DATAPARTITION_CLUSTERFACTOR_DES,dataClusterFactor,"SYSSTAT.INDEXES");
+					statistics.add(stats);
+				}
+				
+				final BigInteger indCard = r.getBigDecimal("INDCARD").toBigInteger();;
+				if (indCard.intValue() != -1) {
+					stats = new CatalogStatistics("INDCARD",LUWCatalogMessages.STAT_INDCARD,LUWCatalogMessages.STAT_INDCARD_DES,indCard,"SYSSTAT.INDEXES");
+					statistics.add(stats);
+				}
+
+			}
+			r.close();
+			s.close();
+		}catch(SQLException e) {
+			e.printStackTrace();
+		}
+		return statistics;
+	}
+	
+	protected void getPrivilegesWithFilter(String granteeFilter) throws SQLException {
+		if (this.privilegeLoaded) return;
+		EList privileges = super.getPrivileges();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogIndex.loadPrivileges(this.getConnection(), privileges, this,granteeFilter);
+		}catch( Exception e){
+		}
+		this.eSetDeliver(deliver);
+	}
+	
+	protected void setIndexUniqueRule(IndexUniqueRule rule){
+		this.uniqueRule = rule;
+	}
+	
+	protected IndexUniqueRule getIndexUniqueRule(){
+		return this.uniqueRule;
+	}
+	
+	protected enum IndexUniqueRule {
+		DUPLICATE,
+		UNIQUE,
+		PRIMARYKEY
+	};
+
+	private static final String PROP_INDEX_MEMBERS = "PROP_INDEX_MEMBERS"; //$NON-NLS-1$
+
+	private boolean memberLoaded = false;
+	private boolean privilegeLoaded = false;
+	private boolean statisticsLoaded = false;
+	private boolean impactsLoaded = false;
+	private boolean tablespaceLoaded = false;
+	
+	private IndexUniqueRule uniqueRule;
+
+	private Collection impacts = new ArrayList();
+	private Collection statistics = new ArrayList();
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogJar.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogJar.java
new file mode 100644
index 0000000..bde9313
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogJar.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2JarImpl;
+
+/**
+ * @author cdchu
+ */
+public class LUWCatalogJar extends DB2JarImpl implements ICatalogObject {
+	private boolean loaded = false;
+	private boolean dependencyLoaded = false;
+
+   /* (non-Javadoc)
+    * @see org.eclipse.wst.rdb.internal.core.rte.ICatalogObject#refresh()
+    */
+   public void refresh() {
+      this.loaded = false;
+      
+      if (this.dependencyLoaded){
+         this.dependencies.clear();
+         this.dependencyLoaded = false;
+      }
+      
+      RefreshManager.getInstance().referesh(this);
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.wst.rdb.internal.core.rte.ICatalogObject#getConnection()
+    */
+   public Connection getConnection() {
+      Database database = this.getCatalogDatabase();
+      return ((LUWCatalogDatabase) database).getConnection();
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.wst.rdb.internal.core.rte.ICatalogObject#getCatalogDatabase()
+    */
+   public Database getCatalogDatabase() {
+      return this.getSchema().getDatabase();		
+   }
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogMaterializedQueryTable.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogMaterializedQueryTable.java
new file mode 100644
index 0000000..025c4cb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogMaterializedQueryTable.java
@@ -0,0 +1,514 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.enablement.ibm.catalog.IDatabaseObject;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWDdlParser;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWUtil;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartitionKey;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWMaterializedQueryTableImpl;
+import org.eclipse.datatools.enablement.ibm.util.IRowCountCache;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Privilege;
+import org.eclipse.datatools.modelbase.sql.expressions.QueryExpression;
+import org.eclipse.datatools.modelbase.sql.expressions.SQLExpressionsPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWCatalogMaterializedQueryTable extends LUWMaterializedQueryTableImpl implements IRowCountCache,ICatalogObject,IDatabaseObject {
+	public void refresh() {
+		this.columnsLoaded = false;
+		this.indexLoaded = false;
+		
+		if (this.dependencyLoaded){
+			this.dependencies.clear();
+			this.dependencyLoaded = false;
+		}
+		
+		this.partitionKeyLoaded = false;
+		
+		if (this.dataPartitionLoaded) {
+			this.dataPartitions.clear();
+			this.dataPartitionLoaded = false;
+		}
+		
+		this.tablespaceLoaded = false;
+		this.loaded = false;
+		this.privilegeLoaded = false;
+		this.rowCountLoaded = false;
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+	
+	public Database getCatalogDatabase() {
+		return this.getSchema().getDatabase();		
+	}
+
+	public void refresh(int refreshType){
+		if ((IDatabaseObject.IMPACTS & refreshType)  == IDatabaseObject.IMPACTS) {
+			this.impacts.clear();
+			this.impactsLoaded = false;
+		}
+		if ((IDatabaseObject.STATISTICS & refreshType)  == IDatabaseObject.STATISTICS) {
+			this.statistics.clear();
+			this.statisticsLoaded = false;
+			this.rowCountLoaded = false;
+		}
+
+	}
+
+//	public RefreshType getRefresh() {
+//		if (!this.loaded) this.load();
+//		return this.refresh;
+//	}
+//
+//	public MaintenanceType getMaintainedBy() {
+//		if (!this.loaded) this.load();
+//		return this.maintainedBy;
+//	}
+//	
+	public QueryExpression getQueryExpression() {
+		if (!this.loaded) this.load();
+		return this.queryExpression;
+	}
+	
+	public EList getColumns() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getColumns();
+		} else {
+			if(!this.columnsLoaded) this.loadColumns();
+			return this.columns;
+		}
+	}
+
+	public EList getIndex() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getIndex();
+		} else {
+			if(!this.indexLoaded) this.loadIndexes();
+			return this.index;
+		}
+	}
+
+	public EList getDependencies() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getDependencies();
+		} else {
+			if(!this.dependencyLoaded) this.loadDependencies();
+			return this.dependencies;
+		}
+	}
+	
+	public LUWTableSpace getRegularDataTableSpace(){
+		if(!this.tablespaceLoaded) this.loadTablespace();
+		return this.regularDataTableSpace;
+	}
+
+	public LUWTableSpace getIndexDataTableSpace(){
+		if(!this.tablespaceLoaded) this.loadTablespace();
+		return this.indexDataTableSpace;
+	}
+
+	public LUWTableSpace getLOBDataTableSpace(){
+		if(!this.tablespaceLoaded) this.loadTablespace();
+		return this.lobDataTableSpace;
+	}
+	
+	public LUWPartitionKey getPartitionKey() {
+		if (!this.partitionKeyLoaded) this.loadPartitionKey();
+		return this.partitionKey;
+	}
+	
+	public EList getDataPartitions(){
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getDataPartitions();
+		} else {
+			if (!this.dataPartitionLoaded) this.loadDataPartitions();
+			return this.dataPartitions;
+		}
+	}
+	
+	public LUWDataPartitionKey getDataPartitionKey() {
+		if (!this.dataPartitionLoaded) this.loadDataPartitions();
+		return this.dataPartitionKey;
+	}
+
+	public EList getPrivileges() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getPrivileges();
+		} else {
+			if (!this.privilegeLoaded) this.loadPrivileges();
+			return this.privileges;
+		}
+	}
+
+	public ICatalogObject[] getImpacted(){
+		if (!this.impactsLoaded) {
+			this.impacts = this.getImpactedObjects();
+			this.impactsLoaded = true;
+		}
+		ICatalogObject[] objs = new ICatalogObject[impacts.size()];
+		impacts.toArray(objs);
+		return objs;
+	}
+
+	public Collection getStatistics(){
+		if (!this.statisticsLoaded) {
+			this.statistics = LUWCatalogTable.getStatistics(this.getConnection(), this);
+			this.statisticsLoaded = true;
+		}
+		return this.statistics;
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__COLUMNS) {
+			this.getColumns();
+		}
+		else if(id == LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__INDEX) {
+			this.getIndex();
+		}
+		else if(id == LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__DEPENDENCIES) {
+			this.getDependencies();
+		}
+		else if(id == LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__REGULAR_DATA_TABLE_SPACE) {
+			this.getRegularDataTableSpace();
+		}
+		else if(id == LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__LOB_DATA_TABLE_SPACE) {
+			this.getLOBDataTableSpace();
+		}
+		else if(id == LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__INDEX_DATA_TABLE_SPACE) {
+			this.getIndexDataTableSpace();
+		}
+//		else if(id == LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__MAINTAINED_BY) {
+//			this.getMaintainedBy();
+//		}
+		else if(id == LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__QUERY_EXPRESSION) {
+			this.getQueryExpression();
+		}
+//		else if(id == LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__REFRESH) {
+//			this.getRefresh();
+//		} 
+		else if(id == LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__PARTITION_KEY) {
+			this.getPartitionKey();
+		}
+		else if(id == LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__DATA_PARTITIONS) {
+			this.getDataPartitions();
+		}
+		else if(id == LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__DATA_PARTITION_KEY) {
+			this.getDataPartitionKey();
+		}
+		else if(id == LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__PRIVILEGES) {
+			this.getPrivileges();
+		}
+		
+		return super.eIsSet(eFeature);
+	}
+	
+	public void setPartitionMode(String partitionMode) {
+		this.partitionMode = partitionMode;
+	}
+	
+	public String getPartitionMode() {
+		return this.partitionMode;
+	}
+	
+	/*
+	private synchronized void loadProperties() {
+		if(this.propertiesLoaded) return;
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			LUWCatalogTable.loadProperties(this.getConnection(),this);
+		}
+		catch (Exception e) {
+		}
+
+		this.propertiesLoaded = true;
+		this.eSetDeliver(deliver);		
+	}
+	*/
+	
+	private synchronized void loadColumns() {
+		if(this.columnsLoaded) return;
+		this.columnsLoaded = true;
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);
+		try {
+			LUWCatalogTable.loadColumns(this.getConnection(), super.getColumns(), this);
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	private synchronized void loadIndexes() {
+		if(this.indexLoaded) return;
+		this.indexLoaded = true;
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogTable.loadIndexes(this.getConnection(), super.getIndex(), this,((LUWCatalogDatabase)this.getCatalogDatabase()).getLoadOptions());
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	private synchronized void loadDependencies() {
+		if(this.dependencyLoaded) return;
+		this.dependencyLoaded = true;
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			LUWCatalogView.loadDependencies(this.getConnection(), super.getDependencies(), this);
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+		
+		this.eSetDeliver(deliver);		
+	}
+
+	private synchronized void loadTablespace() {
+		if(this.tablespaceLoaded) return;
+		this.tablespaceLoaded = true;
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogTable.loadTablespace(this.getConnection(),this);
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+	
+	private synchronized void load() {
+		if(this.loaded) return;
+		this.loaded = true;
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+
+		try {
+			Connection connection = this.getConnection();
+			
+	
+			DataModelElementFactory factory = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(this.getCatalogDatabase()).getDataModelElementFactory();
+
+			String query = "SELECT REFRESH,PROPERTY " + //$NON-NLS-1$
+					" FROM SYSCAT.TABLES " + //$NON-NLS-1$
+					" WHERE TABSCHEMA ='" + LUWUtil.getIdentifier(this.getSchema().getName()) + "'" + //$NON-NLS-1$ //$NON-NLS-2$
+					" AND TABNAME ='" + LUWUtil.getIdentifier(this.getName()) + "'" + //$NON-NLS-1$ //$NON-NLS-2$
+					" AND TYPE='S'"; //$NON-NLS-1$
+			Statement s = connection.createStatement();
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+
+//				if (r.getString("REFRESH").trim().equalsIgnoreCase("D")) { //$NON-NLS-1$ //$NON-NLS-2$
+//					this.setRefresh(RefreshType.DEFERRED_LITERAL);				
+//				} else {
+//					this.setRefresh(RefreshType.IMMEDIATE_LITERAL);				
+//				}
+//				
+//				if (r.getString("PROPERTY").trim().equalsIgnoreCase("Y")) { //$NON-NLS-1$ //$NON-NLS-2$
+//					this.setMaintainedBy(MaintenanceType.USER_LITERAL);
+//				} else {
+//					this.setMaintainedBy(MaintenanceType.SYSTEM_LITERAL);
+//				}
+				
+				
+			}
+			r.close();
+			
+
+			String querySQL = "SELECT TEXT " + //$NON-NLS-1$
+					" FROM SYSCAT.VIEWS" + //$NON-NLS-1$
+					" WHERE VIEWSCHEMA='" + this.getSchema().getName() + "'" + //$NON-NLS-1$ //$NON-NLS-2$
+					" AND VIEWNAME='" + this.getName()+ "'"; //$NON-NLS-1$ //$NON-NLS-2$
+
+			r = s.executeQuery(querySQL);
+
+			String text="";
+			while(r.next()) {
+			
+				String expression = r.getString("TEXT").trim(); //$NON-NLS-1$
+				if (expression != null){
+					text += expression.trim() + " ";
+					//remove un-readable character
+					text = text.replaceAll("[\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u000b\u000c\u000e\u000f" +
+		               		"\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f]", " ");
+				}
+			}
+
+			QueryExpression queryExpression = (QueryExpression) factory.create(SQLExpressionsPackage.eINSTANCE.getQueryExpressionDefault());
+			LUWDdlParser ddlParser = new LUWDdlParser(RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(this.getCatalogDatabase()));
+			queryExpression.setSQL(ddlParser.parseMQT(text).getQueryExpression().getSQL());
+			this.setQueryExpression(queryExpression);
+
+			r.close();
+			s.close();
+
+		
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		
+		this.eSetDeliver(deliver);				
+	}
+	
+	private synchronized void loadPartitionKey() {
+		if(this.partitionKeyLoaded) return;
+		this.partitionKeyLoaded = true;
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogTable.loadPartitionKey(this.getConnection(), this);
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	
+	private synchronized void loadDataPartitions() {
+		if(this.dataPartitionLoaded) return;
+		this.dataPartitionLoaded = true;
+
+		super.getDataPartitions();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogTable.loadDataPartitions(this.getConnection(), this);
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	private synchronized void loadPrivileges() {
+		if(this.privilegeLoaded) return;
+		this.privilegeLoaded = true;
+
+		EList privileges = super.getPrivileges();
+		for (Iterator iter= privileges.iterator(); iter.hasNext();){
+			Privilege privilege = (Privilege) iter.next();
+			privilege.setGrantor(null);
+			privilege.setGrantee(null);
+		}
+		
+		privileges.clear();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogTable.loadPrivileges(this.getConnection(),privileges, this,"");
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	private Collection getImpactedObjects(){
+		Collection impacts = new ArrayList();
+		Connection connection = this.getConnection();
+		impacts.addAll(LUWCatalogTable.getImpactedTables(connection, this));
+		impacts.addAll(LUWCatalogTable.getImpactedRoutines(connection, this));
+		impacts.addAll(LUWCatalogTable.getImpactedTriggers(connection, this));
+		impacts.addAll(LUWCatalogTable.getImpactedPackages(connection, this));
+		return impacts;
+	}
+	
+	protected void getPrivilegesWithFilter(String granteeFilter) throws SQLException {
+		if (this.privilegeLoaded) return;
+		EList privileges = super.getPrivileges();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogTable.loadPrivileges(this.getConnection(), privileges, this,granteeFilter);
+		}catch( Exception e){
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	public String getRowCountString() {
+		if (!rowCountLoaded) {
+			this.rowCount = LUWCatalogTable.loadRowCount(this.getConnection(), this);
+			this.rowCountLoaded = true;
+		}
+		return this.rowCount;
+	}
+	
+	public void setRowCountString(String count) {
+		rowCount = count;
+		rowCountLoaded = true;
+	}
+	
+	
+	private boolean columnsLoaded = false;
+	private boolean indexLoaded = false;
+	private boolean dependencyLoaded = false;	
+	private boolean tablespaceLoaded = false;
+	private boolean partitionKeyLoaded = false;
+	private boolean dataPartitionLoaded = false;
+	private boolean loaded = false;
+	private boolean privilegeLoaded = false;
+	private boolean impactsLoaded = false;
+	private boolean statisticsLoaded = false;
+	private boolean rowCountLoaded = false;
+
+	private String partitionMode = "";
+	private Collection impacts = new ArrayList();
+	private Collection statistics = new ArrayList();
+	private String rowCount = null;
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogMultidimensionalIndex.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogMultidimensionalIndex.java
new file mode 100644
index 0000000..ffc24f8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogMultidimensionalIndex.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MultidimensionalIndexImpl;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+public class LUWCatalogMultidimensionalIndex extends DB2MultidimensionalIndexImpl implements ICatalogObject {
+	public void refresh() {
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+	
+	public Database getCatalogDatabase() {
+		return this.getSchema().getDatabase();		
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogNickname.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogNickname.java
new file mode 100644
index 0000000..abb6f2a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogNickname.java
@@ -0,0 +1,664 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.CallableStatement;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.sql.Types;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.DatabaseConnectionRegistry;
+import org.eclipse.datatools.enablement.ibm.catalog.IDatabaseObject;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWUtil;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFactory;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.RelationalRemoteServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.RemoteServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGenericNicknameImpl;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.util.TableToRemoteDataSetHelper;
+import org.eclipse.datatools.enablement.ibm.util.ConnectionProfileUtility;
+import org.eclipse.datatools.enablement.ibm.util.IRowCountCache;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Privilege;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Dependency;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWCatalogNickname extends LUWGenericNicknameImpl implements IRowCountCache,ICatalogObject,IDatabaseObject{
+
+	public void refresh() {
+		this.columnsLoaded = false;
+		this.constraintLoaded = false;
+		this.serverLoaded = false;
+		this.optionsLoaded = false;
+		this.indexLoaded = false;
+		this.remoteDataSetLoaded = false;
+		this.remoteTableDependencyLoaded = false;
+		this.remoteTableDependencyList.clear();
+		this.privilegeLoaded = false;
+		if (this.dependencyLoaded){
+			this.dependencies.clear();
+			this.dependencyLoaded = false;
+		}
+
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+	
+	public Database getCatalogDatabase() {
+		return this.getSchema().getDatabase();		
+	}
+
+	public void refresh(int refreshType){
+		if ((IDatabaseObject.IMPACTS & refreshType)  == IDatabaseObject.IMPACTS) {
+			this.impacts.clear();
+			this.impactsLoaded = false;
+		}
+		if ((IDatabaseObject.STATISTICS & refreshType)  == IDatabaseObject.STATISTICS) {
+			this.statistics.clear();
+			this.statisticsLoaded = false;
+			this.rowCountLoaded = false;
+		}
+	}
+
+	public EList getColumns() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getColumns();
+		} else {
+			if(!this.columnsLoaded) this.loadColumns();
+			return this.columns;
+		}
+	}
+
+	public LUWServer getServer() {
+		if(!this.serverLoaded) this.loadServer();
+		return this.server;
+	}
+
+	public EList getOptions() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getOptions();
+		} else {
+			if(!this.optionsLoaded) this.loadOptions();
+			return super.getOptions();
+		}
+	}
+
+//temp disable	
+//	public RemoteDataSet getRemoteDataSet() {
+//		if(!this.remoteDataSetLoaded) this.loadRemoteDataSet();
+//		return this.remoteDataSet;
+//	}
+	
+	public EList getConstraints() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getConstraints();
+		} else {
+			if(!this.constraintLoaded) this.loadConstraints();
+			return this.constraints;
+		}
+	}
+
+	public EList getIndex() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getIndex();
+		} else {
+			if (!this.indexLoaded) this.loadIndexes();
+			return this.index;
+		}
+	}
+	
+	public EList getPrivileges() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getPrivileges();
+		} else {
+			if (!this.privilegeLoaded) this.loadPrivileges();
+			return this.privileges;
+		}
+	}
+	
+	public EList getDependencies() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getDependencies();
+		} else {
+			if(!this.dependencyLoaded) this.loadDependencies();
+			return this.dependencies;
+		}
+	}
+
+	public ICatalogObject[] getImpacted(){
+		if (!this.impactsLoaded) {
+			this.impacts = this.getImpactedObjects();
+			this.impactsLoaded = true;
+		}
+		ICatalogObject[] objs = new ICatalogObject[impacts.size()];
+		impacts.toArray(objs);
+		return objs;
+	}
+
+	public Collection getStatistics(){
+		if (!this.statisticsLoaded) {
+			this.statistics = LUWCatalogTable.getStatistics(this.getConnection(), this);
+			this.statisticsLoaded = true;
+		}
+		return this.statistics;
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == LUWPackage.LUW_NICKNAME__COLUMNS) {
+			this.getColumns();
+		}
+		else if(id == LUWPackage.LUW_NICKNAME__SERVER) {
+			this.getServer();
+		}
+		else if(id == LUWPackage.LUW_NICKNAME__OPTIONS) {
+			this.getOptions();
+		}
+		else if(id == LUWPackage.LUW_NICKNAME__DESCRIPTION) {
+			this.getDescription();
+		}
+		else if(id == LUWPackage.LUW_NICKNAME__REMOTE_DATA_SET) {
+			this.getRemoteDataSet();
+		}else if(id == LUWPackage.LUW_NICKNAME__CONSTRAINTS) {
+			this.getConstraints();
+		}else if(id == LUWPackage.LUW_NICKNAME__INDEX) {
+			this.getIndex();
+		}else if(id == LUWPackage.LUW_NICKNAME__PRIVILEGES) {
+			this.getPrivileges();
+		}
+		else if(id == LUWPackage.LUW_NICKNAME__DEPENDENCIES) {
+			this.getDependencies();
+		}
+	
+		return super.eIsSet(eFeature);
+	}
+
+	private synchronized void loadColumns() {
+		if(this.columnsLoaded) return;
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);
+		try {
+			LUWCatalogTable.loadColumns(this.getConnection(), super.getColumns(), this);
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+		this.columnsLoaded = true;
+		this.eSetDeliver(deliver);
+	}
+
+	private synchronized void loadOptions() {
+		if(this.optionsLoaded) return;
+		this.optionsLoaded = true;
+
+		EList options = super.getOptions();
+		options.clear();
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);
+		try {
+			String query = "SELECT OPTION, CAST(SUBSTR(SETTING, 1, 128) AS VARCHAR(128)) FROM SYSCAT.TABOPTIONS WHERE TABSCHEMA='"  //$NON-NLS-1$
+				+ LUWUtil.getIdentifier(this.getSchema().getName()) + "' AND TABNAME='" + LUWUtil.getIdentifier(this.getName()) + "'"; //$NON-NLS-1$ //$NON-NLS-2$
+				
+			Statement s = this.getConnection().createStatement();
+			ResultSet r = s.executeQuery(query);
+			try {
+				while(r.next()) {
+					final String name = r.getString(1).trim();
+					String value = r.getString(2).trim();
+					LUWOption option = LUWFactory.eINSTANCE.createLUWOption();
+					option.setName(name);
+
+                    // Check to see if the setting is 255 bytes.  If it is, we need to get the rest
+                    // of it from the pack descriptor
+                    if (value.length() == 255 && getCatalogDatabase().getVersion().equalsIgnoreCase("V8.2")) {
+                    	value = getOptionFromPackDescriptor(name);
+                    }
+					option.setValue(value);
+					options.add(option);
+				}
+			}
+			catch (Exception e) {
+			}
+			r.close();
+			s.close();
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+	
+	//  This method will get the option value from the pack descriptor, which is a place that lies
+	//  outside of the realm of the DB2 system catalogs.
+	private synchronized String getOptionFromPackDescriptor(String option) {
+
+	    String value = new String("");
+	    String stmtText;
+	    int returnCode;
+
+		CallableStatement stmt=null;
+		ResultSet rs=null;
+
+		try {
+		    stmtText = "{CALL SYSPROC.LIST_NN_LONG_OPTS(?,?,?,?)}";
+		    stmt = this.getConnection().prepareCall(stmtText);
+		    //register the IN parameters
+		    stmt.setString(1,this.getName());
+		    stmt.setString(2,this.getSchema().getName());
+		    stmt.setString(3,option);
+		    stmt.registerOutParameter(4,Types.INTEGER);
+
+		    stmt.execute();
+		    returnCode = stmt.getInt(4);
+		    rs = stmt.getResultSet();
+
+		    if (rs == null) {
+		        // System.out.println("Result set is NULL...");
+		    }
+		    else {
+		        while (rs.next()) {
+		           value = rs.getString(1);
+		        }
+		    }
+		    if ( rs != null ) rs.close();
+		    if ( stmt != null ) stmt.close();
+	    } // end try
+		catch (SQLException sqle) {
+//		    sqle.printStackTrace();
+		    // Insure that we have closed the result set
+		    try {
+		       if (rs != null) {
+		          rs.close(); // close result set
+		          if ( stmt != null ) stmt.close();
+		       }
+		    } catch (Exception exc) {
+		       exc.printStackTrace();
+		    }
+		}
+
+		return value;
+    }
+
+	private synchronized void loadServer() {
+		if(this.serverLoaded) return;
+		this.serverLoaded = true;
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);
+
+		Iterator it = this.getOptions().iterator();
+		while(it.hasNext()) {
+			LUWOption option = (LUWOption) it.next();
+			if(option.getName().equals("SERVER")) { //$NON-NLS-1$
+				Iterator severIt = ((LUWCatalogDatabase) this.getCatalogDatabase()).getServers().iterator();
+				while(severIt.hasNext()) {
+					Object aServer = severIt.next(); 
+					//The list of servers are a combination of LUWDiscoveredSever and LUWCatalogFederatedServer
+					//Only the LUWCatalogFederatedServer should be casted.
+					if(aServer instanceof LUWCatalogFederatedServer) { 
+						LUWCatalogFederatedServer remoteServer = (LUWCatalogFederatedServer) /*severIt.next()*/aServer;
+						if(remoteServer.getName().equals(option.getValue())) {
+							this.setGenericServer(remoteServer);
+							break;
+						}
+					}
+				}
+				break;
+			}
+		}
+		
+		this.eSetDeliver(deliver);
+	}
+/*
+ private synchronized void loadRemoteDataSet() {
+	
+		if(this.remoteDataSetLoaded) return;
+		
+		RemoteServer rs = this.getServer().getRemoteServer();
+
+		if(rs instanceof RelationalRemoteServer) {
+			String remoteSchemaName = null;
+			String remoteTableName = null;
+			
+			Iterator it = this.getOptions().iterator();
+			while(it.hasNext()) {
+				LUWOption option = (LUWOption) it.next();
+				if(option.getName().equals("REMOTE_SCHEMA")) {
+					remoteSchemaName = option.getValue();
+				}
+				else if(option.getName().equals("REMOTE_TABLE")) {
+					remoteTableName = option.getValue();				
+				}
+			}
+			//here you want to load rrDataset object
+			Table remoteTable = getRemoteTable(((RelationalRemoteServer)rs).getDatabase(), remoteSchemaName, remoteTableName);
+			if(remoteTable instanceof RemoteDataSet) {
+				((RemoteDataSet) remoteTable).getNickname();
+			}
+		}
+	}
+*/	
+	
+
+
+	private synchronized void loadRemoteDataSet() {
+		//TODO:Added by GEETIKA: new implementation of LoadRemoteDataSet
+		//if dataset isnt loaded, force load of remote table, this
+		//will create the dataset object. then get the dataset object
+		//and create link from dataset object to nickname.
+		if (this.remoteDataSetLoaded) {
+			return;
+		}
+		this.remoteDataSetLoaded = true;
+
+		LUWServer luwServer = this.getServer();
+		
+		if (luwServer != null) {
+			RemoteServer rs = luwServer.getRemoteServer();
+	
+			if (rs instanceof RelationalRemoteServer) {
+				String remoteSchemaName = null;
+				String remoteTableName = null;
+				RelationalRemoteServer relationalRS = (RelationalRemoteServer) rs;
+				Database db = relationalRS.getDatabase();
+	
+				Iterator it = this.getOptions().iterator();
+				while (it.hasNext() && (remoteSchemaName == null || remoteTableName == null)) {
+					LUWOption option = (LUWOption) it.next();
+					if (option.getName().equals("REMOTE_SCHEMA")) { //$NON-NLS-1$
+						remoteSchemaName = option.getValue();
+					} 
+					else if (option.getName().equals("REMOTE_TABLE")) { //$NON-NLS-1$
+						remoteTableName = option.getValue();
+					}
+				}
+				
+				if (remoteSchemaName == null) {
+					ConnectionInfo connectionInfo = DatabaseConnectionRegistry.getInstance().getConnectionForDatabase(luwServer.getWrapper().getLUWDatabase());
+               IConnectionProfile profile = connectionInfo.getConnectionProfile();
+					remoteSchemaName = ConnectionProfileUtility.getUID(profile);
+				}
+				
+				if (remoteSchemaName != null && remoteTableName != null) {
+					//here you want to load rrDataset object
+					if (db != null) {
+						BaseTable remoteTable = getRemoteTable (relationalRS.getDatabase(),
+								remoteSchemaName, remoteTableName);
+						if (remoteTable != null) {
+							this.setRemoteDataSetFromTable(remoteTable);
+						}
+						else {
+							//shows a warning in the error log
+//							String msg = DB2LUWPlugin.getResourceString("datatools.db2.luw.RemoteDataSetLoadingError");
+//							String[] subs = new String[] {relationalRS.getName(), remoteSchemaName, remoteTableName,
+//								this.getSchema().getName(), this.getName()};
+//							DB2LUWPlugin.getDefault().log(MessageFormat.format(msg, subs), IStatus.WARNING, null);
+						}
+					}
+				}
+			}
+		}
+		else {
+			//nickname is defined on a non-relational datasource
+		}
+		
+		//we set this variable to true even if the data set is not loaded, meaning we tried to load it.
+		//this avoids trying to load several times when there is a problem during the loading (eg, the remote
+		//server is down)
+	}
+	
+	/**
+	 * @param remoteTable
+	 */
+	public void setRemoteDataSetFromTable(BaseTable remoteTable) {
+		LUWCatalogRelationalRemoteDataSet rds = (LUWCatalogRelationalRemoteDataSet) TableToRemoteDataSetHelper
+				.getRemoteDataSet(remoteTable);
+		if (rds == null) {
+			rds = new LUWCatalogRelationalRemoteDataSet();
+			rds.setName(this.getName());
+			rds.setRemoteSchemaName(remoteTable.getSchema().getName());
+			rds.setRemoteTableName(remoteTable.getName());
+			rds.setTable(remoteTable);
+			this.setRemoteDataSet(rds);
+		}
+		rds.getNickname().add(this);
+	}
+
+	private synchronized void loadConstraints() {
+		if(this.constraintLoaded) return;
+		this.constraintLoaded = true;
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogTable.loadConstraints(this.getConnection(), super.getConstraints(), this);
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+	
+	private synchronized void loadIndexes() {
+		if(this.indexLoaded) return;
+		this.indexLoaded = true;
+		EList indexes = super.getIndex();
+		
+		if (this.batchLoad) return;   //if batchload
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogTable.loadIndexes(this.getConnection(), indexes, this,((LUWCatalogDatabase)this.getCatalogDatabase()).getLoadOptions());
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+	
+	public static Schema getRemoteSchema(Database database, String schemaName) {
+		Iterator it = database.getSchemas().iterator();
+		//try database.getSchemas != null, then do iterator();
+		while(it.hasNext()) {
+			Schema s = (Schema) it.next();
+			if(s.getName().equals(schemaName)) return s;			
+		}
+		return null;
+	}
+	
+	public static BaseTable getRemoteTable(Database database, String schemaName, String tableName) {
+		Schema schema = getRemoteSchema(database, schemaName);
+		//what if schema is excel? check if db vendor is excel, and then what?
+		if(schema == null) return null;
+		Iterator it = schema.getTables().iterator();
+		while(it.hasNext()) {
+			Table table = (Table) it.next();
+			if(table.getName().equals(tableName)) return (BaseTable) table;			
+		}
+		return null;
+	}
+	
+	public List getRemoteTableDependencies() {
+		if(!this.remoteTableDependencyLoaded) this.loadRemoteTableDependencies();
+		return this.remoteTableDependencyList;
+	}
+	
+	private synchronized void loadRemoteTableDependencies() {
+		if(this.remoteTableDependencyLoaded) return;
+		this.remoteTableDependencyLoaded = true;
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			final Database database = this.getSchema().getDatabase();
+			final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+			final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+				
+			LUWCatalogRelationalRemoteDataSet rrds = (LUWCatalogRelationalRemoteDataSet) getRemoteDataSet();
+			if (rrds != null)
+			{
+				SQLObject obj = rrds.getTable();
+				Dependency dep = (Dependency) factory.create(SQLSchemaPackage.eINSTANCE.getDependency());
+				dep.setTargetEnd(obj);
+				remoteTableDependencyList.add(dep);
+			}
+		}
+		catch(Exception e) {
+//			e.printStackTrace();
+		}
+		
+		this.eSetDeliver(deliver);		
+	}
+	
+	
+	private synchronized void loadPrivileges() {
+		if(this.privilegeLoaded) return;
+		this.privilegeLoaded = true;
+
+		EList privileges = super.getPrivileges();
+		for (Iterator iter= privileges.iterator(); iter.hasNext();){
+			Privilege privilege = (Privilege) iter.next();
+			privilege.setGrantor(null);
+			privilege.setGrantee(null);
+		}
+		
+		privileges.clear();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogTable.loadPrivileges(this.getConnection(),privileges, this,"");
+		}
+		catch (Exception e) {
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	private synchronized void loadDependencies() {
+		if(this.dependencyLoaded) return;
+		this.dependencyLoaded = true;
+
+		EList dependencyList = super.getDependencies();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			if (this.getServer() != null) {
+				final Database database = this.getSchema().getDatabase();
+				final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+				final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+				Dependency dep = (Dependency) factory.create(SQLSchemaPackage.eINSTANCE.getDependency());
+				dep.setTargetEnd(this.getServer());
+				dependencyList.add(dep);
+			}
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+		
+		this.eSetDeliver(deliver);		
+	}
+
+	protected void setAsBatchLoad(boolean batchLoad){
+		this.batchLoad = batchLoad;
+	}
+
+	private Collection getImpactedObjects(){
+		Collection impacts = new ArrayList();
+		Connection connection = this.getConnection();
+		impacts.addAll(LUWCatalogTable.getImpactedAlias(connection, this));
+		impacts.addAll(LUWCatalogTable.getImpactedTables(connection, this));
+		impacts.addAll(LUWCatalogTable.getImpactedTriggers(connection, this));
+		impacts.addAll(LUWCatalogTable.getImpactedPackages(connection, this));
+		impacts.addAll(LUWCatalogTable.getImpactedRoutines(connection, this));
+		impacts.addAll(LUWCatalogTable.getImpactedConstraints(connection, this));
+		return impacts;
+	}
+
+	protected void getPrivilegesWithFilter(String granteeFilter) throws SQLException {
+		if (this.privilegeLoaded) return;
+		EList privileges = super.getPrivileges();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogTable.loadPrivileges(this.getConnection(), privileges, this,granteeFilter);
+		}catch( Exception e){
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	public String getRowCountString() {
+		if (!rowCountLoaded) {
+			this.rowCount = LUWCatalogTable.loadRowCount(this.getConnection(), this);
+			this.rowCountLoaded = true;
+		}
+		return this.rowCount;
+	}
+	
+	public void setRowCountString(String count) {
+		rowCount = count;
+		rowCountLoaded = true;
+	}
+	
+	private List remoteTableDependencyList = new LinkedList ();
+	private boolean columnsLoaded = false;
+	private boolean serverLoaded = false;
+	private boolean remoteDataSetLoaded = false;
+	private boolean optionsLoaded = false;	
+	private boolean constraintLoaded = false;
+	private boolean indexLoaded = false;
+	private boolean remoteTableDependencyLoaded = false;
+	private boolean batchLoad = false;
+	private boolean privilegeLoaded = false;
+	private boolean impactsLoaded = false;
+	private boolean statisticsLoaded = false;
+	private boolean rowCountLoaded = false;
+	private boolean dependencyLoaded = false;
+	
+	private Collection impacts = new ArrayList();
+	private Collection statistics = new ArrayList();
+	private String rowCount = null;
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogParameter.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogParameter.java
new file mode 100644
index 0000000..8cafbc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogParameter.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.datatools.modelbase.sql.routines.impl.ParameterImpl;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+public class LUWCatalogParameter extends ParameterImpl implements ICatalogObject{
+
+	public void refresh() {
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+	
+	public Database getCatalogDatabase() {
+		return ((Routine)this.eContainer()).getSchema().getDatabase();
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogPrimaryKey.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogPrimaryKey.java
new file mode 100644
index 0000000..5688ab7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogPrimaryKey.java
@@ -0,0 +1,238 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.LUWCatalogIndex.IndexUniqueRule;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWUtil;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex;
+import org.eclipse.datatools.modelbase.sql.constraints.Constraint;
+import org.eclipse.datatools.modelbase.sql.constraints.IndexMember;
+import org.eclipse.datatools.modelbase.sql.constraints.SQLConstraintsPackage;
+import org.eclipse.datatools.modelbase.sql.constraints.impl.PrimaryKeyImpl;
+import org.eclipse.datatools.modelbase.sql.datatypes.CharacterStringDataType;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Dependency;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWCatalogPrimaryKey extends PrimaryKeyImpl implements ICatalogObject {
+	public void refresh() {
+		if(this.memberLoaded) {
+			this.members.clear();
+			this.memberLoaded = false;
+		}
+		
+		if (this.dependencyLoaded){
+			this.dependencies.clear();
+			this.dependencyLoaded = false;
+		}
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public EList getMembers() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getMembers();
+		} else {
+			if(!this.memberLoaded) this.loadMembers();
+			return this.members;
+		}
+	}
+
+	public EList getDependencies() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getDependencies();
+		} else {
+			if(!this.dependencyLoaded) this.loadDependencies();
+			return this.dependencies;
+		}
+	}
+	
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == SQLConstraintsPackage.PRIMARY_KEY__MEMBERS) {
+			this.getMembers();
+		}
+		else if(id == SQLConstraintsPackage.PRIMARY_KEY__DEPENDENCIES) {
+			this.getDependencies();
+		}
+		return super.eIsSet(eFeature);
+	}
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+	
+	public Database getCatalogDatabase() {
+		return this.getBaseTable().getSchema().getDatabase();		
+	}
+
+	private synchronized void loadMembers() {
+		if(this.memberLoaded) return;
+		this.memberLoaded = true;
+
+		EList memberList = super.getMembers();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+
+		LUWIndex index = this.getImplementIndex();
+		if (index != null) {
+			for (Iterator iterator=index.getMembers().iterator(); iterator.hasNext(); ){
+				IndexMember indexMemeber = (IndexMember)iterator.next();
+				memberList.add(indexMemeber.getColumn());
+			}
+		} else {
+			try {
+				Connection connection = this.getConnection();
+				if(connection == null) return;
+	
+				Statement s = connection.createStatement();
+				ResultSet r = s.executeQuery("SELECT COLNAME FROM SYSCAT.KEYCOLUSE" + this.getWhereClause()); //$NON-NLS-1$
+				while(r.next()) {
+					final String colName = r.getString(1);
+					memberList.add(this.getColumn(colName));
+				}
+				r.close();
+				s.close();
+			}
+			catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+		this.eSetDeliver(deliver);		
+	}
+
+	private synchronized void loadDependencies() {
+		if(this.dependencyLoaded) return;
+		this.dependencyLoaded = true;
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			LUWCatalogPrimaryKey.loadDependencies(this.getConnection(), super.getDependencies(), this);
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);		
+	}
+		
+	private String getWhereClause() {
+		Table table = this.getBaseTable();
+		return " WHERE CONSTNAME='" + LUWUtil.getIdentifier(this.getName()) + "' AND TABSCHEMA='" + LUWUtil.getIdentifier(this.getBaseTable().getSchema().getName())  //$NON-NLS-1$ //$NON-NLS-2$
+				+ "' AND TABNAME='" + LUWUtil.getIdentifier(this.getBaseTable().getName()) + "' ORDER BY COLSEQ"; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+	private Column getColumn(String columnName) {
+		BaseTable table = this.getBaseTable();
+		if (table instanceof LUWCatalogTable) {
+			Column c = ((LUWCatalogTable)table).getColumn(columnName);
+			if (c!= null) return c;
+		} 
+		
+		Iterator it = table.getColumns().iterator();
+		while(it.hasNext()) {
+			Column c = (Column) it.next();
+			if(c.getName().equals(columnName)) return c;
+		}
+
+		Column column = new LUWCatalogColumn();
+		column.setName(columnName);
+		column.setTable(table);
+		Database database = table.getSchema().getDatabase();
+		final DatabaseDefinition def = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+		CharacterStringDataType dataType = (CharacterStringDataType) def.getPredefinedDataType("Char"); //$NON-NLS-1$
+		dataType.setLength(5);
+		column.setContainedType(dataType);
+
+		return column;
+	}
+
+	public static void loadDependencies(Connection connection, EList dependencyList, Constraint constraint) throws SQLException {
+		final Table table = (Table) constraint.eContainer();
+		final Database database = table.getSchema().getDatabase();
+		final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+		final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+			
+		Statement s = connection.createStatement();
+		ResultSet r = s.executeQuery("SELECT BSCHEMA, BNAME, BTYPE FROM SYSCAT.CONSTDEP WHERE CONSTNAME='" //$NON-NLS-1$
+				+ LUWUtil.getIdentifier(constraint.getName()) + "' AND TABSCHEMA='" //$NON-NLS-1$
+				+ LUWUtil.getIdentifier(table.getSchema().getName()) + "' AND TABNAME='" + LUWUtil.getIdentifier(table.getName()) + "'"); //$NON-NLS-1$ //$NON-NLS-2$
+		try {
+			while(r.next()) {
+				final String bschema = r.getString(1).trim();
+				final String bname   = r.getString(2);
+				final String btype   = r.getString(3);
+				SQLObject obj = null;
+				if(btype.equals("F")) {	//function //$NON-NLS-1$
+					obj = LUWCatalogView.getRountine(table, bschema, bname);					
+				}
+				if(btype.equals("I")) {	//index //$NON-NLS-1$
+					obj = LUWCatalogView.getIndex(table, bschema, bname);										
+				}
+				if(btype.equals("R")) {	//structured type //$NON-NLS-1$
+					obj = LUWCatalogView.getUserDefinedType(table, bschema, bname);										
+				}
+				else {
+					continue;
+				}
+				
+				if(obj == null) continue;
+				Dependency dep = (Dependency) factory.create(SQLSchemaPackage.eINSTANCE.getDependency());
+				dep.setTargetEnd(obj);
+				dependencyList.add(dep);
+			}
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+			
+		r.close();
+		s.close();
+	}
+
+
+	private LUWIndex getImplementIndex(){
+		for (Iterator iter = this.getBaseTable().getIndex().iterator(); iter.hasNext();) {
+			LUWIndex index = (LUWIndex) iter.next();
+			if (index instanceof LUWCatalogIndex
+				&& ((LUWCatalogIndex)index).getIndexUniqueRule() == IndexUniqueRule.PRIMARYKEY) {
+				return index;
+			}
+		}
+		return null;
+	}
+	private boolean memberLoaded = false;
+	private boolean dependencyLoaded = false;
+		
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogPrivilege.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogPrivilege.java
new file mode 100644
index 0000000..b775b20
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogPrivilege.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.enablement.ibm.IBMPluginActivator;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Privilege;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.impl.PrivilegeImpl;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EcoreFactory;
+
+public class LUWCatalogPrivilege extends PrivilegeImpl implements ICatalogObject {
+
+	public void refresh() {
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}	
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+	
+	public Database getCatalogDatabase() {
+		return this.getGrantee().getDatabase();		
+	}
+	
+	public static void setAsSystemGranted(Privilege privilege, boolean value) {
+		EAnnotation eAnnotation = EcoreFactory.eINSTANCE.createEAnnotation();
+		eAnnotation.setSource(IBMPluginActivator.PRIVILEGE_PROPERTY);
+		eAnnotation.getDetails().put(IBMPluginActivator.PRIVILEGE_SYSTEM_GRANT, new Boolean (value).toString());
+		privilege.getEAnnotations().add(eAnnotation);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogProcedure.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogProcedure.java
new file mode 100644
index 0000000..ef5ec0b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogProcedure.java
@@ -0,0 +1,1307 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.math.BigInteger;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.enablement.ibm.catalog.IDatabaseObject;
+import org.eclipse.datatools.enablement.ibm.catalog.util.CatalogStatistics;
+import org.eclipse.datatools.enablement.ibm.db2.catalog.JavaProcedureInfo;
+import org.eclipse.datatools.enablement.ibm.db2.catalog.util.JavaProcedureProviderRegistry;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.DatabaseREProvider;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWUtil;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWCatalogMessages;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelFactory;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Package;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Source;
+import org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureImpl;
+import org.eclipse.datatools.enablement.ibm.util.ModelHelper;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.AuthorizationIdentifier;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Privilege;
+import org.eclipse.datatools.modelbase.sql.constraints.TableConstraint;
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.PrimitiveType;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.routines.DataAccess;
+import org.eclipse.datatools.modelbase.sql.routines.ParameterMode;
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.datatools.modelbase.sql.routines.Source;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Dependency;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWCatalogProcedure extends DB2ProcedureImpl implements ICatalogObject,IDatabaseObject  {
+	public void refresh() {
+		this.loaded = false;
+		if (this.parameterLoaded){
+			this.parameters.clear();
+			this.parameterLoaded = false;
+		}
+		
+		if (this.dependencyLoaded){
+			this.dependencies.clear();
+			this.dependencyLoaded = false;
+		}
+		if (this.sourceLoaded) {
+			this.source = null;
+			this.extendedOptions.clear();
+			this.sourceLoaded = false;
+		}
+		
+		this.javaProcedureLoaded = false;
+		this.privilegeLoaded = false;
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+	
+	public Database getCatalogDatabase() {
+		return this.getSchema().getDatabase();		
+	}
+
+	public void refresh(int refreshType){
+		if ((IDatabaseObject.IMPACTS & refreshType)  == IDatabaseObject.IMPACTS) {
+			this.impacts.clear();
+			this.impactsLoaded = false;
+		}
+		if ((IDatabaseObject.STATISTICS & refreshType)  == IDatabaseObject.STATISTICS) {
+			this.statistics.clear();
+			this.statisticsLoaded = false;
+		}
+	}
+
+	public String getLanguage() {
+		//if(!this.loaded) this.load();
+		return super.getLanguage();
+	}
+	
+	public boolean isDeterministic() {
+		//if(!this.loaded) this.load();
+		return super.isDeterministic();
+	}
+	
+	public String getParameterStyle() {
+		//if(!this.loaded) this.load();
+		return super.getParameterStyle();
+	}
+	
+	public String getFenced() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getFenced();
+		} else {
+			if(!this.loaded) this.load();
+			return super.getFenced();
+		}
+	}
+	
+	public boolean isFederated() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.isFederated();
+		} else {
+			if(!this.loaded) this.load();
+			return super.isFederated();
+		}
+	}
+	
+	public int getMaxResultSets() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getMaxResultSets();
+		} else {
+			if(!this.loaded) this.load();
+			return super.getMaxResultSets();
+		}
+	}
+	
+	public boolean isImplicitSchema() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.isImplicitSchema();
+		} else {
+			if ( !this.loaded )  this.load();
+			return super.implicitSchema;
+		}
+	}
+
+
+	public Source getSource() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getSource();
+		} else {
+		   if(!this.loaded) this.load();
+		   loadSource();
+			return super.getSource();
+		}
+	}
+
+	public DB2JavaOptions getJavaOptions() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getJavaOptions();
+		} else {
+	        loadJavaProcedure();        
+			return super.getJavaOptions();
+		}
+	}
+	
+    /**
+     * Get db2 package name from the Java procedure info provider.
+     * @return db2 package name if the language is JAVA.
+     */
+    private String getJavaSPDb2Package() {
+        String javaSPDb2Package = "";
+        if ("JAVA".equals(getLanguage())) { //$NON-NLS-1$
+            JavaProcedureInfo javaProcedureInfo = getJavaProcedureInfo();
+            if (javaProcedureInfo != null) {
+                javaSPDb2Package = javaProcedureInfo.getDB2Package();
+            }
+            else {
+                javaSPDb2Package = "";
+            }               
+        }
+        return javaSPDb2Package;    
+    }
+
+    /**
+     * This method is not in the super. It is provided
+     * here as an alternative to finding the db2Package
+     * name from the source list through getSource()
+     * which would trigger a download of the source from the catalog.
+     * @return The DB2 package name if the language is JAVA.
+     */
+    public String getDb2Package() {
+        if (!db2PackageLoaded) {
+            if ("JAVA".equals(getLanguage())) { //$NON-NLS-1$
+                JavaProcedureInfo javaProcedureInfo = getJavaProcedureInfo();
+                if (javaProcedureInfo != null) {
+                    db2Package = javaProcedureInfo.getDB2Package();    
+                }
+                else {
+                    db2Package = "";   
+                }
+            }
+            else {
+                load();   
+            }
+            db2PackageLoaded = true;
+        }
+        return db2Package;
+    }
+    
+	public EList getDependencies() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getDependencies();
+		} else {
+			if(!this.dependencyLoaded) this.loadDependencies();
+			return this.dependencies;
+		}
+	}
+
+	public EList getParameters() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getParameters();
+		} else {
+			if(!this.parameterLoaded) this.loadParameters();
+			return this.parameters;
+		}
+	}
+	
+	public DataAccess getSqlDataAccess() {
+		//if(!this.loaded) this.load();
+		return this.sqlDataAccess;
+	}
+	 
+	public String getThreadsafe() {
+		if(!this.loaded) this.load();
+		return this.threadsafe;
+	}
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.rdb.internal.models.sql.routines.Routine#getExternalName()
+	 */
+	public String getExternalName() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getExternalName();
+		} else {
+			if("JAVA".equals(this.getLanguage()) && !this.externalNameLoaded) this.loadExternalName(); //$NON-NLS-1$
+			return super.getExternalName();
+		}
+	}
+    
+	public EList getPrivileges() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getPrivileges();
+		} else {
+			if (!this.privilegeLoaded) this.loadPrivileges();
+			return this.privileges;
+		}
+	}
+
+	public EList getExtendedOptions() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getExtendedOptions();
+		} else {
+		   if(!this.loaded) this.load();
+		   loadSource();
+			return super.extendedOptions;
+		}
+	}
+
+	public ICatalogObject[] getImpacted(){
+		if (!this.impactsLoaded) {
+			this.impacts = this.getImpactedObjects();
+			this.impactsLoaded = true;
+		}
+		ICatalogObject[] objs = new ICatalogObject[impacts.size()];
+		impacts.toArray(objs);
+		return objs;
+	}
+
+	public Collection getStatistics(){
+		if (!this.statisticsLoaded) {
+			this.statistics = LUWCatalogProcedure.getStatistics(this.getConnection(), this);
+			this.statisticsLoaded = true;
+		} 
+		return this.statistics;
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == DB2ModelPackage.DB2_PROCEDURE__LANGUAGE) {
+			this.getLanguage();
+		}
+		else if(id == DB2ModelPackage.DB2_PROCEDURE__FEDERATED) {
+			this.isFederated();
+		}
+		else if(id == DB2ModelPackage.DB2_PROCEDURE__FENCED) {
+			this.getFenced();
+		}
+		else if(id == DB2ModelPackage.DB2_PROCEDURE__MAX_RESULT_SETS) {
+			this.getMaxResultSets();
+		}
+		else if(id == DB2ModelPackage.DB2_PROCEDURE__SOURCE) {
+			this.getSource();
+		}
+		else if(id == DB2ModelPackage.DB2_PROCEDURE__JAVA_OPTIONS) {
+			this.getJavaOptions();
+		}
+		else if(id == DB2ModelPackage.DB2_PROCEDURE__PARAMETER_STYLE) {
+			this.getParameterStyle();
+		}
+		else if(id == DB2ModelPackage.DB2_PROCEDURE__DETERMINISTIC) {
+			this.isDeterministic();
+		}
+		else if(id == DB2ModelPackage.DB2_PROCEDURE__DEPENDENCIES) {
+			this.getDependencies();
+		}
+		else if(id == DB2ModelPackage.DB2_PROCEDURE__PARAMETERS) {
+			this.getParameters();
+		}
+		else if(id == DB2ModelPackage.DB2_PROCEDURE__SQL_DATA_ACCESS) {
+			this.getSqlDataAccess();
+		}
+		else if(id == DB2ModelPackage.DB2_PROCEDURE__THREADSAFE) {
+			this.getThreadsafe();
+		}
+		else if(id == DB2ModelPackage.DB2_PROCEDURE__PRIVILEGES) {
+			this.getPrivileges();
+		}
+		else if(id == DB2ModelPackage.DB2_PROCEDURE__EXTENDED_OPTIONS) {
+			this.getExtendedOptions();
+		}
+		
+		return super.eIsSet(eFeature);
+	}
+	
+	private synchronized void load() {
+		if(this.loaded) return;
+		this.loaded = true;
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);
+		Connection connection = this.getConnection();
+        final DatabaseDefinition definition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(this.getCatalogDatabase());
+        String version = definition.getVersion();
+        float ver = 8.0f;
+        try {
+            ver = Float.parseFloat(version.substring(1));
+        }
+        catch (NumberFormatException e) {            
+        }
+
+		final DataModelElementFactory factory = definition.getDataModelElementFactory();
+		
+        //this query is for LUW V8. it is taken from DBAPIUNOImpl and a few are added
+        //the outer join is for obtaining the DB2 package name for SQL SP.
+        final String describe_sp_query_v8 = "WITH PP(PROCSCHEMA, PROCNAME, SPECIFICNAME, DEFINER, " + //$NON-NLS-1$
+           "PARM_COUNT, DETERMINISTIC, FENCED, LANGUAGE, IMPLEMENTATION, " + //$NON-NLS-1$
+           "CLASS, JAR_ID, JAR_SCHEMA, PARM_STYLE, CONTAINS_SQL, " + //$NON-NLS-1$
+           "PROGRAM_TYPE, RESULT_SETS, THREADSAFE, FEDERATED, REMARKS) AS " + //$NON-NLS-1$
+           "(SELECT ROUTINESCHEMA, ROUTINENAME, SPECIFICNAME, DEFINER, " + //$NON-NLS-1$
+           "PARM_COUNT, DETERMINISTIC, FENCED, LANGUAGE, IMPLEMENTATION, " + //$NON-NLS-1$
+           "CLASS, JAR_ID, JARSCHEMA, PARAMETER_STYLE, SQL_DATA_ACCESS, " + //$NON-NLS-1$
+           "PROGRAMTYPE, RESULT_SETS, THREADSAFE, FEDERATED, REMARKS FROM SYSCAT.ROUTINES WHERE " + //$NON-NLS-1$
+           "ROUTINETYPE = 'P') " + //$NON-NLS-1$
+           "SELECT PROCSCHEMA, PROCNAME, SPECIFICNAME, DEFINER, " + //$NON-NLS-1$
+           "PARM_COUNT, DETERMINISTIC, FENCED, LANGUAGE, IMPLEMENTATION, " + //$NON-NLS-1$
+           "CLASS, JAR_ID, JAR_SCHEMA, PARM_STYLE, CONTAINS_SQL, " + //$NON-NLS-1$
+           "PROGRAM_TYPE, RESULT_SETS, THREADSAFE, FEDERATED, REMARKS, BNAME AS PACKAGENAME " + //$NON-NLS-1$
+           "FROM PP LEFT OUTER JOIN SYSIBM.SYSDEPENDENCIES PD ON " + //$NON-NLS-1$
+           "(PD.DSCHEMA = PP.PROCSCHEMA AND PD.DNAME = PP.SPECIFICNAME " + //$NON-NLS-1$
+           "AND PD.BTYPE = 'K') "; //$NON-NLS-1$
+        
+		try {
+			Statement s = connection.createStatement();
+            //LUW V7
+			//ResultSet r = s.executeQuery("SELECT LANGUAGE, DETERMINISTIC, SQL_DATA_ACCESS, PARAMETER_STYLE, FENCED, THREADSAFE, FEDERATED, RESULT_SETS, TEXT"
+            //                  + " FROM SYSCAT.ROUTINES"
+            //                  + " WHERE ROUTINESCHEMA='" + this.getSchema().getName() + "' AND ROUTINENAME='" + this.getName() + "'"
+            //                  + " AND SPECIFICNAME='" + this.getSpecificName() + "'");
+            
+            ResultSet r = s.executeQuery(describe_sp_query_v8
+					+ " WHERE PROCSCHEMA='" + LUWUtil.getIdentifier(this.getSchema().getName()) + "' AND PROCNAME='" + LUWUtil.getIdentifier(this.getName()) + "'" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+					+ " AND SPECIFICNAME='" + LUWUtil.getIdentifier(this.getSpecificName()) + "'"); //$NON-NLS-1$ //$NON-NLS-2$
+			while(r.next()) {
+				
+				final String deterministic = r.getString("DETERMINISTIC"); //$NON-NLS-1$
+				if(deterministic.equals("Y")) this.setDeterministic(true); //$NON-NLS-1$
+				else this.setDeterministic(false);
+				final String sql_data_access = r.getString("CONTAINS_SQL"); //$NON-NLS-1$
+                // 'C' - CONTAINS SQL, 'M' - MODIFIES SQL DATA, 'N' - No SQL, 'R' - READS SQL DATA
+                if (sql_data_access.equals("C")) this.sqlDataAccess = DataAccess.CONTAINS_SQL_LITERAL; //$NON-NLS-1$
+                else if (sql_data_access.equals("M")) this.sqlDataAccess = DataAccess.MODIFIES_SQL_DATA_LITERAL; //$NON-NLS-1$
+                else if (sql_data_access.equals("N")) this.sqlDataAccess = DataAccess.NO_SQL_LITERAL; //$NON-NLS-1$
+                else this.sqlDataAccess = DataAccess.READS_SQL_DATA_LITERAL;
+
+				final String paramStyle =  r.getString("PARM_STYLE"); //$NON-NLS-1$
+				if (paramStyle.equals("DB2SQL")) {
+					this.setParameterStyle("DB2SQL");
+				} else if (paramStyle.equals("DB2GENRL")) {
+					this.setParameterStyle("DB2GENRAL");
+				} else if (paramStyle.equals("GENERAL")) {
+					this.setParameterStyle("GENERAL");
+				} else if (paramStyle.equals("GNRLNULL")) {
+					this.setParameterStyle("GENERAL WITH NULLS");
+				} else if (paramStyle.equals("JAVA")) {
+					this.setParameterStyle("JAVA");
+				} else  {
+					this.setParameterStyle("SQL");
+				}
+				this.parameterStyle = paramStyle.trim();
+				
+// fenced in metamodel should be boolean - wait for the fix				
+				final String fenced = r.getString("FENCED"); //$NON-NLS-1$
+				//if(fenced.equals("Y")) this.fenced = true;
+                //TODO: hard-coded the constants for now. 
+                //if the method is not changed, we need to define the string constants
+                if (fenced.equals("Y")) //$NON-NLS-1$
+                    this.fenced = "FENCED"; //$NON-NLS-1$
+                else
+                    this.fenced = "NOT FENCED"; //$NON-NLS-1$
+
+                //TODO: hard-coded the constants for now. 
+                //if the method is not changed, we need to define the string constants
+                final String threadsafe = r.getString("THREADSAFE"); //$NON-NLS-1$
+                if (threadsafe.equals("Y")) //$NON-NLS-1$
+                    this.threadsafe = "THREADSAFE"; //$NON-NLS-1$
+                else
+                    this.threadsafe = "NOT THREADSAFE"; //$NON-NLS-1$
+				
+				final String federated = r.getString("FEDERATED"); //$NON-NLS-1$
+				if(federated.equals("Y")) this.federated = true; //$NON-NLS-1$
+				else this.federated = false;
+				
+				final int resultSets = r.getInt("RESULT_SETS"); //$NON-NLS-1$
+				this.maxResultSets = resultSets;
+			
+				final String packagename = r.getString("PACKAGENAME"); //$NON-NLS-1$
+				if (!"JAVA".equals(getLanguage())) { //$NON-NLS-1$
+				   db2Package = packagename;
+				   db2PackageLoaded = true;
+				}
+                
+                final String externalName = r.getString("IMPLEMENTATION"); //$NON-NLS-1$
+                if (!"JAVA".equals(getLanguage()) && !"SQL".equals(getLanguage()) ) { //$NON-NLS-1$
+                   setExternalName(externalName);
+                }
+
+				updateImplicitSchemaFlag();
+//				final String text = r.getString("TEXT");
+//				if (text != null) {
+//					//Source source = (Source) factory.create(SQLRoutinesPackage.eINSTANCE.getSource());
+//                    //The data development project needs DB2Source.
+//                    DB2Source source = DB2ModelFactory.eINSTANCE.createDB2Source();
+//					source.setBody(text);
+//                    if (packagename != null) {
+//                        source.setDb2PackageName(packagename);       
+//                    }                    
+//					super.getSource().add(source);	
+//				}                
+			}
+			r.close();
+			s.close();
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+        //Tt's appropriate to load source and java sp so that the object is completely loaded.
+        //There are situations (drop sp) when getJavaSP is called after the JAVA SP has
+        //been dropped from the DB and the query does not return any information. -- yehsh
+        //loadSource() needs to know the jar schema and jar id 
+        //call loadJavaProcedure() first to avoid querying the catalog twice. -- yehsh
+//        loadJavaProcedure();
+//        loadSource();
+		this.eSetDeliver(deliver);
+	}
+
+    private synchronized JavaProcedureInfo getJavaProcedureInfo() {
+        if (myJavaProcedureInfo != null) return myJavaProcedureInfo;
+        final Database database = this.getSchema().getDatabase();
+		final DatabaseDefinition databaseDefinition = RDBCorePlugin
+				.getDefault().getDatabaseDefinitionRegistry().getDefinition(
+						database);
+        
+		myJavaProcedureInfo = JavaProcedureProviderRegistry.INSTANCE.getProvider(
+				databaseDefinition).getProviderInstance(this,
+				this.getConnection());
+        return myJavaProcedureInfo;        
+    }
+    
+	private synchronized void loadSource() {
+		if(this.sourceLoaded) return;
+		this.sourceLoaded = true;        
+		
+        EList extList = super.getExtendedOptions();
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+
+		try {
+			String lang = getLanguage();
+			if("JAVA".equals(lang)) { //$NON-NLS-1$
+                JavaProcedureInfo javaProcedureInfo = getJavaProcedureInfo();
+                Source s = null;
+                if (javaProcedureInfo != null) {
+				    s = javaProcedureInfo.getSource();
+                }
+                else {
+                    s = DB2ModelFactory.eINSTANCE.createDB2Source();   
+                }
+                this.setSource(s);
+                //create extended options
+                DB2ExtendedOptions extOpts =DB2ModelFactory.eINSTANCE.createDB2ExtendedOptions();
+                if (javaProcedureInfo != null) {
+                    extOpts.setColid(javaProcedureInfo.getCollectionName());
+                }
+                extList.add(extOpts);                        
+			}
+            else if ("SQL".equals(lang)) { //$NON-NLS-1$
+                final String query = "SELECT TEXT, DEBUG_MODE FROM SYSCAT.ROUTINES "; //$NON-NLS-1$
+                Connection connection = this.getConnection();
+                Statement s = connection.createStatement();
+                ResultSet r = s.executeQuery(query 
+                        + " WHERE ROUTINESCHEMA='" + LUWUtil.getIdentifier(this.getSchema().getName()) + "' AND ROUTINENAME='" + LUWUtil.getIdentifier(this.getName()) + "'" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+                        + " AND SPECIFICNAME='" + LUWUtil.getIdentifier(this.getSpecificName()) + "'"); //$NON-NLS-1$ //$NON-NLS-2$
+                String text = "";
+                String debugMode = "";
+                while (r.next()) {
+					String expression = r.getString("TEXT"); //$NON-NLS-1$
+					if (expression != null) {
+						text += expression.trim()+" ";
+					}
+	                debugMode = r.getString("DEBUG_MODE");
+				}
+
+				//remove un-readable character
+				text = text.replaceAll("[\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u000b\u000c\u000e\u000f" +
+	               		"\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f]", " ");
+				DB2Source source = DB2ModelFactory.eINSTANCE.createDB2Source();
+				source.setBody(text);
+				if (getDb2Package() != null) {
+					source.setDb2PackageName(getDb2Package());
+				}
+				this.setSource(source);
+				r.close();
+                s.close();
+                
+                //create extended options
+                DB2ExtendedOptions extOpts =DB2ModelFactory.eINSTANCE.createDB2ExtendedOptions(); 
+                if ("ALLOW".equalsIgnoreCase(debugMode.trim())) {
+                	extOpts.setForDebug(true);
+                } else {
+                	extOpts.setForDebug(false);
+                }
+                
+                extList.add(extOpts);              
+            }
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+		
+		this.eSetDeliver(deliver);				
+	}
+	
+	private synchronized void loadJavaProcedure() {
+		if(this.javaProcedureLoaded) return;
+        this.javaProcedureLoaded = true;        
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			String lang = getLanguage();
+			if("JAVA".equals(lang)) { //$NON-NLS-1$
+                JavaProcedureInfo javaProcedureInfo = getJavaProcedureInfo();
+                if (javaProcedureInfo != null) {
+				    setJavaOptions(javaProcedureInfo.getJavaProcedure());
+                }
+			}
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+		
+		this.eSetDeliver(deliver);				
+	}
+
+    private synchronized void loadExternalName() {
+        if (this.externalNameLoaded) return;
+        this.externalNameLoaded = true;
+//        loadSource();
+//        loadJavaProcedure();
+        boolean deliver = this.eDeliver();
+        this.eSetDeliver(false);
+        JavaProcedureInfo javaProcedureInfo = getJavaProcedureInfo();
+        if (javaProcedureInfo != null) {
+            this.setExternalName(javaProcedureInfo.getExternalName());    
+        }        
+        this.eSetDeliver(deliver);
+    }
+    
+	private synchronized void loadDependencies() {
+		if(this.dependencyLoaded) return;
+		this.dependencyLoaded = true;
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			LUWCatalogProcedure.loadDependencies(this.getConnection(), super.getDependencies(), this);
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+		
+		this.eSetDeliver(deliver);		
+	}
+
+	private synchronized void loadParameters() {
+		if(this.parameterLoaded) return;
+		this.parameterLoaded = true;
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			LUWCatalogProcedure.loadParameters(this.getConnection(), super.getParameters(), this);
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+		
+		this.eSetDeliver(deliver);		
+	}
+	
+	private synchronized void loadPrivileges() {
+		if(this.privilegeLoaded) return;
+		this.privilegeLoaded = true;
+
+		EList privileges = super.getPrivileges();
+		for (Iterator iter= privileges.iterator(); iter.hasNext();){
+			Privilege privilege = (Privilege) iter.next();
+			privilege.setGrantor(null);
+			privilege.setGrantee(null);
+		}
+		
+		privileges.clear();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogProcedure.loadPrivileges(this.getConnection(),privileges, this,"");
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	
+	public static void loadDependencies(Connection connection, EList dependencyList, Routine routine) throws SQLException {
+		final Database database = routine.getSchema().getDatabase();
+		final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+		final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+			
+		Statement s = connection.createStatement();
+		ResultSet r = s.executeQuery("SELECT BSCHEMA, BNAME, BTYPE FROM SYSCAT.ROUTINEDEP WHERE ROUTINESCHEMA='" //$NON-NLS-1$
+					+ LUWUtil.getIdentifier(routine.getSchema().getName()) + "' AND ROUTINENAME='" + LUWUtil.getIdentifier(routine.getSpecificName()) + "'"); //$NON-NLS-1$ //$NON-NLS-2$
+		try {
+			while(r.next()) {
+				final String bschema = r.getString(1).trim();
+				final String bname   = r.getString(2);
+				final String btype   = r.getString(3);
+				SQLObject obj = null;
+				if(btype.equals("A")) {	//alias //$NON-NLS-1$
+					obj = LUWCatalogProcedure.getTable(routine, bschema, bname);
+				}
+				else if(btype.equals("F")) {	//function //$NON-NLS-1$
+					obj = LUWCatalogProcedure.getRountine(routine, bschema, bname);					
+				}
+				else if(btype.equals("O")) {	//privilege //$NON-NLS-1$
+					continue;
+				}
+				else if(btype.equals("R")) {	//structure type //$NON-NLS-1$
+					obj = LUWCatalogProcedure.getUserDefinedType(routine, bschema, bname);										
+				}
+				else if(btype.equals("S")) {	//MQT //$NON-NLS-1$
+					obj = LUWCatalogProcedure.getTable(routine, bschema, bname);					
+				}
+				else if(btype.equals("T")) {	//table //$NON-NLS-1$
+					obj = LUWCatalogProcedure.getTable(routine, bschema, bname);					
+				}
+				else if(btype.equals("U")) {	//typed table //$NON-NLS-1$
+					obj = LUWCatalogProcedure.getTable(routine, bschema, bname);
+				}
+				else if(btype.equals("V")) {	//view //$NON-NLS-1$
+					obj = LUWCatalogProcedure.getTable(routine, bschema, bname);					
+				}
+				else if(btype.equals("W")) {	//typed view //$NON-NLS-1$
+					obj = LUWCatalogProcedure.getTable(routine, bschema, bname);					
+				}
+				else if(btype.equals("X")) {	//index extension //$NON-NLS-1$
+					continue;
+				}
+				else if(btype.equals("N")) {	//Alias//$NON-NLS-1$
+					obj = LUWCatalogProcedure.getTable(routine, bschema, bname);					
+				}
+				else {
+					continue;
+				}
+				
+				if(obj == null) continue;
+				Dependency dep = (Dependency) factory.create(SQLSchemaPackage.eINSTANCE.getDependency());
+				dep.setTargetEnd(obj);
+				dependencyList.add(dep);
+			}
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+			
+		r.close();
+		s.close();
+	}
+
+	public static void loadParameters(Connection connection, EList parameterList, Routine routine) throws SQLException {
+		final Database database = routine.getSchema().getDatabase();
+		final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+		final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+			
+		String query="SELECT PARMNAME,ROWTYPE,LOCATOR,TYPESCHEMA,TYPENAME,LENGTH,SCALE,CODEPAGE,REMARKS,TARGET_TYPESCHEMA,TARGET_TYPENAME" + //$NON-NLS-1$
+				" FROM SYSCAT.ROUTINEPARMS" + //$NON-NLS-1$
+				" WHERE ROUTINESCHEMA='" + LUWUtil.getIdentifier(routine.getSchema().getName()) + "'" +  //$NON-NLS-1$ //$NON-NLS-2$
+				" AND ROUTINENAME='" + LUWUtil.getIdentifier(routine.getName()) + "'" + //$NON-NLS-1$ //$NON-NLS-2$
+				" AND SPECIFICNAME='" + LUWUtil.getIdentifier(routine.getSpecificName()) + "'" + //$NON-NLS-1$ //$NON-NLS-2$
+				" ORDER BY ORDINAL"; //$NON-NLS-1$
+
+		Statement s = connection.createStatement();
+		ResultSet r = s.executeQuery(query);
+		try {
+			while(r.next()) {
+				
+				LUWCatalogParameter parameter = new LUWCatalogParameter();
+				final String name = r.getString("PARMNAME"); //$NON-NLS-1$
+				parameter.setName(name);
+
+				final String rowtype = r.getString("ROWTYPE").trim(); //$NON-NLS-1$
+				if (rowtype.equals("B")){ //$NON-NLS-1$
+					parameter.setMode(ParameterMode.INOUT_LITERAL);
+				} else if (rowtype.equals("O")) { //$NON-NLS-1$
+					parameter.setMode(ParameterMode.OUT_LITERAL);
+				} else if (rowtype.equals("P")) { //$NON-NLS-1$
+					parameter.setMode(ParameterMode.IN_LITERAL);
+				}
+
+				final String locator = r.getString("LOCATOR"); //$NON-NLS-1$
+				if (locator.equals("Y")) //$NON-NLS-1$
+					parameter.setLocator(true);
+				else 
+					parameter.setLocator(false);
+
+				String typeName = r.getString("TYPENAME"); //$NON-NLS-1$
+				if (typeName.equalsIgnoreCase("FLOAT")){ //$NON-NLS-1$
+					int length = r.getInt("LENGTH"); //$NON-NLS-1$
+					if (length ==4) typeName="REAL"; //$NON-NLS-1$
+					else typeName="DOUBLE"; //$NON-NLS-1$
+				}
+				PredefinedDataTypeDefinition typeDefinition = databaseDefinition.getPredefinedDataTypeDefinition(typeName);
+				if(typeDefinition != null) {
+					
+					if (typeDefinition.getPrimitiveType().getValue() == PrimitiveType.CHARACTER) {
+						final int codePage = r.getInt(8);
+						if(codePage == 0) {
+							typeDefinition = databaseDefinition.getPredefinedDataTypeDefinition("CHAR () FOR BIT DATA"); //$NON-NLS-1$
+						}
+					}
+					else if (typeDefinition.getPrimitiveType().getValue() == PrimitiveType.CHARACTER_VARYING) {
+						final int codePage = r.getInt(8);
+						if(codePage == 0) {
+							if (typeName.equals("LONG VARCHAR")){
+								typeDefinition = databaseDefinition.getPredefinedDataTypeDefinition("LONG VARCHAR FOR BIT DATA"); //$NON-NLS-1$
+							} else {
+								typeDefinition = databaseDefinition.getPredefinedDataTypeDefinition("VARCHAR () FOR BIT DATA"); //$NON-NLS-1$
+							}
+						}
+
+					}
+
+					
+					PredefinedDataType 	type = databaseDefinition.getPredefinedDataType(typeDefinition);
+					if(typeDefinition.isLengthSupported()) {
+						final int length = r.getInt("LENGTH"); //$NON-NLS-1$
+						EStructuralFeature feature = type.eClass().getEStructuralFeature("length");  //$NON-NLS-1$
+						type.eSet(feature, new Integer(length));
+					}
+					else if(typeDefinition.isPrecisionSupported()) {
+						if (typeName.equals("TIMESTAMP")) {
+							int length = r.getInt("SCALE");
+							EStructuralFeature feature = type.eClass().getEStructuralFeature("fractionalSecondsPrecision"); //$NON-NLS-1$
+							type.eSet(feature, new Integer(length));
+						}
+						else {
+							int length = r.getInt("LENGTH");
+							if (typeName.equals("DECFLOAT")) {
+								if (length == 8) length = 16;
+								else length = 34;
+							}
+							EStructuralFeature feature = type.eClass().getEStructuralFeature("precision"); //$NON-NLS-1$
+							type.eSet(feature, new Integer(length));
+						}
+					}
+					
+					if(typeDefinition.isScaleSupported()) {
+						final int length = r.getInt("SCALE"); //$NON-NLS-1$
+						EStructuralFeature feature = type.eClass().getEStructuralFeature("scale"); //$NON-NLS-1$
+						type.eSet(feature, new Integer(length));
+					}
+					
+					parameter.setContainedType(type);
+				}
+				else {
+					if (typeName.equals("REFERENCE")){ //$NON-NLS-1$
+						final String typeSchemaName = r.getString("TARGET_TYPESCHEMA").trim(); //$NON-NLS-1$
+						final String udtName = r.getString("TARGET_TYPENAME"); //$NON-NLS-1$
+						parameter.setReferencedType(LUWCatalogProcedure.getUserDefinedType(routine,typeSchemaName,udtName));
+					} else {
+						final String typeSchemaName = r.getString("TYPESCHEMA").trim(); //$NON-NLS-1$
+						parameter.setReferencedType(LUWCatalogProcedure.getUserDefinedType(routine,typeSchemaName,typeName));
+					}
+				}
+				
+				parameter.setDescription(r.getString("REMARKS")); //$NON-NLS-1$
+				
+				parameterList.add(parameter);
+			}
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+			
+		r.close();
+		s.close();
+	}
+	
+	public static void loadPrivileges(Connection connection, EList privilegeList,Routine routine, String granteeFilter) throws SQLException {
+		final Schema schema = routine.getSchema();
+		final Database database = ModelHelper.getDatabase(schema);
+
+		int options = ((LUWCatalogDatabase)database).getLoadOptions();
+		if ((options & DatabaseREProvider.EXCLUDE_ACCESS_CONTROL)== DatabaseREProvider.EXCLUDE_ACCESS_CONTROL) return;
+
+		Statement s = connection.createStatement();
+		String query = "SELECT GRANTOR,GRANTEE,GRANTEETYPE" +
+					",EXECUTEAUTH" +
+					" FROM SYSCAT.ROUTINEAUTH" + 
+					" WHERE SCHEMA='" + LUWUtil.getIdentifier(schema.getName()) + "'" +
+					" AND SPECIFICNAME='" + LUWUtil.getIdentifier(routine.getSpecificName()) + "'" ;
+		if (granteeFilter != null && !"".equals(granteeFilter)) query += " AND " + granteeFilter;
+
+		ResultSet r = s.executeQuery(query);
+		try {
+			String userName = connection.getMetaData().getUserName();
+			while(r.next()) {
+				final String grantorId = r.getString("GRANTOR").trim();
+				AuthorizationIdentifier grantor = LUWCatalogDatabase.getAuthorizationId(database, grantorId,null);
+				final String granteeId = r.getString("GRANTEE").trim();
+				AuthorizationIdentifier grantee = null;
+				final String granteeType = r.getString("GRANTEETYPE");
+				if ("G".equals(granteeType)) {
+					grantee = LUWCatalogDatabase.getAuthorizationId(database, granteeId, "G");
+				} else if ("R".equals(granteeType)) {
+					grantee = LUWCatalogDatabase.getAuthorizationId(database, granteeId, "R");
+				} else {
+					grantee = LUWCatalogDatabase.getAuthorizationId(database, granteeId, "U");
+				}
+				boolean isSystemGranted = granteeId.equalsIgnoreCase(userName);
+				final String alterAuth = r.getString("EXECUTEAUTH");
+				if (alterAuth.equals("N")) {
+				} else {
+					LUWCatalogPrivilege privilege = new LUWCatalogPrivilege();
+					privilege.setAction(LUWCatalogConstant.PRIVILEGE_EXECUTE);
+					if (alterAuth.equals("G")) {
+						privilege.setGrantable(true);
+					}
+					privilegeList.add(privilege);
+					privilege.setGrantor(grantor);
+					privilege.setGrantee(grantee);
+					LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+				}
+
+			}
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		r.close();
+		s.close();
+	}
+
+
+	public static Schema getSchema(Routine routine, String schemaName) {
+		Schema s = routine.getSchema();
+		if(s.getName().equals(schemaName)) return s;
+		Database db = s.getDatabase();
+		if (db instanceof LUWCatalogDatabase){
+			s = ((LUWCatalogDatabase)db).getSchema(schemaName);
+			if (s != null) return s;
+		} 
+		Iterator it = db.getSchemas().iterator();
+		while(it.hasNext()) {
+			s = (Schema) it.next();
+			if(s.getName().equals(schemaName)) return s;			
+		}
+		
+		Schema schema = new LUWCatalogSchema();
+		schema.setName(schemaName);
+		schema.setDatabase(db);
+
+		if (db instanceof LUWCatalogDatabase){
+			((LUWCatalogDatabase)db).cacheSchema(schema);
+		}
+		
+		return schema;
+		
+		
+	}
+	
+	public static Table getTable(Routine routine, String schemaName, String tableName) {
+		Schema schema = LUWCatalogProcedure.getSchema(routine, schemaName);
+		if(schema instanceof LUWCatalogSchema){
+			Table t = ((LUWCatalogSchema)schema).getTable(schemaName,tableName);
+			if (t != null) return t;
+		} 
+		
+		Iterator it = schema.getTables().iterator();
+		while(it.hasNext()) {
+			Table table = (Table) it.next();
+			if(table.getName().equals(tableName)) return table;			
+		}
+
+		return null;
+	
+	}
+		
+	public static Routine getRountine(Routine routine, String schemaName, String specificName) {
+		Schema schema = LUWCatalogProcedure.getSchema(routine, schemaName);
+		Iterator it = schema.getRoutines().iterator();
+		while(it.hasNext()) {
+			Routine r = (Routine) it.next();
+			if(specificName.equals(r.getSpecificName())) return r;			
+		}
+		return null;
+	}
+
+	public static UserDefinedType getUserDefinedType(Routine routine, String schemaName, String userDefinedTypeName) {
+		Schema schema = LUWCatalogProcedure.getSchema(routine, schemaName);
+		Iterator it = schema.getUserDefinedTypes().iterator();
+		while(it.hasNext()) {
+			UserDefinedType userDefinedType = (UserDefinedType) it.next();
+			if(userDefinedType.getName().equals(userDefinedTypeName)) return userDefinedType;			
+		}
+		return null;		
+	}
+	
+	
+	public static Trigger getTrigger(Routine routine, String schemaName, String tabName, String triggerName) {
+		Table table = LUWCatalogProcedure.getTable(routine, schemaName,tabName);
+		if (table != null) {
+			Iterator it = table.getTriggers().iterator();
+			while(it.hasNext()) {
+				Trigger r = (Trigger) it.next();
+				if(r.getName().equals(triggerName)) return r;			
+			}
+		}
+		return null;
+	}
+	
+	public static TableConstraint getTableConstraint(Routine routine, String schemaName,String  tableName, String constName) {
+		Table t = LUWCatalogProcedure.getTable(routine, schemaName,tableName);
+		if (!(t instanceof BaseTable)) return null;
+		Iterator it = ((BaseTable)t).getConstraints().iterator();
+		while(it.hasNext()) {
+			TableConstraint constraint = (TableConstraint) it.next();
+			if(constraint.getName().equals(constName)) return constraint;			
+		}
+
+		return null;
+	}
+
+	public static DB2Package getDb2Package(Routine routine, String schemaName, String pkgName, String pkgUniqueID) {
+		Schema schema = LUWCatalogProcedure.getSchema(routine, schemaName);
+		if(schema instanceof LUWCatalogSchema){
+			return  ((LUWCatalogSchema)schema).getDB2Package(pkgName, pkgUniqueID);
+		} 
+		
+		return null;
+	}
+    
+    /**
+    * If the routine is SQL, discover if the routine has been created without
+    * a schema qualifier. 
+    * <p>
+    * @param aRoutine The routine to analyze
+    * @return <code>true</code> if the routine was created without a schema qualifier.
+    */
+   private void updateImplicitSchemaFlag() {
+      boolean b = false;
+      if (this != null) {
+         b = this.isImplicitSchema();
+         if (!b && this.getLanguage().equalsIgnoreCase("SQL")) { //$NON-NLS-1$
+            Source src = this.getSource();
+            String body = src.getBody();
+            if (body != null) {
+               String[] tokens = body.split(" "); //$NON-NLS-1$
+               for (int i = 0; i < tokens.length; i++) {
+                  if (tokens[i].indexOf('.') > -1) {
+                     break; // the implicit flag is false by default
+                  }
+                  else if (tokens[i].indexOf('(') > -1) {
+                     b = true;
+                     break;
+                  }
+               }
+            }
+         }
+      }
+      setImplicitSchema(b);
+   }
+    
+	private Collection getImpactedObjects(){
+		Collection impacts = new ArrayList();
+		Connection connection = this.getConnection();
+
+		impacts.addAll(LUWCatalogProcedure.getImpactedTriggers(connection, this));
+		impacts.addAll(LUWCatalogProcedure.getImpactedTables(connection, this));
+		impacts.addAll(LUWCatalogProcedure.getImpactedConstraints(connection, this));
+		impacts.addAll(LUWCatalogProcedure.getImpactedRoutines(connection, this));
+		impacts.addAll(LUWCatalogProcedure.getImpactedPackages(connection, this));
+
+		return impacts;
+	}
+
+	protected static Collection getImpactedTriggers(Connection connection, Routine routine) {
+		Collection impacts = new ArrayList();
+		try {
+			Statement s = connection.createStatement();
+			String query = "SELECT DISTINCT A.TABSCHEMA, A.TABNAME, A.TRIGNAME" +
+					" FROM SYSCAT.TRIGGERS A, SYSCAT.TRIGDEP B" +
+					" WHERE (B.BNAME='" + LUWUtil.getIdentifier(routine.getSpecificName()) + "'" +
+					" AND B.BSCHEMA='" + LUWUtil.getIdentifier(routine.getSchema().getName()) + "'" +
+					" AND B.BTYPE='F'" +
+					" AND A.TRIGNAME=B.TRIGNAME" +
+					" AND A.TRIGSCHEMA=B.TRIGSCHEMA)" +
+					" FOR FETCH ONLY";
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String trigName = r.getString("TRIGNAME").trim();
+				final String tabName = r.getString("TABNAME").trim();
+				final String schemaName = r.getString("TABSCHEMA").trim();
+				Trigger trigger = LUWCatalogProcedure.getTrigger(routine, schemaName, tabName, trigName);
+				if (trigger !=  null) {
+					impacts.add(trigger);
+				}
+			}
+			r.close();
+			s.close();
+		}catch(SQLException e) {
+//			e.printStackTrace();
+		}
+		return impacts;
+	}
+
+	protected static Collection getImpactedTables(Connection connection, Routine routine) {
+		Collection impacts = new ArrayList();
+		try {
+			Statement s = connection.createStatement();
+			String query = "SELECT DISTINCT TABNAME, TABSCHEMA" +
+					" FROM SYSCAT.TABDEP" +
+					" WHERE BTYPE='F'" +
+					" AND BNAME ='" + LUWUtil.getIdentifier(routine.getSpecificName()) + "'" +
+					" AND BSCHEMA = '" + LUWUtil.getIdentifier(routine.getSchema().getName()) + "'" +
+					" FOR FETCH ONLY";
+			
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String tabName = r.getString("TABNAME").trim();
+				final String schemaName = r.getString("TABSCHEMA").trim();
+				Table t = LUWCatalogProcedure.getTable(routine, schemaName, tabName);
+				if (t !=  null) {
+					impacts.add(t);
+				}
+			}
+			r.close();
+			s.close();
+		}catch(SQLException e) {
+//			e.printStackTrace();
+		}
+		return impacts;
+	}
+
+	protected static Collection getImpactedConstraints(Connection connection, Routine routine) {
+		Collection impacts = new ArrayList();
+		try {
+			Statement s = connection.createStatement();
+			String query = "SELECT CONSTNAME,TABNAME,TABSCHEMA" +
+					" FROM SYSCAT.CONSTDEP" +
+					" WHERE BTYPE='F'" +
+					" AND BNAME='" + LUWUtil.getIdentifier(routine.getSpecificName()) + "'" +
+					" AND BSCHEMA='" + LUWUtil.getIdentifier(routine.getSchema().getName()) + "'" +
+					" FOR FETCH ONLY";
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String constName = r.getString("CONSTNAME").trim();
+				final String tabName = r.getString("TABNAME").trim();
+				final String schemaName = r.getString("TABSCHEMA").trim();
+				TableConstraint constraint = LUWCatalogProcedure.getTableConstraint(routine, schemaName, tabName, constName);
+				if (constraint !=  null) {
+					impacts.add(constraint);
+				}
+			}
+			r.close();
+			s.close();
+		}catch(SQLException e) {
+//			e.printStackTrace();
+		}
+		return impacts;
+	}
+
+	protected static Collection getImpactedRoutines(Connection connection, Routine routine) {
+		Collection impacts = new ArrayList();
+		try {
+			Statement s = connection.createStatement();
+			String query = "SELECT ROUTINENAME,ROUTINESCHEMA" +
+					" FROM SYSCAT.ROUTINEDEP" +
+					" WHERE BTYPE='F'" +
+					" AND BNAME='" + LUWUtil.getIdentifier(routine.getSpecificName()) + "'" +
+					" AND BSCHEMA='" + LUWUtil.getIdentifier(routine.getSchema().getName()) + "'" +
+					" FOR FETCH ONLY";
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String routineName = r.getString("ROUTINENAME").trim();
+				final String schemaName = r.getString("ROUTINESCHEMA").trim();
+				Routine p = LUWCatalogProcedure.getRountine(routine, schemaName, routineName);
+				if (p !=  null) {
+					impacts.add(p);
+				}
+			}
+			r.close();
+			s.close();
+		}catch(SQLException e) {
+//			e.printStackTrace();
+		}
+		return impacts;
+	}
+	
+	protected static Collection getImpactedPackages(Connection connection, Routine routine) {
+		Collection impacts = new ArrayList();
+		try {
+			Statement s = connection.createStatement();
+			String query = "SELECT PKGNAME, PKGSCHEMA, HEX(UNIQUE_ID) AS UID" +
+					" FROM SYSCAT.PACKAGEDEP" +
+					" WHERE BTYPE = 'F'" +
+					" AND BNAME='" + LUWUtil.getIdentifier(routine.getSpecificName()) + "'" +
+					" AND BSCHEMA='" + LUWUtil.getIdentifier(routine.getSchema().getName()) + "'" +
+					" FOR FETCH ONLY";
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String pkgName = r.getString("PKGNAME").trim();
+				final String schemaName = r.getString("PKGSCHEMA").trim();
+				final String pkgUniqueID = r.getString("UID").trim();
+				DB2Package p = LUWCatalogProcedure.getDb2Package(routine, schemaName, pkgName, pkgUniqueID);
+				if (p !=  null) {
+					impacts.add(p);
+				}
+			}
+			r.close();
+			s.close();
+		}catch(SQLException e) {
+			//e.printStackTrace();
+		}
+		return impacts;
+	}
+	
+	public static Collection getStatistics(Connection connection, Routine routine){
+		Collection statistics = new ArrayList();
+		try {
+			String query = "SELECT IOS_PER_INVOC,INSTS_PER_INVOC,IOS_PER_ARGBYTE,INSTS_PER_ARGBYTE" +
+				",PERCENT_ARGBYTES,INITIAL_IOS,INITIAL_INSTS,CARDINALITY,SELECTIVITY" +
+				" FROM SYSSTAT.ROUTINES" + 
+				" WHERE ROUTINESCHEMA='" + LUWUtil.getIdentifier(routine.getSchema().getName()) + "'" +
+				" AND ROUTINENAME ='" + LUWUtil.getIdentifier(routine.getName()) + "'" +
+				" AND SPECIFICNAME ='" + LUWUtil.getIdentifier(routine.getSpecificName()) + "'" +
+				" FOR FETCH ONLY";
+			
+			Statement s = connection.createStatement();
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				CatalogStatistics stats = null;
+
+				final float ios_per_Invoc = r.getFloat("IOS_PER_INVOC");
+				if (ios_per_Invoc != -1) {
+					stats = new CatalogStatistics("IOS_PER_INVOC",LUWCatalogMessages.STAT_IOS_PER_INVOC,LUWCatalogMessages.STAT_IOS_PER_INVOC_DES,ios_per_Invoc,"SYSSTAT.ROUTINES");
+					statistics.add(stats);
+				}
+
+				final float insts_per_Invoc = r.getFloat("INSTS_PER_INVOC");
+				if (insts_per_Invoc != -1) {
+					stats = new CatalogStatistics("INSTS_PER_INVOC",LUWCatalogMessages.STAT_INSTS_PER_INVOC,LUWCatalogMessages.STAT_INSTS_PER_INVOC_DES,insts_per_Invoc,"SYSSTAT.ROUTINES");
+					statistics.add(stats);
+				}
+
+				final float ios_per_Argbyte = r.getFloat("IOS_PER_ARGBYTE");
+				if (ios_per_Argbyte != -1) {
+					stats = new CatalogStatistics("IOS_PER_ARGBYTE",LUWCatalogMessages.STAT_IOS_PER_ARGBYTE,LUWCatalogMessages.STAT_IOS_PER_ARGBYTE_DES,ios_per_Argbyte,"SYSSTAT.ROUTINES");
+					statistics.add(stats);
+				}
+
+				final float insts_per_Argbyte = r.getFloat("INSTS_PER_ARGBYTE");
+				if (insts_per_Argbyte != -1) {
+					stats = new CatalogStatistics("INSTS_PER_ARGBYTE",LUWCatalogMessages.STAT_INSTS_PER_ARGBYTE,LUWCatalogMessages.STAT_INSTS_PER_ARGBYTE_DES,insts_per_Argbyte,"SYSSTAT.ROUTINES");
+					statistics.add(stats);
+				}
+				
+				final int percent_Argbyte = r.getInt("PERCENT_ARGBYTES");
+				if (percent_Argbyte != -1) {
+					stats = new CatalogStatistics("PERCENT_ARGBYTES",LUWCatalogMessages.STAT_PERCENT_ARGBYTE,LUWCatalogMessages.STAT_PERCENT_ARGBYTE_DES,percent_Argbyte,"SYSSTAT.ROUTINES");
+					statistics.add(stats);
+				}
+
+
+				final float initial_ios = r.getFloat("INITIAL_IOS");
+				if (initial_ios != -1) {
+					stats = new CatalogStatistics("INITIAL_IOS",LUWCatalogMessages.STAT_INITIAL_IOS,LUWCatalogMessages.STAT_INITIAL_IOS_DES,initial_ios,"SYSSTAT.ROUTINES");
+					statistics.add(stats);
+				}
+				
+				final float initial_insts = r.getFloat("INITIAL_INSTS");
+				if (initial_insts != -1) {
+					stats = new CatalogStatistics("INITIAL_INSTS",LUWCatalogMessages.STAT_INITIAL_INSTS,LUWCatalogMessages.STAT_INITIAL_INSTS_DES,initial_insts,"SYSSTAT.ROUTINES");
+					statistics.add(stats);
+				}
+				
+				final BigInteger card = r.getBigDecimal("CARDINALITY").toBigInteger();
+				if (card.intValue() != -1) {
+					stats = new CatalogStatistics("CARDINALITY",LUWCatalogMessages.STAT_ROUTINE_CARDINALITY,LUWCatalogMessages.STAT_ROUTINE_CARDINALITY_DES,card,"SYSSTAT.ROUTINES");
+					statistics.add(stats);
+				}
+
+				final float selectivity= r.getFloat("SELECTIVITY");
+				if (selectivity != -1) {
+					stats = new CatalogStatistics("SELECTIVITY",LUWCatalogMessages.STAT_SELECTIVITY,LUWCatalogMessages.STAT_SELECTIVITY_DES,selectivity,"SYSSTAT.ROUTINES");
+					statistics.add(stats);
+				}
+			}
+			r.close();
+			s.close();
+		}catch(SQLException e) {
+			//e.printStackTrace();
+		}
+		return statistics;
+	}
+
+	protected void getPrivilegesWithFilter(String granteeFilter) throws SQLException {
+		if (this.privilegeLoaded) return;
+		EList privileges = super.getPrivileges();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogProcedure.loadPrivileges(this.getConnection(), privileges, this,granteeFilter);
+		}catch( Exception e){
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	private boolean loaded = false;
+	private boolean dependencyLoaded = false;
+	private boolean parameterLoaded = false;
+	private boolean sourceLoaded = false;
+	private boolean javaProcedureLoaded = false;
+    private boolean externalNameLoaded = false;
+    private boolean privilegeLoaded = false;
+    private JavaProcedureInfo myJavaProcedureInfo;
+    private boolean db2PackageLoaded = false;
+    protected String db2Package;
+	private boolean statisticsLoaded = false;
+	private boolean impactsLoaded = false;
+
+	private Collection impacts = new ArrayList();
+	private Collection statistics = new ArrayList();
+
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogProvider.java
new file mode 100644
index 0000000..27abb1a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogProvider.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExecutableExtension;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogProvider;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+public class LUWCatalogProvider implements ICatalogProvider, IExecutableExtension {
+    public void setInitializationData(IConfigurationElement config, String propertyName, Object data) throws CoreException {
+        this.product = config.getAttribute("product"); //$NON-NLS-1$
+        this.version = config.getAttribute("version"); //$NON-NLS-1$
+    }
+
+    public Database getCatalogDatabase(Connection connection) {
+        Database database = new LUWCatalogDatabase(connection);
+        database.setVendor(this.product);
+        database.setVersion(this.version);
+        return database;
+    }
+    
+    private String product;
+    private String version;
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogRelationalRemoteDataSet.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogRelationalRemoteDataSet.java
new file mode 100644
index 0000000..5623530
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogRelationalRemoteDataSet.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.RelationalRemoteDataSetImpl;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.util.TableToRemoteDataSetHelper;
+
+/**
+ * @author Geetika
+ *
+ **/
+public class LUWCatalogRelationalRemoteDataSet extends RelationalRemoteDataSetImpl{
+	String remoteSchemaName = null;
+	String remoteTableName = null;
+	
+	public LUWCatalogRelationalRemoteDataSet() {
+		super();
+		this.eAdapters().add(TableToRemoteDataSetHelper.INVERSE_TABLE_ADAPTER);
+
+		// A side effect of the add is to set the target of the INVERSE_TABLE_ADAPTER 
+		// to point back to <<this>>. This causes garbage collection problems because 
+		// INVERSE_TABLE_ADAPTER is a singleton. Need to unset the target reference...
+		TableToRemoteDataSetHelper.INVERSE_TABLE_ADAPTER.setTarget(null);
+	}
+	
+
+	//only created if ecattable is created, in which case it will get set
+	//nothing to do to help - I can't get up to the right nickname to force a table load of the remote table
+	/**
+	 * @return Returns the remoteSchemaName.
+	 */
+	public String getRemoteSchemaName() {
+		return remoteSchemaName;
+	}
+	/**
+	 * @param remoteSchemaName The remoteSchemaName to set.
+	 */
+	public void setRemoteSchemaName(String remoteSchemaName) {
+		this.remoteSchemaName = remoteSchemaName;
+	}
+	/**
+	 * @return Returns the remoteTableName.
+	 */
+	public String getRemoteTableName() {
+		return remoteTableName;
+	}
+	/**
+	 * @param remoteTableName The remoteTableName to set.
+	 */
+	public void setRemoteTableName(String remoteTableName) {
+		this.remoteTableName = remoteTableName;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogRelationalRemoteServer.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogRelationalRemoteServer.java
new file mode 100644
index 0000000..a44031b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogRelationalRemoteServer.java
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.RelationalRemoteServerImpl;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.util.DatabaseToRemoteServerHelper;
+
+/**
+ * @author Geetika
+ */
+public class LUWCatalogRelationalRemoteServer extends RelationalRemoteServerImpl{
+	private static RemoteCatalogProvider remoteCatalogProvider = null;
+	private static boolean remoteCatalogProviderLoaded = false;
+	private boolean remoteServerLoaded = false;
+
+	public LUWCatalogRelationalRemoteServer() {
+		super();
+		this.eAdapters().add(DatabaseToRemoteServerHelper.INVERSE_DATABASE_ADAPTER);
+
+		// A side effect of the add is to set the target of the INVERSE_DATABASE_ADAPTER 
+		// to point back to <<this>>. This causes garbage collection problems because 
+		// INVERSE_DATABASE_ADAPTER is a singleton. Need to unset the target reference...
+		DatabaseToRemoteServerHelper.INVERSE_DATABASE_ADAPTER.setTarget(null);
+		
+	}
+	public static RemoteCatalogProvider getRemoteCatalogProvider() {
+		if(!remoteCatalogProviderLoaded) {
+			remoteCatalogProviderLoaded = true;
+			IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+			IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("com.ibm.datatools.db2.luw", "remoteCatalog"); //$NON-NLS-1$ //$NON-NLS-2$
+			IExtension[] extensions = extensionPoint.getExtensions();
+			if(extensions.length == 1) {
+				IConfigurationElement[] configElements = extensions[0].getConfigurationElements();
+				try {
+					remoteCatalogProvider = (RemoteCatalogProvider) configElements[0].createExecutableExtension("class"); //$NON-NLS-1$
+				}
+				catch(Exception e) {
+				}
+			}
+		}
+		return remoteCatalogProvider;
+	}
+	public Database getDatabase() {
+		if(!databaseLoaded) this.loadDatabase();
+		return this.database;
+	}
+	
+	private synchronized void loadDatabase() {
+		if(this.databaseLoaded) return;
+		RemoteCatalogProvider p = getRemoteCatalogProvider();
+		if(p!= null) {
+			this.database = p.getDatabase(this);
+		}
+		this.databaseLoaded = true;
+	}
+	
+	private boolean databaseLoaded = false;
+	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogRole.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogRole.java
new file mode 100644
index 0000000..53bccfa
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogRole.java
@@ -0,0 +1,251 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.enablement.ibm.catalog.ICatalogAuthorizationIdentifier;
+import org.eclipse.datatools.enablement.ibm.catalog.IDatabaseObject;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWUtil;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.AuthorizationIdentifier;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Role;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.RoleAuthorization;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.SQLAccessControlPackage;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.impl.RoleImpl;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWCatalogRole extends RoleImpl implements ICatalogObject,ICatalogAuthorizationIdentifier,IDatabaseObject  {
+
+	public void refresh() {
+		
+		if (roleAuthorizationLoaded) {
+			this.roleAuthorization.clear();
+			this.roleAuthorizationLoaded = false;
+		}
+		if (this.receivedPrivilegesLoaded) {
+			this.receivedPrivilege.clear();
+			this.receivedPrivilegesLoaded = false;
+		}
+		if (this.receivedRoleAuthorizationLoaded) {
+			this.receivedRoleAuthorization.clear();
+			this.receivedRoleAuthorizationLoaded = false;
+		}
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database database = this.getDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+	
+	public Database getCatalogDatabase() {
+		return this.getDatabase();
+	}
+
+	public void refresh(int refreshType){
+		if ((IDatabaseObject.IMPACTS & refreshType)  == IDatabaseObject.IMPACTS) {
+			this.impacts.clear();
+			this.impactsLoaded = false;
+		}
+	}
+
+	public ICatalogObject[] getImpacted(){
+		if (!this.impactsLoaded) {
+			this.impacts = this.getImpactedObjects();
+			this.impactsLoaded = true;
+		}
+		ICatalogObject[] objs = new ICatalogObject[impacts.size()];
+		impacts.toArray(objs);
+		return objs;
+	}
+
+	public Collection getStatistics(){
+		return new ArrayList();
+	}
+
+	public EList getRoleAuthorization() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getRoleAuthorization();
+		} else {
+			if (!this.roleAuthorizationLoaded) this.loadRoleAuthorization();
+			return super.roleAuthorization;
+		}
+	}
+	/*
+	public EList getReceivedPrivilege(){
+		if (!this.receivedPrivilegesLoaded) this.loadReceivedPrivilege();
+		return this.receivedPrivilege;
+	}
+	*/
+	
+	public EList getReceivedRoleAuthorization(){
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getReceivedRoleAuthorization();
+		} else {
+			if (!this.receivedRoleAuthorizationLoaded) this.loadReceivedRoleAuthorization();
+			return this.receivedRoleAuthorization;
+		}
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == SQLAccessControlPackage.ROLE__ROLE_AUTHORIZATION) {
+			this.getRoleAuthorization();
+		} else if(id == SQLAccessControlPackage.ROLE__RECEIVED_PRIVILEGE) {
+			this.getReceivedPrivilege();
+		} else if(id == SQLAccessControlPackage.ROLE__RECEIVED_ROLE_AUTHORIZATION) {
+			this.getReceivedRoleAuthorization();
+		}
+
+		return super.eIsSet(eFeature);
+	}
+	
+	private synchronized void loadRoleAuthorization() {
+		if(this.roleAuthorizationLoaded) return;
+		this.roleAuthorizationLoaded = true;
+
+		EList roleAuths = super.getRoleAuthorization();
+
+		final Database database = this.getDatabase();
+		final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+		final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+
+		try {
+			String query = "SELECT GRANTOR,GRANTORTYPE,GRANTEE,GRANTEETYPE,ADMIN" +
+					" FROM SYSCAT.ROLEAUTH" +
+					" WHERE ROLENAME ='" + LUWUtil.getIdentifier(this.getName()) + "'";
+			
+			Statement s = this.getConnection().createStatement();
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				RoleAuthorization roleAuth =  (RoleAuthorization) factory.create(SQLAccessControlPackage.eINSTANCE.getRoleAuthorization());
+
+				final String granteeId = r.getString("GRANTEE").trim();
+				AuthorizationIdentifier grantee = null;
+				final String granteeType = r.getString("GRANTEETYPE");
+				if ("G".equals(granteeType)) {
+					grantee = LUWCatalogDatabase.getAuthorizationId(database, granteeId, "G");
+				} else if ("R".equals(granteeType)){
+					grantee = LUWCatalogDatabase.getAuthorizationId(database, granteeId, "R");
+				} else {
+					grantee = LUWCatalogDatabase.getAuthorizationId(database, granteeId, "U");
+				}
+
+				final String grantorId = r.getString("GRANTOR").trim();
+				AuthorizationIdentifier grantor = null;
+				final String grantorType = r.getString("GRANTORTYPE");
+				if ("G".equals(grantorType)) {
+					grantor = LUWCatalogDatabase.getAuthorizationId(database, grantorId, "G");
+				} else if ("R".equals(grantorType)){
+					grantor = LUWCatalogDatabase.getAuthorizationId(database, grantorId, "R");
+				} else {
+					grantor = LUWCatalogDatabase.getAuthorizationId(database, grantorId, "U");
+				}
+
+				final String admin = r.getString("ADMIN");
+				if ("Y".equals(admin)){
+					roleAuth.setGrantable(true);
+				} else {
+					roleAuth.setGrantable(false);
+				}
+				roleAuth.setGrantee(grantee);
+				roleAuth.setGrantor(grantor);
+				roleAuths.add(roleAuth);
+			}
+			r.close();
+			s.close();
+			
+		}catch(Exception e){
+			e.printStackTrace();
+		}
+		
+
+		this.eSetDeliver(deliver);
+		
+	}
+
+	private synchronized void loadReceivedRoleAuthorization() {
+		if(this.receivedRoleAuthorizationLoaded) return;
+		this.receivedRoleAuthorizationLoaded = true;
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+
+		LUWCatalogUser.loadReceivedRoleAuthorization(this.getConnection(), super.getReceivedRoleAuthorization(),this);
+
+		this.eSetDeliver(deliver);
+		
+	}
+
+	private synchronized void loadReceivedPrivilege() {
+		if(this.receivedPrivilegesLoaded) return;
+		this.receivedPrivilegesLoaded = true;
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogUser.loadReceivedPrivilege(this.getConnection(),super.getReceivedPrivilege(), this,"R");
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	private Collection getImpactedObjects(){
+		Collection impacts = new ArrayList();
+		Connection connection = this.getConnection();
+		impacts.addAll(LUWCatalogRole.getImpactedAuthorizationIdentifier(connection, this));
+		return impacts;
+	}
+
+	
+	protected static Collection getImpactedAuthorizationIdentifier(Connection connection, Role role) {
+		Collection impacts = new ArrayList();
+		for (Iterator iter = role.getRoleAuthorization().iterator();iter.hasNext();){
+			impacts.add(((RoleAuthorization )iter.next()).getGrantee());
+		}
+		return impacts;
+	}
+	
+
+	//API for PB
+	public EList getCatalogReceivedPrivileges(){
+		this.loadReceivedPrivilege();
+		return this.receivedPrivilege;
+	}
+
+	private boolean receivedPrivilegesLoaded = false;
+	private boolean roleAuthorizationLoaded = false;
+	private boolean receivedRoleAuthorizationLoaded = false;
+	private boolean impactsLoaded = false;
+	private Collection impacts = new ArrayList();
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogRowDataType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogRowDataType.java
new file mode 100644
index 0000000..3dc4bcc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogRowDataType.java
@@ -0,0 +1,191 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.Statement;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWUtil;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRowDataTypeImpl;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.datatypes.Field;
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.PrimitiveType;
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataTypesPackage;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWCatalogRowDataType extends LUWRowDataTypeImpl implements ICatalogObject {
+	public void refresh() {
+		this.fieldsLoaded = false;
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+	
+	public Database getCatalogDatabase() {
+		return this.getSchema().getDatabase();		
+	}
+	
+	public EList getFields() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getFields();
+		} else {
+			if(!this.fieldsLoaded) this.loadFileds(); 
+			return this.fields;
+		}
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == LUWPackage.LUW_ROW_DATA_TYPE__FIELDS) {
+			this.getFields();
+		}
+		return super.eIsSet(eFeature);
+	}
+	
+	private synchronized void loadFileds() {
+		if(this.fieldsLoaded) return;
+		this.fieldsLoaded = true;
+		
+		EList fieldList = super.getFields();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			
+			final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(this.getCatalogDatabase());
+			final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+
+			Connection connection = this.getConnection();
+			Statement s = connection.createStatement();
+			ResultSet r = s.executeQuery("SELECT FIELDNAME, FIELDTYPESCHEMA, FIELDTYPEMODULENAME, FIELDTYPENAME" + //$NON-NLS-1$
+					", LENGTH, SCALE, CODEPAGE"  //$NON-NLS-1$
+					+ " FROM SYSCAT.ROWFIELDS"  //$NON-NLS-1$
+					+ " WHERE TYPENAME = '" + LUWUtil.getIdentifier(this.getName()) + "'" //$NON-NLS-1$
+					+ " AND TYPESCHEMA='" + LUWUtil.getIdentifier(this.getSchema().getName()) + "'" //$NON-NLS-1$ //$NON-NLS-2$
+					+ " AND TYPEMODULENAME IS NULL"
+					+ " ORDER BY ORDINAL "); //$NON-NLS-1$
+			while(r.next()) {
+				Field field = (Field) factory.create(SQLDataTypesPackage.eINSTANCE.getField());
+
+				final String fieldName = r.getString("FIELDNAME");
+				field.setName(fieldName);
+				
+				String typeName = r.getString("FIELDTYPENAME");
+				if (typeName.equalsIgnoreCase("FLOAT")){ //$NON-NLS-1$
+					int length =r.getInt(4);
+					if (length ==4) typeName="REAL"; //$NON-NLS-1$
+					else typeName="DOUBLE"; //$NON-NLS-1$
+				}
+				PredefinedDataTypeDefinition typeDefinition = databaseDefinition.getPredefinedDataTypeDefinition(typeName);
+				if(typeDefinition != null) {
+					if (typeDefinition.getPrimitiveType().getValue() == PrimitiveType.CHARACTER) {
+						final int codePage = r.getInt("CODEPAGE");
+						if(codePage == 0) {
+							typeDefinition = databaseDefinition.getPredefinedDataTypeDefinition("CHAR () FOR BIT DATA"); //$NON-NLS-1$
+						}
+					}
+					else if (typeDefinition.getPrimitiveType().getValue() == PrimitiveType.CHARACTER_VARYING) {
+						final int codePage = r.getInt("CODEPAGE");
+						if(codePage == 0) {
+							typeDefinition = databaseDefinition.getPredefinedDataTypeDefinition("VARCHAR () FOR BIT DATA"); //$NON-NLS-1$
+						}
+					}
+					
+					PredefinedDataType type = databaseDefinition.getPredefinedDataType(typeDefinition);
+					if(typeDefinition.isLengthSupported()) {
+						final int length = r.getInt("LENGTH");
+						EStructuralFeature feature = type.eClass().getEStructuralFeature("length");  //$NON-NLS-1$
+						type.eSet(feature, new Integer(length));
+					}
+					else if(typeDefinition.isPrecisionSupported()) {
+						if (typeName.equals("TIMESTAMP")) {
+							int length = r.getInt("LENGTH");
+							EStructuralFeature feature = type.eClass().getEStructuralFeature("fractionalSecondsPrecision"); //$NON-NLS-1$
+							type.eSet(feature, new Integer(length));
+						}
+						else {
+							int length = r.getInt("LENGTH");
+							if (typeName.equals("DECFLOAT")) {
+								if (length == 8) length = 16;
+								else length = 34;
+							}
+							EStructuralFeature feature = type.eClass().getEStructuralFeature("precision"); //$NON-NLS-1$
+							type.eSet(feature, new Integer(length));
+						}
+					}
+					
+					if(typeDefinition.isScaleSupported()) {
+						final int scale = r.getInt("SCALE");
+						EStructuralFeature feature = type.eClass().getEStructuralFeature("scale"); //$NON-NLS-1$
+						type.eSet(feature, new Integer(scale));
+					}
+					
+					field.setContainedType(type);
+				}
+				else {
+					final String typeSchemaName = r.getString("FIELDTYPESCHEMA").trim();
+					final String typeModuleName = r.getString("FIELDTYPEMODULENAME");
+					field.setReferencedType(LUWCatalogRowDataType.getUserDefinedType(this,typeSchemaName,typeName));
+				}
+				
+				
+				fieldList.add(field);
+			}
+
+			r.close();
+			s.close();
+		}
+		catch (Exception e) {
+			 e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+	
+	private static UserDefinedType getUserDefinedType(UserDefinedType type,String schemaName, String userDefinedTypeName) {
+		Schema schema = LUWCatalogStructuredUserDefinedType.getSchema(type,schemaName);
+		Iterator it = schema.getUserDefinedTypes().iterator();
+		while(it.hasNext()) {
+			UserDefinedType userDefinedType = (UserDefinedType) it.next();
+			if(userDefinedType.getName().equals(userDefinedTypeName)) return userDefinedType;			
+		}
+
+		UserDefinedType userDefinedType = new LUWCatalogDistinctUserDefinedType();
+		userDefinedType.setName(userDefinedTypeName);
+		userDefinedType.setSchema(schema);
+		
+		return userDefinedType;		
+	}
+
+	private boolean fieldsLoaded = false;
+}
+	
+
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogSchema.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogSchema.java
new file mode 100644
index 0000000..dc9ce2e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogSchema.java
@@ -0,0 +1,2211 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.io.File;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.DatabaseConnectionRegistry;
+import org.eclipse.datatools.enablement.ibm.catalog.util.CatalogLoadUtil;
+import org.eclipse.datatools.enablement.ibm.db2.luw.DB2LUWPluginActivator;
+//import com.ibm.datatools.db2.luw.DB2LUWPlugin;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.LUWCatalogIndex.IndexUniqueRule;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.DatabaseREProvider;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWUtil;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.CursorBlockType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.ExplainSnaphotType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWArrayDataType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2IdentitySpecifier;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2IndexType;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Package;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchema;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDecomposition;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaStatus;
+import org.eclipse.datatools.enablement.ibm.db2.model.DataCaptureType;
+import org.eclipse.datatools.enablement.ibm.db2.model.IsolationLevelType;
+import org.eclipse.datatools.enablement.ibm.db2.model.OriginType;
+import org.eclipse.datatools.enablement.ibm.db2.model.ReoptType;
+import org.eclipse.datatools.enablement.ibm.db2.model.SourceDialect;
+import org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2SchemaImpl;
+import org.eclipse.datatools.enablement.ibm.db2.util.DB2Version;
+import org.eclipse.datatools.enablement.ibm.util.IConnectionFilter;
+import org.eclipse.datatools.enablement.ibm.util.ModelHelper;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.AuthorizationIdentifier;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Privilege;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.datatypes.DataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.DistinctUserDefinedType;
+import org.eclipse.datatools.modelbase.sql.datatypes.ElementType;
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.PrimitiveType;
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataTypesPackage;
+import org.eclipse.datatools.modelbase.sql.datatypes.StructuredUserDefinedType;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.routines.DataAccess;
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.GenerateType;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
+//bgp import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.CatalogCache;
+
+public class LUWCatalogSchema extends DB2SchemaImpl implements ICatalogObject {
+	private static OlapCatalogProvider olapCatalogProvider = null;
+	private boolean tablesLoaded = false;
+	private boolean routinesLoaded = false;
+	private boolean jarsLoaded = false;
+	private boolean xsrObjsLoaded = false;
+	private boolean sequencesLoaded = false;
+	private boolean userDefinedTypesLoaded = false;
+	private boolean indicesLoaded = false;
+	private boolean triggersLoaded = false;
+	private boolean olapobjectLoaded = false;
+	private boolean privilegeLoaded = false;
+	private boolean packagesLoaded = false;
+	private boolean moduleLoaded = false;
+	private boolean globalVariableLoaded = false;
+	private HashMap cachedTables = new HashMap();
+	private HashMap cachedDB2Packages = new HashMap();
+
+	public static OlapCatalogProvider getOlapCatalogProvider() {
+		IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+		IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("com.ibm.datatools.db2.luw", "luwolapProvider"); //$NON-NLS-1$ //$NON-NLS-2$
+		IExtension[] extensions = extensionPoint.getExtensions();
+		if(extensions.length == 1) {
+			IConfigurationElement[] configElements = extensions[0].getConfigurationElements();
+			try {
+				olapCatalogProvider = (OlapCatalogProvider) configElements[0].createExecutableExtension("class"); //$NON-NLS-1$
+			}
+			catch(Exception e) {
+			}
+		}
+		return olapCatalogProvider;
+	}
+	
+	
+	public synchronized void refresh() {
+        // set to unloaded status to force reload next time
+		this.tablesLoaded = false;
+		this.routinesLoaded = false;
+		this.jarsLoaded = false;		
+		this.indicesLoaded = false;
+		this.triggersLoaded = false;
+		this.sequencesLoaded = false;
+		this.userDefinedTypesLoaded = false;
+		if (this.olapobjectLoaded) {
+			this.olapObjects.clear();
+			this.olapobjectLoaded = false;
+		}
+		this.xsrObjsLoaded = false;
+		this.privilegeLoaded = false;
+		if (this.packagesLoaded) {
+			this.packages.clear();
+			this.packagesLoaded = false;
+		}
+		
+		this.moduleLoaded = false;
+		this.globalVariableLoaded = false;
+
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database database = this.getDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+	
+	public Database getCatalogDatabase() {
+		return this.getDatabase();
+	}
+
+	public EList getTables() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getTables();
+		} else {
+			if(!this.tablesLoaded) this.loadTables();
+			return this.tables;
+		}
+	}
+	
+	public EList getRoutines() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getRoutines();
+		} else {
+			if(!this.routinesLoaded) this.loadRoutines();
+			return this.routines;
+		}
+	}
+		
+	public EList getFederatedStoredProcedures() {
+		if(!this.routinesLoaded) this.loadRoutines();
+		return this.routines;
+	}
+
+//  TODO Jar support: add check for additional vendors after RDA ships:
+//	public EList getJars() {
+//		DB2Version db2Version = new DB2Version(this.getConnection());
+//		if(!this.jarsLoaded && 
+//			db2Version.isUNO() && db2Version.isAtLeast(9))
+//				this.loadJars();
+//		else
+//		   jars = super.getJars();
+//		this.jarsLoaded = true;
+//		return this.jars;	   
+//	}
+
+	public EList getXsrObjects() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getXsrObjects();
+		} else {
+			DB2Version db2Version = new DB2Version(this.getConnection());
+			final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(this.getDatabase());
+			if(!this.xsrObjsLoaded && 
+				!getName().toUpperCase().startsWith("SYS") &&     //$NON-NLS-1$
+				db2Version.isUNO() && databaseDefinition.supportsXML())
+					this.loadXsrObjects();
+			else
+				xsrObjects = super.getXsrObjects();
+			this.xsrObjsLoaded = true;
+			return this.xsrObjects;
+		}
+	}	
+	
+	public EList getSequences() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getSequences();
+		} else {
+			if(!this.sequencesLoaded) this.loadSequences();
+			return this.sequences;
+		}
+	}
+
+	public EList getUserDefinedTypes() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getUserDefinedTypes();
+		} else {
+			if(!this.userDefinedTypesLoaded) this.loadUserDefinedTypes();
+			return this.userDefinedTypes;
+		}
+	}
+
+	public synchronized EList getTriggers() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getTriggers();
+		} else {
+			if(!this.triggersLoaded) this.loadTriggers();
+			return this.triggers;
+		}
+	}
+	
+	public EList getIndices(){
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getIndices();
+		} else {
+			if (!this.indicesLoaded) this.loadIndices();
+			return this.indices;
+		}
+	}
+	
+	public synchronized EList getOlapObjects() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getOlapObjects();
+		} else {
+			if(!this.olapobjectLoaded) this.loadOlapobjects();
+			return this.olapObjects;
+		}
+	}
+
+	public EList getPrivileges() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getPrivileges();
+		} else {
+			if (!this.privilegeLoaded) this.loadPrivileges();
+			return this.privileges;
+		}
+	}
+
+	public EList getPackages() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getPackages();
+		} else {
+			if (!this.packagesLoaded) this.loadPackages();
+			return this.packages;
+		}
+	}
+
+	public EList getModules() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getModules();
+		} else {
+			if (!this.moduleLoaded) this.loadModules();
+			return this.modules;
+		}
+	}
+	
+	public EList getGlobalVariables(){
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getGlobalVariables();
+		} else {
+			if (!this.globalVariableLoaded) this.loadGlobaleVaraibles();
+			return this.globalVariables;
+		}
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == DB2ModelPackage.DB2_SCHEMA__TABLES) {
+			this.getTables();
+		}
+		else if(id == DB2ModelPackage.DB2_SCHEMA__ROUTINES) {
+			this.getRoutines();
+		}
+		else if(id == DB2ModelPackage.DB2_SCHEMA__JARS) {
+			this.getJars();
+		}		
+		else if(id == DB2ModelPackage.DB2_SCHEMA__XSR_OBJECTS) {
+			this.getXsrObjects();
+		}				
+		else if(id == DB2ModelPackage.DB2_SCHEMA__SEQUENCES) {
+			this.getSequences();
+		}
+		else if(id == DB2ModelPackage.DB2_SCHEMA__USER_DEFINED_TYPES) {
+			this.getUserDefinedTypes();
+		}
+		else if(id == DB2ModelPackage.DB2_SCHEMA__TRIGGERS) {
+			this.getTriggers();
+		}
+		else if(id == DB2ModelPackage.DB2_SCHEMA__INDICES) {
+			this.getIndices();
+		}
+		else if(id == DB2ModelPackage.DB2_SCHEMA__OLAP_OBJECTS) {
+			this.getOlapObjects();
+		}
+		else if(id == DB2ModelPackage.DB2_SCHEMA__PRIVILEGES) {
+			this.getPrivileges();
+		}
+		else if(id == DB2ModelPackage.DB2_SCHEMA__PACKAGES) {
+			this.getPackages();
+		}
+		else if(id == DB2ModelPackage.DB2_SCHEMA__MODULES) {
+			this.getModules();
+		}
+		else if(id == DB2ModelPackage.DB2_SCHEMA__GLOBAL_VARIABLES) {
+			this.getGlobalVariables();
+		}
+		return super.eIsSet(eFeature);
+	}
+	
+	public static void loadTables(Connection connection, EList tableList, LUWCatalogSchema schema, int options) throws SQLException {
+		LUWCatalogDatabase database  = (LUWCatalogDatabase)schema.getCatalogDatabase();
+//bgp		CatalogCache cache = CatalogCache.getCache( database );
+
+		HashMap cachedElement = schema.getCachedTable();
+		schema.iniCachedTable();
+
+//<bgp		if ( cache.isBatchLoading() ) {
+//			if ( cache.isLoaded( CatalogCache.TABLES ) ) {
+//				return;
+//			}
+//			
+//			cache.setLoaded( CatalogCache.TABLES );
+//bgp>		}
+
+		Object[] oldList = tableList.toArray();
+
+		tableList.clear();
+
+		boolean isBatchLoad = database.isBatchLoad();
+		
+		if ((options & DatabaseREProvider.EXCLUDE_TABLES)== DatabaseREProvider.EXCLUDE_TABLES
+				&& (options & DatabaseREProvider.EXCLUDE_VIEWS) == DatabaseREProvider.EXCLUDE_VIEWS
+				&& (options & DatabaseREProvider.EXCLUDE_SYNONYMS)== DatabaseREProvider.EXCLUDE_SYNONYMS){
+				return;
+		}
+
+		boolean hasFilter = false;
+		String filterStr = ""; //$NON-NLS-1$
+
+		ConnectionInfo connectionInfo = DatabaseConnectionRegistry.getInstance().getConnectionForDatabase(ModelHelper.getDatabase(schema));
+		ConnectionFilter tableFilter = connectionInfo.getFilter(schema.getName()+"::"+ConnectionFilter.TABLE_FILTER); //$NON-NLS-1$
+		if (tableFilter == null) {  //default table filter
+			tableFilter = connectionInfo.getFilter(ConnectionFilter.TABLE_FILTER);
+		}
+		ConnectionFilter viewFilter = connectionInfo.getFilter(schema.getName()+"::"+ConnectionFilter.VIEW_FILTER); //$NON-NLS-1$
+		if (viewFilter == null) {   //default view filter
+			viewFilter = connectionInfo.getFilter(ConnectionFilter.VIEW_FILTER);
+		}
+		ConnectionFilter aliasFilter = connectionInfo.getFilter(schema.getName()+"::"+ConnectionFilter.ALIAS_FILTER); //$NON-NLS-1$
+		if (aliasFilter == null) {	//default alias filter
+			aliasFilter = connectionInfo.getFilter(ConnectionFilter.ALIAS_FILTER);
+		}
+		ConnectionFilter mqtFilter = connectionInfo.getFilter(schema.getName()+"::"+ConnectionFilter.MQT_FILTER); //$NON-NLS-1$
+		if (mqtFilter == null) {	//default mqt filter
+			mqtFilter = connectionInfo.getFilter(ConnectionFilter.MQT_FILTER);
+		}
+		ConnectionFilter nicknameFilter = connectionInfo.getFilter(schema.getName()+"::"+ConnectionFilter.NICKNAME_FILTER); //$NON-NLS-1$
+		if (nicknameFilter == null) {	//default nickname filter
+			nicknameFilter = connectionInfo.getFilter(ConnectionFilter.NICKNAME_FILTER);
+		}
+		
+		hasFilter = tableFilter != null || viewFilter != null || aliasFilter != null || mqtFilter != null || nicknameFilter != null;
+		if (hasFilter) {
+			if ((options & DatabaseREProvider.EXCLUDE_TABLES)!= DatabaseREProvider.EXCLUDE_TABLES){
+				if (tableFilter != null) {
+					filterStr += CatalogLoadUtil.getFilterString(tableFilter.getPredicate(), "TABNAME")  + " AND TYPE='T' "; //$NON-NLS-1$ //$NON-NLS-2$
+				}
+				else
+				{
+					filterStr += "TYPE='T' "; //$NON-NLS-1$
+				}
+			}
+			
+			if ((options & DatabaseREProvider.EXCLUDE_VIEWS)!= DatabaseREProvider.EXCLUDE_VIEWS){
+				if (viewFilter != null) {
+					if (filterStr.length() >0) filterStr += " OR "; //$NON-NLS-1$
+					filterStr += CatalogLoadUtil.getFilterString(viewFilter.getPredicate(), "TABNAME") + " AND TYPE='V' "; //$NON-NLS-1$ //$NON-NLS-2$
+				}
+				else
+				{
+					filterStr += " OR TYPE='V' "; //$NON-NLS-1$
+				}
+			}
+			
+			if ((options & DatabaseREProvider.EXCLUDE_SYNONYMS)!= DatabaseREProvider.EXCLUDE_SYNONYMS){
+				if (aliasFilter != null) {
+					if (filterStr.length() >0) filterStr += " OR "; //$NON-NLS-1$
+					filterStr += CatalogLoadUtil.getFilterString(aliasFilter.getPredicate(), "TABNAME") + " AND TYPE='A' "; //$NON-NLS-1$ //$NON-NLS-2$
+				}
+				else
+				{
+					filterStr += " OR TYPE='A' "; //$NON-NLS-1$
+				}
+			}
+			if ((options & DatabaseREProvider.EXCLUDE_VIEWS)!= DatabaseREProvider.EXCLUDE_VIEWS){
+				if (mqtFilter != null) {
+					if (filterStr.length() >0) filterStr += " OR "; //$NON-NLS-1$
+					filterStr += CatalogLoadUtil.getFilterString(mqtFilter.getPredicate(), "TABNAME") + " AND TYPE='S' "; //$NON-NLS-1$ //$NON-NLS-2$
+				}
+				else
+				{
+					filterStr += " OR TYPE='S' "; //$NON-NLS-1$
+				}
+			}
+			if ((options & DatabaseREProvider.EXCLUDE_TABLES)!= DatabaseREProvider.EXCLUDE_TABLES){
+				if (nicknameFilter != null) {
+					if (filterStr.length() >0) filterStr += " OR "; //$NON-NLS-1$
+					filterStr +=  CatalogLoadUtil.getFilterString(nicknameFilter.getPredicate(), "TABNAME")  + " AND TYPE='N' "; //$NON-NLS-1$ //$NON-NLS-2$
+				}
+				else
+				{
+					filterStr += " OR TYPE='N' "; //$NON-NLS-1$
+				}
+			}
+			filterStr =  filterStr.length()>0? (" AND (" + filterStr+")"):""; //$NON-NLS-1$
+		}
+
+		String query = "SELECT TABNAME, TYPE,REMARKS ,PARTITION_MODE,TBSPACE, INDEX_TBSPACE,LONG_TBSPACE,DATACAPTURE, COMPRESSION" +
+						", TABSCHEMA" +		
+						" FROM SYSCAT.TABLES";
+		
+//<bgp		if ( cache.isBatchLoading() ) {
+//			query += " WHERE 1=1";
+//		}
+//bgp>		else {
+			query += " WHERE TABSCHEMA='" + LUWUtil.getIdentifier(schema.getName()) + "'"; //$NON-NLS-1$ //$NON-NLS-2$
+//bgp		}
+	
+		if (hasFilter) {
+			query += filterStr;
+		} else {
+			String types =""; 
+			if ((options & DatabaseREProvider.EXCLUDE_TABLES)!= DatabaseREProvider.EXCLUDE_TABLES)
+				types += "'T','N','G'";
+			if ((options & DatabaseREProvider.EXCLUDE_VIEWS) != DatabaseREProvider.EXCLUDE_VIEWS)
+				types += (types.length() > 0) ?   ",'V','S'" :  "'V','S'";
+			if ((options & DatabaseREProvider.EXCLUDE_SYNONYMS)!= DatabaseREProvider.EXCLUDE_SYNONYMS)
+				types += (types.length() > 0) ?   ",'A'" :  "'A'";
+
+			query +=  " AND TYPE IN(" + ((types.length() > 0) ?  types   :  "") + ")";
+		}
+
+		Statement s = null;
+		ResultSet r = null;
+		try {
+			s = connection.createStatement();
+			r = s.executeQuery(query);
+			while(r.next()) {
+				final String schemaName = r.getString( "TABSCHEMA" ).trim();
+
+//<bgp				if ( cache.isBatchLoading() && !schemaName.equals( schema.getName()) ) {
+//					if ( null == cache.findSchema( database, schemaName ) ) {
+//						// The container is filtered out, so go on
+//						continue;
+//					}
+//
+//					// Get the right schema so we can populate the old cache below
+//					schema = (LUWCatalogSchema)database.getSchema( schemaName );
+//bgp>				}
+
+				final String tableName = r.getString(1);
+				final String type      = r.getString(2);
+
+				EClass metaclass=null;
+				if (type.equals("T")){ //$NON-NLS-1$
+					metaclass = LUWPackage.eINSTANCE.getLUWTable();
+				} else if (type.equals("V")){ //$NON-NLS-1$
+					metaclass = LUWPackage.eINSTANCE.getLUWView();
+				}else if(type.equals("A")) { //$NON-NLS-1$
+					metaclass = DB2ModelPackage.eINSTANCE.getDB2Alias();
+				}else if(type.equals("S")) { //$NON-NLS-1$
+					metaclass = LUWPackage.eINSTANCE.getLUWMaterializedQueryTable();
+				}else if(type.equals("N")) { //$NON-NLS-1$
+					metaclass = LUWPackage.eINSTANCE.getLUWGenericNickname();
+				}
+
+				Object element = LUWCatalogSchema.findTable( cachedElement, oldList, tableName,metaclass );
+				Table table;
+
+				if (element != null) {
+					table = (Table) element;
+					tableList.add(table);
+					((ICatalogObject)table).refresh();
+				} else {
+					if(type.equals("T")) { //$NON-NLS-1$
+						table = new LUWCatalogTable();
+						
+						final String partitionMode = r.getString(4);
+						((LUWCatalogTable)table).setPartitionMode(partitionMode);
+						
+						final String tspName = r.getString(5);
+						((LUWCatalogTable)table).setTablespaceName(tspName);
+
+						final String indexTbspaceName = r.getString(6);
+						((LUWCatalogTable)table).setIndexTbspaceName(indexTbspaceName);
+
+						final String longTbspaceName = r.getString(7);
+						((LUWCatalogTable)table).setlongTbspaceName(longTbspaceName);
+						
+						final String dataCapture = r.getString("DATACAPTURE");
+						if (dataCapture.equals("N")) {
+							((LUWCatalogTable)table).setDataCapture(DataCaptureType.NONE_LITERAL);
+						} else {
+							((LUWCatalogTable)table).setDataCapture(DataCaptureType.CHANGES_LITERAL);
+						}
+						
+						final String compression = r.getString("COMPRESSION");
+						if ("V".equals(compression)) {
+							((LUWCatalogTable)table).setValueCompression(true);
+						} else if ("R".equals(compression)) {
+							((LUWCatalogTable)table).setRowCompression(true);
+						} else if ("B".equals(compression)) {
+							((LUWCatalogTable)table).setValueCompression(true);
+							((LUWCatalogTable)table).setRowCompression(true);
+						} else {
+							((LUWCatalogTable)table).setValueCompression(false);
+							((LUWCatalogTable)table).setRowCompression(false);
+						}
+							
+					}
+					else if(type.equals("V")) { //$NON-NLS-1$
+						table = new LUWCatalogView();
+					}
+					else if(type.equals("A")) { //$NON-NLS-1$
+						table = new LUWCatalogAlias();
+					}
+					else if(type.equals("S")) { //$NON-NLS-1$
+						table = new LUWCatalogMaterializedQueryTable();
+						final String partitionMode = r.getString(4);
+						((LUWCatalogMaterializedQueryTable)table).setPartitionMode(partitionMode);
+
+						final String compression = r.getString("COMPRESSION");
+						if ("V".equals(compression)) {
+							((LUWCatalogMaterializedQueryTable)table).setValueCompression(true);
+							((LUWCatalogMaterializedQueryTable)table).setRowCompression(false);
+						} else if ("R".equals(compression)) {
+							((LUWCatalogMaterializedQueryTable)table).setRowCompression(true);
+							((LUWCatalogMaterializedQueryTable)table).setValueCompression(false);
+						} else if ("B".equals(compression)) {
+							((LUWCatalogMaterializedQueryTable)table).setValueCompression(true);
+							((LUWCatalogMaterializedQueryTable)table).setRowCompression(true);
+						} else {
+							((LUWCatalogMaterializedQueryTable)table).setValueCompression(false);
+							((LUWCatalogMaterializedQueryTable)table).setRowCompression(false);
+						}
+
+
+					}
+					else if(type.equals("N")) { //$NON-NLS-1$
+						table = new LUWCatalogNickname();
+						((LUWCatalogNickname)table).setAsBatchLoad(isBatchLoad);
+					}
+					else continue;
+
+					table.setName(tableName);
+					
+					final String description = r.getString("REMARKS"); //$NON-NLS-1$
+					table.setDescription(description);
+
+//<bgp					if ( cache.isBatchLoading() ) {
+//						cache.cacheSchemaTable( schemaName, tableName, table );
+//					}
+//bgp>					else {
+						tableList.add(table);
+						schema.cacheTable(tableName, table);
+//bgp					}
+
+				}
+			}
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		finally {
+			if (r != null) {
+				r.close();	
+			}
+			if (s != null) {
+				s.close();	
+			}
+		}
+	}
+	
+	private synchronized void loadTables() {
+		if(this.tablesLoaded) return;
+		this.tablesLoaded = true;
+
+		EList tableList = super.getTables();
+		Connection connection = this.getConnection();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			LUWCatalogSchema.loadTables(connection,tableList,this, ((LUWCatalogDatabase)this.getCatalogDatabase()).getLoadOptions());
+		} catch(Exception e){
+			e.printStackTrace();
+		}
+		
+		LUWCatalogDatabase database = (LUWCatalogDatabase)getCatalogDatabase();
+//bgp		CatalogCache cache = CatalogCache.getCache( database );
+
+//<bgp		if ( cache.isBatchLoading() ) {
+//			Collection<SQLObject> tables = CatalogCache.getCache( database ).getTables( this );
+//
+//			tableList.clear();
+//			tableList.addAll( tables );
+//bgp>		}
+		
+		this.eSetDeliver(deliver);
+	}
+
+	public static void loadRoutines(Connection connection, EList routineList, Schema schema, int options) throws SQLException {
+		String version = connection.getMetaData().getDatabaseProductVersion();
+		if (version.startsWith("SQL07")) return;  //don't support v7
+
+		Object[] oldList = routineList.toArray();
+		routineList.clear();
+		
+		if ((options & DatabaseREProvider.EXCLUDE_ROUTINES)== DatabaseREProvider.EXCLUDE_ROUTINES) return;
+		
+		ConnectionInfo connectionInfo = DatabaseConnectionRegistry.getInstance().getConnectionForDatabase(ModelHelper.getDatabase(schema));
+		ConnectionFilter spFilter = connectionInfo.getFilter(schema.getName()+"::"+ConnectionFilter.STORED_PROCEDURE_FILTER); //$NON-NLS-1$
+		if (spFilter == null) {	//default sp filter
+			spFilter = connectionInfo.getFilter(ConnectionFilter.STORED_PROCEDURE_FILTER);
+		}
+				
+		ConnectionFilter fedspFilter = connectionInfo.getFilter(schema.getName()+"::"+IConnectionFilter.FEDERATED_STORED_PROCEDURE_FILTER); //$NON-NLS-1$
+		if (fedspFilter == null) {	//default sp filter
+			fedspFilter = connectionInfo.getFilter(IConnectionFilter.FEDERATED_STORED_PROCEDURE_FILTER);
+		}
+		
+		ConnectionFilter udfFilter = connectionInfo.getFilter(schema.getName()+"::"+ConnectionFilter.USER_DEFINED_FUNCTION_FILTER); //$NON-NLS-1$
+		if (udfFilter == null) {	//default udf filter
+			udfFilter = connectionInfo.getFilter(ConnectionFilter.USER_DEFINED_FUNCTION_FILTER);
+		}
+		String filterStr = ""; //$NON-NLS-1$
+		boolean hasFilter = spFilter != null || udfFilter != null || fedspFilter != null;
+		if (hasFilter) {
+			if (spFilter != null) {
+				filterStr += "( " + CatalogLoadUtil.getFilterString(spFilter.getPredicate(), "ROUTINENAME")  + " AND ROUTINETYPE='P' AND ORIGIN<>'F') "; //$NON-NLS-1$ //$NON-NLS-2$
+			}
+			else
+			{
+				filterStr += "(ROUTINETYPE='P' and ORIGIN<>'F')"; //$NON-NLS-1$
+			}
+						
+			if (fedspFilter != null) {
+				filterStr += " OR (" + CatalogLoadUtil.getFilterString(fedspFilter.getPredicate(), "ROUTINENAME")  + " AND ROUTINETYPE='P' AND ORIGIN='F') "; //$NON-NLS-1$ //$NON-NLS-2$
+			}
+			else
+			{
+				filterStr += "OR (ROUTINETYPE='P' and ORIGIN='F')"; //$NON-NLS-1$
+			}
+
+			if (udfFilter != null) {
+				if (filterStr.length() >0) filterStr += " OR "; //$NON-NLS-1$
+				filterStr += "(" + CatalogLoadUtil.getFilterString(udfFilter.getPredicate(), "ROUTINENAME")  + " AND ROUTINETYPE='F') "; //$NON-NLS-1$ //$NON-NLS-2$
+			}
+			else
+			{
+				filterStr += " OR ROUTINETYPE='F' "; //$NON-NLS-1$
+			}
+
+			filterStr =  " AND (" + filterStr; //$NON-NLS-1$
+			filterStr += ") "; //$NON-NLS-1$
+
+		} 
+		
+		final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(ModelHelper.getDatabase(schema));
+
+		String query = "SELECT ROUTINENAME, ROUTINETYPE,FUNCTIONTYPE,SPECIFICNAME,LANGUAGE,PARAMETER_STYLE,"
+		            + "\"DETERMINISTIC\" as D, SQL_DATA_ACCESS, EXTERNAL_ACTION,"   //$NON-NLS-1$
+					+ " CHAR(CREATE_TIME) AS CT, CHAR(ALTER_TIME) AS AT, REMARKS, ROUTINEID, ORIGIN ";
+		if (ModelHelper.isSupportPL_SQL(databaseDefinition)){
+			query += " ,DIALECT ";
+		} else {
+			query += " ,'' AS DIALECT ";
+		}
+		
+		query   += " FROM SYSCAT.ROUTINES" //$NON-NLS-1$
+		    	+ " WHERE ROUTINESCHEMA='" + LUWUtil.getIdentifier(schema.getName()) + "'" //$NON-NLS-1$ //$NON-NLS-2$
+				+ " AND ORIGIN<>'S'"; //$NON-NLS-1$
+
+		if (ModelHelper.isSupportModule(databaseDefinition)){
+			query += " AND ROUTINEMODULENAME IS NULL";
+		}
+		
+		if (hasFilter) {
+			query += filterStr;
+		}
+
+		Statement s = connection.createStatement();
+		ResultSet r = s.executeQuery(query);
+		
+		try {
+			while(r.next()) {
+				final String routineName = r.getString(1);
+
+				final String routineType = r.getString(2);
+				
+				final String origin = r.getString("ORIGIN");
+				
+				final String dialect = r.getString("DIALECT");
+				boolean isPlsql = false;
+				if (dialect != null && dialect.trim().equals("PL/SQL")) {
+					isPlsql = true;
+				}
+
+				Routine routine;
+				
+				EClass metaclass=null;
+				if (routineType.equals("P")){ //$NON-NLS-1$
+					metaclass = SQLRoutinesPackage.eINSTANCE.getProcedure();
+				} else if (routineType.equals("F")){ //$NON-NLS-1$
+					metaclass = SQLRoutinesPackage.eINSTANCE.getUserDefinedFunction();
+				}else if(routineType.equals("M")) { //$NON-NLS-1$
+					metaclass = SQLRoutinesPackage.eINSTANCE.getMethod();
+				}
+
+				Object element = LUWCatalogSchema.findElement(oldList,routineName,metaclass);
+				if (element != null) {
+					routine = (Routine) element;
+					((ICatalogObject)routine).refresh();
+				} else {
+					if(routineType.equals("F")) { //$NON-NLS-1$
+						routine = new LUWCatalogUserDefinedFunction();
+						final String funcType= r.getString("FUNCTIONTYPE"); //$NON-NLS-1$
+						if (funcType.equals("T"))  //$NON-NLS-1$
+							((LUWCatalogUserDefinedFunction)routine).setLUWFunctionType(LUWCatalogUserDefinedFunction.FunctionTypeEnumeration.TABLE_FUNCTION);
+						else if (funcType.equals("C"))  //$NON-NLS-1$
+							((LUWCatalogUserDefinedFunction)routine).setLUWFunctionType(LUWCatalogUserDefinedFunction.FunctionTypeEnumeration.COLUMN_FUNCTION);
+						else if (funcType.equals("R"))  //$NON-NLS-1$
+							((LUWCatalogUserDefinedFunction)routine).setLUWFunctionType(LUWCatalogUserDefinedFunction.FunctionTypeEnumeration.ROW_FUNCTION);
+						else 
+							((LUWCatalogUserDefinedFunction)routine).setLUWFunctionType(LUWCatalogUserDefinedFunction.FunctionTypeEnumeration.SCALAR_FUNCTION);
+
+						if (origin.equals("M")){
+							((LUWCatalogUserDefinedFunction)routine).setOrigin(OriginType.TEMPLATE_LITERAL);
+						} else if (origin.equals("U")){
+							((LUWCatalogUserDefinedFunction)routine).setOrigin(OriginType.SOURCE_LITERAL);
+						} else {
+							((LUWCatalogUserDefinedFunction)routine).setOrigin(OriginType.NONE_LITERAL);
+						}
+
+						if (isPlsql) {
+							((LUWCatalogUserDefinedFunction)routine).setDialect(SourceDialect.PLSQL_LITERAL);
+						} else {
+							((LUWCatalogUserDefinedFunction)routine).setDialect(SourceDialect.DB2SQLPL_LITERAL);
+						}
+
+					}
+					else if(routineType.equals("P")) { //$NON-NLS-1$
+						if(!origin.equals("F")){
+							routine = new LUWCatalogProcedure();
+							
+							if (isPlsql) {
+								((LUWCatalogProcedure)routine).setDialect(SourceDialect.PLSQL_LITERAL);
+							} else {
+								((LUWCatalogProcedure)routine).setDialect(SourceDialect.DB2SQLPL_LITERAL);
+							}
+						}else{
+							//federated SP
+							routine = new LUWCatalogFederatedProcedure();
+							LUWCatalogFederatedProcedure fedRoutine = (LUWCatalogFederatedProcedure)routine;
+							
+							int routineID = r.getInt("ROUTINEID");
+							fedRoutine.setRoutineID(routineID);
+							
+							String deterministic = r.getString("D");
+							if(deterministic.equals("Y")) routine.setDeterministic(true); //$NON-NLS-1$
+							else routine.setDeterministic(false);
+							
+							final String sql_data_access = r.getString("SQL_DATA_ACCESS"); //$NON-NLS-1$
+			                // 'C' - CONTAINS SQL, 'M' - MODIFIES SQL DATA, 'N' - No SQL, 'R' - READS SQL DATA
+			                if (sql_data_access.equals("C")) fedRoutine.setSQLDataAccess(DataAccess.CONTAINS_SQL_LITERAL); //$NON-NLS-1$
+			                else if (sql_data_access.equals("M")) fedRoutine.setSQLDataAccess(DataAccess.MODIFIES_SQL_DATA_LITERAL); //$NON-NLS-1$
+			                else if (sql_data_access.equals("N")) fedRoutine.setSQLDataAccess(DataAccess.NO_SQL_LITERAL); //$NON-NLS-1$
+			                else fedRoutine.setSQLDataAccess(DataAccess.READS_SQL_DATA_LITERAL);
+			                
+			                String externalAction = r.getString("EXTERNAL_ACTION");
+			                fedRoutine.setExternalAction(externalAction);
+
+							
+						}
+					}
+					else if(routineType.equals("M")) { //$NON-NLS-1$
+						continue;
+					}
+					else {
+						continue;
+					}
+					routine.setName(routineName);
+				}
+				final String language = r.getString("LANGUAGE").trim(); //$NON-NLS-1$
+				routine.setLanguage(language);
+				final String paramStyle = r.getString("PARAMETER_STYLE").trim(); //$NON-NLS-1$
+				routine.setParameterStyle(paramStyle);
+				final String createdTS = r.getString("CT"); //$NON-NLS-1$
+				routine.setCreationTS(createdTS);
+				final String alteredTS = r.getString("AT"); //$NON-NLS-1$
+				routine.setLastAlteredTS(alteredTS);
+				
+				final String remarks = r.getString("REMARKS"); //$NON-NLS-1$
+				routine.setDescription(remarks);
+				
+				final String specificName= r.getString("SPECIFICNAME"); //$NON-NLS-1$
+				routine.setSpecificName(specificName);
+				if(!origin.equals("F")){
+					routineList.add(routine);
+				}else{
+					routineList.add(routine);
+				}
+			}
+		}catch (Exception e) {
+			e.printStackTrace();
+		}
+		r.close();
+		s.close();
+	}	
+	
+	private synchronized void loadRoutines() {
+		if(this.routinesLoaded) return;
+		this.routinesLoaded = true;
+
+		EList routineList = super.getRoutines();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);
+		Connection connection = this.getConnection();
+		try {
+			LUWCatalogSchema.loadRoutines(connection,routineList,this,((LUWCatalogDatabase)this.getCatalogDatabase()).getLoadOptions());
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	public static void loadJars(Connection connection, EList jarList, Schema schema, int options) throws SQLException {
+		Object[] oldList = jarList.toArray();
+		jarList.clear();
+				
+		if ((options & DatabaseREProvider.EXCLUDE_ROUTINES)== DatabaseREProvider.EXCLUDE_ROUTINES) return;
+		
+		ConnectionInfo connectionInfo = DatabaseConnectionRegistry.getInstance().getConnectionForDatabase(ModelHelper.getDatabase(schema));
+		ConnectionFilter jarFilter = connectionInfo.getFilter(schema.getName()+"::"+ConnectionFilter.JAR_FILTER); //$NON-NLS-1$
+		if (jarFilter == null) {	//default jar filter
+			jarFilter = connectionInfo.getFilter(ConnectionFilter.JAR_FILTER);
+		}
+		String filterStr = ""; //$NON-NLS-1$
+		if (jarFilter != null) {
+			filterStr += " AND " + CatalogLoadUtil.getFilterString(jarFilter.getPredicate(), "JAR_ID") ;
+		} 
+		
+		String query = "SELECT JAR_ID, DEFINER, ALTEREDTS, CREATEDTS"  //$NON-NLS-1$
+					+ " FROM SYSIBM.SYSJAROBJECTS" //$NON-NLS-1$
+					+ " WHERE JARSCHEMA='" + LUWUtil.getIdentifier(schema.getName()) + "'"; //$NON-NLS-1$ //$NON-NLS-2$
+		
+		if (jarFilter != null) {
+		   // TODO implement jar filters
+//			query += filterStr;
+		}
+		
+		Statement s = connection.createStatement();
+		ResultSet r = s.executeQuery(query);
+		
+		try {
+			while(r.next()) {
+				final String jarID = r.getString("JAR_ID"); //$NON-NLS-1$
+
+				final String definer = r.getString("DEFINER"); //$NON-NLS-1$
+				
+				DB2Jar jar;
+				
+				EClass metaclass=DB2ModelPackage.eINSTANCE.getDB2Jar();
+				Object element = LUWCatalogSchema.findElement(oldList,jarID,metaclass);
+				if (element != null) {
+				    // we already have the model object in the schema
+					jar = (DB2Jar) element;
+					((ICatalogObject)jar).refresh();
+				} else {
+				    // create the model object
+				   jar = new LUWCatalogJar();
+				   jar.setName(jarID);
+				}
+				// populate the model object
+				jar.setOwner(definer);
+				final String createdTS = r.getString("CREATEDTS"); //$NON-NLS-1$
+				jar.setCreatedTS(createdTS);
+				final String alteredTS = r.getString("ALTEREDTS"); //$NON-NLS-1$
+				jar.setAlteredTS(alteredTS);
+								
+				jarList.add(jar);
+			}
+		}catch (Exception e) {
+			e.printStackTrace();
+		}
+		r.close();
+		s.close();
+	}		
+	
+	public static void loadXMLSchemas(Connection connection, EList xsrObjList, Schema schema) throws SQLException {
+		Object[] oldList = xsrObjList.toArray();
+		xsrObjList.clear();
+
+		ConnectionInfo connectionInfo = DatabaseConnectionRegistry.getInstance().getConnectionForDatabase(ModelHelper.getDatabase(schema));
+		
+		// delete all previously cached xsd sources in this schema recursively.
+		// this way all cached xsd files will be deleted even if the actual objects on the database
+		// have been deleted outside of the tooling. 
+		// TODO sschaer 
+		// not yet implemented: if a whole schema is deleted outside of the tooling, then the
+		// cached xsd sources of that schema are not deleted because this LUWCatalogSchema is not created.
+		String rootPath = getXSDSourceCacheRoot(connectionInfo, schema);
+		deleteXSDSourceCache(rootPath);
+		
+		ConnectionFilter xsrObjectFilter = connectionInfo.getFilter(schema.getName()+"::"+ConnectionFilter.XSR_OBJECTS_FILTER); //$NON-NLS-1$
+		if (xsrObjectFilter == null) {	//default jar filter
+			xsrObjectFilter = connectionInfo.getFilter(ConnectionFilter.XSR_OBJECTS_FILTER);
+		}
+		String filterStr = ""; //$NON-NLS-1$
+		if (xsrObjectFilter != null) {
+			filterStr += CatalogLoadUtil.getFilterString(xsrObjectFilter.getPredicate(), "OBJECTNAME")  + " AND OBJECTTYPE='S' ";		    //$NON-NLS-1$ //$NON-NLS-2$
+		   filterStr =  " AND (" + filterStr; //$NON-NLS-1$
+		   filterStr += ") "; //$NON-NLS-1$
+		} 
+		
+		String query = "SELECT OBJECTNAME, OBJECTTYPE, DECOMPOSITION, REMARKS, STATUS"  //$NON-NLS-1$
+					+ " FROM SYSCAT.XSROBJECTS" //$NON-NLS-1$
+					+ " WHERE OBJECTSCHEMA='" + LUWUtil.getIdentifier(schema.getName()) + "'"; //$NON-NLS-1$ //$NON-NLS-2$
+		
+		if (xsrObjectFilter != null) {
+			query += filterStr;
+		}
+				
+		Statement s = null;
+		ResultSet r = null;
+		
+		try {
+			s = connection.createStatement();
+			r = s.executeQuery(query);
+			
+			while(r.next()) {
+				final String xsrObjectName = r.getString("OBJECTNAME"); //$NON-NLS-1$
+				final String objectType = r.getString("OBJECTTYPE");				 //$NON-NLS-1$
+				
+				DB2XMLSchema xmlSchema;
+				
+				EClass metaclass=null;
+				
+				if (objectType.equals("S")) //$NON-NLS-1$
+					metaclass = DB2ModelPackage.eINSTANCE.getDB2XMLSchema();
+				
+				if (metaclass != null)
+				{
+					Object element = LUWCatalogSchema.findElement(oldList,xsrObjectName,metaclass);
+					if (element != null) {
+					    // we already have the model object in the schema
+						xmlSchema = (DB2XMLSchema) element;
+						((ICatalogObject)xmlSchema).refresh();
+					} else {
+					    // create the model object
+						xmlSchema = new LUWCatalogXmlSchema();
+						xmlSchema.setName(xsrObjectName);
+					}
+					// populate the model object
+					final String decomposition = r.getString("DECOMPOSITION"); //$NON-NLS-1$
+					if (decomposition.equalsIgnoreCase("Y"))                    //$NON-NLS-1$
+						xmlSchema.setDecomposition(DB2XMLSchemaDecomposition.ENABLED_LITERAL);
+					else if (decomposition.equalsIgnoreCase("N"))                //$NON-NLS-1$
+						xmlSchema.setDecomposition(DB2XMLSchemaDecomposition.NOT_ENABLED_LITERAL);
+					else if (decomposition.equalsIgnoreCase("X"))                 //$NON-NLS-1$
+						xmlSchema.setDecomposition(DB2XMLSchemaDecomposition.INOPERATIVE_LITERAL);
+									
+					final String status = r.getString("STATUS"); //$NON-NLS-1$
+					if (status.equalsIgnoreCase("C"))                    //$NON-NLS-1$
+						xmlSchema.setStatus(DB2XMLSchemaStatus.COMPLETE_LITERAL);
+					else if (status.equalsIgnoreCase("I"))                //$NON-NLS-1$
+						xmlSchema.setStatus(DB2XMLSchemaStatus.INCOMPLETE_LITERAL);
+					else if (status.equalsIgnoreCase("R"))                 //$NON-NLS-1$
+						xmlSchema.setStatus(DB2XMLSchemaStatus.REPLACE_LITERAL);					
+					else if (status.equalsIgnoreCase("T"))                 //$NON-NLS-1$
+						xmlSchema.setStatus(DB2XMLSchemaStatus.TEMPORARY_LITERAL);
+					
+					final String comment = r.getString("REMARKS");  //$NON-NLS-1$
+					xmlSchema.setDescription(comment);
+			
+					xsrObjList.add(xmlSchema);
+				}
+			}
+		}catch (Exception e) {
+			DB2LUWPluginActivator.getInstance().log("LUWCatalogSchema.loadXMLSchemas()",IStatus.ERROR,e); //$NON-NLS-1$
+		}
+		finally
+		{
+			r.close();
+			s.close();			
+		}
+	}		
+
+	private synchronized void loadJars() {
+	   if(this.jarsLoaded) return;
+	   this.jarsLoaded = true;
+
+	   EList jarList = super.getJars();
+	   
+	   boolean deliver = this.eDeliver();
+	   this.eSetDeliver(false);
+	   Connection connection = this.getConnection();
+	   try {
+	      
+	      LUWCatalogSchema.loadJars(connection,jarList,this,((LUWCatalogDatabase)this.getCatalogDatabase()).getLoadOptions());
+	   }
+	   catch (Exception e) {
+			e.printStackTrace();
+	   }
+	   this.eSetDeliver(deliver);
+	}
+
+	private synchronized void loadXsrObjects() {
+		   if(this.xsrObjsLoaded) return;
+		   EList xsrObjList = super.getXsrObjects();
+		   
+		   boolean deliver = this.eDeliver();
+		   this.eSetDeliver(false);
+		   Connection connection = this.getConnection();
+		   try {
+		      
+		      LUWCatalogSchema.loadXMLSchemas(connection,xsrObjList,this);
+		   }
+		   catch (Exception e) {
+				e.printStackTrace();
+		   }
+		   this.eSetDeliver(deliver);
+		}	
+	
+	public static void loadSequences(Connection connection, EList sequenceList, Schema schema, int options) throws SQLException {
+		Object[] oldList = sequenceList.toArray();
+		sequenceList.clear();
+
+		if ((options & DatabaseREProvider.EXCLUDE_SEQUENCE)== DatabaseREProvider.EXCLUDE_SEQUENCE) return;
+		
+		final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(ModelHelper.getDatabase(schema));
+		final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+		
+		
+		ConnectionInfo connectionInfo = DatabaseConnectionRegistry.getInstance().getConnectionForDatabase(ModelHelper.getDatabase(schema));
+		ConnectionFilter sequenceFilter = connectionInfo.getFilter(schema.getName()+"::" +ConnectionFilter.SEQUENCE_FILTER); //$NON-NLS-1$
+		if (sequenceFilter == null) {	//default sequence filter
+			sequenceFilter = connectionInfo.getFilter(ConnectionFilter.SEQUENCE_FILTER);
+		}
+		
+		String filterStr = ""; //$NON-NLS-1$
+		boolean hasFilter = sequenceFilter != null;
+		if (hasFilter) {
+			filterStr =  " AND " + CatalogLoadUtil.getFilterString(sequenceFilter.getPredicate(), "SEQNAME") ;
+		} 
+		
+		// The SYSCAT.SEQUENCES catalog table not only contains Sequences
+		// but also contains Sequence Alias's. These Alias's should not be
+		// loaded and handled as part of Sequences.
+		// Column SEQTYPE - A = Alias, I = Identity sequence, S = Sequence
+		// WHERE clause will be added to only load I and S and omit A
+		String query = "SELECT SEQNAME, REMARKS, DATATYPEID, PRECISION, INCREMENT, START, MAXVALUE, MINVALUE, CYCLE, CACHE" //$NON-NLS-1$
+			+ " FROM SYSCAT.SEQUENCES "  //$NON-NLS-1$
+			+ " WHERE SEQSCHEMA='" + LUWUtil.getIdentifier(schema.getName()) + "'"  //$NON-NLS-1$ //$NON-NLS-2$
+			+ " AND ORIGIN='U'" //$NON-NLS-1$
+			+ " AND (SEQTYPE = 'S' OR SEQTYPE = 'I')"; //$NON-NLS-1$
+
+		if (hasFilter) {
+			query += filterStr;
+		}
+		
+		
+		Statement s = connection.createStatement();
+		ResultSet r = s.executeQuery(query);
+
+		try {
+			while(r.next()) {
+				LUWCatalogSequence sequence;
+				final String seqName = r.getString(1);
+				
+				EClass metaclass=SQLSchemaPackage.eINSTANCE.getSequence();
+
+				Object element = LUWCatalogSchema.findElement(oldList, seqName,metaclass);
+				if (element != null){
+					sequence = (LUWCatalogSequence) element;
+					sequence.refresh();
+				} else {
+					sequence = new LUWCatalogSequence();
+					sequence.setName(seqName);
+				}
+				
+				final String remarks = r.getString(2);
+				sequence.setDescription(remarks);
+				final int dataTypeId = r.getInt(3);
+				sequence.setDataTypeId(dataTypeId);
+				final int precision = r.getInt(4);
+				sequence.setPrecision(precision);
+				DB2IdentitySpecifier identity = (DB2IdentitySpecifier) factory.create(DB2ModelPackage.eINSTANCE.getDB2IdentitySpecifier());
+				identity.setGenerationType(GenerateType.ALWAYS_GENERATED_LITERAL);
+				identity.setIncrement(r.getBigDecimal(5).toBigInteger());
+				identity.setStartValue(r.getBigDecimal(6).toBigInteger());
+				identity.setMaximum(r.getBigDecimal(7).toBigInteger());
+				identity.setMinimum(r.getBigDecimal(8).toBigInteger());
+				final String cycle = r.getString(9);
+				if(cycle.equals("Y")) identity.setCycleOption(true); //$NON-NLS-1$
+				else identity.setCycleOption(false);
+				
+				final int cache = r.getInt(10);
+				identity.setCache(cache);
+				
+				sequence.setIdentity(identity);
+				sequenceList.add(sequence);
+			}
+		}catch(Exception e){
+			e.printStackTrace();
+		}
+		r.close();
+		s.close();
+		
+	}	
+	private synchronized void loadSequences() {
+		if(this.sequencesLoaded) return;
+		this.sequencesLoaded = true;
+
+		EList sequenceList = super.getSequences();
+		Connection connection = this.getConnection();
+		if(connection == null) return;
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogSchema.loadSequences(connection,sequenceList,this,((LUWCatalogDatabase)this.getCatalogDatabase()).getLoadOptions());			
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+
+		this.eSetDeliver(deliver);
+	}
+	
+	private synchronized void loadTriggers() {
+		if(this.triggersLoaded) return;
+		this.triggersLoaded = true;
+ 		super.getTriggers();
+ 		
+ 		LUWCatalogDatabase database = (LUWCatalogDatabase)getCatalogDatabase();
+//bgp		CatalogCache cache = CatalogCache.getCache( database );
+
+//<bgp		if ( cache.isBatchLoading() ) {
+//			return;
+//bgp> 		}
+
+		Connection connection = this.getConnection();
+		
+		int options = ((LUWCatalogDatabase)this.getCatalogDatabase()).getLoadOptions();		
+		if ((options & DatabaseREProvider.EXCLUDE_TRIGGERS)== DatabaseREProvider.EXCLUDE_TRIGGERS) return;
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			Statement s = connection.createStatement();
+			ResultSet r = s.executeQuery("SELECT DISTINCT TABSCHEMA, TABNAME FROM SYSCAT.TRIGGERS WHERE TRIGSCHEMA='" + LUWUtil.getIdentifier(this.getName()) + "'"); //$NON-NLS-1$ //$NON-NLS-2$
+			while(r.next()) {
+				final String tabSchema = r.getString(1).trim();
+				final String tabName   = r.getString(2);
+				Table table = this.getTable(tabSchema, tabName);
+				if (table!= null)table.getTriggers();
+			}
+			r.close();
+			s.close();			
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);		
+	}
+	
+	private synchronized void loadIndices() {
+		if(this.indicesLoaded) return;
+		this.indicesLoaded = true;
+
+		super.getIndices().clear();
+ 		
+		LUWCatalogDatabase database  = (LUWCatalogDatabase) this.getCatalogDatabase();
+		if (!database.isBatchLoad()) return;
+
+		int options = ((LUWCatalogDatabase)this.getCatalogDatabase()).getLoadOptions();		
+		if ((options & DatabaseREProvider.EXCLUDE_INDEXES)== DatabaseREProvider.EXCLUDE_INDEXES) return;
+ 		
+		Connection connection = this.getConnection();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			String query = "SELECT INDEXTYPE, INDSCHEMA,TABNAME, INDNAME, REMARKS, UNIQUERULE, PCTFREE, SYSTEM_REQUIRED, USER_DEFINED "
+				+ "FROM SYSCAT.INDEXES" //$NON-NLS-1$
+				+ " WHERE TABSCHEMA='" + LUWUtil.getIdentifier(this.getName()) + "'";
+
+			ConnectionInfo connectionInfo = DatabaseConnectionRegistry.getInstance().getConnectionForDatabase(database);
+			ConnectionFilter tableFilter = connectionInfo.getFilter(this.getName()+"::"+ConnectionFilter.TABLE_FILTER); //$NON-NLS-1$
+			if (tableFilter == null) {  //default table filter
+				tableFilter = connectionInfo.getFilter(ConnectionFilter.TABLE_FILTER);
+			}
+	        
+			String filterStr = ""; //$NON-NLS-1$
+			if (tableFilter != null) {
+				query += " AND " + CatalogLoadUtil.getFilterString(tableFilter.getPredicate(), "TABNAME");
+			}
+			
+			Statement s = connection.createStatement();
+			ResultSet r = s.executeQuery(query);
+			int typeOrdinal = r.findColumn("INDEXTYPE"); //$NON-NLS-1$
+			int idxSchemOrdinal = r.findColumn("INDSCHEMA"); //$NON-NLS-1$
+			int tableOrdinal = r.findColumn("TABNAME"); //$NON-NLS-1$
+			int nameOrdinal = r.findColumn("INDNAME"); //$NON-NLS-1$
+			int remarkOrdinal = r.findColumn("REMARKS"); //$NON-NLS-1$
+			int ruleOrdinal = r.findColumn("UNIQUERULE"); //$NON-NLS-1$
+			int pctfreeOrdinal = r.findColumn("PCTFREE");   //$NON-NLS-1$
+			int systemRequiredOrdinal = r.findColumn("SYSTEM_REQUIRED"); //$NON-NLS-1$
+			int userDefinedOrdinal = r.findColumn("USER_DEFINED");
+			
+			while(r.next()) {
+				final String indName = r.getString(nameOrdinal);
+				
+				Index index = null;
+				final String type = r.getString(typeOrdinal);
+				if(type.equals("REG ")) { //$NON-NLS-1$
+					index = new LUWCatalogIndex();
+					
+				}
+				else if(type.equals("CLUS")) { //$NON-NLS-1$
+					index = new LUWCatalogIndex();
+					index.setClustered(true);
+
+				}
+				else if(type.equals("DIM ")) { //$NON-NLS-1$
+					index = new LUWCatalogIndex();	
+					((LUWCatalogIndex)index).setIndexType(DB2IndexType.DIMENSION_LITERAL);
+				}
+				else if(type.equals("BLOK")) { //$NON-NLS-1$
+					index = new LUWCatalogIndex();	
+					((LUWCatalogIndex)index).setIndexType(DB2IndexType.BLOCK_LITERAL);
+				}
+				else {
+					continue;
+				}
+
+				index.setName(indName);
+				
+				final String remarks = r.getString(remarkOrdinal);
+				index.setDescription(remarks);
+				
+				final String uniqueRule = r.getString(ruleOrdinal);
+				if(!uniqueRule.equals("D")) index.setUnique(true); //$NON-NLS-1$
+				if ("P".equalsIgnoreCase(uniqueRule))  ((LUWCatalogIndex)index).setIndexUniqueRule(IndexUniqueRule.PRIMARYKEY);
+
+				
+				final int pctfree = r.getInt(pctfreeOrdinal);
+				if(pctfree == -1) index.setFillFactor(10);
+				else index.setFillFactor(pctfree);
+				
+				
+				final int systemRequred = r.getInt(systemRequiredOrdinal);
+				if (index instanceof LUWIndex) {
+					if (systemRequred != 0) {
+						((LUWIndex)index).setSystemRequired(true);
+					} else {
+						((LUWIndex)index).setSystemRequired(false);
+					}
+				}
+				
+				final int userDefined = r.getInt(userDefinedOrdinal);
+				if (userDefined == 0) {
+					index.setSystemGenerated(true);
+				}
+				else {
+					index.setSystemGenerated(false);
+				}
+				
+				final String tabName = r.getString(tableOrdinal).trim();
+				Table table = this.getTable(this.getName(),tabName);
+				if (table != null) {
+					index.setTable(table);
+				}
+
+				final String schemaName = r.getString(idxSchemOrdinal).trim();
+				Schema indexSchema =LUWCatalogSchema.getSchema(this,schemaName);
+				if (indexSchema != null) {
+					index.setSchema(indexSchema);
+				}
+				
+			}
+			r.close();
+			s.close();			
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);		
+	}
+	
+	private synchronized void loadOlapobjects() {
+		if(this.olapobjectLoaded) return;
+		this.olapobjectLoaded = true;
+
+		EList olapList = super.getOlapObjects();
+		Connection connection = this.getConnection();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			OlapCatalogProvider provider = getOlapCatalogProvider();
+			if (provider != null){
+				Iterator it = provider.getOlapobjects(connection,this).iterator();
+				while(it.hasNext()) {
+					Object bp = it.next();
+					olapList.add(bp);
+				}
+			}
+		} catch(Exception e){
+			e.printStackTrace();
+		}
+		
+		this.eSetDeliver(deliver);
+	}
+	
+	private synchronized void loadUserDefinedTypes() {
+		if(this.userDefinedTypesLoaded) return;
+		this.userDefinedTypesLoaded = true;
+
+		EList userDefinedTypeList = super.getUserDefinedTypes();
+		Connection connection = this.getConnection();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			LUWCatalogSchema.loadUserDefinedTypes(connection,userDefinedTypeList,this,((LUWCatalogDatabase)this.getCatalogDatabase()).getLoadOptions());
+		} catch(Exception e){
+			e.printStackTrace();
+		}
+		
+		this.eSetDeliver(deliver);
+	}
+	
+	
+	
+	public static void loadUserDefinedTypes(Connection connection, EList userDefinedTypeList, Schema schema, int options) throws SQLException {
+		Object[] oldList = userDefinedTypeList.toArray();
+		userDefinedTypeList.clear();
+
+		if ((options & DatabaseREProvider.EXCLUDE_USER_DEFINED_TYPE)== DatabaseREProvider.EXCLUDE_USER_DEFINED_TYPE) return;
+
+		final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(ModelHelper.getDatabase(schema));
+
+		ConnectionInfo connectionInfo = DatabaseConnectionRegistry.getInstance().getConnectionForDatabase(ModelHelper.getDatabase(schema));
+		ConnectionFilter udtFilter = connectionInfo.getFilter(schema.getName()+"::"+ConnectionFilter.USER_DEFINED_TYPE_FILTER); //$NON-NLS-1$
+		if (udtFilter == null) {	//default udt filter
+			udtFilter = connectionInfo.getFilter(ConnectionFilter.USER_DEFINED_TYPE_FILTER);
+		}
+		String filterStr = ""; //$NON-NLS-1$
+		boolean hasFilter = udtFilter != null;
+		if (hasFilter) {
+			filterStr += " AND " + CatalogLoadUtil.getFilterString(udtFilter.getPredicate(), "TYPENAME");
+		} 
+
+		String query = "";
+		if (ModelHelper.isSupportArrayDataType(databaseDefinition)){
+			query = "SELECT TYPENAME, METATYPE, REMARKS, SOURCESCHEMA, SOURCENAME, LENGTH" + //$NON-NLS-1$
+			",SCALE, CODEPAGE, INSTANTIABLE, FINAL, ARRAY_LENGTH "; //$NON-NLS-1$
+		} else {
+			query = "SELECT TYPENAME, METATYPE, REMARKS, SOURCESCHEMA, SOURCENAME, LENGTH" + //$NON-NLS-1$
+			",SCALE, CODEPAGE, INSTANTIABLE, FINAL, 0 AS ARRAY_LENGTH ";//$NON-NLS-1$
+		}
+	
+		query += " FROM SYSCAT.DATATYPES " + //$NON-NLS-1$
+				" WHERE TYPESCHEMA='" + LUWUtil.getIdentifier(schema.getName()) + "'"; //$NON-NLS-1$ //$NON-NLS-2$
+	
+		if (hasFilter) {
+			query += filterStr;
+		}
+
+		if (ModelHelper.isSupportModule(databaseDefinition)){
+			query += " AND TYPEMODULENAME IS NULL";
+		}
+
+		
+		Statement s = connection.createStatement();
+		ResultSet r = s.executeQuery(query);
+		try {
+			while(r.next()) {
+				
+				String typeName = r.getString(1);
+				UserDefinedType type = null;
+				
+				EClass metaclass=SQLDataTypesPackage.eINSTANCE.getUserDefinedType();
+
+				Object element = LUWCatalogSchema.findElement(oldList, typeName,metaclass);
+
+				if (element != null){
+					type = (UserDefinedType) element;
+					((ICatalogObject)type).refresh();
+					
+				} else {
+					String metaType = r.getString(2);
+					if(metaType.equals("T") ) { //$NON-NLS-1$
+						type = LUWCatalogSchema.constructDistintUserDefinedType(r,schema);
+					}
+					else if(metaType.equals("R")) { //$NON-NLS-1$
+						type = LUWCatalogSchema.constructStructuredUserDefinedType(r);
+					}
+					else if(metaType.equals("A")) { //$NON-NLS-1$
+						type = LUWCatalogSchema.constructArrayDataType(r,schema);
+					}
+					else if(metaType.equals("F")) { //$NON-NLS-1$
+						type = new LUWCatalogRowDataType();
+					}
+					else if(metaType.equals("C")) { //$NON-NLS-1$
+						type = new LUWCatalogCursorDataType();
+					}
+					else if(metaType.equals("S")) { //$NON-NLS-1$
+						continue;
+					}
+					else {
+						continue;
+					}
+					
+					type.setName(typeName);
+				}
+
+				String remarks = r.getString(3);
+				type.setDescription(remarks);
+				userDefinedTypeList.add(type);
+			}
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+		r.close();
+		s.close();			
+	}
+
+	
+	private synchronized void loadPrivileges() {
+		if(this.privilegeLoaded) return;
+		this.privilegeLoaded = true;
+
+		EList privileges = super.getPrivileges();
+		for (Iterator iter= privileges.iterator(); iter.hasNext();){
+			Privilege privilege = (Privilege) iter.next();
+			privilege.setGrantor(null);
+			privilege.setGrantee(null);
+		}
+		
+		privileges.clear();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogSchema.loadPrivileges(this.getConnection(),privileges, this,"");
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+	
+	
+	public static void loadPrivileges(Connection connection, EList privilegeList,Schema schema,String granteeFilter) throws SQLException {
+		final Database database = ModelHelper.getDatabase(schema);
+		
+		int options = ((LUWCatalogDatabase)database).getLoadOptions();
+		if ((options & DatabaseREProvider.EXCLUDE_ACCESS_CONTROL)== DatabaseREProvider.EXCLUDE_ACCESS_CONTROL) return;
+
+		Statement s = connection.createStatement();
+		String query = "SELECT GRANTOR,GRANTEE,GRANTEETYPE" +
+					",ALTERINAUTH,CREATEINAUTH,DROPINAUTH" +
+					" FROM SYSCAT.SCHEMAAUTH" + 
+					" WHERE SCHEMANAME='" + LUWUtil.getIdentifier(schema.getName()) + "'";
+
+		if (granteeFilter != null && !"".equals(granteeFilter)) query += " AND " + granteeFilter;
+
+		ResultSet r = s.executeQuery(query);
+		try {
+			String userName = connection.getMetaData().getUserName();
+			while(r.next()) {
+				final String grantorId = r.getString("GRANTOR").trim();
+				AuthorizationIdentifier grantor = LUWCatalogDatabase.getAuthorizationId(database, grantorId,null);
+				final String granteeId = r.getString("GRANTEE").trim();
+				AuthorizationIdentifier grantee = null;
+				final String granteeType = r.getString("GRANTEETYPE");
+				if ("G".equals(granteeType)) {
+					grantee = LUWCatalogDatabase.getAuthorizationId(database, granteeId, "G");
+				} else if ("R".equals(granteeType)) {
+					grantee = LUWCatalogDatabase.getAuthorizationId(database, granteeId, "R");
+				} else {
+					grantee = LUWCatalogDatabase.getAuthorizationId(database, granteeId, "U");
+				}
+				
+				LUWCatalogPrivilege privilege = null;
+				boolean isSystemGranted  = granteeId.equalsIgnoreCase(userName);
+				final String alterAuth = r.getString("ALTERINAUTH");
+				if (alterAuth.equals("N")) {
+				} else {
+					privilege = new LUWCatalogPrivilege();
+					privilege.setAction(LUWCatalogConstant.PRIVILEGE_ALTERIN);
+					if (alterAuth.equals("G")) {
+						privilege.setGrantable(true);
+					}
+					privilegeList.add(privilege);
+					privilege.setGrantor(grantor);
+					privilege.setGrantee(grantee);
+					LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+				}
+
+				final String deleteAuth = r.getString("CREATEINAUTH");
+				if (deleteAuth.equals("N")) {
+				} else {
+					privilege = new LUWCatalogPrivilege();
+					privilege.setAction(LUWCatalogConstant.PRIVILEGE_CREATEIN);
+					if (deleteAuth.equals("G")) {
+						privilege.setGrantable(true);
+					}
+					privilegeList.add(privilege);
+					privilege.setGrantor(grantor);
+					privilege.setGrantee(grantee);
+					LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+				}
+				
+				final String indexAuth = r.getString("DROPINAUTH");
+				if (indexAuth.equals("N")) {
+				} else {
+					privilege = new LUWCatalogPrivilege();
+					privilege.setAction(LUWCatalogConstant.PRIVILEGE_DROPIN);
+					if (indexAuth.equals("G")) {
+						privilege.setGrantable(true);
+					}
+					privilegeList.add(privilege);
+					privilege.setGrantor(grantor);
+					privilege.setGrantee(grantee);
+					LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+				}
+
+			}
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		r.close();
+		s.close();
+	}
+
+	private synchronized void loadPackages() {
+		if(this.packagesLoaded) return;
+		this.packagesLoaded = true;
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogSchema.loadPackages(this.getConnection(),super.getPackages(), this);
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	public static void loadPackages(Connection connection, EList packageList,LUWCatalogSchema schema) throws SQLException {
+		schema.iniCachedDb2Package();
+
+		//do not RE package
+		if(((LUWCatalogDatabase)schema.getCatalogDatabase()).isBatchLoad()) return;
+
+        final DatabaseDefinition definition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(schema.getCatalogDatabase());
+        String version = definition.getVersion();
+        float ver = 8.0f;
+        try {
+            ver = Float.parseFloat(version.substring(1));
+        }
+        catch (NumberFormatException e) {            
+        }
+
+        String query = "SELECT PKGNAME, VALID, PKGVERSION, DEFAULT_SCHEMA, FUNC_PATH," +		//$NON-NLS-1$
+        		" REOPTVAR, ISOLATION, HEX(UNIQUE_ID) AS UID, CHAR(LAST_BIND_TIME) AS LBTS," +	//$NON-NLS-1$
+        		" BOUNDBY, BLOCKING, TOTAL_SECT, QUERYOPT, EXPLAIN_SNAPSHOT, REMARKS";	        //$NON-NLS-1$
+        if (ver <9.0) {
+        	query += " ,DEFINER AS OWNER";
+        } else {
+        	query += " ,OWNER";
+        }
+		
+		
+		// PKGVERSION has been available since V8.1 and we don't support connections to V7
+        query += " FROM SYSCAT.PACKAGES" + 														//$NON-NLS-1$
+				" WHERE PKGSCHEMA=" + LUWUtil.getSingleQuotedString(schema.getName()) +			//$NON-NLS-1$
+				" FOR FETCH ONLY WITH UR";														//$NON-NLS-1$
+
+		Statement s = connection.createStatement();
+		ResultSet r = s.executeQuery(query);
+		try {
+			while(r.next()) {
+				LUWCatalogDatabasePackage dbpackage = new LUWCatalogDatabasePackage();
+
+				final String pkgName = r.getString("PKGNAME").trim();					//$NON-NLS-1$
+				dbpackage.setName(pkgName);
+				final String pkgValid = r.getString("VALID").trim();					//$NON-NLS-1$
+				dbpackage.setValid(pkgValid);
+				final String pkgVersion = r.getString("PKGVERSION").trim();				//$NON-NLS-1$
+				dbpackage.setVersion(pkgVersion);
+				final String pkgDefaultSchema = r.getString("DEFAULT_SCHEMA").trim();	//$NON-NLS-1$
+				dbpackage.setDefaultSchema(pkgDefaultSchema);
+				final String pkgSqlPath = r.getString("FUNC_PATH").trim();				//$NON-NLS-1$
+				dbpackage.setSqlPath(pkgSqlPath);
+				final String pkgReoptVar = r.getString("REOPTVAR");						//$NON-NLS-1$
+				if ("A".equals(pkgReoptVar)){											//$NON-NLS-1$
+					dbpackage.setReoptVar(ReoptType.ALWAYS_LITERAL);
+				} else if ("N".equals(pkgReoptVar)) {									//$NON-NLS-1$
+					dbpackage.setReoptVar(ReoptType.NONE_LITERAL);
+				} else if ("O".equals(pkgReoptVar)) {									//$NON-NLS-1$
+					dbpackage.setReoptVar(ReoptType.ONCE_LITERAL);
+				}
+				final String pkgIsolation = r.getString("ISOLATION");					//$NON-NLS-1$
+				if ("CS".equals(pkgIsolation)){											//$NON-NLS-1$
+					dbpackage.setIsolation(IsolationLevelType.CURSOR_STABILITY_LITERAL);
+				} else if ("RR".equals(pkgIsolation)) {									//$NON-NLS-1$
+					dbpackage.setIsolation(IsolationLevelType.REPEATABLE_READ_LITERAL);
+				} else if ("RS".equals(pkgIsolation)) {									//$NON-NLS-1$
+					dbpackage.setIsolation(IsolationLevelType.READ_STABILITY_LITERAL);
+				} else if ("UR".equals(pkgIsolation)) {									//$NON-NLS-1$
+					dbpackage.setIsolation(IsolationLevelType.UNCOMMITTED_READ_LITERAL);
+				} else {
+					// The isolation level was not set at the package level
+					dbpackage.setIsolation(null);
+				}
+
+				final String pkgUniqueID = r.getString("UID").trim();					//$NON-NLS-1$
+				dbpackage.setUniqueID(pkgUniqueID);
+				final String pkgLastBindTS = r.getString("LBTS").trim();				//$NON-NLS-1$
+				dbpackage.setLastBindTS(pkgLastBindTS);
+
+				final String pkgBoundBy = r.getString("BOUNDBY");
+				dbpackage.setBinder(pkgBoundBy);
+				final String pkgOwner = r.getString("OWNER");
+				dbpackage.setCreator(pkgOwner);
+				final String pkgBlocking = r.getString("BLOCKING");
+				if ("B".equals(pkgBlocking)) {
+					dbpackage.setCursorBlock(CursorBlockType.BLOCK_ALL_CURSORS_LITERAL);	
+				}
+				else if ("N".equals(pkgBlocking)) {
+					dbpackage.setCursorBlock(CursorBlockType.NO_BLOCKING_LITERAL);
+				}
+				else if ("U".equals(pkgBlocking)) {
+					dbpackage.setCursorBlock(CursorBlockType.BLOCK_UNAMBIGUOUS_CURSORS_LITERAL);
+				}
+				
+				final String pkgTotalSect = r.getString("TOTAL_SECT");
+				dbpackage.setNumberOfSections(Integer.parseInt(pkgTotalSect));
+				final String pkgQueryOpt = r.getString("QUERYOPT");
+				dbpackage.setOptimizationClass(Integer.parseInt(pkgQueryOpt));
+				final String pkgExplainSnapShot = r.getString("EXPLAIN_SNAPSHOT");
+				if ("A".equals(pkgExplainSnapShot)) {
+					dbpackage.setExplainSnapshot(ExplainSnaphotType.ALL_LITERAL);	
+				}
+				else if ("N".equals(pkgExplainSnapShot)) {
+					dbpackage.setExplainSnapshot(ExplainSnaphotType.NO_LITERAL);
+				}
+				else if ("R".equals(pkgExplainSnapShot)) {
+					dbpackage.setExplainSnapshot(ExplainSnaphotType.REOPT_LITERAL);
+				}
+				else if ("Y".equals(pkgExplainSnapShot)) {
+					dbpackage.setExplainSnapshot(ExplainSnaphotType.REOPT_LITERAL);
+				}
+				
+				final String remarks = r.getString("REMARKS");
+				dbpackage.setDescription(remarks);
+
+				// Add and cache the package
+				packageList.add(dbpackage);
+				schema.cacheDB2Package(pkgName, pkgUniqueID, dbpackage);
+			}
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		r.close();
+		s.close();
+	}
+
+	private synchronized void loadModules() {
+		if(this.moduleLoaded) return;
+		this.moduleLoaded = true;
+
+		EList modules = super.getModules();
+		modules.clear();
+
+		final Database database = this.getDatabase();
+		final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+
+		if (!ModelHelper.isSupportModule(databaseDefinition)) return;
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			ModuleCatalogProvider moduleProvider = ((LUWCatalogDatabase)this.getCatalogDatabase()).getCatalogModuleProvider();
+			if (moduleProvider != null){
+				Iterator it = moduleProvider.getModules(this.getConnection(), this).iterator();
+				while(it.hasNext()) {
+					LUWModule module = (LUWModule) it.next();
+					modules.add(module);
+				}
+			}
+
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	private synchronized void loadGlobaleVaraibles() {
+		if(this.globalVariableLoaded) return;
+		this.globalVariableLoaded = true;
+
+		EList varaibles = super.getGlobalVariables();
+		varaibles.clear();
+
+		final Database database = this.getDatabase();
+		final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+
+		if (!ModelHelper.isSupportGlobalVariable(databaseDefinition)) return;
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+
+			String query = "SELECT VARNAME,TYPESCHEMA,TYPENAME,LENGTH,SCALE,CODEPAGE,READONLY,REMARKS,DEFAULT"
+				+ " FROM SYSCAT.VARIABLES " //$NON-NLS-1$
+				+ " WHERE VARSCHEMA='" + LUWUtil.getIdentifier(this.getName()) + "'" //$NON-NLS-1$ //$NON-NLS-2$
+				+ " AND VARMODULENAME is NULL"; //$NON-NLS-1$
+
+			Statement s = this.getConnection().createStatement();
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				LUWCatalogGlobalVariable var = new LUWCatalogGlobalVariable();
+				final String name = r.getString("VARNAME");
+				var.setName(name);
+				
+				final String remarks =  r.getString("REMARKS");
+				var.setDescription(remarks);
+				
+				String typeName = r.getString("TYPENAME");
+				
+				if (typeName.equalsIgnoreCase("FLOAT")){ //$NON-NLS-1$
+					int length = r.getInt("LENGTH");
+					if (length ==4) typeName="REAL"; //$NON-NLS-1$
+					else typeName="DOUBLE"; //$NON-NLS-1$
+					
+				}
+				
+				PredefinedDataTypeDefinition typeDefinition = databaseDefinition.getPredefinedDataTypeDefinition(typeName);
+				if(typeDefinition != null) {
+					
+					if (typeDefinition.getPrimitiveType().getValue() == PrimitiveType.CHARACTER) {
+						final int codePage = r.getInt("CODEPAGE");
+						if(codePage == 0) {
+							typeDefinition = databaseDefinition.getPredefinedDataTypeDefinition("CHAR () FOR BIT DATA"); //$NON-NLS-1$
+						}
+					}
+					else if (typeDefinition.getPrimitiveType().getValue() == PrimitiveType.CHARACTER_VARYING) {
+						final int codePage = r.getInt("CODEPAGE");
+						if(codePage == 0) {
+							if (typeName.equals("LONG VARCHAR")){
+								typeDefinition = databaseDefinition.getPredefinedDataTypeDefinition("LONG VARCHAR FOR BIT DATA"); //$NON-NLS-1$
+							} else {
+								typeDefinition = databaseDefinition.getPredefinedDataTypeDefinition("VARCHAR () FOR BIT DATA"); //$NON-NLS-1$
+							}
+						}
+					}
+
+					
+					PredefinedDataType type = databaseDefinition.getPredefinedDataType(typeDefinition);
+					if(typeDefinition.isLengthSupported()) {
+						final int length = r.getInt("LENGTH");
+						EStructuralFeature feature = type.eClass().getEStructuralFeature("length");  //$NON-NLS-1$
+						type.eSet(feature, new Integer(length));
+					}
+					else if(typeDefinition.isPrecisionSupported()) {
+						if (typeName.equals("TIMESTAMP")) {
+							int length = r.getInt("SCALE");
+							EStructuralFeature feature = type.eClass().getEStructuralFeature("fractionalSecondsPrecision"); //$NON-NLS-1$
+							type.eSet(feature, new Integer(length));
+						}
+						else {
+							int length = r.getInt("LENGTH");
+							if (typeName.equals("DECFLOAT")) {
+								if (length == 8) length = 16;
+								else length = 34;
+							}
+							EStructuralFeature feature = type.eClass().getEStructuralFeature("precision"); //$NON-NLS-1$
+							type.eSet(feature, new Integer(length));
+						}
+					}
+					
+					if(typeDefinition.isScaleSupported()) {
+						final int length = r.getInt("SCALE");
+						EStructuralFeature feature = type.eClass().getEStructuralFeature("scale"); //$NON-NLS-1$
+						type.eSet(feature, new Integer(length));
+					}
+					
+					var.setContainedType(type);
+				}
+				else {
+					if (typeName.equals("REFERENCE")){ //$NON-NLS-1$
+						final String typeSchemaName = r.getString("TARGET_TYPESCHEMA").trim(); //$NON-NLS-1$
+						final String udtName = r.getString("TARGET_TYPENAME"); //$NON-NLS-1$
+						var.setReferencedType(LUWCatalogSchema.getUserDefinedType(this,typeSchemaName,udtName));
+					} else {
+						final String typeSchemaName = r.getString("TYPESCHEMA").trim();
+						var.setReferencedType(LUWCatalogSchema.getUserDefinedType(this,typeSchemaName,typeName));
+					}
+				}
+				
+				final String readOnly = r.getString("READONLY");
+				if ("C".equalsIgnoreCase(readOnly)) var.setIsConstant(true);
+				
+				final String defaultValue = r.getString("DEFAULT");
+				var.setDefaultValue(defaultValue);
+
+
+				varaibles.add(var);
+			} 
+			r.close();
+			s.close();
+
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	private static DistinctUserDefinedType constructDistintUserDefinedType(ResultSet r,Schema schema) throws SQLException {
+		DistinctUserDefinedType type = new LUWCatalogDistinctUserDefinedType();
+		String sourceName = r.getString(5);
+		if (sourceName.equalsIgnoreCase("FLOAT")){ //$NON-NLS-1$
+			int length = r.getInt(6);
+			if (length ==4) sourceName="REAL"; //$NON-NLS-1$
+			else sourceName="DOUBLE"; //$NON-NLS-1$
+		}
+
+		final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(ModelHelper.getDatabase(schema));
+		PredefinedDataTypeDefinition sourceTypeDefinition = databaseDefinition.getPredefinedDataTypeDefinition(sourceName);
+
+		if (sourceTypeDefinition.getPrimitiveType().getValue() == PrimitiveType.CHARACTER) {
+			final int codePage = r.getInt(8);
+			if(codePage == 0) {
+				sourceTypeDefinition = databaseDefinition.getPredefinedDataTypeDefinition("CHAR () FOR BIT DATA"); //$NON-NLS-1$
+			}
+		}
+		else if (sourceTypeDefinition.getPrimitiveType().getValue() == PrimitiveType.CHARACTER_VARYING) {
+			final int codePage = r.getInt(8);
+			if(codePage == 0) {
+				if (sourceName.equals("LONG VARCHAR")){
+					sourceTypeDefinition = databaseDefinition.getPredefinedDataTypeDefinition("LONG VARCHAR FOR BIT DATA"); //$NON-NLS-1$
+				} else {
+					sourceTypeDefinition = databaseDefinition.getPredefinedDataTypeDefinition("VARCHAR () FOR BIT DATA"); //$NON-NLS-1$
+				}
+				
+				
+			}
+		}
+		
+		
+		PredefinedDataType sourceType = databaseDefinition.getPredefinedDataType(sourceTypeDefinition);
+		if(sourceTypeDefinition.isLengthSupported()) {
+			final int length = r.getInt(6);
+			EStructuralFeature feature = sourceType.eClass().getEStructuralFeature("length");  //$NON-NLS-1$
+			sourceType.eSet(feature, new Integer(length));
+		}
+		else if(sourceTypeDefinition.isPrecisionSupported()) {
+			if (sourceName.equals("TIMESTAMP")) {
+				int length = r.getInt(7);
+				EStructuralFeature feature = sourceType.eClass().getEStructuralFeature("fractionalSecondsPrecision"); //$NON-NLS-1$
+				sourceType.eSet(feature, new Integer(length));
+			}
+			else {
+				int length = r.getInt(6);
+				if (sourceName.equals("DECFLOAT")) {
+					if (length == 8) length = 16;
+					else length = 34;
+				}
+				EStructuralFeature feature = sourceType.eClass().getEStructuralFeature("precision"); //$NON-NLS-1$
+				sourceType.eSet(feature, new Integer(length));
+			}
+		}
+		
+		if(sourceTypeDefinition.isScaleSupported()) {
+			final int length = r.getInt(7);
+			EStructuralFeature feature = sourceType.eClass().getEStructuralFeature("scale"); //$NON-NLS-1$
+			sourceType.eSet(feature, new Integer(length));
+		}
+			
+		type.setPredefinedRepresentation(sourceType);
+		return type;
+	}
+	
+	private static StructuredUserDefinedType constructStructuredUserDefinedType(ResultSet r) throws SQLException {
+		StructuredUserDefinedType type = new LUWCatalogStructuredUserDefinedType();
+		final String instantiable = r.getString(9);
+		if(instantiable.equals("Y")) type.setInstantiable(true); //$NON-NLS-1$
+		else  type.setInstantiable(false);
+
+		final String f = r.getString(10);
+		if(f.equals("Y")) type.setFinal(true); //$NON-NLS-1$
+		else type.setFinal(false);
+		
+		return type;
+	}
+	
+	private static LUWArrayDataType constructArrayDataType(ResultSet r,Schema schema) throws SQLException {
+		LUWArrayDataType arrayType = new LUWCatalogArrayDataType();
+		String sourceName = r.getString("SOURCENAME");
+		if (sourceName.equalsIgnoreCase("FLOAT")){ //$NON-NLS-1$
+			int length = r.getInt("LENGTH");
+			if (length ==4) sourceName="REAL"; //$NON-NLS-1$
+			else sourceName="DOUBLE"; //$NON-NLS-1$
+		}
+
+		final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition((schema.getDatabase()));
+		final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+
+		ElementType elmentType = (ElementType) factory.create(SQLDataTypesPackage.eINSTANCE.getElementType());
+
+		PredefinedDataTypeDefinition sourceTypeDefinition = databaseDefinition.getPredefinedDataTypeDefinition(sourceName);
+
+		if (sourceTypeDefinition != null) {
+			if (sourceTypeDefinition.getPrimitiveType().getValue() == PrimitiveType.CHARACTER) {
+				final int codePage = r.getInt("CODEPAGE");
+				if(codePage == 0) {
+					sourceTypeDefinition = databaseDefinition.getPredefinedDataTypeDefinition("CHAR () FOR BIT DATA"); //$NON-NLS-1$
+				}
+			}
+			else if (sourceTypeDefinition.getPrimitiveType().getValue() == PrimitiveType.CHARACTER_VARYING) {
+				final int codePage = r.getInt("CODEPAGE");
+				if(codePage == 0) {
+					if (sourceName.equals("LONG VARCHAR")){
+						sourceTypeDefinition = databaseDefinition.getPredefinedDataTypeDefinition("LONG VARCHAR FOR BIT DATA"); //$NON-NLS-1$
+					} else {
+						sourceTypeDefinition = databaseDefinition.getPredefinedDataTypeDefinition("VARCHAR () FOR BIT DATA"); //$NON-NLS-1$
+					}
+				}
+			}
+			
+			PredefinedDataType sourceType = databaseDefinition.getPredefinedDataType(sourceTypeDefinition);
+			if(sourceTypeDefinition.isLengthSupported()) {
+				final int length = r.getInt("LENGTH");
+				EStructuralFeature feature = sourceType.eClass().getEStructuralFeature("length");  //$NON-NLS-1$
+				sourceType.eSet(feature, new Integer(length));
+			}
+			else if(sourceTypeDefinition.isPrecisionSupported()) {
+				if (sourceName.equals("TIMESTAMP")) {
+					int length = r.getInt("SCALE");
+					EStructuralFeature feature = sourceType.eClass().getEStructuralFeature("fractionalSecondsPrecision"); //$NON-NLS-1$
+					sourceType.eSet(feature, new Integer(length));
+				}
+				else {
+					int length = r.getInt("LENGTH");
+					if (sourceName.equals("DECFLOAT")) {
+						if (length == 8) length = 16;
+						else length = 34;
+					}
+					EStructuralFeature feature = sourceType.eClass().getEStructuralFeature("precision"); //$NON-NLS-1$
+					sourceType.eSet(feature, new Integer(length));
+				}
+			}
+			
+			if(sourceTypeDefinition.isScaleSupported()) {
+				final int scale = r.getInt("SCALE");
+				EStructuralFeature feature = sourceType.eClass().getEStructuralFeature("scale"); //$NON-NLS-1$
+				sourceType.eSet(feature, new Integer(scale));
+			}
+			elmentType.setDataType(sourceType);
+		}
+		else {
+				final String typeSchemaName = r.getString("SOURCESCHEMA").trim();
+				DataType sourceType = LUWCatalogSchema.getUserDefinedType(schema,typeSchemaName,sourceName);
+				elmentType.setDataType(sourceType);
+		}
+		
+		arrayType.setElementType(elmentType);
+		
+		final int arrayLen = r.getInt("ARRAY_LENGTH");
+		arrayType.setMaxCardinality(arrayLen);
+		
+		return arrayType;
+	}
+	
+	private String getWhereClause() {
+		return " WHERE TABSCHEMA='" + LUWUtil.getIdentifier(this.getName()) + "'"; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+	public Table getTable(String schema, String tableName) {
+		Schema s = LUWCatalogSchema.getSchema(this,schema);
+		EList tables = s.getTables();
+		
+		if (s instanceof LUWCatalogSchema) {
+			Table table = ((LUWCatalogSchema) s).getCachedTable(tableName);
+			if (table != null) return table;
+		}
+
+		Iterator it = tables.iterator();
+		while(it.hasNext()) {
+			Table t = (Table) it.next();
+			if(t.getName().equals(tableName)) return t;
+		}
+
+		return null;
+	}
+	
+	public DB2Package getDB2Package(String name, String uniqueID) {
+		if (!this.packagesLoaded) {
+			this.getPackages();
+		}
+		DB2Package pkg = (DB2Package) this.cachedDB2Packages.get(getDB2PackageHashKey(name, uniqueID));
+		return pkg;
+	}
+
+	private static Schema getSchema(Schema schema, String schemaName) {
+		if(schema.getName().equals(schemaName)) return schema;
+		Database d = schema.getDatabase();
+		if (d instanceof LUWCatalogDatabase){
+			Schema s = ((LUWCatalogDatabase)d).getSchema(schemaName);
+			if (s != null) return s; 
+		} else {
+			Iterator it = d.getSchemas().iterator();
+			while(it.hasNext()) {
+				Schema s = (Schema) it.next();
+				if(s.getName().equals(schemaName)) return s;
+			}
+		}
+
+		Schema newSchema = new LUWCatalogSchema();
+		newSchema.setName(schemaName);
+		newSchema.setDatabase(d);
+
+		if (d instanceof LUWCatalogDatabase){
+			((LUWCatalogDatabase)d).cacheSchema(newSchema);
+		}		
+		return newSchema;
+	}
+
+	private void cacheTable(String name, Table table){
+		this.cachedTables.put(name,table);
+	}
+	
+	private Table getCachedTable(String name){
+		return (Table)this.cachedTables.get(name);
+	}
+
+	private HashMap getCachedTable(){
+		return this.cachedTables;
+	}
+
+	private void iniCachedTable(){
+		this.cachedTables.clear();
+	}
+
+	private void cacheDB2Package(String name, String uniqueID, DB2Package pkg) {
+		this.cachedDB2Packages.put(getDB2PackageHashKey(name, uniqueID), pkg);
+	}
+	
+	private void iniCachedDb2Package() {
+		this.cachedDB2Packages.clear();
+	}
+
+	private String getDB2PackageHashKey(String name, String uniqueID) {
+		// It is important to quote the name to make the key unique
+        name = LUWUtil.getSingleQuotedString(name);
+        return (name + uniqueID);
+	}
+
+	protected static Object findElement(Object[] list, String name,EClass metaclass){
+		Object object = null;
+		for (int i = 0; i < list.length; i++){
+			SQLObject sqlObject = (SQLObject) list[i];
+			if (sqlObject.getName().equals(name) && sqlObject.eClass() == metaclass && sqlObject instanceof ICatalogObject){
+				object = list[i];
+				break;
+			}
+		}
+		return object;
+	}
+	
+	private static Object findTable(HashMap cachedElements,Object[] list, String name,EClass metaclass){
+		SQLObject sqlObject = (SQLObject)cachedElements.get(name);
+		if (sqlObject != null && sqlObject.eClass() == metaclass && sqlObject instanceof ICatalogObject) return sqlObject;
+		return LUWCatalogSchema.findElement(list,name,metaclass);
+	}
+	
+	/**
+	 * constructs path for cached xsd sources.
+	 * the path is unique for connection,db,dbschema
+	 * @param connectionInfo 
+	 * @param schema
+	 * @return the rootpath of where xsd sources for this schema will be cached
+	 */
+	public static String getXSDSourceCacheRoot(ConnectionInfo connectionInfo, Schema schema){
+        StringBuffer rootPath = new StringBuffer(DB2LUWPluginActivator.getInstance().getStateLocation().toOSString()).append(File.separator);
+        rootPath.append(connectionInfo.getName()).append(File.separator);
+        rootPath.append(ModelHelper.getDatabase(schema).getName()).append(File.separator);
+        rootPath.append(schema.getName()).append(File.separator);
+        return rootPath.toString();
+	}
+	
+ 	/**
+ 	 * deletes the cached xsd sources recursively starting from the 
+ 	 * given rootPath.
+  	 * Deletes also all empty directories.
+ 	 * @param rootPath the path to start deleting from
+ 	 */
+	private static void deleteXSDSourceCache(String rootPath){
+		File file = new File(rootPath);
+		File[] files = files = file.listFiles();
+		deleteFiles(files);
+	}
+	
+	/**
+	 * deletes all existing xsd sources (with XSD_EXTENSION file extension) and empty directories
+	 * for the given array of files.
+	 * @param files
+	 */
+	private static void deleteFiles(File[] files){
+		if (files == null) return;
+		int length = files.length;
+		for (int i=0;i<length;i++){
+			File file = files[i];
+			if (file.isFile() && file.getName().endsWith(LUWCatalogXmlSchema.XSD_EXTENSION)){
+				file.delete();
+			} else if(file.isDirectory()){
+				deleteFiles(file.listFiles());
+				if (file.listFiles().length == 0){
+					file.delete();
+				}
+			}
+		}
+	}
+	
+	public void getPrivilegesWithFilter(String granteeFilter) throws SQLException {
+		if (this.privilegeLoaded) return;
+		EList privileges = super.getPrivileges();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogSchema.loadPrivileges(this.getConnection(), privileges, this,granteeFilter);
+		}catch( Exception e){
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	private static UserDefinedType getUserDefinedType(Schema currentSchema, String schemaName, String userDefinedTypeName) {
+		Schema schema = LUWCatalogSchema.getSchema(currentSchema,schemaName);
+		Iterator it = schema.getUserDefinedTypes().iterator();
+		while(it.hasNext()) {
+			UserDefinedType userDefinedType = (UserDefinedType) it.next();
+			if(userDefinedType.getName().equals(userDefinedTypeName)) return userDefinedType;			
+		}
+
+		UserDefinedType userDefinedType = new LUWCatalogDistinctUserDefinedType();
+		userDefinedType.setName(userDefinedTypeName);
+		userDefinedType.setSchema(schema);
+		
+		return userDefinedType;		
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogSequence.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogSequence.java
new file mode 100644
index 0000000..9cebbf9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogSequence.java
@@ -0,0 +1,263 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.AuthorizationIdentifier;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Privilege;
+import org.eclipse.datatools.modelbase.sql.datatypes.DataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.schema.Sequence;
+import org.eclipse.datatools.modelbase.sql.schema.impl.SequenceImpl;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWUtil;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.DatabaseREProvider;
+import org.eclipse.datatools.enablement.ibm.util.ModelHelper;
+
+public class LUWCatalogSequence extends SequenceImpl implements ICatalogObject {
+
+	public void refresh() {
+		this.dataTypeLoaded = false;
+		this.privilegeLoaded = false;
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+	
+	public Database getCatalogDatabase() {
+		return this.getSchema().getDatabase();		
+	}
+
+	public UserDefinedType getReferencedType() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getReferencedType();
+		} else {
+			if(!this.dataTypeLoaded) this.loadDataType();
+			return super.getReferencedType();
+		}
+	}
+	
+	public SQLDataType getContainedType() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getContainedType();
+		} else {
+			if(!this.dataTypeLoaded) this.loadDataType();
+			return super.getContainedType();
+		}
+	}
+	
+	public DataType getDataType() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getDataType();
+		} else {
+			if(!this.dataTypeLoaded) this.loadDataType();
+			return super.getDataType();
+		}
+	}
+
+	public EList getPrivileges() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getPrivileges();
+		} else {
+			if (!this.privilegeLoaded) this.loadPrivileges();
+			return this.privileges;
+		}
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == SQLSchemaPackage.SEQUENCE__CONTAINED_TYPE) {
+			this.getContainedType();
+		}
+		else if(id == SQLSchemaPackage.SEQUENCE__REFERENCED_TYPE) {
+			this.getReferencedType();
+		}
+		else if(id == SQLSchemaPackage.SEQUENCE__PRIVILEGES) {
+			this.getPrivileges();
+		}
+		
+		return super.eIsSet(eFeature);
+	}
+	
+	public void setDataTypeId(int id) {
+		this.dataTypeId = id;
+	}
+	
+	public void setPrecision(int p) {
+		this.precision = p;
+	}
+
+	private synchronized void loadDataType() {
+		if(this.dataTypeLoaded) return;
+		this.dataTypeLoaded = true;
+		try {
+			Connection connection = this.getConnection();
+			Statement s = connection.createStatement();
+			ResultSet r = s.executeQuery("SELECT TYPENAME FROM SYSCAT.DATATYPES WHERE TYPEID=" + Integer.toString(this.dataTypeId)); //$NON-NLS-1$
+			while (r.next()) {
+				final String typeName = r.getString(1);
+	
+				final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(this.getCatalogDatabase());
+				PredefinedDataTypeDefinition typeDefinition = databaseDefinition.getPredefinedDataTypeDefinition(typeName);
+				if(typeDefinition != null) {
+					PredefinedDataType type = databaseDefinition.getPredefinedDataType(typeDefinition);
+					if(typeDefinition.isPrecisionSupported()) {
+						EStructuralFeature feature = type.eClass().getEStructuralFeature("precision"); //$NON-NLS-1$
+						type.eSet(feature, new Integer(this.precision));
+					}
+					this.setContainedType(type);
+				}
+			}
+			r.close();
+			s.close();
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	private synchronized void loadPrivileges() {
+		if(this.privilegeLoaded) return;
+		this.privilegeLoaded = true;
+
+		EList privileges = super.getPrivileges();
+		for (Iterator iter= privileges.iterator(); iter.hasNext();){
+			Privilege privilege = (Privilege) iter.next();
+			privilege.setGrantor(null);
+			privilege.setGrantee(null);
+		}
+		
+		privileges.clear();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogSequence.loadPrivileges(this.getConnection(),privileges, this,"");
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+	
+	public static void loadPrivileges(Connection connection, EList privilegeList,Sequence sequence,String granteeFilter) throws SQLException {
+		final Schema schema = sequence.getSchema();
+		final Database database = ModelHelper.getDatabase(schema);
+		
+		int options = ((LUWCatalogDatabase)database).getLoadOptions();
+		if ((options & DatabaseREProvider.EXCLUDE_ACCESS_CONTROL)== DatabaseREProvider.EXCLUDE_ACCESS_CONTROL) return;
+
+		Statement s = connection.createStatement();
+		String query = "SELECT GRANTOR,GRANTEE,GRANTEETYPE" +
+					",USAGEAUTH,ALTERAUTH" +
+					" FROM SYSCAT.SEQUENCEAUTH" + 
+					" WHERE SEQSCHEMA='" + LUWUtil.getIdentifier(schema.getName()) + "'" +
+					" AND SEQNAME='" + LUWUtil.getIdentifier(sequence.getName()) + "'" ;
+		if (granteeFilter != null && !"".equals(granteeFilter)) query += " AND " + granteeFilter;
+
+		ResultSet r = s.executeQuery(query);
+		try {
+			String userName = connection.getMetaData().getUserName();
+			while(r.next()) {
+				final String grantorId = r.getString("GRANTOR").trim();
+				AuthorizationIdentifier grantor = LUWCatalogDatabase.getAuthorizationId(database, grantorId,null);
+				final String granteeId = r.getString("GRANTEE").trim();
+				AuthorizationIdentifier grantee = null;
+				final String granteeType = r.getString("GRANTEETYPE");
+				if ("G".equals(granteeType)) {
+					grantee = LUWCatalogDatabase.getAuthorizationId(database, granteeId, "G");
+				} else if ("R".equals(granteeType)) {
+					grantee = LUWCatalogDatabase.getAuthorizationId(database, granteeId, "R");
+				} else {
+					grantee = LUWCatalogDatabase.getAuthorizationId(database, granteeId, "U");
+				}
+				boolean isSystemGranted = granteeId.equalsIgnoreCase(userName);
+				LUWCatalogPrivilege privilege = null;
+
+				final String alterAuth = r.getString("USAGEAUTH");
+				if (alterAuth.equals("N")) {
+				} else {
+					privilege = new LUWCatalogPrivilege();
+					privilege.setAction(LUWCatalogConstant.PRIVILEGE_USAGE);
+					if (alterAuth.equals("G")) {
+						privilege.setGrantable(true);
+					}
+					privilegeList.add(privilege);
+					privilege.setGrantor(grantor);
+					privilege.setGrantee(grantee);
+					LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+				}
+
+				final String deleteAuth = r.getString("ALTERAUTH");
+				if (deleteAuth.equals("N")) {
+				} else {
+					privilege = new LUWCatalogPrivilege();
+					privilege.setAction(LUWCatalogConstant.PRIVILEGE_ALTER);
+					if (deleteAuth.equals("G")) {
+						privilege.setGrantable(true);
+					}
+					privilegeList.add(privilege);
+					privilege.setGrantor(grantor);
+					privilege.setGrantee(grantee);
+					LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+				}
+			}
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		r.close();
+		s.close();
+	}
+
+	protected void getPrivilegesWithFilter(String granteeFilter) throws SQLException {
+		if (this.privilegeLoaded) return;
+		EList privileges = super.getPrivileges();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogSequence.loadPrivileges(this.getConnection(), privileges, this,granteeFilter);
+		}catch( Exception e){
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	private int dataTypeId;
+	private int precision;
+	private boolean dataTypeLoaded = false;
+	private boolean privilegeLoaded = false;
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogStructuredUserDefinedType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogStructuredUserDefinedType.java
new file mode 100644
index 0000000..f17708d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogStructuredUserDefinedType.java
@@ -0,0 +1,554 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.enablement.ibm.catalog.IDatabaseObject;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWUtil;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Package;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.constraints.TableConstraint;
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.PrimitiveType;
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataTypesPackage;
+import org.eclipse.datatools.modelbase.sql.datatypes.StructuredUserDefinedType;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.datatypes.impl.StructuredUserDefinedTypeImpl;
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWCatalogStructuredUserDefinedType extends StructuredUserDefinedTypeImpl implements ICatalogObject,IDatabaseObject {
+	public void refresh() {
+		if (this.attributesLoaded) {
+			this.attributes.clear();
+			this.attributesLoaded = false;
+		}
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+	
+	public Database getCatalogDatabase() {
+		return this.getSchema().getDatabase();		
+	}
+	
+	public void refresh(int refreshType){
+		if ((IDatabaseObject.IMPACTS & refreshType)  == IDatabaseObject.IMPACTS) {
+			this.impacts.clear();
+			this.impactsLoaded = false;
+		}
+	}
+
+	public EList getAttributes() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getAttributes();
+		} else {
+			if(!this.attributesLoaded) this.loadAttributes(); 
+			return this.attributes;
+		}
+	}
+
+	public StructuredUserDefinedType getSuper() {
+		if (!this.superLoaded) this.loadSuper();
+		return this.super_;
+	}
+	
+	public ICatalogObject[] getImpacted(){
+		if (!this.impactsLoaded) {
+			this.impacts = this.getImpactedObjects();
+			this.impactsLoaded = true;
+		}
+		ICatalogObject[] objs = new ICatalogObject[impacts.size()];
+		impacts.toArray(objs);
+		return objs;
+	}
+
+	public Collection getStatistics(){
+		return new ArrayList();
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == SQLDataTypesPackage.STRUCTURED_USER_DEFINED_TYPE__ATTRIBUTES) {
+			this.getAttributes();
+		}
+		else if(id == SQLDataTypesPackage.STRUCTURED_USER_DEFINED_TYPE__SUPER) {
+			this.getSuper();
+		}
+		return super.eIsSet(eFeature);
+	}
+	
+	private synchronized void loadAttributes() {
+		if(this.attributesLoaded) return;
+		EList attributeList = super.getAttributes();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			Connection connection = this.getConnection();
+			Statement s = connection.createStatement();
+			ResultSet r = s.executeQuery("SELECT ATTR_NAME, ATTR_TYPESCHEMA, ATTR_TYPENAME" + //$NON-NLS-1$
+					", LENGTH, SCALE, CODEPAGE, TARGET_TYPESCHEMA,TARGET_TYPENAME,LOGGED,COMPACT"  //$NON-NLS-1$
+					+ " FROM SYSCAT.ATTRIBUTES"  //$NON-NLS-1$
+					+ " WHERE TYPENAME = SOURCE_TYPENAME" //$NON-NLS-1$
+					+ " AND TYPESCHEMA = SOURCE_TYPESCHEMA" //$NON-NLS-1$
+					+ " AND TYPESCHEMA='" + LUWUtil.getIdentifier(this.getSchema().getName()) + "'" //$NON-NLS-1$ //$NON-NLS-2$
+					+ " AND TYPENAME='" + LUWUtil.getIdentifier(this.getName())  //$NON-NLS-1$ //$NON-NLS-2$
+					+ "' ORDER BY ORDINAL "); //$NON-NLS-1$
+			while(r.next()) {
+				LUWCatalogAttribute attribute = new LUWCatalogAttribute();
+				
+				final String attrName = r.getString(1);
+				attribute.setName(attrName);
+				
+				final DatabaseDefinition databaseDefinition = this.getDatabaseDefinition();
+				String attrTypeName = r.getString(3);
+				if (attrTypeName.equalsIgnoreCase("FLOAT")){ //$NON-NLS-1$
+					int length =r.getInt(4);
+					if (length ==4) attrTypeName="REAL"; //$NON-NLS-1$
+					else attrTypeName="DOUBLE"; //$NON-NLS-1$
+				}
+				PredefinedDataTypeDefinition typeDefinition = databaseDefinition.getPredefinedDataTypeDefinition(attrTypeName);
+				if(typeDefinition != null) {
+					
+					if (typeDefinition.getPrimitiveType().getValue() == PrimitiveType.CHARACTER) {
+						final int codePage = r.getInt(6);
+						if(codePage == 0) {
+							typeDefinition = databaseDefinition.getPredefinedDataTypeDefinition("CHAR () FOR BIT DATA"); //$NON-NLS-1$
+						}
+					}
+					else if (typeDefinition.getPrimitiveType().getValue() == PrimitiveType.CHARACTER_VARYING) {
+						final int codePage = r.getInt(6);
+						if(codePage == 0) {
+							typeDefinition = databaseDefinition.getPredefinedDataTypeDefinition("VARCHAR () FOR BIT DATA"); //$NON-NLS-1$
+						}
+					}
+					
+					PredefinedDataType type = databaseDefinition.getPredefinedDataType(typeDefinition);
+					if(typeDefinition.isLengthSupported()) {
+						final int length = r.getInt(4);
+						EStructuralFeature feature = type.eClass().getEStructuralFeature("length");  //$NON-NLS-1$
+						type.eSet(feature, new Integer(length));
+					}
+					else if(typeDefinition.isPrecisionSupported()) {
+						if (attrTypeName.equals("TIMESTAMP")) {
+							int length = r.getInt(4);
+							EStructuralFeature feature = type.eClass().getEStructuralFeature("fractionalSecondsPrecision"); //$NON-NLS-1$
+							type.eSet(feature, new Integer(length));
+						}
+						else {
+							int length = r.getInt(4);
+							if (attrTypeName.equals("DECFLOAT")) {
+								if (length == 8) length = 16;
+								else length = 34;
+							}
+							EStructuralFeature feature = type.eClass().getEStructuralFeature("precision"); //$NON-NLS-1$
+							type.eSet(feature, new Integer(length));
+						}
+					}
+					
+					if(typeDefinition.isScaleSupported()) {
+						final int scale = r.getInt(5);
+						EStructuralFeature feature = type.eClass().getEStructuralFeature("scale"); //$NON-NLS-1$
+						type.eSet(feature, new Integer(scale));
+					}
+					
+					attribute.setContainedType(type);
+				}
+				else {
+					if (attrTypeName.equals("REFERENCE")){ //$NON-NLS-1$
+						final String typeSchemaName = r.getString("TARGET_TYPESCHEMA").trim(); //$NON-NLS-1$
+						final String udtName = r.getString("TARGET_TYPENAME"); //$NON-NLS-1$
+						attribute.setReferencedType(LUWCatalogStructuredUserDefinedType.getUserDefinedType(this,typeSchemaName,udtName));
+					} else {
+						final String attrTypeSchemaName = r.getString(2).trim();
+						Schema attrTypeSchema = LUWCatalogStructuredUserDefinedType.getSchema(this,attrTypeSchemaName);
+						attribute.setReferencedType(LUWCatalogStructuredUserDefinedType.getUserDefinedType(this,attrTypeSchemaName,attrTypeName));
+					}
+				}
+				
+				final String logged = r.getString("LOGGED");
+				if (logged.equals("Y")) {
+					attribute.setLOBLogged(true);
+				} else {
+					attribute.setLOBLogged(false);
+				}
+
+				final String compact = r.getString("COMPACT");
+				if (compact.equals("Y")) {
+					attribute.setLOBCompacted(true);
+				} else {
+					attribute.setLOBCompacted(false);
+				}
+				
+				
+				attributeList.add(attribute);
+			}
+			this.attributesLoaded = true;
+			r.close();
+			s.close();
+		}
+		catch (Exception e) {
+			 e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+	
+	private synchronized void loadSuper() {
+		if(this.superLoaded) return;
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			Connection connection = this.getConnection();
+			String query = "SELECT SOURCE_TYPESCHEMA,SOURCE_TYPENAME"  //$NON-NLS-1$
+				+ " FROM SYSCAT.ATTRIBUTES"  //$NON-NLS-1$
+				+ " WHERE TYPESCHEMA='" + LUWUtil.getIdentifier(this.getSchema().getName()) + "'" //$NON-NLS-1$ //$NON-NLS-2$
+				+ " AND TYPENAME='" + LUWUtil.getIdentifier(this.getName()) + "'" //$NON-NLS-1$ //$NON-NLS-2$
+				+ " AND TYPENAME <> SOURCE_TYPENAME" //$NON-NLS-1$
+				+ " ORDER BY ORDINAL DESC"; //$NON-NLS-1$
+			Statement s = connection.createStatement();
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				LUWCatalogAttribute attribute = new LUWCatalogAttribute();
+				
+				final String sourceSchemaName = r.getString("SOURCE_TYPESCHEMA").trim(); //$NON-NLS-1$
+				final String sourceTypeName = r.getString("SOURCE_TYPENAME"); //$NON-NLS-1$
+
+				this.setSuper(LUWCatalogStructuredUserDefinedType.getStructuredUserDefinedType(this,sourceSchemaName,sourceTypeName));
+
+				break;
+			}
+
+			this.superLoaded = true;
+			r.close();
+			s.close();
+		}
+		catch (Exception e) {
+			 e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	
+	private DatabaseDefinition getDatabaseDefinition() {
+		return RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(this.getCatalogDatabase());
+	}
+	
+	protected static Schema getSchema(UserDefinedType type, String schemaName) {
+		Schema s = type.getSchema();
+		if(s.getName().equals(schemaName)) return s;
+		
+		Database db = s.getDatabase();
+		if (db instanceof LUWCatalogDatabase){
+			s = ((LUWCatalogDatabase)db).getSchema(schemaName);
+			if (s != null) return s;
+		} 
+		Iterator it = db.getSchemas().iterator();
+		while(it.hasNext()) {
+			s = (Schema) it.next();
+			if(s.getName().equals(schemaName)) return s;			
+		}
+		
+		Schema schema = new LUWCatalogSchema();
+		schema.setName(schemaName);
+		schema.setDatabase(db);
+
+		if (db instanceof LUWCatalogDatabase){
+			((LUWCatalogDatabase)db).cacheSchema(schema);
+		}
+		
+		return schema;
+	}
+	private static UserDefinedType getUserDefinedType(UserDefinedType type,String schemaName, String userDefinedTypeName) {
+		Schema schema = LUWCatalogStructuredUserDefinedType.getSchema(type,schemaName);
+		Iterator it = schema.getUserDefinedTypes().iterator();
+		while(it.hasNext()) {
+			UserDefinedType userDefinedType = (UserDefinedType) it.next();
+			if(userDefinedType.getName().equals(userDefinedTypeName)) return userDefinedType;			
+		}
+
+		UserDefinedType userDefinedType = new LUWCatalogDistinctUserDefinedType();
+		userDefinedType.setName(userDefinedTypeName);
+		userDefinedType.setSchema(schema);
+		
+		return userDefinedType;		
+	}
+
+	private static StructuredUserDefinedType getStructuredUserDefinedType(UserDefinedType type ,String schemaName, String userDefinedTypeName) {
+		Schema schema = LUWCatalogStructuredUserDefinedType.getSchema(type,schemaName);
+		Iterator it = schema.getUserDefinedTypes().iterator();
+		while(it.hasNext()) {
+			UserDefinedType userDefinedType = (UserDefinedType) it.next();
+			if(userDefinedType instanceof StructuredUserDefinedType 
+				&& userDefinedType.getName().equals(userDefinedTypeName)) {
+				return (StructuredUserDefinedType)userDefinedType;			
+			}
+		}
+
+		StructuredUserDefinedType userDefinedType = new LUWCatalogStructuredUserDefinedType();
+		userDefinedType.setName(userDefinedTypeName);
+		userDefinedType.setSchema(schema);
+		
+		return userDefinedType;		
+	}
+	
+	private static Table getTable(UserDefinedType type,String schemaName, String tableName) {
+		Schema schema = LUWCatalogStructuredUserDefinedType.getSchema(type,schemaName);
+		if (schema instanceof LUWCatalogSchema) {
+			return  ((LUWCatalogSchema)schema).getTable(schema.getName(),tableName);
+		} 
+		Iterator it = schema.getTables().iterator();
+		while(it.hasNext()) {
+			Table table = (Table) it.next();
+			if(table.getName().equals(tableName)) return table;			
+		}
+		return null;		
+	}
+		
+	public static Routine getRountine(UserDefinedType type,String schemaName, String specificName) {
+		Schema schema = LUWCatalogStructuredUserDefinedType.getSchema(type,schemaName);
+		Iterator it = schema.getRoutines().iterator();
+		while(it.hasNext()) {
+			Routine routine = (Routine) it.next();
+			if(specificName.equals(routine.getSpecificName())) return routine;			
+		}
+		return null;
+	}
+
+	public static TableConstraint getTableConstraint(UserDefinedType type, String schemaName,String  tableName, String constName) {
+		Table t = LUWCatalogStructuredUserDefinedType.getTable(type, schemaName,tableName);
+		if (!(t instanceof BaseTable)) return null;
+		Iterator it = ((BaseTable)t).getConstraints().iterator();
+		while(it.hasNext()) {
+			TableConstraint constraint = (TableConstraint) it.next();
+			if(constraint.getName().equals(constName)) return constraint;			
+		}
+
+		return null;
+	}
+
+	public static Trigger getTrigger(UserDefinedType type, String schemaName, String tabName, String triggerName) {
+		Table table = LUWCatalogStructuredUserDefinedType.getTable(type, schemaName,tabName);
+		if (table != null) {
+			Iterator it = table.getTriggers().iterator();
+			while(it.hasNext()) {
+				Trigger r = (Trigger) it.next();
+				if(r.getName().equals(triggerName)) return r;			
+			}
+		}
+		return null;
+	}
+
+	public static DB2Package getDb2Package(UserDefinedType type,String schemaName, String pkgName, String pkgUniqueID) {
+		Schema schema = LUWCatalogStructuredUserDefinedType.getSchema(type,schemaName);
+		if (schema instanceof LUWCatalogSchema) {
+			return  ((LUWCatalogSchema)schema).getDB2Package(pkgName, pkgUniqueID);
+		} 
+		return null;
+	}
+	
+	private Collection getImpactedObjects(){
+		Collection impacts = new ArrayList();
+		Connection connection = this.getConnection();
+
+		impacts.addAll(LUWCatalogStructuredUserDefinedType.getImpactedTriggers(connection, this));
+		impacts.addAll(LUWCatalogStructuredUserDefinedType.getImpactedTables(connection, this));
+		impacts.addAll(LUWCatalogStructuredUserDefinedType.getImpactedConstraints(connection, this));
+		impacts.addAll(LUWCatalogStructuredUserDefinedType.getImpactedRoutines(connection, this));
+		impacts.addAll(LUWCatalogStructuredUserDefinedType.getImpactedPackages(connection, this));
+
+		return impacts;
+	}
+
+	protected static Collection getImpactedTables(Connection connection, UserDefinedType type) {
+		Collection impacts = new ArrayList();
+		try {
+			Statement s = connection.createStatement();
+			String query = "SELECT DISTINCT TABNAME, TABSCHEMA" +
+					" FROM SYSCAT.TABDEP" +
+					" WHERE BTYPE='R'" +
+					" AND BNAME ='" + LUWUtil.getIdentifier(type.getName()) + "'" +
+					" AND BSCHEMA = '" + LUWUtil.getIdentifier(type.getSchema().getName()) + "'" +
+					" UNION ALL" +
+					" SELECT DISTINCT TABNAME,TABSCHEMA" +
+					" FROM SYSCAT.COLUMNS" +
+					" WHERE TYPESCHEMA = '" + LUWUtil.getIdentifier(type.getSchema().getName()) + "'" +
+					" AND TYPENAME ='" + LUWUtil.getIdentifier(type.getName()) + "'" 
++					" FOR FETCH ONLY";
+			
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String tabName = r.getString("TABNAME").trim();
+				final String schemaName = r.getString("TABSCHEMA").trim();
+				Table t = LUWCatalogStructuredUserDefinedType.getTable(type, schemaName, tabName);
+				if (t !=  null) {
+					impacts.add(t);
+				}
+			}
+			r.close();
+			s.close();
+
+		}catch(SQLException e) {
+			 e.printStackTrace();
+		}
+		return impacts;
+	}
+
+
+
+	protected static Collection getImpactedConstraints(Connection connection, UserDefinedType type) {
+		Collection impacts = new ArrayList();
+		try {
+			Statement s = connection.createStatement();
+			String query = "SELECT CONSTNAME,TABNAME,TABSCHEMA" +
+					" FROM SYSCAT.CONSTDEP" +
+					" WHERE BTYPE='R'" +
+					" AND BNAME='" + LUWUtil.getIdentifier(type.getName()) + "'" +
+					" AND BSCHEMA='" + LUWUtil.getIdentifier(type.getSchema().getName()) + "'" +
+					" FOR FETCH ONLY";
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String constName = r.getString("CONSTNAME").trim();
+				final String tabName = r.getString("TABNAME").trim();
+				final String schemaName = r.getString("TABSCHEMA").trim();
+				TableConstraint constraint = LUWCatalogStructuredUserDefinedType.getTableConstraint(type, schemaName, tabName, constName);
+				if (constraint !=  null) {
+					impacts.add(constraint);
+				}
+			}
+			r.close();
+			s.close();
+		}catch(SQLException e) {
+			 e.printStackTrace();
+		}
+		return impacts;
+	}
+
+	protected static Collection getImpactedTriggers(Connection connection, UserDefinedType type) {
+		Collection impacts = new ArrayList();
+		try {
+			Statement s = connection.createStatement();
+			String query = "SELECT DISTINCT A.TABSCHEMA, A.TABNAME, A.TRIGNAME" +
+			" FROM SYSCAT.TRIGGERS A, SYSCAT.TRIGDEP B" +
+			" WHERE (B.BNAME='" + LUWUtil.getIdentifier(type.getName()) + "'" +
+			" AND B.BSCHEMA='" + LUWUtil.getIdentifier(type.getSchema().getName()) + "'" +
+			" AND B.BTYPE='R'" +
+			" AND A.TRIGNAME=B.TRIGNAME" +
+			" AND A.TRIGSCHEMA=B.TRIGSCHEMA)" +
+			" FOR FETCH ONLY";
+			
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String trigName = r.getString("TRIGNAME").trim();
+				final String tabName = r.getString("TABNAME").trim();
+				final String schemaName = r.getString("TABSCHEMA").trim();
+				Trigger trigger = LUWCatalogStructuredUserDefinedType.getTrigger(type, schemaName, tabName, trigName);
+				if (trigger !=  null) {
+					impacts.add(trigger);
+				}
+
+			}
+			r.close();
+			s.close();
+		}catch(SQLException e) {
+			 e.printStackTrace();
+		}
+		return impacts;
+	}
+
+	protected static Collection getImpactedRoutines(Connection connection, UserDefinedType type) {
+		Collection impacts = new ArrayList();
+		try {
+			Statement s = connection.createStatement();
+			String query = "SELECT ROUTINENAME,ROUTINESCHEMA" +
+					" FROM SYSCAT.ROUTINEDEP" +
+					" WHERE BTYPE='R'" +
+					" AND BNAME='" + LUWUtil.getIdentifier(type.getName()) + "'" +
+					" AND BSCHEMA='" + LUWUtil.getIdentifier(type.getSchema().getName()) + "'" +
+					" FOR FETCH ONLY";
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String routineName = r.getString("ROUTINENAME").trim();
+				final String schemaName = r.getString("ROUTINESCHEMA").trim();
+				Routine p = LUWCatalogStructuredUserDefinedType.getRountine(type, schemaName, routineName);
+				if (p !=  null) {
+					impacts.add(p);
+				}
+			}
+			r.close();
+			s.close();
+		}catch(SQLException e) {
+			 e.printStackTrace();
+		}
+		return impacts;
+	}
+	
+	protected static Collection getImpactedPackages(Connection connection, UserDefinedType type) {
+		Collection impacts = new ArrayList();
+		try {
+			Statement s = connection.createStatement();
+			String query = "SELECT PKGNAME, PKGSCHEMA, HEX(UNIQUE_ID) AS UID" +
+					" FROM SYSCAT.PACKAGEDEP" +
+					" WHERE BTYPE = 'R'" +
+					" AND BNAME='" + LUWUtil.getIdentifier(type.getName()) + "'" +
+					" AND BSCHEMA='" + LUWUtil.getIdentifier(type.getSchema().getName()) + "'" +
+					" FOR FETCH ONLY";
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String pkgName = r.getString("PKGNAME").trim();
+				final String schemaName = r.getString("PKGSCHEMA").trim();
+				final String pkgUniqueID = r.getString("UID").trim();
+				DB2Package p = LUWCatalogStructuredUserDefinedType.getDb2Package(type, schemaName, pkgName, pkgUniqueID);
+				if (p !=  null) {
+					impacts.add(p);
+				}
+			}
+			r.close();
+			s.close();
+		}catch(SQLException e) {
+			 e.printStackTrace();
+		}
+		return impacts;
+	}
+
+
+	private boolean attributesLoaded = false;
+	private boolean superLoaded = false;
+	private boolean impactsLoaded = false;
+	private Collection impacts = new ArrayList();
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogTable.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogTable.java
new file mode 100644
index 0000000..54d9494
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogTable.java
@@ -0,0 +1,2123 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.math.BigInteger;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.sql.Timestamp;
+import java.text.DateFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Vector;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.enablement.ibm.catalog.IDatabaseObject;
+import org.eclipse.datatools.enablement.ibm.catalog.util.CatalogStatistics;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.LUWCatalogIndex.IndexUniqueRule;
+//bgp import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.CatalogCache;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.DatabaseREProvider;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWDdlParser;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWUtil;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWCatalogMessages;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartitionKey;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableImpl;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2IdentitySpecifier;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2IndexType;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Package;
+import org.eclipse.datatools.enablement.ibm.db2.model.GenerateType;
+import org.eclipse.datatools.enablement.ibm.util.IRowCountCache;
+import org.eclipse.datatools.enablement.ibm.util.ModelHelper;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.AuthorizationIdentifier;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Privilege;
+import org.eclipse.datatools.modelbase.sql.constraints.Constraint;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.SQLConstraintsPackage;
+import org.eclipse.datatools.modelbase.sql.constraints.TableConstraint;
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.PrimitiveType;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.ActionGranularityType;
+import org.eclipse.datatools.modelbase.sql.tables.ActionTimeType;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWCatalogTable extends LUWTableImpl implements IRowCountCache,ICatalogObject,IDatabaseObject {
+
+	public void refresh() {
+		this.columnsLoaded = false;
+		this.constraintLoaded = false;
+		this.indexLoaded = false;
+		this.triggerLoaded = false;
+		this.partitionKeyLoaded = false;
+		
+		this.dataPartitionLoaded = false;
+		this.tablespaceLoaded = false;
+
+		this.privilegeLoaded = false;
+		this.rowCountLoaded = false;
+
+		this.reset();
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+	
+	public Database getCatalogDatabase() {
+		return this.getSchema().getDatabase();		
+	}
+	
+	public void refresh(int refreshType){
+		if ((IDatabaseObject.IMPACTS & refreshType)  == IDatabaseObject.IMPACTS) {
+			this.impacts.clear();
+			this.impactsLoaded = false;
+		}
+		if ((IDatabaseObject.STATISTICS & refreshType)  == IDatabaseObject.STATISTICS) {
+			this.statistics.clear();
+			this.statisticsLoaded = false;
+			this.rowCountLoaded = false;
+		}
+	}
+
+	public EList getColumns() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getColumns();
+		} else {
+			if(!this.columnsLoaded) this.loadColumns();
+			return this.columns;
+		}
+	}
+
+	public synchronized EList getConstraints() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getConstraints();
+		} else {
+			if(!this.constraintLoaded) this.loadConstraints();
+			return this.constraints;
+		}
+	}
+	
+	public EList getIndex() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getIndex();
+		} else {
+			if(!this.indexLoaded) this.loadIndexes();
+			return this.index;
+		}
+	}
+
+	public EList getTriggers() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getTriggers();
+		} else {
+			if(!this.triggerLoaded) this.loadTriggers();
+			return this.triggers;
+		}
+	}
+	
+	public LUWPartitionKey getPartitionKey() {
+		if (!this.partitionKeyLoaded) this.loadPartitionKey();
+		return this.partitionKey;
+	}
+
+	public LUWTableSpace getRegularDataTableSpace(){
+		if(!this.tablespaceLoaded) this.loadTablespace();
+		return this.regularDataTableSpace;
+	}
+
+	public LUWTableSpace getIndexDataTableSpace(){
+		if(!this.tablespaceLoaded) this.loadTablespace();
+		return this.indexDataTableSpace;
+	}
+
+	public LUWTableSpace getLOBDataTableSpace(){
+		if(!this.tablespaceLoaded) this.loadTablespace();
+		return this.lobDataTableSpace;
+	}
+	
+	public EList getDataPartitions(){
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getDataPartitions();
+		} else {
+			if (!this.dataPartitionLoaded) this.loadDataPartitions();
+			return this.dataPartitions;
+		}
+	}
+	
+	public LUWDataPartitionKey getDataPartitionKey() {
+		if (!this.dataPartitionLoaded) this.loadDataPartitions();
+		return this.dataPartitionKey;
+	}
+	
+	/**
+	 * This override includes the TableSpaces used in Data Partitions
+	 * in the associated Table Spaces list
+	 */
+	@Override
+	public List getTableSpaces() {
+		Vector tableSpaces = new Vector();
+		tableSpaces.addAll(super.getTableSpaces());   //General table spaces are added in to list with this method ( calls LUWTableImpl.getTableSpaces() )
+		if (this.getDataPartitions().size() != 0){	// For DB2 version <9, DataPartitions size will be 0
+			Iterator it = this.getDataPartitions().iterator();
+			while(it.hasNext()){
+				LUWDataPartition dataPartition = (LUWDataPartition)it.next();
+				if(!tableSpaces.contains(dataPartition.getRegularDataTableSpace()))
+					tableSpaces.add(dataPartition.getRegularDataTableSpace());
+				if(!tableSpaces.contains(dataPartition.getLOBDataTableSpace()))
+					tableSpaces.add(dataPartition.getLOBDataTableSpace());
+			}
+		}
+		return tableSpaces;
+	}
+
+	
+	public EList getPrivileges() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getPrivileges();
+		} else {
+			if (!this.privilegeLoaded) this.loadPrivileges();
+			return this.privileges;
+		}
+	}
+	
+	public ICatalogObject[] getImpacted(){
+		if (!this.impactsLoaded) {
+			this.impacts = this.getImpactedObjects();
+			this.impactsLoaded = true;
+		}
+		ICatalogObject[] objs = new ICatalogObject[impacts.size()];
+		impacts.toArray(objs);
+		return objs;
+	}
+
+	public Collection getStatistics(){
+		if (!this.statisticsLoaded) {
+			this.statistics = LUWCatalogTable.getStatistics(this.getConnection(), this);
+			this.statisticsLoaded = true;
+		}
+		return this.statistics;
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == LUWPackage.LUW_TABLE__COLUMNS) {
+			this.getColumns();
+		}
+		else if(id == LUWPackage.LUW_TABLE__CONSTRAINTS) {
+			this.getConstraints();
+		}
+		else if(id == LUWPackage.LUW_TABLE__INDEX) {
+			this.getIndex();
+		}
+		else if(id == LUWPackage.LUW_TABLE__TRIGGERS) {
+			this.getTriggers();
+		}
+		else if(id == LUWPackage.LUW_TABLE__PARTITION_KEY) {
+			this.getPartitionKey();
+		}
+		else if(id == LUWPackage.LUW_TABLE__REGULAR_DATA_TABLE_SPACE) {
+			this.getRegularDataTableSpace();
+		}
+		else if(id == LUWPackage.LUW_TABLE__INDEX_DATA_TABLE_SPACE) {
+			this.getIndexDataTableSpace();
+		}
+		else if(id == LUWPackage.LUW_TABLE__LOB_DATA_TABLE_SPACE) {
+			this.getLOBDataTableSpace();
+		}
+		else if(id == LUWPackage.LUW_TABLE__DATA_PARTITIONS) {
+			this.getDataPartitions();
+		}
+		else if(id == LUWPackage.LUW_TABLE__DATA_PARTITION_KEY) {
+			this.getDataPartitionKey();
+		}
+		else if(id == LUWPackage.LUW_TABLE__PRIVILEGES) {
+			this.getPrivileges();
+		}
+		
+		return super.eIsSet(eFeature);
+	}
+	
+	private synchronized void loadColumns() {
+		if(this.columnsLoaded) return;
+		this.columnsLoaded = true;
+
+		EList columns = super.getColumns();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);
+		try {
+			LUWCatalogTable.loadColumns(this.getConnection(), columns, this);
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+		this.cacheColumn(columns);
+		this.eSetDeliver(deliver);
+	}
+
+	private synchronized void loadConstraints() {
+		if(this.constraintLoaded) return;
+		this.constraintLoaded = true;
+
+		EList constraintList = super.getConstraints();
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogTable.loadConstraints(this.getConnection(), constraintList, this);
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		LUWCatalogDatabase database = (LUWCatalogDatabase)getCatalogDatabase();
+//bgp		CatalogCache cache = CatalogCache.getCache( database );
+
+//<bgp		if ( cache.isBatchLoading() && cache.isLoaded( CatalogCache.CONSTRAINTS ) ) {
+//			Collection<Constraint> constraints = cache.getConstraints( this );
+//			
+//			constraintList.clear();
+//			constraintList.addAll( constraints );
+//bgp>		}
+
+		this.eSetDeliver(deliver);
+	}
+
+	private synchronized void loadIndexes() {
+		if(this.indexLoaded) return;
+		this.indexLoaded = true;
+
+		EList indexes = super.getIndex();
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogTable.loadIndexes(this.getConnection(), indexes, this,((LUWCatalogDatabase)this.getCatalogDatabase()).getLoadOptions());
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		
+		LUWCatalogDatabase database = (LUWCatalogDatabase)getCatalogDatabase();
+//bgp		CatalogCache cache = CatalogCache.getCache( database );
+
+//<bgp		if ( cache.isBatchLoading() && cache.isLoaded( CatalogCache.INDEXES ) ) {
+//			Collection<Index> idxs = cache.getIndexes( this );
+//			
+//			indexes.clear();
+//			
+//			for ( Index index : idxs ) {
+//				DB2IndexType indexType = ((LUWCatalogIndex)index).getIndexType();
+//				switch (indexType.getValue()) {
+//					case DB2IndexType.BLOCK:
+//					case DB2IndexType.DIMENSION:
+//						indexes.add(0,index);
+//						break;
+//					default:
+//						indexes.add(index);
+//				}
+//			}
+//bgp>		}
+
+		this.eSetDeliver(deliver);
+	}
+	
+	private synchronized void loadTriggers() {
+		if(this.triggerLoaded) return;
+		this.triggerLoaded = true;
+
+		EList triggerList = super.getTriggers();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogTable.loadTriggers(this.getConnection(), triggerList, this,((LUWCatalogDatabase)this.getCatalogDatabase()).getLoadOptions());
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		LUWCatalogDatabase database = (LUWCatalogDatabase)getCatalogDatabase();
+//bgp		CatalogCache cache = CatalogCache.getCache( database );
+
+//<bgp		if ( cache.isBatchLoading() && cache.isLoaded( CatalogCache.TRIGGERS ) ) {
+//			Collection<Trigger> triggers = cache.getTriggers( this );
+//
+//			triggerList.clear();
+//			triggerList.addAll( triggers );
+//bgp>		}
+
+		this.eSetDeliver(deliver);
+	}
+
+	private synchronized void loadPartitionKey() {
+		if(this.partitionKeyLoaded) return;
+		this.partitionKeyLoaded = true;
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogTable.loadPartitionKey(this.getConnection(), this);
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	private synchronized void loadTablespace() {
+		if(this.tablespaceLoaded) return;
+		this.tablespaceLoaded = true;
+		
+		Database database = getCatalogDatabase();
+//bgp		CatalogCache cache = CatalogCache.getCache( database );
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+
+		try {
+//bgp			if ( !cache.isBatchLoading() &&
+			if (this.tbspaceName != null || this.indexTbspaceName != null || this.longTbspaceName != null) {
+				this.setAssociatedTablespace();
+			} else {
+				LUWCatalogTable.loadTablespace(this.getConnection(), this);
+			}
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	private synchronized void loadDataPartitions() {
+		if(this.dataPartitionLoaded) return;
+		this.dataPartitionLoaded = true;
+
+		super.getDataPartitions().clear();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogTable.loadDataPartitions(this.getConnection(), this);
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+	
+	private synchronized void loadPrivileges() {
+		if(this.privilegeLoaded) return;
+		this.privilegeLoaded = true;
+
+		EList privileges = super.getPrivileges();
+		for (Iterator iter= privileges.iterator(); iter.hasNext();){
+			Privilege privilege = (Privilege) iter.next();
+			privilege.setGrantor(null);
+			privilege.setGrantee(null);
+		}
+		
+		privileges.clear();
+	
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogTable.loadPrivileges(this.getConnection(),privileges, this,"");
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	/** Class for caching column information for one table */
+	private static class TableColumnInfo {
+		/** The table's schema */
+		String schemaName;
+		/** The name of the table */
+		String tableName;
+		/** Info about each column in the table */
+		List<ColumnInfo> columns = new ArrayList<ColumnInfo>();
+
+		/**
+		 * Get the key for cache lookup
+		 * 
+		 * @return The key
+		 */
+		public String getKey() {
+			return this.schemaName + "." + this.tableName; //$NON-NLS-1$
+		}
+
+		/**
+		 * Update a table with its columns using information found here
+		 * 
+		 * @param table 
+		 * @param columnList 
+		 */
+		public void setColumnInfoIn( Table table, List<Column> columnList ) {
+			Database database = table.getSchema().getDatabase();
+			final DatabaseDefinition databaseDefinition = 
+				RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+			final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+
+			Object[] list = columnList.toArray();
+			columnList.clear();
+
+			for ( ColumnInfo info : this.columns ) {
+		        Object element = LUWCatalogTable.findElement(
+		        		list, info.columnName, LUWPackage.eINSTANCE.getLUWColumn() );
+				
+		        LUWCatalogColumn column;
+				
+				if ( element != null ) {
+					column = (LUWCatalogColumn)element;
+					column.refresh();
+				} else {
+					column = new LUWCatalogColumn();
+				}	
+	
+				column.setName( info.columnName );					
+				column.setDescription( info.remarks );
+	
+				if ( info.generated.equals("A") ) { //$NON-NLS-1$
+					column.setGenerationType( GenerateType.ALWAYS_LITERAL );
+					column.setGenerated( true );
+				}
+				else if ( info.generated.equals("D") ) { //$NON-NLS-1$
+					column.setGenerationType( GenerateType.BY_DEFAULT_LITERAL );
+					column.setGenerated( true );
+				}
+					
+				if ( info.isIdentity.equals("Y") ) { //$NON-NLS-1$
+					DB2IdentitySpecifier identitySpecifier = (DB2IdentitySpecifier)factory.create(
+							DB2ModelPackage.eINSTANCE.getDB2IdentitySpecifier() );
+					column.setIdentitySpecifier( identitySpecifier );
+				}
+				else { 
+					column.setIdentitySpecifier( null );
+				}
+				
+				column.setNullable( info.nulls.equals("Y") ); //$NON-NLS-1$
+	
+				if ( info.typeName.equalsIgnoreCase( "FLOAT" ) ) { //$NON-NLS-1$
+					if ( info.length == 4 ) {
+						info.typeName = "REAL"; //$NON-NLS-1$
+					}
+					else {
+						info.typeName = "DOUBLE"; //$NON-NLS-1$
+					}
+				}
+				
+				PredefinedDataTypeDefinition typeDefinition =
+					databaseDefinition.getPredefinedDataTypeDefinition( info.typeName );
+					
+				if ( typeDefinition != null ) {
+					if ( typeDefinition.getPrimitiveType().getValue() == PrimitiveType.CHARACTER ) {
+						if ( info.codePage == 0 ) {
+							typeDefinition = databaseDefinition.getPredefinedDataTypeDefinition(
+									"CHAR () FOR BIT DATA" ); //$NON-NLS-1$
+						}
+					}
+					else if ( typeDefinition.getPrimitiveType().getValue() == PrimitiveType.CHARACTER_VARYING ) {
+						if ( info.codePage == 0 ) {
+							if ( info.typeName.equals( "LONG VARCHAR" ) ) { //$NON-NLS-1$
+								typeDefinition = databaseDefinition.getPredefinedDataTypeDefinition(
+										"LONG VARCHAR FOR BIT DATA" ); //$NON-NLS-1$
+							}
+							else {
+								typeDefinition = databaseDefinition.getPredefinedDataTypeDefinition(
+										"VARCHAR () FOR BIT DATA" ); //$NON-NLS-1$
+							}
+						}
+					}
+	
+					PredefinedDataType type = databaseDefinition.getPredefinedDataType(typeDefinition);
+	
+					if ( typeDefinition.isLengthSupported() ) {
+						EStructuralFeature feature = type.eClass().getEStructuralFeature( "length" ); //$NON-NLS-1$
+						type.eSet( feature, new Integer( info.length ) );
+					}
+					else if ( typeDefinition.isPrecisionSupported() ) {
+						if ( info.typeName.equals("TIMESTAMP") ) { //$NON-NLS-1$
+							EStructuralFeature feature = type.eClass().getEStructuralFeature( "fractionalSecondsPrecision"); //$NON-NLS-1$
+							type.eSet( feature, new Integer( info.scale ) );
+						}
+						else {
+							if ( info.typeName.equals("DECFLOAT") ) { //$NON-NLS-1$
+								if ( info.length == 8 ) {
+									info.length = 16;
+								}
+								else {
+									info.length = 34;
+								}
+							}
+	
+							EStructuralFeature feature = type.eClass().getEStructuralFeature( "precision" ); //$NON-NLS-1$
+							type.eSet( feature, new Integer( info.length ) );
+						}
+					}
+					
+					if ( typeDefinition.isScaleSupported() ) {
+						EStructuralFeature feature = type.eClass().getEStructuralFeature( "scale" ); //$NON-NLS-1$
+						type.eSet( feature, new Integer( info.scale ) );
+					}
+					
+					column.setContainedType(type);
+				}
+				else {
+					if ( info.typeName.equals( "REFERENCE" ) ) { //$NON-NLS-1$
+						column.setReferencedType( LUWCatalogTable.getUserDefinedType(
+								table, info.targetTypeSchemaName, info.targetUdtName ) );
+					}
+					else {
+						column.setReferencedType( LUWCatalogTable.getUserDefinedType(
+								table, info.typeSchemaName, info.typeName ) );
+					}
+				}
+					
+				if ( info.generated.equals( " " ) ) { //$NON-NLS-1$
+					column.setDefaultValue( info.dflt );
+				}
+				
+				column.setLobLogged( !info.logged.equals("N") ); //$NON-NLS-1$
+				column.setLobCompacted( info.compact.equals("Y") ); //$NON-NLS-1$
+				
+				// Check for row change timestamp
+		        if ( info.rowChangeTimestamp.equals("Y") ) { //$NON-NLS-1$
+					column.setRowChangeTimestamp( true );	
+				}
+	
+		        columnList.add(column);
+			}
+		}
+	}
+
+	/** Class to cache details about a column */
+	private static class ColumnInfo {
+		String columnName;
+		String remarks;
+		String generated;
+		String isIdentity;
+		String nulls;
+		String typeSchemaName;
+		String typeName;
+		int length;
+		int scale;
+		int codePage;
+		String dflt;
+		String targetTypeSchemaName;
+		String targetUdtName;
+		String logged;
+		String compact;
+		String rowChangeTimestamp = "";
+	}
+
+//<bgp	/**
+//	 * Update a table with cached column information
+//	 * 
+//	 * @param cache
+//	 * @param table
+//	 * @param columnList
+//	 */
+//	private static void loadColumnsFromCache( CatalogCache cache, Table table, String key, List<Column> columnList ) {
+//		TableColumnInfo tinfo = (TableColumnInfo)cache.getCachedProperty( PROP_TABLE_COLUMNS, key );
+//		
+//		if ( tinfo != null ) {
+//			tinfo.setColumnInfoIn( table, columnList );
+//		}
+//bgp>	}
+
+	/**
+	 * Load the columns for a table
+	 * 
+	 * @param connection
+	 * @param columnList
+	 * @param table
+	 * @throws SQLException
+	 */
+	public static void loadColumns(Connection connection, EList columnList, Table table) throws SQLException {
+		final Schema schema = table.getSchema();
+		final Database database = ModelHelper.getDatabase(schema);
+//bgp		CatalogCache cache = CatalogCache.getCache( database );
+		final String propkey = schema.getName() + "." + table.getName(); //$NON-NLS-1$
+		
+//<bgp		// N.B. for large numbers of tables/columns, caching the columns uses too much memory
+//		// So at least for now, this caching is disabled
+//bgp>		boolean caching = false && cache.isBatchLoading();
+		
+//<bgp		if ( caching ) {
+//			if ( cache.isPropertyCacheLoaded( PROP_TABLE_COLUMNS ) ) {
+//				loadColumnsFromCache( cache, table, propkey, columnList );
+//				return;
+//			}
+//			
+//			cache.setPropertyCacheLoaded( PROP_TABLE_COLUMNS );
+//bgp>		}
+
+		final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+        String version = databaseDefinition.getVersion();
+        float ver = 9.0f;
+        try {
+            ver = Float.parseFloat(version.substring(1));
+        }
+        catch (NumberFormatException e) {
+        	// Ignore
+        }
+        
+        String query = "SELECT COLNAME, REMARKS, GENERATED, IDENTITY, NULLS," //$NON-NLS-1$
+			+ " TYPESCHEMA, TYPENAME, LENGTH, SCALE, CODEPAGE, DEFAULT, TARGET_TYPESCHEMA, TARGET_TYPENAME,"  //$NON-NLS-1$
+			+ " LOGGED, COMPACT,"; //$NON-NLS-1$
+
+        if (ver >= 9.5f) {
+			query +=  " ROWCHANGETIMESTAMP,"; //$NON-NLS-1$
+        }        	
+
+		query += " TABSCHEMA, TABNAME" //$NON-NLS-1$
+			+ " FROM SYSCAT.COLUMNS"; //$NON-NLS-1$
+
+//bgp		if ( !caching ) {
+			query += " WHERE TABSCHEMA='" +LUWUtil.getIdentifier(table.getSchema().getName()) + "'" //$NON-NLS-1$ //$NON-NLS-2$
+				+ " AND TABNAME='" + LUWUtil.getIdentifier(table.getName()) + "'"; //$NON-NLS-1$ //$NON-NLS-2$
+//bgp		}
+
+		query += " ORDER BY TABSCHEMA, TABNAME, COLNO"; //$NON-NLS-1$
+		
+		Statement s = connection.createStatement();
+		ResultSet r = s.executeQuery(query);
+
+		TableColumnInfo tinfo = null;
+
+		try {
+			while(r.next()) {
+				final String schemaName = r.getString( "TABSCHEMA" ).trim(); //$NON-NLS-1$
+				final String tableName = r.getString( "TABNAME" ).trim(); //$NON-NLS-1$
+
+				if ( tinfo == null || !tinfo.schemaName.equals( schemaName )
+						|| !tinfo.tableName.equals( tableName )) {
+					tinfo = new TableColumnInfo();
+					
+					tinfo.schemaName = schemaName;
+					tinfo.tableName = tableName;
+					
+//<bgp					if ( caching ) {
+//						String key = tinfo.getKey();
+//						cache.cacheProperty( PROP_TABLE_COLUMNS, key, tinfo );
+//bgp>					}
+				}
+
+				ColumnInfo info = new ColumnInfo();
+				info.columnName = r.getString(1);
+				info.remarks = r.getString(2);
+				info.generated = r.getString(3);
+				info.isIdentity = r.getString(4);
+				info.nulls = r.getString(5);
+				info.typeSchemaName = r.getString(6).trim();
+				info.typeName = r.getString(7);
+				info.length = r.getInt(8);
+				info.scale = r.getInt(9);
+				info.codePage = r.getInt(10);
+				info.dflt = r.getString(11);
+				String str = r.getString("TARGET_TYPESCHEMA"); //$NON-NLS-1$
+				if ( str != null ) {
+					info.targetTypeSchemaName = str.trim();
+				}
+				info.targetUdtName = r.getString("TARGET_TYPENAME"); //$NON-NLS-1$
+				info.logged = r.getString("LOGGED"); //$NON-NLS-1$
+				info.compact = r.getString("COMPACT"); //$NON-NLS-1$
+
+				if (ver >= 9.5f) {
+					info.rowChangeTimestamp = r.getString( "ROWCHANGETIMESTAMP" ); //$NON-NLS-1$
+		        }
+				
+				tinfo.columns.add( info );
+			}
+			
+//bgp			if ( tinfo != null && !caching ) {
+	         if ( tinfo != null) {
+				tinfo.setColumnInfoIn( table, columnList );
+			}
+		}
+		catch(Exception e) {
+			 e.printStackTrace();
+		}
+		
+		r.close();
+		s.close();
+		
+//<bgp		if ( caching ) {
+//			loadColumnsFromCache( cache, table, propkey, columnList );
+//bgp>		}
+	}
+
+	public static void loadProperties(Connection connection, Table table) throws SQLException {
+
+		final String schemaname = table.getSchema().getName();
+		final String tablename = table.getName();
+		String key = schemaname + "." + tablename; //$NON-NLS-1$
+		LUWCatalogDatabase database = (LUWCatalogDatabase)table.getSchema().getDatabase();
+//bgp		CatalogCache cache = CatalogCache.getCache( database );
+
+//<bgp		if ( cache.isBatchLoading() ) {
+//			if ( cache.isPropertyCacheLoaded( PROP_TABLE_PROPERTIES ) ) {
+//				Object propobj = cache.getCachedProperty( PROP_TABLE_PROPERTIES, key );
+//
+//				if (propobj != null) {
+//					table.setDescription( (String)propobj );
+//				}
+//
+//				return;
+//			}
+//			
+//			cache.setPropertyCacheLoaded( PROP_TABLE_PROPERTIES );
+//bgp>		}
+		
+		String query = "SELECT TABSCHEMA, TABNAME, REMARKS FROM SYSCAT.TABLES"; //$NON-NLS-1$
+
+//bgp		if ( !cache.isBatchLoading() ) {
+			query += " WHERE TABSCHEMA='" //$NON-NLS-1$
+					+ LUWUtil.getIdentifier( schemaname )
+					+ "' AND TABNAME='" //$NON-NLS-1$
+					+ LUWUtil.getIdentifier( tablename ) + "'"; //$NON-NLS-1$	
+//bgp		}
+
+		Statement s = connection.createStatement();
+		ResultSet r = s.executeQuery(query);
+
+		try {
+			while(r.next()) {
+				final String sname = r.getString( "TABSCHEMA" ).trim(); //$NON-NLS-1$
+				final String tname = r.getString( "TABNAME" ).trim(); //$NON-NLS-1$
+
+//<bgp				if ( cache.isBatchLoading()
+//						&& null == cache.findTable( sname, tname, null )) {
+//					// The container is filtered out, so go on
+//					continue;
+//bgp>				}
+
+				final String description = r.getString( "REMARKS" ); //$NON-NLS-1$
+
+//<bgp				if ( cache.isBatchLoading() ) {
+//					key = sname + "." + tname; //$NON-NLS-1$
+//					cache.cacheProperty(
+//							PROP_TABLE_PROPERTIES, key, description );
+//					
+//					if ( sname.equals( schemaname ) && tname.equals( tablename ))
+//					{
+//						table.setDescription( description );
+//					}
+//				}
+//bgp>				else {
+					table.setDescription( description );
+//bgp				}
+			}
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+		
+		r.close();
+		s.close();
+	}
+
+	
+	public static void loadTriggers(Connection connection, EList triggerList, Table table, int options) throws SQLException {
+		final Schema schema = table.getSchema();
+		LUWCatalogDatabase database  = (LUWCatalogDatabase)ModelHelper.getDatabase(schema);
+//bgp		CatalogCache cache = CatalogCache.getCache( database );
+
+//<bgp		if ( cache.isBatchLoading() ) {
+//			if (cache.isLoaded( CatalogCache.TRIGGERS ) ) {
+//				return;
+//			}
+//			
+//			cache.setLoaded( CatalogCache.TRIGGERS );
+//bgp>		}
+
+		final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+		final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+
+		
+		Object[] list = triggerList.toArray();
+		triggerList.clear();
+
+		if ((options & DatabaseREProvider.EXCLUDE_TRIGGERS)== DatabaseREProvider.EXCLUDE_TRIGGERS) return;
+
+		String query = "SELECT TRIGSCHEMA, TRIGNAME, REMARKS, TRIGTIME, TRIGEVENT, GRANULARITY, TEXT,"
+				+ " TABSCHEMA, TABNAME"
+				+ " FROM SYSCAT.TRIGGERS"; //$NON-NLS-1$
+		
+//bgp		if ( !cache.isBatchLoading() ) {
+			query +=
+				" WHERE TABSCHEMA='" + LUWUtil.getIdentifier(table.getSchema().getName()) //$NON-NLS-1$
+				+ "' AND TABNAME='" + LUWUtil.getIdentifier(table.getName()) + "'"; //$NON-NLS-1$ //$NON-NLS-2$ 
+//bgp		}
+
+		Statement s = connection.createStatement();
+		ResultSet r = s.executeQuery( query );
+
+		try{
+			while(r.next()) {
+				final String schemaName = r.getString( "TABSCHEMA" ).trim(); //$NON-NLS-1$
+				final String tableName = r.getString( "TABNAME" ).trim(); //$NON-NLS-1$
+
+//<bgp				if ( cache.isBatchLoading()
+//						&& null == cache.findTable( schemaName, tableName, null )) {
+//					// The container is filtered out, go on
+//					continue;
+//bgp>				}
+				
+				LUWCatalogTrigger trigger;
+				final String trigName = r.getString(2);
+
+				EClass metaclass= SQLTablesPackage.eINSTANCE.getTrigger();
+
+				Object element = LUWCatalogTable.findElement(list, trigName,metaclass);
+				
+				if (element != null){
+					trigger = (LUWCatalogTrigger) element;
+					triggerList.add(trigger);
+					((ICatalogObject)element).refresh();
+				} else {
+					trigger = new LUWCatalogTrigger();
+					trigger.setName(trigName);
+
+//<bgp					if ( cache.isBatchLoading() ) {
+//						cache.cacheTrigger(
+//								schemaName, tableName, trigName, trigger );
+//					}
+//bgp>					else {
+						triggerList.add(trigger);
+//bgp					}
+				}
+
+				String text = r.getString(7);
+				if (text != null) {
+					//remove un-readable character
+					text = text.replaceAll("[\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u000b\u000c\u000e\u000f" +
+	               		"\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f]", " ");
+				}
+				final String trigSchema = r.getString(1).trim();
+				trigger.setSchema(LUWCatalogTable.getSchema(table, trigSchema));
+
+				final String remarks = r.getString(3);
+				trigger.setDescription(remarks);
+
+				final String trigTime = r.getString(4);
+				if(trigTime.equals("A")) trigger.setActionTime(ActionTimeType.AFTER_LITERAL); //$NON-NLS-1$
+				else if(trigTime.equals("B")) trigger.setActionTime(ActionTimeType.BEFORE_LITERAL); //$NON-NLS-1$
+				else if(trigTime.equals("I")) trigger.setActionTime(ActionTimeType.INSTEADOF_LITERAL); //$NON-NLS-1$
+				else continue;
+				
+				final String trigEvent = r.getString(5);
+				if(trigEvent.equals("I")) trigger.setInsertType(true); //$NON-NLS-1$
+				else if(trigEvent.equals("D")) trigger.setDeleteType(true); //$NON-NLS-1$
+				else if(trigEvent.equals("U")) trigger.setUpdateType(true); //$NON-NLS-1$
+				else continue;
+
+				final String granularity = r.getString(6);
+				if(granularity.equals("S")) trigger.setActionGranularity(ActionGranularityType.STATEMENT_LITERAL); //$NON-NLS-1$
+				else if(granularity.equals("R")) trigger.setActionGranularity(ActionGranularityType.ROW_LITERAL); //$NON-NLS-1$
+				else continue;
+
+				
+				LUWDdlParser ddlParser = new LUWDdlParser(RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(table.getSchema().getDatabase()));
+				ddlParser.parseTrigger(trigger,text);
+			}
+		}
+		catch (Exception e) {
+			 e.printStackTrace();
+		}
+
+		r.close();
+		s.close();
+	}
+	
+	public static void loadIndexes(Connection connection, EList indexList, Table table, int options) throws SQLException {
+		LUWCatalogDatabase database  = (LUWCatalogDatabase)table.getSchema().getDatabase();
+//bgp		CatalogCache cache = CatalogCache.getCache( database );
+
+//<bgp		if ( cache.isBatchLoading() ) {
+//			if ( cache.isLoaded( CatalogCache.INDEXES ) ) {
+//				return;
+//			}
+//			
+//			cache.setLoaded( CatalogCache.INDEXES );
+//bgp>		}
+
+		Object[] list = indexList.toArray();
+		indexList.clear();
+		
+		if (database.isBatchLoad()) return;
+
+		if ((options & DatabaseREProvider.EXCLUDE_INDEXES)== DatabaseREProvider.EXCLUDE_INDEXES) return;
+
+		final String sname = table.getSchema().getName();
+		final String tname = table.getName();
+			
+		String q = "SELECT INDEXTYPE, INDSCHEMA, INDNAME, REMARKS, UNIQUERULE, PCTFREE,SYSTEM_REQUIRED,USER_DEFINED," //$NON-NLS-1$
+				+ " TABSCHEMA, TABNAME" //$NON-NLS-1$
+				+ " FROM SYSCAT.INDEXES"; //$NON-NLS-1$
+		
+//bgp		if ( !cache.isBatchLoading() ) {
+			q += " WHERE TABSCHEMA='" //$NON-NLS-1$
+				+ LUWUtil.getIdentifier(sname)
+				+ "' AND TABNAME='" //$NON-NLS-1$
+				+ LUWUtil.getIdentifier(tname)
+				+ "'"; //$NON-NLS-1$
+//bgp		}
+
+		Statement s = connection.createStatement();
+		ResultSet r = s.executeQuery( q );
+
+		try {
+			while(r.next()) {
+				final String tableSchemaName = r.getString( "TABSCHEMA" ).trim(); //$NON-NLS-1$
+				final String tableName = r.getString( "TABNAME" ).trim(); //$NON-NLS-1$
+				final String indSchema = r.getString(2).trim();
+
+//<bgp				if ( cache.isBatchLoading()
+//						&& null == cache.findTable( tableSchemaName, tableName, null ) ) {
+//					// The index's table is filtered out, so we omit the
+//					// index as well
+//					continue;
+//bgp>				}
+
+				Schema schema = LUWCatalogTable.getSchema(table, indSchema);
+
+				final String indName = r.getString(3);
+
+				Index index = null;
+				Object element = LUWCatalogTable.findElement(list,indName,SQLConstraintsPackage.eINSTANCE.getIndex());
+				
+				if (element != null){
+					index = (Index) element;
+					((ICatalogObject)element).refresh();
+				} else {
+					final String type = r.getString(1).trim();
+					if(type.equals("REG")) { //$NON-NLS-1$
+						index = new LUWCatalogIndex();
+					}
+					else if(type.equals("CLUS")) { //$NON-NLS-1$
+						index = new LUWCatalogIndex();
+						index.setClustered(true);
+					}
+					else if(type.equals("DIM")) { //$NON-NLS-1$
+						index = new LUWCatalogIndex();	
+						((LUWCatalogIndex)index).setIndexType(DB2IndexType.DIMENSION_LITERAL);
+					}
+					else if(type.equals("BLOK")) { //$NON-NLS-1$
+						index = new LUWCatalogIndex();	
+						((LUWCatalogIndex)index).setIndexType(DB2IndexType.BLOCK_LITERAL);
+					}
+					else {
+						continue;
+					}
+					
+					index.setSchema(schema);
+					index.setName(indName);
+				}
+				
+				
+				final String remarks = r.getString(4);
+				index.setDescription(remarks);
+				
+				final String uniqueRule = r.getString(5);
+				if(!uniqueRule.equals("D")) index.setUnique(true); //$NON-NLS-1$
+				if ("P".equalsIgnoreCase(uniqueRule))  ((LUWCatalogIndex)index).setIndexUniqueRule(IndexUniqueRule.PRIMARYKEY);
+				
+				
+				final int pctfree = r.getInt(6);
+				if(pctfree == -1) index.setFillFactor(10);
+				else index.setFillFactor(pctfree);
+				
+				
+				final int userDefined = r.getInt("USER_DEFINED");
+				if (userDefined == 0) {
+					index.setSystemGenerated(true);
+				}
+				else {
+					index.setSystemGenerated(false);
+				}
+				
+				
+				final int systemRequred = r.getInt("SYSTEM_REQUIRED");
+				if (index instanceof LUWIndex) {
+					if (systemRequred != 0) {
+						((LUWIndex)index).setSystemRequired(true);
+					} else {
+						((LUWIndex)index).setSystemRequired(false);
+					}
+				}
+				
+//<bgp				if ( cache.isBatchLoading() ) {
+//					cache.cacheIndex( tableSchemaName, tableName, index.getSchema().getName(), indName, index );
+//				}
+//bgp>				else {
+					DB2IndexType indexType = ((LUWCatalogIndex)index).getIndexType();
+					switch (indexType.getValue()) {
+						case DB2IndexType.BLOCK:
+						case DB2IndexType.DIMENSION:
+							indexList.add(0,index);
+							break;
+						default:
+							indexList.add(index);
+//bgp					}
+				}
+			}
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		r.close();
+		s.close();
+	}
+	
+	public static void loadConstraints(Connection connection, EList constraintList, Table table) throws SQLException {
+		Database database  = table.getSchema().getDatabase();
+//bgp		CatalogCache cache = CatalogCache.getCache( database );
+
+//<bgp		if ( cache.isBatchLoading() ) {
+//			if ( cache.isLoaded( CatalogCache.CONSTRAINTS ) ) {
+//				return;
+//			}
+//			
+//			cache.setLoaded( CatalogCache.CONSTRAINTS );
+//bgp>		}
+
+		Object[] list = constraintList.toArray();
+		constraintList.clear();
+
+		String query = "SELECT DISTINCT A.CONSTNAME, A.REMARKS, A.TYPE, A.ENFORCED, B.TYPE CHECKTYPE," //$NON-NLS-1$
+				+ "  A.TABSCHEMA, A.TABNAME" //$NON-NLS-1$ 
+				+ " FROM SYSCAT.TABCONST A LEFT OUTER JOIN SYSCAT.CHECKS B "  //$NON-NLS-1$
+				+ " ON A.CONSTNAME = B.CONSTNAME"; //$NON-NLS-1$
+
+//bgp		if ( !cache.isBatchLoading() ) {
+			query +=
+				" WHERE A.TABSCHEMA='" + LUWUtil.getIdentifier(table.getSchema().getName()) //$NON-NLS-1$
+				+ "' AND A.TABNAME='" + LUWUtil.getIdentifier(table.getName()) + "'"; //$NON-NLS-1$ //$NON-NLS-2$ 
+//bgp		}
+
+		query += " ORDER BY TYPE DESC"; //$NON-NLS-1$
+
+		Statement s = connection.createStatement();
+		ResultSet r = s.executeQuery(query);
+
+		try {
+			while(r.next()) {
+				final String schemaName = r.getString( "TABSCHEMA" ).trim(); //$NON-NLS-1$
+				final String tableName = r.getString( "TABNAME" ).trim(); //$NON-NLS-1$
+
+//<bgp				if ( cache.isBatchLoading() ) {
+//					if ( null == cache.findTable( schemaName, tableName, null ) ) {
+//						// The container is filtered out, so go on
+//						continue;
+//					}
+//bgp>				}
+
+				final String constName = r.getString(1);
+
+				Constraint constraint = null;
+
+				final String type = r.getString(3);
+				EClass metaclass=null;
+				if (type.equals("K")){ //$NON-NLS-1$
+					metaclass = SQLConstraintsPackage.eINSTANCE.getCheckConstraint();
+				} else if (type.equals("P")){ //$NON-NLS-1$
+					metaclass = SQLConstraintsPackage.eINSTANCE.getPrimaryKey();
+				}else if(type.equals("U")) { //$NON-NLS-1$
+					metaclass = SQLConstraintsPackage.eINSTANCE.getUniqueConstraint();
+				}else if(type.equals("F")) { //$NON-NLS-1$
+					metaclass = SQLConstraintsPackage.eINSTANCE.getForeignKey();
+				}
+					
+				
+				Object sqlElement = LUWCatalogTable.findElement(list,constName,metaclass);
+				if (sqlElement != null) {
+					constraint = (Constraint)sqlElement;
+					((ICatalogObject)constraint).refresh();
+				} else {
+					if(type.equals("K")) { //$NON-NLS-1$
+						final String checktype = r.getString("CHECKTYPE"); //$NON-NLS-1$
+						if (checktype != null && checktype.equals("C")) //$NON-NLS-1$
+							constraint = new LUWCatalogCheckConstraint();
+						else
+							continue;
+					}
+					else if(type.equals("P")) { //$NON-NLS-1$
+						constraint = new LUWCatalogPrimaryKey();					
+					}
+					else if(type.equals("U")) { //$NON-NLS-1$
+						constraint = new LUWCatalogUniqueConstraint();
+					}
+					else if(type.equals("F")) { //$NON-NLS-1$
+						constraint = new LUWCatalogForeignKey();
+					}
+					else {
+						continue;
+					}
+					
+					constraint.setName(constName);
+				}
+				
+				final String remarks = r.getString(2);
+				constraint.setDescription(remarks);
+
+				final String enforced = r.getString(4);
+				if (enforced.equals("Y")){ //$NON-NLS-1$
+					constraint.setEnforced(true);
+				} else {
+					constraint.setEnforced(false);
+				}
+				
+//<bgp				if ( cache.isBatchLoading() ) {
+//					cache.cacheConstraint(
+//							schemaName, tableName, constName, constraint );
+//				}
+//bgp>				else {
+					constraintList.add(constraint);
+//bgp				}
+			}
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		r.close();
+		s.close();
+	}
+
+	public static void loadPartitionKey(Connection connection, LUWStorageTable table) throws SQLException {
+		try {
+			StorageProvider provider = LUWCatalogDatabase.getCatalogStorageProvider();
+			if (provider != null){
+				LUWPartitionKey partitionKey = provider.getPartitionKey(table);
+				table.setPartitionKey(partitionKey);
+			}
+		} catch(Exception e){
+			e.printStackTrace();
+		}
+	}
+
+	/** Information about a table's tablespaces for caching */
+	private static class TablespaceInfo {
+		/** The table's schema */
+		String schemaName;
+		/** The table's name */
+		String tableName;
+		/** The tablespace used for regular data */
+		String tbspaceName;
+		/** The tablespace used for indexes */
+		String indexTbspaceName;
+		/** The tablespace used for LOBs */
+		String longTbspaceName;
+
+		/**
+		 * Get the key for cache lookup
+		 * 
+		 * @return The key
+		 */
+		public String getKey() {
+			return this.schemaName + "." + this.tableName;
+		}
+
+		/**
+		 * Update a table with information from here (actually update the
+		 * tablespaces with this table)
+		 * 
+		 * @param table
+		 */
+	    public void setInfoInTable( Table table ) {
+//bgp		public void setInfoInTable( CatalogCache cache, Table table ) {
+			if ( this.tbspaceName != null ) {
+				LUWTableSpace tbSpace = LUWCatalogTable.getTablespace( table, this.tbspaceName );
+				if ( tbSpace != null ) {
+					tbSpace.getRegularDataTables().add( table );
+				}
+			}
+			
+			if ( this.indexTbspaceName != null ) {
+				LUWTableSpace tbSpace = LUWCatalogTable.getTablespace( table, this.indexTbspaceName );
+				if ( tbSpace != null ) {
+					tbSpace.getIndexDataTables().add( table );
+				}
+			}
+
+			if ( this.longTbspaceName != null ) {
+				LUWTableSpace tbSpace = LUWCatalogTable.getTablespace( table, this.longTbspaceName );
+				if ( tbSpace != null ) {
+					tbSpace.getLOBDataTables().add( table );
+				}
+			}
+		}
+	}
+
+//<bgp	/**
+//	 * Update a table with cached tablespace info
+//	 * 
+//	 * @param cache
+//	 * @param table
+//	 * @param key
+//	 */
+//	private static void loadTablespaceFromCache(
+//			CatalogCache cache, Table table, String key ) {
+//		TablespaceInfo info = (TablespaceInfo)cache.getCachedProperty( PROP_TABLE_TABLESPACE, key );
+//		
+//		if ( info != null ) {
+//			info.setInfoInTable( cache, table );
+//		}
+//bgp>	}
+
+	/**
+	 * Load the tablespaces used for a table's data/indexes
+	 * 
+	 * @param connection
+	 * @param table
+	 * @throws SQLException
+	 */
+	public static void loadTablespace(Connection connection, Table table) throws SQLException {
+		if (!(table instanceof LUWStorageTable)) return;
+
+		Table luwtable = (Table)table;
+		Database database = luwtable.getSchema().getDatabase();
+//bgp		CatalogCache cache = CatalogCache.getCache( database );
+		String schemaName = LUWUtil.getIdentifier( luwtable.getSchema().getName() );
+		String tableName = LUWUtil.getIdentifier( luwtable.getName() );
+		String propkey = schemaName + "." + tableName; //$NON-NLS-1$
+
+//bgp		boolean caching = cache.isBatchLoading();
+		
+//<bgp		if ( caching ) {
+//			if ( cache.isPropertyCacheLoaded( PROP_TABLE_TABLESPACE ) ) {
+//				loadTablespaceFromCache( cache, luwtable, propkey );
+//				return;
+//			}
+//			
+//			cache.setPropertyCacheLoaded( PROP_TABLE_TABLESPACE );
+//bgp>		}
+
+		String query = "SELECT TBSPACE, INDEX_TBSPACE,LONG_TBSPACE, TABSCHEMA, TABNAME" + //$NON-NLS-1$
+					" FROM SYSCAT.TABLES"; //$NON-NLS-1$
+
+//bgp		if ( !caching ) {
+			query += " WHERE TABSCHEMA='" + schemaName + "'" + //$NON-NLS-1$ //$NON-NLS-2$
+						" AND TABNAME='" + tableName + "'"; //$NON-NLS-1$ //$NON-NLS-2$
+//bgp		}
+
+		Statement s = connection.createStatement();
+		ResultSet r = s.executeQuery(query);
+
+		try {
+			while(r.next()) {
+				final String tbspaceName = r.getString("TBSPACE"); //$NON-NLS-1$
+				final String indexTbspaceName = r.getString("INDEX_TBSPACE"); //$NON-NLS-1$
+				final String longTbspaceName = r.getString("LONG_TBSPACE"); //$NON-NLS-1$
+				
+				if ( tbspaceName == null && indexTbspaceName == null && longTbspaceName == null ) {
+					continue;
+				}
+
+				TablespaceInfo info = new TablespaceInfo();
+				info.tbspaceName = tbspaceName;
+				info.indexTbspaceName = indexTbspaceName;
+				info.longTbspaceName = longTbspaceName;
+				
+//bgp				if ( !caching ) {
+//				info.setInfoInTable( cache, luwtable );
+					info.setInfoInTable(luwtable );
+//<bgp				}
+//				else {
+//					info.schemaName = r.getString( "TABSCHEMA" ).trim(); //$NON-NLS-1$
+//					info.tableName = r.getString( "TABNAME" ).trim(); //$NON-NLS-1$
+//
+//					cache.cacheProperty( PROP_TABLE_TABLESPACE, info.getKey(), info );
+//bgp>				}
+			}
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+		
+		r.close();
+		s.close();
+		
+//<bgp		if ( caching ) {
+//			loadTablespaceFromCache( cache, luwtable, propkey );
+//bgp>		}
+	}
+	
+	public static void loadDataPartitions(Connection connection, LUWStorageTable table) throws SQLException {
+		try {
+			EList partList = table.getDataPartitions();
+			StorageProvider provider = LUWCatalogDatabase.getCatalogStorageProvider();
+			if (provider != null){
+				Iterator it = provider.getDataPartition(table).iterator();
+				while(it.hasNext()) {
+					LUWDataPartition part = (LUWDataPartition) it.next();
+					partList.add(part);
+				}
+			}
+		} catch(Exception e){
+			e.printStackTrace();
+		}
+	}
+
+	
+	public static void loadPrivileges(Connection connection, EList privilegeList,Table table, String granteeFilter) throws SQLException {
+
+		final Schema schema = table.getSchema();
+		final Database database = ModelHelper.getDatabase(schema);
+		final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+		final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+
+		int options = ((LUWCatalogDatabase)database).getLoadOptions();
+		if ((options & DatabaseREProvider.EXCLUDE_ACCESS_CONTROL)== DatabaseREProvider.EXCLUDE_ACCESS_CONTROL) return;
+
+		Statement s = connection.createStatement();
+		String query = "SELECT GRANTOR,GRANTEE,GRANTEETYPE" +
+					",CONTROLAUTH,ALTERAUTH,DELETEAUTH,INDEXAUTH,INSERTAUTH,SELECTAUTH" +
+					",REFAUTH,UPDATEAUTH" +
+					" FROM SYSCAT.TABAUTH" + 
+					" WHERE GRANTOR <> GRANTEE " +
+					" AND TABSCHEMA='" + LUWUtil.getIdentifier(table.getSchema().getName()) + "'" +
+					" AND TABNAME='" + LUWUtil.getIdentifier(table.getName()) + "'";
+		if (granteeFilter != null && !"".equals(granteeFilter)) query += " AND " + granteeFilter;
+		
+		ResultSet r = s.executeQuery(query);
+		try {
+			String userName = connection.getMetaData().getUserName();
+			while(r.next()) {
+				final String grantorId = r.getString("GRANTOR").trim();
+				AuthorizationIdentifier grantor = LUWCatalogDatabase.getAuthorizationId(database, grantorId,null);
+				final String granteeId = r.getString("GRANTEE").trim();
+				AuthorizationIdentifier grantee = null;
+				final String granteeType = r.getString("GRANTEETYPE");
+				if ("G".equals(granteeType)) {
+					grantee = LUWCatalogDatabase.getAuthorizationId(database, granteeId, "G");
+				} else if ("R".equals(granteeType)) {
+					grantee = LUWCatalogDatabase.getAuthorizationId(database, granteeId, "R");
+				} else {
+					grantee = LUWCatalogDatabase.getAuthorizationId(database, granteeId, "U");
+				}
+				
+				LUWCatalogPrivilege privilege = null;
+				boolean isSystemGranted = granteeId.equalsIgnoreCase(userName);
+				final String controlAuth = r.getString("CONTROLAUTH");
+				if ("Y".equals(controlAuth)) {
+					privilege = new LUWCatalogPrivilege();
+					privilege.setAction(LUWCatalogConstant.PRIVILEGE_CONTROL);
+					privilegeList.add(privilege);
+					privilege.setGrantor(grantor);
+					privilege.setGrantee(grantee);
+					LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+				}
+				
+				final String alterAuth = r.getString("ALTERAUTH");
+				if ("N".equals(alterAuth)) {
+				} else {
+					privilege = new LUWCatalogPrivilege();
+					privilege.setAction(LUWCatalogConstant.PRIVILEGE_ALTER);
+					if ("G".equals(alterAuth)) {
+						privilege.setGrantable(true);
+					}
+					privilegeList.add(privilege);
+					privilege.setGrantor(grantor);
+					privilege.setGrantee(grantee);
+					LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+				}
+
+				final String deleteAuth = r.getString("DELETEAUTH");
+				if ("N".equals(deleteAuth)) {
+				} else {
+					privilege = new LUWCatalogPrivilege();
+					privilege.setAction(LUWCatalogConstant.PRIVILEGE_DELETE);
+					if ("G".equals(deleteAuth)) {
+						privilege.setGrantable(true);
+					}
+					privilegeList.add(privilege);
+					privilege.setGrantor(grantor);
+					privilege.setGrantee(grantee);
+					LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+				}
+				
+				final String indexAuth = r.getString("INDEXAUTH");
+				if ("N".equals(indexAuth)) {
+				} else {
+					privilege = new LUWCatalogPrivilege();
+					privilege.setAction(LUWCatalogConstant.PRIVILEGE_INDEX);
+					if ("G".equals(indexAuth)) {
+						privilege.setGrantable(true);
+					}
+					privilegeList.add(privilege);
+					privilege.setGrantor(grantor);
+					privilege.setGrantee(grantee);
+					LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+				}
+
+				final String insertAuth = r.getString("INSERTAUTH");
+				if ("N".equals(insertAuth)) {
+				} else {
+					privilege = new LUWCatalogPrivilege();
+					privilege.setAction(LUWCatalogConstant.PRIVILEGE_INSERT);
+					if ("G".equals(insertAuth)) {
+						privilege.setGrantable(true);
+					}
+					privilegeList.add(privilege);
+					privilege.setGrantor(grantor);
+					privilege.setGrantee(grantee);
+					LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+				}
+				
+				final String selectAuth = r.getString("SELECTAUTH");
+				if ("N".equals(selectAuth)) {
+				} else {
+					privilege = new LUWCatalogPrivilege();
+					privilege.setAction(LUWCatalogConstant.PRIVILEGE_SELECT);
+					if ("G".equals(selectAuth)) {
+						privilege.setGrantable(true);
+					}
+					privilegeList.add(privilege);
+					privilege.setGrantor(grantor);
+					privilege.setGrantee(grantee);
+					LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+				}
+				
+				final String refAuth = r.getString("REFAUTH");
+				if ("N".equals(refAuth)) {
+				} else {
+					privilege = new LUWCatalogPrivilege();
+					privilege.setAction(LUWCatalogConstant.PRIVILEGE_REFERENCES);
+					if ("G".equals(refAuth)) {
+						privilege.setGrantable(true);
+					}
+					privilegeList.add(privilege);
+					privilege.setGrantor(grantor);
+					privilege.setGrantee(grantee);
+					LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+				}
+
+				final String updateAuth = r.getString("UPDATEAUTH");
+				if ("N".equals(updateAuth)) {
+				} else {
+					privilege = new LUWCatalogPrivilege();
+					privilege.setAction(LUWCatalogConstant.PRIVILEGE_UPDATE);
+					if ("G".equals(updateAuth)) {
+						privilege.setGrantable(true);
+					}
+					privilegeList.add(privilege);
+					privilege.setGrantor(grantor);
+					privilege.setGrantee(grantee);
+					LUWCatalogPrivilege.setAsSystemGranted(privilege,isSystemGranted);
+				}
+				
+			}
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		r.close();
+		s.close();
+	}
+	
+	protected static Schema getSchema(Table table, String schemaName) {
+		Schema s = table.getSchema();
+		if(s.getName().equals(schemaName)) return s;
+
+		Database db = s.getDatabase();
+		if (db instanceof LUWCatalogDatabase){
+			s = ((LUWCatalogDatabase)db).getSchema(schemaName);
+			if (s != null) return s;
+		} 
+		Iterator it = db.getSchemas().iterator();
+		while(it.hasNext()) {
+			s = (Schema) it.next();
+			if(s.getName().equals(schemaName)) return s;			
+		}
+	
+		Schema schema = new LUWCatalogSchema();
+		schema.setName(schemaName);
+		schema.setDatabase(db);
+
+		if (db instanceof LUWCatalogDatabase){
+			((LUWCatalogDatabase)db).cacheSchema(schema);
+		}
+		
+		return schema;
+	}
+
+	
+	public static UserDefinedType getUserDefinedType(Table table, String schemaName, String userDefinedTypeName) {
+		Schema schema = LUWCatalogTable.getSchema(table, schemaName);
+		Iterator it = schema.getUserDefinedTypes().iterator();
+		while(it.hasNext()) {
+			UserDefinedType userDefinedType = (UserDefinedType) it.next();
+			if(userDefinedType.getName().equals(userDefinedTypeName)) return userDefinedType;			
+		}
+
+		UserDefinedType userDefinedType = new LUWCatalogDistinctUserDefinedType();
+		userDefinedType.setName(userDefinedTypeName);
+		userDefinedType.setSchema(schema);
+		
+		return userDefinedType;		
+	}
+	
+	private static LUWTableSpace getTablespace(Table table, String tsNameName) {
+		if (! (table instanceof LUWStorageTable)) 
+			return null;
+		
+		LUWDatabase db = (LUWCatalogDatabase) table.getSchema().getDatabase();
+		StorageProvider provider = LUWCatalogDatabase.getCatalogStorageProvider();
+		if (provider != null){
+			return provider.getTablespace(db,tsNameName);
+		}
+		return null;
+	}
+	
+	private static Object findElement(Object[] list, String name,EClass metaclass){
+		Object object = null;
+		for (int i = 0; i < list.length; i++){
+			SQLObject sqlObject = (SQLObject) list[i];
+			if (sqlObject.getName().equals(name) && sqlObject.eClass() == metaclass && sqlObject instanceof ICatalogObject){
+				object = list[i];
+				break;
+			}
+		}
+		return object;
+	}
+	
+	private void cacheColumn(EList columns){
+		Iterator iter = columns.iterator();
+		while (iter.hasNext()) {
+			Column column = (Column) iter.next();
+			this.cachedColumn.put(column.getName(),column);
+		}
+	}
+
+	private void setAssociatedTablespace(){
+		if (this.tbspaceName != null){
+			LUWTableSpace tbSpace = LUWCatalogTable.getTablespace(this,this.tbspaceName);
+			if (tbSpace != null) {
+				tbSpace.getRegularDataTables().add(this);
+			}
+		}
+
+		//Index tablespace
+		if (this.indexTbspaceName != null) {
+			LUWTableSpace tbSpace = LUWCatalogTable.getTablespace(this,this.indexTbspaceName);
+			if (tbSpace != null) {
+				tbSpace.getIndexDataTables().add(this);
+			}
+		}
+
+		if (this.longTbspaceName != null) {
+			LUWTableSpace tbSpace = LUWCatalogTable.getTablespace(this,this.longTbspaceName);
+			if (tbSpace != null) {
+				tbSpace.getLOBDataTables().add(this);
+			}
+		}
+	}
+	
+	private void reset(){
+		this.cachedColumn.clear();
+		this.tbspaceName =null;
+		this.indexTbspaceName =null;
+		this.longTbspaceName =null;
+	}
+	
+	private Collection getImpactedObjects(){
+		Collection impacts = new ArrayList();
+		Connection connection = this.getConnection();
+		impacts.addAll(LUWCatalogTable.getImpactedAlias(connection, this));
+		impacts.addAll(LUWCatalogTable.getImpactedTables(connection, this));
+		impacts.addAll(LUWCatalogTable.getImpactedRoutines(connection, this));
+		impacts.addAll(LUWCatalogTable.getImpactedTriggers(connection, this));
+		impacts.addAll(LUWCatalogTable.getImpactedConstraints(connection, this));
+		impacts.addAll(LUWCatalogTable.getImpactedPackages(connection, this));
+		return impacts;
+	}
+
+	protected static Collection getImpactedAlias(Connection connection, Table table) {
+		Collection impacts = new ArrayList();
+		try {
+			Statement s = connection.createStatement();
+			String query = "SELECT TABNAME, TABSCHEMA " +
+						" FROM SYSCAT.TABLES" +
+			" WHERE TYPE='A'" +
+			" AND BASE_TABNAME='" + LUWUtil.getIdentifier(table.getName()) + "'" +
+			" AND BASE_TABSCHEMA='" + LUWUtil.getIdentifier(table.getSchema().getName()) + "'" +
+			" FOR FETCH ONLY";
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String tabName = r.getString("TABNAME").trim();
+				final String schemaName = r.getString("TABSCHEMA").trim();
+				Table t = LUWCatalogView.getTable(table, schemaName, tabName);
+				if (t !=  null) {
+					impacts.add(t);
+				}
+			}
+			r.close();
+			s.close();
+		}catch(SQLException e) {
+			// e.printStackTrace();
+		}
+		return impacts;
+	}
+
+	protected static Collection getImpactedTables(Connection connection, Table table) {
+		Collection impacts = new ArrayList();
+		try {
+			Statement s = connection.createStatement();
+			String query = "SELECT TABNAME, TABSCHEMA" +
+					" FROM SYSCAT.TABDEP" +
+					" WHERE DTYPE in ('V','S')" +
+					" AND BTYPE in ('T','V','S','A','N')" +
+					" AND BNAME='" + LUWUtil.getIdentifier(table.getName()) + "'" +
+					" AND BSCHEMA='" + LUWUtil.getIdentifier(table.getSchema().getName()) + "'" +
+					"FOR FETCH ONLY";
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String tabName = r.getString("TABNAME").trim();
+				final String schemaName = r.getString("TABSCHEMA").trim();
+				Table t = LUWCatalogView.getTable(table, schemaName, tabName);
+				if (t !=  null) {
+					impacts.add(t);
+				}
+			}
+			r.close();
+			s.close();
+		}catch(SQLException e) {
+			// e.printStackTrace();
+		}
+		return impacts;
+	}
+
+	protected static Collection getImpactedRoutines(Connection connection, Table table) {
+		Collection impacts = new ArrayList();
+		try {
+			Statement s = connection.createStatement();
+			String query = "SELECT ROUTINENAME, ROUTINESCHEMA" +
+					" FROM SYSCAT.ROUTINEDEP" +
+					" WHERE BTYPE in ('T','S','V','A','N')" +
+					" AND BNAME='" + LUWUtil.getIdentifier(table.getName()) + "'" +
+					" AND BSCHEMA='" + LUWUtil.getIdentifier(table.getSchema().getName()) + "'" +
+					" FOR FETCH ONLY";
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String routineName = r.getString("ROUTINENAME").trim();
+				final String schemaName = r.getString("ROUTINESCHEMA").trim();
+				Routine routine = LUWCatalogView.getRountine(table, schemaName, routineName);
+				if (routine !=  null) {
+					impacts.add(routine);
+				}
+			}
+			r.close();
+			s.close();
+		}catch(SQLException e) {
+			// e.printStackTrace();
+		}
+		return impacts;
+	}
+	
+	protected static Collection getImpactedTriggers(Connection connection, Table table) {
+		Collection impacts = new ArrayList();
+		try {
+			Statement s = connection.createStatement();
+
+			String query = "SELECT DISTINCT A.TABSCHEMA, A.TABNAME, A.TRIGNAME" +
+			" FROM SYSCAT.TRIGGERS A, SYSCAT.TRIGDEP B" +
+			" WHERE (B.BNAME='" + LUWUtil.getIdentifier(table.getName()) + "'" +
+			" AND B.BSCHEMA='" + LUWUtil.getIdentifier(table.getSchema().getName()) + "'" +
+			" AND BTYPE in ('T','S','V','A','N')" +
+			" AND A.TRIGNAME=B.TRIGNAME" +
+			" AND A.TRIGSCHEMA=B.TRIGSCHEMA)" +
+			" FOR FETCH ONLY";
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String trigName = r.getString("TRIGNAME").trim();
+				final String tabName = r.getString("TABNAME").trim();
+				final String schemaName = r.getString("TABSCHEMA").trim();
+				Trigger trigger = LUWCatalogView.getTrigger(table, schemaName, tabName,trigName);
+				if (trigger !=  null) {
+					impacts.add(trigger);
+				}
+			}
+			r.close();
+			s.close();
+			
+		}catch(SQLException e) {
+			// e.printStackTrace();
+		}
+		return impacts;
+	}
+	
+	protected static Collection getImpactedConstraints(Connection connection, Table table) {
+		Collection impacts = new ArrayList();
+		try {
+			Statement s = connection.createStatement();
+			String query = "SELECT CONSTNAME,TABNAME,TABSCHEMA" +
+					" FROM SYSCAT.REFERENCES" +
+					" WHERE REFTABNAME='" + LUWUtil.getIdentifier(table.getName()) + "'" +
+					" AND REFTABSCHEMA ='" + LUWUtil.getIdentifier(table.getSchema().getName()) + "'" +
+					" FOR FETCH ONLY";
+
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String constName = r.getString("CONSTNAME").trim();
+				final String tabName = r.getString("TABNAME").trim();
+				final String schemaName = r.getString("TABSCHEMA").trim();
+				TableConstraint constraint = LUWCatalogView.getTableConstraint(table, schemaName, tabName, constName);
+				if (constraint !=  null) {
+					impacts.add(constraint);
+				}
+			}
+			r.close();
+			s.close();
+		}catch(SQLException e) {
+			// e.printStackTrace();
+		}
+		return impacts;
+	}
+
+
+	protected static Collection getImpactedPackages(Connection connection, Table table) {
+		Collection impacts = new ArrayList();
+		try {
+			Statement s = connection.createStatement();
+			String query = "SELECT PKGNAME, PKGSCHEMA, HEX(UNIQUE_ID) AS UID" +
+					" FROM SYSCAT.PACKAGEDEP" +
+					" WHERE BTYPE IN ('T','V','S','A','N')" +
+					" AND BNAME='" + LUWUtil.getIdentifier(table.getName()) + "'" +
+					" AND BSCHEMA='" + LUWUtil.getIdentifier(table.getSchema().getName()) + "'" +
+					" FOR FETCH ONLY";
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String pkgName = r.getString("PKGNAME").trim();
+				final String schemaName = r.getString("PKGSCHEMA").trim();
+				final String pkgUniqueID = r.getString("UID").trim();
+				DB2Package pkg = LUWCatalogView.getDb2Package(table, schemaName, pkgName, pkgUniqueID);
+				if (pkg !=  null) {
+					impacts.add(pkg);
+				}
+				
+			}
+			r.close();
+			s.close();
+		}catch(SQLException e) {
+			// e.printStackTrace();
+		}
+		return impacts;
+	}
+	
+	public static Collection getStatistics(Connection connection, Table table){
+		Collection statistics = new ArrayList();
+		try {
+			
+	        final DatabaseDefinition definition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(table.getSchema().getDatabase());
+	        String version = definition.getVersion();
+	        float ver = 8.0f;
+	        try {
+	            ver = Float.parseFloat(version.substring(1));
+	        }
+	        catch (NumberFormatException e) {            
+	        }
+	        
+	        String query = "";
+	        if (ver < 9.0f) {
+				query = "SELECT T.STATS_TIME,S.CARD,S.NPAGES, S.FPAGES, S.OVERFLOW, S.ACTIVE_BLOCKS" +
+				" ,-1 AS AVGCOMPRESSEDROWSIZE,-1 AS AVGROWCOMPRESSIONRATIO, -1 AS AVGROWSIZE" +
+				" ,-1 AS PCTROWSCOMPRESSED, -1 AS PCTPAGESSAVED" +
+				" FROM SYSSTAT.TABLES S, SYSCAT.TABLES T" +
+				" WHERE S.TABSCHEMA = T.TABSCHEMA" +
+				" AND S.TABNAME = T.TABNAME " +
+				" AND S.TABSCHEMA='" + LUWUtil.getIdentifier(table.getSchema().getName()) + "'" +
+				" AND S.TABNAME ='" + LUWUtil.getIdentifier(table.getName()) + "'" +
+				" FOR FETCH ONLY";
+	        } else {
+				query = "SELECT T.STATS_TIME,S.CARD,S.NPAGES, S.FPAGES, S.OVERFLOW, S.ACTIVE_BLOCKS" +
+				" ,S.AVGCOMPRESSEDROWSIZE,S.AVGROWCOMPRESSIONRATIO, S.AVGROWSIZE" +
+				" ,S.PCTROWSCOMPRESSED,S.PCTPAGESSAVED" +
+				" FROM SYSSTAT.TABLES S, SYSCAT.TABLES T" +
+				" WHERE S.TABSCHEMA = T.TABSCHEMA" +
+				" AND S.TABNAME = T.TABNAME " +
+				" AND S.TABSCHEMA='" + LUWUtil.getIdentifier(table.getSchema().getName()) + "'" +
+				" AND S.TABNAME ='" + LUWUtil.getIdentifier(table.getName()) + "'" +
+				" FOR FETCH ONLY";
+	        }
+			
+			Statement s = connection.createStatement();
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				CatalogStatistics stats = null;
+
+				final Timestamp stats_time = r.getTimestamp("STATS_TIME");
+				if (stats_time != null) {
+					stats = new CatalogStatistics("STATS_TIME",LUWCatalogMessages.STAT_TIME,LUWCatalogMessages.STAT_TIME_DES,stats_time,"");
+					statistics.add(stats);
+				}
+				
+				final BigInteger card = r.getBigDecimal("CARD").toBigInteger();
+				if (card.intValue() != -1) {
+					stats = new CatalogStatistics("CARD",LUWCatalogMessages.STAT_CARD,LUWCatalogMessages.STAT_CARD_DES,card,"SYSSTAT.TABLES");
+					statistics.add(stats);
+				}
+				
+				final BigInteger npages = r.getBigDecimal("NPAGES").toBigInteger();
+				if (npages.intValue() != -1) {
+					stats = new CatalogStatistics("NPAGES",LUWCatalogMessages.STAT_NPAGES,LUWCatalogMessages.STAT_NPAGES_DES,npages,"SYSSTAT.TABLES");
+					statistics.add(stats);
+				}
+
+				final BigInteger fpages =  r.getBigDecimal("FPAGES").toBigInteger();
+				if (fpages.intValue() != -1) {
+					stats = new CatalogStatistics("FPAGES",LUWCatalogMessages.STAT_FPAGES,LUWCatalogMessages.STAT_FPAGES_DES,fpages,"SYSSTAT.TABLES");
+					statistics.add(stats);
+				}
+
+				final BigInteger overflow = r.getBigDecimal("OVERFLOW").toBigInteger();
+				if (overflow.intValue() != -1) {
+					stats = new CatalogStatistics("OVERFLOW",LUWCatalogMessages.STAT_OVERFLOW,LUWCatalogMessages.STAT_OVERFLOW_DES,overflow,"SYSSTAT.TABLES");
+					statistics.add(stats);
+				}
+				
+				final BigInteger activeBlocks = r.getBigDecimal("ACTIVE_BLOCKS").toBigInteger();;
+				if (activeBlocks.intValue() != -1) {
+					stats = new CatalogStatistics("ACTIVE_BLOCKS",LUWCatalogMessages.STAT_ACTIVE_BLOCKS,LUWCatalogMessages.STAT_ACTIVE_BLOCKS_DES,activeBlocks,"SYSSTAT.TABLES");
+					statistics.add(stats);
+				}
+
+				final int avgCompressedRowSize = r.getInt("AVGCOMPRESSEDROWSIZE");
+				if (avgCompressedRowSize != -1) {
+					stats = new CatalogStatistics("AVGCOMPRESSEDROWSIZE",LUWCatalogMessages.STAT_AVG_COMPRESSEDROWSIZE,LUWCatalogMessages.STAT_AVG_COMPRESSEDROWSIZE_DES,avgCompressedRowSize,"SYSSTAT.TABLES");
+					statistics.add(stats);
+				}
+
+				final float avgRowCompressionRatio = r.getFloat("AVGROWCOMPRESSIONRATIO");
+				if (avgRowCompressionRatio != -1) {
+					stats = new CatalogStatistics("AVGROWCOMPRESSIONRATIO",LUWCatalogMessages.STAT_AVG_ROW_COMPRESSION_RATIO,LUWCatalogMessages.STAT_AVG_ROW_COMPRESSION_RATIO_DES,avgRowCompressionRatio,"SYSSTAT.TABLES");
+					statistics.add(stats);
+				}
+
+				final int avgRowSize = r.getInt("AVGROWSIZE");
+				if (avgRowSize != -1) {
+					stats = new CatalogStatistics("AVGROWSIZE",LUWCatalogMessages.STAT_AVG_ROW_SIZE,LUWCatalogMessages.STAT_AVG_ROW_SIZE_DES,avgRowSize,"");
+					statistics.add(stats);
+				}
+
+				final float pctRowsCompressed = r.getFloat("PCTROWSCOMPRESSED");
+				if (pctRowsCompressed != -1) {
+					stats = new CatalogStatistics("PCTROWSCOMPRESSED",LUWCatalogMessages.STAT_PCT_ROWS_COMPRESSED,LUWCatalogMessages.STAT_PCT_ROWS_COMPRESSED_DES,pctRowsCompressed,"SYSSTAT.TABLES");
+					statistics.add(stats);
+				}
+
+				final float pctPagesSaved = r.getFloat("PCTPAGESSAVED");
+				if (pctPagesSaved != -1) {
+					stats = new CatalogStatistics("PCTPAGESSAVED",LUWCatalogMessages.STAT_PCT_PCT_PAGES_SAVED,LUWCatalogMessages.STAT_PCT_PCT_PAGES_SAVED_DES,pctPagesSaved,"SYSSTAT.TABLES");
+					statistics.add(stats);
+				}
+
+			}
+			r.close();
+			s.close();
+		}catch(SQLException e) {
+			// e.printStackTrace();
+		}
+		return statistics;
+	}
+
+	protected Column getColumn(String columnName){
+		return (Column)this.cachedColumn.get(columnName);
+	}
+	
+	void setTablespaceName(String tbspaceName){
+		this.tbspaceName = tbspaceName;
+	}
+
+	void setIndexTbspaceName(String indexTbspaceName){
+		this.indexTbspaceName = indexTbspaceName;
+	}
+	
+	void setlongTbspaceName(String longTbspaceName){
+		this.longTbspaceName = longTbspaceName;
+	}
+	
+	protected void getPrivilegesWithFilter(String granteeFilter) throws SQLException {
+		if (this.privilegeLoaded) return;
+		EList privileges = super.getPrivileges();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogTable.loadPrivileges(this.getConnection(), privileges, this,granteeFilter);
+		}catch( Exception e){
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	public String getRowCountString() {
+		if (!rowCountLoaded) {
+			this.rowCount = LUWCatalogTable.loadRowCount(this.getConnection(), this);
+			this.rowCountLoaded = true;
+		}
+		
+		return this.rowCount;
+	}
+	
+	public void setRowCountString(String count) {
+		rowCount = count;
+		rowCountLoaded = true;
+	}
+
+	public static String loadRowCount(Connection connection, Table table)  {
+		Database database = table.getSchema().getDatabase();
+//bgp		CatalogCache cache = CatalogCache.getCache( database );
+
+		String schemaname = LUWUtil.getIdentifier(table.getSchema().getName());
+		String tablename = LUWUtil.getIdentifier(table.getName());
+		String propkey = schemaname + "." + tablename; //$NON-NLS-1$
+		
+//<bgp		if ( cache.isBatchLoading() ) {
+//			if ( cache.isPropertyCacheLoaded( PROP_TABLE_ROWCOUNT ) ) {
+//				Object propobj = cache.getCachedProperty(
+//						PROP_TABLE_ROWCOUNT, propkey );
+//
+//				return (String)propobj;
+//			}
+//			
+//			cache.setPropertyCacheLoaded( PROP_TABLE_ROWCOUNT );
+//bgp>		}
+
+		String rowCount = null;
+
+		try {
+			String query = "SELECT T.STATS_TIME,S.CARD,T.TABSCHEMA,T.TABNAME" +
+						" FROM SYSSTAT.TABLES S, SYSCAT.TABLES T" +
+						" WHERE S.TABSCHEMA = T.TABSCHEMA" +
+						" AND S.TABNAME = T.TABNAME ";
+
+//bgp			if ( !cache.isBatchLoading() ) {
+				query += " AND S.TABSCHEMA='" + schemaname + "'" +
+						" AND S.TABNAME ='" + tablename + "'";
+//bgp			}
+			
+			query += " FOR FETCH ONLY";
+
+			Statement s = connection.createStatement();
+			ResultSet r = s.executeQuery(query);
+			
+			while(r.next()) {
+				String sname = r.getString( "TABSCHEMA" ).trim();
+				String tname = r.getString( "TABNAME" ).trim();
+
+//<bgp				if ( cache.isBatchLoading()
+//						&& null == cache.findTable( sname, tname, null ) ) {
+//					// The container is filtered out, go on
+//					continue;
+//bgp>				}
+				
+				String rc = "";
+				final BigInteger card = r.getBigDecimal( "CARD" ).toBigInteger();
+
+				if (card.intValue() != -1) {
+					final Timestamp stats_time = r.getTimestamp( "STATS_TIME" );
+
+					if ( stats_time != null ) {
+						DateFormat date = DateFormat.getDateInstance();
+						rc = date.format( stats_time ) + " " + card;
+					}
+				}
+
+//<bgp				if ( cache.isBatchLoading() ) {
+//					propkey = sname + "." + tname; //$NON-NLS-1$
+//					cache.cacheProperty( PROP_TABLE_ROWCOUNT, propkey, rc );
+//
+//					if ( sname.equals( schemaname ) && tname.equals( tablename ) ) {
+//						// We need the proper return value for the table argument
+//						rowCount = rc;
+//					}
+//				}
+//bgp>				else {
+					rowCount = rc;
+//bgp				}
+			}
+
+			r.close();
+			s.close();
+		} catch(SQLException e) {
+		}
+
+		return rowCount;
+	}
+
+
+	public static final String PROP_TABLE_PROPERTIES = "PROP_TABLE_PROPERTIES"; //$NON-NLS-1$
+	public static final String PROP_TABLE_ROWCOUNT = "PROP_TABLE_ROWCOUNT"; //$NON-NLS-1$
+	public static final String PROP_TABLE_TABLESPACE = "PROP_TABLE_TABLESPACE"; //$NON-NLS-1$
+	private static final String PROP_TABLE_COLUMNS = "PROP_TABLE_COLUMNS"; //$NON-NLS-1$
+		
+	
+//	private boolean propertiesLoaded = false;
+	private boolean columnsLoaded = false;
+	private boolean constraintLoaded = false;
+	private boolean indexLoaded = false;
+	private boolean triggerLoaded = false;
+	private boolean partitionKeyLoaded = false;
+	private boolean dataPartitionLoaded = false;
+	private boolean tablespaceLoaded = false;
+	private boolean privilegeLoaded = false;
+	private boolean statisticsLoaded = false;
+	private boolean impactsLoaded = false;
+	private boolean rowCountLoaded = false;
+	
+	private HashMap cachedColumn = new HashMap(); 
+	private String partitionMode ="";
+	private String tbspaceName=null;
+	private String indexTbspaceName	=null;
+	private String longTbspaceName=null;
+	private Collection impacts = new ArrayList();
+	private Collection statistics = new ArrayList();
+	private String rowCount = null;
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogTrigger.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogTrigger.java
new file mode 100644
index 0000000..97366a9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogTrigger.java
@@ -0,0 +1,330 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.enablement.ibm.catalog.IDatabaseObject;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWUtil;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Package;
+import org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2TriggerImpl;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Dependency;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWCatalogTrigger extends DB2TriggerImpl implements ICatalogObject,IDatabaseObject {
+
+	public void refresh() {
+		
+		
+		if (this.dependencyLoaded){
+			this.dependencies.clear();
+			this.dependencyLoaded = false;
+		}
+		
+		super.actionStatement.clear();
+
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		return ((ICatalogObject) this.getCatalogDatabase()).getConnection();
+	}
+
+	public Database getCatalogDatabase() {
+		return this.getSubjectTable().getSchema().getDatabase();
+	}
+	
+	public void refresh(int refreshType){
+	}
+	
+	public EList getDependencies() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getDependencies();
+		} else {
+			if(!this.dependencyLoaded) this.loadDependencies();
+			return this.dependencies;
+		}
+	}
+	
+	public ICatalogObject[] getImpacted(){
+		Collection impacts = this.getImpactedObjects();
+		ICatalogObject[] objs = new ICatalogObject[impacts.size()];
+		impacts.toArray(objs);
+		return objs;
+	}
+	
+	public Collection getStatistics(){
+		return new ArrayList();
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+
+		if(id == DB2ModelPackage.DB2_TRIGGER__DEPENDENCIES) {
+			this.getDependencies();
+		}
+		
+		return super.eIsSet(eFeature);
+	}
+	
+	private synchronized void loadDependencies() {
+		if(this.dependencyLoaded) return;
+		this.dependencyLoaded = true;
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			LUWCatalogTrigger.loadDependencies(this.getConnection(), super.getDependencies(), this);
+		}
+		catch(Exception e) {
+			 e.printStackTrace();
+		}
+		
+		this.eSetDeliver(deliver);		
+	}
+
+	public static void loadDependencies(Connection connection, EList dependencyList, Trigger trigger) throws SQLException {
+		final Database database = trigger.getSchema().getDatabase();
+		final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+		final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+			
+		Statement s = connection.createStatement();
+		ResultSet r = s.executeQuery("SELECT BSCHEMA, BNAME, BTYPE FROM SYSCAT.TRIGDEP WHERE TRIGSCHEMA='" //$NON-NLS-1$
+					+ LUWUtil.getIdentifier(trigger.getSchema().getName()) + "' AND TRIGNAME='" + LUWUtil.getIdentifier(trigger.getName()) + "'"); //$NON-NLS-1$ //$NON-NLS-2$
+		try {
+			while(r.next()) {
+				final String bschema = r.getString(1).trim();
+				final String bname   = r.getString(2);
+				final String btype   = r.getString(3);
+				SQLObject obj = null;
+				if(btype.equals("A")) {	//alias //$NON-NLS-1$
+					obj = LUWCatalogTrigger.getTable(trigger, bschema, bname);
+				}
+				else if(btype.equals("B")) {	//trigger //$NON-NLS-1$
+					obj = LUWCatalogTrigger.getTrigger(trigger, bschema, bname);					
+				}
+				else if(btype.equals("F")) {	//function //$NON-NLS-1$
+					obj = LUWCatalogTrigger.getRountine(trigger, bschema, bname);					
+				}
+				else if(btype.equals("N")) {	//nickname //$NON-NLS-1$
+					obj = LUWCatalogTrigger.getTable(trigger, bschema, bname);					
+				}
+				else if(btype.equals("O")) {	//privilege //$NON-NLS-1$
+					continue;
+				}
+				else if(btype.equals("R")) {	//structure type //$NON-NLS-1$
+					obj = LUWCatalogTrigger.getUserDefinedType(trigger, bschema, bname);										
+				}
+				else if(btype.equals("S")) {	//MQT //$NON-NLS-1$
+					obj = LUWCatalogTrigger.getTable(trigger, bschema, bname);					
+				}
+				else if(btype.equals("T")) {	//table //$NON-NLS-1$
+					obj = LUWCatalogTrigger.getTable(trigger, bschema, bname);					
+				}
+				else if(btype.equals("U")) {	//typed table //$NON-NLS-1$
+					obj = LUWCatalogTrigger.getTable(trigger, bschema, bname);
+				}
+				else if(btype.equals("V")) {	//view //$NON-NLS-1$
+					obj = LUWCatalogTrigger.getTable(trigger, bschema, bname);					
+				}
+				else if(btype.equals("W")) {	//typed view //$NON-NLS-1$
+					obj = LUWCatalogTrigger.getTable(trigger, bschema, bname);					
+				}
+				else if(btype.equals("X")) {	//index extension //$NON-NLS-1$
+					continue;
+				}
+				else {
+					continue;
+				}
+				
+				if(obj == null) continue;
+				Dependency dep = (Dependency) factory.create(SQLSchemaPackage.eINSTANCE.getDependency());
+				dep.setTargetEnd(obj);
+				dependencyList.add(dep);
+			}
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+			
+		r.close();
+		s.close();
+	}
+	
+	public static Schema getSchema(Trigger trigger, String schemaName) {
+		Schema s = trigger.getSchema();
+		if(s.getName().equals(schemaName)) return s;
+
+		Database d = s.getDatabase();
+		if (d instanceof LUWCatalogDatabase){
+			s = ((LUWCatalogDatabase)d).getSchema(schemaName);
+			if (s != null) return s;
+		} 
+		Iterator it = d.getSchemas().iterator();
+		while(it.hasNext()) {
+			s = (Schema) it.next();
+			if(s.getName().equals(schemaName)) return s;			
+		}
+		Schema schema = new LUWCatalogSchema();
+		schema.setName(schemaName);
+		schema.setDatabase(d);
+
+		if (d instanceof LUWCatalogDatabase){
+			((LUWCatalogDatabase)d).cacheSchema(schema);
+		}		
+		return schema;		
+	}
+	
+	public static Table getTable(Trigger trigger, String schemaName, String tableName) {
+		Schema schema = LUWCatalogTrigger.getSchema(trigger, schemaName);
+		if(schema instanceof LUWCatalogSchema){
+			Table t = ((LUWCatalogSchema)schema).getTable(schemaName,tableName);
+			if (t != null) return t;
+		} 
+		
+		Iterator it = schema.getTables().iterator();
+		while(it.hasNext()) {
+			Table table = (Table) it.next();
+			if(table.getName().equals(tableName)) return table;			
+		}
+
+		return null;
+	}
+		
+	public static Routine getRountine(Trigger trigger, String schemaName, String specificName) {
+		Schema schema = LUWCatalogTrigger.getSchema(trigger, schemaName);
+		Iterator it = schema.getRoutines().iterator();
+		while(it.hasNext()) {
+			Routine r = (Routine) it.next();
+			if(specificName.equals(r.getSpecificName())) return r;			
+		}
+
+		return null;
+	}
+
+	public static Trigger getTrigger(Trigger trigger, String schemaName, String triggerName) {
+		Schema schema = LUWCatalogTrigger.getSchema(trigger, schemaName);
+		Iterator it = schema.getTriggers().iterator();
+		while(it.hasNext()) {
+			Trigger r = (Trigger) it.next();
+			if(r.getName().equals(triggerName)) return r;			
+		}
+
+		return null;
+	}
+
+	public static UserDefinedType getUserDefinedType(Trigger trigger, String schemaName, String userDefinedTypeName) {
+		Schema schema = LUWCatalogTrigger.getSchema(trigger, schemaName);
+		Iterator it = schema.getUserDefinedTypes().iterator();
+		while(it.hasNext()) {
+			UserDefinedType userDefinedType = (UserDefinedType) it.next();
+			if(userDefinedType.getName().equals(userDefinedTypeName)) return userDefinedType;			
+		}
+		return null;		
+	}
+	
+	
+	private Collection getImpactedObjects(){
+		Collection impacts = new ArrayList();
+		Connection connection = this.getConnection();
+		impacts.addAll(LUWCatalogTrigger.getImpactedTriggers(connection, this));
+		impacts.addAll(LUWCatalogTrigger.getImpactedPackages(connection, this));
+
+		return impacts;
+	}
+
+	protected static Collection getImpactedTriggers(Connection connection, Trigger trigger) {
+		Collection impacts = new ArrayList();
+		try {
+			Statement s = connection.createStatement();
+			String query = "SELECT B.TRIGNAME,B.TABNAME,B.TABSCHEMA" +
+					" FROM SYSCAT.TRIGDEP A, SYSCAT.TRIGGERS B" +
+					" where BTYPE='B'" +
+					" AND A.TRIGSCHEMA = B.TRIGSCHEMA" +
+					" AND A.TRIGNAME = B.TRIGNAME" +
+					" AND A.BNAME='" + LUWUtil.getIdentifier(trigger.getName()) + "'" +
+					" AND A.BSCHEMA='" + LUWUtil.getIdentifier(trigger.getSchema().getName()) + "'" +
+					" FOR FETCH ONLY";
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String trigName = r.getString("TRIGNAME").trim();
+				final String tabName = r.getString("TABNAME").trim();
+				final String schemaName = r.getString("TABSCHEMA").trim();
+				
+				Trigger trig = LUWCatalogView.getTrigger(trigger.getSubjectTable(), schemaName,tabName, trigName);
+				if (trig !=  null) {
+					impacts.add(trig);
+				}
+				
+			}
+			r.close();
+			s.close();
+		}catch(SQLException e) {
+			// e.printStackTrace();
+		}
+		return impacts;
+	}
+
+	protected static Collection getImpactedPackages(Connection connection, Trigger trigger) {
+		Collection impacts = new ArrayList();
+		try {
+			Statement s = connection.createStatement();
+			String query = "SELECT PKGNAME, PKGSCHEMA, HEX(UNIQUE_ID) AS UID" +
+					" FROM SYSCAT.PACKAGEDEP" +
+					" WHERE BTYPE = 'B'" +
+					" AND BNAME='" + LUWUtil.getIdentifier(trigger.getName()) + "'" +
+					" AND BSCHEMA='" + LUWUtil.getIdentifier(trigger.getSchema().getName()) + "'" +
+					" FOR FETCH ONLY";
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String pkgName = r.getString("PKGNAME").trim();
+				final String schemaName = r.getString("PKGSCHEMA").trim();
+				final String pkgUniqueID = r.getString("UID").trim();
+				DB2Package pkg = LUWCatalogView.getDb2Package(trigger.getSubjectTable(), schemaName,pkgName, pkgUniqueID);
+				if (pkg !=  null) {
+					impacts.add(pkg);
+				}
+			}
+			r.close();
+			s.close();
+		}catch(SQLException e) {
+			// e.printStackTrace();
+		}
+		return impacts;
+	}
+
+	private boolean dependencyLoaded = false;}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogUniqueConstraint.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogUniqueConstraint.java
new file mode 100644
index 0000000..4cc66b9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogUniqueConstraint.java
@@ -0,0 +1,169 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.Statement;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.sql.constraints.SQLConstraintsPackage;
+import org.eclipse.datatools.modelbase.sql.constraints.impl.UniqueConstraintImpl;
+import org.eclipse.datatools.modelbase.sql.datatypes.CharacterStringDataType;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWUtil;
+
+public class LUWCatalogUniqueConstraint extends UniqueConstraintImpl implements ICatalogObject {
+	public synchronized void refresh() {
+		if(this.memberLoaded) {
+			this.members.clear();
+			this.memberLoaded = false;
+		}
+		
+		if (this.dependencyLoaded){
+			this.dependencies.clear();
+			this.dependencyLoaded = false;
+		}
+		
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public EList getMembers() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getMembers();
+		} else {
+			if(!this.memberLoaded) this.loadMembers();
+			return this.members;
+		}
+	}
+
+	public EList getDependencies() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getDependencies();
+		} else {
+			if(!this.dependencyLoaded) this.loadDependencies();
+			return this.dependencies;
+		}
+	}
+	
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == SQLConstraintsPackage.UNIQUE_CONSTRAINT__MEMBERS) {
+			this.getMembers();
+		}
+		else if(id == SQLConstraintsPackage.UNIQUE_CONSTRAINT__DEPENDENCIES) {
+			this.getDependencies();
+		}
+		return super.eIsSet(eFeature);
+	}
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+	
+	public Database getCatalogDatabase() {
+		return this.getBaseTable().getSchema().getDatabase();		
+	}
+
+	private synchronized void loadMembers() {
+		if(this.memberLoaded) return;
+		this.memberLoaded = true;
+
+		EList memberList = super.getMembers();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			Connection connection = this.getConnection();
+			if(connection == null) return;
+
+			Statement s = connection.createStatement();
+			ResultSet r = s.executeQuery("SELECT COLNAME FROM SYSCAT.KEYCOLUSE" + this.getWhereClause()); //$NON-NLS-1$
+			while(r.next()) {
+				final String colName = r.getString(1);
+				memberList.add(this.getColumn(colName));
+			}
+			r.close();
+			s.close();
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		
+		this.eSetDeliver(deliver);		
+	}
+
+	private synchronized void loadDependencies() {
+		if(this.dependencyLoaded) return;
+		this.dependencyLoaded = true;
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			LUWCatalogPrimaryKey.loadDependencies(this.getConnection(), super.getDependencies(), this);
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);		
+	}
+	
+	private String getWhereClause() {
+		Table table = this.getBaseTable();
+		return " WHERE CONSTNAME='" + this.getName() + "' AND TABSCHEMA='" + LUWUtil.getIdentifier(this.getBaseTable().getSchema().getName())  //$NON-NLS-1$ //$NON-NLS-2$
+				+ "' AND TABNAME='" + LUWUtil.getIdentifier(this.getBaseTable().getName()) + "' ORDER BY COLSEQ"; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+	private Column getColumn(String columnName) {
+		BaseTable table = this.getBaseTable();
+		if (table instanceof LUWCatalogTable) {
+			Column c = ((LUWCatalogTable)table).getColumn(columnName);
+			if (c!= null) return c;
+		} 
+		
+		Iterator it = table.getColumns().iterator();
+		while(it.hasNext()) {
+			Column c = (Column) it.next();
+			if(c.getName().equals(columnName)) return c;
+		}
+
+		Column column = new LUWCatalogColumn();
+		column.setName(columnName);
+		column.setTable(table);
+		Database database = table.getSchema().getDatabase();
+		final DatabaseDefinition def = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+		CharacterStringDataType dataType = (CharacterStringDataType) def.getPredefinedDataType("Char"); //$NON-NLS-1$
+		dataType.setLength(5);
+		column.setContainedType(dataType);
+
+		return column;
+	}
+		
+	private boolean memberLoaded = false;
+	private boolean dependencyLoaded = false;
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogUser.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogUser.java
new file mode 100644
index 0000000..17cd506
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogUser.java
@@ -0,0 +1,318 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.Statement;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.AuthorizationIdentifier;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Role;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.SQLAccessControlPackage;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.impl.UserImpl;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.schema.Sequence;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.datatools.enablement.ibm.catalog.ICatalogAuthorizationIdentifier;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Package;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace;
+
+public class LUWCatalogUser extends UserImpl implements ICatalogObject,ICatalogAuthorizationIdentifier {
+
+	public void refresh() {
+		if (this.receivedPrivilegesLoaded) {
+			this.getReceivedPrivilege().clear();
+			this.receivedPrivilegesLoaded = false;
+		}
+		if (this.receivedRoleAuthorizationLoaded){
+			this.receivedRoleAuthorization.clear();
+			this.receivedRoleAuthorizationLoaded = false;		}
+		this.getGrantedPrivilege().clear();
+
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database database = this.getDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+	
+	public Database getCatalogDatabase() {
+		return this.getDatabase();
+	}
+
+/*
+	public EList getReceivedPrivilege(){
+		if (!this.receivedPrivilegesLoaded) this.loadReceivedPrivilege();
+		return this.receivedPrivilege;
+	}
+*/	
+	public EList getReceivedRoleAuthorization(){
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getReceivedRoleAuthorization();
+		} else {
+			if (!this.receivedRoleAuthorizationLoaded) this.loadReceivedRoleAuthorization();
+			return this.receivedRoleAuthorization;
+		}
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == SQLAccessControlPackage.USER__RECEIVED_PRIVILEGE) {
+			this.getReceivedPrivilege();
+		} else if (id== SQLAccessControlPackage.USER__RECEIVED_ROLE_AUTHORIZATION) {
+			this.getReceivedRoleAuthorization();
+		}
+		return super.eIsSet(eFeature);
+	}
+
+	private synchronized void loadReceivedPrivilege() {
+		if(this.receivedPrivilegesLoaded) return;
+		this.receivedPrivilegesLoaded = true;
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogUser.loadReceivedPrivilege(this.getConnection(),super.getReceivedPrivilege(), this,"U");
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	private synchronized void loadReceivedRoleAuthorization() {
+		if(this.receivedRoleAuthorizationLoaded) return;
+		this.receivedRoleAuthorizationLoaded = true;
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+
+		LUWCatalogUser.loadReceivedRoleAuthorization(this.getConnection(), super.getReceivedRoleAuthorization(),this);
+
+		this.eSetDeliver(deliver);
+		
+	}
+
+	protected static void loadReceivedPrivilege (Connection connection,EList privileges, AuthorizationIdentifier authId, String granteeType){
+    	String query = "SELECT 'D' AS OBJECT_TYPE, '' AS OBJECT_NAME,'' AS OBJECT_OWNER, '' AS OBJECT_UID FROM SYSCAT.DBAUTH WHERE GRANTEE = '" + authId.getName() + "' AND GRANTEETYPE = '" + granteeType + "'"
+   			+	" UNION SELECT 'S' AS OBJECT_TYPE, SCHEMANAME AS OBJECT_NAME,'' AS OBJECT_OWNER, '' AS OBJECT_UID FROM SYSCAT.SCHEMAAUTH WHERE GRANTEE = '" + authId.getName() + "' AND GRANTEETYPE = '" + granteeType + "'"
+    		+	" UNION SELECT 'T' AS OBJECT_TYPE, TABNAME AS OBJECT_NAME, TABSCHEMA AS OBJECT_OWNER, '' AS OBJECT_UID FROM SYSCAT.TABAUTH WHERE GRANTEE = '" + authId.getName() + "' AND GRANTEETYPE = '" + granteeType + "'"
+    		+	" UNION SELECT 'P' AS OBJECT_TYPE, TBSPACE AS OBJECT_NAME, '' AS OBJECT_OWNER, '' AS OBJECT_UID FROM SYSCAT.TBSPACEAUTH WHERE GRANTEE = '" + authId.getName() + "' AND GRANTEETYPE = '" + granteeType + "'"
+			+	" UNION SELECT 'R' AS OBJECT_TYPE, SPECIFICNAME AS OBJECT_NAME, SCHEMA AS OBJECT_OWNER, '' AS OBJECT_UID FROM SYSCAT.ROUTINEAUTH WHERE GRANTEE = '" + authId.getName() + "' AND GRANTEETYPE = '" + granteeType + "'"
+			+	" UNION SELECT 'Q' AS OBJECT_TYPE, SEQNAME AS OBJECT_NAME, SEQSCHEMA AS OBJECT_OWNER, '' AS OBJECT_UID FROM SYSCAT.SEQUENCEAUTH WHERE GRANTEE = '" + authId.getName() + "' AND GRANTEETYPE = '" + granteeType + "'"
+    		+	" UNION SELECT 'K' AS OBJECT_TYPE, A.PKGNAME AS OBJECT_NAME, A.PKGSCHEMA AS OBJECT_OWNER, HEX(P.UNIQUE_ID) AS OBJECT_UID FROM SYSCAT.PACKAGEAUTH A, SYSCAT.PACKAGES P WHERE A.PKGSCHEMA = P.PKGSCHEMA AND A.PKGNAME = P.PKGNAME AND A.GRANTEE = '" + authId.getName() + "' AND A.GRANTEETYPE = '" + granteeType + "'";
+    	String whereClause = " GRANTEE = '" + authId.getName() + "' AND GRANTEETYPE = '" + granteeType + "'";
+    	
+    	try {
+			Statement s = connection.createStatement();
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String obj_type = r.getString("OBJECT_TYPE");
+				final String obj_name = r.getString("OBJECT_NAME") == null? "": r.getString("OBJECT_NAME").trim();
+				final String obj_owner = r.getString("OBJECT_OWNER") == null? "": r.getString("OBJECT_OWNER").trim();
+				final String obj_uid = r.getString("OBJECT_UID") == null? "": r.getString("OBJECT_UID").trim();
+				if (obj_type.equals("D")) {
+					Database database= authId.getDatabase();
+					if (database instanceof LUWCatalogDatabase) {
+						((LUWCatalogDatabase)database).getPrivilegesWithFilter(whereClause);
+					}
+				} else if  (obj_type.equals("S")){
+					Schema schema  = LUWCatalogUser.getSchema(authId, obj_name);
+					if (schema instanceof LUWCatalogSchema ) ((LUWCatalogSchema)schema).getPrivilegesWithFilter(whereClause);
+				}  else if (obj_type.equals("T")) {
+					Table table = LUWCatalogUser.getTable(authId, obj_owner, obj_name);
+					if (table instanceof LUWCatalogTable ) ((LUWCatalogTable)table).getPrivilegesWithFilter(whereClause);
+					else if (table instanceof LUWCatalogView ) ((LUWCatalogView)table).getPrivilegesWithFilter(whereClause);
+					else if (table instanceof LUWCatalogMaterializedQueryTable ) ((LUWCatalogMaterializedQueryTable)table).getPrivilegesWithFilter(whereClause);
+					else if (table instanceof LUWCatalogNickname ) ((LUWCatalogNickname)table).getPrivilegesWithFilter(whereClause);
+				}  else if (obj_type.equals("P")) {
+					LUWTableSpace tablespace = LUWCatalogUser.getTableSpace(authId, obj_name);
+					if (tablespace != null) tablespace.getPrivileges();
+				}  else if (obj_type.equals("R")) {
+					Routine routine = LUWCatalogUser.getRountine(authId,obj_owner,obj_name);
+					if (routine instanceof LUWCatalogProcedure ) ((LUWCatalogProcedure)routine).getPrivilegesWithFilter(whereClause);
+					if (routine instanceof LUWCatalogUserDefinedFunction) ((LUWCatalogUserDefinedFunction)routine).getPrivilegesWithFilter(whereClause);
+				}  else if (obj_type.equals("Q")) {
+					Sequence sequence = LUWCatalogUser.getSequence(authId,obj_owner,obj_name);
+					if (sequence instanceof LUWCatalogSequence ) ((LUWCatalogSequence)sequence).getPrivilegesWithFilter(whereClause);
+				}  else if (obj_type.equals("K")) {
+					DB2Package pkg = LUWCatalogUser.getDB2Package(authId,obj_owner,obj_name, obj_uid);
+					if (pkg instanceof LUWCatalogDatabasePackage ) ((LUWCatalogDatabasePackage)pkg).getPrivilegesWithFilter(whereClause);
+				}
+				
+			}
+			r.close();
+			
+			//load index from table side
+			query =	"SELECT I.INDNAME, TABNAME, TABSCHEMA" +
+					" FROM SYSCAT.INDEXAUTH A, SYSCAT.INDEXES I" +
+					" WHERE A.INDNAME = I.INDNAME" +
+					" AND A.INDSCHEMA = I.INDSCHEMA" +
+					" AND GRANTEE = '" + authId.getName() + "' AND GRANTEETYPE = '" + granteeType + "'";
+			r = s.executeQuery(query);
+			while(r.next()) {
+				final String indexName = r.getString("INDNAME").trim();
+				final String tableName = r.getString("TABNAME").trim();
+				final String schemaName = r.getString("TABSCHEMA").trim();
+				Index index = LUWCatalogUser.getIndex(authId, schemaName, tableName, indexName);
+				if (index instanceof LUWCatalogIndex) ((LUWCatalogIndex)index).getPrivilegesWithFilter(whereClause);
+			}
+			
+			r.close();
+			s.close();
+			
+    	} catch (Exception e){
+    		 e.printStackTrace();
+    	}
+	}
+	
+	protected static void loadReceivedRoleAuthorization(Connection connection,EList receivedRoleAuth, AuthorizationIdentifier authid) {
+		try {
+	        final DatabaseDefinition definition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(authid.getDatabase());
+	        String version = definition.getVersion();
+	        float ver = 9.1f;
+	        try {
+	            ver = Float.parseFloat(version.substring(1));
+	        }
+	        catch (NumberFormatException e) {            
+	        }
+	        if (ver < 9.5) {
+	        	return;
+	        }
+			String query = "SELECT ROLENAME" +
+					" FROM SYSCAT.ROLEAUTH" +
+					" WHERE GRANTEE ='" + authid.getName() + "'";
+			
+			Statement s = connection.createStatement();
+			ResultSet r = s.executeQuery(query);
+			while(r.next()) {
+				final String roleName = r.getString("ROLENAME").trim();
+				AuthorizationIdentifier role = LUWCatalogDatabase.getAuthorizationId(authid.getDatabase(), roleName, "R");
+				if (role instanceof Role) ((Role)role).getRoleAuthorization();
+			}
+			r.close();
+			s.close();
+			
+		}catch(Exception e){
+			 e.printStackTrace();
+		}
+	}
+
+
+	private static Schema getSchema(AuthorizationIdentifier authId,String schemaName) {
+		Database d = authId.getDatabase();
+		if (d instanceof LUWCatalogDatabase){
+			Schema s = ((LUWCatalogDatabase)d).getSchema(schemaName);
+			if (s != null) return s; 
+		} else {
+			Iterator it = d.getSchemas().iterator();
+			while(it.hasNext()) {
+				Schema s = (Schema) it.next();
+				if(s.getName().equals(schemaName)) return s;
+			}
+		}
+
+		return null;
+	}
+
+	private static Table getTable(AuthorizationIdentifier authId,String schemaName, String tableName) {
+		Schema schema = LUWCatalogUser.getSchema(authId, schemaName);
+		if (schema == null) return null;
+		if (schema instanceof LUWCatalogSchema) {
+			return  ((LUWCatalogSchema)schema).getTable(schemaName,tableName);
+		} 
+		Iterator it = schema.getTables().iterator();
+		while(it.hasNext()) {
+			Table table = (Table) it.next();
+			if(table.getName().equals(tableName)) return table;			
+		}
+		return null;		
+	}
+
+	private static Index getIndex(AuthorizationIdentifier authId, String schemaName, String tableName,String indexName) {
+		Table table = LUWCatalogUser.getTable(authId, schemaName, tableName);
+		if (table == null) return null;
+		Iterator it = table.getIndex().iterator();
+		while(it.hasNext()) {
+			Index index = (Index) it.next();
+			if(index.getName().equals(indexName)) return index;			
+		}
+
+		return null;
+	}
+
+	private static Routine getRountine(AuthorizationIdentifier authId, String schemaName, String specificName) {
+		Schema schema = LUWCatalogUser.getSchema(authId, schemaName);
+		if (schema == null) return null;
+		Iterator it = schema.getRoutines().iterator();
+		while(it.hasNext()) {
+			Routine routine = (Routine) it.next();
+			if(specificName.equals(routine.getSpecificName())) return routine;			
+		}
+		return null;
+	}
+
+	private static Sequence getSequence(AuthorizationIdentifier authId, String schemaName, String sequenceName) {
+		Schema schema = LUWCatalogUser.getSchema(authId, schemaName);
+		if (schema == null) return null;
+		Iterator it = schema.getSequences().iterator();
+		while(it.hasNext()) {
+			Sequence sequence = (Sequence) it.next();
+			if(sequenceName.equals(sequence.getName())) return sequence;			
+		}
+		return null;
+	}
+	
+	private static LUWTableSpace getTableSpace(AuthorizationIdentifier authId, String spaceName) {
+		LUWDatabase d = (LUWDatabase) authId.getDatabase();
+		Iterator it = d.getTablespaces().iterator();
+		while(it.hasNext()) {
+			LUWTableSpace s = (LUWTableSpace) it.next();
+			if(s.getName().equals(spaceName)) return s;
+		}
+
+		return null;
+	}
+	
+	private static DB2Package getDB2Package(AuthorizationIdentifier authId, String schemaName, String pkgName, String pkgUniqueID) {
+		Schema schema = LUWCatalogUser.getSchema(authId, schemaName);
+		if (schema instanceof LUWCatalogSchema) {
+			return  ((LUWCatalogSchema)schema).getDB2Package(pkgName, pkgUniqueID);
+		} 
+		return null;		
+	}
+
+	//API for PB
+	public EList getCatalogReceivedPrivileges(){
+		this.loadReceivedPrivilege();
+		return this.receivedPrivilege;
+	}
+
+	private boolean receivedPrivilegesLoaded = false;
+	private boolean receivedRoleAuthorizationLoaded = false;
+}
+
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogUserDefinedFunction.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogUserDefinedFunction.java
new file mode 100644
index 0000000..ab43488
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogUserDefinedFunction.java
@@ -0,0 +1,807 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.enablement.ibm.catalog.IDatabaseObject;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWUtil;
+//bgp import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.CatalogCache;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelFactory;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Source;
+import org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Privilege;
+import org.eclipse.datatools.modelbase.sql.datatypes.DataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.PrimitiveType;
+import org.eclipse.datatools.modelbase.sql.routines.DataAccess;
+import org.eclipse.datatools.modelbase.sql.routines.Parameter;
+import org.eclipse.datatools.modelbase.sql.routines.ParameterMode;
+import org.eclipse.datatools.modelbase.sql.routines.RoutineResultTable;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesPackage;
+import org.eclipse.datatools.modelbase.sql.routines.Source;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesFactory;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWCatalogUserDefinedFunction extends DB2UserDefinedFunctionImpl implements ICatalogObject ,IDatabaseObject{
+
+   private static final long serialVersionUID = -9150711511025438670L;
+
+   public void refresh() {
+		if (this.dependencyLoaded){
+			this.dependencies.clear();
+			this.dependencyLoaded = false;
+		}
+		if (this.parameterLoaded) {
+			this.parameters.clear();
+			this.parameterLoaded = false;
+		}
+		this.privilegeLoaded = false;
+		
+		if (loaded) {
+			this.extendedOptions.clear();
+			this.loaded = false;
+		}
+		
+		RefreshManager.getInstance().referesh(this);
+	}	
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+	
+	public Database getCatalogDatabase() {
+		return this.getSchema().getDatabase();		
+	}
+
+	public void refresh(int refreshType){
+		if ((IDatabaseObject.IMPACTS & refreshType)  == IDatabaseObject.IMPACTS) {
+			this.impacts.clear();
+			this.impactsLoaded = false;
+		}
+		if ((IDatabaseObject.STATISTICS & refreshType)  == IDatabaseObject.STATISTICS) {
+			this.statistics.clear();
+			this.statisticsLoaded = false;
+		}
+	}
+
+	public EList getDependencies() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getDependencies();
+		} else {
+			if(!this.dependencyLoaded) this.loadDependencies();
+			return this.dependencies;
+		}
+	}
+
+	public EList getParameters() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getParameters();
+		} else {
+			if(!this.parameterLoaded) this.loadParameters();
+			return this.parameters;
+		}
+	}
+	
+	public RoutineResultTable getReturnTable(){
+		if(!this.parameterLoaded) this.loadParameters();
+		return this.returnTable;
+	}
+	
+	public Parameter getReturnScalar(){
+		if(!this.parameterLoaded) this.loadParameters();
+		return this.returnScalar;
+	}
+	
+	public Parameter getReturnCast(){
+		if(!this.parameterLoaded) this.loadParameters();
+		return this.returnCast;
+	}
+	
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#isExternalAction()
+     */
+    public boolean isExternalAction() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+	        return super.isExternalAction();
+		} else {
+	        if(!this.loaded) this.load();
+	        return super.isExternalAction();
+		}
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.wst.rdb.internal.models.sql.routines.Routine#getSource()
+     */
+    public Source getSource() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+	        return super.getSource();
+		} else {
+	        if(!this.loaded) this.load();
+	        return super.getSource();
+		}
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.wst.rdb.internal.models.sql.routines.Routine#getSqlDataAccess()
+     */
+    public DataAccess getSqlDataAccess() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+	        return super.getSqlDataAccess();
+		} else {
+	        if(!this.loaded) this.load();
+	        return super.getSqlDataAccess();
+		}
+    }
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.rdb.internal.models.sql.routines.Routine#getLanguage()
+	 */
+	public String getLanguage() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getLanguage();
+		} else {
+			if(!this.loaded) this.load();
+			return super.getLanguage();
+		}
+	}
+
+	public EList getPrivileges() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getPrivileges();
+		} else {
+			if (!this.privilegeLoaded) this.loadPrivileges();
+			return this.privileges;
+		}
+	}
+	
+	public EList getExtendedOptions() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getExtendedOptions();
+		} else {
+		   if(!this.loaded) this.load();
+			return super.extendedOptions;
+		}
+	}
+
+	public String getExternalName() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getExternalName();
+		} else {
+			   if(!this.loaded) this.load();
+			return super.externalName;
+		}
+	}
+
+	public boolean isImplicitSchema() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.isImplicitSchema();
+		} else {
+			if ( !this.loaded )  this.load();
+			return super.implicitSchema;
+		}
+	}
+	
+	
+	public ICatalogObject[] getImpacted(){
+		if (!this.impactsLoaded) {
+			this.impacts = this.getImpactedObjects();
+			this.impactsLoaded = true;
+		}
+		ICatalogObject[] objs = new ICatalogObject[impacts.size()];
+		impacts.toArray(objs);
+		return objs;
+	}
+	
+	public Collection getStatistics(){
+		if (!this.statisticsLoaded) {
+			this.statistics = LUWCatalogProcedure.getStatistics(this.getConnection(), this);
+			this.statisticsLoaded = true;
+		}
+		return this.statistics;
+	}
+	
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__DEPENDENCIES) {
+			this.getDependencies();
+		}
+		else if(id == DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__PARAMETERS) {
+			this.getParameters();
+		}
+		else if(id == DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__RETURN_TABLE) {
+			this.getReturnTable();
+		}
+		else if(id == DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__RETURN_SCALAR) {
+			this.getReturnScalar();
+		}
+		else if(id == DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__RETURN_CAST) {
+			this.getReturnCast();
+		}
+		else if(id == DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__PRIVILEGES) {
+			this.getPrivileges();
+		}
+		else if(id == DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__EXTENDED_OPTIONS) {
+			this.getExtendedOptions();
+		}
+		else if(id == DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__EXTERNAL_NAME) {
+			this.getExternalName();
+		}
+
+		
+		return super.eIsSet(eFeature);
+	}
+
+	public byte getLUWFunctionType() {
+		return this.luwFunctionType;
+	}
+	
+	public void setLUWFunctionType(byte type) {
+		this.luwFunctionType = type;
+	}
+
+	/**
+	 * Load miscellaneous information about the UDF
+	 */
+	private synchronized void load() {
+        if(this.loaded) return;
+        this.loaded = true;
+
+        Database database = getCatalogDatabase();
+//bgp		CatalogCache cache = CatalogCache.getCache( database );
+
+		String propkey = getSchema().getName() + "." + getName(); //$NON-NLS-1$
+
+        boolean deliver = this.eDeliver();
+        this.eSetDeliver(false);
+
+        // Make sure this collection is initialized so we can add to it later
+		super.getExtendedOptions();
+
+//<bgp		if ( cache.isBatchLoading() ) {
+//			if ( cache.isPropertyCacheLoaded( PROP_UDF_VALUES ) ) {
+//				loadInfoFromCache( cache, propkey );
+//				this.eSetDeliver(deliver);        
+//	
+//				return;
+//			}
+//			
+//			cache.setPropertyCacheLoaded( PROP_UDF_VALUES );
+//bgp>		}
+
+        Connection connection = this.getConnection();
+
+        final DatabaseDefinition definition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(this.getCatalogDatabase());
+        String version = definition.getVersion();
+        float ver = 8.0f;
+        try {
+            ver = Float.parseFloat(version.substring(1));
+        }
+        catch (NumberFormatException e) {            
+        }
+        
+        String query = null;
+        if (ver < 8.0f) {
+            query = "SELECT LANGUAGE,"   //$NON-NLS-1$
+                    + " CASE VARIANT WHEN 'Y' THEN 'N' WHEN 'N' THEN 'Y' END AS DETERMINISTIC," //$NON-NLS-1$
+                    + " SIDE_EFFECTS AS EXTERNAL_ACTION, CONTAINS_SQL AS SQL_DATA_ACCESS, TYPE AS FUNCTIONTYPE," //$NON-NLS-1$
+                    + " BODY AS TEXT,PARALLELIZABLE AS PARALLEL, '' AS DEBUG_MODE,'' AS IMPLEMENTATION, '' AS CLASS," //$NON-NLS-1$
+                    + " FUNCSCHEMA, FUNCNAME, SPECIFICNAME" //$NON-NLS-1$
+                    + " FROM SYSCAT.FUNCTIONS"; //$NON-NLS-1$
+
+//<bgp            if ( !cache.isBatchLoading() ) {
+//	            query += " WHERE FUNCSCHEMA='" + this.getSchema().getName() + "'" //$NON-NLS-1$ //$NON-NLS-2$
+//	            		+ " AND FUNCNAME='" + LUWUtil.getIdentifier(this.getName()) + "'" //$NON-NLS-1$ //$NON-NLS-2$
+//	                    + " AND SPECIFICNAME='" + this.getSpecificName() + "'"; //$NON-NLS-1$ //$NON-NLS-2$
+//bgp>            }
+        }
+        else {    
+            query = "SELECT LANGUAGE, DETERMINISTIC, SQL_DATA_ACCESS, EXTERNAL_ACTION, FUNCTIONTYPE," //$NON-NLS-1$
+            		+ " TEXT, PARALLEL, DEBUG_MODE,IMPLEMENTATION, CLASS," //$NON-NLS-1$
+                    + " ROUTINESCHEMA AS FUNCSCHEMA, ROUTINENAME AS FUNCNAME, SPECIFICNAME" //$NON-NLS-1$
+                    + " FROM SYSCAT.ROUTINES";  //$NON-NLS-1$
+
+//<bgp            if ( !cache.isBatchLoading() ) {
+//	            query += " WHERE ROUTINESCHEMA='" + LUWUtil.getIdentifier(this.getSchema().getName()) + "' AND ROUTINENAME='" + LUWUtil.getIdentifier(this.getName()) + "'" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+//	                    + " AND SPECIFICNAME='" + LUWUtil.getIdentifier(this.getSpecificName()) + "'"; //$NON-NLS-1$ //$NON-NLS-2$
+//bgp>            }
+        }
+
+        Statement s = null;
+        ResultSet r = null;
+
+        try {
+           s = connection.createStatement();
+           r = s.executeQuery(query);
+
+           while(r.next()) {
+        	   LoadInfo info = new LoadInfo();
+        	   
+   				info.schemaname = r.getString( "FUNCSCHEMA" ).trim(); //$NON-NLS-1$
+   				info.funcname = r.getString( "FUNCNAME" ).trim(); //$NON-NLS-1$
+                info.DETERMINISTIC = r.getString("DETERMINISTIC"); //$NON-NLS-1$
+                info.SQL_DATA_ACCESS = r.getString("SQL_DATA_ACCESS"); //$NON-NLS-1$
+                info.EXTERNAL_ACTION = r.getString("EXTERNAL_ACTION"); //$NON-NLS-1$
+                info.FUNCTIONTYPE = r.getString("FUNCTIONTYPE"); //$NON-NLS-1$
+                info.TEXT = r.getString("TEXT"); //$NON-NLS-1$
+                info.PARALLEL = r.getString("PARALLEL"); //$NON-NLS-1$
+                info.DEBUG_MODE = r.getString("DEBUG_MODE"); //$NON-NLS-1$
+                info.IMPLEMENTATION = r.getString("IMPLEMENTATION"); //$NON-NLS-1$
+       			info.CLASS = r.getString( "CLASS" ); //$NON-NLS-1$
+       			
+//<bgp       			if ( cache.isBatchLoading() ) {
+//       				cache.cacheProperty( PROP_UDF_VALUES, info.getKey(), info );
+//       			}
+//bgp>       			else {
+					info.setValues( this );
+//bgp       			}
+            }
+        }
+        catch (Exception e) {
+			e.printStackTrace();
+        }
+        finally {
+           if (r != null) {
+              try { r.close(); }
+              catch (SQLException e) { }
+              r = null;
+           }
+           if (s != null) {
+              try { s.close(); }
+              catch (SQLException e) { }
+              s = null;
+           }
+        }
+
+//<bgp        if ( cache.isBatchLoading() ) {
+//        	loadInfoFromCache( cache, propkey );
+//bgp>        }
+
+        this.eSetDeliver(deliver);        
+    }
+
+	/** Object containing UDF information for the cache */
+	private static class LoadInfo {
+		String schemaname;
+		String funcname;
+        String DETERMINISTIC;
+        String SQL_DATA_ACCESS;
+        String EXTERNAL_ACTION;
+        String FUNCTIONTYPE;
+        String TEXT;
+        String PARALLEL;
+        String DEBUG_MODE;
+        String IMPLEMENTATION;
+        String CLASS;
+
+        /**
+         * Get the key for cache lookup
+         * 
+         * @return The key
+         */
+        public String getKey() {
+        	return this.schemaname + "." + this.funcname; //$NON-NLS-1$
+        }
+
+        /**
+         * Update a UDF with values from the cache
+         * 
+         * @param func
+         */
+        public void setValues( LUWCatalogUserDefinedFunction func ) {
+    		func.setDeterministic( this.DETERMINISTIC.equals("Y") ); //$NON-NLS-1$
+            func.setExternalAction( this.EXTERNAL_ACTION .equals("E")); //$NON-NLS-1$
+    		func.setFunctionType( this.FUNCTIONTYPE );
+    		func.setAllowParallel( "Y".equals( this.PARALLEL ) ); //$NON-NLS-1$
+
+    		DataAccess da;
+            // 'C' - CONTAINS SQL, 'M' - MODIFIES SQL DATA, 'N' - No SQL, 'R' - READS SQL DATA
+            if (this.SQL_DATA_ACCESS.equals("C")) da = DataAccess.CONTAINS_SQL_LITERAL; //$NON-NLS-1$
+            else if (this.SQL_DATA_ACCESS.equals("M")) da = DataAccess.MODIFIES_SQL_DATA_LITERAL; //$NON-NLS-1$
+            else if (this.SQL_DATA_ACCESS.equals("N")) da = DataAccess.NO_SQL_LITERAL; //$NON-NLS-1$
+            else da = DataAccess.READS_SQL_DATA_LITERAL;
+    		func.setSqlDataAccess( da );
+
+    		if ( this.TEXT != null )
+    		{
+    			// remove un-readable character
+    			this.TEXT = this.TEXT
+    					.replaceAll(
+    							"[\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u000b\u000c\u000e\u000f" //$NON-NLS-1$
+    									+ "\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f]", //$NON-NLS-1$
+    							" " ); //$NON-NLS-1$
+    			DB2Source source = DB2ModelFactory.eINSTANCE.createDB2Source();
+    			source.setBody( this.TEXT );
+    			func.setSource( source );
+    		}
+
+            DB2ExtendedOptions extOpts = DB2ModelFactory.eINSTANCE.createDB2ExtendedOptions(); 
+    		extOpts.setForDebug( "ALLOW".equalsIgnoreCase( this.DEBUG_MODE ) ); //$NON-NLS-1$
+    		EList extList = func.getExtendedOptions();
+    		extList.add( extOpts );
+
+    		if ( "JAVA".equals( func.getLanguage() ) ) //$NON-NLS-1$
+    		{
+    			func.setJavaExternalName( this.CLASS, this.IMPLEMENTATION );
+    		}
+    		else if ( !"SQL".equals( func.getLanguage() ) ) //$NON-NLS-1$
+    		{
+    			func.setExternalName( this.IMPLEMENTATION );
+    		}
+
+    		func.updateImplicitSchemaFlag();
+        }
+	}
+
+//<bgp	/**
+//	 * Update this UDF with values from the cache
+//	 * 
+//	 * @param cache
+//	 * @param propkey
+//	 */
+//	private void loadInfoFromCache( CatalogCache cache, String propkey )
+//	{
+//		LoadInfo info = (LoadInfo)cache.getCachedProperty( PROP_UDF_VALUES, propkey );
+//
+//		if ( info != null ) {
+//			info.setValues( this );
+//		}
+//bgp>	}
+
+	private synchronized void loadDependencies() {
+		if(this.dependencyLoaded) return;
+		this.dependencyLoaded = true;
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			LUWCatalogProcedure.loadDependencies(this.getConnection(), super.getDependencies(), this);
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+		
+		this.eSetDeliver(deliver);		
+	}
+
+	private synchronized void loadParameters() {
+		if(this.parameterLoaded) return;
+		this.parameterLoaded = true;
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			LUWCatalogUserDefinedFunction.loadParameters(this.getConnection(), super.getParameters(), this);
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+		
+		this.eSetDeliver(deliver);		
+	}
+	
+	private synchronized void loadPrivileges() {
+		if(this.privilegeLoaded) return;
+		this.privilegeLoaded = true;
+
+		EList privileges = super.getPrivileges();
+		for (Iterator iter= privileges.iterator(); iter.hasNext();){
+			Privilege privilege = (Privilege) iter.next();
+			privilege.setGrantor(null);
+			privilege.setGrantee(null);
+		}
+		
+		privileges.clear();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogProcedure.loadPrivileges(this.getConnection(),privileges, this,"");
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	public static void loadParameters(Connection connection, EList parameterList, LUWCatalogUserDefinedFunction function) throws SQLException {
+		final Database database = function.getSchema().getDatabase();
+		final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+		final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+
+        String version = databaseDefinition.getVersion();
+        float ver = 8.0f;
+        try {
+            ver = Float.parseFloat(version);
+        }
+        catch (NumberFormatException e) {            
+        }
+
+        String query = null;
+        if (ver < 8.0f) {
+            query="SELECT PARMNAME,ROWTYPE,AS_LOCATOR AS LOCATOR,TYPESCHEMA,TYPENAME,LENGTH,SCALE,CODEPAGE, ' ' AS REMARKS,TARGET_TYPESCHEMA,TARGET_TYPENAME" + //$NON-NLS-1$
+            " FROM SYSCAT.FUNCPARMS" + //$NON-NLS-1$
+            " WHERE FUNCSCHEMA='" + LUWUtil.getIdentifier(function.getSchema().getName()) + "'" +  //$NON-NLS-1$ //$NON-NLS-2$
+            " AND FUNCNAME='" + LUWUtil.getIdentifier(function.getName()) + "'" + //$NON-NLS-1$ //$NON-NLS-2$
+            " AND SPECIFICNAME='" + function.getSpecificName() + "'" + //$NON-NLS-1$ //$NON-NLS-2$
+            " ORDER BY ORDINAL"; //$NON-NLS-1$
+        }
+        else {
+		    query="SELECT PARMNAME,ROWTYPE,LOCATOR,TYPESCHEMA,TYPENAME,LENGTH,SCALE,CODEPAGE,REMARKS,TARGET_TYPESCHEMA,TARGET_TYPENAME" + //$NON-NLS-1$
+				" FROM SYSCAT.ROUTINEPARMS" + //$NON-NLS-1$
+				" WHERE ROUTINESCHEMA='" + LUWUtil.getIdentifier(function.getSchema().getName()) + "'" +  //$NON-NLS-1$ //$NON-NLS-2$
+				" AND ROUTINENAME='" + LUWUtil.getIdentifier(function.getName()) + "'" + //$NON-NLS-1$ //$NON-NLS-2$
+				" AND SPECIFICNAME='" + function.getSpecificName() + "'" + //$NON-NLS-1$ //$NON-NLS-2$
+				" ORDER BY ORDINAL"; //$NON-NLS-1$
+        }
+
+		Statement s = null;
+		ResultSet r = null;
+		try {
+            s = connection.createStatement();
+            r = s.executeQuery(query);
+			while(r.next()) {
+				boolean isTableFunction = false;
+
+				final String name = r.getString("PARMNAME"); //$NON-NLS-1$
+				
+				final String rowtype = r.getString("ROWTYPE").trim(); //$NON-NLS-1$
+				
+				if (rowtype.equals("R") && function.getLUWFunctionType() == LUWCatalogUserDefinedFunction.FunctionTypeEnumeration.TABLE_FUNCTION) //$NON-NLS-1$
+					isTableFunction = true;
+					
+				DataType type=null;
+				String typeName = r.getString("TYPENAME"); //$NON-NLS-1$
+				if (typeName.equalsIgnoreCase("FLOAT")){ //$NON-NLS-1$
+					int length = r.getInt("LENGTH"); //$NON-NLS-1$
+					if (length ==4) typeName="REAL"; //$NON-NLS-1$
+					else typeName="DOUBLE"; //$NON-NLS-1$
+				}
+
+				PredefinedDataTypeDefinition typeDefinition = databaseDefinition.getPredefinedDataTypeDefinition(typeName);
+				if(typeDefinition != null) {
+					
+					if (typeDefinition.getPrimitiveType().getValue() == PrimitiveType.CHARACTER) {
+						final int codePage = r.getInt("CODEPAGE"); //$NON-NLS-1$
+						if(codePage == 0) {
+							typeDefinition = databaseDefinition.getPredefinedDataTypeDefinition("CHAR () FOR BIT DATA"); //$NON-NLS-1$
+						}
+					}
+					else if (typeDefinition.getPrimitiveType().getValue() == PrimitiveType.CHARACTER_VARYING) {
+						final int codePage = r.getInt("CODEPAGE"); //$NON-NLS-1$
+						if(codePage == 0) {
+							typeDefinition = databaseDefinition.getPredefinedDataTypeDefinition("VARCHAR () FOR BIT DATA"); //$NON-NLS-1$
+						}
+					}
+
+					type = databaseDefinition.getPredefinedDataType(typeDefinition);
+					if(typeDefinition.isLengthSupported()) {
+						int length = r.getInt("LENGTH"); //$NON-NLS-1$
+						if (length == 0) length = 1;						EStructuralFeature feature = type.eClass().getEStructuralFeature("length");  //$NON-NLS-1$
+						type.eSet(feature, new Integer(length));
+					}
+					else if(typeDefinition.isPrecisionSupported()) {
+						if (typeName.equals("TIMESTAMP")) {
+							int length = r.getInt("SCALE");
+							EStructuralFeature feature = type.eClass().getEStructuralFeature("fractionalSecondsPrecision"); //$NON-NLS-1$
+							type.eSet(feature, new Integer(length));
+						}
+						else {
+							int length = r.getInt("LENGTH");
+							if (typeName.equals("DECFLOAT")) {
+								if (length == 8) length = 16;
+								else length = 34;
+							}
+							EStructuralFeature feature = type.eClass().getEStructuralFeature("precision"); //$NON-NLS-1$
+							type.eSet(feature, new Integer(length));
+						}
+					}
+					
+					if(typeDefinition.isScaleSupported()) {
+						final int length = r.getInt("SCALE"); //$NON-NLS-1$
+						EStructuralFeature feature = type.eClass().getEStructuralFeature("scale"); //$NON-NLS-1$
+						type.eSet(feature, new Integer(length));
+					}
+					
+				}
+				else {
+					if (typeName.equals("REFERENCE")){ //$NON-NLS-1$
+						final String typeSchemaName = r.getString("TARGET_TYPESCHEMA").trim(); //$NON-NLS-1$
+						final String udtName = r.getString("TARGET_TYPENAME"); //$NON-NLS-1$
+						type = LUWCatalogProcedure.getUserDefinedType(function,typeSchemaName,udtName);
+					} else {
+						final String typeSchemaName = r.getString("TYPESCHEMA").trim(); //$NON-NLS-1$
+						type = LUWCatalogProcedure.getUserDefinedType(function,typeSchemaName,typeName);
+					}
+				}
+				
+
+				if (isTableFunction) {
+					RoutineResultTable resultTable = function.getReturnTable();
+					if (resultTable == null) {
+						resultTable  = (RoutineResultTable)factory.create(SQLRoutinesPackage.eINSTANCE.getRoutineResultTable());
+						function.setReturnTable(resultTable);
+					}
+					Column column = SQLTablesFactory.eINSTANCE.createColumn();
+					column.setName(name);
+					column.setDescription(r.getString("REMARKS")); //$NON-NLS-1$
+					column.setDataType(type);
+					resultTable.getColumns().add(column);
+				}
+				else {
+					LUWCatalogParameter parameter = new LUWCatalogParameter();
+					parameter.setName(name);
+	
+					if (rowtype.equals("B")){ //$NON-NLS-1$
+						parameter.setMode(ParameterMode.INOUT_LITERAL);
+					} else if (rowtype.equals("O")) { //$NON-NLS-1$
+						parameter.setMode(ParameterMode.OUT_LITERAL);
+					} else if (rowtype.equals("P")) { //$NON-NLS-1$
+						parameter.setMode(ParameterMode.IN_LITERAL);
+					}
+	
+					final String locator = r.getString("LOCATOR"); //$NON-NLS-1$
+					if (locator.equals("Y")) //$NON-NLS-1$
+						parameter.setLocator(true);
+					else 
+						parameter.setLocator(false);
+
+					parameter.setDescription(r.getString("REMARKS")); //$NON-NLS-1$
+					parameter.setDataType(type);
+					
+					if (rowtype.equals("C")) //$NON-NLS-1$
+						function.setReturnScalar(parameter);
+					else if (rowtype.equals("R")) //$NON-NLS-1$
+						function.setReturnCast(parameter);
+					else
+						parameterList.add(parameter);
+
+				}
+				
+				
+			}
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+        finally {
+           if (r != null) {
+              try { r.close(); }
+              catch (SQLException e) { }
+              r = null;
+           }
+           if (s != null) {
+              try { s.close(); }
+              catch (SQLException e) { }
+              s = null;
+           }
+        }
+	}
+	
+	public interface FunctionTypeEnumeration {
+		public final static byte SCALAR_FUNCTION= 0;
+		public final static byte TABLE_FUNCTION= 1;
+		public final static byte ROW_FUNCTION= 2;
+		public final static byte COLUMN_FUNCTION= 3;
+		public final static byte ENUMERATION_LENGTH = 4;
+	}		
+    
+    /**
+    * If the routine is SQL, discover if the routine has been created without
+    * a schema qualifier. 
+    * <p>
+    * @param aRoutine The routine to analyze
+    * @return <code>true</code> if the routine was created without a schema qualifier.
+    */
+   private void updateImplicitSchemaFlag() {
+      boolean b = false;
+      if (this != null) {
+         b = this.isImplicitSchema();
+         if (!b && this.getLanguage().equalsIgnoreCase("SQL")) { //$NON-NLS-1$
+            Source src = this.getSource();
+            if (src != null) {
+                String body = src.getBody();
+                if (body != null) {
+                    String[] tokens = body.split(" "); //$NON-NLS-1$
+                    for (int i = 0; i < tokens.length; i++) {
+                        if (tokens[i].indexOf('.') > -1) {
+                            break; // the implicit flag is false by default
+                        }
+                        else if (tokens[i].indexOf('(') > -1) {
+                            b = true;
+                            break;
+                        }
+                    }
+                }
+            }
+         }
+      }
+      setImplicitSchema(b);
+   }
+   
+   private void setJavaExternalName(String className, String imple){
+	   if (className == null || imple == null) return;
+	   String exteranlName = className +".";
+	   if (imple.indexOf("(") != -1) {
+		   exteranlName += imple.substring(0,imple.indexOf("("));
+	   } else {
+		   exteranlName += imple;
+	   }
+	   super.externalName = exteranlName;
+   }
+   
+	private Collection getImpactedObjects(){
+		Collection impacts = new ArrayList();
+		Connection connection = this.getConnection();
+
+		impacts.addAll(LUWCatalogProcedure.getImpactedTriggers(connection, this));
+		impacts.addAll(LUWCatalogProcedure.getImpactedTables(connection, this));
+		impacts.addAll(LUWCatalogProcedure.getImpactedConstraints(connection, this));
+		impacts.addAll(LUWCatalogProcedure.getImpactedRoutines(connection, this));
+		impacts.addAll(LUWCatalogProcedure.getImpactedPackages(connection, this));
+
+		return impacts;
+	}
+	
+	protected void getPrivilegesWithFilter(String granteeFilter) throws SQLException {
+		if (this.privilegeLoaded) return;
+		EList privileges = super.getPrivileges();
+		privileges.clear();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogProcedure.loadPrivileges(this.getConnection(), privileges, this,granteeFilter);
+		}catch( Exception e){
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	
+	private static final String PROP_UDF_VALUES = "PROP_UDF_VALUES"; //$NON-NLS-1$
+	
+	private boolean dependencyLoaded = false;	
+	private boolean parameterLoaded = false;
+	private byte luwFunctionType = FunctionTypeEnumeration.SCALAR_FUNCTION;
+    private boolean loaded = false;
+    private boolean privilegeLoaded = false;
+	private boolean statisticsLoaded = false;
+	private boolean impactsLoaded = false;
+    
+	private Collection impacts = new ArrayList();
+	private Collection statistics = new ArrayList();
+
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogUserMapping.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogUserMapping.java
new file mode 100644
index 0000000..ef95eb1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogUserMapping.java
@@ -0,0 +1,206 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFactory;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericUserMapping;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGenericUserMappingImpl;
+
+/**
+ * @author gsauere
+ */
+public class LUWCatalogUserMapping extends LUWGenericUserMappingImpl implements ICatalogObject {
+
+    protected final static String REMOTE_AUTHID		=	"REMOTE_AUTHID"; //$NON-NLS-1$
+    protected final static String REMOTE_PASSWORD	=	"REMOTE_PASSWORD"; //$NON-NLS-1$
+    protected final static String ASTERISKS 		= 	"******"; //$NON-NLS-1$
+
+	private boolean optionsLoaded = false;
+	private boolean remoteUserLoaded = false;
+	private boolean remotePasswordLoaded = false;
+    
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.rdb.internal.core.rte.ICatalogObject#refresh()
+	 */
+	public void refresh() {
+		remoteUserLoaded = false;
+		remotePasswordLoaded = false;
+		
+		if (this.optionsLoaded) {
+			this.optionsLoaded = false;
+			this.getOptions().clear();
+		}
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.rdb.internal.core.rte.ICatalogObject#getConnection()
+	 */
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.rdb.internal.core.rte.ICatalogObject#getCatalogDatabase()
+	 */
+	public Database getCatalogDatabase() {
+		return this.getServer().getWrapper().getLUWDatabase();
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == LUWPackage.LUW_GENERIC_USER_MAPPING__OPTIONS) {
+			this.getOptions();
+		} else if(id == LUWPackage.LUW_GENERIC_USER_MAPPING__REMOTE_USER) {
+				this.getRemoteUser();
+		} else if(id == LUWPackage.LUW_GENERIC_USER_MAPPING__REMOTE_PASSWORD) {
+			this.getRemotePassword();
+		}
+		
+		return super.eIsSet(eFeature);
+	}
+
+	public EList getOptions() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getOptions();
+		} else {
+			if(!this.optionsLoaded) this.loadOptions();
+			return super.getOptions();
+		}
+	}
+
+	public String getRemoteUser() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getRemoteUser();
+		} else {
+			if(!this.remoteUserLoaded) loadRemoteUser();
+			return super.getRemoteUser();
+		}
+	}
+
+	public String getRemotePassword() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getRemotePassword();
+		} else {
+			if(!this.remotePasswordLoaded) loadRemotePassword();
+			return super.getRemotePassword();
+		}
+	}
+
+	private synchronized void loadRemoteUser() {
+		if(this.remoteUserLoaded) return;
+		EList options = getOptions();
+		for (Iterator it = options.iterator(); it.hasNext(); ) {
+			LUWOption option = (LUWOption)it.next();
+			String name = option.getName();
+		
+			if (name.equals(REMOTE_AUTHID)) {
+				this.setRemoteUser(option.getValue());
+				break;
+			}  
+		}
+	}
+	
+	private synchronized void loadRemotePassword() {
+		if(this.remotePasswordLoaded) return;
+		EList options = getOptions();
+		for (Iterator it = options.iterator(); it.hasNext(); ) {
+			LUWOption option = (LUWOption)it.next();
+			String name = option.getName();
+			
+			if (name.equals(REMOTE_PASSWORD)) {
+				this.setRemotePassword(option.getValue());
+				break;
+			}  
+		}
+	}
+	
+	public void setRemoteUser(String value) {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			super.setRemoteUser(value);
+		} else {
+			super.setRemoteUser(value);
+			this.remoteUserLoaded = true;
+		}
+	}
+	
+	public void setRemotePassword(String value) {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			super.setRemotePassword(value);
+		} else {
+			super.setRemotePassword(value);
+			this.remotePasswordLoaded = true;
+		}
+	} 
+	
+	private synchronized void loadOptions() {
+		if(this.optionsLoaded) return;
+		this.optionsLoaded = true;
+
+		Connection connection = this.getConnection();
+		if(connection == null) return;
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			EList options = super.getOptions();
+			options.clear();
+			LUWCatalogUserMapping.loadOptions(this.getConnection(),this, options);
+		}
+		catch (Exception e) {
+		}
+
+		this.eSetDeliver(deliver);		
+	}
+
+	public static void loadOptions(Connection connection, LUWGenericUserMapping userMapping, EList options) throws SQLException {
+		String query = "SELECT OPTION, SETTING FROM SYSCAT.USEROPTIONS WHERE AUTHID='" //$NON-NLS-1$
+			+ userMapping.getLocalAuthId() + "' AND SERVERNAME='" + userMapping.getServer().getName() + "'"; //$NON-NLS-1$ //$NON-NLS-2$
+		Statement s = connection.createStatement();
+		ResultSet r = s.executeQuery(query);
+
+		try {
+			while(r.next()) {
+				final String name = r.getString("OPTION"); //$NON-NLS-1$
+				final String value = r.getString("SETTING"); //$NON-NLS-1$
+				LUWOption option = LUWFactory.eINSTANCE.createLUWOption();
+				option.setName(name);
+				
+				if (name.equals(REMOTE_PASSWORD)) //actual value when serialized might cause problems in the XML file
+					option.setValue(ASTERISKS);
+				else
+					option.setValue(value);
+				options.add(option);
+			}
+		}
+		catch(Exception e) {
+		}
+		r.close();
+		s.close();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogView.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogView.java
new file mode 100644
index 0000000..08b9b2d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogView.java
@@ -0,0 +1,630 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinitionRegistry;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.enablement.ibm.catalog.IDatabaseObject;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWDdlParser;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWUtil;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWViewImpl;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Package;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Privilege;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.TableConstraint;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.expressions.QueryExpression;
+import org.eclipse.datatools.modelbase.sql.expressions.SQLExpressionsPackage;
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Dependency;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.datatools.modelbase.sql.tables.CheckType;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWCatalogView extends LUWViewImpl implements ICatalogObject,IDatabaseObject {
+	public void refresh() {
+//		this.propertiesLoaded = false;
+		this.columnsLoaded = false;
+		this.triggerLoaded = false;
+		this.viewLoaded = false;
+		
+		if (this.dependencyLoaded){
+			this.dependencies.clear();
+			this.dependencyLoaded = false;
+		}
+		this.privilegeLoaded = false;
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+	
+	public Database getCatalogDatabase() {
+		return this.getSchema().getDatabase();		
+	}
+	
+	public void refresh(int refreshType){
+		if ((IDatabaseObject.IMPACTS & refreshType)  == IDatabaseObject.IMPACTS) {
+			this.impacts.clear();
+			this.impactsLoaded = false;
+		}
+	}
+
+	public EList getColumns() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getColumns();
+		} else {
+			if(!this.columnsLoaded) this.loadColumns();
+			return this.columns;
+		}
+	}
+	
+	public QueryExpression getQueryExpression() {
+		if(!this.viewLoaded) this.loadView();
+		return this.queryExpression;
+	}
+	
+	public CheckType getCheckType() {
+		if(!this.viewLoaded) this.loadView();
+		return this.checkType;
+	}
+	
+	public boolean isUpdatable() {
+		if(!this.viewLoaded) this.loadView();
+		return this.updatable;
+	}
+
+	public boolean isInsertable() {
+		if(!this.viewLoaded) this.loadView();
+		return this.updatable;
+	}
+	
+	public EList getTriggers() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getTriggers();
+		} else {
+			if(!this.triggerLoaded) this.loadTriggers();
+			return this.triggers;
+		}
+	}
+	
+	public EList getDependencies() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getDependencies();
+		} else {
+			if(!this.dependencyLoaded) this.loadDependencies();
+			return this.dependencies;
+		}
+	}
+	
+	public EList getPrivileges() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getPrivileges();
+		} else {
+			if (!this.privilegeLoaded) this.loadPrivileges();
+			return this.privileges;
+		}
+	}
+	
+	public ICatalogObject[] getImpacted(){
+		if (!this.impactsLoaded) {
+			this.impacts = this.getImpactedObjects();
+			this.impactsLoaded = true;
+		}
+		ICatalogObject[] objs = new ICatalogObject[impacts.size()];
+		impacts.toArray(objs);
+		return objs;
+	}
+
+	public Collection getStatistics(){
+		return new ArrayList();
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == LUWPackage.LUW_VIEW__COLUMNS) {
+			this.getColumns();
+		}
+		else if(id == LUWPackage.LUW_VIEW__CHECK_TYPE) {
+			this.getCheckType();
+		}
+		else if(id == LUWPackage.LUW_VIEW__QUERY_EXPRESSION) {
+			this.getQueryExpression();
+		}
+		else if(id == LUWPackage.LUW_VIEW__TRIGGERS) {
+			this.getTriggers();
+		}
+		else if(id == LUWPackage.LUW_VIEW__DEPENDENCIES) {
+			this.getDependencies();
+		}
+		else if(id == LUWPackage.LUW_VIEW__UPDATABLE) {
+			this.isUpdatable();
+		}
+		else if(id == LUWPackage.LUW_VIEW__PRIVILEGES) {
+			this.getPrivileges();
+		}
+		
+		return super.eIsSet(eFeature);
+	}
+
+	/*
+	
+	private synchronized void loadProperties() {
+		if(this.propertiesLoaded) return;
+		Connection connection = this.getConnection();
+		if(connection == null) return;
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			LUWCatalogTable.loadProperties(this.getConnection(),this);
+		}
+		catch (Exception e) {
+		}
+
+		this.propertiesLoaded = true;
+		this.eSetDeliver(deliver);		
+	}
+	*/
+	
+	private synchronized void loadColumns() {
+		if(this.columnsLoaded) return;
+		this.columnsLoaded = true;
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);
+		try {
+			LUWCatalogTable.loadColumns(this.getConnection(), super.getColumns(), this);
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	private synchronized void loadTriggers() {
+		if(this.triggerLoaded) return;
+		this.triggerLoaded = true;
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogTable.loadTriggers(this.getConnection(), super.getTriggers(), this,((LUWCatalogDatabase)this.getCatalogDatabase()).getLoadOptions());
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	/**
+	 * Load miscellaneous info for this view
+	 */
+	private synchronized void loadView() {
+		if(this.viewLoaded) return;
+		this.viewLoaded = true;
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);
+		
+		final Database database = getCatalogDatabase();
+//bgp		final CatalogCache cache = CatalogCache.getCache( database );
+		final String propkey = getSchema().getName() + "." + getName(); //$NON-NLS-1$
+
+//<bgp		if ( cache.isBatchLoading() ) {
+//			if ( cache.isPropertyCacheLoaded( PROP_VIEW_VIEWINFO ) ) {
+//				setViewInfoFromCache( cache, propkey );
+//
+//				this.eSetDeliver(deliver);
+//				return;
+//			}
+//			
+//			cache.setPropertyCacheLoaded( PROP_VIEW_VIEWINFO );
+//bgp>		}
+
+		try {
+			Connection connection = this.getConnection();
+			Statement s = connection.createStatement();
+
+			String query = "SELECT VIEWCHECK, READONLY,VALID, TEXT, VIEWSCHEMA, VIEWNAME" //$NON-NLS-1$
+				+ " FROM SYSCAT.VIEWS"; //$NON-NLS-1$
+			
+//bgp			if ( !cache.isBatchLoading() ) {
+				query += " WHERE VIEWSCHEMA='" //$NON-NLS-1$
+						+ LUWUtil.getIdentifier(this.getSchema().getName())
+						+ "' AND VIEWNAME='" //$NON-NLS-1$
+						+ LUWUtil.getIdentifier(this.getName()) + "'"; //$NON-NLS-1$
+//bgp			}
+
+			query += " ORDER BY"; //$NON-NLS-1$
+			
+//<bgp			if ( cache.isBatchLoading() ) {
+//				query += " VIEWSCHEMA, VIEWNAME,"; //$NON-NLS-1$
+//bgp>			}
+
+			query += " SEQNO"; //$NON-NLS-1$
+
+			ResultSet r = s.executeQuery(query);
+			ViewInfo info = null;
+
+			while (r.next()) {
+				final String sname = r.getString( "VIEWSCHEMA" ).trim(); //$NON-NLS-1$
+				final String vname = r.getString( "VIEWNAME" ).trim(); //$NON-NLS-1$
+
+				if ( info == null || sname != info.viewSchemaName || vname != info.viewSchemaName ) {
+					info = new ViewInfo();
+					
+					info.viewSchemaName = sname;
+					info.viewName = vname;
+					
+//<bgp					if ( cache.isBatchLoading() ) {
+//						cache.cacheProperty( PROP_VIEW_VIEWINFO, info.getKey(), info );
+//bgp>					}
+
+					info.VIEWCHECK = r.getString(1);
+					info.READONLY = r.getString(2);
+					info.VALID = r.getString("VALID"); //$NON-NLS-1$
+					
+					info.TEXT = new StringBuilder();
+				}
+
+				String text = r.getString("TEXT"); //$NON-NLS-1$
+				
+				if ( text != null ) {
+					info.TEXT.append( text.trim() );
+				}
+			}
+
+			r.close();
+			s.close();
+
+			if ( info != null ) {
+//<bpg				if ( cache.isBatchLoading() ) {
+//					cache.cacheProperty( PROP_VIEW_VIEWINFO, info.getKey(), info );
+//				}
+//bgp>				else {
+					info.setViewInfo( this );
+//bgp				}
+			}
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		
+//<bgp		if ( cache.isBatchLoading() ) {
+//			setViewInfoFromCache( cache, propkey );
+//bgp>		}
+
+		this.eSetDeliver(deliver);
+	}
+
+	/** Class for caching miscellaneous information about views */
+	private static class ViewInfo {
+		String viewSchemaName;
+		String viewName;
+		String VIEWCHECK;
+		String READONLY;
+		String VALID;
+		StringBuilder TEXT;
+
+		/**
+		 * Get the key for cache lookup
+		 * 
+		 * @return The key
+		 */
+		public String getKey() {
+			return this.viewSchemaName + "." + this.viewName; //$NON-NLS-1$
+		}
+
+		/**
+		 * Update a view with information contained here
+		 * 
+		 * @param view
+		 */
+		public void setViewInfo( LUWCatalogView view ) {
+			if ( "N".equals( this.VIEWCHECK) ) { //$NON-NLS-1$
+				view.setCheckType( CheckType.NONE_LITERAL );
+			}
+			else if ( "L".equals( this.VIEWCHECK) ) { //$NON-NLS-1$
+				view.setCheckType(CheckType.LOCAL_LITERAL);
+			}
+			else if ( "C".equals( this.VIEWCHECK) ) { //$NON-NLS-1$
+				view.setCheckType(CheckType.CASCADED_LITERAL);
+			}
+
+			view.updatable = "N".equals( this.READONLY ); //$NON-NLS-1$
+			view.operative = "X".equalsIgnoreCase( this.VALID ); //$NON-NLS-1$
+			
+			//remove un-readable character
+			String text = this.TEXT.toString().replaceAll(
+					"[\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u000b\u000c\u000e\u000f" + //$NON-NLS-1$
+               		"\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f]", //$NON-NLS-1$
+               		" "); //$NON-NLS-1$
+
+			DatabaseDefinitionRegistry dbregistry = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry();
+			DatabaseDefinition dbdef = dbregistry.getDefinition( view.getCatalogDatabase() );
+			
+			if ( view.queryExpression == null ) {
+				DataModelElementFactory factory = dbdef.getDataModelElementFactory();
+				view.setQueryExpression( (QueryExpression)factory.create(SQLExpressionsPackage.eINSTANCE.getQueryExpressionDefault()) );
+			}
+
+			LUWDdlParser ddlParser = new LUWDdlParser( dbdef );
+			ddlParser.parseView( view, text );
+		}
+	}
+
+//<bgp	/**
+//	 * Update this view with information contained in the cache
+//	 * 
+//	 * @param cache
+//	 * @param key
+//	 */
+//	private void setViewInfoFromCache( CatalogCache cache, String key ) {
+//		ViewInfo info = (ViewInfo)cache.getCachedProperty( PROP_VIEW_VIEWINFO, key );
+//
+//		if ( info != null ) {
+//			info.setViewInfo( this );
+//		}
+//bgp>	}
+	
+	private synchronized void loadDependencies() {
+		if(this.dependencyLoaded) return;
+		this.dependencyLoaded = true;
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			LUWCatalogView.loadDependencies(this.getConnection(), super.getDependencies(), this);
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+		
+		this.eSetDeliver(deliver);		
+	}
+
+	
+	private synchronized void loadPrivileges() {
+		if(this.privilegeLoaded) return;
+		this.privilegeLoaded = true;
+
+		EList privileges = super.getPrivileges();
+		for (Iterator iter= privileges.iterator(); iter.hasNext();){
+			Privilege privilege = (Privilege) iter.next();
+			privilege.setGrantor(null);
+			privilege.setGrantee(null);
+		}
+		
+		privileges.clear();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogTable.loadPrivileges(this.getConnection(),privileges, this,"");
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	public static Schema getSchema(Table table, String schemaName) {
+		return LUWCatalogTable.getSchema(table,schemaName);
+	}
+	
+	public static Table getTable(Table t, String schemaName, String tableName) {
+		Schema schema = LUWCatalogView.getSchema(t, schemaName);
+		
+		if (schema instanceof LUWCatalogSchema) {
+			return  ((LUWCatalogSchema)schema).getTable(schemaName,tableName);
+		} 
+		Iterator it = schema.getTables().iterator();
+		while(it.hasNext()) {
+			Table table = (Table) it.next();
+			if(table.getName().equals(tableName)) return table;			
+		}
+		return null;		
+	}
+		
+	public static Routine getRountine(Table table, String schemaName, String specificName) {
+		Schema schema = LUWCatalogView.getSchema(table, schemaName);
+		Iterator it = schema.getRoutines().iterator();
+		while(it.hasNext()) {
+			Routine routine = (Routine) it.next();
+			if(specificName.equals(routine.getSpecificName())) return routine;			
+		}
+		return null;
+	}
+
+	public static Index getIndex(Table table, String schemaName, String indexName) {
+		Schema schema = LUWCatalogView.getSchema(table, schemaName);
+		Iterator it = schema.getIndices().iterator();
+		while(it.hasNext()) {
+			Index index = (Index) it.next();
+			if(index.getName().equals(indexName)) return index;			
+		}
+
+		return null;
+	}
+
+	public static UserDefinedType getUserDefinedType(Table table, String schemaName, String userDefinedTypeName) {
+		Schema schema = LUWCatalogView.getSchema(table, schemaName);
+		Iterator it = schema.getUserDefinedTypes().iterator();
+		while(it.hasNext()) {
+			UserDefinedType userDefinedType = (UserDefinedType) it.next();
+			if(userDefinedType.getName().equals(userDefinedTypeName)) return userDefinedType;			
+		}
+		
+		return null;		
+	}
+
+	public static TableConstraint getTableConstraint(Table table, String schemaName,String  tableName, String constName) {
+		Table t = LUWCatalogView.getTable(table, schemaName,tableName);
+		if (!(t instanceof BaseTable)) return null;
+		Iterator it = ((BaseTable)t).getConstraints().iterator();
+		while(it.hasNext()) {
+			TableConstraint constraint = (TableConstraint) it.next();
+			if(constraint.getName().equals(constName)) return constraint;			
+		}
+
+		return null;
+	}
+	
+	public static Trigger getTrigger(Table table, String schemaName, String tableName,String triggerName) {
+		Table t = LUWCatalogView.getTable(table, schemaName, tableName);
+		Iterator it = t.getTriggers().iterator();
+		while(it.hasNext()) {
+			Trigger r = (Trigger) it.next();
+			if(r.getName().equals(triggerName)) return r;			
+		}
+
+		return null;
+	}
+
+	public static DB2Package getDb2Package(Table table, String schemaName, String pkgName, String pkgUniqueID) {
+		Schema schema = LUWCatalogView.getSchema(table, schemaName);
+		if (schema instanceof LUWCatalogSchema) {
+			return  ((LUWCatalogSchema)schema).getDB2Package(pkgName, pkgUniqueID);
+		} 
+		return null;		
+	}
+
+	
+	public static void loadDependencies(Connection connection, EList dependencyList, Table table) throws SQLException {
+		final Database database = table.getSchema().getDatabase();
+		final DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(database);
+		final DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+			
+		Statement s = connection.createStatement();
+		ResultSet r = s.executeQuery("SELECT BSCHEMA, BNAME, BTYPE FROM SYSCAT.TABDEP WHERE TABSCHEMA='" //$NON-NLS-1$
+					+ LUWUtil.getIdentifier(table.getSchema().getName()) + "' AND TABNAME='" + LUWUtil.getIdentifier(table.getName()) + "'"); //$NON-NLS-1$ //$NON-NLS-2$
+		try {
+			while(r.next()) {
+				final String bschema = r.getString(1).trim();
+				final String bname   = r.getString(2);
+				final String btype   = r.getString(3);
+				SQLObject obj = null;
+				if(btype.equals("A")) {	//alias //$NON-NLS-1$
+					obj = LUWCatalogView.getTable(table, bschema, bname);
+				}
+				else if(btype.equals("F")) {	//function //$NON-NLS-1$
+					obj = LUWCatalogView.getRountine(table, bschema, bname);					
+				}
+				else if(btype.equals("N")) {	//nickname //$NON-NLS-1$
+					obj = LUWCatalogView.getTable(table, bschema, bname);					
+				}
+				else if(btype.equals("O")) {	//privilege //$NON-NLS-1$
+					continue;
+				}
+				else if(btype.equals("I")) {	//index //$NON-NLS-1$
+					obj = LUWCatalogView.getIndex(table, bschema, bname);										
+				}
+				else if(btype.equals("R")) {	//structure type //$NON-NLS-1$
+					obj = LUWCatalogView.getUserDefinedType(table, bschema, bname);										
+				}
+				else if(btype.equals("S")) {	//MQT //$NON-NLS-1$
+					obj = LUWCatalogView.getTable(table, bschema, bname);					
+				}
+				else if(btype.equals("T")) {	//table //$NON-NLS-1$
+					obj = LUWCatalogView.getTable(table, bschema, bname);					
+				}
+				else if(btype.equals("U")) {	//typed table //$NON-NLS-1$
+					obj = LUWCatalogView.getTable(table, bschema, bname);
+				}
+				else if(btype.equals("V")) {	//view //$NON-NLS-1$
+					obj = LUWCatalogView.getTable(table, bschema, bname);					
+				}
+				else if(btype.equals("W")) {	//typed view //$NON-NLS-1$
+					obj = LUWCatalogView.getTable(table, bschema, bname);					
+				}
+				else {
+					continue;
+				}
+				
+				if(obj == null) continue;
+				Dependency dep = (Dependency) factory.create(SQLSchemaPackage.eINSTANCE.getDependency());
+				dep.setTargetEnd(obj);
+				dependencyList.add(dep);
+			}
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}
+			
+		r.close();
+		s.close();
+	}
+		
+	private Collection getImpactedObjects(){
+		Collection impacts = new ArrayList();
+		Connection connection = this.getConnection();
+		impacts.addAll(LUWCatalogTable.getImpactedAlias(connection, this));
+		impacts.addAll(LUWCatalogTable.getImpactedTables(connection, this));
+		impacts.addAll(LUWCatalogTable.getImpactedRoutines(connection, this));
+		impacts.addAll(LUWCatalogTable.getImpactedTriggers(connection, this));
+		impacts.addAll(LUWCatalogTable.getImpactedPackages(connection, this));
+		return impacts;
+	}
+
+	
+	protected void getPrivilegesWithFilter(String granteeFilter) throws SQLException {
+		if (this.privilegeLoaded) return;
+		EList privileges = super.getPrivileges();
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			LUWCatalogTable.loadPrivileges(this.getConnection(), privileges, this,granteeFilter);
+		}catch( Exception e){
+		}
+		this.eSetDeliver(deliver);
+	}
+
+	private static final String PROP_VIEW_VIEWINFO = "PROP_VIEW_VIEWINFO"; //$NON-NLS-1$
+
+	private boolean columnsLoaded = false;
+	private boolean viewLoaded = false;
+	private boolean triggerLoaded = false;
+	private boolean dependencyLoaded = false;
+	private boolean privilegeLoaded = false;
+	private boolean updatable;
+	private boolean impactsLoaded = false;
+	private Collection impacts = new ArrayList();
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogWrapper.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogWrapper.java
new file mode 100644
index 0000000..7dc2c7c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogWrapper.java
@@ -0,0 +1,214 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFactory;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericWrapper;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGenericWrapperImpl;
+
+/**
+ * @author gsauere
+ */
+public class LUWCatalogWrapper extends LUWGenericWrapperImpl implements ICatalogObject {
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.rdb.internal.core.rte.ICatalogObject#refresh()
+	 */
+	public void refresh() {
+		this.propertiesLoaded = false;
+		
+		if (this.serversLoaded) {
+			this.serversLoaded = false;
+			this.servers.clear();
+		}		
+		
+		if (this.optionsLoaded) {
+			this.optionsLoaded = false;
+			this.getOptions().clear();
+		}
+		
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.rdb.internal.core.rte.ICatalogObject#getConnection()
+	 */
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((LUWCatalogDatabase) database).getConnection();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.rdb.internal.core.rte.ICatalogObject#getCatalogDatabase()
+	 */
+	public Database getCatalogDatabase() {
+		return this.getLUWDatabase();
+	}
+
+	public String getDescription(){
+		if (!this.propertiesLoaded) this.loadProperties();
+		return this.description;
+	}
+
+	public EList getOptions() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getOptions();
+		} else {
+			if(!this.optionsLoaded) this.loadOptions();
+			return super.getOptions();
+		}
+	}
+	
+	public EList getServers(){ //@gsauere
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getServers();
+		} else {
+	        if(!this.serversLoaded) this.loadServers();
+	        return super.getServers();
+		}
+	}
+		
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if(id == LUWPackage.LUW_WRAPPER__DESCRIPTION) {
+			this.getDescription();
+		}
+		else if(id == LUWPackage.LUW_WRAPPER__OPTIONS) {
+			this.getOptions();
+		}
+		else if(id == LUWPackage.LUW_WRAPPER__SERVERS){ //@gsauere
+            this.getServers();
+        }
+		
+		return super.eIsSet(eFeature);
+	}
+	
+	private synchronized void loadOptions() {
+		if(this.optionsLoaded) return;
+		Connection connection = this.getConnection();
+		if(connection == null) return;
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			EList options = super.getOptions();
+			options.clear();
+			LUWCatalogWrapper.loadOptions(this.getConnection(),this,options);
+			this.optionsLoaded = true;
+		}
+		catch (Exception e) {
+		}
+
+		this.eSetDeliver(deliver);
+	}
+
+	public static void loadOptions(Connection connection, LUWGenericWrapper wrapper, EList options) throws SQLException {
+		String query = "SELECT OPTION, SETTING FROM SYSCAT.WRAPOPTIONS WHERE WRAPNAME ='"  //$NON-NLS-1$
+			+ wrapper.getName() + "'"; //$NON-NLS-1$
+		Statement s = connection.createStatement();
+		ResultSet r = s.executeQuery(query);
+
+		try {
+			while(r.next()) {
+				final String name = r.getString("OPTION"); //$NON-NLS-1$
+				final String value = r.getString("SETTING"); //$NON-NLS-1$
+				LUWOption option = LUWFactory.eINSTANCE.createLUWOption();
+				option.setName(name);
+				option.setValue(value);
+				options.add(option);
+				if (name != null && value != null && name.toUpperCase().equals( "DB2_FENCED" )) //$NON-NLS-1$
+				{
+					boolean bFenced = value.toUpperCase().equals( "Y" ) ? true : false; //$NON-NLS-1$
+					wrapper.setFenced( bFenced );
+				}
+			}
+		}
+		catch(Exception e) {
+		}
+		r.close();
+		s.close();
+	}
+
+	private synchronized void loadProperties() {
+		if(this.propertiesLoaded) return;
+		Connection connection = this.getConnection();
+		if(connection == null) return;
+		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		
+		try {
+			LUWCatalogWrapper.loadProperties(this.getConnection(),this);
+			this.propertiesLoaded = true;
+		}
+		catch (Exception e) {
+		}
+
+		this.eSetDeliver(deliver);		
+	}
+	
+	public static void loadProperties(Connection connection, LUWGenericWrapper wrapper) throws SQLException {
+		String query = "SELECT REMARKS FROM SYSCAT.WRAPPERS" + //$NON-NLS-1$
+		 " WHERE WRAPNAME='" + wrapper.getName() + "'"; //$NON-NLS-1$ //$NON-NLS-2$
+		Statement s = connection.createStatement();
+		ResultSet r = s.executeQuery(query);
+
+		try {
+			while(r.next()) {
+				final String description = r.getString("REMARKS"); //$NON-NLS-1$
+				wrapper.setDescription(description);
+			}
+		}
+		catch(Exception e) {
+		}
+		r.close();
+		s.close();
+	}
+
+	private synchronized void loadServers() { //@gsauere
+		if(this.serversLoaded) return ;
+		EList serversList = super.getServers();		
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);	
+		try {
+			for (Iterator it=this.getLUWDatabase().getServers().iterator(); it.hasNext(); )
+			{
+				LUWCatalogFederatedServer server = (LUWCatalogFederatedServer)it.next();
+				if (server.getWrapperName().equalsIgnoreCase(this.getName())) {
+					serversList.add(server);
+				}
+			}
+		}
+		catch(Exception e) {
+		}
+		this.serversLoaded = true;
+		this.eSetDeliver(deliver);		
+	}
+	
+	private boolean serversLoaded = false;
+	private boolean propertiesLoaded = false;	
+	private boolean optionsLoaded = false;	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogXmlSchema.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogXmlSchema.java
new file mode 100644
index 0000000..8a2b0a9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogXmlSchema.java
@@ -0,0 +1,238 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.sql.Blob;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.DatabaseConnectionRegistry;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchema;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument;
+import org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XMLSchemaImpl;
+
+/**
+ * @author debbani
+ */
+public class LUWCatalogXmlSchema extends DB2XMLSchemaImpl implements ICatalogObject {
+
+	private boolean dependencyLoaded = false;
+	private boolean xmlSchemaDocLoaded = false;
+	
+	public static final String XSD_EXTENSION = ".xsd"; //$NON-NLS-1$
+   /**
+    * @see org.eclipse.wst.rdb.internal.core.rte.ICatalogObject#refresh()
+    */
+   public void refresh() {
+   	
+   	  // set to unloaded status to force reload next time
+   	  if(this.xmlSchemaDocLoaded){
+   	  	 this.xmlSchemaDocs.clear();
+   	  	 this.xmlSchemaDocLoaded = false;
+   	  }
+      
+      if (this.dependencyLoaded){
+         this.dependencies.clear();
+         this.dependencyLoaded = false;
+      }
+      RefreshManager.getInstance().referesh(this);
+   }
+
+   /**
+    * @see org.eclipse.wst.rdb.internal.core.rte.ICatalogObject#getConnection()
+    */
+   public Connection getConnection() {
+      Database database = this.getCatalogDatabase();
+      return ((LUWCatalogDatabase) database).getConnection();
+   }
+
+   /**
+    * @see org.eclipse.wst.rdb.internal.core.rte.ICatalogObject#getCatalogDatabase()
+    */
+   public Database getCatalogDatabase() {
+      return this.getSchema().getDatabase();		
+   }
+
+	public EList getXmlSchemaDocs() {
+		if (LUWOverwriteStatus.IS_OVERWRITE) {
+			return super.getXmlSchemaDocs();
+		} else {
+			if(!this.xmlSchemaDocLoaded) this.loadXmlSchemaDocs();
+			return this.xmlSchemaDocs;
+		}
+	}	
+	
+	private synchronized void loadXmlSchemaDocs() 
+	{
+		   if(this.xmlSchemaDocLoaded) return;
+		   EList xmlSchemaDocList = super.getXmlSchemaDocs();
+		   
+		   boolean deliver = this.eDeliver();
+		   this.eSetDeliver(false);
+		   Connection connection = this.getConnection();
+		   try {
+		      
+		      LUWCatalogXmlSchema.loadXMLSchemaDocs(connection,xmlSchemaDocList, this);
+		   }
+		   catch (Exception e) {
+		   }
+		   this.xmlSchemaDocLoaded = true;
+		   this.eSetDeliver(deliver);
+	}		
+	
+	public static void loadXMLSchemaDocs(Connection connection, EList xmlSchemaDocList, DB2XMLSchema xmlSchema) throws SQLException {
+		Object[] oldList = xmlSchemaDocList.toArray();
+		xmlSchemaDocList.clear();
+
+		ConnectionInfo connectionInfo = DatabaseConnectionRegistry.getInstance().getConnectionForDatabase(xmlSchema.getSchema().getDatabase());
+		ConnectionFilter xmlSchemaDocFilter = connectionInfo.getFilter(xmlSchema.getName()+"::"+ConnectionFilter.XML_SCHEMA_DOC_FILTER); //$NON-NLS-1$
+		if (xmlSchemaDocFilter == null) {	//default jar filter
+			xmlSchemaDocFilter = connectionInfo.getFilter(ConnectionFilter.XML_SCHEMA_DOC_FILTER);
+		}
+		String filterStr = ""; //$NON-NLS-1$
+		if (xmlSchemaDocFilter != null) {
+		   filterStr += "SCHEMALOCATION " + xmlSchemaDocFilter.getPredicate();		    //$NON-NLS-1$
+		   filterStr =  " AND (" + filterStr; //$NON-NLS-1$
+		   filterStr += ") "; //$NON-NLS-1$
+		} 
+		
+		String query = "SELECT H.HTYPE, C.SCHEMALOCATION, C.TARGETNAMESPACE, C.COMPONENTID, C.STATUS, C.COMPONENT"  //$NON-NLS-1$
+					+ " FROM SYSCAT.XSROBJECTCOMPONENTS C, SYSCAT.XSROBJECTHIERARCHIES H" //$NON-NLS-1$
+					+ " WHERE C.OBJECTNAME='" + xmlSchema.getName() + "' AND "  //$NON-NLS-1$ //$NON-NLS-2$
+					+ " C.OBJECTSCHEMA= '" + xmlSchema.getSchema().getName() + "' AND " //$NON-NLS-1$ //$NON-NLS-2$
+					+ " C.COMPONENTID = H.COMPONENTID"; //$NON-NLS-1$
+		
+		if (xmlSchemaDocFilter != null) {
+			query += filterStr;
+		}
+		
+		Statement s = connection.createStatement();
+		ResultSet r = s.executeQuery(query);
+		
+		try {
+			while(r.next()) {
+				DB2XMLSchemaDocument xmlSchemaDoc = null;
+				
+				final String schemaLocation = r.getString("SCHEMALOCATION");				 //$NON-NLS-1$
+				
+				EClass metaclass = DB2ModelPackage.eINSTANCE.getDB2XMLSchemaDocument();
+				
+				if (metaclass != null)
+				{
+					String docName = null;
+					
+					if (schemaLocation != null && !schemaLocation.trim().equals(""))
+					{
+						if (schemaLocation.toLowerCase().endsWith(XSD_EXTENSION)) {
+							// if the schemaLocation ends in .xsd, throw the .xsd extension away from the display name
+							docName = schemaLocation.substring(schemaLocation.lastIndexOf("/") + 1, schemaLocation.lastIndexOf('.')); //$NON-NLS-1$
+						}
+						else {
+							// only take the last part of the name that doesn't contain slashes, retaining any other kind of extension
+							docName = schemaLocation.substring(schemaLocation.lastIndexOf("/") + 1); //$NON-NLS-1$;
+						}
+					}					
+					else
+					{
+						// since we don't have a non-blank schema location, just use the component ID for display						
+						final long componentId = r.getLong("COMPONENTID"); //$NON-NLS-1$
+						docName = String.valueOf(componentId); // doc name is without file extension  
+					}
+
+						
+					Object element = LUWCatalogXmlSchema.findElement(oldList,docName,metaclass);
+					if (element != null) {
+					    // we already have the model object in the schema
+						xmlSchemaDoc = (DB2XMLSchemaDocument) element;
+						((ICatalogObject)xmlSchema).refresh();
+					} else {
+					    // create the model object
+						xmlSchemaDoc = new LUWCatalogXmlSchemaDocument();
+						xmlSchemaDoc.setName(docName);
+						xmlSchemaDoc.setSchemaLocation(schemaLocation);
+					}
+					// populate the model object
+					final String targetNamespace = r.getString("TARGETNAMESPACE");				 //$NON-NLS-1$
+					xmlSchemaDoc.setTargetNamespace(targetNamespace);
+					
+					final String htype = r.getString("HTYPE"); //$NON-NLS-1$
+					if (htype.equals("P")) //$NON-NLS-1$
+						xmlSchemaDoc.setPrimary(true);
+					}
+					xmlSchemaDocList.add(xmlSchemaDoc);  
+					
+					// get the xsd blob
+					Blob xsd = r.getBlob("COMPONENT");  //$NON-NLS-1$
+					if (xsd != null){
+						
+						InputStream xsdStream = xsd.getBinaryStream();
+						
+                        // construct path and filename for cached file storage
+                        // the path is unique for connection,db,dbscheman and xmlschema
+                        String xmlschemaPath = xmlSchema.getName();
+                        String path = LUWCatalogSchema.getXSDSourceCacheRoot(connectionInfo, xmlSchema.getSchema()) + xmlschemaPath;
+						// create directories and file
+						File dir = new File(path);
+						dir.mkdirs();
+						File xsdFile = new File(dir,xmlSchemaDoc.getName() + XSD_EXTENSION);
+						
+					    // copy file to system path (buffered)
+						FileOutputStream fos = new FileOutputStream(xsdFile);
+						BufferedOutputStream bos = new BufferedOutputStream(fos);
+						BufferedInputStream bis = new BufferedInputStream(xsdStream);
+						byte b[];
+						b = new byte[bis.available()];
+						bis.read(b);
+						bos.write(b);
+						bis.close();
+						bos.close();
+						
+						// everything's fine, so set filename to xsd model object
+						xmlSchemaDoc.setFileName(path + File.separator + xmlSchemaDoc.getName() + XSD_EXTENSION);
+					}
+				}
+		}catch (Exception e) {
+			// nothing happening here
+		}finally{
+			r.close();
+			s.close();
+		}
+    }		
+
+	private static Object findElement(Object[] list, String name,EClass metaclass){
+		Object object = null;
+		for (int i = 0; i < list.length; i++){
+			SQLObject sqlObject = (SQLObject) list[i];
+			if (sqlObject.getName().equals(name) && sqlObject.eClass() == metaclass && sqlObject instanceof ICatalogObject){
+				object = list[i];
+				break;
+			}
+		}
+		return object;
+	}	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogXmlSchemaDocument.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogXmlSchemaDocument.java
new file mode 100644
index 0000000..3b3f4cd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogXmlSchemaDocument.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XMLSchemaDocumentImpl;
+
+/**
+ * @author debbani
+ */
+public class LUWCatalogXmlSchemaDocument extends DB2XMLSchemaDocumentImpl implements ICatalogObject {
+	private boolean loaded = false;
+	private boolean dependencyLoaded = false;
+	
+   /* (non-Javadoc)
+    * @see org.eclipse.wst.rdb.internal.core.rte.ICatalogObject#refresh()
+    */
+   public void refresh() {
+      this.loaded = false;
+      
+      if (this.dependencyLoaded){
+         this.dependencies.clear();
+         this.dependencyLoaded = false;
+      }
+      
+      RefreshManager.getInstance().referesh(this);
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.wst.rdb.internal.core.rte.ICatalogObject#getConnection()
+    */
+   public Connection getConnection() {
+      Database database = this.getCatalogDatabase();
+      return ((LUWCatalogDatabase) database).getConnection();
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.wst.rdb.internal.core.rte.ICatalogObject#getCatalogDatabase()
+    */
+   public Database getCatalogDatabase() {
+      return this.getXmlSchema().getSchema().getDatabase();		
+   }
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogXsrObject.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogXsrObject.java
new file mode 100644
index 0000000..3b7fe97
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWCatalogXsrObject.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XSRObjectImpl;
+
+/**
+ * @author debbani
+ */
+public class LUWCatalogXsrObject extends DB2XSRObjectImpl implements ICatalogObject {
+	private boolean loaded = false;
+	private boolean dependencyLoaded = false;
+
+   /* (non-Javadoc)
+    * @see org.eclipse.wst.rdb.internal.core.rte.ICatalogObject#refresh()
+    */
+   public void refresh() {
+      this.loaded = false;
+      
+      if (this.dependencyLoaded){
+         this.dependencies.clear();
+         this.dependencyLoaded = false;
+      }
+      
+      RefreshManager.getInstance().referesh(this);
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.wst.rdb.internal.core.rte.ICatalogObject#getConnection()
+    */
+   public Connection getConnection() {
+      Database database = this.getCatalogDatabase();
+      return ((LUWCatalogDatabase) database).getConnection();
+   }
+
+   /* (non-Javadoc)
+    * @see org.eclipse.wst.rdb.internal.core.rte.ICatalogObject#getCatalogDatabase()
+    */
+   public Database getCatalogDatabase() {
+      return this.getSchema().getDatabase();		
+   }
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWOverwriteStatus.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWOverwriteStatus.java
new file mode 100644
index 0000000..99a8ee2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWOverwriteStatus.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+public class LUWOverwriteStatus {
+	public static boolean IS_OVERWRITE = false;
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWServerCatalogProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWServerCatalogProvider.java
new file mode 100644
index 0000000..b910ddb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/LUWServerCatalogProvider.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.util.Collection;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase;
+
+public interface LUWServerCatalogProvider {
+	Collection getLUWServers(LUWDatabase db);
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/ModuleCatalogProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/ModuleCatalogProvider.java
new file mode 100644
index 0000000..bc04f35
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/ModuleCatalogProvider.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+import java.util.Collection;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.PLSQLPackage;
+
+public interface ModuleCatalogProvider {
+	public Collection<LUWModule> getModules(Connection connection, DB2Schema schema);
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/OlapCatalogProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/OlapCatalogProvider.java
new file mode 100644
index 0000000..9d9302d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/OlapCatalogProvider.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.sql.Connection;
+import java.util.Collection;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema;
+
+
+public interface OlapCatalogProvider {
+	Collection getOlapobjects(Connection connection,DB2Schema schema);
+}
+
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/RemoteCatalogProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/RemoteCatalogProvider.java
new file mode 100644
index 0000000..2c9c6e8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/RemoteCatalogProvider.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.RelationalRemoteServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.RemoteServer;
+
+public interface RemoteCatalogProvider {
+	RemoteServer getRemoteServer(LUWGenericServer federatedSever);	
+//TODO: added getDatabase
+	Database getDatabase(RelationalRemoteServer rrSever);	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/StorageProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/StorageProvider.java
new file mode 100644
index 0000000..8dcaf6c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/StorageProvider.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace;
+
+public interface StorageProvider {
+	Collection getPartitionGroups(LUWCatalogDatabase db);
+	LUWPartitionKey getPartitionKey(LUWStorageTable table);
+	Collection getBufferPools(LUWCatalogDatabase db);
+	LUWTableSpace getTablespace(LUWDatabase db, String tspName);
+	Collection getDataPartition(LUWStorageTable table);
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/DatabaseREProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/DatabaseREProvider.java
new file mode 100644
index 0000000..d23bf22
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/DatabaseREProvider.java
@@ -0,0 +1,490 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.enablement.ibm.catalog.util.CatalogLoadUtil;
+import org.eclipse.datatools.enablement.ibm.db2.DB2PluginActivator;
+import org.eclipse.datatools.enablement.ibm.util.CloneUtil;
+import org.eclipse.datatools.enablement.ibm.util.DBReverseProvider;
+//bgp import org.eclipse.datatools.enablement.ibm.db2.util.ImplicitRelationshipHandler;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.AuthorizationIdentifier;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcoreFactory;
+import org.eclipse.emf.ecore.util.FeatureMap;
+import org.eclipse.emf.ecore.util.FeatureMapUtil;
+
+public class DatabaseREProvider
+{
+	public static final int EXCLUDE_INDEXES = 1;
+	public static final int EXCLUDE_TRIGGERS = 2;
+	public static final int GENERATE_IMPLICIT_RELATIONSHIPS= 4;
+	public static final int EXCLUDE_TABLES = 8;
+	public static final int EXCLUDE_ROUTINES = 16;
+	public static final int EXCLUDE_USER_DEFINED_TYPE = 32;
+	public static final int EXCLUDE_SEQUENCE = 64;
+	public static final int EXCLUDE_TABLESPACE = 128;
+	public static final int EXCLUDE_VIEWS = 256;
+	public static final int EXCLUDE_SYNONYMS = 512;
+	public static final int GENERATE_IMPLICIT_PKS = 1024;
+	public static final int EXCLUDE_ACCESS_CONTROL = 2048;
+	public static final int EXCLUDE_FGAC = 4096;
+	
+	public static final String LOAD_PROPERTY = "LOAD_PROPERTY"; //$NON-NLS-1$
+	public static final String IS_BATCH_LOAD = "BATCH_LOAD"; //$NON-NLS-1$
+	public static final String LOAD_OPTIONS = "LOAD_OPTIONS"; //$NON-NLS-1$
+	public static final String OWNER_LOAD_OPTION ="OWNER_LOAD_OPTION"; //$NON-NLS-1$
+	public static final String OwnerFilterSelected ="isOwnerFilterSelected"; //$NON-NLS-1$
+	
+	private boolean isOwnerForRE;
+	
+//<bgp	public void reverseEngineer( //
+//			Database db, int opts, List<String> colNamesToIgnore, //
+//			EObject[] objsToRE, IProgressMonitor progMonitor)
+//	{ 
+//		this.database = db;
+//        this.options = opts;
+//        this.columnNamesToIgnore = colNamesToIgnore;
+//        this.objectsToRE = objsToRE;
+//        this.monitor = progMonitor;
+//
+//		this.loadAndBuild();
+//bgp>	}
+	
+//<bgp	public void loadAndBuild()
+//	{
+//        int len = objectsToRE.length;
+//        if (len ==0)
+//        	return;
+//
+//        ContainmentService service = RDBCorePlugin.getDefault().getContainmentService();
+//        EObject db = service.getRootElement(objectsToRE[0]);
+//
+//		this.setLoadProperties(db);
+//
+//		//owner EAnnoation check
+//		EAnnotation ownerEAnnoation=((SQLObject)objectsToRE[0]).getEAnnotation(OWNER_LOAD_OPTION);
+//		if (ownerEAnnoation != null) {
+//			EMap<String, String> ownerEmap = ownerEAnnoation.getDetails();
+//			String ownerValue = ownerEmap.get(OwnerFilterSelected);
+//			isOwnerForRE = Boolean.parseBoolean(ownerValue);
+//		}
+//		
+//        //DBReverseProvider provider = DatabaseREProvider.getDBReverseProvider(database);
+//		DBReverseProvider reProvider = getDBReverseProvider(database);
+//		if (reProvider != null) {
+//			reProvider.prepareLoader(database, options, objectsToRE);
+//		}
+//
+//		if(!isOwnerForRE) {
+//	        int count = 100 / len;
+//
+//	        for (int objCount = 0; objCount < objectsToRE.length; objCount++)
+//	        {
+//	            CatalogLoadUtil.load(objectsToRE[objCount], monitor, count >> 2);
+//
+//	            if (monitor.isCanceled())
+//	            {
+//	                return;
+//	            }
+//	        }
+//		}
+//
+//		this.handleDatabaseVendors();
+//        
+//        if ((this.options & GENERATE_IMPLICIT_PKS) == GENERATE_IMPLICIT_PKS && !monitor.isCanceled())
+//        {
+//            this.generateImplicitPK(this.database);
+//        }
+//
+//        if ((this.options & GENERATE_IMPLICIT_RELATIONSHIPS) == GENERATE_IMPLICIT_RELATIONSHIPS && !monitor.isCanceled())
+//        {
+//            this.generateExplicitRelationship(this.database);
+//        }
+//
+//        this.resetLoadProperties(db);
+//        
+//        this.resetOwnerProperties(objectsToRE[0]);
+//        
+//        copyAttribute(db,this.database);
+//bgp>    }
+
+	protected void handleDatabaseVendors()
+	{
+        if (database.getVendor().equals("Derby")) { //$NON-NLS-1$
+        	this.buildVertex(objectsToRE);        	
+        }
+        else {
+	   		this.cloneVertex(objectsToRE); 		
+        }
+
+        this.refresh(objectsToRE);     
+	}
+	
+	public void buildVertex(EObject[] objsToRE) {
+		EObject[] targets = new EObject[objsToRE.length];
+		for (int i = 0; i< objsToRE.length; i++){
+			targets[i] = this.database;
+		}
+		
+		EObject[] cloned = this.buildVertex(targets,objsToRE);
+
+		for (int i = 0; i < cloned.length; i++) {
+			if ((cloned[i] instanceof Database)) {
+				Database db = (Database)cloned[i];
+
+				if ((this.options & EXCLUDE_ACCESS_CONTROL)== EXCLUDE_ACCESS_CONTROL) {
+					Iterator it = db.getAuthorizationIds().iterator();
+					while(it.hasNext()) {
+						AuthorizationIdentifier aId = (AuthorizationIdentifier) it.next();
+
+						aId.getReceivedPrivilege().clear();
+						aId.getReceivedRoleAuthorization().clear();
+					}
+
+					db.getAuthorizationIds().clear();
+				}
+			}
+			else if ((cloned[i] instanceof Schema)) {
+				Schema schema = (Schema)cloned[i];
+
+				if ( (this.options & (EXCLUDE_TRIGGERS|EXCLUDE_INDEXES)) != 0 ) {
+					Iterator it = schema.getTables().iterator();
+					while(it.hasNext()) {
+						Table t = (Table) it.next();
+
+						if ((this.options & EXCLUDE_TRIGGERS)== EXCLUDE_TRIGGERS) {
+							t.getTriggers().clear();
+						}
+
+						if ((this.options & EXCLUDE_INDEXES)== EXCLUDE_INDEXES) {
+							t.getIndex().clear();
+						}
+					}
+				}
+			}
+		}
+	}
+	
+	protected EObject[] buildVertex(EObject[] parent, EObject[] object){
+        EObject[] newObjects = CloneUtil.clone(parent, object);
+        
+        return newObjects;
+	}
+
+//<bgp	protected void generateExplicitRelationship(Database db) {
+//		ImplicitRelationshipHandler handler = ImplicitRelationshipHandler.INSTANCE;
+//		handler.setColumnNamesToIgnore(columnNamesToIgnore);
+//
+//		Iterator it = db.getSchemas().iterator();
+//		while(it.hasNext()) {
+//			Schema s = (Schema) it.next();
+//
+//			handler.FindAndCreate(s);
+//		}
+//
+//		// Clear out columnNamesToIgnore just to be sure
+//		handler.setColumnNamesToIgnore(null);
+//bgp>	}
+
+	protected void generateImplicitPK(Database db) {
+		CatalogLoadUtil.generateImplicitPK(db);
+	}
+	
+	protected void cloneVertex(EObject[] objsToRE) {
+		EObject[] targets = new EObject[objsToRE.length];
+		EObject[] newObjects = new EObject[1];
+		
+		for (int i = 0; i< objsToRE.length; i++){
+			targets[i] = this.database;
+		}
+		
+		if(!isOwnerForRE){      
+			newObjects = CloneUtil.clone(targets, objsToRE);
+		}
+		
+		DBReverseProvider reProvider = getDBReverseProvider(database);
+
+		if (reProvider != null) {
+    		reProvider.reverseEngineer(database, options, objsToRE, monitor);
+
+    		//fix for wsdbu00679720, for some specific vendors eg. z/os,remove the needless object in the specific handler
+    		if(newObjects != null){
+    			reProvider.removeNeedlessObjects(newObjects,options);
+    		}
+    	}
+		else {
+    		//fix for wsdbu00641207, remove the needless object from the model
+    		if (newObjects != null) {
+    			removeNeedlessObjects(newObjects);	
+    		}
+    	}		
+	}	
+	
+	protected void removeNeedlessObjects(EObject[] clonedObjects)
+	{
+		for (int i = 0; i < clonedObjects.length; i++) {
+			if ((clonedObjects[i] instanceof Database)) {
+				Database db = (Database) clonedObjects[i];
+
+				if ((this.options & EXCLUDE_ACCESS_CONTROL) == EXCLUDE_ACCESS_CONTROL) {
+					Iterator it = db.getAuthorizationIds().iterator();
+					while (it.hasNext()) {
+						AuthorizationIdentifier aId = (AuthorizationIdentifier)it.next();
+
+						aId.getReceivedPrivilege().clear();
+						aId.getReceivedRoleAuthorization().clear();
+					}
+
+					db.getAuthorizationIds().clear();
+				}
+			}
+			else if ((clonedObjects[i] instanceof Schema)) {
+				Schema schema = (Schema) clonedObjects[i];
+
+				if ((this.options & EXCLUDE_ROUTINES) == EXCLUDE_ROUTINES) {
+					schema.getRoutines().clear();
+				}
+
+				if ((this.options & EXCLUDE_USER_DEFINED_TYPE) == EXCLUDE_USER_DEFINED_TYPE) {
+					schema.getUserDefinedTypes().clear();
+				}
+
+				if ((this.options & EXCLUDE_SEQUENCE) == EXCLUDE_SEQUENCE) {
+					schema.getSequences().clear();
+				}
+
+				if ( (this.options & EXCLUDE_TABLES) == EXCLUDE_TABLES
+						|| (this.options & EXCLUDE_VIEWS) == EXCLUDE_VIEWS
+						|| (this.options & EXCLUDE_SYNONYMS) == EXCLUDE_SYNONYMS)
+				{
+					List<Table> needRemovedTables = new ArrayList<Table>();
+
+					Iterator it = schema.getTables().iterator();
+					while (it.hasNext()) {
+						Table t = (Table) it.next();
+
+						// TODO GLD odd that we don't actually look for synonyms?
+						if ((this.options & EXCLUDE_TABLES) == EXCLUDE_TABLES) {
+							if (t instanceof BaseTable) {
+								needRemovedTables.add(t);
+							}
+						}
+						else if ((this.options & EXCLUDE_VIEWS) == EXCLUDE_VIEWS) {
+							if (t instanceof ViewTable) {
+								needRemovedTables.add(t);
+							}
+						}
+					}
+
+					schema.getTables().removeAll( needRemovedTables );
+				}
+
+				if ((this.options & EXCLUDE_TABLES) != EXCLUDE_TABLES
+						&& ((this.options & EXCLUDE_TRIGGERS) == EXCLUDE_TRIGGERS //
+							|| (this.options & EXCLUDE_INDEXES) == EXCLUDE_INDEXES))
+				{
+					Iterator it = schema.getTables().iterator();
+					while (it.hasNext()) {
+						Table t = (Table) it.next();
+		
+						if ((this.options & EXCLUDE_TRIGGERS) == EXCLUDE_TRIGGERS) {
+							t.getTriggers().clear();
+						}
+
+						if ((this.options & EXCLUDE_INDEXES) == EXCLUDE_INDEXES) {
+							t.getIndex().clear();
+						}
+					}
+				}
+			}
+		}
+	}
+
+	protected void refresh(EObject[] objsToRE)
+	{
+		for (int i = 0; i < objsToRE.length; i++) {
+			EObject obj = objsToRE[i];
+
+			if (obj instanceof ICatalogObject)
+				((ICatalogObject) obj).refresh();
+		}
+	}
+
+	protected void setLoadProperties(EObject db){
+		if (!(db instanceof SQLObject))
+			return;
+
+		EAnnotation eAnnotation = EcoreFactory.eINSTANCE.createEAnnotation();
+		eAnnotation.setSource(LOAD_PROPERTY);
+		eAnnotation.getDetails().put(IS_BATCH_LOAD, Boolean.TRUE.toString());
+		eAnnotation.getDetails().put(LOAD_OPTIONS, Integer.toString( this.options ));
+
+		((SQLObject)db).getEAnnotations().add(eAnnotation);
+	}
+
+	protected void resetLoadProperties(EObject db)
+	{
+		if ( !(db instanceof SQLObject) )
+			return;
+
+		EList eAnnotations = ((SQLObject)db).getEAnnotations();
+        for (Iterator iter = eAnnotations.iterator(); iter.hasNext();){
+			EAnnotation eAnnotation = (EAnnotation)iter.next();
+
+			String source = eAnnotation.getSource();
+
+			if (source != null && source.equals(LOAD_PROPERTY)) {
+	        	eAnnotations.remove( eAnnotation);
+	        	
+	        	return;
+			}
+		}
+	}
+
+	protected void resetOwnerProperties(EObject ownerObject)
+	{
+		if ( !(ownerObject instanceof SQLObject) )
+			return;
+
+		EList eAnnotations = ((SQLObject)ownerObject).getEAnnotations();
+        for (Iterator iter = eAnnotations.iterator(); iter.hasNext();){
+			EAnnotation eAnnotation = (EAnnotation)iter.next();
+
+			String source = eAnnotation.getSource();
+
+			if (source != null && source.equals(OWNER_LOAD_OPTION)) {
+	        	eAnnotations.remove( eAnnotation);
+	        	return;
+			}
+		}
+	}
+	
+	private static void copyAttribute(EObject src,EObject target)
+	{
+		EClass c = src.eClass();
+
+		Iterator it = c.getEAllAttributes().iterator();
+		while(it.hasNext()) {
+			EAttribute a = (EAttribute) it.next();
+
+			if (a.isChangeable() && !a.isDerived())
+				copyAttribute(a, src, target);
+		}
+	}
+	
+	private static void copyAttribute(EAttribute attribute, EObject src, EObject target)
+	{
+        if ( !src.eIsSet(attribute)) {
+        	return;
+        }
+        
+        if ( FeatureMapUtil.isFeatureMap(attribute) )
+        {
+            FeatureMap srcFeatureMap = (FeatureMap)src.eGet(attribute);
+            FeatureMap tgtFeatureMap = (FeatureMap)src.eGet(attribute);
+
+            Iterator i = srcFeatureMap.iterator();
+            while(i.hasNext()) {
+            	FeatureMap.Entry entry = (FeatureMap.Entry)i.next();
+
+            	EStructuralFeature feature = entry.getEStructuralFeature();
+
+            	if ( !(feature instanceof EReference) ) {
+            		tgtFeatureMap.add(entry);
+            	}
+            }
+        }
+ 		else if(attribute.isMany()) {
+ 			((Collection)target.eGet(attribute)).addAll( (Collection)src.eGet(attribute) );
+        }
+        else {
+        	target.eSet(attribute, src.eGet(attribute));
+        }
+	}
+	
+	protected DBReverseProvider getDBReverseProvider(Database db)
+	{
+		if ( this.provider != null)
+			return this.provider;
+	
+		String dbProduct = db.getVendor();
+
+		IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+		IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("com.ibm.datatools.core","dbReverseProvider"); //$NON-NLS-1$ //$NON-NLS-2$
+		IExtension[] extensions = extensionPoint.getExtensions();
+
+		for(int i=0; i<extensions.length; ++i) {
+			IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+
+			for ( int j = 0; j < configElements.length; ++j ) {
+				if ( configElements[j].getName().equals("provider") ) { //$NON-NLS-1$
+					String product = configElements[j].getAttribute("product"); //$NON-NLS-1$
+
+					if ( !product.equals(dbProduct) )
+						continue;
+
+					String version = configElements[j].getAttribute("version"); //$NON-NLS-1$
+
+					try {
+						this.provider = (DBReverseProvider)configElements[j].createExecutableExtension("class"); //$NON-NLS-1$
+					}
+					catch(CoreException e) {
+						IStatus status = new Status( IStatus.ERROR, //
+								RDBCorePlugin.getDefault().getBundle().getSymbolicName(), IStatus.ERROR, //
+								"The error was detected when creating the db reverse provider for " //$NON-NLS-1$
+										+ product + " " + version, e ); //$NON-NLS-1$
+
+						DB2PluginActivator.getInstance().getLog().log(status);
+					}
+
+					break;
+				}
+			}
+		}
+		
+		return this.provider;
+	}
+
+	protected Database database = null;
+	protected int options;
+	protected List<String> columnNamesToIgnore;
+	protected IProgressMonitor monitor;
+	protected EObject[] objectsToRE;
+ 	protected DBReverseProvider provider;
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/GUIOption.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/GUIOption.java
new file mode 100644
index 0000000..3798a8a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/GUIOption.java
@@ -0,0 +1,134 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util;
+
+import java.util.Vector;
+
+public class GUIOption
+{
+    public GUIOption(String aName, Vector theValues, String defVal,
+                     boolean editable, boolean required, boolean multivalueAllowed,
+                     boolean alter, String delimiter, String platform, String hints,
+                     String description)
+    {
+        name = aName;
+        values = theValues;
+        defaultValue = defVal;
+        this.editable = editable;
+        this.required = required;
+        this.multivalueAllowed = multivalueAllowed;
+        this.alter = alter;
+        this.delimiter = delimiter;
+        this.platform = platform;
+        this.hints = hints;
+        this.description = description;
+    }
+    public void setName(String aName)
+    {
+        name = aName;
+    }
+    public String getName()
+    {
+        return name;
+    }
+    public void setValues(Vector vals)
+    {
+        values = vals;
+    }
+    public Vector getValues()
+    {
+        return values;
+    }
+    public void setDefaultValue(String defVal)
+    {
+        defaultValue = defVal;
+    }
+    public String getDefaultValue()
+    {
+        return defaultValue;
+    }
+    public void setEditable(boolean editable)
+    {
+        this.editable = editable;
+    }
+    public boolean isEditable()
+    {
+        return editable;
+    }
+    public void setRequired(boolean required)
+    {
+        this.required = required;
+    }
+    public boolean isRequired()
+    {
+        return required;
+    }
+    public boolean isMultiValueAllowed()
+    {
+        return multivalueAllowed;
+    }
+    public boolean isAlteringAllowed()
+    {
+        return alter;
+    }
+
+    public void setDelimiter(String d)
+    {
+        delimiter = d;
+    }
+    public String getDelimiter()
+    {
+        return delimiter;
+    }
+    public void setPlatform(String p)
+    {
+        platform = p;
+    }
+    public String getPlatform()
+    {
+        return platform;
+    }
+    public void setHints(String h)
+    {
+        hints = h;
+    }
+    public String getHints()
+    {
+        return hints;
+    }
+    public void setDescription(String d)
+    {
+        description = d;
+    }
+    public String getDescription()
+    {
+        return description;
+    }
+
+    /* Name of the column*/
+    private String name;
+    /* Possible values */
+    private Vector values;
+    /* Default Value */
+    private String defaultValue;
+    /*Is this GUI component editable*/
+    private boolean editable;
+    /* Is thins GUI component required*/
+    private boolean required;
+
+    private String delimiter;
+    private boolean multivalueAllowed;
+    private boolean alter;
+    private String platform;
+    private String hints;
+    private String description;
+}
+
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/LUWCatalogMessages.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/LUWCatalogMessages.java
new file mode 100644
index 0000000..d946920
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/LUWCatalogMessages.java
@@ -0,0 +1,166 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util;
+
+import org.eclipse.osgi.util.NLS;
+
+public final class LUWCatalogMessages extends NLS {
+
+	private static final String BUNDLE_NAME = "org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util.LUWCatalogMessages";//$NON-NLS-1$
+
+	private LUWCatalogMessages() {
+	}
+
+	public static String STAT_TIME;
+	public static String STAT_TIME_DES;
+	public static String STAT_CARD;
+	public static String STAT_CARD_DES;
+	public static String STAT_NPAGES;
+	public static String STAT_NPAGES_DES;
+	public static String STAT_FPAGES;
+	public static String STAT_FPAGES_DES;
+	public static String STAT_OVERFLOW;
+	public static String STAT_OVERFLOW_DES;
+	public static String STAT_ACTIVE_BLOCKS;
+	public static String STAT_ACTIVE_BLOCKS_DES;
+	public static String STAT_AVG_COMPRESSEDROWSIZE;
+	public static String STAT_AVG_COMPRESSEDROWSIZE_DES;
+	public static String STAT_AVG_ROW_COMPRESSION_RATIO;
+	public static String STAT_AVG_ROW_COMPRESSION_RATIO_DES;
+	public static String STAT_AVG_ROW_SIZE;
+	public static String STAT_AVG_ROW_SIZE_DES;
+	public static String STAT_PCT_ROWS_COMPRESSED;
+	public static String STAT_PCT_ROWS_COMPRESSED_DES;
+	public static String STAT_PCT_PCT_PAGES_SAVED;
+	public static String STAT_PCT_PCT_PAGES_SAVED_DES;
+	public static String STAT_COL_CARD;
+	public static String STAT_COL_CARD_DES;
+	public static String STAT_HIGH2KEY;
+	public static String STAT_HIGH2KEY_DES;
+	public static String STAT_LOW2KEY;
+	public static String STAT_LOW2KEY_DES;
+	public static String STAT_AVG_COLLEN;
+	public static String STAT_AVG_COLLEN_DES;
+	public static String STAT_NUMNULLS;
+	public static String STAT_NUMNULLS_DES;
+	public static String STAT_SUB_COUNT;
+	public static String STAT_SUB_COUNT_DES;
+	public static String STAT_SUB_DELIM_LENGTH;
+	public static String STAT_SUB_DELIM_LENGTH_DES;
+	public static String STAT_NLEAF;
+	public static String STAT_NLEAF_DES;
+	public static String STAT_NLEVELS;
+	public static String STAT_NLEVELS_DES;
+	public static String STAT_FIRST_KEYCARD;
+	public static String STAT_FIRST_KEYCARD_DES;
+	public static String STAT_FIRST2_KEYCARD;
+	public static String STAT_FIRST2_KEYCARD_DES;
+	public static String STAT_FIRST3_KEYCARD;
+	public static String STAT_FIRST3_KEYCARD_DES;
+	public static String STAT_FIRST4_KEYCARD;
+	public static String STAT_FIRST4_KEYCARD_DES;
+	public static String STAT_FULL_KEYCARD;
+	public static String STAT_FULL_KEYCARD_DES;
+	public static String STAT_CLUSTER_RATIO;
+	public static String STAT_CLUSTER_RATIO_DES;
+	public static String STAT_CLUSTER_FACTOR;
+	public static String STAT_CLUSTER_FACTOR_DES;
+	public static String STAT_SEQUENTIAL_PAGES;
+	public static String STAT_SEQUENTIAL_PAGES_DES;
+	public static String STAT_DENSITY;
+	public static String STAT_DENSITY_DES;
+	public static String STAT_PAGE_FETCH_PAIRS;
+	public static String STAT_PAGE_FETCH_PAIRS_DES;
+	public static String STAT_NUMRIDS;
+	public static String STAT_NUMRIDS_DES;
+	public static String STAT_NUMRIDS_DELETED; 
+	public static String STAT_NUMRIDS_DELETED_DES;
+	public static String STAT_NUM_EMPTY_LEAFS;
+	public static String STAT_NUM_EMPTY_LEAFS_DES;
+	public static String STAT_AVERAGE_RANDOM_FETCH_PAGES;
+	public static String STAT_AVERAGE_RANDOM_FETCH_PAGES_DES;
+	public static String STAT_AVERAGE_RANDOM_PAGES;
+	public static String STAT_AVERAGE_RANDOM_PAGES_DES;
+	public static String STAT_AVERAGE_SEQUENCE_GAP;
+	public static String STAT_AVERAGE_SEQUENCE_GAP_DES;
+	public static String STAT_AVERAGE_SEQUENCE_FETCH_GAP;
+	public static String STAT_AVERAGE_SEQUENCE_FETCH_GAP_DES;
+	public static String STAT_AVERAGE_SEQUENCE_PAGES;
+	public static String STAT_AVERAGE_SEQUENCE_PAGES_DES;
+	public static String STAT_AVERAGE_SEQUENCE_FETCH_PAGES;
+	public static String STAT_AVERAGE_SEQUENCE_FETCH_PAGES_DES;
+	public static String STAT_AVERAGE_PARTITION_CLUSTERRATIO;
+	public static String STAT_AVERAGE_PARTITION_CLUSTERRATIO_DES;
+	public static String STAT_AVERAGE_PARTITION_CLUSTERFACTOR;
+	public static String STAT_AVERAGE_PARTITION_CLUSTERFACTOR_DES;
+	public static String STAT_AVERAGE_PARTITION_PAGE_FETCH_PAIRS;
+	public static String STAT_AVERAGE_PARTITION_PAGE_FETCH_PAIRS_DES;
+	public static String STAT_DATAPARTITION_CLUSTERFACTOR;
+	public static String STAT_DATAPARTITION_CLUSTERFACTOR_DES;
+	public static String STAT_INDCARD;
+	public static String STAT_INDCARD_DES;
+	public static String STAT_IOS_PER_INVOC;
+	public static String STAT_IOS_PER_INVOC_DES;
+	public static String STAT_INSTS_PER_INVOC;
+	public static String STAT_INSTS_PER_INVOC_DES;
+	public static String STAT_IOS_PER_ARGBYTE;
+	public static String STAT_IOS_PER_ARGBYTE_DES;
+	public static String STAT_INSTS_PER_ARGBYTE;
+	public static String STAT_INSTS_PER_ARGBYTE_DES;
+	public static String STAT_PERCENT_ARGBYTE;
+	public static String STAT_PERCENT_ARGBYTE_DES;
+	public static String STAT_INITIAL_IOS;
+	public static String STAT_INITIAL_IOS_DES;
+	public static String STAT_INITIAL_INSTS;
+	public static String STAT_INITIAL_INSTS_DES;
+	public static String STAT_ROUTINE_CARDINALITY;
+	public static String STAT_ROUTINE_CARDINALITY_DES;
+	public static String STAT_SELECTIVITY;
+	public static String STAT_SELECTIVITY_DES;
+
+	//STAT COLDIST
+	public static String STAT_COLDIST;
+	public static String STAT_COLDIST_DES;
+	public static String STAT_COLDIST_TYPE;
+	public static String STAT_COLDIST_TYPE_DES;
+	public static String STAT_COLDIST_TYPE_F;
+	public static String STAT_COLDIST_TYPE_F_DES;
+	public static String STAT_COLDIST_TYPE_Q;
+	public static String STAT_COLDIST_TYPE_Q_DES;
+	public static String STAT_COLDIST_SEQNO;
+	public static String STAT_COLDIST_SEQNO_DES;
+	public static String STAT_COLDIST_COLVALUE;
+	public static String STAT_COLDIST_COLVALUE_DES;
+	public static String STAT_COLDIST_VALCOUNT;
+	public static String STAT_COLDIST_VALCOUNT_DES;
+	public static String STAT_COLDIST_DISTCOUNT;
+	public static String STAT_COLDIST_DISTCOUNT_DES;
+
+	
+	
+	
+	//FE 
+	public static String FE_TABLESPACE_NO_CONTAINER;
+	public static String FE_DATATYPE_IS_NULL;
+	public static String FE_REFERENCED_PARENT_KEY_DOES_NOT_EXIST;
+	public static String FE_REFERENCED_PARENT_TABLE_DOES_NOT_EXIST;
+	public static String FE_VIEW_HAS_NO_BODY;
+	public static String FE_MQT_HAS_NO_BODY;
+	public static String FE_BUFFERPOOL_INVAILD_SIZE_VALUE;
+	public static String FE_GENERATED_COLUMN_HAS_NO_EXPRESSION;
+	public static String FE_ALTER_TABLE_ADD_COLUMN_IDENTITY_OPTIONS;
+	public static String FE_INVALID_MODEL;
+	public static String FE_INDEX_MEMBERS_NOT_SPECIFIED;
+
+	static {
+		NLS.initializeMessages(BUNDLE_NAME, LUWCatalogMessages.class);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/LUWCatalogMessages.properties b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/LUWCatalogMessages.properties
new file mode 100644
index 0000000..4bfbfae
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/LUWCatalogMessages.properties
@@ -0,0 +1,160 @@
+# NLS_MESSAGEFORMAT_VAR          needed to handle quotes correctly
+#
+#
+# Copyright (c) 2004, 2014 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+#
+
+STAT_TIME 				=   Statistics time 
+STAT_TIME_DES 			=   Last time when any change was made to recorded statistics for this table.
+
+## Table
+STAT_CARD				=   Number of rows
+STAT_CARD_DES			=   Number of rows
+STAT_NPAGES				=   Number of pages with rows
+STAT_NPAGES_DES			=   Number of pages that contain rows
+STAT_FPAGES				=   Number of pages in use
+STAT_FPAGES_DES			=   Number of pages in use
+STAT_OVERFLOW			=   Number of rows that overflow
+STAT_OVERFLOW_DES		=   Number of rows that overflow
+STAT_ACTIVE_BLOCKS		=   Number of blocks that contain data
+STAT_ACTIVE_BLOCKS_DES	=   Number of blocks that contain data
+STAT_AVG_COMPRESSEDROWSIZE 		= Average length of compressed row
+STAT_AVG_COMPRESSEDROWSIZE_DES  = Average length of compressed row
+STAT_AVG_ROW_COMPRESSION_RATIO 		= Average compression ratio
+STAT_AVG_ROW_COMPRESSION_RATIO_DES  = Average compression ratio by row
+STAT_AVG_ROW_SIZE		= Average row size
+STAT_AVG_ROW_SIZE_DES   = Average length (in bytes) of both compressed and uncompressed rows in the table
+STAT_PCT_ROWS_COMPRESSED = Percentage of the compressed row
+STAT_PCT_ROWS_COMPRESSED_DES = Percentage of the compressed row
+STAT_PCT_PCT_PAGES_SAVED = Percentage of pages for row compression
+STAT_PCT_PCT_PAGES_SAVED_DES = Percentage of pages saved in the table as a result of row compression
+
+## Column
+STAT_COL_CARD			=   Number of distinct values
+STAT_COL_CARD_DES		=   Number of distinct values
+STAT_HIGH2KEY		= 	Second highest data value
+STAT_HIGH2KEY_DES	= 	Second highest data value
+STAT_LOW2KEY		= 	Second lowest data value
+STAT_LOW2KEY_DES	= 	Second lowest data value
+STAT_AVG_COLLEN		= Average column length
+STAT_AVG_COLLEN_DES	= Average space (in bytes) required for the column
+STAT_NUMNULLS 		= Number of null values
+STAT_NUMNULLS_DES 	= Contains the number of nulls in a column.
+STAT_SUB_COUNT		= Average number of sub-elements
+STAT_SUB_COUNT_DES	= Average number of sub-elements in the column
+STAT_SUB_DELIM_LENGTH = Average length of the delimiters
+STAT_SUB_DELIM_LENGTH_DES = Average length of the delimiters that separate each sub-element in the column
+
+## Index
+
+STAT_NLEAF			= Number of leaf pages
+STAT_NLEAF_DES		= Number of leaf pages
+STAT_NLEVELS		= Number of index levels
+STAT_NLEVELS_DES	= Number of index levels
+STAT_FIRST_KEYCARD  	= Number of distinct first key values
+STAT_FIRST_KEYCARD_DES  = Number of distinct first key values
+STAT_FIRST2_KEYCARD  	= Number of distinct keys using the first two columns
+STAT_FIRST2_KEYCARD_DES = Number of distinct keys using the first two columns of the index
+STAT_FIRST3_KEYCARD  	= Number of distinct keys using the first three columns
+STAT_FIRST3_KEYCARD_DES = Number of distinct keys using the first three columns of the index
+STAT_FIRST4_KEYCARD  	= Number of distinct keys using the first four columns
+STAT_FIRST4_KEYCARD_DES = Number of distinct keys using the first four columns of the index
+STAT_FULL_KEYCARD  		= Number of distinct full key values
+STAT_FULL_KEYCARD_DES 	= Number of distinct full key values
+STAT_CLUSTER_RATIO		= Cluster ratio
+STAT_CLUSTER_RATIO_DES	= Degree of data clustering with the index
+STAT_CLUSTER_FACTOR		= Cluster factor
+STAT_CLUSTER_FACTOR_DES	= A finer measurement of degree of clustering
+STAT_SEQUENTIAL_PAGES		= Sequential pages
+STAT_SEQUENTIAL_PAGES_DES	= Number of leaf pages located on disk in index key order with few or no large gaps between them
+STAT_DENSITY		= Density
+STAT_DENSITY_DES	= Ratio of SEQUENTIAL_PAGES to number of pages in the range of pages occupied by the index
+STAT_PAGE_FETCH_PAIRS = Page fetch pairs
+STAT_PAGE_FETCH_PAIRS_DES = A list of pairs of integers. Each pair represents the number of pages in a hypothetical buffer, and the number of page fetches required to scan the index using that hypothetical buffer.
+STAT_NUMRIDS	 = Number of RIDs
+STAT_NUMRIDS_DES = Number of RIDs in the index
+STAT_NUMRIDS_DELETED = Number of RIDs marked deleted
+STAT_NUMRIDS_DELETED_DES = Number of RIDs marked deleted
+STAT_NUM_EMPTY_LEAFS		= Number of empty leafs 
+STAT_NUM_EMPTY_LEAFS_DES	= Number of leaf pages in the index on which all RIDs are marked deleted
+STAT_AVERAGE_RANDOM_FETCH_PAGES = Average number of random table pages
+STAT_AVERAGE_RANDOM_FETCH_PAGES_DES = Average number of random table pages between sequential page accesses when fetching using the index
+STAT_AVERAGE_RANDOM_PAGES	= Average number of random index pages
+STAT_AVERAGE_RANDOM_PAGES_DES	= Average number of random index pages between sequential index page accesses
+STAT_AVERAGE_SEQUENCE_GAP	=  Average sequence gap
+STAT_AVERAGE_SEQUENCE_GAP_DES	= Gap between index page sequences.
+STAT_AVERAGE_SEQUENCE_FETCH_GAP = Average sequence fetch gap
+STAT_AVERAGE_SEQUENCE_FETCH_GAP_DES = Gap between table page sequences when fetching using the index
+STAT_AVERAGE_SEQUENCE_PAGES = Average sequence pages
+STAT_AVERAGE_SEQUENCE_PAGES_DES = Average number of index pages accessible in sequence
+STAT_AVERAGE_SEQUENCE_FETCH_PAGES =  Average sequence fetch pages
+STAT_AVERAGE_SEQUENCE_FETCH_PAGES_DES = Average number of table pages accessible in sequence when fetching using the index
+STAT_AVERAGE_PARTITION_CLUSTERRATIO =  Average partition cluster ratio
+STAT_AVERAGE_PARTITION_CLUSTERRATIO_DES = Degree of data clustering within a single data partition
+STAT_AVERAGE_PARTITION_CLUSTERFACTOR = Average partition cluster factor
+STAT_AVERAGE_PARTITION_CLUSTERFACTOR_DES = Fine measurement of the degree of data clustering within a single data partition
+STAT_AVERAGE_PARTITION_PAGE_FETCH_PAIRS = Average partition page fetch pairs
+STAT_AVERAGE_PARTITION_PAGE_FETCH_PAIRS_DES = A list of paired integers representing a potential buffer pool size and the corresponding page fetches required to access a single data partition from the table
+STAT_DATAPARTITION_CLUSTERFACTOR = Data partition cluster factor
+STAT_DATAPARTITION_CLUSTERFACTOR_DES = Clustering of the index keys with regard to data partitions
+STAT_INDCARD = Cardinality of the index
+STAT_INDCARD_DES = Cardinality of the index
+
+##Routine
+STAT_IOS_PER_INVOC = Number of I/Os per invocation
+STAT_IOS_PER_INVOC_DES = Estimated number of I/Os per invocation
+STAT_INSTS_PER_INVOC = Number of instructions per invocation
+STAT_INSTS_PER_INVOC_DES = Estimated number of instructions per invocation
+STAT_IOS_PER_ARGBYTE = Number of I/Os per input argument byte
+STAT_IOS_PER_ARGBYTE_DES = Estimated number of I/Os per input argument byte
+STAT_INSTS_PER_ARGBYTE = Number of instructions per input argument byte
+STAT_INSTS_PER_ARGBYTE_DES = Estimated number of instructions per input argument byte
+STAT_PERCENT_ARGBYTE = Average percent of input argument bytes
+STAT_PERCENT_ARGBYTE_DES = Estimated average percent of input argument bytes that the routine will actually read
+STAT_INITIAL_IOS = Number of I/Os the first/last time the routine is invoked
+STAT_INITIAL_IOS_DES = Estimated number of I/Os performed the first/last time the routine is invoked
+STAT_INITIAL_INSTS = Number of instructions the first/last time the routine is invoked
+STAT_INITIAL_INSTS_DES = Estimated number of instructions executed the first/last time the routine is invoked
+STAT_ROUTINE_CARDINALITY = Predicted cardinality of a table function
+STAT_ROUTINE_CARDINALITY_DES = The predicted cardinality of a table function
+STAT_SELECTIVITY = Selectivity
+STAT_SELECTIVITY_DES = Used for user-defined predicates
+
+##COLDIST
+STAT_COLDIST = Distribution {0}
+STAT_COLDIST_DES = Distribution {0}
+STAT_COLDIST_TYPE = Type of statistic collected
+STAT_COLDIST_TYPE_F = Type of statistic collected
+STAT_COLDIST_TYPE_F_DES = Type of statistic collected -- Frequency
+STAT_COLDIST_TYPE_Q = Type of statistic collected
+STAT_COLDIST_TYPE_Q_DES = Type of statistic collected -- Quantile value
+STAT_COLDIST_TYPE_DES = Type of statistic collected. F = Frequency Q = Quantile value
+STAT_COLDIST_SEQNO = Nth Most frequent value
+STAT_COLDIST_SEQNO_DES = Nth Most frequent value or Nth quantile value
+STAT_COLDIST_COLVALUE = The data value
+STAT_COLDIST_COLVALUE_DES = The data value
+STAT_COLDIST_VALCOUNT = Occurrences of data value
+STAT_COLDIST_VALCOUNT_DES = Occurrences of data value in the column
+STAT_COLDIST_DISTCOUNT = Number of distinct values less then data value
+STAT_COLDIST_DISTCOUNT_DES = Number of distinct values less then data value
+
+
+#FE
+FE_TABLESPACE_NO_CONTAINER = The table space {0} has no container
+FE_DATATYPE_IS_NULL = The data type of the object {0} is null
+FE_REFERENCED_PARENT_KEY_DOES_NOT_EXIST = The parent keys referenced by foreign key {0} do not exist
+FE_REFERENCED_PARENT_TABLE_DOES_NOT_EXIST = The parent table referenced by foreign key {0} does not exist
+FE_VIEW_HAS_NO_BODY = The view {0} has no SELECT statement
+FE_MQT_HAS_NO_BODY = The MQT {0} has no SELECT statement
+FE_BUFFERPOOL_INVAILD_SIZE_VALUE = Invalid value specified for "SIZE" in bufferpool {0}
+FE_GENERATED_COLUMN_HAS_NO_EXPRESSION = The generated column {0} has no generation expression
+FE_ALTER_TABLE_ADD_COLUMN_IDENTITY_OPTIONS = Uncheck the identity checkbox for the new column {0} and try again
+FE_INVALID_MODEL = The model is invalid, please check the problem view to make the correction.
+FE_INDEX_MEMBERS_NOT_SPECIFIED = The key columns have not been specified for the index {0}.
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/LUWDdlParser.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/LUWDdlParser.java
new file mode 100644
index 0000000..65d020c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/LUWDdlParser.java
@@ -0,0 +1,170 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.enablement.ibm.db2.ddl.DB2DdlParser;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable;
+import org.eclipse.datatools.modelbase.sql.expressions.QueryExpression;
+import org.eclipse.datatools.modelbase.sql.expressions.SQLExpressionsPackage;
+import org.eclipse.datatools.modelbase.sql.expressions.SearchCondition;
+import org.eclipse.datatools.modelbase.sql.expressions.SearchConditionDefault;
+import org.eclipse.datatools.modelbase.sql.statements.SQLStatement;
+import org.eclipse.datatools.modelbase.sql.statements.SQLStatementDefault;
+import org.eclipse.datatools.modelbase.sql.statements.SQLStatementsPackage;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+
+public class LUWDdlParser extends DB2DdlParser {
+
+	public LUWDdlParser(DatabaseDefinition def){
+		super(def);
+	}
+
+    public DB2MaterializedQueryTable parseMQT(String mqtText) {
+    	DataModelElementFactory factory = this.def.getDataModelElementFactory();
+    	DB2MaterializedQueryTable mqt = (DB2MaterializedQueryTable)factory.create(LUWPackage.eINSTANCE.getLUWMaterializedQueryTable());
+
+    	String body = mqtText;
+    	String[] tokens = mqtText.split("\\s[Aa][Ss]\\s",2);
+    	if (tokens.length > 1) {
+    		body = tokens[1].trim();
+    	}
+    	int pos = this.parseMQTFullStatement(body);
+    	if (pos != -1) {
+    		body = body.substring(1,pos);
+    	}
+		QueryExpression queryExpression = (QueryExpression) factory.create(SQLExpressionsPackage.eINSTANCE.getQueryExpressionDefault());
+		mqt.setQueryExpression(queryExpression);
+		queryExpression.setSQL(body);
+		return mqt;    	
+    }
+
+    public void parseTrigger (Trigger trigger,String triggerText){
+    	DataModelElementFactory factory = this.def.getDataModelElementFactory();
+    	
+    	String body = triggerText;
+    	String whenClause=""; //$NON-NLS-1$
+
+		Pattern pattern1 = java.util.regex.Pattern.compile("[\\s]*CREATE.*[\\s]+?TRIGGER(.*)ON(.*)[\\s]+?FOR[\\s]+?EACH[\\s]+?(.*)",java.util.regex.Pattern.CASE_INSENSITIVE|java.util.regex.Pattern.DOTALL); //$NON-NLS-1$
+    	Matcher matcher1 = pattern1.matcher(triggerText);
+    	if (matcher1.matches()) {
+    		this.parseUpdateColumns(matcher1.group(1).trim(),trigger);
+    		this.parseReferencingCluase(matcher1.group(2).trim(),trigger);
+    		body = matcher1.group(3).trim();
+    		if (body.toUpperCase().startsWith("ROW")) {
+    			body = body.substring("ROW".length() +1);
+    		} else if (body.toUpperCase().startsWith("STATEMENT")) {
+    			body = body.substring("STATEMENT".length() +1);
+    		}
+        	Pattern pattern = java.util.regex.Pattern.compile("[\\s]*MODE[\\s]+?DB2SQL(.*)",java.util.regex.Pattern.CASE_INSENSITIVE|java.util.regex.Pattern.DOTALL); //$NON-NLS-1$
+        	Matcher matcher = pattern.matcher(body);
+        	if (matcher.matches()) {
+        		body = matcher.group(1).trim();
+    			int whenPos = this.parseWhenClause(body);
+    			if (whenPos >= 0) {
+    				whenClause = body.substring(body.indexOf("(")+1,whenPos); //$NON-NLS-1$
+    				body = body.substring(whenPos+1).trim();
+    			}
+        	} else {
+    			int whenPos = this.parseWhenClause(body);
+    			if (whenPos >= 0) {
+    				whenClause = body.substring(body.indexOf("(")+1,whenPos); //$NON-NLS-1$
+    				body = body.substring(whenPos+1).trim();
+    			}
+        	}
+    		
+    	}
+    	
+		SearchCondition searchCondition = (SearchCondition) factory.create(SQLExpressionsPackage.eINSTANCE.getSearchConditionDefault());
+		trigger.setWhen(searchCondition);
+		((SearchConditionDefault)searchCondition).setSQL(whenClause);
+
+    	
+		SQLStatement sqlbody = (SQLStatement) factory.create(SQLStatementsPackage.eINSTANCE.getSQLStatementDefault());
+		((SQLStatementDefault)sqlbody).setSQL(body);
+		trigger.getActionStatement().add(sqlbody);
+    	
+    }
+    
+/*	public void parseView (ViewTable view,String viewText){
+		try {
+			Database[] dbs = new Database[]{view.getSchema().getDatabase()};
+	        Schema schema =  view.getSchema();
+	    	DDLParser luwParser = this.def.getDdlParser();
+	    	if (luwParser == null) return;
+	    	
+	        File temp = File.createTempFile("luwview", ".ddl");
+	        
+	        // Delete temp file when program exits.
+	        temp.deleteOnExit();
+	    
+	        // Write to temp file
+	        BufferedWriter out = new BufferedWriter(new FileWriter(temp));
+	        String currentSchema= "SET SCHEMA " + schema.getName() + ";" +  System.getProperty("line.separator");
+	        out.write(currentSchema);
+	        out.write(viewText);
+	        out.write(" ;");
+	        out.close();
+
+	        view.getSchema().getTables().remove(view);
+	        ViewTable tempView = null;
+	    	luwParser.parse(temp.getAbsolutePath(), dbs, null);
+    		for (Iterator iter = schema.getTables().iterator(); iter.hasNext();){
+    			Table table = (Table) iter.next();
+    			if (table.getName().equals(view.getName()) && table instanceof ViewTable) {
+    				tempView = (ViewTable)table;
+    				QueryExpression expression = ((ViewTable)table).getQueryExpression();
+    				if (expression == null) break;
+    				String sqlbody = expression.getSQL();
+    		    	DataModelElementFactory factory = this.def.getDataModelElementFactory();
+    				QueryExpression queryExpression = (QueryExpression) factory.create(SQLExpressionsPackage.eINSTANCE.getQueryExpressionDefault());
+    				((QueryExpressionDefault)queryExpression).setSQL(sqlbody);
+    				view.setQueryExpression(queryExpression);
+    				
+    				break;
+    			}
+    		}
+	    	
+	    	if (tempView != null) {
+	    		schema.getTables().remove(tempView);
+	    	}
+	    	
+	    	schema.getTables().add(view);
+	    	
+		} catch(Exception e){
+			e.printStackTrace();
+		}
+    }
+*/
+    private int parseMQTFullStatement(String body){
+    	int pos = -1;
+    	int matches = 0;
+		for (int i = 0; i < body.length(); i++) {
+			if (body.charAt(i)=='(') {
+				matches++;
+			} else if (body.charAt(i) ==')') {
+				matches--;
+				if (matches == 0) {
+					pos = i;
+					break;
+				}
+			}
+		}
+  
+    	return pos;
+    	
+    }
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/LUWUtil.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/LUWUtil.java
new file mode 100644
index 0000000..38d36db
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/LUWUtil.java
@@ -0,0 +1,129 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util;
+
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.DB2LUWPluginActivator;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabaseImpl;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Privilege;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+public class LUWUtil {
+
+    private final static String SINGLE_QUOTE         = "'"; //$NON-NLS-1$
+    
+	public static String getIdentifier(String name) {
+		String identifier = name;
+		identifier = identifier.replaceAll("'", "''");
+		return identifier;
+	}
+
+	
+    public static String getSingleQuotedString(String orignal) {
+    	if (orignal.startsWith(SINGLE_QUOTE) && orignal.endsWith(SINGLE_QUOTE)) {
+    		return orignal;
+    	}
+    	
+    	StringTokenizer tokenizer = new StringTokenizer(orignal, SINGLE_QUOTE);
+    	String result = orignal;
+  		if (tokenizer.hasMoreTokens()) {
+  			result = tokenizer.nextToken();
+  		} else {
+  			return result;
+  		}
+        while(tokenizer.hasMoreTokens()) {
+            result =  result + SINGLE_QUOTE + SINGLE_QUOTE + tokenizer.nextToken();
+        }
+        return SINGLE_QUOTE + result + SINGLE_QUOTE;
+    }
+
+	public Privilege findPrivileges (Object[] privilegelist, String grantee){
+		for (int i = 0; i < privilegelist.length; i++){
+			Privilege priv = (Privilege) privilegelist[i];
+			if (priv.getGrantee().getName().equals(grantee)){
+				return (Privilege) privilegelist[i];
+			}
+		}
+		return null;
+	}
+	
+	public static List<String> getDiscoveredLibraries(LUWDatabase luwdb)
+	{
+		List<String> libraries = new ArrayList<String>();
+		Hashtable wrapperConfigs = new Hashtable();
+		WrapperConfigFile wrapperConfig;
+		Database database = (Database)luwdb;
+		LUWDatabaseImpl db = (LUWDatabaseImpl)database;
+      	try 
+      	{
+      		WrapperConfigManager wrapperConfigMgr = new WrapperConfigManager(db);
+      		ServerKindsConfig serverKinds = wrapperConfigMgr.getServerKindsConfig();
+      		//constructor initializes itself serverKinds.init(db, conn);
+      		wrapperConfigs = serverKinds.getAllWCF();
+     	}
+      	catch (Exception e) 
+      	{
+      		DB2LUWPluginActivator.getInstance().log(null,e);
+  		}
+      	//go through all the configuration files for each wrapper
+      	//and get the configuration values (e.g. server type, version, etc.)
+      	Enumeration configs = wrapperConfigs.keys();
+      	// This is code where data sources are discovered and mentioned in DSE
+      	while (configs.hasMoreElements()) 
+      	{
+      		String configID =(String)configs.nextElement();
+      		wrapperConfig = (WrapperConfigFile)wrapperConfigs.get(configID);
+      		try
+      		{
+      			String wrapperID = wrapperConfig.getWrapperID();
+      			String folderName = new String();
+      			if( wrapperID.equalsIgnoreCase("drda")) 
+      			{
+      				libraries.add("DB2");
+      			}
+      			else if( wrapperID.equalsIgnoreCase("sqlnet") || wrapperID.equalsIgnoreCase("net8")) {
+      				libraries.add("ORACLE");
+      			}
+      			else if( wrapperID.equalsIgnoreCase("dblib") || wrapperID.equalsIgnoreCase("ctlib")) {
+      				libraries.add("SYBASE");
+      			}
+      			else if( wrapperID.equalsIgnoreCase("mssql3")) {
+      				libraries.add("SQL_SERVER");
+      			}
+      			else if( wrapperID.equalsIgnoreCase("odbc")) {
+      				libraries.add("ODBC");
+      			}
+      			else if( wrapperID.equalsIgnoreCase("informix")) {
+      				libraries.add("INFORMIX");
+      			}
+      			else if( wrapperID.equalsIgnoreCase("teradata")) {
+      				libraries.add("TERADATA");
+      			}
+      			else if( wrapperID.equalsIgnoreCase("jdbc")) {
+      				libraries.add("JDBC");
+      			}
+      			
+      		}
+      		catch (Exception e) {
+      			DB2LUWPluginActivator.getInstance().log(null,e);     			
+      		}
+      	}
+		return libraries;
+	}
+
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/ParseXMLFile.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/ParseXMLFile.java
new file mode 100644
index 0000000..5d9c2ad
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/ParseXMLFile.java
@@ -0,0 +1,197 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.PrintStream;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.xml.sax.EntityResolver;
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+ /**
+  *
+  */
+  public class ParseXMLFile implements EntityResolver, ErrorHandler {
+
+    private  Node   rootNode = null;
+    private  InputSource binDTDFile = null;
+    private  InputSource binXMLFile = null;
+
+    public ParseXMLFile (InputSource DTDFile, InputSource XMLFile, String rootNodeName ) throws SAXException, IOException, ParserConfigurationException {
+        this.binDTDFile = DTDFile;
+        this.binXMLFile = XMLFile;
+
+        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+        DocumentBuilder builder = factory.newDocumentBuilder();
+        builder.setEntityResolver(this);
+        builder.setErrorHandler( this);
+        Document document = builder.parse(this.binXMLFile);
+        rootNode = document.getDocumentElement();
+        if (rootNodeName != null && !(rootNodeName.equals(rootNode.getNodeName())) ){      
+           SAXException e = new SAXException("Not our XML file. Root is " + rootNode.getNodeName() + " but should be " + rootNodeName );
+          // ServerdiscoveryPlugin.getDefault().trace("SAX Exception: "+e.toString());  //$NON-NLS-1$
+         	
+           throw e;
+        }
+  }
+
+   /**
+   * Returns a DOM root node for navigating the DOM tree. The wrapperid idetifies
+   * the XML file the DOM was build from.
+   *
+   * @return a DOM root node
+   */
+    public Node getRootNode () {
+      return rootNode;
+    }
+
+   /**
+   * Set the DOM root node for navigating the DOM tree.
+   *
+   * @parm a DOM root node
+   */
+    public void setRootNode (Node n) {
+      rootNode = n;
+    }
+
+
+   /**
+   * Returns an InputSource binary stream with the XML file.
+   * This can be passed directly into the parser.
+   *
+   * @return InputSource bianry stream
+   */
+    public InputSource getBinaryXMLFile () {
+      return binXMLFile;
+    }
+
+
+   /**
+   * Returns an InputSource binary stream with the DTD file.
+   * This can be passed directly into the parser.
+   *
+   * @return InputSource bianry stream
+   */
+    public InputSource getBinaryDTDFile () {
+      return binDTDFile;
+    }
+    
+   /**
+   * Sets the InputSource binary stream for the XML file.
+   *
+   * @parm InputSource bianry stream
+   */
+    public void setBinaryXMLFile (InputSource is) {
+      binXMLFile = is;
+    }
+
+
+   /**
+   * Sets the InputSource binary stream for the DTD file.
+   *
+   * @parm InputSource bianry stream
+   */
+    public void  setBinaryDTDFile (InputSource is) {
+      binDTDFile = is;
+    }
+
+
+ /**
+  * Find the specified attribute in the specified node and return its value.
+  * If the attribute is not found, the default value is returned.
+  *
+  * @param  node  The node that contains the attribute.
+  * @param  key  The attribute name.
+  * @param  defV  The default value to return if the attribute is not found.
+  * @return a String that contains the attribute value if the attribute was
+  *     found or the default value if the attribute was not found.
+  */
+  public String findAttribute( Node node, String key, String defV ) {
+    NamedNodeMap nnm = node.getAttributes();
+    if( nnm == null ) {
+      return defV;
+    }
+    for( int i = 0; i < nnm.getLength(); i++ ) {
+      Node attr = nnm.item( i );
+      if( key.equals( attr.getNodeName() ) ) {
+        return attr.getNodeValue().trim();
+      }
+    }
+    return defV;
+  }
+
+    //===========================ENTITY RESOLVER===========================
+    /**
+    * Use DTD binary InputSource for validation instead of trying to find file.
+    *
+    * @return binary DTD input source
+    */
+    public InputSource resolveEntity(java.lang.String publicId, java.lang.String systemId)
+      throws SAXException, java.io.IOException {
+       return binDTDFile;
+    }
+
+    //=================================ERROR HANDLER=============================
+    public void error( SAXParseException e ) throws SAXException {
+      //write parse error info to trace
+   	
+      String msg = new String("An XML Parser exception occured. Exception Text: "+e.getMessage());
+      //String msg = MessageFormat.format( WTStringPool.get(WTStringPool.DJ_WCF_PARSE_ERROR), new Object[]{e.getMessage()} );
+      
+      SAXException err = new SAXException( msg); 
+      //dump info to standard out
+   // ServerdiscoveryPlugin.getDefault().trace("parse error. line number:"+e.getLineNumber()+" .column number:"+e.getColumnNumber()+". message:"+e.getMessage());  //$NON-NLS-1$
+  	
+      //dump stack to trace
+      ByteArrayOutputStream baos =  new ByteArrayOutputStream();
+      PrintStream errOut = new PrintStream(baos, true);
+      e.printStackTrace(errOut);
+//      System.out.println("error: "+new String(baos.toByteArray()));
+     // ServerdiscoveryPlugin.getDefault().trace("parse error: "+new String(baos.toByteArray())+err);  //$NON-NLS-1$
+      throw err;
+    }
+
+    public void fatalError( SAXParseException e ) throws SAXException {
+      //write fatal parse error info to trace
+  
+        String msg = new String("An XML Parser exception occured. Exception Text: "+e.getMessage());
+        SAXException err = new SAXException( msg);  
+//dump info to standard out
+   // ServerdiscoveryPlugin.getDefault().trace("fatal parse error. line number:"+e.getLineNumber()+" .column number:"+e.getColumnNumber()+". message:"+e.getMessage());  //$NON-NLS-1$
+    	
+      //dump stack to trace
+      ByteArrayOutputStream baos =  new ByteArrayOutputStream();
+      PrintStream errOut = new PrintStream(baos, true);
+      e.printStackTrace(errOut);
+
+     // ServerdiscoveryPlugin.getDefault().trace("fatal error: "+new String(baos.toByteArray())+err);  //$NON-NLS-1$
+      
+      throw err;
+    }
+
+    public void warning( SAXParseException e ) throws SAXException {
+ 	//ServerdiscoveryPlugin.getDefault().trace("warning parse error. line number:"+e.getLineNumber()+" .column number:"+e.getColumnNumber()+". message:"+e.getMessage());  //$NON-NLS-1$
+    	
+        //do not throw this warning exception, ignore it
+    }
+ }
+
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/ServerKindsConfig.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/ServerKindsConfig.java
new file mode 100644
index 0000000..61f6834
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/ServerKindsConfig.java
@@ -0,0 +1,141 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util;
+
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Set;
+//import com.ibm.datatools.db2.luw.serverdiscovery.WrapperConfigFile;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabaseImpl;
+ 
+public class ServerKindsConfig {
+
+   private Hashtable libnameToWrapperid = null;
+   private Hashtable wrapperidToName = null;
+   private Hashtable nameToWrapperid = null;
+   private Hashtable nameToDescription = null;
+   private Hashtable nameToLibname = null;
+   private Hashtable allWCFiles = null;
+//   private WrapperConfigFile wrapperConfigFile;
+   /**
+   *  Initalize data from the XML files.
+   *
+   * @param  Database object to use for connection
+   */
+    public void init (LUWDatabaseImpl aDatabase) throws Exception {
+      try{
+        //call WrapperConfigFiles.initAllFiles to get all data
+        //hashtable keys are wrapperids
+      	
+        Hashtable wcFiles = WrapperConfigFile.initAllFiles(aDatabase);
+        allWCFiles = wcFiles;
+        //build hastables with data
+        Set keys = wcFiles.keySet();
+        Iterator iterKeys =  keys.iterator();
+
+        //create hash tables
+        libnameToWrapperid = new Hashtable();
+        wrapperidToName = new Hashtable();
+        nameToWrapperid = new Hashtable();
+        nameToDescription = new Hashtable();
+        nameToLibname = new Hashtable();
+
+        //iterate through configuration files
+        while(iterKeys.hasNext()){
+           String wrapperid = (String)iterKeys.next();
+           WrapperConfigFile wcf = (WrapperConfigFile)wcFiles.get(wrapperid);
+           String libname = wcf.getLibname();
+           //skip wrapper if library is empty
+           if(libname.length() > 0){
+             libnameToWrapperid.put(libname, wrapperid);
+             Hashtable sk =  wcf.getServerKinds();
+             if(!sk.isEmpty() ){
+               Iterator iterServerKinds = sk.keySet().iterator();
+               while(iterServerKinds.hasNext()){
+                 String skName = (String)iterServerKinds.next();
+                 String description = (String)sk.get(skName);
+                 nameToDescription.put(skName, description);
+                 wrapperidToName.put(wrapperid, skName);
+                 nameToWrapperid.put(skName, wrapperid);
+                 nameToLibname.put(skName, libname);
+               }
+             }
+           }
+        }
+       }catch(Exception e){
+          throw e;
+       }
+    }
+
+   /**
+   *  Get the list of server kinds from all the wrapper congifuration files.
+   *
+   * @param Enumeration of server kind names
+   */
+    public Enumeration getServerKinds() throws Exception {
+        return nameToDescription.keys();
+    }
+
+   /**
+   * Get the wrapper id from the library name.
+   * @param library name
+   * @return wrapper id
+   */
+    public String getWrapperID(String libName)  throws Exception{
+        return (String)libnameToWrapperid.get(libName);
+    }
+
+
+   /**
+   * Get the library name from the server kind name.
+   * @param serverKindName the display name for the kind of server, returned by getServerKinds()
+   * @return library name
+   */
+    public String getLibname(String serverKindName)  throws Exception{
+        return (String)nameToLibname.get(serverKindName);
+
+    }
+
+   /**
+   * Get the server kinds name from the wrapper id
+   * @param wrapperID String returned by getWrapperID
+   * @return server kinds name
+   */
+    public String getServerKindName(String wrapperID)  throws Exception{
+        return (String)wrapperidToName.get(wrapperID);
+
+    }
+
+   /**
+   * Get the description form the server kind name.
+   * @param serverKindName the display name for the kind of server, returned by getServerKinds()
+   * @return library name
+   */
+    public String getDescription(String serverKindName)  throws Exception{
+        return (String)nameToDescription.get(serverKindName);
+
+    }
+
+   /**
+   * Get the list of WrapperConfigFile objects returned from initAllFiles.
+   * @param serverKindName the display name for the kind of server, returned by getServerKinds()
+   * @return Hashtable key is wrapper id, object is initalized WrapperConfigFile
+   */
+    public Hashtable getAllWCF()  {
+        return allWCFiles;
+    }
+
+    public Enumeration getAllWrapperIDs() throws Exception{ 
+		return wrapperidToName.keys();
+	}
+
+ }
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/WrapperConfigData.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/WrapperConfigData.java
new file mode 100644
index 0000000..d9f7f4a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/WrapperConfigData.java
@@ -0,0 +1,198 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util;
+
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Vector;
+
+import org.eclipse.datatools.enablement.ibm.util.CommonOptions;
+import org.w3c.dom.Node;
+import org.xml.sax.InputSource;
+
+public interface  WrapperConfigData {
+   /**
+   * Returns the XML file name for this wrapper
+   *
+   * @return String of XML file names
+   */
+    public String getXMLFileName ();
+
+
+   /**
+   * Returns a DOM root node for navigating the DOM tree. The wrapperid idetifies
+   * the XML file the DOM was build from.
+   *
+   * @return a DOM root node
+   */
+    public Node getRootNode ();
+
+   /**
+   * Returns an InputSource binary stream with the XML file.
+   * This can be passed directly into the parser.
+   *
+   * @return InputSource bianry stream
+   */
+    public InputSource getBinaryXMLFile ();
+
+
+   /**
+   * Returns an InputSource binary stream with the DTD file.
+   * This can be passed directly into the parser.
+   *
+   * @return InputSource bianry stream
+   */
+    public InputSource getBinaryDTDFile ();
+
+ //====================SERVER==========================
+
+   /**
+   *  returns string "windows" | "aix" | "solaris" | "hpux" | "linux" | "unix"
+   *
+   * @return server platform type
+   */
+    public String getServerPlatform ();
+
+   /**
+   *  get a list of server type names
+   *
+   * @return Enumeration of server type names
+   */
+    public Enumeration getServerTypes()  throws Exception;
+
+   /**
+   * Get the server options in a hashtable. The hash key is the option name.
+   * If there are no options an empty hashtable is returned.
+   * <p>Hashtable key is a String - option name
+   * <p>Hashtable value is a GUIOption - option
+   * @return hashtable of GUIOption objects
+   */
+    public Hashtable getServerOptions()  throws Exception;
+
+   /**
+   * Get the server type versions
+   *
+   * @parm serverType the name of the type of server, returned by  getServerTypes
+   * @return Vector of version numbers as Strings
+   */
+    public Vector getServerVersionsByType(String serverType)  throws Exception;
+
+  /**
+   * Get the server kinds name and description. The Name is the hash key ,
+   * the description is hash value.
+   * <p>Hashtable key is a String - name
+   * <p>Hashtable value is a String - description
+   * @return Hashtable key is server kind name , object is description
+   */
+    public  Hashtable getServerKinds()  throws Exception;
+
+  /**
+   *  Get the wrapper library name for the server's platform
+   * @return String
+   */
+    public  String getLibname()  throws Exception;
+
+ //====================WRAPPER===================
+
+
+   /**
+   * Get the Wrapper options in a hashtable. The hash key is the option name.
+   * If there are no options an empty hashtable is returned.
+   * <p>Hashtable key is a String - option name
+   * <p>Hashtable value is a GUIOption - option
+   * @return hashtable of GUIOption objects
+   */
+    public Hashtable getWrapperOptions()  throws Exception;
+
+   /**
+   *  Get the wrapper id
+   * @return String
+   */
+    public  String getWrapperID()  throws Exception;
+
+    /**
+   *  Get the wrapper description
+   * @return String
+   */
+    public  String getWrapperDescription()  throws Exception;
+
+    /**
+   *  Test if sample contents is supported for this wrapper.
+   * @return returns true if supported
+   */
+    public  boolean isSampleContentsAvailable()  throws Exception;
+
+
+    /**
+   * Tests if userid is required for the wrapper.
+   * @return true if required
+   */
+    public boolean isServerUseridRequired()  throws Exception;
+
+
+ //====================DISCOVER===================
+   /**
+   * Get the discover options in a hashtable. The hash key is the option name.
+   * If there are no options an empty hashtable is returned.
+   * <p>Hashtable key is a String - option name
+   * <p>Hashtable value is a GUIOption - option
+   * @return hashtable of GUIOption objects
+   */
+    public Hashtable getDiscoverOptions()  throws Exception;
+
+   /**
+   * Get the discover options in a vector in the same order as in the XML file.
+   * If there are no options an empty vector is returned.
+   * @return vector of GUIOption objects
+   */
+    public Vector getDiscoverOptionsVector()  throws Exception;
+
+   /**
+   * Get the discover server options in a hashtable. The hash key is the option name.
+   * If there are no options an empty hashtable is returned.
+   * <p>Hashtable key is a String - option name
+   * <p>Hashtable value is a GUIOption - option
+   * @return hashtable of GUIOption objects
+   */
+    public Hashtable getDiscoverServerOptions()  throws Exception;
+
+   /**
+   * Get the discover server options in a vector in the same order as in the XML file.
+   * If there are no options an empty vector is returned.
+   * @return vector of GUIOption objects
+   */
+    public Vector getDiscoverServerOptionsVector()  throws Exception;
+
+   /**
+   * Get the discover parameters in a hashtable. The hash key is the parm name.
+   *
+   * <p>Hashtable key is a String - parm name
+   * <p>Hashtable value is a String - parm value
+   * @return hashtable of parm values
+   */
+    public Hashtable getDiscoverParms()  throws Exception;
+
+   /**
+   * Get the discover java class name for this wrapper.
+   *
+   * @return class name
+   */
+    public String getDiscoverClassName()  throws Exception;
+
+   /**
+   * Get the CommonOption class.
+   *
+   * @return CommonOptions  The commonOptions class or null if none defined.
+   */
+    public CommonOptions getCommonOptions()  throws Exception;
+
+}
+
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/WrapperConfigFile.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/WrapperConfigFile.java
new file mode 100644
index 0000000..093bda2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/WrapperConfigFile.java
@@ -0,0 +1,1671 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.lang.ref.WeakReference;
+import java.sql.Blob;
+import java.sql.CallableStatement;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Locale;
+import java.util.Vector;
+
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.DatabaseConnectionRegistry;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase;
+import org.eclipse.datatools.enablement.ibm.util.CommonOptions;
+import org.eclipse.datatools.enablement.ibm.util.ConfigMessage;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+ 
+public class WrapperConfigFile implements WrapperConfigData {
+    public static Vector instances = new Vector();     // Keep track of all objects to track storage use
+
+    private static final String rootNodeName = "wrapper";    // The root node of our files
+    private  Node   rootNode = null;
+    private  String XMLFileName = null;
+    private  ParseXMLFile parser = null;
+    private  Hashtable textBundle = null;
+    private  boolean hasPropertiesFile = false;
+
+    //wrapper
+    private boolean wrapperParsed = false;
+    private  String wid = null;
+    private  String libname = null;
+    private boolean sample_contents = false;
+    private boolean userid_required = false;
+    private String wrapperDescription = "";
+    private Hashtable wrapperoptionnameToOption = null;
+    private Vector vecWrapperoptionnameToOption = null;  
+    private Hashtable wrapperLibraryToPlatform = null;   
+    private Hashtable optionnameToKey = null;          
+
+    //server
+    private boolean serverParsed = false;
+    private String serverPlatform = null;
+    private boolean fUnixServer = false;
+    private boolean allServerTypesVersionsSameDataTypes = true;  
+    private Hashtable serverkindnameToDescription = null;
+    private Hashtable serveroptionnameToOption = null;
+    private Vector vecServeroptionnameToOption = null;    
+    private Hashtable servertypenameToVersionlist = null;  //contains vectors of versions
+    private Hashtable servertypenameandversionToDatatype = null;  //contains vectors of datatypes  
+
+    //discover
+    private boolean discoverParsed = false;
+    private  String discoverClassName = "";
+    private Hashtable discoveroptionnameToOption = null;
+    private Hashtable discoverServerOptions = null;
+    private Vector  vDiscoverOptions = null;
+    private Vector  vDiscoverServerOptions = null;
+    private Hashtable discoverparmnameToParmvalue = null;
+    private Vector  vDiscoverParms = null;
+//    private Vector  vGenericFunctions = null;
+
+    //column
+//    private boolean columnParsed = false;
+//    private Vector vColumnDatatypes = null;
+//    private Hashtable columnoptionnameToOption = null;
+
+    //user
+    private boolean userParsed = false;
+    private Hashtable useroptionnameToOption = null;
+    private String usersMappingType = "optional";
+
+
+    //common options
+    private boolean commonOptionsParsed = false;
+    private CommonOptions commonOptions = null;
+
+    //generic functions
+//    private boolean genericFunctionsParsed = false;
+//    private Vector genericFunctions = null;
+
+    //enumeration values
+    public static final String SERVER_PLATFORM_AIX =     "aix";
+    public static final String SERVER_PLATFORM_WINDOWS = "windows";
+    public static final String SERVER_PLATFORM_SOLARIS = "solaris" ;
+    public static final String SERVER_PLATFORM_LINUX =   "linux";
+    public static final String SERVER_PLATFORM_UNIX =    "unix";
+    public static final String SERVER_PLATFORM_HPUX =    "hpux";
+
+
+    public static final String OPTION_PLATFORM_AIX =     "aix";
+    public static final String OPTION_PLATFORM_WINDOWS = "windows";
+    public static final String OPTION_PLATFORM_SOLARIS = "solaris" ;
+    public static final String OPTION_PLATFORM_LINUX =   "linux";
+    public static final String OPTION_PLATFORM_HPUX =    "hpux";
+    public static final String OPTION_PLATFORM_ALLUNIX = "all_unix";
+    public static final String OPTION_PLATFORM_ALL =     "all";
+
+    public static final String NICKNAME_DDLSYNTAX_WITHCOL =    "with_columns";
+    public static final String NICKNAME_DDLSYNTAX_WITHOUTCOL = "without_columns";
+    public static final String NICKNAME_DDLSYNTAX_EITHER =     "either ";
+
+    public static final String ATTRIBUTE_VALUE_YES =     "Y";
+    public static final String ATTRIBUTE_VALUE_NO  =     "N";
+
+    public static final String USER_MAPPING_NOTSUPPORT  =   "not_supported";
+    public static final String USER_MAPPING_OPTIONAL  =     "optional";
+    public static final String USER_MAPPING_REQUIRED  =     "required";
+
+    public WrapperConfigFile() {
+      //TODO! >> Farnaz 
+      //CommonUtils.removeFreedReferences(instances);      // Remove any references to dialogs that have been freed  
+      instances.addElement( new WeakReference(this) );   // Keep track of the dialog via a WeakReference           
+    }
+
+   /**
+   *  Connects to a database on the db server and runs the
+   *  stored procedure to retrieve the xml file as a blob.
+   *  The server platform is also retrieved.
+   *
+   * @param  wrapperID
+   * @param db2_udb.Database the database object for connecting
+   */
+    public void initFile (String wrapperID, LUWDatabase aDatabase) throws Exception {  //Farnaz
+      String spTrace = null;
+      Thread.dumpStack();
+      wid = wrapperID;
+      try{
+        //Context context = new Context();  //Farnaz
+		ConnectionInfo conInfo = DatabaseConnectionRegistry.getInstance().getConnectionForDatabase(aDatabase);
+
+      	Connection conn = conInfo.getSharedConnection(); //Farnaz
+      	//Connection conn = aDatabase.getConnection(context);  //Farnaz
+        CallableStatement callStmt = conn.prepareCall( "CALL GET_WRAP_CFG_C(?,?,?,?,?)" ); 
+        callStmt.setString(1, wrapperID);
+        String clientLocale = Locale.getDefault().toString();
+        if(clientLocale.length() > 5){
+          //shorten to 5 character representation
+          clientLocale = clientLocale.substring(0,5);
+        } else if(clientLocale.length() < 5){
+          //if locale is other varriant use English
+          clientLocale = "en_US";
+        }
+        callStmt.setString(2, clientLocale);
+        callStmt.registerOutParameter(3, Types.VARCHAR);
+        callStmt.registerOutParameter(4, Types.VARCHAR);
+        callStmt.registerOutParameter(5, Types.INTEGER);
+        callStmt.execute();
+        int returncode =  callStmt.getInt(5);
+        if(returncode != 0){
+          //error returned from SP
+          String msg = new String ("The GET_WRAP_CFG_C stored procedure returned an error. Return  code "+new String(String.valueOf(returncode))+", wrapper id: "+wrapperID+", locale: "+clientLocale);
+            
+          //String msg = MessageFormat.format( WTStringPool.get(WTStringPool.DJ_WCF_SP_ERROR), new Object[]{new String(String.valueOf(returncode)), wrapperID, clientLocale} );
+          String sp_msg = getSPMessage(returncode);
+          Exception err = new Exception( msg +" "+ sp_msg);
+     //     ServerdiscoveryPlugin.getDefault().trace("SP Msg!=0:"+err.toString());  //$NON-NLS-1$
+
+          throw err;
+        }
+        serverPlatform =  callStmt.getString(3);
+        spTrace =  callStmt.getString(4);
+//        System.out.println(spTrace);   //DEBUG
+//        System.out.println("initFile: stored procedure trace: "+spTrace);
+     //   ServerdiscoveryPlugin.getDefault().trace("Stored procedure trace:"+spTrace);  //$NON-NLS-1$
+
+        ResultSet rs = callStmt.getResultSet();
+        
+        int count = 1;
+        InputSource binDTDFile = null;
+        InputSource binXMLFile = null;
+        while( rs.next() ) {
+          if(count == 1){
+            ByteArrayInputStream  bais = new ByteArrayInputStream(rs.getBytes(2));
+            binDTDFile = new InputSource(bais);
+            count++;
+          } else {
+            XMLFileName = rs.getString(1);
+            //XML file BLOB
+            Blob blob = rs.getBlob(2);
+            byte[] b1 =  blob.getBytes(1,(int)blob.length());   
+            ByteArrayInputStream  bais = new ByteArrayInputStream(b1, 0, b1.length);
+            binXMLFile = new InputSource(bais);
+            //properties file BLOB 
+            Blob propertiesFile = rs.getBlob(3);
+            if(propertiesFile != null){
+              byte[] b2 =  propertiesFile.getBytes(1,(int)propertiesFile.length());  
+              ByteArrayInputStream  prop_bais = new ByteArrayInputStream(b2, 0, b2.length);
+              InputStreamReader prop_isr = new InputStreamReader(prop_bais, "UTF-8");
+              textBundle = buildResources(prop_isr);
+              hasPropertiesFile = true;
+            }
+          }
+        }
+
+        //parse XML file and save root node
+        this.parser = new ParseXMLFile(binDTDFile, binXMLFile, rootNodeName);
+        this.rootNode = parser.getRootNode();
+
+        rs.close();
+        callStmt.close();
+        //conn.close();
+       } catch (Exception e){
+       	// ServerdiscoveryPlugin.getDefault().trace("initFile Exception:"+e.toString());  //$NON-NLS-1$
+
+         throw e;
+       }
+    }
+
+
+   /**
+   *  Connects to a database on the db server and runs the
+   *  stored procedure to retrieve all the xml files as blobs.
+   *  The server platform is also retrieved.
+   *
+   * @param db2_udb.Database the database object for connecting
+   * @return Hashtable of WrapperConfigFile objects
+   */
+    public static Hashtable initAllFiles (LUWDatabase aDatabase) throws Exception { //Farnaz
+      Hashtable h = new Hashtable();
+      String spTrace = null;
+      try{ 
+      	
+      	CallableStatement callStmt = null;
+      	String clientLocale = null;
+
+		ConnectionInfo conInfo = DatabaseConnectionRegistry.getInstance().getConnectionForDatabase(aDatabase);
+        Connection conn = conInfo.getSharedConnection(); //Farnaz
+
+      	try {
+        callStmt = conn.prepareCall( "CALL GET_WRAP_CFG_C(?,?,?,?,?)");
+      	} 
+      	catch (SQLException e)
+		{
+      		e.printStackTrace();
+		}
+      	callStmt.setString(1, "");
+        clientLocale = Locale.getDefault().toString();
+        if(clientLocale.length() > 5){
+          //shorten to 5 character representation
+          clientLocale = clientLocale.substring(0,5);
+        } else if(clientLocale.length() < 5){
+          //if locale is other varriant use English
+          clientLocale = "en_US";
+        }
+        callStmt.setString(2, clientLocale);
+        callStmt.registerOutParameter(3, Types.VARCHAR);
+        callStmt.registerOutParameter(4, Types.VARCHAR);
+        callStmt.registerOutParameter(5, Types.INTEGER);
+        callStmt.execute();
+      	
+        int returncode =  callStmt.getInt(5);
+        if(returncode != 0){
+          //error returned from SP
+          String msg = new String ("The GET_WRAP_CFG_C stored procedure returned an error. Return  code "+new String(String.valueOf(returncode))+", locale: "+clientLocale);
+            
+          //String msg = MessageFormat.format( WTStringPool.get(WTStringPool.DJ_WCF_SP_ERROR_ALL), new Object[]{new String(String.valueOf(returncode)), clientLocale} );
+          String sp_msg = getSPMessage(returncode);
+          Exception err = new Exception( msg + " "+ sp_msg);
+        //  ServerdiscoveryPlugin.getDefault().trace("SP Message = "+err.toString());  //$NON-NLS-1$
+
+          throw err;
+        }
+        String tempServerPlatform = callStmt.getString(3);
+        spTrace =  callStmt.getString(4);
+        ResultSet rs = callStmt.getResultSet();
+       int count = 1;
+//        byte[] bDTD = null;
+
+        InputSource binDTDFile = null;
+        InputSource binXMLFile = null;
+        ByteArrayInputStream  baisDTD = null;
+        while( rs.next() ) {
+          if(count == 1){
+            baisDTD = new ByteArrayInputStream(rs.getBytes(2));
+            binDTDFile = new InputSource(baisDTD);
+            count++;
+          } else {
+            WrapperConfigFile wcf = new WrapperConfigFile();
+            wcf.setServerPlatform(tempServerPlatform);
+            String filename = rs.getString(1);
+            wcf.setXMLFileName(filename);
+            wcf.setWrapperID(filename.substring(0, filename.length()-4));  //remove ".xml"
+
+            //xml file BLOB
+            Blob blob = rs.getBlob(2);
+            byte[] b1 =  blob.getBytes(1,(int)blob.length());    
+            ByteArrayInputStream  bais = new ByteArrayInputStream(b1, 0, b1.length);
+            binXMLFile =  new InputSource(bais);
+
+            //properties file BLOB
+            Blob propertiesFile = rs.getBlob(3);
+            if(propertiesFile != null ){
+              byte[] b2 =  propertiesFile.getBytes(1,(int)propertiesFile.length());   
+              ByteArrayInputStream  prop_bais = new ByteArrayInputStream(b2, 0, b2.length);
+              InputStreamReader prop_isr = new InputStreamReader(prop_bais, "UTF-8");
+              Hashtable t = wcf.buildResources(prop_isr);
+              wcf.setTextBundle(t);
+              wcf.setHasTextBundle(true);
+            }
+            try{
+              //parse XML file and save root node
+              wcf.setXMLParser( new ParseXMLFile(binDTDFile, binXMLFile, rootNodeName));
+              wcf.setRootNode( wcf.getXMLParser().getRootNode());
+              //add to hash table
+              h.put( wcf.getWrapperID() , wcf);
+            }catch(SAXException parseError){   
+          	parseError.printStackTrace();
+            }
+          }
+        }
+        rs.close();
+        callStmt.close();
+        //conn.close();
+       } catch (Exception e){
+         throw e;
+       }
+      return h;
+    }
+
+   /**
+   * Passes a XML file, a dtd file, and a peoperties file to parser.
+   * @param  XMLFile
+   * @param  DTDFile
+   * @param  propertiesFile
+   */
+   public void initWithXMLFile(File XMLFile, File DTDFile, File propertiesFile)throws Exception
+   {
+          InputSource binDTDFile = null;
+          InputSource binXMLFile = null;
+
+          FileInputStream   fis_xml = new FileInputStream(XMLFile);
+          InputStreamReader isr_xml = new InputStreamReader (fis_xml, "UTF-8");
+
+          BufferedReader xmlReader = new BufferedReader(isr_xml);
+         // binXMLFile = new InputSource(isr_xml);  // xml file input
+          binXMLFile = new InputSource(xmlReader);  // xml file input
+
+          FileInputStream   fis_dtd = new FileInputStream(DTDFile);
+          InputStreamReader isr_dtd = new InputStreamReader (fis_dtd); //always english
+
+          BufferedReader dtdReader = new BufferedReader(isr_dtd);
+
+        //  binDTDFile = new InputSource(isr_dtd);
+          binDTDFile = new InputSource(dtdReader);
+
+           //parse XML
+           this.parser = new ParseXMLFile(binDTDFile, binXMLFile, rootNodeName);
+           this.rootNode = parser.getRootNode();
+
+           //get strings from properties file
+           if(propertiesFile != null){
+              FileInputStream   fis_prop = new FileInputStream(propertiesFile );
+              InputStreamReader isr_prop = new InputStreamReader (fis_prop, "UTF-8");
+              textBundle = buildResources(isr_prop);
+              hasPropertiesFile = true;
+           }
+    } 
+
+   /**
+   * Returns the XML file name for this wrapper
+   *
+   * @return String of XML file names
+   */
+    public String getXMLFileName () {
+       return XMLFileName;
+    }
+
+   /**
+   * Returns the XML file name for this wrapper
+   *
+   * @parm String of XML file names
+   */
+    public void setXMLFileName (String f) {
+      XMLFileName = f;
+    }
+
+   /**
+   * Returns the ParseXMLFile object
+   *
+   * @return ParseXMLFile
+   */
+    public ParseXMLFile getXMLParser () {
+       return parser;
+    }
+
+   /**
+   * sets the ParseXMLFile object
+   *
+   * @parm String of XML file names
+   */
+    public void setXMLParser (ParseXMLFile p) {
+      parser = p;
+    }
+
+   /**
+   * Returns the PropertyResourceBundle object
+   *
+   * @return PropertyResourceBundle
+   */
+    public boolean hasTextBundle () {
+      return hasPropertiesFile;
+    }
+   /**
+   * Returns the Hashtable object
+   *
+   * @return Hashtable
+   */
+    public Hashtable getTextBundle () {   
+       return textBundle;
+    }
+
+   /**
+   * sets the Hashtable object
+   *
+   * @parm Hashtable
+   */
+    public void setTextBundle (Hashtable p) {
+      textBundle = p;
+    }
+
+
+   /**
+   * sets the text bundle flag
+   *
+   * @parm boolean
+   */
+    public void setHasTextBundle (boolean t) {
+      hasPropertiesFile = t;
+    }
+
+   /**
+   * Returns a DOM root node for navigating the DOM tree. The wrapperid idetifies
+   * the XML file the DOM was build from.
+   *
+   * @return a DOM root node
+   */
+    public Node getRootNode () {
+      return rootNode;
+    }
+
+   /**
+   * Set the DOM root node for navigating the DOM tree.
+   *
+   * @parm a DOM root node
+   */
+    public void setRootNode (Node n) {
+      rootNode = n;
+    }
+
+   /**
+   * Returns an InputSource binary stream with the XML file.
+   * This can be passed directly into the parser.
+   *
+   * @return InputSource bianry stream
+   */
+    public InputSource getBinaryXMLFile () {
+      return parser.getBinaryXMLFile();
+    }
+
+
+   /**
+   * Returns an InputSource binary stream with the DTD file.
+   * This can be passed directly into the parser.
+   *
+   * @return InputSource bianry stream
+   */
+    public InputSource getBinaryDTDFile () {
+      return parser.getBinaryDTDFile();
+    }
+
+ //====================SERVER==========================
+
+   /**
+   *  returns string "windows" | "aix" | "solaris" | "hpux" | "linux" | "unix"
+   *
+   * @return server platform type
+   */
+    public String getServerPlatform () {
+       return serverPlatform;
+    }
+
+   /**
+   *  set server platform to: string "windows" | "aix" | "solaris" | "hpux" | "linux" | "unix"
+   *
+   * @parm server platform type
+   */
+    public void setServerPlatform (String sp) {
+       serverPlatform = sp;
+    }
+
+   /**
+   *  get a list of server type names
+   *
+   * @return Enumeration of server type names
+   */
+    public Enumeration getServerTypes()  throws Exception{
+      if(!serverParsed){
+         getServer();
+       }
+       return servertypenameToVersionlist.keys();
+    }
+
+   /**
+   * Get the server options in a hashtable. The hash key is the option name.
+   * If there are no options an empty hashtable is returned.
+   * <p>Hashtable key is a String - option name
+   * <p>Hashtable value is a GUIOption - option
+   * @return hashtable of GUIOption objects
+   */
+    public Hashtable getServerOptions()  throws Exception{
+       if(!serverParsed){
+         getServer();
+       }
+       return serveroptionnameToOption;
+    }
+
+   /**
+   * Get the server options in a vector.
+   * If there are no options an empty vector is returned.
+   * @return vector of GUIOption objects
+   */
+    public Vector getServerOptionsVector()  throws Exception{
+       if(!serverParsed){
+         getServer();
+       }
+       return vecServeroptionnameToOption;
+    }
+
+   /**
+   * Get the server type versions
+   *
+   * @parm serverType the name of the type of server, returned by  getServerTypes
+   * @return Vector of version numbers as Strings
+   */
+    public Vector getServerVersionsByType(String serverType)  throws Exception{
+       if(!serverParsed){
+         getServer();
+       }
+       Vector v = (Vector)servertypenameToVersionlist.get(serverType);
+       return v;
+    }
+
+
+  /**
+   * Get the server kinds name and description. The Name is the hash key ,
+   * the description is hash value.
+   * <p>Hashtable key is a String - name
+   * <p>Hashtable value is a String - description
+   * @return Hashtable key is server kind name , object is description
+   */
+    public  Hashtable getServerKinds()  throws Exception{
+       if(!serverParsed){
+         getServer();
+       }
+       return serverkindnameToDescription;
+    }
+
+  /**
+   *  Get the wrapper library name for the server's platform
+   * @return String
+   */
+    public  String getLibname()  throws Exception{
+      if(!serverParsed){
+         getServer();
+      }
+       return libname;
+    }
+
+   /**
+   *  Tests if all server types/versions support same data types
+   *
+   * @return true if all server types/versions support same data types
+   */
+    public boolean isAllServerTypesVersionsSameDataTypes()  throws Exception{
+      if(!serverParsed){
+         getServer();
+       }
+       return allServerTypesVersionsSameDataTypes;
+    } 
+
+ //====================WRAPPER===================
+
+
+   /**
+   * Get the Wrapper options in a hashtable. The hash key is the option name.
+   * If there are no options an empty hashtable is returned.
+   * <p>Hashtable key is a String - option name
+   * <p>Hashtable value is a GUIOption - option
+   * @return hashtable of GUIOption objects
+   */
+    public Hashtable getWrapperOptions()  throws Exception{
+       if(!wrapperParsed){
+         getWrapper();
+       }
+       return wrapperoptionnameToOption;
+    }
+
+   /**
+   * Get the Wrapper options in a vector.
+   * <p>Hashtable key is a String - option name
+   * <p>Hashtable value is a GUIOption - option
+   * @return hashtable of GUIOption objects
+   */
+    public Vector getWrapperOptionsVector()  throws Exception{
+       if(!wrapperParsed){
+         getWrapper();
+       }
+       return vecWrapperoptionnameToOption;
+    }
+
+   /**
+   * Get all supported paltforms' libraries in a hashtable. The hash key is the platform.
+   * <p>Hashtable key is a String - platform
+   * <p>Hashtable value is a library name
+   * @return hashtable of all supported platforms' libraries
+   */
+    public Hashtable getLibraries()  throws Exception{
+       if(!wrapperParsed){
+         getWrapper();
+       }
+       return wrapperLibraryToPlatform;
+    } 
+
+   /**
+   *  Get the wrapper id
+   * @return String
+   */
+    public  String getWrapperID()  throws Exception{
+      if(!wrapperParsed){         
+         getWrapper();
+      }
+       return wid;
+    }
+
+   /**
+   *  Set the wrapper id
+   * @return String
+   */
+    public void  setWrapperID(String w)  throws Exception{
+       wid = w;
+    }
+
+    /**
+   *  Get the wrapper description
+   * @return String
+   */
+    public  String getWrapperDescription()  throws Exception{
+      if(!wrapperParsed){
+         getWrapper();
+      }
+       return wrapperDescription;
+    }
+
+    /**
+   *  Test if sample contents is supported for this wrapper.
+   * @return true if supported
+   */
+    public  boolean isSampleContentsAvailable()  throws Exception{
+      if(!wrapperParsed){
+         getWrapper();
+      }
+      return sample_contents;
+    }
+
+     /**
+   * Tests if userid is required for the wrapper.
+   * @return true if required
+   */
+    public boolean isServerUseridRequired()  throws Exception{
+      if(!wrapperParsed){
+         getWrapper();
+      }
+       return userid_required;
+    }
+
+    /**
+   * Tests if userid is required for the server type.
+   * @deprecated This has been replaced with {@link #isServerUseridRequired()}
+   * @parm serverType the name of the type of server, returned by  getServerTypes
+   * @return true if required
+   */
+    public boolean isServerUseridRequired(String serverType)  throws Exception{
+       //DEPRICATED
+       if(!wrapperParsed){
+         getWrapper();
+      }
+       return userid_required;
+    }
+
+  
+   /**
+   * Get all original resource keys in a hashtable. The hash key is an option name.
+   * <p>Hashtable key is a String - option name
+   * <p>Hashtable value is a String - original key
+   * @return hashtable of all original resource keys
+   */
+    public Hashtable getOriginalKeyTable() throws Exception {
+       if(!wrapperParsed){
+         getWrapper();
+       }
+       if(!serverParsed){
+         getServer();
+       }
+      return optionnameToKey;
+    } 
+
+ //====================DISCOVER===================
+   /**
+   * Get the discover options in a hashtable. The hash key is the option name.
+   * If there are no options an empty hashtable is returned.
+   * <p>Hashtable key is a String - option name
+   * <p>Hashtable value is a GUIOption - option
+   * @return hashtable of GUIOption objects
+   */
+    public Hashtable getDiscoverOptions()  throws Exception{
+       if(!discoverParsed){
+         getDiscover();
+       }
+       return discoveroptionnameToOption;
+    }
+
+   /**
+   * Get the discover server options in a hashtable. The hash key is the option name.
+   * If there are no options an empty hashtable is returned.
+   * <p>Hashtable key is a String - option name
+   * <p>Hashtable value is a GUIOption - option
+   * @return hashtable of GUIOption objects
+   */
+    public Hashtable getDiscoverServerOptions()  throws Exception{
+       if(!discoverParsed){
+         getDiscover();
+       }
+       return discoverServerOptions;
+    }
+
+    /**
+   * Get the discover options in a vector in the same order as in the XML file.
+   * If there are no options an empty vector is returned.
+   * <p>Hashtable key is a String - option name
+   * <p>Hashtable value is a GUIOption - option
+   * @return vector of GUIOption objects
+   */
+    public Vector getDiscoverOptionsVector()  throws Exception{
+       if(!discoverParsed){
+         getDiscover();
+       }
+       return vDiscoverOptions;
+    }
+
+    /**
+   * Get the discover server options in a vector in the same order as in the XML file.
+   * If there are no options an empty vector is returned.
+   * @return vector of GUIOption objects
+   */
+    public Vector getDiscoverServerOptionsVector()  throws Exception{
+       if(!discoverParsed){
+         getDiscover();
+       }
+       return vDiscoverServerOptions;
+    }
+
+   /**
+   * Get the discover parameters in a hashtable. The hash key is the parm name.
+   *
+   * <p>Hashtable key is a String - parm name
+   * <p>Hashtable value is a String - parm value
+   * @return hashtable of parm values
+   */
+    public Hashtable getDiscoverParms()  throws Exception{
+
+       if(!discoverParsed){
+         getDiscover();
+       }
+       return discoverparmnameToParmvalue;
+    }
+
+   
+   /**
+   * Get the discover parameters in a vector in the same order as in the XML file.
+   * If there are no parameters an empty vector is returned.
+   * @return vector of parameters
+   */
+    public Vector getDiscoverParmsVector()  throws Exception{
+       if(!discoverParsed){
+         getDiscover();
+       }
+       return vDiscoverParms;
+    }
+
+   /**
+   * Get the discover java class name for this wrapper.
+   *
+   * @return class name
+   */
+    public String getDiscoverClassName()  throws Exception{
+       if(!discoverParsed){
+         getDiscover();
+       }
+       return discoverClassName;
+    }
+
+ //====================USER===================
+
+   /**
+   * get a Hashtable of user Options.  The option name is the hash key.
+   * If there are no options an empty hashtable is returned.
+   * <p>Hashtable key is a String - option name
+   * <p>Hashtable value is a GUIOption - option
+   * @return hashtable of GUIOption objects
+   */
+    public Hashtable getUserOptions()  throws Exception{
+       if(useroptionnameToOption == null){
+         getUser();
+       }
+       return useroptionnameToOption;
+    }
+
+   /**
+   * Get the user mapping type. Returns static string
+   *  USER_MAPPING_NOTSUPPORT, USER_MAPPING_OPTIONAL, USER_MAPPING_REQUIRED
+   * @return string for user mapping type
+   */
+
+    public String getUsersMappingType()  throws Exception{
+       if(!userParsed){
+         getUser();
+       }
+       return usersMappingType;
+    }
+
+ //===============================Private methods======================================
+    /**
+   * parse wrapper data
+   */
+    private void getWrapper()  throws Exception{
+      // if wid is not set from initFile(), then get it 
+      if ( wid == null )
+           wid = findAttribute( rootNode, "wrapper_id", "" ); 
+      wrapperLibraryToPlatform = new Hashtable();             
+      optionnameToKey = new Hashtable();                      
+      //set sample contents
+      String valueSampleConents = findAttribute( rootNode, "sample_contents", "" );
+      if(valueSampleConents.equals(ATTRIBUTE_VALUE_YES)){
+         sample_contents = true;
+      }
+      //set userid required
+      String valueUseridRequired = findAttribute( rootNode, "userid_required", "" );
+      if(valueUseridRequired.equals(ATTRIBUTE_VALUE_YES)){
+         userid_required = true;
+      }
+
+      //check if server is a UNIX variant
+      if( serverPlatform != null ) 
+      {
+        if(serverPlatform.equals(SERVER_PLATFORM_AIX) ||
+           serverPlatform.equals(SERVER_PLATFORM_SOLARIS) ||
+           serverPlatform.equals(SERVER_PLATFORM_UNIX) ||
+           serverPlatform.equals(SERVER_PLATFORM_LINUX) ||
+           serverPlatform.equals(SERVER_PLATFORM_HPUX) ){
+           fUnixServer = true;       
+        }
+      } // end if( serverPlatform != null )
+
+      Node child = rootNode.getFirstChild();
+      while( child != null ) {
+        if( "description".equals( child.getNodeName() ) ) {
+           Node tNode = child.getFirstChild();
+           if( tNode != null ) {
+             //set wrapper  description
+             wrapperDescription = tNode.getNodeValue().trim();
+             if (optionnameToKey!=null)
+                 optionnameToKey.put("WRAPPER_DESC",wrapperDescription); 
+             //check if wrapper has text bundle and load description from properties file
+             if(hasTextBundle() && wrapperDescription.length() > 0){
+               String textDescription = getResource(wrapperDescription);
+               if(textDescription.length() > 0){
+                  wrapperDescription = textDescription;
+               }
+             }
+
+           }
+        } else if( "wrapper_options".equals( child.getNodeName() ) ) {
+           //set wrapper options
+           wrapperoptionnameToOption = getOptions(child);
+           vecWrapperoptionnameToOption = getOptionsVector(child);
+        } else if( "libraries".equals( child.getNodeName() ) ) {
+           //set library  name
+          if( serverPlatform != null ) 
+          {
+           if(serverPlatform.equals(SERVER_PLATFORM_AIX)){
+             libname = findAttribute( child, SERVER_PLATFORM_AIX, "" );
+           } else if(serverPlatform.equals(SERVER_PLATFORM_WINDOWS)){
+             libname = findAttribute( child, SERVER_PLATFORM_WINDOWS, "" );
+           } else if(serverPlatform.equals(SERVER_PLATFORM_SOLARIS)){
+             libname = findAttribute( child, SERVER_PLATFORM_SOLARIS, "" );
+           } else if(serverPlatform.equals(SERVER_PLATFORM_LINUX)){
+             libname = findAttribute( child, SERVER_PLATFORM_LINUX, "" );
+           } else if(serverPlatform.equals(SERVER_PLATFORM_HPUX)){
+             libname = findAttribute( child, SERVER_PLATFORM_HPUX, "" );
+           } else if(serverPlatform.equals(SERVER_PLATFORM_UNIX)){
+             libname = findAttribute( child, SERVER_PLATFORM_UNIX, "" );
+           } else {
+             libname = ""; //empty if platform not supported
+           }
+          } // end if( serverPlatform != null )
+
+          
+          // build hashtable for all supported libraries/platforms
+          libname = findAttribute( child, SERVER_PLATFORM_WINDOWS, "" );
+          if ( libname.length()>0 )
+            wrapperLibraryToPlatform.put(SERVER_PLATFORM_WINDOWS, libname);
+          libname = findAttribute( child, SERVER_PLATFORM_AIX, "" );
+          if ( libname.length()>0 )
+              wrapperLibraryToPlatform.put(SERVER_PLATFORM_AIX, libname);
+          libname = findAttribute( child, SERVER_PLATFORM_SOLARIS, "" );
+          if ( libname.length()>0 )
+              wrapperLibraryToPlatform.put(SERVER_PLATFORM_SOLARIS, libname);
+          libname = findAttribute( child, SERVER_PLATFORM_HPUX, "" );
+          if ( libname.length()>0 )
+              wrapperLibraryToPlatform.put(SERVER_PLATFORM_HPUX, libname);
+          libname = findAttribute( child, SERVER_PLATFORM_UNIX, "" );
+          if ( libname.length()>0 )
+              wrapperLibraryToPlatform.put(SERVER_PLATFORM_UNIX, libname);
+          libname = findAttribute( child, SERVER_PLATFORM_LINUX, "" );
+          if ( libname.length()>0 )
+              wrapperLibraryToPlatform.put(SERVER_PLATFORM_LINUX, libname);
+         
+
+//           if (libname.length() == 0){
+             //error no library name in the XML file
+//             String msg = MessageFormat.format( DJStringPool.get(DJStringPool.DJ_WCF_LIBNAME_MISSING), new Object[]{wid, serverPlatform} );
+//             Exception err = new Exception( msg);
+//             CommonTrace.exit(trace);
+//             throw err;
+//           }
+        }
+        child = child.getNextSibling();
+      }
+      if(wrapperoptionnameToOption == null){
+        wrapperoptionnameToOption = new Hashtable(); //in case there are no options
+      }
+      if(vecWrapperoptionnameToOption == null){      
+        vecWrapperoptionnameToOption = new Vector(); //in case there are no options
+      }
+
+      wrapperParsed = true;
+    }
+
+
+   /**
+   * parse server and serverkind data
+   */
+    private void getServer()  throws Exception{
+      //check if server is a UNIX variant
+      if ( serverPlatform!=null )  
+      {
+        if(serverPlatform.equals(SERVER_PLATFORM_AIX) ||
+           serverPlatform.equals(SERVER_PLATFORM_SOLARIS) ||
+           serverPlatform.equals(SERVER_PLATFORM_UNIX) ||
+           serverPlatform.equals(SERVER_PLATFORM_LINUX) ||
+           serverPlatform.equals(SERVER_PLATFORM_HPUX) ){
+           fUnixServer = true;
+        }
+      }
+
+      //create non-option hashtables
+      serverkindnameToDescription = new Hashtable();
+      servertypenameToVersionlist = new Hashtable();
+      servertypenameandversionToDatatype = new Hashtable();
+
+      Node child = rootNode.getFirstChild();
+      while( child != null ) {
+        if( "server_kind".equals( child.getNodeName() ) ) {
+          String name = findAttribute( child, "display_name", "" );
+          if (optionnameToKey!=null)
+              optionnameToKey.put("SERVER_DISPLAYNAME", name);  
+
+          //check if wrapper has text bundle and load display_name from properties file
+          if(hasTextBundle() && name.length() > 0){
+             String textDisplayName = getResource(name);
+             if(textDisplayName.length() > 0){
+                name = textDisplayName;
+             }
+          }
+
+          Node descNode = child.getFirstChild();
+          String desc = "";
+          while( descNode != null ) {
+            if( "description".equals( descNode.getNodeName() ) ) {    //only one of these nodes
+              Node tNode = descNode.getFirstChild();
+              if( tNode != null ) {
+               desc = tNode.getNodeValue().trim();
+                //check if wrapper has text bundle and load description from properties file
+               if(hasTextBundle() && desc.length() > 0){
+                  String textDescription = getResource(desc);
+                  if(textDescription.length() > 0){
+                    desc = textDescription;
+                  }
+                }
+              }
+            }
+            descNode = descNode.getNextSibling();
+          }
+          if(desc == null){
+            serverkindnameToDescription.put(name, "");
+          } else {
+          //set server kinds and descriptions
+            serverkindnameToDescription.put(name, desc);
+          }
+        } else if("libraries".equals( child.getNodeName() )){
+           //set library  name
+          if (serverPlatform!=null)  
+          {
+           if(serverPlatform.equals(SERVER_PLATFORM_AIX)){
+             libname = findAttribute( child, SERVER_PLATFORM_AIX, "" );
+           } else if(serverPlatform.equals(SERVER_PLATFORM_WINDOWS)){
+             libname = findAttribute( child, SERVER_PLATFORM_WINDOWS, "" );
+           } else if(serverPlatform.equals(SERVER_PLATFORM_SOLARIS)){
+             libname = findAttribute( child, SERVER_PLATFORM_SOLARIS, "" );
+           } else if(serverPlatform.equals(SERVER_PLATFORM_LINUX)){
+             libname = findAttribute( child, SERVER_PLATFORM_LINUX, "" );
+           } else if(serverPlatform.equals(SERVER_PLATFORM_HPUX)){
+             libname = findAttribute( child, SERVER_PLATFORM_HPUX, "" );
+           } else if(serverPlatform.equals(SERVER_PLATFORM_UNIX)){
+             libname = findAttribute( child, SERVER_PLATFORM_UNIX, "" );
+           } else {
+             libname = ""; //empty means not supported on this platform
+           }
+          }
+        } else if("servers".equals( child.getNodeName() )){
+          Node typesNode = child.getFirstChild();
+          while( typesNode != null ) {
+            if( "types".equals( typesNode.getNodeName() ) ) {
+              Node typeNode = typesNode.getFirstChild();
+              while( typeNode != null ) {
+                if( "type".equals( typeNode.getNodeName() ) ) {
+                  Vector vValues = new Vector();   //new vector for each type
+                  String typeName = findAttribute( typeNode, "name", "" );
+                  Node versionNode = typeNode.getFirstChild();
+                  while( versionNode != null ) {
+                    if( "version".equals( versionNode.getNodeName() ) ) {
+                      String versionValue = findAttribute( versionNode, "version_number", "" );
+                      if(versionValue.length() > 0){
+                         vValues.add( versionValue );
+                      }
+                      //get server + version specific data types
+                      Node datatypeNode = versionNode.getFirstChild(); 
+                      while( datatypeNode != null ) {
+                        if( "column_datatypes".equals( datatypeNode.getNodeName() ) ) {
+                           allServerTypesVersionsSameDataTypes = false;  
+                           Vector vVersionDataTypes = getDatatypes(datatypeNode);
+                           //add data type if version has a value
+                           if(versionValue.length() > 0){
+                             //hash table key is servertype + version
+                             servertypenameandversionToDatatype.put((typeName + versionValue), vVersionDataTypes);
+                           }
+                        }
+                        datatypeNode = datatypeNode.getNextSibling();
+                      }
+                    }
+                    //get server specific data types
+                    if( "column_datatypes".equals( versionNode.getNodeName() ) ) {  
+                        allServerTypesVersionsSameDataTypes = false;  
+                        Vector vServerDataTypes = getDatatypes(versionNode);
+                        //hash table key is servertype
+                        servertypenameandversionToDatatype.put(typeName, vServerDataTypes);
+                    }
+                    versionNode = versionNode.getNextSibling();
+                  }
+                  servertypenameToVersionlist.put(typeName , vValues);
+                }
+                typeNode = typeNode.getNextSibling();
+              }
+            } else if( "server_options".equals( typesNode.getNodeName() ) ){
+               //set server options
+               serveroptionnameToOption = getOptions(typesNode);
+               vecServeroptionnameToOption = getOptionsVector(typesNode);  
+            }
+            typesNode = typesNode.getNextSibling();
+          }
+        }
+        child = child.getNextSibling();
+      }
+      if(serveroptionnameToOption == null){
+        serveroptionnameToOption = new Hashtable(); //in case there are no options
+      }
+      if(vecServeroptionnameToOption == null){    
+        vecServeroptionnameToOption = new Vector(); //in case there are no options
+      }
+
+      serverParsed = true;
+//      if (libname.length() == 0){
+        //error no library name in the XML file
+        //if this happens it is an install error
+        //the XML file should not be installed on a server platform
+        //that does not support the wrapper
+//        String msg = MessageFormat.format( DJStringPool.get(DJStringPool.DJ_WCF_LIBNAME_MISSING), new Object[]{wid, serverPlatform} );
+//        Exception err = new Exception( msg);
+//        CommonTrace.exit(trace);
+//        throw err;
+//      }
+    }
+
+   /**
+   * parse the discover data from the xml file.
+   *
+   */
+    private void getDiscover()  throws Exception{
+      discoverparmnameToParmvalue = new Hashtable();
+      vDiscoverOptions = new Vector();
+      vDiscoverParms = new Vector(); 
+      vDiscoverServerOptions = new Vector();
+//      vGenericFunctions = new Vector();
+      Node child = rootNode.getFirstChild();
+      while( child != null ) {
+        if( "discover".equals( child.getNodeName() ) ) {
+          //get class name
+          discoverClassName = findAttribute( child, "class_name","" );
+          
+          //in the xml config file we have this location: com.ibm.db2.tools.wrapperTools.extensions.RelationalDiscovery
+          //the class in eclipse is in tis location:com.ibm.datatools.metadata.admintooling.discovery.RelationalDiscovery
+          //so, have to hack!
+          //ODBC Class for server discovery is the same as relational discovery. So, replace that with the RelationalDiscovery
+          //If we ever decide to support nickname discovery for ODBC we should migrate OdbcDiscovery class to this plugin
+          //The same issue for Teradata
+          int location = discoverClassName.lastIndexOf(".");
+          String discoveryClass = discoverClassName.substring(location);
+          if(discoveryClass.equalsIgnoreCase(".OdbcDiscovery") || discoveryClass.equalsIgnoreCase(".TeradataDiscovery")) {
+          	discoveryClass = new String(".RelationalDiscovery");
+          }
+          discoverClassName = new String("com.ibm.datatools.db2.luw.serverdiscovery"+discoveryClass);
+        //  ServerdiscoveryPlugin.getDefault().trace("Discovery Class Name="+discoverClassName);  //$NON-NLS-1$
+
+		  Node propertyNode = child.getFirstChild();
+          while( propertyNode != null ) {
+            if( "property".equals( propertyNode.getNodeName() ) ) {
+               String propName =  findAttribute( propertyNode, "name","" );
+               Node tNode = propertyNode.getFirstChild();
+               if( tNode != null ) {
+                 //set parms, parm value is a String
+                 discoverparmnameToParmvalue.put(propName, tNode.getNodeValue().trim());
+                 Object[] aParm = new Object[2];         
+                 aParm[0] = propName;                    
+                 aParm[1] = tNode.getNodeValue().trim(); 
+                 vDiscoverParms.add(aParm);            
+               }
+            } else if( "generic_gui".equals( propertyNode.getNodeName() ) ) {
+              //get options
+              discoveroptionnameToOption = getOptions(propertyNode);
+            } else if( "serverObject_gui".equals( propertyNode.getNodeName() ) ) {
+              //get options
+              discoverServerOptions = getOptions(propertyNode);
+            }
+            propertyNode = propertyNode.getNextSibling();
+          }
+        }
+        child = child.getNextSibling();
+      }
+      //if discover object is not in XML file then make sure there is an empty hashtable
+      if(discoveroptionnameToOption == null){
+         discoveroptionnameToOption = new Hashtable();
+      }
+      if(discoverServerOptions == null){
+         discoverServerOptions = new Hashtable();
+      }
+      discoverParsed = true;
+    }
+
+
+   /**
+   * parse user options
+   */
+    private void getUser()  throws Exception{
+      Node child = rootNode.getFirstChild();
+      while( child != null ) {
+        if( "users".equals( child.getNodeName() ) ) {
+          usersMappingType = findAttribute( child, "user_mapping","" );
+          Node userOpNode = child.getFirstChild();
+          while( userOpNode != null ) {
+            if( "user_options".equals( userOpNode.getNodeName() ) ) {
+              //set options
+              useroptionnameToOption = getOptions(userOpNode);
+            }
+            userOpNode = userOpNode.getNextSibling();
+          }
+        }
+        child = child.getNextSibling();
+      }
+      if(useroptionnameToOption == null){
+        useroptionnameToOption = new Hashtable(); //in case there are no options
+      }
+      userParsed = true;
+    }
+
+
+   /**
+   *
+   *
+   * @param  fileName
+   */
+//    private void setFileName( String name)  throws Exception {
+//       XMLFileName = name;
+//    }
+
+ /**
+  * Find the specified attribute in the specified node and return its value.
+  * If the attribute is not found, the default value is returned.
+  *
+  * @param  node  The node that contains the attribute.
+  * @param  key  The attribute name.
+  * @param  defV  The default value to return if the attribute is not found.
+  * @return a String that contains the attribute value if the attribute was
+  *     found or the default value if the attribute was not found.
+  */
+  private String findAttribute( Node node, String key, String defV ) {
+    NamedNodeMap nnm = node.getAttributes();
+    if( nnm == null ) {
+      return defV;
+    }
+    for( int i = 0; i < nnm.getLength(); i++ ) {
+      Node attr = nnm.item( i );
+      if( key.equals( attr.getNodeName() ) ) {
+        return attr.getNodeValue().trim();
+      }
+    }
+    return defV;
+  }
+
+ /**
+  * Get a hashtable of GUIOption objects. If there are no options an empty hashtable
+  * is returned.
+  * @param  node  The parent node that contains the options element
+  * @return Hashtable with GuiOption objects
+  *
+  */
+  private Hashtable getOptions( Node node) throws Exception {
+    Hashtable h = new Hashtable();
+    try {
+      Node option = node.getFirstChild();
+      while( option != null ) {
+        if( "option".equals( option.getNodeName() ) ) {
+           String optPlatform = findAttribute( option, "platform", "" );
+
+           //if wrong platform skip this option
+           if(optPlatform.equals(OPTION_PLATFORM_ALL) ||
+              optPlatform.equals(serverPlatform) ||
+              (optPlatform.equals(OPTION_PLATFORM_ALLUNIX) && fUnixServer )){
+
+             String optName = findAttribute( option, "name", "" );
+             String optDescription = findAttribute( option, "description", "" );
+             String optRequired = findAttribute( option, "required", "" );
+             boolean fRequired =false;
+             if(optRequired.equals(ATTRIBUTE_VALUE_YES)){
+                fRequired = true;
+             }
+             String optEditable = findAttribute( option, "editable", "" );
+             boolean fEdit =false;
+             if(optEditable.equals(ATTRIBUTE_VALUE_YES)){
+                fEdit = true;
+             }
+             String optDefault = findAttribute( option, "default", "" );
+             String optHints = findAttribute( option, "hints", "" );
+             String optAlter = findAttribute( option, "alter", "" );
+             boolean fAlter =false;
+             if(optAlter.equals(ATTRIBUTE_VALUE_YES)){
+                fAlter = true;
+             }
+             Vector vValues = new Vector();
+             //get the value object
+             Node values = option.getFirstChild();
+             boolean fMultivalue =false;
+             String optDelimiter = "";
+             while( values != null) {
+               if( "values".equals( values.getNodeName() ) ) {
+                 //get multivalue
+                 String optMultivalue = findAttribute( values, "multivalue", "" );
+                 if(optMultivalue.equals(ATTRIBUTE_VALUE_YES)){
+                   fMultivalue = true;
+                 }
+                 //get delimiter
+                 optDelimiter = findAttribute( option, "delimiter", "" );
+                 //get the settings
+                 Node setting = values.getFirstChild();
+                 while( setting != null) {
+                   if( "setting".equals( setting.getNodeName() ) ) {
+                     Node settingValue = setting.getFirstChild();
+                     if(settingValue != null){
+                       String optSetting = settingValue.getNodeValue().trim();
+                       vValues.add( optSetting );
+                     }
+                   }
+                   setting = setting.getNextSibling();
+                 }
+               }
+               values = values.getNextSibling();
+             }
+
+             if ( optHints.length() > 0 )       
+             {
+                if (optionnameToKey!=null)
+                    optionnameToKey.put(optName+"HINT", optHints);
+             }
+             if ( optDescription.length() > 0 )  
+             {
+                if (optionnameToKey!=null)
+                    optionnameToKey.put(optName+"DESC", optDescription);
+             }
+
+             //check for description and hints from the properties file
+             if(hasTextBundle()){                                    
+               if(optHints.length() > 0){
+                 String textHints =  getResource(optHints);
+                 if(textHints.length() > 0){
+                    optHints = textHints;
+                 }
+               }
+               if(optDescription.length() > 0){
+                 String textDescription = getResource(optDescription);
+                 if(textDescription.length() > 0){
+                    optDescription = textDescription;
+                 }
+               }
+             }
+             //if the option has no values then the values vector is empty
+             GUIOption op = new GUIOption(optName, vValues, optDefault, fEdit,
+                                          fRequired, fMultivalue, fAlter,
+                                          optDelimiter, optPlatform, optHints,
+                                          optDescription);
+             if(!h.containsKey(optName)){ 
+               h.put(optName, op);
+             } else {
+//             	System.out.println("getOptions: Duplicate option '" + optName +"' not added to option hash table.");
+             //	ServerdiscoveryPlugin.getDefault().trace("Duplicate option '"+optName +"' not added to option hash table.");  //$NON-NLS-1$
+
+             }
+             //if this is discovery options then also add to vector
+             if("generic_gui".equals( node.getNodeName()) ){
+                vDiscoverOptions.add(op);
+             }
+             if("serverObject_gui".equals( node.getNodeName()) ){
+                vDiscoverServerOptions.add(op);
+             }
+           }
+         }
+         option = option.getNextSibling();
+      }
+    }catch( Exception e ){
+      throw e;
+    }
+    return h;
+  }
+
+ /**
+  * Get a vector of GUIOption objects. If there are no options an empty vector
+  * is returned.
+  * @param  node  The parent node that contains the options element
+  * @return Vector with GuiOption objects
+  *
+  */
+  private Vector getOptionsVector( Node node) throws Exception {
+    Vector h = new Vector();
+    try {
+      Node option = node.getFirstChild();
+      while( option != null ) {
+        if( "option".equals( option.getNodeName() ) ) { // get all options
+             String optPlatform = findAttribute( option, "platform", "" );
+             String optName = findAttribute( option, "name", "" );
+             String optDescription = findAttribute( option, "description", "" );
+             String optRequired = findAttribute( option, "required", "" );
+             boolean fRequired =false;
+             if(optRequired.equals(ATTRIBUTE_VALUE_YES)){
+                fRequired = true;
+             }
+             String optEditable = findAttribute( option, "editable", "" );
+             boolean fEdit =false;
+             if(optEditable.equals(ATTRIBUTE_VALUE_YES)){
+                fEdit = true;
+             }
+             String optDefault = findAttribute( option, "default", "" );
+             String optHints = findAttribute( option, "hints", "" );
+             String optAlter = findAttribute( option, "alter", "" );
+             boolean fAlter =false;
+             if(optAlter.equals(ATTRIBUTE_VALUE_YES)){
+                fAlter = true;
+             }
+             Vector vValues = new Vector();
+             //get the value object
+             Node values = option.getFirstChild();
+             boolean fMultivalue =false;
+             String optDelimiter = "";
+             while( values != null) {
+               if( "values".equals( values.getNodeName() ) ) {
+                 //get multivalue
+                 String optMultivalue = findAttribute( values, "multivalue", "" );
+                 if(optMultivalue.equals(ATTRIBUTE_VALUE_YES)){
+                   fMultivalue = true;
+                 }
+                 //get delimiter
+                 optDelimiter = findAttribute( option, "delimiter", "" );
+                 //get the settings
+                 Node setting = values.getFirstChild();
+                 while( setting != null) {
+                   if( "setting".equals( setting.getNodeName() ) ) {
+                     Node settingValue = setting.getFirstChild();
+                     if(settingValue != null){
+                       String optSetting = settingValue.getNodeValue().trim();
+                       vValues.add( optSetting );
+                     }
+                   }
+                   setting = setting.getNextSibling();
+                 }
+               }
+               values = values.getNextSibling();
+             }
+
+             if ( optHints.length() > 0 )        
+             {
+                if (optionnameToKey!=null)
+                    optionnameToKey.put(optName+"HINT", optHints);
+             }
+             if ( optDescription.length() > 0 )  
+             {
+                if (optionnameToKey!=null)
+                    optionnameToKey.put(optName+"DESC", optDescription);
+             }
+
+             //check for description and hints from the properties file
+             if(hasTextBundle()){                                                   
+             	if(optHints.length() > 0){
+                 String textHints =  getResource(optHints);
+                 if(textHints.length() > 0){
+                    optHints = textHints;
+                 }
+               }
+               if(optDescription.length() > 0){
+                 String textDescription = getResource(optDescription);
+                 if(textDescription.length() > 0){
+                    optDescription = textDescription;
+                 }
+               }
+             }
+             //if the option has no values then the values vector is empty
+             GUIOption op = new GUIOption(optName, vValues, optDefault, fEdit,
+                                          fRequired, fMultivalue, fAlter,
+                                          optDelimiter, optPlatform, optHints,
+                                          optDescription);
+             h.add(op);
+             //if this is discovery options then also add to vector
+             if("generic_gui".equals( node.getNodeName()) ){
+                vDiscoverOptions.add(op);
+             }
+             if("serverObject_gui".equals( node.getNodeName()) ){
+                vDiscoverServerOptions.add(op);
+             }
+         } // end if ( "option".equals( option.getNodeName() ) )
+         option = option.getNextSibling();
+      } // end while
+    }catch( Exception e ){
+      throw e;
+    }
+    return h;
+  }
+
+/**
+  * Get the datatype values under the column_datatypes node.
+  * @param  node  The parent node that contains the datatype element
+  * @return Vector with String objects with datatype values
+  *
+  */
+  private Vector getDatatypes( Node node) throws Exception {  
+    Vector v = new Vector();
+    try {
+       Node datatypeNode = node.getFirstChild();
+       while( datatypeNode != null ) {
+         if( "datatype".equals( datatypeNode.getNodeName() ) ) {
+           Node tNode = datatypeNode.getFirstChild();
+           if( tNode != null ) {
+             //set datatype
+             v.add(tNode.getNodeValue().trim());
+           }
+         }
+         datatypeNode = datatypeNode.getNextSibling();
+       }
+    }catch( Exception e ){
+      throw e;
+    }
+    return v;
+  }
+
+ /**
+  * Get a hashtable of GUIOption objects. If there are no options an empty hashtable
+  * is returned.
+  * @param  node  The parent node that contains the options element
+  * @return Hashtable with GuiOption objects
+  *
+  */
+  /*static*/ private Hashtable  buildResources(InputStreamReader prop_isr) throws Exception {  
+    Hashtable h = new Hashtable();
+    BufferedReader br =  new BufferedReader( prop_isr);
+    boolean fContinue = false;
+    String key  = "";     
+    String value = "";
+    String line = br.readLine();
+    while(line != null){
+       if(line.length()>0){
+          line = line.trim(); //remove leading and trailing blanks 
+          if(!line.startsWith("#")){  //skip the comment lines that start with #
+            if(!fContinue){
+              int index = line.indexOf("=");
+              if(index != -1){
+                 key = new String(line.substring(0, index));
+                 key = key.trim(); 
+                 value = new String(line.substring(index+1));
+                 value = value.trim(); 
+              }
+            } else {
+              value += line;
+            }
+            if(value.endsWith("\\")){ //continuation character escaped
+               fContinue = true;
+               int index = value.lastIndexOf("\\");
+               value = value.substring(0, index);
+            } else {
+               if(key.length() > 0){
+                 if(!h.containsKey(key)){ 
+                   h.put(key, value);
+                 } else {
+//                 	System.out.println("buildResources: Duplicate key '" + key +"' not added to property hash table." );
+                 //	ServerdiscoveryPlugin.getDefault().trace("Duplicate key '" + key +"' not added to property hash table.");  //$NON-NLS-1$
+
+                 }
+               } else{ 
+//               	System.out.println("buildResources: Invalid properties file. No Key was found for strings." );
+               //	ServerdiscoveryPlugin.getDefault().trace("Invalid properties file. No Key was found for strings.");  //$NON-NLS-1$
+
+               }
+               fContinue = false;
+            }
+          }
+       }
+       line = br.readLine();  //get the next line
+    }
+    return h;
+  }
+
+  private String getResource(String key) {  
+    if(textBundle.containsKey(key)){  
+      String value = (String)textBundle.get(key);
+      return value;
+    }else{
+      // System.out.println("Key '"+ key + "' not found in text bundle." );
+      return "";
+    }
+  }
+
+  static private String getSPMessage(int rc) {
+    String sp_msg = "";
+    if( rc == 40 ){
+        sp_msg = new String("The DB2 install path is invalid.");
+    }else if(rc == 41){
+    	sp_msg = new String("The wrapper XML file path is invalid.");
+    }else if(rc == 42){
+    	sp_msg = new String("The wrapper XML files do not exist or cannot be read. Make sure the files have public read permission.");
+    }else if(rc == 43){
+    	sp_msg = new String("Cannot find the default English locale directory.");
+    }else if(rc == 44){
+    	sp_msg = new String("No XML files were found in directory");
+    }else if(rc == 45){
+    	sp_msg = new String("A memory error occurred while executing the stored procedure GET_WRAP_CFG_C.");
+    }else if(rc == 46){
+    	sp_msg = new String("Cannot open or read wrapper.dtd file.");
+    }else if(rc == 47){
+    	sp_msg = new String("No XML files were found in directory.");
+    }else if(rc == 48){
+    	sp_msg = new String("No properties files were found in directory.");
+    }else if(rc == 49){
+    	sp_msg = new String("The wrapper properties files cannot be read. Make sure the files have public read permission.");
+    } else {
+      return "";
+    }
+    return sp_msg;
+ }
+
+   /**
+   * Get the CommonOption class.
+   *
+   * @return CommonOptions  The CommonOptions class .
+   */
+    public CommonOptions getCommonOptions()  throws Exception {
+       if(!commonOptionsParsed){
+         parseCommonOptions();
+       }
+       return commonOptions;
+    }
+
+   /**
+   * parse the common_options element from the xml file.
+   *
+   */
+    private void parseCommonOptions()  throws Exception{
+      Vector messages = new Vector();
+      Vector configVars = new Vector();
+
+      Node child = rootNode.getFirstChild();
+      while( child != null ) {                                           // Loop through to find the common_options element
+        if( "common_options".equals( child.getNodeName() ) ) {           // Find it?
+          Node node2 = child.getFirstChild();                            // ..yes
+          while( node2 != null ) {
+            if( "config_variable".equals( node2.getNodeName() ) ) {      // Is the sub element a config_variable element?
+               String type =  findAttribute( node2, "type","" );         // ..yes, get the type attribute
+               String location =  findAttribute( node2, "location","" ); // and location attribute too
+               Hashtable ht = getOptions(node2);                         // Get the option element (should only be 1)
+//               GUIOption guiOption = null;
+               if (ht != null && ht.size() == 1 && type != null && location != null) { // If everything looks valid
+//                 Enumeration _enum = ht.elements();                                     // ..get the one option element
+//                 guiOption = (GUIOption) _enum.nextElement();
+                 //configVars.add( new ConfigVariable(type, location, guiOption) );  //Farnaz      // ..and put everything in the list
+               } else {
+//               	System.out.println("parseCommonOptions: Invalid data in config_variable element.  Type " + type + " location " + location + " hashtable " + ht);
+              // 	ServerdiscoveryPlugin.getDefault().trace("Invalid data in config_variable element.  Type " + type + " location " + location + " hashtable " + ht);  //$NON-NLS-1$
+
+               }
+            } else if( "message".equals( node2.getNodeName() ) ) {        // Is it the message element?
+               String platform =  findAttribute( node2, "platform","" );  // ..yes, get platform attribute
+               String msgText = null;
+               Node msgTextNode = node2.getFirstChild();                  // The message text is in a child node
+               if (msgTextNode != null) {
+                 msgText = msgTextNode.getNodeValue();
+               };
+               if (msgText != null && platform != null) {                 // If everything looks valid
+                 messages.add( new ConfigMessage(msgText, platform) ) ;   // ..then save it in the list
+               } else {
+//               	System.out.println("parseCommonOptions: Invalid data in <message> element.  Platform " + platform + " msgText " + msgText);
+              // 	ServerdiscoveryPlugin.getDefault().trace("Invalid data in <message> element.  Platform " + platform + " msgText " + msgText);  //$NON-NLS-1$
+               };
+            }
+            node2 = node2.getNextSibling();
+          }
+        }
+        child = child.getNextSibling();
+      }
+
+      commonOptions = new CommonOptions(messages, configVars);
+      commonOptionsParsed = true;
+    }
+
+ }  //end class
+
+
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/WrapperConfigManager.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/WrapperConfigManager.java
new file mode 100644
index 0000000..5623340
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/catalog/util/WrapperConfigManager.java
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.catalog.util;
+
+import java.util.Hashtable;
+
+//import com.ibm.datatools.db2.luw.serverdiscovery.WrapperConfigFile;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabaseImpl;
+
+public class WrapperConfigManager {
+
+   private ServerKindsConfig skc;
+   private Hashtable wrapperConfigHT;
+   private WrapperConfigFile wcf;
+   private static LUWDatabase database; 
+
+   /*# private WrapperConfigManager _objectTypeManager; */
+  private static WrapperConfigManager instance = null;
+
+
+  public WrapperConfigManager(LUWDatabaseImpl _database) throws Exception {
+    try {
+      skc = new ServerKindsConfig();
+      skc.init(_database);
+    }
+    catch (Exception e) { throw e; }
+      wrapperConfigHT = new Hashtable();
+    }
+
+  /**
+   * Gets the singleton instance of the ObjectTypeManager.
+   * @return The singleton ObjectTypeManager.
+   * @exception ICMAPIException
+   * @exception ICMSQLException
+   */
+   public static synchronized WrapperConfigManager getInstance (LUWDatabaseImpl _database) throws Exception {
+    try{
+		if (instance == null) {
+			database = _database;
+            instance = new WrapperConfigManager(_database);
+		}
+		else if(!database.getName().equals(_database.getName())){
+		    database = _database;
+			instance = new WrapperConfigManager(_database);
+		}
+     }catch (Exception e) {
+		 database = null;
+		 throw e;
+	  }
+    return (WrapperConfigManager)instance;
+  }
+
+
+  //method to return the wrapper config file for a given wrapper library
+  //initialize the ServerKindsConfig file once,
+  //if serverKinds had already been initialized, search the wrapper config hashtable and return the wrapperconfig file for a given wrapper (library)
+  //if the hashtable doesn't contain that library key, create and init the wrapper config and put it in the hash table for next time
+  public WrapperConfigFile getWrapperConfigFile(String libName) throws Exception { 
+
+    try {
+
+       if(!wrapperConfigHT.containsKey(libName))
+          {
+             String id = skc.getWrapperID(libName);
+             wcf = new WrapperConfigFile();
+             wcf.initFile(id, database);
+             wrapperConfigHT.put(libName,wcf);
+             return wcf;
+          }
+       else {
+             return (WrapperConfigFile)wrapperConfigHT.get(libName);
+          }
+       }
+     catch (Exception e) {
+        throw e;
+     }
+   }
+
+   public ServerKindsConfig getServerKindsConfig() {
+      return skc;
+   }
+
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWBufferPoolContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWBufferPoolContainmentProvider.java
new file mode 100644
index 0000000..ee73109
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWBufferPoolContainmentProvider.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.containment;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWBufferPoolContainmentProvider extends AbstractContainmentProvider{
+	public EObject getContainer(EObject obj) {
+		return ((LUWBufferPool) obj).getDatabase();
+	}
+
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+		return LUWPackage.eINSTANCE.getLUWDatabase_Bufferpools();
+	}
+
+	public String getGroupId(EObject obj) {
+		return LUWGroupID.BUFFER_POOL;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWDatabaseContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWDatabaseContainmentProvider.java
new file mode 100644
index 0000000..a383b10
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWDatabaseContainmentProvider.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.containment;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.internal.core.containment.DatabaseContainmentProvider;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace;
+import org.eclipse.emf.ecore.EObject;
+
+public class LUWDatabaseContainmentProvider extends DatabaseContainmentProvider {
+
+	public Collection getContainedElements(EObject obj) {
+		Collection children = super.getContainedElements(obj);
+		LUWDatabase database = (LUWDatabase) obj;
+		children.addAll(database.getGroups());
+		children.addAll(database.getBufferpools());
+		children.addAll(database.getWrappers());
+		children.addAll(database.getStorageGroups());
+		// Servers are now contained under LUWWrapper
+		// children.addAll(database.getServers());
+//		children.addAll(database.getTablespaces());
+		Iterator it = database.getGroups().iterator();
+		while(it.hasNext()) {
+			LUWPartitionGroup g = (LUWPartitionGroup) it.next();
+			children.addAll(g.getTableSpaces());
+		}
+		Iterator tps = database.getTablespaces().iterator();
+		while (tps.hasNext()) {
+			LUWTableSpace tp = (LUWTableSpace) tps.next();
+			if(!children.contains(tp)){
+				children.add(tp);
+			}
+		}
+
+		return children;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWDatabasePartitionContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWDatabasePartitionContainmentProvider.java
new file mode 100644
index 0000000..d062d96
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWDatabasePartitionContainmentProvider.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.containment;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWDatabasePartitionContainmentProvider extends AbstractContainmentProvider{
+	public EObject getContainer(EObject obj) {
+		return ((LUWDatabasePartition) obj).getGroup();
+	}
+
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+		return LUWPackage.eINSTANCE.getLUWPartitionGroup_Partitions();
+	}
+
+	public boolean isDisplayableElement(EObject obj) {
+		return false;
+	}
+
+	public String getGroupId(EObject obj) {
+		return LUWGroupID.PARTITION;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWFederatedSPContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWFederatedSPContainmentProvider.java
new file mode 100644
index 0000000..416b3d1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWFederatedSPContainmentProvider.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.containment;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWFederatedSPContainmentProvider extends AbstractContainmentProvider {
+    
+    public EObject getContainer(EObject obj) {
+		return ((FederatedProcedure) obj).getSchema();
+	}
+
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+		return SQLSchemaPackage.eINSTANCE.getSchema_Routines();
+	}
+
+	public String getGroupId(EObject obj) {
+		return LUWGroupID.FEDERATED_STORED_PROCEDURES;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWGlobalVariableContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWGlobalVariableContainmentProvider.java
new file mode 100644
index 0000000..eb3e1a2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWGlobalVariableContainmentProvider.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.containment;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGlobalVariable;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWGlobalVariableContainmentProvider extends AbstractContainmentProvider{
+	public EObject getContainer(EObject obj) {
+		return ((LUWGlobalVariable) obj).getSchema();
+	}
+
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+		return DB2ModelPackage.eINSTANCE.getDB2Schema_GlobalVariables();
+	}
+
+	public String getGroupId(EObject obj) {
+		return LUWGroupID.GLOBAL_VARIABLE;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWGroupID.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWGroupID.java
new file mode 100644
index 0000000..f7bd924
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWGroupID.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.containment;
+
+public interface LUWGroupID {
+	public static final String FEDERATED_SERVER = "core.db2.luw.LUWServer";  //$NON-NLS-1$
+	public static final String NICKNAME = "core.db2.luw.LUWNickname";  //$NON-NLS-1$
+	public static final String BUFFER_POOL = "core.db2.luw.LUWBufferPool";  //$NON-NLS-1$
+	public static final String PARTITION = "core.db2.luw.LUWDatabasePartition";  //$NON-NLS-1$
+	public static final String PARTITION_GROUP = "core.db2.luw.LUWPartitionGroup";  //$NON-NLS-1$
+	public static final String TABLESPACE = "core.db2.luw.LUWTableSpace";  //$NON-NLS-1$
+	public static final String FEDERATED_STORED_PROCEDURES = "core.db2.luw.LUWFederatedSP";  //$NON-NLS-1$
+	public static final String GLOBAL_VARIABLE = "core.db2.luw.LUWGlobalVariable";  //$NON-NLS-1$
+	public static final String MODULE = "core.db2.luw.LUWModule";  //$NON-NLS-1$
+	public static final String MODULE_OBJECT = "core.db2.luw.LUWModuleObject";  //$NON-NLS-1$
+	public static final String MODULE_VARIABLE = "core.db2.luw.LUWModuleVariable";  //$NON-NLS-1$
+	public static final String MODULE_CONDITION = "core.db2.luw.LUWModuleCondition";  //$NON-NLS-1$
+	public static final String MODULE_TYPE = "core.db2.luw.LUWModuleType";  //$NON-NLS-1$
+	public static final String MODULE_FUNCTION = "core.db2.luw.LUWModuleFunction";  //$NON-NLS-1$
+	public static final String MODULE_PROCEDURE = "core.db2.luw.LUWModuleProcedure";  //$NON-NLS-1$
+	public static final String PLSQL_PACKAGE = "core.db2.luw.PlsqlPackage";  //$NON-NLS-1$
+	public static final String WRAPPER = "core.db2.luw.LUWWrapper"; //$NON-NLS-1$
+	public static final String USER_MAPPING = "core.db2.luw.LUWUserMapping"; //$NON-NLS-1$
+	public static final String FEDERATED_DATABASE_OBJECT = "core.db2.luw.LUWFederatedDatabaseObject"; //$NON-NLS-1$
+	public static final String SECURITY_POLICY = "core.db2.luw.LUWSecurityPolicy"; //$NON-NLS-1$
+	public static final String SECURITY_LABEL_COMPONENT = "core.db2.luw.LUWSecurityLabelComponent"; //$NON-NLS-1$
+	public static final String SECURITY_LABEL_COMPONENT_ELEMENT = "core.db2.luw.LUWSecurityLabelComponentElement"; //$NON-NLS-1$
+	public static final String SECURITY_LABEL = "core.db2.luw.LUWSecurityLabel"; //$NON-NLS-1$
+	public static final String STORAGE_GROUP = "core.db2.luw.LUWStorageGroup";  //$NON-NLS-1$
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWNicknameContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWNicknameContainmentProvider.java
new file mode 100644
index 0000000..870a112
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWNicknameContainmentProvider.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.containment;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNickname;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWNicknameContainmentProvider extends AbstractContainmentProvider {
+    
+    public Collection getContainedElements(EObject obj) {
+        Collection children = super.getContainedElements(obj);
+        BaseTable table = (BaseTable) obj;
+        children.addAll(table.getIndex());
+        return children;
+    }
+
+    public EObject getContainer(EObject obj) {
+		return ((LUWNickname) obj).getSchema();
+	}
+
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+		return SQLSchemaPackage.eINSTANCE.getSchema_Tables();
+	}
+
+	public String getGroupId(EObject obj) {
+		return LUWGroupID.NICKNAME;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWPartitionGroupContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWPartitionGroupContainmentProvider.java
new file mode 100644
index 0000000..ed2854c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWPartitionGroupContainmentProvider.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.containment;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWPartitionGroupContainmentProvider extends AbstractContainmentProvider  
+{
+	public Collection getContainedElements(EObject obj) {
+		Collection children = super.getContainedElements(obj);
+		LUWPartitionGroup pg = (LUWPartitionGroup) obj;
+		children.addAll(pg.getPartitions());
+		return children;
+	}
+
+	public EObject getContainer(EObject obj) {
+		return ((LUWPartitionGroup) obj).getDatabase();
+	}
+
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+		return LUWPackage.eINSTANCE.getLUWDatabase_Groups();
+	}
+
+	public String getGroupId(EObject obj) {
+		return LUWGroupID.PARTITION_GROUP;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWSecurityLabelComponentContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWSecurityLabelComponentContainmentProvider.java
new file mode 100644
index 0000000..7afd687
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWSecurityLabelComponentContainmentProvider.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.containment;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponent;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWSecurityLabelComponentContainmentProvider extends AbstractContainmentProvider {
+	
+	public Collection getContainedElements(EObject obj) {
+		Collection children = super.getContainedElements(obj);
+		LUWSecurityLabelComponent component = (LUWSecurityLabelComponent) obj;
+		for (Object element : component.getElements()) {
+			if (element != null) {
+				children.add(element);
+			}
+		}
+		return children;
+	}
+
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+		return LUWPackage.eINSTANCE.getLUWSecurityPolicy_Components();
+	}
+
+	public String getGroupId(EObject obj) {
+		return LUWGroupID.SECURITY_LABEL_COMPONENT;
+	}
+	
+	public EObject getContainer(EObject obj) {
+		EList<LUWSecurityPolicy> policies = ((LUWSecurityLabelComponent) obj).getLUWSecurityPolicy();
+		for (LUWSecurityPolicy policy : policies) {
+			EList<LUWSecurityLabelComponent> components = policy.getComponents();
+			if (components.contains(obj)) {
+				return policy;
+			}
+		}
+		return null;
+	}
+	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWSecurityLabelComponentElementContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWSecurityLabelComponentElementContainmentProvider.java
new file mode 100644
index 0000000..a4d7be6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWSecurityLabelComponentElementContainmentProvider.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.containment;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponent;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentElement;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWSecurityLabelComponentElementContainmentProvider extends AbstractContainmentProvider {
+
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+		return LUWPackage.eINSTANCE.getLUWSecurityLabelComponent_Elements();
+	}
+	
+	public String getGroupId(EObject obj) {
+		return LUWGroupID.SECURITY_LABEL_COMPONENT_ELEMENT;
+	}
+	
+	public EObject getContainer(EObject obj) {
+		EList<LUWSecurityLabelComponent> components = ((LUWSecurityLabelComponentElement) obj).getLUWSecurityLabelComponent();
+		for (LUWSecurityLabelComponent component : components) {
+			EList<LUWSecurityLabelComponentElement> elements = component.getElements();
+			if (elements.contains(obj)) {
+				return component;
+			}
+		}
+		return null;		
+	}
+	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWSecurityLabelContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWSecurityLabelContainmentProvider.java
new file mode 100644
index 0000000..78785fc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWSecurityLabelContainmentProvider.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.containment;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabel;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWSecurityLabelContainmentProvider extends AbstractContainmentProvider {
+
+	public EObject getContainer(EObject obj) {
+		return ((LUWSecurityLabel) obj).getPolicy();
+	}
+
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+		return LUWPackage.eINSTANCE.getLUWSecurityPolicy_Labels();
+	}
+	
+	public String getGroupId(EObject obj) {
+		return LUWGroupID.SECURITY_LABEL;
+	}
+	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWSecurityPolicyContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWSecurityPolicyContainmentProvider.java
new file mode 100644
index 0000000..77afbaf
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWSecurityPolicyContainmentProvider.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.containment;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWSecurityPolicyContainmentProvider extends AbstractContainmentProvider {
+	
+	public Collection getContainedElements(EObject obj) {
+		Collection children = super.getContainedElements(obj);
+		LUWSecurityPolicy policy = (LUWSecurityPolicy) obj;
+		for (Object component : policy.getComponents()) {
+			if (component != null) {
+				children.add(component);
+			}
+		}
+		for (Object label : policy.getLabels()) {
+			if (label != null) {
+				children.add(label);
+			}
+		}
+		return children;
+	}
+
+	public EObject getContainer(EObject obj) {
+		return ((LUWSecurityPolicy) obj).getTable();
+	}
+
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+		return LUWPackage.eINSTANCE.getLUWTable_SecurityPolicy();
+	}
+
+	public String getGroupId(EObject obj) {
+		return LUWGroupID.SECURITY_POLICY;
+	}
+	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWServerContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWServerContainmentProvider.java
new file mode 100644
index 0000000..4497e16
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWServerContainmentProvider.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.containment;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.RemoteServer;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWServerContainmentProvider extends AbstractContainmentProvider {
+	public Collection getContainedElements(EObject obj) {
+		Collection children = super.getContainedElements(obj);
+		LUWServer server = (LUWServer) obj;
+		RemoteServer rs = server.getRemoteServer();
+		if(rs != null) {
+			children.add(rs);			
+		}
+		return children;
+	}
+
+	public EObject getContainer(EObject obj) {
+		return ((LUWServer) obj).getWrapper();
+	}
+
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+		return LUWPackage.eINSTANCE.getLUWWrapper_Servers();
+	}
+
+	public String getGroupId(EObject obj) {
+		return LUWGroupID.FEDERATED_SERVER;
+	}
+	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWTableContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWTableContainmentProvider.java
new file mode 100644
index 0000000..c6b8ed6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWTableContainmentProvider.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.containment;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.enablement.ibm.db2.containment.DB2TableContainmentProvider;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable;
+import org.eclipse.emf.ecore.EObject;
+
+public class LUWTableContainmentProvider extends DB2TableContainmentProvider {
+
+	public Collection getContainedElements(EObject obj) {
+		Collection children = super.getContainedElements(obj);
+		LUWTable table = (LUWTable) obj;
+		LUWSecurityPolicy policy = table.getSecurityPolicy();
+		if (policy != null) {
+			children.add(policy);
+		}
+		return children;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWTableSpaceContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWTableSpaceContainmentProvider.java
new file mode 100644
index 0000000..69d87e2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWTableSpaceContainmentProvider.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.containment;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWTableSpaceContainmentProvider extends AbstractContainmentProvider
+{
+	public EObject getContainer(EObject obj) {
+	    LUWTableSpace tsp = (LUWTableSpace) obj;
+	    LUWPartitionGroup grp = tsp.getGroup();
+	    if(grp != null) return grp.getDatabase();
+	    LUWBufferPool pool = tsp.getBufferPool();
+	    if(pool != null) return pool.getDatabase();
+	   
+	    return tsp.getDatabase();
+	}
+
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+//		return LUWPackage.eINSTANCE.getLUWDatabase_Tablespaces();
+		return null;
+	}
+	
+	public String getGroupId(EObject obj) {
+		return LUWGroupID.TABLESPACE;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWTemporaryTableContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWTemporaryTableContainmentProvider.java
new file mode 100644
index 0000000..f96eaf1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWTemporaryTableContainmentProvider.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.containment;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.sqm.internal.core.containment.TableContainmentProvider;
+import org.eclipse.datatools.enablement.ibm.db2.containment.DB2GroupID;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * 
+ * @author bkadambi
+ *
+ */
+public class LUWTemporaryTableContainmentProvider extends TableContainmentProvider {
+
+	public Collection getContainedElements(EObject obj) {
+		Collection children = super.getContainedElements(obj);
+		return children;
+	}
+	
+	public String getGroupId(EObject obj) {
+		return DB2GroupID.TEMPTABLE;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWUserMappingContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWUserMappingContainmentProvider.java
new file mode 100644
index 0000000..1f3b9dc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWUserMappingContainmentProvider.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.containment;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWUserMapping;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+/**
+ * @author pjcastee
+ */
+public class LUWUserMappingContainmentProvider extends AbstractContainmentProvider {
+	
+
+	public EObject getContainer(EObject obj) {
+		return ((LUWUserMapping) obj).getServer();
+	}
+
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+		return LUWPackage.eINSTANCE.getLUWServer_UserMappings();
+	}
+
+	public String getGroupId(EObject obj) {
+		return LUWGroupID.USER_MAPPING;
+	}
+	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWWrapperContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWWrapperContainmentProvider.java
new file mode 100644
index 0000000..d66a121
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/containment/LUWWrapperContainmentProvider.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.containment;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+/**
+ * @author aarti
+ */
+public class LUWWrapperContainmentProvider extends AbstractContainmentProvider {
+	
+	public Collection getContainedElements(EObject obj)
+	{
+		Collection children = super.getContainedElements(obj);
+		LUWWrapper wrapper = (LUWWrapper) obj;
+		if(wrapper.getServers() != null)
+		{
+			children.addAll(wrapper.getServers());
+		}
+		return children;
+	}
+	
+	public EObject getContainer(EObject obj) {
+		return ((LUWWrapper) obj).getLUWDatabase();
+	}
+
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+		return LUWPackage.eINSTANCE.getLUWDatabase_Wrappers();
+	}
+
+	public String getGroupId(EObject obj) {
+		return LUWGroupID.WRAPPER;
+	}
+	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/ILUWModuleDdlBuilder.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/ILUWModuleDdlBuilder.java
new file mode 100644
index 0000000..7fa5c5e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/ILUWModuleDdlBuilder.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.ddl;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+public interface ILUWModuleDdlBuilder {
+	
+	public String buildCreateStatement(SQLObject object,boolean quoteIdentifiers,boolean qualifyNames);
+	public String buildDropStatement(SQLObject object,boolean quoteIdentifiers,boolean qualifyNames);
+	public String buildCommentStatement(SQLObject object,boolean quoteIdentifiers,boolean qualifyNames);
+ }
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDataPreservationDdlBuilder.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDataPreservationDdlBuilder.java
new file mode 100644
index 0000000..85ea5f5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDataPreservationDdlBuilder.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.ddl;
+
+import org.eclipse.datatools.enablement.ibm.db2.ddl.DB2DataPreservationDdlBuilder;
+
+public class LUWDataPreservationDdlBuilder extends
+		DB2DataPreservationDdlBuilder {
+	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDdlBuilder.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDdlBuilder.java
new file mode 100644
index 0000000..aca6a5e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDdlBuilder.java
@@ -0,0 +1,2686 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.ddl;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Vector;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentServiceImpl;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.internal.core.definition.DatabaseDefinitionRegistryImpl;
+import org.eclipse.datatools.enablement.ibm.catalog.IDatabaseObject;
+import org.eclipse.datatools.enablement.ibm.catalog.util.CatalogStatistics;
+import org.eclipse.datatools.enablement.ibm.db2.ddl.DB2DdlBuilder;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.BufferPoolType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWArrayDataType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWAttributeDefinition;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPoolSizeException;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWContainerType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWCursorDataType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGlobalVariable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMaterializedQueryTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleArrayDataType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleCondition;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleCursorDataType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleDistinctType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleGlobalVariable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleRowDataType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNickname;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRowDataType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWUserMapping;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWView;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.ManagementType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.PLSQLPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.PLSQLPackageBody;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.PageSizeType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.PartitionMethod;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.TableSpaceType;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Alias;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2IdentitySpecifier;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Index;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2IndexType;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Package;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2UserDefinedFunction;
+import org.eclipse.datatools.enablement.ibm.db2.model.GenerateType;
+import org.eclipse.datatools.enablement.ibm.db2.model.UnitType;
+import org.eclipse.datatools.enablement.ibm.ddl.DdlGenerationUtility;
+import org.eclipse.datatools.enablement.ibm.ddl.ExtendDdlBuilder;
+import org.eclipse.datatools.enablement.ibm.util.EngineeringOptionID;
+import org.eclipse.datatools.enablement.ibm.util.ModelHelper;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.AuthorizationIdentifier;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Group;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Privilege;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Role;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.RoleAuthorization;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.User;
+import org.eclipse.datatools.modelbase.sql.constraints.CheckConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.IndexMember;
+import org.eclipse.datatools.modelbase.sql.constraints.TableConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.UniqueConstraint;
+import org.eclipse.datatools.modelbase.sql.datatypes.BinaryStringDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.CharacterStringDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.DataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.DateDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.DistinctUserDefinedType;
+import org.eclipse.datatools.modelbase.sql.datatypes.Field;
+import org.eclipse.datatools.modelbase.sql.datatypes.PrimitiveType;
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataTypesPackage;
+import org.eclipse.datatools.modelbase.sql.datatypes.StructuredUserDefinedType;
+import org.eclipse.datatools.modelbase.sql.datatypes.TimeDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.expressions.QueryExpression;
+import org.eclipse.datatools.modelbase.sql.expressions.ValueExpression;
+import org.eclipse.datatools.modelbase.sql.routines.Function;
+import org.eclipse.datatools.modelbase.sql.routines.Method;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.datatools.modelbase.sql.routines.UserDefinedFunction;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.ReferentialActionType;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.schema.Sequence;
+import org.eclipse.datatools.modelbase.sql.schema.TypedElement;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.datatools.modelbase.sql.tables.CheckType;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class LUWDdlBuilder extends DB2DdlBuilder {
+	
+	// Currently XMLSupport is limited to LUW. Once it is extended to i/zSeries,
+	// this should move upwards to parent class 
+	protected final static String OPTIMIZATION = "OPTIMIZATION"; //$NON-NLS-1$
+	protected final static String QUERY = "QUERY"; //$NON-NLS-1$
+	protected final static String ENABLE = "ENABLE"; //$NON-NLS-1$
+	protected final static String ENFORCED = "ENFORCED"; //$NON-NLS-1$
+	protected final static String XSROBJECT = "XSROBJECT"; //$NON-NLS-1$
+	protected final static String PARTITION_KEY = "PARTITIONING KEY"; //$NON-NLS-1$
+	protected final static String PARTITION_GROUP = "PARTITION GROUP"; //$NON-NLS-1$
+    protected final static String BUFFER_POOL = "BUFFER POOL"; //$NON-NLS-1$
+	protected final static String UNDER = "UNDER"; //$NON-NLS-1$
+	protected final static String RESTRICT = "RESTRICT"; //$NON-NLS-1$
+	protected final static String DIMENSION_BY = "ORGANIZE BY DIMENSIONS"; //$NON-NLS-1$
+	protected final static String VALUE_COMPRESSION = "VALUE COMPRESSION"; //$NON-NLS-1$
+	protected final static String USE_HASH = "USING HASHING"; //$NON-NLS-1$
+	protected final static String INTEGRITY = "INTEGRITY"; //$NON-NLS-1$
+	protected final static String ADMIN_CMD = "SYSPROC.ADMIN_CMD"; //$NON-NLS-1$
+    protected final static String REORG = "REORG"; //$NON-NLS-1$
+    protected final static String CALL = "CALL"; //$NON-NLS-1$
+    protected final static String VARIABLE = "VARIABLE";
+    protected final static String CONSTANT	= "CONSTANT";
+    protected final static String ARRAY	= "ARRAY";
+    protected final static String CURSOR = "CURSOR";
+    protected final static String MODULE = "MODULE";
+    protected final static String OFF = "OFF";
+	protected static final String NOT_LOGGED = " NOT LOGGED"; //$NON-NLS-1$
+	protected static final String IBM = "IBM"; //$NON-NLS-1$
+	protected static final String SYS = "SYS"; //$NON-NLS-1$
+    protected final static String HEX_LITERAL_PREFIX   = "X"; // $NON-NLS-1$
+    
+    protected final static int GB = 2<<(30-1);
+	protected final static String FILE = "FILE"; // $NON-NLS-1$
+	protected final static String DEVICE = "DEVICE"; // $NON-NLS-1$
+	protected static final String BUFFERPOOL = "BUFFERPOOL"; // $NON-NLS-1$
+	protected static final String OVERHEAD = "OVERHEAD"; // $NON-NLS-1$
+	protected static final String XFER_RATE = "TRANSFERRATE"; // $NON-NLS-1$
+	protected static final String DROPPED_TABLE_RECOVERY = "DROPPED TABLE RECOVERY"; // $NON-NLS-1$
+	protected static final String AUTORESIZE = "AUTORESIZE"; // $NON-NLS-1$
+	protected static final String MAXSIZE = "MAXSIZE"; // $NON-NLS-1$
+	protected static final String PERCENT = "PERCENT"; // $NON-NLS-1$
+	protected static final String INCREASESIZE = "INCREASESIZE"; // $NON-NLS-1$
+	protected static final String NONE = "NONE"; // $NON-NLS-1$
+	protected static final String AUTOMATIC = "AUTOMATIC"; // $NON-NLS-1$
+	protected static final String PREFETCHSIZE = "PREFETCHSIZE"; // $NON-NLS-1$
+	protected static final String XFER_OWNERSHIP = "TRANSFER OWNERSHIP OF"; // $NON-NLS-1$
+	protected static final String PRESERVE_PRIVILEGES = "PRESERVE PRIVILEGES"; // $NON-NLS-1$
+	protected static final String RESIZE = "RESIZE"; // $NON-NLS-1$
+	
+	public LUWDdlBuilder(){
+	}
+	
+	public LUWDdlBuilder(LUWDdlGenerator generator) {
+		this.generator = generator;
+	}
+	
+    public String createSchema(Schema schema, boolean quoteIdentifiers,boolean qualifyNames) {
+    	String text = CREATE + SPACE + SCHEMA + SPACE + getName(schema, quoteIdentifiers,qualifyNames);
+    	AuthorizationIdentifier auth=schema.getOwner();
+    	if (auth != null) {
+    		text +=  SPACE + AUTHORIZATION + SPACE+ getName(auth, quoteIdentifiers);
+    	}
+    	return text;
+    }
+
+    public String createTablespace(LUWTableSpace tablespace, boolean quoteIdentifiers) {
+        if(tablespace.getContainers().isEmpty() && this.isTablespaceContainersRequried(tablespace)) {
+        	this.getEngineeringCallBack().writeMessage(MessageFormat.format(
+					LUWDdlMessages.FE_TABLESPACE_NO_CONTAINER, new Object[] { tablespace.getName()}));
+        	return null;
+        }
+		
+        String tablespaceName = tablespace.getName();
+        if(quoteIdentifiers) {
+            tablespaceName = this.getDoubleQuotedString(tablespaceName);
+        }
+    
+        String text = "CREATE "; //$NON-NLS-1$
+        TableSpaceType type = tablespace.getTablespaceType();
+        if(type == TableSpaceType.REGULAR_LITERAL) {
+            text += "REGULAR"; //$NON-NLS-1$
+        }
+        else if(type == TableSpaceType.USER_TEMP_LITERAL) {
+            text += "USER TEMPORARY"; //$NON-NLS-1$
+        }
+        else if(type == TableSpaceType.SYSTEM_TEMP_LITERAL) {
+            text += "SYSTEM TEMPORARY"; //$NON-NLS-1$
+        }
+        else if(type == TableSpaceType.LARGE_LITERAL) {
+            text += "LARGE"; //$NON-NLS-1$
+	    }
+        text += " TABLESPACE " + tablespaceName; //$NON-NLS-1$
+        
+        LUWPartitionGroup pg = tablespace.getGroup();
+        if (pg != null){
+        	String pgName = pg.getName();
+            if(quoteIdentifiers) {
+            	pgName = this.getDoubleQuotedString(pgName);
+            }
+
+        	text += NEWLINE + TAB + IN + SPACE + DATABASE + SPACE + PARTITION_GROUP + SPACE + pgName;
+        }
+        
+        text += NEWLINE + TAB + "PAGESIZE "; //$NON-NLS-1$
+        //First get the page size from the buffer pool
+        PageSizeType pageSize = null;
+        if (tablespace.getBufferPool() != null) {
+        	pageSize = tablespace.getBufferPool().getPageSize();	
+        }
+        else {
+        	pageSize = tablespace.getPageSize();
+        }
+        if(pageSize == PageSizeType.FOUR_K_LITERAL) {
+            text += "4 K"; //$NON-NLS-1$
+        }
+        else if(pageSize == PageSizeType.EIGHT_K_LITERAL) {
+            text += "8 K"; //$NON-NLS-1$
+        }
+        else if(pageSize == PageSizeType.SIXTEEN_K_LITERAL) {
+            text += "16 K"; //$NON-NLS-1$
+        }
+        else if(pageSize == PageSizeType.THIRTY_TWO_K_LITERAL) {
+            text += "32 K"; //$NON-NLS-1$
+        }
+        else if (pageSize == PageSizeType.FOUR_KB_LITERAL) {
+        	text += "4096";
+        }
+        else if (pageSize == PageSizeType.EIGHT_KB_LITERAL) {
+        	text += "8192";
+        }
+        else if (pageSize == PageSizeType.SIXTEEN_KB_LITERAL) {
+        	text += "16384";
+        }
+        else if (pageSize == PageSizeType.THIRTY_TWO_KB_LITERAL) {
+        	text += "32768";
+        }
+
+        text += NEWLINE + TAB + "MANAGED BY "; //$NON-NLS-1$
+        if (tablespace.getManagementType() == ManagementType.DATABASE_MANAGED_LITERAL) {
+            text += "DATABASE"; //$NON-NLS-1$
+            if (hasContainers( tablespace )) {
+            	text += this.getContainers(tablespace);
+            }
+        }
+        else if (tablespace.getManagementType() == ManagementType.SYSTEM_MANAGED_LITERAL) {
+            text += "SYSTEM"; //$NON-NLS-1$
+            if (hasContainers( tablespace )) {
+            	text += this.getContainers(tablespace);
+            }
+        }
+        else {
+            text += "AUTOMATIC STORAGE"; //$NON-NLS-1$
+        }
+
+        if (tablespace.getManagementType() != ManagementType.SYSTEM_MANAGED_LITERAL) {
+        	long initsize = tablespace.getInitialSize();
+        	UnitType initunit = tablespace.getInitialSizeUnit();
+        	long incrsize = tablespace.getIncreaseSize();
+        	UnitType incrunit = tablespace.getIncreaseSizeUnit();
+        	int incrpct = tablespace.getIncreasePercent();
+        	long maxsize = tablespace.getMaximumSize();
+        	UnitType maxunit = tablespace.getMaximumSizeUnit();
+        	
+        	if (initsize != 0 || incrsize != 0 || incrpct != 0 || maxsize != 0) {
+        		text += NEWLINE + "AUTORESIZE YES"; //$NON-NLS-1$
+        	}
+
+        	if (tablespace.getManagementType() == ManagementType.AUTOMATIC_STORAGE_LITERAL
+        			&& initsize != 0) {
+        		text += NEWLINE + "INITIALSIZE " + initsize; //$NON-NLS-1$
+        		if (initunit != null) {
+        			text += " " + initunit.getLiteral(); //$NON-NLS-1$
+        		}
+        	}
+
+        	if (incrsize != 0) {
+        		text += NEWLINE + "INCREASESIZE " + incrsize; //$NON-NLS-1$
+        		if (incrunit != null) {
+        			text += " " + incrunit.getLiteral(); //$NON-NLS-1$
+        		}
+        	}
+        	else if (incrpct != 0) {
+        		text += NEWLINE + "INCREASESIZE " //$NON-NLS-1$
+        				+ incrpct + " PERCENT"; //$NON-NLS-1$
+        	}
+
+        	if (maxsize != 0) {
+        		text += NEWLINE + "MAXSIZE " + maxsize; //$NON-NLS-1$
+        		if (maxunit != null) {
+        			text += " " + maxunit.getLiteral(); //$NON-NLS-1$
+        		}
+        	}
+        }
+
+        final int extentsize = tablespace.getExtentSize();
+        if (extentsize > 0) {
+            text += NEWLINE + TAB + "EXTENTSIZE " + extentsize; //$NON-NLS-1$
+        }
+    
+        final int prefetchsize = tablespace.getPreFetchSize();
+        if (prefetchsize > 0) {
+            text += NEWLINE + TAB + "PREFETCHSIZE " + prefetchsize; //$NON-NLS-1$
+        }
+
+        LUWBufferPool bufferpool = tablespace.getBufferPool();
+        if(bufferpool != null) {
+        	String bufferpoolName = bufferpool.getName();
+            if(quoteIdentifiers) {
+            	bufferpoolName = this.getDoubleQuotedString(bufferpoolName);
+            }
+
+            text += NEWLINE + TAB + "BUFFERPOOL " + bufferpoolName; //$NON-NLS-1$
+        }
+
+        Double overhead = tablespace.getOverhead();
+        if (overhead > 0 ){
+        	text += NEWLINE + TAB + "OVERHEAD " + overhead;
+        }
+        
+        if (tablespace.getTransferRate() > 0) {
+        	text += NEWLINE + TAB + "TRANSFERRATE " + tablespace.getTransferRate(); //$NON-NLS-1$
+        }
+
+        text += RecoverDroppedTableString(tablespace);
+        	
+        return text;    
+    }
+
+    public String dropTablespace(LUWTableSpace tablespace, boolean quoteIdentifiers) {
+        String tablespaceName = tablespace.getName();
+        if(quoteIdentifiers) {
+            tablespaceName = this.getDoubleQuotedString(tablespaceName);
+        }
+
+        return "DROP TABLESPACE " + tablespaceName; //$NON-NLS-1$
+    }
+
+    public String createBufferPool(LUWBufferPool bufferpool, boolean quoteIdentifiers) {
+        String bufferpoolName = bufferpool.getName();
+        if(quoteIdentifiers) {
+        	bufferpoolName = this.getDoubleQuotedString(bufferpoolName);
+        }
+    
+        String text = "CREATE BUFFERPOOL " + bufferpoolName; //$NON-NLS-1$
+        
+        if (bufferpool.getCreateType() ==BufferPoolType.DEFERRED_LITERAL ) {
+        	text += TAB + "DEFERRED"; //$NON-NLS-1$
+        }
+        
+        EList pgs = bufferpool.getPartitionGroup();
+        if (pgs.isEmpty()) {
+        	text += NEWLINE + TAB + "ALL DBPARTITIONNUMS ";  //$NON-NLS-1$
+        } else {
+        	StringBuilder pgtext = new StringBuilder();
+
+        	for ( Object pgobj : pgs )
+        	{
+        		LUWPartitionGroup pg = (LUWPartitionGroup)pgobj;
+        		
+        		if (pgtext.length() > 0) {
+        			pgtext.append( ", " );
+        		}
+        		pgtext.append( pg.getName() );
+        	}
+        	
+        	text += NEWLINE + TAB + "DATABASE PARTITION GROUP " //$NON-NLS-1$
+        		+ pgtext.toString();
+        }
+        
+        String sizeStr = this.getBufferPoolSize(bufferpool);
+        if (sizeStr == null) {
+        	return null;     //not right size
+        } else {
+        	text += sizeStr;
+        }
+        int numBlockPages = bufferpool.getNumBlockPages();
+        text += NEWLINE + TAB +"NUMBLOCKPAGES " + bufferpool.getNumBlockPages(); //$NON-NLS-1$
+
+        if (numBlockPages >0) {   //0 mean disable blockSize
+	        int blocksize = bufferpool.getBlockSize();
+	        if (blocksize >1) {
+	        	text += SPACE + "BLOCKSIZE " + blocksize; //$NON-NLS-1$
+	        }
+        }
+        text += NEWLINE + TAB + "PAGESIZE "; //$NON-NLS-1$
+        PageSizeType pageSize = bufferpool.getPageSize();
+        if(pageSize == PageSizeType.FOUR_K_LITERAL) {
+            text += "4 K"; //$NON-NLS-1$
+        }
+        else if(pageSize == PageSizeType.EIGHT_K_LITERAL) {
+            text += "8 K"; //$NON-NLS-1$
+        }
+        else if(pageSize == PageSizeType.SIXTEEN_K_LITERAL) {
+            text += "16 K"; //$NON-NLS-1$
+        }
+        else if(pageSize == PageSizeType.THIRTY_TWO_K_LITERAL) {
+            text += "32 K"; //$NON-NLS-1$
+        }
+
+        List sizeexeptions = bufferpool.getSizeException();
+
+        if (!sizeexeptions.isEmpty()) {
+        	StringBuilder parttext = new StringBuilder( NEWLINE + "EXCEPT ON DBPARTITIONNUMS (" );
+        	boolean first = true;
+        	
+	        for (Object o : sizeexeptions) {
+	        	LUWBufferPoolSizeException sizeex = (LUWBufferPoolSizeException)o;
+	        	
+	        	String size = " SIZE " + sizeex.getSize();
+	        	List partns = sizeex.getPartitions();
+	        	
+	        	for ( Object partobj : partns ) {
+	        		LUWDatabasePartition part = (LUWDatabasePartition)partobj;
+	        		
+	        		if (!first) {
+	        			parttext.append(", ");
+	        		}
+	        		else {
+	        			first = false;
+	        		}
+	        		
+	        		parttext.append( part.getNumber() );
+	        		parttext.append( size );
+	        	}
+	        }
+
+	        parttext.append( ")" );
+	        
+	        text += parttext.toString();
+	    }
+        
+        if (bufferpool.isExtendedStorage() && supportsBufferpoolExtendedStorage()){
+        	text += NEWLINE + "EXTENDED STORAGE"; //$NON-NLS-1$
+        }
+        
+        return text;    
+    }
+
+    /**
+	 * @return
+	 */
+	protected boolean supportsBufferpoolExtendedStorage() {
+		//V8 and before support EXTENDED STORAGE
+		return true;
+	}
+
+	public String dropBufferPool(LUWBufferPool bufferpool, boolean quoteIdentifiers) {
+        String bufferpoolName = bufferpool.getName();
+        if(quoteIdentifiers) {
+        	bufferpoolName = this.getDoubleQuotedString(bufferpoolName);
+        }
+
+        return "DROP BUFFERPOOL " + bufferpoolName; //$NON-NLS-1$
+    }
+    
+    
+    public String createSequence(Sequence sequence, boolean quoteIdentifiers, boolean qualifyNames) {
+        String sequenceName = sequence.getName();
+        String schemaName = sequence.getSchema().getName();
+
+        if(quoteIdentifiers) {
+            sequenceName = this.getDoubleQuotedString(sequenceName);
+            schemaName = this.getDoubleQuotedString(schemaName);
+        }
+        
+        if(qualifyNames) {
+            sequenceName = schemaName + "." + sequenceName; //$NON-NLS-1$
+        }
+
+        String statement = "CREATE SEQUENCE " + sequenceName + " AS "; //$NON-NLS-1$ //$NON-NLS-2$
+
+        // String dataType = this.getDataTypeString(sequence,sequence.getSchema(),qualifyNames);
+        // fix for issue wsdbu00985096
+        String dataType = this.getDataTypeString(sequence,sequence.getSchema(),quoteIdentifiers,qualifyNames); 
+        
+        if (dataType == null) {
+        	this.getEngineeringCallBack().writeMessage(MessageFormat.format(
+					LUWDdlMessages.FE_TABLESPACE_NO_CONTAINER, new Object[] { sequenceName}));
+        	return null;
+        }
+        
+        statement += dataType;
+        
+        DB2IdentitySpecifier identity = (DB2IdentitySpecifier)sequence.getIdentity();
+        statement += " " + this.getIdentityString(identity); //$NON-NLS-1$
+        
+        return statement;
+    }
+
+    public String createMQT(LUWMaterializedQueryTable table, boolean quoteIdentifiers, boolean qualifyNames){
+        String tableName = table.getName();
+        String schemaName = table.getSchema().getName();
+
+        if(quoteIdentifiers) {
+            tableName = this.getDoubleQuotedString(tableName);
+            schemaName = this.getDoubleQuotedString(schemaName);
+        }
+        
+        if(qualifyNames) {
+            tableName = schemaName + "." + tableName; //$NON-NLS-1$
+        }
+
+        String statement = "CREATE TABLE " + tableName + " ("; //$NON-NLS-1$ //$NON-NLS-2$
+
+        Iterator it = table.getColumns().iterator();
+        while(it.hasNext()) {
+            Column column = (Column) it.next();
+            statement += column.getName();
+            if(it.hasNext()) {
+                statement += ", ";                 //$NON-NLS-1$
+            }
+        }
+        statement += ")" + NEWLINE + "AS (";                 //$NON-NLS-1$ //$NON-NLS-2$
+        
+        QueryExpression expression = table.getQueryExpression();
+        if (expression == null) {
+        	this.getEngineeringCallBack().writeMessage(MessageFormat.format(
+					LUWDdlMessages.FE_MQT_HAS_NO_BODY, new Object[] { schemaName+"."+tableName}));
+        	return null;
+        }
+        
+        statement += expression.getSQL() + ")" +NEWLINE; //$NON-NLS-1$
+
+//<bgp        statement += "DATA INITIALLY DEFERRED REFRESH "; //$NON-NLS-1$
+//        if(table.getRefresh() == RefreshType.IMMEDIATE_LITERAL) {
+//            statement += "IMMEDIATE"; //$NON-NLS-1$
+//        }
+//        else {
+//            statement += "DEFERRED"; //$NON-NLS-1$
+//bgp>        }
+
+        if(table.isOptimizeQuery()) {
+            statement += " ENABLE"; //$NON-NLS-1$
+        }
+        else {
+            statement += " DISABLE"; //$NON-NLS-1$
+        }
+        statement += " QUERY OPTIMIZATION" + NEWLINE; //$NON-NLS-1$
+
+//<bgp	    statement += "MAINTAINED BY "; //$NON-NLS-1$
+//		if(table.getMaintainedBy() == MaintenanceType.SYSTEM_LITERAL) {
+//		    statement += "SYSTEM"; //$NON-NLS-1$
+//		}
+//		else {
+//		    statement += "USER"; //$NON-NLS-1$
+//bgp>        }
+		
+		if (this.generator != null && !EngineeringOptionID.generateInTablespaceClause(this.generator.getSelectedOptions())){ //@d00058820gs
+		} else {
+			statement += this.getTablespaceString(table, quoteIdentifiers);
+		}
+		
+		statement += this.getPartitionKey(table,quoteIdentifiers);
+
+		statement += this.getCompressionValue(table);
+        return statement;
+    }
+
+    public String dropMQT(LUWMaterializedQueryTable table, boolean quoteIdentifiers, boolean qualifyNames) {
+        String tableName = table.getName();
+        String schemaName = table.getSchema().getName();
+
+        if(quoteIdentifiers) {
+            tableName = this.getDoubleQuotedString(tableName);
+            schemaName = this.getDoubleQuotedString(schemaName);
+        }
+
+        if(qualifyNames) {
+            tableName = schemaName + "." + tableName; //$NON-NLS-1$
+        }
+    
+        return "DROP TABLE " + tableName; //$NON-NLS-1$
+    }
+
+    public String dropPackage(LUWDatabasePackage dbpackage, boolean quoteIdentifiers, boolean qualifyNames) {
+    	String schemaName = dbpackage.getSchema().getName();
+    	String packageName = dbpackage.getName();
+    	String versionName = null;
+
+        if(quoteIdentifiers) {
+            schemaName = this.getDoubleQuotedString(schemaName);
+            packageName = this.getDoubleQuotedString(packageName);
+        }
+
+        if(qualifyNames) {
+            packageName = schemaName + "." + packageName; //$NON-NLS-1$
+        }
+        
+        if (dbpackage.getVersion() != null && dbpackage.getVersion().trim().length() > 0) {
+        	versionName = this.getDoubleQuotedString(dbpackage.getVersion().trim());
+        }
+    
+        return "DROP PACKAGE " + packageName + ((versionName != null) ? " VERSION " + versionName : ""); //$NON-NLS-1$
+    }
+    
+    public String createTable(BaseTable table, boolean quoteIdentifiers, boolean qualifyNames) {
+        String tableDefinition = super.createTable(table, quoteIdentifiers, qualifyNames);
+        
+        LUWTable t = (LUWTable) table;
+
+        tableDefinition += this.getTableDimension(t, quoteIdentifiers);
+        tableDefinition += this.getDataCapture(t);
+
+        if (this.generator != null && !EngineeringOptionID.generateInTablespaceClause(this.generator.getSelectedOptions())){ //@d00058820gs
+        } else {
+            tableDefinition += this.getTablespaceString(t, quoteIdentifiers);
+        }
+        tableDefinition += this.getPartitionKey(t,quoteIdentifiers);
+        
+        tableDefinition += this.getCompressionValue(t);
+        
+        return tableDefinition;
+    }
+    
+    public String createView(LUWView view, boolean quoteIdentifiers, boolean qualifyNames) {
+    	QueryExpression expression = view.getQueryExpression();
+    	if (expression == null) {
+        	this.getEngineeringCallBack().writeMessage(MessageFormat.format(
+					LUWDdlMessages.FE_VIEW_HAS_NO_BODY, new Object[] { getName(view, false, true)}));
+        	return null;
+    	}
+
+    	String sql = expression.getSQL();
+    	
+        String viewDefinition = CREATE + SPACE;
+        if(view.isFederated()) {
+            viewDefinition += "FEDERATED "; //$NON-NLS-1$
+        }        
+        viewDefinition += VIEW + SPACE + getName(view, quoteIdentifiers, qualifyNames) + SPACE;
+        
+        String columns = getViewColumnList(view,quoteIdentifiers);
+        if(columns != null) {
+            viewDefinition += LEFT_PARENTHESIS + columns + RIGHT_PARENTHESIS + SPACE;
+        }
+        viewDefinition += AS + NEWLINE;
+        viewDefinition += sql;
+        CheckType checkType = view.getCheckType();
+        if(checkType == CheckType.CASCADED_LITERAL) {
+            viewDefinition += NEWLINE + WITH + SPACE + CASCADED + SPACE + CHECK + SPACE + OPTION;
+        }
+        else if(checkType == CheckType.LOCAL_LITERAL) {
+            viewDefinition += NEWLINE + WITH + SPACE + LOCAL + SPACE + CHECK + SPACE + OPTION;
+        }
+        return viewDefinition;
+    }
+    
+    public String createIndex(Index index, boolean quoteIdentifiers, boolean qualifyNames) {
+    	if (getIndexKeyColumns(index, quoteIdentifiers) == null) {
+        	this.getEngineeringCallBack().writeMessage(MessageFormat.format(
+					LUWDdlMessages.FE_INDEX_MEMBERS_NOT_SPECIFIED, new Object[] { index.getName()}));
+            return null;
+    	}
+        String indexDefinition = super.createIndex(index, quoteIdentifiers, qualifyNames);
+
+        if (index instanceof LUWIndex)
+        {
+        	indexDefinition += getDataPartitionOptions( (LUWIndex)index );
+        }
+        
+        DB2Index ind = (DB2Index) index;
+
+        if(ind.getTable() instanceof LUWNickname) {
+            indexDefinition += " SPECIFICATION ONLY"; //$NON-NLS-1$
+        }
+        else {
+            String included = this.getIndexIncludedColumns(ind, quoteIdentifiers);
+            if(included != null) {
+                indexDefinition += NEWLINE + "INCLUDE (" + included + ")" + NEWLINE; //$NON-NLS-1$ //$NON-NLS-2$
+            }
+            
+            if(ind.isClustered()) {
+                indexDefinition += SPACE + "CLUSTER ";                                 //$NON-NLS-1$
+            }
+            
+            int i = ind.getFillFactor();
+            indexDefinition += SPACE + "PCTFREE " + i; //$NON-NLS-1$
+
+//            DB2IndexType indexType = ind.getIndexType();
+//            if(indexType == DB2IndexType.REGULAR_LITERAL) {
+//                
+//            }
+//            else if(indexType == DB2IndexType.DIMENSION_LITERAL) {
+//                
+//            }
+//            else if(indexType == DB2IndexType.BLOCK_LITERAL) {
+//                
+//            }
+            indexDefinition += NEWLINE + "ALLOW REVERSE SCANS";
+        }
+        
+        return indexDefinition;
+    }
+
+	protected String getDataPartitionOptions( LUWIndex index )
+	{
+		return ""; //$NON-NLS-1$
+	}
+
+    //Nickname
+    public String createNickname(LUWNickname nickname, boolean quoteIdentifiers, boolean qualifyNames) {
+        if (nickname != null) {        
+        	Database database = nickname.getSchema().getDatabase();
+        	ExtendDdlBuilder nicknameDdlBuilder = DdlGenerationUtility.getNicknameDdlBuilder(database.getVendor(),database.getVersion());
+        	if (nicknameDdlBuilder != null) {
+        		String ddl = nicknameDdlBuilder.buildCreateStatement(nickname,quoteIdentifiers,qualifyNames);
+        		if (ddl != null) return ddl;
+        	}
+        }
+   		return null;
+    }
+    
+    public String dropNickname(LUWNickname nickname, boolean quoteIdentifiers, boolean qualifyNames) {
+        if (nickname != null) {      
+        	Database database = nickname.getSchema().getDatabase();
+        	ExtendDdlBuilder nicknameDdlBuilder = DdlGenerationUtility.getNicknameDdlBuilder(database.getVendor(),database.getVersion());
+        	if (nicknameDdlBuilder != null) {
+        		String ddl = nicknameDdlBuilder.buildDropStatement(nickname,quoteIdentifiers,qualifyNames);
+        		if (ddl != null) return ddl;
+        	}
+        }
+   		return null;
+    }
+    
+    public String commentOn(LUWNickname nickname, boolean quoteIdentifiers, boolean qualifyNames) {
+        if (nickname != null) {        
+        	Database database = nickname.getSchema().getDatabase();
+        	ExtendDdlBuilder nicknameDdlBuilder = DdlGenerationUtility.getNicknameDdlBuilder(database.getVendor(),database.getVersion());
+        	if (nicknameDdlBuilder != null) {
+        		String ddl = nicknameDdlBuilder.buildCommentOnStatement(nickname,quoteIdentifiers,qualifyNames);
+        		if (ddl != null) return ddl;
+        	}
+        }
+    	return null;
+    }
+   
+    //Federated Procedure - pyl
+    public String createFederatedProcedure(FederatedProcedure procedure, boolean quoteIdentifiers, boolean qualifyNames) {
+        if (procedure != null) {        
+        	Database database = procedure.getSchema().getDatabase();
+        	ExtendDdlBuilder federatedProcedureDdlBuilder = DdlGenerationUtility.getFederatedProcedureDdlBuilder(database.getVendor(),database.getVersion());
+        	if (federatedProcedureDdlBuilder != null) {
+        		String ddl = federatedProcedureDdlBuilder.buildCreateStatement(procedure,quoteIdentifiers,qualifyNames);
+        		if (ddl != null) return ddl;
+        	}
+        }
+   		return null;
+    }
+    
+    public String dropFederatedProcedure(FederatedProcedure procedure, boolean quoteIdentifiers, boolean qualifyNames) {
+        if (procedure != null) {      
+        	Database database = procedure.getSchema().getDatabase();
+        	ExtendDdlBuilder federatedProcedureDdlBuilder = DdlGenerationUtility.getFederatedProcedureDdlBuilder(database.getVendor(),database.getVersion());
+        	if (federatedProcedureDdlBuilder != null) {
+        		String ddl = federatedProcedureDdlBuilder.buildDropStatement(procedure,quoteIdentifiers,qualifyNames);
+        		if (ddl != null) return ddl;
+        	}
+        }
+   		return null;
+    }
+    
+    public String commentOn(FederatedProcedure procedure, boolean quoteIdentifiers, boolean qualifyNames) {
+        if (procedure != null) {        
+        	Database database = procedure.getSchema().getDatabase();
+        	ExtendDdlBuilder federatedProcedureDdlBuilder = DdlGenerationUtility.getFederatedProcedureDdlBuilder(database.getVendor(),database.getVersion());
+        	if (federatedProcedureDdlBuilder != null) {
+        		String ddl = federatedProcedureDdlBuilder.buildCommentOnStatement(procedure,quoteIdentifiers,qualifyNames);
+        		if (ddl != null) return ddl;
+        	}
+        }
+    	return null;
+    }
+    
+    //Remote Server
+    public String createRemoteServer(LUWServer remoteServer, boolean quoteIdentifiers, boolean qualifyNames) {
+        if (remoteServer != null) {        
+        	Database database = remoteServer.getLUWDatabase();
+        	ExtendDdlBuilder remoteServerDdlBuilder = DdlGenerationUtility.getRemoteServerDdlBuilder(database.getVendor(),database.getVersion());
+        	if (remoteServerDdlBuilder != null) {
+        		String ddl = remoteServerDdlBuilder.buildCreateStatement(remoteServer,quoteIdentifiers,qualifyNames);
+        		if (ddl != null) return ddl;
+        	}
+        }
+   		return null;
+    }
+   
+    public String dropRemoteServer(LUWServer remoteServer, boolean quoteIdentifiers, boolean qualifyNames) {
+        if (remoteServer != null) {
+        	Database database = remoteServer.getLUWDatabase();
+        	ExtendDdlBuilder remoteServerDdlBuilder = DdlGenerationUtility.getRemoteServerDdlBuilder(database.getVendor(),database.getVersion());
+        	if (remoteServerDdlBuilder != null) {
+        		String ddl = remoteServerDdlBuilder.buildDropStatement(remoteServer,quoteIdentifiers,qualifyNames);
+        		if (ddl != null) return ddl;
+        	}
+        }
+   		return null;   		
+    }
+
+    public String commentOn(LUWServer remoteServer, boolean quoteIdentifiers, boolean qualifyNames) {
+        if (remoteServer != null) {        
+            Database database = remoteServer.getLUWDatabase();
+            ExtendDdlBuilder remoteServerDdlBuilder = DdlGenerationUtility.getRemoteServerDdlBuilder(database.getVendor(),database.getVersion());
+            if (remoteServerDdlBuilder != null) {
+                String ddl = remoteServerDdlBuilder.buildCommentOnStatement(remoteServer,quoteIdentifiers,qualifyNames);
+                if (ddl != null) return ddl;
+            }
+        }
+        return null;    	
+    }
+    
+    //Wrapper
+    public String createWrapper(LUWWrapper wrapper, boolean quoteIdentifiers, boolean qualifyNames) {
+        if (wrapper != null) {
+            Database database = wrapper.getLUWDatabase();
+            ExtendDdlBuilder wrapperDdlBuilder = DdlGenerationUtility.getWrapperDdlBuilder(database.getVendor(),database.getVersion());
+            if (wrapperDdlBuilder != null) {
+                String ddl = wrapperDdlBuilder.buildCreateStatement(wrapper,quoteIdentifiers,qualifyNames);
+                if (ddl != null) return ddl;
+            }
+        }
+        return null;
+    }
+   
+    public String dropWrapper(LUWWrapper wrapper, boolean quoteIdentifiers, boolean qualifyNames) {
+        if (wrapper != null) {        
+            Database database = wrapper.getLUWDatabase();
+            ExtendDdlBuilder wrapperDdlBuilder = DdlGenerationUtility.getWrapperDdlBuilder(database.getVendor(),database.getVersion());
+            if (wrapperDdlBuilder != null) {
+                String ddl = wrapperDdlBuilder.buildDropStatement(wrapper, quoteIdentifiers,qualifyNames);
+                if (ddl != null) return ddl;
+            }
+        }
+        return null;
+    }    
+
+    public String commentOn(LUWWrapper wrapper, boolean quoteIdentifiers, boolean qualifyNames) {
+        if (wrapper != null) {        
+            Database database = wrapper.getLUWDatabase();
+            ExtendDdlBuilder wrapperDdlBuilder = DdlGenerationUtility.getWrapperDdlBuilder(database.getVendor(),database.getVersion());
+            if (wrapperDdlBuilder != null) {
+                String ddl = wrapperDdlBuilder.buildCommentOnStatement(wrapper,quoteIdentifiers,qualifyNames);
+                if (ddl != null) return ddl;
+            }
+        }
+        return null;
+    }    
+
+    //User Mapping
+    public String createUserMapping(LUWUserMapping userMapping, boolean quoteIdentifiers, boolean qualifyNames) {
+        if (userMapping != null) {
+            LUWServer luwServer = userMapping.getServer();
+            if (luwServer != null) {
+                Database database = luwServer.getLUWDatabase();
+                ExtendDdlBuilder userMappingDdlBuilder = DdlGenerationUtility.getUserMappingDdlBuilder(database.getVendor(),database.getVersion());
+                if (userMappingDdlBuilder != null) {
+                    String ddl = userMappingDdlBuilder.buildCreateStatement(userMapping,quoteIdentifiers,qualifyNames);
+                    if (ddl != null) return ddl;
+                }
+            }
+        }
+        return null;
+    }
+   
+    public String dropUserMapping(LUWUserMapping userMapping, boolean quoteIdentifiers, boolean qualifyNames) {
+        if (userMapping != null) {
+            LUWServer luwServer = userMapping.getServer();
+            if (luwServer != null) {
+                Database database = luwServer.getLUWDatabase();
+                ExtendDdlBuilder userMappingDdlBuilder = DdlGenerationUtility.getUserMappingDdlBuilder(database.getVendor(),database.getVersion());
+                if (userMappingDdlBuilder != null) {
+                    String ddl = userMappingDdlBuilder.buildDropStatement(userMapping, quoteIdentifiers,qualifyNames);
+                    if (ddl != null) return ddl;
+                }
+            }
+        }
+        return null;
+    }    
+
+    public String commentOn(LUWUserMapping userMapping, boolean quoteIdentifiers, boolean qualifyNames) {
+        if (userMapping != null) {        
+            LUWServer luwServer = userMapping.getServer();
+            if (luwServer != null) {
+                Database database = luwServer.getLUWDatabase();
+                ExtendDdlBuilder userMappingDdlBuilder = DdlGenerationUtility.getUserMappingDdlBuilder(database.getVendor(),database.getVersion());
+                if (userMappingDdlBuilder != null) {
+                    String ddl = userMappingDdlBuilder.buildCommentOnStatement(userMapping,quoteIdentifiers,qualifyNames);
+                    if (ddl != null) return ddl;
+                }
+            }
+        }
+        return null;
+    }    
+    
+    /* //    xml schema drop done via stored procedure now 
+     * 	Currently XMLSupport is limited to LUW. Once it is extended to i/zSeries,
+	 *  this should be implemented by parent class. 
+     * @param xmlSchema the XMLSchemaobject to be dropped
+     * @param quoteIdentifiers 
+     * @param qualifyNames
+     * @return the DDL drop statement of the XMLSchema 
+     
+    public String dropXMLSchema(LUWCatalogXmlSchema xmlSchema, boolean quoteIdentifiers, boolean qualifyNames){
+    	String dropStatement = null;
+    	// construct the actual drop statement
+    	dropStatement = DROP + SPACE + XSROBJECT + SPACE;
+
+    	
+    	String schemaName = xmlSchema.getName();
+    	String dbSchemaName = xmlSchema.getSchema().getName();
+        if(quoteIdentifiers) {
+            schemaName = this.getDoubleQuotedString(schemaName);
+            dbSchemaName = this.getDoubleQuotedString(dbSchemaName);
+        }
+        
+        if(qualifyNames) {
+            dropStatement += dbSchemaName + "." + schemaName; //$NON-NLS-1$
+        }else{
+        	dropStatement += schemaName;
+        }
+        return dropStatement;
+    }
+*/
+    public String commentOn(LUWTableSpace tablespace, boolean quoteIdentifiers) {
+        String comment = tablespace.getDescription();
+        if(comment == null || comment.equals("")) { //$NON-NLS-1$
+            return null;
+        }
+
+        String tablespaceName = tablespace.getName();
+
+        if(quoteIdentifiers) {
+            tablespaceName = this.getDoubleQuotedString(tablespaceName);
+        }
+
+        return "COMMENT ON TABLESPACE " + tablespaceName + " IS" + NEWLINE + this.getSingleQuotedString(comment); //$NON-NLS-1$ //$NON-NLS-2$
+    }
+
+    public String createPartitionGroup(LUWPartitionGroup pg, boolean quoteIdentifiers) {
+        String pgName = pg.getName();
+        if (pgName.startsWith(IBM) ||
+        		pgName.startsWith(SYS)) return null;
+
+        if(quoteIdentifiers) {
+            pgName = this.getDoubleQuotedString(pgName);
+        }
+
+        String statement = CREATE + SPACE + DATABASE + SPACE + PARTITION_GROUP + SPACE + pgName + " ON " ; //$NON-NLS-1$ //$NON-NLS-2$
+
+        String partitions = ""; //$NON-NLS-1$
+        boolean isAllPartition = true;
+        Iterator it = pg.getPartitions().iterator();
+        while(it.hasNext()) {
+            LUWDatabasePartition partition = (LUWDatabasePartition) it.next();
+            int partitionNum = partition.getNumber();
+            if (partitionNum >=0 ) {
+                partitions += partition.getNumber();
+	            if(it.hasNext()) {
+	            	partitions += ", ";                 //$NON-NLS-1$
+	            }
+	            isAllPartition = false;
+            } else {
+            	break;
+            }
+        }
+        
+        if (isAllPartition) {
+        	statement += "ALL DBPARTITIONNUMS"; //$NON-NLS-1$
+        } else {
+        	statement += "DBPARTITIONNUMS " + LEFT_PARENTHESIS + partitions + RIGHT_PARENTHESIS;
+        }
+        return statement;
+    }
+    
+    public String dropPartitionGroup(LUWPartitionGroup pg, boolean quoteIdentifiers) {
+        String pgName = pg.getName();
+        if (pgName.startsWith(IBM) ||
+        		pgName.startsWith(SYS)) return null;
+
+        if(quoteIdentifiers) {
+            pgName = this.getDoubleQuotedString(pgName);
+        }
+        return DROP + SPACE + DATABASE + SPACE + PARTITION_GROUP + SPACE + pgName; //$NON-NLS-1$
+    }
+
+    public String commentOn(LUWPartitionGroup pg, boolean quoteIdentifiers) {
+        String comment = pg.getDescription();
+        if(comment == null || comment.equals("")) { //$NON-NLS-1$
+            return null;
+        }
+
+        String pgName = pg.getName();
+
+        if(quoteIdentifiers) {
+            pgName = this.getDoubleQuotedString(pgName);
+        }
+
+        return COMMENT + SPACE + ON + SPACE + DATABASE + SPACE + PARTITION_GROUP + SPACE + pgName + " IS" + NEWLINE + this.getSingleQuotedString(comment); //$NON-NLS-1$ //$NON-NLS-2$
+    }
+    
+    public String createStructuredUserDefinedType(StructuredUserDefinedType type, boolean quoteIdentifiers, boolean qualifyNames) {
+    	EList attrs = type.getAttributes();
+    	//wsdbu00240410
+//    	String dependStatement = " depends on ";
+//    	boolean depends = false;
+
+        EObject root = ContainmentServiceImpl.INSTANCE.getRootElement(type);
+        Schema schema = type.getSchema();
+        Database database = ModelHelper.getDatabase(schema);
+        DatabaseDefinition def = null;
+        if(root instanceof Database) {
+            def = DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition((Database) root);
+        }
+        else {
+            //TODO report error
+            return null;
+        }
+    	
+        String statement = CREATE + SPACE + TYPE + SPACE + getName(type, quoteIdentifiers, qualifyNames);
+    	
+        StructuredUserDefinedType superType = type.getSuper();
+        if (superType != null) {
+        	statement += SPACE + UNDER + SPACE + getName(superType,quoteIdentifiers,qualifyNames);
+        	//wsdbu00240410
+//        	depends = true;
+//        	dependStatement += getName(superType,quoteIdentifiers,qualifyNames);
+
+        }
+        
+        
+        if (!attrs.isEmpty()) {
+	        statement += SPACE + AS + LEFT_PARENTHESIS;
+	        
+	        Iterator it = attrs.iterator();
+	        while(it.hasNext()) {
+	        	LUWAttributeDefinition attr = (LUWAttributeDefinition) it.next();
+	        	String typeName = getDataTypeString(attr,schema,quoteIdentifiers,qualifyNames);
+	            statement += NEWLINE + TAB + attr.getName() + SPACE + typeName;
+	            if (typeName.indexOf("CLOB") !=-1 ||typeName.indexOf("BLOB") != -1) {
+	            	statement += getLOBLoggedClause(attr);
+	    	        if (attr.isLOBCompacted()) statement += " COMPACT";
+	            }
+
+	            if(it.hasNext()) {
+	            	statement += ", ";                 //$NON-NLS-1$
+	            }
+	            //wsdbu00240410
+//	            if(attr.getDataType() instanceof StructuredUserDefinedType){
+//	               if(!depends){
+//	                   depends = true;
+//	                   dependStatement += typeName;
+//	                }else{
+//	                    dependStatement += ","+ typeName;
+//	                }
+//	            }
+	        }
+	        statement += RIGHT_PARENTHESIS;
+    	
+        }
+        
+        if (!type.isInstantiable()) {
+        	statement += NEWLINE + TAB + "NOT INSTANTIABLE"; //$NON-NLS-1$
+        }
+
+        if (type.isFinal()) {
+        	statement += NEWLINE + TAB + "FINAL"; //$NON-NLS-1$
+        }
+        
+        statement += NEWLINE + TAB + "MODE DB2SQL"; //$NON-NLS-1$
+        //wsdbu00240410
+//        if(depends)
+//           statement += dependStatement;
+        return statement;
+    }
+    
+    public String commentOn(StructuredUserDefinedType type, boolean quoteIdentifiers, boolean qualifyNames) {
+        String comment = type.getDescription();
+        if(comment == null || comment.length() == 0) {
+            return null;
+        }
+
+        String name = getName(type, quoteIdentifiers, qualifyNames);
+
+        return COMMENT + SPACE + ON + SPACE + TYPE + SPACE + name + SPACE + IS
+        	+ NEWLINE + this.getSingleQuotedString(comment);
+    }
+    
+    public String createModule(LUWModule module,boolean quoteIdentifiers, boolean qualifyNames ){
+    	ILUWModuleDdlBuilder moduleBuilder = LUWDdlGenerator.getModuleDdlBuilder();
+    	if (moduleBuilder != null) {
+    		return moduleBuilder.buildCreateStatement(module, quoteIdentifiers, qualifyNames);
+    	}
+    	return null;
+    }
+
+    public String dropModule(LUWModule module,boolean quoteIdentifiers, boolean qualifyNames ){
+    	ILUWModuleDdlBuilder moduleBuilder = LUWDdlGenerator.getModuleDdlBuilder();
+    	if (moduleBuilder != null) {
+    		return moduleBuilder.buildDropStatement(module, quoteIdentifiers, qualifyNames);
+    	}
+    	return null;
+    }
+
+    public String commentOn(LUWModule module,boolean quoteIdentifiers, boolean qualifyNames ){
+    	ILUWModuleDdlBuilder moduleBuilder = LUWDdlGenerator.getModuleDdlBuilder();
+    	if (moduleBuilder != null) {
+    		return moduleBuilder.buildCommentStatement(module, quoteIdentifiers, qualifyNames);
+    	}
+    	return null;
+    }
+
+    public String createModuleCondition(LUWModuleCondition condtion, boolean quoteIdentifiers, boolean qualifyNames ){
+    	return this.createModuleObject(condtion, quoteIdentifiers, qualifyNames);
+    }
+
+    public String dropModuleCondition(LUWModuleCondition condtion,boolean quoteIdentifiers, boolean qualifyNames ){
+    	return this.dropModuleObject(condtion, quoteIdentifiers, qualifyNames);
+    }
+
+    public String createModuleGlobalVariable(LUWModuleGlobalVariable variable, boolean quoteIdentifiers, boolean qualifyNames ){
+    	return this.createModuleObject(variable, quoteIdentifiers, qualifyNames);
+    }
+
+    public String dropModuleGlobalVariable(LUWModuleGlobalVariable condtion,boolean quoteIdentifiers, boolean qualifyNames ){
+    	return this.dropModuleObject(condtion, quoteIdentifiers, qualifyNames);
+    }
+
+    public String createGlobalVariable(LUWGlobalVariable variable, boolean quoteIdentifiers, boolean qualifyNames ){
+    	StringBuffer text = new StringBuffer();
+    	text.append(CREATE).append(SPACE).append(VARIABLE).append(SPACE)
+    		.append(getName(variable, quoteIdentifiers,qualifyNames)).append(SPACE)
+    		.append(getDataTypeString(variable, variable.getSchema(), quoteIdentifiers,qualifyNames));
+    	
+    	String expression = variable.getDefaultValue();
+    	if (expression != null && !"".equals(expression)) {
+    		if (variable.isIsConstant()) {
+    			text.append(NEWLINE).append(TAB).append(CONSTANT);
+    		}else {
+    			text.append(NEWLINE).append(TAB).append(DEFAULT);
+    		}
+    			
+    		text.append(SPACE).append(LEFT_PARENTHESIS).append(expression).append(RIGHT_PARENTHESIS);
+    		
+    	}
+    	return text.toString();
+    }
+
+    public String dropGlobalVariable(LUWGlobalVariable variable ,boolean quoteIdentifiers, boolean qualifyNames ){
+    	StringBuffer text = new StringBuffer();
+    	text.append(DROP).append(SPACE).append(VARIABLE).append(SPACE)
+    		.append(getName(variable, quoteIdentifiers,qualifyNames));
+    	return text.toString();
+    }
+
+    public String createArrayDataType(LUWArrayDataType type, boolean quoteIdentifiers, boolean qualifyNames ){
+    	if (type instanceof LUWModuleArrayDataType) {
+        	return this.createModuleObject((LUWModuleArrayDataType)type, quoteIdentifiers, qualifyNames);
+    	}
+    	
+    	StringBuffer text = new StringBuffer();
+    	text.append(CREATE).append(SPACE).append(TYPE).append(SPACE)
+    		.append(getName(type, quoteIdentifiers,qualifyNames)).append(SPACE).append(AS).append(SPACE)
+    		.append(getDataTypeString(type.getElementType(), type.getSchema(),quoteIdentifiers, qualifyNames)).append(SPACE)
+    		.append(ARRAY).append(SPACE).append("[").append(type.getMaxCardinality()>0?type.getMaxCardinality():EMPTY_STRING).append("]");
+    		
+    	return text.toString();
+    }
+
+    public String createRowDataType(LUWRowDataType type, boolean quoteIdentifiers, boolean qualifyNames ){
+    	if (type instanceof LUWModuleRowDataType) {
+        	return this.createModuleObject((LUWModuleRowDataType)type, quoteIdentifiers, qualifyNames);
+    	}
+    	
+    	StringBuffer text = new StringBuffer();
+    	text.append(CREATE).append(SPACE).append(TYPE).append(SPACE)
+    		.append(getName(type, quoteIdentifiers,qualifyNames)).append(SPACE).append(AS).append(SPACE).append(ROW);
+
+    	EList fields = type.getFields();
+        if (!fields.isEmpty()) {
+	        text.append(LEFT_PARENTHESIS);
+	        
+	        Iterator it = fields.iterator();
+	        while(it.hasNext()) {
+	        	Field field = (Field) it.next();
+	        	String typeName = getDataTypeString(field,type.getSchema(),quoteIdentifiers,qualifyNames);
+	            text.append(NEWLINE).append(TAB).append(field.getName()).append(SPACE).append(typeName);
+
+	            if(it.hasNext()) {
+	            	text.append(", ");                 //$NON-NLS-1$
+	            }
+	        }
+	        text.append(RIGHT_PARENTHESIS);
+    	
+        }
+    	
+    	return text.toString();
+    }
+
+    public String createCursorDataType(LUWCursorDataType type, boolean quoteIdentifiers, boolean qualifyNames ){
+    	if (type instanceof LUWModuleCursorDataType) {
+        	return this.createModuleObject((LUWModuleCursorDataType)type, quoteIdentifiers, qualifyNames);
+    	}
+    	
+    	StringBuffer text = new StringBuffer();
+    	text.append(CREATE).append(SPACE).append(TYPE).append(SPACE)
+    		.append(getName(type, quoteIdentifiers,qualifyNames)).append(SPACE).append(AS).append(SPACE);
+
+    	LUWRowDataType rowType = type.getRowType();
+    	if (rowType != null) {
+    		text.append(this.getName(rowType, quoteIdentifiers,qualifyNames)).append(SPACE);
+    		
+    	}
+    	text.append(CURSOR);
+
+    	return text.toString();
+    }
+
+    public String createModuleDistinctType(LUWModuleDistinctType type, boolean quoteIdentifiers, boolean qualifyNames ){
+    	return this.createModuleObject(type, quoteIdentifiers, qualifyNames);
+    }
+
+    public String dropUserDefinedType(UserDefinedType type, boolean quoteIdentifiers, boolean qualifyNames) {
+    	if (type instanceof LUWModuleObject) {
+        	return this.dropModuleObject((LUWModuleObject)type, quoteIdentifiers, qualifyNames);
+    	}
+    	return super.dropUserDefinedType(type, quoteIdentifiers, qualifyNames);
+    }
+
+    public String commentOn(LUWModuleCondition condtion,boolean quoteIdentifiers, boolean qualifyNames ){
+    	return this.commentOnModuleObject(condtion, quoteIdentifiers, qualifyNames);
+    }
+
+    public String dropPlsqlPackage(PLSQLPackage plPackage,boolean quoteIdentifiers, boolean qualifyNames) {
+    	ILUWModuleDdlBuilder moduleBuilder = LUWDdlGenerator.getModuleDdlBuilder();
+    	if (moduleBuilder != null) {
+    		return moduleBuilder.buildDropStatement(plPackage, quoteIdentifiers, qualifyNames);
+    	}
+    	return null;
+    }
+
+    public String createPlsqlPackage(PLSQLPackage plPackage,boolean quoteIdentifiers, boolean qualifyNames) {
+    	ILUWModuleDdlBuilder moduleBuilder = LUWDdlGenerator.getModuleDdlBuilder();
+    	if (moduleBuilder != null) {
+    		return moduleBuilder.buildCreateStatement(plPackage, quoteIdentifiers, qualifyNames);
+    	}
+    	return null;
+    }
+    
+    public String dropPlsqlPackageBody(PLSQLPackageBody packageBody,boolean quoteIdentifiers, boolean qualifyNames) {
+    	ILUWModuleDdlBuilder moduleBuilder = LUWDdlGenerator.getModuleDdlBuilder();
+    	if (moduleBuilder != null) {
+    		return moduleBuilder.buildDropStatement(packageBody, quoteIdentifiers, qualifyNames);
+    	}
+    	return null;
+    }
+
+    public String createPlsqlPackageBody(PLSQLPackageBody packageBody,boolean quoteIdentifiers, boolean qualifyNames) {
+    	ILUWModuleDdlBuilder moduleBuilder = LUWDdlGenerator.getModuleDdlBuilder();
+    	if (moduleBuilder != null) {
+    		return moduleBuilder.buildCreateStatement(packageBody, quoteIdentifiers, qualifyNames);
+    	}
+    	return null;
+    }
+
+    public String createProcedure(DB2Procedure procedure, boolean quoteIdentifiers, boolean qualifyNames) {
+    	if (procedure instanceof LUWModuleObject) {
+        	return this.createModuleObject((LUWModuleObject)procedure, quoteIdentifiers, qualifyNames);
+    	}
+    	return super.createProcedure(procedure, quoteIdentifiers, qualifyNames);
+    }
+    
+    public String dropProcedure(Procedure procedure, boolean quoteIdentifiers, boolean qualifyNames) {
+    	if (procedure instanceof LUWModuleObject) {
+        	return this.dropModuleObject((LUWModuleObject)procedure, quoteIdentifiers, qualifyNames);
+    	}
+    	return super.dropProcedure(procedure, quoteIdentifiers, qualifyNames);
+    	
+    }
+
+    public String commentOn(Procedure procedure, boolean quoteIdentifiers, boolean qualifyNames) {
+    	if (procedure instanceof LUWModuleObject) {
+        	return this.commentOnModuleObject((LUWModuleObject)procedure, quoteIdentifiers, qualifyNames);
+    	}
+    	return super.commentOn(procedure, quoteIdentifiers, qualifyNames);
+    }
+    
+    public String createUserDefinedFunction(DB2UserDefinedFunction function, boolean quoteIdentifiers, boolean qualifyNames) {
+    	if (function instanceof LUWModuleObject) {
+        	return this.createModuleObject((LUWModuleObject)function, quoteIdentifiers, qualifyNames);
+    	}
+    	return super.createUserDefinedFunction(function, quoteIdentifiers, qualifyNames);
+    }
+    
+    public String dropFunction(UserDefinedFunction function, boolean quoteIdentifiers, boolean qualifyNames) {
+    	if (function instanceof LUWModuleObject) {
+        	return this.dropModuleObject((LUWModuleObject)function, quoteIdentifiers, qualifyNames);
+    	}
+    	return super.dropFunction(function, quoteIdentifiers, qualifyNames);
+    }
+
+    public String commentOn(UserDefinedFunction function, boolean quoteIdentifiers, boolean qualifyNames) {
+    	if (function instanceof LUWModuleObject) {
+        	return this.commentOnModuleObject((LUWModuleObject)function, quoteIdentifiers, qualifyNames);
+    	}
+    	return super.commentOn(function, quoteIdentifiers, qualifyNames);
+    }
+
+    public String commentOn(Role role, boolean quoteIdentifiers, boolean qualifyNames) {
+    	return null;   //only LUW 9.5 and above version support it.
+    }
+    
+    public String alterCommentOn(SQLObject sqlObject, boolean quoteIdentifiers, boolean qualifyNames) {
+        String comment = sqlObject.getDescription();
+        if(comment == null || comment.length() == 0) {
+        	comment =SINGLE_QUOTE + SINGLE_QUOTE;
+        }
+        String commentType = getCommentType(sqlObject,quoteIdentifiers,qualifyNames);
+        return commentType==null? "":COMMENT + SPACE + ON + SPACE + commentType + SPACE + IS + SPACE
+                + this.getSingleQuotedString(comment);
+    }
+    
+    public String commentOn(Sequence sequence, boolean quoteIdentifiers, boolean qualifyNames) {
+    	return null;   //only LUW 9.7 and above version support it.
+    }
+
+    protected String getCommentType(SQLObject sqlObject,boolean quoteIdentifiers, boolean qualifyNames) {
+        String comments = "";
+        if (sqlObject instanceof LUWTable) {
+        	comments += TABLE + SPACE + getName((Table)sqlObject,quoteIdentifiers,qualifyNames);
+        } else if (sqlObject instanceof LUWView) {
+        	comments += TABLE + SPACE + getName((Table)sqlObject,quoteIdentifiers,qualifyNames);
+    	} else if (sqlObject instanceof LUWMaterializedQueryTable) {
+    		comments += TABLE + SPACE + getName((Table)sqlObject,quoteIdentifiers,qualifyNames);
+    	} else if (sqlObject instanceof LUWTableSpace) {
+    		comments += TABLESPACE + SPACE + getName((LUWTableSpace)sqlObject,quoteIdentifiers);
+    	} else if (sqlObject instanceof DB2Alias) {
+    		comments += ALIAS + SPACE + getName((DB2Alias)sqlObject,quoteIdentifiers,qualifyNames);
+    	} else if (sqlObject instanceof Procedure) {
+    		comments += PROCEDURE + SPACE + getName((Procedure)sqlObject,quoteIdentifiers,qualifyNames);
+    	} else if (sqlObject instanceof Function) {
+    		comments += FUNCTION + SPACE + getName((Function)sqlObject,quoteIdentifiers,qualifyNames);
+    	} else if (sqlObject instanceof Trigger) {
+    		comments += TRIGGER + SPACE + getName((Trigger)sqlObject,quoteIdentifiers,qualifyNames);
+    	} else if (sqlObject instanceof TableConstraint) {
+    		comments += CONSTRAINT + SPACE + getTableConstraintName((TableConstraint)sqlObject,quoteIdentifiers,qualifyNames);
+    	} else if (sqlObject instanceof Index) {
+    		comments += INDEX + SPACE + getName((Index)sqlObject,quoteIdentifiers,qualifyNames);
+    	} else if (sqlObject instanceof DistinctUserDefinedType) {
+    		comments += DISTINCT + SPACE + TYPE + SPACE + getName((DistinctUserDefinedType)sqlObject,quoteIdentifiers,qualifyNames);
+    	} else if (sqlObject instanceof StructuredUserDefinedType ) {
+    		comments += TYPE + SPACE + getName((StructuredUserDefinedType )sqlObject,quoteIdentifiers,qualifyNames);
+    	} else if (sqlObject instanceof Column ) {
+    		comments += COLUMN + SPACE + getName((Column )sqlObject,quoteIdentifiers,qualifyNames);
+    	} else if (sqlObject instanceof LUWPartitionGroup ) {
+    		comments += DATABASE + SPACE + PARTITION_GROUP + SPACE + getName((LUWPartitionGroup )sqlObject,quoteIdentifiers);
+    	} else if (sqlObject instanceof Schema ) {
+    		comments += SCHEMA + SPACE +  getName((Schema )sqlObject,quoteIdentifiers,qualifyNames);
+    	}
+        return comments;
+    }
+    
+    public String alterObject(LUWTable element) {
+        String statement = createTable(element, true, true);
+        if(statement != null) {
+	        statement = "CALL SYSPROC.ALTOBJ(" + NEWLINE  //$NON-NLS-1$
+	        	+ "\t'APPLY_CONTINUE_ON_ERROR'," + NEWLINE //$NON-NLS-1$
+				+ "\t'" + statement + "'," + NEWLINE //$NON-NLS-1$ //$NON-NLS-2$
+				+ "\t-1, ?)"; //$NON-NLS-1$
+        }
+        return statement;
+	}
+    
+    //@bd00062627gs
+    public String addUniqueConstraint(UniqueConstraint constraint, boolean quoteIdentifiers, boolean qualifyNames) {
+    	String statement = super.addUniqueConstraint(constraint, quoteIdentifiers, qualifyNames);
+
+    	if (constraint.eContainer() instanceof LUWNickname) {
+    		if (statement == null) return null; //report error
+    		//statement += this.getEnforcedOption(constraint);
+    		statement += SPACE + NOT + SPACE + ENFORCED;// + SPACE + ENABLE + SPACE + QUERY + SPACE + OPTIMIZATION;
+    	}
+
+    	return statement;
+    }
+    //@ed00062627gs
+
+    //@bd00062627gs
+    public String addCheckConstraint(CheckConstraint constraint, boolean quoteIdentifiers, boolean qualifyNames) {
+    	String statement = super.addCheckConstraint(constraint,quoteIdentifiers,qualifyNames);
+    	if (constraint.eContainer() instanceof LUWNickname) {
+    		if (statement == null) return null; //report error
+        	if (constraint.isEnforced()) //if NOT ENFORCED was not already added, add it
+    		   statement += SPACE + NOT + SPACE + ENFORCED;// + SPACE + ENABLE + SPACE + QUERY + SPACE + OPTIMIZATION;
+    	}    	
+    	return statement;
+    } 
+    //@ed00062627gs
+
+    //@bd00062627gs
+    public String addForeignKey(ForeignKey foreignKey, boolean quoteIdentifiers, boolean qualifyNames) {
+        UniqueConstraint uniqueConstraint = foreignKey.getUniqueConstraint();
+        Index index = foreignKey.getUniqueIndex();
+        Table parentTable = null;
+        String parentKey = null;
+        if(uniqueConstraint != null) {
+            parentTable = uniqueConstraint.getBaseTable();
+            parentKey = this.getKeyColumns(uniqueConstraint,quoteIdentifiers);
+            if (parentKey == null) {
+            	this.getEngineeringCallBack().writeMessage(MessageFormat.format(
+    					LUWDdlMessages.FE_REFERENCED_PARENT_KEY_DOES_NOT_EXIST, new Object[] { foreignKey.getName()}));
+                return null;
+            }
+        }
+        else if(index != null) {
+        	parentTable = index.getTable();
+            parentKey = this.getParentKeyColumns(index, quoteIdentifiers);
+            if (parentKey == null) {
+            	this.getEngineeringCallBack().writeMessage(MessageFormat.format(
+    					LUWDdlMessages.FE_REFERENCED_PARENT_KEY_DOES_NOT_EXIST, new Object[] { foreignKey.getName()}));
+                return null;
+            }
+        }
+        if(parentTable == null) {
+        	this.getEngineeringCallBack().writeMessage(MessageFormat.format(
+					LUWDdlMessages.FE_REFERENCED_PARENT_TABLE_DOES_NOT_EXIST, new Object[] { foreignKey.getName()}));
+            return null;
+        }
+
+        String statement = ALTER + SPACE + this.getOwnerType(foreignKey) + SPACE + getName(foreignKey.getBaseTable(), quoteIdentifiers, qualifyNames)
+        	+ SPACE + ADD + SPACE + CONSTRAINT + SPACE + getName(foreignKey, quoteIdentifiers) + SPACE + FOREIGN_KEY 
+        	+ this.getKeyColumns(foreignKey,quoteIdentifiers);
+        statement += NEWLINE + TAB + REFERENCES + SPACE + getName(parentTable, quoteIdentifiers, qualifyNames) 	+ parentKey;
+		
+        if (foreignKey.eContainer() instanceof LUWNickname) {
+        	statement += SPACE + NOT + SPACE + ENFORCED;// + SPACE + ENABLE + SPACE + QUERY + SPACE + OPTIMIZATION;
+        } else {
+	        ReferentialActionType action = foreignKey.getOnDelete();
+	        if(action != ReferentialActionType.NO_ACTION_LITERAL) {
+	            statement += NEWLINE + TAB + ON + SPACE + DELETE + SPACE;            
+	        }
+	        statement += getReferentialAction(action);
+	        
+	        action = foreignKey.getOnUpdate();
+	        if(action != ReferentialActionType.NO_ACTION_LITERAL) {
+	            statement += NEWLINE + TAB + ON + SPACE + UPDATE + SPACE;            
+	        }
+	        statement += getReferentialAction(action);
+	
+	        if(foreignKey.isDeferrable()) {
+	            statement += NEWLINE + TAB + getDeferrableClause(foreignKey);
+	        }
+	        
+	        statement += this.getEnforcedOption(foreignKey);
+        }
+
+        return statement;
+    }
+    //@ed00062627gs
+
+    public String[] grantOn(LUWTableSpace tablespace, boolean quoteIdentifiers) {
+        String tablespaceName = tablespace.getName();
+        if(quoteIdentifiers) {
+            tablespaceName = this.getDoubleQuotedString(tablespaceName);
+        }
+    	return getGrantString(tablespace,quoteIdentifiers, false);
+    }
+
+    public String[] revokeFrom(LUWTableSpace tablespace, boolean quoteIdentifiers) {
+        String tablespaceName = tablespace.getName();
+        if(quoteIdentifiers) {
+            tablespaceName = this.getDoubleQuotedString(tablespaceName);
+        }
+    	return getRevokeString(tablespace,quoteIdentifiers, false);
+    }
+    
+    public String alterTableAlterProperties(Table table, int propertyType, boolean quoteIdentifiers, boolean qualifyNames) {
+    	if(!(table instanceof LUWTable)) return null;
+
+        String proString = "";
+        if ((propertyType & LUWDeltaDdlGenerator.DATA_CAPTURE) == LUWDeltaDdlGenerator.DATA_CAPTURE) {
+        	proString += this.getDataCapture((LUWTable)table);
+        }
+        
+        if ((propertyType & LUWDeltaDdlGenerator.VALUE_COMPRESSION) == LUWDeltaDdlGenerator.VALUE_COMPRESSION) {
+        	proString += this.getAlterTableAlterValueCompressionString((LUWTable)table);
+        }
+
+        if ((propertyType & LUWDeltaDdlGenerator.VOLATILE) == LUWDeltaDdlGenerator.VOLATILE) {
+        	proString += this.getAlterTableAlterVolatileString((LUWTable)table);
+        }
+
+        if ((propertyType & LUWDeltaDdlGenerator.COMPRESSION) == LUWDeltaDdlGenerator.COMPRESSION) {
+        	proString += this.getAlterTableAlterRowCompressionString((LUWTable)table);
+        }
+        
+        if (!proString.equals("")) { //$NON-NLS-1$
+            String statement = ALTER + SPACE + TABLE + SPACE + getName(table, quoteIdentifiers, qualifyNames) 
+            + proString;
+            return statement;
+        }
+        return null;
+    }
+
+    public String alterTableAlterPartitionKey(LUWStorageTable table,  boolean quoteIdentifiers, boolean qualifyNames) {
+    	String statement = ALTER + SPACE + TABLE + SPACE + getName((Table)table, quoteIdentifiers, qualifyNames);
+    	LUWPartitionKey partitionKey = table.getPartitionKey();
+    	if ((partitionKey == null) || partitionKey.getColumns().isEmpty()) {   //drop
+    		statement += " DROP PARTITIONING KEY"; //$NON-NLS-1$
+    	} else {					// modify
+    		statement += SPACE + ADD + SPACE + getPartitionKeyDefinition(partitionKey,quoteIdentifiers);
+    	}
+    	return statement;
+    }
+
+    
+	public String getGrantPrivilegeStatement(Privilege privilege,boolean quoteIdentifiers,boolean qualifyNames) {
+		if (this.isDDLSupressable(privilege)) {
+			if (this.getEngineeringCallBack() != null) {
+				String message = getSystemGrantMessage(GRANT,privilege,quoteIdentifiers,qualifyNames);
+				this.getEngineeringCallBack().writeMessage(message);
+			}
+			return null;
+		}
+		AuthorizationIdentifier authId = privilege.getGrantee();
+		String granteeType = "";
+		if (authId.getName().equals("PUBLIC")) granteeType="";
+		else if (authId instanceof User) granteeType = USER;
+		else if ((authId instanceof Group) && (!authId.getName().equals("PUBLIC"))) granteeType = GROUP;
+		else if (authId instanceof Role) granteeType = ROLE;
+		String prep = ON;
+		if (privilege.getObject() instanceof LUWTableSpace) prep = OF;
+		String ret = GRANT + SPACE + privilege.getAction() + SPACE + prep + SPACE 
+				+ getPrivilegedObjectTypeString(privilege) + SPACE
+				+ getPrivilegedObjectName(privilege, quoteIdentifiers, qualifyNames) 
+				+ SPACE + TO + SPACE + granteeType + SPACE + this.getName(privilege.getGrantee(), quoteIdentifiers);
+		if (privilege.isGrantable()) {
+			ret += SPACE + WITH + SPACE + GRANT + SPACE + OPTION;
+		}
+		return ret;
+	}
+
+	public String getRevokePrivilegeStatement(Privilege privilege,boolean quoteIdentifiers,boolean qualifyNames) {
+		if (this.isDDLSupressable(privilege)) {
+			if (this.getEngineeringCallBack() != null) {
+				String message = getSystemGrantMessage(REVOKE,privilege,quoteIdentifiers,qualifyNames);
+				this.getEngineeringCallBack().writeMessage(message);
+			}
+			return null;
+		}
+		AuthorizationIdentifier authId = privilege.getGrantee();
+		String granteeType = "";
+		if (authId instanceof User) granteeType = USER;
+		else if ((authId instanceof Group) && (!authId.getName().equals("PUBLIC"))) granteeType = GROUP;
+		else if (authId instanceof Role) granteeType = ROLE;
+		String prep = ON;
+		if (privilege.getObject() instanceof LUWTableSpace) prep = OF;
+		String ret = REVOKE + SPACE + privilege.getAction() + SPACE + prep + SPACE 
+		+ getPrivilegedObjectTypeString(privilege) + SPACE
+		+ getPrivilegedObjectName(privilege, quoteIdentifiers, qualifyNames) 
+		+ SPACE + FROM + SPACE + granteeType + SPACE + this.getName(privilege.getGrantee(), quoteIdentifiers);
+		
+		if (privilege.getObject() instanceof Routine) {
+			ret += SPACE + RESTRICT;
+		}
+		return ret;
+	}
+	
+    public String[] updateStatistics(Table table,boolean quoteIdentifiers, boolean qualifyNames){
+    	if (!(table instanceof IDatabaseObject)) return null;
+    	Collection stats = ((IDatabaseObject)table).getStatistics();
+    	if (stats.isEmpty()) return null;
+    	String whereClause = "WHERE TABNAME ='" + table.getName() + "'";
+    	if (qualifyNames) {
+    		whereClause += " AND TABSCHEMA='" + table.getSchema().getName() + "'";
+    	}
+
+//        return statVector.toArray(new String [statVector.size()]);
+    	Collection statements = this.getAssignmentClause(stats,"SYSSTAT.TABLES",whereClause);
+        return (String[] )statements.toArray(new String[statements.size()]);
+    }
+
+    public String[] updateStatistics(Column column,boolean quoteIdentifiers, boolean qualifyNames){
+    	if (!(column instanceof IDatabaseObject)) return null;
+    	Collection stats = ((IDatabaseObject)column).getStatistics();
+    	if (stats.isEmpty()) return null;
+    	String whereClause = "WHERE TABNAME ='" + column.getTable().getName() + "'" + " AND COLNAME = '" + column.getName() + "'";
+    	if (qualifyNames) {
+    		whereClause += " AND TABSCHEMA='" + column.getTable().getSchema().getName() + "'";
+    	}
+    	
+    	
+    	Collection statements = this.getAssignmentClause(stats,"SYSSTAT.COLUMNS",whereClause);
+    	statements.addAll(this.getAssignmentClause(stats,"SYSSTAT.COLDIST",whereClause));
+        return (String[] )statements.toArray(new String[statements.size()]);
+//    	return this.getAssignmentClause(stats,"SYSSTAT.COLUMNS",whereClause);
+    }
+
+    public String[] updateStatistics(Index index,boolean quoteIdentifiers, boolean qualifyNames){
+    	if (!(index instanceof IDatabaseObject)) return null;
+    	Collection stats = ((IDatabaseObject)index).getStatistics();
+    	if (stats.isEmpty()) return null;
+    	String whereClause = "WHERE TABNAME ='" + index.getTable().getName() + "'" + " AND INDNAME = '" + index.getName() + "'";
+    	if (qualifyNames) {
+    		whereClause += " AND TABSCHEMA='" + index.getTable().getSchema().getName() + "'";
+    	}
+//    	return this.getAssignmentClause(stats,"SYSSTAT.INDEXES",whereClause);
+    	Collection statements = this.getAssignmentClause(stats,"SYSSTAT.INDEXES",whereClause);
+        return (String[] )statements.toArray(new String[statements.size()]);
+    }
+
+    public String[] updateStatistics(Routine routine,boolean quoteIdentifiers, boolean qualifyNames){
+    	if (!(routine instanceof IDatabaseObject)) return null;
+    	Collection stats = ((IDatabaseObject)routine).getStatistics();
+    	if (stats.isEmpty()) return null;
+    	String whereClause = "WHERE ROUTINENAME ='" + routine.getName() + "'" ;
+    	if (qualifyNames) {
+    		whereClause += " AND ROUTINESCHEMA='" + routine.getSchema().getName() + "'";
+    	}
+    	Collection statements = this.getAssignmentClause(stats,"SYSSTAT.ROUTINES",whereClause);
+        return (String[] )statements.toArray(new String[statements.size()]);
+//    	return this.getAssignmentClause(stats,"SYSSTAT.ROUTINES",whereClause);
+    }
+    
+    public String setIntegrityForTableBeforeAlter(Column column,  boolean quoteIdentifiers, boolean qualifyNames) {
+    	Table table = column.getTable();
+    	if(table instanceof BaseTable) {
+	        String statement = SET + SPACE + INTEGRITY + SPACE + FOR + SPACE 
+	        	+ getName(table, quoteIdentifiers, qualifyNames)
+	    		+ " OFF"; //$NON-NLS-1$
+	        return statement;
+    	}
+    	return null;    	
+    }
+
+    public String setIntegrityForTableAfterAlter(Column column,  boolean quoteIdentifiers, boolean qualifyNames) {
+    	Table table = column.getTable();
+    	if(table instanceof BaseTable) {
+	        String statement = SET + SPACE + INTEGRITY + SPACE + FOR + SPACE
+	        	+ getName(table, quoteIdentifiers, qualifyNames)
+	    		+ " IMMEDIATE CHECKED FORCE GENERATED"; //$NON-NLS-1$
+	        return statement;
+    	}
+    	return null;
+    }
+
+    private Collection getAssignmentClause (Collection stats, String syscatalog, String whereClause){
+    	Vector statVector = new Vector();
+    	String statStr = "";
+    	Iterator iter = stats.iterator();
+    	while (iter.hasNext()) {
+    		CatalogStatistics stat = (CatalogStatistics) iter.next();
+    		if (!stat.getSyscatalog().equals(syscatalog) ) continue;
+    		if (stat.getType() == CatalogStatistics.COLLECTION_TYPE) {
+    			String statClause = this.getStatWhereClause(stat.getCollection(), syscatalog, whereClause);
+    			Collection statstrs = this.getAssignmentClause(stat.getCollection(), syscatalog, statClause);
+   				statVector.addAll(statstrs);
+    		} else {
+	    		if (statStr.length() > 0) {
+	    			statStr +=  "," + NEWLINE+ TAB + TAB;
+	    		}
+	    		statStr += stat.getId() + "=" + stat.toString();
+    		}
+    	}
+    	
+    	if (!statStr.equals("")) {
+    		statStr = UPDATE + SPACE + syscatalog + SPACE 
+    		+ NEWLINE + TAB + SET + SPACE + statStr
+    		+ NEWLINE + TAB + whereClause;
+    	}
+    	
+    	statVector.add(statStr);
+    	return statVector;
+    }
+
+    private String getStatWhereClause(Collection stats,String syscatalog,String whereClause) {
+    	String str = whereClause;
+    	if (syscatalog.equals("SYSSTAT.COLDIST")) {
+        	Iterator iter = stats.iterator();
+        	while (iter.hasNext()) {
+        		CatalogStatistics stat = (CatalogStatistics) iter.next();
+        		String id = stat.getId();
+        		if (id.equals("TYPE")) {
+        			str += NEWLINE + TAB +"AND " + stat.getId() + "='" + stat.toString() + "'";
+        		} else if (id.equals("SEQNO")) {
+        			str += NEWLINE + TAB +"AND " + stat.getId() + "=" + stat.toString();
+        		}
+        	}
+        	
+    		
+    	}
+    	return str;
+    }
+    protected String getIndexIncludedColumns(DB2Index index, boolean quoteIdentifiers) {
+        String columns;
+        Iterator it = index.getIncludedMembers().iterator();
+        if(it.hasNext()) {
+            IndexMember m = (IndexMember) it.next();
+            String columnName = m.getColumn().getName();
+            if (quoteIdentifiers) {
+                columnName = this.getDoubleQuotedString(columnName);
+            }
+            columns = columnName;
+        }
+        else {
+            return null;
+        }
+        
+        while(it.hasNext()) {
+            IndexMember m = (IndexMember) it.next();
+            String columnName = m.getColumn().getName();
+            if(quoteIdentifiers) {
+                columnName = this.getDoubleQuotedString(columnName);
+            }
+            columns += ", "; //$NON-NLS-1$
+            columns += columnName;
+        }
+        return columns;
+    }
+
+    protected String getAlterTableAddColumnColumnString(Column column, boolean quoteIdentifiers, boolean qualifyNames) {
+    	return getColumnString(column,quoteIdentifiers,qualifyNames,true);
+    }
+    	 
+    protected String getColumnString(Column column, boolean quoteIdentifiers, boolean qualifyNames) {
+    	return getColumnString(column,quoteIdentifiers,qualifyNames,false);
+    }
+    	 
+    protected String getColumnString(Column column, boolean quoteIdentifiers, boolean qualifyNames, boolean isAddColumn) {
+    	LUWColumn db2Column = (LUWColumn) column;
+        //String columnDefinition =  super.getColumnString(db2Column, quoteIdentifiers,qualifyNames);
+
+        String columnName = column.getName();
+        if(quoteIdentifiers) {
+            columnName = this.getDoubleQuotedString(columnName);
+        }
+        
+        String columnString = columnName + SPACE + getDataTypeString(column, column.getTable().getSchema(),qualifyNames);
+        String defaultValue = this.getDefaultValue(column);
+        DB2IdentitySpecifier spec = (DB2IdentitySpecifier)db2Column.getIdentitySpecifier();
+        if(!column.isNullable()) {
+            columnString = columnString + SPACE + NOT + SPACE + NULL;
+        }
+
+        // String typeName = getDataTypeString(column, column.getTable().getSchema(),qualifyNames);
+        // fix for issue wsdbu00985096
+        String typeName = getDataTypeString(column,column.getTable().getSchema(),quoteIdentifiers,qualifyNames);
+
+        if(spec == null && 
+        		!typeName.equalsIgnoreCase("XML")) { //$NON-NLS-1$
+            if(defaultValue != null && !defaultValue.equals(EMPTY_STRING)) 
+            	columnString = columnString + SPACE + DEFAULT + SPACE + defaultValue;
+            else if (isAddColumn && !column.isNullable())
+            	columnString = columnString + SPACE + DEFAULT;
+        }
+        
+        if (typeName.indexOf("CLOB") !=-1 ||typeName.indexOf("BLOB") != -1) {
+        	columnString += getLOBLoggedClause(db2Column);
+	        if (db2Column.isLobCompacted()) columnString += " COMPACT";
+        }
+        ValueExpression v = db2Column.getGenerateExpression();
+        if(spec != null) {
+            GenerateType generateType = db2Column.getGenerationType();
+            if(generateType == GenerateType.ALWAYS_LITERAL) {
+            	columnString += " GENERATED ALWAYS AS IDENTITY "; //$NON-NLS-1$
+            }
+            else {
+            	columnString += " GENERATED BY DEFAULT AS IDENTITY ";                 //$NON-NLS-1$
+            }
+            if (!spec.isSystemGenerated()){
+            	columnString +=  LEFT_PARENTHESIS + this.getIdentityString(spec) + RIGHT_PARENTHESIS;
+            }
+        }
+        else if(v != null){
+        	if (v.getSQL() == null || v.getSQL().trim().length() == 0) {
+        		//report error: must have a generation expression
+            	this.getEngineeringCallBack().writeMessage(MessageFormat.format(
+    					LUWDdlMessages.FE_GENERATED_COLUMN_HAS_NO_EXPRESSION, new Object[] { getName(column, false, true)}));
+        	} else {
+        		String generationExpression = v.getSQL().trim();
+        		if ( generationExpression.startsWith("(") && generationExpression.endsWith(")")){
+        		} else {
+        			generationExpression = "(" + generationExpression + ")";
+        		}
+
+        		columnString += " GENERATED ALWAYS AS (" + generationExpression + ")";             //$NON-NLS-1$	       	
+        	}
+        }
+        else if (typeName.equalsIgnoreCase("TIMESTAMP") && db2Column.isRowChangeTimestamp()) {
+            GenerateType generateType = db2Column.getGenerationType();
+            if(generateType == GenerateType.ALWAYS_LITERAL) {
+            	columnString += " GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP "; //$NON-NLS-1$
+            }
+            else {
+            	columnString += " GENERATED BY DEFAULT FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP ";                 //$NON-NLS-1$
+            }
+        }
+
+        return columnString;
+    }
+
+    protected String getLOBLoggedClause(LUWColumn db2Column) {
+        if (!db2Column.isLobLogged()) return NOT_LOGGED;
+        return getLOBLoggedClause(db2Column.getDataType());
+    }
+
+    protected String getLOBLoggedClause(LUWAttributeDefinition db2Attr) {
+        if (!db2Attr.isLOBLogged()) return NOT_LOGGED;
+        return getLOBLoggedClause(db2Attr.getDataType());
+    }
+
+    protected String getLOBLoggedClause(DataType dt) {
+    	int length = 0;
+    	if (SQLDataTypesPackage.eINSTANCE.getCharacterStringDataType().isSuperTypeOf(dt.eClass())) {
+    		CharacterStringDataType cdt = (CharacterStringDataType)dt;
+    		length = cdt.getLength();
+    		if (cdt.getPrimitiveType() == PrimitiveType.NATIONAL_CHARACTER_LARGE_OBJECT_LITERAL)
+    			length = length * 2;
+    	}
+    	else if (SQLDataTypesPackage.eINSTANCE.getBinaryStringDataType().isSuperTypeOf(dt.eClass())) 
+    		length = ((BinaryStringDataType)dt).getLength();
+    	if (length > GB) return NOT_LOGGED;
+    	return EMPTY_STRING;
+    }
+
+	private String getTablespaceString(LUWStorageTable table, boolean quoteIdentifiers) {
+	    LUWTableSpace tableSpace = table.getRegularDataTableSpace();
+	    String tablespaceClause = "";
+        if(tableSpace != null) {
+            String regularTableSpaceName = tableSpace.getName();
+            if(quoteIdentifiers) {
+                regularTableSpaceName = this.getDoubleQuotedString(regularTableSpaceName);
+            }
+            tablespaceClause = NEWLINE + "\tIN " + regularTableSpaceName; //$NON-NLS-1$
+        }
+
+        tableSpace = table.getIndexDataTableSpace();
+        if(tableSpace != null) {
+            String indexTableSpaceName = tableSpace.getName();
+            if(quoteIdentifiers) {
+                indexTableSpaceName = this.getDoubleQuotedString(indexTableSpaceName);
+            }
+            tablespaceClause += " INDEX IN " + indexTableSpaceName; //$NON-NLS-1$
+	    }
+
+        tableSpace = table.getLOBDataTableSpace();
+        if(tableSpace != null) {
+            String lobTableSpaceName = tableSpace.getName();
+            if(quoteIdentifiers) {
+                lobTableSpaceName = this.getDoubleQuotedString(lobTableSpaceName);
+            }
+            tablespaceClause += " LONG IN " + lobTableSpaceName; //$NON-NLS-1$
+	    }
+
+        return tablespaceClause;
+    }
+
+	private boolean hasContainers( LUWTableSpace tablespace ) {
+		return !tablespace.getContainers().isEmpty();
+	}
+
+    private String getContainers(LUWTableSpace tablespace) {
+        EList containers = tablespace.getContainers();
+        if (containers.isEmpty()) return null;
+        
+        // Map distinct partition sets to associated containers
+        Map<Set<Integer>, List<LUWDatabaseContainer>> contMap = new HashMap<Set<Integer>, List<LUWDatabaseContainer>>();
+        List<LUWDatabaseContainer> nopartn = null;
+        boolean partnsPresent = false;
+
+        for ( Object cobj : tablespace.getContainers() ) {
+        	LUWDatabaseContainer cont = (LUWDatabaseContainer)cobj;
+        	List partns = cont.getPartitions();
+
+        	if ( partns.isEmpty() ) {
+        		if (nopartn == null) {
+        			nopartn = new ArrayList<LUWDatabaseContainer>();
+        			contMap.put( null, nopartn );
+        		}
+        		
+        		nopartn.add( cont );
+        	}
+        	else
+        	{
+         		Set<Integer> cpartns = new HashSet<Integer>();
+
+        		for ( Object pobj : partns ) {
+        			LUWDatabasePartition partn = (LUWDatabasePartition)pobj;
+        			
+        			cpartns.add( new Integer(partn.getNumber()) );
+        		}
+        		
+        		List<LUWDatabaseContainer> clist = null;
+        		
+        		for ( Set<Integer> s : contMap.keySet() ) {
+        			if ( s.size() == cpartns.size() && s.containsAll( cpartns )) {
+        				clist = contMap.get( s );
+        				break;
+        			}
+        		}
+        		
+        		if (clist == null) {
+        			clist = new ArrayList<LUWDatabaseContainer>();
+        			contMap.put( cpartns, clist );
+        		}
+        		
+    			clist.add( cont );
+        	}
+        }
+        
+        // TODO error checking, if we care to do it
+        // all containers must specify partitions, or none can
+        // partitions for each container group must be unique
+        StringBuilder txt = new StringBuilder();
+        boolean database_managed =  tablespace.getManagementType() == ManagementType.DATABASE_MANAGED_LITERAL;
+       
+        for ( Map.Entry<Set<Integer>, List<LUWDatabaseContainer>> entry : contMap.entrySet() ) {
+        	txt.append( NEWLINE + TAB + "USING ("); //$NON-NLS-1$
+
+        	boolean first = true;
+        	
+        	for ( LUWDatabaseContainer container : entry.getValue() ) {
+        		if (!first) {
+        			txt.append( ", " ); //$NON-NLS-1$
+        		}
+        		else {
+        			first = false;
+        		}
+
+                LUWContainerType type = container.getContainerType();
+                if (database_managed) {
+        	        if(type == LUWContainerType.DEVICE_LITERAL) {
+        	            txt.append( "DEVICE ") ; //$NON-NLS-1$
+        	        }
+        	        else if(type == LUWContainerType.FILE_LITERAL) {
+        	            txt.append( "FILE " ); //$NON-NLS-1$
+        	        }
+                }
+
+                txt.append(  this.getSingleQuotedString(container.getName()) );
+
+                if (database_managed) {
+                	if ( container.getSizeInPages() > 0 ) {
+                		txt.append( SPACE + container.getSizeInPages() );
+                	}
+                	else {
+                		txt.append( SPACE + container.getSize() );
+                		txt.append( SPACE + container.getSizeUnits().getName() );
+                	}
+                }        		
+        	}
+        	
+        	txt.append( ")" ); //$NON-NLS-2$
+            
+        	Set<Integer> partnums = entry.getKey();
+        	
+        	if ( partnums != null && !partnums.isEmpty() ) {
+        		txt.append( " ON DBPARTITIONNUM (" ); //$NON-NLS-1$
+        		boolean first2 = true;
+        		
+        		for ( Integer partnum : partnums ) {
+        			if (!first2) {
+        				txt.append( ", " ); //$NON-NLS-1$
+        			}
+        			else {
+        				first2 = false;
+        			}
+        			
+        			txt.append( partnum );
+        		}
+        		
+        		txt.append( ")" ); //$NON-NLS-1$
+        	}
+        }
+ 
+        return txt.toString();
+    }
+ 
+    protected String getOwnerType(TableConstraint constraint){
+    	BaseTable table = constraint.getBaseTable();
+    	if (table instanceof LUWNickname) {
+    		return NICKNAME;
+    	} else {
+    		return TABLE;
+    	}
+    }
+    
+	protected String getPartitionKey(LUWStorageTable table, boolean quoteIdentifiers) {
+	    LUWPartitionKey partitionKey = table.getPartitionKey();
+	    if (partitionKey == null) return ""; //$NON-NLS-1$
+	    
+	    if (partitionKey.getColumns().size() <1) return "";
+
+	    String statement = NEWLINE + TAB;
+	    statement += getPartitionKeyDefinition(partitionKey, quoteIdentifiers);
+	    
+        return statement;
+    }
+
+	private String getPartitionKeyDefinition(LUWPartitionKey partitionKey, boolean quoteIdentifiers) {
+		String definition = PARTITION_KEY + LEFT_PARENTHESIS;
+        Iterator it = partitionKey.getColumns().iterator();
+        while(it.hasNext()) {
+            String columnName = ((Column)it.next()).getName();
+            if(quoteIdentifiers) {
+                columnName = this.getDoubleQuotedString(columnName);
+            }
+            definition += columnName;
+            if(it.hasNext()) {
+                definition += ", ";                 //$NON-NLS-1$
+            }
+        }
+	    definition += RIGHT_PARENTHESIS;
+	    if (partitionKey.getPartitionMethod() == PartitionMethod.get(PartitionMethod.HASHING))
+	    	definition += SPACE + USE_HASH;
+		return definition;
+	}
+ 
+    protected String getDataTypeString(TypedElement typedElement, Schema schema,boolean qualifyNames) {
+    	String type = null;
+    	if (this.generator != null && EngineeringOptionID.useDomain(this.generator.getSelectedOptions())) { //@d00058820gs
+    		type = this.getDomainTypeString(typedElement,schema,qualifyNames);
+    	}
+    	
+    	if (type == null) {
+    		type = super.getDataTypeString(typedElement,schema,qualifyNames);
+    	}
+    	
+    	return type;
+    }
+    
+    protected String getDataTypeString(TypedElement typedElement, Schema schema, boolean quoteIdentifiers,boolean qualifyNames) {
+    	String type = null;
+    	if (this.generator != null && EngineeringOptionID.useDomain(this.generator.getSelectedOptions())) { //@d00058820gs
+    		type = this.getDomainTypeString(typedElement,schema,qualifyNames);
+    	}
+    	
+    	if (type == null) {
+    		type = super.getDataTypeString(typedElement,schema,quoteIdentifiers,qualifyNames);
+    	}
+    	
+    	return type;
+    }
+    
+    protected String getName(LUWWrapper wrapper, boolean quoteIdentifiers) {
+        String name = wrapper.getName();
+
+        if(quoteIdentifiers) {
+            name = this.getDoubleQuotedString(name);
+        }
+    
+        return name;
+    }
+    
+    protected String getName(LUWServer server, boolean quoteIdentifiers) {
+        String name = server.getName();
+
+        if(quoteIdentifiers) {
+            name = this.getDoubleQuotedString(name);
+        }
+    
+        return name;
+    }
+
+    protected String getName(LUWUserMapping userMapping, boolean quoteIdentifiers) {
+        String name = userMapping.getName();
+
+        if(quoteIdentifiers) {
+            name = this.getDoubleQuotedString(name);
+        }
+        return name;
+    }
+
+    protected String getName(LUWTableSpace tablespace, boolean quoteIdentifiers) {
+        String name = tablespace.getName();
+
+        if(quoteIdentifiers) {
+            name = this.getDoubleQuotedString(name);
+        }
+        return name;
+    }
+
+    protected String getName(LUWDatabasePackage pkg, boolean quoteIdentifiers,boolean qualifyNames) {
+        String name = pkg.getName();
+        String schemaName = pkg.getSchema().getName();
+
+        if(quoteIdentifiers) {
+            name = this.getDoubleQuotedString(name);
+            schemaName  = this.getDoubleQuotedString(schemaName);
+        }
+        if(qualifyNames) {
+            name = schemaName + DOT + name;
+        }
+
+        return name;
+    }
+
+    protected String getName(LUWGlobalVariable variable, boolean quoteIdentifiers,boolean qualifyNames) {
+        String name = variable.getName();
+        String schemaName = variable.getSchema().getName();
+
+        if(quoteIdentifiers) {
+            name = this.getDoubleQuotedString(name);
+            schemaName  = this.getDoubleQuotedString(schemaName);
+        }
+        if(qualifyNames) {
+            name = schemaName + DOT + name;
+        }
+
+        return name;
+    }
+
+    protected String getName(LUWModule module, boolean quoteIdentifiers,boolean qualifyNames) {
+        String name = module.getName();
+        String schemaName = module.getOwningSchema().getName();
+
+        if(quoteIdentifiers) {
+            name = this.getDoubleQuotedString(name);
+            schemaName  = this.getDoubleQuotedString(schemaName);
+        }
+        if(qualifyNames) {
+            name = schemaName + DOT + name;
+        }
+
+        return name;
+    }
+
+    protected String getIdentityString(DB2IdentitySpecifier identitySpecifier) {
+    	StringBuffer sb = new StringBuffer();
+    	if (identitySpecifier.getStartValue() != null)
+    		sb.append(SPACE + START_WITH + identitySpecifier.getStartValue());
+    	if (identitySpecifier.getIncrement() != null)
+    		sb.append(SPACE + INCREMENT_BY + identitySpecifier.getIncrement());
+    	if (identitySpecifier.getMinimum() != null)
+    		sb.append(SPACE + MINVALUE + identitySpecifier.getMinimum());
+    	if (identitySpecifier.getMaximum() != null)
+    		sb.append(SPACE + MAXVALUE + identitySpecifier.getMaximum());
+    	if(identitySpecifier.isCycleOption()) {
+    		sb.append(SPACE + CYCLE);
+    	}
+    	else {
+    		sb.append(SPACE + NO + SPACE + CYCLE);
+    	}
+    	if (identitySpecifier.getCache() > 1) {
+    		sb.append(SPACE + CACHE + SPACE +  identitySpecifier.getCache());
+    	} else {
+    		sb.append(SPACE + NO + SPACE + CACHE);
+    	}
+        return sb.toString();
+    }
+ 
+    protected String getIdentityAlterationString(DB2IdentitySpecifier identitySpecifier) {
+    	StringBuffer sb = new StringBuffer();
+    	if (identitySpecifier.getStartValue() != null)
+    		sb.append(SPACE + RESTART_WITH + identitySpecifier.getStartValue());
+    	if (identitySpecifier.getIncrement() != null)
+    		sb.append(SPACE + SET_INCREMENT_BY + identitySpecifier.getIncrement());
+    	if (identitySpecifier.getMinimum() != null)
+    		sb.append(SPACE + SET_MINVALUE + identitySpecifier.getMinimum());
+    	if (identitySpecifier.getMaximum() != null)
+    		sb.append(SPACE + SET_MAXVALUE + identitySpecifier.getMaximum());
+    	if(identitySpecifier.isCycleOption()) {
+    		sb.append(SPACE + SET + SPACE + CYCLE);
+    	}
+    	else {
+    		sb.append(SPACE + SET + SPACE + NO + SPACE + CYCLE);
+    	}
+    	if (identitySpecifier.getCache() > 1) {
+    		sb.append(SPACE + SET + SPACE + CACHE + SPACE +  identitySpecifier.getCache());
+    	} else {
+    		sb.append(SPACE + SET + SPACE + NO + SPACE + CACHE);
+    	}
+        return sb.toString();
+    }
+
+    
+    protected String getTableDimension(LUWTable table, boolean quotedIdentifier) {
+        String text = ""; 
+        for (Iterator iter = table.getIndex().iterator(); iter.hasNext();){
+        	DB2Index index = (DB2Index) iter.next();
+        	if (index.getIndexType() == DB2IndexType.DIMENSION_LITERAL){
+        		String dimensionPart = getParentKeyColumns(index,quotedIdentifier);
+        		if (!text.equals("")) text += COMMA + SPACE;
+
+        		text +=dimensionPart;
+        	}
+        }
+        
+        if (!text.equals("")) {
+        	text = NEWLINE + TAB + DIMENSION_BY + SPACE + LEFT_PARENTHESIS + text + RIGHT_PARENTHESIS ;
+        }
+        
+        return text;
+    }
+    
+    protected String getDefaultValue(Column column) {
+    	String defaultValue = column.getDefaultValue();
+    	if (defaultValue == null || defaultValue.equals(EMPTY_STRING)) return null;
+    	SQLDataType type = column.getContainedType();
+    	if (type == null) return null;
+    	if ((type instanceof CharacterStringDataType 
+    			&& ! defaultValue.equalsIgnoreCase("USER") 
+    			&& ! defaultValue.equalsIgnoreCase("CURRENT USER")
+    			&& ! defaultValue.equalsIgnoreCase("CURRENT_USER")
+    			&& ! defaultValue.equalsIgnoreCase("SESSION_USER")
+    			&& ! defaultValue.equalsIgnoreCase("SESSION USER")
+    			&& ! defaultValue.equalsIgnoreCase("SYSTEM_USER")
+    			&& ! defaultValue.equalsIgnoreCase("NULL"))
+    		|| ((type instanceof DateDataType || type instanceof TimeDataType)
+        			&& ! defaultValue.equals("NULL")
+   				&& ! defaultValue.toUpperCase().matches(".*SYSDATE.*") 
+   				&& ! defaultValue.toUpperCase().matches(".*CURRENT DATE.*") 
+   				&& ! defaultValue.toUpperCase().matches(".*CURRENT_DATE.*") 
+       			&& ! defaultValue.toUpperCase().matches(".*CURRENT TIME.*")
+       			&& ! defaultValue.toUpperCase().matches(".*CURRENT_TIME.*")
+       			&& ! defaultValue.toUpperCase().matches(".*CURRENT TIMESTAMP.*")
+       			&& ! defaultValue.toUpperCase().matches(".*CURRENT_TIMESTAMP.*"))){
+    		return this.ensureSingleQuotedString(defaultValue);
+    	}
+    	else if (type instanceof BinaryStringDataType
+    			&& ! defaultValue.equalsIgnoreCase("NULL")) {
+    		if (!(defaultValue.startsWith(HEX_LITERAL_PREFIX + SINGLE_QUOTE) && defaultValue.endsWith(SINGLE_QUOTE)))
+    			return HEX_LITERAL_PREFIX + this.getSingleQuotedString(defaultValue);
+    	}
+    	return defaultValue;
+    }
+
+    protected String getCompressionValue(LUWStorageTable table) {
+        StringBuffer text = new StringBuffer();
+        if (table.isValueCompression()) {
+        	text.append(NEWLINE).append(TAB).append(VALUE_COMPRESSION);
+        }
+        return text.toString();
+    }
+    
+    
+    protected boolean isTablespaceContainersRequried(LUWTableSpace tablespace) {
+  		return true;
+    }
+    
+	protected String getPrivilegedObjectName(Privilege privilege, boolean quoteIdentifiers, boolean qualifyNames) {
+		SQLObject obj = privilege.getObject();
+		String name = null;
+		if (obj instanceof Table) name = getName((Table)obj, quoteIdentifiers, qualifyNames);
+		else if (obj instanceof Index) name = getName((Index)obj, quoteIdentifiers, qualifyNames);
+		else if (obj instanceof Sequence) name = getName((Sequence)obj, quoteIdentifiers, qualifyNames);
+		else if (obj instanceof Schema) name = getName((Schema)obj, quoteIdentifiers, qualifyNames);
+		else if (obj instanceof LUWModule) name = getName((LUWModule)obj, quoteIdentifiers,qualifyNames);
+		else if (obj instanceof LUWGlobalVariable) name = getName((LUWGlobalVariable)obj, quoteIdentifiers,qualifyNames);
+		else if (obj instanceof Routine) name = getRoutineSpecifier(obj, quoteIdentifiers, qualifyNames);
+		else if (obj instanceof UserDefinedType) name = getName((UserDefinedType)obj, quoteIdentifiers, qualifyNames);
+		else if (obj instanceof LUWTableSpace) name = getName((LUWTableSpace)obj, quoteIdentifiers);
+		else if (obj instanceof LUWDatabasePackage) name = getName((LUWDatabasePackage)obj, quoteIdentifiers,qualifyNames);
+		else if (obj instanceof Database) name = ""; //$NON-NLS-1$
+		return name;
+	}
+
+	protected String getPrivilegedObjectTypeString(Privilege privilege) {
+		SQLObject obj = privilege.getObject();
+		if (obj instanceof BaseTable) return TABLE;
+		if (obj instanceof Method) return METHOD;
+		if (obj instanceof Function) return FUNCTION;
+		if (obj instanceof Procedure) return PROCEDURE;
+		if (obj instanceof ViewTable) return TABLE;
+		if (obj instanceof Index) return INDEX;
+		if (obj instanceof Schema) return SCHEMA;
+		if (obj instanceof Sequence) return SEQUENCE;
+		if (obj instanceof Database) return DATABASE;
+		if (obj instanceof DB2Package) return PACKAGE;
+		if (obj instanceof LUWTableSpace) return TABLESPACE;
+		if (obj instanceof LUWModule) return MODULE;
+		if (obj instanceof LUWGlobalVariable) return VARIABLE;
+		return EMPTY_STRING;
+	}
+
+	protected String getGrantRoleAuthorizationString(RoleAuthorization roleAuth, boolean quoteIdentifiers) {
+	    AuthorizationIdentifier grantee = roleAuth.getGrantee();
+	    
+		String authStr = NEWLINE + GRANT  + SPACE + this.getName(roleAuth.getRole(), quoteIdentifiers) 
+						+ SPACE + TO + this.getGranteeType(grantee) + SPACE + this.getName(roleAuth.getGrantee(), quoteIdentifiers);
+		if (roleAuth.isGrantable()) {
+			authStr += SPACE + WITH + SPACE + ADMIN + SPACE + OPTION;
+		}
+		return authStr;
+	}
+	
+    protected String getAlterTableAlterValueCompressionString(LUWTable table) {
+    	String compressionStr = NEWLINE + TAB;
+    	if (table.isValueCompression()) {
+    		compressionStr += "ACTIVATE"; //$NON-NLS-1$
+    	} else {
+    		compressionStr += "DEACTIVATE"; //$NON-NLS-1$
+    	}
+    	compressionStr+= SPACE + VALUE_COMPRESSION;
+        return compressionStr;
+    }
+    
+    protected String getAlterTableAlterVolatileString(LUWTable table) {
+    	if (table instanceof LUWTable) {
+        	String volatileStr = NEWLINE + TAB;
+    		if (((LUWTable)table).isVolatile()) return volatileStr + "VOLATILE"; //$NON-NLS-1$
+    		else return volatileStr + "NOT VOLATILE"; //$NON-NLS-1$
+    	}
+    	return ""; //$NON-NLS-1$
+    }
+
+    protected String getAlterTableAlterRowCompressionString(LUWTable table) {
+    	if (table instanceof LUWStorageTable) {
+        	String compressionStr = NEWLINE + TAB;
+    		if (((LUWStorageTable)table).isRowCompression()) return compressionStr + "COMPRESS YES"; //$NON-NLS-1$
+    		else return compressionStr + "COMPRESS NO"; //$NON-NLS-1$
+    	}
+    	return ""; //$NON-NLS-1$
+    }
+    
+    //@Override
+	public String alterTableAddColumn(Column column, boolean quoteIdentifiers, boolean qualifyNames) {
+		DB2IdentitySpecifier spec = (DB2IdentitySpecifier)column.getIdentitySpecifier();
+		if (spec != null) {
+    		//report error: alter table add column cannot have identity options
+        	this.getEngineeringCallBack().writeMessage(MessageFormat.format(
+					LUWDdlMessages.FE_ALTER_TABLE_ADD_COLUMN_IDENTITY_OPTIONS, new Object[] { getName(column, false, true)}));			
+		}
+		return super.alterTableAddColumn(column, quoteIdentifiers, qualifyNames);
+	}
+
+    public String alterTableDropColumn(Column column,  boolean quoteIdentifiers, boolean qualifyNames) {
+    	Table table = (Table)ContainmentServiceImpl.INSTANCE.getContainer(column);
+    	if(table != null && table instanceof BaseTable) {
+	        String statement = ALTER + SPACE + TABLE + SPACE + getName(table, quoteIdentifiers, qualifyNames)
+	    		+ " DROP COLUMN " + getColumnNameString(column, quoteIdentifiers,qualifyNames); //$NON-NLS-1$
+	        return statement;
+    	}
+    	return null;
+    }
+
+	protected String getDistributeKeyword() {
+    	return PARTITION_KEY;
+    }
+
+	protected String getBufferPoolSize(LUWBufferPool bufferpool) {
+		String text = null;
+		int size = bufferpool.getSize();
+        if (size <=0) {
+        	this.getEngineeringCallBack().writeMessage(MessageFormat.format(
+					LUWDdlMessages.FE_BUFFERPOOL_INVAILD_SIZE_VALUE, new Object[] { bufferpool.getName()}));
+        	return null;
+        } else {
+        	text = SPACE+ "SIZE " + bufferpool.getSize(); //$NON-NLS-1$
+        }
+        return text;
+	}
+	
+	public String reorgTable(Column col, boolean quoteIdentifiers, boolean qualifyNames) {
+		return reorgTable(col.getTable(), quoteIdentifiers, qualifyNames);
+	}
+	
+	public String reorgTable(Table table, boolean quoteIdentifiers, boolean qualifyNames) {
+        String tableName = table.getName();
+        String schemaName = table.getSchema().getName();
+        if(quoteIdentifiers) {
+            tableName = this.getDoubleQuotedString(tableName);
+            schemaName = this.getDoubleQuotedString(schemaName);
+        }
+
+        if(qualifyNames) {
+            tableName = schemaName + DOT + tableName;
+        }
+		return CALL + SPACE + ADMIN_CMD + LEFT_PARENTHESIS + SINGLE_QUOTE 
+				+ REORG + SPACE + TABLE + SPACE + tableName + SINGLE_QUOTE + RIGHT_PARENTHESIS;
+	}
+	
+    public String getName(LUWPartitionGroup pg, boolean quoteIdentifiers) {
+        String pgName = pg.getName();
+        if(quoteIdentifiers) {
+            pgName = this.getDoubleQuotedString(pgName);
+        }
+        return pgName;
+    }
+
+	protected String getGranteeType(AuthorizationIdentifier authID){
+		if (authID instanceof Group)
+			return SPACE + GROUP;
+		else if (authID instanceof Role)
+			return SPACE + ROLE;
+		else if (authID instanceof User)
+			return SPACE + USER;
+		return "";
+	}
+
+
+    public String[] grantOn(LUWDatabasePackage dbPackage, boolean quoteIdentifiers, boolean qualifyNames) {
+    	return this.getGrantString(dbPackage,quoteIdentifiers,qualifyNames);
+    }
+    
+    public String[] grantOn(LUWModule module, boolean quoteIdentifiers, boolean qualifyNames) {
+    	return this.getGrantString(module,quoteIdentifiers,qualifyNames);
+    }
+
+    public String[] grantOn(LUWGlobalVariable variable, boolean quoteIdentifiers, boolean qualifyNames) {
+    	return this.getGrantString(variable,quoteIdentifiers,qualifyNames);
+    }
+
+    private String createModuleObject(LUWModuleObject moduleObject, boolean quoteIdentifiers, boolean qualifyNames ){
+    	ILUWModuleDdlBuilder moduleBuilder = LUWDdlGenerator.getModuleDdlBuilder();
+    	if (moduleBuilder != null) {
+    		return moduleBuilder.buildCreateStatement((SQLObject)moduleObject, quoteIdentifiers, qualifyNames);
+    	}
+    	return null;
+    }
+
+    private String dropModuleObject(LUWModuleObject moduleObject,boolean quoteIdentifiers, boolean qualifyNames ){
+    	ILUWModuleDdlBuilder moduleBuilder = LUWDdlGenerator.getModuleDdlBuilder();
+    	if (moduleBuilder != null) {
+    		return moduleBuilder.buildDropStatement((SQLObject)moduleObject, quoteIdentifiers, qualifyNames);
+    	}
+    	return null;
+    }
+
+    private String commentOnModuleObject(LUWModuleObject moduleObject,boolean quoteIdentifiers, boolean qualifyNames ){
+    	ILUWModuleDdlBuilder moduleBuilder = LUWDdlGenerator.getModuleDdlBuilder();
+    	if (moduleBuilder != null) {
+    		return moduleBuilder.buildCommentStatement((SQLObject)moduleObject, quoteIdentifiers, qualifyNames);
+    	}
+    	return null;
+    }
+    
+    protected String getName(UserDefinedType type, boolean quoteIdentifiers, boolean qualifyNames) {
+    	boolean isModuleObject = type instanceof LUWModuleObject;
+    	String typeName = quoteIdentifiers? this.getDoubleQuotedString(type.getName()):type.getName();
+    	if (isModuleObject) {
+    		String moduleName = quoteIdentifiers? this.getDoubleQuotedString(((LUWModuleObject)type).getModule().getName())
+    											:((LUWModuleObject)type).getModule().getName();
+    		String schemaName = quoteIdentifiers? this.getDoubleQuotedString(((LUWModuleObject)type).getModule().getOwningSchema().getName())
+    											:((LUWModuleObject)type).getModule().getOwningSchema().getName();
+            typeName = moduleName + DOT + typeName ;
+    		if(qualifyNames) {
+                typeName = schemaName + DOT +  typeName;
+            }
+
+    	} else {
+    		String schemaName = quoteIdentifiers? this.getDoubleQuotedString(type.getSchema().getName())
+    											: type.getSchema().getName();
+            if(qualifyNames) {
+                typeName = schemaName + DOT + typeName;
+            }
+    	}
+        return typeName;
+        
+        
+    }
+
+    protected String RecoverDroppedTableString(LUWTableSpace tablespace) {
+    	String text="";
+        //only available for regular tablespace for V8
+        if (tablespace.getTablespaceType() == TableSpaceType.REGULAR_LITERAL) {
+        	if (!tablespace.isRecoverDroppedTableOn()) {   //default is ON
+        		text += NEWLINE + TAB + "DROPPED TABLE RECOVERY " + OFF;
+        	}
+        }
+        return text;
+    }
+
+	private String getName(String oldname, boolean quoteIdentifiers) {
+        if(quoteIdentifiers) {
+        	oldname = this.getDoubleQuotedString(oldname);
+        }
+        return oldname;
+	}
+
+	public String alterTablespaceRename(LUWTableSpace tablespace, String oldname,
+			boolean quoteIdentifiers, boolean qualifyNames) {
+		return RENAME + SPACE + TABLESPACE + SPACE + getName(oldname, quoteIdentifiers) + SPACE + 
+        	TO + SPACE + getName(tablespace, quoteIdentifiers);
+	}
+
+	public String alterTablespaceProlog(LUWTableSpace tablespace,boolean quoteIdentifiers,boolean qualifyNames) {
+    	String tablespaceName = tablespace.getName();
+        if(quoteIdentifiers) {
+            tablespaceName = this.getDoubleQuotedString(tablespaceName);
+        }
+        return ALTER + SPACE + TABLESPACE + SPACE + tablespaceName;
+	}
+	
+	public String alterTablespaceContainers(LUWTableSpace tablespace,
+			EList newContainers, EList oldContainers, boolean quoteIdentifiers, boolean qualifyNames) {
+    	String text="";
+
+    	boolean first = true;
+    	outerAdd:for (Iterator iter = newContainers.iterator(); iter.hasNext();) {
+    		LUWDatabaseContainer container = (LUWDatabaseContainer)iter.next();
+    		String newName = container.getName();
+    		LUWContainerType newType = container.getContainerType();
+    		Iterator it1 = oldContainers.iterator();
+    		while (it1.hasNext()) {
+        		LUWDatabaseContainer oldContainer = (LUWDatabaseContainer)it1.next();
+        		if (oldContainer.getName().equals(newName) &&
+        				oldContainer.getContainerType().equals(newType))
+        			continue outerAdd;
+    		}
+    		if (first) text += NEWLINE + TAB + ADD + SPACE + "(";
+    		else text += ",";
+    		if (LUWContainerType.DEVICE_LITERAL.equals(newType)) {
+    			text += DEVICE + SPACE;
+    		}
+    		else if (LUWContainerType.FILE_LITERAL.equals(newType)) {
+    			text += FILE + SPACE;	
+    		}    		    		
+    		text += this.getSingleQuotedString(newName);
+        	if ( container.getSizeInPages() > 0 ) {
+        		text += SPACE +container.getSizeInPages();
+        	}
+        	else {
+        		text += SPACE + container.getSize();
+        		text += SPACE + container.getSizeUnits().getName();
+        	}
+
+    		first = false;
+    	}
+    	if (!first) text += ")";
+
+    	first = true;
+    	outerDrop:for (Iterator iter = oldContainers.iterator(); iter.hasNext();) {
+    		LUWDatabaseContainer container = (LUWDatabaseContainer)iter.next();
+    		String oldName = container.getName();
+    		LUWContainerType oldType = container.getContainerType();
+    		Iterator it1 = newContainers.iterator();
+    		while (it1.hasNext()) {
+        		LUWDatabaseContainer newContainer = (LUWDatabaseContainer)it1.next();
+        		if (newContainer.getName().equals(oldName) &&
+        				newContainer.getContainerType().equals(oldType))
+        			continue outerDrop;
+    		}
+    		if (first) text += NEWLINE + TAB + DROP + SPACE + "(";
+    		else text += ",";
+    		if (LUWContainerType.DEVICE_LITERAL.equals(oldType)) {
+    			text += DEVICE + SPACE;
+    		}
+    		else if (LUWContainerType.FILE_LITERAL.equals(oldType)) {
+    			text += FILE + SPACE;	
+    		}    		    		
+    		text += this.getSingleQuotedString(oldName);
+
+    		first = false;
+    	}
+    	if (!first) text += ")";
+
+        return text;
+	}
+
+	public String alterTablespaceContainersSize(LUWTableSpace tablespace,
+			EList newContainers, EList oldContainers, boolean quoteIdentifiers,
+			boolean qualifyNames,LUWDeltaDdlGenerator delta) {
+    	String text="";
+    	boolean first = true;
+    	Iterator iter = newContainers.iterator();
+    	while (iter.hasNext()) {
+    		LUWDatabaseContainer container = (LUWDatabaseContainer)iter.next();
+    		String newName = container.getName();
+    		LUWContainerType newType = container.getContainerType();
+    		Iterator it1 = oldContainers.iterator();
+    		while (it1.hasNext()) {
+        		LUWDatabaseContainer oldContainer = (LUWDatabaseContainer)it1.next();
+        		if (oldContainer.getName().equals(newName) &&
+        				oldContainer.getContainerType().equals(newType) &&
+        				!newType.equals(LUWContainerType.DIRECTORY_LITERAL)) {
+        			EStructuralFeature feature = LUWPackage.eINSTANCE.getLUWDatabaseContainer_SizeInPages();
+        			int oldSizeInPages = (Integer)delta.getOldContainerValue(feature,container);
+        			feature = LUWPackage.eINSTANCE.getLUWDatabaseContainer_Size();
+        			int oldSize = (Integer)delta.getOldContainerValue(feature,container);
+        			feature = LUWPackage.eINSTANCE.getLUWDatabaseContainer_SizeUnits();
+        			UnitType oldSizeUnits = (UnitType)delta.getOldContainerValue(feature,container);
+        			if (((oldSizeInPages != container.getSizeInPages()) ||
+        					(oldSize != container.getSize()) ||
+        					(!oldSizeUnits.equals(container.getSizeUnits())))) {
+        				if (first) text += NEWLINE + TAB + RESIZE + SPACE + "(";
+        				else text += ",";
+        				if (LUWContainerType.DEVICE_LITERAL.equals(newType)) {
+        					text += DEVICE + SPACE;
+        				}
+        				else if (LUWContainerType.FILE_LITERAL.equals(newType)) {
+        					text += FILE + SPACE;	
+        				}    		    		
+        				text += this.getSingleQuotedString(newName);
+        				if ((container.getSizeInPages() > 0) &&
+        						(oldSizeInPages != container.getSizeInPages())) {
+        					text += SPACE +container.getSizeInPages();
+        				}
+        				else {
+        					text += SPACE + container.getSize();
+        					text += SPACE + container.getSizeUnits().getName();
+        				}
+        				first = false;
+        			}
+        		}
+    		}
+    	}
+    	if (!first) text += ")";
+        return text;
+	}
+	
+	public String tablespaceBufferPoolClause(LUWTableSpace tablespace,boolean quoteIdentifiers) {
+        LUWBufferPool bufferpool = tablespace.getBufferPool();
+        if(bufferpool != null) {
+        	String bufferpoolName = bufferpool.getName();
+            if(quoteIdentifiers) {
+            	bufferpoolName = this.getDoubleQuotedString(bufferpoolName);
+            }
+    		return NEWLINE + TAB + BUFFERPOOL + SPACE + bufferpoolName;
+        }
+		return "";
+	}
+
+	public String tablespaceOverheadClause(LUWTableSpace tablespace) {
+		return NEWLINE + TAB + OVERHEAD + SPACE + String.valueOf(tablespace.getOverhead());
+	}
+
+	public String tablespaceXferRateClause(LUWTableSpace tablespace) {
+		return NEWLINE + TAB + XFER_RATE + SPACE + String.valueOf(tablespace.getTransferRate());
+	}
+
+	public String tablespaceDroppedTableRecoveryClause(LUWTableSpace tablespace) {
+		return NEWLINE + TAB + DROPPED_TABLE_RECOVERY + SPACE + (tablespace.isRecoverDroppedTableOn()?ON:OFF);
+	}
+
+	public String tablespaceAutoResizeClause(LUWTableSpace tablespace) {
+		// Support for alter in version 9
+    	return EMPTY_STRING;
+	}
+
+	public String tablespaceIncreaseSizeClause(LUWTableSpace tablespace) {
+		// Support for alter in version 9
+    	return EMPTY_STRING;
+	}
+
+	public String tablespaceMaxSizeClause(LUWTableSpace tablespace) {
+		// Support for alter in version 9
+    	return EMPTY_STRING;
+	}
+
+	public String tablespacePrefetchSizeClause(LUWTableSpace tablespace) {
+		int prefetchsize = tablespace.getPreFetchSize();
+		return NEWLINE + TAB + PREFETCHSIZE + SPACE + 
+			((prefetchsize > 0)?String.valueOf(prefetchsize):AUTOMATIC);
+	}
+
+	public String transferSchemaOwnership(Schema changed, boolean quoteIdentifiers) {
+    	AuthorizationIdentifier auth=changed.getOwner();
+    	if (auth != null)
+    		return XFER_OWNERSHIP + SPACE + SCHEMA + SPACE + 
+				getName(changed.getName(),quoteIdentifiers) + SPACE + TO +
+				SPACE + USER + SPACE + getName(auth,quoteIdentifiers) + 
+				SPACE + PRESERVE_PRIVILEGES;
+		return null;
+	}
+
+    private LUWDdlGenerator generator;
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDdlBuilder9.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDdlBuilder9.java
new file mode 100644
index 0000000..fc62743
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDdlBuilder9.java
@@ -0,0 +1,448 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.ddl;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.datatools.enablement.ibm.db2.ddl.DB2DdlMessages;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartitionKey;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMaterializedQueryTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionExpression;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.ManagementType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.PartitionMethod;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.TableSpaceType;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Trigger;
+import org.eclipse.datatools.enablement.ibm.db2.model.UnitType;
+import org.eclipse.datatools.modelbase.sql.datatypes.CharacterStringDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.DataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.DateDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.TimeDataType;
+import org.eclipse.datatools.modelbase.sql.expressions.SearchCondition;
+import org.eclipse.datatools.modelbase.sql.statements.SQLStatement;
+import org.eclipse.datatools.modelbase.sql.tables.ActionGranularityType;
+import org.eclipse.datatools.modelbase.sql.tables.ActionTimeType;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+
+public class LUWDdlBuilder9 extends LUWDdlBuilder {
+	protected final static String DISTRIBUTE_BY = "DISTRIBUTE BY"; //$NON-NLS-1$
+	protected final static String PARTITION_BY = "PARTITION BY"; //$NON-NLS-1$
+	protected final static String PARTITION = "PARTITION"; //$NON-NLS-1$
+	protected final static String HASH = "HASH"; //$NON-NLS-1$
+	protected final static String REPLICATION = "REPLICATION"; //$NON-NLS-1$
+	protected final static String RANGE = "RANGE"; //$NON-NLS-1$
+	protected final static String NULLS_LAST = "NULLS LAST"; //$NON-NLS-1$
+	protected final static String STARTING = "STARTING"; //$NON-NLS-1$
+	protected final static String ENDING = "ENDING"; //$NON-NLS-1$
+	protected final static String AT = "AT"; //$NON-NLS-1$
+	protected final static String COMPRESS = "COMPRESS"; //$NON-NLS-1$
+	protected final static String YES = "YES"; //$NON-NLS-1$
+	protected final static String EXCLUSIVE = "EXCLUSIVE"; //$NON-NLS-1$
+
+	public LUWDdlBuilder9(){
+	}
+	public LUWDdlBuilder9(LUWDdlGenerator generator){
+		super(generator);
+	}
+
+	protected String getPartitionKey(LUWStorageTable table, boolean quoteIdentifiers) {
+	    StringBuffer buffer = new StringBuffer();
+
+	    LUWPartitionKey partitionKey = table.getPartitionKey();
+	    if (partitionKey != null) {
+	    	StringBuffer partKeyBuf = new StringBuffer();
+		    PartitionMethod partMethod = partitionKey.getPartitionMethod();
+		    if (partMethod == PartitionMethod.HASHING_LITERAL) {
+		    	partKeyBuf.append(NEWLINE).append(TAB).append(DISTRIBUTE_BY).append(SPACE).append(HASH).append(SPACE).append(LEFT_PARENTHESIS);
+			    boolean hasKey = false;
+		    	Iterator it = partitionKey.getColumns().iterator();
+		        while(it.hasNext()) {
+		        	hasKey = true;
+		            Column column = (Column) it.next();
+		            partKeyBuf.append(column.getName());
+		            if(it.hasNext()) {
+		            	partKeyBuf.append(", ");                 //$NON-NLS-1$
+		            }
+		        }
+		        partKeyBuf.append(RIGHT_PARENTHESIS); //$NON-NLS-1$
+		        
+		        if (hasKey) {
+		        	buffer.append(partKeyBuf);
+		        }
+		    } else if (partMethod == PartitionMethod.TABLE_REPLICATED_LITERAL) {   //can not apply replication to table 
+		    	if (table instanceof LUWMaterializedQueryTable) {
+		    		partKeyBuf.append(NEWLINE).append(TAB).append(DISTRIBUTE_BY).append(SPACE).append(REPLICATION);
+		        	buffer.append(partKeyBuf);
+		    	} else {
+		    		partKeyBuf.append(NEWLINE).append(TAB).append(DISTRIBUTE_BY).append(SPACE).append(HASH).append(SPACE).append(LEFT_PARENTHESIS);
+				    boolean hasKey = false;
+			    	Iterator it = partitionKey.getColumns().iterator();
+			        while(it.hasNext()) {
+			        	hasKey = true;
+			            Column column = (Column) it.next();
+			            partKeyBuf.append(column.getName());
+			            if(it.hasNext()) {
+			            	partKeyBuf.append(", ");                 //$NON-NLS-1$
+			            }
+			        }
+			        partKeyBuf.append(RIGHT_PARENTHESIS); //$NON-NLS-1$
+			        
+			        if (hasKey) {
+			        	buffer.append(partKeyBuf);
+			        }
+		    	}
+		    }
+
+	    }
+
+	    LUWDataPartitionKey dataPartitionKey = table.getDataPartitionKey();
+	    if (dataPartitionKey != null) {
+	    	buffer.append(this.getRangePartitions(dataPartitionKey));	    
+	    }
+
+	    return buffer.toString();
+    }
+	
+    private String getRangePartitions(LUWDataPartitionKey partitionKey) {
+    	StringBuffer buffer = new StringBuffer();
+
+    	boolean hasKey = false;
+    	StringBuffer keyBuffer = new StringBuffer();
+    	keyBuffer.append(NEWLINE).append(TAB).append(PARTITION_BY).append(SPACE).append(RANGE).append(LEFT_PARENTHESIS);
+
+	    Collection keyCols = new ArrayList();
+	    Iterator it = partitionKey.getPartitionExpressions().iterator();
+        while(it.hasNext()) {
+        	hasKey = true;
+        	LUWPartitionExpression expression = (LUWPartitionExpression) it.next();
+            Column column = expression.getColumn();
+            keyBuffer.append(column.getName());
+            keyCols.add(column);
+            
+            if (expression.isNullsLast()) {
+            	keyBuffer.append(SPACE).append(NULLS_LAST);
+            }
+            
+            if(it.hasNext()) {
+            	keyBuffer.append(", ");                 //$NON-NLS-1$
+            }
+        }
+
+        keyBuffer.append(RIGHT_PARENTHESIS); //$NON-NLS-1$
+
+    	if (hasKey) {
+    		buffer.append(keyBuffer);
+    	}
+    	
+    	
+    	boolean hasDataPartition = false;
+    	StringBuffer datapartBuffer = new StringBuffer();
+    	datapartBuffer.append(NEWLINE).append(TAB).append(LEFT_PARENTHESIS);
+        LUWStorageTable table = partitionKey.getTable();
+    	for (Iterator iter = table.getDataPartitions().iterator(); iter.hasNext();) {
+    		hasDataPartition = true;
+    		LUWDataPartition partition = (LUWDataPartition) iter.next();
+    		String partName = partition.getName();
+    		if (partName != null && !partName.equals("")){
+    			datapartBuffer.append(PARTITION).append(SPACE).append(partName);
+    		}
+
+    		datapartBuffer.append(this.getRange(partition,keyCols));
+
+    		LUWTableSpace tsp = partition.getRegularDataTableSpace();
+    		if (tsp != null) {
+    			datapartBuffer.append(SPACE).append(IN).append(SPACE).append(tsp.getName());
+    		}
+    		tsp = partition.getLOBDataTableSpace();
+    		if (tsp != null) {
+    			datapartBuffer.append(SPACE).append(LONG).append(SPACE).append(IN).append(SPACE).append(tsp.getName());
+    		}
+    		
+            if(iter.hasNext()) {
+            	datapartBuffer.append(", ").append(NEWLINE).append(TAB);                 //$NON-NLS-1$
+            }
+    	}
+    	datapartBuffer.append(RIGHT_PARENTHESIS);
+
+    	if (hasDataPartition) {
+    		buffer.append(datapartBuffer);
+    	}
+    	
+    	return buffer.toString();
+    }
+
+    
+    private String getRange(LUWDataPartition partition, Collection keyCols) {
+    	StringBuffer buffer = new StringBuffer();
+    	String startStr= "";
+    	String endStr= "";
+    	
+    	for (Iterator keyIter = keyCols.iterator(); keyIter.hasNext();) {
+    		Column keyCol = (Column) keyIter.next();
+		   	for (Iterator iter = partition.getPartitionElements().iterator();iter.hasNext();){
+		    		LUWPartitionElement element = (LUWPartitionElement) iter.next();
+		    		Column column = element.getLUWPartitionExpression().getColumn();
+		    		
+		    		if (column != keyCol) continue;
+		    		DataType type = element.getLUWPartitionExpression().getColumn().getDataType();
+		    		if (type instanceof CharacterStringDataType
+		    			|| type instanceof DateDataType || type instanceof TimeDataType){
+		    			String rangeValue = element.getStarting();
+		    			if (rangeValue.equalsIgnoreCase("MINVALUE") || rangeValue.equalsIgnoreCase("MAXVALUE")) {
+			    			startStr += rangeValue;
+		    			} else {
+			    			startStr += this.getSingleQuotedString(rangeValue);
+		    			}
+		    			
+		    			rangeValue = element.getEnding();
+		    			if (rangeValue.equalsIgnoreCase("MINVALUE") || rangeValue.equalsIgnoreCase("MAXVALUE")) {
+		    				endStr += rangeValue;
+		    			} else {
+		    				endStr += this.getSingleQuotedString(rangeValue);
+		    			}
+		    		} else {
+			    		startStr += element.getStarting();
+			    		endStr += element.getEnding();
+		    		}
+		    		
+		    		if (keyIter.hasNext()) {
+		    			startStr += ",";
+		    			endStr += ",";
+		    		}
+		  	}
+	   	
+    	}
+	   	buffer.append(SPACE).append(STARTING).append(SPACE).append(FROM).append(SPACE).append(LEFT_PARENTHESIS).append(startStr).append(RIGHT_PARENTHESIS).append(SPACE);
+	   	if (!partition.isLowInclusive()) {
+	   		buffer.append(SPACE).append(EXCLUSIVE).append(SPACE);
+	   	}
+	   	
+	   	buffer.append(ENDING).append(SPACE).append(AT).append(SPACE).append(LEFT_PARENTHESIS).append(endStr).append(RIGHT_PARENTHESIS);
+	   	if (!partition.isHighInclusive()) {
+	   		buffer.append(SPACE).append(EXCLUSIVE).append(SPACE);
+	   	}
+	   	
+	   	return buffer.toString();
+    }
+    
+    protected String getCompressionValue(LUWStorageTable table) {
+        StringBuffer text = new StringBuffer();
+        if (table.isRowCompression()) {
+        	text.append(NEWLINE).append(TAB).append(COMPRESS).append(SPACE).append(YES);
+        }
+      
+        text.append(super.getCompressionValue(table));
+
+        return text.toString();
+    }
+
+    protected boolean isTablespaceContainersRequried(LUWTableSpace tablespace) {
+    	if (tablespace.getManagementType() == ManagementType.AUTOMATIC_STORAGE_LITERAL) {
+        	return false;
+    	} else {
+    		return true;
+    	}
+    }
+    
+    protected String getAlterTableAlterRowCompressionString(LUWTable table) {
+    	String compressionStr = NEWLINE + TAB + COMPRESS;
+    	if (table.isRowCompression()) {
+    		compressionStr += SPACE + YES;
+    	} else {
+    		compressionStr += SPACE + NO;
+    	}
+        return compressionStr;
+    }
+
+    protected String getDistributeKeyword() {
+    	return this.DISTRIBUTE_BY;
+    }
+    
+	protected String getBufferPoolSize(LUWBufferPool bufferpool) {
+		return SPACE+ "SIZE " + bufferpool.getSize(); 
+	}
+
+	protected String getDataPartitionOptions( LUWIndex index )
+	{
+		String ddl = "";
+        
+        if (index != null) {
+        	String pmode = ((LUWTable)index.getTable()).getPartitionMode();
+        	
+        	if (pmode != null && !pmode.trim().equals( "" )) { //$NON-NLS-1$
+        		if (index.isNotPartitioned()) {
+        			ddl += NEWLINE + "NOT PARTITIONED ";
+        		}
+
+        		LUWTableSpace luwtbspace = index.getTablespace();
+
+               	if (luwtbspace != null) {
+               		ddl += NEWLINE + "IN " + luwtbspace.getName();
+               	}
+        	}
+        }
+		
+		return ddl;
+	}
+	
+    protected String RecoverDroppedTableString(LUWTableSpace tablespace) {
+    	String text="";
+        //only available for regular and large tablespace  for V9
+        if (tablespace.getTablespaceType() == TableSpaceType.REGULAR_LITERAL
+        	||tablespace.getTablespaceType() == TableSpaceType.LARGE_LITERAL ) {
+        	if (!tablespace.isRecoverDroppedTableOn()) {   //default is ON
+        		text += NEWLINE + TAB + "DROPPED TABLE RECOVERY " + OFF;
+        	}
+        }
+        return text;
+    }
+    
+    @SuppressWarnings("unchecked")
+	public String createTrigger(DB2Trigger trigger, boolean quoteIdentifiers, boolean qualifyNames) {
+        String statement = CREATE + SPACE + TRIGGER + SPACE + getName(trigger, quoteIdentifiers, qualifyNames) + SPACE;
+
+        final ActionTimeType actionTime = trigger.getActionTime();
+        if(actionTime == ActionTimeType.AFTER_LITERAL) {
+            statement += NEWLINE  + TAB + AFTER;
+        }
+        else if(actionTime == ActionTimeType.BEFORE_LITERAL) {
+            //statement += NEWLINE + TAB + NO + SPACE + CASCADE + SPACE + BEFORE;
+        	statement += NEWLINE + TAB + BEFORE;
+        }
+        else if(actionTime == ActionTimeType.INSTEADOF_LITERAL) {
+            statement += NEWLINE + TAB + INSTEAD_OF;
+        }
+	    statement += SPACE;
+
+        if(trigger.isDeleteType()) {
+    	    statement += DELETE;
+    	}
+    	else if(trigger.isInsertType()) {
+    	    statement += INSERT;
+    	}
+    	else if(trigger.isUpdateType()) {
+    	    statement += UPDATE;
+    	    Collection updateColumns = trigger.getTriggerColumn();
+            if(!updateColumns.isEmpty()) {
+                statement += SPACE + OF + SPACE ;
+                Iterator it = updateColumns.iterator();
+                while(it.hasNext()) {
+                    Column column = (Column) it.next();
+                    statement += column.getName();
+                    if(it.hasNext()) {
+                        statement += COMMA + SPACE;
+                    }
+                }
+            }
+    	}
+    	
+        statement += SPACE + ON + SPACE + getName(trigger.getSubjectTable(), quoteIdentifiers, qualifyNames) + NEWLINE;
+
+        final String newRow = trigger.getNewRow();
+        final String oldRow = trigger.getOldRow();
+        final String newTable = trigger.getNewTable();
+        final String oldTable = trigger.getOldTable();
+
+        String referenceStr = EMPTY_STRING;
+        if(newRow != null && newRow.length() != 0 && !trigger.isDeleteType()) {
+        	referenceStr += (referenceStr.equals(EMPTY_STRING)? SPACE: NEWLINE + TAB + TAB) + NEW + SPACE + AS + SPACE + newRow;
+        }
+        if(oldRow != null && oldRow.length() != 0 && !trigger.isInsertType()) {
+        	referenceStr += (referenceStr.equals(EMPTY_STRING)? SPACE: NEWLINE +TAB + TAB) + OLD + SPACE + AS + SPACE + oldRow;
+        }
+        if(newTable != null && newTable.length() != 0) {
+        	referenceStr += (referenceStr.equals(EMPTY_STRING)? SPACE: NEWLINE +TAB + TAB) + this.getTriggerReferenceNewTable() + SPACE + AS + SPACE + newTable;
+        }
+        if(oldTable != null && oldTable.length() != 0 && !trigger.isInsertType()) {
+        	referenceStr += (referenceStr.equals(EMPTY_STRING)? SPACE: NEWLINE +TAB + TAB) + this.getTriggerReferenceOldTable() + SPACE + AS + SPACE + oldTable;
+        }
+
+        if (!referenceStr.equals(EMPTY_STRING)) {
+        	statement += TAB + REFERENCING + SPACE + referenceStr + NEWLINE;
+        }
+
+        if(trigger.getActionGranularity() == ActionGranularityType.ROW_LITERAL) {
+            statement += TAB + FOR + SPACE + EACH + SPACE + ROW;
+    	}
+        else {
+            statement += TAB + FOR + SPACE + EACH + SPACE + STATEMENT;
+    	}
+
+        statement += NEWLINE;
+        
+        SearchCondition condition = trigger.getWhen();
+        if(condition != null) {
+        	String c = condition.getSQL();
+        	if(c != null && c.trim().length() != 0) {
+        		statement += WHEN + SPACE + LEFT_PARENTHESIS + condition.getSQL() + RIGHT_PARENTHESIS + NEWLINE;
+        	}
+        }
+
+        String sqlBody = EMPTY_STRING;
+        Iterator it = trigger.getActionStatement().iterator();
+        while(it.hasNext()) {
+            SQLStatement s = (SQLStatement) it.next();
+            sqlBody += s.getSQL();
+        }
+
+        if (sqlBody.equals(EMPTY_STRING)) {
+        	this.getEngineeringCallBack().writeMessage(MessageFormat.format(
+					DB2DdlMessages.FE_TRIGGER_ACTION_EMPTY, new Object[] { getName(trigger, quoteIdentifiers, qualifyNames)}));
+        	return null;
+        }
+        
+        statement += sqlBody;
+        
+        return statement;
+    }
+
+	public String tablespaceAutoResizeClause(LUWTableSpace tablespace) {
+		return NEWLINE + TAB + AUTORESIZE + SPACE + (tablespace.isAutoResize()?ON:OFF);
+	}
+
+	public String tablespaceIncreaseSizeClause(LUWTableSpace tablespace) {
+    	long incrsize = tablespace.getIncreaseSize();
+    	UnitType incrunit = tablespace.getIncreaseSizeUnit();
+    	int incrpct = tablespace.getIncreasePercent();
+    	if (incrsize != 0) 
+    		return NEWLINE + TAB + INCREASESIZE + SPACE + incrsize + 
+    		((incrunit != null)?(SPACE + incrunit.getLiteral()):EMPTY_STRING);
+    	if (incrpct != 0) 
+    		return NEWLINE + TAB + INCREASESIZE + SPACE + incrpct + SPACE + PERCENT;
+    	return EMPTY_STRING;
+	}
+
+	public String tablespaceMaxSizeClause(LUWTableSpace tablespace) {
+    	long maxsize = tablespace.getMaximumSize();
+    	UnitType maxunit = tablespace.getMaximumSizeUnit();
+    	if (maxsize != 0) {
+    		return NEWLINE + TAB + MAXSIZE + SPACE + maxsize + 
+    		((maxunit != null)?(SPACE + maxunit.getLiteral()):EMPTY_STRING);
+    	}
+    	return NEWLINE + TAB + MAXSIZE + SPACE + NONE;
+	}
+	
+	protected boolean supportsBufferpoolExtendedStorage() {
+		//not supported from v9 onwards
+		//see http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.admin.doc/doc/r0001032.htm
+		return false;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDdlBuilder95.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDdlBuilder95.java
new file mode 100644
index 0000000..bb3f65b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDdlBuilder95.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.ddl;
+
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Role;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+public class LUWDdlBuilder95 extends LUWDdlBuilder9 {
+
+	public LUWDdlBuilder95(){
+	}
+	public LUWDdlBuilder95(LUWDdlGenerator generator){
+		super(generator);
+	}
+
+    public String commentOn(Role role, boolean quoteIdentifiers, boolean qualifyNames) {
+        String comment = role.getDescription();
+        if(comment == null || comment.length() == 0) {
+            return null;
+        }
+
+        return COMMENT + SPACE + ON + SPACE + ROLE + SPACE + getName(role, quoteIdentifiers) + SPACE + IS
+        	+ NEWLINE + this.getSingleQuotedString(comment);
+    }
+
+	protected String getCommentType(SQLObject sqlObject,boolean quoteIdentifiers, boolean qualifyNames) {
+        String comments = "";
+        if (sqlObject instanceof Role) {
+        	comments += ROLE + SPACE + getName((Role)sqlObject,quoteIdentifiers);
+        } else {
+        	comments = super.getCommentType(sqlObject, quoteIdentifiers, qualifyNames);
+        }
+        return comments;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDdlBuilder97.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDdlBuilder97.java
new file mode 100644
index 0000000..e66ff18
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDdlBuilder97.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.ddl;
+
+import org.eclipse.datatools.modelbase.sql.schema.Sequence;
+
+public class LUWDdlBuilder97 extends LUWDdlBuilder95{
+
+	public LUWDdlBuilder97(){
+	}
+	public LUWDdlBuilder97(LUWDdlGenerator generator){
+		super(generator);
+	}
+
+    public String commentOn(Sequence sequence, boolean quoteIdentifiers, boolean qualifyNames) {
+        String comment = sequence.getDescription();
+        if(comment == null || comment.length() == 0) {
+            return null;
+        }
+
+        return COMMENT + SPACE + ON + SPACE + SEQUENCE + SPACE + getName(sequence, quoteIdentifiers,qualifyNames) + SPACE + IS
+        	+ NEWLINE + this.getSingleQuotedString(comment);
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDdlGenerator.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDdlGenerator.java
new file mode 100644
index 0000000..1c7e5ae
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDdlGenerator.java
@@ -0,0 +1,2501 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.ddl;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.ResourceBundle;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.Vector;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExecutableExtension;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentServiceImpl;
+import org.eclipse.datatools.connectivity.sqm.core.rte.EngineeringOption;
+import org.eclipse.datatools.connectivity.sqm.core.rte.IEngineeringCallBack;
+import org.eclipse.datatools.connectivity.sqm.internal.core.rte.EngineeringOptionCategory;
+import org.eclipse.datatools.connectivity.sqm.internal.core.rte.EngineeringOptionCategoryID;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.LUWCatalogDatabase;
+import org.eclipse.datatools.enablement.ibm.db2.luw.catalog.LUWCatalogFederatedProcedure;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWArrayDataType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWCursorDataType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGlobalVariable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMaterializedQueryTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleArrayDataType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleCondition;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleCursorDataType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleDistinctType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleFunction;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleGlobalVariable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleProcedure;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleRowDataType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNickname;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRowDataType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWUserMapping;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWView;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.PLSQLPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.PLSQLPackageBody;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Alias;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Index;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2IndexType;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2OLAPObject;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Trigger;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2UserDefinedFunction;
+import org.eclipse.datatools.enablement.ibm.ddl.CoreDdlGenerator;
+import org.eclipse.datatools.enablement.ibm.ddl.DdlBuilder;
+import org.eclipse.datatools.enablement.ibm.ddl.DdlGenerationUtility;
+import org.eclipse.datatools.enablement.ibm.ddl.ExtendDdlBuilder;
+import org.eclipse.datatools.enablement.ibm.ddl.OlapDdlBuilder;
+import org.eclipse.datatools.enablement.ibm.util.DependencyImpactAnalyst;
+import org.eclipse.datatools.enablement.ibm.util.DependencyImpactDescription;
+import org.eclipse.datatools.enablement.ibm.util.EngineeringOptionID;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.AuthorizationIdentifier;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Group;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Privilege;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Role;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.RoleAuthorization;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.User;
+import org.eclipse.datatools.modelbase.sql.constraints.CheckConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.UniqueConstraint;
+import org.eclipse.datatools.modelbase.sql.datatypes.DistinctUserDefinedType;
+import org.eclipse.datatools.modelbase.sql.datatypes.StructuredUserDefinedType;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.datatools.modelbase.sql.routines.UserDefinedFunction;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.schema.Sequence;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;
+import org.eclipse.emf.ecore.EObject;
+
+public final class LUWDdlGenerator extends CoreDdlGenerator implements IExecutableExtension {
+	
+	private static ILUWModuleDdlBuilder moduleBuilder = null;
+	public void setInitializationData(IConfigurationElement config, String propertyName, Object data) throws CoreException {
+		this.product = config.getAttribute("product"); //$NON-NLS-1$
+		this.version = config.getAttribute("version"); //$NON-NLS-1$
+
+		if ("V8.1".equals(this.version)
+			||"V8.2".equals(this.version)	){
+			builder = new LUWDdlBuilder(this);			
+		} else if ("V9.1".equals(this.version)) {
+			builder = new LUWDdlBuilder9(this);
+		} else if ("V9.5".equals(this.version)) {
+			builder = new LUWDdlBuilder95(this);
+		} else {
+			builder = new LUWDdlBuilder97(this);
+		}
+		
+	}
+	
+	//@d00058820gs: use new structure/methods
+    public String[] generateDDL(SQLObject[] elements, IProgressMonitor progressMonitor, IEngineeringCallBack callback) {
+    	this.builder.setEngineeringCallBack(callback);
+    	String[] statements = new String[0];
+        String[] create = new String[0];
+        String[] drop = new String[0];
+        String[] comment = new String[0];
+        String[] statistics = new String[0];
+    	EngineeringOption[] options = this.getSelectedOptions(elements);
+    	
+        if (!this.checkModel(elements, options)) {
+        	this.builder.getEngineeringCallBack().writeMessage(LUWDdlMessages.FE_INVALID_MODEL);
+        	return statements;
+        }
+        
+//    	if (EngineeringOptionID.generateCreateStatement(options)) {
+    			create = this.createSQLObjects(elements, EngineeringOptionID.generateQuotedIdentifiers(options),
+                EngineeringOptionID.generateFullyQualifiedNames(options), progressMonitor,callback);
+//    	}
+        if(EngineeringOptionID.generateDropStatement(options)) {
+            drop = this.dropSQLObjects(elements, EngineeringOptionID.generateQuotedIdentifiers(options),
+                    EngineeringOptionID.generateFullyQualifiedNames(options), progressMonitor,callback);
+        }
+        //@d00058820gs
+        if (EngineeringOptionID.generateCommentStatement(options)) {
+            comment = this.commentSQLObjects(elements, EngineeringOptionID.generateQuotedIdentifiers(options),
+            EngineeringOptionID.generateFullyQualifiedNames(options), progressMonitor,callback);
+        }
+        
+        if (EngineeringOptionID.generateStatistics(options)) {
+            statistics = this.updateStatisticsStatements(elements, EngineeringOptionID.generateQuotedIdentifiers(options),
+                    EngineeringOptionID.generateFullyQualifiedNames(options), progressMonitor,callback);
+        }
+        
+        statements = new String[create.length + drop.length + comment.length + statistics.length];
+        int i=0;
+        for(int j=0; j<drop.length; ++i,++j) {
+            statements[i] = drop[j];
+        }
+        for(int j=0; j<create.length; ++i,++j) {
+            statements[i] = create[j];
+        }
+        for(int j=0; j<comment.length; ++i,++j) {
+            statements[i] = comment[j];
+        }
+        for(int j=0; j<statistics.length; ++i,++j) {
+            statements[i] = statistics[j];
+        }
+        
+        return statements;
+    }
+
+    public String[] createSQLObjects(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor,IEngineeringCallBack callback) {
+    	this.builder.setEngineeringCallBack(callback);
+    	String[] statements = this.createStatements(elements, quoteIdentifiers,
+        		qualifyNames, progressMonitor, 100);
+
+        if (EngineeringOptionID.generateCreateStatement(options)) {
+	        OlapDdlBuilder olapBuilder = DdlGenerationUtility.getOlapDdlBuilder(this.product, this.version);
+	        if (olapBuilder != null && EngineeringOptionID.getOptionValue(olapBuilder.getOption(),this.getSelectedOptions(elements))) {
+	        	String[] olap = olapBuilder.buildCreateStatement(elements,quoteIdentifiers,qualifyNames);
+	
+	        	String[] temp = statements;
+	            statements = new String[temp.length + olap.length];
+	            for(int i=0; i<temp.length; ++i) {
+	                statements[i] = temp[i];
+	            }
+	            for(int i=0; i<olap.length; ++i) {
+	                statements[i+temp.length] = olap[i];
+	            }
+	
+	        }
+        }
+        return statements;
+    }
+    
+    public String[] dropSQLObjects(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor,IEngineeringCallBack callback) {
+    	this.builder.setEngineeringCallBack(callback);
+        String[] statements = this.dropStatements(elements, quoteIdentifiers,
+        		qualifyNames, progressMonitor, 100);
+        
+        String[] olap = null;
+        
+        OlapDdlBuilder olapBuilder = DdlGenerationUtility.getOlapDdlBuilder(this.product, this.version);
+        if (olapBuilder != null && EngineeringOptionID.getOptionValue(olapBuilder.getOption(),this.getSelectedOptions(elements))) {
+          olap = olapBuilder.buildDropStatement(elements,quoteIdentifiers,qualifyNames);
+
+          if (olap != null) {
+            String[] temp = statements;
+            statements = new String[temp.length + olap.length];
+            for(int i=0; i<olap.length; ++i) {
+              statements[i] = olap[i];
+            }
+          
+            for(int i=0; i<temp.length; ++i) {
+              statements[i+olap.length] = temp[i];
+            }
+          }
+        }
+        
+        return statements;
+    }
+
+    //@d00058820gs: use new structure/methods
+    public String[] commentSQLObjects(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor,IEngineeringCallBack callback) {
+    	this.builder.setEngineeringCallBack(callback);
+        String[] statements = this.commentStatements(elements, quoteIdentifiers,
+                qualifyNames, progressMonitor, 100);
+        
+//        OlapDdlBuilder olapBuilder = DdlGenerationUtility.getOlapDdlBuilder(this.product, this.version);
+//        if (olapBuilder != null && EngineeringOptionID.getOptionValue(olapBuilder.getOption(),this.getSelectedOptions(elements))) {
+//            String[] olap = olapBuilder.buildCommentStatement(elements,quoteIdentifiers,qualifyNames);
+//
+//            String[] temp = statements;
+//            statements = new String[temp.length + olap.length];
+//            for(int i=0; i<temp.length; ++i) {
+//                statements[i] = temp[i];
+//            }
+//            for(int i=0; i<olap.length; ++i) {
+//                statements[i+temp.length] = olap[i];
+//            }
+//        }
+        return statements;
+    }
+
+    //@d00058820gs: use new structure/methods
+    private String[] createStatements(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor, int task) {
+    	Map patternMap = DdlGenerationUtility.getCodetemplatePatterns();
+
+    	long exclusiveType = 0;
+    	for (int i = 0; i< elements.length; i++){
+    		if (!(elements[i] instanceof Column)) {
+    			exclusiveType = exclusiveType | EngineeringOptionID.COLUMN;
+    			break;
+    		}
+    	}
+    	
+    	for (int i = 0; i< elements.length; i++){
+    		if ((elements[i] instanceof User) || (elements[i] instanceof Group))
+    		{
+    		  ((AuthorizationIdentifier)elements[i]).getDatabase().getPrivileges();
+    			break;
+    		}
+    	}
+    	
+    	Vector processedTablespace = new Vector();
+    	LUWDdlScript script = new LUWDdlScript();
+        
+        Set set = null;
+        if (optionDependency != null)
+            set = optionDependency.getElementsToUse();
+
+        Iterator it = null;
+        if (set != null && set.size() > 0)
+            it = optionDependency.getElementsToUse().iterator();
+        else
+            it = LUWDdlGenerator.getAllContainedDisplayableElementSet(elements).iterator(); 
+        
+        EngineeringOption[] options = this.getSelectedOptions(elements);   
+        List<UserDefinedType> userDefinedTypes = new ArrayList<UserDefinedType>();
+		List<UserDefinedType> sortedUserDefinedTypes = new ArrayList<UserDefinedType>();
+		
+        while(it.hasNext()) {
+            Object o = it.next();
+
+            if(o instanceof LUWDatabasePackage) {
+            	if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+                if (EngineeringOptionID.generateGrantStatement(options)) {
+            		String[] grantStatements = builder.grantOn((LUWDatabasePackage) o, quoteIdentifiers, qualifyNames);
+            		for (int igrant = 0; igrant <grantStatements.length; igrant ++) {
+            			script.addGrantStatement(grantStatements[igrant]);
+            		}
+            	}
+            }
+            else if(o instanceof LUWNickname) {
+            	if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+            	ExtendDdlBuilder extendDdlBuilder = DdlGenerationUtility.getNicknameDdlBuilder(this.product, this.version);
+                if (extendDdlBuilder != null && EngineeringOptionID.getOptionValue(extendDdlBuilder.getOption(),options)) {
+	                String statement = builder.createNickname((LUWNickname) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) script.addCreateNicknameStatement(statement);
+                }
+                if (EngineeringOptionID.generateGrantStatement(options)) {
+            		String[] grantStatements = builder.grantOn((LUWNickname) o, quoteIdentifiers, qualifyNames);
+            		for (int igrant = 0; igrant <grantStatements.length; igrant ++) {
+            			script.addGrantStatement(grantStatements[igrant]);
+            		}
+            	}
+
+            }
+            else if(o instanceof LUWServer) {
+            	if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+                LUWServer luwServer = (LUWServer)o;
+            	ExtendDdlBuilder extendDdlBuilder = DdlGenerationUtility.getRemoteServerDdlBuilder(this.product, this.version);
+                if (extendDdlBuilder != null && EngineeringOptionID.getOptionValue(extendDdlBuilder.getOption(),options)) {
+                	String statement = builder.createRemoteServer(luwServer, quoteIdentifiers, qualifyNames);                
+	                if(statement != null) script.addCreateRemoteServerStatement(statement);
+                }
+            }
+            else if(o instanceof LUWWrapper) {
+            	if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+                LUWWrapper wrapper = (LUWWrapper) o;                    
+                ExtendDdlBuilder extendDdlBuilder = DdlGenerationUtility.getWrapperDdlBuilder(this.product, this.version);
+                if (extendDdlBuilder != null && EngineeringOptionID.getOptionValue(extendDdlBuilder.getOption(),options)) {
+                    String statement = builder.createWrapper(wrapper, quoteIdentifiers, qualifyNames);                
+                    if(statement != null) script.addCreateWrapperStatement(statement);
+                }
+            }
+            else if(o instanceof LUWUserMapping) {
+            	if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+                ExtendDdlBuilder extendDdlBuilder = DdlGenerationUtility.getUserMappingDdlBuilder(this.product, this.version);
+                if (extendDdlBuilder != null && EngineeringOptionID.getOptionValue(extendDdlBuilder.getOption(),options)) {
+                    String statement = builder.createUserMapping((LUWUserMapping) o, quoteIdentifiers, qualifyNames);                
+                    if(statement != null) script.addCreateUserMappingStatement(statement);
+                }
+            }            
+            else if(o instanceof LUWMaterializedQueryTable) {
+                if (!EngineeringOptionID.generateMQTs(options)) continue;
+            	if (EngineeringOptionID.generateCreateStatement(options)) {
+	                String statement = builder.createMQT((LUWMaterializedQueryTable) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) script.addCreateViewStatement(statement);
+            	}
+                if (EngineeringOptionID.generateGrantStatement(options)) {
+            		String[] grantStatements = builder.grantOn((LUWMaterializedQueryTable) o, quoteIdentifiers, qualifyNames);
+            		for (int igrant = 0; igrant <grantStatements.length; igrant ++) {
+            			script.addGrantStatement(grantStatements[igrant]);
+            		}
+            	}
+            }
+            else if(o instanceof LUWTable) {
+            	if (!EngineeringOptionID.generateTables(options)) continue;
+            	if (EngineeringOptionID.generateCreateStatement(options)) {
+	            	String statement = builder.createTable((LUWTable) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) {
+	                	String prolog = builder.createTableCodetemplate((LUWTable)o, DdlGenerationUtility.GENERATE_CREATE_PATTERN, true,patternMap);
+	                	String postlog = builder.createTableCodetemplate((LUWTable)o, DdlGenerationUtility.GENERATE_CREATE_PATTERN, false,patternMap);
+	            		script.addCreateTableStatements(statement,
+	            				script.combineTemplateStatements(prolog,statement,postlog));
+	                }
+            	}
+                if (EngineeringOptionID.generateGrantStatement(options)) {
+            		String[] grantStatements = builder.grantOn((LUWTable) o, quoteIdentifiers, qualifyNames);
+            		for (int igrant = 0; igrant <grantStatements.length; igrant ++) {
+            			script.addGrantStatement(grantStatements[igrant]);
+            		}
+            	}
+            }
+            else if(o instanceof LUWTableSpace) {
+            	if (!EngineeringOptionID.generateTablespaces(options)) continue;
+            	if (EngineeringOptionID.generateCreateStatement(options)) {
+            		String statement = builder.createTablespace((LUWTableSpace) o, quoteIdentifiers);
+            		if(statement != null) script.addCreateTablespaceStatement(statement);
+                }
+            	if (EngineeringOptionID.generateGrantStatement(options)) {
+            		String[] grantStatements = builder.grantOn((LUWTableSpace)  o, quoteIdentifiers);
+            		for (int igrant = 0; igrant <grantStatements.length; igrant ++) {
+            			script.addGrantStatement(grantStatements[igrant]);
+            		}
+            	}
+            }
+            else if(o instanceof LUWView) {
+            	if (!EngineeringOptionID.generateViews(options)) continue;
+            	if (EngineeringOptionID.generateCreateStatement(options)) {
+	                String statement = builder.createView((LUWView) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) {
+	                	String prolog = builder.createViewCodetemplate((LUWView)o, DdlGenerationUtility.GENERATE_CREATE_PATTERN, true,patternMap);
+	                	String postlog = builder.createViewCodetemplate((LUWView)o, DdlGenerationUtility.GENERATE_CREATE_PATTERN, false,patternMap);
+	            		script.addCreateViewStatements(statement,
+	            				script.combineTemplateStatements(prolog,statement,postlog));
+	                }
+            	}
+            	if (EngineeringOptionID.generateGrantStatement(options)) {
+            		String[] grantStatements = builder.grantOn((LUWView)  o, quoteIdentifiers, qualifyNames);
+            		for (int igrant = 0; igrant <grantStatements.length; igrant ++) {
+            			script.addGrantStatement(grantStatements[igrant]);
+            		}
+            	}
+
+            }
+            else if(o instanceof DB2Alias) {
+            	if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+                if (!EngineeringOptionID.generateAliases(options)) continue;
+                String statement = builder.createAlias((DB2Alias) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCreateViewStatement(statement);
+            }
+            else if(o instanceof DB2Procedure) {
+            	String statement = "";
+            	if ( o instanceof FederatedProcedure)  // fsp - pyl
+            	{
+                	if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+                   	ExtendDdlBuilder extendDdlBuilder = DdlGenerationUtility.getFederatedProcedureDdlBuilder(this.product, this.version);
+                    if (extendDdlBuilder != null && EngineeringOptionID.getOptionValue(extendDdlBuilder.getOption(),options)) {
+                        statement = builder.createFederatedProcedure((FederatedProcedure) o, quoteIdentifiers, qualifyNames);
+    	                if(statement != null) script.addCreateFederatedProcedureStatement(statement);
+                    }
+            	} else if (o instanceof LUWModuleProcedure){
+               		if (!EngineeringOptionID.generateStoredProcedures(options)) continue;
+                	if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+            		statement = builder.createProcedure((DB2Procedure) o, quoteIdentifiers, qualifyNames);
+            		if (statement != null) script.addCreateModuleRoutineStatement(statement);
+            	}else
+            	{
+               		if (!EngineeringOptionID.generateStoredProcedures(options)) continue;
+                	if (EngineeringOptionID.generateCreateStatement(options)) {
+	            		statement = builder.createProcedure((DB2Procedure) o, quoteIdentifiers, qualifyNames);
+	            	    if(statement != null) {
+	                    	String prolog = builder.createRoutineCodetemplate((DB2Procedure)o, DdlGenerationUtility.GENERATE_CREATE_PATTERN, true,patternMap);
+	                    	String postlog = builder.createRoutineCodetemplate((DB2Procedure)o, DdlGenerationUtility.GENERATE_CREATE_PATTERN, false,patternMap);
+	                		script.addCreateRoutineStatements(statement,
+		            				script.combineTemplateStatements(prolog,statement,postlog));
+		    	            	    }
+                	}
+                	if (EngineeringOptionID.generateGrantStatement(options)) {
+                		String[] grantStatements = builder.grantOn((DB2Procedure)  o, quoteIdentifiers, qualifyNames);
+                		for (int igrant = 0; igrant <grantStatements.length; igrant ++) {
+                			script.addGrantStatement(grantStatements[igrant]);
+                		}
+                	}
+            	}
+            }
+            else if(o instanceof DB2UserDefinedFunction) {
+            	if (!EngineeringOptionID.generateFunctions(options)) continue;
+            	
+            	if (o instanceof LUWModuleFunction) {
+	            	if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+	                String statement = builder.createUserDefinedFunction((DB2UserDefinedFunction) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) script.addCreateModuleRoutineStatement(statement);
+            	}  else {
+	            	if (EngineeringOptionID.generateCreateStatement(options)) {
+		                String statement = builder.createUserDefinedFunction((DB2UserDefinedFunction) o, quoteIdentifiers, qualifyNames);
+		                if(statement != null) {
+		                	String prolog = builder.createRoutineCodetemplate((DB2UserDefinedFunction)o, DdlGenerationUtility.GENERATE_CREATE_PATTERN, true,patternMap);
+		                	String postlog = builder.createRoutineCodetemplate((DB2UserDefinedFunction)o, DdlGenerationUtility.GENERATE_CREATE_PATTERN, false,patternMap);
+		            		script.addCreateRoutineStatements(statement,
+		            				script.combineTemplateStatements(prolog,statement,postlog));
+		                }
+	            	}
+	            	if (EngineeringOptionID.generateGrantStatement(options)) {
+	            		String[] grantStatements = builder.grantOn((DB2UserDefinedFunction)  o, quoteIdentifiers, qualifyNames);
+	            		for (int igrant = 0; igrant <grantStatements.length; igrant ++) {
+	            			script.addGrantStatement(grantStatements[igrant]);
+	            		}
+	            	}
+            	}
+            }
+            else if(o instanceof DB2Trigger) {
+            	if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+            	if (!EngineeringOptionID.generateTriggers(options)) continue;
+                String statement = builder.createTrigger((DB2Trigger) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCreateTriggerStatement(statement);
+            }
+            else if(o instanceof CheckConstraint) {
+            	if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+                if(!EngineeringOptionID.generateCKConstraints(options)) continue;
+                String statement = builder.addCheckConstraint((CheckConstraint) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) {
+                	String prolog = builder.createConstraintCodetemplate((CheckConstraint)o, DdlGenerationUtility.GENERATE_CREATE_PATTERN, true,patternMap);
+                	String postlog = builder.createConstraintCodetemplate((CheckConstraint)o, DdlGenerationUtility.GENERATE_CREATE_PATTERN, false,patternMap);
+            		script.addAlterTableAddConstraintStatements(statement,
+            				script.combineTemplateStatements(prolog,statement,postlog));
+                }
+            }
+            else if(o instanceof UniqueConstraint) {
+            	if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+            	if(!EngineeringOptionID.generatePKConstraints(options) || builder.isImplicitPK((UniqueConstraint)o)) continue;
+                String statement = builder.addUniqueConstraint((UniqueConstraint) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) {
+                	String prolog = builder.createConstraintCodetemplate((UniqueConstraint)o, DdlGenerationUtility.GENERATE_CREATE_PATTERN, true,patternMap);
+                	String postlog = builder.createConstraintCodetemplate((UniqueConstraint)o, DdlGenerationUtility.GENERATE_CREATE_PATTERN, false,patternMap);
+            		script.addAlterTableAddConstraintStatements(statement,
+            				script.combineTemplateStatements(prolog,statement,postlog));
+                }
+            }
+            else if(o instanceof ForeignKey) {
+            	if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+            	if(!EngineeringOptionID.generateFKConstraints(options)) continue;
+                String statement = builder.addForeignKey((ForeignKey) o, quoteIdentifiers, qualifyNames);
+                if (statement != null) {
+                	String prolog = builder.createConstraintCodetemplate((ForeignKey)o, DdlGenerationUtility.GENERATE_CREATE_PATTERN, true,patternMap);
+                	String postlog = builder.createConstraintCodetemplate((ForeignKey)o, DdlGenerationUtility.GENERATE_CREATE_PATTERN, false,patternMap);
+            		script.addAlterTableAddForeignKeyStatements(statement,
+            				script.combineTemplateStatements(prolog,statement,postlog));
+                }
+            }
+            else if(o instanceof DB2Index) {
+            	if (!EngineeringOptionID.generateIndexes(options) || ((DB2Index)o).isSystemGenerated() || ((DB2Index)o).getIndexType() != DB2IndexType.REGULAR_LITERAL) continue;
+            	if (EngineeringOptionID.generateCreateStatement(options)) {
+	            	String statement = builder.createIndex((DB2Index) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) {
+	                    if (((DB2Index)o).getTable() instanceof LUWTable) {
+	                       	script.addCreateIndexStatement(statement);
+	                    } else {
+	                       	script.addCreateViewIndexStatement(statement);
+	                    }
+	                }
+            	}
+            	if (EngineeringOptionID.generateGrantStatement(options)) {
+            		String[] grantStatements = builder.grantOn((DB2Index)  o, quoteIdentifiers, qualifyNames);
+            		for (int igrant = 0; igrant <grantStatements.length; igrant ++) {
+            			script.addGrantStatement(grantStatements[igrant]);
+            		}
+            	}
+            }
+            else if(o instanceof Sequence) {
+            	if (!EngineeringOptionID.generateSequences(options)) continue;
+            	if (EngineeringOptionID.generateCreateStatement(options)) {
+            		String statement = builder.createSequence((Sequence) o, quoteIdentifiers, qualifyNames);
+                	if(statement != null) script.addCreateSequenceStatement(statement);
+                }
+            	if (EngineeringOptionID.generateGrantStatement(options)) {
+            		String[] grantStatements = builder.grantOn((Sequence)  o, quoteIdentifiers, qualifyNames);
+            		for (int igrant = 0; igrant <grantStatements.length; igrant ++) {
+            			script.addGrantStatement(grantStatements[igrant]);
+            		}
+            	}
+            }
+//            else if(o instanceof DistinctUserDefinedType) {
+//            	if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+//            	if (!EngineeringOptionID.generateUserDefinedTypes(options)) continue;
+//                if (o instanceof LUWModuleDistinctType) {
+//                    String statement = builder.createModuleDistinctType((LUWModuleDistinctType) o, quoteIdentifiers, qualifyNames);
+//                    if(statement != null) script.addCreateModuleTypeStatement(statement);
+//                } else { 
+//	                String statement = builder.createDistinctUserDefinedType((DistinctUserDefinedType) o, quoteIdentifiers, qualifyNames);
+//	                if(statement != null) script.addCreateUserDefinedTypeStatement(statement);
+//                }
+//            }
+//            else if (o instanceof StructuredUserDefinedType){
+//            	if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+//            	if (!EngineeringOptionID.generateUserDefinedTypes(options)) continue;
+//                String statement = builder.createStructuredUserDefinedType((StructuredUserDefinedType) o, quoteIdentifiers, qualifyNames);
+//                if(statement != null) script.addCreateUserDefinedTypeStatement(statement);
+//            }
+            else if(o instanceof Column) {
+            	if (!EngineeringOptionID.generateTables(options)) continue;
+            	if (EngineeringOptionID.generateCreateStatement(options)) {
+            	if ((exclusiveType & EngineeringOptionID.COLUMN) == EngineeringOptionID.COLUMN) continue;
+	                String statement = builder.alterTableAddColumn((Column)o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) script.addAlterTableAddColumnStatement(statement);
+            	}
+            }
+            else if(o instanceof LUWBufferPool) {
+            	if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+                if (!EngineeringOptionID.generateBufferPool(options)) continue;
+                String statement = builder.createBufferPool((LUWBufferPool) o, quoteIdentifiers);
+                if(statement != null) script.addCreateBufferPoolStatement(statement);
+            }
+            else if(o instanceof LUWPartitionGroup) {
+            	if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+                if (!EngineeringOptionID.generatePartitionGroup(options)) continue;
+                String statement = builder.createPartitionGroup((LUWPartitionGroup) o, quoteIdentifiers);
+                if(statement != null) script.addCreatePartitionGroupStatement(statement);
+            }
+            else if(o instanceof Schema) {
+            	//if(!EngineeringOptionID.generateFullyQualifiedNames()) continue;
+                if(!EngineeringOptionID.generateSchemas(options)) continue;
+            	if (EngineeringOptionID.generateCreateStatement(options)) {
+	                String statement = builder.createSchema((Schema) o, quoteIdentifiers,qualifyNames);
+	                if(statement != null) script.addCreateSchemaStatement(statement);
+            	}
+            	if (EngineeringOptionID.generateGrantStatement(options)) {
+            		String[] grantStatements = builder.grantOn((Schema)  o, quoteIdentifiers, qualifyNames);
+            		for (int igrant = 0; igrant <grantStatements.length; igrant ++) {
+            			script.addGrantStatement(grantStatements[igrant]);
+            		}
+            	}
+            }
+            else if(o instanceof Database) {
+                if(!EngineeringOptionID.generateDatabase(options)) continue;
+            	if (EngineeringOptionID.generateGrantStatement(options)) {
+            		String[] grantStatements = builder.grantOn((Database)  o, quoteIdentifiers);
+            		for (int igrant = 0; igrant <grantStatements.length; igrant ++) {
+            			script.addGrantStatement(grantStatements[igrant]);
+            		}
+            	}
+            }
+            else if(o instanceof Privilege) {
+            	//if(!this.generateFullyQualifiedNames()) continue;
+                if(!EngineeringOptionID.generateGrantStatement(options)) continue;
+                String statement = builder.getGrantPrivilegeStatement((Privilege)o,quoteIdentifiers,qualifyNames);
+                if(statement != null) script.addGrantStatement(statement);
+            }
+            else if(o instanceof Role) {
+                if (!EngineeringOptionID.generateRoles(options)) continue;
+            	if (EngineeringOptionID.generateCreateStatement(options)) {
+	                String statement = builder.createRole((Role)o, quoteIdentifiers);
+	                if(statement != null) script.addCreateRoleStatement(statement);
+            	}
+//                if (EngineeringOptionID.generateGrantStatement(options)) {
+//            		String[] grantStatements = builder.grantOn((Role) o, quoteIdentifiers);
+//            		for (int igrant = 0; igrant <grantStatements.length; igrant ++) {
+//            			script.addGrantStatement(grantStatements[igrant]);
+//            		}
+//            	}
+            }
+            else if(o instanceof RoleAuthorization) {
+                if (!EngineeringOptionID.generateGrantStatement(options)) continue;
+                String statement = builder.getGrantRoleAuthorizationStatement((RoleAuthorization)o,quoteIdentifiers);
+                if(statement != null) script.addGrantStatement(statement);
+            }
+            else if (o instanceof PLSQLPackage) {
+            	if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+            	if (!EngineeringOptionID.generatePacakges(options)) continue;
+                String statement = builder.createPlsqlPackage((PLSQLPackage) o, quoteIdentifiers, qualifyNames);
+                if (statement != null) script.addCreatePlsqlPackageStatement(statement);
+
+                if (EngineeringOptionID.generateGrantStatement(options)) {
+            		String[] grantStatements = builder.grantOn((PLSQLPackage) o, quoteIdentifiers, qualifyNames);
+            		for (int igrant = 0; igrant <grantStatements.length; igrant ++) {
+            			script.addGrantStatement(grantStatements[igrant]);
+            		}
+            	}
+            }
+            else if (o instanceof PLSQLPackageBody) {
+            	if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+            	if (!EngineeringOptionID.generatePacakgeBodys(options)) continue;
+                String statement = builder.createPlsqlPackageBody((PLSQLPackageBody)o, quoteIdentifiers, qualifyNames);
+                if (statement != null) script.addCreatePlsqlPackageBodyStatement(statement);
+            }
+            else if(o instanceof LUWModule) {
+            	if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+                if (!EngineeringOptionID.generateModules(options)) continue;
+                String statement = builder.createModule((LUWModule) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCreateModuleStatement(statement);
+                
+                if (EngineeringOptionID.generateGrantStatement(options)) {
+            		String[] grantStatements = builder.grantOn((LUWModule) o, quoteIdentifiers, qualifyNames);
+            		for (int igrant = 0; igrant <grantStatements.length; igrant ++) {
+            			script.addGrantStatement(grantStatements[igrant]);
+            		}
+            	}
+
+            }
+            else if(o instanceof LUWModuleCondition) {
+            	if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+                if (!EngineeringOptionID.generateModuleConditions(options)) continue;
+                String statement = builder.createModuleCondition((LUWModuleCondition) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCreateModuleConditionStatement(statement);
+            }
+            else if(o instanceof LUWGlobalVariable) {
+            	if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+                if (!EngineeringOptionID.generateGlobalVariables(options)) continue;
+                
+                if (o instanceof LUWModuleGlobalVariable) {
+                    String statement = builder.createModuleGlobalVariable((LUWModuleGlobalVariable) o, quoteIdentifiers, qualifyNames);
+                    if(statement != null) script.addCreateModuleGlobalVariableStatement(statement);
+                } else {
+                    String statement = builder.createGlobalVariable((LUWGlobalVariable) o, quoteIdentifiers, qualifyNames);
+                    if(statement != null) script.addCreateGlobalVariableStatement(statement);
+                    if (EngineeringOptionID.generateGrantStatement(options)) {
+                		String[] grantStatements = builder.grantOn((LUWGlobalVariable) o, quoteIdentifiers, qualifyNames);
+                		for (int igrant = 0; igrant <grantStatements.length; igrant ++) {
+                			script.addGrantStatement(grantStatements[igrant]);
+                		}
+                	}
+
+                }
+            }
+//            else if (o instanceof LUWArrayDataType){
+//            	if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+//            	if (!EngineeringOptionID.generateUserDefinedTypes(options)) continue;
+//            	
+//                String statement = builder.createArrayDataType((LUWArrayDataType) o, quoteIdentifiers, qualifyNames);
+//            	if (o instanceof LUWModuleArrayDataType) {
+//	                if(statement != null) script.addCreateModuleTypeStatement(statement);
+//            	} else {
+//	                if(statement != null) script.addCreateUserDefinedTypeStatement(statement);
+//            	}
+//            }
+//            else if (o instanceof LUWRowDataType){
+//            	if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+//            	if (!EngineeringOptionID.generateUserDefinedTypes(options)) continue;
+//            	
+//                String statement = builder.createRowDataType((LUWRowDataType) o, quoteIdentifiers, qualifyNames);
+//            	if (o instanceof LUWModuleRowDataType) {
+//	                if(statement != null) script.addCreateModuleTypeStatement(statement);
+//            	} else {
+//	                if(statement != null) script.addCreateUserDefinedTypeStatement(statement);
+//            	}
+//            }
+//            else if (o instanceof LUWCursorDataType){
+//            	if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+//            	if (!EngineeringOptionID.generateUserDefinedTypes(options)) continue;
+//            	
+//                String statement = builder.createCursorDataType((LUWCursorDataType) o, quoteIdentifiers, qualifyNames);
+//            	if (o instanceof LUWModuleCursorDataType) {
+//	                if(statement != null) script.addCreateModuleTypeStatement(statement);
+//            	} else {
+//	                if(statement != null) script.addCreateUserDefinedTypeStatement(statement);
+//            	}
+//            }
+
+            else if (o instanceof UserDefinedType) {
+				userDefinedTypes.add((UserDefinedType)o);
+			}
+        }
+        
+        //sort the UserDefinedTypes	
+		sortUDTS(sortedUserDefinedTypes,userDefinedTypes) ;
+		
+		// generated the ddl
+		for (int j = 0; j < sortedUserDefinedTypes.size(); j++) {
+			UserDefinedType type = (UserDefinedType) sortedUserDefinedTypes.toArray()[j];
+			if (type instanceof StructuredUserDefinedType) {
+				if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+				if (!EngineeringOptionID.generateUserDefinedTypes(options)) continue;
+				String statement = builder.createStructuredUserDefinedType( 
+						(StructuredUserDefinedType) type, quoteIdentifiers, qualifyNames);
+				if (statement != null)
+					script.addCreateUserDefinedTypeStatement(statement);
+			} 
+			else if(type instanceof DistinctUserDefinedType) {
+				 if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+				 if (!EngineeringOptionID.generateUserDefinedTypes(options))  continue;
+				 if (type instanceof LUWModuleDistinctType) {
+					 String statement = builder.createModuleDistinctType((LUWModuleDistinctType) type,quoteIdentifiers, qualifyNames);
+					 if(statement != null) 
+						 script.addCreateModuleTypeStatement(statement);
+				 	}
+				 else {
+				 	String statement = builder.createDistinctUserDefinedType((DistinctUserDefinedType)type, quoteIdentifiers, qualifyNames);
+				 	if(statement != null)
+				 		script.addCreateUserDefinedTypeStatement(statement);
+				 }
+			}
+			else if (type instanceof LUWArrayDataType) {
+				if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+				if (!EngineeringOptionID.generateUserDefinedTypes(options)) continue;
+				String statement = builder
+						.createArrayDataType((LUWArrayDataType) type, quoteIdentifiers, qualifyNames);
+				if (type instanceof LUWModuleArrayDataType) {
+					if (statement != null)
+						script.addCreateModuleTypeStatement(statement);
+				} else {
+					if (statement != null)
+						script.addCreateUserDefinedTypeStatement(statement);
+				}
+			} else if (type instanceof LUWRowDataType) {
+				if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+				if (!EngineeringOptionID.generateUserDefinedTypes(options)) continue;
+
+				String statement = builder.createRowDataType((LUWRowDataType) type, quoteIdentifiers, qualifyNames);
+				if (type instanceof LUWModuleRowDataType) {
+					if (statement != null)
+						script.addCreateModuleTypeStatement(statement);
+				} else {
+					if (statement != null)
+						script.addCreateUserDefinedTypeStatement(statement);
+				}
+			} else if (type instanceof LUWCursorDataType) {
+				if (!EngineeringOptionID.generateCreateStatement(options)) continue;
+				if (!EngineeringOptionID.generateUserDefinedTypes(options)) continue;
+
+				String statement = builder.createCursorDataType(
+						(LUWCursorDataType) type, quoteIdentifiers, qualifyNames);
+				if (type instanceof LUWModuleCursorDataType) {
+					if (statement != null)
+						script.addCreateModuleTypeStatement(statement);
+				} else {
+					if (statement != null)
+						script.addCreateUserDefinedTypeStatement(statement);
+				}
+			}
+		}
+		
+        return script.getStatements();
+    }
+    
+    private void sortUDTS(final List<UserDefinedType> sortedUserDefinedTypes,final List<UserDefinedType> selectedUserDefinedTypes){
+		for (int i = 0; i < selectedUserDefinedTypes.size(); i++) {
+			UserDefinedType type = selectedUserDefinedTypes.get(i);
+			if (type instanceof DistinctUserDefinedType) {
+				if(!sortedUserDefinedTypes.contains(type)){
+					sortedUserDefinedTypes.add(type);
+				}
+				
+			} else {
+				List<UserDefinedType> dependency = new ArrayList<UserDefinedType>();
+				dependency = getDependency(type, selectedUserDefinedTypes);
+				if (dependency != null && dependency.size() > 0) {
+					for(int j = 0; j < dependency.size(); j++){
+						UserDefinedType dependType = (UserDefinedType)dependency.get(j);
+						if(!sortedUserDefinedTypes.contains(dependType))
+							sortedUserDefinedTypes.add(dependType);
+					}
+				}
+				if(!sortedUserDefinedTypes.contains(type))
+					sortedUserDefinedTypes.add(type);
+			}
+		}
+	}
+	
+	private List<UserDefinedType> getDependency(UserDefinedType type, List<UserDefinedType> selectTypes) {
+		List<UserDefinedType> dependency = new ArrayList<UserDefinedType>();
+		List<UserDefinedType> dependencyAll = new ArrayList<UserDefinedType>();
+		List<UserDefinedType> accessList = new ArrayList<UserDefinedType>();
+		
+		getDependency(type, dependencyAll,accessList);
+		
+		for (int i = 0; i < dependencyAll.size(); i++) {
+			UserDefinedType dependType = dependencyAll.get(i);
+			if (selectTypes.contains(dependType)) {
+				dependency.add(dependType);
+			}
+		}
+		return dependency;
+	}
+
+	private void getDependency(UserDefinedType type, List<UserDefinedType> dependencyList, List<UserDefinedType> accessList){
+		if(type != null && !accessList.contains(type)) {
+			accessList.add(type);
+	    	if(type instanceof StructuredUserDefinedType){
+	    		StructuredUserDefinedType structureType = (StructuredUserDefinedType)type;
+	    		if(structureType.getSuper()!=null){
+	    			this.getDependency(structureType.getSuper(), dependencyList, accessList);
+	    		} 		
+	    	}
+	    	
+	    	DependencyImpactAnalyst m_DepAnalayst = DependencyImpactAnalyst.getInstance();
+	    	DependencyImpactDescription[] array = m_DepAnalayst.getDirectDependencies( type, -1 );
+	    
+	    	if(array!=null && array.length > 0){
+	    		for(int i = array.length-1;i >= 0;i--){
+	    			DependencyImpactDescription depend = (DependencyImpactDescription)array[i];
+	    			EObject targetType = depend.getTarget();
+	    			if(!accessList.contains(targetType)) {
+		    			if(targetType instanceof UserDefinedType) {
+		    				if(targetType instanceof StructuredUserDefinedType){
+		    					StructuredUserDefinedType superType = ((StructuredUserDefinedType)targetType).getSuper();
+		    					    if(targetType!=null && superType!= null)
+		    					        this.getDependency(((StructuredUserDefinedType)depend.getTarget()).getSuper(), dependencyList, accessList);
+		    				}
+		    				dependencyList.add((UserDefinedType)targetType);
+		    			}
+	    			}
+	    		}
+	    	}  	    	
+	    	if(!dependencyList.contains(type))
+	    		dependencyList.add(type);
+		}
+    }
+    
+    
+    //@d00058820gs: use new structure/methods
+	private String[] dropStatements(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor, int task) {
+    	Map patternMap = DdlGenerationUtility.getCodetemplatePatterns();
+    	LUWDdlScript script = new LUWDdlScript();
+        EngineeringOption[] options = this.getSelectedOptions(elements);
+        //Iterator it = DdlGenerationUtility.getAllContainedDisplayableElementSet(elements).iterator();
+        Iterator it = getAllContainedDisplayableElements(elements).iterator();
+        while(it.hasNext()) {
+            Object o = it.next();
+            
+            if(o instanceof LUWNickname) {
+            	ExtendDdlBuilder extendDdlBuilder = DdlGenerationUtility.getNicknameDdlBuilder(this.product, this.version);
+                if (extendDdlBuilder != null && EngineeringOptionID.getOptionValue(extendDdlBuilder.getOption(),options)) {
+	                String statement = builder.dropNickname((LUWNickname) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) script.addDropNicknameStatement(statement);
+                }
+            }
+            else if(o instanceof LUWServer) {
+            	ExtendDdlBuilder extendDdlBuilder = DdlGenerationUtility.getRemoteServerDdlBuilder(this.product, this.version);
+                if (extendDdlBuilder != null && EngineeringOptionID.getOptionValue(extendDdlBuilder.getOption(),options)) {
+                	String statement = builder.dropRemoteServer((LUWServer) o, quoteIdentifiers, qualifyNames);                	
+	                if(statement != null) script.addDropRemoteServerStatement(statement);
+                }
+            }
+            else if(o instanceof LUWWrapper) {
+                ExtendDdlBuilder extendDdlBuilder = DdlGenerationUtility.getWrapperDdlBuilder(this.product, this.version);
+                if (extendDdlBuilder != null && EngineeringOptionID.getOptionValue(extendDdlBuilder.getOption(),options)) {
+                    String statement = builder.dropWrapper((LUWWrapper) o, quoteIdentifiers, qualifyNames);                  
+                    if(statement != null) script.addDropWrapperStatement(statement);
+                }
+            }            
+            else if(o instanceof LUWUserMapping) {
+                ExtendDdlBuilder extendDdlBuilder = DdlGenerationUtility.getUserMappingDdlBuilder(this.product, this.version);
+                if (extendDdlBuilder != null && EngineeringOptionID.getOptionValue(extendDdlBuilder.getOption(),options)) {
+                    String statement = builder.dropUserMapping((LUWUserMapping) o, quoteIdentifiers, qualifyNames);                  
+                    if(statement != null) script.addDropUserMappingStatement(statement);
+                }
+            }            
+            else if(o instanceof LUWMaterializedQueryTable) {
+                if (!EngineeringOptionID.generateMQTs(options)) continue;
+                String statement = builder.dropMQT((LUWMaterializedQueryTable) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addDropViewStatement(statement);
+            }
+            else if(o instanceof LUWDatabasePackage) {
+                if (!EngineeringOptionID.generatePacakges(options)) continue;
+                String statement = builder.dropPackage((LUWDatabasePackage) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addDropPackageStatement(statement);
+            }
+            else if(o instanceof LUWTable) {
+            	if (!EngineeringOptionID.generateTables(options)) continue;
+                String statement = builder.dropTable((LUWTable) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) {
+                	String prolog = builder.createTableCodetemplate((LUWTable)o, DdlGenerationUtility.GENERATE_DROP_PATTERN, true,patternMap);
+                	String postlog = builder.createTableCodetemplate((LUWTable)o, DdlGenerationUtility.GENERATE_DROP_PATTERN, false,patternMap);
+            		script.addDropTableStatements(statement,
+            				script.combineTemplateStatements(prolog,statement,postlog));
+                }
+
+            }
+            else if(o instanceof LUWView) {
+            	if (!EngineeringOptionID.generateViews(options)) continue;
+                String statement = builder.dropView((LUWView) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) {
+                	String prolog = builder.createViewCodetemplate((LUWView)o, DdlGenerationUtility.GENERATE_DROP_PATTERN, true,patternMap);
+                	String postlog = builder.createViewCodetemplate((LUWView)o, DdlGenerationUtility.GENERATE_DROP_PATTERN, false,patternMap);
+            		script.addDropViewStatements(statement,
+            				script.combineTemplateStatements(prolog,statement,postlog));
+                }
+
+            }
+            else if(o instanceof DB2Alias) {
+            	//if (!EngineeringOptionID.generateTables()) continue;
+                if (!EngineeringOptionID.generateAliases(options)) continue;
+                String statement = builder.dropAlias((DB2Alias) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addDropViewStatement(statement);
+            }
+            else if(o instanceof DB2Procedure) {
+        		if (!EngineeringOptionID.generateStoredProcedures(options)) continue;
+               	String statement = "";
+            	if ( o instanceof FederatedProcedure)  // fsp - pyl @wsdbu00079822 
+            	{
+                    statement = builder.dropProcedure((DB2Procedure) o, quoteIdentifiers, qualifyNames);
+                	if (statement != null) script.addDropRoutineStatement(statement);
+                } else if (o instanceof LUWModuleProcedure){
+                    statement = builder.dropProcedure((DB2Procedure) o, quoteIdentifiers, qualifyNames);
+                	if (statement != null) script.addDropModuleRoutineStatement(statement);
+                }
+            	else
+            	{
+            		statement = builder.dropProcedure((DB2Procedure) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) {
+	                	String prolog = builder.createRoutineCodetemplate((DB2Procedure)o, DdlGenerationUtility.GENERATE_DROP_PATTERN, true,patternMap);
+	                	String postlog = builder.createRoutineCodetemplate((DB2Procedure)o, DdlGenerationUtility.GENERATE_DROP_PATTERN, false,patternMap);
+	               		script.addDropRoutineStatements(statement,
+	               				script.combineTemplateStatements(prolog,statement,postlog));
+	                }
+            	}
+            }
+            else if(o instanceof DB2UserDefinedFunction) {
+            	if (!EngineeringOptionID.generateFunctions(options)) continue;
+                String statement = builder.dropFunction((DB2UserDefinedFunction) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) {
+                	if (o instanceof LUWModuleFunction){
+                		statement = builder.dropFunction((DB2UserDefinedFunction) o, quoteIdentifiers, qualifyNames);
+                		script.addDropModuleRoutineStatement(statement);
+                	} else {
+	                	String prolog = builder.createRoutineCodetemplate((DB2UserDefinedFunction)o, DdlGenerationUtility.GENERATE_DROP_PATTERN, true,patternMap);
+	                	String postlog = builder.createRoutineCodetemplate((DB2UserDefinedFunction)o, DdlGenerationUtility.GENERATE_DROP_PATTERN, false,patternMap);
+	               		script.addDropRoutineStatements(statement,
+	               				script.combineTemplateStatements(prolog,statement,postlog));
+                	}
+                }
+            }
+            else if(o instanceof DB2Trigger) {
+            	if (!EngineeringOptionID.generateTriggers(options)) continue;
+                String statement = builder.dropTrigger((DB2Trigger) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addDropTriggerStatement(statement);
+            }
+            else if(o instanceof CheckConstraint) {
+                if(!EngineeringOptionID.generateCKConstraints(options)) continue;
+                String statement = builder.dropTableConstraint((CheckConstraint) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) {
+                	String prolog = builder.createConstraintCodetemplate((CheckConstraint)o, DdlGenerationUtility.GENERATE_DROP_PATTERN, true,patternMap);
+                	String postlog = builder.createConstraintCodetemplate((CheckConstraint)o, DdlGenerationUtility.GENERATE_DROP_PATTERN, false,patternMap);
+               		script.addAlterTableDropConstraintStatements(statement,
+            				script.combineTemplateStatements(prolog,statement,postlog));
+                }
+            }
+            else if(o instanceof UniqueConstraint) {
+            	if(!EngineeringOptionID.generatePKConstraints(options) || builder.isImplicitPK((UniqueConstraint)o)) continue;
+                String statement = builder.dropTableConstraint((UniqueConstraint) o, quoteIdentifiers, qualifyNames);
+                if(statement != null){
+                	String prolog = builder.createConstraintCodetemplate((UniqueConstraint)o, DdlGenerationUtility.GENERATE_DROP_PATTERN, true,patternMap);
+                	String postlog = builder.createConstraintCodetemplate((UniqueConstraint)o, DdlGenerationUtility.GENERATE_DROP_PATTERN, false,patternMap);
+               		script.addAlterTableDropConstraintStatements(statement,
+            				script.combineTemplateStatements(prolog,statement,postlog));
+                }
+            }
+            else if(o instanceof ForeignKey) {
+            	if(!EngineeringOptionID.generateFKConstraints(options)) continue;
+                String statement = builder.dropTableConstraint((ForeignKey) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) {
+                	String prolog = builder.createConstraintCodetemplate((ForeignKey)o, DdlGenerationUtility.GENERATE_DROP_PATTERN, true,patternMap);
+                	String postlog = builder.createConstraintCodetemplate((ForeignKey)o, DdlGenerationUtility.GENERATE_DROP_PATTERN, false,patternMap);
+            		script.addAlterTableDropForeignKeyStatements(statement,
+            				script.combineTemplateStatements(prolog,statement,postlog));
+                }
+            }
+            else if(o instanceof DB2Index) {
+            	if (!EngineeringOptionID.generateIndexes(options) || ((DB2Index)o).isSystemGenerated() || ((DB2Index)o).getIndexType() != DB2IndexType.REGULAR_LITERAL) continue;
+                String statement = builder.dropIndex((DB2Index) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) {
+                    if (((DB2Index)o).getTable() instanceof LUWTable) {
+                    	script.addDropIndexStatement(statement);
+                    } else {
+                    	script.addDropViewIndexStatement(statement);
+                    }
+                }
+            }
+            else if(o instanceof LUWTableSpace) {
+            	if (!EngineeringOptionID.generateTablespaces(options)) continue;
+                String statement = builder.dropTablespace((LUWTableSpace) o, quoteIdentifiers);
+                if(statement != null) script.addDropTablespaceStatement(statement);
+            }
+            else if(o instanceof Sequence) {
+            	if (!EngineeringOptionID.generateSequences(options)) continue;
+                String statement = builder.dropSequence((Sequence) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addDropSequenceStatement(statement);
+            }
+            else if(o instanceof UserDefinedType) {
+            	if (!EngineeringOptionID.generateUserDefinedTypes(options)) continue;
+                String statement = builder.dropUserDefinedType((UserDefinedType) o, quoteIdentifiers, qualifyNames);
+                if (o instanceof LUWModuleObject) {
+                	if(statement != null) script.addDropModuleTypeStatement(statement);
+                } else {
+                	if(statement != null) script.addDropUserDefinedTypeStatement(statement);
+                }
+            }
+            else if(o instanceof LUWBufferPool) {
+                if(!EngineeringOptionID.generateBufferPool(options)) continue;
+                String statement = builder.dropBufferPool((LUWBufferPool) o, quoteIdentifiers);
+                if(statement != null) script.addDropBufferPoolStatement(statement);
+            }
+//            xml schema drop done via stored procedure now          
+//            else if(o instanceof LUWCatalogXmlSchema) {
+//            	String statement = ((LUWDdlBuilder)builder).dropXMLSchema((LUWCatalogXmlSchema)o, quoteIdentifiers, qualifyNames);
+//            	if (statement != null) script.addDropXMLSchemaStatement(statement);
+//            }
+            else if(o instanceof LUWPartitionGroup) {
+                if(!EngineeringOptionID.generatePartitionGroup(options)) continue;
+                String statement = builder.dropPartitionGroup((LUWPartitionGroup) o, quoteIdentifiers);
+                if(statement != null) script.addDropPartitionStatement(statement);
+            }
+            else if(o instanceof Schema) {
+            	//if(!this.generateFullyQualifiedNames()) continue;
+                if(!EngineeringOptionID.generateSchemas(options)) continue;
+                String statement = builder.dropSchema((Schema) o, quoteIdentifiers,qualifyNames);
+                if(statement != null) script.addDropSchemaStatement(statement);
+            }
+            else if(o instanceof Privilege) {
+            	//if(!this.generateFullyQualifiedNames()) continue;
+                if(!EngineeringOptionID.generateRevokeStatement(options)) continue;
+                String statement = builder.getRevokePrivilegeStatement((Privilege)o,quoteIdentifiers,qualifyNames);
+                if(statement != null) script.addRevokeStatement(statement);
+            }
+            else if(o instanceof RoleAuthorization) {
+                if (!EngineeringOptionID.generateRevokeStatement(options)) continue;
+                String statement = builder.getRevokeRoleAuthorizationStatement((RoleAuthorization)o,quoteIdentifiers);
+                if(statement != null) script.addRevokeStatement(statement);
+            }
+            else if (o instanceof AuthorizationIdentifier) {
+            	((AuthorizationIdentifier) o).getDatabase().getPrivileges();
+                if(EngineeringOptionID.generateRevokeStatement(options)) {
+                	Iterator pIt = ((AuthorizationIdentifier)o).getReceivedPrivilege().iterator();
+                	while (pIt.hasNext()) {
+                		String statement = builder.getRevokePrivilegeStatement((Privilege)pIt.next(),quoteIdentifiers,qualifyNames);
+                		if (statement != null) {
+                			script.addRevokeStatement(statement);	
+                		}                		
+                	}
+//                	//Delete Role Authorizations for User
+//                	Iterator pRolesIt = ((AuthorizationIdentifier)o).getReceivedRoleAuthorization().iterator();
+//                	while (pRolesIt.hasNext()) {
+//                		script.addRevokeStatement(builder.getRevokeRoleAuthorizationStatement((RoleAuthorization) pRolesIt.next(),quoteIdentifiers));
+//                	}
+                }
+                if(o instanceof Role) {
+                    if (!EngineeringOptionID.generateRoles(options)) continue;
+                    String statement = builder.dropRole((Role)o, quoteIdentifiers);
+                    if(statement != null) script.addDropRoleStatement(statement);
+                }
+            }
+            else if (o instanceof PLSQLPackage) {
+            	if (!EngineeringOptionID.generatePacakges(options)) continue;
+                String statement = builder.dropPlsqlPackage((PLSQLPackage) o, quoteIdentifiers, qualifyNames);
+                if (statement != null) script.addDropPlsqlPackageStatement(statement);
+            }
+            else if (o instanceof PLSQLPackageBody) {
+            	if (!EngineeringOptionID.generatePacakgeBodys(options)) continue;
+                String statement = builder.dropPlsqlPackageBody((PLSQLPackageBody)o, quoteIdentifiers, qualifyNames);
+                if (statement != null) script.addDropPlsqlPackageBodyStatement(statement);
+            }
+            else if(o instanceof LUWModule) {
+                if (!EngineeringOptionID.generateModules(options)) continue;
+                String statement = builder.dropModule((LUWModule)o,quoteIdentifiers,qualifyNames);
+                if(statement != null) script.addDropModuleStatement(statement);
+            }
+            else if(o instanceof LUWModuleCondition) {
+                if (!EngineeringOptionID.generateModuleConditions(options)) continue;
+                String statement = builder.dropModuleCondition((LUWModuleCondition)o,quoteIdentifiers,qualifyNames);
+                if(statement != null) script.addDropModuleConditionStatement(statement);
+            }
+            else if(o instanceof LUWGlobalVariable) {
+                if (!EngineeringOptionID.generateGlobalVariables(options)) continue;
+                
+                if (o instanceof LUWModuleGlobalVariable) {
+                    String statement = builder.dropModuleGlobalVariable((LUWModuleGlobalVariable) o, quoteIdentifiers, qualifyNames);
+                    if(statement != null) script.addDropModuleGlobalVariableStatement(statement);
+                } else {
+                    String statement = builder.dropGlobalVariable((LUWGlobalVariable) o, quoteIdentifiers, qualifyNames);
+                    if(statement != null) script.addDropGlobalVariableStatement(statement);
+                }
+            }
+        }
+        return script.getStatements();
+    }
+
+	//Fix for wsdbu00241490 ODA2201: ODE UI should not allow user to drop schema nullid.
+	//This is a modified version of the DdlGenerationUtility.getAllContainedDisplayableElementSet(elements)
+	//method. Its purpose is to avoid dropping the contained elements when dropping NULLID schema.
+	//The effect is the DDL for dropping NULLID will still be generated but it will fail 
+	//to execute because DB2 will find out there are dependents still depending on the NULLID.
+	protected Collection getAllContainedDisplayableElements(SQLObject[] elements) {
+		ArrayList<SQLObject> temp = new ArrayList<SQLObject>();
+		// Is there a NULLID schema in the input array?
+		SQLObject nullid = null;
+		for (SQLObject sqlobj: elements) {
+			if (!(sqlobj instanceof Schema)
+					|| !"NULLID".equals(sqlobj.getName())) {
+				// collect all non-NULLID schema objects into the temp list
+				temp.add(sqlobj);
+			} else {
+				nullid = sqlobj;
+			}
+		}
+
+		if (nullid == null) {
+			// there is no NULLID schema in the input array, business as usual
+			return DdlGenerationUtility
+					.getAllContainedDisplayableElementSet(elements);
+		} else {
+			// found the NULLID schema in the input array
+			SQLObject[] elementsWithoutNullId = new SQLObject[temp.size()];
+			temp.toArray(elementsWithoutNullId);
+			ArrayList temp2 = new ArrayList();
+			temp2.addAll(DdlGenerationUtility
+					.getAllContainedDisplayableElementSet(elementsWithoutNullId));
+			temp2.add(nullid);
+			return temp2;
+		}
+	}
+	
+    //@Override
+	public String[] alterTableDropColumn(SQLObject[] columns, SQLObject[] impacts, IProgressMonitor progressMonitor, IEngineeringCallBack callback) {
+		LUWDdlScript script = new LUWDdlScript();
+		for (int col = 0; col < columns.length; ++col) {
+			Column o = (Column)columns[col];
+        	String statement = builder.alterTableDropColumn((Column)o, true, true);
+            if(statement != null) {
+            	script.addAlterTableDropColumnStatement(statement);
+            	script.addAlterTableDropColumnStatement(builder.reorgTable(o,true,true));
+            }
+		}
+		return script.getStatements();
+	}
+
+	private String[] commentStatements(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor, int task) {
+        Vector processedTablespace = new Vector();
+        LUWDdlScript script = new LUWDdlScript();
+        
+        Iterator it = LUWDdlGenerator.getAllContainedDisplayableElementSet(elements).iterator();        
+        EngineeringOption[] options = this.getSelectedOptions(elements);        
+        while(it.hasNext()) {
+            Object o = it.next();
+            
+            if(o instanceof LUWNickname) {
+                ExtendDdlBuilder extendDdlBuilder = DdlGenerationUtility.getNicknameDdlBuilder(this.product, this.version);
+                if (extendDdlBuilder != null && EngineeringOptionID.getOptionValue(extendDdlBuilder.getOption(),options)) {
+                     String statement = builder.commentOn((LUWNickname) o, quoteIdentifiers, qualifyNames);
+                     if(statement != null) script.addCommentOnStatement(statement);
+                }
+            }
+            else if(o instanceof LUWServer) {
+                LUWServer luwServer = (LUWServer)o;
+                ExtendDdlBuilder extendDdlBuilder = DdlGenerationUtility.getRemoteServerDdlBuilder(this.product, this.version);
+                if (extendDdlBuilder != null && EngineeringOptionID.getOptionValue(extendDdlBuilder.getOption(),options)) {
+                    String statement = builder.commentOn(luwServer, quoteIdentifiers, qualifyNames);                       
+                    if(statement != null) script.addCommentOnStatement(statement);
+                }
+            }
+            else if(o instanceof LUWWrapper) {
+                LUWWrapper wrapper = (LUWWrapper) o;                    
+                ExtendDdlBuilder extendDdlBuilder = DdlGenerationUtility.getWrapperDdlBuilder(this.product, this.version);
+                if (extendDdlBuilder != null && EngineeringOptionID.getOptionValue(extendDdlBuilder.getOption(),options)) {
+                    String statement = builder.commentOn(wrapper, quoteIdentifiers, qualifyNames);                        
+                    if(statement != null) script.addCommentOnStatement(statement);
+                }
+            }
+            else if(o instanceof LUWMaterializedQueryTable) {
+                if (!EngineeringOptionID.generateMQTs(options)) continue;
+                String statement = builder.commentOn((LUWMaterializedQueryTable) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCommentOnStatement(statement);
+            }
+            else if(o instanceof LUWTable) {
+                if (!EngineeringOptionID.generateTables(options)) continue;
+                String statement = builder.commentOn((LUWTable) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCommentOnStatement(statement);
+            }
+            else if(o instanceof LUWTableSpace) {
+                if (!EngineeringOptionID.generateTablespaces(options)) continue;
+                String statement = builder.commentOn((LUWTableSpace) o, quoteIdentifiers);
+                if(statement != null) script.addCommentOnStatement(statement);
+            }
+            else if(o instanceof LUWView) {
+                if (!EngineeringOptionID.generateViews(options)) continue;
+                String statement = builder.commentOn((LUWView) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCommentOnStatement(statement);
+            }
+            else if(o instanceof DB2Alias) {
+                if (!EngineeringOptionID.generateAliases(options)) continue;
+                String statement = builder.commentOn((DB2Alias) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCommentOnStatement(statement);
+            }
+            else if(o instanceof DB2Procedure) {
+                if (!EngineeringOptionID.generateStoredProcedures(options)) continue;
+                String statement = builder.commentOn((DB2Procedure) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCommentOnStatement(statement);
+            }
+            else if(o instanceof DB2UserDefinedFunction) {
+                if (!EngineeringOptionID.generateFunctions(options)) continue;
+                String statement = builder.commentOn((DB2UserDefinedFunction) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCommentOnStatement(statement);
+            }
+            else if(o instanceof DB2Trigger) {
+                if (!EngineeringOptionID.generateTriggers(options)) continue;
+                String statement = builder.commentOn((DB2Trigger) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCommentOnStatement(statement);
+            }
+            else if(o instanceof CheckConstraint) {
+                if(!EngineeringOptionID.generateCKConstraints(options)) continue;
+                String statement = builder.commentOn((CheckConstraint) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCommentOnStatement(statement);
+            }
+            else if(o instanceof UniqueConstraint) {
+                if(!EngineeringOptionID.generatePKConstraints(options) || builder.isImplicitPK((UniqueConstraint)o)) continue;
+                String statement = builder.commentOn((UniqueConstraint) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCommentOnStatement(statement);
+            }
+            else if(o instanceof ForeignKey) {
+                if(!EngineeringOptionID.generateFKConstraints(options)) continue;
+                String statement = builder.commentOn((ForeignKey) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCommentOnStatement(statement);
+            }
+            else if(o instanceof DB2Index) {
+                if (!EngineeringOptionID.generateIndexes(options) || ((DB2Index)o).isSystemGenerated() || ((DB2Index)o).getIndexType() != DB2IndexType.REGULAR_LITERAL) continue;
+                String statement = builder.commentOn((DB2Index) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCommentOnStatement(statement);
+            }
+            else if(o instanceof DistinctUserDefinedType) {
+                if (!EngineeringOptionID.generateUserDefinedTypes(options)) continue;
+                String statement = builder.commentOn((DistinctUserDefinedType) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCommentOnStatement(statement);
+            }
+            else if (o instanceof StructuredUserDefinedType){
+                if (!EngineeringOptionID.generateUserDefinedTypes(options)) continue;
+                String statement = builder.commentOn((StructuredUserDefinedType) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCommentOnStatement(statement);
+            }
+            else if(o instanceof Column) {
+                if (!EngineeringOptionID.generateTables(options)) continue;
+                String statement = builder.commentOn((Column) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) script.addCommentOnStatement(statement);
+            }
+            else if(o instanceof LUWPartitionGroup) {
+                if (!EngineeringOptionID.generatePartitionGroup(options)) continue;
+                String statement = builder.commentOn((LUWPartitionGroup) o, quoteIdentifiers);
+                if(statement != null) script.addCommentOnStatement(statement);
+            }
+            else if(o instanceof Schema) {
+                //if(!EngineeringOptionID.generateFullyQualifiedNames()) continue;
+                if(!EngineeringOptionID.generateSchemas(options)) continue;
+                String statement = builder.commentOn((Schema) o, quoteIdentifiers,qualifyNames);
+                if(statement != null) script.addCommentOnStatement(statement);
+            }
+            else if(o instanceof Role) {
+                if (!EngineeringOptionID.generateRoles(options)) continue;
+                String statement = builder.commentOn((Role)o, quoteIdentifiers,qualifyNames);
+                if(statement != null) script.addCommentOnStatement(statement);
+            }
+            else if(o instanceof LUWModule) {
+                if (!EngineeringOptionID.generateModules(options)) continue;
+                String statement = builder.commentOn((LUWModule)o, quoteIdentifiers,qualifyNames);
+                if(statement != null) script.addCommentOnStatement(statement);
+            }
+            else if(o instanceof LUWModuleCondition) {
+                if (!EngineeringOptionID.generateModuleConditions(options)) continue;
+                String statement = builder.commentOn((LUWModuleCondition)o, quoteIdentifiers,qualifyNames);
+                if(statement != null) script.addCommentOnStatement(statement);
+            }
+            else if(o instanceof Sequence) {
+                if (!EngineeringOptionID.generateSequences(options)) continue;
+                String statement = builder.commentOn((Sequence)o, quoteIdentifiers,qualifyNames);
+                if(statement != null) script.addCommentOnStatement(statement);
+            }
+        }
+        return script.getStatements();
+    }
+
+    private String[] updateStatisticsStatements(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor,IEngineeringCallBack callback) {
+        Vector processedTablespace = new Vector();
+        LUWDdlScript script = new LUWDdlScript();
+        
+        Iterator it = LUWDdlGenerator.getAllContainedDisplayableElementSet(elements).iterator();        
+        EngineeringOption[] options = this.getSelectedOptions(elements);        
+        while(it.hasNext()) {
+            Object o = it.next();
+        	if(o instanceof LUWNickname) {
+        		String[] statements = builder.updateStatistics((LUWNickname) o, quoteIdentifiers, qualifyNames);
+            	if (statements  != null) {
+	        		for (int iStat = 0; iStat <statements.length; iStat ++) {
+	        			script.addUpdateStatisticsStatement(statements[iStat]);
+	        		}
+            	}
+        	} else if(o instanceof LUWMaterializedQueryTable) {
+                if (!EngineeringOptionID.generateMQTs(options)) continue;
+            	String[] statements = builder.updateStatistics((LUWMaterializedQueryTable) o, quoteIdentifiers, qualifyNames);
+            	if (statements  != null) {
+            		for (int iStat = 0; iStat <statements.length; iStat ++) {
+            			script.addUpdateStatisticsStatement(statements[iStat]);
+            	        
+            		}
+            	}
+            }else if(o instanceof LUWTable) {
+                if (!EngineeringOptionID.generateTables(options)) continue;
+            	String[] statements = builder.updateStatistics((LUWTable) o, quoteIdentifiers, qualifyNames);
+            	if (statements  != null) {
+	        		for (int iStat = 0; iStat <statements.length; iStat ++) {
+	        			script.addUpdateStatisticsStatement(statements[iStat]);
+	        		}
+            	}
+            }else if(o instanceof DB2Procedure) {
+                if (!EngineeringOptionID.generateStoredProcedures(options)) continue;
+            	String[] statements = builder.updateStatistics((DB2Procedure) o, quoteIdentifiers, qualifyNames);
+            	if (statements  != null) {
+	        		for (int iStat = 0; iStat <statements.length; iStat ++) {
+	        			script.addUpdateStatisticsStatement(statements[iStat]);
+	        		}
+            	}
+            }
+            else if(o instanceof DB2UserDefinedFunction) {
+                if (!EngineeringOptionID.generateFunctions(options)) continue;
+            	String[] statements = builder.updateStatistics((DB2UserDefinedFunction) o, quoteIdentifiers, qualifyNames);
+            	if (statements  != null) {
+	        		for (int iStat = 0; iStat <statements.length; iStat ++) {
+	        			script.addUpdateStatisticsStatement(statements[iStat]);
+	        		}
+            	}
+            }
+            else if(o instanceof DB2Index) {
+                if (!EngineeringOptionID.generateIndexes(options)) continue;
+            	String[] statements = builder.updateStatistics((DB2Index) o, quoteIdentifiers, qualifyNames);
+            	if (statements  != null) {
+	        		for (int iStat = 0; iStat <statements.length; iStat ++) {
+	        			script.addUpdateStatisticsStatement(statements[iStat]);
+	        		}
+            	}
+            }
+            else if(o instanceof Column) {
+                if (!EngineeringOptionID.generateTables(options)) continue;
+            	String[] statements = builder.updateStatistics((Column) o, quoteIdentifiers, qualifyNames);
+            	if (statements  != null) {
+	        		for (int iStat = 0; iStat <statements.length; iStat ++) {
+	        			script.addUpdateStatisticsStatement(statements[iStat]);
+	        		}
+            	}
+            }
+        }
+        return script.getStatements();
+    }
+
+    
+    //@bd00058820gs
+	private static Set getAllContainedDisplayableElementSet(SQLObject[] elements) {
+        Set s = new LinkedHashSet();
+        for(int i=0; i<elements.length; ++i) {
+            if (!s.contains(elements[i])) s.add(elements[i]);
+            if (elements[i] instanceof LUWNickname) {
+                //Server Dependency
+                LUWServer luwServer = ((LUWNickname)elements[i]).getServer();
+                if (luwServer != null) {
+                    s.add(luwServer);
+                    //Wrapper Dependency
+                    LUWWrapper wrapper = luwServer.getWrapper();
+                    if (wrapper != null) {
+                        s.add(wrapper);
+                    }
+                    //User Mapping Dependency
+                    for (Iterator itUserMapping = luwServer.getUserMappings().iterator(); itUserMapping.hasNext(); ) {
+                         LUWUserMapping userMapping = (LUWUserMapping)itUserMapping.next();
+                         s.add(userMapping);
+                         break; //just ask one time for the authorization dialog
+                    }
+                }
+            }
+            // fsp - pyl
+            else if (elements[i] instanceof FederatedProcedure) {
+                    //Server Dependency
+                    LUWServer luwServer = ((LUWCatalogFederatedProcedure)elements[i]).getFederatedServer();                   
+                    if (luwServer != null) {
+                        s.add(luwServer);
+                        //Wrapper Dependency
+                        LUWWrapper wrapper = luwServer.getWrapper();
+                        if (wrapper != null) {
+                            s.add(wrapper);
+                        }
+                        //User Mapping Dependency
+                        for (Iterator itUserMapping = luwServer.getUserMappings().iterator(); itUserMapping.hasNext(); ) {
+                             LUWUserMapping userMapping = (LUWUserMapping)itUserMapping.next();
+                             s.add(userMapping);
+                             break; //just ask one time for the authorization dialog
+                        }
+                    }
+            } else if (elements[i] instanceof LUWStorageTable){
+            	// wsdbu00273864 and wsdbu00652103 : To read Data Partition Table Space info
+            	LUWStorageTable lst=(LUWStorageTable)elements[i];
+            	if(!s.contains(lst.getLOBDataTableSpace())) s.add(lst.getLOBDataTableSpace());
+            	if(!s.contains(lst.getIndexDataTableSpace())) s.add(lst.getIndexDataTableSpace());
+            	if(!s.contains(lst.getRegularDataTableSpace())) s.add(lst.getRegularDataTableSpace());
+            	if (lst.getDataPartitions().size() != 0){	// For DB2 version <9, DataPartitions size will be 0
+        			Iterator it = lst.getDataPartitions().iterator();
+        			while(it.hasNext()){
+        				LUWDataPartition dp = (LUWDataPartition)it.next();
+        				if(!s.contains(dp.getRegularDataTableSpace()))
+        					s.add(dp.getRegularDataTableSpace());
+        				if(!s.contains(dp.getLOBDataTableSpace()))
+        					s.add(dp.getLOBDataTableSpace());
+        			}
+        		}
+            } else if (elements[i] instanceof LUWServer) {
+                LUWServer luwServer = (LUWServer)elements[i];
+                //Wrapper Dependency
+                LUWWrapper wrapper = luwServer.getWrapper();
+                if (wrapper != null) {
+                    s.add(wrapper);
+                }
+                //User Mapping Dependency
+                for (Iterator itUserMapping = luwServer.getUserMappings().iterator(); itUserMapping.hasNext(); ) {
+                     LUWUserMapping userMapping = (LUWUserMapping)itUserMapping.next();
+                     s.add(userMapping);
+                     break; //just ask one time for the authorization dialog
+                }
+                //Nickname Dependency
+                for (Iterator itNickname = luwServer.getNicknames().iterator(); itNickname.hasNext(); ) {
+                    LUWNickname nickame = (LUWNickname)itNickname.next();
+                    s.add(nickame);
+                }
+            }
+            else if (elements[i] instanceof LUWWrapper) {
+                LUWWrapper luwWrapper = (LUWWrapper)elements[i];
+                //Remote Servers Dependency
+                for (Iterator itServer = luwWrapper.getServers().iterator(); itServer.hasNext(); ) {
+                    LUWServer luwServer = (LUWServer)itServer.next();
+                    s.add(luwServer);
+                                
+                    //User Mapping Dependency
+                    for (Iterator itUserMapping = luwServer.getUserMappings().iterator(); itUserMapping.hasNext(); ) {
+                         LUWUserMapping userMapping = (LUWUserMapping)itUserMapping.next();
+                         s.add(userMapping);
+                         break; //just ask one time for the authorization dialog
+                    }
+                    //Nickname Dependency
+                    for (Iterator itNickname = luwServer.getNicknames().iterator(); itNickname.hasNext(); ) {
+                        LUWNickname nickame = (LUWNickname)itNickname.next();
+                        s.add(nickame);
+                    }
+                }
+            }
+            else if (elements[i] instanceof PLSQLPackage) {
+            	PLSQLPackage plsqlPkg = (PLSQLPackage) elements[i];
+            	PLSQLPackageBody pkgBody = plsqlPkg.getPackageBody();
+            	if (pkgBody != null) s.add(pkgBody);
+            }
+            Iterator iter = null;
+            if (elements[i] instanceof AuthorizationIdentifier) 
+            	iter = ContainmentServiceImpl.INSTANCE.getAllContainedElements(elements[i]).iterator();
+            else iter = ContainmentServiceImpl.INSTANCE.getAllContainedDisplayableElements(elements[i]).iterator();
+//          s.addAll(ContainmentServiceImpl.INSTANCE.getAllContainedDisplayableElements(elements[i]));
+            while (iter.hasNext()){
+
+            	Object element = iter.next();
+            	if (! s.contains(element)) s.add(element);
+                if (element instanceof LUWNickname) {
+                    //Server Dependency
+                    LUWServer luwServer = ((LUWNickname)element).getServer();
+                    if (luwServer != null) {
+                        s.add(luwServer);
+                        //Wrapper Dependency
+                        LUWWrapper wrapper = luwServer.getWrapper();
+                        if (wrapper != null) {
+                            s.add(wrapper);
+                        }
+                        //User Mapping Dependency
+                        for (Iterator itUserMapping = luwServer.getUserMappings().iterator(); itUserMapping.hasNext(); ) {
+                             LUWUserMapping userMapping = (LUWUserMapping)itUserMapping.next();
+                             s.add(userMapping);
+                             break; //just ask one time for the authorization dialog
+                        }
+                    }
+                } else if (element instanceof LUWStorageTable){
+                	// wsdbu00273864 and wsdbu00652103 : To read Data Partition Table Space info
+                	LUWStorageTable lst=(LUWStorageTable)element;
+                	if(!s.contains(lst.getLOBDataTableSpace())) s.add(lst.getLOBDataTableSpace());
+                	if(!s.contains(lst.getIndexDataTableSpace())) s.add(lst.getIndexDataTableSpace());
+                	if(!s.contains(lst.getRegularDataTableSpace())) s.add(lst.getRegularDataTableSpace());
+                	if (lst.getDataPartitions().size() != 0){	// For DB2 version <9, DataPartitions size will be 0
+            			Iterator it = lst.getDataPartitions().iterator();
+            			while(it.hasNext()){
+            				LUWDataPartition dp = (LUWDataPartition)it.next();
+            				if(!s.contains(dp.getRegularDataTableSpace()))
+            					s.add(dp.getRegularDataTableSpace());
+            				if(!s.contains(dp.getLOBDataTableSpace()))
+            					s.add(dp.getLOBDataTableSpace());
+            			}
+            		}
+                } else if (element instanceof LUWServer) {
+                    LUWServer luwServer = (LUWServer)element;
+                    //Wrapper Dependency
+                    LUWWrapper wrapper = luwServer.getWrapper();
+                    if (wrapper != null) {
+                        s.add(wrapper);
+                    }
+                    //User Mapping Dependency
+                    for (Iterator itUserMapping = luwServer.getUserMappings().iterator(); itUserMapping.hasNext(); ) {
+                         LUWUserMapping userMapping = (LUWUserMapping)itUserMapping.next();
+                         s.add(userMapping);
+                         break; //just ask one time for the authorization dialog
+                    }
+                    //Nickname Dependency
+                    for (Iterator itNickname = luwServer.getNicknames().iterator(); itNickname.hasNext(); ) {
+                        LUWNickname nickame = (LUWNickname)itNickname.next();
+                        s.add(nickame);
+                    }
+                }
+                else if (element instanceof LUWWrapper) {
+                    LUWWrapper luwWrapper = (LUWWrapper)element;
+                    //Remote Servers Dependency
+                    for (Iterator itServer = luwWrapper.getServers().iterator(); itServer.hasNext(); ) {
+                        LUWServer luwServer = (LUWServer)itServer.next();
+                        s.add(luwServer);
+                                    
+                        //User Mapping Dependency
+                        for (Iterator itUserMapping = luwServer.getUserMappings().iterator(); itUserMapping.hasNext(); ) {
+                             LUWUserMapping userMapping = (LUWUserMapping)itUserMapping.next();
+                             s.add(userMapping);
+                             break; //just ask one time for the authorization dialog
+                        }
+                        //Nickname Dependency
+                        for (Iterator itNickname = luwServer.getNicknames().iterator(); itNickname.hasNext(); ) {
+                            LUWNickname nickame = (LUWNickname)itNickname.next();
+                            s.add(nickame);
+                        }
+                    }
+                }                
+            }
+        }
+        return s;
+    }
+    
+    private static void discover(Set result, Data element) {
+    	Set childs = element.childs;
+        while (childs != null && childs.size() > 0) {
+        	result.addAll(element.sOptions);
+        	for (Iterator it = childs.iterator(); it.hasNext(); ) {
+        		discover(result, (Data)it.next());
+        	}
+        }
+    }
+    
+    private static Set getAllContainedDisplayableElementSetDepedency(SQLObject[] elements) {
+        SingletonOptionDependency sod = SingletonOptionDependency.getSingletonObject();
+        
+        //Set s = new LinkedHashSet();
+        Set s = new TreeSet();
+        for(int i=0; i<elements.length; ++i) {
+            Class key = null;
+            if(elements[i] instanceof LUWDatabase) {
+                key = Database.class;
+            } else if(elements[i] instanceof Schema) {
+                key = Schema.class;
+            } else if (elements[i] instanceof LUWTable) {
+                if (elements[i] instanceof LUWNickname) {
+                    key = LUWNickname.class;
+                    isNickname = true; //@d00062627gs
+                    //TODO: make sure to remove the columns, or leave LUWColumn line commented out
+                } else
+                    key = Table.class;
+            } else if (elements[i] instanceof LUWServer) {
+                key = LUWServer.class;
+            } else if (elements[i] instanceof LUWWrapper) {
+                key = LUWWrapper.class;
+            } else if (elements[i] instanceof LUWUserMapping) { 
+                key = LUWUserMapping.class;
+            } else if (elements[i] instanceof DB2OLAPObject) {
+                key = DB2OLAPObject.class;
+            } else if (elements[i] instanceof LUWTableSpace) {
+                key = LUWTableSpace.class;
+            } else if (elements[i] instanceof DB2Index) {
+                key = Index.class;
+            } else if (elements[i] instanceof DB2Procedure) {
+            	// fsp - pyl
+            	if (elements[i] instanceof FederatedProcedure)
+            		key = FederatedProcedure.class;
+            	else
+            		key = Procedure.class;
+            } else if (elements[i] instanceof DB2UserDefinedFunction) {
+                key = UserDefinedFunction.class;
+            } else if (elements[i] instanceof LUWView) {
+                key = ViewTable.class;
+            } else if (elements[i] instanceof DB2Trigger) {
+                key = Trigger.class;
+            } else if (elements[i] instanceof Sequence) {
+                key = Sequence.class;
+            } else if (elements[i] instanceof UserDefinedType) {
+                key = UserDefinedType.class;
+//               } else if(elements[i] instanceof DistinctUserDefinedType)
+//                } else if (elements[i] instanceof StructuredUserDefinedType)
+            } else if (elements[i] instanceof UniqueConstraint) {
+                key = UniqueConstraint.class;
+//                } else if(elements[i] instanceof LUWSynonym)
+//                    key = LUWSynonym.class;
+            } else if(elements[i] instanceof LUWMaterializedQueryTable) {
+                key = LUWMaterializedQueryTable.class;
+            } else if(elements[i] instanceof DB2Alias) {
+                key = DB2Alias.class;
+            } else if(elements[i] instanceof CheckConstraint) {
+                key = CheckConstraint.class;
+            } else if(elements[i] instanceof ForeignKey) {
+                key = ForeignKey.class;
+            } else if(elements[i] instanceof LUWBufferPool) {
+                key = LUWBufferPool.class;
+            } else if(elements[i] instanceof LUWPartitionGroup) {
+                key = LUWPartitionGroup.class;
+	        } else if(elements[i] instanceof Column) {
+	            key = Column.class;
+            } else if(elements[i] instanceof Role) {
+                key = Role.class;
+            } else if(elements[i] instanceof RoleAuthorization) {
+                key = RoleAuthorization.class;
+            } else if(elements[i] instanceof User) {
+                key = User.class;
+            } else if(elements[i] instanceof Group) {
+                key = Group.class;
+            } else if(elements[i] instanceof Privilege) {
+                key = Privilege.class;
+            } else if(elements[i] instanceof LUWDatabasePackage) {
+            	key = LUWDatabasePackage.class;
+	        } else if(elements[i] instanceof PLSQLPackage) {
+	        	key = PLSQLPackage.class;
+	        } else if(elements[i] instanceof PLSQLPackageBody) {
+	        	key = PLSQLPackageBody.class;
+	        } else if(elements[i] instanceof LUWModule) {
+	        	key = LUWModule.class;
+	        } else if(elements[i] instanceof LUWModuleCondition) {
+	        	key = LUWModuleCondition.class;
+	        } else if(elements[i] instanceof LUWGlobalVariable) {
+	        	key = LUWGlobalVariable.class;
+	        }
+            try {
+                Data d = sod.getData(key); //Data d = sod.getData(elements[i].getClass());
+                EngineeringOptionID.populateOptions(s, d.mask);
+                //discover(s, d);
+            } catch (Exception e) {
+//                System.err.println("Missing definition for: " + elements[i].getClass().toString());
+//               e.printStackTrace();
+            }
+        }
+        return s;
+    }
+    //@ed00058820gs
+
+    public EngineeringOption[] getOptions() {
+        if(this.options == null) {
+            ResourceBundle resource = ResourceBundle.getBundle("org.eclipse.datatools.enablement.internal.core.util.DdlGeneration"); //$NON-NLS-1$
+
+            EngineeringOptionCategory[] categories = this.getOptionCategories();
+            
+            EngineeringOptionCategory general_options =null;
+            EngineeringOptionCategory additional_element =null;
+            for (int i = 0; i < categories.length; i++) {
+            	if (categories[i].getId().equals(EngineeringOptionCategoryID.GENERATE_OPTIONS)){
+            		general_options = categories[i];
+            	} else if (categories[i].getId().equals(EngineeringOptionCategoryID.GENERATE_ELEMENTS)){
+            		additional_element = categories[i];
+            	}
+            }
+            
+            Vector optionVec = new Vector();
+            //DATABASE, SCHEMAS, MQT
+            optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_FULLY_QUALIFIED_NAME,resource.getString("GENERATE_FULLY_QUALIFIED_NAME"), resource.getString("GENERATE_FULLY_QUALIFIED_NAME_DES"),DdlGenerationUtility.getQualifyNamesDefault(),general_options)); //$NON-NLS-1$ //$NON-NLS-2$
+            optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_QUOTED_IDENTIFIER,resource.getString("GENERATE_QUOTED_IDENTIFIER"), resource.getString("GENERATE_QUOTED_IDENTIFIER_DES"),DdlGenerationUtility.getQuoteIdentifiersDefault(),general_options)); //$NON-NLS-1$ //$NON-NLS-2$
+            optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_DROP_STATEMENTS,resource.getString("GENERATE_DROP_STATEMENTS"), resource.getString("GENERATE_DROP_STATEMENTS_DES"),false,general_options)); //$NON-NLS-1$ //$NON-NLS-2$
+            optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_CREATE_STATEMENTS,resource.getString("GENERATE_CREATE_STATEMENTS"), resource.getString("GENERATE_CREATE_STATEMENTS_DES"),true,general_options)); //$NON-NLS-1$ //$NON-NLS-2$
+            optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_COMMENTS,resource.getString("GENERATE_COMMENTS"), resource.getString("GENERATE_COMMENTS_DES"),true,general_options)); //$NON-NLS-1$ //$NON-NLS-2$
+            optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_PRIVILEGE,resource.getString("GENERATE_PRIVILEGE"), resource.getString("GENERATE_PRIVILEGE_DES"),true,additional_element)); //$NON-NLS-1$ //$NON-NLS-2$
+            optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_IN_TABLESPACE_CLAUSE,resource.getString("GENERATE_IN_TABLESPACE_CLAUSE"), resource.getString("GENERATE_IN_TABLESPACE_CLAUSE_DES"),true,general_options)); //$NON-NLS-1$ //$NON-NLS-2$
+            optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_USE_DOMAIN_IF_EXIST,resource.getString("GENERATE_USE_DOMAIN_IF_EXIST"), resource.getString("GENERATE_USE_DOMAIN_IF_EXIST_DES"),false,general_options)); //$NON-NLS-1$ //$NON-NLS-2$
+            optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_TABLES,resource.getString("GENERATE_TABLES"), resource.getString("GENERATE_TABLES_DES"),true,additional_element)); //$NON-NLS-1$ //$NON-NLS-2$
+            optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_TABLESPACES,resource.getString("GENERATE_TABLESPACES"), resource.getString("GENERATE_TABLESPACES_DES"),false,additional_element)); //$NON-NLS-1$ //$NON-NLS-2$
+            optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_INDICES,resource.getString("GENERATE_INDEX"), resource.getString("GENERATE_INDEX_DES"),true,additional_element)); //$NON-NLS-1$ //$NON-NLS-2$
+            optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_STOREDPROCEDURES,resource.getString("GENERATE_STOREDPROCEDURE"), resource.getString("GENERATE_STOREDPROCEDURE_DES"),true,additional_element)); //$NON-NLS-1$ //$NON-NLS-2$
+            optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_FUNCTIONS,resource.getString("GENERATE_FUNCTION"), resource.getString("GENERATE_FUNCTION_DES"),true,additional_element)); //$NON-NLS-1$ //$NON-NLS-2$
+            optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_VIEWS,resource.getString("GENERATE_VIEW"), resource.getString("GENERATE_VIEW_DES"),true,additional_element)); //$NON-NLS-1$ //$NON-NLS-2$
+            optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_TRIGGERS,resource.getString("GENERATE_TRIGGER"), resource.getString("GENERATE_TRIGGER_DES"),true,additional_element)); //$NON-NLS-1$ //$NON-NLS-2$
+            optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_PACKAGE,resource.getString("GENERATE_PACKAGE"), resource.getString("GENERATE_PACKAGE_DES"),true,additional_element)); //$NON-NLS-1$ //$NON-NLS-2$
+            optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_SEQUENCES,resource.getString("GENERATE_SEQUENCE"), resource.getString("GENERATE_SEQUENCE_DES"),true,additional_element)); //$NON-NLS-1$ //$NON-NLS-2$
+            optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_USER_DEFINED_TYPE,resource.getString("GENERATE_USER_DEFINED_TYPE"), resource.getString("GENERATE_USER_DEFINED_TYPE_DES"),true,additional_element)); //$NON-NLS-1$ //$NON-NLS-2$
+            optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_PK_CONSTRAINTS,resource.getString("GENERATE_PK_CONSTRAINTS"), resource.getString("GENERATE_PK_CONSTRAINTS_DES"),true,additional_element)); //$NON-NLS-1$ //$NON-NLS-2$
+            optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_FK_CONSTRAINTS,resource.getString("GENERATE_FK_CONSTRAINTS"), resource.getString("GENERATE_FK_CONSTRAINTS_DES"),true,additional_element)); //$NON-NLS-1$ //$NON-NLS-2$
+
+            OlapDdlBuilder olapDdlBuilder = DdlGenerationUtility.getOlapDdlBuilder(product, version);
+            if (olapDdlBuilder != null) {
+            	optionVec.add(new EngineeringOption(null,olapDdlBuilder.getOption(),olapDdlBuilder.getOptionDescription(),true,additional_element));
+            }
+            
+            ExtendDdlBuilder nicknameDdlBuilder = DdlGenerationUtility.getNicknameDdlBuilder(product, version);
+            if (nicknameDdlBuilder != null) {
+            	optionVec.add(new EngineeringOption(null,nicknameDdlBuilder.getOption(),nicknameDdlBuilder.getOptionDescription(),true,additional_element));
+            }
+
+            // fsp - pyl 
+            ExtendDdlBuilder federatedProcedureDdlBuilder = DdlGenerationUtility.getFederatedProcedureDdlBuilder(product, version);
+            if (federatedProcedureDdlBuilder != null) {
+            	optionVec.add(new EngineeringOption(null,federatedProcedureDdlBuilder.getOption(),federatedProcedureDdlBuilder.getOptionDescription(),true,additional_element));
+            }
+            
+            ExtendDdlBuilder remoteServerDdlBuilder = DdlGenerationUtility.getRemoteServerDdlBuilder(product, version);
+            if (remoteServerDdlBuilder != null) {
+            	optionVec.add(new EngineeringOption(null,remoteServerDdlBuilder.getOption(),remoteServerDdlBuilder.getOptionDescription(),true,additional_element));
+            }
+            
+            ExtendDdlBuilder wrapperDdlBuilder = DdlGenerationUtility.getWrapperDdlBuilder(product, version);
+            if (wrapperDdlBuilder != null) {
+                optionVec.add(new EngineeringOption(null,wrapperDdlBuilder.getOption(),wrapperDdlBuilder.getOptionDescription(),true,additional_element));
+            }
+
+            ExtendDdlBuilder userMappingDdlBuilder = DdlGenerationUtility.getUserMappingDdlBuilder(product, version);
+            if (userMappingDdlBuilder != null) {
+                optionVec.add(new EngineeringOption(null,userMappingDdlBuilder.getOption(),userMappingDdlBuilder.getOptionDescription(),true,additional_element));
+            }
+            
+            this.options = new EngineeringOption[optionVec.size()];
+            optionVec.copyInto(this.options);
+        }
+        
+        return this.options;
+    }
+
+    //@bd00058820gs
+    public EngineeringOption[] getOptions(SQLObject[] elements) {
+        return getOptions(elements, false);
+    }
+    
+    public EngineeringOption[] getOptions(SQLObject[] elements, boolean autoDiscovery) {
+	    isNickname = false; //@d00062627gs
+        EngineeringOptionCategory[] categories_new = this.getOptionCategories();
+        
+        EngineeringOptionCategory general_options =null;
+        EngineeringOptionCategory additional_element =null;
+        for (int i = 0; i < categories_new.length; i++) {
+          if (categories_new[i].getId().equals(EngineeringOptionCategoryID.GENERATE_OPTIONS)){
+              general_options = categories_new[i];
+          } else if (categories_new[i].getId().equals(EngineeringOptionCategoryID.GENERATE_ELEMENTS)){
+              additional_element = categories_new[i];
+          }
+        }           
+
+        //Get the main object, the ones that do no have parents.
+        //Look for dependency
+        optionDependency = new OptionDependency(elements, autoDiscovery);
+        Set sOptions = optionDependency.getOptions();
+        int size = 0;
+        EngineeringOption currentOption = null;
+        Vector optionVec = new Vector();
+        for (Iterator it=sOptions.iterator(); it.hasNext(); ) {
+        	EngineeringOption ddlOption = DdlGenerationUtility.getEngineeringOption((String)it.next(), product, version, general_options, additional_element, elements);
+            if (ddlOption != null) {
+                optionVec.add(ddlOption);
+            	if (ddlOption.getCategory().getId().equals(EngineeringOptionCategoryID.GENERATE_ELEMENTS)) {
+            		size++;
+            		currentOption = ddlOption;
+	            	//Disable indices, primary key, check and foreign key constraints by default if Nickname is selected
+	                if (isNickname) {
+	                	String id = ddlOption.getId();
+	                	if (id != null && (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_INDICES) ||
+	                		id.equalsIgnoreCase(EngineeringOptionID.GENERATE_PK_CONSTRAINTS) ||
+	                		id.equalsIgnoreCase(EngineeringOptionID.GENERATE_CK_CONSTRAINTS) ||
+	                		id.equalsIgnoreCase(EngineeringOptionID.GENERATE_FK_CONSTRAINTS))
+						   )
+	                		ddlOption.setBoolean(false);
+	                }
+            	}
+            }
+        }
+        if (size == 1) currentOption.setBoolean(true);
+        this.options = new EngineeringOption[optionVec.size()];
+        optionVec.copyInto(this.options);
+        return this.options;
+    }
+    
+    public EngineeringOptionCategory[] getOptionCategories() {
+        if(this.categories == null) {
+            this.categories = DdlGenerationUtility.createDDLGenerationOptionCategories(this.product, this.version);
+        }
+        return this.categories;
+    }
+    
+    //@bd00058820gs
+    public EngineeringOption[] getSelectedOptions() {
+        if (options == null)
+            this.getOptions();
+        return options;
+    }
+
+    public EngineeringOption[] getSelectedOptions(SQLObject[] elements) {
+        if (options == null)
+            if (optionDependency == null)
+            	this.getOptions(elements);
+            else
+                this.getOptions();
+        return options;
+    }
+    //@ed00058820gs
+    
+	private String product;
+	private String version;
+    private EngineeringOption[] options = null;
+    private EngineeringOption[] defaultOptions = null;
+    private EngineeringOptionCategory[] categories = null;
+	private LUWDdlBuilder builder = null;
+	private static boolean isNickname = false; //@d00062627gs
+	
+	//@bd00058820gs
+    private OptionDependency optionDependency = null;
+    
+    public class OptionDependency {
+        private SQLObject[] elements = null;
+        private Set sOptions = new LinkedHashSet();
+        private Set sElementsToUse = null;        
+
+        public OptionDependency(SQLObject[] elements, boolean autoDiscovery)
+        {
+            this.elements = elements;
+            sElementsToUse = new LinkedHashSet();
+            doDiscovery(autoDiscovery);
+        }
+
+        private void doDiscovery(boolean autoDiscovery)
+        {
+        	  boolean hasStorage = (LUWCatalogDatabase.getCatalogStorageProvider() != null)? true : false; 
+
+              setOption(EngineeringOptionID.CHECK_MODEL);
+              setOption(EngineeringOptionID.GENERATE_FULLY_QUALIFIED_NAME);
+              setOption(EngineeringOptionID.GENERATE_QUOTED_IDENTIFIER);
+              setOption(EngineeringOptionID.GENERATE_DROP_STATEMENTS);
+              setOption(EngineeringOptionID.GENERATE_CREATE_STATEMENTS);
+              setOption(EngineeringOptionID.GENERATE_COMMENTS);
+//              setOption(EngineeringOptionID.GENERATE_PRIVILEGE);
+              setOption(EngineeringOptionID.GENERATE_STATISTICS);
+
+              Set additionalOptions = new TreeSet();
+              if (autoDiscovery) {
+                  Iterator it = LUWDdlGenerator.getAllContainedDisplayableElementSet(elements).iterator();
+                  while(it.hasNext()) {
+                      Object o = it.next();
+    
+                      sElementsToUse.add(o);
+                      if (o instanceof LUWTable) {
+                        if (o instanceof LUWNickname) {
+                            additionalOptions.add(EngineeringOptionID.GENERATE_NICKNAME);
+                            //TODO: make sure to remove the columns, or leave LUWColumn line commented out
+                        } else {
+                            additionalOptions.add(EngineeringOptionID.GENERATE_TABLES);
+                        }
+                      } else if (o instanceof LUWServer) {
+                        additionalOptions.add(EngineeringOptionID.GENERATE_REMOTESERVER);
+                      } else if (o instanceof LUWWrapper) {
+                        additionalOptions.add(EngineeringOptionID.GENERATE_WRAPPER);
+                      } else if (o instanceof LUWUserMapping) { 
+                        additionalOptions.add(EngineeringOptionID.GENERATE_USERMAPPING);
+                      } else if (o instanceof DB2OLAPObject) {
+                        additionalOptions.add(EngineeringOptionID.GENERATE_OLAP);
+                      } else if (o instanceof LUWTableSpace) {
+                          additionalOptions.add(EngineeringOptionID.GENERATE_TABLESPACES);
+                      } else if (o instanceof LUWDatabasePackage) {
+                          additionalOptions.add(EngineeringOptionID.GENERATE_PACKAGE);
+                      } else if (o instanceof DB2Index) {
+                        additionalOptions.add(EngineeringOptionID.GENERATE_INDICES);
+                      } else if (o instanceof DB2Procedure) {
+                    	  if ( o instanceof FederatedProcedure)
+                    		  additionalOptions.add(EngineeringOptionID.GENERATE_FEDERATEDPROCEDURES);
+                    	  else
+                    		  additionalOptions.add(EngineeringOptionID.GENERATE_STOREDPROCEDURES);
+                      } else if (o instanceof DB2UserDefinedFunction) {
+                        additionalOptions.add(EngineeringOptionID.GENERATE_FUNCTIONS);
+                      } else if (o instanceof LUWView) {
+                        additionalOptions.add(EngineeringOptionID.GENERATE_VIEWS);
+                      } else if (o instanceof DB2Trigger) {
+                        additionalOptions.add(EngineeringOptionID.GENERATE_TRIGGERS);
+                      } else if (o instanceof Sequence) {
+                        additionalOptions.add(EngineeringOptionID.GENERATE_SEQUENCES);
+                      } else if (o instanceof UserDefinedType) {
+                        additionalOptions.add(EngineeringOptionID.GENERATE_USER_DEFINED_TYPE);
+    //                } else if(o instanceof DistinctUserDefinedType)
+    //                } else if (o instanceof StructuredUserDefinedType)
+                      } else if (o instanceof UniqueConstraint) {
+                        additionalOptions.add(EngineeringOptionID.GENERATE_PK_CONSTRAINTS);
+    //                  } else if(o instanceof LUWSynonym)
+    //                    additionalOptions.add(new EngineeringOption(EngineeringOptionID.GENERATE_SYNONYM);
+                      } else if(o instanceof LUWDatabase) {
+                        additionalOptions.add(EngineeringOptionID.GENERATE_DATABASE);
+                      } else if(o instanceof LUWMaterializedQueryTable) {
+                        additionalOptions.add(EngineeringOptionID.GENERATE_MQT);
+                      } else if(o instanceof DB2Alias) {
+                        additionalOptions.add(EngineeringOptionID.GENERATE_ALIAS);
+                      } else if(o instanceof CheckConstraint) {
+                        additionalOptions.add(EngineeringOptionID.GENERATE_CK_CONSTRAINTS);
+                      } else if(o instanceof ForeignKey) {
+                        additionalOptions.add(EngineeringOptionID.GENERATE_FK_CONSTRAINTS);
+                      } else if(o instanceof LUWBufferPool) {
+                        additionalOptions.add(EngineeringOptionID.GENERATE_BUFFERPOOL);
+                      } else if(o instanceof LUWPartitionGroup) {
+                        additionalOptions.add(EngineeringOptionID.GENERATE_PARTITIONGROUP);
+                      } else if(o instanceof Schema) {
+                        additionalOptions.add(EngineeringOptionID.GENERATE_SCHEMAS);
+                      } else if(o instanceof Column) {
+                    	  if (!additionalOptions.contains(EngineeringOptionID.GENERATE_TABLES)) {
+                    		  additionalOptions.add(EngineeringOptionID.GENERATE_TABLES);
+                    	  }
+                      } else if(o instanceof Role) {
+                          additionalOptions.add(EngineeringOptionID.GENERATE_ROLE);
+                      } else if(o instanceof RoleAuthorization) {
+                    	  additionalOptions.add(EngineeringOptionID.GENERATE_PRIVILEGE);
+                      } else if(o instanceof Privilege) {
+                    	  additionalOptions.add(EngineeringOptionID.GENERATE_PRIVILEGE);
+                      }
+                  }
+                  for (it = additionalOptions.iterator(); it.hasNext(); )
+                    setOption((String)it.next());
+              } else { //autoDiscovery == FALSE
+                sOptions.addAll(LUWDdlGenerator.getAllContainedDisplayableElementSetDepedency(elements));
+              }
+              
+              if (hasStorage) {
+            	  setOption(EngineeringOptionID.GENERATE_IN_TABLESPACE_CLAUSE);
+              }
+              setOption(EngineeringOptionID.GENERATE_USE_DOMAIN_IF_EXIST);
+
+        }
+        /**
+         * @return Returns the option.
+         */
+        public Set getOptions() {
+            return sOptions;
+        }
+        /**
+         * @param option The option to set.
+         */
+        public void setOption(String option) {
+            this.sOptions.add(option);
+        }
+
+		/**
+		 * @return Returns the sElementsToUse.
+		 */
+		public Set getElementsToUse() {
+			return sElementsToUse;
+		}
+    }
+
+    public static class Data {
+        private Class selectedObject = null;
+        private Set parents = new HashSet();
+        private Set childs = new HashSet();
+        private long mask = 0;
+        private ArrayList sOptions = new ArrayList();
+    }
+    
+    public static class SingletonOptionDependency {
+
+        private Map data = new HashMap();
+        private static SingletonOptionDependency ref;
+        
+        private SingletonOptionDependency()
+        {
+        }
+
+		public static SingletonOptionDependency getSingletonObject()
+        {
+        	if (ref == null) {
+            	boolean hasStorage = (LUWCatalogDatabase.getCatalogStorageProvider() != null)? true : false; 
+          	    boolean hasModule = LUWDdlGenerator.getModuleDdlBuilder() != null ? true :false;
+
+        		// it's ok, we can call this constructor
+        		ref = new SingletonOptionDependency();
+
+                //Database
+                Data d = new Data();
+                d.selectedObject = LUWDatabase.class;
+                d.parents = null;
+                d.childs.add(Schema.class);
+                d.childs.add(LUWTableSpace.class);
+                d.childs.add(LUWBufferPool.class);
+                d.childs.add(LUWPartitionGroup.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_DATABASE);
+                d.mask = EngineeringOptionID.DATABASE | EngineeringOptionID.TABLE | EngineeringOptionID.NICKNAME | EngineeringOptionID.SERVER | EngineeringOptionID.WRAPPER | EngineeringOptionID.USER_MAPPING | EngineeringOptionID.OLAP_OBJECT | EngineeringOptionID.TABLESPACE | 
+                         EngineeringOptionID.INDEX | EngineeringOptionID.PROCEDURE | EngineeringOptionID.USER_DEFINED_FUNCTION | EngineeringOptionID.VIEW | EngineeringOptionID.TRIGGER | EngineeringOptionID.SEQUENCE | 
+                         EngineeringOptionID.UNIQUE_CONSTRAINT | EngineeringOptionID.MATERIALIZED_QUERY_TABLE | EngineeringOptionID.ALIAS | EngineeringOptionID.CHECK_CONSTRAINT | EngineeringOptionID.FOREIGN_KEY | 
+                         EngineeringOptionID.SCHEMA | EngineeringOptionID.DISTINCT_USER_DEFINED_TYPE | 
+                         EngineeringOptionID.STRUCTURED_USER_DEFINED_TYPE | EngineeringOptionID.ROLE | EngineeringOptionID.PRIVILEGE;
+    			if (hasStorage) {
+    				d.mask = d.mask | EngineeringOptionID.TABLESPACE | EngineeringOptionID.BUFFER_POOL | EngineeringOptionID.PARTITION_GROUP; 
+    			}
+    			if (hasModule){
+    				d.mask = d.mask | EngineeringOptionID.MODULE | EngineeringOptionID.MODULE_CONDITION
+    						| EngineeringOptionID.PACKAGE
+    						| EngineeringOptionID.PACKAGE_BODY;
+    			}
+
+    			ref.data.put(Database.class,d);
+
+                //Schema
+                d = new Data();
+                d.selectedObject = Schema.class;
+                d.parents.add(Database.class);
+                d.childs.add(LUWTable.class);
+                d.childs.add(DB2Alias.class);
+                d.childs.add(LUWView.class);
+                d.childs.add(LUWWrapper.class);
+                d.childs.add(LUWMaterializedQueryTable.class);
+                d.childs.add(DB2UserDefinedFunction.class);
+                d.childs.add(DB2Procedure.class);
+                d.childs.add(UserDefinedType.class);
+                d.childs.add(Sequence.class);
+                d.childs.add(LUWModule.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_SCHEMAS);
+                d.mask = EngineeringOptionID.TABLE | EngineeringOptionID.NICKNAME | EngineeringOptionID.SERVER | EngineeringOptionID.WRAPPER | EngineeringOptionID.USER_MAPPING | EngineeringOptionID.OLAP_OBJECT |
+                         EngineeringOptionID.INDEX | EngineeringOptionID.PROCEDURE | EngineeringOptionID.USER_DEFINED_FUNCTION | EngineeringOptionID.VIEW | EngineeringOptionID.TRIGGER | EngineeringOptionID.SEQUENCE |
+                         EngineeringOptionID.UNIQUE_CONSTRAINT | EngineeringOptionID.MATERIALIZED_QUERY_TABLE | EngineeringOptionID.ALIAS | EngineeringOptionID.CHECK_CONSTRAINT | EngineeringOptionID.FOREIGN_KEY | 
+                         EngineeringOptionID.SCHEMA | EngineeringOptionID.DISTINCT_USER_DEFINED_TYPE | EngineeringOptionID.STRUCTURED_USER_DEFINED_TYPE | EngineeringOptionID.PRIVILEGE;
+    			if (hasStorage) {
+    				d.mask = d.mask | EngineeringOptionID.TABLESPACE;
+    			}
+    			if (hasModule){
+    				d.mask = d.mask | EngineeringOptionID.MODULE | EngineeringOptionID.MODULE_CONDITION
+    						| EngineeringOptionID.PACKAGE
+    						| EngineeringOptionID.PACKAGE_BODY;
+    			}
+                ref.data.put(Schema.class,d);
+               
+                //Table
+                d = new Data();
+                d.selectedObject = LUWTable.class;
+                d.parents.add(Schema.class);
+                d.childs.add(DB2Index.class);
+                d.childs.add(DB2Trigger.class);
+                d.childs.add(LUWTableSpace.class);
+                d.childs.add(UniqueConstraint.class);
+                d.childs.add(ForeignKey.class);
+                d.childs.add(CheckConstraint.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_TABLES);
+                d.mask = EngineeringOptionID.TABLE | EngineeringOptionID.OLAP_OBJECT |  EngineeringOptionID.INDEX | EngineeringOptionID.TRIGGER | EngineeringOptionID.UNIQUE_CONSTRAINT | 
+                         EngineeringOptionID.CHECK_CONSTRAINT | EngineeringOptionID.FOREIGN_KEY | EngineeringOptionID.PRIVILEGE;
+    			if (hasStorage) {
+    				d.mask = d.mask | EngineeringOptionID.TABLESPACE;
+    			}
+                ref.data.put(Table.class,d);
+                
+                //LUWStorageTable
+                d = new Data();
+                d.selectedObject = LUWStorageTable.class;
+                d.parents.add(Schema.class);
+                d.childs.add(LUWTableSpace.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_TABLES);
+                d.mask = EngineeringOptionID.TABLE | EngineeringOptionID.OLAP_OBJECT | EngineeringOptionID.TABLESPACE | EngineeringOptionID.INDEX | EngineeringOptionID.TRIGGER | EngineeringOptionID.UNIQUE_CONSTRAINT | 
+                         EngineeringOptionID.CHECK_CONSTRAINT | EngineeringOptionID.FOREIGN_KEY | EngineeringOptionID.PRIVILEGE;
+                ref.data.put(LUWStorageTable.class,d);
+                
+                //LUWWrapper
+                d = new Data();
+                d.selectedObject = LUWWrapper.class;
+                d.parents.add(Schema.class);
+                d.childs.add(LUWServer.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_WRAPPER);
+                d.mask = EngineeringOptionID.NICKNAME | EngineeringOptionID.SERVER | EngineeringOptionID.WRAPPER | 
+				         EngineeringOptionID.USER_MAPPING | EngineeringOptionID.INDEX | 
+                         EngineeringOptionID.UNIQUE_CONSTRAINT | EngineeringOptionID.CHECK_CONSTRAINT | 
+                         EngineeringOptionID.FOREIGN_KEY;
+                ref.data.put(LUWWrapper.class,d);
+
+                //LUWServer
+                d = new Data();
+                d.selectedObject = LUWServer.class;
+                d.parents.add(LUWWrapper.class);
+                d.childs.add(LUWUserMapping.class);
+                d.childs.add(LUWNickname.class);
+                d.childs.add(LUWWrapper.class); //add dependency (watch out recurssion)                
+                d.sOptions.add(EngineeringOptionID.GENERATE_REMOTESERVER);
+                d.mask = EngineeringOptionID.NICKNAME | EngineeringOptionID.SERVER | EngineeringOptionID.WRAPPER | 
+                         EngineeringOptionID.USER_MAPPING | EngineeringOptionID.INDEX | 
+                         EngineeringOptionID.UNIQUE_CONSTRAINT | EngineeringOptionID.CHECK_CONSTRAINT | 
+                         EngineeringOptionID.FOREIGN_KEY;
+                ref.data.put(LUWServer.class,d);
+                
+                //LUWUserMapping
+                d = new Data();
+                d.selectedObject = LUWUserMapping.class;
+                d.parents.add(LUWServer.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_USERMAPPING);
+                d.mask = EngineeringOptionID.SERVER | EngineeringOptionID.WRAPPER | EngineeringOptionID.USER_MAPPING;
+                ref.data.put(LUWUserMapping.class,d);
+
+                //LUWNickname
+                d = new Data();
+                d.selectedObject = LUWNickname.class;
+                d.parents.add(LUWServer.class);
+                d.childs.add(UniqueConstraint.class);
+                d.childs.add(ForeignKey.class);
+                d.childs.add(CheckConstraint.class);
+                d.childs.add(LUWServer.class); //add dependency (watch out recurssion)
+                d.sOptions.add(EngineeringOptionID.GENERATE_NICKNAME);
+                d.mask = EngineeringOptionID.NICKNAME | EngineeringOptionID.SERVER | EngineeringOptionID.WRAPPER | 
+                         EngineeringOptionID.USER_MAPPING | EngineeringOptionID.INDEX | 
+                         EngineeringOptionID.UNIQUE_CONSTRAINT | EngineeringOptionID.CHECK_CONSTRAINT | 
+                         EngineeringOptionID.FOREIGN_KEY | EngineeringOptionID.PRIVILEGE;
+                ref.data.put(LUWNickname.class,d);
+
+                //DB2OLAPObject
+                d = new Data();
+                d.selectedObject = DB2OLAPObject.class;
+                d.parents.add(Schema.class);
+                //d.child.add(DB2Index.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_OLAP);
+                d.mask = EngineeringOptionID.OLAP_OBJECT;
+                ref.data.put(DB2OLAPObject.class,d);
+
+                //LUWTableSpace
+                d = new Data();
+                d.selectedObject = LUWTableSpace.class;
+                d.parents.add(Schema.class);
+                //d.child.add(DB2Index.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_TABLESPACES);
+                d.mask = EngineeringOptionID.TABLESPACE | EngineeringOptionID.PRIVILEGE;
+                ref.data.put(LUWTableSpace.class,d);
+
+                //Index
+                d = new Data();
+                d.selectedObject = DB2Index.class;
+                d.parents.add(Schema.class);
+                //d.child.add(DB2Index.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_INDICES);
+                d.mask = EngineeringOptionID.INDEX | EngineeringOptionID.PRIVILEGE;
+                ref.data.put(Index.class,d);
+
+                //Procedure
+                d = new Data();
+                d.selectedObject = DB2Procedure.class;
+                d.parents.add(Schema.class);
+                //d.child.add(DB2Index.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_STOREDPROCEDURES);
+                d.mask = EngineeringOptionID.PROCEDURE | EngineeringOptionID.PRIVILEGE;
+                ref.data.put(Procedure.class,d);
+
+                //Federated Procedure - pyl
+                d = new Data();
+                d.selectedObject = FederatedProcedure.class;
+                d.parents.add(Schema.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_FEDERATEDPROCEDURES);
+                d.mask = EngineeringOptionID.FEDERATEDPROCEDURE | EngineeringOptionID.SERVER | EngineeringOptionID.WRAPPER |
+                         EngineeringOptionID.USER_MAPPING;
+                ref.data.put(FederatedProcedure.class,d);  // pyl @wsdbu00073899
+                
+                //DB2UserDefinedFunction
+                d = new Data();
+                d.selectedObject = DB2UserDefinedFunction.class;
+                d.parents.add(Schema.class);
+                //d.child.add(DB2Index.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_FUNCTIONS);
+                d.mask = EngineeringOptionID.USER_DEFINED_FUNCTION | EngineeringOptionID.PRIVILEGE;
+                ref.data.put(UserDefinedFunction.class,d);
+ 
+                //ViewTable
+                d = new Data();
+                d.selectedObject = LUWView.class;
+                d.parents.add(Schema.class);
+                //d.child.add(DB2Index.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_VIEWS);
+                d.mask = EngineeringOptionID.VIEW | EngineeringOptionID.TRIGGER | EngineeringOptionID.PRIVILEGE;
+                ref.data.put(ViewTable.class,d);
+
+                //Trigger
+                d = new Data();
+                d.selectedObject = DB2Trigger.class;
+                d.parents.add(Schema.class);
+                //d.child.add(DB2Index.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_TRIGGERS);
+                d.mask = EngineeringOptionID.TRIGGER;
+                ref.data.put(Trigger.class,d);
+
+                //Sequence
+                d = new Data();
+                d.selectedObject = Sequence.class;
+                d.parents.add(Schema.class);
+                //d.child.add(DB2Index.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_SEQUENCES);
+                d.mask = EngineeringOptionID.SEQUENCE | EngineeringOptionID.PRIVILEGE;
+                ref.data.put(Sequence.class,d);
+
+                //UserDefinedType
+                d = new Data();
+                d.selectedObject = UserDefinedType.class;
+                d.parents.add(Schema.class);
+                //d.child.add(DB2Index.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_USER_DEFINED_TYPE);
+                d.mask = EngineeringOptionID.USER_DEFINED_TYPE;
+                ref.data.put(UserDefinedType.class,d);
+
+                //UniqueConstraint
+                d = new Data();
+                d.selectedObject = UniqueConstraint.class;
+                d.parents.add(Schema.class);
+                //d.child.add(DB2Index.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_PK_CONSTRAINTS);
+                d.mask = EngineeringOptionID.UNIQUE_CONSTRAINT;
+                ref.data.put(UniqueConstraint.class,d);
+
+                //ForeignKey
+                d = new Data();
+                d.selectedObject = ForeignKey.class;
+                d.parents.add(Schema.class);
+                //d.child.add(DB2Index.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_FK_CONSTRAINTS);
+                d.mask = EngineeringOptionID.FOREIGN_KEY;
+                ref.data.put(ForeignKey.class,d);
+
+                //CheckConstraint
+                d = new Data();
+                d.selectedObject = CheckConstraint.class;
+                d.parents.add(Schema.class);
+                //d.child.add(DB2Index.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_CK_CONSTRAINTS);
+                d.mask = EngineeringOptionID.CHECK_CONSTRAINT;
+                ref.data.put(CheckConstraint.class,d);
+
+                //LUWMaterializedQueryTable
+                d = new Data();
+                d.selectedObject = LUWMaterializedQueryTable.class;
+                d.parents.add(Schema.class);
+                //d.child.add(DB2Index.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_MQT);
+                d.mask = EngineeringOptionID.INDEX | EngineeringOptionID.MATERIALIZED_QUERY_TABLE | EngineeringOptionID.PRIVILEGE;
+                ref.data.put(LUWMaterializedQueryTable.class,d);
+
+                //DB2Alias
+                d = new Data();
+                d.selectedObject = DB2Alias.class;
+                d.parents.add(Schema.class);
+                //d.child.add(DB2Index.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_ALIAS);
+                d.mask = EngineeringOptionID.ALIAS;
+                ref.data.put(DB2Alias.class,d);
+
+                //LUWBufferPool
+                d = new Data();
+                d.selectedObject = LUWBufferPool.class;
+                d.parents.add(Database.class);
+                //d.child.add(DB2Index.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_BUFFERPOOL);
+                d.mask = EngineeringOptionID.BUFFER_POOL;
+                ref.data.put(LUWBufferPool.class,d);
+
+                //LUWPartitionGroup
+                d = new Data();
+                d.selectedObject = LUWPartitionGroup.class;
+                d.parents.add(Database.class);
+                //d.child.add(DB2Index.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_PARTITIONGROUP);
+                d.mask = EngineeringOptionID.PARTITION_GROUP;
+                ref.data.put(LUWPartitionGroup.class,d);
+                
+                //Column
+                d = new Data();
+                d.selectedObject = Column.class;
+                d.parents.add(LUWTable.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_TABLES);
+                d.mask = EngineeringOptionID.TABLE;
+                ref.data.put(Column.class,d);
+
+                //Role
+                d = new Data();
+                d.selectedObject = Role.class;
+                d.parents.add(Database.class);
+                d.childs.add(Privilege.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_ROLE);
+                d.mask = EngineeringOptionID.ROLE | EngineeringOptionID.PRIVILEGE;
+                ref.data.put(Role.class,d);
+
+                //User
+                d = new Data();
+                d.selectedObject = User.class;
+                d.parents.add(Database.class);
+                d.childs.add(Privilege.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_PRIVILEGE);
+                d.mask = EngineeringOptionID.PRIVILEGE;
+                ref.data.put(User.class,d);
+
+                //Group
+                d = new Data();
+                d.selectedObject = Group.class;
+                d.parents.add(Database.class);
+                d.childs.add(Privilege.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_PRIVILEGE);
+                d.mask = EngineeringOptionID.PRIVILEGE;
+                ref.data.put(Group.class,d);
+
+                //RoleAuthorization
+                d = new Data();
+                d.selectedObject = RoleAuthorization.class;
+                d.parents.add(AuthorizationIdentifier.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_PRIVILEGE);
+                d.mask = EngineeringOptionID.PRIVILEGE;
+                ref.data.put(RoleAuthorization.class,d);
+
+                //Privilege
+                d = new Data();
+                d.selectedObject = Privilege.class;
+                d.parents.add(AuthorizationIdentifier.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_PRIVILEGE);
+                d.mask = EngineeringOptionID.PRIVILEGE;
+                ref.data.put(Privilege.class,d);
+
+                //Package
+                d = new Data();
+                d.selectedObject = LUWDatabasePackage.class;
+                d.parents.add(Schema.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_PACKAGE);
+                d.mask = EngineeringOptionID.PACKAGE | EngineeringOptionID.PRIVILEGE;
+                ref.data.put(LUWDatabasePackage.class,d);
+
+    			if (hasModule){
+                    //Module
+                    d = new Data();
+                    d.selectedObject = LUWModule.class;
+                    d.parents.add(Schema.class);
+                    d.sOptions.add(EngineeringOptionID.GENERATE_MODULE);
+                    d.mask = EngineeringOptionID.MODULE | EngineeringOptionID.MODULE_CONDITION 
+                    		| EngineeringOptionID.GLOBAL_VARIABLE
+                    		| EngineeringOptionID.USER_DEFINED_TYPE
+                    		| EngineeringOptionID.PROCEDURE | EngineeringOptionID.USER_DEFINED_FUNCTION
+                    		| EngineeringOptionID.PRIVILEGE;
+                    ref.data.put(LUWModule.class,d);
+
+                    //Module condition
+                    d = new Data();
+                    d.selectedObject = LUWModuleCondition.class;
+                    d.parents.add(LUWModule.class);
+                    d.sOptions.add(EngineeringOptionID.GENERATE_MODULE_CONDITION);
+                    d.mask =  EngineeringOptionID.MODULE_CONDITION;
+                    ref.data.put(LUWModuleCondition.class,d);
+
+                    //PL/SQL Package
+                    d = new Data();
+                    d.selectedObject = PLSQLPackage.class;
+                    d.parents.add(Schema.class);
+                    d.sOptions.add(EngineeringOptionID.GENERATE_PACKAGE);
+                    d.mask = EngineeringOptionID.PACKAGE | EngineeringOptionID.PACKAGE_BODY 
+                    		| EngineeringOptionID.PRIVILEGE;
+                    ref.data.put(PLSQLPackage.class,d);
+
+                    //PL/SQL PackageBody
+                    d = new Data();
+                    d.selectedObject = PLSQLPackageBody.class;
+                    d.parents.add(Schema.class);
+                    d.sOptions.add(EngineeringOptionID.GENERATE_PACKAGE_BODY);
+                    d.mask =  EngineeringOptionID.PACKAGE_BODY;
+                    ref.data.put(PLSQLPackageBody.class,d);
+    			}
+
+                //Global Variable
+                d = new Data();
+                d.selectedObject = LUWGlobalVariable.class;
+                d.parents.add(Schema.class);
+                d.sOptions.add(EngineeringOptionID.GENERATE_GLOBAL_VARIABLE);
+                d.mask =  EngineeringOptionID.GLOBAL_VARIABLE | EngineeringOptionID.PRIVILEGE;
+                ref.data.put(LUWGlobalVariable.class,d);
+
+        	}
+          return ref;
+        }        
+       
+        /**
+         * @return Returns the data.
+         */
+        public Data getData(Class key) {
+            return (Data)data.get(key);
+        }
+    }
+    //@ed00058820gs    
+    
+	public static ILUWModuleDdlBuilder getModuleDdlBuilder() {
+		IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+		IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("com.ibm.datatools.db2.luw", "moduleDdlBuilder"); //$NON-NLS-1$ //$NON-NLS-2$
+		if (extensionPoint != null) {
+		    IExtension[] extensions = extensionPoint.getExtensions();
+		    if(extensions.length == 1) {
+		        IConfigurationElement[] configElements = extensions[0].getConfigurationElements();
+		        try {
+		            moduleBuilder = (ILUWModuleDdlBuilder) configElements[0].createExecutableExtension("class"); //$NON-NLS-1$
+		        }
+		        catch(Exception e) {
+		        }
+		    }
+		}
+		return moduleBuilder;
+	}
+
+	//@Override
+	public DdlBuilder getDdlBuilder() {
+		return this.builder;
+	}
+
+//bgp	@Override
+	public EngineeringOption[] getDefaultOptions(SQLObject[] elements) {
+		 isNickname = false; //@d00062627gs
+	        EngineeringOptionCategory[] categories_new = this.getOptionCategories();
+	        
+	        EngineeringOptionCategory general_options =null;
+	        EngineeringOptionCategory additional_element =null;
+	        for (int i = 0; i < categories_new.length; i++) {
+	          if (categories_new[i].getId().equals(EngineeringOptionCategoryID.GENERATE_OPTIONS)){
+	              general_options = categories_new[i];
+	          } else if (categories_new[i].getId().equals(EngineeringOptionCategoryID.GENERATE_ELEMENTS)){
+	              additional_element = categories_new[i];
+	          }
+	        }           
+
+	        //Get the main object, the ones that do no have parents.
+	        //Look for dependency
+	        optionDependency = new OptionDependency(elements, false);
+	        Set sOptions = optionDependency.getOptions();
+	        int size = 0;
+	        EngineeringOption currentOption = null;
+	        Vector defaultOptionVec = new Vector();
+	        for (Iterator it=sOptions.iterator(); it.hasNext(); ) {
+	        	EngineeringOption ddlOption = DdlGenerationUtility.getDefaultEngineeringOption((String)it.next(), product, version, general_options, additional_element);
+	            if (ddlOption != null) {
+	            	defaultOptionVec.add(ddlOption);
+	            	if (ddlOption.getCategory().getId().equals(EngineeringOptionCategoryID.GENERATE_ELEMENTS)) {
+	            		size++;
+	            		currentOption = ddlOption;
+		            	//Disable indices, primary key, check and foreign key constraints by default if Nickname is selected
+		                if (isNickname) {
+		                	String id = ddlOption.getId();
+		                	if (id != null && (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_INDICES) ||
+		                		id.equalsIgnoreCase(EngineeringOptionID.GENERATE_PK_CONSTRAINTS) ||
+		                		id.equalsIgnoreCase(EngineeringOptionID.GENERATE_CK_CONSTRAINTS) ||
+		                		id.equalsIgnoreCase(EngineeringOptionID.GENERATE_FK_CONSTRAINTS))
+							   )
+		                		ddlOption.setBoolean(false);
+		                }
+	            	}
+	            }
+	        }
+	        if (size == 1) currentOption.setBoolean(true);
+	        this.defaultOptions = new EngineeringOption[defaultOptionVec.size()];
+	        defaultOptionVec.copyInto(this.defaultOptions);
+	        return this.defaultOptions;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDdlMessages.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDdlMessages.java
new file mode 100644
index 0000000..fa3ea68
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDdlMessages.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.ddl;
+
+import org.eclipse.osgi.util.NLS;
+
+public final class LUWDdlMessages extends NLS {
+
+	private static final String BUNDLE_NAME = "org.eclipse.datatools.enablement.ibm.db2.luw.ddl.LUWDdlMessages";//$NON-NLS-1$
+
+	private LUWDdlMessages() {
+	}
+	
+	//FE 
+	public static String FE_TABLESPACE_NO_CONTAINER;
+	public static String FE_DATATYPE_IS_NULL;
+	public static String FE_REFERENCED_PARENT_KEY_DOES_NOT_EXIST;
+	public static String FE_REFERENCED_PARENT_TABLE_DOES_NOT_EXIST;
+	public static String FE_VIEW_HAS_NO_BODY;
+	public static String FE_MQT_HAS_NO_BODY;
+	public static String FE_BUFFERPOOL_INVAILD_SIZE_VALUE;
+	public static String FE_GENERATED_COLUMN_HAS_NO_EXPRESSION;
+	public static String FE_ALTER_TABLE_ADD_COLUMN_IDENTITY_OPTIONS;
+	public static String FE_INVALID_MODEL;
+	public static String FE_INDEX_MEMBERS_NOT_SPECIFIED;
+
+	static {
+		NLS.initializeMessages(BUNDLE_NAME, LUWDdlMessages.class);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDdlMessages.properties b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDdlMessages.properties
new file mode 100644
index 0000000..2f065ef
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDdlMessages.properties
@@ -0,0 +1,24 @@
+# NLS_MESSAGEFORMAT_VAR          needed to handle quotes correctly
+#
+# Copyright (c) 2003, 2014 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+#
+
+#FE
+FE_TABLESPACE_NO_CONTAINER = The table space {0} has no container
+FE_DATATYPE_IS_NULL = The data type of the object {0} is null
+FE_REFERENCED_PARENT_KEY_DOES_NOT_EXIST = The parent keys referenced by foreign key {0} do not exist
+FE_REFERENCED_PARENT_TABLE_DOES_NOT_EXIST = The parent table referenced by foreign key {0} does not exist
+FE_VIEW_HAS_NO_BODY = The view {0} has no SELECT statement
+FE_MQT_HAS_NO_BODY = The MQT {0} has no SELECT statement
+FE_BUFFERPOOL_INVAILD_SIZE_VALUE = Invalid value specified for "SIZE" in bufferpool {0}
+FE_GENERATED_COLUMN_HAS_NO_EXPRESSION = The generated column {0} has no generation expression
+FE_ALTER_TABLE_ADD_COLUMN_IDENTITY_OPTIONS = Uncheck the identity checkbox for the new column {0} and try again
+FE_INVALID_MODEL = The model is invalid, please check the problem view to make the correction.
+FE_INDEX_MEMBERS_NOT_SPECIFIED = The key columns have not been specified for the index {0}.
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDdlParser.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDdlParser.java
new file mode 100644
index 0000000..121d86f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDdlParser.java
@@ -0,0 +1,170 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.ddl;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.enablement.ibm.db2.ddl.DB2DdlParser;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable;
+import org.eclipse.datatools.modelbase.sql.expressions.QueryExpression;
+import org.eclipse.datatools.modelbase.sql.expressions.SQLExpressionsPackage;
+import org.eclipse.datatools.modelbase.sql.expressions.SearchCondition;
+import org.eclipse.datatools.modelbase.sql.expressions.SearchConditionDefault;
+import org.eclipse.datatools.modelbase.sql.statements.SQLStatement;
+import org.eclipse.datatools.modelbase.sql.statements.SQLStatementDefault;
+import org.eclipse.datatools.modelbase.sql.statements.SQLStatementsPackage;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+
+public class LUWDdlParser extends DB2DdlParser {
+
+	public LUWDdlParser(DatabaseDefinition def){
+		super(def);
+	}
+
+    public DB2MaterializedQueryTable parseMQT(String mqtText) {
+    	DataModelElementFactory factory = this.def.getDataModelElementFactory();
+    	DB2MaterializedQueryTable mqt = (DB2MaterializedQueryTable)factory.create(LUWPackage.eINSTANCE.getLUWMaterializedQueryTable());
+
+    	String body = mqtText;
+    	String[] tokens = mqtText.split("\\s[Aa][Ss]\\s",2); //$NON-NLS-1$
+    	if (tokens.length > 1) {
+    		body = tokens[1].trim();
+    	}
+    	int pos = this.parseMQTFullStatement(body);
+    	if (pos != -1) {
+    		body = body.substring(1,pos);
+    	}
+		QueryExpression queryExpression = (QueryExpression) factory.create(SQLExpressionsPackage.eINSTANCE.getQueryExpressionDefault());
+		mqt.setQueryExpression(queryExpression);
+		queryExpression.setSQL(body);
+		return mqt;    	
+    }
+
+    public void parseTrigger (Trigger trigger,String triggerText){
+    	DataModelElementFactory factory = this.def.getDataModelElementFactory();
+    	
+    	String body = triggerText;
+    	String whenClause=""; //$NON-NLS-1$
+
+		Pattern pattern1 = java.util.regex.Pattern.compile("[\\s]*CREATE.*[\\s]+?TRIGGER(.*)ON(.*)[\\s]+?FOR[\\s]+?EACH[\\s]+?(.*)",java.util.regex.Pattern.CASE_INSENSITIVE|java.util.regex.Pattern.DOTALL); //$NON-NLS-1$
+    	Matcher matcher1 = pattern1.matcher(triggerText);
+    	if (matcher1.matches()) {
+    		this.parseUpdateColumns(matcher1.group(1).trim(),trigger);
+    		this.parseReferencingCluase(matcher1.group(2).trim(),trigger);
+    		body = matcher1.group(3).trim();
+    		if (body.toUpperCase().startsWith("ROW")) { //$NON-NLS-1$
+    			body = body.substring("ROW".length() +1); //$NON-NLS-1$
+    		} else if (body.toUpperCase().startsWith("STATEMENT")) { //$NON-NLS-1$
+    			body = body.substring("STATEMENT".length() +1); //$NON-NLS-1$
+    		}
+        	Pattern pattern = java.util.regex.Pattern.compile("[\\s]*MODE[\\s]+?DB2SQL(.*)",java.util.regex.Pattern.CASE_INSENSITIVE|java.util.regex.Pattern.DOTALL); //$NON-NLS-1$
+        	Matcher matcher = pattern.matcher(body);
+        	if (matcher.matches()) {
+        		body = matcher.group(1).trim();
+    			int whenPos = this.parseWhenClause(body);
+    			if (whenPos >= 0) {
+    				whenClause = body.substring(body.indexOf("(")+1,whenPos); //$NON-NLS-1$
+    				body = body.substring(whenPos+1).trim();
+    			}
+        	} else {
+    			int whenPos = this.parseWhenClause(body);
+    			if (whenPos >= 0) {
+    				whenClause = body.substring(body.indexOf("(")+1,whenPos); //$NON-NLS-1$
+    				body = body.substring(whenPos+1).trim();
+    			}
+        	}
+    		
+    	}
+    	
+		SearchCondition searchCondition = (SearchCondition) factory.create(SQLExpressionsPackage.eINSTANCE.getSearchConditionDefault());
+		trigger.setWhen(searchCondition);
+		((SearchConditionDefault)searchCondition).setSQL(whenClause);
+
+    	
+		SQLStatement sqlbody = (SQLStatement) factory.create(SQLStatementsPackage.eINSTANCE.getSQLStatementDefault());
+		((SQLStatementDefault)sqlbody).setSQL(body);
+		trigger.getActionStatement().add(sqlbody);
+    	
+    }
+    
+/*	public void parseView (ViewTable view,String viewText){
+		try {
+			Database[] dbs = new Database[]{view.getSchema().getDatabase()};
+	        Schema schema =  view.getSchema();
+	    	DDLParser luwParser = this.def.getDdlParser();
+	    	if (luwParser == null) return;
+	    	
+	        File temp = File.createTempFile("luwview", ".ddl");
+	        
+	        // Delete temp file when program exits.
+	        temp.deleteOnExit();
+	    
+	        // Write to temp file
+	        BufferedWriter out = new BufferedWriter(new FileWriter(temp));
+	        String currentSchema= "SET SCHEMA " + schema.getName() + ";" +  System.getProperty("line.separator");
+	        out.write(currentSchema);
+	        out.write(viewText);
+	        out.write(" ;");
+	        out.close();
+
+	        view.getSchema().getTables().remove(view);
+	        ViewTable tempView = null;
+	    	luwParser.parse(temp.getAbsolutePath(), dbs, null);
+    		for (Iterator iter = schema.getTables().iterator(); iter.hasNext();){
+    			Table table = (Table) iter.next();
+    			if (table.getName().equals(view.getName()) && table instanceof ViewTable) {
+    				tempView = (ViewTable)table;
+    				QueryExpression expression = ((ViewTable)table).getQueryExpression();
+    				if (expression == null) break;
+    				String sqlbody = expression.getSQL();
+    		    	DataModelElementFactory factory = this.def.getDataModelElementFactory();
+    				QueryExpression queryExpression = (QueryExpression) factory.create(SQLExpressionsPackage.eINSTANCE.getQueryExpressionDefault());
+    				((QueryExpressionDefault)queryExpression).setSQL(sqlbody);
+    				view.setQueryExpression(queryExpression);
+    				
+    				break;
+    			}
+    		}
+	    	
+	    	if (tempView != null) {
+	    		schema.getTables().remove(tempView);
+	    	}
+	    	
+	    	schema.getTables().add(view);
+	    	
+		} catch(Exception e){
+			e.printStackTrace();
+		}
+    }
+*/
+    private int parseMQTFullStatement(String body){
+    	int pos = -1;
+    	int matches = 0;
+		for (int i = 0; i < body.length(); i++) {
+			if (body.charAt(i)=='(') {
+				matches++;
+			} else if (body.charAt(i) ==')') {
+				matches--;
+				if (matches == 0) {
+					pos = i;
+					break;
+				}
+			}
+		}
+  
+    	return pos;
+    	
+    }
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDdlScript.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDdlScript.java
new file mode 100644
index 0000000..790bad7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDdlScript.java
@@ -0,0 +1,356 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.ddl;
+
+import java.util.Vector;
+
+import org.eclipse.datatools.enablement.ibm.ddl.CoreDdlScriptVector;
+import org.eclipse.datatools.enablement.ibm.ddl.OrderingDdlScript;
+
+public class LUWDdlScript extends OrderingDdlScript {
+    public void addDropTablespaceStatement(String statement) {
+        this.dropTablespaceStatements.add(statement);
+    }
+    
+    public void addCreateTablespaceStatement(String statement) {
+        this.createTablespaceStatements.add(statement);
+    }
+
+    public void addDropBufferPoolStatement(String statement) {
+        this.dropBufferPoolStatements.add(statement);
+    }
+    
+    public void addCreateBufferPoolStatement(String statement) {
+        this.createBufferPoolStatements.add(statement);
+    }
+
+    public void addCommentOnStatement(String statement) {
+        this.commentOnStatements.add(statement);
+    }
+
+    public void addDropNicknameStatement(String statement) {
+        this.dropNicknameStatements.add(statement);
+    }
+    
+    public void addCreateNicknameStatement(String statement) {
+        this.createNicknameStatements.add(statement);
+    }
+    
+    // fsp - pyl
+    public void addCreateFederatedProcedureStatement(String statement) {
+        this.createFederatedProcedureStatements.add(statement);
+    }
+    
+    public void addDropPackageStatement(String statement) {
+        this.dropPackageStatements.add(statement);
+    }
+
+    public void addDropRemoteServerStatement(String statement) {
+        this.dropRemoteServerStatements.add(statement);
+    }
+    
+    public void addCreateRemoteServerStatement(String statement) {
+        this.createRemoteServerStatements.add(statement);
+    }
+    
+    public void addDropWrapperStatement(String statement) {
+        this.dropWrapperStatements.add(statement);
+    }
+    
+    public void addCreateWrapperStatement(String statement) {
+        this.createWrapperStatements.add(statement);
+    }
+
+    public void addDropUserMappingStatement(String statement) {
+        this.dropUserMappingStatements.add(statement);
+    }
+    
+    public void addCreateUserMappingStatement(String statement) {
+        this.createUserMappingStatements.add(statement);
+    }    
+
+//    xml schema drop done via stored procedure now 
+//    public void addDropXMLSchemaStatement(String statement){
+//    	this.dropXMLSchemaStatements.add(statement);
+//    }
+
+    public void addDropPartitionStatement(String statement) {
+        this.dropPartitionGroupStatements.add(statement);
+    }
+    
+    public void addCreatePartitionGroupStatement(String statement) {
+        this.createPartitionGroupStatements.add(statement);
+    }
+
+    public void addUpdateStatisticsStatement(String statement) {
+        this.updateStatisticsStatements.add(statement);
+    }
+
+    public void addDropModuleStatement(String statement) {
+        this.dropModuleStatements.add(statement);
+    }
+    
+    public void addCreateModuleStatement(String statement) {
+        this.createModuleStatements.add(statement);
+    }    
+
+    public void addDropModuleConditionStatement(String statement) {
+        this.dropModuleConditionStatements.add(statement);
+    }
+    
+    public void addCreateModuleConditionStatement(String statement) {
+        this.createModuleConditionStatements.add(statement);
+    }    
+
+    public void addDropModuleGlobalVariableStatement(String statement) {
+        this.dropModuleGlobalVariableStatements.add(statement);
+    }
+    
+    public void addCreateModuleGlobalVariableStatement(String statement) {
+        this.createModuleGlobalVariableStatements.add(statement);
+    }    
+
+    public void addDropGlobalVariableStatement(String statement) {
+        this.dropModuleGlobalVariableStatements.add(statement);
+    }
+    
+    public void addCreateGlobalVariableStatement(String statement) {
+        this.createModuleGlobalVariableStatements.add(statement);
+    }    
+
+    public void addDropModuleTypeStatement(String statement) {
+        this.dropModuleTypeStatements.add(statement);
+    }
+    
+    public void addCreateModuleTypeStatement(String statement) {
+        this.createModuleTypeStatements.add(statement);
+    }    
+
+    public void addDropModuleRoutineStatement(String statement) {
+        this.dropModuleRoutineStatements.add(statement);
+    }
+    
+    public void addCreateModuleRoutineStatement(String statement) {
+        this.createModuleRoutineStatements.add(statement);
+    }    
+
+    public void addDropPlsqlPackageStatement(String statement) {
+        this.dropPlsqlPackageStatements.add(statement);
+    }
+    
+    public void addCreatePlsqlPackageStatement(String statement) {
+        this.createPlsqlPackageStatements.add(statement);
+    }    
+
+    public void addDropPlsqlPackageBodyStatement(String statement) {
+        this.dropPlsqlPackageBodyStatements.add(statement);
+    }
+    
+    public void addCreatePlsqlPackageBodyStatement(String statement) {
+        this.createPlsqlPackageBodyStatements.add(statement);
+    }    
+
+    public String[] getStatements(){
+    	CoreDdlScriptVector scriptVec = new CoreDdlScriptVector();
+		scriptVec.addAll(revokeStatements, false);
+		scriptVec.addAll(dropRoleStatements);
+		scriptVec.addAll(dropTriggerStatements);
+		scriptVec.addAll(dropModuleRoutineStatements);
+		scriptVec.addAll(dropModuleConditionStatements);
+		scriptVec.addAll(dropModuleGlobalVariableStatements);
+		scriptVec.addAll(dropModuleTypeStatements);
+		scriptVec.addAll(dropModuleStatements);
+		scriptVec.addAll(dropPlsqlPackageBodyStatements);
+		scriptVec.addAll(dropPlsqlPackageStatements);
+		scriptVec.addAll(orderedDropRoutineStatements);
+		scriptVec.addAll(orderedDropForeignKeyStatements);
+		scriptVec.addAll(orderedDropConstraintStatements);
+		scriptVec.addAll(dropViewIndexStatements);
+		scriptVec.addAll(dropIndexStatements);
+		scriptVec.addAll(orderedDropViewStatements);
+		scriptVec.addAll(alterTableDropColumnStatements);
+		scriptVec.addAll(backupTableStatements); // Data Preservation
+		scriptVec.addAll(orderedDropTableStatements);
+		scriptVec.addAll(dropSequenceStatements);
+		scriptVec.addAll(dropUserDefinedTypeStatements);
+		scriptVec.addAll(dropNicknameStatements);
+		scriptVec.addAll(dropFederatedProcedureStatements);
+		scriptVec.addAll(dropPackageStatements);
+        scriptVec.addAll(dropUserMappingStatements);        
+        scriptVec.addAll(dropRemoteServerStatements);
+        scriptVec.addAll(dropWrapperStatements);
+//		scriptVec.addAll(dropXMLSchemaStatements);
+		scriptVec.addAll(dropGlobaleVariableStatements);
+		scriptVec.addAll(dropSchemaStatements);
+		scriptVec.addAll(dropTablespaceStatements);
+		scriptVec.addAll(dropBufferPoolStatements);
+		scriptVec.addAll(dropPartitionGroupStatements);
+        scriptVec.addAll(dropDatabaseStatements); //@d00058820gs
+        scriptVec.addAll(createDatabaseStatements); //@d00058820gs
+        scriptVec.addAll(createRoleStatements); 
+		scriptVec.addAll(createPartitionGroupStatements);
+		scriptVec.addAll(createBufferPoolStatements);
+		scriptVec.addAll(createTablespaceStatements);
+		scriptVec.addAll(createSchemaStatements);
+		scriptVec.addAll(createGlobaleVariableStatements);
+		scriptVec.addAll(renameTableStatements);
+//		wsdbu00240410
+	//	resortUDTStatements();
+		scriptVec.addAll(createUserDefinedTypeStatements,false);
+		scriptVec.addAll(createSequenceStatements);
+		scriptVec.addAll(orderedCreateTableStatements);
+		scriptVec.addAll(alterTableAddColumnStatements);
+		scriptVec.addAll(populateTableStatements); // Data Preservation
+		scriptVec.addAll(dropBackupTableStatements); // Data Preservation
+        scriptVec.addAll(createWrapperStatements);        
+		scriptVec.addAll(createRemoteServerStatements);
+        scriptVec.addAll(createUserMappingStatements);        
+		scriptVec.addAll(createNicknameStatements);
+		scriptVec.addAll(createFederatedProcedureStatements);
+		scriptVec.addAll(createIndexStatements);
+		scriptVec.addAll(orderedCreateConstraintStatements);
+		scriptVec.addAll(orderedCreateForeignKeyStatements);
+		scriptVec.addAll(orderedCreateViewStatements);
+		scriptVec.addAll(createViewIndexStatements);
+		scriptVec.addAll(orderedCreateRoutineStatements);
+		scriptVec.addAll(createPlsqlPackageStatements);
+		scriptVec.addAll(createPlsqlPackageBodyStatements);
+		scriptVec.addAll(createModuleStatements);
+		scriptVec.addAll(createModuleTypeStatements);
+		scriptVec.addAll(createModuleGlobalVariableStatements);
+		scriptVec.addAll(createModuleConditionStatements);
+		scriptVec.addAll(createModuleRoutineStatements);
+		scriptVec.addAll(createTriggerStatements);
+		scriptVec.addAll(grantStatements);
+		scriptVec.addAll(commentOnStatements);
+		scriptVec.addAll(reorgStatements);
+		scriptVec.addAll(updateStatisticsStatements);
+		
+		String[] scripts = new String[scriptVec.size()];
+		scriptVec.copyInto(scripts);
+		return scripts;
+	}
+    protected Vector dropTablespaceStatements               = new Vector();
+    protected Vector createTablespaceStatements             = new Vector();
+    protected Vector dropBufferPoolStatements               = new Vector();
+    protected Vector createBufferPoolStatements             = new Vector();
+    protected Vector commentOnStatements                    = new Vector();
+    protected Vector createNicknameStatements               = new Vector();
+    protected Vector dropNicknameStatements                 = new Vector();
+    protected Vector createRemoteServerStatements           = new Vector();
+    protected Vector dropRemoteServerStatements             = new Vector();
+    protected Vector createWrapperStatements                = new Vector();
+    protected Vector dropWrapperStatements                  = new Vector();
+    protected Vector createUserMappingStatements            = new Vector();
+    protected Vector dropUserMappingStatements              = new Vector();    
+//    protected Vector dropXMLSchemaStatements                = new Vector();
+    protected Vector dropPartitionGroupStatements           = new Vector();
+    protected Vector createPartitionGroupStatements         = new Vector();
+    // fsp - pyl
+    protected Vector createFederatedProcedureStatements     = new Vector();
+    protected Vector dropFederatedProcedureStatements       = new Vector();
+    protected Vector dropPackageStatements       			= new Vector();
+    protected Vector updateStatisticsStatements      		 = new Vector();
+    
+    
+    protected Vector dropGlobaleVariableStatements       	= new Vector();
+    protected Vector createGlobaleVariableStatements  	    = new Vector();
+    
+    //module
+    protected Vector dropModuleStatements       		    = new Vector();
+    protected Vector createModuleStatements  	       		= new Vector();
+    protected Vector dropModuleConditionStatements       	= new Vector();
+    protected Vector createModuleConditionStatements  	    = new Vector();
+    protected Vector dropModuleGlobalVariableStatements 	= new Vector();
+    protected Vector createModuleGlobalVariableStatements  	 = new Vector();
+    protected Vector dropModuleTypeStatements 				 = new Vector();
+    protected Vector createModuleTypeStatements  			 = new Vector();
+    protected Vector dropModuleRoutineStatements 			 = new Vector();
+    protected Vector createModuleRoutineStatements  		 = new Vector();
+    protected Vector dropPlsqlPackageStatements       		    = new Vector();
+    protected Vector createPlsqlPackageStatements  	       		= new Vector();
+    protected Vector dropPlsqlPackageBodyStatements       	    = new Vector();
+    protected Vector createPlsqlPackageBodyStatements  	   		= new Vector();
+    
+    //fix for wsdbu00240410
+//    protected void resortUDTStatements(){
+//    	Vector oldList = new Vector();
+//    	oldList.addAll(createUserDefinedTypeStatements);
+//    	Vector newList = new Vector();
+//    	ArrayList seperateTypes = new ArrayList();
+//    	
+//    	for(int i = 0; i < createUserDefinedTypeStatements.size();i++){
+//    		String statement = createUserDefinedTypeStatements.get(i).toString();
+//    		if(!statement.contains(" depends on")){
+//    			String typeName = getSeperateTypeName(statement);
+//    			seperateTypes.add(typeName);
+//    			newList.add(statement);
+//    			oldList.remove(statement);
+//    		}
+//    	}
+//    	
+//    	while(oldList.size()>0){
+//    		for(int i = 0;i<oldList.size();i++){
+//    			String statement = oldList.get(i).toString();
+//    			String[] dependantTypes = getDependantTypes(statement);
+//    			String typeName = getSeperateTypeName(statement);
+//    			boolean canAdd = true;
+//    			for(int j=0;j<dependantTypes.length;j++){
+//    				if(seperateTypes.indexOf(dependantTypes[j].trim())<0){
+//    					canAdd = false;
+//    					break;
+//    				}
+//    			}
+//    			if(canAdd){
+//    				seperateTypes.add(typeName);
+//    				newList.add(statement.substring(0, statement.indexOf(" depends on")));
+//    				oldList.remove(i);
+//    			}
+//    		}
+//    		this.createUserDefinedTypeStatements = newList;
+//    	}
+//    	
+//    }
+    
+//    private String[] getDependantTypes(String userDefineTypeStatement){
+// 	    	String[] types;
+// 	    	String dependStatement = userDefineTypeStatement.substring(userDefineTypeStatement.indexOf(" depends on")+" depends on".length());
+// 	    	if(dependStatement.split(",").length ==0){
+// 	    		types = new String[1];
+// 	    		types[0] = dependStatement;
+// 	    	}else{
+// 	    		types = dependStatement.split(",");
+// 	    	}
+// 	    	return types;
+// 	    }
+//    
+//    private String getSeperateTypeName(String userDefineTypeStatement){
+//    	String typeName = "";
+//    	int end = 0;
+//    	int start = userDefineTypeStatement.indexOf(" TYPE ",0);
+//    	if(userDefineTypeStatement.contains(" UNDER ")){
+//    		//CREATE TYPE type-name UNDER supertype AS(
+//    		end = userDefineTypeStatement.indexOf(" UNDER ",0);
+//    	}else if(userDefineTypeStatement.contains(" AS(")){
+//    		//CREATE TYPE type-name AS( 
+//    		end = userDefineTypeStatement.indexOf(" AS(",0);  		
+//    	}else{
+//    		//CREATE DISTINCT TYPE distinct-type-name AS source_type
+//    		//CREATE TYPE TYPE1 AS ..
+//    		end = userDefineTypeStatement.indexOf(" AS ",0); 
+//    	}
+//    	if(end != -1)
+//    		typeName = userDefineTypeStatement.substring(start+6,end);
+//    	return typeName;
+//    }
+
+    
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDeltaDdlGenerator.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDeltaDdlGenerator.java
new file mode 100644
index 0000000..d8b26c8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDeltaDdlGenerator.java
@@ -0,0 +1,1354 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.ddl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.ResourceBundle;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.Vector;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExecutableExtension;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.sqm.core.rte.DDLGenerator;
+import org.eclipse.datatools.connectivity.sqm.core.rte.EngineeringOption;
+import org.eclipse.datatools.connectivity.sqm.core.rte.IEngineeringCallBack;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.internal.core.rte.EngineeringOptionCategory;
+import org.eclipse.datatools.connectivity.sqm.internal.core.rte.EngineeringOptionCategoryID;
+import org.eclipse.datatools.enablement.ibm.db2.ddl.DB2DeltaDdlGenerator;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMaterializedQueryTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNickname;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWUserMapping;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWView;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.ManagementType;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Alias;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Index;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2IndexType;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Table;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Trigger;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2UserDefinedFunction;
+import org.eclipse.datatools.enablement.ibm.ddl.CoreDdlScriptVector;
+import org.eclipse.datatools.enablement.ibm.ddl.DdlGenerationUtility;
+import org.eclipse.datatools.enablement.ibm.util.EngineeringOptionID;
+import org.eclipse.datatools.enablement.ibm.util.SimpleColumnDetails;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Role;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.SQLAccessControlPackage;
+import org.eclipse.datatools.modelbase.sql.constraints.CheckConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.constraints.PrimaryKey;
+import org.eclipse.datatools.modelbase.sql.constraints.SQLConstraintsPackage;
+import org.eclipse.datatools.modelbase.sql.constraints.UniqueConstraint;
+import org.eclipse.datatools.modelbase.sql.datatypes.DistinctUserDefinedType;
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataTypesPackage;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.PersistentTable;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.change.FeatureChange;
+import org.eclipse.emf.ecore.change.impl.ChangeDescriptionImpl;
+
+public class LUWDeltaDdlGenerator extends DB2DeltaDdlGenerator implements IExecutableExtension {
+	// FOR COLUMNS
+	protected static final int DATA_TYPE         = 64;
+	protected static final int SCOPE             = 128;
+	protected static final int IDENTITY          = 256;
+	protected static final int COMPRESS          = 512;
+	protected static final int DEFAULT_VALUE     = 1024;
+	protected static final int NULLABLE          = 2048;
+
+	// FOR TABLES
+	protected static final int LOGGED            = 64;
+	protected static final int DATA_CAPTURE      = 128;
+	protected static final int VOLATILE          = 256;
+	protected static final int COMPRESSION       = 512;
+	protected static final int APPEND            = 1024;
+	protected static final int LOCK_SIZE         = 2048;
+	protected static final int RESTRICT          = 4096;
+	protected static final int VALUE_COMPRESSION = 8192;
+	protected static final int PARTITION_KEY     = 16384;
+	// FOR TABLE DATA PRESERVATION
+	protected static final int BACKUP            = 32768;
+	
+	// FOR SCHEMA
+	private static final int SCHEMA_OWNERSHIP 			= 64;
+	
+	// FOR TABLE SPACES
+	private static final int TABLESPACE_CONTAINERS 			= 64;
+	private static final int TABLESPACE_AUTORESIZE 			= 128;
+	private static final int TABLESPACE_BUFFERPOOL 			= 256;
+	private static final int TABLESPACE_INCREASESIZE 		= 512;
+	private static final int TABLESPACE_MAXSIZE 			= 1024;
+	private static final int TABLESPACE_PREFETCHSIZE 		= 2048;
+	private static final int TABLESPACE_OVERHEAD 			= 4096;
+	private static final int TABLESPACE_DROPTABLERECOVERY 	= 8192;
+	private static final int TABLESPACE_XFERRATE 			= 16384;
+	private static final int TABLESPACE_CONTAINER_SIZE = 32768;
+
+
+	protected LUWDdlBuilder builder;
+	protected Map columnMap = new LinkedHashMap();
+	protected String product;
+	protected String version;
+	protected IEngineeringCallBack callback;
+
+	public LUWDeltaDdlGenerator() {
+		builder = new LUWDdlBuilder();
+	}
+
+	protected  void initDPDdlBuilder() {
+		dPDdlBuilder = new LUWDataPreservationDdlBuilder();
+	}
+
+	//@Override
+	protected void setEngineeringCallback(IEngineeringCallBack callback) {
+		this.callback = callback;
+		this.builder.setEngineeringCallBack(callback);
+	}
+
+	public void setInitializationData(IConfigurationElement config, String propertyName, Object data) throws CoreException {
+		this.product = config.getAttribute("product"); //$NON-NLS-1$
+		this.version = config.getAttribute("version"); //$NON-NLS-1$
+		float v = Float.parseFloat(version.substring(1));
+	}
+	
+	public EngineeringOption[] getOptions(){
+        if(this.getEngineeringOption() == null) {
+            ResourceBundle resource = ResourceBundle.getBundle("org.eclipse.datatools.connectivity.sqm.internal.core.rte.fe.GenericDdlGeneration"); //$NON-NLS-1$
+
+            EngineeringOptionCategory general_options =null;
+            EngineeringOptionCategory[] categories = this.getOptionCategories();
+            for (int i = 0; i < categories.length; i++) {
+            	if (categories[i].getId().equals(EngineeringOptionCategoryID.GENERATE_OPTIONS)){
+            		general_options = categories[i];
+            	}
+            }
+            
+            Vector optionVec = new Vector();
+            optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_FULLY_QUALIFIED_NAME,resource.getString("GENERATE_FULLY_QUALIFIED_NAME"), resource.getString("GENERATE_FULLY_QUALIFIED_NAME_DES"),DdlGenerationUtility.getQualifyNamesDefault(),general_options)); //$NON-NLS-1$ //$NON-NLS-2$
+            optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_QUOTED_IDENTIFIER,resource.getString("GENERATE_QUOTED_IDENTIFIER"), resource.getString("GENERATE_QUOTED_IDENTIFIER_DES"),DdlGenerationUtility.getQuoteIdentifiersDefault(),general_options)); //$NON-NLS-1$ //$NON-NLS-2$
+            
+            EngineeringOption[] options = new EngineeringOption[optionVec.size()];
+            optionVec.copyInto(options);
+            this.setEngineeringOption(options);
+        }
+        
+        return this.getEngineeringOption();
+	}
+		
+	//@Override
+	public EngineeringOption[] getDdlGeneratorOptionsForDeltaDdl(
+			DDLGenerator ddlGenerator, SQLObject[] sqlObjectsArg) {
+		SQLObject[] sqlObjects = new SQLObject[sqlObjectsArg.length];
+		for (int i = 0; i < sqlObjectsArg.length; i++) {
+			if (sqlObjectsArg[i] instanceof PrimaryKey) {
+				sqlObjects[i] = ((PrimaryKey)sqlObjectsArg[i]).getBaseTable();
+			}
+			else if (sqlObjectsArg[i] instanceof Column) {
+				sqlObjects[i] = ((Column)sqlObjectsArg[i]).getTable();
+			}
+			else {
+				sqlObjects[i] = sqlObjectsArg[i];
+			}
+		}
+		boolean hasTableSpace = false;
+		for (int i = 0; i < sqlObjects.length; i++) {
+			if (LUWPackage.eINSTANCE.getLUWTableSpace().isSuperTypeOf(sqlObjects[i].eClass())) {
+				hasTableSpace = true;
+				break;			
+			}
+			if (sqlObjects[i] instanceof LUWDatabase) {
+				hasTableSpace = true;
+				break;			
+			}
+		}
+		EngineeringOption[] ddlGenOptions = ddlGenerator.getOptions(sqlObjects);
+    	for (int i = 0; i < ddlGenOptions.length; i++){
+            EngineeringOption option = (EngineeringOption) ddlGenOptions[i];
+            if (option == null) {
+           	 	continue;
+            }
+            if (option.getId().equals(EngineeringOptionID.GENERATE_FULLY_QUALIFIED_NAME)) { 
+                option.setBoolean(DdlGenerationUtility.getQualifyNamesDefault());
+            }
+            else if (option.getId().equals(EngineeringOptionID.GENERATE_QUOTED_IDENTIFIER)) {
+            	option.setBoolean(DdlGenerationUtility.getQuoteIdentifiersDefault());
+            }
+            else if (option.getId().equals(EngineeringOptionID.GENERATE_TABLESPACES)) {
+           	 	option.setBoolean(hasTableSpace);
+            }
+        }
+    	return ddlGenOptions;
+	}
+	
+	@Override
+	protected boolean shouldExcludeElement(EObject element) {
+		if (element instanceof LUWMaterializedQueryTable)
+		{
+		  if (!EngineeringOptionID.generateMQTs(selectedOptions))
+				  return true;
+		} else if (element instanceof DB2Table)
+		{
+			if (((DB2Table) element).getTemporalTable() != null)
+			{
+				if (!EngineeringOptionID.generateHistoryTable( selectedOptions))
+					return true;
+			}
+		} else if (element instanceof DB2Alias)
+		{
+			if (!EngineeringOptionID.generateAliases( selectedOptions ))
+				return true;
+		}  else if (element instanceof LUWDatabase)
+		{
+			if (!EngineeringOptionID.generateDatabase(selectedOptions))
+				return true;
+		}
+		return super.shouldExcludeElement(element);
+	}
+
+	protected int getChangeFlag(EObject element, EObject changed, EStructuralFeature feature, FeatureChange setting) {
+    	if (isChangeAnnotationRelated(element, changed, feature)) return 0;
+		if(element != changed) {
+			if (SQLTablesPackage.eINSTANCE.getColumn().isSuperTypeOf(element.eClass())) {
+				if (SQLDataTypesPackage.eINSTANCE.getPredefinedDataType().isSuperTypeOf(changed.eClass())) {
+					if(canAlter((PredefinedDataType) changed)) 
+						return getColumnDatatypeChangeFlag((Column)element);
+					return MODIFIED;
+				}
+//				if(changed instanceof IdentitySpecifier) {
+//					return IDENTITY;
+//				}
+			}
+			if (SQLTablesPackage.eINSTANCE.getTable().isSuperTypeOf(element.eClass())) {
+				if (LUWPackage.eINSTANCE.getLUWPartitionKey().isSuperTypeOf(changed.eClass())) {
+					return PARTITION_KEY;
+				}
+			}
+	        if (SQLSchemaPackage.eINSTANCE.getSchema().isSuperTypeOf(element.eClass()) && 
+	        		!(SQLSchemaPackage.eINSTANCE.getSQLObject().isSuperTypeOf(changed.eClass()))) {
+	                        	return 0;
+            }
+			if (LUWPackage.eINSTANCE.getLUWTableSpace().isSuperTypeOf(element.eClass())) {
+				if (LUWPackage.eINSTANCE.getLUWDatabaseContainer().isSuperTypeOf(changed.eClass())) {
+					if (!((LUWTableSpace)element).getManagementType().equals(ManagementType.DATABASE_MANAGED_LITERAL))
+						return MODIFIED;
+					if (feature == LUWPackage.eINSTANCE.getLUWDatabaseContainer_SizeInPages() ||
+							feature == LUWPackage.eINSTANCE.getLUWDatabaseContainer_Size() ||
+							feature == LUWPackage.eINSTANCE.getLUWDatabaseContainer_SizeUnits()) {
+						return TABLESPACE_CONTAINER_SIZE;
+					}
+				}
+			}
+			return MODIFIED; 
+		}
+		if(feature == EcorePackage.eINSTANCE.getENamedElement_Name()) return RENAME;
+		if(feature == SQLSchemaPackage.eINSTANCE.getSQLObject_Description()) return COMMENT;
+		if(feature == SQLSchemaPackage.eINSTANCE.getSQLObject_Label()) return LABEL;
+		//(RATLC00398029)if the "partitions" of a LUW partition group is changed, it is
+		//reasonable to think the partition group is modified
+		if (feature == LUWPackage.eINSTANCE.getLUWPartitionGroup_Partitions()) return MODIFIED;
+		if (feature == LUWPackage.eINSTANCE.getLUWBufferPool_PartitionGroup())
+			return MODIFIED;
+		if (feature == LUWPackage.eINSTANCE.getLUWBufferPool_SizeException())
+			return MODIFIED;
+		if (element instanceof LUWTableSpace) {
+			if (feature == LUWPackage.eINSTANCE.getLUWTableSpace_Containers()) {
+				EList oldContainers = (EList)getOldValue(feature, element);
+				EList newContainers = ((LUWTableSpace)element).getContainers();				
+				if (((LUWTableSpace)element).getManagementType().equals(ManagementType.DATABASE_MANAGED_LITERAL) && newContainers != null && oldContainers != null) {
+					return TABLESPACE_CONTAINERS;
+				}
+			}
+			if (feature == LUWPackage.eINSTANCE.getLUWTableSpace_AutoResize()) {
+				if (((LUWTableSpace)element).isAutoResize())
+					return TABLESPACE_AUTORESIZE | TABLESPACE_INCREASESIZE | TABLESPACE_MAXSIZE;
+				return TABLESPACE_AUTORESIZE;
+			}
+			if (feature == LUWPackage.eINSTANCE.getLUWTableSpace_BufferPool()) 
+				return TABLESPACE_BUFFERPOOL;
+			if (feature == LUWPackage.eINSTANCE.getLUWTableSpace_IncreaseSize() ||
+					feature == LUWPackage.eINSTANCE.getLUWTableSpace_IncreasePercent() ||
+					feature == LUWPackage.eINSTANCE.getLUWTableSpace_IncreaseSizeUnit()) 
+				return TABLESPACE_INCREASESIZE;
+			if (feature == LUWPackage.eINSTANCE.getLUWTableSpace_MaximumSize() ||
+					feature == LUWPackage.eINSTANCE.getLUWTableSpace_MaximumSizeUnit()) 
+				return TABLESPACE_MAXSIZE;
+			if (feature == LUWPackage.eINSTANCE.getLUWTableSpace_Overhead()) 
+				return TABLESPACE_OVERHEAD;
+			if (feature == LUWPackage.eINSTANCE.getLUWTableSpace_PreFetchSize()) 
+				return TABLESPACE_PREFETCHSIZE;
+			if (feature == LUWPackage.eINSTANCE.getLUWTableSpace_RecoverDroppedTableOn()) 
+				return TABLESPACE_DROPTABLERECOVERY;
+			if (feature == LUWPackage.eINSTANCE.getLUWTableSpace_TransferRate()) 
+				return TABLESPACE_XFERRATE;
+			return MODIFIED;
+			
+		}
+		if(SQLTablesPackage.eINSTANCE.getColumn().isSuperTypeOf(element.eClass())) {
+			Column column = (Column) element;
+			if(feature == SQLTablesPackage.eINSTANCE.getColumn_DefaultValue()) {
+			return DEFAULT_VALUE;
+			}
+			if(feature == SQLTablesPackage.eINSTANCE.getColumn_Nullable()) {
+				return getColumnNullableChangeFlag(column);
+			}
+//			if(feature == SQLTablesPackage.eINSTANCE.getColumn_IdentitySpecifier()) {
+//			return IDENTITY;
+//		}
+			if(feature == SQLSchemaPackage.eINSTANCE.getTypedElement_ContainedType()) {
+				PredefinedDataType type2 = (PredefinedDataType) column.getContainedType();
+				if(type2 == null) return MODIFIED;
+				PredefinedDataType type1 = (PredefinedDataType) getOldValue(SQLSchemaPackage.eINSTANCE.getTypedElement_ContainedType(), column);
+				if(type1 == null) return MODIFIED;
+				if(canAlter(type1, type2)) 
+					return getColumnDatatypeChangeFlag(column);
+				return MODIFIED;
+			}
+		}
+		if (SQLTablesPackage.eINSTANCE.getTable().isSuperTypeOf(element.eClass())) {
+			if (feature == LUWPackage.eINSTANCE.getLUWStorageTable_PartitionKey())
+				return PARTITION_KEY;
+			if (feature == DB2ModelPackage.eINSTANCE.getDB2Table_DataCapture())
+				return DATA_CAPTURE;
+			if (feature == LUWPackage.eINSTANCE.getLUWStorageTable_RowCompression())
+				return COMPRESSION;
+			if (feature == LUWPackage.eINSTANCE.getLUWStorageTable_ValueCompression())
+				return VALUE_COMPRESSION;
+			if(feature == LUWPackage.eINSTANCE.getLUWTable_Volatile()) 
+				return VOLATILE;
+			int columnsFlag = getColumnsChangeFlag(element, feature);
+			if (columnsFlag != 0) 
+				return columnsFlag;
+		}
+		if (SQLSchemaPackage.eINSTANCE.getSchema().isSuperTypeOf(element.eClass())) {
+			if (feature == SQLSchemaPackage.eINSTANCE.getSchema_Owner() && 
+					isTransferOwnershipSupported())
+				return SCHEMA_OWNERSHIP;
+		}
+		// For issue wsdbu00259503, if it is table, and its dimension changes, mark it as MODIFIED
+		if(changed instanceof DB2Table && feature == SQLTablesPackage.eINSTANCE.getTable_Index()){
+			if(isDimensionsChanged((List)changed.eGet(feature), (List)setting.getValue()))
+				return MODIFIED;			
+		}
+
+		if(feature instanceof EReference && feature.isMany() && ((EReference) feature).getEOpposite() != null) return 0;
+		return MODIFIED;
+	}
+	
+	// For issue wsdbu00259503, compute the dimension modification.
+	private boolean isDimensionsChanged(List curIndexList, List preIndexList){
+		Set curDimensions = new HashSet();
+		Set preDimensions = new HashSet();
+		for(Object e : curIndexList)
+			if(e instanceof DB2Index && 
+					((DB2Index)e).getIndexType() == DB2IndexType.DIMENSION_LITERAL)
+				curDimensions.add(e);
+		for(Object e : preIndexList)
+			if(e instanceof DB2Index && 
+					((DB2Index)e).getIndexType() == DB2IndexType.DIMENSION_LITERAL)
+				preDimensions.add(e);
+		if(curDimensions.size() == preDimensions.size() && curDimensions.containsAll(preDimensions))
+			return false;
+		return true;
+	}
+
+
+	protected boolean isTransferOwnershipSupported() {
+		// Support added in v9
+		return false;
+	}
+
+	protected int getColumnDatatypeChangeFlag(Column column) {
+		return DATA_TYPE;
+	}
+	
+	protected int getColumnNullableChangeFlag(Column column) {
+		return MODIFIED;
+	}
+	
+	protected boolean containsXMLColumn(LUWTable table) {
+		return false;
+	}
+	
+	protected boolean needRecreate(EObject e, int flag) {
+		if (SQLTablesPackage.eINSTANCE.getPersistentTable().isSuperTypeOf(e.eClass()))
+			return (flag & (MODIFIED)) != 0;
+		return (flag & (MODIFIED | RENAME)) != 0;
+	}
+	
+	protected void analyze(Map changeMap) {
+		List columns = new LinkedList();
+		Iterator it = changeMap.keySet().iterator();
+		while(it.hasNext()) {
+			Object e = it.next();
+			if(e instanceof Column) columns.add(e);
+		}
+
+		it = columns.iterator();
+		while(it.hasNext()) {
+			Column column = (Column) it.next();
+			int flag = ((Integer) changeMap.get(column)).intValue();
+			if(flag == DROP) {
+				if (analyzeDropColumnAndContinue(column, changeMap, it)) continue;						
+			}
+			else {
+				Table table = column.getTable();
+				if(LUWPackage.eINSTANCE.getLUWTable().isSuperTypeOf(table.eClass()) && 
+						!(LUWPackage.eINSTANCE.getLUWNickname().isSuperTypeOf(table.eClass()))) {
+					if((flag & (RENAME | MODIFIED)) != 0) {
+						changeMap.remove(column);
+						it.remove();
+						flag = 0;
+						if(changeMap.containsKey(table)) {
+							flag = ((Integer) changeMap.get(table)).intValue();						
+						}
+						flag = flag | MODIFIED;
+						changeMap.put(table, new Integer(flag));
+					}
+				}
+			}
+		}
+		
+		it = columns.iterator();
+		while(it.hasNext()) {
+			Column column = (Column) it.next();
+			if(isAncestorModified(changeMap, column)) {
+				changeMap.remove(column);				
+			}
+			else {
+				int flag = ((Integer) changeMap.get(column)).intValue();
+				changeMap.remove(column);
+				columnMap.put(column, new Integer(flag));
+			}
+		}
+
+		//TODO (jyeh) the super call wipes out alias' comment flag if there was also table change
+		super.analyze(changeMap);
+
+		//analyze dimension indexes
+		it = changeMap.keySet().iterator();
+		List indexes = new LinkedList();
+		while(it.hasNext()) {
+			Object e = it.next();
+			int flag = ((Integer) changeMap.get(e)).intValue();
+			if (e instanceof DB2Index && 
+					((DB2Index)e).getIndexType() == DB2IndexType.DIMENSION_LITERAL && 
+					(flag & (CREATE | DROP)) != 0) {
+				indexes.add(e);
+			}
+		}
+
+		it = indexes.iterator();
+		while(it.hasNext()) {
+			DB2Index index = (DB2Index) it.next();
+			int flag = ((Integer)changeMap.get(index)).intValue();
+			Table table= null;
+			if (flag == DROP) {
+				undo();
+				table = index.getTable();
+				redo();
+			}
+			else {
+				table = index.getTable();	
+			}			
+			changeMap.put(table, new Integer(CREATE | DROP));
+			changeMap.remove(index);
+		}		
+
+		// Data Preservation
+		it = changeMap.keySet().iterator();
+		while(it.hasNext()) {
+			Object e = it.next();
+			if(e instanceof PersistentTable) {
+				int flag = ((Integer) changeMap.get(e)).intValue();
+				if ((flag & (DROP | CREATE)) == (DROP | CREATE)) {
+					flag = flag & ~DROP;
+					flag = flag | BACKUP;
+					changeMap.put(e, new Integer(flag));
+				}
+			}
+		}
+		// End Data Preservation
+
+		removeRedundantColumnChange(changeMap,columnMap);
+	}
+
+	protected void removeRedundantColumnChange(Map changeMap, Map colMap) {
+		int flag;
+	    Iterator it = colMap.keySet().iterator();
+		Table table = null;
+        while (it.hasNext()) {
+        	Column column = (Column)it.next();
+        	flag = ((Integer) colMap.get(column)).intValue();
+        	if (flag == DROP) {
+        		EObject obj = ((ChangeDescriptionImpl) changeDescription).getOldContainer(column);
+        		if (obj != null && 
+        				SQLTablesPackage.eINSTANCE.getTable().isSuperTypeOf(obj.eClass())) {
+        			table = (Table)((ChangeDescriptionImpl) changeDescription).getOldContainer(column);
+        		} else {
+        			table = column.getTable();
+        		}
+        	} else {
+        		table = column.getTable();
+        	}
+        	if (table == null)
+        		table = column.getTable();
+        	if (table != null && 
+        			LUWPackage.eINSTANCE.getLUWTable().isSuperTypeOf(table.eClass()) &&
+        			!(LUWPackage.eINSTANCE.getLUWNickname().isSuperTypeOf(table.eClass()))) {
+        		if(changeMap.containsKey(table)) {
+        			flag = ((Integer) changeMap.get(table)).intValue();
+        			if ((flag & (DROP | BACKUP)) != 0) {
+        				it.remove();
+        			}
+        		}
+        	}
+        }
+	}
+
+	protected boolean isRenameTableSupported() {
+		return true;
+	}
+	
+	protected boolean analyzeDropColumnAndContinue(Column column, Map changeMap, Iterator it) {
+		int flag;
+		Table table = (Table) ((ChangeDescriptionImpl)changeDescription).getOldContainer(column);
+		if (LUWPackage.eINSTANCE.getLUWTable().isSuperTypeOf(table.eClass()) &&
+				!(LUWPackage.eINSTANCE.getLUWNickname().isSuperTypeOf(table.eClass()))) {
+			changeMap.remove(column);
+			it.remove();
+			flag = 0;
+			if(changeMap.containsKey(table)) {
+				flag = ((Integer) changeMap.get(table)).intValue();						
+				if(flag == DROP) return true;
+			}
+			flag = flag | MODIFIED;
+			changeMap.put(table, new Integer(flag));
+			return true;
+		}
+		return false;
+	}
+
+	protected String[] processChangeMap(Map changeMap, IProgressMonitor monitor) {
+//<bgp		String[] olapStatements = null;
+//		String[] olapDropStatements = null;
+//		OlapDeltaDdlBuilder olapDeltaDdlbuilder = getOlapDeltaDdlBuilder(this.product,this.version); 
+//		if (olapDeltaDdlbuilder != null) {
+//			olapStatements = olapDeltaDdlbuilder.getDeltaDdlStatements(changeMap);
+//			this.undo();
+//			olapDropStatements = olapDeltaDdlbuilder.getDeltaDropDdlStatements(changeMap);
+//			this.redo();
+//bgp>		}
+
+        DDLGenerator ddlGenerator = getDdlGeneratorWithDeltaDDLOptions();
+        this.undo();
+        String[] drops = new String[0]; 
+        if (EngineeringOptionID.generateDropStatement(selectedOptions))
+        	drops = getDropStatements(ddlGenerator, changeMap, monitor,callback);
+        String[] backups = getBackupStatements(ddlGenerator, changeMap, monitor);
+        // Collect metadata for DML to transform and move data from backups
+        Map backupTables = getBackupTableMetadata(changeMap);
+        this.redo();
+        if (!backupTables.isEmpty()) dataPreservationRequired  = true;
+        String [] tableAlters = new String[0];
+        if (EngineeringOptionID.generateTables(selectedOptions))
+          tableAlters = getTableAlterStatements(ddlGenerator, changeMap, monitor);
+//        String [] tableAlters = getTableAlterStatements(ddlGenerator, changeMap, columnMap, monitor);
+        String[] renames = getRenameStatements(ddlGenerator, changeMap, monitor);
+        String[] creates = new String[0];
+        if (EngineeringOptionID.generateCreateStatement(selectedOptions))
+          creates = getCreateStatements(ddlGenerator, changeMap, monitor,callback);
+        // Create DML to transform and move data from backups to new tables
+        String[] pops = getPopulateStatements(ddlGenerator, changeMap, backupTables, monitor);
+        
+        String[] dropbackups = getDropBackupStatements(ddlGenerator, changeMap, backupTables, monitor);
+        
+		String[] xferO = getTransferOwnershipStatements(changeMap);
+		
+		String[] ats = new String[0];
+		if (EngineeringOptionID.generateTablespaces(selectedOptions))
+		   ats = getAlterTablespaceStatements(changeMap);
+		String[] ac = new String[0];
+		if (EngineeringOptionID.generateTables(selectedOptions))
+		  ac = getAlterColumnStatements(columnMap);
+        this.changeDescription = null;
+        
+        //(jyeh) need to move columns which have comment changes from columnMap to changeMap so that
+        //getCommentOnStatements can generate DDL for that. (RATLC01146091)
+        try {
+            Iterator it = columnMap.keySet().iterator();
+    		while(it.hasNext()) {
+    			Object e = it.next();
+    			int flag = ((Integer) columnMap.get(e)).intValue();
+    			if (e instanceof Column && ((flag & COMMENT) != 0)) {
+    				changeMap.put(e, new Integer(COMMENT));
+    			}
+    		}        	
+        }
+		finally {
+			columnMap.clear();	
+		}
+		
+		String[] comments = new String[0];
+		if (EngineeringOptionID.generateCommentStatement(selectedOptions))
+		  comments = getCommentOnStatements(changeMap);
+		String[] script = merge(merge(merge(merge(merge(merge(merge(merge(merge(merge(drops, backups), renames), ac), tableAlters), ats), xferO), creates), pops), dropbackups), comments);
+		
+//<bgp		if (olapStatements != null) {
+//			script = merge(script,olapStatements);
+//		}
+//		if (olapDropStatements != null) {
+//			script = merge(script,olapDropStatements);
+//bgp>		}
+		
+		return script;
+	}
+
+	private String[] getTransferOwnershipStatements(Map changeMap) {
+		boolean quoteIdentifiers = EngineeringOptionID.generateQuotedIdentifiers(this.getSelectedOptions());
+		boolean qualifyNames = EngineeringOptionID.generateFullyQualifiedNames(this.getSelectedOptions());
+    	
+        Vector stmts = new Vector();        
+        Iterator it = changeMap.keySet().iterator();        
+        while(it.hasNext()) {
+        	EObject changed = (EObject)it.next();
+        	if (changed instanceof Schema && EngineeringOptionID.generateSchemas(selectedOptions)) {
+        		int flag = ((Integer) changeMap.get(changed)).intValue();
+        		if ((flag & SCHEMA_OWNERSHIP) == 0) continue;
+        		String statement = builder.transferSchemaOwnership((Schema)changed,quoteIdentifiers);
+                if(statement != null) {
+                    stmts.add(statement);
+                }        			        			        				
+        	}
+        }
+
+        Vector sorter = new CoreDdlScriptVector();
+        sorter.addAll(stmts);
+        String[] s = new String[sorter.size()];
+        sorter.copyInto(s);
+        return s;
+	}
+
+	private String[] getAlterTablespaceStatements(Map changeMap) {
+		boolean quoteIdentifiers = EngineeringOptionID.generateQuotedIdentifiers(this.getSelectedOptions());
+		boolean qualifyNames = EngineeringOptionID.generateFullyQualifiedNames(this.getSelectedOptions());
+    	
+        Vector alts = new Vector();        
+        Iterator it = changeMap.keySet().iterator();        
+        while(it.hasNext()) {
+        	EObject changed = (EObject)it.next();
+        	if (changed instanceof LUWTableSpace) {
+        		int flag = ((Integer) changeMap.get(changed)).intValue();
+        		if ((flag & ~(RENAME  | DROP | CREATE)) == 0) continue;
+        		String statement = builder.alterTablespaceProlog((LUWTableSpace)changed,quoteIdentifiers,qualifyNames);
+        		if ((flag & TABLESPACE_CONTAINERS) != 0) {
+        			LUWTableSpace tablespace = (LUWTableSpace)changed;
+        			EStructuralFeature feature = LUWPackage.eINSTANCE.getLUWTableSpace_Containers();
+    				EList oldContainers = (EList)getOldValue(feature, tablespace);
+    				EList newContainers = tablespace.getContainers();
+
+    				statement += builder.alterTablespaceContainers((LUWTableSpace)changed, newContainers, oldContainers, quoteIdentifiers, qualifyNames);
+        		}
+        		if ((flag & TABLESPACE_CONTAINER_SIZE) != 0) {
+        			LUWTableSpace tablespace = (LUWTableSpace)changed;
+        			EStructuralFeature feature = LUWPackage.eINSTANCE.getLUWTableSpace_Containers();
+    				EList oldContainers = (EList)getOldValue(feature, tablespace);
+    				EList newContainers = tablespace.getContainers();
+
+    				statement += builder.alterTablespaceContainersSize((LUWTableSpace)changed, newContainers, oldContainers, quoteIdentifiers, qualifyNames,this);
+        		}
+        		if ((flag & TABLESPACE_PREFETCHSIZE) != 0) {
+    				statement += builder.tablespacePrefetchSizeClause((LUWTableSpace)changed);
+        		}
+        		if ((flag & TABLESPACE_BUFFERPOOL) != 0) {
+    				statement += builder.tablespaceBufferPoolClause((LUWTableSpace)changed,quoteIdentifiers);
+        		}
+        		if ((flag & TABLESPACE_OVERHEAD) != 0) {
+    				statement += builder.tablespaceOverheadClause((LUWTableSpace)changed);
+        		}
+        		if ((flag & TABLESPACE_XFERRATE) != 0) {
+    				statement += builder.tablespaceXferRateClause((LUWTableSpace)changed);
+        		}
+        		if ((flag & TABLESPACE_DROPTABLERECOVERY) != 0) {
+    				statement += builder.tablespaceDroppedTableRecoveryClause((LUWTableSpace)changed);
+        		}
+        		if ((flag & TABLESPACE_AUTORESIZE) != 0) {
+    				statement += builder.tablespaceAutoResizeClause((LUWTableSpace)changed);
+        		}
+        		if ((flag & TABLESPACE_INCREASESIZE) != 0) {
+    				statement += builder.tablespaceIncreaseSizeClause((LUWTableSpace)changed);
+        		}
+        		if ((flag & TABLESPACE_MAXSIZE) != 0) {
+    				statement += builder.tablespaceMaxSizeClause((LUWTableSpace)changed);
+        		}
+                if(statement != null) {
+                    alts.add(statement);
+                }        			        			        				
+        	}
+        }
+
+        String[] s = new String[alts.size()];
+        alts.copyInto(s);
+        return s;
+	}
+	
+	//@Override
+	protected String[] getDropStatements(DDLGenerator gen, Map changeMap,
+			IProgressMonitor monitor, IEngineeringCallBack callback) {
+		Iterator it = changeMap.keySet().iterator();
+		while(it.hasNext()) {
+			EObject key = (EObject) it.next();
+			int flag = ((Integer) changeMap.get(key)).intValue();
+			if((flag & (DROP)) != 0) {
+				if (((flag & (CREATE)) != 0) && 
+						LUWPackage.eINSTANCE.getLUWTableSpace().isSuperTypeOf(key.eClass())) 
+					setDestructive(true);
+			}
+		}
+
+		return super.getDropStatements(gen, changeMap, monitor, callback);
+	}
+
+	protected final String[] getBackupStatements(DDLGenerator gen, Map changeMap, IProgressMonitor monitor) {
+		if (!(gen instanceof LUWDdlGenerator)) return new String[0];
+		// DDLGenerator generator = this.getDDLGenerator();
+		Vector elements = new Vector();
+		Iterator it = changeMap.keySet().iterator();
+		while(it.hasNext()) {
+			EObject key = (EObject) it.next();
+			int flag = ((Integer) changeMap.get(key)).intValue();
+			if((flag & (BACKUP)) != 0) {
+				elements.add(key);
+			}
+		}
+		if(elements.size() > 0) {
+			SQLObject[] d = new SQLObject[elements.size()];
+			elements.copyInto(d);
+			// generator.getOptions(d);
+			return backupTableStatements(d,EngineeringOptionID.generateQuotedIdentifiers(this.getSelectedOptions()), EngineeringOptionID.generateFullyQualifiedNames(this.getSelectedOptions()), monitor, 100);
+		}
+		else {
+			return new String[0];
+		}
+	}
+	
+	protected final String[] getRenameStatements(DDLGenerator gen, Map changeMap, IProgressMonitor monitor) {
+		if (!(gen instanceof LUWDdlGenerator)) return new String[0];
+		// DDLGenerator generator = this.getDDLGenerator();
+		Vector elements = new Vector();
+		Iterator it = changeMap.keySet().iterator();
+		while(it.hasNext()) {
+			EObject key = (EObject) it.next();
+			int flag = ((Integer) changeMap.get(key)).intValue();
+			if(((flag & RENAME) != 0) &&
+					((flag & DROP) == 0) && !shouldExcludeElement(key)) {
+				elements.add(key);
+			}
+		}
+		if(elements.size() > 0) {
+			SQLObject[] d = new SQLObject[elements.size()];
+			elements.copyInto(d);
+			// generator.getOptions(d);
+			String[] renames = renameTableStatements(d,EngineeringOptionID.generateQuotedIdentifiers(this.getSelectedOptions()), EngineeringOptionID.generateFullyQualifiedNames(this.getSelectedOptions()), monitor, 100);
+			return merge(renames,renameTableSpaceStatements(d,EngineeringOptionID.generateQuotedIdentifiers(this.getSelectedOptions()), EngineeringOptionID.generateFullyQualifiedNames(this.getSelectedOptions()), monitor, 100));
+		}
+		else {
+			return new String[0];
+		}
+	}
+	
+	protected Map getBackupTableMetadata(Map changeMap) {
+		Map ret = new HashMap();
+		Iterator it = changeMap.keySet().iterator();
+		while(it.hasNext()) {
+			EObject key = (EObject) it.next();
+			if (!(SQLTablesPackage.eINSTANCE.getPersistentTable().isSuperTypeOf(key.eClass()))) continue;
+			int flag = ((Integer) changeMap.get(key)).intValue();
+			if((flag & (BACKUP)) != 0) {
+				Map columnMap = new HashMap();
+				Iterator it1 = ((Table)key).getColumns().iterator();
+				while (it1.hasNext()) {
+					Column col = (Column)it1.next();
+					SimpleColumnDetails details = new SimpleColumnDetails(col);
+					columnMap.put(col, details);
+				}
+				ret.put(key,columnMap);
+			}
+		}
+		return ret;
+	}
+	
+	protected final String[] getPopulateStatements(DDLGenerator gen, Map changeMap, Map backupMetadata, IProgressMonitor monitor) {
+		if (!(gen instanceof LUWDdlGenerator)) return new String[0];
+//		LUWDdlGenerator myGen = (LUWDdlGenerator)gen;
+		Vector newTables = new Vector();
+		Vector oldTableNames = new Vector();
+		Vector oldTableColumns = new Vector();
+		Iterator it = changeMap.keySet().iterator();
+		while(it.hasNext()) {
+			EObject key = (EObject) it.next();
+			if (!(SQLTablesPackage.eINSTANCE.getPersistentTable().isSuperTypeOf(key.eClass()))) continue;
+			String oldTableName = (String)getOldValue(key.eClass().getEStructuralFeature("name"), key);
+			int flag = ((Integer) changeMap.get(key)).intValue();
+			if((flag & (BACKUP)) != 0) {
+				boolean canPopulate = true;
+				Map oldColumns = (Map)backupMetadata.get(key);
+// Remove this test, since DB2 does not require an explicit default value for NOT NULL columns
+				// Ensure that every column in the new table has a source in the backup
+//				Iterator it1 = ((Table)key).getColumns().iterator();
+//				while (it1.hasNext()) {
+//					Column newCol = (Column)it1.next();
+//					if (!oldColumns.containsKey(newCol)
+//							&& (newCol.getIdentitySpecifier() == null)
+//							&& (newCol.getGenerateExpression() == null)
+//							&& (newCol.getDefaultValue() == null)
+//							&& (!newCol.isNullable())) {
+//						canPopulate = false;
+//						break;
+//					}
+//				}
+				if (canPopulate) {
+					newTables.add(key);
+					oldTableNames.add(oldTableName);
+					oldTableColumns.add(oldColumns);
+				}
+			}
+		}
+		if(newTables.size() > 0) {
+			Table[] newTableArray = new Table[newTables.size()];
+			newTables.copyInto(newTableArray);
+			
+			String[] oldTableNameArray = new String[oldTableNames.size()];
+			oldTableNames.copyInto(oldTableNameArray);
+			
+			Map[] oldTableColumnsArray = new Map[oldTableColumns.size()];
+			oldTableColumns.copyInto(oldTableColumnsArray);
+			return populateFromBackupTableStatements(newTableArray,oldTableNameArray,oldTableColumnsArray,EngineeringOptionID.generateQuotedIdentifiers(this.getSelectedOptions()), EngineeringOptionID.generateFullyQualifiedNames(this.getSelectedOptions()), monitor, 100);
+		}
+		else {
+			return new String[0];
+		}
+	}
+	
+	protected String[] backupTableStatements(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor, int task) {
+        LUWDdlScript script = new LUWDdlScript();
+        LUWDataPreservationDdlBuilder dpBuilder = (LUWDataPreservationDdlBuilder)getDPDdlBuilder();
+        Iterator it = DdlGenerationUtility.getAllContainedDisplayableElementSet(elements).iterator();
+        while(it.hasNext()) {
+            Object o = it.next();
+            if(o instanceof DB2Table) {
+                String statement = dpBuilder.renameTableToBackup((DB2Table) o, quoteIdentifiers, qualifyNames);
+                if(statement != null) {
+                	script.addBackupTableStatement(dpBuilder.getRenameComment());
+                	script.addBackupTableStatement(statement);
+                }
+            }
+        }
+        return script.getStatements();
+    }
+
+	protected String[] renameTableStatements(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor, int task) {
+        LUWDdlScript script = new LUWDdlScript();
+        Iterator it = DdlGenerationUtility.getAllContainedDisplayableElementSet(elements).iterator();
+        while(it.hasNext()) {
+            Object o = it.next();
+            if(o instanceof DB2Table) {
+    			Object oldName = getOldValue(EcorePackage.eINSTANCE.getENamedElement_Name(),(EObject)o);
+                String statement = builder.renameTable((DB2Table) o, (String)oldName, quoteIdentifiers, qualifyNames);
+                if(statement != null) {
+                	script.addRenameTableStatement(statement);
+                }
+            }
+        }
+        return script.getStatements();
+    }
+
+	protected String[] renameTableSpaceStatements(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor, int task) {
+        LUWDdlScript script = new LUWDdlScript();
+        Iterator it = DdlGenerationUtility.getAllContainedDisplayableElementSet(elements).iterator();
+        while(it.hasNext()) {
+            Object o = it.next();
+            if(o instanceof LUWTableSpace) {
+    			Object oldName = getOldValue(EcorePackage.eINSTANCE.getENamedElement_Name(),(EObject)o);
+                String statement = builder.alterTablespaceRename((LUWTableSpace)o,(String)oldName,quoteIdentifiers,qualifyNames);
+                if(statement != null) {
+                 	script.addRenameTableStatement(statement);
+        		}
+            }
+        }
+        return script.getStatements();
+    }
+
+    public String[] populateFromBackupTableStatements(Table[] tables, String[] oldTableNames, Map[] oldColumnMaps, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor, int task) {
+        LUWDdlScript script = new LUWDdlScript();
+        LUWDataPreservationDdlBuilder dpBuilder = (LUWDataPreservationDdlBuilder)getDPDdlBuilder();
+        String statement;
+        for (int i=0;i<tables.length;i++) {
+        	ArrayList genColumns = dpBuilder.getAlwaysGeneratedColumns(tables[i]);
+        	Iterator it = genColumns.iterator();
+        	while (it.hasNext()) {
+        		Column genColumn = (Column)it.next();
+        		// If the gen'd always column is new, we don't need to suspend and re-enable it
+        		if (oldColumnMaps[i].get(genColumn) == null) {
+        			it.remove();
+        			continue;
+        		}
+       			script.addPopulateTableStatement(dpBuilder.getSuspendGenerateAlwaysStatement(tables[i],genColumn,quoteIdentifiers,qualifyNames));
+        	}
+            statement = dpBuilder.populateTableFromBackup(tables[i], oldTableNames[i], oldColumnMaps[i], quoteIdentifiers, qualifyNames);
+            if(statement != null) {
+            	script.addPopulateTableStatement(dpBuilder.getPopulateComment());
+            	script.addPopulateTableStatement(statement);
+            }
+        	it = genColumns.iterator();
+        	while (it.hasNext()) {
+        		Column genColumn = (Column)it.next();
+        		if (genColumn.getIdentitySpecifier() != null) {
+        			script.addPopulateTableStatement(dpBuilder.getRestartIdentityComment());
+        			script.addPopulateTableStatement(dpBuilder.getRestartIdentityStatement(tables[i],genColumn,quoteIdentifiers,qualifyNames));
+        		}
+        		script.addPopulateTableStatement(dpBuilder.getSetGenerateAlwaysStatement(tables[i],genColumn,quoteIdentifiers,qualifyNames));
+        	}
+        }
+        return script.getStatements();
+    }
+
+	protected final String[] getDropBackupStatements(DDLGenerator gen, Map changeMap, Map backupMetadata, IProgressMonitor monitor) {
+		if (!(gen instanceof LUWDdlGenerator)) return new String[0];
+		// DDLGenerator generator = this.getDDLGenerator();
+		Vector elements = new Vector();
+		Iterator it = changeMap.keySet().iterator();
+		while(it.hasNext()) {
+			EObject key = (EObject) it.next();
+			int flag = ((Integer) changeMap.get(key)).intValue();
+			if((flag & (BACKUP)) != 0) {
+				elements.add(key);
+			}
+		}
+		if(elements.size() > 0) {
+			SQLObject[] d = new SQLObject[elements.size()];
+			elements.copyInto(d);
+			//could call getDdlGeneratorOptionsForDeltaDdl(generator, d); if the options needs to be customized
+			// generator.getOptions(d);
+			return dropBackupTableStatements(d,EngineeringOptionID.generateQuotedIdentifiers(this.getSelectedOptions()), EngineeringOptionID.generateFullyQualifiedNames(this.getSelectedOptions()), monitor, 100);
+		}
+		else {
+			return new String[0];
+		}	
+	}
+	
+	protected String[] dropBackupTableStatements(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor, int task) {
+        LUWDdlScript script = new LUWDdlScript();
+        LUWDataPreservationDdlBuilder dpBuilder = (LUWDataPreservationDdlBuilder)getDPDdlBuilder();
+        Iterator it = DdlGenerationUtility.getAllContainedDisplayableElementSet(elements).iterator();
+        while(it.hasNext()) {
+            Object o = it.next();
+            if(o instanceof DB2Table) {
+            	//Need to use the old table name as the name may have been changed
+            	Schema oldSchema = (Schema)getOldValue(((DB2Table)o).eClass().getEStructuralFeature("schema"), (DB2Table)o);
+            	String oldSchemaName = oldSchema != null ? oldSchema.getName() : "";
+            	String oldTableName = (String)getOldValue(((DB2Table)o).eClass().getEStructuralFeature("name"), (DB2Table)o);
+                String statement = dpBuilder.dropBackupTable(oldSchemaName, oldTableName, quoteIdentifiers, qualifyNames);
+                if(statement != null) {
+                	script.addDropBackupTableStatement(dpBuilder.getDropBackupComment());
+                	script.addDropBackupTableStatement(statement);
+                }
+            }
+        }
+        return script.getStatements();		
+	}
+	
+    protected String[] getTableAlterStatements(DDLGenerator gen, Map changeMap, IProgressMonitor monitor) {
+		boolean quoteIdentifiers = EngineeringOptionID.generateQuotedIdentifiers(this.getSelectedOptions());
+		boolean qualifyNames = EngineeringOptionID.generateFullyQualifiedNames(this.getSelectedOptions());
+
+		Vector alts = new Vector();
+		Iterator it = changeMap.keySet().iterator();
+		while(it.hasNext()) {
+			Object obj = it.next();
+			if (!(obj instanceof Table)) continue;
+			Table table = (Table)obj;
+			int flag = ((Integer) changeMap.get(table)).intValue();
+			if(flag == PARTITION_KEY) {
+				String statement = builder.alterTableAlterPartitionKey((LUWStorageTable)table, quoteIdentifiers, qualifyNames);
+				if(statement != null) alts.add(statement);
+			}
+			//To generate alter statement, the BACKUP flag should not have been set
+			if((flag & BACKUP) == 0 
+					&& (flag & (DATA_CAPTURE | COMPRESSION | VALUE_COMPRESSION | VOLATILE)) != 0) {
+				String statement = builder.alterTableAlterProperties(table, flag, quoteIdentifiers, qualifyNames);
+				if(statement != null) alts.add(statement);
+			}
+			// TODO other changes
+		}
+   	
+        Vector sorter = new CoreDdlScriptVector();
+        sorter.addAll(alts);
+        String[] s = new String[sorter.size()];
+        sorter.copyInto(s);
+        return s;
+    }
+    
+	protected String[] getAlterColumnStatements(Map changeMap) {
+		boolean quoteIdentifiers = EngineeringOptionID.generateQuotedIdentifiers(this.getSelectedOptions());
+		boolean qualifyNames = EngineeringOptionID.generateFullyQualifiedNames(this.getSelectedOptions());
+		Map<String,Vector<String>> statementsByTable = new TreeMap<String,Vector<String>>();
+		Map<Table,Integer> reorgMap = new HashMap<Table,Integer>();
+
+//		Vector alts = new Vector();
+		Iterator it = changeMap.keySet().iterator();
+		while(it.hasNext()) {
+			Column column = (Column) it.next();
+			int flag = ((Integer) changeMap.get(column)).intValue();
+			if(flag == CREATE && EngineeringOptionID.generateCreateStatement(selectedOptions)) {				
+				if (((LUWColumn)column).getGenerateExpression() != null) {
+					String statement1 = builder.setIntegrityForTableBeforeAlter(column, quoteIdentifiers, qualifyNames);
+					if (statement1 != null) 
+						addStatementToTableSortedMap(statementsByTable,column,statement1,false);
+				}
+				String statement2 = builder.alterTableAddColumn(column, quoteIdentifiers, qualifyNames);
+				if (statement2 != null) 
+					addStatementToTableSortedMap(statementsByTable,column,statement2,false);
+				if (((LUWColumn)column).getGenerateExpression() != null) {
+					String statement3 = builder.setIntegrityForTableAfterAlter(column, quoteIdentifiers, qualifyNames);
+					if (statement3 != null) 
+						addStatementToTableSortedMap(statementsByTable,column,statement3,false);
+				}
+			}
+			else if (flag == DROP && EngineeringOptionID.generateDropStatement(selectedOptions)) {
+				String statement = builder.alterTableDropColumn(column, quoteIdentifiers, qualifyNames, this);
+				if(statement != null) {
+					addStatementToTableSortedMap(statementsByTable,column,statement,true);
+					Table table = getOldContainer(column);
+					if (table != null) {
+						statement = reorgIfRequired(reorgMap,table,quoteIdentifiers,qualifyNames);
+						if (statement != null) 
+							addStatementToTableSortedMap(statementsByTable,column,statement,true);
+					}
+				}
+			}
+			else {
+				if((flag & DATA_TYPE) != 0) {
+					String statement = builder.alterTableAlterColumnDataType(column, quoteIdentifiers, qualifyNames);
+					if(statement != null) {
+						addStatementToTableSortedMap(statementsByTable,column,statement,false);
+						Table table = column.getTable();
+						if (table != null) {
+							statement = reorgIfRequired(reorgMap,table,quoteIdentifiers,qualifyNames);
+							if(statement != null)
+								addStatementToTableSortedMap(statementsByTable,column,statement,false);
+						}
+					}
+				}
+				if((flag & DEFAULT_VALUE) != 0) {
+					String statement = builder.alterTableAlterColumnDefaultValue(column, quoteIdentifiers, qualifyNames);
+					if(statement != null)
+						addStatementToTableSortedMap(statementsByTable,column,statement,false);
+				}
+				if((flag & NULLABLE) != 0) {
+					String statement = builder.alterTableAlterColumnNullable(column, quoteIdentifiers, qualifyNames);
+					if(statement != null) {
+						addStatementToTableSortedMap(statementsByTable,column,statement,false);
+						Table table = column.getTable();
+						if (table != null) {
+							statement = reorgIfRequired(reorgMap,table,quoteIdentifiers,qualifyNames);
+							if(statement != null)
+								addStatementToTableSortedMap(statementsByTable,column,statement,false);
+						}
+					}
+				}
+				// TODO other changes
+			}
+		}
+		// Address any outstanding reorg requirements
+		Set tablesToReorg = reorgMap.keySet();
+		Iterator iter = tablesToReorg.iterator();
+		while (iter.hasNext()) {
+			Table table = (Table)iter.next();
+    		String statement = builder.reorgTable(table, quoteIdentifiers, qualifyNames);
+    		if (statement != null) 
+    			addStatementToTableSortedMap(statementsByTable,table,statement);
+
+		}
+		reorgMap.clear();
+//        Remove sorting to avoid problem with > 3 ALTERs without a REORG	   	
+//        Vector sorter = new CoreDdlScriptVector();
+//        sorter.addAll(alts);
+//        String[] s = new String[sorter.size()];
+//        sorter.copyInto(s);
+//        return s;
+		
+//        Try to sort by table		
+		Vector alts = new Vector();
+		Iterator iterator = statementsByTable.keySet().iterator();
+		while (iterator.hasNext()) {
+			Vector stmts = statementsByTable.get((String)iterator.next());
+			alts.addAll(stmts);
+			stmts.clear();
+		}
+		statementsByTable.clear();
+        String[] s = new String[alts.size()];
+        alts.copyInto(s);
+        return s;
+	}
+
+	protected void addStatementToTableSortedMap(
+			Map<String,Vector<String>> statementsByTable,Column column,
+			String statement,boolean getOldTable) {
+		if(statement != null) {
+			Table table = null;
+			if (getOldTable)
+				table = (Table)((ChangeDescriptionImpl) changeDescription).getOldContainer(column);
+			if (table == null)
+				table = column.getTable();
+			addStatementToTableSortedMap(statementsByTable,table,statement);
+		}
+	}
+	
+	protected void addStatementToTableSortedMap(
+			Map<String,Vector<String>> statementsByTable,Table table,
+			String statement) {
+		String schemaName;
+		Schema schema = table.getSchema();
+		if (schema == null)
+			schemaName = "";
+		else 
+			schemaName = table.getSchema().getName();
+		String tableName = schemaName + "." + table.getName();
+		if(statement != null) {
+			if (!statementsByTable.containsKey(tableName)) {
+				statementsByTable.put(tableName,new Vector<String>());
+			}
+			Vector<String> stmts = statementsByTable.get(tableName);
+			stmts.add(statement);
+			statementsByTable.put(tableName,stmts);
+		}
+	}
+	
+	private String reorgIfRequired(Map<Table, Integer> reorgMap, Table table,
+			boolean quoteIdentifiers, boolean qualifyNames) {
+		int cnt = 1;
+        if (reorgMap.containsKey(table)) {
+        	cnt = reorgMap.get(table);
+        	if (++cnt >= 3) {
+        		reorgMap.remove(table);
+        		return builder.reorgTable(table, quoteIdentifiers, qualifyNames);
+        	}
+        }
+    	reorgMap.put(table,cnt);
+    	return null;
+	}
+
+	protected String[] getCommentOnStatements(Map changeMap) {
+		boolean quoteIdentifiers = EngineeringOptionID.generateQuotedIdentifiers(this.getSelectedOptions());
+		boolean qualifyNames = EngineeringOptionID.generateFullyQualifiedNames(this.getSelectedOptions());
+
+		Vector comments = new Vector();
+		Iterator it = changeMap.keySet().iterator();
+		while(it.hasNext()) {
+			EObject o = (EObject) it.next();
+			int flag = ((Integer) changeMap.get(o)).intValue();
+			if ((!shouldExcludeElement(o)) && (((flag & (COMMENT | CREATE)) != 0) ||
+			        (SQLSchemaPackage.eINSTANCE.getSchema().isSuperTypeOf(o.eClass()) && 
+			        		((flag & RENAME) != 0)))) {
+				String statement = null;
+	            if(LUWPackage.eINSTANCE.getLUWNickname().isSuperTypeOf(o.eClass())) {
+	                statement = builder.commentOn((LUWNickname) o, quoteIdentifiers, qualifyNames);
+	            }
+                else if(LUWPackage.eINSTANCE.getLUWServer().isSuperTypeOf(o.eClass())) {
+                    statement = builder.commentOn((LUWServer) o, quoteIdentifiers, qualifyNames);
+                }               
+                else if(LUWPackage.eINSTANCE.getLUWWrapper().isSuperTypeOf(o.eClass())) {
+                    statement = builder.commentOn((LUWWrapper)o, quoteIdentifiers, qualifyNames);
+                }
+                else if(LUWPackage.eINSTANCE.getLUWUserMapping().isSuperTypeOf(o.eClass())) {
+                    statement = builder.commentOn((LUWUserMapping)o, quoteIdentifiers, qualifyNames);
+                }                               
+//	            else if(o instanceof LUWCatalogFederatedServer) {
+//	                statement = builder.commentOn((LUWCatalogFederatedServer) o, true, true);
+//	            }
+	            else if(LUWPackage.eINSTANCE.getLUWMaterializedQueryTable().isSuperTypeOf(o.eClass())) {
+	                statement = builder.commentOn((LUWMaterializedQueryTable) o, quoteIdentifiers, qualifyNames);
+	            }
+	            else if(LUWPackage.eINSTANCE.getLUWTable().isSuperTypeOf(o.eClass())) {
+	                statement = builder.commentOn((LUWTable) o, quoteIdentifiers, qualifyNames);
+	            }
+	            else if(LUWPackage.eINSTANCE.getLUWTableSpace().isSuperTypeOf(o.eClass())) {
+	                statement = builder.commentOn((LUWTableSpace) o, quoteIdentifiers);
+	            }
+	            else if(LUWPackage.eINSTANCE.getLUWView().isSuperTypeOf(o.eClass())) {
+	                statement = builder.commentOn((LUWView) o, quoteIdentifiers, qualifyNames);
+	            }
+	            else if(DB2ModelPackage.eINSTANCE.getDB2Alias().isSuperTypeOf(o.eClass())) {
+	                statement = builder.commentOn((DB2Alias) o, quoteIdentifiers, qualifyNames);
+	            }
+	            else if(DB2ModelPackage.eINSTANCE.getDB2Procedure().isSuperTypeOf(o.eClass())) {
+	                statement = builder.commentOn((DB2Procedure) o, quoteIdentifiers, qualifyNames);
+	            }
+	            else if(DB2ModelPackage.eINSTANCE.getDB2UserDefinedFunction().isSuperTypeOf(o.eClass())) {
+	                statement = builder.commentOn((DB2UserDefinedFunction) o, quoteIdentifiers, qualifyNames);
+	            }
+	            else if(DB2ModelPackage.eINSTANCE.getDB2Trigger().isSuperTypeOf(o.eClass())) {
+	                statement = builder.commentOn((DB2Trigger) o, quoteIdentifiers, qualifyNames);
+	            }
+	            else if(SQLConstraintsPackage.eINSTANCE.getCheckConstraint().isSuperTypeOf(o.eClass())) {
+	                statement = builder.commentOn((CheckConstraint) o, quoteIdentifiers, qualifyNames);
+	            }
+	            else if(SQLConstraintsPackage.eINSTANCE.getUniqueConstraint().isSuperTypeOf(o.eClass())) {
+	                statement = builder.commentOn((UniqueConstraint) o, quoteIdentifiers, qualifyNames);
+	            }
+	            else if(SQLConstraintsPackage.eINSTANCE.getForeignKey().isSuperTypeOf(o.eClass())) {
+	                statement = builder.commentOn((ForeignKey) o, quoteIdentifiers, qualifyNames);
+	            }
+	            else if(DB2ModelPackage.eINSTANCE.getDB2Index().isSuperTypeOf(o.eClass())) {
+	                statement = builder.commentOn((DB2Index) o, quoteIdentifiers, qualifyNames);
+	            }
+	            else if(SQLDataTypesPackage.eINSTANCE.getDistinctUserDefinedType().isSuperTypeOf(o.eClass())) {
+	                statement = builder.commentOn((DistinctUserDefinedType) o, quoteIdentifiers, qualifyNames);
+	            }
+	            else if(SQLTablesPackage.eINSTANCE.getColumn().isSuperTypeOf(o.eClass())) {
+	                statement = builder.commentOn((Column) o, quoteIdentifiers, qualifyNames);
+	            }
+	            else if (LUWPackage.eINSTANCE.getLUWPartitionGroup().isSuperTypeOf(o.eClass())) {
+	            	statement = builder.commentOn((LUWPartitionGroup)o, quoteIdentifiers);
+	            }
+	            else if (SQLSchemaPackage.eINSTANCE.getSchema().isSuperTypeOf(o.eClass())) {
+	            	statement = builder.commentOn((Schema)o, quoteIdentifiers, qualifyNames);
+	            }
+	            else if (SQLAccessControlPackage.eINSTANCE.getRole().isSuperTypeOf(o.eClass())) {
+	            	statement = builder.commentOn((Role)o, quoteIdentifiers, qualifyNames);
+	            }
+	            else if (LUWPackage.eINSTANCE.getLUWModule().isSuperTypeOf(o.eClass())) {
+	            	statement = builder.commentOn((LUWModule)o, quoteIdentifiers, qualifyNames);
+	            }
+	            if(statement != null) comments.add(statement);
+			}
+		}
+	   	
+        Vector sorter = new CoreDdlScriptVector();
+        sorter.addAll(comments);
+        String[] s = new String[sorter.size()];
+        sorter.copyInto(s);
+        return s;
+	}
+
+	protected boolean canAlter(String type1, String type2, int length1, int length2, int scale1, int scale2) {
+		if(type1.equals("SMALLINT")) { //$NON-NLS-1$
+			if(type2.equals("SMALLINT")) return true; //$NON-NLS-1$
+			if(type2.equals("INTEGER")) return true; //$NON-NLS-1$
+			if(type2.equals("BIGINT")) return true; //$NON-NLS-1$
+			if(type2.equals("FLOAT")) return true; //$NON-NLS-1$
+			if(type2.equals("DOUBLE")) return true; //$NON-NLS-1$
+			if(type2.equals("DECIMAL") && (length2-scale2) > 4) return true; //$NON-NLS-1$
+		}
+		else if(type1.equals("INTEGER")) { //$NON-NLS-1$
+			if(type2.equals("INTEGER")) return true; //$NON-NLS-1$
+			if(type2.equals("BIGINT")) return true; //$NON-NLS-1$
+			if(type2.equals("FLOAT")) return true; //$NON-NLS-1$
+			if(type2.equals("DOUBLE")) return true; //$NON-NLS-1$
+			if(type2.equals("DECIMAL") && (length2-scale2) > 9) return true;			 //$NON-NLS-1$
+		}
+		else if(type1.equals("DECIMAL")) { //$NON-NLS-1$
+			if(type2.equals("SMALLINT") && length1 < 5 && scale1 == 0) return true; //$NON-NLS-1$
+			if(type2.equals("INTEGER") && length1 < 10 && scale1 == 0) return true; //$NON-NLS-1$
+			if(type2.equals("BIGINT") && length1 < 19 && scale1 == 0) return true; //$NON-NLS-1$
+			if(type2.equals("FLOAT") && length1 < 7) return true; //$NON-NLS-1$
+			if(type2.equals("DOUBLE") && length1 < 16) return true; //$NON-NLS-1$
+			if(type2.equals("DECIMAL") && length2 >= length1 && scale2 >= scale1 && (length2-scale2) >= (length1 - scale1)) return true;			 //$NON-NLS-1$
+		}
+		else if(type1.equals("FLOAT")) { //$NON-NLS-1$
+			if(type2.equals("FLOAT")) return true; //$NON-NLS-1$
+			if(type2.equals("DOUBLE")) return true;			 //$NON-NLS-1$
+		}
+		else if(type1.equals("CHAR") || type1.equals("VARCHAR")) { //$NON-NLS-1$ //$NON-NLS-2$
+			if(type2.equals("CHAR") && length2 >= length1) return true; //$NON-NLS-1$
+			if(type2.equals("VARCHAR") && length2 >= length1) return true; //$NON-NLS-1$
+		}
+		else if(type1.equals("GRAPHIC") || type1.equals("VARGRAPHIC")) { //$NON-NLS-1$ //$NON-NLS-2$
+			if(type2.equals("GRAPHIC") && length2 >= length1) return true; //$NON-NLS-1$
+			if(type2.equals("VARGRAPHIC") && length2 >= length1) return true;			 //$NON-NLS-1$
+		}
+ 
+		return false;
+	}
+	
+//<bpg	public static OlapDeltaDdlBuilder getOlapDeltaDdlBuilder(String dbProduct, String dbVersion) {
+//		if (olapDletaDdlBuilder != null) return olapDletaDdlBuilder;
+//
+//		IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+//		IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("org.eclipse.datatools.enablement.core", "olapDdlBuilder"); //$NON-NLS-1$ //$NON-NLS-2$
+//		IExtension[] extensions = extensionPoint.getExtensions();
+//		for(int i=0; i<extensions.length; ++i) {
+//			IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+//			for(int j=0; j<configElements.length; ++j) {
+//				if(configElements[j].getName().equals("delta")) { //$NON-NLS-1$
+//					String product = configElements[j].getAttribute("product"); //$NON-NLS-1$
+//					if(!product.equals(dbProduct)) continue;
+//					try {
+//						olapDletaDdlBuilder = (OlapDeltaDdlBuilder) configElements[j].createExecutableExtension("provider"); //$NON-NLS-1$
+//					}
+//					catch(CoreException e) {
+//					    IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getDefault().getBundle().getSymbolicName(), IStatus.ERROR,
+//					            "The error was detected when creating the olap delta ddl builder for " + product, e); //$NON-NLS-1$
+//						DataToolsPlugin.getDefault().getLog().log(status);
+//					}
+//					break;
+//				}
+//			}
+//		}
+//		return olapDletaDdlBuilder;
+//bgp>	}
+	
+//bgp	protected static OlapDeltaDdlBuilder olapDletaDdlBuilder = null;
+
+	public Object getOldContainerValue(EStructuralFeature feature,
+			LUWDatabaseContainer container) {
+		return getOldValue(feature,container);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDeltaDdlGenerator9.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDeltaDdlGenerator9.java
new file mode 100644
index 0000000..9b91598
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDeltaDdlGenerator9.java
@@ -0,0 +1,116 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.ddl;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable;
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataTypesPackage;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.change.impl.ChangeDescriptionImpl;
+
+public class LUWDeltaDdlGenerator9 extends LUWDeltaDdlGenerator {
+
+	public LUWDeltaDdlGenerator9() {
+		super();
+		builder = new LUWDdlBuilder9();
+	}
+
+	protected boolean isTransferOwnershipSupported() {
+		// Support added in v9
+		return true;
+	}
+
+	protected boolean analyzeDropColumnAndContinue(Column column, Map changeMap, Iterator it) {
+		int flag;
+		Table table = (Table)((ChangeDescriptionImpl) changeDescription).getOldContainer(column);
+		if (table == null) {
+			changeMap.remove(column);
+			it.remove();
+			return true;
+		}
+		if (LUWPackage.eINSTANCE.getLUWTable().isSuperTypeOf(table.eClass()) &&
+				!(LUWPackage.eINSTANCE.getLUWNickname().isSuperTypeOf(table.eClass()))) {
+			if(changeMap.containsKey(table)) {
+				flag = ((Integer) changeMap.get(table)).intValue();
+				if ((flag & (DROP | BACKUP | MODIFIED)) != 0) {
+					changeMap.remove(column);
+					it.remove();
+					return true;
+				}
+			}
+			if (containsXMLColumn((LUWTable)table)) {
+				changeMap.put(table, new Integer(MODIFIED));
+				changeMap.remove(column);
+				it.remove();
+				return true;
+			}
+		}
+		return false;
+	}
+
+	protected int getColumnDatatypeChangeFlag(Column column) {
+		EObject table = column.eContainer();
+		//According to DB2 LUW V9 SQL Reference: 
+		//The column being altered cannot be part of a table containing an XML data type column (SQLSTATE 42997). 
+		//The table cannot have data capture enabled (SQLSTATE 42997).
+		if (table != null && 
+				LUWPackage.eINSTANCE.getLUWTable().isSuperTypeOf(table.eClass()) &&
+				containsXMLColumn((LUWTable)table)) {
+			return MODIFIED;
+		}
+		return DATA_TYPE;
+	}
+	
+	protected int getColumnNullableChangeFlag(Column column) {
+		EObject table = column.eContainer();
+		//According to DB2 LUW V9 SQL Reference: 
+		//The column being altered cannot be part of a table containing an XML data type column (SQLSTATE 42997). 
+		//The table cannot have data capture enabled (SQLSTATE 42997).
+		if (table != null && 
+				LUWPackage.eINSTANCE.getLUWTable().isSuperTypeOf(table.eClass()) &&
+				containsXMLColumn((LUWTable)table)) {
+			return MODIFIED;
+		}
+		return NULLABLE;
+	}
+	
+	/**
+	 * Returns true if the table contains a column of XML data type.
+	 * @param table
+	 * @return
+	 */
+	protected boolean containsXMLColumn(LUWTable table) {
+		for (Iterator iter = table.getColumns().iterator(); iter.hasNext();) {
+			Column column = (Column)iter.next();
+			SQLDataType type = column.getContainedType();
+			if (type != null && 
+					SQLDataTypesPackage.eINSTANCE.getXMLDataType().isSuperTypeOf(type.eClass())) 
+				return true;
+		}
+		List columns = (List)getOldValue(SQLTablesPackage.eINSTANCE.getTable_Columns(), table);
+		for (Iterator iter = columns.iterator(); iter.hasNext();) {
+			Column column = (Column)iter.next();
+			SQLDataType type = column.getContainedType();
+			if (type != null && 
+					SQLDataTypesPackage.eINSTANCE.getXMLDataType().isSuperTypeOf(type.eClass())) 
+				return true;
+		}
+		return false;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDeltaDdlGenerator95.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDeltaDdlGenerator95.java
new file mode 100644
index 0000000..e043892
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDeltaDdlGenerator95.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.ddl;
+
+public class LUWDeltaDdlGenerator95 extends LUWDeltaDdlGenerator9 {
+
+	public LUWDeltaDdlGenerator95() {
+		super();
+		builder = new LUWDdlBuilder95();
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDeltaDdlGenerator97.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDeltaDdlGenerator97.java
new file mode 100644
index 0000000..c49d128
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/ddl/LUWDeltaDdlGenerator97.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.ddl;
+
+public class LUWDeltaDdlGenerator97  extends LUWDeltaDdlGenerator95 {
+
+	public LUWDeltaDdlGenerator97() {
+		super();
+		builder = new LUWDdlBuilder97();
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/ArrayIndexElementType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/ArrayIndexElementType.java
new file mode 100644
index 0000000..11c4153
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/ArrayIndexElementType.java
@@ -0,0 +1,56 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.datatypes.ElementType;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Array Index Element Type</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.ArrayIndexElementType#getLUWArrayDataType <em>LUW Array Data Type</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getArrayIndexElementType()
+ * @model
+ * @generated
+ */
+public interface ArrayIndexElementType extends ElementType {
+	/**
+	 * Returns the value of the '<em><b>LUW Array Data Type</b></em>' container reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWArrayDataType#getArrayIndexElementType <em>Array Index Element Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>LUW Array Data Type</em>' container reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>LUW Array Data Type</em>' container reference.
+	 * @see #setLUWArrayDataType(LUWArrayDataType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getArrayIndexElementType_LUWArrayDataType()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWArrayDataType#getArrayIndexElementType
+	 * @model opposite="arrayIndexElementType" required="true"
+	 * @generated
+	 */
+	LUWArrayDataType getLUWArrayDataType();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.ArrayIndexElementType#getLUWArrayDataType <em>LUW Array Data Type</em>}' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>LUW Array Data Type</em>' container reference.
+	 * @see #getLUWArrayDataType()
+	 * @generated
+	 */
+	void setLUWArrayDataType(LUWArrayDataType value);
+
+} // ArrayIndexElementType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/AverageTableSizeType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/AverageTableSizeType.java
new file mode 100644
index 0000000..ef5efe9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/AverageTableSizeType.java
@@ -0,0 +1,205 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Average Table Size Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getAverageTableSizeType()
+ * @model
+ * @generated
+ */
+public final class AverageTableSizeType extends AbstractEnumerator {
+	/**
+	 * The '<em><b>LESS THAN 50MB</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>LESS THAN 50MB</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #LESS_THAN_50MB_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int LESS_THAN_50MB = 0;
+
+	/**
+	 * The '<em><b>BETWEEN 50MB AND 500MB</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>BETWEEN 50MB AND 500MB</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #BETWEEN_50MB_AND_500MB_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int BETWEEN_50MB_AND_500MB = 1;
+
+	/**
+	 * The '<em><b>BETWEEN 500MB AND 5GB</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>BETWEEN 500MB AND 5GB</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #BETWEEN_500MB_AND_5GB_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int BETWEEN_500MB_AND_5GB = 2;
+
+	/**
+	 * The '<em><b>GREATER THAN 5GB</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>GREATER THAN 5GB</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #GREATER_THAN_5GB_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int GREATER_THAN_5GB = 3;
+
+	/**
+	 * The '<em><b>LESS THAN 50MB</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #LESS_THAN_50MB
+	 * @generated
+	 * @ordered
+	 */
+	public static final AverageTableSizeType LESS_THAN_50MB_LITERAL = new AverageTableSizeType(LESS_THAN_50MB, "LESS_THAN_50MB", "LESS_THAN_50MB"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>BETWEEN 50MB AND 500MB</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #BETWEEN_50MB_AND_500MB
+	 * @generated
+	 * @ordered
+	 */
+	public static final AverageTableSizeType BETWEEN_50MB_AND_500MB_LITERAL = new AverageTableSizeType(BETWEEN_50MB_AND_500MB, "BETWEEN_50MB_AND_500MB", "BETWEEN_50MB_AND_500MB"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>BETWEEN 500MB AND 5GB</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #BETWEEN_500MB_AND_5GB
+	 * @generated
+	 * @ordered
+	 */
+	public static final AverageTableSizeType BETWEEN_500MB_AND_5GB_LITERAL = new AverageTableSizeType(BETWEEN_500MB_AND_5GB, "BETWEEN_500MB_AND_5GB", "BETWEEN_500MB_AND_5GB"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>GREATER THAN 5GB</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #GREATER_THAN_5GB
+	 * @generated
+	 * @ordered
+	 */
+	public static final AverageTableSizeType GREATER_THAN_5GB_LITERAL = new AverageTableSizeType(GREATER_THAN_5GB, "GREATER_THAN_5GB", "GREATER_THAN_5GB"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * An array of all the '<em><b>Average Table Size Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final AverageTableSizeType[] VALUES_ARRAY =
+		new AverageTableSizeType[] {
+			LESS_THAN_50MB_LITERAL,
+			BETWEEN_50MB_AND_500MB_LITERAL,
+			BETWEEN_500MB_AND_5GB_LITERAL,
+			GREATER_THAN_5GB_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Average Table Size Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Average Table Size Type</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static AverageTableSizeType get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			AverageTableSizeType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Average Table Size Type</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static AverageTableSizeType getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			AverageTableSizeType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Average Table Size Type</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static AverageTableSizeType get(int value) {
+		switch (value) {
+			case LESS_THAN_50MB: return LESS_THAN_50MB_LITERAL;
+			case BETWEEN_50MB_AND_500MB: return BETWEEN_50MB_AND_500MB_LITERAL;
+			case BETWEEN_500MB_AND_5GB: return BETWEEN_500MB_AND_5GB_LITERAL;
+			case GREATER_THAN_5GB: return GREATER_THAN_5GB_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private AverageTableSizeType(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //AverageTableSizeType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/BufferPoolType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/BufferPoolType.java
new file mode 100644
index 0000000..6dd298b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/BufferPoolType.java
@@ -0,0 +1,157 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: BufferPoolType.java,v 1.7 2008/02/05 02:01:24 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Buffer Pool Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * DB2 Universal Database SQL Reference Version 8.1 (Vol.1 and 2)
+ * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+ * 
+ * 
+ * <!-- end-model-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getBufferPoolType()
+ * @model
+ * @generated
+ */
+public final class BufferPoolType extends AbstractEnumerator {
+	/**
+	 * The '<em><b>IMMEDIATE</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #IMMEDIATE_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IMMEDIATE = 0;
+
+	/**
+	 * The '<em><b>DEFERRED</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #DEFERRED_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int DEFERRED = 1;
+
+	/**
+	 * The '<em><b>IMMEDIATE</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>IMMEDIATE</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #IMMEDIATE
+	 * @generated
+	 * @ordered
+	 */
+	public static final BufferPoolType IMMEDIATE_LITERAL = new BufferPoolType(IMMEDIATE, "IMMEDIATE", "IMMEDIATE"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>DEFERRED</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>DEFERRED</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #DEFERRED
+	 * @generated
+	 * @ordered
+	 */
+	public static final BufferPoolType DEFERRED_LITERAL = new BufferPoolType(DEFERRED, "DEFERRED", "DEFERRED"); //$NON-NLS-1$
+
+	/**
+	 * An array of all the '<em><b>Buffer Pool Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final BufferPoolType[] VALUES_ARRAY =
+		new BufferPoolType[] {
+			IMMEDIATE_LITERAL,
+			DEFERRED_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Buffer Pool Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Buffer Pool Type</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static BufferPoolType get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			BufferPoolType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Buffer Pool Type</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static BufferPoolType getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			BufferPoolType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Buffer Pool Type</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static BufferPoolType get(int value) {
+		switch (value) {
+			case IMMEDIATE: return IMMEDIATE_LITERAL;
+			case DEFERRED: return DEFERRED_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private BufferPoolType(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //BufferPoolType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/CheckOptionType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/CheckOptionType.java
new file mode 100644
index 0000000..8e242fe
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/CheckOptionType.java
@@ -0,0 +1,178 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: CheckOptionType.java,v 1.7 2008/02/05 02:01:24 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Check Option Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getCheckOptionType()
+ * @model
+ * @generated
+ */
+public final class CheckOptionType extends AbstractEnumerator {
+	/**
+	 * The '<em><b>NONE</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #NONE_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int NONE = 0;
+
+	/**
+	 * The '<em><b>CASCADED</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #CASCADED_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int CASCADED = 1;
+
+	/**
+	 * The '<em><b>LOCAL</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #LOCAL_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int LOCAL = 2;
+
+	/**
+	 * The '<em><b>NONE</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>NONE</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #NONE
+	 * @generated
+	 * @ordered
+	 */
+	public static final CheckOptionType NONE_LITERAL = new CheckOptionType(NONE, "NONE", "NONE"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>CASCADED</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>CASCADED</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #CASCADED
+	 * @generated
+	 * @ordered
+	 */
+	public static final CheckOptionType CASCADED_LITERAL = new CheckOptionType(CASCADED, "CASCADED", "CASCADED"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>LOCAL</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>LOCAL</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #LOCAL
+	 * @generated
+	 * @ordered
+	 */
+	public static final CheckOptionType LOCAL_LITERAL = new CheckOptionType(LOCAL, "LOCAL", "LOCAL"); //$NON-NLS-1$
+
+	/**
+	 * An array of all the '<em><b>Check Option Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final CheckOptionType[] VALUES_ARRAY =
+		new CheckOptionType[] {
+			NONE_LITERAL,
+			CASCADED_LITERAL,
+			LOCAL_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Check Option Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Check Option Type</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static CheckOptionType get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			CheckOptionType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Check Option Type</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static CheckOptionType getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			CheckOptionType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Check Option Type</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static CheckOptionType get(int value) {
+		switch (value) {
+			case NONE: return NONE_LITERAL;
+			case CASCADED: return CASCADED_LITERAL;
+			case LOCAL: return LOCAL_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private CheckOptionType(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //CheckOptionType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/CursorBlockType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/CursorBlockType.java
new file mode 100644
index 0000000..3feecde
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/CursorBlockType.java
@@ -0,0 +1,178 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: CursorBlockType.java,v 1.1 2009/02/23 22:15:32 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Cursor Block Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getCursorBlockType()
+ * @model
+ * @generated
+ */
+public final class CursorBlockType extends AbstractEnumerator {
+	/**
+	 * The '<em><b>BLOCK UNAMBIGUOUS CURSORS</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>BLOCK UNAMBIGUOUS CURSORS</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #BLOCK_UNAMBIGUOUS_CURSORS_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int BLOCK_UNAMBIGUOUS_CURSORS = 0;
+
+	/**
+	 * The '<em><b>BLOCK ALL CURSORS</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>BLOCK ALL CURSORS</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #BLOCK_ALL_CURSORS_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int BLOCK_ALL_CURSORS = 1;
+
+	/**
+	 * The '<em><b>NO BLOCKING</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>NO BLOCKING</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #NO_BLOCKING_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int NO_BLOCKING = 2;
+
+	/**
+	 * The '<em><b>BLOCK UNAMBIGUOUS CURSORS</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #BLOCK_UNAMBIGUOUS_CURSORS
+	 * @generated
+	 * @ordered
+	 */
+	public static final CursorBlockType BLOCK_UNAMBIGUOUS_CURSORS_LITERAL = new CursorBlockType(BLOCK_UNAMBIGUOUS_CURSORS, "BLOCK_UNAMBIGUOUS_CURSORS", "BLOCK_UNAMBIGUOUS_CURSORS"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>BLOCK ALL CURSORS</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #BLOCK_ALL_CURSORS
+	 * @generated
+	 * @ordered
+	 */
+	public static final CursorBlockType BLOCK_ALL_CURSORS_LITERAL = new CursorBlockType(BLOCK_ALL_CURSORS, "BLOCK_ALL_CURSORS", "BLOCK_ALL_CURSORS"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>NO BLOCKING</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #NO_BLOCKING
+	 * @generated
+	 * @ordered
+	 */
+	public static final CursorBlockType NO_BLOCKING_LITERAL = new CursorBlockType(NO_BLOCKING, "NO_BLOCKING", "NO_BLOCKING"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * An array of all the '<em><b>Cursor Block Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final CursorBlockType[] VALUES_ARRAY =
+		new CursorBlockType[] {
+			BLOCK_UNAMBIGUOUS_CURSORS_LITERAL,
+			BLOCK_ALL_CURSORS_LITERAL,
+			NO_BLOCKING_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Cursor Block Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Cursor Block Type</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static CursorBlockType get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			CursorBlockType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Cursor Block Type</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static CursorBlockType getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			CursorBlockType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Cursor Block Type</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static CursorBlockType get(int value) {
+		switch (value) {
+			case BLOCK_UNAMBIGUOUS_CURSORS: return BLOCK_UNAMBIGUOUS_CURSORS_LITERAL;
+			case BLOCK_ALL_CURSORS: return BLOCK_ALL_CURSORS_LITERAL;
+			case NO_BLOCKING: return NO_BLOCKING_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private CursorBlockType(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //CursorBlockType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/DataPartitionMethod.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/DataPartitionMethod.java
new file mode 100644
index 0000000..a51773a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/DataPartitionMethod.java
@@ -0,0 +1,124 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: DataPartitionMethod.java,v 1.3 2008/02/05 02:01:24 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Data Partition Method</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getDataPartitionMethod()
+ * @model
+ * @generated
+ */
+public final class DataPartitionMethod extends AbstractEnumerator {
+	/**
+	 * The '<em><b>RANGE</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #RANGE_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int RANGE = 0;
+
+	/**
+	 * The '<em><b>RANGE</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>RANGE</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #RANGE
+	 * @generated
+	 * @ordered
+	 */
+	public static final DataPartitionMethod RANGE_LITERAL = new DataPartitionMethod(RANGE, "RANGE", "RANGE"); //$NON-NLS-1$
+
+	/**
+	 * An array of all the '<em><b>Data Partition Method</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final DataPartitionMethod[] VALUES_ARRAY =
+		new DataPartitionMethod[] {
+			RANGE_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Data Partition Method</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Data Partition Method</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static DataPartitionMethod get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			DataPartitionMethod result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Data Partition Method</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static DataPartitionMethod getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			DataPartitionMethod result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Data Partition Method</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static DataPartitionMethod get(int value) {
+		switch (value) {
+			case RANGE: return RANGE_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private DataPartitionMethod(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //DataPartitionMethod
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/ExplainSnaphotType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/ExplainSnaphotType.java
new file mode 100644
index 0000000..a964ad5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/ExplainSnaphotType.java
@@ -0,0 +1,205 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: ExplainSnaphotType.java,v 1.1 2009/02/23 22:15:32 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Explain Snaphot Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getExplainSnaphotType()
+ * @model
+ * @generated
+ */
+public final class ExplainSnaphotType extends AbstractEnumerator {
+	/**
+	 * The '<em><b>ALL</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>ALL</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #ALL_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ALL = 0;
+
+	/**
+	 * The '<em><b>NO</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>NO</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #NO_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int NO = 1;
+
+	/**
+	 * The '<em><b>REOPT</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>REOPT</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #REOPT_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int REOPT = 2;
+
+	/**
+	 * The '<em><b>YES</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>YES</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #YES_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int YES = 3;
+
+	/**
+	 * The '<em><b>ALL</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #ALL
+	 * @generated
+	 * @ordered
+	 */
+	public static final ExplainSnaphotType ALL_LITERAL = new ExplainSnaphotType(ALL, "ALL", "ALL"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>NO</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #NO
+	 * @generated
+	 * @ordered
+	 */
+	public static final ExplainSnaphotType NO_LITERAL = new ExplainSnaphotType(NO, "NO", "NO"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>REOPT</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #REOPT
+	 * @generated
+	 * @ordered
+	 */
+	public static final ExplainSnaphotType REOPT_LITERAL = new ExplainSnaphotType(REOPT, "REOPT", "REOPT"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>YES</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #YES
+	 * @generated
+	 * @ordered
+	 */
+	public static final ExplainSnaphotType YES_LITERAL = new ExplainSnaphotType(YES, "YES", "YES"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * An array of all the '<em><b>Explain Snaphot Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final ExplainSnaphotType[] VALUES_ARRAY =
+		new ExplainSnaphotType[] {
+			ALL_LITERAL,
+			NO_LITERAL,
+			REOPT_LITERAL,
+			YES_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Explain Snaphot Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Explain Snaphot Type</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static ExplainSnaphotType get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			ExplainSnaphotType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Explain Snaphot Type</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static ExplainSnaphotType getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			ExplainSnaphotType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Explain Snaphot Type</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static ExplainSnaphotType get(int value) {
+		switch (value) {
+			case ALL: return ALL_LITERAL;
+			case NO: return NO_LITERAL;
+			case REOPT: return REOPT_LITERAL;
+			case YES: return YES_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private ExplainSnaphotType(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //ExplainSnaphotType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/FederatedParameter.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/FederatedParameter.java
new file mode 100644
index 0000000..c51ff72
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/FederatedParameter.java
@@ -0,0 +1,146 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: FederatedParameter.java,v 1.3 2007/10/12 23:05:35 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.routines.Parameter;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Federated Parameter</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Federated Parameter object capturs the remote procedure atributes that are stored as options in the DB2 Catalog. Those that could not be inherited through the Parameter object, have been modeled specifically. These attributes are
+ * remoteCodePage and remoteParamTypeID.
+ * The attributes & where they can be found from the Parameter object are below. 
+ * RemoteParamName - Remote parameter name, from name feild of any named object
+ * RemoteTypeSchema - found  through getDatatype, inherited from Parameter
+ * Remote_Param_Type_Name  - found  through getDatatype, inherited from Parameter
+ * Remote_Remote_Param_Scale -  found  through getDatatype, inherited from Parameter
+ * Remote_Remote_Param_Length - found  through getDatatype, inherited from Parameter
+ * Remote_Is_Return_Value - Found in ParameterMode enumeration, inherited from Parameter
+ * 
+ * 
+ * Remote_Codepage
+ * Remote_Param_Type_ID - the remote parameter type as an integer, attribute of Federated Paramter paramtypeid
+ * 
+ *  
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedParameter#getRemoteCodePage <em>Remote Code Page</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedParameter#getRemoteParamTypeID <em>Remote Param Type ID</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedParameter#getFederatedProcedure <em>Federated Procedure</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedParameter#getRemoteParameter <em>Remote Parameter</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getFederatedParameter()
+ * @model
+ * @generated
+ */
+public interface FederatedParameter extends Parameter {
+	/**
+	 * Returns the value of the '<em><b>Remote Code Page</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Remote Code Page</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Remote Code Page</em>' attribute.
+	 * @see #setRemoteCodePage(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getFederatedParameter_RemoteCodePage()
+	 * @model
+	 * @generated
+	 */
+	int getRemoteCodePage();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedParameter#getRemoteCodePage <em>Remote Code Page</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Remote Code Page</em>' attribute.
+	 * @see #getRemoteCodePage()
+	 * @generated
+	 */
+	void setRemoteCodePage(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Remote Param Type ID</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Remote Param Type ID</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Remote Param Type ID</em>' attribute.
+	 * @see #setRemoteParamTypeID(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getFederatedParameter_RemoteParamTypeID()
+	 * @model
+	 * @generated
+	 */
+	int getRemoteParamTypeID();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedParameter#getRemoteParamTypeID <em>Remote Param Type ID</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Remote Param Type ID</em>' attribute.
+	 * @see #getRemoteParamTypeID()
+	 * @generated
+	 */
+	void setRemoteParamTypeID(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Federated Procedure</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getFederatedParameter <em>Federated Parameter</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Federated Procedure</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Federated Procedure</em>' reference.
+	 * @see #setFederatedProcedure(FederatedProcedure)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getFederatedParameter_FederatedProcedure()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getFederatedParameter
+	 * @model opposite="federatedParameter" required="true"
+	 * @generated
+	 */
+	FederatedProcedure getFederatedProcedure();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedParameter#getFederatedProcedure <em>Federated Procedure</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Federated Procedure</em>' reference.
+	 * @see #getFederatedProcedure()
+	 * @generated
+	 */
+	void setFederatedProcedure(FederatedProcedure value);
+
+	/**
+	 * Returns the value of the '<em><b>Remote Parameter</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.modelbase.sql.routines.Parameter}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Remote Parameter</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Remote Parameter</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getFederatedParameter_RemoteParameter()
+	 * @model type="org.eclipse.datatools.modelbase.sql.routines.Parameter"
+	 * @generated
+	 */
+	EList getRemoteParameter();
+
+} // FederatedParameter
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/FederatedProcedure.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/FederatedProcedure.java
new file mode 100644
index 0000000..060c33c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/FederatedProcedure.java
@@ -0,0 +1,325 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: FederatedProcedure.java,v 1.3 2007/10/12 23:05:35 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Federated Procedure</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getRemoteUniqueId <em>Remote Unique Id</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getRemoteServer <em>Remote Server</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getRemoteSchema <em>Remote Schema</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getRemotePackage <em>Remote Package</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getRemoteProcedureName <em>Remote Procedure Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getNumberOfParameters <em>Number Of Parameters</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getResultSetsToClient <em>Result Sets To Client</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getNumberOfRefCursors <em>Number Of Ref Cursors</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#isAllResultSetsToCaller <em>All Result Sets To Caller</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getFederatedProcedure <em>Federated Procedure</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getRemoteProcedure <em>Remote Procedure</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getFederatedParameter <em>Federated Parameter</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getFederatedProcedure()
+ * @model
+ * @generated
+ */
+public interface FederatedProcedure extends DB2Procedure {
+	/**
+	 * Returns the value of the '<em><b>Remote Unique Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Remote Unique Id</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Remote Unique Id</em>' attribute.
+	 * @see #setRemoteUniqueId(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getFederatedProcedure_RemoteUniqueId()
+	 * @model
+	 * @generated
+	 */
+	String getRemoteUniqueId();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getRemoteUniqueId <em>Remote Unique Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Remote Unique Id</em>' attribute.
+	 * @see #getRemoteUniqueId()
+	 * @generated
+	 */
+	void setRemoteUniqueId(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Remote Server</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Remote Server</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Remote Server</em>' attribute.
+	 * @see #setRemoteServer(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getFederatedProcedure_RemoteServer()
+	 * @model
+	 * @generated
+	 */
+	String getRemoteServer();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getRemoteServer <em>Remote Server</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Remote Server</em>' attribute.
+	 * @see #getRemoteServer()
+	 * @generated
+	 */
+	void setRemoteServer(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Remote Schema</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Remote Schema</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Remote Schema</em>' attribute.
+	 * @see #setRemoteSchema(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getFederatedProcedure_RemoteSchema()
+	 * @model
+	 * @generated
+	 */
+	String getRemoteSchema();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getRemoteSchema <em>Remote Schema</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Remote Schema</em>' attribute.
+	 * @see #getRemoteSchema()
+	 * @generated
+	 */
+	void setRemoteSchema(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Remote Package</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Remote Package</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Remote Package</em>' attribute.
+	 * @see #setRemotePackage(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getFederatedProcedure_RemotePackage()
+	 * @model
+	 * @generated
+	 */
+	String getRemotePackage();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getRemotePackage <em>Remote Package</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Remote Package</em>' attribute.
+	 * @see #getRemotePackage()
+	 * @generated
+	 */
+	void setRemotePackage(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Remote Procedure Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Remote Procedure Name</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Remote Procedure Name</em>' attribute.
+	 * @see #setRemoteProcedureName(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getFederatedProcedure_RemoteProcedureName()
+	 * @model
+	 * @generated
+	 */
+	String getRemoteProcedureName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getRemoteProcedureName <em>Remote Procedure Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Remote Procedure Name</em>' attribute.
+	 * @see #getRemoteProcedureName()
+	 * @generated
+	 */
+	void setRemoteProcedureName(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Number Of Parameters</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Number Of Parameters</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Number Of Parameters</em>' attribute.
+	 * @see #setNumberOfParameters(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getFederatedProcedure_NumberOfParameters()
+	 * @model
+	 * @generated
+	 */
+	int getNumberOfParameters();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getNumberOfParameters <em>Number Of Parameters</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Number Of Parameters</em>' attribute.
+	 * @see #getNumberOfParameters()
+	 * @generated
+	 */
+	void setNumberOfParameters(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Result Sets To Client</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Result Sets To Client</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Result Sets To Client</em>' attribute.
+	 * @see #setResultSetsToClient(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getFederatedProcedure_ResultSetsToClient()
+	 * @model
+	 * @generated
+	 */
+	String getResultSetsToClient();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getResultSetsToClient <em>Result Sets To Client</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Result Sets To Client</em>' attribute.
+	 * @see #getResultSetsToClient()
+	 * @generated
+	 */
+	void setResultSetsToClient(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Number Of Ref Cursors</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Number Of Ref Cursors</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Number Of Ref Cursors</em>' attribute.
+	 * @see #setNumberOfRefCursors(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getFederatedProcedure_NumberOfRefCursors()
+	 * @model
+	 * @generated
+	 */
+	int getNumberOfRefCursors();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getNumberOfRefCursors <em>Number Of Ref Cursors</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Number Of Ref Cursors</em>' attribute.
+	 * @see #getNumberOfRefCursors()
+	 * @generated
+	 */
+	void setNumberOfRefCursors(int value);
+
+	/**
+	 * Returns the value of the '<em><b>All Result Sets To Caller</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>All Result Sets To Caller</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>All Result Sets To Caller</em>' attribute.
+	 * @see #setAllResultSetsToCaller(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getFederatedProcedure_AllResultSetsToCaller()
+	 * @model
+	 * @generated
+	 */
+	boolean isAllResultSetsToCaller();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#isAllResultSetsToCaller <em>All Result Sets To Caller</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>All Result Sets To Caller</em>' attribute.
+	 * @see #isAllResultSetsToCaller()
+	 * @generated
+	 */
+	void setAllResultSetsToCaller(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Federated Procedure</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Federated Procedure</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Federated Procedure</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getFederatedProcedure_FederatedProcedure()
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure"
+	 * @generated
+	 */
+	EList getFederatedProcedure();
+
+	/**
+	 * Returns the value of the '<em><b>Remote Procedure</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.modelbase.sql.routines.Procedure}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Remote Procedure</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Remote Procedure</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getFederatedProcedure_RemoteProcedure()
+	 * @model type="org.eclipse.datatools.modelbase.sql.routines.Procedure"
+	 * @generated
+	 */
+	EList getRemoteProcedure();
+
+	/**
+	 * Returns the value of the '<em><b>Federated Parameter</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedParameter}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedParameter#getFederatedProcedure <em>Federated Procedure</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Federated Parameter</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Federated Parameter</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getFederatedProcedure_FederatedParameter()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedParameter#getFederatedProcedure
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedParameter" opposite="federatedProcedure"
+	 * @generated
+	 */
+	EList getFederatedParameter();
+
+} // FederatedProcedure
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/FileSystemCachingType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/FileSystemCachingType.java
new file mode 100644
index 0000000..047ea42
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/FileSystemCachingType.java
@@ -0,0 +1,178 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>File System Caching Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getFileSystemCachingType()
+ * @model
+ * @generated
+ */
+public final class FileSystemCachingType extends AbstractEnumerator {
+	/**
+	 * The '<em><b>NONE</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>NONE</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #NONE_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int NONE = 0;
+
+	/**
+	 * The '<em><b>FILE CACHING</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>FILE CACHING</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #FILE_CACHING_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int FILE_CACHING = 1;
+
+	/**
+	 * The '<em><b>NO FILE CACHING</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>NO FILE CACHING</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #NO_FILE_CACHING_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int NO_FILE_CACHING = 2;
+
+	/**
+	 * The '<em><b>NONE</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #NONE
+	 * @generated
+	 * @ordered
+	 */
+	public static final FileSystemCachingType NONE_LITERAL = new FileSystemCachingType(NONE, "NONE", "NONE"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>FILE CACHING</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #FILE_CACHING
+	 * @generated
+	 * @ordered
+	 */
+	public static final FileSystemCachingType FILE_CACHING_LITERAL = new FileSystemCachingType(FILE_CACHING, "FILE_CACHING", "FILE_CACHING"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>NO FILE CACHING</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #NO_FILE_CACHING
+	 * @generated
+	 * @ordered
+	 */
+	public static final FileSystemCachingType NO_FILE_CACHING_LITERAL = new FileSystemCachingType(NO_FILE_CACHING, "NO_FILE_CACHING", "NO_FILE_CACHING"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * An array of all the '<em><b>File System Caching Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final FileSystemCachingType[] VALUES_ARRAY =
+		new FileSystemCachingType[] {
+			NONE_LITERAL,
+			FILE_CACHING_LITERAL,
+			NO_FILE_CACHING_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>File System Caching Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>File System Caching Type</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static FileSystemCachingType get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			FileSystemCachingType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>File System Caching Type</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static FileSystemCachingType getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			FileSystemCachingType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>File System Caching Type</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static FileSystemCachingType get(int value) {
+		switch (value) {
+			case NONE: return NONE_LITERAL;
+			case FILE_CACHING: return FILE_CACHING_LITERAL;
+			case NO_FILE_CACHING: return NO_FILE_CACHING_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private FileSystemCachingType(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //FileSystemCachingType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWAdminServer.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWAdminServer.java
new file mode 100644
index 0000000..379161d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWAdminServer.java
@@ -0,0 +1,60 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Admin Server</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * DB2 Administration Server
+ * 
+ * The DB2(R) Administration Server (DAS) is a control point used only to assist with tasks on DB2 servers. You must have a running DAS if you want to use available tools like the Configuration Assistant, the Control Center, or the Development Center. DAS assists the Control Center and Configuration Assistant when working on the following administration tasks: 
+ * 
+ * Enabling remote administration of DB2 servers. 
+ * Providing the facility for job management, including the ability to schedule the running of both DB2 and operating system command scripts. These command scripts are user-defined. 
+ * Defining the scheduling of jobs, viewing the results of completed jobs, and performing other administrative tasks against jobs located either remotely or locally to the DAS using the Task Center. 
+ * Providing a means for discovering information about the configuration of DB2 instances, databases, and other DB2 administration servers in conjunction with the DB2 Discovery utility. This information is used by the Configuration Assistant and the Control Center to simplify and automate the configuration of client connections to DB2 databases. 
+ * 
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWAdminServer#getInstances <em>Instances</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWAdminServer()
+ * @model
+ * @generated
+ */
+public interface LUWAdminServer extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Instances</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2DatabaseManager}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2DatabaseManager#getServer <em>Server</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Instances</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Instances</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWAdminServer_Instances()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2DatabaseManager#getServer
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.model.DB2DatabaseManager" opposite="server"
+	 * @generated
+	 */
+	EList getInstances();
+
+} // LUWAdminServer
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWArrayDataType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWArrayDataType.java
new file mode 100644
index 0000000..bfab03f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWArrayDataType.java
@@ -0,0 +1,57 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWArrayDataType.java,v 1.1 2009/02/16 19:01:34 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.datatypes.ArrayDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Array Data Type</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWArrayDataType#getArrayIndexElementType <em>Array Index Element Type</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWArrayDataType()
+ * @model
+ * @generated
+ */
+public interface LUWArrayDataType extends ArrayDataType, UserDefinedType {
+
+	/**
+	 * Returns the value of the '<em><b>Array Index Element Type</b></em>' containment reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.ArrayIndexElementType#getLUWArrayDataType <em>LUW Array Data Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Array Index Element Type</em>' containment reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Array Index Element Type</em>' containment reference.
+	 * @see #setArrayIndexElementType(ArrayIndexElementType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWArrayDataType_ArrayIndexElementType()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.ArrayIndexElementType#getLUWArrayDataType
+	 * @model opposite="LUWArrayDataType" containment="true"
+	 * @generated
+	 */
+	ArrayIndexElementType getArrayIndexElementType();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWArrayDataType#getArrayIndexElementType <em>Array Index Element Type</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Array Index Element Type</em>' containment reference.
+	 * @see #getArrayIndexElementType()
+	 * @generated
+	 */
+	void setArrayIndexElementType(ArrayIndexElementType value);
+} // LUWArrayDataType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWAttributeDefinition.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWAttributeDefinition.java
new file mode 100644
index 0000000..cecab26
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWAttributeDefinition.java
@@ -0,0 +1,82 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWAttributeDefinition.java,v 1.4 2007/10/12 23:05:36 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.datatypes.AttributeDefinition;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Attribute Definition</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWAttributeDefinition#isLOBLogged <em>LOB Logged</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWAttributeDefinition#isLOBCompacted <em>LOB Compacted</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWAttributeDefinition()
+ * @model
+ * @generated
+ */
+public interface LUWAttributeDefinition extends AttributeDefinition {
+	/**
+	 * Returns the value of the '<em><b>LOB Logged</b></em>' attribute.
+	 * The default value is <code>"true"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>LOB Logged</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>LOB Logged</em>' attribute.
+	 * @see #setLOBLogged(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWAttributeDefinition_LOBLogged()
+	 * @model default="true"
+	 * @generated
+	 */
+	boolean isLOBLogged();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWAttributeDefinition#isLOBLogged <em>LOB Logged</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>LOB Logged</em>' attribute.
+	 * @see #isLOBLogged()
+	 * @generated
+	 */
+	void setLOBLogged(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>LOB Compacted</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>LOB Compacted</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>LOB Compacted</em>' attribute.
+	 * @see #setLOBCompacted(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWAttributeDefinition_LOBCompacted()
+	 * @model
+	 * @generated
+	 */
+	boolean isLOBCompacted();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWAttributeDefinition#isLOBCompacted <em>LOB Compacted</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>LOB Compacted</em>' attribute.
+	 * @see #isLOBCompacted()
+	 * @generated
+	 */
+	void setLOBCompacted(boolean value);
+
+} // LUWAttributeDefinition
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWBufferPool.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWBufferPool.java
new file mode 100644
index 0000000..1340e35
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWBufferPool.java
@@ -0,0 +1,375 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Buffer Pool</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * DB2 Universal Database SQL Reference Version 8.1 (Vol.1 and 2)
+ * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+ * 
+ * Table spaces and other storage structures
+ * 
+ * Storage structures contain database objects. The basic storage structure is the table space; it contains tables, indexes, large objects, and data defined with a LONG data type.
+ * 
+ * There are two types of table spaces:
+ *  - Database managed space (DMS): a table space that is managed by the database manager.
+ *  - System managed space (SMS): a table space that is managed by the operating system.
+ * 
+ * All table spaces consist of containers. A container describes where objects are stored. A subdirectory in a file system is an example of a container.
+ * 
+ * When data is read from table space containers, it is placed in an area of memory called a buffer pool. A buffer pool is associated with a specific table space, thereby allowing control over which data will share the same memory areas for data buffering.
+ * 
+ * 
+ * NUMBLOCKPAGES number-of-pages:
+ * Specifies the number of pages that should exist in the block-based area. The number of pages must not be greater than 98 percent of the number of pages for the buffer pool (SQLSTATE 54052). Specifying the value 0 disables block I/O. The actual value of NUMBLOCKPAGES used will be a multiple of BLOCKSIZE.
+ * 
+ * BLOCKSIZE number-of-pages:
+ * Specifies the number of pages in a block. The block size must be a value between 2 and 256 (SQLSTATE 54053). The default value is 32.
+ * 
+ * PAGESIZE integer [K]:
+ * Defines the size of pages used for the bufferpool. The valid values for integer without the suffix K are 4 096, 8 192, 16 384 or 32 768. The valid values for integer with the suffix K are 4, 8, 16 or 32. An error occurs if the page size is not one of these values (SQLSTATE 428DE). The default is 4 096 byte (4K) pages. Any number of spaces is allowed between integer and K, including no space.
+ * 
+ * EXTENDED STORAGE
+ * If extended storage is enabled, pages that are being evicted from this buffer pool will be cached in extended storage. (Extended storage is enabled by setting the database configuration parameters NUM_ESTORE_SEGS and ESTORE_SEG_SIZE to non-zero values.)
+ * 
+ * NOT EXTENDED STORAGE
+ * Even if extended storage is enabled, pages that are being evicted from this buffer pool are not cached in extended storage.
+ * 
+ * Notes:
+ * Compatibilities: for compatibility with previous versions of DB2:
+ * - NODE can be specified in place of DBPARTITIONNUM
+ * - NODES can be specified in place of DBPARTITIONNUMS
+ * - NODEGROUP can be specified in place of DATABASE PARTITION GROUP
+ * 
+ * -  If the buffer pool is created using the DEFERRED option, any table space created in this buffer pool will use a small system buffer pool of the same page size, until next database activation. The database has to be restarted for the buffer pool to become active and for table space assignments to the new buffer pool to take effect. The default option is IMMEDIATE.
+ *  - A buffer pool cannot be created with both extended storage and block-based support.
+ *  - There should be enough real memory on the machine for the total of all the buffer pools, as well as for the rest of the database manager and application requirements. If DB2 is unable to obtain memory for the regular buffer pools, it will attempt to start up with small system buffer pools, one for each page size (4K, 8K, 16K and 32K). In this situation, a warning will be returned to the user (SQLSTATE 01626), and the pages from all table spaces will use the system buffer pools.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getCreateType <em>Create Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getSize <em>Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getPageSize <em>Page Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getBlockSize <em>Block Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getNumBlockPages <em>Num Block Pages</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#isExtendedStorage <em>Extended Storage</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#isAutomatic <em>Automatic</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getTableSpaces <em>Table Spaces</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getPartitions <em>Partitions</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getPartitionGroup <em>Partition Group</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getDatabase <em>Database</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getSizeException <em>Size Exception</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWBufferPool()
+ * @model
+ * @generated
+ */
+public interface LUWBufferPool extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Create Type</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.BufferPoolType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Create Type</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Create Type</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.BufferPoolType
+	 * @see #setCreateType(BufferPoolType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWBufferPool_CreateType()
+	 * @model
+	 * @generated
+	 */
+	BufferPoolType getCreateType();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getCreateType <em>Create Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Create Type</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.BufferPoolType
+	 * @see #getCreateType()
+	 * @generated
+	 */
+	void setCreateType(BufferPoolType value);
+
+	/**
+	 * Returns the value of the '<em><b>Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Size</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Size</em>' attribute.
+	 * @see #setSize(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWBufferPool_Size()
+	 * @model
+	 * @generated
+	 */
+	int getSize();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getSize <em>Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Size</em>' attribute.
+	 * @see #getSize()
+	 * @generated
+	 */
+	void setSize(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Page Size</b></em>' attribute.
+	 * The default value is <code>"FOUR_K"</code>.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.PageSizeType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Page Size</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Page Size</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.PageSizeType
+	 * @see #setPageSize(PageSizeType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWBufferPool_PageSize()
+	 * @model default="FOUR_K"
+	 * @generated
+	 */
+	PageSizeType getPageSize();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getPageSize <em>Page Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Page Size</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.PageSizeType
+	 * @see #getPageSize()
+	 * @generated
+	 */
+	void setPageSize(PageSizeType value);
+
+	/**
+	 * Returns the value of the '<em><b>Block Size</b></em>' attribute.
+	 * The default value is <code>"32"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Block Size</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Block Size</em>' attribute.
+	 * @see #setBlockSize(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWBufferPool_BlockSize()
+	 * @model default="32"
+	 * @generated
+	 */
+	int getBlockSize();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getBlockSize <em>Block Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Block Size</em>' attribute.
+	 * @see #getBlockSize()
+	 * @generated
+	 */
+	void setBlockSize(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Num Block Pages</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Num Block Pages</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Num Block Pages</em>' attribute.
+	 * @see #setNumBlockPages(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWBufferPool_NumBlockPages()
+	 * @model
+	 * @generated
+	 */
+	int getNumBlockPages();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getNumBlockPages <em>Num Block Pages</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Num Block Pages</em>' attribute.
+	 * @see #getNumBlockPages()
+	 * @generated
+	 */
+	void setNumBlockPages(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Extended Storage</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Extended Storage</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Extended Storage</em>' attribute.
+	 * @see #setExtendedStorage(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWBufferPool_ExtendedStorage()
+	 * @model
+	 * @generated
+	 */
+	boolean isExtendedStorage();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#isExtendedStorage <em>Extended Storage</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Extended Storage</em>' attribute.
+	 * @see #isExtendedStorage()
+	 * @generated
+	 */
+	void setExtendedStorage(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Automatic</b></em>' attribute.
+	 * The default value is <code>"true"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Automatic</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Automatic</em>' attribute.
+	 * @see #setAutomatic(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWBufferPool_Automatic()
+	 * @model default="true"
+	 * @generated
+	 */
+	boolean isAutomatic();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#isAutomatic <em>Automatic</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Automatic</em>' attribute.
+	 * @see #isAutomatic()
+	 * @generated
+	 */
+	void setAutomatic(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Table Spaces</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getBufferPool <em>Buffer Pool</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Table Spaces</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Table Spaces</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWBufferPool_TableSpaces()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getBufferPool
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace" opposite="bufferPool"
+	 * @generated
+	 */
+	EList getTableSpaces();
+
+	/**
+	 * Returns the value of the '<em><b>Partitions</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getBufferPool <em>Buffer Pool</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Partitions</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Partitions</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWBufferPool_Partitions()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getBufferPool
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition" opposite="bufferPool"
+	 * @generated
+	 */
+	EList getPartitions();
+
+	/**
+	 * Returns the value of the '<em><b>Partition Group</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup#getBufferPool <em>Buffer Pool</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Partition Group</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Partition Group</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWBufferPool_PartitionGroup()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup#getBufferPool
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup" opposite="bufferPool"
+	 * @generated
+	 */
+	EList getPartitionGroup();
+
+	/**
+	 * Returns the value of the '<em><b>Database</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getBufferpools <em>Bufferpools</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Database</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Database</em>' reference.
+	 * @see #setDatabase(LUWDatabase)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWBufferPool_Database()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getBufferpools
+	 * @model opposite="bufferpools" required="true"
+	 * @generated
+	 */
+	LUWDatabase getDatabase();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getDatabase <em>Database</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Database</em>' reference.
+	 * @see #getDatabase()
+	 * @generated
+	 */
+	void setDatabase(LUWDatabase value);
+
+	/**
+	 * Returns the value of the '<em><b>Size Exception</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPoolSizeException}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPoolSizeException#getBufferPool <em>Buffer Pool</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Size Exception</em>' containment reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Size Exception</em>' containment reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWBufferPool_SizeException()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPoolSizeException#getBufferPool
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPoolSizeException" opposite="bufferPool" containment="true"
+	 * @generated
+	 */
+	EList getSizeException();
+
+} // LUWBufferPool
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWBufferPoolSizeException.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWBufferPoolSizeException.java
new file mode 100644
index 0000000..5b4c637
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWBufferPoolSizeException.java
@@ -0,0 +1,104 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWBufferPoolSizeException.java,v 1.1 2009/02/27 23:12:34 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Buffer Pool Size Exception</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPoolSizeException#getSize <em>Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPoolSizeException#getBufferPool <em>Buffer Pool</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPoolSizeException#getPartitions <em>Partitions</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWBufferPoolSizeException()
+ * @model
+ * @generated
+ */
+public interface LUWBufferPoolSizeException extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Size</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Size</em>' attribute.
+	 * @see #setSize(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWBufferPoolSizeException_Size()
+	 * @model
+	 * @generated
+	 */
+	int getSize();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPoolSizeException#getSize <em>Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Size</em>' attribute.
+	 * @see #getSize()
+	 * @generated
+	 */
+	void setSize(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Buffer Pool</b></em>' container reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getSizeException <em>Size Exception</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Buffer Pool</em>' container reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Buffer Pool</em>' container reference.
+	 * @see #setBufferPool(LUWBufferPool)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWBufferPoolSizeException_BufferPool()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getSizeException
+	 * @model opposite="sizeException" required="true"
+	 * @generated
+	 */
+	LUWBufferPool getBufferPool();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPoolSizeException#getBufferPool <em>Buffer Pool</em>}' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Buffer Pool</em>' container reference.
+	 * @see #getBufferPool()
+	 * @generated
+	 */
+	void setBufferPool(LUWBufferPool value);
+
+	/**
+	 * Returns the value of the '<em><b>Partitions</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getSizeException <em>Size Exception</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Partitions</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Partitions</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWBufferPoolSizeException_Partitions()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getSizeException
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition" opposite="sizeException"
+	 * @generated
+	 */
+	EList getPartitions();
+
+} // LUWBufferPoolSizeException
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWColumn.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWColumn.java
new file mode 100644
index 0000000..e723cc1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWColumn.java
@@ -0,0 +1,209 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWColumn.java,v 1.9 2007/01/15 18:40:05 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Column;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Column</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn#isLobLogged <em>Lob Logged</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn#isLobCompacted <em>Lob Compacted</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn#getCompression <em>Compression</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn#getInlineLength <em>Inline Length</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn#isHidden <em>Hidden</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn#getSecurityLabel <em>Security Label</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn#getOptions <em>Options</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWColumn()
+ * @model
+ * @generated
+ */
+public interface LUWColumn extends DB2Column {
+	/**
+	 * Returns the value of the '<em><b>Lob Logged</b></em>' attribute.
+	 * The default value is <code>"true"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Lob Logged</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Lob Logged</em>' attribute.
+	 * @see #setLobLogged(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWColumn_LobLogged()
+	 * @model default="true"
+	 * @generated
+	 */
+	boolean isLobLogged();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn#isLobLogged <em>Lob Logged</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Lob Logged</em>' attribute.
+	 * @see #isLobLogged()
+	 * @generated
+	 */
+	void setLobLogged(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Lob Compacted</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Lob Compacted</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Lob Compacted</em>' attribute.
+	 * @see #setLobCompacted(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWColumn_LobCompacted()
+	 * @model
+	 * @generated
+	 */
+	boolean isLobCompacted();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn#isLobCompacted <em>Lob Compacted</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Lob Compacted</em>' attribute.
+	 * @see #isLobCompacted()
+	 * @generated
+	 */
+	void setLobCompacted(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Compression</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * Possible values: "COMPRESS SYSTEM DEFAULT", or "" (w/o quotes)
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Compression</em>' attribute.
+	 * @see #setCompression(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWColumn_Compression()
+	 * @model
+	 * @generated
+	 */
+	String getCompression();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn#getCompression <em>Compression</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Compression</em>' attribute.
+	 * @see #getCompression()
+	 * @generated
+	 */
+	void setCompression(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Inline Length</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Inline Length</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Inline Length</em>' attribute.
+	 * @see #setInlineLength(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWColumn_InlineLength()
+	 * @model
+	 * @generated
+	 */
+	int getInlineLength();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn#getInlineLength <em>Inline Length</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Inline Length</em>' attribute.
+	 * @see #getInlineLength()
+	 * @generated
+	 */
+	void setInlineLength(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Hidden</b></em>' attribute.
+	 * The default value is <code>"false"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Hidden</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Hidden</em>' attribute.
+	 * @see #setHidden(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWColumn_Hidden()
+	 * @model default="false"
+	 * @generated
+	 */
+	boolean isHidden();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn#isHidden <em>Hidden</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Hidden</em>' attribute.
+	 * @see #isHidden()
+	 * @generated
+	 */
+	void setHidden(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Security Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Security Label</em>' containment reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Security Label</em>' attribute.
+	 * @see #setSecurityLabel(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWColumn_SecurityLabel()
+	 * @model
+	 * @generated
+	 */
+	String getSecurityLabel();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn#getSecurityLabel <em>Security Label</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Security Label</em>' attribute.
+	 * @see #getSecurityLabel()
+	 * @generated
+	 */
+	void setSecurityLabel(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Options</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Options</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Options</em>' containment reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWColumn_Options()
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption" containment="true"
+	 * @generated
+	 */
+	EList getOptions();
+
+} // LUWColumn
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWContainerType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWContainerType.java
new file mode 100644
index 0000000..7657776
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWContainerType.java
@@ -0,0 +1,184 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWContainerType.java,v 1.7 2008/02/05 02:01:24 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Container Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * DB2 Universal Database SQL Reference Version 8.1 (Vol.1 and 2)
+ * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+ * 
+ * 
+ * <!-- end-model-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWContainerType()
+ * @model
+ * @generated
+ */
+public final class LUWContainerType extends AbstractEnumerator {
+	/**
+	 * The '<em><b>DEVICE</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #DEVICE_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int DEVICE = 0;
+
+	/**
+	 * The '<em><b>DIRECTORY</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #DIRECTORY_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int DIRECTORY = 1;
+
+	/**
+	 * The '<em><b>FILE</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #FILE_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int FILE = 2;
+
+	/**
+	 * The '<em><b>DEVICE</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>DEVICE</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #DEVICE
+	 * @generated
+	 * @ordered
+	 */
+	public static final LUWContainerType DEVICE_LITERAL = new LUWContainerType(DEVICE, "DEVICE", "DEVICE"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>DIRECTORY</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>DIRECTORY</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #DIRECTORY
+	 * @generated
+	 * @ordered
+	 */
+	public static final LUWContainerType DIRECTORY_LITERAL = new LUWContainerType(DIRECTORY, "DIRECTORY", "DIRECTORY"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>FILE</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>FILE</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #FILE
+	 * @generated
+	 * @ordered
+	 */
+	public static final LUWContainerType FILE_LITERAL = new LUWContainerType(FILE, "FILE", "FILE"); //$NON-NLS-1$
+
+	/**
+	 * An array of all the '<em><b>Container Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final LUWContainerType[] VALUES_ARRAY =
+		new LUWContainerType[] {
+			DEVICE_LITERAL,
+			DIRECTORY_LITERAL,
+			FILE_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Container Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Container Type</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LUWContainerType get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			LUWContainerType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Container Type</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LUWContainerType getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			LUWContainerType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Container Type</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LUWContainerType get(int value) {
+		switch (value) {
+			case DEVICE: return DEVICE_LITERAL;
+			case DIRECTORY: return DIRECTORY_LITERAL;
+			case FILE: return FILE_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private LUWContainerType(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //LUWContainerType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWCursorDataType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWCursorDataType.java
new file mode 100644
index 0000000..80db000
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWCursorDataType.java
@@ -0,0 +1,56 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWCursorDataType.java,v 1.1 2009/02/27 18:42:01 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Cursor Data Type</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWCursorDataType#getRowType <em>Row Type</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWCursorDataType()
+ * @model
+ * @generated
+ */
+public interface LUWCursorDataType extends UserDefinedType, SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Row Type</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Row Type</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Row Type</em>' reference.
+	 * @see #setRowType(LUWRowDataType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWCursorDataType_RowType()
+	 * @model
+	 * @generated
+	 */
+	LUWRowDataType getRowType();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWCursorDataType#getRowType <em>Row Type</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Row Type</em>' reference.
+	 * @see #getRowType()
+	 * @generated
+	 */
+	void setRowType(LUWRowDataType value);
+
+} // LUWCursorDataType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWDataPartition.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWDataPartition.java
new file mode 100644
index 0000000..3c73825
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWDataPartition.java
@@ -0,0 +1,244 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWDataPartition.java,v 1.7 2007/10/12 23:05:35 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Data Partition</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getId <em>Id</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#isLowInclusive <em>Low Inclusive</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#isHighInclusive <em>High Inclusive</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getLOBDataTableSpace <em>LOB Data Table Space</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getRegularDataTableSpace <em>Regular Data Table Space</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getPartitionElements <em>Partition Elements</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getTable <em>Table</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getIndexDataTableSpace <em>Index Data Table Space</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDataPartition()
+ * @model
+ * @generated
+ */
+public interface LUWDataPartition extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Id</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Id</em>' attribute.
+	 * @see #setId(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDataPartition_Id()
+	 * @model
+	 * @generated
+	 */
+	int getId();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getId <em>Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Id</em>' attribute.
+	 * @see #getId()
+	 * @generated
+	 */
+	void setId(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Low Inclusive</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Low Inclusive</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Low Inclusive</em>' attribute.
+	 * @see #setLowInclusive(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDataPartition_LowInclusive()
+	 * @model
+	 * @generated
+	 */
+	boolean isLowInclusive();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#isLowInclusive <em>Low Inclusive</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Low Inclusive</em>' attribute.
+	 * @see #isLowInclusive()
+	 * @generated
+	 */
+	void setLowInclusive(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>High Inclusive</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>High Inclusive</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>High Inclusive</em>' attribute.
+	 * @see #setHighInclusive(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDataPartition_HighInclusive()
+	 * @model
+	 * @generated
+	 */
+	boolean isHighInclusive();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#isHighInclusive <em>High Inclusive</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>High Inclusive</em>' attribute.
+	 * @see #isHighInclusive()
+	 * @generated
+	 */
+	void setHighInclusive(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>LOB Data Table Space</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getLOBDataPartition <em>LOB Data Partition</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>LOB Data Table Space</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>LOB Data Table Space</em>' reference.
+	 * @see #setLOBDataTableSpace(LUWTableSpace)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDataPartition_LOBDataTableSpace()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getLOBDataPartition
+	 * @model opposite="LOBDataPartition"
+	 * @generated
+	 */
+	LUWTableSpace getLOBDataTableSpace();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getLOBDataTableSpace <em>LOB Data Table Space</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>LOB Data Table Space</em>' reference.
+	 * @see #getLOBDataTableSpace()
+	 * @generated
+	 */
+	void setLOBDataTableSpace(LUWTableSpace value);
+
+	/**
+	 * Returns the value of the '<em><b>Regular Data Table Space</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getRegularDataPartition <em>Regular Data Partition</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Regular Data Table Space</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Regular Data Table Space</em>' reference.
+	 * @see #setRegularDataTableSpace(LUWTableSpace)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDataPartition_RegularDataTableSpace()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getRegularDataPartition
+	 * @model opposite="regularDataPartition"
+	 * @generated
+	 */
+	LUWTableSpace getRegularDataTableSpace();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getRegularDataTableSpace <em>Regular Data Table Space</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Regular Data Table Space</em>' reference.
+	 * @see #getRegularDataTableSpace()
+	 * @generated
+	 */
+	void setRegularDataTableSpace(LUWTableSpace value);
+
+	/**
+	 * Returns the value of the '<em><b>Partition Elements</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement#getPartition <em>Partition</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Partition Elements</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Partition Elements</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDataPartition_PartitionElements()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement#getPartition
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement" opposite="partition" required="true"
+	 * @generated
+	 */
+	EList getPartitionElements();
+
+	/**
+	 * Returns the value of the '<em><b>Table</b></em>' container reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getDataPartitions <em>Data Partitions</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Table</em>' container reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Table</em>' container reference.
+	 * @see #setTable(LUWStorageTable)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDataPartition_Table()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getDataPartitions
+	 * @model opposite="dataPartitions" required="true"
+	 * @generated
+	 */
+	LUWStorageTable getTable();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getTable <em>Table</em>}' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Table</em>' container reference.
+	 * @see #getTable()
+	 * @generated
+	 */
+	void setTable(LUWStorageTable value);
+
+	/**
+	 * Returns the value of the '<em><b>Index Data Table Space</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getIndexDataPartition <em>Index Data Partition</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Index Data Table Space</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Index Data Table Space</em>' reference.
+	 * @see #setIndexDataTableSpace(LUWTableSpace)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDataPartition_IndexDataTableSpace()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getIndexDataPartition
+	 * @model opposite="indexDataPartition"
+	 * @generated
+	 */
+	LUWTableSpace getIndexDataTableSpace();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getIndexDataTableSpace <em>Index Data Table Space</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Index Data Table Space</em>' reference.
+	 * @see #getIndexDataTableSpace()
+	 * @generated
+	 */
+	void setIndexDataTableSpace(LUWTableSpace value);
+
+} // LUWDataPartition
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWDataPartitionKey.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWDataPartitionKey.java
new file mode 100644
index 0000000..86dce18
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWDataPartitionKey.java
@@ -0,0 +1,107 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWDataPartitionKey.java,v 1.4 2008/01/29 00:04:56 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Data Partition Key</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartitionKey#getPartitionMethod <em>Partition Method</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartitionKey#getPartitionExpressions <em>Partition Expressions</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartitionKey#getTable <em>Table</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDataPartitionKey()
+ * @model
+ * @generated
+ */
+public interface LUWDataPartitionKey extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Partition Method</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.DataPartitionMethod}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Partition Method</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Partition Method</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.DataPartitionMethod
+	 * @see #setPartitionMethod(DataPartitionMethod)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDataPartitionKey_PartitionMethod()
+	 * @model
+	 * @generated
+	 */
+	DataPartitionMethod getPartitionMethod();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartitionKey#getPartitionMethod <em>Partition Method</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Partition Method</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.DataPartitionMethod
+	 * @see #getPartitionMethod()
+	 * @generated
+	 */
+	void setPartitionMethod(DataPartitionMethod value);
+
+	/**
+	 * Returns the value of the '<em><b>Partition Expressions</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionExpression}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionExpression#getKey <em>Key</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Partition Expressions</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Partition Expressions</em>' containment reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDataPartitionKey_PartitionExpressions()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionExpression#getKey
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionExpression" opposite="key" containment="true" required="true"
+	 * @generated
+	 */
+	EList getPartitionExpressions();
+
+	/**
+	 * Returns the value of the '<em><b>Table</b></em>' container reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getDataPartitionKey <em>Data Partition Key</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Table</em>' container reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Table</em>' container reference.
+	 * @see #setTable(LUWStorageTable)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDataPartitionKey_Table()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getDataPartitionKey
+	 * @model opposite="dataPartitionKey" required="true"
+	 * @generated
+	 */
+	LUWStorageTable getTable();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartitionKey#getTable <em>Table</em>}' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Table</em>' container reference.
+	 * @see #getTable()
+	 * @generated
+	 */
+	void setTable(LUWStorageTable value);
+
+} // LUWDataPartitionKey
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWDatabase.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWDatabase.java
new file mode 100644
index 0000000..5f38188
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWDatabase.java
@@ -0,0 +1,264 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Database;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Database</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * DB2 Universal Database SQL Reference Version 8.1 (Vol.1 and 2)
+ * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+ * 
+ * Relational databases
+ * 
+ * A relational database is a database that is treated as a set of tables and manipulated in accordance with the relational model of data. It contains a set of objects used to store, manage, and access data. Examples of such objects are tables, views, indexes, functions, triggers, and packages.
+ * 
+ * A partitioned relational database is a relational database whose data is managed across multiple partitions (also called nodes). This separation of data across partitions is transparent to users of most SQL statements. However, some data definition language (DDL) statements take partition information into consideration (for example, CREATE DATABASE PARTITION GROUP). (Data definition language is the subset of SQL statements used to describe data relationships in a database.)
+ * 
+ * A federated database is a relational database whose data is stored in multiple data sources (such as separate relational databases). The data appears as if it were all in a single large database and can be accessed through traditional SQL queries. Changes to the data can be explicitly directed to the appropriate data source.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#isFederated <em>Federated</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getGroups <em>Groups</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getWrappers <em>Wrappers</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getServers <em>Servers</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getFunctionMappings <em>Function Mappings</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getTypeMappings <em>Type Mappings</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getReverseTypeMappings <em>Reverse Type Mappings</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getBufferpools <em>Bufferpools</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getTablespaces <em>Tablespaces</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getStorageGroups <em>Storage Groups</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getDefaultStorageGroup <em>Default Storage Group</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabase()
+ * @model
+ * @generated
+ */
+public interface LUWDatabase extends DB2Database {
+	/**
+	 * Returns the value of the '<em><b>Federated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Federated</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Federated</em>' attribute.
+	 * @see #setFederated(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabase_Federated()
+	 * @model
+	 * @generated
+	 */
+	boolean isFederated();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#isFederated <em>Federated</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Federated</em>' attribute.
+	 * @see #isFederated()
+	 * @generated
+	 */
+	void setFederated(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Groups</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup#getDatabase <em>Database</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Groups</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Groups</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabase_Groups()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup#getDatabase
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup" opposite="database"
+	 * @generated
+	 */
+	EList getGroups();
+
+	/**
+	 * Returns the value of the '<em><b>Wrappers</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getLUWDatabase <em>LUW Database</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Wrappers</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Wrappers</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabase_Wrappers()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getLUWDatabase
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper" opposite="LUWDatabase"
+	 * @generated
+	 */
+	EList getWrappers();
+
+	/**
+	 * Returns the value of the '<em><b>Servers</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getLUWDatabase <em>LUW Database</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Servers</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Servers</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabase_Servers()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getLUWDatabase
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer" opposite="LUWDatabase"
+	 * @generated
+	 */
+	EList getServers();
+
+	/**
+	 * Returns the value of the '<em><b>Function Mappings</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getLUWDatabase <em>LUW Database</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Function Mappings</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Function Mappings</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabase_FunctionMappings()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getLUWDatabase
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping" opposite="LUWDatabase"
+	 * @generated
+	 */
+	EList getFunctionMappings();
+
+	/**
+	 * Returns the value of the '<em><b>Type Mappings</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Type Mappings</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Type Mappings</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabase_TypeMappings()
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping"
+	 * @generated
+	 */
+	EList getTypeMappings();
+
+	/**
+	 * Returns the value of the '<em><b>Reverse Type Mappings</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Reverse Type Mappings</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Reverse Type Mappings</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabase_ReverseTypeMappings()
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping"
+	 * @generated
+	 */
+	EList getReverseTypeMappings();
+
+	/**
+	 * Returns the value of the '<em><b>Bufferpools</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getDatabase <em>Database</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Bufferpools</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Bufferpools</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabase_Bufferpools()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getDatabase
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool" opposite="database" required="true"
+	 * @generated
+	 */
+	EList getBufferpools();
+
+	/**
+	 * Returns the value of the '<em><b>Tablespaces</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getDatabase <em>Database</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Tablespaces</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Tablespaces</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabase_Tablespaces()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getDatabase
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace" opposite="database"
+	 * @generated
+	 */
+	EList getTablespaces();
+
+	/**
+	 * Returns the value of the '<em><b>Storage Groups</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#getDatabase <em>Database</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Storage Groups</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Storage Groups</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabase_StorageGroups()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#getDatabase
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup" opposite="database"
+	 * @generated
+	 */
+	EList getStorageGroups();
+
+	/**
+	 * Returns the value of the '<em><b>Default Storage Group</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Default Storage Group</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Default Storage Group</em>' reference.
+	 * @see #setDefaultStorageGroup(LUWStorageGroup)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabase_DefaultStorageGroup()
+	 * @model
+	 * @generated
+	 */
+	LUWStorageGroup getDefaultStorageGroup();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getDefaultStorageGroup <em>Default Storage Group</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Default Storage Group</em>' reference.
+	 * @see #getDefaultStorageGroup()
+	 * @generated
+	 */
+	void setDefaultStorageGroup(LUWStorageGroup value);
+
+} // LUWDatabase
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWDatabaseContainer.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWDatabaseContainer.java
new file mode 100644
index 0000000..a80999b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWDatabaseContainer.java
@@ -0,0 +1,209 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.datatools.enablement.ibm.db2.model.UnitType;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Database Container</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * DB2 Universal Database SQL Reference Version 8.1 (Vol.1 and 2)
+ * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+ * 
+ * 
+ * Table spaces and other storage structures
+ * 
+ * Storage structures contain database objects. The basic storage structure is the table space; it contains tables, indexes, large objects, and data defined with a LONG data type.
+ * 
+ * There are two types of table spaces:
+ *  - Database managed space (DMS): a table space that is managed by the database manager.
+ *  - System managed space (SMS): a table space that is managed by the operating system.
+ * 
+ * All table spaces consist of containers. A container describes where objects are stored. A subdirectory in a file system is an example of a container.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer#getContainerType <em>Container Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer#getSizeInPages <em>Size In Pages</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer#getSize <em>Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer#getSizeUnits <em>Size Units</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer#getTableSpace <em>Table Space</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer#getPartitions <em>Partitions</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabaseContainer()
+ * @model
+ * @generated
+ */
+public interface LUWDatabaseContainer extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Container Type</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWContainerType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Container Type</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Container Type</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWContainerType
+	 * @see #setContainerType(LUWContainerType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabaseContainer_ContainerType()
+	 * @model
+	 * @generated
+	 */
+	LUWContainerType getContainerType();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer#getContainerType <em>Container Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Container Type</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWContainerType
+	 * @see #getContainerType()
+	 * @generated
+	 */
+	void setContainerType(LUWContainerType value);
+
+	/**
+	 * Returns the value of the '<em><b>Size In Pages</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Size In Pages</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Size In Pages</em>' attribute.
+	 * @see #setSizeInPages(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabaseContainer_SizeInPages()
+	 * @model
+	 * @generated
+	 */
+	int getSizeInPages();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer#getSizeInPages <em>Size In Pages</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Size In Pages</em>' attribute.
+	 * @see #getSizeInPages()
+	 * @generated
+	 */
+	void setSizeInPages(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Size</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Size</em>' attribute.
+	 * @see #setSize(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabaseContainer_Size()
+	 * @model
+	 * @generated
+	 */
+	int getSize();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer#getSize <em>Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Size</em>' attribute.
+	 * @see #getSize()
+	 * @generated
+	 */
+	void setSize(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Size Units</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.model.UnitType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Size Units</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Size Units</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.UnitType
+	 * @see #setSizeUnits(UnitType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabaseContainer_SizeUnits()
+	 * @model
+	 * @generated
+	 */
+	UnitType getSizeUnits();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer#getSizeUnits <em>Size Units</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Size Units</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.UnitType
+	 * @see #getSizeUnits()
+	 * @generated
+	 */
+	void setSizeUnits(UnitType value);
+
+	/**
+	 * Returns the value of the '<em><b>Table Space</b></em>' container reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getContainers <em>Containers</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Table Space</em>' container reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Table Space</em>' container reference.
+	 * @see #setTableSpace(LUWTableSpace)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabaseContainer_TableSpace()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getContainers
+	 * @model opposite="containers" required="true"
+	 * @generated
+	 */
+	LUWTableSpace getTableSpace();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer#getTableSpace <em>Table Space</em>}' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Table Space</em>' container reference.
+	 * @see #getTableSpace()
+	 * @generated
+	 */
+	void setTableSpace(LUWTableSpace value);
+
+	/**
+	 * Returns the value of the '<em><b>Partitions</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getContainers <em>Containers</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Partitions</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Partitions</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabaseContainer_Partitions()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getContainers
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition" opposite="containers"
+	 * @generated
+	 */
+	EList getPartitions();
+
+} // LUWDatabaseContainer
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWDatabasePackage.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWDatabasePackage.java
new file mode 100644
index 0000000..c3f4bae
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWDatabasePackage.java
@@ -0,0 +1,195 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWDatabasePackage.java,v 1.3 2009/03/16 21:08:37 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Package;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Database Package</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage#getCreator <em>Creator</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage#getBinder <em>Binder</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage#getCursorBlock <em>Cursor Block</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage#getNumberOfSections <em>Number Of Sections</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage#getOptimizationClass <em>Optimization Class</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage#getExplainSnapshot <em>Explain Snapshot</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabasePackage()
+ * @model
+ * @generated
+ */
+public interface LUWDatabasePackage extends DB2Package {
+
+	/**
+	 * Returns the value of the '<em><b>Creator</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Creator</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Creator</em>' attribute.
+	 * @see #setCreator(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabasePackage_Creator()
+	 * @model
+	 * @generated
+	 */
+	String getCreator();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage#getCreator <em>Creator</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Creator</em>' attribute.
+	 * @see #getCreator()
+	 * @generated
+	 */
+	void setCreator(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Binder</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Binder</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Binder</em>' attribute.
+	 * @see #setBinder(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabasePackage_Binder()
+	 * @model
+	 * @generated
+	 */
+	String getBinder();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage#getBinder <em>Binder</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Binder</em>' attribute.
+	 * @see #getBinder()
+	 * @generated
+	 */
+	void setBinder(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Cursor Block</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.CursorBlockType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Cursor Block</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Cursor Block</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.CursorBlockType
+	 * @see #setCursorBlock(CursorBlockType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabasePackage_CursorBlock()
+	 * @model
+	 * @generated
+	 */
+	CursorBlockType getCursorBlock();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage#getCursorBlock <em>Cursor Block</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Cursor Block</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.CursorBlockType
+	 * @see #getCursorBlock()
+	 * @generated
+	 */
+	void setCursorBlock(CursorBlockType value);
+
+	/**
+	 * Returns the value of the '<em><b>Number Of Sections</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Number Of Sections</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Number Of Sections</em>' attribute.
+	 * @see #setNumberOfSections(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabasePackage_NumberOfSections()
+	 * @model
+	 * @generated
+	 */
+	int getNumberOfSections();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage#getNumberOfSections <em>Number Of Sections</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Number Of Sections</em>' attribute.
+	 * @see #getNumberOfSections()
+	 * @generated
+	 */
+	void setNumberOfSections(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Optimization Class</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Optimization Class</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Optimization Class</em>' attribute.
+	 * @see #setOptimizationClass(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabasePackage_OptimizationClass()
+	 * @model
+	 * @generated
+	 */
+	int getOptimizationClass();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage#getOptimizationClass <em>Optimization Class</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Optimization Class</em>' attribute.
+	 * @see #getOptimizationClass()
+	 * @generated
+	 */
+	void setOptimizationClass(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Explain Snapshot</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.ExplainSnaphotType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Explain Snapshot</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Explain Snapshot</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.ExplainSnaphotType
+	 * @see #setExplainSnapshot(ExplainSnaphotType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabasePackage_ExplainSnapshot()
+	 * @model
+	 * @generated
+	 */
+	ExplainSnaphotType getExplainSnapshot();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage#getExplainSnapshot <em>Explain Snapshot</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Explain Snapshot</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.ExplainSnaphotType
+	 * @see #getExplainSnapshot()
+	 * @generated
+	 */
+	void setExplainSnapshot(ExplainSnaphotType value);
+} // LUWDatabasePackage
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWDatabasePartition.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWDatabasePartition.java
new file mode 100644
index 0000000..ce2c3ee
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWDatabasePartition.java
@@ -0,0 +1,290 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Database Partition</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * DB2 Universal Database SQL Reference Version 8.1 (Vol.1 and 2)
+ * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+ * 
+ * Usually, a single database partition exists on each physical node, and the processors on each system are used by the database manager at each database partition to manage its part of the total data in the database. 
+ * 
+ * Because data is divided across database partitions, you can use the power of multiple processors on multiple physical nodes to satisfy requests for information. Data retrieval and update requests are decomposed automatically into sub-requests, and executed in parallel among the applicable database partitions. The fact that databases are split across database partitions is transparent to users issuing SQL statements. 
+ * 
+ * User interaction occurs through one database partition, known as the coordinator node for that user. The coordinator runs on the same database partition as the application, or in the case of a remote application, the database partition to which that application is connected. Any database partition can be used as a coordinator node. 
+ * 
+ * DB2 supports a partitioned storage model that allows you to store data across several database partitions in the database. This means that the data is physically stored across more than one database partition, and yet can be accessed as though it were located in the same place. Applications and users accessing data in a partitioned database do not need to be aware of the physical location of the data. 
+ * 
+ * The data, while physically split, is used and managed as a logical whole. Users can choose how to partition their data by declaring partitioning keys. Users can also determine across which and how many database partitions their table data can be spread, by selecting the table space and the associated database partition group in which the data should be stored. In addition, an updatable partitioning map is used with a hashing algorithm to specify the mapping of partitioning key values to database partitions, which determines the placement and retrieval of each row of data. As a result, you can spread the workload across a partitioned database for large tables, while allowing smaller tables to be stored on one or more database partitions. Each database partition has local indexes on the data it stores, resulting in increased performance for local data access. 
+ * 
+ * You are not restricted to having all tables divided across all database partitions in the database. DB2 supports partial declustering, which means that you can divide tables and their table spaces across a subset of database partitions in the system. 
+ * 
+ * An alternative to consider when you want tables to be positioned on each database partition, is to use materialized query tables and then replicate those tables. You can create a materialized query table containing the information that you need, and then replicate it to each node. 
+ * 
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getNumber <em>Number</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getPortNumber <em>Port Number</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getHostName <em>Host Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getSwitchName <em>Switch Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#isCatalogPartition <em>Catalog Partition</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getGroup <em>Group</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getBufferPool <em>Buffer Pool</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getContainers <em>Containers</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getSizeException <em>Size Exception</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabasePartition()
+ * @model
+ * @generated
+ */
+public interface LUWDatabasePartition extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Number</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Number</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Number</em>' attribute.
+	 * @see #setNumber(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabasePartition_Number()
+	 * @model
+	 * @generated
+	 */
+	int getNumber();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getNumber <em>Number</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Number</em>' attribute.
+	 * @see #getNumber()
+	 * @generated
+	 */
+	void setNumber(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Group</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup#getPartitions <em>Partitions</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Group</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Group</em>' reference.
+	 * @see #setGroup(LUWPartitionGroup)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabasePartition_Group()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup#getPartitions
+	 * @model opposite="partitions" required="true"
+	 * @generated
+	 */
+	LUWPartitionGroup getGroup();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getGroup <em>Group</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Group</em>' reference.
+	 * @see #getGroup()
+	 * @generated
+	 */
+	void setGroup(LUWPartitionGroup value);
+
+	/**
+	 * Returns the value of the '<em><b>Buffer Pool</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getPartitions <em>Partitions</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Buffer Pool</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Buffer Pool</em>' reference.
+	 * @see #setBufferPool(LUWBufferPool)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabasePartition_BufferPool()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getPartitions
+	 * @model opposite="partitions" required="true"
+	 * @generated
+	 */
+	LUWBufferPool getBufferPool();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getBufferPool <em>Buffer Pool</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Buffer Pool</em>' reference.
+	 * @see #getBufferPool()
+	 * @generated
+	 */
+	void setBufferPool(LUWBufferPool value);
+
+	/**
+	 * Returns the value of the '<em><b>Containers</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer#getPartitions <em>Partitions</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Containers</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Containers</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabasePartition_Containers()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer#getPartitions
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer" opposite="partitions"
+	 * @generated
+	 */
+	EList getContainers();
+
+	/**
+	 * Returns the value of the '<em><b>Size Exception</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPoolSizeException#getPartitions <em>Partitions</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Size Exception</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Size Exception</em>' reference.
+	 * @see #setSizeException(LUWBufferPoolSizeException)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabasePartition_SizeException()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPoolSizeException#getPartitions
+	 * @model opposite="partitions"
+	 * @generated
+	 */
+	LUWBufferPoolSizeException getSizeException();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getSizeException <em>Size Exception</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Size Exception</em>' reference.
+	 * @see #getSizeException()
+	 * @generated
+	 */
+	void setSizeException(LUWBufferPoolSizeException value);
+
+	/**
+	 * Returns the value of the '<em><b>Port Number</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Port Number</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Port Number</em>' attribute.
+	 * @see #setPortNumber(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabasePartition_PortNumber()
+	 * @model transient="true"
+	 * @generated
+	 */
+	int getPortNumber();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getPortNumber <em>Port Number</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Port Number</em>' attribute.
+	 * @see #getPortNumber()
+	 * @generated
+	 */
+	void setPortNumber(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Host Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Host Name</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Host Name</em>' attribute.
+	 * @see #setHostName(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabasePartition_HostName()
+	 * @model transient="true"
+	 * @generated
+	 */
+	String getHostName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getHostName <em>Host Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Host Name</em>' attribute.
+	 * @see #getHostName()
+	 * @generated
+	 */
+	void setHostName(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Switch Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Switch Name</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Switch Name</em>' attribute.
+	 * @see #setSwitchName(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabasePartition_SwitchName()
+	 * @model transient="true"
+	 * @generated
+	 */
+	String getSwitchName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getSwitchName <em>Switch Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Switch Name</em>' attribute.
+	 * @see #getSwitchName()
+	 * @generated
+	 */
+	void setSwitchName(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Catalog Partition</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Catalog Partition</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Catalog Partition</em>' attribute.
+	 * @see #setCatalogPartition(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWDatabasePartition_CatalogPartition()
+	 * @model transient="true"
+	 * @generated
+	 */
+	boolean isCatalogPartition();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#isCatalogPartition <em>Catalog Partition</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Catalog Partition</em>' attribute.
+	 * @see #isCatalogPartition()
+	 * @generated
+	 */
+	void setCatalogPartition(boolean value);
+
+} // LUWDatabasePartition
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWFactory.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWFactory.java
new file mode 100644
index 0000000..147c13c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWFactory.java
@@ -0,0 +1,563 @@
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage
+ * @generated
+ */
+public interface LUWFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	LUWFactory eINSTANCE = org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Partition Group</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Partition Group</em>'.
+	 * @generated
+	 */
+	LUWPartitionGroup createLUWPartitionGroup();
+
+	/**
+	 * Returns a new object of class '<em>Table Space</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Table Space</em>'.
+	 * @generated
+	 */
+	LUWTableSpace createLUWTableSpace();
+
+	/**
+	 * Returns a new object of class '<em>Database Partition</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Database Partition</em>'.
+	 * @generated
+	 */
+	LUWDatabasePartition createLUWDatabasePartition();
+
+	/**
+	 * Returns a new object of class '<em>Database Container</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Database Container</em>'.
+	 * @generated
+	 */
+	LUWDatabaseContainer createLUWDatabaseContainer();
+
+	/**
+	 * Returns a new object of class '<em>Admin Server</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Admin Server</em>'.
+	 * @generated
+	 */
+	LUWAdminServer createLUWAdminServer();
+
+	/**
+	 * Returns a new object of class '<em>Buffer Pool</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Buffer Pool</em>'.
+	 * @generated
+	 */
+	LUWBufferPool createLUWBufferPool();
+
+	/**
+	 * Returns a new object of class '<em>Table</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Table</em>'.
+	 * @generated
+	 */
+	LUWTable createLUWTable();
+
+	/**
+	 * Returns a new object of class '<em>View</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>View</em>'.
+	 * @generated
+	 */
+	LUWView createLUWView();
+
+	/**
+	 * Returns a new object of class '<em>Partition Key</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Partition Key</em>'.
+	 * @generated
+	 */
+	LUWPartitionKey createLUWPartitionKey();
+
+	/**
+	 * Returns a new object of class '<em>Function Mapping</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Function Mapping</em>'.
+	 * @generated
+	 */
+	LUWFunctionMapping createLUWFunctionMapping();
+
+	/**
+	 * Returns a new object of class '<em>Generic User Mapping</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Generic User Mapping</em>'.
+	 * @generated
+	 */
+	LUWGenericUserMapping createLUWGenericUserMapping();
+
+	/**
+	 * Returns a new object of class '<em>Type Mapping</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Type Mapping</em>'.
+	 * @generated
+	 */
+	LUWTypeMapping createLUWTypeMapping();
+
+	/**
+	 * Returns a new object of class '<em>User Mapping</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>User Mapping</em>'.
+	 * @generated
+	 */
+	LUWUserMapping createLUWUserMapping();
+
+	/**
+	 * Returns a new object of class '<em>Option</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Option</em>'.
+	 * @generated
+	 */
+	LUWOption createLUWOption();
+
+	/**
+	 * Returns a new object of class '<em>Database</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Database</em>'.
+	 * @generated
+	 */
+	LUWDatabase createLUWDatabase();
+
+	/**
+	 * Returns a new object of class '<em>Column</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Column</em>'.
+	 * @generated
+	 */
+	LUWColumn createLUWColumn();
+
+	/**
+	 * Returns a new object of class '<em>Generic Nickname</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Generic Nickname</em>'.
+	 * @generated
+	 */
+	LUWGenericNickname createLUWGenericNickname();
+
+	/**
+	 * Returns a new object of class '<em>Generic Server</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Generic Server</em>'.
+	 * @generated
+	 */
+	LUWGenericServer createLUWGenericServer();
+
+	/**
+	 * Returns a new object of class '<em>Materialized Query Table</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Materialized Query Table</em>'.
+	 * @generated
+	 */
+	LUWMaterializedQueryTable createLUWMaterializedQueryTable();
+
+	/**
+	 * Returns a new object of class '<em>Generic Wrapper</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Generic Wrapper</em>'.
+	 * @generated
+	 */
+	LUWGenericWrapper createLUWGenericWrapper();
+
+	/**
+	 * Returns a new object of class '<em>Relational Remote Server</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Relational Remote Server</em>'.
+	 * @generated
+	 */
+	RelationalRemoteServer createRelationalRemoteServer();
+
+	/**
+	 * Returns a new object of class '<em>Relational Remote Data Set</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Relational Remote Data Set</em>'.
+	 * @generated
+	 */
+	RelationalRemoteDataSet createRelationalRemoteDataSet();
+
+	/**
+	 * Returns a new object of class '<em>Remote Server</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Remote Server</em>'.
+	 * @generated
+	 */
+	RemoteServer createRemoteServer();
+
+	/**
+	 * Returns a new object of class '<em>Remote Data Set</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Remote Data Set</em>'.
+	 * @generated
+	 */
+	RemoteDataSet createRemoteDataSet();
+
+	/**
+	 * Returns a new object of class '<em>Index</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Index</em>'.
+	 * @generated
+	 */
+	LUWIndex createLUWIndex();
+
+	/**
+	 * Returns a new object of class '<em>Attribute Definition</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Attribute Definition</em>'.
+	 * @generated
+	 */
+	LUWAttributeDefinition createLUWAttributeDefinition();
+
+	/**
+	 * Returns a new object of class '<em>Federated Procedure</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Federated Procedure</em>'.
+	 * @generated
+	 */
+	FederatedProcedure createFederatedProcedure();
+
+	/**
+	 * Returns a new object of class '<em>Federated Parameter</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Federated Parameter</em>'.
+	 * @generated
+	 */
+	FederatedParameter createFederatedParameter();
+
+	/**
+	 * Returns a new object of class '<em>Partition Expression</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Partition Expression</em>'.
+	 * @generated
+	 */
+	LUWPartitionExpression createLUWPartitionExpression();
+
+	/**
+	 * Returns a new object of class '<em>Partition Element</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Partition Element</em>'.
+	 * @generated
+	 */
+	LUWPartitionElement createLUWPartitionElement();
+
+	/**
+	 * Returns a new object of class '<em>Data Partition</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Data Partition</em>'.
+	 * @generated
+	 */
+	LUWDataPartition createLUWDataPartition();
+
+	/**
+	 * Returns a new object of class '<em>Data Partition Key</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Data Partition Key</em>'.
+	 * @generated
+	 */
+	LUWDataPartitionKey createLUWDataPartitionKey();
+
+	/**
+	 * Returns a new object of class '<em>Database Package</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Database Package</em>'.
+	 * @generated
+	 */
+	LUWDatabasePackage createLUWDatabasePackage();
+
+	/**
+	 * Returns a new object of class '<em>Module</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Module</em>'.
+	 * @generated
+	 */
+	LUWModule createLUWModule();
+
+	/**
+	 * Returns a new object of class '<em>Module Function</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Module Function</em>'.
+	 * @generated
+	 */
+	LUWModuleFunction createLUWModuleFunction();
+
+	/**
+	 * Returns a new object of class '<em>Module Procedure</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Module Procedure</em>'.
+	 * @generated
+	 */
+	LUWModuleProcedure createLUWModuleProcedure();
+
+	/**
+	 * Returns a new object of class '<em>Module Condition</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Module Condition</em>'.
+	 * @generated
+	 */
+	LUWModuleCondition createLUWModuleCondition();
+
+	/**
+	 * Returns a new object of class '<em>Global Variable</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Global Variable</em>'.
+	 * @generated
+	 */
+	LUWGlobalVariable createLUWGlobalVariable();
+
+	/**
+	 * Returns a new object of class '<em>Module Row Data Type</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Module Row Data Type</em>'.
+	 * @generated
+	 */
+	LUWModuleRowDataType createLUWModuleRowDataType();
+
+	/**
+	 * Returns a new object of class '<em>Module Array Data Type</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Module Array Data Type</em>'.
+	 * @generated
+	 */
+	LUWModuleArrayDataType createLUWModuleArrayDataType();
+
+	/**
+	 * Returns a new object of class '<em>Module Distinct Type</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Module Distinct Type</em>'.
+	 * @generated
+	 */
+	LUWModuleDistinctType createLUWModuleDistinctType();
+
+	/**
+	 * Returns a new object of class '<em>Module Global Variable</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Module Global Variable</em>'.
+	 * @generated
+	 */
+	LUWModuleGlobalVariable createLUWModuleGlobalVariable();
+
+	/**
+	 * Returns a new object of class '<em>Array Data Type</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Array Data Type</em>'.
+	 * @generated
+	 */
+	LUWArrayDataType createLUWArrayDataType();
+
+	/**
+	 * Returns a new object of class '<em>Row Data Type</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Row Data Type</em>'.
+	 * @generated
+	 */
+	LUWRowDataType createLUWRowDataType();
+
+	/**
+	 * Returns a new object of class '<em>PLSQL Package</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>PLSQL Package</em>'.
+	 * @generated
+	 */
+	PLSQLPackage createPLSQLPackage();
+
+	/**
+	 * Returns a new object of class '<em>PLSQL Package Body</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>PLSQL Package Body</em>'.
+	 * @generated
+	 */
+	PLSQLPackageBody createPLSQLPackageBody();
+
+	/**
+	 * Returns a new object of class '<em>Cursor Data Type</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Cursor Data Type</em>'.
+	 * @generated
+	 */
+	LUWCursorDataType createLUWCursorDataType();
+
+	/**
+	 * Returns a new object of class '<em>Module Cursor Data Type</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Module Cursor Data Type</em>'.
+	 * @generated
+	 */
+	LUWModuleCursorDataType createLUWModuleCursorDataType();
+
+	/**
+	 * Returns a new object of class '<em>Buffer Pool Size Exception</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Buffer Pool Size Exception</em>'.
+	 * @generated
+	 */
+	LUWBufferPoolSizeException createLUWBufferPoolSizeException();
+
+	/**
+	 * Returns a new object of class '<em>Member</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Member</em>'.
+	 * @generated
+	 */
+	LUWMember createLUWMember();
+
+	/**
+	 * Returns a new object of class '<em>Security Policy</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Security Policy</em>'.
+	 * @generated
+	 */
+	LUWSecurityPolicy createLUWSecurityPolicy();
+
+	/**
+	 * Returns a new object of class '<em>Security Label Component</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Security Label Component</em>'.
+	 * @generated
+	 */
+	LUWSecurityLabelComponent createLUWSecurityLabelComponent();
+
+	/**
+	 * Returns a new object of class '<em>Security Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Security Label</em>'.
+	 * @generated
+	 */
+	LUWSecurityLabel createLUWSecurityLabel();
+
+	/**
+	 * Returns a new object of class '<em>Security Label Component Element</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Security Label Component Element</em>'.
+	 * @generated
+	 */
+	LUWSecurityLabelComponentElement createLUWSecurityLabelComponentElement();
+
+	/**
+	 * Returns a new object of class '<em>Storage Group</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Storage Group</em>'.
+	 * @generated
+	 */
+	LUWStorageGroup createLUWStorageGroup();
+
+	/**
+	 * Returns a new object of class '<em>Temporary Storage Table</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Temporary Storage Table</em>'.
+	 * @generated
+	 */
+	LUWTemporaryStorageTable createLUWTemporaryStorageTable();
+
+	/**
+	 * Returns a new object of class '<em>Temporary Table</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Temporary Table</em>'.
+	 * @generated
+	 */
+	LUWTemporaryTable createLUWTemporaryTable();
+
+	/**
+	 * Returns a new object of class '<em>Array Index Element Type</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Array Index Element Type</em>'.
+	 * @generated
+	 */
+	ArrayIndexElementType createArrayIndexElementType();
+
+	/**
+	 * Returns a new object of class '<em>Partition Every Clause Element</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Partition Every Clause Element</em>'.
+	 * @generated
+	 */
+	LUWPartitionEveryClauseElement createLUWPartitionEveryClauseElement();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	LUWPackage getLUWPackage();
+
+} //LUWFactory
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWFederatedDataSource.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWFederatedDataSource.java
new file mode 100644
index 0000000..2f603e4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWFederatedDataSource.java
@@ -0,0 +1,313 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Federated Data Source</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWFederatedDataSource()
+ * @model
+ * @generated
+ */
+public final class LUWFederatedDataSource extends AbstractEnumerator {
+	/**
+	 * The '<em><b>DB2</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>DB2</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #DB2_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int DB2 = 0;
+
+	/**
+	 * The '<em><b>INFORMIX</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of '<em><b>INFORMIX</b></em>' literal object isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+	 * @see #INFORMIX_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+    public static final int INFORMIX = 1;
+
+    /**
+	 * The '<em><b>ORACLE</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>ORACLE</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #ORACLE_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ORACLE = 2;
+
+	/**
+	 * The '<em><b>SQL SERVER</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of '<em><b>SQL SERVER</b></em>' literal object isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+	 * @see #SQL_SERVER_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+    public static final int SQL_SERVER = 3;
+
+    /**
+	 * The '<em><b>TERADATA</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of '<em><b>TERADATA</b></em>' literal object isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+	 * @see #TERADATA_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+    public static final int TERADATA = 4;
+
+    /**
+	 * The '<em><b>SYBASE</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of '<em><b>SYBASE</b></em>' literal object isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+	 * @see #SYBASE_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+    public static final int SYBASE = 5;
+
+    /**
+	 * The '<em><b>ODBC</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of '<em><b>ODBC</b></em>' literal object isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+	 * @see #ODBC_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+    public static final int ODBC = 6;
+
+    /**
+	 * The '<em><b>JDBC</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of '<em><b>JDBC</b></em>' literal object isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+	 * @see #JDBC_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+    public static final int JDBC = 7;
+
+    /**
+	 * The '<em><b>DB2</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #DB2
+	 * @generated
+	 * @ordered
+	 */
+	public static final LUWFederatedDataSource DB2_LITERAL = new LUWFederatedDataSource(DB2, "DB2", "DB2"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>INFORMIX</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @see #INFORMIX
+	 * @generated
+	 * @ordered
+	 */
+    public static final LUWFederatedDataSource INFORMIX_LITERAL = new LUWFederatedDataSource(INFORMIX, "INFORMIX", "INFORMIX"); //$NON-NLS-1$ //$NON-NLS-2$
+
+    /**
+	 * The '<em><b>ORACLE</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #ORACLE
+	 * @generated
+	 * @ordered
+	 */
+	public static final LUWFederatedDataSource ORACLE_LITERAL = new LUWFederatedDataSource(ORACLE, "ORACLE", "ORACLE"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>SQL SERVER</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @see #SQL_SERVER
+	 * @generated
+	 * @ordered
+	 */
+    public static final LUWFederatedDataSource SQL_SERVER_LITERAL = new LUWFederatedDataSource(SQL_SERVER, "SQL_SERVER", "SQL_SERVER"); //$NON-NLS-1$ //$NON-NLS-2$
+
+    /**
+	 * The '<em><b>TERADATA</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @see #TERADATA
+	 * @generated
+	 * @ordered
+	 */
+    public static final LUWFederatedDataSource TERADATA_LITERAL = new LUWFederatedDataSource(TERADATA, "TERADATA", "TERADATA"); //$NON-NLS-1$ //$NON-NLS-2$
+
+    /**
+	 * The '<em><b>SYBASE</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @see #SYBASE
+	 * @generated
+	 * @ordered
+	 */
+    public static final LUWFederatedDataSource SYBASE_LITERAL = new LUWFederatedDataSource(SYBASE, "SYBASE", "SYBASE"); //$NON-NLS-1$ //$NON-NLS-2$
+
+    /**
+	 * The '<em><b>ODBC</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @see #ODBC
+	 * @generated
+	 * @ordered
+	 */
+    public static final LUWFederatedDataSource ODBC_LITERAL = new LUWFederatedDataSource(ODBC, "ODBC", "ODBC"); //$NON-NLS-1$ //$NON-NLS-2$
+
+    /**
+	 * The '<em><b>JDBC</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @see #JDBC
+	 * @generated
+	 * @ordered
+	 */
+    public static final LUWFederatedDataSource JDBC_LITERAL = new LUWFederatedDataSource(JDBC, "JDBC", "JDBC"); //$NON-NLS-1$ //$NON-NLS-2$
+
+    /**
+	 * An array of all the '<em><b>Federated Data Source</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final LUWFederatedDataSource[] VALUES_ARRAY =
+		new LUWFederatedDataSource[] {
+			DB2_LITERAL,
+			INFORMIX_LITERAL,
+			ORACLE_LITERAL,
+			SQL_SERVER_LITERAL,
+			TERADATA_LITERAL,
+			SYBASE_LITERAL,
+			ODBC_LITERAL,
+			JDBC_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Federated Data Source</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Federated Data Source</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LUWFederatedDataSource get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			LUWFederatedDataSource result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Federated Data Source</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LUWFederatedDataSource getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			LUWFederatedDataSource result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Federated Data Source</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LUWFederatedDataSource get(int value) {
+		switch (value) {
+			case DB2: return DB2_LITERAL;
+			case INFORMIX: return INFORMIX_LITERAL;
+			case ORACLE: return ORACLE_LITERAL;
+			case SQL_SERVER: return SQL_SERVER_LITERAL;
+			case TERADATA: return TERADATA_LITERAL;
+			case SYBASE: return SYBASE_LITERAL;
+			case ODBC: return ODBC_LITERAL;
+			case JDBC: return JDBC_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private LUWFederatedDataSource(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //LUWFederatedDataSource
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWFunctionMapping.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWFunctionMapping.java
new file mode 100644
index 0000000..6b7442a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWFunctionMapping.java
@@ -0,0 +1,378 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import java.util.Date;
+
+import org.eclipse.datatools.modelbase.sql.routines.Function;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Function;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Function Mapping</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getServerType <em>Server Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getServerVersion <em>Server Version</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getServerName <em>Server Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getCreationTime <em>Creation Time</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#isDisabled <em>Disabled</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getInstsPerInvoc <em>Insts Per Invoc</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getInstsPerArgByte <em>Insts Per Arg Byte</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getIosPerInvoc <em>Ios Per Invoc</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getIosPerArgByte <em>Ios Per Arg Byte</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getOptions <em>Options</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getLocalFunction <em>Local Function</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getRemoteFunction <em>Remote Function</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getLUWDatabase <em>LUW Database</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWFunctionMapping()
+ * @model
+ * @generated
+ */
+public interface LUWFunctionMapping extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Server Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Server Type</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Server Type</em>' attribute.
+	 * @see #setServerType(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWFunctionMapping_ServerType()
+	 * @model
+	 * @generated
+	 */
+	String getServerType();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getServerType <em>Server Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Server Type</em>' attribute.
+	 * @see #getServerType()
+	 * @generated
+	 */
+	void setServerType(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Server Version</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Server Version</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Server Version</em>' attribute.
+	 * @see #setServerVersion(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWFunctionMapping_ServerVersion()
+	 * @model
+	 * @generated
+	 */
+	String getServerVersion();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getServerVersion <em>Server Version</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Server Version</em>' attribute.
+	 * @see #getServerVersion()
+	 * @generated
+	 */
+	void setServerVersion(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Server Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Server Name</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Server Name</em>' attribute.
+	 * @see #setServerName(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWFunctionMapping_ServerName()
+	 * @model
+	 * @generated
+	 */
+	String getServerName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getServerName <em>Server Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Server Name</em>' attribute.
+	 * @see #getServerName()
+	 * @generated
+	 */
+	void setServerName(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Creation Time</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Creation Time</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Creation Time</em>' attribute.
+	 * @see #setCreationTime(Date)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWFunctionMapping_CreationTime()
+	 * @model dataType="org.eclipse.datatools.modelbase.sql.schema.Date"
+	 * @generated
+	 */
+	Date getCreationTime();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getCreationTime <em>Creation Time</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Creation Time</em>' attribute.
+	 * @see #getCreationTime()
+	 * @generated
+	 */
+	void setCreationTime(Date value);
+
+	/**
+	 * Returns the value of the '<em><b>Disabled</b></em>' attribute.
+	 * The default value is <code>"false"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Disabled</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Disabled</em>' attribute.
+	 * @see #setDisabled(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWFunctionMapping_Disabled()
+	 * @model default="false"
+	 * @generated
+	 */
+	boolean isDisabled();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#isDisabled <em>Disabled</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Disabled</em>' attribute.
+	 * @see #isDisabled()
+	 * @generated
+	 */
+	void setDisabled(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Insts Per Invoc</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Insts Per Invoc</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Insts Per Invoc</em>' attribute.
+	 * @see #setInstsPerInvoc(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWFunctionMapping_InstsPerInvoc()
+	 * @model
+	 * @generated
+	 */
+	int getInstsPerInvoc();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getInstsPerInvoc <em>Insts Per Invoc</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Insts Per Invoc</em>' attribute.
+	 * @see #getInstsPerInvoc()
+	 * @generated
+	 */
+	void setInstsPerInvoc(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Insts Per Arg Byte</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Insts Per Arg Byte</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Insts Per Arg Byte</em>' attribute.
+	 * @see #setInstsPerArgByte(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWFunctionMapping_InstsPerArgByte()
+	 * @model
+	 * @generated
+	 */
+	int getInstsPerArgByte();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getInstsPerArgByte <em>Insts Per Arg Byte</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Insts Per Arg Byte</em>' attribute.
+	 * @see #getInstsPerArgByte()
+	 * @generated
+	 */
+	void setInstsPerArgByte(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Ios Per Invoc</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Ios Per Invoc</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Ios Per Invoc</em>' attribute.
+	 * @see #setIosPerInvoc(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWFunctionMapping_IosPerInvoc()
+	 * @model
+	 * @generated
+	 */
+	int getIosPerInvoc();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getIosPerInvoc <em>Ios Per Invoc</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Ios Per Invoc</em>' attribute.
+	 * @see #getIosPerInvoc()
+	 * @generated
+	 */
+	void setIosPerInvoc(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Ios Per Arg Byte</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Ios Per Arg Byte</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Ios Per Arg Byte</em>' attribute.
+	 * @see #setIosPerArgByte(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWFunctionMapping_IosPerArgByte()
+	 * @model
+	 * @generated
+	 */
+	int getIosPerArgByte();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getIosPerArgByte <em>Ios Per Arg Byte</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Ios Per Arg Byte</em>' attribute.
+	 * @see #getIosPerArgByte()
+	 * @generated
+	 */
+	void setIosPerArgByte(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Options</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Options</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Options</em>' containment reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWFunctionMapping_Options()
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption" containment="true"
+	 * @generated
+	 */
+	EList getOptions();
+
+	/**
+	 * Returns the value of the '<em><b>Local Function</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Local Function</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Local Function</em>' reference.
+	 * @see #setLocalFunction(DB2Function)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWFunctionMapping_LocalFunction()
+	 * @model required="true"
+	 * @generated
+	 */
+	DB2Function getLocalFunction();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getLocalFunction <em>Local Function</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Local Function</em>' reference.
+	 * @see #getLocalFunction()
+	 * @generated
+	 */
+	void setLocalFunction(DB2Function value);
+
+	/**
+	 * Returns the value of the '<em><b>Remote Function</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Remote Function</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Remote Function</em>' reference.
+	 * @see #setRemoteFunction(Function)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWFunctionMapping_RemoteFunction()
+	 * @model required="true"
+	 * @generated
+	 */
+	Function getRemoteFunction();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getRemoteFunction <em>Remote Function</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Remote Function</em>' reference.
+	 * @see #getRemoteFunction()
+	 * @generated
+	 */
+	void setRemoteFunction(Function value);
+
+	/**
+	 * Returns the value of the '<em><b>LUW Database</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getFunctionMappings <em>Function Mappings</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>LUW Database</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>LUW Database</em>' reference.
+	 * @see #setLUWDatabase(LUWDatabase)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWFunctionMapping_LUWDatabase()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getFunctionMappings
+	 * @model opposite="functionMappings" required="true"
+	 * @generated
+	 */
+	LUWDatabase getLUWDatabase();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getLUWDatabase <em>LUW Database</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>LUW Database</em>' reference.
+	 * @see #getLUWDatabase()
+	 * @generated
+	 */
+	void setLUWDatabase(LUWDatabase value);
+
+} // LUWFunctionMapping
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWGenericNickname.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWGenericNickname.java
new file mode 100644
index 0000000..0fe8373
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWGenericNickname.java
@@ -0,0 +1,63 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWGenericNickname.java,v 1.7 2007/01/15 18:40:05 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Generic Nickname</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericNickname#getGenericServer <em>Generic Server</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWGenericNickname()
+ * @model
+ * @generated
+ */
+public interface LUWGenericNickname extends LUWNickname {
+	/**
+	 * Returns the value of the '<em><b>Generic Server</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericServer#getGenericNicknames <em>Generic Nicknames</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Generic Server</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Generic Server</em>' reference.
+	 * @see #setGenericServer(LUWGenericServer)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWGenericNickname_GenericServer()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericServer#getGenericNicknames
+	 * @model opposite="genericNicknames" required="true" transient="true" volatile="true"
+	 * @generated
+	 */
+	LUWGenericServer getGenericServer();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericNickname#getGenericServer <em>Generic Server</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Generic Server</em>' reference.
+	 * @see #getGenericServer()
+	 * @generated
+	 */
+	void setGenericServer(LUWGenericServer value);
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model
+	 * @generated
+	 */
+	void setServer(LUWServer newGenericServer);
+
+} // LUWGenericNickname
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWGenericServer.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWGenericServer.java
new file mode 100644
index 0000000..31508cb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWGenericServer.java
@@ -0,0 +1,91 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWGenericServer.java,v 1.7 2007/01/15 18:40:05 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Generic Server</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericServer#getGenericNicknames <em>Generic Nicknames</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericServer#getGenericWrapper <em>Generic Wrapper</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWGenericServer()
+ * @model
+ * @generated
+ */
+public interface LUWGenericServer extends LUWServer {
+	/**
+	 * Returns the value of the '<em><b>Generic Nicknames</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericNickname}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericNickname#getGenericServer <em>Generic Server</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Generic Nicknames</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Generic Nicknames</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWGenericServer_GenericNicknames()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericNickname#getGenericServer
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericNickname" opposite="genericServer" transient="true" volatile="true"
+	 * @generated
+	 */
+	EList getGenericNicknames();
+
+	/**
+	 * Returns the value of the '<em><b>Generic Wrapper</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericWrapper#getGenericServers <em>Generic Servers</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Generic Wrapper</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Generic Wrapper</em>' reference.
+	 * @see #setGenericWrapper(LUWGenericWrapper)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWGenericServer_GenericWrapper()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericWrapper#getGenericServers
+	 * @model opposite="genericServers" required="true" transient="true" volatile="true"
+	 * @generated
+	 */
+	LUWGenericWrapper getGenericWrapper();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericServer#getGenericWrapper <em>Generic Wrapper</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Generic Wrapper</em>' reference.
+	 * @see #getGenericWrapper()
+	 * @generated
+	 */
+	void setGenericWrapper(LUWGenericWrapper value);
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model kind="operation" many="false"
+	 * @generated
+	 */
+	EList getNicknames();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model
+	 * @generated
+	 */
+	void setWrapper(LUWWrapper newGenericWrapper);
+
+} // LUWGenericServer
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWGenericUserMapping.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWGenericUserMapping.java
new file mode 100644
index 0000000..739d0f5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWGenericUserMapping.java
@@ -0,0 +1,80 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWGenericUserMapping.java,v 1.7 2007/01/15 18:40:05 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Generic User Mapping</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericUserMapping#getRemoteUser <em>Remote User</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericUserMapping#getRemotePassword <em>Remote Password</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWGenericUserMapping()
+ * @model
+ * @generated
+ */
+public interface LUWGenericUserMapping extends LUWUserMapping {
+	/**
+	 * Returns the value of the '<em><b>Remote User</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Remote User</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Remote User</em>' attribute.
+	 * @see #setRemoteUser(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWGenericUserMapping_RemoteUser()
+	 * @model
+	 * @generated
+	 */
+	String getRemoteUser();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericUserMapping#getRemoteUser <em>Remote User</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Remote User</em>' attribute.
+	 * @see #getRemoteUser()
+	 * @generated
+	 */
+	void setRemoteUser(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Remote Password</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Remote Password</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Remote Password</em>' attribute.
+	 * @see #setRemotePassword(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWGenericUserMapping_RemotePassword()
+	 * @model
+	 * @generated
+	 */
+	String getRemotePassword();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericUserMapping#getRemotePassword <em>Remote Password</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Remote Password</em>' attribute.
+	 * @see #getRemotePassword()
+	 * @generated
+	 */
+	void setRemotePassword(String value);
+
+} // LUWGenericUserMapping
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWGenericWrapper.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWGenericWrapper.java
new file mode 100644
index 0000000..cb005c0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWGenericWrapper.java
@@ -0,0 +1,54 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWGenericWrapper.java,v 1.7 2007/01/15 18:40:05 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Generic Wrapper</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericWrapper#getGenericServers <em>Generic Servers</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWGenericWrapper()
+ * @model
+ * @generated
+ */
+public interface LUWGenericWrapper extends LUWWrapper {
+	/**
+	 * Returns the value of the '<em><b>Generic Servers</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericServer}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericServer#getGenericWrapper <em>Generic Wrapper</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Generic Servers</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Generic Servers</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWGenericWrapper_GenericServers()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericServer#getGenericWrapper
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericServer" opposite="genericWrapper" transient="true" volatile="true"
+	 * @generated
+	 */
+	EList getGenericServers();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model kind="operation" many="false"
+	 * @generated
+	 */
+	EList getServers();
+
+} // LUWGenericWrapper
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWGlobalVariable.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWGlobalVariable.java
new file mode 100644
index 0000000..df473ab
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWGlobalVariable.java
@@ -0,0 +1,112 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWGlobalVariable.java,v 1.1 2009/01/31 00:22:40 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema;
+
+import org.eclipse.datatools.modelbase.sql.schema.TypedElement;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Global Variable</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGlobalVariable#getDefaultValue <em>Default Value</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGlobalVariable#isIsConstant <em>Is Constant</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGlobalVariable#getSchema <em>Schema</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWGlobalVariable()
+ * @model
+ * @generated
+ */
+public interface LUWGlobalVariable extends TypedElement {
+	/**
+	 * Returns the value of the '<em><b>Default Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Default Value</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Default Value</em>' attribute.
+	 * @see #setDefaultValue(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWGlobalVariable_DefaultValue()
+	 * @model
+	 * @generated
+	 */
+	String getDefaultValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGlobalVariable#getDefaultValue <em>Default Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Default Value</em>' attribute.
+	 * @see #getDefaultValue()
+	 * @generated
+	 */
+	void setDefaultValue(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Is Constant</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Is Constant</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Is Constant</em>' attribute.
+	 * @see #setIsConstant(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWGlobalVariable_IsConstant()
+	 * @model
+	 * @generated
+	 */
+	boolean isIsConstant();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGlobalVariable#isIsConstant <em>Is Constant</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Is Constant</em>' attribute.
+	 * @see #isIsConstant()
+	 * @generated
+	 */
+	void setIsConstant(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Schema</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getGlobalVariables <em>Global Variables</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Schema</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Schema</em>' reference.
+	 * @see #setSchema(DB2Schema)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWGlobalVariable_Schema()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getGlobalVariables
+	 * @model opposite="globalVariables" required="true"
+	 * @generated
+	 */
+	DB2Schema getSchema();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGlobalVariable#getSchema <em>Schema</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Schema</em>' reference.
+	 * @see #getSchema()
+	 * @generated
+	 */
+	void setSchema(DB2Schema value);
+
+} // LUWGlobalVariable
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWIndex.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWIndex.java
new file mode 100644
index 0000000..5b01cc4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWIndex.java
@@ -0,0 +1,531 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWIndex.java,v 1.9 2009/07/22 20:11:50 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Index;
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Index</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getPCTFree <em>PCT Free</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getMinPCTFree <em>Min PCT Free</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isReverseScan <em>Reverse Scan</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isNotPartitioned <em>Not Partitioned</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getXmlPattern <em>Xml Pattern</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getAsSQLDataType <em>As SQL Data Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isAsSQLDataTypeHashed <em>As SQL Data Type Hashed</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isSystemRequired <em>System Required</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getPageSplitType <em>Page Split Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getLevel2PctFree <em>Level2 Pct Free</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getMinPctUsed <em>Min Pct Used</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getCompress <em>Compress</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isCollectStats <em>Collect Stats</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isSampledStats <em>Sampled Stats</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isDetailedStats <em>Detailed Stats</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isIgnoreInvalidValues <em>Ignore Invalid Values</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isExcludeNullKeys <em>Exclude Null Keys</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getTablespace <em>Tablespace</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWIndex()
+ * @model
+ * @generated
+ */
+public interface LUWIndex extends DB2Index {
+	/**
+	 * Returns the value of the '<em><b>PCT Free</b></em>' attribute.
+	 * The default value is <code>"-1"</code>.
+	 * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>PCT Free</em>' attribute isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+	 * @return the value of the '<em>PCT Free</em>' attribute.
+	 * @see #setPCTFree(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWIndex_PCTFree()
+	 * @model default="-1"
+	 * @generated
+	 */
+    int getPCTFree();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getPCTFree <em>PCT Free</em>}' attribute.
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>PCT Free</em>' attribute.
+	 * @see #getPCTFree()
+	 * @generated
+	 */
+    void setPCTFree(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Min PCT Free</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Min PCT Free</em>' attribute isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+	 * @return the value of the '<em>Min PCT Free</em>' attribute.
+	 * @see #setMinPCTFree(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWIndex_MinPCTFree()
+	 * @model
+	 * @generated
+	 */
+    int getMinPCTFree();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getMinPCTFree <em>Min PCT Free</em>}' attribute.
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Min PCT Free</em>' attribute.
+	 * @see #getMinPCTFree()
+	 * @generated
+	 */
+    void setMinPCTFree(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Reverse Scan</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Reverse Scan</em>' attribute isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+	 * @return the value of the '<em>Reverse Scan</em>' attribute.
+	 * @see #setReverseScan(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWIndex_ReverseScan()
+	 * @model
+	 * @generated
+	 */
+    boolean isReverseScan();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isReverseScan <em>Reverse Scan</em>}' attribute.
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Reverse Scan</em>' attribute.
+	 * @see #isReverseScan()
+	 * @generated
+	 */
+    void setReverseScan(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Not Partitioned</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Not Partitioned</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Not Partitioned</em>' attribute.
+	 * @see #setNotPartitioned(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWIndex_NotPartitioned()
+	 * @model
+	 * @generated
+	 */
+	boolean isNotPartitioned();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isNotPartitioned <em>Not Partitioned</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Not Partitioned</em>' attribute.
+	 * @see #isNotPartitioned()
+	 * @generated
+	 */
+	void setNotPartitioned(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Xml Pattern</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Xml Pattern</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Xml Pattern</em>' attribute.
+	 * @see #setXmlPattern(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWIndex_XmlPattern()
+	 * @model
+	 * @generated
+	 */
+	String getXmlPattern();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getXmlPattern <em>Xml Pattern</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Xml Pattern</em>' attribute.
+	 * @see #getXmlPattern()
+	 * @generated
+	 */
+	void setXmlPattern(String value);
+
+	/**
+	 * Returns the value of the '<em><b>As SQL Data Type</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>As SQL Data Type</em>' containment reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>As SQL Data Type</em>' containment reference.
+	 * @see #setAsSQLDataType(PredefinedDataType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWIndex_AsSQLDataType()
+	 * @model containment="true"
+	 * @generated
+	 */
+	PredefinedDataType getAsSQLDataType();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getAsSQLDataType <em>As SQL Data Type</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>As SQL Data Type</em>' containment reference.
+	 * @see #getAsSQLDataType()
+	 * @generated
+	 */
+	void setAsSQLDataType(PredefinedDataType value);
+
+	/**
+	 * Returns the value of the '<em><b>As SQL Data Type Hashed</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>As SQL Data Type Hashed</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>As SQL Data Type Hashed</em>' attribute.
+	 * @see #setAsSQLDataTypeHashed(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWIndex_AsSQLDataTypeHashed()
+	 * @model
+	 * @generated
+	 */
+	boolean isAsSQLDataTypeHashed();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isAsSQLDataTypeHashed <em>As SQL Data Type Hashed</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>As SQL Data Type Hashed</em>' attribute.
+	 * @see #isAsSQLDataTypeHashed()
+	 * @generated
+	 */
+	void setAsSQLDataTypeHashed(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>System Required</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>System Required</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>System Required</em>' attribute.
+	 * @see #setSystemRequired(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWIndex_SystemRequired()
+	 * @model
+	 * @generated
+	 */
+	boolean isSystemRequired();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isSystemRequired <em>System Required</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>System Required</em>' attribute.
+	 * @see #isSystemRequired()
+	 * @generated
+	 */
+	void setSystemRequired(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Page Split Type</b></em>' attribute.
+	 * The default value is <code>"SYMMETRIC"</code>.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndexPageSplitType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Page Split Type</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Page Split Type</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndexPageSplitType
+	 * @see #setPageSplitType(LUWIndexPageSplitType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWIndex_PageSplitType()
+	 * @model default="SYMMETRIC"
+	 * @generated
+	 */
+	LUWIndexPageSplitType getPageSplitType();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getPageSplitType <em>Page Split Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Page Split Type</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndexPageSplitType
+	 * @see #getPageSplitType()
+	 * @generated
+	 */
+	void setPageSplitType(LUWIndexPageSplitType value);
+
+	/**
+	 * Returns the value of the '<em><b>Level2 Pct Free</b></em>' attribute.
+	 * The default value is <code>"-1"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Level2 Pct Free</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Level2 Pct Free</em>' attribute.
+	 * @see #setLevel2PctFree(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWIndex_Level2PctFree()
+	 * @model default="-1"
+	 * @generated
+	 */
+	int getLevel2PctFree();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getLevel2PctFree <em>Level2 Pct Free</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Level2 Pct Free</em>' attribute.
+	 * @see #getLevel2PctFree()
+	 * @generated
+	 */
+	void setLevel2PctFree(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Min Pct Used</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Min Pct Used</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Min Pct Used</em>' attribute.
+	 * @see #setMinPctUsed(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWIndex_MinPctUsed()
+	 * @model
+	 * @generated
+	 */
+	int getMinPctUsed();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getMinPctUsed <em>Min Pct Used</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Min Pct Used</em>' attribute.
+	 * @see #getMinPctUsed()
+	 * @generated
+	 */
+	void setMinPctUsed(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Compress</b></em>' attribute.
+	 * The default value is <code>"NO"</code>.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndexCompressType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Compress</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Compress</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndexCompressType
+	 * @see #setCompress(LUWIndexCompressType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWIndex_Compress()
+	 * @model default="NO"
+	 * @generated
+	 */
+	LUWIndexCompressType getCompress();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getCompress <em>Compress</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Compress</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndexCompressType
+	 * @see #getCompress()
+	 * @generated
+	 */
+	void setCompress(LUWIndexCompressType value);
+
+	/**
+	 * Returns the value of the '<em><b>Collect Stats</b></em>' attribute.
+	 * The default value is <code>"true"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Collect Stats</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Collect Stats</em>' attribute.
+	 * @see #setCollectStats(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWIndex_CollectStats()
+	 * @model default="true"
+	 * @generated
+	 */
+	boolean isCollectStats();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isCollectStats <em>Collect Stats</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Collect Stats</em>' attribute.
+	 * @see #isCollectStats()
+	 * @generated
+	 */
+	void setCollectStats(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Sampled Stats</b></em>' attribute.
+	 * The default value is <code>"true"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Sampled Stats</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Sampled Stats</em>' attribute.
+	 * @see #setSampledStats(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWIndex_SampledStats()
+	 * @model default="true"
+	 * @generated
+	 */
+	boolean isSampledStats();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isSampledStats <em>Sampled Stats</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Sampled Stats</em>' attribute.
+	 * @see #isSampledStats()
+	 * @generated
+	 */
+	void setSampledStats(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Detailed Stats</b></em>' attribute.
+	 * The default value is <code>"true"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Detailed Stats</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Detailed Stats</em>' attribute.
+	 * @see #setDetailedStats(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWIndex_DetailedStats()
+	 * @model default="true"
+	 * @generated
+	 */
+	boolean isDetailedStats();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isDetailedStats <em>Detailed Stats</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Detailed Stats</em>' attribute.
+	 * @see #isDetailedStats()
+	 * @generated
+	 */
+	void setDetailedStats(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Ignore Invalid Values</b></em>' attribute.
+	 * The default value is <code>"true"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Ignore Invalid Values</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Ignore Invalid Values</em>' attribute.
+	 * @see #setIgnoreInvalidValues(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWIndex_IgnoreInvalidValues()
+	 * @model default="true"
+	 * @generated
+	 */
+	boolean isIgnoreInvalidValues();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isIgnoreInvalidValues <em>Ignore Invalid Values</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Ignore Invalid Values</em>' attribute.
+	 * @see #isIgnoreInvalidValues()
+	 * @generated
+	 */
+	void setIgnoreInvalidValues(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Exclude Null Keys</b></em>' attribute.
+	 * The default value is <code>"false"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Exclude Null Keys</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Exclude Null Keys</em>' attribute.
+	 * @see #setExcludeNullKeys(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWIndex_ExcludeNullKeys()
+	 * @model default="false"
+	 * @generated
+	 */
+	boolean isExcludeNullKeys();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isExcludeNullKeys <em>Exclude Null Keys</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Exclude Null Keys</em>' attribute.
+	 * @see #isExcludeNullKeys()
+	 * @generated
+	 */
+	void setExcludeNullKeys(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Tablespace</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getIndexes <em>Indexes</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Tablespace</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Tablespace</em>' reference.
+	 * @see #setTablespace(LUWTableSpace)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWIndex_Tablespace()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getIndexes
+	 * @model opposite="indexes"
+	 * @generated
+	 */
+	LUWTableSpace getTablespace();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getTablespace <em>Tablespace</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Tablespace</em>' reference.
+	 * @see #getTablespace()
+	 * @generated
+	 */
+	void setTablespace(LUWTableSpace value);
+
+} // LUWIndex
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWIndexCompressType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWIndexCompressType.java
new file mode 100644
index 0000000..f500262
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWIndexCompressType.java
@@ -0,0 +1,178 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Index Compress Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWIndexCompressType()
+ * @model
+ * @generated
+ */
+public final class LUWIndexCompressType extends AbstractEnumerator {
+	/**
+	 * The '<em><b>NO SELECTION</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>NO SELECTION</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #NO_SELECTION_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int NO_SELECTION = 0;
+
+	/**
+	 * The '<em><b>NO</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>NO</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #NO_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int NO = 1;
+
+	/**
+	 * The '<em><b>YES</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>YES</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #YES_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int YES = 2;
+
+	/**
+	 * The '<em><b>NO SELECTION</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #NO_SELECTION
+	 * @generated
+	 * @ordered
+	 */
+	public static final LUWIndexCompressType NO_SELECTION_LITERAL = new LUWIndexCompressType(NO_SELECTION, "NO_SELECTION", "NO_SELECTION"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>NO</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #NO
+	 * @generated
+	 * @ordered
+	 */
+	public static final LUWIndexCompressType NO_LITERAL = new LUWIndexCompressType(NO, "NO", "NO"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>YES</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #YES
+	 * @generated
+	 * @ordered
+	 */
+	public static final LUWIndexCompressType YES_LITERAL = new LUWIndexCompressType(YES, "YES", "YES"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * An array of all the '<em><b>Index Compress Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final LUWIndexCompressType[] VALUES_ARRAY =
+		new LUWIndexCompressType[] {
+			NO_SELECTION_LITERAL,
+			NO_LITERAL,
+			YES_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Index Compress Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Index Compress Type</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LUWIndexCompressType get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			LUWIndexCompressType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Index Compress Type</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LUWIndexCompressType getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			LUWIndexCompressType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Index Compress Type</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LUWIndexCompressType get(int value) {
+		switch (value) {
+			case NO_SELECTION: return NO_SELECTION_LITERAL;
+			case NO: return NO_LITERAL;
+			case YES: return YES_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private LUWIndexCompressType(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //LUWIndexCompressType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWIndexPageSplitType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWIndexPageSplitType.java
new file mode 100644
index 0000000..f16a311
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWIndexPageSplitType.java
@@ -0,0 +1,205 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Index Page Split Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWIndexPageSplitType()
+ * @model
+ * @generated
+ */
+public final class LUWIndexPageSplitType extends AbstractEnumerator {
+	/**
+	 * The '<em><b>NO SELECTION</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>NO SELECTION</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #NO_SELECTION_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int NO_SELECTION = 0;
+
+	/**
+	 * The '<em><b>SYMMETRIC</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>SYMMETRIC</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #SYMMETRIC_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int SYMMETRIC = 1;
+
+	/**
+	 * The '<em><b>HIGH</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>HIGH</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #HIGH_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int HIGH = 2;
+
+	/**
+	 * The '<em><b>LOW</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>LOW</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #LOW_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int LOW = 3;
+
+	/**
+	 * The '<em><b>NO SELECTION</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #NO_SELECTION
+	 * @generated
+	 * @ordered
+	 */
+	public static final LUWIndexPageSplitType NO_SELECTION_LITERAL = new LUWIndexPageSplitType(NO_SELECTION, "NO_SELECTION", "NO_SELECTION"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>SYMMETRIC</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #SYMMETRIC
+	 * @generated
+	 * @ordered
+	 */
+	public static final LUWIndexPageSplitType SYMMETRIC_LITERAL = new LUWIndexPageSplitType(SYMMETRIC, "SYMMETRIC", "SYMMETRIC"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>HIGH</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #HIGH
+	 * @generated
+	 * @ordered
+	 */
+	public static final LUWIndexPageSplitType HIGH_LITERAL = new LUWIndexPageSplitType(HIGH, "HIGH", "HIGH"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>LOW</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #LOW
+	 * @generated
+	 * @ordered
+	 */
+	public static final LUWIndexPageSplitType LOW_LITERAL = new LUWIndexPageSplitType(LOW, "LOW", "LOW"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * An array of all the '<em><b>Index Page Split Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final LUWIndexPageSplitType[] VALUES_ARRAY =
+		new LUWIndexPageSplitType[] {
+			NO_SELECTION_LITERAL,
+			SYMMETRIC_LITERAL,
+			HIGH_LITERAL,
+			LOW_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Index Page Split Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Index Page Split Type</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LUWIndexPageSplitType get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			LUWIndexPageSplitType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Index Page Split Type</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LUWIndexPageSplitType getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			LUWIndexPageSplitType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Index Page Split Type</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LUWIndexPageSplitType get(int value) {
+		switch (value) {
+			case NO_SELECTION: return NO_SELECTION_LITERAL;
+			case SYMMETRIC: return SYMMETRIC_LITERAL;
+			case HIGH: return HIGH_LITERAL;
+			case LOW: return LOW_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private LUWIndexPageSplitType(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //LUWIndexPageSplitType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWMaterializedQueryTable.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWMaterializedQueryTable.java
new file mode 100644
index 0000000..47e976a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWMaterializedQueryTable.java
@@ -0,0 +1,22 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWMaterializedQueryTable.java,v 1.5 2007/01/15 18:40:06 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Materialized Query Table</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWMaterializedQueryTable()
+ * @model
+ * @generated
+ */
+public interface LUWMaterializedQueryTable extends DB2MaterializedQueryTable, LUWStorageTable {
+} // LUWMaterializedQueryTable
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWMember.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWMember.java
new file mode 100644
index 0000000..07b800c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWMember.java
@@ -0,0 +1,160 @@
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Member;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Member</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMember#getType <em>Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMember#getAlert <em>Alert</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMember#getDbPartitionNum <em>Db Partition Num</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMember#getLogicalPort <em>Logical Port</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMember#getNetName <em>Net Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWMember()
+ * @model
+ * @generated
+ */
+public interface LUWMember extends DB2Member {
+	/**
+	 * Returns the value of the '<em><b>Type</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMemberType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Type</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Type</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMemberType
+	 * @see #setType(LUWMemberType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWMember_Type()
+	 * @model
+	 * @generated
+	 */
+	LUWMemberType getType();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMember#getType <em>Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Type</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMemberType
+	 * @see #getType()
+	 * @generated
+	 */
+	void setType(LUWMemberType value);
+
+	/**
+	 * Returns the value of the '<em><b>Alert</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Alert</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Alert</em>' attribute.
+	 * @see #setAlert(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWMember_Alert()
+	 * @model
+	 * @generated
+	 */
+	String getAlert();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMember#getAlert <em>Alert</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Alert</em>' attribute.
+	 * @see #getAlert()
+	 * @generated
+	 */
+	void setAlert(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Db Partition Num</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Db Partition Num</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Db Partition Num</em>' attribute.
+	 * @see #setDbPartitionNum(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWMember_DbPartitionNum()
+	 * @model
+	 * @generated
+	 */
+	int getDbPartitionNum();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMember#getDbPartitionNum <em>Db Partition Num</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Db Partition Num</em>' attribute.
+	 * @see #getDbPartitionNum()
+	 * @generated
+	 */
+	void setDbPartitionNum(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Logical Port</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Logical Port</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Logical Port</em>' attribute.
+	 * @see #setLogicalPort(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWMember_LogicalPort()
+	 * @model
+	 * @generated
+	 */
+	int getLogicalPort();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMember#getLogicalPort <em>Logical Port</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Logical Port</em>' attribute.
+	 * @see #getLogicalPort()
+	 * @generated
+	 */
+	void setLogicalPort(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Net Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Net Name</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Net Name</em>' attribute.
+	 * @see #setNetName(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWMember_NetName()
+	 * @model
+	 * @generated
+	 */
+	String getNetName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMember#getNetName <em>Net Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Net Name</em>' attribute.
+	 * @see #getNetName()
+	 * @generated
+	 */
+	void setNetName(String value);
+
+} // LUWMember
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWMemberType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWMemberType.java
new file mode 100644
index 0000000..df6aaa9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWMemberType.java
@@ -0,0 +1,145 @@
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Member Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWMemberType()
+ * @model
+ * @generated
+ */
+public final class LUWMemberType extends AbstractEnumerator {
+	/**
+	 * The '<em><b>MEMBER</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>MEMBER</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #MEMBER_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int MEMBER = 0;
+
+	/**
+	 * The '<em><b>CF</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>CF</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #CF_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int CF = 1;
+
+	/**
+	 * The '<em><b>MEMBER</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #MEMBER
+	 * @generated
+	 * @ordered
+	 */
+	public static final LUWMemberType MEMBER_LITERAL = new LUWMemberType(MEMBER, "MEMBER", "MEMBER"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>CF</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #CF
+	 * @generated
+	 * @ordered
+	 */
+	public static final LUWMemberType CF_LITERAL = new LUWMemberType(CF, "CF", "CF"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * An array of all the '<em><b>Member Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final LUWMemberType[] VALUES_ARRAY =
+		new LUWMemberType[] {
+			MEMBER_LITERAL,
+			CF_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Member Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Member Type</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LUWMemberType get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			LUWMemberType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Member Type</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LUWMemberType getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			LUWMemberType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Member Type</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LUWMemberType get(int value) {
+		switch (value) {
+			case MEMBER: return MEMBER_LITERAL;
+			case CF: return CF_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private LUWMemberType(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //LUWMemberType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModule.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModule.java
new file mode 100644
index 0000000..0aa0bca
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModule.java
@@ -0,0 +1,109 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWModule.java,v 1.4 2009/03/06 22:38:09 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.SourceDialect;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Module</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule#getDialect <em>Dialect</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule#getOwningSchema <em>Owning Schema</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule#getModuleObjects <em>Module Objects</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWModule()
+ * @model
+ * @generated
+ */
+public interface LUWModule extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Dialect</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.model.SourceDialect}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Dialect</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Dialect</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.SourceDialect
+	 * @see #setDialect(SourceDialect)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWModule_Dialect()
+	 * @model
+	 * @generated
+	 */
+	SourceDialect getDialect();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule#getDialect <em>Dialect</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Dialect</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.SourceDialect
+	 * @see #getDialect()
+	 * @generated
+	 */
+	void setDialect(SourceDialect value);
+
+	/**
+	 * Returns the value of the '<em><b>Owning Schema</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getModules <em>Modules</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Owning Schema</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Owning Schema</em>' reference.
+	 * @see #setOwningSchema(DB2Schema)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWModule_OwningSchema()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getModules
+	 * @model opposite="modules" required="true"
+	 * @generated
+	 */
+	DB2Schema getOwningSchema();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule#getOwningSchema <em>Owning Schema</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Owning Schema</em>' reference.
+	 * @see #getOwningSchema()
+	 * @generated
+	 */
+	void setOwningSchema(DB2Schema value);
+
+	/**
+	 * Returns the value of the '<em><b>Module Objects</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject#getModule <em>Module</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Module Objects</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Module Objects</em>' containment reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWModule_ModuleObjects()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject#getModule
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject" opposite="module" containment="true"
+	 * @generated
+	 */
+	EList getModuleObjects();
+
+} // LUWModule
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleArrayDataType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleArrayDataType.java
new file mode 100644
index 0000000..ae0b7b3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleArrayDataType.java
@@ -0,0 +1,22 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWModuleArrayDataType.java,v 1.2 2009/02/16 19:01:34 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.datatypes.ArrayDataType;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Module Array Data Type</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWModuleArrayDataType()
+ * @model
+ * @generated
+ */
+public interface LUWModuleArrayDataType extends LUWArrayDataType, LUWModuleType {
+} // LUWModuleArrayDataType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleCondition.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleCondition.java
new file mode 100644
index 0000000..6d861a8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleCondition.java
@@ -0,0 +1,54 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWModuleCondition.java,v 1.1 2009/01/31 00:22:40 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Module Condition</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleCondition#getSqlstate <em>Sqlstate</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWModuleCondition()
+ * @model
+ * @generated
+ */
+public interface LUWModuleCondition extends SQLObject, LUWModuleObject {
+	/**
+	 * Returns the value of the '<em><b>Sqlstate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Sqlstate</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Sqlstate</em>' attribute.
+	 * @see #setSqlstate(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWModuleCondition_Sqlstate()
+	 * @model
+	 * @generated
+	 */
+	String getSqlstate();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleCondition#getSqlstate <em>Sqlstate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Sqlstate</em>' attribute.
+	 * @see #getSqlstate()
+	 * @generated
+	 */
+	void setSqlstate(String value);
+
+} // LUWModuleCondition
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleCursorDataType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleCursorDataType.java
new file mode 100644
index 0000000..493a6d0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleCursorDataType.java
@@ -0,0 +1,21 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWModuleCursorDataType.java,v 1.1 2009/02/27 18:42:01 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Module Cursor Data Type</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWModuleCursorDataType()
+ * @model
+ * @generated
+ */
+public interface LUWModuleCursorDataType extends LUWCursorDataType, LUWModuleType {
+} // LUWModuleCursorDataType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleDistinctType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleDistinctType.java
new file mode 100644
index 0000000..c6e7172
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleDistinctType.java
@@ -0,0 +1,22 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWModuleDistinctType.java,v 1.1 2009/01/31 00:22:40 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.datatypes.DistinctUserDefinedType;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Module Distinct Type</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWModuleDistinctType()
+ * @model
+ * @generated
+ */
+public interface LUWModuleDistinctType extends DistinctUserDefinedType, LUWModuleType {
+} // LUWModuleDistinctType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleFunction.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleFunction.java
new file mode 100644
index 0000000..5fce419
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleFunction.java
@@ -0,0 +1,54 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWModuleFunction.java,v 1.1 2009/01/31 00:22:40 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2UserDefinedFunction;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Module Function</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleFunction#isImplemented <em>Implemented</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWModuleFunction()
+ * @model
+ * @generated
+ */
+public interface LUWModuleFunction extends DB2UserDefinedFunction, LUWModuleObject {
+	/**
+	 * Returns the value of the '<em><b>Implemented</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Implemented</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Implemented</em>' attribute.
+	 * @see #setImplemented(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWModuleFunction_Implemented()
+	 * @model
+	 * @generated
+	 */
+	boolean isImplemented();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleFunction#isImplemented <em>Implemented</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Implemented</em>' attribute.
+	 * @see #isImplemented()
+	 * @generated
+	 */
+	void setImplemented(boolean value);
+
+} // LUWModuleFunction
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleGlobalVariable.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleGlobalVariable.java
new file mode 100644
index 0000000..524f33e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleGlobalVariable.java
@@ -0,0 +1,21 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWModuleGlobalVariable.java,v 1.1 2009/01/31 00:22:40 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Module Global Variable</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWModuleGlobalVariable()
+ * @model
+ * @generated
+ */
+public interface LUWModuleGlobalVariable extends LUWGlobalVariable, LUWModuleObject {
+} // LUWModuleGlobalVariable
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleObject.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleObject.java
new file mode 100644
index 0000000..6555ca8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleObject.java
@@ -0,0 +1,83 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWModuleObject.java,v 1.1 2009/01/31 00:22:40 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Module Object</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject#isPublished <em>Published</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject#getModule <em>Module</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWModuleObject()
+ * @model interface="true" abstract="true"
+ * @generated
+ */
+public interface LUWModuleObject extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Published</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Published</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Published</em>' attribute.
+	 * @see #setPublished(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWModuleObject_Published()
+	 * @model
+	 * @generated
+	 */
+	boolean isPublished();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject#isPublished <em>Published</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Published</em>' attribute.
+	 * @see #isPublished()
+	 * @generated
+	 */
+	void setPublished(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Module</b></em>' container reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule#getModuleObjects <em>Module Objects</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Module</em>' container reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Module</em>' container reference.
+	 * @see #setModule(LUWModule)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWModuleObject_Module()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule#getModuleObjects
+	 * @model opposite="moduleObjects" required="true"
+	 * @generated
+	 */
+	LUWModule getModule();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject#getModule <em>Module</em>}' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Module</em>' container reference.
+	 * @see #getModule()
+	 * @generated
+	 */
+	void setModule(LUWModule value);
+
+} // LUWModuleObject
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleProcedure.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleProcedure.java
new file mode 100644
index 0000000..e238b39
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleProcedure.java
@@ -0,0 +1,54 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWModuleProcedure.java,v 1.1 2009/01/31 00:22:40 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Module Procedure</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleProcedure#isImplemented <em>Implemented</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWModuleProcedure()
+ * @model
+ * @generated
+ */
+public interface LUWModuleProcedure extends DB2Procedure, LUWModuleObject {
+	/**
+	 * Returns the value of the '<em><b>Implemented</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Implemented</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Implemented</em>' attribute.
+	 * @see #setImplemented(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWModuleProcedure_Implemented()
+	 * @model
+	 * @generated
+	 */
+	boolean isImplemented();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleProcedure#isImplemented <em>Implemented</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Implemented</em>' attribute.
+	 * @see #isImplemented()
+	 * @generated
+	 */
+	void setImplemented(boolean value);
+
+} // LUWModuleProcedure
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleRowDataType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleRowDataType.java
new file mode 100644
index 0000000..b3edf2e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleRowDataType.java
@@ -0,0 +1,22 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWModuleRowDataType.java,v 1.2 2009/02/16 19:01:34 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.datatypes.RowDataType;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Module Row Data Type</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWModuleRowDataType()
+ * @model
+ * @generated
+ */
+public interface LUWModuleRowDataType extends LUWRowDataType, LUWModuleType {
+} // LUWModuleRowDataType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleType.java
new file mode 100644
index 0000000..3419106
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWModuleType.java
@@ -0,0 +1,21 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWModuleType.java,v 1.1 2009/01/31 00:22:40 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Module Type</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWModuleType()
+ * @model interface="true" abstract="true"
+ * @generated
+ */
+public interface LUWModuleType extends LUWModuleObject {
+} // LUWModuleType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWNickname.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWNickname.java
new file mode 100644
index 0000000..28edd4e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWNickname.java
@@ -0,0 +1,86 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Nickname</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNickname#getRemoteDataSet <em>Remote Data Set</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNickname#getServer <em>Server</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWNickname()
+ * @model abstract="true"
+ * @generated
+ */
+public interface LUWNickname extends LUWTable{
+	/**
+	 * Returns the value of the '<em><b>Remote Data Set</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.RemoteDataSet#getNickname <em>Nickname</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Remote Data Set</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Remote Data Set</em>' reference.
+	 * @see #setRemoteDataSet(RemoteDataSet)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWNickname_RemoteDataSet()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.RemoteDataSet#getNickname
+	 * @model opposite="nickname" required="true"
+	 * @generated
+	 */
+	RemoteDataSet getRemoteDataSet();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNickname#getRemoteDataSet <em>Remote Data Set</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Remote Data Set</em>' reference.
+	 * @see #getRemoteDataSet()
+	 * @generated
+	 */
+	void setRemoteDataSet(RemoteDataSet value);
+
+	/**
+	 * Returns the value of the '<em><b>Server</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getNicknames <em>Nicknames</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Server</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Server</em>' reference.
+	 * @see #setServer(LUWServer)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWNickname_Server()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getNicknames
+	 * @model opposite="nicknames" required="true"
+	 * @generated
+	 */
+	LUWServer getServer();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNickname#getServer <em>Server</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Server</em>' reference.
+	 * @see #getServer()
+	 * @generated
+	 */
+	void setServer(LUWServer value);
+
+} // LUWNickname
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWNonRelationalNickname.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWNonRelationalNickname.java
new file mode 100644
index 0000000..ab7383e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWNonRelationalNickname.java
@@ -0,0 +1,45 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Non Relational Nickname</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalNickname#getNonRelServer <em>Non Rel Server</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWNonRelationalNickname()
+ * @model abstract="true"
+ * @generated
+ */
+public interface LUWNonRelationalNickname extends LUWNickname{
+	/**
+	 * Returns the value of the '<em><b>Non Rel Server</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalServer#getNonRelNicknames <em>Non Rel Nicknames</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Non Rel Server</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Non Rel Server</em>' reference.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWNonRelationalNickname_NonRelServer()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalServer#getNonRelNicknames
+	 * @model opposite="nonRelNicknames" required="true" transient="true" changeable="false" volatile="true"
+	 * @generated
+	 */
+	LUWNonRelationalServer getNonRelServer();
+
+} // LUWNonRelationalNickname
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWNonRelationalServer.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWNonRelationalServer.java
new file mode 100644
index 0000000..9d279f9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWNonRelationalServer.java
@@ -0,0 +1,65 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Non Relational Server</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalServer#getNonRelWrapper <em>Non Rel Wrapper</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalServer#getNonRelNicknames <em>Non Rel Nicknames</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWNonRelationalServer()
+ * @model abstract="true"
+ * @generated
+ */
+public interface LUWNonRelationalServer extends LUWServer{
+	/**
+	 * Returns the value of the '<em><b>Non Rel Wrapper</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalWrapper#getNonRelServers <em>Non Rel Servers</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Non Rel Wrapper</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Non Rel Wrapper</em>' reference.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWNonRelationalServer_NonRelWrapper()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalWrapper#getNonRelServers
+	 * @model opposite="nonRelServers" required="true" transient="true" changeable="false" volatile="true"
+	 * @generated
+	 */
+	LUWNonRelationalWrapper getNonRelWrapper();
+
+	/**
+	 * Returns the value of the '<em><b>Non Rel Nicknames</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalNickname}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalNickname#getNonRelServer <em>Non Rel Server</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Non Rel Nicknames</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Non Rel Nicknames</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWNonRelationalServer_NonRelNicknames()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalNickname#getNonRelServer
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalNickname" opposite="nonRelServer" transient="true" changeable="false" volatile="true"
+	 * @generated
+	 */
+	EList getNonRelNicknames();
+
+} // LUWNonRelationalServer
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWNonRelationalWrapper.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWNonRelationalWrapper.java
new file mode 100644
index 0000000..95a6423
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWNonRelationalWrapper.java
@@ -0,0 +1,47 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Non Relational Wrapper</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalWrapper#getNonRelServers <em>Non Rel Servers</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWNonRelationalWrapper()
+ * @model abstract="true"
+ * @generated
+ */
+public interface LUWNonRelationalWrapper extends LUWWrapper{
+	/**
+	 * Returns the value of the '<em><b>Non Rel Servers</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalServer}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalServer#getNonRelWrapper <em>Non Rel Wrapper</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Non Rel Servers</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Non Rel Servers</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWNonRelationalWrapper_NonRelServers()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalServer#getNonRelWrapper
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalServer" opposite="nonRelWrapper" transient="true" changeable="false" volatile="true"
+	 * @generated
+	 */
+	EList getNonRelServers();
+
+} // LUWNonRelationalWrapper
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWOption.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWOption.java
new file mode 100644
index 0000000..c030b47
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWOption.java
@@ -0,0 +1,54 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWOption.java,v 1.8 2007/10/12 23:05:35 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Option</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption#getValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWOption()
+ * @model
+ * @generated
+ */
+public interface LUWOption extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Value</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Value</em>' attribute.
+	 * @see #setValue(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWOption_Value()
+	 * @model
+	 * @generated
+	 */
+	String getValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption#getValue <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Value</em>' attribute.
+	 * @see #getValue()
+	 * @generated
+	 */
+	void setValue(String value);
+
+} // LUWOption
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWPackage.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWPackage.java
new file mode 100644
index 0000000..fb40f45
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWPackage.java
@@ -0,0 +1,21869 @@
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataTypesPackage;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesPackage;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * DB2 LUW Model is the OO representation of the concepts defined in the: DB2 UDB for Linux, UNIX, Windows version 8.1 - SQL Reference
+ * <!-- end-model-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface LUWPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "luw"; //$NON-NLS-1$
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///org.eclipse.datatools.enablement.ibm.db2.luw.model.ecore"; //$NON-NLS-1$
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "LUW"; //$NON-NLS-1$
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	LUWPackage eINSTANCE = org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionGroupImpl <em>Partition Group</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionGroupImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWPartitionGroup()
+	 * @generated
+	 */
+	int LUW_PARTITION_GROUP = 0;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_GROUP__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_GROUP__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_GROUP__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_GROUP__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_GROUP__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_GROUP__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_GROUP__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_GROUP__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Partitions</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_GROUP__PARTITIONS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Table Spaces</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_GROUP__TABLE_SPACES = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Database</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_GROUP__DATABASE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Buffer Pool</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_GROUP__BUFFER_POOL = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The number of structural features of the '<em>Partition Group</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_GROUP_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 4;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl <em>Table Space</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWTableSpace()
+	 * @generated
+	 */
+	int LUW_TABLE_SPACE = 1;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Temporary Storage Tables</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__TEMPORARY_STORAGE_TABLES = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Tablespace Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__TABLESPACE_TYPE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Management Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__MANAGEMENT_TYPE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Extent Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__EXTENT_SIZE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Pre Fetch Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__PRE_FETCH_SIZE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Overhead</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__OVERHEAD = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Transfer Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__TRANSFER_RATE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Recover Dropped Table On</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__RECOVER_DROPPED_TABLE_ON = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 7;
+
+	/**
+	 * The feature id for the '<em><b>Page Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__PAGE_SIZE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 8;
+
+	/**
+	 * The feature id for the '<em><b>Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__SIZE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 9;
+
+	/**
+	 * The feature id for the '<em><b>Auto Resize</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__AUTO_RESIZE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 10;
+
+	/**
+	 * The feature id for the '<em><b>Initial Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__INITIAL_SIZE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 11;
+
+	/**
+	 * The feature id for the '<em><b>Increase Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__INCREASE_SIZE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 12;
+
+	/**
+	 * The feature id for the '<em><b>Maximum Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__MAXIMUM_SIZE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 13;
+
+	/**
+	 * The feature id for the '<em><b>Initial Size Unit</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__INITIAL_SIZE_UNIT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 14;
+
+	/**
+	 * The feature id for the '<em><b>Maximum Size Unit</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__MAXIMUM_SIZE_UNIT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 15;
+
+	/**
+	 * The feature id for the '<em><b>Increase Size Unit</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__INCREASE_SIZE_UNIT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 16;
+
+	/**
+	 * The feature id for the '<em><b>Increase Percent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__INCREASE_PERCENT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 17;
+
+	/**
+	 * The feature id for the '<em><b>File System Caching</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__FILE_SYSTEM_CACHING = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 18;
+
+	/**
+	 * The feature id for the '<em><b>Average Seek Time</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__AVERAGE_SEEK_TIME = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 19;
+
+	/**
+	 * The feature id for the '<em><b>Rotation Speed</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__ROTATION_SPEED = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 20;
+
+	/**
+	 * The feature id for the '<em><b>Transfer</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__TRANSFER = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 21;
+
+	/**
+	 * The feature id for the '<em><b>System Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__SYSTEM_TYPE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 22;
+
+	/**
+	 * The feature id for the '<em><b>Average Table Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__AVERAGE_TABLE_SIZE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 23;
+
+	/**
+	 * The feature id for the '<em><b>External Container Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__EXTERNAL_CONTAINER_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 24;
+
+	/**
+	 * The feature id for the '<em><b>Inherit Overhead</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__INHERIT_OVERHEAD = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 25;
+
+	/**
+	 * The feature id for the '<em><b>Inherit Transferate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__INHERIT_TRANSFERATE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 26;
+
+	/**
+	 * The feature id for the '<em><b>Rebalance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__REBALANCE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 27;
+
+	/**
+	 * The feature id for the '<em><b>Data Tag</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__DATA_TAG = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 28;
+
+	/**
+	 * The feature id for the '<em><b>Suspend Rebalance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__SUSPEND_REBALANCE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 29;
+
+	/**
+	 * The feature id for the '<em><b>Resume Rebalance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__RESUME_REBALANCE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 30;
+
+	/**
+	 * The feature id for the '<em><b>Group</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__GROUP = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 31;
+
+	/**
+	 * The feature id for the '<em><b>Containers</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__CONTAINERS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 32;
+
+	/**
+	 * The feature id for the '<em><b>Buffer Pool</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__BUFFER_POOL = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 33;
+
+	/**
+	 * The feature id for the '<em><b>Index Data Tables</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__INDEX_DATA_TABLES = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 34;
+
+	/**
+	 * The feature id for the '<em><b>LOB Data Tables</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__LOB_DATA_TABLES = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 35;
+
+	/**
+	 * The feature id for the '<em><b>Regular Data Tables</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__REGULAR_DATA_TABLES = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 36;
+
+	/**
+	 * The feature id for the '<em><b>Database</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__DATABASE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 37;
+
+	/**
+	 * The feature id for the '<em><b>LOB Data Partition</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__LOB_DATA_PARTITION = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 38;
+
+	/**
+	 * The feature id for the '<em><b>Regular Data Partition</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__REGULAR_DATA_PARTITION = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 39;
+
+	/**
+	 * The feature id for the '<em><b>Indexes</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__INDEXES = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 40;
+
+	/**
+	 * The feature id for the '<em><b>Index Data Partition</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__INDEX_DATA_PARTITION = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 41;
+
+	/**
+	 * The feature id for the '<em><b>Storage Group</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE__STORAGE_GROUP = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 42;
+
+	/**
+	 * The number of structural features of the '<em>Table Space</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_SPACE_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 43;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabasePartitionImpl <em>Database Partition</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabasePartitionImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWDatabasePartition()
+	 * @generated
+	 */
+	int LUW_DATABASE_PARTITION = 2;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PARTITION__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PARTITION__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PARTITION__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PARTITION__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PARTITION__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PARTITION__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PARTITION__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PARTITION__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Number</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PARTITION__NUMBER = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Port Number</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PARTITION__PORT_NUMBER = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Host Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PARTITION__HOST_NAME = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Switch Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PARTITION__SWITCH_NAME = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Catalog Partition</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PARTITION__CATALOG_PARTITION = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Group</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PARTITION__GROUP = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Buffer Pool</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PARTITION__BUFFER_POOL = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Containers</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PARTITION__CONTAINERS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 7;
+
+	/**
+	 * The feature id for the '<em><b>Size Exception</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PARTITION__SIZE_EXCEPTION = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 8;
+
+	/**
+	 * The number of structural features of the '<em>Database Partition</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PARTITION_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 9;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabaseContainerImpl <em>Database Container</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabaseContainerImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWDatabaseContainer()
+	 * @generated
+	 */
+	int LUW_DATABASE_CONTAINER = 3;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_CONTAINER__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_CONTAINER__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_CONTAINER__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_CONTAINER__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_CONTAINER__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_CONTAINER__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_CONTAINER__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_CONTAINER__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Container Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_CONTAINER__CONTAINER_TYPE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Size In Pages</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_CONTAINER__SIZE_IN_PAGES = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_CONTAINER__SIZE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Size Units</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_CONTAINER__SIZE_UNITS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Table Space</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_CONTAINER__TABLE_SPACE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Partitions</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_CONTAINER__PARTITIONS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 5;
+
+	/**
+	 * The number of structural features of the '<em>Database Container</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_CONTAINER_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 6;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWAdminServerImpl <em>Admin Server</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWAdminServerImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWAdminServer()
+	 * @generated
+	 */
+	int LUW_ADMIN_SERVER = 4;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ADMIN_SERVER__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ADMIN_SERVER__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ADMIN_SERVER__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ADMIN_SERVER__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ADMIN_SERVER__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ADMIN_SERVER__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ADMIN_SERVER__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ADMIN_SERVER__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Instances</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ADMIN_SERVER__INSTANCES = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Admin Server</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ADMIN_SERVER_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWBufferPoolImpl <em>Buffer Pool</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWBufferPoolImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWBufferPool()
+	 * @generated
+	 */
+	int LUW_BUFFER_POOL = 5;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Create Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL__CREATE_TYPE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL__SIZE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Page Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL__PAGE_SIZE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Block Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL__BLOCK_SIZE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Num Block Pages</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL__NUM_BLOCK_PAGES = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Extended Storage</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL__EXTENDED_STORAGE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Automatic</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL__AUTOMATIC = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Table Spaces</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL__TABLE_SPACES = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 7;
+
+	/**
+	 * The feature id for the '<em><b>Partitions</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL__PARTITIONS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 8;
+
+	/**
+	 * The feature id for the '<em><b>Partition Group</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL__PARTITION_GROUP = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 9;
+
+	/**
+	 * The feature id for the '<em><b>Database</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL__DATABASE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 10;
+
+	/**
+	 * The feature id for the '<em><b>Size Exception</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL__SIZE_EXCEPTION = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 11;
+
+	/**
+	 * The number of structural features of the '<em>Buffer Pool</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 12;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableImpl <em>Table</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWTable()
+	 * @generated
+	 */
+	int LUW_TABLE = 6;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__EANNOTATIONS = DB2ModelPackage.DB2_TABLE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__NAME = DB2ModelPackage.DB2_TABLE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__DEPENDENCIES = DB2ModelPackage.DB2_TABLE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__DESCRIPTION = DB2ModelPackage.DB2_TABLE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__LABEL = DB2ModelPackage.DB2_TABLE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__COMMENTS = DB2ModelPackage.DB2_TABLE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__EXTENSIONS = DB2ModelPackage.DB2_TABLE__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__PRIVILEGES = DB2ModelPackage.DB2_TABLE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Columns</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__COLUMNS = DB2ModelPackage.DB2_TABLE__COLUMNS;
+
+	/**
+	 * The feature id for the '<em><b>Supertable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__SUPERTABLE = DB2ModelPackage.DB2_TABLE__SUPERTABLE;
+
+	/**
+	 * The feature id for the '<em><b>Subtables</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__SUBTABLES = DB2ModelPackage.DB2_TABLE__SUBTABLES;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__SCHEMA = DB2ModelPackage.DB2_TABLE__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Udt</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__UDT = DB2ModelPackage.DB2_TABLE__UDT;
+
+	/**
+	 * The feature id for the '<em><b>Triggers</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__TRIGGERS = DB2ModelPackage.DB2_TABLE__TRIGGERS;
+
+	/**
+	 * The feature id for the '<em><b>Index</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__INDEX = DB2ModelPackage.DB2_TABLE__INDEX;
+
+	/**
+	 * The feature id for the '<em><b>Self Ref Column Generation</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__SELF_REF_COLUMN_GENERATION = DB2ModelPackage.DB2_TABLE__SELF_REF_COLUMN_GENERATION;
+
+	/**
+	 * The feature id for the '<em><b>Insertable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__INSERTABLE = DB2ModelPackage.DB2_TABLE__INSERTABLE;
+
+	/**
+	 * The feature id for the '<em><b>Updatable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__UPDATABLE = DB2ModelPackage.DB2_TABLE__UPDATABLE;
+
+	/**
+	 * The feature id for the '<em><b>Constraints</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__CONSTRAINTS = DB2ModelPackage.DB2_TABLE__CONSTRAINTS;
+
+	/**
+	 * The feature id for the '<em><b>Referencing Foreign Keys</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__REFERENCING_FOREIGN_KEYS = DB2ModelPackage.DB2_TABLE__REFERENCING_FOREIGN_KEYS;
+
+	/**
+	 * The feature id for the '<em><b>Data Capture</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__DATA_CAPTURE = DB2ModelPackage.DB2_TABLE__DATA_CAPTURE;
+
+	/**
+	 * The feature id for the '<em><b>Activate Row Access Control</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__ACTIVATE_ROW_ACCESS_CONTROL = DB2ModelPackage.DB2_TABLE__ACTIVATE_ROW_ACCESS_CONTROL;
+
+	/**
+	 * The feature id for the '<em><b>Activate Column Access Control</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__ACTIVATE_COLUMN_ACCESS_CONTROL = DB2ModelPackage.DB2_TABLE__ACTIVATE_COLUMN_ACCESS_CONTROL;
+
+	/**
+	 * The feature id for the '<em><b>Organize By</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__ORGANIZE_BY = DB2ModelPackage.DB2_TABLE__ORGANIZE_BY;
+
+	/**
+	 * The feature id for the '<em><b>Packages</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__PACKAGES = DB2ModelPackage.DB2_TABLE__PACKAGES;
+
+	/**
+	 * The feature id for the '<em><b>Periods</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__PERIODS = DB2ModelPackage.DB2_TABLE__PERIODS;
+
+	/**
+	 * The feature id for the '<em><b>History Table</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__HISTORY_TABLE = DB2ModelPackage.DB2_TABLE__HISTORY_TABLE;
+
+	/**
+	 * The feature id for the '<em><b>Temporal Table</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__TEMPORAL_TABLE = DB2ModelPackage.DB2_TABLE__TEMPORAL_TABLE;
+
+	/**
+	 * The feature id for the '<em><b>Masks</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__MASKS = DB2ModelPackage.DB2_TABLE__MASKS;
+
+	/**
+	 * The feature id for the '<em><b>Permissions</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__PERMISSIONS = DB2ModelPackage.DB2_TABLE__PERMISSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Value Compression</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__VALUE_COMPRESSION = DB2ModelPackage.DB2_TABLE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Row Compression</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__ROW_COMPRESSION = DB2ModelPackage.DB2_TABLE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Row Compression Empty</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__ROW_COMPRESSION_EMPTY = DB2ModelPackage.DB2_TABLE_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Compression Mode</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__COMPRESSION_MODE = DB2ModelPackage.DB2_TABLE_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Partition Key</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__PARTITION_KEY = DB2ModelPackage.DB2_TABLE_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Index Data Table Space</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__INDEX_DATA_TABLE_SPACE = DB2ModelPackage.DB2_TABLE_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>LOB Data Table Space</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__LOB_DATA_TABLE_SPACE = DB2ModelPackage.DB2_TABLE_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Regular Data Table Space</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__REGULAR_DATA_TABLE_SPACE = DB2ModelPackage.DB2_TABLE_FEATURE_COUNT + 7;
+
+	/**
+	 * The feature id for the '<em><b>Data Partitions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__DATA_PARTITIONS = DB2ModelPackage.DB2_TABLE_FEATURE_COUNT + 8;
+
+	/**
+	 * The feature id for the '<em><b>Data Partition Key</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__DATA_PARTITION_KEY = DB2ModelPackage.DB2_TABLE_FEATURE_COUNT + 9;
+
+	/**
+	 * The feature id for the '<em><b>PCT Free</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__PCT_FREE = DB2ModelPackage.DB2_TABLE_FEATURE_COUNT + 10;
+
+	/**
+	 * The feature id for the '<em><b>Restrict On Drop</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__RESTRICT_ON_DROP = DB2ModelPackage.DB2_TABLE_FEATURE_COUNT + 11;
+
+	/**
+	 * The feature id for the '<em><b>Partition Mode</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__PARTITION_MODE = DB2ModelPackage.DB2_TABLE_FEATURE_COUNT + 12;
+
+	/**
+	 * The feature id for the '<em><b>Append Mode</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__APPEND_MODE = DB2ModelPackage.DB2_TABLE_FEATURE_COUNT + 13;
+
+	/**
+	 * The feature id for the '<em><b>Log Mode</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__LOG_MODE = DB2ModelPackage.DB2_TABLE_FEATURE_COUNT + 14;
+
+	/**
+	 * The feature id for the '<em><b>Lock Size Row</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__LOCK_SIZE_ROW = DB2ModelPackage.DB2_TABLE_FEATURE_COUNT + 15;
+
+	/**
+	 * The feature id for the '<em><b>Volatile</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__VOLATILE = DB2ModelPackage.DB2_TABLE_FEATURE_COUNT + 16;
+
+	/**
+	 * The feature id for the '<em><b>Options</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__OPTIONS = DB2ModelPackage.DB2_TABLE_FEATURE_COUNT + 17;
+
+	/**
+	 * The feature id for the '<em><b>Security Policy</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE__SECURITY_POLICY = DB2ModelPackage.DB2_TABLE_FEATURE_COUNT + 18;
+
+	/**
+	 * The number of structural features of the '<em>Table</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TABLE_FEATURE_COUNT = DB2ModelPackage.DB2_TABLE_FEATURE_COUNT + 19;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWViewImpl <em>View</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWViewImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWView()
+	 * @generated
+	 */
+	int LUW_VIEW = 7;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_VIEW__EANNOTATIONS = DB2ModelPackage.DB2_VIEW__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_VIEW__NAME = DB2ModelPackage.DB2_VIEW__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_VIEW__DEPENDENCIES = DB2ModelPackage.DB2_VIEW__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_VIEW__DESCRIPTION = DB2ModelPackage.DB2_VIEW__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_VIEW__LABEL = DB2ModelPackage.DB2_VIEW__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_VIEW__COMMENTS = DB2ModelPackage.DB2_VIEW__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_VIEW__EXTENSIONS = DB2ModelPackage.DB2_VIEW__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_VIEW__PRIVILEGES = DB2ModelPackage.DB2_VIEW__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Columns</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_VIEW__COLUMNS = DB2ModelPackage.DB2_VIEW__COLUMNS;
+
+	/**
+	 * The feature id for the '<em><b>Supertable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_VIEW__SUPERTABLE = DB2ModelPackage.DB2_VIEW__SUPERTABLE;
+
+	/**
+	 * The feature id for the '<em><b>Subtables</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_VIEW__SUBTABLES = DB2ModelPackage.DB2_VIEW__SUBTABLES;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_VIEW__SCHEMA = DB2ModelPackage.DB2_VIEW__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Udt</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_VIEW__UDT = DB2ModelPackage.DB2_VIEW__UDT;
+
+	/**
+	 * The feature id for the '<em><b>Triggers</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_VIEW__TRIGGERS = DB2ModelPackage.DB2_VIEW__TRIGGERS;
+
+	/**
+	 * The feature id for the '<em><b>Index</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_VIEW__INDEX = DB2ModelPackage.DB2_VIEW__INDEX;
+
+	/**
+	 * The feature id for the '<em><b>Self Ref Column Generation</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_VIEW__SELF_REF_COLUMN_GENERATION = DB2ModelPackage.DB2_VIEW__SELF_REF_COLUMN_GENERATION;
+
+	/**
+	 * The feature id for the '<em><b>Insertable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_VIEW__INSERTABLE = DB2ModelPackage.DB2_VIEW__INSERTABLE;
+
+	/**
+	 * The feature id for the '<em><b>Updatable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_VIEW__UPDATABLE = DB2ModelPackage.DB2_VIEW__UPDATABLE;
+
+	/**
+	 * The feature id for the '<em><b>Query Expression</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_VIEW__QUERY_EXPRESSION = DB2ModelPackage.DB2_VIEW__QUERY_EXPRESSION;
+
+	/**
+	 * The feature id for the '<em><b>Check Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_VIEW__CHECK_TYPE = DB2ModelPackage.DB2_VIEW__CHECK_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Operative</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_VIEW__OPERATIVE = DB2ModelPackage.DB2_VIEW__OPERATIVE;
+
+	/**
+	 * The feature id for the '<em><b>Federated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_VIEW__FEDERATED = DB2ModelPackage.DB2_VIEW_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Optimize Query</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_VIEW__OPTIMIZE_QUERY = DB2ModelPackage.DB2_VIEW_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>View</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_VIEW_FEATURE_COUNT = DB2ModelPackage.DB2_VIEW_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionKeyImpl <em>Partition Key</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionKeyImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWPartitionKey()
+	 * @generated
+	 */
+	int LUW_PARTITION_KEY = 8;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_KEY__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_KEY__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_KEY__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_KEY__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_KEY__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_KEY__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_KEY__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_KEY__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Temporary Storage Table</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_KEY__TEMPORARY_STORAGE_TABLE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Partition Method</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_KEY__PARTITION_METHOD = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Table</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_KEY__TABLE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Columns</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_KEY__COLUMNS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The number of structural features of the '<em>Partition Key</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_KEY_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 4;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWNicknameImpl <em>Nickname</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWNicknameImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWNickname()
+	 * @generated
+	 */
+	int LUW_NICKNAME = 9;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__EANNOTATIONS = LUW_TABLE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__NAME = LUW_TABLE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__DEPENDENCIES = LUW_TABLE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__DESCRIPTION = LUW_TABLE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__LABEL = LUW_TABLE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__COMMENTS = LUW_TABLE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__EXTENSIONS = LUW_TABLE__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__PRIVILEGES = LUW_TABLE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Columns</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__COLUMNS = LUW_TABLE__COLUMNS;
+
+	/**
+	 * The feature id for the '<em><b>Supertable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__SUPERTABLE = LUW_TABLE__SUPERTABLE;
+
+	/**
+	 * The feature id for the '<em><b>Subtables</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__SUBTABLES = LUW_TABLE__SUBTABLES;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__SCHEMA = LUW_TABLE__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Udt</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__UDT = LUW_TABLE__UDT;
+
+	/**
+	 * The feature id for the '<em><b>Triggers</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__TRIGGERS = LUW_TABLE__TRIGGERS;
+
+	/**
+	 * The feature id for the '<em><b>Index</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__INDEX = LUW_TABLE__INDEX;
+
+	/**
+	 * The feature id for the '<em><b>Self Ref Column Generation</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__SELF_REF_COLUMN_GENERATION = LUW_TABLE__SELF_REF_COLUMN_GENERATION;
+
+	/**
+	 * The feature id for the '<em><b>Insertable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__INSERTABLE = LUW_TABLE__INSERTABLE;
+
+	/**
+	 * The feature id for the '<em><b>Updatable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__UPDATABLE = LUW_TABLE__UPDATABLE;
+
+	/**
+	 * The feature id for the '<em><b>Constraints</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__CONSTRAINTS = LUW_TABLE__CONSTRAINTS;
+
+	/**
+	 * The feature id for the '<em><b>Referencing Foreign Keys</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__REFERENCING_FOREIGN_KEYS = LUW_TABLE__REFERENCING_FOREIGN_KEYS;
+
+	/**
+	 * The feature id for the '<em><b>Data Capture</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__DATA_CAPTURE = LUW_TABLE__DATA_CAPTURE;
+
+	/**
+	 * The feature id for the '<em><b>Activate Row Access Control</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__ACTIVATE_ROW_ACCESS_CONTROL = LUW_TABLE__ACTIVATE_ROW_ACCESS_CONTROL;
+
+	/**
+	 * The feature id for the '<em><b>Activate Column Access Control</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__ACTIVATE_COLUMN_ACCESS_CONTROL = LUW_TABLE__ACTIVATE_COLUMN_ACCESS_CONTROL;
+
+	/**
+	 * The feature id for the '<em><b>Organize By</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__ORGANIZE_BY = LUW_TABLE__ORGANIZE_BY;
+
+	/**
+	 * The feature id for the '<em><b>Packages</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__PACKAGES = LUW_TABLE__PACKAGES;
+
+	/**
+	 * The feature id for the '<em><b>Periods</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__PERIODS = LUW_TABLE__PERIODS;
+
+	/**
+	 * The feature id for the '<em><b>History Table</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__HISTORY_TABLE = LUW_TABLE__HISTORY_TABLE;
+
+	/**
+	 * The feature id for the '<em><b>Temporal Table</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__TEMPORAL_TABLE = LUW_TABLE__TEMPORAL_TABLE;
+
+	/**
+	 * The feature id for the '<em><b>Masks</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__MASKS = LUW_TABLE__MASKS;
+
+	/**
+	 * The feature id for the '<em><b>Permissions</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__PERMISSIONS = LUW_TABLE__PERMISSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Value Compression</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__VALUE_COMPRESSION = LUW_TABLE__VALUE_COMPRESSION;
+
+	/**
+	 * The feature id for the '<em><b>Row Compression</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__ROW_COMPRESSION = LUW_TABLE__ROW_COMPRESSION;
+
+	/**
+	 * The feature id for the '<em><b>Row Compression Empty</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__ROW_COMPRESSION_EMPTY = LUW_TABLE__ROW_COMPRESSION_EMPTY;
+
+	/**
+	 * The feature id for the '<em><b>Compression Mode</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__COMPRESSION_MODE = LUW_TABLE__COMPRESSION_MODE;
+
+	/**
+	 * The feature id for the '<em><b>Partition Key</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__PARTITION_KEY = LUW_TABLE__PARTITION_KEY;
+
+	/**
+	 * The feature id for the '<em><b>Index Data Table Space</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__INDEX_DATA_TABLE_SPACE = LUW_TABLE__INDEX_DATA_TABLE_SPACE;
+
+	/**
+	 * The feature id for the '<em><b>LOB Data Table Space</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__LOB_DATA_TABLE_SPACE = LUW_TABLE__LOB_DATA_TABLE_SPACE;
+
+	/**
+	 * The feature id for the '<em><b>Regular Data Table Space</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__REGULAR_DATA_TABLE_SPACE = LUW_TABLE__REGULAR_DATA_TABLE_SPACE;
+
+	/**
+	 * The feature id for the '<em><b>Data Partitions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__DATA_PARTITIONS = LUW_TABLE__DATA_PARTITIONS;
+
+	/**
+	 * The feature id for the '<em><b>Data Partition Key</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__DATA_PARTITION_KEY = LUW_TABLE__DATA_PARTITION_KEY;
+
+	/**
+	 * The feature id for the '<em><b>PCT Free</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__PCT_FREE = LUW_TABLE__PCT_FREE;
+
+	/**
+	 * The feature id for the '<em><b>Restrict On Drop</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__RESTRICT_ON_DROP = LUW_TABLE__RESTRICT_ON_DROP;
+
+	/**
+	 * The feature id for the '<em><b>Partition Mode</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__PARTITION_MODE = LUW_TABLE__PARTITION_MODE;
+
+	/**
+	 * The feature id for the '<em><b>Append Mode</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__APPEND_MODE = LUW_TABLE__APPEND_MODE;
+
+	/**
+	 * The feature id for the '<em><b>Log Mode</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__LOG_MODE = LUW_TABLE__LOG_MODE;
+
+	/**
+	 * The feature id for the '<em><b>Lock Size Row</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__LOCK_SIZE_ROW = LUW_TABLE__LOCK_SIZE_ROW;
+
+	/**
+	 * The feature id for the '<em><b>Volatile</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__VOLATILE = LUW_TABLE__VOLATILE;
+
+	/**
+	 * The feature id for the '<em><b>Options</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__OPTIONS = LUW_TABLE__OPTIONS;
+
+	/**
+	 * The feature id for the '<em><b>Security Policy</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__SECURITY_POLICY = LUW_TABLE__SECURITY_POLICY;
+
+	/**
+	 * The feature id for the '<em><b>Remote Data Set</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__REMOTE_DATA_SET = LUW_TABLE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Server</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME__SERVER = LUW_TABLE_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Nickname</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NICKNAME_FEATURE_COUNT = LUW_TABLE_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWFunctionMappingImpl <em>Function Mapping</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWFunctionMappingImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWFunctionMapping()
+	 * @generated
+	 */
+	int LUW_FUNCTION_MAPPING = 10;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_FUNCTION_MAPPING__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_FUNCTION_MAPPING__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_FUNCTION_MAPPING__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_FUNCTION_MAPPING__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_FUNCTION_MAPPING__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_FUNCTION_MAPPING__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_FUNCTION_MAPPING__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_FUNCTION_MAPPING__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Server Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_FUNCTION_MAPPING__SERVER_TYPE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Server Version</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_FUNCTION_MAPPING__SERVER_VERSION = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Server Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_FUNCTION_MAPPING__SERVER_NAME = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Creation Time</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_FUNCTION_MAPPING__CREATION_TIME = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Disabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_FUNCTION_MAPPING__DISABLED = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Insts Per Invoc</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_FUNCTION_MAPPING__INSTS_PER_INVOC = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Insts Per Arg Byte</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_FUNCTION_MAPPING__INSTS_PER_ARG_BYTE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Ios Per Invoc</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_FUNCTION_MAPPING__IOS_PER_INVOC = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 7;
+
+	/**
+	 * The feature id for the '<em><b>Ios Per Arg Byte</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_FUNCTION_MAPPING__IOS_PER_ARG_BYTE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 8;
+
+	/**
+	 * The feature id for the '<em><b>Options</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_FUNCTION_MAPPING__OPTIONS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 9;
+
+	/**
+	 * The feature id for the '<em><b>Local Function</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_FUNCTION_MAPPING__LOCAL_FUNCTION = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 10;
+
+	/**
+	 * The feature id for the '<em><b>Remote Function</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_FUNCTION_MAPPING__REMOTE_FUNCTION = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 11;
+
+	/**
+	 * The feature id for the '<em><b>LUW Database</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_FUNCTION_MAPPING__LUW_DATABASE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 12;
+
+	/**
+	 * The number of structural features of the '<em>Function Mapping</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_FUNCTION_MAPPING_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 13;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWWrapperImpl <em>Wrapper</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWWrapperImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWWrapper()
+	 * @generated
+	 */
+	int LUW_WRAPPER = 11;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_WRAPPER__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_WRAPPER__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_WRAPPER__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_WRAPPER__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_WRAPPER__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_WRAPPER__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_WRAPPER__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_WRAPPER__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Version</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_WRAPPER__VERSION = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Library</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_WRAPPER__LIBRARY = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Fenced</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_WRAPPER__FENCED = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Wrapper Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_WRAPPER__WRAPPER_TYPE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Data Source</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_WRAPPER__DATA_SOURCE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Discovered Libraries</b></em>' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_WRAPPER__DISCOVERED_LIBRARIES = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Servers</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_WRAPPER__SERVERS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>LUW Database</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_WRAPPER__LUW_DATABASE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 7;
+
+	/**
+	 * The feature id for the '<em><b>Options</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_WRAPPER__OPTIONS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 8;
+
+	/**
+	 * The number of structural features of the '<em>Wrapper</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_WRAPPER_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 9;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWNonRelationalNicknameImpl <em>Non Relational Nickname</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWNonRelationalNicknameImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWNonRelationalNickname()
+	 * @generated
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME = 12;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__EANNOTATIONS = LUW_NICKNAME__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__NAME = LUW_NICKNAME__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__DEPENDENCIES = LUW_NICKNAME__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__DESCRIPTION = LUW_NICKNAME__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__LABEL = LUW_NICKNAME__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__COMMENTS = LUW_NICKNAME__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__EXTENSIONS = LUW_NICKNAME__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__PRIVILEGES = LUW_NICKNAME__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Columns</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__COLUMNS = LUW_NICKNAME__COLUMNS;
+
+	/**
+	 * The feature id for the '<em><b>Supertable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__SUPERTABLE = LUW_NICKNAME__SUPERTABLE;
+
+	/**
+	 * The feature id for the '<em><b>Subtables</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__SUBTABLES = LUW_NICKNAME__SUBTABLES;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__SCHEMA = LUW_NICKNAME__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Udt</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__UDT = LUW_NICKNAME__UDT;
+
+	/**
+	 * The feature id for the '<em><b>Triggers</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__TRIGGERS = LUW_NICKNAME__TRIGGERS;
+
+	/**
+	 * The feature id for the '<em><b>Index</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__INDEX = LUW_NICKNAME__INDEX;
+
+	/**
+	 * The feature id for the '<em><b>Self Ref Column Generation</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__SELF_REF_COLUMN_GENERATION = LUW_NICKNAME__SELF_REF_COLUMN_GENERATION;
+
+	/**
+	 * The feature id for the '<em><b>Insertable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__INSERTABLE = LUW_NICKNAME__INSERTABLE;
+
+	/**
+	 * The feature id for the '<em><b>Updatable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__UPDATABLE = LUW_NICKNAME__UPDATABLE;
+
+	/**
+	 * The feature id for the '<em><b>Constraints</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__CONSTRAINTS = LUW_NICKNAME__CONSTRAINTS;
+
+	/**
+	 * The feature id for the '<em><b>Referencing Foreign Keys</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__REFERENCING_FOREIGN_KEYS = LUW_NICKNAME__REFERENCING_FOREIGN_KEYS;
+
+	/**
+	 * The feature id for the '<em><b>Data Capture</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__DATA_CAPTURE = LUW_NICKNAME__DATA_CAPTURE;
+
+	/**
+	 * The feature id for the '<em><b>Activate Row Access Control</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__ACTIVATE_ROW_ACCESS_CONTROL = LUW_NICKNAME__ACTIVATE_ROW_ACCESS_CONTROL;
+
+	/**
+	 * The feature id for the '<em><b>Activate Column Access Control</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__ACTIVATE_COLUMN_ACCESS_CONTROL = LUW_NICKNAME__ACTIVATE_COLUMN_ACCESS_CONTROL;
+
+	/**
+	 * The feature id for the '<em><b>Organize By</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__ORGANIZE_BY = LUW_NICKNAME__ORGANIZE_BY;
+
+	/**
+	 * The feature id for the '<em><b>Packages</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__PACKAGES = LUW_NICKNAME__PACKAGES;
+
+	/**
+	 * The feature id for the '<em><b>Periods</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__PERIODS = LUW_NICKNAME__PERIODS;
+
+	/**
+	 * The feature id for the '<em><b>History Table</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__HISTORY_TABLE = LUW_NICKNAME__HISTORY_TABLE;
+
+	/**
+	 * The feature id for the '<em><b>Temporal Table</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__TEMPORAL_TABLE = LUW_NICKNAME__TEMPORAL_TABLE;
+
+	/**
+	 * The feature id for the '<em><b>Masks</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__MASKS = LUW_NICKNAME__MASKS;
+
+	/**
+	 * The feature id for the '<em><b>Permissions</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__PERMISSIONS = LUW_NICKNAME__PERMISSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Value Compression</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__VALUE_COMPRESSION = LUW_NICKNAME__VALUE_COMPRESSION;
+
+	/**
+	 * The feature id for the '<em><b>Row Compression</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__ROW_COMPRESSION = LUW_NICKNAME__ROW_COMPRESSION;
+
+	/**
+	 * The feature id for the '<em><b>Row Compression Empty</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__ROW_COMPRESSION_EMPTY = LUW_NICKNAME__ROW_COMPRESSION_EMPTY;
+
+	/**
+	 * The feature id for the '<em><b>Compression Mode</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__COMPRESSION_MODE = LUW_NICKNAME__COMPRESSION_MODE;
+
+	/**
+	 * The feature id for the '<em><b>Partition Key</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__PARTITION_KEY = LUW_NICKNAME__PARTITION_KEY;
+
+	/**
+	 * The feature id for the '<em><b>Index Data Table Space</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__INDEX_DATA_TABLE_SPACE = LUW_NICKNAME__INDEX_DATA_TABLE_SPACE;
+
+	/**
+	 * The feature id for the '<em><b>LOB Data Table Space</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__LOB_DATA_TABLE_SPACE = LUW_NICKNAME__LOB_DATA_TABLE_SPACE;
+
+	/**
+	 * The feature id for the '<em><b>Regular Data Table Space</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__REGULAR_DATA_TABLE_SPACE = LUW_NICKNAME__REGULAR_DATA_TABLE_SPACE;
+
+	/**
+	 * The feature id for the '<em><b>Data Partitions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__DATA_PARTITIONS = LUW_NICKNAME__DATA_PARTITIONS;
+
+	/**
+	 * The feature id for the '<em><b>Data Partition Key</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__DATA_PARTITION_KEY = LUW_NICKNAME__DATA_PARTITION_KEY;
+
+	/**
+	 * The feature id for the '<em><b>PCT Free</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__PCT_FREE = LUW_NICKNAME__PCT_FREE;
+
+	/**
+	 * The feature id for the '<em><b>Restrict On Drop</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__RESTRICT_ON_DROP = LUW_NICKNAME__RESTRICT_ON_DROP;
+
+	/**
+	 * The feature id for the '<em><b>Partition Mode</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__PARTITION_MODE = LUW_NICKNAME__PARTITION_MODE;
+
+	/**
+	 * The feature id for the '<em><b>Append Mode</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__APPEND_MODE = LUW_NICKNAME__APPEND_MODE;
+
+	/**
+	 * The feature id for the '<em><b>Log Mode</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__LOG_MODE = LUW_NICKNAME__LOG_MODE;
+
+	/**
+	 * The feature id for the '<em><b>Lock Size Row</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__LOCK_SIZE_ROW = LUW_NICKNAME__LOCK_SIZE_ROW;
+
+	/**
+	 * The feature id for the '<em><b>Volatile</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__VOLATILE = LUW_NICKNAME__VOLATILE;
+
+	/**
+	 * The feature id for the '<em><b>Options</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__OPTIONS = LUW_NICKNAME__OPTIONS;
+
+	/**
+	 * The feature id for the '<em><b>Security Policy</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__SECURITY_POLICY = LUW_NICKNAME__SECURITY_POLICY;
+
+	/**
+	 * The feature id for the '<em><b>Remote Data Set</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__REMOTE_DATA_SET = LUW_NICKNAME__REMOTE_DATA_SET;
+
+	/**
+	 * The feature id for the '<em><b>Server</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__SERVER = LUW_NICKNAME__SERVER;
+
+	/**
+	 * The feature id for the '<em><b>Non Rel Server</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME__NON_REL_SERVER = LUW_NICKNAME_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Non Relational Nickname</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_NICKNAME_FEATURE_COUNT = LUW_NICKNAME_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWServerImpl <em>Server</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWServerImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWServer()
+	 * @generated
+	 */
+	int LUW_SERVER = 18;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SERVER__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SERVER__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SERVER__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SERVER__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SERVER__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SERVER__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SERVER__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SERVER__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Server Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SERVER__SERVER_TYPE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Server Version</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SERVER__SERVER_VERSION = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>User Mappings</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SERVER__USER_MAPPINGS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Wrapper</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SERVER__WRAPPER = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Nicknames</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SERVER__NICKNAMES = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>LUW Database</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SERVER__LUW_DATABASE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Options</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SERVER__OPTIONS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Remote Server</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SERVER__REMOTE_SERVER = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 7;
+
+	/**
+	 * The number of structural features of the '<em>Server</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SERVER_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 8;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWNonRelationalServerImpl <em>Non Relational Server</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWNonRelationalServerImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWNonRelationalServer()
+	 * @generated
+	 */
+	int LUW_NON_RELATIONAL_SERVER = 13;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_SERVER__EANNOTATIONS = LUW_SERVER__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_SERVER__NAME = LUW_SERVER__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_SERVER__DEPENDENCIES = LUW_SERVER__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_SERVER__DESCRIPTION = LUW_SERVER__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_SERVER__LABEL = LUW_SERVER__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_SERVER__COMMENTS = LUW_SERVER__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_SERVER__EXTENSIONS = LUW_SERVER__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_SERVER__PRIVILEGES = LUW_SERVER__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Server Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_SERVER__SERVER_TYPE = LUW_SERVER__SERVER_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Server Version</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_SERVER__SERVER_VERSION = LUW_SERVER__SERVER_VERSION;
+
+	/**
+	 * The feature id for the '<em><b>User Mappings</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_SERVER__USER_MAPPINGS = LUW_SERVER__USER_MAPPINGS;
+
+	/**
+	 * The feature id for the '<em><b>Wrapper</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_SERVER__WRAPPER = LUW_SERVER__WRAPPER;
+
+	/**
+	 * The feature id for the '<em><b>Nicknames</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_SERVER__NICKNAMES = LUW_SERVER__NICKNAMES;
+
+	/**
+	 * The feature id for the '<em><b>LUW Database</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_SERVER__LUW_DATABASE = LUW_SERVER__LUW_DATABASE;
+
+	/**
+	 * The feature id for the '<em><b>Options</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_SERVER__OPTIONS = LUW_SERVER__OPTIONS;
+
+	/**
+	 * The feature id for the '<em><b>Remote Server</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_SERVER__REMOTE_SERVER = LUW_SERVER__REMOTE_SERVER;
+
+	/**
+	 * The feature id for the '<em><b>Non Rel Wrapper</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_SERVER__NON_REL_WRAPPER = LUW_SERVER_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Non Rel Nicknames</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_SERVER__NON_REL_NICKNAMES = LUW_SERVER_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Non Relational Server</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_SERVER_FEATURE_COUNT = LUW_SERVER_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWNonRelationalWrapperImpl <em>Non Relational Wrapper</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWNonRelationalWrapperImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWNonRelationalWrapper()
+	 * @generated
+	 */
+	int LUW_NON_RELATIONAL_WRAPPER = 14;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_WRAPPER__EANNOTATIONS = LUW_WRAPPER__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_WRAPPER__NAME = LUW_WRAPPER__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_WRAPPER__DEPENDENCIES = LUW_WRAPPER__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_WRAPPER__DESCRIPTION = LUW_WRAPPER__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_WRAPPER__LABEL = LUW_WRAPPER__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_WRAPPER__COMMENTS = LUW_WRAPPER__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_WRAPPER__EXTENSIONS = LUW_WRAPPER__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_WRAPPER__PRIVILEGES = LUW_WRAPPER__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Version</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_WRAPPER__VERSION = LUW_WRAPPER__VERSION;
+
+	/**
+	 * The feature id for the '<em><b>Library</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_WRAPPER__LIBRARY = LUW_WRAPPER__LIBRARY;
+
+	/**
+	 * The feature id for the '<em><b>Fenced</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_WRAPPER__FENCED = LUW_WRAPPER__FENCED;
+
+	/**
+	 * The feature id for the '<em><b>Wrapper Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_WRAPPER__WRAPPER_TYPE = LUW_WRAPPER__WRAPPER_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Data Source</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_WRAPPER__DATA_SOURCE = LUW_WRAPPER__DATA_SOURCE;
+
+	/**
+	 * The feature id for the '<em><b>Discovered Libraries</b></em>' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_WRAPPER__DISCOVERED_LIBRARIES = LUW_WRAPPER__DISCOVERED_LIBRARIES;
+
+	/**
+	 * The feature id for the '<em><b>Servers</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_WRAPPER__SERVERS = LUW_WRAPPER__SERVERS;
+
+	/**
+	 * The feature id for the '<em><b>LUW Database</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_WRAPPER__LUW_DATABASE = LUW_WRAPPER__LUW_DATABASE;
+
+	/**
+	 * The feature id for the '<em><b>Options</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_WRAPPER__OPTIONS = LUW_WRAPPER__OPTIONS;
+
+	/**
+	 * The feature id for the '<em><b>Non Rel Servers</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_WRAPPER__NON_REL_SERVERS = LUW_WRAPPER_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Non Relational Wrapper</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_NON_RELATIONAL_WRAPPER_FEATURE_COUNT = LUW_WRAPPER_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRelationalNicknameImpl <em>Relational Nickname</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRelationalNicknameImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWRelationalNickname()
+	 * @generated
+	 */
+	int LUW_RELATIONAL_NICKNAME = 15;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__EANNOTATIONS = LUW_NICKNAME__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__NAME = LUW_NICKNAME__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__DEPENDENCIES = LUW_NICKNAME__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__DESCRIPTION = LUW_NICKNAME__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__LABEL = LUW_NICKNAME__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__COMMENTS = LUW_NICKNAME__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__EXTENSIONS = LUW_NICKNAME__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__PRIVILEGES = LUW_NICKNAME__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Columns</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__COLUMNS = LUW_NICKNAME__COLUMNS;
+
+	/**
+	 * The feature id for the '<em><b>Supertable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__SUPERTABLE = LUW_NICKNAME__SUPERTABLE;
+
+	/**
+	 * The feature id for the '<em><b>Subtables</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__SUBTABLES = LUW_NICKNAME__SUBTABLES;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__SCHEMA = LUW_NICKNAME__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Udt</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__UDT = LUW_NICKNAME__UDT;
+
+	/**
+	 * The feature id for the '<em><b>Triggers</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__TRIGGERS = LUW_NICKNAME__TRIGGERS;
+
+	/**
+	 * The feature id for the '<em><b>Index</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__INDEX = LUW_NICKNAME__INDEX;
+
+	/**
+	 * The feature id for the '<em><b>Self Ref Column Generation</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__SELF_REF_COLUMN_GENERATION = LUW_NICKNAME__SELF_REF_COLUMN_GENERATION;
+
+	/**
+	 * The feature id for the '<em><b>Insertable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__INSERTABLE = LUW_NICKNAME__INSERTABLE;
+
+	/**
+	 * The feature id for the '<em><b>Updatable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__UPDATABLE = LUW_NICKNAME__UPDATABLE;
+
+	/**
+	 * The feature id for the '<em><b>Constraints</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__CONSTRAINTS = LUW_NICKNAME__CONSTRAINTS;
+
+	/**
+	 * The feature id for the '<em><b>Referencing Foreign Keys</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__REFERENCING_FOREIGN_KEYS = LUW_NICKNAME__REFERENCING_FOREIGN_KEYS;
+
+	/**
+	 * The feature id for the '<em><b>Data Capture</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__DATA_CAPTURE = LUW_NICKNAME__DATA_CAPTURE;
+
+	/**
+	 * The feature id for the '<em><b>Activate Row Access Control</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__ACTIVATE_ROW_ACCESS_CONTROL = LUW_NICKNAME__ACTIVATE_ROW_ACCESS_CONTROL;
+
+	/**
+	 * The feature id for the '<em><b>Activate Column Access Control</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__ACTIVATE_COLUMN_ACCESS_CONTROL = LUW_NICKNAME__ACTIVATE_COLUMN_ACCESS_CONTROL;
+
+	/**
+	 * The feature id for the '<em><b>Organize By</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__ORGANIZE_BY = LUW_NICKNAME__ORGANIZE_BY;
+
+	/**
+	 * The feature id for the '<em><b>Packages</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__PACKAGES = LUW_NICKNAME__PACKAGES;
+
+	/**
+	 * The feature id for the '<em><b>Periods</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__PERIODS = LUW_NICKNAME__PERIODS;
+
+	/**
+	 * The feature id for the '<em><b>History Table</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__HISTORY_TABLE = LUW_NICKNAME__HISTORY_TABLE;
+
+	/**
+	 * The feature id for the '<em><b>Temporal Table</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__TEMPORAL_TABLE = LUW_NICKNAME__TEMPORAL_TABLE;
+
+	/**
+	 * The feature id for the '<em><b>Masks</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__MASKS = LUW_NICKNAME__MASKS;
+
+	/**
+	 * The feature id for the '<em><b>Permissions</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__PERMISSIONS = LUW_NICKNAME__PERMISSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Value Compression</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__VALUE_COMPRESSION = LUW_NICKNAME__VALUE_COMPRESSION;
+
+	/**
+	 * The feature id for the '<em><b>Row Compression</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__ROW_COMPRESSION = LUW_NICKNAME__ROW_COMPRESSION;
+
+	/**
+	 * The feature id for the '<em><b>Row Compression Empty</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__ROW_COMPRESSION_EMPTY = LUW_NICKNAME__ROW_COMPRESSION_EMPTY;
+
+	/**
+	 * The feature id for the '<em><b>Compression Mode</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__COMPRESSION_MODE = LUW_NICKNAME__COMPRESSION_MODE;
+
+	/**
+	 * The feature id for the '<em><b>Partition Key</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__PARTITION_KEY = LUW_NICKNAME__PARTITION_KEY;
+
+	/**
+	 * The feature id for the '<em><b>Index Data Table Space</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__INDEX_DATA_TABLE_SPACE = LUW_NICKNAME__INDEX_DATA_TABLE_SPACE;
+
+	/**
+	 * The feature id for the '<em><b>LOB Data Table Space</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__LOB_DATA_TABLE_SPACE = LUW_NICKNAME__LOB_DATA_TABLE_SPACE;
+
+	/**
+	 * The feature id for the '<em><b>Regular Data Table Space</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__REGULAR_DATA_TABLE_SPACE = LUW_NICKNAME__REGULAR_DATA_TABLE_SPACE;
+
+	/**
+	 * The feature id for the '<em><b>Data Partitions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__DATA_PARTITIONS = LUW_NICKNAME__DATA_PARTITIONS;
+
+	/**
+	 * The feature id for the '<em><b>Data Partition Key</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__DATA_PARTITION_KEY = LUW_NICKNAME__DATA_PARTITION_KEY;
+
+	/**
+	 * The feature id for the '<em><b>PCT Free</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__PCT_FREE = LUW_NICKNAME__PCT_FREE;
+
+	/**
+	 * The feature id for the '<em><b>Restrict On Drop</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__RESTRICT_ON_DROP = LUW_NICKNAME__RESTRICT_ON_DROP;
+
+	/**
+	 * The feature id for the '<em><b>Partition Mode</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__PARTITION_MODE = LUW_NICKNAME__PARTITION_MODE;
+
+	/**
+	 * The feature id for the '<em><b>Append Mode</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__APPEND_MODE = LUW_NICKNAME__APPEND_MODE;
+
+	/**
+	 * The feature id for the '<em><b>Log Mode</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__LOG_MODE = LUW_NICKNAME__LOG_MODE;
+
+	/**
+	 * The feature id for the '<em><b>Lock Size Row</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__LOCK_SIZE_ROW = LUW_NICKNAME__LOCK_SIZE_ROW;
+
+	/**
+	 * The feature id for the '<em><b>Volatile</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__VOLATILE = LUW_NICKNAME__VOLATILE;
+
+	/**
+	 * The feature id for the '<em><b>Options</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__OPTIONS = LUW_NICKNAME__OPTIONS;
+
+	/**
+	 * The feature id for the '<em><b>Security Policy</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__SECURITY_POLICY = LUW_NICKNAME__SECURITY_POLICY;
+
+	/**
+	 * The feature id for the '<em><b>Remote Data Set</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__REMOTE_DATA_SET = LUW_NICKNAME__REMOTE_DATA_SET;
+
+	/**
+	 * The feature id for the '<em><b>Server</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__SERVER = LUW_NICKNAME__SERVER;
+
+	/**
+	 * The feature id for the '<em><b>Rel Server</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME__REL_SERVER = LUW_NICKNAME_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Relational Nickname</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_NICKNAME_FEATURE_COUNT = LUW_NICKNAME_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWUserMappingImpl <em>User Mapping</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWUserMappingImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWUserMapping()
+	 * @generated
+	 */
+	int LUW_USER_MAPPING = 20;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_USER_MAPPING__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_USER_MAPPING__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_USER_MAPPING__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_USER_MAPPING__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_USER_MAPPING__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_USER_MAPPING__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_USER_MAPPING__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_USER_MAPPING__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Local Auth Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_USER_MAPPING__LOCAL_AUTH_ID = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Server</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_USER_MAPPING__SERVER = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Options</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_USER_MAPPING__OPTIONS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>User Mapping</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_USER_MAPPING_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGenericUserMappingImpl <em>Generic User Mapping</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGenericUserMappingImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWGenericUserMapping()
+	 * @generated
+	 */
+	int LUW_GENERIC_USER_MAPPING = 16;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_USER_MAPPING__EANNOTATIONS = LUW_USER_MAPPING__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_USER_MAPPING__NAME = LUW_USER_MAPPING__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_USER_MAPPING__DEPENDENCIES = LUW_USER_MAPPING__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_USER_MAPPING__DESCRIPTION = LUW_USER_MAPPING__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_USER_MAPPING__LABEL = LUW_USER_MAPPING__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_USER_MAPPING__COMMENTS = LUW_USER_MAPPING__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_USER_MAPPING__EXTENSIONS = LUW_USER_MAPPING__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_USER_MAPPING__PRIVILEGES = LUW_USER_MAPPING__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Local Auth Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_USER_MAPPING__LOCAL_AUTH_ID = LUW_USER_MAPPING__LOCAL_AUTH_ID;
+
+	/**
+	 * The feature id for the '<em><b>Server</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_USER_MAPPING__SERVER = LUW_USER_MAPPING__SERVER;
+
+	/**
+	 * The feature id for the '<em><b>Options</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_USER_MAPPING__OPTIONS = LUW_USER_MAPPING__OPTIONS;
+
+	/**
+	 * The feature id for the '<em><b>Remote User</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_USER_MAPPING__REMOTE_USER = LUW_USER_MAPPING_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Remote Password</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_USER_MAPPING__REMOTE_PASSWORD = LUW_USER_MAPPING_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Generic User Mapping</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_USER_MAPPING_FEATURE_COUNT = LUW_USER_MAPPING_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRelationalWrapperImpl <em>Relational Wrapper</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRelationalWrapperImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWRelationalWrapper()
+	 * @generated
+	 */
+	int LUW_RELATIONAL_WRAPPER = 17;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_WRAPPER__EANNOTATIONS = LUW_WRAPPER__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_WRAPPER__NAME = LUW_WRAPPER__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_WRAPPER__DEPENDENCIES = LUW_WRAPPER__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_WRAPPER__DESCRIPTION = LUW_WRAPPER__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_WRAPPER__LABEL = LUW_WRAPPER__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_WRAPPER__COMMENTS = LUW_WRAPPER__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_WRAPPER__EXTENSIONS = LUW_WRAPPER__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_WRAPPER__PRIVILEGES = LUW_WRAPPER__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Version</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_WRAPPER__VERSION = LUW_WRAPPER__VERSION;
+
+	/**
+	 * The feature id for the '<em><b>Library</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_WRAPPER__LIBRARY = LUW_WRAPPER__LIBRARY;
+
+	/**
+	 * The feature id for the '<em><b>Fenced</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_WRAPPER__FENCED = LUW_WRAPPER__FENCED;
+
+	/**
+	 * The feature id for the '<em><b>Wrapper Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_WRAPPER__WRAPPER_TYPE = LUW_WRAPPER__WRAPPER_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Data Source</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_WRAPPER__DATA_SOURCE = LUW_WRAPPER__DATA_SOURCE;
+
+	/**
+	 * The feature id for the '<em><b>Discovered Libraries</b></em>' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_WRAPPER__DISCOVERED_LIBRARIES = LUW_WRAPPER__DISCOVERED_LIBRARIES;
+
+	/**
+	 * The feature id for the '<em><b>Servers</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_WRAPPER__SERVERS = LUW_WRAPPER__SERVERS;
+
+	/**
+	 * The feature id for the '<em><b>LUW Database</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_WRAPPER__LUW_DATABASE = LUW_WRAPPER__LUW_DATABASE;
+
+	/**
+	 * The feature id for the '<em><b>Options</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_WRAPPER__OPTIONS = LUW_WRAPPER__OPTIONS;
+
+	/**
+	 * The feature id for the '<em><b>Rel Servers</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_WRAPPER__REL_SERVERS = LUW_WRAPPER_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Relational Wrapper</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_WRAPPER_FEATURE_COUNT = LUW_WRAPPER_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTypeMappingImpl <em>Type Mapping</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTypeMappingImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWTypeMapping()
+	 * @generated
+	 */
+	int LUW_TYPE_MAPPING = 19;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TYPE_MAPPING__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TYPE_MAPPING__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TYPE_MAPPING__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TYPE_MAPPING__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TYPE_MAPPING__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TYPE_MAPPING__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TYPE_MAPPING__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TYPE_MAPPING__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Server Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TYPE_MAPPING__SERVER_TYPE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Server Vesion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TYPE_MAPPING__SERVER_VESION = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Server Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TYPE_MAPPING__SERVER_NAME = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Creation Time</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TYPE_MAPPING__CREATION_TIME = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Local Type</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TYPE_MAPPING__LOCAL_TYPE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Remote Type</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TYPE_MAPPING__REMOTE_TYPE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 5;
+
+	/**
+	 * The number of structural features of the '<em>Type Mapping</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TYPE_MAPPING_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 6;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWOptionImpl <em>Option</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWOptionImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWOption()
+	 * @generated
+	 */
+	int LUW_OPTION = 21;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_OPTION__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_OPTION__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_OPTION__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_OPTION__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_OPTION__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_OPTION__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_OPTION__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_OPTION__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_OPTION__VALUE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Option</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_OPTION_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRelationalServerImpl <em>Relational Server</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRelationalServerImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWRelationalServer()
+	 * @generated
+	 */
+	int LUW_RELATIONAL_SERVER = 22;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER__EANNOTATIONS = LUW_SERVER__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER__NAME = LUW_SERVER__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER__DEPENDENCIES = LUW_SERVER__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER__DESCRIPTION = LUW_SERVER__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER__LABEL = LUW_SERVER__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER__COMMENTS = LUW_SERVER__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER__EXTENSIONS = LUW_SERVER__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER__PRIVILEGES = LUW_SERVER__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Server Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER__SERVER_TYPE = LUW_SERVER__SERVER_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Server Version</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER__SERVER_VERSION = LUW_SERVER__SERVER_VERSION;
+
+	/**
+	 * The feature id for the '<em><b>User Mappings</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER__USER_MAPPINGS = LUW_SERVER__USER_MAPPINGS;
+
+	/**
+	 * The feature id for the '<em><b>Wrapper</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER__WRAPPER = LUW_SERVER__WRAPPER;
+
+	/**
+	 * The feature id for the '<em><b>Nicknames</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER__NICKNAMES = LUW_SERVER__NICKNAMES;
+
+	/**
+	 * The feature id for the '<em><b>LUW Database</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER__LUW_DATABASE = LUW_SERVER__LUW_DATABASE;
+
+	/**
+	 * The feature id for the '<em><b>Options</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER__OPTIONS = LUW_SERVER__OPTIONS;
+
+	/**
+	 * The feature id for the '<em><b>Remote Server</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER__REMOTE_SERVER = LUW_SERVER__REMOTE_SERVER;
+
+	/**
+	 * The feature id for the '<em><b>Cpu Ratio</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER__CPU_RATIO = LUW_SERVER_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Io Ratio</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER__IO_RATIO = LUW_SERVER_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Comm Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER__COMM_RATE = LUW_SERVER_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Fold Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER__FOLD_ID = LUW_SERVER_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Fold PW</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER__FOLD_PW = LUW_SERVER_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Collating Sequence</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER__COLLATING_SEQUENCE = LUW_SERVER_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Pushdown</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER__PUSHDOWN = LUW_SERVER_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Node</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER__NODE = LUW_SERVER_FEATURE_COUNT + 7;
+
+	/**
+	 * The feature id for the '<em><b>Db Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER__DB_NAME = LUW_SERVER_FEATURE_COUNT + 8;
+
+	/**
+	 * The feature id for the '<em><b>Iud App Svpt Enforce</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER__IUD_APP_SVPT_ENFORCE = LUW_SERVER_FEATURE_COUNT + 9;
+
+	/**
+	 * The feature id for the '<em><b>Password</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER__PASSWORD = LUW_SERVER_FEATURE_COUNT + 10;
+
+	/**
+	 * The feature id for the '<em><b>Rel Nicknames</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER__REL_NICKNAMES = LUW_SERVER_FEATURE_COUNT + 11;
+
+	/**
+	 * The feature id for the '<em><b>Rel Wrapper</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER__REL_WRAPPER = LUW_SERVER_FEATURE_COUNT + 12;
+
+	/**
+	 * The number of structural features of the '<em>Relational Server</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_RELATIONAL_SERVER_FEATURE_COUNT = LUW_SERVER_FEATURE_COUNT + 13;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabaseImpl <em>Database</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabaseImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWDatabase()
+	 * @generated
+	 */
+	int LUW_DATABASE = 23;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE__EANNOTATIONS = DB2ModelPackage.DB2_DATABASE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE__NAME = DB2ModelPackage.DB2_DATABASE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE__DEPENDENCIES = DB2ModelPackage.DB2_DATABASE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE__DESCRIPTION = DB2ModelPackage.DB2_DATABASE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE__LABEL = DB2ModelPackage.DB2_DATABASE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE__COMMENTS = DB2ModelPackage.DB2_DATABASE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE__EXTENSIONS = DB2ModelPackage.DB2_DATABASE__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE__PRIVILEGES = DB2ModelPackage.DB2_DATABASE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Vendor</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE__VENDOR = DB2ModelPackage.DB2_DATABASE__VENDOR;
+
+	/**
+	 * The feature id for the '<em><b>Version</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE__VERSION = DB2ModelPackage.DB2_DATABASE__VERSION;
+
+	/**
+	 * The feature id for the '<em><b>Schemas</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE__SCHEMAS = DB2ModelPackage.DB2_DATABASE__SCHEMAS;
+
+	/**
+	 * The feature id for the '<em><b>Events</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE__EVENTS = DB2ModelPackage.DB2_DATABASE__EVENTS;
+
+	/**
+	 * The feature id for the '<em><b>Catalogs</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE__CATALOGS = DB2ModelPackage.DB2_DATABASE__CATALOGS;
+
+	/**
+	 * The feature id for the '<em><b>Authorization Ids</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE__AUTHORIZATION_IDS = DB2ModelPackage.DB2_DATABASE__AUTHORIZATION_IDS;
+
+	/**
+	 * The feature id for the '<em><b>Partitioned</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE__PARTITIONED = DB2ModelPackage.DB2_DATABASE__PARTITIONED;
+
+	/**
+	 * The feature id for the '<em><b>Default Organize By Row</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE__DEFAULT_ORGANIZE_BY_ROW = DB2ModelPackage.DB2_DATABASE__DEFAULT_ORGANIZE_BY_ROW;
+
+	/**
+	 * The feature id for the '<em><b>Federated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE__FEDERATED = DB2ModelPackage.DB2_DATABASE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Groups</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE__GROUPS = DB2ModelPackage.DB2_DATABASE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Wrappers</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE__WRAPPERS = DB2ModelPackage.DB2_DATABASE_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Servers</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE__SERVERS = DB2ModelPackage.DB2_DATABASE_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Function Mappings</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE__FUNCTION_MAPPINGS = DB2ModelPackage.DB2_DATABASE_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Type Mappings</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE__TYPE_MAPPINGS = DB2ModelPackage.DB2_DATABASE_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Reverse Type Mappings</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE__REVERSE_TYPE_MAPPINGS = DB2ModelPackage.DB2_DATABASE_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Bufferpools</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE__BUFFERPOOLS = DB2ModelPackage.DB2_DATABASE_FEATURE_COUNT + 7;
+
+	/**
+	 * The feature id for the '<em><b>Tablespaces</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE__TABLESPACES = DB2ModelPackage.DB2_DATABASE_FEATURE_COUNT + 8;
+
+	/**
+	 * The feature id for the '<em><b>Storage Groups</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE__STORAGE_GROUPS = DB2ModelPackage.DB2_DATABASE_FEATURE_COUNT + 9;
+
+	/**
+	 * The feature id for the '<em><b>Default Storage Group</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE__DEFAULT_STORAGE_GROUP = DB2ModelPackage.DB2_DATABASE_FEATURE_COUNT + 10;
+
+	/**
+	 * The number of structural features of the '<em>Database</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_FEATURE_COUNT = DB2ModelPackage.DB2_DATABASE_FEATURE_COUNT + 11;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWColumnImpl <em>Column</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWColumnImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWColumn()
+	 * @generated
+	 */
+	int LUW_COLUMN = 24;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__EANNOTATIONS = DB2ModelPackage.DB2_COLUMN__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__NAME = DB2ModelPackage.DB2_COLUMN__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__DEPENDENCIES = DB2ModelPackage.DB2_COLUMN__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__DESCRIPTION = DB2ModelPackage.DB2_COLUMN__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__LABEL = DB2ModelPackage.DB2_COLUMN__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__COMMENTS = DB2ModelPackage.DB2_COLUMN__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__EXTENSIONS = DB2ModelPackage.DB2_COLUMN__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__PRIVILEGES = DB2ModelPackage.DB2_COLUMN__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Contained Type</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__CONTAINED_TYPE = DB2ModelPackage.DB2_COLUMN__CONTAINED_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Referenced Type</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__REFERENCED_TYPE = DB2ModelPackage.DB2_COLUMN__REFERENCED_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Table</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__TABLE = DB2ModelPackage.DB2_COLUMN__TABLE;
+
+	/**
+	 * The feature id for the '<em><b>Identity Specifier</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__IDENTITY_SPECIFIER = DB2ModelPackage.DB2_COLUMN__IDENTITY_SPECIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Generate Expression</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__GENERATE_EXPRESSION = DB2ModelPackage.DB2_COLUMN__GENERATE_EXPRESSION;
+
+	/**
+	 * The feature id for the '<em><b>Implementation Dependent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__IMPLEMENTATION_DEPENDENT = DB2ModelPackage.DB2_COLUMN__IMPLEMENTATION_DEPENDENT;
+
+	/**
+	 * The feature id for the '<em><b>Nullable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__NULLABLE = DB2ModelPackage.DB2_COLUMN__NULLABLE;
+
+	/**
+	 * The feature id for the '<em><b>Default Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__DEFAULT_VALUE = DB2ModelPackage.DB2_COLUMN__DEFAULT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Scope Check</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__SCOPE_CHECK = DB2ModelPackage.DB2_COLUMN__SCOPE_CHECK;
+
+	/**
+	 * The feature id for the '<em><b>Scope Checked</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__SCOPE_CHECKED = DB2ModelPackage.DB2_COLUMN__SCOPE_CHECKED;
+
+	/**
+	 * The feature id for the '<em><b>Generation Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__GENERATION_TYPE = DB2ModelPackage.DB2_COLUMN__GENERATION_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Row Change Timestamp</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__ROW_CHANGE_TIMESTAMP = DB2ModelPackage.DB2_COLUMN__ROW_CHANGE_TIMESTAMP;
+
+	/**
+	 * The feature id for the '<em><b>Row Begin</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__ROW_BEGIN = DB2ModelPackage.DB2_COLUMN__ROW_BEGIN;
+
+	/**
+	 * The feature id for the '<em><b>Row End</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__ROW_END = DB2ModelPackage.DB2_COLUMN__ROW_END;
+
+	/**
+	 * The feature id for the '<em><b>Trans Start ID</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__TRANS_START_ID = DB2ModelPackage.DB2_COLUMN__TRANS_START_ID;
+
+	/**
+	 * The feature id for the '<em><b>Begin Period</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__BEGIN_PERIOD = DB2ModelPackage.DB2_COLUMN__BEGIN_PERIOD;
+
+	/**
+	 * The feature id for the '<em><b>End Period</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__END_PERIOD = DB2ModelPackage.DB2_COLUMN__END_PERIOD;
+
+	/**
+	 * The feature id for the '<em><b>Lob Logged</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__LOB_LOGGED = DB2ModelPackage.DB2_COLUMN_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Lob Compacted</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__LOB_COMPACTED = DB2ModelPackage.DB2_COLUMN_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Compression</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__COMPRESSION = DB2ModelPackage.DB2_COLUMN_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Inline Length</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__INLINE_LENGTH = DB2ModelPackage.DB2_COLUMN_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Hidden</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__HIDDEN = DB2ModelPackage.DB2_COLUMN_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Security Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__SECURITY_LABEL = DB2ModelPackage.DB2_COLUMN_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Options</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN__OPTIONS = DB2ModelPackage.DB2_COLUMN_FEATURE_COUNT + 6;
+
+	/**
+	 * The number of structural features of the '<em>Column</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_COLUMN_FEATURE_COUNT = DB2ModelPackage.DB2_COLUMN_FEATURE_COUNT + 7;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGenericNicknameImpl <em>Generic Nickname</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGenericNicknameImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWGenericNickname()
+	 * @generated
+	 */
+	int LUW_GENERIC_NICKNAME = 25;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__EANNOTATIONS = LUW_NICKNAME__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__NAME = LUW_NICKNAME__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__DEPENDENCIES = LUW_NICKNAME__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__DESCRIPTION = LUW_NICKNAME__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__LABEL = LUW_NICKNAME__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__COMMENTS = LUW_NICKNAME__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__EXTENSIONS = LUW_NICKNAME__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__PRIVILEGES = LUW_NICKNAME__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Columns</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__COLUMNS = LUW_NICKNAME__COLUMNS;
+
+	/**
+	 * The feature id for the '<em><b>Supertable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__SUPERTABLE = LUW_NICKNAME__SUPERTABLE;
+
+	/**
+	 * The feature id for the '<em><b>Subtables</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__SUBTABLES = LUW_NICKNAME__SUBTABLES;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__SCHEMA = LUW_NICKNAME__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Udt</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__UDT = LUW_NICKNAME__UDT;
+
+	/**
+	 * The feature id for the '<em><b>Triggers</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__TRIGGERS = LUW_NICKNAME__TRIGGERS;
+
+	/**
+	 * The feature id for the '<em><b>Index</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__INDEX = LUW_NICKNAME__INDEX;
+
+	/**
+	 * The feature id for the '<em><b>Self Ref Column Generation</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__SELF_REF_COLUMN_GENERATION = LUW_NICKNAME__SELF_REF_COLUMN_GENERATION;
+
+	/**
+	 * The feature id for the '<em><b>Insertable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__INSERTABLE = LUW_NICKNAME__INSERTABLE;
+
+	/**
+	 * The feature id for the '<em><b>Updatable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__UPDATABLE = LUW_NICKNAME__UPDATABLE;
+
+	/**
+	 * The feature id for the '<em><b>Constraints</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__CONSTRAINTS = LUW_NICKNAME__CONSTRAINTS;
+
+	/**
+	 * The feature id for the '<em><b>Referencing Foreign Keys</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__REFERENCING_FOREIGN_KEYS = LUW_NICKNAME__REFERENCING_FOREIGN_KEYS;
+
+	/**
+	 * The feature id for the '<em><b>Data Capture</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__DATA_CAPTURE = LUW_NICKNAME__DATA_CAPTURE;
+
+	/**
+	 * The feature id for the '<em><b>Activate Row Access Control</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__ACTIVATE_ROW_ACCESS_CONTROL = LUW_NICKNAME__ACTIVATE_ROW_ACCESS_CONTROL;
+
+	/**
+	 * The feature id for the '<em><b>Activate Column Access Control</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__ACTIVATE_COLUMN_ACCESS_CONTROL = LUW_NICKNAME__ACTIVATE_COLUMN_ACCESS_CONTROL;
+
+	/**
+	 * The feature id for the '<em><b>Organize By</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__ORGANIZE_BY = LUW_NICKNAME__ORGANIZE_BY;
+
+	/**
+	 * The feature id for the '<em><b>Packages</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__PACKAGES = LUW_NICKNAME__PACKAGES;
+
+	/**
+	 * The feature id for the '<em><b>Periods</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__PERIODS = LUW_NICKNAME__PERIODS;
+
+	/**
+	 * The feature id for the '<em><b>History Table</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__HISTORY_TABLE = LUW_NICKNAME__HISTORY_TABLE;
+
+	/**
+	 * The feature id for the '<em><b>Temporal Table</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__TEMPORAL_TABLE = LUW_NICKNAME__TEMPORAL_TABLE;
+
+	/**
+	 * The feature id for the '<em><b>Masks</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__MASKS = LUW_NICKNAME__MASKS;
+
+	/**
+	 * The feature id for the '<em><b>Permissions</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__PERMISSIONS = LUW_NICKNAME__PERMISSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Value Compression</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__VALUE_COMPRESSION = LUW_NICKNAME__VALUE_COMPRESSION;
+
+	/**
+	 * The feature id for the '<em><b>Row Compression</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__ROW_COMPRESSION = LUW_NICKNAME__ROW_COMPRESSION;
+
+	/**
+	 * The feature id for the '<em><b>Row Compression Empty</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__ROW_COMPRESSION_EMPTY = LUW_NICKNAME__ROW_COMPRESSION_EMPTY;
+
+	/**
+	 * The feature id for the '<em><b>Compression Mode</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__COMPRESSION_MODE = LUW_NICKNAME__COMPRESSION_MODE;
+
+	/**
+	 * The feature id for the '<em><b>Partition Key</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__PARTITION_KEY = LUW_NICKNAME__PARTITION_KEY;
+
+	/**
+	 * The feature id for the '<em><b>Index Data Table Space</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__INDEX_DATA_TABLE_SPACE = LUW_NICKNAME__INDEX_DATA_TABLE_SPACE;
+
+	/**
+	 * The feature id for the '<em><b>LOB Data Table Space</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__LOB_DATA_TABLE_SPACE = LUW_NICKNAME__LOB_DATA_TABLE_SPACE;
+
+	/**
+	 * The feature id for the '<em><b>Regular Data Table Space</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__REGULAR_DATA_TABLE_SPACE = LUW_NICKNAME__REGULAR_DATA_TABLE_SPACE;
+
+	/**
+	 * The feature id for the '<em><b>Data Partitions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__DATA_PARTITIONS = LUW_NICKNAME__DATA_PARTITIONS;
+
+	/**
+	 * The feature id for the '<em><b>Data Partition Key</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__DATA_PARTITION_KEY = LUW_NICKNAME__DATA_PARTITION_KEY;
+
+	/**
+	 * The feature id for the '<em><b>PCT Free</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__PCT_FREE = LUW_NICKNAME__PCT_FREE;
+
+	/**
+	 * The feature id for the '<em><b>Restrict On Drop</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__RESTRICT_ON_DROP = LUW_NICKNAME__RESTRICT_ON_DROP;
+
+	/**
+	 * The feature id for the '<em><b>Partition Mode</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__PARTITION_MODE = LUW_NICKNAME__PARTITION_MODE;
+
+	/**
+	 * The feature id for the '<em><b>Append Mode</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__APPEND_MODE = LUW_NICKNAME__APPEND_MODE;
+
+	/**
+	 * The feature id for the '<em><b>Log Mode</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__LOG_MODE = LUW_NICKNAME__LOG_MODE;
+
+	/**
+	 * The feature id for the '<em><b>Lock Size Row</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__LOCK_SIZE_ROW = LUW_NICKNAME__LOCK_SIZE_ROW;
+
+	/**
+	 * The feature id for the '<em><b>Volatile</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__VOLATILE = LUW_NICKNAME__VOLATILE;
+
+	/**
+	 * The feature id for the '<em><b>Options</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__OPTIONS = LUW_NICKNAME__OPTIONS;
+
+	/**
+	 * The feature id for the '<em><b>Security Policy</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__SECURITY_POLICY = LUW_NICKNAME__SECURITY_POLICY;
+
+	/**
+	 * The feature id for the '<em><b>Remote Data Set</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__REMOTE_DATA_SET = LUW_NICKNAME__REMOTE_DATA_SET;
+
+	/**
+	 * The feature id for the '<em><b>Server</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__SERVER = LUW_NICKNAME__SERVER;
+
+	/**
+	 * The feature id for the '<em><b>Generic Server</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME__GENERIC_SERVER = LUW_NICKNAME_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Generic Nickname</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_NICKNAME_FEATURE_COUNT = LUW_NICKNAME_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGenericServerImpl <em>Generic Server</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGenericServerImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWGenericServer()
+	 * @generated
+	 */
+	int LUW_GENERIC_SERVER = 26;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_SERVER__EANNOTATIONS = LUW_SERVER__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_SERVER__NAME = LUW_SERVER__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_SERVER__DEPENDENCIES = LUW_SERVER__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_SERVER__DESCRIPTION = LUW_SERVER__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_SERVER__LABEL = LUW_SERVER__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_SERVER__COMMENTS = LUW_SERVER__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_SERVER__EXTENSIONS = LUW_SERVER__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_SERVER__PRIVILEGES = LUW_SERVER__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Server Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_SERVER__SERVER_TYPE = LUW_SERVER__SERVER_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Server Version</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_SERVER__SERVER_VERSION = LUW_SERVER__SERVER_VERSION;
+
+	/**
+	 * The feature id for the '<em><b>User Mappings</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_SERVER__USER_MAPPINGS = LUW_SERVER__USER_MAPPINGS;
+
+	/**
+	 * The feature id for the '<em><b>Wrapper</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_SERVER__WRAPPER = LUW_SERVER__WRAPPER;
+
+	/**
+	 * The feature id for the '<em><b>Nicknames</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_SERVER__NICKNAMES = LUW_SERVER__NICKNAMES;
+
+	/**
+	 * The feature id for the '<em><b>LUW Database</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_SERVER__LUW_DATABASE = LUW_SERVER__LUW_DATABASE;
+
+	/**
+	 * The feature id for the '<em><b>Options</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_SERVER__OPTIONS = LUW_SERVER__OPTIONS;
+
+	/**
+	 * The feature id for the '<em><b>Remote Server</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_SERVER__REMOTE_SERVER = LUW_SERVER__REMOTE_SERVER;
+
+	/**
+	 * The feature id for the '<em><b>Generic Nicknames</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_SERVER__GENERIC_NICKNAMES = LUW_SERVER_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Generic Wrapper</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_SERVER__GENERIC_WRAPPER = LUW_SERVER_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Generic Server</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_SERVER_FEATURE_COUNT = LUW_SERVER_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWMaterializedQueryTableImpl <em>Materialized Query Table</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWMaterializedQueryTableImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWMaterializedQueryTable()
+	 * @generated
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE = 27;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__EANNOTATIONS = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__NAME = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__DEPENDENCIES = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__DESCRIPTION = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__LABEL = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__COMMENTS = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__EXTENSIONS = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__PRIVILEGES = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Columns</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__COLUMNS = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__COLUMNS;
+
+	/**
+	 * The feature id for the '<em><b>Supertable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__SUPERTABLE = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__SUPERTABLE;
+
+	/**
+	 * The feature id for the '<em><b>Subtables</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__SUBTABLES = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__SUBTABLES;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__SCHEMA = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Udt</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__UDT = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__UDT;
+
+	/**
+	 * The feature id for the '<em><b>Triggers</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__TRIGGERS = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__TRIGGERS;
+
+	/**
+	 * The feature id for the '<em><b>Index</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__INDEX = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__INDEX;
+
+	/**
+	 * The feature id for the '<em><b>Self Ref Column Generation</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__SELF_REF_COLUMN_GENERATION = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__SELF_REF_COLUMN_GENERATION;
+
+	/**
+	 * The feature id for the '<em><b>Insertable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__INSERTABLE = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__INSERTABLE;
+
+	/**
+	 * The feature id for the '<em><b>Updatable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__UPDATABLE = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__UPDATABLE;
+
+	/**
+	 * The feature id for the '<em><b>Query Expression</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__QUERY_EXPRESSION = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__QUERY_EXPRESSION;
+
+	/**
+	 * The feature id for the '<em><b>Refresh</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__REFRESH = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__REFRESH;
+
+	/**
+	 * The feature id for the '<em><b>Optimize Query</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__OPTIMIZE_QUERY = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__OPTIMIZE_QUERY;
+
+	/**
+	 * The feature id for the '<em><b>Maintained By</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__MAINTAINED_BY = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__MAINTAINED_BY;
+
+	/**
+	 * The feature id for the '<em><b>Activate Row Access Control</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__ACTIVATE_ROW_ACCESS_CONTROL = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__ACTIVATE_ROW_ACCESS_CONTROL;
+
+	/**
+	 * The feature id for the '<em><b>Activate Column Access Control</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__ACTIVATE_COLUMN_ACCESS_CONTROL = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__ACTIVATE_COLUMN_ACCESS_CONTROL;
+
+	/**
+	 * The feature id for the '<em><b>Masks</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__MASKS = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__MASKS;
+
+	/**
+	 * The feature id for the '<em><b>Permissions</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__PERMISSIONS = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__PERMISSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Value Compression</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__VALUE_COMPRESSION = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Row Compression</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__ROW_COMPRESSION = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Row Compression Empty</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__ROW_COMPRESSION_EMPTY = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Compression Mode</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__COMPRESSION_MODE = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Partition Key</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__PARTITION_KEY = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Index Data Table Space</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__INDEX_DATA_TABLE_SPACE = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>LOB Data Table Space</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__LOB_DATA_TABLE_SPACE = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Regular Data Table Space</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__REGULAR_DATA_TABLE_SPACE = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE_FEATURE_COUNT + 7;
+
+	/**
+	 * The feature id for the '<em><b>Data Partitions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__DATA_PARTITIONS = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE_FEATURE_COUNT + 8;
+
+	/**
+	 * The feature id for the '<em><b>Data Partition Key</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE__DATA_PARTITION_KEY = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE_FEATURE_COUNT + 9;
+
+	/**
+	 * The number of structural features of the '<em>Materialized Query Table</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MATERIALIZED_QUERY_TABLE_FEATURE_COUNT = DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE_FEATURE_COUNT + 10;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGenericWrapperImpl <em>Generic Wrapper</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGenericWrapperImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWGenericWrapper()
+	 * @generated
+	 */
+	int LUW_GENERIC_WRAPPER = 28;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_WRAPPER__EANNOTATIONS = LUW_WRAPPER__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_WRAPPER__NAME = LUW_WRAPPER__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_WRAPPER__DEPENDENCIES = LUW_WRAPPER__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_WRAPPER__DESCRIPTION = LUW_WRAPPER__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_WRAPPER__LABEL = LUW_WRAPPER__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_WRAPPER__COMMENTS = LUW_WRAPPER__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_WRAPPER__EXTENSIONS = LUW_WRAPPER__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_WRAPPER__PRIVILEGES = LUW_WRAPPER__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Version</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_WRAPPER__VERSION = LUW_WRAPPER__VERSION;
+
+	/**
+	 * The feature id for the '<em><b>Library</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_WRAPPER__LIBRARY = LUW_WRAPPER__LIBRARY;
+
+	/**
+	 * The feature id for the '<em><b>Fenced</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_WRAPPER__FENCED = LUW_WRAPPER__FENCED;
+
+	/**
+	 * The feature id for the '<em><b>Wrapper Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_WRAPPER__WRAPPER_TYPE = LUW_WRAPPER__WRAPPER_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Data Source</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_WRAPPER__DATA_SOURCE = LUW_WRAPPER__DATA_SOURCE;
+
+	/**
+	 * The feature id for the '<em><b>Discovered Libraries</b></em>' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_WRAPPER__DISCOVERED_LIBRARIES = LUW_WRAPPER__DISCOVERED_LIBRARIES;
+
+	/**
+	 * The feature id for the '<em><b>Servers</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_WRAPPER__SERVERS = LUW_WRAPPER__SERVERS;
+
+	/**
+	 * The feature id for the '<em><b>LUW Database</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_WRAPPER__LUW_DATABASE = LUW_WRAPPER__LUW_DATABASE;
+
+	/**
+	 * The feature id for the '<em><b>Options</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_WRAPPER__OPTIONS = LUW_WRAPPER__OPTIONS;
+
+	/**
+	 * The feature id for the '<em><b>Generic Servers</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_WRAPPER__GENERIC_SERVERS = LUW_WRAPPER_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Generic Wrapper</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GENERIC_WRAPPER_FEATURE_COUNT = LUW_WRAPPER_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable <em>Storage Table</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWStorageTable()
+	 * @generated
+	 */
+	int LUW_STORAGE_TABLE = 29;
+
+	/**
+	 * The feature id for the '<em><b>Value Compression</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_STORAGE_TABLE__VALUE_COMPRESSION = 0;
+
+	/**
+	 * The feature id for the '<em><b>Row Compression</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_STORAGE_TABLE__ROW_COMPRESSION = 1;
+
+	/**
+	 * The feature id for the '<em><b>Row Compression Empty</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_STORAGE_TABLE__ROW_COMPRESSION_EMPTY = 2;
+
+	/**
+	 * The feature id for the '<em><b>Compression Mode</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_STORAGE_TABLE__COMPRESSION_MODE = 3;
+
+	/**
+	 * The feature id for the '<em><b>Partition Key</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_STORAGE_TABLE__PARTITION_KEY = 4;
+
+	/**
+	 * The feature id for the '<em><b>Index Data Table Space</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_STORAGE_TABLE__INDEX_DATA_TABLE_SPACE = 5;
+
+	/**
+	 * The feature id for the '<em><b>LOB Data Table Space</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_STORAGE_TABLE__LOB_DATA_TABLE_SPACE = 6;
+
+	/**
+	 * The feature id for the '<em><b>Regular Data Table Space</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_STORAGE_TABLE__REGULAR_DATA_TABLE_SPACE = 7;
+
+	/**
+	 * The feature id for the '<em><b>Data Partitions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_STORAGE_TABLE__DATA_PARTITIONS = 8;
+
+	/**
+	 * The feature id for the '<em><b>Data Partition Key</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_STORAGE_TABLE__DATA_PARTITION_KEY = 9;
+
+	/**
+	 * The number of structural features of the '<em>Storage Table</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_STORAGE_TABLE_FEATURE_COUNT = 10;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.RelationalRemoteServerImpl <em>Relational Remote Server</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.RelationalRemoteServerImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getRelationalRemoteServer()
+	 * @generated
+	 */
+	int RELATIONAL_REMOTE_SERVER = 30;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIONAL_REMOTE_SERVER__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIONAL_REMOTE_SERVER__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIONAL_REMOTE_SERVER__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIONAL_REMOTE_SERVER__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIONAL_REMOTE_SERVER__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIONAL_REMOTE_SERVER__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIONAL_REMOTE_SERVER__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIONAL_REMOTE_SERVER__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>LUW Server</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIONAL_REMOTE_SERVER__LUW_SERVER = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Database</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIONAL_REMOTE_SERVER__DATABASE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Relational Remote Server</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIONAL_REMOTE_SERVER_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.RelationalRemoteDataSetImpl <em>Relational Remote Data Set</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.RelationalRemoteDataSetImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getRelationalRemoteDataSet()
+	 * @generated
+	 */
+	int RELATIONAL_REMOTE_DATA_SET = 31;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIONAL_REMOTE_DATA_SET__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIONAL_REMOTE_DATA_SET__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIONAL_REMOTE_DATA_SET__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIONAL_REMOTE_DATA_SET__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIONAL_REMOTE_DATA_SET__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIONAL_REMOTE_DATA_SET__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIONAL_REMOTE_DATA_SET__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIONAL_REMOTE_DATA_SET__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Nickname</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIONAL_REMOTE_DATA_SET__NICKNAME = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Table</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIONAL_REMOTE_DATA_SET__TABLE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Relational Remote Data Set</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIONAL_REMOTE_DATA_SET_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.RemoteServerImpl <em>Remote Server</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.RemoteServerImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getRemoteServer()
+	 * @generated
+	 */
+	int REMOTE_SERVER = 32;
+
+	/**
+	 * The feature id for the '<em><b>LUW Server</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REMOTE_SERVER__LUW_SERVER = 0;
+
+	/**
+	 * The number of structural features of the '<em>Remote Server</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REMOTE_SERVER_FEATURE_COUNT = 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.RemoteDataSetImpl <em>Remote Data Set</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.RemoteDataSetImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getRemoteDataSet()
+	 * @generated
+	 */
+	int REMOTE_DATA_SET = 33;
+
+	/**
+	 * The feature id for the '<em><b>Nickname</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REMOTE_DATA_SET__NICKNAME = 0;
+
+	/**
+	 * The number of structural features of the '<em>Remote Data Set</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REMOTE_DATA_SET_FEATURE_COUNT = 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWIndexImpl <em>Index</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWIndexImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWIndex()
+	 * @generated
+	 */
+	int LUW_INDEX = 34;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__EANNOTATIONS = DB2ModelPackage.DB2_INDEX__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__NAME = DB2ModelPackage.DB2_INDEX__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__DEPENDENCIES = DB2ModelPackage.DB2_INDEX__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__DESCRIPTION = DB2ModelPackage.DB2_INDEX__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__LABEL = DB2ModelPackage.DB2_INDEX__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__COMMENTS = DB2ModelPackage.DB2_INDEX__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__EXTENSIONS = DB2ModelPackage.DB2_INDEX__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__PRIVILEGES = DB2ModelPackage.DB2_INDEX__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__SCHEMA = DB2ModelPackage.DB2_INDEX__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Clustered</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__CLUSTERED = DB2ModelPackage.DB2_INDEX__CLUSTERED;
+
+	/**
+	 * The feature id for the '<em><b>Fill Factor</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__FILL_FACTOR = DB2ModelPackage.DB2_INDEX__FILL_FACTOR;
+
+	/**
+	 * The feature id for the '<em><b>Unique</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__UNIQUE = DB2ModelPackage.DB2_INDEX__UNIQUE;
+
+	/**
+	 * The feature id for the '<em><b>System Generated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__SYSTEM_GENERATED = DB2ModelPackage.DB2_INDEX__SYSTEM_GENERATED;
+
+	/**
+	 * The feature id for the '<em><b>Members</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__MEMBERS = DB2ModelPackage.DB2_INDEX__MEMBERS;
+
+	/**
+	 * The feature id for the '<em><b>Table</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__TABLE = DB2ModelPackage.DB2_INDEX__TABLE;
+
+	/**
+	 * The feature id for the '<em><b>Foreign Key</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__FOREIGN_KEY = DB2ModelPackage.DB2_INDEX__FOREIGN_KEY;
+
+	/**
+	 * The feature id for the '<em><b>Included Members</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__INCLUDED_MEMBERS = DB2ModelPackage.DB2_INDEX__INCLUDED_MEMBERS;
+
+	/**
+	 * The feature id for the '<em><b>Index Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__INDEX_TYPE = DB2ModelPackage.DB2_INDEX__INDEX_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Bus Period Without Overlap</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__BUS_PERIOD_WITHOUT_OVERLAP = DB2ModelPackage.DB2_INDEX__BUS_PERIOD_WITHOUT_OVERLAP;
+
+	/**
+	 * The feature id for the '<em><b>Encoded Vector</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__ENCODED_VECTOR = DB2ModelPackage.DB2_INDEX__ENCODED_VECTOR;
+
+	/**
+	 * The feature id for the '<em><b>DB2 Multidimensional Index</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__DB2_MULTIDIMENSIONAL_INDEX = DB2ModelPackage.DB2_INDEX__DB2_MULTIDIMENSIONAL_INDEX;
+
+	/**
+	 * The feature id for the '<em><b>PCT Free</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__PCT_FREE = DB2ModelPackage.DB2_INDEX_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Min PCT Free</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__MIN_PCT_FREE = DB2ModelPackage.DB2_INDEX_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Reverse Scan</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__REVERSE_SCAN = DB2ModelPackage.DB2_INDEX_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Not Partitioned</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__NOT_PARTITIONED = DB2ModelPackage.DB2_INDEX_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Xml Pattern</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__XML_PATTERN = DB2ModelPackage.DB2_INDEX_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>As SQL Data Type</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__AS_SQL_DATA_TYPE = DB2ModelPackage.DB2_INDEX_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>As SQL Data Type Hashed</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__AS_SQL_DATA_TYPE_HASHED = DB2ModelPackage.DB2_INDEX_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>System Required</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__SYSTEM_REQUIRED = DB2ModelPackage.DB2_INDEX_FEATURE_COUNT + 7;
+
+	/**
+	 * The feature id for the '<em><b>Page Split Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__PAGE_SPLIT_TYPE = DB2ModelPackage.DB2_INDEX_FEATURE_COUNT + 8;
+
+	/**
+	 * The feature id for the '<em><b>Level2 Pct Free</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__LEVEL2_PCT_FREE = DB2ModelPackage.DB2_INDEX_FEATURE_COUNT + 9;
+
+	/**
+	 * The feature id for the '<em><b>Min Pct Used</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__MIN_PCT_USED = DB2ModelPackage.DB2_INDEX_FEATURE_COUNT + 10;
+
+	/**
+	 * The feature id for the '<em><b>Compress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__COMPRESS = DB2ModelPackage.DB2_INDEX_FEATURE_COUNT + 11;
+
+	/**
+	 * The feature id for the '<em><b>Collect Stats</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__COLLECT_STATS = DB2ModelPackage.DB2_INDEX_FEATURE_COUNT + 12;
+
+	/**
+	 * The feature id for the '<em><b>Sampled Stats</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__SAMPLED_STATS = DB2ModelPackage.DB2_INDEX_FEATURE_COUNT + 13;
+
+	/**
+	 * The feature id for the '<em><b>Detailed Stats</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__DETAILED_STATS = DB2ModelPackage.DB2_INDEX_FEATURE_COUNT + 14;
+
+	/**
+	 * The feature id for the '<em><b>Ignore Invalid Values</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__IGNORE_INVALID_VALUES = DB2ModelPackage.DB2_INDEX_FEATURE_COUNT + 15;
+
+	/**
+	 * The feature id for the '<em><b>Exclude Null Keys</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__EXCLUDE_NULL_KEYS = DB2ModelPackage.DB2_INDEX_FEATURE_COUNT + 16;
+
+	/**
+	 * The feature id for the '<em><b>Tablespace</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX__TABLESPACE = DB2ModelPackage.DB2_INDEX_FEATURE_COUNT + 17;
+
+	/**
+	 * The number of structural features of the '<em>Index</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_INDEX_FEATURE_COUNT = DB2ModelPackage.DB2_INDEX_FEATURE_COUNT + 18;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWAttributeDefinitionImpl <em>Attribute Definition</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWAttributeDefinitionImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWAttributeDefinition()
+	 * @generated
+	 */
+	int LUW_ATTRIBUTE_DEFINITION = 35;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ATTRIBUTE_DEFINITION__EANNOTATIONS = SQLDataTypesPackage.ATTRIBUTE_DEFINITION__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ATTRIBUTE_DEFINITION__NAME = SQLDataTypesPackage.ATTRIBUTE_DEFINITION__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ATTRIBUTE_DEFINITION__DEPENDENCIES = SQLDataTypesPackage.ATTRIBUTE_DEFINITION__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ATTRIBUTE_DEFINITION__DESCRIPTION = SQLDataTypesPackage.ATTRIBUTE_DEFINITION__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ATTRIBUTE_DEFINITION__LABEL = SQLDataTypesPackage.ATTRIBUTE_DEFINITION__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ATTRIBUTE_DEFINITION__COMMENTS = SQLDataTypesPackage.ATTRIBUTE_DEFINITION__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ATTRIBUTE_DEFINITION__EXTENSIONS = SQLDataTypesPackage.ATTRIBUTE_DEFINITION__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ATTRIBUTE_DEFINITION__PRIVILEGES = SQLDataTypesPackage.ATTRIBUTE_DEFINITION__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Contained Type</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ATTRIBUTE_DEFINITION__CONTAINED_TYPE = SQLDataTypesPackage.ATTRIBUTE_DEFINITION__CONTAINED_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Referenced Type</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ATTRIBUTE_DEFINITION__REFERENCED_TYPE = SQLDataTypesPackage.ATTRIBUTE_DEFINITION__REFERENCED_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Scope Check</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ATTRIBUTE_DEFINITION__SCOPE_CHECK = SQLDataTypesPackage.ATTRIBUTE_DEFINITION__SCOPE_CHECK;
+
+	/**
+	 * The feature id for the '<em><b>Scope Checked</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ATTRIBUTE_DEFINITION__SCOPE_CHECKED = SQLDataTypesPackage.ATTRIBUTE_DEFINITION__SCOPE_CHECKED;
+
+	/**
+	 * The feature id for the '<em><b>Default Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ATTRIBUTE_DEFINITION__DEFAULT_VALUE = SQLDataTypesPackage.ATTRIBUTE_DEFINITION__DEFAULT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>LOB Logged</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ATTRIBUTE_DEFINITION__LOB_LOGGED = SQLDataTypesPackage.ATTRIBUTE_DEFINITION_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>LOB Compacted</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ATTRIBUTE_DEFINITION__LOB_COMPACTED = SQLDataTypesPackage.ATTRIBUTE_DEFINITION_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Attribute Definition</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ATTRIBUTE_DEFINITION_FEATURE_COUNT = SQLDataTypesPackage.ATTRIBUTE_DEFINITION_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.FederatedProcedureImpl <em>Federated Procedure</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.FederatedProcedureImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getFederatedProcedure()
+	 * @generated
+	 */
+	int FEDERATED_PROCEDURE = 36;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__EANNOTATIONS = DB2ModelPackage.DB2_PROCEDURE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__NAME = DB2ModelPackage.DB2_PROCEDURE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__DEPENDENCIES = DB2ModelPackage.DB2_PROCEDURE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__DESCRIPTION = DB2ModelPackage.DB2_PROCEDURE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__LABEL = DB2ModelPackage.DB2_PROCEDURE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__COMMENTS = DB2ModelPackage.DB2_PROCEDURE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__EXTENSIONS = DB2ModelPackage.DB2_PROCEDURE__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__PRIVILEGES = DB2ModelPackage.DB2_PROCEDURE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Specific Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__SPECIFIC_NAME = DB2ModelPackage.DB2_PROCEDURE__SPECIFIC_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Language</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__LANGUAGE = DB2ModelPackage.DB2_PROCEDURE__LANGUAGE;
+
+	/**
+	 * The feature id for the '<em><b>Parameter Style</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__PARAMETER_STYLE = DB2ModelPackage.DB2_PROCEDURE__PARAMETER_STYLE;
+
+	/**
+	 * The feature id for the '<em><b>Deterministic</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__DETERMINISTIC = DB2ModelPackage.DB2_PROCEDURE__DETERMINISTIC;
+
+	/**
+	 * The feature id for the '<em><b>Sql Data Access</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__SQL_DATA_ACCESS = DB2ModelPackage.DB2_PROCEDURE__SQL_DATA_ACCESS;
+
+	/**
+	 * The feature id for the '<em><b>Creation TS</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__CREATION_TS = DB2ModelPackage.DB2_PROCEDURE__CREATION_TS;
+
+	/**
+	 * The feature id for the '<em><b>Last Altered TS</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__LAST_ALTERED_TS = DB2ModelPackage.DB2_PROCEDURE__LAST_ALTERED_TS;
+
+	/**
+	 * The feature id for the '<em><b>Authorization ID</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__AUTHORIZATION_ID = DB2ModelPackage.DB2_PROCEDURE__AUTHORIZATION_ID;
+
+	/**
+	 * The feature id for the '<em><b>Security</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__SECURITY = DB2ModelPackage.DB2_PROCEDURE__SECURITY;
+
+	/**
+	 * The feature id for the '<em><b>External Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__EXTERNAL_NAME = DB2ModelPackage.DB2_PROCEDURE__EXTERNAL_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__PARAMETERS = DB2ModelPackage.DB2_PROCEDURE__PARAMETERS;
+
+	/**
+	 * The feature id for the '<em><b>Source</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__SOURCE = DB2ModelPackage.DB2_PROCEDURE__SOURCE;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__SCHEMA = DB2ModelPackage.DB2_PROCEDURE__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Max Result Sets</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__MAX_RESULT_SETS = DB2ModelPackage.DB2_PROCEDURE__MAX_RESULT_SETS;
+
+	/**
+	 * The feature id for the '<em><b>Old Save Point</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__OLD_SAVE_POINT = DB2ModelPackage.DB2_PROCEDURE__OLD_SAVE_POINT;
+
+	/**
+	 * The feature id for the '<em><b>Result Set</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__RESULT_SET = DB2ModelPackage.DB2_PROCEDURE__RESULT_SET;
+
+	/**
+	 * The feature id for the '<em><b>Fenced</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__FENCED = DB2ModelPackage.DB2_PROCEDURE__FENCED;
+
+	/**
+	 * The feature id for the '<em><b>Threadsafe</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__THREADSAFE = DB2ModelPackage.DB2_PROCEDURE__THREADSAFE;
+
+	/**
+	 * The feature id for the '<em><b>Db Info</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__DB_INFO = DB2ModelPackage.DB2_PROCEDURE__DB_INFO;
+
+	/**
+	 * The feature id for the '<em><b>Implicit Schema</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__IMPLICIT_SCHEMA = DB2ModelPackage.DB2_PROCEDURE__IMPLICIT_SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Federated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__FEDERATED = DB2ModelPackage.DB2_PROCEDURE__FEDERATED;
+
+	/**
+	 * The feature id for the '<em><b>Parm Ccsid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__PARM_CCSID = DB2ModelPackage.DB2_PROCEDURE__PARM_CCSID;
+
+	/**
+	 * The feature id for the '<em><b>Special Register</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__SPECIAL_REGISTER = DB2ModelPackage.DB2_PROCEDURE__SPECIAL_REGISTER;
+
+	/**
+	 * The feature id for the '<em><b>Change State</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__CHANGE_STATE = DB2ModelPackage.DB2_PROCEDURE__CHANGE_STATE;
+
+	/**
+	 * The feature id for the '<em><b>Debug Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__DEBUG_ID = DB2ModelPackage.DB2_PROCEDURE__DEBUG_ID;
+
+	/**
+	 * The feature id for the '<em><b>Program Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__PROGRAM_TYPE = DB2ModelPackage.DB2_PROCEDURE__PROGRAM_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Orig Schema Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__ORIG_SCHEMA_NAME = DB2ModelPackage.DB2_PROCEDURE__ORIG_SCHEMA_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Orig Parm Sig</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__ORIG_PARM_SIG = DB2ModelPackage.DB2_PROCEDURE__ORIG_PARM_SIG;
+
+	/**
+	 * The feature id for the '<em><b>Extended Options</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__EXTENDED_OPTIONS = DB2ModelPackage.DB2_PROCEDURE__EXTENDED_OPTIONS;
+
+	/**
+	 * The feature id for the '<em><b>Routine Extensions</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__ROUTINE_EXTENSIONS = DB2ModelPackage.DB2_PROCEDURE__ROUTINE_EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Model Result Sets</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__MODEL_RESULT_SETS = DB2ModelPackage.DB2_PROCEDURE__MODEL_RESULT_SETS;
+
+	/**
+	 * The feature id for the '<em><b>Null Input</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__NULL_INPUT = DB2ModelPackage.DB2_PROCEDURE__NULL_INPUT;
+
+	/**
+	 * The feature id for the '<em><b>Version</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__VERSION = DB2ModelPackage.DB2_PROCEDURE__VERSION;
+
+	/**
+	 * The feature id for the '<em><b>Dialect</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__DIALECT = DB2ModelPackage.DB2_PROCEDURE__DIALECT;
+
+	/**
+	 * The feature id for the '<em><b>External Action</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__EXTERNAL_ACTION = DB2ModelPackage.DB2_PROCEDURE__EXTERNAL_ACTION;
+
+	/**
+	 * The feature id for the '<em><b>Return</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__RETURN = DB2ModelPackage.DB2_PROCEDURE__RETURN;
+
+	/**
+	 * The feature id for the '<em><b>Java Options</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__JAVA_OPTIONS = DB2ModelPackage.DB2_PROCEDURE__JAVA_OPTIONS;
+
+	/**
+	 * The feature id for the '<em><b>Deploy</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__DEPLOY = DB2ModelPackage.DB2_PROCEDURE__DEPLOY;
+
+	/**
+	 * The feature id for the '<em><b>Remote Unique Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__REMOTE_UNIQUE_ID = DB2ModelPackage.DB2_PROCEDURE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Remote Server</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__REMOTE_SERVER = DB2ModelPackage.DB2_PROCEDURE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Remote Schema</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__REMOTE_SCHEMA = DB2ModelPackage.DB2_PROCEDURE_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Remote Package</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__REMOTE_PACKAGE = DB2ModelPackage.DB2_PROCEDURE_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Remote Procedure Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__REMOTE_PROCEDURE_NAME = DB2ModelPackage.DB2_PROCEDURE_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Number Of Parameters</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__NUMBER_OF_PARAMETERS = DB2ModelPackage.DB2_PROCEDURE_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Result Sets To Client</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__RESULT_SETS_TO_CLIENT = DB2ModelPackage.DB2_PROCEDURE_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Number Of Ref Cursors</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__NUMBER_OF_REF_CURSORS = DB2ModelPackage.DB2_PROCEDURE_FEATURE_COUNT + 7;
+
+	/**
+	 * The feature id for the '<em><b>All Result Sets To Caller</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__ALL_RESULT_SETS_TO_CALLER = DB2ModelPackage.DB2_PROCEDURE_FEATURE_COUNT + 8;
+
+	/**
+	 * The feature id for the '<em><b>Federated Procedure</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__FEDERATED_PROCEDURE = DB2ModelPackage.DB2_PROCEDURE_FEATURE_COUNT + 9;
+
+	/**
+	 * The feature id for the '<em><b>Remote Procedure</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__REMOTE_PROCEDURE = DB2ModelPackage.DB2_PROCEDURE_FEATURE_COUNT + 10;
+
+	/**
+	 * The feature id for the '<em><b>Federated Parameter</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE__FEDERATED_PARAMETER = DB2ModelPackage.DB2_PROCEDURE_FEATURE_COUNT + 11;
+
+	/**
+	 * The number of structural features of the '<em>Federated Procedure</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PROCEDURE_FEATURE_COUNT = DB2ModelPackage.DB2_PROCEDURE_FEATURE_COUNT + 12;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.FederatedParameterImpl <em>Federated Parameter</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.FederatedParameterImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getFederatedParameter()
+	 * @generated
+	 */
+	int FEDERATED_PARAMETER = 37;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PARAMETER__EANNOTATIONS = SQLRoutinesPackage.PARAMETER__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PARAMETER__NAME = SQLRoutinesPackage.PARAMETER__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PARAMETER__DEPENDENCIES = SQLRoutinesPackage.PARAMETER__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PARAMETER__DESCRIPTION = SQLRoutinesPackage.PARAMETER__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PARAMETER__LABEL = SQLRoutinesPackage.PARAMETER__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PARAMETER__COMMENTS = SQLRoutinesPackage.PARAMETER__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PARAMETER__EXTENSIONS = SQLRoutinesPackage.PARAMETER__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PARAMETER__PRIVILEGES = SQLRoutinesPackage.PARAMETER__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Contained Type</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PARAMETER__CONTAINED_TYPE = SQLRoutinesPackage.PARAMETER__CONTAINED_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Referenced Type</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PARAMETER__REFERENCED_TYPE = SQLRoutinesPackage.PARAMETER__REFERENCED_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Mode</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PARAMETER__MODE = SQLRoutinesPackage.PARAMETER__MODE;
+
+	/**
+	 * The feature id for the '<em><b>Locator</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PARAMETER__LOCATOR = SQLRoutinesPackage.PARAMETER__LOCATOR;
+
+	/**
+	 * The feature id for the '<em><b>Routine</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PARAMETER__ROUTINE = SQLRoutinesPackage.PARAMETER__ROUTINE;
+
+	/**
+	 * The feature id for the '<em><b>String Type Option</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PARAMETER__STRING_TYPE_OPTION = SQLRoutinesPackage.PARAMETER__STRING_TYPE_OPTION;
+
+	/**
+	 * The feature id for the '<em><b>Remote Code Page</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PARAMETER__REMOTE_CODE_PAGE = SQLRoutinesPackage.PARAMETER_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Remote Param Type ID</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PARAMETER__REMOTE_PARAM_TYPE_ID = SQLRoutinesPackage.PARAMETER_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Federated Procedure</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PARAMETER__FEDERATED_PROCEDURE = SQLRoutinesPackage.PARAMETER_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Remote Parameter</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PARAMETER__REMOTE_PARAMETER = SQLRoutinesPackage.PARAMETER_FEATURE_COUNT + 3;
+
+	/**
+	 * The number of structural features of the '<em>Federated Parameter</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEDERATED_PARAMETER_FEATURE_COUNT = SQLRoutinesPackage.PARAMETER_FEATURE_COUNT + 4;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionExpressionImpl <em>Partition Expression</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionExpressionImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWPartitionExpression()
+	 * @generated
+	 */
+	int LUW_PARTITION_EXPRESSION = 38;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_EXPRESSION__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_EXPRESSION__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_EXPRESSION__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_EXPRESSION__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_EXPRESSION__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_EXPRESSION__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_EXPRESSION__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_EXPRESSION__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Nulls Last</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_EXPRESSION__NULLS_LAST = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Key</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_EXPRESSION__KEY = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Column</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_EXPRESSION__COLUMN = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Partition Elements</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_EXPRESSION__PARTITION_ELEMENTS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The number of structural features of the '<em>Partition Expression</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_EXPRESSION_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 4;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionElementImpl <em>Partition Element</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionElementImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWPartitionElement()
+	 * @generated
+	 */
+	int LUW_PARTITION_ELEMENT = 39;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_ELEMENT__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_ELEMENT__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_ELEMENT__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_ELEMENT__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_ELEMENT__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_ELEMENT__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_ELEMENT__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_ELEMENT__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Starting</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_ELEMENT__STARTING = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Ending</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_ELEMENT__ENDING = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>LUW Partition Expression</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_ELEMENT__LUW_PARTITION_EXPRESSION = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Partition</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_ELEMENT__PARTITION = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Every Clause</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_ELEMENT__EVERY_CLAUSE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 4;
+
+	/**
+	 * The number of structural features of the '<em>Partition Element</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_ELEMENT_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 5;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDataPartitionImpl <em>Data Partition</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDataPartitionImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWDataPartition()
+	 * @generated
+	 */
+	int LUW_DATA_PARTITION = 40;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATA_PARTITION__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATA_PARTITION__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATA_PARTITION__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATA_PARTITION__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATA_PARTITION__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATA_PARTITION__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATA_PARTITION__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATA_PARTITION__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATA_PARTITION__ID = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Low Inclusive</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATA_PARTITION__LOW_INCLUSIVE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>High Inclusive</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATA_PARTITION__HIGH_INCLUSIVE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>LOB Data Table Space</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATA_PARTITION__LOB_DATA_TABLE_SPACE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Regular Data Table Space</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATA_PARTITION__REGULAR_DATA_TABLE_SPACE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Partition Elements</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATA_PARTITION__PARTITION_ELEMENTS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Table</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATA_PARTITION__TABLE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Index Data Table Space</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATA_PARTITION__INDEX_DATA_TABLE_SPACE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 7;
+
+	/**
+	 * The number of structural features of the '<em>Data Partition</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATA_PARTITION_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 8;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDataPartitionKeyImpl <em>Data Partition Key</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDataPartitionKeyImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWDataPartitionKey()
+	 * @generated
+	 */
+	int LUW_DATA_PARTITION_KEY = 41;
+
+	/**
+	 * The feature id for the '<em><b>Partition Method</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATA_PARTITION_KEY__PARTITION_METHOD = 0;
+
+	/**
+	 * The feature id for the '<em><b>Partition Expressions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATA_PARTITION_KEY__PARTITION_EXPRESSIONS = 1;
+
+	/**
+	 * The feature id for the '<em><b>Table</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATA_PARTITION_KEY__TABLE = 2;
+
+	/**
+	 * The number of structural features of the '<em>Data Partition Key</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATA_PARTITION_KEY_FEATURE_COUNT = 3;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabasePackageImpl <em>Database Package</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabasePackageImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWDatabasePackage()
+	 * @generated
+	 */
+	int LUW_DATABASE_PACKAGE = 42;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PACKAGE__EANNOTATIONS = DB2ModelPackage.DB2_PACKAGE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PACKAGE__NAME = DB2ModelPackage.DB2_PACKAGE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PACKAGE__DEPENDENCIES = DB2ModelPackage.DB2_PACKAGE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PACKAGE__DESCRIPTION = DB2ModelPackage.DB2_PACKAGE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PACKAGE__LABEL = DB2ModelPackage.DB2_PACKAGE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PACKAGE__COMMENTS = DB2ModelPackage.DB2_PACKAGE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PACKAGE__EXTENSIONS = DB2ModelPackage.DB2_PACKAGE__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PACKAGE__PRIVILEGES = DB2ModelPackage.DB2_PACKAGE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Operative</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PACKAGE__OPERATIVE = DB2ModelPackage.DB2_PACKAGE__OPERATIVE;
+
+	/**
+	 * The feature id for the '<em><b>Valid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PACKAGE__VALID = DB2ModelPackage.DB2_PACKAGE__VALID;
+
+	/**
+	 * The feature id for the '<em><b>Version</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PACKAGE__VERSION = DB2ModelPackage.DB2_PACKAGE__VERSION;
+
+	/**
+	 * The feature id for the '<em><b>Default Schema</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PACKAGE__DEFAULT_SCHEMA = DB2ModelPackage.DB2_PACKAGE__DEFAULT_SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Sql Path</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PACKAGE__SQL_PATH = DB2ModelPackage.DB2_PACKAGE__SQL_PATH;
+
+	/**
+	 * The feature id for the '<em><b>Reopt Var</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PACKAGE__REOPT_VAR = DB2ModelPackage.DB2_PACKAGE__REOPT_VAR;
+
+	/**
+	 * The feature id for the '<em><b>Isolation</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PACKAGE__ISOLATION = DB2ModelPackage.DB2_PACKAGE__ISOLATION;
+
+	/**
+	 * The feature id for the '<em><b>Unique ID</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PACKAGE__UNIQUE_ID = DB2ModelPackage.DB2_PACKAGE__UNIQUE_ID;
+
+	/**
+	 * The feature id for the '<em><b>Last Bind TS</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PACKAGE__LAST_BIND_TS = DB2ModelPackage.DB2_PACKAGE__LAST_BIND_TS;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PACKAGE__SCHEMA = DB2ModelPackage.DB2_PACKAGE__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Statements</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PACKAGE__STATEMENTS = DB2ModelPackage.DB2_PACKAGE__STATEMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Creator</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PACKAGE__CREATOR = DB2ModelPackage.DB2_PACKAGE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Binder</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PACKAGE__BINDER = DB2ModelPackage.DB2_PACKAGE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Cursor Block</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PACKAGE__CURSOR_BLOCK = DB2ModelPackage.DB2_PACKAGE_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Number Of Sections</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PACKAGE__NUMBER_OF_SECTIONS = DB2ModelPackage.DB2_PACKAGE_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Optimization Class</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PACKAGE__OPTIMIZATION_CLASS = DB2ModelPackage.DB2_PACKAGE_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Explain Snapshot</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PACKAGE__EXPLAIN_SNAPSHOT = DB2ModelPackage.DB2_PACKAGE_FEATURE_COUNT + 5;
+
+	/**
+	 * The number of structural features of the '<em>Database Package</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_DATABASE_PACKAGE_FEATURE_COUNT = DB2ModelPackage.DB2_PACKAGE_FEATURE_COUNT + 6;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleImpl <em>Module</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWModule()
+	 * @generated
+	 */
+	int LUW_MODULE = 43;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Dialect</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE__DIALECT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Owning Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE__OWNING_SCHEMA = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Module Objects</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE__MODULE_OBJECTS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>Module</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject <em>Module Object</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWModuleObject()
+	 * @generated
+	 */
+	int LUW_MODULE_OBJECT = 44;
+
+	/**
+	 * The feature id for the '<em><b>Published</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_OBJECT__PUBLISHED = 0;
+
+	/**
+	 * The feature id for the '<em><b>Module</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_OBJECT__MODULE = 1;
+
+	/**
+	 * The number of structural features of the '<em>Module Object</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_OBJECT_FEATURE_COUNT = 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleFunctionImpl <em>Module Function</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleFunctionImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWModuleFunction()
+	 * @generated
+	 */
+	int LUW_MODULE_FUNCTION = 45;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__EANNOTATIONS = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__NAME = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__DEPENDENCIES = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__DESCRIPTION = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__LABEL = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__COMMENTS = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__EXTENSIONS = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__PRIVILEGES = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Specific Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__SPECIFIC_NAME = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SPECIFIC_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Language</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__LANGUAGE = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__LANGUAGE;
+
+	/**
+	 * The feature id for the '<em><b>Parameter Style</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__PARAMETER_STYLE = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__PARAMETER_STYLE;
+
+	/**
+	 * The feature id for the '<em><b>Deterministic</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__DETERMINISTIC = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__DETERMINISTIC;
+
+	/**
+	 * The feature id for the '<em><b>Sql Data Access</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__SQL_DATA_ACCESS = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SQL_DATA_ACCESS;
+
+	/**
+	 * The feature id for the '<em><b>Creation TS</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__CREATION_TS = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__CREATION_TS;
+
+	/**
+	 * The feature id for the '<em><b>Last Altered TS</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__LAST_ALTERED_TS = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__LAST_ALTERED_TS;
+
+	/**
+	 * The feature id for the '<em><b>Authorization ID</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__AUTHORIZATION_ID = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__AUTHORIZATION_ID;
+
+	/**
+	 * The feature id for the '<em><b>Security</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__SECURITY = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SECURITY;
+
+	/**
+	 * The feature id for the '<em><b>External Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__EXTERNAL_NAME = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__EXTERNAL_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__PARAMETERS = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__PARAMETERS;
+
+	/**
+	 * The feature id for the '<em><b>Source</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__SOURCE = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SOURCE;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__SCHEMA = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Null Call</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__NULL_CALL = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__NULL_CALL;
+
+	/**
+	 * The feature id for the '<em><b>Static</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__STATIC = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__STATIC;
+
+	/**
+	 * The feature id for the '<em><b>Transform Group</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__TRANSFORM_GROUP = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__TRANSFORM_GROUP;
+
+	/**
+	 * The feature id for the '<em><b>Type Preserving</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__TYPE_PRESERVING = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__TYPE_PRESERVING;
+
+	/**
+	 * The feature id for the '<em><b>Mutator</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__MUTATOR = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__MUTATOR;
+
+	/**
+	 * The feature id for the '<em><b>Return Table</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__RETURN_TABLE = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__RETURN_TABLE;
+
+	/**
+	 * The feature id for the '<em><b>Return Scalar</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__RETURN_SCALAR = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__RETURN_SCALAR;
+
+	/**
+	 * The feature id for the '<em><b>Return Cast</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__RETURN_CAST = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__RETURN_CAST;
+
+	/**
+	 * The feature id for the '<em><b>Fenced</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__FENCED = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FENCED;
+
+	/**
+	 * The feature id for the '<em><b>Threadsafe</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__THREADSAFE = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__THREADSAFE;
+
+	/**
+	 * The feature id for the '<em><b>Db Info</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__DB_INFO = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__DB_INFO;
+
+	/**
+	 * The feature id for the '<em><b>Implicit Schema</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__IMPLICIT_SCHEMA = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__IMPLICIT_SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Federated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__FEDERATED = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FEDERATED;
+
+	/**
+	 * The feature id for the '<em><b>Parm Ccsid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__PARM_CCSID = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__PARM_CCSID;
+
+	/**
+	 * The feature id for the '<em><b>Special Register</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__SPECIAL_REGISTER = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SPECIAL_REGISTER;
+
+	/**
+	 * The feature id for the '<em><b>Change State</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__CHANGE_STATE = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__CHANGE_STATE;
+
+	/**
+	 * The feature id for the '<em><b>Debug Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__DEBUG_ID = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__DEBUG_ID;
+
+	/**
+	 * The feature id for the '<em><b>Program Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__PROGRAM_TYPE = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__PROGRAM_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Orig Schema Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__ORIG_SCHEMA_NAME = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ORIG_SCHEMA_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Orig Parm Sig</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__ORIG_PARM_SIG = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ORIG_PARM_SIG;
+
+	/**
+	 * The feature id for the '<em><b>Extended Options</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__EXTENDED_OPTIONS = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__EXTENDED_OPTIONS;
+
+	/**
+	 * The feature id for the '<em><b>Routine Extensions</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__ROUTINE_EXTENSIONS = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ROUTINE_EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Final Call</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__FINAL_CALL = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FINAL_CALL;
+
+	/**
+	 * The feature id for the '<em><b>Scratch Pad</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__SCRATCH_PAD = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SCRATCH_PAD;
+
+	/**
+	 * The feature id for the '<em><b>Scratch Pad Length</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__SCRATCH_PAD_LENGTH = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SCRATCH_PAD_LENGTH;
+
+	/**
+	 * The feature id for the '<em><b>Function Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__FUNCTION_TYPE = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FUNCTION_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Predicate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__PREDICATE = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__PREDICATE;
+
+	/**
+	 * The feature id for the '<em><b>External Action</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__EXTERNAL_ACTION = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__EXTERNAL_ACTION;
+
+	/**
+	 * The feature id for the '<em><b>Cardinality</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__CARDINALITY = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__CARDINALITY;
+
+	/**
+	 * The feature id for the '<em><b>Allow Parallel</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__ALLOW_PARALLEL = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ALLOW_PARALLEL;
+
+	/**
+	 * The feature id for the '<em><b>Return Clause</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__RETURN_CLAUSE = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__RETURN_CLAUSE;
+
+	/**
+	 * The feature id for the '<em><b>Origin</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__ORIGIN = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ORIGIN;
+
+	/**
+	 * The feature id for the '<em><b>Inherit Lock Request</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__INHERIT_LOCK_REQUEST = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__INHERIT_LOCK_REQUEST;
+
+	/**
+	 * The feature id for the '<em><b>Dialect</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__DIALECT = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__DIALECT;
+
+	/**
+	 * The feature id for the '<em><b>Inline</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__INLINE = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__INLINE;
+
+	/**
+	 * The feature id for the '<em><b>Version</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__VERSION = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__VERSION;
+
+	/**
+	 * The feature id for the '<em><b>Secured</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__SECURED = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SECURED;
+
+	/**
+	 * The feature id for the '<em><b>Published</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__PUBLISHED = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Module</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__MODULE = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Implemented</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION__IMPLEMENTED = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>Module Function</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_FUNCTION_FEATURE_COUNT = DB2ModelPackage.DB2_USER_DEFINED_FUNCTION_FEATURE_COUNT + 3;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleProcedureImpl <em>Module Procedure</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleProcedureImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWModuleProcedure()
+	 * @generated
+	 */
+	int LUW_MODULE_PROCEDURE = 46;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__EANNOTATIONS = DB2ModelPackage.DB2_PROCEDURE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__NAME = DB2ModelPackage.DB2_PROCEDURE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__DEPENDENCIES = DB2ModelPackage.DB2_PROCEDURE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__DESCRIPTION = DB2ModelPackage.DB2_PROCEDURE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__LABEL = DB2ModelPackage.DB2_PROCEDURE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__COMMENTS = DB2ModelPackage.DB2_PROCEDURE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__EXTENSIONS = DB2ModelPackage.DB2_PROCEDURE__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__PRIVILEGES = DB2ModelPackage.DB2_PROCEDURE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Specific Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__SPECIFIC_NAME = DB2ModelPackage.DB2_PROCEDURE__SPECIFIC_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Language</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__LANGUAGE = DB2ModelPackage.DB2_PROCEDURE__LANGUAGE;
+
+	/**
+	 * The feature id for the '<em><b>Parameter Style</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__PARAMETER_STYLE = DB2ModelPackage.DB2_PROCEDURE__PARAMETER_STYLE;
+
+	/**
+	 * The feature id for the '<em><b>Deterministic</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__DETERMINISTIC = DB2ModelPackage.DB2_PROCEDURE__DETERMINISTIC;
+
+	/**
+	 * The feature id for the '<em><b>Sql Data Access</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__SQL_DATA_ACCESS = DB2ModelPackage.DB2_PROCEDURE__SQL_DATA_ACCESS;
+
+	/**
+	 * The feature id for the '<em><b>Creation TS</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__CREATION_TS = DB2ModelPackage.DB2_PROCEDURE__CREATION_TS;
+
+	/**
+	 * The feature id for the '<em><b>Last Altered TS</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__LAST_ALTERED_TS = DB2ModelPackage.DB2_PROCEDURE__LAST_ALTERED_TS;
+
+	/**
+	 * The feature id for the '<em><b>Authorization ID</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__AUTHORIZATION_ID = DB2ModelPackage.DB2_PROCEDURE__AUTHORIZATION_ID;
+
+	/**
+	 * The feature id for the '<em><b>Security</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__SECURITY = DB2ModelPackage.DB2_PROCEDURE__SECURITY;
+
+	/**
+	 * The feature id for the '<em><b>External Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__EXTERNAL_NAME = DB2ModelPackage.DB2_PROCEDURE__EXTERNAL_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__PARAMETERS = DB2ModelPackage.DB2_PROCEDURE__PARAMETERS;
+
+	/**
+	 * The feature id for the '<em><b>Source</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__SOURCE = DB2ModelPackage.DB2_PROCEDURE__SOURCE;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__SCHEMA = DB2ModelPackage.DB2_PROCEDURE__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Max Result Sets</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__MAX_RESULT_SETS = DB2ModelPackage.DB2_PROCEDURE__MAX_RESULT_SETS;
+
+	/**
+	 * The feature id for the '<em><b>Old Save Point</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__OLD_SAVE_POINT = DB2ModelPackage.DB2_PROCEDURE__OLD_SAVE_POINT;
+
+	/**
+	 * The feature id for the '<em><b>Result Set</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__RESULT_SET = DB2ModelPackage.DB2_PROCEDURE__RESULT_SET;
+
+	/**
+	 * The feature id for the '<em><b>Fenced</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__FENCED = DB2ModelPackage.DB2_PROCEDURE__FENCED;
+
+	/**
+	 * The feature id for the '<em><b>Threadsafe</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__THREADSAFE = DB2ModelPackage.DB2_PROCEDURE__THREADSAFE;
+
+	/**
+	 * The feature id for the '<em><b>Db Info</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__DB_INFO = DB2ModelPackage.DB2_PROCEDURE__DB_INFO;
+
+	/**
+	 * The feature id for the '<em><b>Implicit Schema</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__IMPLICIT_SCHEMA = DB2ModelPackage.DB2_PROCEDURE__IMPLICIT_SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Federated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__FEDERATED = DB2ModelPackage.DB2_PROCEDURE__FEDERATED;
+
+	/**
+	 * The feature id for the '<em><b>Parm Ccsid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__PARM_CCSID = DB2ModelPackage.DB2_PROCEDURE__PARM_CCSID;
+
+	/**
+	 * The feature id for the '<em><b>Special Register</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__SPECIAL_REGISTER = DB2ModelPackage.DB2_PROCEDURE__SPECIAL_REGISTER;
+
+	/**
+	 * The feature id for the '<em><b>Change State</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__CHANGE_STATE = DB2ModelPackage.DB2_PROCEDURE__CHANGE_STATE;
+
+	/**
+	 * The feature id for the '<em><b>Debug Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__DEBUG_ID = DB2ModelPackage.DB2_PROCEDURE__DEBUG_ID;
+
+	/**
+	 * The feature id for the '<em><b>Program Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__PROGRAM_TYPE = DB2ModelPackage.DB2_PROCEDURE__PROGRAM_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Orig Schema Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__ORIG_SCHEMA_NAME = DB2ModelPackage.DB2_PROCEDURE__ORIG_SCHEMA_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Orig Parm Sig</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__ORIG_PARM_SIG = DB2ModelPackage.DB2_PROCEDURE__ORIG_PARM_SIG;
+
+	/**
+	 * The feature id for the '<em><b>Extended Options</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__EXTENDED_OPTIONS = DB2ModelPackage.DB2_PROCEDURE__EXTENDED_OPTIONS;
+
+	/**
+	 * The feature id for the '<em><b>Routine Extensions</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__ROUTINE_EXTENSIONS = DB2ModelPackage.DB2_PROCEDURE__ROUTINE_EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Model Result Sets</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__MODEL_RESULT_SETS = DB2ModelPackage.DB2_PROCEDURE__MODEL_RESULT_SETS;
+
+	/**
+	 * The feature id for the '<em><b>Null Input</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__NULL_INPUT = DB2ModelPackage.DB2_PROCEDURE__NULL_INPUT;
+
+	/**
+	 * The feature id for the '<em><b>Version</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__VERSION = DB2ModelPackage.DB2_PROCEDURE__VERSION;
+
+	/**
+	 * The feature id for the '<em><b>Dialect</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__DIALECT = DB2ModelPackage.DB2_PROCEDURE__DIALECT;
+
+	/**
+	 * The feature id for the '<em><b>External Action</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__EXTERNAL_ACTION = DB2ModelPackage.DB2_PROCEDURE__EXTERNAL_ACTION;
+
+	/**
+	 * The feature id for the '<em><b>Return</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__RETURN = DB2ModelPackage.DB2_PROCEDURE__RETURN;
+
+	/**
+	 * The feature id for the '<em><b>Java Options</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__JAVA_OPTIONS = DB2ModelPackage.DB2_PROCEDURE__JAVA_OPTIONS;
+
+	/**
+	 * The feature id for the '<em><b>Deploy</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__DEPLOY = DB2ModelPackage.DB2_PROCEDURE__DEPLOY;
+
+	/**
+	 * The feature id for the '<em><b>Published</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__PUBLISHED = DB2ModelPackage.DB2_PROCEDURE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Module</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__MODULE = DB2ModelPackage.DB2_PROCEDURE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Implemented</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE__IMPLEMENTED = DB2ModelPackage.DB2_PROCEDURE_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>Module Procedure</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_PROCEDURE_FEATURE_COUNT = DB2ModelPackage.DB2_PROCEDURE_FEATURE_COUNT + 3;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleConditionImpl <em>Module Condition</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleConditionImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWModuleCondition()
+	 * @generated
+	 */
+	int LUW_MODULE_CONDITION = 47;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_CONDITION__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_CONDITION__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_CONDITION__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_CONDITION__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_CONDITION__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_CONDITION__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_CONDITION__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_CONDITION__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Published</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_CONDITION__PUBLISHED = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Module</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_CONDITION__MODULE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Sqlstate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_CONDITION__SQLSTATE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>Module Condition</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_CONDITION_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGlobalVariableImpl <em>Global Variable</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGlobalVariableImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWGlobalVariable()
+	 * @generated
+	 */
+	int LUW_GLOBAL_VARIABLE = 48;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GLOBAL_VARIABLE__EANNOTATIONS = SQLSchemaPackage.TYPED_ELEMENT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GLOBAL_VARIABLE__NAME = SQLSchemaPackage.TYPED_ELEMENT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GLOBAL_VARIABLE__DEPENDENCIES = SQLSchemaPackage.TYPED_ELEMENT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GLOBAL_VARIABLE__DESCRIPTION = SQLSchemaPackage.TYPED_ELEMENT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GLOBAL_VARIABLE__LABEL = SQLSchemaPackage.TYPED_ELEMENT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GLOBAL_VARIABLE__COMMENTS = SQLSchemaPackage.TYPED_ELEMENT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GLOBAL_VARIABLE__EXTENSIONS = SQLSchemaPackage.TYPED_ELEMENT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GLOBAL_VARIABLE__PRIVILEGES = SQLSchemaPackage.TYPED_ELEMENT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Contained Type</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GLOBAL_VARIABLE__CONTAINED_TYPE = SQLSchemaPackage.TYPED_ELEMENT__CONTAINED_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Referenced Type</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GLOBAL_VARIABLE__REFERENCED_TYPE = SQLSchemaPackage.TYPED_ELEMENT__REFERENCED_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Default Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GLOBAL_VARIABLE__DEFAULT_VALUE = SQLSchemaPackage.TYPED_ELEMENT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Is Constant</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GLOBAL_VARIABLE__IS_CONSTANT = SQLSchemaPackage.TYPED_ELEMENT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GLOBAL_VARIABLE__SCHEMA = SQLSchemaPackage.TYPED_ELEMENT_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>Global Variable</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_GLOBAL_VARIABLE_FEATURE_COUNT = SQLSchemaPackage.TYPED_ELEMENT_FEATURE_COUNT + 3;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleType <em>Module Type</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleType
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWModuleType()
+	 * @generated
+	 */
+	int LUW_MODULE_TYPE = 49;
+
+	/**
+	 * The feature id for the '<em><b>Published</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_TYPE__PUBLISHED = LUW_MODULE_OBJECT__PUBLISHED;
+
+	/**
+	 * The feature id for the '<em><b>Module</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_TYPE__MODULE = LUW_MODULE_OBJECT__MODULE;
+
+	/**
+	 * The number of structural features of the '<em>Module Type</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_TYPE_FEATURE_COUNT = LUW_MODULE_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRowDataTypeImpl <em>Row Data Type</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRowDataTypeImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWRowDataType()
+	 * @generated
+	 */
+	int LUW_ROW_DATA_TYPE = 55;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ROW_DATA_TYPE__EANNOTATIONS = SQLDataTypesPackage.USER_DEFINED_TYPE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ROW_DATA_TYPE__NAME = SQLDataTypesPackage.USER_DEFINED_TYPE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ROW_DATA_TYPE__DEPENDENCIES = SQLDataTypesPackage.USER_DEFINED_TYPE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ROW_DATA_TYPE__DESCRIPTION = SQLDataTypesPackage.USER_DEFINED_TYPE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ROW_DATA_TYPE__LABEL = SQLDataTypesPackage.USER_DEFINED_TYPE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ROW_DATA_TYPE__COMMENTS = SQLDataTypesPackage.USER_DEFINED_TYPE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ROW_DATA_TYPE__EXTENSIONS = SQLDataTypesPackage.USER_DEFINED_TYPE__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ROW_DATA_TYPE__PRIVILEGES = SQLDataTypesPackage.USER_DEFINED_TYPE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ROW_DATA_TYPE__SCHEMA = SQLDataTypesPackage.USER_DEFINED_TYPE__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Ordering</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ROW_DATA_TYPE__ORDERING = SQLDataTypesPackage.USER_DEFINED_TYPE__ORDERING;
+
+	/**
+	 * The feature id for the '<em><b>Fields</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ROW_DATA_TYPE__FIELDS = SQLDataTypesPackage.USER_DEFINED_TYPE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Row Data Type</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ROW_DATA_TYPE_FEATURE_COUNT = SQLDataTypesPackage.USER_DEFINED_TYPE_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleRowDataTypeImpl <em>Module Row Data Type</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleRowDataTypeImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWModuleRowDataType()
+	 * @generated
+	 */
+	int LUW_MODULE_ROW_DATA_TYPE = 50;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ROW_DATA_TYPE__EANNOTATIONS = LUW_ROW_DATA_TYPE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ROW_DATA_TYPE__NAME = LUW_ROW_DATA_TYPE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ROW_DATA_TYPE__DEPENDENCIES = LUW_ROW_DATA_TYPE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ROW_DATA_TYPE__DESCRIPTION = LUW_ROW_DATA_TYPE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ROW_DATA_TYPE__LABEL = LUW_ROW_DATA_TYPE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ROW_DATA_TYPE__COMMENTS = LUW_ROW_DATA_TYPE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ROW_DATA_TYPE__EXTENSIONS = LUW_ROW_DATA_TYPE__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ROW_DATA_TYPE__PRIVILEGES = LUW_ROW_DATA_TYPE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ROW_DATA_TYPE__SCHEMA = LUW_ROW_DATA_TYPE__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Ordering</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ROW_DATA_TYPE__ORDERING = LUW_ROW_DATA_TYPE__ORDERING;
+
+	/**
+	 * The feature id for the '<em><b>Fields</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ROW_DATA_TYPE__FIELDS = LUW_ROW_DATA_TYPE__FIELDS;
+
+	/**
+	 * The feature id for the '<em><b>Published</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ROW_DATA_TYPE__PUBLISHED = LUW_ROW_DATA_TYPE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Module</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ROW_DATA_TYPE__MODULE = LUW_ROW_DATA_TYPE_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Module Row Data Type</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ROW_DATA_TYPE_FEATURE_COUNT = LUW_ROW_DATA_TYPE_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWArrayDataTypeImpl <em>Array Data Type</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWArrayDataTypeImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWArrayDataType()
+	 * @generated
+	 */
+	int LUW_ARRAY_DATA_TYPE = 54;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ARRAY_DATA_TYPE__EANNOTATIONS = SQLDataTypesPackage.ARRAY_DATA_TYPE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ARRAY_DATA_TYPE__NAME = SQLDataTypesPackage.ARRAY_DATA_TYPE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ARRAY_DATA_TYPE__DEPENDENCIES = SQLDataTypesPackage.ARRAY_DATA_TYPE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ARRAY_DATA_TYPE__DESCRIPTION = SQLDataTypesPackage.ARRAY_DATA_TYPE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ARRAY_DATA_TYPE__LABEL = SQLDataTypesPackage.ARRAY_DATA_TYPE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ARRAY_DATA_TYPE__COMMENTS = SQLDataTypesPackage.ARRAY_DATA_TYPE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ARRAY_DATA_TYPE__EXTENSIONS = SQLDataTypesPackage.ARRAY_DATA_TYPE__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ARRAY_DATA_TYPE__PRIVILEGES = SQLDataTypesPackage.ARRAY_DATA_TYPE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Element Type</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ARRAY_DATA_TYPE__ELEMENT_TYPE = SQLDataTypesPackage.ARRAY_DATA_TYPE__ELEMENT_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Max Cardinality</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ARRAY_DATA_TYPE__MAX_CARDINALITY = SQLDataTypesPackage.ARRAY_DATA_TYPE__MAX_CARDINALITY;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ARRAY_DATA_TYPE__SCHEMA = SQLDataTypesPackage.ARRAY_DATA_TYPE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Ordering</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ARRAY_DATA_TYPE__ORDERING = SQLDataTypesPackage.ARRAY_DATA_TYPE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Array Index Element Type</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ARRAY_DATA_TYPE__ARRAY_INDEX_ELEMENT_TYPE = SQLDataTypesPackage.ARRAY_DATA_TYPE_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>Array Data Type</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_ARRAY_DATA_TYPE_FEATURE_COUNT = SQLDataTypesPackage.ARRAY_DATA_TYPE_FEATURE_COUNT + 3;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleArrayDataTypeImpl <em>Module Array Data Type</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleArrayDataTypeImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWModuleArrayDataType()
+	 * @generated
+	 */
+	int LUW_MODULE_ARRAY_DATA_TYPE = 51;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ARRAY_DATA_TYPE__EANNOTATIONS = LUW_ARRAY_DATA_TYPE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ARRAY_DATA_TYPE__NAME = LUW_ARRAY_DATA_TYPE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ARRAY_DATA_TYPE__DEPENDENCIES = LUW_ARRAY_DATA_TYPE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ARRAY_DATA_TYPE__DESCRIPTION = LUW_ARRAY_DATA_TYPE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ARRAY_DATA_TYPE__LABEL = LUW_ARRAY_DATA_TYPE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ARRAY_DATA_TYPE__COMMENTS = LUW_ARRAY_DATA_TYPE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ARRAY_DATA_TYPE__EXTENSIONS = LUW_ARRAY_DATA_TYPE__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ARRAY_DATA_TYPE__PRIVILEGES = LUW_ARRAY_DATA_TYPE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Element Type</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ARRAY_DATA_TYPE__ELEMENT_TYPE = LUW_ARRAY_DATA_TYPE__ELEMENT_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Max Cardinality</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ARRAY_DATA_TYPE__MAX_CARDINALITY = LUW_ARRAY_DATA_TYPE__MAX_CARDINALITY;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ARRAY_DATA_TYPE__SCHEMA = LUW_ARRAY_DATA_TYPE__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Ordering</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ARRAY_DATA_TYPE__ORDERING = LUW_ARRAY_DATA_TYPE__ORDERING;
+
+	/**
+	 * The feature id for the '<em><b>Array Index Element Type</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ARRAY_DATA_TYPE__ARRAY_INDEX_ELEMENT_TYPE = LUW_ARRAY_DATA_TYPE__ARRAY_INDEX_ELEMENT_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Published</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ARRAY_DATA_TYPE__PUBLISHED = LUW_ARRAY_DATA_TYPE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Module</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ARRAY_DATA_TYPE__MODULE = LUW_ARRAY_DATA_TYPE_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Module Array Data Type</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_ARRAY_DATA_TYPE_FEATURE_COUNT = LUW_ARRAY_DATA_TYPE_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleDistinctTypeImpl <em>Module Distinct Type</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleDistinctTypeImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWModuleDistinctType()
+	 * @generated
+	 */
+	int LUW_MODULE_DISTINCT_TYPE = 52;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_DISTINCT_TYPE__EANNOTATIONS = SQLDataTypesPackage.DISTINCT_USER_DEFINED_TYPE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_DISTINCT_TYPE__NAME = SQLDataTypesPackage.DISTINCT_USER_DEFINED_TYPE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_DISTINCT_TYPE__DEPENDENCIES = SQLDataTypesPackage.DISTINCT_USER_DEFINED_TYPE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_DISTINCT_TYPE__DESCRIPTION = SQLDataTypesPackage.DISTINCT_USER_DEFINED_TYPE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_DISTINCT_TYPE__LABEL = SQLDataTypesPackage.DISTINCT_USER_DEFINED_TYPE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_DISTINCT_TYPE__COMMENTS = SQLDataTypesPackage.DISTINCT_USER_DEFINED_TYPE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_DISTINCT_TYPE__EXTENSIONS = SQLDataTypesPackage.DISTINCT_USER_DEFINED_TYPE__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_DISTINCT_TYPE__PRIVILEGES = SQLDataTypesPackage.DISTINCT_USER_DEFINED_TYPE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_DISTINCT_TYPE__SCHEMA = SQLDataTypesPackage.DISTINCT_USER_DEFINED_TYPE__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Ordering</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_DISTINCT_TYPE__ORDERING = SQLDataTypesPackage.DISTINCT_USER_DEFINED_TYPE__ORDERING;
+
+	/**
+	 * The feature id for the '<em><b>Predefined Representation</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_DISTINCT_TYPE__PREDEFINED_REPRESENTATION = SQLDataTypesPackage.DISTINCT_USER_DEFINED_TYPE__PREDEFINED_REPRESENTATION;
+
+	/**
+	 * The feature id for the '<em><b>Published</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_DISTINCT_TYPE__PUBLISHED = SQLDataTypesPackage.DISTINCT_USER_DEFINED_TYPE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Module</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_DISTINCT_TYPE__MODULE = SQLDataTypesPackage.DISTINCT_USER_DEFINED_TYPE_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Module Distinct Type</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_DISTINCT_TYPE_FEATURE_COUNT = SQLDataTypesPackage.DISTINCT_USER_DEFINED_TYPE_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleGlobalVariableImpl <em>Module Global Variable</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleGlobalVariableImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWModuleGlobalVariable()
+	 * @generated
+	 */
+	int LUW_MODULE_GLOBAL_VARIABLE = 53;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_GLOBAL_VARIABLE__EANNOTATIONS = LUW_GLOBAL_VARIABLE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_GLOBAL_VARIABLE__NAME = LUW_GLOBAL_VARIABLE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_GLOBAL_VARIABLE__DEPENDENCIES = LUW_GLOBAL_VARIABLE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_GLOBAL_VARIABLE__DESCRIPTION = LUW_GLOBAL_VARIABLE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_GLOBAL_VARIABLE__LABEL = LUW_GLOBAL_VARIABLE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_GLOBAL_VARIABLE__COMMENTS = LUW_GLOBAL_VARIABLE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_GLOBAL_VARIABLE__EXTENSIONS = LUW_GLOBAL_VARIABLE__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_GLOBAL_VARIABLE__PRIVILEGES = LUW_GLOBAL_VARIABLE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Contained Type</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_GLOBAL_VARIABLE__CONTAINED_TYPE = LUW_GLOBAL_VARIABLE__CONTAINED_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Referenced Type</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_GLOBAL_VARIABLE__REFERENCED_TYPE = LUW_GLOBAL_VARIABLE__REFERENCED_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Default Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_GLOBAL_VARIABLE__DEFAULT_VALUE = LUW_GLOBAL_VARIABLE__DEFAULT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Is Constant</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_GLOBAL_VARIABLE__IS_CONSTANT = LUW_GLOBAL_VARIABLE__IS_CONSTANT;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_GLOBAL_VARIABLE__SCHEMA = LUW_GLOBAL_VARIABLE__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Published</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_GLOBAL_VARIABLE__PUBLISHED = LUW_GLOBAL_VARIABLE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Module</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_GLOBAL_VARIABLE__MODULE = LUW_GLOBAL_VARIABLE_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Module Global Variable</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_GLOBAL_VARIABLE_FEATURE_COUNT = LUW_GLOBAL_VARIABLE_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl <em>PLSQL Package</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getPLSQLPackage()
+	 * @generated
+	 */
+	int PLSQL_PACKAGE = 56;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__EANNOTATIONS = LUW_MODULE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__NAME = LUW_MODULE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__DEPENDENCIES = LUW_MODULE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__DESCRIPTION = LUW_MODULE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__LABEL = LUW_MODULE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__COMMENTS = LUW_MODULE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__EXTENSIONS = LUW_MODULE__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__PRIVILEGES = LUW_MODULE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Dialect</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__DIALECT = LUW_MODULE__DIALECT;
+
+	/**
+	 * The feature id for the '<em><b>Owning Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__OWNING_SCHEMA = LUW_MODULE__OWNING_SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Module Objects</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__MODULE_OBJECTS = LUW_MODULE__MODULE_OBJECTS;
+
+	/**
+	 * The feature id for the '<em><b>Specific Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__SPECIFIC_NAME = LUW_MODULE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Language</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__LANGUAGE = LUW_MODULE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Parameter Style</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__PARAMETER_STYLE = LUW_MODULE_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Deterministic</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__DETERMINISTIC = LUW_MODULE_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Sql Data Access</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__SQL_DATA_ACCESS = LUW_MODULE_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Creation TS</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__CREATION_TS = LUW_MODULE_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Last Altered TS</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__LAST_ALTERED_TS = LUW_MODULE_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Authorization ID</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__AUTHORIZATION_ID = LUW_MODULE_FEATURE_COUNT + 7;
+
+	/**
+	 * The feature id for the '<em><b>Security</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__SECURITY = LUW_MODULE_FEATURE_COUNT + 8;
+
+	/**
+	 * The feature id for the '<em><b>External Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__EXTERNAL_NAME = LUW_MODULE_FEATURE_COUNT + 9;
+
+	/**
+	 * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__PARAMETERS = LUW_MODULE_FEATURE_COUNT + 10;
+
+	/**
+	 * The feature id for the '<em><b>Source</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__SOURCE = LUW_MODULE_FEATURE_COUNT + 11;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__SCHEMA = LUW_MODULE_FEATURE_COUNT + 12;
+
+	/**
+	 * The feature id for the '<em><b>Fenced</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__FENCED = LUW_MODULE_FEATURE_COUNT + 13;
+
+	/**
+	 * The feature id for the '<em><b>Threadsafe</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__THREADSAFE = LUW_MODULE_FEATURE_COUNT + 14;
+
+	/**
+	 * The feature id for the '<em><b>Db Info</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__DB_INFO = LUW_MODULE_FEATURE_COUNT + 15;
+
+	/**
+	 * The feature id for the '<em><b>Implicit Schema</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__IMPLICIT_SCHEMA = LUW_MODULE_FEATURE_COUNT + 16;
+
+	/**
+	 * The feature id for the '<em><b>Federated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__FEDERATED = LUW_MODULE_FEATURE_COUNT + 17;
+
+	/**
+	 * The feature id for the '<em><b>Parm Ccsid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__PARM_CCSID = LUW_MODULE_FEATURE_COUNT + 18;
+
+	/**
+	 * The feature id for the '<em><b>Special Register</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__SPECIAL_REGISTER = LUW_MODULE_FEATURE_COUNT + 19;
+
+	/**
+	 * The feature id for the '<em><b>Change State</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__CHANGE_STATE = LUW_MODULE_FEATURE_COUNT + 20;
+
+	/**
+	 * The feature id for the '<em><b>Debug Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__DEBUG_ID = LUW_MODULE_FEATURE_COUNT + 21;
+
+	/**
+	 * The feature id for the '<em><b>Program Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__PROGRAM_TYPE = LUW_MODULE_FEATURE_COUNT + 22;
+
+	/**
+	 * The feature id for the '<em><b>Orig Schema Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__ORIG_SCHEMA_NAME = LUW_MODULE_FEATURE_COUNT + 23;
+
+	/**
+	 * The feature id for the '<em><b>Orig Parm Sig</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__ORIG_PARM_SIG = LUW_MODULE_FEATURE_COUNT + 24;
+
+	/**
+	 * The feature id for the '<em><b>Extended Options</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__EXTENDED_OPTIONS = LUW_MODULE_FEATURE_COUNT + 25;
+
+	/**
+	 * The feature id for the '<em><b>Routine Extensions</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__ROUTINE_EXTENSIONS = LUW_MODULE_FEATURE_COUNT + 26;
+
+	/**
+	 * The feature id for the '<em><b>Package Body</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE__PACKAGE_BODY = LUW_MODULE_FEATURE_COUNT + 27;
+
+	/**
+	 * The number of structural features of the '<em>PLSQL Package</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE_FEATURE_COUNT = LUW_MODULE_FEATURE_COUNT + 28;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageBodyImpl <em>PLSQL Package Body</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageBodyImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getPLSQLPackageBody()
+	 * @generated
+	 */
+	int PLSQL_PACKAGE_BODY = 57;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE_BODY__EANNOTATIONS = SQLRoutinesPackage.SOURCE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE_BODY__NAME = SQLRoutinesPackage.SOURCE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE_BODY__DEPENDENCIES = SQLRoutinesPackage.SOURCE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE_BODY__DESCRIPTION = SQLRoutinesPackage.SOURCE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE_BODY__LABEL = SQLRoutinesPackage.SOURCE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE_BODY__COMMENTS = SQLRoutinesPackage.SOURCE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE_BODY__EXTENSIONS = SQLRoutinesPackage.SOURCE__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE_BODY__PRIVILEGES = SQLRoutinesPackage.SOURCE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Body</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE_BODY__BODY = SQLRoutinesPackage.SOURCE__BODY;
+
+	/**
+	 * The feature id for the '<em><b>Package</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE_BODY__PACKAGE = SQLRoutinesPackage.SOURCE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>PLSQL Package Body</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLSQL_PACKAGE_BODY_FEATURE_COUNT = SQLRoutinesPackage.SOURCE_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWCursorDataTypeImpl <em>Cursor Data Type</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWCursorDataTypeImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWCursorDataType()
+	 * @generated
+	 */
+	int LUW_CURSOR_DATA_TYPE = 58;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_CURSOR_DATA_TYPE__EANNOTATIONS = SQLDataTypesPackage.USER_DEFINED_TYPE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_CURSOR_DATA_TYPE__NAME = SQLDataTypesPackage.USER_DEFINED_TYPE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_CURSOR_DATA_TYPE__DEPENDENCIES = SQLDataTypesPackage.USER_DEFINED_TYPE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_CURSOR_DATA_TYPE__DESCRIPTION = SQLDataTypesPackage.USER_DEFINED_TYPE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_CURSOR_DATA_TYPE__LABEL = SQLDataTypesPackage.USER_DEFINED_TYPE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_CURSOR_DATA_TYPE__COMMENTS = SQLDataTypesPackage.USER_DEFINED_TYPE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_CURSOR_DATA_TYPE__EXTENSIONS = SQLDataTypesPackage.USER_DEFINED_TYPE__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_CURSOR_DATA_TYPE__PRIVILEGES = SQLDataTypesPackage.USER_DEFINED_TYPE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_CURSOR_DATA_TYPE__SCHEMA = SQLDataTypesPackage.USER_DEFINED_TYPE__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Ordering</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_CURSOR_DATA_TYPE__ORDERING = SQLDataTypesPackage.USER_DEFINED_TYPE__ORDERING;
+
+	/**
+	 * The feature id for the '<em><b>Row Type</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_CURSOR_DATA_TYPE__ROW_TYPE = SQLDataTypesPackage.USER_DEFINED_TYPE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Cursor Data Type</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_CURSOR_DATA_TYPE_FEATURE_COUNT = SQLDataTypesPackage.USER_DEFINED_TYPE_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleCursorDataTypeImpl <em>Module Cursor Data Type</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleCursorDataTypeImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWModuleCursorDataType()
+	 * @generated
+	 */
+	int LUW_MODULE_CURSOR_DATA_TYPE = 59;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_CURSOR_DATA_TYPE__EANNOTATIONS = LUW_CURSOR_DATA_TYPE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_CURSOR_DATA_TYPE__NAME = LUW_CURSOR_DATA_TYPE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_CURSOR_DATA_TYPE__DEPENDENCIES = LUW_CURSOR_DATA_TYPE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_CURSOR_DATA_TYPE__DESCRIPTION = LUW_CURSOR_DATA_TYPE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_CURSOR_DATA_TYPE__LABEL = LUW_CURSOR_DATA_TYPE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_CURSOR_DATA_TYPE__COMMENTS = LUW_CURSOR_DATA_TYPE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_CURSOR_DATA_TYPE__EXTENSIONS = LUW_CURSOR_DATA_TYPE__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_CURSOR_DATA_TYPE__PRIVILEGES = LUW_CURSOR_DATA_TYPE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_CURSOR_DATA_TYPE__SCHEMA = LUW_CURSOR_DATA_TYPE__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Ordering</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_CURSOR_DATA_TYPE__ORDERING = LUW_CURSOR_DATA_TYPE__ORDERING;
+
+	/**
+	 * The feature id for the '<em><b>Row Type</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_CURSOR_DATA_TYPE__ROW_TYPE = LUW_CURSOR_DATA_TYPE__ROW_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Published</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_CURSOR_DATA_TYPE__PUBLISHED = LUW_CURSOR_DATA_TYPE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Module</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_CURSOR_DATA_TYPE__MODULE = LUW_CURSOR_DATA_TYPE_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Module Cursor Data Type</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MODULE_CURSOR_DATA_TYPE_FEATURE_COUNT = LUW_CURSOR_DATA_TYPE_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWBufferPoolSizeExceptionImpl <em>Buffer Pool Size Exception</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWBufferPoolSizeExceptionImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWBufferPoolSizeException()
+	 * @generated
+	 */
+	int LUW_BUFFER_POOL_SIZE_EXCEPTION = 60;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL_SIZE_EXCEPTION__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL_SIZE_EXCEPTION__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL_SIZE_EXCEPTION__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL_SIZE_EXCEPTION__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL_SIZE_EXCEPTION__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL_SIZE_EXCEPTION__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL_SIZE_EXCEPTION__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL_SIZE_EXCEPTION__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL_SIZE_EXCEPTION__SIZE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Buffer Pool</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL_SIZE_EXCEPTION__BUFFER_POOL = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Partitions</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL_SIZE_EXCEPTION__PARTITIONS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>Buffer Pool Size Exception</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_BUFFER_POOL_SIZE_EXCEPTION_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWMemberImpl <em>Member</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWMemberImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWMember()
+	 * @generated
+	 */
+	int LUW_MEMBER = 61;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MEMBER__EANNOTATIONS = DB2ModelPackage.DB2_MEMBER__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MEMBER__NAME = DB2ModelPackage.DB2_MEMBER__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MEMBER__DEPENDENCIES = DB2ModelPackage.DB2_MEMBER__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MEMBER__DESCRIPTION = DB2ModelPackage.DB2_MEMBER__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MEMBER__LABEL = DB2ModelPackage.DB2_MEMBER__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MEMBER__COMMENTS = DB2ModelPackage.DB2_MEMBER__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MEMBER__EXTENSIONS = DB2ModelPackage.DB2_MEMBER__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MEMBER__PRIVILEGES = DB2ModelPackage.DB2_MEMBER__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MEMBER__ID = DB2ModelPackage.DB2_MEMBER__ID;
+
+	/**
+	 * The feature id for the '<em><b>Home Host</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MEMBER__HOME_HOST = DB2ModelPackage.DB2_MEMBER__HOME_HOST;
+
+	/**
+	 * The feature id for the '<em><b>Current Host</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MEMBER__CURRENT_HOST = DB2ModelPackage.DB2_MEMBER__CURRENT_HOST;
+
+	/**
+	 * The feature id for the '<em><b>State</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MEMBER__STATE = DB2ModelPackage.DB2_MEMBER__STATE;
+
+	/**
+	 * The feature id for the '<em><b>Cluster</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MEMBER__CLUSTER = DB2ModelPackage.DB2_MEMBER__CLUSTER;
+
+	/**
+	 * The feature id for the '<em><b>Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MEMBER__TYPE = DB2ModelPackage.DB2_MEMBER_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Alert</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MEMBER__ALERT = DB2ModelPackage.DB2_MEMBER_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Db Partition Num</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MEMBER__DB_PARTITION_NUM = DB2ModelPackage.DB2_MEMBER_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Logical Port</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MEMBER__LOGICAL_PORT = DB2ModelPackage.DB2_MEMBER_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Net Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MEMBER__NET_NAME = DB2ModelPackage.DB2_MEMBER_FEATURE_COUNT + 4;
+
+	/**
+	 * The number of structural features of the '<em>Member</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_MEMBER_FEATURE_COUNT = DB2ModelPackage.DB2_MEMBER_FEATURE_COUNT + 5;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWSecurityPolicyImpl <em>Security Policy</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWSecurityPolicyImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWSecurityPolicy()
+	 * @generated
+	 */
+	int LUW_SECURITY_POLICY = 62;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_POLICY__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_POLICY__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_POLICY__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_POLICY__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_POLICY__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_POLICY__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_POLICY__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_POLICY__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Not Authorized Write</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_POLICY__NOT_AUTHORIZED_WRITE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Components</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_POLICY__COMPONENTS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Labels</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_POLICY__LABELS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Table</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_POLICY__TABLE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The number of structural features of the '<em>Security Policy</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_POLICY_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 4;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWSecurityLabelComponentImpl <em>Security Label Component</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWSecurityLabelComponentImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWSecurityLabelComponent()
+	 * @generated
+	 */
+	int LUW_SECURITY_LABEL_COMPONENT = 63;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL_COMPONENT__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL_COMPONENT__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL_COMPONENT__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL_COMPONENT__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL_COMPONENT__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL_COMPONENT__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL_COMPONENT__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL_COMPONENT__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL_COMPONENT__TYPE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>LUW Security Policy</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL_COMPONENT__LUW_SECURITY_POLICY = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Elements</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL_COMPONENT__ELEMENTS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>Security Label Component</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL_COMPONENT_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWSecurityLabelImpl <em>Security Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWSecurityLabelImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWSecurityLabel()
+	 * @generated
+	 */
+	int LUW_SECURITY_LABEL = 64;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Security Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL__SECURITY_LABEL = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Policy</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL__POLICY = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Security Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWSecurityLabelComponentElementImpl <em>Security Label Component Element</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWSecurityLabelComponentElementImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWSecurityLabelComponentElement()
+	 * @generated
+	 */
+	int LUW_SECURITY_LABEL_COMPONENT_ELEMENT = 65;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL_COMPONENT_ELEMENT__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL_COMPONENT_ELEMENT__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL_COMPONENT_ELEMENT__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL_COMPONENT_ELEMENT__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL_COMPONENT_ELEMENT__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL_COMPONENT_ELEMENT__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL_COMPONENT_ELEMENT__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL_COMPONENT_ELEMENT__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL_COMPONENT_ELEMENT__VALUE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Parent Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL_COMPONENT_ELEMENT__PARENT_VALUE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>LUW Security Label Component</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL_COMPONENT_ELEMENT__LUW_SECURITY_LABEL_COMPONENT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>Security Label Component Element</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_SECURITY_LABEL_COMPONENT_ELEMENT_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWStorageGroupImpl <em>Storage Group</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWStorageGroupImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWStorageGroup()
+	 * @generated
+	 */
+	int LUW_STORAGE_GROUP = 66;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_STORAGE_GROUP__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_STORAGE_GROUP__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_STORAGE_GROUP__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_STORAGE_GROUP__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_STORAGE_GROUP__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_STORAGE_GROUP__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_STORAGE_GROUP__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_STORAGE_GROUP__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Storage Paths</b></em>' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_STORAGE_GROUP__STORAGE_PATHS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Overhead</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_STORAGE_GROUP__OVERHEAD = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Device Read Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_STORAGE_GROUP__DEVICE_READ_RATE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Data Tag</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_STORAGE_GROUP__DATA_TAG = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Default</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_STORAGE_GROUP__DEFAULT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Database</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_STORAGE_GROUP__DATABASE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Table Spaces</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_STORAGE_GROUP__TABLE_SPACES = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 6;
+
+	/**
+	 * The number of structural features of the '<em>Storage Group</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_STORAGE_GROUP_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 7;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTemporaryStorageTableImpl <em>Temporary Storage Table</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTemporaryStorageTableImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWTemporaryStorageTable()
+	 * @generated
+	 */
+	int LUW_TEMPORARY_STORAGE_TABLE = 67;
+
+	/**
+	 * The feature id for the '<em><b>Partition Key</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_STORAGE_TABLE__PARTITION_KEY = 0;
+
+	/**
+	 * The feature id for the '<em><b>User Temporary Table Space</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_STORAGE_TABLE__USER_TEMPORARY_TABLE_SPACE = 1;
+
+	/**
+	 * The number of structural features of the '<em>Temporary Storage Table</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_STORAGE_TABLE_FEATURE_COUNT = 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTemporaryTableImpl <em>Temporary Table</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTemporaryTableImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWTemporaryTable()
+	 * @generated
+	 */
+	int LUW_TEMPORARY_TABLE = 68;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_TABLE__EANNOTATIONS = SQLTablesPackage.TEMPORARY_TABLE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_TABLE__NAME = SQLTablesPackage.TEMPORARY_TABLE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_TABLE__DEPENDENCIES = SQLTablesPackage.TEMPORARY_TABLE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_TABLE__DESCRIPTION = SQLTablesPackage.TEMPORARY_TABLE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_TABLE__LABEL = SQLTablesPackage.TEMPORARY_TABLE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_TABLE__COMMENTS = SQLTablesPackage.TEMPORARY_TABLE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_TABLE__EXTENSIONS = SQLTablesPackage.TEMPORARY_TABLE__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_TABLE__PRIVILEGES = SQLTablesPackage.TEMPORARY_TABLE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Columns</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_TABLE__COLUMNS = SQLTablesPackage.TEMPORARY_TABLE__COLUMNS;
+
+	/**
+	 * The feature id for the '<em><b>Supertable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_TABLE__SUPERTABLE = SQLTablesPackage.TEMPORARY_TABLE__SUPERTABLE;
+
+	/**
+	 * The feature id for the '<em><b>Subtables</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_TABLE__SUBTABLES = SQLTablesPackage.TEMPORARY_TABLE__SUBTABLES;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_TABLE__SCHEMA = SQLTablesPackage.TEMPORARY_TABLE__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Udt</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_TABLE__UDT = SQLTablesPackage.TEMPORARY_TABLE__UDT;
+
+	/**
+	 * The feature id for the '<em><b>Triggers</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_TABLE__TRIGGERS = SQLTablesPackage.TEMPORARY_TABLE__TRIGGERS;
+
+	/**
+	 * The feature id for the '<em><b>Index</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_TABLE__INDEX = SQLTablesPackage.TEMPORARY_TABLE__INDEX;
+
+	/**
+	 * The feature id for the '<em><b>Self Ref Column Generation</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_TABLE__SELF_REF_COLUMN_GENERATION = SQLTablesPackage.TEMPORARY_TABLE__SELF_REF_COLUMN_GENERATION;
+
+	/**
+	 * The feature id for the '<em><b>Insertable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_TABLE__INSERTABLE = SQLTablesPackage.TEMPORARY_TABLE__INSERTABLE;
+
+	/**
+	 * The feature id for the '<em><b>Updatable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_TABLE__UPDATABLE = SQLTablesPackage.TEMPORARY_TABLE__UPDATABLE;
+
+	/**
+	 * The feature id for the '<em><b>Constraints</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_TABLE__CONSTRAINTS = SQLTablesPackage.TEMPORARY_TABLE__CONSTRAINTS;
+
+	/**
+	 * The feature id for the '<em><b>Referencing Foreign Keys</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_TABLE__REFERENCING_FOREIGN_KEYS = SQLTablesPackage.TEMPORARY_TABLE__REFERENCING_FOREIGN_KEYS;
+
+	/**
+	 * The feature id for the '<em><b>Local</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_TABLE__LOCAL = SQLTablesPackage.TEMPORARY_TABLE__LOCAL;
+
+	/**
+	 * The feature id for the '<em><b>Delete On Commit</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_TABLE__DELETE_ON_COMMIT = SQLTablesPackage.TEMPORARY_TABLE__DELETE_ON_COMMIT;
+
+	/**
+	 * The feature id for the '<em><b>Partition Key</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_TABLE__PARTITION_KEY = SQLTablesPackage.TEMPORARY_TABLE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>User Temporary Table Space</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_TABLE__USER_TEMPORARY_TABLE_SPACE = SQLTablesPackage.TEMPORARY_TABLE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Table</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_TABLE__TABLE = SQLTablesPackage.TEMPORARY_TABLE_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Log Option</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_TABLE__LOG_OPTION = SQLTablesPackage.TEMPORARY_TABLE_FEATURE_COUNT + 3;
+
+	/**
+	 * The number of structural features of the '<em>Temporary Table</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_TEMPORARY_TABLE_FEATURE_COUNT = SQLTablesPackage.TEMPORARY_TABLE_FEATURE_COUNT + 4;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.ArrayIndexElementTypeImpl <em>Array Index Element Type</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.ArrayIndexElementTypeImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getArrayIndexElementType()
+	 * @generated
+	 */
+	int ARRAY_INDEX_ELEMENT_TYPE = 69;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARRAY_INDEX_ELEMENT_TYPE__EANNOTATIONS = SQLDataTypesPackage.ELEMENT_TYPE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARRAY_INDEX_ELEMENT_TYPE__NAME = SQLDataTypesPackage.ELEMENT_TYPE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARRAY_INDEX_ELEMENT_TYPE__DEPENDENCIES = SQLDataTypesPackage.ELEMENT_TYPE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARRAY_INDEX_ELEMENT_TYPE__DESCRIPTION = SQLDataTypesPackage.ELEMENT_TYPE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARRAY_INDEX_ELEMENT_TYPE__LABEL = SQLDataTypesPackage.ELEMENT_TYPE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARRAY_INDEX_ELEMENT_TYPE__COMMENTS = SQLDataTypesPackage.ELEMENT_TYPE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARRAY_INDEX_ELEMENT_TYPE__EXTENSIONS = SQLDataTypesPackage.ELEMENT_TYPE__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARRAY_INDEX_ELEMENT_TYPE__PRIVILEGES = SQLDataTypesPackage.ELEMENT_TYPE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Contained Type</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARRAY_INDEX_ELEMENT_TYPE__CONTAINED_TYPE = SQLDataTypesPackage.ELEMENT_TYPE__CONTAINED_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Referenced Type</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARRAY_INDEX_ELEMENT_TYPE__REFERENCED_TYPE = SQLDataTypesPackage.ELEMENT_TYPE__REFERENCED_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Collection Data Type</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARRAY_INDEX_ELEMENT_TYPE__COLLECTION_DATA_TYPE = SQLDataTypesPackage.ELEMENT_TYPE__COLLECTION_DATA_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>LUW Array Data Type</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARRAY_INDEX_ELEMENT_TYPE__LUW_ARRAY_DATA_TYPE = SQLDataTypesPackage.ELEMENT_TYPE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Array Index Element Type</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARRAY_INDEX_ELEMENT_TYPE_FEATURE_COUNT = SQLDataTypesPackage.ELEMENT_TYPE_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionEveryClauseElementImpl <em>Partition Every Clause Element</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionEveryClauseElementImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWPartitionEveryClauseElement()
+	 * @generated
+	 */
+	int LUW_PARTITION_EVERY_CLAUSE_ELEMENT = 70;
+
+	/**
+	 * The feature id for the '<em><b>Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_EVERY_CLAUSE_ELEMENT__VALUE = 0;
+
+	/**
+	 * The feature id for the '<em><b>Duration</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_EVERY_CLAUSE_ELEMENT__DURATION = 1;
+
+	/**
+	 * The feature id for the '<em><b>LUW Partition Element</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_EVERY_CLAUSE_ELEMENT__LUW_PARTITION_ELEMENT = 2;
+
+	/**
+	 * The number of structural features of the '<em>Partition Every Clause Element</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LUW_PARTITION_EVERY_CLAUSE_ELEMENT_FEATURE_COUNT = 3;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWContainerType <em>Container Type</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWContainerType
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWContainerType()
+	 * @generated
+	 */
+	int LUW_CONTAINER_TYPE = 71;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.PageSizeType <em>Page Size Type</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.PageSizeType
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getPageSizeType()
+	 * @generated
+	 */
+	int PAGE_SIZE_TYPE = 72;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.BufferPoolType <em>Buffer Pool Type</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.BufferPoolType
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getBufferPoolType()
+	 * @generated
+	 */
+	int BUFFER_POOL_TYPE = 73;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.TableSpaceType <em>Table Space Type</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.TableSpaceType
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getTableSpaceType()
+	 * @generated
+	 */
+	int TABLE_SPACE_TYPE = 74;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.ManagementType <em>Management Type</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.ManagementType
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getManagementType()
+	 * @generated
+	 */
+	int MANAGEMENT_TYPE = 75;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.CheckOptionType <em>Check Option Type</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.CheckOptionType
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getCheckOptionType()
+	 * @generated
+	 */
+	int CHECK_OPTION_TYPE = 76;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.PartitionMethod <em>Partition Method</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.PartitionMethod
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getPartitionMethod()
+	 * @generated
+	 */
+	int PARTITION_METHOD = 77;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.MaintenanceType <em>Maintenance Type</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.MaintenanceType
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getMaintenanceType()
+	 * @generated
+	 */
+	int MAINTENANCE_TYPE = 78;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.RefreshType <em>Refresh Type</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.RefreshType
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getRefreshType()
+	 * @generated
+	 */
+	int REFRESH_TYPE = 79;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.WrapperType <em>Wrapper Type</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.WrapperType
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getWrapperType()
+	 * @generated
+	 */
+	int WRAPPER_TYPE = 80;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.DataPartitionMethod <em>Data Partition Method</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.DataPartitionMethod
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getDataPartitionMethod()
+	 * @generated
+	 */
+	int DATA_PARTITION_METHOD = 81;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.CursorBlockType <em>Cursor Block Type</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.CursorBlockType
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getCursorBlockType()
+	 * @generated
+	 */
+	int CURSOR_BLOCK_TYPE = 82;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.ExplainSnaphotType <em>Explain Snaphot Type</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.ExplainSnaphotType
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getExplainSnaphotType()
+	 * @generated
+	 */
+	int EXPLAIN_SNAPHOT_TYPE = 83;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FileSystemCachingType <em>File System Caching Type</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.FileSystemCachingType
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getFileSystemCachingType()
+	 * @generated
+	 */
+	int FILE_SYSTEM_CACHING_TYPE = 84;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndexPageSplitType <em>Index Page Split Type</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndexPageSplitType
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWIndexPageSplitType()
+	 * @generated
+	 */
+	int LUW_INDEX_PAGE_SPLIT_TYPE = 85;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndexCompressType <em>Index Compress Type</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndexCompressType
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWIndexCompressType()
+	 * @generated
+	 */
+	int LUW_INDEX_COMPRESS_TYPE = 86;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.SystemType <em>System Type</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.SystemType
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getSystemType()
+	 * @generated
+	 */
+	int SYSTEM_TYPE = 87;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.AverageTableSizeType <em>Average Table Size Type</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.AverageTableSizeType
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getAverageTableSizeType()
+	 * @generated
+	 */
+	int AVERAGE_TABLE_SIZE_TYPE = 88;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTableCompressionMode <em>Storage Table Compression Mode</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTableCompressionMode
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWStorageTableCompressionMode()
+	 * @generated
+	 */
+	int LUW_STORAGE_TABLE_COMPRESSION_MODE = 89;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMemberType <em>Member Type</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMemberType
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWMemberType()
+	 * @generated
+	 */
+	int LUW_MEMBER_TYPE = 90;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.MemberStateType <em>Member State Type</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.MemberStateType
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getMemberStateType()
+	 * @generated
+	 */
+	int MEMBER_STATE_TYPE = 91;
+
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentType <em>Security Label Component Type</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentType
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWSecurityLabelComponentType()
+	 * @generated
+	 */
+	int LUW_SECURITY_LABEL_COMPONENT_TYPE = 92;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelNotAuthorizedWriteAction <em>Security Label Not Authorized Write Action</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelNotAuthorizedWriteAction
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWSecurityLabelNotAuthorizedWriteAction()
+	 * @generated
+	 */
+	int LUW_SECURITY_LABEL_NOT_AUTHORIZED_WRITE_ACTION = 93;
+
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFederatedDataSource <em>Federated Data Source</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFederatedDataSource
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWFederatedDataSource()
+	 * @generated
+	 */
+	int LUW_FEDERATED_DATA_SOURCE = 94;
+
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryTableLoggingOption <em>Temporary Table Logging Option</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryTableLoggingOption
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWTemporaryTableLoggingOption()
+	 * @generated
+	 */
+	int LUW_TEMPORARY_TABLE_LOGGING_OPTION = 95;
+
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup <em>Partition Group</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Partition Group</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup
+	 * @generated
+	 */
+	EClass getLUWPartitionGroup();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup#getPartitions <em>Partitions</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Partitions</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup#getPartitions()
+	 * @see #getLUWPartitionGroup()
+	 * @generated
+	 */
+	EReference getLUWPartitionGroup_Partitions();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup#getTableSpaces <em>Table Spaces</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Table Spaces</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup#getTableSpaces()
+	 * @see #getLUWPartitionGroup()
+	 * @generated
+	 */
+	EReference getLUWPartitionGroup_TableSpaces();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup#getDatabase <em>Database</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Database</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup#getDatabase()
+	 * @see #getLUWPartitionGroup()
+	 * @generated
+	 */
+	EReference getLUWPartitionGroup_Database();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup#getBufferPool <em>Buffer Pool</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Buffer Pool</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup#getBufferPool()
+	 * @see #getLUWPartitionGroup()
+	 * @generated
+	 */
+	EReference getLUWPartitionGroup_BufferPool();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace <em>Table Space</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Table Space</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace
+	 * @generated
+	 */
+	EClass getLUWTableSpace();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getTemporaryStorageTables <em>Temporary Storage Tables</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Temporary Storage Tables</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getTemporaryStorageTables()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EReference getLUWTableSpace_TemporaryStorageTables();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getTablespaceType <em>Tablespace Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Tablespace Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getTablespaceType()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_TablespaceType();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getManagementType <em>Management Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Management Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getManagementType()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_ManagementType();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getExtentSize <em>Extent Size</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Extent Size</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getExtentSize()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_ExtentSize();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getPreFetchSize <em>Pre Fetch Size</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Pre Fetch Size</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getPreFetchSize()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_PreFetchSize();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getOverhead <em>Overhead</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Overhead</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getOverhead()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_Overhead();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getTransferRate <em>Transfer Rate</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Transfer Rate</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getTransferRate()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_TransferRate();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#isRecoverDroppedTableOn <em>Recover Dropped Table On</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Recover Dropped Table On</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#isRecoverDroppedTableOn()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_RecoverDroppedTableOn();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getPageSize <em>Page Size</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Page Size</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getPageSize()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_PageSize();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getSize <em>Size</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Size</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getSize()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_Size();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#isAutoResize <em>Auto Resize</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Auto Resize</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#isAutoResize()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_AutoResize();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getInitialSize <em>Initial Size</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Initial Size</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getInitialSize()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_InitialSize();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getIncreaseSize <em>Increase Size</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Increase Size</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getIncreaseSize()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_IncreaseSize();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getMaximumSize <em>Maximum Size</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Maximum Size</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getMaximumSize()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_MaximumSize();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getInitialSizeUnit <em>Initial Size Unit</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Initial Size Unit</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getInitialSizeUnit()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_InitialSizeUnit();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getMaximumSizeUnit <em>Maximum Size Unit</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Maximum Size Unit</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getMaximumSizeUnit()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_MaximumSizeUnit();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getIncreaseSizeUnit <em>Increase Size Unit</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Increase Size Unit</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getIncreaseSizeUnit()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_IncreaseSizeUnit();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getIncreasePercent <em>Increase Percent</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Increase Percent</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getIncreasePercent()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_IncreasePercent();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getFileSystemCaching <em>File System Caching</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>File System Caching</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getFileSystemCaching()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_FileSystemCaching();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getAverageSeekTime <em>Average Seek Time</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Average Seek Time</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getAverageSeekTime()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_AverageSeekTime();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getRotationSpeed <em>Rotation Speed</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Rotation Speed</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getRotationSpeed()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_RotationSpeed();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getTransfer <em>Transfer</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Transfer</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getTransfer()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_Transfer();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getSystemType <em>System Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>System Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getSystemType()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_SystemType();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getAverageTableSize <em>Average Table Size</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Average Table Size</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getAverageTableSize()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_AverageTableSize();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getExternalContainerCount <em>External Container Count</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>External Container Count</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getExternalContainerCount()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_ExternalContainerCount();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#isInheritOverhead <em>Inherit Overhead</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Inherit Overhead</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#isInheritOverhead()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_InheritOverhead();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#isInheritTransferate <em>Inherit Transferate</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Inherit Transferate</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#isInheritTransferate()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_InheritTransferate();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#isRebalance <em>Rebalance</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Rebalance</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#isRebalance()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_Rebalance();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getDataTag <em>Data Tag</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Data Tag</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getDataTag()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_DataTag();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#isSuspendRebalance <em>Suspend Rebalance</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Suspend Rebalance</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#isSuspendRebalance()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_SuspendRebalance();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#isResumeRebalance <em>Resume Rebalance</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Resume Rebalance</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#isResumeRebalance()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EAttribute getLUWTableSpace_ResumeRebalance();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getGroup <em>Group</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Group</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getGroup()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EReference getLUWTableSpace_Group();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getContainers <em>Containers</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Containers</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getContainers()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EReference getLUWTableSpace_Containers();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getBufferPool <em>Buffer Pool</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Buffer Pool</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getBufferPool()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EReference getLUWTableSpace_BufferPool();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getIndexDataTables <em>Index Data Tables</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Index Data Tables</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getIndexDataTables()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EReference getLUWTableSpace_IndexDataTables();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getLOBDataTables <em>LOB Data Tables</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>LOB Data Tables</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getLOBDataTables()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EReference getLUWTableSpace_LOBDataTables();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getRegularDataTables <em>Regular Data Tables</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Regular Data Tables</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getRegularDataTables()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EReference getLUWTableSpace_RegularDataTables();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getDatabase <em>Database</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Database</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getDatabase()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EReference getLUWTableSpace_Database();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getLOBDataPartition <em>LOB Data Partition</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>LOB Data Partition</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getLOBDataPartition()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EReference getLUWTableSpace_LOBDataPartition();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getRegularDataPartition <em>Regular Data Partition</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Regular Data Partition</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getRegularDataPartition()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EReference getLUWTableSpace_RegularDataPartition();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getIndexes <em>Indexes</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Indexes</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getIndexes()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EReference getLUWTableSpace_Indexes();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getIndexDataPartition <em>Index Data Partition</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Index Data Partition</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getIndexDataPartition()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EReference getLUWTableSpace_IndexDataPartition();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getStorageGroup <em>Storage Group</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Storage Group</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getStorageGroup()
+	 * @see #getLUWTableSpace()
+	 * @generated
+	 */
+	EReference getLUWTableSpace_StorageGroup();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition <em>Database Partition</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Database Partition</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition
+	 * @generated
+	 */
+	EClass getLUWDatabasePartition();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getNumber <em>Number</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Number</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getNumber()
+	 * @see #getLUWDatabasePartition()
+	 * @generated
+	 */
+	EAttribute getLUWDatabasePartition_Number();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getPortNumber <em>Port Number</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Port Number</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getPortNumber()
+	 * @see #getLUWDatabasePartition()
+	 * @generated
+	 */
+	EAttribute getLUWDatabasePartition_PortNumber();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getHostName <em>Host Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Host Name</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getHostName()
+	 * @see #getLUWDatabasePartition()
+	 * @generated
+	 */
+	EAttribute getLUWDatabasePartition_HostName();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getSwitchName <em>Switch Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Switch Name</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getSwitchName()
+	 * @see #getLUWDatabasePartition()
+	 * @generated
+	 */
+	EAttribute getLUWDatabasePartition_SwitchName();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#isCatalogPartition <em>Catalog Partition</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Catalog Partition</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#isCatalogPartition()
+	 * @see #getLUWDatabasePartition()
+	 * @generated
+	 */
+	EAttribute getLUWDatabasePartition_CatalogPartition();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getGroup <em>Group</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Group</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getGroup()
+	 * @see #getLUWDatabasePartition()
+	 * @generated
+	 */
+	EReference getLUWDatabasePartition_Group();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getBufferPool <em>Buffer Pool</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Buffer Pool</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getBufferPool()
+	 * @see #getLUWDatabasePartition()
+	 * @generated
+	 */
+	EReference getLUWDatabasePartition_BufferPool();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getContainers <em>Containers</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Containers</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getContainers()
+	 * @see #getLUWDatabasePartition()
+	 * @generated
+	 */
+	EReference getLUWDatabasePartition_Containers();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getSizeException <em>Size Exception</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Size Exception</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getSizeException()
+	 * @see #getLUWDatabasePartition()
+	 * @generated
+	 */
+	EReference getLUWDatabasePartition_SizeException();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer <em>Database Container</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Database Container</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer
+	 * @generated
+	 */
+	EClass getLUWDatabaseContainer();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer#getContainerType <em>Container Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Container Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer#getContainerType()
+	 * @see #getLUWDatabaseContainer()
+	 * @generated
+	 */
+	EAttribute getLUWDatabaseContainer_ContainerType();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer#getSizeInPages <em>Size In Pages</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Size In Pages</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer#getSizeInPages()
+	 * @see #getLUWDatabaseContainer()
+	 * @generated
+	 */
+	EAttribute getLUWDatabaseContainer_SizeInPages();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer#getSize <em>Size</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Size</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer#getSize()
+	 * @see #getLUWDatabaseContainer()
+	 * @generated
+	 */
+	EAttribute getLUWDatabaseContainer_Size();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer#getSizeUnits <em>Size Units</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Size Units</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer#getSizeUnits()
+	 * @see #getLUWDatabaseContainer()
+	 * @generated
+	 */
+	EAttribute getLUWDatabaseContainer_SizeUnits();
+
+	/**
+	 * Returns the meta object for the container reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer#getTableSpace <em>Table Space</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the container reference '<em>Table Space</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer#getTableSpace()
+	 * @see #getLUWDatabaseContainer()
+	 * @generated
+	 */
+	EReference getLUWDatabaseContainer_TableSpace();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer#getPartitions <em>Partitions</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Partitions</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer#getPartitions()
+	 * @see #getLUWDatabaseContainer()
+	 * @generated
+	 */
+	EReference getLUWDatabaseContainer_Partitions();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWAdminServer <em>Admin Server</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Admin Server</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWAdminServer
+	 * @generated
+	 */
+	EClass getLUWAdminServer();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWAdminServer#getInstances <em>Instances</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Instances</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWAdminServer#getInstances()
+	 * @see #getLUWAdminServer()
+	 * @generated
+	 */
+	EReference getLUWAdminServer_Instances();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool <em>Buffer Pool</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Buffer Pool</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool
+	 * @generated
+	 */
+	EClass getLUWBufferPool();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getCreateType <em>Create Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Create Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getCreateType()
+	 * @see #getLUWBufferPool()
+	 * @generated
+	 */
+	EAttribute getLUWBufferPool_CreateType();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getSize <em>Size</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Size</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getSize()
+	 * @see #getLUWBufferPool()
+	 * @generated
+	 */
+	EAttribute getLUWBufferPool_Size();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getPageSize <em>Page Size</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Page Size</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getPageSize()
+	 * @see #getLUWBufferPool()
+	 * @generated
+	 */
+	EAttribute getLUWBufferPool_PageSize();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getBlockSize <em>Block Size</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Block Size</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getBlockSize()
+	 * @see #getLUWBufferPool()
+	 * @generated
+	 */
+	EAttribute getLUWBufferPool_BlockSize();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getNumBlockPages <em>Num Block Pages</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Num Block Pages</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getNumBlockPages()
+	 * @see #getLUWBufferPool()
+	 * @generated
+	 */
+	EAttribute getLUWBufferPool_NumBlockPages();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#isExtendedStorage <em>Extended Storage</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Extended Storage</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#isExtendedStorage()
+	 * @see #getLUWBufferPool()
+	 * @generated
+	 */
+	EAttribute getLUWBufferPool_ExtendedStorage();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#isAutomatic <em>Automatic</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Automatic</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#isAutomatic()
+	 * @see #getLUWBufferPool()
+	 * @generated
+	 */
+	EAttribute getLUWBufferPool_Automatic();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getTableSpaces <em>Table Spaces</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Table Spaces</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getTableSpaces()
+	 * @see #getLUWBufferPool()
+	 * @generated
+	 */
+	EReference getLUWBufferPool_TableSpaces();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getPartitions <em>Partitions</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Partitions</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getPartitions()
+	 * @see #getLUWBufferPool()
+	 * @generated
+	 */
+	EReference getLUWBufferPool_Partitions();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getPartitionGroup <em>Partition Group</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Partition Group</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getPartitionGroup()
+	 * @see #getLUWBufferPool()
+	 * @generated
+	 */
+	EReference getLUWBufferPool_PartitionGroup();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getDatabase <em>Database</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Database</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getDatabase()
+	 * @see #getLUWBufferPool()
+	 * @generated
+	 */
+	EReference getLUWBufferPool_Database();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getSizeException <em>Size Exception</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Size Exception</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getSizeException()
+	 * @see #getLUWBufferPool()
+	 * @generated
+	 */
+	EReference getLUWBufferPool_SizeException();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable <em>Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Table</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable
+	 * @generated
+	 */
+	EClass getLUWTable();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#getPCTFree <em>PCT Free</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>PCT Free</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#getPCTFree()
+	 * @see #getLUWTable()
+	 * @generated
+	 */
+	EAttribute getLUWTable_PCTFree();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#isRestrictOnDrop <em>Restrict On Drop</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Restrict On Drop</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#isRestrictOnDrop()
+	 * @see #getLUWTable()
+	 * @generated
+	 */
+	EAttribute getLUWTable_RestrictOnDrop();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#getPartitionMode <em>Partition Mode</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Partition Mode</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#getPartitionMode()
+	 * @see #getLUWTable()
+	 * @generated
+	 */
+	EAttribute getLUWTable_PartitionMode();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#isAppendMode <em>Append Mode</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Append Mode</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#isAppendMode()
+	 * @see #getLUWTable()
+	 * @generated
+	 */
+	EAttribute getLUWTable_AppendMode();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#getLogMode <em>Log Mode</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Log Mode</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#getLogMode()
+	 * @see #getLUWTable()
+	 * @generated
+	 */
+	EAttribute getLUWTable_LogMode();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#isLockSizeRow <em>Lock Size Row</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Lock Size Row</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#isLockSizeRow()
+	 * @see #getLUWTable()
+	 * @generated
+	 */
+	EAttribute getLUWTable_LockSizeRow();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#isVolatile <em>Volatile</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Volatile</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#isVolatile()
+	 * @see #getLUWTable()
+	 * @generated
+	 */
+	EAttribute getLUWTable_Volatile();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#getSecurityPolicy <em>Security Policy</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Security Policy</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#getSecurityPolicy()
+	 * @see #getLUWTable()
+	 * @generated
+	 */
+	EReference getLUWTable_SecurityPolicy();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#getOptions <em>Options</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Options</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#getOptions()
+	 * @see #getLUWTable()
+	 * @generated
+	 */
+	EReference getLUWTable_Options();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWView <em>View</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>View</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWView
+	 * @generated
+	 */
+	EClass getLUWView();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWView#isFederated <em>Federated</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Federated</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWView#isFederated()
+	 * @see #getLUWView()
+	 * @generated
+	 */
+	EAttribute getLUWView_Federated();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWView#isOptimizeQuery <em>Optimize Query</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Optimize Query</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWView#isOptimizeQuery()
+	 * @see #getLUWView()
+	 * @generated
+	 */
+	EAttribute getLUWView_OptimizeQuery();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey <em>Partition Key</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Partition Key</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey
+	 * @generated
+	 */
+	EClass getLUWPartitionKey();
+
+	/**
+	 * Returns the meta object for the container reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey#getTemporaryStorageTable <em>Temporary Storage Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the container reference '<em>Temporary Storage Table</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey#getTemporaryStorageTable()
+	 * @see #getLUWPartitionKey()
+	 * @generated
+	 */
+	EReference getLUWPartitionKey_TemporaryStorageTable();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey#getPartitionMethod <em>Partition Method</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Partition Method</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey#getPartitionMethod()
+	 * @see #getLUWPartitionKey()
+	 * @generated
+	 */
+	EAttribute getLUWPartitionKey_PartitionMethod();
+
+	/**
+	 * Returns the meta object for the container reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey#getTable <em>Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the container reference '<em>Table</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey#getTable()
+	 * @see #getLUWPartitionKey()
+	 * @generated
+	 */
+	EReference getLUWPartitionKey_Table();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey#getColumns <em>Columns</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Columns</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey#getColumns()
+	 * @see #getLUWPartitionKey()
+	 * @generated
+	 */
+	EReference getLUWPartitionKey_Columns();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNickname <em>Nickname</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Nickname</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNickname
+	 * @generated
+	 */
+	EClass getLUWNickname();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNickname#getRemoteDataSet <em>Remote Data Set</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Remote Data Set</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNickname#getRemoteDataSet()
+	 * @see #getLUWNickname()
+	 * @generated
+	 */
+	EReference getLUWNickname_RemoteDataSet();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNickname#getServer <em>Server</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Server</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNickname#getServer()
+	 * @see #getLUWNickname()
+	 * @generated
+	 */
+	EReference getLUWNickname_Server();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping <em>Function Mapping</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Function Mapping</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping
+	 * @generated
+	 */
+	EClass getLUWFunctionMapping();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getServerType <em>Server Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Server Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getServerType()
+	 * @see #getLUWFunctionMapping()
+	 * @generated
+	 */
+	EAttribute getLUWFunctionMapping_ServerType();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getServerVersion <em>Server Version</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Server Version</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getServerVersion()
+	 * @see #getLUWFunctionMapping()
+	 * @generated
+	 */
+	EAttribute getLUWFunctionMapping_ServerVersion();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getServerName <em>Server Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Server Name</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getServerName()
+	 * @see #getLUWFunctionMapping()
+	 * @generated
+	 */
+	EAttribute getLUWFunctionMapping_ServerName();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getCreationTime <em>Creation Time</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Creation Time</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getCreationTime()
+	 * @see #getLUWFunctionMapping()
+	 * @generated
+	 */
+	EAttribute getLUWFunctionMapping_CreationTime();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#isDisabled <em>Disabled</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Disabled</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#isDisabled()
+	 * @see #getLUWFunctionMapping()
+	 * @generated
+	 */
+	EAttribute getLUWFunctionMapping_Disabled();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getInstsPerInvoc <em>Insts Per Invoc</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Insts Per Invoc</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getInstsPerInvoc()
+	 * @see #getLUWFunctionMapping()
+	 * @generated
+	 */
+	EAttribute getLUWFunctionMapping_InstsPerInvoc();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getInstsPerArgByte <em>Insts Per Arg Byte</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Insts Per Arg Byte</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getInstsPerArgByte()
+	 * @see #getLUWFunctionMapping()
+	 * @generated
+	 */
+	EAttribute getLUWFunctionMapping_InstsPerArgByte();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getIosPerInvoc <em>Ios Per Invoc</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Ios Per Invoc</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getIosPerInvoc()
+	 * @see #getLUWFunctionMapping()
+	 * @generated
+	 */
+	EAttribute getLUWFunctionMapping_IosPerInvoc();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getIosPerArgByte <em>Ios Per Arg Byte</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Ios Per Arg Byte</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getIosPerArgByte()
+	 * @see #getLUWFunctionMapping()
+	 * @generated
+	 */
+	EAttribute getLUWFunctionMapping_IosPerArgByte();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getOptions <em>Options</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Options</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getOptions()
+	 * @see #getLUWFunctionMapping()
+	 * @generated
+	 */
+	EReference getLUWFunctionMapping_Options();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getLocalFunction <em>Local Function</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Local Function</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getLocalFunction()
+	 * @see #getLUWFunctionMapping()
+	 * @generated
+	 */
+	EReference getLUWFunctionMapping_LocalFunction();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getRemoteFunction <em>Remote Function</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Remote Function</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getRemoteFunction()
+	 * @see #getLUWFunctionMapping()
+	 * @generated
+	 */
+	EReference getLUWFunctionMapping_RemoteFunction();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getLUWDatabase <em>LUW Database</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>LUW Database</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping#getLUWDatabase()
+	 * @see #getLUWFunctionMapping()
+	 * @generated
+	 */
+	EReference getLUWFunctionMapping_LUWDatabase();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper <em>Wrapper</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Wrapper</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper
+	 * @generated
+	 */
+	EClass getLUWWrapper();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getVersion <em>Version</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Version</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getVersion()
+	 * @see #getLUWWrapper()
+	 * @generated
+	 */
+	EAttribute getLUWWrapper_Version();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getLibrary <em>Library</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Library</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getLibrary()
+	 * @see #getLUWWrapper()
+	 * @generated
+	 */
+	EAttribute getLUWWrapper_Library();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#isFenced <em>Fenced</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Fenced</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#isFenced()
+	 * @see #getLUWWrapper()
+	 * @generated
+	 */
+	EAttribute getLUWWrapper_Fenced();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getWrapperType <em>Wrapper Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Wrapper Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getWrapperType()
+	 * @see #getLUWWrapper()
+	 * @generated
+	 */
+	EAttribute getLUWWrapper_WrapperType();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getDataSource <em>Data Source</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Data Source</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getDataSource()
+	 * @see #getLUWWrapper()
+	 * @generated
+	 */
+	EAttribute getLUWWrapper_DataSource();
+
+	/**
+	 * Returns the meta object for the attribute list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getDiscoveredLibraries <em>Discovered Libraries</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute list '<em>Discovered Libraries</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getDiscoveredLibraries()
+	 * @see #getLUWWrapper()
+	 * @generated
+	 */
+	EAttribute getLUWWrapper_DiscoveredLibraries();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getServers <em>Servers</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Servers</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getServers()
+	 * @see #getLUWWrapper()
+	 * @generated
+	 */
+	EReference getLUWWrapper_Servers();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getLUWDatabase <em>LUW Database</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>LUW Database</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getLUWDatabase()
+	 * @see #getLUWWrapper()
+	 * @generated
+	 */
+	EReference getLUWWrapper_LUWDatabase();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getOptions <em>Options</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Options</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getOptions()
+	 * @see #getLUWWrapper()
+	 * @generated
+	 */
+	EReference getLUWWrapper_Options();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalNickname <em>Non Relational Nickname</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Non Relational Nickname</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalNickname
+	 * @generated
+	 */
+	EClass getLUWNonRelationalNickname();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalNickname#getNonRelServer <em>Non Rel Server</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Non Rel Server</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalNickname#getNonRelServer()
+	 * @see #getLUWNonRelationalNickname()
+	 * @generated
+	 */
+	EReference getLUWNonRelationalNickname_NonRelServer();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalServer <em>Non Relational Server</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Non Relational Server</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalServer
+	 * @generated
+	 */
+	EClass getLUWNonRelationalServer();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalServer#getNonRelWrapper <em>Non Rel Wrapper</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Non Rel Wrapper</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalServer#getNonRelWrapper()
+	 * @see #getLUWNonRelationalServer()
+	 * @generated
+	 */
+	EReference getLUWNonRelationalServer_NonRelWrapper();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalServer#getNonRelNicknames <em>Non Rel Nicknames</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Non Rel Nicknames</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalServer#getNonRelNicknames()
+	 * @see #getLUWNonRelationalServer()
+	 * @generated
+	 */
+	EReference getLUWNonRelationalServer_NonRelNicknames();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalWrapper <em>Non Relational Wrapper</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Non Relational Wrapper</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalWrapper
+	 * @generated
+	 */
+	EClass getLUWNonRelationalWrapper();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalWrapper#getNonRelServers <em>Non Rel Servers</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Non Rel Servers</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalWrapper#getNonRelServers()
+	 * @see #getLUWNonRelationalWrapper()
+	 * @generated
+	 */
+	EReference getLUWNonRelationalWrapper_NonRelServers();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalNickname <em>Relational Nickname</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Relational Nickname</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalNickname
+	 * @generated
+	 */
+	EClass getLUWRelationalNickname();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalNickname#getRelServer <em>Rel Server</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Rel Server</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalNickname#getRelServer()
+	 * @see #getLUWRelationalNickname()
+	 * @generated
+	 */
+	EReference getLUWRelationalNickname_RelServer();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericUserMapping <em>Generic User Mapping</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Generic User Mapping</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericUserMapping
+	 * @generated
+	 */
+	EClass getLUWGenericUserMapping();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericUserMapping#getRemoteUser <em>Remote User</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Remote User</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericUserMapping#getRemoteUser()
+	 * @see #getLUWGenericUserMapping()
+	 * @generated
+	 */
+	EAttribute getLUWGenericUserMapping_RemoteUser();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericUserMapping#getRemotePassword <em>Remote Password</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Remote Password</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericUserMapping#getRemotePassword()
+	 * @see #getLUWGenericUserMapping()
+	 * @generated
+	 */
+	EAttribute getLUWGenericUserMapping_RemotePassword();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalWrapper <em>Relational Wrapper</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Relational Wrapper</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalWrapper
+	 * @generated
+	 */
+	EClass getLUWRelationalWrapper();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalWrapper#getRelServers <em>Rel Servers</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Rel Servers</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalWrapper#getRelServers()
+	 * @see #getLUWRelationalWrapper()
+	 * @generated
+	 */
+	EReference getLUWRelationalWrapper_RelServers();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer <em>Server</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Server</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer
+	 * @generated
+	 */
+	EClass getLUWServer();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getServerType <em>Server Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Server Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getServerType()
+	 * @see #getLUWServer()
+	 * @generated
+	 */
+	EAttribute getLUWServer_ServerType();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getServerVersion <em>Server Version</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Server Version</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getServerVersion()
+	 * @see #getLUWServer()
+	 * @generated
+	 */
+	EAttribute getLUWServer_ServerVersion();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getUserMappings <em>User Mappings</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>User Mappings</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getUserMappings()
+	 * @see #getLUWServer()
+	 * @generated
+	 */
+	EReference getLUWServer_UserMappings();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getWrapper <em>Wrapper</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Wrapper</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getWrapper()
+	 * @see #getLUWServer()
+	 * @generated
+	 */
+	EReference getLUWServer_Wrapper();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getNicknames <em>Nicknames</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Nicknames</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getNicknames()
+	 * @see #getLUWServer()
+	 * @generated
+	 */
+	EReference getLUWServer_Nicknames();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getLUWDatabase <em>LUW Database</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>LUW Database</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getLUWDatabase()
+	 * @see #getLUWServer()
+	 * @generated
+	 */
+	EReference getLUWServer_LUWDatabase();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getOptions <em>Options</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Options</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getOptions()
+	 * @see #getLUWServer()
+	 * @generated
+	 */
+	EReference getLUWServer_Options();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getRemoteServer <em>Remote Server</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Remote Server</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getRemoteServer()
+	 * @see #getLUWServer()
+	 * @generated
+	 */
+	EReference getLUWServer_RemoteServer();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping <em>Type Mapping</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Type Mapping</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping
+	 * @generated
+	 */
+	EClass getLUWTypeMapping();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping#getServerType <em>Server Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Server Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping#getServerType()
+	 * @see #getLUWTypeMapping()
+	 * @generated
+	 */
+	EAttribute getLUWTypeMapping_ServerType();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping#getServerVesion <em>Server Vesion</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Server Vesion</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping#getServerVesion()
+	 * @see #getLUWTypeMapping()
+	 * @generated
+	 */
+	EAttribute getLUWTypeMapping_ServerVesion();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping#getServerName <em>Server Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Server Name</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping#getServerName()
+	 * @see #getLUWTypeMapping()
+	 * @generated
+	 */
+	EAttribute getLUWTypeMapping_ServerName();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping#getCreationTime <em>Creation Time</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Creation Time</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping#getCreationTime()
+	 * @see #getLUWTypeMapping()
+	 * @generated
+	 */
+	EAttribute getLUWTypeMapping_CreationTime();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping#getLocalType <em>Local Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Local Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping#getLocalType()
+	 * @see #getLUWTypeMapping()
+	 * @generated
+	 */
+	EReference getLUWTypeMapping_LocalType();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping#getRemoteType <em>Remote Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Remote Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping#getRemoteType()
+	 * @see #getLUWTypeMapping()
+	 * @generated
+	 */
+	EReference getLUWTypeMapping_RemoteType();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWUserMapping <em>User Mapping</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>User Mapping</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWUserMapping
+	 * @generated
+	 */
+	EClass getLUWUserMapping();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWUserMapping#getLocalAuthId <em>Local Auth Id</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Local Auth Id</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWUserMapping#getLocalAuthId()
+	 * @see #getLUWUserMapping()
+	 * @generated
+	 */
+	EAttribute getLUWUserMapping_LocalAuthId();
+
+	/**
+	 * Returns the meta object for the container reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWUserMapping#getServer <em>Server</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the container reference '<em>Server</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWUserMapping#getServer()
+	 * @see #getLUWUserMapping()
+	 * @generated
+	 */
+	EReference getLUWUserMapping_Server();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWUserMapping#getOptions <em>Options</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Options</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWUserMapping#getOptions()
+	 * @see #getLUWUserMapping()
+	 * @generated
+	 */
+	EReference getLUWUserMapping_Options();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption <em>Option</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Option</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption
+	 * @generated
+	 */
+	EClass getLUWOption();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption#getValue <em>Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Value</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption#getValue()
+	 * @see #getLUWOption()
+	 * @generated
+	 */
+	EAttribute getLUWOption_Value();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer <em>Relational Server</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Relational Server</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer
+	 * @generated
+	 */
+	EClass getLUWRelationalServer();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getCpuRatio <em>Cpu Ratio</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Cpu Ratio</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getCpuRatio()
+	 * @see #getLUWRelationalServer()
+	 * @generated
+	 */
+	EAttribute getLUWRelationalServer_CpuRatio();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getIoRatio <em>Io Ratio</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Io Ratio</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getIoRatio()
+	 * @see #getLUWRelationalServer()
+	 * @generated
+	 */
+	EAttribute getLUWRelationalServer_IoRatio();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getCommRate <em>Comm Rate</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Comm Rate</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getCommRate()
+	 * @see #getLUWRelationalServer()
+	 * @generated
+	 */
+	EAttribute getLUWRelationalServer_CommRate();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#isFoldId <em>Fold Id</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Fold Id</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#isFoldId()
+	 * @see #getLUWRelationalServer()
+	 * @generated
+	 */
+	EAttribute getLUWRelationalServer_FoldId();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#isFoldPW <em>Fold PW</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Fold PW</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#isFoldPW()
+	 * @see #getLUWRelationalServer()
+	 * @generated
+	 */
+	EAttribute getLUWRelationalServer_FoldPW();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#isCollatingSequence <em>Collating Sequence</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Collating Sequence</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#isCollatingSequence()
+	 * @see #getLUWRelationalServer()
+	 * @generated
+	 */
+	EAttribute getLUWRelationalServer_CollatingSequence();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#isPushdown <em>Pushdown</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Pushdown</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#isPushdown()
+	 * @see #getLUWRelationalServer()
+	 * @generated
+	 */
+	EAttribute getLUWRelationalServer_Pushdown();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getNode <em>Node</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Node</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getNode()
+	 * @see #getLUWRelationalServer()
+	 * @generated
+	 */
+	EAttribute getLUWRelationalServer_Node();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getDbName <em>Db Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Db Name</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getDbName()
+	 * @see #getLUWRelationalServer()
+	 * @generated
+	 */
+	EAttribute getLUWRelationalServer_DbName();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#isIudAppSvptEnforce <em>Iud App Svpt Enforce</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Iud App Svpt Enforce</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#isIudAppSvptEnforce()
+	 * @see #getLUWRelationalServer()
+	 * @generated
+	 */
+	EAttribute getLUWRelationalServer_IudAppSvptEnforce();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getPassword <em>Password</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Password</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getPassword()
+	 * @see #getLUWRelationalServer()
+	 * @generated
+	 */
+	EAttribute getLUWRelationalServer_Password();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getRelNicknames <em>Rel Nicknames</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Rel Nicknames</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getRelNicknames()
+	 * @see #getLUWRelationalServer()
+	 * @generated
+	 */
+	EReference getLUWRelationalServer_RelNicknames();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getRelWrapper <em>Rel Wrapper</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Rel Wrapper</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getRelWrapper()
+	 * @see #getLUWRelationalServer()
+	 * @generated
+	 */
+	EReference getLUWRelationalServer_RelWrapper();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase <em>Database</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Database</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase
+	 * @generated
+	 */
+	EClass getLUWDatabase();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#isFederated <em>Federated</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Federated</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#isFederated()
+	 * @see #getLUWDatabase()
+	 * @generated
+	 */
+	EAttribute getLUWDatabase_Federated();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getGroups <em>Groups</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Groups</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getGroups()
+	 * @see #getLUWDatabase()
+	 * @generated
+	 */
+	EReference getLUWDatabase_Groups();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getWrappers <em>Wrappers</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Wrappers</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getWrappers()
+	 * @see #getLUWDatabase()
+	 * @generated
+	 */
+	EReference getLUWDatabase_Wrappers();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getServers <em>Servers</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Servers</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getServers()
+	 * @see #getLUWDatabase()
+	 * @generated
+	 */
+	EReference getLUWDatabase_Servers();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getFunctionMappings <em>Function Mappings</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Function Mappings</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getFunctionMappings()
+	 * @see #getLUWDatabase()
+	 * @generated
+	 */
+	EReference getLUWDatabase_FunctionMappings();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getTypeMappings <em>Type Mappings</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Type Mappings</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getTypeMappings()
+	 * @see #getLUWDatabase()
+	 * @generated
+	 */
+	EReference getLUWDatabase_TypeMappings();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getReverseTypeMappings <em>Reverse Type Mappings</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Reverse Type Mappings</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getReverseTypeMappings()
+	 * @see #getLUWDatabase()
+	 * @generated
+	 */
+	EReference getLUWDatabase_ReverseTypeMappings();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getBufferpools <em>Bufferpools</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Bufferpools</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getBufferpools()
+	 * @see #getLUWDatabase()
+	 * @generated
+	 */
+	EReference getLUWDatabase_Bufferpools();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getTablespaces <em>Tablespaces</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Tablespaces</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getTablespaces()
+	 * @see #getLUWDatabase()
+	 * @generated
+	 */
+	EReference getLUWDatabase_Tablespaces();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getStorageGroups <em>Storage Groups</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Storage Groups</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getStorageGroups()
+	 * @see #getLUWDatabase()
+	 * @generated
+	 */
+	EReference getLUWDatabase_StorageGroups();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getDefaultStorageGroup <em>Default Storage Group</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Default Storage Group</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getDefaultStorageGroup()
+	 * @see #getLUWDatabase()
+	 * @generated
+	 */
+	EReference getLUWDatabase_DefaultStorageGroup();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn <em>Column</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Column</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn
+	 * @generated
+	 */
+	EClass getLUWColumn();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn#isLobLogged <em>Lob Logged</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Lob Logged</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn#isLobLogged()
+	 * @see #getLUWColumn()
+	 * @generated
+	 */
+	EAttribute getLUWColumn_LobLogged();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn#isLobCompacted <em>Lob Compacted</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Lob Compacted</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn#isLobCompacted()
+	 * @see #getLUWColumn()
+	 * @generated
+	 */
+	EAttribute getLUWColumn_LobCompacted();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn#getCompression <em>Compression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Compression</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn#getCompression()
+	 * @see #getLUWColumn()
+	 * @generated
+	 */
+	EAttribute getLUWColumn_Compression();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn#getInlineLength <em>Inline Length</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Inline Length</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn#getInlineLength()
+	 * @see #getLUWColumn()
+	 * @generated
+	 */
+	EAttribute getLUWColumn_InlineLength();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn#isHidden <em>Hidden</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Hidden</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn#isHidden()
+	 * @see #getLUWColumn()
+	 * @generated
+	 */
+	EAttribute getLUWColumn_Hidden();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn#getSecurityLabel <em>Security Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Security Label</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn#getSecurityLabel()
+	 * @see #getLUWColumn()
+	 * @generated
+	 */
+	EAttribute getLUWColumn_SecurityLabel();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn#getOptions <em>Options</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Options</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn#getOptions()
+	 * @see #getLUWColumn()
+	 * @generated
+	 */
+	EReference getLUWColumn_Options();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericNickname <em>Generic Nickname</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Generic Nickname</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericNickname
+	 * @generated
+	 */
+	EClass getLUWGenericNickname();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericNickname#getGenericServer <em>Generic Server</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Generic Server</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericNickname#getGenericServer()
+	 * @see #getLUWGenericNickname()
+	 * @generated
+	 */
+	EReference getLUWGenericNickname_GenericServer();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericServer <em>Generic Server</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Generic Server</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericServer
+	 * @generated
+	 */
+	EClass getLUWGenericServer();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericServer#getGenericNicknames <em>Generic Nicknames</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Generic Nicknames</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericServer#getGenericNicknames()
+	 * @see #getLUWGenericServer()
+	 * @generated
+	 */
+	EReference getLUWGenericServer_GenericNicknames();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericServer#getGenericWrapper <em>Generic Wrapper</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Generic Wrapper</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericServer#getGenericWrapper()
+	 * @see #getLUWGenericServer()
+	 * @generated
+	 */
+	EReference getLUWGenericServer_GenericWrapper();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMaterializedQueryTable <em>Materialized Query Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Materialized Query Table</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMaterializedQueryTable
+	 * @generated
+	 */
+	EClass getLUWMaterializedQueryTable();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericWrapper <em>Generic Wrapper</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Generic Wrapper</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericWrapper
+	 * @generated
+	 */
+	EClass getLUWGenericWrapper();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericWrapper#getGenericServers <em>Generic Servers</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Generic Servers</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericWrapper#getGenericServers()
+	 * @see #getLUWGenericWrapper()
+	 * @generated
+	 */
+	EReference getLUWGenericWrapper_GenericServers();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable <em>Storage Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Storage Table</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable
+	 * @generated
+	 */
+	EClass getLUWStorageTable();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#isValueCompression <em>Value Compression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Value Compression</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#isValueCompression()
+	 * @see #getLUWStorageTable()
+	 * @generated
+	 */
+	EAttribute getLUWStorageTable_ValueCompression();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#isRowCompression <em>Row Compression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Row Compression</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#isRowCompression()
+	 * @see #getLUWStorageTable()
+	 * @generated
+	 */
+	EAttribute getLUWStorageTable_RowCompression();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#isRowCompressionEmpty <em>Row Compression Empty</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Row Compression Empty</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#isRowCompressionEmpty()
+	 * @see #getLUWStorageTable()
+	 * @generated
+	 */
+	EAttribute getLUWStorageTable_RowCompressionEmpty();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getCompressionMode <em>Compression Mode</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Compression Mode</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getCompressionMode()
+	 * @see #getLUWStorageTable()
+	 * @generated
+	 */
+	EAttribute getLUWStorageTable_CompressionMode();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getPartitionKey <em>Partition Key</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Partition Key</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getPartitionKey()
+	 * @see #getLUWStorageTable()
+	 * @generated
+	 */
+	EReference getLUWStorageTable_PartitionKey();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getIndexDataTableSpace <em>Index Data Table Space</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Index Data Table Space</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getIndexDataTableSpace()
+	 * @see #getLUWStorageTable()
+	 * @generated
+	 */
+	EReference getLUWStorageTable_IndexDataTableSpace();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getLOBDataTableSpace <em>LOB Data Table Space</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>LOB Data Table Space</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getLOBDataTableSpace()
+	 * @see #getLUWStorageTable()
+	 * @generated
+	 */
+	EReference getLUWStorageTable_LOBDataTableSpace();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getRegularDataTableSpace <em>Regular Data Table Space</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Regular Data Table Space</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getRegularDataTableSpace()
+	 * @see #getLUWStorageTable()
+	 * @generated
+	 */
+	EReference getLUWStorageTable_RegularDataTableSpace();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getDataPartitions <em>Data Partitions</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Data Partitions</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getDataPartitions()
+	 * @see #getLUWStorageTable()
+	 * @generated
+	 */
+	EReference getLUWStorageTable_DataPartitions();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getDataPartitionKey <em>Data Partition Key</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Data Partition Key</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getDataPartitionKey()
+	 * @see #getLUWStorageTable()
+	 * @generated
+	 */
+	EReference getLUWStorageTable_DataPartitionKey();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.RelationalRemoteServer <em>Relational Remote Server</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Relational Remote Server</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.RelationalRemoteServer
+	 * @generated
+	 */
+	EClass getRelationalRemoteServer();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.RelationalRemoteServer#getDatabase <em>Database</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Database</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.RelationalRemoteServer#getDatabase()
+	 * @see #getRelationalRemoteServer()
+	 * @generated
+	 */
+	EReference getRelationalRemoteServer_Database();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.RelationalRemoteDataSet <em>Relational Remote Data Set</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Relational Remote Data Set</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.RelationalRemoteDataSet
+	 * @generated
+	 */
+	EClass getRelationalRemoteDataSet();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.RelationalRemoteDataSet#getTable <em>Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Table</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.RelationalRemoteDataSet#getTable()
+	 * @see #getRelationalRemoteDataSet()
+	 * @generated
+	 */
+	EReference getRelationalRemoteDataSet_Table();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.RemoteServer <em>Remote Server</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Remote Server</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.RemoteServer
+	 * @generated
+	 */
+	EClass getRemoteServer();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.RemoteServer#getLUWServer <em>LUW Server</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>LUW Server</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.RemoteServer#getLUWServer()
+	 * @see #getRemoteServer()
+	 * @generated
+	 */
+	EReference getRemoteServer_LUWServer();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.RemoteDataSet <em>Remote Data Set</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Remote Data Set</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.RemoteDataSet
+	 * @generated
+	 */
+	EClass getRemoteDataSet();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.RemoteDataSet#getNickname <em>Nickname</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Nickname</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.RemoteDataSet#getNickname()
+	 * @see #getRemoteDataSet()
+	 * @generated
+	 */
+	EReference getRemoteDataSet_Nickname();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex <em>Index</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Index</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex
+	 * @generated
+	 */
+	EClass getLUWIndex();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getPCTFree <em>PCT Free</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>PCT Free</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getPCTFree()
+	 * @see #getLUWIndex()
+	 * @generated
+	 */
+	EAttribute getLUWIndex_PCTFree();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getMinPCTFree <em>Min PCT Free</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Min PCT Free</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getMinPCTFree()
+	 * @see #getLUWIndex()
+	 * @generated
+	 */
+	EAttribute getLUWIndex_MinPCTFree();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isReverseScan <em>Reverse Scan</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Reverse Scan</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isReverseScan()
+	 * @see #getLUWIndex()
+	 * @generated
+	 */
+	EAttribute getLUWIndex_ReverseScan();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isNotPartitioned <em>Not Partitioned</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Not Partitioned</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isNotPartitioned()
+	 * @see #getLUWIndex()
+	 * @generated
+	 */
+	EAttribute getLUWIndex_NotPartitioned();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getXmlPattern <em>Xml Pattern</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Xml Pattern</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getXmlPattern()
+	 * @see #getLUWIndex()
+	 * @generated
+	 */
+	EAttribute getLUWIndex_XmlPattern();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getAsSQLDataType <em>As SQL Data Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>As SQL Data Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getAsSQLDataType()
+	 * @see #getLUWIndex()
+	 * @generated
+	 */
+	EReference getLUWIndex_AsSQLDataType();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isAsSQLDataTypeHashed <em>As SQL Data Type Hashed</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>As SQL Data Type Hashed</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isAsSQLDataTypeHashed()
+	 * @see #getLUWIndex()
+	 * @generated
+	 */
+	EAttribute getLUWIndex_AsSQLDataTypeHashed();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isSystemRequired <em>System Required</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>System Required</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isSystemRequired()
+	 * @see #getLUWIndex()
+	 * @generated
+	 */
+	EAttribute getLUWIndex_SystemRequired();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getPageSplitType <em>Page Split Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Page Split Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getPageSplitType()
+	 * @see #getLUWIndex()
+	 * @generated
+	 */
+	EAttribute getLUWIndex_PageSplitType();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getLevel2PctFree <em>Level2 Pct Free</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Level2 Pct Free</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getLevel2PctFree()
+	 * @see #getLUWIndex()
+	 * @generated
+	 */
+	EAttribute getLUWIndex_Level2PctFree();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getMinPctUsed <em>Min Pct Used</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Min Pct Used</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getMinPctUsed()
+	 * @see #getLUWIndex()
+	 * @generated
+	 */
+	EAttribute getLUWIndex_MinPctUsed();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getCompress <em>Compress</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Compress</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getCompress()
+	 * @see #getLUWIndex()
+	 * @generated
+	 */
+	EAttribute getLUWIndex_Compress();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isCollectStats <em>Collect Stats</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Collect Stats</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isCollectStats()
+	 * @see #getLUWIndex()
+	 * @generated
+	 */
+	EAttribute getLUWIndex_CollectStats();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isSampledStats <em>Sampled Stats</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Sampled Stats</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isSampledStats()
+	 * @see #getLUWIndex()
+	 * @generated
+	 */
+	EAttribute getLUWIndex_SampledStats();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isDetailedStats <em>Detailed Stats</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Detailed Stats</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isDetailedStats()
+	 * @see #getLUWIndex()
+	 * @generated
+	 */
+	EAttribute getLUWIndex_DetailedStats();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isIgnoreInvalidValues <em>Ignore Invalid Values</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Ignore Invalid Values</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isIgnoreInvalidValues()
+	 * @see #getLUWIndex()
+	 * @generated
+	 */
+	EAttribute getLUWIndex_IgnoreInvalidValues();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isExcludeNullKeys <em>Exclude Null Keys</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Exclude Null Keys</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#isExcludeNullKeys()
+	 * @see #getLUWIndex()
+	 * @generated
+	 */
+	EAttribute getLUWIndex_ExcludeNullKeys();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getTablespace <em>Tablespace</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Tablespace</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getTablespace()
+	 * @see #getLUWIndex()
+	 * @generated
+	 */
+	EReference getLUWIndex_Tablespace();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWAttributeDefinition <em>Attribute Definition</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Attribute Definition</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWAttributeDefinition
+	 * @generated
+	 */
+	EClass getLUWAttributeDefinition();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWAttributeDefinition#isLOBLogged <em>LOB Logged</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>LOB Logged</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWAttributeDefinition#isLOBLogged()
+	 * @see #getLUWAttributeDefinition()
+	 * @generated
+	 */
+	EAttribute getLUWAttributeDefinition_LOBLogged();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWAttributeDefinition#isLOBCompacted <em>LOB Compacted</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>LOB Compacted</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWAttributeDefinition#isLOBCompacted()
+	 * @see #getLUWAttributeDefinition()
+	 * @generated
+	 */
+	EAttribute getLUWAttributeDefinition_LOBCompacted();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure <em>Federated Procedure</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Federated Procedure</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure
+	 * @generated
+	 */
+	EClass getFederatedProcedure();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getRemoteUniqueId <em>Remote Unique Id</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Remote Unique Id</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getRemoteUniqueId()
+	 * @see #getFederatedProcedure()
+	 * @generated
+	 */
+	EAttribute getFederatedProcedure_RemoteUniqueId();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getRemoteServer <em>Remote Server</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Remote Server</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getRemoteServer()
+	 * @see #getFederatedProcedure()
+	 * @generated
+	 */
+	EAttribute getFederatedProcedure_RemoteServer();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getRemoteSchema <em>Remote Schema</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Remote Schema</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getRemoteSchema()
+	 * @see #getFederatedProcedure()
+	 * @generated
+	 */
+	EAttribute getFederatedProcedure_RemoteSchema();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getRemotePackage <em>Remote Package</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Remote Package</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getRemotePackage()
+	 * @see #getFederatedProcedure()
+	 * @generated
+	 */
+	EAttribute getFederatedProcedure_RemotePackage();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getRemoteProcedureName <em>Remote Procedure Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Remote Procedure Name</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getRemoteProcedureName()
+	 * @see #getFederatedProcedure()
+	 * @generated
+	 */
+	EAttribute getFederatedProcedure_RemoteProcedureName();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getNumberOfParameters <em>Number Of Parameters</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Number Of Parameters</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getNumberOfParameters()
+	 * @see #getFederatedProcedure()
+	 * @generated
+	 */
+	EAttribute getFederatedProcedure_NumberOfParameters();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getResultSetsToClient <em>Result Sets To Client</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Result Sets To Client</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getResultSetsToClient()
+	 * @see #getFederatedProcedure()
+	 * @generated
+	 */
+	EAttribute getFederatedProcedure_ResultSetsToClient();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getNumberOfRefCursors <em>Number Of Ref Cursors</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Number Of Ref Cursors</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getNumberOfRefCursors()
+	 * @see #getFederatedProcedure()
+	 * @generated
+	 */
+	EAttribute getFederatedProcedure_NumberOfRefCursors();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#isAllResultSetsToCaller <em>All Result Sets To Caller</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>All Result Sets To Caller</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#isAllResultSetsToCaller()
+	 * @see #getFederatedProcedure()
+	 * @generated
+	 */
+	EAttribute getFederatedProcedure_AllResultSetsToCaller();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getFederatedProcedure <em>Federated Procedure</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Federated Procedure</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getFederatedProcedure()
+	 * @see #getFederatedProcedure()
+	 * @generated
+	 */
+	EReference getFederatedProcedure_FederatedProcedure();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getRemoteProcedure <em>Remote Procedure</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Remote Procedure</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getRemoteProcedure()
+	 * @see #getFederatedProcedure()
+	 * @generated
+	 */
+	EReference getFederatedProcedure_RemoteProcedure();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getFederatedParameter <em>Federated Parameter</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Federated Parameter</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure#getFederatedParameter()
+	 * @see #getFederatedProcedure()
+	 * @generated
+	 */
+	EReference getFederatedProcedure_FederatedParameter();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedParameter <em>Federated Parameter</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Federated Parameter</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedParameter
+	 * @generated
+	 */
+	EClass getFederatedParameter();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedParameter#getRemoteCodePage <em>Remote Code Page</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Remote Code Page</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedParameter#getRemoteCodePage()
+	 * @see #getFederatedParameter()
+	 * @generated
+	 */
+	EAttribute getFederatedParameter_RemoteCodePage();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedParameter#getRemoteParamTypeID <em>Remote Param Type ID</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Remote Param Type ID</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedParameter#getRemoteParamTypeID()
+	 * @see #getFederatedParameter()
+	 * @generated
+	 */
+	EAttribute getFederatedParameter_RemoteParamTypeID();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedParameter#getFederatedProcedure <em>Federated Procedure</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Federated Procedure</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedParameter#getFederatedProcedure()
+	 * @see #getFederatedParameter()
+	 * @generated
+	 */
+	EReference getFederatedParameter_FederatedProcedure();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedParameter#getRemoteParameter <em>Remote Parameter</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Remote Parameter</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedParameter#getRemoteParameter()
+	 * @see #getFederatedParameter()
+	 * @generated
+	 */
+	EReference getFederatedParameter_RemoteParameter();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionExpression <em>Partition Expression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Partition Expression</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionExpression
+	 * @generated
+	 */
+	EClass getLUWPartitionExpression();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionExpression#isNullsLast <em>Nulls Last</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Nulls Last</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionExpression#isNullsLast()
+	 * @see #getLUWPartitionExpression()
+	 * @generated
+	 */
+	EAttribute getLUWPartitionExpression_NullsLast();
+
+	/**
+	 * Returns the meta object for the container reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionExpression#getKey <em>Key</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the container reference '<em>Key</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionExpression#getKey()
+	 * @see #getLUWPartitionExpression()
+	 * @generated
+	 */
+	EReference getLUWPartitionExpression_Key();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionExpression#getColumn <em>Column</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Column</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionExpression#getColumn()
+	 * @see #getLUWPartitionExpression()
+	 * @generated
+	 */
+	EReference getLUWPartitionExpression_Column();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionExpression#getPartitionElements <em>Partition Elements</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Partition Elements</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionExpression#getPartitionElements()
+	 * @see #getLUWPartitionExpression()
+	 * @generated
+	 */
+	EReference getLUWPartitionExpression_PartitionElements();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement <em>Partition Element</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Partition Element</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement
+	 * @generated
+	 */
+	EClass getLUWPartitionElement();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement#getStarting <em>Starting</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Starting</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement#getStarting()
+	 * @see #getLUWPartitionElement()
+	 * @generated
+	 */
+	EAttribute getLUWPartitionElement_Starting();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement#getEnding <em>Ending</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Ending</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement#getEnding()
+	 * @see #getLUWPartitionElement()
+	 * @generated
+	 */
+	EAttribute getLUWPartitionElement_Ending();
+
+	/**
+	 * Returns the meta object for the container reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement#getLUWPartitionExpression <em>LUW Partition Expression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the container reference '<em>LUW Partition Expression</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement#getLUWPartitionExpression()
+	 * @see #getLUWPartitionElement()
+	 * @generated
+	 */
+	EReference getLUWPartitionElement_LUWPartitionExpression();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement#getPartition <em>Partition</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Partition</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement#getPartition()
+	 * @see #getLUWPartitionElement()
+	 * @generated
+	 */
+	EReference getLUWPartitionElement_Partition();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement#getEveryClause <em>Every Clause</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Every Clause</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement#getEveryClause()
+	 * @see #getLUWPartitionElement()
+	 * @generated
+	 */
+	EReference getLUWPartitionElement_EveryClause();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition <em>Data Partition</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Data Partition</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition
+	 * @generated
+	 */
+	EClass getLUWDataPartition();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getId <em>Id</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Id</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getId()
+	 * @see #getLUWDataPartition()
+	 * @generated
+	 */
+	EAttribute getLUWDataPartition_Id();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#isLowInclusive <em>Low Inclusive</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Low Inclusive</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#isLowInclusive()
+	 * @see #getLUWDataPartition()
+	 * @generated
+	 */
+	EAttribute getLUWDataPartition_LowInclusive();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#isHighInclusive <em>High Inclusive</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>High Inclusive</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#isHighInclusive()
+	 * @see #getLUWDataPartition()
+	 * @generated
+	 */
+	EAttribute getLUWDataPartition_HighInclusive();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getLOBDataTableSpace <em>LOB Data Table Space</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>LOB Data Table Space</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getLOBDataTableSpace()
+	 * @see #getLUWDataPartition()
+	 * @generated
+	 */
+	EReference getLUWDataPartition_LOBDataTableSpace();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getRegularDataTableSpace <em>Regular Data Table Space</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Regular Data Table Space</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getRegularDataTableSpace()
+	 * @see #getLUWDataPartition()
+	 * @generated
+	 */
+	EReference getLUWDataPartition_RegularDataTableSpace();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getPartitionElements <em>Partition Elements</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Partition Elements</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getPartitionElements()
+	 * @see #getLUWDataPartition()
+	 * @generated
+	 */
+	EReference getLUWDataPartition_PartitionElements();
+
+	/**
+	 * Returns the meta object for the container reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getTable <em>Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the container reference '<em>Table</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getTable()
+	 * @see #getLUWDataPartition()
+	 * @generated
+	 */
+	EReference getLUWDataPartition_Table();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getIndexDataTableSpace <em>Index Data Table Space</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Index Data Table Space</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getIndexDataTableSpace()
+	 * @see #getLUWDataPartition()
+	 * @generated
+	 */
+	EReference getLUWDataPartition_IndexDataTableSpace();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartitionKey <em>Data Partition Key</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Data Partition Key</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartitionKey
+	 * @generated
+	 */
+	EClass getLUWDataPartitionKey();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartitionKey#getPartitionMethod <em>Partition Method</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Partition Method</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartitionKey#getPartitionMethod()
+	 * @see #getLUWDataPartitionKey()
+	 * @generated
+	 */
+	EAttribute getLUWDataPartitionKey_PartitionMethod();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartitionKey#getPartitionExpressions <em>Partition Expressions</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Partition Expressions</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartitionKey#getPartitionExpressions()
+	 * @see #getLUWDataPartitionKey()
+	 * @generated
+	 */
+	EReference getLUWDataPartitionKey_PartitionExpressions();
+
+	/**
+	 * Returns the meta object for the container reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartitionKey#getTable <em>Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the container reference '<em>Table</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartitionKey#getTable()
+	 * @see #getLUWDataPartitionKey()
+	 * @generated
+	 */
+	EReference getLUWDataPartitionKey_Table();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage <em>Database Package</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Database Package</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage
+	 * @generated
+	 */
+	EClass getLUWDatabasePackage();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage#getCreator <em>Creator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Creator</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage#getCreator()
+	 * @see #getLUWDatabasePackage()
+	 * @generated
+	 */
+	EAttribute getLUWDatabasePackage_Creator();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage#getBinder <em>Binder</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Binder</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage#getBinder()
+	 * @see #getLUWDatabasePackage()
+	 * @generated
+	 */
+	EAttribute getLUWDatabasePackage_Binder();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage#getCursorBlock <em>Cursor Block</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Cursor Block</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage#getCursorBlock()
+	 * @see #getLUWDatabasePackage()
+	 * @generated
+	 */
+	EAttribute getLUWDatabasePackage_CursorBlock();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage#getNumberOfSections <em>Number Of Sections</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Number Of Sections</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage#getNumberOfSections()
+	 * @see #getLUWDatabasePackage()
+	 * @generated
+	 */
+	EAttribute getLUWDatabasePackage_NumberOfSections();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage#getOptimizationClass <em>Optimization Class</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Optimization Class</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage#getOptimizationClass()
+	 * @see #getLUWDatabasePackage()
+	 * @generated
+	 */
+	EAttribute getLUWDatabasePackage_OptimizationClass();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage#getExplainSnapshot <em>Explain Snapshot</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Explain Snapshot</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage#getExplainSnapshot()
+	 * @see #getLUWDatabasePackage()
+	 * @generated
+	 */
+	EAttribute getLUWDatabasePackage_ExplainSnapshot();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule <em>Module</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Module</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule
+	 * @generated
+	 */
+	EClass getLUWModule();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule#getDialect <em>Dialect</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Dialect</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule#getDialect()
+	 * @see #getLUWModule()
+	 * @generated
+	 */
+	EAttribute getLUWModule_Dialect();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule#getOwningSchema <em>Owning Schema</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Owning Schema</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule#getOwningSchema()
+	 * @see #getLUWModule()
+	 * @generated
+	 */
+	EReference getLUWModule_OwningSchema();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule#getModuleObjects <em>Module Objects</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Module Objects</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule#getModuleObjects()
+	 * @see #getLUWModule()
+	 * @generated
+	 */
+	EReference getLUWModule_ModuleObjects();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject <em>Module Object</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Module Object</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject
+	 * @generated
+	 */
+	EClass getLUWModuleObject();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject#isPublished <em>Published</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Published</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject#isPublished()
+	 * @see #getLUWModuleObject()
+	 * @generated
+	 */
+	EAttribute getLUWModuleObject_Published();
+
+	/**
+	 * Returns the meta object for the container reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject#getModule <em>Module</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the container reference '<em>Module</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject#getModule()
+	 * @see #getLUWModuleObject()
+	 * @generated
+	 */
+	EReference getLUWModuleObject_Module();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleFunction <em>Module Function</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Module Function</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleFunction
+	 * @generated
+	 */
+	EClass getLUWModuleFunction();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleFunction#isImplemented <em>Implemented</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Implemented</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleFunction#isImplemented()
+	 * @see #getLUWModuleFunction()
+	 * @generated
+	 */
+	EAttribute getLUWModuleFunction_Implemented();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleProcedure <em>Module Procedure</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Module Procedure</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleProcedure
+	 * @generated
+	 */
+	EClass getLUWModuleProcedure();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleProcedure#isImplemented <em>Implemented</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Implemented</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleProcedure#isImplemented()
+	 * @see #getLUWModuleProcedure()
+	 * @generated
+	 */
+	EAttribute getLUWModuleProcedure_Implemented();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleCondition <em>Module Condition</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Module Condition</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleCondition
+	 * @generated
+	 */
+	EClass getLUWModuleCondition();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleCondition#getSqlstate <em>Sqlstate</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Sqlstate</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleCondition#getSqlstate()
+	 * @see #getLUWModuleCondition()
+	 * @generated
+	 */
+	EAttribute getLUWModuleCondition_Sqlstate();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGlobalVariable <em>Global Variable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Global Variable</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGlobalVariable
+	 * @generated
+	 */
+	EClass getLUWGlobalVariable();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGlobalVariable#getDefaultValue <em>Default Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Default Value</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGlobalVariable#getDefaultValue()
+	 * @see #getLUWGlobalVariable()
+	 * @generated
+	 */
+	EAttribute getLUWGlobalVariable_DefaultValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGlobalVariable#isIsConstant <em>Is Constant</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Is Constant</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGlobalVariable#isIsConstant()
+	 * @see #getLUWGlobalVariable()
+	 * @generated
+	 */
+	EAttribute getLUWGlobalVariable_IsConstant();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGlobalVariable#getSchema <em>Schema</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Schema</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGlobalVariable#getSchema()
+	 * @see #getLUWGlobalVariable()
+	 * @generated
+	 */
+	EReference getLUWGlobalVariable_Schema();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleType <em>Module Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Module Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleType
+	 * @generated
+	 */
+	EClass getLUWModuleType();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleRowDataType <em>Module Row Data Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Module Row Data Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleRowDataType
+	 * @generated
+	 */
+	EClass getLUWModuleRowDataType();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleArrayDataType <em>Module Array Data Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Module Array Data Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleArrayDataType
+	 * @generated
+	 */
+	EClass getLUWModuleArrayDataType();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleDistinctType <em>Module Distinct Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Module Distinct Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleDistinctType
+	 * @generated
+	 */
+	EClass getLUWModuleDistinctType();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleGlobalVariable <em>Module Global Variable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Module Global Variable</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleGlobalVariable
+	 * @generated
+	 */
+	EClass getLUWModuleGlobalVariable();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWArrayDataType <em>Array Data Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Array Data Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWArrayDataType
+	 * @generated
+	 */
+	EClass getLUWArrayDataType();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWArrayDataType#getArrayIndexElementType <em>Array Index Element Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Array Index Element Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWArrayDataType#getArrayIndexElementType()
+	 * @see #getLUWArrayDataType()
+	 * @generated
+	 */
+	EReference getLUWArrayDataType_ArrayIndexElementType();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRowDataType <em>Row Data Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Row Data Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRowDataType
+	 * @generated
+	 */
+	EClass getLUWRowDataType();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.PLSQLPackage <em>PLSQL Package</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>PLSQL Package</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.PLSQLPackage
+	 * @generated
+	 */
+	EClass getPLSQLPackage();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.PLSQLPackage#getPackageBody <em>Package Body</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Package Body</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.PLSQLPackage#getPackageBody()
+	 * @see #getPLSQLPackage()
+	 * @generated
+	 */
+	EReference getPLSQLPackage_PackageBody();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.PLSQLPackageBody <em>PLSQL Package Body</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>PLSQL Package Body</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.PLSQLPackageBody
+	 * @generated
+	 */
+	EClass getPLSQLPackageBody();
+
+	/**
+	 * Returns the meta object for the container reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.PLSQLPackageBody#getPackage <em>Package</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the container reference '<em>Package</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.PLSQLPackageBody#getPackage()
+	 * @see #getPLSQLPackageBody()
+	 * @generated
+	 */
+	EReference getPLSQLPackageBody_Package();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWCursorDataType <em>Cursor Data Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Cursor Data Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWCursorDataType
+	 * @generated
+	 */
+	EClass getLUWCursorDataType();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWCursorDataType#getRowType <em>Row Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Row Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWCursorDataType#getRowType()
+	 * @see #getLUWCursorDataType()
+	 * @generated
+	 */
+	EReference getLUWCursorDataType_RowType();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleCursorDataType <em>Module Cursor Data Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Module Cursor Data Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleCursorDataType
+	 * @generated
+	 */
+	EClass getLUWModuleCursorDataType();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPoolSizeException <em>Buffer Pool Size Exception</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Buffer Pool Size Exception</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPoolSizeException
+	 * @generated
+	 */
+	EClass getLUWBufferPoolSizeException();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPoolSizeException#getSize <em>Size</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Size</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPoolSizeException#getSize()
+	 * @see #getLUWBufferPoolSizeException()
+	 * @generated
+	 */
+	EAttribute getLUWBufferPoolSizeException_Size();
+
+	/**
+	 * Returns the meta object for the container reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPoolSizeException#getBufferPool <em>Buffer Pool</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the container reference '<em>Buffer Pool</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPoolSizeException#getBufferPool()
+	 * @see #getLUWBufferPoolSizeException()
+	 * @generated
+	 */
+	EReference getLUWBufferPoolSizeException_BufferPool();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPoolSizeException#getPartitions <em>Partitions</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Partitions</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPoolSizeException#getPartitions()
+	 * @see #getLUWBufferPoolSizeException()
+	 * @generated
+	 */
+	EReference getLUWBufferPoolSizeException_Partitions();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMember <em>Member</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Member</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMember
+	 * @generated
+	 */
+	EClass getLUWMember();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMember#getType <em>Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMember#getType()
+	 * @see #getLUWMember()
+	 * @generated
+	 */
+	EAttribute getLUWMember_Type();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMember#getAlert <em>Alert</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Alert</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMember#getAlert()
+	 * @see #getLUWMember()
+	 * @generated
+	 */
+	EAttribute getLUWMember_Alert();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMember#getDbPartitionNum <em>Db Partition Num</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Db Partition Num</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMember#getDbPartitionNum()
+	 * @see #getLUWMember()
+	 * @generated
+	 */
+	EAttribute getLUWMember_DbPartitionNum();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMember#getLogicalPort <em>Logical Port</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Logical Port</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMember#getLogicalPort()
+	 * @see #getLUWMember()
+	 * @generated
+	 */
+	EAttribute getLUWMember_LogicalPort();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMember#getNetName <em>Net Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Net Name</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMember#getNetName()
+	 * @see #getLUWMember()
+	 * @generated
+	 */
+	EAttribute getLUWMember_NetName();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy <em>Security Policy</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Security Policy</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy
+	 * @generated
+	 */
+	EClass getLUWSecurityPolicy();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy#getNotAuthorizedWrite <em>Not Authorized Write</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Not Authorized Write</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy#getNotAuthorizedWrite()
+	 * @see #getLUWSecurityPolicy()
+	 * @generated
+	 */
+	EAttribute getLUWSecurityPolicy_NotAuthorizedWrite();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy#getComponents <em>Components</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Components</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy#getComponents()
+	 * @see #getLUWSecurityPolicy()
+	 * @generated
+	 */
+	EReference getLUWSecurityPolicy_Components();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy#getLabels <em>Labels</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Labels</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy#getLabels()
+	 * @see #getLUWSecurityPolicy()
+	 * @generated
+	 */
+	EReference getLUWSecurityPolicy_Labels();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy#getTable <em>Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Table</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy#getTable()
+	 * @see #getLUWSecurityPolicy()
+	 * @generated
+	 */
+	EReference getLUWSecurityPolicy_Table();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponent <em>Security Label Component</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Security Label Component</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponent
+	 * @generated
+	 */
+	EClass getLUWSecurityLabelComponent();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponent#getType <em>Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponent#getType()
+	 * @see #getLUWSecurityLabelComponent()
+	 * @generated
+	 */
+	EAttribute getLUWSecurityLabelComponent_Type();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponent#getLUWSecurityPolicy <em>LUW Security Policy</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>LUW Security Policy</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponent#getLUWSecurityPolicy()
+	 * @see #getLUWSecurityLabelComponent()
+	 * @generated
+	 */
+	EReference getLUWSecurityLabelComponent_LUWSecurityPolicy();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponent#getElements <em>Elements</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Elements</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponent#getElements()
+	 * @see #getLUWSecurityLabelComponent()
+	 * @generated
+	 */
+	EReference getLUWSecurityLabelComponent_Elements();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabel <em>Security Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Security Label</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabel
+	 * @generated
+	 */
+	EClass getLUWSecurityLabel();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabel#getSecurityLabel <em>Security Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Security Label</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabel#getSecurityLabel()
+	 * @see #getLUWSecurityLabel()
+	 * @generated
+	 */
+	EAttribute getLUWSecurityLabel_SecurityLabel();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabel#getPolicy <em>Policy</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Policy</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabel#getPolicy()
+	 * @see #getLUWSecurityLabel()
+	 * @generated
+	 */
+	EReference getLUWSecurityLabel_Policy();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentElement <em>Security Label Component Element</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Security Label Component Element</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentElement
+	 * @generated
+	 */
+	EClass getLUWSecurityLabelComponentElement();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentElement#getValue <em>Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Value</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentElement#getValue()
+	 * @see #getLUWSecurityLabelComponentElement()
+	 * @generated
+	 */
+	EAttribute getLUWSecurityLabelComponentElement_Value();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentElement#getParentValue <em>Parent Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Parent Value</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentElement#getParentValue()
+	 * @see #getLUWSecurityLabelComponentElement()
+	 * @generated
+	 */
+	EAttribute getLUWSecurityLabelComponentElement_ParentValue();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentElement#getLUWSecurityLabelComponent <em>LUW Security Label Component</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>LUW Security Label Component</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentElement#getLUWSecurityLabelComponent()
+	 * @see #getLUWSecurityLabelComponentElement()
+	 * @generated
+	 */
+	EReference getLUWSecurityLabelComponentElement_LUWSecurityLabelComponent();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup <em>Storage Group</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Storage Group</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup
+	 * @generated
+	 */
+	EClass getLUWStorageGroup();
+
+	/**
+	 * Returns the meta object for the attribute list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#getStoragePaths <em>Storage Paths</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute list '<em>Storage Paths</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#getStoragePaths()
+	 * @see #getLUWStorageGroup()
+	 * @generated
+	 */
+	EAttribute getLUWStorageGroup_StoragePaths();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#getOverhead <em>Overhead</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Overhead</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#getOverhead()
+	 * @see #getLUWStorageGroup()
+	 * @generated
+	 */
+	EAttribute getLUWStorageGroup_Overhead();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#getDeviceReadRate <em>Device Read Rate</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Device Read Rate</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#getDeviceReadRate()
+	 * @see #getLUWStorageGroup()
+	 * @generated
+	 */
+	EAttribute getLUWStorageGroup_DeviceReadRate();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#getDataTag <em>Data Tag</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Data Tag</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#getDataTag()
+	 * @see #getLUWStorageGroup()
+	 * @generated
+	 */
+	EAttribute getLUWStorageGroup_DataTag();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#isDefault <em>Default</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Default</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#isDefault()
+	 * @see #getLUWStorageGroup()
+	 * @generated
+	 */
+	EAttribute getLUWStorageGroup_Default();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#getDatabase <em>Database</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Database</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#getDatabase()
+	 * @see #getLUWStorageGroup()
+	 * @generated
+	 */
+	EReference getLUWStorageGroup_Database();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#getTableSpaces <em>Table Spaces</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Table Spaces</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#getTableSpaces()
+	 * @see #getLUWStorageGroup()
+	 * @generated
+	 */
+	EReference getLUWStorageGroup_TableSpaces();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryStorageTable <em>Temporary Storage Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Temporary Storage Table</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryStorageTable
+	 * @generated
+	 */
+	EClass getLUWTemporaryStorageTable();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryStorageTable#getPartitionKey <em>Partition Key</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Partition Key</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryStorageTable#getPartitionKey()
+	 * @see #getLUWTemporaryStorageTable()
+	 * @generated
+	 */
+	EReference getLUWTemporaryStorageTable_PartitionKey();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryStorageTable#getUserTemporaryTableSpace <em>User Temporary Table Space</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>User Temporary Table Space</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryStorageTable#getUserTemporaryTableSpace()
+	 * @see #getLUWTemporaryStorageTable()
+	 * @generated
+	 */
+	EReference getLUWTemporaryStorageTable_UserTemporaryTableSpace();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryTable <em>Temporary Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Temporary Table</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryTable
+	 * @generated
+	 */
+	EClass getLUWTemporaryTable();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryTable#getTable <em>Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Table</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryTable#getTable()
+	 * @see #getLUWTemporaryTable()
+	 * @generated
+	 */
+	EReference getLUWTemporaryTable_Table();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryTable#getLogOption <em>Log Option</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Log Option</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryTable#getLogOption()
+	 * @see #getLUWTemporaryTable()
+	 * @generated
+	 */
+	EAttribute getLUWTemporaryTable_LogOption();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.ArrayIndexElementType <em>Array Index Element Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Array Index Element Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.ArrayIndexElementType
+	 * @generated
+	 */
+	EClass getArrayIndexElementType();
+
+	/**
+	 * Returns the meta object for the container reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.ArrayIndexElementType#getLUWArrayDataType <em>LUW Array Data Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the container reference '<em>LUW Array Data Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.ArrayIndexElementType#getLUWArrayDataType()
+	 * @see #getArrayIndexElementType()
+	 * @generated
+	 */
+	EReference getArrayIndexElementType_LUWArrayDataType();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionEveryClauseElement <em>Partition Every Clause Element</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Partition Every Clause Element</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionEveryClauseElement
+	 * @generated
+	 */
+	EClass getLUWPartitionEveryClauseElement();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionEveryClauseElement#getValue <em>Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Value</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionEveryClauseElement#getValue()
+	 * @see #getLUWPartitionEveryClauseElement()
+	 * @generated
+	 */
+	EAttribute getLUWPartitionEveryClauseElement_Value();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionEveryClauseElement#getDuration <em>Duration</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Duration</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionEveryClauseElement#getDuration()
+	 * @see #getLUWPartitionEveryClauseElement()
+	 * @generated
+	 */
+	EAttribute getLUWPartitionEveryClauseElement_Duration();
+
+	/**
+	 * Returns the meta object for the container reference '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionEveryClauseElement#getLUWPartitionElement <em>LUW Partition Element</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the container reference '<em>LUW Partition Element</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionEveryClauseElement#getLUWPartitionElement()
+	 * @see #getLUWPartitionEveryClauseElement()
+	 * @generated
+	 */
+	EReference getLUWPartitionEveryClauseElement_LUWPartitionElement();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWContainerType <em>Container Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Container Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWContainerType
+	 * @generated
+	 */
+	EEnum getLUWContainerType();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.PageSizeType <em>Page Size Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Page Size Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.PageSizeType
+	 * @generated
+	 */
+	EEnum getPageSizeType();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.BufferPoolType <em>Buffer Pool Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Buffer Pool Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.BufferPoolType
+	 * @generated
+	 */
+	EEnum getBufferPoolType();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.TableSpaceType <em>Table Space Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Table Space Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.TableSpaceType
+	 * @generated
+	 */
+	EEnum getTableSpaceType();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.ManagementType <em>Management Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Management Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.ManagementType
+	 * @generated
+	 */
+	EEnum getManagementType();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.CheckOptionType <em>Check Option Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Check Option Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.CheckOptionType
+	 * @generated
+	 */
+	EEnum getCheckOptionType();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.PartitionMethod <em>Partition Method</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Partition Method</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.PartitionMethod
+	 * @generated
+	 */
+	EEnum getPartitionMethod();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.MaintenanceType <em>Maintenance Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Maintenance Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.MaintenanceType
+	 * @generated
+	 */
+	EEnum getMaintenanceType();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.RefreshType <em>Refresh Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Refresh Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.RefreshType
+	 * @generated
+	 */
+	EEnum getRefreshType();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.WrapperType <em>Wrapper Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Wrapper Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.WrapperType
+	 * @generated
+	 */
+	EEnum getWrapperType();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.DataPartitionMethod <em>Data Partition Method</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Data Partition Method</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.DataPartitionMethod
+	 * @generated
+	 */
+	EEnum getDataPartitionMethod();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.CursorBlockType <em>Cursor Block Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Cursor Block Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.CursorBlockType
+	 * @generated
+	 */
+	EEnum getCursorBlockType();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.ExplainSnaphotType <em>Explain Snaphot Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Explain Snaphot Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.ExplainSnaphotType
+	 * @generated
+	 */
+	EEnum getExplainSnaphotType();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FileSystemCachingType <em>File System Caching Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>File System Caching Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.FileSystemCachingType
+	 * @generated
+	 */
+	EEnum getFileSystemCachingType();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndexPageSplitType <em>Index Page Split Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Index Page Split Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndexPageSplitType
+	 * @generated
+	 */
+	EEnum getLUWIndexPageSplitType();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndexCompressType <em>Index Compress Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Index Compress Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndexCompressType
+	 * @generated
+	 */
+	EEnum getLUWIndexCompressType();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.SystemType <em>System Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>System Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.SystemType
+	 * @generated
+	 */
+	EEnum getSystemType();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.AverageTableSizeType <em>Average Table Size Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Average Table Size Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.AverageTableSizeType
+	 * @generated
+	 */
+	EEnum getAverageTableSizeType();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTableCompressionMode <em>Storage Table Compression Mode</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Storage Table Compression Mode</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTableCompressionMode
+	 * @generated
+	 */
+	EEnum getLUWStorageTableCompressionMode();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMemberType <em>Member Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Member Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMemberType
+	 * @generated
+	 */
+	EEnum getLUWMemberType();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.MemberStateType <em>Member State Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Member State Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.MemberStateType
+	 * @generated
+	 */
+	EEnum getMemberStateType();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentType <em>Security Label Component Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Security Label Component Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentType
+	 * @generated
+	 */
+	EEnum getLUWSecurityLabelComponentType();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelNotAuthorizedWriteAction <em>Security Label Not Authorized Write Action</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Security Label Not Authorized Write Action</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelNotAuthorizedWriteAction
+	 * @generated
+	 */
+	EEnum getLUWSecurityLabelNotAuthorizedWriteAction();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFederatedDataSource <em>Federated Data Source</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Federated Data Source</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFederatedDataSource
+	 * @generated
+	 */
+	EEnum getLUWFederatedDataSource();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryTableLoggingOption <em>Temporary Table Logging Option</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Temporary Table Logging Option</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryTableLoggingOption
+	 * @generated
+	 */
+	EEnum getLUWTemporaryTableLoggingOption();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	LUWFactory getLUWFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionGroupImpl <em>Partition Group</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionGroupImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWPartitionGroup()
+		 * @generated
+		 */
+		EClass LUW_PARTITION_GROUP = eINSTANCE.getLUWPartitionGroup();
+
+		/**
+		 * The meta object literal for the '<em><b>Partitions</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_PARTITION_GROUP__PARTITIONS = eINSTANCE.getLUWPartitionGroup_Partitions();
+
+		/**
+		 * The meta object literal for the '<em><b>Table Spaces</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_PARTITION_GROUP__TABLE_SPACES = eINSTANCE.getLUWPartitionGroup_TableSpaces();
+
+		/**
+		 * The meta object literal for the '<em><b>Database</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_PARTITION_GROUP__DATABASE = eINSTANCE.getLUWPartitionGroup_Database();
+
+		/**
+		 * The meta object literal for the '<em><b>Buffer Pool</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_PARTITION_GROUP__BUFFER_POOL = eINSTANCE.getLUWPartitionGroup_BufferPool();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl <em>Table Space</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWTableSpace()
+		 * @generated
+		 */
+		EClass LUW_TABLE_SPACE = eINSTANCE.getLUWTableSpace();
+
+		/**
+		 * The meta object literal for the '<em><b>Temporary Storage Tables</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_TABLE_SPACE__TEMPORARY_STORAGE_TABLES = eINSTANCE.getLUWTableSpace_TemporaryStorageTables();
+
+		/**
+		 * The meta object literal for the '<em><b>Tablespace Type</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__TABLESPACE_TYPE = eINSTANCE.getLUWTableSpace_TablespaceType();
+
+		/**
+		 * The meta object literal for the '<em><b>Management Type</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__MANAGEMENT_TYPE = eINSTANCE.getLUWTableSpace_ManagementType();
+
+		/**
+		 * The meta object literal for the '<em><b>Extent Size</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__EXTENT_SIZE = eINSTANCE.getLUWTableSpace_ExtentSize();
+
+		/**
+		 * The meta object literal for the '<em><b>Pre Fetch Size</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__PRE_FETCH_SIZE = eINSTANCE.getLUWTableSpace_PreFetchSize();
+
+		/**
+		 * The meta object literal for the '<em><b>Overhead</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__OVERHEAD = eINSTANCE.getLUWTableSpace_Overhead();
+
+		/**
+		 * The meta object literal for the '<em><b>Transfer Rate</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__TRANSFER_RATE = eINSTANCE.getLUWTableSpace_TransferRate();
+
+		/**
+		 * The meta object literal for the '<em><b>Recover Dropped Table On</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__RECOVER_DROPPED_TABLE_ON = eINSTANCE.getLUWTableSpace_RecoverDroppedTableOn();
+
+		/**
+		 * The meta object literal for the '<em><b>Page Size</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__PAGE_SIZE = eINSTANCE.getLUWTableSpace_PageSize();
+
+		/**
+		 * The meta object literal for the '<em><b>Size</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__SIZE = eINSTANCE.getLUWTableSpace_Size();
+
+		/**
+		 * The meta object literal for the '<em><b>Auto Resize</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__AUTO_RESIZE = eINSTANCE.getLUWTableSpace_AutoResize();
+
+		/**
+		 * The meta object literal for the '<em><b>Initial Size</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__INITIAL_SIZE = eINSTANCE.getLUWTableSpace_InitialSize();
+
+		/**
+		 * The meta object literal for the '<em><b>Increase Size</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__INCREASE_SIZE = eINSTANCE.getLUWTableSpace_IncreaseSize();
+
+		/**
+		 * The meta object literal for the '<em><b>Maximum Size</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__MAXIMUM_SIZE = eINSTANCE.getLUWTableSpace_MaximumSize();
+
+		/**
+		 * The meta object literal for the '<em><b>Initial Size Unit</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__INITIAL_SIZE_UNIT = eINSTANCE.getLUWTableSpace_InitialSizeUnit();
+
+		/**
+		 * The meta object literal for the '<em><b>Maximum Size Unit</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__MAXIMUM_SIZE_UNIT = eINSTANCE.getLUWTableSpace_MaximumSizeUnit();
+
+		/**
+		 * The meta object literal for the '<em><b>Increase Size Unit</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__INCREASE_SIZE_UNIT = eINSTANCE.getLUWTableSpace_IncreaseSizeUnit();
+
+		/**
+		 * The meta object literal for the '<em><b>Increase Percent</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__INCREASE_PERCENT = eINSTANCE.getLUWTableSpace_IncreasePercent();
+
+		/**
+		 * The meta object literal for the '<em><b>File System Caching</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__FILE_SYSTEM_CACHING = eINSTANCE.getLUWTableSpace_FileSystemCaching();
+
+		/**
+		 * The meta object literal for the '<em><b>Average Seek Time</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__AVERAGE_SEEK_TIME = eINSTANCE.getLUWTableSpace_AverageSeekTime();
+
+		/**
+		 * The meta object literal for the '<em><b>Rotation Speed</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__ROTATION_SPEED = eINSTANCE.getLUWTableSpace_RotationSpeed();
+
+		/**
+		 * The meta object literal for the '<em><b>Transfer</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__TRANSFER = eINSTANCE.getLUWTableSpace_Transfer();
+
+		/**
+		 * The meta object literal for the '<em><b>System Type</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__SYSTEM_TYPE = eINSTANCE.getLUWTableSpace_SystemType();
+
+		/**
+		 * The meta object literal for the '<em><b>Average Table Size</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__AVERAGE_TABLE_SIZE = eINSTANCE.getLUWTableSpace_AverageTableSize();
+
+		/**
+		 * The meta object literal for the '<em><b>External Container Count</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__EXTERNAL_CONTAINER_COUNT = eINSTANCE.getLUWTableSpace_ExternalContainerCount();
+
+		/**
+		 * The meta object literal for the '<em><b>Inherit Overhead</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__INHERIT_OVERHEAD = eINSTANCE.getLUWTableSpace_InheritOverhead();
+
+		/**
+		 * The meta object literal for the '<em><b>Inherit Transferate</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__INHERIT_TRANSFERATE = eINSTANCE.getLUWTableSpace_InheritTransferate();
+
+		/**
+		 * The meta object literal for the '<em><b>Rebalance</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__REBALANCE = eINSTANCE.getLUWTableSpace_Rebalance();
+
+		/**
+		 * The meta object literal for the '<em><b>Data Tag</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__DATA_TAG = eINSTANCE.getLUWTableSpace_DataTag();
+
+		/**
+		 * The meta object literal for the '<em><b>Suspend Rebalance</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__SUSPEND_REBALANCE = eINSTANCE.getLUWTableSpace_SuspendRebalance();
+
+		/**
+		 * The meta object literal for the '<em><b>Resume Rebalance</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE_SPACE__RESUME_REBALANCE = eINSTANCE.getLUWTableSpace_ResumeRebalance();
+
+		/**
+		 * The meta object literal for the '<em><b>Group</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_TABLE_SPACE__GROUP = eINSTANCE.getLUWTableSpace_Group();
+
+		/**
+		 * The meta object literal for the '<em><b>Containers</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_TABLE_SPACE__CONTAINERS = eINSTANCE.getLUWTableSpace_Containers();
+
+		/**
+		 * The meta object literal for the '<em><b>Buffer Pool</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_TABLE_SPACE__BUFFER_POOL = eINSTANCE.getLUWTableSpace_BufferPool();
+
+		/**
+		 * The meta object literal for the '<em><b>Index Data Tables</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_TABLE_SPACE__INDEX_DATA_TABLES = eINSTANCE.getLUWTableSpace_IndexDataTables();
+
+		/**
+		 * The meta object literal for the '<em><b>LOB Data Tables</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_TABLE_SPACE__LOB_DATA_TABLES = eINSTANCE.getLUWTableSpace_LOBDataTables();
+
+		/**
+		 * The meta object literal for the '<em><b>Regular Data Tables</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_TABLE_SPACE__REGULAR_DATA_TABLES = eINSTANCE.getLUWTableSpace_RegularDataTables();
+
+		/**
+		 * The meta object literal for the '<em><b>Database</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_TABLE_SPACE__DATABASE = eINSTANCE.getLUWTableSpace_Database();
+
+		/**
+		 * The meta object literal for the '<em><b>LOB Data Partition</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_TABLE_SPACE__LOB_DATA_PARTITION = eINSTANCE.getLUWTableSpace_LOBDataPartition();
+
+		/**
+		 * The meta object literal for the '<em><b>Regular Data Partition</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_TABLE_SPACE__REGULAR_DATA_PARTITION = eINSTANCE.getLUWTableSpace_RegularDataPartition();
+
+		/**
+		 * The meta object literal for the '<em><b>Indexes</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_TABLE_SPACE__INDEXES = eINSTANCE.getLUWTableSpace_Indexes();
+
+		/**
+		 * The meta object literal for the '<em><b>Index Data Partition</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_TABLE_SPACE__INDEX_DATA_PARTITION = eINSTANCE.getLUWTableSpace_IndexDataPartition();
+
+		/**
+		 * The meta object literal for the '<em><b>Storage Group</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_TABLE_SPACE__STORAGE_GROUP = eINSTANCE.getLUWTableSpace_StorageGroup();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabasePartitionImpl <em>Database Partition</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabasePartitionImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWDatabasePartition()
+		 * @generated
+		 */
+		EClass LUW_DATABASE_PARTITION = eINSTANCE.getLUWDatabasePartition();
+
+		/**
+		 * The meta object literal for the '<em><b>Number</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_DATABASE_PARTITION__NUMBER = eINSTANCE.getLUWDatabasePartition_Number();
+
+		/**
+		 * The meta object literal for the '<em><b>Port Number</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_DATABASE_PARTITION__PORT_NUMBER = eINSTANCE.getLUWDatabasePartition_PortNumber();
+
+		/**
+		 * The meta object literal for the '<em><b>Host Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_DATABASE_PARTITION__HOST_NAME = eINSTANCE.getLUWDatabasePartition_HostName();
+
+		/**
+		 * The meta object literal for the '<em><b>Switch Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_DATABASE_PARTITION__SWITCH_NAME = eINSTANCE.getLUWDatabasePartition_SwitchName();
+
+		/**
+		 * The meta object literal for the '<em><b>Catalog Partition</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_DATABASE_PARTITION__CATALOG_PARTITION = eINSTANCE.getLUWDatabasePartition_CatalogPartition();
+
+		/**
+		 * The meta object literal for the '<em><b>Group</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_DATABASE_PARTITION__GROUP = eINSTANCE.getLUWDatabasePartition_Group();
+
+		/**
+		 * The meta object literal for the '<em><b>Buffer Pool</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_DATABASE_PARTITION__BUFFER_POOL = eINSTANCE.getLUWDatabasePartition_BufferPool();
+
+		/**
+		 * The meta object literal for the '<em><b>Containers</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_DATABASE_PARTITION__CONTAINERS = eINSTANCE.getLUWDatabasePartition_Containers();
+
+		/**
+		 * The meta object literal for the '<em><b>Size Exception</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_DATABASE_PARTITION__SIZE_EXCEPTION = eINSTANCE.getLUWDatabasePartition_SizeException();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabaseContainerImpl <em>Database Container</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabaseContainerImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWDatabaseContainer()
+		 * @generated
+		 */
+		EClass LUW_DATABASE_CONTAINER = eINSTANCE.getLUWDatabaseContainer();
+
+		/**
+		 * The meta object literal for the '<em><b>Container Type</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_DATABASE_CONTAINER__CONTAINER_TYPE = eINSTANCE.getLUWDatabaseContainer_ContainerType();
+
+		/**
+		 * The meta object literal for the '<em><b>Size In Pages</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_DATABASE_CONTAINER__SIZE_IN_PAGES = eINSTANCE.getLUWDatabaseContainer_SizeInPages();
+
+		/**
+		 * The meta object literal for the '<em><b>Size</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_DATABASE_CONTAINER__SIZE = eINSTANCE.getLUWDatabaseContainer_Size();
+
+		/**
+		 * The meta object literal for the '<em><b>Size Units</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_DATABASE_CONTAINER__SIZE_UNITS = eINSTANCE.getLUWDatabaseContainer_SizeUnits();
+
+		/**
+		 * The meta object literal for the '<em><b>Table Space</b></em>' container reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_DATABASE_CONTAINER__TABLE_SPACE = eINSTANCE.getLUWDatabaseContainer_TableSpace();
+
+		/**
+		 * The meta object literal for the '<em><b>Partitions</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_DATABASE_CONTAINER__PARTITIONS = eINSTANCE.getLUWDatabaseContainer_Partitions();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWAdminServerImpl <em>Admin Server</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWAdminServerImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWAdminServer()
+		 * @generated
+		 */
+		EClass LUW_ADMIN_SERVER = eINSTANCE.getLUWAdminServer();
+
+		/**
+		 * The meta object literal for the '<em><b>Instances</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_ADMIN_SERVER__INSTANCES = eINSTANCE.getLUWAdminServer_Instances();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWBufferPoolImpl <em>Buffer Pool</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWBufferPoolImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWBufferPool()
+		 * @generated
+		 */
+		EClass LUW_BUFFER_POOL = eINSTANCE.getLUWBufferPool();
+
+		/**
+		 * The meta object literal for the '<em><b>Create Type</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_BUFFER_POOL__CREATE_TYPE = eINSTANCE.getLUWBufferPool_CreateType();
+
+		/**
+		 * The meta object literal for the '<em><b>Size</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_BUFFER_POOL__SIZE = eINSTANCE.getLUWBufferPool_Size();
+
+		/**
+		 * The meta object literal for the '<em><b>Page Size</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_BUFFER_POOL__PAGE_SIZE = eINSTANCE.getLUWBufferPool_PageSize();
+
+		/**
+		 * The meta object literal for the '<em><b>Block Size</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_BUFFER_POOL__BLOCK_SIZE = eINSTANCE.getLUWBufferPool_BlockSize();
+
+		/**
+		 * The meta object literal for the '<em><b>Num Block Pages</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_BUFFER_POOL__NUM_BLOCK_PAGES = eINSTANCE.getLUWBufferPool_NumBlockPages();
+
+		/**
+		 * The meta object literal for the '<em><b>Extended Storage</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_BUFFER_POOL__EXTENDED_STORAGE = eINSTANCE.getLUWBufferPool_ExtendedStorage();
+
+		/**
+		 * The meta object literal for the '<em><b>Automatic</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_BUFFER_POOL__AUTOMATIC = eINSTANCE.getLUWBufferPool_Automatic();
+
+		/**
+		 * The meta object literal for the '<em><b>Table Spaces</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_BUFFER_POOL__TABLE_SPACES = eINSTANCE.getLUWBufferPool_TableSpaces();
+
+		/**
+		 * The meta object literal for the '<em><b>Partitions</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_BUFFER_POOL__PARTITIONS = eINSTANCE.getLUWBufferPool_Partitions();
+
+		/**
+		 * The meta object literal for the '<em><b>Partition Group</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_BUFFER_POOL__PARTITION_GROUP = eINSTANCE.getLUWBufferPool_PartitionGroup();
+
+		/**
+		 * The meta object literal for the '<em><b>Database</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_BUFFER_POOL__DATABASE = eINSTANCE.getLUWBufferPool_Database();
+
+		/**
+		 * The meta object literal for the '<em><b>Size Exception</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_BUFFER_POOL__SIZE_EXCEPTION = eINSTANCE.getLUWBufferPool_SizeException();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableImpl <em>Table</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWTable()
+		 * @generated
+		 */
+		EClass LUW_TABLE = eINSTANCE.getLUWTable();
+
+		/**
+		 * The meta object literal for the '<em><b>PCT Free</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE__PCT_FREE = eINSTANCE.getLUWTable_PCTFree();
+
+		/**
+		 * The meta object literal for the '<em><b>Restrict On Drop</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE__RESTRICT_ON_DROP = eINSTANCE.getLUWTable_RestrictOnDrop();
+
+		/**
+		 * The meta object literal for the '<em><b>Partition Mode</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE__PARTITION_MODE = eINSTANCE.getLUWTable_PartitionMode();
+
+		/**
+		 * The meta object literal for the '<em><b>Append Mode</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE__APPEND_MODE = eINSTANCE.getLUWTable_AppendMode();
+
+		/**
+		 * The meta object literal for the '<em><b>Log Mode</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE__LOG_MODE = eINSTANCE.getLUWTable_LogMode();
+
+		/**
+		 * The meta object literal for the '<em><b>Lock Size Row</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE__LOCK_SIZE_ROW = eINSTANCE.getLUWTable_LockSizeRow();
+
+		/**
+		 * The meta object literal for the '<em><b>Volatile</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TABLE__VOLATILE = eINSTANCE.getLUWTable_Volatile();
+
+		/**
+		 * The meta object literal for the '<em><b>Security Policy</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_TABLE__SECURITY_POLICY = eINSTANCE.getLUWTable_SecurityPolicy();
+
+		/**
+		 * The meta object literal for the '<em><b>Options</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_TABLE__OPTIONS = eINSTANCE.getLUWTable_Options();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWViewImpl <em>View</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWViewImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWView()
+		 * @generated
+		 */
+		EClass LUW_VIEW = eINSTANCE.getLUWView();
+
+		/**
+		 * The meta object literal for the '<em><b>Federated</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_VIEW__FEDERATED = eINSTANCE.getLUWView_Federated();
+
+		/**
+		 * The meta object literal for the '<em><b>Optimize Query</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_VIEW__OPTIMIZE_QUERY = eINSTANCE.getLUWView_OptimizeQuery();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionKeyImpl <em>Partition Key</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionKeyImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWPartitionKey()
+		 * @generated
+		 */
+		EClass LUW_PARTITION_KEY = eINSTANCE.getLUWPartitionKey();
+
+		/**
+		 * The meta object literal for the '<em><b>Temporary Storage Table</b></em>' container reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_PARTITION_KEY__TEMPORARY_STORAGE_TABLE = eINSTANCE.getLUWPartitionKey_TemporaryStorageTable();
+
+		/**
+		 * The meta object literal for the '<em><b>Partition Method</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_PARTITION_KEY__PARTITION_METHOD = eINSTANCE.getLUWPartitionKey_PartitionMethod();
+
+		/**
+		 * The meta object literal for the '<em><b>Table</b></em>' container reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_PARTITION_KEY__TABLE = eINSTANCE.getLUWPartitionKey_Table();
+
+		/**
+		 * The meta object literal for the '<em><b>Columns</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_PARTITION_KEY__COLUMNS = eINSTANCE.getLUWPartitionKey_Columns();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWNicknameImpl <em>Nickname</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWNicknameImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWNickname()
+		 * @generated
+		 */
+		EClass LUW_NICKNAME = eINSTANCE.getLUWNickname();
+
+		/**
+		 * The meta object literal for the '<em><b>Remote Data Set</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_NICKNAME__REMOTE_DATA_SET = eINSTANCE.getLUWNickname_RemoteDataSet();
+
+		/**
+		 * The meta object literal for the '<em><b>Server</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_NICKNAME__SERVER = eINSTANCE.getLUWNickname_Server();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWFunctionMappingImpl <em>Function Mapping</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWFunctionMappingImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWFunctionMapping()
+		 * @generated
+		 */
+		EClass LUW_FUNCTION_MAPPING = eINSTANCE.getLUWFunctionMapping();
+
+		/**
+		 * The meta object literal for the '<em><b>Server Type</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_FUNCTION_MAPPING__SERVER_TYPE = eINSTANCE.getLUWFunctionMapping_ServerType();
+
+		/**
+		 * The meta object literal for the '<em><b>Server Version</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_FUNCTION_MAPPING__SERVER_VERSION = eINSTANCE.getLUWFunctionMapping_ServerVersion();
+
+		/**
+		 * The meta object literal for the '<em><b>Server Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_FUNCTION_MAPPING__SERVER_NAME = eINSTANCE.getLUWFunctionMapping_ServerName();
+
+		/**
+		 * The meta object literal for the '<em><b>Creation Time</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_FUNCTION_MAPPING__CREATION_TIME = eINSTANCE.getLUWFunctionMapping_CreationTime();
+
+		/**
+		 * The meta object literal for the '<em><b>Disabled</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_FUNCTION_MAPPING__DISABLED = eINSTANCE.getLUWFunctionMapping_Disabled();
+
+		/**
+		 * The meta object literal for the '<em><b>Insts Per Invoc</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_FUNCTION_MAPPING__INSTS_PER_INVOC = eINSTANCE.getLUWFunctionMapping_InstsPerInvoc();
+
+		/**
+		 * The meta object literal for the '<em><b>Insts Per Arg Byte</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_FUNCTION_MAPPING__INSTS_PER_ARG_BYTE = eINSTANCE.getLUWFunctionMapping_InstsPerArgByte();
+
+		/**
+		 * The meta object literal for the '<em><b>Ios Per Invoc</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_FUNCTION_MAPPING__IOS_PER_INVOC = eINSTANCE.getLUWFunctionMapping_IosPerInvoc();
+
+		/**
+		 * The meta object literal for the '<em><b>Ios Per Arg Byte</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_FUNCTION_MAPPING__IOS_PER_ARG_BYTE = eINSTANCE.getLUWFunctionMapping_IosPerArgByte();
+
+		/**
+		 * The meta object literal for the '<em><b>Options</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_FUNCTION_MAPPING__OPTIONS = eINSTANCE.getLUWFunctionMapping_Options();
+
+		/**
+		 * The meta object literal for the '<em><b>Local Function</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_FUNCTION_MAPPING__LOCAL_FUNCTION = eINSTANCE.getLUWFunctionMapping_LocalFunction();
+
+		/**
+		 * The meta object literal for the '<em><b>Remote Function</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_FUNCTION_MAPPING__REMOTE_FUNCTION = eINSTANCE.getLUWFunctionMapping_RemoteFunction();
+
+		/**
+		 * The meta object literal for the '<em><b>LUW Database</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_FUNCTION_MAPPING__LUW_DATABASE = eINSTANCE.getLUWFunctionMapping_LUWDatabase();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWWrapperImpl <em>Wrapper</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWWrapperImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWWrapper()
+		 * @generated
+		 */
+		EClass LUW_WRAPPER = eINSTANCE.getLUWWrapper();
+
+		/**
+		 * The meta object literal for the '<em><b>Version</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_WRAPPER__VERSION = eINSTANCE.getLUWWrapper_Version();
+
+		/**
+		 * The meta object literal for the '<em><b>Library</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_WRAPPER__LIBRARY = eINSTANCE.getLUWWrapper_Library();
+
+		/**
+		 * The meta object literal for the '<em><b>Fenced</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_WRAPPER__FENCED = eINSTANCE.getLUWWrapper_Fenced();
+
+		/**
+		 * The meta object literal for the '<em><b>Wrapper Type</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_WRAPPER__WRAPPER_TYPE = eINSTANCE.getLUWWrapper_WrapperType();
+
+		/**
+		 * The meta object literal for the '<em><b>Data Source</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_WRAPPER__DATA_SOURCE = eINSTANCE.getLUWWrapper_DataSource();
+
+		/**
+		 * The meta object literal for the '<em><b>Discovered Libraries</b></em>' attribute list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_WRAPPER__DISCOVERED_LIBRARIES = eINSTANCE.getLUWWrapper_DiscoveredLibraries();
+
+		/**
+		 * The meta object literal for the '<em><b>Servers</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_WRAPPER__SERVERS = eINSTANCE.getLUWWrapper_Servers();
+
+		/**
+		 * The meta object literal for the '<em><b>LUW Database</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_WRAPPER__LUW_DATABASE = eINSTANCE.getLUWWrapper_LUWDatabase();
+
+		/**
+		 * The meta object literal for the '<em><b>Options</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_WRAPPER__OPTIONS = eINSTANCE.getLUWWrapper_Options();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWNonRelationalNicknameImpl <em>Non Relational Nickname</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWNonRelationalNicknameImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWNonRelationalNickname()
+		 * @generated
+		 */
+		EClass LUW_NON_RELATIONAL_NICKNAME = eINSTANCE.getLUWNonRelationalNickname();
+
+		/**
+		 * The meta object literal for the '<em><b>Non Rel Server</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_NON_RELATIONAL_NICKNAME__NON_REL_SERVER = eINSTANCE.getLUWNonRelationalNickname_NonRelServer();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWNonRelationalServerImpl <em>Non Relational Server</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWNonRelationalServerImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWNonRelationalServer()
+		 * @generated
+		 */
+		EClass LUW_NON_RELATIONAL_SERVER = eINSTANCE.getLUWNonRelationalServer();
+
+		/**
+		 * The meta object literal for the '<em><b>Non Rel Wrapper</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_NON_RELATIONAL_SERVER__NON_REL_WRAPPER = eINSTANCE.getLUWNonRelationalServer_NonRelWrapper();
+
+		/**
+		 * The meta object literal for the '<em><b>Non Rel Nicknames</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_NON_RELATIONAL_SERVER__NON_REL_NICKNAMES = eINSTANCE.getLUWNonRelationalServer_NonRelNicknames();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWNonRelationalWrapperImpl <em>Non Relational Wrapper</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWNonRelationalWrapperImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWNonRelationalWrapper()
+		 * @generated
+		 */
+		EClass LUW_NON_RELATIONAL_WRAPPER = eINSTANCE.getLUWNonRelationalWrapper();
+
+		/**
+		 * The meta object literal for the '<em><b>Non Rel Servers</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_NON_RELATIONAL_WRAPPER__NON_REL_SERVERS = eINSTANCE.getLUWNonRelationalWrapper_NonRelServers();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRelationalNicknameImpl <em>Relational Nickname</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRelationalNicknameImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWRelationalNickname()
+		 * @generated
+		 */
+		EClass LUW_RELATIONAL_NICKNAME = eINSTANCE.getLUWRelationalNickname();
+
+		/**
+		 * The meta object literal for the '<em><b>Rel Server</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_RELATIONAL_NICKNAME__REL_SERVER = eINSTANCE.getLUWRelationalNickname_RelServer();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGenericUserMappingImpl <em>Generic User Mapping</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGenericUserMappingImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWGenericUserMapping()
+		 * @generated
+		 */
+		EClass LUW_GENERIC_USER_MAPPING = eINSTANCE.getLUWGenericUserMapping();
+
+		/**
+		 * The meta object literal for the '<em><b>Remote User</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_GENERIC_USER_MAPPING__REMOTE_USER = eINSTANCE.getLUWGenericUserMapping_RemoteUser();
+
+		/**
+		 * The meta object literal for the '<em><b>Remote Password</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_GENERIC_USER_MAPPING__REMOTE_PASSWORD = eINSTANCE.getLUWGenericUserMapping_RemotePassword();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRelationalWrapperImpl <em>Relational Wrapper</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRelationalWrapperImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWRelationalWrapper()
+		 * @generated
+		 */
+		EClass LUW_RELATIONAL_WRAPPER = eINSTANCE.getLUWRelationalWrapper();
+
+		/**
+		 * The meta object literal for the '<em><b>Rel Servers</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_RELATIONAL_WRAPPER__REL_SERVERS = eINSTANCE.getLUWRelationalWrapper_RelServers();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWServerImpl <em>Server</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWServerImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWServer()
+		 * @generated
+		 */
+		EClass LUW_SERVER = eINSTANCE.getLUWServer();
+
+		/**
+		 * The meta object literal for the '<em><b>Server Type</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_SERVER__SERVER_TYPE = eINSTANCE.getLUWServer_ServerType();
+
+		/**
+		 * The meta object literal for the '<em><b>Server Version</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_SERVER__SERVER_VERSION = eINSTANCE.getLUWServer_ServerVersion();
+
+		/**
+		 * The meta object literal for the '<em><b>User Mappings</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_SERVER__USER_MAPPINGS = eINSTANCE.getLUWServer_UserMappings();
+
+		/**
+		 * The meta object literal for the '<em><b>Wrapper</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_SERVER__WRAPPER = eINSTANCE.getLUWServer_Wrapper();
+
+		/**
+		 * The meta object literal for the '<em><b>Nicknames</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_SERVER__NICKNAMES = eINSTANCE.getLUWServer_Nicknames();
+
+		/**
+		 * The meta object literal for the '<em><b>LUW Database</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_SERVER__LUW_DATABASE = eINSTANCE.getLUWServer_LUWDatabase();
+
+		/**
+		 * The meta object literal for the '<em><b>Options</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_SERVER__OPTIONS = eINSTANCE.getLUWServer_Options();
+
+		/**
+		 * The meta object literal for the '<em><b>Remote Server</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_SERVER__REMOTE_SERVER = eINSTANCE.getLUWServer_RemoteServer();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTypeMappingImpl <em>Type Mapping</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTypeMappingImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWTypeMapping()
+		 * @generated
+		 */
+		EClass LUW_TYPE_MAPPING = eINSTANCE.getLUWTypeMapping();
+
+		/**
+		 * The meta object literal for the '<em><b>Server Type</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TYPE_MAPPING__SERVER_TYPE = eINSTANCE.getLUWTypeMapping_ServerType();
+
+		/**
+		 * The meta object literal for the '<em><b>Server Vesion</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TYPE_MAPPING__SERVER_VESION = eINSTANCE.getLUWTypeMapping_ServerVesion();
+
+		/**
+		 * The meta object literal for the '<em><b>Server Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TYPE_MAPPING__SERVER_NAME = eINSTANCE.getLUWTypeMapping_ServerName();
+
+		/**
+		 * The meta object literal for the '<em><b>Creation Time</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TYPE_MAPPING__CREATION_TIME = eINSTANCE.getLUWTypeMapping_CreationTime();
+
+		/**
+		 * The meta object literal for the '<em><b>Local Type</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_TYPE_MAPPING__LOCAL_TYPE = eINSTANCE.getLUWTypeMapping_LocalType();
+
+		/**
+		 * The meta object literal for the '<em><b>Remote Type</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_TYPE_MAPPING__REMOTE_TYPE = eINSTANCE.getLUWTypeMapping_RemoteType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWUserMappingImpl <em>User Mapping</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWUserMappingImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWUserMapping()
+		 * @generated
+		 */
+		EClass LUW_USER_MAPPING = eINSTANCE.getLUWUserMapping();
+
+		/**
+		 * The meta object literal for the '<em><b>Local Auth Id</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_USER_MAPPING__LOCAL_AUTH_ID = eINSTANCE.getLUWUserMapping_LocalAuthId();
+
+		/**
+		 * The meta object literal for the '<em><b>Server</b></em>' container reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_USER_MAPPING__SERVER = eINSTANCE.getLUWUserMapping_Server();
+
+		/**
+		 * The meta object literal for the '<em><b>Options</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_USER_MAPPING__OPTIONS = eINSTANCE.getLUWUserMapping_Options();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWOptionImpl <em>Option</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWOptionImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWOption()
+		 * @generated
+		 */
+		EClass LUW_OPTION = eINSTANCE.getLUWOption();
+
+		/**
+		 * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_OPTION__VALUE = eINSTANCE.getLUWOption_Value();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRelationalServerImpl <em>Relational Server</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRelationalServerImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWRelationalServer()
+		 * @generated
+		 */
+		EClass LUW_RELATIONAL_SERVER = eINSTANCE.getLUWRelationalServer();
+
+		/**
+		 * The meta object literal for the '<em><b>Cpu Ratio</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_RELATIONAL_SERVER__CPU_RATIO = eINSTANCE.getLUWRelationalServer_CpuRatio();
+
+		/**
+		 * The meta object literal for the '<em><b>Io Ratio</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_RELATIONAL_SERVER__IO_RATIO = eINSTANCE.getLUWRelationalServer_IoRatio();
+
+		/**
+		 * The meta object literal for the '<em><b>Comm Rate</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_RELATIONAL_SERVER__COMM_RATE = eINSTANCE.getLUWRelationalServer_CommRate();
+
+		/**
+		 * The meta object literal for the '<em><b>Fold Id</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_RELATIONAL_SERVER__FOLD_ID = eINSTANCE.getLUWRelationalServer_FoldId();
+
+		/**
+		 * The meta object literal for the '<em><b>Fold PW</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_RELATIONAL_SERVER__FOLD_PW = eINSTANCE.getLUWRelationalServer_FoldPW();
+
+		/**
+		 * The meta object literal for the '<em><b>Collating Sequence</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_RELATIONAL_SERVER__COLLATING_SEQUENCE = eINSTANCE.getLUWRelationalServer_CollatingSequence();
+
+		/**
+		 * The meta object literal for the '<em><b>Pushdown</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_RELATIONAL_SERVER__PUSHDOWN = eINSTANCE.getLUWRelationalServer_Pushdown();
+
+		/**
+		 * The meta object literal for the '<em><b>Node</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_RELATIONAL_SERVER__NODE = eINSTANCE.getLUWRelationalServer_Node();
+
+		/**
+		 * The meta object literal for the '<em><b>Db Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_RELATIONAL_SERVER__DB_NAME = eINSTANCE.getLUWRelationalServer_DbName();
+
+		/**
+		 * The meta object literal for the '<em><b>Iud App Svpt Enforce</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_RELATIONAL_SERVER__IUD_APP_SVPT_ENFORCE = eINSTANCE.getLUWRelationalServer_IudAppSvptEnforce();
+
+		/**
+		 * The meta object literal for the '<em><b>Password</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_RELATIONAL_SERVER__PASSWORD = eINSTANCE.getLUWRelationalServer_Password();
+
+		/**
+		 * The meta object literal for the '<em><b>Rel Nicknames</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_RELATIONAL_SERVER__REL_NICKNAMES = eINSTANCE.getLUWRelationalServer_RelNicknames();
+
+		/**
+		 * The meta object literal for the '<em><b>Rel Wrapper</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_RELATIONAL_SERVER__REL_WRAPPER = eINSTANCE.getLUWRelationalServer_RelWrapper();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabaseImpl <em>Database</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabaseImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWDatabase()
+		 * @generated
+		 */
+		EClass LUW_DATABASE = eINSTANCE.getLUWDatabase();
+
+		/**
+		 * The meta object literal for the '<em><b>Federated</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_DATABASE__FEDERATED = eINSTANCE.getLUWDatabase_Federated();
+
+		/**
+		 * The meta object literal for the '<em><b>Groups</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_DATABASE__GROUPS = eINSTANCE.getLUWDatabase_Groups();
+
+		/**
+		 * The meta object literal for the '<em><b>Wrappers</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_DATABASE__WRAPPERS = eINSTANCE.getLUWDatabase_Wrappers();
+
+		/**
+		 * The meta object literal for the '<em><b>Servers</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_DATABASE__SERVERS = eINSTANCE.getLUWDatabase_Servers();
+
+		/**
+		 * The meta object literal for the '<em><b>Function Mappings</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_DATABASE__FUNCTION_MAPPINGS = eINSTANCE.getLUWDatabase_FunctionMappings();
+
+		/**
+		 * The meta object literal for the '<em><b>Type Mappings</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_DATABASE__TYPE_MAPPINGS = eINSTANCE.getLUWDatabase_TypeMappings();
+
+		/**
+		 * The meta object literal for the '<em><b>Reverse Type Mappings</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_DATABASE__REVERSE_TYPE_MAPPINGS = eINSTANCE.getLUWDatabase_ReverseTypeMappings();
+
+		/**
+		 * The meta object literal for the '<em><b>Bufferpools</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_DATABASE__BUFFERPOOLS = eINSTANCE.getLUWDatabase_Bufferpools();
+
+		/**
+		 * The meta object literal for the '<em><b>Tablespaces</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_DATABASE__TABLESPACES = eINSTANCE.getLUWDatabase_Tablespaces();
+
+		/**
+		 * The meta object literal for the '<em><b>Storage Groups</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_DATABASE__STORAGE_GROUPS = eINSTANCE.getLUWDatabase_StorageGroups();
+
+		/**
+		 * The meta object literal for the '<em><b>Default Storage Group</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_DATABASE__DEFAULT_STORAGE_GROUP = eINSTANCE.getLUWDatabase_DefaultStorageGroup();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWColumnImpl <em>Column</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWColumnImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWColumn()
+		 * @generated
+		 */
+		EClass LUW_COLUMN = eINSTANCE.getLUWColumn();
+
+		/**
+		 * The meta object literal for the '<em><b>Lob Logged</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_COLUMN__LOB_LOGGED = eINSTANCE.getLUWColumn_LobLogged();
+
+		/**
+		 * The meta object literal for the '<em><b>Lob Compacted</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_COLUMN__LOB_COMPACTED = eINSTANCE.getLUWColumn_LobCompacted();
+
+		/**
+		 * The meta object literal for the '<em><b>Compression</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_COLUMN__COMPRESSION = eINSTANCE.getLUWColumn_Compression();
+
+		/**
+		 * The meta object literal for the '<em><b>Inline Length</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_COLUMN__INLINE_LENGTH = eINSTANCE.getLUWColumn_InlineLength();
+
+		/**
+		 * The meta object literal for the '<em><b>Hidden</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_COLUMN__HIDDEN = eINSTANCE.getLUWColumn_Hidden();
+
+		/**
+		 * The meta object literal for the '<em><b>Security Label</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_COLUMN__SECURITY_LABEL = eINSTANCE.getLUWColumn_SecurityLabel();
+
+		/**
+		 * The meta object literal for the '<em><b>Options</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_COLUMN__OPTIONS = eINSTANCE.getLUWColumn_Options();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGenericNicknameImpl <em>Generic Nickname</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGenericNicknameImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWGenericNickname()
+		 * @generated
+		 */
+		EClass LUW_GENERIC_NICKNAME = eINSTANCE.getLUWGenericNickname();
+
+		/**
+		 * The meta object literal for the '<em><b>Generic Server</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_GENERIC_NICKNAME__GENERIC_SERVER = eINSTANCE.getLUWGenericNickname_GenericServer();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGenericServerImpl <em>Generic Server</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGenericServerImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWGenericServer()
+		 * @generated
+		 */
+		EClass LUW_GENERIC_SERVER = eINSTANCE.getLUWGenericServer();
+
+		/**
+		 * The meta object literal for the '<em><b>Generic Nicknames</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_GENERIC_SERVER__GENERIC_NICKNAMES = eINSTANCE.getLUWGenericServer_GenericNicknames();
+
+		/**
+		 * The meta object literal for the '<em><b>Generic Wrapper</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_GENERIC_SERVER__GENERIC_WRAPPER = eINSTANCE.getLUWGenericServer_GenericWrapper();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWMaterializedQueryTableImpl <em>Materialized Query Table</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWMaterializedQueryTableImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWMaterializedQueryTable()
+		 * @generated
+		 */
+		EClass LUW_MATERIALIZED_QUERY_TABLE = eINSTANCE.getLUWMaterializedQueryTable();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGenericWrapperImpl <em>Generic Wrapper</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGenericWrapperImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWGenericWrapper()
+		 * @generated
+		 */
+		EClass LUW_GENERIC_WRAPPER = eINSTANCE.getLUWGenericWrapper();
+
+		/**
+		 * The meta object literal for the '<em><b>Generic Servers</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_GENERIC_WRAPPER__GENERIC_SERVERS = eINSTANCE.getLUWGenericWrapper_GenericServers();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable <em>Storage Table</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWStorageTable()
+		 * @generated
+		 */
+		EClass LUW_STORAGE_TABLE = eINSTANCE.getLUWStorageTable();
+
+		/**
+		 * The meta object literal for the '<em><b>Value Compression</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_STORAGE_TABLE__VALUE_COMPRESSION = eINSTANCE.getLUWStorageTable_ValueCompression();
+
+		/**
+		 * The meta object literal for the '<em><b>Row Compression</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_STORAGE_TABLE__ROW_COMPRESSION = eINSTANCE.getLUWStorageTable_RowCompression();
+
+		/**
+		 * The meta object literal for the '<em><b>Row Compression Empty</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_STORAGE_TABLE__ROW_COMPRESSION_EMPTY = eINSTANCE.getLUWStorageTable_RowCompressionEmpty();
+
+		/**
+		 * The meta object literal for the '<em><b>Compression Mode</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_STORAGE_TABLE__COMPRESSION_MODE = eINSTANCE.getLUWStorageTable_CompressionMode();
+
+		/**
+		 * The meta object literal for the '<em><b>Partition Key</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_STORAGE_TABLE__PARTITION_KEY = eINSTANCE.getLUWStorageTable_PartitionKey();
+
+		/**
+		 * The meta object literal for the '<em><b>Index Data Table Space</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_STORAGE_TABLE__INDEX_DATA_TABLE_SPACE = eINSTANCE.getLUWStorageTable_IndexDataTableSpace();
+
+		/**
+		 * The meta object literal for the '<em><b>LOB Data Table Space</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_STORAGE_TABLE__LOB_DATA_TABLE_SPACE = eINSTANCE.getLUWStorageTable_LOBDataTableSpace();
+
+		/**
+		 * The meta object literal for the '<em><b>Regular Data Table Space</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_STORAGE_TABLE__REGULAR_DATA_TABLE_SPACE = eINSTANCE.getLUWStorageTable_RegularDataTableSpace();
+
+		/**
+		 * The meta object literal for the '<em><b>Data Partitions</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_STORAGE_TABLE__DATA_PARTITIONS = eINSTANCE.getLUWStorageTable_DataPartitions();
+
+		/**
+		 * The meta object literal for the '<em><b>Data Partition Key</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_STORAGE_TABLE__DATA_PARTITION_KEY = eINSTANCE.getLUWStorageTable_DataPartitionKey();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.RelationalRemoteServerImpl <em>Relational Remote Server</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.RelationalRemoteServerImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getRelationalRemoteServer()
+		 * @generated
+		 */
+		EClass RELATIONAL_REMOTE_SERVER = eINSTANCE.getRelationalRemoteServer();
+
+		/**
+		 * The meta object literal for the '<em><b>Database</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference RELATIONAL_REMOTE_SERVER__DATABASE = eINSTANCE.getRelationalRemoteServer_Database();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.RelationalRemoteDataSetImpl <em>Relational Remote Data Set</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.RelationalRemoteDataSetImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getRelationalRemoteDataSet()
+		 * @generated
+		 */
+		EClass RELATIONAL_REMOTE_DATA_SET = eINSTANCE.getRelationalRemoteDataSet();
+
+		/**
+		 * The meta object literal for the '<em><b>Table</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference RELATIONAL_REMOTE_DATA_SET__TABLE = eINSTANCE.getRelationalRemoteDataSet_Table();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.RemoteServerImpl <em>Remote Server</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.RemoteServerImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getRemoteServer()
+		 * @generated
+		 */
+		EClass REMOTE_SERVER = eINSTANCE.getRemoteServer();
+
+		/**
+		 * The meta object literal for the '<em><b>LUW Server</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference REMOTE_SERVER__LUW_SERVER = eINSTANCE.getRemoteServer_LUWServer();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.RemoteDataSetImpl <em>Remote Data Set</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.RemoteDataSetImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getRemoteDataSet()
+		 * @generated
+		 */
+		EClass REMOTE_DATA_SET = eINSTANCE.getRemoteDataSet();
+
+		/**
+		 * The meta object literal for the '<em><b>Nickname</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference REMOTE_DATA_SET__NICKNAME = eINSTANCE.getRemoteDataSet_Nickname();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWIndexImpl <em>Index</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWIndexImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWIndex()
+		 * @generated
+		 */
+		EClass LUW_INDEX = eINSTANCE.getLUWIndex();
+
+		/**
+		 * The meta object literal for the '<em><b>PCT Free</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_INDEX__PCT_FREE = eINSTANCE.getLUWIndex_PCTFree();
+
+		/**
+		 * The meta object literal for the '<em><b>Min PCT Free</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_INDEX__MIN_PCT_FREE = eINSTANCE.getLUWIndex_MinPCTFree();
+
+		/**
+		 * The meta object literal for the '<em><b>Reverse Scan</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_INDEX__REVERSE_SCAN = eINSTANCE.getLUWIndex_ReverseScan();
+
+		/**
+		 * The meta object literal for the '<em><b>Not Partitioned</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_INDEX__NOT_PARTITIONED = eINSTANCE.getLUWIndex_NotPartitioned();
+
+		/**
+		 * The meta object literal for the '<em><b>Xml Pattern</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_INDEX__XML_PATTERN = eINSTANCE.getLUWIndex_XmlPattern();
+
+		/**
+		 * The meta object literal for the '<em><b>As SQL Data Type</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_INDEX__AS_SQL_DATA_TYPE = eINSTANCE.getLUWIndex_AsSQLDataType();
+
+		/**
+		 * The meta object literal for the '<em><b>As SQL Data Type Hashed</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_INDEX__AS_SQL_DATA_TYPE_HASHED = eINSTANCE.getLUWIndex_AsSQLDataTypeHashed();
+
+		/**
+		 * The meta object literal for the '<em><b>System Required</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_INDEX__SYSTEM_REQUIRED = eINSTANCE.getLUWIndex_SystemRequired();
+
+		/**
+		 * The meta object literal for the '<em><b>Page Split Type</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_INDEX__PAGE_SPLIT_TYPE = eINSTANCE.getLUWIndex_PageSplitType();
+
+		/**
+		 * The meta object literal for the '<em><b>Level2 Pct Free</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_INDEX__LEVEL2_PCT_FREE = eINSTANCE.getLUWIndex_Level2PctFree();
+
+		/**
+		 * The meta object literal for the '<em><b>Min Pct Used</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_INDEX__MIN_PCT_USED = eINSTANCE.getLUWIndex_MinPctUsed();
+
+		/**
+		 * The meta object literal for the '<em><b>Compress</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_INDEX__COMPRESS = eINSTANCE.getLUWIndex_Compress();
+
+		/**
+		 * The meta object literal for the '<em><b>Collect Stats</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_INDEX__COLLECT_STATS = eINSTANCE.getLUWIndex_CollectStats();
+
+		/**
+		 * The meta object literal for the '<em><b>Sampled Stats</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_INDEX__SAMPLED_STATS = eINSTANCE.getLUWIndex_SampledStats();
+
+		/**
+		 * The meta object literal for the '<em><b>Detailed Stats</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_INDEX__DETAILED_STATS = eINSTANCE.getLUWIndex_DetailedStats();
+
+		/**
+		 * The meta object literal for the '<em><b>Ignore Invalid Values</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_INDEX__IGNORE_INVALID_VALUES = eINSTANCE.getLUWIndex_IgnoreInvalidValues();
+
+		/**
+		 * The meta object literal for the '<em><b>Exclude Null Keys</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_INDEX__EXCLUDE_NULL_KEYS = eINSTANCE.getLUWIndex_ExcludeNullKeys();
+
+		/**
+		 * The meta object literal for the '<em><b>Tablespace</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_INDEX__TABLESPACE = eINSTANCE.getLUWIndex_Tablespace();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWAttributeDefinitionImpl <em>Attribute Definition</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWAttributeDefinitionImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWAttributeDefinition()
+		 * @generated
+		 */
+		EClass LUW_ATTRIBUTE_DEFINITION = eINSTANCE.getLUWAttributeDefinition();
+
+		/**
+		 * The meta object literal for the '<em><b>LOB Logged</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_ATTRIBUTE_DEFINITION__LOB_LOGGED = eINSTANCE.getLUWAttributeDefinition_LOBLogged();
+
+		/**
+		 * The meta object literal for the '<em><b>LOB Compacted</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_ATTRIBUTE_DEFINITION__LOB_COMPACTED = eINSTANCE.getLUWAttributeDefinition_LOBCompacted();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.FederatedProcedureImpl <em>Federated Procedure</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.FederatedProcedureImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getFederatedProcedure()
+		 * @generated
+		 */
+		EClass FEDERATED_PROCEDURE = eINSTANCE.getFederatedProcedure();
+
+		/**
+		 * The meta object literal for the '<em><b>Remote Unique Id</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute FEDERATED_PROCEDURE__REMOTE_UNIQUE_ID = eINSTANCE.getFederatedProcedure_RemoteUniqueId();
+
+		/**
+		 * The meta object literal for the '<em><b>Remote Server</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute FEDERATED_PROCEDURE__REMOTE_SERVER = eINSTANCE.getFederatedProcedure_RemoteServer();
+
+		/**
+		 * The meta object literal for the '<em><b>Remote Schema</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute FEDERATED_PROCEDURE__REMOTE_SCHEMA = eINSTANCE.getFederatedProcedure_RemoteSchema();
+
+		/**
+		 * The meta object literal for the '<em><b>Remote Package</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute FEDERATED_PROCEDURE__REMOTE_PACKAGE = eINSTANCE.getFederatedProcedure_RemotePackage();
+
+		/**
+		 * The meta object literal for the '<em><b>Remote Procedure Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute FEDERATED_PROCEDURE__REMOTE_PROCEDURE_NAME = eINSTANCE.getFederatedProcedure_RemoteProcedureName();
+
+		/**
+		 * The meta object literal for the '<em><b>Number Of Parameters</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute FEDERATED_PROCEDURE__NUMBER_OF_PARAMETERS = eINSTANCE.getFederatedProcedure_NumberOfParameters();
+
+		/**
+		 * The meta object literal for the '<em><b>Result Sets To Client</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute FEDERATED_PROCEDURE__RESULT_SETS_TO_CLIENT = eINSTANCE.getFederatedProcedure_ResultSetsToClient();
+
+		/**
+		 * The meta object literal for the '<em><b>Number Of Ref Cursors</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute FEDERATED_PROCEDURE__NUMBER_OF_REF_CURSORS = eINSTANCE.getFederatedProcedure_NumberOfRefCursors();
+
+		/**
+		 * The meta object literal for the '<em><b>All Result Sets To Caller</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute FEDERATED_PROCEDURE__ALL_RESULT_SETS_TO_CALLER = eINSTANCE.getFederatedProcedure_AllResultSetsToCaller();
+
+		/**
+		 * The meta object literal for the '<em><b>Federated Procedure</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference FEDERATED_PROCEDURE__FEDERATED_PROCEDURE = eINSTANCE.getFederatedProcedure_FederatedProcedure();
+
+		/**
+		 * The meta object literal for the '<em><b>Remote Procedure</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference FEDERATED_PROCEDURE__REMOTE_PROCEDURE = eINSTANCE.getFederatedProcedure_RemoteProcedure();
+
+		/**
+		 * The meta object literal for the '<em><b>Federated Parameter</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference FEDERATED_PROCEDURE__FEDERATED_PARAMETER = eINSTANCE.getFederatedProcedure_FederatedParameter();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.FederatedParameterImpl <em>Federated Parameter</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.FederatedParameterImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getFederatedParameter()
+		 * @generated
+		 */
+		EClass FEDERATED_PARAMETER = eINSTANCE.getFederatedParameter();
+
+		/**
+		 * The meta object literal for the '<em><b>Remote Code Page</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute FEDERATED_PARAMETER__REMOTE_CODE_PAGE = eINSTANCE.getFederatedParameter_RemoteCodePage();
+
+		/**
+		 * The meta object literal for the '<em><b>Remote Param Type ID</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute FEDERATED_PARAMETER__REMOTE_PARAM_TYPE_ID = eINSTANCE.getFederatedParameter_RemoteParamTypeID();
+
+		/**
+		 * The meta object literal for the '<em><b>Federated Procedure</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference FEDERATED_PARAMETER__FEDERATED_PROCEDURE = eINSTANCE.getFederatedParameter_FederatedProcedure();
+
+		/**
+		 * The meta object literal for the '<em><b>Remote Parameter</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference FEDERATED_PARAMETER__REMOTE_PARAMETER = eINSTANCE.getFederatedParameter_RemoteParameter();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionExpressionImpl <em>Partition Expression</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionExpressionImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWPartitionExpression()
+		 * @generated
+		 */
+		EClass LUW_PARTITION_EXPRESSION = eINSTANCE.getLUWPartitionExpression();
+
+		/**
+		 * The meta object literal for the '<em><b>Nulls Last</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_PARTITION_EXPRESSION__NULLS_LAST = eINSTANCE.getLUWPartitionExpression_NullsLast();
+
+		/**
+		 * The meta object literal for the '<em><b>Key</b></em>' container reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_PARTITION_EXPRESSION__KEY = eINSTANCE.getLUWPartitionExpression_Key();
+
+		/**
+		 * The meta object literal for the '<em><b>Column</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_PARTITION_EXPRESSION__COLUMN = eINSTANCE.getLUWPartitionExpression_Column();
+
+		/**
+		 * The meta object literal for the '<em><b>Partition Elements</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_PARTITION_EXPRESSION__PARTITION_ELEMENTS = eINSTANCE.getLUWPartitionExpression_PartitionElements();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionElementImpl <em>Partition Element</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionElementImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWPartitionElement()
+		 * @generated
+		 */
+		EClass LUW_PARTITION_ELEMENT = eINSTANCE.getLUWPartitionElement();
+
+		/**
+		 * The meta object literal for the '<em><b>Starting</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_PARTITION_ELEMENT__STARTING = eINSTANCE.getLUWPartitionElement_Starting();
+
+		/**
+		 * The meta object literal for the '<em><b>Ending</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_PARTITION_ELEMENT__ENDING = eINSTANCE.getLUWPartitionElement_Ending();
+
+		/**
+		 * The meta object literal for the '<em><b>LUW Partition Expression</b></em>' container reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_PARTITION_ELEMENT__LUW_PARTITION_EXPRESSION = eINSTANCE.getLUWPartitionElement_LUWPartitionExpression();
+
+		/**
+		 * The meta object literal for the '<em><b>Partition</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_PARTITION_ELEMENT__PARTITION = eINSTANCE.getLUWPartitionElement_Partition();
+
+		/**
+		 * The meta object literal for the '<em><b>Every Clause</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_PARTITION_ELEMENT__EVERY_CLAUSE = eINSTANCE.getLUWPartitionElement_EveryClause();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDataPartitionImpl <em>Data Partition</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDataPartitionImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWDataPartition()
+		 * @generated
+		 */
+		EClass LUW_DATA_PARTITION = eINSTANCE.getLUWDataPartition();
+
+		/**
+		 * The meta object literal for the '<em><b>Id</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_DATA_PARTITION__ID = eINSTANCE.getLUWDataPartition_Id();
+
+		/**
+		 * The meta object literal for the '<em><b>Low Inclusive</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_DATA_PARTITION__LOW_INCLUSIVE = eINSTANCE.getLUWDataPartition_LowInclusive();
+
+		/**
+		 * The meta object literal for the '<em><b>High Inclusive</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_DATA_PARTITION__HIGH_INCLUSIVE = eINSTANCE.getLUWDataPartition_HighInclusive();
+
+		/**
+		 * The meta object literal for the '<em><b>LOB Data Table Space</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_DATA_PARTITION__LOB_DATA_TABLE_SPACE = eINSTANCE.getLUWDataPartition_LOBDataTableSpace();
+
+		/**
+		 * The meta object literal for the '<em><b>Regular Data Table Space</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_DATA_PARTITION__REGULAR_DATA_TABLE_SPACE = eINSTANCE.getLUWDataPartition_RegularDataTableSpace();
+
+		/**
+		 * The meta object literal for the '<em><b>Partition Elements</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_DATA_PARTITION__PARTITION_ELEMENTS = eINSTANCE.getLUWDataPartition_PartitionElements();
+
+		/**
+		 * The meta object literal for the '<em><b>Table</b></em>' container reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_DATA_PARTITION__TABLE = eINSTANCE.getLUWDataPartition_Table();
+
+		/**
+		 * The meta object literal for the '<em><b>Index Data Table Space</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_DATA_PARTITION__INDEX_DATA_TABLE_SPACE = eINSTANCE.getLUWDataPartition_IndexDataTableSpace();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDataPartitionKeyImpl <em>Data Partition Key</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDataPartitionKeyImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWDataPartitionKey()
+		 * @generated
+		 */
+		EClass LUW_DATA_PARTITION_KEY = eINSTANCE.getLUWDataPartitionKey();
+
+		/**
+		 * The meta object literal for the '<em><b>Partition Method</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_DATA_PARTITION_KEY__PARTITION_METHOD = eINSTANCE.getLUWDataPartitionKey_PartitionMethod();
+
+		/**
+		 * The meta object literal for the '<em><b>Partition Expressions</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_DATA_PARTITION_KEY__PARTITION_EXPRESSIONS = eINSTANCE.getLUWDataPartitionKey_PartitionExpressions();
+
+		/**
+		 * The meta object literal for the '<em><b>Table</b></em>' container reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_DATA_PARTITION_KEY__TABLE = eINSTANCE.getLUWDataPartitionKey_Table();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabasePackageImpl <em>Database Package</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabasePackageImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWDatabasePackage()
+		 * @generated
+		 */
+		EClass LUW_DATABASE_PACKAGE = eINSTANCE.getLUWDatabasePackage();
+
+		/**
+		 * The meta object literal for the '<em><b>Creator</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_DATABASE_PACKAGE__CREATOR = eINSTANCE.getLUWDatabasePackage_Creator();
+
+		/**
+		 * The meta object literal for the '<em><b>Binder</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_DATABASE_PACKAGE__BINDER = eINSTANCE.getLUWDatabasePackage_Binder();
+
+		/**
+		 * The meta object literal for the '<em><b>Cursor Block</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_DATABASE_PACKAGE__CURSOR_BLOCK = eINSTANCE.getLUWDatabasePackage_CursorBlock();
+
+		/**
+		 * The meta object literal for the '<em><b>Number Of Sections</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_DATABASE_PACKAGE__NUMBER_OF_SECTIONS = eINSTANCE.getLUWDatabasePackage_NumberOfSections();
+
+		/**
+		 * The meta object literal for the '<em><b>Optimization Class</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_DATABASE_PACKAGE__OPTIMIZATION_CLASS = eINSTANCE.getLUWDatabasePackage_OptimizationClass();
+
+		/**
+		 * The meta object literal for the '<em><b>Explain Snapshot</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_DATABASE_PACKAGE__EXPLAIN_SNAPSHOT = eINSTANCE.getLUWDatabasePackage_ExplainSnapshot();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleImpl <em>Module</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWModule()
+		 * @generated
+		 */
+		EClass LUW_MODULE = eINSTANCE.getLUWModule();
+
+		/**
+		 * The meta object literal for the '<em><b>Dialect</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_MODULE__DIALECT = eINSTANCE.getLUWModule_Dialect();
+
+		/**
+		 * The meta object literal for the '<em><b>Owning Schema</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_MODULE__OWNING_SCHEMA = eINSTANCE.getLUWModule_OwningSchema();
+
+		/**
+		 * The meta object literal for the '<em><b>Module Objects</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_MODULE__MODULE_OBJECTS = eINSTANCE.getLUWModule_ModuleObjects();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject <em>Module Object</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWModuleObject()
+		 * @generated
+		 */
+		EClass LUW_MODULE_OBJECT = eINSTANCE.getLUWModuleObject();
+
+		/**
+		 * The meta object literal for the '<em><b>Published</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_MODULE_OBJECT__PUBLISHED = eINSTANCE.getLUWModuleObject_Published();
+
+		/**
+		 * The meta object literal for the '<em><b>Module</b></em>' container reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_MODULE_OBJECT__MODULE = eINSTANCE.getLUWModuleObject_Module();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleFunctionImpl <em>Module Function</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleFunctionImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWModuleFunction()
+		 * @generated
+		 */
+		EClass LUW_MODULE_FUNCTION = eINSTANCE.getLUWModuleFunction();
+
+		/**
+		 * The meta object literal for the '<em><b>Implemented</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_MODULE_FUNCTION__IMPLEMENTED = eINSTANCE.getLUWModuleFunction_Implemented();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleProcedureImpl <em>Module Procedure</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleProcedureImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWModuleProcedure()
+		 * @generated
+		 */
+		EClass LUW_MODULE_PROCEDURE = eINSTANCE.getLUWModuleProcedure();
+
+		/**
+		 * The meta object literal for the '<em><b>Implemented</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_MODULE_PROCEDURE__IMPLEMENTED = eINSTANCE.getLUWModuleProcedure_Implemented();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleConditionImpl <em>Module Condition</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleConditionImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWModuleCondition()
+		 * @generated
+		 */
+		EClass LUW_MODULE_CONDITION = eINSTANCE.getLUWModuleCondition();
+
+		/**
+		 * The meta object literal for the '<em><b>Sqlstate</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_MODULE_CONDITION__SQLSTATE = eINSTANCE.getLUWModuleCondition_Sqlstate();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGlobalVariableImpl <em>Global Variable</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGlobalVariableImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWGlobalVariable()
+		 * @generated
+		 */
+		EClass LUW_GLOBAL_VARIABLE = eINSTANCE.getLUWGlobalVariable();
+
+		/**
+		 * The meta object literal for the '<em><b>Default Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_GLOBAL_VARIABLE__DEFAULT_VALUE = eINSTANCE.getLUWGlobalVariable_DefaultValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Is Constant</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_GLOBAL_VARIABLE__IS_CONSTANT = eINSTANCE.getLUWGlobalVariable_IsConstant();
+
+		/**
+		 * The meta object literal for the '<em><b>Schema</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_GLOBAL_VARIABLE__SCHEMA = eINSTANCE.getLUWGlobalVariable_Schema();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleType <em>Module Type</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleType
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWModuleType()
+		 * @generated
+		 */
+		EClass LUW_MODULE_TYPE = eINSTANCE.getLUWModuleType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleRowDataTypeImpl <em>Module Row Data Type</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleRowDataTypeImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWModuleRowDataType()
+		 * @generated
+		 */
+		EClass LUW_MODULE_ROW_DATA_TYPE = eINSTANCE.getLUWModuleRowDataType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleArrayDataTypeImpl <em>Module Array Data Type</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleArrayDataTypeImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWModuleArrayDataType()
+		 * @generated
+		 */
+		EClass LUW_MODULE_ARRAY_DATA_TYPE = eINSTANCE.getLUWModuleArrayDataType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleDistinctTypeImpl <em>Module Distinct Type</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleDistinctTypeImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWModuleDistinctType()
+		 * @generated
+		 */
+		EClass LUW_MODULE_DISTINCT_TYPE = eINSTANCE.getLUWModuleDistinctType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleGlobalVariableImpl <em>Module Global Variable</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleGlobalVariableImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWModuleGlobalVariable()
+		 * @generated
+		 */
+		EClass LUW_MODULE_GLOBAL_VARIABLE = eINSTANCE.getLUWModuleGlobalVariable();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWArrayDataTypeImpl <em>Array Data Type</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWArrayDataTypeImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWArrayDataType()
+		 * @generated
+		 */
+		EClass LUW_ARRAY_DATA_TYPE = eINSTANCE.getLUWArrayDataType();
+
+		/**
+		 * The meta object literal for the '<em><b>Array Index Element Type</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_ARRAY_DATA_TYPE__ARRAY_INDEX_ELEMENT_TYPE = eINSTANCE.getLUWArrayDataType_ArrayIndexElementType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRowDataTypeImpl <em>Row Data Type</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRowDataTypeImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWRowDataType()
+		 * @generated
+		 */
+		EClass LUW_ROW_DATA_TYPE = eINSTANCE.getLUWRowDataType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl <em>PLSQL Package</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getPLSQLPackage()
+		 * @generated
+		 */
+		EClass PLSQL_PACKAGE = eINSTANCE.getPLSQLPackage();
+
+		/**
+		 * The meta object literal for the '<em><b>Package Body</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference PLSQL_PACKAGE__PACKAGE_BODY = eINSTANCE.getPLSQLPackage_PackageBody();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageBodyImpl <em>PLSQL Package Body</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageBodyImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getPLSQLPackageBody()
+		 * @generated
+		 */
+		EClass PLSQL_PACKAGE_BODY = eINSTANCE.getPLSQLPackageBody();
+
+		/**
+		 * The meta object literal for the '<em><b>Package</b></em>' container reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference PLSQL_PACKAGE_BODY__PACKAGE = eINSTANCE.getPLSQLPackageBody_Package();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWCursorDataTypeImpl <em>Cursor Data Type</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWCursorDataTypeImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWCursorDataType()
+		 * @generated
+		 */
+		EClass LUW_CURSOR_DATA_TYPE = eINSTANCE.getLUWCursorDataType();
+
+		/**
+		 * The meta object literal for the '<em><b>Row Type</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_CURSOR_DATA_TYPE__ROW_TYPE = eINSTANCE.getLUWCursorDataType_RowType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleCursorDataTypeImpl <em>Module Cursor Data Type</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleCursorDataTypeImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWModuleCursorDataType()
+		 * @generated
+		 */
+		EClass LUW_MODULE_CURSOR_DATA_TYPE = eINSTANCE.getLUWModuleCursorDataType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWBufferPoolSizeExceptionImpl <em>Buffer Pool Size Exception</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWBufferPoolSizeExceptionImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWBufferPoolSizeException()
+		 * @generated
+		 */
+		EClass LUW_BUFFER_POOL_SIZE_EXCEPTION = eINSTANCE.getLUWBufferPoolSizeException();
+
+		/**
+		 * The meta object literal for the '<em><b>Size</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_BUFFER_POOL_SIZE_EXCEPTION__SIZE = eINSTANCE.getLUWBufferPoolSizeException_Size();
+
+		/**
+		 * The meta object literal for the '<em><b>Buffer Pool</b></em>' container reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_BUFFER_POOL_SIZE_EXCEPTION__BUFFER_POOL = eINSTANCE.getLUWBufferPoolSizeException_BufferPool();
+
+		/**
+		 * The meta object literal for the '<em><b>Partitions</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_BUFFER_POOL_SIZE_EXCEPTION__PARTITIONS = eINSTANCE.getLUWBufferPoolSizeException_Partitions();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWMemberImpl <em>Member</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWMemberImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWMember()
+		 * @generated
+		 */
+		EClass LUW_MEMBER = eINSTANCE.getLUWMember();
+
+		/**
+		 * The meta object literal for the '<em><b>Type</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_MEMBER__TYPE = eINSTANCE.getLUWMember_Type();
+
+		/**
+		 * The meta object literal for the '<em><b>Alert</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_MEMBER__ALERT = eINSTANCE.getLUWMember_Alert();
+
+		/**
+		 * The meta object literal for the '<em><b>Db Partition Num</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_MEMBER__DB_PARTITION_NUM = eINSTANCE.getLUWMember_DbPartitionNum();
+
+		/**
+		 * The meta object literal for the '<em><b>Logical Port</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_MEMBER__LOGICAL_PORT = eINSTANCE.getLUWMember_LogicalPort();
+
+		/**
+		 * The meta object literal for the '<em><b>Net Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_MEMBER__NET_NAME = eINSTANCE.getLUWMember_NetName();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWSecurityPolicyImpl <em>Security Policy</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWSecurityPolicyImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWSecurityPolicy()
+		 * @generated
+		 */
+		EClass LUW_SECURITY_POLICY = eINSTANCE.getLUWSecurityPolicy();
+
+		/**
+		 * The meta object literal for the '<em><b>Not Authorized Write</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_SECURITY_POLICY__NOT_AUTHORIZED_WRITE = eINSTANCE.getLUWSecurityPolicy_NotAuthorizedWrite();
+
+		/**
+		 * The meta object literal for the '<em><b>Components</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_SECURITY_POLICY__COMPONENTS = eINSTANCE.getLUWSecurityPolicy_Components();
+
+		/**
+		 * The meta object literal for the '<em><b>Labels</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_SECURITY_POLICY__LABELS = eINSTANCE.getLUWSecurityPolicy_Labels();
+
+		/**
+		 * The meta object literal for the '<em><b>Table</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_SECURITY_POLICY__TABLE = eINSTANCE.getLUWSecurityPolicy_Table();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWSecurityLabelComponentImpl <em>Security Label Component</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWSecurityLabelComponentImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWSecurityLabelComponent()
+		 * @generated
+		 */
+		EClass LUW_SECURITY_LABEL_COMPONENT = eINSTANCE.getLUWSecurityLabelComponent();
+
+		/**
+		 * The meta object literal for the '<em><b>Type</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_SECURITY_LABEL_COMPONENT__TYPE = eINSTANCE.getLUWSecurityLabelComponent_Type();
+
+		/**
+		 * The meta object literal for the '<em><b>LUW Security Policy</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_SECURITY_LABEL_COMPONENT__LUW_SECURITY_POLICY = eINSTANCE.getLUWSecurityLabelComponent_LUWSecurityPolicy();
+
+		/**
+		 * The meta object literal for the '<em><b>Elements</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_SECURITY_LABEL_COMPONENT__ELEMENTS = eINSTANCE.getLUWSecurityLabelComponent_Elements();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWSecurityLabelImpl <em>Security Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWSecurityLabelImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWSecurityLabel()
+		 * @generated
+		 */
+		EClass LUW_SECURITY_LABEL = eINSTANCE.getLUWSecurityLabel();
+
+		/**
+		 * The meta object literal for the '<em><b>Security Label</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_SECURITY_LABEL__SECURITY_LABEL = eINSTANCE.getLUWSecurityLabel_SecurityLabel();
+
+		/**
+		 * The meta object literal for the '<em><b>Policy</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_SECURITY_LABEL__POLICY = eINSTANCE.getLUWSecurityLabel_Policy();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWSecurityLabelComponentElementImpl <em>Security Label Component Element</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWSecurityLabelComponentElementImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWSecurityLabelComponentElement()
+		 * @generated
+		 */
+		EClass LUW_SECURITY_LABEL_COMPONENT_ELEMENT = eINSTANCE.getLUWSecurityLabelComponentElement();
+
+		/**
+		 * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_SECURITY_LABEL_COMPONENT_ELEMENT__VALUE = eINSTANCE.getLUWSecurityLabelComponentElement_Value();
+
+		/**
+		 * The meta object literal for the '<em><b>Parent Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_SECURITY_LABEL_COMPONENT_ELEMENT__PARENT_VALUE = eINSTANCE.getLUWSecurityLabelComponentElement_ParentValue();
+
+		/**
+		 * The meta object literal for the '<em><b>LUW Security Label Component</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_SECURITY_LABEL_COMPONENT_ELEMENT__LUW_SECURITY_LABEL_COMPONENT = eINSTANCE.getLUWSecurityLabelComponentElement_LUWSecurityLabelComponent();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWStorageGroupImpl <em>Storage Group</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWStorageGroupImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWStorageGroup()
+		 * @generated
+		 */
+		EClass LUW_STORAGE_GROUP = eINSTANCE.getLUWStorageGroup();
+
+		/**
+		 * The meta object literal for the '<em><b>Storage Paths</b></em>' attribute list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_STORAGE_GROUP__STORAGE_PATHS = eINSTANCE.getLUWStorageGroup_StoragePaths();
+
+		/**
+		 * The meta object literal for the '<em><b>Overhead</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_STORAGE_GROUP__OVERHEAD = eINSTANCE.getLUWStorageGroup_Overhead();
+
+		/**
+		 * The meta object literal for the '<em><b>Device Read Rate</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_STORAGE_GROUP__DEVICE_READ_RATE = eINSTANCE.getLUWStorageGroup_DeviceReadRate();
+
+		/**
+		 * The meta object literal for the '<em><b>Data Tag</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_STORAGE_GROUP__DATA_TAG = eINSTANCE.getLUWStorageGroup_DataTag();
+
+		/**
+		 * The meta object literal for the '<em><b>Default</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_STORAGE_GROUP__DEFAULT = eINSTANCE.getLUWStorageGroup_Default();
+
+		/**
+		 * The meta object literal for the '<em><b>Database</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_STORAGE_GROUP__DATABASE = eINSTANCE.getLUWStorageGroup_Database();
+
+		/**
+		 * The meta object literal for the '<em><b>Table Spaces</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_STORAGE_GROUP__TABLE_SPACES = eINSTANCE.getLUWStorageGroup_TableSpaces();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTemporaryStorageTableImpl <em>Temporary Storage Table</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTemporaryStorageTableImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWTemporaryStorageTable()
+		 * @generated
+		 */
+		EClass LUW_TEMPORARY_STORAGE_TABLE = eINSTANCE.getLUWTemporaryStorageTable();
+
+		/**
+		 * The meta object literal for the '<em><b>Partition Key</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_TEMPORARY_STORAGE_TABLE__PARTITION_KEY = eINSTANCE.getLUWTemporaryStorageTable_PartitionKey();
+
+		/**
+		 * The meta object literal for the '<em><b>User Temporary Table Space</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_TEMPORARY_STORAGE_TABLE__USER_TEMPORARY_TABLE_SPACE = eINSTANCE.getLUWTemporaryStorageTable_UserTemporaryTableSpace();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTemporaryTableImpl <em>Temporary Table</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTemporaryTableImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWTemporaryTable()
+		 * @generated
+		 */
+		EClass LUW_TEMPORARY_TABLE = eINSTANCE.getLUWTemporaryTable();
+
+		/**
+		 * The meta object literal for the '<em><b>Table</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_TEMPORARY_TABLE__TABLE = eINSTANCE.getLUWTemporaryTable_Table();
+
+		/**
+		 * The meta object literal for the '<em><b>Log Option</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_TEMPORARY_TABLE__LOG_OPTION = eINSTANCE.getLUWTemporaryTable_LogOption();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.ArrayIndexElementTypeImpl <em>Array Index Element Type</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.ArrayIndexElementTypeImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getArrayIndexElementType()
+		 * @generated
+		 */
+		EClass ARRAY_INDEX_ELEMENT_TYPE = eINSTANCE.getArrayIndexElementType();
+
+		/**
+		 * The meta object literal for the '<em><b>LUW Array Data Type</b></em>' container reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference ARRAY_INDEX_ELEMENT_TYPE__LUW_ARRAY_DATA_TYPE = eINSTANCE.getArrayIndexElementType_LUWArrayDataType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionEveryClauseElementImpl <em>Partition Every Clause Element</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionEveryClauseElementImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWPartitionEveryClauseElement()
+		 * @generated
+		 */
+		EClass LUW_PARTITION_EVERY_CLAUSE_ELEMENT = eINSTANCE.getLUWPartitionEveryClauseElement();
+
+		/**
+		 * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_PARTITION_EVERY_CLAUSE_ELEMENT__VALUE = eINSTANCE.getLUWPartitionEveryClauseElement_Value();
+
+		/**
+		 * The meta object literal for the '<em><b>Duration</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LUW_PARTITION_EVERY_CLAUSE_ELEMENT__DURATION = eINSTANCE.getLUWPartitionEveryClauseElement_Duration();
+
+		/**
+		 * The meta object literal for the '<em><b>LUW Partition Element</b></em>' container reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LUW_PARTITION_EVERY_CLAUSE_ELEMENT__LUW_PARTITION_ELEMENT = eINSTANCE.getLUWPartitionEveryClauseElement_LUWPartitionElement();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWContainerType <em>Container Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWContainerType
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWContainerType()
+		 * @generated
+		 */
+		EEnum LUW_CONTAINER_TYPE = eINSTANCE.getLUWContainerType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.PageSizeType <em>Page Size Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.PageSizeType
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getPageSizeType()
+		 * @generated
+		 */
+		EEnum PAGE_SIZE_TYPE = eINSTANCE.getPageSizeType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.BufferPoolType <em>Buffer Pool Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.BufferPoolType
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getBufferPoolType()
+		 * @generated
+		 */
+		EEnum BUFFER_POOL_TYPE = eINSTANCE.getBufferPoolType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.TableSpaceType <em>Table Space Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.TableSpaceType
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getTableSpaceType()
+		 * @generated
+		 */
+		EEnum TABLE_SPACE_TYPE = eINSTANCE.getTableSpaceType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.ManagementType <em>Management Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.ManagementType
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getManagementType()
+		 * @generated
+		 */
+		EEnum MANAGEMENT_TYPE = eINSTANCE.getManagementType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.CheckOptionType <em>Check Option Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.CheckOptionType
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getCheckOptionType()
+		 * @generated
+		 */
+		EEnum CHECK_OPTION_TYPE = eINSTANCE.getCheckOptionType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.PartitionMethod <em>Partition Method</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.PartitionMethod
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getPartitionMethod()
+		 * @generated
+		 */
+		EEnum PARTITION_METHOD = eINSTANCE.getPartitionMethod();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.MaintenanceType <em>Maintenance Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.MaintenanceType
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getMaintenanceType()
+		 * @generated
+		 */
+		EEnum MAINTENANCE_TYPE = eINSTANCE.getMaintenanceType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.RefreshType <em>Refresh Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.RefreshType
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getRefreshType()
+		 * @generated
+		 */
+		EEnum REFRESH_TYPE = eINSTANCE.getRefreshType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.WrapperType <em>Wrapper Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.WrapperType
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getWrapperType()
+		 * @generated
+		 */
+		EEnum WRAPPER_TYPE = eINSTANCE.getWrapperType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.DataPartitionMethod <em>Data Partition Method</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.DataPartitionMethod
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getDataPartitionMethod()
+		 * @generated
+		 */
+		EEnum DATA_PARTITION_METHOD = eINSTANCE.getDataPartitionMethod();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.CursorBlockType <em>Cursor Block Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.CursorBlockType
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getCursorBlockType()
+		 * @generated
+		 */
+		EEnum CURSOR_BLOCK_TYPE = eINSTANCE.getCursorBlockType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.ExplainSnaphotType <em>Explain Snaphot Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.ExplainSnaphotType
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getExplainSnaphotType()
+		 * @generated
+		 */
+		EEnum EXPLAIN_SNAPHOT_TYPE = eINSTANCE.getExplainSnaphotType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FileSystemCachingType <em>File System Caching Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.FileSystemCachingType
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getFileSystemCachingType()
+		 * @generated
+		 */
+		EEnum FILE_SYSTEM_CACHING_TYPE = eINSTANCE.getFileSystemCachingType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndexPageSplitType <em>Index Page Split Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndexPageSplitType
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWIndexPageSplitType()
+		 * @generated
+		 */
+		EEnum LUW_INDEX_PAGE_SPLIT_TYPE = eINSTANCE.getLUWIndexPageSplitType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndexCompressType <em>Index Compress Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndexCompressType
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWIndexCompressType()
+		 * @generated
+		 */
+		EEnum LUW_INDEX_COMPRESS_TYPE = eINSTANCE.getLUWIndexCompressType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.SystemType <em>System Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.SystemType
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getSystemType()
+		 * @generated
+		 */
+		EEnum SYSTEM_TYPE = eINSTANCE.getSystemType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.AverageTableSizeType <em>Average Table Size Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.AverageTableSizeType
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getAverageTableSizeType()
+		 * @generated
+		 */
+		EEnum AVERAGE_TABLE_SIZE_TYPE = eINSTANCE.getAverageTableSizeType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTableCompressionMode <em>Storage Table Compression Mode</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTableCompressionMode
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWStorageTableCompressionMode()
+		 * @generated
+		 */
+		EEnum LUW_STORAGE_TABLE_COMPRESSION_MODE = eINSTANCE.getLUWStorageTableCompressionMode();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMemberType <em>Member Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMemberType
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWMemberType()
+		 * @generated
+		 */
+		EEnum LUW_MEMBER_TYPE = eINSTANCE.getLUWMemberType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.MemberStateType <em>Member State Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.MemberStateType
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getMemberStateType()
+		 * @generated
+		 */
+		EEnum MEMBER_STATE_TYPE = eINSTANCE.getMemberStateType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentType <em>Security Label Component Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentType
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWSecurityLabelComponentType()
+		 * @generated
+		 */
+		EEnum LUW_SECURITY_LABEL_COMPONENT_TYPE = eINSTANCE.getLUWSecurityLabelComponentType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelNotAuthorizedWriteAction <em>Security Label Not Authorized Write Action</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelNotAuthorizedWriteAction
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWSecurityLabelNotAuthorizedWriteAction()
+		 * @generated
+		 */
+		EEnum LUW_SECURITY_LABEL_NOT_AUTHORIZED_WRITE_ACTION = eINSTANCE.getLUWSecurityLabelNotAuthorizedWriteAction();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFederatedDataSource <em>Federated Data Source</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFederatedDataSource
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWFederatedDataSource()
+		 * @generated
+		 */
+		EEnum LUW_FEDERATED_DATA_SOURCE = eINSTANCE.getLUWFederatedDataSource();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryTableLoggingOption <em>Temporary Table Logging Option</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryTableLoggingOption
+		 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPackageImpl#getLUWTemporaryTableLoggingOption()
+		 * @generated
+		 */
+		EEnum LUW_TEMPORARY_TABLE_LOGGING_OPTION = eINSTANCE.getLUWTemporaryTableLoggingOption();
+
+	}
+
+} //LUWPackage
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWPartitionElement.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWPartitionElement.java
new file mode 100644
index 0000000..8ca6f34
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWPartitionElement.java
@@ -0,0 +1,176 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWPartitionElement.java,v 1.4 2007/10/12 23:05:36 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Partition Element</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement#getStarting <em>Starting</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement#getEnding <em>Ending</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement#getLUWPartitionExpression <em>LUW Partition Expression</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement#getPartition <em>Partition</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement#getEveryClause <em>Every Clause</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWPartitionElement()
+ * @model
+ * @generated
+ */
+public interface LUWPartitionElement extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Starting</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Starting</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Starting</em>' attribute.
+	 * @see #setStarting(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWPartitionElement_Starting()
+	 * @model
+	 * @generated
+	 */
+	String getStarting();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement#getStarting <em>Starting</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Starting</em>' attribute.
+	 * @see #getStarting()
+	 * @generated
+	 */
+	void setStarting(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Ending</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Ending</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Ending</em>' attribute.
+	 * @see #setEnding(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWPartitionElement_Ending()
+	 * @model
+	 * @generated
+	 */
+	String getEnding();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement#getEnding <em>Ending</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Ending</em>' attribute.
+	 * @see #getEnding()
+	 * @generated
+	 */
+	void setEnding(String value);
+
+	/**
+	 * Returns the value of the '<em><b>LUW Partition Expression</b></em>' container reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionExpression#getPartitionElements <em>Partition Elements</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>LUW Partition Expression</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>LUW Partition Expression</em>' container reference.
+	 * @see #setLUWPartitionExpression(LUWPartitionExpression)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWPartitionElement_LUWPartitionExpression()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionExpression#getPartitionElements
+	 * @model opposite="partitionElements" required="true"
+	 * @generated
+	 */
+	LUWPartitionExpression getLUWPartitionExpression();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement#getLUWPartitionExpression <em>LUW Partition Expression</em>}' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>LUW Partition Expression</em>' container reference.
+	 * @see #getLUWPartitionExpression()
+	 * @generated
+	 */
+	void setLUWPartitionExpression(LUWPartitionExpression value);
+
+	/**
+	 * Returns the value of the '<em><b>Partition</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getPartitionElements <em>Partition Elements</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Partition</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Partition</em>' reference.
+	 * @see #setPartition(LUWDataPartition)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWPartitionElement_Partition()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getPartitionElements
+	 * @model opposite="partitionElements" required="true"
+	 * @generated
+	 */
+	LUWDataPartition getPartition();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement#getPartition <em>Partition</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Partition</em>' reference.
+	 * @see #getPartition()
+	 * @generated
+	 */
+	void setPartition(LUWDataPartition value);
+
+	/**
+	 * Returns the value of the '<em><b>Every Clause</b></em>' containment reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionEveryClauseElement#getLUWPartitionElement <em>LUW Partition Element</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Every Clause</em>' containment reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Every Clause</em>' containment reference.
+	 * @see #setEveryClause(LUWPartitionEveryClauseElement)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWPartitionElement_EveryClause()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionEveryClauseElement#getLUWPartitionElement
+	 * @model opposite="LUWPartitionElement" containment="true"
+	 * @generated
+	 */
+	LUWPartitionEveryClauseElement getEveryClause();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement#getEveryClause <em>Every Clause</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Every Clause</em>' containment reference.
+	 * @see #getEveryClause()
+	 * @generated
+	 */
+	void setEveryClause(LUWPartitionEveryClauseElement value);
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model
+	 * @generated
+	 */
+	Boolean hasEveryClause();
+
+} // LUWPartitionElement
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWPartitionEveryClauseElement.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWPartitionEveryClauseElement.java
new file mode 100644
index 0000000..cf577dd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWPartitionEveryClauseElement.java
@@ -0,0 +1,106 @@
+/**
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Partition Every Clause Element</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionEveryClauseElement#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionEveryClauseElement#getDuration <em>Duration</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionEveryClauseElement#getLUWPartitionElement <em>LUW Partition Element</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWPartitionEveryClauseElement()
+ * @model
+ * @generated
+ */
+public interface LUWPartitionEveryClauseElement extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Value</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Value</em>' attribute.
+	 * @see #setValue(Double)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWPartitionEveryClauseElement_Value()
+	 * @model
+	 * @generated
+	 */
+	Double getValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionEveryClauseElement#getValue <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Value</em>' attribute.
+	 * @see #getValue()
+	 * @generated
+	 */
+	void setValue(Double value);
+
+	/**
+	 * Returns the value of the '<em><b>Duration</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Duration</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Duration</em>' attribute.
+	 * @see #setDuration(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWPartitionEveryClauseElement_Duration()
+	 * @model
+	 * @generated
+	 */
+	String getDuration();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionEveryClauseElement#getDuration <em>Duration</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Duration</em>' attribute.
+	 * @see #getDuration()
+	 * @generated
+	 */
+	void setDuration(String value);
+
+	/**
+	 * Returns the value of the '<em><b>LUW Partition Element</b></em>' container reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement#getEveryClause <em>Every Clause</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>LUW Partition Element</em>' container reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>LUW Partition Element</em>' container reference.
+	 * @see #setLUWPartitionElement(LUWPartitionElement)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWPartitionEveryClauseElement_LUWPartitionElement()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement#getEveryClause
+	 * @model opposite="everyClause" required="true"
+	 * @generated
+	 */
+	LUWPartitionElement getLUWPartitionElement();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionEveryClauseElement#getLUWPartitionElement <em>LUW Partition Element</em>}' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>LUW Partition Element</em>' container reference.
+	 * @see #getLUWPartitionElement()
+	 * @generated
+	 */
+	void setLUWPartitionElement(LUWPartitionElement value);
+
+} // LUWPartitionEveryClauseElement
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWPartitionExpression.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWPartitionExpression.java
new file mode 100644
index 0000000..af86c0c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWPartitionExpression.java
@@ -0,0 +1,132 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWPartitionExpression.java,v 1.5 2007/10/12 23:05:35 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Partition Expression</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionExpression#isNullsLast <em>Nulls Last</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionExpression#getKey <em>Key</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionExpression#getColumn <em>Column</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionExpression#getPartitionElements <em>Partition Elements</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWPartitionExpression()
+ * @model
+ * @generated
+ */
+public interface LUWPartitionExpression extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Nulls Last</b></em>' attribute.
+	 * The default value is <code>"true"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Nulls Last</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Nulls Last</em>' attribute.
+	 * @see #setNullsLast(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWPartitionExpression_NullsLast()
+	 * @model default="true"
+	 * @generated
+	 */
+	boolean isNullsLast();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionExpression#isNullsLast <em>Nulls Last</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Nulls Last</em>' attribute.
+	 * @see #isNullsLast()
+	 * @generated
+	 */
+	void setNullsLast(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Key</b></em>' container reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartitionKey#getPartitionExpressions <em>Partition Expressions</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Key</em>' container reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Key</em>' container reference.
+	 * @see #setKey(LUWDataPartitionKey)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWPartitionExpression_Key()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartitionKey#getPartitionExpressions
+	 * @model opposite="partitionExpressions" required="true"
+	 * @generated
+	 */
+	LUWDataPartitionKey getKey();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionExpression#getKey <em>Key</em>}' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Key</em>' container reference.
+	 * @see #getKey()
+	 * @generated
+	 */
+	void setKey(LUWDataPartitionKey value);
+
+	/**
+	 * Returns the value of the '<em><b>Column</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Column</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Column</em>' reference.
+	 * @see #setColumn(Column)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWPartitionExpression_Column()
+	 * @model required="true"
+	 * @generated
+	 */
+	Column getColumn();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionExpression#getColumn <em>Column</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Column</em>' reference.
+	 * @see #getColumn()
+	 * @generated
+	 */
+	void setColumn(Column value);
+
+	/**
+	 * Returns the value of the '<em><b>Partition Elements</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement#getLUWPartitionExpression <em>LUW Partition Expression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Partition Elements</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Partition Elements</em>' containment reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWPartitionExpression_PartitionElements()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement#getLUWPartitionExpression
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement" opposite="LUWPartitionExpression" containment="true" required="true"
+	 * @generated
+	 */
+	EList getPartitionElements();
+
+} // LUWPartitionExpression
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWPartitionGroup.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWPartitionGroup.java
new file mode 100644
index 0000000..7169f95
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWPartitionGroup.java
@@ -0,0 +1,133 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Partition Group</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * DB2 Universal Database SQL Reference Version 8.1 (Vol.1 and 2)
+ * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+ * 
+ * Database partition groups
+ * 
+ * A database partition group is a set of one or more database partitions. When you want to create tables for the database, you first create the database partition group where the table spaces will be stored, then you create the table space where the tables will be stored. 
+ * 
+ * Data partitioning
+ * DB2(R) extends the database manager to the parallel, multi-node environment. A database partition is a part of a database that consists of its own data, indexes, configuration files, and transaction logs. A database partition is sometimes called a node or a database node. 
+ * 
+ * A single-partition database is a database having only one database partition. All data in the database is stored in that partition. In this case database partition groups, while present, provide no additional capability. 
+ * 
+ * A partitioned database is a database with two or more database partitions. Tables can be located in one or more database partitions. When a table is in a database partition group consisting of multiple partitions, some of its rows are stored in one partition, and other rows are stored in other partitions. 
+ * 
+ * 
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup#getPartitions <em>Partitions</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup#getTableSpaces <em>Table Spaces</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup#getDatabase <em>Database</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup#getBufferPool <em>Buffer Pool</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWPartitionGroup()
+ * @model
+ * @generated
+ */
+public interface LUWPartitionGroup extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Partitions</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getGroup <em>Group</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Partitions</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Partitions</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWPartitionGroup_Partitions()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition#getGroup
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition" opposite="group" required="true"
+	 * @generated
+	 */
+	EList getPartitions();
+
+	/**
+	 * Returns the value of the '<em><b>Table Spaces</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getGroup <em>Group</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Table Spaces</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Table Spaces</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWPartitionGroup_TableSpaces()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getGroup
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace" opposite="group"
+	 * @generated
+	 */
+	EList getTableSpaces();
+
+	/**
+	 * Returns the value of the '<em><b>Database</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getGroups <em>Groups</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Database</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Database</em>' reference.
+	 * @see #setDatabase(LUWDatabase)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWPartitionGroup_Database()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getGroups
+	 * @model opposite="groups" required="true"
+	 * @generated
+	 */
+	LUWDatabase getDatabase();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup#getDatabase <em>Database</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Database</em>' reference.
+	 * @see #getDatabase()
+	 * @generated
+	 */
+	void setDatabase(LUWDatabase value);
+
+	/**
+	 * Returns the value of the '<em><b>Buffer Pool</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getPartitionGroup <em>Partition Group</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Buffer Pool</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Buffer Pool</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWPartitionGroup_BufferPool()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getPartitionGroup
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool" opposite="partitionGroup"
+	 * @generated
+	 */
+	EList getBufferPool();
+
+} // LUWPartitionGroup
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWPartitionKey.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWPartitionKey.java
new file mode 100644
index 0000000..e0da655
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWPartitionKey.java
@@ -0,0 +1,157 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Partition Key</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Data partitioning across multiple partitions
+ * 
+ * DB2 allows great flexibility in spreading data across multiple partitions (nodes) of a partitioned database. Users can choose how to partition their data by declaring partitioning keys, and can determine which and how many partitions their table data can be spread across by selecting the database partition group and table space in which the data should be stored. In addition, a partitioning map (which is updatable) specifies the mapping of partitioning key values to partitions. This makes it possible for flexible workload parallelization across a partitioned database for large tables, while allowing smaller tables to be stored on one or a small number of partitions if the application designer so chooses. Each local partition may have local indexes on the data it stores to provide high performance local data access.
+ * 
+ * A partitioned database supports a partitioned storage model, in which the partitioning key is used to partition table data across a set of database partitions. Index data is also partitioned with its corresponding tables, and stored locally at each partition. Before partitions can be used to store database data, they must be defined to the database manager. Partitions are defined in a file called db2nodes.cfg.
+ * 
+ * The partitioning key for a table in a table space on a partitioned database partition group is specified in the CREATE TABLE statement or the ALTER TABLE statement. If not specified, a partitioning key for a table is created by default from the first column of the primary key. If no primary key is defined, the default partitioning key is the first column defined in that table that has a data type other than a long or a LOB data type. Partitioned tables must have at least one column that is neither a long nor a LOB data type. A table in a table space that is in a single partition database partition group will have a partitioning key only if it is explicitly specified.
+ * 
+ * Hash partitioning is used to place a row in a partition as follows:
+ * 1. A hashing algorithm (partitioning function) is applied to all of the columns of the partitioning key, which results in the generation of a partitioning map index value.
+ * 2. The partition number at that index value in the partitioning map identifies the partition in which the row is to be stored.
+ * 
+ * DB2 supports partial declustering, which means that a table can be partitioned across a subset of partitions in the system (that is, a database partition group). Tables do not have to be partitioned across all of the partitions in the system. DB2 has the capability of recognizing when data being accessed for a join or a subquery is located at the same partition in the same database partition group. This is known as table collocation. Rows in collocated tables with the same partitioning key values are located on the same partition. DB2 can choose to perform join or subquery processing at the partition in which the data is stored. This can have significant performance advantages.
+ * 
+ * Collocated tables must:
+ *  - Be in the same database partition group, one that is not being redistributed. (During redistribution, tables in the database partition group may be using different partitioning maps - they are not collocated.)
+ *  - Have partitioning keys with the same number of columns.
+ *  - Have the corresponding columns of the partitioning key be partition compatible.
+ *  - Be in a single partition database partition group defined on the same partition.
+ * 
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey#getTemporaryStorageTable <em>Temporary Storage Table</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey#getPartitionMethod <em>Partition Method</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey#getTable <em>Table</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey#getColumns <em>Columns</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWPartitionKey()
+ * @model
+ * @generated
+ */
+public interface LUWPartitionKey extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Temporary Storage Table</b></em>' container reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryStorageTable#getPartitionKey <em>Partition Key</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Temporary Storage Table</em>' container reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Temporary Storage Table</em>' container reference.
+	 * @see #setTemporaryStorageTable(LUWTemporaryStorageTable)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWPartitionKey_TemporaryStorageTable()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryStorageTable#getPartitionKey
+	 * @model opposite="partitionKey" required="true"
+	 * @generated
+	 */
+	LUWTemporaryStorageTable getTemporaryStorageTable();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey#getTemporaryStorageTable <em>Temporary Storage Table</em>}' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Temporary Storage Table</em>' container reference.
+	 * @see #getTemporaryStorageTable()
+	 * @generated
+	 */
+	void setTemporaryStorageTable(LUWTemporaryStorageTable value);
+
+	/**
+	 * Returns the value of the '<em><b>Partition Method</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.PartitionMethod}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Partition Method</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Partition Method</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.PartitionMethod
+	 * @see #setPartitionMethod(PartitionMethod)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWPartitionKey_PartitionMethod()
+	 * @model
+	 * @generated
+	 */
+	PartitionMethod getPartitionMethod();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey#getPartitionMethod <em>Partition Method</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Partition Method</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.PartitionMethod
+	 * @see #getPartitionMethod()
+	 * @generated
+	 */
+	void setPartitionMethod(PartitionMethod value);
+
+	/**
+	 * Returns the value of the '<em><b>Table</b></em>' container reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getPartitionKey <em>Partition Key</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Table</em>' container reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Table</em>' container reference.
+	 * @see #setTable(LUWStorageTable)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWPartitionKey_Table()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getPartitionKey
+	 * @model opposite="partitionKey" required="true"
+	 * @generated
+	 */
+	LUWStorageTable getTable();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey#getTable <em>Table</em>}' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Table</em>' container reference.
+	 * @see #getTable()
+	 * @generated
+	 */
+	void setTable(LUWStorageTable value);
+
+	/**
+	 * Returns the value of the '<em><b>Columns</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.modelbase.sql.tables.Column}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Columns</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Columns</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWPartitionKey_Columns()
+	 * @model type="org.eclipse.datatools.modelbase.sql.tables.Column" required="true"
+	 * @generated
+	 */
+	EList getColumns();
+
+} // LUWPartitionKey
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWRelationalNickname.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWRelationalNickname.java
new file mode 100644
index 0000000..a726ce0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWRelationalNickname.java
@@ -0,0 +1,45 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Relational Nickname</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalNickname#getRelServer <em>Rel Server</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWRelationalNickname()
+ * @model abstract="true"
+ * @generated
+ */
+public interface LUWRelationalNickname extends LUWNickname{
+	/**
+	 * Returns the value of the '<em><b>Rel Server</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getRelNicknames <em>Rel Nicknames</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Rel Server</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Rel Server</em>' reference.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWRelationalNickname_RelServer()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getRelNicknames
+	 * @model opposite="relNicknames" required="true" transient="true" changeable="false" volatile="true"
+	 * @generated
+	 */
+	LUWRelationalServer getRelServer();
+
+} // LUWRelationalNickname
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWRelationalServer.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWRelationalServer.java
new file mode 100644
index 0000000..abbd223
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWRelationalServer.java
@@ -0,0 +1,386 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Relational Server</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getCpuRatio <em>Cpu Ratio</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getIoRatio <em>Io Ratio</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getCommRate <em>Comm Rate</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#isFoldId <em>Fold Id</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#isFoldPW <em>Fold PW</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#isCollatingSequence <em>Collating Sequence</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#isPushdown <em>Pushdown</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getNode <em>Node</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getDbName <em>Db Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#isIudAppSvptEnforce <em>Iud App Svpt Enforce</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getPassword <em>Password</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getRelNicknames <em>Rel Nicknames</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getRelWrapper <em>Rel Wrapper</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWRelationalServer()
+ * @model abstract="true"
+ * @generated
+ */
+public interface LUWRelationalServer extends LUWServer {
+	/**
+	 * Returns the value of the '<em><b>Cpu Ratio</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Cpu Ratio</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Cpu Ratio</em>' attribute.
+	 * @see #setCpuRatio(long)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWRelationalServer_CpuRatio()
+	 * @model
+	 * @generated
+	 */
+	long getCpuRatio();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getCpuRatio <em>Cpu Ratio</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Cpu Ratio</em>' attribute.
+	 * @see #getCpuRatio()
+	 * @generated
+	 */
+	void setCpuRatio(long value);
+
+	/**
+	 * Returns the value of the '<em><b>Io Ratio</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Io Ratio</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Io Ratio</em>' attribute.
+	 * @see #setIoRatio(long)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWRelationalServer_IoRatio()
+	 * @model
+	 * @generated
+	 */
+	long getIoRatio();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getIoRatio <em>Io Ratio</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Io Ratio</em>' attribute.
+	 * @see #getIoRatio()
+	 * @generated
+	 */
+	void setIoRatio(long value);
+
+	/**
+	 * Returns the value of the '<em><b>Comm Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Comm Rate</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Comm Rate</em>' attribute.
+	 * @see #setCommRate(long)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWRelationalServer_CommRate()
+	 * @model
+	 * @generated
+	 */
+	long getCommRate();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getCommRate <em>Comm Rate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Comm Rate</em>' attribute.
+	 * @see #getCommRate()
+	 * @generated
+	 */
+	void setCommRate(long value);
+
+	/**
+	 * Returns the value of the '<em><b>Fold Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Fold Id</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Fold Id</em>' attribute.
+	 * @see #setFoldId(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWRelationalServer_FoldId()
+	 * @model
+	 * @generated
+	 */
+	boolean isFoldId();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#isFoldId <em>Fold Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Fold Id</em>' attribute.
+	 * @see #isFoldId()
+	 * @generated
+	 */
+	void setFoldId(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Fold PW</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Fold PW</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Fold PW</em>' attribute.
+	 * @see #setFoldPW(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWRelationalServer_FoldPW()
+	 * @model
+	 * @generated
+	 */
+	boolean isFoldPW();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#isFoldPW <em>Fold PW</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Fold PW</em>' attribute.
+	 * @see #isFoldPW()
+	 * @generated
+	 */
+	void setFoldPW(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Collating Sequence</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Collating Sequence</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Collating Sequence</em>' attribute.
+	 * @see #setCollatingSequence(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWRelationalServer_CollatingSequence()
+	 * @model
+	 * @generated
+	 */
+	boolean isCollatingSequence();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#isCollatingSequence <em>Collating Sequence</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Collating Sequence</em>' attribute.
+	 * @see #isCollatingSequence()
+	 * @generated
+	 */
+	void setCollatingSequence(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Pushdown</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Pushdown</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Pushdown</em>' attribute.
+	 * @see #setPushdown(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWRelationalServer_Pushdown()
+	 * @model
+	 * @generated
+	 */
+	boolean isPushdown();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#isPushdown <em>Pushdown</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Pushdown</em>' attribute.
+	 * @see #isPushdown()
+	 * @generated
+	 */
+	void setPushdown(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Node</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Node</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Node</em>' attribute.
+	 * @see #setNode(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWRelationalServer_Node()
+	 * @model
+	 * @generated
+	 */
+	String getNode();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getNode <em>Node</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Node</em>' attribute.
+	 * @see #getNode()
+	 * @generated
+	 */
+	void setNode(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Db Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Db Name</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Db Name</em>' attribute.
+	 * @see #setDbName(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWRelationalServer_DbName()
+	 * @model
+	 * @generated
+	 */
+	String getDbName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getDbName <em>Db Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Db Name</em>' attribute.
+	 * @see #getDbName()
+	 * @generated
+	 */
+	void setDbName(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Iud App Svpt Enforce</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Iud App Svpt Enforce</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Iud App Svpt Enforce</em>' attribute.
+	 * @see #setIudAppSvptEnforce(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWRelationalServer_IudAppSvptEnforce()
+	 * @model
+	 * @generated
+	 */
+	boolean isIudAppSvptEnforce();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#isIudAppSvptEnforce <em>Iud App Svpt Enforce</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Iud App Svpt Enforce</em>' attribute.
+	 * @see #isIudAppSvptEnforce()
+	 * @generated
+	 */
+	void setIudAppSvptEnforce(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Password</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Password</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Password</em>' attribute.
+	 * @see #setPassword(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWRelationalServer_Password()
+	 * @model
+	 * @generated
+	 */
+	String getPassword();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getPassword <em>Password</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Password</em>' attribute.
+	 * @see #getPassword()
+	 * @generated
+	 */
+	void setPassword(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Rel Wrapper</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalWrapper#getRelServers <em>Rel Servers</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Rel Wrapper</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Rel Wrapper</em>' reference.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWRelationalServer_RelWrapper()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalWrapper#getRelServers
+	 * @model opposite="relServers" required="true" transient="true" changeable="false" volatile="true"
+	 * @generated
+	 */
+	LUWRelationalWrapper getRelWrapper();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model kind="operation" many="false"
+	 * @generated
+	 */
+	EList getFunctionMappings();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model kind="operation" many="false"
+	 * @generated
+	 */
+	EList getTypeMappings();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model kind="operation" many="false"
+	 * @generated
+	 */
+	EList getReverseTypeMappings();
+
+	/**
+	 * Returns the value of the '<em><b>Rel Nicknames</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalNickname}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalNickname#getRelServer <em>Rel Server</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Rel Nicknames</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Rel Nicknames</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWRelationalServer_RelNicknames()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalNickname#getRelServer
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalNickname" opposite="relServer" transient="true" changeable="false" volatile="true"
+	 * @generated
+	 */
+	EList getRelNicknames();
+
+} // LUWRelationalServer
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWRelationalWrapper.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWRelationalWrapper.java
new file mode 100644
index 0000000..5735513
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWRelationalWrapper.java
@@ -0,0 +1,47 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Relational Wrapper</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalWrapper#getRelServers <em>Rel Servers</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWRelationalWrapper()
+ * @model abstract="true"
+ * @generated
+ */
+public interface LUWRelationalWrapper extends LUWWrapper{
+	/**
+	 * Returns the value of the '<em><b>Rel Servers</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getRelWrapper <em>Rel Wrapper</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Rel Servers</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Rel Servers</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWRelationalWrapper_RelServers()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer#getRelWrapper
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer" opposite="relWrapper" transient="true" changeable="false" volatile="true"
+	 * @generated
+	 */
+	EList getRelServers();
+
+} // LUWRelationalWrapper
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWRowDataType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWRowDataType.java
new file mode 100644
index 0000000..a1f10b4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWRowDataType.java
@@ -0,0 +1,23 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWRowDataType.java,v 1.1 2009/02/16 19:01:34 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.datatypes.RowDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Row Data Type</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWRowDataType()
+ * @model
+ * @generated
+ */
+public interface LUWRowDataType extends UserDefinedType, RowDataType {
+} // LUWRowDataType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWSecurityLabel.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWSecurityLabel.java
new file mode 100644
index 0000000..26475e1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWSecurityLabel.java
@@ -0,0 +1,83 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Security Label</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabel#getSecurityLabel <em>Security Label</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabel#getPolicy <em>Policy</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWSecurityLabel()
+ * @model
+ * @generated
+ */
+public interface LUWSecurityLabel extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Security Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Security Label</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Security Label</em>' attribute.
+	 * @see #setSecurityLabel(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWSecurityLabel_SecurityLabel()
+	 * @model
+	 * @generated
+	 */
+	String getSecurityLabel();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabel#getSecurityLabel <em>Security Label</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Security Label</em>' attribute.
+	 * @see #getSecurityLabel()
+	 * @generated
+	 */
+	void setSecurityLabel(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Policy</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy#getLabels <em>Labels</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Policy</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Policy</em>' reference.
+	 * @see #setPolicy(LUWSecurityPolicy)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWSecurityLabel_Policy()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy#getLabels
+	 * @model opposite="labels" required="true"
+	 * @generated
+	 */
+	LUWSecurityPolicy getPolicy();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabel#getPolicy <em>Policy</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Policy</em>' reference.
+	 * @see #getPolicy()
+	 * @generated
+	 */
+	void setPolicy(LUWSecurityPolicy value);
+
+} // LUWSecurityLabel
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWSecurityLabelComponent.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWSecurityLabelComponent.java
new file mode 100644
index 0000000..8b4908a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWSecurityLabelComponent.java
@@ -0,0 +1,97 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Security Label Component</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponent#getType <em>Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponent#getLUWSecurityPolicy <em>LUW Security Policy</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponent#getElements <em>Elements</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWSecurityLabelComponent()
+ * @model
+ * @generated
+ */
+public interface LUWSecurityLabelComponent extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Type</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Type</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Type</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentType
+	 * @see #setType(LUWSecurityLabelComponentType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWSecurityLabelComponent_Type()
+	 * @model
+	 * @generated
+	 */
+	LUWSecurityLabelComponentType getType();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponent#getType <em>Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Type</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentType
+	 * @see #getType()
+	 * @generated
+	 */
+	void setType(LUWSecurityLabelComponentType value);
+
+	/**
+	 * Returns the value of the '<em><b>LUW Security Policy</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy#getComponents <em>Components</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>LUW Security Policy</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>LUW Security Policy</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWSecurityLabelComponent_LUWSecurityPolicy()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy#getComponents
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy" opposite="components"
+	 * @generated
+	 */
+	EList getLUWSecurityPolicy();
+
+	/**
+	 * Returns the value of the '<em><b>Elements</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentElement}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentElement#getLUWSecurityLabelComponent <em>LUW Security Label Component</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Elements</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Elements</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWSecurityLabelComponent_Elements()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentElement#getLUWSecurityLabelComponent
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentElement" opposite="LUWSecurityLabelComponent"
+	 * @generated
+	 */
+	EList getElements();
+
+} // LUWSecurityLabelComponent
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWSecurityLabelComponentElement.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWSecurityLabelComponentElement.java
new file mode 100644
index 0000000..416aca3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWSecurityLabelComponentElement.java
@@ -0,0 +1,101 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Security Label Component Element</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentElement#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentElement#getParentValue <em>Parent Value</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentElement#getLUWSecurityLabelComponent <em>LUW Security Label Component</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWSecurityLabelComponentElement()
+ * @model
+ * @generated
+ */
+public interface LUWSecurityLabelComponentElement extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Value</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Value</em>' attribute.
+	 * @see #setValue(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWSecurityLabelComponentElement_Value()
+	 * @model
+	 * @generated
+	 */
+	String getValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentElement#getValue <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Value</em>' attribute.
+	 * @see #getValue()
+	 * @generated
+	 */
+	void setValue(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Parent Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Parent Value</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Parent Value</em>' attribute.
+	 * @see #setParentValue(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWSecurityLabelComponentElement_ParentValue()
+	 * @model
+	 * @generated
+	 */
+	String getParentValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentElement#getParentValue <em>Parent Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Parent Value</em>' attribute.
+	 * @see #getParentValue()
+	 * @generated
+	 */
+	void setParentValue(String value);
+
+	/**
+	 * Returns the value of the '<em><b>LUW Security Label Component</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponent}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponent#getElements <em>Elements</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>LUW Security Label Component</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>LUW Security Label Component</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWSecurityLabelComponentElement_LUWSecurityLabelComponent()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponent#getElements
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponent" opposite="elements"
+	 * @generated
+	 */
+	EList getLUWSecurityLabelComponent();
+
+} // LUWSecurityLabelComponentElement
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWSecurityLabelComponentType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWSecurityLabelComponentType.java
new file mode 100644
index 0000000..f165fdb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWSecurityLabelComponentType.java
@@ -0,0 +1,178 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Security Label Component Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWSecurityLabelComponentType()
+ * @model
+ * @generated
+ */
+public final class LUWSecurityLabelComponentType extends AbstractEnumerator {
+	/**
+	 * The '<em><b>SET</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>SET</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #SET_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int SET = 0;
+
+	/**
+	 * The '<em><b>ARRAY</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>ARRAY</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #ARRAY_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ARRAY = 1;
+
+	/**
+	 * The '<em><b>TREE</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>TREE</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #TREE_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int TREE = 2;
+
+	/**
+	 * The '<em><b>SET</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #SET
+	 * @generated
+	 * @ordered
+	 */
+	public static final LUWSecurityLabelComponentType SET_LITERAL = new LUWSecurityLabelComponentType(SET, "SET", "SET"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>ARRAY</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #ARRAY
+	 * @generated
+	 * @ordered
+	 */
+	public static final LUWSecurityLabelComponentType ARRAY_LITERAL = new LUWSecurityLabelComponentType(ARRAY, "ARRAY", "ARRAY"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>TREE</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #TREE
+	 * @generated
+	 * @ordered
+	 */
+	public static final LUWSecurityLabelComponentType TREE_LITERAL = new LUWSecurityLabelComponentType(TREE, "TREE", "TREE"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * An array of all the '<em><b>Security Label Component Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final LUWSecurityLabelComponentType[] VALUES_ARRAY =
+		new LUWSecurityLabelComponentType[] {
+			SET_LITERAL,
+			ARRAY_LITERAL,
+			TREE_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Security Label Component Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Security Label Component Type</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LUWSecurityLabelComponentType get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			LUWSecurityLabelComponentType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Security Label Component Type</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LUWSecurityLabelComponentType getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			LUWSecurityLabelComponentType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Security Label Component Type</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LUWSecurityLabelComponentType get(int value) {
+		switch (value) {
+			case SET: return SET_LITERAL;
+			case ARRAY: return ARRAY_LITERAL;
+			case TREE: return TREE_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private LUWSecurityLabelComponentType(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //LUWSecurityLabelComponentType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWSecurityLabelNotAuthorizedWriteAction.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWSecurityLabelNotAuthorizedWriteAction.java
new file mode 100644
index 0000000..c334cec
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWSecurityLabelNotAuthorizedWriteAction.java
@@ -0,0 +1,151 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Security Label Not Authorized Write Action</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWSecurityLabelNotAuthorizedWriteAction()
+ * @model
+ * @generated
+ */
+public final class LUWSecurityLabelNotAuthorizedWriteAction extends AbstractEnumerator {
+	/**
+	 * The '<em><b>OVERRIDE</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>OVERRIDE</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #OVERRIDE_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int OVERRIDE = 0;
+
+	/**
+	 * The '<em><b>RESTRICT</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>RESTRICT</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #RESTRICT_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int RESTRICT = 1;
+
+	/**
+	 * The '<em><b>OVERRIDE</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #OVERRIDE
+	 * @generated
+	 * @ordered
+	 */
+	public static final LUWSecurityLabelNotAuthorizedWriteAction OVERRIDE_LITERAL = new LUWSecurityLabelNotAuthorizedWriteAction(OVERRIDE, "OVERRIDE", "OVERRIDE"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>RESTRICT</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #RESTRICT
+	 * @generated
+	 * @ordered
+	 */
+	public static final LUWSecurityLabelNotAuthorizedWriteAction RESTRICT_LITERAL = new LUWSecurityLabelNotAuthorizedWriteAction(RESTRICT, "RESTRICT", "RESTRICT"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * An array of all the '<em><b>Security Label Not Authorized Write Action</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final LUWSecurityLabelNotAuthorizedWriteAction[] VALUES_ARRAY =
+		new LUWSecurityLabelNotAuthorizedWriteAction[] {
+			OVERRIDE_LITERAL,
+			RESTRICT_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Security Label Not Authorized Write Action</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Security Label Not Authorized Write Action</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LUWSecurityLabelNotAuthorizedWriteAction get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			LUWSecurityLabelNotAuthorizedWriteAction result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Security Label Not Authorized Write Action</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LUWSecurityLabelNotAuthorizedWriteAction getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			LUWSecurityLabelNotAuthorizedWriteAction result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Security Label Not Authorized Write Action</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LUWSecurityLabelNotAuthorizedWriteAction get(int value) {
+		switch (value) {
+			case OVERRIDE: return OVERRIDE_LITERAL;
+			case RESTRICT: return RESTRICT_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private LUWSecurityLabelNotAuthorizedWriteAction(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //LUWSecurityLabelNotAuthorizedWriteAction
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWSecurityPolicy.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWSecurityPolicy.java
new file mode 100644
index 0000000..1a2ad39
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWSecurityPolicy.java
@@ -0,0 +1,126 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Security Policy</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy#getNotAuthorizedWrite <em>Not Authorized Write</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy#getComponents <em>Components</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy#getLabels <em>Labels</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy#getTable <em>Table</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWSecurityPolicy()
+ * @model
+ * @generated
+ */
+public interface LUWSecurityPolicy extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Not Authorized Write</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelNotAuthorizedWriteAction}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Not Authorized Write</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Not Authorized Write</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelNotAuthorizedWriteAction
+	 * @see #setNotAuthorizedWrite(LUWSecurityLabelNotAuthorizedWriteAction)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWSecurityPolicy_NotAuthorizedWrite()
+	 * @model
+	 * @generated
+	 */
+	LUWSecurityLabelNotAuthorizedWriteAction getNotAuthorizedWrite();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy#getNotAuthorizedWrite <em>Not Authorized Write</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Not Authorized Write</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelNotAuthorizedWriteAction
+	 * @see #getNotAuthorizedWrite()
+	 * @generated
+	 */
+	void setNotAuthorizedWrite(LUWSecurityLabelNotAuthorizedWriteAction value);
+
+	/**
+	 * Returns the value of the '<em><b>Components</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponent}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponent#getLUWSecurityPolicy <em>LUW Security Policy</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Components</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Components</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWSecurityPolicy_Components()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponent#getLUWSecurityPolicy
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponent" opposite="LUWSecurityPolicy"
+	 * @generated
+	 */
+	EList getComponents();
+
+	/**
+	 * Returns the value of the '<em><b>Labels</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabel}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabel#getPolicy <em>Policy</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Labels</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Labels</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWSecurityPolicy_Labels()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabel#getPolicy
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabel" opposite="policy"
+	 * @generated
+	 */
+	EList getLabels();
+
+	/**
+	 * Returns the value of the '<em><b>Table</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#getSecurityPolicy <em>Security Policy</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Table</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Table</em>' reference.
+	 * @see #setTable(LUWTable)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWSecurityPolicy_Table()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#getSecurityPolicy
+	 * @model opposite="securityPolicy" required="true"
+	 * @generated
+	 */
+	LUWTable getTable();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy#getTable <em>Table</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Table</em>' reference.
+	 * @see #getTable()
+	 * @generated
+	 */
+	void setTable(LUWTable value);
+
+} // LUWSecurityPolicy
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWServer.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWServer.java
new file mode 100644
index 0000000..7feeb2e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWServer.java
@@ -0,0 +1,225 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Server</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getServerType <em>Server Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getServerVersion <em>Server Version</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getUserMappings <em>User Mappings</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getWrapper <em>Wrapper</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getNicknames <em>Nicknames</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getLUWDatabase <em>LUW Database</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getOptions <em>Options</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getRemoteServer <em>Remote Server</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWServer()
+ * @model abstract="true"
+ * @generated
+ */
+public interface LUWServer extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Server Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Server Type</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Server Type</em>' attribute.
+	 * @see #setServerType(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWServer_ServerType()
+	 * @model
+	 * @generated
+	 */
+	String getServerType();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getServerType <em>Server Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Server Type</em>' attribute.
+	 * @see #getServerType()
+	 * @generated
+	 */
+	void setServerType(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Server Version</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Server Version</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Server Version</em>' attribute.
+	 * @see #setServerVersion(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWServer_ServerVersion()
+	 * @model
+	 * @generated
+	 */
+	String getServerVersion();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getServerVersion <em>Server Version</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Server Version</em>' attribute.
+	 * @see #getServerVersion()
+	 * @generated
+	 */
+	void setServerVersion(String value);
+
+	/**
+	 * Returns the value of the '<em><b>User Mappings</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWUserMapping}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWUserMapping#getServer <em>Server</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>User Mappings</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>User Mappings</em>' containment reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWServer_UserMappings()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWUserMapping#getServer
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWUserMapping" opposite="server" containment="true"
+	 * @generated
+	 */
+	EList getUserMappings();
+
+	/**
+	 * Returns the value of the '<em><b>Wrapper</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getServers <em>Servers</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Wrapper</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Wrapper</em>' reference.
+	 * @see #setWrapper(LUWWrapper)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWServer_Wrapper()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getServers
+	 * @model opposite="servers" required="true"
+	 * @generated
+	 */
+	LUWWrapper getWrapper();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getWrapper <em>Wrapper</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Wrapper</em>' reference.
+	 * @see #getWrapper()
+	 * @generated
+	 */
+	void setWrapper(LUWWrapper value);
+
+	/**
+	 * Returns the value of the '<em><b>Nicknames</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNickname}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNickname#getServer <em>Server</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Nicknames</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Nicknames</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWServer_Nicknames()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNickname#getServer
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNickname" opposite="server"
+	 * @generated
+	 */
+	EList getNicknames();
+
+	/**
+	 * Returns the value of the '<em><b>LUW Database</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getServers <em>Servers</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>LUW Database</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>LUW Database</em>' reference.
+	 * @see #setLUWDatabase(LUWDatabase)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWServer_LUWDatabase()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getServers
+	 * @model opposite="servers" required="true"
+	 * @generated
+	 */
+	LUWDatabase getLUWDatabase();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getLUWDatabase <em>LUW Database</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>LUW Database</em>' reference.
+	 * @see #getLUWDatabase()
+	 * @generated
+	 */
+	void setLUWDatabase(LUWDatabase value);
+
+	/**
+	 * Returns the value of the '<em><b>Options</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Options</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Options</em>' containment reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWServer_Options()
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption" containment="true"
+	 * @generated
+	 */
+	EList getOptions();
+
+	/**
+	 * Returns the value of the '<em><b>Remote Server</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.RemoteServer#getLUWServer <em>LUW Server</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Remote Server</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Remote Server</em>' reference.
+	 * @see #setRemoteServer(RemoteServer)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWServer_RemoteServer()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.RemoteServer#getLUWServer
+	 * @model opposite="LUWServer" required="true"
+	 * @generated
+	 */
+	RemoteServer getRemoteServer();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getRemoteServer <em>Remote Server</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Remote Server</em>' reference.
+	 * @see #getRemoteServer()
+	 * @generated
+	 */
+	void setRemoteServer(RemoteServer value);
+
+} // LUWServer
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWStorageGroup.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWStorageGroup.java
new file mode 100644
index 0000000..0ab2bb9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWStorageGroup.java
@@ -0,0 +1,202 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Storage Group</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#getStoragePaths <em>Storage Paths</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#getOverhead <em>Overhead</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#getDeviceReadRate <em>Device Read Rate</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#getDataTag <em>Data Tag</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#isDefault <em>Default</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#getDatabase <em>Database</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#getTableSpaces <em>Table Spaces</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWStorageGroup()
+ * @model
+ * @generated
+ */
+public interface LUWStorageGroup extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Storage Paths</b></em>' attribute list.
+	 * The list contents are of type {@link java.lang.String}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Storage Paths</em>' attribute list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Storage Paths</em>' attribute list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWStorageGroup_StoragePaths()
+	 * @model required="true"
+	 * @generated
+	 */
+	EList getStoragePaths();
+
+	/**
+	 * Returns the value of the '<em><b>Overhead</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Overhead</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Overhead</em>' attribute.
+	 * @see #setOverhead(double)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWStorageGroup_Overhead()
+	 * @model
+	 * @generated
+	 */
+	double getOverhead();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#getOverhead <em>Overhead</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Overhead</em>' attribute.
+	 * @see #getOverhead()
+	 * @generated
+	 */
+	void setOverhead(double value);
+
+	/**
+	 * Returns the value of the '<em><b>Device Read Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Device Read Rate</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Device Read Rate</em>' attribute.
+	 * @see #setDeviceReadRate(double)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWStorageGroup_DeviceReadRate()
+	 * @model
+	 * @generated
+	 */
+	double getDeviceReadRate();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#getDeviceReadRate <em>Device Read Rate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Device Read Rate</em>' attribute.
+	 * @see #getDeviceReadRate()
+	 * @generated
+	 */
+	void setDeviceReadRate(double value);
+
+	/**
+	 * Returns the value of the '<em><b>Data Tag</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Data Tag</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Data Tag</em>' attribute.
+	 * @see #setDataTag(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWStorageGroup_DataTag()
+	 * @model
+	 * @generated
+	 */
+	String getDataTag();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#getDataTag <em>Data Tag</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Data Tag</em>' attribute.
+	 * @see #getDataTag()
+	 * @generated
+	 */
+	void setDataTag(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Default</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Default</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Default</em>' attribute.
+	 * @see #setDefault(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWStorageGroup_Default()
+	 * @model
+	 * @generated
+	 */
+	boolean isDefault();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#isDefault <em>Default</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Default</em>' attribute.
+	 * @see #isDefault()
+	 * @generated
+	 */
+	void setDefault(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Database</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getStorageGroups <em>Storage Groups</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Database</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Database</em>' reference.
+	 * @see #setDatabase(LUWDatabase)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWStorageGroup_Database()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getStorageGroups
+	 * @model opposite="storageGroups" required="true"
+	 * @generated
+	 */
+	LUWDatabase getDatabase();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#getDatabase <em>Database</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Database</em>' reference.
+	 * @see #getDatabase()
+	 * @generated
+	 */
+	void setDatabase(LUWDatabase value);
+
+	/**
+	 * Returns the value of the '<em><b>Table Spaces</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getStorageGroup <em>Storage Group</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Table Spaces</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Table Spaces</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWStorageGroup_TableSpaces()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getStorageGroup
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace" opposite="storageGroup"
+	 * @generated
+	 */
+	EList getTableSpaces();
+
+} // LUWStorageGroup
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWStorageTable.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWStorageTable.java
new file mode 100644
index 0000000..a8e30a7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWStorageTable.java
@@ -0,0 +1,315 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWStorageTable.java,v 1.11 2008/01/29 00:04:56 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import java.util.List;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Storage Table</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#isValueCompression <em>Value Compression</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#isRowCompression <em>Row Compression</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#isRowCompressionEmpty <em>Row Compression Empty</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getCompressionMode <em>Compression Mode</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getPartitionKey <em>Partition Key</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getIndexDataTableSpace <em>Index Data Table Space</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getLOBDataTableSpace <em>LOB Data Table Space</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getRegularDataTableSpace <em>Regular Data Table Space</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getDataPartitions <em>Data Partitions</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getDataPartitionKey <em>Data Partition Key</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWStorageTable()
+ * @model interface="true" abstract="true"
+ * @generated
+ */
+public interface LUWStorageTable extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Value Compression</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Value Compression</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Value Compression</em>' attribute.
+	 * @see #setValueCompression(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWStorageTable_ValueCompression()
+	 * @model
+	 * @generated
+	 */
+	boolean isValueCompression();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#isValueCompression <em>Value Compression</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Value Compression</em>' attribute.
+	 * @see #isValueCompression()
+	 * @generated
+	 */
+	void setValueCompression(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Row Compression</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Row Compression</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Row Compression</em>' attribute.
+	 * @see #setRowCompression(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWStorageTable_RowCompression()
+	 * @model
+	 * @generated
+	 */
+	boolean isRowCompression();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#isRowCompression <em>Row Compression</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Row Compression</em>' attribute.
+	 * @see #isRowCompression()
+	 * @generated
+	 */
+	void setRowCompression(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Row Compression Empty</b></em>' attribute.
+	 * The default value is <code>"True"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Row Compression Empty</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Row Compression Empty</em>' attribute.
+	 * @see #setRowCompressionEmpty(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWStorageTable_RowCompressionEmpty()
+	 * @model default="True"
+	 * @generated
+	 */
+	boolean isRowCompressionEmpty();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#isRowCompressionEmpty <em>Row Compression Empty</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Row Compression Empty</em>' attribute.
+	 * @see #isRowCompressionEmpty()
+	 * @generated
+	 */
+	void setRowCompressionEmpty(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Compression Mode</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTableCompressionMode}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Compression Mode</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Compression Mode</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTableCompressionMode
+	 * @see #setCompressionMode(LUWStorageTableCompressionMode)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWStorageTable_CompressionMode()
+	 * @model
+	 * @generated
+	 */
+	LUWStorageTableCompressionMode getCompressionMode();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getCompressionMode <em>Compression Mode</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Compression Mode</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTableCompressionMode
+	 * @see #getCompressionMode()
+	 * @generated
+	 */
+	void setCompressionMode(LUWStorageTableCompressionMode value);
+
+	/**
+	 * Returns the value of the '<em><b>Partition Key</b></em>' containment reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey#getTable <em>Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Partition Key</em>' containment reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Partition Key</em>' containment reference.
+	 * @see #setPartitionKey(LUWPartitionKey)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWStorageTable_PartitionKey()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey#getTable
+	 * @model opposite="table" containment="true"
+	 * @generated
+	 */
+	LUWPartitionKey getPartitionKey();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getPartitionKey <em>Partition Key</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Partition Key</em>' containment reference.
+	 * @see #getPartitionKey()
+	 * @generated
+	 */
+	void setPartitionKey(LUWPartitionKey value);
+
+	/**
+	 * Returns the value of the '<em><b>Index Data Table Space</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getIndexDataTables <em>Index Data Tables</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Index Data Table Space</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Index Data Table Space</em>' reference.
+	 * @see #setIndexDataTableSpace(LUWTableSpace)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWStorageTable_IndexDataTableSpace()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getIndexDataTables
+	 * @model opposite="indexDataTables"
+	 * @generated
+	 */
+	LUWTableSpace getIndexDataTableSpace();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getIndexDataTableSpace <em>Index Data Table Space</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Index Data Table Space</em>' reference.
+	 * @see #getIndexDataTableSpace()
+	 * @generated
+	 */
+	void setIndexDataTableSpace(LUWTableSpace value);
+
+	/**
+	 * Returns the value of the '<em><b>LOB Data Table Space</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getLOBDataTables <em>LOB Data Tables</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>LOB Data Table Space</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>LOB Data Table Space</em>' reference.
+	 * @see #setLOBDataTableSpace(LUWTableSpace)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWStorageTable_LOBDataTableSpace()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getLOBDataTables
+	 * @model opposite="LOBDataTables"
+	 * @generated
+	 */
+	LUWTableSpace getLOBDataTableSpace();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getLOBDataTableSpace <em>LOB Data Table Space</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>LOB Data Table Space</em>' reference.
+	 * @see #getLOBDataTableSpace()
+	 * @generated
+	 */
+	void setLOBDataTableSpace(LUWTableSpace value);
+
+	/**
+	 * Returns the value of the '<em><b>Regular Data Table Space</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getRegularDataTables <em>Regular Data Tables</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Regular Data Table Space</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Regular Data Table Space</em>' reference.
+	 * @see #setRegularDataTableSpace(LUWTableSpace)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWStorageTable_RegularDataTableSpace()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getRegularDataTables
+	 * @model opposite="regularDataTables" required="true"
+	 * @generated
+	 */
+	LUWTableSpace getRegularDataTableSpace();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getRegularDataTableSpace <em>Regular Data Table Space</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Regular Data Table Space</em>' reference.
+	 * @see #getRegularDataTableSpace()
+	 * @generated
+	 */
+	void setRegularDataTableSpace(LUWTableSpace value);
+
+	/**
+	 * Returns the value of the '<em><b>Data Partitions</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getTable <em>Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Data Partitions</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Data Partitions</em>' containment reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWStorageTable_DataPartitions()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getTable
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition" opposite="table" containment="true"
+	 * @generated
+	 */
+	EList getDataPartitions();
+
+	/**
+	 * Returns the value of the '<em><b>Data Partition Key</b></em>' containment reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartitionKey#getTable <em>Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Data Partition Key</em>' containment reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Data Partition Key</em>' containment reference.
+	 * @see #setDataPartitionKey(LUWDataPartitionKey)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWStorageTable_DataPartitionKey()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartitionKey#getTable
+	 * @model opposite="table" containment="true"
+	 * @generated
+	 */
+	LUWDataPartitionKey getDataPartitionKey();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getDataPartitionKey <em>Data Partition Key</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Data Partition Key</em>' containment reference.
+	 * @see #getDataPartitionKey()
+	 * @generated
+	 */
+	void setDataPartitionKey(LUWDataPartitionKey value);
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model kind="operation" dataType="org.eclipse.datatools.modelbase.sql.schema.List" many="false"
+	 * @generated
+	 */
+	List getTableSpaces();
+
+} // LUWStorageTable
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWStorageTableCompressionMode.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWStorageTableCompressionMode.java
new file mode 100644
index 0000000..0cfc1f1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWStorageTableCompressionMode.java
@@ -0,0 +1,178 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Storage Table Compression Mode</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWStorageTableCompressionMode()
+ * @model
+ * @generated
+ */
+public final class LUWStorageTableCompressionMode extends AbstractEnumerator {
+	/**
+	 * The '<em><b>NO SELECTION</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>NO SELECTION</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #NO_SELECTION_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int NO_SELECTION = 0;
+
+	/**
+	 * The '<em><b>ADAPTIVE</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>ADAPTIVE</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #ADAPTIVE_LITERAL
+	 * @model literal="Adaptive"
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ADAPTIVE = 1;
+
+	/**
+	 * The '<em><b>STATIC</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>STATIC</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #STATIC_LITERAL
+	 * @model literal="Static"
+	 * @generated
+	 * @ordered
+	 */
+	public static final int STATIC = 2;
+
+	/**
+	 * The '<em><b>NO SELECTION</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #NO_SELECTION
+	 * @generated
+	 * @ordered
+	 */
+	public static final LUWStorageTableCompressionMode NO_SELECTION_LITERAL = new LUWStorageTableCompressionMode(NO_SELECTION, "NO_SELECTION", "NO_SELECTION"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>ADAPTIVE</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #ADAPTIVE
+	 * @generated
+	 * @ordered
+	 */
+	public static final LUWStorageTableCompressionMode ADAPTIVE_LITERAL = new LUWStorageTableCompressionMode(ADAPTIVE, "ADAPTIVE", "Adaptive"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>STATIC</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #STATIC
+	 * @generated
+	 * @ordered
+	 */
+	public static final LUWStorageTableCompressionMode STATIC_LITERAL = new LUWStorageTableCompressionMode(STATIC, "STATIC", "Static"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * An array of all the '<em><b>Storage Table Compression Mode</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final LUWStorageTableCompressionMode[] VALUES_ARRAY =
+		new LUWStorageTableCompressionMode[] {
+			NO_SELECTION_LITERAL,
+			ADAPTIVE_LITERAL,
+			STATIC_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Storage Table Compression Mode</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Storage Table Compression Mode</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LUWStorageTableCompressionMode get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			LUWStorageTableCompressionMode result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Storage Table Compression Mode</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LUWStorageTableCompressionMode getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			LUWStorageTableCompressionMode result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Storage Table Compression Mode</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LUWStorageTableCompressionMode get(int value) {
+		switch (value) {
+			case NO_SELECTION: return NO_SELECTION_LITERAL;
+			case ADAPTIVE: return ADAPTIVE_LITERAL;
+			case STATIC: return STATIC_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private LUWStorageTableCompressionMode(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //LUWStorageTableCompressionMode
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWTable.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWTable.java
new file mode 100644
index 0000000..856d115
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWTable.java
@@ -0,0 +1,280 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Table;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Table</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * DB2 Universal Database SQL Reference Version 8.1 (Vol.1 and 2)
+ * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+ * 
+ * Tables
+ * 
+ * Tables are logical structures maintained by the database manager. Tables are made up of columns and rows. The rows are not necessarily ordered within a table (order is determined by the application program). At the intersection of every column and row is a specific data item called a value. A column is a set of values of the same type or one of its subtypes. A row is a sequence of values arranged so that the nth value is a value of the nth column of the table.
+ * 
+ * A base table is created with the CREATE TABLE statement and is used to hold persistent user data. A result table is a set of rows that the database manager selects or generates from one or more base tables to satisfy a query.
+ * 
+ * A summary table is a table defined by a query that is also used to determine the data in the table. Summary tables can be used to improve the performance of queries. If the database manager determines that a portion of a query can be resolved using a summary table, the database manager can rewrite the query to use the summary table. This decision is based on database configuration settings, such as the CURRENT REFRESH AGE and the CURRENT QUERY OPTIMIZATION special registers.
+ * 
+ * A table can define the data type of each column separately, or base the types on the attributes of a user-defined structured type. This is called a typed table. A user-defined structured type may be part of a type hierarchy. A subtype inherits attributes from its supertype. Similarly, a typed table can be part of a table hierarchy. A subtable inherits columns from its supertable. Note that the term subtype applies to a user-defined structured type and all user-defined structured types that are below it in the type hierarchy. A proper subtype of a structured type T is a structured type below T in the type hierarchy. Similarly, the term subtable applies to a typed table and all typed tables that are below it in the table hierarchy. A proper subtable of a table T is a table below T in the table hierarchy.
+ * 
+ * A declared temporary table is created with a DECLARE GLOBAL TEMPORARY TABLE statement and is used to hold temporary data on behalf of a single application. This table is dropped implicitly when the application disconnects from the database.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#getPCTFree <em>PCT Free</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#isRestrictOnDrop <em>Restrict On Drop</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#getPartitionMode <em>Partition Mode</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#isAppendMode <em>Append Mode</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#getLogMode <em>Log Mode</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#isLockSizeRow <em>Lock Size Row</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#isVolatile <em>Volatile</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#getOptions <em>Options</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#getSecurityPolicy <em>Security Policy</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTable()
+ * @model
+ * @generated
+ */
+public interface LUWTable extends DB2Table, LUWStorageTable {
+	/**
+	 * Returns the value of the '<em><b>PCT Free</b></em>' attribute.
+	 * The default value is <code>"-1"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>PCT Free</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>PCT Free</em>' attribute.
+	 * @see #setPCTFree(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTable_PCTFree()
+	 * @model default="-1"
+	 * @generated
+	 */
+	int getPCTFree();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#getPCTFree <em>PCT Free</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>PCT Free</em>' attribute.
+	 * @see #getPCTFree()
+	 * @generated
+	 */
+	void setPCTFree(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Restrict On Drop</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Restrict On Drop</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Restrict On Drop</em>' attribute.
+	 * @see #setRestrictOnDrop(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTable_RestrictOnDrop()
+	 * @model
+	 * @generated
+	 */
+	boolean isRestrictOnDrop();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#isRestrictOnDrop <em>Restrict On Drop</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Restrict On Drop</em>' attribute.
+	 * @see #isRestrictOnDrop()
+	 * @generated
+	 */
+	void setRestrictOnDrop(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Partition Mode</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * Possible values: "USING HASHING", :REPLICATED", "" (w/o quotes)
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Partition Mode</em>' attribute.
+	 * @see #setPartitionMode(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTable_PartitionMode()
+	 * @model
+	 * @generated
+	 */
+	String getPartitionMode();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#getPartitionMode <em>Partition Mode</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Partition Mode</em>' attribute.
+	 * @see #getPartitionMode()
+	 * @generated
+	 */
+	void setPartitionMode(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Append Mode</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Append Mode</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Append Mode</em>' attribute.
+	 * @see #setAppendMode(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTable_AppendMode()
+	 * @model
+	 * @generated
+	 */
+	boolean isAppendMode();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#isAppendMode <em>Append Mode</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Append Mode</em>' attribute.
+	 * @see #isAppendMode()
+	 * @generated
+	 */
+	void setAppendMode(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Log Mode</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * Possible values: "NOT LOGGED INITIALLY", "LOGGED INITIALLY", or "LOGGED INITIALLY WITH EMPTY TABLE" (w/o quotes)
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Log Mode</em>' attribute.
+	 * @see #setLogMode(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTable_LogMode()
+	 * @model
+	 * @generated
+	 */
+	String getLogMode();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#getLogMode <em>Log Mode</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Log Mode</em>' attribute.
+	 * @see #getLogMode()
+	 * @generated
+	 */
+	void setLogMode(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Lock Size Row</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * Row lock if True else Table lock
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Lock Size Row</em>' attribute.
+	 * @see #setLockSizeRow(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTable_LockSizeRow()
+	 * @model
+	 * @generated
+	 */
+	boolean isLockSizeRow();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#isLockSizeRow <em>Lock Size Row</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Lock Size Row</em>' attribute.
+	 * @see #isLockSizeRow()
+	 * @generated
+	 */
+	void setLockSizeRow(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Volatile</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Volatile</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Volatile</em>' attribute.
+	 * @see #setVolatile(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTable_Volatile()
+	 * @model
+	 * @generated
+	 */
+	boolean isVolatile();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#isVolatile <em>Volatile</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Volatile</em>' attribute.
+	 * @see #isVolatile()
+	 * @generated
+	 */
+	void setVolatile(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Security Policy</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy#getTable <em>Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Security Policy</em>' containment reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Security Policy</em>' reference.
+	 * @see #setSecurityPolicy(LUWSecurityPolicy)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTable_SecurityPolicy()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy#getTable
+	 * @model opposite="table" required="true"
+	 * @generated
+	 */
+	LUWSecurityPolicy getSecurityPolicy();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable#getSecurityPolicy <em>Security Policy</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Security Policy</em>' reference.
+	 * @see #getSecurityPolicy()
+	 * @generated
+	 */
+	void setSecurityPolicy(LUWSecurityPolicy value);
+
+	/**
+	 * Returns the value of the '<em><b>Options</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Options</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Options</em>' containment reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTable_Options()
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption" containment="true"
+	 * @generated
+	 */
+	EList getOptions();
+
+} // LUWTable
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWTableSpace.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWTableSpace.java
new file mode 100644
index 0000000..820171a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWTableSpace.java
@@ -0,0 +1,1219 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.UnitType;
+import java.util.List;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Table Space</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * DB2 Universal Database SQL Reference Version 8.1 (Vol.1 and 2)
+ * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+ * 
+ * Table space design
+ * 
+ * A table space is a storage structure containing tables, indexes, large objects, and long data. Table spaces reside in database partition groups. They allow you to assign the location of database and table data directly onto containers. (A container can be a directory name, a device name, or a file name.) This can provide improved performance and more flexible configuration. 
+ * 
+ * Since table spaces reside in database partition groups, the table space selected to hold a table defines how the data for that table is distributed across the database partitions in a database partition group. A single table space can span several containers. It is possible for multiple containers (from one or more table spaces) to be created on the same physical disk (or drive). For improved performance, each container should use a different disk. Figure 14 illustrates the relationship between tables and table spaces within a database, and the containers associated with that database.
+ * 
+ * Creating table spaces in database partition groups
+ * 
+ * By placing a table space in a multiple-partition database partition group, all of the tables within the table space are divided or partitioned across each partition in the database partition group. The table space is created into a database partition group. Once in a database partition group, the table space must remain there; it cannot be changed to another database partition group. The CREATE TABLESPACE statement is used to associate a table space with a database partition group.
+ * 
+ * 
+ * IBMR DB2 Universal Database - SQL Reference Volume 1 - Version 8
+ * 
+ * Table spaces and other storage structures
+ * 
+ * Storage structures contain database objects. The basic storage structure is the table space; it contains tables, indexes, large objects, and data defined with a LONG data type.
+ * 
+ * There are two types of table spaces:
+ *  - Database managed space (DMS): a table space that is managed by the database manager.
+ *  - System managed space (SMS): a table space that is managed by the operating system.
+ * 
+ * All table spaces consist of containers. A container describes where objects are stored. A subdirectory in a file system is an example of a container. When data is read from table space containers, it is placed in an area of memory called a buffer pool. A buffer pool is associated with a specific table space, thereby allowing control over which data will share the same memory areas for data buffering.
+ * 
+ * Creation:
+ * 
+ * EXTENTSIZE number-of-pages
+ * Specifies the number of PAGESIZE pages that will be written to a container before skipping to the next container. The extent size value can also be specified as an integer value followed by K (for kilobytes), M (for megabytes), or G (for gigabytes). If specified in this way, the floor of the number of bytes divided by the pagesize is used to determine the number of pages value for extent size. The database manager cycles repeatedly through the containers as data is stored. The default value is provided by the DFT_EXTENT_SZ configuration parameter.
+ * 
+ * PREFETCHSIZE number-of-pages
+ * Specifies the number of PAGESIZE pages that will be read from the tablespace when data prefetching is being performed. The prefetch size value can also be specified as an integer value followed by K (for kilobytes), M (for megabytes), or G (for gigabytes). If specified in this way, the floor of the number of bytes divided by the pagesize is used to determine the number of pages value for prefetch size. Prefetching reads in data needed by a query prior to it being referenced by the query, so that the query need not wait for I/O to be performed. The default value is provided by the DFT_PREFETCH_SZ
+ * configuration parameter.
+ * 
+ * BUFFERPOOL bufferpool-name
+ * The name of the buffer pool used for tables in this tablespace. The buffer pool must exist (SQLSTATE 42704). If not specified, the default buffer pool (IBMDEFAULTBP) is used. The page size of the bufferpool must match the page size specified (or defaulted) for the tablespace (SQLSTATE 428CB). The database partition group of the tablespace must be defined for the bufferpool (SQLSTATE 42735).
+ * 
+ * OVERHEAD number-of-milliseconds
+ * Any numeric literal (integer, decimal, or floating point) that specifies the I/O controller overhead and disk seek and latency time, in milliseconds. The number should be an average for all containers that belong to the tablespace, if not the same for all containers. This value is used to determine the cost of I/O during query optimization.
+ * 
+ * TRANSFERRATE number-of-milliseconds
+ * Any numeric literal (integer, decimal, or floating point) that specifies the time to read one page into memory, in milliseconds. The number should be an average for all containers that belong to the tablespace, if not the same for all containers. This value is used to determine the cost of I/O during query optimization.
+ * 
+ * DROPPED TABLE RECOVERY
+ * Dropped tables in the specified tablespace may be recovered using the RECOVER TABLE ON option of the ROLLFORWARD command. This clause can only be specified for a REGULAR tablespace (SQLSTATE 42613).
+ * 
+ * 
+ * 
+ * 
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getTemporaryStorageTables <em>Temporary Storage Tables</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getTablespaceType <em>Tablespace Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getManagementType <em>Management Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getExtentSize <em>Extent Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getPreFetchSize <em>Pre Fetch Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getOverhead <em>Overhead</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getTransferRate <em>Transfer Rate</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#isRecoverDroppedTableOn <em>Recover Dropped Table On</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getPageSize <em>Page Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getSize <em>Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#isAutoResize <em>Auto Resize</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getInitialSize <em>Initial Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getIncreaseSize <em>Increase Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getMaximumSize <em>Maximum Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getInitialSizeUnit <em>Initial Size Unit</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getMaximumSizeUnit <em>Maximum Size Unit</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getIncreaseSizeUnit <em>Increase Size Unit</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getIncreasePercent <em>Increase Percent</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getFileSystemCaching <em>File System Caching</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getAverageSeekTime <em>Average Seek Time</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getRotationSpeed <em>Rotation Speed</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getTransfer <em>Transfer</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getSystemType <em>System Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getAverageTableSize <em>Average Table Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getExternalContainerCount <em>External Container Count</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#isInheritOverhead <em>Inherit Overhead</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#isInheritTransferate <em>Inherit Transferate</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#isRebalance <em>Rebalance</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getDataTag <em>Data Tag</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#isSuspendRebalance <em>Suspend Rebalance</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#isResumeRebalance <em>Resume Rebalance</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getGroup <em>Group</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getContainers <em>Containers</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getBufferPool <em>Buffer Pool</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getIndexDataTables <em>Index Data Tables</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getLOBDataTables <em>LOB Data Tables</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getRegularDataTables <em>Regular Data Tables</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getDatabase <em>Database</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getLOBDataPartition <em>LOB Data Partition</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getRegularDataPartition <em>Regular Data Partition</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getIndexes <em>Indexes</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getIndexDataPartition <em>Index Data Partition</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getStorageGroup <em>Storage Group</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace()
+ * @model
+ * @generated
+ */
+public interface LUWTableSpace extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Temporary Storage Tables</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryStorageTable}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryStorageTable#getUserTemporaryTableSpace <em>User Temporary Table Space</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Temporary Storage Tables</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Temporary Storage Tables</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_TemporaryStorageTables()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryStorageTable#getUserTemporaryTableSpace
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryStorageTable" opposite="userTemporaryTableSpace"
+	 * @generated
+	 */
+	EList getTemporaryStorageTables();
+
+	/**
+	 * Returns the value of the '<em><b>Tablespace Type</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.TableSpaceType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Tablespace Type</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Tablespace Type</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.TableSpaceType
+	 * @see #setTablespaceType(TableSpaceType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_TablespaceType()
+	 * @model
+	 * @generated
+	 */
+	TableSpaceType getTablespaceType();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getTablespaceType <em>Tablespace Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Tablespace Type</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.TableSpaceType
+	 * @see #getTablespaceType()
+	 * @generated
+	 */
+	void setTablespaceType(TableSpaceType value);
+
+	/**
+	 * Returns the value of the '<em><b>Management Type</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.ManagementType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Management Type</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Management Type</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.ManagementType
+	 * @see #setManagementType(ManagementType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_ManagementType()
+	 * @model
+	 * @generated
+	 */
+	ManagementType getManagementType();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getManagementType <em>Management Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Management Type</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.ManagementType
+	 * @see #getManagementType()
+	 * @generated
+	 */
+	void setManagementType(ManagementType value);
+
+	/**
+	 * Returns the value of the '<em><b>Extent Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Extent Size</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Extent Size</em>' attribute.
+	 * @see #setExtentSize(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_ExtentSize()
+	 * @model
+	 * @generated
+	 */
+	int getExtentSize();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getExtentSize <em>Extent Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Extent Size</em>' attribute.
+	 * @see #getExtentSize()
+	 * @generated
+	 */
+	void setExtentSize(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Pre Fetch Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Pre Fetch Size</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Pre Fetch Size</em>' attribute.
+	 * @see #setPreFetchSize(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_PreFetchSize()
+	 * @model
+	 * @generated
+	 */
+	int getPreFetchSize();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getPreFetchSize <em>Pre Fetch Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Pre Fetch Size</em>' attribute.
+	 * @see #getPreFetchSize()
+	 * @generated
+	 */
+	void setPreFetchSize(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Overhead</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Overhead</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Overhead</em>' attribute.
+	 * @see #setOverhead(double)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_Overhead()
+	 * @model
+	 * @generated
+	 */
+	double getOverhead();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getOverhead <em>Overhead</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Overhead</em>' attribute.
+	 * @see #getOverhead()
+	 * @generated
+	 */
+	void setOverhead(double value);
+
+	/**
+	 * Returns the value of the '<em><b>Transfer Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Transfer Rate</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Transfer Rate</em>' attribute.
+	 * @see #setTransferRate(double)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_TransferRate()
+	 * @model
+	 * @generated
+	 */
+	double getTransferRate();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getTransferRate <em>Transfer Rate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Transfer Rate</em>' attribute.
+	 * @see #getTransferRate()
+	 * @generated
+	 */
+	void setTransferRate(double value);
+
+	/**
+	 * Returns the value of the '<em><b>Recover Dropped Table On</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Recover Dropped Table On</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Recover Dropped Table On</em>' attribute.
+	 * @see #setRecoverDroppedTableOn(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_RecoverDroppedTableOn()
+	 * @model
+	 * @generated
+	 */
+	boolean isRecoverDroppedTableOn();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#isRecoverDroppedTableOn <em>Recover Dropped Table On</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Recover Dropped Table On</em>' attribute.
+	 * @see #isRecoverDroppedTableOn()
+	 * @generated
+	 */
+	void setRecoverDroppedTableOn(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Page Size</b></em>' attribute.
+	 * The default value is <code>"FOUR_K"</code>.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.PageSizeType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Page Size</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Page Size</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.PageSizeType
+	 * @see #setPageSize(PageSizeType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_PageSize()
+	 * @model default="FOUR_K"
+	 * @generated
+	 */
+	PageSizeType getPageSize();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getPageSize <em>Page Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Page Size</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.PageSizeType
+	 * @see #getPageSize()
+	 * @generated
+	 */
+	void setPageSize(PageSizeType value);
+
+	/**
+	 * Returns the value of the '<em><b>Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Size</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Size</em>' attribute.
+	 * @see #setSize(long)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_Size()
+	 * @model
+	 * @generated
+	 */
+	long getSize();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getSize <em>Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Size</em>' attribute.
+	 * @see #getSize()
+	 * @generated
+	 */
+	void setSize(long value);
+
+	/**
+	 * Returns the value of the '<em><b>Auto Resize</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Auto Resize</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Auto Resize</em>' attribute.
+	 * @see #setAutoResize(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_AutoResize()
+	 * @model
+	 * @generated
+	 */
+	boolean isAutoResize();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#isAutoResize <em>Auto Resize</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Auto Resize</em>' attribute.
+	 * @see #isAutoResize()
+	 * @generated
+	 */
+	void setAutoResize(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Initial Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Initial Size</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Initial Size</em>' attribute.
+	 * @see #setInitialSize(long)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_InitialSize()
+	 * @model
+	 * @generated
+	 */
+	long getInitialSize();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getInitialSize <em>Initial Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Initial Size</em>' attribute.
+	 * @see #getInitialSize()
+	 * @generated
+	 */
+	void setInitialSize(long value);
+
+	/**
+	 * Returns the value of the '<em><b>Increase Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Increase Size</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Increase Size</em>' attribute.
+	 * @see #setIncreaseSize(long)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_IncreaseSize()
+	 * @model
+	 * @generated
+	 */
+	long getIncreaseSize();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getIncreaseSize <em>Increase Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Increase Size</em>' attribute.
+	 * @see #getIncreaseSize()
+	 * @generated
+	 */
+	void setIncreaseSize(long value);
+
+	/**
+	 * Returns the value of the '<em><b>Maximum Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Maximum Size</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Maximum Size</em>' attribute.
+	 * @see #setMaximumSize(long)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_MaximumSize()
+	 * @model
+	 * @generated
+	 */
+	long getMaximumSize();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getMaximumSize <em>Maximum Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Maximum Size</em>' attribute.
+	 * @see #getMaximumSize()
+	 * @generated
+	 */
+	void setMaximumSize(long value);
+
+	/**
+	 * Returns the value of the '<em><b>Initial Size Unit</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.model.UnitType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Initial Size Unit</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Initial Size Unit</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.UnitType
+	 * @see #setInitialSizeUnit(UnitType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_InitialSizeUnit()
+	 * @model
+	 * @generated
+	 */
+	UnitType getInitialSizeUnit();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getInitialSizeUnit <em>Initial Size Unit</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Initial Size Unit</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.UnitType
+	 * @see #getInitialSizeUnit()
+	 * @generated
+	 */
+	void setInitialSizeUnit(UnitType value);
+
+	/**
+	 * Returns the value of the '<em><b>Maximum Size Unit</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.model.UnitType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Maximum Size Unit</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Maximum Size Unit</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.UnitType
+	 * @see #setMaximumSizeUnit(UnitType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_MaximumSizeUnit()
+	 * @model
+	 * @generated
+	 */
+	UnitType getMaximumSizeUnit();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getMaximumSizeUnit <em>Maximum Size Unit</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Maximum Size Unit</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.UnitType
+	 * @see #getMaximumSizeUnit()
+	 * @generated
+	 */
+	void setMaximumSizeUnit(UnitType value);
+
+	/**
+	 * Returns the value of the '<em><b>Increase Size Unit</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.model.UnitType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Increase Size Unit</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Increase Size Unit</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.UnitType
+	 * @see #setIncreaseSizeUnit(UnitType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_IncreaseSizeUnit()
+	 * @model
+	 * @generated
+	 */
+	UnitType getIncreaseSizeUnit();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getIncreaseSizeUnit <em>Increase Size Unit</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Increase Size Unit</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.UnitType
+	 * @see #getIncreaseSizeUnit()
+	 * @generated
+	 */
+	void setIncreaseSizeUnit(UnitType value);
+
+	/**
+	 * Returns the value of the '<em><b>Increase Percent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Increase Percent</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Increase Percent</em>' attribute.
+	 * @see #setIncreasePercent(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_IncreasePercent()
+	 * @model
+	 * @generated
+	 */
+	int getIncreasePercent();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getIncreasePercent <em>Increase Percent</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Increase Percent</em>' attribute.
+	 * @see #getIncreasePercent()
+	 * @generated
+	 */
+	void setIncreasePercent(int value);
+
+	/**
+	 * Returns the value of the '<em><b>File System Caching</b></em>' attribute.
+	 * The default value is <code>"NONE"</code>.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.FileSystemCachingType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>File System Caching</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>File System Caching</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.FileSystemCachingType
+	 * @see #setFileSystemCaching(FileSystemCachingType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_FileSystemCaching()
+	 * @model default="NONE"
+	 * @generated
+	 */
+	FileSystemCachingType getFileSystemCaching();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getFileSystemCaching <em>File System Caching</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>File System Caching</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.FileSystemCachingType
+	 * @see #getFileSystemCaching()
+	 * @generated
+	 */
+	void setFileSystemCaching(FileSystemCachingType value);
+
+	/**
+	 * Returns the value of the '<em><b>Average Seek Time</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Average Seek Time</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Average Seek Time</em>' attribute.
+	 * @see #setAverageSeekTime(double)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_AverageSeekTime()
+	 * @model
+	 * @generated
+	 */
+	double getAverageSeekTime();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getAverageSeekTime <em>Average Seek Time</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Average Seek Time</em>' attribute.
+	 * @see #getAverageSeekTime()
+	 * @generated
+	 */
+	void setAverageSeekTime(double value);
+
+	/**
+	 * Returns the value of the '<em><b>Rotation Speed</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Rotation Speed</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Rotation Speed</em>' attribute.
+	 * @see #setRotationSpeed(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_RotationSpeed()
+	 * @model
+	 * @generated
+	 */
+	int getRotationSpeed();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getRotationSpeed <em>Rotation Speed</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Rotation Speed</em>' attribute.
+	 * @see #getRotationSpeed()
+	 * @generated
+	 */
+	void setRotationSpeed(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Transfer</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Transfer</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Transfer</em>' attribute.
+	 * @see #setTransfer(double)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_Transfer()
+	 * @model
+	 * @generated
+	 */
+	double getTransfer();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getTransfer <em>Transfer</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Transfer</em>' attribute.
+	 * @see #getTransfer()
+	 * @generated
+	 */
+	void setTransfer(double value);
+
+	/**
+	 * Returns the value of the '<em><b>System Type</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.SystemType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>System Type</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>System Type</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.SystemType
+	 * @see #setSystemType(SystemType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_SystemType()
+	 * @model
+	 * @generated
+	 */
+	SystemType getSystemType();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getSystemType <em>System Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>System Type</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.SystemType
+	 * @see #getSystemType()
+	 * @generated
+	 */
+	void setSystemType(SystemType value);
+
+	/**
+	 * Returns the value of the '<em><b>Average Table Size</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.AverageTableSizeType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Average Table Size</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Average Table Size</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.AverageTableSizeType
+	 * @see #setAverageTableSize(AverageTableSizeType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_AverageTableSize()
+	 * @model
+	 * @generated
+	 */
+	AverageTableSizeType getAverageTableSize();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getAverageTableSize <em>Average Table Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Average Table Size</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.AverageTableSizeType
+	 * @see #getAverageTableSize()
+	 * @generated
+	 */
+	void setAverageTableSize(AverageTableSizeType value);
+
+	/**
+	 * Returns the value of the '<em><b>External Container Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>External Container Count</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>External Container Count</em>' attribute.
+	 * @see #setExternalContainerCount(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_ExternalContainerCount()
+	 * @model
+	 * @generated
+	 */
+	int getExternalContainerCount();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getExternalContainerCount <em>External Container Count</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>External Container Count</em>' attribute.
+	 * @see #getExternalContainerCount()
+	 * @generated
+	 */
+	void setExternalContainerCount(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Inherit Overhead</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Inherit Overhead</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Inherit Overhead</em>' attribute.
+	 * @see #setInheritOverhead(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_InheritOverhead()
+	 * @model
+	 * @generated
+	 */
+	boolean isInheritOverhead();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#isInheritOverhead <em>Inherit Overhead</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Inherit Overhead</em>' attribute.
+	 * @see #isInheritOverhead()
+	 * @generated
+	 */
+	void setInheritOverhead(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Inherit Transferate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Inherit Transferate</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Inherit Transferate</em>' attribute.
+	 * @see #setInheritTransferate(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_InheritTransferate()
+	 * @model
+	 * @generated
+	 */
+	boolean isInheritTransferate();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#isInheritTransferate <em>Inherit Transferate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Inherit Transferate</em>' attribute.
+	 * @see #isInheritTransferate()
+	 * @generated
+	 */
+	void setInheritTransferate(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Rebalance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Rebalance</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Rebalance</em>' attribute.
+	 * @see #setRebalance(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_Rebalance()
+	 * @model
+	 * @generated
+	 */
+	boolean isRebalance();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#isRebalance <em>Rebalance</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Rebalance</em>' attribute.
+	 * @see #isRebalance()
+	 * @generated
+	 */
+	void setRebalance(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Data Tag</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Data Tag</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Data Tag</em>' attribute.
+	 * @see #setDataTag(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_DataTag()
+	 * @model
+	 * @generated
+	 */
+	String getDataTag();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getDataTag <em>Data Tag</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Data Tag</em>' attribute.
+	 * @see #getDataTag()
+	 * @generated
+	 */
+	void setDataTag(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Suspend Rebalance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Suspend Rebalance</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Suspend Rebalance</em>' attribute.
+	 * @see #setSuspendRebalance(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_SuspendRebalance()
+	 * @model
+	 * @generated
+	 */
+	boolean isSuspendRebalance();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#isSuspendRebalance <em>Suspend Rebalance</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Suspend Rebalance</em>' attribute.
+	 * @see #isSuspendRebalance()
+	 * @generated
+	 */
+	void setSuspendRebalance(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Resume Rebalance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Resume Rebalance</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Resume Rebalance</em>' attribute.
+	 * @see #setResumeRebalance(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_ResumeRebalance()
+	 * @model
+	 * @generated
+	 */
+	boolean isResumeRebalance();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#isResumeRebalance <em>Resume Rebalance</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Resume Rebalance</em>' attribute.
+	 * @see #isResumeRebalance()
+	 * @generated
+	 */
+	void setResumeRebalance(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Group</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup#getTableSpaces <em>Table Spaces</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Group</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Group</em>' reference.
+	 * @see #setGroup(LUWPartitionGroup)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_Group()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup#getTableSpaces
+	 * @model opposite="tableSpaces" required="true"
+	 * @generated
+	 */
+	LUWPartitionGroup getGroup();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getGroup <em>Group</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Group</em>' reference.
+	 * @see #getGroup()
+	 * @generated
+	 */
+	void setGroup(LUWPartitionGroup value);
+
+	/**
+	 * Returns the value of the '<em><b>Containers</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer#getTableSpace <em>Table Space</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Containers</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Containers</em>' containment reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_Containers()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer#getTableSpace
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer" opposite="tableSpace" containment="true" required="true"
+	 * @generated
+	 */
+	EList getContainers();
+
+	/**
+	 * Returns the value of the '<em><b>Buffer Pool</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getTableSpaces <em>Table Spaces</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Buffer Pool</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Buffer Pool</em>' reference.
+	 * @see #setBufferPool(LUWBufferPool)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_BufferPool()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool#getTableSpaces
+	 * @model opposite="tableSpaces" required="true"
+	 * @generated
+	 */
+	LUWBufferPool getBufferPool();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getBufferPool <em>Buffer Pool</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Buffer Pool</em>' reference.
+	 * @see #getBufferPool()
+	 * @generated
+	 */
+	void setBufferPool(LUWBufferPool value);
+
+	/**
+	 * Returns the value of the '<em><b>Regular Data Tables</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getRegularDataTableSpace <em>Regular Data Table Space</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Regular Data Tables</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Regular Data Tables</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_RegularDataTables()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getRegularDataTableSpace
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable" opposite="regularDataTableSpace"
+	 * @generated
+	 */
+	EList getRegularDataTables();
+
+	/**
+	 * Returns the value of the '<em><b>Database</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getTablespaces <em>Tablespaces</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Database</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Database</em>' reference.
+	 * @see #setDatabase(LUWDatabase)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_Database()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getTablespaces
+	 * @model opposite="tablespaces" required="true"
+	 * @generated
+	 */
+	LUWDatabase getDatabase();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getDatabase <em>Database</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Database</em>' reference.
+	 * @see #getDatabase()
+	 * @generated
+	 */
+	void setDatabase(LUWDatabase value);
+
+	/**
+	 * Returns the value of the '<em><b>LOB Data Partition</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getLOBDataTableSpace <em>LOB Data Table Space</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>LOB Data Partition</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>LOB Data Partition</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_LOBDataPartition()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getLOBDataTableSpace
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition" opposite="LOBDataTableSpace"
+	 * @generated
+	 */
+	EList getLOBDataPartition();
+
+	/**
+	 * Returns the value of the '<em><b>Regular Data Partition</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getRegularDataTableSpace <em>Regular Data Table Space</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Regular Data Partition</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Regular Data Partition</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_RegularDataPartition()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getRegularDataTableSpace
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition" opposite="regularDataTableSpace"
+	 * @generated
+	 */
+	EList getRegularDataPartition();
+
+	/**
+	 * Returns the value of the '<em><b>Indexes</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getTablespace <em>Tablespace</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Indexes</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Indexes</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_Indexes()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex#getTablespace
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex" opposite="tablespace"
+	 * @generated
+	 */
+	EList getIndexes();
+
+	/**
+	 * Returns the value of the '<em><b>Index Data Partition</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getIndexDataTableSpace <em>Index Data Table Space</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Index Data Partition</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Index Data Partition</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_IndexDataPartition()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition#getIndexDataTableSpace
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition" opposite="indexDataTableSpace"
+	 * @generated
+	 */
+	EList getIndexDataPartition();
+
+	/**
+	 * Returns the value of the '<em><b>Storage Group</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#getTableSpaces <em>Table Spaces</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Storage Group</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Storage Group</em>' reference.
+	 * @see #setStorageGroup(LUWStorageGroup)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_StorageGroup()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup#getTableSpaces
+	 * @model opposite="tableSpaces"
+	 * @generated
+	 */
+	LUWStorageGroup getStorageGroup();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getStorageGroup <em>Storage Group</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Storage Group</em>' reference.
+	 * @see #getStorageGroup()
+	 * @generated
+	 */
+	void setStorageGroup(LUWStorageGroup value);
+
+	/**
+	 * Returns the value of the '<em><b>Index Data Tables</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getIndexDataTableSpace <em>Index Data Table Space</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Index Data Tables</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Index Data Tables</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_IndexDataTables()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getIndexDataTableSpace
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable" opposite="indexDataTableSpace"
+	 * @generated
+	 */
+	EList getIndexDataTables();
+
+	/**
+	 * Returns the value of the '<em><b>LOB Data Tables</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getLOBDataTableSpace <em>LOB Data Table Space</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>LOB Data Tables</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>LOB Data Tables</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTableSpace_LOBDataTables()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable#getLOBDataTableSpace
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable" opposite="LOBDataTableSpace"
+	 * @generated
+	 */
+	EList getLOBDataTables();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model kind="operation" dataType="org.eclipse.datatools.modelbase.sql.schema.List" many="false"
+	 * @generated
+	 */
+	List getTables();
+
+} // LUWTableSpace
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWTemporaryStorageTable.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWTemporaryStorageTable.java
new file mode 100644
index 0000000..953d01d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWTemporaryStorageTable.java
@@ -0,0 +1,89 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Temporary Storage Table</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Introduced to support the created global temporary table needs in DB2 LUW.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryStorageTable#getPartitionKey <em>Partition Key</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryStorageTable#getUserTemporaryTableSpace <em>User Temporary Table Space</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTemporaryStorageTable()
+ * @model
+ * @generated
+ */
+public interface LUWTemporaryStorageTable extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Partition Key</b></em>' containment reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey#getTemporaryStorageTable <em>Temporary Storage Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Partition Key</em>' containment reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Partition Key</em>' containment reference.
+	 * @see #setPartitionKey(LUWPartitionKey)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTemporaryStorageTable_PartitionKey()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey#getTemporaryStorageTable
+	 * @model opposite="temporaryStorageTable" containment="true"
+	 * @generated
+	 */
+	LUWPartitionKey getPartitionKey();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryStorageTable#getPartitionKey <em>Partition Key</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Partition Key</em>' containment reference.
+	 * @see #getPartitionKey()
+	 * @generated
+	 */
+	void setPartitionKey(LUWPartitionKey value);
+
+	/**
+	 * Returns the value of the '<em><b>User Temporary Table Space</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getTemporaryStorageTables <em>Temporary Storage Tables</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>User Temporary Table Space</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>User Temporary Table Space</em>' reference.
+	 * @see #setUserTemporaryTableSpace(LUWTableSpace)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTemporaryStorageTable_UserTemporaryTableSpace()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace#getTemporaryStorageTables
+	 * @model opposite="temporaryStorageTables"
+	 * @generated
+	 */
+	LUWTableSpace getUserTemporaryTableSpace();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryStorageTable#getUserTemporaryTableSpace <em>User Temporary Table Space</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>User Temporary Table Space</em>' reference.
+	 * @see #getUserTemporaryTableSpace()
+	 * @generated
+	 */
+	void setUserTemporaryTableSpace(LUWTableSpace value);
+
+} // LUWTemporaryStorageTable
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWTemporaryTable.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWTemporaryTable.java
new file mode 100644
index 0000000..f1e3376
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWTemporaryTable.java
@@ -0,0 +1,89 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.TemporaryTable;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Temporary Table</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Represents the Created Global Temporary Table introduced in DB2 LUW v9.7
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryTable#getTable <em>Table</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryTable#getLogOption <em>Log Option</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTemporaryTable()
+ * @model
+ * @generated
+ */
+public interface LUWTemporaryTable extends TemporaryTable, LUWTemporaryStorageTable {
+	/**
+	 * Returns the value of the '<em><b>Table</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Table</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Table</em>' reference.
+	 * @see #setTable(Table)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTemporaryTable_Table()
+	 * @model
+	 * @generated
+	 */
+	Table getTable();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryTable#getTable <em>Table</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Table</em>' reference.
+	 * @see #getTable()
+	 * @generated
+	 */
+	void setTable(Table value);
+
+	/**
+	 * Returns the value of the '<em><b>Log Option</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryTableLoggingOption}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Log Option</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Log Option</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryTableLoggingOption
+	 * @see #setLogOption(LUWTemporaryTableLoggingOption)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTemporaryTable_LogOption()
+	 * @model
+	 * @generated
+	 */
+	LUWTemporaryTableLoggingOption getLogOption();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryTable#getLogOption <em>Log Option</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Log Option</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryTableLoggingOption
+	 * @see #getLogOption()
+	 * @generated
+	 */
+	void setLogOption(LUWTemporaryTableLoggingOption value);
+
+} // LUWTemporaryTable
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWTemporaryTableLoggingOption.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWTemporaryTableLoggingOption.java
new file mode 100644
index 0000000..2e95ee4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWTemporaryTableLoggingOption.java
@@ -0,0 +1,184 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Temporary Table Logging Option</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * There are three options:
+ * NOT_LOGGED_DELETE_ROWS - Not logged On Rollback Delete Rows
+ * NOT_LOGGED_PRESERVE_ROWS - Not Logged On Rollback PreserveRows
+ * LOGGED - Logged
+ * <!-- end-model-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTemporaryTableLoggingOption()
+ * @model
+ * @generated
+ */
+public final class LUWTemporaryTableLoggingOption extends AbstractEnumerator {
+	/**
+	 * The '<em><b>NOT LOGGED DELETE ROWS</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>NOT LOGGED DELETE ROWS</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #NOT_LOGGED_DELETE_ROWS_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int NOT_LOGGED_DELETE_ROWS = 0;
+
+	/**
+	 * The '<em><b>NOT LOGGED PRESERVE ROWS</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>NOT LOGGED PRESERVE ROWS</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #NOT_LOGGED_PRESERVE_ROWS_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int NOT_LOGGED_PRESERVE_ROWS = 1;
+
+	/**
+	 * The '<em><b>LOGGED</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>LOGGED</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #LOGGED_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int LOGGED = 2;
+
+	/**
+	 * The '<em><b>NOT LOGGED DELETE ROWS</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #NOT_LOGGED_DELETE_ROWS
+	 * @generated
+	 * @ordered
+	 */
+	public static final LUWTemporaryTableLoggingOption NOT_LOGGED_DELETE_ROWS_LITERAL = new LUWTemporaryTableLoggingOption(NOT_LOGGED_DELETE_ROWS, "NOT_LOGGED_DELETE_ROWS", "NOT_LOGGED_DELETE_ROWS"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>NOT LOGGED PRESERVE ROWS</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #NOT_LOGGED_PRESERVE_ROWS
+	 * @generated
+	 * @ordered
+	 */
+	public static final LUWTemporaryTableLoggingOption NOT_LOGGED_PRESERVE_ROWS_LITERAL = new LUWTemporaryTableLoggingOption(NOT_LOGGED_PRESERVE_ROWS, "NOT_LOGGED_PRESERVE_ROWS", "NOT_LOGGED_PRESERVE_ROWS"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>LOGGED</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #LOGGED
+	 * @generated
+	 * @ordered
+	 */
+	public static final LUWTemporaryTableLoggingOption LOGGED_LITERAL = new LUWTemporaryTableLoggingOption(LOGGED, "LOGGED", "LOGGED"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * An array of all the '<em><b>Temporary Table Logging Option</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final LUWTemporaryTableLoggingOption[] VALUES_ARRAY =
+		new LUWTemporaryTableLoggingOption[] {
+			NOT_LOGGED_DELETE_ROWS_LITERAL,
+			NOT_LOGGED_PRESERVE_ROWS_LITERAL,
+			LOGGED_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Temporary Table Logging Option</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Temporary Table Logging Option</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LUWTemporaryTableLoggingOption get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			LUWTemporaryTableLoggingOption result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Temporary Table Logging Option</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LUWTemporaryTableLoggingOption getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			LUWTemporaryTableLoggingOption result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Temporary Table Logging Option</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LUWTemporaryTableLoggingOption get(int value) {
+		switch (value) {
+			case NOT_LOGGED_DELETE_ROWS: return NOT_LOGGED_DELETE_ROWS_LITERAL;
+			case NOT_LOGGED_PRESERVE_ROWS: return NOT_LOGGED_PRESERVE_ROWS_LITERAL;
+			case LOGGED: return LOGGED_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private LUWTemporaryTableLoggingOption(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //LUWTemporaryTableLoggingOption
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWTypeMapping.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWTypeMapping.java
new file mode 100644
index 0000000..78ffd4f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWTypeMapping.java
@@ -0,0 +1,193 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import java.util.Date;
+
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Type Mapping</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping#getServerType <em>Server Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping#getServerVesion <em>Server Vesion</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping#getServerName <em>Server Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping#getCreationTime <em>Creation Time</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping#getLocalType <em>Local Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping#getRemoteType <em>Remote Type</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTypeMapping()
+ * @model
+ * @generated
+ */
+public interface LUWTypeMapping extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Server Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Server Type</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Server Type</em>' attribute.
+	 * @see #setServerType(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTypeMapping_ServerType()
+	 * @model
+	 * @generated
+	 */
+	String getServerType();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping#getServerType <em>Server Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Server Type</em>' attribute.
+	 * @see #getServerType()
+	 * @generated
+	 */
+	void setServerType(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Server Vesion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Server Vesion</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Server Vesion</em>' attribute.
+	 * @see #setServerVesion(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTypeMapping_ServerVesion()
+	 * @model
+	 * @generated
+	 */
+	String getServerVesion();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping#getServerVesion <em>Server Vesion</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Server Vesion</em>' attribute.
+	 * @see #getServerVesion()
+	 * @generated
+	 */
+	void setServerVesion(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Server Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Server Name</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Server Name</em>' attribute.
+	 * @see #setServerName(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTypeMapping_ServerName()
+	 * @model
+	 * @generated
+	 */
+	String getServerName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping#getServerName <em>Server Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Server Name</em>' attribute.
+	 * @see #getServerName()
+	 * @generated
+	 */
+	void setServerName(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Creation Time</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Creation Time</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Creation Time</em>' attribute.
+	 * @see #setCreationTime(Date)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTypeMapping_CreationTime()
+	 * @model dataType="org.eclipse.datatools.modelbase.sql.schema.Date"
+	 * @generated
+	 */
+	Date getCreationTime();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping#getCreationTime <em>Creation Time</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Creation Time</em>' attribute.
+	 * @see #getCreationTime()
+	 * @generated
+	 */
+	void setCreationTime(Date value);
+
+	/**
+	 * Returns the value of the '<em><b>Local Type</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Local Type</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Local Type</em>' reference.
+	 * @see #setLocalType(PredefinedDataType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTypeMapping_LocalType()
+	 * @model required="true"
+	 * @generated
+	 */
+	PredefinedDataType getLocalType();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping#getLocalType <em>Local Type</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Local Type</em>' reference.
+	 * @see #getLocalType()
+	 * @generated
+	 */
+	void setLocalType(PredefinedDataType value);
+
+	/**
+	 * Returns the value of the '<em><b>Remote Type</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Remote Type</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Remote Type</em>' reference.
+	 * @see #setRemoteType(PredefinedDataType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWTypeMapping_RemoteType()
+	 * @model required="true"
+	 * @generated
+	 */
+	PredefinedDataType getRemoteType();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping#getRemoteType <em>Remote Type</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Remote Type</em>' reference.
+	 * @see #getRemoteType()
+	 * @generated
+	 */
+	void setRemoteType(PredefinedDataType value);
+
+} // LUWTypeMapping
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWUserMapping.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWUserMapping.java
new file mode 100644
index 0000000..dafc79f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWUserMapping.java
@@ -0,0 +1,102 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>User Mapping</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWUserMapping#getLocalAuthId <em>Local Auth Id</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWUserMapping#getServer <em>Server</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWUserMapping#getOptions <em>Options</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWUserMapping()
+ * @model
+ * @generated
+ */
+public interface LUWUserMapping extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Local Auth Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Local Auth Id</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Local Auth Id</em>' attribute.
+	 * @see #setLocalAuthId(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWUserMapping_LocalAuthId()
+	 * @model
+	 * @generated
+	 */
+	String getLocalAuthId();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWUserMapping#getLocalAuthId <em>Local Auth Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Local Auth Id</em>' attribute.
+	 * @see #getLocalAuthId()
+	 * @generated
+	 */
+	void setLocalAuthId(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Server</b></em>' container reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getUserMappings <em>User Mappings</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Server</em>' container reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Server</em>' container reference.
+	 * @see #setServer(LUWServer)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWUserMapping_Server()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getUserMappings
+	 * @model opposite="userMappings" required="true"
+	 * @generated
+	 */
+	LUWServer getServer();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWUserMapping#getServer <em>Server</em>}' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Server</em>' container reference.
+	 * @see #getServer()
+	 * @generated
+	 */
+	void setServer(LUWServer value);
+
+	/**
+	 * Returns the value of the '<em><b>Options</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Options</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Options</em>' containment reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWUserMapping_Options()
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption" containment="true"
+	 * @generated
+	 */
+	EList getOptions();
+
+} // LUWUserMapping
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWView.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWView.java
new file mode 100644
index 0000000..47548f9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWView.java
@@ -0,0 +1,97 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2View;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>View</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * DB2 Universal Database SQL Reference Version 8.1 (Vol.1 and 2)
+ * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+ * 
+ * Views
+ * 
+ * A view provides a different way of looking at the data in one or more tables; it is a named specification of a result table. The specification is a SELECT statement that is run whenever the view is referenced in an SQL statement. A view has columns and rows just like a base table. All views can be used just like base tables for data retrieval. Whether a view can be used in an insert, update, or delete operation depends on its definition. You can use views to control access to sensitive data, because views allow multiple users to see different presentations of the same data.
+ * 
+ * For example, several users may be accessing a table of data about employees. A manager sees data about his or her employees but not employees in another department. A recruitment officer sees the hire dates of all employees, but not their salaries; a financial officer sees the salaries, but not the hire dates. Each of these users works with a view derived from the base table. Each view appears to be a table and has its own name.
+ * 
+ * When the column of a view is directly derived from the column of a base table, that view column inherits any constraints that apply to the base table column. For example, if a view includes a foreign key of its base table, insert and update operations using that view are subject to the same referential constraints as is the base table. Also, if the base table of a view is a parent table, delete and update operations using that view are subject to the same rules as are delete and update operations on the base table.
+ * 
+ * A view can derive the data type of each column from the result table, or base the types on the attributes of a user-defined structured type. This is called a typed view. Similar to a typed table, a typed view can be part of a view hierarchy. A subview inherits columns from its superview. The term subview applies to a typed view and to all typed views that are below it in the view hierarchy. A proper subview of a view V is a view below V in the typed view hierarchy. A view can become inoperative (for example, if the base table is dropped); if this occurs, the view is no longer available for SQL operations.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWView#isFederated <em>Federated</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWView#isOptimizeQuery <em>Optimize Query</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWView()
+ * @model
+ * @generated
+ */
+public interface LUWView extends DB2View {
+	/**
+	 * Returns the value of the '<em><b>Federated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Federated</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Federated</em>' attribute.
+	 * @see #setFederated(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWView_Federated()
+	 * @model derived="true"
+	 * @generated
+	 */
+	boolean isFederated();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWView#isFederated <em>Federated</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Federated</em>' attribute.
+	 * @see #isFederated()
+	 * @generated
+	 */
+	void setFederated(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Optimize Query</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Optimize Query</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Optimize Query</em>' attribute.
+	 * @see #setOptimizeQuery(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWView_OptimizeQuery()
+	 * @model
+	 * @generated
+	 */
+	boolean isOptimizeQuery();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWView#isOptimizeQuery <em>Optimize Query</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Optimize Query</em>' attribute.
+	 * @see #isOptimizeQuery()
+	 * @generated
+	 */
+	void setOptimizeQuery(boolean value);
+
+} // LUWView
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWWrapper.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWWrapper.java
new file mode 100644
index 0000000..1d2413f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/LUWWrapper.java
@@ -0,0 +1,253 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Wrapper</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getVersion <em>Version</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getLibrary <em>Library</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#isFenced <em>Fenced</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getWrapperType <em>Wrapper Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getDataSource <em>Data Source</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getDiscoveredLibraries <em>Discovered Libraries</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getServers <em>Servers</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getLUWDatabase <em>LUW Database</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getOptions <em>Options</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWWrapper()
+ * @model abstract="true"
+ * @generated
+ */
+public interface LUWWrapper extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Version</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Version</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Version</em>' attribute.
+	 * @see #setVersion(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWWrapper_Version()
+	 * @model
+	 * @generated
+	 */
+	String getVersion();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getVersion <em>Version</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Version</em>' attribute.
+	 * @see #getVersion()
+	 * @generated
+	 */
+	void setVersion(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Library</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Library</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Library</em>' attribute.
+	 * @see #setLibrary(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWWrapper_Library()
+	 * @model
+	 * @generated
+	 */
+	String getLibrary();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getLibrary <em>Library</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Library</em>' attribute.
+	 * @see #getLibrary()
+	 * @generated
+	 */
+	void setLibrary(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Fenced</b></em>' attribute.
+	 * The default value is <code>"true"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Fenced</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Fenced</em>' attribute.
+	 * @see #setFenced(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWWrapper_Fenced()
+	 * @model default="true"
+	 * @generated
+	 */
+	boolean isFenced();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#isFenced <em>Fenced</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Fenced</em>' attribute.
+	 * @see #isFenced()
+	 * @generated
+	 */
+	void setFenced(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Wrapper Type</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.WrapperType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Wrapper Type</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Wrapper Type</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.WrapperType
+	 * @see #setWrapperType(WrapperType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWWrapper_WrapperType()
+	 * @model
+	 * @generated
+	 */
+	WrapperType getWrapperType();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getWrapperType <em>Wrapper Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Wrapper Type</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.WrapperType
+	 * @see #getWrapperType()
+	 * @generated
+	 */
+	void setWrapperType(WrapperType value);
+
+	/**
+	 * Returns the value of the '<em><b>Data Source</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFederatedDataSource}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Data Source</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Data Source</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFederatedDataSource
+	 * @see #setDataSource(LUWFederatedDataSource)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWWrapper_DataSource()
+	 * @model
+	 * @generated
+	 */
+	LUWFederatedDataSource getDataSource();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getDataSource <em>Data Source</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Data Source</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFederatedDataSource
+	 * @see #getDataSource()
+	 * @generated
+	 */
+	void setDataSource(LUWFederatedDataSource value);
+
+	/**
+	 * Returns the value of the '<em><b>Discovered Libraries</b></em>' attribute list.
+	 * The list contents are of type {@link java.lang.String}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Discovered Libraries</em>' attribute list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Discovered Libraries</em>' attribute list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWWrapper_DiscoveredLibraries()
+	 * @model transient="true"
+	 * @generated
+	 */
+	EList getDiscoveredLibraries();
+
+	/**
+	 * Returns the value of the '<em><b>Servers</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getWrapper <em>Wrapper</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Servers</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Servers</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWWrapper_Servers()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getWrapper
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer" opposite="wrapper"
+	 * @generated
+	 */
+	EList getServers();
+
+	/**
+	 * Returns the value of the '<em><b>LUW Database</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getWrappers <em>Wrappers</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>LUW Database</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>LUW Database</em>' reference.
+	 * @see #setLUWDatabase(LUWDatabase)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWWrapper_LUWDatabase()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase#getWrappers
+	 * @model opposite="wrappers" required="true"
+	 * @generated
+	 */
+	LUWDatabase getLUWDatabase();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper#getLUWDatabase <em>LUW Database</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>LUW Database</em>' reference.
+	 * @see #getLUWDatabase()
+	 * @generated
+	 */
+	void setLUWDatabase(LUWDatabase value);
+
+	/**
+	 * Returns the value of the '<em><b>Options</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Options</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Options</em>' containment reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getLUWWrapper_Options()
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption" containment="true"
+	 * @generated
+	 */
+	EList getOptions();
+
+} // LUWWrapper
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/MaintenanceType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/MaintenanceType.java
new file mode 100644
index 0000000..36307a5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/MaintenanceType.java
@@ -0,0 +1,151 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: MaintenanceType.java,v 1.7 2008/02/05 02:01:23 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Maintenance Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getMaintenanceType()
+ * @model
+ * @generated
+ */
+public final class MaintenanceType extends AbstractEnumerator {
+	/**
+	 * The '<em><b>SYSTEM</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #SYSTEM_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int SYSTEM = 0;
+
+	/**
+	 * The '<em><b>USER</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #USER_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int USER = 1;
+
+	/**
+	 * The '<em><b>SYSTEM</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>SYSTEM</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #SYSTEM
+	 * @generated
+	 * @ordered
+	 */
+	public static final MaintenanceType SYSTEM_LITERAL = new MaintenanceType(SYSTEM, "SYSTEM", "SYSTEM"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>USER</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>USER</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #USER
+	 * @generated
+	 * @ordered
+	 */
+	public static final MaintenanceType USER_LITERAL = new MaintenanceType(USER, "USER", "USER"); //$NON-NLS-1$
+
+	/**
+	 * An array of all the '<em><b>Maintenance Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final MaintenanceType[] VALUES_ARRAY =
+		new MaintenanceType[] {
+			SYSTEM_LITERAL,
+			USER_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Maintenance Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Maintenance Type</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static MaintenanceType get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			MaintenanceType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Maintenance Type</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static MaintenanceType getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			MaintenanceType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Maintenance Type</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static MaintenanceType get(int value) {
+		switch (value) {
+			case SYSTEM: return SYSTEM_LITERAL;
+			case USER: return USER_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private MaintenanceType(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //MaintenanceType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/ManagementType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/ManagementType.java
new file mode 100644
index 0000000..d8b3506
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/ManagementType.java
@@ -0,0 +1,184 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: ManagementType.java,v 1.9 2008/02/05 02:01:24 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Management Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * DB2 Universal Database SQL Reference Version 8.1 (Vol.1 and 2)
+ * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+ * 
+ * 
+ * <!-- end-model-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getManagementType()
+ * @model
+ * @generated
+ */
+public final class ManagementType extends AbstractEnumerator {
+	/**
+	 * The '<em><b>SYSTEM MANAGED</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #SYSTEM_MANAGED_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int SYSTEM_MANAGED = 0;
+
+	/**
+	 * The '<em><b>DATABASE MANAGED</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #DATABASE_MANAGED_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int DATABASE_MANAGED = 1;
+
+	/**
+	 * The '<em><b>AUTOMATIC STORAGE</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #AUTOMATIC_STORAGE_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int AUTOMATIC_STORAGE = 2;
+
+	/**
+	 * The '<em><b>SYSTEM MANAGED</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>SYSTEM MANAGED</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #SYSTEM_MANAGED
+	 * @generated
+	 * @ordered
+	 */
+	public static final ManagementType SYSTEM_MANAGED_LITERAL = new ManagementType(SYSTEM_MANAGED, "SYSTEM_MANAGED", "SYSTEM_MANAGED"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>DATABASE MANAGED</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>DATABASE MANAGED</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #DATABASE_MANAGED
+	 * @generated
+	 * @ordered
+	 */
+	public static final ManagementType DATABASE_MANAGED_LITERAL = new ManagementType(DATABASE_MANAGED, "DATABASE_MANAGED", "DATABASE_MANAGED"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>AUTOMATIC STORAGE</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>AUTOMATIC STORAGE</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #AUTOMATIC_STORAGE
+	 * @generated
+	 * @ordered
+	 */
+	public static final ManagementType AUTOMATIC_STORAGE_LITERAL = new ManagementType(AUTOMATIC_STORAGE, "AUTOMATIC_STORAGE", "AUTOMATIC_STORAGE"); //$NON-NLS-1$
+
+	/**
+	 * An array of all the '<em><b>Management Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final ManagementType[] VALUES_ARRAY =
+		new ManagementType[] {
+			SYSTEM_MANAGED_LITERAL,
+			DATABASE_MANAGED_LITERAL,
+			AUTOMATIC_STORAGE_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Management Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Management Type</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static ManagementType get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			ManagementType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Management Type</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static ManagementType getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			ManagementType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Management Type</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static ManagementType get(int value) {
+		switch (value) {
+			case SYSTEM_MANAGED: return SYSTEM_MANAGED_LITERAL;
+			case DATABASE_MANAGED: return DATABASE_MANAGED_LITERAL;
+			case AUTOMATIC_STORAGE: return AUTOMATIC_STORAGE_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private ManagementType(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //ManagementType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/MemberStateType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/MemberStateType.java
new file mode 100644
index 0000000..96b0d9d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/MemberStateType.java
@@ -0,0 +1,361 @@
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Member State Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getMemberStateType()
+ * @model
+ * @generated
+ */
+public final class MemberStateType extends AbstractEnumerator {
+	/**
+	 * The '<em><b>STARTED</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>STARTED</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #STARTED_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int STARTED = 0;
+
+	/**
+	 * The '<em><b>STOPPED</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>STOPPED</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #STOPPED_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int STOPPED = 1;
+
+	/**
+	 * The '<em><b>RESTARTING</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>RESTARTING</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #RESTARTING_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int RESTARTING = 2;
+
+	/**
+	 * The '<em><b>WAITING FOR FAILBACK</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>WAITING FOR FAILBACK</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #WAITING_FOR_FAILBACK_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int WAITING_FOR_FAILBACK = 3;
+
+	/**
+	 * The '<em><b>ERROR</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>ERROR</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #ERROR_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ERROR = 4;
+
+	/**
+	 * The '<em><b>UNKNOWN</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>UNKNOWN</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #UNKNOWN_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int UNKNOWN = 5;
+
+	/**
+	 * The '<em><b>BECOMING PRIMARY</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>BECOMING PRIMARY</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #BECOMING_PRIMARY_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int BECOMING_PRIMARY = 6;
+
+	/**
+	 * The '<em><b>PRIMARY</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>PRIMARY</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #PRIMARY_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int PRIMARY = 7;
+
+	/**
+	 * The '<em><b>CATCHUP</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>CATCHUP</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #CATCHUP_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int CATCHUP = 8;
+
+	/**
+	 * The '<em><b>PEER</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>PEER</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #PEER_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int PEER = 9;
+
+	/**
+	 * The '<em><b>STARTED</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #STARTED
+	 * @generated
+	 * @ordered
+	 */
+	public static final MemberStateType STARTED_LITERAL = new MemberStateType(STARTED, "STARTED", "STARTED"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>STOPPED</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #STOPPED
+	 * @generated
+	 * @ordered
+	 */
+	public static final MemberStateType STOPPED_LITERAL = new MemberStateType(STOPPED, "STOPPED", "STOPPED"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>RESTARTING</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #RESTARTING
+	 * @generated
+	 * @ordered
+	 */
+	public static final MemberStateType RESTARTING_LITERAL = new MemberStateType(RESTARTING, "RESTARTING", "RESTARTING"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>WAITING FOR FAILBACK</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #WAITING_FOR_FAILBACK
+	 * @generated
+	 * @ordered
+	 */
+	public static final MemberStateType WAITING_FOR_FAILBACK_LITERAL = new MemberStateType(WAITING_FOR_FAILBACK, "WAITING_FOR_FAILBACK", "WAITING_FOR_FAILBACK"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>ERROR</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #ERROR
+	 * @generated
+	 * @ordered
+	 */
+	public static final MemberStateType ERROR_LITERAL = new MemberStateType(ERROR, "ERROR", "ERROR"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>UNKNOWN</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #UNKNOWN
+	 * @generated
+	 * @ordered
+	 */
+	public static final MemberStateType UNKNOWN_LITERAL = new MemberStateType(UNKNOWN, "UNKNOWN", "UNKNOWN"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>BECOMING PRIMARY</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #BECOMING_PRIMARY
+	 * @generated
+	 * @ordered
+	 */
+	public static final MemberStateType BECOMING_PRIMARY_LITERAL = new MemberStateType(BECOMING_PRIMARY, "BECOMING_PRIMARY", "BECOMING_PRIMARY"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>PRIMARY</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #PRIMARY
+	 * @generated
+	 * @ordered
+	 */
+	public static final MemberStateType PRIMARY_LITERAL = new MemberStateType(PRIMARY, "PRIMARY", "PRIMARY"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>CATCHUP</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #CATCHUP
+	 * @generated
+	 * @ordered
+	 */
+	public static final MemberStateType CATCHUP_LITERAL = new MemberStateType(CATCHUP, "CATCHUP", "CATCHUP"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>PEER</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #PEER
+	 * @generated
+	 * @ordered
+	 */
+	public static final MemberStateType PEER_LITERAL = new MemberStateType(PEER, "PEER", "PEER"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * An array of all the '<em><b>Member State Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final MemberStateType[] VALUES_ARRAY =
+		new MemberStateType[] {
+			STARTED_LITERAL,
+			STOPPED_LITERAL,
+			RESTARTING_LITERAL,
+			WAITING_FOR_FAILBACK_LITERAL,
+			ERROR_LITERAL,
+			UNKNOWN_LITERAL,
+			BECOMING_PRIMARY_LITERAL,
+			PRIMARY_LITERAL,
+			CATCHUP_LITERAL,
+			PEER_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Member State Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Member State Type</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static MemberStateType get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			MemberStateType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Member State Type</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static MemberStateType getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			MemberStateType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Member State Type</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static MemberStateType get(int value) {
+		switch (value) {
+			case STARTED: return STARTED_LITERAL;
+			case STOPPED: return STOPPED_LITERAL;
+			case RESTARTING: return RESTARTING_LITERAL;
+			case WAITING_FOR_FAILBACK: return WAITING_FOR_FAILBACK_LITERAL;
+			case ERROR: return ERROR_LITERAL;
+			case UNKNOWN: return UNKNOWN_LITERAL;
+			case BECOMING_PRIMARY: return BECOMING_PRIMARY_LITERAL;
+			case PRIMARY: return PRIMARY_LITERAL;
+			case CATCHUP: return CATCHUP_LITERAL;
+			case PEER: return PEER_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private MemberStateType(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //MemberStateType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/PLSQLPackage.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/PLSQLPackage.java
new file mode 100644
index 0000000..3c13840
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/PLSQLPackage.java
@@ -0,0 +1,56 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: PLSQLPackage.java,v 1.2 2009/03/06 22:38:09 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>PLSQL Package</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.PLSQLPackage#getPackageBody <em>Package Body</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getPLSQLPackage()
+ * @model
+ * @generated
+ */
+public interface PLSQLPackage extends LUWModule, DB2Routine {
+	/**
+	 * Returns the value of the '<em><b>Package Body</b></em>' containment reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.PLSQLPackageBody#getPackage <em>Package</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Package Body</em>' containment reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Package Body</em>' containment reference.
+	 * @see #setPackageBody(PLSQLPackageBody)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getPLSQLPackage_PackageBody()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.PLSQLPackageBody#getPackage
+	 * @model opposite="package" containment="true"
+	 * @generated
+	 */
+	PLSQLPackageBody getPackageBody();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.PLSQLPackage#getPackageBody <em>Package Body</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Package Body</em>' containment reference.
+	 * @see #getPackageBody()
+	 * @generated
+	 */
+	void setPackageBody(PLSQLPackageBody value);
+
+} // PLSQLPackage
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/PLSQLPackageBody.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/PLSQLPackageBody.java
new file mode 100644
index 0000000..88d7431
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/PLSQLPackageBody.java
@@ -0,0 +1,56 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: PLSQLPackageBody.java,v 1.1 2009/02/25 19:05:46 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.routines.Source;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>PLSQL Package Body</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.PLSQLPackageBody#getPackage <em>Package</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getPLSQLPackageBody()
+ * @model
+ * @generated
+ */
+public interface PLSQLPackageBody extends Source {
+	/**
+	 * Returns the value of the '<em><b>Package</b></em>' container reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.PLSQLPackage#getPackageBody <em>Package Body</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Package</em>' container reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Package</em>' container reference.
+	 * @see #setPackage(PLSQLPackage)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getPLSQLPackageBody_Package()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.PLSQLPackage#getPackageBody
+	 * @model opposite="packageBody" required="true"
+	 * @generated
+	 */
+	PLSQLPackage getPackage();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.PLSQLPackageBody#getPackage <em>Package</em>}' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Package</em>' container reference.
+	 * @see #getPackage()
+	 * @generated
+	 */
+	void setPackage(PLSQLPackage value);
+
+} // PLSQLPackageBody
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/PageSizeType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/PageSizeType.java
new file mode 100644
index 0000000..53f0395
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/PageSizeType.java
@@ -0,0 +1,321 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: PageSizeType.java,v 1.8 2008/02/05 02:01:23 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Page Size Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * DB2 Universal Database SQL Reference Version 8.1 (Vol.1 and 2)
+ * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+ * 
+ * PAGESIZE integer [K]
+ * 
+ * Defines the size of pages used for the bufferpool. The valid values for integer without the suffix K are 4 096, 8 192, 16 384 or 32 768. The valid values for integer with the suffix K are 4, 8, 16 or 32. An error occurs if the page size is not one of these values (SQLSTATE 428DE). The default is 4 096 byte (4K) pages. Any number of spaces is allowed between integer and K, including no space.
+ * <!-- end-model-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getPageSizeType()
+ * @model
+ * @generated
+ */
+public final class PageSizeType extends AbstractEnumerator {
+	/**
+	 * The '<em><b>FOUR K</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #FOUR_K_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int FOUR_K = 4096;
+
+	/**
+	 * The '<em><b>EIGHT K</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #EIGHT_K_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int EIGHT_K = 8192;
+
+	/**
+	 * The '<em><b>SIXTEEN K</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #SIXTEEN_K_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int SIXTEEN_K = 16384;
+
+	/**
+	 * The '<em><b>THIRTY TWO K</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #THIRTY_TWO_K_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int THIRTY_TWO_K = 32768;
+
+	/**
+	 * The '<em><b>FOUR KB</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #FOUR_KB_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int FOUR_KB = 4;
+
+	/**
+	 * The '<em><b>EIGHT KB</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #EIGHT_KB_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int EIGHT_KB = 8;
+
+	/**
+	 * The '<em><b>SIXTEEN KB</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #SIXTEEN_KB_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int SIXTEEN_KB = 16;
+
+	/**
+	 * The '<em><b>THIRTY TWO KB</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #THIRTY_TWO_KB_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int THIRTY_TWO_KB = 32;
+
+	/**
+	 * The '<em><b>FOUR K</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>FOUR K</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #FOUR_K
+	 * @generated
+	 * @ordered
+	 */
+	public static final PageSizeType FOUR_K_LITERAL = new PageSizeType(FOUR_K, "FOUR_K", "FOUR_K"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>EIGHT K</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>EIGHT K</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #EIGHT_K
+	 * @generated
+	 * @ordered
+	 */
+	public static final PageSizeType EIGHT_K_LITERAL = new PageSizeType(EIGHT_K, "EIGHT_K", "EIGHT_K"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>SIXTEEN K</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>SIXTEEN K</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #SIXTEEN_K
+	 * @generated
+	 * @ordered
+	 */
+	public static final PageSizeType SIXTEEN_K_LITERAL = new PageSizeType(SIXTEEN_K, "SIXTEEN_K", "SIXTEEN_K"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>THIRTY TWO K</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>THIRTY TWO K</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #THIRTY_TWO_K
+	 * @generated
+	 * @ordered
+	 */
+	public static final PageSizeType THIRTY_TWO_K_LITERAL = new PageSizeType(THIRTY_TWO_K, "THIRTY_TWO_K", "THIRTY_TWO_K"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>FOUR KB</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>FOUR KB</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #FOUR_KB
+	 * @generated
+	 * @ordered
+	 */
+	public static final PageSizeType FOUR_KB_LITERAL = new PageSizeType(FOUR_KB, "FOUR_KB", "FOUR_KB"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>EIGHT KB</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>EIGHT KB</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #EIGHT_KB
+	 * @generated
+	 * @ordered
+	 */
+	public static final PageSizeType EIGHT_KB_LITERAL = new PageSizeType(EIGHT_KB, "EIGHT_KB", "EIGHT_KB"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>SIXTEEN KB</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>SIXTEEN KB</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #SIXTEEN_KB
+	 * @generated
+	 * @ordered
+	 */
+	public static final PageSizeType SIXTEEN_KB_LITERAL = new PageSizeType(SIXTEEN_KB, "SIXTEEN_KB", "SIXTEEN_KB"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>THIRTY TWO KB</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>THIRTY TWO KB</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #THIRTY_TWO_KB
+	 * @generated
+	 * @ordered
+	 */
+	public static final PageSizeType THIRTY_TWO_KB_LITERAL = new PageSizeType(THIRTY_TWO_KB, "THIRTY_TWO_KB", "THIRTY_TWO_KB"); //$NON-NLS-1$
+
+	/**
+	 * An array of all the '<em><b>Page Size Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final PageSizeType[] VALUES_ARRAY =
+		new PageSizeType[] {
+			FOUR_K_LITERAL,
+			EIGHT_K_LITERAL,
+			SIXTEEN_K_LITERAL,
+			THIRTY_TWO_K_LITERAL,
+			FOUR_KB_LITERAL,
+			EIGHT_KB_LITERAL,
+			SIXTEEN_KB_LITERAL,
+			THIRTY_TWO_KB_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Page Size Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Page Size Type</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static PageSizeType get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			PageSizeType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Page Size Type</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static PageSizeType getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			PageSizeType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Page Size Type</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static PageSizeType get(int value) {
+		switch (value) {
+			case FOUR_K: return FOUR_K_LITERAL;
+			case EIGHT_K: return EIGHT_K_LITERAL;
+			case SIXTEEN_K: return SIXTEEN_K_LITERAL;
+			case THIRTY_TWO_K: return THIRTY_TWO_K_LITERAL;
+			case FOUR_KB: return FOUR_KB_LITERAL;
+			case EIGHT_KB: return EIGHT_KB_LITERAL;
+			case SIXTEEN_KB: return SIXTEEN_KB_LITERAL;
+			case THIRTY_TWO_KB: return THIRTY_TWO_KB_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private PageSizeType(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //PageSizeType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/PartitionMethod.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/PartitionMethod.java
new file mode 100644
index 0000000..003310d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/PartitionMethod.java
@@ -0,0 +1,151 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: PartitionMethod.java,v 1.9 2008/02/05 02:01:24 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Partition Method</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getPartitionMethod()
+ * @model
+ * @generated
+ */
+public final class PartitionMethod extends AbstractEnumerator {
+	/**
+	 * The '<em><b>HASHING</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #HASHING_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int HASHING = 0;
+
+	/**
+	 * The '<em><b>TABLE REPLICATED</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #TABLE_REPLICATED_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int TABLE_REPLICATED = 1;
+
+	/**
+	 * The '<em><b>HASHING</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>HASHING</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #HASHING
+	 * @generated
+	 * @ordered
+	 */
+	public static final PartitionMethod HASHING_LITERAL = new PartitionMethod(HASHING, "HASHING", "HASHING"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>TABLE REPLICATED</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>TABLE REPLICATED</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #TABLE_REPLICATED
+	 * @generated
+	 * @ordered
+	 */
+	public static final PartitionMethod TABLE_REPLICATED_LITERAL = new PartitionMethod(TABLE_REPLICATED, "TABLE_REPLICATED", "TABLE_REPLICATED"); //$NON-NLS-1$
+
+	/**
+	 * An array of all the '<em><b>Partition Method</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final PartitionMethod[] VALUES_ARRAY =
+		new PartitionMethod[] {
+			HASHING_LITERAL,
+			TABLE_REPLICATED_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Partition Method</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Partition Method</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static PartitionMethod get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			PartitionMethod result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Partition Method</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static PartitionMethod getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			PartitionMethod result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Partition Method</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static PartitionMethod get(int value) {
+		switch (value) {
+			case HASHING: return HASHING_LITERAL;
+			case TABLE_REPLICATED: return TABLE_REPLICATED_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private PartitionMethod(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //PartitionMethod
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/RefreshType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/RefreshType.java
new file mode 100644
index 0000000..e843753
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/RefreshType.java
@@ -0,0 +1,151 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: RefreshType.java,v 1.8 2008/02/05 02:01:24 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Refresh Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getRefreshType()
+ * @model
+ * @generated
+ */
+public final class RefreshType extends AbstractEnumerator {
+	/**
+	 * The '<em><b>DEFERRED</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #DEFERRED_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int DEFERRED = 0;
+
+	/**
+	 * The '<em><b>IMMEDIATE</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #IMMEDIATE_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IMMEDIATE = 1;
+
+	/**
+	 * The '<em><b>DEFERRED</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>DEFERRED</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #DEFERRED
+	 * @generated
+	 * @ordered
+	 */
+	public static final RefreshType DEFERRED_LITERAL = new RefreshType(DEFERRED, "DEFERRED", "DEFERRED"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>IMMEDIATE</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>IMMEDIATE</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #IMMEDIATE
+	 * @generated
+	 * @ordered
+	 */
+	public static final RefreshType IMMEDIATE_LITERAL = new RefreshType(IMMEDIATE, "IMMEDIATE", "IMMEDIATE"); //$NON-NLS-1$
+
+	/**
+	 * An array of all the '<em><b>Refresh Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final RefreshType[] VALUES_ARRAY =
+		new RefreshType[] {
+			DEFERRED_LITERAL,
+			IMMEDIATE_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Refresh Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Refresh Type</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static RefreshType get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			RefreshType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Refresh Type</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static RefreshType getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			RefreshType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Refresh Type</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static RefreshType get(int value) {
+		switch (value) {
+			case DEFERRED: return DEFERRED_LITERAL;
+			case IMMEDIATE: return IMMEDIATE_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private RefreshType(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //RefreshType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/RelationalRemoteDataSet.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/RelationalRemoteDataSet.java
new file mode 100644
index 0000000..66ceba3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/RelationalRemoteDataSet.java
@@ -0,0 +1,55 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: RelationalRemoteDataSet.java,v 1.7 2007/10/12 23:05:35 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Remote Table</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.RelationalRemoteDataSet#getTable <em>Table</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getRelationalRemoteDataSet()
+ * @model
+ * @generated
+ */
+public interface RelationalRemoteDataSet extends SQLObject, RemoteDataSet {
+	/**
+	 * Returns the value of the '<em><b>Table</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Table</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Table</em>' reference.
+	 * @see #setTable(BaseTable)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getRelationalRemoteDataSet_Table()
+	 * @model
+	 * @generated
+	 */
+	BaseTable getTable();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.RelationalRemoteDataSet#getTable <em>Table</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Table</em>' reference.
+	 * @see #getTable()
+	 * @generated
+	 */
+	void setTable(BaseTable value);
+
+} // RemoteTable
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/RelationalRemoteServer.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/RelationalRemoteServer.java
new file mode 100644
index 0000000..a75cc26
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/RelationalRemoteServer.java
@@ -0,0 +1,55 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: RelationalRemoteServer.java,v 1.7 2007/10/12 23:05:35 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Remote Database</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.RelationalRemoteServer#getDatabase <em>Database</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getRelationalRemoteServer()
+ * @model
+ * @generated
+ */
+public interface RelationalRemoteServer extends SQLObject, RemoteServer {
+	/**
+	 * Returns the value of the '<em><b>Database</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Database</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Database</em>' reference.
+	 * @see #setDatabase(Database)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getRelationalRemoteServer_Database()
+	 * @model
+	 * @generated
+	 */
+	Database getDatabase();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.RelationalRemoteServer#getDatabase <em>Database</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Database</em>' reference.
+	 * @see #getDatabase()
+	 * @generated
+	 */
+	void setDatabase(Database value);
+
+} // RemoteDatabase
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/RemoteDataSet.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/RemoteDataSet.java
new file mode 100644
index 0000000..01747cd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/RemoteDataSet.java
@@ -0,0 +1,47 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: RemoteDataSet.java,v 1.8 2008/01/29 00:04:56 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Remote Data Set</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.RemoteDataSet#getNickname <em>Nickname</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getRemoteDataSet()
+ * @model
+ * @generated
+ */
+public interface RemoteDataSet extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Nickname</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNickname}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNickname#getRemoteDataSet <em>Remote Data Set</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Nickname</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Nickname</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getRemoteDataSet_Nickname()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNickname#getRemoteDataSet
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNickname" opposite="remoteDataSet"
+	 * @generated
+	 */
+	EList getNickname();
+
+} // RemoteDataSet
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/RemoteServer.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/RemoteServer.java
new file mode 100644
index 0000000..831a661
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/RemoteServer.java
@@ -0,0 +1,56 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: RemoteServer.java,v 1.8 2008/01/29 00:04:56 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Remote Server</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.RemoteServer#getLUWServer <em>LUW Server</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getRemoteServer()
+ * @model
+ * @generated
+ */
+public interface RemoteServer extends EObject {
+	/**
+	 * Returns the value of the '<em><b>LUW Server</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getRemoteServer <em>Remote Server</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>LUW Server</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>LUW Server</em>' reference.
+	 * @see #setLUWServer(LUWServer)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getRemoteServer_LUWServer()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer#getRemoteServer
+	 * @model opposite="remoteServer" required="true"
+	 * @generated
+	 */
+	LUWServer getLUWServer();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.RemoteServer#getLUWServer <em>LUW Server</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>LUW Server</em>' reference.
+	 * @see #getLUWServer()
+	 * @generated
+	 */
+	void setLUWServer(LUWServer value);
+
+} // RemoteServer
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/SystemType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/SystemType.java
new file mode 100644
index 0000000..3820445
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/SystemType.java
@@ -0,0 +1,205 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>System Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getSystemType()
+ * @model
+ * @generated
+ */
+public final class SystemType extends AbstractEnumerator {
+	/**
+	 * The '<em><b>SATA</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>SATA</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #SATA_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int SATA = 0;
+
+	/**
+	 * The '<em><b>SAS 10K</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>SAS 10K</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #SAS_10K_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int SAS_10K = 1;
+
+	/**
+	 * The '<em><b>SAS 15K</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>SAS 15K</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #SAS_15K_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int SAS_15K = 2;
+
+	/**
+	 * The '<em><b>SSD</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>SSD</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #SSD_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int SSD = 3;
+
+	/**
+	 * The '<em><b>SATA</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #SATA
+	 * @generated
+	 * @ordered
+	 */
+	public static final SystemType SATA_LITERAL = new SystemType(SATA, "SATA", "SATA"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>SAS 10K</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #SAS_10K
+	 * @generated
+	 * @ordered
+	 */
+	public static final SystemType SAS_10K_LITERAL = new SystemType(SAS_10K, "SAS_10K", "SAS_10K"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>SAS 15K</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #SAS_15K
+	 * @generated
+	 * @ordered
+	 */
+	public static final SystemType SAS_15K_LITERAL = new SystemType(SAS_15K, "SAS_15K", "SAS_15K"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>SSD</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #SSD
+	 * @generated
+	 * @ordered
+	 */
+	public static final SystemType SSD_LITERAL = new SystemType(SSD, "SSD", "SSD"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * An array of all the '<em><b>System Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final SystemType[] VALUES_ARRAY =
+		new SystemType[] {
+			SATA_LITERAL,
+			SAS_10K_LITERAL,
+			SAS_15K_LITERAL,
+			SSD_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>System Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>System Type</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static SystemType get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			SystemType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>System Type</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static SystemType getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			SystemType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>System Type</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static SystemType get(int value) {
+		switch (value) {
+			case SATA: return SATA_LITERAL;
+			case SAS_10K: return SAS_10K_LITERAL;
+			case SAS_15K: return SAS_15K_LITERAL;
+			case SSD: return SSD_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private SystemType(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //SystemType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/TableSpaceType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/TableSpaceType.java
new file mode 100644
index 0000000..0ce0e51
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/TableSpaceType.java
@@ -0,0 +1,211 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: TableSpaceType.java,v 1.7 2008/02/05 02:01:24 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Table Space Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * DB2 Universal Database SQL Reference Version 8.1 (Vol.1 and 2)
+ * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+ * 
+ * 
+ * <!-- end-model-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getTableSpaceType()
+ * @model
+ * @generated
+ */
+public final class TableSpaceType extends AbstractEnumerator {
+	/**
+	 * The '<em><b>REGULAR</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #REGULAR_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int REGULAR = 0;
+
+	/**
+	 * The '<em><b>LARGE</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #LARGE_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int LARGE = 1;
+
+	/**
+	 * The '<em><b>SYSTEM TEMP</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #SYSTEM_TEMP_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int SYSTEM_TEMP = 2;
+
+	/**
+	 * The '<em><b>USER TEMP</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #USER_TEMP_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int USER_TEMP = 3;
+
+	/**
+	 * The '<em><b>REGULAR</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>REGULAR</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #REGULAR
+	 * @generated
+	 * @ordered
+	 */
+	public static final TableSpaceType REGULAR_LITERAL = new TableSpaceType(REGULAR, "REGULAR", "REGULAR"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>LARGE</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>LARGE</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #LARGE
+	 * @generated
+	 * @ordered
+	 */
+	public static final TableSpaceType LARGE_LITERAL = new TableSpaceType(LARGE, "LARGE", "LARGE"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>SYSTEM TEMP</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>SYSTEM TEMP</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #SYSTEM_TEMP
+	 * @generated
+	 * @ordered
+	 */
+	public static final TableSpaceType SYSTEM_TEMP_LITERAL = new TableSpaceType(SYSTEM_TEMP, "SYSTEM_TEMP", "SYSTEM_TEMP"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>USER TEMP</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>USER TEMP</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #USER_TEMP
+	 * @generated
+	 * @ordered
+	 */
+	public static final TableSpaceType USER_TEMP_LITERAL = new TableSpaceType(USER_TEMP, "USER_TEMP", "USER_TEMP"); //$NON-NLS-1$
+
+	/**
+	 * An array of all the '<em><b>Table Space Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final TableSpaceType[] VALUES_ARRAY =
+		new TableSpaceType[] {
+			REGULAR_LITERAL,
+			LARGE_LITERAL,
+			SYSTEM_TEMP_LITERAL,
+			USER_TEMP_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Table Space Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Table Space Type</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static TableSpaceType get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			TableSpaceType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Table Space Type</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static TableSpaceType getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			TableSpaceType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Table Space Type</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static TableSpaceType get(int value) {
+		switch (value) {
+			case REGULAR: return REGULAR_LITERAL;
+			case LARGE: return LARGE_LITERAL;
+			case SYSTEM_TEMP: return SYSTEM_TEMP_LITERAL;
+			case USER_TEMP: return USER_TEMP_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private TableSpaceType(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //TableSpaceType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/WrapperType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/WrapperType.java
new file mode 100644
index 0000000..1555cf9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/WrapperType.java
@@ -0,0 +1,151 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: WrapperType.java,v 1.8 2008/02/05 02:01:24 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Wrapper Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#getWrapperType()
+ * @model
+ * @generated
+ */
+public final class WrapperType extends AbstractEnumerator {
+	/**
+	 * The '<em><b>RELATIONAL</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #RELATIONAL_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int RELATIONAL = 0;
+
+	/**
+	 * The '<em><b>NON RELATIONAL</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #NON_RELATIONAL_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int NON_RELATIONAL = 1;
+
+	/**
+	 * The '<em><b>RELATIONAL</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>RELATIONAL</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #RELATIONAL
+	 * @generated
+	 * @ordered
+	 */
+	public static final WrapperType RELATIONAL_LITERAL = new WrapperType(RELATIONAL, "RELATIONAL", "RELATIONAL"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>NON RELATIONAL</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>NON RELATIONAL</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #NON_RELATIONAL
+	 * @generated
+	 * @ordered
+	 */
+	public static final WrapperType NON_RELATIONAL_LITERAL = new WrapperType(NON_RELATIONAL, "NON_RELATIONAL", "NON_RELATIONAL"); //$NON-NLS-1$
+
+	/**
+	 * An array of all the '<em><b>Wrapper Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final WrapperType[] VALUES_ARRAY =
+		new WrapperType[] {
+			RELATIONAL_LITERAL,
+			NON_RELATIONAL_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Wrapper Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Wrapper Type</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static WrapperType get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			WrapperType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Wrapper Type</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static WrapperType getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			WrapperType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Wrapper Type</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static WrapperType get(int value) {
+		switch (value) {
+			case RELATIONAL: return RELATIONAL_LITERAL;
+			case NON_RELATIONAL: return NON_RELATIONAL_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private WrapperType(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //WrapperType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/ArrayIndexElementTypeImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/ArrayIndexElementTypeImpl.java
new file mode 100644
index 0000000..cbcc1fb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/ArrayIndexElementTypeImpl.java
@@ -0,0 +1,193 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.ArrayIndexElementType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWArrayDataType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+
+import org.eclipse.datatools.modelbase.sql.datatypes.impl.ElementTypeImpl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Array Index Element Type</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.ArrayIndexElementTypeImpl#getLUWArrayDataType <em>LUW Array Data Type</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ArrayIndexElementTypeImpl extends ElementTypeImpl implements ArrayIndexElementType {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ArrayIndexElementTypeImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.ARRAY_INDEX_ELEMENT_TYPE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWArrayDataType getLUWArrayDataType() {
+		if (eContainerFeatureID() != LUWPackage.ARRAY_INDEX_ELEMENT_TYPE__LUW_ARRAY_DATA_TYPE) return null;
+		return (LUWArrayDataType)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetLUWArrayDataType(LUWArrayDataType newLUWArrayDataType, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newLUWArrayDataType, LUWPackage.ARRAY_INDEX_ELEMENT_TYPE__LUW_ARRAY_DATA_TYPE, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLUWArrayDataType(LUWArrayDataType newLUWArrayDataType) {
+		if (newLUWArrayDataType != eInternalContainer() || (eContainerFeatureID() != LUWPackage.ARRAY_INDEX_ELEMENT_TYPE__LUW_ARRAY_DATA_TYPE && newLUWArrayDataType != null)) {
+			if (EcoreUtil.isAncestor(this, newLUWArrayDataType))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newLUWArrayDataType != null)
+				msgs = ((InternalEObject)newLUWArrayDataType).eInverseAdd(this, LUWPackage.LUW_ARRAY_DATA_TYPE__ARRAY_INDEX_ELEMENT_TYPE, LUWArrayDataType.class, msgs);
+			msgs = basicSetLUWArrayDataType(newLUWArrayDataType, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.ARRAY_INDEX_ELEMENT_TYPE__LUW_ARRAY_DATA_TYPE, newLUWArrayDataType, newLUWArrayDataType));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.ARRAY_INDEX_ELEMENT_TYPE__LUW_ARRAY_DATA_TYPE:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetLUWArrayDataType((LUWArrayDataType)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.ARRAY_INDEX_ELEMENT_TYPE__LUW_ARRAY_DATA_TYPE:
+				return basicSetLUWArrayDataType(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case LUWPackage.ARRAY_INDEX_ELEMENT_TYPE__LUW_ARRAY_DATA_TYPE:
+				return eInternalContainer().eInverseRemove(this, LUWPackage.LUW_ARRAY_DATA_TYPE__ARRAY_INDEX_ELEMENT_TYPE, LUWArrayDataType.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.ARRAY_INDEX_ELEMENT_TYPE__LUW_ARRAY_DATA_TYPE:
+				return getLUWArrayDataType();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.ARRAY_INDEX_ELEMENT_TYPE__LUW_ARRAY_DATA_TYPE:
+				setLUWArrayDataType((LUWArrayDataType)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.ARRAY_INDEX_ELEMENT_TYPE__LUW_ARRAY_DATA_TYPE:
+				setLUWArrayDataType((LUWArrayDataType)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.ARRAY_INDEX_ELEMENT_TYPE__LUW_ARRAY_DATA_TYPE:
+				return getLUWArrayDataType() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //ArrayIndexElementTypeImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/FederatedParameterImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/FederatedParameterImpl.java
new file mode 100644
index 0000000..9dcf4c2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/FederatedParameterImpl.java
@@ -0,0 +1,365 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: FederatedParameterImpl.java,v 1.6 2008/02/05 02:01:23 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.modelbase.sql.routines.Parameter;
+import org.eclipse.datatools.modelbase.sql.routines.impl.ParameterImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedParameter;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Federated Parameter</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.FederatedParameterImpl#getRemoteCodePage <em>Remote Code Page</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.FederatedParameterImpl#getRemoteParamTypeID <em>Remote Param Type ID</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.FederatedParameterImpl#getFederatedProcedure <em>Federated Procedure</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.FederatedParameterImpl#getRemoteParameter <em>Remote Parameter</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class FederatedParameterImpl extends ParameterImpl implements FederatedParameter {
+	/**
+	 * The default value of the '{@link #getRemoteCodePage() <em>Remote Code Page</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRemoteCodePage()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int REMOTE_CODE_PAGE_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getRemoteCodePage() <em>Remote Code Page</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRemoteCodePage()
+	 * @generated
+	 * @ordered
+	 */
+	protected int remoteCodePage = REMOTE_CODE_PAGE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getRemoteParamTypeID() <em>Remote Param Type ID</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRemoteParamTypeID()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int REMOTE_PARAM_TYPE_ID_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getRemoteParamTypeID() <em>Remote Param Type ID</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRemoteParamTypeID()
+	 * @generated
+	 * @ordered
+	 */
+	protected int remoteParamTypeID = REMOTE_PARAM_TYPE_ID_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getFederatedProcedure() <em>Federated Procedure</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFederatedProcedure()
+	 * @generated
+	 * @ordered
+	 */
+	protected FederatedProcedure federatedProcedure;
+
+	/**
+	 * The cached value of the '{@link #getRemoteParameter() <em>Remote Parameter</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRemoteParameter()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList remoteParameter;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected FederatedParameterImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.FEDERATED_PARAMETER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getRemoteCodePage() {
+		return remoteCodePage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRemoteCodePage(int newRemoteCodePage) {
+		int oldRemoteCodePage = remoteCodePage;
+		remoteCodePage = newRemoteCodePage;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.FEDERATED_PARAMETER__REMOTE_CODE_PAGE, oldRemoteCodePage, remoteCodePage));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getRemoteParamTypeID() {
+		return remoteParamTypeID;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRemoteParamTypeID(int newRemoteParamTypeID) {
+		int oldRemoteParamTypeID = remoteParamTypeID;
+		remoteParamTypeID = newRemoteParamTypeID;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.FEDERATED_PARAMETER__REMOTE_PARAM_TYPE_ID, oldRemoteParamTypeID, remoteParamTypeID));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public FederatedProcedure getFederatedProcedure() {
+		if (federatedProcedure != null && federatedProcedure.eIsProxy()) {
+			InternalEObject oldFederatedProcedure = (InternalEObject)federatedProcedure;
+			federatedProcedure = (FederatedProcedure)eResolveProxy(oldFederatedProcedure);
+			if (federatedProcedure != oldFederatedProcedure) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.FEDERATED_PARAMETER__FEDERATED_PROCEDURE, oldFederatedProcedure, federatedProcedure));
+			}
+		}
+		return federatedProcedure;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public FederatedProcedure basicGetFederatedProcedure() {
+		return federatedProcedure;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetFederatedProcedure(FederatedProcedure newFederatedProcedure, NotificationChain msgs) {
+		FederatedProcedure oldFederatedProcedure = federatedProcedure;
+		federatedProcedure = newFederatedProcedure;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.FEDERATED_PARAMETER__FEDERATED_PROCEDURE, oldFederatedProcedure, newFederatedProcedure);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFederatedProcedure(FederatedProcedure newFederatedProcedure) {
+		if (newFederatedProcedure != federatedProcedure) {
+			NotificationChain msgs = null;
+			if (federatedProcedure != null)
+				msgs = ((InternalEObject)federatedProcedure).eInverseRemove(this, LUWPackage.FEDERATED_PROCEDURE__FEDERATED_PARAMETER, FederatedProcedure.class, msgs);
+			if (newFederatedProcedure != null)
+				msgs = ((InternalEObject)newFederatedProcedure).eInverseAdd(this, LUWPackage.FEDERATED_PROCEDURE__FEDERATED_PARAMETER, FederatedProcedure.class, msgs);
+			msgs = basicSetFederatedProcedure(newFederatedProcedure, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.FEDERATED_PARAMETER__FEDERATED_PROCEDURE, newFederatedProcedure, newFederatedProcedure));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getRemoteParameter() {
+		if (remoteParameter == null) {
+			remoteParameter = new EObjectResolvingEList(Parameter.class, this, LUWPackage.FEDERATED_PARAMETER__REMOTE_PARAMETER);
+		}
+		return remoteParameter;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.FEDERATED_PARAMETER__FEDERATED_PROCEDURE:
+				if (federatedProcedure != null)
+					msgs = ((InternalEObject)federatedProcedure).eInverseRemove(this, LUWPackage.FEDERATED_PROCEDURE__FEDERATED_PARAMETER, FederatedProcedure.class, msgs);
+				return basicSetFederatedProcedure((FederatedProcedure)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.FEDERATED_PARAMETER__FEDERATED_PROCEDURE:
+				return basicSetFederatedProcedure(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.FEDERATED_PARAMETER__REMOTE_CODE_PAGE:
+				return new Integer(getRemoteCodePage());
+			case LUWPackage.FEDERATED_PARAMETER__REMOTE_PARAM_TYPE_ID:
+				return new Integer(getRemoteParamTypeID());
+			case LUWPackage.FEDERATED_PARAMETER__FEDERATED_PROCEDURE:
+				if (resolve) return getFederatedProcedure();
+				return basicGetFederatedProcedure();
+			case LUWPackage.FEDERATED_PARAMETER__REMOTE_PARAMETER:
+				return getRemoteParameter();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.FEDERATED_PARAMETER__REMOTE_CODE_PAGE:
+				setRemoteCodePage(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.FEDERATED_PARAMETER__REMOTE_PARAM_TYPE_ID:
+				setRemoteParamTypeID(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.FEDERATED_PARAMETER__FEDERATED_PROCEDURE:
+				setFederatedProcedure((FederatedProcedure)newValue);
+				return;
+			case LUWPackage.FEDERATED_PARAMETER__REMOTE_PARAMETER:
+				getRemoteParameter().clear();
+				getRemoteParameter().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.FEDERATED_PARAMETER__REMOTE_CODE_PAGE:
+				setRemoteCodePage(REMOTE_CODE_PAGE_EDEFAULT);
+				return;
+			case LUWPackage.FEDERATED_PARAMETER__REMOTE_PARAM_TYPE_ID:
+				setRemoteParamTypeID(REMOTE_PARAM_TYPE_ID_EDEFAULT);
+				return;
+			case LUWPackage.FEDERATED_PARAMETER__FEDERATED_PROCEDURE:
+				setFederatedProcedure((FederatedProcedure)null);
+				return;
+			case LUWPackage.FEDERATED_PARAMETER__REMOTE_PARAMETER:
+				getRemoteParameter().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.FEDERATED_PARAMETER__REMOTE_CODE_PAGE:
+				return remoteCodePage != REMOTE_CODE_PAGE_EDEFAULT;
+			case LUWPackage.FEDERATED_PARAMETER__REMOTE_PARAM_TYPE_ID:
+				return remoteParamTypeID != REMOTE_PARAM_TYPE_ID_EDEFAULT;
+			case LUWPackage.FEDERATED_PARAMETER__FEDERATED_PROCEDURE:
+				return federatedProcedure != null;
+			case LUWPackage.FEDERATED_PARAMETER__REMOTE_PARAMETER:
+				return remoteParameter != null && !remoteParameter.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (remoteCodePage: "); //$NON-NLS-1$
+		result.append(remoteCodePage);
+		result.append(", remoteParamTypeID: "); //$NON-NLS-1$
+		result.append(remoteParamTypeID);
+		result.append(')');
+		return result.toString();
+	}
+
+} //FederatedParameterImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/FederatedProcedureImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/FederatedProcedureImpl.java
new file mode 100644
index 0000000..e725a5e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/FederatedProcedureImpl.java
@@ -0,0 +1,729 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: FederatedProcedureImpl.java,v 1.6 2008/02/05 02:01:23 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureImpl;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedParameter;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Federated Procedure</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.FederatedProcedureImpl#getRemoteUniqueId <em>Remote Unique Id</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.FederatedProcedureImpl#getRemoteServer <em>Remote Server</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.FederatedProcedureImpl#getRemoteSchema <em>Remote Schema</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.FederatedProcedureImpl#getRemotePackage <em>Remote Package</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.FederatedProcedureImpl#getRemoteProcedureName <em>Remote Procedure Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.FederatedProcedureImpl#getNumberOfParameters <em>Number Of Parameters</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.FederatedProcedureImpl#getResultSetsToClient <em>Result Sets To Client</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.FederatedProcedureImpl#getNumberOfRefCursors <em>Number Of Ref Cursors</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.FederatedProcedureImpl#isAllResultSetsToCaller <em>All Result Sets To Caller</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.FederatedProcedureImpl#getFederatedProcedure <em>Federated Procedure</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.FederatedProcedureImpl#getRemoteProcedure <em>Remote Procedure</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.FederatedProcedureImpl#getFederatedParameter <em>Federated Parameter</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class FederatedProcedureImpl extends DB2ProcedureImpl implements FederatedProcedure {
+	/**
+	 * The default value of the '{@link #getRemoteUniqueId() <em>Remote Unique Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRemoteUniqueId()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String REMOTE_UNIQUE_ID_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getRemoteUniqueId() <em>Remote Unique Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRemoteUniqueId()
+	 * @generated
+	 * @ordered
+	 */
+	protected String remoteUniqueId = REMOTE_UNIQUE_ID_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getRemoteServer() <em>Remote Server</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRemoteServer()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String REMOTE_SERVER_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getRemoteServer() <em>Remote Server</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRemoteServer()
+	 * @generated
+	 * @ordered
+	 */
+	protected String remoteServer = REMOTE_SERVER_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getRemoteSchema() <em>Remote Schema</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRemoteSchema()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String REMOTE_SCHEMA_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getRemoteSchema() <em>Remote Schema</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRemoteSchema()
+	 * @generated
+	 * @ordered
+	 */
+	protected String remoteSchema = REMOTE_SCHEMA_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getRemotePackage() <em>Remote Package</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRemotePackage()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String REMOTE_PACKAGE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getRemotePackage() <em>Remote Package</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRemotePackage()
+	 * @generated
+	 * @ordered
+	 */
+	protected String remotePackage = REMOTE_PACKAGE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getRemoteProcedureName() <em>Remote Procedure Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRemoteProcedureName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String REMOTE_PROCEDURE_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getRemoteProcedureName() <em>Remote Procedure Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRemoteProcedureName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String remoteProcedureName = REMOTE_PROCEDURE_NAME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getNumberOfParameters() <em>Number Of Parameters</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNumberOfParameters()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int NUMBER_OF_PARAMETERS_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getNumberOfParameters() <em>Number Of Parameters</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNumberOfParameters()
+	 * @generated
+	 * @ordered
+	 */
+	protected int numberOfParameters = NUMBER_OF_PARAMETERS_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getResultSetsToClient() <em>Result Sets To Client</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getResultSetsToClient()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String RESULT_SETS_TO_CLIENT_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getResultSetsToClient() <em>Result Sets To Client</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getResultSetsToClient()
+	 * @generated
+	 * @ordered
+	 */
+	protected String resultSetsToClient = RESULT_SETS_TO_CLIENT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getNumberOfRefCursors() <em>Number Of Ref Cursors</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNumberOfRefCursors()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int NUMBER_OF_REF_CURSORS_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getNumberOfRefCursors() <em>Number Of Ref Cursors</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNumberOfRefCursors()
+	 * @generated
+	 * @ordered
+	 */
+	protected int numberOfRefCursors = NUMBER_OF_REF_CURSORS_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isAllResultSetsToCaller() <em>All Result Sets To Caller</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isAllResultSetsToCaller()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean ALL_RESULT_SETS_TO_CALLER_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isAllResultSetsToCaller() <em>All Result Sets To Caller</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isAllResultSetsToCaller()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean allResultSetsToCaller = ALL_RESULT_SETS_TO_CALLER_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getFederatedProcedure() <em>Federated Procedure</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFederatedProcedure()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList federatedProcedure;
+
+	/**
+	 * The cached value of the '{@link #getRemoteProcedure() <em>Remote Procedure</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRemoteProcedure()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList remoteProcedure;
+
+	/**
+	 * The cached value of the '{@link #getFederatedParameter() <em>Federated Parameter</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFederatedParameter()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList federatedParameter;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected FederatedProcedureImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.FEDERATED_PROCEDURE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getRemoteUniqueId() {
+		return remoteUniqueId;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRemoteUniqueId(String newRemoteUniqueId) {
+		String oldRemoteUniqueId = remoteUniqueId;
+		remoteUniqueId = newRemoteUniqueId;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.FEDERATED_PROCEDURE__REMOTE_UNIQUE_ID, oldRemoteUniqueId, remoteUniqueId));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getRemoteServer() {
+		return remoteServer;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRemoteServer(String newRemoteServer) {
+		String oldRemoteServer = remoteServer;
+		remoteServer = newRemoteServer;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.FEDERATED_PROCEDURE__REMOTE_SERVER, oldRemoteServer, remoteServer));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getRemoteSchema() {
+		return remoteSchema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRemoteSchema(String newRemoteSchema) {
+		String oldRemoteSchema = remoteSchema;
+		remoteSchema = newRemoteSchema;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.FEDERATED_PROCEDURE__REMOTE_SCHEMA, oldRemoteSchema, remoteSchema));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getRemotePackage() {
+		return remotePackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRemotePackage(String newRemotePackage) {
+		String oldRemotePackage = remotePackage;
+		remotePackage = newRemotePackage;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.FEDERATED_PROCEDURE__REMOTE_PACKAGE, oldRemotePackage, remotePackage));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getRemoteProcedureName() {
+		return remoteProcedureName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRemoteProcedureName(String newRemoteProcedureName) {
+		String oldRemoteProcedureName = remoteProcedureName;
+		remoteProcedureName = newRemoteProcedureName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.FEDERATED_PROCEDURE__REMOTE_PROCEDURE_NAME, oldRemoteProcedureName, remoteProcedureName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getNumberOfParameters() {
+		return numberOfParameters;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setNumberOfParameters(int newNumberOfParameters) {
+		int oldNumberOfParameters = numberOfParameters;
+		numberOfParameters = newNumberOfParameters;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.FEDERATED_PROCEDURE__NUMBER_OF_PARAMETERS, oldNumberOfParameters, numberOfParameters));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getResultSetsToClient() {
+		return resultSetsToClient;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setResultSetsToClient(String newResultSetsToClient) {
+		String oldResultSetsToClient = resultSetsToClient;
+		resultSetsToClient = newResultSetsToClient;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.FEDERATED_PROCEDURE__RESULT_SETS_TO_CLIENT, oldResultSetsToClient, resultSetsToClient));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getNumberOfRefCursors() {
+		return numberOfRefCursors;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setNumberOfRefCursors(int newNumberOfRefCursors) {
+		int oldNumberOfRefCursors = numberOfRefCursors;
+		numberOfRefCursors = newNumberOfRefCursors;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.FEDERATED_PROCEDURE__NUMBER_OF_REF_CURSORS, oldNumberOfRefCursors, numberOfRefCursors));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isAllResultSetsToCaller() {
+		return allResultSetsToCaller;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setAllResultSetsToCaller(boolean newAllResultSetsToCaller) {
+		boolean oldAllResultSetsToCaller = allResultSetsToCaller;
+		allResultSetsToCaller = newAllResultSetsToCaller;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.FEDERATED_PROCEDURE__ALL_RESULT_SETS_TO_CALLER, oldAllResultSetsToCaller, allResultSetsToCaller));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getFederatedProcedure() {
+		if (federatedProcedure == null) {
+			federatedProcedure = new EObjectResolvingEList(FederatedProcedure.class, this, LUWPackage.FEDERATED_PROCEDURE__FEDERATED_PROCEDURE);
+		}
+		return federatedProcedure;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getRemoteProcedure() {
+		if (remoteProcedure == null) {
+			remoteProcedure = new EObjectResolvingEList(Procedure.class, this, LUWPackage.FEDERATED_PROCEDURE__REMOTE_PROCEDURE);
+		}
+		return remoteProcedure;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getFederatedParameter() {
+		if (federatedParameter == null) {
+			federatedParameter = new EObjectWithInverseResolvingEList(FederatedParameter.class, this, LUWPackage.FEDERATED_PROCEDURE__FEDERATED_PARAMETER, LUWPackage.FEDERATED_PARAMETER__FEDERATED_PROCEDURE);
+		}
+		return federatedParameter;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.FEDERATED_PROCEDURE__FEDERATED_PARAMETER:
+				return ((InternalEList)getFederatedParameter()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.FEDERATED_PROCEDURE__FEDERATED_PARAMETER:
+				return ((InternalEList)getFederatedParameter()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.FEDERATED_PROCEDURE__REMOTE_UNIQUE_ID:
+				return getRemoteUniqueId();
+			case LUWPackage.FEDERATED_PROCEDURE__REMOTE_SERVER:
+				return getRemoteServer();
+			case LUWPackage.FEDERATED_PROCEDURE__REMOTE_SCHEMA:
+				return getRemoteSchema();
+			case LUWPackage.FEDERATED_PROCEDURE__REMOTE_PACKAGE:
+				return getRemotePackage();
+			case LUWPackage.FEDERATED_PROCEDURE__REMOTE_PROCEDURE_NAME:
+				return getRemoteProcedureName();
+			case LUWPackage.FEDERATED_PROCEDURE__NUMBER_OF_PARAMETERS:
+				return new Integer(getNumberOfParameters());
+			case LUWPackage.FEDERATED_PROCEDURE__RESULT_SETS_TO_CLIENT:
+				return getResultSetsToClient();
+			case LUWPackage.FEDERATED_PROCEDURE__NUMBER_OF_REF_CURSORS:
+				return new Integer(getNumberOfRefCursors());
+			case LUWPackage.FEDERATED_PROCEDURE__ALL_RESULT_SETS_TO_CALLER:
+				return isAllResultSetsToCaller() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.FEDERATED_PROCEDURE__FEDERATED_PROCEDURE:
+				return getFederatedProcedure();
+			case LUWPackage.FEDERATED_PROCEDURE__REMOTE_PROCEDURE:
+				return getRemoteProcedure();
+			case LUWPackage.FEDERATED_PROCEDURE__FEDERATED_PARAMETER:
+				return getFederatedParameter();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.FEDERATED_PROCEDURE__REMOTE_UNIQUE_ID:
+				setRemoteUniqueId((String)newValue);
+				return;
+			case LUWPackage.FEDERATED_PROCEDURE__REMOTE_SERVER:
+				setRemoteServer((String)newValue);
+				return;
+			case LUWPackage.FEDERATED_PROCEDURE__REMOTE_SCHEMA:
+				setRemoteSchema((String)newValue);
+				return;
+			case LUWPackage.FEDERATED_PROCEDURE__REMOTE_PACKAGE:
+				setRemotePackage((String)newValue);
+				return;
+			case LUWPackage.FEDERATED_PROCEDURE__REMOTE_PROCEDURE_NAME:
+				setRemoteProcedureName((String)newValue);
+				return;
+			case LUWPackage.FEDERATED_PROCEDURE__NUMBER_OF_PARAMETERS:
+				setNumberOfParameters(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.FEDERATED_PROCEDURE__RESULT_SETS_TO_CLIENT:
+				setResultSetsToClient((String)newValue);
+				return;
+			case LUWPackage.FEDERATED_PROCEDURE__NUMBER_OF_REF_CURSORS:
+				setNumberOfRefCursors(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.FEDERATED_PROCEDURE__ALL_RESULT_SETS_TO_CALLER:
+				setAllResultSetsToCaller(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.FEDERATED_PROCEDURE__FEDERATED_PROCEDURE:
+				getFederatedProcedure().clear();
+				getFederatedProcedure().addAll((Collection)newValue);
+				return;
+			case LUWPackage.FEDERATED_PROCEDURE__REMOTE_PROCEDURE:
+				getRemoteProcedure().clear();
+				getRemoteProcedure().addAll((Collection)newValue);
+				return;
+			case LUWPackage.FEDERATED_PROCEDURE__FEDERATED_PARAMETER:
+				getFederatedParameter().clear();
+				getFederatedParameter().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.FEDERATED_PROCEDURE__REMOTE_UNIQUE_ID:
+				setRemoteUniqueId(REMOTE_UNIQUE_ID_EDEFAULT);
+				return;
+			case LUWPackage.FEDERATED_PROCEDURE__REMOTE_SERVER:
+				setRemoteServer(REMOTE_SERVER_EDEFAULT);
+				return;
+			case LUWPackage.FEDERATED_PROCEDURE__REMOTE_SCHEMA:
+				setRemoteSchema(REMOTE_SCHEMA_EDEFAULT);
+				return;
+			case LUWPackage.FEDERATED_PROCEDURE__REMOTE_PACKAGE:
+				setRemotePackage(REMOTE_PACKAGE_EDEFAULT);
+				return;
+			case LUWPackage.FEDERATED_PROCEDURE__REMOTE_PROCEDURE_NAME:
+				setRemoteProcedureName(REMOTE_PROCEDURE_NAME_EDEFAULT);
+				return;
+			case LUWPackage.FEDERATED_PROCEDURE__NUMBER_OF_PARAMETERS:
+				setNumberOfParameters(NUMBER_OF_PARAMETERS_EDEFAULT);
+				return;
+			case LUWPackage.FEDERATED_PROCEDURE__RESULT_SETS_TO_CLIENT:
+				setResultSetsToClient(RESULT_SETS_TO_CLIENT_EDEFAULT);
+				return;
+			case LUWPackage.FEDERATED_PROCEDURE__NUMBER_OF_REF_CURSORS:
+				setNumberOfRefCursors(NUMBER_OF_REF_CURSORS_EDEFAULT);
+				return;
+			case LUWPackage.FEDERATED_PROCEDURE__ALL_RESULT_SETS_TO_CALLER:
+				setAllResultSetsToCaller(ALL_RESULT_SETS_TO_CALLER_EDEFAULT);
+				return;
+			case LUWPackage.FEDERATED_PROCEDURE__FEDERATED_PROCEDURE:
+				getFederatedProcedure().clear();
+				return;
+			case LUWPackage.FEDERATED_PROCEDURE__REMOTE_PROCEDURE:
+				getRemoteProcedure().clear();
+				return;
+			case LUWPackage.FEDERATED_PROCEDURE__FEDERATED_PARAMETER:
+				getFederatedParameter().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.FEDERATED_PROCEDURE__REMOTE_UNIQUE_ID:
+				return REMOTE_UNIQUE_ID_EDEFAULT == null ? remoteUniqueId != null : !REMOTE_UNIQUE_ID_EDEFAULT.equals(remoteUniqueId);
+			case LUWPackage.FEDERATED_PROCEDURE__REMOTE_SERVER:
+				return REMOTE_SERVER_EDEFAULT == null ? remoteServer != null : !REMOTE_SERVER_EDEFAULT.equals(remoteServer);
+			case LUWPackage.FEDERATED_PROCEDURE__REMOTE_SCHEMA:
+				return REMOTE_SCHEMA_EDEFAULT == null ? remoteSchema != null : !REMOTE_SCHEMA_EDEFAULT.equals(remoteSchema);
+			case LUWPackage.FEDERATED_PROCEDURE__REMOTE_PACKAGE:
+				return REMOTE_PACKAGE_EDEFAULT == null ? remotePackage != null : !REMOTE_PACKAGE_EDEFAULT.equals(remotePackage);
+			case LUWPackage.FEDERATED_PROCEDURE__REMOTE_PROCEDURE_NAME:
+				return REMOTE_PROCEDURE_NAME_EDEFAULT == null ? remoteProcedureName != null : !REMOTE_PROCEDURE_NAME_EDEFAULT.equals(remoteProcedureName);
+			case LUWPackage.FEDERATED_PROCEDURE__NUMBER_OF_PARAMETERS:
+				return numberOfParameters != NUMBER_OF_PARAMETERS_EDEFAULT;
+			case LUWPackage.FEDERATED_PROCEDURE__RESULT_SETS_TO_CLIENT:
+				return RESULT_SETS_TO_CLIENT_EDEFAULT == null ? resultSetsToClient != null : !RESULT_SETS_TO_CLIENT_EDEFAULT.equals(resultSetsToClient);
+			case LUWPackage.FEDERATED_PROCEDURE__NUMBER_OF_REF_CURSORS:
+				return numberOfRefCursors != NUMBER_OF_REF_CURSORS_EDEFAULT;
+			case LUWPackage.FEDERATED_PROCEDURE__ALL_RESULT_SETS_TO_CALLER:
+				return allResultSetsToCaller != ALL_RESULT_SETS_TO_CALLER_EDEFAULT;
+			case LUWPackage.FEDERATED_PROCEDURE__FEDERATED_PROCEDURE:
+				return federatedProcedure != null && !federatedProcedure.isEmpty();
+			case LUWPackage.FEDERATED_PROCEDURE__REMOTE_PROCEDURE:
+				return remoteProcedure != null && !remoteProcedure.isEmpty();
+			case LUWPackage.FEDERATED_PROCEDURE__FEDERATED_PARAMETER:
+				return federatedParameter != null && !federatedParameter.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (remoteUniqueId: "); //$NON-NLS-1$
+		result.append(remoteUniqueId);
+		result.append(", remoteServer: "); //$NON-NLS-1$
+		result.append(remoteServer);
+		result.append(", remoteSchema: "); //$NON-NLS-1$
+		result.append(remoteSchema);
+		result.append(", remotePackage: "); //$NON-NLS-1$
+		result.append(remotePackage);
+		result.append(", remoteProcedureName: "); //$NON-NLS-1$
+		result.append(remoteProcedureName);
+		result.append(", numberOfParameters: "); //$NON-NLS-1$
+		result.append(numberOfParameters);
+		result.append(", resultSetsToClient: "); //$NON-NLS-1$
+		result.append(resultSetsToClient);
+		result.append(", numberOfRefCursors: "); //$NON-NLS-1$
+		result.append(numberOfRefCursors);
+		result.append(", allResultSetsToCaller: "); //$NON-NLS-1$
+		result.append(allResultSetsToCaller);
+		result.append(')');
+		return result.toString();
+	}
+
+} //FederatedProcedureImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWAdminServerImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWAdminServerImpl.java
new file mode 100644
index 0000000..92fc261
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWAdminServerImpl.java
@@ -0,0 +1,160 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2DatabaseManager;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWAdminServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Admin Server</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWAdminServerImpl#getInstances <em>Instances</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWAdminServerImpl extends SQLObjectImpl implements LUWAdminServer {
+	/**
+	 * The cached value of the '{@link #getInstances() <em>Instances</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getInstances()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList instances;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWAdminServerImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_ADMIN_SERVER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getInstances() {
+		if (instances == null) {
+			instances = new EObjectWithInverseResolvingEList.ManyInverse(DB2DatabaseManager.class, this, LUWPackage.LUW_ADMIN_SERVER__INSTANCES, DB2ModelPackage.DB2_DATABASE_MANAGER__SERVER);
+		}
+		return instances;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_ADMIN_SERVER__INSTANCES:
+				return ((InternalEList)getInstances()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_ADMIN_SERVER__INSTANCES:
+				return ((InternalEList)getInstances()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_ADMIN_SERVER__INSTANCES:
+				return getInstances();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_ADMIN_SERVER__INSTANCES:
+				getInstances().clear();
+				getInstances().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_ADMIN_SERVER__INSTANCES:
+				getInstances().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_ADMIN_SERVER__INSTANCES:
+				return instances != null && !instances.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //LUWAdminServerImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWArrayDataTypeImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWArrayDataTypeImpl.java
new file mode 100644
index 0000000..da60233
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWArrayDataTypeImpl.java
@@ -0,0 +1,383 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWArrayDataTypeImpl.java,v 1.1 2009/02/16 19:01:34 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.ArrayIndexElementType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWArrayDataType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataTypesPackage;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedTypeOrdering;
+
+import org.eclipse.datatools.modelbase.sql.datatypes.impl.ArrayDataTypeImpl;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Array Data Type</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWArrayDataTypeImpl#getSchema <em>Schema</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWArrayDataTypeImpl#getOrdering <em>Ordering</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWArrayDataTypeImpl#getArrayIndexElementType <em>Array Index Element Type</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWArrayDataTypeImpl extends ArrayDataTypeImpl implements LUWArrayDataType {
+	/**
+	 * The cached value of the '{@link #getSchema() <em>Schema</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSchema()
+	 * @generated
+	 * @ordered
+	 */
+	protected Schema schema;
+
+	/**
+	 * The cached value of the '{@link #getOrdering() <em>Ordering</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOrdering()
+	 * @generated
+	 * @ordered
+	 */
+	protected UserDefinedTypeOrdering ordering;
+
+	/**
+	 * The cached value of the '{@link #getArrayIndexElementType() <em>Array Index Element Type</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getArrayIndexElementType()
+	 * @generated
+	 * @ordered
+	 */
+	protected ArrayIndexElementType arrayIndexElementType;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWArrayDataTypeImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_ARRAY_DATA_TYPE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Schema getSchema() {
+		if (schema != null && schema.eIsProxy()) {
+			InternalEObject oldSchema = (InternalEObject)schema;
+			schema = (Schema)eResolveProxy(oldSchema);
+			if (schema != oldSchema) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_ARRAY_DATA_TYPE__SCHEMA, oldSchema, schema));
+			}
+		}
+		return schema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Schema basicGetSchema() {
+		return schema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetSchema(Schema newSchema, NotificationChain msgs) {
+		Schema oldSchema = schema;
+		schema = newSchema;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_ARRAY_DATA_TYPE__SCHEMA, oldSchema, newSchema);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSchema(Schema newSchema) {
+		if (newSchema != schema) {
+			NotificationChain msgs = null;
+			if (schema != null)
+				msgs = ((InternalEObject)schema).eInverseRemove(this, SQLSchemaPackage.SCHEMA__USER_DEFINED_TYPES, Schema.class, msgs);
+			if (newSchema != null)
+				msgs = ((InternalEObject)newSchema).eInverseAdd(this, SQLSchemaPackage.SCHEMA__USER_DEFINED_TYPES, Schema.class, msgs);
+			msgs = basicSetSchema(newSchema, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_ARRAY_DATA_TYPE__SCHEMA, newSchema, newSchema));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public UserDefinedTypeOrdering getOrdering() {
+		return ordering;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetOrdering(UserDefinedTypeOrdering newOrdering, NotificationChain msgs) {
+		UserDefinedTypeOrdering oldOrdering = ordering;
+		ordering = newOrdering;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_ARRAY_DATA_TYPE__ORDERING, oldOrdering, newOrdering);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOrdering(UserDefinedTypeOrdering newOrdering) {
+		if (newOrdering != ordering) {
+			NotificationChain msgs = null;
+			if (ordering != null)
+				msgs = ((InternalEObject)ordering).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - LUWPackage.LUW_ARRAY_DATA_TYPE__ORDERING, null, msgs);
+			if (newOrdering != null)
+				msgs = ((InternalEObject)newOrdering).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - LUWPackage.LUW_ARRAY_DATA_TYPE__ORDERING, null, msgs);
+			msgs = basicSetOrdering(newOrdering, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_ARRAY_DATA_TYPE__ORDERING, newOrdering, newOrdering));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ArrayIndexElementType getArrayIndexElementType() {
+		return arrayIndexElementType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetArrayIndexElementType(ArrayIndexElementType newArrayIndexElementType, NotificationChain msgs) {
+		ArrayIndexElementType oldArrayIndexElementType = arrayIndexElementType;
+		arrayIndexElementType = newArrayIndexElementType;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_ARRAY_DATA_TYPE__ARRAY_INDEX_ELEMENT_TYPE, oldArrayIndexElementType, newArrayIndexElementType);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setArrayIndexElementType(ArrayIndexElementType newArrayIndexElementType) {
+		if (newArrayIndexElementType != arrayIndexElementType) {
+			NotificationChain msgs = null;
+			if (arrayIndexElementType != null)
+				msgs = ((InternalEObject)arrayIndexElementType).eInverseRemove(this, LUWPackage.ARRAY_INDEX_ELEMENT_TYPE__LUW_ARRAY_DATA_TYPE, ArrayIndexElementType.class, msgs);
+			if (newArrayIndexElementType != null)
+				msgs = ((InternalEObject)newArrayIndexElementType).eInverseAdd(this, LUWPackage.ARRAY_INDEX_ELEMENT_TYPE__LUW_ARRAY_DATA_TYPE, ArrayIndexElementType.class, msgs);
+			msgs = basicSetArrayIndexElementType(newArrayIndexElementType, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_ARRAY_DATA_TYPE__ARRAY_INDEX_ELEMENT_TYPE, newArrayIndexElementType, newArrayIndexElementType));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_ARRAY_DATA_TYPE__SCHEMA:
+				if (schema != null)
+					msgs = ((InternalEObject)schema).eInverseRemove(this, SQLSchemaPackage.SCHEMA__USER_DEFINED_TYPES, Schema.class, msgs);
+				return basicSetSchema((Schema)otherEnd, msgs);
+			case LUWPackage.LUW_ARRAY_DATA_TYPE__ARRAY_INDEX_ELEMENT_TYPE:
+				if (arrayIndexElementType != null)
+					msgs = ((InternalEObject)arrayIndexElementType).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - LUWPackage.LUW_ARRAY_DATA_TYPE__ARRAY_INDEX_ELEMENT_TYPE, null, msgs);
+				return basicSetArrayIndexElementType((ArrayIndexElementType)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_ARRAY_DATA_TYPE__SCHEMA:
+				return basicSetSchema(null, msgs);
+			case LUWPackage.LUW_ARRAY_DATA_TYPE__ORDERING:
+				return basicSetOrdering(null, msgs);
+			case LUWPackage.LUW_ARRAY_DATA_TYPE__ARRAY_INDEX_ELEMENT_TYPE:
+				return basicSetArrayIndexElementType(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_ARRAY_DATA_TYPE__SCHEMA:
+				if (resolve) return getSchema();
+				return basicGetSchema();
+			case LUWPackage.LUW_ARRAY_DATA_TYPE__ORDERING:
+				return getOrdering();
+			case LUWPackage.LUW_ARRAY_DATA_TYPE__ARRAY_INDEX_ELEMENT_TYPE:
+				return getArrayIndexElementType();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_ARRAY_DATA_TYPE__SCHEMA:
+				setSchema((Schema)newValue);
+				return;
+			case LUWPackage.LUW_ARRAY_DATA_TYPE__ORDERING:
+				setOrdering((UserDefinedTypeOrdering)newValue);
+				return;
+			case LUWPackage.LUW_ARRAY_DATA_TYPE__ARRAY_INDEX_ELEMENT_TYPE:
+				setArrayIndexElementType((ArrayIndexElementType)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_ARRAY_DATA_TYPE__SCHEMA:
+				setSchema((Schema)null);
+				return;
+			case LUWPackage.LUW_ARRAY_DATA_TYPE__ORDERING:
+				setOrdering((UserDefinedTypeOrdering)null);
+				return;
+			case LUWPackage.LUW_ARRAY_DATA_TYPE__ARRAY_INDEX_ELEMENT_TYPE:
+				setArrayIndexElementType((ArrayIndexElementType)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_ARRAY_DATA_TYPE__SCHEMA:
+				return schema != null;
+			case LUWPackage.LUW_ARRAY_DATA_TYPE__ORDERING:
+				return ordering != null;
+			case LUWPackage.LUW_ARRAY_DATA_TYPE__ARRAY_INDEX_ELEMENT_TYPE:
+				return arrayIndexElementType != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class baseClass) {
+		if (baseClass == UserDefinedType.class) {
+			switch (derivedFeatureID) {
+				case LUWPackage.LUW_ARRAY_DATA_TYPE__SCHEMA: return SQLDataTypesPackage.USER_DEFINED_TYPE__SCHEMA;
+				case LUWPackage.LUW_ARRAY_DATA_TYPE__ORDERING: return SQLDataTypesPackage.USER_DEFINED_TYPE__ORDERING;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class baseClass) {
+		if (baseClass == UserDefinedType.class) {
+			switch (baseFeatureID) {
+				case SQLDataTypesPackage.USER_DEFINED_TYPE__SCHEMA: return LUWPackage.LUW_ARRAY_DATA_TYPE__SCHEMA;
+				case SQLDataTypesPackage.USER_DEFINED_TYPE__ORDERING: return LUWPackage.LUW_ARRAY_DATA_TYPE__ORDERING;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+} //LUWArrayDataTypeImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWAttributeDefinitionImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWAttributeDefinitionImpl.java
new file mode 100644
index 0000000..37706ec
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWAttributeDefinitionImpl.java
@@ -0,0 +1,213 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWAttributeDefinitionImpl.java,v 1.6 2008/01/29 00:04:54 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.modelbase.sql.datatypes.impl.AttributeDefinitionImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWAttributeDefinition;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Attribute Definition</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWAttributeDefinitionImpl#isLOBLogged <em>LOB Logged</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWAttributeDefinitionImpl#isLOBCompacted <em>LOB Compacted</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWAttributeDefinitionImpl extends AttributeDefinitionImpl implements LUWAttributeDefinition {
+	/**
+	 * The default value of the '{@link #isLOBLogged() <em>LOB Logged</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isLOBLogged()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean LOB_LOGGED_EDEFAULT = true;
+
+	/**
+	 * The cached value of the '{@link #isLOBLogged() <em>LOB Logged</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isLOBLogged()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean lobLogged = LOB_LOGGED_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isLOBCompacted() <em>LOB Compacted</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isLOBCompacted()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean LOB_COMPACTED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isLOBCompacted() <em>LOB Compacted</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isLOBCompacted()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean lobCompacted = LOB_COMPACTED_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWAttributeDefinitionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_ATTRIBUTE_DEFINITION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isLOBLogged() {
+		return lobLogged;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLOBLogged(boolean newLOBLogged) {
+		boolean oldLOBLogged = lobLogged;
+		lobLogged = newLOBLogged;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_ATTRIBUTE_DEFINITION__LOB_LOGGED, oldLOBLogged, lobLogged));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isLOBCompacted() {
+		return lobCompacted;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLOBCompacted(boolean newLOBCompacted) {
+		boolean oldLOBCompacted = lobCompacted;
+		lobCompacted = newLOBCompacted;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_ATTRIBUTE_DEFINITION__LOB_COMPACTED, oldLOBCompacted, lobCompacted));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_ATTRIBUTE_DEFINITION__LOB_LOGGED:
+				return isLOBLogged() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_ATTRIBUTE_DEFINITION__LOB_COMPACTED:
+				return isLOBCompacted() ? Boolean.TRUE : Boolean.FALSE;
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_ATTRIBUTE_DEFINITION__LOB_LOGGED:
+				setLOBLogged(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_ATTRIBUTE_DEFINITION__LOB_COMPACTED:
+				setLOBCompacted(((Boolean)newValue).booleanValue());
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_ATTRIBUTE_DEFINITION__LOB_LOGGED:
+				setLOBLogged(LOB_LOGGED_EDEFAULT);
+				return;
+			case LUWPackage.LUW_ATTRIBUTE_DEFINITION__LOB_COMPACTED:
+				setLOBCompacted(LOB_COMPACTED_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_ATTRIBUTE_DEFINITION__LOB_LOGGED:
+				return lobLogged != LOB_LOGGED_EDEFAULT;
+			case LUWPackage.LUW_ATTRIBUTE_DEFINITION__LOB_COMPACTED:
+				return lobCompacted != LOB_COMPACTED_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (LOBLogged: "); //$NON-NLS-1$
+		result.append(lobLogged);
+		result.append(", LOBCompacted: "); //$NON-NLS-1$
+		result.append(lobCompacted);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWAttributeDefinitionImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWBufferPoolImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWBufferPoolImpl.java
new file mode 100644
index 0000000..881ff5e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWBufferPoolImpl.java
@@ -0,0 +1,761 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.BufferPoolType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPoolSizeException;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.PageSizeType;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Buffer Pool</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWBufferPoolImpl#getCreateType <em>Create Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWBufferPoolImpl#getSize <em>Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWBufferPoolImpl#getPageSize <em>Page Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWBufferPoolImpl#getBlockSize <em>Block Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWBufferPoolImpl#getNumBlockPages <em>Num Block Pages</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWBufferPoolImpl#isExtendedStorage <em>Extended Storage</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWBufferPoolImpl#isAutomatic <em>Automatic</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWBufferPoolImpl#getTableSpaces <em>Table Spaces</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWBufferPoolImpl#getPartitions <em>Partitions</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWBufferPoolImpl#getPartitionGroup <em>Partition Group</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWBufferPoolImpl#getDatabase <em>Database</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWBufferPoolImpl#getSizeException <em>Size Exception</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWBufferPoolImpl extends SQLObjectImpl implements LUWBufferPool {
+	/**
+	 * The default value of the '{@link #getCreateType() <em>Create Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCreateType()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final BufferPoolType CREATE_TYPE_EDEFAULT = BufferPoolType.IMMEDIATE_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getCreateType() <em>Create Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCreateType()
+	 * @generated
+	 * @ordered
+	 */
+	protected BufferPoolType createType = CREATE_TYPE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getSize() <em>Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int SIZE_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getSize() <em>Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected int size = SIZE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getPageSize() <em>Page Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPageSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final PageSizeType PAGE_SIZE_EDEFAULT= PageSizeType.FOUR_K_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getPageSize() <em>Page Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPageSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected PageSizeType pageSize = PAGE_SIZE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getBlockSize() <em>Block Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBlockSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int BLOCK_SIZE_EDEFAULT = 32;
+
+	/**
+	 * The cached value of the '{@link #getBlockSize() <em>Block Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBlockSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected int blockSize = BLOCK_SIZE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getNumBlockPages() <em>Num Block Pages</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNumBlockPages()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int NUM_BLOCK_PAGES_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getNumBlockPages() <em>Num Block Pages</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNumBlockPages()
+	 * @generated
+	 * @ordered
+	 */
+	protected int numBlockPages = NUM_BLOCK_PAGES_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isExtendedStorage() <em>Extended Storage</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isExtendedStorage()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean EXTENDED_STORAGE_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isExtendedStorage() <em>Extended Storage</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isExtendedStorage()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean extendedStorage = EXTENDED_STORAGE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isAutomatic() <em>Automatic</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isAutomatic()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean AUTOMATIC_EDEFAULT = true;
+
+	/**
+	 * The cached value of the '{@link #isAutomatic() <em>Automatic</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isAutomatic()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean automatic = AUTOMATIC_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getTableSpaces() <em>Table Spaces</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTableSpaces()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList tableSpaces;
+
+	/**
+	 * The cached value of the '{@link #getPartitions() <em>Partitions</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPartitions()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList partitions;
+
+	/**
+	 * The cached value of the '{@link #getPartitionGroup() <em>Partition Group</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPartitionGroup()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList partitionGroup;
+
+	/**
+	 * The cached value of the '{@link #getDatabase() <em>Database</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDatabase()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWDatabase database;
+
+	/**
+	 * The cached value of the '{@link #getSizeException() <em>Size Exception</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSizeException()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList sizeException;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWBufferPoolImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_BUFFER_POOL;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public BufferPoolType getCreateType() {
+		return createType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCreateType(BufferPoolType newCreateType) {
+		BufferPoolType oldCreateType = createType;
+		createType = newCreateType == null ? CREATE_TYPE_EDEFAULT : newCreateType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_BUFFER_POOL__CREATE_TYPE, oldCreateType, createType));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getSize() {
+		return size;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSize(int newSize) {
+		int oldSize = size;
+		size = newSize;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_BUFFER_POOL__SIZE, oldSize, size));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PageSizeType getPageSize() {
+		return pageSize;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPageSize(PageSizeType newPageSize) {
+		PageSizeType oldPageSize = pageSize;
+		pageSize = newPageSize == null ? PAGE_SIZE_EDEFAULT : newPageSize;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_BUFFER_POOL__PAGE_SIZE, oldPageSize, pageSize));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getBlockSize() {
+		return blockSize;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBlockSize(int newBlockSize) {
+		int oldBlockSize = blockSize;
+		blockSize = newBlockSize;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_BUFFER_POOL__BLOCK_SIZE, oldBlockSize, blockSize));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getNumBlockPages() {
+		return numBlockPages;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setNumBlockPages(int newNumBlockPages) {
+		int oldNumBlockPages = numBlockPages;
+		numBlockPages = newNumBlockPages;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_BUFFER_POOL__NUM_BLOCK_PAGES, oldNumBlockPages, numBlockPages));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isExtendedStorage() {
+		return extendedStorage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setExtendedStorage(boolean newExtendedStorage) {
+		boolean oldExtendedStorage = extendedStorage;
+		extendedStorage = newExtendedStorage;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_BUFFER_POOL__EXTENDED_STORAGE, oldExtendedStorage, extendedStorage));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isAutomatic() {
+		return automatic;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setAutomatic(boolean newAutomatic) {
+		boolean oldAutomatic = automatic;
+		automatic = newAutomatic;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_BUFFER_POOL__AUTOMATIC, oldAutomatic, automatic));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getTableSpaces() {
+		if (tableSpaces == null) {
+			tableSpaces = new EObjectWithInverseResolvingEList(LUWTableSpace.class, this, LUWPackage.LUW_BUFFER_POOL__TABLE_SPACES, LUWPackage.LUW_TABLE_SPACE__BUFFER_POOL);
+		}
+		return tableSpaces;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getPartitions() {
+		if (partitions == null) {
+			partitions = new EObjectWithInverseResolvingEList(LUWDatabasePartition.class, this, LUWPackage.LUW_BUFFER_POOL__PARTITIONS, LUWPackage.LUW_DATABASE_PARTITION__BUFFER_POOL);
+		}
+		return partitions;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getPartitionGroup() {
+		if (partitionGroup == null) {
+			partitionGroup = new EObjectWithInverseResolvingEList.ManyInverse(LUWPartitionGroup.class, this, LUWPackage.LUW_BUFFER_POOL__PARTITION_GROUP, LUWPackage.LUW_PARTITION_GROUP__BUFFER_POOL);
+		}
+		return partitionGroup;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWDatabase getDatabase() {
+		if (database != null && database.eIsProxy()) {
+			InternalEObject oldDatabase = (InternalEObject)database;
+			database = (LUWDatabase)eResolveProxy(oldDatabase);
+			if (database != oldDatabase) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_BUFFER_POOL__DATABASE, oldDatabase, database));
+			}
+		}
+		return database;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWDatabase basicGetDatabase() {
+		return database;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetDatabase(LUWDatabase newDatabase, NotificationChain msgs) {
+		LUWDatabase oldDatabase = database;
+		database = newDatabase;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_BUFFER_POOL__DATABASE, oldDatabase, newDatabase);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDatabase(LUWDatabase newDatabase) {
+		if (newDatabase != database) {
+			NotificationChain msgs = null;
+			if (database != null)
+				msgs = ((InternalEObject)database).eInverseRemove(this, LUWPackage.LUW_DATABASE__BUFFERPOOLS, LUWDatabase.class, msgs);
+			if (newDatabase != null)
+				msgs = ((InternalEObject)newDatabase).eInverseAdd(this, LUWPackage.LUW_DATABASE__BUFFERPOOLS, LUWDatabase.class, msgs);
+			msgs = basicSetDatabase(newDatabase, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_BUFFER_POOL__DATABASE, newDatabase, newDatabase));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getSizeException() {
+		if (sizeException == null) {
+			sizeException = new EObjectContainmentWithInverseEList(LUWBufferPoolSizeException.class, this, LUWPackage.LUW_BUFFER_POOL__SIZE_EXCEPTION, LUWPackage.LUW_BUFFER_POOL_SIZE_EXCEPTION__BUFFER_POOL);
+		}
+		return sizeException;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_BUFFER_POOL__TABLE_SPACES:
+				return ((InternalEList)getTableSpaces()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_BUFFER_POOL__PARTITIONS:
+				return ((InternalEList)getPartitions()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_BUFFER_POOL__PARTITION_GROUP:
+				return ((InternalEList)getPartitionGroup()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_BUFFER_POOL__DATABASE:
+				if (database != null)
+					msgs = ((InternalEObject)database).eInverseRemove(this, LUWPackage.LUW_DATABASE__BUFFERPOOLS, LUWDatabase.class, msgs);
+				return basicSetDatabase((LUWDatabase)otherEnd, msgs);
+			case LUWPackage.LUW_BUFFER_POOL__SIZE_EXCEPTION:
+				return ((InternalEList)getSizeException()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_BUFFER_POOL__TABLE_SPACES:
+				return ((InternalEList)getTableSpaces()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_BUFFER_POOL__PARTITIONS:
+				return ((InternalEList)getPartitions()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_BUFFER_POOL__PARTITION_GROUP:
+				return ((InternalEList)getPartitionGroup()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_BUFFER_POOL__DATABASE:
+				return basicSetDatabase(null, msgs);
+			case LUWPackage.LUW_BUFFER_POOL__SIZE_EXCEPTION:
+				return ((InternalEList)getSizeException()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_BUFFER_POOL__CREATE_TYPE:
+				return getCreateType();
+			case LUWPackage.LUW_BUFFER_POOL__SIZE:
+				return new Integer(getSize());
+			case LUWPackage.LUW_BUFFER_POOL__PAGE_SIZE:
+				return getPageSize();
+			case LUWPackage.LUW_BUFFER_POOL__BLOCK_SIZE:
+				return new Integer(getBlockSize());
+			case LUWPackage.LUW_BUFFER_POOL__NUM_BLOCK_PAGES:
+				return new Integer(getNumBlockPages());
+			case LUWPackage.LUW_BUFFER_POOL__EXTENDED_STORAGE:
+				return isExtendedStorage() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_BUFFER_POOL__AUTOMATIC:
+				return isAutomatic() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_BUFFER_POOL__TABLE_SPACES:
+				return getTableSpaces();
+			case LUWPackage.LUW_BUFFER_POOL__PARTITIONS:
+				return getPartitions();
+			case LUWPackage.LUW_BUFFER_POOL__PARTITION_GROUP:
+				return getPartitionGroup();
+			case LUWPackage.LUW_BUFFER_POOL__DATABASE:
+				if (resolve) return getDatabase();
+				return basicGetDatabase();
+			case LUWPackage.LUW_BUFFER_POOL__SIZE_EXCEPTION:
+				return getSizeException();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_BUFFER_POOL__CREATE_TYPE:
+				setCreateType((BufferPoolType)newValue);
+				return;
+			case LUWPackage.LUW_BUFFER_POOL__SIZE:
+				setSize(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.LUW_BUFFER_POOL__PAGE_SIZE:
+				setPageSize((PageSizeType)newValue);
+				return;
+			case LUWPackage.LUW_BUFFER_POOL__BLOCK_SIZE:
+				setBlockSize(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.LUW_BUFFER_POOL__NUM_BLOCK_PAGES:
+				setNumBlockPages(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.LUW_BUFFER_POOL__EXTENDED_STORAGE:
+				setExtendedStorage(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_BUFFER_POOL__AUTOMATIC:
+				setAutomatic(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_BUFFER_POOL__TABLE_SPACES:
+				getTableSpaces().clear();
+				getTableSpaces().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_BUFFER_POOL__PARTITIONS:
+				getPartitions().clear();
+				getPartitions().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_BUFFER_POOL__PARTITION_GROUP:
+				getPartitionGroup().clear();
+				getPartitionGroup().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_BUFFER_POOL__DATABASE:
+				setDatabase((LUWDatabase)newValue);
+				return;
+			case LUWPackage.LUW_BUFFER_POOL__SIZE_EXCEPTION:
+				getSizeException().clear();
+				getSizeException().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_BUFFER_POOL__CREATE_TYPE:
+				setCreateType(CREATE_TYPE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_BUFFER_POOL__SIZE:
+				setSize(SIZE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_BUFFER_POOL__PAGE_SIZE:
+				setPageSize(PAGE_SIZE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_BUFFER_POOL__BLOCK_SIZE:
+				setBlockSize(BLOCK_SIZE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_BUFFER_POOL__NUM_BLOCK_PAGES:
+				setNumBlockPages(NUM_BLOCK_PAGES_EDEFAULT);
+				return;
+			case LUWPackage.LUW_BUFFER_POOL__EXTENDED_STORAGE:
+				setExtendedStorage(EXTENDED_STORAGE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_BUFFER_POOL__AUTOMATIC:
+				setAutomatic(AUTOMATIC_EDEFAULT);
+				return;
+			case LUWPackage.LUW_BUFFER_POOL__TABLE_SPACES:
+				getTableSpaces().clear();
+				return;
+			case LUWPackage.LUW_BUFFER_POOL__PARTITIONS:
+				getPartitions().clear();
+				return;
+			case LUWPackage.LUW_BUFFER_POOL__PARTITION_GROUP:
+				getPartitionGroup().clear();
+				return;
+			case LUWPackage.LUW_BUFFER_POOL__DATABASE:
+				setDatabase((LUWDatabase)null);
+				return;
+			case LUWPackage.LUW_BUFFER_POOL__SIZE_EXCEPTION:
+				getSizeException().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_BUFFER_POOL__CREATE_TYPE:
+				return createType != CREATE_TYPE_EDEFAULT;
+			case LUWPackage.LUW_BUFFER_POOL__SIZE:
+				return size != SIZE_EDEFAULT;
+			case LUWPackage.LUW_BUFFER_POOL__PAGE_SIZE:
+				return pageSize != PAGE_SIZE_EDEFAULT;
+			case LUWPackage.LUW_BUFFER_POOL__BLOCK_SIZE:
+				return blockSize != BLOCK_SIZE_EDEFAULT;
+			case LUWPackage.LUW_BUFFER_POOL__NUM_BLOCK_PAGES:
+				return numBlockPages != NUM_BLOCK_PAGES_EDEFAULT;
+			case LUWPackage.LUW_BUFFER_POOL__EXTENDED_STORAGE:
+				return extendedStorage != EXTENDED_STORAGE_EDEFAULT;
+			case LUWPackage.LUW_BUFFER_POOL__AUTOMATIC:
+				return automatic != AUTOMATIC_EDEFAULT;
+			case LUWPackage.LUW_BUFFER_POOL__TABLE_SPACES:
+				return tableSpaces != null && !tableSpaces.isEmpty();
+			case LUWPackage.LUW_BUFFER_POOL__PARTITIONS:
+				return partitions != null && !partitions.isEmpty();
+			case LUWPackage.LUW_BUFFER_POOL__PARTITION_GROUP:
+				return partitionGroup != null && !partitionGroup.isEmpty();
+			case LUWPackage.LUW_BUFFER_POOL__DATABASE:
+				return database != null;
+			case LUWPackage.LUW_BUFFER_POOL__SIZE_EXCEPTION:
+				return sizeException != null && !sizeException.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (createType: "); //$NON-NLS-1$
+		result.append(createType);
+		result.append(", size: "); //$NON-NLS-1$
+		result.append(size);
+		result.append(", pageSize: "); //$NON-NLS-1$
+		result.append(pageSize);
+		result.append(", blockSize: "); //$NON-NLS-1$
+		result.append(blockSize);
+		result.append(", numBlockPages: "); //$NON-NLS-1$
+		result.append(numBlockPages);
+		result.append(", extendedStorage: "); //$NON-NLS-1$
+		result.append(extendedStorage);
+		result.append(", automatic: "); //$NON-NLS-1$
+		result.append(automatic);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWBufferPoolImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWBufferPoolSizeExceptionImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWBufferPoolSizeExceptionImpl.java
new file mode 100644
index 0000000..dd00ced
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWBufferPoolSizeExceptionImpl.java
@@ -0,0 +1,305 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWBufferPoolSizeExceptionImpl.java,v 1.1 2009/02/27 23:12:34 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPoolSizeException;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Buffer Pool Size Exception</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWBufferPoolSizeExceptionImpl#getSize <em>Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWBufferPoolSizeExceptionImpl#getBufferPool <em>Buffer Pool</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWBufferPoolSizeExceptionImpl#getPartitions <em>Partitions</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWBufferPoolSizeExceptionImpl extends SQLObjectImpl implements LUWBufferPoolSizeException {
+	/**
+	 * The default value of the '{@link #getSize() <em>Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int SIZE_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getSize() <em>Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected int size = SIZE_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getPartitions() <em>Partitions</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPartitions()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList partitions;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWBufferPoolSizeExceptionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_BUFFER_POOL_SIZE_EXCEPTION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getSize() {
+		return size;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSize(int newSize) {
+		int oldSize = size;
+		size = newSize;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_BUFFER_POOL_SIZE_EXCEPTION__SIZE, oldSize, size));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWBufferPool getBufferPool() {
+		if (eContainerFeatureID() != LUWPackage.LUW_BUFFER_POOL_SIZE_EXCEPTION__BUFFER_POOL) return null;
+		return (LUWBufferPool)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetBufferPool(LUWBufferPool newBufferPool, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newBufferPool, LUWPackage.LUW_BUFFER_POOL_SIZE_EXCEPTION__BUFFER_POOL, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBufferPool(LUWBufferPool newBufferPool) {
+		if (newBufferPool != eInternalContainer() || (eContainerFeatureID() != LUWPackage.LUW_BUFFER_POOL_SIZE_EXCEPTION__BUFFER_POOL && newBufferPool != null)) {
+			if (EcoreUtil.isAncestor(this, newBufferPool))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newBufferPool != null)
+				msgs = ((InternalEObject)newBufferPool).eInverseAdd(this, LUWPackage.LUW_BUFFER_POOL__SIZE_EXCEPTION, LUWBufferPool.class, msgs);
+			msgs = basicSetBufferPool(newBufferPool, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_BUFFER_POOL_SIZE_EXCEPTION__BUFFER_POOL, newBufferPool, newBufferPool));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getPartitions() {
+		if (partitions == null) {
+			partitions = new EObjectWithInverseResolvingEList(LUWDatabasePartition.class, this, LUWPackage.LUW_BUFFER_POOL_SIZE_EXCEPTION__PARTITIONS, LUWPackage.LUW_DATABASE_PARTITION__SIZE_EXCEPTION);
+		}
+		return partitions;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_BUFFER_POOL_SIZE_EXCEPTION__BUFFER_POOL:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetBufferPool((LUWBufferPool)otherEnd, msgs);
+			case LUWPackage.LUW_BUFFER_POOL_SIZE_EXCEPTION__PARTITIONS:
+				return ((InternalEList)getPartitions()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_BUFFER_POOL_SIZE_EXCEPTION__BUFFER_POOL:
+				return basicSetBufferPool(null, msgs);
+			case LUWPackage.LUW_BUFFER_POOL_SIZE_EXCEPTION__PARTITIONS:
+				return ((InternalEList)getPartitions()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case LUWPackage.LUW_BUFFER_POOL_SIZE_EXCEPTION__BUFFER_POOL:
+				return eInternalContainer().eInverseRemove(this, LUWPackage.LUW_BUFFER_POOL__SIZE_EXCEPTION, LUWBufferPool.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_BUFFER_POOL_SIZE_EXCEPTION__SIZE:
+				return new Integer(getSize());
+			case LUWPackage.LUW_BUFFER_POOL_SIZE_EXCEPTION__BUFFER_POOL:
+				return getBufferPool();
+			case LUWPackage.LUW_BUFFER_POOL_SIZE_EXCEPTION__PARTITIONS:
+				return getPartitions();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_BUFFER_POOL_SIZE_EXCEPTION__SIZE:
+				setSize(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.LUW_BUFFER_POOL_SIZE_EXCEPTION__BUFFER_POOL:
+				setBufferPool((LUWBufferPool)newValue);
+				return;
+			case LUWPackage.LUW_BUFFER_POOL_SIZE_EXCEPTION__PARTITIONS:
+				getPartitions().clear();
+				getPartitions().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_BUFFER_POOL_SIZE_EXCEPTION__SIZE:
+				setSize(SIZE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_BUFFER_POOL_SIZE_EXCEPTION__BUFFER_POOL:
+				setBufferPool((LUWBufferPool)null);
+				return;
+			case LUWPackage.LUW_BUFFER_POOL_SIZE_EXCEPTION__PARTITIONS:
+				getPartitions().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_BUFFER_POOL_SIZE_EXCEPTION__SIZE:
+				return size != SIZE_EDEFAULT;
+			case LUWPackage.LUW_BUFFER_POOL_SIZE_EXCEPTION__BUFFER_POOL:
+				return getBufferPool() != null;
+			case LUWPackage.LUW_BUFFER_POOL_SIZE_EXCEPTION__PARTITIONS:
+				return partitions != null && !partitions.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (size: "); //$NON-NLS-1$
+		result.append(size);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWBufferPoolSizeExceptionImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWColumnImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWColumnImpl.java
new file mode 100644
index 0000000..1390a73
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWColumnImpl.java
@@ -0,0 +1,485 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWColumnImpl.java,v 1.14 2008/02/05 02:01:23 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ColumnImpl;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabel;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Column</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWColumnImpl#isLobLogged <em>Lob Logged</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWColumnImpl#isLobCompacted <em>Lob Compacted</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWColumnImpl#getCompression <em>Compression</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWColumnImpl#getInlineLength <em>Inline Length</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWColumnImpl#isHidden <em>Hidden</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWColumnImpl#getSecurityLabel <em>Security Label</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWColumnImpl#getOptions <em>Options</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWColumnImpl extends DB2ColumnImpl implements LUWColumn {
+	/**
+	 * The default value of the '{@link #isLobLogged() <em>Lob Logged</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isLobLogged()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean LOB_LOGGED_EDEFAULT = true;
+
+	/**
+	 * The cached value of the '{@link #isLobLogged() <em>Lob Logged</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isLobLogged()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean lobLogged = LOB_LOGGED_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isLobCompacted() <em>Lob Compacted</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isLobCompacted()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean LOB_COMPACTED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isLobCompacted() <em>Lob Compacted</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isLobCompacted()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean lobCompacted = LOB_COMPACTED_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getCompression() <em>Compression</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCompression()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String COMPRESSION_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getCompression() <em>Compression</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCompression()
+	 * @generated
+	 * @ordered
+	 */
+	protected String compression = COMPRESSION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getInlineLength() <em>Inline Length</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getInlineLength()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int INLINE_LENGTH_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getInlineLength() <em>Inline Length</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getInlineLength()
+	 * @generated
+	 * @ordered
+	 */
+	protected int inlineLength = INLINE_LENGTH_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isHidden() <em>Hidden</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isHidden()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean HIDDEN_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isHidden() <em>Hidden</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isHidden()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean hidden = HIDDEN_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getSecurityLabel() <em>Security Label</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSecurityLabel()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String SECURITY_LABEL_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getSecurityLabel() <em>Security Label</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSecurityLabel()
+	 * @generated
+	 * @ordered
+	 */
+	protected String securityLabel = SECURITY_LABEL_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getOptions() <em>Options</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOptions()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList options;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWColumnImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_COLUMN;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isLobLogged() {
+		return lobLogged;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLobLogged(boolean newLobLogged) {
+		boolean oldLobLogged = lobLogged;
+		lobLogged = newLobLogged;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_COLUMN__LOB_LOGGED, oldLobLogged, lobLogged));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isLobCompacted() {
+		return lobCompacted;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLobCompacted(boolean newLobCompacted) {
+		boolean oldLobCompacted = lobCompacted;
+		lobCompacted = newLobCompacted;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_COLUMN__LOB_COMPACTED, oldLobCompacted, lobCompacted));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getCompression() {
+		return compression;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCompression(String newCompression) {
+		String oldCompression = compression;
+		compression = newCompression;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_COLUMN__COMPRESSION, oldCompression, compression));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getInlineLength() {
+		return inlineLength;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setInlineLength(int newInlineLength) {
+		int oldInlineLength = inlineLength;
+		inlineLength = newInlineLength;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_COLUMN__INLINE_LENGTH, oldInlineLength, inlineLength));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isHidden() {
+		return hidden;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setHidden(boolean newHidden) {
+		boolean oldHidden = hidden;
+		hidden = newHidden;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_COLUMN__HIDDEN, oldHidden, hidden));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getSecurityLabel() {
+		return securityLabel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSecurityLabel(String newSecurityLabel) {
+		String oldSecurityLabel = securityLabel;
+		securityLabel = newSecurityLabel;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_COLUMN__SECURITY_LABEL, oldSecurityLabel, securityLabel));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getOptions() {
+		if (options == null) {
+			options = new EObjectContainmentEList(LUWOption.class, this, LUWPackage.LUW_COLUMN__OPTIONS);
+		}
+		return options;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_COLUMN__OPTIONS:
+				return ((InternalEList)getOptions()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_COLUMN__LOB_LOGGED:
+				return isLobLogged() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_COLUMN__LOB_COMPACTED:
+				return isLobCompacted() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_COLUMN__COMPRESSION:
+				return getCompression();
+			case LUWPackage.LUW_COLUMN__INLINE_LENGTH:
+				return new Integer(getInlineLength());
+			case LUWPackage.LUW_COLUMN__HIDDEN:
+				return isHidden() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_COLUMN__SECURITY_LABEL:
+				return getSecurityLabel();
+			case LUWPackage.LUW_COLUMN__OPTIONS:
+				return getOptions();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_COLUMN__LOB_LOGGED:
+				setLobLogged(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_COLUMN__LOB_COMPACTED:
+				setLobCompacted(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_COLUMN__COMPRESSION:
+				setCompression((String)newValue);
+				return;
+			case LUWPackage.LUW_COLUMN__INLINE_LENGTH:
+				setInlineLength(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.LUW_COLUMN__HIDDEN:
+				setHidden(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_COLUMN__SECURITY_LABEL:
+				setSecurityLabel((String)newValue);
+				return;
+			case LUWPackage.LUW_COLUMN__OPTIONS:
+				getOptions().clear();
+				getOptions().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_COLUMN__LOB_LOGGED:
+				setLobLogged(LOB_LOGGED_EDEFAULT);
+				return;
+			case LUWPackage.LUW_COLUMN__LOB_COMPACTED:
+				setLobCompacted(LOB_COMPACTED_EDEFAULT);
+				return;
+			case LUWPackage.LUW_COLUMN__COMPRESSION:
+				setCompression(COMPRESSION_EDEFAULT);
+				return;
+			case LUWPackage.LUW_COLUMN__INLINE_LENGTH:
+				setInlineLength(INLINE_LENGTH_EDEFAULT);
+				return;
+			case LUWPackage.LUW_COLUMN__HIDDEN:
+				setHidden(HIDDEN_EDEFAULT);
+				return;
+			case LUWPackage.LUW_COLUMN__SECURITY_LABEL:
+				setSecurityLabel(SECURITY_LABEL_EDEFAULT);
+				return;
+			case LUWPackage.LUW_COLUMN__OPTIONS:
+				getOptions().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_COLUMN__LOB_LOGGED:
+				return lobLogged != LOB_LOGGED_EDEFAULT;
+			case LUWPackage.LUW_COLUMN__LOB_COMPACTED:
+				return lobCompacted != LOB_COMPACTED_EDEFAULT;
+			case LUWPackage.LUW_COLUMN__COMPRESSION:
+				return COMPRESSION_EDEFAULT == null ? compression != null : !COMPRESSION_EDEFAULT.equals(compression);
+			case LUWPackage.LUW_COLUMN__INLINE_LENGTH:
+				return inlineLength != INLINE_LENGTH_EDEFAULT;
+			case LUWPackage.LUW_COLUMN__HIDDEN:
+				return hidden != HIDDEN_EDEFAULT;
+			case LUWPackage.LUW_COLUMN__SECURITY_LABEL:
+				return SECURITY_LABEL_EDEFAULT == null ? securityLabel != null : !SECURITY_LABEL_EDEFAULT.equals(securityLabel);
+			case LUWPackage.LUW_COLUMN__OPTIONS:
+				return options != null && !options.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (lobLogged: "); //$NON-NLS-1$
+		result.append(lobLogged);
+		result.append(", lobCompacted: "); //$NON-NLS-1$
+		result.append(lobCompacted);
+		result.append(", compression: "); //$NON-NLS-1$
+		result.append(compression);
+		result.append(", inlineLength: "); //$NON-NLS-1$
+		result.append(inlineLength);
+		result.append(", hidden: "); //$NON-NLS-1$
+		result.append(hidden);
+		result.append(", securityLabel: "); //$NON-NLS-1$
+		result.append(securityLabel);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWColumnImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWCursorDataTypeImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWCursorDataTypeImpl.java
new file mode 100644
index 0000000..a30dea8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWCursorDataTypeImpl.java
@@ -0,0 +1,157 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWCursorDataTypeImpl.java,v 1.1 2009/02/27 18:42:01 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWCursorDataType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRowDataType;
+
+import org.eclipse.datatools.modelbase.sql.datatypes.impl.UserDefinedTypeImpl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Cursor Data Type</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWCursorDataTypeImpl#getRowType <em>Row Type</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWCursorDataTypeImpl extends UserDefinedTypeImpl implements LUWCursorDataType {
+	/**
+	 * The cached value of the '{@link #getRowType() <em>Row Type</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRowType()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWRowDataType rowType;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWCursorDataTypeImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_CURSOR_DATA_TYPE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWRowDataType getRowType() {
+		if (rowType != null && rowType.eIsProxy()) {
+			InternalEObject oldRowType = (InternalEObject)rowType;
+			rowType = (LUWRowDataType)eResolveProxy(oldRowType);
+			if (rowType != oldRowType) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_CURSOR_DATA_TYPE__ROW_TYPE, oldRowType, rowType));
+			}
+		}
+		return rowType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWRowDataType basicGetRowType() {
+		return rowType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRowType(LUWRowDataType newRowType) {
+		LUWRowDataType oldRowType = rowType;
+		rowType = newRowType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_CURSOR_DATA_TYPE__ROW_TYPE, oldRowType, rowType));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_CURSOR_DATA_TYPE__ROW_TYPE:
+				if (resolve) return getRowType();
+				return basicGetRowType();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_CURSOR_DATA_TYPE__ROW_TYPE:
+				setRowType((LUWRowDataType)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_CURSOR_DATA_TYPE__ROW_TYPE:
+				setRowType((LUWRowDataType)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_CURSOR_DATA_TYPE__ROW_TYPE:
+				return rowType != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //LUWCursorDataTypeImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWDataPartitionImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWDataPartitionImpl.java
new file mode 100644
index 0000000..c5112d7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWDataPartitionImpl.java
@@ -0,0 +1,674 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWDataPartitionImpl.java,v 1.9 2008/02/05 02:01:23 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Data Partition</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDataPartitionImpl#getId <em>Id</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDataPartitionImpl#isLowInclusive <em>Low Inclusive</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDataPartitionImpl#isHighInclusive <em>High Inclusive</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDataPartitionImpl#getLOBDataTableSpace <em>LOB Data Table Space</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDataPartitionImpl#getRegularDataTableSpace <em>Regular Data Table Space</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDataPartitionImpl#getPartitionElements <em>Partition Elements</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDataPartitionImpl#getTable <em>Table</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDataPartitionImpl#getIndexDataTableSpace <em>Index Data Table Space</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWDataPartitionImpl extends SQLObjectImpl implements LUWDataPartition {
+	/**
+	 * The default value of the '{@link #getId() <em>Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getId()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int ID_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getId() <em>Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getId()
+	 * @generated
+	 * @ordered
+	 */
+	protected int id = ID_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isLowInclusive() <em>Low Inclusive</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isLowInclusive()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean LOW_INCLUSIVE_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isLowInclusive() <em>Low Inclusive</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isLowInclusive()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean lowInclusive = LOW_INCLUSIVE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isHighInclusive() <em>High Inclusive</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isHighInclusive()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean HIGH_INCLUSIVE_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isHighInclusive() <em>High Inclusive</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isHighInclusive()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean highInclusive = HIGH_INCLUSIVE_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getLOBDataTableSpace() <em>LOB Data Table Space</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLOBDataTableSpace()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWTableSpace lobDataTableSpace;
+
+	/**
+	 * The cached value of the '{@link #getRegularDataTableSpace() <em>Regular Data Table Space</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRegularDataTableSpace()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWTableSpace regularDataTableSpace;
+
+	/**
+	 * The cached value of the '{@link #getPartitionElements() <em>Partition Elements</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPartitionElements()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList partitionElements;
+
+	/**
+	 * The cached value of the '{@link #getIndexDataTableSpace() <em>Index Data Table Space</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIndexDataTableSpace()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWTableSpace indexDataTableSpace;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWDataPartitionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_DATA_PARTITION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getId() {
+		return id;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setId(int newId) {
+		int oldId = id;
+		id = newId;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATA_PARTITION__ID, oldId, id));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isLowInclusive() {
+		return lowInclusive;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLowInclusive(boolean newLowInclusive) {
+		boolean oldLowInclusive = lowInclusive;
+		lowInclusive = newLowInclusive;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATA_PARTITION__LOW_INCLUSIVE, oldLowInclusive, lowInclusive));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isHighInclusive() {
+		return highInclusive;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setHighInclusive(boolean newHighInclusive) {
+		boolean oldHighInclusive = highInclusive;
+		highInclusive = newHighInclusive;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATA_PARTITION__HIGH_INCLUSIVE, oldHighInclusive, highInclusive));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTableSpace getLOBDataTableSpace() {
+		if (lobDataTableSpace != null && lobDataTableSpace.eIsProxy()) {
+			InternalEObject oldLOBDataTableSpace = (InternalEObject)lobDataTableSpace;
+			lobDataTableSpace = (LUWTableSpace)eResolveProxy(oldLOBDataTableSpace);
+			if (lobDataTableSpace != oldLOBDataTableSpace) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_DATA_PARTITION__LOB_DATA_TABLE_SPACE, oldLOBDataTableSpace, lobDataTableSpace));
+			}
+		}
+		return lobDataTableSpace;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTableSpace basicGetLOBDataTableSpace() {
+		return lobDataTableSpace;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetLOBDataTableSpace(LUWTableSpace newLOBDataTableSpace, NotificationChain msgs) {
+		LUWTableSpace oldLOBDataTableSpace = lobDataTableSpace;
+		lobDataTableSpace = newLOBDataTableSpace;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATA_PARTITION__LOB_DATA_TABLE_SPACE, oldLOBDataTableSpace, newLOBDataTableSpace);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLOBDataTableSpace(LUWTableSpace newLOBDataTableSpace) {
+		if (newLOBDataTableSpace != lobDataTableSpace) {
+			NotificationChain msgs = null;
+			if (lobDataTableSpace != null)
+				msgs = ((InternalEObject)lobDataTableSpace).eInverseRemove(this, LUWPackage.LUW_TABLE_SPACE__LOB_DATA_PARTITION, LUWTableSpace.class, msgs);
+			if (newLOBDataTableSpace != null)
+				msgs = ((InternalEObject)newLOBDataTableSpace).eInverseAdd(this, LUWPackage.LUW_TABLE_SPACE__LOB_DATA_PARTITION, LUWTableSpace.class, msgs);
+			msgs = basicSetLOBDataTableSpace(newLOBDataTableSpace, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATA_PARTITION__LOB_DATA_TABLE_SPACE, newLOBDataTableSpace, newLOBDataTableSpace));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTableSpace getRegularDataTableSpace() {
+		if (regularDataTableSpace != null && regularDataTableSpace.eIsProxy()) {
+			InternalEObject oldRegularDataTableSpace = (InternalEObject)regularDataTableSpace;
+			regularDataTableSpace = (LUWTableSpace)eResolveProxy(oldRegularDataTableSpace);
+			if (regularDataTableSpace != oldRegularDataTableSpace) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_DATA_PARTITION__REGULAR_DATA_TABLE_SPACE, oldRegularDataTableSpace, regularDataTableSpace));
+			}
+		}
+		return regularDataTableSpace;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTableSpace basicGetRegularDataTableSpace() {
+		return regularDataTableSpace;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetRegularDataTableSpace(LUWTableSpace newRegularDataTableSpace, NotificationChain msgs) {
+		LUWTableSpace oldRegularDataTableSpace = regularDataTableSpace;
+		regularDataTableSpace = newRegularDataTableSpace;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATA_PARTITION__REGULAR_DATA_TABLE_SPACE, oldRegularDataTableSpace, newRegularDataTableSpace);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRegularDataTableSpace(LUWTableSpace newRegularDataTableSpace) {
+		if (newRegularDataTableSpace != regularDataTableSpace) {
+			NotificationChain msgs = null;
+			if (regularDataTableSpace != null)
+				msgs = ((InternalEObject)regularDataTableSpace).eInverseRemove(this, LUWPackage.LUW_TABLE_SPACE__REGULAR_DATA_PARTITION, LUWTableSpace.class, msgs);
+			if (newRegularDataTableSpace != null)
+				msgs = ((InternalEObject)newRegularDataTableSpace).eInverseAdd(this, LUWPackage.LUW_TABLE_SPACE__REGULAR_DATA_PARTITION, LUWTableSpace.class, msgs);
+			msgs = basicSetRegularDataTableSpace(newRegularDataTableSpace, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATA_PARTITION__REGULAR_DATA_TABLE_SPACE, newRegularDataTableSpace, newRegularDataTableSpace));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getPartitionElements() {
+		if (partitionElements == null) {
+			partitionElements = new EObjectWithInverseResolvingEList(LUWPartitionElement.class, this, LUWPackage.LUW_DATA_PARTITION__PARTITION_ELEMENTS, LUWPackage.LUW_PARTITION_ELEMENT__PARTITION);
+		}
+		return partitionElements;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWStorageTable getTable() {
+		if (eContainerFeatureID() != LUWPackage.LUW_DATA_PARTITION__TABLE) return null;
+		return (LUWStorageTable)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetTable(LUWStorageTable newTable, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newTable, LUWPackage.LUW_DATA_PARTITION__TABLE, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTable(LUWStorageTable newTable) {
+		if (newTable != eInternalContainer() || (eContainerFeatureID() != LUWPackage.LUW_DATA_PARTITION__TABLE && newTable != null)) {
+			if (EcoreUtil.isAncestor(this, newTable))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newTable != null)
+				msgs = ((InternalEObject)newTable).eInverseAdd(this, LUWPackage.LUW_STORAGE_TABLE__DATA_PARTITIONS, LUWStorageTable.class, msgs);
+			msgs = basicSetTable(newTable, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATA_PARTITION__TABLE, newTable, newTable));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTableSpace getIndexDataTableSpace() {
+		if (indexDataTableSpace != null && indexDataTableSpace.eIsProxy()) {
+			InternalEObject oldIndexDataTableSpace = (InternalEObject)indexDataTableSpace;
+			indexDataTableSpace = (LUWTableSpace)eResolveProxy(oldIndexDataTableSpace);
+			if (indexDataTableSpace != oldIndexDataTableSpace) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_DATA_PARTITION__INDEX_DATA_TABLE_SPACE, oldIndexDataTableSpace, indexDataTableSpace));
+			}
+		}
+		return indexDataTableSpace;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTableSpace basicGetIndexDataTableSpace() {
+		return indexDataTableSpace;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetIndexDataTableSpace(LUWTableSpace newIndexDataTableSpace, NotificationChain msgs) {
+		LUWTableSpace oldIndexDataTableSpace = indexDataTableSpace;
+		indexDataTableSpace = newIndexDataTableSpace;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATA_PARTITION__INDEX_DATA_TABLE_SPACE, oldIndexDataTableSpace, newIndexDataTableSpace);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIndexDataTableSpace(LUWTableSpace newIndexDataTableSpace) {
+		if (newIndexDataTableSpace != indexDataTableSpace) {
+			NotificationChain msgs = null;
+			if (indexDataTableSpace != null)
+				msgs = ((InternalEObject)indexDataTableSpace).eInverseRemove(this, LUWPackage.LUW_TABLE_SPACE__INDEX_DATA_PARTITION, LUWTableSpace.class, msgs);
+			if (newIndexDataTableSpace != null)
+				msgs = ((InternalEObject)newIndexDataTableSpace).eInverseAdd(this, LUWPackage.LUW_TABLE_SPACE__INDEX_DATA_PARTITION, LUWTableSpace.class, msgs);
+			msgs = basicSetIndexDataTableSpace(newIndexDataTableSpace, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATA_PARTITION__INDEX_DATA_TABLE_SPACE, newIndexDataTableSpace, newIndexDataTableSpace));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATA_PARTITION__LOB_DATA_TABLE_SPACE:
+				if (lobDataTableSpace != null)
+					msgs = ((InternalEObject)lobDataTableSpace).eInverseRemove(this, LUWPackage.LUW_TABLE_SPACE__LOB_DATA_PARTITION, LUWTableSpace.class, msgs);
+				return basicSetLOBDataTableSpace((LUWTableSpace)otherEnd, msgs);
+			case LUWPackage.LUW_DATA_PARTITION__REGULAR_DATA_TABLE_SPACE:
+				if (regularDataTableSpace != null)
+					msgs = ((InternalEObject)regularDataTableSpace).eInverseRemove(this, LUWPackage.LUW_TABLE_SPACE__REGULAR_DATA_PARTITION, LUWTableSpace.class, msgs);
+				return basicSetRegularDataTableSpace((LUWTableSpace)otherEnd, msgs);
+			case LUWPackage.LUW_DATA_PARTITION__PARTITION_ELEMENTS:
+				return ((InternalEList)getPartitionElements()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_DATA_PARTITION__TABLE:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetTable((LUWStorageTable)otherEnd, msgs);
+			case LUWPackage.LUW_DATA_PARTITION__INDEX_DATA_TABLE_SPACE:
+				if (indexDataTableSpace != null)
+					msgs = ((InternalEObject)indexDataTableSpace).eInverseRemove(this, LUWPackage.LUW_TABLE_SPACE__INDEX_DATA_PARTITION, LUWTableSpace.class, msgs);
+				return basicSetIndexDataTableSpace((LUWTableSpace)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATA_PARTITION__LOB_DATA_TABLE_SPACE:
+				return basicSetLOBDataTableSpace(null, msgs);
+			case LUWPackage.LUW_DATA_PARTITION__REGULAR_DATA_TABLE_SPACE:
+				return basicSetRegularDataTableSpace(null, msgs);
+			case LUWPackage.LUW_DATA_PARTITION__PARTITION_ELEMENTS:
+				return ((InternalEList)getPartitionElements()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_DATA_PARTITION__TABLE:
+				return basicSetTable(null, msgs);
+			case LUWPackage.LUW_DATA_PARTITION__INDEX_DATA_TABLE_SPACE:
+				return basicSetIndexDataTableSpace(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case LUWPackage.LUW_DATA_PARTITION__TABLE:
+				return eInternalContainer().eInverseRemove(this, LUWPackage.LUW_STORAGE_TABLE__DATA_PARTITIONS, LUWStorageTable.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATA_PARTITION__ID:
+				return new Integer(getId());
+			case LUWPackage.LUW_DATA_PARTITION__LOW_INCLUSIVE:
+				return isLowInclusive() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_DATA_PARTITION__HIGH_INCLUSIVE:
+				return isHighInclusive() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_DATA_PARTITION__LOB_DATA_TABLE_SPACE:
+				if (resolve) return getLOBDataTableSpace();
+				return basicGetLOBDataTableSpace();
+			case LUWPackage.LUW_DATA_PARTITION__REGULAR_DATA_TABLE_SPACE:
+				if (resolve) return getRegularDataTableSpace();
+				return basicGetRegularDataTableSpace();
+			case LUWPackage.LUW_DATA_PARTITION__PARTITION_ELEMENTS:
+				return getPartitionElements();
+			case LUWPackage.LUW_DATA_PARTITION__TABLE:
+				return getTable();
+			case LUWPackage.LUW_DATA_PARTITION__INDEX_DATA_TABLE_SPACE:
+				if (resolve) return getIndexDataTableSpace();
+				return basicGetIndexDataTableSpace();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATA_PARTITION__ID:
+				setId(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.LUW_DATA_PARTITION__LOW_INCLUSIVE:
+				setLowInclusive(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_DATA_PARTITION__HIGH_INCLUSIVE:
+				setHighInclusive(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_DATA_PARTITION__LOB_DATA_TABLE_SPACE:
+				setLOBDataTableSpace((LUWTableSpace)newValue);
+				return;
+			case LUWPackage.LUW_DATA_PARTITION__REGULAR_DATA_TABLE_SPACE:
+				setRegularDataTableSpace((LUWTableSpace)newValue);
+				return;
+			case LUWPackage.LUW_DATA_PARTITION__PARTITION_ELEMENTS:
+				getPartitionElements().clear();
+				getPartitionElements().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_DATA_PARTITION__TABLE:
+				setTable((LUWStorageTable)newValue);
+				return;
+			case LUWPackage.LUW_DATA_PARTITION__INDEX_DATA_TABLE_SPACE:
+				setIndexDataTableSpace((LUWTableSpace)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATA_PARTITION__ID:
+				setId(ID_EDEFAULT);
+				return;
+			case LUWPackage.LUW_DATA_PARTITION__LOW_INCLUSIVE:
+				setLowInclusive(LOW_INCLUSIVE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_DATA_PARTITION__HIGH_INCLUSIVE:
+				setHighInclusive(HIGH_INCLUSIVE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_DATA_PARTITION__LOB_DATA_TABLE_SPACE:
+				setLOBDataTableSpace((LUWTableSpace)null);
+				return;
+			case LUWPackage.LUW_DATA_PARTITION__REGULAR_DATA_TABLE_SPACE:
+				setRegularDataTableSpace((LUWTableSpace)null);
+				return;
+			case LUWPackage.LUW_DATA_PARTITION__PARTITION_ELEMENTS:
+				getPartitionElements().clear();
+				return;
+			case LUWPackage.LUW_DATA_PARTITION__TABLE:
+				setTable((LUWStorageTable)null);
+				return;
+			case LUWPackage.LUW_DATA_PARTITION__INDEX_DATA_TABLE_SPACE:
+				setIndexDataTableSpace((LUWTableSpace)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATA_PARTITION__ID:
+				return id != ID_EDEFAULT;
+			case LUWPackage.LUW_DATA_PARTITION__LOW_INCLUSIVE:
+				return lowInclusive != LOW_INCLUSIVE_EDEFAULT;
+			case LUWPackage.LUW_DATA_PARTITION__HIGH_INCLUSIVE:
+				return highInclusive != HIGH_INCLUSIVE_EDEFAULT;
+			case LUWPackage.LUW_DATA_PARTITION__LOB_DATA_TABLE_SPACE:
+				return lobDataTableSpace != null;
+			case LUWPackage.LUW_DATA_PARTITION__REGULAR_DATA_TABLE_SPACE:
+				return regularDataTableSpace != null;
+			case LUWPackage.LUW_DATA_PARTITION__PARTITION_ELEMENTS:
+				return partitionElements != null && !partitionElements.isEmpty();
+			case LUWPackage.LUW_DATA_PARTITION__TABLE:
+				return getTable() != null;
+			case LUWPackage.LUW_DATA_PARTITION__INDEX_DATA_TABLE_SPACE:
+				return indexDataTableSpace != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (id: "); //$NON-NLS-1$
+		result.append(id);
+		result.append(", lowInclusive: "); //$NON-NLS-1$
+		result.append(lowInclusive);
+		result.append(", highInclusive: "); //$NON-NLS-1$
+		result.append(highInclusive);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWDataPartitionImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWDataPartitionKeyImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWDataPartitionKeyImpl.java
new file mode 100644
index 0000000..15062c0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWDataPartitionKeyImpl.java
@@ -0,0 +1,303 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWDataPartitionKeyImpl.java,v 1.6 2008/02/05 02:01:23 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.DataPartitionMethod;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartitionKey;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionExpression;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Data Partition Key</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDataPartitionKeyImpl#getPartitionMethod <em>Partition Method</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDataPartitionKeyImpl#getPartitionExpressions <em>Partition Expressions</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDataPartitionKeyImpl#getTable <em>Table</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWDataPartitionKeyImpl extends EObjectImpl implements LUWDataPartitionKey {
+	/**
+	 * The default value of the '{@link #getPartitionMethod() <em>Partition Method</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPartitionMethod()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final DataPartitionMethod PARTITION_METHOD_EDEFAULT = DataPartitionMethod.RANGE_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getPartitionMethod() <em>Partition Method</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPartitionMethod()
+	 * @generated
+	 * @ordered
+	 */
+	protected DataPartitionMethod partitionMethod = PARTITION_METHOD_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getPartitionExpressions() <em>Partition Expressions</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPartitionExpressions()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList partitionExpressions;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWDataPartitionKeyImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_DATA_PARTITION_KEY;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DataPartitionMethod getPartitionMethod() {
+		return partitionMethod;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPartitionMethod(DataPartitionMethod newPartitionMethod) {
+		DataPartitionMethod oldPartitionMethod = partitionMethod;
+		partitionMethod = newPartitionMethod == null ? PARTITION_METHOD_EDEFAULT : newPartitionMethod;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATA_PARTITION_KEY__PARTITION_METHOD, oldPartitionMethod, partitionMethod));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getPartitionExpressions() {
+		if (partitionExpressions == null) {
+			partitionExpressions = new EObjectContainmentWithInverseEList(LUWPartitionExpression.class, this, LUWPackage.LUW_DATA_PARTITION_KEY__PARTITION_EXPRESSIONS, LUWPackage.LUW_PARTITION_EXPRESSION__KEY);
+		}
+		return partitionExpressions;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWStorageTable getTable() {
+		if (eContainerFeatureID() != LUWPackage.LUW_DATA_PARTITION_KEY__TABLE) return null;
+		return (LUWStorageTable)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetTable(LUWStorageTable newTable, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newTable, LUWPackage.LUW_DATA_PARTITION_KEY__TABLE, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTable(LUWStorageTable newTable) {
+		if (newTable != eInternalContainer() || (eContainerFeatureID() != LUWPackage.LUW_DATA_PARTITION_KEY__TABLE && newTable != null)) {
+			if (EcoreUtil.isAncestor(this, newTable))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newTable != null)
+				msgs = ((InternalEObject)newTable).eInverseAdd(this, LUWPackage.LUW_STORAGE_TABLE__DATA_PARTITION_KEY, LUWStorageTable.class, msgs);
+			msgs = basicSetTable(newTable, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATA_PARTITION_KEY__TABLE, newTable, newTable));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATA_PARTITION_KEY__PARTITION_EXPRESSIONS:
+				return ((InternalEList)getPartitionExpressions()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_DATA_PARTITION_KEY__TABLE:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetTable((LUWStorageTable)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATA_PARTITION_KEY__PARTITION_EXPRESSIONS:
+				return ((InternalEList)getPartitionExpressions()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_DATA_PARTITION_KEY__TABLE:
+				return basicSetTable(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case LUWPackage.LUW_DATA_PARTITION_KEY__TABLE:
+				return eInternalContainer().eInverseRemove(this, LUWPackage.LUW_STORAGE_TABLE__DATA_PARTITION_KEY, LUWStorageTable.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATA_PARTITION_KEY__PARTITION_METHOD:
+				return getPartitionMethod();
+			case LUWPackage.LUW_DATA_PARTITION_KEY__PARTITION_EXPRESSIONS:
+				return getPartitionExpressions();
+			case LUWPackage.LUW_DATA_PARTITION_KEY__TABLE:
+				return getTable();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATA_PARTITION_KEY__PARTITION_METHOD:
+				setPartitionMethod((DataPartitionMethod)newValue);
+				return;
+			case LUWPackage.LUW_DATA_PARTITION_KEY__PARTITION_EXPRESSIONS:
+				getPartitionExpressions().clear();
+				getPartitionExpressions().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_DATA_PARTITION_KEY__TABLE:
+				setTable((LUWStorageTable)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATA_PARTITION_KEY__PARTITION_METHOD:
+				setPartitionMethod(PARTITION_METHOD_EDEFAULT);
+				return;
+			case LUWPackage.LUW_DATA_PARTITION_KEY__PARTITION_EXPRESSIONS:
+				getPartitionExpressions().clear();
+				return;
+			case LUWPackage.LUW_DATA_PARTITION_KEY__TABLE:
+				setTable((LUWStorageTable)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATA_PARTITION_KEY__PARTITION_METHOD:
+				return partitionMethod != PARTITION_METHOD_EDEFAULT;
+			case LUWPackage.LUW_DATA_PARTITION_KEY__PARTITION_EXPRESSIONS:
+				return partitionExpressions != null && !partitionExpressions.isEmpty();
+			case LUWPackage.LUW_DATA_PARTITION_KEY__TABLE:
+				return getTable() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (partitionMethod: "); //$NON-NLS-1$
+		result.append(partitionMethod);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWDataPartitionKeyImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWDatabaseContainerImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWDatabaseContainerImpl.java
new file mode 100644
index 0000000..91a1785
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWDatabaseContainerImpl.java
@@ -0,0 +1,464 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.datatools.enablement.ibm.db2.model.UnitType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWContainerType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace;
+import java.util.Collection;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Database Container</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabaseContainerImpl#getContainerType <em>Container Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabaseContainerImpl#getSizeInPages <em>Size In Pages</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabaseContainerImpl#getSize <em>Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabaseContainerImpl#getSizeUnits <em>Size Units</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabaseContainerImpl#getTableSpace <em>Table Space</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabaseContainerImpl#getPartitions <em>Partitions</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWDatabaseContainerImpl extends SQLObjectImpl implements LUWDatabaseContainer {
+	/**
+	 * The default value of the '{@link #getContainerType() <em>Container Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getContainerType()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final LUWContainerType CONTAINER_TYPE_EDEFAULT = LUWContainerType.DEVICE_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getContainerType() <em>Container Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getContainerType()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWContainerType containerType = CONTAINER_TYPE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getSizeInPages() <em>Size In Pages</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSizeInPages()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int SIZE_IN_PAGES_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getSizeInPages() <em>Size In Pages</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSizeInPages()
+	 * @generated
+	 * @ordered
+	 */
+	protected int sizeInPages = SIZE_IN_PAGES_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getSize() <em>Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int SIZE_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getSize() <em>Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected int size = SIZE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getSizeUnits() <em>Size Units</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSizeUnits()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final UnitType SIZE_UNITS_EDEFAULT = UnitType.K_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getSizeUnits() <em>Size Units</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSizeUnits()
+	 * @generated
+	 * @ordered
+	 */
+	protected UnitType sizeUnits = SIZE_UNITS_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getPartitions() <em>Partitions</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPartitions()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList partitions;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWDatabaseContainerImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_DATABASE_CONTAINER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWContainerType getContainerType() {
+		return containerType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setContainerType(LUWContainerType newContainerType) {
+		LUWContainerType oldContainerType = containerType;
+		containerType = newContainerType == null ? CONTAINER_TYPE_EDEFAULT : newContainerType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATABASE_CONTAINER__CONTAINER_TYPE, oldContainerType, containerType));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getSizeInPages() {
+		return sizeInPages;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSizeInPages(int newSizeInPages) {
+		int oldSizeInPages = sizeInPages;
+		sizeInPages = newSizeInPages;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATABASE_CONTAINER__SIZE_IN_PAGES, oldSizeInPages, sizeInPages));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getSize() {
+		return size;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSize(int newSize) {
+		int oldSize = size;
+		size = newSize;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATABASE_CONTAINER__SIZE, oldSize, size));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public UnitType getSizeUnits() {
+		return sizeUnits;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSizeUnits(UnitType newSizeUnits) {
+		UnitType oldSizeUnits = sizeUnits;
+		sizeUnits = newSizeUnits == null ? SIZE_UNITS_EDEFAULT : newSizeUnits;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATABASE_CONTAINER__SIZE_UNITS, oldSizeUnits, sizeUnits));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTableSpace getTableSpace() {
+		if (eContainerFeatureID() != LUWPackage.LUW_DATABASE_CONTAINER__TABLE_SPACE) return null;
+		return (LUWTableSpace)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetTableSpace(LUWTableSpace newTableSpace, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newTableSpace, LUWPackage.LUW_DATABASE_CONTAINER__TABLE_SPACE, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTableSpace(LUWTableSpace newTableSpace) {
+		if (newTableSpace != eInternalContainer() || (eContainerFeatureID() != LUWPackage.LUW_DATABASE_CONTAINER__TABLE_SPACE && newTableSpace != null)) {
+			if (EcoreUtil.isAncestor(this, newTableSpace))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newTableSpace != null)
+				msgs = ((InternalEObject)newTableSpace).eInverseAdd(this, LUWPackage.LUW_TABLE_SPACE__CONTAINERS, LUWTableSpace.class, msgs);
+			msgs = basicSetTableSpace(newTableSpace, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATABASE_CONTAINER__TABLE_SPACE, newTableSpace, newTableSpace));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getPartitions() {
+		if (partitions == null) {
+			partitions = new EObjectWithInverseResolvingEList.ManyInverse(LUWDatabasePartition.class, this, LUWPackage.LUW_DATABASE_CONTAINER__PARTITIONS, LUWPackage.LUW_DATABASE_PARTITION__CONTAINERS);
+		}
+		return partitions;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATABASE_CONTAINER__TABLE_SPACE:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetTableSpace((LUWTableSpace)otherEnd, msgs);
+			case LUWPackage.LUW_DATABASE_CONTAINER__PARTITIONS:
+				return ((InternalEList)getPartitions()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATABASE_CONTAINER__TABLE_SPACE:
+				return basicSetTableSpace(null, msgs);
+			case LUWPackage.LUW_DATABASE_CONTAINER__PARTITIONS:
+				return ((InternalEList)getPartitions()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case LUWPackage.LUW_DATABASE_CONTAINER__TABLE_SPACE:
+				return eInternalContainer().eInverseRemove(this, LUWPackage.LUW_TABLE_SPACE__CONTAINERS, LUWTableSpace.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATABASE_CONTAINER__CONTAINER_TYPE:
+				return getContainerType();
+			case LUWPackage.LUW_DATABASE_CONTAINER__SIZE_IN_PAGES:
+				return new Integer(getSizeInPages());
+			case LUWPackage.LUW_DATABASE_CONTAINER__SIZE:
+				return new Integer(getSize());
+			case LUWPackage.LUW_DATABASE_CONTAINER__SIZE_UNITS:
+				return getSizeUnits();
+			case LUWPackage.LUW_DATABASE_CONTAINER__TABLE_SPACE:
+				return getTableSpace();
+			case LUWPackage.LUW_DATABASE_CONTAINER__PARTITIONS:
+				return getPartitions();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATABASE_CONTAINER__CONTAINER_TYPE:
+				setContainerType((LUWContainerType)newValue);
+				return;
+			case LUWPackage.LUW_DATABASE_CONTAINER__SIZE_IN_PAGES:
+				setSizeInPages(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.LUW_DATABASE_CONTAINER__SIZE:
+				setSize(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.LUW_DATABASE_CONTAINER__SIZE_UNITS:
+				setSizeUnits((UnitType)newValue);
+				return;
+			case LUWPackage.LUW_DATABASE_CONTAINER__TABLE_SPACE:
+				setTableSpace((LUWTableSpace)newValue);
+				return;
+			case LUWPackage.LUW_DATABASE_CONTAINER__PARTITIONS:
+				getPartitions().clear();
+				getPartitions().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATABASE_CONTAINER__CONTAINER_TYPE:
+				setContainerType(CONTAINER_TYPE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_DATABASE_CONTAINER__SIZE_IN_PAGES:
+				setSizeInPages(SIZE_IN_PAGES_EDEFAULT);
+				return;
+			case LUWPackage.LUW_DATABASE_CONTAINER__SIZE:
+				setSize(SIZE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_DATABASE_CONTAINER__SIZE_UNITS:
+				setSizeUnits(SIZE_UNITS_EDEFAULT);
+				return;
+			case LUWPackage.LUW_DATABASE_CONTAINER__TABLE_SPACE:
+				setTableSpace((LUWTableSpace)null);
+				return;
+			case LUWPackage.LUW_DATABASE_CONTAINER__PARTITIONS:
+				getPartitions().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATABASE_CONTAINER__CONTAINER_TYPE:
+				return containerType != CONTAINER_TYPE_EDEFAULT;
+			case LUWPackage.LUW_DATABASE_CONTAINER__SIZE_IN_PAGES:
+				return sizeInPages != SIZE_IN_PAGES_EDEFAULT;
+			case LUWPackage.LUW_DATABASE_CONTAINER__SIZE:
+				return size != SIZE_EDEFAULT;
+			case LUWPackage.LUW_DATABASE_CONTAINER__SIZE_UNITS:
+				return sizeUnits != SIZE_UNITS_EDEFAULT;
+			case LUWPackage.LUW_DATABASE_CONTAINER__TABLE_SPACE:
+				return getTableSpace() != null;
+			case LUWPackage.LUW_DATABASE_CONTAINER__PARTITIONS:
+				return partitions != null && !partitions.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (containerType: "); //$NON-NLS-1$
+		result.append(containerType);
+		result.append(", sizeInPages: "); //$NON-NLS-1$
+		result.append(sizeInPages);
+		result.append(", size: "); //$NON-NLS-1$
+		result.append(size);
+		result.append(", sizeUnits: "); //$NON-NLS-1$
+		result.append(sizeUnits);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWDatabaseContainerImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWDatabaseImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWDatabaseImpl.java
new file mode 100644
index 0000000..f4891f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWDatabaseImpl.java
@@ -0,0 +1,592 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2DatabaseImpl;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Database</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabaseImpl#isFederated <em>Federated</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabaseImpl#getGroups <em>Groups</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabaseImpl#getWrappers <em>Wrappers</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabaseImpl#getServers <em>Servers</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabaseImpl#getFunctionMappings <em>Function Mappings</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabaseImpl#getTypeMappings <em>Type Mappings</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabaseImpl#getReverseTypeMappings <em>Reverse Type Mappings</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabaseImpl#getBufferpools <em>Bufferpools</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabaseImpl#getTablespaces <em>Tablespaces</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabaseImpl#getStorageGroups <em>Storage Groups</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabaseImpl#getDefaultStorageGroup <em>Default Storage Group</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWDatabaseImpl extends DB2DatabaseImpl implements LUWDatabase {
+	/**
+	 * The default value of the '{@link #isFederated() <em>Federated</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isFederated()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean FEDERATED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isFederated() <em>Federated</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isFederated()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean federated = FEDERATED_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getGroups() <em>Groups</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getGroups()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList groups;
+
+	/**
+	 * The cached value of the '{@link #getWrappers() <em>Wrappers</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getWrappers()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList wrappers;
+
+	/**
+	 * The cached value of the '{@link #getServers() <em>Servers</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getServers()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList servers;
+
+	/**
+	 * The cached value of the '{@link #getFunctionMappings() <em>Function Mappings</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFunctionMappings()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList functionMappings;
+
+	/**
+	 * The cached value of the '{@link #getTypeMappings() <em>Type Mappings</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTypeMappings()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList typeMappings;
+
+	/**
+	 * The cached value of the '{@link #getReverseTypeMappings() <em>Reverse Type Mappings</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getReverseTypeMappings()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList reverseTypeMappings;
+
+	/**
+	 * The cached value of the '{@link #getBufferpools() <em>Bufferpools</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBufferpools()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList bufferpools;
+
+	/**
+	 * The cached value of the '{@link #getTablespaces() <em>Tablespaces</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTablespaces()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList tablespaces;
+
+	/**
+	 * The cached value of the '{@link #getStorageGroups() <em>Storage Groups</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getStorageGroups()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList storageGroups;
+
+	/**
+	 * The cached value of the '{@link #getDefaultStorageGroup() <em>Default Storage Group</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDefaultStorageGroup()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWStorageGroup defaultStorageGroup;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWDatabaseImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_DATABASE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isFederated() {
+		return federated;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFederated(boolean newFederated) {
+		boolean oldFederated = federated;
+		federated = newFederated;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATABASE__FEDERATED, oldFederated, federated));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getGroups() {
+		if (groups == null) {
+			groups = new EObjectWithInverseResolvingEList(LUWPartitionGroup.class, this, LUWPackage.LUW_DATABASE__GROUPS, LUWPackage.LUW_PARTITION_GROUP__DATABASE);
+		}
+		return groups;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getWrappers() {
+		if (wrappers == null) {
+			wrappers = new EObjectWithInverseResolvingEList(LUWWrapper.class, this, LUWPackage.LUW_DATABASE__WRAPPERS, LUWPackage.LUW_WRAPPER__LUW_DATABASE);
+		}
+		return wrappers;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getServers() {
+		if (servers == null) {
+			servers = new EObjectWithInverseResolvingEList(LUWServer.class, this, LUWPackage.LUW_DATABASE__SERVERS, LUWPackage.LUW_SERVER__LUW_DATABASE);
+		}
+		return servers;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getFunctionMappings() {
+		if (functionMappings == null) {
+			functionMappings = new EObjectWithInverseResolvingEList(LUWFunctionMapping.class, this, LUWPackage.LUW_DATABASE__FUNCTION_MAPPINGS, LUWPackage.LUW_FUNCTION_MAPPING__LUW_DATABASE);
+		}
+		return functionMappings;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getTypeMappings() {
+		if (typeMappings == null) {
+			typeMappings = new EObjectResolvingEList(LUWTypeMapping.class, this, LUWPackage.LUW_DATABASE__TYPE_MAPPINGS);
+		}
+		return typeMappings;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getReverseTypeMappings() {
+		if (reverseTypeMappings == null) {
+			reverseTypeMappings = new EObjectResolvingEList(LUWTypeMapping.class, this, LUWPackage.LUW_DATABASE__REVERSE_TYPE_MAPPINGS);
+		}
+		return reverseTypeMappings;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getBufferpools() {
+		if (bufferpools == null) {
+			bufferpools = new EObjectWithInverseResolvingEList(LUWBufferPool.class, this, LUWPackage.LUW_DATABASE__BUFFERPOOLS, LUWPackage.LUW_BUFFER_POOL__DATABASE);
+		}
+		return bufferpools;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getTablespaces() {
+		if (tablespaces == null) {
+			tablespaces = new EObjectWithInverseResolvingEList(LUWTableSpace.class, this, LUWPackage.LUW_DATABASE__TABLESPACES, LUWPackage.LUW_TABLE_SPACE__DATABASE);
+		}
+		return tablespaces;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getStorageGroups() {
+		if (storageGroups == null) {
+			storageGroups = new EObjectWithInverseResolvingEList(LUWStorageGroup.class, this, LUWPackage.LUW_DATABASE__STORAGE_GROUPS, LUWPackage.LUW_STORAGE_GROUP__DATABASE);
+		}
+		return storageGroups;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWStorageGroup getDefaultStorageGroup() {
+		if (defaultStorageGroup != null && defaultStorageGroup.eIsProxy()) {
+			InternalEObject oldDefaultStorageGroup = (InternalEObject)defaultStorageGroup;
+			defaultStorageGroup = (LUWStorageGroup)eResolveProxy(oldDefaultStorageGroup);
+			if (defaultStorageGroup != oldDefaultStorageGroup) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_DATABASE__DEFAULT_STORAGE_GROUP, oldDefaultStorageGroup, defaultStorageGroup));
+			}
+		}
+		return defaultStorageGroup;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWStorageGroup basicGetDefaultStorageGroup() {
+		return defaultStorageGroup;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDefaultStorageGroup(LUWStorageGroup newDefaultStorageGroup) {
+		LUWStorageGroup oldDefaultStorageGroup = defaultStorageGroup;
+		defaultStorageGroup = newDefaultStorageGroup;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATABASE__DEFAULT_STORAGE_GROUP, oldDefaultStorageGroup, defaultStorageGroup));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATABASE__GROUPS:
+				return ((InternalEList)getGroups()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_DATABASE__WRAPPERS:
+				return ((InternalEList)getWrappers()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_DATABASE__SERVERS:
+				return ((InternalEList)getServers()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_DATABASE__FUNCTION_MAPPINGS:
+				return ((InternalEList)getFunctionMappings()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_DATABASE__BUFFERPOOLS:
+				return ((InternalEList)getBufferpools()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_DATABASE__TABLESPACES:
+				return ((InternalEList)getTablespaces()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_DATABASE__STORAGE_GROUPS:
+				return ((InternalEList)getStorageGroups()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATABASE__GROUPS:
+				return ((InternalEList)getGroups()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_DATABASE__WRAPPERS:
+				return ((InternalEList)getWrappers()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_DATABASE__SERVERS:
+				return ((InternalEList)getServers()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_DATABASE__FUNCTION_MAPPINGS:
+				return ((InternalEList)getFunctionMappings()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_DATABASE__BUFFERPOOLS:
+				return ((InternalEList)getBufferpools()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_DATABASE__TABLESPACES:
+				return ((InternalEList)getTablespaces()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_DATABASE__STORAGE_GROUPS:
+				return ((InternalEList)getStorageGroups()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATABASE__FEDERATED:
+				return isFederated() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_DATABASE__GROUPS:
+				return getGroups();
+			case LUWPackage.LUW_DATABASE__WRAPPERS:
+				return getWrappers();
+			case LUWPackage.LUW_DATABASE__SERVERS:
+				return getServers();
+			case LUWPackage.LUW_DATABASE__FUNCTION_MAPPINGS:
+				return getFunctionMappings();
+			case LUWPackage.LUW_DATABASE__TYPE_MAPPINGS:
+				return getTypeMappings();
+			case LUWPackage.LUW_DATABASE__REVERSE_TYPE_MAPPINGS:
+				return getReverseTypeMappings();
+			case LUWPackage.LUW_DATABASE__BUFFERPOOLS:
+				return getBufferpools();
+			case LUWPackage.LUW_DATABASE__TABLESPACES:
+				return getTablespaces();
+			case LUWPackage.LUW_DATABASE__STORAGE_GROUPS:
+				return getStorageGroups();
+			case LUWPackage.LUW_DATABASE__DEFAULT_STORAGE_GROUP:
+				if (resolve) return getDefaultStorageGroup();
+				return basicGetDefaultStorageGroup();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATABASE__FEDERATED:
+				setFederated(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_DATABASE__GROUPS:
+				getGroups().clear();
+				getGroups().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_DATABASE__WRAPPERS:
+				getWrappers().clear();
+				getWrappers().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_DATABASE__SERVERS:
+				getServers().clear();
+				getServers().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_DATABASE__FUNCTION_MAPPINGS:
+				getFunctionMappings().clear();
+				getFunctionMappings().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_DATABASE__TYPE_MAPPINGS:
+				getTypeMappings().clear();
+				getTypeMappings().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_DATABASE__REVERSE_TYPE_MAPPINGS:
+				getReverseTypeMappings().clear();
+				getReverseTypeMappings().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_DATABASE__BUFFERPOOLS:
+				getBufferpools().clear();
+				getBufferpools().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_DATABASE__TABLESPACES:
+				getTablespaces().clear();
+				getTablespaces().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_DATABASE__STORAGE_GROUPS:
+				getStorageGroups().clear();
+				getStorageGroups().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_DATABASE__DEFAULT_STORAGE_GROUP:
+				setDefaultStorageGroup((LUWStorageGroup)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATABASE__FEDERATED:
+				setFederated(FEDERATED_EDEFAULT);
+				return;
+			case LUWPackage.LUW_DATABASE__GROUPS:
+				getGroups().clear();
+				return;
+			case LUWPackage.LUW_DATABASE__WRAPPERS:
+				getWrappers().clear();
+				return;
+			case LUWPackage.LUW_DATABASE__SERVERS:
+				getServers().clear();
+				return;
+			case LUWPackage.LUW_DATABASE__FUNCTION_MAPPINGS:
+				getFunctionMappings().clear();
+				return;
+			case LUWPackage.LUW_DATABASE__TYPE_MAPPINGS:
+				getTypeMappings().clear();
+				return;
+			case LUWPackage.LUW_DATABASE__REVERSE_TYPE_MAPPINGS:
+				getReverseTypeMappings().clear();
+				return;
+			case LUWPackage.LUW_DATABASE__BUFFERPOOLS:
+				getBufferpools().clear();
+				return;
+			case LUWPackage.LUW_DATABASE__TABLESPACES:
+				getTablespaces().clear();
+				return;
+			case LUWPackage.LUW_DATABASE__STORAGE_GROUPS:
+				getStorageGroups().clear();
+				return;
+			case LUWPackage.LUW_DATABASE__DEFAULT_STORAGE_GROUP:
+				setDefaultStorageGroup((LUWStorageGroup)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATABASE__FEDERATED:
+				return federated != FEDERATED_EDEFAULT;
+			case LUWPackage.LUW_DATABASE__GROUPS:
+				return groups != null && !groups.isEmpty();
+			case LUWPackage.LUW_DATABASE__WRAPPERS:
+				return wrappers != null && !wrappers.isEmpty();
+			case LUWPackage.LUW_DATABASE__SERVERS:
+				return servers != null && !servers.isEmpty();
+			case LUWPackage.LUW_DATABASE__FUNCTION_MAPPINGS:
+				return functionMappings != null && !functionMappings.isEmpty();
+			case LUWPackage.LUW_DATABASE__TYPE_MAPPINGS:
+				return typeMappings != null && !typeMappings.isEmpty();
+			case LUWPackage.LUW_DATABASE__REVERSE_TYPE_MAPPINGS:
+				return reverseTypeMappings != null && !reverseTypeMappings.isEmpty();
+			case LUWPackage.LUW_DATABASE__BUFFERPOOLS:
+				return bufferpools != null && !bufferpools.isEmpty();
+			case LUWPackage.LUW_DATABASE__TABLESPACES:
+				return tablespaces != null && !tablespaces.isEmpty();
+			case LUWPackage.LUW_DATABASE__STORAGE_GROUPS:
+				return storageGroups != null && !storageGroups.isEmpty();
+			case LUWPackage.LUW_DATABASE__DEFAULT_STORAGE_GROUP:
+				return defaultStorageGroup != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (federated: "); //$NON-NLS-1$
+		result.append(federated);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWDatabaseImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWDatabasePackageImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWDatabasePackageImpl.java
new file mode 100644
index 0000000..02da5b6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWDatabasePackageImpl.java
@@ -0,0 +1,421 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWDatabasePackageImpl.java,v 1.4 2009/03/16 21:08:36 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PackageImpl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.CursorBlockType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.ExplainSnaphotType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Database Package</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabasePackageImpl#getCreator <em>Creator</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabasePackageImpl#getBinder <em>Binder</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabasePackageImpl#getCursorBlock <em>Cursor Block</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabasePackageImpl#getNumberOfSections <em>Number Of Sections</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabasePackageImpl#getOptimizationClass <em>Optimization Class</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabasePackageImpl#getExplainSnapshot <em>Explain Snapshot</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWDatabasePackageImpl extends DB2PackageImpl implements LUWDatabasePackage {
+	/**
+	 * The default value of the '{@link #getCreator() <em>Creator</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCreator()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String CREATOR_EDEFAULT = null;
+	/**
+	 * The cached value of the '{@link #getCreator() <em>Creator</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCreator()
+	 * @generated
+	 * @ordered
+	 */
+	protected String creator = CREATOR_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getBinder() <em>Binder</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBinder()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String BINDER_EDEFAULT = null;
+	/**
+	 * The cached value of the '{@link #getBinder() <em>Binder</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBinder()
+	 * @generated
+	 * @ordered
+	 */
+	protected String binder = BINDER_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getCursorBlock() <em>Cursor Block</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCursorBlock()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final CursorBlockType CURSOR_BLOCK_EDEFAULT = CursorBlockType.BLOCK_UNAMBIGUOUS_CURSORS_LITERAL;
+	/**
+	 * The cached value of the '{@link #getCursorBlock() <em>Cursor Block</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCursorBlock()
+	 * @generated
+	 * @ordered
+	 */
+	protected CursorBlockType cursorBlock = CURSOR_BLOCK_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getNumberOfSections() <em>Number Of Sections</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNumberOfSections()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int NUMBER_OF_SECTIONS_EDEFAULT = 0;
+	/**
+	 * The cached value of the '{@link #getNumberOfSections() <em>Number Of Sections</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNumberOfSections()
+	 * @generated
+	 * @ordered
+	 */
+	protected int numberOfSections = NUMBER_OF_SECTIONS_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getOptimizationClass() <em>Optimization Class</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOptimizationClass()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int OPTIMIZATION_CLASS_EDEFAULT = 0;
+	/**
+	 * The cached value of the '{@link #getOptimizationClass() <em>Optimization Class</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOptimizationClass()
+	 * @generated
+	 * @ordered
+	 */
+	protected int optimizationClass = OPTIMIZATION_CLASS_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getExplainSnapshot() <em>Explain Snapshot</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getExplainSnapshot()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final ExplainSnaphotType EXPLAIN_SNAPSHOT_EDEFAULT = ExplainSnaphotType.ALL_LITERAL;
+	/**
+	 * The cached value of the '{@link #getExplainSnapshot() <em>Explain Snapshot</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getExplainSnapshot()
+	 * @generated
+	 * @ordered
+	 */
+	protected ExplainSnaphotType explainSnapshot = EXPLAIN_SNAPSHOT_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWDatabasePackageImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_DATABASE_PACKAGE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getCreator() {
+		return creator;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCreator(String newCreator) {
+		String oldCreator = creator;
+		creator = newCreator;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATABASE_PACKAGE__CREATOR, oldCreator, creator));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getBinder() {
+		return binder;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBinder(String newBinder) {
+		String oldBinder = binder;
+		binder = newBinder;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATABASE_PACKAGE__BINDER, oldBinder, binder));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CursorBlockType getCursorBlock() {
+		return cursorBlock;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCursorBlock(CursorBlockType newCursorBlock) {
+		CursorBlockType oldCursorBlock = cursorBlock;
+		cursorBlock = newCursorBlock == null ? CURSOR_BLOCK_EDEFAULT : newCursorBlock;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATABASE_PACKAGE__CURSOR_BLOCK, oldCursorBlock, cursorBlock));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getNumberOfSections() {
+		return numberOfSections;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setNumberOfSections(int newNumberOfSections) {
+		int oldNumberOfSections = numberOfSections;
+		numberOfSections = newNumberOfSections;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATABASE_PACKAGE__NUMBER_OF_SECTIONS, oldNumberOfSections, numberOfSections));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getOptimizationClass() {
+		return optimizationClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOptimizationClass(int newOptimizationClass) {
+		int oldOptimizationClass = optimizationClass;
+		optimizationClass = newOptimizationClass;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATABASE_PACKAGE__OPTIMIZATION_CLASS, oldOptimizationClass, optimizationClass));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExplainSnaphotType getExplainSnapshot() {
+		return explainSnapshot;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setExplainSnapshot(ExplainSnaphotType newExplainSnapshot) {
+		ExplainSnaphotType oldExplainSnapshot = explainSnapshot;
+		explainSnapshot = newExplainSnapshot == null ? EXPLAIN_SNAPSHOT_EDEFAULT : newExplainSnapshot;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATABASE_PACKAGE__EXPLAIN_SNAPSHOT, oldExplainSnapshot, explainSnapshot));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATABASE_PACKAGE__CREATOR:
+				return getCreator();
+			case LUWPackage.LUW_DATABASE_PACKAGE__BINDER:
+				return getBinder();
+			case LUWPackage.LUW_DATABASE_PACKAGE__CURSOR_BLOCK:
+				return getCursorBlock();
+			case LUWPackage.LUW_DATABASE_PACKAGE__NUMBER_OF_SECTIONS:
+				return new Integer(getNumberOfSections());
+			case LUWPackage.LUW_DATABASE_PACKAGE__OPTIMIZATION_CLASS:
+				return new Integer(getOptimizationClass());
+			case LUWPackage.LUW_DATABASE_PACKAGE__EXPLAIN_SNAPSHOT:
+				return getExplainSnapshot();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATABASE_PACKAGE__CREATOR:
+				setCreator((String)newValue);
+				return;
+			case LUWPackage.LUW_DATABASE_PACKAGE__BINDER:
+				setBinder((String)newValue);
+				return;
+			case LUWPackage.LUW_DATABASE_PACKAGE__CURSOR_BLOCK:
+				setCursorBlock((CursorBlockType)newValue);
+				return;
+			case LUWPackage.LUW_DATABASE_PACKAGE__NUMBER_OF_SECTIONS:
+				setNumberOfSections(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.LUW_DATABASE_PACKAGE__OPTIMIZATION_CLASS:
+				setOptimizationClass(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.LUW_DATABASE_PACKAGE__EXPLAIN_SNAPSHOT:
+				setExplainSnapshot((ExplainSnaphotType)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATABASE_PACKAGE__CREATOR:
+				setCreator(CREATOR_EDEFAULT);
+				return;
+			case LUWPackage.LUW_DATABASE_PACKAGE__BINDER:
+				setBinder(BINDER_EDEFAULT);
+				return;
+			case LUWPackage.LUW_DATABASE_PACKAGE__CURSOR_BLOCK:
+				setCursorBlock(CURSOR_BLOCK_EDEFAULT);
+				return;
+			case LUWPackage.LUW_DATABASE_PACKAGE__NUMBER_OF_SECTIONS:
+				setNumberOfSections(NUMBER_OF_SECTIONS_EDEFAULT);
+				return;
+			case LUWPackage.LUW_DATABASE_PACKAGE__OPTIMIZATION_CLASS:
+				setOptimizationClass(OPTIMIZATION_CLASS_EDEFAULT);
+				return;
+			case LUWPackage.LUW_DATABASE_PACKAGE__EXPLAIN_SNAPSHOT:
+				setExplainSnapshot(EXPLAIN_SNAPSHOT_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATABASE_PACKAGE__CREATOR:
+				return CREATOR_EDEFAULT == null ? creator != null : !CREATOR_EDEFAULT.equals(creator);
+			case LUWPackage.LUW_DATABASE_PACKAGE__BINDER:
+				return BINDER_EDEFAULT == null ? binder != null : !BINDER_EDEFAULT.equals(binder);
+			case LUWPackage.LUW_DATABASE_PACKAGE__CURSOR_BLOCK:
+				return cursorBlock != CURSOR_BLOCK_EDEFAULT;
+			case LUWPackage.LUW_DATABASE_PACKAGE__NUMBER_OF_SECTIONS:
+				return numberOfSections != NUMBER_OF_SECTIONS_EDEFAULT;
+			case LUWPackage.LUW_DATABASE_PACKAGE__OPTIMIZATION_CLASS:
+				return optimizationClass != OPTIMIZATION_CLASS_EDEFAULT;
+			case LUWPackage.LUW_DATABASE_PACKAGE__EXPLAIN_SNAPSHOT:
+				return explainSnapshot != EXPLAIN_SNAPSHOT_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (creator: "); //$NON-NLS-1$
+		result.append(creator);
+		result.append(", binder: "); //$NON-NLS-1$
+		result.append(binder);
+		result.append(", cursorBlock: "); //$NON-NLS-1$
+		result.append(cursorBlock);
+		result.append(", numberOfSections: "); //$NON-NLS-1$
+		result.append(numberOfSections);
+		result.append(", optimizationClass: "); //$NON-NLS-1$
+		result.append(optimizationClass);
+		result.append(", explainSnapshot: "); //$NON-NLS-1$
+		result.append(explainSnapshot);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWDatabasePackageImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWDatabasePartitionImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWDatabasePartitionImpl.java
new file mode 100644
index 0000000..c9b38dd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWDatabasePartitionImpl.java
@@ -0,0 +1,710 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPoolSizeException;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup;
+import java.util.Collection;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Database Partition</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabasePartitionImpl#getNumber <em>Number</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabasePartitionImpl#getPortNumber <em>Port Number</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabasePartitionImpl#getHostName <em>Host Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabasePartitionImpl#getSwitchName <em>Switch Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabasePartitionImpl#isCatalogPartition <em>Catalog Partition</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabasePartitionImpl#getGroup <em>Group</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabasePartitionImpl#getBufferPool <em>Buffer Pool</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabasePartitionImpl#getContainers <em>Containers</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWDatabasePartitionImpl#getSizeException <em>Size Exception</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWDatabasePartitionImpl extends SQLObjectImpl implements LUWDatabasePartition {
+	/**
+	 * The default value of the '{@link #getNumber() <em>Number</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNumber()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int NUMBER_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getNumber() <em>Number</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNumber()
+	 * @generated
+	 * @ordered
+	 */
+	protected int number = NUMBER_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getPortNumber() <em>Port Number</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPortNumber()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int PORT_NUMBER_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getPortNumber() <em>Port Number</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPortNumber()
+	 * @generated
+	 * @ordered
+	 */
+	protected int portNumber = PORT_NUMBER_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getHostName() <em>Host Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getHostName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String HOST_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getHostName() <em>Host Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getHostName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String hostName = HOST_NAME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getSwitchName() <em>Switch Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSwitchName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String SWITCH_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getSwitchName() <em>Switch Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSwitchName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String switchName = SWITCH_NAME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isCatalogPartition() <em>Catalog Partition</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isCatalogPartition()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean CATALOG_PARTITION_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isCatalogPartition() <em>Catalog Partition</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isCatalogPartition()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean catalogPartition = CATALOG_PARTITION_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getGroup() <em>Group</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getGroup()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWPartitionGroup group;
+
+	/**
+	 * The cached value of the '{@link #getBufferPool() <em>Buffer Pool</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBufferPool()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWBufferPool bufferPool;
+
+	/**
+	 * The cached value of the '{@link #getContainers() <em>Containers</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getContainers()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList containers;
+
+	/**
+	 * The cached value of the '{@link #getSizeException() <em>Size Exception</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSizeException()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWBufferPoolSizeException sizeException;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWDatabasePartitionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_DATABASE_PARTITION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getNumber() {
+		return number;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setNumber(int newNumber) {
+		int oldNumber = number;
+		number = newNumber;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATABASE_PARTITION__NUMBER, oldNumber, number));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWPartitionGroup getGroup() {
+		if (group != null && group.eIsProxy()) {
+			InternalEObject oldGroup = (InternalEObject)group;
+			group = (LUWPartitionGroup)eResolveProxy(oldGroup);
+			if (group != oldGroup) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_DATABASE_PARTITION__GROUP, oldGroup, group));
+			}
+		}
+		return group;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWPartitionGroup basicGetGroup() {
+		return group;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetGroup(LUWPartitionGroup newGroup, NotificationChain msgs) {
+		LUWPartitionGroup oldGroup = group;
+		group = newGroup;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATABASE_PARTITION__GROUP, oldGroup, newGroup);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setGroup(LUWPartitionGroup newGroup) {
+		if (newGroup != group) {
+			NotificationChain msgs = null;
+			if (group != null)
+				msgs = ((InternalEObject)group).eInverseRemove(this, LUWPackage.LUW_PARTITION_GROUP__PARTITIONS, LUWPartitionGroup.class, msgs);
+			if (newGroup != null)
+				msgs = ((InternalEObject)newGroup).eInverseAdd(this, LUWPackage.LUW_PARTITION_GROUP__PARTITIONS, LUWPartitionGroup.class, msgs);
+			msgs = basicSetGroup(newGroup, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATABASE_PARTITION__GROUP, newGroup, newGroup));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWBufferPool getBufferPool() {
+		if (bufferPool != null && bufferPool.eIsProxy()) {
+			InternalEObject oldBufferPool = (InternalEObject)bufferPool;
+			bufferPool = (LUWBufferPool)eResolveProxy(oldBufferPool);
+			if (bufferPool != oldBufferPool) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_DATABASE_PARTITION__BUFFER_POOL, oldBufferPool, bufferPool));
+			}
+		}
+		return bufferPool;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWBufferPool basicGetBufferPool() {
+		return bufferPool;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetBufferPool(LUWBufferPool newBufferPool, NotificationChain msgs) {
+		LUWBufferPool oldBufferPool = bufferPool;
+		bufferPool = newBufferPool;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATABASE_PARTITION__BUFFER_POOL, oldBufferPool, newBufferPool);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBufferPool(LUWBufferPool newBufferPool) {
+		if (newBufferPool != bufferPool) {
+			NotificationChain msgs = null;
+			if (bufferPool != null)
+				msgs = ((InternalEObject)bufferPool).eInverseRemove(this, LUWPackage.LUW_BUFFER_POOL__PARTITIONS, LUWBufferPool.class, msgs);
+			if (newBufferPool != null)
+				msgs = ((InternalEObject)newBufferPool).eInverseAdd(this, LUWPackage.LUW_BUFFER_POOL__PARTITIONS, LUWBufferPool.class, msgs);
+			msgs = basicSetBufferPool(newBufferPool, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATABASE_PARTITION__BUFFER_POOL, newBufferPool, newBufferPool));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getContainers() {
+		if (containers == null) {
+			containers = new EObjectWithInverseResolvingEList.ManyInverse(LUWDatabaseContainer.class, this, LUWPackage.LUW_DATABASE_PARTITION__CONTAINERS, LUWPackage.LUW_DATABASE_CONTAINER__PARTITIONS);
+		}
+		return containers;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWBufferPoolSizeException getSizeException() {
+		if (sizeException != null && sizeException.eIsProxy()) {
+			InternalEObject oldSizeException = (InternalEObject)sizeException;
+			sizeException = (LUWBufferPoolSizeException)eResolveProxy(oldSizeException);
+			if (sizeException != oldSizeException) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_DATABASE_PARTITION__SIZE_EXCEPTION, oldSizeException, sizeException));
+			}
+		}
+		return sizeException;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWBufferPoolSizeException basicGetSizeException() {
+		return sizeException;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetSizeException(LUWBufferPoolSizeException newSizeException, NotificationChain msgs) {
+		LUWBufferPoolSizeException oldSizeException = sizeException;
+		sizeException = newSizeException;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATABASE_PARTITION__SIZE_EXCEPTION, oldSizeException, newSizeException);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSizeException(LUWBufferPoolSizeException newSizeException) {
+		if (newSizeException != sizeException) {
+			NotificationChain msgs = null;
+			if (sizeException != null)
+				msgs = ((InternalEObject)sizeException).eInverseRemove(this, LUWPackage.LUW_BUFFER_POOL_SIZE_EXCEPTION__PARTITIONS, LUWBufferPoolSizeException.class, msgs);
+			if (newSizeException != null)
+				msgs = ((InternalEObject)newSizeException).eInverseAdd(this, LUWPackage.LUW_BUFFER_POOL_SIZE_EXCEPTION__PARTITIONS, LUWBufferPoolSizeException.class, msgs);
+			msgs = basicSetSizeException(newSizeException, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATABASE_PARTITION__SIZE_EXCEPTION, newSizeException, newSizeException));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getPortNumber() {
+		return portNumber;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPortNumber(int newPortNumber) {
+		int oldPortNumber = portNumber;
+		portNumber = newPortNumber;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATABASE_PARTITION__PORT_NUMBER, oldPortNumber, portNumber));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getHostName() {
+		return hostName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setHostName(String newHostName) {
+		String oldHostName = hostName;
+		hostName = newHostName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATABASE_PARTITION__HOST_NAME, oldHostName, hostName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getSwitchName() {
+		return switchName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSwitchName(String newSwitchName) {
+		String oldSwitchName = switchName;
+		switchName = newSwitchName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATABASE_PARTITION__SWITCH_NAME, oldSwitchName, switchName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isCatalogPartition() {
+		return catalogPartition;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCatalogPartition(boolean newCatalogPartition) {
+		boolean oldCatalogPartition = catalogPartition;
+		catalogPartition = newCatalogPartition;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_DATABASE_PARTITION__CATALOG_PARTITION, oldCatalogPartition, catalogPartition));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATABASE_PARTITION__GROUP:
+				if (group != null)
+					msgs = ((InternalEObject)group).eInverseRemove(this, LUWPackage.LUW_PARTITION_GROUP__PARTITIONS, LUWPartitionGroup.class, msgs);
+				return basicSetGroup((LUWPartitionGroup)otherEnd, msgs);
+			case LUWPackage.LUW_DATABASE_PARTITION__BUFFER_POOL:
+				if (bufferPool != null)
+					msgs = ((InternalEObject)bufferPool).eInverseRemove(this, LUWPackage.LUW_BUFFER_POOL__PARTITIONS, LUWBufferPool.class, msgs);
+				return basicSetBufferPool((LUWBufferPool)otherEnd, msgs);
+			case LUWPackage.LUW_DATABASE_PARTITION__CONTAINERS:
+				return ((InternalEList)getContainers()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_DATABASE_PARTITION__SIZE_EXCEPTION:
+				if (sizeException != null)
+					msgs = ((InternalEObject)sizeException).eInverseRemove(this, LUWPackage.LUW_BUFFER_POOL_SIZE_EXCEPTION__PARTITIONS, LUWBufferPoolSizeException.class, msgs);
+				return basicSetSizeException((LUWBufferPoolSizeException)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATABASE_PARTITION__GROUP:
+				return basicSetGroup(null, msgs);
+			case LUWPackage.LUW_DATABASE_PARTITION__BUFFER_POOL:
+				return basicSetBufferPool(null, msgs);
+			case LUWPackage.LUW_DATABASE_PARTITION__CONTAINERS:
+				return ((InternalEList)getContainers()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_DATABASE_PARTITION__SIZE_EXCEPTION:
+				return basicSetSizeException(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATABASE_PARTITION__NUMBER:
+				return new Integer(getNumber());
+			case LUWPackage.LUW_DATABASE_PARTITION__PORT_NUMBER:
+				return new Integer(getPortNumber());
+			case LUWPackage.LUW_DATABASE_PARTITION__HOST_NAME:
+				return getHostName();
+			case LUWPackage.LUW_DATABASE_PARTITION__SWITCH_NAME:
+				return getSwitchName();
+			case LUWPackage.LUW_DATABASE_PARTITION__CATALOG_PARTITION:
+				return isCatalogPartition() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_DATABASE_PARTITION__GROUP:
+				if (resolve) return getGroup();
+				return basicGetGroup();
+			case LUWPackage.LUW_DATABASE_PARTITION__BUFFER_POOL:
+				if (resolve) return getBufferPool();
+				return basicGetBufferPool();
+			case LUWPackage.LUW_DATABASE_PARTITION__CONTAINERS:
+				return getContainers();
+			case LUWPackage.LUW_DATABASE_PARTITION__SIZE_EXCEPTION:
+				if (resolve) return getSizeException();
+				return basicGetSizeException();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATABASE_PARTITION__NUMBER:
+				setNumber(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.LUW_DATABASE_PARTITION__PORT_NUMBER:
+				setPortNumber(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.LUW_DATABASE_PARTITION__HOST_NAME:
+				setHostName((String)newValue);
+				return;
+			case LUWPackage.LUW_DATABASE_PARTITION__SWITCH_NAME:
+				setSwitchName((String)newValue);
+				return;
+			case LUWPackage.LUW_DATABASE_PARTITION__CATALOG_PARTITION:
+				setCatalogPartition(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_DATABASE_PARTITION__GROUP:
+				setGroup((LUWPartitionGroup)newValue);
+				return;
+			case LUWPackage.LUW_DATABASE_PARTITION__BUFFER_POOL:
+				setBufferPool((LUWBufferPool)newValue);
+				return;
+			case LUWPackage.LUW_DATABASE_PARTITION__CONTAINERS:
+				getContainers().clear();
+				getContainers().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_DATABASE_PARTITION__SIZE_EXCEPTION:
+				setSizeException((LUWBufferPoolSizeException)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATABASE_PARTITION__NUMBER:
+				setNumber(NUMBER_EDEFAULT);
+				return;
+			case LUWPackage.LUW_DATABASE_PARTITION__PORT_NUMBER:
+				setPortNumber(PORT_NUMBER_EDEFAULT);
+				return;
+			case LUWPackage.LUW_DATABASE_PARTITION__HOST_NAME:
+				setHostName(HOST_NAME_EDEFAULT);
+				return;
+			case LUWPackage.LUW_DATABASE_PARTITION__SWITCH_NAME:
+				setSwitchName(SWITCH_NAME_EDEFAULT);
+				return;
+			case LUWPackage.LUW_DATABASE_PARTITION__CATALOG_PARTITION:
+				setCatalogPartition(CATALOG_PARTITION_EDEFAULT);
+				return;
+			case LUWPackage.LUW_DATABASE_PARTITION__GROUP:
+				setGroup((LUWPartitionGroup)null);
+				return;
+			case LUWPackage.LUW_DATABASE_PARTITION__BUFFER_POOL:
+				setBufferPool((LUWBufferPool)null);
+				return;
+			case LUWPackage.LUW_DATABASE_PARTITION__CONTAINERS:
+				getContainers().clear();
+				return;
+			case LUWPackage.LUW_DATABASE_PARTITION__SIZE_EXCEPTION:
+				setSizeException((LUWBufferPoolSizeException)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_DATABASE_PARTITION__NUMBER:
+				return number != NUMBER_EDEFAULT;
+			case LUWPackage.LUW_DATABASE_PARTITION__PORT_NUMBER:
+				return portNumber != PORT_NUMBER_EDEFAULT;
+			case LUWPackage.LUW_DATABASE_PARTITION__HOST_NAME:
+				return HOST_NAME_EDEFAULT == null ? hostName != null : !HOST_NAME_EDEFAULT.equals(hostName);
+			case LUWPackage.LUW_DATABASE_PARTITION__SWITCH_NAME:
+				return SWITCH_NAME_EDEFAULT == null ? switchName != null : !SWITCH_NAME_EDEFAULT.equals(switchName);
+			case LUWPackage.LUW_DATABASE_PARTITION__CATALOG_PARTITION:
+				return catalogPartition != CATALOG_PARTITION_EDEFAULT;
+			case LUWPackage.LUW_DATABASE_PARTITION__GROUP:
+				return group != null;
+			case LUWPackage.LUW_DATABASE_PARTITION__BUFFER_POOL:
+				return bufferPool != null;
+			case LUWPackage.LUW_DATABASE_PARTITION__CONTAINERS:
+				return containers != null && !containers.isEmpty();
+			case LUWPackage.LUW_DATABASE_PARTITION__SIZE_EXCEPTION:
+				return sizeException != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (number: "); //$NON-NLS-1$
+		result.append(number);
+		result.append(", portNumber: "); //$NON-NLS-1$
+		result.append(portNumber);
+		result.append(", hostName: "); //$NON-NLS-1$
+		result.append(hostName);
+		result.append(", switchName: "); //$NON-NLS-1$
+		result.append(switchName);
+		result.append(", catalogPartition: "); //$NON-NLS-1$
+		result.append(catalogPartition);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWDatabasePartitionImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWFactoryImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWFactoryImpl.java
new file mode 100644
index 0000000..01d510c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWFactoryImpl.java
@@ -0,0 +1,1389 @@
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.*;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.util.DatabaseToRemoteServerHelper;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.util.TableToRemoteDataSetHelper;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class LUWFactoryImpl extends EFactoryImpl implements LUWFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LUWFactory init() {
+		try {
+			LUWFactory theLUWFactory = (LUWFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org.eclipse.datatools.enablement.ibm.db2.luw.model.ecore"); //$NON-NLS-1$ 
+			if (theLUWFactory != null) {
+				return theLUWFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new LUWFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case LUWPackage.LUW_PARTITION_GROUP: return createLUWPartitionGroup();
+			case LUWPackage.LUW_TABLE_SPACE: return createLUWTableSpace();
+			case LUWPackage.LUW_DATABASE_PARTITION: return createLUWDatabasePartition();
+			case LUWPackage.LUW_DATABASE_CONTAINER: return createLUWDatabaseContainer();
+			case LUWPackage.LUW_ADMIN_SERVER: return createLUWAdminServer();
+			case LUWPackage.LUW_BUFFER_POOL: return createLUWBufferPool();
+			case LUWPackage.LUW_TABLE: return createLUWTable();
+			case LUWPackage.LUW_VIEW: return createLUWView();
+			case LUWPackage.LUW_PARTITION_KEY: return createLUWPartitionKey();
+			case LUWPackage.LUW_FUNCTION_MAPPING: return createLUWFunctionMapping();
+			case LUWPackage.LUW_GENERIC_USER_MAPPING: return createLUWGenericUserMapping();
+			case LUWPackage.LUW_TYPE_MAPPING: return createLUWTypeMapping();
+			case LUWPackage.LUW_USER_MAPPING: return createLUWUserMapping();
+			case LUWPackage.LUW_OPTION: return createLUWOption();
+			case LUWPackage.LUW_DATABASE: return createLUWDatabase();
+			case LUWPackage.LUW_COLUMN: return createLUWColumn();
+			case LUWPackage.LUW_GENERIC_NICKNAME: return createLUWGenericNickname();
+			case LUWPackage.LUW_GENERIC_SERVER: return createLUWGenericServer();
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE: return createLUWMaterializedQueryTable();
+			case LUWPackage.LUW_GENERIC_WRAPPER: return createLUWGenericWrapper();
+			case LUWPackage.RELATIONAL_REMOTE_SERVER: return createRelationalRemoteServer();
+			case LUWPackage.RELATIONAL_REMOTE_DATA_SET: return createRelationalRemoteDataSet();
+			case LUWPackage.REMOTE_SERVER: return createRemoteServer();
+			case LUWPackage.REMOTE_DATA_SET: return createRemoteDataSet();
+			case LUWPackage.LUW_INDEX: return createLUWIndex();
+			case LUWPackage.LUW_ATTRIBUTE_DEFINITION: return createLUWAttributeDefinition();
+			case LUWPackage.FEDERATED_PROCEDURE: return createFederatedProcedure();
+			case LUWPackage.FEDERATED_PARAMETER: return createFederatedParameter();
+			case LUWPackage.LUW_PARTITION_EXPRESSION: return createLUWPartitionExpression();
+			case LUWPackage.LUW_PARTITION_ELEMENT: return createLUWPartitionElement();
+			case LUWPackage.LUW_DATA_PARTITION: return createLUWDataPartition();
+			case LUWPackage.LUW_DATA_PARTITION_KEY: return createLUWDataPartitionKey();
+			case LUWPackage.LUW_DATABASE_PACKAGE: return createLUWDatabasePackage();
+			case LUWPackage.LUW_MODULE: return createLUWModule();
+			case LUWPackage.LUW_MODULE_FUNCTION: return createLUWModuleFunction();
+			case LUWPackage.LUW_MODULE_PROCEDURE: return createLUWModuleProcedure();
+			case LUWPackage.LUW_MODULE_CONDITION: return createLUWModuleCondition();
+			case LUWPackage.LUW_GLOBAL_VARIABLE: return createLUWGlobalVariable();
+			case LUWPackage.LUW_MODULE_ROW_DATA_TYPE: return createLUWModuleRowDataType();
+			case LUWPackage.LUW_MODULE_ARRAY_DATA_TYPE: return createLUWModuleArrayDataType();
+			case LUWPackage.LUW_MODULE_DISTINCT_TYPE: return createLUWModuleDistinctType();
+			case LUWPackage.LUW_MODULE_GLOBAL_VARIABLE: return createLUWModuleGlobalVariable();
+			case LUWPackage.LUW_ARRAY_DATA_TYPE: return createLUWArrayDataType();
+			case LUWPackage.LUW_ROW_DATA_TYPE: return createLUWRowDataType();
+			case LUWPackage.PLSQL_PACKAGE: return createPLSQLPackage();
+			case LUWPackage.PLSQL_PACKAGE_BODY: return createPLSQLPackageBody();
+			case LUWPackage.LUW_CURSOR_DATA_TYPE: return createLUWCursorDataType();
+			case LUWPackage.LUW_MODULE_CURSOR_DATA_TYPE: return createLUWModuleCursorDataType();
+			case LUWPackage.LUW_BUFFER_POOL_SIZE_EXCEPTION: return createLUWBufferPoolSizeException();
+			case LUWPackage.LUW_MEMBER: return createLUWMember();
+			case LUWPackage.LUW_SECURITY_POLICY: return createLUWSecurityPolicy();
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT: return createLUWSecurityLabelComponent();
+			case LUWPackage.LUW_SECURITY_LABEL: return createLUWSecurityLabel();
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT_ELEMENT: return createLUWSecurityLabelComponentElement();
+			case LUWPackage.LUW_STORAGE_GROUP: return createLUWStorageGroup();
+			case LUWPackage.LUW_TEMPORARY_STORAGE_TABLE: return createLUWTemporaryStorageTable();
+			case LUWPackage.LUW_TEMPORARY_TABLE: return createLUWTemporaryTable();
+			case LUWPackage.ARRAY_INDEX_ELEMENT_TYPE: return createArrayIndexElementType();
+			case LUWPackage.LUW_PARTITION_EVERY_CLAUSE_ELEMENT: return createLUWPartitionEveryClauseElement();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object createFromString(EDataType eDataType, String initialValue) {
+		switch (eDataType.getClassifierID()) {
+			case LUWPackage.LUW_CONTAINER_TYPE:
+				return createLUWContainerTypeFromString(eDataType, initialValue);
+			case LUWPackage.PAGE_SIZE_TYPE:
+				return createPageSizeTypeFromString(eDataType, initialValue);
+			case LUWPackage.BUFFER_POOL_TYPE:
+				return createBufferPoolTypeFromString(eDataType, initialValue);
+			case LUWPackage.TABLE_SPACE_TYPE:
+				return createTableSpaceTypeFromString(eDataType, initialValue);
+			case LUWPackage.MANAGEMENT_TYPE:
+				return createManagementTypeFromString(eDataType, initialValue);
+			case LUWPackage.CHECK_OPTION_TYPE:
+				return createCheckOptionTypeFromString(eDataType, initialValue);
+			case LUWPackage.PARTITION_METHOD:
+				return createPartitionMethodFromString(eDataType, initialValue);
+			case LUWPackage.MAINTENANCE_TYPE:
+				return createMaintenanceTypeFromString(eDataType, initialValue);
+			case LUWPackage.REFRESH_TYPE:
+				return createRefreshTypeFromString(eDataType, initialValue);
+			case LUWPackage.WRAPPER_TYPE:
+				return createWrapperTypeFromString(eDataType, initialValue);
+			case LUWPackage.DATA_PARTITION_METHOD:
+				return createDataPartitionMethodFromString(eDataType, initialValue);
+			case LUWPackage.CURSOR_BLOCK_TYPE:
+				return createCursorBlockTypeFromString(eDataType, initialValue);
+			case LUWPackage.EXPLAIN_SNAPHOT_TYPE:
+				return createExplainSnaphotTypeFromString(eDataType, initialValue);
+			case LUWPackage.FILE_SYSTEM_CACHING_TYPE:
+				return createFileSystemCachingTypeFromString(eDataType, initialValue);
+			case LUWPackage.LUW_INDEX_PAGE_SPLIT_TYPE:
+				return createLUWIndexPageSplitTypeFromString(eDataType, initialValue);
+			case LUWPackage.LUW_INDEX_COMPRESS_TYPE:
+				return createLUWIndexCompressTypeFromString(eDataType, initialValue);
+			case LUWPackage.SYSTEM_TYPE:
+				return createSystemTypeFromString(eDataType, initialValue);
+			case LUWPackage.AVERAGE_TABLE_SIZE_TYPE:
+				return createAverageTableSizeTypeFromString(eDataType, initialValue);
+			case LUWPackage.LUW_STORAGE_TABLE_COMPRESSION_MODE:
+				return createLUWStorageTableCompressionModeFromString(eDataType, initialValue);
+			case LUWPackage.LUW_MEMBER_TYPE:
+				return createLUWMemberTypeFromString(eDataType, initialValue);
+			case LUWPackage.MEMBER_STATE_TYPE:
+				return createMemberStateTypeFromString(eDataType, initialValue);
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT_TYPE:
+				return createLUWSecurityLabelComponentTypeFromString(eDataType, initialValue);
+			case LUWPackage.LUW_SECURITY_LABEL_NOT_AUTHORIZED_WRITE_ACTION:
+				return createLUWSecurityLabelNotAuthorizedWriteActionFromString(eDataType, initialValue);
+			case LUWPackage.LUW_FEDERATED_DATA_SOURCE:
+				return createLUWFederatedDataSourceFromString(eDataType, initialValue);
+			case LUWPackage.LUW_TEMPORARY_TABLE_LOGGING_OPTION:
+				return createLUWTemporaryTableLoggingOptionFromString(eDataType, initialValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertToString(EDataType eDataType, Object instanceValue) {
+		switch (eDataType.getClassifierID()) {
+			case LUWPackage.LUW_CONTAINER_TYPE:
+				return convertLUWContainerTypeToString(eDataType, instanceValue);
+			case LUWPackage.PAGE_SIZE_TYPE:
+				return convertPageSizeTypeToString(eDataType, instanceValue);
+			case LUWPackage.BUFFER_POOL_TYPE:
+				return convertBufferPoolTypeToString(eDataType, instanceValue);
+			case LUWPackage.TABLE_SPACE_TYPE:
+				return convertTableSpaceTypeToString(eDataType, instanceValue);
+			case LUWPackage.MANAGEMENT_TYPE:
+				return convertManagementTypeToString(eDataType, instanceValue);
+			case LUWPackage.CHECK_OPTION_TYPE:
+				return convertCheckOptionTypeToString(eDataType, instanceValue);
+			case LUWPackage.PARTITION_METHOD:
+				return convertPartitionMethodToString(eDataType, instanceValue);
+			case LUWPackage.MAINTENANCE_TYPE:
+				return convertMaintenanceTypeToString(eDataType, instanceValue);
+			case LUWPackage.REFRESH_TYPE:
+				return convertRefreshTypeToString(eDataType, instanceValue);
+			case LUWPackage.WRAPPER_TYPE:
+				return convertWrapperTypeToString(eDataType, instanceValue);
+			case LUWPackage.DATA_PARTITION_METHOD:
+				return convertDataPartitionMethodToString(eDataType, instanceValue);
+			case LUWPackage.CURSOR_BLOCK_TYPE:
+				return convertCursorBlockTypeToString(eDataType, instanceValue);
+			case LUWPackage.EXPLAIN_SNAPHOT_TYPE:
+				return convertExplainSnaphotTypeToString(eDataType, instanceValue);
+			case LUWPackage.FILE_SYSTEM_CACHING_TYPE:
+				return convertFileSystemCachingTypeToString(eDataType, instanceValue);
+			case LUWPackage.LUW_INDEX_PAGE_SPLIT_TYPE:
+				return convertLUWIndexPageSplitTypeToString(eDataType, instanceValue);
+			case LUWPackage.LUW_INDEX_COMPRESS_TYPE:
+				return convertLUWIndexCompressTypeToString(eDataType, instanceValue);
+			case LUWPackage.SYSTEM_TYPE:
+				return convertSystemTypeToString(eDataType, instanceValue);
+			case LUWPackage.AVERAGE_TABLE_SIZE_TYPE:
+				return convertAverageTableSizeTypeToString(eDataType, instanceValue);
+			case LUWPackage.LUW_STORAGE_TABLE_COMPRESSION_MODE:
+				return convertLUWStorageTableCompressionModeToString(eDataType, instanceValue);
+			case LUWPackage.LUW_MEMBER_TYPE:
+				return convertLUWMemberTypeToString(eDataType, instanceValue);
+			case LUWPackage.MEMBER_STATE_TYPE:
+				return convertMemberStateTypeToString(eDataType, instanceValue);
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT_TYPE:
+				return convertLUWSecurityLabelComponentTypeToString(eDataType, instanceValue);
+			case LUWPackage.LUW_SECURITY_LABEL_NOT_AUTHORIZED_WRITE_ACTION:
+				return convertLUWSecurityLabelNotAuthorizedWriteActionToString(eDataType, instanceValue);
+			case LUWPackage.LUW_FEDERATED_DATA_SOURCE:
+				return convertLUWFederatedDataSourceToString(eDataType, instanceValue);
+			case LUWPackage.LUW_TEMPORARY_TABLE_LOGGING_OPTION:
+				return convertLUWTemporaryTableLoggingOptionToString(eDataType, instanceValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWPartitionGroup createLUWPartitionGroup() {
+		LUWPartitionGroupImpl luwPartitionGroup = new LUWPartitionGroupImpl();
+		return luwPartitionGroup;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTableSpace createLUWTableSpace() {
+		LUWTableSpaceImpl luwTableSpace = new LUWTableSpaceImpl();
+		return luwTableSpace;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWDatabasePartition createLUWDatabasePartition() {
+		LUWDatabasePartitionImpl luwDatabasePartition = new LUWDatabasePartitionImpl();
+		return luwDatabasePartition;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWDatabaseContainer createLUWDatabaseContainer() {
+		LUWDatabaseContainerImpl luwDatabaseContainer = new LUWDatabaseContainerImpl();
+		return luwDatabaseContainer;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWAdminServer createLUWAdminServer() {
+		LUWAdminServerImpl luwAdminServer = new LUWAdminServerImpl();
+		return luwAdminServer;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWBufferPool createLUWBufferPool() {
+		LUWBufferPoolImpl luwBufferPool = new LUWBufferPoolImpl();
+		return luwBufferPool;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTable createLUWTable() {
+		LUWTableImpl luwTable = new LUWTableImpl();
+		return luwTable;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWView createLUWView() {
+		LUWViewImpl luwView = new LUWViewImpl();
+		return luwView;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWPartitionKey createLUWPartitionKey() {
+		LUWPartitionKeyImpl luwPartitionKey = new LUWPartitionKeyImpl();
+		return luwPartitionKey;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWFunctionMapping createLUWFunctionMapping() {
+		LUWFunctionMappingImpl luwFunctionMapping = new LUWFunctionMappingImpl();
+		return luwFunctionMapping;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWGenericUserMapping createLUWGenericUserMapping() {
+		LUWGenericUserMappingImpl luwGenericUserMapping = new LUWGenericUserMappingImpl();
+		return luwGenericUserMapping;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTypeMapping createLUWTypeMapping() {
+		LUWTypeMappingImpl luwTypeMapping = new LUWTypeMappingImpl();
+		return luwTypeMapping;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWUserMapping createLUWUserMapping() {
+		LUWUserMappingImpl luwUserMapping = new LUWUserMappingImpl();
+		return luwUserMapping;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWOption createLUWOption() {
+		LUWOptionImpl luwOption = new LUWOptionImpl();
+		return luwOption;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWDatabase createLUWDatabase() {
+		LUWDatabaseImpl luwDatabase = new LUWDatabaseImpl();
+		return luwDatabase;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWColumn createLUWColumn() {
+		LUWColumnImpl luwColumn = new LUWColumnImpl();
+		return luwColumn;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWGenericNickname createLUWGenericNickname() {
+		LUWGenericNicknameImpl luwGenericNickname = new LUWGenericNicknameImpl();
+		return luwGenericNickname;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWGenericServer createLUWGenericServer() {
+		LUWGenericServerImpl luwGenericServer = new LUWGenericServerImpl();
+		return luwGenericServer;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWMaterializedQueryTable createLUWMaterializedQueryTable() {
+		LUWMaterializedQueryTableImpl luwMaterializedQueryTable = new LUWMaterializedQueryTableImpl();
+		return luwMaterializedQueryTable;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWGenericWrapper createLUWGenericWrapper() {
+		LUWGenericWrapperImpl luwGenericWrapper = new LUWGenericWrapperImpl();
+		return luwGenericWrapper;
+	}
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RelationalRemoteServer createRelationalRemoteServerGen() {
+		RelationalRemoteServerImpl relationalRemoteServer = new RelationalRemoteServerImpl();
+		return relationalRemoteServer;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public RelationalRemoteServer createRelationalRemoteServer() {
+		RelationalRemoteServer relationalRemoteServer = createRelationalRemoteServerGen();
+		relationalRemoteServer.eAdapters().add(DatabaseToRemoteServerHelper.INVERSE_DATABASE_ADAPTER);
+
+		// A side effect of the add is to set the target of the INVERSE_DATABASE_ADAPTER 
+		// to point back to relationalRemoteServer. This causes garbage collection problems because 
+		// INVERSE_DATABASE_ADAPTER is a singleton. Need to unset the target reference...
+		DatabaseToRemoteServerHelper.INVERSE_DATABASE_ADAPTER.setTarget(null);
+		
+		return relationalRemoteServer;
+	}
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RelationalRemoteDataSet createRelationalRemoteDataSetGen() {
+		RelationalRemoteDataSetImpl relationalRemoteDataSet = new RelationalRemoteDataSetImpl();
+		return relationalRemoteDataSet;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public RelationalRemoteDataSet createRelationalRemoteDataSet() {
+		RelationalRemoteDataSet relationalRemoteDataSet = createRelationalRemoteDataSetGen();
+		relationalRemoteDataSet.eAdapters().add(TableToRemoteDataSetHelper.INVERSE_TABLE_ADAPTER);
+
+		// A side effect of the add is to set the target of the INVERSE_TABLE_ADAPTER 
+		// to point back to relationalRemoteDataSet. This causes garbage collection problems because 
+		// INVERSE_TABLE_ADAPTER is a singleton. Need to unset the target reference...
+		TableToRemoteDataSetHelper.INVERSE_TABLE_ADAPTER.setTarget(null);
+
+		return relationalRemoteDataSet;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RemoteServer createRemoteServer() {
+		RemoteServerImpl remoteServer = new RemoteServerImpl();
+		return remoteServer;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RemoteDataSet createRemoteDataSet() {
+		RemoteDataSetImpl remoteDataSet = new RemoteDataSetImpl();
+		return remoteDataSet;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWIndex createLUWIndex() {
+		LUWIndexImpl luwIndex = new LUWIndexImpl();
+		return luwIndex;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWAttributeDefinition createLUWAttributeDefinition() {
+		LUWAttributeDefinitionImpl luwAttributeDefinition = new LUWAttributeDefinitionImpl();
+		return luwAttributeDefinition;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public FederatedProcedure createFederatedProcedure() {
+		FederatedProcedureImpl federatedProcedure = new FederatedProcedureImpl();
+		return federatedProcedure;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public FederatedParameter createFederatedParameter() {
+		FederatedParameterImpl federatedParameter = new FederatedParameterImpl();
+		return federatedParameter;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWPartitionExpression createLUWPartitionExpression() {
+		LUWPartitionExpressionImpl luwPartitionExpression = new LUWPartitionExpressionImpl();
+		return luwPartitionExpression;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWPartitionElement createLUWPartitionElement() {
+		LUWPartitionElementImpl luwPartitionElement = new LUWPartitionElementImpl();
+		return luwPartitionElement;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWDataPartition createLUWDataPartition() {
+		LUWDataPartitionImpl luwDataPartition = new LUWDataPartitionImpl();
+		return luwDataPartition;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWDataPartitionKey createLUWDataPartitionKey() {
+		LUWDataPartitionKeyImpl luwDataPartitionKey = new LUWDataPartitionKeyImpl();
+		return luwDataPartitionKey;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWDatabasePackage createLUWDatabasePackage() {
+		LUWDatabasePackageImpl luwDatabasePackage = new LUWDatabasePackageImpl();
+		return luwDatabasePackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWModule createLUWModule() {
+		LUWModuleImpl luwModule = new LUWModuleImpl();
+		return luwModule;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWModuleFunction createLUWModuleFunction() {
+		LUWModuleFunctionImpl luwModuleFunction = new LUWModuleFunctionImpl();
+		return luwModuleFunction;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWModuleProcedure createLUWModuleProcedure() {
+		LUWModuleProcedureImpl luwModuleProcedure = new LUWModuleProcedureImpl();
+		return luwModuleProcedure;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWModuleCondition createLUWModuleCondition() {
+		LUWModuleConditionImpl luwModuleCondition = new LUWModuleConditionImpl();
+		return luwModuleCondition;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWGlobalVariable createLUWGlobalVariable() {
+		LUWGlobalVariableImpl luwGlobalVariable = new LUWGlobalVariableImpl();
+		return luwGlobalVariable;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWModuleRowDataType createLUWModuleRowDataType() {
+		LUWModuleRowDataTypeImpl luwModuleRowDataType = new LUWModuleRowDataTypeImpl();
+		return luwModuleRowDataType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWModuleArrayDataType createLUWModuleArrayDataType() {
+		LUWModuleArrayDataTypeImpl luwModuleArrayDataType = new LUWModuleArrayDataTypeImpl();
+		return luwModuleArrayDataType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWModuleDistinctType createLUWModuleDistinctType() {
+		LUWModuleDistinctTypeImpl luwModuleDistinctType = new LUWModuleDistinctTypeImpl();
+		return luwModuleDistinctType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWModuleGlobalVariable createLUWModuleGlobalVariable() {
+		LUWModuleGlobalVariableImpl luwModuleGlobalVariable = new LUWModuleGlobalVariableImpl();
+		return luwModuleGlobalVariable;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWArrayDataType createLUWArrayDataType() {
+		LUWArrayDataTypeImpl luwArrayDataType = new LUWArrayDataTypeImpl();
+		return luwArrayDataType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWRowDataType createLUWRowDataType() {
+		LUWRowDataTypeImpl luwRowDataType = new LUWRowDataTypeImpl();
+		return luwRowDataType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PLSQLPackage createPLSQLPackage() {
+		PLSQLPackageImpl plsqlPackage = new PLSQLPackageImpl();
+		return plsqlPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PLSQLPackageBody createPLSQLPackageBody() {
+		PLSQLPackageBodyImpl plsqlPackageBody = new PLSQLPackageBodyImpl();
+		return plsqlPackageBody;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWCursorDataType createLUWCursorDataType() {
+		LUWCursorDataTypeImpl luwCursorDataType = new LUWCursorDataTypeImpl();
+		return luwCursorDataType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWModuleCursorDataType createLUWModuleCursorDataType() {
+		LUWModuleCursorDataTypeImpl luwModuleCursorDataType = new LUWModuleCursorDataTypeImpl();
+		return luwModuleCursorDataType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWBufferPoolSizeException createLUWBufferPoolSizeException() {
+		LUWBufferPoolSizeExceptionImpl luwBufferPoolSizeException = new LUWBufferPoolSizeExceptionImpl();
+		return luwBufferPoolSizeException;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWMember createLUWMember() {
+		LUWMemberImpl luwMember = new LUWMemberImpl();
+		return luwMember;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWSecurityPolicy createLUWSecurityPolicy() {
+		LUWSecurityPolicyImpl luwSecurityPolicy = new LUWSecurityPolicyImpl();
+		return luwSecurityPolicy;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWSecurityLabelComponent createLUWSecurityLabelComponent() {
+		LUWSecurityLabelComponentImpl luwSecurityLabelComponent = new LUWSecurityLabelComponentImpl();
+		return luwSecurityLabelComponent;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWSecurityLabel createLUWSecurityLabel() {
+		LUWSecurityLabelImpl luwSecurityLabel = new LUWSecurityLabelImpl();
+		return luwSecurityLabel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWSecurityLabelComponentElement createLUWSecurityLabelComponentElement() {
+		LUWSecurityLabelComponentElementImpl luwSecurityLabelComponentElement = new LUWSecurityLabelComponentElementImpl();
+		return luwSecurityLabelComponentElement;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWStorageGroup createLUWStorageGroup() {
+		LUWStorageGroupImpl luwStorageGroup = new LUWStorageGroupImpl();
+		return luwStorageGroup;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTemporaryStorageTable createLUWTemporaryStorageTable() {
+		LUWTemporaryStorageTableImpl luwTemporaryStorageTable = new LUWTemporaryStorageTableImpl();
+		return luwTemporaryStorageTable;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTemporaryTable createLUWTemporaryTable() {
+		LUWTemporaryTableImpl luwTemporaryTable = new LUWTemporaryTableImpl();
+		return luwTemporaryTable;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ArrayIndexElementType createArrayIndexElementType() {
+		ArrayIndexElementTypeImpl arrayIndexElementType = new ArrayIndexElementTypeImpl();
+		return arrayIndexElementType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWPartitionEveryClauseElement createLUWPartitionEveryClauseElement() {
+		LUWPartitionEveryClauseElementImpl luwPartitionEveryClauseElement = new LUWPartitionEveryClauseElementImpl();
+		return luwPartitionEveryClauseElement;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWContainerType createLUWContainerTypeFromString(EDataType eDataType, String initialValue) {
+		LUWContainerType result = LUWContainerType.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertLUWContainerTypeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PageSizeType createPageSizeTypeFromString(EDataType eDataType, String initialValue) {
+		PageSizeType result = PageSizeType.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertPageSizeTypeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public BufferPoolType createBufferPoolTypeFromString(EDataType eDataType, String initialValue) {
+		BufferPoolType result = BufferPoolType.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertBufferPoolTypeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TableSpaceType createTableSpaceTypeFromString(EDataType eDataType, String initialValue) {
+		TableSpaceType result = TableSpaceType.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertTableSpaceTypeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ManagementType createManagementTypeFromString(EDataType eDataType, String initialValue) {
+		ManagementType result = ManagementType.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertManagementTypeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CheckOptionType createCheckOptionTypeFromString(EDataType eDataType, String initialValue) {
+		CheckOptionType result = CheckOptionType.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertCheckOptionTypeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PartitionMethod createPartitionMethodFromString(EDataType eDataType, String initialValue) {
+		PartitionMethod result = PartitionMethod.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertPartitionMethodToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MaintenanceType createMaintenanceTypeFromString(EDataType eDataType, String initialValue) {
+		MaintenanceType result = MaintenanceType.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertMaintenanceTypeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RefreshType createRefreshTypeFromString(EDataType eDataType, String initialValue) {
+		RefreshType result = RefreshType.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertRefreshTypeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public WrapperType createWrapperTypeFromString(EDataType eDataType, String initialValue) {
+		WrapperType result = WrapperType.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertWrapperTypeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DataPartitionMethod createDataPartitionMethodFromString(EDataType eDataType, String initialValue) {
+		DataPartitionMethod result = DataPartitionMethod.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertDataPartitionMethodToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CursorBlockType createCursorBlockTypeFromString(EDataType eDataType, String initialValue) {
+		CursorBlockType result = CursorBlockType.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertCursorBlockTypeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExplainSnaphotType createExplainSnaphotTypeFromString(EDataType eDataType, String initialValue) {
+		ExplainSnaphotType result = ExplainSnaphotType.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertExplainSnaphotTypeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public FileSystemCachingType createFileSystemCachingTypeFromString(EDataType eDataType, String initialValue) {
+		FileSystemCachingType result = FileSystemCachingType.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertFileSystemCachingTypeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWIndexPageSplitType createLUWIndexPageSplitTypeFromString(EDataType eDataType, String initialValue) {
+		LUWIndexPageSplitType result = LUWIndexPageSplitType.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertLUWIndexPageSplitTypeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWIndexCompressType createLUWIndexCompressTypeFromString(EDataType eDataType, String initialValue) {
+		LUWIndexCompressType result = LUWIndexCompressType.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertLUWIndexCompressTypeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SystemType createSystemTypeFromString(EDataType eDataType, String initialValue) {
+		SystemType result = SystemType.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertSystemTypeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AverageTableSizeType createAverageTableSizeTypeFromString(EDataType eDataType, String initialValue) {
+		AverageTableSizeType result = AverageTableSizeType.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertAverageTableSizeTypeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWStorageTableCompressionMode createLUWStorageTableCompressionModeFromString(EDataType eDataType, String initialValue) {
+		LUWStorageTableCompressionMode result = LUWStorageTableCompressionMode.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertLUWStorageTableCompressionModeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWMemberType createLUWMemberTypeFromString(EDataType eDataType, String initialValue) {
+		LUWMemberType result = LUWMemberType.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertLUWMemberTypeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MemberStateType createMemberStateTypeFromString(EDataType eDataType, String initialValue) {
+		MemberStateType result = MemberStateType.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertMemberStateTypeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWSecurityLabelComponentType createLUWSecurityLabelComponentTypeFromString(EDataType eDataType, String initialValue) {
+		LUWSecurityLabelComponentType result = LUWSecurityLabelComponentType.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertLUWSecurityLabelComponentTypeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWSecurityLabelNotAuthorizedWriteAction createLUWSecurityLabelNotAuthorizedWriteActionFromString(EDataType eDataType, String initialValue) {
+		LUWSecurityLabelNotAuthorizedWriteAction result = LUWSecurityLabelNotAuthorizedWriteAction.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertLUWSecurityLabelNotAuthorizedWriteActionToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWFederatedDataSource createLUWFederatedDataSourceFromString(EDataType eDataType, String initialValue) {
+		LUWFederatedDataSource result = LUWFederatedDataSource.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertLUWFederatedDataSourceToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTemporaryTableLoggingOption createLUWTemporaryTableLoggingOptionFromString(EDataType eDataType, String initialValue) {
+		LUWTemporaryTableLoggingOption result = LUWTemporaryTableLoggingOption.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertLUWTemporaryTableLoggingOptionToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWPackage getLUWPackage() {
+		return (LUWPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	public static LUWPackage getPackage() {
+		return LUWPackage.eINSTANCE;
+	}
+
+} //LUWFactoryImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWFunctionMappingImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWFunctionMappingImpl.java
new file mode 100644
index 0000000..abb2bda
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWFunctionMappingImpl.java
@@ -0,0 +1,870 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import java.util.Collection;
+import java.util.Date;
+
+import org.eclipse.datatools.modelbase.sql.routines.Function;
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Function;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Function Mapping</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWFunctionMappingImpl#getServerType <em>Server Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWFunctionMappingImpl#getServerVersion <em>Server Version</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWFunctionMappingImpl#getServerName <em>Server Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWFunctionMappingImpl#getCreationTime <em>Creation Time</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWFunctionMappingImpl#isDisabled <em>Disabled</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWFunctionMappingImpl#getInstsPerInvoc <em>Insts Per Invoc</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWFunctionMappingImpl#getInstsPerArgByte <em>Insts Per Arg Byte</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWFunctionMappingImpl#getIosPerInvoc <em>Ios Per Invoc</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWFunctionMappingImpl#getIosPerArgByte <em>Ios Per Arg Byte</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWFunctionMappingImpl#getOptions <em>Options</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWFunctionMappingImpl#getLocalFunction <em>Local Function</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWFunctionMappingImpl#getRemoteFunction <em>Remote Function</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWFunctionMappingImpl#getLUWDatabase <em>LUW Database</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWFunctionMappingImpl extends SQLObjectImpl implements LUWFunctionMapping {
+	/**
+	 * The default value of the '{@link #getServerType() <em>Server Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getServerType()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String SERVER_TYPE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getServerType() <em>Server Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getServerType()
+	 * @generated
+	 * @ordered
+	 */
+	protected String serverType = SERVER_TYPE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getServerVersion() <em>Server Version</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getServerVersion()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String SERVER_VERSION_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getServerVersion() <em>Server Version</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getServerVersion()
+	 * @generated
+	 * @ordered
+	 */
+	protected String serverVersion = SERVER_VERSION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getServerName() <em>Server Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getServerName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String SERVER_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getServerName() <em>Server Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getServerName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String serverName = SERVER_NAME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getCreationTime() <em>Creation Time</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCreationTime()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final Date CREATION_TIME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getCreationTime() <em>Creation Time</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCreationTime()
+	 * @generated
+	 * @ordered
+	 */
+	protected Date creationTime = CREATION_TIME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isDisabled() <em>Disabled</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDisabled()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean DISABLED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isDisabled() <em>Disabled</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDisabled()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean disabled = DISABLED_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getInstsPerInvoc() <em>Insts Per Invoc</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getInstsPerInvoc()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int INSTS_PER_INVOC_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getInstsPerInvoc() <em>Insts Per Invoc</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getInstsPerInvoc()
+	 * @generated
+	 * @ordered
+	 */
+	protected int instsPerInvoc = INSTS_PER_INVOC_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getInstsPerArgByte() <em>Insts Per Arg Byte</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getInstsPerArgByte()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int INSTS_PER_ARG_BYTE_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getInstsPerArgByte() <em>Insts Per Arg Byte</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getInstsPerArgByte()
+	 * @generated
+	 * @ordered
+	 */
+	protected int instsPerArgByte = INSTS_PER_ARG_BYTE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getIosPerInvoc() <em>Ios Per Invoc</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIosPerInvoc()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int IOS_PER_INVOC_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getIosPerInvoc() <em>Ios Per Invoc</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIosPerInvoc()
+	 * @generated
+	 * @ordered
+	 */
+	protected int iosPerInvoc = IOS_PER_INVOC_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getIosPerArgByte() <em>Ios Per Arg Byte</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIosPerArgByte()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int IOS_PER_ARG_BYTE_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getIosPerArgByte() <em>Ios Per Arg Byte</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIosPerArgByte()
+	 * @generated
+	 * @ordered
+	 */
+	protected int iosPerArgByte = IOS_PER_ARG_BYTE_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getOptions() <em>Options</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOptions()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList options;
+
+	/**
+	 * The cached value of the '{@link #getLocalFunction() <em>Local Function</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLocalFunction()
+	 * @generated
+	 * @ordered
+	 */
+	protected DB2Function localFunction;
+
+	/**
+	 * The cached value of the '{@link #getRemoteFunction() <em>Remote Function</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRemoteFunction()
+	 * @generated
+	 * @ordered
+	 */
+	protected Function remoteFunction;
+
+	/**
+	 * The cached value of the '{@link #getLUWDatabase() <em>LUW Database</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLUWDatabase()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWDatabase luwDatabase;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWFunctionMappingImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_FUNCTION_MAPPING;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getServerType() {
+		return serverType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setServerType(String newServerType) {
+		String oldServerType = serverType;
+		serverType = newServerType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_FUNCTION_MAPPING__SERVER_TYPE, oldServerType, serverType));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getServerVersion() {
+		return serverVersion;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setServerVersion(String newServerVersion) {
+		String oldServerVersion = serverVersion;
+		serverVersion = newServerVersion;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_FUNCTION_MAPPING__SERVER_VERSION, oldServerVersion, serverVersion));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getServerName() {
+		return serverName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setServerName(String newServerName) {
+		String oldServerName = serverName;
+		serverName = newServerName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_FUNCTION_MAPPING__SERVER_NAME, oldServerName, serverName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Date getCreationTime() {
+		return creationTime;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCreationTime(Date newCreationTime) {
+		Date oldCreationTime = creationTime;
+		creationTime = newCreationTime;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_FUNCTION_MAPPING__CREATION_TIME, oldCreationTime, creationTime));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isDisabled() {
+		return disabled;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDisabled(boolean newDisabled) {
+		boolean oldDisabled = disabled;
+		disabled = newDisabled;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_FUNCTION_MAPPING__DISABLED, oldDisabled, disabled));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getInstsPerInvoc() {
+		return instsPerInvoc;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setInstsPerInvoc(int newInstsPerInvoc) {
+		int oldInstsPerInvoc = instsPerInvoc;
+		instsPerInvoc = newInstsPerInvoc;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_FUNCTION_MAPPING__INSTS_PER_INVOC, oldInstsPerInvoc, instsPerInvoc));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getInstsPerArgByte() {
+		return instsPerArgByte;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setInstsPerArgByte(int newInstsPerArgByte) {
+		int oldInstsPerArgByte = instsPerArgByte;
+		instsPerArgByte = newInstsPerArgByte;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_FUNCTION_MAPPING__INSTS_PER_ARG_BYTE, oldInstsPerArgByte, instsPerArgByte));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getIosPerInvoc() {
+		return iosPerInvoc;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIosPerInvoc(int newIosPerInvoc) {
+		int oldIosPerInvoc = iosPerInvoc;
+		iosPerInvoc = newIosPerInvoc;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_FUNCTION_MAPPING__IOS_PER_INVOC, oldIosPerInvoc, iosPerInvoc));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getIosPerArgByte() {
+		return iosPerArgByte;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIosPerArgByte(int newIosPerArgByte) {
+		int oldIosPerArgByte = iosPerArgByte;
+		iosPerArgByte = newIosPerArgByte;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_FUNCTION_MAPPING__IOS_PER_ARG_BYTE, oldIosPerArgByte, iosPerArgByte));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getOptions() {
+		if (options == null) {
+			options = new EObjectContainmentEList(LUWOption.class, this, LUWPackage.LUW_FUNCTION_MAPPING__OPTIONS);
+		}
+		return options;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Function getLocalFunction() {
+		if (localFunction != null && localFunction.eIsProxy()) {
+			InternalEObject oldLocalFunction = (InternalEObject)localFunction;
+			localFunction = (DB2Function)eResolveProxy(oldLocalFunction);
+			if (localFunction != oldLocalFunction) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_FUNCTION_MAPPING__LOCAL_FUNCTION, oldLocalFunction, localFunction));
+			}
+		}
+		return localFunction;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Function basicGetLocalFunction() {
+		return localFunction;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLocalFunction(DB2Function newLocalFunction) {
+		DB2Function oldLocalFunction = localFunction;
+		localFunction = newLocalFunction;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_FUNCTION_MAPPING__LOCAL_FUNCTION, oldLocalFunction, localFunction));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Function getRemoteFunction() {
+		if (remoteFunction != null && remoteFunction.eIsProxy()) {
+			InternalEObject oldRemoteFunction = (InternalEObject)remoteFunction;
+			remoteFunction = (Function)eResolveProxy(oldRemoteFunction);
+			if (remoteFunction != oldRemoteFunction) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_FUNCTION_MAPPING__REMOTE_FUNCTION, oldRemoteFunction, remoteFunction));
+			}
+		}
+		return remoteFunction;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Function basicGetRemoteFunction() {
+		return remoteFunction;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRemoteFunction(Function newRemoteFunction) {
+		Function oldRemoteFunction = remoteFunction;
+		remoteFunction = newRemoteFunction;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_FUNCTION_MAPPING__REMOTE_FUNCTION, oldRemoteFunction, remoteFunction));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWDatabase getLUWDatabase() {
+		if (luwDatabase != null && luwDatabase.eIsProxy()) {
+			InternalEObject oldLUWDatabase = (InternalEObject)luwDatabase;
+			luwDatabase = (LUWDatabase)eResolveProxy(oldLUWDatabase);
+			if (luwDatabase != oldLUWDatabase) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_FUNCTION_MAPPING__LUW_DATABASE, oldLUWDatabase, luwDatabase));
+			}
+		}
+		return luwDatabase;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWDatabase basicGetLUWDatabase() {
+		return luwDatabase;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetLUWDatabase(LUWDatabase newLUWDatabase, NotificationChain msgs) {
+		LUWDatabase oldLUWDatabase = luwDatabase;
+		luwDatabase = newLUWDatabase;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_FUNCTION_MAPPING__LUW_DATABASE, oldLUWDatabase, newLUWDatabase);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLUWDatabase(LUWDatabase newLUWDatabase) {
+		if (newLUWDatabase != luwDatabase) {
+			NotificationChain msgs = null;
+			if (luwDatabase != null)
+				msgs = ((InternalEObject)luwDatabase).eInverseRemove(this, LUWPackage.LUW_DATABASE__FUNCTION_MAPPINGS, LUWDatabase.class, msgs);
+			if (newLUWDatabase != null)
+				msgs = ((InternalEObject)newLUWDatabase).eInverseAdd(this, LUWPackage.LUW_DATABASE__FUNCTION_MAPPINGS, LUWDatabase.class, msgs);
+			msgs = basicSetLUWDatabase(newLUWDatabase, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_FUNCTION_MAPPING__LUW_DATABASE, newLUWDatabase, newLUWDatabase));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_FUNCTION_MAPPING__LUW_DATABASE:
+				if (luwDatabase != null)
+					msgs = ((InternalEObject)luwDatabase).eInverseRemove(this, LUWPackage.LUW_DATABASE__FUNCTION_MAPPINGS, LUWDatabase.class, msgs);
+				return basicSetLUWDatabase((LUWDatabase)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_FUNCTION_MAPPING__OPTIONS:
+				return ((InternalEList)getOptions()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_FUNCTION_MAPPING__LUW_DATABASE:
+				return basicSetLUWDatabase(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_FUNCTION_MAPPING__SERVER_TYPE:
+				return getServerType();
+			case LUWPackage.LUW_FUNCTION_MAPPING__SERVER_VERSION:
+				return getServerVersion();
+			case LUWPackage.LUW_FUNCTION_MAPPING__SERVER_NAME:
+				return getServerName();
+			case LUWPackage.LUW_FUNCTION_MAPPING__CREATION_TIME:
+				return getCreationTime();
+			case LUWPackage.LUW_FUNCTION_MAPPING__DISABLED:
+				return isDisabled() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_FUNCTION_MAPPING__INSTS_PER_INVOC:
+				return new Integer(getInstsPerInvoc());
+			case LUWPackage.LUW_FUNCTION_MAPPING__INSTS_PER_ARG_BYTE:
+				return new Integer(getInstsPerArgByte());
+			case LUWPackage.LUW_FUNCTION_MAPPING__IOS_PER_INVOC:
+				return new Integer(getIosPerInvoc());
+			case LUWPackage.LUW_FUNCTION_MAPPING__IOS_PER_ARG_BYTE:
+				return new Integer(getIosPerArgByte());
+			case LUWPackage.LUW_FUNCTION_MAPPING__OPTIONS:
+				return getOptions();
+			case LUWPackage.LUW_FUNCTION_MAPPING__LOCAL_FUNCTION:
+				if (resolve) return getLocalFunction();
+				return basicGetLocalFunction();
+			case LUWPackage.LUW_FUNCTION_MAPPING__REMOTE_FUNCTION:
+				if (resolve) return getRemoteFunction();
+				return basicGetRemoteFunction();
+			case LUWPackage.LUW_FUNCTION_MAPPING__LUW_DATABASE:
+				if (resolve) return getLUWDatabase();
+				return basicGetLUWDatabase();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_FUNCTION_MAPPING__SERVER_TYPE:
+				setServerType((String)newValue);
+				return;
+			case LUWPackage.LUW_FUNCTION_MAPPING__SERVER_VERSION:
+				setServerVersion((String)newValue);
+				return;
+			case LUWPackage.LUW_FUNCTION_MAPPING__SERVER_NAME:
+				setServerName((String)newValue);
+				return;
+			case LUWPackage.LUW_FUNCTION_MAPPING__CREATION_TIME:
+				setCreationTime((Date)newValue);
+				return;
+			case LUWPackage.LUW_FUNCTION_MAPPING__DISABLED:
+				setDisabled(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_FUNCTION_MAPPING__INSTS_PER_INVOC:
+				setInstsPerInvoc(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.LUW_FUNCTION_MAPPING__INSTS_PER_ARG_BYTE:
+				setInstsPerArgByte(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.LUW_FUNCTION_MAPPING__IOS_PER_INVOC:
+				setIosPerInvoc(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.LUW_FUNCTION_MAPPING__IOS_PER_ARG_BYTE:
+				setIosPerArgByte(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.LUW_FUNCTION_MAPPING__OPTIONS:
+				getOptions().clear();
+				getOptions().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_FUNCTION_MAPPING__LOCAL_FUNCTION:
+				setLocalFunction((DB2Function)newValue);
+				return;
+			case LUWPackage.LUW_FUNCTION_MAPPING__REMOTE_FUNCTION:
+				setRemoteFunction((Function)newValue);
+				return;
+			case LUWPackage.LUW_FUNCTION_MAPPING__LUW_DATABASE:
+				setLUWDatabase((LUWDatabase)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_FUNCTION_MAPPING__SERVER_TYPE:
+				setServerType(SERVER_TYPE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_FUNCTION_MAPPING__SERVER_VERSION:
+				setServerVersion(SERVER_VERSION_EDEFAULT);
+				return;
+			case LUWPackage.LUW_FUNCTION_MAPPING__SERVER_NAME:
+				setServerName(SERVER_NAME_EDEFAULT);
+				return;
+			case LUWPackage.LUW_FUNCTION_MAPPING__CREATION_TIME:
+				setCreationTime(CREATION_TIME_EDEFAULT);
+				return;
+			case LUWPackage.LUW_FUNCTION_MAPPING__DISABLED:
+				setDisabled(DISABLED_EDEFAULT);
+				return;
+			case LUWPackage.LUW_FUNCTION_MAPPING__INSTS_PER_INVOC:
+				setInstsPerInvoc(INSTS_PER_INVOC_EDEFAULT);
+				return;
+			case LUWPackage.LUW_FUNCTION_MAPPING__INSTS_PER_ARG_BYTE:
+				setInstsPerArgByte(INSTS_PER_ARG_BYTE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_FUNCTION_MAPPING__IOS_PER_INVOC:
+				setIosPerInvoc(IOS_PER_INVOC_EDEFAULT);
+				return;
+			case LUWPackage.LUW_FUNCTION_MAPPING__IOS_PER_ARG_BYTE:
+				setIosPerArgByte(IOS_PER_ARG_BYTE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_FUNCTION_MAPPING__OPTIONS:
+				getOptions().clear();
+				return;
+			case LUWPackage.LUW_FUNCTION_MAPPING__LOCAL_FUNCTION:
+				setLocalFunction((DB2Function)null);
+				return;
+			case LUWPackage.LUW_FUNCTION_MAPPING__REMOTE_FUNCTION:
+				setRemoteFunction((Function)null);
+				return;
+			case LUWPackage.LUW_FUNCTION_MAPPING__LUW_DATABASE:
+				setLUWDatabase((LUWDatabase)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_FUNCTION_MAPPING__SERVER_TYPE:
+				return SERVER_TYPE_EDEFAULT == null ? serverType != null : !SERVER_TYPE_EDEFAULT.equals(serverType);
+			case LUWPackage.LUW_FUNCTION_MAPPING__SERVER_VERSION:
+				return SERVER_VERSION_EDEFAULT == null ? serverVersion != null : !SERVER_VERSION_EDEFAULT.equals(serverVersion);
+			case LUWPackage.LUW_FUNCTION_MAPPING__SERVER_NAME:
+				return SERVER_NAME_EDEFAULT == null ? serverName != null : !SERVER_NAME_EDEFAULT.equals(serverName);
+			case LUWPackage.LUW_FUNCTION_MAPPING__CREATION_TIME:
+				return CREATION_TIME_EDEFAULT == null ? creationTime != null : !CREATION_TIME_EDEFAULT.equals(creationTime);
+			case LUWPackage.LUW_FUNCTION_MAPPING__DISABLED:
+				return disabled != DISABLED_EDEFAULT;
+			case LUWPackage.LUW_FUNCTION_MAPPING__INSTS_PER_INVOC:
+				return instsPerInvoc != INSTS_PER_INVOC_EDEFAULT;
+			case LUWPackage.LUW_FUNCTION_MAPPING__INSTS_PER_ARG_BYTE:
+				return instsPerArgByte != INSTS_PER_ARG_BYTE_EDEFAULT;
+			case LUWPackage.LUW_FUNCTION_MAPPING__IOS_PER_INVOC:
+				return iosPerInvoc != IOS_PER_INVOC_EDEFAULT;
+			case LUWPackage.LUW_FUNCTION_MAPPING__IOS_PER_ARG_BYTE:
+				return iosPerArgByte != IOS_PER_ARG_BYTE_EDEFAULT;
+			case LUWPackage.LUW_FUNCTION_MAPPING__OPTIONS:
+				return options != null && !options.isEmpty();
+			case LUWPackage.LUW_FUNCTION_MAPPING__LOCAL_FUNCTION:
+				return localFunction != null;
+			case LUWPackage.LUW_FUNCTION_MAPPING__REMOTE_FUNCTION:
+				return remoteFunction != null;
+			case LUWPackage.LUW_FUNCTION_MAPPING__LUW_DATABASE:
+				return luwDatabase != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (serverType: "); //$NON-NLS-1$
+		result.append(serverType);
+		result.append(", serverVersion: "); //$NON-NLS-1$
+		result.append(serverVersion);
+		result.append(", serverName: "); //$NON-NLS-1$
+		result.append(serverName);
+		result.append(", creationTime: "); //$NON-NLS-1$
+		result.append(creationTime);
+		result.append(", disabled: "); //$NON-NLS-1$
+		result.append(disabled);
+		result.append(", instsPerInvoc: "); //$NON-NLS-1$
+		result.append(instsPerInvoc);
+		result.append(", instsPerArgByte: "); //$NON-NLS-1$
+		result.append(instsPerArgByte);
+		result.append(", iosPerInvoc: "); //$NON-NLS-1$
+		result.append(iosPerInvoc);
+		result.append(", iosPerArgByte: "); //$NON-NLS-1$
+		result.append(iosPerArgByte);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWFunctionMappingImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWGenericNicknameImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWGenericNicknameImpl.java
new file mode 100644
index 0000000..1bf79d0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWGenericNicknameImpl.java
@@ -0,0 +1,141 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWGenericNicknameImpl.java,v 1.14 2008/01/29 00:04:54 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericNickname;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Generic Nickname</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGenericNicknameImpl#getGenericServer <em>Generic Server</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWGenericNicknameImpl extends LUWNicknameImpl implements LUWGenericNickname {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWGenericNicknameImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_GENERIC_NICKNAME;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWGenericServer getGenericServer() {
+		LUWGenericServer genericServer = basicGetGenericServer();
+		return genericServer != null && genericServer.eIsProxy() ? (LUWGenericServer)eResolveProxy((InternalEObject)genericServer) : genericServer;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public LUWGenericServer basicGetGenericServer() {
+		return (LUWGenericServer) server;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public void setGenericServer(LUWGenericServer newGenericServer) {
+		super.setServer(newGenericServer);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_GENERIC_NICKNAME__GENERIC_SERVER:
+				if (resolve) return getGenericServer();
+				return basicGetGenericServer();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_GENERIC_NICKNAME__GENERIC_SERVER:
+				setGenericServer((LUWGenericServer)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_GENERIC_NICKNAME__GENERIC_SERVER:
+				setGenericServer((LUWGenericServer)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_GENERIC_NICKNAME__GENERIC_SERVER:
+				return basicGetGenericServer() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public void setServer(LUWServer newGenericServer) {
+		setGenericServer((LUWGenericServer)newGenericServer);
+	}
+
+} //LUWGenericNicknameImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWGenericServerImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWGenericServerImpl.java
new file mode 100644
index 0000000..d657153
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWGenericServerImpl.java
@@ -0,0 +1,170 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWGenericServerImpl.java,v 1.11 2008/01/29 00:04:54 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericNickname;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericWrapper;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Generic Server</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGenericServerImpl#getGenericNicknames <em>Generic Nicknames</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGenericServerImpl#getGenericWrapper <em>Generic Wrapper</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWGenericServerImpl extends LUWServerImpl implements LUWGenericServer {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWGenericServerImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_GENERIC_SERVER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public EList getGenericNicknames() {
+		if (nicknames == null) {
+			nicknames = new EObjectWithInverseResolvingEList(LUWGenericNickname.class, this, LUWPackage.LUW_SERVER__NICKNAMES, LUWPackage.LUW_NICKNAME__SERVER);
+		}
+		return nicknames;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWGenericWrapper getGenericWrapper() {
+		LUWGenericWrapper genericWrapper = basicGetGenericWrapper();
+		return genericWrapper != null && genericWrapper.eIsProxy() ? (LUWGenericWrapper)eResolveProxy((InternalEObject)genericWrapper) : genericWrapper;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public LUWGenericWrapper basicGetGenericWrapper() {
+		return (LUWGenericWrapper) wrapper;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public void setGenericWrapper(LUWGenericWrapper newGenericWrapper) {
+		super.setWrapper(newGenericWrapper);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_GENERIC_SERVER__GENERIC_NICKNAMES:
+				return getGenericNicknames();
+			case LUWPackage.LUW_GENERIC_SERVER__GENERIC_WRAPPER:
+				if (resolve) return getGenericWrapper();
+				return basicGetGenericWrapper();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_GENERIC_SERVER__GENERIC_NICKNAMES:
+				getGenericNicknames().clear();
+				getGenericNicknames().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_GENERIC_SERVER__GENERIC_WRAPPER:
+				setGenericWrapper((LUWGenericWrapper)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_GENERIC_SERVER__GENERIC_NICKNAMES:
+				getGenericNicknames().clear();
+				return;
+			case LUWPackage.LUW_GENERIC_SERVER__GENERIC_WRAPPER:
+				setGenericWrapper((LUWGenericWrapper)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_GENERIC_SERVER__GENERIC_NICKNAMES:
+				return !getGenericNicknames().isEmpty();
+			case LUWPackage.LUW_GENERIC_SERVER__GENERIC_WRAPPER:
+				return basicGetGenericWrapper() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public void setWrapper(LUWWrapper newGenericWrapper) {
+		setGenericWrapper((LUWGenericWrapper) newGenericWrapper);
+	}
+
+} //LUWGenericServerImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWGenericUserMappingImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWGenericUserMappingImpl.java
new file mode 100644
index 0000000..42a4fba
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWGenericUserMappingImpl.java
@@ -0,0 +1,212 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWGenericUserMappingImpl.java,v 1.11 2008/01/29 00:04:54 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericUserMapping;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Generic User Mapping</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGenericUserMappingImpl#getRemoteUser <em>Remote User</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGenericUserMappingImpl#getRemotePassword <em>Remote Password</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWGenericUserMappingImpl extends LUWUserMappingImpl implements LUWGenericUserMapping {
+	/**
+	 * The default value of the '{@link #getRemoteUser() <em>Remote User</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRemoteUser()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String REMOTE_USER_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getRemoteUser() <em>Remote User</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRemoteUser()
+	 * @generated
+	 * @ordered
+	 */
+	protected String remoteUser = REMOTE_USER_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getRemotePassword() <em>Remote Password</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRemotePassword()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String REMOTE_PASSWORD_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getRemotePassword() <em>Remote Password</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRemotePassword()
+	 * @generated
+	 * @ordered
+	 */
+	protected String remotePassword = REMOTE_PASSWORD_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWGenericUserMappingImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_GENERIC_USER_MAPPING;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getRemoteUser() {
+		return remoteUser;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRemoteUser(String newRemoteUser) {
+		String oldRemoteUser = remoteUser;
+		remoteUser = newRemoteUser;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_GENERIC_USER_MAPPING__REMOTE_USER, oldRemoteUser, remoteUser));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getRemotePassword() {
+		return remotePassword;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRemotePassword(String newRemotePassword) {
+		String oldRemotePassword = remotePassword;
+		remotePassword = newRemotePassword;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_GENERIC_USER_MAPPING__REMOTE_PASSWORD, oldRemotePassword, remotePassword));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_GENERIC_USER_MAPPING__REMOTE_USER:
+				return getRemoteUser();
+			case LUWPackage.LUW_GENERIC_USER_MAPPING__REMOTE_PASSWORD:
+				return getRemotePassword();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_GENERIC_USER_MAPPING__REMOTE_USER:
+				setRemoteUser((String)newValue);
+				return;
+			case LUWPackage.LUW_GENERIC_USER_MAPPING__REMOTE_PASSWORD:
+				setRemotePassword((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_GENERIC_USER_MAPPING__REMOTE_USER:
+				setRemoteUser(REMOTE_USER_EDEFAULT);
+				return;
+			case LUWPackage.LUW_GENERIC_USER_MAPPING__REMOTE_PASSWORD:
+				setRemotePassword(REMOTE_PASSWORD_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_GENERIC_USER_MAPPING__REMOTE_USER:
+				return REMOTE_USER_EDEFAULT == null ? remoteUser != null : !REMOTE_USER_EDEFAULT.equals(remoteUser);
+			case LUWPackage.LUW_GENERIC_USER_MAPPING__REMOTE_PASSWORD:
+				return REMOTE_PASSWORD_EDEFAULT == null ? remotePassword != null : !REMOTE_PASSWORD_EDEFAULT.equals(remotePassword);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (remoteUser: "); //$NON-NLS-1$
+		result.append(remoteUser);
+		result.append(", remotePassword: "); //$NON-NLS-1$
+		result.append(remotePassword);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWGenericUserMappingImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWGenericWrapperImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWGenericWrapperImpl.java
new file mode 100644
index 0000000..2e3d08e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWGenericWrapperImpl.java
@@ -0,0 +1,118 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWGenericWrapperImpl.java,v 1.10 2008/01/29 00:04:54 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericWrapper;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Generic Wrapper</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGenericWrapperImpl#getGenericServers <em>Generic Servers</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWGenericWrapperImpl extends LUWWrapperImpl implements LUWGenericWrapper {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWGenericWrapperImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_GENERIC_WRAPPER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public EList getGenericServers() {
+		if (servers == null) {
+			servers = new EObjectWithInverseResolvingEList(LUWGenericServer.class, this, LUWPackage.LUW_GENERIC_WRAPPER__GENERIC_SERVERS, LUWPackage.LUW_GENERIC_SERVER__GENERIC_WRAPPER);
+		}
+		return servers;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_GENERIC_WRAPPER__GENERIC_SERVERS:
+				return getGenericServers();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_GENERIC_WRAPPER__GENERIC_SERVERS:
+				getGenericServers().clear();
+				getGenericServers().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_GENERIC_WRAPPER__GENERIC_SERVERS:
+				getGenericServers().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_GENERIC_WRAPPER__GENERIC_SERVERS:
+				return !getGenericServers().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //LUWGenericWrapperImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWGlobalVariableImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWGlobalVariableImpl.java
new file mode 100644
index 0000000..c785597
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWGlobalVariableImpl.java
@@ -0,0 +1,331 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWGlobalVariableImpl.java,v 1.1 2009/01/31 00:22:40 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGlobalVariable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.TypedElementImpl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Global Variable</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGlobalVariableImpl#getDefaultValue <em>Default Value</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGlobalVariableImpl#isIsConstant <em>Is Constant</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWGlobalVariableImpl#getSchema <em>Schema</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWGlobalVariableImpl extends TypedElementImpl implements LUWGlobalVariable {
+	/**
+	 * The default value of the '{@link #getDefaultValue() <em>Default Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDefaultValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String DEFAULT_VALUE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getDefaultValue() <em>Default Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDefaultValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected String defaultValue = DEFAULT_VALUE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isIsConstant() <em>Is Constant</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIsConstant()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean IS_CONSTANT_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isIsConstant() <em>Is Constant</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIsConstant()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean isConstant = IS_CONSTANT_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getSchema() <em>Schema</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSchema()
+	 * @generated
+	 * @ordered
+	 */
+	protected DB2Schema schema;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWGlobalVariableImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_GLOBAL_VARIABLE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getDefaultValue() {
+		return defaultValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDefaultValue(String newDefaultValue) {
+		String oldDefaultValue = defaultValue;
+		defaultValue = newDefaultValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_GLOBAL_VARIABLE__DEFAULT_VALUE, oldDefaultValue, defaultValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isIsConstant() {
+		return isConstant;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIsConstant(boolean newIsConstant) {
+		boolean oldIsConstant = isConstant;
+		isConstant = newIsConstant;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_GLOBAL_VARIABLE__IS_CONSTANT, oldIsConstant, isConstant));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Schema getSchema() {
+		if (schema != null && schema.eIsProxy()) {
+			InternalEObject oldSchema = (InternalEObject)schema;
+			schema = (DB2Schema)eResolveProxy(oldSchema);
+			if (schema != oldSchema) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_GLOBAL_VARIABLE__SCHEMA, oldSchema, schema));
+			}
+		}
+		return schema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Schema basicGetSchema() {
+		return schema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetSchema(DB2Schema newSchema, NotificationChain msgs) {
+		DB2Schema oldSchema = schema;
+		schema = newSchema;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_GLOBAL_VARIABLE__SCHEMA, oldSchema, newSchema);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSchema(DB2Schema newSchema) {
+		if (newSchema != schema) {
+			NotificationChain msgs = null;
+			if (schema != null)
+				msgs = ((InternalEObject)schema).eInverseRemove(this, DB2ModelPackage.DB2_SCHEMA__GLOBAL_VARIABLES, DB2Schema.class, msgs);
+			if (newSchema != null)
+				msgs = ((InternalEObject)newSchema).eInverseAdd(this, DB2ModelPackage.DB2_SCHEMA__GLOBAL_VARIABLES, DB2Schema.class, msgs);
+			msgs = basicSetSchema(newSchema, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_GLOBAL_VARIABLE__SCHEMA, newSchema, newSchema));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_GLOBAL_VARIABLE__SCHEMA:
+				if (schema != null)
+					msgs = ((InternalEObject)schema).eInverseRemove(this, DB2ModelPackage.DB2_SCHEMA__GLOBAL_VARIABLES, DB2Schema.class, msgs);
+				return basicSetSchema((DB2Schema)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_GLOBAL_VARIABLE__SCHEMA:
+				return basicSetSchema(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_GLOBAL_VARIABLE__DEFAULT_VALUE:
+				return getDefaultValue();
+			case LUWPackage.LUW_GLOBAL_VARIABLE__IS_CONSTANT:
+				return isIsConstant() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_GLOBAL_VARIABLE__SCHEMA:
+				if (resolve) return getSchema();
+				return basicGetSchema();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_GLOBAL_VARIABLE__DEFAULT_VALUE:
+				setDefaultValue((String)newValue);
+				return;
+			case LUWPackage.LUW_GLOBAL_VARIABLE__IS_CONSTANT:
+				setIsConstant(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_GLOBAL_VARIABLE__SCHEMA:
+				setSchema((DB2Schema)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_GLOBAL_VARIABLE__DEFAULT_VALUE:
+				setDefaultValue(DEFAULT_VALUE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_GLOBAL_VARIABLE__IS_CONSTANT:
+				setIsConstant(IS_CONSTANT_EDEFAULT);
+				return;
+			case LUWPackage.LUW_GLOBAL_VARIABLE__SCHEMA:
+				setSchema((DB2Schema)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_GLOBAL_VARIABLE__DEFAULT_VALUE:
+				return DEFAULT_VALUE_EDEFAULT == null ? defaultValue != null : !DEFAULT_VALUE_EDEFAULT.equals(defaultValue);
+			case LUWPackage.LUW_GLOBAL_VARIABLE__IS_CONSTANT:
+				return isConstant != IS_CONSTANT_EDEFAULT;
+			case LUWPackage.LUW_GLOBAL_VARIABLE__SCHEMA:
+				return schema != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (defaultValue: "); //$NON-NLS-1$
+		result.append(defaultValue);
+		result.append(", isConstant: "); //$NON-NLS-1$
+		result.append(isConstant);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWGlobalVariableImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWIndexImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWIndexImpl.java
new file mode 100644
index 0000000..71cadf4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWIndexImpl.java
@@ -0,0 +1,1151 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWIndexImpl.java,v 1.14 2009/07/22 20:11:50 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2IndexImpl;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndexCompressType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndexPageSplitType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace;
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Index</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWIndexImpl#getPCTFree <em>PCT Free</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWIndexImpl#getMinPCTFree <em>Min PCT Free</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWIndexImpl#isReverseScan <em>Reverse Scan</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWIndexImpl#isNotPartitioned <em>Not Partitioned</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWIndexImpl#getXmlPattern <em>Xml Pattern</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWIndexImpl#getAsSQLDataType <em>As SQL Data Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWIndexImpl#isAsSQLDataTypeHashed <em>As SQL Data Type Hashed</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWIndexImpl#isSystemRequired <em>System Required</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWIndexImpl#getPageSplitType <em>Page Split Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWIndexImpl#getLevel2PctFree <em>Level2 Pct Free</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWIndexImpl#getMinPctUsed <em>Min Pct Used</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWIndexImpl#getCompress <em>Compress</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWIndexImpl#isCollectStats <em>Collect Stats</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWIndexImpl#isSampledStats <em>Sampled Stats</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWIndexImpl#isDetailedStats <em>Detailed Stats</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWIndexImpl#isIgnoreInvalidValues <em>Ignore Invalid Values</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWIndexImpl#isExcludeNullKeys <em>Exclude Null Keys</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWIndexImpl#getTablespace <em>Tablespace</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWIndexImpl extends DB2IndexImpl implements LUWIndex {
+	/**
+	 * The default value of the '{@link #getPCTFree() <em>PCT Free</em>}' attribute.
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @see #getPCTFree()
+	 * @generated
+	 * @ordered
+	 */
+    protected static final int PCT_FREE_EDEFAULT = -1;
+
+	/**
+	 * The cached value of the '{@link #getPCTFree() <em>PCT Free</em>}' attribute.
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @see #getPCTFree()
+	 * @generated
+	 * @ordered
+	 */
+    protected int pctFree = PCT_FREE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getMinPCTFree() <em>Min PCT Free</em>}' attribute.
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @see #getMinPCTFree()
+	 * @generated
+	 * @ordered
+	 */
+    protected static final int MIN_PCT_FREE_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getMinPCTFree() <em>Min PCT Free</em>}' attribute.
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @see #getMinPCTFree()
+	 * @generated
+	 * @ordered
+	 */
+    protected int minPCTFree = MIN_PCT_FREE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isReverseScan() <em>Reverse Scan</em>}' attribute.
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @see #isReverseScan()
+	 * @generated
+	 * @ordered
+	 */
+    protected static final boolean REVERSE_SCAN_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isReverseScan() <em>Reverse Scan</em>}' attribute.
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @see #isReverseScan()
+	 * @generated
+	 * @ordered
+	 */
+    protected boolean reverseScan = REVERSE_SCAN_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isNotPartitioned() <em>Not Partitioned</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isNotPartitioned()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean NOT_PARTITIONED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isNotPartitioned() <em>Not Partitioned</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isNotPartitioned()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean notPartitioned = NOT_PARTITIONED_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getXmlPattern() <em>Xml Pattern</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getXmlPattern()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String XML_PATTERN_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getXmlPattern() <em>Xml Pattern</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getXmlPattern()
+	 * @generated
+	 * @ordered
+	 */
+	protected String xmlPattern = XML_PATTERN_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getAsSQLDataType() <em>As SQL Data Type</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAsSQLDataType()
+	 * @generated
+	 * @ordered
+	 */
+	protected PredefinedDataType asSQLDataType;
+
+	/**
+	 * The default value of the '{@link #isAsSQLDataTypeHashed() <em>As SQL Data Type Hashed</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isAsSQLDataTypeHashed()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean AS_SQL_DATA_TYPE_HASHED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isAsSQLDataTypeHashed() <em>As SQL Data Type Hashed</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isAsSQLDataTypeHashed()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean asSQLDataTypeHashed = AS_SQL_DATA_TYPE_HASHED_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isSystemRequired() <em>System Required</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSystemRequired()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean SYSTEM_REQUIRED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isSystemRequired() <em>System Required</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSystemRequired()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean systemRequired = SYSTEM_REQUIRED_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getPageSplitType() <em>Page Split Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPageSplitType()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final LUWIndexPageSplitType PAGE_SPLIT_TYPE_EDEFAULT = LUWIndexPageSplitType.SYMMETRIC_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getPageSplitType() <em>Page Split Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPageSplitType()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWIndexPageSplitType pageSplitType = PAGE_SPLIT_TYPE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getLevel2PctFree() <em>Level2 Pct Free</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLevel2PctFree()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int LEVEL2_PCT_FREE_EDEFAULT = -1;
+
+	/**
+	 * The cached value of the '{@link #getLevel2PctFree() <em>Level2 Pct Free</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLevel2PctFree()
+	 * @generated
+	 * @ordered
+	 */
+	protected int level2PctFree = LEVEL2_PCT_FREE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getMinPctUsed() <em>Min Pct Used</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMinPctUsed()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int MIN_PCT_USED_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getMinPctUsed() <em>Min Pct Used</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMinPctUsed()
+	 * @generated
+	 * @ordered
+	 */
+	protected int minPctUsed = MIN_PCT_USED_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getCompress() <em>Compress</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCompress()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final LUWIndexCompressType COMPRESS_EDEFAULT = LUWIndexCompressType.NO_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getCompress() <em>Compress</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCompress()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWIndexCompressType compress = COMPRESS_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isCollectStats() <em>Collect Stats</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isCollectStats()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean COLLECT_STATS_EDEFAULT = true;
+
+	/**
+	 * The cached value of the '{@link #isCollectStats() <em>Collect Stats</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isCollectStats()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean collectStats = COLLECT_STATS_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isSampledStats() <em>Sampled Stats</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSampledStats()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean SAMPLED_STATS_EDEFAULT = true;
+
+	/**
+	 * The cached value of the '{@link #isSampledStats() <em>Sampled Stats</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSampledStats()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean sampledStats = SAMPLED_STATS_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isDetailedStats() <em>Detailed Stats</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDetailedStats()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean DETAILED_STATS_EDEFAULT = true;
+
+	/**
+	 * The cached value of the '{@link #isDetailedStats() <em>Detailed Stats</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDetailedStats()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean detailedStats = DETAILED_STATS_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isIgnoreInvalidValues() <em>Ignore Invalid Values</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIgnoreInvalidValues()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean IGNORE_INVALID_VALUES_EDEFAULT = true;
+
+	/**
+	 * The cached value of the '{@link #isIgnoreInvalidValues() <em>Ignore Invalid Values</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIgnoreInvalidValues()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean ignoreInvalidValues = IGNORE_INVALID_VALUES_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isExcludeNullKeys() <em>Exclude Null Keys</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isExcludeNullKeys()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean EXCLUDE_NULL_KEYS_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isExcludeNullKeys() <em>Exclude Null Keys</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isExcludeNullKeys()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean excludeNullKeys = EXCLUDE_NULL_KEYS_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getTablespace() <em>Tablespace</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTablespace()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWTableSpace tablespace;
+
+	/**
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @generated
+	 */
+    protected LUWIndexImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @generated
+	 */
+    protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_INDEX;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @generated
+	 */
+    public int getPCTFree() {
+		return pctFree;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @generated
+	 */
+    public void setPCTFree(int newPCTFree) {
+		int oldPCTFree = pctFree;
+		pctFree = newPCTFree;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_INDEX__PCT_FREE, oldPCTFree, pctFree));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @generated
+	 */
+    public int getMinPCTFree() {
+		return minPCTFree;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @generated
+	 */
+    public void setMinPCTFree(int newMinPCTFree) {
+		int oldMinPCTFree = minPCTFree;
+		minPCTFree = newMinPCTFree;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_INDEX__MIN_PCT_FREE, oldMinPCTFree, minPCTFree));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @generated
+	 */
+    public boolean isReverseScan() {
+		return reverseScan;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @generated
+	 */
+    public void setReverseScan(boolean newReverseScan) {
+		boolean oldReverseScan = reverseScan;
+		reverseScan = newReverseScan;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_INDEX__REVERSE_SCAN, oldReverseScan, reverseScan));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isNotPartitioned() {
+		return notPartitioned;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setNotPartitioned(boolean newNotPartitioned) {
+		boolean oldNotPartitioned = notPartitioned;
+		notPartitioned = newNotPartitioned;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_INDEX__NOT_PARTITIONED, oldNotPartitioned, notPartitioned));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getXmlPattern() {
+		return xmlPattern;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setXmlPattern(String newXmlPattern) {
+		String oldXmlPattern = xmlPattern;
+		xmlPattern = newXmlPattern;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_INDEX__XML_PATTERN, oldXmlPattern, xmlPattern));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PredefinedDataType getAsSQLDataType() {
+		return asSQLDataType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetAsSQLDataType(PredefinedDataType newAsSQLDataType, NotificationChain msgs) {
+		PredefinedDataType oldAsSQLDataType = asSQLDataType;
+		asSQLDataType = newAsSQLDataType;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_INDEX__AS_SQL_DATA_TYPE, oldAsSQLDataType, newAsSQLDataType);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setAsSQLDataType(PredefinedDataType newAsSQLDataType) {
+		if (newAsSQLDataType != asSQLDataType) {
+			NotificationChain msgs = null;
+			if (asSQLDataType != null)
+				msgs = ((InternalEObject)asSQLDataType).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - LUWPackage.LUW_INDEX__AS_SQL_DATA_TYPE, null, msgs);
+			if (newAsSQLDataType != null)
+				msgs = ((InternalEObject)newAsSQLDataType).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - LUWPackage.LUW_INDEX__AS_SQL_DATA_TYPE, null, msgs);
+			msgs = basicSetAsSQLDataType(newAsSQLDataType, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_INDEX__AS_SQL_DATA_TYPE, newAsSQLDataType, newAsSQLDataType));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isAsSQLDataTypeHashed() {
+		return asSQLDataTypeHashed;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setAsSQLDataTypeHashed(boolean newAsSQLDataTypeHashed) {
+		boolean oldAsSQLDataTypeHashed = asSQLDataTypeHashed;
+		asSQLDataTypeHashed = newAsSQLDataTypeHashed;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_INDEX__AS_SQL_DATA_TYPE_HASHED, oldAsSQLDataTypeHashed, asSQLDataTypeHashed));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isSystemRequired() {
+		return systemRequired;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSystemRequired(boolean newSystemRequired) {
+		boolean oldSystemRequired = systemRequired;
+		systemRequired = newSystemRequired;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_INDEX__SYSTEM_REQUIRED, oldSystemRequired, systemRequired));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWIndexPageSplitType getPageSplitType() {
+		return pageSplitType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPageSplitType(LUWIndexPageSplitType newPageSplitType) {
+		LUWIndexPageSplitType oldPageSplitType = pageSplitType;
+		pageSplitType = newPageSplitType == null ? PAGE_SPLIT_TYPE_EDEFAULT : newPageSplitType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_INDEX__PAGE_SPLIT_TYPE, oldPageSplitType, pageSplitType));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getLevel2PctFree() {
+		return level2PctFree;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLevel2PctFree(int newLevel2PctFree) {
+		int oldLevel2PctFree = level2PctFree;
+		level2PctFree = newLevel2PctFree;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_INDEX__LEVEL2_PCT_FREE, oldLevel2PctFree, level2PctFree));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getMinPctUsed() {
+		return minPctUsed;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setMinPctUsed(int newMinPctUsed) {
+		int oldMinPctUsed = minPctUsed;
+		minPctUsed = newMinPctUsed;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_INDEX__MIN_PCT_USED, oldMinPctUsed, minPctUsed));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWIndexCompressType getCompress() {
+		return compress;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCompress(LUWIndexCompressType newCompress) {
+		LUWIndexCompressType oldCompress = compress;
+		compress = newCompress == null ? COMPRESS_EDEFAULT : newCompress;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_INDEX__COMPRESS, oldCompress, compress));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isCollectStats() {
+		return collectStats;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCollectStats(boolean newCollectStats) {
+		boolean oldCollectStats = collectStats;
+		collectStats = newCollectStats;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_INDEX__COLLECT_STATS, oldCollectStats, collectStats));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isSampledStats() {
+		return sampledStats;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSampledStats(boolean newSampledStats) {
+		boolean oldSampledStats = sampledStats;
+		sampledStats = newSampledStats;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_INDEX__SAMPLED_STATS, oldSampledStats, sampledStats));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isDetailedStats() {
+		return detailedStats;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDetailedStats(boolean newDetailedStats) {
+		boolean oldDetailedStats = detailedStats;
+		detailedStats = newDetailedStats;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_INDEX__DETAILED_STATS, oldDetailedStats, detailedStats));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isIgnoreInvalidValues() {
+		return ignoreInvalidValues;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIgnoreInvalidValues(boolean newIgnoreInvalidValues) {
+		boolean oldIgnoreInvalidValues = ignoreInvalidValues;
+		ignoreInvalidValues = newIgnoreInvalidValues;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_INDEX__IGNORE_INVALID_VALUES, oldIgnoreInvalidValues, ignoreInvalidValues));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isExcludeNullKeys() {
+		return excludeNullKeys;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setExcludeNullKeys(boolean newExcludeNullKeys) {
+		boolean oldExcludeNullKeys = excludeNullKeys;
+		excludeNullKeys = newExcludeNullKeys;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_INDEX__EXCLUDE_NULL_KEYS, oldExcludeNullKeys, excludeNullKeys));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTableSpace getTablespace() {
+		if (tablespace != null && tablespace.eIsProxy()) {
+			InternalEObject oldTablespace = (InternalEObject)tablespace;
+			tablespace = (LUWTableSpace)eResolveProxy(oldTablespace);
+			if (tablespace != oldTablespace) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_INDEX__TABLESPACE, oldTablespace, tablespace));
+			}
+		}
+		return tablespace;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTableSpace basicGetTablespace() {
+		return tablespace;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetTablespace(LUWTableSpace newTablespace, NotificationChain msgs) {
+		LUWTableSpace oldTablespace = tablespace;
+		tablespace = newTablespace;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_INDEX__TABLESPACE, oldTablespace, newTablespace);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTablespace(LUWTableSpace newTablespace) {
+		if (newTablespace != tablespace) {
+			NotificationChain msgs = null;
+			if (tablespace != null)
+				msgs = ((InternalEObject)tablespace).eInverseRemove(this, LUWPackage.LUW_TABLE_SPACE__INDEXES, LUWTableSpace.class, msgs);
+			if (newTablespace != null)
+				msgs = ((InternalEObject)newTablespace).eInverseAdd(this, LUWPackage.LUW_TABLE_SPACE__INDEXES, LUWTableSpace.class, msgs);
+			msgs = basicSetTablespace(newTablespace, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_INDEX__TABLESPACE, newTablespace, newTablespace));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_INDEX__TABLESPACE:
+				if (tablespace != null)
+					msgs = ((InternalEObject)tablespace).eInverseRemove(this, LUWPackage.LUW_TABLE_SPACE__INDEXES, LUWTableSpace.class, msgs);
+				return basicSetTablespace((LUWTableSpace)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_INDEX__AS_SQL_DATA_TYPE:
+				return basicSetAsSQLDataType(null, msgs);
+			case LUWPackage.LUW_INDEX__TABLESPACE:
+				return basicSetTablespace(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_INDEX__PCT_FREE:
+				return new Integer(getPCTFree());
+			case LUWPackage.LUW_INDEX__MIN_PCT_FREE:
+				return new Integer(getMinPCTFree());
+			case LUWPackage.LUW_INDEX__REVERSE_SCAN:
+				return isReverseScan() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_INDEX__NOT_PARTITIONED:
+				return isNotPartitioned() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_INDEX__XML_PATTERN:
+				return getXmlPattern();
+			case LUWPackage.LUW_INDEX__AS_SQL_DATA_TYPE:
+				return getAsSQLDataType();
+			case LUWPackage.LUW_INDEX__AS_SQL_DATA_TYPE_HASHED:
+				return isAsSQLDataTypeHashed() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_INDEX__SYSTEM_REQUIRED:
+				return isSystemRequired() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_INDEX__PAGE_SPLIT_TYPE:
+				return getPageSplitType();
+			case LUWPackage.LUW_INDEX__LEVEL2_PCT_FREE:
+				return new Integer(getLevel2PctFree());
+			case LUWPackage.LUW_INDEX__MIN_PCT_USED:
+				return new Integer(getMinPctUsed());
+			case LUWPackage.LUW_INDEX__COMPRESS:
+				return getCompress();
+			case LUWPackage.LUW_INDEX__COLLECT_STATS:
+				return isCollectStats() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_INDEX__SAMPLED_STATS:
+				return isSampledStats() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_INDEX__DETAILED_STATS:
+				return isDetailedStats() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_INDEX__IGNORE_INVALID_VALUES:
+				return isIgnoreInvalidValues() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_INDEX__EXCLUDE_NULL_KEYS:
+				return isExcludeNullKeys() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_INDEX__TABLESPACE:
+				if (resolve) return getTablespace();
+				return basicGetTablespace();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_INDEX__PCT_FREE:
+				setPCTFree(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.LUW_INDEX__MIN_PCT_FREE:
+				setMinPCTFree(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.LUW_INDEX__REVERSE_SCAN:
+				setReverseScan(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_INDEX__NOT_PARTITIONED:
+				setNotPartitioned(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_INDEX__XML_PATTERN:
+				setXmlPattern((String)newValue);
+				return;
+			case LUWPackage.LUW_INDEX__AS_SQL_DATA_TYPE:
+				setAsSQLDataType((PredefinedDataType)newValue);
+				return;
+			case LUWPackage.LUW_INDEX__AS_SQL_DATA_TYPE_HASHED:
+				setAsSQLDataTypeHashed(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_INDEX__SYSTEM_REQUIRED:
+				setSystemRequired(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_INDEX__PAGE_SPLIT_TYPE:
+				setPageSplitType((LUWIndexPageSplitType)newValue);
+				return;
+			case LUWPackage.LUW_INDEX__LEVEL2_PCT_FREE:
+				setLevel2PctFree(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.LUW_INDEX__MIN_PCT_USED:
+				setMinPctUsed(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.LUW_INDEX__COMPRESS:
+				setCompress((LUWIndexCompressType)newValue);
+				return;
+			case LUWPackage.LUW_INDEX__COLLECT_STATS:
+				setCollectStats(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_INDEX__SAMPLED_STATS:
+				setSampledStats(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_INDEX__DETAILED_STATS:
+				setDetailedStats(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_INDEX__IGNORE_INVALID_VALUES:
+				setIgnoreInvalidValues(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_INDEX__EXCLUDE_NULL_KEYS:
+				setExcludeNullKeys(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_INDEX__TABLESPACE:
+				setTablespace((LUWTableSpace)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_INDEX__PCT_FREE:
+				setPCTFree(PCT_FREE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_INDEX__MIN_PCT_FREE:
+				setMinPCTFree(MIN_PCT_FREE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_INDEX__REVERSE_SCAN:
+				setReverseScan(REVERSE_SCAN_EDEFAULT);
+				return;
+			case LUWPackage.LUW_INDEX__NOT_PARTITIONED:
+				setNotPartitioned(NOT_PARTITIONED_EDEFAULT);
+				return;
+			case LUWPackage.LUW_INDEX__XML_PATTERN:
+				setXmlPattern(XML_PATTERN_EDEFAULT);
+				return;
+			case LUWPackage.LUW_INDEX__AS_SQL_DATA_TYPE:
+				setAsSQLDataType((PredefinedDataType)null);
+				return;
+			case LUWPackage.LUW_INDEX__AS_SQL_DATA_TYPE_HASHED:
+				setAsSQLDataTypeHashed(AS_SQL_DATA_TYPE_HASHED_EDEFAULT);
+				return;
+			case LUWPackage.LUW_INDEX__SYSTEM_REQUIRED:
+				setSystemRequired(SYSTEM_REQUIRED_EDEFAULT);
+				return;
+			case LUWPackage.LUW_INDEX__PAGE_SPLIT_TYPE:
+				setPageSplitType(PAGE_SPLIT_TYPE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_INDEX__LEVEL2_PCT_FREE:
+				setLevel2PctFree(LEVEL2_PCT_FREE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_INDEX__MIN_PCT_USED:
+				setMinPctUsed(MIN_PCT_USED_EDEFAULT);
+				return;
+			case LUWPackage.LUW_INDEX__COMPRESS:
+				setCompress(COMPRESS_EDEFAULT);
+				return;
+			case LUWPackage.LUW_INDEX__COLLECT_STATS:
+				setCollectStats(COLLECT_STATS_EDEFAULT);
+				return;
+			case LUWPackage.LUW_INDEX__SAMPLED_STATS:
+				setSampledStats(SAMPLED_STATS_EDEFAULT);
+				return;
+			case LUWPackage.LUW_INDEX__DETAILED_STATS:
+				setDetailedStats(DETAILED_STATS_EDEFAULT);
+				return;
+			case LUWPackage.LUW_INDEX__IGNORE_INVALID_VALUES:
+				setIgnoreInvalidValues(IGNORE_INVALID_VALUES_EDEFAULT);
+				return;
+			case LUWPackage.LUW_INDEX__EXCLUDE_NULL_KEYS:
+				setExcludeNullKeys(EXCLUDE_NULL_KEYS_EDEFAULT);
+				return;
+			case LUWPackage.LUW_INDEX__TABLESPACE:
+				setTablespace((LUWTableSpace)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_INDEX__PCT_FREE:
+				return pctFree != PCT_FREE_EDEFAULT;
+			case LUWPackage.LUW_INDEX__MIN_PCT_FREE:
+				return minPCTFree != MIN_PCT_FREE_EDEFAULT;
+			case LUWPackage.LUW_INDEX__REVERSE_SCAN:
+				return reverseScan != REVERSE_SCAN_EDEFAULT;
+			case LUWPackage.LUW_INDEX__NOT_PARTITIONED:
+				return notPartitioned != NOT_PARTITIONED_EDEFAULT;
+			case LUWPackage.LUW_INDEX__XML_PATTERN:
+				return XML_PATTERN_EDEFAULT == null ? xmlPattern != null : !XML_PATTERN_EDEFAULT.equals(xmlPattern);
+			case LUWPackage.LUW_INDEX__AS_SQL_DATA_TYPE:
+				return asSQLDataType != null;
+			case LUWPackage.LUW_INDEX__AS_SQL_DATA_TYPE_HASHED:
+				return asSQLDataTypeHashed != AS_SQL_DATA_TYPE_HASHED_EDEFAULT;
+			case LUWPackage.LUW_INDEX__SYSTEM_REQUIRED:
+				return systemRequired != SYSTEM_REQUIRED_EDEFAULT;
+			case LUWPackage.LUW_INDEX__PAGE_SPLIT_TYPE:
+				return pageSplitType != PAGE_SPLIT_TYPE_EDEFAULT;
+			case LUWPackage.LUW_INDEX__LEVEL2_PCT_FREE:
+				return level2PctFree != LEVEL2_PCT_FREE_EDEFAULT;
+			case LUWPackage.LUW_INDEX__MIN_PCT_USED:
+				return minPctUsed != MIN_PCT_USED_EDEFAULT;
+			case LUWPackage.LUW_INDEX__COMPRESS:
+				return compress != COMPRESS_EDEFAULT;
+			case LUWPackage.LUW_INDEX__COLLECT_STATS:
+				return collectStats != COLLECT_STATS_EDEFAULT;
+			case LUWPackage.LUW_INDEX__SAMPLED_STATS:
+				return sampledStats != SAMPLED_STATS_EDEFAULT;
+			case LUWPackage.LUW_INDEX__DETAILED_STATS:
+				return detailedStats != DETAILED_STATS_EDEFAULT;
+			case LUWPackage.LUW_INDEX__IGNORE_INVALID_VALUES:
+				return ignoreInvalidValues != IGNORE_INVALID_VALUES_EDEFAULT;
+			case LUWPackage.LUW_INDEX__EXCLUDE_NULL_KEYS:
+				return excludeNullKeys != EXCLUDE_NULL_KEYS_EDEFAULT;
+			case LUWPackage.LUW_INDEX__TABLESPACE:
+				return tablespace != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @generated
+	 */
+    public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (PCTFree: "); //$NON-NLS-1$
+		result.append(pctFree);
+		result.append(", minPCTFree: "); //$NON-NLS-1$
+		result.append(minPCTFree);
+		result.append(", reverseScan: "); //$NON-NLS-1$
+		result.append(reverseScan);
+		result.append(", notPartitioned: "); //$NON-NLS-1$
+		result.append(notPartitioned);
+		result.append(", xmlPattern: "); //$NON-NLS-1$
+		result.append(xmlPattern);
+		result.append(", asSQLDataTypeHashed: "); //$NON-NLS-1$
+		result.append(asSQLDataTypeHashed);
+		result.append(", systemRequired: "); //$NON-NLS-1$
+		result.append(systemRequired);
+		result.append(", pageSplitType: "); //$NON-NLS-1$
+		result.append(pageSplitType);
+		result.append(", level2PctFree: "); //$NON-NLS-1$
+		result.append(level2PctFree);
+		result.append(", minPctUsed: "); //$NON-NLS-1$
+		result.append(minPctUsed);
+		result.append(", compress: "); //$NON-NLS-1$
+		result.append(compress);
+		result.append(", collectStats: "); //$NON-NLS-1$
+		result.append(collectStats);
+		result.append(", sampledStats: "); //$NON-NLS-1$
+		result.append(sampledStats);
+		result.append(", detailedStats: "); //$NON-NLS-1$
+		result.append(detailedStats);
+		result.append(", ignoreInvalidValues: "); //$NON-NLS-1$
+		result.append(ignoreInvalidValues);
+		result.append(", excludeNullKeys: "); //$NON-NLS-1$
+		result.append(excludeNullKeys);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWIndexImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWMaterializedQueryTableImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWMaterializedQueryTableImpl.java
new file mode 100644
index 0000000..a2e08c2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWMaterializedQueryTableImpl.java
@@ -0,0 +1,858 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWMaterializedQueryTableImpl.java,v 1.13 2008/02/05 02:01:23 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MaterializedQueryTableImpl;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartitionKey;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMaterializedQueryTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTableCompressionMode;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Materialized Query Table</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWMaterializedQueryTableImpl#isValueCompression <em>Value Compression</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWMaterializedQueryTableImpl#isRowCompression <em>Row Compression</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWMaterializedQueryTableImpl#isRowCompressionEmpty <em>Row Compression Empty</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWMaterializedQueryTableImpl#getCompressionMode <em>Compression Mode</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWMaterializedQueryTableImpl#getPartitionKey <em>Partition Key</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWMaterializedQueryTableImpl#getIndexDataTableSpace <em>Index Data Table Space</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWMaterializedQueryTableImpl#getLOBDataTableSpace <em>LOB Data Table Space</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWMaterializedQueryTableImpl#getRegularDataTableSpace <em>Regular Data Table Space</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWMaterializedQueryTableImpl#getDataPartitions <em>Data Partitions</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWMaterializedQueryTableImpl#getDataPartitionKey <em>Data Partition Key</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWMaterializedQueryTableImpl extends DB2MaterializedQueryTableImpl implements LUWMaterializedQueryTable {
+	/**
+	 * The default value of the '{@link #isValueCompression() <em>Value Compression</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isValueCompression()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean VALUE_COMPRESSION_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isValueCompression() <em>Value Compression</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isValueCompression()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean valueCompression = VALUE_COMPRESSION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isRowCompression() <em>Row Compression</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isRowCompression()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean ROW_COMPRESSION_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isRowCompression() <em>Row Compression</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isRowCompression()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean rowCompression = ROW_COMPRESSION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isRowCompressionEmpty() <em>Row Compression Empty</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isRowCompressionEmpty()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean ROW_COMPRESSION_EMPTY_EDEFAULT = true;
+
+	/**
+	 * The cached value of the '{@link #isRowCompressionEmpty() <em>Row Compression Empty</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isRowCompressionEmpty()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean rowCompressionEmpty = ROW_COMPRESSION_EMPTY_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getCompressionMode() <em>Compression Mode</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCompressionMode()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final LUWStorageTableCompressionMode COMPRESSION_MODE_EDEFAULT = LUWStorageTableCompressionMode.NO_SELECTION_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getCompressionMode() <em>Compression Mode</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCompressionMode()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWStorageTableCompressionMode compressionMode = COMPRESSION_MODE_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getPartitionKey() <em>Partition Key</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPartitionKey()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWPartitionKey partitionKey;
+
+	/**
+	 * The cached value of the '{@link #getIndexDataTableSpace() <em>Index Data Table Space</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIndexDataTableSpace()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWTableSpace indexDataTableSpace;
+
+	/**
+	 * The cached value of the '{@link #getLOBDataTableSpace() <em>LOB Data Table Space</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLOBDataTableSpace()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWTableSpace lobDataTableSpace;
+
+	/**
+	 * The cached value of the '{@link #getRegularDataTableSpace() <em>Regular Data Table Space</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRegularDataTableSpace()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWTableSpace regularDataTableSpace;
+
+	/**
+	 * The cached value of the '{@link #getDataPartitions() <em>Data Partitions</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDataPartitions()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList dataPartitions;
+
+	/**
+	 * The cached value of the '{@link #getDataPartitionKey() <em>Data Partition Key</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDataPartitionKey()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWDataPartitionKey dataPartitionKey;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWMaterializedQueryTableImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_MATERIALIZED_QUERY_TABLE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isValueCompression() {
+		return valueCompression;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setValueCompression(boolean newValueCompression) {
+		boolean oldValueCompression = valueCompression;
+		valueCompression = newValueCompression;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__VALUE_COMPRESSION, oldValueCompression, valueCompression));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isRowCompression() {
+		return rowCompression;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRowCompression(boolean newRowCompression) {
+		boolean oldRowCompression = rowCompression;
+		rowCompression = newRowCompression;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__ROW_COMPRESSION, oldRowCompression, rowCompression));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isRowCompressionEmpty() {
+		return rowCompressionEmpty;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRowCompressionEmpty(boolean newRowCompressionEmpty) {
+		boolean oldRowCompressionEmpty = rowCompressionEmpty;
+		rowCompressionEmpty = newRowCompressionEmpty;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__ROW_COMPRESSION_EMPTY, oldRowCompressionEmpty, rowCompressionEmpty));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWStorageTableCompressionMode getCompressionMode() {
+		return compressionMode;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCompressionMode(LUWStorageTableCompressionMode newCompressionMode) {
+		LUWStorageTableCompressionMode oldCompressionMode = compressionMode;
+		compressionMode = newCompressionMode == null ? COMPRESSION_MODE_EDEFAULT : newCompressionMode;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__COMPRESSION_MODE, oldCompressionMode, compressionMode));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWPartitionKey getPartitionKey() {
+		return partitionKey;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetPartitionKey(LUWPartitionKey newPartitionKey, NotificationChain msgs) {
+		LUWPartitionKey oldPartitionKey = partitionKey;
+		partitionKey = newPartitionKey;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__PARTITION_KEY, oldPartitionKey, newPartitionKey);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPartitionKey(LUWPartitionKey newPartitionKey) {
+		if (newPartitionKey != partitionKey) {
+			NotificationChain msgs = null;
+			if (partitionKey != null)
+				msgs = ((InternalEObject)partitionKey).eInverseRemove(this, LUWPackage.LUW_PARTITION_KEY__TABLE, LUWPartitionKey.class, msgs);
+			if (newPartitionKey != null)
+				msgs = ((InternalEObject)newPartitionKey).eInverseAdd(this, LUWPackage.LUW_PARTITION_KEY__TABLE, LUWPartitionKey.class, msgs);
+			msgs = basicSetPartitionKey(newPartitionKey, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__PARTITION_KEY, newPartitionKey, newPartitionKey));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTableSpace getIndexDataTableSpace() {
+		if (indexDataTableSpace != null && indexDataTableSpace.eIsProxy()) {
+			InternalEObject oldIndexDataTableSpace = (InternalEObject)indexDataTableSpace;
+			indexDataTableSpace = (LUWTableSpace)eResolveProxy(oldIndexDataTableSpace);
+			if (indexDataTableSpace != oldIndexDataTableSpace) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__INDEX_DATA_TABLE_SPACE, oldIndexDataTableSpace, indexDataTableSpace));
+			}
+		}
+		return indexDataTableSpace;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTableSpace basicGetIndexDataTableSpace() {
+		return indexDataTableSpace;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetIndexDataTableSpace(LUWTableSpace newIndexDataTableSpace, NotificationChain msgs) {
+		LUWTableSpace oldIndexDataTableSpace = indexDataTableSpace;
+		indexDataTableSpace = newIndexDataTableSpace;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__INDEX_DATA_TABLE_SPACE, oldIndexDataTableSpace, newIndexDataTableSpace);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIndexDataTableSpace(LUWTableSpace newIndexDataTableSpace) {
+		if (newIndexDataTableSpace != indexDataTableSpace) {
+			NotificationChain msgs = null;
+			if (indexDataTableSpace != null)
+				msgs = ((InternalEObject)indexDataTableSpace).eInverseRemove(this, LUWPackage.LUW_TABLE_SPACE__INDEX_DATA_TABLES, LUWTableSpace.class, msgs);
+			if (newIndexDataTableSpace != null)
+				msgs = ((InternalEObject)newIndexDataTableSpace).eInverseAdd(this, LUWPackage.LUW_TABLE_SPACE__INDEX_DATA_TABLES, LUWTableSpace.class, msgs);
+			msgs = basicSetIndexDataTableSpace(newIndexDataTableSpace, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__INDEX_DATA_TABLE_SPACE, newIndexDataTableSpace, newIndexDataTableSpace));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTableSpace getLOBDataTableSpace() {
+		if (lobDataTableSpace != null && lobDataTableSpace.eIsProxy()) {
+			InternalEObject oldLOBDataTableSpace = (InternalEObject)lobDataTableSpace;
+			lobDataTableSpace = (LUWTableSpace)eResolveProxy(oldLOBDataTableSpace);
+			if (lobDataTableSpace != oldLOBDataTableSpace) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__LOB_DATA_TABLE_SPACE, oldLOBDataTableSpace, lobDataTableSpace));
+			}
+		}
+		return lobDataTableSpace;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTableSpace basicGetLOBDataTableSpace() {
+		return lobDataTableSpace;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetLOBDataTableSpace(LUWTableSpace newLOBDataTableSpace, NotificationChain msgs) {
+		LUWTableSpace oldLOBDataTableSpace = lobDataTableSpace;
+		lobDataTableSpace = newLOBDataTableSpace;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__LOB_DATA_TABLE_SPACE, oldLOBDataTableSpace, newLOBDataTableSpace);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLOBDataTableSpace(LUWTableSpace newLOBDataTableSpace) {
+		if (newLOBDataTableSpace != lobDataTableSpace) {
+			NotificationChain msgs = null;
+			if (lobDataTableSpace != null)
+				msgs = ((InternalEObject)lobDataTableSpace).eInverseRemove(this, LUWPackage.LUW_TABLE_SPACE__LOB_DATA_TABLES, LUWTableSpace.class, msgs);
+			if (newLOBDataTableSpace != null)
+				msgs = ((InternalEObject)newLOBDataTableSpace).eInverseAdd(this, LUWPackage.LUW_TABLE_SPACE__LOB_DATA_TABLES, LUWTableSpace.class, msgs);
+			msgs = basicSetLOBDataTableSpace(newLOBDataTableSpace, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__LOB_DATA_TABLE_SPACE, newLOBDataTableSpace, newLOBDataTableSpace));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTableSpace getRegularDataTableSpace() {
+		if (regularDataTableSpace != null && regularDataTableSpace.eIsProxy()) {
+			InternalEObject oldRegularDataTableSpace = (InternalEObject)regularDataTableSpace;
+			regularDataTableSpace = (LUWTableSpace)eResolveProxy(oldRegularDataTableSpace);
+			if (regularDataTableSpace != oldRegularDataTableSpace) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__REGULAR_DATA_TABLE_SPACE, oldRegularDataTableSpace, regularDataTableSpace));
+			}
+		}
+		return regularDataTableSpace;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTableSpace basicGetRegularDataTableSpace() {
+		return regularDataTableSpace;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetRegularDataTableSpace(LUWTableSpace newRegularDataTableSpace, NotificationChain msgs) {
+		LUWTableSpace oldRegularDataTableSpace = regularDataTableSpace;
+		regularDataTableSpace = newRegularDataTableSpace;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__REGULAR_DATA_TABLE_SPACE, oldRegularDataTableSpace, newRegularDataTableSpace);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRegularDataTableSpace(LUWTableSpace newRegularDataTableSpace) {
+		if (newRegularDataTableSpace != regularDataTableSpace) {
+			NotificationChain msgs = null;
+			if (regularDataTableSpace != null)
+				msgs = ((InternalEObject)regularDataTableSpace).eInverseRemove(this, LUWPackage.LUW_TABLE_SPACE__REGULAR_DATA_TABLES, LUWTableSpace.class, msgs);
+			if (newRegularDataTableSpace != null)
+				msgs = ((InternalEObject)newRegularDataTableSpace).eInverseAdd(this, LUWPackage.LUW_TABLE_SPACE__REGULAR_DATA_TABLES, LUWTableSpace.class, msgs);
+			msgs = basicSetRegularDataTableSpace(newRegularDataTableSpace, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__REGULAR_DATA_TABLE_SPACE, newRegularDataTableSpace, newRegularDataTableSpace));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getDataPartitions() {
+		if (dataPartitions == null) {
+			dataPartitions = new EObjectContainmentWithInverseEList(LUWDataPartition.class, this, LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__DATA_PARTITIONS, LUWPackage.LUW_DATA_PARTITION__TABLE);
+		}
+		return dataPartitions;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWDataPartitionKey getDataPartitionKey() {
+		return dataPartitionKey;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetDataPartitionKey(LUWDataPartitionKey newDataPartitionKey, NotificationChain msgs) {
+		LUWDataPartitionKey oldDataPartitionKey = dataPartitionKey;
+		dataPartitionKey = newDataPartitionKey;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__DATA_PARTITION_KEY, oldDataPartitionKey, newDataPartitionKey);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDataPartitionKey(LUWDataPartitionKey newDataPartitionKey) {
+		if (newDataPartitionKey != dataPartitionKey) {
+			NotificationChain msgs = null;
+			if (dataPartitionKey != null)
+				msgs = ((InternalEObject)dataPartitionKey).eInverseRemove(this, LUWPackage.LUW_DATA_PARTITION_KEY__TABLE, LUWDataPartitionKey.class, msgs);
+			if (newDataPartitionKey != null)
+				msgs = ((InternalEObject)newDataPartitionKey).eInverseAdd(this, LUWPackage.LUW_DATA_PARTITION_KEY__TABLE, LUWDataPartitionKey.class, msgs);
+			msgs = basicSetDataPartitionKey(newDataPartitionKey, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__DATA_PARTITION_KEY, newDataPartitionKey, newDataPartitionKey));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public List getTableSpaces() {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__PARTITION_KEY:
+				if (partitionKey != null)
+					msgs = ((InternalEObject)partitionKey).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__PARTITION_KEY, null, msgs);
+				return basicSetPartitionKey((LUWPartitionKey)otherEnd, msgs);
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__INDEX_DATA_TABLE_SPACE:
+				if (indexDataTableSpace != null)
+					msgs = ((InternalEObject)indexDataTableSpace).eInverseRemove(this, LUWPackage.LUW_TABLE_SPACE__INDEX_DATA_TABLES, LUWTableSpace.class, msgs);
+				return basicSetIndexDataTableSpace((LUWTableSpace)otherEnd, msgs);
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__LOB_DATA_TABLE_SPACE:
+				if (lobDataTableSpace != null)
+					msgs = ((InternalEObject)lobDataTableSpace).eInverseRemove(this, LUWPackage.LUW_TABLE_SPACE__LOB_DATA_TABLES, LUWTableSpace.class, msgs);
+				return basicSetLOBDataTableSpace((LUWTableSpace)otherEnd, msgs);
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__REGULAR_DATA_TABLE_SPACE:
+				if (regularDataTableSpace != null)
+					msgs = ((InternalEObject)regularDataTableSpace).eInverseRemove(this, LUWPackage.LUW_TABLE_SPACE__REGULAR_DATA_TABLES, LUWTableSpace.class, msgs);
+				return basicSetRegularDataTableSpace((LUWTableSpace)otherEnd, msgs);
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__DATA_PARTITIONS:
+				return ((InternalEList)getDataPartitions()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__DATA_PARTITION_KEY:
+				if (dataPartitionKey != null)
+					msgs = ((InternalEObject)dataPartitionKey).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__DATA_PARTITION_KEY, null, msgs);
+				return basicSetDataPartitionKey((LUWDataPartitionKey)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__PARTITION_KEY:
+				return basicSetPartitionKey(null, msgs);
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__INDEX_DATA_TABLE_SPACE:
+				return basicSetIndexDataTableSpace(null, msgs);
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__LOB_DATA_TABLE_SPACE:
+				return basicSetLOBDataTableSpace(null, msgs);
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__REGULAR_DATA_TABLE_SPACE:
+				return basicSetRegularDataTableSpace(null, msgs);
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__DATA_PARTITIONS:
+				return ((InternalEList)getDataPartitions()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__DATA_PARTITION_KEY:
+				return basicSetDataPartitionKey(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__VALUE_COMPRESSION:
+				return isValueCompression() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__ROW_COMPRESSION:
+				return isRowCompression() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__ROW_COMPRESSION_EMPTY:
+				return isRowCompressionEmpty() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__COMPRESSION_MODE:
+				return getCompressionMode();
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__PARTITION_KEY:
+				return getPartitionKey();
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__INDEX_DATA_TABLE_SPACE:
+				if (resolve) return getIndexDataTableSpace();
+				return basicGetIndexDataTableSpace();
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__LOB_DATA_TABLE_SPACE:
+				if (resolve) return getLOBDataTableSpace();
+				return basicGetLOBDataTableSpace();
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__REGULAR_DATA_TABLE_SPACE:
+				if (resolve) return getRegularDataTableSpace();
+				return basicGetRegularDataTableSpace();
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__DATA_PARTITIONS:
+				return getDataPartitions();
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__DATA_PARTITION_KEY:
+				return getDataPartitionKey();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__VALUE_COMPRESSION:
+				setValueCompression(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__ROW_COMPRESSION:
+				setRowCompression(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__ROW_COMPRESSION_EMPTY:
+				setRowCompressionEmpty(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__COMPRESSION_MODE:
+				setCompressionMode((LUWStorageTableCompressionMode)newValue);
+				return;
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__PARTITION_KEY:
+				setPartitionKey((LUWPartitionKey)newValue);
+				return;
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__INDEX_DATA_TABLE_SPACE:
+				setIndexDataTableSpace((LUWTableSpace)newValue);
+				return;
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__LOB_DATA_TABLE_SPACE:
+				setLOBDataTableSpace((LUWTableSpace)newValue);
+				return;
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__REGULAR_DATA_TABLE_SPACE:
+				setRegularDataTableSpace((LUWTableSpace)newValue);
+				return;
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__DATA_PARTITIONS:
+				getDataPartitions().clear();
+				getDataPartitions().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__DATA_PARTITION_KEY:
+				setDataPartitionKey((LUWDataPartitionKey)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__VALUE_COMPRESSION:
+				setValueCompression(VALUE_COMPRESSION_EDEFAULT);
+				return;
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__ROW_COMPRESSION:
+				setRowCompression(ROW_COMPRESSION_EDEFAULT);
+				return;
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__ROW_COMPRESSION_EMPTY:
+				setRowCompressionEmpty(ROW_COMPRESSION_EMPTY_EDEFAULT);
+				return;
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__COMPRESSION_MODE:
+				setCompressionMode(COMPRESSION_MODE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__PARTITION_KEY:
+				setPartitionKey((LUWPartitionKey)null);
+				return;
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__INDEX_DATA_TABLE_SPACE:
+				setIndexDataTableSpace((LUWTableSpace)null);
+				return;
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__LOB_DATA_TABLE_SPACE:
+				setLOBDataTableSpace((LUWTableSpace)null);
+				return;
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__REGULAR_DATA_TABLE_SPACE:
+				setRegularDataTableSpace((LUWTableSpace)null);
+				return;
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__DATA_PARTITIONS:
+				getDataPartitions().clear();
+				return;
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__DATA_PARTITION_KEY:
+				setDataPartitionKey((LUWDataPartitionKey)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__VALUE_COMPRESSION:
+				return valueCompression != VALUE_COMPRESSION_EDEFAULT;
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__ROW_COMPRESSION:
+				return rowCompression != ROW_COMPRESSION_EDEFAULT;
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__ROW_COMPRESSION_EMPTY:
+				return rowCompressionEmpty != ROW_COMPRESSION_EMPTY_EDEFAULT;
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__COMPRESSION_MODE:
+				return compressionMode != COMPRESSION_MODE_EDEFAULT;
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__PARTITION_KEY:
+				return partitionKey != null;
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__INDEX_DATA_TABLE_SPACE:
+				return indexDataTableSpace != null;
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__LOB_DATA_TABLE_SPACE:
+				return lobDataTableSpace != null;
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__REGULAR_DATA_TABLE_SPACE:
+				return regularDataTableSpace != null;
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__DATA_PARTITIONS:
+				return dataPartitions != null && !dataPartitions.isEmpty();
+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__DATA_PARTITION_KEY:
+				return dataPartitionKey != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class baseClass) {
+		if (baseClass == LUWStorageTable.class) {
+			switch (derivedFeatureID) {
+				case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__VALUE_COMPRESSION: return LUWPackage.LUW_STORAGE_TABLE__VALUE_COMPRESSION;
+				case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__ROW_COMPRESSION: return LUWPackage.LUW_STORAGE_TABLE__ROW_COMPRESSION;
+				case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__ROW_COMPRESSION_EMPTY: return LUWPackage.LUW_STORAGE_TABLE__ROW_COMPRESSION_EMPTY;
+				case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__COMPRESSION_MODE: return LUWPackage.LUW_STORAGE_TABLE__COMPRESSION_MODE;
+				case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__PARTITION_KEY: return LUWPackage.LUW_STORAGE_TABLE__PARTITION_KEY;
+				case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__INDEX_DATA_TABLE_SPACE: return LUWPackage.LUW_STORAGE_TABLE__INDEX_DATA_TABLE_SPACE;
+				case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__LOB_DATA_TABLE_SPACE: return LUWPackage.LUW_STORAGE_TABLE__LOB_DATA_TABLE_SPACE;
+				case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__REGULAR_DATA_TABLE_SPACE: return LUWPackage.LUW_STORAGE_TABLE__REGULAR_DATA_TABLE_SPACE;
+				case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__DATA_PARTITIONS: return LUWPackage.LUW_STORAGE_TABLE__DATA_PARTITIONS;
+				case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__DATA_PARTITION_KEY: return LUWPackage.LUW_STORAGE_TABLE__DATA_PARTITION_KEY;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class baseClass) {
+		if (baseClass == LUWStorageTable.class) {
+			switch (baseFeatureID) {
+				case LUWPackage.LUW_STORAGE_TABLE__VALUE_COMPRESSION: return LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__VALUE_COMPRESSION;
+				case LUWPackage.LUW_STORAGE_TABLE__ROW_COMPRESSION: return LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__ROW_COMPRESSION;
+				case LUWPackage.LUW_STORAGE_TABLE__ROW_COMPRESSION_EMPTY: return LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__ROW_COMPRESSION_EMPTY;
+				case LUWPackage.LUW_STORAGE_TABLE__COMPRESSION_MODE: return LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__COMPRESSION_MODE;
+				case LUWPackage.LUW_STORAGE_TABLE__PARTITION_KEY: return LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__PARTITION_KEY;
+				case LUWPackage.LUW_STORAGE_TABLE__INDEX_DATA_TABLE_SPACE: return LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__INDEX_DATA_TABLE_SPACE;
+				case LUWPackage.LUW_STORAGE_TABLE__LOB_DATA_TABLE_SPACE: return LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__LOB_DATA_TABLE_SPACE;
+				case LUWPackage.LUW_STORAGE_TABLE__REGULAR_DATA_TABLE_SPACE: return LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__REGULAR_DATA_TABLE_SPACE;
+				case LUWPackage.LUW_STORAGE_TABLE__DATA_PARTITIONS: return LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__DATA_PARTITIONS;
+				case LUWPackage.LUW_STORAGE_TABLE__DATA_PARTITION_KEY: return LUWPackage.LUW_MATERIALIZED_QUERY_TABLE__DATA_PARTITION_KEY;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (valueCompression: "); //$NON-NLS-1$
+		result.append(valueCompression);
+		result.append(", rowCompression: "); //$NON-NLS-1$
+		result.append(rowCompression);
+		result.append(", rowCompressionEmpty: "); //$NON-NLS-1$
+		result.append(rowCompressionEmpty);
+		result.append(", compressionMode: "); //$NON-NLS-1$
+		result.append(compressionMode);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWMaterializedQueryTableImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWMemberImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWMemberImpl.java
new file mode 100644
index 0000000..480e028
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWMemberImpl.java
@@ -0,0 +1,370 @@
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+
+import org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MemberImpl;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMember;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMemberType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Member</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWMemberImpl#getType <em>Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWMemberImpl#getAlert <em>Alert</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWMemberImpl#getDbPartitionNum <em>Db Partition Num</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWMemberImpl#getLogicalPort <em>Logical Port</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWMemberImpl#getNetName <em>Net Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWMemberImpl extends DB2MemberImpl implements LUWMember {
+	/**
+	 * The default value of the '{@link #getType() <em>Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getType()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final LUWMemberType TYPE_EDEFAULT = LUWMemberType.MEMBER_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getType() <em>Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getType()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWMemberType type = TYPE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getAlert() <em>Alert</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAlert()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String ALERT_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getAlert() <em>Alert</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAlert()
+	 * @generated
+	 * @ordered
+	 */
+	protected String alert = ALERT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getDbPartitionNum() <em>Db Partition Num</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDbPartitionNum()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int DB_PARTITION_NUM_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getDbPartitionNum() <em>Db Partition Num</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDbPartitionNum()
+	 * @generated
+	 * @ordered
+	 */
+	protected int dbPartitionNum = DB_PARTITION_NUM_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getLogicalPort() <em>Logical Port</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLogicalPort()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int LOGICAL_PORT_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getLogicalPort() <em>Logical Port</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLogicalPort()
+	 * @generated
+	 * @ordered
+	 */
+	protected int logicalPort = LOGICAL_PORT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getNetName() <em>Net Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNetName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String NET_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getNetName() <em>Net Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNetName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String netName = NET_NAME_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWMemberImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_MEMBER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWMemberType getType() {
+		return type;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setType(LUWMemberType newType) {
+		LUWMemberType oldType = type;
+		type = newType == null ? TYPE_EDEFAULT : newType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MEMBER__TYPE, oldType, type));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getAlert() {
+		return alert;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setAlert(String newAlert) {
+		String oldAlert = alert;
+		alert = newAlert;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MEMBER__ALERT, oldAlert, alert));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getDbPartitionNum() {
+		return dbPartitionNum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDbPartitionNum(int newDbPartitionNum) {
+		int oldDbPartitionNum = dbPartitionNum;
+		dbPartitionNum = newDbPartitionNum;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MEMBER__DB_PARTITION_NUM, oldDbPartitionNum, dbPartitionNum));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getLogicalPort() {
+		return logicalPort;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLogicalPort(int newLogicalPort) {
+		int oldLogicalPort = logicalPort;
+		logicalPort = newLogicalPort;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MEMBER__LOGICAL_PORT, oldLogicalPort, logicalPort));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getNetName() {
+		return netName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setNetName(String newNetName) {
+		String oldNetName = netName;
+		netName = newNetName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MEMBER__NET_NAME, oldNetName, netName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_MEMBER__TYPE:
+				return getType();
+			case LUWPackage.LUW_MEMBER__ALERT:
+				return getAlert();
+			case LUWPackage.LUW_MEMBER__DB_PARTITION_NUM:
+				return new Integer(getDbPartitionNum());
+			case LUWPackage.LUW_MEMBER__LOGICAL_PORT:
+				return new Integer(getLogicalPort());
+			case LUWPackage.LUW_MEMBER__NET_NAME:
+				return getNetName();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_MEMBER__TYPE:
+				setType((LUWMemberType)newValue);
+				return;
+			case LUWPackage.LUW_MEMBER__ALERT:
+				setAlert((String)newValue);
+				return;
+			case LUWPackage.LUW_MEMBER__DB_PARTITION_NUM:
+				setDbPartitionNum(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.LUW_MEMBER__LOGICAL_PORT:
+				setLogicalPort(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.LUW_MEMBER__NET_NAME:
+				setNetName((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_MEMBER__TYPE:
+				setType(TYPE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_MEMBER__ALERT:
+				setAlert(ALERT_EDEFAULT);
+				return;
+			case LUWPackage.LUW_MEMBER__DB_PARTITION_NUM:
+				setDbPartitionNum(DB_PARTITION_NUM_EDEFAULT);
+				return;
+			case LUWPackage.LUW_MEMBER__LOGICAL_PORT:
+				setLogicalPort(LOGICAL_PORT_EDEFAULT);
+				return;
+			case LUWPackage.LUW_MEMBER__NET_NAME:
+				setNetName(NET_NAME_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_MEMBER__TYPE:
+				return type != TYPE_EDEFAULT;
+			case LUWPackage.LUW_MEMBER__ALERT:
+				return ALERT_EDEFAULT == null ? alert != null : !ALERT_EDEFAULT.equals(alert);
+			case LUWPackage.LUW_MEMBER__DB_PARTITION_NUM:
+				return dbPartitionNum != DB_PARTITION_NUM_EDEFAULT;
+			case LUWPackage.LUW_MEMBER__LOGICAL_PORT:
+				return logicalPort != LOGICAL_PORT_EDEFAULT;
+			case LUWPackage.LUW_MEMBER__NET_NAME:
+				return NET_NAME_EDEFAULT == null ? netName != null : !NET_NAME_EDEFAULT.equals(netName);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (type: "); //$NON-NLS-1$
+		result.append(type);
+		result.append(", alert: "); //$NON-NLS-1$
+		result.append(alert);
+		result.append(", dbPartitionNum: "); //$NON-NLS-1$
+		result.append(dbPartitionNum);
+		result.append(", logicalPort: "); //$NON-NLS-1$
+		result.append(logicalPort);
+		result.append(", netName: "); //$NON-NLS-1$
+		result.append(netName);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWMemberImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWModuleArrayDataTypeImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWModuleArrayDataTypeImpl.java
new file mode 100644
index 0000000..5d28596
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWModuleArrayDataTypeImpl.java
@@ -0,0 +1,304 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWModuleArrayDataTypeImpl.java,v 1.2 2009/02/16 19:01:34 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleArrayDataType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+
+import org.eclipse.datatools.modelbase.sql.datatypes.impl.ArrayDataTypeImpl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Module Array Data Type</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleArrayDataTypeImpl#isPublished <em>Published</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleArrayDataTypeImpl#getModule <em>Module</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWModuleArrayDataTypeImpl extends LUWArrayDataTypeImpl implements LUWModuleArrayDataType {
+	/**
+	 * The default value of the '{@link #isPublished() <em>Published</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isPublished()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean PUBLISHED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isPublished() <em>Published</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isPublished()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean published = PUBLISHED_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWModuleArrayDataTypeImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_MODULE_ARRAY_DATA_TYPE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isPublished() {
+		return published;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPublished(boolean newPublished) {
+		boolean oldPublished = published;
+		published = newPublished;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MODULE_ARRAY_DATA_TYPE__PUBLISHED, oldPublished, published));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWModule getModule() {
+		if (eContainerFeatureID() != LUWPackage.LUW_MODULE_ARRAY_DATA_TYPE__MODULE) return null;
+		return (LUWModule)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetModule(LUWModule newModule, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newModule, LUWPackage.LUW_MODULE_ARRAY_DATA_TYPE__MODULE, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setModule(LUWModule newModule) {
+		if (newModule != eInternalContainer() || (eContainerFeatureID() != LUWPackage.LUW_MODULE_ARRAY_DATA_TYPE__MODULE && newModule != null)) {
+			if (EcoreUtil.isAncestor(this, newModule))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newModule != null)
+				msgs = ((InternalEObject)newModule).eInverseAdd(this, LUWPackage.LUW_MODULE__MODULE_OBJECTS, LUWModule.class, msgs);
+			msgs = basicSetModule(newModule, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MODULE_ARRAY_DATA_TYPE__MODULE, newModule, newModule));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_ARRAY_DATA_TYPE__MODULE:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetModule((LUWModule)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_ARRAY_DATA_TYPE__MODULE:
+				return basicSetModule(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case LUWPackage.LUW_MODULE_ARRAY_DATA_TYPE__MODULE:
+				return eInternalContainer().eInverseRemove(this, LUWPackage.LUW_MODULE__MODULE_OBJECTS, LUWModule.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_ARRAY_DATA_TYPE__PUBLISHED:
+				return isPublished() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_MODULE_ARRAY_DATA_TYPE__MODULE:
+				return getModule();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_ARRAY_DATA_TYPE__PUBLISHED:
+				setPublished(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_MODULE_ARRAY_DATA_TYPE__MODULE:
+				setModule((LUWModule)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_ARRAY_DATA_TYPE__PUBLISHED:
+				setPublished(PUBLISHED_EDEFAULT);
+				return;
+			case LUWPackage.LUW_MODULE_ARRAY_DATA_TYPE__MODULE:
+				setModule((LUWModule)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_ARRAY_DATA_TYPE__PUBLISHED:
+				return published != PUBLISHED_EDEFAULT;
+			case LUWPackage.LUW_MODULE_ARRAY_DATA_TYPE__MODULE:
+				return getModule() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class baseClass) {
+		if (baseClass == LUWModuleObject.class) {
+			switch (derivedFeatureID) {
+				case LUWPackage.LUW_MODULE_ARRAY_DATA_TYPE__PUBLISHED: return LUWPackage.LUW_MODULE_OBJECT__PUBLISHED;
+				case LUWPackage.LUW_MODULE_ARRAY_DATA_TYPE__MODULE: return LUWPackage.LUW_MODULE_OBJECT__MODULE;
+				default: return -1;
+			}
+		}
+		if (baseClass == LUWModuleType.class) {
+			switch (derivedFeatureID) {
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class baseClass) {
+		if (baseClass == LUWModuleObject.class) {
+			switch (baseFeatureID) {
+				case LUWPackage.LUW_MODULE_OBJECT__PUBLISHED: return LUWPackage.LUW_MODULE_ARRAY_DATA_TYPE__PUBLISHED;
+				case LUWPackage.LUW_MODULE_OBJECT__MODULE: return LUWPackage.LUW_MODULE_ARRAY_DATA_TYPE__MODULE;
+				default: return -1;
+			}
+		}
+		if (baseClass == LUWModuleType.class) {
+			switch (baseFeatureID) {
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (published: "); //$NON-NLS-1$
+		result.append(published);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWModuleArrayDataTypeImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWModuleConditionImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWModuleConditionImpl.java
new file mode 100644
index 0000000..3a063ad
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWModuleConditionImpl.java
@@ -0,0 +1,347 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWModuleConditionImpl.java,v 1.1 2009/01/31 00:22:40 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleCondition;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Module Condition</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleConditionImpl#isPublished <em>Published</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleConditionImpl#getModule <em>Module</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleConditionImpl#getSqlstate <em>Sqlstate</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWModuleConditionImpl extends SQLObjectImpl implements LUWModuleCondition {
+	/**
+	 * The default value of the '{@link #isPublished() <em>Published</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isPublished()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean PUBLISHED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isPublished() <em>Published</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isPublished()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean published = PUBLISHED_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getSqlstate() <em>Sqlstate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSqlstate()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String SQLSTATE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getSqlstate() <em>Sqlstate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSqlstate()
+	 * @generated
+	 * @ordered
+	 */
+	protected String sqlstate = SQLSTATE_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWModuleConditionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_MODULE_CONDITION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isPublished() {
+		return published;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPublished(boolean newPublished) {
+		boolean oldPublished = published;
+		published = newPublished;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MODULE_CONDITION__PUBLISHED, oldPublished, published));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWModule getModule() {
+		if (eContainerFeatureID() != LUWPackage.LUW_MODULE_CONDITION__MODULE) return null;
+		return (LUWModule)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetModule(LUWModule newModule, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newModule, LUWPackage.LUW_MODULE_CONDITION__MODULE, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setModule(LUWModule newModule) {
+		if (newModule != eInternalContainer() || (eContainerFeatureID() != LUWPackage.LUW_MODULE_CONDITION__MODULE && newModule != null)) {
+			if (EcoreUtil.isAncestor(this, newModule))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newModule != null)
+				msgs = ((InternalEObject)newModule).eInverseAdd(this, LUWPackage.LUW_MODULE__MODULE_OBJECTS, LUWModule.class, msgs);
+			msgs = basicSetModule(newModule, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MODULE_CONDITION__MODULE, newModule, newModule));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getSqlstate() {
+		return sqlstate;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSqlstate(String newSqlstate) {
+		String oldSqlstate = sqlstate;
+		sqlstate = newSqlstate;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MODULE_CONDITION__SQLSTATE, oldSqlstate, sqlstate));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_CONDITION__MODULE:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetModule((LUWModule)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_CONDITION__MODULE:
+				return basicSetModule(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case LUWPackage.LUW_MODULE_CONDITION__MODULE:
+				return eInternalContainer().eInverseRemove(this, LUWPackage.LUW_MODULE__MODULE_OBJECTS, LUWModule.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_CONDITION__PUBLISHED:
+				return isPublished() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_MODULE_CONDITION__MODULE:
+				return getModule();
+			case LUWPackage.LUW_MODULE_CONDITION__SQLSTATE:
+				return getSqlstate();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_CONDITION__PUBLISHED:
+				setPublished(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_MODULE_CONDITION__MODULE:
+				setModule((LUWModule)newValue);
+				return;
+			case LUWPackage.LUW_MODULE_CONDITION__SQLSTATE:
+				setSqlstate((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_CONDITION__PUBLISHED:
+				setPublished(PUBLISHED_EDEFAULT);
+				return;
+			case LUWPackage.LUW_MODULE_CONDITION__MODULE:
+				setModule((LUWModule)null);
+				return;
+			case LUWPackage.LUW_MODULE_CONDITION__SQLSTATE:
+				setSqlstate(SQLSTATE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_CONDITION__PUBLISHED:
+				return published != PUBLISHED_EDEFAULT;
+			case LUWPackage.LUW_MODULE_CONDITION__MODULE:
+				return getModule() != null;
+			case LUWPackage.LUW_MODULE_CONDITION__SQLSTATE:
+				return SQLSTATE_EDEFAULT == null ? sqlstate != null : !SQLSTATE_EDEFAULT.equals(sqlstate);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class baseClass) {
+		if (baseClass == LUWModuleObject.class) {
+			switch (derivedFeatureID) {
+				case LUWPackage.LUW_MODULE_CONDITION__PUBLISHED: return LUWPackage.LUW_MODULE_OBJECT__PUBLISHED;
+				case LUWPackage.LUW_MODULE_CONDITION__MODULE: return LUWPackage.LUW_MODULE_OBJECT__MODULE;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class baseClass) {
+		if (baseClass == LUWModuleObject.class) {
+			switch (baseFeatureID) {
+				case LUWPackage.LUW_MODULE_OBJECT__PUBLISHED: return LUWPackage.LUW_MODULE_CONDITION__PUBLISHED;
+				case LUWPackage.LUW_MODULE_OBJECT__MODULE: return LUWPackage.LUW_MODULE_CONDITION__MODULE;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (published: "); //$NON-NLS-1$
+		result.append(published);
+		result.append(", sqlstate: "); //$NON-NLS-1$
+		result.append(sqlstate);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWModuleConditionImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWModuleCursorDataTypeImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWModuleCursorDataTypeImpl.java
new file mode 100644
index 0000000..5bab16c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWModuleCursorDataTypeImpl.java
@@ -0,0 +1,302 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWModuleCursorDataTypeImpl.java,v 1.1 2009/02/27 18:42:01 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleCursorDataType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Module Cursor Data Type</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleCursorDataTypeImpl#isPublished <em>Published</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleCursorDataTypeImpl#getModule <em>Module</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWModuleCursorDataTypeImpl extends LUWCursorDataTypeImpl implements LUWModuleCursorDataType {
+	/**
+	 * The default value of the '{@link #isPublished() <em>Published</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isPublished()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean PUBLISHED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isPublished() <em>Published</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isPublished()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean published = PUBLISHED_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWModuleCursorDataTypeImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_MODULE_CURSOR_DATA_TYPE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isPublished() {
+		return published;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPublished(boolean newPublished) {
+		boolean oldPublished = published;
+		published = newPublished;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MODULE_CURSOR_DATA_TYPE__PUBLISHED, oldPublished, published));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWModule getModule() {
+		if (eContainerFeatureID() != LUWPackage.LUW_MODULE_CURSOR_DATA_TYPE__MODULE) return null;
+		return (LUWModule)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetModule(LUWModule newModule, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newModule, LUWPackage.LUW_MODULE_CURSOR_DATA_TYPE__MODULE, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setModule(LUWModule newModule) {
+		if (newModule != eInternalContainer() || (eContainerFeatureID() != LUWPackage.LUW_MODULE_CURSOR_DATA_TYPE__MODULE && newModule != null)) {
+			if (EcoreUtil.isAncestor(this, newModule))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newModule != null)
+				msgs = ((InternalEObject)newModule).eInverseAdd(this, LUWPackage.LUW_MODULE__MODULE_OBJECTS, LUWModule.class, msgs);
+			msgs = basicSetModule(newModule, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MODULE_CURSOR_DATA_TYPE__MODULE, newModule, newModule));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_CURSOR_DATA_TYPE__MODULE:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetModule((LUWModule)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_CURSOR_DATA_TYPE__MODULE:
+				return basicSetModule(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case LUWPackage.LUW_MODULE_CURSOR_DATA_TYPE__MODULE:
+				return eInternalContainer().eInverseRemove(this, LUWPackage.LUW_MODULE__MODULE_OBJECTS, LUWModule.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_CURSOR_DATA_TYPE__PUBLISHED:
+				return isPublished() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_MODULE_CURSOR_DATA_TYPE__MODULE:
+				return getModule();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_CURSOR_DATA_TYPE__PUBLISHED:
+				setPublished(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_MODULE_CURSOR_DATA_TYPE__MODULE:
+				setModule((LUWModule)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_CURSOR_DATA_TYPE__PUBLISHED:
+				setPublished(PUBLISHED_EDEFAULT);
+				return;
+			case LUWPackage.LUW_MODULE_CURSOR_DATA_TYPE__MODULE:
+				setModule((LUWModule)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_CURSOR_DATA_TYPE__PUBLISHED:
+				return published != PUBLISHED_EDEFAULT;
+			case LUWPackage.LUW_MODULE_CURSOR_DATA_TYPE__MODULE:
+				return getModule() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class baseClass) {
+		if (baseClass == LUWModuleObject.class) {
+			switch (derivedFeatureID) {
+				case LUWPackage.LUW_MODULE_CURSOR_DATA_TYPE__PUBLISHED: return LUWPackage.LUW_MODULE_OBJECT__PUBLISHED;
+				case LUWPackage.LUW_MODULE_CURSOR_DATA_TYPE__MODULE: return LUWPackage.LUW_MODULE_OBJECT__MODULE;
+				default: return -1;
+			}
+		}
+		if (baseClass == LUWModuleType.class) {
+			switch (derivedFeatureID) {
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class baseClass) {
+		if (baseClass == LUWModuleObject.class) {
+			switch (baseFeatureID) {
+				case LUWPackage.LUW_MODULE_OBJECT__PUBLISHED: return LUWPackage.LUW_MODULE_CURSOR_DATA_TYPE__PUBLISHED;
+				case LUWPackage.LUW_MODULE_OBJECT__MODULE: return LUWPackage.LUW_MODULE_CURSOR_DATA_TYPE__MODULE;
+				default: return -1;
+			}
+		}
+		if (baseClass == LUWModuleType.class) {
+			switch (baseFeatureID) {
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (published: "); //$NON-NLS-1$
+		result.append(published);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWModuleCursorDataTypeImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWModuleDistinctTypeImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWModuleDistinctTypeImpl.java
new file mode 100644
index 0000000..c78ecf1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWModuleDistinctTypeImpl.java
@@ -0,0 +1,304 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWModuleDistinctTypeImpl.java,v 1.1 2009/01/31 00:22:40 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleDistinctType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+
+import org.eclipse.datatools.modelbase.sql.datatypes.impl.DistinctUserDefinedTypeImpl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Module Distinct Type</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleDistinctTypeImpl#isPublished <em>Published</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleDistinctTypeImpl#getModule <em>Module</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWModuleDistinctTypeImpl extends DistinctUserDefinedTypeImpl implements LUWModuleDistinctType {
+	/**
+	 * The default value of the '{@link #isPublished() <em>Published</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isPublished()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean PUBLISHED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isPublished() <em>Published</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isPublished()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean published = PUBLISHED_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWModuleDistinctTypeImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_MODULE_DISTINCT_TYPE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isPublished() {
+		return published;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPublished(boolean newPublished) {
+		boolean oldPublished = published;
+		published = newPublished;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MODULE_DISTINCT_TYPE__PUBLISHED, oldPublished, published));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWModule getModule() {
+		if (eContainerFeatureID() != LUWPackage.LUW_MODULE_DISTINCT_TYPE__MODULE) return null;
+		return (LUWModule)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetModule(LUWModule newModule, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newModule, LUWPackage.LUW_MODULE_DISTINCT_TYPE__MODULE, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setModule(LUWModule newModule) {
+		if (newModule != eInternalContainer() || (eContainerFeatureID() != LUWPackage.LUW_MODULE_DISTINCT_TYPE__MODULE && newModule != null)) {
+			if (EcoreUtil.isAncestor(this, newModule))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newModule != null)
+				msgs = ((InternalEObject)newModule).eInverseAdd(this, LUWPackage.LUW_MODULE__MODULE_OBJECTS, LUWModule.class, msgs);
+			msgs = basicSetModule(newModule, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MODULE_DISTINCT_TYPE__MODULE, newModule, newModule));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_DISTINCT_TYPE__MODULE:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetModule((LUWModule)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_DISTINCT_TYPE__MODULE:
+				return basicSetModule(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case LUWPackage.LUW_MODULE_DISTINCT_TYPE__MODULE:
+				return eInternalContainer().eInverseRemove(this, LUWPackage.LUW_MODULE__MODULE_OBJECTS, LUWModule.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_DISTINCT_TYPE__PUBLISHED:
+				return isPublished() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_MODULE_DISTINCT_TYPE__MODULE:
+				return getModule();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_DISTINCT_TYPE__PUBLISHED:
+				setPublished(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_MODULE_DISTINCT_TYPE__MODULE:
+				setModule((LUWModule)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_DISTINCT_TYPE__PUBLISHED:
+				setPublished(PUBLISHED_EDEFAULT);
+				return;
+			case LUWPackage.LUW_MODULE_DISTINCT_TYPE__MODULE:
+				setModule((LUWModule)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_DISTINCT_TYPE__PUBLISHED:
+				return published != PUBLISHED_EDEFAULT;
+			case LUWPackage.LUW_MODULE_DISTINCT_TYPE__MODULE:
+				return getModule() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class baseClass) {
+		if (baseClass == LUWModuleObject.class) {
+			switch (derivedFeatureID) {
+				case LUWPackage.LUW_MODULE_DISTINCT_TYPE__PUBLISHED: return LUWPackage.LUW_MODULE_OBJECT__PUBLISHED;
+				case LUWPackage.LUW_MODULE_DISTINCT_TYPE__MODULE: return LUWPackage.LUW_MODULE_OBJECT__MODULE;
+				default: return -1;
+			}
+		}
+		if (baseClass == LUWModuleType.class) {
+			switch (derivedFeatureID) {
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class baseClass) {
+		if (baseClass == LUWModuleObject.class) {
+			switch (baseFeatureID) {
+				case LUWPackage.LUW_MODULE_OBJECT__PUBLISHED: return LUWPackage.LUW_MODULE_DISTINCT_TYPE__PUBLISHED;
+				case LUWPackage.LUW_MODULE_OBJECT__MODULE: return LUWPackage.LUW_MODULE_DISTINCT_TYPE__MODULE;
+				default: return -1;
+			}
+		}
+		if (baseClass == LUWModuleType.class) {
+			switch (baseFeatureID) {
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (published: "); //$NON-NLS-1$
+		result.append(published);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWModuleDistinctTypeImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWModuleFunctionImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWModuleFunctionImpl.java
new file mode 100644
index 0000000..98d243d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWModuleFunctionImpl.java
@@ -0,0 +1,358 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWModuleFunctionImpl.java,v 1.3 2009/03/27 21:54:02 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleFunction;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Module Function</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleFunctionImpl#isPublished <em>Published</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleFunctionImpl#getModule <em>Module</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleFunctionImpl#isImplemented <em>Implemented</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWModuleFunctionImpl extends DB2UserDefinedFunctionImpl implements LUWModuleFunction {
+	/**
+	 * The default value of the '{@link #isPublished() <em>Published</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isPublished()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean PUBLISHED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isPublished() <em>Published</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isPublished()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean published = PUBLISHED_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isImplemented() <em>Implemented</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isImplemented()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean IMPLEMENTED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isImplemented() <em>Implemented</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isImplemented()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean implemented = IMPLEMENTED_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWModuleFunctionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_MODULE_FUNCTION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isPublished() {
+		return published;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPublished(boolean newPublished) {
+		boolean oldPublished = published;
+		published = newPublished;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MODULE_FUNCTION__PUBLISHED, oldPublished, published));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWModule getModule() {
+		if (eContainerFeatureID() != LUWPackage.LUW_MODULE_FUNCTION__MODULE) return null;
+		return (LUWModule)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetModule(LUWModule newModule, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newModule, LUWPackage.LUW_MODULE_FUNCTION__MODULE, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setModule(LUWModule newModule) {
+		if (newModule != eInternalContainer() || (eContainerFeatureID() != LUWPackage.LUW_MODULE_FUNCTION__MODULE && newModule != null)) {
+			if (EcoreUtil.isAncestor(this, newModule))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newModule != null)
+				msgs = ((InternalEObject)newModule).eInverseAdd(this, LUWPackage.LUW_MODULE__MODULE_OBJECTS, LUWModule.class, msgs);
+			msgs = basicSetModule(newModule, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MODULE_FUNCTION__MODULE, newModule, newModule));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isImplemented() {
+		return implemented;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setImplemented(boolean newImplemented) {
+		boolean oldImplemented = implemented;
+		implemented = newImplemented;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MODULE_FUNCTION__IMPLEMENTED, oldImplemented, implemented));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_FUNCTION__MODULE:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetModule((LUWModule)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_FUNCTION__MODULE:
+				return basicSetModule(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case LUWPackage.LUW_MODULE_FUNCTION__MODULE:
+				return eInternalContainer().eInverseRemove(this, LUWPackage.LUW_MODULE__MODULE_OBJECTS, LUWModule.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_FUNCTION__PUBLISHED:
+				return isPublished() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_MODULE_FUNCTION__MODULE:
+				return getModule();
+			case LUWPackage.LUW_MODULE_FUNCTION__IMPLEMENTED:
+				return isImplemented() ? Boolean.TRUE : Boolean.FALSE;
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_FUNCTION__PUBLISHED:
+				setPublished(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_MODULE_FUNCTION__MODULE:
+				setModule((LUWModule)newValue);
+				return;
+			case LUWPackage.LUW_MODULE_FUNCTION__IMPLEMENTED:
+				setImplemented(((Boolean)newValue).booleanValue());
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_FUNCTION__PUBLISHED:
+				setPublished(PUBLISHED_EDEFAULT);
+				return;
+			case LUWPackage.LUW_MODULE_FUNCTION__MODULE:
+				setModule((LUWModule)null);
+				return;
+			case LUWPackage.LUW_MODULE_FUNCTION__IMPLEMENTED:
+				setImplemented(IMPLEMENTED_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_FUNCTION__PUBLISHED:
+				return published != PUBLISHED_EDEFAULT;
+			case LUWPackage.LUW_MODULE_FUNCTION__MODULE:
+				return getModule() != null;
+			case LUWPackage.LUW_MODULE_FUNCTION__IMPLEMENTED:
+				return implemented != IMPLEMENTED_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class baseClass) {
+		if (baseClass == LUWModuleObject.class) {
+			switch (derivedFeatureID) {
+				case LUWPackage.LUW_MODULE_FUNCTION__PUBLISHED: return LUWPackage.LUW_MODULE_OBJECT__PUBLISHED;
+				case LUWPackage.LUW_MODULE_FUNCTION__MODULE: return LUWPackage.LUW_MODULE_OBJECT__MODULE;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class baseClass) {
+		if (baseClass == LUWModuleObject.class) {
+			switch (baseFeatureID) {
+				case LUWPackage.LUW_MODULE_OBJECT__PUBLISHED: return LUWPackage.LUW_MODULE_FUNCTION__PUBLISHED;
+				case LUWPackage.LUW_MODULE_OBJECT__MODULE: return LUWPackage.LUW_MODULE_FUNCTION__MODULE;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @Override
+	 */
+	public Schema getSchema() {
+		return this.getModule().getOwningSchema();
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (published: "); //$NON-NLS-1$
+		result.append(published);
+		result.append(", implemented: "); //$NON-NLS-1$
+		result.append(implemented);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWModuleFunctionImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWModuleGlobalVariableImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWModuleGlobalVariableImpl.java
new file mode 100644
index 0000000..1bcf879
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWModuleGlobalVariableImpl.java
@@ -0,0 +1,291 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWModuleGlobalVariableImpl.java,v 1.1 2009/01/31 00:22:40 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleGlobalVariable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Module Global Variable</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleGlobalVariableImpl#isPublished <em>Published</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleGlobalVariableImpl#getModule <em>Module</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWModuleGlobalVariableImpl extends LUWGlobalVariableImpl implements LUWModuleGlobalVariable {
+	/**
+	 * The default value of the '{@link #isPublished() <em>Published</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isPublished()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean PUBLISHED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isPublished() <em>Published</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isPublished()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean published = PUBLISHED_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWModuleGlobalVariableImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_MODULE_GLOBAL_VARIABLE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isPublished() {
+		return published;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPublished(boolean newPublished) {
+		boolean oldPublished = published;
+		published = newPublished;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MODULE_GLOBAL_VARIABLE__PUBLISHED, oldPublished, published));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWModule getModule() {
+		if (eContainerFeatureID() != LUWPackage.LUW_MODULE_GLOBAL_VARIABLE__MODULE) return null;
+		return (LUWModule)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetModule(LUWModule newModule, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newModule, LUWPackage.LUW_MODULE_GLOBAL_VARIABLE__MODULE, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setModule(LUWModule newModule) {
+		if (newModule != eInternalContainer() || (eContainerFeatureID() != LUWPackage.LUW_MODULE_GLOBAL_VARIABLE__MODULE && newModule != null)) {
+			if (EcoreUtil.isAncestor(this, newModule))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newModule != null)
+				msgs = ((InternalEObject)newModule).eInverseAdd(this, LUWPackage.LUW_MODULE__MODULE_OBJECTS, LUWModule.class, msgs);
+			msgs = basicSetModule(newModule, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MODULE_GLOBAL_VARIABLE__MODULE, newModule, newModule));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_GLOBAL_VARIABLE__MODULE:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetModule((LUWModule)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_GLOBAL_VARIABLE__MODULE:
+				return basicSetModule(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case LUWPackage.LUW_MODULE_GLOBAL_VARIABLE__MODULE:
+				return eInternalContainer().eInverseRemove(this, LUWPackage.LUW_MODULE__MODULE_OBJECTS, LUWModule.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_GLOBAL_VARIABLE__PUBLISHED:
+				return isPublished() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_MODULE_GLOBAL_VARIABLE__MODULE:
+				return getModule();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_GLOBAL_VARIABLE__PUBLISHED:
+				setPublished(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_MODULE_GLOBAL_VARIABLE__MODULE:
+				setModule((LUWModule)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_GLOBAL_VARIABLE__PUBLISHED:
+				setPublished(PUBLISHED_EDEFAULT);
+				return;
+			case LUWPackage.LUW_MODULE_GLOBAL_VARIABLE__MODULE:
+				setModule((LUWModule)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_GLOBAL_VARIABLE__PUBLISHED:
+				return published != PUBLISHED_EDEFAULT;
+			case LUWPackage.LUW_MODULE_GLOBAL_VARIABLE__MODULE:
+				return getModule() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class baseClass) {
+		if (baseClass == LUWModuleObject.class) {
+			switch (derivedFeatureID) {
+				case LUWPackage.LUW_MODULE_GLOBAL_VARIABLE__PUBLISHED: return LUWPackage.LUW_MODULE_OBJECT__PUBLISHED;
+				case LUWPackage.LUW_MODULE_GLOBAL_VARIABLE__MODULE: return LUWPackage.LUW_MODULE_OBJECT__MODULE;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class baseClass) {
+		if (baseClass == LUWModuleObject.class) {
+			switch (baseFeatureID) {
+				case LUWPackage.LUW_MODULE_OBJECT__PUBLISHED: return LUWPackage.LUW_MODULE_GLOBAL_VARIABLE__PUBLISHED;
+				case LUWPackage.LUW_MODULE_OBJECT__MODULE: return LUWPackage.LUW_MODULE_GLOBAL_VARIABLE__MODULE;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (published: "); //$NON-NLS-1$
+		result.append(published);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWModuleGlobalVariableImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWModuleImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWModuleImpl.java
new file mode 100644
index 0000000..137aef2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWModuleImpl.java
@@ -0,0 +1,315 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWModuleImpl.java,v 1.4 2009/03/06 22:38:09 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema;
+import org.eclipse.datatools.enablement.ibm.db2.model.SourceDialect;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Module</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleImpl#getDialect <em>Dialect</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleImpl#getOwningSchema <em>Owning Schema</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleImpl#getModuleObjects <em>Module Objects</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWModuleImpl extends SQLObjectImpl implements LUWModule {
+	/**
+	 * The default value of the '{@link #getDialect() <em>Dialect</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDialect()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final SourceDialect DIALECT_EDEFAULT = SourceDialect.UNKNOWN_LITERAL;
+	/**
+	 * The cached value of the '{@link #getDialect() <em>Dialect</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDialect()
+	 * @generated
+	 * @ordered
+	 */
+	protected SourceDialect dialect = DIALECT_EDEFAULT;
+	/**
+	 * The cached value of the '{@link #getOwningSchema() <em>Owning Schema</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOwningSchema()
+	 * @generated
+	 * @ordered
+	 */
+	protected DB2Schema owningSchema;
+	/**
+	 * The cached value of the '{@link #getModuleObjects() <em>Module Objects</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getModuleObjects()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList moduleObjects;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWModuleImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_MODULE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SourceDialect getDialect() {
+		return dialect;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDialect(SourceDialect newDialect) {
+		SourceDialect oldDialect = dialect;
+		dialect = newDialect == null ? DIALECT_EDEFAULT : newDialect;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MODULE__DIALECT, oldDialect, dialect));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Schema getOwningSchema() {
+		if (owningSchema != null && owningSchema.eIsProxy()) {
+			InternalEObject oldOwningSchema = (InternalEObject)owningSchema;
+			owningSchema = (DB2Schema)eResolveProxy(oldOwningSchema);
+			if (owningSchema != oldOwningSchema) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_MODULE__OWNING_SCHEMA, oldOwningSchema, owningSchema));
+			}
+		}
+		return owningSchema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Schema basicGetOwningSchema() {
+		return owningSchema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetOwningSchema(DB2Schema newOwningSchema, NotificationChain msgs) {
+		DB2Schema oldOwningSchema = owningSchema;
+		owningSchema = newOwningSchema;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MODULE__OWNING_SCHEMA, oldOwningSchema, newOwningSchema);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOwningSchema(DB2Schema newOwningSchema) {
+		if (newOwningSchema != owningSchema) {
+			NotificationChain msgs = null;
+			if (owningSchema != null)
+				msgs = ((InternalEObject)owningSchema).eInverseRemove(this, DB2ModelPackage.DB2_SCHEMA__MODULES, DB2Schema.class, msgs);
+			if (newOwningSchema != null)
+				msgs = ((InternalEObject)newOwningSchema).eInverseAdd(this, DB2ModelPackage.DB2_SCHEMA__MODULES, DB2Schema.class, msgs);
+			msgs = basicSetOwningSchema(newOwningSchema, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MODULE__OWNING_SCHEMA, newOwningSchema, newOwningSchema));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getModuleObjects() {
+		if (moduleObjects == null) {
+			moduleObjects = new EObjectContainmentWithInverseEList(LUWModuleObject.class, this, LUWPackage.LUW_MODULE__MODULE_OBJECTS, LUWPackage.LUW_MODULE_OBJECT__MODULE);
+		}
+		return moduleObjects;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE__OWNING_SCHEMA:
+				if (owningSchema != null)
+					msgs = ((InternalEObject)owningSchema).eInverseRemove(this, DB2ModelPackage.DB2_SCHEMA__MODULES, DB2Schema.class, msgs);
+				return basicSetOwningSchema((DB2Schema)otherEnd, msgs);
+			case LUWPackage.LUW_MODULE__MODULE_OBJECTS:
+				return ((InternalEList)getModuleObjects()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE__OWNING_SCHEMA:
+				return basicSetOwningSchema(null, msgs);
+			case LUWPackage.LUW_MODULE__MODULE_OBJECTS:
+				return ((InternalEList)getModuleObjects()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE__DIALECT:
+				return getDialect();
+			case LUWPackage.LUW_MODULE__OWNING_SCHEMA:
+				if (resolve) return getOwningSchema();
+				return basicGetOwningSchema();
+			case LUWPackage.LUW_MODULE__MODULE_OBJECTS:
+				return getModuleObjects();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE__DIALECT:
+				setDialect((SourceDialect)newValue);
+				return;
+			case LUWPackage.LUW_MODULE__OWNING_SCHEMA:
+				setOwningSchema((DB2Schema)newValue);
+				return;
+			case LUWPackage.LUW_MODULE__MODULE_OBJECTS:
+				getModuleObjects().clear();
+				getModuleObjects().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE__DIALECT:
+				setDialect(DIALECT_EDEFAULT);
+				return;
+			case LUWPackage.LUW_MODULE__OWNING_SCHEMA:
+				setOwningSchema((DB2Schema)null);
+				return;
+			case LUWPackage.LUW_MODULE__MODULE_OBJECTS:
+				getModuleObjects().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE__DIALECT:
+				return dialect != DIALECT_EDEFAULT;
+			case LUWPackage.LUW_MODULE__OWNING_SCHEMA:
+				return owningSchema != null;
+			case LUWPackage.LUW_MODULE__MODULE_OBJECTS:
+				return moduleObjects != null && !moduleObjects.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (dialect: "); //$NON-NLS-1$
+		result.append(dialect);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWModuleImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWModuleProcedureImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWModuleProcedureImpl.java
new file mode 100644
index 0000000..b9b3ad8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWModuleProcedureImpl.java
@@ -0,0 +1,360 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWModuleProcedureImpl.java,v 1.3 2009/03/27 21:54:02 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureImpl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleProcedure;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Module Procedure</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleProcedureImpl#isPublished <em>Published</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleProcedureImpl#getModule <em>Module</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleProcedureImpl#isImplemented <em>Implemented</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWModuleProcedureImpl extends DB2ProcedureImpl implements LUWModuleProcedure {
+	/**
+	 * The default value of the '{@link #isPublished() <em>Published</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isPublished()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean PUBLISHED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isPublished() <em>Published</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isPublished()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean published = PUBLISHED_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isImplemented() <em>Implemented</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isImplemented()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean IMPLEMENTED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isImplemented() <em>Implemented</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isImplemented()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean implemented = IMPLEMENTED_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWModuleProcedureImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_MODULE_PROCEDURE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isPublished() {
+		return published;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPublished(boolean newPublished) {
+		boolean oldPublished = published;
+		published = newPublished;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MODULE_PROCEDURE__PUBLISHED, oldPublished, published));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWModule getModule() {
+		if (eContainerFeatureID() != LUWPackage.LUW_MODULE_PROCEDURE__MODULE) return null;
+		return (LUWModule)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetModule(LUWModule newModule, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newModule, LUWPackage.LUW_MODULE_PROCEDURE__MODULE, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setModule(LUWModule newModule) {
+		if (newModule != eInternalContainer() || (eContainerFeatureID() != LUWPackage.LUW_MODULE_PROCEDURE__MODULE && newModule != null)) {
+			if (EcoreUtil.isAncestor(this, newModule))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newModule != null)
+				msgs = ((InternalEObject)newModule).eInverseAdd(this, LUWPackage.LUW_MODULE__MODULE_OBJECTS, LUWModule.class, msgs);
+			msgs = basicSetModule(newModule, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MODULE_PROCEDURE__MODULE, newModule, newModule));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isImplemented() {
+		return implemented;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setImplemented(boolean newImplemented) {
+		boolean oldImplemented = implemented;
+		implemented = newImplemented;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MODULE_PROCEDURE__IMPLEMENTED, oldImplemented, implemented));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_PROCEDURE__MODULE:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetModule((LUWModule)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_PROCEDURE__MODULE:
+				return basicSetModule(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case LUWPackage.LUW_MODULE_PROCEDURE__MODULE:
+				return eInternalContainer().eInverseRemove(this, LUWPackage.LUW_MODULE__MODULE_OBJECTS, LUWModule.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_PROCEDURE__PUBLISHED:
+				return isPublished() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_MODULE_PROCEDURE__MODULE:
+				return getModule();
+			case LUWPackage.LUW_MODULE_PROCEDURE__IMPLEMENTED:
+				return isImplemented() ? Boolean.TRUE : Boolean.FALSE;
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_PROCEDURE__PUBLISHED:
+				setPublished(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_MODULE_PROCEDURE__MODULE:
+				setModule((LUWModule)newValue);
+				return;
+			case LUWPackage.LUW_MODULE_PROCEDURE__IMPLEMENTED:
+				setImplemented(((Boolean)newValue).booleanValue());
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_PROCEDURE__PUBLISHED:
+				setPublished(PUBLISHED_EDEFAULT);
+				return;
+			case LUWPackage.LUW_MODULE_PROCEDURE__MODULE:
+				setModule((LUWModule)null);
+				return;
+			case LUWPackage.LUW_MODULE_PROCEDURE__IMPLEMENTED:
+				setImplemented(IMPLEMENTED_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_PROCEDURE__PUBLISHED:
+				return published != PUBLISHED_EDEFAULT;
+			case LUWPackage.LUW_MODULE_PROCEDURE__MODULE:
+				return getModule() != null;
+			case LUWPackage.LUW_MODULE_PROCEDURE__IMPLEMENTED:
+				return implemented != IMPLEMENTED_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class baseClass) {
+		if (baseClass == LUWModuleObject.class) {
+			switch (derivedFeatureID) {
+				case LUWPackage.LUW_MODULE_PROCEDURE__PUBLISHED: return LUWPackage.LUW_MODULE_OBJECT__PUBLISHED;
+				case LUWPackage.LUW_MODULE_PROCEDURE__MODULE: return LUWPackage.LUW_MODULE_OBJECT__MODULE;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class baseClass) {
+		if (baseClass == LUWModuleObject.class) {
+			switch (baseFeatureID) {
+				case LUWPackage.LUW_MODULE_OBJECT__PUBLISHED: return LUWPackage.LUW_MODULE_PROCEDURE__PUBLISHED;
+				case LUWPackage.LUW_MODULE_OBJECT__MODULE: return LUWPackage.LUW_MODULE_PROCEDURE__MODULE;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @Override
+	 */
+	public Schema getSchema() {
+		return this.getModule().getOwningSchema();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (published: "); //$NON-NLS-1$
+		result.append(published);
+		result.append(", implemented: "); //$NON-NLS-1$
+		result.append(implemented);
+		result.append(')');
+		return result.toString();
+	}
+	
+
+
+} //LUWModuleProcedureImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWModuleRowDataTypeImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWModuleRowDataTypeImpl.java
new file mode 100644
index 0000000..7de96ad
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWModuleRowDataTypeImpl.java
@@ -0,0 +1,316 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWModuleRowDataTypeImpl.java,v 1.3 2009/03/27 21:54:02 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleRowDataType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataTypesPackage;
+import org.eclipse.datatools.modelbase.sql.datatypes.impl.RowDataTypeImpl;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Module Row Data Type</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleRowDataTypeImpl#isPublished <em>Published</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWModuleRowDataTypeImpl#getModule <em>Module</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWModuleRowDataTypeImpl extends LUWRowDataTypeImpl implements LUWModuleRowDataType {
+	/**
+	 * The default value of the '{@link #isPublished() <em>Published</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isPublished()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean PUBLISHED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isPublished() <em>Published</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isPublished()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean published = PUBLISHED_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWModuleRowDataTypeImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_MODULE_ROW_DATA_TYPE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isPublished() {
+		return published;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPublished(boolean newPublished) {
+		boolean oldPublished = published;
+		published = newPublished;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MODULE_ROW_DATA_TYPE__PUBLISHED, oldPublished, published));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWModule getModule() {
+		if (eContainerFeatureID() != LUWPackage.LUW_MODULE_ROW_DATA_TYPE__MODULE) return null;
+		return (LUWModule)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetModule(LUWModule newModule, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newModule, LUWPackage.LUW_MODULE_ROW_DATA_TYPE__MODULE, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setModule(LUWModule newModule) {
+		if (newModule != eInternalContainer() || (eContainerFeatureID() != LUWPackage.LUW_MODULE_ROW_DATA_TYPE__MODULE && newModule != null)) {
+			if (EcoreUtil.isAncestor(this, newModule))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newModule != null)
+				msgs = ((InternalEObject)newModule).eInverseAdd(this, LUWPackage.LUW_MODULE__MODULE_OBJECTS, LUWModule.class, msgs);
+			msgs = basicSetModule(newModule, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_MODULE_ROW_DATA_TYPE__MODULE, newModule, newModule));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_ROW_DATA_TYPE__MODULE:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetModule((LUWModule)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_ROW_DATA_TYPE__MODULE:
+				return basicSetModule(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case LUWPackage.LUW_MODULE_ROW_DATA_TYPE__MODULE:
+				return eInternalContainer().eInverseRemove(this, LUWPackage.LUW_MODULE__MODULE_OBJECTS, LUWModule.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_ROW_DATA_TYPE__PUBLISHED:
+				return isPublished() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_MODULE_ROW_DATA_TYPE__MODULE:
+				return getModule();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_ROW_DATA_TYPE__PUBLISHED:
+				setPublished(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_MODULE_ROW_DATA_TYPE__MODULE:
+				setModule((LUWModule)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_ROW_DATA_TYPE__PUBLISHED:
+				setPublished(PUBLISHED_EDEFAULT);
+				return;
+			case LUWPackage.LUW_MODULE_ROW_DATA_TYPE__MODULE:
+				setModule((LUWModule)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_MODULE_ROW_DATA_TYPE__PUBLISHED:
+				return published != PUBLISHED_EDEFAULT;
+			case LUWPackage.LUW_MODULE_ROW_DATA_TYPE__MODULE:
+				return getModule() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class baseClass) {
+		if (baseClass == LUWModuleObject.class) {
+			switch (derivedFeatureID) {
+				case LUWPackage.LUW_MODULE_ROW_DATA_TYPE__PUBLISHED: return LUWPackage.LUW_MODULE_OBJECT__PUBLISHED;
+				case LUWPackage.LUW_MODULE_ROW_DATA_TYPE__MODULE: return LUWPackage.LUW_MODULE_OBJECT__MODULE;
+				default: return -1;
+			}
+		}
+		if (baseClass == LUWModuleType.class) {
+			switch (derivedFeatureID) {
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class baseClass) {
+		if (baseClass == LUWModuleObject.class) {
+			switch (baseFeatureID) {
+				case LUWPackage.LUW_MODULE_OBJECT__PUBLISHED: return LUWPackage.LUW_MODULE_ROW_DATA_TYPE__PUBLISHED;
+				case LUWPackage.LUW_MODULE_OBJECT__MODULE: return LUWPackage.LUW_MODULE_ROW_DATA_TYPE__MODULE;
+				default: return -1;
+			}
+		}
+		if (baseClass == LUWModuleType.class) {
+			switch (baseFeatureID) {
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @Override
+	 */
+	public Schema getSchema() {
+		return this.getModule().getOwningSchema();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (published: "); //$NON-NLS-1$
+		result.append(published);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWModuleRowDataTypeImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWNicknameImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWNicknameImpl.java
new file mode 100644
index 0000000..77be00d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWNicknameImpl.java
@@ -0,0 +1,295 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNickname;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.RemoteDataSet;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Nickname</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWNicknameImpl#getRemoteDataSet <em>Remote Data Set</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWNicknameImpl#getServer <em>Server</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class LUWNicknameImpl extends LUWTableImpl implements LUWNickname {
+	/**
+	 * The cached value of the '{@link #getRemoteDataSet() <em>Remote Data Set</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRemoteDataSet()
+	 * @generated
+	 * @ordered
+	 */
+	protected RemoteDataSet remoteDataSet;
+
+	/**
+	 * The cached value of the '{@link #getServer() <em>Server</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getServer()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWServer server;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWNicknameImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_NICKNAME;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RemoteDataSet getRemoteDataSet() {
+		if (remoteDataSet != null && remoteDataSet.eIsProxy()) {
+			InternalEObject oldRemoteDataSet = (InternalEObject)remoteDataSet;
+			remoteDataSet = (RemoteDataSet)eResolveProxy(oldRemoteDataSet);
+			if (remoteDataSet != oldRemoteDataSet) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_NICKNAME__REMOTE_DATA_SET, oldRemoteDataSet, remoteDataSet));
+			}
+		}
+		return remoteDataSet;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RemoteDataSet basicGetRemoteDataSet() {
+		return remoteDataSet;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetRemoteDataSet(RemoteDataSet newRemoteDataSet, NotificationChain msgs) {
+		RemoteDataSet oldRemoteDataSet = remoteDataSet;
+		remoteDataSet = newRemoteDataSet;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_NICKNAME__REMOTE_DATA_SET, oldRemoteDataSet, newRemoteDataSet);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRemoteDataSet(RemoteDataSet newRemoteDataSet) {
+		if (newRemoteDataSet != remoteDataSet) {
+			NotificationChain msgs = null;
+			if (remoteDataSet != null)
+				msgs = ((InternalEObject)remoteDataSet).eInverseRemove(this, LUWPackage.REMOTE_DATA_SET__NICKNAME, RemoteDataSet.class, msgs);
+			if (newRemoteDataSet != null)
+				msgs = ((InternalEObject)newRemoteDataSet).eInverseAdd(this, LUWPackage.REMOTE_DATA_SET__NICKNAME, RemoteDataSet.class, msgs);
+			msgs = basicSetRemoteDataSet(newRemoteDataSet, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_NICKNAME__REMOTE_DATA_SET, newRemoteDataSet, newRemoteDataSet));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWServer getServer() {
+		if (server != null && server.eIsProxy()) {
+			InternalEObject oldServer = (InternalEObject)server;
+			server = (LUWServer)eResolveProxy(oldServer);
+			if (server != oldServer) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_NICKNAME__SERVER, oldServer, server));
+			}
+		}
+		return server;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWServer basicGetServer() {
+		return server;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetServer(LUWServer newServer, NotificationChain msgs) {
+		LUWServer oldServer = server;
+		server = newServer;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_NICKNAME__SERVER, oldServer, newServer);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setServer(LUWServer newServer) {
+		if (newServer != server) {
+			NotificationChain msgs = null;
+			if (server != null)
+				msgs = ((InternalEObject)server).eInverseRemove(this, LUWPackage.LUW_SERVER__NICKNAMES, LUWServer.class, msgs);
+			if (newServer != null)
+				msgs = ((InternalEObject)newServer).eInverseAdd(this, LUWPackage.LUW_SERVER__NICKNAMES, LUWServer.class, msgs);
+			msgs = basicSetServer(newServer, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_NICKNAME__SERVER, newServer, newServer));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_NICKNAME__REMOTE_DATA_SET:
+				if (remoteDataSet != null)
+					msgs = ((InternalEObject)remoteDataSet).eInverseRemove(this, LUWPackage.REMOTE_DATA_SET__NICKNAME, RemoteDataSet.class, msgs);
+				return basicSetRemoteDataSet((RemoteDataSet)otherEnd, msgs);
+			case LUWPackage.LUW_NICKNAME__SERVER:
+				if (server != null)
+					msgs = ((InternalEObject)server).eInverseRemove(this, LUWPackage.LUW_SERVER__NICKNAMES, LUWServer.class, msgs);
+				return basicSetServer((LUWServer)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_NICKNAME__REMOTE_DATA_SET:
+				return basicSetRemoteDataSet(null, msgs);
+			case LUWPackage.LUW_NICKNAME__SERVER:
+				return basicSetServer(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_NICKNAME__REMOTE_DATA_SET:
+				if (resolve) return getRemoteDataSet();
+				return basicGetRemoteDataSet();
+			case LUWPackage.LUW_NICKNAME__SERVER:
+				if (resolve) return getServer();
+				return basicGetServer();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_NICKNAME__REMOTE_DATA_SET:
+				setRemoteDataSet((RemoteDataSet)newValue);
+				return;
+			case LUWPackage.LUW_NICKNAME__SERVER:
+				setServer((LUWServer)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_NICKNAME__REMOTE_DATA_SET:
+				setRemoteDataSet((RemoteDataSet)null);
+				return;
+			case LUWPackage.LUW_NICKNAME__SERVER:
+				setServer((LUWServer)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_NICKNAME__REMOTE_DATA_SET:
+				return remoteDataSet != null;
+			case LUWPackage.LUW_NICKNAME__SERVER:
+				return server != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //LUWNicknameImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWNonRelationalNicknameImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWNonRelationalNicknameImpl.java
new file mode 100644
index 0000000..bbcbb78
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWNonRelationalNicknameImpl.java
@@ -0,0 +1,95 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalNickname;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Non Relational Nickname</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWNonRelationalNicknameImpl#getNonRelServer <em>Non Rel Server</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class LUWNonRelationalNicknameImpl extends LUWNicknameImpl implements LUWNonRelationalNickname {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWNonRelationalNicknameImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_NON_RELATIONAL_NICKNAME;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWNonRelationalServer getNonRelServer() {
+		LUWNonRelationalServer nonRelServer = basicGetNonRelServer();
+		return nonRelServer != null && nonRelServer.eIsProxy() ? (LUWNonRelationalServer)eResolveProxy((InternalEObject)nonRelServer) : nonRelServer;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public LUWNonRelationalServer basicGetNonRelServer() {
+			return (LUWNonRelationalServer) server;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_NON_RELATIONAL_NICKNAME__NON_REL_SERVER:
+				if (resolve) return getNonRelServer();
+				return basicGetNonRelServer();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_NON_RELATIONAL_NICKNAME__NON_REL_SERVER:
+				return basicGetNonRelServer() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //LUWNonRelationalNicknameImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWNonRelationalServerImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWNonRelationalServerImpl.java
new file mode 100644
index 0000000..198f6c4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWNonRelationalServerImpl.java
@@ -0,0 +1,112 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalWrapper;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Non Relational Server</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWNonRelationalServerImpl#getNonRelWrapper <em>Non Rel Wrapper</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWNonRelationalServerImpl#getNonRelNicknames <em>Non Rel Nicknames</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class LUWNonRelationalServerImpl extends LUWServerImpl implements LUWNonRelationalServer {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWNonRelationalServerImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_NON_RELATIONAL_SERVER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWNonRelationalWrapper getNonRelWrapper() {
+		LUWNonRelationalWrapper nonRelWrapper = basicGetNonRelWrapper();
+		return nonRelWrapper != null && nonRelWrapper.eIsProxy() ? (LUWNonRelationalWrapper)eResolveProxy((InternalEObject)nonRelWrapper) : nonRelWrapper;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public LUWNonRelationalWrapper basicGetNonRelWrapper() {
+		return (LUWNonRelationalWrapper) wrapper;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public EList getNonRelNicknames() {
+		// This method should always be overridden by a subclass to ensure
+		// that a correctly-typed EList is generated.
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_NON_RELATIONAL_SERVER__NON_REL_WRAPPER:
+				if (resolve) return getNonRelWrapper();
+				return basicGetNonRelWrapper();
+			case LUWPackage.LUW_NON_RELATIONAL_SERVER__NON_REL_NICKNAMES:
+				return getNonRelNicknames();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_NON_RELATIONAL_SERVER__NON_REL_WRAPPER:
+				return basicGetNonRelWrapper() != null;
+			case LUWPackage.LUW_NON_RELATIONAL_SERVER__NON_REL_NICKNAMES:
+				return !getNonRelNicknames().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //LUWNonRelationalServerImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWNonRelationalWrapperImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWNonRelationalWrapperImpl.java
new file mode 100644
index 0000000..351b5b6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWNonRelationalWrapperImpl.java
@@ -0,0 +1,85 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalWrapper;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Non Relational Wrapper</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWNonRelationalWrapperImpl#getNonRelServers <em>Non Rel Servers</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class LUWNonRelationalWrapperImpl extends LUWWrapperImpl implements LUWNonRelationalWrapper {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWNonRelationalWrapperImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_NON_RELATIONAL_WRAPPER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public EList getNonRelServers() {
+		// This method should always be overridden by a subclass to ensure
+		// that a correctly-type EList is returned.
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_NON_RELATIONAL_WRAPPER__NON_REL_SERVERS:
+				return getNonRelServers();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_NON_RELATIONAL_WRAPPER__NON_REL_SERVERS:
+				return !getNonRelServers().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //LUWNonRelationalWrapperImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWOptionImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWOptionImpl.java
new file mode 100644
index 0000000..3d4d018
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWOptionImpl.java
@@ -0,0 +1,159 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWOptionImpl.java,v 1.10 2008/01/29 00:04:54 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Option</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWOptionImpl#getValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWOptionImpl extends SQLObjectImpl implements LUWOption {
+	/**
+	 * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String VALUE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected String value = VALUE_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWOptionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_OPTION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getValue() {
+		return value;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setValue(String newValue) {
+		String oldValue = value;
+		value = newValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_OPTION__VALUE, oldValue, value));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_OPTION__VALUE:
+				return getValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_OPTION__VALUE:
+				setValue((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_OPTION__VALUE:
+				setValue(VALUE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_OPTION__VALUE:
+				return VALUE_EDEFAULT == null ? value != null : !VALUE_EDEFAULT.equals(value);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (value: "); //$NON-NLS-1$
+		result.append(value);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWOptionImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWPackageImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWPackageImpl.java
new file mode 100644
index 0000000..aa844d8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWPackageImpl.java
@@ -0,0 +1,5668 @@
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.ArrayIndexElementType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.AverageTableSizeType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.BufferPoolType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.CheckOptionType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.CursorBlockType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.DataPartitionMethod;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.ExplainSnaphotType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedParameter;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.FederatedProcedure;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.FileSystemCachingType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWAdminServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWArrayDataType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWAttributeDefinition;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPoolSizeException;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWColumn;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWContainerType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWCursorDataType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartitionKey;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFactory;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFederatedDataSource;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFunctionMapping;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericNickname;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericUserMapping;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGenericWrapper;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWGlobalVariable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndexCompressType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndexPageSplitType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMaterializedQueryTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMember;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWMemberType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModule;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleArrayDataType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleCondition;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleCursorDataType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleDistinctType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleFunction;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleGlobalVariable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleObject;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleProcedure;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleRowDataType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWModuleType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNickname;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalNickname;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNonRelationalWrapper;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionEveryClauseElement;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionExpression;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalNickname;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalWrapper;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRowDataType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabel;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponent;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentElement;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelNotAuthorizedWriteAction;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTableCompressionMode;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryStorageTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryTableLoggingOption;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWUserMapping;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWView;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.MaintenanceType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.ManagementType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.MemberStateType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.PLSQLPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.PLSQLPackageBody;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.PageSizeType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.PartitionMethod;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.RefreshType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.RelationalRemoteDataSet;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.RelationalRemoteServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.RemoteDataSet;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.RemoteServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.SystemType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.TableSpaceType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.WrapperType;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.SQLAccessControlPackage;
+import org.eclipse.datatools.modelbase.sql.constraints.SQLConstraintsPackage;
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataTypesPackage;
+import org.eclipse.datatools.modelbase.sql.expressions.SQLExpressionsPackage;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesPackage;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.statements.SQLStatementsPackage;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EOperation;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class LUWPackageImpl extends EPackageImpl implements LUWPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwPartitionGroupEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwTableSpaceEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwDatabasePartitionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwDatabaseContainerEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwAdminServerEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwBufferPoolEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwTableEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwViewEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwPartitionKeyEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwNicknameEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwFunctionMappingEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwWrapperEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwNonRelationalNicknameEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwNonRelationalServerEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwNonRelationalWrapperEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwRelationalNicknameEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwGenericUserMappingEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwRelationalWrapperEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwServerEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwTypeMappingEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwUserMappingEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwOptionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwRelationalServerEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwDatabaseEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwColumnEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwGenericNicknameEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwGenericServerEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwMaterializedQueryTableEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwGenericWrapperEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwStorageTableEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass relationalRemoteServerEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass relationalRemoteDataSetEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass remoteServerEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass remoteDataSetEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwIndexEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwAttributeDefinitionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass federatedProcedureEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass federatedParameterEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwPartitionExpressionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwPartitionElementEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwDataPartitionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwDataPartitionKeyEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwDatabasePackageEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwModuleEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwModuleObjectEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwModuleFunctionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwModuleProcedureEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwModuleConditionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwGlobalVariableEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwModuleTypeEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwModuleRowDataTypeEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwModuleArrayDataTypeEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwModuleDistinctTypeEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwModuleGlobalVariableEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwArrayDataTypeEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwRowDataTypeEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass plsqlPackageEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass plsqlPackageBodyEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwCursorDataTypeEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwModuleCursorDataTypeEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwBufferPoolSizeExceptionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwMemberEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwSecurityPolicyEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwSecurityLabelComponentEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwSecurityLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwSecurityLabelComponentElementEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwStorageGroupEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwTemporaryStorageTableEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwTemporaryTableEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass arrayIndexElementTypeEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass luwPartitionEveryClauseElementEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum luwContainerTypeEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum pageSizeTypeEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum bufferPoolTypeEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum tableSpaceTypeEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum managementTypeEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum checkOptionTypeEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum partitionMethodEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum maintenanceTypeEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum refreshTypeEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum wrapperTypeEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum dataPartitionMethodEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum cursorBlockTypeEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum explainSnaphotTypeEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum fileSystemCachingTypeEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum luwIndexPageSplitTypeEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum luwIndexCompressTypeEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum systemTypeEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum averageTableSizeTypeEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum luwStorageTableCompressionModeEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum luwMemberTypeEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum memberStateTypeEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum luwSecurityLabelComponentTypeEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum luwSecurityLabelNotAuthorizedWriteActionEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum luwFederatedDataSourceEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum luwTemporaryTableLoggingOptionEEnum = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private LUWPackageImpl() {
+		super(eNS_URI, LUWFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link LUWPackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static LUWPackage init() {
+		if (isInited) return (LUWPackage)EPackage.Registry.INSTANCE.getEPackage(LUWPackage.eNS_URI);
+
+		// Obtain or create and register package
+		LUWPackageImpl theLUWPackage = (LUWPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof LUWPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new LUWPackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		SQLSchemaPackage.eINSTANCE.eClass();
+		SQLConstraintsPackage.eINSTANCE.eClass();
+		SQLDataTypesPackage.eINSTANCE.eClass();
+		SQLExpressionsPackage.eINSTANCE.eClass();
+		SQLRoutinesPackage.eINSTANCE.eClass();
+		SQLStatementsPackage.eINSTANCE.eClass();
+		SQLTablesPackage.eINSTANCE.eClass();
+		SQLAccessControlPackage.eINSTANCE.eClass();
+
+		// Obtain or create and register interdependencies
+		DB2ModelPackageImpl theDB2ModelPackage = (DB2ModelPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(DB2ModelPackage.eNS_URI) instanceof DB2ModelPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(DB2ModelPackage.eNS_URI) : DB2ModelPackage.eINSTANCE);
+
+		// Create package meta-data objects
+		theLUWPackage.createPackageContents();
+		theDB2ModelPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theLUWPackage.initializePackageContents();
+		theDB2ModelPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theLUWPackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(LUWPackage.eNS_URI, theLUWPackage);
+		return theLUWPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWPartitionGroup() {
+		return luwPartitionGroupEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWPartitionGroup_Partitions() {
+		return (EReference)luwPartitionGroupEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWPartitionGroup_TableSpaces() {
+		return (EReference)luwPartitionGroupEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWPartitionGroup_Database() {
+		return (EReference)luwPartitionGroupEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWPartitionGroup_BufferPool() {
+		return (EReference)luwPartitionGroupEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWTableSpace() {
+		return luwTableSpaceEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWTableSpace_TemporaryStorageTables() {
+		return (EReference)luwTableSpaceEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_TablespaceType() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_ManagementType() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_ExtentSize() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_PreFetchSize() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_Overhead() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_TransferRate() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_RecoverDroppedTableOn() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_PageSize() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(8);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_Size() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(9);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_AutoResize() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(10);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_InitialSize() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(11);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_IncreaseSize() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(12);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_MaximumSize() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(13);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_InitialSizeUnit() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(14);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_MaximumSizeUnit() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(15);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_IncreaseSizeUnit() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(16);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_IncreasePercent() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(17);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_FileSystemCaching() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(18);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_AverageSeekTime() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(19);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_RotationSpeed() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(20);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_Transfer() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(21);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_SystemType() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(22);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_AverageTableSize() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(23);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_ExternalContainerCount() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(24);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_InheritOverhead() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(25);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_InheritTransferate() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(26);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_Rebalance() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(27);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_DataTag() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(28);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_SuspendRebalance() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(29);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTableSpace_ResumeRebalance() {
+		return (EAttribute)luwTableSpaceEClass.getEStructuralFeatures().get(30);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWTableSpace_Group() {
+		return (EReference)luwTableSpaceEClass.getEStructuralFeatures().get(31);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWTableSpace_Containers() {
+		return (EReference)luwTableSpaceEClass.getEStructuralFeatures().get(32);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWTableSpace_BufferPool() {
+		return (EReference)luwTableSpaceEClass.getEStructuralFeatures().get(33);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWTableSpace_IndexDataTables() {
+		return (EReference)luwTableSpaceEClass.getEStructuralFeatures().get(34);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWTableSpace_LOBDataTables() {
+		return (EReference)luwTableSpaceEClass.getEStructuralFeatures().get(35);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWTableSpace_RegularDataTables() {
+		return (EReference)luwTableSpaceEClass.getEStructuralFeatures().get(36);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWTableSpace_Database() {
+		return (EReference)luwTableSpaceEClass.getEStructuralFeatures().get(37);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWTableSpace_LOBDataPartition() {
+		return (EReference)luwTableSpaceEClass.getEStructuralFeatures().get(38);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWTableSpace_RegularDataPartition() {
+		return (EReference)luwTableSpaceEClass.getEStructuralFeatures().get(39);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWTableSpace_Indexes() {
+		return (EReference)luwTableSpaceEClass.getEStructuralFeatures().get(40);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWTableSpace_IndexDataPartition() {
+		return (EReference)luwTableSpaceEClass.getEStructuralFeatures().get(41);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWTableSpace_StorageGroup() {
+		return (EReference)luwTableSpaceEClass.getEStructuralFeatures().get(42);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWDatabasePartition() {
+		return luwDatabasePartitionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWDatabasePartition_Number() {
+		return (EAttribute)luwDatabasePartitionEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWDatabasePartition_PortNumber() {
+		return (EAttribute)luwDatabasePartitionEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWDatabasePartition_HostName() {
+		return (EAttribute)luwDatabasePartitionEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWDatabasePartition_SwitchName() {
+		return (EAttribute)luwDatabasePartitionEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWDatabasePartition_CatalogPartition() {
+		return (EAttribute)luwDatabasePartitionEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWDatabasePartition_Group() {
+		return (EReference)luwDatabasePartitionEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWDatabasePartition_BufferPool() {
+		return (EReference)luwDatabasePartitionEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWDatabasePartition_Containers() {
+		return (EReference)luwDatabasePartitionEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWDatabasePartition_SizeException() {
+		return (EReference)luwDatabasePartitionEClass.getEStructuralFeatures().get(8);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWDatabaseContainer() {
+		return luwDatabaseContainerEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWDatabaseContainer_ContainerType() {
+		return (EAttribute)luwDatabaseContainerEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWDatabaseContainer_SizeInPages() {
+		return (EAttribute)luwDatabaseContainerEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWDatabaseContainer_Size() {
+		return (EAttribute)luwDatabaseContainerEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWDatabaseContainer_SizeUnits() {
+		return (EAttribute)luwDatabaseContainerEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWDatabaseContainer_TableSpace() {
+		return (EReference)luwDatabaseContainerEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWDatabaseContainer_Partitions() {
+		return (EReference)luwDatabaseContainerEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWAdminServer() {
+		return luwAdminServerEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWAdminServer_Instances() {
+		return (EReference)luwAdminServerEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWBufferPool() {
+		return luwBufferPoolEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWBufferPool_CreateType() {
+		return (EAttribute)luwBufferPoolEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWBufferPool_Size() {
+		return (EAttribute)luwBufferPoolEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWBufferPool_PageSize() {
+		return (EAttribute)luwBufferPoolEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWBufferPool_BlockSize() {
+		return (EAttribute)luwBufferPoolEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWBufferPool_NumBlockPages() {
+		return (EAttribute)luwBufferPoolEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWBufferPool_ExtendedStorage() {
+		return (EAttribute)luwBufferPoolEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWBufferPool_Automatic() {
+		return (EAttribute)luwBufferPoolEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWBufferPool_TableSpaces() {
+		return (EReference)luwBufferPoolEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWBufferPool_Partitions() {
+		return (EReference)luwBufferPoolEClass.getEStructuralFeatures().get(8);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWBufferPool_PartitionGroup() {
+		return (EReference)luwBufferPoolEClass.getEStructuralFeatures().get(9);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWBufferPool_Database() {
+		return (EReference)luwBufferPoolEClass.getEStructuralFeatures().get(10);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWBufferPool_SizeException() {
+		return (EReference)luwBufferPoolEClass.getEStructuralFeatures().get(11);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWTable() {
+		return luwTableEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTable_PCTFree() {
+		return (EAttribute)luwTableEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTable_RestrictOnDrop() {
+		return (EAttribute)luwTableEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTable_PartitionMode() {
+		return (EAttribute)luwTableEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTable_AppendMode() {
+		return (EAttribute)luwTableEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTable_LogMode() {
+		return (EAttribute)luwTableEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTable_LockSizeRow() {
+		return (EAttribute)luwTableEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTable_Volatile() {
+		return (EAttribute)luwTableEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWTable_SecurityPolicy() {
+		return (EReference)luwTableEClass.getEStructuralFeatures().get(8);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWTable_Options() {
+		return (EReference)luwTableEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWView() {
+		return luwViewEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWView_Federated() {
+		return (EAttribute)luwViewEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWView_OptimizeQuery() {
+		return (EAttribute)luwViewEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWPartitionKey() {
+		return luwPartitionKeyEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWPartitionKey_TemporaryStorageTable() {
+		return (EReference)luwPartitionKeyEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWPartitionKey_PartitionMethod() {
+		return (EAttribute)luwPartitionKeyEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWPartitionKey_Table() {
+		return (EReference)luwPartitionKeyEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWPartitionKey_Columns() {
+		return (EReference)luwPartitionKeyEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWNickname() {
+		return luwNicknameEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWNickname_RemoteDataSet() {
+		return (EReference)luwNicknameEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWNickname_Server() {
+		return (EReference)luwNicknameEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWFunctionMapping() {
+		return luwFunctionMappingEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWFunctionMapping_ServerType() {
+		return (EAttribute)luwFunctionMappingEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWFunctionMapping_ServerVersion() {
+		return (EAttribute)luwFunctionMappingEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWFunctionMapping_ServerName() {
+		return (EAttribute)luwFunctionMappingEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWFunctionMapping_CreationTime() {
+		return (EAttribute)luwFunctionMappingEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWFunctionMapping_Disabled() {
+		return (EAttribute)luwFunctionMappingEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWFunctionMapping_InstsPerInvoc() {
+		return (EAttribute)luwFunctionMappingEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWFunctionMapping_InstsPerArgByte() {
+		return (EAttribute)luwFunctionMappingEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWFunctionMapping_IosPerInvoc() {
+		return (EAttribute)luwFunctionMappingEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWFunctionMapping_IosPerArgByte() {
+		return (EAttribute)luwFunctionMappingEClass.getEStructuralFeatures().get(8);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWFunctionMapping_Options() {
+		return (EReference)luwFunctionMappingEClass.getEStructuralFeatures().get(9);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWFunctionMapping_LocalFunction() {
+		return (EReference)luwFunctionMappingEClass.getEStructuralFeatures().get(10);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWFunctionMapping_RemoteFunction() {
+		return (EReference)luwFunctionMappingEClass.getEStructuralFeatures().get(11);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWFunctionMapping_LUWDatabase() {
+		return (EReference)luwFunctionMappingEClass.getEStructuralFeatures().get(12);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWWrapper() {
+		return luwWrapperEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWWrapper_Version() {
+		return (EAttribute)luwWrapperEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWWrapper_Library() {
+		return (EAttribute)luwWrapperEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWWrapper_Fenced() {
+		return (EAttribute)luwWrapperEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWWrapper_WrapperType() {
+		return (EAttribute)luwWrapperEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWWrapper_DataSource() {
+		return (EAttribute)luwWrapperEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWWrapper_DiscoveredLibraries() {
+		return (EAttribute)luwWrapperEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWWrapper_Servers() {
+		return (EReference)luwWrapperEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWWrapper_LUWDatabase() {
+		return (EReference)luwWrapperEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWWrapper_Options() {
+		return (EReference)luwWrapperEClass.getEStructuralFeatures().get(8);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWNonRelationalNickname() {
+		return luwNonRelationalNicknameEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWNonRelationalNickname_NonRelServer() {
+		return (EReference)luwNonRelationalNicknameEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWNonRelationalServer() {
+		return luwNonRelationalServerEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWNonRelationalServer_NonRelWrapper() {
+		return (EReference)luwNonRelationalServerEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWNonRelationalServer_NonRelNicknames() {
+		return (EReference)luwNonRelationalServerEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWNonRelationalWrapper() {
+		return luwNonRelationalWrapperEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWNonRelationalWrapper_NonRelServers() {
+		return (EReference)luwNonRelationalWrapperEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWRelationalNickname() {
+		return luwRelationalNicknameEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWRelationalNickname_RelServer() {
+		return (EReference)luwRelationalNicknameEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWGenericUserMapping() {
+		return luwGenericUserMappingEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWGenericUserMapping_RemoteUser() {
+		return (EAttribute)luwGenericUserMappingEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWGenericUserMapping_RemotePassword() {
+		return (EAttribute)luwGenericUserMappingEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWRelationalWrapper() {
+		return luwRelationalWrapperEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWRelationalWrapper_RelServers() {
+		return (EReference)luwRelationalWrapperEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWServer() {
+		return luwServerEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWServer_ServerType() {
+		return (EAttribute)luwServerEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWServer_ServerVersion() {
+		return (EAttribute)luwServerEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWServer_UserMappings() {
+		return (EReference)luwServerEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWServer_Wrapper() {
+		return (EReference)luwServerEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWServer_Nicknames() {
+		return (EReference)luwServerEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWServer_LUWDatabase() {
+		return (EReference)luwServerEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWServer_Options() {
+		return (EReference)luwServerEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWServer_RemoteServer() {
+		return (EReference)luwServerEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWTypeMapping() {
+		return luwTypeMappingEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTypeMapping_ServerType() {
+		return (EAttribute)luwTypeMappingEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTypeMapping_ServerVesion() {
+		return (EAttribute)luwTypeMappingEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTypeMapping_ServerName() {
+		return (EAttribute)luwTypeMappingEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTypeMapping_CreationTime() {
+		return (EAttribute)luwTypeMappingEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWTypeMapping_LocalType() {
+		return (EReference)luwTypeMappingEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWTypeMapping_RemoteType() {
+		return (EReference)luwTypeMappingEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWUserMapping() {
+		return luwUserMappingEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWUserMapping_LocalAuthId() {
+		return (EAttribute)luwUserMappingEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWUserMapping_Server() {
+		return (EReference)luwUserMappingEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWUserMapping_Options() {
+		return (EReference)luwUserMappingEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWOption() {
+		return luwOptionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWOption_Value() {
+		return (EAttribute)luwOptionEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWRelationalServer() {
+		return luwRelationalServerEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWRelationalServer_CpuRatio() {
+		return (EAttribute)luwRelationalServerEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWRelationalServer_IoRatio() {
+		return (EAttribute)luwRelationalServerEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWRelationalServer_CommRate() {
+		return (EAttribute)luwRelationalServerEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWRelationalServer_FoldId() {
+		return (EAttribute)luwRelationalServerEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWRelationalServer_FoldPW() {
+		return (EAttribute)luwRelationalServerEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWRelationalServer_CollatingSequence() {
+		return (EAttribute)luwRelationalServerEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWRelationalServer_Pushdown() {
+		return (EAttribute)luwRelationalServerEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWRelationalServer_Node() {
+		return (EAttribute)luwRelationalServerEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWRelationalServer_DbName() {
+		return (EAttribute)luwRelationalServerEClass.getEStructuralFeatures().get(8);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWRelationalServer_IudAppSvptEnforce() {
+		return (EAttribute)luwRelationalServerEClass.getEStructuralFeatures().get(9);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWRelationalServer_Password() {
+		return (EAttribute)luwRelationalServerEClass.getEStructuralFeatures().get(10);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWRelationalServer_RelNicknames() {
+		return (EReference)luwRelationalServerEClass.getEStructuralFeatures().get(11);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWRelationalServer_RelWrapper() {
+		return (EReference)luwRelationalServerEClass.getEStructuralFeatures().get(12);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWDatabase() {
+		return luwDatabaseEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWDatabase_Federated() {
+		return (EAttribute)luwDatabaseEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWDatabase_Groups() {
+		return (EReference)luwDatabaseEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWDatabase_Wrappers() {
+		return (EReference)luwDatabaseEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWDatabase_Servers() {
+		return (EReference)luwDatabaseEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWDatabase_FunctionMappings() {
+		return (EReference)luwDatabaseEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWDatabase_TypeMappings() {
+		return (EReference)luwDatabaseEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWDatabase_ReverseTypeMappings() {
+		return (EReference)luwDatabaseEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWDatabase_Bufferpools() {
+		return (EReference)luwDatabaseEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWDatabase_Tablespaces() {
+		return (EReference)luwDatabaseEClass.getEStructuralFeatures().get(8);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWDatabase_StorageGroups() {
+		return (EReference)luwDatabaseEClass.getEStructuralFeatures().get(9);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWDatabase_DefaultStorageGroup() {
+		return (EReference)luwDatabaseEClass.getEStructuralFeatures().get(10);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWColumn() {
+		return luwColumnEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWColumn_LobLogged() {
+		return (EAttribute)luwColumnEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWColumn_LobCompacted() {
+		return (EAttribute)luwColumnEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWColumn_Compression() {
+		return (EAttribute)luwColumnEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWColumn_InlineLength() {
+		return (EAttribute)luwColumnEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWColumn_Hidden() {
+		return (EAttribute)luwColumnEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWColumn_SecurityLabel() {
+		return (EAttribute)luwColumnEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWColumn_Options() {
+		return (EReference)luwColumnEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWGenericNickname() {
+		return luwGenericNicknameEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWGenericNickname_GenericServer() {
+		return (EReference)luwGenericNicknameEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWGenericServer() {
+		return luwGenericServerEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWGenericServer_GenericNicknames() {
+		return (EReference)luwGenericServerEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWGenericServer_GenericWrapper() {
+		return (EReference)luwGenericServerEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWMaterializedQueryTable() {
+		return luwMaterializedQueryTableEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWGenericWrapper() {
+		return luwGenericWrapperEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWGenericWrapper_GenericServers() {
+		return (EReference)luwGenericWrapperEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWStorageTable() {
+		return luwStorageTableEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWStorageTable_ValueCompression() {
+		return (EAttribute)luwStorageTableEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWStorageTable_RowCompression() {
+		return (EAttribute)luwStorageTableEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWStorageTable_RowCompressionEmpty() {
+		return (EAttribute)luwStorageTableEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWStorageTable_CompressionMode() {
+		return (EAttribute)luwStorageTableEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWStorageTable_PartitionKey() {
+		return (EReference)luwStorageTableEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWStorageTable_IndexDataTableSpace() {
+		return (EReference)luwStorageTableEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWStorageTable_LOBDataTableSpace() {
+		return (EReference)luwStorageTableEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWStorageTable_RegularDataTableSpace() {
+		return (EReference)luwStorageTableEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWStorageTable_DataPartitions() {
+		return (EReference)luwStorageTableEClass.getEStructuralFeatures().get(8);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWStorageTable_DataPartitionKey() {
+		return (EReference)luwStorageTableEClass.getEStructuralFeatures().get(9);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getRelationalRemoteServer() {
+		return relationalRemoteServerEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getRelationalRemoteServer_Database() {
+		return (EReference)relationalRemoteServerEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getRelationalRemoteDataSet() {
+		return relationalRemoteDataSetEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getRelationalRemoteDataSet_Table() {
+		return (EReference)relationalRemoteDataSetEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getRemoteServer() {
+		return remoteServerEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getRemoteServer_LUWServer() {
+		return (EReference)remoteServerEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getRemoteDataSet() {
+		return remoteDataSetEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getRemoteDataSet_Nickname() {
+		return (EReference)remoteDataSetEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWIndex() {
+		return luwIndexEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWIndex_PCTFree() {
+		return (EAttribute)luwIndexEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWIndex_MinPCTFree() {
+		return (EAttribute)luwIndexEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWIndex_ReverseScan() {
+		return (EAttribute)luwIndexEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWIndex_NotPartitioned() {
+		return (EAttribute)luwIndexEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWIndex_XmlPattern() {
+		return (EAttribute)luwIndexEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWIndex_AsSQLDataType() {
+		return (EReference)luwIndexEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWIndex_AsSQLDataTypeHashed() {
+		return (EAttribute)luwIndexEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWIndex_SystemRequired() {
+		return (EAttribute)luwIndexEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWIndex_PageSplitType() {
+		return (EAttribute)luwIndexEClass.getEStructuralFeatures().get(8);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWIndex_Level2PctFree() {
+		return (EAttribute)luwIndexEClass.getEStructuralFeatures().get(9);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWIndex_MinPctUsed() {
+		return (EAttribute)luwIndexEClass.getEStructuralFeatures().get(10);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWIndex_Compress() {
+		return (EAttribute)luwIndexEClass.getEStructuralFeatures().get(11);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWIndex_CollectStats() {
+		return (EAttribute)luwIndexEClass.getEStructuralFeatures().get(12);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWIndex_SampledStats() {
+		return (EAttribute)luwIndexEClass.getEStructuralFeatures().get(13);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWIndex_DetailedStats() {
+		return (EAttribute)luwIndexEClass.getEStructuralFeatures().get(14);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWIndex_IgnoreInvalidValues() {
+		return (EAttribute)luwIndexEClass.getEStructuralFeatures().get(15);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWIndex_ExcludeNullKeys() {
+		return (EAttribute)luwIndexEClass.getEStructuralFeatures().get(16);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWIndex_Tablespace() {
+		return (EReference)luwIndexEClass.getEStructuralFeatures().get(17);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWAttributeDefinition() {
+		return luwAttributeDefinitionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWAttributeDefinition_LOBLogged() {
+		return (EAttribute)luwAttributeDefinitionEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWAttributeDefinition_LOBCompacted() {
+		return (EAttribute)luwAttributeDefinitionEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getFederatedProcedure() {
+		return federatedProcedureEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getFederatedProcedure_RemoteUniqueId() {
+		return (EAttribute)federatedProcedureEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getFederatedProcedure_RemoteServer() {
+		return (EAttribute)federatedProcedureEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getFederatedProcedure_RemoteSchema() {
+		return (EAttribute)federatedProcedureEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getFederatedProcedure_RemotePackage() {
+		return (EAttribute)federatedProcedureEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getFederatedProcedure_RemoteProcedureName() {
+		return (EAttribute)federatedProcedureEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getFederatedProcedure_NumberOfParameters() {
+		return (EAttribute)federatedProcedureEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getFederatedProcedure_ResultSetsToClient() {
+		return (EAttribute)federatedProcedureEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getFederatedProcedure_NumberOfRefCursors() {
+		return (EAttribute)federatedProcedureEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getFederatedProcedure_AllResultSetsToCaller() {
+		return (EAttribute)federatedProcedureEClass.getEStructuralFeatures().get(8);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getFederatedProcedure_FederatedProcedure() {
+		return (EReference)federatedProcedureEClass.getEStructuralFeatures().get(9);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getFederatedProcedure_RemoteProcedure() {
+		return (EReference)federatedProcedureEClass.getEStructuralFeatures().get(10);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getFederatedProcedure_FederatedParameter() {
+		return (EReference)federatedProcedureEClass.getEStructuralFeatures().get(11);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getFederatedParameter() {
+		return federatedParameterEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getFederatedParameter_RemoteCodePage() {
+		return (EAttribute)federatedParameterEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getFederatedParameter_RemoteParamTypeID() {
+		return (EAttribute)federatedParameterEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getFederatedParameter_FederatedProcedure() {
+		return (EReference)federatedParameterEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getFederatedParameter_RemoteParameter() {
+		return (EReference)federatedParameterEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWPartitionExpression() {
+		return luwPartitionExpressionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWPartitionExpression_NullsLast() {
+		return (EAttribute)luwPartitionExpressionEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWPartitionExpression_Key() {
+		return (EReference)luwPartitionExpressionEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWPartitionExpression_Column() {
+		return (EReference)luwPartitionExpressionEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWPartitionExpression_PartitionElements() {
+		return (EReference)luwPartitionExpressionEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWPartitionElement() {
+		return luwPartitionElementEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWPartitionElement_Starting() {
+		return (EAttribute)luwPartitionElementEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWPartitionElement_Ending() {
+		return (EAttribute)luwPartitionElementEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWPartitionElement_LUWPartitionExpression() {
+		return (EReference)luwPartitionElementEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWPartitionElement_Partition() {
+		return (EReference)luwPartitionElementEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWPartitionElement_EveryClause() {
+		return (EReference)luwPartitionElementEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWDataPartition() {
+		return luwDataPartitionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWDataPartition_Id() {
+		return (EAttribute)luwDataPartitionEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWDataPartition_LowInclusive() {
+		return (EAttribute)luwDataPartitionEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWDataPartition_HighInclusive() {
+		return (EAttribute)luwDataPartitionEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWDataPartition_LOBDataTableSpace() {
+		return (EReference)luwDataPartitionEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWDataPartition_RegularDataTableSpace() {
+		return (EReference)luwDataPartitionEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWDataPartition_PartitionElements() {
+		return (EReference)luwDataPartitionEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWDataPartition_Table() {
+		return (EReference)luwDataPartitionEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWDataPartition_IndexDataTableSpace() {
+		return (EReference)luwDataPartitionEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWDataPartitionKey() {
+		return luwDataPartitionKeyEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWDataPartitionKey_PartitionMethod() {
+		return (EAttribute)luwDataPartitionKeyEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWDataPartitionKey_PartitionExpressions() {
+		return (EReference)luwDataPartitionKeyEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWDataPartitionKey_Table() {
+		return (EReference)luwDataPartitionKeyEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWDatabasePackage() {
+		return luwDatabasePackageEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWDatabasePackage_Creator() {
+		return (EAttribute)luwDatabasePackageEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWDatabasePackage_Binder() {
+		return (EAttribute)luwDatabasePackageEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWDatabasePackage_CursorBlock() {
+		return (EAttribute)luwDatabasePackageEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWDatabasePackage_NumberOfSections() {
+		return (EAttribute)luwDatabasePackageEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWDatabasePackage_OptimizationClass() {
+		return (EAttribute)luwDatabasePackageEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWDatabasePackage_ExplainSnapshot() {
+		return (EAttribute)luwDatabasePackageEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWModule() {
+		return luwModuleEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWModule_Dialect() {
+		return (EAttribute)luwModuleEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWModule_OwningSchema() {
+		return (EReference)luwModuleEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWModule_ModuleObjects() {
+		return (EReference)luwModuleEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWModuleObject() {
+		return luwModuleObjectEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWModuleObject_Published() {
+		return (EAttribute)luwModuleObjectEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWModuleObject_Module() {
+		return (EReference)luwModuleObjectEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWModuleFunction() {
+		return luwModuleFunctionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWModuleFunction_Implemented() {
+		return (EAttribute)luwModuleFunctionEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWModuleProcedure() {
+		return luwModuleProcedureEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWModuleProcedure_Implemented() {
+		return (EAttribute)luwModuleProcedureEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWModuleCondition() {
+		return luwModuleConditionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWModuleCondition_Sqlstate() {
+		return (EAttribute)luwModuleConditionEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWGlobalVariable() {
+		return luwGlobalVariableEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWGlobalVariable_DefaultValue() {
+		return (EAttribute)luwGlobalVariableEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWGlobalVariable_IsConstant() {
+		return (EAttribute)luwGlobalVariableEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWGlobalVariable_Schema() {
+		return (EReference)luwGlobalVariableEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWModuleType() {
+		return luwModuleTypeEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWModuleRowDataType() {
+		return luwModuleRowDataTypeEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWModuleArrayDataType() {
+		return luwModuleArrayDataTypeEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWModuleDistinctType() {
+		return luwModuleDistinctTypeEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWModuleGlobalVariable() {
+		return luwModuleGlobalVariableEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWArrayDataType() {
+		return luwArrayDataTypeEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWArrayDataType_ArrayIndexElementType() {
+		return (EReference)luwArrayDataTypeEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWRowDataType() {
+		return luwRowDataTypeEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getPLSQLPackage() {
+		return plsqlPackageEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getPLSQLPackage_PackageBody() {
+		return (EReference)plsqlPackageEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getPLSQLPackageBody() {
+		return plsqlPackageBodyEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getPLSQLPackageBody_Package() {
+		return (EReference)plsqlPackageBodyEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWCursorDataType() {
+		return luwCursorDataTypeEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWCursorDataType_RowType() {
+		return (EReference)luwCursorDataTypeEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWModuleCursorDataType() {
+		return luwModuleCursorDataTypeEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWBufferPoolSizeException() {
+		return luwBufferPoolSizeExceptionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWBufferPoolSizeException_Size() {
+		return (EAttribute)luwBufferPoolSizeExceptionEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWBufferPoolSizeException_BufferPool() {
+		return (EReference)luwBufferPoolSizeExceptionEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWBufferPoolSizeException_Partitions() {
+		return (EReference)luwBufferPoolSizeExceptionEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWMember() {
+		return luwMemberEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWMember_Type() {
+		return (EAttribute)luwMemberEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWMember_Alert() {
+		return (EAttribute)luwMemberEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWMember_DbPartitionNum() {
+		return (EAttribute)luwMemberEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWMember_LogicalPort() {
+		return (EAttribute)luwMemberEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWMember_NetName() {
+		return (EAttribute)luwMemberEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWSecurityPolicy() {
+		return luwSecurityPolicyEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWSecurityPolicy_NotAuthorizedWrite() {
+		return (EAttribute)luwSecurityPolicyEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWSecurityPolicy_Components() {
+		return (EReference)luwSecurityPolicyEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWSecurityPolicy_Labels() {
+		return (EReference)luwSecurityPolicyEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWSecurityPolicy_Table() {
+		return (EReference)luwSecurityPolicyEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWSecurityLabelComponent() {
+		return luwSecurityLabelComponentEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWSecurityLabelComponent_Type() {
+		return (EAttribute)luwSecurityLabelComponentEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWSecurityLabelComponent_LUWSecurityPolicy() {
+		return (EReference)luwSecurityLabelComponentEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWSecurityLabelComponent_Elements() {
+		return (EReference)luwSecurityLabelComponentEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWSecurityLabel() {
+		return luwSecurityLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWSecurityLabel_SecurityLabel() {
+		return (EAttribute)luwSecurityLabelEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWSecurityLabel_Policy() {
+		return (EReference)luwSecurityLabelEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWSecurityLabelComponentElement() {
+		return luwSecurityLabelComponentElementEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWSecurityLabelComponentElement_Value() {
+		return (EAttribute)luwSecurityLabelComponentElementEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWSecurityLabelComponentElement_ParentValue() {
+		return (EAttribute)luwSecurityLabelComponentElementEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWSecurityLabelComponentElement_LUWSecurityLabelComponent() {
+		return (EReference)luwSecurityLabelComponentElementEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWStorageGroup() {
+		return luwStorageGroupEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWStorageGroup_StoragePaths() {
+		return (EAttribute)luwStorageGroupEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWStorageGroup_Overhead() {
+		return (EAttribute)luwStorageGroupEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWStorageGroup_DeviceReadRate() {
+		return (EAttribute)luwStorageGroupEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWStorageGroup_DataTag() {
+		return (EAttribute)luwStorageGroupEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWStorageGroup_Default() {
+		return (EAttribute)luwStorageGroupEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWStorageGroup_Database() {
+		return (EReference)luwStorageGroupEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWStorageGroup_TableSpaces() {
+		return (EReference)luwStorageGroupEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWTemporaryStorageTable() {
+		return luwTemporaryStorageTableEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWTemporaryStorageTable_PartitionKey() {
+		return (EReference)luwTemporaryStorageTableEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWTemporaryStorageTable_UserTemporaryTableSpace() {
+		return (EReference)luwTemporaryStorageTableEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWTemporaryTable() {
+		return luwTemporaryTableEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWTemporaryTable_Table() {
+		return (EReference)luwTemporaryTableEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWTemporaryTable_LogOption() {
+		return (EAttribute)luwTemporaryTableEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getArrayIndexElementType() {
+		return arrayIndexElementTypeEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getArrayIndexElementType_LUWArrayDataType() {
+		return (EReference)arrayIndexElementTypeEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLUWPartitionEveryClauseElement() {
+		return luwPartitionEveryClauseElementEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWPartitionEveryClauseElement_Value() {
+		return (EAttribute)luwPartitionEveryClauseElementEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLUWPartitionEveryClauseElement_Duration() {
+		return (EAttribute)luwPartitionEveryClauseElementEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLUWPartitionEveryClauseElement_LUWPartitionElement() {
+		return (EReference)luwPartitionEveryClauseElementEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getLUWContainerType() {
+		return luwContainerTypeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getPageSizeType() {
+		return pageSizeTypeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getBufferPoolType() {
+		return bufferPoolTypeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getTableSpaceType() {
+		return tableSpaceTypeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getManagementType() {
+		return managementTypeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getCheckOptionType() {
+		return checkOptionTypeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getPartitionMethod() {
+		return partitionMethodEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getMaintenanceType() {
+		return maintenanceTypeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getRefreshType() {
+		return refreshTypeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getWrapperType() {
+		return wrapperTypeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getDataPartitionMethod() {
+		return dataPartitionMethodEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getCursorBlockType() {
+		return cursorBlockTypeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getExplainSnaphotType() {
+		return explainSnaphotTypeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getFileSystemCachingType() {
+		return fileSystemCachingTypeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getLUWIndexPageSplitType() {
+		return luwIndexPageSplitTypeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getLUWIndexCompressType() {
+		return luwIndexCompressTypeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getSystemType() {
+		return systemTypeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getAverageTableSizeType() {
+		return averageTableSizeTypeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getLUWStorageTableCompressionMode() {
+		return luwStorageTableCompressionModeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getLUWMemberType() {
+		return luwMemberTypeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getMemberStateType() {
+		return memberStateTypeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getLUWSecurityLabelComponentType() {
+		return luwSecurityLabelComponentTypeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getLUWSecurityLabelNotAuthorizedWriteAction() {
+		return luwSecurityLabelNotAuthorizedWriteActionEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getLUWFederatedDataSource() {
+		return luwFederatedDataSourceEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getLUWTemporaryTableLoggingOption() {
+		return luwTemporaryTableLoggingOptionEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWFactory getLUWFactory() {
+		return (LUWFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		luwPartitionGroupEClass = createEClass(LUW_PARTITION_GROUP);
+		createEReference(luwPartitionGroupEClass, LUW_PARTITION_GROUP__PARTITIONS);
+		createEReference(luwPartitionGroupEClass, LUW_PARTITION_GROUP__TABLE_SPACES);
+		createEReference(luwPartitionGroupEClass, LUW_PARTITION_GROUP__DATABASE);
+		createEReference(luwPartitionGroupEClass, LUW_PARTITION_GROUP__BUFFER_POOL);
+
+		luwTableSpaceEClass = createEClass(LUW_TABLE_SPACE);
+		createEReference(luwTableSpaceEClass, LUW_TABLE_SPACE__TEMPORARY_STORAGE_TABLES);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__TABLESPACE_TYPE);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__MANAGEMENT_TYPE);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__EXTENT_SIZE);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__PRE_FETCH_SIZE);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__OVERHEAD);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__TRANSFER_RATE);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__RECOVER_DROPPED_TABLE_ON);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__PAGE_SIZE);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__SIZE);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__AUTO_RESIZE);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__INITIAL_SIZE);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__INCREASE_SIZE);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__MAXIMUM_SIZE);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__INITIAL_SIZE_UNIT);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__MAXIMUM_SIZE_UNIT);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__INCREASE_SIZE_UNIT);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__INCREASE_PERCENT);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__FILE_SYSTEM_CACHING);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__AVERAGE_SEEK_TIME);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__ROTATION_SPEED);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__TRANSFER);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__SYSTEM_TYPE);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__AVERAGE_TABLE_SIZE);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__EXTERNAL_CONTAINER_COUNT);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__INHERIT_OVERHEAD);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__INHERIT_TRANSFERATE);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__REBALANCE);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__DATA_TAG);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__SUSPEND_REBALANCE);
+		createEAttribute(luwTableSpaceEClass, LUW_TABLE_SPACE__RESUME_REBALANCE);
+		createEReference(luwTableSpaceEClass, LUW_TABLE_SPACE__GROUP);
+		createEReference(luwTableSpaceEClass, LUW_TABLE_SPACE__CONTAINERS);
+		createEReference(luwTableSpaceEClass, LUW_TABLE_SPACE__BUFFER_POOL);
+		createEReference(luwTableSpaceEClass, LUW_TABLE_SPACE__INDEX_DATA_TABLES);
+		createEReference(luwTableSpaceEClass, LUW_TABLE_SPACE__LOB_DATA_TABLES);
+		createEReference(luwTableSpaceEClass, LUW_TABLE_SPACE__REGULAR_DATA_TABLES);
+		createEReference(luwTableSpaceEClass, LUW_TABLE_SPACE__DATABASE);
+		createEReference(luwTableSpaceEClass, LUW_TABLE_SPACE__LOB_DATA_PARTITION);
+		createEReference(luwTableSpaceEClass, LUW_TABLE_SPACE__REGULAR_DATA_PARTITION);
+		createEReference(luwTableSpaceEClass, LUW_TABLE_SPACE__INDEXES);
+		createEReference(luwTableSpaceEClass, LUW_TABLE_SPACE__INDEX_DATA_PARTITION);
+		createEReference(luwTableSpaceEClass, LUW_TABLE_SPACE__STORAGE_GROUP);
+
+		luwDatabasePartitionEClass = createEClass(LUW_DATABASE_PARTITION);
+		createEAttribute(luwDatabasePartitionEClass, LUW_DATABASE_PARTITION__NUMBER);
+		createEAttribute(luwDatabasePartitionEClass, LUW_DATABASE_PARTITION__PORT_NUMBER);
+		createEAttribute(luwDatabasePartitionEClass, LUW_DATABASE_PARTITION__HOST_NAME);
+		createEAttribute(luwDatabasePartitionEClass, LUW_DATABASE_PARTITION__SWITCH_NAME);
+		createEAttribute(luwDatabasePartitionEClass, LUW_DATABASE_PARTITION__CATALOG_PARTITION);
+		createEReference(luwDatabasePartitionEClass, LUW_DATABASE_PARTITION__GROUP);
+		createEReference(luwDatabasePartitionEClass, LUW_DATABASE_PARTITION__BUFFER_POOL);
+		createEReference(luwDatabasePartitionEClass, LUW_DATABASE_PARTITION__CONTAINERS);
+		createEReference(luwDatabasePartitionEClass, LUW_DATABASE_PARTITION__SIZE_EXCEPTION);
+
+		luwDatabaseContainerEClass = createEClass(LUW_DATABASE_CONTAINER);
+		createEAttribute(luwDatabaseContainerEClass, LUW_DATABASE_CONTAINER__CONTAINER_TYPE);
+		createEAttribute(luwDatabaseContainerEClass, LUW_DATABASE_CONTAINER__SIZE_IN_PAGES);
+		createEAttribute(luwDatabaseContainerEClass, LUW_DATABASE_CONTAINER__SIZE);
+		createEAttribute(luwDatabaseContainerEClass, LUW_DATABASE_CONTAINER__SIZE_UNITS);
+		createEReference(luwDatabaseContainerEClass, LUW_DATABASE_CONTAINER__TABLE_SPACE);
+		createEReference(luwDatabaseContainerEClass, LUW_DATABASE_CONTAINER__PARTITIONS);
+
+		luwAdminServerEClass = createEClass(LUW_ADMIN_SERVER);
+		createEReference(luwAdminServerEClass, LUW_ADMIN_SERVER__INSTANCES);
+
+		luwBufferPoolEClass = createEClass(LUW_BUFFER_POOL);
+		createEAttribute(luwBufferPoolEClass, LUW_BUFFER_POOL__CREATE_TYPE);
+		createEAttribute(luwBufferPoolEClass, LUW_BUFFER_POOL__SIZE);
+		createEAttribute(luwBufferPoolEClass, LUW_BUFFER_POOL__PAGE_SIZE);
+		createEAttribute(luwBufferPoolEClass, LUW_BUFFER_POOL__BLOCK_SIZE);
+		createEAttribute(luwBufferPoolEClass, LUW_BUFFER_POOL__NUM_BLOCK_PAGES);
+		createEAttribute(luwBufferPoolEClass, LUW_BUFFER_POOL__EXTENDED_STORAGE);
+		createEAttribute(luwBufferPoolEClass, LUW_BUFFER_POOL__AUTOMATIC);
+		createEReference(luwBufferPoolEClass, LUW_BUFFER_POOL__TABLE_SPACES);
+		createEReference(luwBufferPoolEClass, LUW_BUFFER_POOL__PARTITIONS);
+		createEReference(luwBufferPoolEClass, LUW_BUFFER_POOL__PARTITION_GROUP);
+		createEReference(luwBufferPoolEClass, LUW_BUFFER_POOL__DATABASE);
+		createEReference(luwBufferPoolEClass, LUW_BUFFER_POOL__SIZE_EXCEPTION);
+
+		luwTableEClass = createEClass(LUW_TABLE);
+		createEAttribute(luwTableEClass, LUW_TABLE__PCT_FREE);
+		createEAttribute(luwTableEClass, LUW_TABLE__RESTRICT_ON_DROP);
+		createEAttribute(luwTableEClass, LUW_TABLE__PARTITION_MODE);
+		createEAttribute(luwTableEClass, LUW_TABLE__APPEND_MODE);
+		createEAttribute(luwTableEClass, LUW_TABLE__LOG_MODE);
+		createEAttribute(luwTableEClass, LUW_TABLE__LOCK_SIZE_ROW);
+		createEAttribute(luwTableEClass, LUW_TABLE__VOLATILE);
+		createEReference(luwTableEClass, LUW_TABLE__OPTIONS);
+		createEReference(luwTableEClass, LUW_TABLE__SECURITY_POLICY);
+
+		luwViewEClass = createEClass(LUW_VIEW);
+		createEAttribute(luwViewEClass, LUW_VIEW__FEDERATED);
+		createEAttribute(luwViewEClass, LUW_VIEW__OPTIMIZE_QUERY);
+
+		luwPartitionKeyEClass = createEClass(LUW_PARTITION_KEY);
+		createEReference(luwPartitionKeyEClass, LUW_PARTITION_KEY__TEMPORARY_STORAGE_TABLE);
+		createEAttribute(luwPartitionKeyEClass, LUW_PARTITION_KEY__PARTITION_METHOD);
+		createEReference(luwPartitionKeyEClass, LUW_PARTITION_KEY__TABLE);
+		createEReference(luwPartitionKeyEClass, LUW_PARTITION_KEY__COLUMNS);
+
+		luwNicknameEClass = createEClass(LUW_NICKNAME);
+		createEReference(luwNicknameEClass, LUW_NICKNAME__REMOTE_DATA_SET);
+		createEReference(luwNicknameEClass, LUW_NICKNAME__SERVER);
+
+		luwFunctionMappingEClass = createEClass(LUW_FUNCTION_MAPPING);
+		createEAttribute(luwFunctionMappingEClass, LUW_FUNCTION_MAPPING__SERVER_TYPE);
+		createEAttribute(luwFunctionMappingEClass, LUW_FUNCTION_MAPPING__SERVER_VERSION);
+		createEAttribute(luwFunctionMappingEClass, LUW_FUNCTION_MAPPING__SERVER_NAME);
+		createEAttribute(luwFunctionMappingEClass, LUW_FUNCTION_MAPPING__CREATION_TIME);
+		createEAttribute(luwFunctionMappingEClass, LUW_FUNCTION_MAPPING__DISABLED);
+		createEAttribute(luwFunctionMappingEClass, LUW_FUNCTION_MAPPING__INSTS_PER_INVOC);
+		createEAttribute(luwFunctionMappingEClass, LUW_FUNCTION_MAPPING__INSTS_PER_ARG_BYTE);
+		createEAttribute(luwFunctionMappingEClass, LUW_FUNCTION_MAPPING__IOS_PER_INVOC);
+		createEAttribute(luwFunctionMappingEClass, LUW_FUNCTION_MAPPING__IOS_PER_ARG_BYTE);
+		createEReference(luwFunctionMappingEClass, LUW_FUNCTION_MAPPING__OPTIONS);
+		createEReference(luwFunctionMappingEClass, LUW_FUNCTION_MAPPING__LOCAL_FUNCTION);
+		createEReference(luwFunctionMappingEClass, LUW_FUNCTION_MAPPING__REMOTE_FUNCTION);
+		createEReference(luwFunctionMappingEClass, LUW_FUNCTION_MAPPING__LUW_DATABASE);
+
+		luwWrapperEClass = createEClass(LUW_WRAPPER);
+		createEAttribute(luwWrapperEClass, LUW_WRAPPER__VERSION);
+		createEAttribute(luwWrapperEClass, LUW_WRAPPER__LIBRARY);
+		createEAttribute(luwWrapperEClass, LUW_WRAPPER__FENCED);
+		createEAttribute(luwWrapperEClass, LUW_WRAPPER__WRAPPER_TYPE);
+		createEAttribute(luwWrapperEClass, LUW_WRAPPER__DATA_SOURCE);
+		createEAttribute(luwWrapperEClass, LUW_WRAPPER__DISCOVERED_LIBRARIES);
+		createEReference(luwWrapperEClass, LUW_WRAPPER__SERVERS);
+		createEReference(luwWrapperEClass, LUW_WRAPPER__LUW_DATABASE);
+		createEReference(luwWrapperEClass, LUW_WRAPPER__OPTIONS);
+
+		luwNonRelationalNicknameEClass = createEClass(LUW_NON_RELATIONAL_NICKNAME);
+		createEReference(luwNonRelationalNicknameEClass, LUW_NON_RELATIONAL_NICKNAME__NON_REL_SERVER);
+
+		luwNonRelationalServerEClass = createEClass(LUW_NON_RELATIONAL_SERVER);
+		createEReference(luwNonRelationalServerEClass, LUW_NON_RELATIONAL_SERVER__NON_REL_WRAPPER);
+		createEReference(luwNonRelationalServerEClass, LUW_NON_RELATIONAL_SERVER__NON_REL_NICKNAMES);
+
+		luwNonRelationalWrapperEClass = createEClass(LUW_NON_RELATIONAL_WRAPPER);
+		createEReference(luwNonRelationalWrapperEClass, LUW_NON_RELATIONAL_WRAPPER__NON_REL_SERVERS);
+
+		luwRelationalNicknameEClass = createEClass(LUW_RELATIONAL_NICKNAME);
+		createEReference(luwRelationalNicknameEClass, LUW_RELATIONAL_NICKNAME__REL_SERVER);
+
+		luwGenericUserMappingEClass = createEClass(LUW_GENERIC_USER_MAPPING);
+		createEAttribute(luwGenericUserMappingEClass, LUW_GENERIC_USER_MAPPING__REMOTE_USER);
+		createEAttribute(luwGenericUserMappingEClass, LUW_GENERIC_USER_MAPPING__REMOTE_PASSWORD);
+
+		luwRelationalWrapperEClass = createEClass(LUW_RELATIONAL_WRAPPER);
+		createEReference(luwRelationalWrapperEClass, LUW_RELATIONAL_WRAPPER__REL_SERVERS);
+
+		luwServerEClass = createEClass(LUW_SERVER);
+		createEAttribute(luwServerEClass, LUW_SERVER__SERVER_TYPE);
+		createEAttribute(luwServerEClass, LUW_SERVER__SERVER_VERSION);
+		createEReference(luwServerEClass, LUW_SERVER__USER_MAPPINGS);
+		createEReference(luwServerEClass, LUW_SERVER__WRAPPER);
+		createEReference(luwServerEClass, LUW_SERVER__NICKNAMES);
+		createEReference(luwServerEClass, LUW_SERVER__LUW_DATABASE);
+		createEReference(luwServerEClass, LUW_SERVER__OPTIONS);
+		createEReference(luwServerEClass, LUW_SERVER__REMOTE_SERVER);
+
+		luwTypeMappingEClass = createEClass(LUW_TYPE_MAPPING);
+		createEAttribute(luwTypeMappingEClass, LUW_TYPE_MAPPING__SERVER_TYPE);
+		createEAttribute(luwTypeMappingEClass, LUW_TYPE_MAPPING__SERVER_VESION);
+		createEAttribute(luwTypeMappingEClass, LUW_TYPE_MAPPING__SERVER_NAME);
+		createEAttribute(luwTypeMappingEClass, LUW_TYPE_MAPPING__CREATION_TIME);
+		createEReference(luwTypeMappingEClass, LUW_TYPE_MAPPING__LOCAL_TYPE);
+		createEReference(luwTypeMappingEClass, LUW_TYPE_MAPPING__REMOTE_TYPE);
+
+		luwUserMappingEClass = createEClass(LUW_USER_MAPPING);
+		createEAttribute(luwUserMappingEClass, LUW_USER_MAPPING__LOCAL_AUTH_ID);
+		createEReference(luwUserMappingEClass, LUW_USER_MAPPING__SERVER);
+		createEReference(luwUserMappingEClass, LUW_USER_MAPPING__OPTIONS);
+
+		luwOptionEClass = createEClass(LUW_OPTION);
+		createEAttribute(luwOptionEClass, LUW_OPTION__VALUE);
+
+		luwRelationalServerEClass = createEClass(LUW_RELATIONAL_SERVER);
+		createEAttribute(luwRelationalServerEClass, LUW_RELATIONAL_SERVER__CPU_RATIO);
+		createEAttribute(luwRelationalServerEClass, LUW_RELATIONAL_SERVER__IO_RATIO);
+		createEAttribute(luwRelationalServerEClass, LUW_RELATIONAL_SERVER__COMM_RATE);
+		createEAttribute(luwRelationalServerEClass, LUW_RELATIONAL_SERVER__FOLD_ID);
+		createEAttribute(luwRelationalServerEClass, LUW_RELATIONAL_SERVER__FOLD_PW);
+		createEAttribute(luwRelationalServerEClass, LUW_RELATIONAL_SERVER__COLLATING_SEQUENCE);
+		createEAttribute(luwRelationalServerEClass, LUW_RELATIONAL_SERVER__PUSHDOWN);
+		createEAttribute(luwRelationalServerEClass, LUW_RELATIONAL_SERVER__NODE);
+		createEAttribute(luwRelationalServerEClass, LUW_RELATIONAL_SERVER__DB_NAME);
+		createEAttribute(luwRelationalServerEClass, LUW_RELATIONAL_SERVER__IUD_APP_SVPT_ENFORCE);
+		createEAttribute(luwRelationalServerEClass, LUW_RELATIONAL_SERVER__PASSWORD);
+		createEReference(luwRelationalServerEClass, LUW_RELATIONAL_SERVER__REL_NICKNAMES);
+		createEReference(luwRelationalServerEClass, LUW_RELATIONAL_SERVER__REL_WRAPPER);
+
+		luwDatabaseEClass = createEClass(LUW_DATABASE);
+		createEAttribute(luwDatabaseEClass, LUW_DATABASE__FEDERATED);
+		createEReference(luwDatabaseEClass, LUW_DATABASE__GROUPS);
+		createEReference(luwDatabaseEClass, LUW_DATABASE__WRAPPERS);
+		createEReference(luwDatabaseEClass, LUW_DATABASE__SERVERS);
+		createEReference(luwDatabaseEClass, LUW_DATABASE__FUNCTION_MAPPINGS);
+		createEReference(luwDatabaseEClass, LUW_DATABASE__TYPE_MAPPINGS);
+		createEReference(luwDatabaseEClass, LUW_DATABASE__REVERSE_TYPE_MAPPINGS);
+		createEReference(luwDatabaseEClass, LUW_DATABASE__BUFFERPOOLS);
+		createEReference(luwDatabaseEClass, LUW_DATABASE__TABLESPACES);
+		createEReference(luwDatabaseEClass, LUW_DATABASE__STORAGE_GROUPS);
+		createEReference(luwDatabaseEClass, LUW_DATABASE__DEFAULT_STORAGE_GROUP);
+
+		luwColumnEClass = createEClass(LUW_COLUMN);
+		createEAttribute(luwColumnEClass, LUW_COLUMN__LOB_LOGGED);
+		createEAttribute(luwColumnEClass, LUW_COLUMN__LOB_COMPACTED);
+		createEAttribute(luwColumnEClass, LUW_COLUMN__COMPRESSION);
+		createEAttribute(luwColumnEClass, LUW_COLUMN__INLINE_LENGTH);
+		createEAttribute(luwColumnEClass, LUW_COLUMN__HIDDEN);
+		createEAttribute(luwColumnEClass, LUW_COLUMN__SECURITY_LABEL);
+		createEReference(luwColumnEClass, LUW_COLUMN__OPTIONS);
+
+		luwGenericNicknameEClass = createEClass(LUW_GENERIC_NICKNAME);
+		createEReference(luwGenericNicknameEClass, LUW_GENERIC_NICKNAME__GENERIC_SERVER);
+
+		luwGenericServerEClass = createEClass(LUW_GENERIC_SERVER);
+		createEReference(luwGenericServerEClass, LUW_GENERIC_SERVER__GENERIC_NICKNAMES);
+		createEReference(luwGenericServerEClass, LUW_GENERIC_SERVER__GENERIC_WRAPPER);
+
+		luwMaterializedQueryTableEClass = createEClass(LUW_MATERIALIZED_QUERY_TABLE);
+
+		luwGenericWrapperEClass = createEClass(LUW_GENERIC_WRAPPER);
+		createEReference(luwGenericWrapperEClass, LUW_GENERIC_WRAPPER__GENERIC_SERVERS);
+
+		luwStorageTableEClass = createEClass(LUW_STORAGE_TABLE);
+		createEAttribute(luwStorageTableEClass, LUW_STORAGE_TABLE__VALUE_COMPRESSION);
+		createEAttribute(luwStorageTableEClass, LUW_STORAGE_TABLE__ROW_COMPRESSION);
+		createEAttribute(luwStorageTableEClass, LUW_STORAGE_TABLE__ROW_COMPRESSION_EMPTY);
+		createEAttribute(luwStorageTableEClass, LUW_STORAGE_TABLE__COMPRESSION_MODE);
+		createEReference(luwStorageTableEClass, LUW_STORAGE_TABLE__PARTITION_KEY);
+		createEReference(luwStorageTableEClass, LUW_STORAGE_TABLE__INDEX_DATA_TABLE_SPACE);
+		createEReference(luwStorageTableEClass, LUW_STORAGE_TABLE__LOB_DATA_TABLE_SPACE);
+		createEReference(luwStorageTableEClass, LUW_STORAGE_TABLE__REGULAR_DATA_TABLE_SPACE);
+		createEReference(luwStorageTableEClass, LUW_STORAGE_TABLE__DATA_PARTITIONS);
+		createEReference(luwStorageTableEClass, LUW_STORAGE_TABLE__DATA_PARTITION_KEY);
+
+		relationalRemoteServerEClass = createEClass(RELATIONAL_REMOTE_SERVER);
+		createEReference(relationalRemoteServerEClass, RELATIONAL_REMOTE_SERVER__DATABASE);
+
+		relationalRemoteDataSetEClass = createEClass(RELATIONAL_REMOTE_DATA_SET);
+		createEReference(relationalRemoteDataSetEClass, RELATIONAL_REMOTE_DATA_SET__TABLE);
+
+		remoteServerEClass = createEClass(REMOTE_SERVER);
+		createEReference(remoteServerEClass, REMOTE_SERVER__LUW_SERVER);
+
+		remoteDataSetEClass = createEClass(REMOTE_DATA_SET);
+		createEReference(remoteDataSetEClass, REMOTE_DATA_SET__NICKNAME);
+
+		luwIndexEClass = createEClass(LUW_INDEX);
+		createEAttribute(luwIndexEClass, LUW_INDEX__PCT_FREE);
+		createEAttribute(luwIndexEClass, LUW_INDEX__MIN_PCT_FREE);
+		createEAttribute(luwIndexEClass, LUW_INDEX__REVERSE_SCAN);
+		createEAttribute(luwIndexEClass, LUW_INDEX__NOT_PARTITIONED);
+		createEAttribute(luwIndexEClass, LUW_INDEX__XML_PATTERN);
+		createEReference(luwIndexEClass, LUW_INDEX__AS_SQL_DATA_TYPE);
+		createEAttribute(luwIndexEClass, LUW_INDEX__AS_SQL_DATA_TYPE_HASHED);
+		createEAttribute(luwIndexEClass, LUW_INDEX__SYSTEM_REQUIRED);
+		createEAttribute(luwIndexEClass, LUW_INDEX__PAGE_SPLIT_TYPE);
+		createEAttribute(luwIndexEClass, LUW_INDEX__LEVEL2_PCT_FREE);
+		createEAttribute(luwIndexEClass, LUW_INDEX__MIN_PCT_USED);
+		createEAttribute(luwIndexEClass, LUW_INDEX__COMPRESS);
+		createEAttribute(luwIndexEClass, LUW_INDEX__COLLECT_STATS);
+		createEAttribute(luwIndexEClass, LUW_INDEX__SAMPLED_STATS);
+		createEAttribute(luwIndexEClass, LUW_INDEX__DETAILED_STATS);
+		createEAttribute(luwIndexEClass, LUW_INDEX__IGNORE_INVALID_VALUES);
+		createEAttribute(luwIndexEClass, LUW_INDEX__EXCLUDE_NULL_KEYS);
+		createEReference(luwIndexEClass, LUW_INDEX__TABLESPACE);
+
+		luwAttributeDefinitionEClass = createEClass(LUW_ATTRIBUTE_DEFINITION);
+		createEAttribute(luwAttributeDefinitionEClass, LUW_ATTRIBUTE_DEFINITION__LOB_LOGGED);
+		createEAttribute(luwAttributeDefinitionEClass, LUW_ATTRIBUTE_DEFINITION__LOB_COMPACTED);
+
+		federatedProcedureEClass = createEClass(FEDERATED_PROCEDURE);
+		createEAttribute(federatedProcedureEClass, FEDERATED_PROCEDURE__REMOTE_UNIQUE_ID);
+		createEAttribute(federatedProcedureEClass, FEDERATED_PROCEDURE__REMOTE_SERVER);
+		createEAttribute(federatedProcedureEClass, FEDERATED_PROCEDURE__REMOTE_SCHEMA);
+		createEAttribute(federatedProcedureEClass, FEDERATED_PROCEDURE__REMOTE_PACKAGE);
+		createEAttribute(federatedProcedureEClass, FEDERATED_PROCEDURE__REMOTE_PROCEDURE_NAME);
+		createEAttribute(federatedProcedureEClass, FEDERATED_PROCEDURE__NUMBER_OF_PARAMETERS);
+		createEAttribute(federatedProcedureEClass, FEDERATED_PROCEDURE__RESULT_SETS_TO_CLIENT);
+		createEAttribute(federatedProcedureEClass, FEDERATED_PROCEDURE__NUMBER_OF_REF_CURSORS);
+		createEAttribute(federatedProcedureEClass, FEDERATED_PROCEDURE__ALL_RESULT_SETS_TO_CALLER);
+		createEReference(federatedProcedureEClass, FEDERATED_PROCEDURE__FEDERATED_PROCEDURE);
+		createEReference(federatedProcedureEClass, FEDERATED_PROCEDURE__REMOTE_PROCEDURE);
+		createEReference(federatedProcedureEClass, FEDERATED_PROCEDURE__FEDERATED_PARAMETER);
+
+		federatedParameterEClass = createEClass(FEDERATED_PARAMETER);
+		createEAttribute(federatedParameterEClass, FEDERATED_PARAMETER__REMOTE_CODE_PAGE);
+		createEAttribute(federatedParameterEClass, FEDERATED_PARAMETER__REMOTE_PARAM_TYPE_ID);
+		createEReference(federatedParameterEClass, FEDERATED_PARAMETER__FEDERATED_PROCEDURE);
+		createEReference(federatedParameterEClass, FEDERATED_PARAMETER__REMOTE_PARAMETER);
+
+		luwPartitionExpressionEClass = createEClass(LUW_PARTITION_EXPRESSION);
+		createEAttribute(luwPartitionExpressionEClass, LUW_PARTITION_EXPRESSION__NULLS_LAST);
+		createEReference(luwPartitionExpressionEClass, LUW_PARTITION_EXPRESSION__KEY);
+		createEReference(luwPartitionExpressionEClass, LUW_PARTITION_EXPRESSION__COLUMN);
+		createEReference(luwPartitionExpressionEClass, LUW_PARTITION_EXPRESSION__PARTITION_ELEMENTS);
+
+		luwPartitionElementEClass = createEClass(LUW_PARTITION_ELEMENT);
+		createEAttribute(luwPartitionElementEClass, LUW_PARTITION_ELEMENT__STARTING);
+		createEAttribute(luwPartitionElementEClass, LUW_PARTITION_ELEMENT__ENDING);
+		createEReference(luwPartitionElementEClass, LUW_PARTITION_ELEMENT__LUW_PARTITION_EXPRESSION);
+		createEReference(luwPartitionElementEClass, LUW_PARTITION_ELEMENT__PARTITION);
+		createEReference(luwPartitionElementEClass, LUW_PARTITION_ELEMENT__EVERY_CLAUSE);
+
+		luwDataPartitionEClass = createEClass(LUW_DATA_PARTITION);
+		createEAttribute(luwDataPartitionEClass, LUW_DATA_PARTITION__ID);
+		createEAttribute(luwDataPartitionEClass, LUW_DATA_PARTITION__LOW_INCLUSIVE);
+		createEAttribute(luwDataPartitionEClass, LUW_DATA_PARTITION__HIGH_INCLUSIVE);
+		createEReference(luwDataPartitionEClass, LUW_DATA_PARTITION__LOB_DATA_TABLE_SPACE);
+		createEReference(luwDataPartitionEClass, LUW_DATA_PARTITION__REGULAR_DATA_TABLE_SPACE);
+		createEReference(luwDataPartitionEClass, LUW_DATA_PARTITION__PARTITION_ELEMENTS);
+		createEReference(luwDataPartitionEClass, LUW_DATA_PARTITION__TABLE);
+		createEReference(luwDataPartitionEClass, LUW_DATA_PARTITION__INDEX_DATA_TABLE_SPACE);
+
+		luwDataPartitionKeyEClass = createEClass(LUW_DATA_PARTITION_KEY);
+		createEAttribute(luwDataPartitionKeyEClass, LUW_DATA_PARTITION_KEY__PARTITION_METHOD);
+		createEReference(luwDataPartitionKeyEClass, LUW_DATA_PARTITION_KEY__PARTITION_EXPRESSIONS);
+		createEReference(luwDataPartitionKeyEClass, LUW_DATA_PARTITION_KEY__TABLE);
+
+		luwDatabasePackageEClass = createEClass(LUW_DATABASE_PACKAGE);
+		createEAttribute(luwDatabasePackageEClass, LUW_DATABASE_PACKAGE__CREATOR);
+		createEAttribute(luwDatabasePackageEClass, LUW_DATABASE_PACKAGE__BINDER);
+		createEAttribute(luwDatabasePackageEClass, LUW_DATABASE_PACKAGE__CURSOR_BLOCK);
+		createEAttribute(luwDatabasePackageEClass, LUW_DATABASE_PACKAGE__NUMBER_OF_SECTIONS);
+		createEAttribute(luwDatabasePackageEClass, LUW_DATABASE_PACKAGE__OPTIMIZATION_CLASS);
+		createEAttribute(luwDatabasePackageEClass, LUW_DATABASE_PACKAGE__EXPLAIN_SNAPSHOT);
+
+		luwModuleEClass = createEClass(LUW_MODULE);
+		createEAttribute(luwModuleEClass, LUW_MODULE__DIALECT);
+		createEReference(luwModuleEClass, LUW_MODULE__OWNING_SCHEMA);
+		createEReference(luwModuleEClass, LUW_MODULE__MODULE_OBJECTS);
+
+		luwModuleObjectEClass = createEClass(LUW_MODULE_OBJECT);
+		createEAttribute(luwModuleObjectEClass, LUW_MODULE_OBJECT__PUBLISHED);
+		createEReference(luwModuleObjectEClass, LUW_MODULE_OBJECT__MODULE);
+
+		luwModuleFunctionEClass = createEClass(LUW_MODULE_FUNCTION);
+		createEAttribute(luwModuleFunctionEClass, LUW_MODULE_FUNCTION__IMPLEMENTED);
+
+		luwModuleProcedureEClass = createEClass(LUW_MODULE_PROCEDURE);
+		createEAttribute(luwModuleProcedureEClass, LUW_MODULE_PROCEDURE__IMPLEMENTED);
+
+		luwModuleConditionEClass = createEClass(LUW_MODULE_CONDITION);
+		createEAttribute(luwModuleConditionEClass, LUW_MODULE_CONDITION__SQLSTATE);
+
+		luwGlobalVariableEClass = createEClass(LUW_GLOBAL_VARIABLE);
+		createEAttribute(luwGlobalVariableEClass, LUW_GLOBAL_VARIABLE__DEFAULT_VALUE);
+		createEAttribute(luwGlobalVariableEClass, LUW_GLOBAL_VARIABLE__IS_CONSTANT);
+		createEReference(luwGlobalVariableEClass, LUW_GLOBAL_VARIABLE__SCHEMA);
+
+		luwModuleTypeEClass = createEClass(LUW_MODULE_TYPE);
+
+		luwModuleRowDataTypeEClass = createEClass(LUW_MODULE_ROW_DATA_TYPE);
+
+		luwModuleArrayDataTypeEClass = createEClass(LUW_MODULE_ARRAY_DATA_TYPE);
+
+		luwModuleDistinctTypeEClass = createEClass(LUW_MODULE_DISTINCT_TYPE);
+
+		luwModuleGlobalVariableEClass = createEClass(LUW_MODULE_GLOBAL_VARIABLE);
+
+		luwArrayDataTypeEClass = createEClass(LUW_ARRAY_DATA_TYPE);
+		createEReference(luwArrayDataTypeEClass, LUW_ARRAY_DATA_TYPE__ARRAY_INDEX_ELEMENT_TYPE);
+
+		luwRowDataTypeEClass = createEClass(LUW_ROW_DATA_TYPE);
+
+		plsqlPackageEClass = createEClass(PLSQL_PACKAGE);
+		createEReference(plsqlPackageEClass, PLSQL_PACKAGE__PACKAGE_BODY);
+
+		plsqlPackageBodyEClass = createEClass(PLSQL_PACKAGE_BODY);
+		createEReference(plsqlPackageBodyEClass, PLSQL_PACKAGE_BODY__PACKAGE);
+
+		luwCursorDataTypeEClass = createEClass(LUW_CURSOR_DATA_TYPE);
+		createEReference(luwCursorDataTypeEClass, LUW_CURSOR_DATA_TYPE__ROW_TYPE);
+
+		luwModuleCursorDataTypeEClass = createEClass(LUW_MODULE_CURSOR_DATA_TYPE);
+
+		luwBufferPoolSizeExceptionEClass = createEClass(LUW_BUFFER_POOL_SIZE_EXCEPTION);
+		createEAttribute(luwBufferPoolSizeExceptionEClass, LUW_BUFFER_POOL_SIZE_EXCEPTION__SIZE);
+		createEReference(luwBufferPoolSizeExceptionEClass, LUW_BUFFER_POOL_SIZE_EXCEPTION__BUFFER_POOL);
+		createEReference(luwBufferPoolSizeExceptionEClass, LUW_BUFFER_POOL_SIZE_EXCEPTION__PARTITIONS);
+
+		luwMemberEClass = createEClass(LUW_MEMBER);
+		createEAttribute(luwMemberEClass, LUW_MEMBER__TYPE);
+		createEAttribute(luwMemberEClass, LUW_MEMBER__ALERT);
+		createEAttribute(luwMemberEClass, LUW_MEMBER__DB_PARTITION_NUM);
+		createEAttribute(luwMemberEClass, LUW_MEMBER__LOGICAL_PORT);
+		createEAttribute(luwMemberEClass, LUW_MEMBER__NET_NAME);
+
+		luwSecurityPolicyEClass = createEClass(LUW_SECURITY_POLICY);
+		createEAttribute(luwSecurityPolicyEClass, LUW_SECURITY_POLICY__NOT_AUTHORIZED_WRITE);
+		createEReference(luwSecurityPolicyEClass, LUW_SECURITY_POLICY__COMPONENTS);
+		createEReference(luwSecurityPolicyEClass, LUW_SECURITY_POLICY__LABELS);
+		createEReference(luwSecurityPolicyEClass, LUW_SECURITY_POLICY__TABLE);
+
+		luwSecurityLabelComponentEClass = createEClass(LUW_SECURITY_LABEL_COMPONENT);
+		createEAttribute(luwSecurityLabelComponentEClass, LUW_SECURITY_LABEL_COMPONENT__TYPE);
+		createEReference(luwSecurityLabelComponentEClass, LUW_SECURITY_LABEL_COMPONENT__LUW_SECURITY_POLICY);
+		createEReference(luwSecurityLabelComponentEClass, LUW_SECURITY_LABEL_COMPONENT__ELEMENTS);
+
+		luwSecurityLabelEClass = createEClass(LUW_SECURITY_LABEL);
+		createEAttribute(luwSecurityLabelEClass, LUW_SECURITY_LABEL__SECURITY_LABEL);
+		createEReference(luwSecurityLabelEClass, LUW_SECURITY_LABEL__POLICY);
+
+		luwSecurityLabelComponentElementEClass = createEClass(LUW_SECURITY_LABEL_COMPONENT_ELEMENT);
+		createEAttribute(luwSecurityLabelComponentElementEClass, LUW_SECURITY_LABEL_COMPONENT_ELEMENT__VALUE);
+		createEAttribute(luwSecurityLabelComponentElementEClass, LUW_SECURITY_LABEL_COMPONENT_ELEMENT__PARENT_VALUE);
+		createEReference(luwSecurityLabelComponentElementEClass, LUW_SECURITY_LABEL_COMPONENT_ELEMENT__LUW_SECURITY_LABEL_COMPONENT);
+
+		luwStorageGroupEClass = createEClass(LUW_STORAGE_GROUP);
+		createEAttribute(luwStorageGroupEClass, LUW_STORAGE_GROUP__STORAGE_PATHS);
+		createEAttribute(luwStorageGroupEClass, LUW_STORAGE_GROUP__OVERHEAD);
+		createEAttribute(luwStorageGroupEClass, LUW_STORAGE_GROUP__DEVICE_READ_RATE);
+		createEAttribute(luwStorageGroupEClass, LUW_STORAGE_GROUP__DATA_TAG);
+		createEAttribute(luwStorageGroupEClass, LUW_STORAGE_GROUP__DEFAULT);
+		createEReference(luwStorageGroupEClass, LUW_STORAGE_GROUP__DATABASE);
+		createEReference(luwStorageGroupEClass, LUW_STORAGE_GROUP__TABLE_SPACES);
+
+		luwTemporaryStorageTableEClass = createEClass(LUW_TEMPORARY_STORAGE_TABLE);
+		createEReference(luwTemporaryStorageTableEClass, LUW_TEMPORARY_STORAGE_TABLE__PARTITION_KEY);
+		createEReference(luwTemporaryStorageTableEClass, LUW_TEMPORARY_STORAGE_TABLE__USER_TEMPORARY_TABLE_SPACE);
+
+		luwTemporaryTableEClass = createEClass(LUW_TEMPORARY_TABLE);
+		createEReference(luwTemporaryTableEClass, LUW_TEMPORARY_TABLE__TABLE);
+		createEAttribute(luwTemporaryTableEClass, LUW_TEMPORARY_TABLE__LOG_OPTION);
+
+		arrayIndexElementTypeEClass = createEClass(ARRAY_INDEX_ELEMENT_TYPE);
+		createEReference(arrayIndexElementTypeEClass, ARRAY_INDEX_ELEMENT_TYPE__LUW_ARRAY_DATA_TYPE);
+
+		luwPartitionEveryClauseElementEClass = createEClass(LUW_PARTITION_EVERY_CLAUSE_ELEMENT);
+		createEAttribute(luwPartitionEveryClauseElementEClass, LUW_PARTITION_EVERY_CLAUSE_ELEMENT__VALUE);
+		createEAttribute(luwPartitionEveryClauseElementEClass, LUW_PARTITION_EVERY_CLAUSE_ELEMENT__DURATION);
+		createEReference(luwPartitionEveryClauseElementEClass, LUW_PARTITION_EVERY_CLAUSE_ELEMENT__LUW_PARTITION_ELEMENT);
+
+		// Create enums
+		luwContainerTypeEEnum = createEEnum(LUW_CONTAINER_TYPE);
+		pageSizeTypeEEnum = createEEnum(PAGE_SIZE_TYPE);
+		bufferPoolTypeEEnum = createEEnum(BUFFER_POOL_TYPE);
+		tableSpaceTypeEEnum = createEEnum(TABLE_SPACE_TYPE);
+		managementTypeEEnum = createEEnum(MANAGEMENT_TYPE);
+		checkOptionTypeEEnum = createEEnum(CHECK_OPTION_TYPE);
+		partitionMethodEEnum = createEEnum(PARTITION_METHOD);
+		maintenanceTypeEEnum = createEEnum(MAINTENANCE_TYPE);
+		refreshTypeEEnum = createEEnum(REFRESH_TYPE);
+		wrapperTypeEEnum = createEEnum(WRAPPER_TYPE);
+		dataPartitionMethodEEnum = createEEnum(DATA_PARTITION_METHOD);
+		cursorBlockTypeEEnum = createEEnum(CURSOR_BLOCK_TYPE);
+		explainSnaphotTypeEEnum = createEEnum(EXPLAIN_SNAPHOT_TYPE);
+		fileSystemCachingTypeEEnum = createEEnum(FILE_SYSTEM_CACHING_TYPE);
+		luwIndexPageSplitTypeEEnum = createEEnum(LUW_INDEX_PAGE_SPLIT_TYPE);
+		luwIndexCompressTypeEEnum = createEEnum(LUW_INDEX_COMPRESS_TYPE);
+		systemTypeEEnum = createEEnum(SYSTEM_TYPE);
+		averageTableSizeTypeEEnum = createEEnum(AVERAGE_TABLE_SIZE_TYPE);
+		luwStorageTableCompressionModeEEnum = createEEnum(LUW_STORAGE_TABLE_COMPRESSION_MODE);
+		luwMemberTypeEEnum = createEEnum(LUW_MEMBER_TYPE);
+		memberStateTypeEEnum = createEEnum(MEMBER_STATE_TYPE);
+		luwSecurityLabelComponentTypeEEnum = createEEnum(LUW_SECURITY_LABEL_COMPONENT_TYPE);
+		luwSecurityLabelNotAuthorizedWriteActionEEnum = createEEnum(LUW_SECURITY_LABEL_NOT_AUTHORIZED_WRITE_ACTION);
+		luwFederatedDataSourceEEnum = createEEnum(LUW_FEDERATED_DATA_SOURCE);
+		luwTemporaryTableLoggingOptionEEnum = createEEnum(LUW_TEMPORARY_TABLE_LOGGING_OPTION);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		SQLSchemaPackage theSQLSchemaPackage = (SQLSchemaPackage)EPackage.Registry.INSTANCE.getEPackage(SQLSchemaPackage.eNS_URI);
+		DB2ModelPackage theDB2ModelPackage = (DB2ModelPackage)EPackage.Registry.INSTANCE.getEPackage(DB2ModelPackage.eNS_URI);
+		SQLTablesPackage theSQLTablesPackage = (SQLTablesPackage)EPackage.Registry.INSTANCE.getEPackage(SQLTablesPackage.eNS_URI);
+		SQLRoutinesPackage theSQLRoutinesPackage = (SQLRoutinesPackage)EPackage.Registry.INSTANCE.getEPackage(SQLRoutinesPackage.eNS_URI);
+		SQLDataTypesPackage theSQLDataTypesPackage = (SQLDataTypesPackage)EPackage.Registry.INSTANCE.getEPackage(SQLDataTypesPackage.eNS_URI);
+		EcorePackage theEcorePackage = (EcorePackage)EPackage.Registry.INSTANCE.getEPackage(EcorePackage.eNS_URI);
+
+		// Add supertypes to classes
+		luwPartitionGroupEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		luwTableSpaceEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		luwDatabasePartitionEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		luwDatabaseContainerEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		luwAdminServerEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		luwBufferPoolEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		luwTableEClass.getESuperTypes().add(theDB2ModelPackage.getDB2Table());
+		luwTableEClass.getESuperTypes().add(this.getLUWStorageTable());
+		luwViewEClass.getESuperTypes().add(theDB2ModelPackage.getDB2View());
+		luwPartitionKeyEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		luwNicknameEClass.getESuperTypes().add(this.getLUWTable());
+		luwFunctionMappingEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		luwWrapperEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		luwNonRelationalNicknameEClass.getESuperTypes().add(this.getLUWNickname());
+		luwNonRelationalServerEClass.getESuperTypes().add(this.getLUWServer());
+		luwNonRelationalWrapperEClass.getESuperTypes().add(this.getLUWWrapper());
+		luwRelationalNicknameEClass.getESuperTypes().add(this.getLUWNickname());
+		luwGenericUserMappingEClass.getESuperTypes().add(this.getLUWUserMapping());
+		luwRelationalWrapperEClass.getESuperTypes().add(this.getLUWWrapper());
+		luwServerEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		luwTypeMappingEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		luwUserMappingEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		luwOptionEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		luwRelationalServerEClass.getESuperTypes().add(this.getLUWServer());
+		luwDatabaseEClass.getESuperTypes().add(theDB2ModelPackage.getDB2Database());
+		luwColumnEClass.getESuperTypes().add(theDB2ModelPackage.getDB2Column());
+		luwGenericNicknameEClass.getESuperTypes().add(this.getLUWNickname());
+		luwGenericServerEClass.getESuperTypes().add(this.getLUWServer());
+		luwMaterializedQueryTableEClass.getESuperTypes().add(theDB2ModelPackage.getDB2MaterializedQueryTable());
+		luwMaterializedQueryTableEClass.getESuperTypes().add(this.getLUWStorageTable());
+		luwGenericWrapperEClass.getESuperTypes().add(this.getLUWWrapper());
+		relationalRemoteServerEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		relationalRemoteServerEClass.getESuperTypes().add(this.getRemoteServer());
+		relationalRemoteDataSetEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		relationalRemoteDataSetEClass.getESuperTypes().add(this.getRemoteDataSet());
+		luwIndexEClass.getESuperTypes().add(theDB2ModelPackage.getDB2Index());
+		luwAttributeDefinitionEClass.getESuperTypes().add(theSQLDataTypesPackage.getAttributeDefinition());
+		federatedProcedureEClass.getESuperTypes().add(theDB2ModelPackage.getDB2Procedure());
+		federatedParameterEClass.getESuperTypes().add(theSQLRoutinesPackage.getParameter());
+		luwPartitionExpressionEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		luwPartitionElementEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		luwDataPartitionEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		luwDatabasePackageEClass.getESuperTypes().add(theDB2ModelPackage.getDB2Package());
+		luwModuleEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		luwModuleFunctionEClass.getESuperTypes().add(theDB2ModelPackage.getDB2UserDefinedFunction());
+		luwModuleFunctionEClass.getESuperTypes().add(this.getLUWModuleObject());
+		luwModuleProcedureEClass.getESuperTypes().add(theDB2ModelPackage.getDB2Procedure());
+		luwModuleProcedureEClass.getESuperTypes().add(this.getLUWModuleObject());
+		luwModuleConditionEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		luwModuleConditionEClass.getESuperTypes().add(this.getLUWModuleObject());
+		luwGlobalVariableEClass.getESuperTypes().add(theSQLSchemaPackage.getTypedElement());
+		luwModuleTypeEClass.getESuperTypes().add(this.getLUWModuleObject());
+		luwModuleRowDataTypeEClass.getESuperTypes().add(this.getLUWRowDataType());
+		luwModuleRowDataTypeEClass.getESuperTypes().add(this.getLUWModuleType());
+		luwModuleArrayDataTypeEClass.getESuperTypes().add(this.getLUWArrayDataType());
+		luwModuleArrayDataTypeEClass.getESuperTypes().add(this.getLUWModuleType());
+		luwModuleDistinctTypeEClass.getESuperTypes().add(theSQLDataTypesPackage.getDistinctUserDefinedType());
+		luwModuleDistinctTypeEClass.getESuperTypes().add(this.getLUWModuleType());
+		luwModuleGlobalVariableEClass.getESuperTypes().add(this.getLUWGlobalVariable());
+		luwModuleGlobalVariableEClass.getESuperTypes().add(this.getLUWModuleObject());
+		luwArrayDataTypeEClass.getESuperTypes().add(theSQLDataTypesPackage.getArrayDataType());
+		luwArrayDataTypeEClass.getESuperTypes().add(theSQLDataTypesPackage.getUserDefinedType());
+		luwRowDataTypeEClass.getESuperTypes().add(theSQLDataTypesPackage.getUserDefinedType());
+		luwRowDataTypeEClass.getESuperTypes().add(theSQLDataTypesPackage.getRowDataType());
+		plsqlPackageEClass.getESuperTypes().add(this.getLUWModule());
+		plsqlPackageEClass.getESuperTypes().add(theDB2ModelPackage.getDB2Routine());
+		plsqlPackageBodyEClass.getESuperTypes().add(theSQLRoutinesPackage.getSource());
+		luwCursorDataTypeEClass.getESuperTypes().add(theSQLDataTypesPackage.getUserDefinedType());
+		luwCursorDataTypeEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		luwModuleCursorDataTypeEClass.getESuperTypes().add(this.getLUWCursorDataType());
+		luwModuleCursorDataTypeEClass.getESuperTypes().add(this.getLUWModuleType());
+		luwBufferPoolSizeExceptionEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		luwMemberEClass.getESuperTypes().add(theDB2ModelPackage.getDB2Member());
+		luwSecurityPolicyEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		luwSecurityLabelComponentEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		luwSecurityLabelEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		luwSecurityLabelComponentElementEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		luwStorageGroupEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		luwTemporaryTableEClass.getESuperTypes().add(theSQLTablesPackage.getTemporaryTable());
+		luwTemporaryTableEClass.getESuperTypes().add(this.getLUWTemporaryStorageTable());
+		arrayIndexElementTypeEClass.getESuperTypes().add(theSQLDataTypesPackage.getElementType());
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(luwPartitionGroupEClass, LUWPartitionGroup.class, "LUWPartitionGroup", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getLUWPartitionGroup_Partitions(), this.getLUWDatabasePartition(), this.getLUWDatabasePartition_Group(), "partitions", null, 1, -1, LUWPartitionGroup.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWPartitionGroup_TableSpaces(), this.getLUWTableSpace(), this.getLUWTableSpace_Group(), "tableSpaces", null, 0, -1, LUWPartitionGroup.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWPartitionGroup_Database(), this.getLUWDatabase(), this.getLUWDatabase_Groups(), "database", null, 1, 1, LUWPartitionGroup.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWPartitionGroup_BufferPool(), this.getLUWBufferPool(), this.getLUWBufferPool_PartitionGroup(), "bufferPool", null, 0, -1, LUWPartitionGroup.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwTableSpaceEClass, LUWTableSpace.class, "LUWTableSpace", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getLUWTableSpace_TemporaryStorageTables(), this.getLUWTemporaryStorageTable(), this.getLUWTemporaryStorageTable_UserTemporaryTableSpace(), "temporaryStorageTables", null, 0, -1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTableSpace_TablespaceType(), this.getTableSpaceType(), "tablespaceType", null, 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTableSpace_ManagementType(), this.getManagementType(), "managementType", null, 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTableSpace_ExtentSize(), ecorePackage.getEInt(), "extentSize", null, 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTableSpace_PreFetchSize(), ecorePackage.getEInt(), "preFetchSize", null, 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTableSpace_Overhead(), ecorePackage.getEDouble(), "overhead", null, 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTableSpace_TransferRate(), ecorePackage.getEDouble(), "transferRate", null, 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTableSpace_RecoverDroppedTableOn(), ecorePackage.getEBoolean(), "recoverDroppedTableOn", null, 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTableSpace_PageSize(), this.getPageSizeType(), "pageSize", "FOUR_K", 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getLUWTableSpace_Size(), ecorePackage.getELong(), "size", null, 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTableSpace_AutoResize(), ecorePackage.getEBoolean(), "autoResize", null, 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTableSpace_InitialSize(), ecorePackage.getELong(), "initialSize", null, 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTableSpace_IncreaseSize(), ecorePackage.getELong(), "increaseSize", null, 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTableSpace_MaximumSize(), ecorePackage.getELong(), "maximumSize", null, 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTableSpace_InitialSizeUnit(), theDB2ModelPackage.getUnitType(), "initialSizeUnit", null, 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTableSpace_MaximumSizeUnit(), theDB2ModelPackage.getUnitType(), "maximumSizeUnit", null, 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTableSpace_IncreaseSizeUnit(), theDB2ModelPackage.getUnitType(), "increaseSizeUnit", null, 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTableSpace_IncreasePercent(), ecorePackage.getEInt(), "increasePercent", null, 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTableSpace_FileSystemCaching(), this.getFileSystemCachingType(), "fileSystemCaching", "NONE", 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getLUWTableSpace_AverageSeekTime(), ecorePackage.getEDouble(), "averageSeekTime", null, 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTableSpace_RotationSpeed(), ecorePackage.getEInt(), "rotationSpeed", null, 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTableSpace_Transfer(), ecorePackage.getEDouble(), "transfer", null, 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTableSpace_SystemType(), this.getSystemType(), "systemType", null, 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTableSpace_AverageTableSize(), this.getAverageTableSizeType(), "averageTableSize", null, 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTableSpace_ExternalContainerCount(), ecorePackage.getEInt(), "externalContainerCount", null, 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTableSpace_InheritOverhead(), ecorePackage.getEBoolean(), "inheritOverhead", null, 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTableSpace_InheritTransferate(), ecorePackage.getEBoolean(), "inheritTransferate", null, 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTableSpace_Rebalance(), ecorePackage.getEBoolean(), "rebalance", null, 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTableSpace_DataTag(), ecorePackage.getEString(), "dataTag", null, 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTableSpace_SuspendRebalance(), ecorePackage.getEBoolean(), "suspendRebalance", null, 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTableSpace_ResumeRebalance(), ecorePackage.getEBoolean(), "resumeRebalance", null, 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWTableSpace_Group(), this.getLUWPartitionGroup(), this.getLUWPartitionGroup_TableSpaces(), "group", null, 1, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWTableSpace_Containers(), this.getLUWDatabaseContainer(), this.getLUWDatabaseContainer_TableSpace(), "containers", null, 1, -1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWTableSpace_BufferPool(), this.getLUWBufferPool(), this.getLUWBufferPool_TableSpaces(), "bufferPool", null, 1, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWTableSpace_IndexDataTables(), this.getLUWStorageTable(), this.getLUWStorageTable_IndexDataTableSpace(), "indexDataTables", null, 0, -1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWTableSpace_LOBDataTables(), this.getLUWStorageTable(), this.getLUWStorageTable_LOBDataTableSpace(), "LOBDataTables", null, 0, -1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWTableSpace_RegularDataTables(), this.getLUWStorageTable(), this.getLUWStorageTable_RegularDataTableSpace(), "regularDataTables", null, 0, -1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWTableSpace_Database(), this.getLUWDatabase(), this.getLUWDatabase_Tablespaces(), "database", null, 1, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWTableSpace_LOBDataPartition(), this.getLUWDataPartition(), this.getLUWDataPartition_LOBDataTableSpace(), "LOBDataPartition", null, 0, -1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWTableSpace_RegularDataPartition(), this.getLUWDataPartition(), this.getLUWDataPartition_RegularDataTableSpace(), "regularDataPartition", null, 0, -1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWTableSpace_Indexes(), this.getLUWIndex(), this.getLUWIndex_Tablespace(), "indexes", null, 0, -1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWTableSpace_IndexDataPartition(), this.getLUWDataPartition(), this.getLUWDataPartition_IndexDataTableSpace(), "indexDataPartition", null, 0, -1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWTableSpace_StorageGroup(), this.getLUWStorageGroup(), this.getLUWStorageGroup_TableSpaces(), "storageGroup", null, 0, 1, LUWTableSpace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(luwTableSpaceEClass, theSQLSchemaPackage.getList(), "getTables", 0, 1); //$NON-NLS-1$
+
+		initEClass(luwDatabasePartitionEClass, LUWDatabasePartition.class, "LUWDatabasePartition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWDatabasePartition_Number(), ecorePackage.getEInt(), "number", null, 0, 1, LUWDatabasePartition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWDatabasePartition_PortNumber(), ecorePackage.getEInt(), "portNumber", null, 0, 1, LUWDatabasePartition.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWDatabasePartition_HostName(), ecorePackage.getEString(), "hostName", null, 0, 1, LUWDatabasePartition.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWDatabasePartition_SwitchName(), ecorePackage.getEString(), "switchName", null, 0, 1, LUWDatabasePartition.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWDatabasePartition_CatalogPartition(), ecorePackage.getEBoolean(), "catalogPartition", null, 0, 1, LUWDatabasePartition.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWDatabasePartition_Group(), this.getLUWPartitionGroup(), this.getLUWPartitionGroup_Partitions(), "group", null, 1, 1, LUWDatabasePartition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWDatabasePartition_BufferPool(), this.getLUWBufferPool(), this.getLUWBufferPool_Partitions(), "bufferPool", null, 1, 1, LUWDatabasePartition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWDatabasePartition_Containers(), this.getLUWDatabaseContainer(), this.getLUWDatabaseContainer_Partitions(), "containers", null, 0, -1, LUWDatabasePartition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWDatabasePartition_SizeException(), this.getLUWBufferPoolSizeException(), this.getLUWBufferPoolSizeException_Partitions(), "sizeException", null, 0, 1, LUWDatabasePartition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwDatabaseContainerEClass, LUWDatabaseContainer.class, "LUWDatabaseContainer", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWDatabaseContainer_ContainerType(), this.getLUWContainerType(), "containerType", null, 0, 1, LUWDatabaseContainer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWDatabaseContainer_SizeInPages(), ecorePackage.getEInt(), "sizeInPages", null, 0, 1, LUWDatabaseContainer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWDatabaseContainer_Size(), ecorePackage.getEInt(), "size", null, 0, 1, LUWDatabaseContainer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWDatabaseContainer_SizeUnits(), theDB2ModelPackage.getUnitType(), "sizeUnits", null, 0, 1, LUWDatabaseContainer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWDatabaseContainer_TableSpace(), this.getLUWTableSpace(), this.getLUWTableSpace_Containers(), "tableSpace", null, 1, 1, LUWDatabaseContainer.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWDatabaseContainer_Partitions(), this.getLUWDatabasePartition(), this.getLUWDatabasePartition_Containers(), "partitions", null, 0, -1, LUWDatabaseContainer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwAdminServerEClass, LUWAdminServer.class, "LUWAdminServer", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getLUWAdminServer_Instances(), theDB2ModelPackage.getDB2DatabaseManager(), theDB2ModelPackage.getDB2DatabaseManager_Server(), "instances", null, 0, -1, LUWAdminServer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwBufferPoolEClass, LUWBufferPool.class, "LUWBufferPool", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWBufferPool_CreateType(), this.getBufferPoolType(), "createType", null, 0, 1, LUWBufferPool.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWBufferPool_Size(), ecorePackage.getEInt(), "size", null, 0, 1, LUWBufferPool.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWBufferPool_PageSize(), this.getPageSizeType(), "pageSize", "FOUR_K", 0, 1, LUWBufferPool.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getLUWBufferPool_BlockSize(), ecorePackage.getEInt(), "blockSize", "32", 0, 1, LUWBufferPool.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getLUWBufferPool_NumBlockPages(), ecorePackage.getEInt(), "numBlockPages", null, 0, 1, LUWBufferPool.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWBufferPool_ExtendedStorage(), ecorePackage.getEBoolean(), "extendedStorage", null, 0, 1, LUWBufferPool.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWBufferPool_Automatic(), ecorePackage.getEBoolean(), "automatic", "true", 0, 1, LUWBufferPool.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEReference(getLUWBufferPool_TableSpaces(), this.getLUWTableSpace(), this.getLUWTableSpace_BufferPool(), "tableSpaces", null, 0, -1, LUWBufferPool.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWBufferPool_Partitions(), this.getLUWDatabasePartition(), this.getLUWDatabasePartition_BufferPool(), "partitions", null, 0, -1, LUWBufferPool.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWBufferPool_PartitionGroup(), this.getLUWPartitionGroup(), this.getLUWPartitionGroup_BufferPool(), "partitionGroup", null, 0, -1, LUWBufferPool.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWBufferPool_Database(), this.getLUWDatabase(), this.getLUWDatabase_Bufferpools(), "database", null, 1, 1, LUWBufferPool.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWBufferPool_SizeException(), this.getLUWBufferPoolSizeException(), this.getLUWBufferPoolSizeException_BufferPool(), "sizeException", null, 0, -1, LUWBufferPool.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwTableEClass, LUWTable.class, "LUWTable", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWTable_PCTFree(), ecorePackage.getEInt(), "PCTFree", "-1", 0, 1, LUWTable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getLUWTable_RestrictOnDrop(), ecorePackage.getEBoolean(), "restrictOnDrop", null, 0, 1, LUWTable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTable_PartitionMode(), ecorePackage.getEString(), "partitionMode", null, 0, 1, LUWTable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTable_AppendMode(), ecorePackage.getEBoolean(), "appendMode", null, 0, 1, LUWTable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTable_LogMode(), ecorePackage.getEString(), "logMode", null, 0, 1, LUWTable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTable_LockSizeRow(), ecorePackage.getEBoolean(), "lockSizeRow", null, 0, 1, LUWTable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTable_Volatile(), ecorePackage.getEBoolean(), "volatile", null, 0, 1, LUWTable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWTable_Options(), this.getLUWOption(), null, "options", null, 0, -1, LUWTable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWTable_SecurityPolicy(), this.getLUWSecurityPolicy(), this.getLUWSecurityPolicy_Table(), "securityPolicy", null, 1, 1, LUWTable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwViewEClass, LUWView.class, "LUWView", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWView_Federated(), ecorePackage.getEBoolean(), "federated", null, 0, 1, LUWView.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWView_OptimizeQuery(), ecorePackage.getEBoolean(), "optimizeQuery", null, 0, 1, LUWView.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwPartitionKeyEClass, LUWPartitionKey.class, "LUWPartitionKey", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getLUWPartitionKey_TemporaryStorageTable(), this.getLUWTemporaryStorageTable(), this.getLUWTemporaryStorageTable_PartitionKey(), "temporaryStorageTable", null, 1, 1, LUWPartitionKey.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWPartitionKey_PartitionMethod(), this.getPartitionMethod(), "partitionMethod", null, 0, 1, LUWPartitionKey.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWPartitionKey_Table(), this.getLUWStorageTable(), this.getLUWStorageTable_PartitionKey(), "table", null, 1, 1, LUWPartitionKey.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWPartitionKey_Columns(), theSQLTablesPackage.getColumn(), null, "columns", null, 1, -1, LUWPartitionKey.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwNicknameEClass, LUWNickname.class, "LUWNickname", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getLUWNickname_RemoteDataSet(), this.getRemoteDataSet(), this.getRemoteDataSet_Nickname(), "remoteDataSet", null, 1, 1, LUWNickname.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWNickname_Server(), this.getLUWServer(), this.getLUWServer_Nicknames(), "server", null, 1, 1, LUWNickname.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwFunctionMappingEClass, LUWFunctionMapping.class, "LUWFunctionMapping", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWFunctionMapping_ServerType(), ecorePackage.getEString(), "serverType", null, 0, 1, LUWFunctionMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWFunctionMapping_ServerVersion(), ecorePackage.getEString(), "serverVersion", null, 0, 1, LUWFunctionMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWFunctionMapping_ServerName(), ecorePackage.getEString(), "serverName", null, 0, 1, LUWFunctionMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWFunctionMapping_CreationTime(), theSQLSchemaPackage.getDate(), "creationTime", null, 0, 1, LUWFunctionMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWFunctionMapping_Disabled(), ecorePackage.getEBoolean(), "disabled", "false", 0, 1, LUWFunctionMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getLUWFunctionMapping_InstsPerInvoc(), ecorePackage.getEInt(), "instsPerInvoc", null, 0, 1, LUWFunctionMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWFunctionMapping_InstsPerArgByte(), ecorePackage.getEInt(), "instsPerArgByte", null, 0, 1, LUWFunctionMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWFunctionMapping_IosPerInvoc(), ecorePackage.getEInt(), "iosPerInvoc", null, 0, 1, LUWFunctionMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWFunctionMapping_IosPerArgByte(), ecorePackage.getEInt(), "iosPerArgByte", null, 0, 1, LUWFunctionMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWFunctionMapping_Options(), this.getLUWOption(), null, "options", null, 0, -1, LUWFunctionMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWFunctionMapping_LocalFunction(), theDB2ModelPackage.getDB2Function(), null, "localFunction", null, 1, 1, LUWFunctionMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWFunctionMapping_RemoteFunction(), theSQLRoutinesPackage.getFunction(), null, "remoteFunction", null, 1, 1, LUWFunctionMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWFunctionMapping_LUWDatabase(), this.getLUWDatabase(), this.getLUWDatabase_FunctionMappings(), "LUWDatabase", null, 1, 1, LUWFunctionMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwWrapperEClass, LUWWrapper.class, "LUWWrapper", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWWrapper_Version(), ecorePackage.getEString(), "version", null, 0, 1, LUWWrapper.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWWrapper_Library(), ecorePackage.getEString(), "library", null, 0, 1, LUWWrapper.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWWrapper_Fenced(), ecorePackage.getEBoolean(), "fenced", "true", 0, 1, LUWWrapper.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getLUWWrapper_WrapperType(), this.getWrapperType(), "wrapperType", null, 0, 1, LUWWrapper.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWWrapper_DataSource(), this.getLUWFederatedDataSource(), "dataSource", null, 0, 1, LUWWrapper.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWWrapper_DiscoveredLibraries(), ecorePackage.getEString(), "DiscoveredLibraries", null, 0, -1, LUWWrapper.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWWrapper_Servers(), this.getLUWServer(), this.getLUWServer_Wrapper(), "servers", null, 0, -1, LUWWrapper.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWWrapper_LUWDatabase(), this.getLUWDatabase(), this.getLUWDatabase_Wrappers(), "LUWDatabase", null, 1, 1, LUWWrapper.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWWrapper_Options(), this.getLUWOption(), null, "options", null, 0, -1, LUWWrapper.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwNonRelationalNicknameEClass, LUWNonRelationalNickname.class, "LUWNonRelationalNickname", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getLUWNonRelationalNickname_NonRelServer(), this.getLUWNonRelationalServer(), this.getLUWNonRelationalServer_NonRelNicknames(), "nonRelServer", null, 1, 1, LUWNonRelationalNickname.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwNonRelationalServerEClass, LUWNonRelationalServer.class, "LUWNonRelationalServer", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getLUWNonRelationalServer_NonRelWrapper(), this.getLUWNonRelationalWrapper(), this.getLUWNonRelationalWrapper_NonRelServers(), "nonRelWrapper", null, 1, 1, LUWNonRelationalServer.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWNonRelationalServer_NonRelNicknames(), this.getLUWNonRelationalNickname(), this.getLUWNonRelationalNickname_NonRelServer(), "nonRelNicknames", null, 0, -1, LUWNonRelationalServer.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwNonRelationalWrapperEClass, LUWNonRelationalWrapper.class, "LUWNonRelationalWrapper", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getLUWNonRelationalWrapper_NonRelServers(), this.getLUWNonRelationalServer(), this.getLUWNonRelationalServer_NonRelWrapper(), "nonRelServers", null, 0, -1, LUWNonRelationalWrapper.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwRelationalNicknameEClass, LUWRelationalNickname.class, "LUWRelationalNickname", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getLUWRelationalNickname_RelServer(), this.getLUWRelationalServer(), this.getLUWRelationalServer_RelNicknames(), "relServer", null, 1, 1, LUWRelationalNickname.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwGenericUserMappingEClass, LUWGenericUserMapping.class, "LUWGenericUserMapping", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWGenericUserMapping_RemoteUser(), ecorePackage.getEString(), "remoteUser", null, 0, 1, LUWGenericUserMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWGenericUserMapping_RemotePassword(), ecorePackage.getEString(), "remotePassword", null, 0, 1, LUWGenericUserMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwRelationalWrapperEClass, LUWRelationalWrapper.class, "LUWRelationalWrapper", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getLUWRelationalWrapper_RelServers(), this.getLUWRelationalServer(), this.getLUWRelationalServer_RelWrapper(), "relServers", null, 0, -1, LUWRelationalWrapper.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwServerEClass, LUWServer.class, "LUWServer", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWServer_ServerType(), ecorePackage.getEString(), "serverType", null, 0, 1, LUWServer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWServer_ServerVersion(), ecorePackage.getEString(), "serverVersion", null, 0, 1, LUWServer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWServer_UserMappings(), this.getLUWUserMapping(), this.getLUWUserMapping_Server(), "userMappings", null, 0, -1, LUWServer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWServer_Wrapper(), this.getLUWWrapper(), this.getLUWWrapper_Servers(), "wrapper", null, 1, 1, LUWServer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWServer_Nicknames(), this.getLUWNickname(), this.getLUWNickname_Server(), "nicknames", null, 0, -1, LUWServer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWServer_LUWDatabase(), this.getLUWDatabase(), this.getLUWDatabase_Servers(), "LUWDatabase", null, 1, 1, LUWServer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWServer_Options(), this.getLUWOption(), null, "options", null, 0, -1, LUWServer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWServer_RemoteServer(), this.getRemoteServer(), this.getRemoteServer_LUWServer(), "remoteServer", null, 1, 1, LUWServer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwTypeMappingEClass, LUWTypeMapping.class, "LUWTypeMapping", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWTypeMapping_ServerType(), ecorePackage.getEString(), "serverType", null, 0, 1, LUWTypeMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTypeMapping_ServerVesion(), ecorePackage.getEString(), "serverVesion", null, 0, 1, LUWTypeMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTypeMapping_ServerName(), ecorePackage.getEString(), "serverName", null, 0, 1, LUWTypeMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTypeMapping_CreationTime(), theSQLSchemaPackage.getDate(), "creationTime", null, 0, 1, LUWTypeMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWTypeMapping_LocalType(), theSQLDataTypesPackage.getPredefinedDataType(), null, "localType", null, 1, 1, LUWTypeMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWTypeMapping_RemoteType(), theSQLDataTypesPackage.getPredefinedDataType(), null, "remoteType", null, 1, 1, LUWTypeMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwUserMappingEClass, LUWUserMapping.class, "LUWUserMapping", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWUserMapping_LocalAuthId(), ecorePackage.getEString(), "localAuthId", null, 0, 1, LUWUserMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWUserMapping_Server(), this.getLUWServer(), this.getLUWServer_UserMappings(), "server", null, 1, 1, LUWUserMapping.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWUserMapping_Options(), this.getLUWOption(), null, "options", null, 0, -1, LUWUserMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwOptionEClass, LUWOption.class, "LUWOption", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWOption_Value(), ecorePackage.getEString(), "value", null, 0, 1, LUWOption.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwRelationalServerEClass, LUWRelationalServer.class, "LUWRelationalServer", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWRelationalServer_CpuRatio(), ecorePackage.getELong(), "cpuRatio", null, 0, 1, LUWRelationalServer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWRelationalServer_IoRatio(), ecorePackage.getELong(), "ioRatio", null, 0, 1, LUWRelationalServer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWRelationalServer_CommRate(), ecorePackage.getELong(), "commRate", null, 0, 1, LUWRelationalServer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWRelationalServer_FoldId(), ecorePackage.getEBoolean(), "foldId", null, 0, 1, LUWRelationalServer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWRelationalServer_FoldPW(), ecorePackage.getEBoolean(), "foldPW", null, 0, 1, LUWRelationalServer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWRelationalServer_CollatingSequence(), ecorePackage.getEBoolean(), "collatingSequence", null, 0, 1, LUWRelationalServer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWRelationalServer_Pushdown(), ecorePackage.getEBoolean(), "pushdown", null, 0, 1, LUWRelationalServer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWRelationalServer_Node(), ecorePackage.getEString(), "node", null, 0, 1, LUWRelationalServer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWRelationalServer_DbName(), ecorePackage.getEString(), "dbName", null, 0, 1, LUWRelationalServer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWRelationalServer_IudAppSvptEnforce(), ecorePackage.getEBoolean(), "iudAppSvptEnforce", null, 0, 1, LUWRelationalServer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWRelationalServer_Password(), ecorePackage.getEString(), "password", null, 0, 1, LUWRelationalServer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWRelationalServer_RelNicknames(), this.getLUWRelationalNickname(), this.getLUWRelationalNickname_RelServer(), "relNicknames", null, 0, -1, LUWRelationalServer.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWRelationalServer_RelWrapper(), this.getLUWRelationalWrapper(), this.getLUWRelationalWrapper_RelServers(), "relWrapper", null, 1, 1, LUWRelationalServer.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(luwRelationalServerEClass, theEcorePackage.getEEList(), "getFunctionMappings", 0, 1); //$NON-NLS-1$
+
+		addEOperation(luwRelationalServerEClass, theEcorePackage.getEEList(), "getTypeMappings", 0, 1); //$NON-NLS-1$
+
+		addEOperation(luwRelationalServerEClass, theEcorePackage.getEEList(), "getReverseTypeMappings", 0, 1); //$NON-NLS-1$
+
+		initEClass(luwDatabaseEClass, LUWDatabase.class, "LUWDatabase", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWDatabase_Federated(), ecorePackage.getEBoolean(), "federated", null, 0, 1, LUWDatabase.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWDatabase_Groups(), this.getLUWPartitionGroup(), this.getLUWPartitionGroup_Database(), "groups", null, 0, -1, LUWDatabase.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWDatabase_Wrappers(), this.getLUWWrapper(), this.getLUWWrapper_LUWDatabase(), "wrappers", null, 0, -1, LUWDatabase.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWDatabase_Servers(), this.getLUWServer(), this.getLUWServer_LUWDatabase(), "servers", null, 0, -1, LUWDatabase.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWDatabase_FunctionMappings(), this.getLUWFunctionMapping(), this.getLUWFunctionMapping_LUWDatabase(), "functionMappings", null, 0, -1, LUWDatabase.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWDatabase_TypeMappings(), this.getLUWTypeMapping(), null, "typeMappings", null, 0, -1, LUWDatabase.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWDatabase_ReverseTypeMappings(), this.getLUWTypeMapping(), null, "reverseTypeMappings", null, 0, -1, LUWDatabase.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWDatabase_Bufferpools(), this.getLUWBufferPool(), this.getLUWBufferPool_Database(), "bufferpools", null, 1, -1, LUWDatabase.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWDatabase_Tablespaces(), this.getLUWTableSpace(), this.getLUWTableSpace_Database(), "tablespaces", null, 0, -1, LUWDatabase.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWDatabase_StorageGroups(), this.getLUWStorageGroup(), this.getLUWStorageGroup_Database(), "storageGroups", null, 0, -1, LUWDatabase.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWDatabase_DefaultStorageGroup(), this.getLUWStorageGroup(), null, "defaultStorageGroup", null, 0, 1, LUWDatabase.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwColumnEClass, LUWColumn.class, "LUWColumn", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWColumn_LobLogged(), ecorePackage.getEBoolean(), "lobLogged", "true", 0, 1, LUWColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getLUWColumn_LobCompacted(), ecorePackage.getEBoolean(), "lobCompacted", null, 0, 1, LUWColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWColumn_Compression(), ecorePackage.getEString(), "compression", null, 0, 1, LUWColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWColumn_InlineLength(), ecorePackage.getEInt(), "inlineLength", null, 0, 1, LUWColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWColumn_Hidden(), ecorePackage.getEBoolean(), "hidden", "false", 0, 1, LUWColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getLUWColumn_SecurityLabel(), ecorePackage.getEString(), "securityLabel", null, 0, 1, LUWColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWColumn_Options(), this.getLUWOption(), null, "options", null, 0, -1, LUWColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwGenericNicknameEClass, LUWGenericNickname.class, "LUWGenericNickname", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getLUWGenericNickname_GenericServer(), this.getLUWGenericServer(), this.getLUWGenericServer_GenericNicknames(), "genericServer", null, 1, 1, LUWGenericNickname.class, IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		EOperation op = addEOperation(luwGenericNicknameEClass, null, "setServer"); //$NON-NLS-1$
+		addEParameter(op, this.getLUWServer(), "newGenericServer", 0, 1); //$NON-NLS-1$
+
+		initEClass(luwGenericServerEClass, LUWGenericServer.class, "LUWGenericServer", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getLUWGenericServer_GenericNicknames(), this.getLUWGenericNickname(), this.getLUWGenericNickname_GenericServer(), "genericNicknames", null, 0, -1, LUWGenericServer.class, IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWGenericServer_GenericWrapper(), this.getLUWGenericWrapper(), this.getLUWGenericWrapper_GenericServers(), "genericWrapper", null, 1, 1, LUWGenericServer.class, IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(luwGenericServerEClass, theEcorePackage.getEEList(), "getNicknames", 0, 1); //$NON-NLS-1$
+
+		op = addEOperation(luwGenericServerEClass, null, "setWrapper"); //$NON-NLS-1$
+		addEParameter(op, this.getLUWWrapper(), "newGenericWrapper", 0, 1); //$NON-NLS-1$
+
+		initEClass(luwMaterializedQueryTableEClass, LUWMaterializedQueryTable.class, "LUWMaterializedQueryTable", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(luwGenericWrapperEClass, LUWGenericWrapper.class, "LUWGenericWrapper", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getLUWGenericWrapper_GenericServers(), this.getLUWGenericServer(), this.getLUWGenericServer_GenericWrapper(), "genericServers", null, 0, -1, LUWGenericWrapper.class, IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(luwGenericWrapperEClass, theEcorePackage.getEEList(), "getServers", 0, 1); //$NON-NLS-1$
+
+		initEClass(luwStorageTableEClass, LUWStorageTable.class, "LUWStorageTable", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWStorageTable_ValueCompression(), ecorePackage.getEBoolean(), "valueCompression", null, 0, 1, LUWStorageTable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWStorageTable_RowCompression(), ecorePackage.getEBoolean(), "rowCompression", null, 0, 1, LUWStorageTable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWStorageTable_RowCompressionEmpty(), ecorePackage.getEBoolean(), "rowCompressionEmpty", "True", 0, 1, LUWStorageTable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getLUWStorageTable_CompressionMode(), this.getLUWStorageTableCompressionMode(), "compressionMode", null, 0, 1, LUWStorageTable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWStorageTable_PartitionKey(), this.getLUWPartitionKey(), this.getLUWPartitionKey_Table(), "partitionKey", null, 0, 1, LUWStorageTable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWStorageTable_IndexDataTableSpace(), this.getLUWTableSpace(), this.getLUWTableSpace_IndexDataTables(), "indexDataTableSpace", null, 0, 1, LUWStorageTable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWStorageTable_LOBDataTableSpace(), this.getLUWTableSpace(), this.getLUWTableSpace_LOBDataTables(), "LOBDataTableSpace", null, 0, 1, LUWStorageTable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWStorageTable_RegularDataTableSpace(), this.getLUWTableSpace(), this.getLUWTableSpace_RegularDataTables(), "regularDataTableSpace", null, 1, 1, LUWStorageTable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWStorageTable_DataPartitions(), this.getLUWDataPartition(), this.getLUWDataPartition_Table(), "dataPartitions", null, 0, -1, LUWStorageTable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWStorageTable_DataPartitionKey(), this.getLUWDataPartitionKey(), this.getLUWDataPartitionKey_Table(), "dataPartitionKey", null, 0, 1, LUWStorageTable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(luwStorageTableEClass, theSQLSchemaPackage.getList(), "getTableSpaces", 0, 1); //$NON-NLS-1$
+
+		initEClass(relationalRemoteServerEClass, RelationalRemoteServer.class, "RelationalRemoteServer", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getRelationalRemoteServer_Database(), theSQLSchemaPackage.getDatabase(), null, "database", null, 0, 1, RelationalRemoteServer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(relationalRemoteDataSetEClass, RelationalRemoteDataSet.class, "RelationalRemoteDataSet", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getRelationalRemoteDataSet_Table(), theSQLTablesPackage.getBaseTable(), null, "table", null, 0, 1, RelationalRemoteDataSet.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(remoteServerEClass, RemoteServer.class, "RemoteServer", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getRemoteServer_LUWServer(), this.getLUWServer(), this.getLUWServer_RemoteServer(), "LUWServer", null, 1, 1, RemoteServer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(remoteDataSetEClass, RemoteDataSet.class, "RemoteDataSet", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getRemoteDataSet_Nickname(), this.getLUWNickname(), this.getLUWNickname_RemoteDataSet(), "nickname", null, 0, -1, RemoteDataSet.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwIndexEClass, LUWIndex.class, "LUWIndex", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWIndex_PCTFree(), ecorePackage.getEInt(), "PCTFree", "-1", 0, 1, LUWIndex.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getLUWIndex_MinPCTFree(), ecorePackage.getEInt(), "minPCTFree", null, 0, 1, LUWIndex.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWIndex_ReverseScan(), ecorePackage.getEBoolean(), "reverseScan", null, 0, 1, LUWIndex.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWIndex_NotPartitioned(), ecorePackage.getEBoolean(), "notPartitioned", null, 0, 1, LUWIndex.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWIndex_XmlPattern(), ecorePackage.getEString(), "xmlPattern", null, 0, 1, LUWIndex.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWIndex_AsSQLDataType(), theSQLDataTypesPackage.getPredefinedDataType(), null, "asSQLDataType", null, 0, 1, LUWIndex.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWIndex_AsSQLDataTypeHashed(), ecorePackage.getEBoolean(), "asSQLDataTypeHashed", null, 0, 1, LUWIndex.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWIndex_SystemRequired(), ecorePackage.getEBoolean(), "systemRequired", null, 0, 1, LUWIndex.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWIndex_PageSplitType(), this.getLUWIndexPageSplitType(), "pageSplitType", "SYMMETRIC", 0, 1, LUWIndex.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getLUWIndex_Level2PctFree(), ecorePackage.getEInt(), "level2PctFree", "-1", 0, 1, LUWIndex.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getLUWIndex_MinPctUsed(), ecorePackage.getEInt(), "minPctUsed", null, 0, 1, LUWIndex.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWIndex_Compress(), this.getLUWIndexCompressType(), "compress", "NO", 0, 1, LUWIndex.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getLUWIndex_CollectStats(), ecorePackage.getEBoolean(), "collectStats", "true", 0, 1, LUWIndex.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getLUWIndex_SampledStats(), ecorePackage.getEBoolean(), "sampledStats", "true", 0, 1, LUWIndex.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getLUWIndex_DetailedStats(), ecorePackage.getEBoolean(), "detailedStats", "true", 0, 1, LUWIndex.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getLUWIndex_IgnoreInvalidValues(), ecorePackage.getEBoolean(), "ignoreInvalidValues", "true", 0, 1, LUWIndex.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getLUWIndex_ExcludeNullKeys(), ecorePackage.getEBoolean(), "excludeNullKeys", "false", 0, 1, LUWIndex.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEReference(getLUWIndex_Tablespace(), this.getLUWTableSpace(), this.getLUWTableSpace_Indexes(), "tablespace", null, 0, 1, LUWIndex.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwAttributeDefinitionEClass, LUWAttributeDefinition.class, "LUWAttributeDefinition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWAttributeDefinition_LOBLogged(), ecorePackage.getEBoolean(), "LOBLogged", "true", 0, 1, LUWAttributeDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getLUWAttributeDefinition_LOBCompacted(), ecorePackage.getEBoolean(), "LOBCompacted", null, 0, 1, LUWAttributeDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(federatedProcedureEClass, FederatedProcedure.class, "FederatedProcedure", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getFederatedProcedure_RemoteUniqueId(), ecorePackage.getEString(), "remoteUniqueId", null, 0, 1, FederatedProcedure.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getFederatedProcedure_RemoteServer(), ecorePackage.getEString(), "remoteServer", null, 0, 1, FederatedProcedure.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getFederatedProcedure_RemoteSchema(), ecorePackage.getEString(), "remoteSchema", null, 0, 1, FederatedProcedure.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getFederatedProcedure_RemotePackage(), ecorePackage.getEString(), "remotePackage", null, 0, 1, FederatedProcedure.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getFederatedProcedure_RemoteProcedureName(), ecorePackage.getEString(), "remoteProcedureName", null, 0, 1, FederatedProcedure.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getFederatedProcedure_NumberOfParameters(), ecorePackage.getEInt(), "numberOfParameters", null, 0, 1, FederatedProcedure.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getFederatedProcedure_ResultSetsToClient(), ecorePackage.getEString(), "resultSetsToClient", null, 0, 1, FederatedProcedure.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getFederatedProcedure_NumberOfRefCursors(), ecorePackage.getEInt(), "numberOfRefCursors", null, 0, 1, FederatedProcedure.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getFederatedProcedure_AllResultSetsToCaller(), ecorePackage.getEBoolean(), "allResultSetsToCaller", null, 0, 1, FederatedProcedure.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getFederatedProcedure_FederatedProcedure(), this.getFederatedProcedure(), null, "FederatedProcedure", null, 0, -1, FederatedProcedure.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getFederatedProcedure_RemoteProcedure(), theSQLRoutinesPackage.getProcedure(), null, "remoteProcedure", null, 0, -1, FederatedProcedure.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getFederatedProcedure_FederatedParameter(), this.getFederatedParameter(), this.getFederatedParameter_FederatedProcedure(), "federatedParameter", null, 0, -1, FederatedProcedure.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(federatedParameterEClass, FederatedParameter.class, "FederatedParameter", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getFederatedParameter_RemoteCodePage(), ecorePackage.getEInt(), "remoteCodePage", null, 0, 1, FederatedParameter.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getFederatedParameter_RemoteParamTypeID(), ecorePackage.getEInt(), "remoteParamTypeID", null, 0, 1, FederatedParameter.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getFederatedParameter_FederatedProcedure(), this.getFederatedProcedure(), this.getFederatedProcedure_FederatedParameter(), "federatedProcedure", null, 1, 1, FederatedParameter.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getFederatedParameter_RemoteParameter(), theSQLRoutinesPackage.getParameter(), null, "remoteParameter", null, 0, -1, FederatedParameter.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwPartitionExpressionEClass, LUWPartitionExpression.class, "LUWPartitionExpression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWPartitionExpression_NullsLast(), ecorePackage.getEBoolean(), "nullsLast", "true", 0, 1, LUWPartitionExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEReference(getLUWPartitionExpression_Key(), this.getLUWDataPartitionKey(), this.getLUWDataPartitionKey_PartitionExpressions(), "key", null, 1, 1, LUWPartitionExpression.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWPartitionExpression_Column(), theSQLTablesPackage.getColumn(), null, "column", null, 1, 1, LUWPartitionExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWPartitionExpression_PartitionElements(), this.getLUWPartitionElement(), this.getLUWPartitionElement_LUWPartitionExpression(), "partitionElements", null, 1, -1, LUWPartitionExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwPartitionElementEClass, LUWPartitionElement.class, "LUWPartitionElement", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWPartitionElement_Starting(), ecorePackage.getEString(), "starting", null, 0, 1, LUWPartitionElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWPartitionElement_Ending(), ecorePackage.getEString(), "ending", null, 0, 1, LUWPartitionElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWPartitionElement_LUWPartitionExpression(), this.getLUWPartitionExpression(), this.getLUWPartitionExpression_PartitionElements(), "LUWPartitionExpression", null, 1, 1, LUWPartitionElement.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWPartitionElement_Partition(), this.getLUWDataPartition(), this.getLUWDataPartition_PartitionElements(), "partition", null, 1, 1, LUWPartitionElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWPartitionElement_EveryClause(), this.getLUWPartitionEveryClauseElement(), this.getLUWPartitionEveryClauseElement_LUWPartitionElement(), "everyClause", null, 0, 1, LUWPartitionElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(luwPartitionElementEClass, ecorePackage.getEBooleanObject(), "hasEveryClause", 0, 1); //$NON-NLS-1$
+
+		initEClass(luwDataPartitionEClass, LUWDataPartition.class, "LUWDataPartition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWDataPartition_Id(), ecorePackage.getEInt(), "id", null, 0, 1, LUWDataPartition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWDataPartition_LowInclusive(), ecorePackage.getEBoolean(), "lowInclusive", null, 0, 1, LUWDataPartition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWDataPartition_HighInclusive(), ecorePackage.getEBoolean(), "highInclusive", null, 0, 1, LUWDataPartition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWDataPartition_LOBDataTableSpace(), this.getLUWTableSpace(), this.getLUWTableSpace_LOBDataPartition(), "LOBDataTableSpace", null, 0, 1, LUWDataPartition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWDataPartition_RegularDataTableSpace(), this.getLUWTableSpace(), this.getLUWTableSpace_RegularDataPartition(), "regularDataTableSpace", null, 0, 1, LUWDataPartition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWDataPartition_PartitionElements(), this.getLUWPartitionElement(), this.getLUWPartitionElement_Partition(), "partitionElements", null, 1, -1, LUWDataPartition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWDataPartition_Table(), this.getLUWStorageTable(), this.getLUWStorageTable_DataPartitions(), "table", null, 1, 1, LUWDataPartition.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWDataPartition_IndexDataTableSpace(), this.getLUWTableSpace(), this.getLUWTableSpace_IndexDataPartition(), "indexDataTableSpace", null, 0, 1, LUWDataPartition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwDataPartitionKeyEClass, LUWDataPartitionKey.class, "LUWDataPartitionKey", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWDataPartitionKey_PartitionMethod(), this.getDataPartitionMethod(), "partitionMethod", null, 0, 1, LUWDataPartitionKey.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWDataPartitionKey_PartitionExpressions(), this.getLUWPartitionExpression(), this.getLUWPartitionExpression_Key(), "partitionExpressions", null, 1, -1, LUWDataPartitionKey.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWDataPartitionKey_Table(), this.getLUWStorageTable(), this.getLUWStorageTable_DataPartitionKey(), "table", null, 1, 1, LUWDataPartitionKey.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwDatabasePackageEClass, LUWDatabasePackage.class, "LUWDatabasePackage", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWDatabasePackage_Creator(), ecorePackage.getEString(), "creator", null, 0, 1, LUWDatabasePackage.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWDatabasePackage_Binder(), ecorePackage.getEString(), "binder", null, 0, 1, LUWDatabasePackage.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWDatabasePackage_CursorBlock(), this.getCursorBlockType(), "cursorBlock", null, 0, 1, LUWDatabasePackage.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWDatabasePackage_NumberOfSections(), ecorePackage.getEInt(), "numberOfSections", null, 0, 1, LUWDatabasePackage.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWDatabasePackage_OptimizationClass(), ecorePackage.getEInt(), "optimizationClass", null, 0, 1, LUWDatabasePackage.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWDatabasePackage_ExplainSnapshot(), this.getExplainSnaphotType(), "explainSnapshot", null, 0, 1, LUWDatabasePackage.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwModuleEClass, LUWModule.class, "LUWModule", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWModule_Dialect(), theDB2ModelPackage.getSourceDialect(), "dialect", null, 0, 1, LUWModule.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWModule_OwningSchema(), theDB2ModelPackage.getDB2Schema(), theDB2ModelPackage.getDB2Schema_Modules(), "owningSchema", null, 1, 1, LUWModule.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWModule_ModuleObjects(), this.getLUWModuleObject(), this.getLUWModuleObject_Module(), "moduleObjects", null, 0, -1, LUWModule.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwModuleObjectEClass, LUWModuleObject.class, "LUWModuleObject", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWModuleObject_Published(), ecorePackage.getEBoolean(), "published", null, 0, 1, LUWModuleObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWModuleObject_Module(), this.getLUWModule(), this.getLUWModule_ModuleObjects(), "module", null, 1, 1, LUWModuleObject.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwModuleFunctionEClass, LUWModuleFunction.class, "LUWModuleFunction", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWModuleFunction_Implemented(), ecorePackage.getEBoolean(), "implemented", null, 0, 1, LUWModuleFunction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwModuleProcedureEClass, LUWModuleProcedure.class, "LUWModuleProcedure", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWModuleProcedure_Implemented(), ecorePackage.getEBoolean(), "implemented", null, 0, 1, LUWModuleProcedure.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwModuleConditionEClass, LUWModuleCondition.class, "LUWModuleCondition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWModuleCondition_Sqlstate(), ecorePackage.getEString(), "sqlstate", null, 0, 1, LUWModuleCondition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwGlobalVariableEClass, LUWGlobalVariable.class, "LUWGlobalVariable", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWGlobalVariable_DefaultValue(), ecorePackage.getEString(), "defaultValue", null, 0, 1, LUWGlobalVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWGlobalVariable_IsConstant(), ecorePackage.getEBoolean(), "isConstant", null, 0, 1, LUWGlobalVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWGlobalVariable_Schema(), theDB2ModelPackage.getDB2Schema(), theDB2ModelPackage.getDB2Schema_GlobalVariables(), "schema", null, 1, 1, LUWGlobalVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwModuleTypeEClass, LUWModuleType.class, "LUWModuleType", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(luwModuleRowDataTypeEClass, LUWModuleRowDataType.class, "LUWModuleRowDataType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(luwModuleArrayDataTypeEClass, LUWModuleArrayDataType.class, "LUWModuleArrayDataType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(luwModuleDistinctTypeEClass, LUWModuleDistinctType.class, "LUWModuleDistinctType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(luwModuleGlobalVariableEClass, LUWModuleGlobalVariable.class, "LUWModuleGlobalVariable", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(luwArrayDataTypeEClass, LUWArrayDataType.class, "LUWArrayDataType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getLUWArrayDataType_ArrayIndexElementType(), this.getArrayIndexElementType(), this.getArrayIndexElementType_LUWArrayDataType(), "arrayIndexElementType", null, 0, 1, LUWArrayDataType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwRowDataTypeEClass, LUWRowDataType.class, "LUWRowDataType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(plsqlPackageEClass, PLSQLPackage.class, "PLSQLPackage", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getPLSQLPackage_PackageBody(), this.getPLSQLPackageBody(), this.getPLSQLPackageBody_Package(), "packageBody", null, 0, 1, PLSQLPackage.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(plsqlPackageBodyEClass, PLSQLPackageBody.class, "PLSQLPackageBody", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getPLSQLPackageBody_Package(), this.getPLSQLPackage(), this.getPLSQLPackage_PackageBody(), "package", null, 1, 1, PLSQLPackageBody.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwCursorDataTypeEClass, LUWCursorDataType.class, "LUWCursorDataType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getLUWCursorDataType_RowType(), this.getLUWRowDataType(), null, "rowType", null, 0, 1, LUWCursorDataType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwModuleCursorDataTypeEClass, LUWModuleCursorDataType.class, "LUWModuleCursorDataType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(luwBufferPoolSizeExceptionEClass, LUWBufferPoolSizeException.class, "LUWBufferPoolSizeException", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWBufferPoolSizeException_Size(), ecorePackage.getEInt(), "size", null, 0, 1, LUWBufferPoolSizeException.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWBufferPoolSizeException_BufferPool(), this.getLUWBufferPool(), this.getLUWBufferPool_SizeException(), "bufferPool", null, 1, 1, LUWBufferPoolSizeException.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWBufferPoolSizeException_Partitions(), this.getLUWDatabasePartition(), this.getLUWDatabasePartition_SizeException(), "partitions", null, 0, -1, LUWBufferPoolSizeException.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwMemberEClass, LUWMember.class, "LUWMember", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWMember_Type(), this.getLUWMemberType(), "type", null, 0, 1, LUWMember.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWMember_Alert(), ecorePackage.getEString(), "alert", null, 0, 1, LUWMember.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWMember_DbPartitionNum(), ecorePackage.getEInt(), "dbPartitionNum", null, 0, 1, LUWMember.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWMember_LogicalPort(), ecorePackage.getEInt(), "logicalPort", null, 0, 1, LUWMember.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWMember_NetName(), ecorePackage.getEString(), "netName", null, 0, 1, LUWMember.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwSecurityPolicyEClass, LUWSecurityPolicy.class, "LUWSecurityPolicy", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWSecurityPolicy_NotAuthorizedWrite(), this.getLUWSecurityLabelNotAuthorizedWriteAction(), "notAuthorizedWrite", null, 0, 1, LUWSecurityPolicy.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWSecurityPolicy_Components(), this.getLUWSecurityLabelComponent(), this.getLUWSecurityLabelComponent_LUWSecurityPolicy(), "components", null, 0, -1, LUWSecurityPolicy.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWSecurityPolicy_Labels(), this.getLUWSecurityLabel(), this.getLUWSecurityLabel_Policy(), "labels", null, 0, -1, LUWSecurityPolicy.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWSecurityPolicy_Table(), this.getLUWTable(), this.getLUWTable_SecurityPolicy(), "table", null, 1, 1, LUWSecurityPolicy.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwSecurityLabelComponentEClass, LUWSecurityLabelComponent.class, "LUWSecurityLabelComponent", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWSecurityLabelComponent_Type(), this.getLUWSecurityLabelComponentType(), "type", null, 0, 1, LUWSecurityLabelComponent.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWSecurityLabelComponent_LUWSecurityPolicy(), this.getLUWSecurityPolicy(), this.getLUWSecurityPolicy_Components(), "LUWSecurityPolicy", null, 0, -1, LUWSecurityLabelComponent.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWSecurityLabelComponent_Elements(), this.getLUWSecurityLabelComponentElement(), this.getLUWSecurityLabelComponentElement_LUWSecurityLabelComponent(), "elements", null, 0, -1, LUWSecurityLabelComponent.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwSecurityLabelEClass, LUWSecurityLabel.class, "LUWSecurityLabel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWSecurityLabel_SecurityLabel(), ecorePackage.getEString(), "securityLabel", null, 0, 1, LUWSecurityLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWSecurityLabel_Policy(), this.getLUWSecurityPolicy(), this.getLUWSecurityPolicy_Labels(), "policy", null, 1, 1, LUWSecurityLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwSecurityLabelComponentElementEClass, LUWSecurityLabelComponentElement.class, "LUWSecurityLabelComponentElement", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWSecurityLabelComponentElement_Value(), ecorePackage.getEString(), "value", null, 0, 1, LUWSecurityLabelComponentElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWSecurityLabelComponentElement_ParentValue(), ecorePackage.getEString(), "parentValue", null, 0, 1, LUWSecurityLabelComponentElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWSecurityLabelComponentElement_LUWSecurityLabelComponent(), this.getLUWSecurityLabelComponent(), this.getLUWSecurityLabelComponent_Elements(), "LUWSecurityLabelComponent", null, 0, -1, LUWSecurityLabelComponentElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwStorageGroupEClass, LUWStorageGroup.class, "LUWStorageGroup", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWStorageGroup_StoragePaths(), ecorePackage.getEString(), "storagePaths", null, 1, -1, LUWStorageGroup.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWStorageGroup_Overhead(), ecorePackage.getEDouble(), "overhead", null, 0, 1, LUWStorageGroup.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWStorageGroup_DeviceReadRate(), ecorePackage.getEDouble(), "deviceReadRate", null, 0, 1, LUWStorageGroup.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWStorageGroup_DataTag(), ecorePackage.getEString(), "dataTag", null, 0, 1, LUWStorageGroup.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWStorageGroup_Default(), ecorePackage.getEBoolean(), "default", null, 0, 1, LUWStorageGroup.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWStorageGroup_Database(), this.getLUWDatabase(), this.getLUWDatabase_StorageGroups(), "database", null, 1, 1, LUWStorageGroup.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWStorageGroup_TableSpaces(), this.getLUWTableSpace(), this.getLUWTableSpace_StorageGroup(), "tableSpaces", null, 0, -1, LUWStorageGroup.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwTemporaryStorageTableEClass, LUWTemporaryStorageTable.class, "LUWTemporaryStorageTable", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getLUWTemporaryStorageTable_PartitionKey(), this.getLUWPartitionKey(), this.getLUWPartitionKey_TemporaryStorageTable(), "partitionKey", null, 0, 1, LUWTemporaryStorageTable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWTemporaryStorageTable_UserTemporaryTableSpace(), this.getLUWTableSpace(), this.getLUWTableSpace_TemporaryStorageTables(), "userTemporaryTableSpace", null, 0, 1, LUWTemporaryStorageTable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwTemporaryTableEClass, LUWTemporaryTable.class, "LUWTemporaryTable", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getLUWTemporaryTable_Table(), theSQLTablesPackage.getTable(), null, "table", null, 0, 1, LUWTemporaryTable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWTemporaryTable_LogOption(), this.getLUWTemporaryTableLoggingOption(), "logOption", null, 0, 1, LUWTemporaryTable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(arrayIndexElementTypeEClass, ArrayIndexElementType.class, "ArrayIndexElementType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getArrayIndexElementType_LUWArrayDataType(), this.getLUWArrayDataType(), this.getLUWArrayDataType_ArrayIndexElementType(), "LUWArrayDataType", null, 1, 1, ArrayIndexElementType.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(luwPartitionEveryClauseElementEClass, LUWPartitionEveryClauseElement.class, "LUWPartitionEveryClauseElement", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLUWPartitionEveryClauseElement_Value(), ecorePackage.getEDoubleObject(), "value", null, 0, 1, LUWPartitionEveryClauseElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLUWPartitionEveryClauseElement_Duration(), ecorePackage.getEString(), "duration", null, 0, 1, LUWPartitionEveryClauseElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLUWPartitionEveryClauseElement_LUWPartitionElement(), this.getLUWPartitionElement(), this.getLUWPartitionElement_EveryClause(), "LUWPartitionElement", null, 1, 1, LUWPartitionEveryClauseElement.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		// Initialize enums and add enum literals
+		initEEnum(luwContainerTypeEEnum, LUWContainerType.class, "LUWContainerType"); //$NON-NLS-1$
+		addEEnumLiteral(luwContainerTypeEEnum, LUWContainerType.DEVICE_LITERAL);
+		addEEnumLiteral(luwContainerTypeEEnum, LUWContainerType.DIRECTORY_LITERAL);
+		addEEnumLiteral(luwContainerTypeEEnum, LUWContainerType.FILE_LITERAL);
+
+		initEEnum(pageSizeTypeEEnum, PageSizeType.class, "PageSizeType"); //$NON-NLS-1$
+		addEEnumLiteral(pageSizeTypeEEnum, PageSizeType.FOUR_K_LITERAL);
+		addEEnumLiteral(pageSizeTypeEEnum, PageSizeType.EIGHT_K_LITERAL);
+		addEEnumLiteral(pageSizeTypeEEnum, PageSizeType.SIXTEEN_K_LITERAL);
+		addEEnumLiteral(pageSizeTypeEEnum, PageSizeType.THIRTY_TWO_K_LITERAL);
+		addEEnumLiteral(pageSizeTypeEEnum, PageSizeType.FOUR_KB_LITERAL);
+		addEEnumLiteral(pageSizeTypeEEnum, PageSizeType.EIGHT_KB_LITERAL);
+		addEEnumLiteral(pageSizeTypeEEnum, PageSizeType.SIXTEEN_KB_LITERAL);
+		addEEnumLiteral(pageSizeTypeEEnum, PageSizeType.THIRTY_TWO_KB_LITERAL);
+
+		initEEnum(bufferPoolTypeEEnum, BufferPoolType.class, "BufferPoolType"); //$NON-NLS-1$
+		addEEnumLiteral(bufferPoolTypeEEnum, BufferPoolType.IMMEDIATE_LITERAL);
+		addEEnumLiteral(bufferPoolTypeEEnum, BufferPoolType.DEFERRED_LITERAL);
+
+		initEEnum(tableSpaceTypeEEnum, TableSpaceType.class, "TableSpaceType"); //$NON-NLS-1$
+		addEEnumLiteral(tableSpaceTypeEEnum, TableSpaceType.REGULAR_LITERAL);
+		addEEnumLiteral(tableSpaceTypeEEnum, TableSpaceType.LARGE_LITERAL);
+		addEEnumLiteral(tableSpaceTypeEEnum, TableSpaceType.SYSTEM_TEMP_LITERAL);
+		addEEnumLiteral(tableSpaceTypeEEnum, TableSpaceType.USER_TEMP_LITERAL);
+
+		initEEnum(managementTypeEEnum, ManagementType.class, "ManagementType"); //$NON-NLS-1$
+		addEEnumLiteral(managementTypeEEnum, ManagementType.SYSTEM_MANAGED_LITERAL);
+		addEEnumLiteral(managementTypeEEnum, ManagementType.DATABASE_MANAGED_LITERAL);
+		addEEnumLiteral(managementTypeEEnum, ManagementType.AUTOMATIC_STORAGE_LITERAL);
+
+		initEEnum(checkOptionTypeEEnum, CheckOptionType.class, "CheckOptionType"); //$NON-NLS-1$
+		addEEnumLiteral(checkOptionTypeEEnum, CheckOptionType.NONE_LITERAL);
+		addEEnumLiteral(checkOptionTypeEEnum, CheckOptionType.CASCADED_LITERAL);
+		addEEnumLiteral(checkOptionTypeEEnum, CheckOptionType.LOCAL_LITERAL);
+
+		initEEnum(partitionMethodEEnum, PartitionMethod.class, "PartitionMethod"); //$NON-NLS-1$
+		addEEnumLiteral(partitionMethodEEnum, PartitionMethod.HASHING_LITERAL);
+		addEEnumLiteral(partitionMethodEEnum, PartitionMethod.TABLE_REPLICATED_LITERAL);
+
+		initEEnum(maintenanceTypeEEnum, MaintenanceType.class, "MaintenanceType"); //$NON-NLS-1$
+		addEEnumLiteral(maintenanceTypeEEnum, MaintenanceType.SYSTEM_LITERAL);
+		addEEnumLiteral(maintenanceTypeEEnum, MaintenanceType.USER_LITERAL);
+
+		initEEnum(refreshTypeEEnum, RefreshType.class, "RefreshType"); //$NON-NLS-1$
+		addEEnumLiteral(refreshTypeEEnum, RefreshType.DEFERRED_LITERAL);
+		addEEnumLiteral(refreshTypeEEnum, RefreshType.IMMEDIATE_LITERAL);
+
+		initEEnum(wrapperTypeEEnum, WrapperType.class, "WrapperType"); //$NON-NLS-1$
+		addEEnumLiteral(wrapperTypeEEnum, WrapperType.RELATIONAL_LITERAL);
+		addEEnumLiteral(wrapperTypeEEnum, WrapperType.NON_RELATIONAL_LITERAL);
+
+		initEEnum(dataPartitionMethodEEnum, DataPartitionMethod.class, "DataPartitionMethod"); //$NON-NLS-1$
+		addEEnumLiteral(dataPartitionMethodEEnum, DataPartitionMethod.RANGE_LITERAL);
+
+		initEEnum(cursorBlockTypeEEnum, CursorBlockType.class, "CursorBlockType"); //$NON-NLS-1$
+		addEEnumLiteral(cursorBlockTypeEEnum, CursorBlockType.BLOCK_UNAMBIGUOUS_CURSORS_LITERAL);
+		addEEnumLiteral(cursorBlockTypeEEnum, CursorBlockType.BLOCK_ALL_CURSORS_LITERAL);
+		addEEnumLiteral(cursorBlockTypeEEnum, CursorBlockType.NO_BLOCKING_LITERAL);
+
+		initEEnum(explainSnaphotTypeEEnum, ExplainSnaphotType.class, "ExplainSnaphotType"); //$NON-NLS-1$
+		addEEnumLiteral(explainSnaphotTypeEEnum, ExplainSnaphotType.ALL_LITERAL);
+		addEEnumLiteral(explainSnaphotTypeEEnum, ExplainSnaphotType.NO_LITERAL);
+		addEEnumLiteral(explainSnaphotTypeEEnum, ExplainSnaphotType.REOPT_LITERAL);
+		addEEnumLiteral(explainSnaphotTypeEEnum, ExplainSnaphotType.YES_LITERAL);
+
+		initEEnum(fileSystemCachingTypeEEnum, FileSystemCachingType.class, "FileSystemCachingType"); //$NON-NLS-1$
+		addEEnumLiteral(fileSystemCachingTypeEEnum, FileSystemCachingType.NONE_LITERAL);
+		addEEnumLiteral(fileSystemCachingTypeEEnum, FileSystemCachingType.FILE_CACHING_LITERAL);
+		addEEnumLiteral(fileSystemCachingTypeEEnum, FileSystemCachingType.NO_FILE_CACHING_LITERAL);
+
+		initEEnum(luwIndexPageSplitTypeEEnum, LUWIndexPageSplitType.class, "LUWIndexPageSplitType"); //$NON-NLS-1$
+		addEEnumLiteral(luwIndexPageSplitTypeEEnum, LUWIndexPageSplitType.NO_SELECTION_LITERAL);
+		addEEnumLiteral(luwIndexPageSplitTypeEEnum, LUWIndexPageSplitType.SYMMETRIC_LITERAL);
+		addEEnumLiteral(luwIndexPageSplitTypeEEnum, LUWIndexPageSplitType.HIGH_LITERAL);
+		addEEnumLiteral(luwIndexPageSplitTypeEEnum, LUWIndexPageSplitType.LOW_LITERAL);
+
+		initEEnum(luwIndexCompressTypeEEnum, LUWIndexCompressType.class, "LUWIndexCompressType"); //$NON-NLS-1$
+		addEEnumLiteral(luwIndexCompressTypeEEnum, LUWIndexCompressType.NO_SELECTION_LITERAL);
+		addEEnumLiteral(luwIndexCompressTypeEEnum, LUWIndexCompressType.NO_LITERAL);
+		addEEnumLiteral(luwIndexCompressTypeEEnum, LUWIndexCompressType.YES_LITERAL);
+
+		initEEnum(systemTypeEEnum, SystemType.class, "SystemType"); //$NON-NLS-1$
+		addEEnumLiteral(systemTypeEEnum, SystemType.SATA_LITERAL);
+		addEEnumLiteral(systemTypeEEnum, SystemType.SAS_10K_LITERAL);
+		addEEnumLiteral(systemTypeEEnum, SystemType.SAS_15K_LITERAL);
+		addEEnumLiteral(systemTypeEEnum, SystemType.SSD_LITERAL);
+
+		initEEnum(averageTableSizeTypeEEnum, AverageTableSizeType.class, "AverageTableSizeType"); //$NON-NLS-1$
+		addEEnumLiteral(averageTableSizeTypeEEnum, AverageTableSizeType.LESS_THAN_50MB_LITERAL);
+		addEEnumLiteral(averageTableSizeTypeEEnum, AverageTableSizeType.BETWEEN_50MB_AND_500MB_LITERAL);
+		addEEnumLiteral(averageTableSizeTypeEEnum, AverageTableSizeType.BETWEEN_500MB_AND_5GB_LITERAL);
+		addEEnumLiteral(averageTableSizeTypeEEnum, AverageTableSizeType.GREATER_THAN_5GB_LITERAL);
+
+		initEEnum(luwStorageTableCompressionModeEEnum, LUWStorageTableCompressionMode.class, "LUWStorageTableCompressionMode"); //$NON-NLS-1$
+		addEEnumLiteral(luwStorageTableCompressionModeEEnum, LUWStorageTableCompressionMode.NO_SELECTION_LITERAL);
+		addEEnumLiteral(luwStorageTableCompressionModeEEnum, LUWStorageTableCompressionMode.ADAPTIVE_LITERAL);
+		addEEnumLiteral(luwStorageTableCompressionModeEEnum, LUWStorageTableCompressionMode.STATIC_LITERAL);
+
+		initEEnum(luwMemberTypeEEnum, LUWMemberType.class, "LUWMemberType"); //$NON-NLS-1$
+		addEEnumLiteral(luwMemberTypeEEnum, LUWMemberType.MEMBER_LITERAL);
+		addEEnumLiteral(luwMemberTypeEEnum, LUWMemberType.CF_LITERAL);
+
+		initEEnum(memberStateTypeEEnum, MemberStateType.class, "MemberStateType"); //$NON-NLS-1$
+		addEEnumLiteral(memberStateTypeEEnum, MemberStateType.STARTED_LITERAL);
+		addEEnumLiteral(memberStateTypeEEnum, MemberStateType.STOPPED_LITERAL);
+		addEEnumLiteral(memberStateTypeEEnum, MemberStateType.RESTARTING_LITERAL);
+		addEEnumLiteral(memberStateTypeEEnum, MemberStateType.WAITING_FOR_FAILBACK_LITERAL);
+		addEEnumLiteral(memberStateTypeEEnum, MemberStateType.ERROR_LITERAL);
+		addEEnumLiteral(memberStateTypeEEnum, MemberStateType.UNKNOWN_LITERAL);
+		addEEnumLiteral(memberStateTypeEEnum, MemberStateType.BECOMING_PRIMARY_LITERAL);
+		addEEnumLiteral(memberStateTypeEEnum, MemberStateType.PRIMARY_LITERAL);
+		addEEnumLiteral(memberStateTypeEEnum, MemberStateType.CATCHUP_LITERAL);
+		addEEnumLiteral(memberStateTypeEEnum, MemberStateType.PEER_LITERAL);
+
+		initEEnum(luwSecurityLabelComponentTypeEEnum, LUWSecurityLabelComponentType.class, "LUWSecurityLabelComponentType"); //$NON-NLS-1$
+		addEEnumLiteral(luwSecurityLabelComponentTypeEEnum, LUWSecurityLabelComponentType.SET_LITERAL);
+		addEEnumLiteral(luwSecurityLabelComponentTypeEEnum, LUWSecurityLabelComponentType.ARRAY_LITERAL);
+		addEEnumLiteral(luwSecurityLabelComponentTypeEEnum, LUWSecurityLabelComponentType.TREE_LITERAL);
+
+		initEEnum(luwSecurityLabelNotAuthorizedWriteActionEEnum, LUWSecurityLabelNotAuthorizedWriteAction.class, "LUWSecurityLabelNotAuthorizedWriteAction"); //$NON-NLS-1$
+		addEEnumLiteral(luwSecurityLabelNotAuthorizedWriteActionEEnum, LUWSecurityLabelNotAuthorizedWriteAction.OVERRIDE_LITERAL);
+		addEEnumLiteral(luwSecurityLabelNotAuthorizedWriteActionEEnum, LUWSecurityLabelNotAuthorizedWriteAction.RESTRICT_LITERAL);
+
+		initEEnum(luwFederatedDataSourceEEnum, LUWFederatedDataSource.class, "LUWFederatedDataSource"); //$NON-NLS-1$
+		addEEnumLiteral(luwFederatedDataSourceEEnum, LUWFederatedDataSource.DB2_LITERAL);
+		addEEnumLiteral(luwFederatedDataSourceEEnum, LUWFederatedDataSource.INFORMIX_LITERAL);
+		addEEnumLiteral(luwFederatedDataSourceEEnum, LUWFederatedDataSource.ORACLE_LITERAL);
+		addEEnumLiteral(luwFederatedDataSourceEEnum, LUWFederatedDataSource.SQL_SERVER_LITERAL);
+		addEEnumLiteral(luwFederatedDataSourceEEnum, LUWFederatedDataSource.TERADATA_LITERAL);
+		addEEnumLiteral(luwFederatedDataSourceEEnum, LUWFederatedDataSource.SYBASE_LITERAL);
+		addEEnumLiteral(luwFederatedDataSourceEEnum, LUWFederatedDataSource.ODBC_LITERAL);
+		addEEnumLiteral(luwFederatedDataSourceEEnum, LUWFederatedDataSource.JDBC_LITERAL);
+
+		initEEnum(luwTemporaryTableLoggingOptionEEnum, LUWTemporaryTableLoggingOption.class, "LUWTemporaryTableLoggingOption"); //$NON-NLS-1$
+		addEEnumLiteral(luwTemporaryTableLoggingOptionEEnum, LUWTemporaryTableLoggingOption.NOT_LOGGED_DELETE_ROWS_LITERAL);
+		addEEnumLiteral(luwTemporaryTableLoggingOptionEEnum, LUWTemporaryTableLoggingOption.NOT_LOGGED_PRESERVE_ROWS_LITERAL);
+		addEEnumLiteral(luwTemporaryTableLoggingOptionEEnum, LUWTemporaryTableLoggingOption.LOGGED_LITERAL);
+	}
+
+} //LUWPackageImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWPartitionElementImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWPartitionElementImpl.java
new file mode 100644
index 0000000..5f84ccf
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWPartitionElementImpl.java
@@ -0,0 +1,483 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWPartitionElementImpl.java,v 1.6 2008/02/05 02:01:23 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionEveryClauseElement;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionExpression;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Partition Element</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionElementImpl#getStarting <em>Starting</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionElementImpl#getEnding <em>Ending</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionElementImpl#getLUWPartitionExpression <em>LUW Partition Expression</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionElementImpl#getPartition <em>Partition</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionElementImpl#getEveryClause <em>Every Clause</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWPartitionElementImpl extends SQLObjectImpl implements LUWPartitionElement {
+	/**
+	 * The default value of the '{@link #getStarting() <em>Starting</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getStarting()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String STARTING_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getStarting() <em>Starting</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getStarting()
+	 * @generated
+	 * @ordered
+	 */
+	protected String starting = STARTING_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getEnding() <em>Ending</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getEnding()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String ENDING_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getEnding() <em>Ending</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getEnding()
+	 * @generated
+	 * @ordered
+	 */
+	protected String ending = ENDING_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getPartition() <em>Partition</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPartition()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWDataPartition partition;
+
+	/**
+	 * The cached value of the '{@link #getEveryClause() <em>Every Clause</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getEveryClause()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWPartitionEveryClauseElement everyClause;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWPartitionElementImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_PARTITION_ELEMENT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getStarting() {
+		return starting;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStarting(String newStarting) {
+		String oldStarting = starting;
+		starting = newStarting;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_PARTITION_ELEMENT__STARTING, oldStarting, starting));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getEnding() {
+		return ending;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setEnding(String newEnding) {
+		String oldEnding = ending;
+		ending = newEnding;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_PARTITION_ELEMENT__ENDING, oldEnding, ending));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWPartitionExpression getLUWPartitionExpression() {
+		if (eContainerFeatureID() != LUWPackage.LUW_PARTITION_ELEMENT__LUW_PARTITION_EXPRESSION) return null;
+		return (LUWPartitionExpression)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetLUWPartitionExpression(LUWPartitionExpression newLUWPartitionExpression, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newLUWPartitionExpression, LUWPackage.LUW_PARTITION_ELEMENT__LUW_PARTITION_EXPRESSION, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLUWPartitionExpression(LUWPartitionExpression newLUWPartitionExpression) {
+		if (newLUWPartitionExpression != eInternalContainer() || (eContainerFeatureID() != LUWPackage.LUW_PARTITION_ELEMENT__LUW_PARTITION_EXPRESSION && newLUWPartitionExpression != null)) {
+			if (EcoreUtil.isAncestor(this, newLUWPartitionExpression))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newLUWPartitionExpression != null)
+				msgs = ((InternalEObject)newLUWPartitionExpression).eInverseAdd(this, LUWPackage.LUW_PARTITION_EXPRESSION__PARTITION_ELEMENTS, LUWPartitionExpression.class, msgs);
+			msgs = basicSetLUWPartitionExpression(newLUWPartitionExpression, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_PARTITION_ELEMENT__LUW_PARTITION_EXPRESSION, newLUWPartitionExpression, newLUWPartitionExpression));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWDataPartition getPartition() {
+		if (partition != null && partition.eIsProxy()) {
+			InternalEObject oldPartition = (InternalEObject)partition;
+			partition = (LUWDataPartition)eResolveProxy(oldPartition);
+			if (partition != oldPartition) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_PARTITION_ELEMENT__PARTITION, oldPartition, partition));
+			}
+		}
+		return partition;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWDataPartition basicGetPartition() {
+		return partition;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetPartition(LUWDataPartition newPartition, NotificationChain msgs) {
+		LUWDataPartition oldPartition = partition;
+		partition = newPartition;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_PARTITION_ELEMENT__PARTITION, oldPartition, newPartition);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPartition(LUWDataPartition newPartition) {
+		if (newPartition != partition) {
+			NotificationChain msgs = null;
+			if (partition != null)
+				msgs = ((InternalEObject)partition).eInverseRemove(this, LUWPackage.LUW_DATA_PARTITION__PARTITION_ELEMENTS, LUWDataPartition.class, msgs);
+			if (newPartition != null)
+				msgs = ((InternalEObject)newPartition).eInverseAdd(this, LUWPackage.LUW_DATA_PARTITION__PARTITION_ELEMENTS, LUWDataPartition.class, msgs);
+			msgs = basicSetPartition(newPartition, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_PARTITION_ELEMENT__PARTITION, newPartition, newPartition));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWPartitionEveryClauseElement getEveryClause() {
+		return everyClause;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetEveryClause(LUWPartitionEveryClauseElement newEveryClause, NotificationChain msgs) {
+		LUWPartitionEveryClauseElement oldEveryClause = everyClause;
+		everyClause = newEveryClause;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_PARTITION_ELEMENT__EVERY_CLAUSE, oldEveryClause, newEveryClause);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setEveryClause(LUWPartitionEveryClauseElement newEveryClause) {
+		if (newEveryClause != everyClause) {
+			NotificationChain msgs = null;
+			if (everyClause != null)
+				msgs = ((InternalEObject)everyClause).eInverseRemove(this, LUWPackage.LUW_PARTITION_EVERY_CLAUSE_ELEMENT__LUW_PARTITION_ELEMENT, LUWPartitionEveryClauseElement.class, msgs);
+			if (newEveryClause != null)
+				msgs = ((InternalEObject)newEveryClause).eInverseAdd(this, LUWPackage.LUW_PARTITION_EVERY_CLAUSE_ELEMENT__LUW_PARTITION_ELEMENT, LUWPartitionEveryClauseElement.class, msgs);
+			msgs = basicSetEveryClause(newEveryClause, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_PARTITION_ELEMENT__EVERY_CLAUSE, newEveryClause, newEveryClause));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 */
+	public Boolean hasEveryClause() {
+		if ( this.everyClause == null )
+		{
+			return Boolean.FALSE;
+		}
+		
+		return Boolean.TRUE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_ELEMENT__LUW_PARTITION_EXPRESSION:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetLUWPartitionExpression((LUWPartitionExpression)otherEnd, msgs);
+			case LUWPackage.LUW_PARTITION_ELEMENT__PARTITION:
+				if (partition != null)
+					msgs = ((InternalEObject)partition).eInverseRemove(this, LUWPackage.LUW_DATA_PARTITION__PARTITION_ELEMENTS, LUWDataPartition.class, msgs);
+				return basicSetPartition((LUWDataPartition)otherEnd, msgs);
+			case LUWPackage.LUW_PARTITION_ELEMENT__EVERY_CLAUSE:
+				if (everyClause != null)
+					msgs = ((InternalEObject)everyClause).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - LUWPackage.LUW_PARTITION_ELEMENT__EVERY_CLAUSE, null, msgs);
+				return basicSetEveryClause((LUWPartitionEveryClauseElement)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_ELEMENT__LUW_PARTITION_EXPRESSION:
+				return basicSetLUWPartitionExpression(null, msgs);
+			case LUWPackage.LUW_PARTITION_ELEMENT__PARTITION:
+				return basicSetPartition(null, msgs);
+			case LUWPackage.LUW_PARTITION_ELEMENT__EVERY_CLAUSE:
+				return basicSetEveryClause(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case LUWPackage.LUW_PARTITION_ELEMENT__LUW_PARTITION_EXPRESSION:
+				return eInternalContainer().eInverseRemove(this, LUWPackage.LUW_PARTITION_EXPRESSION__PARTITION_ELEMENTS, LUWPartitionExpression.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_ELEMENT__STARTING:
+				return getStarting();
+			case LUWPackage.LUW_PARTITION_ELEMENT__ENDING:
+				return getEnding();
+			case LUWPackage.LUW_PARTITION_ELEMENT__LUW_PARTITION_EXPRESSION:
+				return getLUWPartitionExpression();
+			case LUWPackage.LUW_PARTITION_ELEMENT__PARTITION:
+				if (resolve) return getPartition();
+				return basicGetPartition();
+			case LUWPackage.LUW_PARTITION_ELEMENT__EVERY_CLAUSE:
+				return getEveryClause();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_ELEMENT__STARTING:
+				setStarting((String)newValue);
+				return;
+			case LUWPackage.LUW_PARTITION_ELEMENT__ENDING:
+				setEnding((String)newValue);
+				return;
+			case LUWPackage.LUW_PARTITION_ELEMENT__LUW_PARTITION_EXPRESSION:
+				setLUWPartitionExpression((LUWPartitionExpression)newValue);
+				return;
+			case LUWPackage.LUW_PARTITION_ELEMENT__PARTITION:
+				setPartition((LUWDataPartition)newValue);
+				return;
+			case LUWPackage.LUW_PARTITION_ELEMENT__EVERY_CLAUSE:
+				setEveryClause((LUWPartitionEveryClauseElement)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_ELEMENT__STARTING:
+				setStarting(STARTING_EDEFAULT);
+				return;
+			case LUWPackage.LUW_PARTITION_ELEMENT__ENDING:
+				setEnding(ENDING_EDEFAULT);
+				return;
+			case LUWPackage.LUW_PARTITION_ELEMENT__LUW_PARTITION_EXPRESSION:
+				setLUWPartitionExpression((LUWPartitionExpression)null);
+				return;
+			case LUWPackage.LUW_PARTITION_ELEMENT__PARTITION:
+				setPartition((LUWDataPartition)null);
+				return;
+			case LUWPackage.LUW_PARTITION_ELEMENT__EVERY_CLAUSE:
+				setEveryClause((LUWPartitionEveryClauseElement)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_ELEMENT__STARTING:
+				return STARTING_EDEFAULT == null ? starting != null : !STARTING_EDEFAULT.equals(starting);
+			case LUWPackage.LUW_PARTITION_ELEMENT__ENDING:
+				return ENDING_EDEFAULT == null ? ending != null : !ENDING_EDEFAULT.equals(ending);
+			case LUWPackage.LUW_PARTITION_ELEMENT__LUW_PARTITION_EXPRESSION:
+				return getLUWPartitionExpression() != null;
+			case LUWPackage.LUW_PARTITION_ELEMENT__PARTITION:
+				return partition != null;
+			case LUWPackage.LUW_PARTITION_ELEMENT__EVERY_CLAUSE:
+				return everyClause != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (starting: "); //$NON-NLS-1$
+		result.append(starting);
+		result.append(", ending: "); //$NON-NLS-1$
+		result.append(ending);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWPartitionElementImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWPartitionEveryClauseElementImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWPartitionEveryClauseElementImpl.java
new file mode 100644
index 0000000..c57f6c8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWPartitionEveryClauseElementImpl.java
@@ -0,0 +1,309 @@
+/**
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionEveryClauseElement;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Partition Every Clause Element</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionEveryClauseElementImpl#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionEveryClauseElementImpl#getDuration <em>Duration</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionEveryClauseElementImpl#getLUWPartitionElement <em>LUW Partition Element</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWPartitionEveryClauseElementImpl extends EObjectImpl implements LUWPartitionEveryClauseElement {
+	/**
+	 * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final Double VALUE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected Double value = VALUE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getDuration() <em>Duration</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDuration()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String DURATION_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getDuration() <em>Duration</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDuration()
+	 * @generated
+	 * @ordered
+	 */
+	protected String duration = DURATION_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWPartitionEveryClauseElementImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_PARTITION_EVERY_CLAUSE_ELEMENT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Double getValue() {
+		return value;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setValue(Double newValue) {
+		Double oldValue = value;
+		value = newValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_PARTITION_EVERY_CLAUSE_ELEMENT__VALUE, oldValue, value));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getDuration() {
+		return duration;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDuration(String newDuration) {
+		String oldDuration = duration;
+		duration = newDuration;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_PARTITION_EVERY_CLAUSE_ELEMENT__DURATION, oldDuration, duration));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWPartitionElement getLUWPartitionElement() {
+		if (eContainerFeatureID() != LUWPackage.LUW_PARTITION_EVERY_CLAUSE_ELEMENT__LUW_PARTITION_ELEMENT) return null;
+		return (LUWPartitionElement)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetLUWPartitionElement(LUWPartitionElement newLUWPartitionElement, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newLUWPartitionElement, LUWPackage.LUW_PARTITION_EVERY_CLAUSE_ELEMENT__LUW_PARTITION_ELEMENT, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLUWPartitionElement(LUWPartitionElement newLUWPartitionElement) {
+		if (newLUWPartitionElement != eInternalContainer() || (eContainerFeatureID() != LUWPackage.LUW_PARTITION_EVERY_CLAUSE_ELEMENT__LUW_PARTITION_ELEMENT && newLUWPartitionElement != null)) {
+			if (EcoreUtil.isAncestor(this, newLUWPartitionElement))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newLUWPartitionElement != null)
+				msgs = ((InternalEObject)newLUWPartitionElement).eInverseAdd(this, LUWPackage.LUW_PARTITION_ELEMENT__EVERY_CLAUSE, LUWPartitionElement.class, msgs);
+			msgs = basicSetLUWPartitionElement(newLUWPartitionElement, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_PARTITION_EVERY_CLAUSE_ELEMENT__LUW_PARTITION_ELEMENT, newLUWPartitionElement, newLUWPartitionElement));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_EVERY_CLAUSE_ELEMENT__LUW_PARTITION_ELEMENT:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetLUWPartitionElement((LUWPartitionElement)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_EVERY_CLAUSE_ELEMENT__LUW_PARTITION_ELEMENT:
+				return basicSetLUWPartitionElement(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case LUWPackage.LUW_PARTITION_EVERY_CLAUSE_ELEMENT__LUW_PARTITION_ELEMENT:
+				return eInternalContainer().eInverseRemove(this, LUWPackage.LUW_PARTITION_ELEMENT__EVERY_CLAUSE, LUWPartitionElement.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_EVERY_CLAUSE_ELEMENT__VALUE:
+				return getValue();
+			case LUWPackage.LUW_PARTITION_EVERY_CLAUSE_ELEMENT__DURATION:
+				return getDuration();
+			case LUWPackage.LUW_PARTITION_EVERY_CLAUSE_ELEMENT__LUW_PARTITION_ELEMENT:
+				return getLUWPartitionElement();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_EVERY_CLAUSE_ELEMENT__VALUE:
+				setValue((Double)newValue);
+				return;
+			case LUWPackage.LUW_PARTITION_EVERY_CLAUSE_ELEMENT__DURATION:
+				setDuration((String)newValue);
+				return;
+			case LUWPackage.LUW_PARTITION_EVERY_CLAUSE_ELEMENT__LUW_PARTITION_ELEMENT:
+				setLUWPartitionElement((LUWPartitionElement)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_EVERY_CLAUSE_ELEMENT__VALUE:
+				setValue(VALUE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_PARTITION_EVERY_CLAUSE_ELEMENT__DURATION:
+				setDuration(DURATION_EDEFAULT);
+				return;
+			case LUWPackage.LUW_PARTITION_EVERY_CLAUSE_ELEMENT__LUW_PARTITION_ELEMENT:
+				setLUWPartitionElement((LUWPartitionElement)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_EVERY_CLAUSE_ELEMENT__VALUE:
+				return VALUE_EDEFAULT == null ? value != null : !VALUE_EDEFAULT.equals(value);
+			case LUWPackage.LUW_PARTITION_EVERY_CLAUSE_ELEMENT__DURATION:
+				return DURATION_EDEFAULT == null ? duration != null : !DURATION_EDEFAULT.equals(duration);
+			case LUWPackage.LUW_PARTITION_EVERY_CLAUSE_ELEMENT__LUW_PARTITION_ELEMENT:
+				return getLUWPartitionElement() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (value: "); //$NON-NLS-1$
+		result.append(value);
+		result.append(", duration: "); //$NON-NLS-1$
+		result.append(duration);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWPartitionEveryClauseElementImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWPartitionExpressionImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWPartitionExpressionImpl.java
new file mode 100644
index 0000000..15bd744
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWPartitionExpressionImpl.java
@@ -0,0 +1,362 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWPartitionExpressionImpl.java,v 1.7 2008/02/05 02:01:23 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartitionKey;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionElement;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionExpression;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Partition Expression</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionExpressionImpl#isNullsLast <em>Nulls Last</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionExpressionImpl#getKey <em>Key</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionExpressionImpl#getColumn <em>Column</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionExpressionImpl#getPartitionElements <em>Partition Elements</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWPartitionExpressionImpl extends SQLObjectImpl implements LUWPartitionExpression {
+	/**
+	 * The default value of the '{@link #isNullsLast() <em>Nulls Last</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isNullsLast()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean NULLS_LAST_EDEFAULT = true;
+
+	/**
+	 * The cached value of the '{@link #isNullsLast() <em>Nulls Last</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isNullsLast()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean nullsLast = NULLS_LAST_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getColumn() <em>Column</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getColumn()
+	 * @generated
+	 * @ordered
+	 */
+	protected Column column;
+
+	/**
+	 * The cached value of the '{@link #getPartitionElements() <em>Partition Elements</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPartitionElements()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList partitionElements;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWPartitionExpressionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_PARTITION_EXPRESSION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isNullsLast() {
+		return nullsLast;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setNullsLast(boolean newNullsLast) {
+		boolean oldNullsLast = nullsLast;
+		nullsLast = newNullsLast;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_PARTITION_EXPRESSION__NULLS_LAST, oldNullsLast, nullsLast));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWDataPartitionKey getKey() {
+		if (eContainerFeatureID() != LUWPackage.LUW_PARTITION_EXPRESSION__KEY) return null;
+		return (LUWDataPartitionKey)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetKey(LUWDataPartitionKey newKey, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newKey, LUWPackage.LUW_PARTITION_EXPRESSION__KEY, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setKey(LUWDataPartitionKey newKey) {
+		if (newKey != eInternalContainer() || (eContainerFeatureID() != LUWPackage.LUW_PARTITION_EXPRESSION__KEY && newKey != null)) {
+			if (EcoreUtil.isAncestor(this, newKey))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newKey != null)
+				msgs = ((InternalEObject)newKey).eInverseAdd(this, LUWPackage.LUW_DATA_PARTITION_KEY__PARTITION_EXPRESSIONS, LUWDataPartitionKey.class, msgs);
+			msgs = basicSetKey(newKey, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_PARTITION_EXPRESSION__KEY, newKey, newKey));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Column getColumn() {
+		if (column != null && column.eIsProxy()) {
+			InternalEObject oldColumn = (InternalEObject)column;
+			column = (Column)eResolveProxy(oldColumn);
+			if (column != oldColumn) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_PARTITION_EXPRESSION__COLUMN, oldColumn, column));
+			}
+		}
+		return column;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Column basicGetColumn() {
+		return column;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setColumn(Column newColumn) {
+		Column oldColumn = column;
+		column = newColumn;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_PARTITION_EXPRESSION__COLUMN, oldColumn, column));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getPartitionElements() {
+		if (partitionElements == null) {
+			partitionElements = new EObjectContainmentWithInverseEList(LUWPartitionElement.class, this, LUWPackage.LUW_PARTITION_EXPRESSION__PARTITION_ELEMENTS, LUWPackage.LUW_PARTITION_ELEMENT__LUW_PARTITION_EXPRESSION);
+		}
+		return partitionElements;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_EXPRESSION__KEY:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetKey((LUWDataPartitionKey)otherEnd, msgs);
+			case LUWPackage.LUW_PARTITION_EXPRESSION__PARTITION_ELEMENTS:
+				return ((InternalEList)getPartitionElements()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_EXPRESSION__KEY:
+				return basicSetKey(null, msgs);
+			case LUWPackage.LUW_PARTITION_EXPRESSION__PARTITION_ELEMENTS:
+				return ((InternalEList)getPartitionElements()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case LUWPackage.LUW_PARTITION_EXPRESSION__KEY:
+				return eInternalContainer().eInverseRemove(this, LUWPackage.LUW_DATA_PARTITION_KEY__PARTITION_EXPRESSIONS, LUWDataPartitionKey.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_EXPRESSION__NULLS_LAST:
+				return isNullsLast() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_PARTITION_EXPRESSION__KEY:
+				return getKey();
+			case LUWPackage.LUW_PARTITION_EXPRESSION__COLUMN:
+				if (resolve) return getColumn();
+				return basicGetColumn();
+			case LUWPackage.LUW_PARTITION_EXPRESSION__PARTITION_ELEMENTS:
+				return getPartitionElements();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_EXPRESSION__NULLS_LAST:
+				setNullsLast(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_PARTITION_EXPRESSION__KEY:
+				setKey((LUWDataPartitionKey)newValue);
+				return;
+			case LUWPackage.LUW_PARTITION_EXPRESSION__COLUMN:
+				setColumn((Column)newValue);
+				return;
+			case LUWPackage.LUW_PARTITION_EXPRESSION__PARTITION_ELEMENTS:
+				getPartitionElements().clear();
+				getPartitionElements().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_EXPRESSION__NULLS_LAST:
+				setNullsLast(NULLS_LAST_EDEFAULT);
+				return;
+			case LUWPackage.LUW_PARTITION_EXPRESSION__KEY:
+				setKey((LUWDataPartitionKey)null);
+				return;
+			case LUWPackage.LUW_PARTITION_EXPRESSION__COLUMN:
+				setColumn((Column)null);
+				return;
+			case LUWPackage.LUW_PARTITION_EXPRESSION__PARTITION_ELEMENTS:
+				getPartitionElements().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_EXPRESSION__NULLS_LAST:
+				return nullsLast != NULLS_LAST_EDEFAULT;
+			case LUWPackage.LUW_PARTITION_EXPRESSION__KEY:
+				return getKey() != null;
+			case LUWPackage.LUW_PARTITION_EXPRESSION__COLUMN:
+				return column != null;
+			case LUWPackage.LUW_PARTITION_EXPRESSION__PARTITION_ELEMENTS:
+				return partitionElements != null && !partitionElements.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (nullsLast: "); //$NON-NLS-1$
+		result.append(nullsLast);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWPartitionExpressionImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWPartitionGroupImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWPartitionGroupImpl.java
new file mode 100644
index 0000000..4962f8a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWPartitionGroupImpl.java
@@ -0,0 +1,328 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabasePartition;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Partition Group</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionGroupImpl#getPartitions <em>Partitions</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionGroupImpl#getTableSpaces <em>Table Spaces</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionGroupImpl#getDatabase <em>Database</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionGroupImpl#getBufferPool <em>Buffer Pool</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWPartitionGroupImpl extends SQLObjectImpl implements LUWPartitionGroup {
+	/**
+	 * The cached value of the '{@link #getPartitions() <em>Partitions</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPartitions()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList partitions;
+
+	/**
+	 * The cached value of the '{@link #getTableSpaces() <em>Table Spaces</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTableSpaces()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList tableSpaces;
+
+	/**
+	 * The cached value of the '{@link #getDatabase() <em>Database</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDatabase()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWDatabase database;
+
+	/**
+	 * The cached value of the '{@link #getBufferPool() <em>Buffer Pool</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBufferPool()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList bufferPool;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWPartitionGroupImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_PARTITION_GROUP;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getPartitions() {
+		if (partitions == null) {
+			partitions = new EObjectWithInverseResolvingEList(LUWDatabasePartition.class, this, LUWPackage.LUW_PARTITION_GROUP__PARTITIONS, LUWPackage.LUW_DATABASE_PARTITION__GROUP);
+		}
+		return partitions;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getTableSpaces() {
+		if (tableSpaces == null) {
+			tableSpaces = new EObjectWithInverseResolvingEList(LUWTableSpace.class, this, LUWPackage.LUW_PARTITION_GROUP__TABLE_SPACES, LUWPackage.LUW_TABLE_SPACE__GROUP);
+		}
+		return tableSpaces;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWDatabase getDatabase() {
+		if (database != null && database.eIsProxy()) {
+			InternalEObject oldDatabase = (InternalEObject)database;
+			database = (LUWDatabase)eResolveProxy(oldDatabase);
+			if (database != oldDatabase) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_PARTITION_GROUP__DATABASE, oldDatabase, database));
+			}
+		}
+		return database;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWDatabase basicGetDatabase() {
+		return database;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetDatabase(LUWDatabase newDatabase, NotificationChain msgs) {
+		LUWDatabase oldDatabase = database;
+		database = newDatabase;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_PARTITION_GROUP__DATABASE, oldDatabase, newDatabase);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDatabase(LUWDatabase newDatabase) {
+		if (newDatabase != database) {
+			NotificationChain msgs = null;
+			if (database != null)
+				msgs = ((InternalEObject)database).eInverseRemove(this, LUWPackage.LUW_DATABASE__GROUPS, LUWDatabase.class, msgs);
+			if (newDatabase != null)
+				msgs = ((InternalEObject)newDatabase).eInverseAdd(this, LUWPackage.LUW_DATABASE__GROUPS, LUWDatabase.class, msgs);
+			msgs = basicSetDatabase(newDatabase, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_PARTITION_GROUP__DATABASE, newDatabase, newDatabase));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getBufferPool() {
+		if (bufferPool == null) {
+			bufferPool = new EObjectWithInverseResolvingEList.ManyInverse(LUWBufferPool.class, this, LUWPackage.LUW_PARTITION_GROUP__BUFFER_POOL, LUWPackage.LUW_BUFFER_POOL__PARTITION_GROUP);
+		}
+		return bufferPool;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_GROUP__PARTITIONS:
+				return ((InternalEList)getPartitions()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_PARTITION_GROUP__TABLE_SPACES:
+				return ((InternalEList)getTableSpaces()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_PARTITION_GROUP__DATABASE:
+				if (database != null)
+					msgs = ((InternalEObject)database).eInverseRemove(this, LUWPackage.LUW_DATABASE__GROUPS, LUWDatabase.class, msgs);
+				return basicSetDatabase((LUWDatabase)otherEnd, msgs);
+			case LUWPackage.LUW_PARTITION_GROUP__BUFFER_POOL:
+				return ((InternalEList)getBufferPool()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_GROUP__PARTITIONS:
+				return ((InternalEList)getPartitions()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_PARTITION_GROUP__TABLE_SPACES:
+				return ((InternalEList)getTableSpaces()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_PARTITION_GROUP__DATABASE:
+				return basicSetDatabase(null, msgs);
+			case LUWPackage.LUW_PARTITION_GROUP__BUFFER_POOL:
+				return ((InternalEList)getBufferPool()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_GROUP__PARTITIONS:
+				return getPartitions();
+			case LUWPackage.LUW_PARTITION_GROUP__TABLE_SPACES:
+				return getTableSpaces();
+			case LUWPackage.LUW_PARTITION_GROUP__DATABASE:
+				if (resolve) return getDatabase();
+				return basicGetDatabase();
+			case LUWPackage.LUW_PARTITION_GROUP__BUFFER_POOL:
+				return getBufferPool();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_GROUP__PARTITIONS:
+				getPartitions().clear();
+				getPartitions().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_PARTITION_GROUP__TABLE_SPACES:
+				getTableSpaces().clear();
+				getTableSpaces().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_PARTITION_GROUP__DATABASE:
+				setDatabase((LUWDatabase)newValue);
+				return;
+			case LUWPackage.LUW_PARTITION_GROUP__BUFFER_POOL:
+				getBufferPool().clear();
+				getBufferPool().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_GROUP__PARTITIONS:
+				getPartitions().clear();
+				return;
+			case LUWPackage.LUW_PARTITION_GROUP__TABLE_SPACES:
+				getTableSpaces().clear();
+				return;
+			case LUWPackage.LUW_PARTITION_GROUP__DATABASE:
+				setDatabase((LUWDatabase)null);
+				return;
+			case LUWPackage.LUW_PARTITION_GROUP__BUFFER_POOL:
+				getBufferPool().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_GROUP__PARTITIONS:
+				return partitions != null && !partitions.isEmpty();
+			case LUWPackage.LUW_PARTITION_GROUP__TABLE_SPACES:
+				return tableSpaces != null && !tableSpaces.isEmpty();
+			case LUWPackage.LUW_PARTITION_GROUP__DATABASE:
+				return database != null;
+			case LUWPackage.LUW_PARTITION_GROUP__BUFFER_POOL:
+				return bufferPool != null && !bufferPool.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //LUWPartitionGroupImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWPartitionKeyImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWPartitionKeyImpl.java
new file mode 100644
index 0000000..e414f9c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWPartitionKeyImpl.java
@@ -0,0 +1,358 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryStorageTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.PartitionMethod;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Partition Key</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionKeyImpl#getTemporaryStorageTable <em>Temporary Storage Table</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionKeyImpl#getPartitionMethod <em>Partition Method</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionKeyImpl#getTable <em>Table</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWPartitionKeyImpl#getColumns <em>Columns</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWPartitionKeyImpl extends SQLObjectImpl implements LUWPartitionKey {
+	/**
+	 * The default value of the '{@link #getPartitionMethod() <em>Partition Method</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPartitionMethod()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final PartitionMethod PARTITION_METHOD_EDEFAULT = PartitionMethod.HASHING_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getPartitionMethod() <em>Partition Method</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPartitionMethod()
+	 * @generated
+	 * @ordered
+	 */
+	protected PartitionMethod partitionMethod = PARTITION_METHOD_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getColumns() <em>Columns</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getColumns()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList columns;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWPartitionKeyImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_PARTITION_KEY;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTemporaryStorageTable getTemporaryStorageTable() {
+		if (eContainerFeatureID() != LUWPackage.LUW_PARTITION_KEY__TEMPORARY_STORAGE_TABLE) return null;
+		return (LUWTemporaryStorageTable)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetTemporaryStorageTable(LUWTemporaryStorageTable newTemporaryStorageTable, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newTemporaryStorageTable, LUWPackage.LUW_PARTITION_KEY__TEMPORARY_STORAGE_TABLE, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTemporaryStorageTable(LUWTemporaryStorageTable newTemporaryStorageTable) {
+		if (newTemporaryStorageTable != eInternalContainer() || (eContainerFeatureID() != LUWPackage.LUW_PARTITION_KEY__TEMPORARY_STORAGE_TABLE && newTemporaryStorageTable != null)) {
+			if (EcoreUtil.isAncestor(this, newTemporaryStorageTable))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newTemporaryStorageTable != null)
+				msgs = ((InternalEObject)newTemporaryStorageTable).eInverseAdd(this, LUWPackage.LUW_TEMPORARY_STORAGE_TABLE__PARTITION_KEY, LUWTemporaryStorageTable.class, msgs);
+			msgs = basicSetTemporaryStorageTable(newTemporaryStorageTable, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_PARTITION_KEY__TEMPORARY_STORAGE_TABLE, newTemporaryStorageTable, newTemporaryStorageTable));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PartitionMethod getPartitionMethod() {
+		return partitionMethod;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPartitionMethod(PartitionMethod newPartitionMethod) {
+		PartitionMethod oldPartitionMethod = partitionMethod;
+		partitionMethod = newPartitionMethod == null ? PARTITION_METHOD_EDEFAULT : newPartitionMethod;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_PARTITION_KEY__PARTITION_METHOD, oldPartitionMethod, partitionMethod));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWStorageTable getTable() {
+		if (eContainerFeatureID() != LUWPackage.LUW_PARTITION_KEY__TABLE) return null;
+		return (LUWStorageTable)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetTable(LUWStorageTable newTable, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newTable, LUWPackage.LUW_PARTITION_KEY__TABLE, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTable(LUWStorageTable newTable) {
+		if (newTable != eInternalContainer() || (eContainerFeatureID() != LUWPackage.LUW_PARTITION_KEY__TABLE && newTable != null)) {
+			if (EcoreUtil.isAncestor(this, newTable))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newTable != null)
+				msgs = ((InternalEObject)newTable).eInverseAdd(this, LUWPackage.LUW_STORAGE_TABLE__PARTITION_KEY, LUWStorageTable.class, msgs);
+			msgs = basicSetTable(newTable, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_PARTITION_KEY__TABLE, newTable, newTable));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getColumns() {
+		if (columns == null) {
+			columns = new EObjectResolvingEList(Column.class, this, LUWPackage.LUW_PARTITION_KEY__COLUMNS);
+		}
+		return columns;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_KEY__TEMPORARY_STORAGE_TABLE:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetTemporaryStorageTable((LUWTemporaryStorageTable)otherEnd, msgs);
+			case LUWPackage.LUW_PARTITION_KEY__TABLE:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetTable((LUWStorageTable)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_KEY__TEMPORARY_STORAGE_TABLE:
+				return basicSetTemporaryStorageTable(null, msgs);
+			case LUWPackage.LUW_PARTITION_KEY__TABLE:
+				return basicSetTable(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case LUWPackage.LUW_PARTITION_KEY__TEMPORARY_STORAGE_TABLE:
+				return eInternalContainer().eInverseRemove(this, LUWPackage.LUW_TEMPORARY_STORAGE_TABLE__PARTITION_KEY, LUWTemporaryStorageTable.class, msgs);
+			case LUWPackage.LUW_PARTITION_KEY__TABLE:
+				return eInternalContainer().eInverseRemove(this, LUWPackage.LUW_STORAGE_TABLE__PARTITION_KEY, LUWStorageTable.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_KEY__TEMPORARY_STORAGE_TABLE:
+				return getTemporaryStorageTable();
+			case LUWPackage.LUW_PARTITION_KEY__PARTITION_METHOD:
+				return getPartitionMethod();
+			case LUWPackage.LUW_PARTITION_KEY__TABLE:
+				return getTable();
+			case LUWPackage.LUW_PARTITION_KEY__COLUMNS:
+				return getColumns();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_KEY__TEMPORARY_STORAGE_TABLE:
+				setTemporaryStorageTable((LUWTemporaryStorageTable)newValue);
+				return;
+			case LUWPackage.LUW_PARTITION_KEY__PARTITION_METHOD:
+				setPartitionMethod((PartitionMethod)newValue);
+				return;
+			case LUWPackage.LUW_PARTITION_KEY__TABLE:
+				setTable((LUWStorageTable)newValue);
+				return;
+			case LUWPackage.LUW_PARTITION_KEY__COLUMNS:
+				getColumns().clear();
+				getColumns().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_KEY__TEMPORARY_STORAGE_TABLE:
+				setTemporaryStorageTable((LUWTemporaryStorageTable)null);
+				return;
+			case LUWPackage.LUW_PARTITION_KEY__PARTITION_METHOD:
+				setPartitionMethod(PARTITION_METHOD_EDEFAULT);
+				return;
+			case LUWPackage.LUW_PARTITION_KEY__TABLE:
+				setTable((LUWStorageTable)null);
+				return;
+			case LUWPackage.LUW_PARTITION_KEY__COLUMNS:
+				getColumns().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_PARTITION_KEY__TEMPORARY_STORAGE_TABLE:
+				return getTemporaryStorageTable() != null;
+			case LUWPackage.LUW_PARTITION_KEY__PARTITION_METHOD:
+				return partitionMethod != PARTITION_METHOD_EDEFAULT;
+			case LUWPackage.LUW_PARTITION_KEY__TABLE:
+				return getTable() != null;
+			case LUWPackage.LUW_PARTITION_KEY__COLUMNS:
+				return columns != null && !columns.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (partitionMethod: "); //$NON-NLS-1$
+		result.append(partitionMethod);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWPartitionKeyImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWRelationalNicknameImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWRelationalNicknameImpl.java
new file mode 100644
index 0000000..f13eb79
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWRelationalNicknameImpl.java
@@ -0,0 +1,95 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalNickname;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Relational Nickname</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRelationalNicknameImpl#getRelServer <em>Rel Server</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class LUWRelationalNicknameImpl extends LUWNicknameImpl implements LUWRelationalNickname {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWRelationalNicknameImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_RELATIONAL_NICKNAME;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWRelationalServer getRelServer() {
+		LUWRelationalServer relServer = basicGetRelServer();
+		return relServer != null && relServer.eIsProxy() ? (LUWRelationalServer)eResolveProxy((InternalEObject)relServer) : relServer;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public LUWRelationalServer basicGetRelServer() {
+		return (LUWRelationalServer) server;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_RELATIONAL_NICKNAME__REL_SERVER:
+				if (resolve) return getRelServer();
+				return basicGetRelServer();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_RELATIONAL_NICKNAME__REL_SERVER:
+				return basicGetRelServer() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //LUWRelationalNicknameImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWRelationalServerImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWRelationalServerImpl.java
new file mode 100644
index 0000000..51dd303
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWRelationalServerImpl.java
@@ -0,0 +1,777 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalWrapper;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Relational Server</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRelationalServerImpl#getCpuRatio <em>Cpu Ratio</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRelationalServerImpl#getIoRatio <em>Io Ratio</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRelationalServerImpl#getCommRate <em>Comm Rate</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRelationalServerImpl#isFoldId <em>Fold Id</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRelationalServerImpl#isFoldPW <em>Fold PW</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRelationalServerImpl#isCollatingSequence <em>Collating Sequence</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRelationalServerImpl#isPushdown <em>Pushdown</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRelationalServerImpl#getNode <em>Node</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRelationalServerImpl#getDbName <em>Db Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRelationalServerImpl#isIudAppSvptEnforce <em>Iud App Svpt Enforce</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRelationalServerImpl#getPassword <em>Password</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRelationalServerImpl#getRelNicknames <em>Rel Nicknames</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRelationalServerImpl#getRelWrapper <em>Rel Wrapper</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class LUWRelationalServerImpl extends LUWServerImpl implements LUWRelationalServer {
+	/**
+	 * The default value of the '{@link #getCpuRatio() <em>Cpu Ratio</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCpuRatio()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long CPU_RATIO_EDEFAULT = 0L;
+
+	/**
+	 * The cached value of the '{@link #getCpuRatio() <em>Cpu Ratio</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCpuRatio()
+	 * @generated
+	 * @ordered
+	 */
+	protected long cpuRatio = CPU_RATIO_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getIoRatio() <em>Io Ratio</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIoRatio()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long IO_RATIO_EDEFAULT = 0L;
+
+	/**
+	 * The cached value of the '{@link #getIoRatio() <em>Io Ratio</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIoRatio()
+	 * @generated
+	 * @ordered
+	 */
+	protected long ioRatio = IO_RATIO_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getCommRate() <em>Comm Rate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCommRate()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long COMM_RATE_EDEFAULT = 0L;
+
+	/**
+	 * The cached value of the '{@link #getCommRate() <em>Comm Rate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCommRate()
+	 * @generated
+	 * @ordered
+	 */
+	protected long commRate = COMM_RATE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isFoldId() <em>Fold Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isFoldId()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean FOLD_ID_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isFoldId() <em>Fold Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isFoldId()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean foldId = FOLD_ID_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isFoldPW() <em>Fold PW</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isFoldPW()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean FOLD_PW_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isFoldPW() <em>Fold PW</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isFoldPW()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean foldPW = FOLD_PW_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isCollatingSequence() <em>Collating Sequence</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isCollatingSequence()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean COLLATING_SEQUENCE_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isCollatingSequence() <em>Collating Sequence</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isCollatingSequence()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean collatingSequence = COLLATING_SEQUENCE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isPushdown() <em>Pushdown</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isPushdown()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean PUSHDOWN_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isPushdown() <em>Pushdown</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isPushdown()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean pushdown = PUSHDOWN_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getNode() <em>Node</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNode()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String NODE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getNode() <em>Node</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNode()
+	 * @generated
+	 * @ordered
+	 */
+	protected String node = NODE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getDbName() <em>Db Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDbName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String DB_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getDbName() <em>Db Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDbName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String dbName = DB_NAME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isIudAppSvptEnforce() <em>Iud App Svpt Enforce</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIudAppSvptEnforce()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean IUD_APP_SVPT_ENFORCE_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isIudAppSvptEnforce() <em>Iud App Svpt Enforce</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isIudAppSvptEnforce()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean iudAppSvptEnforce = IUD_APP_SVPT_ENFORCE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getPassword() <em>Password</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPassword()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String PASSWORD_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getPassword() <em>Password</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPassword()
+	 * @generated
+	 * @ordered
+	 */
+	protected String password = PASSWORD_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWRelationalServerImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_RELATIONAL_SERVER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public long getCpuRatio() {
+		return cpuRatio;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCpuRatio(long newCpuRatio) {
+		long oldCpuRatio = cpuRatio;
+		cpuRatio = newCpuRatio;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_RELATIONAL_SERVER__CPU_RATIO, oldCpuRatio, cpuRatio));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public long getIoRatio() {
+		return ioRatio;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIoRatio(long newIoRatio) {
+		long oldIoRatio = ioRatio;
+		ioRatio = newIoRatio;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_RELATIONAL_SERVER__IO_RATIO, oldIoRatio, ioRatio));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public long getCommRate() {
+		return commRate;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCommRate(long newCommRate) {
+		long oldCommRate = commRate;
+		commRate = newCommRate;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_RELATIONAL_SERVER__COMM_RATE, oldCommRate, commRate));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isFoldId() {
+		return foldId;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFoldId(boolean newFoldId) {
+		boolean oldFoldId = foldId;
+		foldId = newFoldId;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_RELATIONAL_SERVER__FOLD_ID, oldFoldId, foldId));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isFoldPW() {
+		return foldPW;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFoldPW(boolean newFoldPW) {
+		boolean oldFoldPW = foldPW;
+		foldPW = newFoldPW;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_RELATIONAL_SERVER__FOLD_PW, oldFoldPW, foldPW));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isCollatingSequence() {
+		return collatingSequence;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCollatingSequence(boolean newCollatingSequence) {
+		boolean oldCollatingSequence = collatingSequence;
+		collatingSequence = newCollatingSequence;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_RELATIONAL_SERVER__COLLATING_SEQUENCE, oldCollatingSequence, collatingSequence));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isPushdown() {
+		return pushdown;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPushdown(boolean newPushdown) {
+		boolean oldPushdown = pushdown;
+		pushdown = newPushdown;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_RELATIONAL_SERVER__PUSHDOWN, oldPushdown, pushdown));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getNode() {
+		return node;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setNode(String newNode) {
+		String oldNode = node;
+		node = newNode;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_RELATIONAL_SERVER__NODE, oldNode, node));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getDbName() {
+		return dbName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDbName(String newDbName) {
+		String oldDbName = dbName;
+		dbName = newDbName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_RELATIONAL_SERVER__DB_NAME, oldDbName, dbName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isIudAppSvptEnforce() {
+		return iudAppSvptEnforce;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIudAppSvptEnforce(boolean newIudAppSvptEnforce) {
+		boolean oldIudAppSvptEnforce = iudAppSvptEnforce;
+		iudAppSvptEnforce = newIudAppSvptEnforce;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_RELATIONAL_SERVER__IUD_APP_SVPT_ENFORCE, oldIudAppSvptEnforce, iudAppSvptEnforce));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getPassword() {
+		return password;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPassword(String newPassword) {
+		String oldPassword = password;
+		password = newPassword;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_RELATIONAL_SERVER__PASSWORD, oldPassword, password));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWRelationalWrapper getRelWrapper() {
+		LUWRelationalWrapper relWrapper = basicGetRelWrapper();
+		return relWrapper != null && relWrapper.eIsProxy() ? (LUWRelationalWrapper)eResolveProxy((InternalEObject)relWrapper) : relWrapper;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public LUWRelationalWrapper basicGetRelWrapper() {
+		return (LUWRelationalWrapper) wrapper;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public EList getFunctionMappings() {
+		EList allFunctionMappings = getLUWDatabase().getFunctionMappings();
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getTypeMappings() {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getReverseTypeMappings() {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_RELATIONAL_SERVER__CPU_RATIO:
+				return new Long(getCpuRatio());
+			case LUWPackage.LUW_RELATIONAL_SERVER__IO_RATIO:
+				return new Long(getIoRatio());
+			case LUWPackage.LUW_RELATIONAL_SERVER__COMM_RATE:
+				return new Long(getCommRate());
+			case LUWPackage.LUW_RELATIONAL_SERVER__FOLD_ID:
+				return isFoldId() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_RELATIONAL_SERVER__FOLD_PW:
+				return isFoldPW() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_RELATIONAL_SERVER__COLLATING_SEQUENCE:
+				return isCollatingSequence() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_RELATIONAL_SERVER__PUSHDOWN:
+				return isPushdown() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_RELATIONAL_SERVER__NODE:
+				return getNode();
+			case LUWPackage.LUW_RELATIONAL_SERVER__DB_NAME:
+				return getDbName();
+			case LUWPackage.LUW_RELATIONAL_SERVER__IUD_APP_SVPT_ENFORCE:
+				return isIudAppSvptEnforce() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_RELATIONAL_SERVER__PASSWORD:
+				return getPassword();
+			case LUWPackage.LUW_RELATIONAL_SERVER__REL_NICKNAMES:
+				return getRelNicknames();
+			case LUWPackage.LUW_RELATIONAL_SERVER__REL_WRAPPER:
+				if (resolve) return getRelWrapper();
+				return basicGetRelWrapper();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_RELATIONAL_SERVER__CPU_RATIO:
+				setCpuRatio(((Long)newValue).longValue());
+				return;
+			case LUWPackage.LUW_RELATIONAL_SERVER__IO_RATIO:
+				setIoRatio(((Long)newValue).longValue());
+				return;
+			case LUWPackage.LUW_RELATIONAL_SERVER__COMM_RATE:
+				setCommRate(((Long)newValue).longValue());
+				return;
+			case LUWPackage.LUW_RELATIONAL_SERVER__FOLD_ID:
+				setFoldId(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_RELATIONAL_SERVER__FOLD_PW:
+				setFoldPW(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_RELATIONAL_SERVER__COLLATING_SEQUENCE:
+				setCollatingSequence(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_RELATIONAL_SERVER__PUSHDOWN:
+				setPushdown(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_RELATIONAL_SERVER__NODE:
+				setNode((String)newValue);
+				return;
+			case LUWPackage.LUW_RELATIONAL_SERVER__DB_NAME:
+				setDbName((String)newValue);
+				return;
+			case LUWPackage.LUW_RELATIONAL_SERVER__IUD_APP_SVPT_ENFORCE:
+				setIudAppSvptEnforce(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_RELATIONAL_SERVER__PASSWORD:
+				setPassword((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_RELATIONAL_SERVER__CPU_RATIO:
+				setCpuRatio(CPU_RATIO_EDEFAULT);
+				return;
+			case LUWPackage.LUW_RELATIONAL_SERVER__IO_RATIO:
+				setIoRatio(IO_RATIO_EDEFAULT);
+				return;
+			case LUWPackage.LUW_RELATIONAL_SERVER__COMM_RATE:
+				setCommRate(COMM_RATE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_RELATIONAL_SERVER__FOLD_ID:
+				setFoldId(FOLD_ID_EDEFAULT);
+				return;
+			case LUWPackage.LUW_RELATIONAL_SERVER__FOLD_PW:
+				setFoldPW(FOLD_PW_EDEFAULT);
+				return;
+			case LUWPackage.LUW_RELATIONAL_SERVER__COLLATING_SEQUENCE:
+				setCollatingSequence(COLLATING_SEQUENCE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_RELATIONAL_SERVER__PUSHDOWN:
+				setPushdown(PUSHDOWN_EDEFAULT);
+				return;
+			case LUWPackage.LUW_RELATIONAL_SERVER__NODE:
+				setNode(NODE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_RELATIONAL_SERVER__DB_NAME:
+				setDbName(DB_NAME_EDEFAULT);
+				return;
+			case LUWPackage.LUW_RELATIONAL_SERVER__IUD_APP_SVPT_ENFORCE:
+				setIudAppSvptEnforce(IUD_APP_SVPT_ENFORCE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_RELATIONAL_SERVER__PASSWORD:
+				setPassword(PASSWORD_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_RELATIONAL_SERVER__CPU_RATIO:
+				return cpuRatio != CPU_RATIO_EDEFAULT;
+			case LUWPackage.LUW_RELATIONAL_SERVER__IO_RATIO:
+				return ioRatio != IO_RATIO_EDEFAULT;
+			case LUWPackage.LUW_RELATIONAL_SERVER__COMM_RATE:
+				return commRate != COMM_RATE_EDEFAULT;
+			case LUWPackage.LUW_RELATIONAL_SERVER__FOLD_ID:
+				return foldId != FOLD_ID_EDEFAULT;
+			case LUWPackage.LUW_RELATIONAL_SERVER__FOLD_PW:
+				return foldPW != FOLD_PW_EDEFAULT;
+			case LUWPackage.LUW_RELATIONAL_SERVER__COLLATING_SEQUENCE:
+				return collatingSequence != COLLATING_SEQUENCE_EDEFAULT;
+			case LUWPackage.LUW_RELATIONAL_SERVER__PUSHDOWN:
+				return pushdown != PUSHDOWN_EDEFAULT;
+			case LUWPackage.LUW_RELATIONAL_SERVER__NODE:
+				return NODE_EDEFAULT == null ? node != null : !NODE_EDEFAULT.equals(node);
+			case LUWPackage.LUW_RELATIONAL_SERVER__DB_NAME:
+				return DB_NAME_EDEFAULT == null ? dbName != null : !DB_NAME_EDEFAULT.equals(dbName);
+			case LUWPackage.LUW_RELATIONAL_SERVER__IUD_APP_SVPT_ENFORCE:
+				return iudAppSvptEnforce != IUD_APP_SVPT_ENFORCE_EDEFAULT;
+			case LUWPackage.LUW_RELATIONAL_SERVER__PASSWORD:
+				return PASSWORD_EDEFAULT == null ? password != null : !PASSWORD_EDEFAULT.equals(password);
+			case LUWPackage.LUW_RELATIONAL_SERVER__REL_NICKNAMES:
+				return !getRelNicknames().isEmpty();
+			case LUWPackage.LUW_RELATIONAL_SERVER__REL_WRAPPER:
+				return basicGetRelWrapper() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public EList getRelNicknames() {
+		// This method should always be overridden by a subclass to ensure
+		// that a correctly-typed EList is created
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (cpuRatio: "); //$NON-NLS-1$
+		result.append(cpuRatio);
+		result.append(", ioRatio: "); //$NON-NLS-1$
+		result.append(ioRatio);
+		result.append(", commRate: "); //$NON-NLS-1$
+		result.append(commRate);
+		result.append(", foldId: "); //$NON-NLS-1$
+		result.append(foldId);
+		result.append(", foldPW: "); //$NON-NLS-1$
+		result.append(foldPW);
+		result.append(", collatingSequence: "); //$NON-NLS-1$
+		result.append(collatingSequence);
+		result.append(", pushdown: "); //$NON-NLS-1$
+		result.append(pushdown);
+		result.append(", node: "); //$NON-NLS-1$
+		result.append(node);
+		result.append(", dbName: "); //$NON-NLS-1$
+		result.append(dbName);
+		result.append(", iudAppSvptEnforce: "); //$NON-NLS-1$
+		result.append(iudAppSvptEnforce);
+		result.append(", password: "); //$NON-NLS-1$
+		result.append(password);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWRelationalServerImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWRelationalWrapperImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWRelationalWrapperImpl.java
new file mode 100644
index 0000000..6591c25
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWRelationalWrapperImpl.java
@@ -0,0 +1,85 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRelationalWrapper;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Relational Wrapper</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRelationalWrapperImpl#getRelServers <em>Rel Servers</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class LUWRelationalWrapperImpl extends LUWWrapperImpl implements LUWRelationalWrapper {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWRelationalWrapperImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_RELATIONAL_WRAPPER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public EList getRelServers() {
+		// This method should always be overridden by a subclass to ensure
+		// that a correctly-typed EList is created.
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_RELATIONAL_WRAPPER__REL_SERVERS:
+				return getRelServers();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_RELATIONAL_WRAPPER__REL_SERVERS:
+				return !getRelServers().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //LUWRelationalWrapperImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWRowDataTypeImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWRowDataTypeImpl.java
new file mode 100644
index 0000000..bd329bd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWRowDataTypeImpl.java
@@ -0,0 +1,193 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: LUWRowDataTypeImpl.java,v 1.1 2009/02/16 19:01:34 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWRowDataType;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.modelbase.sql.datatypes.ConstructedDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.Field;
+import org.eclipse.datatools.modelbase.sql.datatypes.RowDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataTypesPackage;
+
+import org.eclipse.datatools.modelbase.sql.datatypes.impl.UserDefinedTypeImpl;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Row Data Type</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWRowDataTypeImpl#getFields <em>Fields</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWRowDataTypeImpl extends UserDefinedTypeImpl implements LUWRowDataType {
+	/**
+	 * The cached value of the '{@link #getFields() <em>Fields</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFields()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList fields;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWRowDataTypeImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_ROW_DATA_TYPE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getFields() {
+		if (fields == null) {
+			fields = new EObjectContainmentEList(Field.class, this, LUWPackage.LUW_ROW_DATA_TYPE__FIELDS);
+		}
+		return fields;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_ROW_DATA_TYPE__FIELDS:
+				return ((InternalEList)getFields()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_ROW_DATA_TYPE__FIELDS:
+				return getFields();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_ROW_DATA_TYPE__FIELDS:
+				getFields().clear();
+				getFields().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_ROW_DATA_TYPE__FIELDS:
+				getFields().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_ROW_DATA_TYPE__FIELDS:
+				return fields != null && !fields.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class baseClass) {
+		if (baseClass == ConstructedDataType.class) {
+			switch (derivedFeatureID) {
+				default: return -1;
+			}
+		}
+		if (baseClass == RowDataType.class) {
+			switch (derivedFeatureID) {
+				case LUWPackage.LUW_ROW_DATA_TYPE__FIELDS: return SQLDataTypesPackage.ROW_DATA_TYPE__FIELDS;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class baseClass) {
+		if (baseClass == ConstructedDataType.class) {
+			switch (baseFeatureID) {
+				default: return -1;
+			}
+		}
+		if (baseClass == RowDataType.class) {
+			switch (baseFeatureID) {
+				case SQLDataTypesPackage.ROW_DATA_TYPE__FIELDS: return LUWPackage.LUW_ROW_DATA_TYPE__FIELDS;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+} //LUWRowDataTypeImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWSecurityLabelComponentElementImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWSecurityLabelComponentElementImpl.java
new file mode 100644
index 0000000..c7abc3f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWSecurityLabelComponentElementImpl.java
@@ -0,0 +1,283 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponent;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentElement;
+
+import java.util.Collection;
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Security Label Component Element</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWSecurityLabelComponentElementImpl#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWSecurityLabelComponentElementImpl#getParentValue <em>Parent Value</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWSecurityLabelComponentElementImpl#getLUWSecurityLabelComponent <em>LUW Security Label Component</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWSecurityLabelComponentElementImpl extends SQLObjectImpl implements LUWSecurityLabelComponentElement {
+	/**
+	 * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String VALUE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected String value = VALUE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getParentValue() <em>Parent Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getParentValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String PARENT_VALUE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getParentValue() <em>Parent Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getParentValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected String parentValue = PARENT_VALUE_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getLUWSecurityLabelComponent() <em>LUW Security Label Component</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLUWSecurityLabelComponent()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList luwSecurityLabelComponent;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWSecurityLabelComponentElementImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_SECURITY_LABEL_COMPONENT_ELEMENT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getValue() {
+		return value;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setValue(String newValue) {
+		String oldValue = value;
+		value = newValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_SECURITY_LABEL_COMPONENT_ELEMENT__VALUE, oldValue, value));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getParentValue() {
+		return parentValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParentValue(String newParentValue) {
+		String oldParentValue = parentValue;
+		parentValue = newParentValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_SECURITY_LABEL_COMPONENT_ELEMENT__PARENT_VALUE, oldParentValue, parentValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getLUWSecurityLabelComponent() {
+		if (luwSecurityLabelComponent == null) {
+			luwSecurityLabelComponent = new EObjectWithInverseResolvingEList.ManyInverse(LUWSecurityLabelComponent.class, this, LUWPackage.LUW_SECURITY_LABEL_COMPONENT_ELEMENT__LUW_SECURITY_LABEL_COMPONENT, LUWPackage.LUW_SECURITY_LABEL_COMPONENT__ELEMENTS);
+		}
+		return luwSecurityLabelComponent;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT_ELEMENT__LUW_SECURITY_LABEL_COMPONENT:
+				return ((InternalEList)getLUWSecurityLabelComponent()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT_ELEMENT__LUW_SECURITY_LABEL_COMPONENT:
+				return ((InternalEList)getLUWSecurityLabelComponent()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT_ELEMENT__VALUE:
+				return getValue();
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT_ELEMENT__PARENT_VALUE:
+				return getParentValue();
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT_ELEMENT__LUW_SECURITY_LABEL_COMPONENT:
+				return getLUWSecurityLabelComponent();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT_ELEMENT__VALUE:
+				setValue((String)newValue);
+				return;
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT_ELEMENT__PARENT_VALUE:
+				setParentValue((String)newValue);
+				return;
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT_ELEMENT__LUW_SECURITY_LABEL_COMPONENT:
+				getLUWSecurityLabelComponent().clear();
+				getLUWSecurityLabelComponent().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT_ELEMENT__VALUE:
+				setValue(VALUE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT_ELEMENT__PARENT_VALUE:
+				setParentValue(PARENT_VALUE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT_ELEMENT__LUW_SECURITY_LABEL_COMPONENT:
+				getLUWSecurityLabelComponent().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT_ELEMENT__VALUE:
+				return VALUE_EDEFAULT == null ? value != null : !VALUE_EDEFAULT.equals(value);
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT_ELEMENT__PARENT_VALUE:
+				return PARENT_VALUE_EDEFAULT == null ? parentValue != null : !PARENT_VALUE_EDEFAULT.equals(parentValue);
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT_ELEMENT__LUW_SECURITY_LABEL_COMPONENT:
+				return luwSecurityLabelComponent != null && !luwSecurityLabelComponent.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (value: "); //$NON-NLS-1$
+		result.append(value);
+		result.append(", parentValue: "); //$NON-NLS-1$
+		result.append(parentValue);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWSecurityLabelComponentElementImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWSecurityLabelComponentImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWSecurityLabelComponentImpl.java
new file mode 100644
index 0000000..277fa9d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWSecurityLabelComponentImpl.java
@@ -0,0 +1,273 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponent;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentElement;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponentType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Security Label Component</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWSecurityLabelComponentImpl#getType <em>Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWSecurityLabelComponentImpl#getLUWSecurityPolicy <em>LUW Security Policy</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWSecurityLabelComponentImpl#getElements <em>Elements</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWSecurityLabelComponentImpl extends SQLObjectImpl implements LUWSecurityLabelComponent {
+	/**
+	 * The default value of the '{@link #getType() <em>Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getType()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final LUWSecurityLabelComponentType TYPE_EDEFAULT = LUWSecurityLabelComponentType.SET_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getType() <em>Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getType()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWSecurityLabelComponentType type = TYPE_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getLUWSecurityPolicy() <em>LUW Security Policy</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLUWSecurityPolicy()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList luwSecurityPolicy;
+
+	/**
+	 * The cached value of the '{@link #getElements() <em>Elements</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getElements()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList elements;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWSecurityLabelComponentImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_SECURITY_LABEL_COMPONENT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWSecurityLabelComponentType getType() {
+		return type;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setType(LUWSecurityLabelComponentType newType) {
+		LUWSecurityLabelComponentType oldType = type;
+		type = newType == null ? TYPE_EDEFAULT : newType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_SECURITY_LABEL_COMPONENT__TYPE, oldType, type));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getLUWSecurityPolicy() {
+		if (luwSecurityPolicy == null) {
+			luwSecurityPolicy = new EObjectWithInverseResolvingEList.ManyInverse(LUWSecurityPolicy.class, this, LUWPackage.LUW_SECURITY_LABEL_COMPONENT__LUW_SECURITY_POLICY, LUWPackage.LUW_SECURITY_POLICY__COMPONENTS);
+		}
+		return luwSecurityPolicy;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getElements() {
+		if (elements == null) {
+			elements = new EObjectWithInverseResolvingEList.ManyInverse(LUWSecurityLabelComponentElement.class, this, LUWPackage.LUW_SECURITY_LABEL_COMPONENT__ELEMENTS, LUWPackage.LUW_SECURITY_LABEL_COMPONENT_ELEMENT__LUW_SECURITY_LABEL_COMPONENT);
+		}
+		return elements;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT__LUW_SECURITY_POLICY:
+				return ((InternalEList)getLUWSecurityPolicy()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT__ELEMENTS:
+				return ((InternalEList)getElements()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT__LUW_SECURITY_POLICY:
+				return ((InternalEList)getLUWSecurityPolicy()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT__ELEMENTS:
+				return ((InternalEList)getElements()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT__TYPE:
+				return getType();
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT__LUW_SECURITY_POLICY:
+				return getLUWSecurityPolicy();
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT__ELEMENTS:
+				return getElements();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT__TYPE:
+				setType((LUWSecurityLabelComponentType)newValue);
+				return;
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT__LUW_SECURITY_POLICY:
+				getLUWSecurityPolicy().clear();
+				getLUWSecurityPolicy().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT__ELEMENTS:
+				getElements().clear();
+				getElements().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT__TYPE:
+				setType(TYPE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT__LUW_SECURITY_POLICY:
+				getLUWSecurityPolicy().clear();
+				return;
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT__ELEMENTS:
+				getElements().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT__TYPE:
+				return type != TYPE_EDEFAULT;
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT__LUW_SECURITY_POLICY:
+				return luwSecurityPolicy != null && !luwSecurityPolicy.isEmpty();
+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT__ELEMENTS:
+				return elements != null && !elements.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (type: "); //$NON-NLS-1$
+		result.append(type);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWSecurityLabelComponentImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWSecurityLabelImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWSecurityLabelImpl.java
new file mode 100644
index 0000000..c410bd1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWSecurityLabelImpl.java
@@ -0,0 +1,275 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabel;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Security Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWSecurityLabelImpl#getSecurityLabel <em>Security Label</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWSecurityLabelImpl#getPolicy <em>Policy</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWSecurityLabelImpl extends SQLObjectImpl implements LUWSecurityLabel {
+	/**
+	 * The default value of the '{@link #getSecurityLabel() <em>Security Label</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSecurityLabel()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String SECURITY_LABEL_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getSecurityLabel() <em>Security Label</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSecurityLabel()
+	 * @generated
+	 * @ordered
+	 */
+	protected String securityLabel = SECURITY_LABEL_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getPolicy() <em>Policy</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPolicy()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWSecurityPolicy policy;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWSecurityLabelImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_SECURITY_LABEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getSecurityLabel() {
+		return securityLabel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSecurityLabel(String newSecurityLabel) {
+		String oldSecurityLabel = securityLabel;
+		securityLabel = newSecurityLabel;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_SECURITY_LABEL__SECURITY_LABEL, oldSecurityLabel, securityLabel));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWSecurityPolicy getPolicy() {
+		if (policy != null && policy.eIsProxy()) {
+			InternalEObject oldPolicy = (InternalEObject)policy;
+			policy = (LUWSecurityPolicy)eResolveProxy(oldPolicy);
+			if (policy != oldPolicy) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_SECURITY_LABEL__POLICY, oldPolicy, policy));
+			}
+		}
+		return policy;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWSecurityPolicy basicGetPolicy() {
+		return policy;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetPolicy(LUWSecurityPolicy newPolicy, NotificationChain msgs) {
+		LUWSecurityPolicy oldPolicy = policy;
+		policy = newPolicy;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_SECURITY_LABEL__POLICY, oldPolicy, newPolicy);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPolicy(LUWSecurityPolicy newPolicy) {
+		if (newPolicy != policy) {
+			NotificationChain msgs = null;
+			if (policy != null)
+				msgs = ((InternalEObject)policy).eInverseRemove(this, LUWPackage.LUW_SECURITY_POLICY__LABELS, LUWSecurityPolicy.class, msgs);
+			if (newPolicy != null)
+				msgs = ((InternalEObject)newPolicy).eInverseAdd(this, LUWPackage.LUW_SECURITY_POLICY__LABELS, LUWSecurityPolicy.class, msgs);
+			msgs = basicSetPolicy(newPolicy, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_SECURITY_LABEL__POLICY, newPolicy, newPolicy));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_SECURITY_LABEL__POLICY:
+				if (policy != null)
+					msgs = ((InternalEObject)policy).eInverseRemove(this, LUWPackage.LUW_SECURITY_POLICY__LABELS, LUWSecurityPolicy.class, msgs);
+				return basicSetPolicy((LUWSecurityPolicy)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_SECURITY_LABEL__POLICY:
+				return basicSetPolicy(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_SECURITY_LABEL__SECURITY_LABEL:
+				return getSecurityLabel();
+			case LUWPackage.LUW_SECURITY_LABEL__POLICY:
+				if (resolve) return getPolicy();
+				return basicGetPolicy();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_SECURITY_LABEL__SECURITY_LABEL:
+				setSecurityLabel((String)newValue);
+				return;
+			case LUWPackage.LUW_SECURITY_LABEL__POLICY:
+				setPolicy((LUWSecurityPolicy)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_SECURITY_LABEL__SECURITY_LABEL:
+				setSecurityLabel(SECURITY_LABEL_EDEFAULT);
+				return;
+			case LUWPackage.LUW_SECURITY_LABEL__POLICY:
+				setPolicy((LUWSecurityPolicy)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_SECURITY_LABEL__SECURITY_LABEL:
+				return SECURITY_LABEL_EDEFAULT == null ? securityLabel != null : !SECURITY_LABEL_EDEFAULT.equals(securityLabel);
+			case LUWPackage.LUW_SECURITY_LABEL__POLICY:
+				return policy != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (securityLabel: "); //$NON-NLS-1$
+		result.append(securityLabel);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWSecurityLabelImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWSecurityPolicyImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWSecurityPolicyImpl.java
new file mode 100644
index 0000000..da93c13
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWSecurityPolicyImpl.java
@@ -0,0 +1,361 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabel;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelComponent;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityLabelNotAuthorizedWriteAction;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable;
+import java.util.Collection;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Security Policy</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWSecurityPolicyImpl#getNotAuthorizedWrite <em>Not Authorized Write</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWSecurityPolicyImpl#getComponents <em>Components</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWSecurityPolicyImpl#getLabels <em>Labels</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWSecurityPolicyImpl#getTable <em>Table</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWSecurityPolicyImpl extends SQLObjectImpl implements LUWSecurityPolicy {
+	/**
+	 * The default value of the '{@link #getNotAuthorizedWrite() <em>Not Authorized Write</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNotAuthorizedWrite()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final LUWSecurityLabelNotAuthorizedWriteAction NOT_AUTHORIZED_WRITE_EDEFAULT = LUWSecurityLabelNotAuthorizedWriteAction.OVERRIDE_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getNotAuthorizedWrite() <em>Not Authorized Write</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNotAuthorizedWrite()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWSecurityLabelNotAuthorizedWriteAction notAuthorizedWrite = NOT_AUTHORIZED_WRITE_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getComponents() <em>Components</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getComponents()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList components;
+
+	/**
+	 * The cached value of the '{@link #getLabels() <em>Labels</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLabels()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList labels;
+
+	/**
+	 * The cached value of the '{@link #getTable() <em>Table</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTable()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWTable table;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWSecurityPolicyImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_SECURITY_POLICY;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWSecurityLabelNotAuthorizedWriteAction getNotAuthorizedWrite() {
+		return notAuthorizedWrite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setNotAuthorizedWrite(LUWSecurityLabelNotAuthorizedWriteAction newNotAuthorizedWrite) {
+		LUWSecurityLabelNotAuthorizedWriteAction oldNotAuthorizedWrite = notAuthorizedWrite;
+		notAuthorizedWrite = newNotAuthorizedWrite == null ? NOT_AUTHORIZED_WRITE_EDEFAULT : newNotAuthorizedWrite;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_SECURITY_POLICY__NOT_AUTHORIZED_WRITE, oldNotAuthorizedWrite, notAuthorizedWrite));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getComponents() {
+		if (components == null) {
+			components = new EObjectWithInverseResolvingEList.ManyInverse(LUWSecurityLabelComponent.class, this, LUWPackage.LUW_SECURITY_POLICY__COMPONENTS, LUWPackage.LUW_SECURITY_LABEL_COMPONENT__LUW_SECURITY_POLICY);
+		}
+		return components;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getLabels() {
+		if (labels == null) {
+			labels = new EObjectWithInverseResolvingEList(LUWSecurityLabel.class, this, LUWPackage.LUW_SECURITY_POLICY__LABELS, LUWPackage.LUW_SECURITY_LABEL__POLICY);
+		}
+		return labels;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTable getTable() {
+		if (table != null && table.eIsProxy()) {
+			InternalEObject oldTable = (InternalEObject)table;
+			table = (LUWTable)eResolveProxy(oldTable);
+			if (table != oldTable) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_SECURITY_POLICY__TABLE, oldTable, table));
+			}
+		}
+		return table;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTable basicGetTable() {
+		return table;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetTable(LUWTable newTable, NotificationChain msgs) {
+		LUWTable oldTable = table;
+		table = newTable;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_SECURITY_POLICY__TABLE, oldTable, newTable);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTable(LUWTable newTable) {
+		if (newTable != table) {
+			NotificationChain msgs = null;
+			if (table != null)
+				msgs = ((InternalEObject)table).eInverseRemove(this, LUWPackage.LUW_TABLE__SECURITY_POLICY, LUWTable.class, msgs);
+			if (newTable != null)
+				msgs = ((InternalEObject)newTable).eInverseAdd(this, LUWPackage.LUW_TABLE__SECURITY_POLICY, LUWTable.class, msgs);
+			msgs = basicSetTable(newTable, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_SECURITY_POLICY__TABLE, newTable, newTable));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_SECURITY_POLICY__COMPONENTS:
+				return ((InternalEList)getComponents()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_SECURITY_POLICY__LABELS:
+				return ((InternalEList)getLabels()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_SECURITY_POLICY__TABLE:
+				if (table != null)
+					msgs = ((InternalEObject)table).eInverseRemove(this, LUWPackage.LUW_TABLE__SECURITY_POLICY, LUWTable.class, msgs);
+				return basicSetTable((LUWTable)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_SECURITY_POLICY__COMPONENTS:
+				return ((InternalEList)getComponents()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_SECURITY_POLICY__LABELS:
+				return ((InternalEList)getLabels()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_SECURITY_POLICY__TABLE:
+				return basicSetTable(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_SECURITY_POLICY__NOT_AUTHORIZED_WRITE:
+				return getNotAuthorizedWrite();
+			case LUWPackage.LUW_SECURITY_POLICY__COMPONENTS:
+				return getComponents();
+			case LUWPackage.LUW_SECURITY_POLICY__LABELS:
+				return getLabels();
+			case LUWPackage.LUW_SECURITY_POLICY__TABLE:
+				if (resolve) return getTable();
+				return basicGetTable();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_SECURITY_POLICY__NOT_AUTHORIZED_WRITE:
+				setNotAuthorizedWrite((LUWSecurityLabelNotAuthorizedWriteAction)newValue);
+				return;
+			case LUWPackage.LUW_SECURITY_POLICY__COMPONENTS:
+				getComponents().clear();
+				getComponents().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_SECURITY_POLICY__LABELS:
+				getLabels().clear();
+				getLabels().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_SECURITY_POLICY__TABLE:
+				setTable((LUWTable)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_SECURITY_POLICY__NOT_AUTHORIZED_WRITE:
+				setNotAuthorizedWrite(NOT_AUTHORIZED_WRITE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_SECURITY_POLICY__COMPONENTS:
+				getComponents().clear();
+				return;
+			case LUWPackage.LUW_SECURITY_POLICY__LABELS:
+				getLabels().clear();
+				return;
+			case LUWPackage.LUW_SECURITY_POLICY__TABLE:
+				setTable((LUWTable)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_SECURITY_POLICY__NOT_AUTHORIZED_WRITE:
+				return notAuthorizedWrite != NOT_AUTHORIZED_WRITE_EDEFAULT;
+			case LUWPackage.LUW_SECURITY_POLICY__COMPONENTS:
+				return components != null && !components.isEmpty();
+			case LUWPackage.LUW_SECURITY_POLICY__LABELS:
+				return labels != null && !labels.isEmpty();
+			case LUWPackage.LUW_SECURITY_POLICY__TABLE:
+				return table != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (notAuthorizedWrite: "); //$NON-NLS-1$
+		result.append(notAuthorizedWrite);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWSecurityPolicyImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWServerImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWServerImpl.java
new file mode 100644
index 0000000..8da04f6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWServerImpl.java
@@ -0,0 +1,628 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNickname;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWUserMapping;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.RemoteServer;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Server</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWServerImpl#getServerType <em>Server Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWServerImpl#getServerVersion <em>Server Version</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWServerImpl#getUserMappings <em>User Mappings</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWServerImpl#getWrapper <em>Wrapper</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWServerImpl#getNicknames <em>Nicknames</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWServerImpl#getLUWDatabase <em>LUW Database</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWServerImpl#getOptions <em>Options</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWServerImpl#getRemoteServer <em>Remote Server</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class LUWServerImpl extends SQLObjectImpl implements LUWServer {
+	/**
+	 * The default value of the '{@link #getServerType() <em>Server Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getServerType()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String SERVER_TYPE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getServerType() <em>Server Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getServerType()
+	 * @generated
+	 * @ordered
+	 */
+	protected String serverType = SERVER_TYPE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getServerVersion() <em>Server Version</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getServerVersion()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String SERVER_VERSION_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getServerVersion() <em>Server Version</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getServerVersion()
+	 * @generated
+	 * @ordered
+	 */
+	protected String serverVersion = SERVER_VERSION_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getUserMappings() <em>User Mappings</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUserMappings()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList userMappings;
+
+	/**
+	 * The cached value of the '{@link #getWrapper() <em>Wrapper</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getWrapper()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWWrapper wrapper;
+
+	/**
+	 * The cached value of the '{@link #getNicknames() <em>Nicknames</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNicknames()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList nicknames;
+
+	/**
+	 * The cached value of the '{@link #getLUWDatabase() <em>LUW Database</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLUWDatabase()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWDatabase luwDatabase;
+
+	/**
+	 * The cached value of the '{@link #getOptions() <em>Options</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOptions()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList options;
+
+	/**
+	 * The cached value of the '{@link #getRemoteServer() <em>Remote Server</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRemoteServer()
+	 * @generated
+	 * @ordered
+	 */
+	protected RemoteServer remoteServer;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWServerImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_SERVER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getServerType() {
+		return serverType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setServerType(String newServerType) {
+		String oldServerType = serverType;
+		serverType = newServerType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_SERVER__SERVER_TYPE, oldServerType, serverType));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getServerVersion() {
+		return serverVersion;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setServerVersion(String newServerVersion) {
+		String oldServerVersion = serverVersion;
+		serverVersion = newServerVersion;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_SERVER__SERVER_VERSION, oldServerVersion, serverVersion));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getUserMappings() {
+		if (userMappings == null) {
+			userMappings = new EObjectContainmentWithInverseEList(LUWUserMapping.class, this, LUWPackage.LUW_SERVER__USER_MAPPINGS, LUWPackage.LUW_USER_MAPPING__SERVER);
+		}
+		return userMappings;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWWrapper getWrapper() {
+		if (wrapper != null && wrapper.eIsProxy()) {
+			InternalEObject oldWrapper = (InternalEObject)wrapper;
+			wrapper = (LUWWrapper)eResolveProxy(oldWrapper);
+			if (wrapper != oldWrapper) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_SERVER__WRAPPER, oldWrapper, wrapper));
+			}
+		}
+		return wrapper;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWWrapper basicGetWrapper() {
+		return wrapper;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetWrapper(LUWWrapper newWrapper, NotificationChain msgs) {
+		LUWWrapper oldWrapper = wrapper;
+		wrapper = newWrapper;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_SERVER__WRAPPER, oldWrapper, newWrapper);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setWrapper(LUWWrapper newWrapper) {
+		if (newWrapper != wrapper) {
+			NotificationChain msgs = null;
+			if (wrapper != null)
+				msgs = ((InternalEObject)wrapper).eInverseRemove(this, LUWPackage.LUW_WRAPPER__SERVERS, LUWWrapper.class, msgs);
+			if (newWrapper != null)
+				msgs = ((InternalEObject)newWrapper).eInverseAdd(this, LUWPackage.LUW_WRAPPER__SERVERS, LUWWrapper.class, msgs);
+			msgs = basicSetWrapper(newWrapper, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_SERVER__WRAPPER, newWrapper, newWrapper));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getNicknames() {
+		if (nicknames == null) {
+			nicknames = new EObjectWithInverseResolvingEList(LUWNickname.class, this, LUWPackage.LUW_SERVER__NICKNAMES, LUWPackage.LUW_NICKNAME__SERVER);
+		}
+		return nicknames;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWDatabase getLUWDatabase() {
+		if (luwDatabase != null && luwDatabase.eIsProxy()) {
+			InternalEObject oldLUWDatabase = (InternalEObject)luwDatabase;
+			luwDatabase = (LUWDatabase)eResolveProxy(oldLUWDatabase);
+			if (luwDatabase != oldLUWDatabase) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_SERVER__LUW_DATABASE, oldLUWDatabase, luwDatabase));
+			}
+		}
+		return luwDatabase;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWDatabase basicGetLUWDatabase() {
+		return luwDatabase;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetLUWDatabase(LUWDatabase newLUWDatabase, NotificationChain msgs) {
+		LUWDatabase oldLUWDatabase = luwDatabase;
+		luwDatabase = newLUWDatabase;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_SERVER__LUW_DATABASE, oldLUWDatabase, newLUWDatabase);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLUWDatabase(LUWDatabase newLUWDatabase) {
+		if (newLUWDatabase != luwDatabase) {
+			NotificationChain msgs = null;
+			if (luwDatabase != null)
+				msgs = ((InternalEObject)luwDatabase).eInverseRemove(this, LUWPackage.LUW_DATABASE__SERVERS, LUWDatabase.class, msgs);
+			if (newLUWDatabase != null)
+				msgs = ((InternalEObject)newLUWDatabase).eInverseAdd(this, LUWPackage.LUW_DATABASE__SERVERS, LUWDatabase.class, msgs);
+			msgs = basicSetLUWDatabase(newLUWDatabase, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_SERVER__LUW_DATABASE, newLUWDatabase, newLUWDatabase));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getOptions() {
+		if (options == null) {
+			options = new EObjectContainmentEList(LUWOption.class, this, LUWPackage.LUW_SERVER__OPTIONS);
+		}
+		return options;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RemoteServer getRemoteServer() {
+		if (remoteServer != null && remoteServer.eIsProxy()) {
+			InternalEObject oldRemoteServer = (InternalEObject)remoteServer;
+			remoteServer = (RemoteServer)eResolveProxy(oldRemoteServer);
+			if (remoteServer != oldRemoteServer) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_SERVER__REMOTE_SERVER, oldRemoteServer, remoteServer));
+			}
+		}
+		return remoteServer;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RemoteServer basicGetRemoteServer() {
+		return remoteServer;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetRemoteServer(RemoteServer newRemoteServer, NotificationChain msgs) {
+		RemoteServer oldRemoteServer = remoteServer;
+		remoteServer = newRemoteServer;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_SERVER__REMOTE_SERVER, oldRemoteServer, newRemoteServer);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRemoteServer(RemoteServer newRemoteServer) {
+		if (newRemoteServer != remoteServer) {
+			NotificationChain msgs = null;
+			if (remoteServer != null)
+				msgs = ((InternalEObject)remoteServer).eInverseRemove(this, LUWPackage.REMOTE_SERVER__LUW_SERVER, RemoteServer.class, msgs);
+			if (newRemoteServer != null)
+				msgs = ((InternalEObject)newRemoteServer).eInverseAdd(this, LUWPackage.REMOTE_SERVER__LUW_SERVER, RemoteServer.class, msgs);
+			msgs = basicSetRemoteServer(newRemoteServer, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_SERVER__REMOTE_SERVER, newRemoteServer, newRemoteServer));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_SERVER__USER_MAPPINGS:
+				return ((InternalEList)getUserMappings()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_SERVER__WRAPPER:
+				if (wrapper != null)
+					msgs = ((InternalEObject)wrapper).eInverseRemove(this, LUWPackage.LUW_WRAPPER__SERVERS, LUWWrapper.class, msgs);
+				return basicSetWrapper((LUWWrapper)otherEnd, msgs);
+			case LUWPackage.LUW_SERVER__NICKNAMES:
+				return ((InternalEList)getNicknames()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_SERVER__LUW_DATABASE:
+				if (luwDatabase != null)
+					msgs = ((InternalEObject)luwDatabase).eInverseRemove(this, LUWPackage.LUW_DATABASE__SERVERS, LUWDatabase.class, msgs);
+				return basicSetLUWDatabase((LUWDatabase)otherEnd, msgs);
+			case LUWPackage.LUW_SERVER__REMOTE_SERVER:
+				if (remoteServer != null)
+					msgs = ((InternalEObject)remoteServer).eInverseRemove(this, LUWPackage.REMOTE_SERVER__LUW_SERVER, RemoteServer.class, msgs);
+				return basicSetRemoteServer((RemoteServer)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_SERVER__USER_MAPPINGS:
+				return ((InternalEList)getUserMappings()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_SERVER__WRAPPER:
+				return basicSetWrapper(null, msgs);
+			case LUWPackage.LUW_SERVER__NICKNAMES:
+				return ((InternalEList)getNicknames()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_SERVER__LUW_DATABASE:
+				return basicSetLUWDatabase(null, msgs);
+			case LUWPackage.LUW_SERVER__OPTIONS:
+				return ((InternalEList)getOptions()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_SERVER__REMOTE_SERVER:
+				return basicSetRemoteServer(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_SERVER__SERVER_TYPE:
+				return getServerType();
+			case LUWPackage.LUW_SERVER__SERVER_VERSION:
+				return getServerVersion();
+			case LUWPackage.LUW_SERVER__USER_MAPPINGS:
+				return getUserMappings();
+			case LUWPackage.LUW_SERVER__WRAPPER:
+				if (resolve) return getWrapper();
+				return basicGetWrapper();
+			case LUWPackage.LUW_SERVER__NICKNAMES:
+				return getNicknames();
+			case LUWPackage.LUW_SERVER__LUW_DATABASE:
+				if (resolve) return getLUWDatabase();
+				return basicGetLUWDatabase();
+			case LUWPackage.LUW_SERVER__OPTIONS:
+				return getOptions();
+			case LUWPackage.LUW_SERVER__REMOTE_SERVER:
+				if (resolve) return getRemoteServer();
+				return basicGetRemoteServer();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_SERVER__SERVER_TYPE:
+				setServerType((String)newValue);
+				return;
+			case LUWPackage.LUW_SERVER__SERVER_VERSION:
+				setServerVersion((String)newValue);
+				return;
+			case LUWPackage.LUW_SERVER__USER_MAPPINGS:
+				getUserMappings().clear();
+				getUserMappings().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_SERVER__WRAPPER:
+				setWrapper((LUWWrapper)newValue);
+				return;
+			case LUWPackage.LUW_SERVER__NICKNAMES:
+				getNicknames().clear();
+				getNicknames().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_SERVER__LUW_DATABASE:
+				setLUWDatabase((LUWDatabase)newValue);
+				return;
+			case LUWPackage.LUW_SERVER__OPTIONS:
+				getOptions().clear();
+				getOptions().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_SERVER__REMOTE_SERVER:
+				setRemoteServer((RemoteServer)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_SERVER__SERVER_TYPE:
+				setServerType(SERVER_TYPE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_SERVER__SERVER_VERSION:
+				setServerVersion(SERVER_VERSION_EDEFAULT);
+				return;
+			case LUWPackage.LUW_SERVER__USER_MAPPINGS:
+				getUserMappings().clear();
+				return;
+			case LUWPackage.LUW_SERVER__WRAPPER:
+				setWrapper((LUWWrapper)null);
+				return;
+			case LUWPackage.LUW_SERVER__NICKNAMES:
+				getNicknames().clear();
+				return;
+			case LUWPackage.LUW_SERVER__LUW_DATABASE:
+				setLUWDatabase((LUWDatabase)null);
+				return;
+			case LUWPackage.LUW_SERVER__OPTIONS:
+				getOptions().clear();
+				return;
+			case LUWPackage.LUW_SERVER__REMOTE_SERVER:
+				setRemoteServer((RemoteServer)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_SERVER__SERVER_TYPE:
+				return SERVER_TYPE_EDEFAULT == null ? serverType != null : !SERVER_TYPE_EDEFAULT.equals(serverType);
+			case LUWPackage.LUW_SERVER__SERVER_VERSION:
+				return SERVER_VERSION_EDEFAULT == null ? serverVersion != null : !SERVER_VERSION_EDEFAULT.equals(serverVersion);
+			case LUWPackage.LUW_SERVER__USER_MAPPINGS:
+				return userMappings != null && !userMappings.isEmpty();
+			case LUWPackage.LUW_SERVER__WRAPPER:
+				return wrapper != null;
+			case LUWPackage.LUW_SERVER__NICKNAMES:
+				return nicknames != null && !nicknames.isEmpty();
+			case LUWPackage.LUW_SERVER__LUW_DATABASE:
+				return luwDatabase != null;
+			case LUWPackage.LUW_SERVER__OPTIONS:
+				return options != null && !options.isEmpty();
+			case LUWPackage.LUW_SERVER__REMOTE_SERVER:
+				return remoteServer != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (serverType: "); //$NON-NLS-1$
+		result.append(serverType);
+		result.append(", serverVersion: "); //$NON-NLS-1$
+		result.append(serverVersion);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWServerImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWStorageGroupImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWStorageGroupImpl.java
new file mode 100644
index 0000000..408272f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWStorageGroupImpl.java
@@ -0,0 +1,520 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EDataTypeUniqueEList;
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Storage Group</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWStorageGroupImpl#getStoragePaths <em>Storage Paths</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWStorageGroupImpl#getOverhead <em>Overhead</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWStorageGroupImpl#getDeviceReadRate <em>Device Read Rate</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWStorageGroupImpl#getDataTag <em>Data Tag</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWStorageGroupImpl#isDefault <em>Default</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWStorageGroupImpl#getDatabase <em>Database</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWStorageGroupImpl#getTableSpaces <em>Table Spaces</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWStorageGroupImpl extends SQLObjectImpl implements LUWStorageGroup {
+	/**
+	 * The cached value of the '{@link #getStoragePaths() <em>Storage Paths</em>}' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getStoragePaths()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList storagePaths;
+
+	/**
+	 * The default value of the '{@link #getOverhead() <em>Overhead</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOverhead()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double OVERHEAD_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getOverhead() <em>Overhead</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOverhead()
+	 * @generated
+	 * @ordered
+	 */
+	protected double overhead = OVERHEAD_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getDeviceReadRate() <em>Device Read Rate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDeviceReadRate()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double DEVICE_READ_RATE_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getDeviceReadRate() <em>Device Read Rate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDeviceReadRate()
+	 * @generated
+	 * @ordered
+	 */
+	protected double deviceReadRate = DEVICE_READ_RATE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getDataTag() <em>Data Tag</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDataTag()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String DATA_TAG_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getDataTag() <em>Data Tag</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDataTag()
+	 * @generated
+	 * @ordered
+	 */
+	protected String dataTag = DATA_TAG_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isDefault() <em>Default</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDefault()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean DEFAULT_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isDefault() <em>Default</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDefault()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean default_ = DEFAULT_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getDatabase() <em>Database</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDatabase()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWDatabase database;
+
+	/**
+	 * The cached value of the '{@link #getTableSpaces() <em>Table Spaces</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTableSpaces()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList tableSpaces;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWStorageGroupImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_STORAGE_GROUP;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getStoragePaths() {
+		if (storagePaths == null) {
+			storagePaths = new EDataTypeUniqueEList(String.class, this, LUWPackage.LUW_STORAGE_GROUP__STORAGE_PATHS);
+		}
+		return storagePaths;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getOverhead() {
+		return overhead;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOverhead(double newOverhead) {
+		double oldOverhead = overhead;
+		overhead = newOverhead;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_STORAGE_GROUP__OVERHEAD, oldOverhead, overhead));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getDeviceReadRate() {
+		return deviceReadRate;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDeviceReadRate(double newDeviceReadRate) {
+		double oldDeviceReadRate = deviceReadRate;
+		deviceReadRate = newDeviceReadRate;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_STORAGE_GROUP__DEVICE_READ_RATE, oldDeviceReadRate, deviceReadRate));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getDataTag() {
+		return dataTag;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDataTag(String newDataTag) {
+		String oldDataTag = dataTag;
+		dataTag = newDataTag;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_STORAGE_GROUP__DATA_TAG, oldDataTag, dataTag));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isDefault() {
+		return default_;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDefault(boolean newDefault) {
+		boolean oldDefault = default_;
+		default_ = newDefault;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_STORAGE_GROUP__DEFAULT, oldDefault, default_));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWDatabase getDatabase() {
+		if (database != null && database.eIsProxy()) {
+			InternalEObject oldDatabase = (InternalEObject)database;
+			database = (LUWDatabase)eResolveProxy(oldDatabase);
+			if (database != oldDatabase) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_STORAGE_GROUP__DATABASE, oldDatabase, database));
+			}
+		}
+		return database;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWDatabase basicGetDatabase() {
+		return database;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetDatabase(LUWDatabase newDatabase, NotificationChain msgs) {
+		LUWDatabase oldDatabase = database;
+		database = newDatabase;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_STORAGE_GROUP__DATABASE, oldDatabase, newDatabase);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDatabase(LUWDatabase newDatabase) {
+		if (newDatabase != database) {
+			NotificationChain msgs = null;
+			if (database != null)
+				msgs = ((InternalEObject)database).eInverseRemove(this, LUWPackage.LUW_DATABASE__STORAGE_GROUPS, LUWDatabase.class, msgs);
+			if (newDatabase != null)
+				msgs = ((InternalEObject)newDatabase).eInverseAdd(this, LUWPackage.LUW_DATABASE__STORAGE_GROUPS, LUWDatabase.class, msgs);
+			msgs = basicSetDatabase(newDatabase, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_STORAGE_GROUP__DATABASE, newDatabase, newDatabase));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getTableSpaces() {
+		if (tableSpaces == null) {
+			tableSpaces = new EObjectWithInverseResolvingEList(LUWTableSpace.class, this, LUWPackage.LUW_STORAGE_GROUP__TABLE_SPACES, LUWPackage.LUW_TABLE_SPACE__STORAGE_GROUP);
+		}
+		return tableSpaces;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_STORAGE_GROUP__DATABASE:
+				if (database != null)
+					msgs = ((InternalEObject)database).eInverseRemove(this, LUWPackage.LUW_DATABASE__STORAGE_GROUPS, LUWDatabase.class, msgs);
+				return basicSetDatabase((LUWDatabase)otherEnd, msgs);
+			case LUWPackage.LUW_STORAGE_GROUP__TABLE_SPACES:
+				return ((InternalEList)getTableSpaces()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_STORAGE_GROUP__DATABASE:
+				return basicSetDatabase(null, msgs);
+			case LUWPackage.LUW_STORAGE_GROUP__TABLE_SPACES:
+				return ((InternalEList)getTableSpaces()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_STORAGE_GROUP__STORAGE_PATHS:
+				return getStoragePaths();
+			case LUWPackage.LUW_STORAGE_GROUP__OVERHEAD:
+				return new Double(getOverhead());
+			case LUWPackage.LUW_STORAGE_GROUP__DEVICE_READ_RATE:
+				return new Double(getDeviceReadRate());
+			case LUWPackage.LUW_STORAGE_GROUP__DATA_TAG:
+				return getDataTag();
+			case LUWPackage.LUW_STORAGE_GROUP__DEFAULT:
+				return isDefault() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_STORAGE_GROUP__DATABASE:
+				if (resolve) return getDatabase();
+				return basicGetDatabase();
+			case LUWPackage.LUW_STORAGE_GROUP__TABLE_SPACES:
+				return getTableSpaces();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_STORAGE_GROUP__STORAGE_PATHS:
+				getStoragePaths().clear();
+				getStoragePaths().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_STORAGE_GROUP__OVERHEAD:
+				setOverhead(((Double)newValue).doubleValue());
+				return;
+			case LUWPackage.LUW_STORAGE_GROUP__DEVICE_READ_RATE:
+				setDeviceReadRate(((Double)newValue).doubleValue());
+				return;
+			case LUWPackage.LUW_STORAGE_GROUP__DATA_TAG:
+				setDataTag((String)newValue);
+				return;
+			case LUWPackage.LUW_STORAGE_GROUP__DEFAULT:
+				setDefault(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_STORAGE_GROUP__DATABASE:
+				setDatabase((LUWDatabase)newValue);
+				return;
+			case LUWPackage.LUW_STORAGE_GROUP__TABLE_SPACES:
+				getTableSpaces().clear();
+				getTableSpaces().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_STORAGE_GROUP__STORAGE_PATHS:
+				getStoragePaths().clear();
+				return;
+			case LUWPackage.LUW_STORAGE_GROUP__OVERHEAD:
+				setOverhead(OVERHEAD_EDEFAULT);
+				return;
+			case LUWPackage.LUW_STORAGE_GROUP__DEVICE_READ_RATE:
+				setDeviceReadRate(DEVICE_READ_RATE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_STORAGE_GROUP__DATA_TAG:
+				setDataTag(DATA_TAG_EDEFAULT);
+				return;
+			case LUWPackage.LUW_STORAGE_GROUP__DEFAULT:
+				setDefault(DEFAULT_EDEFAULT);
+				return;
+			case LUWPackage.LUW_STORAGE_GROUP__DATABASE:
+				setDatabase((LUWDatabase)null);
+				return;
+			case LUWPackage.LUW_STORAGE_GROUP__TABLE_SPACES:
+				getTableSpaces().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_STORAGE_GROUP__STORAGE_PATHS:
+				return storagePaths != null && !storagePaths.isEmpty();
+			case LUWPackage.LUW_STORAGE_GROUP__OVERHEAD:
+				return overhead != OVERHEAD_EDEFAULT;
+			case LUWPackage.LUW_STORAGE_GROUP__DEVICE_READ_RATE:
+				return deviceReadRate != DEVICE_READ_RATE_EDEFAULT;
+			case LUWPackage.LUW_STORAGE_GROUP__DATA_TAG:
+				return DATA_TAG_EDEFAULT == null ? dataTag != null : !DATA_TAG_EDEFAULT.equals(dataTag);
+			case LUWPackage.LUW_STORAGE_GROUP__DEFAULT:
+				return default_ != DEFAULT_EDEFAULT;
+			case LUWPackage.LUW_STORAGE_GROUP__DATABASE:
+				return database != null;
+			case LUWPackage.LUW_STORAGE_GROUP__TABLE_SPACES:
+				return tableSpaces != null && !tableSpaces.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (storagePaths: "); //$NON-NLS-1$
+		result.append(storagePaths);
+		result.append(", overhead: "); //$NON-NLS-1$
+		result.append(overhead);
+		result.append(", deviceReadRate: "); //$NON-NLS-1$
+		result.append(deviceReadRate);
+		result.append(", dataTag: "); //$NON-NLS-1$
+		result.append(dataTag);
+		result.append(", default: "); //$NON-NLS-1$
+		result.append(default_);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWStorageGroupImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWTableImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWTableImpl.java
new file mode 100644
index 0000000..cfa40e2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWTableImpl.java
@@ -0,0 +1,1375 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Vector;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2TableImpl;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartitionKey;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWSecurityPolicy;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTableCompressionMode;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Table</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableImpl#isValueCompression <em>Value Compression</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableImpl#isRowCompression <em>Row Compression</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableImpl#isRowCompressionEmpty <em>Row Compression Empty</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableImpl#getCompressionMode <em>Compression Mode</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableImpl#getPartitionKey <em>Partition Key</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableImpl#getIndexDataTableSpace <em>Index Data Table Space</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableImpl#getLOBDataTableSpace <em>LOB Data Table Space</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableImpl#getRegularDataTableSpace <em>Regular Data Table Space</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableImpl#getDataPartitions <em>Data Partitions</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableImpl#getDataPartitionKey <em>Data Partition Key</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableImpl#getPCTFree <em>PCT Free</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableImpl#isRestrictOnDrop <em>Restrict On Drop</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableImpl#getPartitionMode <em>Partition Mode</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableImpl#isAppendMode <em>Append Mode</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableImpl#getLogMode <em>Log Mode</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableImpl#isLockSizeRow <em>Lock Size Row</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableImpl#isVolatile <em>Volatile</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableImpl#getOptions <em>Options</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableImpl#getSecurityPolicy <em>Security Policy</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWTableImpl extends DB2TableImpl implements LUWTable {
+	/**
+	 * The default value of the '{@link #isValueCompression() <em>Value Compression</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isValueCompression()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean VALUE_COMPRESSION_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isValueCompression() <em>Value Compression</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isValueCompression()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean valueCompression = VALUE_COMPRESSION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isRowCompression() <em>Row Compression</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isRowCompression()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean ROW_COMPRESSION_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isRowCompression() <em>Row Compression</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isRowCompression()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean rowCompression = ROW_COMPRESSION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isRowCompressionEmpty() <em>Row Compression Empty</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isRowCompressionEmpty()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean ROW_COMPRESSION_EMPTY_EDEFAULT = true;
+
+	/**
+	 * The cached value of the '{@link #isRowCompressionEmpty() <em>Row Compression Empty</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isRowCompressionEmpty()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean rowCompressionEmpty = ROW_COMPRESSION_EMPTY_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getCompressionMode() <em>Compression Mode</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCompressionMode()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final LUWStorageTableCompressionMode COMPRESSION_MODE_EDEFAULT = LUWStorageTableCompressionMode.NO_SELECTION_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getCompressionMode() <em>Compression Mode</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCompressionMode()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWStorageTableCompressionMode compressionMode = COMPRESSION_MODE_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getPartitionKey() <em>Partition Key</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPartitionKey()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWPartitionKey partitionKey;
+
+	/**
+	 * The cached value of the '{@link #getIndexDataTableSpace() <em>Index Data Table Space</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIndexDataTableSpace()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWTableSpace indexDataTableSpace;
+
+	/**
+	 * The cached value of the '{@link #getLOBDataTableSpace() <em>LOB Data Table Space</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLOBDataTableSpace()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWTableSpace lobDataTableSpace;
+
+	/**
+	 * The cached value of the '{@link #getRegularDataTableSpace() <em>Regular Data Table Space</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRegularDataTableSpace()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWTableSpace regularDataTableSpace;
+
+	/**
+	 * The cached value of the '{@link #getDataPartitions() <em>Data Partitions</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDataPartitions()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList dataPartitions;
+
+	/**
+	 * The cached value of the '{@link #getDataPartitionKey() <em>Data Partition Key</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDataPartitionKey()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWDataPartitionKey dataPartitionKey;
+
+	/**
+	 * The default value of the '{@link #getPCTFree() <em>PCT Free</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPCTFree()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int PCT_FREE_EDEFAULT = -1;
+
+	/**
+	 * The cached value of the '{@link #getPCTFree() <em>PCT Free</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPCTFree()
+	 * @generated
+	 * @ordered
+	 */
+	protected int pctFree = PCT_FREE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isRestrictOnDrop() <em>Restrict On Drop</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isRestrictOnDrop()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean RESTRICT_ON_DROP_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isRestrictOnDrop() <em>Restrict On Drop</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isRestrictOnDrop()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean restrictOnDrop = RESTRICT_ON_DROP_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getPartitionMode() <em>Partition Mode</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPartitionMode()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String PARTITION_MODE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getPartitionMode() <em>Partition Mode</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPartitionMode()
+	 * @generated
+	 * @ordered
+	 */
+	protected String partitionMode = PARTITION_MODE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isAppendMode() <em>Append Mode</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isAppendMode()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean APPEND_MODE_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isAppendMode() <em>Append Mode</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isAppendMode()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean appendMode = APPEND_MODE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getLogMode() <em>Log Mode</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLogMode()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String LOG_MODE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getLogMode() <em>Log Mode</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLogMode()
+	 * @generated
+	 * @ordered
+	 */
+	protected String logMode = LOG_MODE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isLockSizeRow() <em>Lock Size Row</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isLockSizeRow()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean LOCK_SIZE_ROW_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isLockSizeRow() <em>Lock Size Row</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isLockSizeRow()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean lockSizeRow = LOCK_SIZE_ROW_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isVolatile() <em>Volatile</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isVolatile()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean VOLATILE_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isVolatile() <em>Volatile</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isVolatile()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean volatile_ = VOLATILE_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getOptions() <em>Options</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOptions()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList options;
+
+	/**
+	 * The cached value of the '{@link #getSecurityPolicy() <em>Security Policy</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSecurityPolicy()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWSecurityPolicy securityPolicy;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWTableImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_TABLE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isValueCompression() {
+		return valueCompression;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setValueCompression(boolean newValueCompression) {
+		boolean oldValueCompression = valueCompression;
+		valueCompression = newValueCompression;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE__VALUE_COMPRESSION, oldValueCompression, valueCompression));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isRowCompression() {
+		return rowCompression;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRowCompression(boolean newRowCompression) {
+		boolean oldRowCompression = rowCompression;
+		rowCompression = newRowCompression;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE__ROW_COMPRESSION, oldRowCompression, rowCompression));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isRowCompressionEmpty() {
+		return rowCompressionEmpty;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRowCompressionEmpty(boolean newRowCompressionEmpty) {
+		boolean oldRowCompressionEmpty = rowCompressionEmpty;
+		rowCompressionEmpty = newRowCompressionEmpty;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE__ROW_COMPRESSION_EMPTY, oldRowCompressionEmpty, rowCompressionEmpty));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWStorageTableCompressionMode getCompressionMode() {
+		return compressionMode;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCompressionMode(LUWStorageTableCompressionMode newCompressionMode) {
+		LUWStorageTableCompressionMode oldCompressionMode = compressionMode;
+		compressionMode = newCompressionMode == null ? COMPRESSION_MODE_EDEFAULT : newCompressionMode;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE__COMPRESSION_MODE, oldCompressionMode, compressionMode));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTableSpace getRegularDataTableSpace() {
+		if (regularDataTableSpace != null && regularDataTableSpace.eIsProxy()) {
+			InternalEObject oldRegularDataTableSpace = (InternalEObject)regularDataTableSpace;
+			regularDataTableSpace = (LUWTableSpace)eResolveProxy(oldRegularDataTableSpace);
+			if (regularDataTableSpace != oldRegularDataTableSpace) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_TABLE__REGULAR_DATA_TABLE_SPACE, oldRegularDataTableSpace, regularDataTableSpace));
+			}
+		}
+		return regularDataTableSpace;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTableSpace basicGetRegularDataTableSpace() {
+		return regularDataTableSpace;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetRegularDataTableSpace(LUWTableSpace newRegularDataTableSpace, NotificationChain msgs) {
+		LUWTableSpace oldRegularDataTableSpace = regularDataTableSpace;
+		regularDataTableSpace = newRegularDataTableSpace;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE__REGULAR_DATA_TABLE_SPACE, oldRegularDataTableSpace, newRegularDataTableSpace);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRegularDataTableSpace(LUWTableSpace newRegularDataTableSpace) {
+		if (newRegularDataTableSpace != regularDataTableSpace) {
+			NotificationChain msgs = null;
+			if (regularDataTableSpace != null)
+				msgs = ((InternalEObject)regularDataTableSpace).eInverseRemove(this, LUWPackage.LUW_TABLE_SPACE__REGULAR_DATA_TABLES, LUWTableSpace.class, msgs);
+			if (newRegularDataTableSpace != null)
+				msgs = ((InternalEObject)newRegularDataTableSpace).eInverseAdd(this, LUWPackage.LUW_TABLE_SPACE__REGULAR_DATA_TABLES, LUWTableSpace.class, msgs);
+			msgs = basicSetRegularDataTableSpace(newRegularDataTableSpace, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE__REGULAR_DATA_TABLE_SPACE, newRegularDataTableSpace, newRegularDataTableSpace));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getPCTFree() {
+		return pctFree;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPCTFree(int newPCTFree) {
+		int oldPCTFree = pctFree;
+		pctFree = newPCTFree;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE__PCT_FREE, oldPCTFree, pctFree));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isRestrictOnDrop() {
+		return restrictOnDrop;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRestrictOnDrop(boolean newRestrictOnDrop) {
+		boolean oldRestrictOnDrop = restrictOnDrop;
+		restrictOnDrop = newRestrictOnDrop;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE__RESTRICT_ON_DROP, oldRestrictOnDrop, restrictOnDrop));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getPartitionMode() {
+		return partitionMode;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPartitionMode(String newPartitionMode) {
+		String oldPartitionMode = partitionMode;
+		partitionMode = newPartitionMode;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE__PARTITION_MODE, oldPartitionMode, partitionMode));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isAppendMode() {
+		return appendMode;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setAppendMode(boolean newAppendMode) {
+		boolean oldAppendMode = appendMode;
+		appendMode = newAppendMode;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE__APPEND_MODE, oldAppendMode, appendMode));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getLogMode() {
+		return logMode;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLogMode(String newLogMode) {
+		String oldLogMode = logMode;
+		logMode = newLogMode;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE__LOG_MODE, oldLogMode, logMode));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isLockSizeRow() {
+		return lockSizeRow;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLockSizeRow(boolean newLockSizeRow) {
+		boolean oldLockSizeRow = lockSizeRow;
+		lockSizeRow = newLockSizeRow;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE__LOCK_SIZE_ROW, oldLockSizeRow, lockSizeRow));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isVolatile() {
+		return volatile_;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setVolatile(boolean newVolatile) {
+		boolean oldVolatile = volatile_;
+		volatile_ = newVolatile;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE__VOLATILE, oldVolatile, volatile_));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWSecurityPolicy getSecurityPolicy() {
+		if (securityPolicy != null && securityPolicy.eIsProxy()) {
+			InternalEObject oldSecurityPolicy = (InternalEObject)securityPolicy;
+			securityPolicy = (LUWSecurityPolicy)eResolveProxy(oldSecurityPolicy);
+			if (securityPolicy != oldSecurityPolicy) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_TABLE__SECURITY_POLICY, oldSecurityPolicy, securityPolicy));
+			}
+		}
+		return securityPolicy;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWSecurityPolicy basicGetSecurityPolicy() {
+		return securityPolicy;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetSecurityPolicy(LUWSecurityPolicy newSecurityPolicy, NotificationChain msgs) {
+		LUWSecurityPolicy oldSecurityPolicy = securityPolicy;
+		securityPolicy = newSecurityPolicy;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE__SECURITY_POLICY, oldSecurityPolicy, newSecurityPolicy);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSecurityPolicy(LUWSecurityPolicy newSecurityPolicy) {
+		if (newSecurityPolicy != securityPolicy) {
+			NotificationChain msgs = null;
+			if (securityPolicy != null)
+				msgs = ((InternalEObject)securityPolicy).eInverseRemove(this, LUWPackage.LUW_SECURITY_POLICY__TABLE, LUWSecurityPolicy.class, msgs);
+			if (newSecurityPolicy != null)
+				msgs = ((InternalEObject)newSecurityPolicy).eInverseAdd(this, LUWPackage.LUW_SECURITY_POLICY__TABLE, LUWSecurityPolicy.class, msgs);
+			msgs = basicSetSecurityPolicy(newSecurityPolicy, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE__SECURITY_POLICY, newSecurityPolicy, newSecurityPolicy));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWPartitionKey getPartitionKey() {
+		return partitionKey;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetPartitionKey(LUWPartitionKey newPartitionKey, NotificationChain msgs) {
+		LUWPartitionKey oldPartitionKey = partitionKey;
+		partitionKey = newPartitionKey;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE__PARTITION_KEY, oldPartitionKey, newPartitionKey);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPartitionKey(LUWPartitionKey newPartitionKey) {
+		if (newPartitionKey != partitionKey) {
+			NotificationChain msgs = null;
+			if (partitionKey != null)
+				msgs = ((InternalEObject)partitionKey).eInverseRemove(this, LUWPackage.LUW_PARTITION_KEY__TABLE, LUWPartitionKey.class, msgs);
+			if (newPartitionKey != null)
+				msgs = ((InternalEObject)newPartitionKey).eInverseAdd(this, LUWPackage.LUW_PARTITION_KEY__TABLE, LUWPartitionKey.class, msgs);
+			msgs = basicSetPartitionKey(newPartitionKey, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE__PARTITION_KEY, newPartitionKey, newPartitionKey));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getOptions() {
+		if (options == null) {
+			options = new EObjectContainmentEList(LUWOption.class, this, LUWPackage.LUW_TABLE__OPTIONS);
+		}
+		return options;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getDataPartitions() {
+		if (dataPartitions == null) {
+			dataPartitions = new EObjectContainmentWithInverseEList(LUWDataPartition.class, this, LUWPackage.LUW_TABLE__DATA_PARTITIONS, LUWPackage.LUW_DATA_PARTITION__TABLE);
+		}
+		return dataPartitions;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWDataPartitionKey getDataPartitionKey() {
+		return dataPartitionKey;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetDataPartitionKey(LUWDataPartitionKey newDataPartitionKey, NotificationChain msgs) {
+		LUWDataPartitionKey oldDataPartitionKey = dataPartitionKey;
+		dataPartitionKey = newDataPartitionKey;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE__DATA_PARTITION_KEY, oldDataPartitionKey, newDataPartitionKey);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDataPartitionKey(LUWDataPartitionKey newDataPartitionKey) {
+		if (newDataPartitionKey != dataPartitionKey) {
+			NotificationChain msgs = null;
+			if (dataPartitionKey != null)
+				msgs = ((InternalEObject)dataPartitionKey).eInverseRemove(this, LUWPackage.LUW_DATA_PARTITION_KEY__TABLE, LUWDataPartitionKey.class, msgs);
+			if (newDataPartitionKey != null)
+				msgs = ((InternalEObject)newDataPartitionKey).eInverseAdd(this, LUWPackage.LUW_DATA_PARTITION_KEY__TABLE, LUWDataPartitionKey.class, msgs);
+			msgs = basicSetDataPartitionKey(newDataPartitionKey, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE__DATA_PARTITION_KEY, newDataPartitionKey, newDataPartitionKey));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTableSpace getIndexDataTableSpace() {
+		if (indexDataTableSpace != null && indexDataTableSpace.eIsProxy()) {
+			InternalEObject oldIndexDataTableSpace = (InternalEObject)indexDataTableSpace;
+			indexDataTableSpace = (LUWTableSpace)eResolveProxy(oldIndexDataTableSpace);
+			if (indexDataTableSpace != oldIndexDataTableSpace) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_TABLE__INDEX_DATA_TABLE_SPACE, oldIndexDataTableSpace, indexDataTableSpace));
+			}
+		}
+		return indexDataTableSpace;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTableSpace basicGetIndexDataTableSpace() {
+		return indexDataTableSpace;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetIndexDataTableSpace(LUWTableSpace newIndexDataTableSpace, NotificationChain msgs) {
+		LUWTableSpace oldIndexDataTableSpace = indexDataTableSpace;
+		indexDataTableSpace = newIndexDataTableSpace;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE__INDEX_DATA_TABLE_SPACE, oldIndexDataTableSpace, newIndexDataTableSpace);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIndexDataTableSpace(LUWTableSpace newIndexDataTableSpace) {
+		if (newIndexDataTableSpace != indexDataTableSpace) {
+			NotificationChain msgs = null;
+			if (indexDataTableSpace != null)
+				msgs = ((InternalEObject)indexDataTableSpace).eInverseRemove(this, LUWPackage.LUW_TABLE_SPACE__INDEX_DATA_TABLES, LUWTableSpace.class, msgs);
+			if (newIndexDataTableSpace != null)
+				msgs = ((InternalEObject)newIndexDataTableSpace).eInverseAdd(this, LUWPackage.LUW_TABLE_SPACE__INDEX_DATA_TABLES, LUWTableSpace.class, msgs);
+			msgs = basicSetIndexDataTableSpace(newIndexDataTableSpace, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE__INDEX_DATA_TABLE_SPACE, newIndexDataTableSpace, newIndexDataTableSpace));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTableSpace getLOBDataTableSpace() {
+		if (lobDataTableSpace != null && lobDataTableSpace.eIsProxy()) {
+			InternalEObject oldLOBDataTableSpace = (InternalEObject)lobDataTableSpace;
+			lobDataTableSpace = (LUWTableSpace)eResolveProxy(oldLOBDataTableSpace);
+			if (lobDataTableSpace != oldLOBDataTableSpace) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_TABLE__LOB_DATA_TABLE_SPACE, oldLOBDataTableSpace, lobDataTableSpace));
+			}
+		}
+		return lobDataTableSpace;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTableSpace basicGetLOBDataTableSpace() {
+		return lobDataTableSpace;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetLOBDataTableSpace(LUWTableSpace newLOBDataTableSpace, NotificationChain msgs) {
+		LUWTableSpace oldLOBDataTableSpace = lobDataTableSpace;
+		lobDataTableSpace = newLOBDataTableSpace;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE__LOB_DATA_TABLE_SPACE, oldLOBDataTableSpace, newLOBDataTableSpace);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLOBDataTableSpace(LUWTableSpace newLOBDataTableSpace) {
+		if (newLOBDataTableSpace != lobDataTableSpace) {
+			NotificationChain msgs = null;
+			if (lobDataTableSpace != null)
+				msgs = ((InternalEObject)lobDataTableSpace).eInverseRemove(this, LUWPackage.LUW_TABLE_SPACE__LOB_DATA_TABLES, LUWTableSpace.class, msgs);
+			if (newLOBDataTableSpace != null)
+				msgs = ((InternalEObject)newLOBDataTableSpace).eInverseAdd(this, LUWPackage.LUW_TABLE_SPACE__LOB_DATA_TABLES, LUWTableSpace.class, msgs);
+			msgs = basicSetLOBDataTableSpace(newLOBDataTableSpace, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE__LOB_DATA_TABLE_SPACE, newLOBDataTableSpace, newLOBDataTableSpace));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 */
+	public List getTableSpaces() {
+		Vector tablespaceList = new Vector();
+		LUWTableSpace regularDataTablespace = this.getRegularDataTableSpace();
+		if (regularDataTablespace != null) {
+			tablespaceList.add(regularDataTablespace);
+		}
+		LUWTableSpace indexDataTablespace = this.getIndexDataTableSpace();
+		if (indexDataTablespace != null) {
+			tablespaceList.add(indexDataTablespace);
+		}
+		LUWTableSpace lobDataTablespace = this.getLOBDataTableSpace();
+		if (lobDataTablespace != null) {
+			tablespaceList.add(lobDataTablespace);
+		}
+		return (List)tablespaceList;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_TABLE__PARTITION_KEY:
+				if (partitionKey != null)
+					msgs = ((InternalEObject)partitionKey).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - LUWPackage.LUW_TABLE__PARTITION_KEY, null, msgs);
+				return basicSetPartitionKey((LUWPartitionKey)otherEnd, msgs);
+			case LUWPackage.LUW_TABLE__INDEX_DATA_TABLE_SPACE:
+				if (indexDataTableSpace != null)
+					msgs = ((InternalEObject)indexDataTableSpace).eInverseRemove(this, LUWPackage.LUW_TABLE_SPACE__INDEX_DATA_TABLES, LUWTableSpace.class, msgs);
+				return basicSetIndexDataTableSpace((LUWTableSpace)otherEnd, msgs);
+			case LUWPackage.LUW_TABLE__LOB_DATA_TABLE_SPACE:
+				if (lobDataTableSpace != null)
+					msgs = ((InternalEObject)lobDataTableSpace).eInverseRemove(this, LUWPackage.LUW_TABLE_SPACE__LOB_DATA_TABLES, LUWTableSpace.class, msgs);
+				return basicSetLOBDataTableSpace((LUWTableSpace)otherEnd, msgs);
+			case LUWPackage.LUW_TABLE__REGULAR_DATA_TABLE_SPACE:
+				if (regularDataTableSpace != null)
+					msgs = ((InternalEObject)regularDataTableSpace).eInverseRemove(this, LUWPackage.LUW_TABLE_SPACE__REGULAR_DATA_TABLES, LUWTableSpace.class, msgs);
+				return basicSetRegularDataTableSpace((LUWTableSpace)otherEnd, msgs);
+			case LUWPackage.LUW_TABLE__DATA_PARTITIONS:
+				return ((InternalEList)getDataPartitions()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_TABLE__DATA_PARTITION_KEY:
+				if (dataPartitionKey != null)
+					msgs = ((InternalEObject)dataPartitionKey).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - LUWPackage.LUW_TABLE__DATA_PARTITION_KEY, null, msgs);
+				return basicSetDataPartitionKey((LUWDataPartitionKey)otherEnd, msgs);
+			case LUWPackage.LUW_TABLE__SECURITY_POLICY:
+				if (securityPolicy != null)
+					msgs = ((InternalEObject)securityPolicy).eInverseRemove(this, LUWPackage.LUW_SECURITY_POLICY__TABLE, LUWSecurityPolicy.class, msgs);
+				return basicSetSecurityPolicy((LUWSecurityPolicy)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_TABLE__PARTITION_KEY:
+				return basicSetPartitionKey(null, msgs);
+			case LUWPackage.LUW_TABLE__INDEX_DATA_TABLE_SPACE:
+				return basicSetIndexDataTableSpace(null, msgs);
+			case LUWPackage.LUW_TABLE__LOB_DATA_TABLE_SPACE:
+				return basicSetLOBDataTableSpace(null, msgs);
+			case LUWPackage.LUW_TABLE__REGULAR_DATA_TABLE_SPACE:
+				return basicSetRegularDataTableSpace(null, msgs);
+			case LUWPackage.LUW_TABLE__DATA_PARTITIONS:
+				return ((InternalEList)getDataPartitions()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_TABLE__DATA_PARTITION_KEY:
+				return basicSetDataPartitionKey(null, msgs);
+			case LUWPackage.LUW_TABLE__OPTIONS:
+				return ((InternalEList)getOptions()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_TABLE__SECURITY_POLICY:
+				return basicSetSecurityPolicy(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_TABLE__VALUE_COMPRESSION:
+				return isValueCompression() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_TABLE__ROW_COMPRESSION:
+				return isRowCompression() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_TABLE__ROW_COMPRESSION_EMPTY:
+				return isRowCompressionEmpty() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_TABLE__COMPRESSION_MODE:
+				return getCompressionMode();
+			case LUWPackage.LUW_TABLE__PARTITION_KEY:
+				return getPartitionKey();
+			case LUWPackage.LUW_TABLE__INDEX_DATA_TABLE_SPACE:
+				if (resolve) return getIndexDataTableSpace();
+				return basicGetIndexDataTableSpace();
+			case LUWPackage.LUW_TABLE__LOB_DATA_TABLE_SPACE:
+				if (resolve) return getLOBDataTableSpace();
+				return basicGetLOBDataTableSpace();
+			case LUWPackage.LUW_TABLE__REGULAR_DATA_TABLE_SPACE:
+				if (resolve) return getRegularDataTableSpace();
+				return basicGetRegularDataTableSpace();
+			case LUWPackage.LUW_TABLE__DATA_PARTITIONS:
+				return getDataPartitions();
+			case LUWPackage.LUW_TABLE__DATA_PARTITION_KEY:
+				return getDataPartitionKey();
+			case LUWPackage.LUW_TABLE__PCT_FREE:
+				return new Integer(getPCTFree());
+			case LUWPackage.LUW_TABLE__RESTRICT_ON_DROP:
+				return isRestrictOnDrop() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_TABLE__PARTITION_MODE:
+				return getPartitionMode();
+			case LUWPackage.LUW_TABLE__APPEND_MODE:
+				return isAppendMode() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_TABLE__LOG_MODE:
+				return getLogMode();
+			case LUWPackage.LUW_TABLE__LOCK_SIZE_ROW:
+				return isLockSizeRow() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_TABLE__VOLATILE:
+				return isVolatile() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_TABLE__OPTIONS:
+				return getOptions();
+			case LUWPackage.LUW_TABLE__SECURITY_POLICY:
+				if (resolve) return getSecurityPolicy();
+				return basicGetSecurityPolicy();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_TABLE__VALUE_COMPRESSION:
+				setValueCompression(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_TABLE__ROW_COMPRESSION:
+				setRowCompression(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_TABLE__ROW_COMPRESSION_EMPTY:
+				setRowCompressionEmpty(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_TABLE__COMPRESSION_MODE:
+				setCompressionMode((LUWStorageTableCompressionMode)newValue);
+				return;
+			case LUWPackage.LUW_TABLE__PARTITION_KEY:
+				setPartitionKey((LUWPartitionKey)newValue);
+				return;
+			case LUWPackage.LUW_TABLE__INDEX_DATA_TABLE_SPACE:
+				setIndexDataTableSpace((LUWTableSpace)newValue);
+				return;
+			case LUWPackage.LUW_TABLE__LOB_DATA_TABLE_SPACE:
+				setLOBDataTableSpace((LUWTableSpace)newValue);
+				return;
+			case LUWPackage.LUW_TABLE__REGULAR_DATA_TABLE_SPACE:
+				setRegularDataTableSpace((LUWTableSpace)newValue);
+				return;
+			case LUWPackage.LUW_TABLE__DATA_PARTITIONS:
+				getDataPartitions().clear();
+				getDataPartitions().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_TABLE__DATA_PARTITION_KEY:
+				setDataPartitionKey((LUWDataPartitionKey)newValue);
+				return;
+			case LUWPackage.LUW_TABLE__PCT_FREE:
+				setPCTFree(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.LUW_TABLE__RESTRICT_ON_DROP:
+				setRestrictOnDrop(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_TABLE__PARTITION_MODE:
+				setPartitionMode((String)newValue);
+				return;
+			case LUWPackage.LUW_TABLE__APPEND_MODE:
+				setAppendMode(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_TABLE__LOG_MODE:
+				setLogMode((String)newValue);
+				return;
+			case LUWPackage.LUW_TABLE__LOCK_SIZE_ROW:
+				setLockSizeRow(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_TABLE__VOLATILE:
+				setVolatile(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_TABLE__OPTIONS:
+				getOptions().clear();
+				getOptions().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_TABLE__SECURITY_POLICY:
+				setSecurityPolicy((LUWSecurityPolicy)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_TABLE__VALUE_COMPRESSION:
+				setValueCompression(VALUE_COMPRESSION_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE__ROW_COMPRESSION:
+				setRowCompression(ROW_COMPRESSION_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE__ROW_COMPRESSION_EMPTY:
+				setRowCompressionEmpty(ROW_COMPRESSION_EMPTY_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE__COMPRESSION_MODE:
+				setCompressionMode(COMPRESSION_MODE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE__PARTITION_KEY:
+				setPartitionKey((LUWPartitionKey)null);
+				return;
+			case LUWPackage.LUW_TABLE__INDEX_DATA_TABLE_SPACE:
+				setIndexDataTableSpace((LUWTableSpace)null);
+				return;
+			case LUWPackage.LUW_TABLE__LOB_DATA_TABLE_SPACE:
+				setLOBDataTableSpace((LUWTableSpace)null);
+				return;
+			case LUWPackage.LUW_TABLE__REGULAR_DATA_TABLE_SPACE:
+				setRegularDataTableSpace((LUWTableSpace)null);
+				return;
+			case LUWPackage.LUW_TABLE__DATA_PARTITIONS:
+				getDataPartitions().clear();
+				return;
+			case LUWPackage.LUW_TABLE__DATA_PARTITION_KEY:
+				setDataPartitionKey((LUWDataPartitionKey)null);
+				return;
+			case LUWPackage.LUW_TABLE__PCT_FREE:
+				setPCTFree(PCT_FREE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE__RESTRICT_ON_DROP:
+				setRestrictOnDrop(RESTRICT_ON_DROP_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE__PARTITION_MODE:
+				setPartitionMode(PARTITION_MODE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE__APPEND_MODE:
+				setAppendMode(APPEND_MODE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE__LOG_MODE:
+				setLogMode(LOG_MODE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE__LOCK_SIZE_ROW:
+				setLockSizeRow(LOCK_SIZE_ROW_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE__VOLATILE:
+				setVolatile(VOLATILE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE__OPTIONS:
+				getOptions().clear();
+				return;
+			case LUWPackage.LUW_TABLE__SECURITY_POLICY:
+				setSecurityPolicy((LUWSecurityPolicy)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_TABLE__VALUE_COMPRESSION:
+				return valueCompression != VALUE_COMPRESSION_EDEFAULT;
+			case LUWPackage.LUW_TABLE__ROW_COMPRESSION:
+				return rowCompression != ROW_COMPRESSION_EDEFAULT;
+			case LUWPackage.LUW_TABLE__ROW_COMPRESSION_EMPTY:
+				return rowCompressionEmpty != ROW_COMPRESSION_EMPTY_EDEFAULT;
+			case LUWPackage.LUW_TABLE__COMPRESSION_MODE:
+				return compressionMode != COMPRESSION_MODE_EDEFAULT;
+			case LUWPackage.LUW_TABLE__PARTITION_KEY:
+				return partitionKey != null;
+			case LUWPackage.LUW_TABLE__INDEX_DATA_TABLE_SPACE:
+				return indexDataTableSpace != null;
+			case LUWPackage.LUW_TABLE__LOB_DATA_TABLE_SPACE:
+				return lobDataTableSpace != null;
+			case LUWPackage.LUW_TABLE__REGULAR_DATA_TABLE_SPACE:
+				return regularDataTableSpace != null;
+			case LUWPackage.LUW_TABLE__DATA_PARTITIONS:
+				return dataPartitions != null && !dataPartitions.isEmpty();
+			case LUWPackage.LUW_TABLE__DATA_PARTITION_KEY:
+				return dataPartitionKey != null;
+			case LUWPackage.LUW_TABLE__PCT_FREE:
+				return pctFree != PCT_FREE_EDEFAULT;
+			case LUWPackage.LUW_TABLE__RESTRICT_ON_DROP:
+				return restrictOnDrop != RESTRICT_ON_DROP_EDEFAULT;
+			case LUWPackage.LUW_TABLE__PARTITION_MODE:
+				return PARTITION_MODE_EDEFAULT == null ? partitionMode != null : !PARTITION_MODE_EDEFAULT.equals(partitionMode);
+			case LUWPackage.LUW_TABLE__APPEND_MODE:
+				return appendMode != APPEND_MODE_EDEFAULT;
+			case LUWPackage.LUW_TABLE__LOG_MODE:
+				return LOG_MODE_EDEFAULT == null ? logMode != null : !LOG_MODE_EDEFAULT.equals(logMode);
+			case LUWPackage.LUW_TABLE__LOCK_SIZE_ROW:
+				return lockSizeRow != LOCK_SIZE_ROW_EDEFAULT;
+			case LUWPackage.LUW_TABLE__VOLATILE:
+				return volatile_ != VOLATILE_EDEFAULT;
+			case LUWPackage.LUW_TABLE__OPTIONS:
+				return options != null && !options.isEmpty();
+			case LUWPackage.LUW_TABLE__SECURITY_POLICY:
+				return securityPolicy != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class baseClass) {
+		if (baseClass == LUWStorageTable.class) {
+			switch (derivedFeatureID) {
+				case LUWPackage.LUW_TABLE__VALUE_COMPRESSION: return LUWPackage.LUW_STORAGE_TABLE__VALUE_COMPRESSION;
+				case LUWPackage.LUW_TABLE__ROW_COMPRESSION: return LUWPackage.LUW_STORAGE_TABLE__ROW_COMPRESSION;
+				case LUWPackage.LUW_TABLE__ROW_COMPRESSION_EMPTY: return LUWPackage.LUW_STORAGE_TABLE__ROW_COMPRESSION_EMPTY;
+				case LUWPackage.LUW_TABLE__COMPRESSION_MODE: return LUWPackage.LUW_STORAGE_TABLE__COMPRESSION_MODE;
+				case LUWPackage.LUW_TABLE__PARTITION_KEY: return LUWPackage.LUW_STORAGE_TABLE__PARTITION_KEY;
+				case LUWPackage.LUW_TABLE__INDEX_DATA_TABLE_SPACE: return LUWPackage.LUW_STORAGE_TABLE__INDEX_DATA_TABLE_SPACE;
+				case LUWPackage.LUW_TABLE__LOB_DATA_TABLE_SPACE: return LUWPackage.LUW_STORAGE_TABLE__LOB_DATA_TABLE_SPACE;
+				case LUWPackage.LUW_TABLE__REGULAR_DATA_TABLE_SPACE: return LUWPackage.LUW_STORAGE_TABLE__REGULAR_DATA_TABLE_SPACE;
+				case LUWPackage.LUW_TABLE__DATA_PARTITIONS: return LUWPackage.LUW_STORAGE_TABLE__DATA_PARTITIONS;
+				case LUWPackage.LUW_TABLE__DATA_PARTITION_KEY: return LUWPackage.LUW_STORAGE_TABLE__DATA_PARTITION_KEY;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class baseClass) {
+		if (baseClass == LUWStorageTable.class) {
+			switch (baseFeatureID) {
+				case LUWPackage.LUW_STORAGE_TABLE__VALUE_COMPRESSION: return LUWPackage.LUW_TABLE__VALUE_COMPRESSION;
+				case LUWPackage.LUW_STORAGE_TABLE__ROW_COMPRESSION: return LUWPackage.LUW_TABLE__ROW_COMPRESSION;
+				case LUWPackage.LUW_STORAGE_TABLE__ROW_COMPRESSION_EMPTY: return LUWPackage.LUW_TABLE__ROW_COMPRESSION_EMPTY;
+				case LUWPackage.LUW_STORAGE_TABLE__COMPRESSION_MODE: return LUWPackage.LUW_TABLE__COMPRESSION_MODE;
+				case LUWPackage.LUW_STORAGE_TABLE__PARTITION_KEY: return LUWPackage.LUW_TABLE__PARTITION_KEY;
+				case LUWPackage.LUW_STORAGE_TABLE__INDEX_DATA_TABLE_SPACE: return LUWPackage.LUW_TABLE__INDEX_DATA_TABLE_SPACE;
+				case LUWPackage.LUW_STORAGE_TABLE__LOB_DATA_TABLE_SPACE: return LUWPackage.LUW_TABLE__LOB_DATA_TABLE_SPACE;
+				case LUWPackage.LUW_STORAGE_TABLE__REGULAR_DATA_TABLE_SPACE: return LUWPackage.LUW_TABLE__REGULAR_DATA_TABLE_SPACE;
+				case LUWPackage.LUW_STORAGE_TABLE__DATA_PARTITIONS: return LUWPackage.LUW_TABLE__DATA_PARTITIONS;
+				case LUWPackage.LUW_STORAGE_TABLE__DATA_PARTITION_KEY: return LUWPackage.LUW_TABLE__DATA_PARTITION_KEY;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (valueCompression: "); //$NON-NLS-1$
+		result.append(valueCompression);
+		result.append(", rowCompression: "); //$NON-NLS-1$
+		result.append(rowCompression);
+		result.append(", rowCompressionEmpty: "); //$NON-NLS-1$
+		result.append(rowCompressionEmpty);
+		result.append(", compressionMode: "); //$NON-NLS-1$
+		result.append(compressionMode);
+		result.append(", PCTFree: "); //$NON-NLS-1$
+		result.append(pctFree);
+		result.append(", restrictOnDrop: "); //$NON-NLS-1$
+		result.append(restrictOnDrop);
+		result.append(", partitionMode: "); //$NON-NLS-1$
+		result.append(partitionMode);
+		result.append(", appendMode: "); //$NON-NLS-1$
+		result.append(appendMode);
+		result.append(", logMode: "); //$NON-NLS-1$
+		result.append(logMode);
+		result.append(", lockSizeRow: "); //$NON-NLS-1$
+		result.append(lockSizeRow);
+		result.append(", volatile: "); //$NON-NLS-1$
+		result.append(volatile_);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWTableImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWTableSpaceImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWTableSpaceImpl.java
new file mode 100644
index 0000000..97ca485
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWTableSpaceImpl.java
@@ -0,0 +1,2481 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.UnitType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.AverageTableSizeType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.FileSystemCachingType;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWBufferPool;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDataPartition;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabaseContainer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWIndex;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionGroup;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageGroup;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWStorageTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryStorageTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.ManagementType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.PageSizeType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.SystemType;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.TableSpaceType;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Table Space</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getTemporaryStorageTables <em>Temporary Storage Tables</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getTablespaceType <em>Tablespace Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getManagementType <em>Management Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getExtentSize <em>Extent Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getPreFetchSize <em>Pre Fetch Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getOverhead <em>Overhead</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getTransferRate <em>Transfer Rate</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#isRecoverDroppedTableOn <em>Recover Dropped Table On</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getPageSize <em>Page Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getSize <em>Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#isAutoResize <em>Auto Resize</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getInitialSize <em>Initial Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getIncreaseSize <em>Increase Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getMaximumSize <em>Maximum Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getInitialSizeUnit <em>Initial Size Unit</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getMaximumSizeUnit <em>Maximum Size Unit</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getIncreaseSizeUnit <em>Increase Size Unit</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getIncreasePercent <em>Increase Percent</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getFileSystemCaching <em>File System Caching</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getAverageSeekTime <em>Average Seek Time</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getRotationSpeed <em>Rotation Speed</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getTransfer <em>Transfer</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getSystemType <em>System Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getAverageTableSize <em>Average Table Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getExternalContainerCount <em>External Container Count</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#isInheritOverhead <em>Inherit Overhead</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#isInheritTransferate <em>Inherit Transferate</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#isRebalance <em>Rebalance</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getDataTag <em>Data Tag</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#isSuspendRebalance <em>Suspend Rebalance</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#isResumeRebalance <em>Resume Rebalance</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getGroup <em>Group</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getContainers <em>Containers</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getBufferPool <em>Buffer Pool</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getIndexDataTables <em>Index Data Tables</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getLOBDataTables <em>LOB Data Tables</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getRegularDataTables <em>Regular Data Tables</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getDatabase <em>Database</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getLOBDataPartition <em>LOB Data Partition</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getRegularDataPartition <em>Regular Data Partition</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getIndexes <em>Indexes</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getIndexDataPartition <em>Index Data Partition</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTableSpaceImpl#getStorageGroup <em>Storage Group</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWTableSpaceImpl extends SQLObjectImpl implements LUWTableSpace {
+	/**
+	 * The cached value of the '{@link #getTemporaryStorageTables() <em>Temporary Storage Tables</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTemporaryStorageTables()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList temporaryStorageTables;
+
+	/**
+	 * The default value of the '{@link #getTablespaceType() <em>Tablespace Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTablespaceType()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final TableSpaceType TABLESPACE_TYPE_EDEFAULT = TableSpaceType.REGULAR_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getTablespaceType() <em>Tablespace Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTablespaceType()
+	 * @generated
+	 * @ordered
+	 */
+	protected TableSpaceType tablespaceType = TABLESPACE_TYPE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getManagementType() <em>Management Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getManagementType()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final ManagementType MANAGEMENT_TYPE_EDEFAULT = ManagementType.SYSTEM_MANAGED_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getManagementType() <em>Management Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getManagementType()
+	 * @generated
+	 * @ordered
+	 */
+	protected ManagementType managementType = MANAGEMENT_TYPE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getExtentSize() <em>Extent Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getExtentSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int EXTENT_SIZE_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getExtentSize() <em>Extent Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getExtentSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected int extentSize = EXTENT_SIZE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getPreFetchSize() <em>Pre Fetch Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPreFetchSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int PRE_FETCH_SIZE_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getPreFetchSize() <em>Pre Fetch Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPreFetchSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected int preFetchSize = PRE_FETCH_SIZE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getOverhead() <em>Overhead</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOverhead()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double OVERHEAD_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getOverhead() <em>Overhead</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOverhead()
+	 * @generated
+	 * @ordered
+	 */
+	protected double overhead = OVERHEAD_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getTransferRate() <em>Transfer Rate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTransferRate()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double TRANSFER_RATE_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getTransferRate() <em>Transfer Rate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTransferRate()
+	 * @generated
+	 * @ordered
+	 */
+	protected double transferRate = TRANSFER_RATE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isRecoverDroppedTableOn() <em>Recover Dropped Table On</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isRecoverDroppedTableOn()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean RECOVER_DROPPED_TABLE_ON_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isRecoverDroppedTableOn() <em>Recover Dropped Table On</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isRecoverDroppedTableOn()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean recoverDroppedTableOn = RECOVER_DROPPED_TABLE_ON_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getPageSize() <em>Page Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPageSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final PageSizeType PAGE_SIZE_EDEFAULT = PageSizeType.FOUR_K_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getPageSize() <em>Page Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPageSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected PageSizeType pageSize = PAGE_SIZE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getSize() <em>Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long SIZE_EDEFAULT = 0L;
+
+	/**
+	 * The cached value of the '{@link #getSize() <em>Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected long size = SIZE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isAutoResize() <em>Auto Resize</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isAutoResize()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean AUTO_RESIZE_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isAutoResize() <em>Auto Resize</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isAutoResize()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean autoResize = AUTO_RESIZE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getInitialSize() <em>Initial Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getInitialSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long INITIAL_SIZE_EDEFAULT = 0L;
+
+	/**
+	 * The cached value of the '{@link #getInitialSize() <em>Initial Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getInitialSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected long initialSize = INITIAL_SIZE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getIncreaseSize() <em>Increase Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIncreaseSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long INCREASE_SIZE_EDEFAULT = 0L;
+
+	/**
+	 * The cached value of the '{@link #getIncreaseSize() <em>Increase Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIncreaseSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected long increaseSize = INCREASE_SIZE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getMaximumSize() <em>Maximum Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMaximumSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long MAXIMUM_SIZE_EDEFAULT = 0L;
+
+	/**
+	 * The cached value of the '{@link #getMaximumSize() <em>Maximum Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMaximumSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected long maximumSize = MAXIMUM_SIZE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getInitialSizeUnit() <em>Initial Size Unit</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getInitialSizeUnit()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final UnitType INITIAL_SIZE_UNIT_EDEFAULT = UnitType.K_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getInitialSizeUnit() <em>Initial Size Unit</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getInitialSizeUnit()
+	 * @generated
+	 * @ordered
+	 */
+	protected UnitType initialSizeUnit = INITIAL_SIZE_UNIT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getMaximumSizeUnit() <em>Maximum Size Unit</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMaximumSizeUnit()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final UnitType MAXIMUM_SIZE_UNIT_EDEFAULT = UnitType.K_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getMaximumSizeUnit() <em>Maximum Size Unit</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMaximumSizeUnit()
+	 * @generated
+	 * @ordered
+	 */
+	protected UnitType maximumSizeUnit = MAXIMUM_SIZE_UNIT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getIncreaseSizeUnit() <em>Increase Size Unit</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIncreaseSizeUnit()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final UnitType INCREASE_SIZE_UNIT_EDEFAULT = UnitType.K_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getIncreaseSizeUnit() <em>Increase Size Unit</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIncreaseSizeUnit()
+	 * @generated
+	 * @ordered
+	 */
+	protected UnitType increaseSizeUnit = INCREASE_SIZE_UNIT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getIncreasePercent() <em>Increase Percent</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIncreasePercent()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int INCREASE_PERCENT_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getIncreasePercent() <em>Increase Percent</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIncreasePercent()
+	 * @generated
+	 * @ordered
+	 */
+	protected int increasePercent = INCREASE_PERCENT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getFileSystemCaching() <em>File System Caching</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFileSystemCaching()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final FileSystemCachingType FILE_SYSTEM_CACHING_EDEFAULT = FileSystemCachingType.NONE_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getFileSystemCaching() <em>File System Caching</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFileSystemCaching()
+	 * @generated
+	 * @ordered
+	 */
+	protected FileSystemCachingType fileSystemCaching = FILE_SYSTEM_CACHING_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getAverageSeekTime() <em>Average Seek Time</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAverageSeekTime()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double AVERAGE_SEEK_TIME_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getAverageSeekTime() <em>Average Seek Time</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAverageSeekTime()
+	 * @generated
+	 * @ordered
+	 */
+	protected double averageSeekTime = AVERAGE_SEEK_TIME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getRotationSpeed() <em>Rotation Speed</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRotationSpeed()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int ROTATION_SPEED_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getRotationSpeed() <em>Rotation Speed</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRotationSpeed()
+	 * @generated
+	 * @ordered
+	 */
+	protected int rotationSpeed = ROTATION_SPEED_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getTransfer() <em>Transfer</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTransfer()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double TRANSFER_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getTransfer() <em>Transfer</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTransfer()
+	 * @generated
+	 * @ordered
+	 */
+	protected double transfer = TRANSFER_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getSystemType() <em>System Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSystemType()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final SystemType SYSTEM_TYPE_EDEFAULT = SystemType.SATA_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getSystemType() <em>System Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSystemType()
+	 * @generated
+	 * @ordered
+	 */
+	protected SystemType systemType = SYSTEM_TYPE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getAverageTableSize() <em>Average Table Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAverageTableSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final AverageTableSizeType AVERAGE_TABLE_SIZE_EDEFAULT = AverageTableSizeType.LESS_THAN_50MB_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getAverageTableSize() <em>Average Table Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAverageTableSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected AverageTableSizeType averageTableSize = AVERAGE_TABLE_SIZE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getExternalContainerCount() <em>External Container Count</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getExternalContainerCount()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int EXTERNAL_CONTAINER_COUNT_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getExternalContainerCount() <em>External Container Count</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getExternalContainerCount()
+	 * @generated
+	 * @ordered
+	 */
+	protected int externalContainerCount = EXTERNAL_CONTAINER_COUNT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isInheritOverhead() <em>Inherit Overhead</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isInheritOverhead()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean INHERIT_OVERHEAD_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isInheritOverhead() <em>Inherit Overhead</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isInheritOverhead()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean inheritOverhead = INHERIT_OVERHEAD_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isInheritTransferate() <em>Inherit Transferate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isInheritTransferate()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean INHERIT_TRANSFERATE_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isInheritTransferate() <em>Inherit Transferate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isInheritTransferate()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean inheritTransferate = INHERIT_TRANSFERATE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isRebalance() <em>Rebalance</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isRebalance()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean REBALANCE_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isRebalance() <em>Rebalance</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isRebalance()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean rebalance = REBALANCE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getDataTag() <em>Data Tag</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDataTag()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String DATA_TAG_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getDataTag() <em>Data Tag</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDataTag()
+	 * @generated
+	 * @ordered
+	 */
+	protected String dataTag = DATA_TAG_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isSuspendRebalance() <em>Suspend Rebalance</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSuspendRebalance()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean SUSPEND_REBALANCE_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isSuspendRebalance() <em>Suspend Rebalance</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSuspendRebalance()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean suspendRebalance = SUSPEND_REBALANCE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isResumeRebalance() <em>Resume Rebalance</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isResumeRebalance()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean RESUME_REBALANCE_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isResumeRebalance() <em>Resume Rebalance</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isResumeRebalance()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean resumeRebalance = RESUME_REBALANCE_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getGroup() <em>Group</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getGroup()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWPartitionGroup group;
+
+	/**
+	 * The cached value of the '{@link #getContainers() <em>Containers</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getContainers()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList containers;
+
+	/**
+	 * The cached value of the '{@link #getBufferPool() <em>Buffer Pool</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBufferPool()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWBufferPool bufferPool;
+
+	/**
+	 * The cached value of the '{@link #getIndexDataTables() <em>Index Data Tables</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIndexDataTables()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList indexDataTables;
+
+	/**
+	 * The cached value of the '{@link #getLOBDataTables() <em>LOB Data Tables</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLOBDataTables()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList lobDataTables;
+
+	/**
+	 * The cached value of the '{@link #getRegularDataTables() <em>Regular Data Tables</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRegularDataTables()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList regularDataTables;
+
+	/**
+	 * The cached value of the '{@link #getDatabase() <em>Database</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDatabase()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWDatabase database;
+
+	/**
+	 * The cached value of the '{@link #getLOBDataPartition() <em>LOB Data Partition</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLOBDataPartition()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList lobDataPartition;
+
+	/**
+	 * The cached value of the '{@link #getRegularDataPartition() <em>Regular Data Partition</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRegularDataPartition()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList regularDataPartition;
+
+	/**
+	 * The cached value of the '{@link #getIndexes() <em>Indexes</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIndexes()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList indexes;
+
+	/**
+	 * The cached value of the '{@link #getIndexDataPartition() <em>Index Data Partition</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIndexDataPartition()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList indexDataPartition;
+
+	/**
+	 * The cached value of the '{@link #getStorageGroup() <em>Storage Group</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getStorageGroup()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWStorageGroup storageGroup;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWTableSpaceImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_TABLE_SPACE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getTemporaryStorageTables() {
+		if (temporaryStorageTables == null) {
+			temporaryStorageTables = new EObjectWithInverseResolvingEList(LUWTemporaryStorageTable.class, this, LUWPackage.LUW_TABLE_SPACE__TEMPORARY_STORAGE_TABLES, LUWPackage.LUW_TEMPORARY_STORAGE_TABLE__USER_TEMPORARY_TABLE_SPACE);
+		}
+		return temporaryStorageTables;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TableSpaceType getTablespaceType() {
+		return tablespaceType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTablespaceType(TableSpaceType newTablespaceType) {
+		TableSpaceType oldTablespaceType = tablespaceType;
+		tablespaceType = newTablespaceType == null ? TABLESPACE_TYPE_EDEFAULT : newTablespaceType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__TABLESPACE_TYPE, oldTablespaceType, tablespaceType));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ManagementType getManagementType() {
+		return managementType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setManagementType(ManagementType newManagementType) {
+		ManagementType oldManagementType = managementType;
+		managementType = newManagementType == null ? MANAGEMENT_TYPE_EDEFAULT : newManagementType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__MANAGEMENT_TYPE, oldManagementType, managementType));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getExtentSize() {
+		return extentSize;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setExtentSize(int newExtentSize) {
+		int oldExtentSize = extentSize;
+		extentSize = newExtentSize;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__EXTENT_SIZE, oldExtentSize, extentSize));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getPreFetchSize() {
+		return preFetchSize;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPreFetchSize(int newPreFetchSize) {
+		int oldPreFetchSize = preFetchSize;
+		preFetchSize = newPreFetchSize;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__PRE_FETCH_SIZE, oldPreFetchSize, preFetchSize));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getOverhead() {
+		return overhead;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOverhead(double newOverhead) {
+		double oldOverhead = overhead;
+		overhead = newOverhead;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__OVERHEAD, oldOverhead, overhead));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getTransferRate() {
+		return transferRate;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTransferRate(double newTransferRate) {
+		double oldTransferRate = transferRate;
+		transferRate = newTransferRate;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__TRANSFER_RATE, oldTransferRate, transferRate));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isRecoverDroppedTableOn() {
+		return recoverDroppedTableOn;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRecoverDroppedTableOn(boolean newRecoverDroppedTableOn) {
+		boolean oldRecoverDroppedTableOn = recoverDroppedTableOn;
+		recoverDroppedTableOn = newRecoverDroppedTableOn;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__RECOVER_DROPPED_TABLE_ON, oldRecoverDroppedTableOn, recoverDroppedTableOn));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PageSizeType getPageSize() {
+		return pageSize;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPageSize(PageSizeType newPageSize) {
+		PageSizeType oldPageSize = pageSize;
+		pageSize = newPageSize == null ? PAGE_SIZE_EDEFAULT : newPageSize;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__PAGE_SIZE, oldPageSize, pageSize));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public long getSize() {
+		return size;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSize(long newSize) {
+		long oldSize = size;
+		size = newSize;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__SIZE, oldSize, size));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isAutoResize() {
+		return autoResize;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setAutoResize(boolean newAutoResize) {
+		boolean oldAutoResize = autoResize;
+		autoResize = newAutoResize;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__AUTO_RESIZE, oldAutoResize, autoResize));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public long getInitialSize() {
+		return initialSize;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setInitialSize(long newInitialSize) {
+		long oldInitialSize = initialSize;
+		initialSize = newInitialSize;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__INITIAL_SIZE, oldInitialSize, initialSize));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public long getIncreaseSize() {
+		return increaseSize;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIncreaseSize(long newIncreaseSize) {
+		long oldIncreaseSize = increaseSize;
+		increaseSize = newIncreaseSize;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__INCREASE_SIZE, oldIncreaseSize, increaseSize));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public long getMaximumSize() {
+		return maximumSize;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setMaximumSize(long newMaximumSize) {
+		long oldMaximumSize = maximumSize;
+		maximumSize = newMaximumSize;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__MAXIMUM_SIZE, oldMaximumSize, maximumSize));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public UnitType getInitialSizeUnit() {
+		return initialSizeUnit;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setInitialSizeUnit(UnitType newInitialSizeUnit) {
+		UnitType oldInitialSizeUnit = initialSizeUnit;
+		initialSizeUnit = newInitialSizeUnit == null ? INITIAL_SIZE_UNIT_EDEFAULT : newInitialSizeUnit;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__INITIAL_SIZE_UNIT, oldInitialSizeUnit, initialSizeUnit));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public UnitType getMaximumSizeUnit() {
+		return maximumSizeUnit;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setMaximumSizeUnit(UnitType newMaximumSizeUnit) {
+		UnitType oldMaximumSizeUnit = maximumSizeUnit;
+		maximumSizeUnit = newMaximumSizeUnit == null ? MAXIMUM_SIZE_UNIT_EDEFAULT : newMaximumSizeUnit;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__MAXIMUM_SIZE_UNIT, oldMaximumSizeUnit, maximumSizeUnit));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public UnitType getIncreaseSizeUnit() {
+		return increaseSizeUnit;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIncreaseSizeUnit(UnitType newIncreaseSizeUnit) {
+		UnitType oldIncreaseSizeUnit = increaseSizeUnit;
+		increaseSizeUnit = newIncreaseSizeUnit == null ? INCREASE_SIZE_UNIT_EDEFAULT : newIncreaseSizeUnit;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__INCREASE_SIZE_UNIT, oldIncreaseSizeUnit, increaseSizeUnit));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getIncreasePercent() {
+		return increasePercent;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIncreasePercent(int newIncreasePercent) {
+		int oldIncreasePercent = increasePercent;
+		increasePercent = newIncreasePercent;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__INCREASE_PERCENT, oldIncreasePercent, increasePercent));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public FileSystemCachingType getFileSystemCaching() {
+		return fileSystemCaching;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFileSystemCaching(FileSystemCachingType newFileSystemCaching) {
+		FileSystemCachingType oldFileSystemCaching = fileSystemCaching;
+		fileSystemCaching = newFileSystemCaching == null ? FILE_SYSTEM_CACHING_EDEFAULT : newFileSystemCaching;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__FILE_SYSTEM_CACHING, oldFileSystemCaching, fileSystemCaching));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getAverageSeekTime() {
+		return averageSeekTime;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setAverageSeekTime(double newAverageSeekTime) {
+		double oldAverageSeekTime = averageSeekTime;
+		averageSeekTime = newAverageSeekTime;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__AVERAGE_SEEK_TIME, oldAverageSeekTime, averageSeekTime));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getRotationSpeed() {
+		return rotationSpeed;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRotationSpeed(int newRotationSpeed) {
+		int oldRotationSpeed = rotationSpeed;
+		rotationSpeed = newRotationSpeed;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__ROTATION_SPEED, oldRotationSpeed, rotationSpeed));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getTransfer() {
+		return transfer;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTransfer(double newTransfer) {
+		double oldTransfer = transfer;
+		transfer = newTransfer;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__TRANSFER, oldTransfer, transfer));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SystemType getSystemType() {
+		return systemType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSystemType(SystemType newSystemType) {
+		SystemType oldSystemType = systemType;
+		systemType = newSystemType == null ? SYSTEM_TYPE_EDEFAULT : newSystemType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__SYSTEM_TYPE, oldSystemType, systemType));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AverageTableSizeType getAverageTableSize() {
+		return averageTableSize;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setAverageTableSize(AverageTableSizeType newAverageTableSize) {
+		AverageTableSizeType oldAverageTableSize = averageTableSize;
+		averageTableSize = newAverageTableSize == null ? AVERAGE_TABLE_SIZE_EDEFAULT : newAverageTableSize;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__AVERAGE_TABLE_SIZE, oldAverageTableSize, averageTableSize));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getExternalContainerCount() {
+		return externalContainerCount;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setExternalContainerCount(int newExternalContainerCount) {
+		int oldExternalContainerCount = externalContainerCount;
+		externalContainerCount = newExternalContainerCount;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__EXTERNAL_CONTAINER_COUNT, oldExternalContainerCount, externalContainerCount));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isInheritOverhead() {
+		return inheritOverhead;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setInheritOverhead(boolean newInheritOverhead) {
+		boolean oldInheritOverhead = inheritOverhead;
+		inheritOverhead = newInheritOverhead;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__INHERIT_OVERHEAD, oldInheritOverhead, inheritOverhead));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isInheritTransferate() {
+		return inheritTransferate;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setInheritTransferate(boolean newInheritTransferate) {
+		boolean oldInheritTransferate = inheritTransferate;
+		inheritTransferate = newInheritTransferate;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__INHERIT_TRANSFERATE, oldInheritTransferate, inheritTransferate));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isRebalance() {
+		return rebalance;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRebalance(boolean newRebalance) {
+		boolean oldRebalance = rebalance;
+		rebalance = newRebalance;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__REBALANCE, oldRebalance, rebalance));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getDataTag() {
+		return dataTag;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDataTag(String newDataTag) {
+		String oldDataTag = dataTag;
+		dataTag = newDataTag;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__DATA_TAG, oldDataTag, dataTag));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isSuspendRebalance() {
+		return suspendRebalance;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSuspendRebalance(boolean newSuspendRebalance) {
+		boolean oldSuspendRebalance = suspendRebalance;
+		suspendRebalance = newSuspendRebalance;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__SUSPEND_REBALANCE, oldSuspendRebalance, suspendRebalance));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isResumeRebalance() {
+		return resumeRebalance;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setResumeRebalance(boolean newResumeRebalance) {
+		boolean oldResumeRebalance = resumeRebalance;
+		resumeRebalance = newResumeRebalance;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__RESUME_REBALANCE, oldResumeRebalance, resumeRebalance));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWPartitionGroup getGroup() {
+		if (group != null && group.eIsProxy()) {
+			InternalEObject oldGroup = (InternalEObject)group;
+			group = (LUWPartitionGroup)eResolveProxy(oldGroup);
+			if (group != oldGroup) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_TABLE_SPACE__GROUP, oldGroup, group));
+			}
+		}
+		return group;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWPartitionGroup basicGetGroup() {
+		return group;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetGroup(LUWPartitionGroup newGroup, NotificationChain msgs) {
+		LUWPartitionGroup oldGroup = group;
+		group = newGroup;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__GROUP, oldGroup, newGroup);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setGroup(LUWPartitionGroup newGroup) {
+		if (newGroup != group) {
+			NotificationChain msgs = null;
+			if (group != null)
+				msgs = ((InternalEObject)group).eInverseRemove(this, LUWPackage.LUW_PARTITION_GROUP__TABLE_SPACES, LUWPartitionGroup.class, msgs);
+			if (newGroup != null)
+				msgs = ((InternalEObject)newGroup).eInverseAdd(this, LUWPackage.LUW_PARTITION_GROUP__TABLE_SPACES, LUWPartitionGroup.class, msgs);
+			msgs = basicSetGroup(newGroup, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__GROUP, newGroup, newGroup));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getContainers() {
+		if (containers == null) {
+			containers = new EObjectContainmentWithInverseEList(LUWDatabaseContainer.class, this, LUWPackage.LUW_TABLE_SPACE__CONTAINERS, LUWPackage.LUW_DATABASE_CONTAINER__TABLE_SPACE);
+		}
+		return containers;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWBufferPool getBufferPool() {
+		if (bufferPool != null && bufferPool.eIsProxy()) {
+			InternalEObject oldBufferPool = (InternalEObject)bufferPool;
+			bufferPool = (LUWBufferPool)eResolveProxy(oldBufferPool);
+			if (bufferPool != oldBufferPool) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_TABLE_SPACE__BUFFER_POOL, oldBufferPool, bufferPool));
+			}
+		}
+		return bufferPool;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWBufferPool basicGetBufferPool() {
+		return bufferPool;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetBufferPool(LUWBufferPool newBufferPool, NotificationChain msgs) {
+		LUWBufferPool oldBufferPool = bufferPool;
+		bufferPool = newBufferPool;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__BUFFER_POOL, oldBufferPool, newBufferPool);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBufferPool(LUWBufferPool newBufferPool) {
+		if (newBufferPool != bufferPool) {
+			NotificationChain msgs = null;
+			if (bufferPool != null)
+				msgs = ((InternalEObject)bufferPool).eInverseRemove(this, LUWPackage.LUW_BUFFER_POOL__TABLE_SPACES, LUWBufferPool.class, msgs);
+			if (newBufferPool != null)
+				msgs = ((InternalEObject)newBufferPool).eInverseAdd(this, LUWPackage.LUW_BUFFER_POOL__TABLE_SPACES, LUWBufferPool.class, msgs);
+			msgs = basicSetBufferPool(newBufferPool, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__BUFFER_POOL, newBufferPool, newBufferPool));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getRegularDataTables() {
+		if (regularDataTables == null) {
+			regularDataTables = new EObjectWithInverseResolvingEList(LUWStorageTable.class, this, LUWPackage.LUW_TABLE_SPACE__REGULAR_DATA_TABLES, LUWPackage.LUW_STORAGE_TABLE__REGULAR_DATA_TABLE_SPACE);
+		}
+		return regularDataTables;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWDatabase getDatabase() {
+		if (database != null && database.eIsProxy()) {
+			InternalEObject oldDatabase = (InternalEObject)database;
+			database = (LUWDatabase)eResolveProxy(oldDatabase);
+			if (database != oldDatabase) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_TABLE_SPACE__DATABASE, oldDatabase, database));
+			}
+		}
+		return database;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWDatabase basicGetDatabase() {
+		return database;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetDatabase(LUWDatabase newDatabase, NotificationChain msgs) {
+		LUWDatabase oldDatabase = database;
+		database = newDatabase;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__DATABASE, oldDatabase, newDatabase);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDatabase(LUWDatabase newDatabase) {
+		if (newDatabase != database) {
+			NotificationChain msgs = null;
+			if (database != null)
+				msgs = ((InternalEObject)database).eInverseRemove(this, LUWPackage.LUW_DATABASE__TABLESPACES, LUWDatabase.class, msgs);
+			if (newDatabase != null)
+				msgs = ((InternalEObject)newDatabase).eInverseAdd(this, LUWPackage.LUW_DATABASE__TABLESPACES, LUWDatabase.class, msgs);
+			msgs = basicSetDatabase(newDatabase, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__DATABASE, newDatabase, newDatabase));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getLOBDataPartition() {
+		if (lobDataPartition == null) {
+			lobDataPartition = new EObjectWithInverseResolvingEList(LUWDataPartition.class, this, LUWPackage.LUW_TABLE_SPACE__LOB_DATA_PARTITION, LUWPackage.LUW_DATA_PARTITION__LOB_DATA_TABLE_SPACE);
+		}
+		return lobDataPartition;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getRegularDataPartition() {
+		if (regularDataPartition == null) {
+			regularDataPartition = new EObjectWithInverseResolvingEList(LUWDataPartition.class, this, LUWPackage.LUW_TABLE_SPACE__REGULAR_DATA_PARTITION, LUWPackage.LUW_DATA_PARTITION__REGULAR_DATA_TABLE_SPACE);
+		}
+		return regularDataPartition;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getIndexes() {
+		if (indexes == null) {
+			indexes = new EObjectWithInverseResolvingEList(LUWIndex.class, this, LUWPackage.LUW_TABLE_SPACE__INDEXES, LUWPackage.LUW_INDEX__TABLESPACE);
+		}
+		return indexes;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getIndexDataPartition() {
+		if (indexDataPartition == null) {
+			indexDataPartition = new EObjectWithInverseResolvingEList(LUWDataPartition.class, this, LUWPackage.LUW_TABLE_SPACE__INDEX_DATA_PARTITION, LUWPackage.LUW_DATA_PARTITION__INDEX_DATA_TABLE_SPACE);
+		}
+		return indexDataPartition;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWStorageGroup getStorageGroup() {
+		if (storageGroup != null && storageGroup.eIsProxy()) {
+			InternalEObject oldStorageGroup = (InternalEObject)storageGroup;
+			storageGroup = (LUWStorageGroup)eResolveProxy(oldStorageGroup);
+			if (storageGroup != oldStorageGroup) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_TABLE_SPACE__STORAGE_GROUP, oldStorageGroup, storageGroup));
+			}
+		}
+		return storageGroup;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWStorageGroup basicGetStorageGroup() {
+		return storageGroup;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetStorageGroup(LUWStorageGroup newStorageGroup, NotificationChain msgs) {
+		LUWStorageGroup oldStorageGroup = storageGroup;
+		storageGroup = newStorageGroup;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__STORAGE_GROUP, oldStorageGroup, newStorageGroup);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStorageGroup(LUWStorageGroup newStorageGroup) {
+		if (newStorageGroup != storageGroup) {
+			NotificationChain msgs = null;
+			if (storageGroup != null)
+				msgs = ((InternalEObject)storageGroup).eInverseRemove(this, LUWPackage.LUW_STORAGE_GROUP__TABLE_SPACES, LUWStorageGroup.class, msgs);
+			if (newStorageGroup != null)
+				msgs = ((InternalEObject)newStorageGroup).eInverseAdd(this, LUWPackage.LUW_STORAGE_GROUP__TABLE_SPACES, LUWStorageGroup.class, msgs);
+			msgs = basicSetStorageGroup(newStorageGroup, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TABLE_SPACE__STORAGE_GROUP, newStorageGroup, newStorageGroup));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getIndexDataTables() {
+		if (indexDataTables == null) {
+			indexDataTables = new EObjectWithInverseResolvingEList(LUWStorageTable.class, this, LUWPackage.LUW_TABLE_SPACE__INDEX_DATA_TABLES, LUWPackage.LUW_STORAGE_TABLE__INDEX_DATA_TABLE_SPACE);
+		}
+		return indexDataTables;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getLOBDataTables() {
+		if (lobDataTables == null) {
+			lobDataTables = new EObjectWithInverseResolvingEList(LUWStorageTable.class, this, LUWPackage.LUW_TABLE_SPACE__LOB_DATA_TABLES, LUWPackage.LUW_STORAGE_TABLE__LOB_DATA_TABLE_SPACE);
+		}
+		return lobDataTables;
+	}
+
+		/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 */
+	public List getTables() 
+	{
+		List tableList = new ArrayList();
+		tableList.addAll( getRegularDataTables() );
+		tableList.addAll( getIndexDataTables() );
+		tableList.addAll( getLOBDataTables() );
+		return tableList;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_TABLE_SPACE__TEMPORARY_STORAGE_TABLES:
+				return ((InternalEList)getTemporaryStorageTables()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_TABLE_SPACE__GROUP:
+				if (group != null)
+					msgs = ((InternalEObject)group).eInverseRemove(this, LUWPackage.LUW_PARTITION_GROUP__TABLE_SPACES, LUWPartitionGroup.class, msgs);
+				return basicSetGroup((LUWPartitionGroup)otherEnd, msgs);
+			case LUWPackage.LUW_TABLE_SPACE__CONTAINERS:
+				return ((InternalEList)getContainers()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_TABLE_SPACE__BUFFER_POOL:
+				if (bufferPool != null)
+					msgs = ((InternalEObject)bufferPool).eInverseRemove(this, LUWPackage.LUW_BUFFER_POOL__TABLE_SPACES, LUWBufferPool.class, msgs);
+				return basicSetBufferPool((LUWBufferPool)otherEnd, msgs);
+			case LUWPackage.LUW_TABLE_SPACE__INDEX_DATA_TABLES:
+				return ((InternalEList)getIndexDataTables()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_TABLE_SPACE__LOB_DATA_TABLES:
+				return ((InternalEList)getLOBDataTables()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_TABLE_SPACE__REGULAR_DATA_TABLES:
+				return ((InternalEList)getRegularDataTables()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_TABLE_SPACE__DATABASE:
+				if (database != null)
+					msgs = ((InternalEObject)database).eInverseRemove(this, LUWPackage.LUW_DATABASE__TABLESPACES, LUWDatabase.class, msgs);
+				return basicSetDatabase((LUWDatabase)otherEnd, msgs);
+			case LUWPackage.LUW_TABLE_SPACE__LOB_DATA_PARTITION:
+				return ((InternalEList)getLOBDataPartition()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_TABLE_SPACE__REGULAR_DATA_PARTITION:
+				return ((InternalEList)getRegularDataPartition()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_TABLE_SPACE__INDEXES:
+				return ((InternalEList)getIndexes()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_TABLE_SPACE__INDEX_DATA_PARTITION:
+				return ((InternalEList)getIndexDataPartition()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_TABLE_SPACE__STORAGE_GROUP:
+				if (storageGroup != null)
+					msgs = ((InternalEObject)storageGroup).eInverseRemove(this, LUWPackage.LUW_STORAGE_GROUP__TABLE_SPACES, LUWStorageGroup.class, msgs);
+				return basicSetStorageGroup((LUWStorageGroup)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_TABLE_SPACE__TEMPORARY_STORAGE_TABLES:
+				return ((InternalEList)getTemporaryStorageTables()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_TABLE_SPACE__GROUP:
+				return basicSetGroup(null, msgs);
+			case LUWPackage.LUW_TABLE_SPACE__CONTAINERS:
+				return ((InternalEList)getContainers()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_TABLE_SPACE__BUFFER_POOL:
+				return basicSetBufferPool(null, msgs);
+			case LUWPackage.LUW_TABLE_SPACE__INDEX_DATA_TABLES:
+				return ((InternalEList)getIndexDataTables()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_TABLE_SPACE__LOB_DATA_TABLES:
+				return ((InternalEList)getLOBDataTables()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_TABLE_SPACE__REGULAR_DATA_TABLES:
+				return ((InternalEList)getRegularDataTables()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_TABLE_SPACE__DATABASE:
+				return basicSetDatabase(null, msgs);
+			case LUWPackage.LUW_TABLE_SPACE__LOB_DATA_PARTITION:
+				return ((InternalEList)getLOBDataPartition()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_TABLE_SPACE__REGULAR_DATA_PARTITION:
+				return ((InternalEList)getRegularDataPartition()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_TABLE_SPACE__INDEXES:
+				return ((InternalEList)getIndexes()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_TABLE_SPACE__INDEX_DATA_PARTITION:
+				return ((InternalEList)getIndexDataPartition()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_TABLE_SPACE__STORAGE_GROUP:
+				return basicSetStorageGroup(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_TABLE_SPACE__TEMPORARY_STORAGE_TABLES:
+				return getTemporaryStorageTables();
+			case LUWPackage.LUW_TABLE_SPACE__TABLESPACE_TYPE:
+				return getTablespaceType();
+			case LUWPackage.LUW_TABLE_SPACE__MANAGEMENT_TYPE:
+				return getManagementType();
+			case LUWPackage.LUW_TABLE_SPACE__EXTENT_SIZE:
+				return new Integer(getExtentSize());
+			case LUWPackage.LUW_TABLE_SPACE__PRE_FETCH_SIZE:
+				return new Integer(getPreFetchSize());
+			case LUWPackage.LUW_TABLE_SPACE__OVERHEAD:
+				return new Double(getOverhead());
+			case LUWPackage.LUW_TABLE_SPACE__TRANSFER_RATE:
+				return new Double(getTransferRate());
+			case LUWPackage.LUW_TABLE_SPACE__RECOVER_DROPPED_TABLE_ON:
+				return isRecoverDroppedTableOn() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_TABLE_SPACE__PAGE_SIZE:
+				return getPageSize();
+			case LUWPackage.LUW_TABLE_SPACE__SIZE:
+				return new Long(getSize());
+			case LUWPackage.LUW_TABLE_SPACE__AUTO_RESIZE:
+				return isAutoResize() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_TABLE_SPACE__INITIAL_SIZE:
+				return new Long(getInitialSize());
+			case LUWPackage.LUW_TABLE_SPACE__INCREASE_SIZE:
+				return new Long(getIncreaseSize());
+			case LUWPackage.LUW_TABLE_SPACE__MAXIMUM_SIZE:
+				return new Long(getMaximumSize());
+			case LUWPackage.LUW_TABLE_SPACE__INITIAL_SIZE_UNIT:
+				return getInitialSizeUnit();
+			case LUWPackage.LUW_TABLE_SPACE__MAXIMUM_SIZE_UNIT:
+				return getMaximumSizeUnit();
+			case LUWPackage.LUW_TABLE_SPACE__INCREASE_SIZE_UNIT:
+				return getIncreaseSizeUnit();
+			case LUWPackage.LUW_TABLE_SPACE__INCREASE_PERCENT:
+				return new Integer(getIncreasePercent());
+			case LUWPackage.LUW_TABLE_SPACE__FILE_SYSTEM_CACHING:
+				return getFileSystemCaching();
+			case LUWPackage.LUW_TABLE_SPACE__AVERAGE_SEEK_TIME:
+				return new Double(getAverageSeekTime());
+			case LUWPackage.LUW_TABLE_SPACE__ROTATION_SPEED:
+				return new Integer(getRotationSpeed());
+			case LUWPackage.LUW_TABLE_SPACE__TRANSFER:
+				return new Double(getTransfer());
+			case LUWPackage.LUW_TABLE_SPACE__SYSTEM_TYPE:
+				return getSystemType();
+			case LUWPackage.LUW_TABLE_SPACE__AVERAGE_TABLE_SIZE:
+				return getAverageTableSize();
+			case LUWPackage.LUW_TABLE_SPACE__EXTERNAL_CONTAINER_COUNT:
+				return new Integer(getExternalContainerCount());
+			case LUWPackage.LUW_TABLE_SPACE__INHERIT_OVERHEAD:
+				return isInheritOverhead() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_TABLE_SPACE__INHERIT_TRANSFERATE:
+				return isInheritTransferate() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_TABLE_SPACE__REBALANCE:
+				return isRebalance() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_TABLE_SPACE__DATA_TAG:
+				return getDataTag();
+			case LUWPackage.LUW_TABLE_SPACE__SUSPEND_REBALANCE:
+				return isSuspendRebalance() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_TABLE_SPACE__RESUME_REBALANCE:
+				return isResumeRebalance() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_TABLE_SPACE__GROUP:
+				if (resolve) return getGroup();
+				return basicGetGroup();
+			case LUWPackage.LUW_TABLE_SPACE__CONTAINERS:
+				return getContainers();
+			case LUWPackage.LUW_TABLE_SPACE__BUFFER_POOL:
+				if (resolve) return getBufferPool();
+				return basicGetBufferPool();
+			case LUWPackage.LUW_TABLE_SPACE__INDEX_DATA_TABLES:
+				return getIndexDataTables();
+			case LUWPackage.LUW_TABLE_SPACE__LOB_DATA_TABLES:
+				return getLOBDataTables();
+			case LUWPackage.LUW_TABLE_SPACE__REGULAR_DATA_TABLES:
+				return getRegularDataTables();
+			case LUWPackage.LUW_TABLE_SPACE__DATABASE:
+				if (resolve) return getDatabase();
+				return basicGetDatabase();
+			case LUWPackage.LUW_TABLE_SPACE__LOB_DATA_PARTITION:
+				return getLOBDataPartition();
+			case LUWPackage.LUW_TABLE_SPACE__REGULAR_DATA_PARTITION:
+				return getRegularDataPartition();
+			case LUWPackage.LUW_TABLE_SPACE__INDEXES:
+				return getIndexes();
+			case LUWPackage.LUW_TABLE_SPACE__INDEX_DATA_PARTITION:
+				return getIndexDataPartition();
+			case LUWPackage.LUW_TABLE_SPACE__STORAGE_GROUP:
+				if (resolve) return getStorageGroup();
+				return basicGetStorageGroup();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_TABLE_SPACE__TEMPORARY_STORAGE_TABLES:
+				getTemporaryStorageTables().clear();
+				getTemporaryStorageTables().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__TABLESPACE_TYPE:
+				setTablespaceType((TableSpaceType)newValue);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__MANAGEMENT_TYPE:
+				setManagementType((ManagementType)newValue);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__EXTENT_SIZE:
+				setExtentSize(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__PRE_FETCH_SIZE:
+				setPreFetchSize(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__OVERHEAD:
+				setOverhead(((Double)newValue).doubleValue());
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__TRANSFER_RATE:
+				setTransferRate(((Double)newValue).doubleValue());
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__RECOVER_DROPPED_TABLE_ON:
+				setRecoverDroppedTableOn(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__PAGE_SIZE:
+				setPageSize((PageSizeType)newValue);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__SIZE:
+				setSize(((Long)newValue).longValue());
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__AUTO_RESIZE:
+				setAutoResize(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__INITIAL_SIZE:
+				setInitialSize(((Long)newValue).longValue());
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__INCREASE_SIZE:
+				setIncreaseSize(((Long)newValue).longValue());
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__MAXIMUM_SIZE:
+				setMaximumSize(((Long)newValue).longValue());
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__INITIAL_SIZE_UNIT:
+				setInitialSizeUnit((UnitType)newValue);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__MAXIMUM_SIZE_UNIT:
+				setMaximumSizeUnit((UnitType)newValue);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__INCREASE_SIZE_UNIT:
+				setIncreaseSizeUnit((UnitType)newValue);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__INCREASE_PERCENT:
+				setIncreasePercent(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__FILE_SYSTEM_CACHING:
+				setFileSystemCaching((FileSystemCachingType)newValue);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__AVERAGE_SEEK_TIME:
+				setAverageSeekTime(((Double)newValue).doubleValue());
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__ROTATION_SPEED:
+				setRotationSpeed(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__TRANSFER:
+				setTransfer(((Double)newValue).doubleValue());
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__SYSTEM_TYPE:
+				setSystemType((SystemType)newValue);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__AVERAGE_TABLE_SIZE:
+				setAverageTableSize((AverageTableSizeType)newValue);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__EXTERNAL_CONTAINER_COUNT:
+				setExternalContainerCount(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__INHERIT_OVERHEAD:
+				setInheritOverhead(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__INHERIT_TRANSFERATE:
+				setInheritTransferate(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__REBALANCE:
+				setRebalance(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__DATA_TAG:
+				setDataTag((String)newValue);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__SUSPEND_REBALANCE:
+				setSuspendRebalance(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__RESUME_REBALANCE:
+				setResumeRebalance(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__GROUP:
+				setGroup((LUWPartitionGroup)newValue);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__CONTAINERS:
+				getContainers().clear();
+				getContainers().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__BUFFER_POOL:
+				setBufferPool((LUWBufferPool)newValue);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__INDEX_DATA_TABLES:
+				getIndexDataTables().clear();
+				getIndexDataTables().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__LOB_DATA_TABLES:
+				getLOBDataTables().clear();
+				getLOBDataTables().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__REGULAR_DATA_TABLES:
+				getRegularDataTables().clear();
+				getRegularDataTables().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__DATABASE:
+				setDatabase((LUWDatabase)newValue);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__LOB_DATA_PARTITION:
+				getLOBDataPartition().clear();
+				getLOBDataPartition().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__REGULAR_DATA_PARTITION:
+				getRegularDataPartition().clear();
+				getRegularDataPartition().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__INDEXES:
+				getIndexes().clear();
+				getIndexes().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__INDEX_DATA_PARTITION:
+				getIndexDataPartition().clear();
+				getIndexDataPartition().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__STORAGE_GROUP:
+				setStorageGroup((LUWStorageGroup)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_TABLE_SPACE__TEMPORARY_STORAGE_TABLES:
+				getTemporaryStorageTables().clear();
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__TABLESPACE_TYPE:
+				setTablespaceType(TABLESPACE_TYPE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__MANAGEMENT_TYPE:
+				setManagementType(MANAGEMENT_TYPE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__EXTENT_SIZE:
+				setExtentSize(EXTENT_SIZE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__PRE_FETCH_SIZE:
+				setPreFetchSize(PRE_FETCH_SIZE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__OVERHEAD:
+				setOverhead(OVERHEAD_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__TRANSFER_RATE:
+				setTransferRate(TRANSFER_RATE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__RECOVER_DROPPED_TABLE_ON:
+				setRecoverDroppedTableOn(RECOVER_DROPPED_TABLE_ON_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__PAGE_SIZE:
+				setPageSize(PAGE_SIZE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__SIZE:
+				setSize(SIZE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__AUTO_RESIZE:
+				setAutoResize(AUTO_RESIZE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__INITIAL_SIZE:
+				setInitialSize(INITIAL_SIZE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__INCREASE_SIZE:
+				setIncreaseSize(INCREASE_SIZE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__MAXIMUM_SIZE:
+				setMaximumSize(MAXIMUM_SIZE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__INITIAL_SIZE_UNIT:
+				setInitialSizeUnit(INITIAL_SIZE_UNIT_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__MAXIMUM_SIZE_UNIT:
+				setMaximumSizeUnit(MAXIMUM_SIZE_UNIT_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__INCREASE_SIZE_UNIT:
+				setIncreaseSizeUnit(INCREASE_SIZE_UNIT_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__INCREASE_PERCENT:
+				setIncreasePercent(INCREASE_PERCENT_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__FILE_SYSTEM_CACHING:
+				setFileSystemCaching(FILE_SYSTEM_CACHING_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__AVERAGE_SEEK_TIME:
+				setAverageSeekTime(AVERAGE_SEEK_TIME_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__ROTATION_SPEED:
+				setRotationSpeed(ROTATION_SPEED_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__TRANSFER:
+				setTransfer(TRANSFER_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__SYSTEM_TYPE:
+				setSystemType(SYSTEM_TYPE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__AVERAGE_TABLE_SIZE:
+				setAverageTableSize(AVERAGE_TABLE_SIZE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__EXTERNAL_CONTAINER_COUNT:
+				setExternalContainerCount(EXTERNAL_CONTAINER_COUNT_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__INHERIT_OVERHEAD:
+				setInheritOverhead(INHERIT_OVERHEAD_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__INHERIT_TRANSFERATE:
+				setInheritTransferate(INHERIT_TRANSFERATE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__REBALANCE:
+				setRebalance(REBALANCE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__DATA_TAG:
+				setDataTag(DATA_TAG_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__SUSPEND_REBALANCE:
+				setSuspendRebalance(SUSPEND_REBALANCE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__RESUME_REBALANCE:
+				setResumeRebalance(RESUME_REBALANCE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__GROUP:
+				setGroup((LUWPartitionGroup)null);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__CONTAINERS:
+				getContainers().clear();
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__BUFFER_POOL:
+				setBufferPool((LUWBufferPool)null);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__INDEX_DATA_TABLES:
+				getIndexDataTables().clear();
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__LOB_DATA_TABLES:
+				getLOBDataTables().clear();
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__REGULAR_DATA_TABLES:
+				getRegularDataTables().clear();
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__DATABASE:
+				setDatabase((LUWDatabase)null);
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__LOB_DATA_PARTITION:
+				getLOBDataPartition().clear();
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__REGULAR_DATA_PARTITION:
+				getRegularDataPartition().clear();
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__INDEXES:
+				getIndexes().clear();
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__INDEX_DATA_PARTITION:
+				getIndexDataPartition().clear();
+				return;
+			case LUWPackage.LUW_TABLE_SPACE__STORAGE_GROUP:
+				setStorageGroup((LUWStorageGroup)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_TABLE_SPACE__TEMPORARY_STORAGE_TABLES:
+				return temporaryStorageTables != null && !temporaryStorageTables.isEmpty();
+			case LUWPackage.LUW_TABLE_SPACE__TABLESPACE_TYPE:
+				return tablespaceType != TABLESPACE_TYPE_EDEFAULT;
+			case LUWPackage.LUW_TABLE_SPACE__MANAGEMENT_TYPE:
+				return managementType != MANAGEMENT_TYPE_EDEFAULT;
+			case LUWPackage.LUW_TABLE_SPACE__EXTENT_SIZE:
+				return extentSize != EXTENT_SIZE_EDEFAULT;
+			case LUWPackage.LUW_TABLE_SPACE__PRE_FETCH_SIZE:
+				return preFetchSize != PRE_FETCH_SIZE_EDEFAULT;
+			case LUWPackage.LUW_TABLE_SPACE__OVERHEAD:
+				return overhead != OVERHEAD_EDEFAULT;
+			case LUWPackage.LUW_TABLE_SPACE__TRANSFER_RATE:
+				return transferRate != TRANSFER_RATE_EDEFAULT;
+			case LUWPackage.LUW_TABLE_SPACE__RECOVER_DROPPED_TABLE_ON:
+				return recoverDroppedTableOn != RECOVER_DROPPED_TABLE_ON_EDEFAULT;
+			case LUWPackage.LUW_TABLE_SPACE__PAGE_SIZE:
+				return pageSize != PAGE_SIZE_EDEFAULT;
+			case LUWPackage.LUW_TABLE_SPACE__SIZE:
+				return size != SIZE_EDEFAULT;
+			case LUWPackage.LUW_TABLE_SPACE__AUTO_RESIZE:
+				return autoResize != AUTO_RESIZE_EDEFAULT;
+			case LUWPackage.LUW_TABLE_SPACE__INITIAL_SIZE:
+				return initialSize != INITIAL_SIZE_EDEFAULT;
+			case LUWPackage.LUW_TABLE_SPACE__INCREASE_SIZE:
+				return increaseSize != INCREASE_SIZE_EDEFAULT;
+			case LUWPackage.LUW_TABLE_SPACE__MAXIMUM_SIZE:
+				return maximumSize != MAXIMUM_SIZE_EDEFAULT;
+			case LUWPackage.LUW_TABLE_SPACE__INITIAL_SIZE_UNIT:
+				return initialSizeUnit != INITIAL_SIZE_UNIT_EDEFAULT;
+			case LUWPackage.LUW_TABLE_SPACE__MAXIMUM_SIZE_UNIT:
+				return maximumSizeUnit != MAXIMUM_SIZE_UNIT_EDEFAULT;
+			case LUWPackage.LUW_TABLE_SPACE__INCREASE_SIZE_UNIT:
+				return increaseSizeUnit != INCREASE_SIZE_UNIT_EDEFAULT;
+			case LUWPackage.LUW_TABLE_SPACE__INCREASE_PERCENT:
+				return increasePercent != INCREASE_PERCENT_EDEFAULT;
+			case LUWPackage.LUW_TABLE_SPACE__FILE_SYSTEM_CACHING:
+				return fileSystemCaching != FILE_SYSTEM_CACHING_EDEFAULT;
+			case LUWPackage.LUW_TABLE_SPACE__AVERAGE_SEEK_TIME:
+				return averageSeekTime != AVERAGE_SEEK_TIME_EDEFAULT;
+			case LUWPackage.LUW_TABLE_SPACE__ROTATION_SPEED:
+				return rotationSpeed != ROTATION_SPEED_EDEFAULT;
+			case LUWPackage.LUW_TABLE_SPACE__TRANSFER:
+				return transfer != TRANSFER_EDEFAULT;
+			case LUWPackage.LUW_TABLE_SPACE__SYSTEM_TYPE:
+				return systemType != SYSTEM_TYPE_EDEFAULT;
+			case LUWPackage.LUW_TABLE_SPACE__AVERAGE_TABLE_SIZE:
+				return averageTableSize != AVERAGE_TABLE_SIZE_EDEFAULT;
+			case LUWPackage.LUW_TABLE_SPACE__EXTERNAL_CONTAINER_COUNT:
+				return externalContainerCount != EXTERNAL_CONTAINER_COUNT_EDEFAULT;
+			case LUWPackage.LUW_TABLE_SPACE__INHERIT_OVERHEAD:
+				return inheritOverhead != INHERIT_OVERHEAD_EDEFAULT;
+			case LUWPackage.LUW_TABLE_SPACE__INHERIT_TRANSFERATE:
+				return inheritTransferate != INHERIT_TRANSFERATE_EDEFAULT;
+			case LUWPackage.LUW_TABLE_SPACE__REBALANCE:
+				return rebalance != REBALANCE_EDEFAULT;
+			case LUWPackage.LUW_TABLE_SPACE__DATA_TAG:
+				return DATA_TAG_EDEFAULT == null ? dataTag != null : !DATA_TAG_EDEFAULT.equals(dataTag);
+			case LUWPackage.LUW_TABLE_SPACE__SUSPEND_REBALANCE:
+				return suspendRebalance != SUSPEND_REBALANCE_EDEFAULT;
+			case LUWPackage.LUW_TABLE_SPACE__RESUME_REBALANCE:
+				return resumeRebalance != RESUME_REBALANCE_EDEFAULT;
+			case LUWPackage.LUW_TABLE_SPACE__GROUP:
+				return group != null;
+			case LUWPackage.LUW_TABLE_SPACE__CONTAINERS:
+				return containers != null && !containers.isEmpty();
+			case LUWPackage.LUW_TABLE_SPACE__BUFFER_POOL:
+				return bufferPool != null;
+			case LUWPackage.LUW_TABLE_SPACE__INDEX_DATA_TABLES:
+				return indexDataTables != null && !indexDataTables.isEmpty();
+			case LUWPackage.LUW_TABLE_SPACE__LOB_DATA_TABLES:
+				return lobDataTables != null && !lobDataTables.isEmpty();
+			case LUWPackage.LUW_TABLE_SPACE__REGULAR_DATA_TABLES:
+				return regularDataTables != null && !regularDataTables.isEmpty();
+			case LUWPackage.LUW_TABLE_SPACE__DATABASE:
+				return database != null;
+			case LUWPackage.LUW_TABLE_SPACE__LOB_DATA_PARTITION:
+				return lobDataPartition != null && !lobDataPartition.isEmpty();
+			case LUWPackage.LUW_TABLE_SPACE__REGULAR_DATA_PARTITION:
+				return regularDataPartition != null && !regularDataPartition.isEmpty();
+			case LUWPackage.LUW_TABLE_SPACE__INDEXES:
+				return indexes != null && !indexes.isEmpty();
+			case LUWPackage.LUW_TABLE_SPACE__INDEX_DATA_PARTITION:
+				return indexDataPartition != null && !indexDataPartition.isEmpty();
+			case LUWPackage.LUW_TABLE_SPACE__STORAGE_GROUP:
+				return storageGroup != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (tablespaceType: "); //$NON-NLS-1$
+		result.append(tablespaceType);
+		result.append(", managementType: "); //$NON-NLS-1$
+		result.append(managementType);
+		result.append(", extentSize: "); //$NON-NLS-1$
+		result.append(extentSize);
+		result.append(", preFetchSize: "); //$NON-NLS-1$
+		result.append(preFetchSize);
+		result.append(", overhead: "); //$NON-NLS-1$
+		result.append(overhead);
+		result.append(", transferRate: "); //$NON-NLS-1$
+		result.append(transferRate);
+		result.append(", recoverDroppedTableOn: "); //$NON-NLS-1$
+		result.append(recoverDroppedTableOn);
+		result.append(", pageSize: "); //$NON-NLS-1$
+		result.append(pageSize);
+		result.append(", size: "); //$NON-NLS-1$
+		result.append(size);
+		result.append(", autoResize: "); //$NON-NLS-1$
+		result.append(autoResize);
+		result.append(", initialSize: "); //$NON-NLS-1$
+		result.append(initialSize);
+		result.append(", increaseSize: "); //$NON-NLS-1$
+		result.append(increaseSize);
+		result.append(", maximumSize: "); //$NON-NLS-1$
+		result.append(maximumSize);
+		result.append(", initialSizeUnit: "); //$NON-NLS-1$
+		result.append(initialSizeUnit);
+		result.append(", maximumSizeUnit: "); //$NON-NLS-1$
+		result.append(maximumSizeUnit);
+		result.append(", increaseSizeUnit: "); //$NON-NLS-1$
+		result.append(increaseSizeUnit);
+		result.append(", increasePercent: "); //$NON-NLS-1$
+		result.append(increasePercent);
+		result.append(", fileSystemCaching: "); //$NON-NLS-1$
+		result.append(fileSystemCaching);
+		result.append(", averageSeekTime: "); //$NON-NLS-1$
+		result.append(averageSeekTime);
+		result.append(", rotationSpeed: "); //$NON-NLS-1$
+		result.append(rotationSpeed);
+		result.append(", transfer: "); //$NON-NLS-1$
+		result.append(transfer);
+		result.append(", systemType: "); //$NON-NLS-1$
+		result.append(systemType);
+		result.append(", averageTableSize: "); //$NON-NLS-1$
+		result.append(averageTableSize);
+		result.append(", externalContainerCount: "); //$NON-NLS-1$
+		result.append(externalContainerCount);
+		result.append(", inheritOverhead: "); //$NON-NLS-1$
+		result.append(inheritOverhead);
+		result.append(", inheritTransferate: "); //$NON-NLS-1$
+		result.append(inheritTransferate);
+		result.append(", rebalance: "); //$NON-NLS-1$
+		result.append(rebalance);
+		result.append(", dataTag: "); //$NON-NLS-1$
+		result.append(dataTag);
+		result.append(", suspendRebalance: "); //$NON-NLS-1$
+		result.append(suspendRebalance);
+		result.append(", resumeRebalance: "); //$NON-NLS-1$
+		result.append(resumeRebalance);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWTableSpaceImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWTemporaryStorageTableImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWTemporaryStorageTableImpl.java
new file mode 100644
index 0000000..ac45bb5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWTemporaryStorageTableImpl.java
@@ -0,0 +1,278 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryStorageTable;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Temporary Storage Table</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTemporaryStorageTableImpl#getPartitionKey <em>Partition Key</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTemporaryStorageTableImpl#getUserTemporaryTableSpace <em>User Temporary Table Space</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWTemporaryStorageTableImpl extends EObjectImpl implements LUWTemporaryStorageTable {
+	/**
+	 * The cached value of the '{@link #getPartitionKey() <em>Partition Key</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPartitionKey()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWPartitionKey partitionKey;
+
+	/**
+	 * The cached value of the '{@link #getUserTemporaryTableSpace() <em>User Temporary Table Space</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUserTemporaryTableSpace()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWTableSpace userTemporaryTableSpace;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWTemporaryStorageTableImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_TEMPORARY_STORAGE_TABLE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWPartitionKey getPartitionKey() {
+		return partitionKey;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetPartitionKey(LUWPartitionKey newPartitionKey, NotificationChain msgs) {
+		LUWPartitionKey oldPartitionKey = partitionKey;
+		partitionKey = newPartitionKey;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TEMPORARY_STORAGE_TABLE__PARTITION_KEY, oldPartitionKey, newPartitionKey);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPartitionKey(LUWPartitionKey newPartitionKey) {
+		if (newPartitionKey != partitionKey) {
+			NotificationChain msgs = null;
+			if (partitionKey != null)
+				msgs = ((InternalEObject)partitionKey).eInverseRemove(this, LUWPackage.LUW_PARTITION_KEY__TEMPORARY_STORAGE_TABLE, LUWPartitionKey.class, msgs);
+			if (newPartitionKey != null)
+				msgs = ((InternalEObject)newPartitionKey).eInverseAdd(this, LUWPackage.LUW_PARTITION_KEY__TEMPORARY_STORAGE_TABLE, LUWPartitionKey.class, msgs);
+			msgs = basicSetPartitionKey(newPartitionKey, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TEMPORARY_STORAGE_TABLE__PARTITION_KEY, newPartitionKey, newPartitionKey));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTableSpace getUserTemporaryTableSpace() {
+		if (userTemporaryTableSpace != null && userTemporaryTableSpace.eIsProxy()) {
+			InternalEObject oldUserTemporaryTableSpace = (InternalEObject)userTemporaryTableSpace;
+			userTemporaryTableSpace = (LUWTableSpace)eResolveProxy(oldUserTemporaryTableSpace);
+			if (userTemporaryTableSpace != oldUserTemporaryTableSpace) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_TEMPORARY_STORAGE_TABLE__USER_TEMPORARY_TABLE_SPACE, oldUserTemporaryTableSpace, userTemporaryTableSpace));
+			}
+		}
+		return userTemporaryTableSpace;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTableSpace basicGetUserTemporaryTableSpace() {
+		return userTemporaryTableSpace;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetUserTemporaryTableSpace(LUWTableSpace newUserTemporaryTableSpace, NotificationChain msgs) {
+		LUWTableSpace oldUserTemporaryTableSpace = userTemporaryTableSpace;
+		userTemporaryTableSpace = newUserTemporaryTableSpace;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TEMPORARY_STORAGE_TABLE__USER_TEMPORARY_TABLE_SPACE, oldUserTemporaryTableSpace, newUserTemporaryTableSpace);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setUserTemporaryTableSpace(LUWTableSpace newUserTemporaryTableSpace) {
+		if (newUserTemporaryTableSpace != userTemporaryTableSpace) {
+			NotificationChain msgs = null;
+			if (userTemporaryTableSpace != null)
+				msgs = ((InternalEObject)userTemporaryTableSpace).eInverseRemove(this, LUWPackage.LUW_TABLE_SPACE__TEMPORARY_STORAGE_TABLES, LUWTableSpace.class, msgs);
+			if (newUserTemporaryTableSpace != null)
+				msgs = ((InternalEObject)newUserTemporaryTableSpace).eInverseAdd(this, LUWPackage.LUW_TABLE_SPACE__TEMPORARY_STORAGE_TABLES, LUWTableSpace.class, msgs);
+			msgs = basicSetUserTemporaryTableSpace(newUserTemporaryTableSpace, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TEMPORARY_STORAGE_TABLE__USER_TEMPORARY_TABLE_SPACE, newUserTemporaryTableSpace, newUserTemporaryTableSpace));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_TEMPORARY_STORAGE_TABLE__PARTITION_KEY:
+				if (partitionKey != null)
+					msgs = ((InternalEObject)partitionKey).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - LUWPackage.LUW_TEMPORARY_STORAGE_TABLE__PARTITION_KEY, null, msgs);
+				return basicSetPartitionKey((LUWPartitionKey)otherEnd, msgs);
+			case LUWPackage.LUW_TEMPORARY_STORAGE_TABLE__USER_TEMPORARY_TABLE_SPACE:
+				if (userTemporaryTableSpace != null)
+					msgs = ((InternalEObject)userTemporaryTableSpace).eInverseRemove(this, LUWPackage.LUW_TABLE_SPACE__TEMPORARY_STORAGE_TABLES, LUWTableSpace.class, msgs);
+				return basicSetUserTemporaryTableSpace((LUWTableSpace)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_TEMPORARY_STORAGE_TABLE__PARTITION_KEY:
+				return basicSetPartitionKey(null, msgs);
+			case LUWPackage.LUW_TEMPORARY_STORAGE_TABLE__USER_TEMPORARY_TABLE_SPACE:
+				return basicSetUserTemporaryTableSpace(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_TEMPORARY_STORAGE_TABLE__PARTITION_KEY:
+				return getPartitionKey();
+			case LUWPackage.LUW_TEMPORARY_STORAGE_TABLE__USER_TEMPORARY_TABLE_SPACE:
+				if (resolve) return getUserTemporaryTableSpace();
+				return basicGetUserTemporaryTableSpace();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_TEMPORARY_STORAGE_TABLE__PARTITION_KEY:
+				setPartitionKey((LUWPartitionKey)newValue);
+				return;
+			case LUWPackage.LUW_TEMPORARY_STORAGE_TABLE__USER_TEMPORARY_TABLE_SPACE:
+				setUserTemporaryTableSpace((LUWTableSpace)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_TEMPORARY_STORAGE_TABLE__PARTITION_KEY:
+				setPartitionKey((LUWPartitionKey)null);
+				return;
+			case LUWPackage.LUW_TEMPORARY_STORAGE_TABLE__USER_TEMPORARY_TABLE_SPACE:
+				setUserTemporaryTableSpace((LUWTableSpace)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_TEMPORARY_STORAGE_TABLE__PARTITION_KEY:
+				return partitionKey != null;
+			case LUWPackage.LUW_TEMPORARY_STORAGE_TABLE__USER_TEMPORARY_TABLE_SPACE:
+				return userTemporaryTableSpace != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //LUWTemporaryStorageTableImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWTemporaryTableImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWTemporaryTableImpl.java
new file mode 100644
index 0000000..0b96d7d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWTemporaryTableImpl.java
@@ -0,0 +1,442 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPartitionKey;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTableSpace;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryStorageTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryTable;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTemporaryTableLoggingOption;
+
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+
+import org.eclipse.datatools.modelbase.sql.tables.impl.TemporaryTableImpl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Temporary Table</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTemporaryTableImpl#getPartitionKey <em>Partition Key</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTemporaryTableImpl#getUserTemporaryTableSpace <em>User Temporary Table Space</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTemporaryTableImpl#getTable <em>Table</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTemporaryTableImpl#getLogOption <em>Log Option</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWTemporaryTableImpl extends TemporaryTableImpl implements LUWTemporaryTable {
+	/**
+	 * The cached value of the '{@link #getPartitionKey() <em>Partition Key</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPartitionKey()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWPartitionKey partitionKey;
+
+	/**
+	 * The cached value of the '{@link #getUserTemporaryTableSpace() <em>User Temporary Table Space</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUserTemporaryTableSpace()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWTableSpace userTemporaryTableSpace;
+
+	/**
+	 * The cached value of the '{@link #getTable() <em>Table</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTable()
+	 * @generated
+	 * @ordered
+	 */
+	protected Table table;
+
+	/**
+	 * The default value of the '{@link #getLogOption() <em>Log Option</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLogOption()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final LUWTemporaryTableLoggingOption LOG_OPTION_EDEFAULT = LUWTemporaryTableLoggingOption.NOT_LOGGED_DELETE_ROWS_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getLogOption() <em>Log Option</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLogOption()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWTemporaryTableLoggingOption logOption = LOG_OPTION_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWTemporaryTableImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_TEMPORARY_TABLE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWPartitionKey getPartitionKey() {
+		return partitionKey;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetPartitionKey(LUWPartitionKey newPartitionKey, NotificationChain msgs) {
+		LUWPartitionKey oldPartitionKey = partitionKey;
+		partitionKey = newPartitionKey;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TEMPORARY_TABLE__PARTITION_KEY, oldPartitionKey, newPartitionKey);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPartitionKey(LUWPartitionKey newPartitionKey) {
+		if (newPartitionKey != partitionKey) {
+			NotificationChain msgs = null;
+			if (partitionKey != null)
+				msgs = ((InternalEObject)partitionKey).eInverseRemove(this, LUWPackage.LUW_PARTITION_KEY__TEMPORARY_STORAGE_TABLE, LUWPartitionKey.class, msgs);
+			if (newPartitionKey != null)
+				msgs = ((InternalEObject)newPartitionKey).eInverseAdd(this, LUWPackage.LUW_PARTITION_KEY__TEMPORARY_STORAGE_TABLE, LUWPartitionKey.class, msgs);
+			msgs = basicSetPartitionKey(newPartitionKey, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TEMPORARY_TABLE__PARTITION_KEY, newPartitionKey, newPartitionKey));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTableSpace getUserTemporaryTableSpace() {
+		if (userTemporaryTableSpace != null && userTemporaryTableSpace.eIsProxy()) {
+			InternalEObject oldUserTemporaryTableSpace = (InternalEObject)userTemporaryTableSpace;
+			userTemporaryTableSpace = (LUWTableSpace)eResolveProxy(oldUserTemporaryTableSpace);
+			if (userTemporaryTableSpace != oldUserTemporaryTableSpace) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_TEMPORARY_TABLE__USER_TEMPORARY_TABLE_SPACE, oldUserTemporaryTableSpace, userTemporaryTableSpace));
+			}
+		}
+		return userTemporaryTableSpace;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTableSpace basicGetUserTemporaryTableSpace() {
+		return userTemporaryTableSpace;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetUserTemporaryTableSpace(LUWTableSpace newUserTemporaryTableSpace, NotificationChain msgs) {
+		LUWTableSpace oldUserTemporaryTableSpace = userTemporaryTableSpace;
+		userTemporaryTableSpace = newUserTemporaryTableSpace;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TEMPORARY_TABLE__USER_TEMPORARY_TABLE_SPACE, oldUserTemporaryTableSpace, newUserTemporaryTableSpace);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setUserTemporaryTableSpace(LUWTableSpace newUserTemporaryTableSpace) {
+		if (newUserTemporaryTableSpace != userTemporaryTableSpace) {
+			NotificationChain msgs = null;
+			if (userTemporaryTableSpace != null)
+				msgs = ((InternalEObject)userTemporaryTableSpace).eInverseRemove(this, LUWPackage.LUW_TABLE_SPACE__TEMPORARY_STORAGE_TABLES, LUWTableSpace.class, msgs);
+			if (newUserTemporaryTableSpace != null)
+				msgs = ((InternalEObject)newUserTemporaryTableSpace).eInverseAdd(this, LUWPackage.LUW_TABLE_SPACE__TEMPORARY_STORAGE_TABLES, LUWTableSpace.class, msgs);
+			msgs = basicSetUserTemporaryTableSpace(newUserTemporaryTableSpace, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TEMPORARY_TABLE__USER_TEMPORARY_TABLE_SPACE, newUserTemporaryTableSpace, newUserTemporaryTableSpace));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Table getTable() {
+		if (table != null && table.eIsProxy()) {
+			InternalEObject oldTable = (InternalEObject)table;
+			table = (Table)eResolveProxy(oldTable);
+			if (table != oldTable) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_TEMPORARY_TABLE__TABLE, oldTable, table));
+			}
+		}
+		return table;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Table basicGetTable() {
+		return table;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTable(Table newTable) {
+		Table oldTable = table;
+		table = newTable;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TEMPORARY_TABLE__TABLE, oldTable, table));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWTemporaryTableLoggingOption getLogOption() {
+		return logOption;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLogOption(LUWTemporaryTableLoggingOption newLogOption) {
+		LUWTemporaryTableLoggingOption oldLogOption = logOption;
+		logOption = newLogOption == null ? LOG_OPTION_EDEFAULT : newLogOption;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TEMPORARY_TABLE__LOG_OPTION, oldLogOption, logOption));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_TEMPORARY_TABLE__PARTITION_KEY:
+				if (partitionKey != null)
+					msgs = ((InternalEObject)partitionKey).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - LUWPackage.LUW_TEMPORARY_TABLE__PARTITION_KEY, null, msgs);
+				return basicSetPartitionKey((LUWPartitionKey)otherEnd, msgs);
+			case LUWPackage.LUW_TEMPORARY_TABLE__USER_TEMPORARY_TABLE_SPACE:
+				if (userTemporaryTableSpace != null)
+					msgs = ((InternalEObject)userTemporaryTableSpace).eInverseRemove(this, LUWPackage.LUW_TABLE_SPACE__TEMPORARY_STORAGE_TABLES, LUWTableSpace.class, msgs);
+				return basicSetUserTemporaryTableSpace((LUWTableSpace)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_TEMPORARY_TABLE__PARTITION_KEY:
+				return basicSetPartitionKey(null, msgs);
+			case LUWPackage.LUW_TEMPORARY_TABLE__USER_TEMPORARY_TABLE_SPACE:
+				return basicSetUserTemporaryTableSpace(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_TEMPORARY_TABLE__PARTITION_KEY:
+				return getPartitionKey();
+			case LUWPackage.LUW_TEMPORARY_TABLE__USER_TEMPORARY_TABLE_SPACE:
+				if (resolve) return getUserTemporaryTableSpace();
+				return basicGetUserTemporaryTableSpace();
+			case LUWPackage.LUW_TEMPORARY_TABLE__TABLE:
+				if (resolve) return getTable();
+				return basicGetTable();
+			case LUWPackage.LUW_TEMPORARY_TABLE__LOG_OPTION:
+				return getLogOption();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_TEMPORARY_TABLE__PARTITION_KEY:
+				setPartitionKey((LUWPartitionKey)newValue);
+				return;
+			case LUWPackage.LUW_TEMPORARY_TABLE__USER_TEMPORARY_TABLE_SPACE:
+				setUserTemporaryTableSpace((LUWTableSpace)newValue);
+				return;
+			case LUWPackage.LUW_TEMPORARY_TABLE__TABLE:
+				setTable((Table)newValue);
+				return;
+			case LUWPackage.LUW_TEMPORARY_TABLE__LOG_OPTION:
+				setLogOption((LUWTemporaryTableLoggingOption)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_TEMPORARY_TABLE__PARTITION_KEY:
+				setPartitionKey((LUWPartitionKey)null);
+				return;
+			case LUWPackage.LUW_TEMPORARY_TABLE__USER_TEMPORARY_TABLE_SPACE:
+				setUserTemporaryTableSpace((LUWTableSpace)null);
+				return;
+			case LUWPackage.LUW_TEMPORARY_TABLE__TABLE:
+				setTable((Table)null);
+				return;
+			case LUWPackage.LUW_TEMPORARY_TABLE__LOG_OPTION:
+				setLogOption(LOG_OPTION_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_TEMPORARY_TABLE__PARTITION_KEY:
+				return partitionKey != null;
+			case LUWPackage.LUW_TEMPORARY_TABLE__USER_TEMPORARY_TABLE_SPACE:
+				return userTemporaryTableSpace != null;
+			case LUWPackage.LUW_TEMPORARY_TABLE__TABLE:
+				return table != null;
+			case LUWPackage.LUW_TEMPORARY_TABLE__LOG_OPTION:
+				return logOption != LOG_OPTION_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class baseClass) {
+		if (baseClass == LUWTemporaryStorageTable.class) {
+			switch (derivedFeatureID) {
+				case LUWPackage.LUW_TEMPORARY_TABLE__PARTITION_KEY: return LUWPackage.LUW_TEMPORARY_STORAGE_TABLE__PARTITION_KEY;
+				case LUWPackage.LUW_TEMPORARY_TABLE__USER_TEMPORARY_TABLE_SPACE: return LUWPackage.LUW_TEMPORARY_STORAGE_TABLE__USER_TEMPORARY_TABLE_SPACE;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class baseClass) {
+		if (baseClass == LUWTemporaryStorageTable.class) {
+			switch (baseFeatureID) {
+				case LUWPackage.LUW_TEMPORARY_STORAGE_TABLE__PARTITION_KEY: return LUWPackage.LUW_TEMPORARY_TABLE__PARTITION_KEY;
+				case LUWPackage.LUW_TEMPORARY_STORAGE_TABLE__USER_TEMPORARY_TABLE_SPACE: return LUWPackage.LUW_TEMPORARY_TABLE__USER_TEMPORARY_TABLE_SPACE;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (logOption: "); //$NON-NLS-1$
+		result.append(logOption);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWTemporaryTableImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWTypeMappingImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWTypeMappingImpl.java
new file mode 100644
index 0000000..5b6d80a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWTypeMappingImpl.java
@@ -0,0 +1,445 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import java.util.Date;
+
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWTypeMapping;
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Type Mapping</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTypeMappingImpl#getServerType <em>Server Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTypeMappingImpl#getServerVesion <em>Server Vesion</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTypeMappingImpl#getServerName <em>Server Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTypeMappingImpl#getCreationTime <em>Creation Time</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTypeMappingImpl#getLocalType <em>Local Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWTypeMappingImpl#getRemoteType <em>Remote Type</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWTypeMappingImpl extends SQLObjectImpl implements LUWTypeMapping {
+	/**
+	 * The default value of the '{@link #getServerType() <em>Server Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getServerType()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String SERVER_TYPE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getServerType() <em>Server Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getServerType()
+	 * @generated
+	 * @ordered
+	 */
+	protected String serverType = SERVER_TYPE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getServerVesion() <em>Server Vesion</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getServerVesion()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String SERVER_VESION_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getServerVesion() <em>Server Vesion</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getServerVesion()
+	 * @generated
+	 * @ordered
+	 */
+	protected String serverVesion = SERVER_VESION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getServerName() <em>Server Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getServerName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String SERVER_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getServerName() <em>Server Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getServerName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String serverName = SERVER_NAME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getCreationTime() <em>Creation Time</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCreationTime()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final Date CREATION_TIME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getCreationTime() <em>Creation Time</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCreationTime()
+	 * @generated
+	 * @ordered
+	 */
+	protected Date creationTime = CREATION_TIME_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getLocalType() <em>Local Type</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLocalType()
+	 * @generated
+	 * @ordered
+	 */
+	protected PredefinedDataType localType;
+
+	/**
+	 * The cached value of the '{@link #getRemoteType() <em>Remote Type</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRemoteType()
+	 * @generated
+	 * @ordered
+	 */
+	protected PredefinedDataType remoteType;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWTypeMappingImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_TYPE_MAPPING;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getServerType() {
+		return serverType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setServerType(String newServerType) {
+		String oldServerType = serverType;
+		serverType = newServerType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TYPE_MAPPING__SERVER_TYPE, oldServerType, serverType));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getServerVesion() {
+		return serverVesion;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setServerVesion(String newServerVesion) {
+		String oldServerVesion = serverVesion;
+		serverVesion = newServerVesion;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TYPE_MAPPING__SERVER_VESION, oldServerVesion, serverVesion));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getServerName() {
+		return serverName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setServerName(String newServerName) {
+		String oldServerName = serverName;
+		serverName = newServerName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TYPE_MAPPING__SERVER_NAME, oldServerName, serverName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Date getCreationTime() {
+		return creationTime;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCreationTime(Date newCreationTime) {
+		Date oldCreationTime = creationTime;
+		creationTime = newCreationTime;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TYPE_MAPPING__CREATION_TIME, oldCreationTime, creationTime));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PredefinedDataType getLocalType() {
+		if (localType != null && localType.eIsProxy()) {
+			InternalEObject oldLocalType = (InternalEObject)localType;
+			localType = (PredefinedDataType)eResolveProxy(oldLocalType);
+			if (localType != oldLocalType) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_TYPE_MAPPING__LOCAL_TYPE, oldLocalType, localType));
+			}
+		}
+		return localType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PredefinedDataType basicGetLocalType() {
+		return localType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLocalType(PredefinedDataType newLocalType) {
+		PredefinedDataType oldLocalType = localType;
+		localType = newLocalType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TYPE_MAPPING__LOCAL_TYPE, oldLocalType, localType));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PredefinedDataType getRemoteType() {
+		if (remoteType != null && remoteType.eIsProxy()) {
+			InternalEObject oldRemoteType = (InternalEObject)remoteType;
+			remoteType = (PredefinedDataType)eResolveProxy(oldRemoteType);
+			if (remoteType != oldRemoteType) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_TYPE_MAPPING__REMOTE_TYPE, oldRemoteType, remoteType));
+			}
+		}
+		return remoteType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PredefinedDataType basicGetRemoteType() {
+		return remoteType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRemoteType(PredefinedDataType newRemoteType) {
+		PredefinedDataType oldRemoteType = remoteType;
+		remoteType = newRemoteType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_TYPE_MAPPING__REMOTE_TYPE, oldRemoteType, remoteType));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_TYPE_MAPPING__SERVER_TYPE:
+				return getServerType();
+			case LUWPackage.LUW_TYPE_MAPPING__SERVER_VESION:
+				return getServerVesion();
+			case LUWPackage.LUW_TYPE_MAPPING__SERVER_NAME:
+				return getServerName();
+			case LUWPackage.LUW_TYPE_MAPPING__CREATION_TIME:
+				return getCreationTime();
+			case LUWPackage.LUW_TYPE_MAPPING__LOCAL_TYPE:
+				if (resolve) return getLocalType();
+				return basicGetLocalType();
+			case LUWPackage.LUW_TYPE_MAPPING__REMOTE_TYPE:
+				if (resolve) return getRemoteType();
+				return basicGetRemoteType();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_TYPE_MAPPING__SERVER_TYPE:
+				setServerType((String)newValue);
+				return;
+			case LUWPackage.LUW_TYPE_MAPPING__SERVER_VESION:
+				setServerVesion((String)newValue);
+				return;
+			case LUWPackage.LUW_TYPE_MAPPING__SERVER_NAME:
+				setServerName((String)newValue);
+				return;
+			case LUWPackage.LUW_TYPE_MAPPING__CREATION_TIME:
+				setCreationTime((Date)newValue);
+				return;
+			case LUWPackage.LUW_TYPE_MAPPING__LOCAL_TYPE:
+				setLocalType((PredefinedDataType)newValue);
+				return;
+			case LUWPackage.LUW_TYPE_MAPPING__REMOTE_TYPE:
+				setRemoteType((PredefinedDataType)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_TYPE_MAPPING__SERVER_TYPE:
+				setServerType(SERVER_TYPE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TYPE_MAPPING__SERVER_VESION:
+				setServerVesion(SERVER_VESION_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TYPE_MAPPING__SERVER_NAME:
+				setServerName(SERVER_NAME_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TYPE_MAPPING__CREATION_TIME:
+				setCreationTime(CREATION_TIME_EDEFAULT);
+				return;
+			case LUWPackage.LUW_TYPE_MAPPING__LOCAL_TYPE:
+				setLocalType((PredefinedDataType)null);
+				return;
+			case LUWPackage.LUW_TYPE_MAPPING__REMOTE_TYPE:
+				setRemoteType((PredefinedDataType)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_TYPE_MAPPING__SERVER_TYPE:
+				return SERVER_TYPE_EDEFAULT == null ? serverType != null : !SERVER_TYPE_EDEFAULT.equals(serverType);
+			case LUWPackage.LUW_TYPE_MAPPING__SERVER_VESION:
+				return SERVER_VESION_EDEFAULT == null ? serverVesion != null : !SERVER_VESION_EDEFAULT.equals(serverVesion);
+			case LUWPackage.LUW_TYPE_MAPPING__SERVER_NAME:
+				return SERVER_NAME_EDEFAULT == null ? serverName != null : !SERVER_NAME_EDEFAULT.equals(serverName);
+			case LUWPackage.LUW_TYPE_MAPPING__CREATION_TIME:
+				return CREATION_TIME_EDEFAULT == null ? creationTime != null : !CREATION_TIME_EDEFAULT.equals(creationTime);
+			case LUWPackage.LUW_TYPE_MAPPING__LOCAL_TYPE:
+				return localType != null;
+			case LUWPackage.LUW_TYPE_MAPPING__REMOTE_TYPE:
+				return remoteType != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (serverType: "); //$NON-NLS-1$
+		result.append(serverType);
+		result.append(", serverVesion: "); //$NON-NLS-1$
+		result.append(serverVesion);
+		result.append(", serverName: "); //$NON-NLS-1$
+		result.append(serverName);
+		result.append(", creationTime: "); //$NON-NLS-1$
+		result.append(creationTime);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWTypeMappingImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWUserMappingImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWUserMappingImpl.java
new file mode 100644
index 0000000..bc6708c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWUserMappingImpl.java
@@ -0,0 +1,299 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWUserMapping;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>User Mapping</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWUserMappingImpl#getLocalAuthId <em>Local Auth Id</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWUserMappingImpl#getServer <em>Server</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWUserMappingImpl#getOptions <em>Options</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWUserMappingImpl extends SQLObjectImpl implements LUWUserMapping {
+	/**
+	 * The default value of the '{@link #getLocalAuthId() <em>Local Auth Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLocalAuthId()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String LOCAL_AUTH_ID_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getLocalAuthId() <em>Local Auth Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLocalAuthId()
+	 * @generated
+	 * @ordered
+	 */
+	protected String localAuthId = LOCAL_AUTH_ID_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getOptions() <em>Options</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOptions()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList options;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWUserMappingImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_USER_MAPPING;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getLocalAuthId() {
+		return localAuthId;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLocalAuthId(String newLocalAuthId) {
+		String oldLocalAuthId = localAuthId;
+		localAuthId = newLocalAuthId;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_USER_MAPPING__LOCAL_AUTH_ID, oldLocalAuthId, localAuthId));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWServer getServer() {
+		if (eContainerFeatureID() != LUWPackage.LUW_USER_MAPPING__SERVER) return null;
+		return (LUWServer)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetServer(LUWServer newServer, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newServer, LUWPackage.LUW_USER_MAPPING__SERVER, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setServer(LUWServer newServer) {
+		if (newServer != eInternalContainer() || (eContainerFeatureID() != LUWPackage.LUW_USER_MAPPING__SERVER && newServer != null)) {
+			if (EcoreUtil.isAncestor(this, newServer))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newServer != null)
+				msgs = ((InternalEObject)newServer).eInverseAdd(this, LUWPackage.LUW_SERVER__USER_MAPPINGS, LUWServer.class, msgs);
+			msgs = basicSetServer(newServer, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_USER_MAPPING__SERVER, newServer, newServer));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getOptions() {
+		if (options == null) {
+			options = new EObjectContainmentEList(LUWOption.class, this, LUWPackage.LUW_USER_MAPPING__OPTIONS);
+		}
+		return options;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_USER_MAPPING__SERVER:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetServer((LUWServer)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_USER_MAPPING__SERVER:
+				return basicSetServer(null, msgs);
+			case LUWPackage.LUW_USER_MAPPING__OPTIONS:
+				return ((InternalEList)getOptions()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case LUWPackage.LUW_USER_MAPPING__SERVER:
+				return eInternalContainer().eInverseRemove(this, LUWPackage.LUW_SERVER__USER_MAPPINGS, LUWServer.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_USER_MAPPING__LOCAL_AUTH_ID:
+				return getLocalAuthId();
+			case LUWPackage.LUW_USER_MAPPING__SERVER:
+				return getServer();
+			case LUWPackage.LUW_USER_MAPPING__OPTIONS:
+				return getOptions();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_USER_MAPPING__LOCAL_AUTH_ID:
+				setLocalAuthId((String)newValue);
+				return;
+			case LUWPackage.LUW_USER_MAPPING__SERVER:
+				setServer((LUWServer)newValue);
+				return;
+			case LUWPackage.LUW_USER_MAPPING__OPTIONS:
+				getOptions().clear();
+				getOptions().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_USER_MAPPING__LOCAL_AUTH_ID:
+				setLocalAuthId(LOCAL_AUTH_ID_EDEFAULT);
+				return;
+			case LUWPackage.LUW_USER_MAPPING__SERVER:
+				setServer((LUWServer)null);
+				return;
+			case LUWPackage.LUW_USER_MAPPING__OPTIONS:
+				getOptions().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_USER_MAPPING__LOCAL_AUTH_ID:
+				return LOCAL_AUTH_ID_EDEFAULT == null ? localAuthId != null : !LOCAL_AUTH_ID_EDEFAULT.equals(localAuthId);
+			case LUWPackage.LUW_USER_MAPPING__SERVER:
+				return getServer() != null;
+			case LUWPackage.LUW_USER_MAPPING__OPTIONS:
+				return options != null && !options.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (localAuthId: "); //$NON-NLS-1$
+		result.append(localAuthId);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWUserMappingImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWViewImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWViewImpl.java
new file mode 100644
index 0000000..feb3cae
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWViewImpl.java
@@ -0,0 +1,214 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ViewImpl;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWView;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>View</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWViewImpl#isFederated <em>Federated</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWViewImpl#isOptimizeQuery <em>Optimize Query</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LUWViewImpl extends DB2ViewImpl implements LUWView {
+	/**
+	 * The default value of the '{@link #isFederated() <em>Federated</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isFederated()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean FEDERATED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isFederated() <em>Federated</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isFederated()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean federated = FEDERATED_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isOptimizeQuery() <em>Optimize Query</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isOptimizeQuery()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean OPTIMIZE_QUERY_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isOptimizeQuery() <em>Optimize Query</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isOptimizeQuery()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean optimizeQuery = OPTIMIZE_QUERY_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWViewImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_VIEW;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isFederated() {
+		return federated;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFederated(boolean newFederated) {
+		boolean oldFederated = federated;
+		federated = newFederated;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_VIEW__FEDERATED, oldFederated, federated));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isOptimizeQuery() {
+		return optimizeQuery;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOptimizeQuery(boolean newOptimizeQuery) {
+		boolean oldOptimizeQuery = optimizeQuery;
+		optimizeQuery = newOptimizeQuery;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_VIEW__OPTIMIZE_QUERY, oldOptimizeQuery, optimizeQuery));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_VIEW__FEDERATED:
+				return isFederated() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_VIEW__OPTIMIZE_QUERY:
+				return isOptimizeQuery() ? Boolean.TRUE : Boolean.FALSE;
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_VIEW__FEDERATED:
+				setFederated(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_VIEW__OPTIMIZE_QUERY:
+				setOptimizeQuery(((Boolean)newValue).booleanValue());
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_VIEW__FEDERATED:
+				setFederated(FEDERATED_EDEFAULT);
+				return;
+			case LUWPackage.LUW_VIEW__OPTIMIZE_QUERY:
+				setOptimizeQuery(OPTIMIZE_QUERY_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_VIEW__FEDERATED:
+				return federated != FEDERATED_EDEFAULT;
+			case LUWPackage.LUW_VIEW__OPTIMIZE_QUERY:
+				return optimizeQuery != OPTIMIZE_QUERY_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (federated: "); //$NON-NLS-1$
+		result.append(federated);
+		result.append(", optimizeQuery: "); //$NON-NLS-1$
+		result.append(optimizeQuery);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWViewImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWWrapperImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWWrapperImpl.java
new file mode 100644
index 0000000..15c7f92
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/LUWWrapperImpl.java
@@ -0,0 +1,610 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EDataTypeUniqueEList;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWDatabase;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWFederatedDataSource;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWOption;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWWrapper;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.WrapperType;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Wrapper</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWWrapperImpl#getVersion <em>Version</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWWrapperImpl#getLibrary <em>Library</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWWrapperImpl#isFenced <em>Fenced</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWWrapperImpl#getWrapperType <em>Wrapper Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWWrapperImpl#getDataSource <em>Data Source</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWWrapperImpl#getDiscoveredLibraries <em>Discovered Libraries</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWWrapperImpl#getServers <em>Servers</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWWrapperImpl#getLUWDatabase <em>LUW Database</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.LUWWrapperImpl#getOptions <em>Options</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class LUWWrapperImpl extends SQLObjectImpl implements LUWWrapper {
+	/**
+	 * The default value of the '{@link #getVersion() <em>Version</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getVersion()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String VERSION_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getVersion() <em>Version</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getVersion()
+	 * @generated
+	 * @ordered
+	 */
+	protected String version = VERSION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getLibrary() <em>Library</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLibrary()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String LIBRARY_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getLibrary() <em>Library</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLibrary()
+	 * @generated
+	 * @ordered
+	 */
+	protected String library = LIBRARY_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isFenced() <em>Fenced</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isFenced()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean FENCED_EDEFAULT = true;
+
+	/**
+	 * The cached value of the '{@link #isFenced() <em>Fenced</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isFenced()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean fenced = FENCED_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getWrapperType() <em>Wrapper Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getWrapperType()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final WrapperType WRAPPER_TYPE_EDEFAULT = WrapperType.RELATIONAL_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getWrapperType() <em>Wrapper Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getWrapperType()
+	 * @generated
+	 * @ordered
+	 */
+	protected WrapperType wrapperType = WRAPPER_TYPE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getDataSource() <em>Data Source</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDataSource()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final LUWFederatedDataSource DATA_SOURCE_EDEFAULT = LUWFederatedDataSource.DB2_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getDataSource() <em>Data Source</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDataSource()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWFederatedDataSource dataSource = DATA_SOURCE_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getDiscoveredLibraries() <em>Discovered Libraries</em>}' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDiscoveredLibraries()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList discoveredLibraries;
+
+	/**
+	 * The cached value of the '{@link #getServers() <em>Servers</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getServers()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList servers;
+
+	/**
+	 * The cached value of the '{@link #getLUWDatabase() <em>LUW Database</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLUWDatabase()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWDatabase luwDatabase;
+
+	/**
+	 * The cached value of the '{@link #getOptions() <em>Options</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOptions()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList options;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LUWWrapperImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.LUW_WRAPPER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getVersion() {
+		return version;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setVersion(String newVersion) {
+		String oldVersion = version;
+		version = newVersion;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_WRAPPER__VERSION, oldVersion, version));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getLibrary() {
+		return library;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLibrary(String newLibrary) {
+		String oldLibrary = library;
+		library = newLibrary;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_WRAPPER__LIBRARY, oldLibrary, library));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isFenced() {
+		return fenced;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFenced(boolean newFenced) {
+		boolean oldFenced = fenced;
+		fenced = newFenced;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_WRAPPER__FENCED, oldFenced, fenced));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public WrapperType getWrapperType() {
+		return wrapperType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setWrapperType(WrapperType newWrapperType) {
+		WrapperType oldWrapperType = wrapperType;
+		wrapperType = newWrapperType == null ? WRAPPER_TYPE_EDEFAULT : newWrapperType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_WRAPPER__WRAPPER_TYPE, oldWrapperType, wrapperType));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWFederatedDataSource getDataSource() {
+		return dataSource;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDataSource(LUWFederatedDataSource newDataSource) {
+		LUWFederatedDataSource oldDataSource = dataSource;
+		dataSource = newDataSource == null ? DATA_SOURCE_EDEFAULT : newDataSource;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_WRAPPER__DATA_SOURCE, oldDataSource, dataSource));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getDiscoveredLibraries() {
+		if (discoveredLibraries == null) {
+			discoveredLibraries = new EDataTypeUniqueEList(String.class, this, LUWPackage.LUW_WRAPPER__DISCOVERED_LIBRARIES);
+		}
+		return discoveredLibraries;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getServers() {
+		if (servers == null) {
+			servers = new EObjectWithInverseResolvingEList(LUWServer.class, this, LUWPackage.LUW_WRAPPER__SERVERS, LUWPackage.LUW_SERVER__WRAPPER);
+		}
+		return servers;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWDatabase getLUWDatabase() {
+		if (luwDatabase != null && luwDatabase.eIsProxy()) {
+			InternalEObject oldLUWDatabase = (InternalEObject)luwDatabase;
+			luwDatabase = (LUWDatabase)eResolveProxy(oldLUWDatabase);
+			if (luwDatabase != oldLUWDatabase) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.LUW_WRAPPER__LUW_DATABASE, oldLUWDatabase, luwDatabase));
+			}
+		}
+		return luwDatabase;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWDatabase basicGetLUWDatabase() {
+		return luwDatabase;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetLUWDatabase(LUWDatabase newLUWDatabase, NotificationChain msgs) {
+		LUWDatabase oldLUWDatabase = luwDatabase;
+		luwDatabase = newLUWDatabase;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_WRAPPER__LUW_DATABASE, oldLUWDatabase, newLUWDatabase);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLUWDatabase(LUWDatabase newLUWDatabase) {
+		if (newLUWDatabase != luwDatabase) {
+			NotificationChain msgs = null;
+			if (luwDatabase != null)
+				msgs = ((InternalEObject)luwDatabase).eInverseRemove(this, LUWPackage.LUW_DATABASE__WRAPPERS, LUWDatabase.class, msgs);
+			if (newLUWDatabase != null)
+				msgs = ((InternalEObject)newLUWDatabase).eInverseAdd(this, LUWPackage.LUW_DATABASE__WRAPPERS, LUWDatabase.class, msgs);
+			msgs = basicSetLUWDatabase(newLUWDatabase, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.LUW_WRAPPER__LUW_DATABASE, newLUWDatabase, newLUWDatabase));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getOptions() {
+		if (options == null) {
+			options = new EObjectContainmentEList(LUWOption.class, this, LUWPackage.LUW_WRAPPER__OPTIONS);
+		}
+		return options;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_WRAPPER__SERVERS:
+				return ((InternalEList)getServers()).basicAdd(otherEnd, msgs);
+			case LUWPackage.LUW_WRAPPER__LUW_DATABASE:
+				if (luwDatabase != null)
+					msgs = ((InternalEObject)luwDatabase).eInverseRemove(this, LUWPackage.LUW_DATABASE__WRAPPERS, LUWDatabase.class, msgs);
+				return basicSetLUWDatabase((LUWDatabase)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.LUW_WRAPPER__SERVERS:
+				return ((InternalEList)getServers()).basicRemove(otherEnd, msgs);
+			case LUWPackage.LUW_WRAPPER__LUW_DATABASE:
+				return basicSetLUWDatabase(null, msgs);
+			case LUWPackage.LUW_WRAPPER__OPTIONS:
+				return ((InternalEList)getOptions()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.LUW_WRAPPER__VERSION:
+				return getVersion();
+			case LUWPackage.LUW_WRAPPER__LIBRARY:
+				return getLibrary();
+			case LUWPackage.LUW_WRAPPER__FENCED:
+				return isFenced() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.LUW_WRAPPER__WRAPPER_TYPE:
+				return getWrapperType();
+			case LUWPackage.LUW_WRAPPER__DATA_SOURCE:
+				return getDataSource();
+			case LUWPackage.LUW_WRAPPER__DISCOVERED_LIBRARIES:
+				return getDiscoveredLibraries();
+			case LUWPackage.LUW_WRAPPER__SERVERS:
+				return getServers();
+			case LUWPackage.LUW_WRAPPER__LUW_DATABASE:
+				if (resolve) return getLUWDatabase();
+				return basicGetLUWDatabase();
+			case LUWPackage.LUW_WRAPPER__OPTIONS:
+				return getOptions();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.LUW_WRAPPER__VERSION:
+				setVersion((String)newValue);
+				return;
+			case LUWPackage.LUW_WRAPPER__LIBRARY:
+				setLibrary((String)newValue);
+				return;
+			case LUWPackage.LUW_WRAPPER__FENCED:
+				setFenced(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.LUW_WRAPPER__WRAPPER_TYPE:
+				setWrapperType((WrapperType)newValue);
+				return;
+			case LUWPackage.LUW_WRAPPER__DATA_SOURCE:
+				setDataSource((LUWFederatedDataSource)newValue);
+				return;
+			case LUWPackage.LUW_WRAPPER__DISCOVERED_LIBRARIES:
+				getDiscoveredLibraries().clear();
+				getDiscoveredLibraries().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_WRAPPER__SERVERS:
+				getServers().clear();
+				getServers().addAll((Collection)newValue);
+				return;
+			case LUWPackage.LUW_WRAPPER__LUW_DATABASE:
+				setLUWDatabase((LUWDatabase)newValue);
+				return;
+			case LUWPackage.LUW_WRAPPER__OPTIONS:
+				getOptions().clear();
+				getOptions().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_WRAPPER__VERSION:
+				setVersion(VERSION_EDEFAULT);
+				return;
+			case LUWPackage.LUW_WRAPPER__LIBRARY:
+				setLibrary(LIBRARY_EDEFAULT);
+				return;
+			case LUWPackage.LUW_WRAPPER__FENCED:
+				setFenced(FENCED_EDEFAULT);
+				return;
+			case LUWPackage.LUW_WRAPPER__WRAPPER_TYPE:
+				setWrapperType(WRAPPER_TYPE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_WRAPPER__DATA_SOURCE:
+				setDataSource(DATA_SOURCE_EDEFAULT);
+				return;
+			case LUWPackage.LUW_WRAPPER__DISCOVERED_LIBRARIES:
+				getDiscoveredLibraries().clear();
+				return;
+			case LUWPackage.LUW_WRAPPER__SERVERS:
+				getServers().clear();
+				return;
+			case LUWPackage.LUW_WRAPPER__LUW_DATABASE:
+				setLUWDatabase((LUWDatabase)null);
+				return;
+			case LUWPackage.LUW_WRAPPER__OPTIONS:
+				getOptions().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.LUW_WRAPPER__VERSION:
+				return VERSION_EDEFAULT == null ? version != null : !VERSION_EDEFAULT.equals(version);
+			case LUWPackage.LUW_WRAPPER__LIBRARY:
+				return LIBRARY_EDEFAULT == null ? library != null : !LIBRARY_EDEFAULT.equals(library);
+			case LUWPackage.LUW_WRAPPER__FENCED:
+				return fenced != FENCED_EDEFAULT;
+			case LUWPackage.LUW_WRAPPER__WRAPPER_TYPE:
+				return wrapperType != WRAPPER_TYPE_EDEFAULT;
+			case LUWPackage.LUW_WRAPPER__DATA_SOURCE:
+				return dataSource != DATA_SOURCE_EDEFAULT;
+			case LUWPackage.LUW_WRAPPER__DISCOVERED_LIBRARIES:
+				return discoveredLibraries != null && !discoveredLibraries.isEmpty();
+			case LUWPackage.LUW_WRAPPER__SERVERS:
+				return servers != null && !servers.isEmpty();
+			case LUWPackage.LUW_WRAPPER__LUW_DATABASE:
+				return luwDatabase != null;
+			case LUWPackage.LUW_WRAPPER__OPTIONS:
+				return options != null && !options.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (version: "); //$NON-NLS-1$
+		result.append(version);
+		result.append(", library: "); //$NON-NLS-1$
+		result.append(library);
+		result.append(", fenced: "); //$NON-NLS-1$
+		result.append(fenced);
+		result.append(", wrapperType: "); //$NON-NLS-1$
+		result.append(wrapperType);
+		result.append(", dataSource: "); //$NON-NLS-1$
+		result.append(dataSource);
+		result.append(", DiscoveredLibraries: "); //$NON-NLS-1$
+		result.append(discoveredLibraries);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LUWWrapperImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/PLSQLPackageBodyImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/PLSQLPackageBodyImpl.java
new file mode 100644
index 0000000..46b9a12
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/PLSQLPackageBodyImpl.java
@@ -0,0 +1,193 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: PLSQLPackageBodyImpl.java,v 1.1 2009/02/25 19:05:46 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.PLSQLPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.PLSQLPackageBody;
+
+import org.eclipse.datatools.modelbase.sql.routines.impl.SourceImpl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>PLSQL Package Body</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageBodyImpl#getPackage <em>Package</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class PLSQLPackageBodyImpl extends SourceImpl implements PLSQLPackageBody {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PLSQLPackageBodyImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.PLSQL_PACKAGE_BODY;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PLSQLPackage getPackage() {
+		if (eContainerFeatureID() != LUWPackage.PLSQL_PACKAGE_BODY__PACKAGE) return null;
+		return (PLSQLPackage)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetPackage(PLSQLPackage newPackage, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newPackage, LUWPackage.PLSQL_PACKAGE_BODY__PACKAGE, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPackage(PLSQLPackage newPackage) {
+		if (newPackage != eInternalContainer() || (eContainerFeatureID() != LUWPackage.PLSQL_PACKAGE_BODY__PACKAGE && newPackage != null)) {
+			if (EcoreUtil.isAncestor(this, newPackage))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newPackage != null)
+				msgs = ((InternalEObject)newPackage).eInverseAdd(this, LUWPackage.PLSQL_PACKAGE__PACKAGE_BODY, PLSQLPackage.class, msgs);
+			msgs = basicSetPackage(newPackage, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.PLSQL_PACKAGE_BODY__PACKAGE, newPackage, newPackage));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.PLSQL_PACKAGE_BODY__PACKAGE:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetPackage((PLSQLPackage)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.PLSQL_PACKAGE_BODY__PACKAGE:
+				return basicSetPackage(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case LUWPackage.PLSQL_PACKAGE_BODY__PACKAGE:
+				return eInternalContainer().eInverseRemove(this, LUWPackage.PLSQL_PACKAGE__PACKAGE_BODY, PLSQLPackage.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.PLSQL_PACKAGE_BODY__PACKAGE:
+				return getPackage();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.PLSQL_PACKAGE_BODY__PACKAGE:
+				setPackage((PLSQLPackage)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.PLSQL_PACKAGE_BODY__PACKAGE:
+				setPackage((PLSQLPackage)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.PLSQL_PACKAGE_BODY__PACKAGE:
+				return getPackage() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //PLSQLPackageBodyImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/PLSQLPackageImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/PLSQLPackageImpl.java
new file mode 100644
index 0000000..9163312
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/PLSQLPackageImpl.java
@@ -0,0 +1,1823 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: PLSQLPackageImpl.java,v 1.2 2009/03/06 22:38:09 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2AccessPlan;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2RoutineExtension;
+import org.eclipse.datatools.enablement.ibm.db2.model.SourceDialect;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.PLSQLPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.PLSQLPackageBody;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.modelbase.sql.routines.DataAccess;
+import org.eclipse.datatools.modelbase.sql.routines.Parameter;
+import org.eclipse.datatools.modelbase.sql.routines.ParameterMode;
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesPackage;
+import org.eclipse.datatools.modelbase.sql.routines.Source;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.routines.impl.RoutineImpl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.BasicEList;
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>PLSQL Package</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl#getSpecificName <em>Specific Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl#getLanguage <em>Language</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl#getParameterStyle <em>Parameter Style</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl#isDeterministic <em>Deterministic</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl#getSqlDataAccess <em>Sql Data Access</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl#getCreationTS <em>Creation TS</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl#getLastAlteredTS <em>Last Altered TS</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl#getAuthorizationID <em>Authorization ID</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl#getSecurity <em>Security</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl#getExternalName <em>External Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl#getParameters <em>Parameters</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl#getSource <em>Source</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl#getSchema <em>Schema</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl#getFenced <em>Fenced</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl#getThreadsafe <em>Threadsafe</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl#isDbInfo <em>Db Info</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl#isImplicitSchema <em>Implicit Schema</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl#isFederated <em>Federated</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl#getParmCcsid <em>Parm Ccsid</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl#getSpecialRegister <em>Special Register</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl#getChangeState <em>Change State</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl#getDebugId <em>Debug Id</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl#getProgramType <em>Program Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl#getOrigSchemaName <em>Orig Schema Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl#getOrigParmSig <em>Orig Parm Sig</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl#getExtendedOptions <em>Extended Options</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl#getRoutineExtensions <em>Routine Extensions</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.PLSQLPackageImpl#getPackageBody <em>Package Body</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class PLSQLPackageImpl extends LUWModuleImpl implements PLSQLPackage {
+	/**
+	 * The default value of the '{@link #getSpecificName() <em>Specific Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSpecificName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String SPECIFIC_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getSpecificName() <em>Specific Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSpecificName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String specificName = SPECIFIC_NAME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getLanguage() <em>Language</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLanguage()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String LANGUAGE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getLanguage() <em>Language</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLanguage()
+	 * @generated
+	 * @ordered
+	 */
+	protected String language = LANGUAGE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getParameterStyle() <em>Parameter Style</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getParameterStyle()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String PARAMETER_STYLE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getParameterStyle() <em>Parameter Style</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getParameterStyle()
+	 * @generated
+	 * @ordered
+	 */
+	protected String parameterStyle = PARAMETER_STYLE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isDeterministic() <em>Deterministic</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDeterministic()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean DETERMINISTIC_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isDeterministic() <em>Deterministic</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDeterministic()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean deterministic = DETERMINISTIC_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getSqlDataAccess() <em>Sql Data Access</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSqlDataAccess()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final DataAccess SQL_DATA_ACCESS_EDEFAULT = DataAccess.NO_SQL_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getSqlDataAccess() <em>Sql Data Access</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSqlDataAccess()
+	 * @generated
+	 * @ordered
+	 */
+	protected DataAccess sqlDataAccess = SQL_DATA_ACCESS_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getCreationTS() <em>Creation TS</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCreationTS()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String CREATION_TS_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getCreationTS() <em>Creation TS</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCreationTS()
+	 * @generated
+	 * @ordered
+	 */
+	protected String creationTS = CREATION_TS_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getLastAlteredTS() <em>Last Altered TS</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLastAlteredTS()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String LAST_ALTERED_TS_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getLastAlteredTS() <em>Last Altered TS</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLastAlteredTS()
+	 * @generated
+	 * @ordered
+	 */
+	protected String lastAlteredTS = LAST_ALTERED_TS_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getAuthorizationID() <em>Authorization ID</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAuthorizationID()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String AUTHORIZATION_ID_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getAuthorizationID() <em>Authorization ID</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAuthorizationID()
+	 * @generated
+	 * @ordered
+	 */
+	protected String authorizationID = AUTHORIZATION_ID_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getSecurity() <em>Security</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSecurity()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String SECURITY_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getSecurity() <em>Security</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSecurity()
+	 * @generated
+	 * @ordered
+	 */
+	protected String security = SECURITY_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getExternalName() <em>External Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getExternalName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String EXTERNAL_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getExternalName() <em>External Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getExternalName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String externalName = EXTERNAL_NAME_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getParameters() <em>Parameters</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getParameters()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList parameters;
+
+	/**
+	 * The cached value of the '{@link #getSource() <em>Source</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSource()
+	 * @generated
+	 * @ordered
+	 */
+	protected Source source;
+
+	/**
+	 * The cached value of the '{@link #getSchema() <em>Schema</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSchema()
+	 * @generated
+	 * @ordered
+	 */
+	protected Schema schema;
+
+	/**
+	 * The default value of the '{@link #getFenced() <em>Fenced</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFenced()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String FENCED_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getFenced() <em>Fenced</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFenced()
+	 * @generated
+	 * @ordered
+	 */
+	protected String fenced = FENCED_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getThreadsafe() <em>Threadsafe</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getThreadsafe()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String THREADSAFE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getThreadsafe() <em>Threadsafe</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getThreadsafe()
+	 * @generated
+	 * @ordered
+	 */
+	protected String threadsafe = THREADSAFE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isDbInfo() <em>Db Info</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDbInfo()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean DB_INFO_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isDbInfo() <em>Db Info</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDbInfo()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean dbInfo = DB_INFO_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isImplicitSchema() <em>Implicit Schema</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isImplicitSchema()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean IMPLICIT_SCHEMA_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isImplicitSchema() <em>Implicit Schema</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isImplicitSchema()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean implicitSchema = IMPLICIT_SCHEMA_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isFederated() <em>Federated</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isFederated()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean FEDERATED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isFederated() <em>Federated</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isFederated()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean federated = FEDERATED_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getParmCcsid() <em>Parm Ccsid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getParmCcsid()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String PARM_CCSID_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getParmCcsid() <em>Parm Ccsid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getParmCcsid()
+	 * @generated
+	 * @ordered
+	 */
+	protected String parmCcsid = PARM_CCSID_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getSpecialRegister() <em>Special Register</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSpecialRegister()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String SPECIAL_REGISTER_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getSpecialRegister() <em>Special Register</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSpecialRegister()
+	 * @generated
+	 * @ordered
+	 */
+	protected String specialRegister = SPECIAL_REGISTER_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getChangeState() <em>Change State</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getChangeState()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int CHANGE_STATE_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getChangeState() <em>Change State</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getChangeState()
+	 * @generated
+	 * @ordered
+	 */
+	protected int changeState = CHANGE_STATE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getDebugId() <em>Debug Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDebugId()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String DEBUG_ID_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getDebugId() <em>Debug Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDebugId()
+	 * @generated
+	 * @ordered
+	 */
+	protected String debugId = DEBUG_ID_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getProgramType() <em>Program Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getProgramType()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String PROGRAM_TYPE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getProgramType() <em>Program Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getProgramType()
+	 * @generated
+	 * @ordered
+	 */
+	protected String programType = PROGRAM_TYPE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getOrigSchemaName() <em>Orig Schema Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOrigSchemaName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String ORIG_SCHEMA_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getOrigSchemaName() <em>Orig Schema Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOrigSchemaName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String origSchemaName = ORIG_SCHEMA_NAME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getOrigParmSig() <em>Orig Parm Sig</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOrigParmSig()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String ORIG_PARM_SIG_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getOrigParmSig() <em>Orig Parm Sig</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOrigParmSig()
+	 * @generated
+	 * @ordered
+	 */
+	protected String origParmSig = ORIG_PARM_SIG_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getExtendedOptions() <em>Extended Options</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getExtendedOptions()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList extendedOptions;
+
+	/**
+	 * The cached value of the '{@link #getRoutineExtensions() <em>Routine Extensions</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRoutineExtensions()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList routineExtensions;
+
+	/**
+	 * The cached value of the '{@link #getPackageBody() <em>Package Body</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPackageBody()
+	 * @generated
+	 * @ordered
+	 */
+	protected PLSQLPackageBody packageBody;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PLSQLPackageImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.PLSQL_PACKAGE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getSpecificName() {
+		return specificName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSpecificName(String newSpecificName) {
+		String oldSpecificName = specificName;
+		specificName = newSpecificName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.PLSQL_PACKAGE__SPECIFIC_NAME, oldSpecificName, specificName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getLanguage() {
+		return language;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLanguage(String newLanguage) {
+		String oldLanguage = language;
+		language = newLanguage;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.PLSQL_PACKAGE__LANGUAGE, oldLanguage, language));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getParameterStyle() {
+		return parameterStyle;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParameterStyle(String newParameterStyle) {
+		String oldParameterStyle = parameterStyle;
+		parameterStyle = newParameterStyle;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.PLSQL_PACKAGE__PARAMETER_STYLE, oldParameterStyle, parameterStyle));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isDeterministic() {
+		return deterministic;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDeterministic(boolean newDeterministic) {
+		boolean oldDeterministic = deterministic;
+		deterministic = newDeterministic;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.PLSQL_PACKAGE__DETERMINISTIC, oldDeterministic, deterministic));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DataAccess getSqlDataAccess() {
+		return sqlDataAccess;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSqlDataAccess(DataAccess newSqlDataAccess) {
+		DataAccess oldSqlDataAccess = sqlDataAccess;
+		sqlDataAccess = newSqlDataAccess == null ? SQL_DATA_ACCESS_EDEFAULT : newSqlDataAccess;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.PLSQL_PACKAGE__SQL_DATA_ACCESS, oldSqlDataAccess, sqlDataAccess));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getCreationTS() {
+		return creationTS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCreationTS(String newCreationTS) {
+		String oldCreationTS = creationTS;
+		creationTS = newCreationTS;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.PLSQL_PACKAGE__CREATION_TS, oldCreationTS, creationTS));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getLastAlteredTS() {
+		return lastAlteredTS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLastAlteredTS(String newLastAlteredTS) {
+		String oldLastAlteredTS = lastAlteredTS;
+		lastAlteredTS = newLastAlteredTS;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.PLSQL_PACKAGE__LAST_ALTERED_TS, oldLastAlteredTS, lastAlteredTS));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getAuthorizationID() {
+		return authorizationID;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setAuthorizationID(String newAuthorizationID) {
+		String oldAuthorizationID = authorizationID;
+		authorizationID = newAuthorizationID;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.PLSQL_PACKAGE__AUTHORIZATION_ID, oldAuthorizationID, authorizationID));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getSecurity() {
+		return security;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSecurity(String newSecurity) {
+		String oldSecurity = security;
+		security = newSecurity;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.PLSQL_PACKAGE__SECURITY, oldSecurity, security));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getExternalName() {
+		return externalName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setExternalName(String newExternalName) {
+		String oldExternalName = externalName;
+		externalName = newExternalName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.PLSQL_PACKAGE__EXTERNAL_NAME, oldExternalName, externalName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getParameters() {
+		if (parameters == null) {
+			parameters = new EObjectContainmentWithInverseEList(Parameter.class, this, LUWPackage.PLSQL_PACKAGE__PARAMETERS, SQLRoutinesPackage.PARAMETER__ROUTINE);
+		}
+		return parameters;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Source getSource() {
+		return source;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetSource(Source newSource, NotificationChain msgs) {
+		Source oldSource = source;
+		source = newSource;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.PLSQL_PACKAGE__SOURCE, oldSource, newSource);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSource(Source newSource) {
+		if (newSource != source) {
+			NotificationChain msgs = null;
+			if (source != null)
+				msgs = ((InternalEObject)source).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - LUWPackage.PLSQL_PACKAGE__SOURCE, null, msgs);
+			if (newSource != null)
+				msgs = ((InternalEObject)newSource).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - LUWPackage.PLSQL_PACKAGE__SOURCE, null, msgs);
+			msgs = basicSetSource(newSource, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.PLSQL_PACKAGE__SOURCE, newSource, newSource));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Schema getSchema() {
+		if (schema != null && schema.eIsProxy()) {
+			InternalEObject oldSchema = (InternalEObject)schema;
+			schema = (Schema)eResolveProxy(oldSchema);
+			if (schema != oldSchema) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.PLSQL_PACKAGE__SCHEMA, oldSchema, schema));
+			}
+		}
+		return schema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Schema basicGetSchema() {
+		return schema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetSchema(Schema newSchema, NotificationChain msgs) {
+		Schema oldSchema = schema;
+		schema = newSchema;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.PLSQL_PACKAGE__SCHEMA, oldSchema, newSchema);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSchema(Schema newSchema) {
+		if (newSchema != schema) {
+			NotificationChain msgs = null;
+			if (schema != null)
+				msgs = ((InternalEObject)schema).eInverseRemove(this, SQLSchemaPackage.SCHEMA__ROUTINES, Schema.class, msgs);
+			if (newSchema != null)
+				msgs = ((InternalEObject)newSchema).eInverseAdd(this, SQLSchemaPackage.SCHEMA__ROUTINES, Schema.class, msgs);
+			msgs = basicSetSchema(newSchema, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.PLSQL_PACKAGE__SCHEMA, newSchema, newSchema));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getFenced() {
+		return fenced;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFenced(String newFenced) {
+		String oldFenced = fenced;
+		fenced = newFenced;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.PLSQL_PACKAGE__FENCED, oldFenced, fenced));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getThreadsafe() {
+		return threadsafe;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setThreadsafe(String newThreadsafe) {
+		String oldThreadsafe = threadsafe;
+		threadsafe = newThreadsafe;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.PLSQL_PACKAGE__THREADSAFE, oldThreadsafe, threadsafe));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isDbInfo() {
+		return dbInfo;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDbInfo(boolean newDbInfo) {
+		boolean oldDbInfo = dbInfo;
+		dbInfo = newDbInfo;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.PLSQL_PACKAGE__DB_INFO, oldDbInfo, dbInfo));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isImplicitSchema() {
+		return implicitSchema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setImplicitSchema(boolean newImplicitSchema) {
+		boolean oldImplicitSchema = implicitSchema;
+		implicitSchema = newImplicitSchema;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.PLSQL_PACKAGE__IMPLICIT_SCHEMA, oldImplicitSchema, implicitSchema));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isFederated() {
+		return federated;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFederated(boolean newFederated) {
+		boolean oldFederated = federated;
+		federated = newFederated;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.PLSQL_PACKAGE__FEDERATED, oldFederated, federated));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getParmCcsid() {
+		return parmCcsid;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParmCcsid(String newParmCcsid) {
+		String oldParmCcsid = parmCcsid;
+		parmCcsid = newParmCcsid;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.PLSQL_PACKAGE__PARM_CCSID, oldParmCcsid, parmCcsid));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getSpecialRegister() {
+		return specialRegister;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSpecialRegister(String newSpecialRegister) {
+		String oldSpecialRegister = specialRegister;
+		specialRegister = newSpecialRegister;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.PLSQL_PACKAGE__SPECIAL_REGISTER, oldSpecialRegister, specialRegister));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getChangeState() {
+		return changeState;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setChangeState(int newChangeState) {
+		int oldChangeState = changeState;
+		changeState = newChangeState;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.PLSQL_PACKAGE__CHANGE_STATE, oldChangeState, changeState));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getDebugId() {
+		return debugId;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDebugId(String newDebugId) {
+		String oldDebugId = debugId;
+		debugId = newDebugId;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.PLSQL_PACKAGE__DEBUG_ID, oldDebugId, debugId));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getProgramType() {
+		return programType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setProgramType(String newProgramType) {
+		String oldProgramType = programType;
+		programType = newProgramType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.PLSQL_PACKAGE__PROGRAM_TYPE, oldProgramType, programType));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getOrigSchemaName() {
+		return origSchemaName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOrigSchemaName(String newOrigSchemaName) {
+		String oldOrigSchemaName = origSchemaName;
+		origSchemaName = newOrigSchemaName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.PLSQL_PACKAGE__ORIG_SCHEMA_NAME, oldOrigSchemaName, origSchemaName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getOrigParmSig() {
+		return origParmSig;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOrigParmSig(String newOrigParmSig) {
+		String oldOrigParmSig = origParmSig;
+		origParmSig = newOrigParmSig;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.PLSQL_PACKAGE__ORIG_PARM_SIG, oldOrigParmSig, origParmSig));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getExtendedOptions() {
+		if (extendedOptions == null) {
+			extendedOptions = new EObjectContainmentEList(DB2ExtendedOptions.class, this, LUWPackage.PLSQL_PACKAGE__EXTENDED_OPTIONS);
+		}
+		return extendedOptions;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getRoutineExtensions() {
+		if (routineExtensions == null) {
+			routineExtensions = new EObjectResolvingEList(DB2RoutineExtension.class, this, LUWPackage.PLSQL_PACKAGE__ROUTINE_EXTENSIONS);
+		}
+		return routineExtensions;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PLSQLPackageBody getPackageBody() {
+		return packageBody;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetPackageBody(PLSQLPackageBody newPackageBody, NotificationChain msgs) {
+		PLSQLPackageBody oldPackageBody = packageBody;
+		packageBody = newPackageBody;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.PLSQL_PACKAGE__PACKAGE_BODY, oldPackageBody, newPackageBody);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPackageBody(PLSQLPackageBody newPackageBody) {
+		if (newPackageBody != packageBody) {
+			NotificationChain msgs = null;
+			if (packageBody != null)
+				msgs = ((InternalEObject)packageBody).eInverseRemove(this, LUWPackage.PLSQL_PACKAGE_BODY__PACKAGE, PLSQLPackageBody.class, msgs);
+			if (newPackageBody != null)
+				msgs = ((InternalEObject)newPackageBody).eInverseAdd(this, LUWPackage.PLSQL_PACKAGE_BODY__PACKAGE, PLSQLPackageBody.class, msgs);
+			msgs = basicSetPackageBody(newPackageBody, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.PLSQL_PACKAGE__PACKAGE_BODY, newPackageBody, newPackageBody));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.PLSQL_PACKAGE__PARAMETERS:
+				return ((InternalEList)getParameters()).basicAdd(otherEnd, msgs);
+			case LUWPackage.PLSQL_PACKAGE__SCHEMA:
+				if (schema != null)
+					msgs = ((InternalEObject)schema).eInverseRemove(this, SQLSchemaPackage.SCHEMA__ROUTINES, Schema.class, msgs);
+				return basicSetSchema((Schema)otherEnd, msgs);
+			case LUWPackage.PLSQL_PACKAGE__PACKAGE_BODY:
+				if (packageBody != null)
+					msgs = ((InternalEObject)packageBody).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - LUWPackage.PLSQL_PACKAGE__PACKAGE_BODY, null, msgs);
+				return basicSetPackageBody((PLSQLPackageBody)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.PLSQL_PACKAGE__PARAMETERS:
+				return ((InternalEList)getParameters()).basicRemove(otherEnd, msgs);
+			case LUWPackage.PLSQL_PACKAGE__SOURCE:
+				return basicSetSource(null, msgs);
+			case LUWPackage.PLSQL_PACKAGE__SCHEMA:
+				return basicSetSchema(null, msgs);
+			case LUWPackage.PLSQL_PACKAGE__EXTENDED_OPTIONS:
+				return ((InternalEList)getExtendedOptions()).basicRemove(otherEnd, msgs);
+			case LUWPackage.PLSQL_PACKAGE__PACKAGE_BODY:
+				return basicSetPackageBody(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.PLSQL_PACKAGE__SPECIFIC_NAME:
+				return getSpecificName();
+			case LUWPackage.PLSQL_PACKAGE__LANGUAGE:
+				return getLanguage();
+			case LUWPackage.PLSQL_PACKAGE__PARAMETER_STYLE:
+				return getParameterStyle();
+			case LUWPackage.PLSQL_PACKAGE__DETERMINISTIC:
+				return isDeterministic() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.PLSQL_PACKAGE__SQL_DATA_ACCESS:
+				return getSqlDataAccess();
+			case LUWPackage.PLSQL_PACKAGE__CREATION_TS:
+				return getCreationTS();
+			case LUWPackage.PLSQL_PACKAGE__LAST_ALTERED_TS:
+				return getLastAlteredTS();
+			case LUWPackage.PLSQL_PACKAGE__AUTHORIZATION_ID:
+				return getAuthorizationID();
+			case LUWPackage.PLSQL_PACKAGE__SECURITY:
+				return getSecurity();
+			case LUWPackage.PLSQL_PACKAGE__EXTERNAL_NAME:
+				return getExternalName();
+			case LUWPackage.PLSQL_PACKAGE__PARAMETERS:
+				return getParameters();
+			case LUWPackage.PLSQL_PACKAGE__SOURCE:
+				return getSource();
+			case LUWPackage.PLSQL_PACKAGE__SCHEMA:
+				if (resolve) return getSchema();
+				return basicGetSchema();
+			case LUWPackage.PLSQL_PACKAGE__FENCED:
+				return getFenced();
+			case LUWPackage.PLSQL_PACKAGE__THREADSAFE:
+				return getThreadsafe();
+			case LUWPackage.PLSQL_PACKAGE__DB_INFO:
+				return isDbInfo() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.PLSQL_PACKAGE__IMPLICIT_SCHEMA:
+				return isImplicitSchema() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.PLSQL_PACKAGE__FEDERATED:
+				return isFederated() ? Boolean.TRUE : Boolean.FALSE;
+			case LUWPackage.PLSQL_PACKAGE__PARM_CCSID:
+				return getParmCcsid();
+			case LUWPackage.PLSQL_PACKAGE__SPECIAL_REGISTER:
+				return getSpecialRegister();
+			case LUWPackage.PLSQL_PACKAGE__CHANGE_STATE:
+				return new Integer(getChangeState());
+			case LUWPackage.PLSQL_PACKAGE__DEBUG_ID:
+				return getDebugId();
+			case LUWPackage.PLSQL_PACKAGE__PROGRAM_TYPE:
+				return getProgramType();
+			case LUWPackage.PLSQL_PACKAGE__ORIG_SCHEMA_NAME:
+				return getOrigSchemaName();
+			case LUWPackage.PLSQL_PACKAGE__ORIG_PARM_SIG:
+				return getOrigParmSig();
+			case LUWPackage.PLSQL_PACKAGE__EXTENDED_OPTIONS:
+				return getExtendedOptions();
+			case LUWPackage.PLSQL_PACKAGE__ROUTINE_EXTENSIONS:
+				return getRoutineExtensions();
+			case LUWPackage.PLSQL_PACKAGE__PACKAGE_BODY:
+				return getPackageBody();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.PLSQL_PACKAGE__SPECIFIC_NAME:
+				setSpecificName((String)newValue);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__LANGUAGE:
+				setLanguage((String)newValue);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__PARAMETER_STYLE:
+				setParameterStyle((String)newValue);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__DETERMINISTIC:
+				setDeterministic(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.PLSQL_PACKAGE__SQL_DATA_ACCESS:
+				setSqlDataAccess((DataAccess)newValue);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__CREATION_TS:
+				setCreationTS((String)newValue);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__LAST_ALTERED_TS:
+				setLastAlteredTS((String)newValue);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__AUTHORIZATION_ID:
+				setAuthorizationID((String)newValue);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__SECURITY:
+				setSecurity((String)newValue);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__EXTERNAL_NAME:
+				setExternalName((String)newValue);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__PARAMETERS:
+				getParameters().clear();
+				getParameters().addAll((Collection)newValue);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__SOURCE:
+				setSource((Source)newValue);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__SCHEMA:
+				setSchema((Schema)newValue);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__FENCED:
+				setFenced((String)newValue);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__THREADSAFE:
+				setThreadsafe((String)newValue);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__DB_INFO:
+				setDbInfo(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.PLSQL_PACKAGE__IMPLICIT_SCHEMA:
+				setImplicitSchema(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.PLSQL_PACKAGE__FEDERATED:
+				setFederated(((Boolean)newValue).booleanValue());
+				return;
+			case LUWPackage.PLSQL_PACKAGE__PARM_CCSID:
+				setParmCcsid((String)newValue);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__SPECIAL_REGISTER:
+				setSpecialRegister((String)newValue);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__CHANGE_STATE:
+				setChangeState(((Integer)newValue).intValue());
+				return;
+			case LUWPackage.PLSQL_PACKAGE__DEBUG_ID:
+				setDebugId((String)newValue);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__PROGRAM_TYPE:
+				setProgramType((String)newValue);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__ORIG_SCHEMA_NAME:
+				setOrigSchemaName((String)newValue);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__ORIG_PARM_SIG:
+				setOrigParmSig((String)newValue);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__EXTENDED_OPTIONS:
+				getExtendedOptions().clear();
+				getExtendedOptions().addAll((Collection)newValue);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__ROUTINE_EXTENSIONS:
+				getRoutineExtensions().clear();
+				getRoutineExtensions().addAll((Collection)newValue);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__PACKAGE_BODY:
+				setPackageBody((PLSQLPackageBody)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.PLSQL_PACKAGE__SPECIFIC_NAME:
+				setSpecificName(SPECIFIC_NAME_EDEFAULT);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__LANGUAGE:
+				setLanguage(LANGUAGE_EDEFAULT);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__PARAMETER_STYLE:
+				setParameterStyle(PARAMETER_STYLE_EDEFAULT);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__DETERMINISTIC:
+				setDeterministic(DETERMINISTIC_EDEFAULT);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__SQL_DATA_ACCESS:
+				setSqlDataAccess(SQL_DATA_ACCESS_EDEFAULT);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__CREATION_TS:
+				setCreationTS(CREATION_TS_EDEFAULT);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__LAST_ALTERED_TS:
+				setLastAlteredTS(LAST_ALTERED_TS_EDEFAULT);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__AUTHORIZATION_ID:
+				setAuthorizationID(AUTHORIZATION_ID_EDEFAULT);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__SECURITY:
+				setSecurity(SECURITY_EDEFAULT);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__EXTERNAL_NAME:
+				setExternalName(EXTERNAL_NAME_EDEFAULT);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__PARAMETERS:
+				getParameters().clear();
+				return;
+			case LUWPackage.PLSQL_PACKAGE__SOURCE:
+				setSource((Source)null);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__SCHEMA:
+				setSchema((Schema)null);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__FENCED:
+				setFenced(FENCED_EDEFAULT);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__THREADSAFE:
+				setThreadsafe(THREADSAFE_EDEFAULT);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__DB_INFO:
+				setDbInfo(DB_INFO_EDEFAULT);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__IMPLICIT_SCHEMA:
+				setImplicitSchema(IMPLICIT_SCHEMA_EDEFAULT);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__FEDERATED:
+				setFederated(FEDERATED_EDEFAULT);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__PARM_CCSID:
+				setParmCcsid(PARM_CCSID_EDEFAULT);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__SPECIAL_REGISTER:
+				setSpecialRegister(SPECIAL_REGISTER_EDEFAULT);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__CHANGE_STATE:
+				setChangeState(CHANGE_STATE_EDEFAULT);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__DEBUG_ID:
+				setDebugId(DEBUG_ID_EDEFAULT);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__PROGRAM_TYPE:
+				setProgramType(PROGRAM_TYPE_EDEFAULT);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__ORIG_SCHEMA_NAME:
+				setOrigSchemaName(ORIG_SCHEMA_NAME_EDEFAULT);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__ORIG_PARM_SIG:
+				setOrigParmSig(ORIG_PARM_SIG_EDEFAULT);
+				return;
+			case LUWPackage.PLSQL_PACKAGE__EXTENDED_OPTIONS:
+				getExtendedOptions().clear();
+				return;
+			case LUWPackage.PLSQL_PACKAGE__ROUTINE_EXTENSIONS:
+				getRoutineExtensions().clear();
+				return;
+			case LUWPackage.PLSQL_PACKAGE__PACKAGE_BODY:
+				setPackageBody((PLSQLPackageBody)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.PLSQL_PACKAGE__SPECIFIC_NAME:
+				return SPECIFIC_NAME_EDEFAULT == null ? specificName != null : !SPECIFIC_NAME_EDEFAULT.equals(specificName);
+			case LUWPackage.PLSQL_PACKAGE__LANGUAGE:
+				return LANGUAGE_EDEFAULT == null ? language != null : !LANGUAGE_EDEFAULT.equals(language);
+			case LUWPackage.PLSQL_PACKAGE__PARAMETER_STYLE:
+				return PARAMETER_STYLE_EDEFAULT == null ? parameterStyle != null : !PARAMETER_STYLE_EDEFAULT.equals(parameterStyle);
+			case LUWPackage.PLSQL_PACKAGE__DETERMINISTIC:
+				return deterministic != DETERMINISTIC_EDEFAULT;
+			case LUWPackage.PLSQL_PACKAGE__SQL_DATA_ACCESS:
+				return sqlDataAccess != SQL_DATA_ACCESS_EDEFAULT;
+			case LUWPackage.PLSQL_PACKAGE__CREATION_TS:
+				return CREATION_TS_EDEFAULT == null ? creationTS != null : !CREATION_TS_EDEFAULT.equals(creationTS);
+			case LUWPackage.PLSQL_PACKAGE__LAST_ALTERED_TS:
+				return LAST_ALTERED_TS_EDEFAULT == null ? lastAlteredTS != null : !LAST_ALTERED_TS_EDEFAULT.equals(lastAlteredTS);
+			case LUWPackage.PLSQL_PACKAGE__AUTHORIZATION_ID:
+				return AUTHORIZATION_ID_EDEFAULT == null ? authorizationID != null : !AUTHORIZATION_ID_EDEFAULT.equals(authorizationID);
+			case LUWPackage.PLSQL_PACKAGE__SECURITY:
+				return SECURITY_EDEFAULT == null ? security != null : !SECURITY_EDEFAULT.equals(security);
+			case LUWPackage.PLSQL_PACKAGE__EXTERNAL_NAME:
+				return EXTERNAL_NAME_EDEFAULT == null ? externalName != null : !EXTERNAL_NAME_EDEFAULT.equals(externalName);
+			case LUWPackage.PLSQL_PACKAGE__PARAMETERS:
+				return parameters != null && !parameters.isEmpty();
+			case LUWPackage.PLSQL_PACKAGE__SOURCE:
+				return source != null;
+			case LUWPackage.PLSQL_PACKAGE__SCHEMA:
+				return schema != null;
+			case LUWPackage.PLSQL_PACKAGE__FENCED:
+				return FENCED_EDEFAULT == null ? fenced != null : !FENCED_EDEFAULT.equals(fenced);
+			case LUWPackage.PLSQL_PACKAGE__THREADSAFE:
+				return THREADSAFE_EDEFAULT == null ? threadsafe != null : !THREADSAFE_EDEFAULT.equals(threadsafe);
+			case LUWPackage.PLSQL_PACKAGE__DB_INFO:
+				return dbInfo != DB_INFO_EDEFAULT;
+			case LUWPackage.PLSQL_PACKAGE__IMPLICIT_SCHEMA:
+				return implicitSchema != IMPLICIT_SCHEMA_EDEFAULT;
+			case LUWPackage.PLSQL_PACKAGE__FEDERATED:
+				return federated != FEDERATED_EDEFAULT;
+			case LUWPackage.PLSQL_PACKAGE__PARM_CCSID:
+				return PARM_CCSID_EDEFAULT == null ? parmCcsid != null : !PARM_CCSID_EDEFAULT.equals(parmCcsid);
+			case LUWPackage.PLSQL_PACKAGE__SPECIAL_REGISTER:
+				return SPECIAL_REGISTER_EDEFAULT == null ? specialRegister != null : !SPECIAL_REGISTER_EDEFAULT.equals(specialRegister);
+			case LUWPackage.PLSQL_PACKAGE__CHANGE_STATE:
+				return changeState != CHANGE_STATE_EDEFAULT;
+			case LUWPackage.PLSQL_PACKAGE__DEBUG_ID:
+				return DEBUG_ID_EDEFAULT == null ? debugId != null : !DEBUG_ID_EDEFAULT.equals(debugId);
+			case LUWPackage.PLSQL_PACKAGE__PROGRAM_TYPE:
+				return PROGRAM_TYPE_EDEFAULT == null ? programType != null : !PROGRAM_TYPE_EDEFAULT.equals(programType);
+			case LUWPackage.PLSQL_PACKAGE__ORIG_SCHEMA_NAME:
+				return ORIG_SCHEMA_NAME_EDEFAULT == null ? origSchemaName != null : !ORIG_SCHEMA_NAME_EDEFAULT.equals(origSchemaName);
+			case LUWPackage.PLSQL_PACKAGE__ORIG_PARM_SIG:
+				return ORIG_PARM_SIG_EDEFAULT == null ? origParmSig != null : !ORIG_PARM_SIG_EDEFAULT.equals(origParmSig);
+			case LUWPackage.PLSQL_PACKAGE__EXTENDED_OPTIONS:
+				return extendedOptions != null && !extendedOptions.isEmpty();
+			case LUWPackage.PLSQL_PACKAGE__ROUTINE_EXTENSIONS:
+				return routineExtensions != null && !routineExtensions.isEmpty();
+			case LUWPackage.PLSQL_PACKAGE__PACKAGE_BODY:
+				return packageBody != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class baseClass) {
+		if (baseClass == Routine.class) {
+			switch (derivedFeatureID) {
+				case LUWPackage.PLSQL_PACKAGE__SPECIFIC_NAME: return SQLRoutinesPackage.ROUTINE__SPECIFIC_NAME;
+				case LUWPackage.PLSQL_PACKAGE__LANGUAGE: return SQLRoutinesPackage.ROUTINE__LANGUAGE;
+				case LUWPackage.PLSQL_PACKAGE__PARAMETER_STYLE: return SQLRoutinesPackage.ROUTINE__PARAMETER_STYLE;
+				case LUWPackage.PLSQL_PACKAGE__DETERMINISTIC: return SQLRoutinesPackage.ROUTINE__DETERMINISTIC;
+				case LUWPackage.PLSQL_PACKAGE__SQL_DATA_ACCESS: return SQLRoutinesPackage.ROUTINE__SQL_DATA_ACCESS;
+				case LUWPackage.PLSQL_PACKAGE__CREATION_TS: return SQLRoutinesPackage.ROUTINE__CREATION_TS;
+				case LUWPackage.PLSQL_PACKAGE__LAST_ALTERED_TS: return SQLRoutinesPackage.ROUTINE__LAST_ALTERED_TS;
+				case LUWPackage.PLSQL_PACKAGE__AUTHORIZATION_ID: return SQLRoutinesPackage.ROUTINE__AUTHORIZATION_ID;
+				case LUWPackage.PLSQL_PACKAGE__SECURITY: return SQLRoutinesPackage.ROUTINE__SECURITY;
+				case LUWPackage.PLSQL_PACKAGE__EXTERNAL_NAME: return SQLRoutinesPackage.ROUTINE__EXTERNAL_NAME;
+				case LUWPackage.PLSQL_PACKAGE__PARAMETERS: return SQLRoutinesPackage.ROUTINE__PARAMETERS;
+				case LUWPackage.PLSQL_PACKAGE__SOURCE: return SQLRoutinesPackage.ROUTINE__SOURCE;
+				case LUWPackage.PLSQL_PACKAGE__SCHEMA: return SQLRoutinesPackage.ROUTINE__SCHEMA;
+				default: return -1;
+			}
+		}
+		if (baseClass == DB2AccessPlan.class) {
+			switch (derivedFeatureID) {
+				default: return -1;
+			}
+		}
+		if (baseClass == DB2Routine.class) {
+			switch (derivedFeatureID) {
+				case LUWPackage.PLSQL_PACKAGE__FENCED: return DB2ModelPackage.DB2_ROUTINE__FENCED;
+				case LUWPackage.PLSQL_PACKAGE__THREADSAFE: return DB2ModelPackage.DB2_ROUTINE__THREADSAFE;
+				case LUWPackage.PLSQL_PACKAGE__DB_INFO: return DB2ModelPackage.DB2_ROUTINE__DB_INFO;
+				case LUWPackage.PLSQL_PACKAGE__IMPLICIT_SCHEMA: return DB2ModelPackage.DB2_ROUTINE__IMPLICIT_SCHEMA;
+				case LUWPackage.PLSQL_PACKAGE__FEDERATED: return DB2ModelPackage.DB2_ROUTINE__FEDERATED;
+				case LUWPackage.PLSQL_PACKAGE__PARM_CCSID: return DB2ModelPackage.DB2_ROUTINE__PARM_CCSID;
+				case LUWPackage.PLSQL_PACKAGE__SPECIAL_REGISTER: return DB2ModelPackage.DB2_ROUTINE__SPECIAL_REGISTER;
+				case LUWPackage.PLSQL_PACKAGE__CHANGE_STATE: return DB2ModelPackage.DB2_ROUTINE__CHANGE_STATE;
+				case LUWPackage.PLSQL_PACKAGE__DEBUG_ID: return DB2ModelPackage.DB2_ROUTINE__DEBUG_ID;
+				case LUWPackage.PLSQL_PACKAGE__PROGRAM_TYPE: return DB2ModelPackage.DB2_ROUTINE__PROGRAM_TYPE;
+				case LUWPackage.PLSQL_PACKAGE__ORIG_SCHEMA_NAME: return DB2ModelPackage.DB2_ROUTINE__ORIG_SCHEMA_NAME;
+				case LUWPackage.PLSQL_PACKAGE__ORIG_PARM_SIG: return DB2ModelPackage.DB2_ROUTINE__ORIG_PARM_SIG;
+				case LUWPackage.PLSQL_PACKAGE__EXTENDED_OPTIONS: return DB2ModelPackage.DB2_ROUTINE__EXTENDED_OPTIONS;
+				case LUWPackage.PLSQL_PACKAGE__ROUTINE_EXTENSIONS: return DB2ModelPackage.DB2_ROUTINE__ROUTINE_EXTENSIONS;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class baseClass) {
+		if (baseClass == Routine.class) {
+			switch (baseFeatureID) {
+				case SQLRoutinesPackage.ROUTINE__SPECIFIC_NAME: return LUWPackage.PLSQL_PACKAGE__SPECIFIC_NAME;
+				case SQLRoutinesPackage.ROUTINE__LANGUAGE: return LUWPackage.PLSQL_PACKAGE__LANGUAGE;
+				case SQLRoutinesPackage.ROUTINE__PARAMETER_STYLE: return LUWPackage.PLSQL_PACKAGE__PARAMETER_STYLE;
+				case SQLRoutinesPackage.ROUTINE__DETERMINISTIC: return LUWPackage.PLSQL_PACKAGE__DETERMINISTIC;
+				case SQLRoutinesPackage.ROUTINE__SQL_DATA_ACCESS: return LUWPackage.PLSQL_PACKAGE__SQL_DATA_ACCESS;
+				case SQLRoutinesPackage.ROUTINE__CREATION_TS: return LUWPackage.PLSQL_PACKAGE__CREATION_TS;
+				case SQLRoutinesPackage.ROUTINE__LAST_ALTERED_TS: return LUWPackage.PLSQL_PACKAGE__LAST_ALTERED_TS;
+				case SQLRoutinesPackage.ROUTINE__AUTHORIZATION_ID: return LUWPackage.PLSQL_PACKAGE__AUTHORIZATION_ID;
+				case SQLRoutinesPackage.ROUTINE__SECURITY: return LUWPackage.PLSQL_PACKAGE__SECURITY;
+				case SQLRoutinesPackage.ROUTINE__EXTERNAL_NAME: return LUWPackage.PLSQL_PACKAGE__EXTERNAL_NAME;
+				case SQLRoutinesPackage.ROUTINE__PARAMETERS: return LUWPackage.PLSQL_PACKAGE__PARAMETERS;
+				case SQLRoutinesPackage.ROUTINE__SOURCE: return LUWPackage.PLSQL_PACKAGE__SOURCE;
+				case SQLRoutinesPackage.ROUTINE__SCHEMA: return LUWPackage.PLSQL_PACKAGE__SCHEMA;
+				default: return -1;
+			}
+		}
+		if (baseClass == DB2AccessPlan.class) {
+			switch (baseFeatureID) {
+				default: return -1;
+			}
+		}
+		if (baseClass == DB2Routine.class) {
+			switch (baseFeatureID) {
+				case DB2ModelPackage.DB2_ROUTINE__FENCED: return LUWPackage.PLSQL_PACKAGE__FENCED;
+				case DB2ModelPackage.DB2_ROUTINE__THREADSAFE: return LUWPackage.PLSQL_PACKAGE__THREADSAFE;
+				case DB2ModelPackage.DB2_ROUTINE__DB_INFO: return LUWPackage.PLSQL_PACKAGE__DB_INFO;
+				case DB2ModelPackage.DB2_ROUTINE__IMPLICIT_SCHEMA: return LUWPackage.PLSQL_PACKAGE__IMPLICIT_SCHEMA;
+				case DB2ModelPackage.DB2_ROUTINE__FEDERATED: return LUWPackage.PLSQL_PACKAGE__FEDERATED;
+				case DB2ModelPackage.DB2_ROUTINE__PARM_CCSID: return LUWPackage.PLSQL_PACKAGE__PARM_CCSID;
+				case DB2ModelPackage.DB2_ROUTINE__SPECIAL_REGISTER: return LUWPackage.PLSQL_PACKAGE__SPECIAL_REGISTER;
+				case DB2ModelPackage.DB2_ROUTINE__CHANGE_STATE: return LUWPackage.PLSQL_PACKAGE__CHANGE_STATE;
+				case DB2ModelPackage.DB2_ROUTINE__DEBUG_ID: return LUWPackage.PLSQL_PACKAGE__DEBUG_ID;
+				case DB2ModelPackage.DB2_ROUTINE__PROGRAM_TYPE: return LUWPackage.PLSQL_PACKAGE__PROGRAM_TYPE;
+				case DB2ModelPackage.DB2_ROUTINE__ORIG_SCHEMA_NAME: return LUWPackage.PLSQL_PACKAGE__ORIG_SCHEMA_NAME;
+				case DB2ModelPackage.DB2_ROUTINE__ORIG_PARM_SIG: return LUWPackage.PLSQL_PACKAGE__ORIG_PARM_SIG;
+				case DB2ModelPackage.DB2_ROUTINE__EXTENDED_OPTIONS: return LUWPackage.PLSQL_PACKAGE__EXTENDED_OPTIONS;
+				case DB2ModelPackage.DB2_ROUTINE__ROUTINE_EXTENSIONS: return LUWPackage.PLSQL_PACKAGE__ROUTINE_EXTENSIONS;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+   /**
+    * Gets a list of IN and INOUT parameters associated with this routine.
+    * <p>
+    * @return a list of IN and INOUT parameters associated with this routine.
+    */
+	public EList getInputParameters() {
+		return getParameters(ParameterMode.IN);
+	}
+
+   /**
+    * Gets a list of OUT and INOUT parameters associated with this routine.
+    * <p>
+    * @return a list of OUT and INOUT parameters associated with this routine.
+    */
+	public EList getOutputParameters() {
+		return getParameters(ParameterMode.OUT);
+	}
+
+   /**
+    * Gets a list of IN and INOUT parameters associated with this routine. If
+    * the input parameter mode is <code>ParameterMode.IN</code>, then we
+    * return parameters that are both IN and INOUT. Similarly, if the input
+    * parameter mode is <code>ParameterMode.OUT</code>, then we return
+    * parameters that are both OUT and INOUT.
+    * <p>
+    * @param aMode Either IN or OUT, INOUT is returned for either case.
+    * @return A list of parameters according to the specified parameter
+    * @see Parameter
+    */
+	protected EList getParameters(int aMode) {
+		Parameter parm;
+		EList allList = getParameters();
+		EList filteredList = new BasicEList();
+		for (int i = 0, parmCnt = allList.size(); i < parmCnt; i++) {
+			parm = (Parameter)allList.get(i);
+			if ((aMode == ParameterMode.IN) && (parm.getMode().getValue() != ParameterMode.OUT))
+				filteredList.add(parm);
+			else if ((aMode == ParameterMode.OUT) && (parm.getMode().getValue() != ParameterMode.IN))
+				filteredList.add(parm);
+		}
+		return filteredList;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (specificName: "); //$NON-NLS-1$
+		result.append(specificName);
+		result.append(", language: "); //$NON-NLS-1$
+		result.append(language);
+		result.append(", parameterStyle: "); //$NON-NLS-1$
+		result.append(parameterStyle);
+		result.append(", deterministic: "); //$NON-NLS-1$
+		result.append(deterministic);
+		result.append(", sqlDataAccess: "); //$NON-NLS-1$
+		result.append(sqlDataAccess);
+		result.append(", creationTS: "); //$NON-NLS-1$
+		result.append(creationTS);
+		result.append(", lastAlteredTS: "); //$NON-NLS-1$
+		result.append(lastAlteredTS);
+		result.append(", authorizationID: "); //$NON-NLS-1$
+		result.append(authorizationID);
+		result.append(", security: "); //$NON-NLS-1$
+		result.append(security);
+		result.append(", externalName: "); //$NON-NLS-1$
+		result.append(externalName);
+		result.append(", fenced: "); //$NON-NLS-1$
+		result.append(fenced);
+		result.append(", threadsafe: "); //$NON-NLS-1$
+		result.append(threadsafe);
+		result.append(", dbInfo: "); //$NON-NLS-1$
+		result.append(dbInfo);
+		result.append(", implicitSchema: "); //$NON-NLS-1$
+		result.append(implicitSchema);
+		result.append(", federated: "); //$NON-NLS-1$
+		result.append(federated);
+		result.append(", parmCcsid: "); //$NON-NLS-1$
+		result.append(parmCcsid);
+		result.append(", specialRegister: "); //$NON-NLS-1$
+		result.append(specialRegister);
+		result.append(", changeState: "); //$NON-NLS-1$
+		result.append(changeState);
+		result.append(", debugId: "); //$NON-NLS-1$
+		result.append(debugId);
+		result.append(", programType: "); //$NON-NLS-1$
+		result.append(programType);
+		result.append(", origSchemaName: "); //$NON-NLS-1$
+		result.append(origSchemaName);
+		result.append(", origParmSig: "); //$NON-NLS-1$
+		result.append(origParmSig);
+		result.append(')');
+		return result.toString();
+	}
+
+} //PLSQLPackageImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/RelationalRemoteDataSetImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/RelationalRemoteDataSetImpl.java
new file mode 100644
index 0000000..b336fdc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/RelationalRemoteDataSetImpl.java
@@ -0,0 +1,252 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: RelationalRemoteDataSetImpl.java,v 1.10 2008/02/05 02:01:23 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNickname;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.RelationalRemoteDataSet;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.RemoteDataSet;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Remote Table</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.RelationalRemoteDataSetImpl#getNickname <em>Nickname</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.RelationalRemoteDataSetImpl#getTable <em>Table</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class RelationalRemoteDataSetImpl extends SQLObjectImpl implements RelationalRemoteDataSet {
+	/**
+	 * The cached value of the '{@link #getNickname() <em>Nickname</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNickname()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList nickname;
+
+	/**
+	 * The cached value of the '{@link #getTable() <em>Table</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTable()
+	 * @generated
+	 * @ordered
+	 */
+	protected BaseTable table;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected RelationalRemoteDataSetImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.RELATIONAL_REMOTE_DATA_SET;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getNickname() {
+		if (nickname == null) {
+			nickname = new EObjectWithInverseResolvingEList(LUWNickname.class, this, LUWPackage.RELATIONAL_REMOTE_DATA_SET__NICKNAME, LUWPackage.LUW_NICKNAME__REMOTE_DATA_SET);
+		}
+		return nickname;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public BaseTable getTable() {
+		if (table != null && table.eIsProxy()) {
+			InternalEObject oldTable = (InternalEObject)table;
+			table = (BaseTable)eResolveProxy(oldTable);
+			if (table != oldTable) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.RELATIONAL_REMOTE_DATA_SET__TABLE, oldTable, table));
+			}
+		}
+		return table;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public BaseTable basicGetTable() {
+		return table;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTable(BaseTable newTable) {
+		BaseTable oldTable = table;
+		table = newTable;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.RELATIONAL_REMOTE_DATA_SET__TABLE, oldTable, table));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.RELATIONAL_REMOTE_DATA_SET__NICKNAME:
+				return ((InternalEList)getNickname()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.RELATIONAL_REMOTE_DATA_SET__NICKNAME:
+				return ((InternalEList)getNickname()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.RELATIONAL_REMOTE_DATA_SET__NICKNAME:
+				return getNickname();
+			case LUWPackage.RELATIONAL_REMOTE_DATA_SET__TABLE:
+				if (resolve) return getTable();
+				return basicGetTable();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.RELATIONAL_REMOTE_DATA_SET__NICKNAME:
+				getNickname().clear();
+				getNickname().addAll((Collection)newValue);
+				return;
+			case LUWPackage.RELATIONAL_REMOTE_DATA_SET__TABLE:
+				setTable((BaseTable)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.RELATIONAL_REMOTE_DATA_SET__NICKNAME:
+				getNickname().clear();
+				return;
+			case LUWPackage.RELATIONAL_REMOTE_DATA_SET__TABLE:
+				setTable((BaseTable)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.RELATIONAL_REMOTE_DATA_SET__NICKNAME:
+				return nickname != null && !nickname.isEmpty();
+			case LUWPackage.RELATIONAL_REMOTE_DATA_SET__TABLE:
+				return table != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class baseClass) {
+		if (baseClass == RemoteDataSet.class) {
+			switch (derivedFeatureID) {
+				case LUWPackage.RELATIONAL_REMOTE_DATA_SET__NICKNAME: return LUWPackage.REMOTE_DATA_SET__NICKNAME;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class baseClass) {
+		if (baseClass == RemoteDataSet.class) {
+			switch (baseFeatureID) {
+				case LUWPackage.REMOTE_DATA_SET__NICKNAME: return LUWPackage.RELATIONAL_REMOTE_DATA_SET__NICKNAME;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+} //RemoteTableImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/RelationalRemoteServerImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/RelationalRemoteServerImpl.java
new file mode 100644
index 0000000..b72911c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/RelationalRemoteServerImpl.java
@@ -0,0 +1,297 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: RelationalRemoteServerImpl.java,v 1.10 2008/02/05 02:01:23 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.RelationalRemoteServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.RemoteServer;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Remote Database</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.RelationalRemoteServerImpl#getLUWServer <em>LUW Server</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.RelationalRemoteServerImpl#getDatabase <em>Database</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class RelationalRemoteServerImpl extends SQLObjectImpl implements RelationalRemoteServer {
+	/**
+	 * The cached value of the '{@link #getLUWServer() <em>LUW Server</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLUWServer()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWServer luwServer;
+
+	/**
+	 * The cached value of the '{@link #getDatabase() <em>Database</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDatabase()
+	 * @generated
+	 * @ordered
+	 */
+	protected Database database;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected RelationalRemoteServerImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.RELATIONAL_REMOTE_SERVER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWServer getLUWServer() {
+		if (luwServer != null && luwServer.eIsProxy()) {
+			InternalEObject oldLUWServer = (InternalEObject)luwServer;
+			luwServer = (LUWServer)eResolveProxy(oldLUWServer);
+			if (luwServer != oldLUWServer) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.RELATIONAL_REMOTE_SERVER__LUW_SERVER, oldLUWServer, luwServer));
+			}
+		}
+		return luwServer;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWServer basicGetLUWServer() {
+		return luwServer;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetLUWServer(LUWServer newLUWServer, NotificationChain msgs) {
+		LUWServer oldLUWServer = luwServer;
+		luwServer = newLUWServer;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.RELATIONAL_REMOTE_SERVER__LUW_SERVER, oldLUWServer, newLUWServer);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLUWServer(LUWServer newLUWServer) {
+		if (newLUWServer != luwServer) {
+			NotificationChain msgs = null;
+			if (luwServer != null)
+				msgs = ((InternalEObject)luwServer).eInverseRemove(this, LUWPackage.LUW_SERVER__REMOTE_SERVER, LUWServer.class, msgs);
+			if (newLUWServer != null)
+				msgs = ((InternalEObject)newLUWServer).eInverseAdd(this, LUWPackage.LUW_SERVER__REMOTE_SERVER, LUWServer.class, msgs);
+			msgs = basicSetLUWServer(newLUWServer, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.RELATIONAL_REMOTE_SERVER__LUW_SERVER, newLUWServer, newLUWServer));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Database getDatabase() {
+		if (database != null && database.eIsProxy()) {
+			InternalEObject oldDatabase = (InternalEObject)database;
+			database = (Database)eResolveProxy(oldDatabase);
+			if (database != oldDatabase) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.RELATIONAL_REMOTE_SERVER__DATABASE, oldDatabase, database));
+			}
+		}
+		return database;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Database basicGetDatabase() {
+		return database;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDatabase(Database newDatabase) {
+		Database oldDatabase = database;
+		database = newDatabase;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.RELATIONAL_REMOTE_SERVER__DATABASE, oldDatabase, database));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.RELATIONAL_REMOTE_SERVER__LUW_SERVER:
+				if (luwServer != null)
+					msgs = ((InternalEObject)luwServer).eInverseRemove(this, LUWPackage.LUW_SERVER__REMOTE_SERVER, LUWServer.class, msgs);
+				return basicSetLUWServer((LUWServer)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.RELATIONAL_REMOTE_SERVER__LUW_SERVER:
+				return basicSetLUWServer(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.RELATIONAL_REMOTE_SERVER__LUW_SERVER:
+				if (resolve) return getLUWServer();
+				return basicGetLUWServer();
+			case LUWPackage.RELATIONAL_REMOTE_SERVER__DATABASE:
+				if (resolve) return getDatabase();
+				return basicGetDatabase();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.RELATIONAL_REMOTE_SERVER__LUW_SERVER:
+				setLUWServer((LUWServer)newValue);
+				return;
+			case LUWPackage.RELATIONAL_REMOTE_SERVER__DATABASE:
+				setDatabase((Database)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.RELATIONAL_REMOTE_SERVER__LUW_SERVER:
+				setLUWServer((LUWServer)null);
+				return;
+			case LUWPackage.RELATIONAL_REMOTE_SERVER__DATABASE:
+				setDatabase((Database)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.RELATIONAL_REMOTE_SERVER__LUW_SERVER:
+				return luwServer != null;
+			case LUWPackage.RELATIONAL_REMOTE_SERVER__DATABASE:
+				return database != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class baseClass) {
+		if (baseClass == RemoteServer.class) {
+			switch (derivedFeatureID) {
+				case LUWPackage.RELATIONAL_REMOTE_SERVER__LUW_SERVER: return LUWPackage.REMOTE_SERVER__LUW_SERVER;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class baseClass) {
+		if (baseClass == RemoteServer.class) {
+			switch (baseFeatureID) {
+				case LUWPackage.REMOTE_SERVER__LUW_SERVER: return LUWPackage.RELATIONAL_REMOTE_SERVER__LUW_SERVER;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+} //RemoteDatabaseImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/RemoteDataSetImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/RemoteDataSetImpl.java
new file mode 100644
index 0000000..197464e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/RemoteDataSetImpl.java
@@ -0,0 +1,159 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: RemoteDataSetImpl.java,v 1.10 2008/02/05 02:01:23 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWNickname;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.RemoteDataSet;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Remote Data Set</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.RemoteDataSetImpl#getNickname <em>Nickname</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class RemoteDataSetImpl extends EObjectImpl implements RemoteDataSet {
+	/**
+	 * The cached value of the '{@link #getNickname() <em>Nickname</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNickname()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList nickname;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected RemoteDataSetImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.REMOTE_DATA_SET;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getNickname() {
+		if (nickname == null) {
+			nickname = new EObjectWithInverseResolvingEList(LUWNickname.class, this, LUWPackage.REMOTE_DATA_SET__NICKNAME, LUWPackage.LUW_NICKNAME__REMOTE_DATA_SET);
+		}
+		return nickname;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.REMOTE_DATA_SET__NICKNAME:
+				return ((InternalEList)getNickname()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.REMOTE_DATA_SET__NICKNAME:
+				return ((InternalEList)getNickname()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.REMOTE_DATA_SET__NICKNAME:
+				return getNickname();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.REMOTE_DATA_SET__NICKNAME:
+				getNickname().clear();
+				getNickname().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.REMOTE_DATA_SET__NICKNAME:
+				getNickname().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.REMOTE_DATA_SET__NICKNAME:
+				return nickname != null && !nickname.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //RemoteDataSetImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/RemoteServerImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/RemoteServerImpl.java
new file mode 100644
index 0000000..0f09720
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/impl/RemoteServerImpl.java
@@ -0,0 +1,205 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: RemoteServerImpl.java,v 1.10 2008/02/05 02:01:23 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWServer;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.RemoteServer;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Remote Server</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.luw.model.impl.RemoteServerImpl#getLUWServer <em>LUW Server</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class RemoteServerImpl extends EObjectImpl implements RemoteServer {
+	/**
+	 * The cached value of the '{@link #getLUWServer() <em>LUW Server</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLUWServer()
+	 * @generated
+	 * @ordered
+	 */
+	protected LUWServer luwServer;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected RemoteServerImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return LUWPackage.Literals.REMOTE_SERVER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWServer getLUWServer() {
+		if (luwServer != null && luwServer.eIsProxy()) {
+			InternalEObject oldLUWServer = (InternalEObject)luwServer;
+			luwServer = (LUWServer)eResolveProxy(oldLUWServer);
+			if (luwServer != oldLUWServer) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LUWPackage.REMOTE_SERVER__LUW_SERVER, oldLUWServer, luwServer));
+			}
+		}
+		return luwServer;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LUWServer basicGetLUWServer() {
+		return luwServer;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetLUWServer(LUWServer newLUWServer, NotificationChain msgs) {
+		LUWServer oldLUWServer = luwServer;
+		luwServer = newLUWServer;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LUWPackage.REMOTE_SERVER__LUW_SERVER, oldLUWServer, newLUWServer);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLUWServer(LUWServer newLUWServer) {
+		if (newLUWServer != luwServer) {
+			NotificationChain msgs = null;
+			if (luwServer != null)
+				msgs = ((InternalEObject)luwServer).eInverseRemove(this, LUWPackage.LUW_SERVER__REMOTE_SERVER, LUWServer.class, msgs);
+			if (newLUWServer != null)
+				msgs = ((InternalEObject)newLUWServer).eInverseAdd(this, LUWPackage.LUW_SERVER__REMOTE_SERVER, LUWServer.class, msgs);
+			msgs = basicSetLUWServer(newLUWServer, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LUWPackage.REMOTE_SERVER__LUW_SERVER, newLUWServer, newLUWServer));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.REMOTE_SERVER__LUW_SERVER:
+				if (luwServer != null)
+					msgs = ((InternalEObject)luwServer).eInverseRemove(this, LUWPackage.LUW_SERVER__REMOTE_SERVER, LUWServer.class, msgs);
+				return basicSetLUWServer((LUWServer)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case LUWPackage.REMOTE_SERVER__LUW_SERVER:
+				return basicSetLUWServer(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LUWPackage.REMOTE_SERVER__LUW_SERVER:
+				if (resolve) return getLUWServer();
+				return basicGetLUWServer();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LUWPackage.REMOTE_SERVER__LUW_SERVER:
+				setLUWServer((LUWServer)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LUWPackage.REMOTE_SERVER__LUW_SERVER:
+				setLUWServer((LUWServer)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LUWPackage.REMOTE_SERVER__LUW_SERVER:
+				return luwServer != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //RemoteServerImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/util/DatabaseToRemoteServerHelper.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/util/DatabaseToRemoteServerHelper.java
new file mode 100644
index 0000000..3435c13
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/util/DatabaseToRemoteServerHelper.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.util;
+
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.RelationalRemoteServer;
+import org.eclipse.datatools.enablement.ibm.db2.model.util.ReverseNavigationHelper;
+
+/**
+ * @author ellersr
+ *
+ * Helper to provide the ability to navigate the <code>RelationalRemoteServer.database</code> relationship
+ * in the inverse direction. (I.e. navigate from an SQL Database object back to an 
+ * LUW RelationalRemoteServer object, even though the relationship RelationalRemoteServer to
+ * Database is modeled to be one directional.)
+ */
+public class DatabaseToRemoteServerHelper extends ReverseNavigationHelper {
+
+	
+	protected static final EReference databaseRef = LUWPackage.eINSTANCE.getRelationalRemoteServer_Database();
+
+	/**
+	 * The singleton instance of <code>INVERSE_DATABASE_ADAPTER</code> must be attached to 
+	 * any instance of RelationalRemoteServer for which reverse navigation is required.
+	 * This adapter should be attached at the time the RelationalRemoteServer object is 
+	 * created.
+	 */
+	public static final InverseAdapter INVERSE_DATABASE_ADAPTER = new InverseAdapter(databaseRef, SINGLE);
+
+	
+	/**
+	 * Helper method to get the LUW RelationalRemoteServer object that points to
+	 * a specified instance of a SQL Database object via the <code>RelationalRemoteServer.database</code> relationship.
+	 * @param db The SQL Database object
+	 * @return The corresponding LUW RelationalRemoteServer object
+	 */
+	public static RelationalRemoteServer getRemoteServer(Database db) {
+		return (RelationalRemoteServer) INVERSE_DATABASE_ADAPTER.getOppositeEnd(db);
+	}
+	
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/util/LUWAdapterFactory.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/util/LUWAdapterFactory.java
new file mode 100644
index 0000000..8663e82
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/util/LUWAdapterFactory.java
@@ -0,0 +1,2050 @@
+/*******************************************************************************

+ * Copyright (c) 2005, 2014 IBM Corporation and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.datatools.enablement.ibm.db2.luw.model.util;

+

+

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2AccessPlan;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Column;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Database;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Function;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Index;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Member;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Package;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Table;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2UserDefinedFunction;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2View;

+import org.eclipse.datatools.enablement.ibm.db2.luw.model.*;

+import org.eclipse.datatools.modelbase.sql.constraints.Index;

+import org.eclipse.datatools.modelbase.sql.datatypes.ArrayDataType;

+import org.eclipse.datatools.modelbase.sql.datatypes.AttributeDefinition;

+import org.eclipse.datatools.modelbase.sql.datatypes.CollectionDataType;

+import org.eclipse.datatools.modelbase.sql.datatypes.ConstructedDataType;

+import org.eclipse.datatools.modelbase.sql.datatypes.DataType;

+import org.eclipse.datatools.modelbase.sql.datatypes.DistinctUserDefinedType;

+import org.eclipse.datatools.modelbase.sql.datatypes.ElementType;

+import org.eclipse.datatools.modelbase.sql.datatypes.RowDataType;

+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;

+import org.eclipse.datatools.modelbase.sql.routines.Function;

+import org.eclipse.datatools.modelbase.sql.routines.Parameter;

+import org.eclipse.datatools.modelbase.sql.routines.Procedure;

+import org.eclipse.datatools.modelbase.sql.routines.Routine;

+import org.eclipse.datatools.modelbase.sql.routines.Source;

+import org.eclipse.datatools.modelbase.sql.routines.UserDefinedFunction;

+import org.eclipse.datatools.modelbase.sql.schema.Database;

+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;

+import org.eclipse.datatools.modelbase.sql.schema.TypedElement;

+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;

+import org.eclipse.datatools.modelbase.sql.tables.Column;

+import org.eclipse.datatools.modelbase.sql.tables.DerivedTable;

+import org.eclipse.datatools.modelbase.sql.tables.PersistentTable;

+import org.eclipse.datatools.modelbase.sql.tables.Table;

+import org.eclipse.datatools.modelbase.sql.tables.TemporaryTable;

+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;

+import org.eclipse.emf.common.notify.Adapter;

+import org.eclipse.emf.common.notify.Notifier;

+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;

+import org.eclipse.emf.ecore.EModelElement;

+import org.eclipse.emf.ecore.ENamedElement;

+import org.eclipse.emf.ecore.EObject;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Adapter Factory</b> for the model.

+ * It provides an adapter <code>createXXX</code> method for each class of the model.

+ * <!-- end-user-doc -->

+ * @see com.ibm.db.models.db2.luw.LUWPackage

+ * @generated

+ */

+public class LUWAdapterFactory extends AdapterFactoryImpl {

+	/**

+	 * The cached model package.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected static LUWPackage modelPackage;

+

+	/**

+	 * Creates an instance of the adapter factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public LUWAdapterFactory() {

+		if (modelPackage == null) {

+			modelPackage = LUWPackage.eINSTANCE;

+		}

+	}

+

+	/**

+	 * Returns whether this factory is applicable for the type of the object.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.

+	 * <!-- end-user-doc -->

+	 * @return whether this factory is applicable for the type of the object.

+	 * @generated

+	 */

+	public boolean isFactoryForType(Object object) {

+		if (object == modelPackage) {

+			return true;

+		}

+		if (object instanceof EObject) {

+			return ((EObject)object).eClass().getEPackage() == modelPackage;

+		}

+		return false;

+	}

+

+	/**

+	 * The switch that delegates to the <code>createXXX</code> methods.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected LUWSwitch modelSwitch =

+		new LUWSwitch() {

+			public Object caseLUWPartitionGroup(LUWPartitionGroup object) {

+				return createLUWPartitionGroupAdapter();

+			}

+			public Object caseLUWTableSpace(LUWTableSpace object) {

+				return createLUWTableSpaceAdapter();

+			}

+			public Object caseLUWDatabasePartition(LUWDatabasePartition object) {

+				return createLUWDatabasePartitionAdapter();

+			}

+			public Object caseLUWDatabaseContainer(LUWDatabaseContainer object) {

+				return createLUWDatabaseContainerAdapter();

+			}

+			public Object caseLUWAdminServer(LUWAdminServer object) {

+				return createLUWAdminServerAdapter();

+			}

+			public Object caseLUWBufferPool(LUWBufferPool object) {

+				return createLUWBufferPoolAdapter();

+			}

+			public Object caseLUWTable(LUWTable object) {

+				return createLUWTableAdapter();

+			}

+			public Object caseLUWView(LUWView object) {

+				return createLUWViewAdapter();

+			}

+			public Object caseLUWPartitionKey(LUWPartitionKey object) {

+				return createLUWPartitionKeyAdapter();

+			}

+			public Object caseLUWNickname(LUWNickname object) {

+				return createLUWNicknameAdapter();

+			}

+			public Object caseLUWFunctionMapping(LUWFunctionMapping object) {

+				return createLUWFunctionMappingAdapter();

+			}

+			public Object caseLUWWrapper(LUWWrapper object) {

+				return createLUWWrapperAdapter();

+			}

+			public Object caseLUWNonRelationalNickname(LUWNonRelationalNickname object) {

+				return createLUWNonRelationalNicknameAdapter();

+			}

+			public Object caseLUWNonRelationalServer(LUWNonRelationalServer object) {

+				return createLUWNonRelationalServerAdapter();

+			}

+			public Object caseLUWNonRelationalWrapper(LUWNonRelationalWrapper object) {

+				return createLUWNonRelationalWrapperAdapter();

+			}

+			public Object caseLUWRelationalNickname(LUWRelationalNickname object) {

+				return createLUWRelationalNicknameAdapter();

+			}

+			public Object caseLUWGenericUserMapping(LUWGenericUserMapping object) {

+				return createLUWGenericUserMappingAdapter();

+			}

+			public Object caseLUWRelationalWrapper(LUWRelationalWrapper object) {

+				return createLUWRelationalWrapperAdapter();

+			}

+			public Object caseLUWServer(LUWServer object) {

+				return createLUWServerAdapter();

+			}

+			public Object caseLUWTypeMapping(LUWTypeMapping object) {

+				return createLUWTypeMappingAdapter();

+			}

+			public Object caseLUWUserMapping(LUWUserMapping object) {

+				return createLUWUserMappingAdapter();

+			}

+			public Object caseLUWOption(LUWOption object) {

+				return createLUWOptionAdapter();

+			}

+			public Object caseLUWRelationalServer(LUWRelationalServer object) {

+				return createLUWRelationalServerAdapter();

+			}

+			public Object caseLUWDatabase(LUWDatabase object) {

+				return createLUWDatabaseAdapter();

+			}

+			public Object caseLUWColumn(LUWColumn object) {

+				return createLUWColumnAdapter();

+			}

+			public Object caseLUWGenericNickname(LUWGenericNickname object) {

+				return createLUWGenericNicknameAdapter();

+			}

+			public Object caseLUWGenericServer(LUWGenericServer object) {

+				return createLUWGenericServerAdapter();

+			}

+			public Object caseLUWMaterializedQueryTable(LUWMaterializedQueryTable object) {

+				return createLUWMaterializedQueryTableAdapter();

+			}

+			public Object caseLUWGenericWrapper(LUWGenericWrapper object) {

+				return createLUWGenericWrapperAdapter();

+			}

+			public Object caseLUWStorageTable(LUWStorageTable object) {

+				return createLUWStorageTableAdapter();

+			}

+			public Object caseRelationalRemoteServer(RelationalRemoteServer object) {

+				return createRelationalRemoteServerAdapter();

+			}

+			public Object caseRelationalRemoteDataSet(RelationalRemoteDataSet object) {

+				return createRelationalRemoteDataSetAdapter();

+			}

+			public Object caseRemoteServer(RemoteServer object) {

+				return createRemoteServerAdapter();

+			}

+			public Object caseRemoteDataSet(RemoteDataSet object) {

+				return createRemoteDataSetAdapter();

+			}

+			public Object caseLUWIndex(LUWIndex object) {

+				return createLUWIndexAdapter();

+			}

+			public Object caseLUWAttributeDefinition(LUWAttributeDefinition object) {

+				return createLUWAttributeDefinitionAdapter();

+			}

+			public Object caseFederatedProcedure(FederatedProcedure object) {

+				return createFederatedProcedureAdapter();

+			}

+			public Object caseFederatedParameter(FederatedParameter object) {

+				return createFederatedParameterAdapter();

+			}

+			public Object caseLUWPartitionExpression(LUWPartitionExpression object) {

+				return createLUWPartitionExpressionAdapter();

+			}

+			public Object caseLUWPartitionElement(LUWPartitionElement object) {

+				return createLUWPartitionElementAdapter();

+			}

+			public Object caseLUWDataPartition(LUWDataPartition object) {

+				return createLUWDataPartitionAdapter();

+			}

+			public Object caseLUWDataPartitionKey(LUWDataPartitionKey object) {

+				return createLUWDataPartitionKeyAdapter();

+			}

+			public Object caseLUWDatabasePackage(LUWDatabasePackage object) {

+				return createLUWDatabasePackageAdapter();

+			}

+			public Object caseLUWModule(LUWModule object) {

+				return createLUWModuleAdapter();

+			}

+			public Object caseLUWModuleObject(LUWModuleObject object) {

+				return createLUWModuleObjectAdapter();

+			}

+			public Object caseLUWModuleFunction(LUWModuleFunction object) {

+				return createLUWModuleFunctionAdapter();

+			}

+			public Object caseLUWModuleProcedure(LUWModuleProcedure object) {

+				return createLUWModuleProcedureAdapter();

+			}

+			public Object caseLUWModuleCondition(LUWModuleCondition object) {

+				return createLUWModuleConditionAdapter();

+			}

+			public Object caseLUWGlobalVariable(LUWGlobalVariable object) {

+				return createLUWGlobalVariableAdapter();

+			}

+			public Object caseLUWModuleType(LUWModuleType object) {

+				return createLUWModuleTypeAdapter();

+			}

+			public Object caseLUWModuleRowDataType(LUWModuleRowDataType object) {

+				return createLUWModuleRowDataTypeAdapter();

+			}

+			public Object caseLUWModuleArrayDataType(LUWModuleArrayDataType object) {

+				return createLUWModuleArrayDataTypeAdapter();

+			}

+			public Object caseLUWModuleDistinctType(LUWModuleDistinctType object) {

+				return createLUWModuleDistinctTypeAdapter();

+			}

+			public Object caseLUWModuleGlobalVariable(LUWModuleGlobalVariable object) {

+				return createLUWModuleGlobalVariableAdapter();

+			}

+			public Object caseLUWArrayDataType(LUWArrayDataType object) {

+				return createLUWArrayDataTypeAdapter();

+			}

+			public Object caseLUWRowDataType(LUWRowDataType object) {

+				return createLUWRowDataTypeAdapter();

+			}

+			public Object casePLSQLPackage(PLSQLPackage object) {

+				return createPLSQLPackageAdapter();

+			}

+			public Object casePLSQLPackageBody(PLSQLPackageBody object) {

+				return createPLSQLPackageBodyAdapter();

+			}

+			public Object caseLUWCursorDataType(LUWCursorDataType object) {

+				return createLUWCursorDataTypeAdapter();

+			}

+			public Object caseLUWModuleCursorDataType(LUWModuleCursorDataType object) {

+				return createLUWModuleCursorDataTypeAdapter();

+			}

+			public Object caseLUWBufferPoolSizeException(LUWBufferPoolSizeException object) {

+				return createLUWBufferPoolSizeExceptionAdapter();

+			}

+			public Object caseLUWMember(LUWMember object) {

+				return createLUWMemberAdapter();

+			}

+			public Object caseLUWSecurityPolicy(LUWSecurityPolicy object) {

+				return createLUWSecurityPolicyAdapter();

+			}

+			public Object caseLUWSecurityLabelComponent(LUWSecurityLabelComponent object) {

+				return createLUWSecurityLabelComponentAdapter();

+			}

+			public Object caseLUWSecurityLabel(LUWSecurityLabel object) {

+				return createLUWSecurityLabelAdapter();

+			}

+			public Object caseLUWSecurityLabelComponentElement(LUWSecurityLabelComponentElement object) {

+				return createLUWSecurityLabelComponentElementAdapter();

+			}

+			public Object caseLUWStorageGroup(LUWStorageGroup object) {

+				return createLUWStorageGroupAdapter();

+			}

+			public Object caseLUWTemporaryStorageTable(LUWTemporaryStorageTable object) {

+				return createLUWTemporaryStorageTableAdapter();

+			}

+			public Object caseLUWTemporaryTable(LUWTemporaryTable object) {

+				return createLUWTemporaryTableAdapter();

+			}

+			public Object caseArrayIndexElementType(ArrayIndexElementType object) {

+				return createArrayIndexElementTypeAdapter();

+			}

+			public Object caseLUWPartitionEveryClauseElement(LUWPartitionEveryClauseElement object) {

+				return createLUWPartitionEveryClauseElementAdapter();

+			}

+			public Object caseEModelElement(EModelElement object) {

+				return createEModelElementAdapter();

+			}

+			public Object caseENamedElement(ENamedElement object) {

+				return createENamedElementAdapter();

+			}

+			public Object caseSQLObject(SQLObject object) {

+				return createSQLObjectAdapter();

+			}

+			public Object caseTable(Table object) {

+				return createTableAdapter();

+			}

+			public Object caseBaseTable(BaseTable object) {

+				return createBaseTableAdapter();

+			}

+			public Object casePersistentTable(PersistentTable object) {

+				return createPersistentTableAdapter();

+			}

+			public Object caseDB2Table(DB2Table object) {

+				return createDB2TableAdapter();

+			}

+			public Object caseDerivedTable(DerivedTable object) {

+				return createDerivedTableAdapter();

+			}

+			public Object caseViewTable(ViewTable object) {

+				return createViewTableAdapter();

+			}

+			public Object caseDB2View(DB2View object) {

+				return createDB2ViewAdapter();

+			}

+			public Object caseDatabase(Database object) {

+				return createDatabaseAdapter();

+			}

+			public Object caseDB2Database(DB2Database object) {

+				return createDB2DatabaseAdapter();

+			}

+			public Object caseTypedElement(TypedElement object) {

+				return createTypedElementAdapter();

+			}

+			public Object caseColumn(Column object) {

+				return createColumnAdapter();

+			}

+			public Object caseDB2Column(DB2Column object) {

+				return createDB2ColumnAdapter();

+			}

+			public Object caseDB2MaterializedQueryTable(DB2MaterializedQueryTable object) {

+				return createDB2MaterializedQueryTableAdapter();

+			}

+			public Object caseIndex(Index object) {

+				return createIndexAdapter();

+			}

+			public Object caseDB2Index(DB2Index object) {

+				return createDB2IndexAdapter();

+			}

+			public Object caseAttributeDefinition(AttributeDefinition object) {

+				return createAttributeDefinitionAdapter();

+			}

+			public Object caseRoutine(Routine object) {

+				return createRoutineAdapter();

+			}

+			public Object caseProcedure(Procedure object) {

+				return createProcedureAdapter();

+			}

+			public Object caseDB2AccessPlan(DB2AccessPlan object) {

+				return createDB2AccessPlanAdapter();

+			}

+			public Object caseDB2Routine(DB2Routine object) {

+				return createDB2RoutineAdapter();

+			}

+			public Object caseDB2Procedure(DB2Procedure object) {

+				return createDB2ProcedureAdapter();

+			}

+			public Object caseParameter(Parameter object) {

+				return createParameterAdapter();

+			}

+			public Object caseDB2Package(DB2Package object) {

+				return createDB2PackageAdapter();

+			}

+			public Object caseFunction(Function object) {

+				return createFunctionAdapter();

+			}

+			public Object caseUserDefinedFunction(UserDefinedFunction object) {

+				return createUserDefinedFunctionAdapter();

+			}

+			public Object caseDB2Function(DB2Function object) {

+				return createDB2FunctionAdapter();

+			}

+			public Object caseDB2UserDefinedFunction(DB2UserDefinedFunction object) {

+				return createDB2UserDefinedFunctionAdapter();

+			}

+			public Object caseDataType(DataType object) {

+				return createDataTypeAdapter();

+			}

+			public Object caseUserDefinedType(UserDefinedType object) {

+				return createUserDefinedTypeAdapter();

+			}

+			public Object caseConstructedDataType(ConstructedDataType object) {

+				return createConstructedDataTypeAdapter();

+			}

+			public Object caseRowDataType(RowDataType object) {

+				return createRowDataTypeAdapter();

+			}

+			public Object caseCollectionDataType(CollectionDataType object) {

+				return createCollectionDataTypeAdapter();

+			}

+			public Object caseArrayDataType(ArrayDataType object) {

+				return createArrayDataTypeAdapter();

+			}

+			public Object caseDistinctUserDefinedType(DistinctUserDefinedType object) {

+				return createDistinctUserDefinedTypeAdapter();

+			}

+			public Object caseSource(Source object) {

+				return createSourceAdapter();

+			}

+			public Object caseDB2Member(DB2Member object) {

+				return createDB2MemberAdapter();

+			}

+			public Object caseTemporaryTable(TemporaryTable object) {

+				return createTemporaryTableAdapter();

+			}

+			public Object caseElementType(ElementType object) {

+				return createElementTypeAdapter();

+			}

+			public Object defaultCase(EObject object) {

+				return createEObjectAdapter();

+			}

+		};

+

+	/**

+	 * Creates an adapter for the <code>target</code>.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param target the object to adapt.

+	 * @return the adapter for the <code>target</code>.

+	 * @generated

+	 */

+	public Adapter createAdapter(Notifier target) {

+		return (Adapter)modelSwitch.doSwitch((EObject)target);

+	}

+

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWPartitionGroup <em>Partition Group</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWPartitionGroup

+	 * @generated

+	 */

+	public Adapter createLUWPartitionGroupAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWTableSpace <em>Table Space</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWTableSpace

+	 * @generated

+	 */

+	public Adapter createLUWTableSpaceAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWDatabasePartition <em>Database Partition</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWDatabasePartition

+	 * @generated

+	 */

+	public Adapter createLUWDatabasePartitionAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWDatabaseContainer <em>Database Container</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWDatabaseContainer

+	 * @generated

+	 */

+	public Adapter createLUWDatabaseContainerAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWAdminServer <em>Admin Server</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWAdminServer

+	 * @generated

+	 */

+	public Adapter createLUWAdminServerAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWBufferPool <em>Buffer Pool</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWBufferPool

+	 * @generated

+	 */

+	public Adapter createLUWBufferPoolAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWTable <em>Table</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWTable

+	 * @generated

+	 */

+	public Adapter createLUWTableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWView <em>View</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWView

+	 * @generated

+	 */

+	public Adapter createLUWViewAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWPartitionKey <em>Partition Key</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWPartitionKey

+	 * @generated

+	 */

+	public Adapter createLUWPartitionKeyAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWNickname <em>Nickname</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWNickname

+	 * @generated

+	 */

+	public Adapter createLUWNicknameAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWFunctionMapping <em>Function Mapping</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWFunctionMapping

+	 * @generated

+	 */

+	public Adapter createLUWFunctionMappingAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWWrapper <em>Wrapper</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWWrapper

+	 * @generated

+	 */

+	public Adapter createLUWWrapperAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWNonRelationalNickname <em>Non Relational Nickname</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWNonRelationalNickname

+	 * @generated

+	 */

+	public Adapter createLUWNonRelationalNicknameAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWNonRelationalServer <em>Non Relational Server</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWNonRelationalServer

+	 * @generated

+	 */

+	public Adapter createLUWNonRelationalServerAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWNonRelationalWrapper <em>Non Relational Wrapper</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWNonRelationalWrapper

+	 * @generated

+	 */

+	public Adapter createLUWNonRelationalWrapperAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWRelationalNickname <em>Relational Nickname</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWRelationalNickname

+	 * @generated

+	 */

+	public Adapter createLUWRelationalNicknameAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWGenericUserMapping <em>Generic User Mapping</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWGenericUserMapping

+	 * @generated

+	 */

+	public Adapter createLUWGenericUserMappingAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWRelationalWrapper <em>Relational Wrapper</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWRelationalWrapper

+	 * @generated

+	 */

+	public Adapter createLUWRelationalWrapperAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWServer <em>Server</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWServer

+	 * @generated

+	 */

+	public Adapter createLUWServerAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWTypeMapping <em>Type Mapping</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWTypeMapping

+	 * @generated

+	 */

+	public Adapter createLUWTypeMappingAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWUserMapping <em>User Mapping</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWUserMapping

+	 * @generated

+	 */

+	public Adapter createLUWUserMappingAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWOption <em>Option</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWOption

+	 * @generated

+	 */

+	public Adapter createLUWOptionAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWRelationalServer <em>Relational Server</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWRelationalServer

+	 * @generated

+	 */

+	public Adapter createLUWRelationalServerAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWDatabase <em>Database</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWDatabase

+	 * @generated

+	 */

+	public Adapter createLUWDatabaseAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWColumn <em>Column</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWColumn

+	 * @generated

+	 */

+	public Adapter createLUWColumnAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWGenericNickname <em>Generic Nickname</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWGenericNickname

+	 * @generated

+	 */

+	public Adapter createLUWGenericNicknameAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWGenericServer <em>Generic Server</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWGenericServer

+	 * @generated

+	 */

+	public Adapter createLUWGenericServerAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWMaterializedQueryTable <em>Materialized Query Table</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWMaterializedQueryTable

+	 * @generated

+	 */

+	public Adapter createLUWMaterializedQueryTableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWGenericWrapper <em>Generic Wrapper</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWGenericWrapper

+	 * @generated

+	 */

+	public Adapter createLUWGenericWrapperAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWStorageTable <em>Storage Table</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWStorageTable

+	 * @generated

+	 */

+	public Adapter createLUWStorageTableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.RelationalRemoteServer <em>Relational Remote Server</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.RelationalRemoteServer

+	 * @generated

+	 */

+	public Adapter createRelationalRemoteServerAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.RelationalRemoteDataSet <em>Relational Remote Data Set</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.RelationalRemoteDataSet

+	 * @generated

+	 */

+	public Adapter createRelationalRemoteDataSetAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.RemoteServer <em>Remote Server</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.RemoteServer

+	 * @generated

+	 */

+	public Adapter createRemoteServerAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.RemoteDataSet <em>Remote Data Set</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.RemoteDataSet

+	 * @generated

+	 */

+	public Adapter createRemoteDataSetAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWIndex <em>Index</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWIndex

+	 * @generated

+	 */

+	public Adapter createLUWIndexAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWAttributeDefinition <em>Attribute Definition</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWAttributeDefinition

+	 * @generated

+	 */

+	public Adapter createLUWAttributeDefinitionAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.FederatedProcedure <em>Federated Procedure</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.FederatedProcedure

+	 * @generated

+	 */

+	public Adapter createFederatedProcedureAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.FederatedParameter <em>Federated Parameter</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.FederatedParameter

+	 * @generated

+	 */

+	public Adapter createFederatedParameterAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWPartitionExpression <em>Partition Expression</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWPartitionExpression

+	 * @generated

+	 */

+	public Adapter createLUWPartitionExpressionAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWPartitionElement <em>Partition Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWPartitionElement

+	 * @generated

+	 */

+	public Adapter createLUWPartitionElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWDataPartition <em>Data Partition</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWDataPartition

+	 * @generated

+	 */

+	public Adapter createLUWDataPartitionAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWDataPartitionKey <em>Data Partition Key</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWDataPartitionKey

+	 * @generated

+	 */

+	public Adapter createLUWDataPartitionKeyAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWDatabasePackage <em>Database Package</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWDatabasePackage

+	 * @generated

+	 */

+	public Adapter createLUWDatabasePackageAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWModule <em>Module</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWModule

+	 * @generated

+	 */

+	public Adapter createLUWModuleAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWModuleObject <em>Module Object</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWModuleObject

+	 * @generated

+	 */

+	public Adapter createLUWModuleObjectAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWModuleFunction <em>Module Function</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWModuleFunction

+	 * @generated

+	 */

+	public Adapter createLUWModuleFunctionAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWModuleProcedure <em>Module Procedure</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWModuleProcedure

+	 * @generated

+	 */

+	public Adapter createLUWModuleProcedureAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWModuleCondition <em>Module Condition</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWModuleCondition

+	 * @generated

+	 */

+	public Adapter createLUWModuleConditionAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWGlobalVariable <em>Global Variable</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWGlobalVariable

+	 * @generated

+	 */

+	public Adapter createLUWGlobalVariableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWModuleType <em>Module Type</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWModuleType

+	 * @generated

+	 */

+	public Adapter createLUWModuleTypeAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWModuleRowDataType <em>Module Row Data Type</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWModuleRowDataType

+	 * @generated

+	 */

+	public Adapter createLUWModuleRowDataTypeAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWModuleArrayDataType <em>Module Array Data Type</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWModuleArrayDataType

+	 * @generated

+	 */

+	public Adapter createLUWModuleArrayDataTypeAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWModuleDistinctType <em>Module Distinct Type</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWModuleDistinctType

+	 * @generated

+	 */

+	public Adapter createLUWModuleDistinctTypeAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWModuleGlobalVariable <em>Module Global Variable</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWModuleGlobalVariable

+	 * @generated

+	 */

+	public Adapter createLUWModuleGlobalVariableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWArrayDataType <em>Array Data Type</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWArrayDataType

+	 * @generated

+	 */

+	public Adapter createLUWArrayDataTypeAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWRowDataType <em>Row Data Type</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWRowDataType

+	 * @generated

+	 */

+	public Adapter createLUWRowDataTypeAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.PLSQLPackage <em>PLSQL Package</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.PLSQLPackage

+	 * @generated

+	 */

+	public Adapter createPLSQLPackageAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.PLSQLPackageBody <em>PLSQL Package Body</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.PLSQLPackageBody

+	 * @generated

+	 */

+	public Adapter createPLSQLPackageBodyAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWCursorDataType <em>Cursor Data Type</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWCursorDataType

+	 * @generated

+	 */

+	public Adapter createLUWCursorDataTypeAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWModuleCursorDataType <em>Module Cursor Data Type</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWModuleCursorDataType

+	 * @generated

+	 */

+	public Adapter createLUWModuleCursorDataTypeAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWBufferPoolSizeException <em>Buffer Pool Size Exception</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWBufferPoolSizeException

+	 * @generated

+	 */

+	public Adapter createLUWBufferPoolSizeExceptionAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWMember <em>Member</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWMember

+	 * @generated

+	 */

+	public Adapter createLUWMemberAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWSecurityPolicy <em>Security Policy</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWSecurityPolicy

+	 * @generated

+	 */

+	public Adapter createLUWSecurityPolicyAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWSecurityLabelComponent <em>Security Label Component</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWSecurityLabelComponent

+	 * @generated

+	 */

+	public Adapter createLUWSecurityLabelComponentAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWSecurityLabel <em>Security Label</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWSecurityLabel

+	 * @generated

+	 */

+	public Adapter createLUWSecurityLabelAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWSecurityLabelComponentElement <em>Security Label Component Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWSecurityLabelComponentElement

+	 * @generated

+	 */

+	public Adapter createLUWSecurityLabelComponentElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWStorageGroup <em>Storage Group</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWStorageGroup

+	 * @generated

+	 */

+	public Adapter createLUWStorageGroupAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWTemporaryStorageTable <em>Temporary Storage Table</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWTemporaryStorageTable

+	 * @generated

+	 */

+	public Adapter createLUWTemporaryStorageTableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWTemporaryTable <em>Temporary Table</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWTemporaryTable

+	 * @generated

+	 */

+	public Adapter createLUWTemporaryTableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.ArrayIndexElementType <em>Array Index Element Type</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.ArrayIndexElementType

+	 * @generated

+	 */

+	public Adapter createArrayIndexElementTypeAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.luw.LUWPartitionEveryClauseElement <em>Partition Every Clause Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.luw.LUWPartitionEveryClauseElement

+	 * @generated

+	 */

+	public Adapter createLUWPartitionEveryClauseElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.emf.ecore.EModelElement <em>EModel Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.emf.ecore.EModelElement

+	 * @generated

+	 */

+	public Adapter createEModelElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.emf.ecore.ENamedElement <em>ENamed Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.emf.ecore.ENamedElement

+	 * @generated

+	 */

+	public Adapter createENamedElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.schema.SQLObject <em>SQL Object</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.schema.SQLObject

+	 * @generated

+	 */

+	public Adapter createSQLObjectAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.tables.Table <em>Table</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.tables.Table

+	 * @generated

+	 */

+	public Adapter createTableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.tables.BaseTable <em>Base Table</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.tables.BaseTable

+	 * @generated

+	 */

+	public Adapter createBaseTableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.tables.PersistentTable <em>Persistent Table</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.tables.PersistentTable

+	 * @generated

+	 */

+	public Adapter createPersistentTableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2Table <em>DB2 Table</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2Table

+	 * @generated

+	 */

+	public Adapter createDB2TableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.tables.DerivedTable <em>Derived Table</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.tables.DerivedTable

+	 * @generated

+	 */

+	public Adapter createDerivedTableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.tables.ViewTable <em>View Table</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.tables.ViewTable

+	 * @generated

+	 */

+	public Adapter createViewTableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2View <em>DB2 View</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2View

+	 * @generated

+	 */

+	public Adapter createDB2ViewAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.schema.Database <em>Database</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.schema.Database

+	 * @generated

+	 */

+	public Adapter createDatabaseAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2Database <em>DB2 Database</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2Database

+	 * @generated

+	 */

+	public Adapter createDB2DatabaseAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.schema.TypedElement <em>Typed Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.schema.TypedElement

+	 * @generated

+	 */

+	public Adapter createTypedElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.tables.Column <em>Column</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.tables.Column

+	 * @generated

+	 */

+	public Adapter createColumnAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2Column <em>DB2 Column</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2Column

+	 * @generated

+	 */

+	public Adapter createDB2ColumnAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2MaterializedQueryTable <em>DB2 Materialized Query Table</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2MaterializedQueryTable

+	 * @generated

+	 */

+	public Adapter createDB2MaterializedQueryTableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.constraints.Index <em>Index</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.constraints.Index

+	 * @generated

+	 */

+	public Adapter createIndexAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2Index <em>DB2 Index</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2Index

+	 * @generated

+	 */

+	public Adapter createDB2IndexAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.datatypes.AttributeDefinition <em>Attribute Definition</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.datatypes.AttributeDefinition

+	 * @generated

+	 */

+	public Adapter createAttributeDefinitionAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.routines.Routine <em>Routine</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.routines.Routine

+	 * @generated

+	 */

+	public Adapter createRoutineAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.routines.Procedure <em>Procedure</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.routines.Procedure

+	 * @generated

+	 */

+	public Adapter createProcedureAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2AccessPlan <em>DB2 Access Plan</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2AccessPlan

+	 * @generated

+	 */

+	public Adapter createDB2AccessPlanAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2Routine <em>DB2 Routine</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2Routine

+	 * @generated

+	 */

+	public Adapter createDB2RoutineAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2Procedure <em>DB2 Procedure</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2Procedure

+	 * @generated

+	 */

+	public Adapter createDB2ProcedureAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.routines.Parameter <em>Parameter</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.routines.Parameter

+	 * @generated

+	 */

+	public Adapter createParameterAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2Package <em>DB2 Package</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2Package

+	 * @generated

+	 */

+	public Adapter createDB2PackageAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.routines.Function <em>Function</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.routines.Function

+	 * @generated

+	 */

+	public Adapter createFunctionAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.routines.UserDefinedFunction <em>User Defined Function</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.routines.UserDefinedFunction

+	 * @generated

+	 */

+	public Adapter createUserDefinedFunctionAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2Function <em>DB2 Function</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2Function

+	 * @generated

+	 */

+	public Adapter createDB2FunctionAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2UserDefinedFunction <em>DB2 User Defined Function</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2UserDefinedFunction

+	 * @generated

+	 */

+	public Adapter createDB2UserDefinedFunctionAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.datatypes.DataType <em>Data Type</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.datatypes.DataType

+	 * @generated

+	 */

+	public Adapter createDataTypeAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType <em>User Defined Type</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType

+	 * @generated

+	 */

+	public Adapter createUserDefinedTypeAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.datatypes.ConstructedDataType <em>Constructed Data Type</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.datatypes.ConstructedDataType

+	 * @generated

+	 */

+	public Adapter createConstructedDataTypeAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.datatypes.RowDataType <em>Row Data Type</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.datatypes.RowDataType

+	 * @generated

+	 */

+	public Adapter createRowDataTypeAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.datatypes.CollectionDataType <em>Collection Data Type</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.datatypes.CollectionDataType

+	 * @generated

+	 */

+	public Adapter createCollectionDataTypeAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.datatypes.ArrayDataType <em>Array Data Type</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.datatypes.ArrayDataType

+	 * @generated

+	 */

+	public Adapter createArrayDataTypeAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.datatypes.DistinctUserDefinedType <em>Distinct User Defined Type</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.datatypes.DistinctUserDefinedType

+	 * @generated

+	 */

+	public Adapter createDistinctUserDefinedTypeAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.routines.Source <em>Source</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.routines.Source

+	 * @generated

+	 */

+	public Adapter createSourceAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2Member <em>DB2 Member</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2Member

+	 * @generated

+	 */

+	public Adapter createDB2MemberAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.tables.TemporaryTable <em>Temporary Table</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.tables.TemporaryTable

+	 * @generated

+	 */

+	public Adapter createTemporaryTableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.datatypes.ElementType <em>Element Type</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.datatypes.ElementType

+	 * @generated

+	 */

+	public Adapter createElementTypeAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for the default case.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @generated

+	 */

+	public Adapter createEObjectAdapter() {

+		return null;

+	}

+

+} //LUWAdapterFactory

diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/util/LUWSwitch.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/util/LUWSwitch.java
new file mode 100644
index 0000000..cc4528c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/util/LUWSwitch.java
@@ -0,0 +1,2583 @@
+/*******************************************************************************

+ * Copyright (c) 2005, 2014 IBM Corporation and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.datatools.enablement.ibm.db2.luw.model.util;

+

+

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2AccessPlan;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Column;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Database;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Function;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Index;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Member;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Package;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Table;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2UserDefinedFunction;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2View;

+import org.eclipse.datatools.enablement.ibm.db2.luw.model.*;

+import java.util.List;

+import org.eclipse.datatools.modelbase.sql.constraints.Index;

+import org.eclipse.datatools.modelbase.sql.datatypes.ArrayDataType;

+import org.eclipse.datatools.modelbase.sql.datatypes.AttributeDefinition;

+import org.eclipse.datatools.modelbase.sql.datatypes.CollectionDataType;

+import org.eclipse.datatools.modelbase.sql.datatypes.ConstructedDataType;

+import org.eclipse.datatools.modelbase.sql.datatypes.DataType;

+import org.eclipse.datatools.modelbase.sql.datatypes.DistinctUserDefinedType;

+import org.eclipse.datatools.modelbase.sql.datatypes.ElementType;

+import org.eclipse.datatools.modelbase.sql.datatypes.RowDataType;

+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;

+import org.eclipse.datatools.modelbase.sql.routines.Function;

+import org.eclipse.datatools.modelbase.sql.routines.Parameter;

+import org.eclipse.datatools.modelbase.sql.routines.Procedure;

+import org.eclipse.datatools.modelbase.sql.routines.Routine;

+import org.eclipse.datatools.modelbase.sql.routines.Source;

+import org.eclipse.datatools.modelbase.sql.routines.UserDefinedFunction;

+import org.eclipse.datatools.modelbase.sql.schema.Database;

+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;

+import org.eclipse.datatools.modelbase.sql.schema.TypedElement;

+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;

+import org.eclipse.datatools.modelbase.sql.tables.Column;

+import org.eclipse.datatools.modelbase.sql.tables.DerivedTable;

+import org.eclipse.datatools.modelbase.sql.tables.PersistentTable;

+import org.eclipse.datatools.modelbase.sql.tables.Table;

+import org.eclipse.datatools.modelbase.sql.tables.TemporaryTable;

+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EModelElement;

+import org.eclipse.emf.ecore.ENamedElement;

+import org.eclipse.emf.ecore.EObject;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Switch</b> for the model's inheritance hierarchy.

+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}

+ * to invoke the <code>caseXXX</code> method for each class of the model,

+ * starting with the actual class of the object

+ * and proceeding up the inheritance hierarchy

+ * until a non-null result is returned,

+ * which is the result of the switch.

+ * <!-- end-user-doc -->

+ * @see org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage

+ * @generated

+ */

+public class LUWSwitch {

+	/**

+	 * The cached model package

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected static LUWPackage modelPackage;

+

+	/**

+	 * Creates an instance of the switch.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public LUWSwitch() {

+		if (modelPackage == null) {

+			modelPackage = LUWPackage.eINSTANCE;

+		}

+	}

+

+	/**

+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the first non-null result returned by a <code>caseXXX</code> call.

+	 * @generated

+	 */

+	public Object doSwitch(EObject theEObject) {

+		return doSwitch(theEObject.eClass(), theEObject);

+	}

+

+	/**

+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the first non-null result returned by a <code>caseXXX</code> call.

+	 * @generated

+	 */

+	protected Object doSwitch(EClass theEClass, EObject theEObject) {

+		if (theEClass.eContainer() == modelPackage) {

+			return doSwitch(theEClass.getClassifierID(), theEObject);

+		}

+		else {

+			List eSuperTypes = theEClass.getESuperTypes();

+			return

+				eSuperTypes.isEmpty() ?

+					defaultCase(theEObject) :

+					doSwitch((EClass)eSuperTypes.get(0), theEObject);

+		}

+	}

+

+	/**

+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the first non-null result returned by a <code>caseXXX</code> call.

+	 * @generated

+	 */

+	protected Object doSwitch(int classifierID, EObject theEObject) {

+		switch (classifierID) {

+			case LUWPackage.LUW_PARTITION_GROUP: {

+				LUWPartitionGroup luwPartitionGroup = (LUWPartitionGroup)theEObject;

+				Object result = caseLUWPartitionGroup(luwPartitionGroup);

+				if (result == null) result = caseSQLObject(luwPartitionGroup);

+				if (result == null) result = caseENamedElement(luwPartitionGroup);

+				if (result == null) result = caseEModelElement(luwPartitionGroup);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_TABLE_SPACE: {

+				LUWTableSpace luwTableSpace = (LUWTableSpace)theEObject;

+				Object result = caseLUWTableSpace(luwTableSpace);

+				if (result == null) result = caseSQLObject(luwTableSpace);

+				if (result == null) result = caseENamedElement(luwTableSpace);

+				if (result == null) result = caseEModelElement(luwTableSpace);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_DATABASE_PARTITION: {

+				LUWDatabasePartition luwDatabasePartition = (LUWDatabasePartition)theEObject;

+				Object result = caseLUWDatabasePartition(luwDatabasePartition);

+				if (result == null) result = caseSQLObject(luwDatabasePartition);

+				if (result == null) result = caseENamedElement(luwDatabasePartition);

+				if (result == null) result = caseEModelElement(luwDatabasePartition);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_DATABASE_CONTAINER: {

+				LUWDatabaseContainer luwDatabaseContainer = (LUWDatabaseContainer)theEObject;

+				Object result = caseLUWDatabaseContainer(luwDatabaseContainer);

+				if (result == null) result = caseSQLObject(luwDatabaseContainer);

+				if (result == null) result = caseENamedElement(luwDatabaseContainer);

+				if (result == null) result = caseEModelElement(luwDatabaseContainer);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_ADMIN_SERVER: {

+				LUWAdminServer luwAdminServer = (LUWAdminServer)theEObject;

+				Object result = caseLUWAdminServer(luwAdminServer);

+				if (result == null) result = caseSQLObject(luwAdminServer);

+				if (result == null) result = caseENamedElement(luwAdminServer);

+				if (result == null) result = caseEModelElement(luwAdminServer);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_BUFFER_POOL: {

+				LUWBufferPool luwBufferPool = (LUWBufferPool)theEObject;

+				Object result = caseLUWBufferPool(luwBufferPool);

+				if (result == null) result = caseSQLObject(luwBufferPool);

+				if (result == null) result = caseENamedElement(luwBufferPool);

+				if (result == null) result = caseEModelElement(luwBufferPool);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_TABLE: {

+				LUWTable luwTable = (LUWTable)theEObject;

+				Object result = caseLUWTable(luwTable);

+				if (result == null) result = caseDB2Table(luwTable);

+				if (result == null) result = caseLUWStorageTable(luwTable);

+				if (result == null) result = casePersistentTable(luwTable);

+				if (result == null) result = caseBaseTable(luwTable);

+				if (result == null) result = caseTable(luwTable);

+				if (result == null) result = caseSQLObject(luwTable);

+				if (result == null) result = caseENamedElement(luwTable);

+				if (result == null) result = caseEModelElement(luwTable);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_VIEW: {

+				LUWView luwView = (LUWView)theEObject;

+				Object result = caseLUWView(luwView);

+				if (result == null) result = caseDB2View(luwView);

+				if (result == null) result = caseViewTable(luwView);

+				if (result == null) result = caseDerivedTable(luwView);

+				if (result == null) result = caseTable(luwView);

+				if (result == null) result = caseSQLObject(luwView);

+				if (result == null) result = caseENamedElement(luwView);

+				if (result == null) result = caseEModelElement(luwView);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_PARTITION_KEY: {

+				LUWPartitionKey luwPartitionKey = (LUWPartitionKey)theEObject;

+				Object result = caseLUWPartitionKey(luwPartitionKey);

+				if (result == null) result = caseSQLObject(luwPartitionKey);

+				if (result == null) result = caseENamedElement(luwPartitionKey);

+				if (result == null) result = caseEModelElement(luwPartitionKey);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_NICKNAME: {

+				LUWNickname luwNickname = (LUWNickname)theEObject;

+				Object result = caseLUWNickname(luwNickname);

+				if (result == null) result = caseLUWTable(luwNickname);

+				if (result == null) result = caseDB2Table(luwNickname);

+				if (result == null) result = caseLUWStorageTable(luwNickname);

+				if (result == null) result = casePersistentTable(luwNickname);

+				if (result == null) result = caseBaseTable(luwNickname);

+				if (result == null) result = caseTable(luwNickname);

+				if (result == null) result = caseSQLObject(luwNickname);

+				if (result == null) result = caseENamedElement(luwNickname);

+				if (result == null) result = caseEModelElement(luwNickname);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_FUNCTION_MAPPING: {

+				LUWFunctionMapping luwFunctionMapping = (LUWFunctionMapping)theEObject;

+				Object result = caseLUWFunctionMapping(luwFunctionMapping);

+				if (result == null) result = caseSQLObject(luwFunctionMapping);

+				if (result == null) result = caseENamedElement(luwFunctionMapping);

+				if (result == null) result = caseEModelElement(luwFunctionMapping);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_WRAPPER: {

+				LUWWrapper luwWrapper = (LUWWrapper)theEObject;

+				Object result = caseLUWWrapper(luwWrapper);

+				if (result == null) result = caseSQLObject(luwWrapper);

+				if (result == null) result = caseENamedElement(luwWrapper);

+				if (result == null) result = caseEModelElement(luwWrapper);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_NON_RELATIONAL_NICKNAME: {

+				LUWNonRelationalNickname luwNonRelationalNickname = (LUWNonRelationalNickname)theEObject;

+				Object result = caseLUWNonRelationalNickname(luwNonRelationalNickname);

+				if (result == null) result = caseLUWNickname(luwNonRelationalNickname);

+				if (result == null) result = caseLUWTable(luwNonRelationalNickname);

+				if (result == null) result = caseDB2Table(luwNonRelationalNickname);

+				if (result == null) result = caseLUWStorageTable(luwNonRelationalNickname);

+				if (result == null) result = casePersistentTable(luwNonRelationalNickname);

+				if (result == null) result = caseBaseTable(luwNonRelationalNickname);

+				if (result == null) result = caseTable(luwNonRelationalNickname);

+				if (result == null) result = caseSQLObject(luwNonRelationalNickname);

+				if (result == null) result = caseENamedElement(luwNonRelationalNickname);

+				if (result == null) result = caseEModelElement(luwNonRelationalNickname);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_NON_RELATIONAL_SERVER: {

+				LUWNonRelationalServer luwNonRelationalServer = (LUWNonRelationalServer)theEObject;

+				Object result = caseLUWNonRelationalServer(luwNonRelationalServer);

+				if (result == null) result = caseLUWServer(luwNonRelationalServer);

+				if (result == null) result = caseSQLObject(luwNonRelationalServer);

+				if (result == null) result = caseENamedElement(luwNonRelationalServer);

+				if (result == null) result = caseEModelElement(luwNonRelationalServer);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_NON_RELATIONAL_WRAPPER: {

+				LUWNonRelationalWrapper luwNonRelationalWrapper = (LUWNonRelationalWrapper)theEObject;

+				Object result = caseLUWNonRelationalWrapper(luwNonRelationalWrapper);

+				if (result == null) result = caseLUWWrapper(luwNonRelationalWrapper);

+				if (result == null) result = caseSQLObject(luwNonRelationalWrapper);

+				if (result == null) result = caseENamedElement(luwNonRelationalWrapper);

+				if (result == null) result = caseEModelElement(luwNonRelationalWrapper);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_RELATIONAL_NICKNAME: {

+				LUWRelationalNickname luwRelationalNickname = (LUWRelationalNickname)theEObject;

+				Object result = caseLUWRelationalNickname(luwRelationalNickname);

+				if (result == null) result = caseLUWNickname(luwRelationalNickname);

+				if (result == null) result = caseLUWTable(luwRelationalNickname);

+				if (result == null) result = caseDB2Table(luwRelationalNickname);

+				if (result == null) result = caseLUWStorageTable(luwRelationalNickname);

+				if (result == null) result = casePersistentTable(luwRelationalNickname);

+				if (result == null) result = caseBaseTable(luwRelationalNickname);

+				if (result == null) result = caseTable(luwRelationalNickname);

+				if (result == null) result = caseSQLObject(luwRelationalNickname);

+				if (result == null) result = caseENamedElement(luwRelationalNickname);

+				if (result == null) result = caseEModelElement(luwRelationalNickname);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_GENERIC_USER_MAPPING: {

+				LUWGenericUserMapping luwGenericUserMapping = (LUWGenericUserMapping)theEObject;

+				Object result = caseLUWGenericUserMapping(luwGenericUserMapping);

+				if (result == null) result = caseLUWUserMapping(luwGenericUserMapping);

+				if (result == null) result = caseSQLObject(luwGenericUserMapping);

+				if (result == null) result = caseENamedElement(luwGenericUserMapping);

+				if (result == null) result = caseEModelElement(luwGenericUserMapping);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_RELATIONAL_WRAPPER: {

+				LUWRelationalWrapper luwRelationalWrapper = (LUWRelationalWrapper)theEObject;

+				Object result = caseLUWRelationalWrapper(luwRelationalWrapper);

+				if (result == null) result = caseLUWWrapper(luwRelationalWrapper);

+				if (result == null) result = caseSQLObject(luwRelationalWrapper);

+				if (result == null) result = caseENamedElement(luwRelationalWrapper);

+				if (result == null) result = caseEModelElement(luwRelationalWrapper);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_SERVER: {

+				LUWServer luwServer = (LUWServer)theEObject;

+				Object result = caseLUWServer(luwServer);

+				if (result == null) result = caseSQLObject(luwServer);

+				if (result == null) result = caseENamedElement(luwServer);

+				if (result == null) result = caseEModelElement(luwServer);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_TYPE_MAPPING: {

+				LUWTypeMapping luwTypeMapping = (LUWTypeMapping)theEObject;

+				Object result = caseLUWTypeMapping(luwTypeMapping);

+				if (result == null) result = caseSQLObject(luwTypeMapping);

+				if (result == null) result = caseENamedElement(luwTypeMapping);

+				if (result == null) result = caseEModelElement(luwTypeMapping);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_USER_MAPPING: {

+				LUWUserMapping luwUserMapping = (LUWUserMapping)theEObject;

+				Object result = caseLUWUserMapping(luwUserMapping);

+				if (result == null) result = caseSQLObject(luwUserMapping);

+				if (result == null) result = caseENamedElement(luwUserMapping);

+				if (result == null) result = caseEModelElement(luwUserMapping);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_OPTION: {

+				LUWOption luwOption = (LUWOption)theEObject;

+				Object result = caseLUWOption(luwOption);

+				if (result == null) result = caseSQLObject(luwOption);

+				if (result == null) result = caseENamedElement(luwOption);

+				if (result == null) result = caseEModelElement(luwOption);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_RELATIONAL_SERVER: {

+				LUWRelationalServer luwRelationalServer = (LUWRelationalServer)theEObject;

+				Object result = caseLUWRelationalServer(luwRelationalServer);

+				if (result == null) result = caseLUWServer(luwRelationalServer);

+				if (result == null) result = caseSQLObject(luwRelationalServer);

+				if (result == null) result = caseENamedElement(luwRelationalServer);

+				if (result == null) result = caseEModelElement(luwRelationalServer);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_DATABASE: {

+				LUWDatabase luwDatabase = (LUWDatabase)theEObject;

+				Object result = caseLUWDatabase(luwDatabase);

+				if (result == null) result = caseDB2Database(luwDatabase);

+				if (result == null) result = caseDatabase(luwDatabase);

+				if (result == null) result = caseSQLObject(luwDatabase);

+				if (result == null) result = caseENamedElement(luwDatabase);

+				if (result == null) result = caseEModelElement(luwDatabase);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_COLUMN: {

+				LUWColumn luwColumn = (LUWColumn)theEObject;

+				Object result = caseLUWColumn(luwColumn);

+				if (result == null) result = caseDB2Column(luwColumn);

+				if (result == null) result = caseColumn(luwColumn);

+				if (result == null) result = caseTypedElement(luwColumn);

+				if (result == null) result = caseSQLObject(luwColumn);

+				if (result == null) result = caseENamedElement(luwColumn);

+				if (result == null) result = caseEModelElement(luwColumn);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_GENERIC_NICKNAME: {

+				LUWGenericNickname luwGenericNickname = (LUWGenericNickname)theEObject;

+				Object result = caseLUWGenericNickname(luwGenericNickname);

+				if (result == null) result = caseLUWNickname(luwGenericNickname);

+				if (result == null) result = caseLUWTable(luwGenericNickname);

+				if (result == null) result = caseDB2Table(luwGenericNickname);

+				if (result == null) result = caseLUWStorageTable(luwGenericNickname);

+				if (result == null) result = casePersistentTable(luwGenericNickname);

+				if (result == null) result = caseBaseTable(luwGenericNickname);

+				if (result == null) result = caseTable(luwGenericNickname);

+				if (result == null) result = caseSQLObject(luwGenericNickname);

+				if (result == null) result = caseENamedElement(luwGenericNickname);

+				if (result == null) result = caseEModelElement(luwGenericNickname);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_GENERIC_SERVER: {

+				LUWGenericServer luwGenericServer = (LUWGenericServer)theEObject;

+				Object result = caseLUWGenericServer(luwGenericServer);

+				if (result == null) result = caseLUWServer(luwGenericServer);

+				if (result == null) result = caseSQLObject(luwGenericServer);

+				if (result == null) result = caseENamedElement(luwGenericServer);

+				if (result == null) result = caseEModelElement(luwGenericServer);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_MATERIALIZED_QUERY_TABLE: {

+				LUWMaterializedQueryTable luwMaterializedQueryTable = (LUWMaterializedQueryTable)theEObject;

+				Object result = caseLUWMaterializedQueryTable(luwMaterializedQueryTable);

+				if (result == null) result = caseDB2MaterializedQueryTable(luwMaterializedQueryTable);

+				if (result == null) result = caseLUWStorageTable(luwMaterializedQueryTable);

+				if (result == null) result = caseDerivedTable(luwMaterializedQueryTable);

+				if (result == null) result = caseTable(luwMaterializedQueryTable);

+				if (result == null) result = caseSQLObject(luwMaterializedQueryTable);

+				if (result == null) result = caseENamedElement(luwMaterializedQueryTable);

+				if (result == null) result = caseEModelElement(luwMaterializedQueryTable);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_GENERIC_WRAPPER: {

+				LUWGenericWrapper luwGenericWrapper = (LUWGenericWrapper)theEObject;

+				Object result = caseLUWGenericWrapper(luwGenericWrapper);

+				if (result == null) result = caseLUWWrapper(luwGenericWrapper);

+				if (result == null) result = caseSQLObject(luwGenericWrapper);

+				if (result == null) result = caseENamedElement(luwGenericWrapper);

+				if (result == null) result = caseEModelElement(luwGenericWrapper);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_STORAGE_TABLE: {

+				LUWStorageTable luwStorageTable = (LUWStorageTable)theEObject;

+				Object result = caseLUWStorageTable(luwStorageTable);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.RELATIONAL_REMOTE_SERVER: {

+				RelationalRemoteServer relationalRemoteServer = (RelationalRemoteServer)theEObject;

+				Object result = caseRelationalRemoteServer(relationalRemoteServer);

+				if (result == null) result = caseSQLObject(relationalRemoteServer);

+				if (result == null) result = caseRemoteServer(relationalRemoteServer);

+				if (result == null) result = caseENamedElement(relationalRemoteServer);

+				if (result == null) result = caseEModelElement(relationalRemoteServer);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.RELATIONAL_REMOTE_DATA_SET: {

+				RelationalRemoteDataSet relationalRemoteDataSet = (RelationalRemoteDataSet)theEObject;

+				Object result = caseRelationalRemoteDataSet(relationalRemoteDataSet);

+				if (result == null) result = caseSQLObject(relationalRemoteDataSet);

+				if (result == null) result = caseRemoteDataSet(relationalRemoteDataSet);

+				if (result == null) result = caseENamedElement(relationalRemoteDataSet);

+				if (result == null) result = caseEModelElement(relationalRemoteDataSet);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.REMOTE_SERVER: {

+				RemoteServer remoteServer = (RemoteServer)theEObject;

+				Object result = caseRemoteServer(remoteServer);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.REMOTE_DATA_SET: {

+				RemoteDataSet remoteDataSet = (RemoteDataSet)theEObject;

+				Object result = caseRemoteDataSet(remoteDataSet);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_INDEX: {

+				LUWIndex luwIndex = (LUWIndex)theEObject;

+				Object result = caseLUWIndex(luwIndex);

+				if (result == null) result = caseDB2Index(luwIndex);

+				if (result == null) result = caseIndex(luwIndex);

+				if (result == null) result = caseSQLObject(luwIndex);

+				if (result == null) result = caseENamedElement(luwIndex);

+				if (result == null) result = caseEModelElement(luwIndex);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_ATTRIBUTE_DEFINITION: {

+				LUWAttributeDefinition luwAttributeDefinition = (LUWAttributeDefinition)theEObject;

+				Object result = caseLUWAttributeDefinition(luwAttributeDefinition);

+				if (result == null) result = caseAttributeDefinition(luwAttributeDefinition);

+				if (result == null) result = caseTypedElement(luwAttributeDefinition);

+				if (result == null) result = caseSQLObject(luwAttributeDefinition);

+				if (result == null) result = caseENamedElement(luwAttributeDefinition);

+				if (result == null) result = caseEModelElement(luwAttributeDefinition);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.FEDERATED_PROCEDURE: {

+				FederatedProcedure federatedProcedure = (FederatedProcedure)theEObject;

+				Object result = caseFederatedProcedure(federatedProcedure);

+				if (result == null) result = caseDB2Procedure(federatedProcedure);

+				if (result == null) result = caseProcedure(federatedProcedure);

+				if (result == null) result = caseDB2Routine(federatedProcedure);

+				if (result == null) result = caseRoutine(federatedProcedure);

+				if (result == null) result = caseDB2AccessPlan(federatedProcedure);

+				if (result == null) result = caseSQLObject(federatedProcedure);

+				if (result == null) result = caseENamedElement(federatedProcedure);

+				if (result == null) result = caseEModelElement(federatedProcedure);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.FEDERATED_PARAMETER: {

+				FederatedParameter federatedParameter = (FederatedParameter)theEObject;

+				Object result = caseFederatedParameter(federatedParameter);

+				if (result == null) result = caseParameter(federatedParameter);

+				if (result == null) result = caseTypedElement(federatedParameter);

+				if (result == null) result = caseSQLObject(federatedParameter);

+				if (result == null) result = caseENamedElement(federatedParameter);

+				if (result == null) result = caseEModelElement(federatedParameter);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_PARTITION_EXPRESSION: {

+				LUWPartitionExpression luwPartitionExpression = (LUWPartitionExpression)theEObject;

+				Object result = caseLUWPartitionExpression(luwPartitionExpression);

+				if (result == null) result = caseSQLObject(luwPartitionExpression);

+				if (result == null) result = caseENamedElement(luwPartitionExpression);

+				if (result == null) result = caseEModelElement(luwPartitionExpression);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_PARTITION_ELEMENT: {

+				LUWPartitionElement luwPartitionElement = (LUWPartitionElement)theEObject;

+				Object result = caseLUWPartitionElement(luwPartitionElement);

+				if (result == null) result = caseSQLObject(luwPartitionElement);

+				if (result == null) result = caseENamedElement(luwPartitionElement);

+				if (result == null) result = caseEModelElement(luwPartitionElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_DATA_PARTITION: {

+				LUWDataPartition luwDataPartition = (LUWDataPartition)theEObject;

+				Object result = caseLUWDataPartition(luwDataPartition);

+				if (result == null) result = caseSQLObject(luwDataPartition);

+				if (result == null) result = caseENamedElement(luwDataPartition);

+				if (result == null) result = caseEModelElement(luwDataPartition);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_DATA_PARTITION_KEY: {

+				LUWDataPartitionKey luwDataPartitionKey = (LUWDataPartitionKey)theEObject;

+				Object result = caseLUWDataPartitionKey(luwDataPartitionKey);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_DATABASE_PACKAGE: {

+				LUWDatabasePackage luwDatabasePackage = (LUWDatabasePackage)theEObject;

+				Object result = caseLUWDatabasePackage(luwDatabasePackage);

+				if (result == null) result = caseDB2Package(luwDatabasePackage);

+				if (result == null) result = caseDB2AccessPlan(luwDatabasePackage);

+				if (result == null) result = caseSQLObject(luwDatabasePackage);

+				if (result == null) result = caseENamedElement(luwDatabasePackage);

+				if (result == null) result = caseEModelElement(luwDatabasePackage);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_MODULE: {

+				LUWModule luwModule = (LUWModule)theEObject;

+				Object result = caseLUWModule(luwModule);

+				if (result == null) result = caseSQLObject(luwModule);

+				if (result == null) result = caseENamedElement(luwModule);

+				if (result == null) result = caseEModelElement(luwModule);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_MODULE_OBJECT: {

+				LUWModuleObject luwModuleObject = (LUWModuleObject)theEObject;

+				Object result = caseLUWModuleObject(luwModuleObject);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_MODULE_FUNCTION: {

+				LUWModuleFunction luwModuleFunction = (LUWModuleFunction)theEObject;

+				Object result = caseLUWModuleFunction(luwModuleFunction);

+				if (result == null) result = caseDB2UserDefinedFunction(luwModuleFunction);

+				if (result == null) result = caseLUWModuleObject(luwModuleFunction);

+				if (result == null) result = caseUserDefinedFunction(luwModuleFunction);

+				if (result == null) result = caseDB2Function(luwModuleFunction);

+				if (result == null) result = caseFunction(luwModuleFunction);

+				if (result == null) result = caseDB2Routine(luwModuleFunction);

+				if (result == null) result = caseRoutine(luwModuleFunction);

+				if (result == null) result = caseDB2AccessPlan(luwModuleFunction);

+				if (result == null) result = caseSQLObject(luwModuleFunction);

+				if (result == null) result = caseENamedElement(luwModuleFunction);

+				if (result == null) result = caseEModelElement(luwModuleFunction);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_MODULE_PROCEDURE: {

+				LUWModuleProcedure luwModuleProcedure = (LUWModuleProcedure)theEObject;

+				Object result = caseLUWModuleProcedure(luwModuleProcedure);

+				if (result == null) result = caseDB2Procedure(luwModuleProcedure);

+				if (result == null) result = caseLUWModuleObject(luwModuleProcedure);

+				if (result == null) result = caseProcedure(luwModuleProcedure);

+				if (result == null) result = caseDB2Routine(luwModuleProcedure);

+				if (result == null) result = caseRoutine(luwModuleProcedure);

+				if (result == null) result = caseDB2AccessPlan(luwModuleProcedure);

+				if (result == null) result = caseSQLObject(luwModuleProcedure);

+				if (result == null) result = caseENamedElement(luwModuleProcedure);

+				if (result == null) result = caseEModelElement(luwModuleProcedure);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_MODULE_CONDITION: {

+				LUWModuleCondition luwModuleCondition = (LUWModuleCondition)theEObject;

+				Object result = caseLUWModuleCondition(luwModuleCondition);

+				if (result == null) result = caseSQLObject(luwModuleCondition);

+				if (result == null) result = caseLUWModuleObject(luwModuleCondition);

+				if (result == null) result = caseENamedElement(luwModuleCondition);

+				if (result == null) result = caseEModelElement(luwModuleCondition);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_GLOBAL_VARIABLE: {

+				LUWGlobalVariable luwGlobalVariable = (LUWGlobalVariable)theEObject;

+				Object result = caseLUWGlobalVariable(luwGlobalVariable);

+				if (result == null) result = caseTypedElement(luwGlobalVariable);

+				if (result == null) result = caseSQLObject(luwGlobalVariable);

+				if (result == null) result = caseENamedElement(luwGlobalVariable);

+				if (result == null) result = caseEModelElement(luwGlobalVariable);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_MODULE_TYPE: {

+				LUWModuleType luwModuleType = (LUWModuleType)theEObject;

+				Object result = caseLUWModuleType(luwModuleType);

+				if (result == null) result = caseLUWModuleObject(luwModuleType);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_MODULE_ROW_DATA_TYPE: {

+				LUWModuleRowDataType luwModuleRowDataType = (LUWModuleRowDataType)theEObject;

+				Object result = caseLUWModuleRowDataType(luwModuleRowDataType);

+				if (result == null) result = caseLUWRowDataType(luwModuleRowDataType);

+				if (result == null) result = caseLUWModuleType(luwModuleRowDataType);

+				if (result == null) result = caseUserDefinedType(luwModuleRowDataType);

+				if (result == null) result = caseRowDataType(luwModuleRowDataType);

+				if (result == null) result = caseLUWModuleObject(luwModuleRowDataType);

+				if (result == null) result = caseConstructedDataType(luwModuleRowDataType);

+				if (result == null) result = caseDataType(luwModuleRowDataType);

+				if (result == null) result = caseSQLObject(luwModuleRowDataType);

+				if (result == null) result = caseENamedElement(luwModuleRowDataType);

+				if (result == null) result = caseEModelElement(luwModuleRowDataType);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_MODULE_ARRAY_DATA_TYPE: {

+				LUWModuleArrayDataType luwModuleArrayDataType = (LUWModuleArrayDataType)theEObject;

+				Object result = caseLUWModuleArrayDataType(luwModuleArrayDataType);

+				if (result == null) result = caseLUWArrayDataType(luwModuleArrayDataType);

+				if (result == null) result = caseLUWModuleType(luwModuleArrayDataType);

+				if (result == null) result = caseArrayDataType(luwModuleArrayDataType);

+				if (result == null) result = caseUserDefinedType(luwModuleArrayDataType);

+				if (result == null) result = caseLUWModuleObject(luwModuleArrayDataType);

+				if (result == null) result = caseCollectionDataType(luwModuleArrayDataType);

+				if (result == null) result = caseConstructedDataType(luwModuleArrayDataType);

+				if (result == null) result = caseDataType(luwModuleArrayDataType);

+				if (result == null) result = caseSQLObject(luwModuleArrayDataType);

+				if (result == null) result = caseENamedElement(luwModuleArrayDataType);

+				if (result == null) result = caseEModelElement(luwModuleArrayDataType);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_MODULE_DISTINCT_TYPE: {

+				LUWModuleDistinctType luwModuleDistinctType = (LUWModuleDistinctType)theEObject;

+				Object result = caseLUWModuleDistinctType(luwModuleDistinctType);

+				if (result == null) result = caseDistinctUserDefinedType(luwModuleDistinctType);

+				if (result == null) result = caseLUWModuleType(luwModuleDistinctType);

+				if (result == null) result = caseUserDefinedType(luwModuleDistinctType);

+				if (result == null) result = caseLUWModuleObject(luwModuleDistinctType);

+				if (result == null) result = caseDataType(luwModuleDistinctType);

+				if (result == null) result = caseSQLObject(luwModuleDistinctType);

+				if (result == null) result = caseENamedElement(luwModuleDistinctType);

+				if (result == null) result = caseEModelElement(luwModuleDistinctType);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_MODULE_GLOBAL_VARIABLE: {

+				LUWModuleGlobalVariable luwModuleGlobalVariable = (LUWModuleGlobalVariable)theEObject;

+				Object result = caseLUWModuleGlobalVariable(luwModuleGlobalVariable);

+				if (result == null) result = caseLUWGlobalVariable(luwModuleGlobalVariable);

+				if (result == null) result = caseLUWModuleObject(luwModuleGlobalVariable);

+				if (result == null) result = caseTypedElement(luwModuleGlobalVariable);

+				if (result == null) result = caseSQLObject(luwModuleGlobalVariable);

+				if (result == null) result = caseENamedElement(luwModuleGlobalVariable);

+				if (result == null) result = caseEModelElement(luwModuleGlobalVariable);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_ARRAY_DATA_TYPE: {

+				LUWArrayDataType luwArrayDataType = (LUWArrayDataType)theEObject;

+				Object result = caseLUWArrayDataType(luwArrayDataType);

+				if (result == null) result = caseArrayDataType(luwArrayDataType);

+				if (result == null) result = caseUserDefinedType(luwArrayDataType);

+				if (result == null) result = caseCollectionDataType(luwArrayDataType);

+				if (result == null) result = caseConstructedDataType(luwArrayDataType);

+				if (result == null) result = caseDataType(luwArrayDataType);

+				if (result == null) result = caseSQLObject(luwArrayDataType);

+				if (result == null) result = caseENamedElement(luwArrayDataType);

+				if (result == null) result = caseEModelElement(luwArrayDataType);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_ROW_DATA_TYPE: {

+				LUWRowDataType luwRowDataType = (LUWRowDataType)theEObject;

+				Object result = caseLUWRowDataType(luwRowDataType);

+				if (result == null) result = caseUserDefinedType(luwRowDataType);

+				if (result == null) result = caseRowDataType(luwRowDataType);

+				if (result == null) result = caseConstructedDataType(luwRowDataType);

+				if (result == null) result = caseDataType(luwRowDataType);

+				if (result == null) result = caseSQLObject(luwRowDataType);

+				if (result == null) result = caseENamedElement(luwRowDataType);

+				if (result == null) result = caseEModelElement(luwRowDataType);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.PLSQL_PACKAGE: {

+				PLSQLPackage plsqlPackage = (PLSQLPackage)theEObject;

+				Object result = casePLSQLPackage(plsqlPackage);

+				if (result == null) result = caseLUWModule(plsqlPackage);

+				if (result == null) result = caseDB2Routine(plsqlPackage);

+				if (result == null) result = caseRoutine(plsqlPackage);

+				if (result == null) result = caseDB2AccessPlan(plsqlPackage);

+				if (result == null) result = caseSQLObject(plsqlPackage);

+				if (result == null) result = caseENamedElement(plsqlPackage);

+				if (result == null) result = caseEModelElement(plsqlPackage);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.PLSQL_PACKAGE_BODY: {

+				PLSQLPackageBody plsqlPackageBody = (PLSQLPackageBody)theEObject;

+				Object result = casePLSQLPackageBody(plsqlPackageBody);

+				if (result == null) result = caseSource(plsqlPackageBody);

+				if (result == null) result = caseSQLObject(plsqlPackageBody);

+				if (result == null) result = caseENamedElement(plsqlPackageBody);

+				if (result == null) result = caseEModelElement(plsqlPackageBody);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_CURSOR_DATA_TYPE: {

+				LUWCursorDataType luwCursorDataType = (LUWCursorDataType)theEObject;

+				Object result = caseLUWCursorDataType(luwCursorDataType);

+				if (result == null) result = caseUserDefinedType(luwCursorDataType);

+				if (result == null) result = caseDataType(luwCursorDataType);

+				if (result == null) result = caseSQLObject(luwCursorDataType);

+				if (result == null) result = caseENamedElement(luwCursorDataType);

+				if (result == null) result = caseEModelElement(luwCursorDataType);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_MODULE_CURSOR_DATA_TYPE: {

+				LUWModuleCursorDataType luwModuleCursorDataType = (LUWModuleCursorDataType)theEObject;

+				Object result = caseLUWModuleCursorDataType(luwModuleCursorDataType);

+				if (result == null) result = caseLUWCursorDataType(luwModuleCursorDataType);

+				if (result == null) result = caseLUWModuleType(luwModuleCursorDataType);

+				if (result == null) result = caseUserDefinedType(luwModuleCursorDataType);

+				if (result == null) result = caseLUWModuleObject(luwModuleCursorDataType);

+				if (result == null) result = caseDataType(luwModuleCursorDataType);

+				if (result == null) result = caseSQLObject(luwModuleCursorDataType);

+				if (result == null) result = caseENamedElement(luwModuleCursorDataType);

+				if (result == null) result = caseEModelElement(luwModuleCursorDataType);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_BUFFER_POOL_SIZE_EXCEPTION: {

+				LUWBufferPoolSizeException luwBufferPoolSizeException = (LUWBufferPoolSizeException)theEObject;

+				Object result = caseLUWBufferPoolSizeException(luwBufferPoolSizeException);

+				if (result == null) result = caseSQLObject(luwBufferPoolSizeException);

+				if (result == null) result = caseENamedElement(luwBufferPoolSizeException);

+				if (result == null) result = caseEModelElement(luwBufferPoolSizeException);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_MEMBER: {

+				LUWMember luwMember = (LUWMember)theEObject;

+				Object result = caseLUWMember(luwMember);

+				if (result == null) result = caseDB2Member(luwMember);

+				if (result == null) result = caseSQLObject(luwMember);

+				if (result == null) result = caseENamedElement(luwMember);

+				if (result == null) result = caseEModelElement(luwMember);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_SECURITY_POLICY: {

+				LUWSecurityPolicy luwSecurityPolicy = (LUWSecurityPolicy)theEObject;

+				Object result = caseLUWSecurityPolicy(luwSecurityPolicy);

+				if (result == null) result = caseSQLObject(luwSecurityPolicy);

+				if (result == null) result = caseENamedElement(luwSecurityPolicy);

+				if (result == null) result = caseEModelElement(luwSecurityPolicy);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT: {

+				LUWSecurityLabelComponent luwSecurityLabelComponent = (LUWSecurityLabelComponent)theEObject;

+				Object result = caseLUWSecurityLabelComponent(luwSecurityLabelComponent);

+				if (result == null) result = caseSQLObject(luwSecurityLabelComponent);

+				if (result == null) result = caseENamedElement(luwSecurityLabelComponent);

+				if (result == null) result = caseEModelElement(luwSecurityLabelComponent);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_SECURITY_LABEL: {

+				LUWSecurityLabel luwSecurityLabel = (LUWSecurityLabel)theEObject;

+				Object result = caseLUWSecurityLabel(luwSecurityLabel);

+				if (result == null) result = caseSQLObject(luwSecurityLabel);

+				if (result == null) result = caseENamedElement(luwSecurityLabel);

+				if (result == null) result = caseEModelElement(luwSecurityLabel);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_SECURITY_LABEL_COMPONENT_ELEMENT: {

+				LUWSecurityLabelComponentElement luwSecurityLabelComponentElement = (LUWSecurityLabelComponentElement)theEObject;

+				Object result = caseLUWSecurityLabelComponentElement(luwSecurityLabelComponentElement);

+				if (result == null) result = caseSQLObject(luwSecurityLabelComponentElement);

+				if (result == null) result = caseENamedElement(luwSecurityLabelComponentElement);

+				if (result == null) result = caseEModelElement(luwSecurityLabelComponentElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_STORAGE_GROUP: {

+				LUWStorageGroup luwStorageGroup = (LUWStorageGroup)theEObject;

+				Object result = caseLUWStorageGroup(luwStorageGroup);

+				if (result == null) result = caseSQLObject(luwStorageGroup);

+				if (result == null) result = caseENamedElement(luwStorageGroup);

+				if (result == null) result = caseEModelElement(luwStorageGroup);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_TEMPORARY_STORAGE_TABLE: {

+				LUWTemporaryStorageTable luwTemporaryStorageTable = (LUWTemporaryStorageTable)theEObject;

+				Object result = caseLUWTemporaryStorageTable(luwTemporaryStorageTable);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_TEMPORARY_TABLE: {

+				LUWTemporaryTable luwTemporaryTable = (LUWTemporaryTable)theEObject;

+				Object result = caseLUWTemporaryTable(luwTemporaryTable);

+				if (result == null) result = caseTemporaryTable(luwTemporaryTable);

+				if (result == null) result = caseLUWTemporaryStorageTable(luwTemporaryTable);

+				if (result == null) result = caseBaseTable(luwTemporaryTable);

+				if (result == null) result = caseTable(luwTemporaryTable);

+				if (result == null) result = caseSQLObject(luwTemporaryTable);

+				if (result == null) result = caseENamedElement(luwTemporaryTable);

+				if (result == null) result = caseEModelElement(luwTemporaryTable);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.ARRAY_INDEX_ELEMENT_TYPE: {

+				ArrayIndexElementType arrayIndexElementType = (ArrayIndexElementType)theEObject;

+				Object result = caseArrayIndexElementType(arrayIndexElementType);

+				if (result == null) result = caseElementType(arrayIndexElementType);

+				if (result == null) result = caseTypedElement(arrayIndexElementType);

+				if (result == null) result = caseSQLObject(arrayIndexElementType);

+				if (result == null) result = caseENamedElement(arrayIndexElementType);

+				if (result == null) result = caseEModelElement(arrayIndexElementType);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case LUWPackage.LUW_PARTITION_EVERY_CLAUSE_ELEMENT: {

+				LUWPartitionEveryClauseElement luwPartitionEveryClauseElement = (LUWPartitionEveryClauseElement)theEObject;

+				Object result = caseLUWPartitionEveryClauseElement(luwPartitionEveryClauseElement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			default: return defaultCase(theEObject);

+		}

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Partition Group</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Partition Group</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWPartitionGroup(LUWPartitionGroup object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Table Space</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Table Space</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWTableSpace(LUWTableSpace object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Database Partition</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Database Partition</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWDatabasePartition(LUWDatabasePartition object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Database Container</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Database Container</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWDatabaseContainer(LUWDatabaseContainer object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Admin Server</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Admin Server</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWAdminServer(LUWAdminServer object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Buffer Pool</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Buffer Pool</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWBufferPool(LUWBufferPool object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Table</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Table</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWTable(LUWTable object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>View</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>View</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWView(LUWView object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Partition Key</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Partition Key</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWPartitionKey(LUWPartitionKey object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Nickname</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Nickname</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWNickname(LUWNickname object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Function Mapping</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Function Mapping</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWFunctionMapping(LUWFunctionMapping object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Wrapper</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Wrapper</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWWrapper(LUWWrapper object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Non Relational Nickname</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Non Relational Nickname</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWNonRelationalNickname(LUWNonRelationalNickname object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Non Relational Server</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Non Relational Server</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWNonRelationalServer(LUWNonRelationalServer object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Non Relational Wrapper</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Non Relational Wrapper</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWNonRelationalWrapper(LUWNonRelationalWrapper object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Relational Nickname</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Relational Nickname</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWRelationalNickname(LUWRelationalNickname object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Generic User Mapping</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Generic User Mapping</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWGenericUserMapping(LUWGenericUserMapping object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Relational Wrapper</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Relational Wrapper</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWRelationalWrapper(LUWRelationalWrapper object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Server</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Server</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWServer(LUWServer object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Type Mapping</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Type Mapping</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWTypeMapping(LUWTypeMapping object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>User Mapping</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>User Mapping</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWUserMapping(LUWUserMapping object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Option</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Option</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWOption(LUWOption object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Relational Server</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Relational Server</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWRelationalServer(LUWRelationalServer object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Database</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Database</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWDatabase(LUWDatabase object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Column</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Column</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWColumn(LUWColumn object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Generic Nickname</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Generic Nickname</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWGenericNickname(LUWGenericNickname object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Generic Server</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Generic Server</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWGenericServer(LUWGenericServer object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Materialized Query Table</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Materialized Query Table</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWMaterializedQueryTable(LUWMaterializedQueryTable object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Generic Wrapper</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Generic Wrapper</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWGenericWrapper(LUWGenericWrapper object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Storage Table</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Storage Table</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWStorageTable(LUWStorageTable object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Relational Remote Server</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Relational Remote Server</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseRelationalRemoteServer(RelationalRemoteServer object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Relational Remote Data Set</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Relational Remote Data Set</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseRelationalRemoteDataSet(RelationalRemoteDataSet object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Remote Server</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Remote Server</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseRemoteServer(RemoteServer object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Remote Data Set</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Remote Data Set</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseRemoteDataSet(RemoteDataSet object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Index</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Index</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWIndex(LUWIndex object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Attribute Definition</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Attribute Definition</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWAttributeDefinition(LUWAttributeDefinition object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Federated Procedure</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Federated Procedure</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseFederatedProcedure(FederatedProcedure object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Federated Parameter</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Federated Parameter</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseFederatedParameter(FederatedParameter object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Partition Expression</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Partition Expression</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWPartitionExpression(LUWPartitionExpression object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Partition Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Partition Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWPartitionElement(LUWPartitionElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Data Partition</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Data Partition</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWDataPartition(LUWDataPartition object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Data Partition Key</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Data Partition Key</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWDataPartitionKey(LUWDataPartitionKey object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Database Package</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Database Package</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWDatabasePackage(LUWDatabasePackage object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Module</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Module</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWModule(LUWModule object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Module Object</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Module Object</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWModuleObject(LUWModuleObject object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Module Function</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Module Function</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWModuleFunction(LUWModuleFunction object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Module Procedure</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Module Procedure</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWModuleProcedure(LUWModuleProcedure object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Module Condition</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Module Condition</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWModuleCondition(LUWModuleCondition object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Global Variable</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Global Variable</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWGlobalVariable(LUWGlobalVariable object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Module Type</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Module Type</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWModuleType(LUWModuleType object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Module Row Data Type</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Module Row Data Type</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWModuleRowDataType(LUWModuleRowDataType object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Module Array Data Type</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Module Array Data Type</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWModuleArrayDataType(LUWModuleArrayDataType object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Module Distinct Type</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Module Distinct Type</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWModuleDistinctType(LUWModuleDistinctType object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Module Global Variable</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Module Global Variable</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWModuleGlobalVariable(LUWModuleGlobalVariable object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Array Data Type</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Array Data Type</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWArrayDataType(LUWArrayDataType object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Row Data Type</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Row Data Type</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWRowDataType(LUWRowDataType object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>PLSQL Package</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>PLSQL Package</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object casePLSQLPackage(PLSQLPackage object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>PLSQL Package Body</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>PLSQL Package Body</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object casePLSQLPackageBody(PLSQLPackageBody object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Cursor Data Type</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Cursor Data Type</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWCursorDataType(LUWCursorDataType object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Module Cursor Data Type</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Module Cursor Data Type</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWModuleCursorDataType(LUWModuleCursorDataType object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Buffer Pool Size Exception</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Buffer Pool Size Exception</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWBufferPoolSizeException(LUWBufferPoolSizeException object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Member</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Member</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWMember(LUWMember object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Security Policy</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Security Policy</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWSecurityPolicy(LUWSecurityPolicy object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Security Label Component</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Security Label Component</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWSecurityLabelComponent(LUWSecurityLabelComponent object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Security Label</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Security Label</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWSecurityLabel(LUWSecurityLabel object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Security Label Component Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Security Label Component Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWSecurityLabelComponentElement(LUWSecurityLabelComponentElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Storage Group</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Storage Group</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWStorageGroup(LUWStorageGroup object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Temporary Storage Table</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Temporary Storage Table</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWTemporaryStorageTable(LUWTemporaryStorageTable object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Temporary Table</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Temporary Table</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWTemporaryTable(LUWTemporaryTable object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Array Index Element Type</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Array Index Element Type</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseArrayIndexElementType(ArrayIndexElementType object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Partition Every Clause Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Partition Every Clause Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseLUWPartitionEveryClauseElement(LUWPartitionEveryClauseElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>EModel Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>EModel Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseEModelElement(EModelElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>ENamed Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>ENamed Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseENamedElement(ENamedElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>SQL Object</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>SQL Object</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseSQLObject(SQLObject object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Table</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Table</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseTable(Table object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Base Table</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Base Table</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseBaseTable(BaseTable object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Persistent Table</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Persistent Table</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object casePersistentTable(PersistentTable object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Table</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Table</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2Table(DB2Table object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Derived Table</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Derived Table</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDerivedTable(DerivedTable object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>View Table</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>View Table</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseViewTable(ViewTable object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 View</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 View</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2View(DB2View object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Database</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Database</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDatabase(Database object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Database</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Database</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2Database(DB2Database object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Typed Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Typed Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseTypedElement(TypedElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Column</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Column</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseColumn(Column object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Column</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Column</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2Column(DB2Column object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Materialized Query Table</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Materialized Query Table</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2MaterializedQueryTable(DB2MaterializedQueryTable object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Index</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Index</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseIndex(Index object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Index</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Index</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2Index(DB2Index object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Attribute Definition</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Attribute Definition</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseAttributeDefinition(AttributeDefinition object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Routine</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Routine</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseRoutine(Routine object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Procedure</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Procedure</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseProcedure(Procedure object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Access Plan</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Access Plan</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2AccessPlan(DB2AccessPlan object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Routine</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Routine</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2Routine(DB2Routine object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Procedure</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Procedure</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2Procedure(DB2Procedure object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Parameter</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Parameter</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseParameter(Parameter object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Package</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Package</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2Package(DB2Package object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Function</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Function</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseFunction(Function object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>User Defined Function</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>User Defined Function</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseUserDefinedFunction(UserDefinedFunction object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Function</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Function</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2Function(DB2Function object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 User Defined Function</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 User Defined Function</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2UserDefinedFunction(DB2UserDefinedFunction object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Data Type</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Data Type</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDataType(DataType object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>User Defined Type</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>User Defined Type</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseUserDefinedType(UserDefinedType object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Constructed Data Type</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Constructed Data Type</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseConstructedDataType(ConstructedDataType object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Row Data Type</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Row Data Type</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseRowDataType(RowDataType object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Collection Data Type</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Collection Data Type</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseCollectionDataType(CollectionDataType object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Array Data Type</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Array Data Type</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseArrayDataType(ArrayDataType object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Distinct User Defined Type</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Distinct User Defined Type</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDistinctUserDefinedType(DistinctUserDefinedType object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Source</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Source</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseSource(Source object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Member</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Member</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2Member(DB2Member object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Temporary Table</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Temporary Table</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseTemporaryTable(TemporaryTable object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Element Type</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Element Type</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseElementType(ElementType object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch, but this is the last case anyway.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)

+	 * @generated

+	 */

+	public Object defaultCase(EObject object) {

+		return null;

+	}

+

+} //LUWSwitch

diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/util/TableToRemoteDataSetHelper.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/util/TableToRemoteDataSetHelper.java
new file mode 100644
index 0000000..7ffca3a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.luw/src/org/eclipse/datatools/enablement/ibm/db2/luw/model/util/TableToRemoteDataSetHelper.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.luw.model.util;
+
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.LUWPackage;
+import org.eclipse.datatools.enablement.ibm.db2.luw.model.RelationalRemoteDataSet;
+import org.eclipse.datatools.enablement.ibm.db2.model.util.ReverseNavigationHelper;
+
+/**
+ * @author ellersr
+ *
+ * Helper to provide the ability to navigate the <code>RelationalRemoteDataSet.table</code> relationship
+ * in the inverse direction. (I.e. navigate from an SQL BaseTable object back to an 
+ * LUW RelationalRemoteDataSet object, even though the relationship RelationalRemoteDataSet to
+ * BaseTable is modeled to be one directional.)
+ */
+public class TableToRemoteDataSetHelper extends ReverseNavigationHelper {
+
+	
+	protected static final EReference tableRef = LUWPackage.eINSTANCE.getRelationalRemoteDataSet_Table();	
+
+	/**
+	 * The singleton instance of <code>INVERSE_TABLE_ADAPTER</code> must be attached to 
+	 * any instance of RelationalRemoteDataSet for which reverse navigation is required.
+	 * This adapter should be attached at the time the RelationalRemoteDataSet object is 
+	 * created.
+	 */
+	public static final InverseAdapter INVERSE_TABLE_ADAPTER = new InverseAdapter(tableRef, SINGLE);
+
+
+	/**
+	 * Helper method to get the LUW RelationalRemoteDataSet object that points to
+	 * a specified instance of a SQL BaseTable object via the <code>RelationalRemoteDataSet.table</code> relationship.
+	 * @param tab The SQL BaseTable object
+	 * @return The corresponding LUW RelationalRemoteDataSet object
+	 */
+	public static RelationalRemoteDataSet getRemoteDataSet(BaseTable tab) {
+		return (RelationalRemoteDataSet) INVERSE_TABLE_ADAPTER.getOppositeEnd(tab);
+	}
+	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/.gitignore b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/.gitignore
new file mode 100644
index 0000000..60463af
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/.gitignore
@@ -0,0 +1,2 @@
+bin
+build.xml
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/.project b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/.project
new file mode 100644
index 0000000..43aa8f5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/.project
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..9dcb57f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition; singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/about.html b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/about.html
new file mode 100644
index 0000000..129db9d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/build.properties b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/build.properties
new file mode 100644
index 0000000..d59a9b8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/build.properties
@@ -0,0 +1,21 @@
+###############################################################################
+# Copyright (c) 2001, 2004 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+bin.includes = plugin.xml,\
+               runtime/,\
+               plugin.properties,\
+               about.html,\
+               META-INF/
+plugin.version =	1.0.0.200706071
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/plugin.properties b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/plugin.properties
new file mode 100644
index 0000000..3713b24
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/plugin.properties
@@ -0,0 +1,34 @@
+###############################################################################
+# Copyright (c) 2001, 2004 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+
+pluginName = DB2 UDB Database Definition Plug-in
+providerName = Eclipse Data Tools Platform
+
+V7ProductString = DB2 for z/OS
+V7VersionString = V7
+
+V8CompatibilityProductString = DB2 for z/OS
+V8CompatibilityVersionString = V8 (Compatibility Mode)
+
+V8NewFunctionProductString = DB2 for z/OS
+V8NewFunctionVersionString = V8 (New-Function Mode)
+
+V7Description = IBM DB2 UDB for z/OS and OS 390 Version 7
+V8CompatibilityDescription = IBM DB2 UDB for z/OS Version 8 in compatibility mode
+V8NewFunctionDescription = IBM DB2 UDB for z/OS Version 8 in new-function mode
+
+V9CompatibilityDescription = IBM DB2 for z/OS Version 9.1 in conversion mode
+V9CompatibilityProductString = DB2 for z/OS
+V9CompatibilityVersionString = V9.1 (Conversion Mode)
+
+V9NewFunctionDescription = IBM DB2 for z/OS Version 9.1 in new-function mode
+V9NewFunctionProductString = DB2 for z/OS
+V9NewFunctionVersionString = V9.1 (New-Function Mode)
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/plugin.xml b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/plugin.xml
new file mode 100644
index 0000000..95dc661
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/plugin.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.databaseDefinition">
+      <definition
+            product="DB2 UDB zSeries"
+            version="V7"
+            description="%V7Description"
+            productDisplayString="%V7ProductString"
+            versionDisplayString="%V7VersionString"
+            file="runtime/vendors/DB2 UDB zSeries_7/DB2 UDB zSeries_7.xmi">
+      </definition>
+      <definition
+            product="DB2 UDB zSeries"
+            version="V8 (Compatibility Mode)"
+            description="%V8CompatibilityDescription"
+            productDisplayString="%V8CompatibilityProductString"
+            versionDisplayString="%V8CompatibilityVersionString"
+            file="runtime/vendors/DB2 UDB zSeries_8/DB2 UDB zSeries_8 (Compatibility Mode).xmi">
+      </definition>
+      <definition
+            product="DB2 UDB zSeries"
+            version="V8 (New-Function Mode)"
+            description="%V8NewFunctionDescription"
+            productDisplayString="%V8NewFunctionProductString"
+            versionDisplayString="%V8NewFunctionVersionString"
+            file="runtime/vendors/DB2 UDB zSeries_8/DB2 UDB zSeries_8 (New-Function Mode).xmi">
+      </definition>
+            <definition
+            product="DB2 UDB zSeries"
+            version="V9 (Compatibility Mode)"
+            productDisplayString="%V9CompatibilityProductString"
+            versionDisplayString="%V9CompatibilityVersionString"
+            description="%V9CompatibilityDescription"
+            file="runtime/vendors/DB2 UDB zSeries_V9/DB2 UDB zSeries_V9 (Compatibility Mode).xmi">
+      </definition>
+      <definition
+            product="DB2 UDB zSeries"
+            version="V9 (New-Function Mode)"            
+            productDisplayString="%V9NewFunctionProductString"
+            versionDisplayString="%V9NewFunctionVersionString"
+            description="%V9NewFunctionDescription"
+            file="runtime/vendors/DB2 UDB zSeries_V9/DB2 UDB zSeries_V9 (New-Function Mode).xmi">
+       </definition>
+   </extension>
+   
+</plugin>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/runtime/vendors/DB2 UDB zSeries_7/DB2 UDB zSeries_7.xmi b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/runtime/vendors/DB2 UDB zSeries_7/DB2 UDB zSeries_7.xmi
new file mode 100644
index 0000000..1fe8610
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/runtime/vendors/DB2 UDB zSeries_7/DB2 UDB zSeries_7.xmi
@@ -0,0 +1,872 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="DB2 UDB zSeries" version="7" maximumIdentifierLength="8" maximumCommentLength="64" aliasSupported="true" synonymSupported="true" userDefinedTypeSupported="true" packageSupported="true">
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="BYTE" defaultLength="1024" maximumLength="2147483647" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_1" lengthSupported="true" defaultLength="1" maximumLength="127" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>GRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_1" lengthSupported="true" defaultLength="32" maximumLength="16352" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARGRAPHIC</name>
+    <name>VARG</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_2" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARGRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="255" primitiveType="CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR</name>
+    <name>CHARACTER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="BYTE" defaultLength="1024" maximumLength="2147483647" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CLOB</name>
+    <name>CHARACTER LARGE OBJECT</name>
+    <name>CHAR LARGE OBJECT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="DOUBLE_BYTE" defaultLength="1024" maximumLength="1073741823" primitiveType="NATIONAL_CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DBCLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" defaultLength="32" keyConstraintSupported="true" maximumLength="32704" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR</name>
+    <name>CHARACTER VARYING</name>
+    <name>CHAR VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_2" primitiveType="CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" identitySupported="true" scaleSupported="true" precisionSupported="true" defaultPrecision="5" maximumPrecision="31" defaultScale="0" keyConstraintSupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" precisionSupported="true" keyConstraintSupported="true" primitiveType="FLOAT" defaultPrecision="53" maximumPrecision="53" cutoffPrecision="22" jdbcEnumType="6" javaClassName="double">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INTEGER</name>
+    <name>INT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" identitySupported="true" scaleSupported="true" precisionSupported="true" defaultPrecision="5" maximumPrecision="31" defaultScale="0" keyConstraintSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+    <name>NUM</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIME_1" keyConstraintSupported="true" primitiveType="TIME" jdbcEnumType="92" javaClassName="java.sql.Time">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP</name>
+    <name>TIMESTMP</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_2" keyConstraintSupported="true" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>ROWID</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" lengthSupported="true" defaultLength="1" displayNameSupported="true" displayName="CHAR ({0}) FOR BIT DATA" keyConstraintSupported="true" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR FOR BIT DATA</name>
+    <name>CHARACTER FOR BIT DATA</name>
+    <name>CHAR () FOR BIT DATA</name>
+    <name>CHARACTER () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_1" lengthSupported="true" defaultLength="1" displayNameSupported="true" displayName="VARCHAR ({0}) FOR BIT DATA" keyConstraintSupported="true" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR FOR BIT DATA</name>
+    <name>CHARACTER VARYING FOR BIT DATA</name>
+    <name>CHAR VARYING FOR BIT DATA</name>
+    <name>VARCHAR () FOR BIT DATA</name>
+    <name>CHARACTER VARYING () FOR BIT DATA</name>
+    <name>CHAR VARYING () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <tableSpaceDefinition maximumIdentifierLength="8" >
+    <tableSpaceType>REGULAR</tableSpaceType>
+    <tableSpaceType>LOB</tableSpaceType>
+    <tableSpaceType>LARGE</tableSpaceType>
+  </tableSpaceDefinition>
+  <storedProcedureDefinition maximumIdentifierLength="18" parameterStyleSupported="true">
+    <parameterStyle>DB2SQL</parameterStyle>
+    <parameterStyle>GENERAL</parameterStyle>
+    <parameterStyle>GENERAL_WITH_NULLS</parameterStyle>
+    <parameterStyle>JAVA</parameterStyle>
+    <languageType>SQL</languageType>
+    <languageType>JAVA</languageType>
+    <languageType>C</languageType>
+    <languageType>COBOL</languageType>
+    <languageType>ASSEMBLY</languageType>
+    <languageType>PLI</languageType>
+    <functionLanguageType>SQL</functionLanguageType>
+    <functionLanguageType>JAVA</functionLanguageType>
+    <functionLanguageType>C</functionLanguageType>
+  </storedProcedureDefinition>
+  <columnDefinition maximumIdentifierLength="18" identitySupported="true" identityStartValueSupported="true" identityIncrementSupported="true" identityMinimumSupported="true" identityMaximumSupported="true" identityCycleSupported="true"/>
+  <constraintDefinition maximumPrimaryKeyIdentifierLength="8" maximumForeignKeyIdentifierLength="8" maximumCheckConstraintIdentifierLength="18">
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>RESTRICT</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>SET_NULL</parentDeleteDRIRuleType>
+  </constraintDefinition>
+  <triggerDefinition maximumIdentifierLength="8"/>
+  <indexDefinition maximumIdentifierLength="18" clusteringSupported="true"/>
+  <queryDefinition hostVariableMarker=":"/>
+  <viewDefinition maximumIdentifierLength="18"/>
+  <tableDefinition maximumIdentifierLength="18"/>
+  <schemaDefinition maximumIdentifierLength="8"/>
+  <privilegedElementDefinitions name="DatabaseInstance">
+  	<privilegeDefinitions name="DBADM"/>
+	<privilegeDefinitions name="DBCTRL"/>
+	<privilegeDefinitions name="DBMAINT"/>
+	<privilegeDefinitions name="CREATETAB"/>
+	<privilegeDefinitions name="CREATETS"/>
+	<privilegeDefinitions name="DISPLAYDB"/>
+	<privilegeDefinitions name="DROP"/>
+	<privilegeDefinitions name="IMAGCOPY"/>
+	<privilegeDefinitions name="LOAD"/>
+	<privilegeDefinitions name="RECOVERDB"/>
+	<privilegeDefinitions name="REORG"/>
+	<privilegeDefinitions name="REPAIR"/>
+	<privilegeDefinitions name="STARTDB"/>
+	<privilegeDefinitions name="STATS"/>
+	<privilegeDefinitions name="STOPDB"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Schema">
+  	<privilegeDefinitions name="ALTERIN"/>
+  	<privilegeDefinitions name="CREATEIN"/>
+    <privilegeDefinitions name="DROPIN"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="PersistentTable">
+  	<privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="REFERENCES" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions name="TRIGGER"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="ViewTable">
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions xmi:id="COLUMN_1" name="Column"/>
+  <privilegedElementDefinitions name="MaterializedQueryTable">
+  	<privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="REFERENCES" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions name="TRIGGER"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Routine">
+  	<privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Sequence">
+  	<privilegeDefinitions name="ALTER"/>
+  	<privilegeDefinitions name="USAGE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="UserDefinedType">
+  	<privilegeDefinitions name="USAGE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Tablespace">
+  	<privilegeDefinitions name="USE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="BufferPool">
+  	<privilegeDefinitions name="USE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="StorageGroup">
+  	<privilegeDefinitions name="USE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Package">
+    <privilegeDefinitions name="BIND"/>
+  	<privilegeDefinitions name="COPY"/>
+  	<privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="System">
+	<privilegeDefinitions name="ARCHIVE"/>
+	<privilegeDefinitions name="BINDADD"/>
+	<privilegeDefinitions name="BINDAGENT"/>
+	<privilegeDefinitions name="BSDS"/>
+	<privilegeDefinitions name="CREATEALIAS"/>
+	<privilegeDefinitions name="CREATEDBA"/>
+	<privilegeDefinitions name="CREATEDBC"/>
+	<privilegeDefinitions name="CREATESG"/>
+	<privilegeDefinitions name="CREATETMTAB"/>
+	<privilegeDefinitions name="DISPLAY"/>
+	<privilegeDefinitions name="MONITOR1"/>
+	<privilegeDefinitions name="MONITOR2"/>
+	<privilegeDefinitions name="RECOVER"/>
+	<privilegeDefinitions name="STOPALL"/>
+	<privilegeDefinitions name="STOSPACE"/>
+	<privilegeDefinitions name="SYSADM"/>
+	<privilegeDefinitions name="SYSCTRL"/>
+	<privilegeDefinitions name="SYSOPR"/>
+	<privilegeDefinitions name="TRACE"/>
+  </privilegedElementDefinitions>
+  <SQLSyntaxDefinition terminationCharacter=";">
+    <keywords>ABSOLUTE</keywords>
+    <keywords>ACCESS</keywords>
+    <keywords>ACTION</keywords>
+    <keywords>ACTIVATE</keywords>
+    <keywords>ADA</keywords>
+    <keywords>ADD</keywords>
+    <keywords>AFTER</keywords>
+    <keywords>ALIAS</keywords>
+    <keywords>ALL</keywords>
+    <keywords>ALLOCATE</keywords>
+    <keywords>ALLOW</keywords>
+    <keywords>ALTER</keywords>
+    <keywords>ALTERIN</keywords>
+    <keywords>ALWAYS</keywords>
+    <keywords>AND</keywords>
+    <keywords>ANY</keywords>
+    <keywords>APPEND</keywords>    
+    <keywords>ARE</keywords>
+    <keywords>AS</keywords>
+    <keywords>ASC</keywords>
+    <keywords>ASCII</keywords>
+    <keywords>ASSERTION</keywords>    
+    <keywords>ASSOCIATE</keywords>    
+    <keywords>ASUTIME</keywords>
+    <keywords>AT</keywords>
+    <keywords>ATOMIC</keywords>    
+    <keywords>ATTRIBUTES</keywords>
+    <keywords>AUTHORIZATION</keywords>    
+    <keywords>AUTHID</keywords>
+    <keywords>AUTOMATIC</keywords>    
+    <keywords>AVG</keywords>
+    <keywords>BEFORE</keywords>
+    <keywords>BEGIN</keywords>
+    <keywords>BETWEEN</keywords>    
+    <keywords>BINARY</keywords>
+    <keywords>BIND</keywords>
+    <keywords>BINDADD</keywords>
+    <keywords>BIT</keywords>
+    <keywords>BIT_LENGTH</keywords>
+    <keywords>BLOB</keywords>
+    <keywords>BLOCKED</keywords>
+    <keywords>BOTH</keywords>    
+    <keywords>BUFFERPOOL</keywords>
+    <keywords>BUFFERPOOLS</keywords>    
+    <keywords>BY</keywords>
+    <keywords>C</keywords>
+    <keywords>CACHE</keywords>
+    <keywords>CALL</keywords>
+    <keywords>CALLED</keywords>
+    <keywords>CALLER</keywords>
+    <keywords>CAPTURE</keywords>
+    <keywords>CARDINALITY</keywords>
+    <keywords>CASCADE</keywords>
+    <keywords>CASCADED</keywords>
+    <keywords>CASE</keywords>
+    <keywords>CAST</keywords>
+    <keywords>CATALOG</keywords>
+    <keywords>CATALOG_NAME</keywords>
+    <keywords>CHANGE</keywords>
+    <keywords>CHANGED</keywords>
+    <keywords>CHANGES</keywords>
+    <keywords>CHAR</keywords>
+    <keywords>CHAR_LENGTH</keywords>
+    <keywords>CHARACTER</keywords>
+    <keywords>CHARACTER_LENGTH</keywords>    
+    <keywords>CHECK</keywords>
+    <keywords>CHECKED</keywords>    
+    <keywords>CLIENT</keywords>
+    <keywords>CLOB</keywords>
+    <keywords>CLOSE</keywords>
+    <keywords>CLUSTER</keywords>
+    <keywords>COBOL</keywords>    
+    <keywords>COLLATE</keywords>
+    <keywords>COLLATION</keywords>     
+    <keywords>COLLECT</keywords>
+    <keywords>COLLID</keywords>
+    <keywords>COLUMN</keywords>    
+    <keywords>COMMENT</keywords>
+    <keywords>COMMIT</keywords>
+    <keywords>COMMITTED</keywords>    
+    <keywords>COMPARISONS</keywords>
+    <keywords>CONCAT</keywords>
+    <keywords>CONDITION</keywords>
+    <keywords>CONDITION_NUMBER</keywords>
+    <keywords>CONNECT</keywords>
+    <keywords>CONNECTION</keywords>    
+    <keywords>CONNECTION_NAME</keywords>    
+    <keywords>CONSERVATIVE</keywords>
+    <keywords>CONSTRAINT</keywords>    
+    <keywords>CONSTRAINTS</keywords>    
+    <keywords>CONTAINS</keywords>
+    <keywords>CONTINUE</keywords>
+    <keywords>CONTROL</keywords>
+    <keywords>CONVERT</keywords>
+    <keywords>COPY</keywords>
+    <keywords>CORRELATION</keywords>
+    <keywords>CORR</keywords>
+    <keywords>CORRESPONDING</keywords>
+    <keywords>COUNT</keywords>
+    <keywords>COUNT_BIG</keywords>
+    <keywords>CPU</keywords>
+    <keywords>C++</keywords>
+    <keywords>CREATE</keywords>
+    <keywords>CREATEIN</keywords>    
+    <keywords>CREATETAB</keywords>
+    <keywords>CROSS</keywords>
+    <keywords>CUBE</keywords>
+    <keywords>CURRENT</keywords>
+    <keywords>CURRENT_DATE</keywords>    
+    <keywords>CURRENT_PATH</keywords>    
+    <keywords>CURRENT_SCHEMA</keywords>
+    <keywords>CURRENT_SERVER</keywords>
+    <keywords>CURRENT_SQLID</keywords>
+    <keywords>CURRENT_TIME</keywords>
+    <keywords>CURRENT_TIMESTAMP</keywords>
+    <keywords>CURRENT_TIMEZONE</keywords>
+    <keywords>CURRENT_USER</keywords>    
+    <keywords>CURSOR</keywords>
+    <keywords>CURSORS</keywords>
+    <keywords>CURSOR_NAME</keywords>
+    <keywords>CYCLE</keywords>
+    <keywords>DATE</keywords>
+    <keywords>DATA</keywords>
+    <keywords>DATABASE</keywords>
+    <keywords>DATALINK</keywords>     
+    <keywords>DAY</keywords>
+    <keywords>DAYS</keywords>
+    <keywords>DB</keywords>
+    <keywords>DBADM</keywords>
+    <keywords>DBCLOB</keywords>
+    <keywords>DBINFO</keywords>
+    <keywords>DB2DARI</keywords>
+    <keywords>DB2GENRL</keywords>
+    <keywords>DB2GENERAL</keywords>    
+    <keywords>DB2SQL</keywords>
+    <keywords>DEADLOCKS</keywords>
+    <keywords>DEALLOCATE</keywords>
+    <keywords>DEC</keywords>
+    <keywords>DECIMAL</keywords>
+    <keywords>DECLARE</keywords>
+    <keywords>DEFAULT</keywords>
+    <keywords>DEFAULTS</keywords>
+    <keywords>DEFINE</keywords>
+    <keywords>DEFINITION</keywords>
+    <keywords>DEGREE</keywords>
+    <keywords>DEFER</keywords>
+    <keywords>DEFERRABLE</keywords>
+    <keywords>DEFERRED</keywords>
+    <keywords>DELETE</keywords>
+    <keywords>DESC</keywords>
+    <keywords>DESCRIBE</keywords>
+    <keywords>DESCRIPTOR</keywords>    
+    <keywords>DETERMINISTIC</keywords>    
+    <keywords>DIAGNOSTICS</keywords>
+    <keywords>DIMENSIONS</keywords>
+    <keywords>DISABLE</keywords>
+    <keywords>DISALLOW</keywords>
+    <keywords>DISCONNECT</keywords>
+    <keywords>DISPATCH</keywords>
+    <keywords>DISTINCT</keywords>    
+    <keywords>DOMAIN</keywords>
+    <keywords>DO</keywords>
+    <keywords>DOUBLE</keywords>
+    <keywords>DROP</keywords>
+    <keywords>DROPIN</keywords>    
+    <keywords>DYNAMIC</keywords>    
+    <keywords>EACH</keywords>
+    <keywords>EBCDIC</keywords>
+    <keywords>ELSE</keywords>
+    <keywords>ELSEIF</keywords>
+    <keywords>EMPTY</keywords>
+    <keywords>ENABLE</keywords>
+    <keywords>END</keywords>
+    <keywords>END-EXEC</keywords>
+    <keywords>ERASE</keywords>
+    <keywords>ESCAPE</keywords>
+    <keywords>EUR</keywords>    
+    <keywords>EVENT</keywords>
+    <keywords>EXACT</keywords>
+    <keywords>EXCEPT</keywords>
+    <keywords>EXCEPTION</keywords>
+    <keywords>EXCLUDE</keywords>
+    <keywords>EXCLUDING</keywords>
+    <keywords>EXCLUSIVE</keywords>
+    <keywords>EXEC</keywords>    
+    <keywords>EXECUTE</keywords>
+    <keywords>EXISTS</keywords>
+    <keywords>EXIT</keywords>    
+    <keywords>EXPLAIN</keywords>    
+    <keywords>EXTENDED</keywords>
+    <keywords>EXTENSION</keywords>    
+    <keywords>EXTERNAL</keywords>
+    <keywords>EXTRACT</keywords>
+    <keywords>FALSE</keywords>
+    <keywords>FEDERATED</keywords>
+    <keywords>FENCED</keywords>
+    <keywords>FETCH</keywords>
+    <keywords>FILE</keywords>    
+    <keywords>FINAL</keywords>
+    <keywords>FIRST</keywords>
+    <keywords>FLOAT</keywords>
+    <keywords>FLUSH</keywords>
+    <keywords>FOLLOWING</keywords>
+    <keywords>FOR</keywords>
+    <keywords>FORCE</keywords>
+    <keywords>FOREIGN</keywords>    
+    <keywords>FORTRAN</keywords>
+    <keywords>FOUND</keywords>
+    <keywords>FREEPAGE</keywords>
+    <keywords>FROM</keywords>
+    <keywords>FS</keywords>
+    <keywords>FULL</keywords>
+    <keywords>FUNCTION</keywords>
+    <keywords>G</keywords>
+    <keywords>GBPCACHE</keywords>
+    <keywords>GENERAL</keywords>
+    <keywords>GENERATE</keywords>
+    <keywords>GENERATED</keywords>
+    <keywords>GET</keywords>
+    <keywords>GLOBAL</keywords>
+    <keywords>GO</keywords>
+    <keywords>GOTO</keywords>
+    <keywords>GRANT</keywords>
+    <keywords>GRAPHIC</keywords>
+    <keywords>GROUP</keywords>
+    <keywords>GROUPING</keywords>
+    <keywords>HANDLER</keywords>    
+    <keywords>HAVING</keywords>      
+    <keywords>HOLD</keywords>
+    <keywords>HOUR</keywords>
+    <keywords>HOURS</keywords>
+    <keywords>IDENTITY</keywords>
+    <keywords>IF</keywords>
+    <keywords>IMMEDIATE</keywords>
+    <keywords>IMPLICIT_SCHEMA</keywords>
+    <keywords>IN</keywords>
+    <keywords>INCLUDE</keywords>
+    <keywords>INCLUDING</keywords>
+    <keywords>INCREMENT</keywords>    
+    <keywords>INDEX</keywords>
+    <keywords>INDEXES</keywords>
+    <keywords>INDICATOR</keywords>    
+    <keywords>INHERIT</keywords>
+    <keywords>INITIALLY</keywords>
+    <keywords>INITIAL_INSTS</keywords>
+    <keywords>INITIAL_IOS</keywords>    
+    <keywords>INNER</keywords>
+    <keywords>INOUT</keywords>
+    <keywords>INPUT</keywords>
+    <keywords>INSENSITIVE</keywords>
+    <keywords>INSERT</keywords>    
+    <keywords>INSTEAD</keywords>
+    <keywords>INSTS_PER_ARGBYTE</keywords>
+    <keywords>INSTS_PER_INVOC</keywords>
+    <keywords>INT</keywords>
+    <keywords>INTEGER</keywords>
+    <keywords>INTEGRITY</keywords>
+    <keywords>INTERSECT</keywords>
+    <keywords>INTERVAL</keywords>
+    <keywords>INTO</keywords>    
+    <keywords>IOS_PER_ARGBYTE</keywords>
+    <keywords>IOS_PER_INVOC</keywords>
+    <keywords>IS</keywords>
+    <keywords>ISO</keywords>
+    <keywords>ITERATE</keywords>
+    <keywords>ISOLATION</keywords>
+    <keywords>JAVA</keywords>    
+    <keywords>JIS</keywords>
+    <keywords>JOIN</keywords>
+    <keywords>K</keywords>
+    <keywords>KEY</keywords>
+    <keywords>KEYS</keywords>
+    <keywords>LANGUAGE</keywords>
+    <keywords>LARGE</keywords>
+    <keywords>LAST</keywords>
+    <keywords>LEADING</keywords>
+    <keywords>LEAVE</keywords>
+    <keywords>LEFT</keywords>
+    <keywords>LENGTH</keywords>
+    <keywords>LEVEL</keywords>
+    <keywords>LIBRARY</keywords>
+    <keywords>LIKE</keywords>
+    <keywords>LIMIT</keywords>
+    <keywords>LINK</keywords>
+    <keywords>LINKTYPE</keywords>
+    <keywords>LOAD</keywords>
+    <keywords>LOCAL</keywords>
+    <keywords>LOCATOR</keywords>
+    <keywords>LOCATORS</keywords>
+    <keywords>LOCK</keywords>
+    <keywords>LOCKS</keywords>
+    <keywords>LOCKSIZE</keywords>
+    <keywords>LOGGED</keywords>
+    <keywords>LONG</keywords>
+    <keywords>LONGVAR</keywords>
+    <keywords>LOOP</keywords>
+    <keywords>LOWER</keywords>
+    <keywords>M</keywords>
+    <keywords>MAINTAINED</keywords>    
+    <keywords>MAPPING</keywords>
+    <keywords>MATCH</keywords>
+    <keywords>MAX</keywords>    
+    <keywords>MAXVALUE</keywords>     
+    <keywords>MESSAGE_TEXT</keywords>
+    <keywords>METHOD</keywords>    
+    <keywords>MICROSECOND</keywords>
+    <keywords>MICROSECONDS</keywords>    
+    <keywords>MINUTE</keywords>
+    <keywords>MINUTES</keywords>
+    <keywords>MINVALUE</keywords>
+    <keywords>MIXED</keywords>
+    <keywords>MODE</keywords>
+    <keywords>MODIFIES</keywords>
+    <keywords>MODULE</keywords>
+    <keywords>MONITOR</keywords>
+    <keywords>MONTH</keywords>
+    <keywords>MONTHS</keywords>
+    <keywords>MORE</keywords>    
+    <keywords>NAMED</keywords>
+    <keywords>NAMES</keywords>
+    <keywords>NATIONAL</keywords>
+    <keywords>NATURAL</keywords>
+    <keywords>NCHAR</keywords>
+    <keywords>NEW</keywords>
+    <keywords>NEW_TABLE</keywords>
+    <keywords>NEXT</keywords>
+    <keywords>NEXTVAL</keywords>
+    <keywords>NICKNAME</keywords>
+    <keywords>NO</keywords>
+    <keywords>NOCACHE</keywords>
+    <keywords>NOCYCLE</keywords>
+    <keywords>NODE</keywords>    
+    <keywords>NOMAXVALUE</keywords>
+    <keywords>NOMINVALUE</keywords>    
+    <keywords>NONE</keywords>
+    <keywords>NOORDER</keywords>
+    <keywords>NOT</keywords>
+    <keywords>NULL</keywords>
+    <keywords>NULLABLE</keywords>    
+    <keywords>NULLS</keywords>    
+    <keywords>NUMBER</keywords>
+    <keywords>NUMERIC</keywords>    
+    <keywords>OBJECT</keywords>
+    <keywords>OF</keywords>
+    <keywords>OFF</keywords>
+    <keywords>OLD</keywords>
+    <keywords>OLD_TABLE</keywords>
+    <keywords>OLE</keywords>
+    <keywords>OLEDB</keywords>
+    <keywords>ON</keywords>
+    <keywords>ONCE</keywords>
+    <keywords>ONLINE</keywords>
+    <keywords>ONLY</keywords>
+    <keywords>OPEN</keywords>
+    <keywords>OPTIMIZATION</keywords>
+    <keywords>OPTIMIZE</keywords>
+    <keywords>OPTION</keywords>
+    <keywords>OPTIONS</keywords>
+    <keywords>OR</keywords>
+    <keywords>ORDER</keywords>
+    <keywords>OUT</keywords>
+    <keywords>OUTER</keywords>
+    <keywords>OUTPUT</keywords>
+    <keywords>OVER</keywords>    
+    <keywords>OVERLAPS</keywords>    
+    <keywords>PACKAGE</keywords>
+    <keywords>PAD</keywords>    
+    <keywords>PARTIAL</keywords>
+    <keywords>PARALLEL</keywords>    
+    <keywords>PARAMETER</keywords>
+    <keywords>PASCAL</keywords>
+    <keywords>PASSTHRU</keywords>
+    <keywords>PASSWORD</keywords>
+    <keywords>PATH</keywords>
+    <keywords>PARTITION</keywords>
+    <keywords>PARTITIONING</keywords>    
+    <keywords>PCTFREE</keywords>    
+    <keywords>PERCENT_ARGBYTES</keywords>
+    <keywords>PERMISSION</keywords>
+    <keywords>PIECESIZE</keywords>
+    <keywords>PIPE</keywords>
+    <keywords>PLAN</keywords>
+    <keywords>PLI</keywords>
+    <keywords>POSITION</keywords>
+    <keywords>PRECEDING</keywords>
+    <keywords>PRECISION</keywords>     
+    <keywords>PREPARE</keywords>
+    <keywords>PRESERVE</keywords>
+    <keywords>PRIMARY</keywords>    
+    <keywords>PRIOR</keywords>
+    <keywords>PRIQTY</keywords>
+    <keywords>PRIVILEGES</keywords>
+    <keywords>PROCEDURE</keywords>
+    <keywords>PROGRAM</keywords>    
+    <keywords>PROTOCOL</keywords>
+    <keywords>PUBLIC</keywords>
+    <keywords>QUERY</keywords>
+    <keywords>QUERYNO</keywords>    
+    <keywords>RANGE</keywords>    
+    <keywords>READ</keywords>
+    <keywords>READS</keywords>
+    <keywords>REAL</keywords>
+    <keywords>RECOMMEND</keywords>    
+    <keywords>RECOVERY</keywords>    
+    <keywords>REF</keywords>
+    <keywords>REFERENCE</keywords>
+    <keywords>REFERENCES</keywords>
+    <keywords>REFERENCING</keywords>
+    <keywords>REFRESH</keywords>
+    <keywords>REGISTERS</keywords>    
+    <keywords>RELATIVE</keywords>
+    <keywords>RELEASE</keywords>    
+    <keywords>RENAME</keywords>
+    <keywords>REPEATABLE</keywords>
+    <keywords>REPEAT</keywords>    
+    <keywords>REPLACE</keywords>
+    <keywords>REPLICATED</keywords>
+    <keywords>RESET</keywords>
+    <keywords>RESIDENT</keywords>
+    <keywords>RESIGNAL</keywords>    
+    <keywords>RESOLVE</keywords>
+    <keywords>RESTART</keywords>
+    <keywords>RESTORE</keywords>
+    <keywords>RESTRICT</keywords>
+    <keywords>RESULT</keywords>
+    <keywords>RESULT_SET_LOCATOR</keywords>    
+    <keywords>RETURNED_SQLSTATE</keywords>
+    <keywords>RETAIN</keywords>
+    <keywords>RETURN</keywords>
+    <keywords>RETURNS</keywords>
+    <keywords>RETURN_STATUS</keywords>   
+    <keywords>REVOKE</keywords>
+    <keywords>RIGHT</keywords>
+    <keywords>ROLLBACK</keywords>
+    <keywords>ROLLUP</keywords>
+    <keywords>ROUTINE</keywords>
+    <keywords>ROW</keywords>
+    <keywords>ROW_COUNT</keywords>
+    <keywords>ROWID</keywords>
+    <keywords>ROWS</keywords>
+    <keywords>RUN</keywords>
+    <keywords>S</keywords>    
+    <keywords>SAVEPOINT</keywords>
+    <keywords>SBCS</keywords>
+    <keywords>SCALE</keywords>    
+    <keywords>SCHEMA</keywords>    
+    <keywords>SCOPE</keywords>
+    <keywords>SCRATCHPAD</keywords>
+    <keywords>SCROLL</keywords>
+    <keywords>SEARCH</keywords>
+    <keywords>SECOND</keywords>
+    <keywords>SECONDS</keywords>
+    <keywords>SECQTY</keywords>
+    <keywords>SECTION</keywords>
+    <keywords>SELECT</keywords>    
+    <keywords>SELECTIVITY</keywords>
+    <keywords>SELF</keywords>
+    <keywords>SEQUENCE</keywords>
+    <keywords>SERIALIZABLE</keywords>
+    <keywords>SERVER</keywords>
+    <keywords>SERVER_NAME</keywords>
+    <keywords>SESSION</keywords>
+    <keywords>SESSION_USER</keywords>
+    <keywords>SET</keywords>
+    <keywords>SETS</keywords>    
+    <keywords>SHARE</keywords>
+    <keywords>SHRLEVEL</keywords>
+    <keywords>SIGNAL</keywords>
+    <keywords>SIMPLE</keywords>
+    <keywords>SIZE</keywords>
+    <keywords>SMALLINT</keywords>
+    <keywords>SNAPSHOT</keywords>
+    <keywords>SOME</keywords>
+    <keywords>SOURCE</keywords>
+    <keywords>SPACE</keywords>
+    <keywords>SPECIAL</keywords>
+    <keywords>SPECIFIC</keywords>    
+    <keywords>SQL</keywords>
+    <keywords>SQLCODE</keywords>
+    <keywords>SQLERROR</keywords>
+    <keywords>SQLEXCEPTION</keywords>
+    <keywords>SQLWARNING</keywords>
+    <keywords>SQLID</keywords>    
+    <keywords>SQLSTATE</keywords>    
+    <keywords>START</keywords>
+    <keywords>STATE</keywords>
+    <keywords>STATEMENT</keywords>    
+    <keywords>STATISTICS</keywords>
+    <keywords>STAY</keywords>
+    <keywords>STOGROUP</keywords>
+    <keywords>STORAGE</keywords>
+    <keywords>STORED</keywords>
+    <keywords>STYLE</keywords>
+    <keywords>SUB</keywords>    
+    <keywords>SUBSTRING</keywords>
+    <keywords>SUMMARY</keywords>
+    <keywords>SWITCH</keywords>
+    <keywords>SYNONYM</keywords>
+    <keywords>SYSTEM</keywords>
+    <keywords>SYSTEM_USER</keywords>
+    <keywords>TABLE</keywords>
+    <keywords>TABLES</keywords>
+    <keywords>TABLE_NAME</keywords>
+    <keywords>TABLESPACE</keywords>
+    <keywords>TABLESPACES</keywords>    
+    <keywords>TEMPLATE</keywords>
+    <keywords>TEMPORARY</keywords>
+    <keywords>THEN</keywords>
+    <keywords>THREADSAFE</keywords>    
+    <keywords>TIME</keywords>
+    <keywords>TIMESTAMP</keywords>
+    <keywords>TIMEZONE</keywords>
+    <keywords>TIMEZONE_HOUR</keywords>
+    <keywords>TIMEZONE_MINUTE</keywords>
+    <keywords>TO</keywords>
+    <keywords>TRAILING</keywords>
+    <keywords>TRANSACTION</keywords>    
+    <keywords>TRANSFORM</keywords>    
+    <keywords>TRANSLATE</keywords>
+    <keywords>TRANSLATION</keywords>
+    <keywords>TREAT</keywords>
+    <keywords>TRIGGER</keywords>
+    <keywords>TRIM</keywords>
+    <keywords>TRUE</keywords>
+    <keywords>TYPE</keywords>
+    <keywords>UNBOUNDED</keywords>    
+    <keywords>UNCOMMITTED</keywords>
+    <keywords>UNDER</keywords>
+    <keywords>UNDO</keywords>
+    <keywords>UNICODE</keywords>
+    <keywords>UNION</keywords>
+    <keywords>UNIQUE</keywords>
+    <keywords>UNKNOWN</keywords>    
+    <keywords>UNTIL</keywords>    
+    <keywords>UPDATE</keywords>
+    <keywords>UPPER</keywords>
+    <keywords>URL</keywords>
+    <keywords>USA</keywords>
+    <keywords>USE</keywords>
+    <keywords>USAGE</keywords>
+    <keywords>USER</keywords>
+    <keywords>USING</keywords>
+    <keywords>VALUE</keywords>
+    <keywords>VALUES</keywords>
+    <keywords>VARCHAR</keywords>
+    <keywords>VARGRAPHIC</keywords>
+    <keywords>VARIANT</keywords>
+    <keywords>VARYING</keywords>
+    <keywords>VCAT</keywords>
+    <keywords>VERSION</keywords>
+    <keywords>VIEW</keywords>
+    <keywords>VOLATILE</keywords>
+    <keywords>WHEN</keywords>
+    <keywords>WHENEVER</keywords>
+    <keywords>WHERE</keywords>
+    <keywords>WHILE</keywords>
+    <keywords>WITH</keywords>
+    <keywords>WITHOUT</keywords>
+    <keywords>WORK</keywords>
+    <keywords>WRAPPER</keywords>
+    <keywords>WRITE</keywords>
+    <keywords>YEAR</keywords>
+    <keywords>YEARS</keywords>
+    <keywords>YES</keywords>    
+    <keywords>ZONE</keywords>
+    <operators>&lt;</operators>
+    <operators>&quot;</operators>
+    <operators>%</operators>
+    <operators>&amp;</operators>
+    <operators>''''</operators>
+    <operators>(</operators>
+    <operators>)</operators>
+    <operators>*</operators>
+    <operators>+</operators>
+    <operators>,</operators>
+    <operators>-</operators>
+    <operators>.</operators>
+    <operators>/</operators>
+    <operators>:</operators>
+    <operators>;</operators>
+    <operators>=</operators>
+    <operators>?</operators>
+    <operators>[</operators>
+    <operators>]</operators>
+    <operators>_</operators>
+    <operators>'|'</operators>
+    <operators>,=</operators>
+    <operators>&lt;=</operators>
+    <operators>||</operators>
+    <operators>..</operators>
+    <operators>'-,'</operators>
+    <operators>!</operators>
+    <operators>~</operators>
+    <operators>:=</operators>
+    <operators>{</operators>
+    <operators>}</operators>
+    <operators>(+)</operators>
+  </SQLSyntaxDefinition>
+</DBDefinition:DatabaseVendorDefinition>
diff --git "a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/runtime/vendors/DB2 UDB zSeries_8/DB2 UDB zSeries_8 \050Compatibility Mode\051.xmi" "b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/runtime/vendors/DB2 UDB zSeries_8/DB2 UDB zSeries_8 \050Compatibility Mode\051.xmi"
new file mode 100644
index 0000000..8f52179
--- /dev/null
+++ "b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/runtime/vendors/DB2 UDB zSeries_8/DB2 UDB zSeries_8 \050Compatibility Mode\051.xmi"
@@ -0,0 +1,876 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="DB2 UDB zSeries" version="8 (Compatibility Mode)" maximumIdentifierLength="8" maximumCommentLength="64" aliasSupported="true" synonymSupported="true" authorizationIdentifierSupported="true" userDefinedTypeSupported="true" packageSupported="true">
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="BYTE" defaultLength="1024" maximumLength="2147483647" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_1" lengthSupported="true" defaultLength="1" maximumLength="127" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>GRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_1" lengthSupported="true" defaultLength="32" maximumLength="16352" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARGRAPHIC</name>
+    <name>VARG</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_2" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARGRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="255" primitiveType="CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR</name>
+    <name>CHARACTER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="BYTE" defaultLength="1024" maximumLength="2147483647" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CLOB</name>
+    <name>CHARACTER LARGE OBJECT</name>
+    <name>CHAR LARGE OBJECT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="DOUBLE_BYTE" defaultLength="1024" maximumLength="1073741823" primitiveType="NATIONAL_CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DBCLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" defaultLength="32" keyConstraintSupported="true" maximumLength="32704" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR</name>
+    <name>CHARACTER VARYING</name>
+    <name>CHAR VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_2" primitiveType="CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" identitySupported="true" scaleSupported="true" precisionSupported="true" defaultPrecision="5" maximumPrecision="31" defaultScale="0" keyConstraintSupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" precisionSupported="true" keyConstraintSupported="true" primitiveType="FLOAT" defaultPrecision="53" maximumPrecision="53" cutoffPrecision="22" jdbcEnumType="6" javaClassName="double">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INTEGER</name>
+    <name>INT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" identitySupported="true" scaleSupported="true" precisionSupported="true" defaultPrecision="5" maximumPrecision="31" defaultScale="0" keyConstraintSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+    <name>NUM</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIME_1" keyConstraintSupported="true" primitiveType="TIME" jdbcEnumType="92" javaClassName="java.sql.Time">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP</name>
+    <name>TIMESTMP</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_2" keyConstraintSupported="true" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>ROWID</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" lengthSupported="true" defaultLength="1" displayNameSupported="true" displayName="CHAR ({0}) FOR BIT DATA" keyConstraintSupported="true" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR FOR BIT DATA</name>
+    <name>CHARACTER FOR BIT DATA</name>
+    <name>CHAR () FOR BIT DATA</name>
+    <name>CHARACTER () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_1" lengthSupported="true" defaultLength="1" displayNameSupported="true" displayName="VARCHAR ({0}) FOR BIT DATA" keyConstraintSupported="true" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR FOR BIT DATA</name>
+    <name>CHARACTER VARYING FOR BIT DATA</name>
+    <name>CHAR VARYING FOR BIT DATA</name>
+    <name>VARCHAR () FOR BIT DATA</name>
+    <name>CHARACTER VARYING () FOR BIT DATA</name>
+    <name>CHAR VARYING () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <tableSpaceDefinition maximumIdentifierLength="8" >
+    <tableSpaceType>REGULAR</tableSpaceType>
+    <tableSpaceType>LOB</tableSpaceType>
+    <tableSpaceType>LARGE</tableSpaceType>
+  </tableSpaceDefinition>
+  <storedProcedureDefinition maximumIdentifierLength="128" parameterStyleSupported="true">
+    <parameterStyle>DB2SQL</parameterStyle>
+    <parameterStyle>GENERAL</parameterStyle>
+    <parameterStyle>GENERAL_WITH_NULLS</parameterStyle>
+    <parameterStyle>JAVA</parameterStyle>
+    <languageType>SQL</languageType>
+    <languageType>JAVA</languageType>
+    <languageType>C</languageType>
+    <languageType>COBOL</languageType>
+    <languageType>ASSEMBLY</languageType>
+    <languageType>PLI</languageType>
+    <functionLanguageType>SQL</functionLanguageType>
+    <functionLanguageType>JAVA</functionLanguageType>
+    <functionLanguageType>C</functionLanguageType>
+    <functionLanguageType>ASSEMBLY</functionLanguageType>
+    <functionLanguageType>COBOL</functionLanguageType>
+    <functionLanguageType>PLI</functionLanguageType>
+  </storedProcedureDefinition>
+  <columnDefinition maximumIdentifierLength="30" identitySupported="true" identityStartValueSupported="true" identityIncrementSupported="true" identityMinimumSupported="true" identityMaximumSupported="true" identityCycleSupported="true"/>
+  <constraintDefinition maximumPrimaryKeyIdentifierLength="8" maximumForeignKeyIdentifierLength="8" maximumCheckConstraintIdentifierLength="18">
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>RESTRICT</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>SET_NULL</parentDeleteDRIRuleType>
+  </constraintDefinition>
+  <sequenceDefinition predefinedDataTypeDefinitions="INTEGER_1 SMALLINT_1 DECIMAL_1" defaultDataTypeDefinition="INTEGER_1" typeEnumerationSupported="true" cacheSupported="true" orderSupported="true" noMaximumValueString="NO MAXVALUE" noMinimumValueString="NO MINVALUE" noCacheString="NO CACHE" cacheDefaultValue="20"/>
+  <triggerDefinition maximumIdentifierLength="128"/>
+  <indexDefinition maximumIdentifierLength="18" clusteringSupported="true"/>
+  <queryDefinition hostVariableMarker=":"/>
+  <viewDefinition maximumIdentifierLength="128"/>
+  <tableDefinition maximumIdentifierLength="128"/>
+  <schemaDefinition maximumIdentifierLength="128"/>
+  <privilegedElementDefinitions name="DatabaseInstance">
+  	<privilegeDefinitions name="DBADM"/>
+	<privilegeDefinitions name="DBCTRL"/>
+	<privilegeDefinitions name="DBMAINT"/>
+	<privilegeDefinitions name="CREATETAB"/>
+	<privilegeDefinitions name="CREATETS"/>
+	<privilegeDefinitions name="DISPLAYDB"/>
+	<privilegeDefinitions name="DROP"/>
+	<privilegeDefinitions name="IMAGCOPY"/>
+	<privilegeDefinitions name="LOAD"/>
+	<privilegeDefinitions name="RECOVERDB"/>
+	<privilegeDefinitions name="REORG"/>
+	<privilegeDefinitions name="REPAIR"/>
+	<privilegeDefinitions name="STARTDB"/>
+	<privilegeDefinitions name="STATS"/>
+	<privilegeDefinitions name="STOPDB"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Schema">
+  	<privilegeDefinitions name="ALTERIN"/>
+  	<privilegeDefinitions name="CREATEIN"/>
+    <privilegeDefinitions name="DROPIN"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="PersistentTable">
+  	<privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="REFERENCES" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions name="TRIGGER"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="ViewTable">
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions xmi:id="COLUMN_1" name="Column"/>
+  <privilegedElementDefinitions name="MaterializedQueryTable">
+  	<privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="REFERENCES" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions name="TRIGGER"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Routine">
+  	<privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Sequence">
+  	<privilegeDefinitions name="ALTER"/>
+  	<privilegeDefinitions name="USAGE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="UserDefinedType">
+  	<privilegeDefinitions name="USAGE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Tablespace">
+  	<privilegeDefinitions name="USE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="BufferPool">
+  	<privilegeDefinitions name="USE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="StorageGroup">
+  	<privilegeDefinitions name="USE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Package">
+    <privilegeDefinitions name="BIND"/>
+  	<privilegeDefinitions name="COPY"/>
+  	<privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="System">
+	<privilegeDefinitions name="ARCHIVE"/>
+	<privilegeDefinitions name="BINDADD"/>
+	<privilegeDefinitions name="BINDAGENT"/>
+	<privilegeDefinitions name="BSDS"/>
+	<privilegeDefinitions name="CREATEALIAS"/>
+	<privilegeDefinitions name="CREATEDBA"/>
+	<privilegeDefinitions name="CREATEDBC"/>
+	<privilegeDefinitions name="CREATESG"/>
+	<privilegeDefinitions name="CREATETMTAB"/>
+	<privilegeDefinitions name="DISPLAY"/>
+	<privilegeDefinitions name="MONITOR1"/>
+	<privilegeDefinitions name="MONITOR2"/>
+	<privilegeDefinitions name="RECOVER"/>
+	<privilegeDefinitions name="STOPALL"/>
+	<privilegeDefinitions name="STOSPACE"/>
+	<privilegeDefinitions name="SYSADM"/>
+	<privilegeDefinitions name="SYSCTRL"/>
+	<privilegeDefinitions name="SYSOPR"/>
+	<privilegeDefinitions name="TRACE"/>
+  </privilegedElementDefinitions>
+  <SQLSyntaxDefinition terminationCharacter=";">
+    <keywords>ABSOLUTE</keywords>
+    <keywords>ACCESS</keywords>
+    <keywords>ACTION</keywords>
+    <keywords>ACTIVATE</keywords>
+    <keywords>ADA</keywords>
+    <keywords>ADD</keywords>
+    <keywords>AFTER</keywords>
+    <keywords>ALIAS</keywords>
+    <keywords>ALL</keywords>
+    <keywords>ALLOCATE</keywords>
+    <keywords>ALLOW</keywords>
+    <keywords>ALTER</keywords>
+    <keywords>ALTERIN</keywords>
+    <keywords>ALWAYS</keywords>
+    <keywords>AND</keywords>
+    <keywords>ANY</keywords>
+    <keywords>APPEND</keywords>    
+    <keywords>ARE</keywords>
+    <keywords>AS</keywords>
+    <keywords>ASC</keywords>
+    <keywords>ASCII</keywords>
+    <keywords>ASSERTION</keywords>    
+    <keywords>ASSOCIATE</keywords>    
+    <keywords>ASUTIME</keywords>
+    <keywords>AT</keywords>
+    <keywords>ATOMIC</keywords>    
+    <keywords>ATTRIBUTES</keywords>
+    <keywords>AUTHORIZATION</keywords>    
+    <keywords>AUTHID</keywords>
+    <keywords>AUTOMATIC</keywords>    
+    <keywords>AVG</keywords>
+    <keywords>BEFORE</keywords>
+    <keywords>BEGIN</keywords>
+    <keywords>BETWEEN</keywords>    
+    <keywords>BINARY</keywords>
+    <keywords>BIND</keywords>
+    <keywords>BINDADD</keywords>
+    <keywords>BIT</keywords>
+    <keywords>BIT_LENGTH</keywords>
+    <keywords>BLOB</keywords>
+    <keywords>BLOCKED</keywords>
+    <keywords>BOTH</keywords>    
+    <keywords>BUFFERPOOL</keywords>
+    <keywords>BUFFERPOOLS</keywords>    
+    <keywords>BY</keywords>
+    <keywords>C</keywords>
+    <keywords>CACHE</keywords>
+    <keywords>CALL</keywords>
+    <keywords>CALLED</keywords>
+    <keywords>CALLER</keywords>
+    <keywords>CAPTURE</keywords>
+    <keywords>CARDINALITY</keywords>
+    <keywords>CASCADE</keywords>
+    <keywords>CASCADED</keywords>
+    <keywords>CASE</keywords>
+    <keywords>CAST</keywords>
+    <keywords>CATALOG</keywords>
+    <keywords>CATALOG_NAME</keywords>
+    <keywords>CHANGE</keywords>
+    <keywords>CHANGED</keywords>
+    <keywords>CHANGES</keywords>
+    <keywords>CHAR</keywords>
+    <keywords>CHAR_LENGTH</keywords>
+    <keywords>CHARACTER</keywords>
+    <keywords>CHARACTER_LENGTH</keywords>    
+    <keywords>CHECK</keywords>
+    <keywords>CHECKED</keywords>    
+    <keywords>CLIENT</keywords>
+    <keywords>CLOB</keywords>
+    <keywords>CLOSE</keywords>
+    <keywords>CLUSTER</keywords>
+    <keywords>COBOL</keywords>    
+    <keywords>COLLATE</keywords>
+    <keywords>COLLATION</keywords>     
+    <keywords>COLLECT</keywords>
+    <keywords>COLLID</keywords>
+    <keywords>COLUMN</keywords>    
+    <keywords>COMMENT</keywords>
+    <keywords>COMMIT</keywords>
+    <keywords>COMMITTED</keywords>    
+    <keywords>COMPARISONS</keywords>
+    <keywords>CONCAT</keywords>
+    <keywords>CONDITION</keywords>
+    <keywords>CONDITION_NUMBER</keywords>
+    <keywords>CONNECT</keywords>
+    <keywords>CONNECTION</keywords>    
+    <keywords>CONNECTION_NAME</keywords>    
+    <keywords>CONSERVATIVE</keywords>
+    <keywords>CONSTRAINT</keywords>    
+    <keywords>CONSTRAINTS</keywords>    
+    <keywords>CONTAINS</keywords>
+    <keywords>CONTINUE</keywords>
+    <keywords>CONTROL</keywords>
+    <keywords>CONVERT</keywords>
+    <keywords>COPY</keywords>
+    <keywords>CORRELATION</keywords>
+    <keywords>CORR</keywords>
+    <keywords>CORRESPONDING</keywords>
+    <keywords>COUNT</keywords>
+    <keywords>COUNT_BIG</keywords>
+    <keywords>CPU</keywords>
+    <keywords>C++</keywords>
+    <keywords>CREATE</keywords>
+    <keywords>CREATEIN</keywords>    
+    <keywords>CREATETAB</keywords>
+    <keywords>CROSS</keywords>
+    <keywords>CUBE</keywords>
+    <keywords>CURRENT</keywords>
+    <keywords>CURRENT_DATE</keywords>    
+    <keywords>CURRENT_PATH</keywords>    
+    <keywords>CURRENT_SCHEMA</keywords>
+    <keywords>CURRENT_SERVER</keywords>
+    <keywords>CURRENT_SQLID</keywords>
+    <keywords>CURRENT_TIME</keywords>
+    <keywords>CURRENT_TIMESTAMP</keywords>
+    <keywords>CURRENT_TIMEZONE</keywords>
+    <keywords>CURRENT_USER</keywords>    
+    <keywords>CURSOR</keywords>
+    <keywords>CURSORS</keywords>
+    <keywords>CURSOR_NAME</keywords>
+    <keywords>CYCLE</keywords>
+    <keywords>DATE</keywords>
+    <keywords>DATA</keywords>
+    <keywords>DATABASE</keywords>
+    <keywords>DATALINK</keywords>     
+    <keywords>DAY</keywords>
+    <keywords>DAYS</keywords>
+    <keywords>DB</keywords>
+    <keywords>DBADM</keywords>
+    <keywords>DBCLOB</keywords>
+    <keywords>DBINFO</keywords>
+    <keywords>DB2DARI</keywords>
+    <keywords>DB2GENRL</keywords>
+    <keywords>DB2GENERAL</keywords>    
+    <keywords>DB2SQL</keywords>
+    <keywords>DEADLOCKS</keywords>
+    <keywords>DEALLOCATE</keywords>
+    <keywords>DEC</keywords>
+    <keywords>DECIMAL</keywords>
+    <keywords>DECLARE</keywords>
+    <keywords>DEFAULT</keywords>
+    <keywords>DEFAULTS</keywords>
+    <keywords>DEFINE</keywords>
+    <keywords>DEFINITION</keywords>
+    <keywords>DEGREE</keywords>
+    <keywords>DEFER</keywords>
+    <keywords>DEFERRABLE</keywords>
+    <keywords>DEFERRED</keywords>
+    <keywords>DELETE</keywords>
+    <keywords>DESC</keywords>
+    <keywords>DESCRIBE</keywords>
+    <keywords>DESCRIPTOR</keywords>    
+    <keywords>DETERMINISTIC</keywords>    
+    <keywords>DIAGNOSTICS</keywords>
+    <keywords>DIMENSIONS</keywords>
+    <keywords>DISABLE</keywords>
+    <keywords>DISALLOW</keywords>
+    <keywords>DISCONNECT</keywords>
+    <keywords>DISPATCH</keywords>
+    <keywords>DISTINCT</keywords>    
+    <keywords>DOMAIN</keywords>
+    <keywords>DO</keywords>
+    <keywords>DOUBLE</keywords>
+    <keywords>DROP</keywords>
+    <keywords>DROPIN</keywords>    
+    <keywords>DYNAMIC</keywords>    
+    <keywords>EACH</keywords>
+    <keywords>EBCDIC</keywords>
+    <keywords>ELSE</keywords>
+    <keywords>ELSEIF</keywords>
+    <keywords>EMPTY</keywords>
+    <keywords>ENABLE</keywords>
+    <keywords>END</keywords>
+    <keywords>END-EXEC</keywords>
+    <keywords>ERASE</keywords>
+    <keywords>ESCAPE</keywords>
+    <keywords>EUR</keywords>    
+    <keywords>EVENT</keywords>
+    <keywords>EXACT</keywords>
+    <keywords>EXCEPT</keywords>
+    <keywords>EXCEPTION</keywords>
+    <keywords>EXCLUDE</keywords>
+    <keywords>EXCLUDING</keywords>
+    <keywords>EXCLUSIVE</keywords>
+    <keywords>EXEC</keywords>    
+    <keywords>EXECUTE</keywords>
+    <keywords>EXISTS</keywords>
+    <keywords>EXIT</keywords>    
+    <keywords>EXPLAIN</keywords>    
+    <keywords>EXTENDED</keywords>
+    <keywords>EXTENSION</keywords>    
+    <keywords>EXTERNAL</keywords>
+    <keywords>EXTRACT</keywords>
+    <keywords>FALSE</keywords>
+    <keywords>FEDERATED</keywords>
+    <keywords>FENCED</keywords>
+    <keywords>FETCH</keywords>
+    <keywords>FILE</keywords>    
+    <keywords>FINAL</keywords>
+    <keywords>FIRST</keywords>
+    <keywords>FLOAT</keywords>
+    <keywords>FLUSH</keywords>
+    <keywords>FOLLOWING</keywords>
+    <keywords>FOR</keywords>
+    <keywords>FORCE</keywords>
+    <keywords>FOREIGN</keywords>    
+    <keywords>FORTRAN</keywords>
+    <keywords>FOUND</keywords>
+    <keywords>FREEPAGE</keywords>
+    <keywords>FROM</keywords>
+    <keywords>FS</keywords>
+    <keywords>FULL</keywords>
+    <keywords>FUNCTION</keywords>
+    <keywords>G</keywords>
+    <keywords>GBPCACHE</keywords>
+    <keywords>GENERAL</keywords>
+    <keywords>GENERATE</keywords>
+    <keywords>GENERATED</keywords>
+    <keywords>GET</keywords>
+    <keywords>GLOBAL</keywords>
+    <keywords>GO</keywords>
+    <keywords>GOTO</keywords>
+    <keywords>GRANT</keywords>
+    <keywords>GRAPHIC</keywords>
+    <keywords>GROUP</keywords>
+    <keywords>GROUPING</keywords>
+    <keywords>HANDLER</keywords>    
+    <keywords>HAVING</keywords>      
+    <keywords>HOLD</keywords>
+    <keywords>HOUR</keywords>
+    <keywords>HOURS</keywords>
+    <keywords>IDENTITY</keywords>
+    <keywords>IF</keywords>
+    <keywords>IMMEDIATE</keywords>
+    <keywords>IMPLICIT_SCHEMA</keywords>
+    <keywords>IN</keywords>
+    <keywords>INCLUDE</keywords>
+    <keywords>INCLUDING</keywords>
+    <keywords>INCREMENT</keywords>    
+    <keywords>INDEX</keywords>
+    <keywords>INDEXES</keywords>
+    <keywords>INDICATOR</keywords>    
+    <keywords>INHERIT</keywords>
+    <keywords>INITIALLY</keywords>
+    <keywords>INITIAL_INSTS</keywords>
+    <keywords>INITIAL_IOS</keywords>    
+    <keywords>INNER</keywords>
+    <keywords>INOUT</keywords>
+    <keywords>INPUT</keywords>
+    <keywords>INSENSITIVE</keywords>
+    <keywords>INSERT</keywords>    
+    <keywords>INSTEAD</keywords>
+    <keywords>INSTS_PER_ARGBYTE</keywords>
+    <keywords>INSTS_PER_INVOC</keywords>
+    <keywords>INT</keywords>
+    <keywords>INTEGER</keywords>
+    <keywords>INTEGRITY</keywords>
+    <keywords>INTERSECT</keywords>
+    <keywords>INTERVAL</keywords>
+    <keywords>INTO</keywords>    
+    <keywords>IOS_PER_ARGBYTE</keywords>
+    <keywords>IOS_PER_INVOC</keywords>
+    <keywords>IS</keywords>
+    <keywords>ISO</keywords>
+    <keywords>ITERATE</keywords>
+    <keywords>ISOLATION</keywords>
+    <keywords>JAVA</keywords>    
+    <keywords>JIS</keywords>
+    <keywords>JOIN</keywords>
+    <keywords>K</keywords>
+    <keywords>KEY</keywords>
+    <keywords>KEYS</keywords>
+    <keywords>LANGUAGE</keywords>
+    <keywords>LARGE</keywords>
+    <keywords>LAST</keywords>
+    <keywords>LEADING</keywords>
+    <keywords>LEAVE</keywords>
+    <keywords>LEFT</keywords>
+    <keywords>LENGTH</keywords>
+    <keywords>LEVEL</keywords>
+    <keywords>LIBRARY</keywords>
+    <keywords>LIKE</keywords>
+    <keywords>LIMIT</keywords>
+    <keywords>LINK</keywords>
+    <keywords>LINKTYPE</keywords>
+    <keywords>LOAD</keywords>
+    <keywords>LOCAL</keywords>
+    <keywords>LOCATOR</keywords>
+    <keywords>LOCATORS</keywords>
+    <keywords>LOCK</keywords>
+    <keywords>LOCKS</keywords>
+    <keywords>LOCKSIZE</keywords>
+    <keywords>LOGGED</keywords>
+    <keywords>LONG</keywords>
+    <keywords>LONGVAR</keywords>
+    <keywords>LOOP</keywords>
+    <keywords>LOWER</keywords>
+    <keywords>M</keywords>
+    <keywords>MAINTAINED</keywords>    
+    <keywords>MAPPING</keywords>
+    <keywords>MATCH</keywords>
+    <keywords>MAX</keywords>    
+    <keywords>MAXVALUE</keywords>     
+    <keywords>MESSAGE_TEXT</keywords>
+    <keywords>METHOD</keywords>    
+    <keywords>MICROSECOND</keywords>
+    <keywords>MICROSECONDS</keywords>    
+    <keywords>MINUTE</keywords>
+    <keywords>MINUTES</keywords>
+    <keywords>MINVALUE</keywords>
+    <keywords>MIXED</keywords>
+    <keywords>MODE</keywords>
+    <keywords>MODIFIES</keywords>
+    <keywords>MODULE</keywords>
+    <keywords>MONITOR</keywords>
+    <keywords>MONTH</keywords>
+    <keywords>MONTHS</keywords>
+    <keywords>MORE</keywords>    
+    <keywords>NAMED</keywords>
+    <keywords>NAMES</keywords>
+    <keywords>NATIONAL</keywords>
+    <keywords>NATURAL</keywords>
+    <keywords>NCHAR</keywords>
+    <keywords>NEW</keywords>
+    <keywords>NEW_TABLE</keywords>
+    <keywords>NEXT</keywords>
+    <keywords>NEXTVAL</keywords>
+    <keywords>NICKNAME</keywords>
+    <keywords>NO</keywords>
+    <keywords>NOCACHE</keywords>
+    <keywords>NOCYCLE</keywords>
+    <keywords>NODE</keywords>    
+    <keywords>NOMAXVALUE</keywords>
+    <keywords>NOMINVALUE</keywords>    
+    <keywords>NONE</keywords>
+    <keywords>NOORDER</keywords>
+    <keywords>NOT</keywords>
+    <keywords>NULL</keywords>
+    <keywords>NULLABLE</keywords>    
+    <keywords>NULLS</keywords>    
+    <keywords>NUMBER</keywords>
+    <keywords>NUMERIC</keywords>    
+    <keywords>OBJECT</keywords>
+    <keywords>OF</keywords>
+    <keywords>OFF</keywords>
+    <keywords>OLD</keywords>
+    <keywords>OLD_TABLE</keywords>
+    <keywords>OLE</keywords>
+    <keywords>OLEDB</keywords>
+    <keywords>ON</keywords>
+    <keywords>ONCE</keywords>
+    <keywords>ONLINE</keywords>
+    <keywords>ONLY</keywords>
+    <keywords>OPEN</keywords>
+    <keywords>OPTIMIZATION</keywords>
+    <keywords>OPTIMIZE</keywords>
+    <keywords>OPTION</keywords>
+    <keywords>OPTIONS</keywords>
+    <keywords>OR</keywords>
+    <keywords>ORDER</keywords>
+    <keywords>OUT</keywords>
+    <keywords>OUTER</keywords>
+    <keywords>OUTPUT</keywords>
+    <keywords>OVER</keywords>    
+    <keywords>OVERLAPS</keywords>    
+    <keywords>PACKAGE</keywords>
+    <keywords>PAD</keywords>    
+    <keywords>PARTIAL</keywords>
+    <keywords>PARALLEL</keywords>    
+    <keywords>PARAMETER</keywords>
+    <keywords>PASCAL</keywords>
+    <keywords>PASSTHRU</keywords>
+    <keywords>PASSWORD</keywords>
+    <keywords>PATH</keywords>
+    <keywords>PARTITION</keywords>
+    <keywords>PARTITIONING</keywords>    
+    <keywords>PCTFREE</keywords>    
+    <keywords>PERCENT_ARGBYTES</keywords>
+    <keywords>PERMISSION</keywords>
+    <keywords>PIECESIZE</keywords>
+    <keywords>PIPE</keywords>
+    <keywords>PLAN</keywords>
+    <keywords>PLI</keywords>
+    <keywords>POSITION</keywords>
+    <keywords>PRECEDING</keywords>
+    <keywords>PRECISION</keywords>     
+    <keywords>PREPARE</keywords>
+    <keywords>PRESERVE</keywords>
+    <keywords>PRIMARY</keywords>    
+    <keywords>PRIOR</keywords>
+    <keywords>PRIQTY</keywords>
+    <keywords>PRIVILEGES</keywords>
+    <keywords>PROCEDURE</keywords>
+    <keywords>PROGRAM</keywords>    
+    <keywords>PROTOCOL</keywords>
+    <keywords>PUBLIC</keywords>
+    <keywords>QUERY</keywords>
+    <keywords>QUERYNO</keywords>    
+    <keywords>RANGE</keywords>    
+    <keywords>READ</keywords>
+    <keywords>READS</keywords>
+    <keywords>REAL</keywords>
+    <keywords>RECOMMEND</keywords>    
+    <keywords>RECOVERY</keywords>    
+    <keywords>REF</keywords>
+    <keywords>REFERENCE</keywords>
+    <keywords>REFERENCES</keywords>
+    <keywords>REFERENCING</keywords>
+    <keywords>REFRESH</keywords>
+    <keywords>REGISTERS</keywords>    
+    <keywords>RELATIVE</keywords>
+    <keywords>RELEASE</keywords>    
+    <keywords>RENAME</keywords>
+    <keywords>REPEATABLE</keywords>
+    <keywords>REPEAT</keywords>    
+    <keywords>REPLACE</keywords>
+    <keywords>REPLICATED</keywords>
+    <keywords>RESET</keywords>
+    <keywords>RESIDENT</keywords>
+    <keywords>RESIGNAL</keywords>    
+    <keywords>RESOLVE</keywords>
+    <keywords>RESTART</keywords>
+    <keywords>RESTORE</keywords>
+    <keywords>RESTRICT</keywords>
+    <keywords>RESULT</keywords>
+    <keywords>RESULT_SET_LOCATOR</keywords>    
+    <keywords>RETURNED_SQLSTATE</keywords>
+    <keywords>RETAIN</keywords>
+    <keywords>RETURN</keywords>
+    <keywords>RETURNS</keywords>
+    <keywords>RETURN_STATUS</keywords>   
+    <keywords>REVOKE</keywords>
+    <keywords>RIGHT</keywords>
+    <keywords>ROLLBACK</keywords>
+    <keywords>ROLLUP</keywords>
+    <keywords>ROUTINE</keywords>
+    <keywords>ROW</keywords>
+    <keywords>ROW_COUNT</keywords>
+    <keywords>ROWID</keywords>
+    <keywords>ROWS</keywords>
+    <keywords>RUN</keywords>
+    <keywords>S</keywords>    
+    <keywords>SAVEPOINT</keywords>
+    <keywords>SBCS</keywords>
+    <keywords>SCALE</keywords>    
+    <keywords>SCHEMA</keywords>    
+    <keywords>SCOPE</keywords>
+    <keywords>SCRATCHPAD</keywords>
+    <keywords>SCROLL</keywords>
+    <keywords>SEARCH</keywords>
+    <keywords>SECOND</keywords>
+    <keywords>SECONDS</keywords>
+    <keywords>SECQTY</keywords>
+    <keywords>SECTION</keywords>
+    <keywords>SELECT</keywords>    
+    <keywords>SELECTIVITY</keywords>
+    <keywords>SELF</keywords>
+    <keywords>SEQUENCE</keywords>
+    <keywords>SERIALIZABLE</keywords>
+    <keywords>SERVER</keywords>
+    <keywords>SERVER_NAME</keywords>
+    <keywords>SESSION</keywords>
+    <keywords>SESSION_USER</keywords>
+    <keywords>SET</keywords>
+    <keywords>SETS</keywords>    
+    <keywords>SHARE</keywords>
+    <keywords>SHRLEVEL</keywords>
+    <keywords>SIGNAL</keywords>
+    <keywords>SIMPLE</keywords>
+    <keywords>SIZE</keywords>
+    <keywords>SMALLINT</keywords>
+    <keywords>SNAPSHOT</keywords>
+    <keywords>SOME</keywords>
+    <keywords>SOURCE</keywords>
+    <keywords>SPACE</keywords>
+    <keywords>SPECIAL</keywords>
+    <keywords>SPECIFIC</keywords>    
+    <keywords>SQL</keywords>
+    <keywords>SQLCODE</keywords>
+    <keywords>SQLERROR</keywords>
+    <keywords>SQLEXCEPTION</keywords>
+    <keywords>SQLWARNING</keywords>
+    <keywords>SQLID</keywords>    
+    <keywords>SQLSTATE</keywords>    
+    <keywords>START</keywords>
+    <keywords>STATE</keywords>
+    <keywords>STATEMENT</keywords>    
+    <keywords>STATISTICS</keywords>
+    <keywords>STAY</keywords>
+    <keywords>STOGROUP</keywords>
+    <keywords>STORAGE</keywords>
+    <keywords>STORED</keywords>
+    <keywords>STYLE</keywords>
+    <keywords>SUB</keywords>    
+    <keywords>SUBSTRING</keywords>
+    <keywords>SUMMARY</keywords>
+    <keywords>SWITCH</keywords>
+    <keywords>SYNONYM</keywords>
+    <keywords>SYSTEM</keywords>
+    <keywords>SYSTEM_USER</keywords>
+    <keywords>TABLE</keywords>
+    <keywords>TABLES</keywords>
+    <keywords>TABLE_NAME</keywords>
+    <keywords>TABLESPACE</keywords>
+    <keywords>TABLESPACES</keywords>    
+    <keywords>TEMPLATE</keywords>
+    <keywords>TEMPORARY</keywords>
+    <keywords>THEN</keywords>
+    <keywords>THREADSAFE</keywords>    
+    <keywords>TIME</keywords>
+    <keywords>TIMESTAMP</keywords>
+    <keywords>TIMEZONE</keywords>
+    <keywords>TIMEZONE_HOUR</keywords>
+    <keywords>TIMEZONE_MINUTE</keywords>
+    <keywords>TO</keywords>
+    <keywords>TRAILING</keywords>
+    <keywords>TRANSACTION</keywords>    
+    <keywords>TRANSFORM</keywords>    
+    <keywords>TRANSLATE</keywords>
+    <keywords>TRANSLATION</keywords>
+    <keywords>TREAT</keywords>
+    <keywords>TRIGGER</keywords>
+    <keywords>TRIM</keywords>
+    <keywords>TRUE</keywords>
+    <keywords>TYPE</keywords>
+    <keywords>UNBOUNDED</keywords>    
+    <keywords>UNCOMMITTED</keywords>
+    <keywords>UNDER</keywords>
+    <keywords>UNDO</keywords>
+    <keywords>UNICODE</keywords>
+    <keywords>UNION</keywords>
+    <keywords>UNIQUE</keywords>
+    <keywords>UNKNOWN</keywords>    
+    <keywords>UNTIL</keywords>    
+    <keywords>UPDATE</keywords>
+    <keywords>UPPER</keywords>
+    <keywords>URL</keywords>
+    <keywords>USA</keywords>
+    <keywords>USE</keywords>
+    <keywords>USAGE</keywords>
+    <keywords>USER</keywords>
+    <keywords>USING</keywords>
+    <keywords>VALUE</keywords>
+    <keywords>VALUES</keywords>
+    <keywords>VARCHAR</keywords>
+    <keywords>VARGRAPHIC</keywords>
+    <keywords>VARIANT</keywords>
+    <keywords>VARYING</keywords>
+    <keywords>VCAT</keywords>
+    <keywords>VERSION</keywords>
+    <keywords>VIEW</keywords>
+    <keywords>VOLATILE</keywords>
+    <keywords>WHEN</keywords>
+    <keywords>WHENEVER</keywords>
+    <keywords>WHERE</keywords>
+    <keywords>WHILE</keywords>
+    <keywords>WITH</keywords>
+    <keywords>WITHOUT</keywords>
+    <keywords>WORK</keywords>
+    <keywords>WRAPPER</keywords>
+    <keywords>WRITE</keywords>
+    <keywords>YEAR</keywords>
+    <keywords>YEARS</keywords>
+    <keywords>YES</keywords>    
+    <keywords>ZONE</keywords>
+    <operators>&lt;</operators>
+    <operators>&quot;</operators>
+    <operators>%</operators>
+    <operators>&amp;</operators>
+    <operators>''''</operators>
+    <operators>(</operators>
+    <operators>)</operators>
+    <operators>*</operators>
+    <operators>+</operators>
+    <operators>,</operators>
+    <operators>-</operators>
+    <operators>.</operators>
+    <operators>/</operators>
+    <operators>:</operators>
+    <operators>;</operators>
+    <operators>=</operators>
+    <operators>?</operators>
+    <operators>[</operators>
+    <operators>]</operators>
+    <operators>_</operators>
+    <operators>'|'</operators>
+    <operators>,=</operators>
+    <operators>&lt;=</operators>
+    <operators>||</operators>
+    <operators>..</operators>
+    <operators>'-,'</operators>
+    <operators>!</operators>
+    <operators>~</operators>
+    <operators>:=</operators>
+    <operators>{</operators>
+    <operators>}</operators>
+    <operators>(+)</operators>
+  </SQLSyntaxDefinition>
+</DBDefinition:DatabaseVendorDefinition>
diff --git "a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/runtime/vendors/DB2 UDB zSeries_8/DB2 UDB zSeries_8 \050New-Function Mode\051.xmi" "b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/runtime/vendors/DB2 UDB zSeries_8/DB2 UDB zSeries_8 \050New-Function Mode\051.xmi"
new file mode 100644
index 0000000..e890de9
--- /dev/null
+++ "b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/runtime/vendors/DB2 UDB zSeries_8/DB2 UDB zSeries_8 \050New-Function Mode\051.xmi"
@@ -0,0 +1,874 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="DB2 UDB zSeries" version="8 (New-Function Mode)" maximumIdentifierLength="8" maximumCommentLength="64" aliasSupported="true" sequenceSupported="true" mQTSupported="true" synonymSupported="true" authorizationIdentifierSupported="true" userDefinedTypeSupported="true" packageSupported="true">
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="BYTE" defaultLength="1024" maximumLength="2147483647" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_1" lengthSupported="true" defaultLength="1" maximumLength="127" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>GRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_1" lengthSupported="true" defaultLength="32" maximumLength="16352" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARGRAPHIC</name>
+    <name>VARG</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_2" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARGRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="255" primitiveType="CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR</name>
+    <name>CHARACTER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="BYTE" defaultLength="1024" maximumLength="2147483647" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CLOB</name>
+    <name>CHARACTER LARGE OBJECT</name>
+    <name>CHAR LARGE OBJECT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="DOUBLE_BYTE" defaultLength="1024" maximumLength="1073741823" primitiveType="NATIONAL_CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DBCLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" defaultLength="32" keyConstraintSupported="true" maximumLength="32704" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR</name>
+    <name>CHARACTER VARYING</name>
+    <name>CHAR VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_2" primitiveType="CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" identitySupported="true" scaleSupported="true" precisionSupported="true" defaultPrecision="5" maximumPrecision="31" defaultScale="0" keyConstraintSupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" precisionSupported="true" keyConstraintSupported="true" primitiveType="FLOAT" defaultPrecision="53" maximumPrecision="53" cutoffPrecision="22" jdbcEnumType="6" javaClassName="double">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INTEGER</name>
+    <name>INT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" identitySupported="true" scaleSupported="true" precisionSupported="true" defaultPrecision="5" maximumPrecision="31" defaultScale="0" keyConstraintSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+    <name>NUM</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIME_1" keyConstraintSupported="true" primitiveType="TIME" jdbcEnumType="92" javaClassName="java.sql.Time">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP</name>
+    <name>TIMESTMP</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_2" keyConstraintSupported="true" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>ROWID</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" lengthSupported="true" defaultLength="1" displayNameSupported="true" displayName="CHAR ({0}) FOR BIT DATA" keyConstraintSupported="true" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR FOR BIT DATA</name>
+    <name>CHARACTER FOR BIT DATA</name>
+    <name>CHAR () FOR BIT DATA</name>
+    <name>CHARACTER () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_1" lengthSupported="true" defaultLength="1" displayNameSupported="true" displayName="VARCHAR ({0}) FOR BIT DATA" keyConstraintSupported="true" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR FOR BIT DATA</name>
+    <name>CHARACTER VARYING FOR BIT DATA</name>
+    <name>CHAR VARYING FOR BIT DATA</name>
+    <name>VARCHAR () FOR BIT DATA</name>
+    <name>CHARACTER VARYING () FOR BIT DATA</name>
+    <name>CHAR VARYING () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <tableSpaceDefinition maximumIdentifierLength="8" >
+    <tableSpaceType>REGULAR</tableSpaceType>
+    <tableSpaceType>LOB</tableSpaceType>
+    <tableSpaceType>LARGE</tableSpaceType>
+  </tableSpaceDefinition>
+  <storedProcedureDefinition maximumIdentifierLength="128" parameterStyleSupported="true">
+    <parameterStyle>DB2SQL</parameterStyle>
+    <parameterStyle>GENERAL</parameterStyle>
+    <parameterStyle>GENERAL_WITH_NULLS</parameterStyle>
+    <parameterStyle>JAVA</parameterStyle>
+    <languageType>SQL</languageType>
+    <languageType>JAVA</languageType>
+    <languageType>C</languageType>
+    <languageType>COBOL</languageType>
+    <languageType>ASSEMBLY</languageType>
+    <languageType>PLI</languageType>
+    <functionLanguageType>SQL</functionLanguageType>
+    <functionLanguageType>JAVA</functionLanguageType>
+    <functionLanguageType>C</functionLanguageType>
+    <functionLanguageType>ASSEMBLY</functionLanguageType>
+    <functionLanguageType>COBOL</functionLanguageType>
+    <functionLanguageType>PLI</functionLanguageType>
+  </storedProcedureDefinition>
+  <columnDefinition maximumIdentifierLength="30" identitySupported="true" identityStartValueSupported="true" identityIncrementSupported="true" identityMinimumSupported="true" identityMaximumSupported="true" identityCycleSupported="true"/>
+  <constraintDefinition maximumPrimaryKeyIdentifierLength="128" maximumForeignKeyIdentifierLength="128" maximumCheckConstraintIdentifierLength="128">
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>RESTRICT</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>SET_NULL</parentDeleteDRIRuleType>
+  </constraintDefinition>
+  <sequenceDefinition predefinedDataTypeDefinitions="INTEGER_1 SMALLINT_1 DECIMAL_1" defaultDataTypeDefinition="INTEGER_1" typeEnumerationSupported="true" cacheSupported="true" orderSupported="true" noMaximumValueString="NO MAXVALUE" noMinimumValueString="NO MINVALUE" noCacheString="NO CACHE" cacheDefaultValue="20"/>
+  <indexDefinition maximumIdentifierLength="128" clusteringSupported="true"/>
+  <triggerDefinition maximumIdentifierLength="128"/>
+  <queryDefinition hostVariableMarker=":"/>
+  <viewDefinition maximumIdentifierLength="128"/>
+  <tableDefinition maximumIdentifierLength="128"/>
+  <schemaDefinition maximumIdentifierLength="128"/>
+  <privilegedElementDefinitions name="DatabaseInstance">
+  	<privilegeDefinitions name="DBADM"/>
+	<privilegeDefinitions name="DBCTRL"/>
+	<privilegeDefinitions name="DBMAINT"/>
+	<privilegeDefinitions name="CREATETAB"/>
+	<privilegeDefinitions name="CREATETS"/>
+	<privilegeDefinitions name="DISPLAYDB"/>
+	<privilegeDefinitions name="DROP"/>
+	<privilegeDefinitions name="IMAGCOPY"/>
+	<privilegeDefinitions name="LOAD"/>
+	<privilegeDefinitions name="RECOVERDB"/>
+	<privilegeDefinitions name="REORG"/>
+	<privilegeDefinitions name="REPAIR"/>
+	<privilegeDefinitions name="STARTDB"/>
+	<privilegeDefinitions name="STATS"/>
+	<privilegeDefinitions name="STOPDB"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Schema">
+  	<privilegeDefinitions name="ALTERIN"/>
+  	<privilegeDefinitions name="CREATEIN"/>
+    <privilegeDefinitions name="DROPIN"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="PersistentTable">
+  	<privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="REFERENCES" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions name="TRIGGER"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="ViewTable">
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions xmi:id="COLUMN_1" name="Column"/>
+  <privilegedElementDefinitions name="MaterializedQueryTable">
+  	<privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="REFERENCES" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions name="TRIGGER"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Routine">
+  	<privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Sequence">
+  	<privilegeDefinitions name="ALTER"/>
+  	<privilegeDefinitions name="USAGE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="UserDefinedType">
+  	<privilegeDefinitions name="USAGE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Tablespace">
+  	<privilegeDefinitions name="USE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="BufferPool">
+  	<privilegeDefinitions name="USE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="StorageGroup">
+  	<privilegeDefinitions name="USE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Package">
+    <privilegeDefinitions name="BIND"/>
+  	<privilegeDefinitions name="COPY"/>
+  	<privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="System">
+	<privilegeDefinitions name="ARCHIVE"/>
+	<privilegeDefinitions name="BINDADD"/>
+	<privilegeDefinitions name="BINDAGENT"/>
+	<privilegeDefinitions name="BSDS"/>
+	<privilegeDefinitions name="CREATEALIAS"/>
+	<privilegeDefinitions name="CREATEDBA"/>
+	<privilegeDefinitions name="CREATEDBC"/>
+	<privilegeDefinitions name="CREATESG"/>
+	<privilegeDefinitions name="CREATETMTAB"/>
+	<privilegeDefinitions name="DISPLAY"/>
+	<privilegeDefinitions name="MONITOR1"/>
+	<privilegeDefinitions name="MONITOR2"/>
+	<privilegeDefinitions name="RECOVER"/>
+	<privilegeDefinitions name="STOPALL"/>
+	<privilegeDefinitions name="STOSPACE"/>
+	<privilegeDefinitions name="SYSADM"/>
+	<privilegeDefinitions name="SYSCTRL"/>
+	<privilegeDefinitions name="SYSOPR"/>
+	<privilegeDefinitions name="TRACE"/>
+  </privilegedElementDefinitions>
+  <SQLSyntaxDefinition terminationCharacter=";">
+    <keywords>ABSOLUTE</keywords>
+    <keywords>ACCESS</keywords>
+    <keywords>ACTION</keywords>
+    <keywords>ACTIVATE</keywords>
+    <keywords>ADA</keywords>
+    <keywords>ADD</keywords>
+    <keywords>AFTER</keywords>
+    <keywords>ALIAS</keywords>
+    <keywords>ALL</keywords>
+    <keywords>ALLOCATE</keywords>
+    <keywords>ALLOW</keywords>
+    <keywords>ALTER</keywords>
+    <keywords>ALTERIN</keywords>
+    <keywords>ALWAYS</keywords>
+    <keywords>AND</keywords>
+    <keywords>ANY</keywords>
+    <keywords>APPEND</keywords>    
+    <keywords>ARE</keywords>
+    <keywords>AS</keywords>
+    <keywords>ASC</keywords>
+    <keywords>ASCII</keywords>
+    <keywords>ASSERTION</keywords>    
+    <keywords>ASSOCIATE</keywords>    
+    <keywords>ASUTIME</keywords>
+    <keywords>AT</keywords>
+    <keywords>ATOMIC</keywords>    
+    <keywords>ATTRIBUTES</keywords>
+    <keywords>AUTHORIZATION</keywords>    
+    <keywords>AUTHID</keywords>
+    <keywords>AUTOMATIC</keywords>    
+    <keywords>AVG</keywords>
+    <keywords>BEFORE</keywords>
+    <keywords>BEGIN</keywords>
+    <keywords>BETWEEN</keywords>    
+    <keywords>BINARY</keywords>
+    <keywords>BIND</keywords>
+    <keywords>BINDADD</keywords>
+    <keywords>BIT</keywords>
+    <keywords>BIT_LENGTH</keywords>
+    <keywords>BLOB</keywords>
+    <keywords>BLOCKED</keywords>
+    <keywords>BOTH</keywords>    
+    <keywords>BUFFERPOOL</keywords>
+    <keywords>BUFFERPOOLS</keywords>    
+    <keywords>BY</keywords>
+    <keywords>C</keywords>
+    <keywords>CACHE</keywords>
+    <keywords>CALL</keywords>
+    <keywords>CALLED</keywords>
+    <keywords>CALLER</keywords>
+    <keywords>CAPTURE</keywords>
+    <keywords>CARDINALITY</keywords>
+    <keywords>CASCADE</keywords>
+    <keywords>CASCADED</keywords>
+    <keywords>CASE</keywords>
+    <keywords>CAST</keywords>
+    <keywords>CATALOG</keywords>
+    <keywords>CATALOG_NAME</keywords>
+    <keywords>CHANGE</keywords>
+    <keywords>CHANGED</keywords>
+    <keywords>CHANGES</keywords>
+    <keywords>CHAR</keywords>
+    <keywords>CHAR_LENGTH</keywords>
+    <keywords>CHARACTER</keywords>
+    <keywords>CHARACTER_LENGTH</keywords>    
+    <keywords>CHECK</keywords>
+    <keywords>CHECKED</keywords>    
+    <keywords>CLIENT</keywords>
+    <keywords>CLOB</keywords>
+    <keywords>CLOSE</keywords>
+    <keywords>CLUSTER</keywords>
+    <keywords>COBOL</keywords>    
+    <keywords>COLLATE</keywords>
+    <keywords>COLLATION</keywords>     
+    <keywords>COLLECT</keywords>
+    <keywords>COLLID</keywords>
+    <keywords>COLUMN</keywords>    
+    <keywords>COMMENT</keywords>
+    <keywords>COMMIT</keywords>
+    <keywords>COMMITTED</keywords>    
+    <keywords>COMPARISONS</keywords>
+    <keywords>CONCAT</keywords>
+    <keywords>CONDITION</keywords>
+    <keywords>CONDITION_NUMBER</keywords>
+    <keywords>CONNECT</keywords>
+    <keywords>CONNECTION</keywords>    
+    <keywords>CONNECTION_NAME</keywords>    
+    <keywords>CONSERVATIVE</keywords>
+    <keywords>CONSTRAINT</keywords>    
+    <keywords>CONSTRAINTS</keywords>    
+    <keywords>CONTAINS</keywords>
+    <keywords>CONTINUE</keywords>
+    <keywords>CONTROL</keywords>
+    <keywords>CONVERT</keywords>
+    <keywords>COPY</keywords>
+    <keywords>CORRELATION</keywords>
+    <keywords>CORR</keywords>
+    <keywords>CORRESPONDING</keywords>
+    <keywords>COUNT</keywords>
+    <keywords>COUNT_BIG</keywords>
+    <keywords>CPU</keywords>
+    <keywords>C++</keywords>
+    <keywords>CREATE</keywords>
+    <keywords>CREATEIN</keywords>    
+    <keywords>CREATETAB</keywords>
+    <keywords>CROSS</keywords>
+    <keywords>CUBE</keywords>
+    <keywords>CURRENT</keywords>
+    <keywords>CURRENT_DATE</keywords>    
+    <keywords>CURRENT_PATH</keywords>    
+    <keywords>CURRENT_SCHEMA</keywords>
+    <keywords>CURRENT_SERVER</keywords>
+    <keywords>CURRENT_SQLID</keywords>
+    <keywords>CURRENT_TIME</keywords>
+    <keywords>CURRENT_TIMESTAMP</keywords>
+    <keywords>CURRENT_TIMEZONE</keywords>
+    <keywords>CURRENT_USER</keywords>    
+    <keywords>CURSOR</keywords>
+    <keywords>CURSORS</keywords>
+    <keywords>CURSOR_NAME</keywords>
+    <keywords>CYCLE</keywords>
+    <keywords>DATE</keywords>
+    <keywords>DATA</keywords>
+    <keywords>DATABASE</keywords>
+    <keywords>DATALINK</keywords>     
+    <keywords>DAY</keywords>
+    <keywords>DAYS</keywords>
+    <keywords>DB</keywords>
+    <keywords>DBADM</keywords>
+    <keywords>DBCLOB</keywords>
+    <keywords>DBINFO</keywords>
+    <keywords>DB2DARI</keywords>
+    <keywords>DB2GENRL</keywords>
+    <keywords>DB2GENERAL</keywords>    
+    <keywords>DB2SQL</keywords>
+    <keywords>DEADLOCKS</keywords>
+    <keywords>DEALLOCATE</keywords>
+    <keywords>DEC</keywords>
+    <keywords>DECIMAL</keywords>
+    <keywords>DECLARE</keywords>
+    <keywords>DEFAULT</keywords>
+    <keywords>DEFAULTS</keywords>
+    <keywords>DEFINE</keywords>
+    <keywords>DEFINITION</keywords>
+    <keywords>DEGREE</keywords>
+    <keywords>DEFER</keywords>
+    <keywords>DEFERRABLE</keywords>
+    <keywords>DEFERRED</keywords>
+    <keywords>DELETE</keywords>
+    <keywords>DESC</keywords>
+    <keywords>DESCRIBE</keywords>
+    <keywords>DESCRIPTOR</keywords>    
+    <keywords>DETERMINISTIC</keywords>    
+    <keywords>DIAGNOSTICS</keywords>
+    <keywords>DIMENSIONS</keywords>
+    <keywords>DISABLE</keywords>
+    <keywords>DISALLOW</keywords>
+    <keywords>DISCONNECT</keywords>
+    <keywords>DISPATCH</keywords>
+    <keywords>DISTINCT</keywords>    
+    <keywords>DOMAIN</keywords>
+    <keywords>DO</keywords>
+    <keywords>DOUBLE</keywords>
+    <keywords>DROP</keywords>
+    <keywords>DROPIN</keywords>    
+    <keywords>DYNAMIC</keywords>    
+    <keywords>EACH</keywords>
+    <keywords>EBCDIC</keywords>
+    <keywords>ELSE</keywords>
+    <keywords>ELSEIF</keywords>
+    <keywords>EMPTY</keywords>
+    <keywords>ENABLE</keywords>
+    <keywords>END</keywords>
+    <keywords>END-EXEC</keywords>
+    <keywords>ERASE</keywords>
+    <keywords>ESCAPE</keywords>
+    <keywords>EUR</keywords>    
+    <keywords>EVENT</keywords>
+    <keywords>EXACT</keywords>
+    <keywords>EXCEPT</keywords>
+    <keywords>EXCEPTION</keywords>
+    <keywords>EXCLUDE</keywords>
+    <keywords>EXCLUDING</keywords>
+    <keywords>EXCLUSIVE</keywords>
+    <keywords>EXEC</keywords>    
+    <keywords>EXECUTE</keywords>
+    <keywords>EXISTS</keywords>
+    <keywords>EXIT</keywords>    
+    <keywords>EXPLAIN</keywords>    
+    <keywords>EXTENDED</keywords>
+    <keywords>EXTENSION</keywords>    
+    <keywords>EXTERNAL</keywords>
+    <keywords>EXTRACT</keywords>
+    <keywords>FALSE</keywords>
+    <keywords>FEDERATED</keywords>
+    <keywords>FENCED</keywords>
+    <keywords>FETCH</keywords>
+    <keywords>FILE</keywords>    
+    <keywords>FINAL</keywords>
+    <keywords>FIRST</keywords>
+    <keywords>FLOAT</keywords>
+    <keywords>FLUSH</keywords>
+    <keywords>FOLLOWING</keywords>
+    <keywords>FOR</keywords>
+    <keywords>FORCE</keywords>
+    <keywords>FOREIGN</keywords>    
+    <keywords>FORTRAN</keywords>
+    <keywords>FOUND</keywords>
+    <keywords>FREEPAGE</keywords>
+    <keywords>FROM</keywords>
+    <keywords>FS</keywords>
+    <keywords>FULL</keywords>
+    <keywords>FUNCTION</keywords>
+    <keywords>G</keywords>
+    <keywords>GBPCACHE</keywords>
+    <keywords>GENERAL</keywords>
+    <keywords>GENERATE</keywords>
+    <keywords>GENERATED</keywords>
+    <keywords>GET</keywords>
+    <keywords>GLOBAL</keywords>
+    <keywords>GO</keywords>
+    <keywords>GOTO</keywords>
+    <keywords>GRANT</keywords>
+    <keywords>GRAPHIC</keywords>
+    <keywords>GROUP</keywords>
+    <keywords>GROUPING</keywords>
+    <keywords>HANDLER</keywords>    
+    <keywords>HAVING</keywords>      
+    <keywords>HOLD</keywords>
+    <keywords>HOUR</keywords>
+    <keywords>HOURS</keywords>
+    <keywords>IDENTITY</keywords>
+    <keywords>IF</keywords>
+    <keywords>IMMEDIATE</keywords>
+    <keywords>IMPLICIT_SCHEMA</keywords>
+    <keywords>IN</keywords>
+    <keywords>INCLUDE</keywords>
+    <keywords>INCLUDING</keywords>
+    <keywords>INCREMENT</keywords>    
+    <keywords>INDEX</keywords>
+    <keywords>INDEXES</keywords>
+    <keywords>INDICATOR</keywords>    
+    <keywords>INHERIT</keywords>
+    <keywords>INITIALLY</keywords>
+    <keywords>INITIAL_INSTS</keywords>
+    <keywords>INITIAL_IOS</keywords>    
+    <keywords>INNER</keywords>
+    <keywords>INOUT</keywords>
+    <keywords>INPUT</keywords>
+    <keywords>INSENSITIVE</keywords>
+    <keywords>INSERT</keywords>    
+    <keywords>INSTEAD</keywords>
+    <keywords>INSTS_PER_ARGBYTE</keywords>
+    <keywords>INSTS_PER_INVOC</keywords>
+    <keywords>INT</keywords>
+    <keywords>INTEGER</keywords>
+    <keywords>INTEGRITY</keywords>
+    <keywords>INTERSECT</keywords>
+    <keywords>INTERVAL</keywords>
+    <keywords>INTO</keywords>    
+    <keywords>IOS_PER_ARGBYTE</keywords>
+    <keywords>IOS_PER_INVOC</keywords>
+    <keywords>IS</keywords>
+    <keywords>ISO</keywords>
+    <keywords>ITERATE</keywords>
+    <keywords>ISOLATION</keywords>
+    <keywords>JAVA</keywords>    
+    <keywords>JIS</keywords>
+    <keywords>JOIN</keywords>
+    <keywords>K</keywords>
+    <keywords>KEY</keywords>
+    <keywords>KEYS</keywords>
+    <keywords>LANGUAGE</keywords>
+    <keywords>LARGE</keywords>
+    <keywords>LAST</keywords>
+    <keywords>LEADING</keywords>
+    <keywords>LEAVE</keywords>
+    <keywords>LEFT</keywords>
+    <keywords>LENGTH</keywords>
+    <keywords>LEVEL</keywords>
+    <keywords>LIBRARY</keywords>
+    <keywords>LIKE</keywords>
+    <keywords>LIMIT</keywords>
+    <keywords>LINK</keywords>
+    <keywords>LINKTYPE</keywords>
+    <keywords>LOAD</keywords>
+    <keywords>LOCAL</keywords>
+    <keywords>LOCATOR</keywords>
+    <keywords>LOCATORS</keywords>
+    <keywords>LOCK</keywords>
+    <keywords>LOCKS</keywords>
+    <keywords>LOCKSIZE</keywords>
+    <keywords>LOGGED</keywords>
+    <keywords>LONG</keywords>
+    <keywords>LONGVAR</keywords>
+    <keywords>LOOP</keywords>
+    <keywords>LOWER</keywords>
+    <keywords>M</keywords>
+    <keywords>MAINTAINED</keywords>    
+    <keywords>MAPPING</keywords>
+    <keywords>MATCH</keywords>
+    <keywords>MAX</keywords>    
+    <keywords>MAXVALUE</keywords>     
+    <keywords>MESSAGE_TEXT</keywords>
+    <keywords>METHOD</keywords>    
+    <keywords>MICROSECOND</keywords>
+    <keywords>MICROSECONDS</keywords>    
+    <keywords>MINUTE</keywords>
+    <keywords>MINUTES</keywords>
+    <keywords>MINVALUE</keywords>
+    <keywords>MIXED</keywords>
+    <keywords>MODE</keywords>
+    <keywords>MODIFIES</keywords>
+    <keywords>MODULE</keywords>
+    <keywords>MONITOR</keywords>
+    <keywords>MONTH</keywords>
+    <keywords>MONTHS</keywords>
+    <keywords>MORE</keywords>    
+    <keywords>NAMED</keywords>
+    <keywords>NAMES</keywords>
+    <keywords>NATIONAL</keywords>
+    <keywords>NATURAL</keywords>
+    <keywords>NCHAR</keywords>
+    <keywords>NEW</keywords>
+    <keywords>NEW_TABLE</keywords>
+    <keywords>NEXT</keywords>
+    <keywords>NEXTVAL</keywords>
+    <keywords>NICKNAME</keywords>
+    <keywords>NO</keywords>
+    <keywords>NOCACHE</keywords>
+    <keywords>NOCYCLE</keywords>
+    <keywords>NODE</keywords>    
+    <keywords>NOMAXVALUE</keywords>
+    <keywords>NOMINVALUE</keywords>    
+    <keywords>NONE</keywords>
+    <keywords>NOORDER</keywords>
+    <keywords>NOT</keywords>
+    <keywords>NULL</keywords>
+    <keywords>NULLABLE</keywords>    
+    <keywords>NULLS</keywords>    
+    <keywords>NUMBER</keywords>
+    <keywords>NUMERIC</keywords>    
+    <keywords>OBJECT</keywords>
+    <keywords>OF</keywords>
+    <keywords>OFF</keywords>
+    <keywords>OLD</keywords>
+    <keywords>OLD_TABLE</keywords>
+    <keywords>OLE</keywords>
+    <keywords>OLEDB</keywords>
+    <keywords>ON</keywords>
+    <keywords>ONCE</keywords>
+    <keywords>ONLINE</keywords>
+    <keywords>ONLY</keywords>
+    <keywords>OPEN</keywords>
+    <keywords>OPTIMIZATION</keywords>
+    <keywords>OPTIMIZE</keywords>
+    <keywords>OPTION</keywords>
+    <keywords>OPTIONS</keywords>
+    <keywords>OR</keywords>
+    <keywords>ORDER</keywords>
+    <keywords>OUT</keywords>
+    <keywords>OUTER</keywords>
+    <keywords>OUTPUT</keywords>
+    <keywords>OVER</keywords>    
+    <keywords>OVERLAPS</keywords>    
+    <keywords>PACKAGE</keywords>
+    <keywords>PAD</keywords>    
+    <keywords>PARTIAL</keywords>
+    <keywords>PARALLEL</keywords>    
+    <keywords>PARAMETER</keywords>
+    <keywords>PASCAL</keywords>
+    <keywords>PASSTHRU</keywords>
+    <keywords>PASSWORD</keywords>
+    <keywords>PATH</keywords>
+    <keywords>PARTITION</keywords>
+    <keywords>PARTITIONING</keywords>    
+    <keywords>PCTFREE</keywords>    
+    <keywords>PERCENT_ARGBYTES</keywords>
+    <keywords>PERMISSION</keywords>
+    <keywords>PIECESIZE</keywords>
+    <keywords>PIPE</keywords>
+    <keywords>PLAN</keywords>
+    <keywords>PLI</keywords>
+    <keywords>POSITION</keywords>
+    <keywords>PRECEDING</keywords>
+    <keywords>PRECISION</keywords>     
+    <keywords>PREPARE</keywords>
+    <keywords>PRESERVE</keywords>
+    <keywords>PRIMARY</keywords>    
+    <keywords>PRIOR</keywords>
+    <keywords>PRIQTY</keywords>
+    <keywords>PRIVILEGES</keywords>
+    <keywords>PROCEDURE</keywords>
+    <keywords>PROGRAM</keywords>    
+    <keywords>PROTOCOL</keywords>
+    <keywords>PUBLIC</keywords>
+    <keywords>QUERY</keywords>
+    <keywords>QUERYNO</keywords>    
+    <keywords>RANGE</keywords>    
+    <keywords>READ</keywords>
+    <keywords>READS</keywords>
+    <keywords>REAL</keywords>
+    <keywords>RECOMMEND</keywords>    
+    <keywords>RECOVERY</keywords>    
+    <keywords>REF</keywords>
+    <keywords>REFERENCE</keywords>
+    <keywords>REFERENCES</keywords>
+    <keywords>REFERENCING</keywords>
+    <keywords>REFRESH</keywords>
+    <keywords>REGISTERS</keywords>    
+    <keywords>RELATIVE</keywords>
+    <keywords>RELEASE</keywords>    
+    <keywords>RENAME</keywords>
+    <keywords>REPEATABLE</keywords>
+    <keywords>REPEAT</keywords>    
+    <keywords>REPLACE</keywords>
+    <keywords>REPLICATED</keywords>
+    <keywords>RESET</keywords>
+    <keywords>RESIDENT</keywords>
+    <keywords>RESIGNAL</keywords>    
+    <keywords>RESOLVE</keywords>
+    <keywords>RESTART</keywords>
+    <keywords>RESTORE</keywords>
+    <keywords>RESTRICT</keywords>
+    <keywords>RESULT</keywords>
+    <keywords>RESULT_SET_LOCATOR</keywords>    
+    <keywords>RETURNED_SQLSTATE</keywords>
+    <keywords>RETAIN</keywords>
+    <keywords>RETURN</keywords>
+    <keywords>RETURNS</keywords>
+    <keywords>RETURN_STATUS</keywords>   
+    <keywords>REVOKE</keywords>
+    <keywords>RIGHT</keywords>
+    <keywords>ROLLBACK</keywords>
+    <keywords>ROLLUP</keywords>
+    <keywords>ROUTINE</keywords>
+    <keywords>ROW</keywords>
+    <keywords>ROW_COUNT</keywords>
+    <keywords>ROWID</keywords>
+    <keywords>ROWS</keywords>
+    <keywords>RUN</keywords>
+    <keywords>S</keywords>    
+    <keywords>SAVEPOINT</keywords>
+    <keywords>SBCS</keywords>
+    <keywords>SCALE</keywords>    
+    <keywords>SCHEMA</keywords>    
+    <keywords>SCOPE</keywords>
+    <keywords>SCRATCHPAD</keywords>
+    <keywords>SCROLL</keywords>
+    <keywords>SEARCH</keywords>
+    <keywords>SECOND</keywords>
+    <keywords>SECONDS</keywords>
+    <keywords>SECQTY</keywords>
+    <keywords>SECTION</keywords>
+    <keywords>SELECT</keywords>    
+    <keywords>SELECTIVITY</keywords>
+    <keywords>SELF</keywords>
+    <keywords>SEQUENCE</keywords>
+    <keywords>SERIALIZABLE</keywords>
+    <keywords>SERVER</keywords>
+    <keywords>SERVER_NAME</keywords>
+    <keywords>SESSION</keywords>
+    <keywords>SESSION_USER</keywords>
+    <keywords>SET</keywords>
+    <keywords>SETS</keywords>    
+    <keywords>SHARE</keywords>
+    <keywords>SHRLEVEL</keywords>
+    <keywords>SIGNAL</keywords>
+    <keywords>SIMPLE</keywords>
+    <keywords>SIZE</keywords>
+    <keywords>SMALLINT</keywords>
+    <keywords>SNAPSHOT</keywords>
+    <keywords>SOME</keywords>
+    <keywords>SOURCE</keywords>
+    <keywords>SPACE</keywords>
+    <keywords>SPECIAL</keywords>
+    <keywords>SPECIFIC</keywords>    
+    <keywords>SQL</keywords>
+    <keywords>SQLCODE</keywords>
+    <keywords>SQLERROR</keywords>
+    <keywords>SQLEXCEPTION</keywords>
+    <keywords>SQLWARNING</keywords>
+    <keywords>SQLID</keywords>    
+    <keywords>SQLSTATE</keywords>    
+    <keywords>START</keywords>
+    <keywords>STATE</keywords>
+    <keywords>STATEMENT</keywords>    
+    <keywords>STATISTICS</keywords>
+    <keywords>STAY</keywords>
+    <keywords>STOGROUP</keywords>
+    <keywords>STORAGE</keywords>
+    <keywords>STORED</keywords>
+    <keywords>STYLE</keywords>
+    <keywords>SUB</keywords>    
+    <keywords>SUBSTRING</keywords>
+    <keywords>SUMMARY</keywords>
+    <keywords>SWITCH</keywords>
+    <keywords>SYNONYM</keywords>
+    <keywords>SYSTEM</keywords>
+    <keywords>SYSTEM_USER</keywords>
+    <keywords>TABLE</keywords>
+    <keywords>TABLES</keywords>
+    <keywords>TABLE_NAME</keywords>
+    <keywords>TABLESPACE</keywords>
+    <keywords>TABLESPACES</keywords>    
+    <keywords>TEMPLATE</keywords>
+    <keywords>TEMPORARY</keywords>
+    <keywords>THEN</keywords>
+    <keywords>THREADSAFE</keywords>    
+    <keywords>TIME</keywords>
+    <keywords>TIMESTAMP</keywords>
+    <keywords>TIMEZONE</keywords>
+    <keywords>TIMEZONE_HOUR</keywords>
+    <keywords>TIMEZONE_MINUTE</keywords>
+    <keywords>TO</keywords>
+    <keywords>TRAILING</keywords>
+    <keywords>TRANSACTION</keywords>    
+    <keywords>TRANSFORM</keywords>    
+    <keywords>TRANSLATE</keywords>
+    <keywords>TRANSLATION</keywords>
+    <keywords>TREAT</keywords>
+    <keywords>TRIGGER</keywords>
+    <keywords>TRIM</keywords>
+    <keywords>TRUE</keywords>
+    <keywords>TYPE</keywords>
+    <keywords>UNBOUNDED</keywords>    
+    <keywords>UNCOMMITTED</keywords>
+    <keywords>UNDER</keywords>
+    <keywords>UNDO</keywords>
+    <keywords>UNICODE</keywords>
+    <keywords>UNION</keywords>
+    <keywords>UNIQUE</keywords>
+    <keywords>UNKNOWN</keywords>    
+    <keywords>UNTIL</keywords>    
+    <keywords>UPDATE</keywords>
+    <keywords>UPPER</keywords>
+    <keywords>URL</keywords>
+    <keywords>USA</keywords>
+    <keywords>USE</keywords>
+    <keywords>USAGE</keywords>
+    <keywords>USER</keywords>
+    <keywords>USING</keywords>
+    <keywords>VALUE</keywords>
+    <keywords>VALUES</keywords>
+    <keywords>VARCHAR</keywords>
+    <keywords>VARGRAPHIC</keywords>
+    <keywords>VARIANT</keywords>
+    <keywords>VARYING</keywords>
+    <keywords>VCAT</keywords>
+    <keywords>VERSION</keywords>
+    <keywords>VIEW</keywords>
+    <keywords>VOLATILE</keywords>
+    <keywords>WHEN</keywords>
+    <keywords>WHENEVER</keywords>
+    <keywords>WHERE</keywords>
+    <keywords>WHILE</keywords>
+    <keywords>WITH</keywords>
+    <keywords>WITHOUT</keywords>
+    <keywords>WORK</keywords>
+    <keywords>WRAPPER</keywords>
+    <keywords>WRITE</keywords>
+    <keywords>YEAR</keywords>
+    <keywords>YEARS</keywords>
+    <keywords>YES</keywords>    
+    <keywords>ZONE</keywords>
+    <operators>&lt;</operators>
+    <operators>&quot;</operators>
+    <operators>%</operators>
+    <operators>&amp;</operators>
+    <operators>''''</operators>
+    <operators>(</operators>
+    <operators>)</operators>
+    <operators>*</operators>
+    <operators>+</operators>
+    <operators>,</operators>
+    <operators>-</operators>
+    <operators>.</operators>
+    <operators>/</operators>
+    <operators>:</operators>
+    <operators>;</operators>
+    <operators>=</operators>
+    <operators>?</operators>
+    <operators>[</operators>
+    <operators>]</operators>
+    <operators>_</operators>
+    <operators>'|'</operators>
+    <operators>,=</operators>
+    <operators>&lt;=</operators>
+    <operators>||</operators>
+    <operators>..</operators>
+    <operators>'-,'</operators>
+    <operators>!</operators>
+    <operators>~</operators>
+    <operators>:=</operators>
+    <operators>{</operators>
+    <operators>}</operators>
+    <operators>(+)</operators>
+  </SQLSyntaxDefinition>
+</DBDefinition:DatabaseVendorDefinition>
diff --git "a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/runtime/vendors/DB2 UDB zSeries_V9/DB2 UDB zSeries_V9 \050Compatibility Mode\051.xmi" "b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/runtime/vendors/DB2 UDB zSeries_V9/DB2 UDB zSeries_V9 \050Compatibility Mode\051.xmi"
new file mode 100644
index 0000000..49a7b75
--- /dev/null
+++ "b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/runtime/vendors/DB2 UDB zSeries_V9/DB2 UDB zSeries_V9 \050Compatibility Mode\051.xmi"
@@ -0,0 +1,878 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="DB2 UDB zSeries" version="9 (Compatibility Mode)" maximumIdentifierLength="8" maximumCommentLength="64" aliasSupported="true" sequenceSupported="true" mQTSupported="true" synonymSupported="true" authorizationIdentifierSupported="true" userDefinedTypeSupported="true" packageSupported="true">
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="BYTE" defaultLength="1024" maximumLength="2147483647" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_1" lengthSupported="true" defaultLength="1" maximumLength="127" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>GRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_1" lengthSupported="true" defaultLength="32" maximumLength="16352" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARGRAPHIC</name>
+    <name>VARG</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_2" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARGRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="255" primitiveType="CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR</name>
+    <name>CHARACTER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="BYTE" defaultLength="1024" maximumLength="2147483647" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CLOB</name>
+    <name>CHARACTER LARGE OBJECT</name>
+    <name>CHAR LARGE OBJECT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="DOUBLE_BYTE" defaultLength="1024" maximumLength="1073741823" primitiveType="NATIONAL_CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DBCLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" defaultLength="32" keyConstraintSupported="true" maximumLength="32704" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR</name>
+    <name>CHARACTER VARYING</name>
+    <name>CHAR VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_2" primitiveType="CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" identitySupported="true" scaleSupported="true" precisionSupported="true" defaultPrecision="5" maximumPrecision="31" defaultScale="0" keyConstraintSupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" precisionSupported="true" keyConstraintSupported="true" primitiveType="FLOAT" defaultPrecision="53" maximumPrecision="53" cutoffPrecision="22" jdbcEnumType="6" javaClassName="double">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INTEGER</name>
+    <name>INT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" identitySupported="true" scaleSupported="true" precisionSupported="true" defaultPrecision="5" maximumPrecision="31" defaultScale="0" keyConstraintSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+    <name>NUM</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIME_1" keyConstraintSupported="true" primitiveType="TIME" jdbcEnumType="92" javaClassName="java.sql.Time">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP</name>
+    <name>TIMESTMP</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_2" keyConstraintSupported="true" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>ROWID</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" lengthSupported="true" defaultLength="1" displayNameSupported="true" displayName="CHAR ({0}) FOR BIT DATA" keyConstraintSupported="true" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR FOR BIT DATA</name>
+    <name>CHARACTER FOR BIT DATA</name>
+    <name>CHAR () FOR BIT DATA</name>
+    <name>CHARACTER () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_1" lengthSupported="true" defaultLength="1" displayNameSupported="true" displayName="VARCHAR ({0}) FOR BIT DATA" keyConstraintSupported="true" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR FOR BIT DATA</name>
+    <name>CHARACTER VARYING FOR BIT DATA</name>
+    <name>CHAR VARYING FOR BIT DATA</name>
+    <name>VARCHAR () FOR BIT DATA</name>
+    <name>CHARACTER VARYING () FOR BIT DATA</name>
+    <name>CHAR VARYING () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <tableSpaceDefinition maximumIdentifierLength="8" >
+    <tableSpaceType>REGULAR</tableSpaceType>
+    <tableSpaceType>LOB</tableSpaceType>
+    <tableSpaceType>LARGE</tableSpaceType>
+  </tableSpaceDefinition>
+  <storedProcedureDefinition maximumIdentifierLength="128" parameterStyleSupported="true">
+    <parameterStyle>DB2SQL</parameterStyle>
+    <parameterStyle>GENERAL</parameterStyle>
+    <parameterStyle>GENERAL_WITH_NULLS</parameterStyle>
+    <parameterStyle>JAVA</parameterStyle>
+    <languageType>SQL</languageType>
+    <languageType>JAVA</languageType>
+    <languageType>C</languageType>
+    <languageType>COBOL</languageType>
+    <languageType>ASSEMBLY</languageType>
+    <languageType>PLI</languageType>
+    <functionLanguageType>SQL</functionLanguageType>
+    <functionLanguageType>JAVA</functionLanguageType>
+    <functionLanguageType>C</functionLanguageType>
+    <functionLanguageType>ASSEMBLY</functionLanguageType>
+    <functionLanguageType>COBOL</functionLanguageType>
+    <functionLanguageType>PLI</functionLanguageType>
+  </storedProcedureDefinition>
+  <columnDefinition maximumIdentifierLength="30" identitySupported="true" identityStartValueSupported="true" identityIncrementSupported="true" identityMinimumSupported="true" identityMaximumSupported="true" identityCycleSupported="true"/>
+  <constraintDefinition maximumPrimaryKeyIdentifierLength="8" maximumForeignKeyIdentifierLength="8" maximumCheckConstraintIdentifierLength="18">
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>RESTRICT</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>SET_NULL</parentDeleteDRIRuleType>
+  </constraintDefinition>
+  <sequenceDefinition predefinedDataTypeDefinitions="INTEGER_1 SMALLINT_1 DECIMAL_1" defaultDataTypeDefinition="INTEGER_1" typeEnumerationSupported="true" cacheSupported="true" orderSupported="true" noMaximumValueString="NO MAXVALUE" noMinimumValueString="NO MINVALUE" noCacheString="NO CACHE" cacheDefaultValue="20"/>
+  <triggerDefinition maximumIdentifierLength="128"/>
+  <indexDefinition maximumIdentifierLength="128" clusteringSupported="true"/>
+  <queryDefinition hostVariableMarker=":"/>
+  <viewDefinition maximumIdentifierLength="128"/>
+  <tableDefinition maximumIdentifierLength="128"/>
+  <schemaDefinition maximumIdentifierLength="128"/>
+  <privilegedElementDefinitions name="DatabaseInstance">
+  	<privilegeDefinitions name="DBADM"/>
+	<privilegeDefinitions name="DBCTRL"/>
+	<privilegeDefinitions name="DBMAINT"/>
+	<privilegeDefinitions name="CREATETAB"/>
+	<privilegeDefinitions name="CREATETS"/>
+	<privilegeDefinitions name="DISPLAYDB"/>
+	<privilegeDefinitions name="DROP"/>
+	<privilegeDefinitions name="IMAGCOPY"/>
+	<privilegeDefinitions name="LOAD"/>
+	<privilegeDefinitions name="RECOVERDB"/>
+	<privilegeDefinitions name="REORG"/>
+	<privilegeDefinitions name="REPAIR"/>
+	<privilegeDefinitions name="STARTDB"/>
+	<privilegeDefinitions name="STATS"/>
+	<privilegeDefinitions name="STOPDB"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Schema">
+  	<privilegeDefinitions name="ALTERIN"/>
+  	<privilegeDefinitions name="CREATEIN"/>
+    <privilegeDefinitions name="DROPIN"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="PersistentTable">
+  	<privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="REFERENCES" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions name="TRIGGER"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="ViewTable">
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions xmi:id="COLUMN_1" name="Column"/>
+  <privilegedElementDefinitions name="MaterializedQueryTable">
+  	<privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="REFERENCES" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions name="TRIGGER"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Routine">
+  	<privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Sequence">
+  	<privilegeDefinitions name="ALTER"/>
+  	<privilegeDefinitions name="USAGE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="UserDefinedType">
+  	<privilegeDefinitions name="USAGE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Tablespace">
+  	<privilegeDefinitions name="USE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="BufferPool">
+  	<privilegeDefinitions name="USE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="StorageGroup">
+  	<privilegeDefinitions name="USE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Package">
+    <privilegeDefinitions name="BIND"/>
+  	<privilegeDefinitions name="COPY"/>
+  	<privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="System">
+	<privilegeDefinitions name="ARCHIVE"/>
+	<privilegeDefinitions name="BINDADD"/>
+	<privilegeDefinitions name="BINDAGENT"/>
+	<privilegeDefinitions name="BSDS"/>
+	<privilegeDefinitions name="CREATEALIAS"/>
+	<privilegeDefinitions name="CREATEDBA"/>
+	<privilegeDefinitions name="CREATEDBC"/>
+	<privilegeDefinitions name="CREATESG"/>
+	<privilegeDefinitions name="CREATETMTAB"/>
+	<privilegeDefinitions name="DISPLAY"/>
+	<privilegeDefinitions name="MONITOR1"/>
+	<privilegeDefinitions name="MONITOR2"/>
+	<privilegeDefinitions name="RECOVER"/>
+	<privilegeDefinitions name="STOPALL"/>
+	<privilegeDefinitions name="STOSPACE"/>
+	<privilegeDefinitions name="SYSADM"/>
+	<privilegeDefinitions name="SYSCTRL"/>
+	<privilegeDefinitions name="SYSOPR"/>
+	<privilegeDefinitions name="TRACE"/>
+  </privilegedElementDefinitions>
+  <SQLSyntaxDefinition terminationCharacter=";">
+    <keywords>ABSOLUTE</keywords>
+    <keywords>ACCESS</keywords>
+    <keywords>ACTION</keywords>
+    <keywords>ACTIVATE</keywords>
+    <keywords>ADA</keywords>
+    <keywords>ADD</keywords>
+    <keywords>AFTER</keywords>
+    <keywords>ALIAS</keywords>
+    <keywords>ALL</keywords>
+    <keywords>ALLOCATE</keywords>
+    <keywords>ALLOW</keywords>
+    <keywords>ALTER</keywords>
+    <keywords>ALTERIN</keywords>
+    <keywords>ALWAYS</keywords>
+    <keywords>AND</keywords>
+    <keywords>ANY</keywords>
+    <keywords>APPEND</keywords>    
+    <keywords>ARE</keywords>
+    <keywords>AS</keywords>
+    <keywords>ASC</keywords>
+    <keywords>ASCII</keywords>
+    <keywords>ASSERTION</keywords>    
+    <keywords>ASSOCIATE</keywords>    
+    <keywords>ASUTIME</keywords>
+    <keywords>AT</keywords>
+    <keywords>ATOMIC</keywords>    
+    <keywords>ATTRIBUTES</keywords>
+    <keywords>AUTHORIZATION</keywords>    
+    <keywords>AUTHID</keywords>
+    <keywords>AUTOMATIC</keywords>    
+    <keywords>AVG</keywords>
+    <keywords>BEFORE</keywords>
+    <keywords>BEGIN</keywords>
+    <keywords>BETWEEN</keywords>    
+    <keywords>BINARY</keywords>
+    <keywords>BIND</keywords>
+    <keywords>BINDADD</keywords>
+    <keywords>BIT</keywords>
+    <keywords>BIT_LENGTH</keywords>
+    <keywords>BLOB</keywords>
+    <keywords>BLOCKED</keywords>
+    <keywords>BOTH</keywords>    
+    <keywords>BUFFERPOOL</keywords>
+    <keywords>BUFFERPOOLS</keywords>    
+    <keywords>BY</keywords>
+    <keywords>C</keywords>
+    <keywords>CACHE</keywords>
+    <keywords>CALL</keywords>
+    <keywords>CALLED</keywords>
+    <keywords>CALLER</keywords>
+    <keywords>CAPTURE</keywords>
+    <keywords>CARDINALITY</keywords>
+    <keywords>CASCADE</keywords>
+    <keywords>CASCADED</keywords>
+    <keywords>CASE</keywords>
+    <keywords>CAST</keywords>
+    <keywords>CATALOG</keywords>
+    <keywords>CATALOG_NAME</keywords>
+    <keywords>CHANGE</keywords>
+    <keywords>CHANGED</keywords>
+    <keywords>CHANGES</keywords>
+    <keywords>CHAR</keywords>
+    <keywords>CHAR_LENGTH</keywords>
+    <keywords>CHARACTER</keywords>
+    <keywords>CHARACTER_LENGTH</keywords>    
+    <keywords>CHECK</keywords>
+    <keywords>CHECKED</keywords>    
+    <keywords>CLIENT</keywords>
+    <keywords>CLOB</keywords>
+    <keywords>CLOSE</keywords>
+    <keywords>CLUSTER</keywords>
+    <keywords>COBOL</keywords>    
+    <keywords>COLLATE</keywords>
+    <keywords>COLLATION</keywords>     
+    <keywords>COLLECT</keywords>
+    <keywords>COLLID</keywords>
+    <keywords>COLUMN</keywords>    
+    <keywords>COMMENT</keywords>
+    <keywords>COMMIT</keywords>
+    <keywords>COMMITTED</keywords>    
+    <keywords>COMPARISONS</keywords>
+    <keywords>CONCAT</keywords>
+    <keywords>CONDITION</keywords>
+    <keywords>CONDITION_NUMBER</keywords>
+    <keywords>CONNECT</keywords>
+    <keywords>CONNECTION</keywords>    
+    <keywords>CONNECTION_NAME</keywords>    
+    <keywords>CONSERVATIVE</keywords>
+    <keywords>CONSTRAINT</keywords>    
+    <keywords>CONSTRAINTS</keywords>    
+    <keywords>CONTAINS</keywords>
+    <keywords>CONTINUE</keywords>
+    <keywords>CONTROL</keywords>
+    <keywords>CONVERT</keywords>
+    <keywords>COPY</keywords>
+    <keywords>CORRELATION</keywords>
+    <keywords>CORR</keywords>
+    <keywords>CORRESPONDING</keywords>
+    <keywords>COUNT</keywords>
+    <keywords>COUNT_BIG</keywords>
+    <keywords>CPU</keywords>
+    <keywords>C++</keywords>
+    <keywords>CREATE</keywords>
+    <keywords>CREATEIN</keywords>    
+    <keywords>CREATETAB</keywords>
+    <keywords>CROSS</keywords>
+    <keywords>CUBE</keywords>
+    <keywords>CURRENT</keywords>
+    <keywords>CURRENT_DATE</keywords>    
+    <keywords>CURRENT_PATH</keywords>    
+    <keywords>CURRENT_SCHEMA</keywords>
+    <keywords>CURRENT_SERVER</keywords>
+    <keywords>CURRENT_SQLID</keywords>
+    <keywords>CURRENT_TIME</keywords>
+    <keywords>CURRENT_TIMESTAMP</keywords>
+    <keywords>CURRENT_TIMEZONE</keywords>
+    <keywords>CURRENT_USER</keywords>    
+    <keywords>CURSOR</keywords>
+    <keywords>CURSORS</keywords>
+    <keywords>CURSOR_NAME</keywords>
+    <keywords>CYCLE</keywords>
+    <keywords>DATE</keywords>
+    <keywords>DATA</keywords>
+    <keywords>DATABASE</keywords>
+    <keywords>DATALINK</keywords>     
+    <keywords>DAY</keywords>
+    <keywords>DAYS</keywords>
+    <keywords>DB</keywords>
+    <keywords>DBADM</keywords>
+    <keywords>DBCLOB</keywords>
+    <keywords>DBINFO</keywords>
+    <keywords>DB2DARI</keywords>
+    <keywords>DB2GENRL</keywords>
+    <keywords>DB2GENERAL</keywords>    
+    <keywords>DB2SQL</keywords>
+    <keywords>DEADLOCKS</keywords>
+    <keywords>DEALLOCATE</keywords>
+    <keywords>DEC</keywords>
+    <keywords>DECIMAL</keywords>
+    <keywords>DECLARE</keywords>
+    <keywords>DEFAULT</keywords>
+    <keywords>DEFAULTS</keywords>
+    <keywords>DEFINE</keywords>
+    <keywords>DEFINITION</keywords>
+    <keywords>DEGREE</keywords>
+    <keywords>DEFER</keywords>
+    <keywords>DEFERRABLE</keywords>
+    <keywords>DEFERRED</keywords>
+    <keywords>DELETE</keywords>
+    <keywords>DESC</keywords>
+    <keywords>DESCRIBE</keywords>
+    <keywords>DESCRIPTOR</keywords>    
+    <keywords>DETERMINISTIC</keywords>    
+    <keywords>DIAGNOSTICS</keywords>
+    <keywords>DIMENSIONS</keywords>
+    <keywords>DISABLE</keywords>
+    <keywords>DISALLOW</keywords>
+    <keywords>DISCONNECT</keywords>
+    <keywords>DISPATCH</keywords>
+    <keywords>DISTINCT</keywords>    
+    <keywords>DOMAIN</keywords>
+    <keywords>DO</keywords>
+    <keywords>DOUBLE</keywords>
+    <keywords>DROP</keywords>
+    <keywords>DROPIN</keywords>    
+    <keywords>DYNAMIC</keywords>    
+    <keywords>EACH</keywords>
+    <keywords>EBCDIC</keywords>
+    <keywords>ELSE</keywords>
+    <keywords>ELSEIF</keywords>
+    <keywords>EMPTY</keywords>
+    <keywords>ENABLE</keywords>
+    <keywords>END</keywords>
+    <keywords>END-EXEC</keywords>
+    <keywords>ERASE</keywords>
+    <keywords>ESCAPE</keywords>
+    <keywords>EUR</keywords>    
+    <keywords>EVENT</keywords>
+    <keywords>EXACT</keywords>
+    <keywords>EXCEPT</keywords>
+    <keywords>EXCEPTION</keywords>
+    <keywords>EXCLUDE</keywords>
+    <keywords>EXCLUDING</keywords>
+    <keywords>EXCLUSIVE</keywords>
+    <keywords>EXEC</keywords>    
+    <keywords>EXECUTE</keywords>
+    <keywords>EXISTS</keywords>
+    <keywords>EXIT</keywords>    
+    <keywords>EXPLAIN</keywords>    
+    <keywords>EXTENDED</keywords>
+    <keywords>EXTENSION</keywords>    
+    <keywords>EXTERNAL</keywords>
+    <keywords>EXTRACT</keywords>
+    <keywords>FALSE</keywords>
+    <keywords>FEDERATED</keywords>
+    <keywords>FENCED</keywords>
+    <keywords>FETCH</keywords>
+    <keywords>FILE</keywords>    
+    <keywords>FINAL</keywords>
+    <keywords>FIRST</keywords>
+    <keywords>FLOAT</keywords>
+    <keywords>FLUSH</keywords>
+    <keywords>FOLLOWING</keywords>
+    <keywords>FOR</keywords>
+    <keywords>FORCE</keywords>
+    <keywords>FOREIGN</keywords>    
+    <keywords>FORTRAN</keywords>
+    <keywords>FOUND</keywords>
+    <keywords>FREEPAGE</keywords>
+    <keywords>FROM</keywords>
+    <keywords>FS</keywords>
+    <keywords>FULL</keywords>
+    <keywords>FUNCTION</keywords>
+    <keywords>G</keywords>
+    <keywords>GBPCACHE</keywords>
+    <keywords>GENERAL</keywords>
+    <keywords>GENERATE</keywords>
+    <keywords>GENERATED</keywords>
+    <keywords>GET</keywords>
+    <keywords>GLOBAL</keywords>
+    <keywords>GO</keywords>
+    <keywords>GOTO</keywords>
+    <keywords>GRANT</keywords>
+    <keywords>GRAPHIC</keywords>
+    <keywords>GROUP</keywords>
+    <keywords>GROUPING</keywords>
+    <keywords>HANDLER</keywords>    
+    <keywords>HAVING</keywords>      
+    <keywords>HOLD</keywords>
+    <keywords>HOUR</keywords>
+    <keywords>HOURS</keywords>
+    <keywords>IDENTITY</keywords>
+    <keywords>IF</keywords>
+    <keywords>IMMEDIATE</keywords>
+    <keywords>IMPLICIT_SCHEMA</keywords>
+    <keywords>IN</keywords>
+    <keywords>INCLUDE</keywords>
+    <keywords>INCLUDING</keywords>
+    <keywords>INCREMENT</keywords>    
+    <keywords>INDEX</keywords>
+    <keywords>INDEXES</keywords>
+    <keywords>INDICATOR</keywords>    
+    <keywords>INHERIT</keywords>
+    <keywords>INITIALLY</keywords>
+    <keywords>INITIAL_INSTS</keywords>
+    <keywords>INITIAL_IOS</keywords>    
+    <keywords>INNER</keywords>
+    <keywords>INOUT</keywords>
+    <keywords>INPUT</keywords>
+    <keywords>INSENSITIVE</keywords>
+    <keywords>INSERT</keywords>    
+    <keywords>INSTEAD</keywords>
+    <keywords>INSTS_PER_ARGBYTE</keywords>
+    <keywords>INSTS_PER_INVOC</keywords>
+    <keywords>INT</keywords>
+    <keywords>INTEGER</keywords>
+    <keywords>INTEGRITY</keywords>
+    <keywords>INTERSECT</keywords>
+    <keywords>INTERVAL</keywords>
+    <keywords>INTO</keywords>    
+    <keywords>IOS_PER_ARGBYTE</keywords>
+    <keywords>IOS_PER_INVOC</keywords>
+    <keywords>IS</keywords>
+    <keywords>ISO</keywords>
+    <keywords>ITERATE</keywords>
+    <keywords>ISOLATION</keywords>
+    <keywords>JAVA</keywords>    
+    <keywords>JIS</keywords>
+    <keywords>JOIN</keywords>
+    <keywords>K</keywords>
+    <keywords>KEY</keywords>
+    <keywords>KEYS</keywords>
+    <keywords>LANGUAGE</keywords>
+    <keywords>LARGE</keywords>
+    <keywords>LAST</keywords>
+    <keywords>LEADING</keywords>
+    <keywords>LEAVE</keywords>
+    <keywords>LEFT</keywords>
+    <keywords>LENGTH</keywords>
+    <keywords>LEVEL</keywords>
+    <keywords>LIBRARY</keywords>
+    <keywords>LIKE</keywords>
+    <keywords>LIMIT</keywords>
+    <keywords>LINK</keywords>
+    <keywords>LINKTYPE</keywords>
+    <keywords>LOAD</keywords>
+    <keywords>LOCAL</keywords>
+    <keywords>LOCATOR</keywords>
+    <keywords>LOCATORS</keywords>
+    <keywords>LOCK</keywords>
+    <keywords>LOCKS</keywords>
+    <keywords>LOCKSIZE</keywords>
+    <keywords>LOGGED</keywords>
+    <keywords>LONG</keywords>
+    <keywords>LONGVAR</keywords>
+    <keywords>LOOP</keywords>
+    <keywords>LOWER</keywords>
+    <keywords>M</keywords>
+    <keywords>MAINTAINED</keywords>    
+    <keywords>MAPPING</keywords>
+    <keywords>MATCH</keywords>
+    <keywords>MAX</keywords>    
+    <keywords>MAXVALUE</keywords>     
+    <keywords>MESSAGE_TEXT</keywords>
+    <keywords>METHOD</keywords>    
+    <keywords>MICROSECOND</keywords>
+    <keywords>MICROSECONDS</keywords>    
+    <keywords>MINUTE</keywords>
+    <keywords>MINUTES</keywords>
+    <keywords>MINVALUE</keywords>
+    <keywords>MIXED</keywords>
+    <keywords>MODE</keywords>
+    <keywords>MODIFIES</keywords>
+    <keywords>MODULE</keywords>
+    <keywords>MONITOR</keywords>
+    <keywords>MONTH</keywords>
+    <keywords>MONTHS</keywords>
+    <keywords>MORE</keywords>    
+    <keywords>NAMED</keywords>
+    <keywords>NAMES</keywords>
+    <keywords>NATIONAL</keywords>
+    <keywords>NATURAL</keywords>
+    <keywords>NCHAR</keywords>
+    <keywords>NEW</keywords>
+    <keywords>NEW_TABLE</keywords>
+    <keywords>NEXT</keywords>
+    <keywords>NEXTVAL</keywords>
+    <keywords>NICKNAME</keywords>
+    <keywords>NO</keywords>
+    <keywords>NOCACHE</keywords>
+    <keywords>NOCYCLE</keywords>
+    <keywords>NODE</keywords>    
+    <keywords>NOMAXVALUE</keywords>
+    <keywords>NOMINVALUE</keywords>    
+    <keywords>NONE</keywords>
+    <keywords>NOORDER</keywords>
+    <keywords>NOT</keywords>
+    <keywords>NULL</keywords>
+    <keywords>NULLABLE</keywords>    
+    <keywords>NULLS</keywords>    
+    <keywords>NUMBER</keywords>
+    <keywords>NUMERIC</keywords>    
+    <keywords>OBJECT</keywords>
+    <keywords>OF</keywords>
+    <keywords>OFF</keywords>
+    <keywords>OLD</keywords>
+    <keywords>OLD_TABLE</keywords>
+    <keywords>OLE</keywords>
+    <keywords>OLEDB</keywords>
+    <keywords>ON</keywords>
+    <keywords>ONCE</keywords>
+    <keywords>ONLINE</keywords>
+    <keywords>ONLY</keywords>
+    <keywords>OPEN</keywords>
+    <keywords>OPTIMIZATION</keywords>
+    <keywords>OPTIMIZE</keywords>
+    <keywords>OPTION</keywords>
+    <keywords>OPTIONS</keywords>
+    <keywords>OR</keywords>
+    <keywords>ORDER</keywords>
+    <keywords>OUT</keywords>
+    <keywords>OUTER</keywords>
+    <keywords>OUTPUT</keywords>
+    <keywords>OVER</keywords>    
+    <keywords>OVERLAPS</keywords>    
+    <keywords>PACKAGE</keywords>
+    <keywords>PAD</keywords>    
+    <keywords>PARTIAL</keywords>
+    <keywords>PARALLEL</keywords>    
+    <keywords>PARAMETER</keywords>
+    <keywords>PASCAL</keywords>
+    <keywords>PASSTHRU</keywords>
+    <keywords>PASSWORD</keywords>
+    <keywords>PATH</keywords>
+    <keywords>PARTITION</keywords>
+    <keywords>PARTITIONING</keywords>    
+    <keywords>PCTFREE</keywords>    
+    <keywords>PERCENT_ARGBYTES</keywords>
+    <keywords>PERMISSION</keywords>
+    <keywords>PIECESIZE</keywords>
+    <keywords>PIPE</keywords>
+    <keywords>PLAN</keywords>
+    <keywords>PLI</keywords>
+    <keywords>POSITION</keywords>
+    <keywords>PRECEDING</keywords>
+    <keywords>PRECISION</keywords>     
+    <keywords>PREPARE</keywords>
+    <keywords>PRESERVE</keywords>
+    <keywords>PRIMARY</keywords>    
+    <keywords>PRIOR</keywords>
+    <keywords>PRIQTY</keywords>
+    <keywords>PRIVILEGES</keywords>
+    <keywords>PROCEDURE</keywords>
+    <keywords>PROGRAM</keywords>    
+    <keywords>PROTOCOL</keywords>
+    <keywords>PUBLIC</keywords>
+    <keywords>QUERY</keywords>
+    <keywords>QUERYNO</keywords>    
+    <keywords>RANGE</keywords>    
+    <keywords>READ</keywords>
+    <keywords>READS</keywords>
+    <keywords>REAL</keywords>
+    <keywords>RECOMMEND</keywords>    
+    <keywords>RECOVERY</keywords>    
+    <keywords>REF</keywords>
+    <keywords>REFERENCE</keywords>
+    <keywords>REFERENCES</keywords>
+    <keywords>REFERENCING</keywords>
+    <keywords>REFRESH</keywords>
+    <keywords>REGISTERS</keywords>    
+    <keywords>RELATIVE</keywords>
+    <keywords>RELEASE</keywords>    
+    <keywords>RENAME</keywords>
+    <keywords>REPEATABLE</keywords>
+    <keywords>REPEAT</keywords>    
+    <keywords>REPLACE</keywords>
+    <keywords>REPLICATED</keywords>
+    <keywords>RESET</keywords>
+    <keywords>RESIDENT</keywords>
+    <keywords>RESIGNAL</keywords>    
+    <keywords>RESOLVE</keywords>
+    <keywords>RESTART</keywords>
+    <keywords>RESTORE</keywords>
+    <keywords>RESTRICT</keywords>
+    <keywords>RESULT</keywords>
+    <keywords>RESULT_SET_LOCATOR</keywords>    
+    <keywords>RETURNED_SQLSTATE</keywords>
+    <keywords>RETAIN</keywords>
+    <keywords>RETURN</keywords>
+    <keywords>RETURNS</keywords>
+    <keywords>RETURN_STATUS</keywords>   
+    <keywords>REVOKE</keywords>
+    <keywords>RIGHT</keywords>
+    <keywords>ROLLBACK</keywords>
+    <keywords>ROLLUP</keywords>
+    <keywords>ROUTINE</keywords>
+    <keywords>ROW</keywords>
+    <keywords>ROW_COUNT</keywords>
+    <keywords>ROWID</keywords>
+    <keywords>ROWS</keywords>
+    <keywords>RUN</keywords>
+    <keywords>S</keywords>    
+    <keywords>SAVEPOINT</keywords>
+    <keywords>SBCS</keywords>
+    <keywords>SCALE</keywords>    
+    <keywords>SCHEMA</keywords>    
+    <keywords>SCOPE</keywords>
+    <keywords>SCRATCHPAD</keywords>
+    <keywords>SCROLL</keywords>
+    <keywords>SEARCH</keywords>
+    <keywords>SECOND</keywords>
+    <keywords>SECONDS</keywords>
+    <keywords>SECQTY</keywords>
+    <keywords>SECTION</keywords>
+    <keywords>SELECT</keywords>    
+    <keywords>SELECTIVITY</keywords>
+    <keywords>SELF</keywords>
+    <keywords>SEQUENCE</keywords>
+    <keywords>SERIALIZABLE</keywords>
+    <keywords>SERVER</keywords>
+    <keywords>SERVER_NAME</keywords>
+    <keywords>SESSION</keywords>
+    <keywords>SESSION_USER</keywords>
+    <keywords>SET</keywords>
+    <keywords>SETS</keywords>    
+    <keywords>SHARE</keywords>
+    <keywords>SHRLEVEL</keywords>
+    <keywords>SIGNAL</keywords>
+    <keywords>SIMPLE</keywords>
+    <keywords>SIZE</keywords>
+    <keywords>SMALLINT</keywords>
+    <keywords>SNAPSHOT</keywords>
+    <keywords>SOME</keywords>
+    <keywords>SOURCE</keywords>
+    <keywords>SPACE</keywords>
+    <keywords>SPECIAL</keywords>
+    <keywords>SPECIFIC</keywords>    
+    <keywords>SQL</keywords>
+    <keywords>SQLCODE</keywords>
+    <keywords>SQLERROR</keywords>
+    <keywords>SQLEXCEPTION</keywords>
+    <keywords>SQLWARNING</keywords>
+    <keywords>SQLID</keywords>    
+    <keywords>SQLSTATE</keywords>    
+    <keywords>START</keywords>
+    <keywords>STATE</keywords>
+    <keywords>STATEMENT</keywords>    
+    <keywords>STATISTICS</keywords>
+    <keywords>STAY</keywords>
+    <keywords>STOGROUP</keywords>
+    <keywords>STORAGE</keywords>
+    <keywords>STORED</keywords>
+    <keywords>STYLE</keywords>
+    <keywords>SUB</keywords>    
+    <keywords>SUBSTRING</keywords>
+    <keywords>SUMMARY</keywords>
+    <keywords>SWITCH</keywords>
+    <keywords>SYNONYM</keywords>
+    <keywords>SYSTEM</keywords>
+    <keywords>SYSTEM_USER</keywords>
+    <keywords>TABLE</keywords>
+    <keywords>TABLES</keywords>
+    <keywords>TABLE_NAME</keywords>
+    <keywords>TABLESPACE</keywords>
+    <keywords>TABLESPACES</keywords>    
+    <keywords>TEMPLATE</keywords>
+    <keywords>TEMPORARY</keywords>
+    <keywords>THEN</keywords>
+    <keywords>THREADSAFE</keywords>    
+    <keywords>TIME</keywords>
+    <keywords>TIMESTAMP</keywords>
+    <keywords>TIMEZONE</keywords>
+    <keywords>TIMEZONE_HOUR</keywords>
+    <keywords>TIMEZONE_MINUTE</keywords>
+    <keywords>TO</keywords>
+    <keywords>TRAILING</keywords>
+    <keywords>TRANSACTION</keywords>    
+    <keywords>TRANSFORM</keywords>    
+    <keywords>TRANSLATE</keywords>
+    <keywords>TRANSLATION</keywords>
+    <keywords>TREAT</keywords>
+    <keywords>TRIGGER</keywords>
+    <keywords>TRIM</keywords>
+    <keywords>TRUE</keywords>
+    <keywords>TYPE</keywords>
+    <keywords>UNBOUNDED</keywords>    
+    <keywords>UNCOMMITTED</keywords>
+    <keywords>UNDER</keywords>
+    <keywords>UNDO</keywords>
+    <keywords>UNICODE</keywords>
+    <keywords>UNION</keywords>
+    <keywords>UNIQUE</keywords>
+    <keywords>UNKNOWN</keywords>    
+    <keywords>UNTIL</keywords>    
+    <keywords>UPDATE</keywords>
+    <keywords>UPPER</keywords>
+    <keywords>URL</keywords>
+    <keywords>USA</keywords>
+    <keywords>USE</keywords>
+    <keywords>USAGE</keywords>
+    <keywords>USER</keywords>
+    <keywords>USING</keywords>
+    <keywords>VALUE</keywords>
+    <keywords>VALUES</keywords>
+    <keywords>VARCHAR</keywords>
+    <keywords>VARGRAPHIC</keywords>
+    <keywords>VARIANT</keywords>
+    <keywords>VARYING</keywords>
+    <keywords>VCAT</keywords>
+    <keywords>VERSION</keywords>
+    <keywords>VIEW</keywords>
+    <keywords>VOLATILE</keywords>
+    <keywords>WHEN</keywords>
+    <keywords>WHENEVER</keywords>
+    <keywords>WHERE</keywords>
+    <keywords>WHILE</keywords>
+    <keywords>WITH</keywords>
+    <keywords>WITHOUT</keywords>
+    <keywords>WORK</keywords>
+    <keywords>WRAPPER</keywords>
+    <keywords>WRITE</keywords>
+    <keywords>YEAR</keywords>
+    <keywords>YEARS</keywords>
+    <keywords>YES</keywords>    
+    <keywords>ZONE</keywords>
+    <operators>&lt;</operators>
+    <operators>&quot;</operators>
+    <operators>%</operators>
+    <operators>&amp;</operators>
+    <operators>''''</operators>
+    <operators>(</operators>
+    <operators>)</operators>
+    <operators>*</operators>
+    <operators>+</operators>
+    <operators>,</operators>
+    <operators>-</operators>
+    <operators>.</operators>
+    <operators>/</operators>
+    <operators>:</operators>
+    <operators>;</operators>
+    <operators>=</operators>
+    <operators>?</operators>
+    <operators>[</operators>
+    <operators>]</operators>
+    <operators>_</operators>
+    <operators>'|'</operators>
+    <operators>,=</operators>
+    <operators>&lt;=</operators>
+    <operators>||</operators>
+    <operators>..</operators>
+    <operators>'-,'</operators>
+    <operators>!</operators>
+    <operators>~</operators>
+    <operators>:=</operators>
+    <operators>{</operators>
+    <operators>}</operators>
+    <operators>(+)</operators>
+  </SQLSyntaxDefinition>
+</DBDefinition:DatabaseVendorDefinition>
diff --git "a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/runtime/vendors/DB2 UDB zSeries_V9/DB2 UDB zSeries_V9 \050New-Function Mode\051.xmi" "b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/runtime/vendors/DB2 UDB zSeries_V9/DB2 UDB zSeries_V9 \050New-Function Mode\051.xmi"
new file mode 100644
index 0000000..b44c1e2
--- /dev/null
+++ "b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition/runtime/vendors/DB2 UDB zSeries_V9/DB2 UDB zSeries_V9 \050New-Function Mode\051.xmi"
@@ -0,0 +1,905 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="DB2 UDB zSeries" version="9 (New-Function Mode)" maximumIdentifierLength="8" viewTriggerSupported="true" maximumCommentLength="64" sequenceSupported="true" mQTSupported="true" aliasSupported="true" SQLStatementSupported="true" synonymSupported="true" userDefinedTypeSupported="true" xmlSupported="true" userSupported="true" roleSupported="true" packageSupported="true">
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="long">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIGINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="BYTE" defaultLength="1048576" maximumLength="2147483647" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_1" lengthSupported="true" defaultLength="1" maximumLength="127" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>GRAPHIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_1" lengthSupported="true" defaultLength="32" maximumLength="16336" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARGRAPHIC</name>
+    <name>VARG</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_2" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARGRAPHIC</name>
+	<name>LONGVARG</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="255" primitiveType="CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR</name>
+    <name>CHARACTER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="BYTE" defaultLength="1048576" maximumLength="2147483647" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CLOB</name>
+    <name>CHARACTER LARGE OBJECT</name>
+    <name>CHAR LARGE OBJECT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_LARGE_OBJECT_1" lengthSupported="true" lengthUnit="DOUBLE_BYTE" defaultLength="1048576" maximumLength="1073741823" primitiveType="NATIONAL_CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DBCLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" defaultLength="32" keyConstraintSupported="true" maximumLength="32704" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR</name>
+    <name>CHARACTER VARYING</name>
+    <name>CHAR VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_2" primitiveType="CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT SQLID</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARCHAR</name>
+    <name>LONGVAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" identitySupported="true" scaleSupported="true" precisionSupported="true" defaultPrecision="5" maximumPrecision="31" defaultScale="0" keyConstraintSupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_2" precisionSupported="true" defaultPrecision="34" maximumPrecision="34" primitiveType="FLOAT" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECFLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" precisionSupported="true" keyConstraintSupported="true" primitiveType="FLOAT" defaultPrecision="53" maximumPrecision="53" cutoffPrecision="22" jdbcEnumType="6" javaClassName="double">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INTEGER</name>
+    <name>INT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" identitySupported="true" scaleSupported="true" precisionSupported="true" defaultPrecision="5" maximumPrecision="31" defaultScale="0" keyConstraintSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+    <name>NUM</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIME_1" keyConstraintSupported="true" primitiveType="TIME" jdbcEnumType="92" javaClassName="java.sql.Time">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP</name>
+    <name>TIMESTMP</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_3" keyConstraintSupported="true" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>ROWID</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" lengthSupported="true" defaultLength="1" displayNameSupported="true" displayName="CHAR ({0}) FOR BIT DATA" keyConstraintSupported="true" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR FOR BIT DATA</name>
+    <name>CHARACTER FOR BIT DATA</name>
+    <name>CHAR () FOR BIT DATA</name>
+    <name>CHARACTER () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_1" lengthSupported="true" defaultLength="1" displayNameSupported="true" displayName="VARCHAR ({0}) FOR BIT DATA" keyConstraintSupported="true" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]">
+    <defaultValueTypes>SYSTEM_DEFAULT</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR FOR BIT DATA</name>
+    <name>CHARACTER VARYING FOR BIT DATA</name>
+    <name>CHAR VARYING FOR BIT DATA</name>
+    <name>VARCHAR () FOR BIT DATA</name>
+    <name>CHARACTER VARYING () FOR BIT DATA</name>
+    <name>CHAR VARYING () FOR BIT DATA</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_2" lengthSupported="true"  defaultLength="1" keyConstraintSupported="true" maximumLength="255" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BINARY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_2" lengthSupported="true"  defaultLength="1" keyConstraintSupported="true" maximumLength="32704" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARBINARY</name>
+    <name>BINARY VARYING</name>
+    <name>VARBIN</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="XML_TYPE_1" primitiveType="XML_TYPE" jdbcEnumType="1111" orderingSupported="false" groupingSupported="false" javaClassName="java.lang.String">
+    <name>XML</name>
+  </predefinedDataTypeDefinitions>
+  <tableSpaceDefinition maximumIdentifierLength="8" typeSupported="true" extentSizeSupported="true" prefetchSizeSupported="true" managedBySupported="true" pageSizeSupported="true" bufferPoolSupported="true">
+    <tableSpaceType>REGULAR</tableSpaceType>
+    <tableSpaceType>LOB</tableSpaceType>
+    <tableSpaceType>LARGE</tableSpaceType>
+  </tableSpaceDefinition>
+  <storedProcedureDefinition maximumIdentifierLength="128" nullInputActionSupported="true" determininsticSupported="true" returnedNullSupported="true" parameterStyleSupported="true">
+    <parameterStyle>SQL</parameterStyle>
+    <parameterStyle>GENERAL</parameterStyle>
+    <parameterStyle>GENERAL_WITH_NULLS</parameterStyle>
+    <parameterStyle>JAVA</parameterStyle>
+    <languageType>SQL</languageType>
+    <languageType>JAVA</languageType>
+    <languageType>C</languageType>
+    <languageType>COBOL</languageType>
+    <languageType>ASSEMBLY</languageType>
+    <languageType>PLI</languageType>
+    <functionLanguageType>SQL</functionLanguageType>
+    <functionLanguageType>JAVA</functionLanguageType>
+    <functionLanguageType>C</functionLanguageType>
+    <functionLanguageType>ASSEMBLY</functionLanguageType>
+    <functionLanguageType>COBOL</functionLanguageType>
+    <functionLanguageType>PLI</functionLanguageType>
+    <procedureType>PROCEDURE</procedureType>
+    <procedureType>FUNCTION</procedureType>
+  </storedProcedureDefinition>
+  <triggerDefinition maximumIdentifierLength="128" whenClauseSupported="true" granularitySupported="true" referencesClauseSupported="true" perColumnUpdateTriggerSupported="true" rowTriggerReferenceSupported="true" tableTriggerReferenceSupported="true"/>
+  <columnDefinition maximumIdentifierLength="30" identitySupported="true" computedSupported="true" identityStartValueSupported="true" identityIncrementSupported="true" identityMinimumSupported="true" identityMaximumSupported="true" identityCycleSupported="true"/>
+  <constraintDefinition maximumPrimaryKeyIdentifierLength="128" maximumForeignKeyIdentifierLength="128" maximumCheckConstraintIdentifierLength="128" clusteredPrimaryKeySupported="true" clusteredUniqueConstraintSupported="true" informationalConstraintSupported="true">
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>RESTRICT</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>SET_NULL</parentDeleteDRIRuleType>
+  </constraintDefinition>
+  <sequenceDefinition predefinedDataTypeDefinitions="BIGINT_1 INTEGER_1 SMALLINT_1 DECIMAL_1" defaultDataTypeDefinition="INTEGER_1" typeEnumerationSupported="true" cacheSupported="true" orderSupported="true" noMaximumValueString="NO MAXVALUE" noMinimumValueString="NO MINVALUE" noCacheString="NO CACHE" cacheDefaultValue="20"/>
+  <udtDefinition distinctTypeSupported="true" structuredTypeSupported="true"/>  
+  <indexDefinition maximumIdentifierLength="128" clusteringSupported="true"/>
+  <queryDefinition hostVariableMarker=":"/>
+  <viewDefinition maximumIdentifierLength="128"/>
+  <tableDefinition maximumIdentifierLength="128"/>
+  <schemaDefinition maximumIdentifierLength="128"/>
+  <privilegedElementDefinitions name="DatabaseInstance">
+  	<privilegeDefinitions name="DBADM"/>
+	<privilegeDefinitions name="DBCTRL"/>
+	<privilegeDefinitions name="DBMAINT"/>
+	<privilegeDefinitions name="CREATETAB"/>
+	<privilegeDefinitions name="CREATETS"/>
+	<privilegeDefinitions name="DISPLAYDB"/>
+	<privilegeDefinitions name="DROP"/>
+	<privilegeDefinitions name="IMAGCOPY"/>
+	<privilegeDefinitions name="LOAD"/>
+	<privilegeDefinitions name="RECOVERDB"/>
+	<privilegeDefinitions name="REORG"/>
+	<privilegeDefinitions name="REPAIR"/>
+	<privilegeDefinitions name="STARTDB"/>
+	<privilegeDefinitions name="STATS"/>
+	<privilegeDefinitions name="STOPDB"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Schema">
+  	<privilegeDefinitions name="ALTERIN"/>
+  	<privilegeDefinitions name="CREATEIN"/>
+    <privilegeDefinitions name="DROPIN"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="PersistentTable">
+  	<privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="REFERENCES" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions name="TRIGGER"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="ViewTable">
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions xmi:id="COLUMN_1" name="Column"/>
+  <privilegedElementDefinitions name="MaterializedQueryTable">
+  	<privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="REFERENCES" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="SELECT"/>
+    <privilegeDefinitions name="TRIGGER"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Routine">
+  	<privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Sequence">
+  	<privilegeDefinitions name="ALTER"/>
+  	<privilegeDefinitions name="USAGE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="UserDefinedType">
+  	<privilegeDefinitions name="USAGE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Tablespace">
+  	<privilegeDefinitions name="USE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="BufferPool">
+  	<privilegeDefinitions name="USE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="StorageGroup">
+  	<privilegeDefinitions name="USE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Package">
+    <privilegeDefinitions name="BIND"/>
+  	<privilegeDefinitions name="COPY"/>
+  	<privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="System">
+	<privilegeDefinitions name="ARCHIVE"/>
+	<privilegeDefinitions name="BINDADD"/>
+	<privilegeDefinitions name="BINDAGENT"/>
+	<privilegeDefinitions name="BSDS"/>
+	<privilegeDefinitions name="CREATEALIAS"/>
+	<privilegeDefinitions name="CREATEDBA"/>
+	<privilegeDefinitions name="CREATEDBC"/>
+	<privilegeDefinitions name="CREATESG"/>
+	<privilegeDefinitions name="CREATETMTAB"/>
+	<privilegeDefinitions name="DISPLAY"/>
+	<privilegeDefinitions name="MONITOR1"/>
+	<privilegeDefinitions name="MONITOR2"/>
+	<privilegeDefinitions name="RECOVER"/>
+	<privilegeDefinitions name="STOPALL"/>
+	<privilegeDefinitions name="STOSPACE"/>
+	<privilegeDefinitions name="SYSADM"/>
+	<privilegeDefinitions name="SYSCTRL"/>
+	<privilegeDefinitions name="SYSOPR"/>
+	<privilegeDefinitions name="TRACE"/>
+  </privilegedElementDefinitions>
+  <SQLSyntaxDefinition terminationCharacter=";">
+    <keywords>ABSOLUTE</keywords>
+    <keywords>ACCESS</keywords>
+    <keywords>ACTION</keywords>
+    <keywords>ACTIVATE</keywords>
+    <keywords>ADA</keywords>
+    <keywords>ADD</keywords>
+    <keywords>AFTER</keywords>
+    <keywords>ALIAS</keywords>
+    <keywords>ALL</keywords>
+    <keywords>ALLOCATE</keywords>
+    <keywords>ALLOW</keywords>
+    <keywords>ALTER</keywords>
+    <keywords>ALTERIN</keywords>
+    <keywords>ALWAYS</keywords>
+    <keywords>AND</keywords>
+    <keywords>ANY</keywords>
+    <keywords>APPEND</keywords>    
+    <keywords>ARE</keywords>
+    <keywords>AS</keywords>
+    <keywords>ASC</keywords>
+    <keywords>ASCII</keywords>
+    <keywords>ASSERTION</keywords>    
+    <keywords>ASSOCIATE</keywords>    
+    <keywords>ASUTIME</keywords>
+    <keywords>AT</keywords>
+    <keywords>ATOMIC</keywords>    
+    <keywords>ATTRIBUTES</keywords>
+    <keywords>AUTHORIZATION</keywords>    
+    <keywords>AUTHID</keywords>
+    <keywords>AUTOMATIC</keywords>    
+    <keywords>AVG</keywords>
+    <keywords>BEFORE</keywords>
+    <keywords>BEGIN</keywords>
+    <keywords>BETWEEN</keywords>    
+    <keywords>BINARY</keywords>
+    <keywords>BIND</keywords>
+    <keywords>BINDADD</keywords>
+    <keywords>BIT</keywords>
+    <keywords>BIT_LENGTH</keywords>
+    <keywords>BLOB</keywords>
+    <keywords>BLOCKED</keywords>
+    <keywords>BOTH</keywords>    
+    <keywords>BUFFERPOOL</keywords>
+    <keywords>BUFFERPOOLS</keywords>    
+    <keywords>BY</keywords>
+    <keywords>C</keywords>
+    <keywords>CACHE</keywords>
+    <keywords>CALL</keywords>
+    <keywords>CALLED</keywords>
+    <keywords>CALLER</keywords>
+    <keywords>CAPTURE</keywords>
+    <keywords>CARDINALITY</keywords>
+    <keywords>CASCADE</keywords>
+    <keywords>CASCADED</keywords>
+    <keywords>CASE</keywords>
+    <keywords>CAST</keywords>
+    <keywords>CATALOG</keywords>
+    <keywords>CATALOG_NAME</keywords>
+    <keywords>CHANGE</keywords>
+    <keywords>CHANGED</keywords>
+    <keywords>CHANGES</keywords>
+    <keywords>CHAR</keywords>
+    <keywords>CHAR_LENGTH</keywords>
+    <keywords>CHARACTER</keywords>
+    <keywords>CHARACTER_LENGTH</keywords>    
+    <keywords>CHECK</keywords>
+    <keywords>CHECKED</keywords>    
+    <keywords>CLIENT</keywords>
+    <keywords>CLOB</keywords>
+    <keywords>CLOSE</keywords>
+    <keywords>CLUSTER</keywords>
+    <keywords>COBOL</keywords>    
+    <keywords>COLLATE</keywords>
+    <keywords>COLLATION</keywords>     
+    <keywords>COLLECT</keywords>
+    <keywords>COLLID</keywords>
+    <keywords>COLUMN</keywords>    
+    <keywords>COMMENT</keywords>
+    <keywords>COMMIT</keywords>
+    <keywords>COMMITTED</keywords>    
+    <keywords>COMPARISONS</keywords>
+    <keywords>CONCAT</keywords>
+    <keywords>CONDITION</keywords>
+    <keywords>CONDITION_NUMBER</keywords>
+    <keywords>CONNECT</keywords>
+    <keywords>CONNECTION</keywords>    
+    <keywords>CONNECTION_NAME</keywords>    
+    <keywords>CONSERVATIVE</keywords>
+    <keywords>CONSTRAINT</keywords>    
+    <keywords>CONSTRAINTS</keywords>    
+    <keywords>CONTAINS</keywords>
+    <keywords>CONTINUE</keywords>
+    <keywords>CONTROL</keywords>
+    <keywords>CONVERT</keywords>
+    <keywords>COPY</keywords>
+    <keywords>CORRELATION</keywords>
+    <keywords>CORR</keywords>
+    <keywords>CORRESPONDING</keywords>
+    <keywords>COUNT</keywords>
+    <keywords>COUNT_BIG</keywords>
+    <keywords>CPU</keywords>
+    <keywords>C++</keywords>
+    <keywords>CREATE</keywords>
+    <keywords>CREATEIN</keywords>    
+    <keywords>CREATETAB</keywords>
+    <keywords>CROSS</keywords>
+    <keywords>CUBE</keywords>
+    <keywords>CURRENT</keywords>
+    <keywords>CURRENT_DATE</keywords>    
+    <keywords>CURRENT_PATH</keywords>    
+    <keywords>CURRENT_SCHEMA</keywords>
+    <keywords>CURRENT_SERVER</keywords>
+    <keywords>CURRENT_SQLID</keywords>
+    <keywords>CURRENT_TIME</keywords>
+    <keywords>CURRENT_TIMESTAMP</keywords>
+    <keywords>CURRENT_TIMEZONE</keywords>
+    <keywords>CURRENT_USER</keywords>    
+    <keywords>CURSOR</keywords>
+    <keywords>CURSORS</keywords>
+    <keywords>CURSOR_NAME</keywords>
+    <keywords>CYCLE</keywords>
+    <keywords>DATE</keywords>
+    <keywords>DATA</keywords>
+    <keywords>DATABASE</keywords>
+    <keywords>DATALINK</keywords>     
+    <keywords>DAY</keywords>
+    <keywords>DAYS</keywords>
+    <keywords>DB</keywords>
+    <keywords>DBADM</keywords>
+    <keywords>DBCLOB</keywords>
+    <keywords>DBINFO</keywords>
+    <keywords>DB2DARI</keywords>
+    <keywords>DB2GENRL</keywords>
+    <keywords>DB2GENERAL</keywords>    
+    <keywords>DB2SQL</keywords>
+    <keywords>DEADLOCKS</keywords>
+    <keywords>DEALLOCATE</keywords>
+    <keywords>DEC</keywords>
+    <keywords>DECIMAL</keywords>
+    <keywords>DECLARE</keywords>
+    <keywords>DEFAULT</keywords>
+    <keywords>DEFAULTS</keywords>
+    <keywords>DEFINE</keywords>
+    <keywords>DEFINITION</keywords>
+    <keywords>DEGREE</keywords>
+    <keywords>DEFER</keywords>
+    <keywords>DEFERRABLE</keywords>
+    <keywords>DEFERRED</keywords>
+    <keywords>DELETE</keywords>
+    <keywords>DESC</keywords>
+    <keywords>DESCRIBE</keywords>
+    <keywords>DESCRIPTOR</keywords>    
+    <keywords>DETERMINISTIC</keywords>    
+    <keywords>DIAGNOSTICS</keywords>
+    <keywords>DIMENSIONS</keywords>
+    <keywords>DISABLE</keywords>
+    <keywords>DISALLOW</keywords>
+    <keywords>DISCONNECT</keywords>
+    <keywords>DISPATCH</keywords>
+    <keywords>DISTINCT</keywords>    
+    <keywords>DOMAIN</keywords>
+    <keywords>DO</keywords>
+    <keywords>DOUBLE</keywords>
+    <keywords>DROP</keywords>
+    <keywords>DROPIN</keywords>    
+    <keywords>DYNAMIC</keywords>    
+    <keywords>EACH</keywords>
+    <keywords>EBCDIC</keywords>
+    <keywords>ELSE</keywords>
+    <keywords>ELSEIF</keywords>
+    <keywords>EMPTY</keywords>
+    <keywords>ENABLE</keywords>
+    <keywords>END</keywords>
+    <keywords>END-EXEC</keywords>
+    <keywords>ERASE</keywords>
+    <keywords>ESCAPE</keywords>
+    <keywords>EUR</keywords>    
+    <keywords>EVENT</keywords>
+    <keywords>EXACT</keywords>
+    <keywords>EXCEPT</keywords>
+    <keywords>EXCEPTION</keywords>
+    <keywords>EXCLUDE</keywords>
+    <keywords>EXCLUDING</keywords>
+    <keywords>EXCLUSIVE</keywords>
+    <keywords>EXEC</keywords>    
+    <keywords>EXECUTE</keywords>
+    <keywords>EXISTS</keywords>
+    <keywords>EXIT</keywords>    
+    <keywords>EXPLAIN</keywords>    
+    <keywords>EXTENDED</keywords>
+    <keywords>EXTENSION</keywords>    
+    <keywords>EXTERNAL</keywords>
+    <keywords>EXTRACT</keywords>
+    <keywords>FALSE</keywords>
+    <keywords>FEDERATED</keywords>
+    <keywords>FENCED</keywords>
+    <keywords>FETCH</keywords>
+    <keywords>FILE</keywords>    
+    <keywords>FINAL</keywords>
+    <keywords>FIRST</keywords>
+    <keywords>FLOAT</keywords>
+    <keywords>FLUSH</keywords>
+    <keywords>FOLLOWING</keywords>
+    <keywords>FOR</keywords>
+    <keywords>FORCE</keywords>
+    <keywords>FOREIGN</keywords>    
+    <keywords>FORTRAN</keywords>
+    <keywords>FOUND</keywords>
+    <keywords>FREEPAGE</keywords>
+    <keywords>FROM</keywords>
+    <keywords>FS</keywords>
+    <keywords>FULL</keywords>
+    <keywords>FUNCTION</keywords>
+    <keywords>G</keywords>
+    <keywords>GBPCACHE</keywords>
+    <keywords>GENERAL</keywords>
+    <keywords>GENERATE</keywords>
+    <keywords>GENERATED</keywords>
+    <keywords>GET</keywords>
+    <keywords>GLOBAL</keywords>
+    <keywords>GO</keywords>
+    <keywords>GOTO</keywords>
+    <keywords>GRANT</keywords>
+    <keywords>GRAPHIC</keywords>
+    <keywords>GROUP</keywords>
+    <keywords>GROUPING</keywords>
+    <keywords>HANDLER</keywords>    
+    <keywords>HAVING</keywords>      
+    <keywords>HOLD</keywords>
+    <keywords>HOUR</keywords>
+    <keywords>HOURS</keywords>
+    <keywords>IDENTITY</keywords>
+    <keywords>IF</keywords>
+    <keywords>IMMEDIATE</keywords>
+    <keywords>IMPLICIT_SCHEMA</keywords>
+    <keywords>IN</keywords>
+    <keywords>INCLUDE</keywords>
+    <keywords>INCLUDING</keywords>
+    <keywords>INCREMENT</keywords>    
+    <keywords>INDEX</keywords>
+    <keywords>INDEXES</keywords>
+    <keywords>INDICATOR</keywords>    
+    <keywords>INHERIT</keywords>
+    <keywords>INITIALLY</keywords>
+    <keywords>INITIAL_INSTS</keywords>
+    <keywords>INITIAL_IOS</keywords>    
+    <keywords>INNER</keywords>
+    <keywords>INOUT</keywords>
+    <keywords>INPUT</keywords>
+    <keywords>INSENSITIVE</keywords>
+    <keywords>INSERT</keywords>    
+    <keywords>INSTEAD</keywords>
+    <keywords>INSTS_PER_ARGBYTE</keywords>
+    <keywords>INSTS_PER_INVOC</keywords>
+    <keywords>INT</keywords>
+    <keywords>INTEGER</keywords>
+    <keywords>INTEGRITY</keywords>
+    <keywords>INTERSECT</keywords>
+    <keywords>INTERVAL</keywords>
+    <keywords>INTO</keywords>    
+    <keywords>IOS_PER_ARGBYTE</keywords>
+    <keywords>IOS_PER_INVOC</keywords>
+    <keywords>IS</keywords>
+    <keywords>ISO</keywords>
+    <keywords>ITERATE</keywords>
+    <keywords>ISOLATION</keywords>
+    <keywords>JAVA</keywords>    
+    <keywords>JIS</keywords>
+    <keywords>JOIN</keywords>
+    <keywords>K</keywords>
+    <keywords>KEY</keywords>
+    <keywords>KEYS</keywords>
+    <keywords>LANGUAGE</keywords>
+    <keywords>LARGE</keywords>
+    <keywords>LAST</keywords>
+    <keywords>LEADING</keywords>
+    <keywords>LEAVE</keywords>
+    <keywords>LEFT</keywords>
+    <keywords>LENGTH</keywords>
+    <keywords>LEVEL</keywords>
+    <keywords>LIBRARY</keywords>
+    <keywords>LIKE</keywords>
+    <keywords>LIMIT</keywords>
+    <keywords>LINK</keywords>
+    <keywords>LINKTYPE</keywords>
+    <keywords>LOAD</keywords>
+    <keywords>LOCAL</keywords>
+    <keywords>LOCATOR</keywords>
+    <keywords>LOCATORS</keywords>
+    <keywords>LOCK</keywords>
+    <keywords>LOCKS</keywords>
+    <keywords>LOCKSIZE</keywords>
+    <keywords>LOGGED</keywords>
+    <keywords>LONG</keywords>
+    <keywords>LONGVAR</keywords>
+    <keywords>LOOP</keywords>
+    <keywords>LOWER</keywords>
+    <keywords>M</keywords>
+    <keywords>MAINTAINED</keywords>    
+    <keywords>MAPPING</keywords>
+    <keywords>MATCH</keywords>
+    <keywords>MAX</keywords>    
+    <keywords>MAXVALUE</keywords>     
+    <keywords>MESSAGE_TEXT</keywords>
+    <keywords>METHOD</keywords>    
+    <keywords>MICROSECOND</keywords>
+    <keywords>MICROSECONDS</keywords>    
+    <keywords>MINUTE</keywords>
+    <keywords>MINUTES</keywords>
+    <keywords>MINVALUE</keywords>
+    <keywords>MIXED</keywords>
+    <keywords>MODE</keywords>
+    <keywords>MODIFIES</keywords>
+    <keywords>MODULE</keywords>
+    <keywords>MONITOR</keywords>
+    <keywords>MONTH</keywords>
+    <keywords>MONTHS</keywords>
+    <keywords>MORE</keywords>    
+    <keywords>NAMED</keywords>
+    <keywords>NAMES</keywords>
+    <keywords>NATIONAL</keywords>
+    <keywords>NATURAL</keywords>
+    <keywords>NCHAR</keywords>
+    <keywords>NEW</keywords>
+    <keywords>NEW_TABLE</keywords>
+    <keywords>NEXT</keywords>
+    <keywords>NEXTVAL</keywords>
+    <keywords>NICKNAME</keywords>
+    <keywords>NO</keywords>
+    <keywords>NOCACHE</keywords>
+    <keywords>NOCYCLE</keywords>
+    <keywords>NODE</keywords>    
+    <keywords>NOMAXVALUE</keywords>
+    <keywords>NOMINVALUE</keywords>    
+    <keywords>NONE</keywords>
+    <keywords>NOORDER</keywords>
+    <keywords>NOT</keywords>
+    <keywords>NULL</keywords>
+    <keywords>NULLABLE</keywords>    
+    <keywords>NULLS</keywords>    
+    <keywords>NUMBER</keywords>
+    <keywords>NUMERIC</keywords>    
+    <keywords>OBJECT</keywords>
+    <keywords>OF</keywords>
+    <keywords>OFF</keywords>
+    <keywords>OLD</keywords>
+    <keywords>OLD_TABLE</keywords>
+    <keywords>OLE</keywords>
+    <keywords>OLEDB</keywords>
+    <keywords>ON</keywords>
+    <keywords>ONCE</keywords>
+    <keywords>ONLINE</keywords>
+    <keywords>ONLY</keywords>
+    <keywords>OPEN</keywords>
+    <keywords>OPTIMIZATION</keywords>
+    <keywords>OPTIMIZE</keywords>
+    <keywords>OPTION</keywords>
+    <keywords>OPTIONS</keywords>
+    <keywords>OR</keywords>
+    <keywords>ORDER</keywords>
+    <keywords>OUT</keywords>
+    <keywords>OUTER</keywords>
+    <keywords>OUTPUT</keywords>
+    <keywords>OVER</keywords>    
+    <keywords>OVERLAPS</keywords>    
+    <keywords>PACKAGE</keywords>
+    <keywords>PAD</keywords>    
+    <keywords>PARTIAL</keywords>
+    <keywords>PARALLEL</keywords>    
+    <keywords>PARAMETER</keywords>
+    <keywords>PASCAL</keywords>
+    <keywords>PASSTHRU</keywords>
+    <keywords>PASSWORD</keywords>
+    <keywords>PATH</keywords>
+    <keywords>PARTITION</keywords>
+    <keywords>PARTITIONING</keywords>    
+    <keywords>PCTFREE</keywords>    
+    <keywords>PERCENT_ARGBYTES</keywords>
+    <keywords>PERMISSION</keywords>
+    <keywords>PIECESIZE</keywords>
+    <keywords>PIPE</keywords>
+    <keywords>PLAN</keywords>
+    <keywords>PLI</keywords>
+    <keywords>POSITION</keywords>
+    <keywords>PRECEDING</keywords>
+    <keywords>PRECISION</keywords>     
+    <keywords>PREPARE</keywords>
+    <keywords>PRESERVE</keywords>
+    <keywords>PRIMARY</keywords>    
+    <keywords>PRIOR</keywords>
+    <keywords>PRIQTY</keywords>
+    <keywords>PRIVILEGES</keywords>
+    <keywords>PROCEDURE</keywords>
+    <keywords>PROGRAM</keywords>    
+    <keywords>PROTOCOL</keywords>
+    <keywords>PUBLIC</keywords>
+    <keywords>QUERY</keywords>
+    <keywords>QUERYNO</keywords>    
+    <keywords>RANGE</keywords>    
+    <keywords>READ</keywords>
+    <keywords>READS</keywords>
+    <keywords>REAL</keywords>
+    <keywords>RECOMMEND</keywords>    
+    <keywords>RECOVERY</keywords>    
+    <keywords>REF</keywords>
+    <keywords>REFERENCE</keywords>
+    <keywords>REFERENCES</keywords>
+    <keywords>REFERENCING</keywords>
+    <keywords>REFRESH</keywords>
+    <keywords>REGISTERS</keywords>    
+    <keywords>RELATIVE</keywords>
+    <keywords>RELEASE</keywords>    
+    <keywords>RENAME</keywords>
+    <keywords>REPEATABLE</keywords>
+    <keywords>REPEAT</keywords>    
+    <keywords>REPLACE</keywords>
+    <keywords>REPLICATED</keywords>
+    <keywords>RESET</keywords>
+    <keywords>RESIDENT</keywords>
+    <keywords>RESIGNAL</keywords>    
+    <keywords>RESOLVE</keywords>
+    <keywords>RESTART</keywords>
+    <keywords>RESTORE</keywords>
+    <keywords>RESTRICT</keywords>
+    <keywords>RESULT</keywords>
+    <keywords>RESULT_SET_LOCATOR</keywords>    
+    <keywords>RETURNED_SQLSTATE</keywords>
+    <keywords>RETAIN</keywords>
+    <keywords>RETURN</keywords>
+    <keywords>RETURNS</keywords>
+    <keywords>RETURN_STATUS</keywords>   
+    <keywords>REVOKE</keywords>
+    <keywords>RIGHT</keywords>
+    <keywords>ROLLBACK</keywords>
+    <keywords>ROLLUP</keywords>
+    <keywords>ROUTINE</keywords>
+    <keywords>ROW</keywords>
+    <keywords>ROW_COUNT</keywords>
+    <keywords>ROWID</keywords>
+    <keywords>ROWS</keywords>
+    <keywords>RUN</keywords>
+    <keywords>S</keywords>    
+    <keywords>SAVEPOINT</keywords>
+    <keywords>SBCS</keywords>
+    <keywords>SCALE</keywords>    
+    <keywords>SCHEMA</keywords>    
+    <keywords>SCOPE</keywords>
+    <keywords>SCRATCHPAD</keywords>
+    <keywords>SCROLL</keywords>
+    <keywords>SEARCH</keywords>
+    <keywords>SECOND</keywords>
+    <keywords>SECONDS</keywords>
+    <keywords>SECQTY</keywords>
+    <keywords>SECTION</keywords>
+    <keywords>SELECT</keywords>    
+    <keywords>SELECTIVITY</keywords>
+    <keywords>SELF</keywords>
+    <keywords>SEQUENCE</keywords>
+    <keywords>SERIALIZABLE</keywords>
+    <keywords>SERVER</keywords>
+    <keywords>SERVER_NAME</keywords>
+    <keywords>SESSION</keywords>
+    <keywords>SESSION_USER</keywords>
+    <keywords>SET</keywords>
+    <keywords>SETS</keywords>    
+    <keywords>SHARE</keywords>
+    <keywords>SHRLEVEL</keywords>
+    <keywords>SIGNAL</keywords>
+    <keywords>SIMPLE</keywords>
+    <keywords>SIZE</keywords>
+    <keywords>SMALLINT</keywords>
+    <keywords>SNAPSHOT</keywords>
+    <keywords>SOME</keywords>
+    <keywords>SOURCE</keywords>
+    <keywords>SPACE</keywords>
+    <keywords>SPECIAL</keywords>
+    <keywords>SPECIFIC</keywords>    
+    <keywords>SQL</keywords>
+    <keywords>SQLCODE</keywords>
+    <keywords>SQLERROR</keywords>
+    <keywords>SQLEXCEPTION</keywords>
+    <keywords>SQLWARNING</keywords>
+    <keywords>SQLID</keywords>    
+    <keywords>SQLSTATE</keywords>    
+    <keywords>START</keywords>
+    <keywords>STATE</keywords>
+    <keywords>STATEMENT</keywords>    
+    <keywords>STATISTICS</keywords>
+    <keywords>STAY</keywords>
+    <keywords>STOGROUP</keywords>
+    <keywords>STORAGE</keywords>
+    <keywords>STORED</keywords>
+    <keywords>STYLE</keywords>
+    <keywords>SUB</keywords>    
+    <keywords>SUBSTRING</keywords>
+    <keywords>SUMMARY</keywords>
+    <keywords>SWITCH</keywords>
+    <keywords>SYNONYM</keywords>
+    <keywords>SYSTEM</keywords>
+    <keywords>SYSTEM_USER</keywords>
+    <keywords>TABLE</keywords>
+    <keywords>TABLES</keywords>
+    <keywords>TABLE_NAME</keywords>
+    <keywords>TABLESPACE</keywords>
+    <keywords>TABLESPACES</keywords>    
+    <keywords>TEMPLATE</keywords>
+    <keywords>TEMPORARY</keywords>
+    <keywords>THEN</keywords>
+    <keywords>THREADSAFE</keywords>    
+    <keywords>TIME</keywords>
+    <keywords>TIMESTAMP</keywords>
+    <keywords>TIMEZONE</keywords>
+    <keywords>TIMEZONE_HOUR</keywords>
+    <keywords>TIMEZONE_MINUTE</keywords>
+    <keywords>TO</keywords>
+    <keywords>TRAILING</keywords>
+    <keywords>TRANSACTION</keywords>    
+    <keywords>TRANSFORM</keywords>    
+    <keywords>TRANSLATE</keywords>
+    <keywords>TRANSLATION</keywords>
+    <keywords>TREAT</keywords>
+    <keywords>TRIGGER</keywords>
+    <keywords>TRIM</keywords>
+    <keywords>TRUE</keywords>
+    <keywords>TYPE</keywords>
+    <keywords>UNBOUNDED</keywords>    
+    <keywords>UNCOMMITTED</keywords>
+    <keywords>UNDER</keywords>
+    <keywords>UNDO</keywords>
+    <keywords>UNICODE</keywords>
+    <keywords>UNION</keywords>
+    <keywords>UNIQUE</keywords>
+    <keywords>UNKNOWN</keywords>    
+    <keywords>UNTIL</keywords>    
+    <keywords>UPDATE</keywords>
+    <keywords>UPPER</keywords>
+    <keywords>URL</keywords>
+    <keywords>USA</keywords>
+    <keywords>USE</keywords>
+    <keywords>USAGE</keywords>
+    <keywords>USER</keywords>
+    <keywords>USING</keywords>
+    <keywords>VALUE</keywords>
+    <keywords>VALUES</keywords>
+    <keywords>VARCHAR</keywords>
+    <keywords>VARGRAPHIC</keywords>
+    <keywords>VARIANT</keywords>
+    <keywords>VARYING</keywords>
+    <keywords>VCAT</keywords>
+    <keywords>VERSION</keywords>
+    <keywords>VIEW</keywords>
+    <keywords>VOLATILE</keywords>
+    <keywords>WHEN</keywords>
+    <keywords>WHENEVER</keywords>
+    <keywords>WHERE</keywords>
+    <keywords>WHILE</keywords>
+    <keywords>WITH</keywords>
+    <keywords>WITHOUT</keywords>
+    <keywords>WORK</keywords>
+    <keywords>WRAPPER</keywords>
+    <keywords>WRITE</keywords>
+    <keywords>YEAR</keywords>
+    <keywords>YEARS</keywords>
+    <keywords>YES</keywords>    
+    <keywords>ZONE</keywords>
+    <operators>&lt;</operators>
+    <operators>&quot;</operators>
+    <operators>%</operators>
+    <operators>&amp;</operators>
+    <operators>''''</operators>
+    <operators>(</operators>
+    <operators>)</operators>
+    <operators>*</operators>
+    <operators>+</operators>
+    <operators>,</operators>
+    <operators>-</operators>
+    <operators>.</operators>
+    <operators>/</operators>
+    <operators>:</operators>
+    <operators>;</operators>
+    <operators>=</operators>
+    <operators>?</operators>
+    <operators>[</operators>
+    <operators>]</operators>
+    <operators>_</operators>
+    <operators>'|'</operators>
+    <operators>,=</operators>
+    <operators>&lt;=</operators>
+    <operators>||</operators>
+    <operators>..</operators>
+    <operators>'-,'</operators>
+    <operators>!</operators>
+    <operators>~</operators>
+    <operators>:=</operators>
+    <operators>{</operators>
+    <operators>}</operators>
+    <operators>(+)</operators>
+  </SQLSyntaxDefinition>
+</DBDefinition:DatabaseVendorDefinition>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/.classpath b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/.gitignore b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/.project b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/.project
new file mode 100644
index 0000000..d56e1d9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.ibm.db2.zseries.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..73f4382
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Fri Apr 13 14:14:14 PDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.4
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..50bc4bd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.datatools.enablement.ibm.db2.zseries.ui;singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-Localization: plugin
+Bundle-Vendor: %providerName
+Export-Package: org.eclipse.datatools.enablement.ibm.db2.zseries.internal.ui,
+ org.eclipse.datatools.enablement.ibm.db2.zseries.internal.ui.drivers
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.ui,
+ org.eclipse.datatools.connectivity,
+ org.eclipse.datatools.connectivity.ui,
+ org.eclipse.datatools.enablement.ibm.db2.zseries,
+ org.eclipse.datatools.enablement.ibm.ui
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/about.html b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/about.html
new file mode 100644
index 0000000..129db9d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/build.properties b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/build.properties
new file mode 100644
index 0000000..3154630
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/build.properties
@@ -0,0 +1,15 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               plugin.properties,\
+               icons/,\
+               about.html
+src.dir	= src/
+plugin.version =	1.0.0.200711021
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/icons/new_db_element.gif b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/icons/new_db_element.gif
new file mode 100644
index 0000000..1d459ce
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/icons/new_db_element.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/plugin.properties b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/plugin.properties
new file mode 100644
index 0000000..9500269
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/plugin.properties
@@ -0,0 +1,16 @@
+###############################################################################
+# Copyright (c) 2006, 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName=Eclipse Data Tools Platform IBM DB2 UDB zSeries UI Plug-in
+providerName=Eclipse Data Tools Platform
+
+profile.db2.zseries.wizard.title = DB2 for z/OS
+profile.db2.zseries.wizard.description = Create a DB2 for z/OS connection profile.
+profile.db2.zseries.properties = Driver Properties
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/plugin.xml b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/plugin.xml
new file mode 100644
index 0000000..a6c2275
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/plugin.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+   
+   <extension
+         point="org.eclipse.datatools.connectivity.connectionProfile">
+      <newWizard
+            class="org.eclipse.datatools.enablement.ibm.db2.zseries.internal.ui.NewZSeriesConnectionProfileWizard"
+            icon="icons/new_db_element.gif"
+            id="org.eclipse.datatools.enablement.ibm.db2.zseries.NewZSeriesConnectionProfileWizard"
+            name="%profile.db2.zseries.wizard.title"
+            description = "%profile.db2.zseries.wizard.description"
+            profile="org.eclipse.datatools.enablement.ibm.db2.zseries.connectionProfile"/>
+   </extension>
+   <extension
+         point="org.eclipse.ui.propertyPages">
+      <page
+            class="org.eclipse.datatools.enablement.ibm.db2.zseries.internal.ui.ZSeriesDBProfilePropertyPage"
+            id="org.eclipse.datatools.enablement.ibm.db2.zseries.profileProperties"
+            name="%profile.db2.zseries.properties"
+            objectClass="org.eclipse.datatools.connectivity.IConnectionProfile">
+         <filter
+               name="org.eclipse.datatools.profile.property.id"
+               value="org.eclipse.datatools.enablement.ibm.db2.zseries.connectionProfile"/>
+      </page>
+   </extension>
+   <extension
+         point="org.eclipse.datatools.connectivity.ui.driverPropertyEditor">
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.db2.zseries.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.db2.zseries.driverTemplate.password">
+      </propertyEditor>
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.db2.zseries.other.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.db2.zseries.other.driverTemplate.password">
+      </propertyEditor>
+   </extension>
+   
+   <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.ibm.db2.zseries.internal.ui.drivers.DB2ZSeriesOtherDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.db2.zseries.other.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.db2.zseries.internal.ui.drivers.DB2ZSeriesOtherDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+      <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.ibm.db2.zseries.internal.ui.drivers.DB2ZSeriesDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.db2.zseries.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.db2.zseries.internal.ui.drivers.DB2ZSeriesDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+ </plugin>  
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/zseries/internal/ui/NewZSeriesConnectionProfileWizard.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/zseries/internal/ui/NewZSeriesConnectionProfileWizard.java
new file mode 100644
index 0000000..3940128
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/zseries/internal/ui/NewZSeriesConnectionProfileWizard.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.zseries.internal.ui;
+
+import org.eclipse.datatools.connectivity.ui.wizards.ExtensibleNewConnectionProfileWizard;
+
+public class NewZSeriesConnectionProfileWizard extends
+		ExtensibleNewConnectionProfileWizard {
+	
+	public NewZSeriesConnectionProfileWizard() {
+		super(new ZSeriesDBProfileDetailsWizardPage("org.eclipse.datatools.enablement.ibm.db2.zseries.internal.ui.ZSeriesDBProfileDetailsWizardPage"));
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/zseries/internal/ui/ZSeriesDBProfileDetailsWizardPage.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/zseries/internal/ui/ZSeriesDBProfileDetailsWizardPage.java
new file mode 100644
index 0000000..6c0c4b4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/zseries/internal/ui/ZSeriesDBProfileDetailsWizardPage.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.zseries.internal.ui;
+
+import org.eclipse.datatools.connectivity.ui.wizards.ExtensibleProfileDetailsWizardPage;
+import org.eclipse.datatools.enablement.ibm.db2.internal.zseries.IZSeriesConnectionProfileConstants;
+
+public class ZSeriesDBProfileDetailsWizardPage 
+	extends ExtensibleProfileDetailsWizardPage{
+
+	public ZSeriesDBProfileDetailsWizardPage(String pageName) {
+		super(pageName, IZSeriesConnectionProfileConstants.DB2_ZSERIES_CATEGORY_ID);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/zseries/internal/ui/ZSeriesDBProfilePropertyPage.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/zseries/internal/ui/ZSeriesDBProfilePropertyPage.java
new file mode 100644
index 0000000..2672612
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/zseries/internal/ui/ZSeriesDBProfilePropertyPage.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.zseries.internal.ui;
+
+import org.eclipse.datatools.connectivity.ui.wizards.ExtensibleProfileDetailsPropertyPage;
+import org.eclipse.datatools.enablement.ibm.db2.internal.zseries.IZSeriesConnectionProfileConstants;
+
+public class ZSeriesDBProfilePropertyPage extends ExtensibleProfileDetailsPropertyPage {
+
+	public ZSeriesDBProfilePropertyPage() {
+		super(IZSeriesConnectionProfileConstants.DB2_ZSERIES_CATEGORY_ID);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/zseries/internal/ui/drivers/DB2ZSeriesDriverUIContributor.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/zseries/internal/ui/drivers/DB2ZSeriesDriverUIContributor.java
new file mode 100644
index 0000000..07c1a87
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/zseries/internal/ui/drivers/DB2ZSeriesDriverUIContributor.java
@@ -0,0 +1,660 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.zseries.internal.ui.drivers;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+import java.util.StringTokenizer;
+
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributor;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributorInformation;
+import org.eclipse.datatools.connectivity.ui.wizards.OptionalPropertiesPane;
+import org.eclipse.datatools.enablement.ibm.db2.internal.zseries.IZSeriesDriverDefinitionConstants;
+import org.eclipse.datatools.enablement.ibm.internal.ui.drivers.IBMJDBCDriverTracingOptionsPane;
+import org.eclipse.datatools.enablement.ibm.internal.ui.drivers.IIBMJDBCDriverProvider;
+import org.eclipse.jface.dialogs.DialogPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.swt.widgets.Text;
+
+public class DB2ZSeriesDriverUIContributor implements IDriverUIContributor,
+		IIBMJDBCDriverProvider, Listener {
+	protected String CUI_NEWCW_DATABASE_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_LOCATION_LBL_UI_");
+
+	private static final String CUI_NEWCW_HOST_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_HOST_LBL_UI_");
+
+	private static final String CUI_NEWCW_PORT_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_PORT_LBL_UI_");
+
+	private static final String CUI_NEWCW_CONNECTIONURL_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_CONNECTIONURL_LBL_UI_");
+
+	private static final String CUI_NEWCW_TBCREATOR_LBL_UI = Messages
+			.getString("CUI_NEWCW_TBCREATOR_LBL_UI");
+
+	private static final String CUI_NEWCW_USERNAME_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_USERNAME_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_PASSWORD_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_PASSWORD_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_SAVE_PASSWORD_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_SAVE_PASSWORD_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_DEFAULT_SCHEMA_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_DEFAULT_SCHEMA_LBL_UI_"); //$NON-NLS-1$
+	
+	private static final String CUI_NEWCW_DEFAULT_SCHEMA_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_DEFAULT_SCHEMA_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+	
+	private static final String CUI_NEWCW_DRIVER_OPTIONS_TAB_UI_ = org.eclipse.datatools.enablement.ibm.internal.ui.drivers.Messages
+			.getString("CUI_NEWCW_DRIVER_OPTIONS_TAB_UI_");
+
+	private static final String CUI_NEWCW_TRACING_OPTIONS_TAB_UI_ = org.eclipse.datatools.enablement.ibm.internal.ui.drivers.Messages
+			.getString("CUI_NEWCW_TRACING_OPTIONS_TAB_UI_");
+
+	private static final String CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_RETRIEVE_OBJECTS_RESTRICTION_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_RETRIEVE_OBJECTS_RESTRICTION_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_URL_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_URL_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private IDriverUIContributorInformation contributorInformation;
+
+	private IBMJDBCDriverTracingOptionsPane tracingOptionsComposite;
+
+	private Label databaseLabel;
+
+	private Text databaseText;
+
+	private Label hostLabel;
+
+	private Text hostText;
+
+	private Label portLabel;
+
+	private Text portText;
+
+	private Label usernameLabel;
+
+	private Text usernameText;
+
+	private Label passwordLabel;
+
+	private Text passwordText;
+
+	private Label defaultSchemaLabel;
+
+	private Text defaultSchemaText;
+	
+	private Button savePasswordButton;
+
+	private Label urlLabel;
+
+	private Text urlText;
+
+	private DialogPage parentPage;
+
+	private ScrolledComposite parentComposite;
+
+	private Button retrieveObjectsRestrictionCheckBox;
+
+	protected String DEFAULT_DATABASE_TEXT = ""; //$NON-NLS-1$
+
+	protected String DEFAULT_HOST_TEXT = ""; //$NON-NLS-1$
+
+	protected String DEFAULT_PORT_TEXT = "446"; //$NON-NLS-1$
+
+	private Properties properties;
+	private String urlOptionalParameters=""; //$NON-NLS-1$
+	
+	private boolean isReadOnly = false;
+	
+	protected OptionalPropertiesPane optionalPropsComposite;
+
+	public boolean determineContributorCompletion() {
+		boolean isComplete = true;
+		if (databaseText.getText().trim().length() < 1) { //$NON-NLS-1$
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_DATABASE_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (hostText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_HOST_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (portText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_PORT_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (usernameText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_USERID_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (passwordText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_PASSWORD_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (!tracingOptionsComposite.validateControl(parentPage)) {
+			isComplete = false;
+		} else if (!optionalPropsComposite.validateControl(parentPage)) {
+            isComplete = false;
+        } 
+
+		if (isComplete) {
+			parentPage.setErrorMessage(null);
+		}
+		return isComplete;
+	}
+
+	public Composite getContributedDriverUI(Composite parent, boolean isReadOnly) {
+		if ((parentComposite == null) || parentComposite.isDisposed() || (this.isReadOnly != isReadOnly)) {
+			GridData gd;
+
+			this.isReadOnly = isReadOnly;
+			int additionalStyles = SWT.NONE;
+			if (isReadOnly){
+				additionalStyles = SWT.READ_ONLY;
+			}
+			
+			parentComposite = new ScrolledComposite(parent, SWT.H_SCROLL
+					| SWT.V_SCROLL);
+			parentComposite.setExpandHorizontal(true);
+			parentComposite.setExpandVertical(true);
+			parentComposite.setLayout(new GridLayout());
+
+			TabFolder tabComposite = new TabFolder(parentComposite, SWT.TOP);
+
+			TabItem driverOptionsTab = new TabItem(tabComposite, SWT.None);
+			driverOptionsTab.setText(CUI_NEWCW_DRIVER_OPTIONS_TAB_UI_);
+
+			TabItem tracingOptionsTab = new TabItem(tabComposite, SWT.None);
+			tracingOptionsTab.setText(CUI_NEWCW_TRACING_OPTIONS_TAB_UI_);
+
+			Composite driverOptionsComposite = new Composite(tabComposite,
+					SWT.NULL);
+			GridLayout layout = new GridLayout();
+			layout.numColumns = 3;
+			driverOptionsComposite.setLayout(layout);
+			driverOptionsTab.setControl(driverOptionsComposite);
+
+			tracingOptionsComposite = new IBMJDBCDriverTracingOptionsPane(
+					tabComposite, SWT.NULL, this, isReadOnly);
+			tracingOptionsTab.setControl(tracingOptionsComposite);
+
+			databaseLabel = new Label(driverOptionsComposite, SWT.NONE);
+			databaseLabel.setText(CUI_NEWCW_DATABASE_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			databaseLabel.setLayoutData(gd);
+
+			databaseText = new Text(driverOptionsComposite, SWT.SINGLE
+					| SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalAlignment = GridData.FILL;
+			gd.horizontalSpan = 2;
+			databaseText.setLayoutData(gd);
+
+			hostLabel = new Label(driverOptionsComposite, SWT.NONE);
+			hostLabel.setText(CUI_NEWCW_HOST_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 1;
+			hostLabel.setLayoutData(gd);
+
+			hostText = new Text(driverOptionsComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 2;
+			gd.grabExcessHorizontalSpace = true;
+			hostText.setLayoutData(gd);
+
+			portLabel = new Label(driverOptionsComposite, SWT.NONE);
+			portLabel.setText(CUI_NEWCW_PORT_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 1;
+			portLabel.setLayoutData(gd);
+
+			portText = new Text(driverOptionsComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			portText.setLayoutData(gd);
+
+			retrieveObjectsRestrictionCheckBox = new Button(
+					driverOptionsComposite, SWT.CHECK);
+			retrieveObjectsRestrictionCheckBox
+					.setText(CUI_NEWCW_TBCREATOR_LBL_UI);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 3;
+			retrieveObjectsRestrictionCheckBox.setLayoutData(gd);
+
+			usernameLabel = new Label(driverOptionsComposite, SWT.NONE);
+			usernameLabel.setText(CUI_NEWCW_USERNAME_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			usernameLabel.setLayoutData(gd);
+
+			usernameText = new Text(driverOptionsComposite, SWT.SINGLE
+					| SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			usernameText.setLayoutData(gd);
+
+			passwordLabel = new Label(driverOptionsComposite, SWT.NONE);
+			passwordLabel.setText(CUI_NEWCW_PASSWORD_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			passwordLabel.setLayoutData(gd);
+
+			passwordText = new Text(driverOptionsComposite, SWT.SINGLE
+					| SWT.BORDER | SWT.PASSWORD | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			passwordText.setLayoutData(gd);
+
+			this.savePasswordButton = new Button(driverOptionsComposite,
+					SWT.CHECK);
+			this.savePasswordButton.setText(CUI_NEWCW_SAVE_PASSWORD_LBL_UI_); //$NON-NLS-1$
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 3;
+			gd.grabExcessHorizontalSpace = true;
+			savePasswordButton.setLayoutData(gd);
+
+			defaultSchemaLabel = new Label(driverOptionsComposite, SWT.NONE);
+			defaultSchemaLabel.setText(CUI_NEWCW_DEFAULT_SCHEMA_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			defaultSchemaLabel.setLayoutData(gd);
+
+			defaultSchemaText = new Text(driverOptionsComposite, SWT.SINGLE
+					| SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			defaultSchemaText.setLayoutData(gd);
+			
+			urlLabel = new Label(driverOptionsComposite, SWT.NONE);
+			urlLabel.setText(CUI_NEWCW_CONNECTIONURL_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 1;
+			urlLabel.setLayoutData(gd);
+
+			urlText = new Text(driverOptionsComposite, SWT.MULTI | SWT.BORDER
+					| SWT.READ_ONLY | SWT.WRAP | SWT.V_SCROLL);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			gd.widthHint = 190;
+			gd.heightHint = 45;
+			urlText.setLayoutData(gd);
+			
+			// add optional properties tab
+	        TabItem optionalPropsTab = new TabItem( tabComposite, SWT.None );
+	        optionalPropsTab.setText( ConnectivityUIPlugin.getDefault()
+	                .getResourceString( "CommonDriverUIContributor.optionaltab" ) ); //$NON-NLS-1$
+            optionalPropsComposite = createOptionalPropertiesPane( tabComposite, SWT.NULL, isReadOnly );
+            optionalPropsTab.setControl( optionalPropsComposite );
+
+			parentComposite.setContent(tabComposite);
+			parentComposite.setMinSize(tabComposite.computeSize(SWT.DEFAULT,
+					SWT.DEFAULT));
+
+			initialize();
+		}
+
+		return parentComposite;
+	}
+
+	public List getSummaryData() {
+		List summaryData = new ArrayList();
+
+		summaryData.add(new String[] { CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_,
+				this.databaseText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_,
+				this.hostText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_,
+				this.portText.getText().trim() });
+		summaryData
+				.add(new String[] {
+						CUI_NEWCW_RETRIEVE_OBJECTS_RESTRICTION_SUMMARY_DATA_TEXT_,
+						retrieveObjectsRestrictionCheckBox.getSelection() ? CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_
+								: CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ });
+		summaryData.add(new String[] { CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_,
+				this.usernameText.getText().trim() });
+		summaryData
+				.add(new String[] {
+						CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_,
+						savePasswordButton.getSelection() ? CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_
+								: CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ });
+		summaryData.add(new String[] {
+				CUI_NEWCW_DEFAULT_SCHEMA_SUMMARY_DATA_TEXT_,
+				this.defaultSchemaText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_URL_SUMMARY_DATA_TEXT_,
+				this.urlText.getText().trim() });
+		return summaryData;
+	}
+
+	public void loadProperties() {
+		removeListeners();
+		DB2JDBCURL url = new DB2JDBCURL(this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID));
+		hostText.setText(url.getNode());
+		portText.setText(url.getPort());
+		databaseText.setText(url.getDatabaseName());
+
+		String tbCreator = this.properties
+				.getProperty(IZSeriesDriverDefinitionConstants.FILTER_ON_TBCREATOR_PROPERTY_ID);
+		if ((tbCreator != null)
+				&& tbCreator
+						.equals(IZSeriesDriverDefinitionConstants.FILTER_ON_TBCREATOR_VALUE_TRUE)) {
+			retrieveObjectsRestrictionCheckBox.setSelection(true);
+		}
+		String username = this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID);
+		if (username != null) {
+			usernameText.setText(username);
+		}
+		String password = this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID);
+		if (password != null) {
+			passwordText.setText(password);
+		}
+		String savePassword = this.properties
+				.getProperty(IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID);
+		if ((savePassword != null)
+				&& Boolean.valueOf(savePassword) == Boolean.TRUE) {
+			savePasswordButton.setSelection(true);
+		}
+		String defaultSchema = this.properties
+		.getProperty(IJDBCConnectionProfileConstants.DEFAULT_SCHEMA_PROP_ID);
+		if (defaultSchema != null) {
+			defaultSchemaText.setText(defaultSchema);
+		}
+		tracingOptionsComposite.loadProperties(url.getProperties());
+		
+		// load optional connection properties
+		optionalPropsComposite.loadProperties();
+		
+		updateURL();
+		addListeners();
+		setConnectionInformation();
+	}
+
+	private void initialize() {
+		updateURL();
+		addListeners();
+	}
+
+	public void setDialogPage(DialogPage parentPage) {
+		this.parentPage = parentPage;
+	}
+
+	public void setDriverUIContributorInformation(
+			IDriverUIContributorInformation contributorInformation) {
+		this.contributorInformation = contributorInformation;
+		this.properties = contributorInformation.getProperties();
+		optionalPropsComposite.setDriverUIContributorInformation( contributorInformation );
+	}
+
+	public void setConnectionInformation() {
+		properties.setProperty(
+				IJDBCDriverDefinitionConstants.DATABASE_NAME_PROP_ID,
+				this.databaseText.getText().trim());
+		properties
+				.setProperty(
+						IZSeriesDriverDefinitionConstants.FILTER_ON_TBCREATOR_PROPERTY_ID,
+						String.valueOf(this.retrieveObjectsRestrictionCheckBox
+								.getSelection()));
+		properties.setProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID,
+				this.passwordText.getText());
+		properties.setProperty(
+				IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID, String
+						.valueOf(savePasswordButton.getSelection()));
+		properties.setProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID,
+				this.usernameText.getText());
+		properties.setProperty(
+				IJDBCConnectionProfileConstants.DEFAULT_SCHEMA_PROP_ID,
+				this.defaultSchemaText.getText().trim());
+		properties.setProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID,
+				this.urlText.getText().trim());
+		
+        optionalPropsComposite.setConnectionInformation();
+        
+		this.contributorInformation.setProperties(properties);
+	}
+
+	public void updateURL() {
+		String url = "jdbc:db2://" + hostText.getText().trim() + ":" //$NON-NLS-1$ //$NON-NLS-2$
+				+ portText.getText().trim()
+				+ "/" + databaseText.getText().trim() //$NON-NLS-1$
+				+ ":retrieveMessagesFromServerOnGetMessage=true;emulateParameterMetaDataForZCalls=1;" //$NON-NLS-1$
+				+ tracingOptionsComposite.getTracingURLProperties();
+		url += getURLOptionalParameters();
+		urlText.setText(url);
+	}
+
+	public void handleEvent(Event event) {
+		if (isReadOnly){
+			if (event.widget == savePasswordButton){
+				savePasswordButton.setSelection(!savePasswordButton.getSelection());
+			} else if 	(event.widget == retrieveObjectsRestrictionCheckBox){
+				retrieveObjectsRestrictionCheckBox.setSelection(!retrieveObjectsRestrictionCheckBox.getSelection());
+			}
+		} else {
+			updateURL();
+			setConnectionInformation();
+		}
+	}
+
+	private void addListeners() {
+		databaseText.addListener(SWT.Modify, this);
+		hostText.addListener(SWT.Modify, this);
+		portText.addListener(SWT.Modify, this);
+		usernameText.addListener(SWT.Modify, this);
+		passwordText.addListener(SWT.Modify, this);
+		savePasswordButton.addListener(SWT.Selection, this);
+		defaultSchemaText.addListener(SWT.Modify, this);
+		retrieveObjectsRestrictionCheckBox.addListener(SWT.Selection, this);
+	}
+
+	private void removeListeners() {
+		databaseText.removeListener(SWT.Modify, this);
+		hostText.removeListener(SWT.Modify, this);
+		portText.removeListener(SWT.Modify, this);
+		usernameText.removeListener(SWT.Modify, this);
+		passwordText.removeListener(SWT.Modify, this);
+		savePasswordButton.removeListener(SWT.Selection, this);
+		defaultSchemaText.removeListener(SWT.Modify, this);
+		retrieveObjectsRestrictionCheckBox.removeListener(SWT.Selection, this);
+	}
+	
+	/**
+	 * Creates an OptionalPropertiesPane.  
+	 * Extenders may override to return an extended composite.
+	 */
+	protected OptionalPropertiesPane createOptionalPropertiesPane( Composite parent, int style, 
+            boolean useReadOnlyControls )
+	{
+	    return new OptionalPropertiesPane( parent, style, useReadOnlyControls );
+	}
+
+	protected class DB2JDBCURL {
+		private String subprotocol = ""; //$NON-NLS-1$
+
+		private String node = ""; //$NON-NLS-1$
+
+		private String port = ""; //$NON-NLS-1$
+
+		private String databaseName = ""; //$NON-NLS-1$
+
+		private String properties = ""; //$NON-NLS-1$
+
+		/**
+		 * @param url
+		 */
+		public DB2JDBCURL(String url) {
+			parseURL(url);
+		}
+
+		/**
+		 * @return Returns the databaseName.
+		 */
+		public String getDatabaseName() {
+			return databaseName;
+		}
+
+		/**
+		 * @return Returns the node.
+		 */
+		public String getNode() {
+			return node;
+		}
+
+		/**
+		 * @return Returns the subprotocol.
+		 */
+		public String getSubprotocol() {
+			return subprotocol;
+		}
+
+		private void parseURL(String url) {
+			try {
+				setURLOptionalParameters(""); //$NON-NLS-1$
+				String remainingURL = url.substring(url.indexOf(':') + 1);
+				this.subprotocol = remainingURL.substring(0, remainingURL
+						.indexOf(':'));
+				remainingURL = remainingURL
+						.substring(remainingURL.indexOf(':') + 3);
+				this.node = remainingURL
+						.substring(0, remainingURL.indexOf('/'));
+				if (this.node.indexOf(':') > -1) {
+					this.port = this.node.substring(this.node.indexOf(':') + 1);
+					this.node = this.node.substring(0, this.node.indexOf(':'));
+				}
+				remainingURL = remainingURL
+						.substring(remainingURL.indexOf('/') + 1);
+				if (remainingURL.indexOf(':') > -1) {
+					this.databaseName = remainingURL.substring(0, remainingURL
+							.indexOf(':'));
+					remainingURL = remainingURL.substring(remainingURL
+							.indexOf(':') + 1);
+					this.properties = remainingURL;
+				} else {
+					this.databaseName = remainingURL;
+				}
+				String userOptionalParameters=""; //$NON-NLS-1$
+				String userParameter = ""; //$NON-NLS-1$
+				if(remainingURL!=null && remainingURL.length()>0)
+				{
+					StringTokenizer st = new StringTokenizer(remainingURL, ";"); //$NON-NLS-1$
+					int tokenLength = st.countTokens();
+					for(int i=0; i< tokenLength; i++)
+					{
+						userParameter = st.nextToken();
+						if(userParameter!=null && userParameter.length()>0){
+							if((!userParameter.startsWith("retrieveMessagesFromServerOnGetMessage"))&&(!userParameter.startsWith("emulateParameterMetaDataForZCalls"))) //$NON-NLS-1$ //$NON-NLS-2$
+								userOptionalParameters +=	userParameter+";"; //$NON-NLS-1$
+																			
+						}
+					
+				}
+
+					setURLOptionalParameters(userOptionalParameters);
+				}
+			} catch (Exception e) {
+			}
+		}
+
+		/**
+		 * @return Returns the port.
+		 */
+		public String getPort() {
+			return port;
+		}
+
+		/**
+		 * @return Returns the properties.
+		 */
+		public String getProperties() {
+			return properties;
+		}
+	}
+	/**
+	 *  Sets the URL optional properties.
+	 */
+	public void setURLOptionalParameters(String connProp)
+	{
+		this.urlOptionalParameters = connProp;
+	}
+	
+	/**
+	 * @return Returns the URL optional properties.
+	 */
+	public String getURLOptionalParameters()
+	{
+		return this.urlOptionalParameters;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/zseries/internal/ui/drivers/DB2ZSeriesOtherDriverUIContributor.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/zseries/internal/ui/drivers/DB2ZSeriesOtherDriverUIContributor.java
new file mode 100644
index 0000000..d9cf1a5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/zseries/internal/ui/drivers/DB2ZSeriesOtherDriverUIContributor.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.zseries.internal.ui.drivers;
+
+import org.eclipse.datatools.connectivity.ui.wizards.OtherDriverUIContributor;
+
+public class DB2ZSeriesOtherDriverUIContributor extends OtherDriverUIContributor {
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/zseries/internal/ui/drivers/Messages.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/zseries/internal/ui/drivers/Messages.java
new file mode 100644
index 0000000..5483f7a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/zseries/internal/ui/drivers/Messages.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.zseries.internal.ui.drivers;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+public class Messages {
+	private static final String BUNDLE_NAME = "org.eclipse.datatools.enablement.ibm.db2.zseries.internal.ui.drivers.messages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private Messages() {
+	}
+
+	public static String getString(String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/zseries/internal/ui/drivers/messages.properties b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/zseries/internal/ui/drivers/messages.properties
new file mode 100644
index 0000000..ed0f760
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui/src/org/eclipse/datatools/enablement/ibm/db2/zseries/internal/ui/drivers/messages.properties
@@ -0,0 +1,42 @@
+###############################################################################
+# Copyright (c) 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+
+#
+## zSeries Driver UI Contributor
+#
+CUI_NEWCW_LOCATION_LBL_UI_ = Locat&ion:
+CUI_NEWCW_HOST_LBL_UI_ = &Host:
+CUI_NEWCW_PORT_LBL_UI_ = Port nu&mber:
+CUI_NEWCW_CONNECTIONURL_LBL_UI_= Connection UR&L:
+CUI_NEWCW_TBCREATOR_LBL_UI = &Retrieve objects created by this user only
+CUI_NEWCW_USERNAME_LBL_UI_ = User n&ame:
+CUI_NEWCW_PASSWORD_LBL_UI_ = Pass&word:
+CUI_NEWCW_DEFAULT_SCHEMA_LBL_UI_ = Default schema:
+CUI_NEWCW_DEFAULT_SCHEMA_SUMMARY_DATA_TEXT_ = Default schema
+CUI_NEWCW_SAVE_PASSWORD_LBL_UI_ = Sa&ve password
+CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_ = Location
+CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_ = Host
+CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_ = Port number
+CUI_NEWCW_RETRIEVE_OBJECTS_RESTRICTION_SUMMARY_DATA_TEXT_ = Retrieve objects created by this user only
+CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_ = User name
+CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_ = Save password
+CUI_NEWCW_URL_SUMMARY_DATA_TEXT_ = URL
+CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_ = true
+CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ = false
+
+CUI_NEWCW_VALIDATE_DATABASE_REQ_UI_ = Enter a location name.
+CUI_NEWCW_VALIDATE_HOST_REQ_UI_= Enter the host name for the database server.
+CUI_NEWCW_VALIDATE_PORT_REQ_UI_ = Enter the connection port number for the database server.
+CUI_NEWCW_VALIDATE_USERID_REQ_UI_ = Enter a user name.
+CUI_NEWCW_VALIDATE_PASSWORD_REQ_UI_ = Enter a password.
+
+
+
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/.classpath b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/.gitignore b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/.project b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/.project
new file mode 100644
index 0000000..667d262
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.ibm.db2.zseries</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..73f4382
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Fri Apr 13 14:14:14 PDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.4
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..77d678c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.datatools.enablement.ibm.db2.zseries;singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-Localization: plugin
+Bundle-Vendor: %providerName
+Export-Package: org.eclipse.datatools.enablement.ibm.db2.internal.zseries
+Require-Bundle: org.eclipse.datatools.connectivity,
+ org.eclipse.datatools.connectivity.sqm.core
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/about.html b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/about.html
new file mode 100644
index 0000000..129db9d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/build.properties b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/build.properties
new file mode 100644
index 0000000..1717542
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/build.properties
@@ -0,0 +1,15 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               plugin.properties,\
+               icons/,\
+               about.html
+src.dir	= src/
+plugin.version =	1.0.0.200706071
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/icons/jdbc_16.gif b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/icons/jdbc_16.gif
new file mode 100644
index 0000000..ef7809c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/icons/jdbc_16.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/plugin.properties b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/plugin.properties
new file mode 100644
index 0000000..9594123
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/plugin.properties
@@ -0,0 +1,29 @@
+###############################################################################
+# Copyright (c) 2006, 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName=Eclipse Data Tools Platform IBM DB2 UDB zSeries Plug-in
+providerName=Eclipse Data Tools Platform
+
+driverClass = Driver Class
+driverVendor = Vendor
+driverVersion = Version
+driverDBName = Database Name
+driverConnectionURL = Connection URL
+filterOnTBCreator = Retrieve Objects Created By This User Only
+driverUID = User ID
+driverPWD = Password
+
+DB2_UDB_ZSERIES_CATEGORY_NAME = DB2 for z/OS
+
+org.eclipse.datatools.enablement.ibm.db2.zseries.driverTemplate = IBM Data Server Driver for JDBC and SQLJ
+org.eclipse.datatools.enablement.ibm.db2.zseries.other.driverTemplate = Other Driver
+
+jdbc.connection.name = JDBC Connection
+profile.db2.zseries.title = DB2 for z/OS
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/plugin.xml b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/plugin.xml
new file mode 100644
index 0000000..c2a5cfa
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/plugin.xml
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.databaseRecognition">
+      <recognizer
+            class="org.eclipse.datatools.enablement.ibm.db2.internal.zseries.ZSeriesDatabaseRecognizer">
+      </recognizer>
+   </extension>
+   <extension
+         point="org.eclipse.datatools.connectivity.connectionProfile">
+      <connectionProfile
+            category="org.eclipse.datatools.connectivity.db.category"
+            configurationType="org.eclipse.datatools.connectivity.db.generic.configurationType"
+            icon="icons/jdbc_16.gif"
+            id="org.eclipse.datatools.enablement.ibm.db2.zseries.connectionProfile"
+            name="%profile.db2.zseries.title"
+            pingFactory="org.eclipse.datatools.enablement.ibm.db2.internal.zseries.JDBCZSeriesConnectionFactory"
+            propertiesPersistenceHook="org.eclipse.datatools.enablement.ibm.db2.internal.zseries.ZSeriesDBPropertiesPersistenceHook"/>
+      <connectionFactory
+            class="org.eclipse.datatools.enablement.ibm.db2.internal.zseries.JDBCZSeriesConnectionFactory"
+            id="java.sql.Connection"
+            name="%jdbc.connection.name"
+            profile="org.eclipse.datatools.enablement.ibm.db2.zseries.connectionProfile"/>
+    </extension>
+
+   
+	<extension
+         point="org.eclipse.datatools.connectivity.driverExtension">    
+         <category
+      		parentCategory="org.eclipse.datatools.connectivity.db.driverCategory"
+            id="org.eclipse.datatools.enablement.ibm.db2.zseries.driverCategory"
+            name="%DB2_UDB_ZSERIES_CATEGORY_NAME"/>
+                 
+      <driverTemplate
+            createDefault="false"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.enablement.ibm.db2.zseries.driverTemplate"
+            jarList="C:\Program Files\IBM\SQLLIB\java\db2jcc.jar;C:\Program Files\IBM\SQLLIB\java\db2jcc_license_cisuz.jar"
+            name="%org.eclipse.datatools.enablement.ibm.db2.zseries.driverTemplate"
+            parentCategory="org.eclipse.datatools.enablement.ibm.db2.zseries.driverCategory">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%driverClass"
+                  value="com.ibm.db2.jcc.DB2Driver"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%driverVendor"
+                  value="DB2 UDB zSeries"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%driverVersion"
+                  value="V9 (New-Function Mode)"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%driverDBName"
+                  value=""
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%driverConnectionURL"
+                  value="jdbc:db2://:446/:retrieveMessagesFromServerOnGetMessage=true;emulateParameterMetaDataForZCalls=1;"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.enablement.ibm.db2.zseries.filterOnTBCreator"
+                  name="%filterOnTBCreator"
+                  value="false"
+                  required="false"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%driverUID"
+                  value=""
+                  required="false"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%driverPWD"
+                  required="false"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+   
+      <driverTemplate
+            createDefault="false"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.enablement.ibm.db2.zseries.other.driverTemplate"
+            jarList=""
+            name="%org.eclipse.datatools.enablement.ibm.db2.zseries.other.driverTemplate"
+            parentCategory="org.eclipse.datatools.enablement.ibm.db2.zseries.driverCategory">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%driverClass"
+                  value=""
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%driverVendor"
+                  value="DB2 UDB zSeries"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%driverVersion"
+                  value="V9 (New-Function Mode)"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%driverDBName"
+                  value=""
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%driverConnectionURL"
+                  value=""
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.enablement.ibm.db2.zseries.filterOnTBCreator"
+                  name="%filterOnTBCreator"
+                  value="false"
+                  required="false"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%driverUID"
+                  value=""
+                  required="false"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%driverPWD"
+                  required="false"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+   </extension>
+ <extension
+       point="org.eclipse.datatools.connectivity.sqm.core.mappings">
+    <providerIDtoDriverCategoryID
+          driverCategoryID="org.eclipse.datatools.enablement.ibm.db2.zseries.driverCategory"
+          providerID="org.eclipse.datatools.enablement.ibm.db2.zseries.connectionProfile">
+    </providerIDtoDriverCategoryID>
+ </extension>
+ </plugin>  
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/zseries/IZSeriesConnectionProfileConstants.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/zseries/IZSeriesConnectionProfileConstants.java
new file mode 100644
index 0000000..fc32b7c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/zseries/IZSeriesConnectionProfileConstants.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.internal.zseries;
+
+
+public interface IZSeriesConnectionProfileConstants {
+
+	public static final String DB2_ZSERIES_CATEGORY_ID = "org.eclipse.datatools.enablement.ibm.db2.zseries.driverCategory"; //$NON-NLS-1$
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/zseries/IZSeriesDriverDefinitionConstants.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/zseries/IZSeriesDriverDefinitionConstants.java
new file mode 100644
index 0000000..4edde2b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/zseries/IZSeriesDriverDefinitionConstants.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.internal.zseries;
+
+public interface IZSeriesDriverDefinitionConstants {
+	public static final String FILTER_ON_TBCREATOR_PROPERTY_ID ="org.eclipse.datatools.enablement.ibm.db2.zseries.filterOnTBCreator"; //$NON-NLS-1$
+	public static final String FILTER_ON_TBCREATOR_VALUE_TRUE ="true"; //$NON-NLS-1$
+	public static final String FILTER_ON_TBCREATOR_VALUE_FALSE ="false"; //$NON-NLS-1$
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/zseries/JDBCZSeriesConnectionFactory.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/zseries/JDBCZSeriesConnectionFactory.java
new file mode 100644
index 0000000..2616fb0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/zseries/JDBCZSeriesConnectionFactory.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.datatools.enablement.ibm.db2.internal.zseries;
+
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionFactory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+
+public class JDBCZSeriesConnectionFactory implements IConnectionFactory {
+
+	public JDBCZSeriesConnectionFactory() {
+		super();
+	}
+
+	public IConnection createConnection(IConnectionProfile profile) {
+		JDBCZSeriesJDBCConnection connection = new JDBCZSeriesJDBCConnection(profile,
+				getClass());
+		connection.open();
+		return connection;
+	}
+
+	public IConnection createConnection(IConnectionProfile profile, String uid,
+			String pwd) {
+		return createConnection(profile);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/zseries/JDBCZSeriesJDBCConnection.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/zseries/JDBCZSeriesJDBCConnection.java
new file mode 100644
index 0000000..5120e93
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/zseries/JDBCZSeriesJDBCConnection.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.internal.zseries;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.SQLException;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.Version;
+import org.eclipse.datatools.connectivity.drivers.jdbc.JDBCConnection;
+import org.eclipse.datatools.connectivity.exceptions.DBNotStartException;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinitionRegistry;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+
+public class JDBCZSeriesJDBCConnection extends JDBCConnection {
+
+	private Version techVersion = Version.NULL_VERSION;
+	private Version serverVersion = Version.NULL_VERSION;
+	private String serverName;
+	
+	public JDBCZSeriesJDBCConnection(IConnectionProfile profile, Class factoryClass) {
+		super(profile, factoryClass);
+	}
+	
+	public String getProviderName() {
+		return serverName;
+	}
+
+	public Version getProviderVersion() {
+		return serverVersion;
+	}
+
+	public Version getTechnologyVersion() {
+		return techVersion;
+	}
+
+	protected void initVersions() {
+		try {
+			DatabaseMetaData dbmd = ((Connection) this.getRawConnection())
+					.getMetaData();
+			try {
+				DatabaseDefinitionRegistry dbDefRegistry = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry();			
+				DatabaseDefinition dbDef = dbDefRegistry.recognize((Connection) this.getRawConnection());
+				if (dbDef != null) {
+					serverName = dbDef.getProductDisplayString() + " " + dbDef.getVersionDisplayString();
+				}
+			} catch (Exception e) {
+			}
+			try {
+				techVersion = new Version(dbmd.getJDBCMajorVersion(), dbmd
+						.getJDBCMinorVersion(), 0, new String());
+			} catch (Exception e) {
+			}
+		} catch (SQLException e) {
+		}
+	}
+	
+	public Throwable getConnectException() {
+		Throwable exception = super.getConnectException();
+		if((exception != null)
+				&&(exception instanceof SQLException)
+				&&(((SQLException)exception).getErrorCode()==-4499)
+				&&(exception.getCause() instanceof java.net.ConnectException)){
+			exception = new DBNotStartException(exception);
+		}
+		return exception ;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/zseries/ZSeriesDBPropertiesPersistenceHook.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/zseries/ZSeriesDBPropertiesPersistenceHook.java
new file mode 100644
index 0000000..0bab555
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/zseries/ZSeriesDBPropertiesPersistenceHook.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.internal.zseries;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.drivers.jdbc.JDBCPasswordPropertyPersistenceHook;
+
+public class ZSeriesDBPropertiesPersistenceHook extends
+		JDBCPasswordPropertyPersistenceHook {
+	
+	public boolean arePropertiesComplete(Properties props) {
+		return super.arePropertiesComplete(props) && areUserNameAndPasswordComplete(props);
+	}
+
+	private boolean areUserNameAndPasswordComplete(Properties props) {
+		String userid = props.getProperty(
+			IJDBCConnectionProfileConstants.USERNAME_PROP_ID, null);
+		String passwd = props.getProperty(
+				IJDBCConnectionProfileConstants.PASSWORD_PROP_ID, null);
+		return userid != null && userid.trim().length() > 0 && passwd != null
+			&& passwd.trim().length() > 0;
+	}
+
+	public String getConnectionPropertiesPageID() {
+		return "org.eclipse.datatools.enablement.ibm.db2.zseries.profileProperties"; //$NON-NLS-1$
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/zseries/ZSeriesDatabaseRecognizer.java b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/zseries/ZSeriesDatabaseRecognizer.java
new file mode 100644
index 0000000..5987821
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2.zseries/src/org/eclipse/datatools/enablement/ibm/db2/internal/zseries/ZSeriesDatabaseRecognizer.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.internal.zseries;
+
+import java.sql.Connection;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.internal.core.definition.DatabaseDefinitionRegistryImpl;
+import org.eclipse.datatools.connectivity.sqm.internal.core.definition.IDatabaseRecognizer;
+
+public class ZSeriesDatabaseRecognizer implements IDatabaseRecognizer {
+    public static final String PRODUCT = "DB2 UDB zSeries"; //$NON-NLS-1$
+	public static final String VERSION7 = "V7"; //$NON-NLS-1$
+	public static final String VERSION8_NewFunctionMode = "V8 (New-Function Mode)"; //$NON-NLS-1$
+	public static final String VERSION8_CompatMode = "V8 (Compatibility Mode)"; //$NON-NLS-1$
+	public static final String VERSION9_NewFunctionMode = "V9 (New-Function Mode)"; //$NON-NLS-1$
+	public static final String VERSION9_CompatMode = "V9 (Compatibility Mode)"; //$NON-NLS-1$
+
+    
+    public DatabaseDefinition recognize(Connection connection) {
+        try {
+            String version = connection.getMetaData().getDatabaseProductVersion();
+            if(version.startsWith("DSN07")) { //$NON-NLS-1$
+                return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, "V7"); //$NON-NLS-1$
+            }
+            else if(version.startsWith("DSN08")) { //$NON-NLS-1$
+                char m = version.charAt(7);
+                if(m > '4') {
+                    return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, "V8 (New-Function Mode)"); //$NON-NLS-1$
+                }
+                else {
+                    return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, "V8 (Compatibility Mode)");                     //$NON-NLS-1$
+                }
+            }
+            else if(version.startsWith("DSN09"))
+            {
+            	char m = version.charAt(7);
+                if(m > '4') {
+                    return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, "V9 (New-Function Mode)"); //$NON-NLS-1$
+                }
+                else {
+                    return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, "V9 (Compatibility Mode)");                     //$NON-NLS-1$
+                }
+            }
+        }
+        catch (Exception e) {
+        }
+
+        return null;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/.classpath b/plugins/org.eclipse.datatools.enablement.ibm.db2/.classpath
new file mode 100644
index 0000000..1fa3e68
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/.project b/plugins/org.eclipse.datatools.enablement.ibm.db2/.project
new file mode 100644
index 0000000..a2e2948
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.ibm.db2</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.enablement.ibm.db2/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..d464175
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/META-INF/MANIFEST.MF
@@ -0,0 +1,27 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.datatools.enablement.ibm.db2;singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Activator: org.eclipse.datatools.enablement.ibm.db2.DB2PluginActivator
+Bundle-Vendor: %providerName
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.datatools.connectivity,
+ org.eclipse.datatools.connectivity.sqm.core,
+ org.eclipse.datatools.enablement.ibm,
+ org.eclipse.datatools.modelbase.sql,
+ org.eclipse.datatools.sqltools.data.core,
+ org.eclipse.emf.ecore.change,
+ org.eclipse.emf.ecore.xmi
+Export-Package: org.eclipse.datatools.enablement.ibm.db2,
+ org.eclipse.datatools.enablement.ibm.db2.catalog,
+ org.eclipse.datatools.enablement.ibm.db2.catalog.util,
+ org.eclipse.datatools.enablement.ibm.db2.containment,
+ org.eclipse.datatools.enablement.ibm.db2.data,
+ org.eclipse.datatools.enablement.ibm.db2.ddl,
+ org.eclipse.datatools.enablement.ibm.db2.model,
+ org.eclipse.datatools.enablement.ibm.db2.model.impl,
+ org.eclipse.datatools.enablement.ibm.db2.model.util,
+ org.eclipse.datatools.enablement.ibm.db2.util
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/about.html b/plugins/org.eclipse.datatools.enablement.ibm.db2/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/build.properties b/plugins/org.eclipse.datatools.enablement.ibm.db2/build.properties
new file mode 100644
index 0000000..cdd2db7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/build.properties
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               about.html,\
+               plugin.properties
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/plugin.properties b/plugins/org.eclipse.datatools.enablement.ibm.db2/plugin.properties
new file mode 100644
index 0000000..b829651
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/plugin.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2014 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName=Eclipse Data Tools Platform IBM DB2 Plug-in
+providerName=Eclipse Data Tools Platform
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/DB2PluginActivator.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/DB2PluginActivator.java
new file mode 100644
index 0000000..dc436b0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/DB2PluginActivator.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentService;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinitionRegistry;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+//bgp import org.eclipse.datatools.enablement.ibm.db2.util.DataToolsCommandManager;
+
+public class DB2PluginActivator extends Plugin {
+
+    private static DB2PluginActivator instance;
+//bgp    private DataToolsCommandManager command = null;
+    public static final String PLUGIN_ID = "org.eclipse.datatools.enablement.ibm.db2"; //$NON-NLS-1$
+    
+    public static DB2PluginActivator getInstance() { return instance; }
+
+    public DB2PluginActivator() {
+        super();
+        instance = this;
+    }
+
+    public DatabaseDefinitionRegistry getDatabaseDefinitionRegistry()
+    {
+        return RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry();
+    }
+    
+    public ContainmentService getContainmentService()
+    {
+        return RDBCorePlugin.getDefault().getContainmentService();
+    }
+    
+//<bgp    public synchronized DataToolsCommandManager getCommandManager ()
+//    {
+//        if (this.command == null)
+//        {
+//            this.command = new DataToolsCommandManager();
+//        }
+//        return this.command;
+//bgp>    }
+    
+    public static void log( Throwable e )
+    {
+        getInstance().getLog().log( (e instanceof CoreException)
+                ? ((CoreException)e).getStatus()
+                : new Status( IStatus.ERROR, PLUGIN_ID, IStatus.OK, e.getMessage(), e ) );
+    }
+
+    public static final int INTERNAL_ERROR = 0x1;
+    public static final int CATALOG_LOAD_ERROR = 0x2;
+
+    public static int enabledLogging = CATALOG_LOAD_ERROR;
+    
+    public static void log( Throwable e, int flags )
+    {
+        if ( (flags & enabledLogging) != 0 )
+        {
+            log( e );
+        }
+    }
+    
+    /**
+     * Method writeLog.
+     * @param severity - the severity; one of IStatus.OK, IStatus.ERROR, IStatus.INFO, or IStatus.WARNING
+     * @param code - the plug-in-specific status code, or OK
+     * @param message - a human-readable message, localized to the current locale
+     * @param exception a low-level exception, or null if not applicable
+     */
+    public void writeLog(int severity, int code, String message, Throwable exception) {
+       if (message == null)
+          message = ""; //$NON-NLS-1$
+
+       getLog().log(
+             new Status(severity, getBundle().getSymbolicName(), code, message, exception));
+    }
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/catalog/JavaProcedureInfo.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/catalog/JavaProcedureInfo.java
new file mode 100644
index 0000000..6b2078b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/catalog/JavaProcedureInfo.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.catalog;
+
+import org.eclipse.datatools.modelbase.sql.routines.Source;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions;
+
+/**
+ * @author yehsh
+ */
+public interface JavaProcedureInfo {
+    public DB2JavaOptions getJavaProcedure(); 
+    public Source getSource();
+    public String getExternalName();
+    /** Get the root package name associated with the SQLJ stored procedure */
+    public String getDB2Package();
+    /** Get the collection name associated with the SQLJ stored procedure */
+    public String getCollectionName();
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/catalog/util/JavaProcedureProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/catalog/util/JavaProcedureProvider.java
new file mode 100644
index 0000000..e74c156
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/catalog/util/JavaProcedureProvider.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.catalog.util;
+
+import java.sql.Connection;
+import org.eclipse.datatools.enablement.ibm.db2.catalog.JavaProcedureInfo;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure;
+
+public interface JavaProcedureProvider {
+    public JavaProcedureInfo getProviderInstance(DB2Procedure sp, Connection connection);
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/catalog/util/JavaProcedureProviderRegistry.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/catalog/util/JavaProcedureProviderRegistry.java
new file mode 100644
index 0000000..5245dba
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/catalog/util/JavaProcedureProviderRegistry.java
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.catalog.util;
+
+import java.sql.Connection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+
+import org.eclipse.datatools.enablement.ibm.db2.catalog.JavaProcedureInfo;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure;
+
+public class JavaProcedureProviderRegistry {
+	public static JavaProcedureProviderRegistry INSTANCE = new JavaProcedureProviderRegistry();
+	private Map providers = new HashMap();
+	private JavaProcedureProvider nullProvider = new JavaProcedureProvider() {
+        public JavaProcedureInfo getProviderInstance(DB2Procedure sp, Connection connection) {
+            return null;   
+        }
+	};
+	
+	public JavaProcedureProvider getProvider(DatabaseDefinition definition) {
+		if(!providers.containsKey(definition)) {
+			providers.put(definition, loadProvider(definition));
+		}
+		return (JavaProcedureProvider) providers.get(definition);
+	}
+	
+	private JavaProcedureProvider loadProvider(DatabaseDefinition def) {
+		IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+		IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("com.ibm.datatools.db2", "javaProcedure"); //$NON-NLS-1$ //$NON-NLS-2$
+		IExtension[] extensions = extensionPoint.getExtensions();
+		for(int i=0; i<extensions.length; ++i) {
+			IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+			for(int j=0; j<configElements.length; ++j) {
+				if(configElements[j].getName().equals("provider")) { //$NON-NLS-1$
+					String product = configElements[j].getAttribute("product"); //$NON-NLS-1$
+					if(product.equals(def.getProduct())) {
+						String version = configElements[j].getAttribute("version"); //$NON-NLS-1$
+						if(version.equals(def.getVersion())) {
+							try {
+								return (JavaProcedureProvider) configElements[j].createExecutableExtension("class"); //$NON-NLS-1$
+							}
+							catch(CoreException e) {
+								e.printStackTrace();
+							}
+						}
+					}
+				}
+			}
+		}
+		
+		return this.nullProvider;
+	}
+	
+	private JavaProcedureProviderRegistry() {
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2AliasContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2AliasContainmentProvider.java
new file mode 100644
index 0000000..29aad41
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2AliasContainmentProvider.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.containment;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Alias;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+
+public class DB2AliasContainmentProvider extends AbstractContainmentProvider  {
+
+	public EObject getContainer(EObject obj) {
+		return ((DB2Alias) obj).getSchema();
+	}
+
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+		return SQLSchemaPackage.eINSTANCE.getSchema_Tables();
+	}
+
+	public String getGroupId(EObject obj) {
+		return DB2GroupID.ALIAS;
+	}
+	
+	public Collection getContainedElements(EObject obj) {
+		  List myList = new ArrayList();
+		  return (Collection)myList;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2GroupID.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2GroupID.java
new file mode 100644
index 0000000..aef5c3e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2GroupID.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.containment;
+
+public interface DB2GroupID {
+	public static final String ALIAS = "core.db2.DB2Alias";  //$NON-NLS-1$
+	public static final String JAR = "core.db2.DB2Jar"; 		 //$NON-NLS-1$
+	public static final String MQT = "core.db2.DB2MaterializedQueryTable";  //$NON-NLS-1$
+	public static final String TEMPTABLE = "core.db2.TemporaryTable";  //$NON-NLS-1$
+	public static final String XMLSCHEMA = "core.db2.DB2XMLSchema";   //$NON-NLS-1$
+	public static final String XMLSCHEMADOC = "core.db2.DB2XMLSchemaDocument";   //$NON-NLS-1$
+	public static final String DB2PACKAGE = "core.db2.DB2Package";   //$NON-NLS-1$
+	public static final String DB2PERMISSION = "core.db2.DB2Permission";   //$NON-NLS-1$
+	public static final String DB2MASK = "core.db2.DB2Mask";   //$NON-NLS-1$
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2JarContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2JarContainmentProvider.java
new file mode 100644
index 0000000..81686d3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2JarContainmentProvider.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.containment;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+/**
+ * @author cdchu
+ * Clifford Chu (cdchu@us.ibm.com)
+ */
+public class DB2JarContainmentProvider extends AbstractContainmentProvider {
+   public Collection getContainedElements(EObject obj) {
+      Collection children = super.getContainedElements(obj);
+      DB2Jar jar = (DB2Jar) obj;
+      children.addAll(jar.getProcedures());
+      return children;
+   }
+   
+   public EObject getContainer(EObject obj) {
+      return ((DB2Jar) obj).getSchema();
+   }
+   
+   public EStructuralFeature getContainmentFeature(EObject obj) {
+      if (this.getContainer(obj) == null)
+         return null;
+      else
+         return DB2ModelPackage.eINSTANCE.getDB2Schema_Jars();
+   }
+   
+   public String getGroupId(EObject obj) {
+      if(obj instanceof DB2Jar) {
+         return DB2GroupID.JAR;
+      }
+      
+      return null;
+   }	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2MQTContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2MQTContainmentProvider.java
new file mode 100644
index 0000000..73cfdad
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2MQTContainmentProvider.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.containment;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class DB2MQTContainmentProvider extends AbstractContainmentProvider {
+	public Collection getContainedElements(EObject obj) {
+		Collection children = super.getContainedElements(obj);
+		DB2MaterializedQueryTable table = (DB2MaterializedQueryTable) obj;
+		children.addAll(table.getIndex());
+		children.addAll(table.getTriggers());
+		children.addAll(table.getPermissions());
+		children.addAll(table.getMasks());
+		return children;
+	}
+
+	public EObject getContainer(EObject obj) {
+		return ((DB2MaterializedQueryTable) obj).getSchema();
+	}
+
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+		return SQLSchemaPackage.eINSTANCE.getSchema_Tables();
+	}
+	
+	public String getGroupId(EObject obj) {
+		return DB2GroupID.MQT;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2MaskContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2MaskContainmentProvider.java
new file mode 100644
index 0000000..322bc79
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2MaskContainmentProvider.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.containment;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class DB2MaskContainmentProvider extends AbstractContainmentProvider {
+	public EObject getContainer(EObject obj) 
+	{
+		DB2Mask mask = (DB2Mask)obj;
+		return mask.getSubjectTable() != null ? 
+				mask.getSubjectTable() : mask.getSubjectMQT();
+	}
+	public EStructuralFeature getContainmentFeature(EObject obj) 
+	{
+		DB2Mask mask = (DB2Mask)obj;
+		return mask.getSubjectTable() != null ? 
+				DB2ModelPackage.eINSTANCE.getDB2Table_Masks() :
+				DB2ModelPackage.eINSTANCE.getDB2MaterializedQueryTable_Masks();
+	}
+
+	public String getGroupId(EObject obj) {
+		return DB2GroupID.DB2MASK;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2PackageContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2PackageContainmentProvider.java
new file mode 100644
index 0000000..bafb5c1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2PackageContainmentProvider.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.containment;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Package;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class DB2PackageContainmentProvider extends AbstractContainmentProvider {
+
+	public EObject getContainer(EObject obj) {
+		return ((DB2Package) obj).getSchema();
+	}
+
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+        return DB2ModelPackage.eINSTANCE.getDB2Schema_Packages();
+	}
+	
+	public String getGroupId(EObject obj) {
+		return DB2GroupID.DB2PACKAGE;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2PermissionContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2PermissionContainmentProvider.java
new file mode 100644
index 0000000..94d4353
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2PermissionContainmentProvider.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.containment;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class DB2PermissionContainmentProvider extends AbstractContainmentProvider 
+{
+	public EObject getContainer(EObject obj) 
+	{
+		DB2Permission permission = (DB2Permission)obj;
+		return permission.getSubjectTable() != null ? 
+				permission.getSubjectTable() : permission.getSubjectMQT();
+	}
+	
+	public EStructuralFeature getContainmentFeature(EObject obj) 
+	{
+		DB2Permission permission = (DB2Permission)obj;
+		return permission.getSubjectTable() != null ? 
+				DB2ModelPackage.eINSTANCE.getDB2Table_Permissions() :
+				DB2ModelPackage.eINSTANCE.getDB2MaterializedQueryTable_Permissions();
+	}
+
+	public String getGroupId(EObject obj) 
+	{
+		return DB2GroupID.DB2PERMISSION;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2SchemaContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2SchemaContainmentProvider.java
new file mode 100644
index 0000000..16513f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2SchemaContainmentProvider.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.containment;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.sqm.internal.core.containment.SchemaContainmentProvider;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema;
+import org.eclipse.emf.ecore.EObject;
+
+public class DB2SchemaContainmentProvider extends SchemaContainmentProvider {
+	public Collection getContainedElements(EObject obj) {
+		Collection children = super.getContainedElements(obj);
+		DB2Schema schema = (DB2Schema) obj;
+		children.addAll(schema.getOlapObjects());
+		children.addAll(schema.getJars());		
+		children.addAll(schema.getXsrObjects());
+		children.addAll(schema.getPackages());
+		children.addAll(schema.getModules());
+		children.addAll(schema.getGlobalVariables());
+		return children;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2TableContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2TableContainmentProvider.java
new file mode 100644
index 0000000..2bef2ac
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2TableContainmentProvider.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.containment;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.sqm.internal.core.containment.TableContainmentProvider;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Table;
+import org.eclipse.emf.ecore.EObject;
+
+public class DB2TableContainmentProvider extends TableContainmentProvider {
+	public Collection getContainedElements(EObject obj) {
+		Collection children = super.getContainedElements(obj);
+		DB2Table table = (DB2Table) obj;
+		children.addAll(table.getPermissions());
+		children.addAll(table.getMasks());
+		return children;
+	}	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2XMLSchemaContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2XMLSchemaContainmentProvider.java
new file mode 100644
index 0000000..ca9f0b1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2XMLSchemaContainmentProvider.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.containment;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchema;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * @author debbani
+ */
+public class DB2XMLSchemaContainmentProvider extends
+		AbstractContainmentProvider {
+	   public Collection getContainedElements(EObject obj) {
+	      // causes bug that sometimes shows duplicate entries,
+	      // so disabled super call
+	      // Collection children = super.getContainedElements(obj);
+          DB2XMLSchema xmlSchema = (DB2XMLSchema) obj;
+	      Collection children = xmlSchema.getXmlSchemaDocs();
+	      return children;
+	   }
+	   
+	   public EObject getContainer(EObject obj) {
+	      return ((DB2XMLSchema) obj).getSchema();
+	   }
+	   
+	   public String getGroupId(EObject obj) {
+	      if(obj instanceof DB2XMLSchema) {
+	         return DB2GroupID.XMLSCHEMA;
+	      }	      
+	      return null;
+	   }	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2XMLSchemaDocumentContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2XMLSchemaDocumentContainmentProvider.java
new file mode 100644
index 0000000..0ebe35f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/containment/DB2XMLSchemaDocumentContainmentProvider.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.containment;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * @author debbani
+ */
+public class DB2XMLSchemaDocumentContainmentProvider 
+				extends AbstractContainmentProvider 
+{
+	   public Collection getContainedElements(EObject obj) {
+	      Collection children = super.getContainedElements(obj);
+	      return children;
+	   }
+	   
+	   public EObject getContainer(EObject obj) {
+	      return ((DB2XMLSchemaDocument) obj).getXmlSchema();
+	   }
+	   
+	   public String getGroupId(EObject obj) {
+	      if(obj instanceof DB2XMLSchemaDocument) {
+	         return DB2GroupID.XMLSCHEMADOC;
+	      }	      
+	      return null;
+	   }	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/data/DatalinkAccessor.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/data/DatalinkAccessor.java
new file mode 100644
index 0000000..a27f7ee
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/data/DatalinkAccessor.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.data;
+
+import org.eclipse.datatools.sqltools.data.internal.core.common.DefaultColumnDataAccessor;
+
+
+public class DatalinkAccessor extends DefaultColumnDataAccessor {
+
+	public String getSelectExpr() {
+		String col = super.getSelectExpr();
+        return "DLURLCOMPLETEONLY(" + col + ")";
+	}
+    
+	public boolean supportsInlineEdit() {		
+		return false;
+	}
+    
+    
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/data/DistinctAccessor.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/data/DistinctAccessor.java
new file mode 100644
index 0000000..d0b8fc8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/data/DistinctAccessor.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.data;
+
+import org.eclipse.datatools.sqltools.data.internal.core.common.DefaultColumnDataAccessor;
+import org.eclipse.datatools.sqltools.data.internal.core.editor.TableDataImpl;
+
+public class DistinctAccessor extends DefaultColumnDataAccessor
+{
+	public String getWhereCond(Object val)
+    {
+    	String s = getQuotedColumnName();
+        if (val==null) {
+            s += " is null"; //$NON-NLS-1$   	
+	    } 
+        else {
+//        	A parameter marker cannot have a user-defined type or reference type as its data type 
+//        	unless it is part of an assignment (VALUES clause of INSERT or SET clause of UPDATE) or 
+//        	it is being explicitly cast to a user-defined distinct data type.
+	    	s += "=CAST(? AS "; //$NON-NLS-1$
+            s += TableDataImpl.getFormattedTypeName(sqlCol) + ")"; //$NON-NLS-1$ //$NON-NLS-2$       }
+        }
+        return s;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/ddl/DB2DataPreservationDdlBuilder.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/ddl/DB2DataPreservationDdlBuilder.java
new file mode 100644
index 0000000..3bfc226
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/ddl/DB2DataPreservationDdlBuilder.java
@@ -0,0 +1,568 @@
+/*******************************************************************************

+ * Copyright (c) 2014 IBM Corporation and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.datatools.enablement.ibm.db2.ddl;

+

+import java.util.ArrayList;

+import java.util.HashMap;

+import java.util.Iterator;

+import java.util.Map;

+

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Column;

+import org.eclipse.datatools.enablement.ibm.db2.model.GenerateType;

+import org.eclipse.datatools.enablement.ibm.ddl.DdlGenerationUtility;

+import org.eclipse.datatools.enablement.ibm.util.SimpleColumnDetails;

+import org.eclipse.datatools.modelbase.sql.expressions.ValueExpression;

+import org.eclipse.datatools.modelbase.sql.schema.Schema;

+import org.eclipse.datatools.modelbase.sql.tables.Column;

+import org.eclipse.datatools.modelbase.sql.tables.Table;

+

+public class DB2DataPreservationDdlBuilder extends DB2DdlBuilder {

+

+	protected static final String COMMENT_DELIMITER    = "--"; //$NON-NLS-1$

+	protected final static String RENAME           	   = "RENAME"; //$NON-NLS-1$

+	protected final static String INSERT           	   = "INSERT"; //$NON-NLS-1$

+	protected final static String INTO             	   = "INTO"; //$NON-NLS-1$

+	protected final static String SELECT           	   = "SELECT"; //$NON-NLS-1$

+    protected final static String BACKUP_SUFFIX    	   = "_BU"; //$NON-NLS-1$

+    protected static final String DECIMAL              = "DECIMAL"; //$NON-NLS-1$

+    protected static final String REAL                 = "REAL"; //$NON-NLS-1$

+    protected static final String INTEGER              = "INTEGER"; //$NON-NLS-1$

+    protected static final String BIGINT               = "BIGINT"; //$NON-NLS-1$

+    protected static final String SMALLINT             = "SMALLINT"; //$NON-NLS-1$

+    protected static final String GRAPHIC              = "GRAPHIC"; //$NON-NLS-1$

+    protected static final String CHAR                 = "CHAR"; //$NON-NLS-1$

+	protected static final String TIMESTAMP            = "TIMESTAMP"; //$NON-NLS-1$

+	protected static final String TIME                 = "TIME"; //$NON-NLS-1$

+	protected static final String DATE                 = "DATE"; //$NON-NLS-1$

+	protected static final String DOUBLE               = "DOUBLE"; //$NON-NLS-1$

+	protected static final String XML                  = "XML"; //$NON-NLS-1$

+	protected static final String RENAME_TABLE_COMMENT = "Renaming table to maintain a backup"; //$NON-NLS-1$

+	protected static final String POPULATE_COMMENT     = "Populating table from backup using optimistic transformations"; //$NON-NLS-1$

+	protected static final String RESTART_IDENTITY_COMMENT = "Replace <restart value placeholder> with an appropriate value"; //$NON-NLS-1$

+	protected static final String DROP_BACKUP_COMMENT  = "Dropping backup table"; //$NON-NLS-1$

+	protected static final String UPDATE_NULL_COLUMNS_COMMENT = "Update columns changed to NOT NULL with default"; //$NON-NLS-1$

+

+	protected Map backupTableMap = new HashMap();

+	

+	/**

+     * Get the name of the backup table.

+     * @param table

+     * @param quoteIdentifiers

+     * @param qualifyNames

+     * @return

+     */

+    protected String getNewBackupName(Table table, boolean quoteIdentifiers, boolean qualifyNames) {

+        String tableNamePrefix = table.getName() + BACKUP_SUFFIX;

+        Schema schema = table.getSchema();

+        String schemaName = schema.getName();

+

+        String tableName = DdlGenerationUtility.getUniqueTableName(schema,tableNamePrefix);

+        backupTableMap.put(tableNamePrefix,tableName);

+        

+        if(quoteIdentifiers) {

+            tableName = this.getDoubleQuotedString(tableName);

+            schemaName = this.getDoubleQuotedString(schemaName);

+        }

+

+        if(qualifyNames) {

+            tableName = schemaName + DOT + tableName;

+        }

+    

+        return tableName;

+    }

+

+    protected String getExistingBackupName(String schemaName,String tablename,boolean quoteIdentifiers, boolean qualifyNames) {

+        String tableNamePrefix = tablename + BACKUP_SUFFIX;

+        String tableName = (String)backupTableMap.get(tableNamePrefix);

+        if(quoteIdentifiers) {

+            tableName = this.getDoubleQuotedString(tableName);

+            schemaName = this.getDoubleQuotedString(schemaName);

+        }

+        if(qualifyNames) {

+            tableName = schemaName + DOT + tableName;

+        }

+        return tableName;

+    }

+

+    public String renameTableToBackup(Table table, boolean quoteIdentifiers, boolean qualifyNames) {

+        String statement = RENAME + SPACE + TABLE + SPACE + getName(table, quoteIdentifiers, qualifyNames) + SPACE + TO + SPACE;

+        String backupTableName = getNewBackupName(table,quoteIdentifiers,false);

+        return (statement + backupTableName);

+    }

+

+    public String getRenameComment() {

+    	return NEWLINE + COMMENT_DELIMITER + SPACE + RENAME_TABLE_COMMENT;

+    }

+

+    public String getUpdateComment() {

+    	return NEWLINE + COMMENT_DELIMITER + SPACE + UPDATE_NULL_COLUMNS_COMMENT;

+    }

+

+    public String getSuspendGenerateAlwaysStatement(Table newTable,Column idColumn,boolean quoteIdentifiers, boolean qualifyNames) {

+    	String statement = null;

+    	if (idColumn.getIdentitySpecifier() != null) {

+    		statement = ALTER + SPACE + TABLE + SPACE + getName(newTable, quoteIdentifiers, qualifyNames)

+    				+ SPACE + ALTER + SPACE + COLUMN + SPACE + getName(idColumn, quoteIdentifiers,false)

+    				+ " SET GENERATED BY DEFAULT";

+    	}

+    	else {

+    		statement = ALTER + SPACE + TABLE + SPACE + getName(newTable, quoteIdentifiers, qualifyNames)

+			+ SPACE + ALTER + SPACE + COLUMN + SPACE + getName(idColumn, quoteIdentifiers,false)

+			+ " DROP EXPRESSION";

+    	}

+    	return statement;

+    }

+    

+    public String getSetGenerateAlwaysStatement(Table newTable,Column idColumn,boolean quoteIdentifiers, boolean qualifyNames) {

+    	String statement = ALTER + SPACE + TABLE + SPACE + getName(newTable, quoteIdentifiers, qualifyNames)

+    			+ SPACE + ALTER + SPACE + COLUMN + SPACE + getName(idColumn, quoteIdentifiers,false)

+    			+ " SET GENERATED ALWAYS";

+    	ValueExpression genExp = idColumn.getGenerateExpression();

+    	if (genExp != null) {

+    		statement += SPACE + AS + SPACE + LEFT_PARENTHESIS + genExp.getSQL() + RIGHT_PARENTHESIS;

+    	}

+    	return statement;

+    }

+    

+    public String getRestartIdentityComment() {

+    	return NEWLINE + COMMENT_DELIMITER + SPACE + RESTART_IDENTITY_COMMENT;

+    }

+    

+    public String getRestartIdentityStatement(Table newTable,Column idColumn,boolean quoteIdentifiers, boolean qualifyNames) {

+    	String statement = COMMENT_DELIMITER + SPACE + ALTER + SPACE + TABLE + SPACE + getName(newTable, quoteIdentifiers, qualifyNames)

+    			+ SPACE + ALTER + SPACE + COLUMN + SPACE + getName(idColumn, quoteIdentifiers,false)

+    			+ " RESTART WITH " + "<restart value placeholder>";

+    	return statement;

+    }

+

+    public ArrayList getAlwaysGeneratedColumns(Table table) {

+    	ArrayList genColumns = new ArrayList();

+    	Iterator it = table.getColumns().iterator();

+    	while (it.hasNext()) {

+    		DB2Column column = (DB2Column)it.next();

+    		// A column is not really generate ALWAYS unless an expression 

+    		// or identity specifier is provided

+    		if ((column.getGenerationType() == GenerateType.ALWAYS_LITERAL)

+    				&&((column.getGenerateExpression() != null) || //

+    						column.getIdentitySpecifier() != null)) {

+    			genColumns.add(column);

+    		}

+    	}

+    	return genColumns;

+    }

+    

+    public String populateTableFromBackup(Table newTable, String oldTableName, Map oldColumns, boolean quoteIdentifiers, boolean qualifyNames) {

+    	StringBuffer statement = new StringBuffer(COMMENT_DELIMITER + SPACE + INSERT + SPACE + INTO + SPACE + getName(newTable, quoteIdentifiers, qualifyNames) + LEFT_PARENTHESIS);

+    	Iterator it = newTable.getColumns().iterator();

+    	boolean firstColumn = true;

+    	while (it.hasNext()) {

+    		Column newColumn = (Column)it.next();

+    		SimpleColumnDetails oldColDetails = (SimpleColumnDetails)oldColumns.get(newColumn);

+    		if (oldColDetails == null) continue;

+    		if (!firstColumn) statement.append(COMMA);

+			firstColumn = false;

+    		statement.append(getName(newColumn, quoteIdentifiers, false));

+    	}

+    	statement.append(RIGHT_PARENTHESIS + SPACE + SELECT + SPACE);

+    	it = newTable.getColumns().iterator();

+    	firstColumn = true;

+    	while (it.hasNext()) {

+    		Column newColumn = (Column)it.next();

+    		SimpleColumnDetails newColDetails = new SimpleColumnDetails(newColumn);

+    		SimpleColumnDetails oldColDetails = (SimpleColumnDetails)oldColumns.get(newColumn);

+    		if (oldColDetails == null) continue;

+    		if (!firstColumn) statement.append(COMMA);

+			firstColumn = false;

+    		String xformedColumn = getXformBackupColumn(

+    				quoteIdentifiers?getDoubleQuotedString(oldColDetails.name):oldColDetails.name,

+    				oldColDetails.type,newColDetails.type,

+    				oldColDetails.length,newColDetails.length,

+    				oldColDetails.scale,newColDetails.scale);

+    		statement.append(xformedColumn);

+    	}

+    	statement.append(SPACE + FROM + SPACE + 

+    			getExistingBackupName(newTable.getSchema().getName(),oldTableName,quoteIdentifiers,qualifyNames));

+    	return statement.toString();

+    }

+

+    public String getPopulateComment() {

+    	return NEWLINE + COMMENT_DELIMITER + SPACE + POPULATE_COMMENT;

+    }

+    

+    public String dropBackupTable(Table oldTable, boolean quoteIdentifiers, boolean qualifyNames) {

+    	StringBuffer statement = new StringBuffer(COMMENT_DELIMITER + SPACE + DROP + SPACE + TABLE + SPACE);

+    	statement.append(getExistingBackupName(oldTable.getSchema().getName(),oldTable.getName(),quoteIdentifiers,qualifyNames));

+    	return statement.toString();

+    }

+    

+    public String dropBackupTable(String oldSchema, String oldName, boolean quoteIdentifiers, boolean qualifyNames) {

+    	StringBuffer statement = new StringBuffer(COMMENT_DELIMITER + SPACE + DROP + SPACE + TABLE + SPACE);

+    	statement.append(getExistingBackupName(oldSchema, oldName, quoteIdentifiers, qualifyNames));

+    	return statement.toString();

+    }

+    

+    public String getDropBackupComment() {

+    	return NEWLINE + COMMENT_DELIMITER + SPACE + DROP_BACKUP_COMMENT;

+    }

+    

+	/* 

+	 * Get the substring which transforms a changed column for the DML

+	 * used to move data from the backed up table to the newly created table.

+	 * The intent here is not to ensure that the transformation will work for

+	 * all values in the backed up table, but to provide a solution which

+	 * will move the data assuming that all the original data can be

+	 * presented without compromise into the new version of the table.

+	 */

+	public String getXformBackupColumn(String backupColumnName, String type1, String type2, int length1, int length2, int scale1, int scale2) {

+		if(type1.equals(SMALLINT)) {

+			// SMALLINT range: -32 768 to +32 767

+			//

+			// Any character string of length 6 or greater

+			if (isCharacterStringType(type2)) {

+				return getGeneratedNumberToStringXformExpression(backupColumnName,type2,length2);

+			}

+			// DECIMAL (precision less than 15)

+			else if (type2.equals(DECIMAL)) {

+				return getGeneratedDecimalFunctionExpression(backupColumnName,length2,scale2);

+			}

+		}

+		else if(type1.equals(INTEGER)) {

+			// INTEGER range: -2 147 483 648 to +2 147 483 647

+			//

+			// Any character string of length 11 or greater

+			if (isCharacterStringType(type2)) {

+				return getGeneratedNumberToStringXformExpression(backupColumnName,type2,length2);

+			}

+			// SMALLINT, REAL

+			else if ((type2.equals(SMALLINT)) 

+					|| (type2.equals(REAL))) {

+				return getGeneratedScalarFunctionExpression(type2,backupColumnName);

+			}

+			// DECIMAL

+			else if (type2.equals(DECIMAL)) {

+				return getGeneratedDecimalFunctionExpression(backupColumnName,length2,scale2);

+			}

+		}

+		else if(type1.equals(BIGINT)) {

+			// BIGINT range: -9 223 372 036 854 775 80  to +9 223 372 036 854 775 807

+			//

+			// Any character string of length 11 or greater

+			if (isCharacterStringType(type2)) {

+				return getGeneratedNumberToStringXformExpression(backupColumnName,type2,length2);

+			}

+			// SMALLINT, REAL

+			else if ((type2.equals(SMALLINT)) 

+					|| (type2.equals(INTEGER))

+					|| (type2.equals(REAL))) {

+				return getGeneratedScalarFunctionExpression(type2,backupColumnName);

+			}

+			// DECIMAL

+			else if (type2.equals(DECIMAL)) {

+				return getGeneratedDecimalFunctionExpression(backupColumnName,length2,scale2);

+			}

+		}

+		else if(type1.equals(REAL)) {

+			// 32 bit floating point number; 

+			//   range -7.2E+75 to 7.2E+75

+			//         -5.4E-79 to 5.4E-79

+			//

+			// Character string, minimum length 8

+			//   4 characters for exponent representation (i.e., 'E-79')

+			//   4 characters minimum for mantissa representation  (i.e., '-5.4')

+			if (isCharacterStringType(type2)) {

+				return getGeneratedNumberToStringXformExpression(backupColumnName,type2,length2);

+			}

+			// SMALLINT, INTEGER, BIGINT

+			else if ((type2.equals(SMALLINT))

+					|| (type2.equals(INTEGER))

+					|| (type2.equals(BIGINT))) {

+				return getGeneratedScalarFunctionExpression(type2,backupColumnName);

+			}

+			// DECIMAL

+			else if (type2.equals(DECIMAL)) {

+				return getGeneratedDecimalFunctionExpression(backupColumnName,length2,scale2);

+			}

+		}

+		else if(type1.equals(DOUBLE)) {

+			// 64 bit floating point number; 

+			//   range -7.2E+75 to 7.2E+75

+			//         -5.4E-79 to 5.4E-79

+			//

+			// Character string, minimum length 8

+			//   4 characters for exponent representation (i.e., 'E-79')

+			//   4 characters minimum for mantissa representation  (i.e., '-5.4')

+			if (isCharacterStringType(type2)) {

+				return getGeneratedNumberToStringXformExpression(backupColumnName,type2,length2);

+			}

+			// REAL, SMALLINT, INTEGER, BIGINT

+			else if ((type2.equals(REAL)) 

+					|| (type2.equals(SMALLINT)) 

+					|| (type2.equals(INTEGER)) 

+					|| (type2.equals(BIGINT))) {

+				return getGeneratedScalarFunctionExpression(type2,backupColumnName);

+			}

+			// DECIMAL

+			else if (type2.equals(DECIMAL)) {

+				return getGeneratedDecimalFunctionExpression(backupColumnName,length2,scale2);

+			}

+		}

+		else if(type1.equals(DECIMAL)) {

+			// 32 bit floating point number; 

+			//   range (1-(10**31)) to ((10**31)-1)

+			//         scale >=0 and scale <= precision

+			//         precision <= 31

+			//

+			// Any character string of length (precision + 2) or greater

+			if (isCharacterStringType(type2)) {

+				return getGeneratedNumberToStringXformExpression(backupColumnName,type2,length2);

+			}

+			// REAL, SMALLINT, INTEGER, BIGINT

+			else if ((type2.equals(REAL)) 

+					|| (type2.equals(SMALLINT)) 

+					|| (type2.equals(INTEGER)) 

+					|| (type2.equals(BIGINT))) {

+				return getGeneratedScalarFunctionExpression(type2,backupColumnName);

+			}

+			// DECIMAL (different precision, scale)

+			else if ((type2.equals(DECIMAL))

+					&& ((length1 != length2)

+							|| (scale1 != scale2))) {

+				return getGeneratedDecimalFunctionExpression(backupColumnName,length2,scale2);

+			}

+		}

+		else if(type1.equals(DATE)) {

+			// 4 byte date; 

+			//   range 0001-01-01 to 9999-12-31

+			//

+			// Any character string of length greater than 10 and less than 256

+			if (isCharacterStringType(type2)) {

+				return getGeneratedNumberToStringXformExpression(backupColumnName,type2,length2);

+			}

+		}

+		else if(type1.equals(TIME)) {

+			// 3 byte time; 

+			//   range 00:00:01 to 24:00:00

+			//

+			// Any character string of length greater than 8 and less than 256

+			if (isCharacterStringType(type2)) {

+				return getGeneratedNumberToStringXformExpression(backupColumnName,type2,length2);

+			}

+		}

+		else if(type1.equals(TIMESTAMP)) {

+			// 10 byte timestamp; 

+			//   range 0001-01-01Z00:00:00.000001 to 9999-12-31Z24:00:00.000000

+			//

+			// Any character string of length greater than 26 and less than 256

+			if (isCharacterStringType(type2)) {

+				return getGeneratedNumberToStringXformExpression(backupColumnName,type2,length2);

+			}

+			if ((type2.equals(DATE))

+					|| (type2.equals(TIME))) {

+				return getGeneratedScalarFunctionExpression(type2,backupColumnName);

+			}

+		}

+		else if (type1.equals(CHAR)) {

+			if ((type2.equals(CHAR)

+					&& (length2 < length1))

+					|| (type2.equals(VARCHAR))) {

+				if (length2 < length1) {

+					// Assume we must trim the original value to fit into the new column

+					return getGeneratedScalarFunctionExpression("RTRIM",backupColumnName); //$NON-NLS-1$

+				}

+			}

+			if ((type2.equals(GRAPHIC)) 

+					|| (type2.equals(VARGRAPHIC))) {

+				// Assume we must trim the original value to fit into the new column

+				return getGeneratedScalarFunctionExpression(GRAPHIC,

+						getGeneratedScalarFunctionExpression("RTRIM",backupColumnName)); //$NON-NLS-1$

+			}

+			if ((type2.equals(CLOB)) 

+					|| (type2.equals(DBCLOB))) {

+				// Assume we must trim the original value to fit into the new column

+				return getGeneratedScalarFunctionExpression(type2,

+						getGeneratedScalarFunctionExpression("RTRIM",backupColumnName)); //$NON-NLS-1$

+			}

+			if ((type2.equals(SMALLINT)) 

+					|| (type2.equals(INTEGER)) 

+					|| (type2.equals(BIGINT)) 

+					|| (type2.equals(REAL)) 

+					|| (type2.equals(DOUBLE))) {

+				return getGeneratedScalarFunctionExpression(type2,backupColumnName);

+			}

+			if (type2.equals(DECIMAL)) {

+				return getGeneratedDecimalFunctionExpression(backupColumnName,

+						length2, scale2);

+			}

+			if ((type2.equals(DATE)) 

+					|| (type2.equals(TIME)) 

+					|| (type2.equals(TIMESTAMP))) {

+				return getGeneratedScalarFunctionExpression(type2,

+						getGeneratedScalarFunctionExpression("RTRIM",backupColumnName)); //$NON-NLS-1$

+			}

+		}

+		else if (type1.equals(VARCHAR)) {

+			if ((type2.equals(CLOB)) 

+					|| (type2.equals(DBCLOB))) {

+				return getGeneratedScalarFunctionExpression(type2,backupColumnName);

+			}

+			if ((type2.equals(SMALLINT)) 

+					|| (type2.equals(INTEGER)) 

+					|| (type2.equals(BIGINT)) 

+					|| (type2.equals(REAL)) 

+					|| (type2.equals(DOUBLE))) {

+				return getGeneratedScalarFunctionExpression(type2,backupColumnName);

+			}

+			if (type2.equals(DECIMAL)) {

+				return getGeneratedDecimalFunctionExpression(backupColumnName,

+						length2, scale2);

+			}

+			if ((type2.equals(DATE)) 

+					|| (type2.equals(TIME)) 

+					|| (type2.equals(TIMESTAMP))) {

+				return getGeneratedScalarFunctionExpression(type2,backupColumnName);

+			}

+		}

+		else if (type1.equals(GRAPHIC)) {

+			if ((type2.equals(CHAR)) 

+					|| (type2.equals(VARCHAR))) {

+				// Assume we must trim the original value to fit into the new column

+				return getGeneratedScalarFunctionExpression(CHAR,

+						getGeneratedScalarFunctionExpression("RTRIM",backupColumnName)); //$NON-NLS-1$

+			}

+			if ((type2.equals(GRAPHIC) 

+					&& (length2 < length1))

+					|| (type2.equals(VARGRAPHIC))) {

+				// Assume we must trim the original value to fit into the new column

+				return getGeneratedScalarFunctionExpression("RTRIM",backupColumnName); //$NON-NLS-1$

+			}

+			if ((type2.equals(CLOB)) 

+					|| (type2.equals(DBCLOB))) {

+				// Assume we must trim the original value to fit into the new column

+				return getGeneratedScalarFunctionExpression(type2,

+						getGeneratedScalarFunctionExpression("RTRIM",backupColumnName)); //$NON-NLS-1$

+			}

+			if ((type2.equals(SMALLINT)) 

+					|| (type2.equals(INTEGER)) 

+					|| (type2.equals(BIGINT)) 

+					|| (type2.equals(REAL)) 

+					|| (type2.equals(DOUBLE))) {

+				return getGeneratedScalarFunctionExpression(type2,

+						getGeneratedScalarFunctionExpression(CHAR,backupColumnName));

+			}

+			if (type2.equals(DECIMAL)) {

+				return getGeneratedDecimalFunctionExpression(

+						getGeneratedScalarFunctionExpression(CHAR,backupColumnName),

+						length2, scale2);

+			}

+			if ((type2.equals(DATE)) 

+					|| (type2.equals(TIME)) 

+					|| (type2.equals(TIMESTAMP))) {

+				return getGeneratedScalarFunctionExpression(type2,

+						getGeneratedScalarFunctionExpression("RTRIM",backupColumnName)); //$NON-NLS-1$

+			}

+		}

+		else if (type1.equals(VARGRAPHIC)) {

+			if ((type2.equals(CLOB)) 

+					|| (type2.equals(DBCLOB))) {

+				return getGeneratedScalarFunctionExpression(type2,backupColumnName);

+			}

+			if ((type2.equals(SMALLINT)) 

+					|| (type2.equals(INTEGER)) 

+					|| (type2.equals(BIGINT)) 

+					|| (type2.equals(REAL)) 

+					|| (type2.equals(DOUBLE))) {

+				return getGeneratedScalarFunctionExpression(type2,

+						getGeneratedScalarFunctionExpression(CHAR,backupColumnName));

+			}

+			if (type2.equals(DECIMAL)) {

+				return getGeneratedDecimalFunctionExpression(

+						getGeneratedScalarFunctionExpression(CHAR,backupColumnName),

+						length2, scale2);

+			}

+			if ((type2.equals(DATE)) 

+					|| (type2.equals(TIME)) 

+					|| (type2.equals(TIMESTAMP))) {

+				return getGeneratedScalarFunctionExpression(type2,backupColumnName);

+			}

+		}

+		else if (type1.equals(XML)) {

+			return getGeneratedXmlXformExpression(backupColumnName,type2);

+		}

+		return backupColumnName;

+	}

+

+	private String getGeneratedNumberToStringXformExpression(String colName, String type, int length) {

+		if (isFixedLengthStringType(type)) {

+			return getGeneratedScalarFunctionExpression(type,

+					getGeneratedScalarFunctionExpression(type,colName,String.valueOf(length)));

+		}

+		else if (isLOBType(type)) {

+			if (isDoubleByteType(type)) {

+				return getGeneratedScalarFunctionExpression(type,

+						getGeneratedScalarFunctionExpression(VARGRAPHIC,colName));

+			}

+			else {

+				return getGeneratedScalarFunctionExpression(type,

+						getGeneratedScalarFunctionExpression(VARCHAR,colName));

+			}

+		}

+		return getGeneratedScalarFunctionExpression(type,colName);

+	}

+	

+	private String getGeneratedScalarFunctionExpression(String function, String parm1, String parm2) {

+		return function + LEFT_PARENTHESIS + parm1 + COMMA + parm2 + RIGHT_PARENTHESIS;

+	}

+	

+	private String getGeneratedDecimalFunctionExpression(String parm,int precision, int scale) {

+		return DECIMAL + LEFT_PARENTHESIS + parm + COMMA + String.valueOf(precision) + COMMA + String.valueOf(scale) + RIGHT_PARENTHESIS;

+	}

+	

+	private String getGeneratedScalarFunctionExpression(String function,String parm) {

+		return function + LEFT_PARENTHESIS + parm + RIGHT_PARENTHESIS;

+	}

+

+	protected String getGeneratedXmlXformExpression(String backupColName, String type2) {

+		if (isCharacterStringType(type2) && !isDoubleByteType(type2)) {

+			return "XMLSERIALIZE (" + backupColName + " AS " + type2 + ")"; //$NON-NLS-1$ //$NON-NLS-1$ //$NON-NLS-1$

+		}

+		return backupColName;

+	}

+	

+	private boolean isCharacterStringType(String type) {

+		if (type.equals(CHAR)

+				|| type.equals(VARCHAR)

+				|| type.equals(GRAPHIC)

+				|| type.equals(VARGRAPHIC)

+				|| type.equals(CLOB)

+				|| type.equals(DBCLOB)) return true;

+		return false;

+	}

+	

+	private boolean isDoubleByteType(String type) {

+		if (type.equals(GRAPHIC)

+				|| type.equals(VARGRAPHIC)

+				|| type.equals(DBCLOB)) return true;

+		return false;

+	}

+	

+	private boolean isLOBType(String type) {

+		if (type.equals(CLOB)

+				|| type.equals(BLOB)

+				|| type.equals(DBCLOB)) return true;

+		return false;

+	}

+	

+	private boolean isFixedLengthStringType(String type) {

+		if (type.equals(CHAR)

+				|| type.equals(GRAPHIC)) return true;

+		return false;

+	}

+}

diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/ddl/DB2DdlBuilder.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/ddl/DB2DdlBuilder.java
new file mode 100644
index 0000000..aea43f7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/ddl/DB2DdlBuilder.java
@@ -0,0 +1,1268 @@
+/*******************************************************************************

+ * Copyright (c) 2014 IBM Corporation and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.datatools.enablement.ibm.db2.ddl;

+

+import java.text.MessageFormat;

+import java.util.Collection;

+import java.util.Iterator;

+

+import org.eclipse.core.runtime.IStatus;

+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentServiceImpl;

+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;

+import org.eclipse.datatools.connectivity.sqm.internal.core.definition.DatabaseDefinitionRegistryImpl;

+import org.eclipse.datatools.enablement.ibm.db2.DB2PluginActivator;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Alias;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Column;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Function;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2IdentitySpecifier;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Index;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Table;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Trigger;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2UserDefinedFunction;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2View;

+import org.eclipse.datatools.enablement.ibm.db2.model.DataCaptureType;

+import org.eclipse.datatools.enablement.ibm.db2.model.GenerateType;

+import org.eclipse.datatools.enablement.ibm.db2.model.OriginType;

+import org.eclipse.datatools.enablement.ibm.ddl.DdlBuilder;

+import org.eclipse.datatools.enablement.ibm.ddl.DdlGenerationUtility;

+import org.eclipse.datatools.enablement.ibm.ddl.RoutineDdlBuilder;

+import org.eclipse.datatools.modelbase.sql.accesscontrol.Privilege;

+import org.eclipse.datatools.modelbase.sql.constraints.CheckConstraint;

+import org.eclipse.datatools.modelbase.sql.constraints.Constraint;

+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;

+import org.eclipse.datatools.modelbase.sql.constraints.TableConstraint;

+import org.eclipse.datatools.modelbase.sql.datatypes.ArrayDataType;

+import org.eclipse.datatools.modelbase.sql.datatypes.DistinctUserDefinedType;

+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;

+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;

+import org.eclipse.datatools.modelbase.sql.expressions.QueryExpression;

+import org.eclipse.datatools.modelbase.sql.expressions.SearchCondition;

+import org.eclipse.datatools.modelbase.sql.routines.DataAccess;

+import org.eclipse.datatools.modelbase.sql.routines.Function;

+import org.eclipse.datatools.modelbase.sql.routines.Parameter;

+import org.eclipse.datatools.modelbase.sql.routines.ParameterMode;

+import org.eclipse.datatools.modelbase.sql.routines.Procedure;

+import org.eclipse.datatools.modelbase.sql.routines.Routine;

+import org.eclipse.datatools.modelbase.sql.routines.RoutineResultTable;

+import org.eclipse.datatools.modelbase.sql.routines.Source;

+import org.eclipse.datatools.modelbase.sql.schema.Database;

+import org.eclipse.datatools.modelbase.sql.schema.Schema;

+import org.eclipse.datatools.modelbase.sql.schema.Sequence;

+import org.eclipse.datatools.modelbase.sql.statements.SQLStatement;

+import org.eclipse.datatools.modelbase.sql.tables.ActionGranularityType;

+import org.eclipse.datatools.modelbase.sql.tables.ActionTimeType;

+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;

+import org.eclipse.datatools.modelbase.sql.tables.CheckType;

+import org.eclipse.datatools.modelbase.sql.tables.Column;

+import org.eclipse.datatools.modelbase.sql.tables.PersistentTable;

+import org.eclipse.datatools.modelbase.sql.tables.Table;

+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;

+import org.eclipse.emf.ecore.EObject;

+

+public abstract class DB2DdlBuilder extends DdlBuilder {

+	protected final static String DB2SQL               = "DB2SQL"; //$NON-NLS-1$

+    protected final static String MODE                 = "MODE"; //$NON-NLS-1$

+    protected final static String CYCLE                = "CYCLE"; //$NON-NLS-1$

+    protected final static String CACHE                = "CACHE"; //$NON-NLS-1$

+    protected final static String IN                   = "IN"; //$NON-NLS-1$

+    protected final static String OUT                  = "OUT"; //$NON-NLS-1$

+    protected final static String INOUT                = "INOUT"; //$NON-NLS-1$

+    protected final static String LOCATOR              = "LOCATOR"; //$NON-NLS-1$

+    protected final static String RETURNS              = "RETURNS"; //$NON-NLS-1$

+    protected final static String CAST                 = "CAST"; //$NON-NLS-1$

+    protected final static String SPECIFIC             = "SPECIFIC"; //$NON-NLS-1$

+    protected final static String EXTERNAL             = "EXTERNAL"; //$NON-NLS-1$

+    protected final static String COLUMN               = "COLUMN"; //$NON-NLS-1$

+    protected final static String NICKNAME             = "NICKNAME"; //$NON-NLS-1$

+    protected final static String TEMPLATE             = "TEMPLATE"; //$NON-NLS-1$

+    protected final static String LABEL                = "LABEL"; //$NON-NLS-1$

+    protected final static String PACKAGE              = "PACKAGE"; //$NON-NLS-1$

+    protected static final String MAXVALUE             = "MAXVALUE "; //$NON-NLS-1$

+    protected static final String NO_MAXVALUE          = "NO MAXVALUE "; //$NON-NLS-1$

+    protected static final String MINVALUE             = "MINVALUE "; //$NON-NLS-1$

+	protected static final String NO_MINVALUE          = "NO MINVALUE "; //$NON-NLS-1$

+	protected static final String INCREMENT_BY         = "INCREMENT BY "; //$NON-NLS-1$

+	protected static final String START_WITH           = "START WITH "; //$NON-NLS-1$

+	protected static final String SET_MAXVALUE         = "SET MAXVALUE "; //$NON-NLS-1$

+	protected static final String SET_NO_MAXVALUE      = "SET NO MAXVALUE "; //$NON-NLS-1$

+	protected static final String SET_MINVALUE         = "SET MINVALUE "; //$NON-NLS-1$

+	protected static final String SET_NO_MINVALUE      = "SET NO MINVALUE "; //$NON-NLS-1$

+	protected static final String SET_INCREMENT_BY     = "SET INCREMENT BY "; //$NON-NLS-1$

+	protected static final String RESTART_WITH         = "RESTART WITH "; //$NON-NLS-1$

+	protected static final String RESTART         	   = "RESTART "; //$NON-NLS-1$

+	protected static final String EMPTY_STRING         = ""; //$NON-NLS-1$

+	protected static final String COMMA                = ", "; //$NON-NLS-1$

+	protected static final String ORDER				   = "ORDER "; //$NON-NLS-1$

+	protected static final String SINGLE_QUOTED_EMPTY_STRING = "\'\'"; //$NON-NLS-1$

+

+    public String createAlias(DB2Alias alias, boolean quoteIdentifiers, boolean qualifyNames) {

+        Table aliased = alias.getAliasedTable();

+        if(aliased == null) {

+        	this.getEngineeringCallBack().writeMessage(MessageFormat.format(

+					DB2DdlMessages.FE_ALIAS_TABLE_NOT_EXIST, new Object[] { getName(alias, false, true)}));

+            return null;

+        }

+        return CREATE + SPACE + ALIAS + SPACE + getName(alias, quoteIdentifiers, qualifyNames)

+        	+ SPACE +  FOR + SPACE + getName(aliased, quoteIdentifiers, qualifyNames);

+    }

+

+    public String dropAlias(DB2Alias alias, boolean quoteIdentifiers, boolean qualifyNames) {

+        return DROP + SPACE + ALIAS + SPACE + getName(alias, quoteIdentifiers, qualifyNames);

+    }

+

+    public String createSchema(Schema schema, boolean quoteIdentifiers,boolean qualifyNames) {

+        return CREATE + SPACE + SCHEMA + SPACE + getName(schema, quoteIdentifiers,qualifyNames);

+    }

+    

+    //@bd00058820gs

+    public String dropSchema(Schema schema, boolean quoteIdentifiers, boolean qualifyNames) {

+        return super.dropSchema(schema,quoteIdentifiers,qualifyNames) + SPACE + RESTRICT;

+    }

+    

+    public String createDistinctUserDefinedType(DistinctUserDefinedType type, boolean quoteIdentifiers, boolean qualifyNames) {

+        PredefinedDataType dataType = type.getPredefinedRepresentation();

+        if (dataType == null) {

+        	this.getEngineeringCallBack().writeMessage(MessageFormat.format(

+					DB2DdlMessages.FE_DISTINCT_TYPE_HAS_NO_SOURCE_TYPE, new Object[] { getName(type, false, true)}));

+        	return null;

+        }

+        String dataTypeString;

+        EObject root = ContainmentServiceImpl.INSTANCE.getRootElement(type);

+        if(root instanceof Database) {

+            DatabaseDefinition def = DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition((Database) root);

+            dataTypeString = def.getPredefinedDataTypeFormattedName(dataType);

+        }

+        else {

+            //TODO report error

+            return null;

+        }

+        

+        String statement = CREATE + SPACE + DISTINCT + SPACE + TYPE + SPACE + getName(type, quoteIdentifiers, qualifyNames)

+        	+ SPACE + AS + SPACE + dataTypeString;

+        if(!dataTypeString.equals(BLOB) && !dataTypeString.equals(CLOB) && !dataTypeString.equals(DBCLOB) 

+                && !dataTypeString.equals(LONG + SPACE + VARCHAR) && !dataTypeString.equals(LONG + SPACE + VARGRAPHIC)

+                && !dataTypeString.equals(DATALINK)) {

+            statement += SPACE + WITH + SPACE + COMPARISONS;

+        }

+        return statement;

+    }

+    

+    public String createTrigger(DB2Trigger trigger, boolean quoteIdentifiers, boolean qualifyNames) {

+        String statement = CREATE + SPACE + TRIGGER + SPACE + getName(trigger, quoteIdentifiers, qualifyNames) + SPACE;

+

+        final ActionTimeType actionTime = trigger.getActionTime();

+        if(actionTime == ActionTimeType.AFTER_LITERAL) {

+            statement += NEWLINE  + TAB + AFTER;

+        }

+        else if(actionTime == ActionTimeType.BEFORE_LITERAL) {

+            statement += NEWLINE + TAB + NO + SPACE + CASCADE + SPACE + BEFORE;

+        }

+        else if(actionTime == ActionTimeType.INSTEADOF_LITERAL) {

+            statement += NEWLINE + TAB + INSTEAD_OF;

+        }

+	    statement += SPACE;

+

+        if(trigger.isDeleteType()) {

+    	    statement += DELETE;

+    	}

+    	else if(trigger.isInsertType()) {

+    	    statement += INSERT;

+    	}

+    	else if(trigger.isUpdateType()) {

+    	    statement += UPDATE;

+    	    Collection updateColumns = trigger.getTriggerColumn();

+            if(!updateColumns.isEmpty()) {

+                statement += SPACE + OF + SPACE ;

+                Iterator it = updateColumns.iterator();

+                while(it.hasNext()) {

+                    Column column = (Column) it.next();

+                    statement += this.getName(column, quoteIdentifiers, false);

+                    if(it.hasNext()) {

+                        statement += COMMA + SPACE;

+                    }

+                }

+            }

+    	}

+    	

+        statement += SPACE + ON + SPACE + getName(trigger.getSubjectTable(), quoteIdentifiers, qualifyNames) + NEWLINE;

+

+        final String newRow = trigger.getNewRow();

+        final String oldRow = trigger.getOldRow();

+        final String newTable = trigger.getNewTable();

+        final String oldTable = trigger.getOldTable();

+

+        String referenceStr = EMPTY_STRING;

+        if(newRow != null && newRow.length() != 0) {

+        	referenceStr += (referenceStr.equals(EMPTY_STRING)? SPACE: NEWLINE + TAB + TAB) + NEW + SPACE + AS + SPACE + newRow;

+        }

+        if(oldRow != null && oldRow.length() != 0) {

+        	referenceStr += (referenceStr.equals(EMPTY_STRING)? SPACE: NEWLINE +TAB + TAB) + OLD + SPACE + AS + SPACE + oldRow;

+        }

+        if(newTable != null && newTable.length() != 0) {

+        	referenceStr += (referenceStr.equals(EMPTY_STRING)? SPACE: NEWLINE +TAB + TAB) + this.getTriggerReferenceNewTable() + SPACE + AS + SPACE + newTable;

+        }

+        if(oldTable != null && oldTable.length() != 0) {

+        	referenceStr += (referenceStr.equals(EMPTY_STRING)? SPACE: NEWLINE +TAB + TAB) + this.getTriggerReferenceOldTable() + SPACE + AS + SPACE + oldTable;

+        }

+

+        if (!referenceStr.equals(EMPTY_STRING)) {

+        	statement += TAB + REFERENCING + SPACE + referenceStr + NEWLINE;

+        }

+

+        if(trigger.getActionGranularity() == ActionGranularityType.ROW_LITERAL) {

+            statement += TAB + FOR + SPACE + EACH + SPACE + ROW;

+    	}

+        else {

+            statement += TAB + FOR + SPACE + EACH + SPACE + STATEMENT;

+    	}

+

+        statement += SPACE + MODE + SPACE + DB2SQL + NEWLINE;

+

+        SearchCondition condition = trigger.getWhen();

+        if(condition != null) {

+        	String c = condition.getSQL();

+			if ( c != null && c.trim().length() != 0 && DdlGenerationUtility.filterOutComments( c ) )

+			{

+        		statement += WHEN + SPACE + LEFT_PARENTHESIS + DdlGenerationUtility.convertLineEndings(c, NEWLINE) + RIGHT_PARENTHESIS + NEWLINE;

+        	}

+        }

+

+        String sqlBody = EMPTY_STRING;

+        Iterator it = trigger.getActionStatement().iterator();

+        while(it.hasNext()) {

+            SQLStatement s = (SQLStatement) it.next();

+            sqlBody += s.getSQL();

+        }

+

+		if ( sqlBody.equals( EMPTY_STRING ) || !DdlGenerationUtility.filterOutComments( sqlBody ) )

+		{

+        	this.getEngineeringCallBack().writeMessage(MessageFormat.format(

+					DB2DdlMessages.FE_TRIGGER_ACTION_EMPTY, new Object[] { getName(trigger, quoteIdentifiers, qualifyNames)}));

+        	return null;

+        }

+        

+        statement += DdlGenerationUtility.convertLineEndings(sqlBody, NEWLINE);

+        

+        return statement;

+    }

+    

+    public String createView(DB2View view, boolean quoteIdentifiers, boolean qualifyNames) {

+        String viewDefinition = CREATE + SPACE + VIEW + SPACE + getName(view, quoteIdentifiers, qualifyNames) + SPACE;

+        

+        String columns = getViewColumnList(view,quoteIdentifiers);

+        if(columns != null) {

+            viewDefinition += LEFT_PARENTHESIS + columns + RIGHT_PARENTHESIS + SPACE;

+        }

+        viewDefinition += AS + NEWLINE;

+        QueryExpression expression = view.getQueryExpression();

+        if (expression == null || expression.getSQL() == null || expression.getSQL().length() == 0) {

+        	this.getEngineeringCallBack().writeMessage(MessageFormat.format(

+					DB2DdlMessages.FE_VIEW_HAS_NO_BODY, new Object[] { getName(view, false, true)}));        	

+        }

+        else {

+        	viewDefinition += expression.getSQL();

+        }

+        CheckType checkType = view.getCheckType();

+        if(checkType == CheckType.CASCADED_LITERAL) {

+            viewDefinition += NEWLINE + WITH + SPACE + CASCADED + SPACE + CHECK + SPACE + OPTION;

+        }

+        else if(checkType == CheckType.LOCAL_LITERAL) {

+            viewDefinition += NEWLINE + WITH + SPACE + LOCAL + SPACE + CHECK + SPACE + OPTION;

+        }

+        return viewDefinition;

+    }

+

+    public String createUserDefinedFunction(DB2UserDefinedFunction function, boolean quoteIdentifiers, boolean qualifyNames) {

+    	Database database = function.getSchema().getDatabase();

+    	RoutineDdlBuilder routineDdlBuilder = DdlBuilder.getRoutineDdlBuilder(database.getVendor(),database.getVersion());

+    	if (routineDdlBuilder != null) {

+    		String ddl = routineDdlBuilder.buildCreateRoutineStatement(function,quoteIdentifiers,qualifyNames);

+    		if (ddl != null) return ddl;

+    	}

+

+        String language = function.getLanguage();

+        if (language == null && function.getOrigin() == OriginType.NONE_LITERAL) language = "SQL"; //$NON-NLS-1$

+        if(language.trim().equalsIgnoreCase("SQL")) { //$NON-NLS-1$

+        	Source source = function.getSource();

+        	if (source != null) {

+        		return source.getBody();

+        	} else {

+            	this.getEngineeringCallBack().writeMessage(MessageFormat.format(

+    					DB2DdlMessages.FE_ROUTINE_SOURCE_EMPTY, new Object[] { getName(function, false, true)}));

+        		return null;

+        	}

+        }

+    	

+    	String text = CREATE + SPACE + FUNCTION + SPACE + getName(function, quoteIdentifiers, qualifyNames)

+        	+ SPACE + LEFT_PARENTHESIS + getParameters(function,qualifyNames) + RIGHT_PARENTHESIS + NEWLINE

+        	+ TAB + getFunctionReturnsClause(function,qualifyNames);

+

+    	if (function.getOrigin() == OriginType.TEMPLATE_LITERAL ) {

+    		text += NEWLINE + TAB + AS + SPACE + TEMPLATE;  //$NON-NLS-1$

+		    text += getDeterministicOption(function);

+		    text += getExternalActionOption(function);

+    	} else {

+		    text += getSpecificOption(function,quoteIdentifiers,qualifyNames);

+		    text += getDeterministicOption(function);

+		    text += getDataAccessOption(function);

+		    text += getExternalActionOption(function);

+		    text += getNullCallOption(function);

+		    text += getParallelOption(function);

+		    text += getFederatedOption(function);

+		    

+		    text += getLanguageOption(function);

+		    text += getCardinalityOption(function);

+		    text += getDBInfoOption(function);

+		    text += getExternalNameOption(function,quoteIdentifiers,qualifyNames);

+		    text += getFencedOption(function);

+		    text += getFinalCallOption(function);

+		    text += getParameterStyleOption(function);

+		    text += getParameterCcsidOption(function);

+		    text += getPredicatesOption(function);

+		    text += getScratchPadCallOption(function);

+		    text += getSecurityOption(function);

+

+    	}

+        return text;      

+    }

+

+    public String createProcedure(DB2Procedure procedure, boolean quoteIdentifiers, boolean qualifyNames) {

+

+        Database database = procedure.getSchema().getDatabase();

+    	RoutineDdlBuilder routineDdlBuilder = DdlBuilder.getRoutineDdlBuilder(database.getVendor(),database.getVersion());

+    	if (routineDdlBuilder != null) {

+    		String ddl = routineDdlBuilder.buildCreateRoutineStatement(procedure,quoteIdentifiers,qualifyNames);

+    		if (ddl != null) return ddl;

+    	}

+    	

+        String language = procedure.getLanguage();

+        if (language == null) language = "SQL"; //$NON-NLS-1$

+        if(language.equalsIgnoreCase("SQL")) { //$NON-NLS-1$

+        	Source source = procedure.getSource();

+        	if (source != null) {

+        		return source.getBody();

+        	} else {

+            	this.getEngineeringCallBack().writeMessage(MessageFormat.format(

+    					DB2DdlMessages.FE_ROUTINE_SOURCE_EMPTY, new Object[] { getName(procedure, false, true)}));

+        		return null; 

+        	}

+        }

+

+    	String text = CREATE + SPACE + PROCEDURE + SPACE + getName(procedure, quoteIdentifiers, qualifyNames)

+    	+ SPACE + LEFT_PARENTHESIS + getParameters(procedure,qualifyNames) + RIGHT_PARENTHESIS;

+

+        text += getSpecificOption(procedure,quoteIdentifiers,qualifyNames);

+        text += getDataAccessOption(procedure);

+        text += getDeterministicOption(procedure);

+        text += getDynamicResultSetsOption(procedure);

+        text += getFederatedOption(procedure);

+    

+        text += NEWLINE + TAB + "LANGUAGE " + language; //$NON-NLS-1$

+        text += getFencedOption(procedure);

+        text += getParameterStyleOption(procedure);

+        text += getProgramTypeOption(procedure);

+        text += getDBInfoOption(procedure);

+        text += getExternalNameOption(procedure,quoteIdentifiers,qualifyNames);

+

+        return text;      

+    }

+    

+

+    public String addCheckConstraint(CheckConstraint constraint, boolean quoteIdentifiers, boolean qualifyNames) {

+    	String text = super.addCheckConstraint(constraint,quoteIdentifiers,qualifyNames);

+    	text += this.getEnforcedOption(constraint);

+    	return text;

+    }

+    

+    public String addForeignKey(ForeignKey foreignKey, boolean quoteIdentifiers, boolean qualifyNames) {

+    	String text =super.addForeignKey(foreignKey,quoteIdentifiers,qualifyNames);

+    	if (text == null) {

+        	this.getEngineeringCallBack().writeMessage(MessageFormat.format(

+					DB2DdlMessages.FE_PARENT_TABLLE_OR_KEY_DO_NOT_EXIST, new Object[] { foreignKey.getName()}));

+    		return null; 

+    	}

+    	text += this.getEnforcedOption(foreignKey);

+    	return text;

+    }

+    

+    public String commentOn(DB2Alias alias, boolean quoteIdentifiers, boolean qualifyNames) {

+        String comment = alias.getDescription();

+        if(comment == null || comment.length() == 0) {

+            return null;

+        }

+

+        return COMMENT + SPACE + ON + SPACE + ALIAS + SPACE + getName(alias, quoteIdentifiers, qualifyNames)

+        	+ SPACE + IS + NEWLINE + this.getSingleQuotedString(comment);

+    }

+

+    public String commentOn(Column column, boolean quoteIdentifiers, boolean qualifyNames) {

+        String comment = column.getDescription();

+        if(comment == null || comment.length() == 0) {

+            return null;

+        }

+

+    	Table table = column.getTable();

+    	if (! (table instanceof PersistentTable) && ! (table instanceof ViewTable)){

+    		return null;

+    	}

+        

+        String columnName = column.getName();

+        String tableName = table.getName();

+        String schemaName = column.getTable().getSchema().getName();

+

+        if(quoteIdentifiers) {

+            columnName = this.getDoubleQuotedString(columnName);

+            tableName = this.getDoubleQuotedString(tableName);

+            schemaName = this.getDoubleQuotedString(schemaName);

+        }

+        if(qualifyNames) {

+            columnName = schemaName + DOT + tableName + DOT + columnName;

+        } else {

+            columnName = tableName + DOT + columnName;

+        }

+

+        return COMMENT + SPACE + ON + SPACE + COLUMN + SPACE + columnName

+    		+ SPACE + IS + NEWLINE + this.getSingleQuotedString(comment);

+    }

+

+    public String commentOn(DistinctUserDefinedType type, boolean quoteIdentifiers, boolean qualifyNames) {

+        String comment = type.getDescription();

+        if(comment == null || comment.length() == 0) {

+            return null;

+        }

+

+        String name = getName(type, quoteIdentifiers, qualifyNames);

+

+        return COMMENT + SPACE + ON + SPACE + DISTINCT + SPACE + TYPE + SPACE + name + SPACE + IS

+        	+ NEWLINE + this.getSingleQuotedString(comment);

+    }

+    

+    public String commentOn(ArrayDataType type, boolean quoteIdentifiers, boolean qualifyNames) {

+        String comment = type.getDescription();

+        if(comment == null || comment.length() == 0) {

+            return null;

+        }

+

+        String name = getName(type, quoteIdentifiers, qualifyNames);

+

+        return COMMENT + SPACE + ON + SPACE  + TYPE + SPACE + name + SPACE + IS

+        	+ NEWLINE + this.getSingleQuotedString(comment);

+    }

+    

+    private String getName(ArrayDataType type, boolean quoteIdentifiers,

+			boolean qualifyNames) {

+    	 String typeName = type.getName();

+         String schemaName = ((UserDefinedType) type).getSchema() != null ? ((UserDefinedType) type).getSchema().getName() : null;

+

+         if (schemaName == null) {

+         	DB2PluginActivator.getInstance().writeLog(IStatus.ERROR, 0, "User-defined type " + type + " does not have a schema. The user-defined type name will not be qualified in the DDL.", null);	

+         }

+

+         if(quoteIdentifiers) {

+             typeName = this.getDoubleQuotedString(typeName);

+             if (schemaName != null) {

+             	schemaName = this.getDoubleQuotedString(schemaName);	

+             }            

+         }

+

+         if(qualifyNames && schemaName != null) {

+             typeName = schemaName + DOT + typeName;

+         }

+     

+         return typeName;

+	}

+

+	public String labelOn(Column column, boolean quoteIdentifiers, boolean qualifyNames) {

+        String label = column.getLabel();

+        if (label == null || label.equals(EMPTY_STRING)){ //$NON-NLS-1$

+            return null;

+        }

+

+        Table table = column.getTable();

+        if (! (table instanceof PersistentTable) && ! (table instanceof ViewTable)){

+            return null;

+        }

+        

+        String columnName = column.getName();

+        String tableName = table.getName();

+        String schemaName = column.getTable().getSchema().getName();

+

+        if(quoteIdentifiers) {

+            columnName = this.getDoubleQuotedString(columnName);

+            tableName = this.getDoubleQuotedString(tableName);

+            schemaName = this.getDoubleQuotedString(schemaName);

+        }

+        if(qualifyNames) {

+            columnName = schemaName + DOT + tableName + DOT + columnName;

+        } else {

+            columnName = tableName + DOT + columnName;

+        }

+        

+        return LABEL + SPACE + ON + SPACE + COLUMN + SPACE + columnName + SPACE + IS + NEWLINE + this.getSingleQuotedString(label); //$NON-NLS-1$ //$NON-NLS-2$

+    }

+    

+    public String labelOn(DB2Procedure procedure, boolean quoteIdentifiers, boolean qualifyNames) {

+        String label = procedure.getLabel();

+

+        if (label == null || label.equals(EMPTY_STRING)){ //$NON-NLS-1$

+            return null;

+        }

+

+        String procedureName = procedure.getName();

+        String schemaName = procedure.getSchema().getName();

+

+        if(quoteIdentifiers) {

+            procedureName = this.getDoubleQuotedString(procedureName);

+            schemaName = this.getDoubleQuotedString(schemaName);

+        }

+

+        if(qualifyNames) {

+            procedureName = schemaName + DOT + procedureName; //$NON-NLS-1$

+        }

+        

+        return LABEL + SPACE + ON + SPACE + PROCEDURE + SPACE + procedureName + SPACE + IS + NEWLINE + this.getSingleQuotedString(label); //$NON-NLS-1$ //$NON-NLS-2$

+    }

+    

+    public String labelOn(DB2UserDefinedFunction function, boolean quoteIdentifiers, boolean qualifyNames) {

+        String label = function.getLabel();

+

+        if (label == null || label.equals(EMPTY_STRING)){ //$NON-NLS-1$

+            return null;

+        }

+

+        String functionName = function.getName();

+        String schemaName = function.getSchema().getName();

+

+        if(quoteIdentifiers) {

+            functionName = this.getDoubleQuotedString(functionName);

+            schemaName = this.getDoubleQuotedString(schemaName);

+        }

+

+        if(qualifyNames) {

+            functionName = schemaName + DOT + functionName; //$NON-NLS-1$

+        }

+        

+        return LABEL + SPACE + ON + SPACE + FUNCTION + SPACE + functionName + SPACE + IS + NEWLINE + this.getSingleQuotedString(label); //$NON-NLS-1$ //$NON-NLS-2$

+    }

+

+    public String labelOn(DB2Trigger trigger, boolean quoteIdentifiers, boolean qualifyNames) {

+        String label = trigger.getLabel();

+

+        if (label == null || label.equals(EMPTY_STRING)){ //$NON-NLS-1$

+            return null;

+        }

+

+        String triggerName = trigger.getName();

+        String schemaName = trigger.getSchema().getName();

+

+        if(quoteIdentifiers) {

+            triggerName = this.getDoubleQuotedString(triggerName);

+            schemaName = this.getDoubleQuotedString(schemaName);

+        }

+

+        if(qualifyNames) {

+            triggerName = schemaName + DOT + triggerName; //$NON-NLS-1$

+        }     

+        

+        return LABEL + SPACE + ON + SPACE + TRIGGER + SPACE + triggerName + SPACE + IS + NEWLINE + this.getSingleQuotedString(label); //$NON-NLS-1$ //$NON-NLS-2$

+    }

+

+    public String labelOn(TableConstraint constraint, boolean quoteIdentifiers, boolean qualifyNames) {

+        String label = constraint.getLabel();

+

+        if (label == null || label.equals(EMPTY_STRING)){ //$NON-NLS-1$

+            return null;

+        }

+

+        String constraintName = constraint.getName();

+        String tableName = constraint.getBaseTable().getName();

+        String schemaName = constraint.getBaseTable().getSchema().getName();

+

+        if(quoteIdentifiers) {

+            constraintName = this.getDoubleQuotedString(constraintName);

+            tableName = this.getDoubleQuotedString(tableName);

+            schemaName = this.getDoubleQuotedString(schemaName);

+        }

+        if(qualifyNames) {

+            constraintName = schemaName + DOT + tableName + DOT + constraintName;

+        }

+        else {

+            constraintName = tableName + DOT + constraintName;            

+        }

+        

+        return LABEL + SPACE + ON + SPACE + CONSTRAINT + SPACE + constraintName + SPACE + IS + NEWLINE + this.getSingleQuotedString(label); //$NON-NLS-1$ //$NON-NLS-2$

+    }

+

+    public String labelOn(DB2Index index, boolean quoteIdentifiers, boolean qualifyNames) {

+        String label = index.getLabel();

+

+        if (label == null || label.equals(EMPTY_STRING)){ //$NON-NLS-1$

+            return null;

+        }

+

+        String indexName = index.getName();

+        String schemaName = index.getSchema().getName();

+

+        if(quoteIdentifiers) {

+            indexName = this.getDoubleQuotedString(indexName);

+            schemaName = this.getDoubleQuotedString(schemaName);

+        }

+        

+        if(qualifyNames){

+        	indexName = schemaName + DOT + indexName;

+        }

+

+        return LABEL + SPACE + ON + SPACE + INDEX + SPACE + indexName + SPACE + IS + NEWLINE + this.getSingleQuotedString(label); //$NON-NLS-1$ //$NON-NLS-2$

+    }

+

+    public String labelOn(DistinctUserDefinedType userDefinedType, boolean quoteIdentifiers, boolean qualifyNames) {

+        String label = userDefinedType.getLabel();

+

+        if (label == null || label.equals(EMPTY_STRING)){ //$NON-NLS-1$

+            return null;

+        }

+

+        String userDefinedTypeName = userDefinedType.getName();

+        String schemaName = userDefinedType.getSchema().getName();

+

+        if(quoteIdentifiers) {

+            userDefinedTypeName = this.getDoubleQuotedString(userDefinedTypeName);

+            schemaName = this.getDoubleQuotedString(schemaName);

+        }

+

+        if(qualifyNames) {

+            userDefinedTypeName = schemaName + DOT + userDefinedTypeName; //$NON-NLS-1$

+        }

+

+        return LABEL + SPACE + ON + SPACE + TYPE + SPACE + userDefinedTypeName + SPACE + IS + NEWLINE + this.getSingleQuotedString(label); //$NON-NLS-1$ //$NON-NLS-2$

+    }

+

+    public String labelOn(Sequence sequence, boolean quoteIdentifiers, boolean qualifyNames) {

+        String label = sequence.getLabel();

+

+        if (label == null || label.equals(EMPTY_STRING)){ //$NON-NLS-1$

+            return null;

+        }

+

+        String sequenceName = sequence.getName();

+        String schemaName = sequence.getSchema().getName();

+

+        if(quoteIdentifiers) {

+            sequenceName = this.getDoubleQuotedString(sequenceName);

+            schemaName = this.getDoubleQuotedString(schemaName);

+        }

+

+        if(qualifyNames) {

+            sequenceName = schemaName + DOT + sequenceName; //$NON-NLS-1$

+        }

+        

+        return LABEL + SPACE + ON + SPACE + SEQUENCE + SPACE + sequenceName + SPACE + IS + NEWLINE + this.getSingleQuotedString(label); //$NON-NLS-1$ //$NON-NLS-2$

+    }

+

+    public String labelOn(Schema schema, boolean quoteIdentifiers) {

+        String label = schema.getLabel();

+

+        if (label == null || label.equals(EMPTY_STRING)){ //$NON-NLS-1$

+            return null;

+        }

+

+        String schemaName = schema.getName();

+

+        if(quoteIdentifiers) {

+            schemaName = this.getDoubleQuotedString(schemaName);

+        }

+

+        return LABEL + SPACE + ON + SPACE + SCHEMA + SPACE + schemaName + SPACE + IS + NEWLINE + this.getSingleQuotedString(label); //$NON-NLS-1$ //$NON-NLS-2$

+    }

+    

+    public String labelOn(Table table, boolean quoteIdentifiers,boolean qualifyNames) {

+        String label = table.getLabel();

+

+        if (label == null){ //$NON-NLS-1$

+            return null;

+        }

+

+        label = label.trim();

+        if (label.equals(EMPTY_STRING)) //$NON-NLS-1$

+            return null;

+        

+        String tableName = table.getName();

+        String schemaName = table.getSchema().getName();

+

+        if(quoteIdentifiers) {

+            tableName = this.getDoubleQuotedString(tableName);

+            schemaName = this.getDoubleQuotedString(schemaName);

+        }

+

+        if(qualifyNames) {

+            tableName = schemaName + DOT + tableName; //$NON-NLS-1$

+        }

+        

+        return LABEL + SPACE + ON  + SPACE + TABLE + SPACE + tableName + SPACE + IS + NEWLINE + this.getSingleQuotedString(label); //$NON-NLS-1$ //$NON-NLS-2$

+

+    }

+

+    public String labelOn(DB2Alias alias, boolean quoteIdentifiers, boolean qualifyNames) {

+        String label = alias.getLabel();

+

+        if (label == null || label.equals(EMPTY_STRING)){ //$NON-NLS-1$

+            return null;

+        }

+

+        String aliasName = alias.getName();

+        String schemaName = alias.getSchema().getName();

+

+        if(quoteIdentifiers) {

+            aliasName = this.getDoubleQuotedString(aliasName);

+            schemaName = this.getDoubleQuotedString(schemaName);

+        }

+

+        if(qualifyNames) {

+            aliasName = schemaName + DOT + aliasName; //$NON-NLS-1$

+        }

+        

+        return LABEL + SPACE + ON  + SPACE + ALIAS + SPACE + aliasName + SPACE + IS + NEWLINE + this.getSingleQuotedString(label); //$NON-NLS-1$ //$NON-NLS-2$

+    }

+

+    

+    public String alterTableAlterColumnIdentity(Column column,  boolean quoteIdentifiers, boolean qualifyNames) {

+    	Table table = column.getTable();

+    	if(!(table instanceof BaseTable)) return null;

+

+    	DB2Column db2Column = (DB2Column) column;

+        String columnName = db2Column.getName();

+        if(quoteIdentifiers) {

+            columnName = this.getDoubleQuotedString(columnName);

+        }

+        

+        String statement = ALTER + SPACE + TABLE + SPACE + getName(table, quoteIdentifiers, qualifyNames)

+					+ " ALTER COLUMN "+columnName;

+

+        DB2IdentitySpecifier identitySpecifier = (DB2IdentitySpecifier)db2Column.getIdentitySpecifier();

+        if (identitySpecifier == null) {   //Drop

+        	statement += " DROP IDENTITY";

+        } else {				//modify

+           	String columnString = EMPTY_STRING;  

+	        GenerateType generateType = db2Column.getGenerationType();

+	        if(generateType == GenerateType.ALWAYS_LITERAL) {

+	        	columnString += " SET GENERATED ALWAYS "; //$NON-NLS-1$

+	        }

+	        else {

+	        	columnString += " SET GENERATED BY DEFAULT ";                 //$NON-NLS-1$

+	        }

+	            

+	        columnString += getIdentityAlterationString(identitySpecifier);

+

+	        statement += columnString;

+        }

+    	return statement;

+    }

+

+    protected String getIdentityString(DB2IdentitySpecifier identitySpecifier) {

+    	StringBuffer sb = new StringBuffer();

+    	if (identitySpecifier.getStartValue() != null)

+    		sb.append(NEWLINE + TAB + TAB + TAB + START_WITH + identitySpecifier.getStartValue());

+    	if (identitySpecifier.getIncrement() != null) {

+    		sb.append(NEWLINE + TAB + TAB + TAB + INCREMENT_BY + identitySpecifier.getIncrement());

+    	}

+    	if (identitySpecifier.getMinimum() != null) {

+    		sb.append(NEWLINE + TAB +TAB + TAB + MINVALUE + identitySpecifier.getMinimum());

+    	}

+    	else {

+    		sb.append(NEWLINE + TAB +TAB + TAB + NO_MINVALUE);

+    	}

+    	if (identitySpecifier.getMaximum() != null) {

+    		sb.append(NEWLINE + TAB + TAB + TAB + MAXVALUE + identitySpecifier.getMaximum());

+    	}

+    	else {

+    		sb.append(NEWLINE + TAB + TAB + TAB + NO_MAXVALUE);

+    	}

+    	if(identitySpecifier.isCycleOption()) {

+    		sb.append(NEWLINE + TAB  +TAB + TAB + CYCLE);

+    	}

+    	else {

+    		sb.append(NEWLINE + TAB  + TAB + TAB + NO + SPACE + CYCLE);

+    	}

+    	if (identitySpecifier.getCache() > 1) {

+    		sb.append(NEWLINE + TAB  +TAB + TAB + CACHE + SPACE +  identitySpecifier.getCache());

+    	} else {

+    		sb.append(NEWLINE + TAB  + TAB + TAB +NO + SPACE + CACHE);

+    	}

+    	if(identitySpecifier.isOrder()) {

+    		sb.append(NEWLINE + TAB  + TAB + TAB +ORDER);

+    	}

+    	else {

+    		sb.append(NEWLINE + TAB  + TAB + TAB +NO + SPACE + ORDER);

+    	}

+        return sb.toString();

+    }

+ 

+    protected String getIdentityAlterationString(DB2IdentitySpecifier identitySpecifier) {

+    	StringBuffer sb = new StringBuffer();

+    	if (identitySpecifier.getStartValue() != null)

+    		sb.append(SPACE + RESTART_WITH + identitySpecifier.getStartValue());

+    	if (identitySpecifier.getIncrement() != null) {

+    		sb.append(SPACE + SET_INCREMENT_BY + identitySpecifier.getIncrement());

+    	}

+    	if (identitySpecifier.getMinimum() != null) {

+    		sb.append(SPACE + SET_MINVALUE + identitySpecifier.getMinimum());

+    	}

+    	if (identitySpecifier.getMaximum() != null) {

+    		sb.append(SPACE + SET_MAXVALUE + identitySpecifier.getMaximum());

+    	}

+    	if(identitySpecifier.isCycleOption()) {

+    		sb.append(SPACE + SET + SPACE + CYCLE);

+    	}

+    	else {

+    		sb.append(SPACE + SET + SPACE + NO + SPACE + CYCLE);

+    	}

+    	if (identitySpecifier.getCache() > 1) {

+    		sb.append(SPACE + SET + SPACE + CACHE + SPACE +  identitySpecifier.getCache());

+    	} else {

+    		sb.append(SPACE + SET + SPACE + NO + SPACE + CACHE);

+    	}

+        return sb.toString();

+    }

+

+    protected String getParameters(Routine routine, boolean qualifyNames) {

+        String parameters = EMPTY_STRING;

+        Iterator it = routine.getParameters().iterator();

+        while(it.hasNext()) {

+            Parameter p = (Parameter) it.next();

+            ParameterMode mode = p.getMode();

+            if(mode == ParameterMode.INOUT_LITERAL) {

+                parameters += INOUT + SPACE;

+            }

+            else if(mode == ParameterMode.OUT_LITERAL) {

+                parameters += OUT + SPACE;

+            }

+            String name = p.getName();

+            if(name != null && name.length() != 0) {

+                parameters += p.getName() + SPACE;

+            }

+            parameters += this.getDataTypeString(p, routine.getSchema(),qualifyNames);

+            if(p.isLocator()) {

+                parameters += SPACE + AS + SPACE + LOCATOR;

+            }

+            if(it.hasNext()) {

+                parameters += COMMA + NEWLINE + TAB + TAB;                

+            }

+        }

+        return parameters;

+    }

+    

+    protected String getFunctionReturnsClause(DB2UserDefinedFunction function, boolean qualifyNames) {

+        if(function.getReturnScalar() != null) {

+            Parameter scaler = function.getReturnScalar();

+            String text = RETURNS + SPACE + this.getDataTypeString(scaler,function.getSchema(),qualifyNames);

+            if(function.getReturnCast() != null) {

+                Parameter cast = function.getReturnCast();

+                text += SPACE + CAST + SPACE + FROM + SPACE + this.getDataTypeString(cast,function.getSchema(),qualifyNames);

+            }

+            return text;

+        }

+        else if(function.getReturnTable() != null) {

+            RoutineResultTable resultTable = function.getReturnTable();

+            String text = RETURNS + SPACE + TABLE + SPACE + LEFT_PARENTHESIS;

+            Iterator it = resultTable.getColumns().iterator();

+            while(it.hasNext()) {

+                Column c = (Column) it.next();

+                text += c.getName() + SPACE + getDataTypeString(c,function.getSchema(),qualifyNames);

+                if(it.hasNext()) {

+                    text += COMMA + SPACE;

+                }

+            }

+            text += RIGHT_PARENTHESIS;

+            return text;

+        }

+        if(function.getReturnCast() != null) {

+            Parameter cast = function.getReturnCast();

+            String text = RETURNS + SPACE + this.getDataTypeString(cast,function.getSchema(),qualifyNames);

+            return text;

+        }

+        else {

+            return function.getReturnClause();

+        }

+    }

+

+    protected String getSpecificOption(Routine routine,boolean quoteIdentifiers, boolean qualifyNames) {

+        String specificName = routine.getSpecificName(); 

+        if(specificName != null && specificName.length() != 0) {

+            String schemaName = routine.getSchema().getName();

+

+            if(quoteIdentifiers) {

+            	specificName = this.getDoubleQuotedString(specificName);

+                schemaName  = this.getDoubleQuotedString(schemaName);

+            }

+            if(qualifyNames) {

+            	specificName = schemaName + DOT + specificName;

+            }

+

+            return  NEWLINE + TAB + SPECIFIC + SPACE + specificName;

+        }

+        return EMPTY_STRING;

+    }

+    

+    protected String getParameterStyleOption(Routine routine) {

+    	String parameterStyle = routine.getParameterStyle();

+        if ( parameterStyle == null || parameterStyle.trim().isEmpty() ) {

+        	return EMPTY_STRING;

+        }           

+        if ( parameterStyle.trim().equals("GNRLNULL") ) {  //$NON-NLS-1$

+        	parameterStyle = "GENERAL WITH NULLS"; //$NON-NLS-1$

+        }

+        return NEWLINE + TAB + "PARAMETER STYLE " + parameterStyle; //$NON-NLS-1$

+    }

+

+    protected String getDeterministicOption(Routine routine) {

+        if(routine.isDeterministic()) {

+            return NEWLINE + TAB + "DETERMINISTIC"; //$NON-NLS-1$

+        } 

+        return EMPTY_STRING;

+    }

+    

+    protected String getLanguageOption(Routine routine) {	  

+    	String language = routine.getLanguage();        

+        if ( language == null || language.trim().isEmpty() ) {

+        	return EMPTY_STRING;

+        }

+

+        return NEWLINE + TAB + "LANGUAGE " + language; //$NON-NLS-1$

+    }

+

+    /**

+     * The input routine must be a JAVA routine.

+     * It looks like zSeries JAVA routine's externalName field does not include a JAR ID

+     * after catalog load. The zSeries DDL builder can compensate this by implementing

+     * this method. 

+     * @param routine

+     * @param quoteIdentifiers

+     * @param qualifyNames

+     * @return the Jar ID of the JAVA routine or null

+     */

+    protected String getJarID (Routine routine, boolean quoteIdentifiers, boolean qualifyNames) {

+    	return null;

+    }

+    

+    /**

+     * Returns the JAR name of the DB2Jar object or null.

+     * @param jar

+     * @param quoteIdentifiers

+     * @param qualifyNames

+     * @return

+     */

+    protected String getName(DB2Jar jar, boolean quoteIdentifiers, boolean qualifyNames) {

+        String jarschema = null;

+        String jarname = null;

+        if (jar != null) {

+            if (jar.getSchema() != null) {

+                jarschema = jar.getSchema().getName();

+            }                  

+            jarname = jar.getName();                    

+        }

+        StringBuffer jaridbuf = new StringBuffer(50);

+        if (jarname != null && jarname.length() > 0) {

+            if(quoteIdentifiers) {

+                jarname = this.getDoubleQuotedString(jarname);

+            }

+            jaridbuf.append(jarname);   

+        }

+        if (jarschema != null && jarschema.length() > 0) {

+            if(quoteIdentifiers) {

+            	jarschema = this.getDoubleQuotedString(jarschema);

+            }

+            jaridbuf.insert(0, '.');

+            jaridbuf.insert(0, jarschema);

+        }

+        if (jaridbuf.length() == 0) {

+        	return null;

+        }

+        else {

+        	return jaridbuf.toString();

+        }

+    }

+

+    protected String getExternalNameOption(Routine routine,boolean quoteIdentifiers, boolean qualifyNames) {

+        String option = NEWLINE + TAB + EXTERNAL;

+        String externalName = routine.getExternalName();

+        if(externalName != null && externalName.length() != 0) {

+            String schemaName = routine.getSchema().getName();

+            

+            if (routine.getLanguage().equalsIgnoreCase("JAVA")){ //$NON-NLS-1$

+            	//RATLC00399525 Sev 2 CUST:FORUM:Generate DDL shows incorrect External Name for z/OS Java stored procedure

+            	//The External Name that was constructed by the DDL generator based on the value of 

+            	//the externalName field of the routine object. The externalName was set during catalog load based on 

+            	//the EXTERNAL_NAME column of SYSIBM.SYSROUTINES. The jar name is not part of the externalName.

+            	//The fix here is to add the jar name to the external name clause when constructing the clause for 

+            	//zSeries Java procedures. This is not needed for LUW or iSeries Java procedures because their 

+            	//externalName field has been loaded with the jar name.

+            	String jarid = getJarID(routine, quoteIdentifiers, qualifyNames);

+            	if (jarid != null) {

+            		externalName = jarid + ":" + externalName;

+            	}            	            	

+            	externalName = this.getSingleQuotedString(externalName);

+            } else {

+	            if(quoteIdentifiers) {

+	            	externalName = this.getDoubleQuotedString(externalName);

+//	                schemaName  = this.getDoubleQuotedString(schemaName);

+//	            }

+//	            if(qualifyNames) {

+//	            	externalName = schemaName + DOT + externalName;

+	            }

+            }

+

+            option += " NAME " + externalName; //$NON-NLS-1$

+        }

+        return option;

+    }

+    protected String getDataAccessOption(Routine routine) {

+        DataAccess dataAccess = routine.getSqlDataAccess();

+        if(dataAccess == DataAccess.CONTAINS_SQL_LITERAL) {

+            return NEWLINE + TAB + "CONTAINS SQL"; //$NON-NLS-1$

+        }

+        else if(dataAccess == DataAccess.MODIFIES_SQL_DATA_LITERAL) {

+            return NEWLINE + TAB + "MODIFIES SQL DATA"; //$NON-NLS-1$

+        }

+        else if(dataAccess == DataAccess.NO_SQL_LITERAL) {

+            return NEWLINE + TAB + "NO SQL"; //$NON-NLS-1$

+        }

+        else if(dataAccess == DataAccess.READS_SQL_DATA_LITERAL) {

+            return NEWLINE + TAB + "READS SQL DATA"; //$NON-NLS-1$

+        }

+        return EMPTY_STRING;

+    }

+    protected String getSecurityOption(Routine routine) {

+        String security = routine.getSecurity();

+        if(security != null && security.length() != 0) {

+            return NEWLINE + TAB + "SECURITY " + security; //$NON-NLS-1$

+        }

+        return EMPTY_STRING;

+    }

+    protected String getDBInfoOption(DB2Routine routine) {

+        if(routine.isDbInfo()) {

+            return NEWLINE + TAB + "DBINFO"; //$NON-NLS-1$

+        }

+        return EMPTY_STRING;

+    }

+    protected String getParameterCcsidOption(DB2Routine routine) {

+        String ccsid = routine.getParmCcsid();

+        if(ccsid != null && ccsid.length() != 0) {

+            return NEWLINE + TAB + "PARAMETER CCSID " + ccsid; //$NON-NLS-1$

+        }

+        return EMPTY_STRING;

+    }

+    protected String getProgramTypeOption(DB2Routine routine) {

+        String programType = routine.getProgramType();

+        if(programType != null && programType.length() != 0) {

+            return NEWLINE + TAB + "PROGRAM TYPE " + programType; //$NON-NLS-1$

+        }

+        return EMPTY_STRING;

+    }

+    protected String getFederatedOption(DB2Routine routine) {

+        if(routine.isFederated()) {

+            return NEWLINE + TAB + "FEDERATED"; //$NON-NLS-1$

+        }

+        return EMPTY_STRING;

+    }

+    protected String getFencedOption(DB2Routine routine) {

+        String fenced = routine.getFenced();

+        if (fenced == null) fenced = "FENCED"; //$NON-NLS-1$

+        if(fenced.equalsIgnoreCase("FENCED")) { //$NON-NLS-1$

+        	String threadsafe = routine.getThreadsafe();

+        	if (threadsafe == null) threadsafe ="THREADSAFE"; //$NON-NLS-1$

+            fenced += SPACE + threadsafe;

+        }

+        return NEWLINE + TAB + fenced;

+    }

+    protected String getNullCallOption(Function function) {

+        if(function.isNullCall()) {

+            return NEWLINE + TAB + "CALLED ON NULL INPUT"; //$NON-NLS-1$

+        }

+        return EMPTY_STRING;

+    }

+    protected String getTransformGroupOption(Function function) {

+        String transform = function.getTransformGroup();

+        if(transform != null && transform.length() != 0) {

+            return NEWLINE + TAB + "TRANSFORM GROUP " + transform; //$NON-NLS-1$

+        }

+        return EMPTY_STRING;

+    }

+    protected String getDynamicResultSetsOption(Procedure procedure) {

+        int rs = procedure.getMaxResultSets();

+        if(rs > 0) {

+            return NEWLINE + TAB + "DYNAMIC RESULT SETS " + rs; //$NON-NLS-1$

+        }

+        return EMPTY_STRING;

+    }

+    protected String getExternalActionOption(DB2Function function) {

+        if(!function.isExternalAction()) {

+            return NEWLINE + TAB + "NO EXTERNAL ACTION"; //$NON-NLS-1$

+        }

+        return EMPTY_STRING;

+    }

+    protected String getCardinalityOption(DB2Function function) {

+        int c = function.getCardinality();

+        if(c > 0) {

+            return NEWLINE + TAB + "CARDINALITY " + c; //$NON-NLS-1$            

+        }

+        return EMPTY_STRING;

+    }

+    protected String getParallelOption(DB2Function function) {

+        if(function.isAllowParallel()) {

+            return NEWLINE + TAB + "ALLOW PARALLEL"; //$NON-NLS-1$

+        }

+        else {

+            return NEWLINE + TAB + "DISALLOW PARALLEL"; //$NON-NLS-1$

+        }

+    }

+    protected String getFinalCallOption(DB2Function function) {

+        if(function.isFinalCall()) {

+            return NEWLINE + TAB + "FINAL CALL"; //$NON-NLS-1$

+        }

+        return EMPTY_STRING;

+    }

+    protected String getScratchPadCallOption(DB2Function function) {

+        int scratch = function.getScratchPadLength();

+        if(scratch > 0) {

+            return NEWLINE + TAB + "SCRATCHPAD " + scratch; //$NON-NLS-1$

+        }

+        return EMPTY_STRING;

+    }

+    protected String getPredicatesOption(DB2Function function) {

+        String predicates = function.getPredicate();

+        if(predicates != null && predicates.length() != 0) {

+            return NEWLINE + TAB + "PREDICATES " + LEFT_PARENTHESIS + predicates + RIGHT_PARENTHESIS; //$NON-NLS-1$

+        }

+        return EMPTY_STRING;

+    }

+

+    public String getEnforcedOption(Constraint constraint) {

+    	if (!constraint.isEnforced()) {

+    		return NEWLINE + TAB + "NOT ENFORCED"; //$NON-NLS-1$

+    	}

+		return EMPTY_STRING;

+    }

+

+    //this is for PB generate routine body according to the signature. 

+    public String createRoutineStatement(DB2Procedure procedure, boolean quoteIdentifiers, boolean qualifyNames) {

+    	Database database = procedure.getSchema().getDatabase();

+    	RoutineDdlBuilder routineDdlBuilder = DdlBuilder.getRoutineDdlBuilder(database.getVendor(),database.getVersion());

+    	if (routineDdlBuilder != null) {

+    		String ddl = routineDdlBuilder.buildCreateRoutineStatement(procedure,quoteIdentifiers,qualifyNames);

+    		if (ddl != null) return ddl;

+    	}

+    	

+    	String text = CREATE + SPACE + PROCEDURE + SPACE + getName(procedure, quoteIdentifiers, qualifyNames)

+    	+ SPACE + LEFT_PARENTHESIS + getParameters(procedure,qualifyNames) + RIGHT_PARENTHESIS;

+

+        text += getSpecificOption(procedure,quoteIdentifiers,qualifyNames);

+        text += getDataAccessOption(procedure);

+        text += getDeterministicOption(procedure);

+        text += getDynamicResultSetsOption(procedure);

+        text += getFederatedOption(procedure);

+    

+        String language = procedure.getLanguage();

+        if (language == null) language = "SQL"; //$NON-NLS-1$

+        if(language.equalsIgnoreCase("SQL")) { //$NON-NLS-1$

+            text += TAB + "LANGUAGE " + language + NEWLINE; //$NON-NLS-1$

+            text += procedure.getSource().getBody();

+        }

+        else {

+            text += NEWLINE + TAB + "LANGUAGE " + language; //$NON-NLS-1$

+            text += getFencedOption(procedure);

+            text += getParameterStyleOption(procedure);

+            text += getProgramTypeOption(procedure);

+            text += getDBInfoOption(procedure);

+            text += getExternalNameOption(procedure,quoteIdentifiers,qualifyNames);

+        }

+        return text;      

+    }

+

+    //this is for PB generate routine body according to the signature. 

+    public String createRoutineStatement(DB2UserDefinedFunction function, boolean quoteIdentifiers, boolean qualifyNames) {

+    	Database database = function.getSchema().getDatabase();

+    	RoutineDdlBuilder routineDdlBuilder = DdlBuilder.getRoutineDdlBuilder(database.getVendor(),database.getVersion());

+    	if (routineDdlBuilder != null) {

+    		String ddl = routineDdlBuilder.buildCreateRoutineStatement(function,quoteIdentifiers,qualifyNames);

+    		if (ddl != null) return ddl;

+    	}

+

+    	String text = CREATE + SPACE + FUNCTION + SPACE + getName(function, quoteIdentifiers, qualifyNames)

+        	+ SPACE + LEFT_PARENTHESIS + getParameters(function,qualifyNames) + RIGHT_PARENTHESIS + NEWLINE

+        	+ TAB + getFunctionReturnsClause(function,qualifyNames);

+

+        text += getSpecificOption(function,quoteIdentifiers,qualifyNames);

+        text += getDeterministicOption(function);

+        text += getDataAccessOption(function);

+        text += getExternalActionOption(function);

+        text += getNullCallOption(function);

+        text += getParallelOption(function);

+        text += getFederatedOption(function);

+        

+        String language = function.getLanguage();

+        if (language == null) language = "SQL"; //$NON-NLS-1$

+        if(language.equalsIgnoreCase("SQL")) { //$NON-NLS-1$

+           text += function.getSource().getBody();

+        }

+        else {

+            text += NEWLINE + TAB + "LANGUAGE " + language; //$NON-NLS-1$

+            text += getCardinalityOption(function);

+            text += getDBInfoOption(function);

+            text += getExternalNameOption(function,quoteIdentifiers,qualifyNames);

+            text += getFencedOption(function);

+            text += getFinalCallOption(function);

+            text += getParameterStyleOption(function);

+            text += getParameterCcsidOption(function);

+            text += getPredicatesOption(function);

+            text += getScratchPadCallOption(function);

+            text += getSecurityOption(function);

+        }

+        return text;      

+    }

+    

+    protected String getTriggerReferenceNewTable(){

+    	return NEW_TABLE;

+    }

+

+    protected String getTriggerReferenceOldTable(){

+    	return OLD_TABLE;

+    }

+

+	protected String getDataCapture(DB2Table table) {

+		DataCaptureType validProc = table.getDataCapture();

+		if (validProc == DataCaptureType.NONE_LITERAL) {

+			return NEWLINE + TAB + "DATA CAPTURE NONE ";

+		} else {

+			return NEWLINE + TAB + "DATA CAPTURE CHANGES ";

+		}

+	}

+	

+	protected String getGrantUseOfStatement(Privilege privilege, boolean quoteIdentifiers, boolean qualifyNames) {

+		String ret = NEWLINE + GRANT + SPACE + privilege.getAction() + SPACE + OF + SPACE 

+		+ getPrivilegedObjectTypeString(privilege) + SPACE

+		+ getPrivilegedObjectName(privilege, quoteIdentifiers, qualifyNames) 

+		+ SPACE + TO + SPACE + getGranteeSubstring(privilege.getGrantee(), quoteIdentifiers);

+		if (privilege.isGrantable()) ret += SPACE + WITH + SPACE + GRANT + SPACE + OPTION;

+		return ret;

+	}

+

+	protected String getRevokeUseOfStatement(Privilege privilege, boolean quoteIdentifiers, boolean qualifyNames) {

+		String ret = NEWLINE + REVOKE + SPACE + privilege.getAction() + SPACE + OF + SPACE 

+		+ getPrivilegedObjectTypeString(privilege) + SPACE

+		+ getPrivilegedObjectName(privilege, quoteIdentifiers, qualifyNames) 

+		+ SPACE + FROM + SPACE + getGranteeSubstring(privilege.getGrantee(), quoteIdentifiers);

+		return ret;

+	}

+	

+}

diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/ddl/DB2DdlMessages.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/ddl/DB2DdlMessages.java
new file mode 100644
index 0000000..77f5480
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/ddl/DB2DdlMessages.java
@@ -0,0 +1,32 @@
+/*******************************************************************************

+ * Copyright (c) 2014 IBM Corporation and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.datatools.enablement.ibm.db2.ddl;

+

+import org.eclipse.osgi.util.NLS;

+

+public final class DB2DdlMessages extends NLS {

+

+	private static final String BUNDLE_NAME = "org.eclipse.datatools.enablement.ibm.db2.ddl.DB2DdlMessages";//$NON-NLS-1$

+

+	private DB2DdlMessages() {

+	}

+

+	public static String FE_ALIAS_TABLE_NOT_EXIST;

+	public static String FE_DISTINCT_TYPE_HAS_NO_SOURCE_TYPE;

+	public static String FE_VIEW_HAS_NO_BODY;

+	public static String FE_ROUTINE_SOURCE_EMPTY;

+	public static String FE_PARENT_TABLLE_OR_KEY_DO_NOT_EXIST;

+	public static String FE_TRIGGER_ACTION_EMPTY;

+			

+	static {

+		NLS.initializeMessages(BUNDLE_NAME, DB2DdlMessages.class);

+	}

+}

diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/ddl/DB2DdlMessages.properties b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/ddl/DB2DdlMessages.properties
new file mode 100644
index 0000000..333f4a6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/ddl/DB2DdlMessages.properties
@@ -0,0 +1,20 @@
+# NLS_MESSAGEFORMAT_VAR          needed to handle quotes correctly

+# NLS_ENCODING=UNICODE

+#

+# Copyright (c) 2014 IBM Corporation and others.

+# All rights reserved. This program and the accompanying materials

+# are made available under the terms of the Eclipse Public License v1.0

+# which accompanies this distribution, and is available at

+# http://www.eclipse.org/legal/epl-v10.html

+#

+# Contributors:

+#     IBM Corporation - initial API and implementation

+#

+

+#FE

+FE_ALIAS_TABLE_NOT_EXIST = The referenced table by alias {0} does not exist

+FE_DISTINCT_TYPE_HAS_NO_SOURCE_TYPE = The user-defined type {0} has no source type

+FE_VIEW_HAS_NO_BODY = The view {0} has no SELECT statement

+FE_ROUTINE_SOURCE_EMPTY = The routine {0} body is empty

+FE_PARENT_TABLLE_OR_KEY_DO_NOT_EXIST = The parent table/key referenced by foreign key {0} does not exist

+FE_TRIGGER_ACTION_EMPTY = The trigger {0} action is empty

diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/ddl/DB2DdlParser.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/ddl/DB2DdlParser.java
new file mode 100644
index 0000000..bb205af
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/ddl/DB2DdlParser.java
@@ -0,0 +1,216 @@
+/*******************************************************************************

+ * Copyright (c) 2014 IBM Corporation and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.datatools.enablement.ibm.db2.ddl;

+

+import java.util.Iterator;

+import java.util.StringTokenizer;

+import java.util.regex.Matcher;

+import java.util.regex.Pattern;

+

+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;

+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable;

+import org.eclipse.datatools.enablement.ibm.ddl.DdlParser;

+import org.eclipse.datatools.modelbase.sql.expressions.QueryExpression;

+import org.eclipse.datatools.modelbase.sql.expressions.QueryExpressionDefault;

+import org.eclipse.datatools.modelbase.sql.expressions.SQLExpressionsPackage;

+import org.eclipse.datatools.modelbase.sql.expressions.SearchCondition;

+import org.eclipse.datatools.modelbase.sql.expressions.SearchConditionDefault;

+import org.eclipse.datatools.modelbase.sql.statements.SQLStatement;

+import org.eclipse.datatools.modelbase.sql.statements.SQLStatementDefault;

+import org.eclipse.datatools.modelbase.sql.statements.SQLStatementsPackage;

+import org.eclipse.datatools.modelbase.sql.tables.Column;

+import org.eclipse.datatools.modelbase.sql.tables.Table;

+import org.eclipse.datatools.modelbase.sql.tables.Trigger;

+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;

+import org.eclipse.emf.common.util.EList;

+

+public abstract class DB2DdlParser implements DdlParser{

+

+	public DB2DdlParser(DatabaseDefinition def){

+		this.def = def;

+	}

+

+	public void parseView (ViewTable view,String viewText){

+    	DataModelElementFactory factory = this.def.getDataModelElementFactory();

+

+    	String[] tokens = viewText.split("[)\\s][aA][sS][\\s(]",Pattern.CASE_INSENSITIVE);

+    	String body = viewText.substring(tokens[0].length()).trim();

+    	body = body.replaceAll("^[)]?[aA][sS]", "");

+

+    	Pattern pattern = Pattern.compile("(.*SELECT.*)[\\s]+?WITH[\\s]+?.*CHECK[\\s]+?OPTION.*",Pattern.CASE_INSENSITIVE|Pattern.DOTALL); //$NON-NLS-1$

+    	Matcher matcher = pattern.matcher(body);

+		if (matcher.matches()) {

+			body = matcher.group(1).trim();

+		}

+

+		body = body.trim();

+		if (body.startsWith("(") ) {

+			int pos = this.findMatchParenths(body);

+			if (pos == body.length()-1 ) {

+				body = body.substring(1, body.length() -1);

+			}

+		}

+    	QueryExpression queryExpression = (QueryExpression) factory.create(SQLExpressionsPackage.eINSTANCE.getQueryExpressionDefault());

+		((QueryExpressionDefault)queryExpression).setSQL(body);

+		view.setQueryExpression(queryExpression);

+    }

+

+    public void parseTrigger (Trigger trigger,String triggerText){

+    	DataModelElementFactory factory = this.def.getDataModelElementFactory();

+    	

+    	String body = triggerText;

+    	String whenClause=""; //$NON-NLS-1$

+		Pattern pattern = java.util.regex.Pattern.compile("[\\s]*CREATE[\\s]+?TRIGGER(.*)ON(.*)[\\s]+?MODE[\\s]+?DB2SQL(.*)",java.util.regex.Pattern.CASE_INSENSITIVE|java.util.regex.Pattern.DOTALL); //$NON-NLS-1$

+    	Matcher matcher = pattern.matcher(triggerText);

+    	if (matcher.matches()) {

+    		this.parseUpdateColumns(matcher.group(1).trim(),trigger);

+    		this.parseReferencingCluase(matcher.group(2).trim(),trigger);

+    		body = matcher.group(3).trim();

+			int whenPos = this.parseWhenClause(body);

+			if (whenPos >= 0) {

+				whenClause = body.substring(body.indexOf("(")+1,whenPos); //$NON-NLS-1$

+				body = body.substring(whenPos+1).trim();

+			}

+    	}

+    	

+		SearchCondition searchCondition = (SearchCondition) factory.create(SQLExpressionsPackage.eINSTANCE.getSearchConditionDefault());

+		trigger.setWhen(searchCondition);

+		((SearchConditionDefault)searchCondition).setSQL(whenClause);

+

+    	

+		SQLStatement sqlbody = (SQLStatement) factory.create(SQLStatementsPackage.eINSTANCE.getSQLStatementDefault());

+		((SQLStatementDefault)sqlbody).setSQL(body);

+		trigger.getActionStatement().clear();

+		trigger.getActionStatement().add(sqlbody);

+    	

+    }

+	

+    protected int parseWhenClause(String body) {

+    	int pos = -1;

+    	Pattern pattern = Pattern.compile("[\\s]*WHEN[\\s]*?\\u0028(.*)",Pattern.CASE_INSENSITIVE|Pattern.DOTALL); //$NON-NLS-1$

+    	Matcher matcher = pattern.matcher(body);

+    	if (matcher.matches()) {

+    		String whenClause =matcher.group(1);

+    		int matches = 0;

+    		for (int i = 0; i < body.length(); i++) {

+    			if (body.charAt(i)=='(') {

+    				matches++;

+    			} else if (body.charAt(i) ==')') {

+    				matches--;

+    				if (matches == 0) {

+    					pos = i;

+    					break;

+    				}

+    			}

+    		}

+    	}

+    	return pos;

+    }

+    

+    protected void parseUpdateColumns(String body,Trigger trigger) {

+		Pattern pattern = Pattern.compile(".*[\\s]+?UPDATE[\\s]+?OF(.*)",Pattern.CASE_INSENSITIVE|Pattern.DOTALL); //$NON-NLS-1$

+    	Matcher matcher = pattern.matcher(body);

+    	if (matcher.matches()) {

+	    	EList columns = trigger.getTriggerColumn();

+	        StringTokenizer tokenizer = new StringTokenizer(matcher.group(1), ","); //$NON-NLS-1$

+	        String token = ""; //$NON-NLS-1$

+	        while (tokenizer.hasMoreTokens()) {

+	            token = tokenizer.nextToken().trim().replaceAll("\"", "");

+	        	Column column = this.getColumn(trigger.getSubjectTable(), token);

+	        	if (column != null) columns.add(column);

+	        }

+    	}

+    }

+

+    protected void parseReferencingCluase(String body,Trigger trigger) {

+		final byte OLD = 1;

+		final byte NEW = 2;

+		final byte OLD_TABLE = 3;

+		final byte NEW_TABLE = 4;		

+    	

+        StringTokenizer tokenizer = new StringTokenizer(body, " \r\n\t"); //$NON-NLS-1$

+        byte previousToken = 0;

+        boolean expectingNameOrASToken = false;

+        while (tokenizer.hasMoreTokens()) {

+            String token = tokenizer.nextToken().trim();

+            if (token.equalsIgnoreCase("OLD") && previousToken != OLD && !expectingNameOrASToken){ //$NON-NLS-1$

+            	previousToken = OLD;

+            	expectingNameOrASToken = true;

+            } else if (token.equalsIgnoreCase("NEW") && previousToken != NEW && !expectingNameOrASToken){ //$NON-NLS-1$

+            	previousToken = NEW;

+            	expectingNameOrASToken = true;

+            } else if (token.equalsIgnoreCase("OLD_TABLE") && previousToken != OLD_TABLE 

+            		&& !expectingNameOrASToken) { //$NON-NLS-1$

+            	previousToken = OLD_TABLE;

+            	expectingNameOrASToken = true;

+            } else if (token.equalsIgnoreCase("NEW_TABLE") && previousToken != NEW_TABLE 

+            		&& !expectingNameOrASToken) { //$NON-NLS-1$

+            	previousToken = NEW_TABLE;

+            	expectingNameOrASToken = true;

+            } else if (token.equalsIgnoreCase("AS")){ //$NON-NLS-1$

+            	expectingNameOrASToken = true;

+            } else {

+            	switch (previousToken){

+            	case OLD:

+            		trigger.setOldRow(token);

+            		previousToken = 0;

+            		break;

+            	case NEW:

+            		trigger.setNewRow(token);

+            		previousToken = 0;

+            		break;

+            	case OLD_TABLE:

+            		trigger.setOldTable(token);

+            		previousToken = 0;

+            		break;

+            	case NEW_TABLE:

+            		trigger.setNewTable(token);

+            		previousToken = 0;

+            		break;

+            	}

+            	expectingNameOrASToken = false;

+            }

+        

+        }

+    }

+    private Column getColumn(Table table, String columnName){

+		Iterator it = table.getColumns().iterator();

+		while(it.hasNext()) {

+			Column c = (Column) it.next();

+			if(c.getName().equalsIgnoreCase(columnName)) return c;

+		}

+		return null;

+    }

+    

+    private int findMatchParenths(String body){

+    	int pos = -1;

+    	int matches = 1;

+		for (int i = 1; i < body.length(); i++) {

+			if (body.charAt(i)=='(') {

+				matches++;

+			} else if (body.charAt(i) ==')') {

+				matches--;

+				if (matches == 0) {

+					pos = i;

+					break;

+				}

+			}

+		}

+  

+    	return pos;

+    	

+    }

+

+    abstract public DB2MaterializedQueryTable parseMQT(String mqtText);

+    

+    protected DatabaseDefinition def = null;

+}

diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/ddl/DB2DeltaDdlGenerator.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/ddl/DB2DeltaDdlGenerator.java
new file mode 100644
index 0000000..7667c4f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/ddl/DB2DeltaDdlGenerator.java
@@ -0,0 +1,113 @@
+/*******************************************************************************

+ * Copyright (c) 2014 IBM Corporation and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.datatools.enablement.ibm.db2.ddl;

+

+import java.math.BigInteger;

+

+import org.eclipse.datatools.enablement.ibm.db2.model.DB2IdentitySpecifier;

+import org.eclipse.datatools.enablement.ibm.ddl.CoreDeltaDdlGenerator;

+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;

+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;

+import org.eclipse.datatools.modelbase.sql.schema.Sequence;

+import org.eclipse.emf.ecore.EStructuralFeature;

+import org.eclipse.emf.ecore.EcorePackage;

+import org.eclipse.emf.ecore.change.FeatureChange;

+

+public abstract class DB2DeltaDdlGenerator extends CoreDeltaDdlGenerator {

+

+	protected DB2DataPreservationDdlBuilder dPDdlBuilder = null;

+

+	protected DB2DataPreservationDdlBuilder getDPDdlBuilder() {

+		if (dPDdlBuilder == null) initDPDdlBuilder();

+		return dPDdlBuilder;

+	}

+

+	protected abstract  void initDPDdlBuilder();

+

+	protected boolean canAlter(PredefinedDataType type) {

+		String t2 = type.getName();

+		String t1 = (String) getOldValue(EcorePackage.eINSTANCE.getENamedElement_Name(), type);

+		int l2 = 0;

+		int s2 = 0;

+		int l1 = 0;

+		int s1 = 0;

+		EStructuralFeature f = type.eClass().getEStructuralFeature("length"); //$NON-NLS-1$

+		if(f != null) {

+			l2 = ((Integer) type.eGet(f)).intValue();

+			l1 = ((Integer) getOldValue(f, type)).intValue();

+		}

+		f = type.eClass().getEStructuralFeature("precision"); //$NON-NLS-1$

+		if(f != null) {

+			l2 = ((Integer) type.eGet(f)).intValue();

+			l1 = ((Integer) getOldValue(f, type)).intValue();

+		}

+		f = type.eClass().getEStructuralFeature("scale"); //$NON-NLS-1$

+		if(f != null) {

+			s2 = ((Integer) type.eGet(f)).intValue();

+			s1 = ((Integer) getOldValue(f, type)).intValue();

+		}

+		

+		return canAlter(t1, t2, l1, l2, s1, s2);

+	}

+

+	protected boolean canAlter(PredefinedDataType type1, PredefinedDataType type2) {

+		String t1 = type1.getName();

+		int l1 = 0;

+		int s1 = 0;

+		EStructuralFeature f = type1.eClass().getEStructuralFeature("length"); //$NON-NLS-1$

+		if(f != null) {

+			l1 = ((Integer) type1.eGet(f)).intValue();

+		}

+		f = type1.eClass().getEStructuralFeature("precision"); //$NON-NLS-1$

+		if(f != null) {

+			l1 = ((Integer) type1.eGet(f)).intValue();

+		}

+		f = type1.eClass().getEStructuralFeature("scale"); //$NON-NLS-1$

+		if(f != null) {

+			s1 = ((Integer) type1.eGet(f)).intValue();

+		}

+

+		String t2 = type2.getName();

+		int l2 = 0;

+		int s2 = 0;

+		f = type2.eClass().getEStructuralFeature("length"); //$NON-NLS-1$

+		if(f != null) {

+			l2 = ((Integer) type2.eGet(f)).intValue();

+		}

+		f = type2.eClass().getEStructuralFeature("precision"); //$NON-NLS-1$

+		if(f != null) {

+			l2 = ((Integer) type2.eGet(f)).intValue();

+		}

+		f = type2.eClass().getEStructuralFeature("scale"); //$NON-NLS-1$

+		if(f != null) {

+			s2 = ((Integer) type2.eGet(f)).intValue();

+		}

+

+		return canAlter(t1, t2, l1, l2, s1, s2);

+	}

+

+	protected boolean canAlter(Sequence changed, EStructuralFeature feature, FeatureChange setting) {

+		Object changedObj = changed.eGet(feature);

+		if(changedObj instanceof DB2IdentitySpecifier) {

+			DB2IdentitySpecifier is = (DB2IdentitySpecifier)changedObj;

+			EStructuralFeature f = is.eClass().getEStructuralFeature(SQLSchemaPackage.eINSTANCE.IDENTITY_SPECIFIER__START_VALUE);

+			BigInteger startValue = (BigInteger)is.eGet(f);

+			DB2IdentitySpecifier changeToValue = (DB2IdentitySpecifier)setting.getValue();

+			BigInteger changedToStartValue = (BigInteger)changeToValue.eGet(f);

+			if(startValue.intValue() != changedToStartValue.intValue()) {

+				return false;

+			}

+		}

+		return true;

+	}

+	

+	abstract protected boolean canAlter(String type1, String type2, int length1, int length2, int scale1, int scale2);

+}

diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2AccessPlan.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2AccessPlan.java
new file mode 100644
index 0000000..a5630eb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2AccessPlan.java
@@ -0,0 +1,23 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Access Plan</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2AccessPlan()
+ * @model interface="true" abstract="true"
+ * @generated
+ */
+public interface DB2AccessPlan extends SQLObject {
+} // DB2AccessPlan
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Alias.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Alias.java
new file mode 100644
index 0000000..f090a1d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Alias.java
@@ -0,0 +1,88 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Alias</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * SQL Reference for Cross-Platform Development - v1.1
+ * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+ * 
+ * Aliases (Chapter 1. Concepts 9)
+ * 
+ * An alias is an alternate name for a table or view. An alias can be used to reference a table or view in cases where an existing table or view can be referenced. However, the option of referencing a table or view by an alias is not explicitly shown in the syntax diagrams or mentioned in the description of SQL statements.
+ * 
+ * Like tables and views, an alias may be created, dropped, and have a comment associated with it. No authority is necessary to use an alias. Access to the tables and views that are referred to by the alias, however, still requires the appropriate authorization for the current statement.
+ * 
+ * An alias is created with the CREATE ALIAS statement. For more information about creating aliases, see " CREATE ALIAS" on page 318.
+ * 
+ * CREATE ALIAS
+ * The CREATE ALIAS statement defines an alias for a table or view.
+ * 
+ * Invocation: This statement can be embedded in an application program or issued interactively. It is an executable statement that can be dynamically prepared.
+ * 
+ * Authorization: The privileges held by the authorization ID of the statement must include at least one of the following:
+ *  - The privilege to create in the schema
+ *  - Administrative authority.
+ * Syntax: CREATE ALIAS alias-name FOR table-name view-name
+ * 
+ * Description alias-name
+ * Names the alias. The name, including the implicit or explicit qualifier, must not be the same as an index, table, view or alias that already exists at the current server. If the alias-name is qualified, the schema name must not be a system schema.
+ * 
+ * FOR table-name or view-name
+ * Identifies the table or view at the current server for which alias-name is defined. An alias name must not be specified (an alias cannot refer to another alias). An alias can be defined for an object that does not exist at the time of the definition. If it does not exist when the alias is created, a warning is returned. However, the referenced object must exist when a SQL statement containing the alias is used, otherwise an error is returned.
+ * 
+ * Example: Create an alias named CURRENT_PROJECTS for the PROJECT table.
+ * CREATE ALIAS CURRENT_PROJECTS FOR PROJECT
+ * 
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Alias#getAliasedTable <em>Aliased Table</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Alias()
+ * @model
+ * @generated
+ */
+public interface DB2Alias extends Table {
+	/**
+	 * Returns the value of the '<em><b>Aliased Table</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Aliased Table</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Aliased Table</em>' reference.
+	 * @see #setAliasedTable(Table)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Alias_AliasedTable()
+	 * @model required="true"
+	 * @generated
+	 */
+	Table getAliasedTable();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Alias#getAliasedTable <em>Aliased Table</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Aliased Table</em>' reference.
+	 * @see #getAliasedTable()
+	 * @generated
+	 */
+	void setAliasedTable(Table value);
+
+} // DB2Alias
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2ApplicationProcess.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2ApplicationProcess.java
new file mode 100644
index 0000000..7b9c5bc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2ApplicationProcess.java
@@ -0,0 +1,94 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Application Process</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * SQL Reference for Cross-Platform Development - v1.1
+ * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+ * 
+ * Application processes, concurrency, and recovery
+ * 
+ * All SQL programs execute as part of an application process. An application process involves the execution of one or more programs, and is the unit to which the database manager allocates resources and locks. Different application processes may involve the execution of different programs, or different executions of the same program. The means of starting and ending an application process are dependent on the environment.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ApplicationProcess#getIsolationLevel <em>Isolation Level</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ApplicationProcess#getUnitOfWork <em>Unit Of Work</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2ApplicationProcess()
+ * @model
+ * @generated
+ */
+public interface DB2ApplicationProcess extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Isolation Level</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.model.IsolationLevelType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Isolation Level</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Isolation Level</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.IsolationLevelType
+	 * @see #setIsolationLevel(IsolationLevelType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2ApplicationProcess_IsolationLevel()
+	 * @model
+	 * @generated
+	 */
+	IsolationLevelType getIsolationLevel();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ApplicationProcess#getIsolationLevel <em>Isolation Level</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Isolation Level</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.IsolationLevelType
+	 * @see #getIsolationLevel()
+	 * @generated
+	 */
+	void setIsolationLevel(IsolationLevelType value);
+
+	/**
+	 * Returns the value of the '<em><b>Unit Of Work</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Unit Of Work</em>' containment reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Unit Of Work</em>' containment reference.
+	 * @see #setUnitOfWork(DB2Transaction)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2ApplicationProcess_UnitOfWork()
+	 * @model containment="true"
+	 * @generated
+	 */
+	DB2Transaction getUnitOfWork();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ApplicationProcess#getUnitOfWork <em>Unit Of Work</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Unit Of Work</em>' containment reference.
+	 * @see #getUnitOfWork()
+	 * @generated
+	 */
+	void setUnitOfWork(DB2Transaction value);
+
+} // DB2ApplicationProcess
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Cluster.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Cluster.java
new file mode 100644
index 0000000..2051355
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Cluster.java
@@ -0,0 +1,99 @@
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Cluster</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Cluster#getLevel <em>Level</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Cluster#getInstance <em>Instance</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Cluster#getMembers <em>Members</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Cluster()
+ * @model
+ * @generated
+ */
+public interface DB2Cluster extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Level</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Level</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Level</em>' attribute.
+	 * @see #setLevel(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Cluster_Level()
+	 * @model
+	 * @generated
+	 */
+	String getLevel();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Cluster#getLevel <em>Level</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Level</em>' attribute.
+	 * @see #getLevel()
+	 * @generated
+	 */
+	void setLevel(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Instance</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2DatabaseManager#getCluster <em>Cluster</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Instance</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Instance</em>' reference.
+	 * @see #setInstance(DB2DatabaseManager)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Cluster_Instance()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2DatabaseManager#getCluster
+	 * @model opposite="cluster" required="true"
+	 * @generated
+	 */
+	DB2DatabaseManager getInstance();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Cluster#getInstance <em>Instance</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Instance</em>' reference.
+	 * @see #getInstance()
+	 * @generated
+	 */
+	void setInstance(DB2DatabaseManager value);
+
+	/**
+	 * Returns the value of the '<em><b>Members</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Member}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Member#getCluster <em>Cluster</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Members</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Members</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Cluster_Members()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Member#getCluster
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.model.DB2Member" opposite="cluster"
+	 * @generated
+	 */
+	EList getMembers();
+
+} // DB2Cluster
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Column.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Column.java
new file mode 100644
index 0000000..cca00e9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Column.java
@@ -0,0 +1,233 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: DB2Column.java,v 1.6 2008/04/28 20:54:22 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Column</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#getGenerationType <em>Generation Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#isRowChangeTimestamp <em>Row Change Timestamp</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#isRowBegin <em>Row Begin</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#isRowEnd <em>Row End</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#isTransStartID <em>Trans Start ID</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#getBeginPeriod <em>Begin Period</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#getEndPeriod <em>End Period</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Column()
+ * @model
+ * @generated
+ */
+public interface DB2Column extends Column {
+	/**
+	 * Returns the value of the '<em><b>Generation Type</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.model.GenerateType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Generation Type</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Generation Type</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.GenerateType
+	 * @see #setGenerationType(GenerateType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Column_GenerationType()
+	 * @model
+	 * @generated
+	 */
+	GenerateType getGenerationType();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#getGenerationType <em>Generation Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Generation Type</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.GenerateType
+	 * @see #getGenerationType()
+	 * @generated
+	 */
+	void setGenerationType(GenerateType value);
+
+	/**
+	 * Returns the value of the '<em><b>Row Change Timestamp</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Row Change Timestamp</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Row Change Timestamp</em>' attribute.
+	 * @see #setRowChangeTimestamp(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Column_RowChangeTimestamp()
+	 * @model
+	 * @generated
+	 */
+	boolean isRowChangeTimestamp();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#isRowChangeTimestamp <em>Row Change Timestamp</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Row Change Timestamp</em>' attribute.
+	 * @see #isRowChangeTimestamp()
+	 * @generated
+	 */
+	void setRowChangeTimestamp(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Row Begin</b></em>' attribute.
+	 * The default value is <code>"False"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Row Begin</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Row Begin</em>' attribute.
+	 * @see #setRowBegin(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Column_RowBegin()
+	 * @model default="False"
+	 * @generated
+	 */
+	boolean isRowBegin();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#isRowBegin <em>Row Begin</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Row Begin</em>' attribute.
+	 * @see #isRowBegin()
+	 * @generated
+	 */
+	void setRowBegin(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Row End</b></em>' attribute.
+	 * The default value is <code>"False"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Row End</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Row End</em>' attribute.
+	 * @see #setRowEnd(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Column_RowEnd()
+	 * @model default="False"
+	 * @generated
+	 */
+	boolean isRowEnd();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#isRowEnd <em>Row End</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Row End</em>' attribute.
+	 * @see #isRowEnd()
+	 * @generated
+	 */
+	void setRowEnd(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Trans Start ID</b></em>' attribute.
+	 * The default value is <code>"False"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Trans Start ID</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Trans Start ID</em>' attribute.
+	 * @see #setTransStartID(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Column_TransStartID()
+	 * @model default="False"
+	 * @generated
+	 */
+	boolean isTransStartID();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#isTransStartID <em>Trans Start ID</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Trans Start ID</em>' attribute.
+	 * @see #isTransStartID()
+	 * @generated
+	 */
+	void setTransStartID(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Begin Period</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Period#getBeginColumn <em>Begin Column</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Begin Period</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Begin Period</em>' reference.
+	 * @see #setBeginPeriod(DB2Period)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Column_BeginPeriod()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Period#getBeginColumn
+	 * @model opposite="beginColumn"
+	 * @generated
+	 */
+	DB2Period getBeginPeriod();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#getBeginPeriod <em>Begin Period</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Begin Period</em>' reference.
+	 * @see #getBeginPeriod()
+	 * @generated
+	 */
+	void setBeginPeriod(DB2Period value);
+
+	/**
+	 * Returns the value of the '<em><b>End Period</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Period#getEndColumn <em>End Column</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>End Period</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>End Period</em>' reference.
+	 * @see #setEndPeriod(DB2Period)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Column_EndPeriod()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Period#getEndColumn
+	 * @model opposite="endColumn"
+	 * @generated
+	 */
+	DB2Period getEndPeriod();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#getEndPeriod <em>End Period</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>End Period</em>' reference.
+	 * @see #getEndPeriod()
+	 * @generated
+	 */
+	void setEndPeriod(DB2Period value);
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	boolean isGenerated();
+
+} // DB2Column
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Database.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Database.java
new file mode 100644
index 0000000..b2a4198
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Database.java
@@ -0,0 +1,95 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Database</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * SQL Reference for Cross-Platform Development - v1.1
+ * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+ * 
+ * Relational databases (Chapter 1. Concepts 1)
+ * 
+ * A relational database is a database that can be perceived as a set of tables and can be manipulated in accordance with the relational model of data. The relational database contains a set of objects used to store, access, and manage data. The set of objects includes tables, views, indexes, aliases, distinct types, functions, procedures, and packages. Any number of relational databases can be created on a given physical machine.
+ * 
+ * A partitioned relational database is a relational database whose data is managed across multiple partitions (also called nodes). This separation of data across partitions is transparent to users of most SQL statements. However, some data definition language (DDL) statements take partition information into consideration (for example, CREATE DATABASE PARTITION GROUP). (Data definition language is the subset of SQL statements used to describe data relationships in a database.)
+ * 
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Database#isPartitioned <em>Partitioned</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Database#isDefaultOrganizeByRow <em>Default Organize By Row</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Database()
+ * @model
+ * @generated
+ */
+public interface DB2Database extends Database {
+	/**
+	 * Returns the value of the '<em><b>Partitioned</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Partitioned</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Partitioned</em>' attribute.
+	 * @see #setPartitioned(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Database_Partitioned()
+	 * @model
+	 * @generated
+	 */
+	boolean isPartitioned();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Database#isPartitioned <em>Partitioned</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Partitioned</em>' attribute.
+	 * @see #isPartitioned()
+	 * @generated
+	 */
+	void setPartitioned(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Default Organize By Row</b></em>' attribute.
+	 * The default value is <code>"True"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Default Organize By Row</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Default Organize By Row</em>' attribute.
+	 * @see #setDefaultOrganizeByRow(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Database_DefaultOrganizeByRow()
+	 * @model default="True"
+	 * @generated
+	 */
+	boolean isDefaultOrganizeByRow();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Database#isDefaultOrganizeByRow <em>Default Organize By Row</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Default Organize By Row</em>' attribute.
+	 * @see #isDefaultOrganizeByRow()
+	 * @generated
+	 */
+	void setDefaultOrganizeByRow(boolean value);
+
+} // DB2Database
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2DatabaseManager.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2DatabaseManager.java
new file mode 100644
index 0000000..92e935e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2DatabaseManager.java
@@ -0,0 +1,128 @@
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Database Manager</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * SQL Reference for Cross-Platform Development - v1.1
+ * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+ * 
+ * [...]
+ * SQL statements are executed by a database manager. One of the functions of the database manager is to transform the specification of a result table into a sequence of internal operations that optimize data retrieval.
+ * 
+ * [...]
+ * The database manager maintains a set of tables and views containing information about objects in the database. These tables and views are collectively known as the catalog. The catalog tables and catalog views contain information about objects such as tables, views, indexes, packages, and constraints.
+ * 
+ * [...]
+ * An application process involves the execution of one or more programs, and is the unit to which the database manager allocates resources and locks.
+ * 
+ * [...]
+ * The locking facilities of the database managers are similar but not identical. One of the common properties is that each of the database managers can acquire locks in order to prevent uncommitted changes made by one application process from being perceived by any other. The database manager will release all locks it has acquired on behalf of an application process when that process ends, but an application process itself can also explicitly request that locks be released sooner.
+ * 
+ * [...]
+ * Like the locking facilities, the recovery facilities of the database managers are similar but not identical. One common property is that each of the database managers provides a means of backing out uncommitted changes made by an application process.
+ * 
+ * [...]
+ * The database manager can back out all changes made in a unit of work or only selected changes.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2DatabaseManager#getDatabases <em>Databases</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2DatabaseManager#getDb2Process <em>Db2 Process</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2DatabaseManager#getServer <em>Server</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2DatabaseManager#getCluster <em>Cluster</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2DatabaseManager()
+ * @model
+ * @generated
+ */
+public interface DB2DatabaseManager extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Databases</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Database}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Databases</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Databases</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2DatabaseManager_Databases()
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.model.DB2Database"
+	 * @generated
+	 */
+	EList getDatabases();
+
+	/**
+	 * Returns the value of the '<em><b>Db2 Process</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ApplicationProcess}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Db2 Process</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Db2 Process</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2DatabaseManager_Db2Process()
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.model.DB2ApplicationProcess"
+	 * @generated
+	 */
+	EList getDb2Process();
+
+	/**
+	 * Returns the value of the '<em><b>Server</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.model.luw.LUWAdminServer}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.luw.LUWAdminServer#getInstances <em>Instances</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Server</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Server</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2DatabaseManager_Server()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.luw.LUWAdminServer#getInstances
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.model.luw.LUWAdminServer" opposite="instances"
+	 * @generated
+	 */
+	EList getServer();
+
+	/**
+	 * Returns the value of the '<em><b>Cluster</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Cluster#getInstance <em>Instance</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Cluster</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Cluster</em>' reference.
+	 * @see #setCluster(DB2Cluster)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2DatabaseManager_Cluster()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Cluster#getInstance
+	 * @model opposite="instance"
+	 * @generated
+	 */
+	DB2Cluster getCluster();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2DatabaseManager#getCluster <em>Cluster</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Cluster</em>' reference.
+	 * @see #getCluster()
+	 * @generated
+	 */
+	void setCluster(DB2Cluster value);
+
+} // DB2DatabaseManager
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2DistinctUserDefinedType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2DistinctUserDefinedType.java
new file mode 100644
index 0000000..049721c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2DistinctUserDefinedType.java
@@ -0,0 +1,22 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.datatools.modelbase.sql.datatypes.DistinctUserDefinedType;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Distinct User Defined Type</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2DistinctUserDefinedType()
+ * @model abstract="true"
+ * @generated
+ */
+public interface DB2DistinctUserDefinedType extends DistinctUserDefinedType {
+} // DB2DistinctUserDefinedType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2ExtendedOptions.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2ExtendedOptions.java
new file mode 100644
index 0000000..56facab
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2ExtendedOptions.java
@@ -0,0 +1,239 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Extended Options</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#getClasspathCompileJars <em>Classpath Compile Jars</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#getPreCompileOpts <em>Pre Compile Opts</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#isForDebug <em>For Debug</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#isBuilt <em>Built</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#getCompileOpts <em>Compile Opts</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#getLinkOpts <em>Link Opts</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#getBindOpts <em>Bind Opts</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#getColid <em>Colid</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2ExtendedOptions()
+ * @model
+ * @generated
+ */
+public interface DB2ExtendedOptions extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Classpath Compile Jars</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * Java classpath required to compile each of the source files that are part of either the stored procedure or UDF. 
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Classpath Compile Jars</em>' attribute.
+	 * @see #setClasspathCompileJars(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2ExtendedOptions_ClasspathCompileJars()
+	 * @model
+	 * @generated
+	 */
+	String getClasspathCompileJars();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#getClasspathCompileJars <em>Classpath Compile Jars</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Classpath Compile Jars</em>' attribute.
+	 * @see #getClasspathCompileJars()
+	 * @generated
+	 */
+	void setClasspathCompileJars(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Pre Compile Opts</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * Specifies the precompile options to be used for the stored procedure. For SQLJ
+	 * procedure we keep the db2profc options which also includes DB2 package name.
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Pre Compile Opts</em>' attribute.
+	 * @see #setPreCompileOpts(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2ExtendedOptions_PreCompileOpts()
+	 * @model
+	 * @generated
+	 */
+	String getPreCompileOpts();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#getPreCompileOpts <em>Pre Compile Opts</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Pre Compile Opts</em>' attribute.
+	 * @see #getPreCompileOpts()
+	 * @generated
+	 */
+	void setPreCompileOpts(String value);
+
+	/**
+	 * Returns the value of the '<em><b>For Debug</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * Indicates whether the routine is to be built for debug.
+	 * 
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>For Debug</em>' attribute.
+	 * @see #setForDebug(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2ExtendedOptions_ForDebug()
+	 * @model
+	 * @generated
+	 */
+	boolean isForDebug();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#isForDebug <em>For Debug</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>For Debug</em>' attribute.
+	 * @see #isForDebug()
+	 * @generated
+	 */
+	void setForDebug(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Built</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * False -> has yet to be successfully built by DC/subuilder/other app
+	 * True -> has been built at least once successfully within DC/subuilder/other app.
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Built</em>' attribute.
+	 * @see #setBuilt(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2ExtendedOptions_Built()
+	 * @model
+	 * @generated
+	 */
+	boolean isBuilt();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#isBuilt <em>Built</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Built</em>' attribute.
+	 * @see #isBuilt()
+	 * @generated
+	 */
+	void setBuilt(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Compile Opts</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * Specifies the compile options to be used for the stored procedure.
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Compile Opts</em>' attribute.
+	 * @see #setCompileOpts(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2ExtendedOptions_CompileOpts()
+	 * @model
+	 * @generated
+	 */
+   String getCompileOpts();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#getCompileOpts <em>Compile Opts</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Compile Opts</em>' attribute.
+	 * @see #getCompileOpts()
+	 * @generated
+	 */
+   void setCompileOpts(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Link Opts</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * Specifies the link options to be used for the stored procedure.
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Link Opts</em>' attribute.
+	 * @see #setLinkOpts(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2ExtendedOptions_LinkOpts()
+	 * @model
+	 * @generated
+	 */
+   String getLinkOpts();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#getLinkOpts <em>Link Opts</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Link Opts</em>' attribute.
+	 * @see #getLinkOpts()
+	 * @generated
+	 */
+   void setLinkOpts(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Bind Opts</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * Specifies the bind options to be used for the stored procedure.
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Bind Opts</em>' attribute.
+	 * @see #setBindOpts(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2ExtendedOptions_BindOpts()
+	 * @model
+	 * @generated
+	 */
+   String getBindOpts();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#getBindOpts <em>Bind Opts</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Bind Opts</em>' attribute.
+	 * @see #getBindOpts()
+	 * @generated
+	 */
+   void setBindOpts(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Colid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * Column id previously a zSeries item, now also for LUW.
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Colid</em>' attribute.
+	 * @see #setColid(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2ExtendedOptions_Colid()
+	 * @model
+	 * @generated
+	 */
+   String getColid();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#getColid <em>Colid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Colid</em>' attribute.
+	 * @see #getColid()
+	 * @generated
+	 */
+   void setColid(String value);
+
+} // DB2ExtendedOptions
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Function.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Function.java
new file mode 100644
index 0000000..5aabcfb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Function.java
@@ -0,0 +1,573 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Function</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * SQL Reference for Cross-Platform Development - v1.1
+ * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+ * 
+ * Functions (Chapter 1. Concepts 9)
+ * 
+ * A function is a routine that can be invoked from within other SQL statements and returns a value, or a table. For more information, see "Functions" on page 93.
+ * 
+ * Functions (Chapter 2. Language elements 93)
+ * 
+ * A function is an operation denoted by a function name followed by zero or more operands that are enclosed in parentheses. It represents a relationship between a set of input values and a set of result values. The input values to a function are called arguments. For example, a function can be passed two input arguments that have date and time data types and return a value with a timestamp data type as the result.
+ * 
+ * Types of functions:
+ * There are several ways to classify functions. One way to classify functions is as built-in, user-defined, or generated user-defined functions for distinct types.
+ *  -  Built-in functions are functions that come with the database manager. These functions provide a single-value result. Built-in functions include operator functions such as ??+??, column functions such as AVG, and scalar functions such as SUBSTR. For a list of the built-in column and scalar functions and information on these functions, see Chapter 3, "Built-in functions", on page 131. The built-in functions are in a product-specific schema.
+ *  - User-defined functions are functions that are created using the CREATE FUNCTION statement and registered to the database manager in the catalog. For more information, see "CREATE FUNCTION" on page 325. These functions allow users to extend the function of the database manager by adding their own or third party vendor function definitions. A user-defined function is an SQL, external, or sourced function. An SQL function is defined to the database using only an SQL RETURN statement. An external function is defined to the database with a reference to an external program that is executed when the function is invoked. A sourced function is defined to the
+ * database with a reference to a built-in function or another user-defined function. Sourced functions can be used to extend built-in column and scalar functions for use on distinct types. A user-defined function resides in the schema in which it was created.
+ *  - Generated user-defined functions for distinct types are functions that the database manager automatically generates when a distinct type is created using the CREATE DISTINCT TYPE statement. These functions support casting from the distinct type to the source type and from the source type to the distinct type. The ability to cast between the data types is important because a distinct type is compatible only with itself. The generated user-defined functions for distinct types reside in the same schema as the distinct type for which they were created. For more information about the functions that are generated for a distinct type, see "CREATE DISTINCT TYPE" on page 319.
+ * 
+ * Another way to classify functions is as column, scalar, or table functions, depending on the input data values and result values.
+ *  - A column function receives a set of values for each argument (such as the values of a column) and returns a single-value result for the set of input values. Column functions are sometimes called aggregating functions. Built-in functions and user-defined sourced functions can be column functions.
+ *  - A scalar function receives a single value for each argument and returns a single-value result. Built-in functions and user-defined functions can be scalar functions. Generated user-defined functions for distinct types are also scalar functions.
+ *  - A table function returns a table for the set of arguments it receives. Each argument is a single value. A table function can be referenced only in the FROM clause of a subselect. A table function can be defined as an external function, but a table function cannot be a sourced function. Table functions can be used to apply SQL language processing power to data that is not data that is not stored in the database or to allow access to such data
+ * as if it were stored in a result table. For example, a table function can take a file and convert it to a table, get data from the Web and tabularize it, or access a Lotus Notes database and return information about email messages.
+ * 
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#isFinalCall <em>Final Call</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#isScratchPad <em>Scratch Pad</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getScratchPadLength <em>Scratch Pad Length</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getFunctionType <em>Function Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getPredicate <em>Predicate</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#isExternalAction <em>External Action</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getCardinality <em>Cardinality</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#isAllowParallel <em>Allow Parallel</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getReturnClause <em>Return Clause</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getOrigin <em>Origin</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#isInheritLockRequest <em>Inherit Lock Request</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getDialect <em>Dialect</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#isInline <em>Inline</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getVersion <em>Version</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#isSecured <em>Secured</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Function()
+ * @model interface="true" abstract="true"
+ * @generated
+ */
+public interface DB2Function extends DB2Routine {
+   /**
+    * Pseudo-enumerated value for type.  COLUMN_TYPE means
+    * the function returns a column.
+    * @see DB2Function#setType(String);
+    */
+   String COLUMN_TYPE = "C"; //$NON-NLS-1$
+
+   /**
+    * Pseudo-enumerated value for type.  SCALAR_TYPE means
+    * the function returns a scalar.
+    * @see DB2Function#setType(String);
+    */
+   String SCALAR_TYPE = "S"; //$NON-NLS-1$
+
+   /**
+    * Pseudo-enumerated value for type.  TABLE_TYPE means
+    * the function returns a table.
+    * @see DB2Function#setType(String);
+    */
+   String TABLE_TYPE = "T"; //$NON-NLS-1$
+
+   /**
+    * Pseudo-enumerated value for type.  ROW_TYPE means
+    * the function returns a row.
+    * @see DB2Function#setType(String);
+    */
+   String ROW_TYPE = "R"; //$NON-NLS-1$
+
+	/**
+	 * Returns the value of the '<em><b>Final Call</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * This optional clause specifies whether a final call is to be made to an 
+	 * external function. The purpose of such a final call is to enable the external 
+	 * function to free any system resources it has acquired. It can be useful in 
+	 * conjunction with the SCRATCHPAD keyword in situations where the 
+	 * external function acquires system resources such as memory and anchors 
+	 * them in the scratchpad.
+	 * 
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Final Call</em>' attribute.
+	 * @see #setFinalCall(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Function_FinalCall()
+	 * @model
+	 * @generated
+	 */
+	boolean isFinalCall();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#isFinalCall <em>Final Call</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Final Call</em>' attribute.
+	 * @see #isFinalCall()
+	 * @generated
+	 */
+	void setFinalCall(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Scratch Pad</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * <DL> 
+	 * <DT>SCRATCHPAD (True) 
+	 * <DD>Indicates whether the function requires a static memory area. 
+	 * <DT>NO SCRATCHPAD (False) 
+	 * <DD>Indicates that the function does not require a persistent memory area. 
+	 * </DL> 
+	 * <p> 
+	 * If True, then there can be an optional length (see scratchPadLength) 
+	 * 
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Scratch Pad</em>' attribute.
+	 * @see #setScratchPad(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Function_ScratchPad()
+	 * @model
+	 * @generated
+	 */
+	boolean isScratchPad();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#isScratchPad <em>Scratch Pad</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Scratch Pad</em>' attribute.
+	 * @see #isScratchPad()
+	 * @generated
+	 */
+	void setScratchPad(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Scratch Pad Length</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * If this is null or empty or a string value other than 1..32767, then 
+	 * NO SCRATCHPAD 
+	 * otherwise there will be 
+	 * SCRATCHPAD <length> 
+	 * where the default is 100, the same as if no length was specified. 
+	 * 
+	 * NO SCRATCHPAD or SCRATCHPAD length 
+	 * This optional clause may be used to specify whether a scratchpad is to be 
+	 * provided for an external function. (It is strongly recommended that 
+	 * user-defined functions be re-entrant, so a scratchpad provides a means for 
+	 * the function to "save state" from one call to the next.) 
+	 * 
+	 * SCRATCHPAD is not supported for PARAMETER STYLE JAVA functions.
+	 * 
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Scratch Pad Length</em>' attribute.
+	 * @see #setScratchPadLength(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Function_ScratchPadLength()
+	 * @model
+	 * @generated
+	 */
+	int getScratchPadLength();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getScratchPadLength <em>Scratch Pad Length</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Scratch Pad Length</em>' attribute.
+	 * @see #getScratchPadLength()
+	 * @generated
+	 */
+	void setScratchPadLength(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Function Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+    * <p>
+    * Please refer to the defined constants at the beginning of this module for
+    * the values to use when passing in the argument.
+    * </p>
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * The valid values to indicate the function type are: 
+	 * C (Column) 
+	 * S (Scaler) 
+	 * T (Table) 
+	 * R (Row)
+	 * 
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Function Type</em>' attribute.
+	 * @see #setFunctionType(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Function_FunctionType()
+	 * @model
+	 * @generated
+	 */
+	String getFunctionType();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getFunctionType <em>Function Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <p>
+    * Please refer to the defined constants at the beginning of this module for
+    * the values to use when passing in the argument.
+    * </p>
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Function Type</em>' attribute.
+	 * @see #getFunctionType()
+	 * @generated
+	 */
+	void setFunctionType(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Predicate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * Defines the filtering and/or index extension exploitation performed when 
+	 * this function is used in a predicate. A predicate-specification allows the 
+	 * optional SELECTIVITY clause of a search-condition to be specified. If the 
+	 * PREDICATES clause is specified, the function must be defined as 
+	 * DETERMINISTIC with NO EXTERNAL ACTION (SQLSTATE 42613).
+	 * 
+	 * 
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Predicate</em>' attribute.
+	 * @see #setPredicate(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Function_Predicate()
+	 * @model
+	 * @generated
+	 */
+	String getPredicate();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getPredicate <em>Predicate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Predicate</em>' attribute.
+	 * @see #getPredicate()
+	 * @generated
+	 */
+	void setPredicate(String value);
+
+	/**
+	 * Returns the value of the '<em><b>External Action</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * This optional clause specifies whether or not the function takes some 
+	 * action that changes the state of an object not managed by the database 
+	 * manager. Optimizations that assume functions have no external impacts 
+	 * are prevented by specifying EXTERNAL ACTION. For example: sending a 
+	 * message, ringing a bell, or writing a record to a file.
+	 * 
+	 * 
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>External Action</em>' attribute.
+	 * @see #setExternalAction(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Function_ExternalAction()
+	 * @model
+	 * @generated
+	 */
+   boolean isExternalAction();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#isExternalAction <em>External Action</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>External Action</em>' attribute.
+	 * @see #isExternalAction()
+	 * @generated
+	 */
+   void setExternalAction(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Cardinality</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * From the UDB 7.1 documentation for CREATE FUNCTION (External Table): 
+	 * 
+	 * This optional clause provides an estimate of the expected number of rows 
+	 * to be returned by the function for optimization purposes. Valid values for 
+	 * integer range from 0 to 2,147,483,647 inclusive. 
+	 * 
+	 * If the CARDINALITY clause is not specified for a table function, DB2 will 
+	 * assume a finite value as a default- the same value assumed for tables for 
+	 * which the RUNSTATS utility has not gathered statistics. 
+	 * 
+	 * Warning: if a function does in fact have infinite cardinality, i.e. it returns a 
+	 * row every time it is called to do so, never returning the .end-of-table. 
+	 * condition, then queries which require the .end-of-table. condition to 
+	 * correctly function will be infinite, and will have to be interrupted. 
+	 * 
+	 * Examples of such queries are those involving GROUP BY and ORDER BY. 
+	 * The user is advised to not write such UDFs.
+	 * 
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Cardinality</em>' attribute.
+	 * @see #setCardinality(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Function_Cardinality()
+	 * @model
+	 * @generated
+	 */
+   int getCardinality();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getCardinality <em>Cardinality</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Cardinality</em>' attribute.
+	 * @see #getCardinality()
+	 * @generated
+	 */
+   void setCardinality(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Allow Parallel</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * This optional clause specifies whether, for a single reference to the 
+	 * function, the invocation of the function can be parallelized. In general, the 
+	 * invocations of most scalar functions should be parallelizable, but there 
+	 * may be functions (such as those depending on a single copy of a 
+	 * scratchpad) that cannot. If either ALLOW PARALLEL or DISALLOW 
+	 * PARALLEL are specified for a scalar function, then DB2 will accept this 
+	 * specification. 
+	 * 
+	 * The syntax diagram indicates that the default value is ALLOW PARALLEL. 
+	 * However, the default is DISALLOW PARALLEL if one or more of the 
+	 * following options is specified in the statement: 
+	 * NOT DETERMINISTIC 
+	 * EXTERNAL ACTION 
+	 * SCRATCHPAD 
+	 * FINAL CALL 
+	 * MODIFIES SQL DATA (version 8) 
+	 * 
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Allow Parallel</em>' attribute.
+	 * @see #setAllowParallel(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Function_AllowParallel()
+	 * @model
+	 * @generated
+	 */
+   boolean isAllowParallel();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#isAllowParallel <em>Allow Parallel</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Allow Parallel</em>' attribute.
+	 * @see #isAllowParallel()
+	 * @generated
+	 */
+   void setAllowParallel(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Return Clause</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * Contains the text of the SQL statement in the 
+	 * RETURN <SQL-statement> 
+	 * 
+	 * temporary until we hook in the SQLStatement portion of the model.
+	 * 
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Return Clause</em>' attribute.
+	 * @see #setReturnClause(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Function_ReturnClause()
+	 * @model
+	 * @generated
+	 */
+   String getReturnClause();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getReturnClause <em>Return Clause</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Return Clause</em>' attribute.
+	 * @see #getReturnClause()
+	 * @generated
+	 */
+   void setReturnClause(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Origin</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.model.OriginType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Origin</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Origin</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.OriginType
+	 * @see #setOrigin(OriginType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Function_Origin()
+	 * @model
+	 * @generated
+	 */
+	OriginType getOrigin();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getOrigin <em>Origin</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Origin</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.OriginType
+	 * @see #getOrigin()
+	 * @generated
+	 */
+	void setOrigin(OriginType value);
+
+	/**
+	 * Returns the value of the '<em><b>Inherit Lock Request</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Inherit Lock Request</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Inherit Lock Request</em>' attribute.
+	 * @see #setInheritLockRequest(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Function_InheritLockRequest()
+	 * @model
+	 * @generated
+	 */
+	boolean isInheritLockRequest();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#isInheritLockRequest <em>Inherit Lock Request</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Inherit Lock Request</em>' attribute.
+	 * @see #isInheritLockRequest()
+	 * @generated
+	 */
+	void setInheritLockRequest(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Dialect</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.model.SourceDialect}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Dialect</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Dialect</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.SourceDialect
+	 * @see #setDialect(SourceDialect)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Function_Dialect()
+	 * @model
+	 * @generated
+	 */
+	SourceDialect getDialect();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getDialect <em>Dialect</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Dialect</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.SourceDialect
+	 * @see #getDialect()
+	 * @generated
+	 */
+	void setDialect(SourceDialect value);
+
+	/**
+	 * Returns the value of the '<em><b>Inline</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Inline</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Inline</em>' attribute.
+	 * @see #setInline(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Function_Inline()
+	 * @model
+	 * @generated
+	 */
+	boolean isInline();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#isInline <em>Inline</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Inline</em>' attribute.
+	 * @see #isInline()
+	 * @generated
+	 */
+	void setInline(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Version</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Version</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Version</em>' attribute.
+	 * @see #setVersion(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Function_Version()
+	 * @model
+	 * @generated
+	 */
+	String getVersion();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getVersion <em>Version</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Version</em>' attribute.
+	 * @see #getVersion()
+	 * @generated
+	 */
+	void setVersion(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Secured</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Secured</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Secured</em>' attribute.
+	 * @see #setSecured(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Function_Secured()
+	 * @model
+	 * @generated
+	 */
+	boolean isSecured();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#isSecured <em>Secured</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Secured</em>' attribute.
+	 * @see #isSecured()
+	 * @generated
+	 */
+	void setSecured(boolean value);
+
+} // DB2Function
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2IdentitySpecifier.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2IdentitySpecifier.java
new file mode 100644
index 0000000..6631a7d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2IdentitySpecifier.java
@@ -0,0 +1,136 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: DB2IdentitySpecifier.java,v 1.10 2009/07/30 00:21:45 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import java.math.BigInteger;
+import org.eclipse.datatools.modelbase.sql.schema.IdentitySpecifier;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Identity Specifier</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2IdentitySpecifier#getCache <em>Cache</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2IdentitySpecifier#isOrder <em>Order</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2IdentitySpecifier#isSystemGenerated <em>System Generated</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2IdentitySpecifier#getRestartValue <em>Restart Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2IdentitySpecifier()
+ * @model
+ * @generated
+ */
+public interface DB2IdentitySpecifier extends IdentitySpecifier {
+	/**
+	 * Returns the value of the '<em><b>Cache</b></em>' attribute.
+	 * The default value is <code>"20"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Cache</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Cache</em>' attribute.
+	 * @see #setCache(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2IdentitySpecifier_Cache()
+	 * @model default="20"
+	 * @generated
+	 */
+	int getCache();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2IdentitySpecifier#getCache <em>Cache</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Cache</em>' attribute.
+	 * @see #getCache()
+	 * @generated
+	 */
+	void setCache(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Order</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * Sequences values are dispensed in order if True else unique but not necissarily unique.
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Order</em>' attribute.
+	 * @see #setOrder(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2IdentitySpecifier_Order()
+	 * @model
+	 * @generated
+	 */
+	boolean isOrder();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2IdentitySpecifier#isOrder <em>Order</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Order</em>' attribute.
+	 * @see #isOrder()
+	 * @generated
+	 */
+	void setOrder(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>System Generated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>System Generated</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>System Generated</em>' attribute.
+	 * @see #setSystemGenerated(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2IdentitySpecifier_SystemGenerated()
+	 * @model
+	 * @generated
+	 */
+	boolean isSystemGenerated();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2IdentitySpecifier#isSystemGenerated <em>System Generated</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>System Generated</em>' attribute.
+	 * @see #isSystemGenerated()
+	 * @generated
+	 */
+	void setSystemGenerated(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Restart Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Restart Value</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Restart Value</em>' attribute.
+	 * @see #setRestartValue(BigInteger)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2IdentitySpecifier_RestartValue()
+	 * @model
+	 * @generated
+	 */
+	BigInteger getRestartValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2IdentitySpecifier#getRestartValue <em>Restart Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Restart Value</em>' attribute.
+	 * @see #getRestartValue()
+	 * @generated
+	 */
+	void setRestartValue(BigInteger value);
+
+} // DB2IdentitySpecifier
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Index.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Index.java
new file mode 100644
index 0000000..756b1f1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Index.java
@@ -0,0 +1,143 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Index</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Index#getIndexType <em>Index Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Index#isBusPeriodWithoutOverlap <em>Bus Period Without Overlap</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Index#isEncodedVector <em>Encoded Vector</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Index#getDB2MultidimensionalIndex <em>DB2 Multidimensional Index</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Index()
+ * @model
+ * @generated
+ */
+public interface DB2Index extends Index {
+	/**
+	 * Returns the value of the '<em><b>Index Type</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2IndexType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Index Type</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Index Type</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2IndexType
+	 * @see #setIndexType(DB2IndexType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Index_IndexType()
+	 * @model
+	 * @generated
+	 */
+	DB2IndexType getIndexType();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Index#getIndexType <em>Index Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Index Type</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2IndexType
+	 * @see #getIndexType()
+	 * @generated
+	 */
+	void setIndexType(DB2IndexType value);
+
+	/**
+	 * Returns the value of the '<em><b>Bus Period Without Overlap</b></em>' attribute.
+	 * The default value is <code>"False"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Bus Period Without Overlap</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Bus Period Without Overlap</em>' attribute.
+	 * @see #setBusPeriodWithoutOverlap(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Index_BusPeriodWithoutOverlap()
+	 * @model default="False"
+	 * @generated
+	 */
+	boolean isBusPeriodWithoutOverlap();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Index#isBusPeriodWithoutOverlap <em>Bus Period Without Overlap</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Bus Period Without Overlap</em>' attribute.
+	 * @see #isBusPeriodWithoutOverlap()
+	 * @generated
+	 */
+	void setBusPeriodWithoutOverlap(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Encoded Vector</b></em>' attribute.
+	 * The default value is <code>"False"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Encoded Vector</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Encoded Vector</em>' attribute.
+	 * @see #setEncodedVector(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Index_EncodedVector()
+	 * @model default="False"
+	 * @generated
+	 */
+	boolean isEncodedVector();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Index#isEncodedVector <em>Encoded Vector</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Encoded Vector</em>' attribute.
+	 * @see #isEncodedVector()
+	 * @generated
+	 */
+	void setEncodedVector(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>DB2 Multidimensional Index</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2MultidimensionalIndex#getDimensionIndexes <em>Dimension Indexes</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>DB2 Multidimensional Index</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>DB2 Multidimensional Index</em>' reference.
+	 * @see #setDB2MultidimensionalIndex(DB2MultidimensionalIndex)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Index_DB2MultidimensionalIndex()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2MultidimensionalIndex#getDimensionIndexes
+	 * @model opposite="dimensionIndexes" required="true"
+	 * @generated
+	 */
+	DB2MultidimensionalIndex getDB2MultidimensionalIndex();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Index#getDB2MultidimensionalIndex <em>DB2 Multidimensional Index</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>DB2 Multidimensional Index</em>' reference.
+	 * @see #getDB2MultidimensionalIndex()
+	 * @generated
+	 */
+	void setDB2MultidimensionalIndex(DB2MultidimensionalIndex value);
+
+} // DB2Index
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2IndexType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2IndexType.java
new file mode 100644
index 0000000..91f2d6f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2IndexType.java
@@ -0,0 +1,286 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: DB2IndexType.java,v 1.8 2009/01/31 00:22:40 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>DB2 Index Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2IndexType()
+ * @model
+ * @generated
+ */
+public final class DB2IndexType extends AbstractEnumerator {
+	/**
+	 * The '<em><b>REGULAR</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #REGULAR_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int REGULAR = 0;
+
+	/**
+	 * The '<em><b>BLOCK</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #BLOCK_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int BLOCK = 1;
+
+	/**
+	 * The '<em><b>DIMENSION</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #DIMENSION_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int DIMENSION = 2;
+
+	/**
+	 * The '<em><b>XMLPATH</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #XMLPATH_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int XMLPATH = 3;
+
+	/**
+	 * The '<em><b>XMLREGION</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #XMLREGION_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int XMLREGION = 4;
+
+	/**
+	 * The '<em><b>XMLCOLUMN LOGICAL</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #XMLCOLUMN_LOGICAL_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int XMLCOLUMN_LOGICAL = 5;
+
+	/**
+	 * The '<em><b>XMLCOLUMN PHYSICAL</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #XMLCOLUMN_PHYSICAL_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int XMLCOLUMN_PHYSICAL = 6;
+
+	/**
+	 * The '<em><b>REGULAR</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>REGULAR</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #REGULAR
+	 * @generated
+	 * @ordered
+	 */
+	public static final DB2IndexType REGULAR_LITERAL = new DB2IndexType(REGULAR, "REGULAR", "REGULAR"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>BLOCK</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>BLOCK</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #BLOCK
+	 * @generated
+	 * @ordered
+	 */
+	public static final DB2IndexType BLOCK_LITERAL = new DB2IndexType(BLOCK, "BLOCK", "BLOCK"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>DIMENSION</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>DIMENSION</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #DIMENSION
+	 * @generated
+	 * @ordered
+	 */
+	public static final DB2IndexType DIMENSION_LITERAL = new DB2IndexType(DIMENSION, "DIMENSION", "DIMENSION"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>XMLPATH</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>XMLPATH</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #XMLPATH
+	 * @generated
+	 * @ordered
+	 */
+	public static final DB2IndexType XMLPATH_LITERAL = new DB2IndexType(XMLPATH, "XMLPATH", "XMLPATH"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>XMLREGION</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>XMLREGION</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #XMLREGION
+	 * @generated
+	 * @ordered
+	 */
+	public static final DB2IndexType XMLREGION_LITERAL = new DB2IndexType(XMLREGION, "XMLREGION", "XMLREGION"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>XMLCOLUMN LOGICAL</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>XMLCOLUMN LOGICAL</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #XMLCOLUMN_LOGICAL
+	 * @generated
+	 * @ordered
+	 */
+	public static final DB2IndexType XMLCOLUMN_LOGICAL_LITERAL = new DB2IndexType(XMLCOLUMN_LOGICAL, "XMLCOLUMN_LOGICAL", "XMLCOLUMN_LOGICAL"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>XMLCOLUMN PHYSICAL</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>XMLCOLUMN PHYSICAL</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #XMLCOLUMN_PHYSICAL
+	 * @generated
+	 * @ordered
+	 */
+	public static final DB2IndexType XMLCOLUMN_PHYSICAL_LITERAL = new DB2IndexType(XMLCOLUMN_PHYSICAL, "XMLCOLUMN_PHYSICAL", "XMLCOLUMN_PHYSICAL"); //$NON-NLS-1$
+
+	/**
+	 * An array of all the '<em><b>DB2 Index Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final DB2IndexType[] VALUES_ARRAY =
+		new DB2IndexType[] {
+			REGULAR_LITERAL,
+			BLOCK_LITERAL,
+			DIMENSION_LITERAL,
+			XMLPATH_LITERAL,
+			XMLREGION_LITERAL,
+			XMLCOLUMN_LOGICAL_LITERAL,
+			XMLCOLUMN_PHYSICAL_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>DB2 Index Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>DB2 Index Type</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static DB2IndexType get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			DB2IndexType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>DB2 Index Type</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static DB2IndexType getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			DB2IndexType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>DB2 Index Type</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static DB2IndexType get(int value) {
+		switch (value) {
+			case REGULAR: return REGULAR_LITERAL;
+			case BLOCK: return BLOCK_LITERAL;
+			case DIMENSION: return DIMENSION_LITERAL;
+			case XMLPATH: return XMLPATH_LITERAL;
+			case XMLREGION: return XMLREGION_LITERAL;
+			case XMLCOLUMN_LOGICAL: return XMLCOLUMN_LOGICAL_LITERAL;
+			case XMLCOLUMN_PHYSICAL: return XMLCOLUMN_PHYSICAL_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private DB2IndexType(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //DB2IndexType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Jar.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Jar.java
new file mode 100644
index 0000000..40e2d6c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Jar.java
@@ -0,0 +1,210 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: DB2Jar.java,v 1.6 2007/10/12 23:05:34 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Jar</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getFileName <em>File Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getPath <em>Path</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getOwner <em>Owner</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getCreatedTS <em>Created TS</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getAlteredTS <em>Altered TS</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getProcedures <em>Procedures</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getSchema <em>Schema</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Jar()
+ * @model
+ * @generated
+ */
+public interface DB2Jar extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>File Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * File name for the jar.
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>File Name</em>' attribute.
+	 * @see #setFileName(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Jar_FileName()
+	 * @model
+	 * @generated
+	 */
+   String getFileName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getFileName <em>File Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>File Name</em>' attribute.
+	 * @see #getFileName()
+	 * @generated
+	 */
+   void setFileName(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Path</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+    * <p>
+    * If the meaning of the '<em>Path</em>' attribute isn't clear,
+    * there really should be more of a description here...
+    * </p>
+    * <!-- end-user-doc -->
+	 * @return the value of the '<em>Path</em>' attribute.
+	 * @see #setPath(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Jar_Path()
+	 * @model
+	 * @generated
+	 */
+   String getPath();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getPath <em>Path</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Path</em>' attribute.
+	 * @see #getPath()
+	 * @generated
+	 */
+   void setPath(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Owner</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+    * <p>
+    * If the meaning of the '<em>Owner</em>' attribute isn't clear,
+    * there really should be more of a description here...
+    * </p>
+    * <!-- end-user-doc -->
+	 * @return the value of the '<em>Owner</em>' attribute.
+	 * @see #setOwner(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Jar_Owner()
+	 * @model
+	 * @generated
+	 */
+   String getOwner();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getOwner <em>Owner</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Owner</em>' attribute.
+	 * @see #getOwner()
+	 * @generated
+	 */
+   void setOwner(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Created TS</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+    * <p>
+    * If the meaning of the '<em>Created TS</em>' attribute isn't clear,
+    * there really should be more of a description here...
+    * </p>
+    * <!-- end-user-doc -->
+	 * @return the value of the '<em>Created TS</em>' attribute.
+	 * @see #setCreatedTS(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Jar_CreatedTS()
+	 * @model
+	 * @generated
+	 */
+   String getCreatedTS();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getCreatedTS <em>Created TS</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Created TS</em>' attribute.
+	 * @see #getCreatedTS()
+	 * @generated
+	 */
+   void setCreatedTS(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Altered TS</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+    * <p>
+    * If the meaning of the '<em>Altered TS</em>' attribute isn't clear,
+    * there really should be more of a description here...
+    * </p>
+    * <!-- end-user-doc -->
+	 * @return the value of the '<em>Altered TS</em>' attribute.
+	 * @see #setAlteredTS(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Jar_AlteredTS()
+	 * @model
+	 * @generated
+	 */
+   String getAlteredTS();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getAlteredTS <em>Altered TS</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Altered TS</em>' attribute.
+	 * @see #getAlteredTS()
+	 * @generated
+	 */
+   void setAlteredTS(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Procedures</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions#getJar <em>Jar</em>}'.
+	 * <!-- begin-user-doc -->
+    * <p>
+    * If the meaning of the '<em>Procedures</em>' reference list isn't clear,
+    * there really should be more of a description here...
+    * </p>
+    * <!-- end-user-doc -->
+	 * @return the value of the '<em>Procedures</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Jar_Procedures()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions#getJar
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions" opposite="jar"
+	 * @generated
+	 */
+   EList getProcedures();
+
+	/**
+	 * Returns the value of the '<em><b>Schema</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getJars <em>Jars</em>}'.
+	 * <!-- begin-user-doc -->
+    * <p>
+    * If the meaning of the '<em>Schema</em>' reference isn't clear,
+    * there really should be more of a description here...
+    * </p>
+    * <!-- end-user-doc -->
+	 * @return the value of the '<em>Schema</em>' reference.
+	 * @see #setSchema(DB2Schema)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Jar_Schema()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getJars
+	 * @model opposite="jars" required="true"
+	 * @generated
+	 */
+   DB2Schema getSchema();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getSchema <em>Schema</em>}' reference.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Schema</em>' reference.
+	 * @see #getSchema()
+	 * @generated
+	 */
+   void setSchema(DB2Schema value);
+
+} // DB2Jar
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2JavaOptions.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2JavaOptions.java
new file mode 100644
index 0000000..ea3ccf1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2JavaOptions.java
@@ -0,0 +1,165 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: DB2JavaOptions.java,v 1.6 2007/10/12 23:05:34 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Java Options</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions#getClassName <em>Class Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions#getMethodName <em>Method Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions#isSqlj <em>Sqlj</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions#getProcedure <em>Procedure</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions#getJar <em>Jar</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2JavaOptions()
+ * @model
+ * @generated
+ */
+public interface DB2JavaOptions extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Class Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * The Java class name of the routine registered with the database, initially the same as the method name.
+	 * 
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Class Name</em>' attribute.
+	 * @see #setClassName(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2JavaOptions_ClassName()
+	 * @model
+	 * @generated
+	 */
+   String getClassName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions#getClassName <em>Class Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Class Name</em>' attribute.
+	 * @see #getClassName()
+	 * @generated
+	 */
+   void setClassName(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Method Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * The Java method name (entry point), initially derived from the procedure name.
+	 * 
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Method Name</em>' attribute.
+	 * @see #setMethodName(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2JavaOptions_MethodName()
+	 * @model
+	 * @generated
+	 */
+   String getMethodName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions#getMethodName <em>Method Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Method Name</em>' attribute.
+	 * @see #getMethodName()
+	 * @generated
+	 */
+   void setMethodName(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Sqlj</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * If <code>true</code>, then the stored procedure is SQLJ, a static Java stored procedure.  If <code>false</code>, then the java stored procedure is dynamic
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Sqlj</em>' attribute.
+	 * @see #setSqlj(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2JavaOptions_Sqlj()
+	 * @model
+	 * @generated
+	 */
+   boolean isSqlj();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions#isSqlj <em>Sqlj</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Sqlj</em>' attribute.
+	 * @see #isSqlj()
+	 * @generated
+	 */
+   void setSqlj(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Procedure</b></em>' container reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#getJavaOptions <em>Java Options</em>}'.
+	 * <!-- begin-user-doc -->
+    * <p>
+    * If the meaning of the '<em>Procedure</em>' container reference isn't clear,
+    * there really should be more of a description here...
+    * </p>
+    * <!-- end-user-doc -->
+	 * @return the value of the '<em>Procedure</em>' container reference.
+	 * @see #setProcedure(DB2Procedure)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2JavaOptions_Procedure()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#getJavaOptions
+	 * @model opposite="javaOptions" required="true"
+	 * @generated
+	 */
+   DB2Procedure getProcedure();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions#getProcedure <em>Procedure</em>}' container reference.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Procedure</em>' container reference.
+	 * @see #getProcedure()
+	 * @generated
+	 */
+   void setProcedure(DB2Procedure value);
+
+	/**
+	 * Returns the value of the '<em><b>Jar</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getProcedures <em>Procedures</em>}'.
+	 * <!-- begin-user-doc -->
+    * <p>
+    * If the meaning of the '<em>Jar</em>' reference isn't clear,
+    * there really should be more of a description here...
+    * </p>
+    * <!-- end-user-doc -->
+	 * @return the value of the '<em>Jar</em>' reference.
+	 * @see #setJar(DB2Jar)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2JavaOptions_Jar()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getProcedures
+	 * @model opposite="procedures"
+	 * @generated
+	 */
+   DB2Jar getJar();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions#getJar <em>Jar</em>}' reference.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Jar</em>' reference.
+	 * @see #getJar()
+	 * @generated
+	 */
+   void setJar(DB2Jar value);
+
+} // DB2JavaOptions
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Mask.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Mask.java
new file mode 100644
index 0000000..df3e1ab
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Mask.java
@@ -0,0 +1,225 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.datatools.modelbase.sql.expressions.QueryExpression;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Mask</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getCorrelationName <em>Correlation Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getCaseExpression <em>Case Expression</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#isEnable <em>Enable</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getSchema <em>Schema</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getSubjectTable <em>Subject Table</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getSubjectMQT <em>Subject MQT</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getSubjectColumn <em>Subject Column</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Mask()
+ * @model
+ * @generated
+ */
+public interface DB2Mask extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Correlation Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Correlation Name</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Correlation Name</em>' attribute.
+	 * @see #setCorrelationName(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Mask_CorrelationName()
+	 * @model
+	 * @generated
+	 */
+	String getCorrelationName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getCorrelationName <em>Correlation Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Correlation Name</em>' attribute.
+	 * @see #getCorrelationName()
+	 * @generated
+	 */
+	void setCorrelationName(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Case Expression</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Case Expression</em>' containment reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Case Expression</em>' containment reference.
+	 * @see #setCaseExpression(QueryExpression)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Mask_CaseExpression()
+	 * @model containment="true"
+	 * @generated
+	 */
+	QueryExpression getCaseExpression();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getCaseExpression <em>Case Expression</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Case Expression</em>' containment reference.
+	 * @see #getCaseExpression()
+	 * @generated
+	 */
+	void setCaseExpression(QueryExpression value);
+
+	/**
+	 * Returns the value of the '<em><b>Enable</b></em>' attribute.
+	 * The default value is <code>"true"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Enable</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Enable</em>' attribute.
+	 * @see #setEnable(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Mask_Enable()
+	 * @model default="true"
+	 * @generated
+	 */
+	boolean isEnable();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#isEnable <em>Enable</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Enable</em>' attribute.
+	 * @see #isEnable()
+	 * @generated
+	 */
+	void setEnable(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Schema</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getMasks <em>Masks</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Schema</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Schema</em>' reference.
+	 * @see #setSchema(DB2Schema)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Mask_Schema()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getMasks
+	 * @model opposite="masks" required="true"
+	 * @generated
+	 */
+	DB2Schema getSchema();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getSchema <em>Schema</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Schema</em>' reference.
+	 * @see #getSchema()
+	 * @generated
+	 */
+	void setSchema(DB2Schema value);
+
+	/**
+	 * Returns the value of the '<em><b>Subject Table</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getMasks <em>Masks</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Subject Table</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Subject Table</em>' reference.
+	 * @see #setSubjectTable(DB2Table)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Mask_SubjectTable()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getMasks
+	 * @model opposite="masks" required="true"
+	 * @generated
+	 */
+	DB2Table getSubjectTable();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getSubjectTable <em>Subject Table</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Subject Table</em>' reference.
+	 * @see #getSubjectTable()
+	 * @generated
+	 */
+	void setSubjectTable(DB2Table value);
+
+	/**
+	 * Returns the value of the '<em><b>Subject MQT</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable#getMasks <em>Masks</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Subject MQT</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Subject MQT</em>' reference.
+	 * @see #setSubjectMQT(DB2MaterializedQueryTable)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Mask_SubjectMQT()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable#getMasks
+	 * @model opposite="masks" required="true"
+	 * @generated
+	 */
+	DB2MaterializedQueryTable getSubjectMQT();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getSubjectMQT <em>Subject MQT</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Subject MQT</em>' reference.
+	 * @see #getSubjectMQT()
+	 * @generated
+	 */
+	void setSubjectMQT(DB2MaterializedQueryTable value);
+
+	/**
+	 * Returns the value of the '<em><b>Subject Column</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Subject Column</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Subject Column</em>' reference.
+	 * @see #setSubjectColumn(DB2Column)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Mask_SubjectColumn()
+	 * @model required="true"
+	 * @generated
+	 */
+	DB2Column getSubjectColumn();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getSubjectColumn <em>Subject Column</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Subject Column</em>' reference.
+	 * @see #getSubjectColumn()
+	 * @generated
+	 */
+	void setSubjectColumn(DB2Column value);
+
+} // DB2Mask
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2MaterializedQueryTable.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2MaterializedQueryTable.java
new file mode 100644
index 0000000..0612bb2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2MaterializedQueryTable.java
@@ -0,0 +1,155 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.datatools.modelbase.sql.tables.DerivedTable;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Materialized Query Table</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable#getRefresh <em>Refresh</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable#isOptimizeQuery <em>Optimize Query</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable#getMaintainedBy <em>Maintained By</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable#isActivateRowAccessControl <em>Activate Row Access Control</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable#isActivateColumnAccessControl <em>Activate Column Access Control</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable#getMasks <em>Masks</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable#getPermissions <em>Permissions</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2MaterializedQueryTable()
+ * @model abstract="true"
+ * @generated
+ */
+public interface DB2MaterializedQueryTable extends DerivedTable {
+
+	/**
+	 * Returns the value of the '<em><b>Optimize Query</b></em>' attribute.
+	 * The default value is <code>"true"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Optimize Query</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Optimize Query</em>' attribute.
+	 * @see #setOptimizeQuery(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2MaterializedQueryTable_OptimizeQuery()
+	 * @model default="true"
+	 * @generated
+	 */
+	boolean isOptimizeQuery();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable#isOptimizeQuery <em>Optimize Query</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Optimize Query</em>' attribute.
+	 * @see #isOptimizeQuery()
+	 * @generated
+	 */
+	void setOptimizeQuery(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Activate Row Access Control</b></em>' attribute.
+	 * The default value is <code>"False"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Activate Row Access Control</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Activate Row Access Control</em>' attribute.
+	 * @see #setActivateRowAccessControl(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2MaterializedQueryTable_ActivateRowAccessControl()
+	 * @model default="False"
+	 * @generated
+	 */
+	boolean isActivateRowAccessControl();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable#isActivateRowAccessControl <em>Activate Row Access Control</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Activate Row Access Control</em>' attribute.
+	 * @see #isActivateRowAccessControl()
+	 * @generated
+	 */
+	void setActivateRowAccessControl(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Activate Column Access Control</b></em>' attribute.
+	 * The default value is <code>"False"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Activate Column Access Control</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Activate Column Access Control</em>' attribute.
+	 * @see #setActivateColumnAccessControl(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2MaterializedQueryTable_ActivateColumnAccessControl()
+	 * @model default="False"
+	 * @generated
+	 */
+	boolean isActivateColumnAccessControl();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable#isActivateColumnAccessControl <em>Activate Column Access Control</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Activate Column Access Control</em>' attribute.
+	 * @see #isActivateColumnAccessControl()
+	 * @generated
+	 */
+	void setActivateColumnAccessControl(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Masks</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getSubjectMQT <em>Subject MQT</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Masks</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Masks</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2MaterializedQueryTable_Masks()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getSubjectMQT
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask" opposite="subjectMQT"
+	 * @generated
+	 */
+	EList getMasks();
+
+	/**
+	 * Returns the value of the '<em><b>Permissions</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#getSubjectMQT <em>Subject MQT</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Permissions</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Permissions</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2MaterializedQueryTable_Permissions()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#getSubjectMQT
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission" opposite="subjectMQT"
+	 * @generated
+	 */
+	EList getPermissions();
+
+} // DB2MaterializedQueryTable
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Member.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Member.java
new file mode 100644
index 0000000..f86612e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Member.java
@@ -0,0 +1,134 @@
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Member</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Member#getId <em>Id</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Member#getHomeHost <em>Home Host</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Member#getCurrentHost <em>Current Host</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Member#getState <em>State</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Member#getCluster <em>Cluster</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Member()
+ * @model
+ * @generated
+ */
+public interface DB2Member extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Id</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Id</em>' attribute.
+	 * @see #setId(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Member_Id()
+	 * @model
+	 * @generated
+	 */
+	int getId();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Member#getId <em>Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Id</em>' attribute.
+	 * @see #getId()
+	 * @generated
+	 */
+	void setId(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Home Host</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Home Host</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Home Host</em>' attribute.
+	 * @see #setHomeHost(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Member_HomeHost()
+	 * @model
+	 * @generated
+	 */
+	String getHomeHost();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Member#getHomeHost <em>Home Host</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Home Host</em>' attribute.
+	 * @see #getHomeHost()
+	 * @generated
+	 */
+	void setHomeHost(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Current Host</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Current Host</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Current Host</em>' attribute.
+	 * @see #setCurrentHost(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Member_CurrentHost()
+	 * @model
+	 * @generated
+	 */
+	String getCurrentHost();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Member#getCurrentHost <em>Current Host</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Current Host</em>' attribute.
+	 * @see #getCurrentHost()
+	 * @generated
+	 */
+	void setCurrentHost(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Cluster</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Cluster#getMembers <em>Members</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Cluster</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Cluster</em>' reference.
+	 * @see #setCluster(DB2Cluster)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Member_Cluster()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Cluster#getMembers
+	 * @model opposite="members" required="true"
+	 * @generated
+	 */
+	DB2Cluster getCluster();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Member#getCluster <em>Cluster</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Cluster</em>' reference.
+	 * @see #getCluster()
+	 * @generated
+	 */
+	void setCluster(DB2Cluster value);
+
+} // DB2Member
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Method.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Method.java
new file mode 100644
index 0000000..80e73c6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Method.java
@@ -0,0 +1,99 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.datatools.modelbase.sql.routines.Method;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Method</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Inherits both DB2Model::DB2Function and SQLModel::Method and 
+ * used in SQLModel::StructuredUserDefinedType
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Method#isReturnsSelfAsResult <em>Returns Self As Result</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Method#isImplemented <em>Implemented</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Method()
+ * @model
+ * @generated
+ */
+public interface DB2Method extends Method, DB2Function {
+	/**
+	 * Returns the value of the '<em><b>Returns Self As Result</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * SELF AS RESULT
+	 * Identifies this method as a type-preserving method, which means the
+	 * following:
+	 * - The declared return type must be the same as the declared subject-type
+	 *   (SQLSTATE 428EQ).
+	 * - When an SQL statement is compiled and resolves to a type preserving
+	 *   method, the static type of the result of the method is the same as the
+	 *   static type of the subject argument.
+	 * - The method must be implemented in such a way that the dynamic type
+	 *   of the result is the same as the dynamic type of the subject argument
+	 *   (SQLSTATE 2200G), and the result cannot be NULL (SQLSTATE 22004).
+	 * 
+	 * If the method being defined overrides another method, this clause cannot
+	 * be specified (SQLSTATE 428FV).
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Returns Self As Result</em>' attribute.
+	 * @see #setReturnsSelfAsResult(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Method_ReturnsSelfAsResult()
+	 * @model
+	 * @generated
+	 */
+	boolean isReturnsSelfAsResult();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Method#isReturnsSelfAsResult <em>Returns Self As Result</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Returns Self As Result</em>' attribute.
+	 * @see #isReturnsSelfAsResult()
+	 * @generated
+	 */
+	void setReturnsSelfAsResult(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Implemented</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Implemented</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Implemented</em>' attribute.
+	 * @see #setImplemented(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Method_Implemented()
+	 * @model
+	 * @generated
+	 */
+	boolean isImplemented();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Method#isImplemented <em>Implemented</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Implemented</em>' attribute.
+	 * @see #isImplemented()
+	 * @generated
+	 */
+	void setImplemented(boolean value);
+
+} // DB2Method
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2ModelFactory.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2ModelFactory.java
new file mode 100644
index 0000000..77a0623
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2ModelFactory.java
@@ -0,0 +1,347 @@
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage
+ * @generated
+ */
+public interface DB2ModelFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	DB2ModelFactory eINSTANCE = org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>DB2 Database</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 Database</em>'.
+	 * @generated
+	 */
+	DB2Database createDB2Database();
+
+	/**
+	 * Returns a new object of class '<em>DB2 Package</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 Package</em>'.
+	 * @generated
+	 */
+	DB2Package createDB2Package();
+
+	/**
+	 * Returns a new object of class '<em>DB2 Table</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 Table</em>'.
+	 * @generated
+	 */
+	DB2Table createDB2Table();
+
+	/**
+	 * Returns a new object of class '<em>DB2 Trigger</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 Trigger</em>'.
+	 * @generated
+	 */
+	DB2Trigger createDB2Trigger();
+
+	/**
+	 * Returns a new object of class '<em>DB2 Procedure</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 Procedure</em>'.
+	 * @generated
+	 */
+	DB2Procedure createDB2Procedure();
+
+	/**
+	 * Returns a new object of class '<em>DB2 Schema</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 Schema</em>'.
+	 * @generated
+	 */
+	DB2Schema createDB2Schema();
+
+	/**
+	 * Returns a new object of class '<em>DB2 Database Manager</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 Database Manager</em>'.
+	 * @generated
+	 */
+	DB2DatabaseManager createDB2DatabaseManager();
+
+	/**
+	 * Returns a new object of class '<em>DB2 View</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 View</em>'.
+	 * @generated
+	 */
+	DB2View createDB2View();
+
+	/**
+	 * Returns a new object of class '<em>DB2 Application Process</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 Application Process</em>'.
+	 * @generated
+	 */
+	DB2ApplicationProcess createDB2ApplicationProcess();
+
+	/**
+	 * Returns a new object of class '<em>DB2 Transaction</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 Transaction</em>'.
+	 * @generated
+	 */
+	DB2Transaction createDB2Transaction();
+
+	/**
+	 * Returns a new object of class '<em>DB2 System Schema</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 System Schema</em>'.
+	 * @generated
+	 */
+	DB2SystemSchema createDB2SystemSchema();
+
+	/**
+	 * Returns a new object of class '<em>DB2 Source</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 Source</em>'.
+	 * @generated
+	 */
+	DB2Source createDB2Source();
+
+	/**
+	 * Returns a new object of class '<em>DB2 User Defined Function</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 User Defined Function</em>'.
+	 * @generated
+	 */
+	DB2UserDefinedFunction createDB2UserDefinedFunction();
+
+	/**
+	 * Returns a new object of class '<em>DB2 Method</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 Method</em>'.
+	 * @generated
+	 */
+	DB2Method createDB2Method();
+
+	/**
+	 * Returns a new object of class '<em>DB2 Extended Options</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 Extended Options</em>'.
+	 * @generated
+	 */
+	DB2ExtendedOptions createDB2ExtendedOptions();
+
+	/**
+	 * Returns a new object of class '<em>DB2 Alias</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 Alias</em>'.
+	 * @generated
+	 */
+	DB2Alias createDB2Alias();
+
+	/**
+	 * Returns a new object of class '<em>DB2 Index</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 Index</em>'.
+	 * @generated
+	 */
+	DB2Index createDB2Index();
+
+	/**
+	 * Returns a new object of class '<em>DB2 Multidimensional Index</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 Multidimensional Index</em>'.
+	 * @generated
+	 */
+	DB2MultidimensionalIndex createDB2MultidimensionalIndex();
+
+	/**
+	 * Returns a new object of class '<em>DB2 Java Options</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 Java Options</em>'.
+	 * @generated
+	 */
+	DB2JavaOptions createDB2JavaOptions();
+
+	/**
+	 * Returns a new object of class '<em>DB2 Procedure Deploy</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 Procedure Deploy</em>'.
+	 * @generated
+	 */
+	DB2ProcedureDeploy createDB2ProcedureDeploy();
+
+	/**
+	 * Returns a new object of class '<em>DB2OLAP Object</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2OLAP Object</em>'.
+	 * @generated
+	 */
+	DB2OLAPObject createDB2OLAPObject();
+
+	/**
+	 * Returns a new object of class '<em>DB2 Identity Specifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 Identity Specifier</em>'.
+	 * @generated
+	 */
+	DB2IdentitySpecifier createDB2IdentitySpecifier();
+
+	/**
+	 * Returns a new object of class '<em>DB2 Jar</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 Jar</em>'.
+	 * @generated
+	 */
+	DB2Jar createDB2Jar();
+
+	/**
+	 * Returns a new object of class '<em>DB2 Column</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 Column</em>'.
+	 * @generated
+	 */
+	DB2Column createDB2Column();
+
+	/**
+	 * Returns a new object of class '<em>DB2XSR Object</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2XSR Object</em>'.
+	 * @generated
+	 */
+	DB2XSRObject createDB2XSRObject();
+
+	/**
+	 * Returns a new object of class '<em>DB2XML Schema</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2XML Schema</em>'.
+	 * @generated
+	 */
+	DB2XMLSchema createDB2XMLSchema();
+
+	/**
+	 * Returns a new object of class '<em>DB2XML Schema Document</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2XML Schema Document</em>'.
+	 * @generated
+	 */
+	DB2XMLSchemaDocument createDB2XMLSchemaDocument();
+
+	/**
+	 * Returns a new object of class '<em>DB2XML Schema Doc Properties</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2XML Schema Doc Properties</em>'.
+	 * @generated
+	 */
+	DB2XMLSchemaDocProperties createDB2XMLSchemaDocProperties();
+
+	/**
+	 * Returns a new object of class '<em>DB2 Package Statement</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 Package Statement</em>'.
+	 * @generated
+	 */
+	DB2PackageStatement createDB2PackageStatement();
+
+	/**
+	 * Returns a new object of class '<em>DB2 Period</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 Period</em>'.
+	 * @generated
+	 */
+	DB2Period createDB2Period();
+
+	/**
+	 * Returns a new object of class '<em>DB2 Cluster</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 Cluster</em>'.
+	 * @generated
+	 */
+	DB2Cluster createDB2Cluster();
+
+	/**
+	 * Returns a new object of class '<em>DB2 Member</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 Member</em>'.
+	 * @generated
+	 */
+	DB2Member createDB2Member();
+
+	/**
+	 * Returns a new object of class '<em>DB2 Unique Constraint Extension</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 Unique Constraint Extension</em>'.
+	 * @generated
+	 */
+	DB2UniqueConstraintExtension createDB2UniqueConstraintExtension();
+
+	/**
+	 * Returns a new object of class '<em>DB2 Mask</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 Mask</em>'.
+	 * @generated
+	 */
+	DB2Mask createDB2Mask();
+
+	/**
+	 * Returns a new object of class '<em>DB2 Permission</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>DB2 Permission</em>'.
+	 * @generated
+	 */
+	DB2Permission createDB2Permission();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	DB2ModelPackage getDB2ModelPackage();
+
+} //DB2ModelFactory
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2ModelPackage.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2ModelPackage.java
new file mode 100644
index 0000000..3f210ac
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2ModelPackage.java
@@ -0,0 +1,12601 @@
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+
+import org.eclipse.datatools.modelbase.sql.constraints.SQLConstraintsPackage;
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataTypesPackage;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesPackage;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * DB2 Model is the OO representation of the concepts defined in the:
+ * SQL Reference for Cross-Platform Development - v1.1
+ * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+ * 
+ * This book defines the DB2 UDB SQL language elements that are common to the IBM DB2 Universal Database Family of relational database products across the
+ * following environments: Environment IBM Relational Database Product Short Name
+ *  - z/OS and OS/390 DB2 Universal Database for z/OS and OS/390 Version 7 DB2 UDB for z/OS and OS/390
+ *  - OS/400 DB2 Universal Database for iSeries Version 5 Release 2 DB2 UDB for iSeries UNIX
+ *  - AIX
+ *  - HP-UX Version 10
+ *  - HP-UX Version 11
+ *  - Linux
+ *  - Solaris
+ *  - Windows for 32-bit operating systems
+ *  - OS/2
+ *  - DB2 Universal Database for the Linux, UNIX and Windows Platforms Version 8
+ *  - DB2 UDB for LUW
+ * 
+ * <!-- end-model-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface DB2ModelPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "db2"; //$NON-NLS-1$
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///org.eclipse.datatools.enablement.ibm.db2.model/db2.ecore"; //$NON-NLS-1$
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "DB2Model"; //$NON-NLS-1$
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	DB2ModelPackage eINSTANCE = org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2DatabaseImpl <em>DB2 Database</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2DatabaseImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Database()
+	 * @generated
+	 */
+	int DB2_DATABASE = 0;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE__EANNOTATIONS = SQLSchemaPackage.DATABASE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE__NAME = SQLSchemaPackage.DATABASE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE__DEPENDENCIES = SQLSchemaPackage.DATABASE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE__DESCRIPTION = SQLSchemaPackage.DATABASE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE__LABEL = SQLSchemaPackage.DATABASE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE__COMMENTS = SQLSchemaPackage.DATABASE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE__EXTENSIONS = SQLSchemaPackage.DATABASE__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE__PRIVILEGES = SQLSchemaPackage.DATABASE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Vendor</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE__VENDOR = SQLSchemaPackage.DATABASE__VENDOR;
+
+	/**
+	 * The feature id for the '<em><b>Version</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE__VERSION = SQLSchemaPackage.DATABASE__VERSION;
+
+	/**
+	 * The feature id for the '<em><b>Schemas</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE__SCHEMAS = SQLSchemaPackage.DATABASE__SCHEMAS;
+
+	/**
+	 * The feature id for the '<em><b>Events</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE__EVENTS = SQLSchemaPackage.DATABASE__EVENTS;
+
+	/**
+	 * The feature id for the '<em><b>Catalogs</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE__CATALOGS = SQLSchemaPackage.DATABASE__CATALOGS;
+
+	/**
+	 * The feature id for the '<em><b>Authorization Ids</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE__AUTHORIZATION_IDS = SQLSchemaPackage.DATABASE__AUTHORIZATION_IDS;
+
+	/**
+	 * The feature id for the '<em><b>Partitioned</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE__PARTITIONED = SQLSchemaPackage.DATABASE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Default Organize By Row</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE__DEFAULT_ORGANIZE_BY_ROW = SQLSchemaPackage.DATABASE_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Database</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE_FEATURE_COUNT = SQLSchemaPackage.DATABASE_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2AccessPlan <em>DB2 Access Plan</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2AccessPlan
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2AccessPlan()
+	 * @generated
+	 */
+	int DB2_ACCESS_PLAN = 13;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ACCESS_PLAN__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ACCESS_PLAN__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ACCESS_PLAN__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ACCESS_PLAN__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ACCESS_PLAN__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ACCESS_PLAN__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ACCESS_PLAN__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ACCESS_PLAN__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Access Plan</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ACCESS_PLAN_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PackageImpl <em>DB2 Package</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PackageImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Package()
+	 * @generated
+	 */
+	int DB2_PACKAGE = 1;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE__EANNOTATIONS = DB2_ACCESS_PLAN__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE__NAME = DB2_ACCESS_PLAN__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE__DEPENDENCIES = DB2_ACCESS_PLAN__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE__DESCRIPTION = DB2_ACCESS_PLAN__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE__LABEL = DB2_ACCESS_PLAN__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE__COMMENTS = DB2_ACCESS_PLAN__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE__EXTENSIONS = DB2_ACCESS_PLAN__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE__PRIVILEGES = DB2_ACCESS_PLAN__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Operative</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE__OPERATIVE = DB2_ACCESS_PLAN_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Valid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE__VALID = DB2_ACCESS_PLAN_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Version</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE__VERSION = DB2_ACCESS_PLAN_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Default Schema</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE__DEFAULT_SCHEMA = DB2_ACCESS_PLAN_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Sql Path</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE__SQL_PATH = DB2_ACCESS_PLAN_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Reopt Var</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE__REOPT_VAR = DB2_ACCESS_PLAN_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Isolation</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE__ISOLATION = DB2_ACCESS_PLAN_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Unique ID</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE__UNIQUE_ID = DB2_ACCESS_PLAN_FEATURE_COUNT + 7;
+
+	/**
+	 * The feature id for the '<em><b>Last Bind TS</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE__LAST_BIND_TS = DB2_ACCESS_PLAN_FEATURE_COUNT + 8;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE__SCHEMA = DB2_ACCESS_PLAN_FEATURE_COUNT + 9;
+
+	/**
+	 * The feature id for the '<em><b>Statements</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE__STATEMENTS = DB2_ACCESS_PLAN_FEATURE_COUNT + 10;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Package</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE_FEATURE_COUNT = DB2_ACCESS_PLAN_FEATURE_COUNT + 11;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2TableImpl <em>DB2 Table</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2TableImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Table()
+	 * @generated
+	 */
+	int DB2_TABLE = 2;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__EANNOTATIONS = SQLTablesPackage.PERSISTENT_TABLE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__NAME = SQLTablesPackage.PERSISTENT_TABLE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__DEPENDENCIES = SQLTablesPackage.PERSISTENT_TABLE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__DESCRIPTION = SQLTablesPackage.PERSISTENT_TABLE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__LABEL = SQLTablesPackage.PERSISTENT_TABLE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__COMMENTS = SQLTablesPackage.PERSISTENT_TABLE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__EXTENSIONS = SQLTablesPackage.PERSISTENT_TABLE__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__PRIVILEGES = SQLTablesPackage.PERSISTENT_TABLE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Columns</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__COLUMNS = SQLTablesPackage.PERSISTENT_TABLE__COLUMNS;
+
+	/**
+	 * The feature id for the '<em><b>Supertable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__SUPERTABLE = SQLTablesPackage.PERSISTENT_TABLE__SUPERTABLE;
+
+	/**
+	 * The feature id for the '<em><b>Subtables</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__SUBTABLES = SQLTablesPackage.PERSISTENT_TABLE__SUBTABLES;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__SCHEMA = SQLTablesPackage.PERSISTENT_TABLE__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Udt</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__UDT = SQLTablesPackage.PERSISTENT_TABLE__UDT;
+
+	/**
+	 * The feature id for the '<em><b>Triggers</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__TRIGGERS = SQLTablesPackage.PERSISTENT_TABLE__TRIGGERS;
+
+	/**
+	 * The feature id for the '<em><b>Index</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__INDEX = SQLTablesPackage.PERSISTENT_TABLE__INDEX;
+
+	/**
+	 * The feature id for the '<em><b>Self Ref Column Generation</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__SELF_REF_COLUMN_GENERATION = SQLTablesPackage.PERSISTENT_TABLE__SELF_REF_COLUMN_GENERATION;
+
+	/**
+	 * The feature id for the '<em><b>Insertable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__INSERTABLE = SQLTablesPackage.PERSISTENT_TABLE__INSERTABLE;
+
+	/**
+	 * The feature id for the '<em><b>Updatable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__UPDATABLE = SQLTablesPackage.PERSISTENT_TABLE__UPDATABLE;
+
+	/**
+	 * The feature id for the '<em><b>Constraints</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__CONSTRAINTS = SQLTablesPackage.PERSISTENT_TABLE__CONSTRAINTS;
+
+	/**
+	 * The feature id for the '<em><b>Referencing Foreign Keys</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__REFERENCING_FOREIGN_KEYS = SQLTablesPackage.PERSISTENT_TABLE__REFERENCING_FOREIGN_KEYS;
+
+	/**
+	 * The feature id for the '<em><b>Data Capture</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__DATA_CAPTURE = SQLTablesPackage.PERSISTENT_TABLE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Activate Row Access Control</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__ACTIVATE_ROW_ACCESS_CONTROL = SQLTablesPackage.PERSISTENT_TABLE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Activate Column Access Control</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__ACTIVATE_COLUMN_ACCESS_CONTROL = SQLTablesPackage.PERSISTENT_TABLE_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Organize By</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__ORGANIZE_BY = SQLTablesPackage.PERSISTENT_TABLE_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Packages</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__PACKAGES = SQLTablesPackage.PERSISTENT_TABLE_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Periods</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__PERIODS = SQLTablesPackage.PERSISTENT_TABLE_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>History Table</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__HISTORY_TABLE = SQLTablesPackage.PERSISTENT_TABLE_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Temporal Table</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__TEMPORAL_TABLE = SQLTablesPackage.PERSISTENT_TABLE_FEATURE_COUNT + 7;
+
+	/**
+	 * The feature id for the '<em><b>Masks</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__MASKS = SQLTablesPackage.PERSISTENT_TABLE_FEATURE_COUNT + 8;
+
+	/**
+	 * The feature id for the '<em><b>Permissions</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE__PERMISSIONS = SQLTablesPackage.PERSISTENT_TABLE_FEATURE_COUNT + 9;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Table</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TABLE_FEATURE_COUNT = SQLTablesPackage.PERSISTENT_TABLE_FEATURE_COUNT + 10;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2TriggerImpl <em>DB2 Trigger</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2TriggerImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Trigger()
+	 * @generated
+	 */
+	int DB2_TRIGGER = 3;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRIGGER__EANNOTATIONS = SQLTablesPackage.TRIGGER__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRIGGER__NAME = SQLTablesPackage.TRIGGER__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRIGGER__DEPENDENCIES = SQLTablesPackage.TRIGGER__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRIGGER__DESCRIPTION = SQLTablesPackage.TRIGGER__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRIGGER__LABEL = SQLTablesPackage.TRIGGER__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRIGGER__COMMENTS = SQLTablesPackage.TRIGGER__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRIGGER__EXTENSIONS = SQLTablesPackage.TRIGGER__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRIGGER__PRIVILEGES = SQLTablesPackage.TRIGGER__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRIGGER__SCHEMA = SQLTablesPackage.TRIGGER__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Subject Table</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRIGGER__SUBJECT_TABLE = SQLTablesPackage.TRIGGER__SUBJECT_TABLE;
+
+	/**
+	 * The feature id for the '<em><b>Action Statement</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRIGGER__ACTION_STATEMENT = SQLTablesPackage.TRIGGER__ACTION_STATEMENT;
+
+	/**
+	 * The feature id for the '<em><b>Trigger Column</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRIGGER__TRIGGER_COLUMN = SQLTablesPackage.TRIGGER__TRIGGER_COLUMN;
+
+	/**
+	 * The feature id for the '<em><b>Action Granularity</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRIGGER__ACTION_GRANULARITY = SQLTablesPackage.TRIGGER__ACTION_GRANULARITY;
+
+	/**
+	 * The feature id for the '<em><b>When</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRIGGER__WHEN = SQLTablesPackage.TRIGGER__WHEN;
+
+	/**
+	 * The feature id for the '<em><b>Time Stamp</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRIGGER__TIME_STAMP = SQLTablesPackage.TRIGGER__TIME_STAMP;
+
+	/**
+	 * The feature id for the '<em><b>Action Time</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRIGGER__ACTION_TIME = SQLTablesPackage.TRIGGER__ACTION_TIME;
+
+	/**
+	 * The feature id for the '<em><b>Update Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRIGGER__UPDATE_TYPE = SQLTablesPackage.TRIGGER__UPDATE_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Insert Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRIGGER__INSERT_TYPE = SQLTablesPackage.TRIGGER__INSERT_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Delete Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRIGGER__DELETE_TYPE = SQLTablesPackage.TRIGGER__DELETE_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Old Row</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRIGGER__OLD_ROW = SQLTablesPackage.TRIGGER__OLD_ROW;
+
+	/**
+	 * The feature id for the '<em><b>New Row</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRIGGER__NEW_ROW = SQLTablesPackage.TRIGGER__NEW_ROW;
+
+	/**
+	 * The feature id for the '<em><b>Old Table</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRIGGER__OLD_TABLE = SQLTablesPackage.TRIGGER__OLD_TABLE;
+
+	/**
+	 * The feature id for the '<em><b>New Table</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRIGGER__NEW_TABLE = SQLTablesPackage.TRIGGER__NEW_TABLE;
+
+	/**
+	 * The feature id for the '<em><b>Operative</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRIGGER__OPERATIVE = SQLTablesPackage.TRIGGER_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Secured</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRIGGER__SECURED = SQLTablesPackage.TRIGGER_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Trigger</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRIGGER_FEATURE_COUNT = SQLTablesPackage.TRIGGER_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureImpl <em>DB2 Procedure</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Procedure()
+	 * @generated
+	 */
+	int DB2_PROCEDURE = 4;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__EANNOTATIONS = SQLRoutinesPackage.PROCEDURE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__NAME = SQLRoutinesPackage.PROCEDURE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__DEPENDENCIES = SQLRoutinesPackage.PROCEDURE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__DESCRIPTION = SQLRoutinesPackage.PROCEDURE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__LABEL = SQLRoutinesPackage.PROCEDURE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__COMMENTS = SQLRoutinesPackage.PROCEDURE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__EXTENSIONS = SQLRoutinesPackage.PROCEDURE__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__PRIVILEGES = SQLRoutinesPackage.PROCEDURE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Specific Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__SPECIFIC_NAME = SQLRoutinesPackage.PROCEDURE__SPECIFIC_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Language</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__LANGUAGE = SQLRoutinesPackage.PROCEDURE__LANGUAGE;
+
+	/**
+	 * The feature id for the '<em><b>Parameter Style</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__PARAMETER_STYLE = SQLRoutinesPackage.PROCEDURE__PARAMETER_STYLE;
+
+	/**
+	 * The feature id for the '<em><b>Deterministic</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__DETERMINISTIC = SQLRoutinesPackage.PROCEDURE__DETERMINISTIC;
+
+	/**
+	 * The feature id for the '<em><b>Sql Data Access</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__SQL_DATA_ACCESS = SQLRoutinesPackage.PROCEDURE__SQL_DATA_ACCESS;
+
+	/**
+	 * The feature id for the '<em><b>Creation TS</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__CREATION_TS = SQLRoutinesPackage.PROCEDURE__CREATION_TS;
+
+	/**
+	 * The feature id for the '<em><b>Last Altered TS</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__LAST_ALTERED_TS = SQLRoutinesPackage.PROCEDURE__LAST_ALTERED_TS;
+
+	/**
+	 * The feature id for the '<em><b>Authorization ID</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__AUTHORIZATION_ID = SQLRoutinesPackage.PROCEDURE__AUTHORIZATION_ID;
+
+	/**
+	 * The feature id for the '<em><b>Security</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__SECURITY = SQLRoutinesPackage.PROCEDURE__SECURITY;
+
+	/**
+	 * The feature id for the '<em><b>External Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__EXTERNAL_NAME = SQLRoutinesPackage.PROCEDURE__EXTERNAL_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__PARAMETERS = SQLRoutinesPackage.PROCEDURE__PARAMETERS;
+
+	/**
+	 * The feature id for the '<em><b>Source</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__SOURCE = SQLRoutinesPackage.PROCEDURE__SOURCE;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__SCHEMA = SQLRoutinesPackage.PROCEDURE__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Max Result Sets</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__MAX_RESULT_SETS = SQLRoutinesPackage.PROCEDURE__MAX_RESULT_SETS;
+
+	/**
+	 * The feature id for the '<em><b>Old Save Point</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__OLD_SAVE_POINT = SQLRoutinesPackage.PROCEDURE__OLD_SAVE_POINT;
+
+	/**
+	 * The feature id for the '<em><b>Result Set</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__RESULT_SET = SQLRoutinesPackage.PROCEDURE__RESULT_SET;
+
+	/**
+	 * The feature id for the '<em><b>Fenced</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__FENCED = SQLRoutinesPackage.PROCEDURE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Threadsafe</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__THREADSAFE = SQLRoutinesPackage.PROCEDURE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Db Info</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__DB_INFO = SQLRoutinesPackage.PROCEDURE_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Implicit Schema</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__IMPLICIT_SCHEMA = SQLRoutinesPackage.PROCEDURE_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Federated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__FEDERATED = SQLRoutinesPackage.PROCEDURE_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Parm Ccsid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__PARM_CCSID = SQLRoutinesPackage.PROCEDURE_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Special Register</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__SPECIAL_REGISTER = SQLRoutinesPackage.PROCEDURE_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Change State</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__CHANGE_STATE = SQLRoutinesPackage.PROCEDURE_FEATURE_COUNT + 7;
+
+	/**
+	 * The feature id for the '<em><b>Debug Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__DEBUG_ID = SQLRoutinesPackage.PROCEDURE_FEATURE_COUNT + 8;
+
+	/**
+	 * The feature id for the '<em><b>Program Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__PROGRAM_TYPE = SQLRoutinesPackage.PROCEDURE_FEATURE_COUNT + 9;
+
+	/**
+	 * The feature id for the '<em><b>Orig Schema Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__ORIG_SCHEMA_NAME = SQLRoutinesPackage.PROCEDURE_FEATURE_COUNT + 10;
+
+	/**
+	 * The feature id for the '<em><b>Orig Parm Sig</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__ORIG_PARM_SIG = SQLRoutinesPackage.PROCEDURE_FEATURE_COUNT + 11;
+
+	/**
+	 * The feature id for the '<em><b>Extended Options</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__EXTENDED_OPTIONS = SQLRoutinesPackage.PROCEDURE_FEATURE_COUNT + 12;
+
+	/**
+	 * The feature id for the '<em><b>Routine Extensions</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__ROUTINE_EXTENSIONS = SQLRoutinesPackage.PROCEDURE_FEATURE_COUNT + 13;
+
+	/**
+	 * The feature id for the '<em><b>Model Result Sets</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__MODEL_RESULT_SETS = SQLRoutinesPackage.PROCEDURE_FEATURE_COUNT + 14;
+
+	/**
+	 * The feature id for the '<em><b>Null Input</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__NULL_INPUT = SQLRoutinesPackage.PROCEDURE_FEATURE_COUNT + 15;
+
+	/**
+	 * The feature id for the '<em><b>Version</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__VERSION = SQLRoutinesPackage.PROCEDURE_FEATURE_COUNT + 16;
+
+	/**
+	 * The feature id for the '<em><b>Dialect</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__DIALECT = SQLRoutinesPackage.PROCEDURE_FEATURE_COUNT + 17;
+
+	/**
+	 * The feature id for the '<em><b>External Action</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__EXTERNAL_ACTION = SQLRoutinesPackage.PROCEDURE_FEATURE_COUNT + 18;
+
+	/**
+	 * The feature id for the '<em><b>Return</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__RETURN = SQLRoutinesPackage.PROCEDURE_FEATURE_COUNT + 19;
+
+	/**
+	 * The feature id for the '<em><b>Java Options</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__JAVA_OPTIONS = SQLRoutinesPackage.PROCEDURE_FEATURE_COUNT + 20;
+
+	/**
+	 * The feature id for the '<em><b>Deploy</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE__DEPLOY = SQLRoutinesPackage.PROCEDURE_FEATURE_COUNT + 21;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Procedure</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE_FEATURE_COUNT = SQLRoutinesPackage.PROCEDURE_FEATURE_COUNT + 22;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2SchemaImpl <em>DB2 Schema</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2SchemaImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Schema()
+	 * @generated
+	 */
+	int DB2_SCHEMA = 5;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SCHEMA__EANNOTATIONS = SQLSchemaPackage.SCHEMA__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SCHEMA__NAME = SQLSchemaPackage.SCHEMA__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SCHEMA__DEPENDENCIES = SQLSchemaPackage.SCHEMA__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SCHEMA__DESCRIPTION = SQLSchemaPackage.SCHEMA__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SCHEMA__LABEL = SQLSchemaPackage.SCHEMA__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SCHEMA__COMMENTS = SQLSchemaPackage.SCHEMA__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SCHEMA__EXTENSIONS = SQLSchemaPackage.SCHEMA__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SCHEMA__PRIVILEGES = SQLSchemaPackage.SCHEMA__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Triggers</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SCHEMA__TRIGGERS = SQLSchemaPackage.SCHEMA__TRIGGERS;
+
+	/**
+	 * The feature id for the '<em><b>Indices</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SCHEMA__INDICES = SQLSchemaPackage.SCHEMA__INDICES;
+
+	/**
+	 * The feature id for the '<em><b>Tables</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SCHEMA__TABLES = SQLSchemaPackage.SCHEMA__TABLES;
+
+	/**
+	 * The feature id for the '<em><b>Sequences</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SCHEMA__SEQUENCES = SQLSchemaPackage.SCHEMA__SEQUENCES;
+
+	/**
+	 * The feature id for the '<em><b>Database</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SCHEMA__DATABASE = SQLSchemaPackage.SCHEMA__DATABASE;
+
+	/**
+	 * The feature id for the '<em><b>Catalog</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SCHEMA__CATALOG = SQLSchemaPackage.SCHEMA__CATALOG;
+
+	/**
+	 * The feature id for the '<em><b>Assertions</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SCHEMA__ASSERTIONS = SQLSchemaPackage.SCHEMA__ASSERTIONS;
+
+	/**
+	 * The feature id for the '<em><b>User Defined Types</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SCHEMA__USER_DEFINED_TYPES = SQLSchemaPackage.SCHEMA__USER_DEFINED_TYPES;
+
+	/**
+	 * The feature id for the '<em><b>Char Sets</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SCHEMA__CHAR_SETS = SQLSchemaPackage.SCHEMA__CHAR_SETS;
+
+	/**
+	 * The feature id for the '<em><b>Routines</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SCHEMA__ROUTINES = SQLSchemaPackage.SCHEMA__ROUTINES;
+
+	/**
+	 * The feature id for the '<em><b>Owner</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SCHEMA__OWNER = SQLSchemaPackage.SCHEMA__OWNER;
+
+	/**
+	 * The feature id for the '<em><b>Access Plans</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SCHEMA__ACCESS_PLANS = SQLSchemaPackage.SCHEMA_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Olap Objects</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SCHEMA__OLAP_OBJECTS = SQLSchemaPackage.SCHEMA_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Jars</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SCHEMA__JARS = SQLSchemaPackage.SCHEMA_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Xsr Objects</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SCHEMA__XSR_OBJECTS = SQLSchemaPackage.SCHEMA_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Packages</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SCHEMA__PACKAGES = SQLSchemaPackage.SCHEMA_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Masks</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SCHEMA__MASKS = SQLSchemaPackage.SCHEMA_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Permissions</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SCHEMA__PERMISSIONS = SQLSchemaPackage.SCHEMA_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Modules</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SCHEMA__MODULES = SQLSchemaPackage.SCHEMA_FEATURE_COUNT + 7;
+
+	/**
+	 * The feature id for the '<em><b>Global Variables</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SCHEMA__GLOBAL_VARIABLES = SQLSchemaPackage.SCHEMA_FEATURE_COUNT + 8;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Schema</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SCHEMA_FEATURE_COUNT = SQLSchemaPackage.SCHEMA_FEATURE_COUNT + 9;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine <em>DB2 Routine</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Routine()
+	 * @generated
+	 */
+	int DB2_ROUTINE = 6;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__EANNOTATIONS = SQLRoutinesPackage.ROUTINE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__NAME = SQLRoutinesPackage.ROUTINE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__DEPENDENCIES = SQLRoutinesPackage.ROUTINE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__DESCRIPTION = SQLRoutinesPackage.ROUTINE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__LABEL = SQLRoutinesPackage.ROUTINE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__COMMENTS = SQLRoutinesPackage.ROUTINE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__EXTENSIONS = SQLRoutinesPackage.ROUTINE__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__PRIVILEGES = SQLRoutinesPackage.ROUTINE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Specific Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__SPECIFIC_NAME = SQLRoutinesPackage.ROUTINE__SPECIFIC_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Language</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__LANGUAGE = SQLRoutinesPackage.ROUTINE__LANGUAGE;
+
+	/**
+	 * The feature id for the '<em><b>Parameter Style</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__PARAMETER_STYLE = SQLRoutinesPackage.ROUTINE__PARAMETER_STYLE;
+
+	/**
+	 * The feature id for the '<em><b>Deterministic</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__DETERMINISTIC = SQLRoutinesPackage.ROUTINE__DETERMINISTIC;
+
+	/**
+	 * The feature id for the '<em><b>Sql Data Access</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__SQL_DATA_ACCESS = SQLRoutinesPackage.ROUTINE__SQL_DATA_ACCESS;
+
+	/**
+	 * The feature id for the '<em><b>Creation TS</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__CREATION_TS = SQLRoutinesPackage.ROUTINE__CREATION_TS;
+
+	/**
+	 * The feature id for the '<em><b>Last Altered TS</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__LAST_ALTERED_TS = SQLRoutinesPackage.ROUTINE__LAST_ALTERED_TS;
+
+	/**
+	 * The feature id for the '<em><b>Authorization ID</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__AUTHORIZATION_ID = SQLRoutinesPackage.ROUTINE__AUTHORIZATION_ID;
+
+	/**
+	 * The feature id for the '<em><b>Security</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__SECURITY = SQLRoutinesPackage.ROUTINE__SECURITY;
+
+	/**
+	 * The feature id for the '<em><b>External Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__EXTERNAL_NAME = SQLRoutinesPackage.ROUTINE__EXTERNAL_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__PARAMETERS = SQLRoutinesPackage.ROUTINE__PARAMETERS;
+
+	/**
+	 * The feature id for the '<em><b>Source</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__SOURCE = SQLRoutinesPackage.ROUTINE__SOURCE;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__SCHEMA = SQLRoutinesPackage.ROUTINE__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Fenced</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__FENCED = SQLRoutinesPackage.ROUTINE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Threadsafe</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__THREADSAFE = SQLRoutinesPackage.ROUTINE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Db Info</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__DB_INFO = SQLRoutinesPackage.ROUTINE_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Implicit Schema</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__IMPLICIT_SCHEMA = SQLRoutinesPackage.ROUTINE_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Federated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__FEDERATED = SQLRoutinesPackage.ROUTINE_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Parm Ccsid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__PARM_CCSID = SQLRoutinesPackage.ROUTINE_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Special Register</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__SPECIAL_REGISTER = SQLRoutinesPackage.ROUTINE_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Change State</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__CHANGE_STATE = SQLRoutinesPackage.ROUTINE_FEATURE_COUNT + 7;
+
+	/**
+	 * The feature id for the '<em><b>Debug Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__DEBUG_ID = SQLRoutinesPackage.ROUTINE_FEATURE_COUNT + 8;
+
+	/**
+	 * The feature id for the '<em><b>Program Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__PROGRAM_TYPE = SQLRoutinesPackage.ROUTINE_FEATURE_COUNT + 9;
+
+	/**
+	 * The feature id for the '<em><b>Orig Schema Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__ORIG_SCHEMA_NAME = SQLRoutinesPackage.ROUTINE_FEATURE_COUNT + 10;
+
+	/**
+	 * The feature id for the '<em><b>Orig Parm Sig</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__ORIG_PARM_SIG = SQLRoutinesPackage.ROUTINE_FEATURE_COUNT + 11;
+
+	/**
+	 * The feature id for the '<em><b>Extended Options</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__EXTENDED_OPTIONS = SQLRoutinesPackage.ROUTINE_FEATURE_COUNT + 12;
+
+	/**
+	 * The feature id for the '<em><b>Routine Extensions</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE__ROUTINE_EXTENSIONS = SQLRoutinesPackage.ROUTINE_FEATURE_COUNT + 13;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Routine</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE_FEATURE_COUNT = SQLRoutinesPackage.ROUTINE_FEATURE_COUNT + 14;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2DatabaseManagerImpl <em>DB2 Database Manager</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2DatabaseManagerImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2DatabaseManager()
+	 * @generated
+	 */
+	int DB2_DATABASE_MANAGER = 7;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE_MANAGER__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE_MANAGER__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE_MANAGER__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE_MANAGER__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE_MANAGER__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE_MANAGER__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE_MANAGER__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE_MANAGER__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Databases</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE_MANAGER__DATABASES = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Db2 Process</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE_MANAGER__DB2_PROCESS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Server</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE_MANAGER__SERVER = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Cluster</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE_MANAGER__CLUSTER = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Database Manager</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DATABASE_MANAGER_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 4;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ViewImpl <em>DB2 View</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ViewImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2View()
+	 * @generated
+	 */
+	int DB2_VIEW = 8;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_VIEW__EANNOTATIONS = SQLTablesPackage.VIEW_TABLE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_VIEW__NAME = SQLTablesPackage.VIEW_TABLE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_VIEW__DEPENDENCIES = SQLTablesPackage.VIEW_TABLE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_VIEW__DESCRIPTION = SQLTablesPackage.VIEW_TABLE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_VIEW__LABEL = SQLTablesPackage.VIEW_TABLE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_VIEW__COMMENTS = SQLTablesPackage.VIEW_TABLE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_VIEW__EXTENSIONS = SQLTablesPackage.VIEW_TABLE__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_VIEW__PRIVILEGES = SQLTablesPackage.VIEW_TABLE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Columns</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_VIEW__COLUMNS = SQLTablesPackage.VIEW_TABLE__COLUMNS;
+
+	/**
+	 * The feature id for the '<em><b>Supertable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_VIEW__SUPERTABLE = SQLTablesPackage.VIEW_TABLE__SUPERTABLE;
+
+	/**
+	 * The feature id for the '<em><b>Subtables</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_VIEW__SUBTABLES = SQLTablesPackage.VIEW_TABLE__SUBTABLES;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_VIEW__SCHEMA = SQLTablesPackage.VIEW_TABLE__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Udt</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_VIEW__UDT = SQLTablesPackage.VIEW_TABLE__UDT;
+
+	/**
+	 * The feature id for the '<em><b>Triggers</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_VIEW__TRIGGERS = SQLTablesPackage.VIEW_TABLE__TRIGGERS;
+
+	/**
+	 * The feature id for the '<em><b>Index</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_VIEW__INDEX = SQLTablesPackage.VIEW_TABLE__INDEX;
+
+	/**
+	 * The feature id for the '<em><b>Self Ref Column Generation</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_VIEW__SELF_REF_COLUMN_GENERATION = SQLTablesPackage.VIEW_TABLE__SELF_REF_COLUMN_GENERATION;
+
+	/**
+	 * The feature id for the '<em><b>Insertable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_VIEW__INSERTABLE = SQLTablesPackage.VIEW_TABLE__INSERTABLE;
+
+	/**
+	 * The feature id for the '<em><b>Updatable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_VIEW__UPDATABLE = SQLTablesPackage.VIEW_TABLE__UPDATABLE;
+
+	/**
+	 * The feature id for the '<em><b>Query Expression</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_VIEW__QUERY_EXPRESSION = SQLTablesPackage.VIEW_TABLE__QUERY_EXPRESSION;
+
+	/**
+	 * The feature id for the '<em><b>Check Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_VIEW__CHECK_TYPE = SQLTablesPackage.VIEW_TABLE__CHECK_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Operative</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_VIEW__OPERATIVE = SQLTablesPackage.VIEW_TABLE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>DB2 View</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_VIEW_FEATURE_COUNT = SQLTablesPackage.VIEW_TABLE_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ApplicationProcessImpl <em>DB2 Application Process</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ApplicationProcessImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2ApplicationProcess()
+	 * @generated
+	 */
+	int DB2_APPLICATION_PROCESS = 9;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_APPLICATION_PROCESS__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_APPLICATION_PROCESS__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_APPLICATION_PROCESS__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_APPLICATION_PROCESS__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_APPLICATION_PROCESS__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_APPLICATION_PROCESS__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_APPLICATION_PROCESS__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_APPLICATION_PROCESS__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Isolation Level</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_APPLICATION_PROCESS__ISOLATION_LEVEL = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Unit Of Work</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_APPLICATION_PROCESS__UNIT_OF_WORK = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Application Process</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_APPLICATION_PROCESS_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2TransactionImpl <em>DB2 Transaction</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2TransactionImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Transaction()
+	 * @generated
+	 */
+	int DB2_TRANSACTION = 10;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRANSACTION__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRANSACTION__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRANSACTION__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRANSACTION__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRANSACTION__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRANSACTION__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRANSACTION__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRANSACTION__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Transaction</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_TRANSACTION_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2SystemSchemaImpl <em>DB2 System Schema</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2SystemSchemaImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2SystemSchema()
+	 * @generated
+	 */
+	int DB2_SYSTEM_SCHEMA = 11;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SYSTEM_SCHEMA__EANNOTATIONS = DB2_SCHEMA__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SYSTEM_SCHEMA__NAME = DB2_SCHEMA__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SYSTEM_SCHEMA__DEPENDENCIES = DB2_SCHEMA__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SYSTEM_SCHEMA__DESCRIPTION = DB2_SCHEMA__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SYSTEM_SCHEMA__LABEL = DB2_SCHEMA__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SYSTEM_SCHEMA__COMMENTS = DB2_SCHEMA__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SYSTEM_SCHEMA__EXTENSIONS = DB2_SCHEMA__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SYSTEM_SCHEMA__PRIVILEGES = DB2_SCHEMA__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Triggers</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SYSTEM_SCHEMA__TRIGGERS = DB2_SCHEMA__TRIGGERS;
+
+	/**
+	 * The feature id for the '<em><b>Indices</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SYSTEM_SCHEMA__INDICES = DB2_SCHEMA__INDICES;
+
+	/**
+	 * The feature id for the '<em><b>Tables</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SYSTEM_SCHEMA__TABLES = DB2_SCHEMA__TABLES;
+
+	/**
+	 * The feature id for the '<em><b>Sequences</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SYSTEM_SCHEMA__SEQUENCES = DB2_SCHEMA__SEQUENCES;
+
+	/**
+	 * The feature id for the '<em><b>Database</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SYSTEM_SCHEMA__DATABASE = DB2_SCHEMA__DATABASE;
+
+	/**
+	 * The feature id for the '<em><b>Catalog</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SYSTEM_SCHEMA__CATALOG = DB2_SCHEMA__CATALOG;
+
+	/**
+	 * The feature id for the '<em><b>Assertions</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SYSTEM_SCHEMA__ASSERTIONS = DB2_SCHEMA__ASSERTIONS;
+
+	/**
+	 * The feature id for the '<em><b>User Defined Types</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SYSTEM_SCHEMA__USER_DEFINED_TYPES = DB2_SCHEMA__USER_DEFINED_TYPES;
+
+	/**
+	 * The feature id for the '<em><b>Char Sets</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SYSTEM_SCHEMA__CHAR_SETS = DB2_SCHEMA__CHAR_SETS;
+
+	/**
+	 * The feature id for the '<em><b>Routines</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SYSTEM_SCHEMA__ROUTINES = DB2_SCHEMA__ROUTINES;
+
+	/**
+	 * The feature id for the '<em><b>Owner</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SYSTEM_SCHEMA__OWNER = DB2_SCHEMA__OWNER;
+
+	/**
+	 * The feature id for the '<em><b>Access Plans</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SYSTEM_SCHEMA__ACCESS_PLANS = DB2_SCHEMA__ACCESS_PLANS;
+
+	/**
+	 * The feature id for the '<em><b>Olap Objects</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SYSTEM_SCHEMA__OLAP_OBJECTS = DB2_SCHEMA__OLAP_OBJECTS;
+
+	/**
+	 * The feature id for the '<em><b>Jars</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SYSTEM_SCHEMA__JARS = DB2_SCHEMA__JARS;
+
+	/**
+	 * The feature id for the '<em><b>Xsr Objects</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SYSTEM_SCHEMA__XSR_OBJECTS = DB2_SCHEMA__XSR_OBJECTS;
+
+	/**
+	 * The feature id for the '<em><b>Packages</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SYSTEM_SCHEMA__PACKAGES = DB2_SCHEMA__PACKAGES;
+
+	/**
+	 * The feature id for the '<em><b>Masks</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SYSTEM_SCHEMA__MASKS = DB2_SCHEMA__MASKS;
+
+	/**
+	 * The feature id for the '<em><b>Permissions</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SYSTEM_SCHEMA__PERMISSIONS = DB2_SCHEMA__PERMISSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Modules</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SYSTEM_SCHEMA__MODULES = DB2_SCHEMA__MODULES;
+
+	/**
+	 * The feature id for the '<em><b>Global Variables</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SYSTEM_SCHEMA__GLOBAL_VARIABLES = DB2_SCHEMA__GLOBAL_VARIABLES;
+
+	/**
+	 * The number of structural features of the '<em>DB2 System Schema</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SYSTEM_SCHEMA_FEATURE_COUNT = DB2_SCHEMA_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2SourceImpl <em>DB2 Source</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2SourceImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Source()
+	 * @generated
+	 */
+	int DB2_SOURCE = 12;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SOURCE__EANNOTATIONS = SQLRoutinesPackage.SOURCE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SOURCE__NAME = SQLRoutinesPackage.SOURCE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SOURCE__DEPENDENCIES = SQLRoutinesPackage.SOURCE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SOURCE__DESCRIPTION = SQLRoutinesPackage.SOURCE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SOURCE__LABEL = SQLRoutinesPackage.SOURCE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SOURCE__COMMENTS = SQLRoutinesPackage.SOURCE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SOURCE__EXTENSIONS = SQLRoutinesPackage.SOURCE__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SOURCE__PRIVILEGES = SQLRoutinesPackage.SOURCE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Body</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SOURCE__BODY = SQLRoutinesPackage.SOURCE__BODY;
+
+	/**
+	 * The feature id for the '<em><b>File Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SOURCE__FILE_NAME = SQLRoutinesPackage.SOURCE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Package Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SOURCE__PACKAGE_NAME = SQLRoutinesPackage.SOURCE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Db2 Package Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SOURCE__DB2_PACKAGE_NAME = SQLRoutinesPackage.SOURCE_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Last Modified</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SOURCE__LAST_MODIFIED = SQLRoutinesPackage.SOURCE_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Supporting</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SOURCE__SUPPORTING = SQLRoutinesPackage.SOURCE_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Primary</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SOURCE__PRIMARY = SQLRoutinesPackage.SOURCE_FEATURE_COUNT + 5;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Source</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_SOURCE_FEATURE_COUNT = SQLRoutinesPackage.SOURCE_FEATURE_COUNT + 6;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl <em>DB2 User Defined Function</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2UserDefinedFunction()
+	 * @generated
+	 */
+	int DB2_USER_DEFINED_FUNCTION = 14;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__EANNOTATIONS = SQLRoutinesPackage.USER_DEFINED_FUNCTION__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__NAME = SQLRoutinesPackage.USER_DEFINED_FUNCTION__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__DEPENDENCIES = SQLRoutinesPackage.USER_DEFINED_FUNCTION__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__DESCRIPTION = SQLRoutinesPackage.USER_DEFINED_FUNCTION__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__LABEL = SQLRoutinesPackage.USER_DEFINED_FUNCTION__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__COMMENTS = SQLRoutinesPackage.USER_DEFINED_FUNCTION__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__EXTENSIONS = SQLRoutinesPackage.USER_DEFINED_FUNCTION__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__PRIVILEGES = SQLRoutinesPackage.USER_DEFINED_FUNCTION__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Specific Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__SPECIFIC_NAME = SQLRoutinesPackage.USER_DEFINED_FUNCTION__SPECIFIC_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Language</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__LANGUAGE = SQLRoutinesPackage.USER_DEFINED_FUNCTION__LANGUAGE;
+
+	/**
+	 * The feature id for the '<em><b>Parameter Style</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__PARAMETER_STYLE = SQLRoutinesPackage.USER_DEFINED_FUNCTION__PARAMETER_STYLE;
+
+	/**
+	 * The feature id for the '<em><b>Deterministic</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__DETERMINISTIC = SQLRoutinesPackage.USER_DEFINED_FUNCTION__DETERMINISTIC;
+
+	/**
+	 * The feature id for the '<em><b>Sql Data Access</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__SQL_DATA_ACCESS = SQLRoutinesPackage.USER_DEFINED_FUNCTION__SQL_DATA_ACCESS;
+
+	/**
+	 * The feature id for the '<em><b>Creation TS</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__CREATION_TS = SQLRoutinesPackage.USER_DEFINED_FUNCTION__CREATION_TS;
+
+	/**
+	 * The feature id for the '<em><b>Last Altered TS</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__LAST_ALTERED_TS = SQLRoutinesPackage.USER_DEFINED_FUNCTION__LAST_ALTERED_TS;
+
+	/**
+	 * The feature id for the '<em><b>Authorization ID</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__AUTHORIZATION_ID = SQLRoutinesPackage.USER_DEFINED_FUNCTION__AUTHORIZATION_ID;
+
+	/**
+	 * The feature id for the '<em><b>Security</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__SECURITY = SQLRoutinesPackage.USER_DEFINED_FUNCTION__SECURITY;
+
+	/**
+	 * The feature id for the '<em><b>External Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__EXTERNAL_NAME = SQLRoutinesPackage.USER_DEFINED_FUNCTION__EXTERNAL_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__PARAMETERS = SQLRoutinesPackage.USER_DEFINED_FUNCTION__PARAMETERS;
+
+	/**
+	 * The feature id for the '<em><b>Source</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__SOURCE = SQLRoutinesPackage.USER_DEFINED_FUNCTION__SOURCE;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__SCHEMA = SQLRoutinesPackage.USER_DEFINED_FUNCTION__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Null Call</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__NULL_CALL = SQLRoutinesPackage.USER_DEFINED_FUNCTION__NULL_CALL;
+
+	/**
+	 * The feature id for the '<em><b>Static</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__STATIC = SQLRoutinesPackage.USER_DEFINED_FUNCTION__STATIC;
+
+	/**
+	 * The feature id for the '<em><b>Transform Group</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__TRANSFORM_GROUP = SQLRoutinesPackage.USER_DEFINED_FUNCTION__TRANSFORM_GROUP;
+
+	/**
+	 * The feature id for the '<em><b>Type Preserving</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__TYPE_PRESERVING = SQLRoutinesPackage.USER_DEFINED_FUNCTION__TYPE_PRESERVING;
+
+	/**
+	 * The feature id for the '<em><b>Mutator</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__MUTATOR = SQLRoutinesPackage.USER_DEFINED_FUNCTION__MUTATOR;
+
+	/**
+	 * The feature id for the '<em><b>Return Table</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__RETURN_TABLE = SQLRoutinesPackage.USER_DEFINED_FUNCTION__RETURN_TABLE;
+
+	/**
+	 * The feature id for the '<em><b>Return Scalar</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__RETURN_SCALAR = SQLRoutinesPackage.USER_DEFINED_FUNCTION__RETURN_SCALAR;
+
+	/**
+	 * The feature id for the '<em><b>Return Cast</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__RETURN_CAST = SQLRoutinesPackage.USER_DEFINED_FUNCTION__RETURN_CAST;
+
+	/**
+	 * The feature id for the '<em><b>Fenced</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__FENCED = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Threadsafe</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__THREADSAFE = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Db Info</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__DB_INFO = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Implicit Schema</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__IMPLICIT_SCHEMA = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Federated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__FEDERATED = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Parm Ccsid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__PARM_CCSID = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Special Register</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__SPECIAL_REGISTER = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Change State</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__CHANGE_STATE = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 7;
+
+	/**
+	 * The feature id for the '<em><b>Debug Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__DEBUG_ID = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 8;
+
+	/**
+	 * The feature id for the '<em><b>Program Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__PROGRAM_TYPE = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 9;
+
+	/**
+	 * The feature id for the '<em><b>Orig Schema Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__ORIG_SCHEMA_NAME = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 10;
+
+	/**
+	 * The feature id for the '<em><b>Orig Parm Sig</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__ORIG_PARM_SIG = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 11;
+
+	/**
+	 * The feature id for the '<em><b>Extended Options</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__EXTENDED_OPTIONS = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 12;
+
+	/**
+	 * The feature id for the '<em><b>Routine Extensions</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__ROUTINE_EXTENSIONS = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 13;
+
+	/**
+	 * The feature id for the '<em><b>Final Call</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__FINAL_CALL = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 14;
+
+	/**
+	 * The feature id for the '<em><b>Scratch Pad</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__SCRATCH_PAD = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 15;
+
+	/**
+	 * The feature id for the '<em><b>Scratch Pad Length</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__SCRATCH_PAD_LENGTH = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 16;
+
+	/**
+	 * The feature id for the '<em><b>Function Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__FUNCTION_TYPE = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 17;
+
+	/**
+	 * The feature id for the '<em><b>Predicate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__PREDICATE = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 18;
+
+	/**
+	 * The feature id for the '<em><b>External Action</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__EXTERNAL_ACTION = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 19;
+
+	/**
+	 * The feature id for the '<em><b>Cardinality</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__CARDINALITY = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 20;
+
+	/**
+	 * The feature id for the '<em><b>Allow Parallel</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__ALLOW_PARALLEL = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 21;
+
+	/**
+	 * The feature id for the '<em><b>Return Clause</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__RETURN_CLAUSE = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 22;
+
+	/**
+	 * The feature id for the '<em><b>Origin</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__ORIGIN = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 23;
+
+	/**
+	 * The feature id for the '<em><b>Inherit Lock Request</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__INHERIT_LOCK_REQUEST = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 24;
+
+	/**
+	 * The feature id for the '<em><b>Dialect</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__DIALECT = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 25;
+
+	/**
+	 * The feature id for the '<em><b>Inline</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__INLINE = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 26;
+
+	/**
+	 * The feature id for the '<em><b>Version</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__VERSION = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 27;
+
+	/**
+	 * The feature id for the '<em><b>Secured</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION__SECURED = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 28;
+
+	/**
+	 * The number of structural features of the '<em>DB2 User Defined Function</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_USER_DEFINED_FUNCTION_FEATURE_COUNT = SQLRoutinesPackage.USER_DEFINED_FUNCTION_FEATURE_COUNT + 29;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl <em>DB2 Method</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Method()
+	 * @generated
+	 */
+	int DB2_METHOD = 15;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__EANNOTATIONS = SQLRoutinesPackage.METHOD__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__NAME = SQLRoutinesPackage.METHOD__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__DEPENDENCIES = SQLRoutinesPackage.METHOD__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__DESCRIPTION = SQLRoutinesPackage.METHOD__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__LABEL = SQLRoutinesPackage.METHOD__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__COMMENTS = SQLRoutinesPackage.METHOD__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__EXTENSIONS = SQLRoutinesPackage.METHOD__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__PRIVILEGES = SQLRoutinesPackage.METHOD__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Specific Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__SPECIFIC_NAME = SQLRoutinesPackage.METHOD__SPECIFIC_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Language</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__LANGUAGE = SQLRoutinesPackage.METHOD__LANGUAGE;
+
+	/**
+	 * The feature id for the '<em><b>Parameter Style</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__PARAMETER_STYLE = SQLRoutinesPackage.METHOD__PARAMETER_STYLE;
+
+	/**
+	 * The feature id for the '<em><b>Deterministic</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__DETERMINISTIC = SQLRoutinesPackage.METHOD__DETERMINISTIC;
+
+	/**
+	 * The feature id for the '<em><b>Sql Data Access</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__SQL_DATA_ACCESS = SQLRoutinesPackage.METHOD__SQL_DATA_ACCESS;
+
+	/**
+	 * The feature id for the '<em><b>Creation TS</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__CREATION_TS = SQLRoutinesPackage.METHOD__CREATION_TS;
+
+	/**
+	 * The feature id for the '<em><b>Last Altered TS</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__LAST_ALTERED_TS = SQLRoutinesPackage.METHOD__LAST_ALTERED_TS;
+
+	/**
+	 * The feature id for the '<em><b>Authorization ID</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__AUTHORIZATION_ID = SQLRoutinesPackage.METHOD__AUTHORIZATION_ID;
+
+	/**
+	 * The feature id for the '<em><b>Security</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__SECURITY = SQLRoutinesPackage.METHOD__SECURITY;
+
+	/**
+	 * The feature id for the '<em><b>External Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__EXTERNAL_NAME = SQLRoutinesPackage.METHOD__EXTERNAL_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__PARAMETERS = SQLRoutinesPackage.METHOD__PARAMETERS;
+
+	/**
+	 * The feature id for the '<em><b>Source</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__SOURCE = SQLRoutinesPackage.METHOD__SOURCE;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__SCHEMA = SQLRoutinesPackage.METHOD__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Null Call</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__NULL_CALL = SQLRoutinesPackage.METHOD__NULL_CALL;
+
+	/**
+	 * The feature id for the '<em><b>Static</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__STATIC = SQLRoutinesPackage.METHOD__STATIC;
+
+	/**
+	 * The feature id for the '<em><b>Transform Group</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__TRANSFORM_GROUP = SQLRoutinesPackage.METHOD__TRANSFORM_GROUP;
+
+	/**
+	 * The feature id for the '<em><b>Type Preserving</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__TYPE_PRESERVING = SQLRoutinesPackage.METHOD__TYPE_PRESERVING;
+
+	/**
+	 * The feature id for the '<em><b>Mutator</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__MUTATOR = SQLRoutinesPackage.METHOD__MUTATOR;
+
+	/**
+	 * The feature id for the '<em><b>Return Table</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__RETURN_TABLE = SQLRoutinesPackage.METHOD__RETURN_TABLE;
+
+	/**
+	 * The feature id for the '<em><b>Return Scalar</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__RETURN_SCALAR = SQLRoutinesPackage.METHOD__RETURN_SCALAR;
+
+	/**
+	 * The feature id for the '<em><b>Return Cast</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__RETURN_CAST = SQLRoutinesPackage.METHOD__RETURN_CAST;
+
+	/**
+	 * The feature id for the '<em><b>Overriding</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__OVERRIDING = SQLRoutinesPackage.METHOD__OVERRIDING;
+
+	/**
+	 * The feature id for the '<em><b>Constructor</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__CONSTRUCTOR = SQLRoutinesPackage.METHOD__CONSTRUCTOR;
+
+	/**
+	 * The feature id for the '<em><b>Fenced</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__FENCED = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Threadsafe</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__THREADSAFE = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Db Info</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__DB_INFO = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Implicit Schema</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__IMPLICIT_SCHEMA = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Federated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__FEDERATED = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Parm Ccsid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__PARM_CCSID = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Special Register</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__SPECIAL_REGISTER = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Change State</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__CHANGE_STATE = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 7;
+
+	/**
+	 * The feature id for the '<em><b>Debug Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__DEBUG_ID = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 8;
+
+	/**
+	 * The feature id for the '<em><b>Program Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__PROGRAM_TYPE = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 9;
+
+	/**
+	 * The feature id for the '<em><b>Orig Schema Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__ORIG_SCHEMA_NAME = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 10;
+
+	/**
+	 * The feature id for the '<em><b>Orig Parm Sig</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__ORIG_PARM_SIG = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 11;
+
+	/**
+	 * The feature id for the '<em><b>Extended Options</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__EXTENDED_OPTIONS = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 12;
+
+	/**
+	 * The feature id for the '<em><b>Routine Extensions</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__ROUTINE_EXTENSIONS = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 13;
+
+	/**
+	 * The feature id for the '<em><b>Final Call</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__FINAL_CALL = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 14;
+
+	/**
+	 * The feature id for the '<em><b>Scratch Pad</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__SCRATCH_PAD = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 15;
+
+	/**
+	 * The feature id for the '<em><b>Scratch Pad Length</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__SCRATCH_PAD_LENGTH = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 16;
+
+	/**
+	 * The feature id for the '<em><b>Function Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__FUNCTION_TYPE = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 17;
+
+	/**
+	 * The feature id for the '<em><b>Predicate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__PREDICATE = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 18;
+
+	/**
+	 * The feature id for the '<em><b>External Action</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__EXTERNAL_ACTION = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 19;
+
+	/**
+	 * The feature id for the '<em><b>Cardinality</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__CARDINALITY = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 20;
+
+	/**
+	 * The feature id for the '<em><b>Allow Parallel</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__ALLOW_PARALLEL = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 21;
+
+	/**
+	 * The feature id for the '<em><b>Return Clause</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__RETURN_CLAUSE = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 22;
+
+	/**
+	 * The feature id for the '<em><b>Origin</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__ORIGIN = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 23;
+
+	/**
+	 * The feature id for the '<em><b>Inherit Lock Request</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__INHERIT_LOCK_REQUEST = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 24;
+
+	/**
+	 * The feature id for the '<em><b>Dialect</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__DIALECT = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 25;
+
+	/**
+	 * The feature id for the '<em><b>Inline</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__INLINE = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 26;
+
+	/**
+	 * The feature id for the '<em><b>Version</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__VERSION = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 27;
+
+	/**
+	 * The feature id for the '<em><b>Secured</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__SECURED = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 28;
+
+	/**
+	 * The feature id for the '<em><b>Returns Self As Result</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__RETURNS_SELF_AS_RESULT = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 29;
+
+	/**
+	 * The feature id for the '<em><b>Implemented</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD__IMPLEMENTED = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 30;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Method</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_METHOD_FEATURE_COUNT = SQLRoutinesPackage.METHOD_FEATURE_COUNT + 31;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ExtendedOptionsImpl <em>DB2 Extended Options</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ExtendedOptionsImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2ExtendedOptions()
+	 * @generated
+	 */
+	int DB2_EXTENDED_OPTIONS = 16;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_EXTENDED_OPTIONS__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_EXTENDED_OPTIONS__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_EXTENDED_OPTIONS__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_EXTENDED_OPTIONS__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_EXTENDED_OPTIONS__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_EXTENDED_OPTIONS__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_EXTENDED_OPTIONS__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_EXTENDED_OPTIONS__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Classpath Compile Jars</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_EXTENDED_OPTIONS__CLASSPATH_COMPILE_JARS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Pre Compile Opts</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_EXTENDED_OPTIONS__PRE_COMPILE_OPTS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>For Debug</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_EXTENDED_OPTIONS__FOR_DEBUG = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Built</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_EXTENDED_OPTIONS__BUILT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Compile Opts</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_EXTENDED_OPTIONS__COMPILE_OPTS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Link Opts</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_EXTENDED_OPTIONS__LINK_OPTS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Bind Opts</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_EXTENDED_OPTIONS__BIND_OPTS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Colid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_EXTENDED_OPTIONS__COLID = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 7;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Extended Options</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_EXTENDED_OPTIONS_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 8;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2AliasImpl <em>DB2 Alias</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2AliasImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Alias()
+	 * @generated
+	 */
+	int DB2_ALIAS = 17;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ALIAS__EANNOTATIONS = SQLTablesPackage.TABLE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ALIAS__NAME = SQLTablesPackage.TABLE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ALIAS__DEPENDENCIES = SQLTablesPackage.TABLE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ALIAS__DESCRIPTION = SQLTablesPackage.TABLE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ALIAS__LABEL = SQLTablesPackage.TABLE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ALIAS__COMMENTS = SQLTablesPackage.TABLE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ALIAS__EXTENSIONS = SQLTablesPackage.TABLE__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ALIAS__PRIVILEGES = SQLTablesPackage.TABLE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Columns</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ALIAS__COLUMNS = SQLTablesPackage.TABLE__COLUMNS;
+
+	/**
+	 * The feature id for the '<em><b>Supertable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ALIAS__SUPERTABLE = SQLTablesPackage.TABLE__SUPERTABLE;
+
+	/**
+	 * The feature id for the '<em><b>Subtables</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ALIAS__SUBTABLES = SQLTablesPackage.TABLE__SUBTABLES;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ALIAS__SCHEMA = SQLTablesPackage.TABLE__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Udt</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ALIAS__UDT = SQLTablesPackage.TABLE__UDT;
+
+	/**
+	 * The feature id for the '<em><b>Triggers</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ALIAS__TRIGGERS = SQLTablesPackage.TABLE__TRIGGERS;
+
+	/**
+	 * The feature id for the '<em><b>Index</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ALIAS__INDEX = SQLTablesPackage.TABLE__INDEX;
+
+	/**
+	 * The feature id for the '<em><b>Self Ref Column Generation</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ALIAS__SELF_REF_COLUMN_GENERATION = SQLTablesPackage.TABLE__SELF_REF_COLUMN_GENERATION;
+
+	/**
+	 * The feature id for the '<em><b>Insertable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ALIAS__INSERTABLE = SQLTablesPackage.TABLE__INSERTABLE;
+
+	/**
+	 * The feature id for the '<em><b>Updatable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ALIAS__UPDATABLE = SQLTablesPackage.TABLE__UPDATABLE;
+
+	/**
+	 * The feature id for the '<em><b>Aliased Table</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ALIAS__ALIASED_TABLE = SQLTablesPackage.TABLE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Alias</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ALIAS_FEATURE_COUNT = SQLTablesPackage.TABLE_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MaterializedQueryTableImpl <em>DB2 Materialized Query Table</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MaterializedQueryTableImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2MaterializedQueryTable()
+	 * @generated
+	 */
+	int DB2_MATERIALIZED_QUERY_TABLE = 18;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MATERIALIZED_QUERY_TABLE__EANNOTATIONS = SQLTablesPackage.DERIVED_TABLE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MATERIALIZED_QUERY_TABLE__NAME = SQLTablesPackage.DERIVED_TABLE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MATERIALIZED_QUERY_TABLE__DEPENDENCIES = SQLTablesPackage.DERIVED_TABLE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MATERIALIZED_QUERY_TABLE__DESCRIPTION = SQLTablesPackage.DERIVED_TABLE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MATERIALIZED_QUERY_TABLE__LABEL = SQLTablesPackage.DERIVED_TABLE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MATERIALIZED_QUERY_TABLE__COMMENTS = SQLTablesPackage.DERIVED_TABLE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MATERIALIZED_QUERY_TABLE__EXTENSIONS = SQLTablesPackage.DERIVED_TABLE__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MATERIALIZED_QUERY_TABLE__PRIVILEGES = SQLTablesPackage.DERIVED_TABLE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Columns</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MATERIALIZED_QUERY_TABLE__COLUMNS = SQLTablesPackage.DERIVED_TABLE__COLUMNS;
+
+	/**
+	 * The feature id for the '<em><b>Supertable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MATERIALIZED_QUERY_TABLE__SUPERTABLE = SQLTablesPackage.DERIVED_TABLE__SUPERTABLE;
+
+	/**
+	 * The feature id for the '<em><b>Subtables</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MATERIALIZED_QUERY_TABLE__SUBTABLES = SQLTablesPackage.DERIVED_TABLE__SUBTABLES;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MATERIALIZED_QUERY_TABLE__SCHEMA = SQLTablesPackage.DERIVED_TABLE__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Udt</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MATERIALIZED_QUERY_TABLE__UDT = SQLTablesPackage.DERIVED_TABLE__UDT;
+
+	/**
+	 * The feature id for the '<em><b>Triggers</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MATERIALIZED_QUERY_TABLE__TRIGGERS = SQLTablesPackage.DERIVED_TABLE__TRIGGERS;
+
+	/**
+	 * The feature id for the '<em><b>Index</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MATERIALIZED_QUERY_TABLE__INDEX = SQLTablesPackage.DERIVED_TABLE__INDEX;
+
+	/**
+	 * The feature id for the '<em><b>Self Ref Column Generation</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MATERIALIZED_QUERY_TABLE__SELF_REF_COLUMN_GENERATION = SQLTablesPackage.DERIVED_TABLE__SELF_REF_COLUMN_GENERATION;
+
+	/**
+	 * The feature id for the '<em><b>Insertable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MATERIALIZED_QUERY_TABLE__INSERTABLE = SQLTablesPackage.DERIVED_TABLE__INSERTABLE;
+
+	/**
+	 * The feature id for the '<em><b>Updatable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MATERIALIZED_QUERY_TABLE__UPDATABLE = SQLTablesPackage.DERIVED_TABLE__UPDATABLE;
+
+	/**
+	 * The feature id for the '<em><b>Query Expression</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MATERIALIZED_QUERY_TABLE__QUERY_EXPRESSION = SQLTablesPackage.DERIVED_TABLE__QUERY_EXPRESSION;
+
+	/**
+	 * The feature id for the '<em><b>Refresh</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MATERIALIZED_QUERY_TABLE__REFRESH = SQLTablesPackage.DERIVED_TABLE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Optimize Query</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MATERIALIZED_QUERY_TABLE__OPTIMIZE_QUERY = SQLTablesPackage.DERIVED_TABLE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Maintained By</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MATERIALIZED_QUERY_TABLE__MAINTAINED_BY = SQLTablesPackage.DERIVED_TABLE_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Activate Row Access Control</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MATERIALIZED_QUERY_TABLE__ACTIVATE_ROW_ACCESS_CONTROL = SQLTablesPackage.DERIVED_TABLE_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Activate Column Access Control</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MATERIALIZED_QUERY_TABLE__ACTIVATE_COLUMN_ACCESS_CONTROL = SQLTablesPackage.DERIVED_TABLE_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Masks</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MATERIALIZED_QUERY_TABLE__MASKS = SQLTablesPackage.DERIVED_TABLE_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Permissions</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MATERIALIZED_QUERY_TABLE__PERMISSIONS = SQLTablesPackage.DERIVED_TABLE_FEATURE_COUNT + 6;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Materialized Query Table</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MATERIALIZED_QUERY_TABLE_FEATURE_COUNT = SQLTablesPackage.DERIVED_TABLE_FEATURE_COUNT + 7;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2IndexImpl <em>DB2 Index</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2IndexImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Index()
+	 * @generated
+	 */
+	int DB2_INDEX = 19;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_INDEX__EANNOTATIONS = SQLConstraintsPackage.INDEX__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_INDEX__NAME = SQLConstraintsPackage.INDEX__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_INDEX__DEPENDENCIES = SQLConstraintsPackage.INDEX__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_INDEX__DESCRIPTION = SQLConstraintsPackage.INDEX__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_INDEX__LABEL = SQLConstraintsPackage.INDEX__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_INDEX__COMMENTS = SQLConstraintsPackage.INDEX__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_INDEX__EXTENSIONS = SQLConstraintsPackage.INDEX__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_INDEX__PRIVILEGES = SQLConstraintsPackage.INDEX__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_INDEX__SCHEMA = SQLConstraintsPackage.INDEX__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Clustered</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_INDEX__CLUSTERED = SQLConstraintsPackage.INDEX__CLUSTERED;
+
+	/**
+	 * The feature id for the '<em><b>Fill Factor</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_INDEX__FILL_FACTOR = SQLConstraintsPackage.INDEX__FILL_FACTOR;
+
+	/**
+	 * The feature id for the '<em><b>Unique</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_INDEX__UNIQUE = SQLConstraintsPackage.INDEX__UNIQUE;
+
+	/**
+	 * The feature id for the '<em><b>System Generated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_INDEX__SYSTEM_GENERATED = SQLConstraintsPackage.INDEX__SYSTEM_GENERATED;
+
+	/**
+	 * The feature id for the '<em><b>Members</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_INDEX__MEMBERS = SQLConstraintsPackage.INDEX__MEMBERS;
+
+	/**
+	 * The feature id for the '<em><b>Table</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_INDEX__TABLE = SQLConstraintsPackage.INDEX__TABLE;
+
+	/**
+	 * The feature id for the '<em><b>Foreign Key</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_INDEX__FOREIGN_KEY = SQLConstraintsPackage.INDEX__FOREIGN_KEY;
+
+	/**
+	 * The feature id for the '<em><b>Included Members</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_INDEX__INCLUDED_MEMBERS = SQLConstraintsPackage.INDEX__INCLUDED_MEMBERS;
+
+	/**
+	 * The feature id for the '<em><b>Index Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_INDEX__INDEX_TYPE = SQLConstraintsPackage.INDEX_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Bus Period Without Overlap</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_INDEX__BUS_PERIOD_WITHOUT_OVERLAP = SQLConstraintsPackage.INDEX_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Encoded Vector</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_INDEX__ENCODED_VECTOR = SQLConstraintsPackage.INDEX_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>DB2 Multidimensional Index</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_INDEX__DB2_MULTIDIMENSIONAL_INDEX = SQLConstraintsPackage.INDEX_FEATURE_COUNT + 3;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Index</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_INDEX_FEATURE_COUNT = SQLConstraintsPackage.INDEX_FEATURE_COUNT + 4;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MultidimensionalIndexImpl <em>DB2 Multidimensional Index</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MultidimensionalIndexImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2MultidimensionalIndex()
+	 * @generated
+	 */
+	int DB2_MULTIDIMENSIONAL_INDEX = 20;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MULTIDIMENSIONAL_INDEX__EANNOTATIONS = SQLConstraintsPackage.INDEX__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MULTIDIMENSIONAL_INDEX__NAME = SQLConstraintsPackage.INDEX__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MULTIDIMENSIONAL_INDEX__DEPENDENCIES = SQLConstraintsPackage.INDEX__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MULTIDIMENSIONAL_INDEX__DESCRIPTION = SQLConstraintsPackage.INDEX__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MULTIDIMENSIONAL_INDEX__LABEL = SQLConstraintsPackage.INDEX__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MULTIDIMENSIONAL_INDEX__COMMENTS = SQLConstraintsPackage.INDEX__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MULTIDIMENSIONAL_INDEX__EXTENSIONS = SQLConstraintsPackage.INDEX__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MULTIDIMENSIONAL_INDEX__PRIVILEGES = SQLConstraintsPackage.INDEX__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MULTIDIMENSIONAL_INDEX__SCHEMA = SQLConstraintsPackage.INDEX__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Clustered</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MULTIDIMENSIONAL_INDEX__CLUSTERED = SQLConstraintsPackage.INDEX__CLUSTERED;
+
+	/**
+	 * The feature id for the '<em><b>Fill Factor</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MULTIDIMENSIONAL_INDEX__FILL_FACTOR = SQLConstraintsPackage.INDEX__FILL_FACTOR;
+
+	/**
+	 * The feature id for the '<em><b>Unique</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MULTIDIMENSIONAL_INDEX__UNIQUE = SQLConstraintsPackage.INDEX__UNIQUE;
+
+	/**
+	 * The feature id for the '<em><b>System Generated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MULTIDIMENSIONAL_INDEX__SYSTEM_GENERATED = SQLConstraintsPackage.INDEX__SYSTEM_GENERATED;
+
+	/**
+	 * The feature id for the '<em><b>Members</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MULTIDIMENSIONAL_INDEX__MEMBERS = SQLConstraintsPackage.INDEX__MEMBERS;
+
+	/**
+	 * The feature id for the '<em><b>Table</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MULTIDIMENSIONAL_INDEX__TABLE = SQLConstraintsPackage.INDEX__TABLE;
+
+	/**
+	 * The feature id for the '<em><b>Foreign Key</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MULTIDIMENSIONAL_INDEX__FOREIGN_KEY = SQLConstraintsPackage.INDEX__FOREIGN_KEY;
+
+	/**
+	 * The feature id for the '<em><b>Included Members</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MULTIDIMENSIONAL_INDEX__INCLUDED_MEMBERS = SQLConstraintsPackage.INDEX__INCLUDED_MEMBERS;
+
+	/**
+	 * The feature id for the '<em><b>Dimension Indexes</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MULTIDIMENSIONAL_INDEX__DIMENSION_INDEXES = SQLConstraintsPackage.INDEX_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Multidimensional Index</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MULTIDIMENSIONAL_INDEX_FEATURE_COUNT = SQLConstraintsPackage.INDEX_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function <em>DB2 Function</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Function
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Function()
+	 * @generated
+	 */
+	int DB2_FUNCTION = 21;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__EANNOTATIONS = DB2_ROUTINE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__NAME = DB2_ROUTINE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__DEPENDENCIES = DB2_ROUTINE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__DESCRIPTION = DB2_ROUTINE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__LABEL = DB2_ROUTINE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__COMMENTS = DB2_ROUTINE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__EXTENSIONS = DB2_ROUTINE__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__PRIVILEGES = DB2_ROUTINE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Specific Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__SPECIFIC_NAME = DB2_ROUTINE__SPECIFIC_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Language</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__LANGUAGE = DB2_ROUTINE__LANGUAGE;
+
+	/**
+	 * The feature id for the '<em><b>Parameter Style</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__PARAMETER_STYLE = DB2_ROUTINE__PARAMETER_STYLE;
+
+	/**
+	 * The feature id for the '<em><b>Deterministic</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__DETERMINISTIC = DB2_ROUTINE__DETERMINISTIC;
+
+	/**
+	 * The feature id for the '<em><b>Sql Data Access</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__SQL_DATA_ACCESS = DB2_ROUTINE__SQL_DATA_ACCESS;
+
+	/**
+	 * The feature id for the '<em><b>Creation TS</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__CREATION_TS = DB2_ROUTINE__CREATION_TS;
+
+	/**
+	 * The feature id for the '<em><b>Last Altered TS</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__LAST_ALTERED_TS = DB2_ROUTINE__LAST_ALTERED_TS;
+
+	/**
+	 * The feature id for the '<em><b>Authorization ID</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__AUTHORIZATION_ID = DB2_ROUTINE__AUTHORIZATION_ID;
+
+	/**
+	 * The feature id for the '<em><b>Security</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__SECURITY = DB2_ROUTINE__SECURITY;
+
+	/**
+	 * The feature id for the '<em><b>External Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__EXTERNAL_NAME = DB2_ROUTINE__EXTERNAL_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__PARAMETERS = DB2_ROUTINE__PARAMETERS;
+
+	/**
+	 * The feature id for the '<em><b>Source</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__SOURCE = DB2_ROUTINE__SOURCE;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__SCHEMA = DB2_ROUTINE__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Fenced</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__FENCED = DB2_ROUTINE__FENCED;
+
+	/**
+	 * The feature id for the '<em><b>Threadsafe</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__THREADSAFE = DB2_ROUTINE__THREADSAFE;
+
+	/**
+	 * The feature id for the '<em><b>Db Info</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__DB_INFO = DB2_ROUTINE__DB_INFO;
+
+	/**
+	 * The feature id for the '<em><b>Implicit Schema</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__IMPLICIT_SCHEMA = DB2_ROUTINE__IMPLICIT_SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Federated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__FEDERATED = DB2_ROUTINE__FEDERATED;
+
+	/**
+	 * The feature id for the '<em><b>Parm Ccsid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__PARM_CCSID = DB2_ROUTINE__PARM_CCSID;
+
+	/**
+	 * The feature id for the '<em><b>Special Register</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__SPECIAL_REGISTER = DB2_ROUTINE__SPECIAL_REGISTER;
+
+	/**
+	 * The feature id for the '<em><b>Change State</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__CHANGE_STATE = DB2_ROUTINE__CHANGE_STATE;
+
+	/**
+	 * The feature id for the '<em><b>Debug Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__DEBUG_ID = DB2_ROUTINE__DEBUG_ID;
+
+	/**
+	 * The feature id for the '<em><b>Program Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__PROGRAM_TYPE = DB2_ROUTINE__PROGRAM_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Orig Schema Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__ORIG_SCHEMA_NAME = DB2_ROUTINE__ORIG_SCHEMA_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Orig Parm Sig</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__ORIG_PARM_SIG = DB2_ROUTINE__ORIG_PARM_SIG;
+
+	/**
+	 * The feature id for the '<em><b>Extended Options</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__EXTENDED_OPTIONS = DB2_ROUTINE__EXTENDED_OPTIONS;
+
+	/**
+	 * The feature id for the '<em><b>Routine Extensions</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__ROUTINE_EXTENSIONS = DB2_ROUTINE__ROUTINE_EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Final Call</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__FINAL_CALL = DB2_ROUTINE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Scratch Pad</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__SCRATCH_PAD = DB2_ROUTINE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Scratch Pad Length</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__SCRATCH_PAD_LENGTH = DB2_ROUTINE_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Function Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__FUNCTION_TYPE = DB2_ROUTINE_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Predicate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__PREDICATE = DB2_ROUTINE_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>External Action</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__EXTERNAL_ACTION = DB2_ROUTINE_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Cardinality</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__CARDINALITY = DB2_ROUTINE_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Allow Parallel</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__ALLOW_PARALLEL = DB2_ROUTINE_FEATURE_COUNT + 7;
+
+	/**
+	 * The feature id for the '<em><b>Return Clause</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__RETURN_CLAUSE = DB2_ROUTINE_FEATURE_COUNT + 8;
+
+	/**
+	 * The feature id for the '<em><b>Origin</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__ORIGIN = DB2_ROUTINE_FEATURE_COUNT + 9;
+
+	/**
+	 * The feature id for the '<em><b>Inherit Lock Request</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__INHERIT_LOCK_REQUEST = DB2_ROUTINE_FEATURE_COUNT + 10;
+
+	/**
+	 * The feature id for the '<em><b>Dialect</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__DIALECT = DB2_ROUTINE_FEATURE_COUNT + 11;
+
+	/**
+	 * The feature id for the '<em><b>Inline</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__INLINE = DB2_ROUTINE_FEATURE_COUNT + 12;
+
+	/**
+	 * The feature id for the '<em><b>Version</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__VERSION = DB2_ROUTINE_FEATURE_COUNT + 13;
+
+	/**
+	 * The feature id for the '<em><b>Secured</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION__SECURED = DB2_ROUTINE_FEATURE_COUNT + 14;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Function</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_FUNCTION_FEATURE_COUNT = DB2_ROUTINE_FEATURE_COUNT + 15;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2JavaOptionsImpl <em>DB2 Java Options</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2JavaOptionsImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2JavaOptions()
+	 * @generated
+	 */
+	int DB2_JAVA_OPTIONS = 22;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAVA_OPTIONS__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAVA_OPTIONS__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAVA_OPTIONS__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAVA_OPTIONS__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAVA_OPTIONS__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAVA_OPTIONS__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAVA_OPTIONS__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAVA_OPTIONS__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Class Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAVA_OPTIONS__CLASS_NAME = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Method Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAVA_OPTIONS__METHOD_NAME = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Sqlj</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAVA_OPTIONS__SQLJ = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Procedure</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAVA_OPTIONS__PROCEDURE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Jar</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAVA_OPTIONS__JAR = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 4;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Java Options</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAVA_OPTIONS_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 5;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureDeployImpl <em>DB2 Procedure Deploy</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureDeployImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2ProcedureDeploy()
+	 * @generated
+	 */
+	int DB2_PROCEDURE_DEPLOY = 23;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE_DEPLOY__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE_DEPLOY__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE_DEPLOY__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE_DEPLOY__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE_DEPLOY__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE_DEPLOY__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE_DEPLOY__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE_DEPLOY__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>File Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE_DEPLOY__FILE_NAME = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Procedure Deploy</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PROCEDURE_DEPLOY_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2OLAPObjectImpl <em>DB2OLAP Object</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2OLAPObjectImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2OLAPObject()
+	 * @generated
+	 */
+	int DB2OLAP_OBJECT = 24;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2OLAP_OBJECT__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2OLAP_OBJECT__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2OLAP_OBJECT__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2OLAP_OBJECT__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2OLAP_OBJECT__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2OLAP_OBJECT__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2OLAP_OBJECT__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2OLAP_OBJECT__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2OLAP_OBJECT__SCHEMA = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>DB2OLAP Object</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2OLAP_OBJECT_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2RoutineExtension <em>DB2 Routine Extension</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2RoutineExtension
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2RoutineExtension()
+	 * @generated
+	 */
+	int DB2_ROUTINE_EXTENSION = 25;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE_EXTENSION__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE_EXTENSION__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE_EXTENSION__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE_EXTENSION__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE_EXTENSION__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE_EXTENSION__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE_EXTENSION__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE_EXTENSION__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Routine Extension</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_ROUTINE_EXTENSION_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2IdentitySpecifierImpl <em>DB2 Identity Specifier</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2IdentitySpecifierImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2IdentitySpecifier()
+	 * @generated
+	 */
+	int DB2_IDENTITY_SPECIFIER = 26;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_IDENTITY_SPECIFIER__EANNOTATIONS = SQLSchemaPackage.IDENTITY_SPECIFIER__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_IDENTITY_SPECIFIER__NAME = SQLSchemaPackage.IDENTITY_SPECIFIER__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_IDENTITY_SPECIFIER__DEPENDENCIES = SQLSchemaPackage.IDENTITY_SPECIFIER__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_IDENTITY_SPECIFIER__DESCRIPTION = SQLSchemaPackage.IDENTITY_SPECIFIER__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_IDENTITY_SPECIFIER__LABEL = SQLSchemaPackage.IDENTITY_SPECIFIER__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_IDENTITY_SPECIFIER__COMMENTS = SQLSchemaPackage.IDENTITY_SPECIFIER__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_IDENTITY_SPECIFIER__EXTENSIONS = SQLSchemaPackage.IDENTITY_SPECIFIER__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_IDENTITY_SPECIFIER__PRIVILEGES = SQLSchemaPackage.IDENTITY_SPECIFIER__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Generation Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_IDENTITY_SPECIFIER__GENERATION_TYPE = SQLSchemaPackage.IDENTITY_SPECIFIER__GENERATION_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Start Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_IDENTITY_SPECIFIER__START_VALUE = SQLSchemaPackage.IDENTITY_SPECIFIER__START_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Increment</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_IDENTITY_SPECIFIER__INCREMENT = SQLSchemaPackage.IDENTITY_SPECIFIER__INCREMENT;
+
+	/**
+	 * The feature id for the '<em><b>Minimum</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_IDENTITY_SPECIFIER__MINIMUM = SQLSchemaPackage.IDENTITY_SPECIFIER__MINIMUM;
+
+	/**
+	 * The feature id for the '<em><b>Maximum</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_IDENTITY_SPECIFIER__MAXIMUM = SQLSchemaPackage.IDENTITY_SPECIFIER__MAXIMUM;
+
+	/**
+	 * The feature id for the '<em><b>Cycle Option</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_IDENTITY_SPECIFIER__CYCLE_OPTION = SQLSchemaPackage.IDENTITY_SPECIFIER__CYCLE_OPTION;
+
+	/**
+	 * The feature id for the '<em><b>Cache</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_IDENTITY_SPECIFIER__CACHE = SQLSchemaPackage.IDENTITY_SPECIFIER_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Order</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_IDENTITY_SPECIFIER__ORDER = SQLSchemaPackage.IDENTITY_SPECIFIER_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>System Generated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_IDENTITY_SPECIFIER__SYSTEM_GENERATED = SQLSchemaPackage.IDENTITY_SPECIFIER_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Restart Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_IDENTITY_SPECIFIER__RESTART_VALUE = SQLSchemaPackage.IDENTITY_SPECIFIER_FEATURE_COUNT + 3;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Identity Specifier</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_IDENTITY_SPECIFIER_FEATURE_COUNT = SQLSchemaPackage.IDENTITY_SPECIFIER_FEATURE_COUNT + 4;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2JarImpl <em>DB2 Jar</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2JarImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Jar()
+	 * @generated
+	 */
+	int DB2_JAR = 27;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAR__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAR__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAR__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAR__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAR__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAR__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAR__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAR__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>File Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAR__FILE_NAME = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Path</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAR__PATH = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Owner</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAR__OWNER = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Created TS</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAR__CREATED_TS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Altered TS</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAR__ALTERED_TS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Procedures</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAR__PROCEDURES = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAR__SCHEMA = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 6;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Jar</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_JAR_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 7;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ColumnImpl <em>DB2 Column</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ColumnImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Column()
+	 * @generated
+	 */
+	int DB2_COLUMN = 28;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_COLUMN__EANNOTATIONS = SQLTablesPackage.COLUMN__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_COLUMN__NAME = SQLTablesPackage.COLUMN__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_COLUMN__DEPENDENCIES = SQLTablesPackage.COLUMN__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_COLUMN__DESCRIPTION = SQLTablesPackage.COLUMN__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_COLUMN__LABEL = SQLTablesPackage.COLUMN__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_COLUMN__COMMENTS = SQLTablesPackage.COLUMN__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_COLUMN__EXTENSIONS = SQLTablesPackage.COLUMN__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_COLUMN__PRIVILEGES = SQLTablesPackage.COLUMN__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Contained Type</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_COLUMN__CONTAINED_TYPE = SQLTablesPackage.COLUMN__CONTAINED_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Referenced Type</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_COLUMN__REFERENCED_TYPE = SQLTablesPackage.COLUMN__REFERENCED_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Table</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_COLUMN__TABLE = SQLTablesPackage.COLUMN__TABLE;
+
+	/**
+	 * The feature id for the '<em><b>Identity Specifier</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_COLUMN__IDENTITY_SPECIFIER = SQLTablesPackage.COLUMN__IDENTITY_SPECIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Generate Expression</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_COLUMN__GENERATE_EXPRESSION = SQLTablesPackage.COLUMN__GENERATE_EXPRESSION;
+
+	/**
+	 * The feature id for the '<em><b>Implementation Dependent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_COLUMN__IMPLEMENTATION_DEPENDENT = SQLTablesPackage.COLUMN__IMPLEMENTATION_DEPENDENT;
+
+	/**
+	 * The feature id for the '<em><b>Nullable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_COLUMN__NULLABLE = SQLTablesPackage.COLUMN__NULLABLE;
+
+	/**
+	 * The feature id for the '<em><b>Default Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_COLUMN__DEFAULT_VALUE = SQLTablesPackage.COLUMN__DEFAULT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Scope Check</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_COLUMN__SCOPE_CHECK = SQLTablesPackage.COLUMN__SCOPE_CHECK;
+
+	/**
+	 * The feature id for the '<em><b>Scope Checked</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_COLUMN__SCOPE_CHECKED = SQLTablesPackage.COLUMN__SCOPE_CHECKED;
+
+	/**
+	 * The feature id for the '<em><b>Generation Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_COLUMN__GENERATION_TYPE = SQLTablesPackage.COLUMN_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Row Change Timestamp</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_COLUMN__ROW_CHANGE_TIMESTAMP = SQLTablesPackage.COLUMN_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Row Begin</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_COLUMN__ROW_BEGIN = SQLTablesPackage.COLUMN_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Row End</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_COLUMN__ROW_END = SQLTablesPackage.COLUMN_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Trans Start ID</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_COLUMN__TRANS_START_ID = SQLTablesPackage.COLUMN_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Begin Period</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_COLUMN__BEGIN_PERIOD = SQLTablesPackage.COLUMN_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>End Period</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_COLUMN__END_PERIOD = SQLTablesPackage.COLUMN_FEATURE_COUNT + 6;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Column</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_COLUMN_FEATURE_COUNT = SQLTablesPackage.COLUMN_FEATURE_COUNT + 7;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XSRObjectImpl <em>DB2XSR Object</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XSRObjectImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2XSRObject()
+	 * @generated
+	 */
+	int DB2XSR_OBJECT = 29;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XSR_OBJECT__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XSR_OBJECT__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XSR_OBJECT__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XSR_OBJECT__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XSR_OBJECT__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XSR_OBJECT__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XSR_OBJECT__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XSR_OBJECT__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XSR_OBJECT__SCHEMA = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>DB2XSR Object</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XSR_OBJECT_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XMLSchemaImpl <em>DB2XML Schema</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XMLSchemaImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2XMLSchema()
+	 * @generated
+	 */
+	int DB2XML_SCHEMA = 30;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA__EANNOTATIONS = DB2XSR_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA__NAME = DB2XSR_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA__DEPENDENCIES = DB2XSR_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA__DESCRIPTION = DB2XSR_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA__LABEL = DB2XSR_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA__COMMENTS = DB2XSR_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA__EXTENSIONS = DB2XSR_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA__PRIVILEGES = DB2XSR_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA__SCHEMA = DB2XSR_OBJECT__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Decomposition</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA__DECOMPOSITION = DB2XSR_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Status</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA__STATUS = DB2XSR_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Xml Schema Docs</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA__XML_SCHEMA_DOCS = DB2XSR_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>DB2XML Schema</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA_FEATURE_COUNT = DB2XSR_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XMLSchemaDocumentImpl <em>DB2XML Schema Document</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XMLSchemaDocumentImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2XMLSchemaDocument()
+	 * @generated
+	 */
+	int DB2XML_SCHEMA_DOCUMENT = 31;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA_DOCUMENT__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA_DOCUMENT__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA_DOCUMENT__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA_DOCUMENT__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA_DOCUMENT__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA_DOCUMENT__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA_DOCUMENT__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA_DOCUMENT__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>File Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA_DOCUMENT__FILE_NAME = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Schema Location</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA_DOCUMENT__SCHEMA_LOCATION = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Target Namespace</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA_DOCUMENT__TARGET_NAMESPACE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Primary</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA_DOCUMENT__PRIMARY = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Xml Schema</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA_DOCUMENT__XML_SCHEMA = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Xml Schema Doc Properties</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA_DOCUMENT__XML_SCHEMA_DOC_PROPERTIES = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 5;
+
+	/**
+	 * The number of structural features of the '<em>DB2XML Schema Document</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA_DOCUMENT_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 6;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XMLSchemaDocPropertiesImpl <em>DB2XML Schema Doc Properties</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XMLSchemaDocPropertiesImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2XMLSchemaDocProperties()
+	 * @generated
+	 */
+	int DB2XML_SCHEMA_DOC_PROPERTIES = 32;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA_DOC_PROPERTIES__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA_DOC_PROPERTIES__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA_DOC_PROPERTIES__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA_DOC_PROPERTIES__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA_DOC_PROPERTIES__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA_DOC_PROPERTIES__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA_DOC_PROPERTIES__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA_DOC_PROPERTIES__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA_DOC_PROPERTIES__VALUE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Xml Schema Doc</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA_DOC_PROPERTIES__XML_SCHEMA_DOC = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>DB2XML Schema Doc Properties</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2XML_SCHEMA_DOC_PROPERTIES_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PackageStatementImpl <em>DB2 Package Statement</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PackageStatementImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2PackageStatement()
+	 * @generated
+	 */
+	int DB2_PACKAGE_STATEMENT = 33;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE_STATEMENT__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE_STATEMENT__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE_STATEMENT__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE_STATEMENT__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE_STATEMENT__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE_STATEMENT__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE_STATEMENT__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE_STATEMENT__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Statement Number</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE_STATEMENT__STATEMENT_NUMBER = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Section Number</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE_STATEMENT__SECTION_NUMBER = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Package</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE_STATEMENT__PACKAGE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Sql Statement</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE_STATEMENT__SQL_STATEMENT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Package Statement</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PACKAGE_STATEMENT_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 4;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2DistinctUserDefinedTypeImpl <em>DB2 Distinct User Defined Type</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2DistinctUserDefinedTypeImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2DistinctUserDefinedType()
+	 * @generated
+	 */
+	int DB2_DISTINCT_USER_DEFINED_TYPE = 34;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DISTINCT_USER_DEFINED_TYPE__EANNOTATIONS = SQLDataTypesPackage.DISTINCT_USER_DEFINED_TYPE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DISTINCT_USER_DEFINED_TYPE__NAME = SQLDataTypesPackage.DISTINCT_USER_DEFINED_TYPE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DISTINCT_USER_DEFINED_TYPE__DEPENDENCIES = SQLDataTypesPackage.DISTINCT_USER_DEFINED_TYPE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DISTINCT_USER_DEFINED_TYPE__DESCRIPTION = SQLDataTypesPackage.DISTINCT_USER_DEFINED_TYPE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DISTINCT_USER_DEFINED_TYPE__LABEL = SQLDataTypesPackage.DISTINCT_USER_DEFINED_TYPE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DISTINCT_USER_DEFINED_TYPE__COMMENTS = SQLDataTypesPackage.DISTINCT_USER_DEFINED_TYPE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DISTINCT_USER_DEFINED_TYPE__EXTENSIONS = SQLDataTypesPackage.DISTINCT_USER_DEFINED_TYPE__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DISTINCT_USER_DEFINED_TYPE__PRIVILEGES = SQLDataTypesPackage.DISTINCT_USER_DEFINED_TYPE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DISTINCT_USER_DEFINED_TYPE__SCHEMA = SQLDataTypesPackage.DISTINCT_USER_DEFINED_TYPE__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Ordering</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DISTINCT_USER_DEFINED_TYPE__ORDERING = SQLDataTypesPackage.DISTINCT_USER_DEFINED_TYPE__ORDERING;
+
+	/**
+	 * The feature id for the '<em><b>Predefined Representation</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DISTINCT_USER_DEFINED_TYPE__PREDEFINED_REPRESENTATION = SQLDataTypesPackage.DISTINCT_USER_DEFINED_TYPE__PREDEFINED_REPRESENTATION;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Distinct User Defined Type</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_DISTINCT_USER_DEFINED_TYPE_FEATURE_COUNT = SQLDataTypesPackage.DISTINCT_USER_DEFINED_TYPE_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PeriodImpl <em>DB2 Period</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PeriodImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Period()
+	 * @generated
+	 */
+	int DB2_PERIOD = 35;
+
+	/**
+	 * The feature id for the '<em><b>Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PERIOD__TYPE = 0;
+
+	/**
+	 * The feature id for the '<em><b>Begin Column</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PERIOD__BEGIN_COLUMN = 1;
+
+	/**
+	 * The feature id for the '<em><b>End Column</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PERIOD__END_COLUMN = 2;
+
+	/**
+	 * The feature id for the '<em><b>Table</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PERIOD__TABLE = 3;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Period</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PERIOD_FEATURE_COUNT = 4;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ClusterImpl <em>DB2 Cluster</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ClusterImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Cluster()
+	 * @generated
+	 */
+	int DB2_CLUSTER = 36;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_CLUSTER__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_CLUSTER__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_CLUSTER__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_CLUSTER__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_CLUSTER__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_CLUSTER__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_CLUSTER__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_CLUSTER__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Level</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_CLUSTER__LEVEL = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Instance</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_CLUSTER__INSTANCE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Members</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_CLUSTER__MEMBERS = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Cluster</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_CLUSTER_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MemberImpl <em>DB2 Member</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MemberImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Member()
+	 * @generated
+	 */
+	int DB2_MEMBER = 37;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MEMBER__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MEMBER__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MEMBER__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MEMBER__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MEMBER__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MEMBER__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MEMBER__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MEMBER__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MEMBER__ID = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Home Host</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MEMBER__HOME_HOST = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Current Host</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MEMBER__CURRENT_HOST = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>State</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MEMBER__STATE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Cluster</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MEMBER__CLUSTER = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 4;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Member</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MEMBER_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 5;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UniqueConstraintExtensionImpl <em>DB2 Unique Constraint Extension</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UniqueConstraintExtensionImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2UniqueConstraintExtension()
+	 * @generated
+	 */
+	int DB2_UNIQUE_CONSTRAINT_EXTENSION = 38;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_UNIQUE_CONSTRAINT_EXTENSION__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_UNIQUE_CONSTRAINT_EXTENSION__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_UNIQUE_CONSTRAINT_EXTENSION__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_UNIQUE_CONSTRAINT_EXTENSION__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_UNIQUE_CONSTRAINT_EXTENSION__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_UNIQUE_CONSTRAINT_EXTENSION__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_UNIQUE_CONSTRAINT_EXTENSION__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_UNIQUE_CONSTRAINT_EXTENSION__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>SQL Object</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_UNIQUE_CONSTRAINT_EXTENSION__SQL_OBJECT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Bus Period Without Overlap</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_UNIQUE_CONSTRAINT_EXTENSION__BUS_PERIOD_WITHOUT_OVERLAP = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Unique Constraint Extension</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_UNIQUE_CONSTRAINT_EXTENSION_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MaskImpl <em>DB2 Mask</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MaskImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Mask()
+	 * @generated
+	 */
+	int DB2_MASK = 39;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MASK__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MASK__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MASK__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MASK__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MASK__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MASK__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MASK__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MASK__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Correlation Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MASK__CORRELATION_NAME = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Case Expression</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MASK__CASE_EXPRESSION = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Enable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MASK__ENABLE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MASK__SCHEMA = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Subject Table</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MASK__SUBJECT_TABLE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Subject MQT</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MASK__SUBJECT_MQT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Subject Column</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MASK__SUBJECT_COLUMN = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 6;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Mask</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_MASK_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 7;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PermissionImpl <em>DB2 Permission</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PermissionImpl
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Permission()
+	 * @generated
+	 */
+	int DB2_PERMISSION = 40;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PERMISSION__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PERMISSION__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PERMISSION__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PERMISSION__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PERMISSION__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PERMISSION__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PERMISSION__EXTENSIONS = SQLSchemaPackage.SQL_OBJECT__EXTENSIONS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PERMISSION__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Correlation Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PERMISSION__CORRELATION_NAME = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Search Condition</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PERMISSION__SEARCH_CONDITION = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Enable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PERMISSION__ENABLE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PERMISSION__SCHEMA = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Subject Table</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PERMISSION__SUBJECT_TABLE = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Subject MQT</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PERMISSION__SUBJECT_MQT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 5;
+
+	/**
+	 * The number of structural features of the '<em>DB2 Permission</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DB2_PERMISSION_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 6;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.IsolationLevelType <em>Isolation Level Type</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.IsolationLevelType
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getIsolationLevelType()
+	 * @generated
+	 */
+	int ISOLATION_LEVEL_TYPE = 41;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2IndexType <em>DB2 Index Type</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2IndexType
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2IndexType()
+	 * @generated
+	 */
+	int DB2_INDEX_TYPE = 42;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DataCaptureType <em>Data Capture Type</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DataCaptureType
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDataCaptureType()
+	 * @generated
+	 */
+	int DATA_CAPTURE_TYPE = 43;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.UnitType <em>Unit Type</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.UnitType
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getUnitType()
+	 * @generated
+	 */
+	int UNIT_TYPE = 44;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.GenerateType <em>Generate Type</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.GenerateType
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getGenerateType()
+	 * @generated
+	 */
+	int GENERATE_TYPE = 45;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDecomposition <em>DB2XML Schema Decomposition</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDecomposition
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2XMLSchemaDecomposition()
+	 * @generated
+	 */
+	int DB2XML_SCHEMA_DECOMPOSITION = 46;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaStatus <em>DB2XML Schema Status</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaStatus
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2XMLSchemaStatus()
+	 * @generated
+	 */
+	int DB2XML_SCHEMA_STATUS = 47;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.OriginType <em>Origin Type</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.OriginType
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getOriginType()
+	 * @generated
+	 */
+	int ORIGIN_TYPE = 48;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.ReoptType <em>Reopt Type</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.ReoptType
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getReoptType()
+	 * @generated
+	 */
+	int REOPT_TYPE = 49;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.SourceDialect <em>Source Dialect</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.SourceDialect
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getSourceDialect()
+	 * @generated
+	 */
+	int SOURCE_DIALECT = 50;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2PeriodType <em>DB2 Period Type</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2PeriodType
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2PeriodType()
+	 * @generated
+	 */
+	int DB2_PERIOD_TYPE = 51;
+
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2TableOrganization <em>DB2 Table Organization</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2TableOrganization
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2TableOrganization()
+	 * @generated
+	 */
+	int DB2_TABLE_ORGANIZATION = 52;
+
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Database <em>DB2 Database</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Database</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Database
+	 * @generated
+	 */
+	EClass getDB2Database();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Database#isPartitioned <em>Partitioned</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Partitioned</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Database#isPartitioned()
+	 * @see #getDB2Database()
+	 * @generated
+	 */
+	EAttribute getDB2Database_Partitioned();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Database#isDefaultOrganizeByRow <em>Default Organize By Row</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Default Organize By Row</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Database#isDefaultOrganizeByRow()
+	 * @see #getDB2Database()
+	 * @generated
+	 */
+	EAttribute getDB2Database_DefaultOrganizeByRow();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package <em>DB2 Package</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Package</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Package
+	 * @generated
+	 */
+	EClass getDB2Package();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#isOperative <em>Operative</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Operative</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#isOperative()
+	 * @see #getDB2Package()
+	 * @generated
+	 */
+	EAttribute getDB2Package_Operative();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getValid <em>Valid</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Valid</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getValid()
+	 * @see #getDB2Package()
+	 * @generated
+	 */
+	EAttribute getDB2Package_Valid();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getVersion <em>Version</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Version</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getVersion()
+	 * @see #getDB2Package()
+	 * @generated
+	 */
+	EAttribute getDB2Package_Version();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getDefaultSchema <em>Default Schema</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Default Schema</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getDefaultSchema()
+	 * @see #getDB2Package()
+	 * @generated
+	 */
+	EAttribute getDB2Package_DefaultSchema();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getSqlPath <em>Sql Path</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Sql Path</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getSqlPath()
+	 * @see #getDB2Package()
+	 * @generated
+	 */
+	EAttribute getDB2Package_SqlPath();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getReoptVar <em>Reopt Var</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Reopt Var</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getReoptVar()
+	 * @see #getDB2Package()
+	 * @generated
+	 */
+	EAttribute getDB2Package_ReoptVar();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getIsolation <em>Isolation</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Isolation</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getIsolation()
+	 * @see #getDB2Package()
+	 * @generated
+	 */
+	EAttribute getDB2Package_Isolation();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getUniqueID <em>Unique ID</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Unique ID</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getUniqueID()
+	 * @see #getDB2Package()
+	 * @generated
+	 */
+	EAttribute getDB2Package_UniqueID();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getLastBindTS <em>Last Bind TS</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Last Bind TS</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getLastBindTS()
+	 * @see #getDB2Package()
+	 * @generated
+	 */
+	EAttribute getDB2Package_LastBindTS();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getSchema <em>Schema</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Schema</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getSchema()
+	 * @see #getDB2Package()
+	 * @generated
+	 */
+	EReference getDB2Package_Schema();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getStatements <em>Statements</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Statements</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getStatements()
+	 * @see #getDB2Package()
+	 * @generated
+	 */
+	EReference getDB2Package_Statements();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table <em>DB2 Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Table</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Table
+	 * @generated
+	 */
+	EClass getDB2Table();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getDataCapture <em>Data Capture</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Data Capture</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getDataCapture()
+	 * @see #getDB2Table()
+	 * @generated
+	 */
+	EAttribute getDB2Table_DataCapture();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#isActivateRowAccessControl <em>Activate Row Access Control</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Activate Row Access Control</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#isActivateRowAccessControl()
+	 * @see #getDB2Table()
+	 * @generated
+	 */
+	EAttribute getDB2Table_ActivateRowAccessControl();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#isActivateColumnAccessControl <em>Activate Column Access Control</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Activate Column Access Control</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#isActivateColumnAccessControl()
+	 * @see #getDB2Table()
+	 * @generated
+	 */
+	EAttribute getDB2Table_ActivateColumnAccessControl();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getOrganizeBy <em>Organize By</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Organize By</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getOrganizeBy()
+	 * @see #getDB2Table()
+	 * @generated
+	 */
+	EAttribute getDB2Table_OrganizeBy();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getPackages <em>Packages</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Packages</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getPackages()
+	 * @see #getDB2Table()
+	 * @generated
+	 */
+	EReference getDB2Table_Packages();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getPeriods <em>Periods</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Periods</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getPeriods()
+	 * @see #getDB2Table()
+	 * @generated
+	 */
+	EReference getDB2Table_Periods();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getHistoryTable <em>History Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>History Table</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getHistoryTable()
+	 * @see #getDB2Table()
+	 * @generated
+	 */
+	EReference getDB2Table_HistoryTable();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getTemporalTable <em>Temporal Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Temporal Table</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getTemporalTable()
+	 * @see #getDB2Table()
+	 * @generated
+	 */
+	EReference getDB2Table_TemporalTable();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getMasks <em>Masks</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Masks</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getMasks()
+	 * @see #getDB2Table()
+	 * @generated
+	 */
+	EReference getDB2Table_Masks();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getPermissions <em>Permissions</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Permissions</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getPermissions()
+	 * @see #getDB2Table()
+	 * @generated
+	 */
+	EReference getDB2Table_Permissions();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Trigger <em>DB2 Trigger</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Trigger</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Trigger
+	 * @generated
+	 */
+	EClass getDB2Trigger();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Trigger#isOperative <em>Operative</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Operative</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Trigger#isOperative()
+	 * @see #getDB2Trigger()
+	 * @generated
+	 */
+	EAttribute getDB2Trigger_Operative();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Trigger#isSecured <em>Secured</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Secured</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Trigger#isSecured()
+	 * @see #getDB2Trigger()
+	 * @generated
+	 */
+	EAttribute getDB2Trigger_Secured();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure <em>DB2 Procedure</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Procedure</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure
+	 * @generated
+	 */
+	EClass getDB2Procedure();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#isModelResultSets <em>Model Result Sets</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Model Result Sets</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#isModelResultSets()
+	 * @see #getDB2Procedure()
+	 * @generated
+	 */
+	EAttribute getDB2Procedure_ModelResultSets();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#isNullInput <em>Null Input</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Null Input</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#isNullInput()
+	 * @see #getDB2Procedure()
+	 * @generated
+	 */
+	EAttribute getDB2Procedure_NullInput();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#getVersion <em>Version</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Version</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#getVersion()
+	 * @see #getDB2Procedure()
+	 * @generated
+	 */
+	EAttribute getDB2Procedure_Version();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#getDialect <em>Dialect</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Dialect</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#getDialect()
+	 * @see #getDB2Procedure()
+	 * @generated
+	 */
+	EAttribute getDB2Procedure_Dialect();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#isExternalAction <em>External Action</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>External Action</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#isExternalAction()
+	 * @see #getDB2Procedure()
+	 * @generated
+	 */
+	EAttribute getDB2Procedure_ExternalAction();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#getReturn <em>Return</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Return</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#getReturn()
+	 * @see #getDB2Procedure()
+	 * @generated
+	 */
+	EReference getDB2Procedure_Return();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#getJavaOptions <em>Java Options</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Java Options</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#getJavaOptions()
+	 * @see #getDB2Procedure()
+	 * @generated
+	 */
+	EReference getDB2Procedure_JavaOptions();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#getDeploy <em>Deploy</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Deploy</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#getDeploy()
+	 * @see #getDB2Procedure()
+	 * @generated
+	 */
+	EReference getDB2Procedure_Deploy();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema <em>DB2 Schema</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Schema</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema
+	 * @generated
+	 */
+	EClass getDB2Schema();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getAccessPlans <em>Access Plans</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Access Plans</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getAccessPlans()
+	 * @see #getDB2Schema()
+	 * @generated
+	 */
+	EReference getDB2Schema_AccessPlans();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getOlapObjects <em>Olap Objects</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Olap Objects</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getOlapObjects()
+	 * @see #getDB2Schema()
+	 * @generated
+	 */
+	EReference getDB2Schema_OlapObjects();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getJars <em>Jars</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Jars</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getJars()
+	 * @see #getDB2Schema()
+	 * @generated
+	 */
+	EReference getDB2Schema_Jars();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getXsrObjects <em>Xsr Objects</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Xsr Objects</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getXsrObjects()
+	 * @see #getDB2Schema()
+	 * @generated
+	 */
+	EReference getDB2Schema_XsrObjects();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getPackages <em>Packages</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Packages</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getPackages()
+	 * @see #getDB2Schema()
+	 * @generated
+	 */
+	EReference getDB2Schema_Packages();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getMasks <em>Masks</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Masks</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getMasks()
+	 * @see #getDB2Schema()
+	 * @generated
+	 */
+	EReference getDB2Schema_Masks();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getPermissions <em>Permissions</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Permissions</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getPermissions()
+	 * @see #getDB2Schema()
+	 * @generated
+	 */
+	EReference getDB2Schema_Permissions();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getModules <em>Modules</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Modules</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getModules()
+	 * @see #getDB2Schema()
+	 * @generated
+	 */
+	EReference getDB2Schema_Modules();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getGlobalVariables <em>Global Variables</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Global Variables</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getGlobalVariables()
+	 * @see #getDB2Schema()
+	 * @generated
+	 */
+	EReference getDB2Schema_GlobalVariables();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine <em>DB2 Routine</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Routine</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine
+	 * @generated
+	 */
+	EClass getDB2Routine();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getFenced <em>Fenced</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Fenced</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getFenced()
+	 * @see #getDB2Routine()
+	 * @generated
+	 */
+	EAttribute getDB2Routine_Fenced();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getThreadsafe <em>Threadsafe</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Threadsafe</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getThreadsafe()
+	 * @see #getDB2Routine()
+	 * @generated
+	 */
+	EAttribute getDB2Routine_Threadsafe();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#isDbInfo <em>Db Info</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Db Info</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#isDbInfo()
+	 * @see #getDB2Routine()
+	 * @generated
+	 */
+	EAttribute getDB2Routine_DbInfo();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#isImplicitSchema <em>Implicit Schema</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Implicit Schema</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#isImplicitSchema()
+	 * @see #getDB2Routine()
+	 * @generated
+	 */
+	EAttribute getDB2Routine_ImplicitSchema();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#isFederated <em>Federated</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Federated</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#isFederated()
+	 * @see #getDB2Routine()
+	 * @generated
+	 */
+	EAttribute getDB2Routine_Federated();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getParmCcsid <em>Parm Ccsid</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Parm Ccsid</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getParmCcsid()
+	 * @see #getDB2Routine()
+	 * @generated
+	 */
+	EAttribute getDB2Routine_ParmCcsid();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getSpecialRegister <em>Special Register</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Special Register</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getSpecialRegister()
+	 * @see #getDB2Routine()
+	 * @generated
+	 */
+	EAttribute getDB2Routine_SpecialRegister();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getChangeState <em>Change State</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Change State</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getChangeState()
+	 * @see #getDB2Routine()
+	 * @generated
+	 */
+	EAttribute getDB2Routine_ChangeState();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getDebugId <em>Debug Id</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Debug Id</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getDebugId()
+	 * @see #getDB2Routine()
+	 * @generated
+	 */
+	EAttribute getDB2Routine_DebugId();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getProgramType <em>Program Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Program Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getProgramType()
+	 * @see #getDB2Routine()
+	 * @generated
+	 */
+	EAttribute getDB2Routine_ProgramType();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getOrigSchemaName <em>Orig Schema Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Orig Schema Name</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getOrigSchemaName()
+	 * @see #getDB2Routine()
+	 * @generated
+	 */
+	EAttribute getDB2Routine_OrigSchemaName();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getOrigParmSig <em>Orig Parm Sig</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Orig Parm Sig</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getOrigParmSig()
+	 * @see #getDB2Routine()
+	 * @generated
+	 */
+	EAttribute getDB2Routine_OrigParmSig();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getExtendedOptions <em>Extended Options</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Extended Options</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getExtendedOptions()
+	 * @see #getDB2Routine()
+	 * @generated
+	 */
+	EReference getDB2Routine_ExtendedOptions();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getRoutineExtensions <em>Routine Extensions</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Routine Extensions</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getRoutineExtensions()
+	 * @see #getDB2Routine()
+	 * @generated
+	 */
+	EReference getDB2Routine_RoutineExtensions();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2DatabaseManager <em>DB2 Database Manager</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Database Manager</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2DatabaseManager
+	 * @generated
+	 */
+	EClass getDB2DatabaseManager();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2DatabaseManager#getDatabases <em>Databases</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Databases</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2DatabaseManager#getDatabases()
+	 * @see #getDB2DatabaseManager()
+	 * @generated
+	 */
+	EReference getDB2DatabaseManager_Databases();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2DatabaseManager#getDb2Process <em>Db2 Process</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Db2 Process</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2DatabaseManager#getDb2Process()
+	 * @see #getDB2DatabaseManager()
+	 * @generated
+	 */
+	EReference getDB2DatabaseManager_Db2Process();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2DatabaseManager#getServer <em>Server</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Server</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2DatabaseManager#getServer()
+	 * @see #getDB2DatabaseManager()
+	 * @generated
+	 */
+	EReference getDB2DatabaseManager_Server();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2DatabaseManager#getCluster <em>Cluster</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Cluster</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2DatabaseManager#getCluster()
+	 * @see #getDB2DatabaseManager()
+	 * @generated
+	 */
+	EReference getDB2DatabaseManager_Cluster();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2View <em>DB2 View</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 View</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2View
+	 * @generated
+	 */
+	EClass getDB2View();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2View#isOperative <em>Operative</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Operative</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2View#isOperative()
+	 * @see #getDB2View()
+	 * @generated
+	 */
+	EAttribute getDB2View_Operative();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ApplicationProcess <em>DB2 Application Process</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Application Process</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ApplicationProcess
+	 * @generated
+	 */
+	EClass getDB2ApplicationProcess();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ApplicationProcess#getIsolationLevel <em>Isolation Level</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Isolation Level</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ApplicationProcess#getIsolationLevel()
+	 * @see #getDB2ApplicationProcess()
+	 * @generated
+	 */
+	EAttribute getDB2ApplicationProcess_IsolationLevel();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ApplicationProcess#getUnitOfWork <em>Unit Of Work</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Unit Of Work</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ApplicationProcess#getUnitOfWork()
+	 * @see #getDB2ApplicationProcess()
+	 * @generated
+	 */
+	EReference getDB2ApplicationProcess_UnitOfWork();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Transaction <em>DB2 Transaction</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Transaction</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Transaction
+	 * @generated
+	 */
+	EClass getDB2Transaction();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2SystemSchema <em>DB2 System Schema</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 System Schema</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2SystemSchema
+	 * @generated
+	 */
+	EClass getDB2SystemSchema();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Source <em>DB2 Source</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Source</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Source
+	 * @generated
+	 */
+	EClass getDB2Source();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Source#getFileName <em>File Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>File Name</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Source#getFileName()
+	 * @see #getDB2Source()
+	 * @generated
+	 */
+	EAttribute getDB2Source_FileName();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Source#getPackageName <em>Package Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Package Name</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Source#getPackageName()
+	 * @see #getDB2Source()
+	 * @generated
+	 */
+	EAttribute getDB2Source_PackageName();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Source#getDb2PackageName <em>Db2 Package Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Db2 Package Name</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Source#getDb2PackageName()
+	 * @see #getDB2Source()
+	 * @generated
+	 */
+	EAttribute getDB2Source_Db2PackageName();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Source#getLastModified <em>Last Modified</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Last Modified</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Source#getLastModified()
+	 * @see #getDB2Source()
+	 * @generated
+	 */
+	EAttribute getDB2Source_LastModified();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Source#getSupporting <em>Supporting</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Supporting</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Source#getSupporting()
+	 * @see #getDB2Source()
+	 * @generated
+	 */
+	EReference getDB2Source_Supporting();
+
+	/**
+	 * Returns the meta object for the container reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Source#getPrimary <em>Primary</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the container reference '<em>Primary</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Source#getPrimary()
+	 * @see #getDB2Source()
+	 * @generated
+	 */
+	EReference getDB2Source_Primary();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2AccessPlan <em>DB2 Access Plan</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Access Plan</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2AccessPlan
+	 * @generated
+	 */
+	EClass getDB2AccessPlan();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2UserDefinedFunction <em>DB2 User Defined Function</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 User Defined Function</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2UserDefinedFunction
+	 * @generated
+	 */
+	EClass getDB2UserDefinedFunction();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Method <em>DB2 Method</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Method</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Method
+	 * @generated
+	 */
+	EClass getDB2Method();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Method#isReturnsSelfAsResult <em>Returns Self As Result</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Returns Self As Result</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Method#isReturnsSelfAsResult()
+	 * @see #getDB2Method()
+	 * @generated
+	 */
+	EAttribute getDB2Method_ReturnsSelfAsResult();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Method#isImplemented <em>Implemented</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Implemented</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Method#isImplemented()
+	 * @see #getDB2Method()
+	 * @generated
+	 */
+	EAttribute getDB2Method_Implemented();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions <em>DB2 Extended Options</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Extended Options</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions
+	 * @generated
+	 */
+	EClass getDB2ExtendedOptions();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#getClasspathCompileJars <em>Classpath Compile Jars</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Classpath Compile Jars</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#getClasspathCompileJars()
+	 * @see #getDB2ExtendedOptions()
+	 * @generated
+	 */
+	EAttribute getDB2ExtendedOptions_ClasspathCompileJars();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#getPreCompileOpts <em>Pre Compile Opts</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Pre Compile Opts</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#getPreCompileOpts()
+	 * @see #getDB2ExtendedOptions()
+	 * @generated
+	 */
+	EAttribute getDB2ExtendedOptions_PreCompileOpts();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#isForDebug <em>For Debug</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>For Debug</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#isForDebug()
+	 * @see #getDB2ExtendedOptions()
+	 * @generated
+	 */
+	EAttribute getDB2ExtendedOptions_ForDebug();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#isBuilt <em>Built</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Built</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#isBuilt()
+	 * @see #getDB2ExtendedOptions()
+	 * @generated
+	 */
+	EAttribute getDB2ExtendedOptions_Built();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#getCompileOpts <em>Compile Opts</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Compile Opts</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#getCompileOpts()
+	 * @see #getDB2ExtendedOptions()
+	 * @generated
+	 */
+	EAttribute getDB2ExtendedOptions_CompileOpts();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#getLinkOpts <em>Link Opts</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Link Opts</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#getLinkOpts()
+	 * @see #getDB2ExtendedOptions()
+	 * @generated
+	 */
+	EAttribute getDB2ExtendedOptions_LinkOpts();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#getBindOpts <em>Bind Opts</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Bind Opts</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#getBindOpts()
+	 * @see #getDB2ExtendedOptions()
+	 * @generated
+	 */
+	EAttribute getDB2ExtendedOptions_BindOpts();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#getColid <em>Colid</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Colid</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions#getColid()
+	 * @see #getDB2ExtendedOptions()
+	 * @generated
+	 */
+	EAttribute getDB2ExtendedOptions_Colid();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Alias <em>DB2 Alias</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Alias</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Alias
+	 * @generated
+	 */
+	EClass getDB2Alias();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Alias#getAliasedTable <em>Aliased Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Aliased Table</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Alias#getAliasedTable()
+	 * @see #getDB2Alias()
+	 * @generated
+	 */
+	EReference getDB2Alias_AliasedTable();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable <em>DB2 Materialized Query Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Materialized Query Table</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable
+	 * @generated
+	 */
+	EClass getDB2MaterializedQueryTable();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable#getRefresh <em>Refresh</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Refresh</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable#getRefresh()
+	 * @see #getDB2MaterializedQueryTable()
+	 * @generated
+	 */
+	EAttribute getDB2MaterializedQueryTable_Refresh();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable#isOptimizeQuery <em>Optimize Query</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Optimize Query</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable#isOptimizeQuery()
+	 * @see #getDB2MaterializedQueryTable()
+	 * @generated
+	 */
+	EAttribute getDB2MaterializedQueryTable_OptimizeQuery();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable#getMaintainedBy <em>Maintained By</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Maintained By</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable#getMaintainedBy()
+	 * @see #getDB2MaterializedQueryTable()
+	 * @generated
+	 */
+	EAttribute getDB2MaterializedQueryTable_MaintainedBy();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable#isActivateRowAccessControl <em>Activate Row Access Control</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Activate Row Access Control</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable#isActivateRowAccessControl()
+	 * @see #getDB2MaterializedQueryTable()
+	 * @generated
+	 */
+	EAttribute getDB2MaterializedQueryTable_ActivateRowAccessControl();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable#isActivateColumnAccessControl <em>Activate Column Access Control</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Activate Column Access Control</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable#isActivateColumnAccessControl()
+	 * @see #getDB2MaterializedQueryTable()
+	 * @generated
+	 */
+	EAttribute getDB2MaterializedQueryTable_ActivateColumnAccessControl();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable#getMasks <em>Masks</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Masks</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable#getMasks()
+	 * @see #getDB2MaterializedQueryTable()
+	 * @generated
+	 */
+	EReference getDB2MaterializedQueryTable_Masks();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable#getPermissions <em>Permissions</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Permissions</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable#getPermissions()
+	 * @see #getDB2MaterializedQueryTable()
+	 * @generated
+	 */
+	EReference getDB2MaterializedQueryTable_Permissions();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Index <em>DB2 Index</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Index</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Index
+	 * @generated
+	 */
+	EClass getDB2Index();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Index#getIndexType <em>Index Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Index Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Index#getIndexType()
+	 * @see #getDB2Index()
+	 * @generated
+	 */
+	EAttribute getDB2Index_IndexType();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Index#isBusPeriodWithoutOverlap <em>Bus Period Without Overlap</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Bus Period Without Overlap</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Index#isBusPeriodWithoutOverlap()
+	 * @see #getDB2Index()
+	 * @generated
+	 */
+	EAttribute getDB2Index_BusPeriodWithoutOverlap();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Index#isEncodedVector <em>Encoded Vector</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Encoded Vector</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Index#isEncodedVector()
+	 * @see #getDB2Index()
+	 * @generated
+	 */
+	EAttribute getDB2Index_EncodedVector();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Index#getDB2MultidimensionalIndex <em>DB2 Multidimensional Index</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>DB2 Multidimensional Index</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Index#getDB2MultidimensionalIndex()
+	 * @see #getDB2Index()
+	 * @generated
+	 */
+	EReference getDB2Index_DB2MultidimensionalIndex();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2MultidimensionalIndex <em>DB2 Multidimensional Index</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Multidimensional Index</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2MultidimensionalIndex
+	 * @generated
+	 */
+	EClass getDB2MultidimensionalIndex();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2MultidimensionalIndex#getDimensionIndexes <em>Dimension Indexes</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Dimension Indexes</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2MultidimensionalIndex#getDimensionIndexes()
+	 * @see #getDB2MultidimensionalIndex()
+	 * @generated
+	 */
+	EReference getDB2MultidimensionalIndex_DimensionIndexes();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function <em>DB2 Function</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Function</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Function
+	 * @generated
+	 */
+	EClass getDB2Function();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#isFinalCall <em>Final Call</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Final Call</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#isFinalCall()
+	 * @see #getDB2Function()
+	 * @generated
+	 */
+	EAttribute getDB2Function_FinalCall();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#isScratchPad <em>Scratch Pad</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Scratch Pad</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#isScratchPad()
+	 * @see #getDB2Function()
+	 * @generated
+	 */
+	EAttribute getDB2Function_ScratchPad();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getScratchPadLength <em>Scratch Pad Length</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Scratch Pad Length</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getScratchPadLength()
+	 * @see #getDB2Function()
+	 * @generated
+	 */
+	EAttribute getDB2Function_ScratchPadLength();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getFunctionType <em>Function Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Function Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getFunctionType()
+	 * @see #getDB2Function()
+	 * @generated
+	 */
+	EAttribute getDB2Function_FunctionType();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getPredicate <em>Predicate</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Predicate</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getPredicate()
+	 * @see #getDB2Function()
+	 * @generated
+	 */
+	EAttribute getDB2Function_Predicate();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#isExternalAction <em>External Action</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>External Action</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#isExternalAction()
+	 * @see #getDB2Function()
+	 * @generated
+	 */
+	EAttribute getDB2Function_ExternalAction();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getCardinality <em>Cardinality</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Cardinality</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getCardinality()
+	 * @see #getDB2Function()
+	 * @generated
+	 */
+	EAttribute getDB2Function_Cardinality();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#isAllowParallel <em>Allow Parallel</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Allow Parallel</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#isAllowParallel()
+	 * @see #getDB2Function()
+	 * @generated
+	 */
+	EAttribute getDB2Function_AllowParallel();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getReturnClause <em>Return Clause</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Return Clause</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getReturnClause()
+	 * @see #getDB2Function()
+	 * @generated
+	 */
+	EAttribute getDB2Function_ReturnClause();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getOrigin <em>Origin</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Origin</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getOrigin()
+	 * @see #getDB2Function()
+	 * @generated
+	 */
+	EAttribute getDB2Function_Origin();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#isInheritLockRequest <em>Inherit Lock Request</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Inherit Lock Request</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#isInheritLockRequest()
+	 * @see #getDB2Function()
+	 * @generated
+	 */
+	EAttribute getDB2Function_InheritLockRequest();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getDialect <em>Dialect</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Dialect</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getDialect()
+	 * @see #getDB2Function()
+	 * @generated
+	 */
+	EAttribute getDB2Function_Dialect();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#isInline <em>Inline</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Inline</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#isInline()
+	 * @see #getDB2Function()
+	 * @generated
+	 */
+	EAttribute getDB2Function_Inline();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getVersion <em>Version</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Version</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#getVersion()
+	 * @see #getDB2Function()
+	 * @generated
+	 */
+	EAttribute getDB2Function_Version();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#isSecured <em>Secured</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Secured</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Function#isSecured()
+	 * @see #getDB2Function()
+	 * @generated
+	 */
+	EAttribute getDB2Function_Secured();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions <em>DB2 Java Options</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Java Options</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions
+	 * @generated
+	 */
+	EClass getDB2JavaOptions();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions#getClassName <em>Class Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Class Name</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions#getClassName()
+	 * @see #getDB2JavaOptions()
+	 * @generated
+	 */
+	EAttribute getDB2JavaOptions_ClassName();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions#getMethodName <em>Method Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Method Name</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions#getMethodName()
+	 * @see #getDB2JavaOptions()
+	 * @generated
+	 */
+	EAttribute getDB2JavaOptions_MethodName();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions#isSqlj <em>Sqlj</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Sqlj</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions#isSqlj()
+	 * @see #getDB2JavaOptions()
+	 * @generated
+	 */
+	EAttribute getDB2JavaOptions_Sqlj();
+
+	/**
+	 * Returns the meta object for the container reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions#getProcedure <em>Procedure</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the container reference '<em>Procedure</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions#getProcedure()
+	 * @see #getDB2JavaOptions()
+	 * @generated
+	 */
+	EReference getDB2JavaOptions_Procedure();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions#getJar <em>Jar</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Jar</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions#getJar()
+	 * @see #getDB2JavaOptions()
+	 * @generated
+	 */
+	EReference getDB2JavaOptions_Jar();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ProcedureDeploy <em>DB2 Procedure Deploy</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Procedure Deploy</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ProcedureDeploy
+	 * @generated
+	 */
+	EClass getDB2ProcedureDeploy();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ProcedureDeploy#getFileName <em>File Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>File Name</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ProcedureDeploy#getFileName()
+	 * @see #getDB2ProcedureDeploy()
+	 * @generated
+	 */
+	EAttribute getDB2ProcedureDeploy_FileName();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2OLAPObject <em>DB2OLAP Object</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2OLAP Object</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2OLAPObject
+	 * @generated
+	 */
+	EClass getDB2OLAPObject();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2OLAPObject#getSchema <em>Schema</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Schema</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2OLAPObject#getSchema()
+	 * @see #getDB2OLAPObject()
+	 * @generated
+	 */
+	EReference getDB2OLAPObject_Schema();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2RoutineExtension <em>DB2 Routine Extension</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Routine Extension</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2RoutineExtension
+	 * @generated
+	 */
+	EClass getDB2RoutineExtension();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2IdentitySpecifier <em>DB2 Identity Specifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Identity Specifier</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2IdentitySpecifier
+	 * @generated
+	 */
+	EClass getDB2IdentitySpecifier();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2IdentitySpecifier#getCache <em>Cache</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Cache</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2IdentitySpecifier#getCache()
+	 * @see #getDB2IdentitySpecifier()
+	 * @generated
+	 */
+	EAttribute getDB2IdentitySpecifier_Cache();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2IdentitySpecifier#isOrder <em>Order</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Order</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2IdentitySpecifier#isOrder()
+	 * @see #getDB2IdentitySpecifier()
+	 * @generated
+	 */
+	EAttribute getDB2IdentitySpecifier_Order();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2IdentitySpecifier#isSystemGenerated <em>System Generated</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>System Generated</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2IdentitySpecifier#isSystemGenerated()
+	 * @see #getDB2IdentitySpecifier()
+	 * @generated
+	 */
+	EAttribute getDB2IdentitySpecifier_SystemGenerated();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2IdentitySpecifier#getRestartValue <em>Restart Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Restart Value</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2IdentitySpecifier#getRestartValue()
+	 * @see #getDB2IdentitySpecifier()
+	 * @generated
+	 */
+	EAttribute getDB2IdentitySpecifier_RestartValue();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar <em>DB2 Jar</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Jar</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar
+	 * @generated
+	 */
+	EClass getDB2Jar();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getFileName <em>File Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>File Name</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getFileName()
+	 * @see #getDB2Jar()
+	 * @generated
+	 */
+	EAttribute getDB2Jar_FileName();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getPath <em>Path</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Path</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getPath()
+	 * @see #getDB2Jar()
+	 * @generated
+	 */
+	EAttribute getDB2Jar_Path();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getOwner <em>Owner</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Owner</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getOwner()
+	 * @see #getDB2Jar()
+	 * @generated
+	 */
+	EAttribute getDB2Jar_Owner();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getCreatedTS <em>Created TS</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Created TS</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getCreatedTS()
+	 * @see #getDB2Jar()
+	 * @generated
+	 */
+	EAttribute getDB2Jar_CreatedTS();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getAlteredTS <em>Altered TS</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Altered TS</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getAlteredTS()
+	 * @see #getDB2Jar()
+	 * @generated
+	 */
+	EAttribute getDB2Jar_AlteredTS();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getProcedures <em>Procedures</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Procedures</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getProcedures()
+	 * @see #getDB2Jar()
+	 * @generated
+	 */
+	EReference getDB2Jar_Procedures();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getSchema <em>Schema</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Schema</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getSchema()
+	 * @see #getDB2Jar()
+	 * @generated
+	 */
+	EReference getDB2Jar_Schema();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Column <em>DB2 Column</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Column</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Column
+	 * @generated
+	 */
+	EClass getDB2Column();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#getGenerationType <em>Generation Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Generation Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#getGenerationType()
+	 * @see #getDB2Column()
+	 * @generated
+	 */
+	EAttribute getDB2Column_GenerationType();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#isRowChangeTimestamp <em>Row Change Timestamp</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Row Change Timestamp</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#isRowChangeTimestamp()
+	 * @see #getDB2Column()
+	 * @generated
+	 */
+	EAttribute getDB2Column_RowChangeTimestamp();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#isRowBegin <em>Row Begin</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Row Begin</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#isRowBegin()
+	 * @see #getDB2Column()
+	 * @generated
+	 */
+	EAttribute getDB2Column_RowBegin();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#isRowEnd <em>Row End</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Row End</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#isRowEnd()
+	 * @see #getDB2Column()
+	 * @generated
+	 */
+	EAttribute getDB2Column_RowEnd();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#isTransStartID <em>Trans Start ID</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Trans Start ID</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#isTransStartID()
+	 * @see #getDB2Column()
+	 * @generated
+	 */
+	EAttribute getDB2Column_TransStartID();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#getBeginPeriod <em>Begin Period</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Begin Period</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#getBeginPeriod()
+	 * @see #getDB2Column()
+	 * @generated
+	 */
+	EReference getDB2Column_BeginPeriod();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#getEndPeriod <em>End Period</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>End Period</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#getEndPeriod()
+	 * @see #getDB2Column()
+	 * @generated
+	 */
+	EReference getDB2Column_EndPeriod();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XSRObject <em>DB2XSR Object</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2XSR Object</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XSRObject
+	 * @generated
+	 */
+	EClass getDB2XSRObject();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XSRObject#getSchema <em>Schema</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Schema</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XSRObject#getSchema()
+	 * @see #getDB2XSRObject()
+	 * @generated
+	 */
+	EReference getDB2XSRObject_Schema();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchema <em>DB2XML Schema</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2XML Schema</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchema
+	 * @generated
+	 */
+	EClass getDB2XMLSchema();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchema#getDecomposition <em>Decomposition</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Decomposition</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchema#getDecomposition()
+	 * @see #getDB2XMLSchema()
+	 * @generated
+	 */
+	EAttribute getDB2XMLSchema_Decomposition();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchema#getStatus <em>Status</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Status</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchema#getStatus()
+	 * @see #getDB2XMLSchema()
+	 * @generated
+	 */
+	EAttribute getDB2XMLSchema_Status();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchema#getXmlSchemaDocs <em>Xml Schema Docs</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Xml Schema Docs</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchema#getXmlSchemaDocs()
+	 * @see #getDB2XMLSchema()
+	 * @generated
+	 */
+	EReference getDB2XMLSchema_XmlSchemaDocs();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument <em>DB2XML Schema Document</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2XML Schema Document</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument
+	 * @generated
+	 */
+	EClass getDB2XMLSchemaDocument();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument#getFileName <em>File Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>File Name</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument#getFileName()
+	 * @see #getDB2XMLSchemaDocument()
+	 * @generated
+	 */
+	EAttribute getDB2XMLSchemaDocument_FileName();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument#getSchemaLocation <em>Schema Location</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Schema Location</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument#getSchemaLocation()
+	 * @see #getDB2XMLSchemaDocument()
+	 * @generated
+	 */
+	EAttribute getDB2XMLSchemaDocument_SchemaLocation();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument#getTargetNamespace <em>Target Namespace</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Target Namespace</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument#getTargetNamespace()
+	 * @see #getDB2XMLSchemaDocument()
+	 * @generated
+	 */
+	EAttribute getDB2XMLSchemaDocument_TargetNamespace();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument#isPrimary <em>Primary</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Primary</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument#isPrimary()
+	 * @see #getDB2XMLSchemaDocument()
+	 * @generated
+	 */
+	EAttribute getDB2XMLSchemaDocument_Primary();
+
+	/**
+	 * Returns the meta object for the container reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument#getXmlSchema <em>Xml Schema</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the container reference '<em>Xml Schema</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument#getXmlSchema()
+	 * @see #getDB2XMLSchemaDocument()
+	 * @generated
+	 */
+	EReference getDB2XMLSchemaDocument_XmlSchema();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument#getXmlSchemaDocProperties <em>Xml Schema Doc Properties</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Xml Schema Doc Properties</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument#getXmlSchemaDocProperties()
+	 * @see #getDB2XMLSchemaDocument()
+	 * @generated
+	 */
+	EReference getDB2XMLSchemaDocument_XmlSchemaDocProperties();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocProperties <em>DB2XML Schema Doc Properties</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2XML Schema Doc Properties</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocProperties
+	 * @generated
+	 */
+	EClass getDB2XMLSchemaDocProperties();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocProperties#getValue <em>Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Value</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocProperties#getValue()
+	 * @see #getDB2XMLSchemaDocProperties()
+	 * @generated
+	 */
+	EAttribute getDB2XMLSchemaDocProperties_Value();
+
+	/**
+	 * Returns the meta object for the container reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocProperties#getXmlSchemaDoc <em>Xml Schema Doc</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the container reference '<em>Xml Schema Doc</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocProperties#getXmlSchemaDoc()
+	 * @see #getDB2XMLSchemaDocProperties()
+	 * @generated
+	 */
+	EReference getDB2XMLSchemaDocProperties_XmlSchemaDoc();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2PackageStatement <em>DB2 Package Statement</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Package Statement</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2PackageStatement
+	 * @generated
+	 */
+	EClass getDB2PackageStatement();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2PackageStatement#getStatementNumber <em>Statement Number</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Statement Number</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2PackageStatement#getStatementNumber()
+	 * @see #getDB2PackageStatement()
+	 * @generated
+	 */
+	EAttribute getDB2PackageStatement_StatementNumber();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2PackageStatement#getSectionNumber <em>Section Number</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Section Number</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2PackageStatement#getSectionNumber()
+	 * @see #getDB2PackageStatement()
+	 * @generated
+	 */
+	EAttribute getDB2PackageStatement_SectionNumber();
+
+	/**
+	 * Returns the meta object for the container reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2PackageStatement#getPackage <em>Package</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the container reference '<em>Package</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2PackageStatement#getPackage()
+	 * @see #getDB2PackageStatement()
+	 * @generated
+	 */
+	EReference getDB2PackageStatement_Package();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2PackageStatement#getSqlStatement <em>Sql Statement</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Sql Statement</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2PackageStatement#getSqlStatement()
+	 * @see #getDB2PackageStatement()
+	 * @generated
+	 */
+	EReference getDB2PackageStatement_SqlStatement();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2DistinctUserDefinedType <em>DB2 Distinct User Defined Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Distinct User Defined Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2DistinctUserDefinedType
+	 * @generated
+	 */
+	EClass getDB2DistinctUserDefinedType();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Period <em>DB2 Period</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Period</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Period
+	 * @generated
+	 */
+	EClass getDB2Period();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Period#getType <em>Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Period#getType()
+	 * @see #getDB2Period()
+	 * @generated
+	 */
+	EAttribute getDB2Period_Type();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Period#getBeginColumn <em>Begin Column</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Begin Column</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Period#getBeginColumn()
+	 * @see #getDB2Period()
+	 * @generated
+	 */
+	EReference getDB2Period_BeginColumn();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Period#getEndColumn <em>End Column</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>End Column</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Period#getEndColumn()
+	 * @see #getDB2Period()
+	 * @generated
+	 */
+	EReference getDB2Period_EndColumn();
+
+	/**
+	 * Returns the meta object for the container reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Period#getTable <em>Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the container reference '<em>Table</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Period#getTable()
+	 * @see #getDB2Period()
+	 * @generated
+	 */
+	EReference getDB2Period_Table();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Cluster <em>DB2 Cluster</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Cluster</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Cluster
+	 * @generated
+	 */
+	EClass getDB2Cluster();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Cluster#getLevel <em>Level</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Level</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Cluster#getLevel()
+	 * @see #getDB2Cluster()
+	 * @generated
+	 */
+	EAttribute getDB2Cluster_Level();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Cluster#getInstance <em>Instance</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Instance</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Cluster#getInstance()
+	 * @see #getDB2Cluster()
+	 * @generated
+	 */
+	EReference getDB2Cluster_Instance();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Cluster#getMembers <em>Members</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Members</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Cluster#getMembers()
+	 * @see #getDB2Cluster()
+	 * @generated
+	 */
+	EReference getDB2Cluster_Members();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Member <em>DB2 Member</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Member</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Member
+	 * @generated
+	 */
+	EClass getDB2Member();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Member#getId <em>Id</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Id</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Member#getId()
+	 * @see #getDB2Member()
+	 * @generated
+	 */
+	EAttribute getDB2Member_Id();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Member#getHomeHost <em>Home Host</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Home Host</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Member#getHomeHost()
+	 * @see #getDB2Member()
+	 * @generated
+	 */
+	EAttribute getDB2Member_HomeHost();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Member#getCurrentHost <em>Current Host</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Current Host</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Member#getCurrentHost()
+	 * @see #getDB2Member()
+	 * @generated
+	 */
+	EAttribute getDB2Member_CurrentHost();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Member#getState <em>State</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>State</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Member#getState()
+	 * @see #getDB2Member()
+	 * @generated
+	 */
+	EAttribute getDB2Member_State();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Member#getCluster <em>Cluster</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Cluster</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Member#getCluster()
+	 * @see #getDB2Member()
+	 * @generated
+	 */
+	EReference getDB2Member_Cluster();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2UniqueConstraintExtension <em>DB2 Unique Constraint Extension</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Unique Constraint Extension</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2UniqueConstraintExtension
+	 * @generated
+	 */
+	EClass getDB2UniqueConstraintExtension();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2UniqueConstraintExtension#isBusPeriodWithoutOverlap <em>Bus Period Without Overlap</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Bus Period Without Overlap</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2UniqueConstraintExtension#isBusPeriodWithoutOverlap()
+	 * @see #getDB2UniqueConstraintExtension()
+	 * @generated
+	 */
+	EAttribute getDB2UniqueConstraintExtension_BusPeriodWithoutOverlap();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask <em>DB2 Mask</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Mask</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask
+	 * @generated
+	 */
+	EClass getDB2Mask();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getCorrelationName <em>Correlation Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Correlation Name</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getCorrelationName()
+	 * @see #getDB2Mask()
+	 * @generated
+	 */
+	EAttribute getDB2Mask_CorrelationName();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getCaseExpression <em>Case Expression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Case Expression</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getCaseExpression()
+	 * @see #getDB2Mask()
+	 * @generated
+	 */
+	EReference getDB2Mask_CaseExpression();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#isEnable <em>Enable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Enable</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#isEnable()
+	 * @see #getDB2Mask()
+	 * @generated
+	 */
+	EAttribute getDB2Mask_Enable();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getSchema <em>Schema</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Schema</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getSchema()
+	 * @see #getDB2Mask()
+	 * @generated
+	 */
+	EReference getDB2Mask_Schema();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getSubjectTable <em>Subject Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Subject Table</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getSubjectTable()
+	 * @see #getDB2Mask()
+	 * @generated
+	 */
+	EReference getDB2Mask_SubjectTable();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getSubjectMQT <em>Subject MQT</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Subject MQT</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getSubjectMQT()
+	 * @see #getDB2Mask()
+	 * @generated
+	 */
+	EReference getDB2Mask_SubjectMQT();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getSubjectColumn <em>Subject Column</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Subject Column</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getSubjectColumn()
+	 * @see #getDB2Mask()
+	 * @generated
+	 */
+	EReference getDB2Mask_SubjectColumn();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission <em>DB2 Permission</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>DB2 Permission</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission
+	 * @generated
+	 */
+	EClass getDB2Permission();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#getCorrelationName <em>Correlation Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Correlation Name</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#getCorrelationName()
+	 * @see #getDB2Permission()
+	 * @generated
+	 */
+	EAttribute getDB2Permission_CorrelationName();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#getSearchCondition <em>Search Condition</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Search Condition</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#getSearchCondition()
+	 * @see #getDB2Permission()
+	 * @generated
+	 */
+	EReference getDB2Permission_SearchCondition();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#isEnable <em>Enable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Enable</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#isEnable()
+	 * @see #getDB2Permission()
+	 * @generated
+	 */
+	EAttribute getDB2Permission_Enable();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#getSchema <em>Schema</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Schema</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#getSchema()
+	 * @see #getDB2Permission()
+	 * @generated
+	 */
+	EReference getDB2Permission_Schema();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#getSubjectTable <em>Subject Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Subject Table</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#getSubjectTable()
+	 * @see #getDB2Permission()
+	 * @generated
+	 */
+	EReference getDB2Permission_SubjectTable();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#getSubjectMQT <em>Subject MQT</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Subject MQT</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#getSubjectMQT()
+	 * @see #getDB2Permission()
+	 * @generated
+	 */
+	EReference getDB2Permission_SubjectMQT();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.model.IsolationLevelType <em>Isolation Level Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Isolation Level Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.IsolationLevelType
+	 * @generated
+	 */
+	EEnum getIsolationLevelType();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2IndexType <em>DB2 Index Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>DB2 Index Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2IndexType
+	 * @generated
+	 */
+	EEnum getDB2IndexType();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.model.DataCaptureType <em>Data Capture Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Data Capture Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DataCaptureType
+	 * @generated
+	 */
+	EEnum getDataCaptureType();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.model.UnitType <em>Unit Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Unit Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.UnitType
+	 * @generated
+	 */
+	EEnum getUnitType();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.model.GenerateType <em>Generate Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Generate Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.GenerateType
+	 * @generated
+	 */
+	EEnum getGenerateType();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDecomposition <em>DB2XML Schema Decomposition</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>DB2XML Schema Decomposition</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDecomposition
+	 * @generated
+	 */
+	EEnum getDB2XMLSchemaDecomposition();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaStatus <em>DB2XML Schema Status</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>DB2XML Schema Status</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaStatus
+	 * @generated
+	 */
+	EEnum getDB2XMLSchemaStatus();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.model.OriginType <em>Origin Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Origin Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.OriginType
+	 * @generated
+	 */
+	EEnum getOriginType();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.model.ReoptType <em>Reopt Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Reopt Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.ReoptType
+	 * @generated
+	 */
+	EEnum getReoptType();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.model.SourceDialect <em>Source Dialect</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Source Dialect</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.SourceDialect
+	 * @generated
+	 */
+	EEnum getSourceDialect();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2PeriodType <em>DB2 Period Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>DB2 Period Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2PeriodType
+	 * @generated
+	 */
+	EEnum getDB2PeriodType();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2TableOrganization <em>DB2 Table Organization</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>DB2 Table Organization</em>'.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2TableOrganization
+	 * @generated
+	 */
+	EEnum getDB2TableOrganization();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	DB2ModelFactory getDB2ModelFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2DatabaseImpl <em>DB2 Database</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2DatabaseImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Database()
+		 * @generated
+		 */
+		EClass DB2_DATABASE = eINSTANCE.getDB2Database();
+
+		/**
+		 * The meta object literal for the '<em><b>Partitioned</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_DATABASE__PARTITIONED = eINSTANCE.getDB2Database_Partitioned();
+
+		/**
+		 * The meta object literal for the '<em><b>Default Organize By Row</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_DATABASE__DEFAULT_ORGANIZE_BY_ROW = eINSTANCE.getDB2Database_DefaultOrganizeByRow();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PackageImpl <em>DB2 Package</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PackageImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Package()
+		 * @generated
+		 */
+		EClass DB2_PACKAGE = eINSTANCE.getDB2Package();
+
+		/**
+		 * The meta object literal for the '<em><b>Operative</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_PACKAGE__OPERATIVE = eINSTANCE.getDB2Package_Operative();
+
+		/**
+		 * The meta object literal for the '<em><b>Valid</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_PACKAGE__VALID = eINSTANCE.getDB2Package_Valid();
+
+		/**
+		 * The meta object literal for the '<em><b>Version</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_PACKAGE__VERSION = eINSTANCE.getDB2Package_Version();
+
+		/**
+		 * The meta object literal for the '<em><b>Default Schema</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_PACKAGE__DEFAULT_SCHEMA = eINSTANCE.getDB2Package_DefaultSchema();
+
+		/**
+		 * The meta object literal for the '<em><b>Sql Path</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_PACKAGE__SQL_PATH = eINSTANCE.getDB2Package_SqlPath();
+
+		/**
+		 * The meta object literal for the '<em><b>Reopt Var</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_PACKAGE__REOPT_VAR = eINSTANCE.getDB2Package_ReoptVar();
+
+		/**
+		 * The meta object literal for the '<em><b>Isolation</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_PACKAGE__ISOLATION = eINSTANCE.getDB2Package_Isolation();
+
+		/**
+		 * The meta object literal for the '<em><b>Unique ID</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_PACKAGE__UNIQUE_ID = eINSTANCE.getDB2Package_UniqueID();
+
+		/**
+		 * The meta object literal for the '<em><b>Last Bind TS</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_PACKAGE__LAST_BIND_TS = eINSTANCE.getDB2Package_LastBindTS();
+
+		/**
+		 * The meta object literal for the '<em><b>Schema</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_PACKAGE__SCHEMA = eINSTANCE.getDB2Package_Schema();
+
+		/**
+		 * The meta object literal for the '<em><b>Statements</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_PACKAGE__STATEMENTS = eINSTANCE.getDB2Package_Statements();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2TableImpl <em>DB2 Table</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2TableImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Table()
+		 * @generated
+		 */
+		EClass DB2_TABLE = eINSTANCE.getDB2Table();
+
+		/**
+		 * The meta object literal for the '<em><b>Data Capture</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_TABLE__DATA_CAPTURE = eINSTANCE.getDB2Table_DataCapture();
+
+		/**
+		 * The meta object literal for the '<em><b>Activate Row Access Control</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_TABLE__ACTIVATE_ROW_ACCESS_CONTROL = eINSTANCE.getDB2Table_ActivateRowAccessControl();
+
+		/**
+		 * The meta object literal for the '<em><b>Activate Column Access Control</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_TABLE__ACTIVATE_COLUMN_ACCESS_CONTROL = eINSTANCE.getDB2Table_ActivateColumnAccessControl();
+
+		/**
+		 * The meta object literal for the '<em><b>Organize By</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_TABLE__ORGANIZE_BY = eINSTANCE.getDB2Table_OrganizeBy();
+
+		/**
+		 * The meta object literal for the '<em><b>Packages</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_TABLE__PACKAGES = eINSTANCE.getDB2Table_Packages();
+
+		/**
+		 * The meta object literal for the '<em><b>Periods</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_TABLE__PERIODS = eINSTANCE.getDB2Table_Periods();
+
+		/**
+		 * The meta object literal for the '<em><b>History Table</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_TABLE__HISTORY_TABLE = eINSTANCE.getDB2Table_HistoryTable();
+
+		/**
+		 * The meta object literal for the '<em><b>Temporal Table</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_TABLE__TEMPORAL_TABLE = eINSTANCE.getDB2Table_TemporalTable();
+
+		/**
+		 * The meta object literal for the '<em><b>Masks</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_TABLE__MASKS = eINSTANCE.getDB2Table_Masks();
+
+		/**
+		 * The meta object literal for the '<em><b>Permissions</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_TABLE__PERMISSIONS = eINSTANCE.getDB2Table_Permissions();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2TriggerImpl <em>DB2 Trigger</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2TriggerImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Trigger()
+		 * @generated
+		 */
+		EClass DB2_TRIGGER = eINSTANCE.getDB2Trigger();
+
+		/**
+		 * The meta object literal for the '<em><b>Operative</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_TRIGGER__OPERATIVE = eINSTANCE.getDB2Trigger_Operative();
+
+		/**
+		 * The meta object literal for the '<em><b>Secured</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_TRIGGER__SECURED = eINSTANCE.getDB2Trigger_Secured();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureImpl <em>DB2 Procedure</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Procedure()
+		 * @generated
+		 */
+		EClass DB2_PROCEDURE = eINSTANCE.getDB2Procedure();
+
+		/**
+		 * The meta object literal for the '<em><b>Model Result Sets</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_PROCEDURE__MODEL_RESULT_SETS = eINSTANCE.getDB2Procedure_ModelResultSets();
+
+		/**
+		 * The meta object literal for the '<em><b>Null Input</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_PROCEDURE__NULL_INPUT = eINSTANCE.getDB2Procedure_NullInput();
+
+		/**
+		 * The meta object literal for the '<em><b>Version</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_PROCEDURE__VERSION = eINSTANCE.getDB2Procedure_Version();
+
+		/**
+		 * The meta object literal for the '<em><b>Dialect</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_PROCEDURE__DIALECT = eINSTANCE.getDB2Procedure_Dialect();
+
+		/**
+		 * The meta object literal for the '<em><b>External Action</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_PROCEDURE__EXTERNAL_ACTION = eINSTANCE.getDB2Procedure_ExternalAction();
+
+		/**
+		 * The meta object literal for the '<em><b>Return</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_PROCEDURE__RETURN = eINSTANCE.getDB2Procedure_Return();
+
+		/**
+		 * The meta object literal for the '<em><b>Java Options</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_PROCEDURE__JAVA_OPTIONS = eINSTANCE.getDB2Procedure_JavaOptions();
+
+		/**
+		 * The meta object literal for the '<em><b>Deploy</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_PROCEDURE__DEPLOY = eINSTANCE.getDB2Procedure_Deploy();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2SchemaImpl <em>DB2 Schema</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2SchemaImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Schema()
+		 * @generated
+		 */
+		EClass DB2_SCHEMA = eINSTANCE.getDB2Schema();
+
+		/**
+		 * The meta object literal for the '<em><b>Access Plans</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_SCHEMA__ACCESS_PLANS = eINSTANCE.getDB2Schema_AccessPlans();
+
+		/**
+		 * The meta object literal for the '<em><b>Olap Objects</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_SCHEMA__OLAP_OBJECTS = eINSTANCE.getDB2Schema_OlapObjects();
+
+		/**
+		 * The meta object literal for the '<em><b>Jars</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_SCHEMA__JARS = eINSTANCE.getDB2Schema_Jars();
+
+		/**
+		 * The meta object literal for the '<em><b>Xsr Objects</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_SCHEMA__XSR_OBJECTS = eINSTANCE.getDB2Schema_XsrObjects();
+
+		/**
+		 * The meta object literal for the '<em><b>Packages</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_SCHEMA__PACKAGES = eINSTANCE.getDB2Schema_Packages();
+
+		/**
+		 * The meta object literal for the '<em><b>Masks</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_SCHEMA__MASKS = eINSTANCE.getDB2Schema_Masks();
+
+		/**
+		 * The meta object literal for the '<em><b>Permissions</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_SCHEMA__PERMISSIONS = eINSTANCE.getDB2Schema_Permissions();
+
+		/**
+		 * The meta object literal for the '<em><b>Modules</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_SCHEMA__MODULES = eINSTANCE.getDB2Schema_Modules();
+
+		/**
+		 * The meta object literal for the '<em><b>Global Variables</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_SCHEMA__GLOBAL_VARIABLES = eINSTANCE.getDB2Schema_GlobalVariables();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine <em>DB2 Routine</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Routine()
+		 * @generated
+		 */
+		EClass DB2_ROUTINE = eINSTANCE.getDB2Routine();
+
+		/**
+		 * The meta object literal for the '<em><b>Fenced</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_ROUTINE__FENCED = eINSTANCE.getDB2Routine_Fenced();
+
+		/**
+		 * The meta object literal for the '<em><b>Threadsafe</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_ROUTINE__THREADSAFE = eINSTANCE.getDB2Routine_Threadsafe();
+
+		/**
+		 * The meta object literal for the '<em><b>Db Info</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_ROUTINE__DB_INFO = eINSTANCE.getDB2Routine_DbInfo();
+
+		/**
+		 * The meta object literal for the '<em><b>Implicit Schema</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_ROUTINE__IMPLICIT_SCHEMA = eINSTANCE.getDB2Routine_ImplicitSchema();
+
+		/**
+		 * The meta object literal for the '<em><b>Federated</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_ROUTINE__FEDERATED = eINSTANCE.getDB2Routine_Federated();
+
+		/**
+		 * The meta object literal for the '<em><b>Parm Ccsid</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_ROUTINE__PARM_CCSID = eINSTANCE.getDB2Routine_ParmCcsid();
+
+		/**
+		 * The meta object literal for the '<em><b>Special Register</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_ROUTINE__SPECIAL_REGISTER = eINSTANCE.getDB2Routine_SpecialRegister();
+
+		/**
+		 * The meta object literal for the '<em><b>Change State</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_ROUTINE__CHANGE_STATE = eINSTANCE.getDB2Routine_ChangeState();
+
+		/**
+		 * The meta object literal for the '<em><b>Debug Id</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_ROUTINE__DEBUG_ID = eINSTANCE.getDB2Routine_DebugId();
+
+		/**
+		 * The meta object literal for the '<em><b>Program Type</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_ROUTINE__PROGRAM_TYPE = eINSTANCE.getDB2Routine_ProgramType();
+
+		/**
+		 * The meta object literal for the '<em><b>Orig Schema Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_ROUTINE__ORIG_SCHEMA_NAME = eINSTANCE.getDB2Routine_OrigSchemaName();
+
+		/**
+		 * The meta object literal for the '<em><b>Orig Parm Sig</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_ROUTINE__ORIG_PARM_SIG = eINSTANCE.getDB2Routine_OrigParmSig();
+
+		/**
+		 * The meta object literal for the '<em><b>Extended Options</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_ROUTINE__EXTENDED_OPTIONS = eINSTANCE.getDB2Routine_ExtendedOptions();
+
+		/**
+		 * The meta object literal for the '<em><b>Routine Extensions</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_ROUTINE__ROUTINE_EXTENSIONS = eINSTANCE.getDB2Routine_RoutineExtensions();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2DatabaseManagerImpl <em>DB2 Database Manager</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2DatabaseManagerImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2DatabaseManager()
+		 * @generated
+		 */
+		EClass DB2_DATABASE_MANAGER = eINSTANCE.getDB2DatabaseManager();
+
+		/**
+		 * The meta object literal for the '<em><b>Databases</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_DATABASE_MANAGER__DATABASES = eINSTANCE.getDB2DatabaseManager_Databases();
+
+		/**
+		 * The meta object literal for the '<em><b>Db2 Process</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_DATABASE_MANAGER__DB2_PROCESS = eINSTANCE.getDB2DatabaseManager_Db2Process();
+
+		/**
+		 * The meta object literal for the '<em><b>Server</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_DATABASE_MANAGER__SERVER = eINSTANCE.getDB2DatabaseManager_Server();
+
+		/**
+		 * The meta object literal for the '<em><b>Cluster</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_DATABASE_MANAGER__CLUSTER = eINSTANCE.getDB2DatabaseManager_Cluster();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ViewImpl <em>DB2 View</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ViewImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2View()
+		 * @generated
+		 */
+		EClass DB2_VIEW = eINSTANCE.getDB2View();
+
+		/**
+		 * The meta object literal for the '<em><b>Operative</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_VIEW__OPERATIVE = eINSTANCE.getDB2View_Operative();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ApplicationProcessImpl <em>DB2 Application Process</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ApplicationProcessImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2ApplicationProcess()
+		 * @generated
+		 */
+		EClass DB2_APPLICATION_PROCESS = eINSTANCE.getDB2ApplicationProcess();
+
+		/**
+		 * The meta object literal for the '<em><b>Isolation Level</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_APPLICATION_PROCESS__ISOLATION_LEVEL = eINSTANCE.getDB2ApplicationProcess_IsolationLevel();
+
+		/**
+		 * The meta object literal for the '<em><b>Unit Of Work</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_APPLICATION_PROCESS__UNIT_OF_WORK = eINSTANCE.getDB2ApplicationProcess_UnitOfWork();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2TransactionImpl <em>DB2 Transaction</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2TransactionImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Transaction()
+		 * @generated
+		 */
+		EClass DB2_TRANSACTION = eINSTANCE.getDB2Transaction();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2SystemSchemaImpl <em>DB2 System Schema</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2SystemSchemaImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2SystemSchema()
+		 * @generated
+		 */
+		EClass DB2_SYSTEM_SCHEMA = eINSTANCE.getDB2SystemSchema();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2SourceImpl <em>DB2 Source</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2SourceImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Source()
+		 * @generated
+		 */
+		EClass DB2_SOURCE = eINSTANCE.getDB2Source();
+
+		/**
+		 * The meta object literal for the '<em><b>File Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_SOURCE__FILE_NAME = eINSTANCE.getDB2Source_FileName();
+
+		/**
+		 * The meta object literal for the '<em><b>Package Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_SOURCE__PACKAGE_NAME = eINSTANCE.getDB2Source_PackageName();
+
+		/**
+		 * The meta object literal for the '<em><b>Db2 Package Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_SOURCE__DB2_PACKAGE_NAME = eINSTANCE.getDB2Source_Db2PackageName();
+
+		/**
+		 * The meta object literal for the '<em><b>Last Modified</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_SOURCE__LAST_MODIFIED = eINSTANCE.getDB2Source_LastModified();
+
+		/**
+		 * The meta object literal for the '<em><b>Supporting</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_SOURCE__SUPPORTING = eINSTANCE.getDB2Source_Supporting();
+
+		/**
+		 * The meta object literal for the '<em><b>Primary</b></em>' container reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_SOURCE__PRIMARY = eINSTANCE.getDB2Source_Primary();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2AccessPlan <em>DB2 Access Plan</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2AccessPlan
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2AccessPlan()
+		 * @generated
+		 */
+		EClass DB2_ACCESS_PLAN = eINSTANCE.getDB2AccessPlan();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl <em>DB2 User Defined Function</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2UserDefinedFunction()
+		 * @generated
+		 */
+		EClass DB2_USER_DEFINED_FUNCTION = eINSTANCE.getDB2UserDefinedFunction();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl <em>DB2 Method</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Method()
+		 * @generated
+		 */
+		EClass DB2_METHOD = eINSTANCE.getDB2Method();
+
+		/**
+		 * The meta object literal for the '<em><b>Returns Self As Result</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_METHOD__RETURNS_SELF_AS_RESULT = eINSTANCE.getDB2Method_ReturnsSelfAsResult();
+
+		/**
+		 * The meta object literal for the '<em><b>Implemented</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_METHOD__IMPLEMENTED = eINSTANCE.getDB2Method_Implemented();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ExtendedOptionsImpl <em>DB2 Extended Options</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ExtendedOptionsImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2ExtendedOptions()
+		 * @generated
+		 */
+		EClass DB2_EXTENDED_OPTIONS = eINSTANCE.getDB2ExtendedOptions();
+
+		/**
+		 * The meta object literal for the '<em><b>Classpath Compile Jars</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_EXTENDED_OPTIONS__CLASSPATH_COMPILE_JARS = eINSTANCE.getDB2ExtendedOptions_ClasspathCompileJars();
+
+		/**
+		 * The meta object literal for the '<em><b>Pre Compile Opts</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_EXTENDED_OPTIONS__PRE_COMPILE_OPTS = eINSTANCE.getDB2ExtendedOptions_PreCompileOpts();
+
+		/**
+		 * The meta object literal for the '<em><b>For Debug</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_EXTENDED_OPTIONS__FOR_DEBUG = eINSTANCE.getDB2ExtendedOptions_ForDebug();
+
+		/**
+		 * The meta object literal for the '<em><b>Built</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_EXTENDED_OPTIONS__BUILT = eINSTANCE.getDB2ExtendedOptions_Built();
+
+		/**
+		 * The meta object literal for the '<em><b>Compile Opts</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_EXTENDED_OPTIONS__COMPILE_OPTS = eINSTANCE.getDB2ExtendedOptions_CompileOpts();
+
+		/**
+		 * The meta object literal for the '<em><b>Link Opts</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_EXTENDED_OPTIONS__LINK_OPTS = eINSTANCE.getDB2ExtendedOptions_LinkOpts();
+
+		/**
+		 * The meta object literal for the '<em><b>Bind Opts</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_EXTENDED_OPTIONS__BIND_OPTS = eINSTANCE.getDB2ExtendedOptions_BindOpts();
+
+		/**
+		 * The meta object literal for the '<em><b>Colid</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_EXTENDED_OPTIONS__COLID = eINSTANCE.getDB2ExtendedOptions_Colid();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2AliasImpl <em>DB2 Alias</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2AliasImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Alias()
+		 * @generated
+		 */
+		EClass DB2_ALIAS = eINSTANCE.getDB2Alias();
+
+		/**
+		 * The meta object literal for the '<em><b>Aliased Table</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_ALIAS__ALIASED_TABLE = eINSTANCE.getDB2Alias_AliasedTable();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MaterializedQueryTableImpl <em>DB2 Materialized Query Table</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MaterializedQueryTableImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2MaterializedQueryTable()
+		 * @generated
+		 */
+		EClass DB2_MATERIALIZED_QUERY_TABLE = eINSTANCE.getDB2MaterializedQueryTable();
+
+		/**
+		 * The meta object literal for the '<em><b>Refresh</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_MATERIALIZED_QUERY_TABLE__REFRESH = eINSTANCE.getDB2MaterializedQueryTable_Refresh();
+
+		/**
+		 * The meta object literal for the '<em><b>Optimize Query</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_MATERIALIZED_QUERY_TABLE__OPTIMIZE_QUERY = eINSTANCE.getDB2MaterializedQueryTable_OptimizeQuery();
+
+		/**
+		 * The meta object literal for the '<em><b>Maintained By</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_MATERIALIZED_QUERY_TABLE__MAINTAINED_BY = eINSTANCE.getDB2MaterializedQueryTable_MaintainedBy();
+
+		/**
+		 * The meta object literal for the '<em><b>Activate Row Access Control</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_MATERIALIZED_QUERY_TABLE__ACTIVATE_ROW_ACCESS_CONTROL = eINSTANCE.getDB2MaterializedQueryTable_ActivateRowAccessControl();
+
+		/**
+		 * The meta object literal for the '<em><b>Activate Column Access Control</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_MATERIALIZED_QUERY_TABLE__ACTIVATE_COLUMN_ACCESS_CONTROL = eINSTANCE.getDB2MaterializedQueryTable_ActivateColumnAccessControl();
+
+		/**
+		 * The meta object literal for the '<em><b>Masks</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_MATERIALIZED_QUERY_TABLE__MASKS = eINSTANCE.getDB2MaterializedQueryTable_Masks();
+
+		/**
+		 * The meta object literal for the '<em><b>Permissions</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_MATERIALIZED_QUERY_TABLE__PERMISSIONS = eINSTANCE.getDB2MaterializedQueryTable_Permissions();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2IndexImpl <em>DB2 Index</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2IndexImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Index()
+		 * @generated
+		 */
+		EClass DB2_INDEX = eINSTANCE.getDB2Index();
+
+		/**
+		 * The meta object literal for the '<em><b>Index Type</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_INDEX__INDEX_TYPE = eINSTANCE.getDB2Index_IndexType();
+
+		/**
+		 * The meta object literal for the '<em><b>Bus Period Without Overlap</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_INDEX__BUS_PERIOD_WITHOUT_OVERLAP = eINSTANCE.getDB2Index_BusPeriodWithoutOverlap();
+
+		/**
+		 * The meta object literal for the '<em><b>Encoded Vector</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_INDEX__ENCODED_VECTOR = eINSTANCE.getDB2Index_EncodedVector();
+
+		/**
+		 * The meta object literal for the '<em><b>DB2 Multidimensional Index</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_INDEX__DB2_MULTIDIMENSIONAL_INDEX = eINSTANCE.getDB2Index_DB2MultidimensionalIndex();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MultidimensionalIndexImpl <em>DB2 Multidimensional Index</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MultidimensionalIndexImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2MultidimensionalIndex()
+		 * @generated
+		 */
+		EClass DB2_MULTIDIMENSIONAL_INDEX = eINSTANCE.getDB2MultidimensionalIndex();
+
+		/**
+		 * The meta object literal for the '<em><b>Dimension Indexes</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_MULTIDIMENSIONAL_INDEX__DIMENSION_INDEXES = eINSTANCE.getDB2MultidimensionalIndex_DimensionIndexes();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Function <em>DB2 Function</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Function
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Function()
+		 * @generated
+		 */
+		EClass DB2_FUNCTION = eINSTANCE.getDB2Function();
+
+		/**
+		 * The meta object literal for the '<em><b>Final Call</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_FUNCTION__FINAL_CALL = eINSTANCE.getDB2Function_FinalCall();
+
+		/**
+		 * The meta object literal for the '<em><b>Scratch Pad</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_FUNCTION__SCRATCH_PAD = eINSTANCE.getDB2Function_ScratchPad();
+
+		/**
+		 * The meta object literal for the '<em><b>Scratch Pad Length</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_FUNCTION__SCRATCH_PAD_LENGTH = eINSTANCE.getDB2Function_ScratchPadLength();
+
+		/**
+		 * The meta object literal for the '<em><b>Function Type</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_FUNCTION__FUNCTION_TYPE = eINSTANCE.getDB2Function_FunctionType();
+
+		/**
+		 * The meta object literal for the '<em><b>Predicate</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_FUNCTION__PREDICATE = eINSTANCE.getDB2Function_Predicate();
+
+		/**
+		 * The meta object literal for the '<em><b>External Action</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_FUNCTION__EXTERNAL_ACTION = eINSTANCE.getDB2Function_ExternalAction();
+
+		/**
+		 * The meta object literal for the '<em><b>Cardinality</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_FUNCTION__CARDINALITY = eINSTANCE.getDB2Function_Cardinality();
+
+		/**
+		 * The meta object literal for the '<em><b>Allow Parallel</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_FUNCTION__ALLOW_PARALLEL = eINSTANCE.getDB2Function_AllowParallel();
+
+		/**
+		 * The meta object literal for the '<em><b>Return Clause</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_FUNCTION__RETURN_CLAUSE = eINSTANCE.getDB2Function_ReturnClause();
+
+		/**
+		 * The meta object literal for the '<em><b>Origin</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_FUNCTION__ORIGIN = eINSTANCE.getDB2Function_Origin();
+
+		/**
+		 * The meta object literal for the '<em><b>Inherit Lock Request</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_FUNCTION__INHERIT_LOCK_REQUEST = eINSTANCE.getDB2Function_InheritLockRequest();
+
+		/**
+		 * The meta object literal for the '<em><b>Dialect</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_FUNCTION__DIALECT = eINSTANCE.getDB2Function_Dialect();
+
+		/**
+		 * The meta object literal for the '<em><b>Inline</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_FUNCTION__INLINE = eINSTANCE.getDB2Function_Inline();
+
+		/**
+		 * The meta object literal for the '<em><b>Version</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_FUNCTION__VERSION = eINSTANCE.getDB2Function_Version();
+
+		/**
+		 * The meta object literal for the '<em><b>Secured</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_FUNCTION__SECURED = eINSTANCE.getDB2Function_Secured();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2JavaOptionsImpl <em>DB2 Java Options</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2JavaOptionsImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2JavaOptions()
+		 * @generated
+		 */
+		EClass DB2_JAVA_OPTIONS = eINSTANCE.getDB2JavaOptions();
+
+		/**
+		 * The meta object literal for the '<em><b>Class Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_JAVA_OPTIONS__CLASS_NAME = eINSTANCE.getDB2JavaOptions_ClassName();
+
+		/**
+		 * The meta object literal for the '<em><b>Method Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_JAVA_OPTIONS__METHOD_NAME = eINSTANCE.getDB2JavaOptions_MethodName();
+
+		/**
+		 * The meta object literal for the '<em><b>Sqlj</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_JAVA_OPTIONS__SQLJ = eINSTANCE.getDB2JavaOptions_Sqlj();
+
+		/**
+		 * The meta object literal for the '<em><b>Procedure</b></em>' container reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_JAVA_OPTIONS__PROCEDURE = eINSTANCE.getDB2JavaOptions_Procedure();
+
+		/**
+		 * The meta object literal for the '<em><b>Jar</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_JAVA_OPTIONS__JAR = eINSTANCE.getDB2JavaOptions_Jar();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureDeployImpl <em>DB2 Procedure Deploy</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureDeployImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2ProcedureDeploy()
+		 * @generated
+		 */
+		EClass DB2_PROCEDURE_DEPLOY = eINSTANCE.getDB2ProcedureDeploy();
+
+		/**
+		 * The meta object literal for the '<em><b>File Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_PROCEDURE_DEPLOY__FILE_NAME = eINSTANCE.getDB2ProcedureDeploy_FileName();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2OLAPObjectImpl <em>DB2OLAP Object</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2OLAPObjectImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2OLAPObject()
+		 * @generated
+		 */
+		EClass DB2OLAP_OBJECT = eINSTANCE.getDB2OLAPObject();
+
+		/**
+		 * The meta object literal for the '<em><b>Schema</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2OLAP_OBJECT__SCHEMA = eINSTANCE.getDB2OLAPObject_Schema();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2RoutineExtension <em>DB2 Routine Extension</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2RoutineExtension
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2RoutineExtension()
+		 * @generated
+		 */
+		EClass DB2_ROUTINE_EXTENSION = eINSTANCE.getDB2RoutineExtension();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2IdentitySpecifierImpl <em>DB2 Identity Specifier</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2IdentitySpecifierImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2IdentitySpecifier()
+		 * @generated
+		 */
+		EClass DB2_IDENTITY_SPECIFIER = eINSTANCE.getDB2IdentitySpecifier();
+
+		/**
+		 * The meta object literal for the '<em><b>Cache</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_IDENTITY_SPECIFIER__CACHE = eINSTANCE.getDB2IdentitySpecifier_Cache();
+
+		/**
+		 * The meta object literal for the '<em><b>Order</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_IDENTITY_SPECIFIER__ORDER = eINSTANCE.getDB2IdentitySpecifier_Order();
+
+		/**
+		 * The meta object literal for the '<em><b>System Generated</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_IDENTITY_SPECIFIER__SYSTEM_GENERATED = eINSTANCE.getDB2IdentitySpecifier_SystemGenerated();
+
+		/**
+		 * The meta object literal for the '<em><b>Restart Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_IDENTITY_SPECIFIER__RESTART_VALUE = eINSTANCE.getDB2IdentitySpecifier_RestartValue();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2JarImpl <em>DB2 Jar</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2JarImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Jar()
+		 * @generated
+		 */
+		EClass DB2_JAR = eINSTANCE.getDB2Jar();
+
+		/**
+		 * The meta object literal for the '<em><b>File Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_JAR__FILE_NAME = eINSTANCE.getDB2Jar_FileName();
+
+		/**
+		 * The meta object literal for the '<em><b>Path</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_JAR__PATH = eINSTANCE.getDB2Jar_Path();
+
+		/**
+		 * The meta object literal for the '<em><b>Owner</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_JAR__OWNER = eINSTANCE.getDB2Jar_Owner();
+
+		/**
+		 * The meta object literal for the '<em><b>Created TS</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_JAR__CREATED_TS = eINSTANCE.getDB2Jar_CreatedTS();
+
+		/**
+		 * The meta object literal for the '<em><b>Altered TS</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_JAR__ALTERED_TS = eINSTANCE.getDB2Jar_AlteredTS();
+
+		/**
+		 * The meta object literal for the '<em><b>Procedures</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_JAR__PROCEDURES = eINSTANCE.getDB2Jar_Procedures();
+
+		/**
+		 * The meta object literal for the '<em><b>Schema</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_JAR__SCHEMA = eINSTANCE.getDB2Jar_Schema();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ColumnImpl <em>DB2 Column</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ColumnImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Column()
+		 * @generated
+		 */
+		EClass DB2_COLUMN = eINSTANCE.getDB2Column();
+
+		/**
+		 * The meta object literal for the '<em><b>Generation Type</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_COLUMN__GENERATION_TYPE = eINSTANCE.getDB2Column_GenerationType();
+
+		/**
+		 * The meta object literal for the '<em><b>Row Change Timestamp</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_COLUMN__ROW_CHANGE_TIMESTAMP = eINSTANCE.getDB2Column_RowChangeTimestamp();
+
+		/**
+		 * The meta object literal for the '<em><b>Row Begin</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_COLUMN__ROW_BEGIN = eINSTANCE.getDB2Column_RowBegin();
+
+		/**
+		 * The meta object literal for the '<em><b>Row End</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_COLUMN__ROW_END = eINSTANCE.getDB2Column_RowEnd();
+
+		/**
+		 * The meta object literal for the '<em><b>Trans Start ID</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_COLUMN__TRANS_START_ID = eINSTANCE.getDB2Column_TransStartID();
+
+		/**
+		 * The meta object literal for the '<em><b>Begin Period</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_COLUMN__BEGIN_PERIOD = eINSTANCE.getDB2Column_BeginPeriod();
+
+		/**
+		 * The meta object literal for the '<em><b>End Period</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_COLUMN__END_PERIOD = eINSTANCE.getDB2Column_EndPeriod();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XSRObjectImpl <em>DB2XSR Object</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XSRObjectImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2XSRObject()
+		 * @generated
+		 */
+		EClass DB2XSR_OBJECT = eINSTANCE.getDB2XSRObject();
+
+		/**
+		 * The meta object literal for the '<em><b>Schema</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2XSR_OBJECT__SCHEMA = eINSTANCE.getDB2XSRObject_Schema();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XMLSchemaImpl <em>DB2XML Schema</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XMLSchemaImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2XMLSchema()
+		 * @generated
+		 */
+		EClass DB2XML_SCHEMA = eINSTANCE.getDB2XMLSchema();
+
+		/**
+		 * The meta object literal for the '<em><b>Decomposition</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2XML_SCHEMA__DECOMPOSITION = eINSTANCE.getDB2XMLSchema_Decomposition();
+
+		/**
+		 * The meta object literal for the '<em><b>Status</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2XML_SCHEMA__STATUS = eINSTANCE.getDB2XMLSchema_Status();
+
+		/**
+		 * The meta object literal for the '<em><b>Xml Schema Docs</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2XML_SCHEMA__XML_SCHEMA_DOCS = eINSTANCE.getDB2XMLSchema_XmlSchemaDocs();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XMLSchemaDocumentImpl <em>DB2XML Schema Document</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XMLSchemaDocumentImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2XMLSchemaDocument()
+		 * @generated
+		 */
+		EClass DB2XML_SCHEMA_DOCUMENT = eINSTANCE.getDB2XMLSchemaDocument();
+
+		/**
+		 * The meta object literal for the '<em><b>File Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2XML_SCHEMA_DOCUMENT__FILE_NAME = eINSTANCE.getDB2XMLSchemaDocument_FileName();
+
+		/**
+		 * The meta object literal for the '<em><b>Schema Location</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2XML_SCHEMA_DOCUMENT__SCHEMA_LOCATION = eINSTANCE.getDB2XMLSchemaDocument_SchemaLocation();
+
+		/**
+		 * The meta object literal for the '<em><b>Target Namespace</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2XML_SCHEMA_DOCUMENT__TARGET_NAMESPACE = eINSTANCE.getDB2XMLSchemaDocument_TargetNamespace();
+
+		/**
+		 * The meta object literal for the '<em><b>Primary</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2XML_SCHEMA_DOCUMENT__PRIMARY = eINSTANCE.getDB2XMLSchemaDocument_Primary();
+
+		/**
+		 * The meta object literal for the '<em><b>Xml Schema</b></em>' container reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2XML_SCHEMA_DOCUMENT__XML_SCHEMA = eINSTANCE.getDB2XMLSchemaDocument_XmlSchema();
+
+		/**
+		 * The meta object literal for the '<em><b>Xml Schema Doc Properties</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2XML_SCHEMA_DOCUMENT__XML_SCHEMA_DOC_PROPERTIES = eINSTANCE.getDB2XMLSchemaDocument_XmlSchemaDocProperties();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XMLSchemaDocPropertiesImpl <em>DB2XML Schema Doc Properties</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XMLSchemaDocPropertiesImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2XMLSchemaDocProperties()
+		 * @generated
+		 */
+		EClass DB2XML_SCHEMA_DOC_PROPERTIES = eINSTANCE.getDB2XMLSchemaDocProperties();
+
+		/**
+		 * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2XML_SCHEMA_DOC_PROPERTIES__VALUE = eINSTANCE.getDB2XMLSchemaDocProperties_Value();
+
+		/**
+		 * The meta object literal for the '<em><b>Xml Schema Doc</b></em>' container reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2XML_SCHEMA_DOC_PROPERTIES__XML_SCHEMA_DOC = eINSTANCE.getDB2XMLSchemaDocProperties_XmlSchemaDoc();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PackageStatementImpl <em>DB2 Package Statement</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PackageStatementImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2PackageStatement()
+		 * @generated
+		 */
+		EClass DB2_PACKAGE_STATEMENT = eINSTANCE.getDB2PackageStatement();
+
+		/**
+		 * The meta object literal for the '<em><b>Statement Number</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_PACKAGE_STATEMENT__STATEMENT_NUMBER = eINSTANCE.getDB2PackageStatement_StatementNumber();
+
+		/**
+		 * The meta object literal for the '<em><b>Section Number</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_PACKAGE_STATEMENT__SECTION_NUMBER = eINSTANCE.getDB2PackageStatement_SectionNumber();
+
+		/**
+		 * The meta object literal for the '<em><b>Package</b></em>' container reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_PACKAGE_STATEMENT__PACKAGE = eINSTANCE.getDB2PackageStatement_Package();
+
+		/**
+		 * The meta object literal for the '<em><b>Sql Statement</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_PACKAGE_STATEMENT__SQL_STATEMENT = eINSTANCE.getDB2PackageStatement_SqlStatement();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2DistinctUserDefinedTypeImpl <em>DB2 Distinct User Defined Type</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2DistinctUserDefinedTypeImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2DistinctUserDefinedType()
+		 * @generated
+		 */
+		EClass DB2_DISTINCT_USER_DEFINED_TYPE = eINSTANCE.getDB2DistinctUserDefinedType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PeriodImpl <em>DB2 Period</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PeriodImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Period()
+		 * @generated
+		 */
+		EClass DB2_PERIOD = eINSTANCE.getDB2Period();
+
+		/**
+		 * The meta object literal for the '<em><b>Type</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_PERIOD__TYPE = eINSTANCE.getDB2Period_Type();
+
+		/**
+		 * The meta object literal for the '<em><b>Begin Column</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_PERIOD__BEGIN_COLUMN = eINSTANCE.getDB2Period_BeginColumn();
+
+		/**
+		 * The meta object literal for the '<em><b>End Column</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_PERIOD__END_COLUMN = eINSTANCE.getDB2Period_EndColumn();
+
+		/**
+		 * The meta object literal for the '<em><b>Table</b></em>' container reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_PERIOD__TABLE = eINSTANCE.getDB2Period_Table();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ClusterImpl <em>DB2 Cluster</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ClusterImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Cluster()
+		 * @generated
+		 */
+		EClass DB2_CLUSTER = eINSTANCE.getDB2Cluster();
+
+		/**
+		 * The meta object literal for the '<em><b>Level</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_CLUSTER__LEVEL = eINSTANCE.getDB2Cluster_Level();
+
+		/**
+		 * The meta object literal for the '<em><b>Instance</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_CLUSTER__INSTANCE = eINSTANCE.getDB2Cluster_Instance();
+
+		/**
+		 * The meta object literal for the '<em><b>Members</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_CLUSTER__MEMBERS = eINSTANCE.getDB2Cluster_Members();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MemberImpl <em>DB2 Member</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MemberImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Member()
+		 * @generated
+		 */
+		EClass DB2_MEMBER = eINSTANCE.getDB2Member();
+
+		/**
+		 * The meta object literal for the '<em><b>Id</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_MEMBER__ID = eINSTANCE.getDB2Member_Id();
+
+		/**
+		 * The meta object literal for the '<em><b>Home Host</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_MEMBER__HOME_HOST = eINSTANCE.getDB2Member_HomeHost();
+
+		/**
+		 * The meta object literal for the '<em><b>Current Host</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_MEMBER__CURRENT_HOST = eINSTANCE.getDB2Member_CurrentHost();
+
+		/**
+		 * The meta object literal for the '<em><b>State</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_MEMBER__STATE = eINSTANCE.getDB2Member_State();
+
+		/**
+		 * The meta object literal for the '<em><b>Cluster</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_MEMBER__CLUSTER = eINSTANCE.getDB2Member_Cluster();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UniqueConstraintExtensionImpl <em>DB2 Unique Constraint Extension</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UniqueConstraintExtensionImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2UniqueConstraintExtension()
+		 * @generated
+		 */
+		EClass DB2_UNIQUE_CONSTRAINT_EXTENSION = eINSTANCE.getDB2UniqueConstraintExtension();
+
+		/**
+		 * The meta object literal for the '<em><b>Bus Period Without Overlap</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_UNIQUE_CONSTRAINT_EXTENSION__BUS_PERIOD_WITHOUT_OVERLAP = eINSTANCE.getDB2UniqueConstraintExtension_BusPeriodWithoutOverlap();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MaskImpl <em>DB2 Mask</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MaskImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Mask()
+		 * @generated
+		 */
+		EClass DB2_MASK = eINSTANCE.getDB2Mask();
+
+		/**
+		 * The meta object literal for the '<em><b>Correlation Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_MASK__CORRELATION_NAME = eINSTANCE.getDB2Mask_CorrelationName();
+
+		/**
+		 * The meta object literal for the '<em><b>Case Expression</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_MASK__CASE_EXPRESSION = eINSTANCE.getDB2Mask_CaseExpression();
+
+		/**
+		 * The meta object literal for the '<em><b>Enable</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_MASK__ENABLE = eINSTANCE.getDB2Mask_Enable();
+
+		/**
+		 * The meta object literal for the '<em><b>Schema</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_MASK__SCHEMA = eINSTANCE.getDB2Mask_Schema();
+
+		/**
+		 * The meta object literal for the '<em><b>Subject Table</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_MASK__SUBJECT_TABLE = eINSTANCE.getDB2Mask_SubjectTable();
+
+		/**
+		 * The meta object literal for the '<em><b>Subject MQT</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_MASK__SUBJECT_MQT = eINSTANCE.getDB2Mask_SubjectMQT();
+
+		/**
+		 * The meta object literal for the '<em><b>Subject Column</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_MASK__SUBJECT_COLUMN = eINSTANCE.getDB2Mask_SubjectColumn();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PermissionImpl <em>DB2 Permission</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PermissionImpl
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2Permission()
+		 * @generated
+		 */
+		EClass DB2_PERMISSION = eINSTANCE.getDB2Permission();
+
+		/**
+		 * The meta object literal for the '<em><b>Correlation Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_PERMISSION__CORRELATION_NAME = eINSTANCE.getDB2Permission_CorrelationName();
+
+		/**
+		 * The meta object literal for the '<em><b>Search Condition</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_PERMISSION__SEARCH_CONDITION = eINSTANCE.getDB2Permission_SearchCondition();
+
+		/**
+		 * The meta object literal for the '<em><b>Enable</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DB2_PERMISSION__ENABLE = eINSTANCE.getDB2Permission_Enable();
+
+		/**
+		 * The meta object literal for the '<em><b>Schema</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_PERMISSION__SCHEMA = eINSTANCE.getDB2Permission_Schema();
+
+		/**
+		 * The meta object literal for the '<em><b>Subject Table</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_PERMISSION__SUBJECT_TABLE = eINSTANCE.getDB2Permission_SubjectTable();
+
+		/**
+		 * The meta object literal for the '<em><b>Subject MQT</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DB2_PERMISSION__SUBJECT_MQT = eINSTANCE.getDB2Permission_SubjectMQT();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.IsolationLevelType <em>Isolation Level Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.IsolationLevelType
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getIsolationLevelType()
+		 * @generated
+		 */
+		EEnum ISOLATION_LEVEL_TYPE = eINSTANCE.getIsolationLevelType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2IndexType <em>DB2 Index Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2IndexType
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2IndexType()
+		 * @generated
+		 */
+		EEnum DB2_INDEX_TYPE = eINSTANCE.getDB2IndexType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DataCaptureType <em>Data Capture Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.DataCaptureType
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDataCaptureType()
+		 * @generated
+		 */
+		EEnum DATA_CAPTURE_TYPE = eINSTANCE.getDataCaptureType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.UnitType <em>Unit Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.UnitType
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getUnitType()
+		 * @generated
+		 */
+		EEnum UNIT_TYPE = eINSTANCE.getUnitType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.GenerateType <em>Generate Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.GenerateType
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getGenerateType()
+		 * @generated
+		 */
+		EEnum GENERATE_TYPE = eINSTANCE.getGenerateType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDecomposition <em>DB2XML Schema Decomposition</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDecomposition
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2XMLSchemaDecomposition()
+		 * @generated
+		 */
+		EEnum DB2XML_SCHEMA_DECOMPOSITION = eINSTANCE.getDB2XMLSchemaDecomposition();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaStatus <em>DB2XML Schema Status</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaStatus
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2XMLSchemaStatus()
+		 * @generated
+		 */
+		EEnum DB2XML_SCHEMA_STATUS = eINSTANCE.getDB2XMLSchemaStatus();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.OriginType <em>Origin Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.OriginType
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getOriginType()
+		 * @generated
+		 */
+		EEnum ORIGIN_TYPE = eINSTANCE.getOriginType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.ReoptType <em>Reopt Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.ReoptType
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getReoptType()
+		 * @generated
+		 */
+		EEnum REOPT_TYPE = eINSTANCE.getReoptType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.SourceDialect <em>Source Dialect</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.SourceDialect
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getSourceDialect()
+		 * @generated
+		 */
+		EEnum SOURCE_DIALECT = eINSTANCE.getSourceDialect();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2PeriodType <em>DB2 Period Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2PeriodType
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2PeriodType()
+		 * @generated
+		 */
+		EEnum DB2_PERIOD_TYPE = eINSTANCE.getDB2PeriodType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2TableOrganization <em>DB2 Table Organization</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2TableOrganization
+		 * @see org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ModelPackageImpl#getDB2TableOrganization()
+		 * @generated
+		 */
+		EEnum DB2_TABLE_ORGANIZATION = eINSTANCE.getDB2TableOrganization();
+
+	}
+
+} //DB2ModelPackage
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2MultidimensionalIndex.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2MultidimensionalIndex.java
new file mode 100644
index 0000000..22578f4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2MultidimensionalIndex.java
@@ -0,0 +1,48 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Multidimensional Index</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2MultidimensionalIndex#getDimensionIndexes <em>Dimension Indexes</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2MultidimensionalIndex()
+ * @model
+ * @generated
+ */
+public interface DB2MultidimensionalIndex extends Index {
+	/**
+	 * Returns the value of the '<em><b>Dimension Indexes</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Index}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Index#getDB2MultidimensionalIndex <em>DB2 Multidimensional Index</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Dimension Indexes</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Dimension Indexes</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2MultidimensionalIndex_DimensionIndexes()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Index#getDB2MultidimensionalIndex
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.model.DB2Index" opposite="DB2MultidimensionalIndex" required="true"
+	 * @generated
+	 */
+	EList getDimensionIndexes();
+
+} // DB2MultidimensionalIndex
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2OLAPObject.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2OLAPObject.java
new file mode 100644
index 0000000..f91e090
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2OLAPObject.java
@@ -0,0 +1,56 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: DB2OLAPObject.java,v 1.8 2007/10/12 23:05:34 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2OLAP Object</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2OLAPObject#getSchema <em>Schema</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2OLAPObject()
+ * @model
+ * @generated
+ */
+public interface DB2OLAPObject extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Schema</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getOlapObjects <em>Olap Objects</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Schema</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Schema</em>' reference.
+	 * @see #setSchema(DB2Schema)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2OLAPObject_Schema()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getOlapObjects
+	 * @model opposite="olapObjects" required="true"
+	 * @generated
+	 */
+	DB2Schema getSchema();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2OLAPObject#getSchema <em>Schema</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Schema</em>' reference.
+	 * @see #getSchema()
+	 * @generated
+	 */
+	void setSchema(DB2Schema value);
+
+} // DB2OLAPObject
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Package.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Package.java
new file mode 100644
index 0000000..3c01206
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Package.java
@@ -0,0 +1,342 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.emf.common.util.EList;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Package</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * SQL Reference for Cross-Platform Development - v1.1
+ * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+ * 
+ * DB2 Packages (Chapter 1. Concepts 9)
+ * 
+ * A package is an object produced during program preparation that contains all of the sections in a single source file. A section is the compiled form of an SQL statement. Although every section corresponds to one statement, not every statement has a section. The sections created for static SQL are comparable to the bound, or operational, form of SQL statements. The sections created for dynamic SQL are comparable to placeholder control structures used at run time.
+ * 
+ * 
+ * Packages and access plans
+ * 
+ * A package is an object that contains control structures used to execute SQL statements. Packages are produced during program preparation. The control structures can be thought of as the bound or operational form of SQL statements. All control structures in a package are derived from the SQL statements embedded in a single source program.
+ * 
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#isOperative <em>Operative</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getValid <em>Valid</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getVersion <em>Version</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getDefaultSchema <em>Default Schema</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getSqlPath <em>Sql Path</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getReoptVar <em>Reopt Var</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getIsolation <em>Isolation</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getUniqueID <em>Unique ID</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getLastBindTS <em>Last Bind TS</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getSchema <em>Schema</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getStatements <em>Statements</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Package()
+ * @model
+ * @generated
+ */
+public interface DB2Package extends DB2AccessPlan {
+	/**
+	 * Returns the value of the '<em><b>Operative</b></em>' attribute.
+	 * The default value is <code>"true"</code>.
+	 * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Operative</em>' attribute isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+	 * @return the value of the '<em>Operative</em>' attribute.
+	 * @see #setOperative(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Package_Operative()
+	 * @model default="true"
+	 * @generated
+	 */
+    boolean isOperative();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#isOperative <em>Operative</em>}' attribute.
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Operative</em>' attribute.
+	 * @see #isOperative()
+	 * @generated
+	 */
+    void setOperative(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Valid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Valid</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Valid</em>' attribute.
+	 * @see #setValid(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Package_Valid()
+	 * @model
+	 * @generated
+	 */
+	String getValid();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getValid <em>Valid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Valid</em>' attribute.
+	 * @see #getValid()
+	 * @generated
+	 */
+	void setValid(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Version</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Version</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Version</em>' attribute.
+	 * @see #setVersion(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Package_Version()
+	 * @model
+	 * @generated
+	 */
+	String getVersion();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getVersion <em>Version</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Version</em>' attribute.
+	 * @see #getVersion()
+	 * @generated
+	 */
+	void setVersion(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Default Schema</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Default Schema</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Default Schema</em>' attribute.
+	 * @see #setDefaultSchema(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Package_DefaultSchema()
+	 * @model
+	 * @generated
+	 */
+	String getDefaultSchema();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getDefaultSchema <em>Default Schema</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Default Schema</em>' attribute.
+	 * @see #getDefaultSchema()
+	 * @generated
+	 */
+	void setDefaultSchema(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Sql Path</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Sql Path</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Sql Path</em>' attribute.
+	 * @see #setSqlPath(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Package_SqlPath()
+	 * @model
+	 * @generated
+	 */
+	String getSqlPath();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getSqlPath <em>Sql Path</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Sql Path</em>' attribute.
+	 * @see #getSqlPath()
+	 * @generated
+	 */
+	void setSqlPath(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Reopt Var</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.model.ReoptType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Reopt Var</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Reopt Var</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.ReoptType
+	 * @see #setReoptVar(ReoptType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Package_ReoptVar()
+	 * @model
+	 * @generated
+	 */
+	ReoptType getReoptVar();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getReoptVar <em>Reopt Var</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Reopt Var</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.ReoptType
+	 * @see #getReoptVar()
+	 * @generated
+	 */
+	void setReoptVar(ReoptType value);
+
+	/**
+	 * Returns the value of the '<em><b>Isolation</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.model.IsolationLevelType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Isolation</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Isolation</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.IsolationLevelType
+	 * @see #setIsolation(IsolationLevelType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Package_Isolation()
+	 * @model
+	 * @generated
+	 */
+	IsolationLevelType getIsolation();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getIsolation <em>Isolation</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Isolation</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.IsolationLevelType
+	 * @see #getIsolation()
+	 * @generated
+	 */
+	void setIsolation(IsolationLevelType value);
+
+	/**
+	 * Returns the value of the '<em><b>Unique ID</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Unique ID</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Unique ID</em>' attribute.
+	 * @see #setUniqueID(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Package_UniqueID()
+	 * @model
+	 * @generated
+	 */
+	String getUniqueID();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getUniqueID <em>Unique ID</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Unique ID</em>' attribute.
+	 * @see #getUniqueID()
+	 * @generated
+	 */
+	void setUniqueID(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Last Bind TS</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Last Bind TS</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Last Bind TS</em>' attribute.
+	 * @see #setLastBindTS(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Package_LastBindTS()
+	 * @model
+	 * @generated
+	 */
+	String getLastBindTS();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getLastBindTS <em>Last Bind TS</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Last Bind TS</em>' attribute.
+	 * @see #getLastBindTS()
+	 * @generated
+	 */
+	void setLastBindTS(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Schema</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getPackages <em>Packages</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Schema</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Schema</em>' reference.
+	 * @see #setSchema(DB2Schema)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Package_Schema()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getPackages
+	 * @model opposite="packages" required="true"
+	 * @generated
+	 */
+	DB2Schema getSchema();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getSchema <em>Schema</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Schema</em>' reference.
+	 * @see #getSchema()
+	 * @generated
+	 */
+	void setSchema(DB2Schema value);
+
+	/**
+	 * Returns the value of the '<em><b>Statements</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2PackageStatement}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2PackageStatement#getPackage <em>Package</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Statements</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Statements</em>' containment reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Package_Statements()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2PackageStatement#getPackage
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.model.DB2PackageStatement" opposite="package" containment="true"
+	 * @generated
+	 */
+	EList getStatements();
+
+} // DB2Package
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2PackageStatement.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2PackageStatement.java
new file mode 100644
index 0000000..636a92b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2PackageStatement.java
@@ -0,0 +1,139 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: DB2PackageStatement.java,v 1.1 2008/06/10 20:19:40 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+import org.eclipse.datatools.modelbase.sql.statements.SQLStatement;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Package Statement</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2PackageStatement#getStatementNumber <em>Statement Number</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2PackageStatement#getSectionNumber <em>Section Number</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2PackageStatement#getPackage <em>Package</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2PackageStatement#getSqlStatement <em>Sql Statement</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2PackageStatement()
+ * @model
+ * @generated
+ */
+public interface DB2PackageStatement extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Statement Number</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Statement Number</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Statement Number</em>' attribute.
+	 * @see #setStatementNumber(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2PackageStatement_StatementNumber()
+	 * @model
+	 * @generated
+	 */
+	int getStatementNumber();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2PackageStatement#getStatementNumber <em>Statement Number</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Statement Number</em>' attribute.
+	 * @see #getStatementNumber()
+	 * @generated
+	 */
+	void setStatementNumber(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Section Number</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Section Number</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Section Number</em>' attribute.
+	 * @see #setSectionNumber(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2PackageStatement_SectionNumber()
+	 * @model
+	 * @generated
+	 */
+	int getSectionNumber();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2PackageStatement#getSectionNumber <em>Section Number</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Section Number</em>' attribute.
+	 * @see #getSectionNumber()
+	 * @generated
+	 */
+	void setSectionNumber(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Package</b></em>' container reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getStatements <em>Statements</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Package</em>' container reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Package</em>' container reference.
+	 * @see #setPackage(DB2Package)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2PackageStatement_Package()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getStatements
+	 * @model opposite="statements" required="true"
+	 * @generated
+	 */
+	DB2Package getPackage();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2PackageStatement#getPackage <em>Package</em>}' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Package</em>' container reference.
+	 * @see #getPackage()
+	 * @generated
+	 */
+	void setPackage(DB2Package value);
+
+	/**
+	 * Returns the value of the '<em><b>Sql Statement</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Sql Statement</em>' containment reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Sql Statement</em>' containment reference.
+	 * @see #setSqlStatement(SQLStatement)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2PackageStatement_SqlStatement()
+	 * @model containment="true"
+	 * @generated
+	 */
+	SQLStatement getSqlStatement();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2PackageStatement#getSqlStatement <em>Sql Statement</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Sql Statement</em>' containment reference.
+	 * @see #getSqlStatement()
+	 * @generated
+	 */
+	void setSqlStatement(SQLStatement value);
+
+} // DB2PackageStatement
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Period.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Period.java
new file mode 100644
index 0000000..9f70b22
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Period.java
@@ -0,0 +1,144 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Period</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Period#getType <em>Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Period#getBeginColumn <em>Begin Column</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Period#getEndColumn <em>End Column</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Period#getTable <em>Table</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Period()
+ * @model
+ * @generated
+ */
+public interface DB2Period extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Type</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2PeriodType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Type</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Type</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2PeriodType
+	 * @see #setType(DB2PeriodType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Period_Type()
+	 * @model
+	 * @generated
+	 */
+	DB2PeriodType getType();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Period#getType <em>Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Type</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2PeriodType
+	 * @see #getType()
+	 * @generated
+	 */
+	void setType(DB2PeriodType value);
+
+	/**
+	 * Returns the value of the '<em><b>Begin Column</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#getBeginPeriod <em>Begin Period</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Begin Column</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Begin Column</em>' reference.
+	 * @see #setBeginColumn(DB2Column)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Period_BeginColumn()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#getBeginPeriod
+	 * @model opposite="beginPeriod" required="true"
+	 * @generated
+	 */
+	DB2Column getBeginColumn();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Period#getBeginColumn <em>Begin Column</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Begin Column</em>' reference.
+	 * @see #getBeginColumn()
+	 * @generated
+	 */
+	void setBeginColumn(DB2Column value);
+
+	/**
+	 * Returns the value of the '<em><b>End Column</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#getEndPeriod <em>End Period</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>End Column</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>End Column</em>' reference.
+	 * @see #setEndColumn(DB2Column)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Period_EndColumn()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Column#getEndPeriod
+	 * @model opposite="endPeriod" required="true"
+	 * @generated
+	 */
+	DB2Column getEndColumn();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Period#getEndColumn <em>End Column</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>End Column</em>' reference.
+	 * @see #getEndColumn()
+	 * @generated
+	 */
+	void setEndColumn(DB2Column value);
+
+	/**
+	 * Returns the value of the '<em><b>Table</b></em>' container reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getPeriods <em>Periods</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Table</em>' container reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Table</em>' container reference.
+	 * @see #setTable(DB2Table)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Period_Table()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getPeriods
+	 * @model opposite="periods" required="true"
+	 * @generated
+	 */
+	DB2Table getTable();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Period#getTable <em>Table</em>}' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Table</em>' container reference.
+	 * @see #getTable()
+	 * @generated
+	 */
+	void setTable(DB2Table value);
+
+} // DB2Period
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2PeriodType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2PeriodType.java
new file mode 100644
index 0000000..aef8617
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2PeriodType.java
@@ -0,0 +1,151 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>DB2 Period Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2PeriodType()
+ * @model
+ * @generated
+ */
+public final class DB2PeriodType extends AbstractEnumerator {
+	/**
+	 * The '<em><b>SYSTEM TIME</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>SYSTEM TIME</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #SYSTEM_TIME_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int SYSTEM_TIME = 0;
+
+	/**
+	 * The '<em><b>BUSINESS TIME</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>BUSINESS TIME</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #BUSINESS_TIME_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int BUSINESS_TIME = 1;
+
+	/**
+	 * The '<em><b>SYSTEM TIME</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #SYSTEM_TIME
+	 * @generated
+	 * @ordered
+	 */
+	public static final DB2PeriodType SYSTEM_TIME_LITERAL = new DB2PeriodType(SYSTEM_TIME, "SYSTEM_TIME", "SYSTEM_TIME"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>BUSINESS TIME</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #BUSINESS_TIME
+	 * @generated
+	 * @ordered
+	 */
+	public static final DB2PeriodType BUSINESS_TIME_LITERAL = new DB2PeriodType(BUSINESS_TIME, "BUSINESS_TIME", "BUSINESS_TIME"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * An array of all the '<em><b>DB2 Period Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final DB2PeriodType[] VALUES_ARRAY =
+		new DB2PeriodType[] {
+			SYSTEM_TIME_LITERAL,
+			BUSINESS_TIME_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>DB2 Period Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>DB2 Period Type</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static DB2PeriodType get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			DB2PeriodType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>DB2 Period Type</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static DB2PeriodType getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			DB2PeriodType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>DB2 Period Type</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static DB2PeriodType get(int value) {
+		switch (value) {
+			case SYSTEM_TIME: return SYSTEM_TIME_LITERAL;
+			case BUSINESS_TIME: return BUSINESS_TIME_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private DB2PeriodType(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //DB2PeriodType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Permission.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Permission.java
new file mode 100644
index 0000000..5fe8bae
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Permission.java
@@ -0,0 +1,198 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.datatools.modelbase.sql.expressions.QueryExpression;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Permission</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#getCorrelationName <em>Correlation Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#getSearchCondition <em>Search Condition</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#isEnable <em>Enable</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#getSchema <em>Schema</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#getSubjectTable <em>Subject Table</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#getSubjectMQT <em>Subject MQT</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Permission()
+ * @model
+ * @generated
+ */
+public interface DB2Permission extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Correlation Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Correlation Name</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Correlation Name</em>' attribute.
+	 * @see #setCorrelationName(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Permission_CorrelationName()
+	 * @model
+	 * @generated
+	 */
+	String getCorrelationName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#getCorrelationName <em>Correlation Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Correlation Name</em>' attribute.
+	 * @see #getCorrelationName()
+	 * @generated
+	 */
+	void setCorrelationName(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Search Condition</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Search Condition</em>' containment reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Search Condition</em>' containment reference.
+	 * @see #setSearchCondition(QueryExpression)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Permission_SearchCondition()
+	 * @model containment="true"
+	 * @generated
+	 */
+	QueryExpression getSearchCondition();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#getSearchCondition <em>Search Condition</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Search Condition</em>' containment reference.
+	 * @see #getSearchCondition()
+	 * @generated
+	 */
+	void setSearchCondition(QueryExpression value);
+
+	/**
+	 * Returns the value of the '<em><b>Enable</b></em>' attribute.
+	 * The default value is <code>"true"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Enable</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Enable</em>' attribute.
+	 * @see #setEnable(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Permission_Enable()
+	 * @model default="true"
+	 * @generated
+	 */
+	boolean isEnable();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#isEnable <em>Enable</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Enable</em>' attribute.
+	 * @see #isEnable()
+	 * @generated
+	 */
+	void setEnable(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Schema</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getPermissions <em>Permissions</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Schema</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Schema</em>' reference.
+	 * @see #setSchema(DB2Schema)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Permission_Schema()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getPermissions
+	 * @model opposite="permissions" required="true"
+	 * @generated
+	 */
+	DB2Schema getSchema();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#getSchema <em>Schema</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Schema</em>' reference.
+	 * @see #getSchema()
+	 * @generated
+	 */
+	void setSchema(DB2Schema value);
+
+	/**
+	 * Returns the value of the '<em><b>Subject Table</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getPermissions <em>Permissions</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Subject Table</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Subject Table</em>' reference.
+	 * @see #setSubjectTable(DB2Table)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Permission_SubjectTable()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getPermissions
+	 * @model opposite="permissions" required="true"
+	 * @generated
+	 */
+	DB2Table getSubjectTable();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#getSubjectTable <em>Subject Table</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Subject Table</em>' reference.
+	 * @see #getSubjectTable()
+	 * @generated
+	 */
+	void setSubjectTable(DB2Table value);
+
+	/**
+	 * Returns the value of the '<em><b>Subject MQT</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable#getPermissions <em>Permissions</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Subject MQT</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Subject MQT</em>' reference.
+	 * @see #setSubjectMQT(DB2MaterializedQueryTable)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Permission_SubjectMQT()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable#getPermissions
+	 * @model opposite="permissions" required="true"
+	 * @generated
+	 */
+	DB2MaterializedQueryTable getSubjectMQT();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#getSubjectMQT <em>Subject MQT</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Subject MQT</em>' reference.
+	 * @see #getSubjectMQT()
+	 * @generated
+	 */
+	void setSubjectMQT(DB2MaterializedQueryTable value);
+
+} // DB2Permission
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Procedure.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Procedure.java
new file mode 100644
index 0000000..9cb91ca
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Procedure.java
@@ -0,0 +1,283 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+
+import org.eclipse.datatools.modelbase.sql.datatypes.IntegerDataType;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Procedure</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * SQL Reference for Cross-Platform Development - v1.1
+ * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+ * 
+ * Procedures (Chapter 1. Concepts 9)
+ * 
+ * A procedure (sometimes called a stored procedure) is a routine that can be called to perform operations that can include both host language statements and SQL statements.
+ * 
+ * Procedures are classified as either SQL procedures or external procedures. SQL procedures contain only SQL statements. External procedures reference a host language program which may or may not contain SQL statements. A procedure is created with the CREATE PROCEDURE statement. For more information about creating procedures, see "CREATE PROCEDURE" on page 366.
+ * 
+ * Procedures in SQL provide the same benefits as procedures in a host language. That is, a common piece of code need only be written and maintained once and can be called from several programs. Host languages can easily call procedures that exist on the local system. SQL can also easily call a procedure that exists on a remote system. In fact, the major benefit of procedures in SQL is that they can be used to enhance the performance characteristics of distributed applications.
+ * 
+ * Assume several SQL statements must be executed at a remote system. There are two ways this can be done. Without procedures, when the first SQL statement is executed, the application requester will send a request to an application server to perform the operation. It then waits for a reply that indicates whether the statement executed successfully or not and optionally returns results. When the second and each subsequent SQL statement is executed, the application requester will send another request and wait for another reply. If the same SQL statements are stored in a procedure at an application server, a CALL statement can be executed that references the remote procedure. When the CALL statement is executed, the application requester will send a single request to the current server to call the procedure. It then waits for a single reply that indicates whether the CALL statement executed successfully or not and optionally returns results.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#isModelResultSets <em>Model Result Sets</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#isNullInput <em>Null Input</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#getVersion <em>Version</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#getDialect <em>Dialect</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#isExternalAction <em>External Action</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#getReturn <em>Return</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#getJavaOptions <em>Java Options</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#getDeploy <em>Deploy</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Procedure()
+ * @model
+ * @generated
+ */
+public interface DB2Procedure extends Procedure, DB2Routine {
+	/**
+	 * Returns the value of the '<em><b>Model Result Sets</b></em>' attribute.
+	 * The default value is <code>"false"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * <code>True</code> means that the stored procedure should have its result sets modeled. 
+	 * <code>False</code> means that even if the stored procedure returned result sets, they are not modeled. 
+	 * Most users will not be wanting to model the stored procedure return result sets metadata as this takes 
+	 * considerable time, and the developer may not want to even run the stored procedure (yes, even though 
+	 * no data is returned, it needs to be done to learn the metadata) at the time of the build. 
+	 * 
+	 * This was added so that the stored procedure could be completely described in a DADX document. 
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Model Result Sets</em>' attribute.
+	 * @see #setModelResultSets(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Procedure_ModelResultSets()
+	 * @model default="false"
+	 * @generated
+	 */
+	boolean isModelResultSets();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#isModelResultSets <em>Model Result Sets</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Model Result Sets</em>' attribute.
+	 * @see #isModelResultSets()
+	 * @generated
+	 */
+	void setModelResultSets(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Null Input</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * CALLED ON NULL INPUT 
+	 * <p> 
+	 * CALLED ON NULL INPUT always applies to stored procedures. This 
+	 * means that regardless if any arguments are null, the stored procedure is 
+	 * called. It can return a null value or a normal (non-null) value. Responsibility 
+	 * for testing for null argument values lies with the stored procedure. 
+	 * <p> 
+	 * The value NULL CALL may be used as a synonym for CALLED ON 
+	 * NULL INPUT for backwards and family compatibility.
+	 * 
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Null Input</em>' attribute.
+	 * @see #setNullInput(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Procedure_NullInput()
+	 * @model
+	 * @generated
+	 */
+   boolean isNullInput();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#isNullInput <em>Null Input</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Null Input</em>' attribute.
+	 * @see #isNullInput()
+	 * @generated
+	 */
+   void setNullInput(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Version</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * Initially for DB2 os390 v9 where SQL stored procedures can be versioned (New 
+	 * Function mode).  LUW could follow suit, though it is not in plan for v9.1
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Version</em>' attribute.
+	 * @see #setVersion(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Procedure_Version()
+	 * @model
+	 * @generated
+	 */
+   String getVersion();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#getVersion <em>Version</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Version</em>' attribute.
+	 * @see #getVersion()
+	 * @generated
+	 */
+   void setVersion(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Dialect</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.model.SourceDialect}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Dialect</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Dialect</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.SourceDialect
+	 * @see #setDialect(SourceDialect)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Procedure_Dialect()
+	 * @model
+	 * @generated
+	 */
+	SourceDialect getDialect();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#getDialect <em>Dialect</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Dialect</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.SourceDialect
+	 * @see #getDialect()
+	 * @generated
+	 */
+	void setDialect(SourceDialect value);
+
+	/**
+	 * Returns the value of the '<em><b>External Action</b></em>' attribute.
+	 * The default value is <code>"true"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>External Action</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>External Action</em>' attribute.
+	 * @see #setExternalAction(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Procedure_ExternalAction()
+	 * @model default="true"
+	 * @generated
+	 */
+	boolean isExternalAction();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#isExternalAction <em>External Action</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>External Action</em>' attribute.
+	 * @see #isExternalAction()
+	 * @generated
+	 */
+	void setExternalAction(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Return</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+    * The stored procedure can only return an integer data type, if a return type is specified.
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Return</em>' containment reference.
+	 * @see #setReturn(IntegerDataType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Procedure_Return()
+	 * @model containment="true"
+	 * @generated
+	 */
+	IntegerDataType getReturn();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#getReturn <em>Return</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+    * The stored procedure can only return an integer data type, if a return type is specified.
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Return</em>' containment reference.
+	 * @see #getReturn()
+	 * @generated
+	 */
+	void setReturn(IntegerDataType value);
+
+	/**
+	 * Returns the value of the '<em><b>Java Options</b></em>' containment reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions#getProcedure <em>Procedure</em>}'.
+	 * <!-- begin-user-doc -->
+    * <p>
+    * If the meaning of the '<em>Java Options</em>' containment reference isn't clear,
+    * there really should be more of a description here...
+    * </p>
+    * <!-- end-user-doc -->
+	 * @return the value of the '<em>Java Options</em>' containment reference.
+	 * @see #setJavaOptions(DB2JavaOptions)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Procedure_JavaOptions()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions#getProcedure
+	 * @model opposite="procedure" containment="true"
+	 * @generated
+	 */
+   DB2JavaOptions getJavaOptions();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#getJavaOptions <em>Java Options</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Java Options</em>' containment reference.
+	 * @see #getJavaOptions()
+	 * @generated
+	 */
+   void setJavaOptions(DB2JavaOptions value);
+
+	/**
+	 * Returns the value of the '<em><b>Deploy</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Deploy</em>' containment reference.
+	 * @see #setDeploy(DB2ProcedureDeploy)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Procedure_Deploy()
+	 * @model containment="true"
+	 * @generated
+	 */
+	DB2ProcedureDeploy getDeploy();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure#getDeploy <em>Deploy</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Deploy</em>' containment reference.
+	 * @see #getDeploy()
+	 * @generated
+	 */
+	void setDeploy(DB2ProcedureDeploy value);
+
+} // DB2Procedure
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2ProcedureDeploy.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2ProcedureDeploy.java
new file mode 100644
index 0000000..773f992
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2ProcedureDeploy.java
@@ -0,0 +1,59 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: DB2ProcedureDeploy.java,v 1.8 2007/10/12 23:05:34 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Procedure Deploy</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Contains the filename of the deployed script.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ProcedureDeploy#getFileName <em>File Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2ProcedureDeploy()
+ * @model
+ * @generated
+ */
+public interface DB2ProcedureDeploy extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>File Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * Filename of the deployed script.
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>File Name</em>' attribute.
+	 * @see #setFileName(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2ProcedureDeploy_FileName()
+	 * @model
+	 * @generated
+	 */
+	String getFileName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ProcedureDeploy#getFileName <em>File Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>File Name</em>' attribute.
+	 * @see #getFileName()
+	 * @generated
+	 */
+	void setFileName(String value);
+
+} // DB2ProcedureDeploy
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Routine.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Routine.java
new file mode 100644
index 0000000..7479b34
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Routine.java
@@ -0,0 +1,640 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Routine</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * SQL Reference for Cross-Platform Development - v1.1
+ * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+ * 
+ * Routines (Chapter 1. Concepts 9):
+ * A routine is an executable SQL object. There are two types of routines.
+ * 
+ * Functions:
+ * A function is a routine that can be invoked from within other SQL statements and returns a value, or a table. A function is created with the CREATE FUNCTION statement.
+ * 
+ * Procedures:
+ * A procedure (sometimes called a stored procedure) is a routine that can be called to perform operations that can include both host language statements and SQL statements.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getFenced <em>Fenced</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getThreadsafe <em>Threadsafe</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#isDbInfo <em>Db Info</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#isImplicitSchema <em>Implicit Schema</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#isFederated <em>Federated</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getParmCcsid <em>Parm Ccsid</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getSpecialRegister <em>Special Register</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getChangeState <em>Change State</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getDebugId <em>Debug Id</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getProgramType <em>Program Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getOrigSchemaName <em>Orig Schema Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getOrigParmSig <em>Orig Parm Sig</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getExtendedOptions <em>Extended Options</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getRoutineExtensions <em>Routine Extensions</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Routine()
+ * @model interface="true" abstract="true"
+ * @generated
+ */
+public interface DB2Routine extends Routine, DB2AccessPlan {
+
+	/**
+	 * Returns the value of the '<em><b>Fenced</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * From the DB2 SQL Reference for Cross-Platform Development v1.1
+	 * 
+	 * Specifies that the external function or procedure runs in an environment that is isolated from
+	 * the database manager environment.
+	 * 
+	 * 
+	 * From the v8.1 UDB documentation for external UDFs and stored procedures:
+	 * 
+	 * This clause specifies whether the stored procedure is considered "safe" to
+	 * run in the database manager operating environment's process or address
+	 * space (NOT FENCED), or not (FENCED).
+	 * If a stored procedure is registered as FENCED, the database manager
+	 * protects its internal resources (for example, data buffers) from access by
+	 * the procedure. All procedures have the option of running as FENCED or
+	 * NOT FENCED. In general, a procedure running as FENCED will not
+	 * perform as well as a similar one running as NOT FENCED.
+	 * 
+	 * CAUTION:
+	 * Use of NOT FENCED for procedures that have not been adequately
+	 * checked out can compromise the integrity of DB2. DB2 takes some
+	 * precautions against many of the common types of inadvertent failures
+	 * that could occur, but cannot guarantee complete integrity when NOT
+	 * FENCED stored procedures are used.
+	 * 
+	 * Either SYSADM authority, DBADM authority, or a special authority
+	 * (CREATE_NOT_FENCED) is required to register a stored procedure as
+	 * NOT FENCED. Only FENCED can be specified for a stored procedure
+	 * with LANGUAGE OLE or NOT THREADSAFE.
+	 * 
+	 * To create a not-fenced stored procedure, the privileges held by the
+	 * authorization ID of the statement must also include at least one of the
+	 * following:
+	 * - CREATE_NOT_FENCED_ROUTINE authority on the database
+	 * - SYSADM or DBADM authority.
+	 * 
+	 * To create a fenced stored procedure, no additional authorities or privileges are
+	 * required. If the authorization ID has insufficient authority to perform the operation, an
+	 * error (SQLSTATE 42502) is raised.
+	 * 
+	 * As of Sept 2003, there isn't a Fenced attribute for 390. There is one 
+	 * supported for as400 is done so for compatibility purposes.
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Fenced</em>' attribute.
+	 * @see #setFenced(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Routine_Fenced()
+	 * @model
+	 * @generated
+	 */
+	String getFenced();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getFenced <em>Fenced</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Fenced</em>' attribute.
+	 * @see #getFenced()
+	 * @generated
+	 */
+	void setFenced(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Threadsafe</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * From the v8.1 UDB documentation for external UDFs and stored procedures:
+	 * 
+	 * Specifies whether the procedure is considered safe to run in the same
+	 * process as other routines (THREADSAFE), or not (NOT THREADSAFE).  
+	 * 
+	 * If the procedure is defined with LANGUAGE other than OLE:
+	 * - If the procedure is defined as THREADSAFE, the database manager can
+	 *   invoke the procedure in the same process as other routines. In general,
+	 *   to be threadsafe, a procedure should not use any global or static data
+	 *   areas. Most programming references include a discussion of writing
+	 *   threadsafe routines. Both FENCED and NOT FENCED procedures can
+	 *   be THREADSAFE.
+	 * - If the procedure is defined as NOT THREADSAFE, the database
+	 *   manager will never invoke the procedure in the same process as
+	 *   another routine.
+	 * 
+	 * For FENCED procedures, THREADSAFE is the default if the LANGUAGE
+	 * is JAVA. For all other languages, NOT THREADSAFE is the default. If the
+	 * procedure is defined with LANGUAGE OLE, THREADSAFE may not be
+	 * specified (SQLSTATE 42613). 
+	 * 
+	 * For NOT FENCED procedures, THREADSAFE is the default. NOT
+	 * THREADSAFE cannot be specified (SQLSTATE 42613).
+	 * 
+	 * As of Sept 2003, only for LUW
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Threadsafe</em>' attribute.
+	 * @see #setThreadsafe(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Routine_Threadsafe()
+	 * @model
+	 * @generated
+	 */
+	String getThreadsafe();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getThreadsafe <em>Threadsafe</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Threadsafe</em>' attribute.
+	 * @see #getThreadsafe()
+	 * @generated
+	 */
+	void setThreadsafe(String value);
+
+   /**
+    * Pseudo-enumerated value for changeState.  CLEAN means
+    * the routine hasn't changed since it was deployed to the
+    * server.
+    * @see DB2Routine#setChangeState(int);
+    */
+   int CLEAN = 0;
+
+   /**
+    * Pseudo-enumerated value for changeState.  DIRTY_DDL means
+    * the routine's DDL has changed since the last time it was
+    * deployed to the server.
+    * @see DB2Routine#setChangeState(int);
+    */
+   int DIRTY_DDL = 1;
+
+   /**
+    * Pseudo-enumerated value for changeState.  DIRTY means
+    * the routine's source has changed since the last time it was
+    * deployed to the server.
+    * @see DB2Routine#setChangeState(int);
+    */
+   int DIRTY = 2;
+
+	/**
+	 * Returns the value of the '<em><b>Db Info</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * From the DB2 SQL Reference for Cross-Platform Development v1.1
+	 * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+	 * 
+	 * CREATE PROCEDURE (External):
+	 * NO DBINFO or DBINFO
+	 * Specifies whether additional status information is passed to the procedure
+	 * when it is invoked. The default is NO DBINFO.
+	 * NO DBINFO
+	 * Additional information is not passed.
+	 * DBINFO
+	 * An additional argument is passed when the procedure is invoked.
+	 * The argument is a structure that contains information such as the name of
+	 * the current server, the application run-time authorization ID and
+	 * identification of the version and release of the database manager that
+	 * invoked the procedure. See "Database information in external routines
+	 * (DBINFO)" on page 708 for further details.
+	 * DBINFO can be specified only if PARAMETER STYLE DB2SQL is
+	 * specified.
+	 * 
+	 * Parameter passing for external functions or procedures written in C or COBOL
+	 * This input argument is set by the database manager before invoking the
+	 * program. It is only present if the CREATE FUNCTION statement for the
+	 * routine specifies the DBINFO keyword. The argument is a structure whose
+	 * definition is described in "Database information in external routines
+	 * (DBINFO)" on page 708. The dbinfo argument is input only and any changes to
+	 * the argument value made by the program are ignored by the database
+	 * manager upon return from the program.
+	 * 
+	 * 
+	 * From the v8.1 UDB documentation for external UDFs and stored procedures:
+	 * 
+	 * Specifies whether specific information known by DB2 is passed to the
+	 * stored procedure when it is invoked as an additional invocation-time
+	 * argument (DBINFO) or not (NO DBINFO). NO DBINFO is the default. 
+	 * 
+	 * DBINFO is not supported for LANGUAGE OLE (SQLSTATE 42613). It is
+	 * also not supported for PARAMETER STYLE JAVA or DB2GENERAL.
+	 * If DBINFO is specified, a structure containing the following information is
+	 * passed to the stored procedure:
+	 * - Data base name - the name of the currently connected database.
+	 * - Application ID - unique application ID which is established for each
+	 *   connection to the database.
+	 * - Application Authorization ID - the application run-time authorization ID.
+	 * - Code page - identifies the database code page.
+	 * - Database version/release - identifies the version, release and
+	 *   modification level of the database server invoking the stored procedure.
+	 * - Platform - contains the server's platform type.
+	 * 
+	 * The DBINFO structure is common for all external routines and contains
+	 * additional fields that are not relevant to procedures.
+	 * CREATE PROCEDURE (External)
+	 * 
+	 * 
+	 * From the os390 v7 SQL reference:
+	 * Specifies whether specific information known by DB2 is passed to the stored
+	 * procedure when it is invoked.
+	 * NO DBINFO
+	 *   Additional information is not passed. NO DBINFO is the default.
+	 * DBINFO
+	 *   An additional argument is passed when the stored procedure is invoked.
+	 *   The argument is a structure that contains information such as the
+	 *   application run-time authorization ID, the schema name, the name of a
+	 *   table or column that the procedure might be inserting into or updating, and
+	 *   identification of the database server that invoked the procedure. For details
+	 *   about the argument and its structure, see DB2 Application Programming
+	 *   and SQL Guide.
+	 * 
+	 *   DBINFO can be specified only if PARAMETER STYLE DB2SQL is
+	 *   specified.
+	 * 
+	 * 
+	 * From the as400 SQL v5r1 SQL reference:
+	 * DBINFO Indicates that the database manager should pass a structure containing
+	 * status information to the function. Table 24 in the SQL reference 
+	 * contains a description of the DBINFO structure. Detailed information 
+	 * about the DBINFO structure can be found in include file SQLUDF in QSYSINC.H.
+	 * DBINFO is only allowed with PARAMETER STYLE DB2SQL.
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Db Info</em>' attribute.
+	 * @see #setDbInfo(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Routine_DbInfo()
+	 * @model
+	 * @generated
+	 */
+	boolean isDbInfo();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#isDbInfo <em>Db Info</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Db Info</em>' attribute.
+	 * @see #isDbInfo()
+	 * @generated
+	 */
+	void setDbInfo(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Implicit Schema</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * From the DB2 SQL Reference for Cross-Platform Development v1.1
+	 * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+	 * 
+	 * The routine name is implicitly or explicitly qualified with a schema name.  If the routine
+	 * is created without a schema, then it is created with an implicit schema.
+	 * 
+	 * The implicit schema name is determined as follows:
+	 * - For distinct type names, the database manager searches the SQL path and
+	 * selects the first schema in the SQL path such that the data type exists in the
+	 * schema.
+	 * - For procedure names, the database manager searches the SQL path and
+	 * selects the first schema in the SQL path such that the schema contains a
+	 * procedure with the same name and the same number of parameters.
+	 * - For function names, the database manager uses the SQL path in conjunction
+	 * with function resolution, as described under "Function resolution" on page 94.
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Implicit Schema</em>' attribute.
+	 * @see #setImplicitSchema(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Routine_ImplicitSchema()
+	 * @model
+	 * @generated
+	 */
+	boolean isImplicitSchema();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#isImplicitSchema <em>Implicit Schema</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Implicit Schema</em>' attribute.
+	 * @see #isImplicitSchema()
+	 * @generated
+	 */
+	void setImplicitSchema(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Federated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * From UDB v8.1 SQL Reference Volume 2
+	 * 
+	 * FEDERATED or NOT FEDERATED
+	 * This optional clause specifies whether or not federated objects can be
+	 * used.
+	 * If NOT FEDERATED is specified, federated objects cannot be used in any
+	 * SQL statement in the function or procedure . Using a federated object will result in an
+	 * error (SQLSTATE 55047).
+	 * 
+	 * 
+	 * 
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Federated</em>' attribute.
+	 * @see #setFederated(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Routine_Federated()
+	 * @model
+	 * @generated
+	 */
+	boolean isFederated();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#isFederated <em>Federated</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Federated</em>' attribute.
+	 * @see #isFederated()
+	 * @generated
+	 */
+	void setFederated(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Parm Ccsid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * From the DB2 SQL Reference for Cross-Platform Development v1.1
+	 * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+	 * 
+	 * The meaning of the environment Coded Character Set Identifier (CCSID) depends on 
+	 * the application server where the routine is executed.
+	 * - On DB2 UDB for z/OS and OS/390, the environment CCSIDs are the CCSIDs
+	 * for the table accessed in the containing SQL statement.
+	 * - On DB2 UDB for iSeries, the environment CCSIDs are the CCSIDs associated
+	 * with the job.
+	 * - On DB2 UDB for LUW, the environment CCSIDs are the CCSIDs for the
+	 * relational database.
+	 * 
+	 * 
+	 * DB2 Universal Database for OS/390 and z/OS v7 SQL Ref:
+	 * Every string used in an SQL operation has a CCSID. The CCSID identifies the
+	 * manner in which the characters in the string are encoded. Strings can be encoded
+	 * in ASCII, EBCDIC, or Unicode.  Many of the times, the default CCSID is used
+	 * 
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Parm Ccsid</em>' attribute.
+	 * @see #setParmCcsid(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Routine_ParmCcsid()
+	 * @model
+	 * @generated
+	 */
+	String getParmCcsid();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getParmCcsid <em>Parm Ccsid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Parm Ccsid</em>' attribute.
+	 * @see #getParmCcsid()
+	 * @generated
+	 */
+	void setParmCcsid(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Special Register</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * For UDB, in BNF diagrams above the line, INHERIT SPECIAL REGISTERS is the default.
+	 * For zSeries, v7+ there is both 
+	 * INHERIT SPECIAL REGISTERS 
+	 *   Indicates that the values of special registers are inherited according to the rules
+	 *   listed in the table for characteristics of special registers in a user-defined
+	 *   function or stored procedure in Table 19 on page 92.
+	 * DEFAULT SPECIAL REGISTERS
+	 *   Indicates that special registers are initialized to the default values, as indicated
+	 *   by the rules in the table for characteristics of special registers in a user-defined
+	 *   function or stored procedure in Table 19 on page 92.
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Special Register</em>' attribute.
+	 * @see #setSpecialRegister(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Routine_SpecialRegister()
+	 * @model
+	 * @generated
+	 */
+	String getSpecialRegister();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getSpecialRegister <em>Special Register</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Special Register</em>' attribute.
+	 * @see #getSpecialRegister()
+	 * @generated
+	 */
+	void setSpecialRegister(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Change State</b></em>' attribute.
+	 * The default value is <code>"0"</code>.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * This replaces the "dirty" and "dirtyDDL" attributes in the WSAD v6 and previous SQL models.
+	 * changeState is integer for to indicate DIRTY source, or just dirty DDL (where an external routine doesn't 
+	 * need to be recompiled, just dropped and registered).  
+	 * 
+	 * Rather than use an enumerated type which is not extendable in EMF, this will have a 
+	 * pseudo-enumerated type so that the db2 routines can be extended to hold more state 
+	 * information than just DIRTY (2) and DIRTY_DDL (1), and CLEAN (0).  CLEAN will be the default
+	 * as the initial value is set to 0.  
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Change State</em>' attribute.
+	 * @see #setChangeState(int)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Routine_ChangeState()
+	 * @model default="0"
+	 * @generated
+	 */
+   int getChangeState();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getChangeState <em>Change State</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Change State</em>' attribute.
+	 * @see #getChangeState()
+	 * @generated
+	 */
+   void setChangeState(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Debug Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * Special ID to uniquely define the registered, built-for-debug routine at the server.
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Debug Id</em>' attribute.
+	 * @see #setDebugId(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Routine_DebugId()
+	 * @model
+	 * @generated
+	 */
+   String getDebugId();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getDebugId <em>Debug Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Debug Id</em>' attribute.
+	 * @see #getDebugId()
+	 * @generated
+	 */
+   void setDebugId(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Program Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * For OS/390 v6 and v7, both UDFs and SPs 
+	 * <p> 
+	 * From DB2 OS390 v7 SQL Reference: 
+	 * <DL> 
+	 * <DT>SUB 
+	 * <DD>The stored procedure runs as a subroutine. 
+	 * <DT>MAIN 
+	 * <DD>The stored procedure runs as a main routine. 
+	 * </DL> 
+	 * <p> 
+	 * The stored procedure runs as a main routine. 
+	 * The default for PROGRAM TYPE depends on the value of special register 
+	 * CURRENT RULES. The default is: 
+	 * <ul> 
+	 * <li>MAIN when the value is DB2 
+	 * <li>SUB when the value is STD 
+	 * </ul>
+	 * 
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Program Type</em>' attribute.
+	 * @see #setProgramType(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Routine_ProgramType()
+	 * @model
+	 * @generated
+	 */
+   String getProgramType();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getProgramType <em>Program Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Program Type</em>' attribute.
+	 * @see #getProgramType()
+	 * @generated
+	 */
+   void setProgramType(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Orig Schema Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * For rollback purposes, we need to track the original Schema name used to create 
+	 * this routine.
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Orig Schema Name</em>' attribute.
+	 * @see #setOrigSchemaName(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Routine_OrigSchemaName()
+	 * @model
+	 * @generated
+	 */
+   String getOrigSchemaName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getOrigSchemaName <em>Orig Schema Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Orig Schema Name</em>' attribute.
+	 * @see #getOrigSchemaName()
+	 * @generated
+	 */
+   void setOrigSchemaName(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Orig Parm Sig</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * For rollback purposes, we need to track the original parameter signature of this 
+	 * routine.
+	 * 
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Orig Parm Sig</em>' attribute.
+	 * @see #setOrigParmSig(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Routine_OrigParmSig()
+	 * @model
+	 * @generated
+	 */
+   String getOrigParmSig();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine#getOrigParmSig <em>Orig Parm Sig</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Orig Parm Sig</em>' attribute.
+	 * @see #getOrigParmSig()
+	 * @generated
+	 */
+   void setOrigParmSig(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Extended Options</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions}.
+	 * <!-- begin-user-doc -->
+    * <p>
+    * </p>
+    * <!-- end-user-doc -->
+	 * @return the value of the '<em>Extended Options</em>' containment reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Routine_ExtendedOptions()
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions" containment="true" required="true"
+	 * @generated
+	 */
+   EList getExtendedOptions();
+
+	/**
+	 * Returns the value of the '<em><b>Routine Extensions</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2RoutineExtension}.
+	 * <!-- begin-user-doc -->
+    * <p>
+    * Extensions for application specific needs.  The DB2Model has no dependencies
+    * on whoever implements DB2RoutineExtension
+    * </p>
+    * <!-- end-user-doc -->
+	 * @return the value of the '<em>Routine Extensions</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Routine_RoutineExtensions()
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.model.DB2RoutineExtension"
+	 * @generated
+	 */
+   EList getRoutineExtensions();
+
+} // DB2Routine
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2RoutineExtension.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2RoutineExtension.java
new file mode 100644
index 0000000..40a4956
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2RoutineExtension.java
@@ -0,0 +1,32 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: DB2RoutineExtension.java,v 1.5 2007/10/12 23:05:34 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Routine Extension</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * General purpose extension mechanism for adding complext attributes to 
+ * DB2Routines for application specific purposes without adding unnecessary
+ * classes some might not need.  
+ * 
+ * For instance, run time information can be saved about each routine; deploy 
+ * information can be saved about each routine; extra dependency information 
+ * can be stored for each routine, and so on.
+ * <!-- end-model-doc -->
+ *
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2RoutineExtension()
+ * @model interface="true" abstract="true"
+ * @generated
+ */
+public interface DB2RoutineExtension extends SQLObject {
+} // DB2RoutineExtension
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Schema.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Schema.java
new file mode 100644
index 0000000..0d2a0a8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Schema.java
@@ -0,0 +1,213 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Schema</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * SQL Reference for Cross-Platform Development - v1.1
+ * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+ * 
+ * DB2 Schemas (Chapter 1. Concepts 3)
+ * 
+ * A schema is a collection of named objects. Schemas provide a logical classification of objects in the database. A schema can contain tables, views, nicknames, triggers, functions, packages, and other objects.
+ * 
+ * A schema is also an object in the database. It is explicitly created using the CREATE SCHEMA statement with the current user recorded as the schema owner. It can also be implicitly created when another object is created, provided that the user has IMPLICIT_SCHEMA authority.
+ * 
+ * A schema name is used as the high order part of a two-part object name. If the object is specifically qualified with a schema name when created, the object is assigned to that schema. If no schema name is specified when the object is created, the default schema name is used.
+ * 
+ * 
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getAccessPlans <em>Access Plans</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getOlapObjects <em>Olap Objects</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getJars <em>Jars</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getXsrObjects <em>Xsr Objects</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getPackages <em>Packages</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getMasks <em>Masks</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getPermissions <em>Permissions</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getModules <em>Modules</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getGlobalVariables <em>Global Variables</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Schema()
+ * @model
+ * @generated
+ */
+public interface DB2Schema extends Schema {
+	/**
+	 * Returns the value of the '<em><b>Access Plans</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2AccessPlan}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Access Plans</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Access Plans</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Schema_AccessPlans()
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.model.DB2AccessPlan"
+	 * @generated
+	 */
+	EList getAccessPlans();
+
+	/**
+	 * Returns the value of the '<em><b>Olap Objects</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2OLAPObject}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2OLAPObject#getSchema <em>Schema</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Olap Objects</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Olap Objects</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Schema_OlapObjects()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2OLAPObject#getSchema
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.model.DB2OLAPObject" opposite="schema"
+	 * @generated
+	 */
+	EList getOlapObjects();
+
+	/**
+	 * Returns the value of the '<em><b>Jars</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getSchema <em>Schema</em>}'.
+	 * <!-- begin-user-doc -->
+    * <p>
+    * If the meaning of the '<em>Jars</em>' reference list isn't clear,
+    * there really should be more of a description here...
+    * </p>
+    * <!-- end-user-doc -->
+	 * @return the value of the '<em>Jars</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Schema_Jars()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar#getSchema
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar" opposite="schema"
+	 * @generated
+	 */
+   EList getJars();
+
+	/**
+	 * Returns the value of the '<em><b>Xsr Objects</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XSRObject}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XSRObject#getSchema <em>Schema</em>}'.
+	 * <!-- begin-user-doc -->
+    * <p>
+    * If the meaning of the '<em>Xsr Objects</em>' reference list isn't clear,
+    * there really should be more of a description here...
+    * </p>
+    * <!-- end-user-doc -->
+	 * @return the value of the '<em>Xsr Objects</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Schema_XsrObjects()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XSRObject#getSchema
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.model.DB2XSRObject" opposite="schema"
+	 * @generated
+	 */
+   EList getXsrObjects();
+
+	/**
+	 * Returns the value of the '<em><b>Packages</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getSchema <em>Schema</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Packages</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Packages</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Schema_Packages()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Package#getSchema
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.model.DB2Package" opposite="schema"
+	 * @generated
+	 */
+	EList getPackages();
+
+	/**
+	 * Returns the value of the '<em><b>Masks</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getSchema <em>Schema</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Masks</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Masks</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Schema_Masks()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getSchema
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask" opposite="schema"
+	 * @generated
+	 */
+	EList getMasks();
+
+	/**
+	 * Returns the value of the '<em><b>Permissions</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#getSchema <em>Schema</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Permissions</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Permissions</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Schema_Permissions()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#getSchema
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission" opposite="schema"
+	 * @generated
+	 */
+	EList getPermissions();
+
+	/**
+	 * Returns the value of the '<em><b>Modules</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.model.luw.LUWModule}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.luw.LUWModule#getOwningSchema <em>Owning Schema</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Modules</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Modules</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Schema_Modules()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.luw.LUWModule#getOwningSchema
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.model.luw.LUWModule" opposite="owningSchema"
+	 * @generated
+	 */
+	EList getModules();
+
+	/**
+	 * Returns the value of the '<em><b>Global Variables</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.model.luw.LUWGlobalVariable}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.luw.LUWGlobalVariable#getSchema <em>Schema</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Global Variables</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Global Variables</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Schema_GlobalVariables()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.luw.LUWGlobalVariable#getSchema
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.model.luw.LUWGlobalVariable" opposite="schema"
+	 * @generated
+	 */
+	EList getGlobalVariables();
+
+} // DB2Schema
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Source.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Source.java
new file mode 100644
index 0000000..bb2c235
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Source.java
@@ -0,0 +1,195 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.datatools.modelbase.sql.routines.Source;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Source</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Source#getFileName <em>File Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Source#getPackageName <em>Package Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Source#getDb2PackageName <em>Db2 Package Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Source#getLastModified <em>Last Modified</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Source#getSupporting <em>Supporting</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Source#getPrimary <em>Primary</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Source()
+ * @model
+ * @generated
+ */
+public interface DB2Source extends Source {
+	/**
+	 * Returns the value of the '<em><b>File Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * Fully qualified file name where the file is stored on the local file system.
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>File Name</em>' attribute.
+	 * @see #setFileName(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Source_FileName()
+	 * @model
+	 * @generated
+	 */
+	String getFileName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Source#getFileName <em>File Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>File Name</em>' attribute.
+	 * @see #getFileName()
+	 * @generated
+	 */
+	void setFileName(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Package Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * Java package name
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Package Name</em>' attribute.
+	 * @see #setPackageName(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Source_PackageName()
+	 * @model
+	 * @generated
+	 */
+	String getPackageName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Source#getPackageName <em>Package Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Package Name</em>' attribute.
+	 * @see #getPackageName()
+	 * @generated
+	 */
+	void setPackageName(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Db2 Package Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * A package is an object that contains all the sections from a single source file. 
+	 * A section is the compiled form of an SQL statement.  The name of the DB2 package name.  
+	 * 
+	 * In the case of SQLJ stored procedures for LUW and 390, this field contains the 
+	 * location of the serialized file stored on the sever (aka root package name)
+	 * 
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Db2 Package Name</em>' attribute.
+	 * @see #setDb2PackageName(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Source_Db2PackageName()
+	 * @model
+	 * @generated
+	 */
+	String getDb2PackageName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Source#getDb2PackageName <em>Db2 Package Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Db2 Package Name</em>' attribute.
+	 * @see #getDb2PackageName()
+	 * @generated
+	 */
+	void setDb2PackageName(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Last Modified</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * When this source was last modified. The string timestamp should be in the JDBC timestamp 
+	 * escape format. yyyy-mm-dd hh:mm:ss.fffffffff, where ffffffffff indicates nanoseconds.
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Last Modified</em>' attribute.
+	 * @see #setLastModified(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Source_LastModified()
+	 * @model
+	 * @generated
+	 */
+	String getLastModified();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Source#getLastModified <em>Last Modified</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Last Modified</em>' attribute.
+	 * @see #getLastModified()
+	 * @generated
+	 */
+	void setLastModified(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Supporting</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Source}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Source#getPrimary <em>Primary</em>}'.
+	 * <!-- begin-user-doc -->
+    * <p>
+    * If the meaning of the '<em>Supporting</em>' containment reference list isn't clear,
+    * there really should be more of a description here...
+    * </p>
+    * <!-- end-user-doc -->
+	 * @return the value of the '<em>Supporting</em>' containment reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Source_Supporting()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Source#getPrimary
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.model.DB2Source" opposite="primary" containment="true"
+	 * @generated
+	 */
+   EList getSupporting();
+
+	/**
+	 * Returns the value of the '<em><b>Primary</b></em>' container reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Source#getSupporting <em>Supporting</em>}'.
+	 * <!-- begin-user-doc -->
+    * <p>
+    * If the meaning of the '<em>Primary</em>' container reference isn't clear,
+    * there really should be more of a description here...
+    * </p>
+    * <!-- end-user-doc -->
+	 * @return the value of the '<em>Primary</em>' container reference.
+	 * @see #setPrimary(DB2Source)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Source_Primary()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Source#getSupporting
+	 * @model opposite="supporting" required="true"
+	 * @generated
+	 */
+   DB2Source getPrimary();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Source#getPrimary <em>Primary</em>}' container reference.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Primary</em>' container reference.
+	 * @see #getPrimary()
+	 * @generated
+	 */
+   void setPrimary(DB2Source value);
+
+} // DB2Source
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2SystemSchema.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2SystemSchema.java
new file mode 100644
index 0000000..1a1445f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2SystemSchema.java
@@ -0,0 +1,33 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 System Schema</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * SQL Reference for Cross-Platform Development - v1.1
+ * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+ * 
+ * Schemas
+ * 
+ * The objects in a relational database are organized into sets called schemas. A schema provides a logical classification of objects in the database. The schema-name is used as the qualifier of SQL object names such as tables, views, indexes, and triggers. Each database manager supports a set of schemas that are reserved for use by the database manager. Such schemas are called system schemas. User objects must not be created in system schemas.
+ * 
+ * The schema SESSION and all schemas that start with 'SYS' and 'Q' are system schemas. SESSION is always used as the schema name for declared temporary tables.
+ * <!-- end-model-doc -->
+ *
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2SystemSchema()
+ * @model
+ * @generated
+ */
+public interface DB2SystemSchema extends DB2Schema {
+} // DB2SystemSchema
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Table.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Table.java
new file mode 100644
index 0000000..c29f4b4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Table.java
@@ -0,0 +1,290 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.datatools.modelbase.sql.tables.PersistentTable;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Table</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * SQL Reference for Cross-Platform Development - v1.1
+ * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+ * 
+ * Tables (Chapter 1. Concepts 3)
+ * 
+ * Tables are logical structures maintained by the database manager. Tables are made up of columns and rows. There is no inherent order of the rows within a table. At the intersection of every column and row is a specific data item called a value. A column is a set of values of the same type. A row is a sequence of values such that the nth value is a value of the nth column of the table.
+ * 
+ * A base table is created with the CREATE TABLE statement and is used to hold persistent user data. A result table is a set of rows that the database manager selects or selects or generates, directly or indirectly, from one or more base tables. For more information about creating tables, see CREATE TABLE on page 379.
+ * 
+ * A declared temporary table is created with a DECLARE GLOBAL TEMPORARY TABLE statement and is used to hold temporary data on behalf of a single application. This table is dropped implicitly when the application disconnects from the database.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getDataCapture <em>Data Capture</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#isActivateRowAccessControl <em>Activate Row Access Control</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#isActivateColumnAccessControl <em>Activate Column Access Control</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getOrganizeBy <em>Organize By</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getPackages <em>Packages</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getPeriods <em>Periods</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getHistoryTable <em>History Table</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getTemporalTable <em>Temporal Table</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getMasks <em>Masks</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getPermissions <em>Permissions</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Table()
+ * @model
+ * @generated
+ */
+public interface DB2Table extends PersistentTable {
+	/**
+	 * Returns the value of the '<em><b>Data Capture</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.model.DataCaptureType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Data Capture</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Data Capture</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DataCaptureType
+	 * @see #setDataCapture(DataCaptureType)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Table_DataCapture()
+	 * @model
+	 * @generated
+	 */
+	DataCaptureType getDataCapture();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getDataCapture <em>Data Capture</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Data Capture</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DataCaptureType
+	 * @see #getDataCapture()
+	 * @generated
+	 */
+	void setDataCapture(DataCaptureType value);
+
+	/**
+	 * Returns the value of the '<em><b>Activate Row Access Control</b></em>' attribute.
+	 * The default value is <code>"False"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Activate Row Access Control</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Activate Row Access Control</em>' attribute.
+	 * @see #setActivateRowAccessControl(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Table_ActivateRowAccessControl()
+	 * @model default="False"
+	 * @generated
+	 */
+	boolean isActivateRowAccessControl();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#isActivateRowAccessControl <em>Activate Row Access Control</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Activate Row Access Control</em>' attribute.
+	 * @see #isActivateRowAccessControl()
+	 * @generated
+	 */
+	void setActivateRowAccessControl(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Activate Column Access Control</b></em>' attribute.
+	 * The default value is <code>"False"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Activate Column Access Control</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Activate Column Access Control</em>' attribute.
+	 * @see #setActivateColumnAccessControl(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Table_ActivateColumnAccessControl()
+	 * @model default="False"
+	 * @generated
+	 */
+	boolean isActivateColumnAccessControl();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#isActivateColumnAccessControl <em>Activate Column Access Control</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Activate Column Access Control</em>' attribute.
+	 * @see #isActivateColumnAccessControl()
+	 * @generated
+	 */
+	void setActivateColumnAccessControl(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Organize By</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2TableOrganization}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Organize By</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Organize By</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2TableOrganization
+	 * @see #setOrganizeBy(DB2TableOrganization)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Table_OrganizeBy()
+	 * @model
+	 * @generated
+	 */
+	DB2TableOrganization getOrganizeBy();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getOrganizeBy <em>Organize By</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Organize By</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2TableOrganization
+	 * @see #getOrganizeBy()
+	 * @generated
+	 */
+	void setOrganizeBy(DB2TableOrganization value);
+
+	/**
+	 * Returns the value of the '<em><b>Packages</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Package}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Packages</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Packages</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Table_Packages()
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.model.DB2Package"
+	 * @generated
+	 */
+	EList getPackages();
+
+	/**
+	 * Returns the value of the '<em><b>Periods</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Period}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Period#getTable <em>Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Periods</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Periods</em>' containment reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Table_Periods()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Period#getTable
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.model.DB2Period" opposite="table" containment="true"
+	 * @generated
+	 */
+	EList getPeriods();
+
+	/**
+	 * Returns the value of the '<em><b>History Table</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getTemporalTable <em>Temporal Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>History Table</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>History Table</em>' reference.
+	 * @see #setHistoryTable(DB2Table)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Table_HistoryTable()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getTemporalTable
+	 * @model opposite="temporalTable"
+	 * @generated
+	 */
+	DB2Table getHistoryTable();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getHistoryTable <em>History Table</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>History Table</em>' reference.
+	 * @see #getHistoryTable()
+	 * @generated
+	 */
+	void setHistoryTable(DB2Table value);
+
+	/**
+	 * Returns the value of the '<em><b>Temporal Table</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getHistoryTable <em>History Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Temporal Table</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Temporal Table</em>' reference.
+	 * @see #setTemporalTable(DB2Table)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Table_TemporalTable()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getHistoryTable
+	 * @model opposite="historyTable"
+	 * @generated
+	 */
+	DB2Table getTemporalTable();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Table#getTemporalTable <em>Temporal Table</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Temporal Table</em>' reference.
+	 * @see #getTemporalTable()
+	 * @generated
+	 */
+	void setTemporalTable(DB2Table value);
+
+	/**
+	 * Returns the value of the '<em><b>Masks</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getSubjectTable <em>Subject Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Masks</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Masks</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Table_Masks()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask#getSubjectTable
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask" opposite="subjectTable"
+	 * @generated
+	 */
+	EList getMasks();
+
+	/**
+	 * Returns the value of the '<em><b>Permissions</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#getSubjectTable <em>Subject Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Permissions</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Permissions</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Table_Permissions()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission#getSubjectTable
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission" opposite="subjectTable"
+	 * @generated
+	 */
+	EList getPermissions();
+
+} // DB2Table
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2TableOrganization.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2TableOrganization.java
new file mode 100644
index 0000000..2974089
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2TableOrganization.java
@@ -0,0 +1,178 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>DB2 Table Organization</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2TableOrganization()
+ * @model
+ * @generated
+ */
+public final class DB2TableOrganization extends AbstractEnumerator {
+	/**
+	 * The '<em><b>UNSPECIFIED</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>UNSPECIFIED</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #UNSPECIFIED_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int UNSPECIFIED = 0;
+
+	/**
+	 * The '<em><b>ROW</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>ROW</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #ROW_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ROW = 1;
+
+	/**
+	 * The '<em><b>COLUMN</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>COLUMN</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #COLUMN_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int COLUMN = 2;
+
+	/**
+	 * The '<em><b>UNSPECIFIED</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #UNSPECIFIED
+	 * @generated
+	 * @ordered
+	 */
+	public static final DB2TableOrganization UNSPECIFIED_LITERAL = new DB2TableOrganization(UNSPECIFIED, "UNSPECIFIED", "UNSPECIFIED"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>ROW</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #ROW
+	 * @generated
+	 * @ordered
+	 */
+	public static final DB2TableOrganization ROW_LITERAL = new DB2TableOrganization(ROW, "ROW", "ROW"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>COLUMN</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #COLUMN
+	 * @generated
+	 * @ordered
+	 */
+	public static final DB2TableOrganization COLUMN_LITERAL = new DB2TableOrganization(COLUMN, "COLUMN", "COLUMN"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * An array of all the '<em><b>DB2 Table Organization</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final DB2TableOrganization[] VALUES_ARRAY =
+		new DB2TableOrganization[] {
+			UNSPECIFIED_LITERAL,
+			ROW_LITERAL,
+			COLUMN_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>DB2 Table Organization</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>DB2 Table Organization</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static DB2TableOrganization get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			DB2TableOrganization result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>DB2 Table Organization</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static DB2TableOrganization getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			DB2TableOrganization result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>DB2 Table Organization</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static DB2TableOrganization get(int value) {
+		switch (value) {
+			case UNSPECIFIED: return UNSPECIFIED_LITERAL;
+			case ROW: return ROW_LITERAL;
+			case COLUMN: return COLUMN_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private DB2TableOrganization(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //DB2TableOrganization
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Transaction.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Transaction.java
new file mode 100644
index 0000000..8f6c52e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Transaction.java
@@ -0,0 +1,40 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Transaction</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * SQL Reference for Cross-Platform Development - v1.1
+ * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+ * 
+ * Unit of work
+ * 
+ * Like the locking facilities, the recovery facilities of the database managers are similar but not identical. One common property is that each of the database managers provides a means of backing out uncommitted changes made by an application process. This might be necessary in the event of a failure on the part of an application process, or in a deadlock situation. An application process itself, however, can explicitly request that its database changes be backed out. This operation is called rollback.
+ * 
+ * A unit of work (also called a transaction, logical unit of work, or unit of recovery) is a recoverable sequence of operations within an application process. At any time, an application process has at most a single unit of work, but the life of an application process may involve many units of work as a result of commit or rollback operations.
+ * 
+ * Note: In addition to relational databases, the environment in which an SQL program executes may also include other types of recoverable resources. If this is the case, the scope and acceptability of the SQL COMMIT and ROLLBACK statements depend on the environment.
+ * 
+ * A unit of work is started when the first SQL statement in the an application process or the first SQL statement after a commit or rollback is executed. A unit of work is ended by a commit operation, a rollback operation, or the end of an application process. A commit or rollback operation affects only the database changes made within the unit of work it ends. While these changes remain uncommitted, other application processes are unable to perceive them and they can be backed out. 4 Once committed, these database changes are accessible by other application processes and can no longer be backed out by a rollback.
+ * 
+ * The start and end of a unit of work define points of consistency within an application process. For example, a banking transaction might involve the transfer of funds from one account to another. Such a transaction would require that these funds be subtracted from the first account, and added to the second. Following the subtraction step, the data is inconsistent. Only after the funds have been added to the second account is consistency reestablished. When both steps are complete, the commit operation can be used to end the unit of work, thereby making the changes available to other application processes.
+ * <!-- end-model-doc -->
+ *
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Transaction()
+ * @model
+ * @generated
+ */
+public interface DB2Transaction extends SQLObject {
+} // DB2Transaction
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Trigger.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Trigger.java
new file mode 100644
index 0000000..c3dc649
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2Trigger.java
@@ -0,0 +1,114 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Trigger</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * SQL Reference for Cross-Platform Development - v1.1
+ * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+ * 
+ * Triggers (Chapter 1. Concepts 7)
+ * 
+ * A trigger defines a set of actions that are executed automatically whenever a delete, insert, or update operation occurs on a specified base table. When such an SQL operation is executed, the trigger is said to be activated. Triggers can be used along with referential constraints and check constraints to enforce data integrity rules. Triggers are more powerful than constraints because they can also be used to cause updates to other tables, automatically generate or transform values for inserted or updated rows, or invoke functions that perform operations both inside and outside of DB2. For example, instead of preventing an update to a column if the new value exceeds a certain amount, a trigger can substitute a valid value and send a notice to an administrator about the invalid update.
+ * 
+ * Triggers are a useful mechanism to define and enforce transitional business rules that involve different states of the data (for example, salary cannot be increased by more than 10 percent). Such a limit requires comparing the value of a salary before and after an increase. For rules that do not involve more than one state of the data, consider using referential and check constraints. Triggers also move the application logic that is required to enforce business rules into the database, which can result in faster application development and easier maintenance because the business rule is no longer repeated in several applications, but one version is centralized to the trigger. With the logic in the database, for example, the previously mentioned limit on increases to the salary column of a table, DB2 checks the validity of the changes that any application makes to the salary column. In addition, the application programs do not need to be changed when the logic changes.
+ * 
+ * There are a number of criteria that are defined when creating a trigger which are used to determine when a trigger should be activated.
+ *  - The subject table defines the base table for which the trigger is defined.
+ *  - The trigger event defines a specific SQL operation that modifies the subject table. The operation could be delete, insert, or update.
+ *  - The trigger activation time defines whether the trigger should be activated before or after the trigger event is performed on the subject table. The statement that causes a trigger to be activated will include a set of affected rows. These are the rows of the subject table that are being deleted, inserted or updated. The trigger granularity defines whether the actions of the trigger will be performed once for the statement or once for each of the rows in the set of affected rows. The trigger action consists of an optional search condition and a set of SQL statements that are executed whenever the trigger is activated. The SQL statements are only executed if no search condition is specified or the specified search condition evaluates to true.
+ * 
+ * The triggered action may refer to the values in the set of affected rows. This is supported through the use of transition variables. Transition variables use the names of the columns in the subject table qualified by a specified name that identifies whether the reference is to the old value (prior to the update) or the new value (after the update). The new value can also be changed using the SET transition-variable statement in before update or insert triggers. Another means of referring to the values in the set of affected rows is using transition tables.
+ * 
+ * Transition tables also use the names of the columns of the subject table but have a name specified that allows the complete set of affected rows to be treated as a table. Transition tables can only be used in after triggers. Separate transition tables can be defined for old and new values. Multiple triggers can be specified for a combination of table, event, or activation time. The order in which the triggers are activated is the same as the order in which they were created. Thus, the most recently created trigger will be the last trigger activated. The activation of a trigger may cause trigger cascading. This is the result of the activation of one trigger that executes SQL statements that cause the activation of other triggers or even the same trigger again. The triggered actions may also cause updates as a result of the original modification, which may result in the activation of additional triggers. With trigger cascading, a significant chain of triggers may be activated causing significant change to the database as a result of a single delete, insert or update statement.
+ * 
+ * The actions performed in the trigger are considered to be part of the operation that caused the trigger to be executed.
+ *  - The database manager ensures that the operation and the triggers executed as a result of that operation either all complete or are backed out. Operations that occurred prior to the triggering operation are not affected.
+ *  - The database manager effectively checks all constraints (except for a constraint with a RESTRICT delete rule) after the operation and the associated triggers have been executed.
+ * 
+ * Triggers (Appendix E. SQLSTATE values -- common return codes)
+ * 
+ * SQLSTATE 51037 - The operation is not allowed because a trigger has been marked inoperative.
+ * 
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Trigger#isOperative <em>Operative</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Trigger#isSecured <em>Secured</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Trigger()
+ * @model
+ * @generated
+ */
+public interface DB2Trigger extends Trigger, DB2AccessPlan {
+	/**
+	 * Returns the value of the '<em><b>Operative</b></em>' attribute.
+	 * The default value is <code>"true"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Operative</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Operative</em>' attribute.
+	 * @see #setOperative(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Trigger_Operative()
+	 * @model default="true"
+	 * @generated
+	 */
+	boolean isOperative();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Trigger#isOperative <em>Operative</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Operative</em>' attribute.
+	 * @see #isOperative()
+	 * @generated
+	 */
+	void setOperative(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Secured</b></em>' attribute.
+	 * The default value is <code>"False"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Secured</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Secured</em>' attribute.
+	 * @see #setSecured(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2Trigger_Secured()
+	 * @model default="False"
+	 * @generated
+	 */
+	boolean isSecured();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Trigger#isSecured <em>Secured</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Secured</em>' attribute.
+	 * @see #isSecured()
+	 * @generated
+	 */
+	void setSecured(boolean value);
+
+} // DB2Trigger
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2UniqueConstraintExtension.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2UniqueConstraintExtension.java
new file mode 100644
index 0000000..f47b845
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2UniqueConstraintExtension.java
@@ -0,0 +1,56 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.ObjectExtension;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 Unique Constraint Extension</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2UniqueConstraintExtension#isBusPeriodWithoutOverlap <em>Bus Period Without Overlap</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2UniqueConstraintExtension()
+ * @model
+ * @generated
+ */
+public interface DB2UniqueConstraintExtension extends SQLObject, ObjectExtension {
+	/**
+	 * Returns the value of the '<em><b>Bus Period Without Overlap</b></em>' attribute.
+	 * The default value is <code>"False"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Bus Period Without Overlap</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Bus Period Without Overlap</em>' attribute.
+	 * @see #setBusPeriodWithoutOverlap(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2UniqueConstraintExtension_BusPeriodWithoutOverlap()
+	 * @model default="False"
+	 * @generated
+	 */
+	boolean isBusPeriodWithoutOverlap();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2UniqueConstraintExtension#isBusPeriodWithoutOverlap <em>Bus Period Without Overlap</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Bus Period Without Overlap</em>' attribute.
+	 * @see #isBusPeriodWithoutOverlap()
+	 * @generated
+	 */
+	void setBusPeriodWithoutOverlap(boolean value);
+
+} // DB2UniqueConstraintExtension
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2UserDefinedFunction.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2UserDefinedFunction.java
new file mode 100644
index 0000000..33c3122
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2UserDefinedFunction.java
@@ -0,0 +1,29 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+
+import org.eclipse.datatools.modelbase.sql.routines.UserDefinedFunction;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 User Defined Function</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Inherits both DB2Model::DB2Function (EMF provides a pseudo inherit of the DB2Function even  
+ * though it is defined as an interface) and SQLModel::Method.
+ * <!-- end-model-doc -->
+ *
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2UserDefinedFunction()
+ * @model
+ * @generated
+ */
+public interface DB2UserDefinedFunction extends UserDefinedFunction, DB2Function {
+} // DB2UserDefinedFunction
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2View.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2View.java
new file mode 100644
index 0000000..a420772
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2View.java
@@ -0,0 +1,70 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2 View</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * SQL Reference for Cross-Platform Development - v1.1
+ * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+ * 
+ * Views
+ * 
+ * A view provides an alternative way of looking at the data in one or more tables. A view is a named specification of a result table. The specification is a SELECT statement that is effectively executed whenever the view is referenced in an SQL statement. Thus, a view can be thought of as having columns and rows just like a base table. For retrieval, all views can be used just like base tables. Whether a view can be used in an insert, update, or delete operation depends on its definition.
+ * 
+ * An index cannot be created for a view. However, an index created for a table on which a view is based may improve the performance of operations on the view. When the column of a view is directly derived from a column of a base table, that column inherits any constraints that apply to the column of the base table. For example, if a view includes a foreign key of its base table, INSERT and UPDATE operations using that view are subject to the same referential constraint as the base table. Likewise, if the base table of a view is a parent table, DELETE operations using that view are subject to the same rules as DELETE operations on the base table.
+ * 
+ * Views (Appendix E. SQLSTATE values -- common return codes)
+ * 
+ * SQLSTATE:51024 A view cannot be used, because it has been marked inoperative.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2View#isOperative <em>Operative</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2View()
+ * @model
+ * @generated
+ */
+public interface DB2View extends ViewTable {
+	/**
+	 * Returns the value of the '<em><b>Operative</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Operative</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Operative</em>' attribute.
+	 * @see #setOperative(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2View_Operative()
+	 * @model
+	 * @generated
+	 */
+	boolean isOperative();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2View#isOperative <em>Operative</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Operative</em>' attribute.
+	 * @see #isOperative()
+	 * @generated
+	 */
+	void setOperative(boolean value);
+
+} // DB2View
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2XMLSchema.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2XMLSchema.java
new file mode 100644
index 0000000..cc6eb2b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2XMLSchema.java
@@ -0,0 +1,114 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: DB2XMLSchema.java,v 1.5 2007/01/15 18:40:06 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2XML Schema</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * XML Schema comprises of one or more XMLSchema documents.  Users register XML schemas and not just schema documents (from LI2934)
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchema#getDecomposition <em>Decomposition</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchema#getStatus <em>Status</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchema#getXmlSchemaDocs <em>Xml Schema Docs</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2XMLSchema()
+ * @model
+ * @generated
+ */
+public interface DB2XMLSchema extends DB2XSRObject {
+	/**
+	 * Returns the value of the '<em><b>Decomposition</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDecomposition}.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * The states can either be Yes, No or Inoperative and thus need to be represented by an Enumeration instead of a boolean. Represented in the database:
+	 * Y=enabled
+	 * N=not enabled
+	 * X=inoperative
+	 * 
+	 * Use enumerated types for the three states.
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Decomposition</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDecomposition
+	 * @see #setDecomposition(DB2XMLSchemaDecomposition)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2XMLSchema_Decomposition()
+	 * @model
+	 * @generated
+	 */
+   DB2XMLSchemaDecomposition getDecomposition();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchema#getDecomposition <em>Decomposition</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Decomposition</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDecomposition
+	 * @see #getDecomposition()
+	 * @generated
+	 */
+   void setDecomposition(DB2XMLSchemaDecomposition value);
+
+	/**
+	 * Returns the value of the '<em><b>Status</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaStatus}.
+	 * <!-- begin-user-doc -->
+    * <p>
+    * If the meaning of the '<em>Status</em>' attribute isn't clear,
+    * there really should be more of a description here...
+    * </p>
+    * <!-- end-user-doc -->
+	 * @return the value of the '<em>Status</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaStatus
+	 * @see #setStatus(DB2XMLSchemaStatus)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2XMLSchema_Status()
+	 * @model
+	 * @generated
+	 */
+   DB2XMLSchemaStatus getStatus();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchema#getStatus <em>Status</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Status</em>' attribute.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaStatus
+	 * @see #getStatus()
+	 * @generated
+	 */
+   void setStatus(DB2XMLSchemaStatus value);
+
+	/**
+	 * Returns the value of the '<em><b>Xml Schema Docs</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument#getXmlSchema <em>Xml Schema</em>}'.
+	 * <!-- begin-user-doc -->
+    * <p>
+    * If the meaning of the '<em>Xml Schema Docs</em>' containment reference list isn't clear,
+    * there really should be more of a description here...
+    * </p>
+    * <!-- end-user-doc -->
+	 * @return the value of the '<em>Xml Schema Docs</em>' containment reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2XMLSchema_XmlSchemaDocs()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument#getXmlSchema
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument" opposite="xmlSchema" containment="true" required="true"
+	 * @generated
+	 */
+   EList getXmlSchemaDocs();
+
+} // DB2XMLSchema
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2XMLSchemaDecomposition.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2XMLSchemaDecomposition.java
new file mode 100644
index 0000000..fc2b80e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2XMLSchemaDecomposition.java
@@ -0,0 +1,184 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: DB2XMLSchemaDecomposition.java,v 1.4 2009/01/31 00:22:40 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>DB2XML Schema Decomposition</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * The states can either be Yes, No or Inoperative and thus need to be represented by an Enumeration instead of a boolean. Represented in the database:
+ * Y=enabled
+ * N=not enabled
+ * X=inoperative
+ * <!-- end-model-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2XMLSchemaDecomposition()
+ * @model
+ * @generated
+ */
+public final class DB2XMLSchemaDecomposition extends AbstractEnumerator {
+	/**
+	 * The '<em><b>ENABLED</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #ENABLED_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ENABLED = 0;
+
+	/**
+	 * The '<em><b>NOT ENABLED</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #NOT_ENABLED_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int NOT_ENABLED = 1;
+
+	/**
+	 * The '<em><b>INOPERATIVE</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #INOPERATIVE_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int INOPERATIVE = 2;
+
+	/**
+	 * The '<em><b>ENABLED</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>ENABLED</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #ENABLED
+	 * @generated
+	 * @ordered
+	 */
+	public static final DB2XMLSchemaDecomposition ENABLED_LITERAL = new DB2XMLSchemaDecomposition(ENABLED, "ENABLED", "ENABLED"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>NOT ENABLED</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>NOT ENABLED</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #NOT_ENABLED
+	 * @generated
+	 * @ordered
+	 */
+	public static final DB2XMLSchemaDecomposition NOT_ENABLED_LITERAL = new DB2XMLSchemaDecomposition(NOT_ENABLED, "NOT_ENABLED", "NOT_ENABLED"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>INOPERATIVE</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>INOPERATIVE</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #INOPERATIVE
+	 * @generated
+	 * @ordered
+	 */
+	public static final DB2XMLSchemaDecomposition INOPERATIVE_LITERAL = new DB2XMLSchemaDecomposition(INOPERATIVE, "INOPERATIVE", "INOPERATIVE"); //$NON-NLS-1$
+
+	/**
+	 * An array of all the '<em><b>DB2XML Schema Decomposition</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final DB2XMLSchemaDecomposition[] VALUES_ARRAY =
+		new DB2XMLSchemaDecomposition[] {
+			ENABLED_LITERAL,
+			NOT_ENABLED_LITERAL,
+			INOPERATIVE_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>DB2XML Schema Decomposition</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>DB2XML Schema Decomposition</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static DB2XMLSchemaDecomposition get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			DB2XMLSchemaDecomposition result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>DB2XML Schema Decomposition</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static DB2XMLSchemaDecomposition getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			DB2XMLSchemaDecomposition result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>DB2XML Schema Decomposition</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static DB2XMLSchemaDecomposition get(int value) {
+		switch (value) {
+			case ENABLED: return ENABLED_LITERAL;
+			case NOT_ENABLED: return NOT_ENABLED_LITERAL;
+			case INOPERATIVE: return INOPERATIVE_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private DB2XMLSchemaDecomposition(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //DB2XMLSchemaDecomposition
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2XMLSchemaDocProperties.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2XMLSchemaDocProperties.java
new file mode 100644
index 0000000..80f0c14
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2XMLSchemaDocProperties.java
@@ -0,0 +1,86 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: DB2XMLSchemaDocProperties.java,v 1.5 2007/10/12 23:05:34 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2XML Schema Doc Properties</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Users can specify properties for each XML Schema document and these are stored as a BLOB(5M) in the XSR. Properties come as a name and value pair.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocProperties#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocProperties#getXmlSchemaDoc <em>Xml Schema Doc</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2XMLSchemaDocProperties()
+ * @model
+ * @generated
+ */
+public interface DB2XMLSchemaDocProperties extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * value of the property.
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Value</em>' attribute.
+	 * @see #setValue(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2XMLSchemaDocProperties_Value()
+	 * @model
+	 * @generated
+	 */
+   String getValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocProperties#getValue <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Value</em>' attribute.
+	 * @see #getValue()
+	 * @generated
+	 */
+   void setValue(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Xml Schema Doc</b></em>' container reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument#getXmlSchemaDocProperties <em>Xml Schema Doc Properties</em>}'.
+	 * <!-- begin-user-doc -->
+    * <p>
+    * If the meaning of the '<em>Xml Schema Doc</em>' container reference isn't clear,
+    * there really should be more of a description here...
+    * </p>
+    * <!-- end-user-doc -->
+	 * @return the value of the '<em>Xml Schema Doc</em>' container reference.
+	 * @see #setXmlSchemaDoc(DB2XMLSchemaDocument)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2XMLSchemaDocProperties_XmlSchemaDoc()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument#getXmlSchemaDocProperties
+	 * @model opposite="xmlSchemaDocProperties" required="true"
+	 * @generated
+	 */
+   DB2XMLSchemaDocument getXmlSchemaDoc();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocProperties#getXmlSchemaDoc <em>Xml Schema Doc</em>}' container reference.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Xml Schema Doc</em>' container reference.
+	 * @see #getXmlSchemaDoc()
+	 * @generated
+	 */
+   void setXmlSchemaDoc(DB2XMLSchemaDocument value);
+
+} // DB2XMLSchemaDocProperties
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2XMLSchemaDocument.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2XMLSchemaDocument.java
new file mode 100644
index 0000000..ee00906
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2XMLSchemaDocument.java
@@ -0,0 +1,185 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: DB2XMLSchemaDocument.java,v 1.5 2007/10/12 23:05:34 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2XML Schema Document</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * XML Schema documents are used to validate XML documents that are stored in XML type columns.
+ * 
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument#getFileName <em>File Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument#getSchemaLocation <em>Schema Location</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument#getTargetNamespace <em>Target Namespace</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument#isPrimary <em>Primary</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument#getXmlSchema <em>Xml Schema</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument#getXmlSchemaDocProperties <em>Xml Schema Doc Properties</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2XMLSchemaDocument()
+ * @model
+ * @generated
+ */
+public interface DB2XMLSchemaDocument extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>File Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * The name of the .xsd file
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>File Name</em>' attribute.
+	 * @see #setFileName(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2XMLSchemaDocument_FileName()
+	 * @model
+	 * @generated
+	 */
+   String getFileName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument#getFileName <em>File Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>File Name</em>' attribute.
+	 * @see #getFileName()
+	 * @generated
+	 */
+   void setFileName(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Schema Location</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * Specifies the URL of the xml schema document
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Schema Location</em>' attribute.
+	 * @see #setSchemaLocation(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2XMLSchemaDocument_SchemaLocation()
+	 * @model
+	 * @generated
+	 */
+   String getSchemaLocation();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument#getSchemaLocation <em>Schema Location</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Schema Location</em>' attribute.
+	 * @see #getSchemaLocation()
+	 * @generated
+	 */
+   void setSchemaLocation(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Target Namespace</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * Namespace of the schema document
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Target Namespace</em>' attribute.
+	 * @see #setTargetNamespace(String)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2XMLSchemaDocument_TargetNamespace()
+	 * @model
+	 * @generated
+	 */
+   String getTargetNamespace();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument#getTargetNamespace <em>Target Namespace</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Target Namespace</em>' attribute.
+	 * @see #getTargetNamespace()
+	 * @generated
+	 */
+   void setTargetNamespace(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Primary</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * Each XML schema has 1 primary xml schema document. The targetNamespace and the schemaLocation of the primary document is assigned to the XML schema
+	 * <!-- end-model-doc -->
+	 * @return the value of the '<em>Primary</em>' attribute.
+	 * @see #setPrimary(boolean)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2XMLSchemaDocument_Primary()
+	 * @model
+	 * @generated
+	 */
+   boolean isPrimary();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument#isPrimary <em>Primary</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Primary</em>' attribute.
+	 * @see #isPrimary()
+	 * @generated
+	 */
+   void setPrimary(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Xml Schema</b></em>' container reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchema#getXmlSchemaDocs <em>Xml Schema Docs</em>}'.
+	 * <!-- begin-user-doc -->
+    * <p>
+    * If the meaning of the '<em>Xml Schema</em>' container reference isn't clear,
+    * there really should be more of a description here...
+    * </p>
+    * <!-- end-user-doc -->
+	 * @return the value of the '<em>Xml Schema</em>' container reference.
+	 * @see #setXmlSchema(DB2XMLSchema)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2XMLSchemaDocument_XmlSchema()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchema#getXmlSchemaDocs
+	 * @model opposite="xmlSchemaDocs" required="true"
+	 * @generated
+	 */
+   DB2XMLSchema getXmlSchema();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument#getXmlSchema <em>Xml Schema</em>}' container reference.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Xml Schema</em>' container reference.
+	 * @see #getXmlSchema()
+	 * @generated
+	 */
+   void setXmlSchema(DB2XMLSchema value);
+
+	/**
+	 * Returns the value of the '<em><b>Xml Schema Doc Properties</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocProperties}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocProperties#getXmlSchemaDoc <em>Xml Schema Doc</em>}'.
+	 * <!-- begin-user-doc -->
+    * <p>
+    * If the meaning of the '<em>Xml Schema Doc Properties</em>' containment reference list isn't clear,
+    * there really should be more of a description here...
+    * </p>
+    * <!-- end-user-doc -->
+	 * @return the value of the '<em>Xml Schema Doc Properties</em>' containment reference list.
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2XMLSchemaDocument_XmlSchemaDocProperties()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocProperties#getXmlSchemaDoc
+	 * @model type="org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocProperties" opposite="xmlSchemaDoc" containment="true" required="true"
+	 * @generated
+	 */
+   EList getXmlSchemaDocProperties();
+
+} // DB2XMLSchemaDocument
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2XMLSchemaStatus.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2XMLSchemaStatus.java
new file mode 100644
index 0000000..e65f38a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2XMLSchemaStatus.java
@@ -0,0 +1,214 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: DB2XMLSchemaStatus.java,v 1.4 2009/01/31 00:22:40 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>DB2XML Schema Status</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * From LUW v9.1 LI2076 in the SQL reference changes section, XSROBJECT catalog table, STATUS colum, the following indicates the registration status. 
+ * C=COMPLETE
+ * I=INCOMPLETE
+ * R=REPLACE
+ * T=TEMPORARY
+ * 
+ * 
+ * <!-- end-model-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2XMLSchemaStatus()
+ * @model
+ * @generated
+ */
+public final class DB2XMLSchemaStatus extends AbstractEnumerator {
+	/**
+	 * The '<em><b>COMPLETE</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #COMPLETE_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int COMPLETE = 0;
+
+	/**
+	 * The '<em><b>INCOMPLETE</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #INCOMPLETE_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int INCOMPLETE = 1;
+
+	/**
+	 * The '<em><b>REPLACE</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #REPLACE_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int REPLACE = 2;
+
+	/**
+	 * The '<em><b>TEMPORARY</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #TEMPORARY_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int TEMPORARY = 3;
+
+	/**
+	 * The '<em><b>COMPLETE</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>COMPLETE</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #COMPLETE
+	 * @generated
+	 * @ordered
+	 */
+	public static final DB2XMLSchemaStatus COMPLETE_LITERAL = new DB2XMLSchemaStatus(COMPLETE, "COMPLETE", "COMPLETE"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>INCOMPLETE</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>INCOMPLETE</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #INCOMPLETE
+	 * @generated
+	 * @ordered
+	 */
+	public static final DB2XMLSchemaStatus INCOMPLETE_LITERAL = new DB2XMLSchemaStatus(INCOMPLETE, "INCOMPLETE", "INCOMPLETE"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>REPLACE</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>REPLACE</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #REPLACE
+	 * @generated
+	 * @ordered
+	 */
+	public static final DB2XMLSchemaStatus REPLACE_LITERAL = new DB2XMLSchemaStatus(REPLACE, "REPLACE", "REPLACE"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>TEMPORARY</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>TEMPORARY</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #TEMPORARY
+	 * @generated
+	 * @ordered
+	 */
+	public static final DB2XMLSchemaStatus TEMPORARY_LITERAL = new DB2XMLSchemaStatus(TEMPORARY, "TEMPORARY", "TEMPORARY"); //$NON-NLS-1$
+
+	/**
+	 * An array of all the '<em><b>DB2XML Schema Status</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final DB2XMLSchemaStatus[] VALUES_ARRAY =
+		new DB2XMLSchemaStatus[] {
+			COMPLETE_LITERAL,
+			INCOMPLETE_LITERAL,
+			REPLACE_LITERAL,
+			TEMPORARY_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>DB2XML Schema Status</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>DB2XML Schema Status</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static DB2XMLSchemaStatus get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			DB2XMLSchemaStatus result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>DB2XML Schema Status</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static DB2XMLSchemaStatus getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			DB2XMLSchemaStatus result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>DB2XML Schema Status</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static DB2XMLSchemaStatus get(int value) {
+		switch (value) {
+			case COMPLETE: return COMPLETE_LITERAL;
+			case INCOMPLETE: return INCOMPLETE_LITERAL;
+			case REPLACE: return REPLACE_LITERAL;
+			case TEMPORARY: return TEMPORARY_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private DB2XMLSchemaStatus(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //DB2XMLSchemaStatus
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2XSRObject.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2XSRObject.java
new file mode 100644
index 0000000..7676b82
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DB2XSRObject.java
@@ -0,0 +1,60 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: DB2XSRObject.java,v 1.6 2007/10/12 23:05:35 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>DB2XSR Object</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Because the database needs to create its own copy of the XML schemas, DTDs and external entities it is using, a XML Schema repository (XSR) is defined and used to hold that information.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XSRObject#getSchema <em>Schema</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2XSRObject()
+ * @model
+ * @generated
+ */
+public interface DB2XSRObject extends SQLObject {
+	/**
+	 * Returns the value of the '<em><b>Schema</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getXsrObjects <em>Xsr Objects</em>}'.
+	 * <!-- begin-user-doc -->
+    * <p>
+    * If the meaning of the '<em>Schema</em>' reference isn't clear,
+    * there really should be more of a description here...
+    * </p>
+    * <!-- end-user-doc -->
+	 * @return the value of the '<em>Schema</em>' reference.
+	 * @see #setSchema(DB2Schema)
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDB2XSRObject_Schema()
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema#getXsrObjects
+	 * @model opposite="xsrObjects" required="true"
+	 * @generated
+	 */
+   DB2Schema getSchema();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ibm.db2.model.DB2XSRObject#getSchema <em>Schema</em>}' reference.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Schema</em>' reference.
+	 * @see #getSchema()
+	 * @generated
+	 */
+   void setSchema(DB2Schema value);
+
+} // DB2XSRObject
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DataCaptureType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DataCaptureType.java
new file mode 100644
index 0000000..41f49cb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/DataCaptureType.java
@@ -0,0 +1,151 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: DataCaptureType.java,v 1.7 2009/01/31 00:22:40 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Data Capture Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getDataCaptureType()
+ * @model
+ * @generated
+ */
+public final class DataCaptureType extends AbstractEnumerator {
+	/**
+	 * The '<em><b>NONE</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #NONE_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int NONE = 0;
+
+	/**
+	 * The '<em><b>CHANGES</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #CHANGES_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int CHANGES = 1;
+
+	/**
+	 * The '<em><b>NONE</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>NONE</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #NONE
+	 * @generated
+	 * @ordered
+	 */
+	public static final DataCaptureType NONE_LITERAL = new DataCaptureType(NONE, "NONE", "NONE"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>CHANGES</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>CHANGES</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #CHANGES
+	 * @generated
+	 * @ordered
+	 */
+	public static final DataCaptureType CHANGES_LITERAL = new DataCaptureType(CHANGES, "CHANGES", "CHANGES"); //$NON-NLS-1$
+
+	/**
+	 * An array of all the '<em><b>Data Capture Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final DataCaptureType[] VALUES_ARRAY =
+		new DataCaptureType[] {
+			NONE_LITERAL,
+			CHANGES_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Data Capture Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Data Capture Type</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static DataCaptureType get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			DataCaptureType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Data Capture Type</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static DataCaptureType getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			DataCaptureType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Data Capture Type</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static DataCaptureType get(int value) {
+		switch (value) {
+			case NONE: return NONE_LITERAL;
+			case CHANGES: return CHANGES_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private DataCaptureType(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //DataCaptureType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/GenerateType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/GenerateType.java
new file mode 100644
index 0000000..749a4b4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/GenerateType.java
@@ -0,0 +1,151 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: GenerateType.java,v 1.5 2009/01/31 00:22:40 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Generate Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getGenerateType()
+ * @model
+ * @generated
+ */
+public final class GenerateType extends AbstractEnumerator {
+	/**
+	 * The '<em><b>ALWAYS</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #ALWAYS_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ALWAYS = 0;
+
+	/**
+	 * The '<em><b>BY DEFAULT</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #BY_DEFAULT_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int BY_DEFAULT = 1;
+
+	/**
+	 * The '<em><b>ALWAYS</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>ALWAYS</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #ALWAYS
+	 * @generated
+	 * @ordered
+	 */
+	public static final GenerateType ALWAYS_LITERAL = new GenerateType(ALWAYS, "ALWAYS", "ALWAYS"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>BY DEFAULT</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>BY DEFAULT</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #BY_DEFAULT
+	 * @generated
+	 * @ordered
+	 */
+	public static final GenerateType BY_DEFAULT_LITERAL = new GenerateType(BY_DEFAULT, "BY_DEFAULT", "BY_DEFAULT"); //$NON-NLS-1$
+
+	/**
+	 * An array of all the '<em><b>Generate Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final GenerateType[] VALUES_ARRAY =
+		new GenerateType[] {
+			ALWAYS_LITERAL,
+			BY_DEFAULT_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Generate Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Generate Type</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static GenerateType get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			GenerateType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Generate Type</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static GenerateType getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			GenerateType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Generate Type</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static GenerateType get(int value) {
+		switch (value) {
+			case ALWAYS: return ALWAYS_LITERAL;
+			case BY_DEFAULT: return BY_DEFAULT_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private GenerateType(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //GenerateType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/IsolationLevelType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/IsolationLevelType.java
new file mode 100644
index 0000000..bd230a5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/IsolationLevelType.java
@@ -0,0 +1,250 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: IsolationLevelType.java,v 1.9 2009/01/31 00:22:40 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Isolation Level Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * SQL Reference for Cross-Platform Development - v1.1
+ * http://www7b.software.ibm.com/dmdd/library/techarticle/0206sqlref/0206sqlref.html
+ * 
+ * Isolation level
+ * 
+ * The isolation level used during the execution of SQL statement determines the degree to which the application process is isolated from concurrently executing application processes. Thus, when application process P executes an SQL statement, the isolation level determines:
+ *  - The degree to which rows retrieved by P are available to other concurrently executing application processes.
+ *  - The degree to which database changes made by concurrently executing application processes can affect P.
+ * 
+ * The isolation level can be explicitly specified on a DELETE, INSERT, SELECT INTO, UPDATE, or select-statement. If the isolation level is not explicitly specified, the isolation level used when the SQL statement is executed  is the default isolation level.
+ * 
+ * Each product provides a product-specific means of explicitly specifying a default isolation level:
+ *  - For static SQL statements, the default isolation level is the isolation level specified when the containing package, procedure, function, or trigger was created.
+ *  - For dynamic SQL statements, the default isolation level is isolation level specified for the application process.
+ * 
+ * Products support these isolation levels by automatically locking the appropriate data. Depending on the type of lock, this limits or prevents access to the data by concurrent application processes. Each database manager supports at least two types of locks:
+ *  - Share: Limits concurrent application processes to read-only operations on the data.
+ *  - Exclusive Prevents concurrent application processes from accessing the data in any way except for application processes with an isolation level of uncommitted read, which can read but not modify the data. (See
+ * " Uncommitted read" on page 18.)
+ * 
+ * The isolation levels are:
+ * 
+ * Repeatable read
+ * The Repeatable Read (RR) isolation level ensures that:
+ *  - Any row read during a unit of work is not changed by other application processes until the unit of work is complete.
+ *  - Any row changed by another application process cannot be read until it is committed by that application process.
+ * In addition to any exclusive locks, an application process running at level RR acquires at least share locks on all the rows it reads. Furthermore, the locking is performed so that the application process is completely isolated from the effects of concurrent application processes. In the SQL 1999 Core standard, Repeatable Read is called Serializable.
+ * 
+ * Read stability
+ * Like level RR, the Read Stability (RS) isolation level ensures that:
+ *  - Any row read during a unit of work is not changed by other application processes until the unit of work is complete.
+ *  - Any row changed by another application process cannot be read until it is committed by that application process.
+ * Unlike RR, RS does not completely isolate the application process from the effects of concurrent application processes. At level RS, application processes that issue the same query more than once in the same unit of work might see additional rows. These additional rows are called phantom rows.
+ * 
+ * Cursor stability
+ * Like levels RR and RS, the Cursor Stability (CS) isolation level ensures that any row changed by another application process cannot be read until it is committed by that application process. Unlike RR and RS, level CS only ensures that the current row of every updatable cursor is not changed by other application processes. Thus, the rows read during a unit of work can be changed by other application processes. In addition to any exclusive locks, an application process running at level CS has at least a share lock for the current row of every one of its open cursors. In the SQL 1999 Core standard, Cursor Stability is called Read Committed.
+ * 
+ * Uncommitted read
+ * For a SELECT INTO, FETCH with a read-only cursor, subquery, or subselect used in an INSERT statement, the Uncommitted Read (UR) isolation level allows:
+ *  - Any row read during the unit of work to be changed by other application processes.
+ *  - Any row changed by another application process to be read even if the change has not been committed by that application process.
+ * For other operations, the rules of level CS apply. In DB2 UDB for z/OS and OS/390, UR is escalated to CS for a subquery used in a DELETE or UPDATE statement, or for a subselect used in an INSERT statement. In the SQL 1999 Core standard, Uncommitted Read is called Read Uncommitted.
+ * 
+ * <!-- end-model-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getIsolationLevelType()
+ * @model
+ * @generated
+ */
+public final class IsolationLevelType extends AbstractEnumerator {
+	/**
+	 * The '<em><b>REPEATABLE READ</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #REPEATABLE_READ_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int REPEATABLE_READ = 0;
+
+	/**
+	 * The '<em><b>READ STABILITY</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #READ_STABILITY_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int READ_STABILITY = 1;
+
+	/**
+	 * The '<em><b>CURSOR STABILITY</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #CURSOR_STABILITY_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int CURSOR_STABILITY = 2;
+
+	/**
+	 * The '<em><b>UNCOMMITTED READ</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #UNCOMMITTED_READ_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int UNCOMMITTED_READ = 3;
+
+	/**
+	 * The '<em><b>REPEATABLE READ</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>REPEATABLE READ</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #REPEATABLE_READ
+	 * @generated
+	 * @ordered
+	 */
+	public static final IsolationLevelType REPEATABLE_READ_LITERAL = new IsolationLevelType(REPEATABLE_READ, "REPEATABLE_READ", "REPEATABLE_READ"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>READ STABILITY</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>READ STABILITY</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #READ_STABILITY
+	 * @generated
+	 * @ordered
+	 */
+	public static final IsolationLevelType READ_STABILITY_LITERAL = new IsolationLevelType(READ_STABILITY, "READ_STABILITY", "READ_STABILITY"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>CURSOR STABILITY</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>CURSOR STABILITY</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #CURSOR_STABILITY
+	 * @generated
+	 * @ordered
+	 */
+	public static final IsolationLevelType CURSOR_STABILITY_LITERAL = new IsolationLevelType(CURSOR_STABILITY, "CURSOR_STABILITY", "CURSOR_STABILITY"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>UNCOMMITTED READ</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>UNCOMMITTED READ</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #UNCOMMITTED_READ
+	 * @generated
+	 * @ordered
+	 */
+	public static final IsolationLevelType UNCOMMITTED_READ_LITERAL = new IsolationLevelType(UNCOMMITTED_READ, "UNCOMMITTED_READ", "UNCOMMITTED_READ"); //$NON-NLS-1$
+
+	/**
+	 * An array of all the '<em><b>Isolation Level Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final IsolationLevelType[] VALUES_ARRAY =
+		new IsolationLevelType[] {
+			REPEATABLE_READ_LITERAL,
+			READ_STABILITY_LITERAL,
+			CURSOR_STABILITY_LITERAL,
+			UNCOMMITTED_READ_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Isolation Level Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Isolation Level Type</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static IsolationLevelType get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			IsolationLevelType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Isolation Level Type</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static IsolationLevelType getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			IsolationLevelType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Isolation Level Type</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static IsolationLevelType get(int value) {
+		switch (value) {
+			case REPEATABLE_READ: return REPEATABLE_READ_LITERAL;
+			case READ_STABILITY: return READ_STABILITY_LITERAL;
+			case CURSOR_STABILITY: return CURSOR_STABILITY_LITERAL;
+			case UNCOMMITTED_READ: return UNCOMMITTED_READ_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private IsolationLevelType(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //IsolationLevelType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/OriginType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/OriginType.java
new file mode 100644
index 0000000..e8f9e5d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/OriginType.java
@@ -0,0 +1,178 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: OriginType.java,v 1.4 2009/01/31 00:22:40 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Origin Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getOriginType()
+ * @model
+ * @generated
+ */
+public final class OriginType extends AbstractEnumerator {
+	/**
+	 * The '<em><b>NONE</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #NONE_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int NONE = 0;
+
+	/**
+	 * The '<em><b>TEMPLATE</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #TEMPLATE_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int TEMPLATE = 1;
+
+	/**
+	 * The '<em><b>SOURCE</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #SOURCE_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int SOURCE = 2;
+
+	/**
+	 * The '<em><b>NONE</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>NONE</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #NONE
+	 * @generated
+	 * @ordered
+	 */
+	public static final OriginType NONE_LITERAL = new OriginType(NONE, "NONE", "NONE"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>TEMPLATE</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>TEMPLATE</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #TEMPLATE
+	 * @generated
+	 * @ordered
+	 */
+	public static final OriginType TEMPLATE_LITERAL = new OriginType(TEMPLATE, "TEMPLATE", "TEMPLATE"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>SOURCE</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>SOURCE</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #SOURCE
+	 * @generated
+	 * @ordered
+	 */
+	public static final OriginType SOURCE_LITERAL = new OriginType(SOURCE, "SOURCE", "SOURCE"); //$NON-NLS-1$
+
+	/**
+	 * An array of all the '<em><b>Origin Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final OriginType[] VALUES_ARRAY =
+		new OriginType[] {
+			NONE_LITERAL,
+			TEMPLATE_LITERAL,
+			SOURCE_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Origin Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Origin Type</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static OriginType get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			OriginType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Origin Type</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static OriginType getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			OriginType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Origin Type</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static OriginType get(int value) {
+		switch (value) {
+			case NONE: return NONE_LITERAL;
+			case TEMPLATE: return TEMPLATE_LITERAL;
+			case SOURCE: return SOURCE_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private OriginType(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //OriginType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/ReoptType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/ReoptType.java
new file mode 100644
index 0000000..e651212
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/ReoptType.java
@@ -0,0 +1,205 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: ReoptType.java,v 1.2 2009/03/16 21:08:37 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Reopt Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getReoptType()
+ * @model
+ * @generated
+ */
+public final class ReoptType extends AbstractEnumerator {
+	/**
+	 * The '<em><b>NONE</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>NONE</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #NONE_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int NONE = 0;
+
+	/**
+	 * The '<em><b>ONCE</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>ONCE</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #ONCE_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ONCE = 1;
+
+	/**
+	 * The '<em><b>ALWAYS</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>ALWAYS</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #ALWAYS_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ALWAYS = 2;
+
+	/**
+	 * The '<em><b>AUTO</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>AUTO</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #AUTO_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int AUTO = 3;
+
+	/**
+	 * The '<em><b>NONE</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #NONE
+	 * @generated
+	 * @ordered
+	 */
+	public static final ReoptType NONE_LITERAL = new ReoptType(NONE, "NONE", "NONE"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>ONCE</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #ONCE
+	 * @generated
+	 * @ordered
+	 */
+	public static final ReoptType ONCE_LITERAL = new ReoptType(ONCE, "ONCE", "ONCE"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>ALWAYS</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #ALWAYS
+	 * @generated
+	 * @ordered
+	 */
+	public static final ReoptType ALWAYS_LITERAL = new ReoptType(ALWAYS, "ALWAYS", "ALWAYS"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>AUTO</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #AUTO
+	 * @generated
+	 * @ordered
+	 */
+	public static final ReoptType AUTO_LITERAL = new ReoptType(AUTO, "AUTO", "AUTO"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * An array of all the '<em><b>Reopt Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final ReoptType[] VALUES_ARRAY =
+		new ReoptType[] {
+			NONE_LITERAL,
+			ONCE_LITERAL,
+			ALWAYS_LITERAL,
+			AUTO_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Reopt Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Reopt Type</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static ReoptType get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			ReoptType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Reopt Type</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static ReoptType getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			ReoptType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Reopt Type</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static ReoptType get(int value) {
+		switch (value) {
+			case NONE: return NONE_LITERAL;
+			case ONCE: return ONCE_LITERAL;
+			case ALWAYS: return ALWAYS_LITERAL;
+			case AUTO: return AUTO_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private ReoptType(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //ReoptType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/SourceDialect.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/SourceDialect.java
new file mode 100644
index 0000000..db08ca7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/SourceDialect.java
@@ -0,0 +1,178 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: SourceDialect.java,v 1.1 2009/01/31 00:22:40 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Source Dialect</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getSourceDialect()
+ * @model
+ * @generated
+ */
+public final class SourceDialect extends AbstractEnumerator {
+	/**
+	 * The '<em><b>UNKNOWN</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>UNKNOWN</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #UNKNOWN_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int UNKNOWN = 0;
+
+	/**
+	 * The '<em><b>PLSQL</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>PLSQL</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #PLSQL_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int PLSQL = 1;
+
+	/**
+	 * The '<em><b>DB2SQLPL</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>DB2SQLPL</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #DB2SQLPL_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int DB2SQLPL = 2;
+
+	/**
+	 * The '<em><b>UNKNOWN</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #UNKNOWN
+	 * @generated
+	 * @ordered
+	 */
+	public static final SourceDialect UNKNOWN_LITERAL = new SourceDialect(UNKNOWN, "UNKNOWN", "UNKNOWN"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>PLSQL</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #PLSQL
+	 * @generated
+	 * @ordered
+	 */
+	public static final SourceDialect PLSQL_LITERAL = new SourceDialect(PLSQL, "PLSQL", "PLSQL"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * The '<em><b>DB2SQLPL</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #DB2SQLPL
+	 * @generated
+	 * @ordered
+	 */
+	public static final SourceDialect DB2SQLPL_LITERAL = new SourceDialect(DB2SQLPL, "DB2SQLPL", "DB2SQLPL"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * An array of all the '<em><b>Source Dialect</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final SourceDialect[] VALUES_ARRAY =
+		new SourceDialect[] {
+			UNKNOWN_LITERAL,
+			PLSQL_LITERAL,
+			DB2SQLPL_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Source Dialect</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Source Dialect</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static SourceDialect get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			SourceDialect result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Source Dialect</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static SourceDialect getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			SourceDialect result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Source Dialect</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static SourceDialect get(int value) {
+		switch (value) {
+			case UNKNOWN: return UNKNOWN_LITERAL;
+			case PLSQL: return PLSQL_LITERAL;
+			case DB2SQLPL: return DB2SQLPL_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private SourceDialect(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //SourceDialect
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/UnitType.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/UnitType.java
new file mode 100644
index 0000000..54c69f5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/UnitType.java
@@ -0,0 +1,178 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: UnitType.java,v 1.8 2009/01/31 00:22:40 xli Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Unit Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#getUnitType()
+ * @model
+ * @generated
+ */
+public final class UnitType extends AbstractEnumerator {
+	/**
+	 * The '<em><b>K</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #K_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int K = 0;
+
+	/**
+	 * The '<em><b>M</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #M_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int M = 1;
+
+	/**
+	 * The '<em><b>G</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #G_LITERAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int G = 2;
+
+	/**
+	 * The '<em><b>K</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>K</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #K
+	 * @generated
+	 * @ordered
+	 */
+	public static final UnitType K_LITERAL = new UnitType(K, "K", "K"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>M</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>M</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #M
+	 * @generated
+	 * @ordered
+	 */
+	public static final UnitType M_LITERAL = new UnitType(M, "M", "M"); //$NON-NLS-1$
+
+	/**
+	 * The '<em><b>G</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>G</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #G
+	 * @generated
+	 * @ordered
+	 */
+	public static final UnitType G_LITERAL = new UnitType(G, "G", "G"); //$NON-NLS-1$
+
+	/**
+	 * An array of all the '<em><b>Unit Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final UnitType[] VALUES_ARRAY =
+		new UnitType[] {
+			K_LITERAL,
+			M_LITERAL,
+			G_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Unit Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Unit Type</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static UnitType get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			UnitType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Unit Type</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static UnitType getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			UnitType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Unit Type</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static UnitType get(int value) {
+		switch (value) {
+			case K: return K_LITERAL;
+			case M: return M_LITERAL;
+			case G: return G_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private UnitType(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //UnitType
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2AliasImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2AliasImpl.java
new file mode 100644
index 0000000..4f23404
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2AliasImpl.java
@@ -0,0 +1,163 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.impl.TableImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Alias;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 Alias</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2AliasImpl#getAliasedTable <em>Aliased Table</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2AliasImpl extends TableImpl implements DB2Alias {
+	/**
+	 * The cached value of the '{@link #getAliasedTable() <em>Aliased Table</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAliasedTable()
+	 * @generated
+	 * @ordered
+	 */
+	protected Table aliasedTable;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2AliasImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_ALIAS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Table getAliasedTable() {
+		if (aliasedTable != null && aliasedTable.eIsProxy()) {
+			InternalEObject oldAliasedTable = (InternalEObject)aliasedTable;
+			aliasedTable = (Table)eResolveProxy(oldAliasedTable);
+			if (aliasedTable != oldAliasedTable) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DB2ModelPackage.DB2_ALIAS__ALIASED_TABLE, oldAliasedTable, aliasedTable));
+			}
+		}
+		return aliasedTable;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Table basicGetAliasedTable() {
+		return aliasedTable;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setAliasedTable(Table newAliasedTable) {
+		Table oldAliasedTable = aliasedTable;
+		aliasedTable = newAliasedTable;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_ALIAS__ALIASED_TABLE, oldAliasedTable, aliasedTable));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_ALIAS__ALIASED_TABLE:
+				if (resolve) return getAliasedTable();
+				return basicGetAliasedTable();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_ALIAS__ALIASED_TABLE:
+				setAliasedTable((Table)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_ALIAS__ALIASED_TABLE:
+				setAliasedTable((Table)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_ALIAS__ALIASED_TABLE:
+				return aliasedTable != null;
+		}
+		return super.eIsSet(featureID);
+	}
+	
+	public EList getColumns() {
+		if (getAliasedTable() != null) {
+				return aliasedTable.getColumns();
+			} else return super.getColumns();
+		
+		}
+
+} //DB2AliasImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2ApplicationProcessImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2ApplicationProcessImpl.java
new file mode 100644
index 0000000..c1080f3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2ApplicationProcessImpl.java
@@ -0,0 +1,241 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ApplicationProcess;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Transaction;
+import org.eclipse.datatools.enablement.ibm.db2.model.IsolationLevelType;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 Application Process</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ApplicationProcessImpl#getIsolationLevel <em>Isolation Level</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ApplicationProcessImpl#getUnitOfWork <em>Unit Of Work</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2ApplicationProcessImpl extends SQLObjectImpl implements DB2ApplicationProcess {
+	/**
+	 * The default value of the '{@link #getIsolationLevel() <em>Isolation Level</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIsolationLevel()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final IsolationLevelType ISOLATION_LEVEL_EDEFAULT = IsolationLevelType.REPEATABLE_READ_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getIsolationLevel() <em>Isolation Level</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIsolationLevel()
+	 * @generated
+	 * @ordered
+	 */
+	protected IsolationLevelType isolationLevel = ISOLATION_LEVEL_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getUnitOfWork() <em>Unit Of Work</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUnitOfWork()
+	 * @generated
+	 * @ordered
+	 */
+	protected DB2Transaction unitOfWork;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2ApplicationProcessImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_APPLICATION_PROCESS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IsolationLevelType getIsolationLevel() {
+		return isolationLevel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIsolationLevel(IsolationLevelType newIsolationLevel) {
+		IsolationLevelType oldIsolationLevel = isolationLevel;
+		isolationLevel = newIsolationLevel == null ? ISOLATION_LEVEL_EDEFAULT : newIsolationLevel;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_APPLICATION_PROCESS__ISOLATION_LEVEL, oldIsolationLevel, isolationLevel));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Transaction getUnitOfWork() {
+		return unitOfWork;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetUnitOfWork(DB2Transaction newUnitOfWork, NotificationChain msgs) {
+		DB2Transaction oldUnitOfWork = unitOfWork;
+		unitOfWork = newUnitOfWork;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_APPLICATION_PROCESS__UNIT_OF_WORK, oldUnitOfWork, newUnitOfWork);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setUnitOfWork(DB2Transaction newUnitOfWork) {
+		if (newUnitOfWork != unitOfWork) {
+			NotificationChain msgs = null;
+			if (unitOfWork != null)
+				msgs = ((InternalEObject)unitOfWork).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - DB2ModelPackage.DB2_APPLICATION_PROCESS__UNIT_OF_WORK, null, msgs);
+			if (newUnitOfWork != null)
+				msgs = ((InternalEObject)newUnitOfWork).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - DB2ModelPackage.DB2_APPLICATION_PROCESS__UNIT_OF_WORK, null, msgs);
+			msgs = basicSetUnitOfWork(newUnitOfWork, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_APPLICATION_PROCESS__UNIT_OF_WORK, newUnitOfWork, newUnitOfWork));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_APPLICATION_PROCESS__UNIT_OF_WORK:
+				return basicSetUnitOfWork(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_APPLICATION_PROCESS__ISOLATION_LEVEL:
+				return getIsolationLevel();
+			case DB2ModelPackage.DB2_APPLICATION_PROCESS__UNIT_OF_WORK:
+				return getUnitOfWork();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_APPLICATION_PROCESS__ISOLATION_LEVEL:
+				setIsolationLevel((IsolationLevelType)newValue);
+				return;
+			case DB2ModelPackage.DB2_APPLICATION_PROCESS__UNIT_OF_WORK:
+				setUnitOfWork((DB2Transaction)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_APPLICATION_PROCESS__ISOLATION_LEVEL:
+				setIsolationLevel(ISOLATION_LEVEL_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_APPLICATION_PROCESS__UNIT_OF_WORK:
+				setUnitOfWork((DB2Transaction)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_APPLICATION_PROCESS__ISOLATION_LEVEL:
+				return isolationLevel != ISOLATION_LEVEL_EDEFAULT;
+			case DB2ModelPackage.DB2_APPLICATION_PROCESS__UNIT_OF_WORK:
+				return unitOfWork != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (isolationLevel: "); //$NON-NLS-1$
+		result.append(isolationLevel);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DB2ApplicationProcessImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2ClusterImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2ClusterImpl.java
new file mode 100644
index 0000000..a887ad0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2ClusterImpl.java
@@ -0,0 +1,311 @@
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Cluster;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2DatabaseManager;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Member;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import java.util.Collection;
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 Cluster</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ClusterImpl#getLevel <em>Level</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ClusterImpl#getInstance <em>Instance</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ClusterImpl#getMembers <em>Members</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2ClusterImpl extends SQLObjectImpl implements DB2Cluster {
+	/**
+	 * The default value of the '{@link #getLevel() <em>Level</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLevel()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String LEVEL_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getLevel() <em>Level</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLevel()
+	 * @generated
+	 * @ordered
+	 */
+	protected String level = LEVEL_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getInstance() <em>Instance</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getInstance()
+	 * @generated
+	 * @ordered
+	 */
+	protected DB2DatabaseManager instance;
+
+	/**
+	 * The cached value of the '{@link #getMembers() <em>Members</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMembers()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList members;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2ClusterImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_CLUSTER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getLevel() {
+		return level;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLevel(String newLevel) {
+		String oldLevel = level;
+		level = newLevel;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_CLUSTER__LEVEL, oldLevel, level));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2DatabaseManager getInstance() {
+		if (instance != null && instance.eIsProxy()) {
+			InternalEObject oldInstance = (InternalEObject)instance;
+			instance = (DB2DatabaseManager)eResolveProxy(oldInstance);
+			if (instance != oldInstance) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DB2ModelPackage.DB2_CLUSTER__INSTANCE, oldInstance, instance));
+			}
+		}
+		return instance;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2DatabaseManager basicGetInstance() {
+		return instance;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetInstance(DB2DatabaseManager newInstance, NotificationChain msgs) {
+		DB2DatabaseManager oldInstance = instance;
+		instance = newInstance;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_CLUSTER__INSTANCE, oldInstance, newInstance);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setInstance(DB2DatabaseManager newInstance) {
+		if (newInstance != instance) {
+			NotificationChain msgs = null;
+			if (instance != null)
+				msgs = ((InternalEObject)instance).eInverseRemove(this, DB2ModelPackage.DB2_DATABASE_MANAGER__CLUSTER, DB2DatabaseManager.class, msgs);
+			if (newInstance != null)
+				msgs = ((InternalEObject)newInstance).eInverseAdd(this, DB2ModelPackage.DB2_DATABASE_MANAGER__CLUSTER, DB2DatabaseManager.class, msgs);
+			msgs = basicSetInstance(newInstance, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_CLUSTER__INSTANCE, newInstance, newInstance));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getMembers() {
+		if (members == null) {
+			members = new EObjectWithInverseResolvingEList(DB2Member.class, this, DB2ModelPackage.DB2_CLUSTER__MEMBERS, DB2ModelPackage.DB2_MEMBER__CLUSTER);
+		}
+		return members;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_CLUSTER__INSTANCE:
+				if (instance != null)
+					msgs = ((InternalEObject)instance).eInverseRemove(this, DB2ModelPackage.DB2_DATABASE_MANAGER__CLUSTER, DB2DatabaseManager.class, msgs);
+				return basicSetInstance((DB2DatabaseManager)otherEnd, msgs);
+			case DB2ModelPackage.DB2_CLUSTER__MEMBERS:
+				return ((InternalEList)getMembers()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_CLUSTER__INSTANCE:
+				return basicSetInstance(null, msgs);
+			case DB2ModelPackage.DB2_CLUSTER__MEMBERS:
+				return ((InternalEList)getMembers()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_CLUSTER__LEVEL:
+				return getLevel();
+			case DB2ModelPackage.DB2_CLUSTER__INSTANCE:
+				if (resolve) return getInstance();
+				return basicGetInstance();
+			case DB2ModelPackage.DB2_CLUSTER__MEMBERS:
+				return getMembers();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_CLUSTER__LEVEL:
+				setLevel((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_CLUSTER__INSTANCE:
+				setInstance((DB2DatabaseManager)newValue);
+				return;
+			case DB2ModelPackage.DB2_CLUSTER__MEMBERS:
+				getMembers().clear();
+				getMembers().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_CLUSTER__LEVEL:
+				setLevel(LEVEL_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_CLUSTER__INSTANCE:
+				setInstance((DB2DatabaseManager)null);
+				return;
+			case DB2ModelPackage.DB2_CLUSTER__MEMBERS:
+				getMembers().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_CLUSTER__LEVEL:
+				return LEVEL_EDEFAULT == null ? level != null : !LEVEL_EDEFAULT.equals(level);
+			case DB2ModelPackage.DB2_CLUSTER__INSTANCE:
+				return instance != null;
+			case DB2ModelPackage.DB2_CLUSTER__MEMBERS:
+				return members != null && !members.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (level: "); //$NON-NLS-1$
+		result.append(level);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DB2ClusterImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2ColumnImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2ColumnImpl.java
new file mode 100644
index 0000000..86859cf
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2ColumnImpl.java
@@ -0,0 +1,598 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: DB2ColumnImpl.java,v 1.9 2008/04/28 20:54:22 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import org.eclipse.datatools.modelbase.sql.tables.impl.ColumnImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Column;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Period;
+import org.eclipse.datatools.enablement.ibm.db2.model.GenerateType;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 Column</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ColumnImpl#getGenerationType <em>Generation Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ColumnImpl#isRowChangeTimestamp <em>Row Change Timestamp</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ColumnImpl#isRowBegin <em>Row Begin</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ColumnImpl#isRowEnd <em>Row End</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ColumnImpl#isTransStartID <em>Trans Start ID</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ColumnImpl#getBeginPeriod <em>Begin Period</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ColumnImpl#getEndPeriod <em>End Period</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2ColumnImpl extends ColumnImpl implements DB2Column {
+	/**
+	 * The default value of the '{@link #getGenerationType() <em>Generation Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getGenerationType()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final GenerateType GENERATION_TYPE_EDEFAULT = GenerateType.ALWAYS_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getGenerationType() <em>Generation Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getGenerationType()
+	 * @generated
+	 * @ordered
+	 */
+	protected GenerateType generationType = GENERATION_TYPE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isRowChangeTimestamp() <em>Row Change Timestamp</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isRowChangeTimestamp()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean ROW_CHANGE_TIMESTAMP_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isRowChangeTimestamp() <em>Row Change Timestamp</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isRowChangeTimestamp()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean rowChangeTimestamp = ROW_CHANGE_TIMESTAMP_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isRowBegin() <em>Row Begin</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isRowBegin()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean ROW_BEGIN_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isRowBegin() <em>Row Begin</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isRowBegin()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean rowBegin = ROW_BEGIN_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isRowEnd() <em>Row End</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isRowEnd()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean ROW_END_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isRowEnd() <em>Row End</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isRowEnd()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean rowEnd = ROW_END_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isTransStartID() <em>Trans Start ID</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isTransStartID()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean TRANS_START_ID_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isTransStartID() <em>Trans Start ID</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isTransStartID()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean transStartID = TRANS_START_ID_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getBeginPeriod() <em>Begin Period</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBeginPeriod()
+	 * @generated
+	 * @ordered
+	 */
+	protected DB2Period beginPeriod;
+
+	/**
+	 * The cached value of the '{@link #getEndPeriod() <em>End Period</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getEndPeriod()
+	 * @generated
+	 * @ordered
+	 */
+	protected DB2Period endPeriod;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2ColumnImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_COLUMN;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public GenerateType getGenerationType() {
+		return generationType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setGenerationType(GenerateType newGenerationType) {
+		GenerateType oldGenerationType = generationType;
+		generationType = newGenerationType == null ? GENERATION_TYPE_EDEFAULT : newGenerationType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_COLUMN__GENERATION_TYPE, oldGenerationType, generationType));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isRowChangeTimestamp() {
+		return rowChangeTimestamp;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRowChangeTimestamp(boolean newRowChangeTimestamp) {
+		boolean oldRowChangeTimestamp = rowChangeTimestamp;
+		rowChangeTimestamp = newRowChangeTimestamp;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_COLUMN__ROW_CHANGE_TIMESTAMP, oldRowChangeTimestamp, rowChangeTimestamp));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isRowBegin() {
+		return rowBegin;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRowBegin(boolean newRowBegin) {
+		boolean oldRowBegin = rowBegin;
+		rowBegin = newRowBegin;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_COLUMN__ROW_BEGIN, oldRowBegin, rowBegin));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isRowEnd() {
+		return rowEnd;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRowEnd(boolean newRowEnd) {
+		boolean oldRowEnd = rowEnd;
+		rowEnd = newRowEnd;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_COLUMN__ROW_END, oldRowEnd, rowEnd));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isTransStartID() {
+		return transStartID;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTransStartID(boolean newTransStartID) {
+		boolean oldTransStartID = transStartID;
+		transStartID = newTransStartID;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_COLUMN__TRANS_START_ID, oldTransStartID, transStartID));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Period getBeginPeriod() {
+		if (beginPeriod != null && beginPeriod.eIsProxy()) {
+			InternalEObject oldBeginPeriod = (InternalEObject)beginPeriod;
+			beginPeriod = (DB2Period)eResolveProxy(oldBeginPeriod);
+			if (beginPeriod != oldBeginPeriod) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DB2ModelPackage.DB2_COLUMN__BEGIN_PERIOD, oldBeginPeriod, beginPeriod));
+			}
+		}
+		return beginPeriod;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Period basicGetBeginPeriod() {
+		return beginPeriod;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetBeginPeriod(DB2Period newBeginPeriod, NotificationChain msgs) {
+		DB2Period oldBeginPeriod = beginPeriod;
+		beginPeriod = newBeginPeriod;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_COLUMN__BEGIN_PERIOD, oldBeginPeriod, newBeginPeriod);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBeginPeriod(DB2Period newBeginPeriod) {
+		if (newBeginPeriod != beginPeriod) {
+			NotificationChain msgs = null;
+			if (beginPeriod != null)
+				msgs = ((InternalEObject)beginPeriod).eInverseRemove(this, DB2ModelPackage.DB2_PERIOD__BEGIN_COLUMN, DB2Period.class, msgs);
+			if (newBeginPeriod != null)
+				msgs = ((InternalEObject)newBeginPeriod).eInverseAdd(this, DB2ModelPackage.DB2_PERIOD__BEGIN_COLUMN, DB2Period.class, msgs);
+			msgs = basicSetBeginPeriod(newBeginPeriod, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_COLUMN__BEGIN_PERIOD, newBeginPeriod, newBeginPeriod));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Period getEndPeriod() {
+		if (endPeriod != null && endPeriod.eIsProxy()) {
+			InternalEObject oldEndPeriod = (InternalEObject)endPeriod;
+			endPeriod = (DB2Period)eResolveProxy(oldEndPeriod);
+			if (endPeriod != oldEndPeriod) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DB2ModelPackage.DB2_COLUMN__END_PERIOD, oldEndPeriod, endPeriod));
+			}
+		}
+		return endPeriod;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Period basicGetEndPeriod() {
+		return endPeriod;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetEndPeriod(DB2Period newEndPeriod, NotificationChain msgs) {
+		DB2Period oldEndPeriod = endPeriod;
+		endPeriod = newEndPeriod;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_COLUMN__END_PERIOD, oldEndPeriod, newEndPeriod);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setEndPeriod(DB2Period newEndPeriod) {
+		if (newEndPeriod != endPeriod) {
+			NotificationChain msgs = null;
+			if (endPeriod != null)
+				msgs = ((InternalEObject)endPeriod).eInverseRemove(this, DB2ModelPackage.DB2_PERIOD__END_COLUMN, DB2Period.class, msgs);
+			if (newEndPeriod != null)
+				msgs = ((InternalEObject)newEndPeriod).eInverseAdd(this, DB2ModelPackage.DB2_PERIOD__END_COLUMN, DB2Period.class, msgs);
+			msgs = basicSetEndPeriod(newEndPeriod, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_COLUMN__END_PERIOD, newEndPeriod, newEndPeriod));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_COLUMN__BEGIN_PERIOD:
+				if (beginPeriod != null)
+					msgs = ((InternalEObject)beginPeriod).eInverseRemove(this, DB2ModelPackage.DB2_PERIOD__BEGIN_COLUMN, DB2Period.class, msgs);
+				return basicSetBeginPeriod((DB2Period)otherEnd, msgs);
+			case DB2ModelPackage.DB2_COLUMN__END_PERIOD:
+				if (endPeriod != null)
+					msgs = ((InternalEObject)endPeriod).eInverseRemove(this, DB2ModelPackage.DB2_PERIOD__END_COLUMN, DB2Period.class, msgs);
+				return basicSetEndPeriod((DB2Period)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_COLUMN__BEGIN_PERIOD:
+				return basicSetBeginPeriod(null, msgs);
+			case DB2ModelPackage.DB2_COLUMN__END_PERIOD:
+				return basicSetEndPeriod(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_COLUMN__GENERATION_TYPE:
+				return getGenerationType();
+			case DB2ModelPackage.DB2_COLUMN__ROW_CHANGE_TIMESTAMP:
+				return isRowChangeTimestamp() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_COLUMN__ROW_BEGIN:
+				return isRowBegin() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_COLUMN__ROW_END:
+				return isRowEnd() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_COLUMN__TRANS_START_ID:
+				return isTransStartID() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_COLUMN__BEGIN_PERIOD:
+				if (resolve) return getBeginPeriod();
+				return basicGetBeginPeriod();
+			case DB2ModelPackage.DB2_COLUMN__END_PERIOD:
+				if (resolve) return getEndPeriod();
+				return basicGetEndPeriod();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_COLUMN__GENERATION_TYPE:
+				setGenerationType((GenerateType)newValue);
+				return;
+			case DB2ModelPackage.DB2_COLUMN__ROW_CHANGE_TIMESTAMP:
+				setRowChangeTimestamp(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_COLUMN__ROW_BEGIN:
+				setRowBegin(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_COLUMN__ROW_END:
+				setRowEnd(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_COLUMN__TRANS_START_ID:
+				setTransStartID(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_COLUMN__BEGIN_PERIOD:
+				setBeginPeriod((DB2Period)newValue);
+				return;
+			case DB2ModelPackage.DB2_COLUMN__END_PERIOD:
+				setEndPeriod((DB2Period)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_COLUMN__GENERATION_TYPE:
+				setGenerationType(GENERATION_TYPE_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_COLUMN__ROW_CHANGE_TIMESTAMP:
+				setRowChangeTimestamp(ROW_CHANGE_TIMESTAMP_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_COLUMN__ROW_BEGIN:
+				setRowBegin(ROW_BEGIN_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_COLUMN__ROW_END:
+				setRowEnd(ROW_END_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_COLUMN__TRANS_START_ID:
+				setTransStartID(TRANS_START_ID_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_COLUMN__BEGIN_PERIOD:
+				setBeginPeriod((DB2Period)null);
+				return;
+			case DB2ModelPackage.DB2_COLUMN__END_PERIOD:
+				setEndPeriod((DB2Period)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_COLUMN__GENERATION_TYPE:
+				return generationType != GENERATION_TYPE_EDEFAULT;
+			case DB2ModelPackage.DB2_COLUMN__ROW_CHANGE_TIMESTAMP:
+				return rowChangeTimestamp != ROW_CHANGE_TIMESTAMP_EDEFAULT;
+			case DB2ModelPackage.DB2_COLUMN__ROW_BEGIN:
+				return rowBegin != ROW_BEGIN_EDEFAULT;
+			case DB2ModelPackage.DB2_COLUMN__ROW_END:
+				return rowEnd != ROW_END_EDEFAULT;
+			case DB2ModelPackage.DB2_COLUMN__TRANS_START_ID:
+				return transStartID != TRANS_START_ID_EDEFAULT;
+			case DB2ModelPackage.DB2_COLUMN__BEGIN_PERIOD:
+				return beginPeriod != null;
+			case DB2ModelPackage.DB2_COLUMN__END_PERIOD:
+				return endPeriod != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (generationType: "); //$NON-NLS-1$
+		result.append(generationType);
+		result.append(", rowChangeTimestamp: "); //$NON-NLS-1$
+		result.append(rowChangeTimestamp);
+		result.append(", rowBegin: "); //$NON-NLS-1$
+		result.append(rowBegin);
+		result.append(", rowEnd: "); //$NON-NLS-1$
+		result.append(rowEnd);
+		result.append(", transStartID: "); //$NON-NLS-1$
+		result.append(transStartID);
+		result.append(')');
+		return result.toString();
+	}
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public boolean isGenerated() {
+		if ( this.isRowChangeTimestamp() ||
+			 this.isRowBegin()			 ||
+			 this.isRowEnd()			 ||
+			 this.isTransStartID()		 ||
+			 this.getGenerateExpression() != null ||
+			 this.getIdentitySpecifier() != null )
+		{
+			return true;
+		}
+		else
+		{
+			return false;
+		}
+	}
+
+} //DB2ColumnImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2DatabaseImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2DatabaseImpl.java
new file mode 100644
index 0000000..e20434c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2DatabaseImpl.java
@@ -0,0 +1,214 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.DatabaseImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Database;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 Database</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2DatabaseImpl#isPartitioned <em>Partitioned</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2DatabaseImpl#isDefaultOrganizeByRow <em>Default Organize By Row</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2DatabaseImpl extends DatabaseImpl implements DB2Database {
+	/**
+	 * The default value of the '{@link #isPartitioned() <em>Partitioned</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isPartitioned()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean PARTITIONED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isPartitioned() <em>Partitioned</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isPartitioned()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean partitioned = PARTITIONED_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isDefaultOrganizeByRow() <em>Default Organize By Row</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDefaultOrganizeByRow()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean DEFAULT_ORGANIZE_BY_ROW_EDEFAULT = true;
+
+	/**
+	 * The cached value of the '{@link #isDefaultOrganizeByRow() <em>Default Organize By Row</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDefaultOrganizeByRow()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean defaultOrganizeByRow = DEFAULT_ORGANIZE_BY_ROW_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2DatabaseImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_DATABASE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isPartitioned() {
+		return partitioned;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPartitioned(boolean newPartitioned) {
+		boolean oldPartitioned = partitioned;
+		partitioned = newPartitioned;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_DATABASE__PARTITIONED, oldPartitioned, partitioned));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isDefaultOrganizeByRow() {
+		return defaultOrganizeByRow;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDefaultOrganizeByRow(boolean newDefaultOrganizeByRow) {
+		boolean oldDefaultOrganizeByRow = defaultOrganizeByRow;
+		defaultOrganizeByRow = newDefaultOrganizeByRow;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_DATABASE__DEFAULT_ORGANIZE_BY_ROW, oldDefaultOrganizeByRow, defaultOrganizeByRow));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_DATABASE__PARTITIONED:
+				return isPartitioned() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_DATABASE__DEFAULT_ORGANIZE_BY_ROW:
+				return isDefaultOrganizeByRow() ? Boolean.TRUE : Boolean.FALSE;
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_DATABASE__PARTITIONED:
+				setPartitioned(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_DATABASE__DEFAULT_ORGANIZE_BY_ROW:
+				setDefaultOrganizeByRow(((Boolean)newValue).booleanValue());
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_DATABASE__PARTITIONED:
+				setPartitioned(PARTITIONED_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_DATABASE__DEFAULT_ORGANIZE_BY_ROW:
+				setDefaultOrganizeByRow(DEFAULT_ORGANIZE_BY_ROW_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_DATABASE__PARTITIONED:
+				return partitioned != PARTITIONED_EDEFAULT;
+			case DB2ModelPackage.DB2_DATABASE__DEFAULT_ORGANIZE_BY_ROW:
+				return defaultOrganizeByRow != DEFAULT_ORGANIZE_BY_ROW_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (partitioned: "); //$NON-NLS-1$
+		result.append(partitioned);
+		result.append(", defaultOrganizeByRow: "); //$NON-NLS-1$
+		result.append(defaultOrganizeByRow);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DB2DatabaseImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2DatabaseManagerImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2DatabaseManagerImpl.java
new file mode 100644
index 0000000..7b4a323
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2DatabaseManagerImpl.java
@@ -0,0 +1,312 @@
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ApplicationProcess;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Cluster;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Database;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2DatabaseManager;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import java.util.Collection;
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 Database Manager</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2DatabaseManagerImpl#getDatabases <em>Databases</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2DatabaseManagerImpl#getDb2Process <em>Db2 Process</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2DatabaseManagerImpl#getServer <em>Server</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2DatabaseManagerImpl#getCluster <em>Cluster</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2DatabaseManagerImpl extends SQLObjectImpl implements DB2DatabaseManager {
+	/**
+	 * The cached value of the '{@link #getDatabases() <em>Databases</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDatabases()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList databases;
+
+	/**
+	 * The cached value of the '{@link #getDb2Process() <em>Db2 Process</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDb2Process()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList db2Process;
+
+	/**
+	 * The cached value of the '{@link #getServer() <em>Server</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getServer()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList server;
+
+	/**
+	 * The cached value of the '{@link #getCluster() <em>Cluster</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCluster()
+	 * @generated
+	 * @ordered
+	 */
+	protected DB2Cluster cluster;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2DatabaseManagerImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_DATABASE_MANAGER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getDatabases() {
+		if (databases == null) {
+			databases = new EObjectResolvingEList(DB2Database.class, this, DB2ModelPackage.DB2_DATABASE_MANAGER__DATABASES);
+		}
+		return databases;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getDb2Process() {
+		if (db2Process == null) {
+			db2Process = new EObjectResolvingEList(DB2ApplicationProcess.class, this, DB2ModelPackage.DB2_DATABASE_MANAGER__DB2_PROCESS);
+		}
+		return db2Process;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public EList getServer() {
+//		if (server == null) {
+//			server = new EObjectWithInverseResolvingEList.ManyInverse(LUWAdminServer.class, this, DB2ModelPackage.DB2_DATABASE_MANAGER__SERVER, LUWPackage.LUW_ADMIN_SERVER__INSTANCES);
+//		}
+		return server;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Cluster getCluster() {
+		if (cluster != null && cluster.eIsProxy()) {
+			InternalEObject oldCluster = (InternalEObject)cluster;
+			cluster = (DB2Cluster)eResolveProxy(oldCluster);
+			if (cluster != oldCluster) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DB2ModelPackage.DB2_DATABASE_MANAGER__CLUSTER, oldCluster, cluster));
+			}
+		}
+		return cluster;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Cluster basicGetCluster() {
+		return cluster;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetCluster(DB2Cluster newCluster, NotificationChain msgs) {
+		DB2Cluster oldCluster = cluster;
+		cluster = newCluster;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_DATABASE_MANAGER__CLUSTER, oldCluster, newCluster);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCluster(DB2Cluster newCluster) {
+		if (newCluster != cluster) {
+			NotificationChain msgs = null;
+			if (cluster != null)
+				msgs = ((InternalEObject)cluster).eInverseRemove(this, DB2ModelPackage.DB2_CLUSTER__INSTANCE, DB2Cluster.class, msgs);
+			if (newCluster != null)
+				msgs = ((InternalEObject)newCluster).eInverseAdd(this, DB2ModelPackage.DB2_CLUSTER__INSTANCE, DB2Cluster.class, msgs);
+			msgs = basicSetCluster(newCluster, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_DATABASE_MANAGER__CLUSTER, newCluster, newCluster));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_DATABASE_MANAGER__SERVER:
+				return ((InternalEList)getServer()).basicAdd(otherEnd, msgs);
+			case DB2ModelPackage.DB2_DATABASE_MANAGER__CLUSTER:
+				if (cluster != null)
+					msgs = ((InternalEObject)cluster).eInverseRemove(this, DB2ModelPackage.DB2_CLUSTER__INSTANCE, DB2Cluster.class, msgs);
+				return basicSetCluster((DB2Cluster)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_DATABASE_MANAGER__SERVER:
+				return ((InternalEList)getServer()).basicRemove(otherEnd, msgs);
+			case DB2ModelPackage.DB2_DATABASE_MANAGER__CLUSTER:
+				return basicSetCluster(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_DATABASE_MANAGER__DATABASES:
+				return getDatabases();
+			case DB2ModelPackage.DB2_DATABASE_MANAGER__DB2_PROCESS:
+				return getDb2Process();
+			case DB2ModelPackage.DB2_DATABASE_MANAGER__SERVER:
+				return getServer();
+			case DB2ModelPackage.DB2_DATABASE_MANAGER__CLUSTER:
+				if (resolve) return getCluster();
+				return basicGetCluster();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_DATABASE_MANAGER__DATABASES:
+				getDatabases().clear();
+				getDatabases().addAll((Collection)newValue);
+				return;
+			case DB2ModelPackage.DB2_DATABASE_MANAGER__DB2_PROCESS:
+				getDb2Process().clear();
+				getDb2Process().addAll((Collection)newValue);
+				return;
+			case DB2ModelPackage.DB2_DATABASE_MANAGER__SERVER:
+				getServer().clear();
+				getServer().addAll((Collection)newValue);
+				return;
+			case DB2ModelPackage.DB2_DATABASE_MANAGER__CLUSTER:
+				setCluster((DB2Cluster)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_DATABASE_MANAGER__DATABASES:
+				getDatabases().clear();
+				return;
+			case DB2ModelPackage.DB2_DATABASE_MANAGER__DB2_PROCESS:
+				getDb2Process().clear();
+				return;
+			case DB2ModelPackage.DB2_DATABASE_MANAGER__SERVER:
+				getServer().clear();
+				return;
+			case DB2ModelPackage.DB2_DATABASE_MANAGER__CLUSTER:
+				setCluster((DB2Cluster)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_DATABASE_MANAGER__DATABASES:
+				return databases != null && !databases.isEmpty();
+			case DB2ModelPackage.DB2_DATABASE_MANAGER__DB2_PROCESS:
+				return db2Process != null && !db2Process.isEmpty();
+			case DB2ModelPackage.DB2_DATABASE_MANAGER__SERVER:
+				return server != null && !server.isEmpty();
+			case DB2ModelPackage.DB2_DATABASE_MANAGER__CLUSTER:
+				return cluster != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //DB2DatabaseManagerImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2DistinctUserDefinedTypeImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2DistinctUserDefinedTypeImpl.java
new file mode 100644
index 0000000..93db80c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2DistinctUserDefinedTypeImpl.java
@@ -0,0 +1,44 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2DistinctUserDefinedType;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+
+import org.eclipse.datatools.modelbase.sql.datatypes.impl.DistinctUserDefinedTypeImpl;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 Distinct User Defined Type</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class DB2DistinctUserDefinedTypeImpl extends DistinctUserDefinedTypeImpl implements DB2DistinctUserDefinedType {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2DistinctUserDefinedTypeImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_DISTINCT_USER_DEFINED_TYPE;
+	}
+
+} //DB2DistinctUserDefinedTypeImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2ExtendedOptionsImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2ExtendedOptionsImpl.java
new file mode 100644
index 0000000..0c7be5d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2ExtendedOptionsImpl.java
@@ -0,0 +1,538 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 Extended Options</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ExtendedOptionsImpl#getClasspathCompileJars <em>Classpath Compile Jars</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ExtendedOptionsImpl#getPreCompileOpts <em>Pre Compile Opts</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ExtendedOptionsImpl#isForDebug <em>For Debug</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ExtendedOptionsImpl#isBuilt <em>Built</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ExtendedOptionsImpl#getCompileOpts <em>Compile Opts</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ExtendedOptionsImpl#getLinkOpts <em>Link Opts</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ExtendedOptionsImpl#getBindOpts <em>Bind Opts</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ExtendedOptionsImpl#getColid <em>Colid</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2ExtendedOptionsImpl extends SQLObjectImpl implements DB2ExtendedOptions {
+	/**
+	 * The default value of the '{@link #getClasspathCompileJars() <em>Classpath Compile Jars</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getClasspathCompileJars()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String CLASSPATH_COMPILE_JARS_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getClasspathCompileJars() <em>Classpath Compile Jars</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getClasspathCompileJars()
+	 * @generated
+	 * @ordered
+	 */
+	protected String classpathCompileJars = CLASSPATH_COMPILE_JARS_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getPreCompileOpts() <em>Pre Compile Opts</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPreCompileOpts()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String PRE_COMPILE_OPTS_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getPreCompileOpts() <em>Pre Compile Opts</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPreCompileOpts()
+	 * @generated
+	 * @ordered
+	 */
+	protected String preCompileOpts = PRE_COMPILE_OPTS_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isForDebug() <em>For Debug</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isForDebug()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean FOR_DEBUG_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isForDebug() <em>For Debug</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isForDebug()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean forDebug = FOR_DEBUG_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isBuilt() <em>Built</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isBuilt()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean BUILT_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isBuilt() <em>Built</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isBuilt()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean built = BUILT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getCompileOpts() <em>Compile Opts</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getCompileOpts()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String COMPILE_OPTS_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getCompileOpts() <em>Compile Opts</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getCompileOpts()
+	 * @generated
+	 * @ordered
+	 */
+   protected String compileOpts = COMPILE_OPTS_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getLinkOpts() <em>Link Opts</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getLinkOpts()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String LINK_OPTS_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getLinkOpts() <em>Link Opts</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getLinkOpts()
+	 * @generated
+	 * @ordered
+	 */
+   protected String linkOpts = LINK_OPTS_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getBindOpts() <em>Bind Opts</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getBindOpts()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String BIND_OPTS_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getBindOpts() <em>Bind Opts</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getBindOpts()
+	 * @generated
+	 * @ordered
+	 */
+   protected String bindOpts = BIND_OPTS_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getColid() <em>Colid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getColid()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String COLID_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getColid() <em>Colid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getColid()
+	 * @generated
+	 * @ordered
+	 */
+   protected String colid = COLID_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2ExtendedOptionsImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_EXTENDED_OPTIONS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getClasspathCompileJars() {
+		return classpathCompileJars;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setClasspathCompileJars(String newClasspathCompileJars) {
+		String oldClasspathCompileJars = classpathCompileJars;
+		classpathCompileJars = newClasspathCompileJars;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_EXTENDED_OPTIONS__CLASSPATH_COMPILE_JARS, oldClasspathCompileJars, classpathCompileJars));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getPreCompileOpts() {
+		return preCompileOpts;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPreCompileOpts(String newPreCompileOpts) {
+		String oldPreCompileOpts = preCompileOpts;
+		preCompileOpts = newPreCompileOpts;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_EXTENDED_OPTIONS__PRE_COMPILE_OPTS, oldPreCompileOpts, preCompileOpts));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isForDebug() {
+		return forDebug;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setForDebug(boolean newForDebug) {
+		boolean oldForDebug = forDebug;
+		forDebug = newForDebug;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_EXTENDED_OPTIONS__FOR_DEBUG, oldForDebug, forDebug));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isBuilt() {
+		return built;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBuilt(boolean newBuilt) {
+		boolean oldBuilt = built;
+		built = newBuilt;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_EXTENDED_OPTIONS__BUILT, oldBuilt, built));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getCompileOpts() {
+		return compileOpts;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setCompileOpts(String newCompileOpts) {
+		String oldCompileOpts = compileOpts;
+		compileOpts = newCompileOpts;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_EXTENDED_OPTIONS__COMPILE_OPTS, oldCompileOpts, compileOpts));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getLinkOpts() {
+		return linkOpts;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setLinkOpts(String newLinkOpts) {
+		String oldLinkOpts = linkOpts;
+		linkOpts = newLinkOpts;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_EXTENDED_OPTIONS__LINK_OPTS, oldLinkOpts, linkOpts));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getBindOpts() {
+		return bindOpts;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setBindOpts(String newBindOpts) {
+		String oldBindOpts = bindOpts;
+		bindOpts = newBindOpts;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_EXTENDED_OPTIONS__BIND_OPTS, oldBindOpts, bindOpts));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getColid() {
+		return colid;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setColid(String newColid) {
+		String oldColid = colid;
+		colid = newColid;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_EXTENDED_OPTIONS__COLID, oldColid, colid));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__CLASSPATH_COMPILE_JARS:
+				return getClasspathCompileJars();
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__PRE_COMPILE_OPTS:
+				return getPreCompileOpts();
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__FOR_DEBUG:
+				return isForDebug() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__BUILT:
+				return isBuilt() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__COMPILE_OPTS:
+				return getCompileOpts();
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__LINK_OPTS:
+				return getLinkOpts();
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__BIND_OPTS:
+				return getBindOpts();
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__COLID:
+				return getColid();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__CLASSPATH_COMPILE_JARS:
+				setClasspathCompileJars((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__PRE_COMPILE_OPTS:
+				setPreCompileOpts((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__FOR_DEBUG:
+				setForDebug(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__BUILT:
+				setBuilt(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__COMPILE_OPTS:
+				setCompileOpts((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__LINK_OPTS:
+				setLinkOpts((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__BIND_OPTS:
+				setBindOpts((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__COLID:
+				setColid((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__CLASSPATH_COMPILE_JARS:
+				setClasspathCompileJars(CLASSPATH_COMPILE_JARS_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__PRE_COMPILE_OPTS:
+				setPreCompileOpts(PRE_COMPILE_OPTS_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__FOR_DEBUG:
+				setForDebug(FOR_DEBUG_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__BUILT:
+				setBuilt(BUILT_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__COMPILE_OPTS:
+				setCompileOpts(COMPILE_OPTS_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__LINK_OPTS:
+				setLinkOpts(LINK_OPTS_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__BIND_OPTS:
+				setBindOpts(BIND_OPTS_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__COLID:
+				setColid(COLID_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__CLASSPATH_COMPILE_JARS:
+				return CLASSPATH_COMPILE_JARS_EDEFAULT == null ? classpathCompileJars != null : !CLASSPATH_COMPILE_JARS_EDEFAULT.equals(classpathCompileJars);
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__PRE_COMPILE_OPTS:
+				return PRE_COMPILE_OPTS_EDEFAULT == null ? preCompileOpts != null : !PRE_COMPILE_OPTS_EDEFAULT.equals(preCompileOpts);
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__FOR_DEBUG:
+				return forDebug != FOR_DEBUG_EDEFAULT;
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__BUILT:
+				return built != BUILT_EDEFAULT;
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__COMPILE_OPTS:
+				return COMPILE_OPTS_EDEFAULT == null ? compileOpts != null : !COMPILE_OPTS_EDEFAULT.equals(compileOpts);
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__LINK_OPTS:
+				return LINK_OPTS_EDEFAULT == null ? linkOpts != null : !LINK_OPTS_EDEFAULT.equals(linkOpts);
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__BIND_OPTS:
+				return BIND_OPTS_EDEFAULT == null ? bindOpts != null : !BIND_OPTS_EDEFAULT.equals(bindOpts);
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS__COLID:
+				return COLID_EDEFAULT == null ? colid != null : !COLID_EDEFAULT.equals(colid);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (classpathCompileJars: "); //$NON-NLS-1$
+		result.append(classpathCompileJars);
+		result.append(", preCompileOpts: "); //$NON-NLS-1$
+		result.append(preCompileOpts);
+		result.append(", forDebug: "); //$NON-NLS-1$
+		result.append(forDebug);
+		result.append(", built: "); //$NON-NLS-1$
+		result.append(built);
+		result.append(", compileOpts: "); //$NON-NLS-1$
+		result.append(compileOpts);
+		result.append(", linkOpts: "); //$NON-NLS-1$
+		result.append(linkOpts);
+		result.append(", bindOpts: "); //$NON-NLS-1$
+		result.append(bindOpts);
+		result.append(", colid: "); //$NON-NLS-1$
+		result.append(colid);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DB2ExtendedOptionsImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2IdentitySpecifierImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2IdentitySpecifierImpl.java
new file mode 100644
index 0000000..6b5cbce
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2IdentitySpecifierImpl.java
@@ -0,0 +1,322 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: DB2IdentitySpecifierImpl.java,v 1.13 2009/07/30 00:21:44 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.IdentitySpecifierImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2IdentitySpecifier;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import java.math.BigInteger;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 Identity Specifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2IdentitySpecifierImpl#getCache <em>Cache</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2IdentitySpecifierImpl#isOrder <em>Order</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2IdentitySpecifierImpl#isSystemGenerated <em>System Generated</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2IdentitySpecifierImpl#getRestartValue <em>Restart Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2IdentitySpecifierImpl extends IdentitySpecifierImpl implements DB2IdentitySpecifier {
+	/**
+	 * The default value of the '{@link #getCache() <em>Cache</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCache()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int CACHE_EDEFAULT = 20;
+
+	/**
+	 * The cached value of the '{@link #getCache() <em>Cache</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCache()
+	 * @generated
+	 * @ordered
+	 */
+	protected int cache = CACHE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isOrder() <em>Order</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isOrder()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean ORDER_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isOrder() <em>Order</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isOrder()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean order = ORDER_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isSystemGenerated() <em>System Generated</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSystemGenerated()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean SYSTEM_GENERATED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isSystemGenerated() <em>System Generated</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSystemGenerated()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean systemGenerated = SYSTEM_GENERATED_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getRestartValue() <em>Restart Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRestartValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final BigInteger RESTART_VALUE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getRestartValue() <em>Restart Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRestartValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected BigInteger restartValue = RESTART_VALUE_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2IdentitySpecifierImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_IDENTITY_SPECIFIER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getCache() {
+		return cache;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCache(int newCache) {
+		int oldCache = cache;
+		cache = newCache;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_IDENTITY_SPECIFIER__CACHE, oldCache, cache));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isOrder() {
+		return order;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOrder(boolean newOrder) {
+		boolean oldOrder = order;
+		order = newOrder;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_IDENTITY_SPECIFIER__ORDER, oldOrder, order));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isSystemGenerated() {
+		return systemGenerated;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSystemGenerated(boolean newSystemGenerated) {
+		boolean oldSystemGenerated = systemGenerated;
+		systemGenerated = newSystemGenerated;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_IDENTITY_SPECIFIER__SYSTEM_GENERATED, oldSystemGenerated, systemGenerated));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public BigInteger getRestartValue() {
+		return restartValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRestartValue(BigInteger newRestartValue) {
+		BigInteger oldRestartValue = restartValue;
+		restartValue = newRestartValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_IDENTITY_SPECIFIER__RESTART_VALUE, oldRestartValue, restartValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_IDENTITY_SPECIFIER__CACHE:
+				return new Integer(getCache());
+			case DB2ModelPackage.DB2_IDENTITY_SPECIFIER__ORDER:
+				return isOrder() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_IDENTITY_SPECIFIER__SYSTEM_GENERATED:
+				return isSystemGenerated() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_IDENTITY_SPECIFIER__RESTART_VALUE:
+				return getRestartValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_IDENTITY_SPECIFIER__CACHE:
+				setCache(((Integer)newValue).intValue());
+				return;
+			case DB2ModelPackage.DB2_IDENTITY_SPECIFIER__ORDER:
+				setOrder(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_IDENTITY_SPECIFIER__SYSTEM_GENERATED:
+				setSystemGenerated(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_IDENTITY_SPECIFIER__RESTART_VALUE:
+				setRestartValue((BigInteger)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_IDENTITY_SPECIFIER__CACHE:
+				setCache(CACHE_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_IDENTITY_SPECIFIER__ORDER:
+				setOrder(ORDER_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_IDENTITY_SPECIFIER__SYSTEM_GENERATED:
+				setSystemGenerated(SYSTEM_GENERATED_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_IDENTITY_SPECIFIER__RESTART_VALUE:
+				setRestartValue(RESTART_VALUE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_IDENTITY_SPECIFIER__CACHE:
+				return cache != CACHE_EDEFAULT;
+			case DB2ModelPackage.DB2_IDENTITY_SPECIFIER__ORDER:
+				return order != ORDER_EDEFAULT;
+			case DB2ModelPackage.DB2_IDENTITY_SPECIFIER__SYSTEM_GENERATED:
+				return systemGenerated != SYSTEM_GENERATED_EDEFAULT;
+			case DB2ModelPackage.DB2_IDENTITY_SPECIFIER__RESTART_VALUE:
+				return RESTART_VALUE_EDEFAULT == null ? restartValue != null : !RESTART_VALUE_EDEFAULT.equals(restartValue);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (cache: "); //$NON-NLS-1$
+		result.append(cache);
+		result.append(", order: "); //$NON-NLS-1$
+		result.append(order);
+		result.append(", systemGenerated: "); //$NON-NLS-1$
+		result.append(systemGenerated);
+		result.append(", restartValue: "); //$NON-NLS-1$
+		result.append(restartValue);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DB2IdentitySpecifierImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2IndexImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2IndexImpl.java
new file mode 100644
index 0000000..f822b85
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2IndexImpl.java
@@ -0,0 +1,382 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import org.eclipse.datatools.modelbase.sql.constraints.impl.IndexImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Index;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2IndexType;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2MultidimensionalIndex;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 Index</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2IndexImpl#getIndexType <em>Index Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2IndexImpl#isBusPeriodWithoutOverlap <em>Bus Period Without Overlap</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2IndexImpl#isEncodedVector <em>Encoded Vector</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2IndexImpl#getDB2MultidimensionalIndex <em>DB2 Multidimensional Index</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2IndexImpl extends IndexImpl implements DB2Index {
+	/**
+	 * The default value of the '{@link #getIndexType() <em>Index Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIndexType()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final DB2IndexType INDEX_TYPE_EDEFAULT = DB2IndexType.REGULAR_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getIndexType() <em>Index Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIndexType()
+	 * @generated
+	 * @ordered
+	 */
+	protected DB2IndexType indexType = INDEX_TYPE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isBusPeriodWithoutOverlap() <em>Bus Period Without Overlap</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isBusPeriodWithoutOverlap()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean BUS_PERIOD_WITHOUT_OVERLAP_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isBusPeriodWithoutOverlap() <em>Bus Period Without Overlap</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isBusPeriodWithoutOverlap()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean busPeriodWithoutOverlap = BUS_PERIOD_WITHOUT_OVERLAP_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isEncodedVector() <em>Encoded Vector</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isEncodedVector()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean ENCODED_VECTOR_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isEncodedVector() <em>Encoded Vector</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isEncodedVector()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean encodedVector = ENCODED_VECTOR_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getDB2MultidimensionalIndex() <em>DB2 Multidimensional Index</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDB2MultidimensionalIndex()
+	 * @generated
+	 * @ordered
+	 */
+	protected DB2MultidimensionalIndex db2MultidimensionalIndex;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2IndexImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_INDEX;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2IndexType getIndexType() {
+		return indexType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIndexType(DB2IndexType newIndexType) {
+		DB2IndexType oldIndexType = indexType;
+		indexType = newIndexType == null ? INDEX_TYPE_EDEFAULT : newIndexType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_INDEX__INDEX_TYPE, oldIndexType, indexType));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isBusPeriodWithoutOverlap() {
+		return busPeriodWithoutOverlap;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBusPeriodWithoutOverlap(boolean newBusPeriodWithoutOverlap) {
+		boolean oldBusPeriodWithoutOverlap = busPeriodWithoutOverlap;
+		busPeriodWithoutOverlap = newBusPeriodWithoutOverlap;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_INDEX__BUS_PERIOD_WITHOUT_OVERLAP, oldBusPeriodWithoutOverlap, busPeriodWithoutOverlap));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isEncodedVector() {
+		return encodedVector;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setEncodedVector(boolean newEncodedVector) {
+		boolean oldEncodedVector = encodedVector;
+		encodedVector = newEncodedVector;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_INDEX__ENCODED_VECTOR, oldEncodedVector, encodedVector));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2MultidimensionalIndex getDB2MultidimensionalIndex() {
+		if (db2MultidimensionalIndex != null && db2MultidimensionalIndex.eIsProxy()) {
+			InternalEObject oldDB2MultidimensionalIndex = (InternalEObject)db2MultidimensionalIndex;
+			db2MultidimensionalIndex = (DB2MultidimensionalIndex)eResolveProxy(oldDB2MultidimensionalIndex);
+			if (db2MultidimensionalIndex != oldDB2MultidimensionalIndex) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DB2ModelPackage.DB2_INDEX__DB2_MULTIDIMENSIONAL_INDEX, oldDB2MultidimensionalIndex, db2MultidimensionalIndex));
+			}
+		}
+		return db2MultidimensionalIndex;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2MultidimensionalIndex basicGetDB2MultidimensionalIndex() {
+		return db2MultidimensionalIndex;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetDB2MultidimensionalIndex(DB2MultidimensionalIndex newDB2MultidimensionalIndex, NotificationChain msgs) {
+		DB2MultidimensionalIndex oldDB2MultidimensionalIndex = db2MultidimensionalIndex;
+		db2MultidimensionalIndex = newDB2MultidimensionalIndex;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_INDEX__DB2_MULTIDIMENSIONAL_INDEX, oldDB2MultidimensionalIndex, newDB2MultidimensionalIndex);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDB2MultidimensionalIndex(DB2MultidimensionalIndex newDB2MultidimensionalIndex) {
+		if (newDB2MultidimensionalIndex != db2MultidimensionalIndex) {
+			NotificationChain msgs = null;
+			if (db2MultidimensionalIndex != null)
+				msgs = ((InternalEObject)db2MultidimensionalIndex).eInverseRemove(this, DB2ModelPackage.DB2_MULTIDIMENSIONAL_INDEX__DIMENSION_INDEXES, DB2MultidimensionalIndex.class, msgs);
+			if (newDB2MultidimensionalIndex != null)
+				msgs = ((InternalEObject)newDB2MultidimensionalIndex).eInverseAdd(this, DB2ModelPackage.DB2_MULTIDIMENSIONAL_INDEX__DIMENSION_INDEXES, DB2MultidimensionalIndex.class, msgs);
+			msgs = basicSetDB2MultidimensionalIndex(newDB2MultidimensionalIndex, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_INDEX__DB2_MULTIDIMENSIONAL_INDEX, newDB2MultidimensionalIndex, newDB2MultidimensionalIndex));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_INDEX__DB2_MULTIDIMENSIONAL_INDEX:
+				if (db2MultidimensionalIndex != null)
+					msgs = ((InternalEObject)db2MultidimensionalIndex).eInverseRemove(this, DB2ModelPackage.DB2_MULTIDIMENSIONAL_INDEX__DIMENSION_INDEXES, DB2MultidimensionalIndex.class, msgs);
+				return basicSetDB2MultidimensionalIndex((DB2MultidimensionalIndex)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_INDEX__DB2_MULTIDIMENSIONAL_INDEX:
+				return basicSetDB2MultidimensionalIndex(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_INDEX__INDEX_TYPE:
+				return getIndexType();
+			case DB2ModelPackage.DB2_INDEX__BUS_PERIOD_WITHOUT_OVERLAP:
+				return isBusPeriodWithoutOverlap() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_INDEX__ENCODED_VECTOR:
+				return isEncodedVector() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_INDEX__DB2_MULTIDIMENSIONAL_INDEX:
+				if (resolve) return getDB2MultidimensionalIndex();
+				return basicGetDB2MultidimensionalIndex();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_INDEX__INDEX_TYPE:
+				setIndexType((DB2IndexType)newValue);
+				return;
+			case DB2ModelPackage.DB2_INDEX__BUS_PERIOD_WITHOUT_OVERLAP:
+				setBusPeriodWithoutOverlap(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_INDEX__ENCODED_VECTOR:
+				setEncodedVector(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_INDEX__DB2_MULTIDIMENSIONAL_INDEX:
+				setDB2MultidimensionalIndex((DB2MultidimensionalIndex)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_INDEX__INDEX_TYPE:
+				setIndexType(INDEX_TYPE_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_INDEX__BUS_PERIOD_WITHOUT_OVERLAP:
+				setBusPeriodWithoutOverlap(BUS_PERIOD_WITHOUT_OVERLAP_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_INDEX__ENCODED_VECTOR:
+				setEncodedVector(ENCODED_VECTOR_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_INDEX__DB2_MULTIDIMENSIONAL_INDEX:
+				setDB2MultidimensionalIndex((DB2MultidimensionalIndex)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_INDEX__INDEX_TYPE:
+				return indexType != INDEX_TYPE_EDEFAULT;
+			case DB2ModelPackage.DB2_INDEX__BUS_PERIOD_WITHOUT_OVERLAP:
+				return busPeriodWithoutOverlap != BUS_PERIOD_WITHOUT_OVERLAP_EDEFAULT;
+			case DB2ModelPackage.DB2_INDEX__ENCODED_VECTOR:
+				return encodedVector != ENCODED_VECTOR_EDEFAULT;
+			case DB2ModelPackage.DB2_INDEX__DB2_MULTIDIMENSIONAL_INDEX:
+				return db2MultidimensionalIndex != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (indexType: "); //$NON-NLS-1$
+		result.append(indexType);
+		result.append(", busPeriodWithoutOverlap: "); //$NON-NLS-1$
+		result.append(busPeriodWithoutOverlap);
+		result.append(", encodedVector: "); //$NON-NLS-1$
+		result.append(encodedVector);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DB2IndexImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2JarImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2JarImpl.java
new file mode 100644
index 0000000..0eb92bd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2JarImpl.java
@@ -0,0 +1,532 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: DB2JarImpl.java,v 1.9 2008/02/05 02:01:23 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 Jar</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2JarImpl#getFileName <em>File Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2JarImpl#getPath <em>Path</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2JarImpl#getOwner <em>Owner</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2JarImpl#getCreatedTS <em>Created TS</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2JarImpl#getAlteredTS <em>Altered TS</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2JarImpl#getProcedures <em>Procedures</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2JarImpl#getSchema <em>Schema</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2JarImpl extends SQLObjectImpl implements DB2Jar {
+	/**
+	 * The default value of the '{@link #getFileName() <em>File Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getFileName()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String FILE_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getFileName() <em>File Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getFileName()
+	 * @generated
+	 * @ordered
+	 */
+   protected String fileName = FILE_NAME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getPath() <em>Path</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getPath()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String PATH_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getPath() <em>Path</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getPath()
+	 * @generated
+	 * @ordered
+	 */
+   protected String path = PATH_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getOwner() <em>Owner</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getOwner()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String OWNER_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getOwner() <em>Owner</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getOwner()
+	 * @generated
+	 * @ordered
+	 */
+   protected String owner = OWNER_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getCreatedTS() <em>Created TS</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getCreatedTS()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String CREATED_TS_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getCreatedTS() <em>Created TS</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getCreatedTS()
+	 * @generated
+	 * @ordered
+	 */
+   protected String createdTS = CREATED_TS_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getAlteredTS() <em>Altered TS</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getAlteredTS()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String ALTERED_TS_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getAlteredTS() <em>Altered TS</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getAlteredTS()
+	 * @generated
+	 * @ordered
+	 */
+   protected String alteredTS = ALTERED_TS_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getProcedures() <em>Procedures</em>}' reference list.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getProcedures()
+	 * @generated
+	 * @ordered
+	 */
+   protected EList procedures;
+
+	/**
+	 * The cached value of the '{@link #getSchema() <em>Schema</em>}' reference.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getSchema()
+	 * @generated
+	 * @ordered
+	 */
+   protected DB2Schema schema;
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   protected DB2JarImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_JAR;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getFileName() {
+		return fileName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setFileName(String newFileName) {
+		String oldFileName = fileName;
+		fileName = newFileName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_JAR__FILE_NAME, oldFileName, fileName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getPath() {
+		return path;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setPath(String newPath) {
+		String oldPath = path;
+		path = newPath;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_JAR__PATH, oldPath, path));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getOwner() {
+		return owner;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setOwner(String newOwner) {
+		String oldOwner = owner;
+		owner = newOwner;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_JAR__OWNER, oldOwner, owner));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getCreatedTS() {
+		return createdTS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setCreatedTS(String newCreatedTS) {
+		String oldCreatedTS = createdTS;
+		createdTS = newCreatedTS;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_JAR__CREATED_TS, oldCreatedTS, createdTS));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getAlteredTS() {
+		return alteredTS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setAlteredTS(String newAlteredTS) {
+		String oldAlteredTS = alteredTS;
+		alteredTS = newAlteredTS;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_JAR__ALTERED_TS, oldAlteredTS, alteredTS));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public EList getProcedures() {
+		if (procedures == null) {
+			procedures = new EObjectWithInverseResolvingEList(DB2JavaOptions.class, this, DB2ModelPackage.DB2_JAR__PROCEDURES, DB2ModelPackage.DB2_JAVA_OPTIONS__JAR);
+		}
+		return procedures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public DB2Schema getSchema() {
+		if (schema != null && schema.eIsProxy()) {
+			InternalEObject oldSchema = (InternalEObject)schema;
+			schema = (DB2Schema)eResolveProxy(oldSchema);
+			if (schema != oldSchema) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DB2ModelPackage.DB2_JAR__SCHEMA, oldSchema, schema));
+			}
+		}
+		return schema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public DB2Schema basicGetSchema() {
+		return schema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public NotificationChain basicSetSchema(DB2Schema newSchema, NotificationChain msgs) {
+		DB2Schema oldSchema = schema;
+		schema = newSchema;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_JAR__SCHEMA, oldSchema, newSchema);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setSchema(DB2Schema newSchema) {
+		if (newSchema != schema) {
+			NotificationChain msgs = null;
+			if (schema != null)
+				msgs = ((InternalEObject)schema).eInverseRemove(this, DB2ModelPackage.DB2_SCHEMA__JARS, DB2Schema.class, msgs);
+			if (newSchema != null)
+				msgs = ((InternalEObject)newSchema).eInverseAdd(this, DB2ModelPackage.DB2_SCHEMA__JARS, DB2Schema.class, msgs);
+			msgs = basicSetSchema(newSchema, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_JAR__SCHEMA, newSchema, newSchema));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_JAR__PROCEDURES:
+				return ((InternalEList)getProcedures()).basicAdd(otherEnd, msgs);
+			case DB2ModelPackage.DB2_JAR__SCHEMA:
+				if (schema != null)
+					msgs = ((InternalEObject)schema).eInverseRemove(this, DB2ModelPackage.DB2_SCHEMA__JARS, DB2Schema.class, msgs);
+				return basicSetSchema((DB2Schema)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_JAR__PROCEDURES:
+				return ((InternalEList)getProcedures()).basicRemove(otherEnd, msgs);
+			case DB2ModelPackage.DB2_JAR__SCHEMA:
+				return basicSetSchema(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_JAR__FILE_NAME:
+				return getFileName();
+			case DB2ModelPackage.DB2_JAR__PATH:
+				return getPath();
+			case DB2ModelPackage.DB2_JAR__OWNER:
+				return getOwner();
+			case DB2ModelPackage.DB2_JAR__CREATED_TS:
+				return getCreatedTS();
+			case DB2ModelPackage.DB2_JAR__ALTERED_TS:
+				return getAlteredTS();
+			case DB2ModelPackage.DB2_JAR__PROCEDURES:
+				return getProcedures();
+			case DB2ModelPackage.DB2_JAR__SCHEMA:
+				if (resolve) return getSchema();
+				return basicGetSchema();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_JAR__FILE_NAME:
+				setFileName((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_JAR__PATH:
+				setPath((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_JAR__OWNER:
+				setOwner((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_JAR__CREATED_TS:
+				setCreatedTS((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_JAR__ALTERED_TS:
+				setAlteredTS((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_JAR__PROCEDURES:
+				getProcedures().clear();
+				getProcedures().addAll((Collection)newValue);
+				return;
+			case DB2ModelPackage.DB2_JAR__SCHEMA:
+				setSchema((DB2Schema)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_JAR__FILE_NAME:
+				setFileName(FILE_NAME_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_JAR__PATH:
+				setPath(PATH_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_JAR__OWNER:
+				setOwner(OWNER_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_JAR__CREATED_TS:
+				setCreatedTS(CREATED_TS_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_JAR__ALTERED_TS:
+				setAlteredTS(ALTERED_TS_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_JAR__PROCEDURES:
+				getProcedures().clear();
+				return;
+			case DB2ModelPackage.DB2_JAR__SCHEMA:
+				setSchema((DB2Schema)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_JAR__FILE_NAME:
+				return FILE_NAME_EDEFAULT == null ? fileName != null : !FILE_NAME_EDEFAULT.equals(fileName);
+			case DB2ModelPackage.DB2_JAR__PATH:
+				return PATH_EDEFAULT == null ? path != null : !PATH_EDEFAULT.equals(path);
+			case DB2ModelPackage.DB2_JAR__OWNER:
+				return OWNER_EDEFAULT == null ? owner != null : !OWNER_EDEFAULT.equals(owner);
+			case DB2ModelPackage.DB2_JAR__CREATED_TS:
+				return CREATED_TS_EDEFAULT == null ? createdTS != null : !CREATED_TS_EDEFAULT.equals(createdTS);
+			case DB2ModelPackage.DB2_JAR__ALTERED_TS:
+				return ALTERED_TS_EDEFAULT == null ? alteredTS != null : !ALTERED_TS_EDEFAULT.equals(alteredTS);
+			case DB2ModelPackage.DB2_JAR__PROCEDURES:
+				return procedures != null && !procedures.isEmpty();
+			case DB2ModelPackage.DB2_JAR__SCHEMA:
+				return schema != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (fileName: "); //$NON-NLS-1$
+		result.append(fileName);
+		result.append(", path: "); //$NON-NLS-1$
+		result.append(path);
+		result.append(", owner: "); //$NON-NLS-1$
+		result.append(owner);
+		result.append(", createdTS: "); //$NON-NLS-1$
+		result.append(createdTS);
+		result.append(", alteredTS: "); //$NON-NLS-1$
+		result.append(alteredTS);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DB2JarImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2JavaOptionsImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2JavaOptionsImpl.java
new file mode 100644
index 0000000..3e44727
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2JavaOptionsImpl.java
@@ -0,0 +1,453 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: DB2JavaOptionsImpl.java,v 1.9 2008/02/05 02:01:23 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 Java Options</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2JavaOptionsImpl#getClassName <em>Class Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2JavaOptionsImpl#getMethodName <em>Method Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2JavaOptionsImpl#isSqlj <em>Sqlj</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2JavaOptionsImpl#getProcedure <em>Procedure</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2JavaOptionsImpl#getJar <em>Jar</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2JavaOptionsImpl extends SQLObjectImpl implements DB2JavaOptions {
+	/**
+	 * The default value of the '{@link #getClassName() <em>Class Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getClassName()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String CLASS_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getClassName() <em>Class Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getClassName()
+	 * @generated
+	 * @ordered
+	 */
+   protected String className = CLASS_NAME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getMethodName() <em>Method Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getMethodName()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String METHOD_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getMethodName() <em>Method Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getMethodName()
+	 * @generated
+	 * @ordered
+	 */
+   protected String methodName = METHOD_NAME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isSqlj() <em>Sqlj</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #isSqlj()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final boolean SQLJ_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isSqlj() <em>Sqlj</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #isSqlj()
+	 * @generated
+	 * @ordered
+	 */
+   protected boolean sqlj = SQLJ_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getJar() <em>Jar</em>}' reference.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getJar()
+	 * @generated
+	 * @ordered
+	 */
+   protected DB2Jar jar;
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   protected DB2JavaOptionsImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_JAVA_OPTIONS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getClassName() {
+		return className;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setClassName(String newClassName) {
+		String oldClassName = className;
+		className = newClassName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_JAVA_OPTIONS__CLASS_NAME, oldClassName, className));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getMethodName() {
+		return methodName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setMethodName(String newMethodName) {
+		String oldMethodName = methodName;
+		methodName = newMethodName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_JAVA_OPTIONS__METHOD_NAME, oldMethodName, methodName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public boolean isSqlj() {
+		return sqlj;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setSqlj(boolean newSqlj) {
+		boolean oldSqlj = sqlj;
+		sqlj = newSqlj;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_JAVA_OPTIONS__SQLJ, oldSqlj, sqlj));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public DB2Procedure getProcedure() {
+		if (eContainerFeatureID() != DB2ModelPackage.DB2_JAVA_OPTIONS__PROCEDURE) return null;
+		return (DB2Procedure)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetProcedure(DB2Procedure newProcedure, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newProcedure, DB2ModelPackage.DB2_JAVA_OPTIONS__PROCEDURE, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setProcedure(DB2Procedure newProcedure) {
+		if (newProcedure != eInternalContainer() || (eContainerFeatureID() != DB2ModelPackage.DB2_JAVA_OPTIONS__PROCEDURE && newProcedure != null)) {
+			if (EcoreUtil.isAncestor(this, newProcedure))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newProcedure != null)
+				msgs = ((InternalEObject)newProcedure).eInverseAdd(this, DB2ModelPackage.DB2_PROCEDURE__JAVA_OPTIONS, DB2Procedure.class, msgs);
+			msgs = basicSetProcedure(newProcedure, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_JAVA_OPTIONS__PROCEDURE, newProcedure, newProcedure));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public DB2Jar getJar() {
+		if (jar != null && jar.eIsProxy()) {
+			InternalEObject oldJar = (InternalEObject)jar;
+			jar = (DB2Jar)eResolveProxy(oldJar);
+			if (jar != oldJar) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DB2ModelPackage.DB2_JAVA_OPTIONS__JAR, oldJar, jar));
+			}
+		}
+		return jar;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public DB2Jar basicGetJar() {
+		return jar;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public NotificationChain basicSetJar(DB2Jar newJar, NotificationChain msgs) {
+		DB2Jar oldJar = jar;
+		jar = newJar;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_JAVA_OPTIONS__JAR, oldJar, newJar);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setJar(DB2Jar newJar) {
+		if (newJar != jar) {
+			NotificationChain msgs = null;
+			if (jar != null)
+				msgs = ((InternalEObject)jar).eInverseRemove(this, DB2ModelPackage.DB2_JAR__PROCEDURES, DB2Jar.class, msgs);
+			if (newJar != null)
+				msgs = ((InternalEObject)newJar).eInverseAdd(this, DB2ModelPackage.DB2_JAR__PROCEDURES, DB2Jar.class, msgs);
+			msgs = basicSetJar(newJar, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_JAVA_OPTIONS__JAR, newJar, newJar));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_JAVA_OPTIONS__PROCEDURE:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetProcedure((DB2Procedure)otherEnd, msgs);
+			case DB2ModelPackage.DB2_JAVA_OPTIONS__JAR:
+				if (jar != null)
+					msgs = ((InternalEObject)jar).eInverseRemove(this, DB2ModelPackage.DB2_JAR__PROCEDURES, DB2Jar.class, msgs);
+				return basicSetJar((DB2Jar)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_JAVA_OPTIONS__PROCEDURE:
+				return basicSetProcedure(null, msgs);
+			case DB2ModelPackage.DB2_JAVA_OPTIONS__JAR:
+				return basicSetJar(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case DB2ModelPackage.DB2_JAVA_OPTIONS__PROCEDURE:
+				return eInternalContainer().eInverseRemove(this, DB2ModelPackage.DB2_PROCEDURE__JAVA_OPTIONS, DB2Procedure.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_JAVA_OPTIONS__CLASS_NAME:
+				return getClassName();
+			case DB2ModelPackage.DB2_JAVA_OPTIONS__METHOD_NAME:
+				return getMethodName();
+			case DB2ModelPackage.DB2_JAVA_OPTIONS__SQLJ:
+				return isSqlj() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_JAVA_OPTIONS__PROCEDURE:
+				return getProcedure();
+			case DB2ModelPackage.DB2_JAVA_OPTIONS__JAR:
+				if (resolve) return getJar();
+				return basicGetJar();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_JAVA_OPTIONS__CLASS_NAME:
+				setClassName((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_JAVA_OPTIONS__METHOD_NAME:
+				setMethodName((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_JAVA_OPTIONS__SQLJ:
+				setSqlj(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_JAVA_OPTIONS__PROCEDURE:
+				setProcedure((DB2Procedure)newValue);
+				return;
+			case DB2ModelPackage.DB2_JAVA_OPTIONS__JAR:
+				setJar((DB2Jar)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_JAVA_OPTIONS__CLASS_NAME:
+				setClassName(CLASS_NAME_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_JAVA_OPTIONS__METHOD_NAME:
+				setMethodName(METHOD_NAME_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_JAVA_OPTIONS__SQLJ:
+				setSqlj(SQLJ_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_JAVA_OPTIONS__PROCEDURE:
+				setProcedure((DB2Procedure)null);
+				return;
+			case DB2ModelPackage.DB2_JAVA_OPTIONS__JAR:
+				setJar((DB2Jar)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_JAVA_OPTIONS__CLASS_NAME:
+				return CLASS_NAME_EDEFAULT == null ? className != null : !CLASS_NAME_EDEFAULT.equals(className);
+			case DB2ModelPackage.DB2_JAVA_OPTIONS__METHOD_NAME:
+				return METHOD_NAME_EDEFAULT == null ? methodName != null : !METHOD_NAME_EDEFAULT.equals(methodName);
+			case DB2ModelPackage.DB2_JAVA_OPTIONS__SQLJ:
+				return sqlj != SQLJ_EDEFAULT;
+			case DB2ModelPackage.DB2_JAVA_OPTIONS__PROCEDURE:
+				return getProcedure() != null;
+			case DB2ModelPackage.DB2_JAVA_OPTIONS__JAR:
+				return jar != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (className: "); //$NON-NLS-1$
+		result.append(className);
+		result.append(", methodName: "); //$NON-NLS-1$
+		result.append(methodName);
+		result.append(", sqlj: "); //$NON-NLS-1$
+		result.append(sqlj);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DB2JavaOptionsImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2MaskImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2MaskImpl.java
new file mode 100644
index 0000000..b28ebc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2MaskImpl.java
@@ -0,0 +1,636 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Column;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Table;
+
+import org.eclipse.datatools.modelbase.sql.expressions.QueryExpression;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 Mask</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MaskImpl#getCorrelationName <em>Correlation Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MaskImpl#getCaseExpression <em>Case Expression</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MaskImpl#isEnable <em>Enable</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MaskImpl#getSchema <em>Schema</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MaskImpl#getSubjectTable <em>Subject Table</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MaskImpl#getSubjectMQT <em>Subject MQT</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MaskImpl#getSubjectColumn <em>Subject Column</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2MaskImpl extends SQLObjectImpl implements DB2Mask {
+	/**
+	 * The default value of the '{@link #getCorrelationName() <em>Correlation Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCorrelationName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String CORRELATION_NAME_EDEFAULT = null; //$NON-NLS-1$
+
+	/**
+	 * The cached value of the '{@link #getCorrelationName() <em>Correlation Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCorrelationName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String correlationName = CORRELATION_NAME_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getCaseExpression() <em>Case Expression</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCaseExpression()
+	 * @generated
+	 * @ordered
+	 */
+	protected QueryExpression caseExpression;
+
+	/**
+	 * The default value of the '{@link #isEnable() <em>Enable</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isEnable()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean ENABLE_EDEFAULT = true;
+
+	/**
+	 * The cached value of the '{@link #isEnable() <em>Enable</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isEnable()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean enable = ENABLE_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getSchema() <em>Schema</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSchema()
+	 * @generated
+	 * @ordered
+	 */
+	protected DB2Schema schema;
+
+	/**
+	 * The cached value of the '{@link #getSubjectTable() <em>Subject Table</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSubjectTable()
+	 * @generated
+	 * @ordered
+	 */
+	protected DB2Table subjectTable;
+
+	/**
+	 * The cached value of the '{@link #getSubjectMQT() <em>Subject MQT</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSubjectMQT()
+	 * @generated
+	 * @ordered
+	 */
+	protected DB2MaterializedQueryTable subjectMQT;
+
+	/**
+	 * The cached value of the '{@link #getSubjectColumn() <em>Subject Column</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSubjectColumn()
+	 * @generated
+	 * @ordered
+	 */
+	protected DB2Column subjectColumn;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2MaskImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_MASK;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getCorrelationName() {
+		return correlationName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCorrelationName(String newCorrelationName) {
+		String oldCorrelationName = correlationName;
+		correlationName = newCorrelationName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_MASK__CORRELATION_NAME, oldCorrelationName, correlationName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public QueryExpression getCaseExpression() {
+		return caseExpression;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetCaseExpression(QueryExpression newCaseExpression, NotificationChain msgs) {
+		QueryExpression oldCaseExpression = caseExpression;
+		caseExpression = newCaseExpression;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_MASK__CASE_EXPRESSION, oldCaseExpression, newCaseExpression);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCaseExpression(QueryExpression newCaseExpression) {
+		if (newCaseExpression != caseExpression) {
+			NotificationChain msgs = null;
+			if (caseExpression != null)
+				msgs = ((InternalEObject)caseExpression).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - DB2ModelPackage.DB2_MASK__CASE_EXPRESSION, null, msgs);
+			if (newCaseExpression != null)
+				msgs = ((InternalEObject)newCaseExpression).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - DB2ModelPackage.DB2_MASK__CASE_EXPRESSION, null, msgs);
+			msgs = basicSetCaseExpression(newCaseExpression, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_MASK__CASE_EXPRESSION, newCaseExpression, newCaseExpression));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isEnable() {
+		return enable;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setEnable(boolean newEnable) {
+		boolean oldEnable = enable;
+		enable = newEnable;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_MASK__ENABLE, oldEnable, enable));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Schema getSchema() {
+		if (schema != null && schema.eIsProxy()) {
+			InternalEObject oldSchema = (InternalEObject)schema;
+			schema = (DB2Schema)eResolveProxy(oldSchema);
+			if (schema != oldSchema) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DB2ModelPackage.DB2_MASK__SCHEMA, oldSchema, schema));
+			}
+		}
+		return schema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Schema basicGetSchema() {
+		return schema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetSchema(DB2Schema newSchema, NotificationChain msgs) {
+		DB2Schema oldSchema = schema;
+		schema = newSchema;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_MASK__SCHEMA, oldSchema, newSchema);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSchema(DB2Schema newSchema) {
+		if (newSchema != schema) {
+			NotificationChain msgs = null;
+			if (schema != null)
+				msgs = ((InternalEObject)schema).eInverseRemove(this, DB2ModelPackage.DB2_SCHEMA__MASKS, DB2Schema.class, msgs);
+			if (newSchema != null)
+				msgs = ((InternalEObject)newSchema).eInverseAdd(this, DB2ModelPackage.DB2_SCHEMA__MASKS, DB2Schema.class, msgs);
+			msgs = basicSetSchema(newSchema, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_MASK__SCHEMA, newSchema, newSchema));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Table getSubjectTable() {
+		if (subjectTable != null && subjectTable.eIsProxy()) {
+			InternalEObject oldSubjectTable = (InternalEObject)subjectTable;
+			subjectTable = (DB2Table)eResolveProxy(oldSubjectTable);
+			if (subjectTable != oldSubjectTable) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DB2ModelPackage.DB2_MASK__SUBJECT_TABLE, oldSubjectTable, subjectTable));
+			}
+		}
+		return subjectTable;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Table basicGetSubjectTable() {
+		return subjectTable;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetSubjectTable(DB2Table newSubjectTable, NotificationChain msgs) {
+		DB2Table oldSubjectTable = subjectTable;
+		subjectTable = newSubjectTable;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_MASK__SUBJECT_TABLE, oldSubjectTable, newSubjectTable);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSubjectTable(DB2Table newSubjectTable) {
+		if (newSubjectTable != subjectTable) {
+			NotificationChain msgs = null;
+			if (subjectTable != null)
+				msgs = ((InternalEObject)subjectTable).eInverseRemove(this, DB2ModelPackage.DB2_TABLE__MASKS, DB2Table.class, msgs);
+			if (newSubjectTable != null)
+				msgs = ((InternalEObject)newSubjectTable).eInverseAdd(this, DB2ModelPackage.DB2_TABLE__MASKS, DB2Table.class, msgs);
+			msgs = basicSetSubjectTable(newSubjectTable, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_MASK__SUBJECT_TABLE, newSubjectTable, newSubjectTable));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2MaterializedQueryTable getSubjectMQT() {
+		if (subjectMQT != null && subjectMQT.eIsProxy()) {
+			InternalEObject oldSubjectMQT = (InternalEObject)subjectMQT;
+			subjectMQT = (DB2MaterializedQueryTable)eResolveProxy(oldSubjectMQT);
+			if (subjectMQT != oldSubjectMQT) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DB2ModelPackage.DB2_MASK__SUBJECT_MQT, oldSubjectMQT, subjectMQT));
+			}
+		}
+		return subjectMQT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2MaterializedQueryTable basicGetSubjectMQT() {
+		return subjectMQT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetSubjectMQT(DB2MaterializedQueryTable newSubjectMQT, NotificationChain msgs) {
+		DB2MaterializedQueryTable oldSubjectMQT = subjectMQT;
+		subjectMQT = newSubjectMQT;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_MASK__SUBJECT_MQT, oldSubjectMQT, newSubjectMQT);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSubjectMQT(DB2MaterializedQueryTable newSubjectMQT) {
+		if (newSubjectMQT != subjectMQT) {
+			NotificationChain msgs = null;
+			if (subjectMQT != null)
+				msgs = ((InternalEObject)subjectMQT).eInverseRemove(this, DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__MASKS, DB2MaterializedQueryTable.class, msgs);
+			if (newSubjectMQT != null)
+				msgs = ((InternalEObject)newSubjectMQT).eInverseAdd(this, DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__MASKS, DB2MaterializedQueryTable.class, msgs);
+			msgs = basicSetSubjectMQT(newSubjectMQT, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_MASK__SUBJECT_MQT, newSubjectMQT, newSubjectMQT));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Column getSubjectColumn() {
+		if (subjectColumn != null && subjectColumn.eIsProxy()) {
+			InternalEObject oldSubjectColumn = (InternalEObject)subjectColumn;
+			subjectColumn = (DB2Column)eResolveProxy(oldSubjectColumn);
+			if (subjectColumn != oldSubjectColumn) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DB2ModelPackage.DB2_MASK__SUBJECT_COLUMN, oldSubjectColumn, subjectColumn));
+			}
+		}
+		return subjectColumn;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Column basicGetSubjectColumn() {
+		return subjectColumn;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSubjectColumn(DB2Column newSubjectColumn) {
+		DB2Column oldSubjectColumn = subjectColumn;
+		subjectColumn = newSubjectColumn;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_MASK__SUBJECT_COLUMN, oldSubjectColumn, subjectColumn));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_MASK__SCHEMA:
+				if (schema != null)
+					msgs = ((InternalEObject)schema).eInverseRemove(this, DB2ModelPackage.DB2_SCHEMA__MASKS, DB2Schema.class, msgs);
+				return basicSetSchema((DB2Schema)otherEnd, msgs);
+			case DB2ModelPackage.DB2_MASK__SUBJECT_TABLE:
+				if (subjectTable != null)
+					msgs = ((InternalEObject)subjectTable).eInverseRemove(this, DB2ModelPackage.DB2_TABLE__MASKS, DB2Table.class, msgs);
+				return basicSetSubjectTable((DB2Table)otherEnd, msgs);
+			case DB2ModelPackage.DB2_MASK__SUBJECT_MQT:
+				if (subjectMQT != null)
+					msgs = ((InternalEObject)subjectMQT).eInverseRemove(this, DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__MASKS, DB2MaterializedQueryTable.class, msgs);
+				return basicSetSubjectMQT((DB2MaterializedQueryTable)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_MASK__CASE_EXPRESSION:
+				return basicSetCaseExpression(null, msgs);
+			case DB2ModelPackage.DB2_MASK__SCHEMA:
+				return basicSetSchema(null, msgs);
+			case DB2ModelPackage.DB2_MASK__SUBJECT_TABLE:
+				return basicSetSubjectTable(null, msgs);
+			case DB2ModelPackage.DB2_MASK__SUBJECT_MQT:
+				return basicSetSubjectMQT(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_MASK__CORRELATION_NAME:
+				return getCorrelationName();
+			case DB2ModelPackage.DB2_MASK__CASE_EXPRESSION:
+				return getCaseExpression();
+			case DB2ModelPackage.DB2_MASK__ENABLE:
+				return isEnable() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_MASK__SCHEMA:
+				if (resolve) return getSchema();
+				return basicGetSchema();
+			case DB2ModelPackage.DB2_MASK__SUBJECT_TABLE:
+				if (resolve) return getSubjectTable();
+				return basicGetSubjectTable();
+			case DB2ModelPackage.DB2_MASK__SUBJECT_MQT:
+				if (resolve) return getSubjectMQT();
+				return basicGetSubjectMQT();
+			case DB2ModelPackage.DB2_MASK__SUBJECT_COLUMN:
+				if (resolve) return getSubjectColumn();
+				return basicGetSubjectColumn();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_MASK__CORRELATION_NAME:
+				setCorrelationName((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_MASK__CASE_EXPRESSION:
+				setCaseExpression((QueryExpression)newValue);
+				return;
+			case DB2ModelPackage.DB2_MASK__ENABLE:
+				setEnable(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_MASK__SCHEMA:
+				setSchema((DB2Schema)newValue);
+				return;
+			case DB2ModelPackage.DB2_MASK__SUBJECT_TABLE:
+				setSubjectTable((DB2Table)newValue);
+				return;
+			case DB2ModelPackage.DB2_MASK__SUBJECT_MQT:
+				setSubjectMQT((DB2MaterializedQueryTable)newValue);
+				return;
+			case DB2ModelPackage.DB2_MASK__SUBJECT_COLUMN:
+				setSubjectColumn((DB2Column)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_MASK__CORRELATION_NAME:
+				setCorrelationName(CORRELATION_NAME_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_MASK__CASE_EXPRESSION:
+				setCaseExpression((QueryExpression)null);
+				return;
+			case DB2ModelPackage.DB2_MASK__ENABLE:
+				setEnable(ENABLE_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_MASK__SCHEMA:
+				setSchema((DB2Schema)null);
+				return;
+			case DB2ModelPackage.DB2_MASK__SUBJECT_TABLE:
+				setSubjectTable((DB2Table)null);
+				return;
+			case DB2ModelPackage.DB2_MASK__SUBJECT_MQT:
+				setSubjectMQT((DB2MaterializedQueryTable)null);
+				return;
+			case DB2ModelPackage.DB2_MASK__SUBJECT_COLUMN:
+				setSubjectColumn((DB2Column)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_MASK__CORRELATION_NAME:
+				return CORRELATION_NAME_EDEFAULT == null ? correlationName != null : !CORRELATION_NAME_EDEFAULT.equals(correlationName);
+			case DB2ModelPackage.DB2_MASK__CASE_EXPRESSION:
+				return caseExpression != null;
+			case DB2ModelPackage.DB2_MASK__ENABLE:
+				return enable != ENABLE_EDEFAULT;
+			case DB2ModelPackage.DB2_MASK__SCHEMA:
+				return schema != null;
+			case DB2ModelPackage.DB2_MASK__SUBJECT_TABLE:
+				return subjectTable != null;
+			case DB2ModelPackage.DB2_MASK__SUBJECT_MQT:
+				return subjectMQT != null;
+			case DB2ModelPackage.DB2_MASK__SUBJECT_COLUMN:
+				return subjectColumn != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (correlationName: "); //$NON-NLS-1$
+		result.append(correlationName);
+		result.append(", enable: "); //$NON-NLS-1$
+		result.append(enable);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DB2MaskImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2MaterializedQueryTableImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2MaterializedQueryTableImpl.java
new file mode 100644
index 0000000..df44c6f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2MaterializedQueryTableImpl.java
@@ -0,0 +1,376 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask;
+import org.eclipse.datatools.modelbase.sql.tables.impl.DerivedTableImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission;
+import java.util.Collection;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 Materialized Query Table</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MaterializedQueryTableImpl#getRefresh <em>Refresh</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MaterializedQueryTableImpl#isOptimizeQuery <em>Optimize Query</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MaterializedQueryTableImpl#getMaintainedBy <em>Maintained By</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MaterializedQueryTableImpl#isActivateRowAccessControl <em>Activate Row Access Control</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MaterializedQueryTableImpl#isActivateColumnAccessControl <em>Activate Column Access Control</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MaterializedQueryTableImpl#getMasks <em>Masks</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MaterializedQueryTableImpl#getPermissions <em>Permissions</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class DB2MaterializedQueryTableImpl extends DerivedTableImpl implements DB2MaterializedQueryTable {
+	/**
+	 * The default value of the '{@link #isOptimizeQuery() <em>Optimize Query</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isOptimizeQuery()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean OPTIMIZE_QUERY_EDEFAULT = true;
+
+	/**
+	 * The cached value of the '{@link #isOptimizeQuery() <em>Optimize Query</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isOptimizeQuery()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean optimizeQuery = OPTIMIZE_QUERY_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isActivateRowAccessControl() <em>Activate Row Access Control</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isActivateRowAccessControl()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean ACTIVATE_ROW_ACCESS_CONTROL_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isActivateRowAccessControl() <em>Activate Row Access Control</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isActivateRowAccessControl()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean activateRowAccessControl = ACTIVATE_ROW_ACCESS_CONTROL_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isActivateColumnAccessControl() <em>Activate Column Access Control</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isActivateColumnAccessControl()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean ACTIVATE_COLUMN_ACCESS_CONTROL_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isActivateColumnAccessControl() <em>Activate Column Access Control</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isActivateColumnAccessControl()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean activateColumnAccessControl = ACTIVATE_COLUMN_ACCESS_CONTROL_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getMasks() <em>Masks</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMasks()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList masks;
+
+	/**
+	 * The cached value of the '{@link #getPermissions() <em>Permissions</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPermissions()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList permissions;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2MaterializedQueryTableImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_MATERIALIZED_QUERY_TABLE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isOptimizeQuery() {
+		return optimizeQuery;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOptimizeQuery(boolean newOptimizeQuery) {
+		boolean oldOptimizeQuery = optimizeQuery;
+		optimizeQuery = newOptimizeQuery;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__OPTIMIZE_QUERY, oldOptimizeQuery, optimizeQuery));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isActivateRowAccessControl() {
+		return activateRowAccessControl;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setActivateRowAccessControl(boolean newActivateRowAccessControl) {
+		boolean oldActivateRowAccessControl = activateRowAccessControl;
+		activateRowAccessControl = newActivateRowAccessControl;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__ACTIVATE_ROW_ACCESS_CONTROL, oldActivateRowAccessControl, activateRowAccessControl));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isActivateColumnAccessControl() {
+		return activateColumnAccessControl;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setActivateColumnAccessControl(boolean newActivateColumnAccessControl) {
+		boolean oldActivateColumnAccessControl = activateColumnAccessControl;
+		activateColumnAccessControl = newActivateColumnAccessControl;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__ACTIVATE_COLUMN_ACCESS_CONTROL, oldActivateColumnAccessControl, activateColumnAccessControl));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getMasks() {
+		if (masks == null) {
+			masks = new EObjectWithInverseResolvingEList(DB2Mask.class, this, DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__MASKS, DB2ModelPackage.DB2_MASK__SUBJECT_MQT);
+		}
+		return masks;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getPermissions() {
+		if (permissions == null) {
+			permissions = new EObjectWithInverseResolvingEList(DB2Permission.class, this, DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__PERMISSIONS, DB2ModelPackage.DB2_PERMISSION__SUBJECT_MQT);
+		}
+		return permissions;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__MASKS:
+				return ((InternalEList)getMasks()).basicAdd(otherEnd, msgs);
+			case DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__PERMISSIONS:
+				return ((InternalEList)getPermissions()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__MASKS:
+				return ((InternalEList)getMasks()).basicRemove(otherEnd, msgs);
+			case DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__PERMISSIONS:
+				return ((InternalEList)getPermissions()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__OPTIMIZE_QUERY:
+				return isOptimizeQuery() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__ACTIVATE_ROW_ACCESS_CONTROL:
+				return isActivateRowAccessControl() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__ACTIVATE_COLUMN_ACCESS_CONTROL:
+				return isActivateColumnAccessControl() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__MASKS:
+				return getMasks();
+			case DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__PERMISSIONS:
+				return getPermissions();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__OPTIMIZE_QUERY:
+				setOptimizeQuery(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__ACTIVATE_ROW_ACCESS_CONTROL:
+				setActivateRowAccessControl(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__ACTIVATE_COLUMN_ACCESS_CONTROL:
+				setActivateColumnAccessControl(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__MASKS:
+				getMasks().clear();
+				getMasks().addAll((Collection)newValue);
+				return;
+			case DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__PERMISSIONS:
+				getPermissions().clear();
+				getPermissions().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__OPTIMIZE_QUERY:
+				setOptimizeQuery(OPTIMIZE_QUERY_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__ACTIVATE_ROW_ACCESS_CONTROL:
+				setActivateRowAccessControl(ACTIVATE_ROW_ACCESS_CONTROL_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__ACTIVATE_COLUMN_ACCESS_CONTROL:
+				setActivateColumnAccessControl(ACTIVATE_COLUMN_ACCESS_CONTROL_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__MASKS:
+				getMasks().clear();
+				return;
+			case DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__PERMISSIONS:
+				getPermissions().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__OPTIMIZE_QUERY:
+				return optimizeQuery != OPTIMIZE_QUERY_EDEFAULT;
+			case DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__ACTIVATE_ROW_ACCESS_CONTROL:
+				return activateRowAccessControl != ACTIVATE_ROW_ACCESS_CONTROL_EDEFAULT;
+			case DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__ACTIVATE_COLUMN_ACCESS_CONTROL:
+				return activateColumnAccessControl != ACTIVATE_COLUMN_ACCESS_CONTROL_EDEFAULT;
+			case DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__MASKS:
+				return masks != null && !masks.isEmpty();
+			case DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__PERMISSIONS:
+				return permissions != null && !permissions.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(", optimizeQuery: "); //$NON-NLS-1$
+		result.append(optimizeQuery);
+		result.append(", activateRowAccessControl: "); //$NON-NLS-1$
+		result.append(activateRowAccessControl);
+		result.append(", activateColumnAccessControl: "); //$NON-NLS-1$
+		result.append(activateColumnAccessControl);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DB2MaterializedQueryTableImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2MemberImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2MemberImpl.java
new file mode 100644
index 0000000..1b80d5e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2MemberImpl.java
@@ -0,0 +1,376 @@
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Cluster;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Member;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 Member</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MemberImpl#getId <em>Id</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MemberImpl#getHomeHost <em>Home Host</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MemberImpl#getCurrentHost <em>Current Host</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MemberImpl#getState <em>State</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MemberImpl#getCluster <em>Cluster</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2MemberImpl extends SQLObjectImpl implements DB2Member {
+	/**
+	 * The default value of the '{@link #getId() <em>Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getId()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int ID_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getId() <em>Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getId()
+	 * @generated
+	 * @ordered
+	 */
+	protected int id = ID_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getHomeHost() <em>Home Host</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getHomeHost()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String HOME_HOST_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getHomeHost() <em>Home Host</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getHomeHost()
+	 * @generated
+	 * @ordered
+	 */
+	protected String homeHost = HOME_HOST_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getCurrentHost() <em>Current Host</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCurrentHost()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String CURRENT_HOST_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getCurrentHost() <em>Current Host</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCurrentHost()
+	 * @generated
+	 * @ordered
+	 */
+	protected String currentHost = CURRENT_HOST_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getCluster() <em>Cluster</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCluster()
+	 * @generated
+	 * @ordered
+	 */
+	protected DB2Cluster cluster;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2MemberImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_MEMBER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getId() {
+		return id;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setId(int newId) {
+		int oldId = id;
+		id = newId;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_MEMBER__ID, oldId, id));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getHomeHost() {
+		return homeHost;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setHomeHost(String newHomeHost) {
+		String oldHomeHost = homeHost;
+		homeHost = newHomeHost;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_MEMBER__HOME_HOST, oldHomeHost, homeHost));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getCurrentHost() {
+		return currentHost;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCurrentHost(String newCurrentHost) {
+		String oldCurrentHost = currentHost;
+		currentHost = newCurrentHost;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_MEMBER__CURRENT_HOST, oldCurrentHost, currentHost));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Cluster getCluster() {
+		if (cluster != null && cluster.eIsProxy()) {
+			InternalEObject oldCluster = (InternalEObject)cluster;
+			cluster = (DB2Cluster)eResolveProxy(oldCluster);
+			if (cluster != oldCluster) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DB2ModelPackage.DB2_MEMBER__CLUSTER, oldCluster, cluster));
+			}
+		}
+		return cluster;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Cluster basicGetCluster() {
+		return cluster;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetCluster(DB2Cluster newCluster, NotificationChain msgs) {
+		DB2Cluster oldCluster = cluster;
+		cluster = newCluster;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_MEMBER__CLUSTER, oldCluster, newCluster);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCluster(DB2Cluster newCluster) {
+		if (newCluster != cluster) {
+			NotificationChain msgs = null;
+			if (cluster != null)
+				msgs = ((InternalEObject)cluster).eInverseRemove(this, DB2ModelPackage.DB2_CLUSTER__MEMBERS, DB2Cluster.class, msgs);
+			if (newCluster != null)
+				msgs = ((InternalEObject)newCluster).eInverseAdd(this, DB2ModelPackage.DB2_CLUSTER__MEMBERS, DB2Cluster.class, msgs);
+			msgs = basicSetCluster(newCluster, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_MEMBER__CLUSTER, newCluster, newCluster));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_MEMBER__CLUSTER:
+				if (cluster != null)
+					msgs = ((InternalEObject)cluster).eInverseRemove(this, DB2ModelPackage.DB2_CLUSTER__MEMBERS, DB2Cluster.class, msgs);
+				return basicSetCluster((DB2Cluster)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_MEMBER__CLUSTER:
+				return basicSetCluster(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_MEMBER__ID:
+				return new Integer(getId());
+			case DB2ModelPackage.DB2_MEMBER__HOME_HOST:
+				return getHomeHost();
+			case DB2ModelPackage.DB2_MEMBER__CURRENT_HOST:
+				return getCurrentHost();
+			case DB2ModelPackage.DB2_MEMBER__CLUSTER:
+				if (resolve) return getCluster();
+				return basicGetCluster();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_MEMBER__ID:
+				setId(((Integer)newValue).intValue());
+				return;
+			case DB2ModelPackage.DB2_MEMBER__HOME_HOST:
+				setHomeHost((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_MEMBER__CURRENT_HOST:
+				setCurrentHost((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_MEMBER__CLUSTER:
+				setCluster((DB2Cluster)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_MEMBER__ID:
+				setId(ID_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_MEMBER__HOME_HOST:
+				setHomeHost(HOME_HOST_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_MEMBER__CURRENT_HOST:
+				setCurrentHost(CURRENT_HOST_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_MEMBER__CLUSTER:
+				setCluster((DB2Cluster)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_MEMBER__ID:
+				return id != ID_EDEFAULT;
+			case DB2ModelPackage.DB2_MEMBER__HOME_HOST:
+				return HOME_HOST_EDEFAULT == null ? homeHost != null : !HOME_HOST_EDEFAULT.equals(homeHost);
+			case DB2ModelPackage.DB2_MEMBER__CURRENT_HOST:
+				return CURRENT_HOST_EDEFAULT == null ? currentHost != null : !CURRENT_HOST_EDEFAULT.equals(currentHost);
+			case DB2ModelPackage.DB2_MEMBER__CLUSTER:
+				return cluster != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (id: "); //$NON-NLS-1$
+		result.append(id);
+		result.append(", homeHost: "); //$NON-NLS-1$
+		result.append(homeHost);
+		result.append(", currentHost: "); //$NON-NLS-1$
+		result.append(currentHost);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DB2MemberImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2MethodImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2MethodImpl.java
new file mode 100644
index 0000000..2075cad
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2MethodImpl.java
@@ -0,0 +1,1874 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.modelbase.sql.routines.impl.MethodImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2AccessPlan;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Function;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Method;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2RoutineExtension;
+import org.eclipse.datatools.enablement.ibm.db2.model.OriginType;
+import org.eclipse.datatools.enablement.ibm.db2.model.SourceDialect;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 Method</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#getFenced <em>Fenced</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#getThreadsafe <em>Threadsafe</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#isDbInfo <em>Db Info</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#isImplicitSchema <em>Implicit Schema</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#isFederated <em>Federated</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#getParmCcsid <em>Parm Ccsid</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#getSpecialRegister <em>Special Register</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#getChangeState <em>Change State</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#getDebugId <em>Debug Id</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#getProgramType <em>Program Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#getOrigSchemaName <em>Orig Schema Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#getOrigParmSig <em>Orig Parm Sig</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#getExtendedOptions <em>Extended Options</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#getRoutineExtensions <em>Routine Extensions</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#isFinalCall <em>Final Call</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#isScratchPad <em>Scratch Pad</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#getScratchPadLength <em>Scratch Pad Length</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#getFunctionType <em>Function Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#getPredicate <em>Predicate</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#isExternalAction <em>External Action</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#getCardinality <em>Cardinality</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#isAllowParallel <em>Allow Parallel</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#getReturnClause <em>Return Clause</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#getOrigin <em>Origin</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#isInheritLockRequest <em>Inherit Lock Request</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#getDialect <em>Dialect</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#isInline <em>Inline</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#getVersion <em>Version</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#isSecured <em>Secured</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#isReturnsSelfAsResult <em>Returns Self As Result</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MethodImpl#isImplemented <em>Implemented</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2MethodImpl extends MethodImpl implements DB2Method {
+	/**
+	 * The default value of the '{@link #getFenced() <em>Fenced</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFenced()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String FENCED_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getFenced() <em>Fenced</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFenced()
+	 * @generated
+	 * @ordered
+	 */
+	protected String fenced = FENCED_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getThreadsafe() <em>Threadsafe</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getThreadsafe()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String THREADSAFE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getThreadsafe() <em>Threadsafe</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getThreadsafe()
+	 * @generated
+	 * @ordered
+	 */
+	protected String threadsafe = THREADSAFE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isDbInfo() <em>Db Info</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDbInfo()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean DB_INFO_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isDbInfo() <em>Db Info</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDbInfo()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean dbInfo = DB_INFO_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isImplicitSchema() <em>Implicit Schema</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isImplicitSchema()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean IMPLICIT_SCHEMA_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isImplicitSchema() <em>Implicit Schema</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isImplicitSchema()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean implicitSchema = IMPLICIT_SCHEMA_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isFederated() <em>Federated</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isFederated()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean FEDERATED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isFederated() <em>Federated</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isFederated()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean federated = FEDERATED_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getParmCcsid() <em>Parm Ccsid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getParmCcsid()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String PARM_CCSID_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getParmCcsid() <em>Parm Ccsid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getParmCcsid()
+	 * @generated
+	 * @ordered
+	 */
+	protected String parmCcsid = PARM_CCSID_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getSpecialRegister() <em>Special Register</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSpecialRegister()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String SPECIAL_REGISTER_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getSpecialRegister() <em>Special Register</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSpecialRegister()
+	 * @generated
+	 * @ordered
+	 */
+	protected String specialRegister = SPECIAL_REGISTER_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getChangeState() <em>Change State</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getChangeState()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final int CHANGE_STATE_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getChangeState() <em>Change State</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getChangeState()
+	 * @generated
+	 * @ordered
+	 */
+   protected int changeState = CHANGE_STATE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getDebugId() <em>Debug Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getDebugId()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String DEBUG_ID_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getDebugId() <em>Debug Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getDebugId()
+	 * @generated
+	 * @ordered
+	 */
+   protected String debugId = DEBUG_ID_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getProgramType() <em>Program Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getProgramType()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String PROGRAM_TYPE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getProgramType() <em>Program Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getProgramType()
+	 * @generated
+	 * @ordered
+	 */
+   protected String programType = PROGRAM_TYPE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getOrigSchemaName() <em>Orig Schema Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getOrigSchemaName()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String ORIG_SCHEMA_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getOrigSchemaName() <em>Orig Schema Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getOrigSchemaName()
+	 * @generated
+	 * @ordered
+	 */
+   protected String origSchemaName = ORIG_SCHEMA_NAME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getOrigParmSig() <em>Orig Parm Sig</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getOrigParmSig()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String ORIG_PARM_SIG_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getOrigParmSig() <em>Orig Parm Sig</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getOrigParmSig()
+	 * @generated
+	 * @ordered
+	 */
+   protected String origParmSig = ORIG_PARM_SIG_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getExtendedOptions() <em>Extended Options</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getExtendedOptions()
+	 * @generated
+	 * @ordered
+	 */
+   protected EList extendedOptions;
+
+	/**
+	 * The cached value of the '{@link #getRoutineExtensions() <em>Routine Extensions</em>}' reference list.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getRoutineExtensions()
+	 * @generated
+	 * @ordered
+	 */
+   protected EList routineExtensions;
+
+	/**
+	 * The default value of the '{@link #isFinalCall() <em>Final Call</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isFinalCall()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean FINAL_CALL_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isFinalCall() <em>Final Call</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isFinalCall()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean finalCall = FINAL_CALL_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isScratchPad() <em>Scratch Pad</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isScratchPad()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean SCRATCH_PAD_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isScratchPad() <em>Scratch Pad</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isScratchPad()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean scratchPad = SCRATCH_PAD_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getScratchPadLength() <em>Scratch Pad Length</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getScratchPadLength()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int SCRATCH_PAD_LENGTH_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getScratchPadLength() <em>Scratch Pad Length</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getScratchPadLength()
+	 * @generated
+	 * @ordered
+	 */
+	protected int scratchPadLength = SCRATCH_PAD_LENGTH_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getFunctionType() <em>Function Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFunctionType()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String FUNCTION_TYPE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getFunctionType() <em>Function Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFunctionType()
+	 * @generated
+	 * @ordered
+	 */
+	protected String functionType = FUNCTION_TYPE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getPredicate() <em>Predicate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPredicate()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String PREDICATE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getPredicate() <em>Predicate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPredicate()
+	 * @generated
+	 * @ordered
+	 */
+	protected String predicate = PREDICATE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isExternalAction() <em>External Action</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #isExternalAction()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final boolean EXTERNAL_ACTION_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isExternalAction() <em>External Action</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #isExternalAction()
+	 * @generated
+	 * @ordered
+	 */
+   protected boolean externalAction = EXTERNAL_ACTION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getCardinality() <em>Cardinality</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getCardinality()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final int CARDINALITY_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getCardinality() <em>Cardinality</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getCardinality()
+	 * @generated
+	 * @ordered
+	 */
+   protected int cardinality = CARDINALITY_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isAllowParallel() <em>Allow Parallel</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #isAllowParallel()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final boolean ALLOW_PARALLEL_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isAllowParallel() <em>Allow Parallel</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #isAllowParallel()
+	 * @generated
+	 * @ordered
+	 */
+   protected boolean allowParallel = ALLOW_PARALLEL_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getReturnClause() <em>Return Clause</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getReturnClause()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String RETURN_CLAUSE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getReturnClause() <em>Return Clause</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getReturnClause()
+	 * @generated
+	 * @ordered
+	 */
+   protected String returnClause = RETURN_CLAUSE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getOrigin() <em>Origin</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOrigin()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final OriginType ORIGIN_EDEFAULT = OriginType.NONE_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getOrigin() <em>Origin</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOrigin()
+	 * @generated
+	 * @ordered
+	 */
+	protected OriginType origin = ORIGIN_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isInheritLockRequest() <em>Inherit Lock Request</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isInheritLockRequest()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean INHERIT_LOCK_REQUEST_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isInheritLockRequest() <em>Inherit Lock Request</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isInheritLockRequest()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean inheritLockRequest = INHERIT_LOCK_REQUEST_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getDialect() <em>Dialect</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDialect()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final SourceDialect DIALECT_EDEFAULT = SourceDialect.UNKNOWN_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getDialect() <em>Dialect</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDialect()
+	 * @generated
+	 * @ordered
+	 */
+	protected SourceDialect dialect = DIALECT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isInline() <em>Inline</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isInline()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean INLINE_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isInline() <em>Inline</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isInline()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean inline = INLINE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getVersion() <em>Version</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getVersion()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String VERSION_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getVersion() <em>Version</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getVersion()
+	 * @generated
+	 * @ordered
+	 */
+	protected String version = VERSION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isSecured() <em>Secured</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSecured()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean SECURED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isSecured() <em>Secured</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSecured()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean secured = SECURED_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isReturnsSelfAsResult() <em>Returns Self As Result</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isReturnsSelfAsResult()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean RETURNS_SELF_AS_RESULT_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isReturnsSelfAsResult() <em>Returns Self As Result</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isReturnsSelfAsResult()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean returnsSelfAsResult = RETURNS_SELF_AS_RESULT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isImplemented() <em>Implemented</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isImplemented()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean IMPLEMENTED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isImplemented() <em>Implemented</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isImplemented()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean implemented = IMPLEMENTED_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2MethodImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_METHOD;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getFenced() {
+		return fenced;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFenced(String newFenced) {
+		String oldFenced = fenced;
+		fenced = newFenced;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_METHOD__FENCED, oldFenced, fenced));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getThreadsafe() {
+		return threadsafe;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setThreadsafe(String newThreadsafe) {
+		String oldThreadsafe = threadsafe;
+		threadsafe = newThreadsafe;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_METHOD__THREADSAFE, oldThreadsafe, threadsafe));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isDbInfo() {
+		return dbInfo;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDbInfo(boolean newDbInfo) {
+		boolean oldDbInfo = dbInfo;
+		dbInfo = newDbInfo;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_METHOD__DB_INFO, oldDbInfo, dbInfo));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isImplicitSchema() {
+		return implicitSchema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setImplicitSchema(boolean newImplicitSchema) {
+		boolean oldImplicitSchema = implicitSchema;
+		implicitSchema = newImplicitSchema;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_METHOD__IMPLICIT_SCHEMA, oldImplicitSchema, implicitSchema));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isFederated() {
+		return federated;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFederated(boolean newFederated) {
+		boolean oldFederated = federated;
+		federated = newFederated;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_METHOD__FEDERATED, oldFederated, federated));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getParmCcsid() {
+		return parmCcsid;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParmCcsid(String newParmCcsid) {
+		String oldParmCcsid = parmCcsid;
+		parmCcsid = newParmCcsid;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_METHOD__PARM_CCSID, oldParmCcsid, parmCcsid));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getSpecialRegister() {
+		return specialRegister;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSpecialRegister(String newSpecialRegister) {
+		String oldSpecialRegister = specialRegister;
+		specialRegister = newSpecialRegister;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_METHOD__SPECIAL_REGISTER, oldSpecialRegister, specialRegister));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public int getChangeState() {
+		return changeState;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setChangeState(int newChangeState) {
+		int oldChangeState = changeState;
+		changeState = newChangeState;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_METHOD__CHANGE_STATE, oldChangeState, changeState));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getDebugId() {
+		return debugId;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setDebugId(String newDebugId) {
+		String oldDebugId = debugId;
+		debugId = newDebugId;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_METHOD__DEBUG_ID, oldDebugId, debugId));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getProgramType() {
+		return programType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setProgramType(String newProgramType) {
+		String oldProgramType = programType;
+		programType = newProgramType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_METHOD__PROGRAM_TYPE, oldProgramType, programType));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getOrigSchemaName() {
+		return origSchemaName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setOrigSchemaName(String newOrigSchemaName) {
+		String oldOrigSchemaName = origSchemaName;
+		origSchemaName = newOrigSchemaName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_METHOD__ORIG_SCHEMA_NAME, oldOrigSchemaName, origSchemaName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getOrigParmSig() {
+		return origParmSig;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setOrigParmSig(String newOrigParmSig) {
+		String oldOrigParmSig = origParmSig;
+		origParmSig = newOrigParmSig;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_METHOD__ORIG_PARM_SIG, oldOrigParmSig, origParmSig));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SourceDialect getDialect() {
+		return dialect;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDialect(SourceDialect newDialect) {
+		SourceDialect oldDialect = dialect;
+		dialect = newDialect == null ? DIALECT_EDEFAULT : newDialect;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_METHOD__DIALECT, oldDialect, dialect));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isInline() {
+		return inline;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setInline(boolean newInline) {
+		boolean oldInline = inline;
+		inline = newInline;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_METHOD__INLINE, oldInline, inline));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getVersion() {
+		return version;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setVersion(String newVersion) {
+		String oldVersion = version;
+		version = newVersion;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_METHOD__VERSION, oldVersion, version));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isSecured() {
+		return secured;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSecured(boolean newSecured) {
+		boolean oldSecured = secured;
+		secured = newSecured;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_METHOD__SECURED, oldSecured, secured));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public EList getExtendedOptions() {
+		if (extendedOptions == null) {
+			extendedOptions = new EObjectContainmentEList(DB2ExtendedOptions.class, this, DB2ModelPackage.DB2_METHOD__EXTENDED_OPTIONS);
+		}
+		return extendedOptions;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public EList getRoutineExtensions() {
+		if (routineExtensions == null) {
+			routineExtensions = new EObjectResolvingEList(DB2RoutineExtension.class, this, DB2ModelPackage.DB2_METHOD__ROUTINE_EXTENSIONS);
+		}
+		return routineExtensions;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isFinalCall() {
+		return finalCall;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFinalCall(boolean newFinalCall) {
+		boolean oldFinalCall = finalCall;
+		finalCall = newFinalCall;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_METHOD__FINAL_CALL, oldFinalCall, finalCall));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isScratchPad() {
+		return scratchPad;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setScratchPad(boolean newScratchPad) {
+		boolean oldScratchPad = scratchPad;
+		scratchPad = newScratchPad;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_METHOD__SCRATCH_PAD, oldScratchPad, scratchPad));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getScratchPadLength() {
+		return scratchPadLength;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setScratchPadLength(int newScratchPadLength) {
+		int oldScratchPadLength = scratchPadLength;
+		scratchPadLength = newScratchPadLength;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_METHOD__SCRATCH_PAD_LENGTH, oldScratchPadLength, scratchPadLength));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getFunctionType() {
+		return functionType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFunctionType(String newFunctionType) {
+		String oldFunctionType = functionType;
+		functionType = newFunctionType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_METHOD__FUNCTION_TYPE, oldFunctionType, functionType));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getPredicate() {
+		return predicate;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPredicate(String newPredicate) {
+		String oldPredicate = predicate;
+		predicate = newPredicate;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_METHOD__PREDICATE, oldPredicate, predicate));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public boolean isExternalAction() {
+		return externalAction;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setExternalAction(boolean newExternalAction) {
+		boolean oldExternalAction = externalAction;
+		externalAction = newExternalAction;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_METHOD__EXTERNAL_ACTION, oldExternalAction, externalAction));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public int getCardinality() {
+		return cardinality;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setCardinality(int newCardinality) {
+		int oldCardinality = cardinality;
+		cardinality = newCardinality;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_METHOD__CARDINALITY, oldCardinality, cardinality));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public boolean isAllowParallel() {
+		return allowParallel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setAllowParallel(boolean newAllowParallel) {
+		boolean oldAllowParallel = allowParallel;
+		allowParallel = newAllowParallel;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_METHOD__ALLOW_PARALLEL, oldAllowParallel, allowParallel));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getReturnClause() {
+		return returnClause;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setReturnClause(String newReturnClause) {
+		String oldReturnClause = returnClause;
+		returnClause = newReturnClause;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_METHOD__RETURN_CLAUSE, oldReturnClause, returnClause));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public OriginType getOrigin() {
+		return origin;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOrigin(OriginType newOrigin) {
+		OriginType oldOrigin = origin;
+		origin = newOrigin == null ? ORIGIN_EDEFAULT : newOrigin;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_METHOD__ORIGIN, oldOrigin, origin));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isInheritLockRequest() {
+		return inheritLockRequest;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setInheritLockRequest(boolean newInheritLockRequest) {
+		boolean oldInheritLockRequest = inheritLockRequest;
+		inheritLockRequest = newInheritLockRequest;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_METHOD__INHERIT_LOCK_REQUEST, oldInheritLockRequest, inheritLockRequest));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isReturnsSelfAsResult() {
+		return returnsSelfAsResult;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setReturnsSelfAsResult(boolean newReturnsSelfAsResult) {
+		boolean oldReturnsSelfAsResult = returnsSelfAsResult;
+		returnsSelfAsResult = newReturnsSelfAsResult;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_METHOD__RETURNS_SELF_AS_RESULT, oldReturnsSelfAsResult, returnsSelfAsResult));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isImplemented() {
+		return implemented;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setImplemented(boolean newImplemented) {
+		boolean oldImplemented = implemented;
+		implemented = newImplemented;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_METHOD__IMPLEMENTED, oldImplemented, implemented));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_METHOD__EXTENDED_OPTIONS:
+				return ((InternalEList)getExtendedOptions()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_METHOD__FENCED:
+				return getFenced();
+			case DB2ModelPackage.DB2_METHOD__THREADSAFE:
+				return getThreadsafe();
+			case DB2ModelPackage.DB2_METHOD__DB_INFO:
+				return isDbInfo() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_METHOD__IMPLICIT_SCHEMA:
+				return isImplicitSchema() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_METHOD__FEDERATED:
+				return isFederated() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_METHOD__PARM_CCSID:
+				return getParmCcsid();
+			case DB2ModelPackage.DB2_METHOD__SPECIAL_REGISTER:
+				return getSpecialRegister();
+			case DB2ModelPackage.DB2_METHOD__CHANGE_STATE:
+				return new Integer(getChangeState());
+			case DB2ModelPackage.DB2_METHOD__DEBUG_ID:
+				return getDebugId();
+			case DB2ModelPackage.DB2_METHOD__PROGRAM_TYPE:
+				return getProgramType();
+			case DB2ModelPackage.DB2_METHOD__ORIG_SCHEMA_NAME:
+				return getOrigSchemaName();
+			case DB2ModelPackage.DB2_METHOD__ORIG_PARM_SIG:
+				return getOrigParmSig();
+			case DB2ModelPackage.DB2_METHOD__EXTENDED_OPTIONS:
+				return getExtendedOptions();
+			case DB2ModelPackage.DB2_METHOD__ROUTINE_EXTENSIONS:
+				return getRoutineExtensions();
+			case DB2ModelPackage.DB2_METHOD__FINAL_CALL:
+				return isFinalCall() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_METHOD__SCRATCH_PAD:
+				return isScratchPad() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_METHOD__SCRATCH_PAD_LENGTH:
+				return new Integer(getScratchPadLength());
+			case DB2ModelPackage.DB2_METHOD__FUNCTION_TYPE:
+				return getFunctionType();
+			case DB2ModelPackage.DB2_METHOD__PREDICATE:
+				return getPredicate();
+			case DB2ModelPackage.DB2_METHOD__EXTERNAL_ACTION:
+				return isExternalAction() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_METHOD__CARDINALITY:
+				return new Integer(getCardinality());
+			case DB2ModelPackage.DB2_METHOD__ALLOW_PARALLEL:
+				return isAllowParallel() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_METHOD__RETURN_CLAUSE:
+				return getReturnClause();
+			case DB2ModelPackage.DB2_METHOD__ORIGIN:
+				return getOrigin();
+			case DB2ModelPackage.DB2_METHOD__INHERIT_LOCK_REQUEST:
+				return isInheritLockRequest() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_METHOD__DIALECT:
+				return getDialect();
+			case DB2ModelPackage.DB2_METHOD__INLINE:
+				return isInline() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_METHOD__VERSION:
+				return getVersion();
+			case DB2ModelPackage.DB2_METHOD__SECURED:
+				return isSecured() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_METHOD__RETURNS_SELF_AS_RESULT:
+				return isReturnsSelfAsResult() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_METHOD__IMPLEMENTED:
+				return isImplemented() ? Boolean.TRUE : Boolean.FALSE;
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_METHOD__FENCED:
+				setFenced((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_METHOD__THREADSAFE:
+				setThreadsafe((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_METHOD__DB_INFO:
+				setDbInfo(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_METHOD__IMPLICIT_SCHEMA:
+				setImplicitSchema(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_METHOD__FEDERATED:
+				setFederated(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_METHOD__PARM_CCSID:
+				setParmCcsid((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_METHOD__SPECIAL_REGISTER:
+				setSpecialRegister((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_METHOD__CHANGE_STATE:
+				setChangeState(((Integer)newValue).intValue());
+				return;
+			case DB2ModelPackage.DB2_METHOD__DEBUG_ID:
+				setDebugId((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_METHOD__PROGRAM_TYPE:
+				setProgramType((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_METHOD__ORIG_SCHEMA_NAME:
+				setOrigSchemaName((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_METHOD__ORIG_PARM_SIG:
+				setOrigParmSig((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_METHOD__EXTENDED_OPTIONS:
+				getExtendedOptions().clear();
+				getExtendedOptions().addAll((Collection)newValue);
+				return;
+			case DB2ModelPackage.DB2_METHOD__ROUTINE_EXTENSIONS:
+				getRoutineExtensions().clear();
+				getRoutineExtensions().addAll((Collection)newValue);
+				return;
+			case DB2ModelPackage.DB2_METHOD__FINAL_CALL:
+				setFinalCall(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_METHOD__SCRATCH_PAD:
+				setScratchPad(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_METHOD__SCRATCH_PAD_LENGTH:
+				setScratchPadLength(((Integer)newValue).intValue());
+				return;
+			case DB2ModelPackage.DB2_METHOD__FUNCTION_TYPE:
+				setFunctionType((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_METHOD__PREDICATE:
+				setPredicate((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_METHOD__EXTERNAL_ACTION:
+				setExternalAction(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_METHOD__CARDINALITY:
+				setCardinality(((Integer)newValue).intValue());
+				return;
+			case DB2ModelPackage.DB2_METHOD__ALLOW_PARALLEL:
+				setAllowParallel(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_METHOD__RETURN_CLAUSE:
+				setReturnClause((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_METHOD__ORIGIN:
+				setOrigin((OriginType)newValue);
+				return;
+			case DB2ModelPackage.DB2_METHOD__INHERIT_LOCK_REQUEST:
+				setInheritLockRequest(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_METHOD__DIALECT:
+				setDialect((SourceDialect)newValue);
+				return;
+			case DB2ModelPackage.DB2_METHOD__INLINE:
+				setInline(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_METHOD__VERSION:
+				setVersion((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_METHOD__SECURED:
+				setSecured(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_METHOD__RETURNS_SELF_AS_RESULT:
+				setReturnsSelfAsResult(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_METHOD__IMPLEMENTED:
+				setImplemented(((Boolean)newValue).booleanValue());
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_METHOD__FENCED:
+				setFenced(FENCED_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_METHOD__THREADSAFE:
+				setThreadsafe(THREADSAFE_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_METHOD__DB_INFO:
+				setDbInfo(DB_INFO_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_METHOD__IMPLICIT_SCHEMA:
+				setImplicitSchema(IMPLICIT_SCHEMA_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_METHOD__FEDERATED:
+				setFederated(FEDERATED_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_METHOD__PARM_CCSID:
+				setParmCcsid(PARM_CCSID_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_METHOD__SPECIAL_REGISTER:
+				setSpecialRegister(SPECIAL_REGISTER_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_METHOD__CHANGE_STATE:
+				setChangeState(CHANGE_STATE_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_METHOD__DEBUG_ID:
+				setDebugId(DEBUG_ID_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_METHOD__PROGRAM_TYPE:
+				setProgramType(PROGRAM_TYPE_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_METHOD__ORIG_SCHEMA_NAME:
+				setOrigSchemaName(ORIG_SCHEMA_NAME_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_METHOD__ORIG_PARM_SIG:
+				setOrigParmSig(ORIG_PARM_SIG_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_METHOD__EXTENDED_OPTIONS:
+				getExtendedOptions().clear();
+				return;
+			case DB2ModelPackage.DB2_METHOD__ROUTINE_EXTENSIONS:
+				getRoutineExtensions().clear();
+				return;
+			case DB2ModelPackage.DB2_METHOD__FINAL_CALL:
+				setFinalCall(FINAL_CALL_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_METHOD__SCRATCH_PAD:
+				setScratchPad(SCRATCH_PAD_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_METHOD__SCRATCH_PAD_LENGTH:
+				setScratchPadLength(SCRATCH_PAD_LENGTH_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_METHOD__FUNCTION_TYPE:
+				setFunctionType(FUNCTION_TYPE_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_METHOD__PREDICATE:
+				setPredicate(PREDICATE_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_METHOD__EXTERNAL_ACTION:
+				setExternalAction(EXTERNAL_ACTION_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_METHOD__CARDINALITY:
+				setCardinality(CARDINALITY_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_METHOD__ALLOW_PARALLEL:
+				setAllowParallel(ALLOW_PARALLEL_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_METHOD__RETURN_CLAUSE:
+				setReturnClause(RETURN_CLAUSE_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_METHOD__ORIGIN:
+				setOrigin(ORIGIN_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_METHOD__INHERIT_LOCK_REQUEST:
+				setInheritLockRequest(INHERIT_LOCK_REQUEST_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_METHOD__DIALECT:
+				setDialect(DIALECT_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_METHOD__INLINE:
+				setInline(INLINE_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_METHOD__VERSION:
+				setVersion(VERSION_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_METHOD__SECURED:
+				setSecured(SECURED_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_METHOD__RETURNS_SELF_AS_RESULT:
+				setReturnsSelfAsResult(RETURNS_SELF_AS_RESULT_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_METHOD__IMPLEMENTED:
+				setImplemented(IMPLEMENTED_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_METHOD__FENCED:
+				return FENCED_EDEFAULT == null ? fenced != null : !FENCED_EDEFAULT.equals(fenced);
+			case DB2ModelPackage.DB2_METHOD__THREADSAFE:
+				return THREADSAFE_EDEFAULT == null ? threadsafe != null : !THREADSAFE_EDEFAULT.equals(threadsafe);
+			case DB2ModelPackage.DB2_METHOD__DB_INFO:
+				return dbInfo != DB_INFO_EDEFAULT;
+			case DB2ModelPackage.DB2_METHOD__IMPLICIT_SCHEMA:
+				return implicitSchema != IMPLICIT_SCHEMA_EDEFAULT;
+			case DB2ModelPackage.DB2_METHOD__FEDERATED:
+				return federated != FEDERATED_EDEFAULT;
+			case DB2ModelPackage.DB2_METHOD__PARM_CCSID:
+				return PARM_CCSID_EDEFAULT == null ? parmCcsid != null : !PARM_CCSID_EDEFAULT.equals(parmCcsid);
+			case DB2ModelPackage.DB2_METHOD__SPECIAL_REGISTER:
+				return SPECIAL_REGISTER_EDEFAULT == null ? specialRegister != null : !SPECIAL_REGISTER_EDEFAULT.equals(specialRegister);
+			case DB2ModelPackage.DB2_METHOD__CHANGE_STATE:
+				return changeState != CHANGE_STATE_EDEFAULT;
+			case DB2ModelPackage.DB2_METHOD__DEBUG_ID:
+				return DEBUG_ID_EDEFAULT == null ? debugId != null : !DEBUG_ID_EDEFAULT.equals(debugId);
+			case DB2ModelPackage.DB2_METHOD__PROGRAM_TYPE:
+				return PROGRAM_TYPE_EDEFAULT == null ? programType != null : !PROGRAM_TYPE_EDEFAULT.equals(programType);
+			case DB2ModelPackage.DB2_METHOD__ORIG_SCHEMA_NAME:
+				return ORIG_SCHEMA_NAME_EDEFAULT == null ? origSchemaName != null : !ORIG_SCHEMA_NAME_EDEFAULT.equals(origSchemaName);
+			case DB2ModelPackage.DB2_METHOD__ORIG_PARM_SIG:
+				return ORIG_PARM_SIG_EDEFAULT == null ? origParmSig != null : !ORIG_PARM_SIG_EDEFAULT.equals(origParmSig);
+			case DB2ModelPackage.DB2_METHOD__EXTENDED_OPTIONS:
+				return extendedOptions != null && !extendedOptions.isEmpty();
+			case DB2ModelPackage.DB2_METHOD__ROUTINE_EXTENSIONS:
+				return routineExtensions != null && !routineExtensions.isEmpty();
+			case DB2ModelPackage.DB2_METHOD__FINAL_CALL:
+				return finalCall != FINAL_CALL_EDEFAULT;
+			case DB2ModelPackage.DB2_METHOD__SCRATCH_PAD:
+				return scratchPad != SCRATCH_PAD_EDEFAULT;
+			case DB2ModelPackage.DB2_METHOD__SCRATCH_PAD_LENGTH:
+				return scratchPadLength != SCRATCH_PAD_LENGTH_EDEFAULT;
+			case DB2ModelPackage.DB2_METHOD__FUNCTION_TYPE:
+				return FUNCTION_TYPE_EDEFAULT == null ? functionType != null : !FUNCTION_TYPE_EDEFAULT.equals(functionType);
+			case DB2ModelPackage.DB2_METHOD__PREDICATE:
+				return PREDICATE_EDEFAULT == null ? predicate != null : !PREDICATE_EDEFAULT.equals(predicate);
+			case DB2ModelPackage.DB2_METHOD__EXTERNAL_ACTION:
+				return externalAction != EXTERNAL_ACTION_EDEFAULT;
+			case DB2ModelPackage.DB2_METHOD__CARDINALITY:
+				return cardinality != CARDINALITY_EDEFAULT;
+			case DB2ModelPackage.DB2_METHOD__ALLOW_PARALLEL:
+				return allowParallel != ALLOW_PARALLEL_EDEFAULT;
+			case DB2ModelPackage.DB2_METHOD__RETURN_CLAUSE:
+				return RETURN_CLAUSE_EDEFAULT == null ? returnClause != null : !RETURN_CLAUSE_EDEFAULT.equals(returnClause);
+			case DB2ModelPackage.DB2_METHOD__ORIGIN:
+				return origin != ORIGIN_EDEFAULT;
+			case DB2ModelPackage.DB2_METHOD__INHERIT_LOCK_REQUEST:
+				return inheritLockRequest != INHERIT_LOCK_REQUEST_EDEFAULT;
+			case DB2ModelPackage.DB2_METHOD__DIALECT:
+				return dialect != DIALECT_EDEFAULT;
+			case DB2ModelPackage.DB2_METHOD__INLINE:
+				return inline != INLINE_EDEFAULT;
+			case DB2ModelPackage.DB2_METHOD__VERSION:
+				return VERSION_EDEFAULT == null ? version != null : !VERSION_EDEFAULT.equals(version);
+			case DB2ModelPackage.DB2_METHOD__SECURED:
+				return secured != SECURED_EDEFAULT;
+			case DB2ModelPackage.DB2_METHOD__RETURNS_SELF_AS_RESULT:
+				return returnsSelfAsResult != RETURNS_SELF_AS_RESULT_EDEFAULT;
+			case DB2ModelPackage.DB2_METHOD__IMPLEMENTED:
+				return implemented != IMPLEMENTED_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class baseClass) {
+		if (baseClass == DB2AccessPlan.class) {
+			switch (derivedFeatureID) {
+				default: return -1;
+			}
+		}
+		if (baseClass == DB2Routine.class) {
+			switch (derivedFeatureID) {
+				case DB2ModelPackage.DB2_METHOD__FENCED: return DB2ModelPackage.DB2_ROUTINE__FENCED;
+				case DB2ModelPackage.DB2_METHOD__THREADSAFE: return DB2ModelPackage.DB2_ROUTINE__THREADSAFE;
+				case DB2ModelPackage.DB2_METHOD__DB_INFO: return DB2ModelPackage.DB2_ROUTINE__DB_INFO;
+				case DB2ModelPackage.DB2_METHOD__IMPLICIT_SCHEMA: return DB2ModelPackage.DB2_ROUTINE__IMPLICIT_SCHEMA;
+				case DB2ModelPackage.DB2_METHOD__FEDERATED: return DB2ModelPackage.DB2_ROUTINE__FEDERATED;
+				case DB2ModelPackage.DB2_METHOD__PARM_CCSID: return DB2ModelPackage.DB2_ROUTINE__PARM_CCSID;
+				case DB2ModelPackage.DB2_METHOD__SPECIAL_REGISTER: return DB2ModelPackage.DB2_ROUTINE__SPECIAL_REGISTER;
+				case DB2ModelPackage.DB2_METHOD__CHANGE_STATE: return DB2ModelPackage.DB2_ROUTINE__CHANGE_STATE;
+				case DB2ModelPackage.DB2_METHOD__DEBUG_ID: return DB2ModelPackage.DB2_ROUTINE__DEBUG_ID;
+				case DB2ModelPackage.DB2_METHOD__PROGRAM_TYPE: return DB2ModelPackage.DB2_ROUTINE__PROGRAM_TYPE;
+				case DB2ModelPackage.DB2_METHOD__ORIG_SCHEMA_NAME: return DB2ModelPackage.DB2_ROUTINE__ORIG_SCHEMA_NAME;
+				case DB2ModelPackage.DB2_METHOD__ORIG_PARM_SIG: return DB2ModelPackage.DB2_ROUTINE__ORIG_PARM_SIG;
+				case DB2ModelPackage.DB2_METHOD__EXTENDED_OPTIONS: return DB2ModelPackage.DB2_ROUTINE__EXTENDED_OPTIONS;
+				case DB2ModelPackage.DB2_METHOD__ROUTINE_EXTENSIONS: return DB2ModelPackage.DB2_ROUTINE__ROUTINE_EXTENSIONS;
+				default: return -1;
+			}
+		}
+		if (baseClass == DB2Function.class) {
+			switch (derivedFeatureID) {
+				case DB2ModelPackage.DB2_METHOD__FINAL_CALL: return DB2ModelPackage.DB2_FUNCTION__FINAL_CALL;
+				case DB2ModelPackage.DB2_METHOD__SCRATCH_PAD: return DB2ModelPackage.DB2_FUNCTION__SCRATCH_PAD;
+				case DB2ModelPackage.DB2_METHOD__SCRATCH_PAD_LENGTH: return DB2ModelPackage.DB2_FUNCTION__SCRATCH_PAD_LENGTH;
+				case DB2ModelPackage.DB2_METHOD__FUNCTION_TYPE: return DB2ModelPackage.DB2_FUNCTION__FUNCTION_TYPE;
+				case DB2ModelPackage.DB2_METHOD__PREDICATE: return DB2ModelPackage.DB2_FUNCTION__PREDICATE;
+				case DB2ModelPackage.DB2_METHOD__EXTERNAL_ACTION: return DB2ModelPackage.DB2_FUNCTION__EXTERNAL_ACTION;
+				case DB2ModelPackage.DB2_METHOD__CARDINALITY: return DB2ModelPackage.DB2_FUNCTION__CARDINALITY;
+				case DB2ModelPackage.DB2_METHOD__ALLOW_PARALLEL: return DB2ModelPackage.DB2_FUNCTION__ALLOW_PARALLEL;
+				case DB2ModelPackage.DB2_METHOD__RETURN_CLAUSE: return DB2ModelPackage.DB2_FUNCTION__RETURN_CLAUSE;
+				case DB2ModelPackage.DB2_METHOD__ORIGIN: return DB2ModelPackage.DB2_FUNCTION__ORIGIN;
+				case DB2ModelPackage.DB2_METHOD__INHERIT_LOCK_REQUEST: return DB2ModelPackage.DB2_FUNCTION__INHERIT_LOCK_REQUEST;
+				case DB2ModelPackage.DB2_METHOD__DIALECT: return DB2ModelPackage.DB2_FUNCTION__DIALECT;
+				case DB2ModelPackage.DB2_METHOD__INLINE: return DB2ModelPackage.DB2_FUNCTION__INLINE;
+				case DB2ModelPackage.DB2_METHOD__VERSION: return DB2ModelPackage.DB2_FUNCTION__VERSION;
+				case DB2ModelPackage.DB2_METHOD__SECURED: return DB2ModelPackage.DB2_FUNCTION__SECURED;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class baseClass) {
+		if (baseClass == DB2AccessPlan.class) {
+			switch (baseFeatureID) {
+				default: return -1;
+			}
+		}
+		if (baseClass == DB2Routine.class) {
+			switch (baseFeatureID) {
+				case DB2ModelPackage.DB2_ROUTINE__FENCED: return DB2ModelPackage.DB2_METHOD__FENCED;
+				case DB2ModelPackage.DB2_ROUTINE__THREADSAFE: return DB2ModelPackage.DB2_METHOD__THREADSAFE;
+				case DB2ModelPackage.DB2_ROUTINE__DB_INFO: return DB2ModelPackage.DB2_METHOD__DB_INFO;
+				case DB2ModelPackage.DB2_ROUTINE__IMPLICIT_SCHEMA: return DB2ModelPackage.DB2_METHOD__IMPLICIT_SCHEMA;
+				case DB2ModelPackage.DB2_ROUTINE__FEDERATED: return DB2ModelPackage.DB2_METHOD__FEDERATED;
+				case DB2ModelPackage.DB2_ROUTINE__PARM_CCSID: return DB2ModelPackage.DB2_METHOD__PARM_CCSID;
+				case DB2ModelPackage.DB2_ROUTINE__SPECIAL_REGISTER: return DB2ModelPackage.DB2_METHOD__SPECIAL_REGISTER;
+				case DB2ModelPackage.DB2_ROUTINE__CHANGE_STATE: return DB2ModelPackage.DB2_METHOD__CHANGE_STATE;
+				case DB2ModelPackage.DB2_ROUTINE__DEBUG_ID: return DB2ModelPackage.DB2_METHOD__DEBUG_ID;
+				case DB2ModelPackage.DB2_ROUTINE__PROGRAM_TYPE: return DB2ModelPackage.DB2_METHOD__PROGRAM_TYPE;
+				case DB2ModelPackage.DB2_ROUTINE__ORIG_SCHEMA_NAME: return DB2ModelPackage.DB2_METHOD__ORIG_SCHEMA_NAME;
+				case DB2ModelPackage.DB2_ROUTINE__ORIG_PARM_SIG: return DB2ModelPackage.DB2_METHOD__ORIG_PARM_SIG;
+				case DB2ModelPackage.DB2_ROUTINE__EXTENDED_OPTIONS: return DB2ModelPackage.DB2_METHOD__EXTENDED_OPTIONS;
+				case DB2ModelPackage.DB2_ROUTINE__ROUTINE_EXTENSIONS: return DB2ModelPackage.DB2_METHOD__ROUTINE_EXTENSIONS;
+				default: return -1;
+			}
+		}
+		if (baseClass == DB2Function.class) {
+			switch (baseFeatureID) {
+				case DB2ModelPackage.DB2_FUNCTION__FINAL_CALL: return DB2ModelPackage.DB2_METHOD__FINAL_CALL;
+				case DB2ModelPackage.DB2_FUNCTION__SCRATCH_PAD: return DB2ModelPackage.DB2_METHOD__SCRATCH_PAD;
+				case DB2ModelPackage.DB2_FUNCTION__SCRATCH_PAD_LENGTH: return DB2ModelPackage.DB2_METHOD__SCRATCH_PAD_LENGTH;
+				case DB2ModelPackage.DB2_FUNCTION__FUNCTION_TYPE: return DB2ModelPackage.DB2_METHOD__FUNCTION_TYPE;
+				case DB2ModelPackage.DB2_FUNCTION__PREDICATE: return DB2ModelPackage.DB2_METHOD__PREDICATE;
+				case DB2ModelPackage.DB2_FUNCTION__EXTERNAL_ACTION: return DB2ModelPackage.DB2_METHOD__EXTERNAL_ACTION;
+				case DB2ModelPackage.DB2_FUNCTION__CARDINALITY: return DB2ModelPackage.DB2_METHOD__CARDINALITY;
+				case DB2ModelPackage.DB2_FUNCTION__ALLOW_PARALLEL: return DB2ModelPackage.DB2_METHOD__ALLOW_PARALLEL;
+				case DB2ModelPackage.DB2_FUNCTION__RETURN_CLAUSE: return DB2ModelPackage.DB2_METHOD__RETURN_CLAUSE;
+				case DB2ModelPackage.DB2_FUNCTION__ORIGIN: return DB2ModelPackage.DB2_METHOD__ORIGIN;
+				case DB2ModelPackage.DB2_FUNCTION__INHERIT_LOCK_REQUEST: return DB2ModelPackage.DB2_METHOD__INHERIT_LOCK_REQUEST;
+				case DB2ModelPackage.DB2_FUNCTION__DIALECT: return DB2ModelPackage.DB2_METHOD__DIALECT;
+				case DB2ModelPackage.DB2_FUNCTION__INLINE: return DB2ModelPackage.DB2_METHOD__INLINE;
+				case DB2ModelPackage.DB2_FUNCTION__VERSION: return DB2ModelPackage.DB2_METHOD__VERSION;
+				case DB2ModelPackage.DB2_FUNCTION__SECURED: return DB2ModelPackage.DB2_METHOD__SECURED;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (fenced: "); //$NON-NLS-1$
+		result.append(fenced);
+		result.append(", threadsafe: "); //$NON-NLS-1$
+		result.append(threadsafe);
+		result.append(", dbInfo: "); //$NON-NLS-1$
+		result.append(dbInfo);
+		result.append(", implicitSchema: "); //$NON-NLS-1$
+		result.append(implicitSchema);
+		result.append(", federated: "); //$NON-NLS-1$
+		result.append(federated);
+		result.append(", parmCcsid: "); //$NON-NLS-1$
+		result.append(parmCcsid);
+		result.append(", specialRegister: "); //$NON-NLS-1$
+		result.append(specialRegister);
+		result.append(", changeState: "); //$NON-NLS-1$
+		result.append(changeState);
+		result.append(", debugId: "); //$NON-NLS-1$
+		result.append(debugId);
+		result.append(", programType: "); //$NON-NLS-1$
+		result.append(programType);
+		result.append(", origSchemaName: "); //$NON-NLS-1$
+		result.append(origSchemaName);
+		result.append(", origParmSig: "); //$NON-NLS-1$
+		result.append(origParmSig);
+		result.append(", finalCall: "); //$NON-NLS-1$
+		result.append(finalCall);
+		result.append(", scratchPad: "); //$NON-NLS-1$
+		result.append(scratchPad);
+		result.append(", scratchPadLength: "); //$NON-NLS-1$
+		result.append(scratchPadLength);
+		result.append(", functionType: "); //$NON-NLS-1$
+		result.append(functionType);
+		result.append(", predicate: "); //$NON-NLS-1$
+		result.append(predicate);
+		result.append(", externalAction: "); //$NON-NLS-1$
+		result.append(externalAction);
+		result.append(", cardinality: "); //$NON-NLS-1$
+		result.append(cardinality);
+		result.append(", allowParallel: "); //$NON-NLS-1$
+		result.append(allowParallel);
+		result.append(", returnClause: "); //$NON-NLS-1$
+		result.append(returnClause);
+		result.append(", origin: "); //$NON-NLS-1$
+		result.append(origin);
+		result.append(", inheritLockRequest: "); //$NON-NLS-1$
+		result.append(inheritLockRequest);
+		result.append(", dialect: "); //$NON-NLS-1$
+		result.append(dialect);
+		result.append(", inline: "); //$NON-NLS-1$
+		result.append(inline);
+		result.append(", version: "); //$NON-NLS-1$
+		result.append(version);
+		result.append(", secured: "); //$NON-NLS-1$
+		result.append(secured);
+		result.append(", returnsSelfAsResult: "); //$NON-NLS-1$
+		result.append(returnsSelfAsResult);
+		result.append(", implemented: "); //$NON-NLS-1$
+		result.append(implemented);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DB2MethodImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2ModelFactoryImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2ModelFactoryImpl.java
new file mode 100644
index 0000000..26c7cf7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2ModelFactoryImpl.java
@@ -0,0 +1,776 @@
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+
+import org.eclipse.datatools.enablement.ibm.db2.model.*;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class DB2ModelFactoryImpl extends EFactoryImpl implements DB2ModelFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static DB2ModelFactory init() {
+		try {
+			DB2ModelFactory theDB2ModelFactory = (DB2ModelFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org.eclipse.datatools.enablement.ibm.db2.model/db2.ecore"); //$NON-NLS-1$ 
+			if (theDB2ModelFactory != null) {
+				return theDB2ModelFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new DB2ModelFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2ModelFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case DB2ModelPackage.DB2_DATABASE: return createDB2Database();
+			case DB2ModelPackage.DB2_PACKAGE: return createDB2Package();
+			case DB2ModelPackage.DB2_TABLE: return createDB2Table();
+			case DB2ModelPackage.DB2_TRIGGER: return createDB2Trigger();
+			case DB2ModelPackage.DB2_PROCEDURE: return createDB2Procedure();
+			case DB2ModelPackage.DB2_SCHEMA: return createDB2Schema();
+			case DB2ModelPackage.DB2_DATABASE_MANAGER: return createDB2DatabaseManager();
+			case DB2ModelPackage.DB2_VIEW: return createDB2View();
+			case DB2ModelPackage.DB2_APPLICATION_PROCESS: return createDB2ApplicationProcess();
+			case DB2ModelPackage.DB2_TRANSACTION: return createDB2Transaction();
+			case DB2ModelPackage.DB2_SYSTEM_SCHEMA: return createDB2SystemSchema();
+			case DB2ModelPackage.DB2_SOURCE: return createDB2Source();
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION: return createDB2UserDefinedFunction();
+			case DB2ModelPackage.DB2_METHOD: return createDB2Method();
+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS: return createDB2ExtendedOptions();
+			case DB2ModelPackage.DB2_ALIAS: return createDB2Alias();
+			case DB2ModelPackage.DB2_INDEX: return createDB2Index();
+			case DB2ModelPackage.DB2_MULTIDIMENSIONAL_INDEX: return createDB2MultidimensionalIndex();
+			case DB2ModelPackage.DB2_JAVA_OPTIONS: return createDB2JavaOptions();
+			case DB2ModelPackage.DB2_PROCEDURE_DEPLOY: return createDB2ProcedureDeploy();
+			case DB2ModelPackage.DB2OLAP_OBJECT: return createDB2OLAPObject();
+			case DB2ModelPackage.DB2_IDENTITY_SPECIFIER: return createDB2IdentitySpecifier();
+			case DB2ModelPackage.DB2_JAR: return createDB2Jar();
+			case DB2ModelPackage.DB2_COLUMN: return createDB2Column();
+			case DB2ModelPackage.DB2XSR_OBJECT: return createDB2XSRObject();
+			case DB2ModelPackage.DB2XML_SCHEMA: return createDB2XMLSchema();
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT: return createDB2XMLSchemaDocument();
+			case DB2ModelPackage.DB2XML_SCHEMA_DOC_PROPERTIES: return createDB2XMLSchemaDocProperties();
+			case DB2ModelPackage.DB2_PACKAGE_STATEMENT: return createDB2PackageStatement();
+			case DB2ModelPackage.DB2_PERIOD: return createDB2Period();
+			case DB2ModelPackage.DB2_CLUSTER: return createDB2Cluster();
+			case DB2ModelPackage.DB2_MEMBER: return createDB2Member();
+			case DB2ModelPackage.DB2_UNIQUE_CONSTRAINT_EXTENSION: return createDB2UniqueConstraintExtension();
+			case DB2ModelPackage.DB2_MASK: return createDB2Mask();
+			case DB2ModelPackage.DB2_PERMISSION: return createDB2Permission();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object createFromString(EDataType eDataType, String initialValue) {
+		switch (eDataType.getClassifierID()) {
+			case DB2ModelPackage.ISOLATION_LEVEL_TYPE:
+				return createIsolationLevelTypeFromString(eDataType, initialValue);
+			case DB2ModelPackage.DB2_INDEX_TYPE:
+				return createDB2IndexTypeFromString(eDataType, initialValue);
+			case DB2ModelPackage.DATA_CAPTURE_TYPE:
+				return createDataCaptureTypeFromString(eDataType, initialValue);
+			case DB2ModelPackage.UNIT_TYPE:
+				return createUnitTypeFromString(eDataType, initialValue);
+			case DB2ModelPackage.GENERATE_TYPE:
+				return createGenerateTypeFromString(eDataType, initialValue);
+			case DB2ModelPackage.DB2XML_SCHEMA_DECOMPOSITION:
+				return createDB2XMLSchemaDecompositionFromString(eDataType, initialValue);
+			case DB2ModelPackage.DB2XML_SCHEMA_STATUS:
+				return createDB2XMLSchemaStatusFromString(eDataType, initialValue);
+			case DB2ModelPackage.ORIGIN_TYPE:
+				return createOriginTypeFromString(eDataType, initialValue);
+			case DB2ModelPackage.REOPT_TYPE:
+				return createReoptTypeFromString(eDataType, initialValue);
+			case DB2ModelPackage.SOURCE_DIALECT:
+				return createSourceDialectFromString(eDataType, initialValue);
+			case DB2ModelPackage.DB2_PERIOD_TYPE:
+				return createDB2PeriodTypeFromString(eDataType, initialValue);
+			case DB2ModelPackage.DB2_TABLE_ORGANIZATION:
+				return createDB2TableOrganizationFromString(eDataType, initialValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertToString(EDataType eDataType, Object instanceValue) {
+		switch (eDataType.getClassifierID()) {
+			case DB2ModelPackage.ISOLATION_LEVEL_TYPE:
+				return convertIsolationLevelTypeToString(eDataType, instanceValue);
+			case DB2ModelPackage.DB2_INDEX_TYPE:
+				return convertDB2IndexTypeToString(eDataType, instanceValue);
+			case DB2ModelPackage.DATA_CAPTURE_TYPE:
+				return convertDataCaptureTypeToString(eDataType, instanceValue);
+			case DB2ModelPackage.UNIT_TYPE:
+				return convertUnitTypeToString(eDataType, instanceValue);
+			case DB2ModelPackage.GENERATE_TYPE:
+				return convertGenerateTypeToString(eDataType, instanceValue);
+			case DB2ModelPackage.DB2XML_SCHEMA_DECOMPOSITION:
+				return convertDB2XMLSchemaDecompositionToString(eDataType, instanceValue);
+			case DB2ModelPackage.DB2XML_SCHEMA_STATUS:
+				return convertDB2XMLSchemaStatusToString(eDataType, instanceValue);
+			case DB2ModelPackage.ORIGIN_TYPE:
+				return convertOriginTypeToString(eDataType, instanceValue);
+			case DB2ModelPackage.REOPT_TYPE:
+				return convertReoptTypeToString(eDataType, instanceValue);
+			case DB2ModelPackage.SOURCE_DIALECT:
+				return convertSourceDialectToString(eDataType, instanceValue);
+			case DB2ModelPackage.DB2_PERIOD_TYPE:
+				return convertDB2PeriodTypeToString(eDataType, instanceValue);
+			case DB2ModelPackage.DB2_TABLE_ORGANIZATION:
+				return convertDB2TableOrganizationToString(eDataType, instanceValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Database createDB2Database() {
+		DB2DatabaseImpl db2Database = new DB2DatabaseImpl();
+		return db2Database;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Package createDB2Package() {
+		DB2PackageImpl db2Package = new DB2PackageImpl();
+		return db2Package;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Table createDB2Table() {
+		DB2TableImpl db2Table = new DB2TableImpl();
+		return db2Table;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Trigger createDB2Trigger() {
+		DB2TriggerImpl db2Trigger = new DB2TriggerImpl();
+		return db2Trigger;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Procedure createDB2Procedure() {
+		DB2ProcedureImpl db2Procedure = new DB2ProcedureImpl();
+		return db2Procedure;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Schema createDB2Schema() {
+		DB2SchemaImpl db2Schema = new DB2SchemaImpl();
+		return db2Schema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2DatabaseManager createDB2DatabaseManager() {
+		DB2DatabaseManagerImpl db2DatabaseManager = new DB2DatabaseManagerImpl();
+		return db2DatabaseManager;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2View createDB2View() {
+		DB2ViewImpl db2View = new DB2ViewImpl();
+		return db2View;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2ApplicationProcess createDB2ApplicationProcess() {
+		DB2ApplicationProcessImpl db2ApplicationProcess = new DB2ApplicationProcessImpl();
+		return db2ApplicationProcess;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Transaction createDB2Transaction() {
+		DB2TransactionImpl db2Transaction = new DB2TransactionImpl();
+		return db2Transaction;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2SystemSchema createDB2SystemSchema() {
+		DB2SystemSchemaImpl db2SystemSchema = new DB2SystemSchemaImpl();
+		return db2SystemSchema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Source createDB2Source() {
+		DB2SourceImpl db2Source = new DB2SourceImpl();
+		return db2Source;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2UserDefinedFunction createDB2UserDefinedFunction() {
+		DB2UserDefinedFunctionImpl db2UserDefinedFunction = new DB2UserDefinedFunctionImpl();
+		return db2UserDefinedFunction;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Method createDB2Method() {
+		DB2MethodImpl db2Method = new DB2MethodImpl();
+		return db2Method;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2ExtendedOptions createDB2ExtendedOptions() {
+		DB2ExtendedOptionsImpl db2ExtendedOptions = new DB2ExtendedOptionsImpl();
+		return db2ExtendedOptions;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Alias createDB2Alias() {
+		DB2AliasImpl db2Alias = new DB2AliasImpl();
+		return db2Alias;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Index createDB2Index() {
+		DB2IndexImpl db2Index = new DB2IndexImpl();
+		return db2Index;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2MultidimensionalIndex createDB2MultidimensionalIndex() {
+		DB2MultidimensionalIndexImpl db2MultidimensionalIndex = new DB2MultidimensionalIndexImpl();
+		return db2MultidimensionalIndex;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2JavaOptions createDB2JavaOptions() {
+		DB2JavaOptionsImpl db2JavaOptions = new DB2JavaOptionsImpl();
+		return db2JavaOptions;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2ProcedureDeploy createDB2ProcedureDeploy() {
+		DB2ProcedureDeployImpl db2ProcedureDeploy = new DB2ProcedureDeployImpl();
+		return db2ProcedureDeploy;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2OLAPObject createDB2OLAPObject() {
+		DB2OLAPObjectImpl db2OLAPObject = new DB2OLAPObjectImpl();
+		return db2OLAPObject;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2IdentitySpecifier createDB2IdentitySpecifier() {
+		DB2IdentitySpecifierImpl db2IdentitySpecifier = new DB2IdentitySpecifierImpl();
+		return db2IdentitySpecifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Jar createDB2Jar() {
+		DB2JarImpl db2Jar = new DB2JarImpl();
+		return db2Jar;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Column createDB2Column() {
+		DB2ColumnImpl db2Column = new DB2ColumnImpl();
+		return db2Column;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2XSRObject createDB2XSRObject() {
+		DB2XSRObjectImpl db2XSRObject = new DB2XSRObjectImpl();
+		return db2XSRObject;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2XMLSchema createDB2XMLSchema() {
+		DB2XMLSchemaImpl db2XMLSchema = new DB2XMLSchemaImpl();
+		return db2XMLSchema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2XMLSchemaDocument createDB2XMLSchemaDocument() {
+		DB2XMLSchemaDocumentImpl db2XMLSchemaDocument = new DB2XMLSchemaDocumentImpl();
+		return db2XMLSchemaDocument;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2XMLSchemaDocProperties createDB2XMLSchemaDocProperties() {
+		DB2XMLSchemaDocPropertiesImpl db2XMLSchemaDocProperties = new DB2XMLSchemaDocPropertiesImpl();
+		return db2XMLSchemaDocProperties;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2PackageStatement createDB2PackageStatement() {
+		DB2PackageStatementImpl db2PackageStatement = new DB2PackageStatementImpl();
+		return db2PackageStatement;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Period createDB2Period() {
+		DB2PeriodImpl db2Period = new DB2PeriodImpl();
+		return db2Period;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Cluster createDB2Cluster() {
+		DB2ClusterImpl db2Cluster = new DB2ClusterImpl();
+		return db2Cluster;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Member createDB2Member() {
+		DB2MemberImpl db2Member = new DB2MemberImpl();
+		return db2Member;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2UniqueConstraintExtension createDB2UniqueConstraintExtension() {
+		DB2UniqueConstraintExtensionImpl db2UniqueConstraintExtension = new DB2UniqueConstraintExtensionImpl();
+		return db2UniqueConstraintExtension;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Mask createDB2Mask() {
+		DB2MaskImpl db2Mask = new DB2MaskImpl();
+		return db2Mask;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Permission createDB2Permission() {
+		DB2PermissionImpl db2Permission = new DB2PermissionImpl();
+		return db2Permission;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IsolationLevelType createIsolationLevelTypeFromString(EDataType eDataType, String initialValue) {
+		IsolationLevelType result = IsolationLevelType.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertIsolationLevelTypeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2IndexType createDB2IndexTypeFromString(EDataType eDataType, String initialValue) {
+		DB2IndexType result = DB2IndexType.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertDB2IndexTypeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DataCaptureType createDataCaptureTypeFromString(EDataType eDataType, String initialValue) {
+		DataCaptureType result = DataCaptureType.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertDataCaptureTypeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public UnitType createUnitTypeFromString(EDataType eDataType, String initialValue) {
+		UnitType result = UnitType.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertUnitTypeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public GenerateType createGenerateTypeFromString(EDataType eDataType, String initialValue) {
+		GenerateType result = GenerateType.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertGenerateTypeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2XMLSchemaDecomposition createDB2XMLSchemaDecompositionFromString(EDataType eDataType, String initialValue) {
+		DB2XMLSchemaDecomposition result = DB2XMLSchemaDecomposition.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertDB2XMLSchemaDecompositionToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2XMLSchemaStatus createDB2XMLSchemaStatusFromString(EDataType eDataType, String initialValue) {
+		DB2XMLSchemaStatus result = DB2XMLSchemaStatus.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertDB2XMLSchemaStatusToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public OriginType createOriginTypeFromString(EDataType eDataType, String initialValue) {
+		OriginType result = OriginType.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertOriginTypeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ReoptType createReoptTypeFromString(EDataType eDataType, String initialValue) {
+		ReoptType result = ReoptType.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertReoptTypeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SourceDialect createSourceDialectFromString(EDataType eDataType, String initialValue) {
+		SourceDialect result = SourceDialect.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertSourceDialectToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2PeriodType createDB2PeriodTypeFromString(EDataType eDataType, String initialValue) {
+		DB2PeriodType result = DB2PeriodType.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertDB2PeriodTypeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2TableOrganization createDB2TableOrganizationFromString(EDataType eDataType, String initialValue) {
+		DB2TableOrganization result = DB2TableOrganization.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertDB2TableOrganizationToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2ModelPackage getDB2ModelPackage() {
+		return (DB2ModelPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	public static DB2ModelPackage getPackage() {
+		return DB2ModelPackage.eINSTANCE;
+	}
+
+} //DB2ModelFactoryImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2ModelPackageImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2ModelPackageImpl.java
new file mode 100644
index 0000000..b75217b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2ModelPackageImpl.java
@@ -0,0 +1,3268 @@
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2AccessPlan;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Alias;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ApplicationProcess;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Cluster;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Column;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Database;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2DatabaseManager;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2DistinctUserDefinedType;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Function;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2IdentitySpecifier;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Index;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2IndexType;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Member;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Method;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelFactory;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2MultidimensionalIndex;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2OLAPObject;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Package;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2PackageStatement;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Period;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2PeriodType;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ProcedureDeploy;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2RoutineExtension;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Source;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2SystemSchema;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Table;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2TableOrganization;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Transaction;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Trigger;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2UniqueConstraintExtension;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2UserDefinedFunction;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2View;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchema;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDecomposition;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocProperties;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaStatus;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2XSRObject;
+import org.eclipse.datatools.enablement.ibm.db2.model.DataCaptureType;
+import org.eclipse.datatools.enablement.ibm.db2.model.GenerateType;
+import org.eclipse.datatools.enablement.ibm.db2.model.IsolationLevelType;
+import org.eclipse.datatools.enablement.ibm.db2.model.OriginType;
+import org.eclipse.datatools.enablement.ibm.db2.model.ReoptType;
+import org.eclipse.datatools.enablement.ibm.db2.model.SourceDialect;
+import org.eclipse.datatools.enablement.ibm.db2.model.UnitType;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.SQLAccessControlPackage;
+import org.eclipse.datatools.modelbase.sql.constraints.SQLConstraintsPackage;
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataTypesPackage;
+import org.eclipse.datatools.modelbase.sql.expressions.SQLExpressionsPackage;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesPackage;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.statements.SQLStatementsPackage;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class DB2ModelPackageImpl extends EPackageImpl implements DB2ModelPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2DatabaseEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2PackageEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2TableEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2TriggerEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2ProcedureEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2SchemaEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2RoutineEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2DatabaseManagerEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2ViewEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2ApplicationProcessEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2TransactionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2SystemSchemaEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2SourceEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2AccessPlanEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2UserDefinedFunctionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2MethodEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2ExtendedOptionsEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2AliasEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2MaterializedQueryTableEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2IndexEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2MultidimensionalIndexEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2FunctionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2JavaOptionsEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2ProcedureDeployEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2OLAPObjectEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2RoutineExtensionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2IdentitySpecifierEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2JarEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2ColumnEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2XSRObjectEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2XMLSchemaEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2XMLSchemaDocumentEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2XMLSchemaDocPropertiesEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2PackageStatementEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2DistinctUserDefinedTypeEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2PeriodEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2ClusterEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2MemberEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2UniqueConstraintExtensionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2MaskEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass db2PermissionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum isolationLevelTypeEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum db2IndexTypeEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum dataCaptureTypeEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum unitTypeEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum generateTypeEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum db2XMLSchemaDecompositionEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum db2XMLSchemaStatusEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum originTypeEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum reoptTypeEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum sourceDialectEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum db2PeriodTypeEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum db2TableOrganizationEEnum = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private DB2ModelPackageImpl() {
+		super(eNS_URI, DB2ModelFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link DB2ModelPackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static DB2ModelPackage init() {
+		if (isInited) return (DB2ModelPackage)EPackage.Registry.INSTANCE.getEPackage(DB2ModelPackage.eNS_URI);
+
+		// Obtain or create and register package
+		DB2ModelPackageImpl theDB2ModelPackage = (DB2ModelPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof DB2ModelPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new DB2ModelPackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		SQLSchemaPackage.eINSTANCE.eClass();
+		SQLConstraintsPackage.eINSTANCE.eClass();
+		SQLDataTypesPackage.eINSTANCE.eClass();
+		SQLExpressionsPackage.eINSTANCE.eClass();
+		SQLRoutinesPackage.eINSTANCE.eClass();
+		SQLStatementsPackage.eINSTANCE.eClass();
+		SQLTablesPackage.eINSTANCE.eClass();
+		SQLAccessControlPackage.eINSTANCE.eClass();
+
+		// Create package meta-data objects
+		theDB2ModelPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theDB2ModelPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theDB2ModelPackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(DB2ModelPackage.eNS_URI, theDB2ModelPackage);
+		return theDB2ModelPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2Database() {
+		return db2DatabaseEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Database_Partitioned() {
+		return (EAttribute)db2DatabaseEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Database_DefaultOrganizeByRow() {
+		return (EAttribute)db2DatabaseEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2Package() {
+		return db2PackageEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Package_Operative() {
+		return (EAttribute)db2PackageEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Package_Valid() {
+		return (EAttribute)db2PackageEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Package_Version() {
+		return (EAttribute)db2PackageEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Package_DefaultSchema() {
+		return (EAttribute)db2PackageEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Package_SqlPath() {
+		return (EAttribute)db2PackageEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Package_ReoptVar() {
+		return (EAttribute)db2PackageEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Package_Isolation() {
+		return (EAttribute)db2PackageEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Package_UniqueID() {
+		return (EAttribute)db2PackageEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Package_LastBindTS() {
+		return (EAttribute)db2PackageEClass.getEStructuralFeatures().get(8);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Package_Schema() {
+		return (EReference)db2PackageEClass.getEStructuralFeatures().get(9);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Package_Statements() {
+		return (EReference)db2PackageEClass.getEStructuralFeatures().get(10);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2Table() {
+		return db2TableEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Table_DataCapture() {
+		return (EAttribute)db2TableEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Table_ActivateRowAccessControl() {
+		return (EAttribute)db2TableEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Table_ActivateColumnAccessControl() {
+		return (EAttribute)db2TableEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Table_OrganizeBy() {
+		return (EAttribute)db2TableEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Table_Packages() {
+		return (EReference)db2TableEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Table_Periods() {
+		return (EReference)db2TableEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Table_HistoryTable() {
+		return (EReference)db2TableEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Table_TemporalTable() {
+		return (EReference)db2TableEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Table_Masks() {
+		return (EReference)db2TableEClass.getEStructuralFeatures().get(8);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Table_Permissions() {
+		return (EReference)db2TableEClass.getEStructuralFeatures().get(9);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2Trigger() {
+		return db2TriggerEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Trigger_Operative() {
+		return (EAttribute)db2TriggerEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Trigger_Secured() {
+		return (EAttribute)db2TriggerEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2Procedure() {
+		return db2ProcedureEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Procedure_ModelResultSets() {
+		return (EAttribute)db2ProcedureEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Procedure_NullInput() {
+		return (EAttribute)db2ProcedureEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Procedure_Version() {
+		return (EAttribute)db2ProcedureEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Procedure_Dialect() {
+		return (EAttribute)db2ProcedureEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Procedure_ExternalAction() {
+		return (EAttribute)db2ProcedureEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Procedure_Return() {
+		return (EReference)db2ProcedureEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Procedure_JavaOptions() {
+		return (EReference)db2ProcedureEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Procedure_Deploy() {
+		return (EReference)db2ProcedureEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2Schema() {
+		return db2SchemaEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Schema_AccessPlans() {
+		return (EReference)db2SchemaEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Schema_OlapObjects() {
+		return (EReference)db2SchemaEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Schema_Jars() {
+		return (EReference)db2SchemaEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Schema_XsrObjects() {
+		return (EReference)db2SchemaEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Schema_Packages() {
+		return (EReference)db2SchemaEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Schema_Masks() {
+		return (EReference)db2SchemaEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Schema_Permissions() {
+		return (EReference)db2SchemaEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Schema_Modules() {
+		return (EReference)db2SchemaEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Schema_GlobalVariables() {
+		return (EReference)db2SchemaEClass.getEStructuralFeatures().get(8);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2Routine() {
+		return db2RoutineEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Routine_Fenced() {
+		return (EAttribute)db2RoutineEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Routine_Threadsafe() {
+		return (EAttribute)db2RoutineEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Routine_DbInfo() {
+		return (EAttribute)db2RoutineEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Routine_ImplicitSchema() {
+		return (EAttribute)db2RoutineEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Routine_Federated() {
+		return (EAttribute)db2RoutineEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Routine_ParmCcsid() {
+		return (EAttribute)db2RoutineEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Routine_SpecialRegister() {
+		return (EAttribute)db2RoutineEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Routine_ChangeState() {
+		return (EAttribute)db2RoutineEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Routine_DebugId() {
+		return (EAttribute)db2RoutineEClass.getEStructuralFeatures().get(8);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Routine_ProgramType() {
+		return (EAttribute)db2RoutineEClass.getEStructuralFeatures().get(9);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Routine_OrigSchemaName() {
+		return (EAttribute)db2RoutineEClass.getEStructuralFeatures().get(10);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Routine_OrigParmSig() {
+		return (EAttribute)db2RoutineEClass.getEStructuralFeatures().get(11);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Routine_ExtendedOptions() {
+		return (EReference)db2RoutineEClass.getEStructuralFeatures().get(12);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Routine_RoutineExtensions() {
+		return (EReference)db2RoutineEClass.getEStructuralFeatures().get(13);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2DatabaseManager() {
+		return db2DatabaseManagerEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2DatabaseManager_Databases() {
+		return (EReference)db2DatabaseManagerEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2DatabaseManager_Db2Process() {
+		return (EReference)db2DatabaseManagerEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2DatabaseManager_Server() {
+		return (EReference)db2DatabaseManagerEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2DatabaseManager_Cluster() {
+		return (EReference)db2DatabaseManagerEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2View() {
+		return db2ViewEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2View_Operative() {
+		return (EAttribute)db2ViewEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2ApplicationProcess() {
+		return db2ApplicationProcessEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2ApplicationProcess_IsolationLevel() {
+		return (EAttribute)db2ApplicationProcessEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2ApplicationProcess_UnitOfWork() {
+		return (EReference)db2ApplicationProcessEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2Transaction() {
+		return db2TransactionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2SystemSchema() {
+		return db2SystemSchemaEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2Source() {
+		return db2SourceEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Source_FileName() {
+		return (EAttribute)db2SourceEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Source_PackageName() {
+		return (EAttribute)db2SourceEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Source_Db2PackageName() {
+		return (EAttribute)db2SourceEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Source_LastModified() {
+		return (EAttribute)db2SourceEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Source_Supporting() {
+		return (EReference)db2SourceEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Source_Primary() {
+		return (EReference)db2SourceEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2AccessPlan() {
+		return db2AccessPlanEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2UserDefinedFunction() {
+		return db2UserDefinedFunctionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2Method() {
+		return db2MethodEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Method_ReturnsSelfAsResult() {
+		return (EAttribute)db2MethodEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Method_Implemented() {
+		return (EAttribute)db2MethodEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2ExtendedOptions() {
+		return db2ExtendedOptionsEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2ExtendedOptions_ClasspathCompileJars() {
+		return (EAttribute)db2ExtendedOptionsEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2ExtendedOptions_PreCompileOpts() {
+		return (EAttribute)db2ExtendedOptionsEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2ExtendedOptions_ForDebug() {
+		return (EAttribute)db2ExtendedOptionsEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2ExtendedOptions_Built() {
+		return (EAttribute)db2ExtendedOptionsEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2ExtendedOptions_CompileOpts() {
+		return (EAttribute)db2ExtendedOptionsEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2ExtendedOptions_LinkOpts() {
+		return (EAttribute)db2ExtendedOptionsEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2ExtendedOptions_BindOpts() {
+		return (EAttribute)db2ExtendedOptionsEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2ExtendedOptions_Colid() {
+		return (EAttribute)db2ExtendedOptionsEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2Alias() {
+		return db2AliasEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Alias_AliasedTable() {
+		return (EReference)db2AliasEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2MaterializedQueryTable() {
+		return db2MaterializedQueryTableEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2MaterializedQueryTable_Refresh() {
+		return (EAttribute)db2MaterializedQueryTableEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2MaterializedQueryTable_OptimizeQuery() {
+		return (EAttribute)db2MaterializedQueryTableEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2MaterializedQueryTable_MaintainedBy() {
+		return (EAttribute)db2MaterializedQueryTableEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2MaterializedQueryTable_ActivateRowAccessControl() {
+		return (EAttribute)db2MaterializedQueryTableEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2MaterializedQueryTable_ActivateColumnAccessControl() {
+		return (EAttribute)db2MaterializedQueryTableEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2MaterializedQueryTable_Masks() {
+		return (EReference)db2MaterializedQueryTableEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2MaterializedQueryTable_Permissions() {
+		return (EReference)db2MaterializedQueryTableEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2Index() {
+		return db2IndexEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Index_IndexType() {
+		return (EAttribute)db2IndexEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Index_BusPeriodWithoutOverlap() {
+		return (EAttribute)db2IndexEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Index_EncodedVector() {
+		return (EAttribute)db2IndexEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Index_DB2MultidimensionalIndex() {
+		return (EReference)db2IndexEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2MultidimensionalIndex() {
+		return db2MultidimensionalIndexEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2MultidimensionalIndex_DimensionIndexes() {
+		return (EReference)db2MultidimensionalIndexEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2Function() {
+		return db2FunctionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Function_FinalCall() {
+		return (EAttribute)db2FunctionEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Function_ScratchPad() {
+		return (EAttribute)db2FunctionEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Function_ScratchPadLength() {
+		return (EAttribute)db2FunctionEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Function_FunctionType() {
+		return (EAttribute)db2FunctionEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Function_Predicate() {
+		return (EAttribute)db2FunctionEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Function_ExternalAction() {
+		return (EAttribute)db2FunctionEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Function_Cardinality() {
+		return (EAttribute)db2FunctionEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Function_AllowParallel() {
+		return (EAttribute)db2FunctionEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Function_ReturnClause() {
+		return (EAttribute)db2FunctionEClass.getEStructuralFeatures().get(8);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Function_Origin() {
+		return (EAttribute)db2FunctionEClass.getEStructuralFeatures().get(9);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Function_InheritLockRequest() {
+		return (EAttribute)db2FunctionEClass.getEStructuralFeatures().get(10);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Function_Dialect() {
+		return (EAttribute)db2FunctionEClass.getEStructuralFeatures().get(11);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Function_Inline() {
+		return (EAttribute)db2FunctionEClass.getEStructuralFeatures().get(12);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Function_Version() {
+		return (EAttribute)db2FunctionEClass.getEStructuralFeatures().get(13);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Function_Secured() {
+		return (EAttribute)db2FunctionEClass.getEStructuralFeatures().get(14);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2JavaOptions() {
+		return db2JavaOptionsEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2JavaOptions_ClassName() {
+		return (EAttribute)db2JavaOptionsEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2JavaOptions_MethodName() {
+		return (EAttribute)db2JavaOptionsEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2JavaOptions_Sqlj() {
+		return (EAttribute)db2JavaOptionsEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2JavaOptions_Procedure() {
+		return (EReference)db2JavaOptionsEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2JavaOptions_Jar() {
+		return (EReference)db2JavaOptionsEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2ProcedureDeploy() {
+		return db2ProcedureDeployEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2ProcedureDeploy_FileName() {
+		return (EAttribute)db2ProcedureDeployEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2OLAPObject() {
+		return db2OLAPObjectEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2OLAPObject_Schema() {
+		return (EReference)db2OLAPObjectEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2RoutineExtension() {
+		return db2RoutineExtensionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2IdentitySpecifier() {
+		return db2IdentitySpecifierEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2IdentitySpecifier_Cache() {
+		return (EAttribute)db2IdentitySpecifierEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2IdentitySpecifier_Order() {
+		return (EAttribute)db2IdentitySpecifierEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2IdentitySpecifier_SystemGenerated() {
+		return (EAttribute)db2IdentitySpecifierEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2IdentitySpecifier_RestartValue() {
+		return (EAttribute)db2IdentitySpecifierEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2Jar() {
+		return db2JarEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Jar_FileName() {
+		return (EAttribute)db2JarEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Jar_Path() {
+		return (EAttribute)db2JarEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Jar_Owner() {
+		return (EAttribute)db2JarEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Jar_CreatedTS() {
+		return (EAttribute)db2JarEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Jar_AlteredTS() {
+		return (EAttribute)db2JarEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Jar_Procedures() {
+		return (EReference)db2JarEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Jar_Schema() {
+		return (EReference)db2JarEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2Column() {
+		return db2ColumnEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Column_GenerationType() {
+		return (EAttribute)db2ColumnEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Column_RowChangeTimestamp() {
+		return (EAttribute)db2ColumnEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Column_RowBegin() {
+		return (EAttribute)db2ColumnEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Column_RowEnd() {
+		return (EAttribute)db2ColumnEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Column_TransStartID() {
+		return (EAttribute)db2ColumnEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Column_BeginPeriod() {
+		return (EReference)db2ColumnEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Column_EndPeriod() {
+		return (EReference)db2ColumnEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2XSRObject() {
+		return db2XSRObjectEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2XSRObject_Schema() {
+		return (EReference)db2XSRObjectEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2XMLSchema() {
+		return db2XMLSchemaEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2XMLSchema_Decomposition() {
+		return (EAttribute)db2XMLSchemaEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2XMLSchema_Status() {
+		return (EAttribute)db2XMLSchemaEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2XMLSchema_XmlSchemaDocs() {
+		return (EReference)db2XMLSchemaEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2XMLSchemaDocument() {
+		return db2XMLSchemaDocumentEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2XMLSchemaDocument_FileName() {
+		return (EAttribute)db2XMLSchemaDocumentEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2XMLSchemaDocument_SchemaLocation() {
+		return (EAttribute)db2XMLSchemaDocumentEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2XMLSchemaDocument_TargetNamespace() {
+		return (EAttribute)db2XMLSchemaDocumentEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2XMLSchemaDocument_Primary() {
+		return (EAttribute)db2XMLSchemaDocumentEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2XMLSchemaDocument_XmlSchema() {
+		return (EReference)db2XMLSchemaDocumentEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2XMLSchemaDocument_XmlSchemaDocProperties() {
+		return (EReference)db2XMLSchemaDocumentEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2XMLSchemaDocProperties() {
+		return db2XMLSchemaDocPropertiesEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2XMLSchemaDocProperties_Value() {
+		return (EAttribute)db2XMLSchemaDocPropertiesEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2XMLSchemaDocProperties_XmlSchemaDoc() {
+		return (EReference)db2XMLSchemaDocPropertiesEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2PackageStatement() {
+		return db2PackageStatementEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2PackageStatement_StatementNumber() {
+		return (EAttribute)db2PackageStatementEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2PackageStatement_SectionNumber() {
+		return (EAttribute)db2PackageStatementEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2PackageStatement_Package() {
+		return (EReference)db2PackageStatementEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2PackageStatement_SqlStatement() {
+		return (EReference)db2PackageStatementEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2DistinctUserDefinedType() {
+		return db2DistinctUserDefinedTypeEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2Period() {
+		return db2PeriodEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Period_Type() {
+		return (EAttribute)db2PeriodEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Period_BeginColumn() {
+		return (EReference)db2PeriodEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Period_EndColumn() {
+		return (EReference)db2PeriodEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Period_Table() {
+		return (EReference)db2PeriodEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2Cluster() {
+		return db2ClusterEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Cluster_Level() {
+		return (EAttribute)db2ClusterEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Cluster_Instance() {
+		return (EReference)db2ClusterEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Cluster_Members() {
+		return (EReference)db2ClusterEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2Member() {
+		return db2MemberEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Member_Id() {
+		return (EAttribute)db2MemberEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Member_HomeHost() {
+		return (EAttribute)db2MemberEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Member_CurrentHost() {
+		return (EAttribute)db2MemberEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Member_State() {
+		return (EAttribute)db2MemberEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Member_Cluster() {
+		return (EReference)db2MemberEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2UniqueConstraintExtension() {
+		return db2UniqueConstraintExtensionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2UniqueConstraintExtension_BusPeriodWithoutOverlap() {
+		return (EAttribute)db2UniqueConstraintExtensionEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2Mask() {
+		return db2MaskEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Mask_CorrelationName() {
+		return (EAttribute)db2MaskEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Mask_CaseExpression() {
+		return (EReference)db2MaskEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Mask_Enable() {
+		return (EAttribute)db2MaskEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Mask_Schema() {
+		return (EReference)db2MaskEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Mask_SubjectTable() {
+		return (EReference)db2MaskEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Mask_SubjectMQT() {
+		return (EReference)db2MaskEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Mask_SubjectColumn() {
+		return (EReference)db2MaskEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDB2Permission() {
+		return db2PermissionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Permission_CorrelationName() {
+		return (EAttribute)db2PermissionEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Permission_SearchCondition() {
+		return (EReference)db2PermissionEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDB2Permission_Enable() {
+		return (EAttribute)db2PermissionEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Permission_Schema() {
+		return (EReference)db2PermissionEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Permission_SubjectTable() {
+		return (EReference)db2PermissionEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDB2Permission_SubjectMQT() {
+		return (EReference)db2PermissionEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getIsolationLevelType() {
+		return isolationLevelTypeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getDB2IndexType() {
+		return db2IndexTypeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getDataCaptureType() {
+		return dataCaptureTypeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getUnitType() {
+		return unitTypeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getGenerateType() {
+		return generateTypeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getDB2XMLSchemaDecomposition() {
+		return db2XMLSchemaDecompositionEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getDB2XMLSchemaStatus() {
+		return db2XMLSchemaStatusEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getOriginType() {
+		return originTypeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getReoptType() {
+		return reoptTypeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getSourceDialect() {
+		return sourceDialectEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getDB2PeriodType() {
+		return db2PeriodTypeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getDB2TableOrganization() {
+		return db2TableOrganizationEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2ModelFactory getDB2ModelFactory() {
+		return (DB2ModelFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		db2DatabaseEClass = createEClass(DB2_DATABASE);
+		createEAttribute(db2DatabaseEClass, DB2_DATABASE__PARTITIONED);
+		createEAttribute(db2DatabaseEClass, DB2_DATABASE__DEFAULT_ORGANIZE_BY_ROW);
+
+		db2PackageEClass = createEClass(DB2_PACKAGE);
+		createEAttribute(db2PackageEClass, DB2_PACKAGE__OPERATIVE);
+		createEAttribute(db2PackageEClass, DB2_PACKAGE__VALID);
+		createEAttribute(db2PackageEClass, DB2_PACKAGE__VERSION);
+		createEAttribute(db2PackageEClass, DB2_PACKAGE__DEFAULT_SCHEMA);
+		createEAttribute(db2PackageEClass, DB2_PACKAGE__SQL_PATH);
+		createEAttribute(db2PackageEClass, DB2_PACKAGE__REOPT_VAR);
+		createEAttribute(db2PackageEClass, DB2_PACKAGE__ISOLATION);
+		createEAttribute(db2PackageEClass, DB2_PACKAGE__UNIQUE_ID);
+		createEAttribute(db2PackageEClass, DB2_PACKAGE__LAST_BIND_TS);
+		createEReference(db2PackageEClass, DB2_PACKAGE__SCHEMA);
+		createEReference(db2PackageEClass, DB2_PACKAGE__STATEMENTS);
+
+		db2TableEClass = createEClass(DB2_TABLE);
+		createEAttribute(db2TableEClass, DB2_TABLE__DATA_CAPTURE);
+		createEAttribute(db2TableEClass, DB2_TABLE__ACTIVATE_ROW_ACCESS_CONTROL);
+		createEAttribute(db2TableEClass, DB2_TABLE__ACTIVATE_COLUMN_ACCESS_CONTROL);
+		createEAttribute(db2TableEClass, DB2_TABLE__ORGANIZE_BY);
+		createEReference(db2TableEClass, DB2_TABLE__PACKAGES);
+		createEReference(db2TableEClass, DB2_TABLE__PERIODS);
+		createEReference(db2TableEClass, DB2_TABLE__HISTORY_TABLE);
+		createEReference(db2TableEClass, DB2_TABLE__TEMPORAL_TABLE);
+		createEReference(db2TableEClass, DB2_TABLE__MASKS);
+		createEReference(db2TableEClass, DB2_TABLE__PERMISSIONS);
+
+		db2TriggerEClass = createEClass(DB2_TRIGGER);
+		createEAttribute(db2TriggerEClass, DB2_TRIGGER__OPERATIVE);
+		createEAttribute(db2TriggerEClass, DB2_TRIGGER__SECURED);
+
+		db2ProcedureEClass = createEClass(DB2_PROCEDURE);
+		createEAttribute(db2ProcedureEClass, DB2_PROCEDURE__MODEL_RESULT_SETS);
+		createEAttribute(db2ProcedureEClass, DB2_PROCEDURE__NULL_INPUT);
+		createEAttribute(db2ProcedureEClass, DB2_PROCEDURE__VERSION);
+		createEAttribute(db2ProcedureEClass, DB2_PROCEDURE__DIALECT);
+		createEAttribute(db2ProcedureEClass, DB2_PROCEDURE__EXTERNAL_ACTION);
+		createEReference(db2ProcedureEClass, DB2_PROCEDURE__RETURN);
+		createEReference(db2ProcedureEClass, DB2_PROCEDURE__JAVA_OPTIONS);
+		createEReference(db2ProcedureEClass, DB2_PROCEDURE__DEPLOY);
+
+		db2SchemaEClass = createEClass(DB2_SCHEMA);
+		createEReference(db2SchemaEClass, DB2_SCHEMA__ACCESS_PLANS);
+		createEReference(db2SchemaEClass, DB2_SCHEMA__OLAP_OBJECTS);
+		createEReference(db2SchemaEClass, DB2_SCHEMA__JARS);
+		createEReference(db2SchemaEClass, DB2_SCHEMA__XSR_OBJECTS);
+		createEReference(db2SchemaEClass, DB2_SCHEMA__PACKAGES);
+		createEReference(db2SchemaEClass, DB2_SCHEMA__MASKS);
+		createEReference(db2SchemaEClass, DB2_SCHEMA__PERMISSIONS);
+		createEReference(db2SchemaEClass, DB2_SCHEMA__MODULES);
+		createEReference(db2SchemaEClass, DB2_SCHEMA__GLOBAL_VARIABLES);
+
+		db2RoutineEClass = createEClass(DB2_ROUTINE);
+		createEAttribute(db2RoutineEClass, DB2_ROUTINE__FENCED);
+		createEAttribute(db2RoutineEClass, DB2_ROUTINE__THREADSAFE);
+		createEAttribute(db2RoutineEClass, DB2_ROUTINE__DB_INFO);
+		createEAttribute(db2RoutineEClass, DB2_ROUTINE__IMPLICIT_SCHEMA);
+		createEAttribute(db2RoutineEClass, DB2_ROUTINE__FEDERATED);
+		createEAttribute(db2RoutineEClass, DB2_ROUTINE__PARM_CCSID);
+		createEAttribute(db2RoutineEClass, DB2_ROUTINE__SPECIAL_REGISTER);
+		createEAttribute(db2RoutineEClass, DB2_ROUTINE__CHANGE_STATE);
+		createEAttribute(db2RoutineEClass, DB2_ROUTINE__DEBUG_ID);
+		createEAttribute(db2RoutineEClass, DB2_ROUTINE__PROGRAM_TYPE);
+		createEAttribute(db2RoutineEClass, DB2_ROUTINE__ORIG_SCHEMA_NAME);
+		createEAttribute(db2RoutineEClass, DB2_ROUTINE__ORIG_PARM_SIG);
+		createEReference(db2RoutineEClass, DB2_ROUTINE__EXTENDED_OPTIONS);
+		createEReference(db2RoutineEClass, DB2_ROUTINE__ROUTINE_EXTENSIONS);
+
+		db2DatabaseManagerEClass = createEClass(DB2_DATABASE_MANAGER);
+		createEReference(db2DatabaseManagerEClass, DB2_DATABASE_MANAGER__DATABASES);
+		createEReference(db2DatabaseManagerEClass, DB2_DATABASE_MANAGER__DB2_PROCESS);
+		createEReference(db2DatabaseManagerEClass, DB2_DATABASE_MANAGER__SERVER);
+		createEReference(db2DatabaseManagerEClass, DB2_DATABASE_MANAGER__CLUSTER);
+
+		db2ViewEClass = createEClass(DB2_VIEW);
+		createEAttribute(db2ViewEClass, DB2_VIEW__OPERATIVE);
+
+		db2ApplicationProcessEClass = createEClass(DB2_APPLICATION_PROCESS);
+		createEAttribute(db2ApplicationProcessEClass, DB2_APPLICATION_PROCESS__ISOLATION_LEVEL);
+		createEReference(db2ApplicationProcessEClass, DB2_APPLICATION_PROCESS__UNIT_OF_WORK);
+
+		db2TransactionEClass = createEClass(DB2_TRANSACTION);
+
+		db2SystemSchemaEClass = createEClass(DB2_SYSTEM_SCHEMA);
+
+		db2SourceEClass = createEClass(DB2_SOURCE);
+		createEAttribute(db2SourceEClass, DB2_SOURCE__FILE_NAME);
+		createEAttribute(db2SourceEClass, DB2_SOURCE__PACKAGE_NAME);
+		createEAttribute(db2SourceEClass, DB2_SOURCE__DB2_PACKAGE_NAME);
+		createEAttribute(db2SourceEClass, DB2_SOURCE__LAST_MODIFIED);
+		createEReference(db2SourceEClass, DB2_SOURCE__SUPPORTING);
+		createEReference(db2SourceEClass, DB2_SOURCE__PRIMARY);
+
+		db2AccessPlanEClass = createEClass(DB2_ACCESS_PLAN);
+
+		db2UserDefinedFunctionEClass = createEClass(DB2_USER_DEFINED_FUNCTION);
+
+		db2MethodEClass = createEClass(DB2_METHOD);
+		createEAttribute(db2MethodEClass, DB2_METHOD__RETURNS_SELF_AS_RESULT);
+		createEAttribute(db2MethodEClass, DB2_METHOD__IMPLEMENTED);
+
+		db2ExtendedOptionsEClass = createEClass(DB2_EXTENDED_OPTIONS);
+		createEAttribute(db2ExtendedOptionsEClass, DB2_EXTENDED_OPTIONS__CLASSPATH_COMPILE_JARS);
+		createEAttribute(db2ExtendedOptionsEClass, DB2_EXTENDED_OPTIONS__PRE_COMPILE_OPTS);
+		createEAttribute(db2ExtendedOptionsEClass, DB2_EXTENDED_OPTIONS__FOR_DEBUG);
+		createEAttribute(db2ExtendedOptionsEClass, DB2_EXTENDED_OPTIONS__BUILT);
+		createEAttribute(db2ExtendedOptionsEClass, DB2_EXTENDED_OPTIONS__COMPILE_OPTS);
+		createEAttribute(db2ExtendedOptionsEClass, DB2_EXTENDED_OPTIONS__LINK_OPTS);
+		createEAttribute(db2ExtendedOptionsEClass, DB2_EXTENDED_OPTIONS__BIND_OPTS);
+		createEAttribute(db2ExtendedOptionsEClass, DB2_EXTENDED_OPTIONS__COLID);
+
+		db2AliasEClass = createEClass(DB2_ALIAS);
+		createEReference(db2AliasEClass, DB2_ALIAS__ALIASED_TABLE);
+
+		db2MaterializedQueryTableEClass = createEClass(DB2_MATERIALIZED_QUERY_TABLE);
+		createEAttribute(db2MaterializedQueryTableEClass, DB2_MATERIALIZED_QUERY_TABLE__REFRESH);
+		createEAttribute(db2MaterializedQueryTableEClass, DB2_MATERIALIZED_QUERY_TABLE__OPTIMIZE_QUERY);
+		createEAttribute(db2MaterializedQueryTableEClass, DB2_MATERIALIZED_QUERY_TABLE__MAINTAINED_BY);
+		createEAttribute(db2MaterializedQueryTableEClass, DB2_MATERIALIZED_QUERY_TABLE__ACTIVATE_ROW_ACCESS_CONTROL);
+		createEAttribute(db2MaterializedQueryTableEClass, DB2_MATERIALIZED_QUERY_TABLE__ACTIVATE_COLUMN_ACCESS_CONTROL);
+		createEReference(db2MaterializedQueryTableEClass, DB2_MATERIALIZED_QUERY_TABLE__MASKS);
+		createEReference(db2MaterializedQueryTableEClass, DB2_MATERIALIZED_QUERY_TABLE__PERMISSIONS);
+
+		db2IndexEClass = createEClass(DB2_INDEX);
+		createEAttribute(db2IndexEClass, DB2_INDEX__INDEX_TYPE);
+		createEAttribute(db2IndexEClass, DB2_INDEX__BUS_PERIOD_WITHOUT_OVERLAP);
+		createEAttribute(db2IndexEClass, DB2_INDEX__ENCODED_VECTOR);
+		createEReference(db2IndexEClass, DB2_INDEX__DB2_MULTIDIMENSIONAL_INDEX);
+
+		db2MultidimensionalIndexEClass = createEClass(DB2_MULTIDIMENSIONAL_INDEX);
+		createEReference(db2MultidimensionalIndexEClass, DB2_MULTIDIMENSIONAL_INDEX__DIMENSION_INDEXES);
+
+		db2FunctionEClass = createEClass(DB2_FUNCTION);
+		createEAttribute(db2FunctionEClass, DB2_FUNCTION__FINAL_CALL);
+		createEAttribute(db2FunctionEClass, DB2_FUNCTION__SCRATCH_PAD);
+		createEAttribute(db2FunctionEClass, DB2_FUNCTION__SCRATCH_PAD_LENGTH);
+		createEAttribute(db2FunctionEClass, DB2_FUNCTION__FUNCTION_TYPE);
+		createEAttribute(db2FunctionEClass, DB2_FUNCTION__PREDICATE);
+		createEAttribute(db2FunctionEClass, DB2_FUNCTION__EXTERNAL_ACTION);
+		createEAttribute(db2FunctionEClass, DB2_FUNCTION__CARDINALITY);
+		createEAttribute(db2FunctionEClass, DB2_FUNCTION__ALLOW_PARALLEL);
+		createEAttribute(db2FunctionEClass, DB2_FUNCTION__RETURN_CLAUSE);
+		createEAttribute(db2FunctionEClass, DB2_FUNCTION__ORIGIN);
+		createEAttribute(db2FunctionEClass, DB2_FUNCTION__INHERIT_LOCK_REQUEST);
+		createEAttribute(db2FunctionEClass, DB2_FUNCTION__DIALECT);
+		createEAttribute(db2FunctionEClass, DB2_FUNCTION__INLINE);
+		createEAttribute(db2FunctionEClass, DB2_FUNCTION__VERSION);
+		createEAttribute(db2FunctionEClass, DB2_FUNCTION__SECURED);
+
+		db2JavaOptionsEClass = createEClass(DB2_JAVA_OPTIONS);
+		createEAttribute(db2JavaOptionsEClass, DB2_JAVA_OPTIONS__CLASS_NAME);
+		createEAttribute(db2JavaOptionsEClass, DB2_JAVA_OPTIONS__METHOD_NAME);
+		createEAttribute(db2JavaOptionsEClass, DB2_JAVA_OPTIONS__SQLJ);
+		createEReference(db2JavaOptionsEClass, DB2_JAVA_OPTIONS__PROCEDURE);
+		createEReference(db2JavaOptionsEClass, DB2_JAVA_OPTIONS__JAR);
+
+		db2ProcedureDeployEClass = createEClass(DB2_PROCEDURE_DEPLOY);
+		createEAttribute(db2ProcedureDeployEClass, DB2_PROCEDURE_DEPLOY__FILE_NAME);
+
+		db2OLAPObjectEClass = createEClass(DB2OLAP_OBJECT);
+		createEReference(db2OLAPObjectEClass, DB2OLAP_OBJECT__SCHEMA);
+
+		db2RoutineExtensionEClass = createEClass(DB2_ROUTINE_EXTENSION);
+
+		db2IdentitySpecifierEClass = createEClass(DB2_IDENTITY_SPECIFIER);
+		createEAttribute(db2IdentitySpecifierEClass, DB2_IDENTITY_SPECIFIER__CACHE);
+		createEAttribute(db2IdentitySpecifierEClass, DB2_IDENTITY_SPECIFIER__ORDER);
+		createEAttribute(db2IdentitySpecifierEClass, DB2_IDENTITY_SPECIFIER__SYSTEM_GENERATED);
+		createEAttribute(db2IdentitySpecifierEClass, DB2_IDENTITY_SPECIFIER__RESTART_VALUE);
+
+		db2JarEClass = createEClass(DB2_JAR);
+		createEAttribute(db2JarEClass, DB2_JAR__FILE_NAME);
+		createEAttribute(db2JarEClass, DB2_JAR__PATH);
+		createEAttribute(db2JarEClass, DB2_JAR__OWNER);
+		createEAttribute(db2JarEClass, DB2_JAR__CREATED_TS);
+		createEAttribute(db2JarEClass, DB2_JAR__ALTERED_TS);
+		createEReference(db2JarEClass, DB2_JAR__PROCEDURES);
+		createEReference(db2JarEClass, DB2_JAR__SCHEMA);
+
+		db2ColumnEClass = createEClass(DB2_COLUMN);
+		createEAttribute(db2ColumnEClass, DB2_COLUMN__GENERATION_TYPE);
+		createEAttribute(db2ColumnEClass, DB2_COLUMN__ROW_CHANGE_TIMESTAMP);
+		createEAttribute(db2ColumnEClass, DB2_COLUMN__ROW_BEGIN);
+		createEAttribute(db2ColumnEClass, DB2_COLUMN__ROW_END);
+		createEAttribute(db2ColumnEClass, DB2_COLUMN__TRANS_START_ID);
+		createEReference(db2ColumnEClass, DB2_COLUMN__BEGIN_PERIOD);
+		createEReference(db2ColumnEClass, DB2_COLUMN__END_PERIOD);
+
+		db2XSRObjectEClass = createEClass(DB2XSR_OBJECT);
+		createEReference(db2XSRObjectEClass, DB2XSR_OBJECT__SCHEMA);
+
+		db2XMLSchemaEClass = createEClass(DB2XML_SCHEMA);
+		createEAttribute(db2XMLSchemaEClass, DB2XML_SCHEMA__DECOMPOSITION);
+		createEAttribute(db2XMLSchemaEClass, DB2XML_SCHEMA__STATUS);
+		createEReference(db2XMLSchemaEClass, DB2XML_SCHEMA__XML_SCHEMA_DOCS);
+
+		db2XMLSchemaDocumentEClass = createEClass(DB2XML_SCHEMA_DOCUMENT);
+		createEAttribute(db2XMLSchemaDocumentEClass, DB2XML_SCHEMA_DOCUMENT__FILE_NAME);
+		createEAttribute(db2XMLSchemaDocumentEClass, DB2XML_SCHEMA_DOCUMENT__SCHEMA_LOCATION);
+		createEAttribute(db2XMLSchemaDocumentEClass, DB2XML_SCHEMA_DOCUMENT__TARGET_NAMESPACE);
+		createEAttribute(db2XMLSchemaDocumentEClass, DB2XML_SCHEMA_DOCUMENT__PRIMARY);
+		createEReference(db2XMLSchemaDocumentEClass, DB2XML_SCHEMA_DOCUMENT__XML_SCHEMA);
+		createEReference(db2XMLSchemaDocumentEClass, DB2XML_SCHEMA_DOCUMENT__XML_SCHEMA_DOC_PROPERTIES);
+
+		db2XMLSchemaDocPropertiesEClass = createEClass(DB2XML_SCHEMA_DOC_PROPERTIES);
+		createEAttribute(db2XMLSchemaDocPropertiesEClass, DB2XML_SCHEMA_DOC_PROPERTIES__VALUE);
+		createEReference(db2XMLSchemaDocPropertiesEClass, DB2XML_SCHEMA_DOC_PROPERTIES__XML_SCHEMA_DOC);
+
+		db2PackageStatementEClass = createEClass(DB2_PACKAGE_STATEMENT);
+		createEAttribute(db2PackageStatementEClass, DB2_PACKAGE_STATEMENT__STATEMENT_NUMBER);
+		createEAttribute(db2PackageStatementEClass, DB2_PACKAGE_STATEMENT__SECTION_NUMBER);
+		createEReference(db2PackageStatementEClass, DB2_PACKAGE_STATEMENT__PACKAGE);
+		createEReference(db2PackageStatementEClass, DB2_PACKAGE_STATEMENT__SQL_STATEMENT);
+
+		db2DistinctUserDefinedTypeEClass = createEClass(DB2_DISTINCT_USER_DEFINED_TYPE);
+
+		db2PeriodEClass = createEClass(DB2_PERIOD);
+		createEAttribute(db2PeriodEClass, DB2_PERIOD__TYPE);
+		createEReference(db2PeriodEClass, DB2_PERIOD__BEGIN_COLUMN);
+		createEReference(db2PeriodEClass, DB2_PERIOD__END_COLUMN);
+		createEReference(db2PeriodEClass, DB2_PERIOD__TABLE);
+
+		db2ClusterEClass = createEClass(DB2_CLUSTER);
+		createEAttribute(db2ClusterEClass, DB2_CLUSTER__LEVEL);
+		createEReference(db2ClusterEClass, DB2_CLUSTER__INSTANCE);
+		createEReference(db2ClusterEClass, DB2_CLUSTER__MEMBERS);
+
+		db2MemberEClass = createEClass(DB2_MEMBER);
+		createEAttribute(db2MemberEClass, DB2_MEMBER__ID);
+		createEAttribute(db2MemberEClass, DB2_MEMBER__HOME_HOST);
+		createEAttribute(db2MemberEClass, DB2_MEMBER__CURRENT_HOST);
+		createEAttribute(db2MemberEClass, DB2_MEMBER__STATE);
+		createEReference(db2MemberEClass, DB2_MEMBER__CLUSTER);
+
+		db2UniqueConstraintExtensionEClass = createEClass(DB2_UNIQUE_CONSTRAINT_EXTENSION);
+		createEAttribute(db2UniqueConstraintExtensionEClass, DB2_UNIQUE_CONSTRAINT_EXTENSION__BUS_PERIOD_WITHOUT_OVERLAP);
+
+		db2MaskEClass = createEClass(DB2_MASK);
+		createEAttribute(db2MaskEClass, DB2_MASK__CORRELATION_NAME);
+		createEReference(db2MaskEClass, DB2_MASK__CASE_EXPRESSION);
+		createEAttribute(db2MaskEClass, DB2_MASK__ENABLE);
+		createEReference(db2MaskEClass, DB2_MASK__SCHEMA);
+		createEReference(db2MaskEClass, DB2_MASK__SUBJECT_TABLE);
+		createEReference(db2MaskEClass, DB2_MASK__SUBJECT_MQT);
+		createEReference(db2MaskEClass, DB2_MASK__SUBJECT_COLUMN);
+
+		db2PermissionEClass = createEClass(DB2_PERMISSION);
+		createEAttribute(db2PermissionEClass, DB2_PERMISSION__CORRELATION_NAME);
+		createEReference(db2PermissionEClass, DB2_PERMISSION__SEARCH_CONDITION);
+		createEAttribute(db2PermissionEClass, DB2_PERMISSION__ENABLE);
+		createEReference(db2PermissionEClass, DB2_PERMISSION__SCHEMA);
+		createEReference(db2PermissionEClass, DB2_PERMISSION__SUBJECT_TABLE);
+		createEReference(db2PermissionEClass, DB2_PERMISSION__SUBJECT_MQT);
+
+		// Create enums
+		isolationLevelTypeEEnum = createEEnum(ISOLATION_LEVEL_TYPE);
+		db2IndexTypeEEnum = createEEnum(DB2_INDEX_TYPE);
+		dataCaptureTypeEEnum = createEEnum(DATA_CAPTURE_TYPE);
+		unitTypeEEnum = createEEnum(UNIT_TYPE);
+		generateTypeEEnum = createEEnum(GENERATE_TYPE);
+		db2XMLSchemaDecompositionEEnum = createEEnum(DB2XML_SCHEMA_DECOMPOSITION);
+		db2XMLSchemaStatusEEnum = createEEnum(DB2XML_SCHEMA_STATUS);
+		originTypeEEnum = createEEnum(ORIGIN_TYPE);
+		reoptTypeEEnum = createEEnum(REOPT_TYPE);
+		sourceDialectEEnum = createEEnum(SOURCE_DIALECT);
+		db2PeriodTypeEEnum = createEEnum(DB2_PERIOD_TYPE);
+		db2TableOrganizationEEnum = createEEnum(DB2_TABLE_ORGANIZATION);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		SQLSchemaPackage theSQLSchemaPackage = (SQLSchemaPackage)EPackage.Registry.INSTANCE.getEPackage(SQLSchemaPackage.eNS_URI);
+		SQLTablesPackage theSQLTablesPackage = (SQLTablesPackage)EPackage.Registry.INSTANCE.getEPackage(SQLTablesPackage.eNS_URI);
+		SQLRoutinesPackage theSQLRoutinesPackage = (SQLRoutinesPackage)EPackage.Registry.INSTANCE.getEPackage(SQLRoutinesPackage.eNS_URI);
+		SQLDataTypesPackage theSQLDataTypesPackage = (SQLDataTypesPackage)EPackage.Registry.INSTANCE.getEPackage(SQLDataTypesPackage.eNS_URI);
+		SQLConstraintsPackage theSQLConstraintsPackage = (SQLConstraintsPackage)EPackage.Registry.INSTANCE.getEPackage(SQLConstraintsPackage.eNS_URI);
+		EcorePackage theEcorePackage = (EcorePackage)EPackage.Registry.INSTANCE.getEPackage(EcorePackage.eNS_URI);
+		SQLStatementsPackage theSQLStatementsPackage = (SQLStatementsPackage)EPackage.Registry.INSTANCE.getEPackage(SQLStatementsPackage.eNS_URI);
+		SQLExpressionsPackage theSQLExpressionsPackage = (SQLExpressionsPackage)EPackage.Registry.INSTANCE.getEPackage(SQLExpressionsPackage.eNS_URI);
+
+
+		// Add supertypes to classes
+		db2DatabaseEClass.getESuperTypes().add(theSQLSchemaPackage.getDatabase());
+		db2PackageEClass.getESuperTypes().add(this.getDB2AccessPlan());
+		db2TableEClass.getESuperTypes().add(theSQLTablesPackage.getPersistentTable());
+		db2TriggerEClass.getESuperTypes().add(theSQLTablesPackage.getTrigger());
+		db2TriggerEClass.getESuperTypes().add(this.getDB2AccessPlan());
+		db2ProcedureEClass.getESuperTypes().add(theSQLRoutinesPackage.getProcedure());
+		db2ProcedureEClass.getESuperTypes().add(this.getDB2Routine());
+		db2SchemaEClass.getESuperTypes().add(theSQLSchemaPackage.getSchema());
+		db2RoutineEClass.getESuperTypes().add(theSQLRoutinesPackage.getRoutine());
+		db2RoutineEClass.getESuperTypes().add(this.getDB2AccessPlan());
+		db2DatabaseManagerEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		db2ViewEClass.getESuperTypes().add(theSQLTablesPackage.getViewTable());
+		db2ApplicationProcessEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		db2TransactionEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		db2SystemSchemaEClass.getESuperTypes().add(this.getDB2Schema());
+		db2SourceEClass.getESuperTypes().add(theSQLRoutinesPackage.getSource());
+		db2AccessPlanEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		db2UserDefinedFunctionEClass.getESuperTypes().add(theSQLRoutinesPackage.getUserDefinedFunction());
+		db2UserDefinedFunctionEClass.getESuperTypes().add(this.getDB2Function());
+		db2MethodEClass.getESuperTypes().add(theSQLRoutinesPackage.getMethod());
+		db2MethodEClass.getESuperTypes().add(this.getDB2Function());
+		db2ExtendedOptionsEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		db2AliasEClass.getESuperTypes().add(theSQLTablesPackage.getTable());
+		db2MaterializedQueryTableEClass.getESuperTypes().add(theSQLTablesPackage.getDerivedTable());
+		db2IndexEClass.getESuperTypes().add(theSQLConstraintsPackage.getIndex());
+		db2MultidimensionalIndexEClass.getESuperTypes().add(theSQLConstraintsPackage.getIndex());
+		db2FunctionEClass.getESuperTypes().add(this.getDB2Routine());
+		db2JavaOptionsEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		db2ProcedureDeployEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		db2OLAPObjectEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		db2RoutineExtensionEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		db2IdentitySpecifierEClass.getESuperTypes().add(theSQLSchemaPackage.getIdentitySpecifier());
+		db2JarEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		db2ColumnEClass.getESuperTypes().add(theSQLTablesPackage.getColumn());
+		db2XSRObjectEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		db2XMLSchemaEClass.getESuperTypes().add(this.getDB2XSRObject());
+		db2XMLSchemaDocumentEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		db2XMLSchemaDocPropertiesEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		db2PackageStatementEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		db2DistinctUserDefinedTypeEClass.getESuperTypes().add(theSQLDataTypesPackage.getDistinctUserDefinedType());
+		db2ClusterEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		db2MemberEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		db2UniqueConstraintExtensionEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		db2UniqueConstraintExtensionEClass.getESuperTypes().add(theSQLSchemaPackage.getObjectExtension());
+		db2MaskEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		db2PermissionEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(db2DatabaseEClass, DB2Database.class, "DB2Database", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDB2Database_Partitioned(), ecorePackage.getEBoolean(), "partitioned", null, 0, 1, DB2Database.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Database_DefaultOrganizeByRow(), ecorePackage.getEBoolean(), "defaultOrganizeByRow", "True", 0, 1, DB2Database.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+
+		initEClass(db2PackageEClass, DB2Package.class, "DB2Package", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDB2Package_Operative(), ecorePackage.getEBoolean(), "operative", "true", 0, 1, DB2Package.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getDB2Package_Valid(), ecorePackage.getEString(), "valid", null, 0, 1, DB2Package.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Package_Version(), ecorePackage.getEString(), "version", null, 0, 1, DB2Package.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Package_DefaultSchema(), ecorePackage.getEString(), "defaultSchema", null, 0, 1, DB2Package.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Package_SqlPath(), ecorePackage.getEString(), "sqlPath", null, 0, 1, DB2Package.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Package_ReoptVar(), this.getReoptType(), "reoptVar", null, 0, 1, DB2Package.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Package_Isolation(), this.getIsolationLevelType(), "isolation", null, 0, 1, DB2Package.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Package_UniqueID(), ecorePackage.getEString(), "uniqueID", null, 0, 1, DB2Package.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Package_LastBindTS(), ecorePackage.getEString(), "lastBindTS", null, 0, 1, DB2Package.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Package_Schema(), this.getDB2Schema(), this.getDB2Schema_Packages(), "schema", null, 1, 1, DB2Package.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Package_Statements(), this.getDB2PackageStatement(), this.getDB2PackageStatement_Package(), "statements", null, 0, -1, DB2Package.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2TableEClass, DB2Table.class, "DB2Table", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDB2Table_DataCapture(), this.getDataCaptureType(), "dataCapture", null, 0, 1, DB2Table.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Table_ActivateRowAccessControl(), ecorePackage.getEBoolean(), "activateRowAccessControl", "False", 0, 1, DB2Table.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getDB2Table_ActivateColumnAccessControl(), ecorePackage.getEBoolean(), "activateColumnAccessControl", "False", 0, 1, DB2Table.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getDB2Table_OrganizeBy(), this.getDB2TableOrganization(), "organizeBy", null, 0, 1, DB2Table.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Table_Packages(), this.getDB2Package(), null, "packages", null, 0, -1, DB2Table.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Table_Periods(), this.getDB2Period(), this.getDB2Period_Table(), "periods", null, 0, -1, DB2Table.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Table_HistoryTable(), this.getDB2Table(), this.getDB2Table_TemporalTable(), "historyTable", null, 0, 1, DB2Table.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Table_TemporalTable(), this.getDB2Table(), this.getDB2Table_HistoryTable(), "temporalTable", null, 0, 1, DB2Table.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Table_Masks(), this.getDB2Mask(), this.getDB2Mask_SubjectTable(), "masks", null, 0, -1, DB2Table.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Table_Permissions(), this.getDB2Permission(), this.getDB2Permission_SubjectTable(), "permissions", null, 0, -1, DB2Table.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2TriggerEClass, DB2Trigger.class, "DB2Trigger", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDB2Trigger_Operative(), ecorePackage.getEBoolean(), "operative", "true", 0, 1, DB2Trigger.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getDB2Trigger_Secured(), ecorePackage.getEBoolean(), "secured", "False", 0, 1, DB2Trigger.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+
+		initEClass(db2ProcedureEClass, DB2Procedure.class, "DB2Procedure", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDB2Procedure_ModelResultSets(), ecorePackage.getEBoolean(), "modelResultSets", "false", 0, 1, DB2Procedure.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getDB2Procedure_NullInput(), ecorePackage.getEBoolean(), "nullInput", null, 0, 1, DB2Procedure.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Procedure_Version(), ecorePackage.getEString(), "version", null, 0, 1, DB2Procedure.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Procedure_Dialect(), this.getSourceDialect(), "dialect", null, 0, 1, DB2Procedure.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Procedure_ExternalAction(), ecorePackage.getEBoolean(), "externalAction", "true", 0, 1, DB2Procedure.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEReference(getDB2Procedure_Return(), theSQLDataTypesPackage.getIntegerDataType(), null, "return", null, 0, 1, DB2Procedure.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Procedure_JavaOptions(), this.getDB2JavaOptions(), this.getDB2JavaOptions_Procedure(), "javaOptions", null, 0, 1, DB2Procedure.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Procedure_Deploy(), this.getDB2ProcedureDeploy(), null, "deploy", null, 0, 1, DB2Procedure.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2SchemaEClass, DB2Schema.class, "DB2Schema", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getDB2Schema_AccessPlans(), this.getDB2AccessPlan(), null, "accessPlans", null, 0, -1, DB2Schema.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Schema_OlapObjects(), this.getDB2OLAPObject(), this.getDB2OLAPObject_Schema(), "olapObjects", null, 0, -1, DB2Schema.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Schema_Jars(), this.getDB2Jar(), this.getDB2Jar_Schema(), "jars", null, 0, -1, DB2Schema.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Schema_XsrObjects(), this.getDB2XSRObject(), this.getDB2XSRObject_Schema(), "xsrObjects", null, 0, -1, DB2Schema.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Schema_Packages(), this.getDB2Package(), this.getDB2Package_Schema(), "packages", null, 0, -1, DB2Schema.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Schema_Masks(), this.getDB2Mask(), this.getDB2Mask_Schema(), "masks", null, 0, -1, DB2Schema.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Schema_Permissions(), this.getDB2Permission(), this.getDB2Permission_Schema(), "permissions", null, 0, -1, DB2Schema.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2RoutineEClass, DB2Routine.class, "DB2Routine", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDB2Routine_Fenced(), ecorePackage.getEString(), "fenced", null, 0, 1, DB2Routine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Routine_Threadsafe(), ecorePackage.getEString(), "threadsafe", null, 0, 1, DB2Routine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Routine_DbInfo(), ecorePackage.getEBoolean(), "dbInfo", null, 0, 1, DB2Routine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Routine_ImplicitSchema(), ecorePackage.getEBoolean(), "implicitSchema", null, 0, 1, DB2Routine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Routine_Federated(), ecorePackage.getEBoolean(), "federated", null, 0, 1, DB2Routine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Routine_ParmCcsid(), ecorePackage.getEString(), "parmCcsid", null, 0, 1, DB2Routine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Routine_SpecialRegister(), ecorePackage.getEString(), "specialRegister", null, 0, 1, DB2Routine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Routine_ChangeState(), ecorePackage.getEInt(), "changeState", "0", 0, 1, DB2Routine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getDB2Routine_DebugId(), ecorePackage.getEString(), "debugId", null, 0, 1, DB2Routine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Routine_ProgramType(), ecorePackage.getEString(), "programType", null, 0, 1, DB2Routine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Routine_OrigSchemaName(), ecorePackage.getEString(), "origSchemaName", null, 0, 1, DB2Routine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Routine_OrigParmSig(), ecorePackage.getEString(), "origParmSig", null, 0, 1, DB2Routine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Routine_ExtendedOptions(), this.getDB2ExtendedOptions(), null, "extendedOptions", null, 1, -1, DB2Routine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Routine_RoutineExtensions(), this.getDB2RoutineExtension(), null, "routineExtensions", null, 0, -1, DB2Routine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2DatabaseManagerEClass, DB2DatabaseManager.class, "DB2DatabaseManager", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getDB2DatabaseManager_Databases(), this.getDB2Database(), null, "databases", null, 0, -1, DB2DatabaseManager.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2DatabaseManager_Db2Process(), this.getDB2ApplicationProcess(), null, "db2Process", null, 0, -1, DB2DatabaseManager.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2DatabaseManager_Cluster(), this.getDB2Cluster(), this.getDB2Cluster_Instance(), "cluster", null, 0, 1, DB2DatabaseManager.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2ViewEClass, DB2View.class, "DB2View", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDB2View_Operative(), ecorePackage.getEBoolean(), "operative", null, 0, 1, DB2View.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2ApplicationProcessEClass, DB2ApplicationProcess.class, "DB2ApplicationProcess", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDB2ApplicationProcess_IsolationLevel(), this.getIsolationLevelType(), "isolationLevel", null, 0, 1, DB2ApplicationProcess.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2ApplicationProcess_UnitOfWork(), this.getDB2Transaction(), null, "unitOfWork", null, 0, 1, DB2ApplicationProcess.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2TransactionEClass, DB2Transaction.class, "DB2Transaction", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(db2SystemSchemaEClass, DB2SystemSchema.class, "DB2SystemSchema", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(db2SourceEClass, DB2Source.class, "DB2Source", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDB2Source_FileName(), ecorePackage.getEString(), "fileName", null, 0, 1, DB2Source.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Source_PackageName(), ecorePackage.getEString(), "packageName", null, 0, 1, DB2Source.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Source_Db2PackageName(), ecorePackage.getEString(), "db2PackageName", null, 0, 1, DB2Source.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Source_LastModified(), ecorePackage.getEString(), "lastModified", null, 0, 1, DB2Source.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Source_Supporting(), this.getDB2Source(), this.getDB2Source_Primary(), "supporting", null, 0, -1, DB2Source.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Source_Primary(), this.getDB2Source(), this.getDB2Source_Supporting(), "primary", null, 1, 1, DB2Source.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2AccessPlanEClass, DB2AccessPlan.class, "DB2AccessPlan", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(db2UserDefinedFunctionEClass, DB2UserDefinedFunction.class, "DB2UserDefinedFunction", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(db2MethodEClass, DB2Method.class, "DB2Method", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDB2Method_ReturnsSelfAsResult(), ecorePackage.getEBoolean(), "returnsSelfAsResult", null, 0, 1, DB2Method.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Method_Implemented(), ecorePackage.getEBoolean(), "implemented", null, 0, 1, DB2Method.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2ExtendedOptionsEClass, DB2ExtendedOptions.class, "DB2ExtendedOptions", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDB2ExtendedOptions_ClasspathCompileJars(), ecorePackage.getEString(), "classpathCompileJars", null, 0, 1, DB2ExtendedOptions.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2ExtendedOptions_PreCompileOpts(), ecorePackage.getEString(), "preCompileOpts", null, 0, 1, DB2ExtendedOptions.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2ExtendedOptions_ForDebug(), ecorePackage.getEBoolean(), "forDebug", null, 0, 1, DB2ExtendedOptions.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2ExtendedOptions_Built(), ecorePackage.getEBoolean(), "built", null, 0, 1, DB2ExtendedOptions.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2ExtendedOptions_CompileOpts(), ecorePackage.getEString(), "compileOpts", null, 0, 1, DB2ExtendedOptions.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2ExtendedOptions_LinkOpts(), ecorePackage.getEString(), "linkOpts", null, 0, 1, DB2ExtendedOptions.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2ExtendedOptions_BindOpts(), ecorePackage.getEString(), "bindOpts", null, 0, 1, DB2ExtendedOptions.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2ExtendedOptions_Colid(), ecorePackage.getEString(), "colid", null, 0, 1, DB2ExtendedOptions.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2AliasEClass, DB2Alias.class, "DB2Alias", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getDB2Alias_AliasedTable(), theSQLTablesPackage.getTable(), null, "aliasedTable", null, 1, 1, DB2Alias.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2MaterializedQueryTableEClass, DB2MaterializedQueryTable.class, "DB2MaterializedQueryTable", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDB2MaterializedQueryTable_OptimizeQuery(), ecorePackage.getEBoolean(), "optimizeQuery", "true", 0, 1, DB2MaterializedQueryTable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getDB2MaterializedQueryTable_ActivateRowAccessControl(), ecorePackage.getEBoolean(), "activateRowAccessControl", "False", 0, 1, DB2MaterializedQueryTable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getDB2MaterializedQueryTable_ActivateColumnAccessControl(), ecorePackage.getEBoolean(), "activateColumnAccessControl", "False", 0, 1, DB2MaterializedQueryTable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEReference(getDB2MaterializedQueryTable_Masks(), this.getDB2Mask(), this.getDB2Mask_SubjectMQT(), "masks", null, 0, -1, DB2MaterializedQueryTable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2MaterializedQueryTable_Permissions(), this.getDB2Permission(), this.getDB2Permission_SubjectMQT(), "permissions", null, 0, -1, DB2MaterializedQueryTable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2IndexEClass, DB2Index.class, "DB2Index", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDB2Index_IndexType(), this.getDB2IndexType(), "indexType", null, 0, 1, DB2Index.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Index_BusPeriodWithoutOverlap(), ecorePackage.getEBoolean(), "busPeriodWithoutOverlap", "False", 0, 1, DB2Index.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getDB2Index_EncodedVector(), ecorePackage.getEBoolean(), "encodedVector", "False", 0, 1, DB2Index.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEReference(getDB2Index_DB2MultidimensionalIndex(), this.getDB2MultidimensionalIndex(), this.getDB2MultidimensionalIndex_DimensionIndexes(), "DB2MultidimensionalIndex", null, 1, 1, DB2Index.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2MultidimensionalIndexEClass, DB2MultidimensionalIndex.class, "DB2MultidimensionalIndex", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getDB2MultidimensionalIndex_DimensionIndexes(), this.getDB2Index(), this.getDB2Index_DB2MultidimensionalIndex(), "dimensionIndexes", null, 1, -1, DB2MultidimensionalIndex.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2FunctionEClass, DB2Function.class, "DB2Function", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDB2Function_FinalCall(), ecorePackage.getEBoolean(), "finalCall", null, 0, 1, DB2Function.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Function_ScratchPad(), ecorePackage.getEBoolean(), "scratchPad", null, 0, 1, DB2Function.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Function_ScratchPadLength(), ecorePackage.getEInt(), "scratchPadLength", null, 0, 1, DB2Function.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Function_FunctionType(), ecorePackage.getEString(), "functionType", null, 0, 1, DB2Function.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Function_Predicate(), ecorePackage.getEString(), "predicate", null, 0, 1, DB2Function.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Function_ExternalAction(), ecorePackage.getEBoolean(), "externalAction", null, 0, 1, DB2Function.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Function_Cardinality(), ecorePackage.getEInt(), "cardinality", null, 0, 1, DB2Function.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Function_AllowParallel(), ecorePackage.getEBoolean(), "allowParallel", null, 0, 1, DB2Function.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Function_ReturnClause(), ecorePackage.getEString(), "returnClause", null, 0, 1, DB2Function.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Function_Origin(), this.getOriginType(), "origin", null, 0, 1, DB2Function.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Function_InheritLockRequest(), ecorePackage.getEBoolean(), "inheritLockRequest", null, 0, 1, DB2Function.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Function_Dialect(), this.getSourceDialect(), "dialect", null, 0, 1, DB2Function.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Function_Inline(), ecorePackage.getEBoolean(), "inline", null, 0, 1, DB2Function.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Function_Version(), ecorePackage.getEString(), "version", null, 0, 1, DB2Function.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Function_Secured(), ecorePackage.getEBoolean(), "secured", null, 0, 1, DB2Function.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2JavaOptionsEClass, DB2JavaOptions.class, "DB2JavaOptions", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDB2JavaOptions_ClassName(), ecorePackage.getEString(), "className", null, 0, 1, DB2JavaOptions.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2JavaOptions_MethodName(), ecorePackage.getEString(), "methodName", null, 0, 1, DB2JavaOptions.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2JavaOptions_Sqlj(), ecorePackage.getEBoolean(), "sqlj", null, 0, 1, DB2JavaOptions.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2JavaOptions_Procedure(), this.getDB2Procedure(), this.getDB2Procedure_JavaOptions(), "procedure", null, 1, 1, DB2JavaOptions.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2JavaOptions_Jar(), this.getDB2Jar(), this.getDB2Jar_Procedures(), "jar", null, 0, 1, DB2JavaOptions.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2ProcedureDeployEClass, DB2ProcedureDeploy.class, "DB2ProcedureDeploy", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDB2ProcedureDeploy_FileName(), ecorePackage.getEString(), "fileName", null, 0, 1, DB2ProcedureDeploy.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2OLAPObjectEClass, DB2OLAPObject.class, "DB2OLAPObject", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getDB2OLAPObject_Schema(), this.getDB2Schema(), this.getDB2Schema_OlapObjects(), "schema", null, 1, 1, DB2OLAPObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2RoutineExtensionEClass, DB2RoutineExtension.class, "DB2RoutineExtension", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(db2IdentitySpecifierEClass, DB2IdentitySpecifier.class, "DB2IdentitySpecifier", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDB2IdentitySpecifier_Cache(), ecorePackage.getEInt(), "cache", "20", 0, 1, DB2IdentitySpecifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getDB2IdentitySpecifier_Order(), ecorePackage.getEBoolean(), "order", null, 0, 1, DB2IdentitySpecifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2IdentitySpecifier_SystemGenerated(), ecorePackage.getEBoolean(), "systemGenerated", null, 0, 1, DB2IdentitySpecifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2IdentitySpecifier_RestartValue(), theEcorePackage.getEBigInteger(), "restartValue", null, 0, 1, DB2IdentitySpecifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2JarEClass, DB2Jar.class, "DB2Jar", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDB2Jar_FileName(), ecorePackage.getEString(), "fileName", null, 0, 1, DB2Jar.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Jar_Path(), ecorePackage.getEString(), "path", null, 0, 1, DB2Jar.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Jar_Owner(), ecorePackage.getEString(), "owner", null, 0, 1, DB2Jar.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Jar_CreatedTS(), ecorePackage.getEString(), "createdTS", null, 0, 1, DB2Jar.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Jar_AlteredTS(), ecorePackage.getEString(), "alteredTS", null, 0, 1, DB2Jar.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Jar_Procedures(), this.getDB2JavaOptions(), this.getDB2JavaOptions_Jar(), "procedures", null, 0, -1, DB2Jar.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Jar_Schema(), this.getDB2Schema(), this.getDB2Schema_Jars(), "schema", null, 1, 1, DB2Jar.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2ColumnEClass, DB2Column.class, "DB2Column", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDB2Column_GenerationType(), this.getGenerateType(), "generationType", null, 0, 1, DB2Column.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Column_RowChangeTimestamp(), ecorePackage.getEBoolean(), "rowChangeTimestamp", null, 0, 1, DB2Column.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Column_RowBegin(), ecorePackage.getEBoolean(), "rowBegin", "False", 0, 1, DB2Column.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getDB2Column_RowEnd(), ecorePackage.getEBoolean(), "rowEnd", "False", 0, 1, DB2Column.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getDB2Column_TransStartID(), ecorePackage.getEBoolean(), "transStartID", "False", 0, 1, DB2Column.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEReference(getDB2Column_BeginPeriod(), this.getDB2Period(), this.getDB2Period_BeginColumn(), "beginPeriod", null, 0, 1, DB2Column.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Column_EndPeriod(), this.getDB2Period(), this.getDB2Period_EndColumn(), "endPeriod", null, 0, 1, DB2Column.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2XSRObjectEClass, DB2XSRObject.class, "DB2XSRObject", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getDB2XSRObject_Schema(), this.getDB2Schema(), this.getDB2Schema_XsrObjects(), "schema", null, 1, 1, DB2XSRObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2XMLSchemaEClass, DB2XMLSchema.class, "DB2XMLSchema", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDB2XMLSchema_Decomposition(), this.getDB2XMLSchemaDecomposition(), "decomposition", null, 0, 1, DB2XMLSchema.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2XMLSchema_Status(), this.getDB2XMLSchemaStatus(), "status", null, 0, 1, DB2XMLSchema.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2XMLSchema_XmlSchemaDocs(), this.getDB2XMLSchemaDocument(), this.getDB2XMLSchemaDocument_XmlSchema(), "xmlSchemaDocs", null, 1, -1, DB2XMLSchema.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2XMLSchemaDocumentEClass, DB2XMLSchemaDocument.class, "DB2XMLSchemaDocument", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDB2XMLSchemaDocument_FileName(), ecorePackage.getEString(), "fileName", null, 0, 1, DB2XMLSchemaDocument.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2XMLSchemaDocument_SchemaLocation(), ecorePackage.getEString(), "schemaLocation", null, 0, 1, DB2XMLSchemaDocument.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2XMLSchemaDocument_TargetNamespace(), ecorePackage.getEString(), "targetNamespace", null, 0, 1, DB2XMLSchemaDocument.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2XMLSchemaDocument_Primary(), ecorePackage.getEBoolean(), "primary", null, 0, 1, DB2XMLSchemaDocument.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2XMLSchemaDocument_XmlSchema(), this.getDB2XMLSchema(), this.getDB2XMLSchema_XmlSchemaDocs(), "xmlSchema", null, 1, 1, DB2XMLSchemaDocument.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2XMLSchemaDocument_XmlSchemaDocProperties(), this.getDB2XMLSchemaDocProperties(), this.getDB2XMLSchemaDocProperties_XmlSchemaDoc(), "xmlSchemaDocProperties", null, 1, -1, DB2XMLSchemaDocument.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2XMLSchemaDocPropertiesEClass, DB2XMLSchemaDocProperties.class, "DB2XMLSchemaDocProperties", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDB2XMLSchemaDocProperties_Value(), ecorePackage.getEString(), "value", null, 0, 1, DB2XMLSchemaDocProperties.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2XMLSchemaDocProperties_XmlSchemaDoc(), this.getDB2XMLSchemaDocument(), this.getDB2XMLSchemaDocument_XmlSchemaDocProperties(), "xmlSchemaDoc", null, 1, 1, DB2XMLSchemaDocProperties.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2PackageStatementEClass, DB2PackageStatement.class, "DB2PackageStatement", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDB2PackageStatement_StatementNumber(), ecorePackage.getEInt(), "statementNumber", null, 0, 1, DB2PackageStatement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2PackageStatement_SectionNumber(), ecorePackage.getEInt(), "sectionNumber", null, 0, 1, DB2PackageStatement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2PackageStatement_Package(), this.getDB2Package(), this.getDB2Package_Statements(), "package", null, 1, 1, DB2PackageStatement.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2PackageStatement_SqlStatement(), theSQLStatementsPackage.getSQLStatement(), null, "sqlStatement", null, 0, 1, DB2PackageStatement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2DistinctUserDefinedTypeEClass, DB2DistinctUserDefinedType.class, "DB2DistinctUserDefinedType", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(db2PeriodEClass, DB2Period.class, "DB2Period", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDB2Period_Type(), this.getDB2PeriodType(), "type", null, 0, 1, DB2Period.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Period_BeginColumn(), this.getDB2Column(), this.getDB2Column_BeginPeriod(), "beginColumn", null, 1, 1, DB2Period.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Period_EndColumn(), this.getDB2Column(), this.getDB2Column_EndPeriod(), "endColumn", null, 1, 1, DB2Period.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Period_Table(), this.getDB2Table(), this.getDB2Table_Periods(), "table", null, 1, 1, DB2Period.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2ClusterEClass, DB2Cluster.class, "DB2Cluster", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDB2Cluster_Level(), ecorePackage.getEString(), "level", null, 0, 1, DB2Cluster.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Cluster_Instance(), this.getDB2DatabaseManager(), this.getDB2DatabaseManager_Cluster(), "instance", null, 1, 1, DB2Cluster.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Cluster_Members(), this.getDB2Member(), this.getDB2Member_Cluster(), "members", null, 0, -1, DB2Cluster.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2MemberEClass, DB2Member.class, "DB2Member", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDB2Member_Id(), ecorePackage.getEInt(), "id", null, 0, 1, DB2Member.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Member_HomeHost(), ecorePackage.getEString(), "homeHost", null, 0, 1, DB2Member.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Member_CurrentHost(), ecorePackage.getEString(), "currentHost", null, 0, 1, DB2Member.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1
+		initEReference(getDB2Member_Cluster(), this.getDB2Cluster(), this.getDB2Cluster_Members(), "cluster", null, 1, 1, DB2Member.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2UniqueConstraintExtensionEClass, DB2UniqueConstraintExtension.class, "DB2UniqueConstraintExtension", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDB2UniqueConstraintExtension_BusPeriodWithoutOverlap(), ecorePackage.getEBoolean(), "busPeriodWithoutOverlap", "False", 0, 1, DB2UniqueConstraintExtension.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+
+		initEClass(db2MaskEClass, DB2Mask.class, "DB2Mask", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDB2Mask_CorrelationName(), ecorePackage.getEString(), "correlationName", null, 0, 1, DB2Mask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Mask_CaseExpression(), theSQLExpressionsPackage.getQueryExpression(), null, "caseExpression", null, 0, 1, DB2Mask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Mask_Enable(), ecorePackage.getEBoolean(), "enable", "true", 0, 1, DB2Mask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEReference(getDB2Mask_Schema(), this.getDB2Schema(), this.getDB2Schema_Masks(), "schema", null, 1, 1, DB2Mask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Mask_SubjectTable(), this.getDB2Table(), this.getDB2Table_Masks(), "subjectTable", null, 1, 1, DB2Mask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Mask_SubjectMQT(), this.getDB2MaterializedQueryTable(), this.getDB2MaterializedQueryTable_Masks(), "subjectMQT", null, 1, 1, DB2Mask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Mask_SubjectColumn(), this.getDB2Column(), null, "subjectColumn", null, 1, 1, DB2Mask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(db2PermissionEClass, DB2Permission.class, "DB2Permission", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDB2Permission_CorrelationName(), ecorePackage.getEString(), "correlationName", null, 0, 1, DB2Permission.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Permission_SearchCondition(), theSQLExpressionsPackage.getQueryExpression(), null, "searchCondition", null, 0, 1, DB2Permission.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDB2Permission_Enable(), ecorePackage.getEBoolean(), "enable", "true", 0, 1, DB2Permission.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEReference(getDB2Permission_Schema(), this.getDB2Schema(), this.getDB2Schema_Permissions(), "schema", null, 1, 1, DB2Permission.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Permission_SubjectTable(), this.getDB2Table(), this.getDB2Table_Permissions(), "subjectTable", null, 1, 1, DB2Permission.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDB2Permission_SubjectMQT(), this.getDB2MaterializedQueryTable(), this.getDB2MaterializedQueryTable_Permissions(), "subjectMQT", null, 1, 1, DB2Permission.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		// Initialize enums and add enum literals
+		initEEnum(isolationLevelTypeEEnum, IsolationLevelType.class, "IsolationLevelType"); //$NON-NLS-1$
+		addEEnumLiteral(isolationLevelTypeEEnum, IsolationLevelType.REPEATABLE_READ_LITERAL);
+		addEEnumLiteral(isolationLevelTypeEEnum, IsolationLevelType.READ_STABILITY_LITERAL);
+		addEEnumLiteral(isolationLevelTypeEEnum, IsolationLevelType.CURSOR_STABILITY_LITERAL);
+		addEEnumLiteral(isolationLevelTypeEEnum, IsolationLevelType.UNCOMMITTED_READ_LITERAL);
+
+		initEEnum(db2IndexTypeEEnum, DB2IndexType.class, "DB2IndexType"); //$NON-NLS-1$
+		addEEnumLiteral(db2IndexTypeEEnum, DB2IndexType.REGULAR_LITERAL);
+		addEEnumLiteral(db2IndexTypeEEnum, DB2IndexType.BLOCK_LITERAL);
+		addEEnumLiteral(db2IndexTypeEEnum, DB2IndexType.DIMENSION_LITERAL);
+		addEEnumLiteral(db2IndexTypeEEnum, DB2IndexType.XMLPATH_LITERAL);
+		addEEnumLiteral(db2IndexTypeEEnum, DB2IndexType.XMLREGION_LITERAL);
+		addEEnumLiteral(db2IndexTypeEEnum, DB2IndexType.XMLCOLUMN_LOGICAL_LITERAL);
+		addEEnumLiteral(db2IndexTypeEEnum, DB2IndexType.XMLCOLUMN_PHYSICAL_LITERAL);
+
+		initEEnum(dataCaptureTypeEEnum, DataCaptureType.class, "DataCaptureType"); //$NON-NLS-1$
+		addEEnumLiteral(dataCaptureTypeEEnum, DataCaptureType.NONE_LITERAL);
+		addEEnumLiteral(dataCaptureTypeEEnum, DataCaptureType.CHANGES_LITERAL);
+
+		initEEnum(unitTypeEEnum, UnitType.class, "UnitType"); //$NON-NLS-1$
+		addEEnumLiteral(unitTypeEEnum, UnitType.K_LITERAL);
+		addEEnumLiteral(unitTypeEEnum, UnitType.M_LITERAL);
+		addEEnumLiteral(unitTypeEEnum, UnitType.G_LITERAL);
+
+		initEEnum(generateTypeEEnum, GenerateType.class, "GenerateType"); //$NON-NLS-1$
+		addEEnumLiteral(generateTypeEEnum, GenerateType.ALWAYS_LITERAL);
+		addEEnumLiteral(generateTypeEEnum, GenerateType.BY_DEFAULT_LITERAL);
+
+		initEEnum(db2XMLSchemaDecompositionEEnum, DB2XMLSchemaDecomposition.class, "DB2XMLSchemaDecomposition"); //$NON-NLS-1$
+		addEEnumLiteral(db2XMLSchemaDecompositionEEnum, DB2XMLSchemaDecomposition.ENABLED_LITERAL);
+		addEEnumLiteral(db2XMLSchemaDecompositionEEnum, DB2XMLSchemaDecomposition.NOT_ENABLED_LITERAL);
+		addEEnumLiteral(db2XMLSchemaDecompositionEEnum, DB2XMLSchemaDecomposition.INOPERATIVE_LITERAL);
+
+		initEEnum(db2XMLSchemaStatusEEnum, DB2XMLSchemaStatus.class, "DB2XMLSchemaStatus"); //$NON-NLS-1$
+		addEEnumLiteral(db2XMLSchemaStatusEEnum, DB2XMLSchemaStatus.COMPLETE_LITERAL);
+		addEEnumLiteral(db2XMLSchemaStatusEEnum, DB2XMLSchemaStatus.INCOMPLETE_LITERAL);
+		addEEnumLiteral(db2XMLSchemaStatusEEnum, DB2XMLSchemaStatus.REPLACE_LITERAL);
+		addEEnumLiteral(db2XMLSchemaStatusEEnum, DB2XMLSchemaStatus.TEMPORARY_LITERAL);
+
+		initEEnum(originTypeEEnum, OriginType.class, "OriginType"); //$NON-NLS-1$
+		addEEnumLiteral(originTypeEEnum, OriginType.NONE_LITERAL);
+		addEEnumLiteral(originTypeEEnum, OriginType.TEMPLATE_LITERAL);
+		addEEnumLiteral(originTypeEEnum, OriginType.SOURCE_LITERAL);
+
+		initEEnum(reoptTypeEEnum, ReoptType.class, "ReoptType"); //$NON-NLS-1$
+		addEEnumLiteral(reoptTypeEEnum, ReoptType.NONE_LITERAL);
+		addEEnumLiteral(reoptTypeEEnum, ReoptType.ONCE_LITERAL);
+		addEEnumLiteral(reoptTypeEEnum, ReoptType.ALWAYS_LITERAL);
+		addEEnumLiteral(reoptTypeEEnum, ReoptType.AUTO_LITERAL);
+
+		initEEnum(sourceDialectEEnum, SourceDialect.class, "SourceDialect"); //$NON-NLS-1$
+		addEEnumLiteral(sourceDialectEEnum, SourceDialect.UNKNOWN_LITERAL);
+		addEEnumLiteral(sourceDialectEEnum, SourceDialect.PLSQL_LITERAL);
+		addEEnumLiteral(sourceDialectEEnum, SourceDialect.DB2SQLPL_LITERAL);
+
+		initEEnum(db2PeriodTypeEEnum, DB2PeriodType.class, "DB2PeriodType"); //$NON-NLS-1$
+		addEEnumLiteral(db2PeriodTypeEEnum, DB2PeriodType.SYSTEM_TIME_LITERAL);
+		addEEnumLiteral(db2PeriodTypeEEnum, DB2PeriodType.BUSINESS_TIME_LITERAL);
+
+		initEEnum(db2TableOrganizationEEnum, DB2TableOrganization.class, "DB2TableOrganization"); //$NON-NLS-1$
+		addEEnumLiteral(db2TableOrganizationEEnum, DB2TableOrganization.UNSPECIFIED_LITERAL);
+		addEEnumLiteral(db2TableOrganizationEEnum, DB2TableOrganization.ROW_LITERAL);
+		addEEnumLiteral(db2TableOrganizationEEnum, DB2TableOrganization.COLUMN_LITERAL);
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //DB2ModelPackageImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2MultidimensionalIndexImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2MultidimensionalIndexImpl.java
new file mode 100644
index 0000000..c7f71d6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2MultidimensionalIndexImpl.java
@@ -0,0 +1,159 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.modelbase.sql.constraints.impl.IndexImpl;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Index;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2MultidimensionalIndex;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 Multidimensional Index</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2MultidimensionalIndexImpl#getDimensionIndexes <em>Dimension Indexes</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2MultidimensionalIndexImpl extends IndexImpl implements DB2MultidimensionalIndex {
+	/**
+	 * The cached value of the '{@link #getDimensionIndexes() <em>Dimension Indexes</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDimensionIndexes()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList dimensionIndexes;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2MultidimensionalIndexImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_MULTIDIMENSIONAL_INDEX;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getDimensionIndexes() {
+		if (dimensionIndexes == null) {
+			dimensionIndexes = new EObjectWithInverseResolvingEList(DB2Index.class, this, DB2ModelPackage.DB2_MULTIDIMENSIONAL_INDEX__DIMENSION_INDEXES, DB2ModelPackage.DB2_INDEX__DB2_MULTIDIMENSIONAL_INDEX);
+		}
+		return dimensionIndexes;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_MULTIDIMENSIONAL_INDEX__DIMENSION_INDEXES:
+				return ((InternalEList)getDimensionIndexes()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_MULTIDIMENSIONAL_INDEX__DIMENSION_INDEXES:
+				return ((InternalEList)getDimensionIndexes()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_MULTIDIMENSIONAL_INDEX__DIMENSION_INDEXES:
+				return getDimensionIndexes();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_MULTIDIMENSIONAL_INDEX__DIMENSION_INDEXES:
+				getDimensionIndexes().clear();
+				getDimensionIndexes().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_MULTIDIMENSIONAL_INDEX__DIMENSION_INDEXES:
+				getDimensionIndexes().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_MULTIDIMENSIONAL_INDEX__DIMENSION_INDEXES:
+				return dimensionIndexes != null && !dimensionIndexes.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //DB2MultidimensionalIndexImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2OLAPObjectImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2OLAPObjectImpl.java
new file mode 100644
index 0000000..a4b88df
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2OLAPObjectImpl.java
@@ -0,0 +1,205 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: DB2OLAPObjectImpl.java,v 1.11 2008/02/05 02:01:23 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2OLAPObject;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2OLAP Object</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2OLAPObjectImpl#getSchema <em>Schema</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2OLAPObjectImpl extends SQLObjectImpl implements DB2OLAPObject {
+	/**
+	 * The cached value of the '{@link #getSchema() <em>Schema</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSchema()
+	 * @generated
+	 * @ordered
+	 */
+	protected DB2Schema schema;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2OLAPObjectImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2OLAP_OBJECT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Schema getSchema() {
+		if (schema != null && schema.eIsProxy()) {
+			InternalEObject oldSchema = (InternalEObject)schema;
+			schema = (DB2Schema)eResolveProxy(oldSchema);
+			if (schema != oldSchema) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DB2ModelPackage.DB2OLAP_OBJECT__SCHEMA, oldSchema, schema));
+			}
+		}
+		return schema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Schema basicGetSchema() {
+		return schema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetSchema(DB2Schema newSchema, NotificationChain msgs) {
+		DB2Schema oldSchema = schema;
+		schema = newSchema;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2OLAP_OBJECT__SCHEMA, oldSchema, newSchema);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSchema(DB2Schema newSchema) {
+		if (newSchema != schema) {
+			NotificationChain msgs = null;
+			if (schema != null)
+				msgs = ((InternalEObject)schema).eInverseRemove(this, DB2ModelPackage.DB2_SCHEMA__OLAP_OBJECTS, DB2Schema.class, msgs);
+			if (newSchema != null)
+				msgs = ((InternalEObject)newSchema).eInverseAdd(this, DB2ModelPackage.DB2_SCHEMA__OLAP_OBJECTS, DB2Schema.class, msgs);
+			msgs = basicSetSchema(newSchema, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2OLAP_OBJECT__SCHEMA, newSchema, newSchema));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2OLAP_OBJECT__SCHEMA:
+				if (schema != null)
+					msgs = ((InternalEObject)schema).eInverseRemove(this, DB2ModelPackage.DB2_SCHEMA__OLAP_OBJECTS, DB2Schema.class, msgs);
+				return basicSetSchema((DB2Schema)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2OLAP_OBJECT__SCHEMA:
+				return basicSetSchema(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2OLAP_OBJECT__SCHEMA:
+				if (resolve) return getSchema();
+				return basicGetSchema();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2OLAP_OBJECT__SCHEMA:
+				setSchema((DB2Schema)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2OLAP_OBJECT__SCHEMA:
+				setSchema((DB2Schema)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2OLAP_OBJECT__SCHEMA:
+				return schema != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //DB2OLAPObjectImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2PackageImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2PackageImpl.java
new file mode 100644
index 0000000..2fee43b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2PackageImpl.java
@@ -0,0 +1,750 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Package;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2PackageStatement;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema;
+import org.eclipse.datatools.enablement.ibm.db2.model.IsolationLevelType;
+import org.eclipse.datatools.enablement.ibm.db2.model.ReoptType;
+import java.util.Collection;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 Package</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PackageImpl#isOperative <em>Operative</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PackageImpl#getValid <em>Valid</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PackageImpl#getVersion <em>Version</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PackageImpl#getDefaultSchema <em>Default Schema</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PackageImpl#getSqlPath <em>Sql Path</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PackageImpl#getReoptVar <em>Reopt Var</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PackageImpl#getIsolation <em>Isolation</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PackageImpl#getUniqueID <em>Unique ID</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PackageImpl#getLastBindTS <em>Last Bind TS</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PackageImpl#getSchema <em>Schema</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PackageImpl#getStatements <em>Statements</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2PackageImpl extends SQLObjectImpl implements DB2Package {
+	/**
+	 * The default value of the '{@link #isOperative() <em>Operative</em>}' attribute.
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @see #isOperative()
+	 * @generated
+	 * @ordered
+	 */
+    protected static final boolean OPERATIVE_EDEFAULT = true;
+
+	/**
+	 * The cached value of the '{@link #isOperative() <em>Operative</em>}' attribute.
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @see #isOperative()
+	 * @generated
+	 * @ordered
+	 */
+    protected boolean operative = OPERATIVE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getValid() <em>Valid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValid()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String VALID_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getValid() <em>Valid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValid()
+	 * @generated
+	 * @ordered
+	 */
+	protected String valid = VALID_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getVersion() <em>Version</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getVersion()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String VERSION_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getVersion() <em>Version</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getVersion()
+	 * @generated
+	 * @ordered
+	 */
+	protected String version = VERSION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getDefaultSchema() <em>Default Schema</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDefaultSchema()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String DEFAULT_SCHEMA_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getDefaultSchema() <em>Default Schema</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDefaultSchema()
+	 * @generated
+	 * @ordered
+	 */
+	protected String defaultSchema = DEFAULT_SCHEMA_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getSqlPath() <em>Sql Path</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSqlPath()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String SQL_PATH_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getSqlPath() <em>Sql Path</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSqlPath()
+	 * @generated
+	 * @ordered
+	 */
+	protected String sqlPath = SQL_PATH_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getReoptVar() <em>Reopt Var</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getReoptVar()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final ReoptType REOPT_VAR_EDEFAULT = ReoptType.NONE_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getReoptVar() <em>Reopt Var</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getReoptVar()
+	 * @generated
+	 * @ordered
+	 */
+	protected ReoptType reoptVar = REOPT_VAR_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getIsolation() <em>Isolation</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIsolation()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final IsolationLevelType ISOLATION_EDEFAULT = IsolationLevelType.REPEATABLE_READ_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getIsolation() <em>Isolation</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIsolation()
+	 * @generated
+	 * @ordered
+	 */
+	protected IsolationLevelType isolation = ISOLATION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getUniqueID() <em>Unique ID</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUniqueID()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String UNIQUE_ID_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getUniqueID() <em>Unique ID</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUniqueID()
+	 * @generated
+	 * @ordered
+	 */
+	protected String uniqueID = UNIQUE_ID_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getLastBindTS() <em>Last Bind TS</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLastBindTS()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String LAST_BIND_TS_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getLastBindTS() <em>Last Bind TS</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLastBindTS()
+	 * @generated
+	 * @ordered
+	 */
+	protected String lastBindTS = LAST_BIND_TS_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getSchema() <em>Schema</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSchema()
+	 * @generated
+	 * @ordered
+	 */
+	protected DB2Schema schema;
+
+	/**
+	 * The cached value of the '{@link #getStatements() <em>Statements</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getStatements()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList statements;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2PackageImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_PACKAGE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @generated
+	 */
+    public boolean isOperative() {
+		return operative;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @generated
+	 */
+    public void setOperative(boolean newOperative) {
+		boolean oldOperative = operative;
+		operative = newOperative;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PACKAGE__OPERATIVE, oldOperative, operative));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getValid() {
+		return valid;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setValid(String newValid) {
+		String oldValid = valid;
+		valid = newValid;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PACKAGE__VALID, oldValid, valid));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getVersion() {
+		return version;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setVersion(String newVersion) {
+		String oldVersion = version;
+		version = newVersion;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PACKAGE__VERSION, oldVersion, version));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getDefaultSchema() {
+		return defaultSchema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDefaultSchema(String newDefaultSchema) {
+		String oldDefaultSchema = defaultSchema;
+		defaultSchema = newDefaultSchema;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PACKAGE__DEFAULT_SCHEMA, oldDefaultSchema, defaultSchema));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getSqlPath() {
+		return sqlPath;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSqlPath(String newSqlPath) {
+		String oldSqlPath = sqlPath;
+		sqlPath = newSqlPath;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PACKAGE__SQL_PATH, oldSqlPath, sqlPath));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ReoptType getReoptVar() {
+		return reoptVar;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setReoptVar(ReoptType newReoptVar) {
+		ReoptType oldReoptVar = reoptVar;
+		reoptVar = newReoptVar == null ? REOPT_VAR_EDEFAULT : newReoptVar;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PACKAGE__REOPT_VAR, oldReoptVar, reoptVar));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IsolationLevelType getIsolation() {
+		return isolation;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIsolation(IsolationLevelType newIsolation) {
+		IsolationLevelType oldIsolation = isolation;
+		isolation = newIsolation == null ? ISOLATION_EDEFAULT : newIsolation;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PACKAGE__ISOLATION, oldIsolation, isolation));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getUniqueID() {
+		return uniqueID;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setUniqueID(String newUniqueID) {
+		String oldUniqueID = uniqueID;
+		uniqueID = newUniqueID;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PACKAGE__UNIQUE_ID, oldUniqueID, uniqueID));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getLastBindTS() {
+		return lastBindTS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLastBindTS(String newLastBindTS) {
+		String oldLastBindTS = lastBindTS;
+		lastBindTS = newLastBindTS;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PACKAGE__LAST_BIND_TS, oldLastBindTS, lastBindTS));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Schema getSchema() {
+		if (schema != null && schema.eIsProxy()) {
+			InternalEObject oldSchema = (InternalEObject)schema;
+			schema = (DB2Schema)eResolveProxy(oldSchema);
+			if (schema != oldSchema) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DB2ModelPackage.DB2_PACKAGE__SCHEMA, oldSchema, schema));
+			}
+		}
+		return schema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Schema basicGetSchema() {
+		return schema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetSchema(DB2Schema newSchema, NotificationChain msgs) {
+		DB2Schema oldSchema = schema;
+		schema = newSchema;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PACKAGE__SCHEMA, oldSchema, newSchema);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSchema(DB2Schema newSchema) {
+		if (newSchema != schema) {
+			NotificationChain msgs = null;
+			if (schema != null)
+				msgs = ((InternalEObject)schema).eInverseRemove(this, DB2ModelPackage.DB2_SCHEMA__PACKAGES, DB2Schema.class, msgs);
+			if (newSchema != null)
+				msgs = ((InternalEObject)newSchema).eInverseAdd(this, DB2ModelPackage.DB2_SCHEMA__PACKAGES, DB2Schema.class, msgs);
+			msgs = basicSetSchema(newSchema, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PACKAGE__SCHEMA, newSchema, newSchema));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getStatements() {
+		if (statements == null) {
+			statements = new EObjectContainmentWithInverseEList(DB2PackageStatement.class, this, DB2ModelPackage.DB2_PACKAGE__STATEMENTS, DB2ModelPackage.DB2_PACKAGE_STATEMENT__PACKAGE);
+		}
+		return statements;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PACKAGE__SCHEMA:
+				if (schema != null)
+					msgs = ((InternalEObject)schema).eInverseRemove(this, DB2ModelPackage.DB2_SCHEMA__PACKAGES, DB2Schema.class, msgs);
+				return basicSetSchema((DB2Schema)otherEnd, msgs);
+			case DB2ModelPackage.DB2_PACKAGE__STATEMENTS:
+				return ((InternalEList)getStatements()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PACKAGE__SCHEMA:
+				return basicSetSchema(null, msgs);
+			case DB2ModelPackage.DB2_PACKAGE__STATEMENTS:
+				return ((InternalEList)getStatements()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PACKAGE__OPERATIVE:
+				return isOperative() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_PACKAGE__VALID:
+				return getValid();
+			case DB2ModelPackage.DB2_PACKAGE__VERSION:
+				return getVersion();
+			case DB2ModelPackage.DB2_PACKAGE__DEFAULT_SCHEMA:
+				return getDefaultSchema();
+			case DB2ModelPackage.DB2_PACKAGE__SQL_PATH:
+				return getSqlPath();
+			case DB2ModelPackage.DB2_PACKAGE__REOPT_VAR:
+				return getReoptVar();
+			case DB2ModelPackage.DB2_PACKAGE__ISOLATION:
+				return getIsolation();
+			case DB2ModelPackage.DB2_PACKAGE__UNIQUE_ID:
+				return getUniqueID();
+			case DB2ModelPackage.DB2_PACKAGE__LAST_BIND_TS:
+				return getLastBindTS();
+			case DB2ModelPackage.DB2_PACKAGE__SCHEMA:
+				if (resolve) return getSchema();
+				return basicGetSchema();
+			case DB2ModelPackage.DB2_PACKAGE__STATEMENTS:
+				return getStatements();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PACKAGE__OPERATIVE:
+				setOperative(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_PACKAGE__VALID:
+				setValid((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_PACKAGE__VERSION:
+				setVersion((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_PACKAGE__DEFAULT_SCHEMA:
+				setDefaultSchema((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_PACKAGE__SQL_PATH:
+				setSqlPath((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_PACKAGE__REOPT_VAR:
+				setReoptVar((ReoptType)newValue);
+				return;
+			case DB2ModelPackage.DB2_PACKAGE__ISOLATION:
+				setIsolation((IsolationLevelType)newValue);
+				return;
+			case DB2ModelPackage.DB2_PACKAGE__UNIQUE_ID:
+				setUniqueID((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_PACKAGE__LAST_BIND_TS:
+				setLastBindTS((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_PACKAGE__SCHEMA:
+				setSchema((DB2Schema)newValue);
+				return;
+			case DB2ModelPackage.DB2_PACKAGE__STATEMENTS:
+				getStatements().clear();
+				getStatements().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PACKAGE__OPERATIVE:
+				setOperative(OPERATIVE_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PACKAGE__VALID:
+				setValid(VALID_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PACKAGE__VERSION:
+				setVersion(VERSION_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PACKAGE__DEFAULT_SCHEMA:
+				setDefaultSchema(DEFAULT_SCHEMA_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PACKAGE__SQL_PATH:
+				setSqlPath(SQL_PATH_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PACKAGE__REOPT_VAR:
+				setReoptVar(REOPT_VAR_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PACKAGE__ISOLATION:
+				setIsolation(ISOLATION_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PACKAGE__UNIQUE_ID:
+				setUniqueID(UNIQUE_ID_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PACKAGE__LAST_BIND_TS:
+				setLastBindTS(LAST_BIND_TS_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PACKAGE__SCHEMA:
+				setSchema((DB2Schema)null);
+				return;
+			case DB2ModelPackage.DB2_PACKAGE__STATEMENTS:
+				getStatements().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PACKAGE__OPERATIVE:
+				return operative != OPERATIVE_EDEFAULT;
+			case DB2ModelPackage.DB2_PACKAGE__VALID:
+				return VALID_EDEFAULT == null ? valid != null : !VALID_EDEFAULT.equals(valid);
+			case DB2ModelPackage.DB2_PACKAGE__VERSION:
+				return VERSION_EDEFAULT == null ? version != null : !VERSION_EDEFAULT.equals(version);
+			case DB2ModelPackage.DB2_PACKAGE__DEFAULT_SCHEMA:
+				return DEFAULT_SCHEMA_EDEFAULT == null ? defaultSchema != null : !DEFAULT_SCHEMA_EDEFAULT.equals(defaultSchema);
+			case DB2ModelPackage.DB2_PACKAGE__SQL_PATH:
+				return SQL_PATH_EDEFAULT == null ? sqlPath != null : !SQL_PATH_EDEFAULT.equals(sqlPath);
+			case DB2ModelPackage.DB2_PACKAGE__REOPT_VAR:
+				return reoptVar != REOPT_VAR_EDEFAULT;
+			case DB2ModelPackage.DB2_PACKAGE__ISOLATION:
+				return isolation != ISOLATION_EDEFAULT;
+			case DB2ModelPackage.DB2_PACKAGE__UNIQUE_ID:
+				return UNIQUE_ID_EDEFAULT == null ? uniqueID != null : !UNIQUE_ID_EDEFAULT.equals(uniqueID);
+			case DB2ModelPackage.DB2_PACKAGE__LAST_BIND_TS:
+				return LAST_BIND_TS_EDEFAULT == null ? lastBindTS != null : !LAST_BIND_TS_EDEFAULT.equals(lastBindTS);
+			case DB2ModelPackage.DB2_PACKAGE__SCHEMA:
+				return schema != null;
+			case DB2ModelPackage.DB2_PACKAGE__STATEMENTS:
+				return statements != null && !statements.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+	 * @generated
+	 */
+    public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (operative: "); //$NON-NLS-1$
+		result.append(operative);
+		result.append(", valid: "); //$NON-NLS-1$
+		result.append(valid);
+		result.append(", version: "); //$NON-NLS-1$
+		result.append(version);
+		result.append(", defaultSchema: "); //$NON-NLS-1$
+		result.append(defaultSchema);
+		result.append(", sqlPath: "); //$NON-NLS-1$
+		result.append(sqlPath);
+		result.append(", reoptVar: "); //$NON-NLS-1$
+		result.append(reoptVar);
+		result.append(", isolation: "); //$NON-NLS-1$
+		result.append(isolation);
+		result.append(", uniqueID: "); //$NON-NLS-1$
+		result.append(uniqueID);
+		result.append(", lastBindTS: "); //$NON-NLS-1$
+		result.append(lastBindTS);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DB2PackageImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2PackageStatementImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2PackageStatementImpl.java
new file mode 100644
index 0000000..6c8ab92
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2PackageStatementImpl.java
@@ -0,0 +1,382 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: DB2PackageStatementImpl.java,v 1.1 2008/06/10 20:19:39 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Package;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2PackageStatement;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+
+import org.eclipse.datatools.modelbase.sql.statements.SQLStatement;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 Package Statement</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PackageStatementImpl#getStatementNumber <em>Statement Number</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PackageStatementImpl#getSectionNumber <em>Section Number</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PackageStatementImpl#getPackage <em>Package</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PackageStatementImpl#getSqlStatement <em>Sql Statement</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2PackageStatementImpl extends SQLObjectImpl implements DB2PackageStatement {
+	/**
+	 * The default value of the '{@link #getStatementNumber() <em>Statement Number</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getStatementNumber()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int STATEMENT_NUMBER_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getStatementNumber() <em>Statement Number</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getStatementNumber()
+	 * @generated
+	 * @ordered
+	 */
+	protected int statementNumber = STATEMENT_NUMBER_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getSectionNumber() <em>Section Number</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSectionNumber()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int SECTION_NUMBER_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getSectionNumber() <em>Section Number</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSectionNumber()
+	 * @generated
+	 * @ordered
+	 */
+	protected int sectionNumber = SECTION_NUMBER_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getSqlStatement() <em>Sql Statement</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSqlStatement()
+	 * @generated
+	 * @ordered
+	 */
+	protected SQLStatement sqlStatement;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2PackageStatementImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_PACKAGE_STATEMENT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getStatementNumber() {
+		return statementNumber;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStatementNumber(int newStatementNumber) {
+		int oldStatementNumber = statementNumber;
+		statementNumber = newStatementNumber;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PACKAGE_STATEMENT__STATEMENT_NUMBER, oldStatementNumber, statementNumber));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getSectionNumber() {
+		return sectionNumber;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSectionNumber(int newSectionNumber) {
+		int oldSectionNumber = sectionNumber;
+		sectionNumber = newSectionNumber;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PACKAGE_STATEMENT__SECTION_NUMBER, oldSectionNumber, sectionNumber));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Package getPackage() {
+		if (eContainerFeatureID() != DB2ModelPackage.DB2_PACKAGE_STATEMENT__PACKAGE) return null;
+		return (DB2Package)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetPackage(DB2Package newPackage, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newPackage, DB2ModelPackage.DB2_PACKAGE_STATEMENT__PACKAGE, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPackage(DB2Package newPackage) {
+		if (newPackage != eInternalContainer() || (eContainerFeatureID() != DB2ModelPackage.DB2_PACKAGE_STATEMENT__PACKAGE && newPackage != null)) {
+			if (EcoreUtil.isAncestor(this, newPackage))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newPackage != null)
+				msgs = ((InternalEObject)newPackage).eInverseAdd(this, DB2ModelPackage.DB2_PACKAGE__STATEMENTS, DB2Package.class, msgs);
+			msgs = basicSetPackage(newPackage, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PACKAGE_STATEMENT__PACKAGE, newPackage, newPackage));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SQLStatement getSqlStatement() {
+		return sqlStatement;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetSqlStatement(SQLStatement newSqlStatement, NotificationChain msgs) {
+		SQLStatement oldSqlStatement = sqlStatement;
+		sqlStatement = newSqlStatement;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PACKAGE_STATEMENT__SQL_STATEMENT, oldSqlStatement, newSqlStatement);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSqlStatement(SQLStatement newSqlStatement) {
+		if (newSqlStatement != sqlStatement) {
+			NotificationChain msgs = null;
+			if (sqlStatement != null)
+				msgs = ((InternalEObject)sqlStatement).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - DB2ModelPackage.DB2_PACKAGE_STATEMENT__SQL_STATEMENT, null, msgs);
+			if (newSqlStatement != null)
+				msgs = ((InternalEObject)newSqlStatement).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - DB2ModelPackage.DB2_PACKAGE_STATEMENT__SQL_STATEMENT, null, msgs);
+			msgs = basicSetSqlStatement(newSqlStatement, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PACKAGE_STATEMENT__SQL_STATEMENT, newSqlStatement, newSqlStatement));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PACKAGE_STATEMENT__PACKAGE:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetPackage((DB2Package)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PACKAGE_STATEMENT__PACKAGE:
+				return basicSetPackage(null, msgs);
+			case DB2ModelPackage.DB2_PACKAGE_STATEMENT__SQL_STATEMENT:
+				return basicSetSqlStatement(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case DB2ModelPackage.DB2_PACKAGE_STATEMENT__PACKAGE:
+				return eInternalContainer().eInverseRemove(this, DB2ModelPackage.DB2_PACKAGE__STATEMENTS, DB2Package.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PACKAGE_STATEMENT__STATEMENT_NUMBER:
+				return new Integer(getStatementNumber());
+			case DB2ModelPackage.DB2_PACKAGE_STATEMENT__SECTION_NUMBER:
+				return new Integer(getSectionNumber());
+			case DB2ModelPackage.DB2_PACKAGE_STATEMENT__PACKAGE:
+				return getPackage();
+			case DB2ModelPackage.DB2_PACKAGE_STATEMENT__SQL_STATEMENT:
+				return getSqlStatement();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PACKAGE_STATEMENT__STATEMENT_NUMBER:
+				setStatementNumber(((Integer)newValue).intValue());
+				return;
+			case DB2ModelPackage.DB2_PACKAGE_STATEMENT__SECTION_NUMBER:
+				setSectionNumber(((Integer)newValue).intValue());
+				return;
+			case DB2ModelPackage.DB2_PACKAGE_STATEMENT__PACKAGE:
+				setPackage((DB2Package)newValue);
+				return;
+			case DB2ModelPackage.DB2_PACKAGE_STATEMENT__SQL_STATEMENT:
+				setSqlStatement((SQLStatement)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PACKAGE_STATEMENT__STATEMENT_NUMBER:
+				setStatementNumber(STATEMENT_NUMBER_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PACKAGE_STATEMENT__SECTION_NUMBER:
+				setSectionNumber(SECTION_NUMBER_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PACKAGE_STATEMENT__PACKAGE:
+				setPackage((DB2Package)null);
+				return;
+			case DB2ModelPackage.DB2_PACKAGE_STATEMENT__SQL_STATEMENT:
+				setSqlStatement((SQLStatement)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PACKAGE_STATEMENT__STATEMENT_NUMBER:
+				return statementNumber != STATEMENT_NUMBER_EDEFAULT;
+			case DB2ModelPackage.DB2_PACKAGE_STATEMENT__SECTION_NUMBER:
+				return sectionNumber != SECTION_NUMBER_EDEFAULT;
+			case DB2ModelPackage.DB2_PACKAGE_STATEMENT__PACKAGE:
+				return getPackage() != null;
+			case DB2ModelPackage.DB2_PACKAGE_STATEMENT__SQL_STATEMENT:
+				return sqlStatement != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (statementNumber: "); //$NON-NLS-1$
+		result.append(statementNumber);
+		result.append(", sectionNumber: "); //$NON-NLS-1$
+		result.append(sectionNumber);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DB2PackageStatementImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2PeriodImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2PeriodImpl.java
new file mode 100644
index 0000000..f860453
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2PeriodImpl.java
@@ -0,0 +1,437 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Column;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Period;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2PeriodType;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Table;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 Period</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PeriodImpl#getType <em>Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PeriodImpl#getBeginColumn <em>Begin Column</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PeriodImpl#getEndColumn <em>End Column</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PeriodImpl#getTable <em>Table</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2PeriodImpl extends EObjectImpl implements DB2Period {
+	/**
+	 * The default value of the '{@link #getType() <em>Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getType()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final DB2PeriodType TYPE_EDEFAULT = DB2PeriodType.SYSTEM_TIME_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getType() <em>Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getType()
+	 * @generated
+	 * @ordered
+	 */
+	protected DB2PeriodType type = TYPE_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getBeginColumn() <em>Begin Column</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBeginColumn()
+	 * @generated
+	 * @ordered
+	 */
+	protected DB2Column beginColumn;
+
+	/**
+	 * The cached value of the '{@link #getEndColumn() <em>End Column</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getEndColumn()
+	 * @generated
+	 * @ordered
+	 */
+	protected DB2Column endColumn;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2PeriodImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_PERIOD;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2PeriodType getType() {
+		return type;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setType(DB2PeriodType newType) {
+		DB2PeriodType oldType = type;
+		type = newType == null ? TYPE_EDEFAULT : newType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PERIOD__TYPE, oldType, type));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Column getBeginColumn() {
+		if (beginColumn != null && beginColumn.eIsProxy()) {
+			InternalEObject oldBeginColumn = (InternalEObject)beginColumn;
+			beginColumn = (DB2Column)eResolveProxy(oldBeginColumn);
+			if (beginColumn != oldBeginColumn) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DB2ModelPackage.DB2_PERIOD__BEGIN_COLUMN, oldBeginColumn, beginColumn));
+			}
+		}
+		return beginColumn;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Column basicGetBeginColumn() {
+		return beginColumn;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetBeginColumn(DB2Column newBeginColumn, NotificationChain msgs) {
+		DB2Column oldBeginColumn = beginColumn;
+		beginColumn = newBeginColumn;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PERIOD__BEGIN_COLUMN, oldBeginColumn, newBeginColumn);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBeginColumn(DB2Column newBeginColumn) {
+		if (newBeginColumn != beginColumn) {
+			NotificationChain msgs = null;
+			if (beginColumn != null)
+				msgs = ((InternalEObject)beginColumn).eInverseRemove(this, DB2ModelPackage.DB2_COLUMN__BEGIN_PERIOD, DB2Column.class, msgs);
+			if (newBeginColumn != null)
+				msgs = ((InternalEObject)newBeginColumn).eInverseAdd(this, DB2ModelPackage.DB2_COLUMN__BEGIN_PERIOD, DB2Column.class, msgs);
+			msgs = basicSetBeginColumn(newBeginColumn, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PERIOD__BEGIN_COLUMN, newBeginColumn, newBeginColumn));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Column getEndColumn() {
+		if (endColumn != null && endColumn.eIsProxy()) {
+			InternalEObject oldEndColumn = (InternalEObject)endColumn;
+			endColumn = (DB2Column)eResolveProxy(oldEndColumn);
+			if (endColumn != oldEndColumn) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DB2ModelPackage.DB2_PERIOD__END_COLUMN, oldEndColumn, endColumn));
+			}
+		}
+		return endColumn;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Column basicGetEndColumn() {
+		return endColumn;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetEndColumn(DB2Column newEndColumn, NotificationChain msgs) {
+		DB2Column oldEndColumn = endColumn;
+		endColumn = newEndColumn;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PERIOD__END_COLUMN, oldEndColumn, newEndColumn);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setEndColumn(DB2Column newEndColumn) {
+		if (newEndColumn != endColumn) {
+			NotificationChain msgs = null;
+			if (endColumn != null)
+				msgs = ((InternalEObject)endColumn).eInverseRemove(this, DB2ModelPackage.DB2_COLUMN__END_PERIOD, DB2Column.class, msgs);
+			if (newEndColumn != null)
+				msgs = ((InternalEObject)newEndColumn).eInverseAdd(this, DB2ModelPackage.DB2_COLUMN__END_PERIOD, DB2Column.class, msgs);
+			msgs = basicSetEndColumn(newEndColumn, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PERIOD__END_COLUMN, newEndColumn, newEndColumn));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Table getTable() {
+		if (eContainerFeatureID() != DB2ModelPackage.DB2_PERIOD__TABLE) return null;
+		return (DB2Table)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetTable(DB2Table newTable, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newTable, DB2ModelPackage.DB2_PERIOD__TABLE, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTable(DB2Table newTable) {
+		if (newTable != eInternalContainer() || (eContainerFeatureID() != DB2ModelPackage.DB2_PERIOD__TABLE && newTable != null)) {
+			if (EcoreUtil.isAncestor(this, newTable))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newTable != null)
+				msgs = ((InternalEObject)newTable).eInverseAdd(this, DB2ModelPackage.DB2_TABLE__PERIODS, DB2Table.class, msgs);
+			msgs = basicSetTable(newTable, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PERIOD__TABLE, newTable, newTable));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PERIOD__BEGIN_COLUMN:
+				if (beginColumn != null)
+					msgs = ((InternalEObject)beginColumn).eInverseRemove(this, DB2ModelPackage.DB2_COLUMN__BEGIN_PERIOD, DB2Column.class, msgs);
+				return basicSetBeginColumn((DB2Column)otherEnd, msgs);
+			case DB2ModelPackage.DB2_PERIOD__END_COLUMN:
+				if (endColumn != null)
+					msgs = ((InternalEObject)endColumn).eInverseRemove(this, DB2ModelPackage.DB2_COLUMN__END_PERIOD, DB2Column.class, msgs);
+				return basicSetEndColumn((DB2Column)otherEnd, msgs);
+			case DB2ModelPackage.DB2_PERIOD__TABLE:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetTable((DB2Table)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PERIOD__BEGIN_COLUMN:
+				return basicSetBeginColumn(null, msgs);
+			case DB2ModelPackage.DB2_PERIOD__END_COLUMN:
+				return basicSetEndColumn(null, msgs);
+			case DB2ModelPackage.DB2_PERIOD__TABLE:
+				return basicSetTable(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case DB2ModelPackage.DB2_PERIOD__TABLE:
+				return eInternalContainer().eInverseRemove(this, DB2ModelPackage.DB2_TABLE__PERIODS, DB2Table.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PERIOD__TYPE:
+				return getType();
+			case DB2ModelPackage.DB2_PERIOD__BEGIN_COLUMN:
+				if (resolve) return getBeginColumn();
+				return basicGetBeginColumn();
+			case DB2ModelPackage.DB2_PERIOD__END_COLUMN:
+				if (resolve) return getEndColumn();
+				return basicGetEndColumn();
+			case DB2ModelPackage.DB2_PERIOD__TABLE:
+				return getTable();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PERIOD__TYPE:
+				setType((DB2PeriodType)newValue);
+				return;
+			case DB2ModelPackage.DB2_PERIOD__BEGIN_COLUMN:
+				setBeginColumn((DB2Column)newValue);
+				return;
+			case DB2ModelPackage.DB2_PERIOD__END_COLUMN:
+				setEndColumn((DB2Column)newValue);
+				return;
+			case DB2ModelPackage.DB2_PERIOD__TABLE:
+				setTable((DB2Table)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PERIOD__TYPE:
+				setType(TYPE_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PERIOD__BEGIN_COLUMN:
+				setBeginColumn((DB2Column)null);
+				return;
+			case DB2ModelPackage.DB2_PERIOD__END_COLUMN:
+				setEndColumn((DB2Column)null);
+				return;
+			case DB2ModelPackage.DB2_PERIOD__TABLE:
+				setTable((DB2Table)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PERIOD__TYPE:
+				return type != TYPE_EDEFAULT;
+			case DB2ModelPackage.DB2_PERIOD__BEGIN_COLUMN:
+				return beginColumn != null;
+			case DB2ModelPackage.DB2_PERIOD__END_COLUMN:
+				return endColumn != null;
+			case DB2ModelPackage.DB2_PERIOD__TABLE:
+				return getTable() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (type: "); //$NON-NLS-1$
+		result.append(type);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DB2PeriodImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2PermissionImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2PermissionImpl.java
new file mode 100644
index 0000000..681b865
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2PermissionImpl.java
@@ -0,0 +1,575 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2MaterializedQueryTable;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Table;
+
+import org.eclipse.datatools.modelbase.sql.expressions.QueryExpression;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 Permission</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PermissionImpl#getCorrelationName <em>Correlation Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PermissionImpl#getSearchCondition <em>Search Condition</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PermissionImpl#isEnable <em>Enable</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PermissionImpl#getSchema <em>Schema</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PermissionImpl#getSubjectTable <em>Subject Table</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2PermissionImpl#getSubjectMQT <em>Subject MQT</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2PermissionImpl extends SQLObjectImpl implements DB2Permission {
+	/**
+	 * The default value of the '{@link #getCorrelationName() <em>Correlation Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCorrelationName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String CORRELATION_NAME_EDEFAULT = null; //$NON-NLS-1$
+
+	/**
+	 * The cached value of the '{@link #getCorrelationName() <em>Correlation Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCorrelationName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String correlationName = CORRELATION_NAME_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getSearchCondition() <em>Search Condition</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSearchCondition()
+	 * @generated
+	 * @ordered
+	 */
+	protected QueryExpression searchCondition;
+
+	/**
+	 * The default value of the '{@link #isEnable() <em>Enable</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isEnable()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean ENABLE_EDEFAULT = true;
+
+	/**
+	 * The cached value of the '{@link #isEnable() <em>Enable</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isEnable()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean enable = ENABLE_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getSchema() <em>Schema</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSchema()
+	 * @generated
+	 * @ordered
+	 */
+	protected DB2Schema schema;
+
+	/**
+	 * The cached value of the '{@link #getSubjectTable() <em>Subject Table</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSubjectTable()
+	 * @generated
+	 * @ordered
+	 */
+	protected DB2Table subjectTable;
+
+	/**
+	 * The cached value of the '{@link #getSubjectMQT() <em>Subject MQT</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSubjectMQT()
+	 * @generated
+	 * @ordered
+	 */
+	protected DB2MaterializedQueryTable subjectMQT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2PermissionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_PERMISSION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getCorrelationName() {
+		return correlationName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCorrelationName(String newCorrelationName) {
+		String oldCorrelationName = correlationName;
+		correlationName = newCorrelationName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PERMISSION__CORRELATION_NAME, oldCorrelationName, correlationName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public QueryExpression getSearchCondition() {
+		return searchCondition;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetSearchCondition(QueryExpression newSearchCondition, NotificationChain msgs) {
+		QueryExpression oldSearchCondition = searchCondition;
+		searchCondition = newSearchCondition;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PERMISSION__SEARCH_CONDITION, oldSearchCondition, newSearchCondition);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSearchCondition(QueryExpression newSearchCondition) {
+		if (newSearchCondition != searchCondition) {
+			NotificationChain msgs = null;
+			if (searchCondition != null)
+				msgs = ((InternalEObject)searchCondition).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - DB2ModelPackage.DB2_PERMISSION__SEARCH_CONDITION, null, msgs);
+			if (newSearchCondition != null)
+				msgs = ((InternalEObject)newSearchCondition).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - DB2ModelPackage.DB2_PERMISSION__SEARCH_CONDITION, null, msgs);
+			msgs = basicSetSearchCondition(newSearchCondition, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PERMISSION__SEARCH_CONDITION, newSearchCondition, newSearchCondition));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isEnable() {
+		return enable;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setEnable(boolean newEnable) {
+		boolean oldEnable = enable;
+		enable = newEnable;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PERMISSION__ENABLE, oldEnable, enable));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Schema getSchema() {
+		if (schema != null && schema.eIsProxy()) {
+			InternalEObject oldSchema = (InternalEObject)schema;
+			schema = (DB2Schema)eResolveProxy(oldSchema);
+			if (schema != oldSchema) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DB2ModelPackage.DB2_PERMISSION__SCHEMA, oldSchema, schema));
+			}
+		}
+		return schema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Schema basicGetSchema() {
+		return schema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetSchema(DB2Schema newSchema, NotificationChain msgs) {
+		DB2Schema oldSchema = schema;
+		schema = newSchema;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PERMISSION__SCHEMA, oldSchema, newSchema);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSchema(DB2Schema newSchema) {
+		if (newSchema != schema) {
+			NotificationChain msgs = null;
+			if (schema != null)
+				msgs = ((InternalEObject)schema).eInverseRemove(this, DB2ModelPackage.DB2_SCHEMA__PERMISSIONS, DB2Schema.class, msgs);
+			if (newSchema != null)
+				msgs = ((InternalEObject)newSchema).eInverseAdd(this, DB2ModelPackage.DB2_SCHEMA__PERMISSIONS, DB2Schema.class, msgs);
+			msgs = basicSetSchema(newSchema, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PERMISSION__SCHEMA, newSchema, newSchema));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Table getSubjectTable() {
+		if (subjectTable != null && subjectTable.eIsProxy()) {
+			InternalEObject oldSubjectTable = (InternalEObject)subjectTable;
+			subjectTable = (DB2Table)eResolveProxy(oldSubjectTable);
+			if (subjectTable != oldSubjectTable) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DB2ModelPackage.DB2_PERMISSION__SUBJECT_TABLE, oldSubjectTable, subjectTable));
+			}
+		}
+		return subjectTable;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Table basicGetSubjectTable() {
+		return subjectTable;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetSubjectTable(DB2Table newSubjectTable, NotificationChain msgs) {
+		DB2Table oldSubjectTable = subjectTable;
+		subjectTable = newSubjectTable;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PERMISSION__SUBJECT_TABLE, oldSubjectTable, newSubjectTable);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSubjectTable(DB2Table newSubjectTable) {
+		if (newSubjectTable != subjectTable) {
+			NotificationChain msgs = null;
+			if (subjectTable != null)
+				msgs = ((InternalEObject)subjectTable).eInverseRemove(this, DB2ModelPackage.DB2_TABLE__PERMISSIONS, DB2Table.class, msgs);
+			if (newSubjectTable != null)
+				msgs = ((InternalEObject)newSubjectTable).eInverseAdd(this, DB2ModelPackage.DB2_TABLE__PERMISSIONS, DB2Table.class, msgs);
+			msgs = basicSetSubjectTable(newSubjectTable, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PERMISSION__SUBJECT_TABLE, newSubjectTable, newSubjectTable));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2MaterializedQueryTable getSubjectMQT() {
+		if (subjectMQT != null && subjectMQT.eIsProxy()) {
+			InternalEObject oldSubjectMQT = (InternalEObject)subjectMQT;
+			subjectMQT = (DB2MaterializedQueryTable)eResolveProxy(oldSubjectMQT);
+			if (subjectMQT != oldSubjectMQT) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DB2ModelPackage.DB2_PERMISSION__SUBJECT_MQT, oldSubjectMQT, subjectMQT));
+			}
+		}
+		return subjectMQT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2MaterializedQueryTable basicGetSubjectMQT() {
+		return subjectMQT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetSubjectMQT(DB2MaterializedQueryTable newSubjectMQT, NotificationChain msgs) {
+		DB2MaterializedQueryTable oldSubjectMQT = subjectMQT;
+		subjectMQT = newSubjectMQT;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PERMISSION__SUBJECT_MQT, oldSubjectMQT, newSubjectMQT);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSubjectMQT(DB2MaterializedQueryTable newSubjectMQT) {
+		if (newSubjectMQT != subjectMQT) {
+			NotificationChain msgs = null;
+			if (subjectMQT != null)
+				msgs = ((InternalEObject)subjectMQT).eInverseRemove(this, DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__PERMISSIONS, DB2MaterializedQueryTable.class, msgs);
+			if (newSubjectMQT != null)
+				msgs = ((InternalEObject)newSubjectMQT).eInverseAdd(this, DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__PERMISSIONS, DB2MaterializedQueryTable.class, msgs);
+			msgs = basicSetSubjectMQT(newSubjectMQT, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PERMISSION__SUBJECT_MQT, newSubjectMQT, newSubjectMQT));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PERMISSION__SCHEMA:
+				if (schema != null)
+					msgs = ((InternalEObject)schema).eInverseRemove(this, DB2ModelPackage.DB2_SCHEMA__PERMISSIONS, DB2Schema.class, msgs);
+				return basicSetSchema((DB2Schema)otherEnd, msgs);
+			case DB2ModelPackage.DB2_PERMISSION__SUBJECT_TABLE:
+				if (subjectTable != null)
+					msgs = ((InternalEObject)subjectTable).eInverseRemove(this, DB2ModelPackage.DB2_TABLE__PERMISSIONS, DB2Table.class, msgs);
+				return basicSetSubjectTable((DB2Table)otherEnd, msgs);
+			case DB2ModelPackage.DB2_PERMISSION__SUBJECT_MQT:
+				if (subjectMQT != null)
+					msgs = ((InternalEObject)subjectMQT).eInverseRemove(this, DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE__PERMISSIONS, DB2MaterializedQueryTable.class, msgs);
+				return basicSetSubjectMQT((DB2MaterializedQueryTable)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PERMISSION__SEARCH_CONDITION:
+				return basicSetSearchCondition(null, msgs);
+			case DB2ModelPackage.DB2_PERMISSION__SCHEMA:
+				return basicSetSchema(null, msgs);
+			case DB2ModelPackage.DB2_PERMISSION__SUBJECT_TABLE:
+				return basicSetSubjectTable(null, msgs);
+			case DB2ModelPackage.DB2_PERMISSION__SUBJECT_MQT:
+				return basicSetSubjectMQT(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PERMISSION__CORRELATION_NAME:
+				return getCorrelationName();
+			case DB2ModelPackage.DB2_PERMISSION__SEARCH_CONDITION:
+				return getSearchCondition();
+			case DB2ModelPackage.DB2_PERMISSION__ENABLE:
+				return isEnable() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_PERMISSION__SCHEMA:
+				if (resolve) return getSchema();
+				return basicGetSchema();
+			case DB2ModelPackage.DB2_PERMISSION__SUBJECT_TABLE:
+				if (resolve) return getSubjectTable();
+				return basicGetSubjectTable();
+			case DB2ModelPackage.DB2_PERMISSION__SUBJECT_MQT:
+				if (resolve) return getSubjectMQT();
+				return basicGetSubjectMQT();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PERMISSION__CORRELATION_NAME:
+				setCorrelationName((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_PERMISSION__SEARCH_CONDITION:
+				setSearchCondition((QueryExpression)newValue);
+				return;
+			case DB2ModelPackage.DB2_PERMISSION__ENABLE:
+				setEnable(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_PERMISSION__SCHEMA:
+				setSchema((DB2Schema)newValue);
+				return;
+			case DB2ModelPackage.DB2_PERMISSION__SUBJECT_TABLE:
+				setSubjectTable((DB2Table)newValue);
+				return;
+			case DB2ModelPackage.DB2_PERMISSION__SUBJECT_MQT:
+				setSubjectMQT((DB2MaterializedQueryTable)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PERMISSION__CORRELATION_NAME:
+				setCorrelationName(CORRELATION_NAME_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PERMISSION__SEARCH_CONDITION:
+				setSearchCondition((QueryExpression)null);
+				return;
+			case DB2ModelPackage.DB2_PERMISSION__ENABLE:
+				setEnable(ENABLE_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PERMISSION__SCHEMA:
+				setSchema((DB2Schema)null);
+				return;
+			case DB2ModelPackage.DB2_PERMISSION__SUBJECT_TABLE:
+				setSubjectTable((DB2Table)null);
+				return;
+			case DB2ModelPackage.DB2_PERMISSION__SUBJECT_MQT:
+				setSubjectMQT((DB2MaterializedQueryTable)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PERMISSION__CORRELATION_NAME:
+				return CORRELATION_NAME_EDEFAULT == null ? correlationName != null : !CORRELATION_NAME_EDEFAULT.equals(correlationName);
+			case DB2ModelPackage.DB2_PERMISSION__SEARCH_CONDITION:
+				return searchCondition != null;
+			case DB2ModelPackage.DB2_PERMISSION__ENABLE:
+				return enable != ENABLE_EDEFAULT;
+			case DB2ModelPackage.DB2_PERMISSION__SCHEMA:
+				return schema != null;
+			case DB2ModelPackage.DB2_PERMISSION__SUBJECT_TABLE:
+				return subjectTable != null;
+			case DB2ModelPackage.DB2_PERMISSION__SUBJECT_MQT:
+				return subjectMQT != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (correlationName: "); //$NON-NLS-1$
+		result.append(correlationName);
+		result.append(", enable: "); //$NON-NLS-1$
+		result.append(enable);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DB2PermissionImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2ProcedureDeployImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2ProcedureDeployImpl.java
new file mode 100644
index 0000000..d7c5e60
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2ProcedureDeployImpl.java
@@ -0,0 +1,159 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: DB2ProcedureDeployImpl.java,v 1.10 2008/01/29 00:04:55 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ProcedureDeploy;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 Procedure Deploy</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureDeployImpl#getFileName <em>File Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2ProcedureDeployImpl extends SQLObjectImpl implements DB2ProcedureDeploy {
+	/**
+	 * The default value of the '{@link #getFileName() <em>File Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFileName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String FILE_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getFileName() <em>File Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFileName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String fileName = FILE_NAME_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2ProcedureDeployImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_PROCEDURE_DEPLOY;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getFileName() {
+		return fileName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFileName(String newFileName) {
+		String oldFileName = fileName;
+		fileName = newFileName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PROCEDURE_DEPLOY__FILE_NAME, oldFileName, fileName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PROCEDURE_DEPLOY__FILE_NAME:
+				return getFileName();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PROCEDURE_DEPLOY__FILE_NAME:
+				setFileName((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PROCEDURE_DEPLOY__FILE_NAME:
+				setFileName(FILE_NAME_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PROCEDURE_DEPLOY__FILE_NAME:
+				return FILE_NAME_EDEFAULT == null ? fileName != null : !FILE_NAME_EDEFAULT.equals(fileName);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (fileName: "); //$NON-NLS-1$
+		result.append(fileName);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DB2ProcedureDeployImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2ProcedureImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2ProcedureImpl.java
new file mode 100644
index 0000000..558f22e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2ProcedureImpl.java
@@ -0,0 +1,1400 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.modelbase.sql.datatypes.IntegerDataType;
+import org.eclipse.datatools.modelbase.sql.routines.impl.ProcedureImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2AccessPlan;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2JavaOptions;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Procedure;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ProcedureDeploy;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2RoutineExtension;
+import org.eclipse.datatools.enablement.ibm.db2.model.SourceDialect;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 Procedure</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureImpl#getFenced <em>Fenced</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureImpl#getThreadsafe <em>Threadsafe</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureImpl#isDbInfo <em>Db Info</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureImpl#isImplicitSchema <em>Implicit Schema</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureImpl#isFederated <em>Federated</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureImpl#getParmCcsid <em>Parm Ccsid</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureImpl#getSpecialRegister <em>Special Register</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureImpl#getChangeState <em>Change State</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureImpl#getDebugId <em>Debug Id</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureImpl#getProgramType <em>Program Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureImpl#getOrigSchemaName <em>Orig Schema Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureImpl#getOrigParmSig <em>Orig Parm Sig</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureImpl#getExtendedOptions <em>Extended Options</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureImpl#getRoutineExtensions <em>Routine Extensions</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureImpl#isModelResultSets <em>Model Result Sets</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureImpl#isNullInput <em>Null Input</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureImpl#getVersion <em>Version</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureImpl#getDialect <em>Dialect</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureImpl#isExternalAction <em>External Action</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureImpl#getReturn <em>Return</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureImpl#getJavaOptions <em>Java Options</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ProcedureImpl#getDeploy <em>Deploy</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2ProcedureImpl extends ProcedureImpl implements DB2Procedure {
+	/**
+	 * The default value of the '{@link #getFenced() <em>Fenced</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFenced()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String FENCED_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getFenced() <em>Fenced</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFenced()
+	 * @generated
+	 * @ordered
+	 */
+	protected String fenced = FENCED_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getThreadsafe() <em>Threadsafe</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getThreadsafe()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String THREADSAFE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getThreadsafe() <em>Threadsafe</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getThreadsafe()
+	 * @generated
+	 * @ordered
+	 */
+	protected String threadsafe = THREADSAFE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isDbInfo() <em>Db Info</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDbInfo()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean DB_INFO_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isDbInfo() <em>Db Info</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDbInfo()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean dbInfo = DB_INFO_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isImplicitSchema() <em>Implicit Schema</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isImplicitSchema()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean IMPLICIT_SCHEMA_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isImplicitSchema() <em>Implicit Schema</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isImplicitSchema()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean implicitSchema = IMPLICIT_SCHEMA_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isFederated() <em>Federated</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isFederated()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean FEDERATED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isFederated() <em>Federated</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isFederated()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean federated = FEDERATED_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getParmCcsid() <em>Parm Ccsid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getParmCcsid()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String PARM_CCSID_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getParmCcsid() <em>Parm Ccsid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getParmCcsid()
+	 * @generated
+	 * @ordered
+	 */
+	protected String parmCcsid = PARM_CCSID_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getSpecialRegister() <em>Special Register</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSpecialRegister()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String SPECIAL_REGISTER_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getSpecialRegister() <em>Special Register</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSpecialRegister()
+	 * @generated
+	 * @ordered
+	 */
+	protected String specialRegister = SPECIAL_REGISTER_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getChangeState() <em>Change State</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getChangeState()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final int CHANGE_STATE_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getChangeState() <em>Change State</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getChangeState()
+	 * @generated
+	 * @ordered
+	 */
+   protected int changeState = CHANGE_STATE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getDebugId() <em>Debug Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getDebugId()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String DEBUG_ID_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getDebugId() <em>Debug Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getDebugId()
+	 * @generated
+	 * @ordered
+	 */
+   protected String debugId = DEBUG_ID_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getProgramType() <em>Program Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getProgramType()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String PROGRAM_TYPE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getProgramType() <em>Program Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getProgramType()
+	 * @generated
+	 * @ordered
+	 */
+   protected String programType = PROGRAM_TYPE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getOrigSchemaName() <em>Orig Schema Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getOrigSchemaName()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String ORIG_SCHEMA_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getOrigSchemaName() <em>Orig Schema Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getOrigSchemaName()
+	 * @generated
+	 * @ordered
+	 */
+   protected String origSchemaName = ORIG_SCHEMA_NAME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getOrigParmSig() <em>Orig Parm Sig</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getOrigParmSig()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String ORIG_PARM_SIG_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getOrigParmSig() <em>Orig Parm Sig</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getOrigParmSig()
+	 * @generated
+	 * @ordered
+	 */
+   protected String origParmSig = ORIG_PARM_SIG_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getExtendedOptions() <em>Extended Options</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getExtendedOptions()
+	 * @generated
+	 * @ordered
+	 */
+   protected EList extendedOptions;
+
+	/**
+	 * The cached value of the '{@link #getRoutineExtensions() <em>Routine Extensions</em>}' reference list.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getRoutineExtensions()
+	 * @generated
+	 * @ordered
+	 */
+   protected EList routineExtensions;
+
+	/**
+	 * The default value of the '{@link #isModelResultSets() <em>Model Result Sets</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isModelResultSets()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean MODEL_RESULT_SETS_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isModelResultSets() <em>Model Result Sets</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isModelResultSets()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean modelResultSets = MODEL_RESULT_SETS_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isNullInput() <em>Null Input</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #isNullInput()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final boolean NULL_INPUT_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isNullInput() <em>Null Input</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #isNullInput()
+	 * @generated
+	 * @ordered
+	 */
+   protected boolean nullInput = NULL_INPUT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getVersion() <em>Version</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getVersion()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String VERSION_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getVersion() <em>Version</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getVersion()
+	 * @generated
+	 * @ordered
+	 */
+   protected String version = VERSION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getDialect() <em>Dialect</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDialect()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final SourceDialect DIALECT_EDEFAULT = SourceDialect.UNKNOWN_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getDialect() <em>Dialect</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDialect()
+	 * @generated
+	 * @ordered
+	 */
+	protected SourceDialect dialect = DIALECT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isExternalAction() <em>External Action</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isExternalAction()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean EXTERNAL_ACTION_EDEFAULT = true;
+
+	/**
+	 * The cached value of the '{@link #isExternalAction() <em>External Action</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isExternalAction()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean externalAction = EXTERNAL_ACTION_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getReturn() <em>Return</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getReturn()
+	 * @generated
+	 * @ordered
+	 */
+	protected IntegerDataType return_;
+
+	/**
+	 * The cached value of the '{@link #getJavaOptions() <em>Java Options</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getJavaOptions()
+	 * @generated
+	 * @ordered
+	 */
+   protected DB2JavaOptions javaOptions;
+
+	/**
+	 * The cached value of the '{@link #getDeploy() <em>Deploy</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getDeploy()
+	 * @generated
+	 * @ordered
+	 */
+   protected DB2ProcedureDeploy deploy;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2ProcedureImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_PROCEDURE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getFenced() {
+		return fenced;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFenced(String newFenced) {
+		String oldFenced = fenced;
+		fenced = newFenced;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PROCEDURE__FENCED, oldFenced, fenced));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getThreadsafe() {
+		return threadsafe;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setThreadsafe(String newThreadsafe) {
+		String oldThreadsafe = threadsafe;
+		threadsafe = newThreadsafe;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PROCEDURE__THREADSAFE, oldThreadsafe, threadsafe));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isDbInfo() {
+		return dbInfo;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDbInfo(boolean newDbInfo) {
+		boolean oldDbInfo = dbInfo;
+		dbInfo = newDbInfo;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PROCEDURE__DB_INFO, oldDbInfo, dbInfo));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isImplicitSchema() {
+		return implicitSchema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setImplicitSchema(boolean newImplicitSchema) {
+		boolean oldImplicitSchema = implicitSchema;
+		implicitSchema = newImplicitSchema;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PROCEDURE__IMPLICIT_SCHEMA, oldImplicitSchema, implicitSchema));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isFederated() {
+		return federated;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFederated(boolean newFederated) {
+		boolean oldFederated = federated;
+		federated = newFederated;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PROCEDURE__FEDERATED, oldFederated, federated));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getParmCcsid() {
+		return parmCcsid;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParmCcsid(String newParmCcsid) {
+		String oldParmCcsid = parmCcsid;
+		parmCcsid = newParmCcsid;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PROCEDURE__PARM_CCSID, oldParmCcsid, parmCcsid));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getSpecialRegister() {
+		return specialRegister;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSpecialRegister(String newSpecialRegister) {
+		String oldSpecialRegister = specialRegister;
+		specialRegister = newSpecialRegister;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PROCEDURE__SPECIAL_REGISTER, oldSpecialRegister, specialRegister));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public int getChangeState() {
+		return changeState;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setChangeState(int newChangeState) {
+		int oldChangeState = changeState;
+		changeState = newChangeState;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PROCEDURE__CHANGE_STATE, oldChangeState, changeState));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getDebugId() {
+		return debugId;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setDebugId(String newDebugId) {
+		String oldDebugId = debugId;
+		debugId = newDebugId;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PROCEDURE__DEBUG_ID, oldDebugId, debugId));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getProgramType() {
+		return programType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setProgramType(String newProgramType) {
+		String oldProgramType = programType;
+		programType = newProgramType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PROCEDURE__PROGRAM_TYPE, oldProgramType, programType));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getOrigSchemaName() {
+		return origSchemaName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setOrigSchemaName(String newOrigSchemaName) {
+		String oldOrigSchemaName = origSchemaName;
+		origSchemaName = newOrigSchemaName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PROCEDURE__ORIG_SCHEMA_NAME, oldOrigSchemaName, origSchemaName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getOrigParmSig() {
+		return origParmSig;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setOrigParmSig(String newOrigParmSig) {
+		String oldOrigParmSig = origParmSig;
+		origParmSig = newOrigParmSig;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PROCEDURE__ORIG_PARM_SIG, oldOrigParmSig, origParmSig));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public EList getExtendedOptions() {
+		if (extendedOptions == null) {
+			extendedOptions = new EObjectContainmentEList(DB2ExtendedOptions.class, this, DB2ModelPackage.DB2_PROCEDURE__EXTENDED_OPTIONS);
+		}
+		return extendedOptions;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public EList getRoutineExtensions() {
+		if (routineExtensions == null) {
+			routineExtensions = new EObjectResolvingEList(DB2RoutineExtension.class, this, DB2ModelPackage.DB2_PROCEDURE__ROUTINE_EXTENSIONS);
+		}
+		return routineExtensions;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public DB2ProcedureDeploy getDeploy() {
+		return deploy;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetDeploy(DB2ProcedureDeploy newDeploy, NotificationChain msgs) {
+		DB2ProcedureDeploy oldDeploy = deploy;
+		deploy = newDeploy;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PROCEDURE__DEPLOY, oldDeploy, newDeploy);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDeploy(DB2ProcedureDeploy newDeploy) {
+		if (newDeploy != deploy) {
+			NotificationChain msgs = null;
+			if (deploy != null)
+				msgs = ((InternalEObject)deploy).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - DB2ModelPackage.DB2_PROCEDURE__DEPLOY, null, msgs);
+			if (newDeploy != null)
+				msgs = ((InternalEObject)newDeploy).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - DB2ModelPackage.DB2_PROCEDURE__DEPLOY, null, msgs);
+			msgs = basicSetDeploy(newDeploy, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PROCEDURE__DEPLOY, newDeploy, newDeploy));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PROCEDURE__JAVA_OPTIONS:
+				if (javaOptions != null)
+					msgs = ((InternalEObject)javaOptions).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - DB2ModelPackage.DB2_PROCEDURE__JAVA_OPTIONS, null, msgs);
+				return basicSetJavaOptions((DB2JavaOptions)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PROCEDURE__EXTENDED_OPTIONS:
+				return ((InternalEList)getExtendedOptions()).basicRemove(otherEnd, msgs);
+			case DB2ModelPackage.DB2_PROCEDURE__RETURN:
+				return basicSetReturn(null, msgs);
+			case DB2ModelPackage.DB2_PROCEDURE__JAVA_OPTIONS:
+				return basicSetJavaOptions(null, msgs);
+			case DB2ModelPackage.DB2_PROCEDURE__DEPLOY:
+				return basicSetDeploy(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PROCEDURE__FENCED:
+				return getFenced();
+			case DB2ModelPackage.DB2_PROCEDURE__THREADSAFE:
+				return getThreadsafe();
+			case DB2ModelPackage.DB2_PROCEDURE__DB_INFO:
+				return isDbInfo() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_PROCEDURE__IMPLICIT_SCHEMA:
+				return isImplicitSchema() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_PROCEDURE__FEDERATED:
+				return isFederated() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_PROCEDURE__PARM_CCSID:
+				return getParmCcsid();
+			case DB2ModelPackage.DB2_PROCEDURE__SPECIAL_REGISTER:
+				return getSpecialRegister();
+			case DB2ModelPackage.DB2_PROCEDURE__CHANGE_STATE:
+				return new Integer(getChangeState());
+			case DB2ModelPackage.DB2_PROCEDURE__DEBUG_ID:
+				return getDebugId();
+			case DB2ModelPackage.DB2_PROCEDURE__PROGRAM_TYPE:
+				return getProgramType();
+			case DB2ModelPackage.DB2_PROCEDURE__ORIG_SCHEMA_NAME:
+				return getOrigSchemaName();
+			case DB2ModelPackage.DB2_PROCEDURE__ORIG_PARM_SIG:
+				return getOrigParmSig();
+			case DB2ModelPackage.DB2_PROCEDURE__EXTENDED_OPTIONS:
+				return getExtendedOptions();
+			case DB2ModelPackage.DB2_PROCEDURE__ROUTINE_EXTENSIONS:
+				return getRoutineExtensions();
+			case DB2ModelPackage.DB2_PROCEDURE__MODEL_RESULT_SETS:
+				return isModelResultSets() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_PROCEDURE__NULL_INPUT:
+				return isNullInput() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_PROCEDURE__VERSION:
+				return getVersion();
+			case DB2ModelPackage.DB2_PROCEDURE__DIALECT:
+				return getDialect();
+			case DB2ModelPackage.DB2_PROCEDURE__EXTERNAL_ACTION:
+				return isExternalAction() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_PROCEDURE__RETURN:
+				return getReturn();
+			case DB2ModelPackage.DB2_PROCEDURE__JAVA_OPTIONS:
+				return getJavaOptions();
+			case DB2ModelPackage.DB2_PROCEDURE__DEPLOY:
+				return getDeploy();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PROCEDURE__FENCED:
+				setFenced((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__THREADSAFE:
+				setThreadsafe((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__DB_INFO:
+				setDbInfo(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__IMPLICIT_SCHEMA:
+				setImplicitSchema(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__FEDERATED:
+				setFederated(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__PARM_CCSID:
+				setParmCcsid((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__SPECIAL_REGISTER:
+				setSpecialRegister((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__CHANGE_STATE:
+				setChangeState(((Integer)newValue).intValue());
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__DEBUG_ID:
+				setDebugId((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__PROGRAM_TYPE:
+				setProgramType((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__ORIG_SCHEMA_NAME:
+				setOrigSchemaName((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__ORIG_PARM_SIG:
+				setOrigParmSig((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__EXTENDED_OPTIONS:
+				getExtendedOptions().clear();
+				getExtendedOptions().addAll((Collection)newValue);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__ROUTINE_EXTENSIONS:
+				getRoutineExtensions().clear();
+				getRoutineExtensions().addAll((Collection)newValue);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__MODEL_RESULT_SETS:
+				setModelResultSets(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__NULL_INPUT:
+				setNullInput(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__VERSION:
+				setVersion((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__DIALECT:
+				setDialect((SourceDialect)newValue);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__EXTERNAL_ACTION:
+				setExternalAction(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__RETURN:
+				setReturn((IntegerDataType)newValue);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__JAVA_OPTIONS:
+				setJavaOptions((DB2JavaOptions)newValue);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__DEPLOY:
+				setDeploy((DB2ProcedureDeploy)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PROCEDURE__FENCED:
+				setFenced(FENCED_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__THREADSAFE:
+				setThreadsafe(THREADSAFE_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__DB_INFO:
+				setDbInfo(DB_INFO_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__IMPLICIT_SCHEMA:
+				setImplicitSchema(IMPLICIT_SCHEMA_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__FEDERATED:
+				setFederated(FEDERATED_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__PARM_CCSID:
+				setParmCcsid(PARM_CCSID_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__SPECIAL_REGISTER:
+				setSpecialRegister(SPECIAL_REGISTER_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__CHANGE_STATE:
+				setChangeState(CHANGE_STATE_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__DEBUG_ID:
+				setDebugId(DEBUG_ID_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__PROGRAM_TYPE:
+				setProgramType(PROGRAM_TYPE_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__ORIG_SCHEMA_NAME:
+				setOrigSchemaName(ORIG_SCHEMA_NAME_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__ORIG_PARM_SIG:
+				setOrigParmSig(ORIG_PARM_SIG_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__EXTENDED_OPTIONS:
+				getExtendedOptions().clear();
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__ROUTINE_EXTENSIONS:
+				getRoutineExtensions().clear();
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__MODEL_RESULT_SETS:
+				setModelResultSets(MODEL_RESULT_SETS_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__NULL_INPUT:
+				setNullInput(NULL_INPUT_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__VERSION:
+				setVersion(VERSION_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__DIALECT:
+				setDialect(DIALECT_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__EXTERNAL_ACTION:
+				setExternalAction(EXTERNAL_ACTION_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__RETURN:
+				setReturn((IntegerDataType)null);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__JAVA_OPTIONS:
+				setJavaOptions((DB2JavaOptions)null);
+				return;
+			case DB2ModelPackage.DB2_PROCEDURE__DEPLOY:
+				setDeploy((DB2ProcedureDeploy)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_PROCEDURE__FENCED:
+				return FENCED_EDEFAULT == null ? fenced != null : !FENCED_EDEFAULT.equals(fenced);
+			case DB2ModelPackage.DB2_PROCEDURE__THREADSAFE:
+				return THREADSAFE_EDEFAULT == null ? threadsafe != null : !THREADSAFE_EDEFAULT.equals(threadsafe);
+			case DB2ModelPackage.DB2_PROCEDURE__DB_INFO:
+				return dbInfo != DB_INFO_EDEFAULT;
+			case DB2ModelPackage.DB2_PROCEDURE__IMPLICIT_SCHEMA:
+				return implicitSchema != IMPLICIT_SCHEMA_EDEFAULT;
+			case DB2ModelPackage.DB2_PROCEDURE__FEDERATED:
+				return federated != FEDERATED_EDEFAULT;
+			case DB2ModelPackage.DB2_PROCEDURE__PARM_CCSID:
+				return PARM_CCSID_EDEFAULT == null ? parmCcsid != null : !PARM_CCSID_EDEFAULT.equals(parmCcsid);
+			case DB2ModelPackage.DB2_PROCEDURE__SPECIAL_REGISTER:
+				return SPECIAL_REGISTER_EDEFAULT == null ? specialRegister != null : !SPECIAL_REGISTER_EDEFAULT.equals(specialRegister);
+			case DB2ModelPackage.DB2_PROCEDURE__CHANGE_STATE:
+				return changeState != CHANGE_STATE_EDEFAULT;
+			case DB2ModelPackage.DB2_PROCEDURE__DEBUG_ID:
+				return DEBUG_ID_EDEFAULT == null ? debugId != null : !DEBUG_ID_EDEFAULT.equals(debugId);
+			case DB2ModelPackage.DB2_PROCEDURE__PROGRAM_TYPE:
+				return PROGRAM_TYPE_EDEFAULT == null ? programType != null : !PROGRAM_TYPE_EDEFAULT.equals(programType);
+			case DB2ModelPackage.DB2_PROCEDURE__ORIG_SCHEMA_NAME:
+				return ORIG_SCHEMA_NAME_EDEFAULT == null ? origSchemaName != null : !ORIG_SCHEMA_NAME_EDEFAULT.equals(origSchemaName);
+			case DB2ModelPackage.DB2_PROCEDURE__ORIG_PARM_SIG:
+				return ORIG_PARM_SIG_EDEFAULT == null ? origParmSig != null : !ORIG_PARM_SIG_EDEFAULT.equals(origParmSig);
+			case DB2ModelPackage.DB2_PROCEDURE__EXTENDED_OPTIONS:
+				return extendedOptions != null && !extendedOptions.isEmpty();
+			case DB2ModelPackage.DB2_PROCEDURE__ROUTINE_EXTENSIONS:
+				return routineExtensions != null && !routineExtensions.isEmpty();
+			case DB2ModelPackage.DB2_PROCEDURE__MODEL_RESULT_SETS:
+				return modelResultSets != MODEL_RESULT_SETS_EDEFAULT;
+			case DB2ModelPackage.DB2_PROCEDURE__NULL_INPUT:
+				return nullInput != NULL_INPUT_EDEFAULT;
+			case DB2ModelPackage.DB2_PROCEDURE__VERSION:
+				return VERSION_EDEFAULT == null ? version != null : !VERSION_EDEFAULT.equals(version);
+			case DB2ModelPackage.DB2_PROCEDURE__DIALECT:
+				return dialect != DIALECT_EDEFAULT;
+			case DB2ModelPackage.DB2_PROCEDURE__EXTERNAL_ACTION:
+				return externalAction != EXTERNAL_ACTION_EDEFAULT;
+			case DB2ModelPackage.DB2_PROCEDURE__RETURN:
+				return return_ != null;
+			case DB2ModelPackage.DB2_PROCEDURE__JAVA_OPTIONS:
+				return javaOptions != null;
+			case DB2ModelPackage.DB2_PROCEDURE__DEPLOY:
+				return deploy != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isModelResultSets() {
+		return modelResultSets;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setModelResultSets(boolean newModelResultSets) {
+		boolean oldModelResultSets = modelResultSets;
+		modelResultSets = newModelResultSets;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PROCEDURE__MODEL_RESULT_SETS, oldModelResultSets, modelResultSets));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public boolean isNullInput() {
+		return nullInput;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setNullInput(boolean newNullInput) {
+		boolean oldNullInput = nullInput;
+		nullInput = newNullInput;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PROCEDURE__NULL_INPUT, oldNullInput, nullInput));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getVersion() {
+		return version;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setVersion(String newVersion) {
+		String oldVersion = version;
+		version = newVersion;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PROCEDURE__VERSION, oldVersion, version));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SourceDialect getDialect() {
+		return dialect;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDialect(SourceDialect newDialect) {
+		SourceDialect oldDialect = dialect;
+		dialect = newDialect == null ? DIALECT_EDEFAULT : newDialect;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PROCEDURE__DIALECT, oldDialect, dialect));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isExternalAction() {
+		return externalAction;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setExternalAction(boolean newExternalAction) {
+		boolean oldExternalAction = externalAction;
+		externalAction = newExternalAction;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PROCEDURE__EXTERNAL_ACTION, oldExternalAction, externalAction));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IntegerDataType getReturn() {
+		return return_;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetReturn(IntegerDataType newReturn, NotificationChain msgs) {
+		IntegerDataType oldReturn = return_;
+		return_ = newReturn;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PROCEDURE__RETURN, oldReturn, newReturn);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setReturn(IntegerDataType newReturn) {
+		if (newReturn != return_) {
+			NotificationChain msgs = null;
+			if (return_ != null)
+				msgs = ((InternalEObject)return_).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - DB2ModelPackage.DB2_PROCEDURE__RETURN, null, msgs);
+			if (newReturn != null)
+				msgs = ((InternalEObject)newReturn).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - DB2ModelPackage.DB2_PROCEDURE__RETURN, null, msgs);
+			msgs = basicSetReturn(newReturn, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PROCEDURE__RETURN, newReturn, newReturn));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public DB2JavaOptions getJavaOptions() {
+		return javaOptions;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public NotificationChain basicSetJavaOptions(DB2JavaOptions newJavaOptions, NotificationChain msgs) {
+		DB2JavaOptions oldJavaOptions = javaOptions;
+		javaOptions = newJavaOptions;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PROCEDURE__JAVA_OPTIONS, oldJavaOptions, newJavaOptions);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setJavaOptions(DB2JavaOptions newJavaOptions) {
+		if (newJavaOptions != javaOptions) {
+			NotificationChain msgs = null;
+			if (javaOptions != null)
+				msgs = ((InternalEObject)javaOptions).eInverseRemove(this, DB2ModelPackage.DB2_JAVA_OPTIONS__PROCEDURE, DB2JavaOptions.class, msgs);
+			if (newJavaOptions != null)
+				msgs = ((InternalEObject)newJavaOptions).eInverseAdd(this, DB2ModelPackage.DB2_JAVA_OPTIONS__PROCEDURE, DB2JavaOptions.class, msgs);
+			msgs = basicSetJavaOptions(newJavaOptions, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_PROCEDURE__JAVA_OPTIONS, newJavaOptions, newJavaOptions));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class baseClass) {
+		if (baseClass == DB2AccessPlan.class) {
+			switch (derivedFeatureID) {
+				default: return -1;
+			}
+		}
+		if (baseClass == DB2Routine.class) {
+			switch (derivedFeatureID) {
+				case DB2ModelPackage.DB2_PROCEDURE__FENCED: return DB2ModelPackage.DB2_ROUTINE__FENCED;
+				case DB2ModelPackage.DB2_PROCEDURE__THREADSAFE: return DB2ModelPackage.DB2_ROUTINE__THREADSAFE;
+				case DB2ModelPackage.DB2_PROCEDURE__DB_INFO: return DB2ModelPackage.DB2_ROUTINE__DB_INFO;
+				case DB2ModelPackage.DB2_PROCEDURE__IMPLICIT_SCHEMA: return DB2ModelPackage.DB2_ROUTINE__IMPLICIT_SCHEMA;
+				case DB2ModelPackage.DB2_PROCEDURE__FEDERATED: return DB2ModelPackage.DB2_ROUTINE__FEDERATED;
+				case DB2ModelPackage.DB2_PROCEDURE__PARM_CCSID: return DB2ModelPackage.DB2_ROUTINE__PARM_CCSID;
+				case DB2ModelPackage.DB2_PROCEDURE__SPECIAL_REGISTER: return DB2ModelPackage.DB2_ROUTINE__SPECIAL_REGISTER;
+				case DB2ModelPackage.DB2_PROCEDURE__CHANGE_STATE: return DB2ModelPackage.DB2_ROUTINE__CHANGE_STATE;
+				case DB2ModelPackage.DB2_PROCEDURE__DEBUG_ID: return DB2ModelPackage.DB2_ROUTINE__DEBUG_ID;
+				case DB2ModelPackage.DB2_PROCEDURE__PROGRAM_TYPE: return DB2ModelPackage.DB2_ROUTINE__PROGRAM_TYPE;
+				case DB2ModelPackage.DB2_PROCEDURE__ORIG_SCHEMA_NAME: return DB2ModelPackage.DB2_ROUTINE__ORIG_SCHEMA_NAME;
+				case DB2ModelPackage.DB2_PROCEDURE__ORIG_PARM_SIG: return DB2ModelPackage.DB2_ROUTINE__ORIG_PARM_SIG;
+				case DB2ModelPackage.DB2_PROCEDURE__EXTENDED_OPTIONS: return DB2ModelPackage.DB2_ROUTINE__EXTENDED_OPTIONS;
+				case DB2ModelPackage.DB2_PROCEDURE__ROUTINE_EXTENSIONS: return DB2ModelPackage.DB2_ROUTINE__ROUTINE_EXTENSIONS;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class baseClass) {
+		if (baseClass == DB2AccessPlan.class) {
+			switch (baseFeatureID) {
+				default: return -1;
+			}
+		}
+		if (baseClass == DB2Routine.class) {
+			switch (baseFeatureID) {
+				case DB2ModelPackage.DB2_ROUTINE__FENCED: return DB2ModelPackage.DB2_PROCEDURE__FENCED;
+				case DB2ModelPackage.DB2_ROUTINE__THREADSAFE: return DB2ModelPackage.DB2_PROCEDURE__THREADSAFE;
+				case DB2ModelPackage.DB2_ROUTINE__DB_INFO: return DB2ModelPackage.DB2_PROCEDURE__DB_INFO;
+				case DB2ModelPackage.DB2_ROUTINE__IMPLICIT_SCHEMA: return DB2ModelPackage.DB2_PROCEDURE__IMPLICIT_SCHEMA;
+				case DB2ModelPackage.DB2_ROUTINE__FEDERATED: return DB2ModelPackage.DB2_PROCEDURE__FEDERATED;
+				case DB2ModelPackage.DB2_ROUTINE__PARM_CCSID: return DB2ModelPackage.DB2_PROCEDURE__PARM_CCSID;
+				case DB2ModelPackage.DB2_ROUTINE__SPECIAL_REGISTER: return DB2ModelPackage.DB2_PROCEDURE__SPECIAL_REGISTER;
+				case DB2ModelPackage.DB2_ROUTINE__CHANGE_STATE: return DB2ModelPackage.DB2_PROCEDURE__CHANGE_STATE;
+				case DB2ModelPackage.DB2_ROUTINE__DEBUG_ID: return DB2ModelPackage.DB2_PROCEDURE__DEBUG_ID;
+				case DB2ModelPackage.DB2_ROUTINE__PROGRAM_TYPE: return DB2ModelPackage.DB2_PROCEDURE__PROGRAM_TYPE;
+				case DB2ModelPackage.DB2_ROUTINE__ORIG_SCHEMA_NAME: return DB2ModelPackage.DB2_PROCEDURE__ORIG_SCHEMA_NAME;
+				case DB2ModelPackage.DB2_ROUTINE__ORIG_PARM_SIG: return DB2ModelPackage.DB2_PROCEDURE__ORIG_PARM_SIG;
+				case DB2ModelPackage.DB2_ROUTINE__EXTENDED_OPTIONS: return DB2ModelPackage.DB2_PROCEDURE__EXTENDED_OPTIONS;
+				case DB2ModelPackage.DB2_ROUTINE__ROUTINE_EXTENSIONS: return DB2ModelPackage.DB2_PROCEDURE__ROUTINE_EXTENSIONS;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (fenced: "); //$NON-NLS-1$
+		result.append(fenced);
+		result.append(", threadsafe: "); //$NON-NLS-1$
+		result.append(threadsafe);
+		result.append(", dbInfo: "); //$NON-NLS-1$
+		result.append(dbInfo);
+		result.append(", implicitSchema: "); //$NON-NLS-1$
+		result.append(implicitSchema);
+		result.append(", federated: "); //$NON-NLS-1$
+		result.append(federated);
+		result.append(", parmCcsid: "); //$NON-NLS-1$
+		result.append(parmCcsid);
+		result.append(", specialRegister: "); //$NON-NLS-1$
+		result.append(specialRegister);
+		result.append(", changeState: "); //$NON-NLS-1$
+		result.append(changeState);
+		result.append(", debugId: "); //$NON-NLS-1$
+		result.append(debugId);
+		result.append(", programType: "); //$NON-NLS-1$
+		result.append(programType);
+		result.append(", origSchemaName: "); //$NON-NLS-1$
+		result.append(origSchemaName);
+		result.append(", origParmSig: "); //$NON-NLS-1$
+		result.append(origParmSig);
+		result.append(", modelResultSets: "); //$NON-NLS-1$
+		result.append(modelResultSets);
+		result.append(", nullInput: "); //$NON-NLS-1$
+		result.append(nullInput);
+		result.append(", version: "); //$NON-NLS-1$
+		result.append(version);
+		result.append(", dialect: "); //$NON-NLS-1$
+		result.append(dialect);
+		result.append(", externalAction: "); //$NON-NLS-1$
+		result.append(externalAction);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DB2ProcedureImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2SchemaImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2SchemaImpl.java
new file mode 100644
index 0000000..be9fa33
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2SchemaImpl.java
@@ -0,0 +1,466 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SchemaImpl;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2AccessPlan;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Jar;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2OLAPObject;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Package;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2XSRObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 Schema</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2SchemaImpl#getAccessPlans <em>Access Plans</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2SchemaImpl#getOlapObjects <em>Olap Objects</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2SchemaImpl#getJars <em>Jars</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2SchemaImpl#getXsrObjects <em>Xsr Objects</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2SchemaImpl#getPackages <em>Packages</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2SchemaImpl#getMasks <em>Masks</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2SchemaImpl#getPermissions <em>Permissions</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2SchemaImpl#getModules <em>Modules</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2SchemaImpl#getGlobalVariables <em>Global Variables</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2SchemaImpl extends SchemaImpl implements DB2Schema {
+	/**
+	 * The cached value of the '{@link #getAccessPlans() <em>Access Plans</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAccessPlans()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList accessPlans;
+
+	/**
+	 * The cached value of the '{@link #getOlapObjects() <em>Olap Objects</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOlapObjects()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList olapObjects;
+
+	/**
+	 * The cached value of the '{@link #getJars() <em>Jars</em>}' reference list.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getJars()
+	 * @generated
+	 * @ordered
+	 */
+   protected EList jars;
+
+	/**
+	 * The cached value of the '{@link #getXsrObjects() <em>Xsr Objects</em>}' reference list.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getXsrObjects()
+	 * @generated
+	 * @ordered
+	 */
+   protected EList xsrObjects;
+
+	/**
+	 * The cached value of the '{@link #getPackages() <em>Packages</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPackages()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList packages;
+
+	/**
+	 * The cached value of the '{@link #getMasks() <em>Masks</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMasks()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList masks;
+
+	/**
+	 * The cached value of the '{@link #getPermissions() <em>Permissions</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPermissions()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList permissions;
+
+	/**
+	 * The cached value of the '{@link #getModules() <em>Modules</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getModules()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList modules;
+
+	/**
+	 * The cached value of the '{@link #getGlobalVariables() <em>Global Variables</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getGlobalVariables()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList globalVariables;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2SchemaImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_SCHEMA;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getAccessPlans() {
+		if (accessPlans == null) {
+			accessPlans = new EObjectResolvingEList(DB2AccessPlan.class, this, DB2ModelPackage.DB2_SCHEMA__ACCESS_PLANS);
+		}
+		return accessPlans;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getOlapObjects() {
+		if (olapObjects == null) {
+			olapObjects = new EObjectWithInverseResolvingEList(DB2OLAPObject.class, this, DB2ModelPackage.DB2_SCHEMA__OLAP_OBJECTS, DB2ModelPackage.DB2OLAP_OBJECT__SCHEMA);
+		}
+		return olapObjects;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public EList getJars() {
+		if (jars == null) {
+			jars = new EObjectWithInverseResolvingEList(DB2Jar.class, this, DB2ModelPackage.DB2_SCHEMA__JARS, DB2ModelPackage.DB2_JAR__SCHEMA);
+		}
+		return jars;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public EList getXsrObjects() {
+		if (xsrObjects == null) {
+			xsrObjects = new EObjectWithInverseResolvingEList(DB2XSRObject.class, this, DB2ModelPackage.DB2_SCHEMA__XSR_OBJECTS, DB2ModelPackage.DB2XSR_OBJECT__SCHEMA);
+		}
+		return xsrObjects;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getPackages() {
+		if (packages == null) {
+			packages = new EObjectWithInverseResolvingEList(DB2Package.class, this, DB2ModelPackage.DB2_SCHEMA__PACKAGES, DB2ModelPackage.DB2_PACKAGE__SCHEMA);
+		}
+		return packages;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getMasks() {
+		if (masks == null) {
+			masks = new EObjectWithInverseResolvingEList(DB2Mask.class, this, DB2ModelPackage.DB2_SCHEMA__MASKS, DB2ModelPackage.DB2_MASK__SCHEMA);
+		}
+		return masks;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getPermissions() {
+		if (permissions == null) {
+			permissions = new EObjectWithInverseResolvingEList(DB2Permission.class, this, DB2ModelPackage.DB2_SCHEMA__PERMISSIONS, DB2ModelPackage.DB2_PERMISSION__SCHEMA);
+		}
+		return permissions;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getModules() {
+//		if (modules == null) {
+//			modules = new EObjectWithInverseResolvingEList(LUWModule.class, this, DB2ModelPackage.DB2_SCHEMA__MODULES, LUWPackage.LUW_MODULE__OWNING_SCHEMA);
+//		}
+		return modules;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getGlobalVariables() {
+//		if (globalVariables == null) {
+//			globalVariables = new EObjectWithInverseResolvingEList(LUWGlobalVariable.class, this, DB2ModelPackage.DB2_SCHEMA__GLOBAL_VARIABLES, LUWPackage.LUW_GLOBAL_VARIABLE__SCHEMA);
+//		}
+		return globalVariables;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_SCHEMA__OLAP_OBJECTS:
+				return ((InternalEList)getOlapObjects()).basicAdd(otherEnd, msgs);
+			case DB2ModelPackage.DB2_SCHEMA__JARS:
+				return ((InternalEList)getJars()).basicAdd(otherEnd, msgs);
+			case DB2ModelPackage.DB2_SCHEMA__XSR_OBJECTS:
+				return ((InternalEList)getXsrObjects()).basicAdd(otherEnd, msgs);
+			case DB2ModelPackage.DB2_SCHEMA__PACKAGES:
+				return ((InternalEList)getPackages()).basicAdd(otherEnd, msgs);
+			case DB2ModelPackage.DB2_SCHEMA__MASKS:
+				return ((InternalEList)getMasks()).basicAdd(otherEnd, msgs);
+			case DB2ModelPackage.DB2_SCHEMA__PERMISSIONS:
+				return ((InternalEList)getPermissions()).basicAdd(otherEnd, msgs);
+			case DB2ModelPackage.DB2_SCHEMA__MODULES:
+				return ((InternalEList)getModules()).basicAdd(otherEnd, msgs);
+			case DB2ModelPackage.DB2_SCHEMA__GLOBAL_VARIABLES:
+				return ((InternalEList)getGlobalVariables()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_SCHEMA__OLAP_OBJECTS:
+				return ((InternalEList)getOlapObjects()).basicRemove(otherEnd, msgs);
+			case DB2ModelPackage.DB2_SCHEMA__JARS:
+				return ((InternalEList)getJars()).basicRemove(otherEnd, msgs);
+			case DB2ModelPackage.DB2_SCHEMA__XSR_OBJECTS:
+				return ((InternalEList)getXsrObjects()).basicRemove(otherEnd, msgs);
+			case DB2ModelPackage.DB2_SCHEMA__PACKAGES:
+				return ((InternalEList)getPackages()).basicRemove(otherEnd, msgs);
+			case DB2ModelPackage.DB2_SCHEMA__MASKS:
+				return ((InternalEList)getMasks()).basicRemove(otherEnd, msgs);
+			case DB2ModelPackage.DB2_SCHEMA__PERMISSIONS:
+				return ((InternalEList)getPermissions()).basicRemove(otherEnd, msgs);
+			case DB2ModelPackage.DB2_SCHEMA__MODULES:
+				return ((InternalEList)getModules()).basicRemove(otherEnd, msgs);
+			case DB2ModelPackage.DB2_SCHEMA__GLOBAL_VARIABLES:
+				return ((InternalEList)getGlobalVariables()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_SCHEMA__ACCESS_PLANS:
+				return getAccessPlans();
+			case DB2ModelPackage.DB2_SCHEMA__OLAP_OBJECTS:
+				return getOlapObjects();
+			case DB2ModelPackage.DB2_SCHEMA__JARS:
+				return getJars();
+			case DB2ModelPackage.DB2_SCHEMA__XSR_OBJECTS:
+				return getXsrObjects();
+			case DB2ModelPackage.DB2_SCHEMA__PACKAGES:
+				return getPackages();
+			case DB2ModelPackage.DB2_SCHEMA__MASKS:
+				return getMasks();
+			case DB2ModelPackage.DB2_SCHEMA__PERMISSIONS:
+				return getPermissions();
+			case DB2ModelPackage.DB2_SCHEMA__MODULES:
+				return getModules();
+			case DB2ModelPackage.DB2_SCHEMA__GLOBAL_VARIABLES:
+				return getGlobalVariables();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_SCHEMA__ACCESS_PLANS:
+				getAccessPlans().clear();
+				getAccessPlans().addAll((Collection)newValue);
+				return;
+			case DB2ModelPackage.DB2_SCHEMA__OLAP_OBJECTS:
+				getOlapObjects().clear();
+				getOlapObjects().addAll((Collection)newValue);
+				return;
+			case DB2ModelPackage.DB2_SCHEMA__JARS:
+				getJars().clear();
+				getJars().addAll((Collection)newValue);
+				return;
+			case DB2ModelPackage.DB2_SCHEMA__XSR_OBJECTS:
+				getXsrObjects().clear();
+				getXsrObjects().addAll((Collection)newValue);
+				return;
+			case DB2ModelPackage.DB2_SCHEMA__PACKAGES:
+				getPackages().clear();
+				getPackages().addAll((Collection)newValue);
+				return;
+			case DB2ModelPackage.DB2_SCHEMA__MASKS:
+				getMasks().clear();
+				getMasks().addAll((Collection)newValue);
+				return;
+			case DB2ModelPackage.DB2_SCHEMA__PERMISSIONS:
+				getPermissions().clear();
+				getPermissions().addAll((Collection)newValue);
+				return;
+			case DB2ModelPackage.DB2_SCHEMA__MODULES:
+				getModules().clear();
+				getModules().addAll((Collection)newValue);
+				return;
+			case DB2ModelPackage.DB2_SCHEMA__GLOBAL_VARIABLES:
+				getGlobalVariables().clear();
+				getGlobalVariables().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_SCHEMA__ACCESS_PLANS:
+				getAccessPlans().clear();
+				return;
+			case DB2ModelPackage.DB2_SCHEMA__OLAP_OBJECTS:
+				getOlapObjects().clear();
+				return;
+			case DB2ModelPackage.DB2_SCHEMA__JARS:
+				getJars().clear();
+				return;
+			case DB2ModelPackage.DB2_SCHEMA__XSR_OBJECTS:
+				getXsrObjects().clear();
+				return;
+			case DB2ModelPackage.DB2_SCHEMA__PACKAGES:
+				getPackages().clear();
+				return;
+			case DB2ModelPackage.DB2_SCHEMA__MASKS:
+				getMasks().clear();
+				return;
+			case DB2ModelPackage.DB2_SCHEMA__PERMISSIONS:
+				getPermissions().clear();
+				return;
+			case DB2ModelPackage.DB2_SCHEMA__MODULES:
+				getModules().clear();
+				return;
+			case DB2ModelPackage.DB2_SCHEMA__GLOBAL_VARIABLES:
+				getGlobalVariables().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_SCHEMA__ACCESS_PLANS:
+				return accessPlans != null && !accessPlans.isEmpty();
+			case DB2ModelPackage.DB2_SCHEMA__OLAP_OBJECTS:
+				return olapObjects != null && !olapObjects.isEmpty();
+			case DB2ModelPackage.DB2_SCHEMA__JARS:
+				return jars != null && !jars.isEmpty();
+			case DB2ModelPackage.DB2_SCHEMA__XSR_OBJECTS:
+				return xsrObjects != null && !xsrObjects.isEmpty();
+			case DB2ModelPackage.DB2_SCHEMA__PACKAGES:
+				return packages != null && !packages.isEmpty();
+			case DB2ModelPackage.DB2_SCHEMA__MASKS:
+				return masks != null && !masks.isEmpty();
+			case DB2ModelPackage.DB2_SCHEMA__PERMISSIONS:
+				return permissions != null && !permissions.isEmpty();
+			case DB2ModelPackage.DB2_SCHEMA__MODULES:
+				return modules != null && !modules.isEmpty();
+			case DB2ModelPackage.DB2_SCHEMA__GLOBAL_VARIABLES:
+				return globalVariables != null && !globalVariables.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //DB2SchemaImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2SourceImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2SourceImpl.java
new file mode 100644
index 0000000..00a95e0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2SourceImpl.java
@@ -0,0 +1,461 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.modelbase.sql.routines.impl.SourceImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Source;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 Source</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2SourceImpl#getFileName <em>File Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2SourceImpl#getPackageName <em>Package Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2SourceImpl#getDb2PackageName <em>Db2 Package Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2SourceImpl#getLastModified <em>Last Modified</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2SourceImpl#getSupporting <em>Supporting</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2SourceImpl#getPrimary <em>Primary</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2SourceImpl extends SourceImpl implements DB2Source {
+	/**
+	 * The default value of the '{@link #getFileName() <em>File Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFileName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String FILE_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getFileName() <em>File Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFileName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String fileName = FILE_NAME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getPackageName() <em>Package Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPackageName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String PACKAGE_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getPackageName() <em>Package Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPackageName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String packageName = PACKAGE_NAME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getDb2PackageName() <em>Db2 Package Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDb2PackageName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String DB2_PACKAGE_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getDb2PackageName() <em>Db2 Package Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDb2PackageName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String db2PackageName = DB2_PACKAGE_NAME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getLastModified() <em>Last Modified</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLastModified()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String LAST_MODIFIED_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getLastModified() <em>Last Modified</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLastModified()
+	 * @generated
+	 * @ordered
+	 */
+	protected String lastModified = LAST_MODIFIED_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getSupporting() <em>Supporting</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getSupporting()
+	 * @generated
+	 * @ordered
+	 */
+   protected EList supporting;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2SourceImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_SOURCE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getFileName() {
+		return fileName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFileName(String newFileName) {
+		String oldFileName = fileName;
+		fileName = newFileName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_SOURCE__FILE_NAME, oldFileName, fileName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getPackageName() {
+		return packageName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPackageName(String newPackageName) {
+		String oldPackageName = packageName;
+		packageName = newPackageName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_SOURCE__PACKAGE_NAME, oldPackageName, packageName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getDb2PackageName() {
+		return db2PackageName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDb2PackageName(String newDb2PackageName) {
+		String oldDb2PackageName = db2PackageName;
+		db2PackageName = newDb2PackageName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_SOURCE__DB2_PACKAGE_NAME, oldDb2PackageName, db2PackageName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getLastModified() {
+		return lastModified;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLastModified(String newLastModified) {
+		String oldLastModified = lastModified;
+		lastModified = newLastModified;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_SOURCE__LAST_MODIFIED, oldLastModified, lastModified));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public EList getSupporting() {
+		if (supporting == null) {
+			supporting = new EObjectContainmentWithInverseEList(DB2Source.class, this, DB2ModelPackage.DB2_SOURCE__SUPPORTING, DB2ModelPackage.DB2_SOURCE__PRIMARY);
+		}
+		return supporting;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public DB2Source getPrimary() {
+		if (eContainerFeatureID() != DB2ModelPackage.DB2_SOURCE__PRIMARY) return null;
+		return (DB2Source)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetPrimary(DB2Source newPrimary, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newPrimary, DB2ModelPackage.DB2_SOURCE__PRIMARY, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setPrimary(DB2Source newPrimary) {
+		if (newPrimary != eInternalContainer() || (eContainerFeatureID() != DB2ModelPackage.DB2_SOURCE__PRIMARY && newPrimary != null)) {
+			if (EcoreUtil.isAncestor(this, newPrimary))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newPrimary != null)
+				msgs = ((InternalEObject)newPrimary).eInverseAdd(this, DB2ModelPackage.DB2_SOURCE__SUPPORTING, DB2Source.class, msgs);
+			msgs = basicSetPrimary(newPrimary, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_SOURCE__PRIMARY, newPrimary, newPrimary));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_SOURCE__SUPPORTING:
+				return ((InternalEList)getSupporting()).basicAdd(otherEnd, msgs);
+			case DB2ModelPackage.DB2_SOURCE__PRIMARY:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetPrimary((DB2Source)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_SOURCE__SUPPORTING:
+				return ((InternalEList)getSupporting()).basicRemove(otherEnd, msgs);
+			case DB2ModelPackage.DB2_SOURCE__PRIMARY:
+				return basicSetPrimary(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case DB2ModelPackage.DB2_SOURCE__PRIMARY:
+				return eInternalContainer().eInverseRemove(this, DB2ModelPackage.DB2_SOURCE__SUPPORTING, DB2Source.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_SOURCE__FILE_NAME:
+				return getFileName();
+			case DB2ModelPackage.DB2_SOURCE__PACKAGE_NAME:
+				return getPackageName();
+			case DB2ModelPackage.DB2_SOURCE__DB2_PACKAGE_NAME:
+				return getDb2PackageName();
+			case DB2ModelPackage.DB2_SOURCE__LAST_MODIFIED:
+				return getLastModified();
+			case DB2ModelPackage.DB2_SOURCE__SUPPORTING:
+				return getSupporting();
+			case DB2ModelPackage.DB2_SOURCE__PRIMARY:
+				return getPrimary();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_SOURCE__FILE_NAME:
+				setFileName((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_SOURCE__PACKAGE_NAME:
+				setPackageName((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_SOURCE__DB2_PACKAGE_NAME:
+				setDb2PackageName((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_SOURCE__LAST_MODIFIED:
+				setLastModified((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_SOURCE__SUPPORTING:
+				getSupporting().clear();
+				getSupporting().addAll((Collection)newValue);
+				return;
+			case DB2ModelPackage.DB2_SOURCE__PRIMARY:
+				setPrimary((DB2Source)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_SOURCE__FILE_NAME:
+				setFileName(FILE_NAME_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_SOURCE__PACKAGE_NAME:
+				setPackageName(PACKAGE_NAME_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_SOURCE__DB2_PACKAGE_NAME:
+				setDb2PackageName(DB2_PACKAGE_NAME_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_SOURCE__LAST_MODIFIED:
+				setLastModified(LAST_MODIFIED_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_SOURCE__SUPPORTING:
+				getSupporting().clear();
+				return;
+			case DB2ModelPackage.DB2_SOURCE__PRIMARY:
+				setPrimary((DB2Source)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_SOURCE__FILE_NAME:
+				return FILE_NAME_EDEFAULT == null ? fileName != null : !FILE_NAME_EDEFAULT.equals(fileName);
+			case DB2ModelPackage.DB2_SOURCE__PACKAGE_NAME:
+				return PACKAGE_NAME_EDEFAULT == null ? packageName != null : !PACKAGE_NAME_EDEFAULT.equals(packageName);
+			case DB2ModelPackage.DB2_SOURCE__DB2_PACKAGE_NAME:
+				return DB2_PACKAGE_NAME_EDEFAULT == null ? db2PackageName != null : !DB2_PACKAGE_NAME_EDEFAULT.equals(db2PackageName);
+			case DB2ModelPackage.DB2_SOURCE__LAST_MODIFIED:
+				return LAST_MODIFIED_EDEFAULT == null ? lastModified != null : !LAST_MODIFIED_EDEFAULT.equals(lastModified);
+			case DB2ModelPackage.DB2_SOURCE__SUPPORTING:
+				return supporting != null && !supporting.isEmpty();
+			case DB2ModelPackage.DB2_SOURCE__PRIMARY:
+				return getPrimary() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (fileName: "); //$NON-NLS-1$
+		result.append(fileName);
+		result.append(", packageName: "); //$NON-NLS-1$
+		result.append(packageName);
+		result.append(", db2PackageName: "); //$NON-NLS-1$
+		result.append(db2PackageName);
+		result.append(", lastModified: "); //$NON-NLS-1$
+		result.append(lastModified);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DB2SourceImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2SystemSchemaImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2SystemSchemaImpl.java
new file mode 100644
index 0000000..be6e873
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2SystemSchemaImpl.java
@@ -0,0 +1,43 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2SystemSchema;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 System Schema</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2SystemSchemaImpl extends DB2SchemaImpl implements DB2SystemSchema {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2SystemSchemaImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_SYSTEM_SCHEMA;
+	}
+
+} //DB2SystemSchemaImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2TableImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2TableImpl.java
new file mode 100644
index 0000000..800f744
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2TableImpl.java
@@ -0,0 +1,683 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Mask;
+import java.util.Collection;
+
+import org.eclipse.datatools.modelbase.sql.tables.impl.PersistentTableImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Package;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Period;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Permission;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Table;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2TableOrganization;
+import org.eclipse.datatools.enablement.ibm.db2.model.DataCaptureType;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 Table</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2TableImpl#getDataCapture <em>Data Capture</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2TableImpl#isActivateRowAccessControl <em>Activate Row Access Control</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2TableImpl#isActivateColumnAccessControl <em>Activate Column Access Control</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2TableImpl#getOrganizeBy <em>Organize By</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2TableImpl#getPackages <em>Packages</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2TableImpl#getPeriods <em>Periods</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2TableImpl#getHistoryTable <em>History Table</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2TableImpl#getTemporalTable <em>Temporal Table</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2TableImpl#getMasks <em>Masks</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2TableImpl#getPermissions <em>Permissions</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2TableImpl extends PersistentTableImpl implements DB2Table {
+	/**
+	 * The default value of the '{@link #getDataCapture() <em>Data Capture</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDataCapture()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final DataCaptureType DATA_CAPTURE_EDEFAULT = DataCaptureType.NONE_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getDataCapture() <em>Data Capture</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDataCapture()
+	 * @generated
+	 * @ordered
+	 */
+	protected DataCaptureType dataCapture = DATA_CAPTURE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isActivateRowAccessControl() <em>Activate Row Access Control</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isActivateRowAccessControl()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean ACTIVATE_ROW_ACCESS_CONTROL_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isActivateRowAccessControl() <em>Activate Row Access Control</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isActivateRowAccessControl()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean activateRowAccessControl = ACTIVATE_ROW_ACCESS_CONTROL_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isActivateColumnAccessControl() <em>Activate Column Access Control</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isActivateColumnAccessControl()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean ACTIVATE_COLUMN_ACCESS_CONTROL_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isActivateColumnAccessControl() <em>Activate Column Access Control</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isActivateColumnAccessControl()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean activateColumnAccessControl = ACTIVATE_COLUMN_ACCESS_CONTROL_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getOrganizeBy() <em>Organize By</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOrganizeBy()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final DB2TableOrganization ORGANIZE_BY_EDEFAULT = DB2TableOrganization.UNSPECIFIED_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getOrganizeBy() <em>Organize By</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOrganizeBy()
+	 * @generated
+	 * @ordered
+	 */
+	protected DB2TableOrganization organizeBy = ORGANIZE_BY_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getPackages() <em>Packages</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPackages()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList packages;
+
+	/**
+	 * The cached value of the '{@link #getPeriods() <em>Periods</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPeriods()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList periods;
+
+	/**
+	 * The cached value of the '{@link #getHistoryTable() <em>History Table</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getHistoryTable()
+	 * @generated
+	 * @ordered
+	 */
+	protected DB2Table historyTable;
+
+	/**
+	 * The cached value of the '{@link #getTemporalTable() <em>Temporal Table</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTemporalTable()
+	 * @generated
+	 * @ordered
+	 */
+	protected DB2Table temporalTable;
+
+	/**
+	 * The cached value of the '{@link #getMasks() <em>Masks</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMasks()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList masks;
+
+	/**
+	 * The cached value of the '{@link #getPermissions() <em>Permissions</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPermissions()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList permissions;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2TableImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_TABLE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DataCaptureType getDataCapture() {
+		return dataCapture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDataCapture(DataCaptureType newDataCapture) {
+		DataCaptureType oldDataCapture = dataCapture;
+		dataCapture = newDataCapture == null ? DATA_CAPTURE_EDEFAULT : newDataCapture;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_TABLE__DATA_CAPTURE, oldDataCapture, dataCapture));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isActivateRowAccessControl() {
+		return activateRowAccessControl;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setActivateRowAccessControl(boolean newActivateRowAccessControl) {
+		boolean oldActivateRowAccessControl = activateRowAccessControl;
+		activateRowAccessControl = newActivateRowAccessControl;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_TABLE__ACTIVATE_ROW_ACCESS_CONTROL, oldActivateRowAccessControl, activateRowAccessControl));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isActivateColumnAccessControl() {
+		return activateColumnAccessControl;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setActivateColumnAccessControl(boolean newActivateColumnAccessControl) {
+		boolean oldActivateColumnAccessControl = activateColumnAccessControl;
+		activateColumnAccessControl = newActivateColumnAccessControl;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_TABLE__ACTIVATE_COLUMN_ACCESS_CONTROL, oldActivateColumnAccessControl, activateColumnAccessControl));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2TableOrganization getOrganizeBy() {
+		return organizeBy;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOrganizeBy(DB2TableOrganization newOrganizeBy) {
+		DB2TableOrganization oldOrganizeBy = organizeBy;
+		organizeBy = newOrganizeBy == null ? ORGANIZE_BY_EDEFAULT : newOrganizeBy;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_TABLE__ORGANIZE_BY, oldOrganizeBy, organizeBy));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getPackages() {
+		if (packages == null) {
+			packages = new EObjectResolvingEList(DB2Package.class, this, DB2ModelPackage.DB2_TABLE__PACKAGES);
+		}
+		return packages;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getPeriods() {
+		if (periods == null) {
+			periods = new EObjectContainmentWithInverseEList(DB2Period.class, this, DB2ModelPackage.DB2_TABLE__PERIODS, DB2ModelPackage.DB2_PERIOD__TABLE);
+		}
+		return periods;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Table getHistoryTable() {
+		if (historyTable != null && historyTable.eIsProxy()) {
+			InternalEObject oldHistoryTable = (InternalEObject)historyTable;
+			historyTable = (DB2Table)eResolveProxy(oldHistoryTable);
+			if (historyTable != oldHistoryTable) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DB2ModelPackage.DB2_TABLE__HISTORY_TABLE, oldHistoryTable, historyTable));
+			}
+		}
+		return historyTable;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Table basicGetHistoryTable() {
+		return historyTable;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetHistoryTable(DB2Table newHistoryTable, NotificationChain msgs) {
+		DB2Table oldHistoryTable = historyTable;
+		historyTable = newHistoryTable;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_TABLE__HISTORY_TABLE, oldHistoryTable, newHistoryTable);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setHistoryTable(DB2Table newHistoryTable) {
+		if (newHistoryTable != historyTable) {
+			NotificationChain msgs = null;
+			if (historyTable != null)
+				msgs = ((InternalEObject)historyTable).eInverseRemove(this, DB2ModelPackage.DB2_TABLE__TEMPORAL_TABLE, DB2Table.class, msgs);
+			if (newHistoryTable != null)
+				msgs = ((InternalEObject)newHistoryTable).eInverseAdd(this, DB2ModelPackage.DB2_TABLE__TEMPORAL_TABLE, DB2Table.class, msgs);
+			msgs = basicSetHistoryTable(newHistoryTable, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_TABLE__HISTORY_TABLE, newHistoryTable, newHistoryTable));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Table getTemporalTable() {
+		if (temporalTable != null && temporalTable.eIsProxy()) {
+			InternalEObject oldTemporalTable = (InternalEObject)temporalTable;
+			temporalTable = (DB2Table)eResolveProxy(oldTemporalTable);
+			if (temporalTable != oldTemporalTable) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DB2ModelPackage.DB2_TABLE__TEMPORAL_TABLE, oldTemporalTable, temporalTable));
+			}
+		}
+		return temporalTable;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DB2Table basicGetTemporalTable() {
+		return temporalTable;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetTemporalTable(DB2Table newTemporalTable, NotificationChain msgs) {
+		DB2Table oldTemporalTable = temporalTable;
+		temporalTable = newTemporalTable;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_TABLE__TEMPORAL_TABLE, oldTemporalTable, newTemporalTable);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTemporalTable(DB2Table newTemporalTable) {
+		if (newTemporalTable != temporalTable) {
+			NotificationChain msgs = null;
+			if (temporalTable != null)
+				msgs = ((InternalEObject)temporalTable).eInverseRemove(this, DB2ModelPackage.DB2_TABLE__HISTORY_TABLE, DB2Table.class, msgs);
+			if (newTemporalTable != null)
+				msgs = ((InternalEObject)newTemporalTable).eInverseAdd(this, DB2ModelPackage.DB2_TABLE__HISTORY_TABLE, DB2Table.class, msgs);
+			msgs = basicSetTemporalTable(newTemporalTable, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_TABLE__TEMPORAL_TABLE, newTemporalTable, newTemporalTable));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getMasks() {
+		if (masks == null) {
+			masks = new EObjectWithInverseResolvingEList(DB2Mask.class, this, DB2ModelPackage.DB2_TABLE__MASKS, DB2ModelPackage.DB2_MASK__SUBJECT_TABLE);
+		}
+		return masks;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getPermissions() {
+		if (permissions == null) {
+			permissions = new EObjectWithInverseResolvingEList(DB2Permission.class, this, DB2ModelPackage.DB2_TABLE__PERMISSIONS, DB2ModelPackage.DB2_PERMISSION__SUBJECT_TABLE);
+		}
+		return permissions;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_TABLE__PERIODS:
+				return ((InternalEList)getPeriods()).basicAdd(otherEnd, msgs);
+			case DB2ModelPackage.DB2_TABLE__HISTORY_TABLE:
+				if (historyTable != null)
+					msgs = ((InternalEObject)historyTable).eInverseRemove(this, DB2ModelPackage.DB2_TABLE__TEMPORAL_TABLE, DB2Table.class, msgs);
+				return basicSetHistoryTable((DB2Table)otherEnd, msgs);
+			case DB2ModelPackage.DB2_TABLE__TEMPORAL_TABLE:
+				if (temporalTable != null)
+					msgs = ((InternalEObject)temporalTable).eInverseRemove(this, DB2ModelPackage.DB2_TABLE__HISTORY_TABLE, DB2Table.class, msgs);
+				return basicSetTemporalTable((DB2Table)otherEnd, msgs);
+			case DB2ModelPackage.DB2_TABLE__MASKS:
+				return ((InternalEList)getMasks()).basicAdd(otherEnd, msgs);
+			case DB2ModelPackage.DB2_TABLE__PERMISSIONS:
+				return ((InternalEList)getPermissions()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_TABLE__PERIODS:
+				return ((InternalEList)getPeriods()).basicRemove(otherEnd, msgs);
+			case DB2ModelPackage.DB2_TABLE__HISTORY_TABLE:
+				return basicSetHistoryTable(null, msgs);
+			case DB2ModelPackage.DB2_TABLE__TEMPORAL_TABLE:
+				return basicSetTemporalTable(null, msgs);
+			case DB2ModelPackage.DB2_TABLE__MASKS:
+				return ((InternalEList)getMasks()).basicRemove(otherEnd, msgs);
+			case DB2ModelPackage.DB2_TABLE__PERMISSIONS:
+				return ((InternalEList)getPermissions()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_TABLE__DATA_CAPTURE:
+				return getDataCapture();
+			case DB2ModelPackage.DB2_TABLE__ACTIVATE_ROW_ACCESS_CONTROL:
+				return isActivateRowAccessControl() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_TABLE__ACTIVATE_COLUMN_ACCESS_CONTROL:
+				return isActivateColumnAccessControl() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_TABLE__ORGANIZE_BY:
+				return getOrganizeBy();
+			case DB2ModelPackage.DB2_TABLE__PACKAGES:
+				return getPackages();
+			case DB2ModelPackage.DB2_TABLE__PERIODS:
+				return getPeriods();
+			case DB2ModelPackage.DB2_TABLE__HISTORY_TABLE:
+				if (resolve) return getHistoryTable();
+				return basicGetHistoryTable();
+			case DB2ModelPackage.DB2_TABLE__TEMPORAL_TABLE:
+				if (resolve) return getTemporalTable();
+				return basicGetTemporalTable();
+			case DB2ModelPackage.DB2_TABLE__MASKS:
+				return getMasks();
+			case DB2ModelPackage.DB2_TABLE__PERMISSIONS:
+				return getPermissions();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_TABLE__DATA_CAPTURE:
+				setDataCapture((DataCaptureType)newValue);
+				return;
+			case DB2ModelPackage.DB2_TABLE__ACTIVATE_ROW_ACCESS_CONTROL:
+				setActivateRowAccessControl(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_TABLE__ACTIVATE_COLUMN_ACCESS_CONTROL:
+				setActivateColumnAccessControl(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_TABLE__ORGANIZE_BY:
+				setOrganizeBy((DB2TableOrganization)newValue);
+				return;
+			case DB2ModelPackage.DB2_TABLE__PACKAGES:
+				getPackages().clear();
+				getPackages().addAll((Collection)newValue);
+				return;
+			case DB2ModelPackage.DB2_TABLE__PERIODS:
+				getPeriods().clear();
+				getPeriods().addAll((Collection)newValue);
+				return;
+			case DB2ModelPackage.DB2_TABLE__HISTORY_TABLE:
+				setHistoryTable((DB2Table)newValue);
+				return;
+			case DB2ModelPackage.DB2_TABLE__TEMPORAL_TABLE:
+				setTemporalTable((DB2Table)newValue);
+				return;
+			case DB2ModelPackage.DB2_TABLE__MASKS:
+				getMasks().clear();
+				getMasks().addAll((Collection)newValue);
+				return;
+			case DB2ModelPackage.DB2_TABLE__PERMISSIONS:
+				getPermissions().clear();
+				getPermissions().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_TABLE__DATA_CAPTURE:
+				setDataCapture(DATA_CAPTURE_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_TABLE__ACTIVATE_ROW_ACCESS_CONTROL:
+				setActivateRowAccessControl(ACTIVATE_ROW_ACCESS_CONTROL_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_TABLE__ACTIVATE_COLUMN_ACCESS_CONTROL:
+				setActivateColumnAccessControl(ACTIVATE_COLUMN_ACCESS_CONTROL_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_TABLE__ORGANIZE_BY:
+				setOrganizeBy(ORGANIZE_BY_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_TABLE__PACKAGES:
+				getPackages().clear();
+				return;
+			case DB2ModelPackage.DB2_TABLE__PERIODS:
+				getPeriods().clear();
+				return;
+			case DB2ModelPackage.DB2_TABLE__HISTORY_TABLE:
+				setHistoryTable((DB2Table)null);
+				return;
+			case DB2ModelPackage.DB2_TABLE__TEMPORAL_TABLE:
+				setTemporalTable((DB2Table)null);
+				return;
+			case DB2ModelPackage.DB2_TABLE__MASKS:
+				getMasks().clear();
+				return;
+			case DB2ModelPackage.DB2_TABLE__PERMISSIONS:
+				getPermissions().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_TABLE__DATA_CAPTURE:
+				return dataCapture != DATA_CAPTURE_EDEFAULT;
+			case DB2ModelPackage.DB2_TABLE__ACTIVATE_ROW_ACCESS_CONTROL:
+				return activateRowAccessControl != ACTIVATE_ROW_ACCESS_CONTROL_EDEFAULT;
+			case DB2ModelPackage.DB2_TABLE__ACTIVATE_COLUMN_ACCESS_CONTROL:
+				return activateColumnAccessControl != ACTIVATE_COLUMN_ACCESS_CONTROL_EDEFAULT;
+			case DB2ModelPackage.DB2_TABLE__ORGANIZE_BY:
+				return organizeBy != ORGANIZE_BY_EDEFAULT;
+			case DB2ModelPackage.DB2_TABLE__PACKAGES:
+				return packages != null && !packages.isEmpty();
+			case DB2ModelPackage.DB2_TABLE__PERIODS:
+				return periods != null && !periods.isEmpty();
+			case DB2ModelPackage.DB2_TABLE__HISTORY_TABLE:
+				return historyTable != null;
+			case DB2ModelPackage.DB2_TABLE__TEMPORAL_TABLE:
+				return temporalTable != null;
+			case DB2ModelPackage.DB2_TABLE__MASKS:
+				return masks != null && !masks.isEmpty();
+			case DB2ModelPackage.DB2_TABLE__PERMISSIONS:
+				return permissions != null && !permissions.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (dataCapture: "); //$NON-NLS-1$
+		result.append(dataCapture);
+		result.append(", activateRowAccessControl: "); //$NON-NLS-1$
+		result.append(activateRowAccessControl);
+		result.append(", activateColumnAccessControl: "); //$NON-NLS-1$
+		result.append(activateColumnAccessControl);
+		result.append(", organizeBy: "); //$NON-NLS-1$
+		result.append(organizeBy);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DB2TableImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2TransactionImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2TransactionImpl.java
new file mode 100644
index 0000000..cea1f07
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2TransactionImpl.java
@@ -0,0 +1,44 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Transaction;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 Transaction</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2TransactionImpl extends SQLObjectImpl implements DB2Transaction {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2TransactionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_TRANSACTION;
+	}
+
+} //DB2TransactionImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2TriggerImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2TriggerImpl.java
new file mode 100644
index 0000000..23f61eb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2TriggerImpl.java
@@ -0,0 +1,214 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import org.eclipse.datatools.modelbase.sql.tables.impl.TriggerImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Trigger;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 Trigger</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2TriggerImpl#isOperative <em>Operative</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2TriggerImpl#isSecured <em>Secured</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2TriggerImpl extends TriggerImpl implements DB2Trigger {
+	/**
+	 * The default value of the '{@link #isOperative() <em>Operative</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isOperative()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean OPERATIVE_EDEFAULT = true;
+
+	/**
+	 * The cached value of the '{@link #isOperative() <em>Operative</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isOperative()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean operative = OPERATIVE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isSecured() <em>Secured</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSecured()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean SECURED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isSecured() <em>Secured</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSecured()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean secured = SECURED_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2TriggerImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_TRIGGER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isOperative() {
+		return operative;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOperative(boolean newOperative) {
+		boolean oldOperative = operative;
+		operative = newOperative;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_TRIGGER__OPERATIVE, oldOperative, operative));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isSecured() {
+		return secured;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSecured(boolean newSecured) {
+		boolean oldSecured = secured;
+		secured = newSecured;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_TRIGGER__SECURED, oldSecured, secured));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_TRIGGER__OPERATIVE:
+				return isOperative() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_TRIGGER__SECURED:
+				return isSecured() ? Boolean.TRUE : Boolean.FALSE;
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_TRIGGER__OPERATIVE:
+				setOperative(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_TRIGGER__SECURED:
+				setSecured(((Boolean)newValue).booleanValue());
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_TRIGGER__OPERATIVE:
+				setOperative(OPERATIVE_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_TRIGGER__SECURED:
+				setSecured(SECURED_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_TRIGGER__OPERATIVE:
+				return operative != OPERATIVE_EDEFAULT;
+			case DB2ModelPackage.DB2_TRIGGER__SECURED:
+				return secured != SECURED_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (operative: "); //$NON-NLS-1$
+		result.append(operative);
+		result.append(", secured: "); //$NON-NLS-1$
+		result.append(secured);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DB2TriggerImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2UniqueConstraintExtensionImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2UniqueConstraintExtensionImpl.java
new file mode 100644
index 0000000..eafe076
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2UniqueConstraintExtensionImpl.java
@@ -0,0 +1,293 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2UniqueConstraintExtension;
+
+import org.eclipse.datatools.modelbase.sql.schema.ObjectExtension;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 Unique Constraint Extension</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UniqueConstraintExtensionImpl#getSQLObject <em>SQL Object</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UniqueConstraintExtensionImpl#isBusPeriodWithoutOverlap <em>Bus Period Without Overlap</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2UniqueConstraintExtensionImpl extends SQLObjectImpl implements DB2UniqueConstraintExtension {
+	/**
+	 * The default value of the '{@link #isBusPeriodWithoutOverlap() <em>Bus Period Without Overlap</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isBusPeriodWithoutOverlap()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean BUS_PERIOD_WITHOUT_OVERLAP_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isBusPeriodWithoutOverlap() <em>Bus Period Without Overlap</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isBusPeriodWithoutOverlap()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean busPeriodWithoutOverlap = BUS_PERIOD_WITHOUT_OVERLAP_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2UniqueConstraintExtensionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_UNIQUE_CONSTRAINT_EXTENSION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SQLObject getSQLObject() {
+		if (eContainerFeatureID() != DB2ModelPackage.DB2_UNIQUE_CONSTRAINT_EXTENSION__SQL_OBJECT) return null;
+		return (SQLObject)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetSQLObject(SQLObject newSQLObject, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newSQLObject, DB2ModelPackage.DB2_UNIQUE_CONSTRAINT_EXTENSION__SQL_OBJECT, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSQLObject(SQLObject newSQLObject) {
+		if (newSQLObject != eInternalContainer() || (eContainerFeatureID() != DB2ModelPackage.DB2_UNIQUE_CONSTRAINT_EXTENSION__SQL_OBJECT && newSQLObject != null)) {
+			if (EcoreUtil.isAncestor(this, newSQLObject))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newSQLObject != null)
+				msgs = ((InternalEObject)newSQLObject).eInverseAdd(this, SQLSchemaPackage.SQL_OBJECT__EXTENSIONS, SQLObject.class, msgs);
+			msgs = basicSetSQLObject(newSQLObject, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_UNIQUE_CONSTRAINT_EXTENSION__SQL_OBJECT, newSQLObject, newSQLObject));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isBusPeriodWithoutOverlap() {
+		return busPeriodWithoutOverlap;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBusPeriodWithoutOverlap(boolean newBusPeriodWithoutOverlap) {
+		boolean oldBusPeriodWithoutOverlap = busPeriodWithoutOverlap;
+		busPeriodWithoutOverlap = newBusPeriodWithoutOverlap;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_UNIQUE_CONSTRAINT_EXTENSION__BUS_PERIOD_WITHOUT_OVERLAP, oldBusPeriodWithoutOverlap, busPeriodWithoutOverlap));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_UNIQUE_CONSTRAINT_EXTENSION__SQL_OBJECT:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetSQLObject((SQLObject)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_UNIQUE_CONSTRAINT_EXTENSION__SQL_OBJECT:
+				return basicSetSQLObject(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case DB2ModelPackage.DB2_UNIQUE_CONSTRAINT_EXTENSION__SQL_OBJECT:
+				return eInternalContainer().eInverseRemove(this, SQLSchemaPackage.SQL_OBJECT__EXTENSIONS, SQLObject.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_UNIQUE_CONSTRAINT_EXTENSION__SQL_OBJECT:
+				return getSQLObject();
+			case DB2ModelPackage.DB2_UNIQUE_CONSTRAINT_EXTENSION__BUS_PERIOD_WITHOUT_OVERLAP:
+				return isBusPeriodWithoutOverlap() ? Boolean.TRUE : Boolean.FALSE;
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_UNIQUE_CONSTRAINT_EXTENSION__SQL_OBJECT:
+				setSQLObject((SQLObject)newValue);
+				return;
+			case DB2ModelPackage.DB2_UNIQUE_CONSTRAINT_EXTENSION__BUS_PERIOD_WITHOUT_OVERLAP:
+				setBusPeriodWithoutOverlap(((Boolean)newValue).booleanValue());
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_UNIQUE_CONSTRAINT_EXTENSION__SQL_OBJECT:
+				setSQLObject((SQLObject)null);
+				return;
+			case DB2ModelPackage.DB2_UNIQUE_CONSTRAINT_EXTENSION__BUS_PERIOD_WITHOUT_OVERLAP:
+				setBusPeriodWithoutOverlap(BUS_PERIOD_WITHOUT_OVERLAP_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_UNIQUE_CONSTRAINT_EXTENSION__SQL_OBJECT:
+				return getSQLObject() != null;
+			case DB2ModelPackage.DB2_UNIQUE_CONSTRAINT_EXTENSION__BUS_PERIOD_WITHOUT_OVERLAP:
+				return busPeriodWithoutOverlap != BUS_PERIOD_WITHOUT_OVERLAP_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class baseClass) {
+		if (baseClass == ObjectExtension.class) {
+			switch (derivedFeatureID) {
+				case DB2ModelPackage.DB2_UNIQUE_CONSTRAINT_EXTENSION__SQL_OBJECT: return SQLSchemaPackage.OBJECT_EXTENSION__SQL_OBJECT;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class baseClass) {
+		if (baseClass == ObjectExtension.class) {
+			switch (baseFeatureID) {
+				case SQLSchemaPackage.OBJECT_EXTENSION__SQL_OBJECT: return DB2ModelPackage.DB2_UNIQUE_CONSTRAINT_EXTENSION__SQL_OBJECT;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (busPeriodWithoutOverlap: "); //$NON-NLS-1$
+		result.append(busPeriodWithoutOverlap);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DB2UniqueConstraintExtensionImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2UserDefinedFunctionImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2UserDefinedFunctionImpl.java
new file mode 100644
index 0000000..a8a6b15
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2UserDefinedFunctionImpl.java
@@ -0,0 +1,1766 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.modelbase.sql.routines.impl.UserDefinedFunctionImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2AccessPlan;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ExtendedOptions;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Function;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Routine;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2RoutineExtension;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2UserDefinedFunction;
+import org.eclipse.datatools.enablement.ibm.db2.model.OriginType;
+import org.eclipse.datatools.enablement.ibm.db2.model.SourceDialect;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 User Defined Function</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl#getFenced <em>Fenced</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl#getThreadsafe <em>Threadsafe</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl#isDbInfo <em>Db Info</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl#isImplicitSchema <em>Implicit Schema</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl#isFederated <em>Federated</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl#getParmCcsid <em>Parm Ccsid</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl#getSpecialRegister <em>Special Register</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl#getChangeState <em>Change State</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl#getDebugId <em>Debug Id</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl#getProgramType <em>Program Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl#getOrigSchemaName <em>Orig Schema Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl#getOrigParmSig <em>Orig Parm Sig</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl#getExtendedOptions <em>Extended Options</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl#getRoutineExtensions <em>Routine Extensions</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl#isFinalCall <em>Final Call</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl#isScratchPad <em>Scratch Pad</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl#getScratchPadLength <em>Scratch Pad Length</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl#getFunctionType <em>Function Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl#getPredicate <em>Predicate</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl#isExternalAction <em>External Action</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl#getCardinality <em>Cardinality</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl#isAllowParallel <em>Allow Parallel</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl#getReturnClause <em>Return Clause</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl#getOrigin <em>Origin</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl#isInheritLockRequest <em>Inherit Lock Request</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl#getDialect <em>Dialect</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl#isInline <em>Inline</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl#getVersion <em>Version</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2UserDefinedFunctionImpl#isSecured <em>Secured</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2UserDefinedFunctionImpl extends UserDefinedFunctionImpl implements DB2UserDefinedFunction {
+	/**
+	 * The default value of the '{@link #getFenced() <em>Fenced</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFenced()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String FENCED_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getFenced() <em>Fenced</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFenced()
+	 * @generated
+	 * @ordered
+	 */
+	protected String fenced = FENCED_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getThreadsafe() <em>Threadsafe</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getThreadsafe()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String THREADSAFE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getThreadsafe() <em>Threadsafe</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getThreadsafe()
+	 * @generated
+	 * @ordered
+	 */
+	protected String threadsafe = THREADSAFE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isDbInfo() <em>Db Info</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDbInfo()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean DB_INFO_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isDbInfo() <em>Db Info</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDbInfo()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean dbInfo = DB_INFO_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isImplicitSchema() <em>Implicit Schema</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isImplicitSchema()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean IMPLICIT_SCHEMA_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isImplicitSchema() <em>Implicit Schema</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isImplicitSchema()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean implicitSchema = IMPLICIT_SCHEMA_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isFederated() <em>Federated</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isFederated()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean FEDERATED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isFederated() <em>Federated</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isFederated()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean federated = FEDERATED_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getParmCcsid() <em>Parm Ccsid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getParmCcsid()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String PARM_CCSID_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getParmCcsid() <em>Parm Ccsid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getParmCcsid()
+	 * @generated
+	 * @ordered
+	 */
+	protected String parmCcsid = PARM_CCSID_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getSpecialRegister() <em>Special Register</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSpecialRegister()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String SPECIAL_REGISTER_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getSpecialRegister() <em>Special Register</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSpecialRegister()
+	 * @generated
+	 * @ordered
+	 */
+	protected String specialRegister = SPECIAL_REGISTER_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getChangeState() <em>Change State</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getChangeState()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final int CHANGE_STATE_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getChangeState() <em>Change State</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getChangeState()
+	 * @generated
+	 * @ordered
+	 */
+   protected int changeState = CHANGE_STATE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getDebugId() <em>Debug Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getDebugId()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String DEBUG_ID_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getDebugId() <em>Debug Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getDebugId()
+	 * @generated
+	 * @ordered
+	 */
+   protected String debugId = DEBUG_ID_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getProgramType() <em>Program Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getProgramType()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String PROGRAM_TYPE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getProgramType() <em>Program Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getProgramType()
+	 * @generated
+	 * @ordered
+	 */
+   protected String programType = PROGRAM_TYPE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getOrigSchemaName() <em>Orig Schema Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getOrigSchemaName()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String ORIG_SCHEMA_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getOrigSchemaName() <em>Orig Schema Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getOrigSchemaName()
+	 * @generated
+	 * @ordered
+	 */
+   protected String origSchemaName = ORIG_SCHEMA_NAME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getOrigParmSig() <em>Orig Parm Sig</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getOrigParmSig()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String ORIG_PARM_SIG_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getOrigParmSig() <em>Orig Parm Sig</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getOrigParmSig()
+	 * @generated
+	 * @ordered
+	 */
+   protected String origParmSig = ORIG_PARM_SIG_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getExtendedOptions() <em>Extended Options</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getExtendedOptions()
+	 * @generated
+	 * @ordered
+	 */
+   protected EList extendedOptions;
+
+	/**
+	 * The cached value of the '{@link #getRoutineExtensions() <em>Routine Extensions</em>}' reference list.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getRoutineExtensions()
+	 * @generated
+	 * @ordered
+	 */
+   protected EList routineExtensions;
+
+	/**
+	 * The default value of the '{@link #isFinalCall() <em>Final Call</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isFinalCall()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean FINAL_CALL_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isFinalCall() <em>Final Call</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isFinalCall()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean finalCall = FINAL_CALL_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isScratchPad() <em>Scratch Pad</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isScratchPad()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean SCRATCH_PAD_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isScratchPad() <em>Scratch Pad</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isScratchPad()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean scratchPad = SCRATCH_PAD_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getScratchPadLength() <em>Scratch Pad Length</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getScratchPadLength()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int SCRATCH_PAD_LENGTH_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getScratchPadLength() <em>Scratch Pad Length</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getScratchPadLength()
+	 * @generated
+	 * @ordered
+	 */
+	protected int scratchPadLength = SCRATCH_PAD_LENGTH_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getFunctionType() <em>Function Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFunctionType()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String FUNCTION_TYPE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getFunctionType() <em>Function Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFunctionType()
+	 * @generated
+	 * @ordered
+	 */
+	protected String functionType = FUNCTION_TYPE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getPredicate() <em>Predicate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPredicate()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String PREDICATE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getPredicate() <em>Predicate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPredicate()
+	 * @generated
+	 * @ordered
+	 */
+	protected String predicate = PREDICATE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isExternalAction() <em>External Action</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #isExternalAction()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final boolean EXTERNAL_ACTION_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isExternalAction() <em>External Action</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #isExternalAction()
+	 * @generated
+	 * @ordered
+	 */
+   protected boolean externalAction = EXTERNAL_ACTION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getCardinality() <em>Cardinality</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getCardinality()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final int CARDINALITY_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getCardinality() <em>Cardinality</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getCardinality()
+	 * @generated
+	 * @ordered
+	 */
+   protected int cardinality = CARDINALITY_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isAllowParallel() <em>Allow Parallel</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #isAllowParallel()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final boolean ALLOW_PARALLEL_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isAllowParallel() <em>Allow Parallel</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #isAllowParallel()
+	 * @generated
+	 * @ordered
+	 */
+   protected boolean allowParallel = ALLOW_PARALLEL_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getReturnClause() <em>Return Clause</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getReturnClause()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String RETURN_CLAUSE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getReturnClause() <em>Return Clause</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getReturnClause()
+	 * @generated
+	 * @ordered
+	 */
+   protected String returnClause = RETURN_CLAUSE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getOrigin() <em>Origin</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOrigin()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final OriginType ORIGIN_EDEFAULT = OriginType.NONE_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getOrigin() <em>Origin</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOrigin()
+	 * @generated
+	 * @ordered
+	 */
+	protected OriginType origin = ORIGIN_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isInheritLockRequest() <em>Inherit Lock Request</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isInheritLockRequest()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean INHERIT_LOCK_REQUEST_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isInheritLockRequest() <em>Inherit Lock Request</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isInheritLockRequest()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean inheritLockRequest = INHERIT_LOCK_REQUEST_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getDialect() <em>Dialect</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDialect()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final SourceDialect DIALECT_EDEFAULT = SourceDialect.UNKNOWN_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getDialect() <em>Dialect</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDialect()
+	 * @generated
+	 * @ordered
+	 */
+	protected SourceDialect dialect = DIALECT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isInline() <em>Inline</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isInline()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean INLINE_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isInline() <em>Inline</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isInline()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean inline = INLINE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getVersion() <em>Version</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getVersion()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String VERSION_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getVersion() <em>Version</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getVersion()
+	 * @generated
+	 * @ordered
+	 */
+	protected String version = VERSION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isSecured() <em>Secured</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSecured()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean SECURED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isSecured() <em>Secured</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSecured()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean secured = SECURED_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2UserDefinedFunctionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_USER_DEFINED_FUNCTION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getFenced() {
+		return fenced;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFenced(String newFenced) {
+		String oldFenced = fenced;
+		fenced = newFenced;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FENCED, oldFenced, fenced));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getThreadsafe() {
+		return threadsafe;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setThreadsafe(String newThreadsafe) {
+		String oldThreadsafe = threadsafe;
+		threadsafe = newThreadsafe;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__THREADSAFE, oldThreadsafe, threadsafe));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isDbInfo() {
+		return dbInfo;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDbInfo(boolean newDbInfo) {
+		boolean oldDbInfo = dbInfo;
+		dbInfo = newDbInfo;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__DB_INFO, oldDbInfo, dbInfo));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isImplicitSchema() {
+		return implicitSchema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setImplicitSchema(boolean newImplicitSchema) {
+		boolean oldImplicitSchema = implicitSchema;
+		implicitSchema = newImplicitSchema;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__IMPLICIT_SCHEMA, oldImplicitSchema, implicitSchema));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isFederated() {
+		return federated;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFederated(boolean newFederated) {
+		boolean oldFederated = federated;
+		federated = newFederated;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FEDERATED, oldFederated, federated));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getParmCcsid() {
+		return parmCcsid;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParmCcsid(String newParmCcsid) {
+		String oldParmCcsid = parmCcsid;
+		parmCcsid = newParmCcsid;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__PARM_CCSID, oldParmCcsid, parmCcsid));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getSpecialRegister() {
+		return specialRegister;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSpecialRegister(String newSpecialRegister) {
+		String oldSpecialRegister = specialRegister;
+		specialRegister = newSpecialRegister;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SPECIAL_REGISTER, oldSpecialRegister, specialRegister));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public int getChangeState() {
+		return changeState;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setChangeState(int newChangeState) {
+		int oldChangeState = changeState;
+		changeState = newChangeState;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__CHANGE_STATE, oldChangeState, changeState));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getDebugId() {
+		return debugId;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setDebugId(String newDebugId) {
+		String oldDebugId = debugId;
+		debugId = newDebugId;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__DEBUG_ID, oldDebugId, debugId));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getProgramType() {
+		return programType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setProgramType(String newProgramType) {
+		String oldProgramType = programType;
+		programType = newProgramType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__PROGRAM_TYPE, oldProgramType, programType));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getOrigSchemaName() {
+		return origSchemaName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setOrigSchemaName(String newOrigSchemaName) {
+		String oldOrigSchemaName = origSchemaName;
+		origSchemaName = newOrigSchemaName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ORIG_SCHEMA_NAME, oldOrigSchemaName, origSchemaName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getOrigParmSig() {
+		return origParmSig;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setOrigParmSig(String newOrigParmSig) {
+		String oldOrigParmSig = origParmSig;
+		origParmSig = newOrigParmSig;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ORIG_PARM_SIG, oldOrigParmSig, origParmSig));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public EList getExtendedOptions() {
+		if (extendedOptions == null) {
+			extendedOptions = new EObjectContainmentEList(DB2ExtendedOptions.class, this, DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__EXTENDED_OPTIONS);
+		}
+		return extendedOptions;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public EList getRoutineExtensions() {
+		if (routineExtensions == null) {
+			routineExtensions = new EObjectResolvingEList(DB2RoutineExtension.class, this, DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ROUTINE_EXTENSIONS);
+		}
+		return routineExtensions;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isFinalCall() {
+		return finalCall;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFinalCall(boolean newFinalCall) {
+		boolean oldFinalCall = finalCall;
+		finalCall = newFinalCall;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FINAL_CALL, oldFinalCall, finalCall));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isScratchPad() {
+		return scratchPad;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setScratchPad(boolean newScratchPad) {
+		boolean oldScratchPad = scratchPad;
+		scratchPad = newScratchPad;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SCRATCH_PAD, oldScratchPad, scratchPad));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getScratchPadLength() {
+		return scratchPadLength;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setScratchPadLength(int newScratchPadLength) {
+		int oldScratchPadLength = scratchPadLength;
+		scratchPadLength = newScratchPadLength;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SCRATCH_PAD_LENGTH, oldScratchPadLength, scratchPadLength));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getFunctionType() {
+		return functionType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFunctionType(String newFunctionType) {
+		String oldFunctionType = functionType;
+		functionType = newFunctionType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FUNCTION_TYPE, oldFunctionType, functionType));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getPredicate() {
+		return predicate;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPredicate(String newPredicate) {
+		String oldPredicate = predicate;
+		predicate = newPredicate;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__PREDICATE, oldPredicate, predicate));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public boolean isExternalAction() {
+		return externalAction;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setExternalAction(boolean newExternalAction) {
+		boolean oldExternalAction = externalAction;
+		externalAction = newExternalAction;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__EXTERNAL_ACTION, oldExternalAction, externalAction));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public int getCardinality() {
+		return cardinality;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setCardinality(int newCardinality) {
+		int oldCardinality = cardinality;
+		cardinality = newCardinality;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__CARDINALITY, oldCardinality, cardinality));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public boolean isAllowParallel() {
+		return allowParallel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setAllowParallel(boolean newAllowParallel) {
+		boolean oldAllowParallel = allowParallel;
+		allowParallel = newAllowParallel;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ALLOW_PARALLEL, oldAllowParallel, allowParallel));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getReturnClause() {
+		return returnClause;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setReturnClause(String newReturnClause) {
+		String oldReturnClause = returnClause;
+		returnClause = newReturnClause;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__RETURN_CLAUSE, oldReturnClause, returnClause));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public OriginType getOrigin() {
+		return origin;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOrigin(OriginType newOrigin) {
+		OriginType oldOrigin = origin;
+		origin = newOrigin == null ? ORIGIN_EDEFAULT : newOrigin;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ORIGIN, oldOrigin, origin));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isInheritLockRequest() {
+		return inheritLockRequest;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setInheritLockRequest(boolean newInheritLockRequest) {
+		boolean oldInheritLockRequest = inheritLockRequest;
+		inheritLockRequest = newInheritLockRequest;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__INHERIT_LOCK_REQUEST, oldInheritLockRequest, inheritLockRequest));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SourceDialect getDialect() {
+		return dialect;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDialect(SourceDialect newDialect) {
+		SourceDialect oldDialect = dialect;
+		dialect = newDialect == null ? DIALECT_EDEFAULT : newDialect;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__DIALECT, oldDialect, dialect));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isInline() {
+		return inline;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setInline(boolean newInline) {
+		boolean oldInline = inline;
+		inline = newInline;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__INLINE, oldInline, inline));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getVersion() {
+		return version;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setVersion(String newVersion) {
+		String oldVersion = version;
+		version = newVersion;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__VERSION, oldVersion, version));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isSecured() {
+		return secured;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSecured(boolean newSecured) {
+		boolean oldSecured = secured;
+		secured = newSecured;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SECURED, oldSecured, secured));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__EXTENDED_OPTIONS:
+				return ((InternalEList)getExtendedOptions()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FENCED:
+				return getFenced();
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__THREADSAFE:
+				return getThreadsafe();
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__DB_INFO:
+				return isDbInfo() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__IMPLICIT_SCHEMA:
+				return isImplicitSchema() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FEDERATED:
+				return isFederated() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__PARM_CCSID:
+				return getParmCcsid();
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SPECIAL_REGISTER:
+				return getSpecialRegister();
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__CHANGE_STATE:
+				return new Integer(getChangeState());
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__DEBUG_ID:
+				return getDebugId();
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__PROGRAM_TYPE:
+				return getProgramType();
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ORIG_SCHEMA_NAME:
+				return getOrigSchemaName();
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ORIG_PARM_SIG:
+				return getOrigParmSig();
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__EXTENDED_OPTIONS:
+				return getExtendedOptions();
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ROUTINE_EXTENSIONS:
+				return getRoutineExtensions();
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FINAL_CALL:
+				return isFinalCall() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SCRATCH_PAD:
+				return isScratchPad() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SCRATCH_PAD_LENGTH:
+				return new Integer(getScratchPadLength());
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FUNCTION_TYPE:
+				return getFunctionType();
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__PREDICATE:
+				return getPredicate();
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__EXTERNAL_ACTION:
+				return isExternalAction() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__CARDINALITY:
+				return new Integer(getCardinality());
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ALLOW_PARALLEL:
+				return isAllowParallel() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__RETURN_CLAUSE:
+				return getReturnClause();
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ORIGIN:
+				return getOrigin();
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__INHERIT_LOCK_REQUEST:
+				return isInheritLockRequest() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__DIALECT:
+				return getDialect();
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__INLINE:
+				return isInline() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__VERSION:
+				return getVersion();
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SECURED:
+				return isSecured() ? Boolean.TRUE : Boolean.FALSE;
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FENCED:
+				setFenced((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__THREADSAFE:
+				setThreadsafe((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__DB_INFO:
+				setDbInfo(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__IMPLICIT_SCHEMA:
+				setImplicitSchema(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FEDERATED:
+				setFederated(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__PARM_CCSID:
+				setParmCcsid((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SPECIAL_REGISTER:
+				setSpecialRegister((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__CHANGE_STATE:
+				setChangeState(((Integer)newValue).intValue());
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__DEBUG_ID:
+				setDebugId((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__PROGRAM_TYPE:
+				setProgramType((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ORIG_SCHEMA_NAME:
+				setOrigSchemaName((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ORIG_PARM_SIG:
+				setOrigParmSig((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__EXTENDED_OPTIONS:
+				getExtendedOptions().clear();
+				getExtendedOptions().addAll((Collection)newValue);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ROUTINE_EXTENSIONS:
+				getRoutineExtensions().clear();
+				getRoutineExtensions().addAll((Collection)newValue);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FINAL_CALL:
+				setFinalCall(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SCRATCH_PAD:
+				setScratchPad(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SCRATCH_PAD_LENGTH:
+				setScratchPadLength(((Integer)newValue).intValue());
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FUNCTION_TYPE:
+				setFunctionType((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__PREDICATE:
+				setPredicate((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__EXTERNAL_ACTION:
+				setExternalAction(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__CARDINALITY:
+				setCardinality(((Integer)newValue).intValue());
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ALLOW_PARALLEL:
+				setAllowParallel(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__RETURN_CLAUSE:
+				setReturnClause((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ORIGIN:
+				setOrigin((OriginType)newValue);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__INHERIT_LOCK_REQUEST:
+				setInheritLockRequest(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__DIALECT:
+				setDialect((SourceDialect)newValue);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__INLINE:
+				setInline(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__VERSION:
+				setVersion((String)newValue);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SECURED:
+				setSecured(((Boolean)newValue).booleanValue());
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FENCED:
+				setFenced(FENCED_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__THREADSAFE:
+				setThreadsafe(THREADSAFE_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__DB_INFO:
+				setDbInfo(DB_INFO_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__IMPLICIT_SCHEMA:
+				setImplicitSchema(IMPLICIT_SCHEMA_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FEDERATED:
+				setFederated(FEDERATED_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__PARM_CCSID:
+				setParmCcsid(PARM_CCSID_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SPECIAL_REGISTER:
+				setSpecialRegister(SPECIAL_REGISTER_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__CHANGE_STATE:
+				setChangeState(CHANGE_STATE_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__DEBUG_ID:
+				setDebugId(DEBUG_ID_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__PROGRAM_TYPE:
+				setProgramType(PROGRAM_TYPE_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ORIG_SCHEMA_NAME:
+				setOrigSchemaName(ORIG_SCHEMA_NAME_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ORIG_PARM_SIG:
+				setOrigParmSig(ORIG_PARM_SIG_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__EXTENDED_OPTIONS:
+				getExtendedOptions().clear();
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ROUTINE_EXTENSIONS:
+				getRoutineExtensions().clear();
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FINAL_CALL:
+				setFinalCall(FINAL_CALL_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SCRATCH_PAD:
+				setScratchPad(SCRATCH_PAD_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SCRATCH_PAD_LENGTH:
+				setScratchPadLength(SCRATCH_PAD_LENGTH_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FUNCTION_TYPE:
+				setFunctionType(FUNCTION_TYPE_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__PREDICATE:
+				setPredicate(PREDICATE_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__EXTERNAL_ACTION:
+				setExternalAction(EXTERNAL_ACTION_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__CARDINALITY:
+				setCardinality(CARDINALITY_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ALLOW_PARALLEL:
+				setAllowParallel(ALLOW_PARALLEL_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__RETURN_CLAUSE:
+				setReturnClause(RETURN_CLAUSE_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ORIGIN:
+				setOrigin(ORIGIN_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__INHERIT_LOCK_REQUEST:
+				setInheritLockRequest(INHERIT_LOCK_REQUEST_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__DIALECT:
+				setDialect(DIALECT_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__INLINE:
+				setInline(INLINE_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__VERSION:
+				setVersion(VERSION_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SECURED:
+				setSecured(SECURED_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FENCED:
+				return FENCED_EDEFAULT == null ? fenced != null : !FENCED_EDEFAULT.equals(fenced);
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__THREADSAFE:
+				return THREADSAFE_EDEFAULT == null ? threadsafe != null : !THREADSAFE_EDEFAULT.equals(threadsafe);
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__DB_INFO:
+				return dbInfo != DB_INFO_EDEFAULT;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__IMPLICIT_SCHEMA:
+				return implicitSchema != IMPLICIT_SCHEMA_EDEFAULT;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FEDERATED:
+				return federated != FEDERATED_EDEFAULT;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__PARM_CCSID:
+				return PARM_CCSID_EDEFAULT == null ? parmCcsid != null : !PARM_CCSID_EDEFAULT.equals(parmCcsid);
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SPECIAL_REGISTER:
+				return SPECIAL_REGISTER_EDEFAULT == null ? specialRegister != null : !SPECIAL_REGISTER_EDEFAULT.equals(specialRegister);
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__CHANGE_STATE:
+				return changeState != CHANGE_STATE_EDEFAULT;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__DEBUG_ID:
+				return DEBUG_ID_EDEFAULT == null ? debugId != null : !DEBUG_ID_EDEFAULT.equals(debugId);
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__PROGRAM_TYPE:
+				return PROGRAM_TYPE_EDEFAULT == null ? programType != null : !PROGRAM_TYPE_EDEFAULT.equals(programType);
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ORIG_SCHEMA_NAME:
+				return ORIG_SCHEMA_NAME_EDEFAULT == null ? origSchemaName != null : !ORIG_SCHEMA_NAME_EDEFAULT.equals(origSchemaName);
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ORIG_PARM_SIG:
+				return ORIG_PARM_SIG_EDEFAULT == null ? origParmSig != null : !ORIG_PARM_SIG_EDEFAULT.equals(origParmSig);
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__EXTENDED_OPTIONS:
+				return extendedOptions != null && !extendedOptions.isEmpty();
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ROUTINE_EXTENSIONS:
+				return routineExtensions != null && !routineExtensions.isEmpty();
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FINAL_CALL:
+				return finalCall != FINAL_CALL_EDEFAULT;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SCRATCH_PAD:
+				return scratchPad != SCRATCH_PAD_EDEFAULT;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SCRATCH_PAD_LENGTH:
+				return scratchPadLength != SCRATCH_PAD_LENGTH_EDEFAULT;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FUNCTION_TYPE:
+				return FUNCTION_TYPE_EDEFAULT == null ? functionType != null : !FUNCTION_TYPE_EDEFAULT.equals(functionType);
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__PREDICATE:
+				return PREDICATE_EDEFAULT == null ? predicate != null : !PREDICATE_EDEFAULT.equals(predicate);
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__EXTERNAL_ACTION:
+				return externalAction != EXTERNAL_ACTION_EDEFAULT;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__CARDINALITY:
+				return cardinality != CARDINALITY_EDEFAULT;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ALLOW_PARALLEL:
+				return allowParallel != ALLOW_PARALLEL_EDEFAULT;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__RETURN_CLAUSE:
+				return RETURN_CLAUSE_EDEFAULT == null ? returnClause != null : !RETURN_CLAUSE_EDEFAULT.equals(returnClause);
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ORIGIN:
+				return origin != ORIGIN_EDEFAULT;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__INHERIT_LOCK_REQUEST:
+				return inheritLockRequest != INHERIT_LOCK_REQUEST_EDEFAULT;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__DIALECT:
+				return dialect != DIALECT_EDEFAULT;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__INLINE:
+				return inline != INLINE_EDEFAULT;
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__VERSION:
+				return VERSION_EDEFAULT == null ? version != null : !VERSION_EDEFAULT.equals(version);
+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SECURED:
+				return secured != SECURED_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class baseClass) {
+		if (baseClass == DB2AccessPlan.class) {
+			switch (derivedFeatureID) {
+				default: return -1;
+			}
+		}
+		if (baseClass == DB2Routine.class) {
+			switch (derivedFeatureID) {
+				case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FENCED: return DB2ModelPackage.DB2_ROUTINE__FENCED;
+				case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__THREADSAFE: return DB2ModelPackage.DB2_ROUTINE__THREADSAFE;
+				case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__DB_INFO: return DB2ModelPackage.DB2_ROUTINE__DB_INFO;
+				case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__IMPLICIT_SCHEMA: return DB2ModelPackage.DB2_ROUTINE__IMPLICIT_SCHEMA;
+				case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FEDERATED: return DB2ModelPackage.DB2_ROUTINE__FEDERATED;
+				case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__PARM_CCSID: return DB2ModelPackage.DB2_ROUTINE__PARM_CCSID;
+				case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SPECIAL_REGISTER: return DB2ModelPackage.DB2_ROUTINE__SPECIAL_REGISTER;
+				case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__CHANGE_STATE: return DB2ModelPackage.DB2_ROUTINE__CHANGE_STATE;
+				case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__DEBUG_ID: return DB2ModelPackage.DB2_ROUTINE__DEBUG_ID;
+				case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__PROGRAM_TYPE: return DB2ModelPackage.DB2_ROUTINE__PROGRAM_TYPE;
+				case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ORIG_SCHEMA_NAME: return DB2ModelPackage.DB2_ROUTINE__ORIG_SCHEMA_NAME;
+				case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ORIG_PARM_SIG: return DB2ModelPackage.DB2_ROUTINE__ORIG_PARM_SIG;
+				case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__EXTENDED_OPTIONS: return DB2ModelPackage.DB2_ROUTINE__EXTENDED_OPTIONS;
+				case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ROUTINE_EXTENSIONS: return DB2ModelPackage.DB2_ROUTINE__ROUTINE_EXTENSIONS;
+				default: return -1;
+			}
+		}
+		if (baseClass == DB2Function.class) {
+			switch (derivedFeatureID) {
+				case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FINAL_CALL: return DB2ModelPackage.DB2_FUNCTION__FINAL_CALL;
+				case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SCRATCH_PAD: return DB2ModelPackage.DB2_FUNCTION__SCRATCH_PAD;
+				case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SCRATCH_PAD_LENGTH: return DB2ModelPackage.DB2_FUNCTION__SCRATCH_PAD_LENGTH;
+				case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FUNCTION_TYPE: return DB2ModelPackage.DB2_FUNCTION__FUNCTION_TYPE;
+				case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__PREDICATE: return DB2ModelPackage.DB2_FUNCTION__PREDICATE;
+				case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__EXTERNAL_ACTION: return DB2ModelPackage.DB2_FUNCTION__EXTERNAL_ACTION;
+				case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__CARDINALITY: return DB2ModelPackage.DB2_FUNCTION__CARDINALITY;
+				case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ALLOW_PARALLEL: return DB2ModelPackage.DB2_FUNCTION__ALLOW_PARALLEL;
+				case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__RETURN_CLAUSE: return DB2ModelPackage.DB2_FUNCTION__RETURN_CLAUSE;
+				case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ORIGIN: return DB2ModelPackage.DB2_FUNCTION__ORIGIN;
+				case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__INHERIT_LOCK_REQUEST: return DB2ModelPackage.DB2_FUNCTION__INHERIT_LOCK_REQUEST;
+				case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__DIALECT: return DB2ModelPackage.DB2_FUNCTION__DIALECT;
+				case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__INLINE: return DB2ModelPackage.DB2_FUNCTION__INLINE;
+				case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__VERSION: return DB2ModelPackage.DB2_FUNCTION__VERSION;
+				case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SECURED: return DB2ModelPackage.DB2_FUNCTION__SECURED;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class baseClass) {
+		if (baseClass == DB2AccessPlan.class) {
+			switch (baseFeatureID) {
+				default: return -1;
+			}
+		}
+		if (baseClass == DB2Routine.class) {
+			switch (baseFeatureID) {
+				case DB2ModelPackage.DB2_ROUTINE__FENCED: return DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FENCED;
+				case DB2ModelPackage.DB2_ROUTINE__THREADSAFE: return DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__THREADSAFE;
+				case DB2ModelPackage.DB2_ROUTINE__DB_INFO: return DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__DB_INFO;
+				case DB2ModelPackage.DB2_ROUTINE__IMPLICIT_SCHEMA: return DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__IMPLICIT_SCHEMA;
+				case DB2ModelPackage.DB2_ROUTINE__FEDERATED: return DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FEDERATED;
+				case DB2ModelPackage.DB2_ROUTINE__PARM_CCSID: return DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__PARM_CCSID;
+				case DB2ModelPackage.DB2_ROUTINE__SPECIAL_REGISTER: return DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SPECIAL_REGISTER;
+				case DB2ModelPackage.DB2_ROUTINE__CHANGE_STATE: return DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__CHANGE_STATE;
+				case DB2ModelPackage.DB2_ROUTINE__DEBUG_ID: return DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__DEBUG_ID;
+				case DB2ModelPackage.DB2_ROUTINE__PROGRAM_TYPE: return DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__PROGRAM_TYPE;
+				case DB2ModelPackage.DB2_ROUTINE__ORIG_SCHEMA_NAME: return DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ORIG_SCHEMA_NAME;
+				case DB2ModelPackage.DB2_ROUTINE__ORIG_PARM_SIG: return DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ORIG_PARM_SIG;
+				case DB2ModelPackage.DB2_ROUTINE__EXTENDED_OPTIONS: return DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__EXTENDED_OPTIONS;
+				case DB2ModelPackage.DB2_ROUTINE__ROUTINE_EXTENSIONS: return DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ROUTINE_EXTENSIONS;
+				default: return -1;
+			}
+		}
+		if (baseClass == DB2Function.class) {
+			switch (baseFeatureID) {
+				case DB2ModelPackage.DB2_FUNCTION__FINAL_CALL: return DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FINAL_CALL;
+				case DB2ModelPackage.DB2_FUNCTION__SCRATCH_PAD: return DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SCRATCH_PAD;
+				case DB2ModelPackage.DB2_FUNCTION__SCRATCH_PAD_LENGTH: return DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SCRATCH_PAD_LENGTH;
+				case DB2ModelPackage.DB2_FUNCTION__FUNCTION_TYPE: return DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__FUNCTION_TYPE;
+				case DB2ModelPackage.DB2_FUNCTION__PREDICATE: return DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__PREDICATE;
+				case DB2ModelPackage.DB2_FUNCTION__EXTERNAL_ACTION: return DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__EXTERNAL_ACTION;
+				case DB2ModelPackage.DB2_FUNCTION__CARDINALITY: return DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__CARDINALITY;
+				case DB2ModelPackage.DB2_FUNCTION__ALLOW_PARALLEL: return DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ALLOW_PARALLEL;
+				case DB2ModelPackage.DB2_FUNCTION__RETURN_CLAUSE: return DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__RETURN_CLAUSE;
+				case DB2ModelPackage.DB2_FUNCTION__ORIGIN: return DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__ORIGIN;
+				case DB2ModelPackage.DB2_FUNCTION__INHERIT_LOCK_REQUEST: return DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__INHERIT_LOCK_REQUEST;
+				case DB2ModelPackage.DB2_FUNCTION__DIALECT: return DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__DIALECT;
+				case DB2ModelPackage.DB2_FUNCTION__INLINE: return DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__INLINE;
+				case DB2ModelPackage.DB2_FUNCTION__VERSION: return DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__VERSION;
+				case DB2ModelPackage.DB2_FUNCTION__SECURED: return DB2ModelPackage.DB2_USER_DEFINED_FUNCTION__SECURED;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (fenced: "); //$NON-NLS-1$
+		result.append(fenced);
+		result.append(", threadsafe: "); //$NON-NLS-1$
+		result.append(threadsafe);
+		result.append(", dbInfo: "); //$NON-NLS-1$
+		result.append(dbInfo);
+		result.append(", implicitSchema: "); //$NON-NLS-1$
+		result.append(implicitSchema);
+		result.append(", federated: "); //$NON-NLS-1$
+		result.append(federated);
+		result.append(", parmCcsid: "); //$NON-NLS-1$
+		result.append(parmCcsid);
+		result.append(", specialRegister: "); //$NON-NLS-1$
+		result.append(specialRegister);
+		result.append(", changeState: "); //$NON-NLS-1$
+		result.append(changeState);
+		result.append(", debugId: "); //$NON-NLS-1$
+		result.append(debugId);
+		result.append(", programType: "); //$NON-NLS-1$
+		result.append(programType);
+		result.append(", origSchemaName: "); //$NON-NLS-1$
+		result.append(origSchemaName);
+		result.append(", origParmSig: "); //$NON-NLS-1$
+		result.append(origParmSig);
+		result.append(", finalCall: "); //$NON-NLS-1$
+		result.append(finalCall);
+		result.append(", scratchPad: "); //$NON-NLS-1$
+		result.append(scratchPad);
+		result.append(", scratchPadLength: "); //$NON-NLS-1$
+		result.append(scratchPadLength);
+		result.append(", functionType: "); //$NON-NLS-1$
+		result.append(functionType);
+		result.append(", predicate: "); //$NON-NLS-1$
+		result.append(predicate);
+		result.append(", externalAction: "); //$NON-NLS-1$
+		result.append(externalAction);
+		result.append(", cardinality: "); //$NON-NLS-1$
+		result.append(cardinality);
+		result.append(", allowParallel: "); //$NON-NLS-1$
+		result.append(allowParallel);
+		result.append(", returnClause: "); //$NON-NLS-1$
+		result.append(returnClause);
+		result.append(", origin: "); //$NON-NLS-1$
+		result.append(origin);
+		result.append(", inheritLockRequest: "); //$NON-NLS-1$
+		result.append(inheritLockRequest);
+		result.append(", dialect: "); //$NON-NLS-1$
+		result.append(dialect);
+		result.append(", inline: "); //$NON-NLS-1$
+		result.append(inline);
+		result.append(", version: "); //$NON-NLS-1$
+		result.append(version);
+		result.append(", secured: "); //$NON-NLS-1$
+		result.append(secured);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DB2UserDefinedFunctionImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2ViewImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2ViewImpl.java
new file mode 100644
index 0000000..fd44672
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2ViewImpl.java
@@ -0,0 +1,160 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * %W%
+ * @version %I% %H%
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import org.eclipse.datatools.modelbase.sql.tables.impl.ViewTableImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2View;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2 View</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2ViewImpl#isOperative <em>Operative</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2ViewImpl extends ViewTableImpl implements DB2View {
+	/**
+	 * The default value of the '{@link #isOperative() <em>Operative</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isOperative()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean OPERATIVE_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isOperative() <em>Operative</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isOperative()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean operative = OPERATIVE_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DB2ViewImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2_VIEW;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isOperative() {
+		return operative;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOperative(boolean newOperative) {
+		boolean oldOperative = operative;
+		operative = newOperative;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2_VIEW__OPERATIVE, oldOperative, operative));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_VIEW__OPERATIVE:
+				return isOperative() ? Boolean.TRUE : Boolean.FALSE;
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_VIEW__OPERATIVE:
+				setOperative(((Boolean)newValue).booleanValue());
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_VIEW__OPERATIVE:
+				setOperative(OPERATIVE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2_VIEW__OPERATIVE:
+				return operative != OPERATIVE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (operative: "); //$NON-NLS-1$
+		result.append(operative);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DB2ViewImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2XMLSchemaDocPropertiesImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2XMLSchemaDocPropertiesImpl.java
new file mode 100644
index 0000000..d1b34f8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2XMLSchemaDocPropertiesImpl.java
@@ -0,0 +1,256 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: DB2XMLSchemaDocPropertiesImpl.java,v 1.6 2008/01/29 00:04:55 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocProperties;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2XML Schema Doc Properties</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XMLSchemaDocPropertiesImpl#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XMLSchemaDocPropertiesImpl#getXmlSchemaDoc <em>Xml Schema Doc</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2XMLSchemaDocPropertiesImpl extends SQLObjectImpl implements DB2XMLSchemaDocProperties {
+	/**
+	 * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getValue()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String VALUE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getValue()
+	 * @generated
+	 * @ordered
+	 */
+   protected String value = VALUE_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   protected DB2XMLSchemaDocPropertiesImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2XML_SCHEMA_DOC_PROPERTIES;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getValue() {
+		return value;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setValue(String newValue) {
+		String oldValue = value;
+		value = newValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2XML_SCHEMA_DOC_PROPERTIES__VALUE, oldValue, value));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public DB2XMLSchemaDocument getXmlSchemaDoc() {
+		if (eContainerFeatureID() != DB2ModelPackage.DB2XML_SCHEMA_DOC_PROPERTIES__XML_SCHEMA_DOC) return null;
+		return (DB2XMLSchemaDocument)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetXmlSchemaDoc(DB2XMLSchemaDocument newXmlSchemaDoc, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newXmlSchemaDoc, DB2ModelPackage.DB2XML_SCHEMA_DOC_PROPERTIES__XML_SCHEMA_DOC, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setXmlSchemaDoc(DB2XMLSchemaDocument newXmlSchemaDoc) {
+		if (newXmlSchemaDoc != eInternalContainer() || (eContainerFeatureID() != DB2ModelPackage.DB2XML_SCHEMA_DOC_PROPERTIES__XML_SCHEMA_DOC && newXmlSchemaDoc != null)) {
+			if (EcoreUtil.isAncestor(this, newXmlSchemaDoc))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newXmlSchemaDoc != null)
+				msgs = ((InternalEObject)newXmlSchemaDoc).eInverseAdd(this, DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__XML_SCHEMA_DOC_PROPERTIES, DB2XMLSchemaDocument.class, msgs);
+			msgs = basicSetXmlSchemaDoc(newXmlSchemaDoc, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2XML_SCHEMA_DOC_PROPERTIES__XML_SCHEMA_DOC, newXmlSchemaDoc, newXmlSchemaDoc));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2XML_SCHEMA_DOC_PROPERTIES__XML_SCHEMA_DOC:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetXmlSchemaDoc((DB2XMLSchemaDocument)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2XML_SCHEMA_DOC_PROPERTIES__XML_SCHEMA_DOC:
+				return basicSetXmlSchemaDoc(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case DB2ModelPackage.DB2XML_SCHEMA_DOC_PROPERTIES__XML_SCHEMA_DOC:
+				return eInternalContainer().eInverseRemove(this, DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__XML_SCHEMA_DOC_PROPERTIES, DB2XMLSchemaDocument.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2XML_SCHEMA_DOC_PROPERTIES__VALUE:
+				return getValue();
+			case DB2ModelPackage.DB2XML_SCHEMA_DOC_PROPERTIES__XML_SCHEMA_DOC:
+				return getXmlSchemaDoc();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2XML_SCHEMA_DOC_PROPERTIES__VALUE:
+				setValue((String)newValue);
+				return;
+			case DB2ModelPackage.DB2XML_SCHEMA_DOC_PROPERTIES__XML_SCHEMA_DOC:
+				setXmlSchemaDoc((DB2XMLSchemaDocument)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2XML_SCHEMA_DOC_PROPERTIES__VALUE:
+				setValue(VALUE_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2XML_SCHEMA_DOC_PROPERTIES__XML_SCHEMA_DOC:
+				setXmlSchemaDoc((DB2XMLSchemaDocument)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2XML_SCHEMA_DOC_PROPERTIES__VALUE:
+				return VALUE_EDEFAULT == null ? value != null : !VALUE_EDEFAULT.equals(value);
+			case DB2ModelPackage.DB2XML_SCHEMA_DOC_PROPERTIES__XML_SCHEMA_DOC:
+				return getXmlSchemaDoc() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (value: "); //$NON-NLS-1$
+		result.append(value);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DB2XMLSchemaDocPropertiesImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2XMLSchemaDocumentImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2XMLSchemaDocumentImpl.java
new file mode 100644
index 0000000..4d5e6e1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2XMLSchemaDocumentImpl.java
@@ -0,0 +1,462 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: DB2XMLSchemaDocumentImpl.java,v 1.7 2008/02/05 02:01:23 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchema;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocProperties;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2XML Schema Document</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XMLSchemaDocumentImpl#getFileName <em>File Name</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XMLSchemaDocumentImpl#getSchemaLocation <em>Schema Location</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XMLSchemaDocumentImpl#getTargetNamespace <em>Target Namespace</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XMLSchemaDocumentImpl#isPrimary <em>Primary</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XMLSchemaDocumentImpl#getXmlSchema <em>Xml Schema</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XMLSchemaDocumentImpl#getXmlSchemaDocProperties <em>Xml Schema Doc Properties</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2XMLSchemaDocumentImpl extends SQLObjectImpl implements DB2XMLSchemaDocument {
+	/**
+	 * The default value of the '{@link #getFileName() <em>File Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getFileName()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String FILE_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getFileName() <em>File Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getFileName()
+	 * @generated
+	 * @ordered
+	 */
+   protected String fileName = FILE_NAME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getSchemaLocation() <em>Schema Location</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getSchemaLocation()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String SCHEMA_LOCATION_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getSchemaLocation() <em>Schema Location</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getSchemaLocation()
+	 * @generated
+	 * @ordered
+	 */
+   protected String schemaLocation = SCHEMA_LOCATION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getTargetNamespace() <em>Target Namespace</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getTargetNamespace()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final String TARGET_NAMESPACE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getTargetNamespace() <em>Target Namespace</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getTargetNamespace()
+	 * @generated
+	 * @ordered
+	 */
+   protected String targetNamespace = TARGET_NAMESPACE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isPrimary() <em>Primary</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #isPrimary()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final boolean PRIMARY_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isPrimary() <em>Primary</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #isPrimary()
+	 * @generated
+	 * @ordered
+	 */
+   protected boolean primary = PRIMARY_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getXmlSchemaDocProperties() <em>Xml Schema Doc Properties</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getXmlSchemaDocProperties()
+	 * @generated
+	 * @ordered
+	 */
+   protected EList xmlSchemaDocProperties;
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   protected DB2XMLSchemaDocumentImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2XML_SCHEMA_DOCUMENT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getFileName() {
+		return fileName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setFileName(String newFileName) {
+		String oldFileName = fileName;
+		fileName = newFileName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__FILE_NAME, oldFileName, fileName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getSchemaLocation() {
+		return schemaLocation;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setSchemaLocation(String newSchemaLocation) {
+		String oldSchemaLocation = schemaLocation;
+		schemaLocation = newSchemaLocation;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__SCHEMA_LOCATION, oldSchemaLocation, schemaLocation));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String getTargetNamespace() {
+		return targetNamespace;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setTargetNamespace(String newTargetNamespace) {
+		String oldTargetNamespace = targetNamespace;
+		targetNamespace = newTargetNamespace;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__TARGET_NAMESPACE, oldTargetNamespace, targetNamespace));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public boolean isPrimary() {
+		return primary;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setPrimary(boolean newPrimary) {
+		boolean oldPrimary = primary;
+		primary = newPrimary;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__PRIMARY, oldPrimary, primary));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public DB2XMLSchema getXmlSchema() {
+		if (eContainerFeatureID() != DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__XML_SCHEMA) return null;
+		return (DB2XMLSchema)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetXmlSchema(DB2XMLSchema newXmlSchema, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newXmlSchema, DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__XML_SCHEMA, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setXmlSchema(DB2XMLSchema newXmlSchema) {
+		if (newXmlSchema != eInternalContainer() || (eContainerFeatureID() != DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__XML_SCHEMA && newXmlSchema != null)) {
+			if (EcoreUtil.isAncestor(this, newXmlSchema))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newXmlSchema != null)
+				msgs = ((InternalEObject)newXmlSchema).eInverseAdd(this, DB2ModelPackage.DB2XML_SCHEMA__XML_SCHEMA_DOCS, DB2XMLSchema.class, msgs);
+			msgs = basicSetXmlSchema(newXmlSchema, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__XML_SCHEMA, newXmlSchema, newXmlSchema));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public EList getXmlSchemaDocProperties() {
+		if (xmlSchemaDocProperties == null) {
+			xmlSchemaDocProperties = new EObjectContainmentWithInverseEList(DB2XMLSchemaDocProperties.class, this, DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__XML_SCHEMA_DOC_PROPERTIES, DB2ModelPackage.DB2XML_SCHEMA_DOC_PROPERTIES__XML_SCHEMA_DOC);
+		}
+		return xmlSchemaDocProperties;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__XML_SCHEMA:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetXmlSchema((DB2XMLSchema)otherEnd, msgs);
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__XML_SCHEMA_DOC_PROPERTIES:
+				return ((InternalEList)getXmlSchemaDocProperties()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__XML_SCHEMA:
+				return basicSetXmlSchema(null, msgs);
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__XML_SCHEMA_DOC_PROPERTIES:
+				return ((InternalEList)getXmlSchemaDocProperties()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__XML_SCHEMA:
+				return eInternalContainer().eInverseRemove(this, DB2ModelPackage.DB2XML_SCHEMA__XML_SCHEMA_DOCS, DB2XMLSchema.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__FILE_NAME:
+				return getFileName();
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__SCHEMA_LOCATION:
+				return getSchemaLocation();
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__TARGET_NAMESPACE:
+				return getTargetNamespace();
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__PRIMARY:
+				return isPrimary() ? Boolean.TRUE : Boolean.FALSE;
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__XML_SCHEMA:
+				return getXmlSchema();
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__XML_SCHEMA_DOC_PROPERTIES:
+				return getXmlSchemaDocProperties();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__FILE_NAME:
+				setFileName((String)newValue);
+				return;
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__SCHEMA_LOCATION:
+				setSchemaLocation((String)newValue);
+				return;
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__TARGET_NAMESPACE:
+				setTargetNamespace((String)newValue);
+				return;
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__PRIMARY:
+				setPrimary(((Boolean)newValue).booleanValue());
+				return;
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__XML_SCHEMA:
+				setXmlSchema((DB2XMLSchema)newValue);
+				return;
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__XML_SCHEMA_DOC_PROPERTIES:
+				getXmlSchemaDocProperties().clear();
+				getXmlSchemaDocProperties().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__FILE_NAME:
+				setFileName(FILE_NAME_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__SCHEMA_LOCATION:
+				setSchemaLocation(SCHEMA_LOCATION_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__TARGET_NAMESPACE:
+				setTargetNamespace(TARGET_NAMESPACE_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__PRIMARY:
+				setPrimary(PRIMARY_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__XML_SCHEMA:
+				setXmlSchema((DB2XMLSchema)null);
+				return;
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__XML_SCHEMA_DOC_PROPERTIES:
+				getXmlSchemaDocProperties().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__FILE_NAME:
+				return FILE_NAME_EDEFAULT == null ? fileName != null : !FILE_NAME_EDEFAULT.equals(fileName);
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__SCHEMA_LOCATION:
+				return SCHEMA_LOCATION_EDEFAULT == null ? schemaLocation != null : !SCHEMA_LOCATION_EDEFAULT.equals(schemaLocation);
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__TARGET_NAMESPACE:
+				return TARGET_NAMESPACE_EDEFAULT == null ? targetNamespace != null : !TARGET_NAMESPACE_EDEFAULT.equals(targetNamespace);
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__PRIMARY:
+				return primary != PRIMARY_EDEFAULT;
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__XML_SCHEMA:
+				return getXmlSchema() != null;
+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__XML_SCHEMA_DOC_PROPERTIES:
+				return xmlSchemaDocProperties != null && !xmlSchemaDocProperties.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (fileName: "); //$NON-NLS-1$
+		result.append(fileName);
+		result.append(", schemaLocation: "); //$NON-NLS-1$
+		result.append(schemaLocation);
+		result.append(", targetNamespace: "); //$NON-NLS-1$
+		result.append(targetNamespace);
+		result.append(", primary: "); //$NON-NLS-1$
+		result.append(primary);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DB2XMLSchemaDocumentImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2XMLSchemaImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2XMLSchemaImpl.java
new file mode 100644
index 0000000..df41f8c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2XMLSchemaImpl.java
@@ -0,0 +1,282 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: DB2XMLSchemaImpl.java,v 1.9 2008/02/05 02:01:23 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchema;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDecomposition;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaDocument;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2XMLSchemaStatus;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2XML Schema</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XMLSchemaImpl#getDecomposition <em>Decomposition</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XMLSchemaImpl#getStatus <em>Status</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XMLSchemaImpl#getXmlSchemaDocs <em>Xml Schema Docs</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2XMLSchemaImpl extends DB2XSRObjectImpl implements DB2XMLSchema {
+	/**
+	 * The default value of the '{@link #getDecomposition() <em>Decomposition</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getDecomposition()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final DB2XMLSchemaDecomposition DECOMPOSITION_EDEFAULT = DB2XMLSchemaDecomposition.ENABLED_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getDecomposition() <em>Decomposition</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getDecomposition()
+	 * @generated
+	 * @ordered
+	 */
+   protected DB2XMLSchemaDecomposition decomposition = DECOMPOSITION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getStatus() <em>Status</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getStatus()
+	 * @generated
+	 * @ordered
+	 */
+   protected static final DB2XMLSchemaStatus STATUS_EDEFAULT = DB2XMLSchemaStatus.COMPLETE_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getStatus() <em>Status</em>}' attribute.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getStatus()
+	 * @generated
+	 * @ordered
+	 */
+   protected DB2XMLSchemaStatus status = STATUS_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getXmlSchemaDocs() <em>Xml Schema Docs</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getXmlSchemaDocs()
+	 * @generated
+	 * @ordered
+	 */
+   protected EList xmlSchemaDocs;
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   protected DB2XMLSchemaImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2XML_SCHEMA;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public DB2XMLSchemaDecomposition getDecomposition() {
+		return decomposition;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setDecomposition(DB2XMLSchemaDecomposition newDecomposition) {
+		DB2XMLSchemaDecomposition oldDecomposition = decomposition;
+		decomposition = newDecomposition == null ? DECOMPOSITION_EDEFAULT : newDecomposition;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2XML_SCHEMA__DECOMPOSITION, oldDecomposition, decomposition));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public DB2XMLSchemaStatus getStatus() {
+		return status;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setStatus(DB2XMLSchemaStatus newStatus) {
+		DB2XMLSchemaStatus oldStatus = status;
+		status = newStatus == null ? STATUS_EDEFAULT : newStatus;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2XML_SCHEMA__STATUS, oldStatus, status));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public EList getXmlSchemaDocs() {
+		if (xmlSchemaDocs == null) {
+			xmlSchemaDocs = new EObjectContainmentWithInverseEList(DB2XMLSchemaDocument.class, this, DB2ModelPackage.DB2XML_SCHEMA__XML_SCHEMA_DOCS, DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT__XML_SCHEMA);
+		}
+		return xmlSchemaDocs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2XML_SCHEMA__XML_SCHEMA_DOCS:
+				return ((InternalEList)getXmlSchemaDocs()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2XML_SCHEMA__XML_SCHEMA_DOCS:
+				return ((InternalEList)getXmlSchemaDocs()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2XML_SCHEMA__DECOMPOSITION:
+				return getDecomposition();
+			case DB2ModelPackage.DB2XML_SCHEMA__STATUS:
+				return getStatus();
+			case DB2ModelPackage.DB2XML_SCHEMA__XML_SCHEMA_DOCS:
+				return getXmlSchemaDocs();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2XML_SCHEMA__DECOMPOSITION:
+				setDecomposition((DB2XMLSchemaDecomposition)newValue);
+				return;
+			case DB2ModelPackage.DB2XML_SCHEMA__STATUS:
+				setStatus((DB2XMLSchemaStatus)newValue);
+				return;
+			case DB2ModelPackage.DB2XML_SCHEMA__XML_SCHEMA_DOCS:
+				getXmlSchemaDocs().clear();
+				getXmlSchemaDocs().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2XML_SCHEMA__DECOMPOSITION:
+				setDecomposition(DECOMPOSITION_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2XML_SCHEMA__STATUS:
+				setStatus(STATUS_EDEFAULT);
+				return;
+			case DB2ModelPackage.DB2XML_SCHEMA__XML_SCHEMA_DOCS:
+				getXmlSchemaDocs().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2XML_SCHEMA__DECOMPOSITION:
+				return decomposition != DECOMPOSITION_EDEFAULT;
+			case DB2ModelPackage.DB2XML_SCHEMA__STATUS:
+				return status != STATUS_EDEFAULT;
+			case DB2ModelPackage.DB2XML_SCHEMA__XML_SCHEMA_DOCS:
+				return xmlSchemaDocs != null && !xmlSchemaDocs.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (decomposition: "); //$NON-NLS-1$
+		result.append(decomposition);
+		result.append(", status: "); //$NON-NLS-1$
+		result.append(status);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DB2XMLSchemaImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2XSRObjectImpl.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2XSRObjectImpl.java
new file mode 100644
index 0000000..b3d4f87
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/impl/DB2XSRObjectImpl.java
@@ -0,0 +1,205 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: DB2XSRObjectImpl.java,v 1.8 2008/02/05 02:01:23 hskolwal Exp $
+ */
+package org.eclipse.datatools.enablement.ibm.db2.model.impl;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2ModelPackage;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2Schema;
+import org.eclipse.datatools.enablement.ibm.db2.model.DB2XSRObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>DB2XSR Object</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ibm.db2.model.impl.DB2XSRObjectImpl#getSchema <em>Schema</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DB2XSRObjectImpl extends SQLObjectImpl implements DB2XSRObject {
+	/**
+	 * The cached value of the '{@link #getSchema() <em>Schema</em>}' reference.
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @see #getSchema()
+	 * @generated
+	 * @ordered
+	 */
+   protected DB2Schema schema;
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   protected DB2XSRObjectImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   protected EClass eStaticClass() {
+		return DB2ModelPackage.Literals.DB2XSR_OBJECT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public DB2Schema getSchema() {
+		if (schema != null && schema.eIsProxy()) {
+			InternalEObject oldSchema = (InternalEObject)schema;
+			schema = (DB2Schema)eResolveProxy(oldSchema);
+			if (schema != oldSchema) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DB2ModelPackage.DB2XSR_OBJECT__SCHEMA, oldSchema, schema));
+			}
+		}
+		return schema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public DB2Schema basicGetSchema() {
+		return schema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public NotificationChain basicSetSchema(DB2Schema newSchema, NotificationChain msgs) {
+		DB2Schema oldSchema = schema;
+		schema = newSchema;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2XSR_OBJECT__SCHEMA, oldSchema, newSchema);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+    * <!-- end-user-doc -->
+	 * @generated
+	 */
+   public void setSchema(DB2Schema newSchema) {
+		if (newSchema != schema) {
+			NotificationChain msgs = null;
+			if (schema != null)
+				msgs = ((InternalEObject)schema).eInverseRemove(this, DB2ModelPackage.DB2_SCHEMA__XSR_OBJECTS, DB2Schema.class, msgs);
+			if (newSchema != null)
+				msgs = ((InternalEObject)newSchema).eInverseAdd(this, DB2ModelPackage.DB2_SCHEMA__XSR_OBJECTS, DB2Schema.class, msgs);
+			msgs = basicSetSchema(newSchema, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DB2ModelPackage.DB2XSR_OBJECT__SCHEMA, newSchema, newSchema));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2XSR_OBJECT__SCHEMA:
+				if (schema != null)
+					msgs = ((InternalEObject)schema).eInverseRemove(this, DB2ModelPackage.DB2_SCHEMA__XSR_OBJECTS, DB2Schema.class, msgs);
+				return basicSetSchema((DB2Schema)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2XSR_OBJECT__SCHEMA:
+				return basicSetSchema(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2XSR_OBJECT__SCHEMA:
+				if (resolve) return getSchema();
+				return basicGetSchema();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2XSR_OBJECT__SCHEMA:
+				setSchema((DB2Schema)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2XSR_OBJECT__SCHEMA:
+				setSchema((DB2Schema)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DB2ModelPackage.DB2XSR_OBJECT__SCHEMA:
+				return schema != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //DB2XSRObjectImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/util/DB2ModelAdapterFactory.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/util/DB2ModelAdapterFactory.java
new file mode 100644
index 0000000..7997b60
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/util/DB2ModelAdapterFactory.java
@@ -0,0 +1,1252 @@
+/*******************************************************************************

+ * Copyright (c) 2005, 2014 IBM Corporation and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.datatools.enablement.ibm.db2.model.util;

+

+

+import org.eclipse.datatools.enablement.ibm.db2.model.*;

+import org.eclipse.datatools.modelbase.sql.constraints.Index;

+import org.eclipse.datatools.modelbase.sql.datatypes.DataType;

+import org.eclipse.datatools.modelbase.sql.datatypes.DistinctUserDefinedType;

+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;

+import org.eclipse.datatools.modelbase.sql.routines.Function;

+import org.eclipse.datatools.modelbase.sql.routines.Method;

+import org.eclipse.datatools.modelbase.sql.routines.Procedure;

+import org.eclipse.datatools.modelbase.sql.routines.Routine;

+import org.eclipse.datatools.modelbase.sql.routines.Source;

+import org.eclipse.datatools.modelbase.sql.routines.UserDefinedFunction;

+import org.eclipse.datatools.modelbase.sql.schema.Database;

+import org.eclipse.datatools.modelbase.sql.schema.IdentitySpecifier;

+import org.eclipse.datatools.modelbase.sql.schema.ObjectExtension;

+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;

+import org.eclipse.datatools.modelbase.sql.schema.Schema;

+import org.eclipse.datatools.modelbase.sql.schema.TypedElement;

+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;

+import org.eclipse.datatools.modelbase.sql.tables.Column;

+import org.eclipse.datatools.modelbase.sql.tables.DerivedTable;

+import org.eclipse.datatools.modelbase.sql.tables.PersistentTable;

+import org.eclipse.datatools.modelbase.sql.tables.Table;

+import org.eclipse.datatools.modelbase.sql.tables.Trigger;

+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;

+import org.eclipse.emf.common.notify.Adapter;

+import org.eclipse.emf.common.notify.Notifier;

+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;

+import org.eclipse.emf.ecore.EModelElement;

+import org.eclipse.emf.ecore.ENamedElement;

+import org.eclipse.emf.ecore.EObject;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Adapter Factory</b> for the model.

+ * It provides an adapter <code>createXXX</code> method for each class of the model.

+ * <!-- end-user-doc -->

+ * @see com.ibm.db.models.db2.DB2ModelPackage

+ * @generated

+ */

+public class DB2ModelAdapterFactory extends AdapterFactoryImpl {

+	/**

+	 * The cached model package.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected static DB2ModelPackage modelPackage;

+

+	/**

+	 * Creates an instance of the adapter factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public DB2ModelAdapterFactory() {

+		if (modelPackage == null) {

+			modelPackage = DB2ModelPackage.eINSTANCE;

+		}

+	}

+

+	/**

+	 * Returns whether this factory is applicable for the type of the object.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.

+	 * <!-- end-user-doc -->

+	 * @return whether this factory is applicable for the type of the object.

+	 * @generated

+	 */

+	public boolean isFactoryForType(Object object) {

+		if (object == modelPackage) {

+			return true;

+		}

+		if (object instanceof EObject) {

+			return ((EObject)object).eClass().getEPackage() == modelPackage;

+		}

+		return false;

+	}

+

+	/**

+	 * The switch that delegates to the <code>createXXX</code> methods.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected DB2ModelSwitch modelSwitch =

+		new DB2ModelSwitch() {

+			public Object caseDB2Database(DB2Database object) {

+				return createDB2DatabaseAdapter();

+			}

+			public Object caseDB2Package(DB2Package object) {

+				return createDB2PackageAdapter();

+			}

+			public Object caseDB2Table(DB2Table object) {

+				return createDB2TableAdapter();

+			}

+			public Object caseDB2Trigger(DB2Trigger object) {

+				return createDB2TriggerAdapter();

+			}

+			public Object caseDB2Procedure(DB2Procedure object) {

+				return createDB2ProcedureAdapter();

+			}

+			public Object caseDB2Schema(DB2Schema object) {

+				return createDB2SchemaAdapter();

+			}

+			public Object caseDB2Routine(DB2Routine object) {

+				return createDB2RoutineAdapter();

+			}

+			public Object caseDB2DatabaseManager(DB2DatabaseManager object) {

+				return createDB2DatabaseManagerAdapter();

+			}

+			public Object caseDB2View(DB2View object) {

+				return createDB2ViewAdapter();

+			}

+			public Object caseDB2ApplicationProcess(DB2ApplicationProcess object) {

+				return createDB2ApplicationProcessAdapter();

+			}

+			public Object caseDB2Transaction(DB2Transaction object) {

+				return createDB2TransactionAdapter();

+			}

+			public Object caseDB2SystemSchema(DB2SystemSchema object) {

+				return createDB2SystemSchemaAdapter();

+			}

+			public Object caseDB2Source(DB2Source object) {

+				return createDB2SourceAdapter();

+			}

+			public Object caseDB2AccessPlan(DB2AccessPlan object) {

+				return createDB2AccessPlanAdapter();

+			}

+			public Object caseDB2UserDefinedFunction(DB2UserDefinedFunction object) {

+				return createDB2UserDefinedFunctionAdapter();

+			}

+			public Object caseDB2Method(DB2Method object) {

+				return createDB2MethodAdapter();

+			}

+			public Object caseDB2ExtendedOptions(DB2ExtendedOptions object) {

+				return createDB2ExtendedOptionsAdapter();

+			}

+			public Object caseDB2Alias(DB2Alias object) {

+				return createDB2AliasAdapter();

+			}

+			public Object caseDB2MaterializedQueryTable(DB2MaterializedQueryTable object) {

+				return createDB2MaterializedQueryTableAdapter();

+			}

+			public Object caseDB2Index(DB2Index object) {

+				return createDB2IndexAdapter();

+			}

+			public Object caseDB2MultidimensionalIndex(DB2MultidimensionalIndex object) {

+				return createDB2MultidimensionalIndexAdapter();

+			}

+			public Object caseDB2Function(DB2Function object) {

+				return createDB2FunctionAdapter();

+			}

+			public Object caseDB2JavaOptions(DB2JavaOptions object) {

+				return createDB2JavaOptionsAdapter();

+			}

+			public Object caseDB2ProcedureDeploy(DB2ProcedureDeploy object) {

+				return createDB2ProcedureDeployAdapter();

+			}

+			public Object caseDB2OLAPObject(DB2OLAPObject object) {

+				return createDB2OLAPObjectAdapter();

+			}

+			public Object caseDB2RoutineExtension(DB2RoutineExtension object) {

+				return createDB2RoutineExtensionAdapter();

+			}

+			public Object caseDB2IdentitySpecifier(DB2IdentitySpecifier object) {

+				return createDB2IdentitySpecifierAdapter();

+			}

+			public Object caseDB2Jar(DB2Jar object) {

+				return createDB2JarAdapter();

+			}

+			public Object caseDB2Column(DB2Column object) {

+				return createDB2ColumnAdapter();

+			}

+			public Object caseDB2XSRObject(DB2XSRObject object) {

+				return createDB2XSRObjectAdapter();

+			}

+			public Object caseDB2XMLSchema(DB2XMLSchema object) {

+				return createDB2XMLSchemaAdapter();

+			}

+			public Object caseDB2XMLSchemaDocument(DB2XMLSchemaDocument object) {

+				return createDB2XMLSchemaDocumentAdapter();

+			}

+			public Object caseDB2XMLSchemaDocProperties(DB2XMLSchemaDocProperties object) {

+				return createDB2XMLSchemaDocPropertiesAdapter();

+			}

+			public Object caseDB2PackageStatement(DB2PackageStatement object) {

+				return createDB2PackageStatementAdapter();

+			}

+			public Object caseDB2DistinctUserDefinedType(DB2DistinctUserDefinedType object) {

+				return createDB2DistinctUserDefinedTypeAdapter();

+			}

+			public Object caseDB2Period(DB2Period object) {

+				return createDB2PeriodAdapter();

+			}

+			public Object caseDB2Cluster(DB2Cluster object) {

+				return createDB2ClusterAdapter();

+			}

+			public Object caseDB2Member(DB2Member object) {

+				return createDB2MemberAdapter();

+			}

+			public Object caseDB2UniqueConstraintExtension(DB2UniqueConstraintExtension object) {

+				return createDB2UniqueConstraintExtensionAdapter();

+			}

+			public Object caseDB2Mask(DB2Mask object) {

+				return createDB2MaskAdapter();

+			}

+			public Object caseDB2Permission(DB2Permission object) {

+				return createDB2PermissionAdapter();

+			}

+			public Object caseEModelElement(EModelElement object) {

+				return createEModelElementAdapter();

+			}

+			public Object caseENamedElement(ENamedElement object) {

+				return createENamedElementAdapter();

+			}

+			public Object caseSQLObject(SQLObject object) {

+				return createSQLObjectAdapter();

+			}

+			public Object caseDatabase(Database object) {

+				return createDatabaseAdapter();

+			}

+			public Object caseTable(Table object) {

+				return createTableAdapter();

+			}

+			public Object caseBaseTable(BaseTable object) {

+				return createBaseTableAdapter();

+			}

+			public Object casePersistentTable(PersistentTable object) {

+				return createPersistentTableAdapter();

+			}

+			public Object caseTrigger(Trigger object) {

+				return createTriggerAdapter();

+			}

+			public Object caseRoutine(Routine object) {

+				return createRoutineAdapter();

+			}

+			public Object caseProcedure(Procedure object) {

+				return createProcedureAdapter();

+			}

+			public Object caseSchema(Schema object) {

+				return createSchemaAdapter();

+			}

+			public Object caseDerivedTable(DerivedTable object) {

+				return createDerivedTableAdapter();

+			}

+			public Object caseViewTable(ViewTable object) {

+				return createViewTableAdapter();

+			}

+			public Object caseSource(Source object) {

+				return createSourceAdapter();

+			}

+			public Object caseFunction(Function object) {

+				return createFunctionAdapter();

+			}

+			public Object caseUserDefinedFunction(UserDefinedFunction object) {

+				return createUserDefinedFunctionAdapter();

+			}

+			public Object caseMethod(Method object) {

+				return createMethodAdapter();

+			}

+			public Object caseIndex(Index object) {

+				return createIndexAdapter();

+			}

+			public Object caseIdentitySpecifier(IdentitySpecifier object) {

+				return createIdentitySpecifierAdapter();

+			}

+			public Object caseTypedElement(TypedElement object) {

+				return createTypedElementAdapter();

+			}

+			public Object caseColumn(Column object) {

+				return createColumnAdapter();

+			}

+			public Object caseDataType(DataType object) {

+				return createDataTypeAdapter();

+			}

+			public Object caseUserDefinedType(UserDefinedType object) {

+				return createUserDefinedTypeAdapter();

+			}

+			public Object caseDistinctUserDefinedType(DistinctUserDefinedType object) {

+				return createDistinctUserDefinedTypeAdapter();

+			}

+			public Object caseObjectExtension(ObjectExtension object) {

+				return createObjectExtensionAdapter();

+			}

+			public Object defaultCase(EObject object) {

+				return createEObjectAdapter();

+			}

+		};

+

+	/**

+	 * Creates an adapter for the <code>target</code>.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param target the object to adapt.

+	 * @return the adapter for the <code>target</code>.

+	 * @generated

+	 */

+	public Adapter createAdapter(Notifier target) {

+		return (Adapter)modelSwitch.doSwitch((EObject)target);

+	}

+

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2Database <em>DB2 Database</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2Database

+	 * @generated

+	 */

+	public Adapter createDB2DatabaseAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2Package <em>DB2 Package</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2Package

+	 * @generated

+	 */

+	public Adapter createDB2PackageAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2Table <em>DB2 Table</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2Table

+	 * @generated

+	 */

+	public Adapter createDB2TableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2Trigger <em>DB2 Trigger</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2Trigger

+	 * @generated

+	 */

+	public Adapter createDB2TriggerAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2Procedure <em>DB2 Procedure</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2Procedure

+	 * @generated

+	 */

+	public Adapter createDB2ProcedureAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2Schema <em>DB2 Schema</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2Schema

+	 * @generated

+	 */

+	public Adapter createDB2SchemaAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2Routine <em>DB2 Routine</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2Routine

+	 * @generated

+	 */

+	public Adapter createDB2RoutineAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2DatabaseManager <em>DB2 Database Manager</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2DatabaseManager

+	 * @generated

+	 */

+	public Adapter createDB2DatabaseManagerAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2View <em>DB2 View</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2View

+	 * @generated

+	 */

+	public Adapter createDB2ViewAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2ApplicationProcess <em>DB2 Application Process</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2ApplicationProcess

+	 * @generated

+	 */

+	public Adapter createDB2ApplicationProcessAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2Transaction <em>DB2 Transaction</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2Transaction

+	 * @generated

+	 */

+	public Adapter createDB2TransactionAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2SystemSchema <em>DB2 System Schema</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2SystemSchema

+	 * @generated

+	 */

+	public Adapter createDB2SystemSchemaAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2Source <em>DB2 Source</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2Source

+	 * @generated

+	 */

+	public Adapter createDB2SourceAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2AccessPlan <em>DB2 Access Plan</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2AccessPlan

+	 * @generated

+	 */

+	public Adapter createDB2AccessPlanAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2UserDefinedFunction <em>DB2 User Defined Function</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2UserDefinedFunction

+	 * @generated

+	 */

+	public Adapter createDB2UserDefinedFunctionAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2Method <em>DB2 Method</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2Method

+	 * @generated

+	 */

+	public Adapter createDB2MethodAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2ExtendedOptions <em>DB2 Extended Options</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2ExtendedOptions

+	 * @generated

+	 */

+	public Adapter createDB2ExtendedOptionsAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2Alias <em>DB2 Alias</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2Alias

+	 * @generated

+	 */

+	public Adapter createDB2AliasAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2MaterializedQueryTable <em>DB2 Materialized Query Table</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2MaterializedQueryTable

+	 * @generated

+	 */

+	public Adapter createDB2MaterializedQueryTableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2Index <em>DB2 Index</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2Index

+	 * @generated

+	 */

+	public Adapter createDB2IndexAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2MultidimensionalIndex <em>DB2 Multidimensional Index</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2MultidimensionalIndex

+	 * @generated

+	 */

+	public Adapter createDB2MultidimensionalIndexAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2Function <em>DB2 Function</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2Function

+	 * @generated

+	 */

+	public Adapter createDB2FunctionAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2JavaOptions <em>DB2 Java Options</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2JavaOptions

+	 * @generated

+	 */

+	public Adapter createDB2JavaOptionsAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2ProcedureDeploy <em>DB2 Procedure Deploy</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2ProcedureDeploy

+	 * @generated

+	 */

+	public Adapter createDB2ProcedureDeployAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2OLAPObject <em>DB2OLAP Object</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2OLAPObject

+	 * @generated

+	 */

+	public Adapter createDB2OLAPObjectAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2RoutineExtension <em>DB2 Routine Extension</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2RoutineExtension

+	 * @generated

+	 */

+	public Adapter createDB2RoutineExtensionAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2IdentitySpecifier <em>DB2 Identity Specifier</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2IdentitySpecifier

+	 * @generated

+	 */

+	public Adapter createDB2IdentitySpecifierAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2Jar <em>DB2 Jar</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2Jar

+	 * @generated

+	 */

+	public Adapter createDB2JarAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2Column <em>DB2 Column</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2Column

+	 * @generated

+	 */

+	public Adapter createDB2ColumnAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2XSRObject <em>DB2XSR Object</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2XSRObject

+	 * @generated

+	 */

+	public Adapter createDB2XSRObjectAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2XMLSchema <em>DB2XML Schema</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2XMLSchema

+	 * @generated

+	 */

+	public Adapter createDB2XMLSchemaAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2XMLSchemaDocument <em>DB2XML Schema Document</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2XMLSchemaDocument

+	 * @generated

+	 */

+	public Adapter createDB2XMLSchemaDocumentAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2XMLSchemaDocProperties <em>DB2XML Schema Doc Properties</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2XMLSchemaDocProperties

+	 * @generated

+	 */

+	public Adapter createDB2XMLSchemaDocPropertiesAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2PackageStatement <em>DB2 Package Statement</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2PackageStatement

+	 * @generated

+	 */

+	public Adapter createDB2PackageStatementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2DistinctUserDefinedType <em>DB2 Distinct User Defined Type</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2DistinctUserDefinedType

+	 * @generated

+	 */

+	public Adapter createDB2DistinctUserDefinedTypeAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2Period <em>DB2 Period</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2Period

+	 * @generated

+	 */

+	public Adapter createDB2PeriodAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2Cluster <em>DB2 Cluster</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2Cluster

+	 * @generated

+	 */

+	public Adapter createDB2ClusterAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2Member <em>DB2 Member</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2Member

+	 * @generated

+	 */

+	public Adapter createDB2MemberAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2UniqueConstraintExtension <em>DB2 Unique Constraint Extension</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2UniqueConstraintExtension

+	 * @generated

+	 */

+	public Adapter createDB2UniqueConstraintExtensionAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2Mask <em>DB2 Mask</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2Mask

+	 * @generated

+	 */

+	public Adapter createDB2MaskAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link com.ibm.db.models.db2.DB2Permission <em>DB2 Permission</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see com.ibm.db.models.db2.DB2Permission

+	 * @generated

+	 */

+	public Adapter createDB2PermissionAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.emf.ecore.EModelElement <em>EModel Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.emf.ecore.EModelElement

+	 * @generated

+	 */

+	public Adapter createEModelElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.emf.ecore.ENamedElement <em>ENamed Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.emf.ecore.ENamedElement

+	 * @generated

+	 */

+	public Adapter createENamedElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.schema.SQLObject <em>SQL Object</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.schema.SQLObject

+	 * @generated

+	 */

+	public Adapter createSQLObjectAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.schema.Database <em>Database</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.schema.Database

+	 * @generated

+	 */

+	public Adapter createDatabaseAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.tables.Table <em>Table</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.tables.Table

+	 * @generated

+	 */

+	public Adapter createTableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.tables.BaseTable <em>Base Table</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.tables.BaseTable

+	 * @generated

+	 */

+	public Adapter createBaseTableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.tables.PersistentTable <em>Persistent Table</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.tables.PersistentTable

+	 * @generated

+	 */

+	public Adapter createPersistentTableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.tables.Trigger <em>Trigger</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.tables.Trigger

+	 * @generated

+	 */

+	public Adapter createTriggerAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.routines.Routine <em>Routine</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.routines.Routine

+	 * @generated

+	 */

+	public Adapter createRoutineAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.routines.Procedure <em>Procedure</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.routines.Procedure

+	 * @generated

+	 */

+	public Adapter createProcedureAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.schema.Schema <em>Schema</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.schema.Schema

+	 * @generated

+	 */

+	public Adapter createSchemaAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.tables.DerivedTable <em>Derived Table</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.tables.DerivedTable

+	 * @generated

+	 */

+	public Adapter createDerivedTableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.tables.ViewTable <em>View Table</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.tables.ViewTable

+	 * @generated

+	 */

+	public Adapter createViewTableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.routines.Source <em>Source</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.routines.Source

+	 * @generated

+	 */

+	public Adapter createSourceAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.routines.Function <em>Function</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.routines.Function

+	 * @generated

+	 */

+	public Adapter createFunctionAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.routines.UserDefinedFunction <em>User Defined Function</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.routines.UserDefinedFunction

+	 * @generated

+	 */

+	public Adapter createUserDefinedFunctionAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.routines.Method <em>Method</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.routines.Method

+	 * @generated

+	 */

+	public Adapter createMethodAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.constraints.Index <em>Index</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.constraints.Index

+	 * @generated

+	 */

+	public Adapter createIndexAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.schema.IdentitySpecifier <em>Identity Specifier</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.schema.IdentitySpecifier

+	 * @generated

+	 */

+	public Adapter createIdentitySpecifierAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.schema.TypedElement <em>Typed Element</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.schema.TypedElement

+	 * @generated

+	 */

+	public Adapter createTypedElementAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.tables.Column <em>Column</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.tables.Column

+	 * @generated

+	 */

+	public Adapter createColumnAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.datatypes.DataType <em>Data Type</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.datatypes.DataType

+	 * @generated

+	 */

+	public Adapter createDataTypeAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType <em>User Defined Type</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType

+	 * @generated

+	 */

+	public Adapter createUserDefinedTypeAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.datatypes.DistinctUserDefinedType <em>Distinct User Defined Type</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.datatypes.DistinctUserDefinedType

+	 * @generated

+	 */

+	public Adapter createDistinctUserDefinedTypeAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.schema.ObjectExtension <em>Object Extension</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.datatools.modelbase.sql.schema.ObjectExtension

+	 * @generated

+	 */

+	public Adapter createObjectExtensionAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for the default case.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @generated

+	 */

+	public Adapter createEObjectAdapter() {

+		return null;

+	}

+

+} //DB2ModelAdapterFactory

diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/util/DB2ModelSwitch.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/util/DB2ModelSwitch.java
new file mode 100644
index 0000000..4f51d62
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/util/DB2ModelSwitch.java
@@ -0,0 +1,1541 @@
+/*******************************************************************************

+ * Copyright (c) 2005, 2014 IBM Corporation and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.datatools.enablement.ibm.db2.model.util;

+

+

+import org.eclipse.datatools.enablement.ibm.db2.model.*;

+import java.util.List;

+import org.eclipse.datatools.modelbase.sql.constraints.Index;

+import org.eclipse.datatools.modelbase.sql.datatypes.DataType;

+import org.eclipse.datatools.modelbase.sql.datatypes.DistinctUserDefinedType;

+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;

+import org.eclipse.datatools.modelbase.sql.routines.Function;

+import org.eclipse.datatools.modelbase.sql.routines.Method;

+import org.eclipse.datatools.modelbase.sql.routines.Procedure;

+import org.eclipse.datatools.modelbase.sql.routines.Routine;

+import org.eclipse.datatools.modelbase.sql.routines.Source;

+import org.eclipse.datatools.modelbase.sql.routines.UserDefinedFunction;

+import org.eclipse.datatools.modelbase.sql.schema.Database;

+import org.eclipse.datatools.modelbase.sql.schema.IdentitySpecifier;

+import org.eclipse.datatools.modelbase.sql.schema.ObjectExtension;

+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;

+import org.eclipse.datatools.modelbase.sql.schema.Schema;

+import org.eclipse.datatools.modelbase.sql.schema.TypedElement;

+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;

+import org.eclipse.datatools.modelbase.sql.tables.Column;

+import org.eclipse.datatools.modelbase.sql.tables.DerivedTable;

+import org.eclipse.datatools.modelbase.sql.tables.PersistentTable;

+import org.eclipse.datatools.modelbase.sql.tables.Table;

+import org.eclipse.datatools.modelbase.sql.tables.Trigger;

+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EModelElement;

+import org.eclipse.emf.ecore.ENamedElement;

+import org.eclipse.emf.ecore.EObject;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Switch</b> for the model's inheritance hierarchy.

+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}

+ * to invoke the <code>caseXXX</code> method for each class of the model,

+ * starting with the actual class of the object

+ * and proceeding up the inheritance hierarchy

+ * until a non-null result is returned,

+ * which is the result of the switch.

+ * <!-- end-user-doc -->

+ * @see com.ibm.db.models.db2.DB2ModelPackage

+ * @generated

+ */

+public class DB2ModelSwitch {

+	/**

+	 * The cached model package

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected static DB2ModelPackage modelPackage;

+

+	/**

+	 * Creates an instance of the switch.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public DB2ModelSwitch() {

+		if (modelPackage == null) {

+			modelPackage = DB2ModelPackage.eINSTANCE;

+		}

+	}

+

+	/**

+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the first non-null result returned by a <code>caseXXX</code> call.

+	 * @generated

+	 */

+	public Object doSwitch(EObject theEObject) {

+		return doSwitch(theEObject.eClass(), theEObject);

+	}

+

+	/**

+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the first non-null result returned by a <code>caseXXX</code> call.

+	 * @generated

+	 */

+	protected Object doSwitch(EClass theEClass, EObject theEObject) {

+		if (theEClass.eContainer() == modelPackage) {

+			return doSwitch(theEClass.getClassifierID(), theEObject);

+		}

+		else {

+			List eSuperTypes = theEClass.getESuperTypes();

+			return

+				eSuperTypes.isEmpty() ?

+					defaultCase(theEObject) :

+					doSwitch((EClass)eSuperTypes.get(0), theEObject);

+		}

+	}

+

+	/**

+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the first non-null result returned by a <code>caseXXX</code> call.

+	 * @generated

+	 */

+	protected Object doSwitch(int classifierID, EObject theEObject) {

+		switch (classifierID) {

+			case DB2ModelPackage.DB2_DATABASE: {

+				DB2Database db2Database = (DB2Database)theEObject;

+				Object result = caseDB2Database(db2Database);

+				if (result == null) result = caseDatabase(db2Database);

+				if (result == null) result = caseSQLObject(db2Database);

+				if (result == null) result = caseENamedElement(db2Database);

+				if (result == null) result = caseEModelElement(db2Database);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_PACKAGE: {

+				DB2Package db2Package = (DB2Package)theEObject;

+				Object result = caseDB2Package(db2Package);

+				if (result == null) result = caseDB2AccessPlan(db2Package);

+				if (result == null) result = caseSQLObject(db2Package);

+				if (result == null) result = caseENamedElement(db2Package);

+				if (result == null) result = caseEModelElement(db2Package);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_TABLE: {

+				DB2Table db2Table = (DB2Table)theEObject;

+				Object result = caseDB2Table(db2Table);

+				if (result == null) result = casePersistentTable(db2Table);

+				if (result == null) result = caseBaseTable(db2Table);

+				if (result == null) result = caseTable(db2Table);

+				if (result == null) result = caseSQLObject(db2Table);

+				if (result == null) result = caseENamedElement(db2Table);

+				if (result == null) result = caseEModelElement(db2Table);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_TRIGGER: {

+				DB2Trigger db2Trigger = (DB2Trigger)theEObject;

+				Object result = caseDB2Trigger(db2Trigger);

+				if (result == null) result = caseTrigger(db2Trigger);

+				if (result == null) result = caseDB2AccessPlan(db2Trigger);

+				if (result == null) result = caseSQLObject(db2Trigger);

+				if (result == null) result = caseENamedElement(db2Trigger);

+				if (result == null) result = caseEModelElement(db2Trigger);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_PROCEDURE: {

+				DB2Procedure db2Procedure = (DB2Procedure)theEObject;

+				Object result = caseDB2Procedure(db2Procedure);

+				if (result == null) result = caseProcedure(db2Procedure);

+				if (result == null) result = caseDB2Routine(db2Procedure);

+				if (result == null) result = caseRoutine(db2Procedure);

+				if (result == null) result = caseDB2AccessPlan(db2Procedure);

+				if (result == null) result = caseSQLObject(db2Procedure);

+				if (result == null) result = caseENamedElement(db2Procedure);

+				if (result == null) result = caseEModelElement(db2Procedure);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_SCHEMA: {

+				DB2Schema db2Schema = (DB2Schema)theEObject;

+				Object result = caseDB2Schema(db2Schema);

+				if (result == null) result = caseSchema(db2Schema);

+				if (result == null) result = caseSQLObject(db2Schema);

+				if (result == null) result = caseENamedElement(db2Schema);

+				if (result == null) result = caseEModelElement(db2Schema);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_ROUTINE: {

+				DB2Routine db2Routine = (DB2Routine)theEObject;

+				Object result = caseDB2Routine(db2Routine);

+				if (result == null) result = caseRoutine(db2Routine);

+				if (result == null) result = caseDB2AccessPlan(db2Routine);

+				if (result == null) result = caseSQLObject(db2Routine);

+				if (result == null) result = caseENamedElement(db2Routine);

+				if (result == null) result = caseEModelElement(db2Routine);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_DATABASE_MANAGER: {

+				DB2DatabaseManager db2DatabaseManager = (DB2DatabaseManager)theEObject;

+				Object result = caseDB2DatabaseManager(db2DatabaseManager);

+				if (result == null) result = caseSQLObject(db2DatabaseManager);

+				if (result == null) result = caseENamedElement(db2DatabaseManager);

+				if (result == null) result = caseEModelElement(db2DatabaseManager);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_VIEW: {

+				DB2View db2View = (DB2View)theEObject;

+				Object result = caseDB2View(db2View);

+				if (result == null) result = caseViewTable(db2View);

+				if (result == null) result = caseDerivedTable(db2View);

+				if (result == null) result = caseTable(db2View);

+				if (result == null) result = caseSQLObject(db2View);

+				if (result == null) result = caseENamedElement(db2View);

+				if (result == null) result = caseEModelElement(db2View);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_APPLICATION_PROCESS: {

+				DB2ApplicationProcess db2ApplicationProcess = (DB2ApplicationProcess)theEObject;

+				Object result = caseDB2ApplicationProcess(db2ApplicationProcess);

+				if (result == null) result = caseSQLObject(db2ApplicationProcess);

+				if (result == null) result = caseENamedElement(db2ApplicationProcess);

+				if (result == null) result = caseEModelElement(db2ApplicationProcess);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_TRANSACTION: {

+				DB2Transaction db2Transaction = (DB2Transaction)theEObject;

+				Object result = caseDB2Transaction(db2Transaction);

+				if (result == null) result = caseSQLObject(db2Transaction);

+				if (result == null) result = caseENamedElement(db2Transaction);

+				if (result == null) result = caseEModelElement(db2Transaction);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_SYSTEM_SCHEMA: {

+				DB2SystemSchema db2SystemSchema = (DB2SystemSchema)theEObject;

+				Object result = caseDB2SystemSchema(db2SystemSchema);

+				if (result == null) result = caseDB2Schema(db2SystemSchema);

+				if (result == null) result = caseSchema(db2SystemSchema);

+				if (result == null) result = caseSQLObject(db2SystemSchema);

+				if (result == null) result = caseENamedElement(db2SystemSchema);

+				if (result == null) result = caseEModelElement(db2SystemSchema);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_SOURCE: {

+				DB2Source db2Source = (DB2Source)theEObject;

+				Object result = caseDB2Source(db2Source);

+				if (result == null) result = caseSource(db2Source);

+				if (result == null) result = caseSQLObject(db2Source);

+				if (result == null) result = caseENamedElement(db2Source);

+				if (result == null) result = caseEModelElement(db2Source);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_ACCESS_PLAN: {

+				DB2AccessPlan db2AccessPlan = (DB2AccessPlan)theEObject;

+				Object result = caseDB2AccessPlan(db2AccessPlan);

+				if (result == null) result = caseSQLObject(db2AccessPlan);

+				if (result == null) result = caseENamedElement(db2AccessPlan);

+				if (result == null) result = caseEModelElement(db2AccessPlan);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_USER_DEFINED_FUNCTION: {

+				DB2UserDefinedFunction db2UserDefinedFunction = (DB2UserDefinedFunction)theEObject;

+				Object result = caseDB2UserDefinedFunction(db2UserDefinedFunction);

+				if (result == null) result = caseUserDefinedFunction(db2UserDefinedFunction);

+				if (result == null) result = caseDB2Function(db2UserDefinedFunction);

+				if (result == null) result = caseFunction(db2UserDefinedFunction);

+				if (result == null) result = caseDB2Routine(db2UserDefinedFunction);

+				if (result == null) result = caseRoutine(db2UserDefinedFunction);

+				if (result == null) result = caseDB2AccessPlan(db2UserDefinedFunction);

+				if (result == null) result = caseSQLObject(db2UserDefinedFunction);

+				if (result == null) result = caseENamedElement(db2UserDefinedFunction);

+				if (result == null) result = caseEModelElement(db2UserDefinedFunction);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_METHOD: {

+				DB2Method db2Method = (DB2Method)theEObject;

+				Object result = caseDB2Method(db2Method);

+				if (result == null) result = caseMethod(db2Method);

+				if (result == null) result = caseDB2Function(db2Method);

+				if (result == null) result = caseFunction(db2Method);

+				if (result == null) result = caseDB2Routine(db2Method);

+				if (result == null) result = caseRoutine(db2Method);

+				if (result == null) result = caseDB2AccessPlan(db2Method);

+				if (result == null) result = caseSQLObject(db2Method);

+				if (result == null) result = caseENamedElement(db2Method);

+				if (result == null) result = caseEModelElement(db2Method);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_EXTENDED_OPTIONS: {

+				DB2ExtendedOptions db2ExtendedOptions = (DB2ExtendedOptions)theEObject;

+				Object result = caseDB2ExtendedOptions(db2ExtendedOptions);

+				if (result == null) result = caseSQLObject(db2ExtendedOptions);

+				if (result == null) result = caseENamedElement(db2ExtendedOptions);

+				if (result == null) result = caseEModelElement(db2ExtendedOptions);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_ALIAS: {

+				DB2Alias db2Alias = (DB2Alias)theEObject;

+				Object result = caseDB2Alias(db2Alias);

+				if (result == null) result = caseTable(db2Alias);

+				if (result == null) result = caseSQLObject(db2Alias);

+				if (result == null) result = caseENamedElement(db2Alias);

+				if (result == null) result = caseEModelElement(db2Alias);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_MATERIALIZED_QUERY_TABLE: {

+				DB2MaterializedQueryTable db2MaterializedQueryTable = (DB2MaterializedQueryTable)theEObject;

+				Object result = caseDB2MaterializedQueryTable(db2MaterializedQueryTable);

+				if (result == null) result = caseDerivedTable(db2MaterializedQueryTable);

+				if (result == null) result = caseTable(db2MaterializedQueryTable);

+				if (result == null) result = caseSQLObject(db2MaterializedQueryTable);

+				if (result == null) result = caseENamedElement(db2MaterializedQueryTable);

+				if (result == null) result = caseEModelElement(db2MaterializedQueryTable);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_INDEX: {

+				DB2Index db2Index = (DB2Index)theEObject;

+				Object result = caseDB2Index(db2Index);

+				if (result == null) result = caseIndex(db2Index);

+				if (result == null) result = caseSQLObject(db2Index);

+				if (result == null) result = caseENamedElement(db2Index);

+				if (result == null) result = caseEModelElement(db2Index);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_MULTIDIMENSIONAL_INDEX: {

+				DB2MultidimensionalIndex db2MultidimensionalIndex = (DB2MultidimensionalIndex)theEObject;

+				Object result = caseDB2MultidimensionalIndex(db2MultidimensionalIndex);

+				if (result == null) result = caseIndex(db2MultidimensionalIndex);

+				if (result == null) result = caseSQLObject(db2MultidimensionalIndex);

+				if (result == null) result = caseENamedElement(db2MultidimensionalIndex);

+				if (result == null) result = caseEModelElement(db2MultidimensionalIndex);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_FUNCTION: {

+				DB2Function db2Function = (DB2Function)theEObject;

+				Object result = caseDB2Function(db2Function);

+				if (result == null) result = caseDB2Routine(db2Function);

+				if (result == null) result = caseRoutine(db2Function);

+				if (result == null) result = caseDB2AccessPlan(db2Function);

+				if (result == null) result = caseSQLObject(db2Function);

+				if (result == null) result = caseENamedElement(db2Function);

+				if (result == null) result = caseEModelElement(db2Function);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_JAVA_OPTIONS: {

+				DB2JavaOptions db2JavaOptions = (DB2JavaOptions)theEObject;

+				Object result = caseDB2JavaOptions(db2JavaOptions);

+				if (result == null) result = caseSQLObject(db2JavaOptions);

+				if (result == null) result = caseENamedElement(db2JavaOptions);

+				if (result == null) result = caseEModelElement(db2JavaOptions);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_PROCEDURE_DEPLOY: {

+				DB2ProcedureDeploy db2ProcedureDeploy = (DB2ProcedureDeploy)theEObject;

+				Object result = caseDB2ProcedureDeploy(db2ProcedureDeploy);

+				if (result == null) result = caseSQLObject(db2ProcedureDeploy);

+				if (result == null) result = caseENamedElement(db2ProcedureDeploy);

+				if (result == null) result = caseEModelElement(db2ProcedureDeploy);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2OLAP_OBJECT: {

+				DB2OLAPObject db2OLAPObject = (DB2OLAPObject)theEObject;

+				Object result = caseDB2OLAPObject(db2OLAPObject);

+				if (result == null) result = caseSQLObject(db2OLAPObject);

+				if (result == null) result = caseENamedElement(db2OLAPObject);

+				if (result == null) result = caseEModelElement(db2OLAPObject);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_ROUTINE_EXTENSION: {

+				DB2RoutineExtension db2RoutineExtension = (DB2RoutineExtension)theEObject;

+				Object result = caseDB2RoutineExtension(db2RoutineExtension);

+				if (result == null) result = caseSQLObject(db2RoutineExtension);

+				if (result == null) result = caseENamedElement(db2RoutineExtension);

+				if (result == null) result = caseEModelElement(db2RoutineExtension);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_IDENTITY_SPECIFIER: {

+				DB2IdentitySpecifier db2IdentitySpecifier = (DB2IdentitySpecifier)theEObject;

+				Object result = caseDB2IdentitySpecifier(db2IdentitySpecifier);

+				if (result == null) result = caseIdentitySpecifier(db2IdentitySpecifier);

+				if (result == null) result = caseSQLObject(db2IdentitySpecifier);

+				if (result == null) result = caseENamedElement(db2IdentitySpecifier);

+				if (result == null) result = caseEModelElement(db2IdentitySpecifier);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_JAR: {

+				DB2Jar db2Jar = (DB2Jar)theEObject;

+				Object result = caseDB2Jar(db2Jar);

+				if (result == null) result = caseSQLObject(db2Jar);

+				if (result == null) result = caseENamedElement(db2Jar);

+				if (result == null) result = caseEModelElement(db2Jar);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_COLUMN: {

+				DB2Column db2Column = (DB2Column)theEObject;

+				Object result = caseDB2Column(db2Column);

+				if (result == null) result = caseColumn(db2Column);

+				if (result == null) result = caseTypedElement(db2Column);

+				if (result == null) result = caseSQLObject(db2Column);

+				if (result == null) result = caseENamedElement(db2Column);

+				if (result == null) result = caseEModelElement(db2Column);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2XSR_OBJECT: {

+				DB2XSRObject db2XSRObject = (DB2XSRObject)theEObject;

+				Object result = caseDB2XSRObject(db2XSRObject);

+				if (result == null) result = caseSQLObject(db2XSRObject);

+				if (result == null) result = caseENamedElement(db2XSRObject);

+				if (result == null) result = caseEModelElement(db2XSRObject);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2XML_SCHEMA: {

+				DB2XMLSchema db2XMLSchema = (DB2XMLSchema)theEObject;

+				Object result = caseDB2XMLSchema(db2XMLSchema);

+				if (result == null) result = caseDB2XSRObject(db2XMLSchema);

+				if (result == null) result = caseSQLObject(db2XMLSchema);

+				if (result == null) result = caseENamedElement(db2XMLSchema);

+				if (result == null) result = caseEModelElement(db2XMLSchema);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2XML_SCHEMA_DOCUMENT: {

+				DB2XMLSchemaDocument db2XMLSchemaDocument = (DB2XMLSchemaDocument)theEObject;

+				Object result = caseDB2XMLSchemaDocument(db2XMLSchemaDocument);

+				if (result == null) result = caseSQLObject(db2XMLSchemaDocument);

+				if (result == null) result = caseENamedElement(db2XMLSchemaDocument);

+				if (result == null) result = caseEModelElement(db2XMLSchemaDocument);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2XML_SCHEMA_DOC_PROPERTIES: {

+				DB2XMLSchemaDocProperties db2XMLSchemaDocProperties = (DB2XMLSchemaDocProperties)theEObject;

+				Object result = caseDB2XMLSchemaDocProperties(db2XMLSchemaDocProperties);

+				if (result == null) result = caseSQLObject(db2XMLSchemaDocProperties);

+				if (result == null) result = caseENamedElement(db2XMLSchemaDocProperties);

+				if (result == null) result = caseEModelElement(db2XMLSchemaDocProperties);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_PACKAGE_STATEMENT: {

+				DB2PackageStatement db2PackageStatement = (DB2PackageStatement)theEObject;

+				Object result = caseDB2PackageStatement(db2PackageStatement);

+				if (result == null) result = caseSQLObject(db2PackageStatement);

+				if (result == null) result = caseENamedElement(db2PackageStatement);

+				if (result == null) result = caseEModelElement(db2PackageStatement);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_DISTINCT_USER_DEFINED_TYPE: {

+				DB2DistinctUserDefinedType db2DistinctUserDefinedType = (DB2DistinctUserDefinedType)theEObject;

+				Object result = caseDB2DistinctUserDefinedType(db2DistinctUserDefinedType);

+				if (result == null) result = caseDistinctUserDefinedType(db2DistinctUserDefinedType);

+				if (result == null) result = caseUserDefinedType(db2DistinctUserDefinedType);

+				if (result == null) result = caseDataType(db2DistinctUserDefinedType);

+				if (result == null) result = caseSQLObject(db2DistinctUserDefinedType);

+				if (result == null) result = caseENamedElement(db2DistinctUserDefinedType);

+				if (result == null) result = caseEModelElement(db2DistinctUserDefinedType);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_PERIOD: {

+				DB2Period db2Period = (DB2Period)theEObject;

+				Object result = caseDB2Period(db2Period);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_CLUSTER: {

+				DB2Cluster db2Cluster = (DB2Cluster)theEObject;

+				Object result = caseDB2Cluster(db2Cluster);

+				if (result == null) result = caseSQLObject(db2Cluster);

+				if (result == null) result = caseENamedElement(db2Cluster);

+				if (result == null) result = caseEModelElement(db2Cluster);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_MEMBER: {

+				DB2Member db2Member = (DB2Member)theEObject;

+				Object result = caseDB2Member(db2Member);

+				if (result == null) result = caseSQLObject(db2Member);

+				if (result == null) result = caseENamedElement(db2Member);

+				if (result == null) result = caseEModelElement(db2Member);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_UNIQUE_CONSTRAINT_EXTENSION: {

+				DB2UniqueConstraintExtension db2UniqueConstraintExtension = (DB2UniqueConstraintExtension)theEObject;

+				Object result = caseDB2UniqueConstraintExtension(db2UniqueConstraintExtension);

+				if (result == null) result = caseSQLObject(db2UniqueConstraintExtension);

+				if (result == null) result = caseObjectExtension(db2UniqueConstraintExtension);

+				if (result == null) result = caseENamedElement(db2UniqueConstraintExtension);

+				if (result == null) result = caseEModelElement(db2UniqueConstraintExtension);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_MASK: {

+				DB2Mask db2Mask = (DB2Mask)theEObject;

+				Object result = caseDB2Mask(db2Mask);

+				if (result == null) result = caseSQLObject(db2Mask);

+				if (result == null) result = caseENamedElement(db2Mask);

+				if (result == null) result = caseEModelElement(db2Mask);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case DB2ModelPackage.DB2_PERMISSION: {

+				DB2Permission db2Permission = (DB2Permission)theEObject;

+				Object result = caseDB2Permission(db2Permission);

+				if (result == null) result = caseSQLObject(db2Permission);

+				if (result == null) result = caseENamedElement(db2Permission);

+				if (result == null) result = caseEModelElement(db2Permission);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			default: return defaultCase(theEObject);

+		}

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Database</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Database</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2Database(DB2Database object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Package</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Package</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2Package(DB2Package object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Table</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Table</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2Table(DB2Table object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Trigger</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Trigger</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2Trigger(DB2Trigger object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Procedure</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Procedure</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2Procedure(DB2Procedure object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Schema</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Schema</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2Schema(DB2Schema object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Routine</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Routine</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2Routine(DB2Routine object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Database Manager</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Database Manager</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2DatabaseManager(DB2DatabaseManager object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 View</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 View</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2View(DB2View object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Application Process</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Application Process</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2ApplicationProcess(DB2ApplicationProcess object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Transaction</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Transaction</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2Transaction(DB2Transaction object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 System Schema</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 System Schema</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2SystemSchema(DB2SystemSchema object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Source</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Source</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2Source(DB2Source object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Access Plan</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Access Plan</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2AccessPlan(DB2AccessPlan object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 User Defined Function</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 User Defined Function</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2UserDefinedFunction(DB2UserDefinedFunction object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Method</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Method</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2Method(DB2Method object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Extended Options</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Extended Options</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2ExtendedOptions(DB2ExtendedOptions object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Alias</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Alias</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2Alias(DB2Alias object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Materialized Query Table</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Materialized Query Table</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2MaterializedQueryTable(DB2MaterializedQueryTable object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Index</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Index</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2Index(DB2Index object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Multidimensional Index</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Multidimensional Index</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2MultidimensionalIndex(DB2MultidimensionalIndex object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Function</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Function</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2Function(DB2Function object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Java Options</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Java Options</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2JavaOptions(DB2JavaOptions object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Procedure Deploy</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Procedure Deploy</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2ProcedureDeploy(DB2ProcedureDeploy object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2OLAP Object</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2OLAP Object</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2OLAPObject(DB2OLAPObject object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Routine Extension</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Routine Extension</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2RoutineExtension(DB2RoutineExtension object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Identity Specifier</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Identity Specifier</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2IdentitySpecifier(DB2IdentitySpecifier object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Jar</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Jar</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2Jar(DB2Jar object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Column</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Column</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2Column(DB2Column object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2XSR Object</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2XSR Object</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2XSRObject(DB2XSRObject object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2XML Schema</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2XML Schema</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2XMLSchema(DB2XMLSchema object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2XML Schema Document</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2XML Schema Document</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2XMLSchemaDocument(DB2XMLSchemaDocument object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2XML Schema Doc Properties</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2XML Schema Doc Properties</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2XMLSchemaDocProperties(DB2XMLSchemaDocProperties object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Package Statement</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Package Statement</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2PackageStatement(DB2PackageStatement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Distinct User Defined Type</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Distinct User Defined Type</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2DistinctUserDefinedType(DB2DistinctUserDefinedType object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Period</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Period</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2Period(DB2Period object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Cluster</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Cluster</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2Cluster(DB2Cluster object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Member</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Member</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2Member(DB2Member object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Unique Constraint Extension</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Unique Constraint Extension</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2UniqueConstraintExtension(DB2UniqueConstraintExtension object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Mask</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Mask</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2Mask(DB2Mask object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>DB2 Permission</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>DB2 Permission</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDB2Permission(DB2Permission object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>EModel Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>EModel Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseEModelElement(EModelElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>ENamed Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>ENamed Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseENamedElement(ENamedElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>SQL Object</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>SQL Object</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseSQLObject(SQLObject object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Database</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Database</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDatabase(Database object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Table</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Table</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseTable(Table object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Base Table</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Base Table</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseBaseTable(BaseTable object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Persistent Table</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Persistent Table</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object casePersistentTable(PersistentTable object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Trigger</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Trigger</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseTrigger(Trigger object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Routine</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Routine</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseRoutine(Routine object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Procedure</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Procedure</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseProcedure(Procedure object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Schema</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Schema</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseSchema(Schema object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Derived Table</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Derived Table</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDerivedTable(DerivedTable object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>View Table</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>View Table</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseViewTable(ViewTable object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Source</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Source</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseSource(Source object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Function</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Function</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseFunction(Function object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>User Defined Function</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>User Defined Function</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseUserDefinedFunction(UserDefinedFunction object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Method</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Method</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseMethod(Method object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Index</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Index</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseIndex(Index object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Identity Specifier</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Identity Specifier</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseIdentitySpecifier(IdentitySpecifier object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Typed Element</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Typed Element</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseTypedElement(TypedElement object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Column</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Column</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseColumn(Column object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Data Type</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Data Type</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDataType(DataType object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>User Defined Type</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>User Defined Type</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseUserDefinedType(UserDefinedType object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Distinct User Defined Type</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Distinct User Defined Type</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseDistinctUserDefinedType(DistinctUserDefinedType object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Object Extension</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Object Extension</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public Object caseObjectExtension(ObjectExtension object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch, but this is the last case anyway.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)

+	 * @generated

+	 */

+	public Object defaultCase(EObject object) {

+		return null;

+	}

+

+} //DB2ModelSwitch

diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/util/ReverseNavigationHelper.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/util/ReverseNavigationHelper.java
new file mode 100644
index 0000000..65ca739
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/model/util/ReverseNavigationHelper.java
@@ -0,0 +1,560 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.model.util;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.emf.common.util.BasicEList;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.BasicEList.UnmodifiableEList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ * <em>ReverseNavigationHelper</em>
+ * <p>
+ * Helper to augment a one-way EMF relationship with
+ * a <i>virtual inverse relationship</i> that makes it possible to navigate the one-way relationship in the opposite direction. 
+ * This can be useful in cases where you wish to 
+ * define a two-way relationship between classes that come from two different EMF models, but you only have 
+ * authority to modify one of the models. In this situation you could create an explicit one-way EMF relationship from
+ * the class in your model to a class that belongs to the read-only model, and then you could establish a
+ * virtual inverse relationship that would allow you to write code that navigates in the inverse direction.
+ * <p>
+ * In order to use this helper to define a virtual inverse relationship, a client must do the
+ * following:
+ * <ol>
+ * <li>Create a singleton instance of a {@link InverseAdapter}. This instance has state
+ * that identifies the
+ * {@link org.eclipse.emf.ecore.EReference} object that defines the one-way 
+ * relationship and also 
+ * a flag to indicate whether the virtual inverse relationship has a cardinality of 
+ * {@link #SINGLE} or {@link #MULTIPLE}.
+ * <p>
+ * For example, if the EMF package <code>MyPackage</code> has a one-way relationship called <code>foo</code>
+ * from class <code>SourceClass</code> to class <code>TargetClass</code>, and you wish the virtual inverse relationship
+ * to have a cardinality of <code>SINGLE</code>, you could define this
+ * singleton adapter as follows:
+ * <p>
+ * <xmp>
+ *    protected static final EReference fooRef = MyPackage.eINSTANCE.getSourceClass_Foo();
+ *    public static final InverseAdapter INVERSE_FOO_ADAPTER = new InverseAdapter(fooRef, SINGLE);
+ * </xmp>
+ * <p>
+ * <li>Make sure that the singleton instance is attached to every potential source object
+ * at the time each source object is created.
+ * <p>
+ * There are different ways that this
+ * can be done in EMF. For instance, you can override the 
+ * appropriate create method in the generated FactoryImpl for the package.
+ * Another way is that an AdapterFactory may be created and registered
+ * for objects that require source adapters.
+ * <p>
+ * <li>Anywhere it is necessary to navigate from the target object back to the source object,
+ * use the singleton instance of <code>TargetAdapter</code> created in step 1
+ * to invoke the method {@link InverseAdapter#getOppositeEnd(Notifier)}.
+ * The argument to this method is the target of the one-way EMF relationship (i.e. it is the <u>source</u> of
+ * the virtual inverse relationship.)
+ * The value returned by this method is the source of the one-way EMF relationship (i.e. it is the <u>target</u> of
+ * the virtual inverse relationship.)
+ * <p>
+ * You may find it useful to provide a static convenience <i>get</i> method for the virtual inverse relationship.
+ * This convenience method could
+ * hide the singleton instance of the <code>InverseAdapter</code> and also cast the result of <code>getOppositeEnd</code> 
+ * to be the appropriate type. 
+ * So, for example, given the one-way relationship called <code>foo</code> described above, 
+ * you may wish to define the following convenience method:
+ * <p>
+ * <xmp>
+ *    public static SourceClass getInverseFoo(TargetClass t) {
+ *       return (SourceClass) INVERSE_FOO_ADAPTER.getOppositeEnd(t);
+ *    }
+ * </xmp>
+ * <p>
+ * Note, if we had chosen to define the virtual inverse relationship to be <code>MULTIPLE</code>
+ * instead of <code>SINGLE</code>, the convienience method would be
+ * <p>
+ * <xmp>
+ *    public static EList getInverseFoo(TargetClass t) {
+ *       return (EList) INVERSE_FOO_ADAPTER.getOppositeEnd(t);
+ *    }
+ * </xmp>
+ * </ol>
+ * <p>
+ * <u><i>Usage Notes</i></u>
+ * <ul>
+ * <li>Note that there is no <code>setOppositeEnd</code> method. 
+ * Also note that in the case where the inverse cardinality is
+ * <code>MULTIPLE</code>, the EList that is returned from <code>getOppositeEnd</code> in unmodifiable.
+ * Thus, the only way to create an instance of a virtual inverse relationship is to create an instance of the corresponeding 
+ * one-way EMF relationship.
+ * <li>For virtual inverse relationships where the cardinality is <code>SINGLE</code>, if a given target object is already has a
+ * source object, the relationship on the old source object will be automatically updated to remove the target.
+ * <p>For example, if <code>s1</code> and <code>s2</code> are instances of <code>SourceClass</code> (from the above
+ * example)
+ * and <code>t1</code> is an instance of <code>TargetClass</code>, 
+ * the following code fragment:
+ * <p>
+ * <xmp>
+ *    s1.setFoo(t1); // creates real rel s1->t1 and virtual rel t1->s1
+ *    s2.setFoo(t1); // creates real rel s2->t1 and virtual rel t1->s2 and destroys real rel s1->t1
+ *    System.out.println(s1.getFoo());
+ * </xmp>
+ * <p>
+ * will print <b>null</b>. 
+ * <p>
+ * <i>In other words, the fact that the virtual inverse relationship
+ * from <code>TargetClass</code> to <code>SourceClass</code> has a cardinality of <code>SINGLE</code>,
+ * introduces a side-effect to the generated set method that did not occur when the virtual inverse relationship was
+ * not present. </i>
+ * <p>
+ * <li>If the source and the target of a one-way EMF relationship are serialized
+ * into different resources, the link from the source to the target is preserved
+ * but the link from the target back to the source is not serialized.
+ * In other words, there is no proxy reference from the target resource back to the source resource.
+ * (This is how you would expect any one-way EMF relationship to behave. In general, you would not
+ * want the addition of a one-way reference to cause the target to be modified in any way.)
+ * This means that if the target resource is deserialized but the source resource is not,
+ * the virtual inverse relationship will not be created and it will not be possible to navigate
+ * from the target object back to the source object.
+ * Thus, the source resource must be loaded explicitly in order for
+ * the virtual inverse relationship to be navigable.
+ * </ul>
+ * <p>
+ * <u><i>Implementation Notes</i></u>
+ * <p>
+ * As stated above, the helper requires that a singleton instance of <code>InverseAdapter</code> be attached to
+ * every potential source object. This adapter listens for changes to the specified one-way relationship. Whenever
+ * a target object is added to this relationship, another adapter called a <code>TargetAdapter</code> is created and
+ * attached to the target object. 
+ * There is a separate instance of <code>TargetAdapter</code> for each instance of the target object. This adapter has
+ * state that includes the source object (or a list of source objects, depending on the inverse cardinality.)
+ * This <code>TargetAdapter</code> class is completely hidden from the client. 
+ * The implementation of the {@link InverseAdpater#getOppositeEnd} method interogates the 
+ * <code>TargetAdapter</code> and returns the object at the other end of the virtual inverse relationship.
+ * <p>
+ * Whenever the <code>InverseAdapter</code> processes a SET or ADD event that involves a proxy reference, the
+ * proxy will automatically be resolved. This will ensure that any new <code>TargetAdapter</code> that needs to 
+ * be created will be attached to
+ * the resolved target object rather than to the proxy for the target object.
+ * <p>
+ * The <code>InverseAdapter</code> also listens for changes that remove a target object from the specified one-way relationship.
+ * When an UNSET or REMOVE event is processed, the corresponding <code>targetAdapter</code> will be updated as needed.
+ */
+
+public class ReverseNavigationHelper {
+	
+	/**
+	 * <code>SINGLE</code> is used when constructing a {@link InverseAdapter} to specify that the cardinality
+	 * of the source object is 1.
+	 */
+	public final static int SINGLE=1;
+
+	/**
+	 * <code>MULTIPLE</code> is used when constructing a {@link InverseAdapter} to specify that the cardinality
+	 * of the source object is many.
+	 */
+	public final static int MULTIPLE=-1;
+
+	/**
+	 * A <code>InverseAdapter</code> may be attached to any <code>EObject</code> that is the source of 
+	 * a one-way EMF relationship. This adapter will provide the ability to
+	 * navigate from a target object back to a source object via the {@link ReverseNavigationHelper#getOppositeEnd(Notifier)}
+	 * helper method.
+	 * <p>
+	 * A singleton instance of a InverseAdapter is needed for a given type of relationship.
+	 * This singleton instance can be attached to all instances of the 
+	 * source of that relationship. The InverseAdapter must be constructed with the
+	 * <code>EReference</code> that identifies the relationship and also 
+	 * with a flag to indicate whether the virtual inverse relationship has a cardinality of 
+	 * {@link #SINGLE} or {@link #MULTIPLE}.
+	 * <ul>
+	 * <li> If the cardinality is <code>SINGLE</code>, a given target object can have be accessed by only one source object on the
+	 * specified relationship.
+	 * <li>If the cardinality can is <code>MULTIPLE</code>, a given target object can be accessed by many source objects on
+	 * the specified relationship.
+	 * <eul>
+	 * Note that the cardinality of the virtual inverse relationship is completely independent of the cardinality
+	 * of the forward relationship that is specified in the EMF model. Thus this helper class supports 1-to-1,
+	 * 1-to-many, many-to-1, and many-to-many relationships.
+	 */
+	public static class InverseAdapter extends AdapterImpl {
+		
+		protected EReference reference;
+		protected int inverseCardinality;
+	
+		/**
+		 * Constructs a InverseAdapter for the specified relationship. The inverse cardinality will be set to SINGLE.
+		 * @param reference The EReference that represents a one-way EMF relationship that needs to be augmented
+		 */
+		public InverseAdapter(EReference reference) {
+			this(reference, SINGLE);
+		}
+	
+		/**
+		 * Constructs a InverseAdapter for the specified relationship and inverse cardinality.
+		 * @param reference The EReference that represents a one-way EMF relationship that needs to be augmented
+		 * @param inverseCardinality Either {@link ReverseNavigationHelper#SINGLE} or {@link ReverseNavigationHelper#MULTIPLE}.
+		 * Indicate of whether the target object can be 1 or many source objects via the specified relationship.
+		 */
+		public InverseAdapter(EReference reference, int inverseCardinality) {
+			super();
+			// TODO: should we throw and exception if the reference is already bidirectional???
+			this.reference = reference;
+			this.inverseCardinality = inverseCardinality;
+		}
+		/**
+		 * Returns the source object of an augmented one-way relationship.
+		 * <p>
+		 * <u><i>Usage Notes</i></u>
+		 * <ul>
+		 * <li>If the cardinality of the virtual inverse relationship is <code>SINGLE</code>, the <code>getOppositeEnd</code> returns
+		 * the single <code>EObject</code> at the other end of the relationship. 
+		 * If there is no instance of the virtual inverse relationship
+		 * involving the specified object, <b>null</b> is returned.
+		 * <li>If the cardinality of the virtual inverse relationship is <code>MULTIPLE</code>, the <code>getOppositeEnd</code> returns
+		 * an <code>EList</code> containing all the other end of the relationship.
+		 * This <code>EList</code> will be an unmodifiable list. Any attempt to add or remove members to or from the list
+		 * will throw an {@link UnsupportedOperationException}.
+		 * If there is no instance of the virtual inverse relationship
+		 * involving the specified object, an empty list is returned.
+		 * </ul>
+		 * <p>
+		 * 
+		 * @param target The object that is the target of the one-way relationship
+		 * @return If the inverseCardinality is {@link ReverseNavigationHelper#SINGLE}, the result will be an EObject of the appropriate type.
+		 * If the inverseCardinality is {@link ReverseNavigationHelper#MULTIPLE}, the result will be an <b>unmodifiable</b> <code>EList</code> containing the objects.
+		 */
+		public Object getOppositeEnd(Notifier target) {
+			Object source=null;
+            
+            TargetAdapter a = null;
+            for (Iterator iterator = target.eAdapters().iterator(); iterator.hasNext();)
+            {
+                Adapter adapter = (Adapter)iterator.next();
+                if (adapter.isAdapterForType(reference) && adapter instanceof TargetAdapter)
+                {
+                    a = (TargetAdapter) adapter;
+                    break;
+                }
+            }
+            
+			if (a==null)
+			{
+				if (inverseCardinality==SINGLE) 
+				{
+					a = (TargetAdapter) TargetAdapterFactory.SINGLE_SOURCE.adapt(target,reference);
+				}
+				else
+				{
+					a = (TargetAdapter) TargetAdapterFactory.MULTIPLE_SOURCE.adapt(target,reference);
+				}
+				
+			}
+			if (a!=null) {
+				source = a.getSource();
+			}
+			return source;
+		}	
+		/* (non-Javadoc)
+		 * @see org.eclipse.emf.common.notify.Adapter#isAdapterForType(java.lang.Object)
+		 */
+		public boolean isAdapterForType(Object type) {
+			return type==InverseAdapter.class;
+		}
+		
+		/* (non-Javadoc)
+		 * @see org.eclipse.emf.common.notify.Adapter#notifyChanged(org.eclipse.emf.common.notify.Notification)
+		 */
+		public void notifyChanged(Notification notification) {
+			
+			if (!reference.equals(notification.getFeature())) return;
+			
+			int eventType = notification.getEventType();
+			
+			Object oldTarget = notification.getOldValue(); 
+			Object newTarget = notification.getNewValue();
+			EObject source = (EObject)notification.getNotifier();
+			switch (eventType) {
+				case Notification.SET:
+					removeSourceFromOldTarget(source, (EObject)oldTarget);
+					addNewSourceToNewTarget(notification,(EObject)newTarget,-1);
+					break;
+				case Notification.UNSET:
+					removeSourceFromOldTarget(source,(EObject)oldTarget);
+					break;
+				case Notification.ADD:
+					addNewSourceToNewTarget(notification,(EObject)newTarget, notification.getPosition());
+					break;
+				case Notification.ADD_MANY:
+					Iterator a = ((List)newTarget).iterator();
+				    List targetList = (List) newTarget;
+					for (int i=0, size=targetList.size(); i<size; i++) {
+						addNewSourceToNewTarget(notification,(EObject)targetList.get(i), i);
+					}
+					break;
+				case Notification.REMOVE:
+					removeSourceFromOldTarget(source,(EObject)oldTarget);
+					break;
+				case Notification.REMOVE_MANY:
+					Iterator r = ((List)oldTarget).iterator();
+					while (r.hasNext()) {
+						removeSourceFromOldTarget(source,(EObject)r.next());
+					}
+					break;
+				case Notification.RESOLVE:
+					removeSourceFromOldTarget(source, (EObject)oldTarget);
+					addNewSourceToNewTarget(notification,(EObject)newTarget,-1);
+					break;
+			}
+		}
+		// 	Access and set the TargetAdapter of the appropriate type
+		private void addNewSourceToNewTarget(Notification notification, EObject target, int pos) {
+			if (target!=null) {
+				EObject newSource = (EObject) notification.getNotifier();
+				// Target may be a proxy. If so, we should resolve it now
+				// so we can add an adapter to the resolved target...
+				if (target.eIsProxy()) {
+					if (reference.isMany()) {
+						List list = (List)newSource.eGet(reference);
+						target = (EObject)list.get(pos);
+					}
+					else
+					{
+						target = (EObject) newSource.eGet(reference);
+					}
+				}
+				
+				// Now get an existing adapter or add a new adapter, as needed. 
+				// Chose the type of Adapter based on the cardinality of the inverse rel. 
+				TargetAdapter a;
+			
+				if (inverseCardinality==SINGLE) 
+				{
+					a = (TargetAdapter) TargetAdapterFactory.SINGLE_SOURCE.adapt(target,reference);
+				}
+				else
+				{
+					a = (TargetAdapter) TargetAdapterFactory.MULTIPLE_SOURCE.adapt(target,reference);
+				}
+
+				a.setSource(newSource);
+
+			}
+		}
+		// If this object already has an TargetAdapter for this reference, unset the value
+		private void removeSourceFromOldTarget(EObject oldSource, Notifier target) {
+			if (target!=null) {
+				TargetAdapter a = (TargetAdapter) EcoreUtil.getAdapter(target.eAdapters(),reference);
+				if(a!=null)
+				a.unsetSource(oldSource);
+			}
+		}
+	} //InverseAdapter
+	
+	private static class TargetAdapterFactory extends AdapterFactoryImpl {
+		
+			
+			protected static TargetAdapterFactory SINGLE_SOURCE = 
+				new TargetAdapterFactory() {
+				protected Adapter createAdapter(Notifier target) {
+					Adapter a = new TargetWithSingleSourceAdapter();
+					a.setTarget(target);
+					return a;
+				}
+				
+			};
+			protected static TargetAdapterFactory MULTIPLE_SOURCE = 
+				new TargetAdapterFactory(){
+				protected Adapter createAdapter(Notifier target) {
+					Adapter a = new TargetWithMultipleSourceAdapter();
+					a.setTarget(target);
+					return a;
+				}
+				
+			};
+			protected TargetAdapterFactory() {
+				super();
+			}
+			/* (non-Javadoc)
+			 * @see org.eclipse.emf.common.notify.impl.AdapterFactoryImpl#createAdapter(org.eclipse.emf.common.notify.Notifier, java.lang.Object)
+			 */
+			protected Adapter createAdapter(Notifier target, Object type) {
+				TargetAdapter t = (TargetAdapter)super.createAdapter(target, type);
+				t.setReference((EReference)type);
+				return t;
+			}
+			/* (non-Javadoc)
+			 * @see org.eclipse.emf.common.notify.AdapterFactory#isFactoryForType(java.lang.Object)
+			 */
+			public boolean isFactoryForType(Object type) {
+				if (type instanceof EObject) {
+					EObject eObj = (EObject) type;
+					if (eObj.eClass() == EcorePackage.eINSTANCE.getEReference()) return true;
+				}
+				return super.isFactoryForType(type);
+			}
+            
+            public Adapter adapt(Notifier target, Object type)
+            {
+                for (Iterator adapters = target.eAdapters().iterator(); adapters.hasNext();)
+                {
+                    Adapter adapter = (Adapter) adapters.next();
+                    if (adapter.isAdapterForType(type) && adapter instanceof TargetAdapter)
+                    {
+                        return adapter;
+                    }
+                }
+                return adaptNew(target, type);
+            }
+		}
+
+	private abstract static class TargetAdapter extends AdapterImpl {
+		protected EReference reference;
+		/**
+		 * @param reference The reference to set.
+		 */
+		public void setReference(EReference reference) {
+			this.reference = reference;
+		}
+		/**
+		 * @return Returns the reference.
+		 */
+		protected EReference getReference() {
+			return reference;
+		}
+		
+		protected abstract Object getSource();
+
+		protected abstract void setSource(Object source);
+		
+		protected abstract void unsetSource(Object source);
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 */
+		protected TargetAdapter() {
+			super();
+		}
+	
+		/* (non-Javadoc)
+		 * @see org.eclipse.emf.common.notify.Adapter#isAdapterForType(java.lang.Object)
+		 */
+		public boolean isAdapterForType(Object type) {
+			return type == reference;
+		}
+		/* (non-Javadoc)
+		 * @see org.eclipse.emf.common.notify.Adapter#notifyChanged(org.eclipse.emf.common.notify.Notification)
+		 */
+		public void notifyChanged(Notification notification) {
+			// Do nothing - this adapter is only used to extend the
+			// adaptee. It is not used as a listener.
+		}
+		/* (non-Javadoc)
+		 * @see org.eclipse.emf.common.notify.Adapter#setTarget(org.eclipse.emf.common.notify.Notifier)
+		 */
+	} //TargetAdapter
+
+	private static class TargetWithSingleSourceAdapter extends TargetAdapter {
+		private EObject source=null;
+		/* (non-Javadoc)
+		 * @see com.ibm.db.models.db2.luw.TableAdapter#setRemoteTable(com.ibm.db.models.db2.luw.RelationalRemoteDataSet)
+		 */
+		protected void setSource(Object newSource) {
+			// For SINGLE inverse cardinality, if there is already a source object
+			// for this relationship, we need to modify the old source object to remove the
+			// pointer to target
+			EObject oldSource = (EObject) getSource();
+			if (oldSource!=null && oldSource!=newSource)
+			{
+				if (reference.isMany())
+				{
+					EList oldTargetList = (EList) oldSource.eGet(reference);
+					oldTargetList.remove(target);
+				}
+				else
+				{
+					oldSource.eUnset(reference);
+				}
+			}
+			this.source = (EObject)newSource;
+	
+		}
+		
+		protected void unsetSource(Object oldSource)
+		{
+			source=null;
+		}
+		/**
+		 * @return Returns the source.
+		 */
+		protected Object getSource() {
+			return source;
+		}
+		
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 */
+		public TargetWithSingleSourceAdapter() {
+			super();
+		}
+	} //TargetWithSingleSourceAdapter
+	
+	private static class TargetWithMultipleSourceAdapter extends TargetAdapter {
+		private EList sourceList=null;
+		private EList getSourceList()
+		{
+			if (sourceList==null) 
+				{
+				sourceList=new BasicEList();
+				}
+			return sourceList;
+		}
+		/**
+		 * @return Returns the source.
+		 */
+		public Object getSource() {
+			EList list = getSourceList();
+			return new UnmodifiableEList(list.size(),list.toArray());
+		}
+
+		protected void setSource(Object newSource)
+		{
+			EList newSourceList = (EList)getSourceList();
+			newSourceList.add(newSource);
+		}
+
+		protected void unsetSource(Object oldSource)
+		{
+			getSourceList().remove(oldSource);
+		}
+		
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 */
+		public TargetWithMultipleSourceAdapter() {
+			super();
+		}
+	} //TargetWithMultipleSourceAdapter
+	
+	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/util/DB2Version.java b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/util/DB2Version.java
new file mode 100644
index 0000000..b3229a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.db2/src/org/eclipse/datatools/enablement/ibm/db2/util/DB2Version.java
@@ -0,0 +1,295 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.db2.util;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo;
+import org.eclipse.datatools.enablement.ibm.util.ConnectionProfileUtility;
+import org.eclipse.datatools.enablement.ibm.util.DBVersion;
+
+/**
+ * Abstracts a DB2 version consisting of a product name and three integers: version,
+ * release, and mod level. It supports comparisons between versions, as
+ * well as comparisons against precisely specified version, release, and/or
+ * mod levels.
+ * <p>
+ * This class also provides a shared set of unique DB2Version instances,
+ * which you may construct and access using the getSharedInstance methods,
+ * instead of using the constructors directly.
+ * Additional methods could be added for contributing a sharable instance
+ * and for removing them when they are not needed.
+ */
+public class DB2Version extends DBVersion
+{
+    /** Shared instance of the default version. */
+    protected static DB2Version sharedDefault;
+    /** Reusable DB2Version instances. */
+    protected static ArrayList<DB2Version> sharedInstances = new ArrayList<DB2Version>();
+    
+   /**
+    * Gets a shared DB2Version, and creates one if it doesn't already exist.
+    * @param product The product name.
+    * @param version The version.
+    * @param release The release
+    * @param mod The modification level.
+    * @return A shared DB2Version.
+    */
+   public static DB2Version getSharedInstance(String product, int version, int release, int mod)
+   {
+      if (product == null)
+         product = WORKSTATION;
+      DB2Version db2version = findSharedInstance(product, version, release, mod);
+      if (db2version == null)	// Didn't find one; create one:
+      {
+         db2version = new DB2Version(product, version, release, mod);
+         sharedInstances.add(db2version);
+      }
+      return db2version;
+   }
+
+   /**
+    * Gets a shared DB2Version, and creates one if it doesn't already exist.
+    * @param product The product name.
+    * @param productVersion The version string (with version, release, and possibly modification)
+    * @return A shared DB2Version.
+    */
+   public static DB2Version getSharedInstance(String product, String productVersion)
+   {
+      int[] v = getVersionArray(productVersion);
+      return getSharedInstance(product, v[0], v[1], v[2]);
+   }
+
+   /**
+    * Gets a shared DB2Version, and creates one if it doesn't already exist.
+    * @param profile IConnectionProfile
+    * @return A shared DB2Version.
+    */
+   public static DB2Version getSharedInstance(IConnectionProfile profile)
+   {
+      if (profile == null)
+         return getDefault();
+      ConnectionInfo conInfo = ConnectionProfileUtility.getConnectionInfo(profile, false);
+      if (conInfo != null)
+         return getSharedInstance(conInfo);
+      DatabaseDefinition dbDef = ConnectionProfileUtility.getDatabaseDefinition(profile);
+      return getSharedInstance(dbDef);
+   }
+
+   /**
+    * Gets a shared DB2Version, and creates one if it doesn't already exist.
+    * @param myConnection An RLDBConnection.
+    * @return A shared DB2Version.
+    */
+   public static DB2Version getSharedInstance(ConnectionInfo myConnection)
+   {
+      if (myConnection == null)
+         return getDefault();
+
+      /* obtain version from the connection info
+       * or when not set, from the DatabaseDefinition
+       */
+      DatabaseDefinition dbDef = myConnection.getDatabaseDefinition();
+      String productVersion = myConnection.getDatabaseProductVersion();
+      if (productVersion == null)
+      {
+         Connection con = myConnection.getSharedConnection();
+         if (con != null)
+         {
+            try
+            {
+               DatabaseMetaData dbmd = con.getMetaData();
+               productVersion = dbmd.getDatabaseProductVersion();
+            }
+            catch (SQLException sqle)
+            {
+               productVersion = null;
+            }
+         }
+      }
+      if(isSybase(dbDef)){
+          productVersion = dbDef.getVersion();
+      } else if (isIMS(dbDef)){
+          productVersion = dbDef.getVersion();
+      }
+      boolean isOracleDatabase = dbDef.getProduct().equalsIgnoreCase(ORACLE) ? true : false;
+      if (productVersion == null || isOracleDatabase)
+      {
+         productVersion = dbDef.getVersion();
+      }
+      String product = dbDef.getProduct();
+
+      if (productVersion!= null && productVersion.length() > 0) {
+         int[] v = getVersionArray(productVersion);
+         if (v== null)
+            v = new int []{0,0,0};
+         else if(isIDS(dbDef)) {
+             //only the first digit in the IDS release represents the real release number
+             //for example 11.70 represent version 11 release 7. This change is 
+             //made to be consistent with informix database definition
+             if(v[1]>=10)
+                v[1]=v[1]/10;                           
+         }
+
+
+         return getSharedInstance(product, v[0], v[1], v[2]);
+      }
+      else {
+         int[] v = getVersionArray(myConnection.getDatabaseDefinition().getVersion());
+         if (v== null)
+            v = new int []{0,0,0};
+
+         return getSharedInstance(product, v[0], v[1], v[2]);
+      }
+   }
+
+   /**
+    * Gets a shared DB2Version, and creates one if it doesn't already exist.
+    * @param dbDef A database definition.
+    * @return A shared DB2Version.
+    */
+   public static DB2Version getSharedInstance(DatabaseDefinition dbDef)
+   {
+      if (dbDef == null)
+         return getDefault();
+
+      /* obtain version from the connection info
+       * or when not set, from the DatabaseDefinition
+       */
+      String version = dbDef.getVersion();
+      String product = dbDef.getProduct();
+
+      int[] v = getVersionArray(version);
+      if (v == null)
+         v = new int []{0,0,0};
+
+      return getSharedInstance(product, v[0], v[1], v[2]);
+   }
+
+   /**
+    * Gets a shared DB2Version, and creates one if it doesn't already exist.
+    * @param connection A Connection.
+    * @return A shared DB2Version.
+    */
+   public static DB2Version getSharedInstance(Connection connection)
+   {
+      String versionString = null;
+      String product;
+      try
+      {
+         product = connection.getMetaData().getDatabaseProductName();
+         versionString = connection.getMetaData().getDatabaseProductVersion();
+      }
+      catch (SQLException sqle)
+      {
+         product = WORKSTATION;
+         versionString = "8.2.0"; //$NON-NLS-1$
+      }
+      int[] v = getVersionArray(versionString);
+      if (v== null)
+         v = new int []{0,0,0};
+      return getSharedInstance(product, v[0], v[1], v[2]);
+   }
+
+   public DB2Version(Connection connection)
+   {
+      super(connection);
+   }
+
+   public DB2Version(String product, String versionString)
+   {
+      super(product, versionString);
+   }
+
+   public DB2Version(String versionString)
+   {
+      super(versionString);
+   }
+
+   public DB2Version(int version, int release, int mod)
+   {
+      super(version, release, mod);
+   }
+
+   public DB2Version(String prod, int version, int release, int mod)
+   {
+      super(prod, version, release, mod);
+   }
+
+   public DB2Version(DB2Version copyme)
+   {
+      super(copyme);
+   }
+
+   public DB2Version(IConnectionProfile profile)
+   {
+      super(profile);
+   }
+
+   public DB2Version(ConnectionInfo conInfo)
+   {
+      super(conInfo);
+   }
+
+   /**
+    *  Gets a shared instance for a DatabaseDefinition.
+    *  <p>
+    *  @param The shared instance.
+    */
+   public DB2Version(DatabaseDefinition dbDef)
+   {
+      super(dbDef);
+   }
+
+   /**
+    *  Gets the default shared instance, which is a new DB2Version(WORKSTATION,8,2,0).
+    *  <p>
+    *  @param The default shared instance of DB2Version.
+    */
+   public static DB2Version getDefault()
+   {
+      if (sharedDefault == null)
+         sharedDefault = new DB2Version(WORKSTATION,8,2,0);
+      return sharedDefault;
+   }
+
+   /**
+    * Gets a shared DB2Version, and returns null if it doesn't exist.
+    * @param product The product name.
+    * @param version The version.
+    * @param release The release
+    * @param mod The modification level.
+    * @return A shared DB2Version.
+    */
+   protected static DB2Version findSharedInstance(String product, int version, int release, int mod)
+   {
+      Iterator<DB2Version> i = sharedInstances.iterator();
+      DB2Version db2version;
+      while (i.hasNext())
+      {
+         db2version = i.next();
+         if (product.equals(db2version.getProduct())
+               && version == db2version.getVersion()
+               && release == db2version.getRelease()
+               && mod == db2version.getMod())
+            return db2version;
+      }
+      // Didn't find one; return null:
+      return null;
+   }
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/.gitignore b/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/.gitignore
new file mode 100644
index 0000000..60463af
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/.gitignore
@@ -0,0 +1,2 @@
+bin
+build.xml
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/.project b/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/.project
new file mode 100644
index 0000000..d8934e8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/.project
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.ibm.informix.dbdefinition</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..6717ae5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.datatools.enablement.ibm.informix.dbdefinition; singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/about.html b/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/build.properties b/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/build.properties
new file mode 100644
index 0000000..71ba8cf
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/build.properties
@@ -0,0 +1,21 @@
+###############################################################################
+# Copyright (c) 2001, 2004 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+bin.includes = runtime/,\
+               plugin.xml,\
+               plugin.properties,\
+               about.html,\
+               META-INF/
+plugin.version =	1.0.0.200706071
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/plugin.properties b/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/plugin.properties
new file mode 100644
index 0000000..bffc7b0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/plugin.properties
@@ -0,0 +1,29 @@
+###############################################################################
+# Copyright (c) 2001, 2004 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+
+pluginName = Eclipse Data Tools Platform Informix Database Definition Plug-in
+nl1PluginName = Informix Database Definition NL1 Fragment
+providerName = Eclipse Data Tools Platform
+
+10.0ProductString = Informix
+10.0VersionString = 10.0
+
+10ProductString = Informix
+10VersionString = 10
+
+94ProductString = Informix
+94VersionString = 9.4
+
+93ProductString = Informix
+93VersionString = 9.3
+
+92ProductString = Informix
+92VersionString = 9.2
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/plugin.xml b/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/plugin.xml
new file mode 100644
index 0000000..f665f77
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/plugin.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+   
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.databaseDefinition">
+      <definition
+            version="10.0"
+            product="Informix"
+            productDisplayString="%10.0ProductString"
+            versionDisplayString="%10.0VersionString"
+            file="runtime/vendors/Informix_10.0/Informix_10.0.xmi">
+      </definition>
+      <definition
+            version="10"
+            product="Informix"
+            productDisplayString="%10ProductString"
+            versionDisplayString="%10VersionString"
+            file="runtime/vendors/Informix_10.0/Informix_10.0.xmi">
+      </definition>
+      <definition
+            version="9.4"
+            product="Informix"
+            productDisplayString="%94ProductString"
+            versionDisplayString="%94VersionString"
+            file="runtime/vendors/Informix_9.4/Informix_9.4.xmi">
+      </definition>
+      <definition
+            version="9.3"
+            product="Informix"
+            productDisplayString="%93ProductString"
+            versionDisplayString="%93VersionString"
+            file="runtime/vendors/Informix_9.3/Informix_9.3.xmi">
+      </definition>
+      <definition
+            version="9.2"
+            product="Informix"
+            productDisplayString="%92ProductString"
+            versionDisplayString="%92VersionString"
+            file="runtime/vendors/Informix_9.2/Informix_9.2.xmi">
+      </definition>
+   </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/runtime/vendors/Informix_10.0/Informix_10.0.xmi b/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/runtime/vendors/Informix_10.0/Informix_10.0.xmi
new file mode 100644
index 0000000..58510b9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/runtime/vendors/Informix_10.0/Informix_10.0.xmi
@@ -0,0 +1,972 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="Informix" version="10.0" maximumIdentifierLength="128" 
+viewTriggerSupported="true" maximumCommentLength="64" sequenceSupported="true" userDefinedTypeSupported="true" roleSupported="true" roleAuthorizationSupported="true" userSupported="true" synonymSupported="true">
+  <predefinedDataTypeDefinitions xmi:id="BOOLEAN_1" primitiveType="BOOLEAN" jdbcEnumType="16" javaClassName="boolean">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BOOLEAN</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_1" lengthSupported="true" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="32767" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>DBSERVERNAME</defaultValueTypes>
+    <defaultValueTypes>SITENAME</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="32767" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>DBSERVERNAME</defaultValueTypes>
+    <defaultValueTypes>SITENAME</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" lengthSupported="true" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_2" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="255" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>DBSERVERNAME</defaultValueTypes>
+    <defaultValueTypes>SITENAME</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR</name>
+    <name>CHARACTER VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="32672" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>DBSERVERNAME</defaultValueTypes>
+    <defaultValueTypes>SITENAME</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NVARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_2" lengthSupported="true" maximumLength="32739" primitiveType="CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LVARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">
+    <defaultValueTypes>TODAY</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" scaleSupported="true" precisionSupported="true" maximumPrecision="32" keyConstraintSupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_2" scaleSupported="true" precisionSupported="true" maximumPrecision="32" keyConstraintSupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>MONEY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE PRECISION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" keyConstraintSupported="true" primitiveType="FLOAT" jdbcEnumType="6" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INTEGER</name>
+    <name>INT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTERVAL_1" keyConstraintSupported="true" displayNameSupported="true" displayName="INTERVAL {0} TO {1}" leadingFieldQualifierSupported="true" trailingFieldQualifierSupported="true" fieldQualifierSeparator=" TO " defaultLeadingFieldQualifierDefinition="L_YEAR" defaultTrailingFieldQualifierDefinition="T_MONTH" primitiveType="INTERVAL">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <leadingFieldQualifierDefinition xmi:id="L_YEAR" name="YEAR" precisionSupported="true" maximumPrecision="9" defaultPrecision="4" validTrailingFieldQualifierDefinitions="T_YEAR T_MONTH"/>
+    <leadingFieldQualifierDefinition xmi:id="L_MONTH" name="MONTH" precisionSupported="true" maximumPrecision="9" defaultPrecision="2" validTrailingFieldQualifierDefinitions="T_MONTH"/>
+    <leadingFieldQualifierDefinition xmi:id="L_DAY" name="DAY" precisionSupported="true" maximumPrecision="9" defaultPrecision="2" validTrailingFieldQualifierDefinitions="T_DAY T_HOUR T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_HOUR" name="HOUR" precisionSupported="true" maximumPrecision="9" defaultPrecision="2" validTrailingFieldQualifierDefinitions="T_HOUR T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_MINUTE" name="MINUTE" precisionSupported="true" maximumPrecision="9" defaultPrecision="2" validTrailingFieldQualifierDefinitions="T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_SECOND" name="SECOND" precisionSupported="true" maximumPrecision="9" defaultPrecision="2" validTrailingFieldQualifierDefinitions="T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_FRACTION" name="FRACTION" validTrailingFieldQualifierDefinitions="T_FRACTION"/>
+    <trailingFieldQualifierDefinition xmi:id="T_YEAR" name="YEAR" precisionSupported="true" maximumPrecision="9" defaultPrecision="2"/>
+    <trailingFieldQualifierDefinition xmi:id="T_MONTH" name="MONTH" precisionSupported="true" maximumPrecision="9" defaultPrecision="2"/>
+    <trailingFieldQualifierDefinition xmi:id="T_DAY" name="DAY" precisionSupported="true" maximumPrecision="9" defaultPrecision="2"/>
+    <trailingFieldQualifierDefinition xmi:id="T_HOUR" name="HOUR" precisionSupported="true" maximumPrecision="9" defaultPrecision="2"/>
+    <trailingFieldQualifierDefinition xmi:id="T_MINUTE" name="MINUTE" precisionSupported="true" maximumPrecision="9" defaultPrecision="2"/>
+    <trailingFieldQualifierDefinition xmi:id="T_SECOND" name="SECOND" precisionSupported="true" maximumPrecision="9" defaultPrecision="2"/>
+    <trailingFieldQualifierDefinition xmi:id="T_FRACTION" name="FRACTION" precisionSupported="true" maximumPrecision="5" defaultPrecision="3"/>
+   <name>INTERVAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" keyConstraintSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+    <name>NUM</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLFLOAT</name>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" displayNameSupported="true" displayName="DATETIME {0} TO {1}" leadingFieldQualifierSupported="true" trailingFieldQualifierSupported="true" fieldQualifierSeparator=" TO " defaultLeadingFieldQualifierDefinition="L_YEAR" defaultTrailingFieldQualifierDefinition="T_MONTH" primitiveType="INTERVAL" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <defaultValueTypes>CURRENT</defaultValueTypes>
+    <leadingFieldQualifierDefinition xmi:id="L_YEAR" name="YEAR" validTrailingFieldQualifierDefinitions="T_YEAR T_MONTH T_DAY T_HOUR T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_MONTH" name="MONTH" validTrailingFieldQualifierDefinitions="T_MONTH T_DAY T_HOUR T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_DAY" name="DAY" validTrailingFieldQualifierDefinitions="T_DAY T_HOUR T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_HOUR" name="HOUR" validTrailingFieldQualifierDefinitions="T_HOUR T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_MINUTE" name="MINUTE" validTrailingFieldQualifierDefinitions="T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_SECOND" name="SECOND" validTrailingFieldQualifierDefinitions="T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_FRACTION" name="FRACTION" validTrailingFieldQualifierDefinitions="T_FRACTION"/>
+    <trailingFieldQualifierDefinition xmi:id="T_YEAR" name="YEAR"/>
+    <trailingFieldQualifierDefinition xmi:id="T_MONTH" name="MONTH"/>
+    <trailingFieldQualifierDefinition xmi:id="T_DAY" name="DAY"/>
+    <trailingFieldQualifierDefinition xmi:id="T_HOUR" name="HOUR"/>
+    <trailingFieldQualifierDefinition xmi:id="T_MINUTE" name="MINUTE"/>
+    <trailingFieldQualifierDefinition xmi:id="T_SECOND" name="SECOND"/>
+    <trailingFieldQualifierDefinition xmi:id="T_FRACTION" name="FRACTION" precisionSupported="true" maximumPrecision="5" defaultPrecision="3"/>
+   <name>DATETIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_2" keyConstraintSupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SERIAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_1" keyConstraintSupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="long">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INT8</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_2" keyConstraintSupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="long">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SERIAL8</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" keyConstraintSupported="true" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BYTE</name>
+  </predefinedDataTypeDefinitions>
+  <tableSpaceDefinition typeSupported="true" extentSizeSupported="true" prefetchSizeSupported="true" managedBySupported="true" pageSizeSupported="true" bufferPoolSupported="true">
+    <tableSpaceType>REGULAR</tableSpaceType>
+    <tableSpaceType>TEMPORARY</tableSpaceType>
+    <tableSpaceType>LARGE</tableSpaceType>
+  </tableSpaceDefinition>
+  <storedProcedureDefinition maximumIdentifierLength="128" nullInputActionSupported="true" determininsticSupported="true" returnedNullSupported="true" parameterStyleSupported="true">
+    <languageType>SQL</languageType>
+    <languageType>JAVA</languageType>
+    <languageType>C</languageType>
+    <languageType>COBOL</languageType>
+    <languageType>ASSEMBLY</languageType>
+    <languageType>PLI</languageType>
+    <procedureType>PROCEDURE</procedureType>
+    <procedureType>FUNCTION</procedureType>
+    <functionLanguageType>SQL</functionLanguageType>
+    <functionLanguageType>JAVA</functionLanguageType>
+    <functionLanguageType>C</functionLanguageType>
+  </storedProcedureDefinition>
+  <triggerDefinition maximumIdentifierLength="128" whenClauseSupported="true" granularitySupported="true" referencesClauseSupported="true" perColumnUpdateTriggerSupported="true" rowTriggerReferenceSupported="true" tableTriggerReferenceSupported="true"/>
+  <columnDefinition maximumIdentifierLength="128" identitySupported="true" computedSupported="true"/>
+  <constraintDefinition  maximumPrimaryKeyIdentifierLength="128" maximumForeignKeyIdentifierLength="128" maximumCheckConstraintIdentifierLength="128" clusteredPrimaryKeySupported="true" clusteredUniqueConstraintSupported="true" uniqueKeyNullable="true">
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+    <checkOption>NONE</checkOption>
+    <checkOption>LOCAL</checkOption>
+    <checkOption>CASCADE</checkOption>
+  </constraintDefinition>
+  <queryDefinition hostVariableMarker=":"/>
+  <indexDefinition maximumIdentifierLength="128" clusteringSupported="true"/>
+  <viewDefinition maximumIdentifierLength="128"/>
+  <tableDefinition maximumIdentifierLength="128"/>
+  <schemaDefinition maximumIdentifierLength="128"/>
+  <privilegedElementDefinitions name="Database">
+  	<privilegeDefinitions name="CONNECT"/>
+	<privilegeDefinitions name="RESOURCE"/>
+	<privilegeDefinitions name="DBA"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="PersistentTable">
+  	<privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="REFERENCES" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="SELECT" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="UNDER"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="ViewTable">
+  	<privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="SELECT" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="UNDER"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions xmi:id="COLUMN_1" name="Column"/>
+  <privilegedElementDefinitions name="Routine">
+  	<privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Sequence">
+  	<privilegeDefinitions name="ALTER"/>
+  	<privilegeDefinitions name="SELECT"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="UserDefinedType">
+  	<privilegeDefinitions name="USAGE"/>
+  	<privilegeDefinitions name="UNDER"/>
+  </privilegedElementDefinitions>
+  <SQLSyntaxDefinition>
+    <keywords>A</keywords>
+	<keywords>ABORT</keywords>
+	<keywords>ABS</keywords>
+	<keywords>ABSOLUTE</keywords>
+	<keywords>ACCESS</keywords>
+	<keywords>ACOS</keywords>
+	<keywords>ACQUIRE</keywords>
+	<keywords>ACTION</keywords>
+	<keywords>ACTIVATE</keywords>
+	<keywords>ADA</keywords>
+	<keywords>ADD</keywords>
+	<keywords>ADDFORM</keywords>
+	<keywords>ADMIN</keywords>
+	<keywords>AFTER</keywords>
+	<keywords>AGGREGATE</keywords>
+	<keywords>ALIAS</keywords>
+	<keywords>ALL</keywords>
+	<keywords>ALLOCATE</keywords>
+	<keywords>ALTER</keywords>
+	<keywords>AN</keywords>
+	<keywords>ANALYZE</keywords>
+	<keywords>AND</keywords>
+	<keywords>ANY</keywords>
+	<keywords>APPEND</keywords>
+	<keywords>ARCHIVE</keywords>
+	<keywords>ARCHIVELOG</keywords>
+	<keywords>ARE</keywords>
+	<keywords>ARRAY</keywords>
+	<keywords>ARRAYLEN</keywords>
+	<keywords>AS</keywords>
+	<keywords>ASC</keywords>
+	<keywords>ASCII</keywords>
+	<keywords>ASIN</keywords>
+	<keywords>ASSERTION</keywords>
+	<keywords>AT</keywords>
+	<keywords>ATAN</keywords>
+	<keywords>AUDIT</keywords>
+	<keywords>AUTHORIZATION</keywords>
+	<keywords>AVG</keywords>
+	<keywords>AVGU</keywords>
+	<keywords>BACKUP</keywords>
+	<keywords>BECOME</keywords>
+	<keywords>BEFORE</keywords>
+	<keywords>BEGIN</keywords>
+	<keywords>BETWEEN</keywords>
+	<keywords>BIGINT</keywords>
+	<keywords>BINARY</keywords>
+	<keywords>BIND</keywords>
+	<keywords>BINDING</keywords>
+	<keywords>BIT</keywords>
+	<keywords>BLOB</keywords>
+	<keywords>BLOCK</keywords>
+	<keywords>BODY</keywords>
+	<keywords>BOOLEAN</keywords>
+	<keywords>BOTH</keywords>
+	<keywords>BREADTH</keywords>
+	<keywords>BREAK</keywords>
+	<keywords>BREAKDISPLAY</keywords>
+	<keywords>BROWSE</keywords>
+	<keywords>BUFFERPOOL</keywords>
+	<keywords>BULK</keywords>
+	<keywords>BY</keywords>
+	<keywords>BYREF</keywords>
+	<keywords>CACHE</keywords>
+	<keywords>CALL</keywords>
+	<keywords>CALLPROC</keywords>
+	<keywords>CANCEL</keywords>
+	<keywords>CAPTURE</keywords>
+	<keywords>CASCADE</keywords>
+	<keywords>CASCADED</keywords>
+	<keywords>CASE</keywords>
+	<keywords>CAST</keywords>
+	<keywords>CATALOG</keywords>
+	<keywords>CCSID</keywords>
+	<keywords>CEILING</keywords>
+	<keywords>CHANGE</keywords>
+	<keywords>CHAR</keywords>
+	<keywords>CHARACTER</keywords>
+	<keywords>CHARTOROWID</keywords>
+	<keywords>CHECK</keywords>
+	<keywords>CLASS</keywords>
+	<keywords>CLOB</keywords>
+	<keywords>CHECKPOINT</keywords>
+	<keywords>CHR</keywords>
+	<keywords>CLEANUP</keywords>
+	<keywords>CLEAR</keywords>
+	<keywords>CLEARROW</keywords>
+	<keywords>CLOSE</keywords>
+	<keywords>CLUSTER</keywords>
+	<keywords>CLUSTERED</keywords>
+	<keywords>COALESCE</keywords>
+	<keywords>COBOL</keywords>
+	<keywords>COLGROUP</keywords>
+	<keywords>COLLATE</keywords>
+	<keywords>COLLATION</keywords>
+	<keywords>COLLECTION</keywords>
+	<keywords>COLUMN</keywords>
+	<keywords>COMMAND</keywords>
+	<keywords>COMMENT</keywords>
+	<keywords>COMMIT</keywords>
+	<keywords>COMPLETION</keywords>
+	<keywords>COMMITTED</keywords>
+	<keywords>COMPILE</keywords>
+	<keywords>COMPLEX</keywords>
+	<keywords>COMPRESS</keywords>
+	<keywords>COMPUTE</keywords>
+	<keywords>CONCAT</keywords>
+	<keywords>CONFIRM</keywords>
+	<keywords>CONNECT</keywords>
+	<keywords>CONNECTION</keywords>
+	<keywords>CONSTRAINT</keywords>
+	<keywords>CONSTRAINTS</keywords>
+	<keywords>CONSTRUCTOR</keywords>
+	<keywords>CONTAINS</keywords>
+	<keywords>CONTAINSTABLE</keywords>
+	<keywords>CONTENTS</keywords>
+	<keywords>CONTINUE</keywords>
+	<keywords>CONTROLFILE</keywords>
+	<keywords>CONTROLROW</keywords>
+	<keywords>CONVERT</keywords>
+	<keywords>COPY</keywords>
+	<keywords>CORRESPONDING</keywords>
+	<keywords>COS</keywords>
+	<keywords>COUNT</keywords>
+	<keywords>COUNTU</keywords>
+	<keywords>CRCOLS</keywords>
+	<keywords>CREATE</keywords>
+	<keywords>CROSS</keywords>
+	<keywords>CUBE</keywords>
+	<keywords>CURRENT</keywords>
+	<keywords>CURRENT_DATE</keywords>
+	<keywords>CURRENT_PATH</keywords>
+	<keywords>CURRENT_ROLE</keywords>
+	<keywords>CURRENT_TIME</keywords>
+	<keywords>CURRENT_TIMESTAMP</keywords>
+	<keywords>CURRENT_USER</keywords>
+	<keywords>CURSOR</keywords>
+	<keywords>CVAR</keywords>
+	<keywords>CYCLE</keywords>
+	<keywords>DATA</keywords>
+	<keywords>DATABASE</keywords>
+	<keywords>DATAFILE</keywords>
+	<keywords>DATAHANDLER</keywords>
+	<keywords>DATAPAGES</keywords>
+	<keywords>DATE</keywords>
+	<keywords>DAY</keywords>
+	<keywords>DAYOFMONTH</keywords>
+	<keywords>DAYOFWEEK</keywords>
+	<keywords>DAYOFYEAR</keywords>
+	<keywords>DAYS</keywords>
+	<keywords>DBA</keywords>
+	<keywords>DBCC</keywords>
+	<keywords>DBSPACE</keywords>
+	<keywords>DEALLOCATE</keywords>
+	<keywords>DEC</keywords>
+	<keywords>DECIMAL</keywords>
+	<keywords>DECLARATION</keywords>
+	<keywords>DECLARE</keywords>
+	<keywords>DECODE</keywords>
+	<keywords>DEFAULT</keywords>
+	<keywords>DEFERRABLE</keywords>
+	<keywords>DEFERRED</keywords>
+	<keywords>DEFINE</keywords>
+	<keywords>DEFINITION</keywords>
+	<keywords>DEGREES</keywords>
+	<keywords>DELETE</keywords>
+	<keywords>DEPTH</keywords>
+	<keywords>DEREF</keywords>
+	<keywords>DELETEROW</keywords>
+	<keywords>DENY</keywords>
+	<keywords>DESC</keywords>
+	<keywords>DESCRIBE</keywords>
+	<keywords>DESCRIPTOR</keywords>
+	<keywords>DESTROY</keywords>
+	<keywords>DHTYPE</keywords>
+	<keywords>DESTRUCTOR</keywords>
+	<keywords>DETERMINISTIC</keywords>
+	<keywords>DICTIONARY</keywords>
+	<keywords>DIAGNOSTICS</keywords>
+	<keywords>DIRECT</keywords>
+	<keywords>DISABLE</keywords>
+	<keywords>DISABLED</keywords>
+	<keywords>DISCONNECT</keywords>
+	<keywords>DISK</keywords>
+	<keywords>DISMOUNT</keywords>
+	<keywords>DISPLAY</keywords>
+	<keywords>DISTINCT</keywords>
+	<keywords>DISTRIBUTE</keywords>
+	<keywords>DISTRIBUTED</keywords>
+	<keywords>DO</keywords>
+	<keywords>DOMAIN</keywords>
+	<keywords>DOUBLE</keywords>
+	<keywords>DOWN</keywords>
+	<keywords>DROP</keywords>
+	<keywords>DUMMY</keywords>
+	<keywords>DUMP</keywords>
+	<keywords>DYNAMIC</keywords>
+	<keywords>EACH</keywords>
+	<keywords>EDITPROC</keywords>
+	<keywords>ELSE</keywords>
+	<keywords>ELSEIF</keywords>
+	<keywords>ENABLE</keywords>
+	<keywords>END</keywords>
+	<keywords>ENDDATA</keywords>
+	<keywords>ENDDISPLAY</keywords>
+	<keywords>ENDEXEC</keywords>
+	<keywords>END-EXEC</keywords>
+	<keywords>ENDFORMS</keywords>
+	<keywords>ENDIF</keywords>
+	<keywords>ENDLOOP</keywords>
+	<keywords>EQUALS</keywords>
+	<keywords>ENDSELECT</keywords>
+	<keywords>ENDWHILE</keywords>
+	<keywords>ERASE</keywords>
+	<keywords>ERRLVL</keywords>
+	<keywords>ERROREXIT</keywords>
+	<keywords>ESCAPE</keywords>
+	<keywords>EVENTS</keywords>
+	<keywords>EVERY</keywords>
+	<keywords>EXCEPT</keywords>
+	<keywords>EXCEPTION</keywords>
+	<keywords>EXCEPTIONS</keywords>
+	<keywords>EXCLUDE</keywords>
+	<keywords>EXCLUDING</keywords>
+	<keywords>EXCLUSIVE</keywords>
+	<keywords>EXEC</keywords>
+	<keywords>EXECUTE</keywords>
+	<keywords>EXISTS</keywords>
+	<keywords>EXIT</keywords>
+	<keywords>EXP</keywords>
+	<keywords>EXPLAIN</keywords>
+	<keywords>EXPLICIT</keywords>
+	<keywords>EXPRESSION</keywords>
+	<keywords>EXTENT</keywords>
+	<keywords>EXTERNAL</keywords>
+	<keywords>EXTERNALLY</keywords>
+	<keywords>EXTRACT</keywords>
+	<keywords>FALSE</keywords>
+	<keywords>FETCH</keywords>
+	<keywords>FIELD</keywords>
+	<keywords>FIELDPROC</keywords>
+	<keywords>FILE</keywords>
+	<keywords>FILLFACTOR</keywords>
+	<keywords>FILTERING</keywords>
+	<keywords>FINALIZE</keywords>
+	<keywords>FINALIZE</keywords>
+	<keywords>FIRST</keywords>
+	<keywords>FLOAT</keywords>
+	<keywords>FLOOR</keywords>
+	<keywords>FLOPPY</keywords>
+	<keywords>FLUSH</keywords>
+	<keywords>FOR</keywords>
+	<keywords>FORCE</keywords>
+	<keywords>FORMDATA</keywords>
+	<keywords>FORMINIT</keywords>
+	<keywords>FORMS</keywords>
+	<keywords>FOREIGN</keywords>
+	<keywords>FORTRAN</keywords>
+	<keywords>FOUND</keywords>
+	<keywords>FRAGMENT</keywords>
+	<keywords>FREELIST</keywords>
+	<keywords>FREELISTS</keywords>
+	<keywords>FREETEXT</keywords>
+	<keywords>FREETEXTTABLE</keywords>
+	<keywords>FREE</keywords>
+	<keywords>FROM</keywords>
+	<keywords>FULL</keywords>
+	<keywords>FUNCTION</keywords>
+	<keywords>GENERAL</keywords>
+	<keywords>GET</keywords>
+	<keywords>GETCURRENTCONNECTION</keywords>
+	<keywords>GETFORM</keywords>
+	<keywords>GETOPER</keywords>
+	<keywords>GETROW</keywords>
+	<keywords>GLOBAL</keywords>
+	<keywords>GO</keywords>
+	<keywords>GOTO</keywords>
+	<keywords>GRANT</keywords>
+	<keywords>GRANTED</keywords>
+	<keywords>GRAPHIC</keywords>
+	<keywords>GREATEST</keywords>
+	<keywords>GROUP</keywords>
+	<keywords>GROUPING</keywords>
+	<keywords>GROUPS</keywords>
+	<keywords>HASH</keywords>
+	<keywords>HAVING</keywords>
+	<keywords>HOST</keywords>
+	<keywords>HELP</keywords>
+	<keywords>HELPFILE</keywords>
+	<keywords>HOLDLOCK</keywords>
+	<keywords>HOUR</keywords>
+	<keywords>HOURS</keywords>
+	<keywords>IDENTIFIED</keywords>
+	<keywords>IDENTITY</keywords>
+	<keywords>IGNORE</keywords>
+	<keywords>IDENTITYCOL</keywords>
+	<keywords>IF</keywords>
+	<keywords>IFNULL</keywords>
+	<keywords>IIMESSAGE</keywords>
+	<keywords>IIPRINTF</keywords>
+	<keywords>IMMEDIATE</keywords>
+	<keywords>IMPORT</keywords>
+	<keywords>IN</keywords>
+	<keywords>INCLUDE</keywords>
+	<keywords>INCLUDING</keywords>
+	<keywords>INCREMENT</keywords>
+	<keywords>INDEX</keywords>
+	<keywords>INDEXPAGES</keywords>
+	<keywords>INDICATOR</keywords>
+	<keywords>INITCAP</keywords>
+	<keywords>INITIAL</keywords>
+	<keywords>INITIALIZE</keywords>
+	<keywords>INITIALLY</keywords>
+	<keywords>INITRANS</keywords>
+	<keywords>INITTABLE</keywords>
+	<keywords>INNER</keywords>
+	<keywords>INOUT</keywords>
+	<keywords>INPUT</keywords>
+	<keywords>INSENSITIVE</keywords>
+	<keywords>INSERT</keywords>
+	<keywords>INSERTROW</keywords>
+	<keywords>INSTANCE</keywords>
+	<keywords>INSTR</keywords>
+	<keywords>INT</keywords>
+	<keywords>INTEGER</keywords>
+	<keywords>INTEGRITY</keywords>
+	<keywords>INTERFACE</keywords>
+	<keywords>INTERSECT</keywords>
+	<keywords>INTERVAL</keywords>
+	<keywords>INTO</keywords>
+	<keywords>IS</keywords>
+	<keywords>ISOLATION</keywords>
+	<keywords>ITERATE</keywords>
+	<keywords>JOIN</keywords>
+	<keywords>KEY</keywords>
+	<keywords>KILL</keywords>
+	<keywords>LABEL</keywords>
+	<keywords>LANGUAGE</keywords>
+	<keywords>LARGE</keywords>
+	<keywords>LAST</keywords>
+	<keywords>LATERAL</keywords>
+	<keywords>LAYER</keywords>
+	<keywords>LEADING</keywords>
+	<keywords>LEAST</keywords>
+	<keywords>LEFT</keywords>
+	<keywords>LESS</keywords>
+	<keywords>LENGTH</keywords>
+	<keywords>LEVEL</keywords>
+	<keywords>LIKE</keywords>
+	<keywords>LIMIT</keywords>
+	<keywords>LINENO</keywords>
+	<keywords>LINK</keywords>
+	<keywords>LIST</keywords>
+	<keywords>LISTS</keywords>
+	<keywords>LOAD</keywords>
+	<keywords>LOADTABLE</keywords>
+	<keywords>LOCAL</keywords>
+	<keywords>LOCALTIME</keywords>
+	<keywords>LOCALTIMESTAMP</keywords>
+	<keywords>LOCATOR</keywords>
+	<keywords>LOCATE</keywords>
+	<keywords>LOCK</keywords>
+	<keywords>LOCKSIZE</keywords>
+	<keywords>LOG</keywords>
+	<keywords>LOGFILE</keywords>
+	<keywords>LONG</keywords>
+	<keywords>LONGINT</keywords>
+	<keywords>LOWER</keywords>
+	<keywords>LPAD</keywords>
+	<keywords>LTRIM</keywords>
+	<keywords>LVARBINARY</keywords>
+	<keywords>LVARCHAR</keywords>
+	<keywords>MAIN</keywords>
+	<keywords>MANAGE</keywords>
+	<keywords>MANUAL</keywords>
+	<keywords>MAP</keywords>
+	<keywords>MATCH</keywords>
+	<keywords>MAX</keywords>
+	<keywords>MAXDATAFILES</keywords>
+	<keywords>MAXEXTENTS</keywords>
+	<keywords>MAXINSTANCES</keywords>
+	<keywords>MAXLOGFILES</keywords>
+	<keywords>MAXLOGHISTORY</keywords>
+	<keywords>MAXLOGMEMBERS</keywords>
+	<keywords>MAXTRANS</keywords>
+	<keywords>MAXVALUE</keywords>
+	<keywords>MENUITEM</keywords>
+	<keywords>MESSAGE</keywords>
+	<keywords>MICROSECOND</keywords>
+	<keywords>MICROSECONDS</keywords>
+	<keywords>MIN</keywords>
+	<keywords>MINEXTENTS</keywords>
+	<keywords>MINUS</keywords>
+	<keywords>MINUTE</keywords>
+	<keywords>MODIFIES</keywords>
+	<keywords>MINUTES</keywords>
+	<keywords>MINVALUE</keywords>
+	<keywords>MIRROREXIT</keywords>
+	<keywords>MOD</keywords>
+	<keywords>MODE</keywords>
+	<keywords>MODIFY</keywords>
+	<keywords>MODULE</keywords>
+	<keywords>MONEY</keywords>
+	<keywords>MONTH</keywords>
+	<keywords>MONTHS</keywords>
+	<keywords>MOUNT</keywords>
+	<keywords>MOVE</keywords>
+	<keywords>NAMED</keywords>
+	<keywords>NAMES</keywords>
+	<keywords>NATIONAL</keywords>
+	<keywords>NATURAL</keywords>
+	<keywords>NCHAR</keywords>
+	<keywords>NCLOB</keywords>
+	<keywords>NEW</keywords>
+	<keywords>NEXT</keywords>
+	<keywords>NHEADER</keywords>
+	<keywords>NO</keywords>
+	<keywords>NOARCHIVELOG</keywords>
+	<keywords>NOAUDIT</keywords>
+	<keywords>NOCACHE</keywords>
+	<keywords>NOCHECK</keywords>
+	<keywords>NOCOMPRESS</keywords>
+	<keywords>NOCYCLE</keywords>
+	<keywords>NOECHO</keywords>
+	<keywords>NOMAXVALUE</keywords>
+	<keywords>NOMINVALUE</keywords>
+	<keywords>NONCLUSTERED</keywords>
+	<keywords>NONE</keywords>
+	<keywords>NOORDER</keywords>
+	<keywords>NORESETLOGS</keywords>
+	<keywords>NORMAL</keywords>
+	<keywords>NOSORT</keywords>
+	<keywords>NOT</keywords>
+	<keywords>NOTFOUND</keywords>
+	<keywords>NOTRIM</keywords>
+	<keywords>NOWAIT</keywords>
+	<keywords>NULL</keywords>
+	<keywords>NULLIF</keywords>
+	<keywords>NULLVALUE</keywords>
+	<keywords>NUMBER</keywords>
+	<keywords>NUMERIC</keywords>
+	<keywords>OBJECT</keywords>
+	<keywords>NUMPARTS</keywords>
+	<keywords>NVL</keywords>
+	<keywords>OBID</keywords>
+	<keywords>ODBCINFO</keywords>
+	<keywords>OF</keywords>
+	<keywords>OFF</keywords>
+	<keywords>OFFLINE</keywords>
+	<keywords>OFFSETS</keywords>
+	<keywords>OLD</keywords>
+	<keywords>ON</keywords>
+	<keywords>ONCE</keywords>
+	<keywords>ONLINE</keywords>
+	<keywords>ONLY</keywords>
+	<keywords>OPEN</keywords>
+	<keywords>OPERATION</keywords>
+	<keywords>OPENDATASOURCE</keywords>
+	<keywords>OPENQUERY</keywords>
+	<keywords>OPENROWSET</keywords>
+	<keywords>OPTIMAL</keywords>
+	<keywords>OPTIMIZE</keywords>
+	<keywords>OPTION</keywords>
+	<keywords>OR</keywords>
+	<keywords>ORDER</keywords>
+	<keywords>ORDINALITY</keywords>
+	<keywords>OUT</keywords>
+	<keywords>OUTER</keywords>
+	<keywords>OUTPUT</keywords>
+	<keywords>OVER</keywords>
+	<keywords>OVERLAPS</keywords>
+	<keywords>OWN</keywords>
+	<keywords>PACKAGE</keywords>
+	<keywords>PAD</keywords>
+	<keywords>PARAMETER</keywords>
+	<keywords>PARAMETERS</keywords>
+	<keywords>PAGE</keywords>
+	<keywords>PAGES</keywords>
+	<keywords>PARALLEL</keywords>
+	<keywords>PART</keywords>
+	<keywords>PARTIAL</keywords>
+	<keywords>PATH</keywords>
+	<keywords>POSTFIX</keywords>
+	<keywords>PASCAL</keywords>
+	<keywords>PCTFREE</keywords>
+	<keywords>PCTINCREASE</keywords>
+	<keywords>PCTINDEX</keywords>
+	<keywords>PCTUSED</keywords>
+	<keywords>PERCENT</keywords>
+	<keywords>PERM</keywords>
+	<keywords>PERMANENT</keywords>
+	<keywords>PERMIT</keywords>
+	<keywords>PI</keywords>
+	<keywords>PIPE</keywords>
+	<keywords>PLAN</keywords>
+	<keywords>PLI</keywords>
+	<keywords>POSITION</keywords>
+	<keywords>POWER</keywords>
+	<keywords>PRECISION</keywords>
+	<keywords>PREFIX</keywords>
+	<keywords>PREORDER</keywords>
+	<keywords>PREPARE</keywords>
+	<keywords>PRESERVE</keywords>
+	<keywords>PRIMARY</keywords>
+	<keywords>PRINT</keywords>
+	<keywords>PRINTSCREEN</keywords>
+	<keywords>PRIOR</keywords>
+	<keywords>PRIQTY</keywords>
+	<keywords>PRIVATE</keywords>
+	<keywords>PRIVILEGES</keywords>
+	<keywords>PROC</keywords>
+	<keywords>PROCEDURE</keywords>
+	<keywords>PROCESSEXIT</keywords>
+	<keywords>PROFILE</keywords>
+	<keywords>PROGRAM</keywords>
+	<keywords>PROMPT</keywords>
+	<keywords>PUBLIC</keywords>
+	<keywords>PUTFORM</keywords>
+	<keywords>PUTOPER</keywords>
+	<keywords>PUTROW</keywords>
+	<keywords>QUALIFICATION</keywords>
+	<keywords>QUARTER</keywords>
+	<keywords>QUOTA</keywords>
+	<keywords>RADIANS</keywords>
+	<keywords>RAISE</keywords>
+	<keywords>RAISERROR</keywords>
+	<keywords>RAND</keywords>
+	<keywords>RANGE</keywords>
+	<keywords>RAW</keywords>
+	<keywords>READ</keywords>
+	<keywords>READS</keywords>
+	<keywords>READTEXT</keywords>
+	<keywords>REAL</keywords>
+	<keywords>RECURSIVE</keywords>
+	<keywords>REF</keywords>
+	<keywords>RECONFIGURE</keywords>
+	<keywords>RECORD</keywords>
+	<keywords>RECOVER</keywords>
+	<keywords>REDISPLAY</keywords>
+	<keywords>REFERENCES</keywords>
+	<keywords>REFERENCING</keywords>
+	<keywords>RELATIVE</keywords>
+	<keywords>REGISTER</keywords>
+	<keywords>RELEASE</keywords>
+	<keywords>RELOCATE</keywords>	
+	<keywords>REMAINDER</keywords>
+	<keywords>REMOVE</keywords>
+	<keywords>RENAME</keywords>
+	<keywords>REPEAT</keywords>
+	<keywords>REPEATABLE</keywords>
+	<keywords>REPEATED</keywords>
+	<keywords>REPLACE</keywords>
+	<keywords>REPLICATE</keywords>
+	<keywords>REPLICATION</keywords>
+	<keywords>RESET</keywords>
+	<keywords>RESETLOGS</keywords>
+	<keywords>RESOURCE</keywords>
+	<keywords>RESTORE</keywords>
+	<keywords>RESTRICT</keywords>
+	<keywords>RESULT</keywords>
+	<keywords>RESTRICTED</keywords>
+	<keywords>RESUME</keywords>
+	<keywords>RETRIEVE</keywords>
+	<keywords>RETURN</keywords>
+	<keywords>RETURNS</keywords>
+	<keywords>REUSE</keywords>
+	<keywords>REVOKE</keywords>
+	<keywords>RIGHT</keywords>
+	<keywords>ROLE</keywords>
+	<keywords>ROLES</keywords>
+	<keywords>ROLLBACK</keywords>
+	<keywords>ROLLUP</keywords>
+	<keywords>ROUTINE</keywords>
+	<keywords>ROW</keywords>
+	<keywords>ROWS</keywords>
+	<keywords>ROWCOUNT</keywords>
+	<keywords>ROWGUIDCOL</keywords>
+	<keywords>ROWID</keywords>
+	<keywords>ROWIDS</keywords>
+	<keywords>ROWIDTOCHAR</keywords>
+	<keywords>ROWLABEL</keywords>
+	<keywords>ROWNUM</keywords>
+	<keywords>ROWS</keywords>
+	<keywords>RPAD</keywords>
+	<keywords>RRN</keywords>
+	<keywords>RTRIM</keywords>
+	<keywords>RULE</keywords>
+	<keywords>RUN</keywords>
+	<keywords>RUNTIMESTATISTICS</keywords>
+	<keywords>SAVE</keywords>
+	<keywords>SAVEPOINT</keywords>
+	<keywords>SCHEDULE</keywords>
+	<keywords>SCHEMA</keywords>
+	<keywords>SCN</keywords>
+	<keywords>SCREEN</keywords>
+	<keywords>SCROLL</keywords>
+	<keywords>SCOPE</keywords>
+	<keywords>SEARCH</keywords>
+	<keywords>SCROLLDOWN</keywords>
+	<keywords>SCROLLUP</keywords>
+	<keywords>SECOND</keywords>
+	<keywords>SECONDS</keywords>
+	<keywords>SECQTY</keywords>
+	<keywords>SECTION</keywords>
+	<keywords>SEGMENT</keywords>
+	<keywords>SELECT</keywords>
+	<keywords>SEQUENCE</keywords>
+	<keywords>SERIALIZABLE</keywords>
+	<keywords>SERVICE</keywords>
+	<keywords>SESSION</keywords>
+	<keywords>SESSION_USER</keywords>
+	<keywords>SET</keywords>
+	<keywords>SETS</keywords>
+	<keywords>SETUSER</keywords>
+	<keywords>SIN</keywords>
+	<keywords>SIMPLE</keywords>
+	<keywords>SIGN</keywords>
+	<keywords>SHUTDOWN</keywords>
+	<keywords>SHORT</keywords>
+	<keywords>SHARE</keywords>
+	<keywords>SHARED</keywords>
+	<keywords>SETUSER</keywords>
+	<keywords>SIZE</keywords>
+	<keywords>SLEEP</keywords>
+	<keywords>SMALLINT</keywords>
+	<keywords>SNAPSHOT</keywords>
+	<keywords>SOME</keywords>
+	<keywords>SORT</keywords>
+	<keywords>SOUNDEX</keywords>
+	<keywords>SPACE</keywords>
+	<keywords>SPECIFIC</keywords>
+	<keywords>SPECIFICTYPE</keywords>
+	<keywords>SQL</keywords>
+	<keywords>SQLEXCEPTION</keywords>
+	<keywords>SQLBUF</keywords>
+	<keywords>SQLCA</keywords>
+	<keywords>SQLCODE</keywords>
+	<keywords>SQLERROR</keywords>
+	<keywords>SQLSTATE</keywords>
+	<keywords>SQLWARNING</keywords>
+	<keywords>SQRT</keywords>
+	<keywords>START</keywords>
+	<keywords>STATE</keywords>
+	<keywords>STATEMENT</keywords>
+	<keywords>STATIC</keywords>
+	<keywords>STRUCTURE</keywords>
+	<keywords>STATISTICS</keywords>
+	<keywords>STOGROUP</keywords>
+	<keywords>STOP</keywords>
+	<keywords>STORAGE</keywords>
+	<keywords>STORPOOL</keywords>
+	<keywords>SUBMENU</keywords>
+	<keywords>SUBPAGES</keywords>
+	<keywords>SUBSTR</keywords>
+	<keywords>SUBSTRING</keywords>
+	<keywords>SUCCESSFUL</keywords>
+	<keywords>SUFFIX</keywords>
+	<keywords>SUM</keywords>
+	<keywords>SYSTEM_USER</keywords>
+	<keywords>SUMU</keywords>
+	<keywords>SWITCH</keywords>
+	<keywords>SYNONYM</keywords>
+	<keywords>SYSCAT</keywords>
+	<keywords>SYSDATE</keywords>
+	<keywords>SYSFUN</keywords>
+	<keywords>SYSIBM</keywords>
+	<keywords>SYSSTAT</keywords>
+	<keywords>SYSTEM</keywords>
+	<keywords>SYSTIME</keywords>
+	<keywords>SYSTIMESTAMP</keywords>
+	<keywords>TABLE</keywords>
+	<keywords>TABLEDATA</keywords>
+	<keywords>TABLES</keywords>
+	<keywords>TABLESPACE</keywords>
+	<keywords>TAN</keywords>
+	<keywords>TAPE</keywords>
+	<keywords>TEMP</keywords>
+	<keywords>TEMPORARY</keywords>
+	<keywords>TERMINATE</keywords>
+	<keywords>THAN</keywords>
+	<keywords>TEXTSIZE</keywords>
+	<keywords>THEN</keywords>
+	<keywords>THREAD</keywords>
+	<keywords>TIME</keywords>
+	<keywords>TIMEOUT</keywords>
+	<keywords>TIMESTAMP</keywords>
+	<keywords>TIMEZONE_HOUR</keywords>
+	<keywords>TIMEZONE_MINUTE</keywords>
+	<keywords>TINYINT</keywords>
+	<keywords>TO</keywords>
+	<keywords>TOP</keywords>
+	<keywords>TPE</keywords>
+	<keywords>TRACING</keywords>
+	<keywords>TRAILING</keywords>
+	<keywords>TRAN</keywords>
+	<keywords>TRANSACTION</keywords>
+	<keywords>TRANSLATE</keywords>
+	<keywords>TRANSLATION</keywords>
+	<keywords>TREAT</keywords>
+	<keywords>TRIGGER</keywords>
+	<keywords>TRIGGERS</keywords>
+	<keywords>TRIM</keywords>
+	<keywords>TRUE</keywords>
+	<keywords>TRUNCATE</keywords>
+	<keywords>TSEQUAL</keywords>
+	<keywords>TYPE</keywords>
+	<keywords>UID</keywords>
+	<keywords>UNCOMMITTED</keywords>
+	<keywords>UNDER</keywords>
+	<keywords>UNION</keywords>
+	<keywords>UNIQUE</keywords>
+	<keywords>UNKNOWN</keywords>
+	<keywords>UNNEST</keywords>
+	<keywords>UNLIMITED</keywords>
+	<keywords>UNLOADTABLE</keywords>
+	<keywords>UNSIGNED</keywords>
+	<keywords>UNTIL</keywords>
+	<keywords>UP</keywords>
+	<keywords>UPDATE</keywords>
+	<keywords>UPDATETEXT</keywords>
+	<keywords>UPPER</keywords>
+	<keywords>USAGE</keywords>
+	<keywords>USE</keywords>
+	<keywords>USER</keywords>
+	<keywords>USING</keywords>
+	<keywords>UUID</keywords>
+	<keywords>VALIDATE</keywords>
+	<keywords>VALIDPROC</keywords>
+	<keywords>VALIDROW</keywords>
+	<keywords>VALUE</keywords>
+	<keywords>VALUES</keywords>
+	<keywords>VARBINARY</keywords>
+	<keywords>VARCHAR</keywords>
+	<keywords>VARIABLE</keywords>
+	<keywords>VARIABLES</keywords>
+	<keywords>VARYING</keywords>
+	<keywords>VCAT</keywords>
+	<keywords>VERSION</keywords>
+	<keywords>VERCOLS</keywords>
+	<keywords>VIEW</keywords>
+	<keywords>VOLUMES</keywords>
+	<keywords>WAITFOR</keywords>
+	<keywords>WEEK</keywords>
+	<keywords>WHEN</keywords>
+	<keywords>WHENEVER</keywords>
+	<keywords>WHERE</keywords>
+	<keywords>WHILE</keywords>
+	<keywords>WITH</keywords>
+	<keywords>WITHOUT</keywords>
+	<keywords>WORK</keywords>
+	<keywords>WRITE</keywords>
+	<keywords>WRITETEXT</keywords>
+	<keywords>YEAR</keywords>
+	<keywords>YEARS</keywords>
+	<keywords>ZONE</keywords>
+  </SQLSyntaxDefinition>
+</DBDefinition:DatabaseVendorDefinition>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/runtime/vendors/Informix_9.2/Informix_9.2.xmi b/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/runtime/vendors/Informix_9.2/Informix_9.2.xmi
new file mode 100644
index 0000000..d7e201a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/runtime/vendors/Informix_9.2/Informix_9.2.xmi
@@ -0,0 +1,973 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="Informix" version="9.2" maximumIdentifierLength="128" 
+viewTriggerSupported="true" maximumCommentLength="64" sequenceSupported="true" userDefinedTypeSupported="true" roleSupported="true" roleAuthorizationSupported="true" userSupported="true">
+  <predefinedDataTypeDefinitions xmi:id="BOOLEAN_1" primitiveType="BOOLEAN" jdbcEnumType="16" javaClassName="boolean">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BOOLEAN</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_1" lengthSupported="true" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="32767" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>DBSERVERNAME</defaultValueTypes>
+    <defaultValueTypes>SITENAME</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="32767" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>DBSERVERNAME</defaultValueTypes>
+    <defaultValueTypes>SITENAME</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" lengthSupported="true" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_2" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="255" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>DBSERVERNAME</defaultValueTypes>
+    <defaultValueTypes>SITENAME</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR</name>
+    <name>CHARACTER VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="32672" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>DBSERVERNAME</defaultValueTypes>
+    <defaultValueTypes>SITENAME</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NVARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_2" lengthSupported="true" maximumLength="32739" primitiveType="CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LVARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">
+    <defaultValueTypes>TODAY</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" scaleSupported="true" precisionSupported="true" maximumPrecision="32" keyConstraintSupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_2" scaleSupported="true" precisionSupported="true" maximumPrecision="32" keyConstraintSupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>MONEY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE PRECISION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" keyConstraintSupported="true" primitiveType="FLOAT" jdbcEnumType="6" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INTEGER</name>
+    <name>INT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTERVAL_1" keyConstraintSupported="true" displayNameSupported="true" displayName="INTERVAL {0} TO {1}" leadingFieldQualifierSupported="true" trailingFieldQualifierSupported="true" fieldQualifierSeparator=" TO " defaultLeadingFieldQualifierDefinition="L_YEAR" defaultTrailingFieldQualifierDefinition="T_MONTH" primitiveType="INTERVAL">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <leadingFieldQualifierDefinition xmi:id="L_YEAR" name="YEAR" precisionSupported="true" maximumPrecision="9" defaultPrecision="4" validTrailingFieldQualifierDefinitions="T_YEAR T_MONTH"/>
+    <leadingFieldQualifierDefinition xmi:id="L_MONTH" name="MONTH" precisionSupported="true" maximumPrecision="9" defaultPrecision="2" validTrailingFieldQualifierDefinitions="T_MONTH"/>
+    <leadingFieldQualifierDefinition xmi:id="L_DAY" name="DAY" precisionSupported="true" maximumPrecision="9" defaultPrecision="2" validTrailingFieldQualifierDefinitions="T_DAY T_HOUR T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_HOUR" name="HOUR" precisionSupported="true" maximumPrecision="9" defaultPrecision="2" validTrailingFieldQualifierDefinitions="T_HOUR T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_MINUTE" name="MINUTE" precisionSupported="true" maximumPrecision="9" defaultPrecision="2" validTrailingFieldQualifierDefinitions="T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_SECOND" name="SECOND" precisionSupported="true" maximumPrecision="9" defaultPrecision="2" validTrailingFieldQualifierDefinitions="T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_FRACTION" name="FRACTION" validTrailingFieldQualifierDefinitions="T_FRACTION"/>
+    <trailingFieldQualifierDefinition xmi:id="T_YEAR" name="YEAR" precisionSupported="true" maximumPrecision="9" defaultPrecision="2"/>
+    <trailingFieldQualifierDefinition xmi:id="T_MONTH" name="MONTH" precisionSupported="true" maximumPrecision="9" defaultPrecision="2"/>
+    <trailingFieldQualifierDefinition xmi:id="T_DAY" name="DAY" precisionSupported="true" maximumPrecision="9" defaultPrecision="2"/>
+    <trailingFieldQualifierDefinition xmi:id="T_HOUR" name="HOUR" precisionSupported="true" maximumPrecision="9" defaultPrecision="2"/>
+    <trailingFieldQualifierDefinition xmi:id="T_MINUTE" name="MINUTE" precisionSupported="true" maximumPrecision="9" defaultPrecision="2"/>
+    <trailingFieldQualifierDefinition xmi:id="T_SECOND" name="SECOND" precisionSupported="true" maximumPrecision="9" defaultPrecision="2"/>
+    <trailingFieldQualifierDefinition xmi:id="T_FRACTION" name="FRACTION" precisionSupported="true" maximumPrecision="5" defaultPrecision="3"/>
+   <name>INTERVAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" keyConstraintSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+    <name>NUM</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLFLOAT</name>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" displayNameSupported="true" displayName="DATETIME {0} TO {1}" leadingFieldQualifierSupported="true" trailingFieldQualifierSupported="true" fieldQualifierSeparator=" TO " defaultLeadingFieldQualifierDefinition="L_YEAR" defaultTrailingFieldQualifierDefinition="T_MONTH" primitiveType="INTERVAL" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <defaultValueTypes>CURRENT</defaultValueTypes>
+    <leadingFieldQualifierDefinition xmi:id="L_YEAR" name="YEAR" validTrailingFieldQualifierDefinitions="T_YEAR T_MONTH T_DAY T_HOUR T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_MONTH" name="MONTH" validTrailingFieldQualifierDefinitions="T_MONTH T_DAY T_HOUR T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_DAY" name="DAY" validTrailingFieldQualifierDefinitions="T_DAY T_HOUR T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_HOUR" name="HOUR" validTrailingFieldQualifierDefinitions="T_HOUR T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_MINUTE" name="MINUTE" validTrailingFieldQualifierDefinitions="T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_SECOND" name="SECOND" validTrailingFieldQualifierDefinitions="T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_FRACTION" name="FRACTION" validTrailingFieldQualifierDefinitions="T_FRACTION"/>
+    <trailingFieldQualifierDefinition xmi:id="T_YEAR" name="YEAR"/>
+    <trailingFieldQualifierDefinition xmi:id="T_MONTH" name="MONTH"/>
+    <trailingFieldQualifierDefinition xmi:id="T_DAY" name="DAY"/>
+    <trailingFieldQualifierDefinition xmi:id="T_HOUR" name="HOUR"/>
+    <trailingFieldQualifierDefinition xmi:id="T_MINUTE" name="MINUTE"/>
+    <trailingFieldQualifierDefinition xmi:id="T_SECOND" name="SECOND"/>
+    <trailingFieldQualifierDefinition xmi:id="T_FRACTION" name="FRACTION" precisionSupported="true" maximumPrecision="5" defaultPrecision="3"/>
+   <name>DATETIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_2" keyConstraintSupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SERIAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_1" keyConstraintSupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="long">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INT8</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_2" keyConstraintSupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="long">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SERIAL8</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" keyConstraintSupported="true" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BYTE</name>
+  </predefinedDataTypeDefinitions>
+  <tableSpaceDefinition typeSupported="true" extentSizeSupported="true" prefetchSizeSupported="true" managedBySupported="true" pageSizeSupported="true" bufferPoolSupported="true">
+    <tableSpaceType>REGULAR</tableSpaceType>
+    <tableSpaceType>TEMPORARY</tableSpaceType>
+    <tableSpaceType>LARGE</tableSpaceType>
+  </tableSpaceDefinition>
+  <storedProcedureDefinition maximumIdentifierLength="128" nullInputActionSupported="true" determininsticSupported="true" returnedNullSupported="true" parameterStyleSupported="true">
+    <languageType>SQL</languageType>
+    <languageType>JAVA</languageType>
+    <languageType>C</languageType>
+    <languageType>COBOL</languageType>
+    <languageType>ASSEMBLY</languageType>
+    <languageType>PLI</languageType>
+    <procedureType>PROCEDURE</procedureType>
+    <procedureType>FUNCTION</procedureType>
+    <functionLanguageType>SQL</functionLanguageType>
+    <functionLanguageType>JAVA</functionLanguageType>
+    <functionLanguageType>C</functionLanguageType>
+  </storedProcedureDefinition>
+  <triggerDefinition maximumIdentifierLength="128" whenClauseSupported="true" granularitySupported="true" referencesClauseSupported="true" perColumnUpdateTriggerSupported="true" rowTriggerReferenceSupported="true" tableTriggerReferenceSupported="true"/>
+  <columnDefinition maximumIdentifierLength="128" identitySupported="true" computedSupported="false"/>
+  <constraintDefinition maximumPrimaryKeyIdentifierLength="128" maximumForeignKeyIdentifierLength="128" maximumCheckConstraintIdentifierLength="128" clusteredPrimaryKeySupported="true" clusteredUniqueConstraintSupported="true" uniqueKeyNullable="true">
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+    <checkOption>NONE</checkOption>
+    <checkOption>LOCAL</checkOption>
+    <checkOption>CASCADE</checkOption>
+  </constraintDefinition>
+  <queryDefinition hostVariableMarker=":"/>
+  <indexDefinition maximumIdentifierLength="128" clusteringSupported="true"/>
+  <viewDefinition maximumIdentifierLength="128"/>
+  <tableDefinition maximumIdentifierLength="128"/>
+  <schemaDefinition maximumIdentifierLength="128"/>
+    <privilegedElementDefinitions name="Database">
+  	<privilegeDefinitions name="CONNECT"/>
+	<privilegeDefinitions name="RESOURCE"/>
+	<privilegeDefinitions name="DBA"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="PersistentTable">
+  	<privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="REFERENCES" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="SELECT" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="UNDER"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="ViewTable">
+  	<privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="SELECT" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="UNDER"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions xmi:id="COLUMN_1" name="Column"/>
+  <privilegedElementDefinitions name="Routine">
+  	<privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Sequence">
+  	<privilegeDefinitions name="ALTER"/>
+  	<privilegeDefinitions name="SELECT"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="UserDefinedType">
+  	<privilegeDefinitions name="USAGE"/>
+  	<privilegeDefinitions name="UNDER"/>
+  </privilegedElementDefinitions>
+  <SQLSyntaxDefinition>
+    <keywords>A</keywords>
+	<keywords>ABORT</keywords>
+	<keywords>ABS</keywords>
+	<keywords>ABSOLUTE</keywords>
+	<keywords>ACCESS</keywords>
+	<keywords>ACOS</keywords>
+	<keywords>ACQUIRE</keywords>
+	<keywords>ACTION</keywords>
+	<keywords>ACTIVATE</keywords>
+	<keywords>ADA</keywords>
+	<keywords>ADD</keywords>
+	<keywords>ADDFORM</keywords>
+	<keywords>ADMIN</keywords>
+	<keywords>AFTER</keywords>
+	<keywords>AGGREGATE</keywords>
+	<keywords>ALIAS</keywords>
+	<keywords>ALL</keywords>
+	<keywords>ALLOCATE</keywords>
+	<keywords>ALTER</keywords>
+	<keywords>AN</keywords>
+	<keywords>ANALYZE</keywords>
+	<keywords>AND</keywords>
+	<keywords>ANY</keywords>
+	<keywords>APPEND</keywords>
+	<keywords>ARCHIVE</keywords>
+	<keywords>ARCHIVELOG</keywords>
+	<keywords>ARE</keywords>
+	<keywords>ARRAY</keywords>
+	<keywords>ARRAYLEN</keywords>
+	<keywords>AS</keywords>
+	<keywords>ASC</keywords>
+	<keywords>ASCII</keywords>
+	<keywords>ASIN</keywords>
+	<keywords>ASSERTION</keywords>
+	<keywords>AT</keywords>
+	<keywords>ATAN</keywords>
+	<keywords>AUDIT</keywords>
+	<keywords>AUTHORIZATION</keywords>
+	<keywords>AVG</keywords>
+	<keywords>AVGU</keywords>
+	<keywords>BACKUP</keywords>
+	<keywords>BECOME</keywords>
+	<keywords>BEFORE</keywords>
+	<keywords>BEGIN</keywords>
+	<keywords>BETWEEN</keywords>
+	<keywords>BIGINT</keywords>
+	<keywords>BINARY</keywords>
+	<keywords>BIND</keywords>
+	<keywords>BINDING</keywords>
+	<keywords>BIT</keywords>
+	<keywords>BLOB</keywords>
+	<keywords>BLOCK</keywords>
+	<keywords>BODY</keywords>
+	<keywords>BOOLEAN</keywords>
+	<keywords>BOTH</keywords>
+	<keywords>BREADTH</keywords>
+	<keywords>BREAK</keywords>
+	<keywords>BREAKDISPLAY</keywords>
+	<keywords>BROWSE</keywords>
+	<keywords>BUFFERPOOL</keywords>
+	<keywords>BULK</keywords>
+	<keywords>BY</keywords>
+	<keywords>BYREF</keywords>
+	<keywords>CACHE</keywords>
+	<keywords>CALL</keywords>
+	<keywords>CALLPROC</keywords>
+	<keywords>CANCEL</keywords>
+	<keywords>CAPTURE</keywords>
+	<keywords>CASCADE</keywords>
+	<keywords>CASCADED</keywords>
+	<keywords>CASE</keywords>
+	<keywords>CAST</keywords>
+	<keywords>CATALOG</keywords>
+	<keywords>CCSID</keywords>
+	<keywords>CEILING</keywords>
+	<keywords>CHANGE</keywords>
+	<keywords>CHAR</keywords>
+	<keywords>CHARACTER</keywords>
+	<keywords>CHARTOROWID</keywords>
+	<keywords>CHECK</keywords>
+	<keywords>CLASS</keywords>
+	<keywords>CLOB</keywords>
+	<keywords>CHECKPOINT</keywords>
+	<keywords>CHR</keywords>
+	<keywords>CLEANUP</keywords>
+	<keywords>CLEAR</keywords>
+	<keywords>CLEARROW</keywords>
+	<keywords>CLOSE</keywords>
+	<keywords>CLUSTER</keywords>
+	<keywords>CLUSTERED</keywords>
+	<keywords>COALESCE</keywords>
+	<keywords>COBOL</keywords>
+	<keywords>COLGROUP</keywords>
+	<keywords>COLLATE</keywords>
+	<keywords>COLLATION</keywords>
+	<keywords>COLLECTION</keywords>
+	<keywords>COLUMN</keywords>
+	<keywords>COMMAND</keywords>
+	<keywords>COMMENT</keywords>
+	<keywords>COMMIT</keywords>
+	<keywords>COMPLETION</keywords>
+	<keywords>COMMITTED</keywords>
+	<keywords>COMPILE</keywords>
+	<keywords>COMPLEX</keywords>
+	<keywords>COMPRESS</keywords>
+	<keywords>COMPUTE</keywords>
+	<keywords>CONCAT</keywords>
+	<keywords>CONFIRM</keywords>
+	<keywords>CONNECT</keywords>
+	<keywords>CONNECTION</keywords>
+	<keywords>CONSTRAINT</keywords>
+	<keywords>CONSTRAINTS</keywords>
+	<keywords>CONSTRUCTOR</keywords>
+	<keywords>CONTAINS</keywords>
+	<keywords>CONTAINSTABLE</keywords>
+	<keywords>CONTENTS</keywords>
+	<keywords>CONTINUE</keywords>
+	<keywords>CONTROLFILE</keywords>
+	<keywords>CONTROLROW</keywords>
+	<keywords>CONVERT</keywords>
+	<keywords>COPY</keywords>
+	<keywords>CORRESPONDING</keywords>
+	<keywords>COS</keywords>
+	<keywords>COUNT</keywords>
+	<keywords>COUNTU</keywords>
+	<keywords>CRCOLS</keywords>
+	<keywords>CREATE</keywords>
+	<keywords>CROSS</keywords>
+	<keywords>CUBE</keywords>
+	<keywords>CURRENT</keywords>
+	<keywords>CURRENT_DATE</keywords>
+	<keywords>CURRENT_PATH</keywords>
+	<keywords>CURRENT_ROLE</keywords>
+	<keywords>CURRENT_TIME</keywords>
+	<keywords>CURRENT_TIMESTAMP</keywords>
+	<keywords>CURRENT_USER</keywords>
+	<keywords>CURSOR</keywords>
+	<keywords>CVAR</keywords>
+	<keywords>CYCLE</keywords>
+	<keywords>DATA</keywords>
+	<keywords>DATABASE</keywords>
+	<keywords>DATAFILE</keywords>
+	<keywords>DATAHANDLER</keywords>
+	<keywords>DATAPAGES</keywords>
+	<keywords>DATE</keywords>
+	<keywords>DAY</keywords>
+	<keywords>DAYOFMONTH</keywords>
+	<keywords>DAYOFWEEK</keywords>
+	<keywords>DAYOFYEAR</keywords>
+	<keywords>DAYS</keywords>
+	<keywords>DBA</keywords>
+	<keywords>DBCC</keywords>
+	<keywords>DBSPACE</keywords>
+	<keywords>DEALLOCATE</keywords>
+	<keywords>DEC</keywords>
+	<keywords>DECIMAL</keywords>
+	<keywords>DECLARATION</keywords>
+	<keywords>DECLARE</keywords>
+	<keywords>DECODE</keywords>
+	<keywords>DEFAULT</keywords>
+	<keywords>DEFERRABLE</keywords>
+	<keywords>DEFERRED</keywords>
+	<keywords>DEFINE</keywords>
+	<keywords>DEFINITION</keywords>
+	<keywords>DEGREES</keywords>
+	<keywords>DELETE</keywords>
+	<keywords>DEPTH</keywords>
+	<keywords>DEREF</keywords>
+	<keywords>DELETEROW</keywords>
+	<keywords>DENY</keywords>
+	<keywords>DESC</keywords>
+	<keywords>DESCRIBE</keywords>
+	<keywords>DESCRIPTOR</keywords>
+	<keywords>DESTROY</keywords>
+	<keywords>DHTYPE</keywords>
+	<keywords>DESTRUCTOR</keywords>
+	<keywords>DETERMINISTIC</keywords>
+	<keywords>DICTIONARY</keywords>
+	<keywords>DIAGNOSTICS</keywords>
+	<keywords>DIRECT</keywords>
+	<keywords>DISABLE</keywords>
+	<keywords>DISABLED</keywords>
+	<keywords>DISCONNECT</keywords>
+	<keywords>DISK</keywords>
+	<keywords>DISMOUNT</keywords>
+	<keywords>DISPLAY</keywords>
+	<keywords>DISTINCT</keywords>
+	<keywords>DISTRIBUTE</keywords>
+	<keywords>DISTRIBUTED</keywords>
+	<keywords>DO</keywords>
+	<keywords>DOMAIN</keywords>
+	<keywords>DOUBLE</keywords>
+	<keywords>DOWN</keywords>
+	<keywords>DROP</keywords>
+	<keywords>DUMMY</keywords>
+	<keywords>DUMP</keywords>
+	<keywords>DYNAMIC</keywords>
+	<keywords>EACH</keywords>
+	<keywords>EDITPROC</keywords>
+	<keywords>ELSE</keywords>
+	<keywords>ELSEIF</keywords>
+	<keywords>ENABLE</keywords>
+	<keywords>END</keywords>
+	<keywords>ENDDATA</keywords>
+	<keywords>ENDDISPLAY</keywords>
+	<keywords>ENDEXEC</keywords>
+	<keywords>END-EXEC</keywords>
+	<keywords>ENDFORMS</keywords>
+	<keywords>ENDIF</keywords>
+	<keywords>ENDLOOP</keywords>
+	<keywords>EQUALS</keywords>
+	<keywords>ENDSELECT</keywords>
+	<keywords>ENDWHILE</keywords>
+	<keywords>ERASE</keywords>
+	<keywords>ERRLVL</keywords>
+	<keywords>ERROREXIT</keywords>
+	<keywords>ESCAPE</keywords>
+	<keywords>EVENTS</keywords>
+	<keywords>EVERY</keywords>
+	<keywords>EXCEPT</keywords>
+	<keywords>EXCEPTION</keywords>
+	<keywords>EXCEPTIONS</keywords>
+	<keywords>EXCLUDE</keywords>
+	<keywords>EXCLUDING</keywords>
+	<keywords>EXCLUSIVE</keywords>
+	<keywords>EXEC</keywords>
+	<keywords>EXECUTE</keywords>
+	<keywords>EXISTS</keywords>
+	<keywords>EXIT</keywords>
+	<keywords>EXP</keywords>
+	<keywords>EXPLAIN</keywords>
+	<keywords>EXPLICIT</keywords>
+	<keywords>EXPRESSION</keywords>
+	<keywords>EXTENT</keywords>
+	<keywords>EXTERNAL</keywords>
+	<keywords>EXTERNALLY</keywords>
+	<keywords>EXTRACT</keywords>
+	<keywords>FALSE</keywords>
+	<keywords>FETCH</keywords>
+	<keywords>FIELD</keywords>
+	<keywords>FIELDPROC</keywords>
+	<keywords>FILE</keywords>
+	<keywords>FILLFACTOR</keywords>
+	<keywords>FILTERING</keywords>
+	<keywords>FINALIZE</keywords>
+	<keywords>FINALIZE</keywords>
+	<keywords>FIRST</keywords>
+	<keywords>FLOAT</keywords>
+	<keywords>FLOOR</keywords>
+	<keywords>FLOPPY</keywords>
+	<keywords>FLUSH</keywords>
+	<keywords>FOR</keywords>
+	<keywords>FORCE</keywords>
+	<keywords>FORMDATA</keywords>
+	<keywords>FORMINIT</keywords>
+	<keywords>FORMS</keywords>
+	<keywords>FORTRAN</keywords>
+	<keywords>FOREIGN</keywords>
+	<keywords>FOUND</keywords>
+	<keywords>FRAGMENT</keywords>
+	<keywords>FREELIST</keywords>
+	<keywords>FREELISTS</keywords>
+	<keywords>FREETEXT</keywords>
+	<keywords>FREETEXTTABLE</keywords>
+	<keywords>FROM</keywords>
+	<keywords>FREE</keywords>
+	<keywords>FULL</keywords>
+	<keywords>FUNCTION</keywords>
+	<keywords>GENERAL</keywords>
+	<keywords>GET</keywords>
+	<keywords>GETCURRENTCONNECTION</keywords>
+	<keywords>GETFORM</keywords>
+	<keywords>GETOPER</keywords>
+	<keywords>GETROW</keywords>
+	<keywords>GLOBAL</keywords>
+	<keywords>GO</keywords>
+	<keywords>GOTO</keywords>
+	<keywords>GRANT</keywords>
+	<keywords>GRANTED</keywords>
+	<keywords>GRAPHIC</keywords>
+	<keywords>GREATEST</keywords>
+	<keywords>GROUP</keywords>
+	<keywords>GROUPING</keywords>
+	<keywords>GROUPS</keywords>
+	<keywords>HASH</keywords>
+	<keywords>HAVING</keywords>
+	<keywords>HOST</keywords>
+	<keywords>HELP</keywords>
+	<keywords>HELPFILE</keywords>
+	<keywords>HOLDLOCK</keywords>
+	<keywords>HOUR</keywords>
+	<keywords>HOURS</keywords>
+	<keywords>IDENTIFIED</keywords>
+	<keywords>IDENTITY</keywords>
+	<keywords>IGNORE</keywords>
+	<keywords>IDENTITYCOL</keywords>
+	<keywords>IF</keywords>
+	<keywords>IFNULL</keywords>
+	<keywords>IIMESSAGE</keywords>
+	<keywords>IIPRINTF</keywords>
+	<keywords>IMMEDIATE</keywords>
+	<keywords>IMPORT</keywords>
+	<keywords>IN</keywords>
+	<keywords>INCLUDE</keywords>
+	<keywords>INCLUDING</keywords>
+	<keywords>INCREMENT</keywords>
+	<keywords>INDEX</keywords>
+	<keywords>INDEXPAGES</keywords>
+	<keywords>INDICATOR</keywords>
+	<keywords>INITCAP</keywords>
+	<keywords>INITIAL</keywords>
+	<keywords>INITIALIZE</keywords>
+	<keywords>INITIALLY</keywords>
+	<keywords>INITRANS</keywords>
+	<keywords>INITTABLE</keywords>
+	<keywords>INNER</keywords>
+	<keywords>INOUT</keywords>
+	<keywords>INPUT</keywords>
+	<keywords>INSENSITIVE</keywords>
+	<keywords>INSERT</keywords>
+	<keywords>INSERTROW</keywords>
+	<keywords>INSTANCE</keywords>
+	<keywords>INSTR</keywords>
+	<keywords>INT</keywords>
+	<keywords>INTEGER</keywords>
+	<keywords>INTEGRITY</keywords>
+	<keywords>INTERFACE</keywords>
+	<keywords>INTERSECT</keywords>
+	<keywords>INTERVAL</keywords>
+	<keywords>INTO</keywords>
+	<keywords>IS</keywords>
+	<keywords>ISOLATION</keywords>
+	<keywords>ITERATE</keywords>
+	<keywords>JOIN</keywords>
+	<keywords>KEY</keywords>
+	<keywords>KILL</keywords>
+	<keywords>LABEL</keywords>
+	<keywords>LANGUAGE</keywords>
+	<keywords>LARGE</keywords>
+	<keywords>LAST</keywords>
+	<keywords>LATERAL</keywords>
+	<keywords>LAYER</keywords>
+	<keywords>LEADING</keywords>
+	<keywords>LEAST</keywords>
+	<keywords>LEFT</keywords>
+	<keywords>LESS</keywords>
+	<keywords>LENGTH</keywords>
+	<keywords>LEVEL</keywords>
+	<keywords>LIKE</keywords>
+	<keywords>LIMIT</keywords>
+	<keywords>LINENO</keywords>
+	<keywords>LINK</keywords>
+	<keywords>LIST</keywords>
+	<keywords>LISTS</keywords>
+	<keywords>LOAD</keywords>
+	<keywords>LOADTABLE</keywords>
+	<keywords>LOCAL</keywords>
+	<keywords>LOCALTIME</keywords>
+	<keywords>LOCALTIMESTAMP</keywords>
+	<keywords>LOCATOR</keywords>
+	<keywords>LOCATE</keywords>
+	<keywords>LOCK</keywords>
+	<keywords>LOCKSIZE</keywords>
+	<keywords>LOG</keywords>
+	<keywords>LOGFILE</keywords>
+	<keywords>LONG</keywords>
+	<keywords>LONGINT</keywords>
+	<keywords>LOWER</keywords>
+	<keywords>LPAD</keywords>
+	<keywords>LTRIM</keywords>
+	<keywords>LVARBINARY</keywords>
+	<keywords>LVARCHAR</keywords>
+	<keywords>MAIN</keywords>
+	<keywords>MANAGE</keywords>
+	<keywords>MANUAL</keywords>
+	<keywords>MAP</keywords>
+	<keywords>MATCH</keywords>
+	<keywords>MAX</keywords>
+	<keywords>MAXDATAFILES</keywords>
+	<keywords>MAXEXTENTS</keywords>
+	<keywords>MAXINSTANCES</keywords>
+	<keywords>MAXLOGFILES</keywords>
+	<keywords>MAXLOGHISTORY</keywords>
+	<keywords>MAXLOGMEMBERS</keywords>
+	<keywords>MAXTRANS</keywords>
+	<keywords>MAXVALUE</keywords>
+	<keywords>MENUITEM</keywords>
+	<keywords>MESSAGE</keywords>
+	<keywords>MICROSECOND</keywords>
+	<keywords>MICROSECONDS</keywords>
+	<keywords>MIN</keywords>
+	<keywords>MINEXTENTS</keywords>
+	<keywords>MINUS</keywords>
+	<keywords>MINUTE</keywords>
+	<keywords>MODIFIES</keywords>
+	<keywords>MINUTES</keywords>
+	<keywords>MINVALUE</keywords>
+	<keywords>MIRROREXIT</keywords>
+	<keywords>MOD</keywords>
+	<keywords>MODE</keywords>
+	<keywords>MODIFY</keywords>
+	<keywords>MODULE</keywords>
+	<keywords>MONEY</keywords>
+	<keywords>MONTH</keywords>
+	<keywords>MONTHS</keywords>
+	<keywords>MOUNT</keywords>
+	<keywords>MOVE</keywords>
+	<keywords>NAMED</keywords>
+	<keywords>NAMES</keywords>
+	<keywords>NATIONAL</keywords>
+	<keywords>NATURAL</keywords>
+	<keywords>NCHAR</keywords>
+	<keywords>NCLOB</keywords>
+	<keywords>NEW</keywords>
+	<keywords>NEXT</keywords>
+	<keywords>NHEADER</keywords>
+	<keywords>NO</keywords>
+	<keywords>NOARCHIVELOG</keywords>
+	<keywords>NOAUDIT</keywords>
+	<keywords>NOCACHE</keywords>
+	<keywords>NOCHECK</keywords>
+	<keywords>NOCOMPRESS</keywords>
+	<keywords>NOCYCLE</keywords>
+	<keywords>NOECHO</keywords>
+	<keywords>NOMAXVALUE</keywords>
+	<keywords>NOMINVALUE</keywords>
+	<keywords>NONCLUSTERED</keywords>
+	<keywords>NONE</keywords>
+	<keywords>NOORDER</keywords>
+	<keywords>NORESETLOGS</keywords>
+	<keywords>NORMAL</keywords>
+	<keywords>NOSORT</keywords>
+	<keywords>NOT</keywords>
+	<keywords>NOTFOUND</keywords>
+	<keywords>NOTRIM</keywords>
+	<keywords>NOWAIT</keywords>
+	<keywords>NULL</keywords>
+	<keywords>NULLIF</keywords>
+	<keywords>NULLVALUE</keywords>
+	<keywords>NUMBER</keywords>
+	<keywords>NUMERIC</keywords>
+	<keywords>OBJECT</keywords>
+	<keywords>NUMPARTS</keywords>
+	<keywords>NVL</keywords>
+	<keywords>OBID</keywords>
+	<keywords>ODBCINFO</keywords>
+	<keywords>OF</keywords>
+	<keywords>OFF</keywords>
+	<keywords>OFFLINE</keywords>
+	<keywords>OFFSETS</keywords>
+	<keywords>OLD</keywords>
+	<keywords>ON</keywords>
+	<keywords>ONCE</keywords>
+	<keywords>ONLINE</keywords>
+	<keywords>ONLY</keywords>
+	<keywords>OPEN</keywords>
+	<keywords>OPERATION</keywords>
+	<keywords>OPENDATASOURCE</keywords>
+	<keywords>OPENQUERY</keywords>
+	<keywords>OPENROWSET</keywords>
+	<keywords>OPTIMAL</keywords>
+	<keywords>OPTIMIZE</keywords>
+	<keywords>OPTION</keywords>
+	<keywords>OR</keywords>
+	<keywords>ORDER</keywords>
+	<keywords>ORDINALITY</keywords>
+	<keywords>OUT</keywords>
+	<keywords>OUTER</keywords>
+	<keywords>OUTPUT</keywords>
+	<keywords>OVER</keywords>
+	<keywords>OVERLAPS</keywords>
+	<keywords>OWN</keywords>
+	<keywords>PACKAGE</keywords>
+	<keywords>PAD</keywords>
+	<keywords>PARAMETER</keywords>
+	<keywords>PARAMETERS</keywords>
+	<keywords>PAGE</keywords>
+	<keywords>PAGES</keywords>
+	<keywords>PARALLEL</keywords>
+	<keywords>PART</keywords>
+	<keywords>PARTIAL</keywords>
+	<keywords>PATH</keywords>
+	<keywords>POSTFIX</keywords>
+	<keywords>PASCAL</keywords>
+	<keywords>PCTFREE</keywords>
+	<keywords>PCTINCREASE</keywords>
+	<keywords>PCTINDEX</keywords>
+	<keywords>PCTUSED</keywords>
+	<keywords>PERCENT</keywords>
+	<keywords>PERM</keywords>
+	<keywords>PERMANENT</keywords>
+	<keywords>PERMIT</keywords>
+	<keywords>PI</keywords>
+	<keywords>PIPE</keywords>
+	<keywords>PLAN</keywords>
+	<keywords>PLI</keywords>
+	<keywords>POSITION</keywords>
+	<keywords>POWER</keywords>
+	<keywords>PRECISION</keywords>
+	<keywords>PREFIX</keywords>
+	<keywords>PREORDER</keywords>
+	<keywords>PREPARE</keywords>
+	<keywords>PRESERVE</keywords>
+	<keywords>PRIMARY</keywords>
+	<keywords>PRINT</keywords>
+	<keywords>PRINTSCREEN</keywords>
+	<keywords>PRIOR</keywords>
+	<keywords>PRIQTY</keywords>
+	<keywords>PRIVATE</keywords>
+	<keywords>PRIVILEGES</keywords>
+	<keywords>PROC</keywords>
+	<keywords>PROCEDURE</keywords>
+	<keywords>PROCESSEXIT</keywords>
+	<keywords>PROFILE</keywords>
+	<keywords>PROGRAM</keywords>
+	<keywords>PROMPT</keywords>
+	<keywords>PUBLIC</keywords>
+	<keywords>PUTFORM</keywords>
+	<keywords>PUTOPER</keywords>
+	<keywords>PUTROW</keywords>
+	<keywords>QUALIFICATION</keywords>
+	<keywords>QUARTER</keywords>
+	<keywords>QUOTA</keywords>
+	<keywords>RADIANS</keywords>
+	<keywords>RAISE</keywords>
+	<keywords>RAISERROR</keywords>
+	<keywords>RAND</keywords>
+	<keywords>RANGE</keywords>
+	<keywords>RAW</keywords>
+	<keywords>READ</keywords>
+	<keywords>READS</keywords>
+	<keywords>READTEXT</keywords>
+	<keywords>REAL</keywords>
+	<keywords>RECURSIVE</keywords>
+	<keywords>REF</keywords>
+	<keywords>RECONFIGURE</keywords>
+	<keywords>RECORD</keywords>
+	<keywords>RECOVER</keywords>
+	<keywords>REDISPLAY</keywords>
+	<keywords>REFERENCES</keywords>
+	<keywords>REFERENCING</keywords>
+	<keywords>RELATIVE</keywords>
+	<keywords>REGISTER</keywords>
+	<keywords>RELEASE</keywords>
+	<keywords>RELOCATE</keywords>
+	<keywords>REMAINDER</keywords>
+	<keywords>REMOVE</keywords>
+	<keywords>RENAME</keywords>
+	<keywords>REPEAT</keywords>
+	<keywords>REPEATABLE</keywords>
+	<keywords>REPEATED</keywords>
+	<keywords>REPLACE</keywords>
+	<keywords>REPLICATE</keywords>
+	<keywords>REPLICATION</keywords>
+	<keywords>RESET</keywords>
+	<keywords>RESETLOGS</keywords>
+	<keywords>RESOURCE</keywords>
+	<keywords>RESTORE</keywords>
+	<keywords>RESTRICT</keywords>
+	<keywords>RESULT</keywords>
+	<keywords>RESTRICTED</keywords>
+	<keywords>RESUME</keywords>
+	<keywords>RETRIEVE</keywords>
+	<keywords>RETURN</keywords>
+	<keywords>RETURNS</keywords>
+	<keywords>REUSE</keywords>
+	<keywords>REVOKE</keywords>
+	<keywords>RIGHT</keywords>
+	<keywords>ROBIN</keywords>
+	<keywords>ROLE</keywords>
+	<keywords>ROLES</keywords>
+	<keywords>ROLLBACK</keywords>
+	<keywords>ROLLUP</keywords>
+	<keywords>ROUTINE</keywords>
+	<keywords>ROW</keywords>
+	<keywords>ROWS</keywords>
+	<keywords>ROWCOUNT</keywords>
+	<keywords>ROWGUIDCOL</keywords>
+	<keywords>ROWID</keywords>
+	<keywords>ROWIDS</keywords>
+	<keywords>ROWIDTOCHAR</keywords>
+	<keywords>ROWLABEL</keywords>
+	<keywords>ROWNUM</keywords>
+	<keywords>ROWS</keywords>
+	<keywords>RPAD</keywords>
+	<keywords>RRN</keywords>
+	<keywords>RTRIM</keywords>
+	<keywords>RULE</keywords>
+	<keywords>RUN</keywords>
+	<keywords>RUNTIMESTATISTICS</keywords>
+	<keywords>SAVE</keywords>
+	<keywords>SAVEPOINT</keywords>
+	<keywords>SCHEDULE</keywords>
+	<keywords>SCHEMA</keywords>
+	<keywords>SCN</keywords>
+	<keywords>SCREEN</keywords>
+	<keywords>SCROLL</keywords>
+	<keywords>SCOPE</keywords>
+	<keywords>SEARCH</keywords>
+	<keywords>SCROLLDOWN</keywords>
+	<keywords>SCROLLUP</keywords>
+	<keywords>SECOND</keywords>
+	<keywords>SECONDS</keywords>
+	<keywords>SECQTY</keywords>
+	<keywords>SECTION</keywords>
+	<keywords>SEGMENT</keywords>
+	<keywords>SELECT</keywords>
+	<keywords>SEQUENCE</keywords>
+	<keywords>SERIALIZABLE</keywords>
+	<keywords>SERVICE</keywords>
+	<keywords>SESSION</keywords>
+	<keywords>SESSION_USER</keywords>
+	<keywords>SET</keywords>
+	<keywords>SETS</keywords>
+	<keywords>SETUSER</keywords>
+	<keywords>SIN</keywords>
+	<keywords>SIMPLE</keywords>
+	<keywords>SIGN</keywords>
+	<keywords>SHUTDOWN</keywords>
+	<keywords>SHORT</keywords>
+	<keywords>SHARE</keywords>
+	<keywords>SHARED</keywords>
+	<keywords>SETUSER</keywords>
+	<keywords>SIZE</keywords>
+	<keywords>SLEEP</keywords>
+	<keywords>SMALLINT</keywords>
+	<keywords>SNAPSHOT</keywords>
+	<keywords>SOME</keywords>
+	<keywords>SORT</keywords>
+	<keywords>SOUNDEX</keywords>
+	<keywords>SPACE</keywords>
+	<keywords>SPECIFIC</keywords>
+	<keywords>SPECIFICTYPE</keywords>
+	<keywords>SQL</keywords>
+	<keywords>SQLEXCEPTION</keywords>
+	<keywords>SQLBUF</keywords>
+	<keywords>SQLCA</keywords>
+	<keywords>SQLCODE</keywords>
+	<keywords>SQLERROR</keywords>
+	<keywords>SQLSTATE</keywords>
+	<keywords>SQLWARNING</keywords>
+	<keywords>SQRT</keywords>
+	<keywords>START</keywords>
+	<keywords>STATE</keywords>
+	<keywords>STATEMENT</keywords>
+	<keywords>STATIC</keywords>
+	<keywords>STRUCTURE</keywords>
+	<keywords>STATISTICS</keywords>
+	<keywords>STOGROUP</keywords>
+	<keywords>STOP</keywords>
+	<keywords>STORAGE</keywords>
+	<keywords>STORPOOL</keywords>
+	<keywords>SUBMENU</keywords>
+	<keywords>SUBPAGES</keywords>
+	<keywords>SUBSTR</keywords>
+	<keywords>SUBSTRING</keywords>
+	<keywords>SUCCESSFUL</keywords>
+	<keywords>SUFFIX</keywords>
+	<keywords>SUM</keywords>
+	<keywords>SYSTEM_USER</keywords>
+	<keywords>SUMU</keywords>
+	<keywords>SWITCH</keywords>
+	<keywords>SYNONYM</keywords>
+	<keywords>SYSCAT</keywords>
+	<keywords>SYSDATE</keywords>
+	<keywords>SYSFUN</keywords>
+	<keywords>SYSIBM</keywords>
+	<keywords>SYSSTAT</keywords>
+	<keywords>SYSTEM</keywords>
+	<keywords>SYSTIME</keywords>
+	<keywords>SYSTIMESTAMP</keywords>
+	<keywords>TABLE</keywords>
+	<keywords>TABLEDATA</keywords>
+	<keywords>TABLES</keywords>
+	<keywords>TABLESPACE</keywords>
+	<keywords>TAN</keywords>
+	<keywords>TAPE</keywords>
+	<keywords>TEMP</keywords>
+	<keywords>TEMPORARY</keywords>
+	<keywords>TERMINATE</keywords>
+	<keywords>THAN</keywords>
+	<keywords>TEXTSIZE</keywords>
+	<keywords>THEN</keywords>
+	<keywords>THREAD</keywords>
+	<keywords>TIME</keywords>
+	<keywords>TIMEOUT</keywords>
+	<keywords>TIMESTAMP</keywords>
+	<keywords>TIMEZONE_HOUR</keywords>
+	<keywords>TIMEZONE_MINUTE</keywords>
+	<keywords>TINYINT</keywords>
+	<keywords>TO</keywords>
+	<keywords>TOP</keywords>
+	<keywords>TPE</keywords>
+	<keywords>TRACING</keywords>
+	<keywords>TRAILING</keywords>
+	<keywords>TRAN</keywords>
+	<keywords>TRANSACTION</keywords>
+	<keywords>TRANSLATE</keywords>
+	<keywords>TRANSLATION</keywords>
+	<keywords>TREAT</keywords>
+	<keywords>TRIGGER</keywords>
+	<keywords>TRIGGERS</keywords>
+	<keywords>TRIM</keywords>
+	<keywords>TRUE</keywords>
+	<keywords>TRUNCATE</keywords>
+	<keywords>TSEQUAL</keywords>
+	<keywords>TYPE</keywords>
+	<keywords>UID</keywords>
+	<keywords>UNCOMMITTED</keywords>
+	<keywords>UNDER</keywords>
+	<keywords>UNION</keywords>
+	<keywords>UNIQUE</keywords>
+	<keywords>UNKNOWN</keywords>
+	<keywords>UNNEST</keywords>
+	<keywords>UNLIMITED</keywords>
+	<keywords>UNLOADTABLE</keywords>
+	<keywords>UNSIGNED</keywords>
+	<keywords>UNTIL</keywords>
+	<keywords>UP</keywords>
+	<keywords>UPDATE</keywords>
+	<keywords>UPDATETEXT</keywords>
+	<keywords>UPPER</keywords>
+	<keywords>USAGE</keywords>
+	<keywords>USE</keywords>
+	<keywords>USER</keywords>
+	<keywords>USING</keywords>
+	<keywords>UUID</keywords>
+	<keywords>VALIDATE</keywords>
+	<keywords>VALIDPROC</keywords>
+	<keywords>VALIDROW</keywords>
+	<keywords>VALUE</keywords>
+	<keywords>VALUES</keywords>
+	<keywords>VARBINARY</keywords>
+	<keywords>VARCHAR</keywords>
+	<keywords>VARIABLE</keywords>
+	<keywords>VARIABLES</keywords>
+	<keywords>VARYING</keywords>
+	<keywords>VCAT</keywords>
+	<keywords>VERCOLS</keywords>
+	<keywords>VERSION</keywords>
+	<keywords>VIEW</keywords>
+	<keywords>VOLUMES</keywords>
+	<keywords>WAITFOR</keywords>
+	<keywords>WEEK</keywords>
+	<keywords>WHEN</keywords>
+	<keywords>WHENEVER</keywords>
+	<keywords>WHERE</keywords>
+	<keywords>WHILE</keywords>
+	<keywords>WITH</keywords>
+	<keywords>WITHOUT</keywords>
+	<keywords>WORK</keywords>
+	<keywords>WRITE</keywords>
+	<keywords>WRITETEXT</keywords>
+	<keywords>YEAR</keywords>
+	<keywords>YEARS</keywords>
+	<keywords>ZONE</keywords>
+  </SQLSyntaxDefinition>
+</DBDefinition:DatabaseVendorDefinition>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/runtime/vendors/Informix_9.3/Informix_9.3.xmi b/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/runtime/vendors/Informix_9.3/Informix_9.3.xmi
new file mode 100644
index 0000000..f2e30c0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/runtime/vendors/Informix_9.3/Informix_9.3.xmi
@@ -0,0 +1,973 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="Informix" version="9.3" maximumIdentifierLength="128" 
+viewTriggerSupported="true" maximumCommentLength="64" sequenceSupported="true" userDefinedTypeSupported="true" roleSupported="true" roleAuthorizationSupported="true" userSupported="true">
+  <predefinedDataTypeDefinitions xmi:id="BOOLEAN_1" primitiveType="BOOLEAN" jdbcEnumType="16" javaClassName="boolean">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BOOLEAN</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_1" lengthSupported="true" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="32767" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>DBSERVERNAME</defaultValueTypes>
+    <defaultValueTypes>SITENAME</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="32767" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>DBSERVERNAME</defaultValueTypes>
+    <defaultValueTypes>SITENAME</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" lengthSupported="true" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_2" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="255" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>DBSERVERNAME</defaultValueTypes>
+    <defaultValueTypes>SITENAME</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR</name>
+    <name>CHARACTER VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="32672" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>DBSERVERNAME</defaultValueTypes>
+    <defaultValueTypes>SITENAME</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NVARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_2" lengthSupported="true" maximumLength="32739" primitiveType="CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LVARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">
+    <defaultValueTypes>TODAY</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" scaleSupported="true" precisionSupported="true" maximumPrecision="32" keyConstraintSupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_2" scaleSupported="true" precisionSupported="true" maximumPrecision="32" keyConstraintSupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>MONEY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE PRECISION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" keyConstraintSupported="true" primitiveType="FLOAT" jdbcEnumType="6" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INTEGER</name>
+    <name>INT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTERVAL_1" keyConstraintSupported="true" displayNameSupported="true" displayName="INTERVAL {0} TO {1}" leadingFieldQualifierSupported="true" trailingFieldQualifierSupported="true" fieldQualifierSeparator=" TO " defaultLeadingFieldQualifierDefinition="L_YEAR" defaultTrailingFieldQualifierDefinition="T_MONTH" primitiveType="INTERVAL">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <leadingFieldQualifierDefinition xmi:id="L_YEAR" name="YEAR" precisionSupported="true" maximumPrecision="9" defaultPrecision="4" validTrailingFieldQualifierDefinitions="T_YEAR T_MONTH"/>
+    <leadingFieldQualifierDefinition xmi:id="L_MONTH" name="MONTH" precisionSupported="true" maximumPrecision="9" defaultPrecision="2" validTrailingFieldQualifierDefinitions="T_MONTH"/>
+    <leadingFieldQualifierDefinition xmi:id="L_DAY" name="DAY" precisionSupported="true" maximumPrecision="9" defaultPrecision="2" validTrailingFieldQualifierDefinitions="T_DAY T_HOUR T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_HOUR" name="HOUR" precisionSupported="true" maximumPrecision="9" defaultPrecision="2" validTrailingFieldQualifierDefinitions="T_HOUR T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_MINUTE" name="MINUTE" precisionSupported="true" maximumPrecision="9" defaultPrecision="2" validTrailingFieldQualifierDefinitions="T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_SECOND" name="SECOND" precisionSupported="true" maximumPrecision="9" defaultPrecision="2" validTrailingFieldQualifierDefinitions="T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_FRACTION" name="FRACTION" validTrailingFieldQualifierDefinitions="T_FRACTION"/>
+    <trailingFieldQualifierDefinition xmi:id="T_YEAR" name="YEAR" precisionSupported="true" maximumPrecision="9" defaultPrecision="2"/>
+    <trailingFieldQualifierDefinition xmi:id="T_MONTH" name="MONTH" precisionSupported="true" maximumPrecision="9" defaultPrecision="2"/>
+    <trailingFieldQualifierDefinition xmi:id="T_DAY" name="DAY" precisionSupported="true" maximumPrecision="9" defaultPrecision="2"/>
+    <trailingFieldQualifierDefinition xmi:id="T_HOUR" name="HOUR" precisionSupported="true" maximumPrecision="9" defaultPrecision="2"/>
+    <trailingFieldQualifierDefinition xmi:id="T_MINUTE" name="MINUTE" precisionSupported="true" maximumPrecision="9" defaultPrecision="2"/>
+    <trailingFieldQualifierDefinition xmi:id="T_SECOND" name="SECOND" precisionSupported="true" maximumPrecision="9" defaultPrecision="2"/>
+    <trailingFieldQualifierDefinition xmi:id="T_FRACTION" name="FRACTION" precisionSupported="true" maximumPrecision="5" defaultPrecision="3"/>
+   <name>INTERVAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" keyConstraintSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+    <name>NUM</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLFLOAT</name>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" displayNameSupported="true" displayName="DATETIME {0} TO {1}" leadingFieldQualifierSupported="true" trailingFieldQualifierSupported="true" fieldQualifierSeparator=" TO " defaultLeadingFieldQualifierDefinition="L_YEAR" defaultTrailingFieldQualifierDefinition="T_MONTH" primitiveType="INTERVAL" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <defaultValueTypes>CURRENT</defaultValueTypes>
+    <leadingFieldQualifierDefinition xmi:id="L_YEAR" name="YEAR" validTrailingFieldQualifierDefinitions="T_YEAR T_MONTH T_DAY T_HOUR T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_MONTH" name="MONTH" validTrailingFieldQualifierDefinitions="T_MONTH T_DAY T_HOUR T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_DAY" name="DAY" validTrailingFieldQualifierDefinitions="T_DAY T_HOUR T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_HOUR" name="HOUR" validTrailingFieldQualifierDefinitions="T_HOUR T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_MINUTE" name="MINUTE" validTrailingFieldQualifierDefinitions="T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_SECOND" name="SECOND" validTrailingFieldQualifierDefinitions="T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_FRACTION" name="FRACTION" validTrailingFieldQualifierDefinitions="T_FRACTION"/>
+    <trailingFieldQualifierDefinition xmi:id="T_YEAR" name="YEAR"/>
+    <trailingFieldQualifierDefinition xmi:id="T_MONTH" name="MONTH"/>
+    <trailingFieldQualifierDefinition xmi:id="T_DAY" name="DAY"/>
+    <trailingFieldQualifierDefinition xmi:id="T_HOUR" name="HOUR"/>
+    <trailingFieldQualifierDefinition xmi:id="T_MINUTE" name="MINUTE"/>
+    <trailingFieldQualifierDefinition xmi:id="T_SECOND" name="SECOND"/>
+    <trailingFieldQualifierDefinition xmi:id="T_FRACTION" name="FRACTION" precisionSupported="true" maximumPrecision="5" defaultPrecision="3"/>
+   <name>DATETIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_2" keyConstraintSupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SERIAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_1" keyConstraintSupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="long">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INT8</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_2" keyConstraintSupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="long">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SERIAL8</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" keyConstraintSupported="true" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BYTE</name>
+  </predefinedDataTypeDefinitions>
+  <tableSpaceDefinition typeSupported="true" extentSizeSupported="true" prefetchSizeSupported="true" managedBySupported="true" pageSizeSupported="true" bufferPoolSupported="true">
+    <tableSpaceType>REGULAR</tableSpaceType>
+    <tableSpaceType>TEMPORARY</tableSpaceType>
+    <tableSpaceType>LARGE</tableSpaceType>
+  </tableSpaceDefinition>
+  <storedProcedureDefinition maximumIdentifierLength="128" nullInputActionSupported="true" determininsticSupported="true" returnedNullSupported="true" parameterStyleSupported="true">
+    <languageType>SQL</languageType>
+    <languageType>JAVA</languageType>
+    <languageType>C</languageType>
+    <languageType>COBOL</languageType>
+    <languageType>ASSEMBLY</languageType>
+    <languageType>PLI</languageType>
+    <procedureType>PROCEDURE</procedureType>
+    <procedureType>FUNCTION</procedureType>
+    <functionLanguageType>SQL</functionLanguageType>
+    <functionLanguageType>JAVA</functionLanguageType>
+    <functionLanguageType>C</functionLanguageType>
+  </storedProcedureDefinition>
+  <triggerDefinition maximumIdentifierLength="128" whenClauseSupported="true" granularitySupported="true" referencesClauseSupported="true" perColumnUpdateTriggerSupported="true" rowTriggerReferenceSupported="true" tableTriggerReferenceSupported="true"/>
+  <columnDefinition maximumIdentifierLength="128" identitySupported="true" computedSupported="false"/>
+  <constraintDefinition maximumPrimaryKeyIdentifierLength="128" maximumForeignKeyIdentifierLength="128" maximumCheckConstraintIdentifierLength="128" clusteredPrimaryKeySupported="true" clusteredUniqueConstraintSupported="true" uniqueKeyNullable="true">
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+    <checkOption>NONE</checkOption>
+    <checkOption>LOCAL</checkOption>
+    <checkOption>CASCADE</checkOption>
+  </constraintDefinition>
+  <queryDefinition hostVariableMarker=":"/>
+  <indexDefinition maximumIdentifierLength="128" clusteringSupported="true"/>
+  <viewDefinition maximumIdentifierLength="128"/>
+  <tableDefinition maximumIdentifierLength="128"/>
+  <schemaDefinition maximumIdentifierLength="128"/>
+    <privilegedElementDefinitions name="Database">
+  	<privilegeDefinitions name="CONNECT"/>
+	<privilegeDefinitions name="RESOURCE"/>
+	<privilegeDefinitions name="DBA"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="PersistentTable">
+  	<privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="REFERENCES" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="SELECT" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="UNDER"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="ViewTable">
+  	<privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="SELECT" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="UNDER"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions xmi:id="COLUMN_1" name="Column"/>
+  <privilegedElementDefinitions name="Routine">
+  	<privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Sequence">
+  	<privilegeDefinitions name="ALTER"/>
+  	<privilegeDefinitions name="SELECT"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="UserDefinedType">
+  	<privilegeDefinitions name="USAGE"/>
+  	<privilegeDefinitions name="UNDER"/>
+  </privilegedElementDefinitions>
+  <SQLSyntaxDefinition>
+    <keywords>A</keywords>
+	<keywords>ABORT</keywords>
+	<keywords>ABS</keywords>
+	<keywords>ABSOLUTE</keywords>
+	<keywords>ACCESS</keywords>
+	<keywords>ACOS</keywords>
+	<keywords>ACQUIRE</keywords>
+	<keywords>ACTION</keywords>
+	<keywords>ACTIVATE</keywords>
+	<keywords>ADA</keywords>
+	<keywords>ADD</keywords>
+	<keywords>ADDFORM</keywords>
+	<keywords>ADMIN</keywords>
+	<keywords>AFTER</keywords>
+	<keywords>AGGREGATE</keywords>
+	<keywords>ALIAS</keywords>
+	<keywords>ALL</keywords>
+	<keywords>ALLOCATE</keywords>
+	<keywords>ALTER</keywords>
+	<keywords>AN</keywords>
+	<keywords>ANALYZE</keywords>
+	<keywords>AND</keywords>
+	<keywords>ANY</keywords>
+	<keywords>APPEND</keywords>
+	<keywords>ARCHIVE</keywords>
+	<keywords>ARCHIVELOG</keywords>
+	<keywords>ARE</keywords>
+	<keywords>ARRAY</keywords>
+	<keywords>ARRAYLEN</keywords>
+	<keywords>AS</keywords>
+	<keywords>ASC</keywords>
+	<keywords>ASCII</keywords>
+	<keywords>ASIN</keywords>
+	<keywords>ASSERTION</keywords>
+	<keywords>AT</keywords>
+	<keywords>ATAN</keywords>
+	<keywords>AUDIT</keywords>
+	<keywords>AUTHORIZATION</keywords>
+	<keywords>AVG</keywords>
+	<keywords>AVGU</keywords>
+	<keywords>BACKUP</keywords>
+	<keywords>BECOME</keywords>
+	<keywords>BEFORE</keywords>
+	<keywords>BEGIN</keywords>
+	<keywords>BETWEEN</keywords>
+	<keywords>BIGINT</keywords>
+	<keywords>BINARY</keywords>
+	<keywords>BIND</keywords>
+	<keywords>BINDING</keywords>
+	<keywords>BIT</keywords>
+	<keywords>BLOB</keywords>
+	<keywords>BLOCK</keywords>
+	<keywords>BODY</keywords>
+	<keywords>BOOLEAN</keywords>
+	<keywords>BOTH</keywords>
+	<keywords>BREADTH</keywords>
+	<keywords>BREAK</keywords>
+	<keywords>BREAKDISPLAY</keywords>
+	<keywords>BROWSE</keywords>
+	<keywords>BUFFERPOOL</keywords>
+	<keywords>BULK</keywords>
+	<keywords>BY</keywords>
+	<keywords>BYREF</keywords>
+	<keywords>CACHE</keywords>
+	<keywords>CALL</keywords>
+	<keywords>CALLPROC</keywords>
+	<keywords>CANCEL</keywords>
+	<keywords>CAPTURE</keywords>
+	<keywords>CASCADE</keywords>
+	<keywords>CASCADED</keywords>
+	<keywords>CASE</keywords>
+	<keywords>CAST</keywords>
+	<keywords>CATALOG</keywords>
+	<keywords>CCSID</keywords>
+	<keywords>CEILING</keywords>
+	<keywords>CHANGE</keywords>
+	<keywords>CHAR</keywords>
+	<keywords>CHARACTER</keywords>
+	<keywords>CHARTOROWID</keywords>
+	<keywords>CHECK</keywords>
+	<keywords>CLASS</keywords>
+	<keywords>CLOB</keywords>
+	<keywords>CHECKPOINT</keywords>
+	<keywords>CHR</keywords>
+	<keywords>CLEANUP</keywords>
+	<keywords>CLEAR</keywords>
+	<keywords>CLEARROW</keywords>
+	<keywords>CLOSE</keywords>
+	<keywords>CLUSTER</keywords>
+	<keywords>CLUSTERED</keywords>
+	<keywords>COALESCE</keywords>
+	<keywords>COBOL</keywords>
+	<keywords>COLGROUP</keywords>
+	<keywords>COLLATE</keywords>
+	<keywords>COLLATION</keywords>
+	<keywords>COLLECTION</keywords>
+	<keywords>COLUMN</keywords>
+	<keywords>COMMAND</keywords>
+	<keywords>COMMENT</keywords>
+	<keywords>COMMIT</keywords>
+	<keywords>COMPLETION</keywords>
+	<keywords>COMMITTED</keywords>
+	<keywords>COMPILE</keywords>
+	<keywords>COMPLEX</keywords>
+	<keywords>COMPRESS</keywords>
+	<keywords>COMPUTE</keywords>
+	<keywords>CONCAT</keywords>
+	<keywords>CONFIRM</keywords>
+	<keywords>CONNECT</keywords>
+	<keywords>CONNECTION</keywords>
+	<keywords>CONSTRAINT</keywords>
+	<keywords>CONSTRAINTS</keywords>
+	<keywords>CONSTRUCTOR</keywords>
+	<keywords>CONTAINS</keywords>
+	<keywords>CONTAINSTABLE</keywords>
+	<keywords>CONTENTS</keywords>
+	<keywords>CONTINUE</keywords>
+	<keywords>CONTROLFILE</keywords>
+	<keywords>CONTROLROW</keywords>
+	<keywords>CONVERT</keywords>
+	<keywords>COPY</keywords>
+	<keywords>CORRESPONDING</keywords>
+	<keywords>COS</keywords>
+	<keywords>COUNT</keywords>
+	<keywords>COUNTU</keywords>
+	<keywords>CRCOLS</keywords>
+	<keywords>CREATE</keywords>
+	<keywords>CROSS</keywords>
+	<keywords>CUBE</keywords>
+	<keywords>CURRENT</keywords>
+	<keywords>CURRENT_DATE</keywords>
+	<keywords>CURRENT_PATH</keywords>
+	<keywords>CURRENT_ROLE</keywords>
+	<keywords>CURRENT_TIME</keywords>
+	<keywords>CURRENT_TIMESTAMP</keywords>
+	<keywords>CURRENT_USER</keywords>
+	<keywords>CURSOR</keywords>
+	<keywords>CVAR</keywords>
+	<keywords>CYCLE</keywords>
+	<keywords>DATA</keywords>
+	<keywords>DATABASE</keywords>
+	<keywords>DATAFILE</keywords>
+	<keywords>DATAHANDLER</keywords>
+	<keywords>DATAPAGES</keywords>
+	<keywords>DATE</keywords>
+	<keywords>DAY</keywords>
+	<keywords>DAYOFMONTH</keywords>
+	<keywords>DAYOFWEEK</keywords>
+	<keywords>DAYOFYEAR</keywords>
+	<keywords>DAYS</keywords>
+	<keywords>DBA</keywords>
+	<keywords>DBCC</keywords>
+	<keywords>DBSPACE</keywords>
+	<keywords>DEALLOCATE</keywords>
+	<keywords>DEC</keywords>
+	<keywords>DECIMAL</keywords>
+	<keywords>DECLARATION</keywords>
+	<keywords>DECLARE</keywords>
+	<keywords>DECODE</keywords>
+	<keywords>DEFAULT</keywords>
+	<keywords>DEFERRABLE</keywords>
+	<keywords>DEFERRED</keywords>
+	<keywords>DEFINE</keywords>
+	<keywords>DEFINITION</keywords>
+	<keywords>DEGREES</keywords>
+	<keywords>DELETE</keywords>
+	<keywords>DEPTH</keywords>
+	<keywords>DEREF</keywords>
+	<keywords>DELETEROW</keywords>
+	<keywords>DENY</keywords>
+	<keywords>DESC</keywords>
+	<keywords>DESCRIBE</keywords>
+	<keywords>DESCRIPTOR</keywords>
+	<keywords>DESTROY</keywords>
+	<keywords>DHTYPE</keywords>
+	<keywords>DESTRUCTOR</keywords>
+	<keywords>DETERMINISTIC</keywords>
+	<keywords>DICTIONARY</keywords>
+	<keywords>DIAGNOSTICS</keywords>
+	<keywords>DIRECT</keywords>
+	<keywords>DISABLE</keywords>
+	<keywords>DISABLED</keywords>
+	<keywords>DISCONNECT</keywords>
+	<keywords>DISK</keywords>
+	<keywords>DISMOUNT</keywords>
+	<keywords>DISPLAY</keywords>
+	<keywords>DISTINCT</keywords>
+	<keywords>DISTRIBUTE</keywords>
+	<keywords>DISTRIBUTED</keywords>
+	<keywords>DO</keywords>
+	<keywords>DOMAIN</keywords>
+	<keywords>DOUBLE</keywords>
+	<keywords>DOWN</keywords>
+	<keywords>DROP</keywords>
+	<keywords>DUMMY</keywords>
+	<keywords>DUMP</keywords>
+	<keywords>DYNAMIC</keywords>
+	<keywords>EACH</keywords>
+	<keywords>EDITPROC</keywords>
+	<keywords>ELSE</keywords>
+	<keywords>ELSEIF</keywords>
+	<keywords>ENABLE</keywords>
+	<keywords>END</keywords>
+	<keywords>ENDDATA</keywords>
+	<keywords>ENDDISPLAY</keywords>
+	<keywords>ENDEXEC</keywords>
+	<keywords>END-EXEC</keywords>
+	<keywords>ENDFORMS</keywords>
+	<keywords>ENDIF</keywords>
+	<keywords>ENDLOOP</keywords>
+	<keywords>EQUALS</keywords>
+	<keywords>ENDSELECT</keywords>
+	<keywords>ENDWHILE</keywords>
+	<keywords>ERASE</keywords>
+	<keywords>ERRLVL</keywords>
+	<keywords>ERROREXIT</keywords>
+	<keywords>ESCAPE</keywords>
+	<keywords>EVENTS</keywords>
+	<keywords>EVERY</keywords>
+	<keywords>EXCEPT</keywords>
+	<keywords>EXCEPTION</keywords>
+	<keywords>EXCEPTIONS</keywords>
+	<keywords>EXCLUDE</keywords>
+	<keywords>EXCLUDING</keywords>
+	<keywords>EXCLUSIVE</keywords>
+	<keywords>EXEC</keywords>
+	<keywords>EXECUTE</keywords>
+	<keywords>EXISTS</keywords>
+	<keywords>EXIT</keywords>
+	<keywords>EXP</keywords>
+	<keywords>EXPLAIN</keywords>
+	<keywords>EXPLICIT</keywords>
+	<keywords>EXPRESSION</keywords>
+	<keywords>EXTENT</keywords>
+	<keywords>EXTERNAL</keywords>
+	<keywords>EXTERNALLY</keywords>
+	<keywords>EXTRACT</keywords>
+	<keywords>FALSE</keywords>
+	<keywords>FETCH</keywords>
+	<keywords>FIELD</keywords>
+	<keywords>FIELDPROC</keywords>
+	<keywords>FILE</keywords>
+	<keywords>FILLFACTOR</keywords>
+	<keywords>FILTERING</keywords>
+	<keywords>FINALIZE</keywords>
+	<keywords>FINALIZE</keywords>
+	<keywords>FIRST</keywords>
+	<keywords>FLOAT</keywords>
+	<keywords>FLOOR</keywords>
+	<keywords>FLOPPY</keywords>
+	<keywords>FLUSH</keywords>
+	<keywords>FOR</keywords>
+	<keywords>FORCE</keywords>
+	<keywords>FORMDATA</keywords>
+	<keywords>FORMINIT</keywords>
+	<keywords>FORMS</keywords>
+	<keywords>FORTRAN</keywords>
+	<keywords>FOREIGN</keywords>
+	<keywords>FOUND</keywords>
+	<keywords>FRAGMENT</keywords>
+	<keywords>FREELIST</keywords>
+	<keywords>FREELISTS</keywords>
+	<keywords>FREETEXT</keywords>
+	<keywords>FREETEXTTABLE</keywords>
+	<keywords>FROM</keywords>
+	<keywords>FREE</keywords>
+	<keywords>FULL</keywords>
+	<keywords>FUNCTION</keywords>
+	<keywords>GENERAL</keywords>
+	<keywords>GET</keywords>
+	<keywords>GETCURRENTCONNECTION</keywords>
+	<keywords>GETFORM</keywords>
+	<keywords>GETOPER</keywords>
+	<keywords>GETROW</keywords>
+	<keywords>GLOBAL</keywords>
+	<keywords>GO</keywords>
+	<keywords>GOTO</keywords>
+	<keywords>GRANT</keywords>
+	<keywords>GRANTED</keywords>
+	<keywords>GRAPHIC</keywords>
+	<keywords>GREATEST</keywords>
+	<keywords>GROUP</keywords>
+	<keywords>GROUPING</keywords>
+	<keywords>GROUPS</keywords>
+	<keywords>HASH</keywords>
+	<keywords>HAVING</keywords>
+	<keywords>HOST</keywords>
+	<keywords>HELP</keywords>
+	<keywords>HELPFILE</keywords>
+	<keywords>HOLDLOCK</keywords>
+	<keywords>HOUR</keywords>
+	<keywords>HOURS</keywords>
+	<keywords>IDENTIFIED</keywords>
+	<keywords>IDENTITY</keywords>
+	<keywords>IGNORE</keywords>
+	<keywords>IDENTITYCOL</keywords>
+	<keywords>IF</keywords>
+	<keywords>IFNULL</keywords>
+	<keywords>IIMESSAGE</keywords>
+	<keywords>IIPRINTF</keywords>
+	<keywords>IMMEDIATE</keywords>
+	<keywords>IMPORT</keywords>
+	<keywords>IN</keywords>
+	<keywords>INCLUDE</keywords>
+	<keywords>INCLUDING</keywords>
+	<keywords>INCREMENT</keywords>
+	<keywords>INDEX</keywords>
+	<keywords>INDEXPAGES</keywords>
+	<keywords>INDICATOR</keywords>
+	<keywords>INITCAP</keywords>
+	<keywords>INITIAL</keywords>
+	<keywords>INITIALIZE</keywords>
+	<keywords>INITIALLY</keywords>
+	<keywords>INITRANS</keywords>
+	<keywords>INITTABLE</keywords>
+	<keywords>INNER</keywords>
+	<keywords>INOUT</keywords>
+	<keywords>INPUT</keywords>
+	<keywords>INSENSITIVE</keywords>
+	<keywords>INSERT</keywords>
+	<keywords>INSERTROW</keywords>
+	<keywords>INSTANCE</keywords>
+	<keywords>INSTR</keywords>
+	<keywords>INT</keywords>
+	<keywords>INTEGER</keywords>
+	<keywords>INTEGRITY</keywords>
+	<keywords>INTERFACE</keywords>
+	<keywords>INTERSECT</keywords>
+	<keywords>INTERVAL</keywords>
+	<keywords>INTO</keywords>
+	<keywords>IS</keywords>
+	<keywords>ISOLATION</keywords>
+	<keywords>ITERATE</keywords>
+	<keywords>JOIN</keywords>
+	<keywords>KEY</keywords>
+	<keywords>KILL</keywords>
+	<keywords>LABEL</keywords>
+	<keywords>LANGUAGE</keywords>
+	<keywords>LARGE</keywords>
+	<keywords>LAST</keywords>
+	<keywords>LATERAL</keywords>
+	<keywords>LAYER</keywords>
+	<keywords>LEADING</keywords>
+	<keywords>LEAST</keywords>
+	<keywords>LEFT</keywords>
+	<keywords>LESS</keywords>
+	<keywords>LENGTH</keywords>
+	<keywords>LEVEL</keywords>
+	<keywords>LIKE</keywords>
+	<keywords>LIMIT</keywords>
+	<keywords>LINENO</keywords>
+	<keywords>LINK</keywords>
+	<keywords>LIST</keywords>
+	<keywords>LISTS</keywords>
+	<keywords>LOAD</keywords>
+	<keywords>LOADTABLE</keywords>
+	<keywords>LOCAL</keywords>
+	<keywords>LOCALTIME</keywords>
+	<keywords>LOCALTIMESTAMP</keywords>
+	<keywords>LOCATOR</keywords>
+	<keywords>LOCATE</keywords>
+	<keywords>LOCK</keywords>
+	<keywords>LOCKSIZE</keywords>
+	<keywords>LOG</keywords>
+	<keywords>LOGFILE</keywords>
+	<keywords>LONG</keywords>
+	<keywords>LONGINT</keywords>
+	<keywords>LOWER</keywords>
+	<keywords>LPAD</keywords>
+	<keywords>LTRIM</keywords>
+	<keywords>LVARBINARY</keywords>
+	<keywords>LVARCHAR</keywords>
+	<keywords>MAIN</keywords>
+	<keywords>MANAGE</keywords>
+	<keywords>MANUAL</keywords>
+	<keywords>MAP</keywords>
+	<keywords>MATCH</keywords>
+	<keywords>MAX</keywords>
+	<keywords>MAXDATAFILES</keywords>
+	<keywords>MAXEXTENTS</keywords>
+	<keywords>MAXINSTANCES</keywords>
+	<keywords>MAXLOGFILES</keywords>
+	<keywords>MAXLOGHISTORY</keywords>
+	<keywords>MAXLOGMEMBERS</keywords>
+	<keywords>MAXTRANS</keywords>
+	<keywords>MAXVALUE</keywords>
+	<keywords>MENUITEM</keywords>
+	<keywords>MESSAGE</keywords>
+	<keywords>MICROSECOND</keywords>
+	<keywords>MICROSECONDS</keywords>
+	<keywords>MIN</keywords>
+	<keywords>MINEXTENTS</keywords>
+	<keywords>MINUS</keywords>
+	<keywords>MINUTE</keywords>
+	<keywords>MODIFIES</keywords>
+	<keywords>MINUTES</keywords>
+	<keywords>MINVALUE</keywords>
+	<keywords>MIRROREXIT</keywords>
+	<keywords>MOD</keywords>
+	<keywords>MODE</keywords>
+	<keywords>MODIFY</keywords>
+	<keywords>MODULE</keywords>
+	<keywords>MONEY</keywords>
+	<keywords>MONTH</keywords>
+	<keywords>MONTHS</keywords>
+	<keywords>MOUNT</keywords>
+	<keywords>MOVE</keywords>
+	<keywords>NAMED</keywords>
+	<keywords>NAMES</keywords>
+	<keywords>NATIONAL</keywords>
+	<keywords>NATURAL</keywords>
+	<keywords>NCHAR</keywords>
+	<keywords>NCLOB</keywords>
+	<keywords>NEW</keywords>
+	<keywords>NEXT</keywords>
+	<keywords>NHEADER</keywords>
+	<keywords>NO</keywords>
+	<keywords>NOARCHIVELOG</keywords>
+	<keywords>NOAUDIT</keywords>
+	<keywords>NOCACHE</keywords>
+	<keywords>NOCHECK</keywords>
+	<keywords>NOCOMPRESS</keywords>
+	<keywords>NOCYCLE</keywords>
+	<keywords>NOECHO</keywords>
+	<keywords>NOMAXVALUE</keywords>
+	<keywords>NOMINVALUE</keywords>
+	<keywords>NONCLUSTERED</keywords>
+	<keywords>NONE</keywords>
+	<keywords>NOORDER</keywords>
+	<keywords>NORESETLOGS</keywords>
+	<keywords>NORMAL</keywords>
+	<keywords>NOSORT</keywords>
+	<keywords>NOT</keywords>
+	<keywords>NOTFOUND</keywords>
+	<keywords>NOTRIM</keywords>
+	<keywords>NOWAIT</keywords>
+	<keywords>NULL</keywords>
+	<keywords>NULLIF</keywords>
+	<keywords>NULLVALUE</keywords>
+	<keywords>NUMBER</keywords>
+	<keywords>NUMERIC</keywords>
+	<keywords>OBJECT</keywords>
+	<keywords>NUMPARTS</keywords>
+	<keywords>NVL</keywords>
+	<keywords>OBID</keywords>
+	<keywords>ODBCINFO</keywords>
+	<keywords>OF</keywords>
+	<keywords>OFF</keywords>
+	<keywords>OFFLINE</keywords>
+	<keywords>OFFSETS</keywords>
+	<keywords>OLD</keywords>
+	<keywords>ON</keywords>
+	<keywords>ONCE</keywords>
+	<keywords>ONLINE</keywords>
+	<keywords>ONLY</keywords>
+	<keywords>OPEN</keywords>
+	<keywords>OPERATION</keywords>
+	<keywords>OPENDATASOURCE</keywords>
+	<keywords>OPENQUERY</keywords>
+	<keywords>OPENROWSET</keywords>
+	<keywords>OPTIMAL</keywords>
+	<keywords>OPTIMIZE</keywords>
+	<keywords>OPTION</keywords>
+	<keywords>OR</keywords>
+	<keywords>ORDER</keywords>
+	<keywords>ORDINALITY</keywords>
+	<keywords>OUT</keywords>
+	<keywords>OUTER</keywords>
+	<keywords>OUTPUT</keywords>
+	<keywords>OVER</keywords>
+	<keywords>OVERLAPS</keywords>
+	<keywords>OWN</keywords>
+	<keywords>PACKAGE</keywords>
+	<keywords>PAD</keywords>
+	<keywords>PARAMETER</keywords>
+	<keywords>PARAMETERS</keywords>
+	<keywords>PAGE</keywords>
+	<keywords>PAGES</keywords>
+	<keywords>PARALLEL</keywords>
+	<keywords>PART</keywords>
+	<keywords>PARTIAL</keywords>
+	<keywords>PATH</keywords>
+	<keywords>POSTFIX</keywords>
+	<keywords>PASCAL</keywords>
+	<keywords>PCTFREE</keywords>
+	<keywords>PCTINCREASE</keywords>
+	<keywords>PCTINDEX</keywords>
+	<keywords>PCTUSED</keywords>
+	<keywords>PERCENT</keywords>
+	<keywords>PERM</keywords>
+	<keywords>PERMANENT</keywords>
+	<keywords>PERMIT</keywords>
+	<keywords>PI</keywords>
+	<keywords>PIPE</keywords>
+	<keywords>PLAN</keywords>
+	<keywords>PLI</keywords>
+	<keywords>POSITION</keywords>
+	<keywords>POWER</keywords>
+	<keywords>PRECISION</keywords>
+	<keywords>PREFIX</keywords>
+	<keywords>PREORDER</keywords>
+	<keywords>PREPARE</keywords>
+	<keywords>PRESERVE</keywords>
+	<keywords>PRIMARY</keywords>
+	<keywords>PRINT</keywords>
+	<keywords>PRINTSCREEN</keywords>
+	<keywords>PRIOR</keywords>
+	<keywords>PRIQTY</keywords>
+	<keywords>PRIVATE</keywords>
+	<keywords>PRIVILEGES</keywords>
+	<keywords>PROC</keywords>
+	<keywords>PROCEDURE</keywords>
+	<keywords>PROCESSEXIT</keywords>
+	<keywords>PROFILE</keywords>
+	<keywords>PROGRAM</keywords>
+	<keywords>PROMPT</keywords>
+	<keywords>PUBLIC</keywords>
+	<keywords>PUTFORM</keywords>
+	<keywords>PUTOPER</keywords>
+	<keywords>PUTROW</keywords>
+	<keywords>QUALIFICATION</keywords>
+	<keywords>QUARTER</keywords>
+	<keywords>QUOTA</keywords>
+	<keywords>RADIANS</keywords>
+	<keywords>RAISE</keywords>
+	<keywords>RAISERROR</keywords>
+	<keywords>RAND</keywords>
+	<keywords>RANGE</keywords>
+	<keywords>RAW</keywords>
+	<keywords>READ</keywords>
+	<keywords>READS</keywords>
+	<keywords>READTEXT</keywords>
+	<keywords>REAL</keywords>
+	<keywords>RECURSIVE</keywords>
+	<keywords>REF</keywords>
+	<keywords>RECONFIGURE</keywords>
+	<keywords>RECORD</keywords>
+	<keywords>RECOVER</keywords>
+	<keywords>REDISPLAY</keywords>
+	<keywords>REFERENCES</keywords>
+	<keywords>REFERENCING</keywords>
+	<keywords>RELATIVE</keywords>
+	<keywords>REGISTER</keywords>
+	<keywords>RELEASE</keywords>
+	<keywords>RELOCATE</keywords>
+	<keywords>REMAINDER</keywords>
+	<keywords>REMOVE</keywords>
+	<keywords>RENAME</keywords>
+	<keywords>REPEAT</keywords>
+	<keywords>REPEATABLE</keywords>
+	<keywords>REPEATED</keywords>
+	<keywords>REPLACE</keywords>
+	<keywords>REPLICATE</keywords>
+	<keywords>REPLICATION</keywords>
+	<keywords>RESET</keywords>
+	<keywords>RESETLOGS</keywords>
+	<keywords>RESOURCE</keywords>
+	<keywords>RESTORE</keywords>
+	<keywords>RESTRICT</keywords>
+	<keywords>RESULT</keywords>
+	<keywords>RESTRICTED</keywords>
+	<keywords>RESUME</keywords>
+	<keywords>RETRIEVE</keywords>
+	<keywords>RETURN</keywords>
+	<keywords>RETURNS</keywords>
+	<keywords>REUSE</keywords>
+	<keywords>REVOKE</keywords>
+	<keywords>RIGHT</keywords>
+	<keywords>ROBIN</keywords>
+	<keywords>ROLE</keywords>
+	<keywords>ROLES</keywords>
+	<keywords>ROLLBACK</keywords>
+	<keywords>ROLLUP</keywords>
+	<keywords>ROUTINE</keywords>
+	<keywords>ROW</keywords>
+	<keywords>ROWS</keywords>
+	<keywords>ROWCOUNT</keywords>
+	<keywords>ROWGUIDCOL</keywords>
+	<keywords>ROWID</keywords>
+	<keywords>ROWIDS</keywords>
+	<keywords>ROWIDTOCHAR</keywords>
+	<keywords>ROWLABEL</keywords>
+	<keywords>ROWNUM</keywords>
+	<keywords>ROWS</keywords>
+	<keywords>RPAD</keywords>
+	<keywords>RRN</keywords>
+	<keywords>RTRIM</keywords>
+	<keywords>RULE</keywords>
+	<keywords>RUN</keywords>
+	<keywords>RUNTIMESTATISTICS</keywords>
+	<keywords>SAVE</keywords>
+	<keywords>SAVEPOINT</keywords>
+	<keywords>SCHEDULE</keywords>
+	<keywords>SCHEMA</keywords>
+	<keywords>SCN</keywords>
+	<keywords>SCREEN</keywords>
+	<keywords>SCROLL</keywords>
+	<keywords>SCOPE</keywords>
+	<keywords>SEARCH</keywords>
+	<keywords>SCROLLDOWN</keywords>
+	<keywords>SCROLLUP</keywords>
+	<keywords>SECOND</keywords>
+	<keywords>SECONDS</keywords>
+	<keywords>SECQTY</keywords>
+	<keywords>SECTION</keywords>
+	<keywords>SEGMENT</keywords>
+	<keywords>SELECT</keywords>
+	<keywords>SEQUENCE</keywords>
+	<keywords>SERIALIZABLE</keywords>
+	<keywords>SERVICE</keywords>
+	<keywords>SESSION</keywords>
+	<keywords>SESSION_USER</keywords>
+	<keywords>SET</keywords>
+	<keywords>SETS</keywords>
+	<keywords>SETUSER</keywords>
+	<keywords>SIN</keywords>
+	<keywords>SIMPLE</keywords>
+	<keywords>SIGN</keywords>
+	<keywords>SHUTDOWN</keywords>
+	<keywords>SHORT</keywords>
+	<keywords>SHARE</keywords>
+	<keywords>SHARED</keywords>
+	<keywords>SETUSER</keywords>
+	<keywords>SIZE</keywords>
+	<keywords>SLEEP</keywords>
+	<keywords>SMALLINT</keywords>
+	<keywords>SNAPSHOT</keywords>
+	<keywords>SOME</keywords>
+	<keywords>SORT</keywords>
+	<keywords>SOUNDEX</keywords>
+	<keywords>SPACE</keywords>
+	<keywords>SPECIFIC</keywords>
+	<keywords>SPECIFICTYPE</keywords>
+	<keywords>SQL</keywords>
+	<keywords>SQLEXCEPTION</keywords>
+	<keywords>SQLBUF</keywords>
+	<keywords>SQLCA</keywords>
+	<keywords>SQLCODE</keywords>
+	<keywords>SQLERROR</keywords>
+	<keywords>SQLSTATE</keywords>
+	<keywords>SQLWARNING</keywords>
+	<keywords>SQRT</keywords>
+	<keywords>START</keywords>
+	<keywords>STATE</keywords>
+	<keywords>STATEMENT</keywords>
+	<keywords>STATIC</keywords>
+	<keywords>STRUCTURE</keywords>
+	<keywords>STATISTICS</keywords>
+	<keywords>STOGROUP</keywords>
+	<keywords>STOP</keywords>
+	<keywords>STORAGE</keywords>
+	<keywords>STORPOOL</keywords>
+	<keywords>SUBMENU</keywords>
+	<keywords>SUBPAGES</keywords>
+	<keywords>SUBSTR</keywords>
+	<keywords>SUBSTRING</keywords>
+	<keywords>SUCCESSFUL</keywords>
+	<keywords>SUFFIX</keywords>
+	<keywords>SUM</keywords>
+	<keywords>SYSTEM_USER</keywords>
+	<keywords>SUMU</keywords>
+	<keywords>SWITCH</keywords>
+	<keywords>SYNONYM</keywords>
+	<keywords>SYSCAT</keywords>
+	<keywords>SYSDATE</keywords>
+	<keywords>SYSFUN</keywords>
+	<keywords>SYSIBM</keywords>
+	<keywords>SYSSTAT</keywords>
+	<keywords>SYSTEM</keywords>
+	<keywords>SYSTIME</keywords>
+	<keywords>SYSTIMESTAMP</keywords>
+	<keywords>TABLE</keywords>
+	<keywords>TABLEDATA</keywords>
+	<keywords>TABLES</keywords>
+	<keywords>TABLESPACE</keywords>
+	<keywords>TAN</keywords>
+	<keywords>TAPE</keywords>
+	<keywords>TEMP</keywords>
+	<keywords>TEMPORARY</keywords>
+	<keywords>TERMINATE</keywords>
+	<keywords>THAN</keywords>
+	<keywords>TEXTSIZE</keywords>
+	<keywords>THEN</keywords>
+	<keywords>THREAD</keywords>
+	<keywords>TIME</keywords>
+	<keywords>TIMEOUT</keywords>
+	<keywords>TIMESTAMP</keywords>
+	<keywords>TIMEZONE_HOUR</keywords>
+	<keywords>TIMEZONE_MINUTE</keywords>
+	<keywords>TINYINT</keywords>
+	<keywords>TO</keywords>
+	<keywords>TOP</keywords>
+	<keywords>TPE</keywords>
+	<keywords>TRACING</keywords>
+	<keywords>TRAILING</keywords>
+	<keywords>TRAN</keywords>
+	<keywords>TRANSACTION</keywords>
+	<keywords>TRANSLATE</keywords>
+	<keywords>TRANSLATION</keywords>
+	<keywords>TREAT</keywords>
+	<keywords>TRIGGER</keywords>
+	<keywords>TRIGGERS</keywords>
+	<keywords>TRIM</keywords>
+	<keywords>TRUE</keywords>
+	<keywords>TRUNCATE</keywords>
+	<keywords>TSEQUAL</keywords>
+	<keywords>TYPE</keywords>
+	<keywords>UID</keywords>
+	<keywords>UNCOMMITTED</keywords>
+	<keywords>UNDER</keywords>
+	<keywords>UNION</keywords>
+	<keywords>UNIQUE</keywords>
+	<keywords>UNKNOWN</keywords>
+	<keywords>UNNEST</keywords>
+	<keywords>UNLIMITED</keywords>
+	<keywords>UNLOADTABLE</keywords>
+	<keywords>UNSIGNED</keywords>
+	<keywords>UNTIL</keywords>
+	<keywords>UP</keywords>
+	<keywords>UPDATE</keywords>
+	<keywords>UPDATETEXT</keywords>
+	<keywords>UPPER</keywords>
+	<keywords>USAGE</keywords>
+	<keywords>USE</keywords>
+	<keywords>USER</keywords>
+	<keywords>USING</keywords>
+	<keywords>UUID</keywords>
+	<keywords>VALIDATE</keywords>
+	<keywords>VALIDPROC</keywords>
+	<keywords>VALIDROW</keywords>
+	<keywords>VALUE</keywords>
+	<keywords>VALUES</keywords>
+	<keywords>VARBINARY</keywords>
+	<keywords>VARCHAR</keywords>
+	<keywords>VARIABLE</keywords>
+	<keywords>VARIABLES</keywords>
+	<keywords>VARYING</keywords>
+	<keywords>VCAT</keywords>
+	<keywords>VERCOLS</keywords>
+	<keywords>VERSION</keywords>
+	<keywords>VIEW</keywords>
+	<keywords>VOLUMES</keywords>
+	<keywords>WAITFOR</keywords>
+	<keywords>WEEK</keywords>
+	<keywords>WHEN</keywords>
+	<keywords>WHENEVER</keywords>
+	<keywords>WHERE</keywords>
+	<keywords>WHILE</keywords>
+	<keywords>WITH</keywords>
+	<keywords>WITHOUT</keywords>
+	<keywords>WORK</keywords>
+	<keywords>WRITE</keywords>
+	<keywords>WRITETEXT</keywords>
+	<keywords>YEAR</keywords>
+	<keywords>YEARS</keywords>
+	<keywords>ZONE</keywords>
+  </SQLSyntaxDefinition>
+</DBDefinition:DatabaseVendorDefinition>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/runtime/vendors/Informix_9.4/Informix_9.4.xmi b/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/runtime/vendors/Informix_9.4/Informix_9.4.xmi
new file mode 100644
index 0000000..5091b60
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition/runtime/vendors/Informix_9.4/Informix_9.4.xmi
@@ -0,0 +1,973 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="Informix" version="9.4" maximumIdentifierLength="128" 
+viewTriggerSupported="true" maximumCommentLength="64" sequenceSupported="true" userDefinedTypeSupported="true" roleSupported="true" roleAuthorizationSupported="true" userSupported="true">
+  <predefinedDataTypeDefinitions xmi:id="BOOLEAN_1" primitiveType="BOOLEAN" jdbcEnumType="16" javaClassName="boolean">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BOOLEAN</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_1" lengthSupported="true" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="32767" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>DBSERVERNAME</defaultValueTypes>
+    <defaultValueTypes>SITENAME</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="32767" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>DBSERVERNAME</defaultValueTypes>
+    <defaultValueTypes>SITENAME</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" lengthSupported="true" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_2" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.sql.Clob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="255" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>DBSERVERNAME</defaultValueTypes>
+    <defaultValueTypes>SITENAME</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR</name>
+    <name>CHARACTER VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" maximumLength="32672" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>DBSERVERNAME</defaultValueTypes>
+    <defaultValueTypes>SITENAME</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NVARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_2" lengthSupported="true" maximumLength="32739" primitiveType="CHARACTER_VARYING" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LVARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">
+    <defaultValueTypes>TODAY</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" scaleSupported="true" precisionSupported="true" maximumPrecision="32" keyConstraintSupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_2" scaleSupported="true" precisionSupported="true" maximumPrecision="32" keyConstraintSupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>MONEY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE PRECISION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" keyConstraintSupported="true" primitiveType="FLOAT" jdbcEnumType="6" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INTEGER</name>
+    <name>INT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTERVAL_1" keyConstraintSupported="true" displayNameSupported="true" displayName="INTERVAL {0} TO {1}" leadingFieldQualifierSupported="true" trailingFieldQualifierSupported="true" fieldQualifierSeparator=" TO " defaultLeadingFieldQualifierDefinition="L_YEAR" defaultTrailingFieldQualifierDefinition="T_MONTH" primitiveType="INTERVAL">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <leadingFieldQualifierDefinition xmi:id="L_YEAR" name="YEAR" precisionSupported="true" maximumPrecision="9" defaultPrecision="4" validTrailingFieldQualifierDefinitions="T_YEAR T_MONTH"/>
+    <leadingFieldQualifierDefinition xmi:id="L_MONTH" name="MONTH" precisionSupported="true" maximumPrecision="9" defaultPrecision="2" validTrailingFieldQualifierDefinitions="T_MONTH"/>
+    <leadingFieldQualifierDefinition xmi:id="L_DAY" name="DAY" precisionSupported="true" maximumPrecision="9" defaultPrecision="2" validTrailingFieldQualifierDefinitions="T_DAY T_HOUR T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_HOUR" name="HOUR" precisionSupported="true" maximumPrecision="9" defaultPrecision="2" validTrailingFieldQualifierDefinitions="T_HOUR T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_MINUTE" name="MINUTE" precisionSupported="true" maximumPrecision="9" defaultPrecision="2" validTrailingFieldQualifierDefinitions="T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_SECOND" name="SECOND" precisionSupported="true" maximumPrecision="9" defaultPrecision="2" validTrailingFieldQualifierDefinitions="T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_FRACTION" name="FRACTION" validTrailingFieldQualifierDefinitions="T_FRACTION"/>
+    <trailingFieldQualifierDefinition xmi:id="T_YEAR" name="YEAR" precisionSupported="true" maximumPrecision="9" defaultPrecision="2"/>
+    <trailingFieldQualifierDefinition xmi:id="T_MONTH" name="MONTH" precisionSupported="true" maximumPrecision="9" defaultPrecision="2"/>
+    <trailingFieldQualifierDefinition xmi:id="T_DAY" name="DAY" precisionSupported="true" maximumPrecision="9" defaultPrecision="2"/>
+    <trailingFieldQualifierDefinition xmi:id="T_HOUR" name="HOUR" precisionSupported="true" maximumPrecision="9" defaultPrecision="2"/>
+    <trailingFieldQualifierDefinition xmi:id="T_MINUTE" name="MINUTE" precisionSupported="true" maximumPrecision="9" defaultPrecision="2"/>
+    <trailingFieldQualifierDefinition xmi:id="T_SECOND" name="SECOND" precisionSupported="true" maximumPrecision="9" defaultPrecision="2"/>
+    <trailingFieldQualifierDefinition xmi:id="T_FRACTION" name="FRACTION" precisionSupported="true" maximumPrecision="5" defaultPrecision="3"/>
+   <name>INTERVAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" keyConstraintSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+    <name>NUM</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLFLOAT</name>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" displayNameSupported="true" displayName="DATETIME {0} TO {1}" leadingFieldQualifierSupported="true" trailingFieldQualifierSupported="true" fieldQualifierSeparator=" TO " defaultLeadingFieldQualifierDefinition="L_YEAR" defaultTrailingFieldQualifierDefinition="T_MONTH" primitiveType="INTERVAL" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <defaultValueTypes>CURRENT</defaultValueTypes>
+    <leadingFieldQualifierDefinition xmi:id="L_YEAR" name="YEAR" validTrailingFieldQualifierDefinitions="T_YEAR T_MONTH T_DAY T_HOUR T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_MONTH" name="MONTH" validTrailingFieldQualifierDefinitions="T_MONTH T_DAY T_HOUR T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_DAY" name="DAY" validTrailingFieldQualifierDefinitions="T_DAY T_HOUR T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_HOUR" name="HOUR" validTrailingFieldQualifierDefinitions="T_HOUR T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_MINUTE" name="MINUTE" validTrailingFieldQualifierDefinitions="T_MINUTE T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_SECOND" name="SECOND" validTrailingFieldQualifierDefinitions="T_SECOND T_FRACTION"/>
+    <leadingFieldQualifierDefinition xmi:id="L_FRACTION" name="FRACTION" validTrailingFieldQualifierDefinitions="T_FRACTION"/>
+    <trailingFieldQualifierDefinition xmi:id="T_YEAR" name="YEAR"/>
+    <trailingFieldQualifierDefinition xmi:id="T_MONTH" name="MONTH"/>
+    <trailingFieldQualifierDefinition xmi:id="T_DAY" name="DAY"/>
+    <trailingFieldQualifierDefinition xmi:id="T_HOUR" name="HOUR"/>
+    <trailingFieldQualifierDefinition xmi:id="T_MINUTE" name="MINUTE"/>
+    <trailingFieldQualifierDefinition xmi:id="T_SECOND" name="SECOND"/>
+    <trailingFieldQualifierDefinition xmi:id="T_FRACTION" name="FRACTION" precisionSupported="true" maximumPrecision="5" defaultPrecision="3"/>
+   <name>DATETIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_2" keyConstraintSupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SERIAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_1" keyConstraintSupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="long">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INT8</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_2" keyConstraintSupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="long">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SERIAL8</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" keyConstraintSupported="true" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BYTE</name>
+  </predefinedDataTypeDefinitions>
+  <tableSpaceDefinition typeSupported="true" extentSizeSupported="true" prefetchSizeSupported="true" managedBySupported="true" pageSizeSupported="true" bufferPoolSupported="true">
+    <tableSpaceType>REGULAR</tableSpaceType>
+    <tableSpaceType>TEMPORARY</tableSpaceType>
+    <tableSpaceType>LARGE</tableSpaceType>
+  </tableSpaceDefinition>
+  <storedProcedureDefinition maximumIdentifierLength="128" nullInputActionSupported="true" determininsticSupported="true" returnedNullSupported="true" parameterStyleSupported="true">
+    <languageType>SQL</languageType>
+    <languageType>JAVA</languageType>
+    <languageType>C</languageType>
+    <languageType>COBOL</languageType>
+    <languageType>ASSEMBLY</languageType>
+    <languageType>PLI</languageType>
+    <procedureType>PROCEDURE</procedureType>
+    <procedureType>FUNCTION</procedureType>
+    <functionLanguageType>SQL</functionLanguageType>
+    <functionLanguageType>JAVA</functionLanguageType>
+    <functionLanguageType>C</functionLanguageType>
+  </storedProcedureDefinition>
+  <triggerDefinition maximumIdentifierLength="128" whenClauseSupported="true" granularitySupported="true" referencesClauseSupported="true" perColumnUpdateTriggerSupported="true" rowTriggerReferenceSupported="true" tableTriggerReferenceSupported="true"/>
+  <columnDefinition maximumIdentifierLength="128" identitySupported="true" computedSupported="false"/>
+  <constraintDefinition  maximumPrimaryKeyIdentifierLength="128" maximumForeignKeyIdentifierLength="128" maximumCheckConstraintIdentifierLength="128" clusteredPrimaryKeySupported="true" clusteredUniqueConstraintSupported="true" uniqueKeyNullable="true">
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+    <checkOption>NONE</checkOption>
+    <checkOption>LOCAL</checkOption>
+    <checkOption>CASCADE</checkOption>
+  </constraintDefinition>
+  <queryDefinition hostVariableMarker=":"/>
+  <indexDefinition maximumIdentifierLength="128" clusteringSupported="true"/>
+  <viewDefinition maximumIdentifierLength="128"/>
+  <tableDefinition maximumIdentifierLength="128"/>
+  <schemaDefinition maximumIdentifierLength="128"/>
+    <privilegedElementDefinitions name="Database">
+  	<privilegeDefinitions name="CONNECT"/>
+	<privilegeDefinitions name="RESOURCE"/>
+	<privilegeDefinitions name="DBA"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="PersistentTable">
+  	<privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INDEX"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="REFERENCES" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="SELECT" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="UNDER"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="ViewTable">
+  	<privilegeDefinitions name="ALTER"/>
+    <privilegeDefinitions name="DELETE"/>
+    <privilegeDefinitions name="INSERT"/>
+    <privilegeDefinitions name="SELECT" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="UPDATE" actionElementDefinitions="COLUMN_1"/>
+    <privilegeDefinitions name="UNDER"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions xmi:id="COLUMN_1" name="Column"/>
+  <privilegedElementDefinitions name="Routine">
+  	<privilegeDefinitions name="EXECUTE"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="Sequence">
+  	<privilegeDefinitions name="ALTER"/>
+  	<privilegeDefinitions name="SELECT"/>
+  </privilegedElementDefinitions>
+  <privilegedElementDefinitions name="UserDefinedType">
+  	<privilegeDefinitions name="USAGE"/>
+  	<privilegeDefinitions name="UNDER"/>
+  </privilegedElementDefinitions>
+  <SQLSyntaxDefinition>
+      <keywords>A</keywords>
+	<keywords>ABORT</keywords>
+	<keywords>ABS</keywords>
+	<keywords>ABSOLUTE</keywords>
+	<keywords>ACCESS</keywords>
+	<keywords>ACOS</keywords>
+	<keywords>ACQUIRE</keywords>
+	<keywords>ACTION</keywords>
+	<keywords>ACTIVATE</keywords>
+	<keywords>ADA</keywords>
+	<keywords>ADD</keywords>
+	<keywords>ADDFORM</keywords>
+	<keywords>ADMIN</keywords>
+	<keywords>AFTER</keywords>
+	<keywords>AGGREGATE</keywords>
+	<keywords>ALIAS</keywords>
+	<keywords>ALL</keywords>
+	<keywords>ALLOCATE</keywords>
+	<keywords>ALTER</keywords>
+	<keywords>AN</keywords>
+	<keywords>ANALYZE</keywords>
+	<keywords>AND</keywords>
+	<keywords>ANY</keywords>
+	<keywords>APPEND</keywords>
+	<keywords>ARCHIVE</keywords>
+	<keywords>ARCHIVELOG</keywords>
+	<keywords>ARE</keywords>
+	<keywords>ARRAY</keywords>
+	<keywords>ARRAYLEN</keywords>
+	<keywords>AS</keywords>
+	<keywords>ASC</keywords>
+	<keywords>ASCII</keywords>
+	<keywords>ASIN</keywords>
+	<keywords>ASSERTION</keywords>
+	<keywords>AT</keywords>
+	<keywords>ATAN</keywords>
+	<keywords>AUDIT</keywords>
+	<keywords>AUTHORIZATION</keywords>
+	<keywords>AVG</keywords>
+	<keywords>AVGU</keywords>
+	<keywords>BACKUP</keywords>
+	<keywords>BECOME</keywords>
+	<keywords>BEFORE</keywords>
+	<keywords>BEGIN</keywords>
+	<keywords>BETWEEN</keywords>
+	<keywords>BIGINT</keywords>
+	<keywords>BINARY</keywords>
+	<keywords>BIND</keywords>
+	<keywords>BINDING</keywords>
+	<keywords>BIT</keywords>
+	<keywords>BLOB</keywords>
+	<keywords>BLOCK</keywords>
+	<keywords>BODY</keywords>
+	<keywords>BOOLEAN</keywords>
+	<keywords>BOTH</keywords>
+	<keywords>BREADTH</keywords>
+	<keywords>BREAK</keywords>
+	<keywords>BREAKDISPLAY</keywords>
+	<keywords>BROWSE</keywords>
+	<keywords>BUFFERPOOL</keywords>
+	<keywords>BULK</keywords>
+	<keywords>BY</keywords>
+	<keywords>BYREF</keywords>
+	<keywords>CACHE</keywords>
+	<keywords>CALL</keywords>
+	<keywords>CALLPROC</keywords>
+	<keywords>CANCEL</keywords>
+	<keywords>CAPTURE</keywords>
+	<keywords>CASCADE</keywords>
+	<keywords>CASCADED</keywords>
+	<keywords>CASE</keywords>
+	<keywords>CAST</keywords>
+	<keywords>CATALOG</keywords>
+	<keywords>CCSID</keywords>
+	<keywords>CEILING</keywords>
+	<keywords>CHANGE</keywords>
+	<keywords>CHAR</keywords>
+	<keywords>CHARACTER</keywords>
+	<keywords>CHARTOROWID</keywords>
+	<keywords>CHECK</keywords>
+	<keywords>CLASS</keywords>
+	<keywords>CLOB</keywords>
+	<keywords>CHECKPOINT</keywords>
+	<keywords>CHR</keywords>
+	<keywords>CLEANUP</keywords>
+	<keywords>CLEAR</keywords>
+	<keywords>CLEARROW</keywords>
+	<keywords>CLOSE</keywords>
+	<keywords>CLUSTER</keywords>
+	<keywords>CLUSTERED</keywords>
+	<keywords>COALESCE</keywords>
+	<keywords>COBOL</keywords>
+	<keywords>COLGROUP</keywords>
+	<keywords>COLLATE</keywords>
+	<keywords>COLLATION</keywords>
+	<keywords>COLLECTION</keywords>
+	<keywords>COLUMN</keywords>
+	<keywords>COMMAND</keywords>
+	<keywords>COMMENT</keywords>
+	<keywords>COMMIT</keywords>
+	<keywords>COMPLETION</keywords>
+	<keywords>COMMITTED</keywords>
+	<keywords>COMPILE</keywords>
+	<keywords>COMPLEX</keywords>
+	<keywords>COMPRESS</keywords>
+	<keywords>COMPUTE</keywords>
+	<keywords>CONCAT</keywords>
+	<keywords>CONFIRM</keywords>
+	<keywords>CONNECT</keywords>
+	<keywords>CONNECTION</keywords>
+	<keywords>CONSTRAINT</keywords>
+	<keywords>CONSTRAINTS</keywords>
+	<keywords>CONSTRUCTOR</keywords>
+	<keywords>CONTAINS</keywords>
+	<keywords>CONTAINSTABLE</keywords>
+	<keywords>CONTENTS</keywords>
+	<keywords>CONTINUE</keywords>
+	<keywords>CONTROLFILE</keywords>
+	<keywords>CONTROLROW</keywords>
+	<keywords>CONVERT</keywords>
+	<keywords>COPY</keywords>
+	<keywords>CORRESPONDING</keywords>
+	<keywords>COS</keywords>
+	<keywords>COUNT</keywords>
+	<keywords>COUNTU</keywords>
+	<keywords>CRCOLS</keywords>
+	<keywords>CREATE</keywords>
+	<keywords>CROSS</keywords>
+	<keywords>CUBE</keywords>
+	<keywords>CURRENT</keywords>
+	<keywords>CURRENT_DATE</keywords>
+	<keywords>CURRENT_PATH</keywords>
+	<keywords>CURRENT_ROLE</keywords>
+	<keywords>CURRENT_TIME</keywords>
+	<keywords>CURRENT_TIMESTAMP</keywords>
+	<keywords>CURRENT_USER</keywords>
+	<keywords>CURSOR</keywords>
+	<keywords>CVAR</keywords>
+	<keywords>CYCLE</keywords>
+	<keywords>DATA</keywords>
+	<keywords>DATABASE</keywords>
+	<keywords>DATAFILE</keywords>
+	<keywords>DATAHANDLER</keywords>
+	<keywords>DATAPAGES</keywords>
+	<keywords>DATE</keywords>
+	<keywords>DAY</keywords>
+	<keywords>DAYOFMONTH</keywords>
+	<keywords>DAYOFWEEK</keywords>
+	<keywords>DAYOFYEAR</keywords>
+	<keywords>DAYS</keywords>
+	<keywords>DBA</keywords>
+	<keywords>DBCC</keywords>
+	<keywords>DBSPACE</keywords>
+	<keywords>DEALLOCATE</keywords>
+	<keywords>DEC</keywords>
+	<keywords>DECIMAL</keywords>
+	<keywords>DECLARATION</keywords>
+	<keywords>DECLARE</keywords>
+	<keywords>DECODE</keywords>
+	<keywords>DEFAULT</keywords>
+	<keywords>DEFERRABLE</keywords>
+	<keywords>DEFERRED</keywords>
+	<keywords>DEFINE</keywords>
+	<keywords>DEFINITION</keywords>
+	<keywords>DEGREES</keywords>
+	<keywords>DELETE</keywords>
+	<keywords>DEPTH</keywords>
+	<keywords>DEREF</keywords>
+	<keywords>DELETEROW</keywords>
+	<keywords>DENY</keywords>
+	<keywords>DESC</keywords>
+	<keywords>DESCRIBE</keywords>
+	<keywords>DESCRIPTOR</keywords>
+	<keywords>DESTROY</keywords>
+	<keywords>DHTYPE</keywords>
+	<keywords>DESTRUCTOR</keywords>
+	<keywords>DETERMINISTIC</keywords>
+	<keywords>DICTIONARY</keywords>
+	<keywords>DIAGNOSTICS</keywords>
+	<keywords>DIRECT</keywords>
+	<keywords>DISABLE</keywords>
+	<keywords>DISABLED</keywords>
+	<keywords>DISCONNECT</keywords>
+	<keywords>DISK</keywords>
+	<keywords>DISMOUNT</keywords>
+	<keywords>DISPLAY</keywords>
+	<keywords>DISTINCT</keywords>
+	<keywords>DISTRIBUTE</keywords>
+	<keywords>DISTRIBUTED</keywords>
+	<keywords>DO</keywords>
+	<keywords>DOMAIN</keywords>
+	<keywords>DOUBLE</keywords>
+	<keywords>DOWN</keywords>
+	<keywords>DROP</keywords>
+	<keywords>DUMMY</keywords>
+	<keywords>DUMP</keywords>
+	<keywords>DYNAMIC</keywords>
+	<keywords>EACH</keywords>
+	<keywords>EDITPROC</keywords>
+	<keywords>ELSE</keywords>
+	<keywords>ELSEIF</keywords>
+	<keywords>ENABLE</keywords>
+	<keywords>END</keywords>
+	<keywords>ENDDATA</keywords>
+	<keywords>ENDDISPLAY</keywords>
+	<keywords>ENDEXEC</keywords>
+	<keywords>END-EXEC</keywords>
+	<keywords>ENDFORMS</keywords>
+	<keywords>ENDIF</keywords>
+	<keywords>ENDLOOP</keywords>
+	<keywords>EQUALS</keywords>
+	<keywords>ENDSELECT</keywords>
+	<keywords>ENDWHILE</keywords>
+	<keywords>ERASE</keywords>
+	<keywords>ERRLVL</keywords>
+	<keywords>ERROREXIT</keywords>
+	<keywords>ESCAPE</keywords>
+	<keywords>EVENTS</keywords>
+	<keywords>EVERY</keywords>
+	<keywords>EXCEPT</keywords>
+	<keywords>EXCEPTION</keywords>
+	<keywords>EXCEPTIONS</keywords>
+	<keywords>EXCLUDE</keywords>
+	<keywords>EXCLUDING</keywords>
+	<keywords>EXCLUSIVE</keywords>
+	<keywords>EXEC</keywords>
+	<keywords>EXECUTE</keywords>
+	<keywords>EXISTS</keywords>
+	<keywords>EXIT</keywords>
+	<keywords>EXP</keywords>
+	<keywords>EXPLAIN</keywords>
+	<keywords>EXPLICIT</keywords>
+	<keywords>EXPRESSION</keywords>
+	<keywords>EXTENT</keywords>
+	<keywords>EXTERNAL</keywords>
+	<keywords>EXTERNALLY</keywords>
+	<keywords>EXTRACT</keywords>
+	<keywords>FALSE</keywords>
+	<keywords>FETCH</keywords>
+	<keywords>FIELD</keywords>
+	<keywords>FIELDPROC</keywords>
+	<keywords>FILE</keywords>
+	<keywords>FILLFACTOR</keywords>
+	<keywords>FILTERING</keywords>
+	<keywords>FINALIZE</keywords>
+	<keywords>FINALIZE</keywords>
+	<keywords>FIRST</keywords>
+	<keywords>FLOAT</keywords>
+	<keywords>FLOOR</keywords>
+	<keywords>FLOPPY</keywords>
+	<keywords>FLUSH</keywords>
+	<keywords>FOR</keywords>
+	<keywords>FORCE</keywords>
+	<keywords>FORMDATA</keywords>
+	<keywords>FORMINIT</keywords>
+	<keywords>FORMS</keywords>
+	<keywords>FORTRAN</keywords>
+	<keywords>FOREIGN</keywords>
+	<keywords>FOUND</keywords>
+	<keywords>FRAGMENT</keywords>
+	<keywords>FREELIST</keywords>
+	<keywords>FREELISTS</keywords>
+	<keywords>FREETEXT</keywords>
+	<keywords>FREETEXTTABLE</keywords>
+	<keywords>FROM</keywords>
+	<keywords>FREE</keywords>
+	<keywords>FULL</keywords>
+	<keywords>FUNCTION</keywords>
+	<keywords>GENERAL</keywords>
+	<keywords>GET</keywords>
+	<keywords>GETCURRENTCONNECTION</keywords>
+	<keywords>GETFORM</keywords>
+	<keywords>GETOPER</keywords>
+	<keywords>GETROW</keywords>
+	<keywords>GLOBAL</keywords>
+	<keywords>GO</keywords>
+	<keywords>GOTO</keywords>
+	<keywords>GRANT</keywords>
+	<keywords>GRANTED</keywords>
+	<keywords>GRAPHIC</keywords>
+	<keywords>GREATEST</keywords>
+	<keywords>GROUP</keywords>
+	<keywords>GROUPING</keywords>
+	<keywords>GROUPS</keywords>
+	<keywords>HASH</keywords>
+	<keywords>HAVING</keywords>
+	<keywords>HOST</keywords>
+	<keywords>HELP</keywords>
+	<keywords>HELPFILE</keywords>
+	<keywords>HOLDLOCK</keywords>
+	<keywords>HOUR</keywords>
+	<keywords>HOURS</keywords>
+	<keywords>IDENTIFIED</keywords>
+	<keywords>IDENTITY</keywords>
+	<keywords>IGNORE</keywords>
+	<keywords>IDENTITYCOL</keywords>
+	<keywords>IF</keywords>
+	<keywords>IFNULL</keywords>
+	<keywords>IIMESSAGE</keywords>
+	<keywords>IIPRINTF</keywords>
+	<keywords>IMMEDIATE</keywords>
+	<keywords>IMPORT</keywords>
+	<keywords>IN</keywords>
+	<keywords>INCLUDE</keywords>
+	<keywords>INCLUDING</keywords>
+	<keywords>INCREMENT</keywords>
+	<keywords>INDEX</keywords>
+	<keywords>INDEXPAGES</keywords>
+	<keywords>INDICATOR</keywords>
+	<keywords>INITCAP</keywords>
+	<keywords>INITIAL</keywords>
+	<keywords>INITIALIZE</keywords>
+	<keywords>INITIALLY</keywords>
+	<keywords>INITRANS</keywords>
+	<keywords>INITTABLE</keywords>
+	<keywords>INNER</keywords>
+	<keywords>INOUT</keywords>
+	<keywords>INPUT</keywords>
+	<keywords>INSENSITIVE</keywords>
+	<keywords>INSERT</keywords>
+	<keywords>INSERTROW</keywords>
+	<keywords>INSTANCE</keywords>
+	<keywords>INSTR</keywords>
+	<keywords>INT</keywords>
+	<keywords>INTEGER</keywords>
+	<keywords>INTEGRITY</keywords>
+	<keywords>INTERFACE</keywords>
+	<keywords>INTERSECT</keywords>
+	<keywords>INTERVAL</keywords>
+	<keywords>INTO</keywords>
+	<keywords>IS</keywords>
+	<keywords>ISOLATION</keywords>
+	<keywords>ITERATE</keywords>
+	<keywords>JOIN</keywords>
+	<keywords>KEY</keywords>
+	<keywords>KILL</keywords>
+	<keywords>LABEL</keywords>
+	<keywords>LANGUAGE</keywords>
+	<keywords>LARGE</keywords>
+	<keywords>LAST</keywords>
+	<keywords>LATERAL</keywords>
+	<keywords>LAYER</keywords>
+	<keywords>LEADING</keywords>
+	<keywords>LEAST</keywords>
+	<keywords>LEFT</keywords>
+	<keywords>LESS</keywords>
+	<keywords>LENGTH</keywords>
+	<keywords>LEVEL</keywords>
+	<keywords>LIKE</keywords>
+	<keywords>LIMIT</keywords>
+	<keywords>LINENO</keywords>
+	<keywords>LINK</keywords>
+	<keywords>LIST</keywords>
+	<keywords>LISTS</keywords>
+	<keywords>LOAD</keywords>
+	<keywords>LOADTABLE</keywords>
+	<keywords>LOCAL</keywords>
+	<keywords>LOCALTIME</keywords>
+	<keywords>LOCALTIMESTAMP</keywords>
+	<keywords>LOCATOR</keywords>
+	<keywords>LOCATE</keywords>
+	<keywords>LOCK</keywords>
+	<keywords>LOCKSIZE</keywords>
+	<keywords>LOG</keywords>
+	<keywords>LOGFILE</keywords>
+	<keywords>LONG</keywords>
+	<keywords>LONGINT</keywords>
+	<keywords>LOWER</keywords>
+	<keywords>LPAD</keywords>
+	<keywords>LTRIM</keywords>
+	<keywords>LVARBINARY</keywords>
+	<keywords>LVARCHAR</keywords>
+	<keywords>MAIN</keywords>
+	<keywords>MANAGE</keywords>
+	<keywords>MANUAL</keywords>
+	<keywords>MAP</keywords>
+	<keywords>MATCH</keywords>
+	<keywords>MAX</keywords>
+	<keywords>MAXDATAFILES</keywords>
+	<keywords>MAXEXTENTS</keywords>
+	<keywords>MAXINSTANCES</keywords>
+	<keywords>MAXLOGFILES</keywords>
+	<keywords>MAXLOGHISTORY</keywords>
+	<keywords>MAXLOGMEMBERS</keywords>
+	<keywords>MAXTRANS</keywords>
+	<keywords>MAXVALUE</keywords>
+	<keywords>MENUITEM</keywords>
+	<keywords>MESSAGE</keywords>
+	<keywords>MICROSECOND</keywords>
+	<keywords>MICROSECONDS</keywords>
+	<keywords>MIN</keywords>
+	<keywords>MINEXTENTS</keywords>
+	<keywords>MINUS</keywords>
+	<keywords>MINUTE</keywords>
+	<keywords>MODIFIES</keywords>
+	<keywords>MINUTES</keywords>
+	<keywords>MINVALUE</keywords>
+	<keywords>MIRROREXIT</keywords>
+	<keywords>MOD</keywords>
+	<keywords>MODE</keywords>
+	<keywords>MODIFY</keywords>
+	<keywords>MODULE</keywords>
+	<keywords>MONEY</keywords>
+	<keywords>MONTH</keywords>
+	<keywords>MONTHS</keywords>
+	<keywords>MOUNT</keywords>
+	<keywords>MOVE</keywords>
+	<keywords>NAMED</keywords>
+	<keywords>NAMES</keywords>
+	<keywords>NATIONAL</keywords>
+	<keywords>NATURAL</keywords>
+	<keywords>NCHAR</keywords>
+	<keywords>NCLOB</keywords>
+	<keywords>NEW</keywords>
+	<keywords>NEXT</keywords>
+	<keywords>NHEADER</keywords>
+	<keywords>NO</keywords>
+	<keywords>NOARCHIVELOG</keywords>
+	<keywords>NOAUDIT</keywords>
+	<keywords>NOCACHE</keywords>
+	<keywords>NOCHECK</keywords>
+	<keywords>NOCOMPRESS</keywords>
+	<keywords>NOCYCLE</keywords>
+	<keywords>NOECHO</keywords>
+	<keywords>NOMAXVALUE</keywords>
+	<keywords>NOMINVALUE</keywords>
+	<keywords>NONCLUSTERED</keywords>
+	<keywords>NONE</keywords>
+	<keywords>NOORDER</keywords>
+	<keywords>NORESETLOGS</keywords>
+	<keywords>NORMAL</keywords>
+	<keywords>NOSORT</keywords>
+	<keywords>NOT</keywords>
+	<keywords>NOTFOUND</keywords>
+	<keywords>NOTRIM</keywords>
+	<keywords>NOWAIT</keywords>
+	<keywords>NULL</keywords>
+	<keywords>NULLIF</keywords>
+	<keywords>NULLVALUE</keywords>
+	<keywords>NUMBER</keywords>
+	<keywords>NUMERIC</keywords>
+	<keywords>OBJECT</keywords>
+	<keywords>NUMPARTS</keywords>
+	<keywords>NVL</keywords>
+	<keywords>OBID</keywords>
+	<keywords>ODBCINFO</keywords>
+	<keywords>OF</keywords>
+	<keywords>OFF</keywords>
+	<keywords>OFFLINE</keywords>
+	<keywords>OFFSETS</keywords>
+	<keywords>OLD</keywords>
+	<keywords>ON</keywords>
+	<keywords>ONCE</keywords>
+	<keywords>ONLINE</keywords>
+	<keywords>ONLY</keywords>
+	<keywords>OPEN</keywords>
+	<keywords>OPERATION</keywords>
+	<keywords>OPENDATASOURCE</keywords>
+	<keywords>OPENQUERY</keywords>
+	<keywords>OPENROWSET</keywords>
+	<keywords>OPTIMAL</keywords>
+	<keywords>OPTIMIZE</keywords>
+	<keywords>OPTION</keywords>
+	<keywords>OR</keywords>
+	<keywords>ORDER</keywords>
+	<keywords>ORDINALITY</keywords>
+	<keywords>OUT</keywords>
+	<keywords>OUTER</keywords>
+	<keywords>OUTPUT</keywords>
+	<keywords>OVER</keywords>
+	<keywords>OVERLAPS</keywords>
+	<keywords>OWN</keywords>
+	<keywords>PACKAGE</keywords>
+	<keywords>PAD</keywords>
+	<keywords>PARAMETER</keywords>
+	<keywords>PARAMETERS</keywords>
+	<keywords>PAGE</keywords>
+	<keywords>PAGES</keywords>
+	<keywords>PARALLEL</keywords>
+	<keywords>PART</keywords>
+	<keywords>PARTIAL</keywords>
+	<keywords>PATH</keywords>
+	<keywords>POSTFIX</keywords>
+	<keywords>PASCAL</keywords>
+	<keywords>PCTFREE</keywords>
+	<keywords>PCTINCREASE</keywords>
+	<keywords>PCTINDEX</keywords>
+	<keywords>PCTUSED</keywords>
+	<keywords>PERCENT</keywords>
+	<keywords>PERM</keywords>
+	<keywords>PERMANENT</keywords>
+	<keywords>PERMIT</keywords>
+	<keywords>PI</keywords>
+	<keywords>PIPE</keywords>
+	<keywords>PLAN</keywords>
+	<keywords>PLI</keywords>
+	<keywords>POSITION</keywords>
+	<keywords>POWER</keywords>
+	<keywords>PRECISION</keywords>
+	<keywords>PREFIX</keywords>
+	<keywords>PREORDER</keywords>
+	<keywords>PREPARE</keywords>
+	<keywords>PRESERVE</keywords>
+	<keywords>PRIMARY</keywords>
+	<keywords>PRINT</keywords>
+	<keywords>PRINTSCREEN</keywords>
+	<keywords>PRIOR</keywords>
+	<keywords>PRIQTY</keywords>
+	<keywords>PRIVATE</keywords>
+	<keywords>PRIVILEGES</keywords>
+	<keywords>PROC</keywords>
+	<keywords>PROCEDURE</keywords>
+	<keywords>PROCESSEXIT</keywords>
+	<keywords>PROFILE</keywords>
+	<keywords>PROGRAM</keywords>
+	<keywords>PROMPT</keywords>
+	<keywords>PUBLIC</keywords>
+	<keywords>PUTFORM</keywords>
+	<keywords>PUTOPER</keywords>
+	<keywords>PUTROW</keywords>
+	<keywords>QUALIFICATION</keywords>
+	<keywords>QUARTER</keywords>
+	<keywords>QUOTA</keywords>
+	<keywords>RADIANS</keywords>
+	<keywords>RAISE</keywords>
+	<keywords>RAISERROR</keywords>
+	<keywords>RAND</keywords>
+	<keywords>RANGE</keywords>
+	<keywords>RAW</keywords>
+	<keywords>READ</keywords>
+	<keywords>READS</keywords>
+	<keywords>READTEXT</keywords>
+	<keywords>REAL</keywords>
+	<keywords>RECURSIVE</keywords>
+	<keywords>REF</keywords>
+	<keywords>RECONFIGURE</keywords>
+	<keywords>RECORD</keywords>
+	<keywords>RECOVER</keywords>
+	<keywords>REDISPLAY</keywords>
+	<keywords>REFERENCES</keywords>
+	<keywords>REFERENCING</keywords>
+	<keywords>RELATIVE</keywords>
+	<keywords>REGISTER</keywords>
+	<keywords>RELEASE</keywords>
+	<keywords>RELOCATE</keywords>
+	<keywords>REMAINDER</keywords>
+	<keywords>REMOVE</keywords>
+	<keywords>RENAME</keywords>
+	<keywords>REPEAT</keywords>
+	<keywords>REPEATABLE</keywords>
+	<keywords>REPEATED</keywords>
+	<keywords>REPLACE</keywords>
+	<keywords>REPLICATE</keywords>
+	<keywords>REPLICATION</keywords>
+	<keywords>RESET</keywords>
+	<keywords>RESETLOGS</keywords>
+	<keywords>RESOURCE</keywords>
+	<keywords>RESTORE</keywords>
+	<keywords>RESTRICT</keywords>
+	<keywords>RESULT</keywords>
+	<keywords>RESTRICTED</keywords>
+	<keywords>RESUME</keywords>
+	<keywords>RETRIEVE</keywords>
+	<keywords>RETURN</keywords>
+	<keywords>RETURNS</keywords>
+	<keywords>REUSE</keywords>
+	<keywords>REVOKE</keywords>
+	<keywords>RIGHT</keywords>
+	<keywords>ROBIN</keywords>
+	<keywords>ROLE</keywords>
+	<keywords>ROLES</keywords>
+	<keywords>ROLLBACK</keywords>
+	<keywords>ROLLUP</keywords>
+	<keywords>ROUTINE</keywords>
+	<keywords>ROW</keywords>
+	<keywords>ROWS</keywords>
+	<keywords>ROWCOUNT</keywords>
+	<keywords>ROWGUIDCOL</keywords>
+	<keywords>ROWID</keywords>
+	<keywords>ROWIDS</keywords>
+	<keywords>ROWIDTOCHAR</keywords>
+	<keywords>ROWLABEL</keywords>
+	<keywords>ROWNUM</keywords>
+	<keywords>ROWS</keywords>
+	<keywords>RPAD</keywords>
+	<keywords>RRN</keywords>
+	<keywords>RTRIM</keywords>
+	<keywords>RULE</keywords>
+	<keywords>RUN</keywords>
+	<keywords>RUNTIMESTATISTICS</keywords>
+	<keywords>SAVE</keywords>
+	<keywords>SAVEPOINT</keywords>
+	<keywords>SCHEDULE</keywords>
+	<keywords>SCHEMA</keywords>
+	<keywords>SCN</keywords>
+	<keywords>SCREEN</keywords>
+	<keywords>SCROLL</keywords>
+	<keywords>SCOPE</keywords>
+	<keywords>SEARCH</keywords>
+	<keywords>SCROLLDOWN</keywords>
+	<keywords>SCROLLUP</keywords>
+	<keywords>SECOND</keywords>
+	<keywords>SECONDS</keywords>
+	<keywords>SECQTY</keywords>
+	<keywords>SECTION</keywords>
+	<keywords>SEGMENT</keywords>
+	<keywords>SELECT</keywords>
+	<keywords>SEQUENCE</keywords>
+	<keywords>SERIALIZABLE</keywords>
+	<keywords>SERVICE</keywords>
+	<keywords>SESSION</keywords>
+	<keywords>SESSION_USER</keywords>
+	<keywords>SET</keywords>
+	<keywords>SETS</keywords>
+	<keywords>SETUSER</keywords>
+	<keywords>SIN</keywords>
+	<keywords>SIMPLE</keywords>
+	<keywords>SIGN</keywords>
+	<keywords>SHUTDOWN</keywords>
+	<keywords>SHORT</keywords>
+	<keywords>SHARE</keywords>
+	<keywords>SHARED</keywords>
+	<keywords>SETUSER</keywords>
+	<keywords>SIZE</keywords>
+	<keywords>SLEEP</keywords>
+	<keywords>SMALLINT</keywords>
+	<keywords>SNAPSHOT</keywords>
+	<keywords>SOME</keywords>
+	<keywords>SORT</keywords>
+	<keywords>SOUNDEX</keywords>
+	<keywords>SPACE</keywords>
+	<keywords>SPECIFIC</keywords>
+	<keywords>SPECIFICTYPE</keywords>
+	<keywords>SQL</keywords>
+	<keywords>SQLEXCEPTION</keywords>
+	<keywords>SQLBUF</keywords>
+	<keywords>SQLCA</keywords>
+	<keywords>SQLCODE</keywords>
+	<keywords>SQLERROR</keywords>
+	<keywords>SQLSTATE</keywords>
+	<keywords>SQLWARNING</keywords>
+	<keywords>SQRT</keywords>
+	<keywords>START</keywords>
+	<keywords>STATE</keywords>
+	<keywords>STATEMENT</keywords>
+	<keywords>STATIC</keywords>
+	<keywords>STRUCTURE</keywords>
+	<keywords>STATISTICS</keywords>
+	<keywords>STOGROUP</keywords>
+	<keywords>STOP</keywords>
+	<keywords>STORAGE</keywords>
+	<keywords>STORPOOL</keywords>
+	<keywords>SUBMENU</keywords>
+	<keywords>SUBPAGES</keywords>
+	<keywords>SUBSTR</keywords>
+	<keywords>SUBSTRING</keywords>
+	<keywords>SUCCESSFUL</keywords>
+	<keywords>SUFFIX</keywords>
+	<keywords>SUM</keywords>
+	<keywords>SYSTEM_USER</keywords>
+	<keywords>SUMU</keywords>
+	<keywords>SWITCH</keywords>
+	<keywords>SYNONYM</keywords>
+	<keywords>SYSCAT</keywords>
+	<keywords>SYSDATE</keywords>
+	<keywords>SYSFUN</keywords>
+	<keywords>SYSIBM</keywords>
+	<keywords>SYSSTAT</keywords>
+	<keywords>SYSTEM</keywords>
+	<keywords>SYSTIME</keywords>
+	<keywords>SYSTIMESTAMP</keywords>
+	<keywords>TABLE</keywords>
+	<keywords>TABLEDATA</keywords>
+	<keywords>TABLES</keywords>
+	<keywords>TABLESPACE</keywords>
+	<keywords>TAN</keywords>
+	<keywords>TAPE</keywords>
+	<keywords>TEMP</keywords>
+	<keywords>TEMPORARY</keywords>
+	<keywords>TERMINATE</keywords>
+	<keywords>THAN</keywords>
+	<keywords>TEXTSIZE</keywords>
+	<keywords>THEN</keywords>
+	<keywords>THREAD</keywords>
+	<keywords>TIME</keywords>
+	<keywords>TIMEOUT</keywords>
+	<keywords>TIMESTAMP</keywords>
+	<keywords>TIMEZONE_HOUR</keywords>
+	<keywords>TIMEZONE_MINUTE</keywords>
+	<keywords>TINYINT</keywords>
+	<keywords>TO</keywords>
+	<keywords>TOP</keywords>
+	<keywords>TPE</keywords>
+	<keywords>TRACING</keywords>
+	<keywords>TRAILING</keywords>
+	<keywords>TRAN</keywords>
+	<keywords>TRANSACTION</keywords>
+	<keywords>TRANSLATE</keywords>
+	<keywords>TRANSLATION</keywords>
+	<keywords>TREAT</keywords>
+	<keywords>TRIGGER</keywords>
+	<keywords>TRIGGERS</keywords>
+	<keywords>TRIM</keywords>
+	<keywords>TRUE</keywords>
+	<keywords>TRUNCATE</keywords>
+	<keywords>TSEQUAL</keywords>
+	<keywords>TYPE</keywords>
+	<keywords>UID</keywords>
+	<keywords>UNCOMMITTED</keywords>
+	<keywords>UNDER</keywords>
+	<keywords>UNION</keywords>
+	<keywords>UNIQUE</keywords>
+	<keywords>UNKNOWN</keywords>
+	<keywords>UNNEST</keywords>
+	<keywords>UNLIMITED</keywords>
+	<keywords>UNLOADTABLE</keywords>
+	<keywords>UNSIGNED</keywords>
+	<keywords>UNTIL</keywords>
+	<keywords>UP</keywords>
+	<keywords>UPDATE</keywords>
+	<keywords>UPDATETEXT</keywords>
+	<keywords>UPPER</keywords>
+	<keywords>USAGE</keywords>
+	<keywords>USE</keywords>
+	<keywords>USER</keywords>
+	<keywords>USING</keywords>
+	<keywords>UUID</keywords>
+	<keywords>VALIDATE</keywords>
+	<keywords>VALIDPROC</keywords>
+	<keywords>VALIDROW</keywords>
+	<keywords>VALUE</keywords>
+	<keywords>VALUES</keywords>
+	<keywords>VARBINARY</keywords>
+	<keywords>VARCHAR</keywords>
+	<keywords>VARIABLE</keywords>
+	<keywords>VARIABLES</keywords>
+	<keywords>VARYING</keywords>
+	<keywords>VCAT</keywords>
+	<keywords>VERCOLS</keywords>
+	<keywords>VERSION</keywords>
+	<keywords>VIEW</keywords>
+	<keywords>VOLUMES</keywords>
+	<keywords>WAITFOR</keywords>
+	<keywords>WEEK</keywords>
+	<keywords>WHEN</keywords>
+	<keywords>WHENEVER</keywords>
+	<keywords>WHERE</keywords>
+	<keywords>WHILE</keywords>
+	<keywords>WITH</keywords>
+	<keywords>WITHOUT</keywords>
+	<keywords>WORK</keywords>
+	<keywords>WRITE</keywords>
+	<keywords>WRITETEXT</keywords>
+	<keywords>YEAR</keywords>
+	<keywords>YEARS</keywords>
+	<keywords>ZONE</keywords>
+</SQLSyntaxDefinition>
+</DBDefinition:DatabaseVendorDefinition>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/.classpath b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/.gitignore b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/.project b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/.project
new file mode 100644
index 0000000..7745ab9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.ibm.informix.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..73f4382
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Fri Apr 13 14:14:14 PDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.4
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..c9cadaa
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.datatools.enablement.ibm.informix.ui;singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-Localization: plugin
+Bundle-Vendor: %providerName
+Export-Package: org.eclipse.datatools.enablement.ibm.informix.internal.ui,
+ org.eclipse.datatools.enablement.ibm.informix.internal.ui.drivers,
+ org.eclipse.datatools.enablement.ibm.informix.ui.drivers
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.ui,
+ org.eclipse.datatools.connectivity,
+ org.eclipse.datatools.connectivity.ui,
+ org.eclipse.datatools.enablement.ibm.informix
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/about.html b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/build.properties b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/build.properties
new file mode 100644
index 0000000..3154630
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/build.properties
@@ -0,0 +1,15 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               plugin.properties,\
+               icons/,\
+               about.html
+src.dir	= src/
+plugin.version =	1.0.0.200711021
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/icons/new_db_element.gif b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/icons/new_db_element.gif
new file mode 100644
index 0000000..1d459ce
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/icons/new_db_element.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/plugin.properties b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/plugin.properties
new file mode 100644
index 0000000..3fb2915
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/plugin.properties
@@ -0,0 +1,16 @@
+###############################################################################
+# Copyright (c) 2006, 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName=Eclipse Data Tools Platform Informix UI Plug-in
+providerName=Eclipse Data Tools Platform
+
+profile.informix.wizard.title = Informix
+profile.informix.wizard.description = Create an Informix connection profile.
+profile.informix.properties = Driver Properties
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/plugin.xml b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/plugin.xml
new file mode 100644
index 0000000..b126326
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/plugin.xml
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+	<extension
+         point="org.eclipse.datatools.connectivity.connectionProfile">
+      <newWizard
+            class="org.eclipse.datatools.enablement.ibm.informix.internal.ui.NewInformixConnectionProfileWizard"
+            icon="icons/new_db_element.gif"
+            id="org.eclipse.datatools.enablement.ibm.informix.NewInformixConnectionProfileWizard"
+            name="%profile.informix.wizard.title"
+            description = "%profile.informix.wizard.description"
+            profile="org.eclipse.datatools.enablement.ibm.informix.connectionProfile"/>
+   </extension>
+   
+   <extension
+         point="org.eclipse.ui.propertyPages">
+      <page
+            class="org.eclipse.datatools.enablement.ibm.informix.internal.ui.InformixDBProfilePropertyPage"
+            id="org.eclipse.datatools.enablement.ibm.informix.profileProperties"
+            name="%profile.informix.properties"
+            objectClass="org.eclipse.datatools.connectivity.IConnectionProfile">
+         <filter
+               name="org.eclipse.datatools.profile.property.id"
+               value="org.eclipse.datatools.enablement.ibm.informix.connectionProfile"/>
+      </page>
+   </extension>
+   <extension
+         point="org.eclipse.datatools.connectivity.ui.driverPropertyEditor">
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.informix.10_0.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.informix.10_0.driverTemplate.password">
+      </propertyEditor>
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.informix.9_4.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.informix.9_4.driverTemplate.password">
+      </propertyEditor>
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.informix.9_3.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.informix.9_3.driverTemplate.password">
+      </propertyEditor>
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.informix.9_2.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.informix.9_2.driverTemplate.password">
+      </propertyEditor>
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.informix.10_0.other.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.informix.10_0.other.driverTemplate.password">
+      </propertyEditor>
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.informix.9_3.other.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.informix.9_3.other.driverTemplate.password">
+      </propertyEditor>
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.informix.9_4.other.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.informix.9_4.other.driverTemplate.password">
+      </propertyEditor>
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.informix.9_2.other.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.informix.9_2.other.driverTemplate.password">
+      </propertyEditor>
+   </extension>
+   
+      <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.ibm.informix.internal.ui.drivers.InformixOtherDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.informix.10_0.other.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.informix.internal.ui.drivers.10_0.InformixOtherDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+   <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.ibm.informix.internal.ui.drivers.InformixOtherDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.informix.9_4.other.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.informix.internal.ui.drivers.9_4.InformixOtherDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+   <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.ibm.informix.internal.ui.drivers.InformixOtherDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.informix.9_3.other.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.informix.internal.ui.drivers.9_3.InformixOtherDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+   <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.ibm.informix.internal.ui.drivers.InformixOtherDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.informix.9_2.other.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.informix.internal.ui.drivers.9_2.InformixOtherDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+   <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.ibm.informix.internal.ui.drivers.InformixDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.informix.10_0.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.informix.internal.ui.drivers.10_0.InformixDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+   <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.ibm.informix.internal.ui.drivers.InformixDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.informix.9_4.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.informix.internal.ui.drivers.9_4.InformixDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+   <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.ibm.informix.internal.ui.drivers.InformixDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.informix.9_3.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.informix.internal.ui.drivers.9_3.InformixDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+   <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.ibm.informix.internal.ui.drivers.InformixDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.ibm.informix.9_2.driverTemplate"
+            id="org.eclipse.datatools.enablement.ibm.informix.internal.ui.drivers.9_2.InformixDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+ </plugin>  
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/src/org/eclipse/datatools/enablement/ibm/informix/internal/ui/InformixDBProfileDetailsWizardPage.java b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/src/org/eclipse/datatools/enablement/ibm/informix/internal/ui/InformixDBProfileDetailsWizardPage.java
new file mode 100644
index 0000000..feeae50
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/src/org/eclipse/datatools/enablement/ibm/informix/internal/ui/InformixDBProfileDetailsWizardPage.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.informix.internal.ui;
+
+import org.eclipse.datatools.connectivity.ui.wizards.ExtensibleProfileDetailsWizardPage;
+import org.eclipse.datatools.enablement.ibm.internal.informix.IInformixConnectionProfileConstants;
+
+public class InformixDBProfileDetailsWizardPage 
+	extends ExtensibleProfileDetailsWizardPage{
+
+	public InformixDBProfileDetailsWizardPage(String pageName) {
+		super(pageName, IInformixConnectionProfileConstants.INFORMIX_CATEGORY_ID);	
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/src/org/eclipse/datatools/enablement/ibm/informix/internal/ui/InformixDBProfilePropertyPage.java b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/src/org/eclipse/datatools/enablement/ibm/informix/internal/ui/InformixDBProfilePropertyPage.java
new file mode 100644
index 0000000..0e976ad
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/src/org/eclipse/datatools/enablement/ibm/informix/internal/ui/InformixDBProfilePropertyPage.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.informix.internal.ui;
+
+import org.eclipse.datatools.connectivity.ui.wizards.ExtensibleProfileDetailsPropertyPage;
+import org.eclipse.datatools.enablement.ibm.internal.informix.IInformixConnectionProfileConstants;
+
+public class InformixDBProfilePropertyPage extends ExtensibleProfileDetailsPropertyPage {
+
+	public InformixDBProfilePropertyPage() {
+		super(IInformixConnectionProfileConstants.INFORMIX_CATEGORY_ID);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/src/org/eclipse/datatools/enablement/ibm/informix/internal/ui/NewInformixConnectionProfileWizard.java b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/src/org/eclipse/datatools/enablement/ibm/informix/internal/ui/NewInformixConnectionProfileWizard.java
new file mode 100644
index 0000000..13cc494
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/src/org/eclipse/datatools/enablement/ibm/informix/internal/ui/NewInformixConnectionProfileWizard.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.informix.internal.ui;
+
+import org.eclipse.datatools.connectivity.ui.wizards.ExtensibleNewConnectionProfileWizard;
+
+public class NewInformixConnectionProfileWizard extends ExtensibleNewConnectionProfileWizard {
+
+	protected InformixDBProfileDetailsWizardPage mPropPage;
+
+	public NewInformixConnectionProfileWizard() {
+		super(new InformixDBProfileDetailsWizardPage("org.eclipse.datatools.enablement.ibm.informix.internal.ui.InformixDBProfileDetailsWizardPage")); //$NON-NLS-1$
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/src/org/eclipse/datatools/enablement/ibm/informix/internal/ui/drivers/InformixDriverUIContributor.java b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/src/org/eclipse/datatools/enablement/ibm/informix/internal/ui/drivers/InformixDriverUIContributor.java
new file mode 100644
index 0000000..58e4beb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/src/org/eclipse/datatools/enablement/ibm/informix/internal/ui/drivers/InformixDriverUIContributor.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.informix.internal.ui.drivers;
+
+import org.eclipse.datatools.enablement.ibm.informix.ui.drivers.InformixDriverUIContributorBase;
+
+public class InformixDriverUIContributor extends InformixDriverUIContributorBase {
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/src/org/eclipse/datatools/enablement/ibm/informix/internal/ui/drivers/InformixOtherDriverUIContributor.java b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/src/org/eclipse/datatools/enablement/ibm/informix/internal/ui/drivers/InformixOtherDriverUIContributor.java
new file mode 100644
index 0000000..6e22578
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/src/org/eclipse/datatools/enablement/ibm/informix/internal/ui/drivers/InformixOtherDriverUIContributor.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.informix.internal.ui.drivers;
+
+import org.eclipse.datatools.connectivity.ui.wizards.OtherDriverUIContributor;
+
+public class InformixOtherDriverUIContributor extends OtherDriverUIContributor {
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/src/org/eclipse/datatools/enablement/ibm/informix/internal/ui/drivers/Messages.java b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/src/org/eclipse/datatools/enablement/ibm/informix/internal/ui/drivers/Messages.java
new file mode 100644
index 0000000..83157f9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/src/org/eclipse/datatools/enablement/ibm/informix/internal/ui/drivers/Messages.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.informix.internal.ui.drivers;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+public class Messages {
+	private static final String BUNDLE_NAME = "org.eclipse.datatools.enablement.ibm.informix.internal.ui.drivers.messages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private Messages() {
+	}
+
+	public static String getString(String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/src/org/eclipse/datatools/enablement/ibm/informix/internal/ui/drivers/messages.properties b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/src/org/eclipse/datatools/enablement/ibm/informix/internal/ui/drivers/messages.properties
new file mode 100644
index 0000000..839317e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/src/org/eclipse/datatools/enablement/ibm/informix/internal/ui/drivers/messages.properties
@@ -0,0 +1,47 @@
+###############################################################################
+# Copyright (c) 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+
+#
+## Informix Driver UI Contributor
+#
+CUI_NEWCW_DATABASE_LBL_UI_ = &Database:
+CUI_NEWCW_HOST_LBL_UI_ = &Host:
+CUI_NEWCW_PORT_LBL_UI_ = Port nu&mber:
+CUI_NEWCW_CONNECTIONURL_LBL_UI_= Connection UR&L:
+CUI_NEWCW_SERVER_LBL_UI_ = &Server:
+CUI_NEWCW_USERNAME_LBL_UI_ = User n&ame:
+CUI_NEWCW_PASSWORD_LBL_UI_ = Pass&word:
+CUI_NEWCW_SAVE_PASSWORD_LBL_UI_ = Sa&ve password
+CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_ = Database
+CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_ = Host
+CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_ = Port number
+CUI_NEWCW_USE_SERVER_SUMMARY_DATA_TEXT_ = Server
+CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_ = User name
+CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_ = Save password
+CUI_NEWCW_DEFAULT_SCHEMA_LBL_UI_ = Default schema:
+CUI_NEWCW_DEFAULT_SCHEMA_SUMMARY_DATA_TEXT_ = Default schema
+CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_ = true
+CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ = false
+CUI_NEWCW_URL_SUMMARY_DATA_TEXT_ = URL
+
+CUI_NEWCW_VALIDATE_DATABASE_REQ_UI_ = Enter a database name.
+CUI_NEWCW_VALIDATE_HOST_REQ_UI_= Enter the host name for the database server.
+CUI_NEWCW_VALIDATE_PORT_REQ_UI_ = Enter the connection port number for the database server.
+CUI_NEWCW_VALIDATE_SERVER_REQ_UI_= Enter a server name.
+CUI_NEWCW_VALIDATE_USERID_REQ_UI_ = Enter a user name.
+CUI_NEWCW_VALIDATE_PASSWORD_REQ_UI_ = Enter a password.
+
+
+
+
+
+
+CUI_NEWCW_SERVER_SUMMARY_DATA_TEXT_=
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/src/org/eclipse/datatools/enablement/ibm/informix/ui/drivers/InformixDriverUIContributorBase.java b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/src/org/eclipse/datatools/enablement/ibm/informix/ui/drivers/InformixDriverUIContributorBase.java
new file mode 100644
index 0000000..9c3102b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix.ui/src/org/eclipse/datatools/enablement/ibm/informix/ui/drivers/InformixDriverUIContributorBase.java
@@ -0,0 +1,691 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ *               Actuate Corporation - re-factored to an extendable base class and
+ *                  added the optional properties tab
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.informix.ui.drivers;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+import java.util.StringTokenizer;
+
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributor;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributorInformation;
+import org.eclipse.datatools.connectivity.ui.wizards.OptionalPropertiesPane;
+import org.eclipse.datatools.enablement.ibm.informix.internal.ui.drivers.Messages;
+import org.eclipse.jface.dialogs.DialogPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.swt.widgets.Text;
+
+public class InformixDriverUIContributorBase implements IDriverUIContributor,
+		Listener {
+
+	private static final String CUI_NEWCW_DATABASE_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_DATABASE_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_HOST_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_HOST_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_PORT_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_PORT_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_SERVER_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_SERVER_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_USERNAME_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_USERNAME_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_PASSWORD_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_PASSWORD_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_SAVE_PASSWORD_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_SAVE_PASSWORD_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_DEFAULT_SCHEMA_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_DEFAULT_SCHEMA_LBL_UI_"); //$NON-NLS-1$
+	
+	private static final String CUI_NEWCW_CONNECTIONURL_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_CONNECTIONURL_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_DEFAULT_SCHEMA_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_DEFAULT_SCHEMA_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+	
+	private static final String CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_SERVER_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_SERVER_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_URL_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_URL_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private IDriverUIContributorInformation contributorInformation;
+
+	private Label databaseLabel;
+
+	protected Text databaseText;
+
+	private Label hostLabel;
+
+	protected Text hostText;
+
+	private Label portLabel;
+
+	protected Text portText;
+
+	private Label serverLabel;
+
+	protected Text serverText;
+
+	private Label usernameLabel;
+
+	private Text usernameText;
+
+	private Label passwordLabel;
+
+	private Label defaultSchemaLabel;
+
+	private Text defaultSchemaText;
+	
+	private Text passwordText;
+
+	private Button savePasswordButton;
+
+	private Label urlLabel;
+
+	protected Text urlText;
+
+	protected DialogPage parentPage;
+
+	private ScrolledComposite parentComposite;
+
+    protected OptionalPropertiesPane optionalPropsComposite;
+
+    private Properties properties;
+	private String urlOptionalParameters=""; //$NON-NLS-1$
+	
+    protected boolean isReadOnly = false;
+
+	public boolean determineContributorCompletion() {
+		boolean isComplete = true;
+		if (databaseText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_DATABASE_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (hostText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_HOST_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (portText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_PORT_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (serverText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_SERVER_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (usernameText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_USERID_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (passwordText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_PASSWORD_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+        } else if (!optionalPropsComposite.validateControl(parentPage)) {
+            isComplete = false;
+        } 
+
+		if (isComplete) {
+			parentPage.setErrorMessage(null);
+		}
+		return isComplete;
+	}
+
+	public Composite getContributedDriverUI(Composite parent, boolean isReadOnly) {
+		if ((parentComposite == null) || parentComposite.isDisposed() || (this.isReadOnly != isReadOnly)) {
+			GridData gd;
+
+			this.isReadOnly = isReadOnly;
+			int additionalStyles = SWT.NONE;
+			if (isReadOnly){
+				additionalStyles = SWT.READ_ONLY;
+			}
+			
+			parentComposite = new ScrolledComposite(parent, SWT.H_SCROLL
+					| SWT.V_SCROLL);
+			parentComposite.setExpandHorizontal(true);
+			parentComposite.setExpandVertical(true);
+			parentComposite.setLayout(new GridLayout());
+
+            TabFolder tabComposite = new TabFolder(parentComposite, SWT.TOP);
+
+            // add general tab
+            TabItem generalTab = new TabItem(tabComposite, SWT.None);
+            generalTab.setText(ConnectivityUIPlugin.getDefault()
+                    .getResourceString("CommonDriverUIContributor.generaltab")); //$NON-NLS-1$
+
+            Composite baseComposite = new Composite(tabComposite, SWT.NULL);
+			GridLayout layout = new GridLayout();
+			layout.numColumns = 3;
+			baseComposite.setLayout(layout);
+            generalTab.setControl(baseComposite);
+
+			databaseLabel = new Label(baseComposite, SWT.NONE);
+			databaseLabel.setText(CUI_NEWCW_DATABASE_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			databaseLabel.setLayoutData(gd);
+
+			databaseText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalAlignment = GridData.FILL;
+			gd.horizontalSpan = 2;
+			databaseText.setLayoutData(gd);
+
+			hostLabel = new Label(baseComposite, SWT.NONE);
+			hostLabel.setText(CUI_NEWCW_HOST_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 1;
+			hostLabel.setLayoutData(gd);
+
+			hostText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 2;
+			gd.grabExcessHorizontalSpace = true;
+			hostText.setLayoutData(gd);
+
+			portLabel = new Label(baseComposite, SWT.NONE);
+			portLabel.setText(CUI_NEWCW_PORT_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 1;
+			portLabel.setLayoutData(gd);
+
+			portText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			portText.setLayoutData(gd);
+
+			serverLabel = new Label(baseComposite, SWT.NONE);
+			serverLabel.setText(CUI_NEWCW_SERVER_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 1;
+			serverLabel.setLayoutData(gd);
+
+			serverText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			serverText.setLayoutData(gd);
+
+			usernameLabel = new Label(baseComposite, SWT.NONE);
+			usernameLabel.setText(CUI_NEWCW_USERNAME_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			usernameLabel.setLayoutData(gd);
+
+			usernameText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			usernameText.setLayoutData(gd);
+
+			passwordLabel = new Label(baseComposite, SWT.NONE);
+			passwordLabel.setText(CUI_NEWCW_PASSWORD_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			passwordLabel.setLayoutData(gd);
+
+			passwordText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER
+					| SWT.PASSWORD | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			passwordText.setLayoutData(gd);
+
+			this.savePasswordButton = new Button(baseComposite, SWT.CHECK);
+			this.savePasswordButton.setText(CUI_NEWCW_SAVE_PASSWORD_LBL_UI_);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 3;
+			gd.grabExcessHorizontalSpace = true;
+			savePasswordButton.setLayoutData(gd);
+
+			defaultSchemaLabel = new Label(baseComposite, SWT.NONE);
+			defaultSchemaLabel.setText(CUI_NEWCW_DEFAULT_SCHEMA_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			defaultSchemaLabel.setLayoutData(gd);
+
+			defaultSchemaText = new Text(baseComposite, SWT.SINGLE
+					| SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			defaultSchemaText.setLayoutData(gd);
+			
+			urlLabel = new Label(baseComposite, SWT.NONE);
+			urlLabel.setText(CUI_NEWCW_CONNECTIONURL_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 1;
+			urlLabel.setLayoutData(gd);
+
+			urlText = new Text(baseComposite, SWT.MULTI | SWT.BORDER
+					| SWT.READ_ONLY | SWT.WRAP | SWT.V_SCROLL);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			gd.widthHint = 190;
+			gd.heightHint = 90;
+			urlText.setLayoutData(gd);
+
+            // add optional properties tab
+            TabItem optionalPropsTab = new TabItem( tabComposite, SWT.None );
+            optionalPropsTab.setText( ConnectivityUIPlugin.getDefault()
+                    .getResourceString( "CommonDriverUIContributor.optionaltab" ) ); //$NON-NLS-1$
+            optionalPropsComposite = createOptionalPropertiesPane( tabComposite, SWT.NULL, isReadOnly );
+            optionalPropsTab.setControl( optionalPropsComposite );
+
+            parentComposite.setContent(tabComposite);
+            parentComposite.setMinSize(tabComposite.computeSize(SWT.DEFAULT,
+                    SWT.DEFAULT));
+
+			initialize();
+		}
+		return parentComposite;
+	}
+
+	public List getSummaryData() {
+		List summaryData = new ArrayList();
+
+		summaryData.add(new String[] { CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_,
+				this.databaseText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_,
+				this.hostText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_,
+				this.portText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_SERVER_SUMMARY_DATA_TEXT_,
+				this.serverText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_,
+				this.usernameText.getText().trim() });
+		summaryData
+				.add(new String[] {
+						CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_,
+						savePasswordButton.getSelection() ? CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_
+								: CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ });
+		summaryData.add(new String[] {
+				CUI_NEWCW_DEFAULT_SCHEMA_SUMMARY_DATA_TEXT_,
+				this.defaultSchemaText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_URL_SUMMARY_DATA_TEXT_,
+				this.urlText.getText().trim() });
+
+		return summaryData;
+	}
+
+	public void loadProperties() {
+		removeListeners();
+		InformixJDBCURL url = getURLHandle(this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID));
+		hostText.setText(url.getNode());
+		portText.setText(url.getPort());
+		serverText.setText(url.getServer());
+		databaseText.setText(url.getDatabaseName());
+
+		String username = this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID);
+		if (username != null) {
+			usernameText.setText(username);
+		}
+		String password = this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID);
+		if (password != null) {
+			passwordText.setText(password);
+		}
+		String savePassword = this.properties
+				.getProperty(IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID);
+		if ((savePassword != null)
+				&& Boolean.valueOf(savePassword) == Boolean.TRUE) {
+			savePasswordButton.setSelection(true);
+		}
+		String defaultSchema = this.properties
+		.getProperty(IJDBCConnectionProfileConstants.DEFAULT_SCHEMA_PROP_ID);
+		if (defaultSchema != null) {
+			defaultSchemaText.setText(defaultSchema);
+		}
+        // load optional connection properties
+        optionalPropsComposite.loadProperties();
+
+        updateURL();
+		addListeners();
+		setConnectionInformation();
+	}
+
+	public void setDialogPage(DialogPage parentPage) {
+		this.parentPage = parentPage;
+	}
+
+	public void setDriverUIContributorInformation(
+			IDriverUIContributorInformation contributorInformation) {
+		this.contributorInformation = contributorInformation;
+		this.properties = contributorInformation.getProperties();
+        optionalPropsComposite.setDriverUIContributorInformation( contributorInformation );
+	}
+
+	public void handleEvent(Event event) {
+		if (isReadOnly){
+			if (event.widget == savePasswordButton){
+				savePasswordButton.setSelection(!savePasswordButton.getSelection());
+			}
+		} else {
+			updateURL();
+			setConnectionInformation();
+		}
+	}
+
+	private void initialize() {
+		updateURL();
+		addListeners();
+	}
+
+	protected void updateURL() {
+        String url = getURLHandle(hostText.getText().trim(), portText.getText().trim(), 
+                                databaseText.getText().trim(), serverText.getText().trim())
+                            .formatURL();
+        url += getURLOptionalParameters();
+        urlText.setText(url);
+	}
+
+	private void addListeners() {
+		databaseText.addListener(SWT.Modify, this);
+		hostText.addListener(SWT.Modify, this);
+		portText.addListener(SWT.Modify, this);
+		serverText.addListener(SWT.Modify, this);
+		usernameText.addListener(SWT.Modify, this);
+		passwordText.addListener(SWT.Modify, this);
+		savePasswordButton.addListener(SWT.Selection, this);
+		defaultSchemaText.addListener(SWT.Modify, this);
+	}
+
+	private void removeListeners() {
+		databaseText.removeListener(SWT.Modify, this);
+		hostText.removeListener(SWT.Modify, this);
+		portText.removeListener(SWT.Modify, this);
+		serverText.removeListener(SWT.Modify, this);
+		usernameText.removeListener(SWT.Modify, this);
+		passwordText.removeListener(SWT.Modify, this);
+		savePasswordButton.removeListener(SWT.Selection, this);
+		defaultSchemaText.removeListener(SWT.Modify, this);
+	}
+
+	private void setConnectionInformation() {
+		properties.setProperty(
+				IJDBCDriverDefinitionConstants.DATABASE_NAME_PROP_ID,
+				this.databaseText.getText().trim());
+		properties.setProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID,
+				this.passwordText.getText());
+		properties.setProperty(
+				IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID, String
+						.valueOf(savePasswordButton.getSelection()));
+		properties.setProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID,
+				this.usernameText.getText());
+		properties.setProperty(
+				IJDBCConnectionProfileConstants.DEFAULT_SCHEMA_PROP_ID,
+				this.defaultSchemaText.getText().trim());
+		properties.setProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID,
+				this.urlText.getText().trim());
+        optionalPropsComposite.setConnectionInformation();
+        this.contributorInformation.setProperties(properties);
+	}
+    
+    /**
+     * Creates an OptionalPropertiesPane.  
+     * Extenders may override to return an extended composite.
+     */
+    protected OptionalPropertiesPane createOptionalPropertiesPane( Composite parent, int style, 
+            boolean useReadOnlyControls )
+    {
+        return new OptionalPropertiesPane( parent, style, useReadOnlyControls );
+    }
+
+    /**
+     * Returns an Informix JDBC URL handle that parses the specified JDBC URL.
+     * Extenders may override to return an extended URL handle for its own JDBC URL format.
+     * @param url   JDBC connection URL 
+     * @return  an URL handle that provides accessors for each of the attributes found in the specified URL. 
+     */
+	protected InformixJDBCURL getURLHandle( String url ) {
+        return new InformixJDBCURL( url );
+    }
+    
+    /**
+     * Returns an Informix JDBC URL handle for the specified URL attributes.
+     * @param node  TCP/IP address or TCP/IP host name of the server to which to connect
+     * @param port  the number of the TCP/IP port.
+     * @param databaseName  the name of the database to which to connect
+     * @param server    the server name of the primary database server
+     * @return  an URL handle that can format an Informix JDBC connection URL based on the specified attributes
+     */
+    protected InformixJDBCURL getURLHandle(String node, String port, String databaseName, String server) {
+        return new InformixJDBCURL( node, port, databaseName, server );
+    }
+
+    /**
+     * An Informix JDBC URL handle that formats and parses a driver-specific JDBC connection URL.
+     */
+	protected class InformixJDBCURL {
+		protected String subprotocol = ""; //$NON-NLS-1$
+
+		protected String node = ""; //$NON-NLS-1$
+
+		protected String port = ""; //$NON-NLS-1$
+
+		protected String server = ""; //$NON-NLS-1$
+
+		protected String databaseName = ""; //$NON-NLS-1$
+
+		protected String urlProperties = ""; //$NON-NLS-1$
+
+		/**
+		 * @param url
+		 */
+		public InformixJDBCURL(String url) {
+			parseURL(url);
+		}
+
+        public InformixJDBCURL(String node, String port, String databaseName, String server) {
+            this.node = node;
+            this.port = port;
+            this.databaseName = databaseName;
+            this.server = server;
+        }
+
+		/**
+		 * @return Returns the databaseName.
+		 */
+		public String getDatabaseName() {
+			return databaseName;
+		}
+
+		/**
+		 * @return Returns the node.
+		 */
+		public String getNode() {
+			return node;
+		}
+
+		/**
+		 * @return Returns the subprotocol.
+		 */
+		public String getSubprotocol() {
+			return subprotocol;
+		}
+
+        /**
+         * @return Returns the port.
+         */
+        public String getPort() {
+            return port;
+        }
+
+        /**
+         * @return Returns the server.
+         */
+        public String getServer() {
+            return server;
+        }
+
+        /**
+         * @return Returns the URL properties.
+         */
+        public String getProperties() {
+            return urlProperties;
+        }
+
+        /**
+         * Formats the driver URL based on values specified in 
+         * constructor {@link InformixJDBCURL(String, String, String, String)}.
+         */
+        protected String formatURL() {
+            String url = "jdbc:informix-sqli://" + getNode() + ":" //$NON-NLS-1$ //$NON-NLS-2$
+                            + getPort() + "/" + getDatabaseName() //$NON-NLS-1$
+                            + ":INFORMIXSERVER=" + getServer() //$NON-NLS-1$
+                            + ";DELIMIDENT=y;"; //$NON-NLS-1$      
+            return url;
+        }        
+
+        /**
+         * Parses the specified URL string into URL attributes that can be accessed 
+         * by the corresponding getter methods.
+         */
+		protected void parseURL(String url) {
+			try {
+				setURLOptionalParameters(""); //$NON-NLS-1$
+				String remainingURL = url.substring(url.indexOf(':') + 1);
+				this.subprotocol = remainingURL.substring(0, remainingURL
+						.indexOf(':'));
+				remainingURL = remainingURL
+						.substring(remainingURL.indexOf(':') + 3);
+				this.node = remainingURL
+						.substring(0, remainingURL.indexOf('/'));
+				if (this.node.indexOf(':') > -1) {
+					this.port = this.node.substring(this.node.indexOf(':') + 1);
+					this.node = this.node.substring(0, this.node.indexOf(':'));
+				}
+				remainingURL = remainingURL
+						.substring(remainingURL.indexOf('/') + 1);
+				if (remainingURL.indexOf(':') > -1) {
+					this.databaseName = remainingURL.substring(0, remainingURL
+							.indexOf(':'));
+					remainingURL = remainingURL.substring(remainingURL
+							.indexOf(':') + 1);
+					if (remainingURL.indexOf("INFORMIXSERVER=") > -1){ //$NON-NLS-1$
+						
+						if(remainingURL.contains(";")){ //$NON-NLS-1$
+						this.server = remainingURL.substring(new String(
+									"INFORMIXSERVER=").length(), remainingURL //$NON-NLS-1$
+									.indexOf(';'));
+						}else
+							
+							this.server = remainingURL.substring(remainingURL.indexOf('=')+1);
+						
+						}
+				
+					this.urlProperties = remainingURL;
+				} else {
+					this.databaseName = remainingURL;
+				}
+				String userOptionalParameters=""; //$NON-NLS-1$
+				String userParameter = ""; //$NON-NLS-1$
+				if(remainingURL!=null && remainingURL.length()>0)
+				{
+					StringTokenizer st = new StringTokenizer(remainingURL, ";"); //$NON-NLS-1$
+					int tokenLength = st.countTokens();
+					for(int i=0; i< tokenLength; i++)
+					{
+						userParameter = st.nextToken();
+						if(userParameter!=null && userParameter.length()>0){
+							if((!userParameter.startsWith("INFORMIXSERVER")) && (!userParameter.startsWith("DELIMIDENT"))) //$NON-NLS-1$ //$NON-NLS-2$
+								userOptionalParameters +=	userParameter+";"; //$NON-NLS-1$
+						}
+					}
+
+					setURLOptionalParameters(userOptionalParameters);
+				}
+			} catch (Exception e) {
+			}
+		}
+	}
+	/**
+	 *  Sets the URL optional properties.
+	 */
+	public void setURLOptionalParameters(String connProp)
+	{
+		this.urlOptionalParameters = connProp;
+	}
+	
+	/**
+	 * @return Returns the URL optional properties.
+	 */
+	public String getURLOptionalParameters()
+	{
+		return this.urlOptionalParameters;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix/.classpath b/plugins/org.eclipse.datatools.enablement.ibm.informix/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix/.gitignore b/plugins/org.eclipse.datatools.enablement.ibm.informix/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix/.project b/plugins/org.eclipse.datatools.enablement.ibm.informix/.project
new file mode 100644
index 0000000..86c542e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.ibm.informix</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.enablement.ibm.informix/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..73f4382
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Fri Apr 13 14:14:14 PDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.4
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.enablement.ibm.informix/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..6ac36ab
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.datatools.enablement.ibm.informix;singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-Localization: plugin
+Bundle-Vendor: %providerName
+Export-Package: org.eclipse.datatools.enablement.ibm.internal.informix
+Require-Bundle: org.eclipse.datatools.connectivity,
+ org.eclipse.datatools.connectivity.sqm.core
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix/about.html b/plugins/org.eclipse.datatools.enablement.ibm.informix/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix/build.properties b/plugins/org.eclipse.datatools.enablement.ibm.informix/build.properties
new file mode 100644
index 0000000..cea96bc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix/build.properties
@@ -0,0 +1,15 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               about.html,\
+               icons/,\
+               plugin.properties,\
+               plugin.xml
+src.dir	= src/
+plugin.version =	1.0.0.200706071
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix/icons/jdbc_16.gif b/plugins/org.eclipse.datatools.enablement.ibm.informix/icons/jdbc_16.gif
new file mode 100644
index 0000000..ef7809c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix/icons/jdbc_16.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix/plugin.properties b/plugins/org.eclipse.datatools.enablement.ibm.informix/plugin.properties
new file mode 100644
index 0000000..23c5409
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix/plugin.properties
@@ -0,0 +1,38 @@
+###############################################################################
+# Copyright (c) 2006, 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName=Eclipse Data Tools Platform Informix Plug-in
+providerName=Eclipse Data Tools Platform
+
+driverClass = Driver Class
+driverVendor = Vendor
+driverVersion = Version
+driverDBName = Database Name
+driverConnectionURL = Connection URL
+driverUID = User ID
+driverPWD = Password
+
+INFORMIX_CATEGORY_NAME = Informix
+10_0_VERSION_CATEGORY_NAME = 10.0
+9_4_VERSION_CATEGORY_NAME = 9.4
+9_3_VERSION_CATEGORY_NAME = 9.3
+9_2_VERSION_CATEGORY_NAME = 9.2
+
+org.eclipse.datatools.enablement.ibm.informix.10_0.driverTemplate = Informix JDBC Driver
+org.eclipse.datatools.enablement.ibm.informix.10_0.other.driverTemplate = Other Driver
+org.eclipse.datatools.enablement.ibm.informix.9_4.driverTemplate = Informix JDBC Driver
+org.eclipse.datatools.enablement.ibm.informix.9_4.other.driverTemplate = Other Driver
+org.eclipse.datatools.enablement.ibm.informix.9_3.driverTemplate = Informix JDBC Driver
+org.eclipse.datatools.enablement.ibm.informix.9_3.other.driverTemplate = Other Driver
+org.eclipse.datatools.enablement.ibm.informix.9_2.driverTemplate = Informix JDBC Driver
+org.eclipse.datatools.enablement.ibm.informix.9_2.other.driverTemplate = Other Driver
+
+jdbc.connection.name = JDBC Connection
+profile.informix.title = Informix
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix/plugin.xml b/plugins/org.eclipse.datatools.enablement.ibm.informix/plugin.xml
new file mode 100644
index 0000000..a1481be
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix/plugin.xml
@@ -0,0 +1,545 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+	<extension
+         point="org.eclipse.datatools.connectivity.connectionProfile">
+      <connectionProfile
+            category="org.eclipse.datatools.connectivity.db.category"
+            configurationType="org.eclipse.datatools.connectivity.db.generic.configurationType"
+            icon="icons/jdbc_16.gif"
+            id="org.eclipse.datatools.enablement.ibm.informix.connectionProfile"
+            name="%profile.informix.title"
+            pingFactory="org.eclipse.datatools.enablement.ibm.internal.informix.JDBCInformixConnectionFactory"
+            propertiesPersistenceHook="org.eclipse.datatools.enablement.ibm.internal.informix.InformixDBPropertiesPersistenceHook"/>
+      <connectionFactory
+            class="org.eclipse.datatools.enablement.ibm.internal.informix.JDBCInformixConnectionFactory"
+            id="java.sql.Connection"
+            name="jdbc.connection.name"
+            profile="org.eclipse.datatools.enablement.ibm.informix.connectionProfile"/>
+   </extension>
+   
+   <extension
+         point="org.eclipse.datatools.connectivity.driverExtension"> 
+         <category
+      		parentCategory="org.eclipse.datatools.connectivity.db.driverCategory"
+            id="org.eclipse.datatools.enablement.ibm.informix.driverCategory"
+            name="%INFORMIX_CATEGORY_NAME"/>
+         <category
+      		parentCategory="org.eclipse.datatools.enablement.ibm.informix.driverCategory"
+            id="org.eclipse.datatools.enablement.ibm.informix.10_0.driverCategory"
+            name="%10_0_VERSION_CATEGORY_NAME"/> 
+         <category
+      		parentCategory="org.eclipse.datatools.enablement.ibm.informix.driverCategory"
+            id="org.eclipse.datatools.enablement.ibm.informix.9_4.driverCategory"
+            name="%9_4_VERSION_CATEGORY_NAME"/> 
+         <category
+      		parentCategory="org.eclipse.datatools.enablement.ibm.informix.driverCategory"
+            id="org.eclipse.datatools.enablement.ibm.informix.9_3.driverCategory"
+            name="%9_3_VERSION_CATEGORY_NAME"/>
+         <category
+      		parentCategory="org.eclipse.datatools.enablement.ibm.informix.driverCategory"
+            id="org.eclipse.datatools.enablement.ibm.informix.9_2.driverCategory"
+            name="%9_2_VERSION_CATEGORY_NAME"/>
+               
+      <driverTemplate
+            createDefault="false"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.enablement.ibm.informix.10_0.driverTemplate"
+            jarList="ifxjdbc.jar"
+            name="%org.eclipse.datatools.enablement.ibm.informix.10_0.driverTemplate"
+            parentCategory="org.eclipse.datatools.enablement.ibm.informix.10_0.driverCategory">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%driverClass"
+                  value="com.informix.jdbc.IfxDriver"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%driverVendor"
+                  value="Informix"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%driverVersion"
+                  value="10.0"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%driverDBName"
+                  value="database"
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%driverConnectionURL"
+                  value="jdbc:informix-sqli://host:1526/database:INFORMIXSERVER=server"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%driverUID"
+                  value=""
+                  required="false"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%driverPWD"
+                  required="false"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+   </extension>
+  
+   <extension
+         point="org.eclipse.datatools.connectivity.driverExtension">    
+      <driverTemplate
+            createDefault="false"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.enablement.ibm.informix.9_4.driverTemplate"
+            jarList="ifxjdbc.jar"
+            name="%org.eclipse.datatools.enablement.ibm.informix.9_4.driverTemplate"
+            parentCategory="org.eclipse.datatools.enablement.ibm.informix.9_4.driverCategory">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%driverClass"
+                  value="com.informix.jdbc.IfxDriver"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%driverVendor"
+                  value="Informix"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%driverVersion"
+                  value="9.4"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%driverDBName"
+                  value="database"
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%driverConnectionURL"
+                  value="jdbc:informix-sqli://host:1526/database:INFORMIXSERVER=server"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%driverUID"
+                  value=""
+                  required="false"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%driverPWD"
+                  required="false"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+   </extension>
+   
+   <extension
+         point="org.eclipse.datatools.connectivity.driverExtension">    
+      <driverTemplate
+            createDefault="false"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.enablement.ibm.informix.9_3.driverTemplate"
+            jarList="ifxjdbc.jar"
+            name="%org.eclipse.datatools.enablement.ibm.informix.9_3.driverTemplate"
+            parentCategory="org.eclipse.datatools.enablement.ibm.informix.9_3.driverCategory">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%driverClass"
+                  value="com.informix.jdbc.IfxDriver"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%driverVendor"
+                  value="Informix"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%driverVersion"
+                  value="9.3"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%driverDBName"
+                  value="database"
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%driverConnectionURL"
+                  value="jdbc:informix-sqli://host:1526/database:INFORMIXSERVER=server"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%driverUID"
+                  value=""
+                  required="false"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%driverPWD"
+                  required="false"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+   </extension>
+  
+   <extension
+         point="org.eclipse.datatools.connectivity.driverExtension">    
+      <driverTemplate
+            createDefault="false"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.enablement.ibm.informix.9_2.driverTemplate"
+            jarList="ifxjdbc.jar"
+            name="%org.eclipse.datatools.enablement.ibm.informix.9_2.driverTemplate"
+            parentCategory="org.eclipse.datatools.enablement.ibm.informix.9_2.driverCategory">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%driverClass"
+                  value="com.informix.jdbc.IfxDriver"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%driverVendor"
+                  value="Informix"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%driverVersion"
+                  value="9.2"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%driverDBName"
+                  value="database"
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%driverConnectionURL"
+                  value="jdbc:informix-sqli://host:1526/database:INFORMIXSERVER=server"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%driverUID"
+                  value=""
+                  required="false"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%driverPWD"
+                  required="false"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+   </extension>
+    
+   <extension
+         point="org.eclipse.datatools.connectivity.driverExtension">    
+      <driverTemplate
+            createDefault="false"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.enablement.ibm.informix.10_0.other.driverTemplate"
+            jarList=""
+            name="%org.eclipse.datatools.enablement.ibm.informix.10_0.other.driverTemplate"
+            parentCategory="org.eclipse.datatools.enablement.ibm.informix.10_0.driverCategory">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%driverClass"
+                  value=""
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%driverVendor"
+                  value="Informix"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%driverVersion"
+                  value="10.0"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%driverDBName"
+                  value=""
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%driverConnectionURL"
+                  value=""
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%driverUID"
+                  value=""
+                  required="false"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%driverPWD"
+                  required="false"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+   </extension>
+   
+   <extension
+         point="org.eclipse.datatools.connectivity.driverExtension">    
+      <driverTemplate
+            createDefault="false"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.enablement.ibm.informix.9_4.other.driverTemplate"
+            jarList=""
+            name="%org.eclipse.datatools.enablement.ibm.informix.9_4.other.driverTemplate"
+            parentCategory="org.eclipse.datatools.enablement.ibm.informix.9_4.driverCategory">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%driverClass"
+                  value=""
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%driverVendor"
+                  value="Informix"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%driverVersion"
+                  value="9.4"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%driverDBName"
+                  value=""
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%driverConnectionURL"
+                  value=""
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%driverUID"
+                  value=""
+                  required="false"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%driverPWD"
+                  required="false"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+   </extension>
+   
+   <extension
+         point="org.eclipse.datatools.connectivity.driverExtension">    
+      <driverTemplate
+            createDefault="false"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.enablement.ibm.informix.9_3.other.driverTemplate"
+            jarList=""
+            name="%org.eclipse.datatools.enablement.ibm.informix.9_3.other.driverTemplate"
+            parentCategory="org.eclipse.datatools.enablement.ibm.informix.9_3.driverCategory">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%driverClass"
+                  value=""
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%driverVendor"
+                  value="Informix"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%driverVersion"
+                  value="9.3"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%driverDBName"
+                  value=""
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%driverConnectionURL"
+                  value=""
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%driverUID"
+                  value=""
+                  required="false"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%driverPWD"
+                  required="false"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+   </extension>
+   
+   <extension
+         point="org.eclipse.datatools.connectivity.driverExtension">    
+      <driverTemplate
+            createDefault="false"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.enablement.ibm.informix.9_2.other.driverTemplate"
+            jarList=""
+            name="%org.eclipse.datatools.enablement.ibm.informix.9_2.other.driverTemplate"
+            parentCategory="org.eclipse.datatools.enablement.ibm.informix.9_2.driverCategory">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%driverClass"
+                  value=""
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%driverVendor"
+                  value="Informix"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%driverVersion"
+                  value="9.2"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%driverDBName"
+                  value=""
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%driverConnectionURL"
+                  value=""
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%driverUID"
+                  value=""
+                  required="false"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%driverPWD"
+                  required="false"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+   </extension>
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.mappings">
+      <providerIDtoDriverCategoryID
+            driverCategoryID="org.eclipse.datatools.enablement.ibm.informix.driverCategory"
+            providerID="org.eclipse.datatools.enablement.ibm.informix.connectionProfile">
+      </providerIDtoDriverCategoryID>
+   </extension>
+   
+ </plugin>  
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix/src/org/eclipse/datatools/enablement/ibm/internal/informix/IInformixConnectionProfileConstants.java b/plugins/org.eclipse.datatools.enablement.ibm.informix/src/org/eclipse/datatools/enablement/ibm/internal/informix/IInformixConnectionProfileConstants.java
new file mode 100644
index 0000000..ab48324
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix/src/org/eclipse/datatools/enablement/ibm/internal/informix/IInformixConnectionProfileConstants.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.internal.informix;
+
+
+public interface IInformixConnectionProfileConstants {
+
+	public static final String INFORMIX_CATEGORY_ID = "org.eclipse.datatools.enablement.ibm.informix.driverCategory"; //$NON-NLS-1$
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix/src/org/eclipse/datatools/enablement/ibm/internal/informix/InformixDBPropertiesPersistenceHook.java b/plugins/org.eclipse.datatools.enablement.ibm.informix/src/org/eclipse/datatools/enablement/ibm/internal/informix/InformixDBPropertiesPersistenceHook.java
new file mode 100644
index 0000000..ec9124e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix/src/org/eclipse/datatools/enablement/ibm/internal/informix/InformixDBPropertiesPersistenceHook.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.internal.informix;
+
+import org.eclipse.datatools.connectivity.drivers.jdbc.JDBCPasswordPropertyPersistenceHook;
+
+public class InformixDBPropertiesPersistenceHook extends
+		JDBCPasswordPropertyPersistenceHook {
+
+	public String getConnectionPropertiesPageID() {
+		return "org.eclipse.datatools.enablement.ibm.informix.profileProperties"; //$NON-NLS-1$
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix/src/org/eclipse/datatools/enablement/ibm/internal/informix/JDBCInformixConnectionFactory.java b/plugins/org.eclipse.datatools.enablement.ibm.informix/src/org/eclipse/datatools/enablement/ibm/internal/informix/JDBCInformixConnectionFactory.java
new file mode 100644
index 0000000..4a7b591
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix/src/org/eclipse/datatools/enablement/ibm/internal/informix/JDBCInformixConnectionFactory.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.datatools.enablement.ibm.internal.informix;
+
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionFactory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+
+public class JDBCInformixConnectionFactory implements IConnectionFactory {
+
+	public JDBCInformixConnectionFactory() {
+		super();
+	}
+
+	public IConnection createConnection(IConnectionProfile profile) {
+		JDBCInformixJDBCConnection connection = new JDBCInformixJDBCConnection(profile,
+				getClass());
+		connection.open();
+		return connection;
+	}
+
+	public IConnection createConnection(IConnectionProfile profile, String uid,
+			String pwd) {
+		return createConnection(profile);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.informix/src/org/eclipse/datatools/enablement/ibm/internal/informix/JDBCInformixJDBCConnection.java b/plugins/org.eclipse.datatools.enablement.ibm.informix/src/org/eclipse/datatools/enablement/ibm/internal/informix/JDBCInformixJDBCConnection.java
new file mode 100644
index 0000000..1da771a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.informix/src/org/eclipse/datatools/enablement/ibm/internal/informix/JDBCInformixJDBCConnection.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.internal.informix;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.SQLException;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.Version;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
+import org.eclipse.datatools.connectivity.drivers.jdbc.JDBCConnection;
+import org.eclipse.datatools.connectivity.exceptions.DBNotStartException;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinitionRegistry;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+
+public class JDBCInformixJDBCConnection extends JDBCConnection {
+
+	private Version techVersion = Version.NULL_VERSION;
+	private Version serverVersion = Version.NULL_VERSION;
+	private String serverName;
+	
+	public JDBCInformixJDBCConnection(IConnectionProfile profile, Class factoryClass) {
+		super(profile, factoryClass);
+	}
+	
+	public String getProviderName() {
+		return serverName;
+	}
+
+	public Version getProviderVersion() {
+		return serverVersion;
+	}
+
+	public Version getTechnologyVersion() {
+		return techVersion;
+	}
+
+	protected void initVersions() {
+		try {
+			DatabaseMetaData dbmd = ((Connection) this.getRawConnection())
+					.getMetaData();
+			try {
+				DatabaseDefinitionRegistry dbDefRegistry = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry();			
+				String version = this.getDriverDefinition().getTemplate().getPropertyValueFromId(IJDBCDriverDefinitionConstants.DATABASE_VERSION_PROP_ID);
+				String vendor = this.getDriverDefinition().getTemplate().getPropertyValueFromId(IJDBCDriverDefinitionConstants.DATABASE_VENDOR_PROP_ID);
+				DatabaseDefinition dbDef = dbDefRegistry.getDefinition(vendor, version);				
+				if (dbDef != null) {
+					serverName = dbDef.getProductDisplayString() + " " + dbDef.getVersionDisplayString();
+				}
+			} catch (Exception e) {
+			}
+			try {
+				techVersion = new Version(dbmd.getJDBCMajorVersion(), dbmd
+						.getJDBCMinorVersion(), 0, new String());
+			} catch (Exception e) {
+			}
+		} catch (SQLException e) {
+		}
+	}
+	
+	public Throwable getConnectException() {
+		Throwable exception = super.getConnectException();
+		if((exception != null)
+				&&(exception instanceof SQLException)
+				&&(((SQLException)exception).getErrorCode()==-4499)
+				&&(exception.getCause() instanceof java.net.ConnectException)){
+			exception = new DBNotStartException(exception);
+		}
+		return exception ;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.ui/.classpath b/plugins/org.eclipse.datatools.enablement.ibm.ui/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.ui/.gitignore b/plugins/org.eclipse.datatools.enablement.ibm.ui/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.ui/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.ui/.project b/plugins/org.eclipse.datatools.enablement.ibm.ui/.project
new file mode 100644
index 0000000..04b3f6d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.ibm.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.enablement.ibm.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..c3f8054
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.datatools.enablement.ibm.ui
+Bundle-Version: 1.2.1.qualifier
+Export-Package: org.eclipse.datatools.enablement.ibm.internal.ui.drivers
+Require-Bundle: org.eclipse.ui
+Bundle-Vendor: %providerName
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.ui/about.html b/plugins/org.eclipse.datatools.enablement.ibm.ui/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.ui/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.ui/build.properties b/plugins/org.eclipse.datatools.enablement.ibm.ui/build.properties
new file mode 100644
index 0000000..8b521cf
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.ui/build.properties
@@ -0,0 +1,13 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               about.html,\
+               plugin.properties
+src.dir	= src/
+plugin.version =	1.0.0.200711021
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.ui/plugin.properties b/plugins/org.eclipse.datatools.enablement.ibm.ui/plugin.properties
new file mode 100644
index 0000000..bfd33b5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.ui/plugin.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName=Eclipse Data Tools Platform IBM UI Plug-in
+providerName=Eclipse Data Tools Platform
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.ui/src/org/eclipse/datatools/enablement/ibm/internal/ui/drivers/IBMJDBCDriverTracingOptionsPane.java b/plugins/org.eclipse.datatools.enablement.ibm.ui/src/org/eclipse/datatools/enablement/ibm/internal/ui/drivers/IBMJDBCDriverTracingOptionsPane.java
new file mode 100644
index 0000000..deff550
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.ui/src/org/eclipse/datatools/enablement/ibm/internal/ui/drivers/IBMJDBCDriverTracingOptionsPane.java
@@ -0,0 +1,683 @@
+/*******************************************************************************
+ * Copyright (c) 2006 - 2008 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.internal.ui.drivers;
+
+import java.io.File;
+
+import org.eclipse.datatools.enablement.ibm.internal.ui.drivers.Messages;
+import org.eclipse.jface.dialogs.DialogPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.Widget;
+
+public class IBMJDBCDriverTracingOptionsPane extends Composite implements
+		Listener {
+
+	private Button disableTracingCheckbox;
+
+	private Label traceDirectoryLabel;
+
+	private Text traceDirectoryText;
+
+	private Button browseDirectory;
+
+	private Label traceFileLabel;
+
+	private Text traceFileText;
+
+	private Button appendCheckbox;
+
+	private Group traceLevelGroup;
+
+	private Button connectionCallsCheckbox;
+
+	private Button statementCallsCheckbox;
+
+	private Button resultSetCallsCheckbox;
+
+	private Button driverConfigurationCheckbox;
+
+	private Button connectsCheckbox;
+
+	private Button drdaFlowsCheckbox;
+
+	private Button resultsetMetadataCheckbox;
+
+	private Button parameterMetadataCheckbox;
+
+	private Button diagnosticsCheckbox;
+
+	private Button sqlJCheckbox;
+
+	private Button xaCallsCheckbox;
+
+	private Button allButton;
+
+	private Button noneButton;
+
+	private IIBMJDBCDriverProvider parentDriverProvider;
+
+	private static final String TRACE_DIRECTORY_PROPERTY_NAME = "traceDirectory"; //$NON-NLS-1$
+
+	private static final String TRACE_FILE_PROPERTY_NAME = "traceFile"; //$NON-NLS-1$
+
+	private static final String TRACE_FILE_APPEND_PROPERTY_NAME = "traceFileAppend"; //$NON-NLS-1$
+
+	private static final String TRACE_LEVEL_PROPERTY_NAME = "traceLevel"; //$NON-NLS-1$
+
+	private static final String TRACE_FILE_APPEND_FALSE_PROPERTY_VALUE = "false"; //$NON-NLS-1$
+
+	private static final String TRACE_FILE_APPEND_TRUE_PROPERTY_VALUE = "true"; //$NON-NLS-1$
+
+	private static final String TRACE_LEVEL_TRACE_NONE_PROPERTY_VALUE = "0"; //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_DISABLE_TRACING_CHECKBOX_UI_ = Messages
+			.getString("CUI_NEWCW_DISABLE_TRACING_CHECKBOX_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_TRACE_DIRECTORY_LABEL_UI_ = Messages
+			.getString("CUI_NEWCW_TRACE_DIRECTORY_LABEL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_TRACE_DIRECTORY_BROWSE_BUTTON_UI_ = Messages
+			.getString("CUI_NEWCW_TRACE_DIRECTORY_BROWSE_BUTTON_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_TRACE_FILE_LABEL_UI_ = Messages
+			.getString("CUI_NEWCW_TRACE_FILE_LABEL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_DEFAULT_TRACE_FILE_NAME_UI_ = Messages
+			.getString("CUI_NEWCW_DEFAULT_TRACE_FILE_NAME_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_APPEND_CHECKBOX_UI_ = Messages
+			.getString("CUI_NEWCW_APPEND_CHECKBOX_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_TRACE_LEVELS_GROUPBOX_UI_ = Messages
+			.getString("CUI_NEWCW_TRACE_LEVELS_GROUPBOX_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_CONNECTION_CALLS_CHECKBOX_UI_ = Messages
+			.getString("CUI_NEWCW_CONNECTION_CALLS_CHECKBOX_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_STATEMENT_CALLS_CHECKBOX_UI_ = Messages
+			.getString("CUI_NEWCW_STATEMENT_CALLS_CHECKBOX_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_RESULT_SET_CALLS_CHECKBOX_UI_ = Messages
+			.getString("CUI_NEWCW_RESULT_SET_CALLS_CHECKBOX_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_DRIVER_CONFIGURATION_CHECKBOX_UI_ = Messages
+			.getString("CUI_NEWCW_DRIVER_CONFIGURATION_CHECKBOX_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_CONNECTS_CHECKBOX_UI_ = Messages
+			.getString("CUI_NEWCW_CONNECTS_CHECKBOX_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_DRDA_FLOWS_CHECKBOX_UI_ = Messages
+			.getString("CUI_NEWCW_DRDA_FLOWS_CHECKBOX_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_RESULT_SET_METADATA_CHECKBOX_UI_ = Messages
+			.getString("CUI_NEWCW_RESULT_SET_METADATA_CHECKBOX_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_PARAMETER_METADATA_CHECKBOX_UI_ = Messages
+			.getString("CUI_NEWCW_PARAMETER_METADATA_CHECKBOX_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_DIAGNOSTICS_CHECKBOX_UI_ = Messages
+			.getString("CUI_NEWCW_DIAGNOSTICS_CHECKBOX_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_SQLJ_CHECKBOX_UI_ = Messages
+			.getString("CUI_NEWCW_SQLJ_CHECKBOX_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_XA_CALLS_CHECKBOX_UI_ = Messages
+			.getString("CUI_NEWCW_XA_CALLS_CHECKBOX_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_SELECT_ALL_BUTTON_UI_ = Messages
+			.getString("CUI_NEWCW_SELECT_ALL_BUTTON_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_DESELECT_ALL_BUTTON_UI_ = Messages
+			.getString("CUI_NEWCW_DESELECT_ALL_BUTTON_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_ENTER_DIRECTORY_MESSAGE_UI_ = Messages
+			.getString("CUI_NEWCW_ENTER_DIRECTORY_MESSAGE_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_ENTER_VALID_DIRECTORY_MESSAGE_UI_ = Messages
+			.getString("CUI_NEWCW_ENTER_VALID_DIRECTORY_MESSAGE_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_ENTER_FILE_MESSAGE_UI_ = Messages
+			.getString("CUI_NEWCW_ENTER_FILE_MESSAGE_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_SELECT_TRACE_LEVEL_MESSAGE_UI_ = Messages
+			.getString("CUI_NEWCW_SELECT_TRACE_LEVEL_MESSAGE_UI_"); //$NON-NLS-1$
+
+	private boolean isReadOnly = false;
+	
+	public IBMJDBCDriverTracingOptionsPane(Composite parent, int style,
+			IIBMJDBCDriverProvider parentDriverProvider, boolean isReadOnly) {
+		super(parent, style);
+		this.parentDriverProvider = parentDriverProvider;
+		Composite parentComposite = this;
+		GridLayout layout = new GridLayout();
+		layout.numColumns = 3;
+		parentComposite.setLayout(layout);
+		
+		this.isReadOnly = isReadOnly;
+		int additionalStyles = SWT.NONE;
+		if (isReadOnly){
+			additionalStyles = SWT.READ_ONLY;
+		}
+
+		GridData gd;
+
+		disableTracingCheckbox = new Button(parentComposite, SWT.CHECK);
+		disableTracingCheckbox.setText(CUI_NEWCW_DISABLE_TRACING_CHECKBOX_UI_);
+		disableTracingCheckbox.setSelection(true);
+		gd = new GridData();
+		gd.horizontalAlignment = GridData.FILL;
+		gd.verticalAlignment = GridData.BEGINNING;
+		gd.horizontalSpan = 3;
+		gd.grabExcessHorizontalSpace = true;
+		disableTracingCheckbox.setLayoutData(gd);
+
+		traceDirectoryLabel = new Label(parentComposite, SWT.NONE);
+		traceDirectoryLabel.setText(CUI_NEWCW_TRACE_DIRECTORY_LABEL_UI_);
+		gd = new GridData();
+		gd.verticalAlignment = GridData.BEGINNING;
+		traceDirectoryLabel.setLayoutData(gd);
+
+		traceDirectoryText = new Text(parentComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+		gd = new GridData();
+		gd.widthHint = 180;
+		gd.horizontalAlignment = GridData.FILL;
+		gd.verticalAlignment = GridData.BEGINNING;
+		gd.grabExcessHorizontalSpace = true;
+		gd.horizontalSpan = 1;
+		traceDirectoryText.setLayoutData(gd);
+
+		browseDirectory = new Button(parentComposite, SWT.PUSH);
+		browseDirectory.setText(CUI_NEWCW_TRACE_DIRECTORY_BROWSE_BUTTON_UI_);
+		browseDirectory.setEnabled(!isReadOnly);
+		gd = new GridData();
+		gd.verticalAlignment = GridData.BEGINNING;
+		gd.horizontalAlignment = GridData.FILL;
+		gd.grabExcessHorizontalSpace = true;
+		gd.horizontalSpan = 1;
+		browseDirectory.setLayoutData(gd);
+
+		traceFileLabel = new Label(parentComposite, SWT.NONE);
+		traceFileLabel.setText(CUI_NEWCW_TRACE_FILE_LABEL_UI_);
+		gd = new GridData();
+		gd.verticalAlignment = GridData.BEGINNING;
+		traceFileLabel.setLayoutData(gd);
+
+		traceFileText = new Text(parentComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+		gd = new GridData();
+		gd.verticalAlignment = GridData.BEGINNING;
+		gd.horizontalAlignment = GridData.FILL;
+		gd.horizontalSpan = 2;
+		traceFileText.setLayoutData(gd);
+		traceFileText.setText(CUI_NEWCW_DEFAULT_TRACE_FILE_NAME_UI_);
+
+		appendCheckbox = new Button(parentComposite, SWT.CHECK);
+		appendCheckbox.setText(CUI_NEWCW_APPEND_CHECKBOX_UI_);
+		gd = new GridData();
+		gd.horizontalAlignment = GridData.FILL;
+		gd.verticalAlignment = GridData.BEGINNING;
+		gd.horizontalSpan = 3;
+		gd.grabExcessHorizontalSpace = true;
+		appendCheckbox.setLayoutData(gd);
+
+		traceLevelGroup = new Group(parentComposite, SWT.NONE);
+		layout = new GridLayout();
+		layout.numColumns = 2;
+		traceLevelGroup.setLayout(layout);
+		traceLevelGroup.setText(CUI_NEWCW_TRACE_LEVELS_GROUPBOX_UI_);
+		traceLevelGroup.setEnabled(false);
+		gd = new GridData();
+		gd.verticalAlignment = GridData.BEGINNING;
+		gd.horizontalSpan = 3;
+		traceLevelGroup.setLayoutData(gd);
+
+		connectionCallsCheckbox = new Button(traceLevelGroup, SWT.CHECK);
+		connectionCallsCheckbox
+				.setText(CUI_NEWCW_CONNECTION_CALLS_CHECKBOX_UI_);
+		gd = new GridData();
+		gd.horizontalAlignment = GridData.FILL;
+		gd.verticalAlignment = GridData.BEGINNING;
+		gd.grabExcessHorizontalSpace = true;
+		connectionCallsCheckbox.setLayoutData(gd);
+
+		statementCallsCheckbox = new Button(traceLevelGroup, SWT.CHECK);
+		statementCallsCheckbox.setText(CUI_NEWCW_STATEMENT_CALLS_CHECKBOX_UI_);
+		gd = new GridData();
+		gd.horizontalAlignment = GridData.FILL;
+		gd.verticalAlignment = GridData.BEGINNING;
+		gd.grabExcessHorizontalSpace = true;
+		statementCallsCheckbox.setLayoutData(gd);
+
+		resultSetCallsCheckbox = new Button(traceLevelGroup, SWT.CHECK);
+		resultSetCallsCheckbox.setText(CUI_NEWCW_RESULT_SET_CALLS_CHECKBOX_UI_);
+		gd = new GridData();
+		gd.horizontalAlignment = GridData.FILL;
+		gd.verticalAlignment = GridData.BEGINNING;
+		gd.grabExcessHorizontalSpace = true;
+		resultSetCallsCheckbox.setLayoutData(gd);
+
+		driverConfigurationCheckbox = new Button(traceLevelGroup, SWT.CHECK);
+		driverConfigurationCheckbox
+				.setText(CUI_NEWCW_DRIVER_CONFIGURATION_CHECKBOX_UI_);
+		gd = new GridData();
+		gd.horizontalAlignment = GridData.FILL;
+		gd.verticalAlignment = GridData.BEGINNING;
+		gd.grabExcessHorizontalSpace = true;
+		driverConfigurationCheckbox.setLayoutData(gd);
+
+		connectsCheckbox = new Button(traceLevelGroup, SWT.CHECK);
+		connectsCheckbox.setText(CUI_NEWCW_CONNECTS_CHECKBOX_UI_);
+		gd = new GridData();
+		gd.horizontalAlignment = GridData.FILL;
+		gd.verticalAlignment = GridData.BEGINNING;
+		gd.grabExcessHorizontalSpace = true;
+		connectsCheckbox.setLayoutData(gd);
+
+		drdaFlowsCheckbox = new Button(traceLevelGroup, SWT.CHECK);
+		drdaFlowsCheckbox.setText(CUI_NEWCW_DRDA_FLOWS_CHECKBOX_UI_);
+		gd = new GridData();
+		gd.horizontalAlignment = GridData.FILL;
+		gd.verticalAlignment = GridData.BEGINNING;
+		gd.grabExcessHorizontalSpace = true;
+		drdaFlowsCheckbox.setLayoutData(gd);
+
+		resultsetMetadataCheckbox = new Button(traceLevelGroup, SWT.CHECK);
+		resultsetMetadataCheckbox
+				.setText(CUI_NEWCW_RESULT_SET_METADATA_CHECKBOX_UI_);
+		gd = new GridData();
+		gd.horizontalAlignment = GridData.FILL;
+		gd.verticalAlignment = GridData.BEGINNING;
+		gd.grabExcessHorizontalSpace = true;
+		resultsetMetadataCheckbox.setLayoutData(gd);
+
+		parameterMetadataCheckbox = new Button(traceLevelGroup, SWT.CHECK);
+		parameterMetadataCheckbox
+				.setText(CUI_NEWCW_PARAMETER_METADATA_CHECKBOX_UI_);
+		gd = new GridData();
+		gd.horizontalAlignment = GridData.FILL;
+		gd.verticalAlignment = GridData.BEGINNING;
+		gd.grabExcessHorizontalSpace = true;
+		parameterMetadataCheckbox.setLayoutData(gd);
+
+		diagnosticsCheckbox = new Button(traceLevelGroup, SWT.CHECK);
+		diagnosticsCheckbox.setText(CUI_NEWCW_DIAGNOSTICS_CHECKBOX_UI_);
+		gd = new GridData();
+		gd.horizontalAlignment = GridData.FILL;
+		gd.verticalAlignment = GridData.BEGINNING;
+		gd.grabExcessHorizontalSpace = true;
+		diagnosticsCheckbox.setLayoutData(gd);
+
+		sqlJCheckbox = new Button(traceLevelGroup, SWT.CHECK);
+		sqlJCheckbox.setText(CUI_NEWCW_SQLJ_CHECKBOX_UI_);
+		gd = new GridData();
+		gd.horizontalAlignment = GridData.FILL;
+		gd.verticalAlignment = GridData.BEGINNING;
+		gd.grabExcessHorizontalSpace = true;
+		sqlJCheckbox.setLayoutData(gd);
+
+		xaCallsCheckbox = new Button(traceLevelGroup, SWT.CHECK);
+		xaCallsCheckbox.setText(CUI_NEWCW_XA_CALLS_CHECKBOX_UI_);
+		gd = new GridData();
+		gd.horizontalAlignment = GridData.FILL;
+		gd.verticalAlignment = GridData.BEGINNING;
+		gd.horizontalSpan = 2;
+		gd.grabExcessHorizontalSpace = true;
+		xaCallsCheckbox.setLayoutData(gd);
+
+		allButton = new Button(traceLevelGroup, SWT.NONE);
+		allButton.setEnabled(!isReadOnly);
+		allButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL
+				| GridData.VERTICAL_ALIGN_BEGINNING));
+		allButton.setText(CUI_NEWCW_SELECT_ALL_BUTTON_UI_);
+
+		noneButton = new Button(traceLevelGroup, SWT.NONE);
+		noneButton.setEnabled(!isReadOnly);
+		noneButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL
+				| GridData.VERTICAL_ALIGN_BEGINNING));
+		noneButton.setText(CUI_NEWCW_DESELECT_ALL_BUTTON_UI_);
+
+		restoreDefaultSettings();
+		enableTracingUI(false);
+		addListeners();
+	}
+
+	private void enableTracingUI(boolean enable) {
+		traceDirectoryLabel.setEnabled(enable);
+		traceDirectoryText.setEnabled(enable);	
+		traceFileLabel.setEnabled(enable);
+		traceFileText.setEnabled(enable);
+		appendCheckbox.setEnabled(enable);
+		traceLevelGroup.setEnabled(enable);
+		connectionCallsCheckbox.setEnabled(enable);
+		statementCallsCheckbox.setEnabled(enable);
+		resultSetCallsCheckbox.setEnabled(enable);
+		driverConfigurationCheckbox.setEnabled(enable);
+		connectsCheckbox.setEnabled(enable);
+		drdaFlowsCheckbox.setEnabled(enable);
+		resultsetMetadataCheckbox.setEnabled(enable);
+		parameterMetadataCheckbox.setEnabled(enable);
+		diagnosticsCheckbox.setEnabled(enable);
+		sqlJCheckbox.setEnabled(enable);
+		xaCallsCheckbox.setEnabled(enable);
+		if (!isReadOnly) {
+			browseDirectory.setEnabled(enable);
+			allButton.setEnabled(enable);
+			noneButton.setEnabled(enable);
+		}
+	}
+
+	private void addListeners() {
+		disableTracingCheckbox.addListener(SWT.Selection, this);
+		traceDirectoryText.addListener(SWT.Modify, this);
+		browseDirectory.addListener(SWT.Selection, this);
+		traceFileText.addListener(SWT.Modify, this);
+		appendCheckbox.addListener(SWT.Selection, this);
+		connectionCallsCheckbox.addListener(SWT.Selection, this);
+		statementCallsCheckbox.addListener(SWT.Selection, this);
+		resultSetCallsCheckbox.addListener(SWT.Selection, this);
+		driverConfigurationCheckbox.addListener(SWT.Selection, this);
+		connectsCheckbox.addListener(SWT.Selection, this);
+		drdaFlowsCheckbox.addListener(SWT.Selection, this);
+		resultsetMetadataCheckbox.addListener(SWT.Selection, this);
+		parameterMetadataCheckbox.addListener(SWT.Selection, this);
+		diagnosticsCheckbox.addListener(SWT.Selection, this);
+		sqlJCheckbox.addListener(SWT.Selection, this);
+		xaCallsCheckbox.addListener(SWT.Selection, this);
+		allButton.addListener(SWT.Selection, this);
+		noneButton.addListener(SWT.Selection, this);
+	}
+
+	private void removeListeners() {
+		disableTracingCheckbox.removeListener(SWT.Selection, this);
+		traceDirectoryText.removeListener(SWT.Modify, this);
+		browseDirectory.removeListener(SWT.Selection, this);
+		traceFileText.removeListener(SWT.Modify, this);
+		appendCheckbox.removeListener(SWT.Selection, this);
+		connectionCallsCheckbox.removeListener(SWT.Selection, this);
+		statementCallsCheckbox.removeListener(SWT.Selection, this);
+		resultSetCallsCheckbox.removeListener(SWT.Selection, this);
+		driverConfigurationCheckbox.removeListener(SWT.Selection, this);
+		connectsCheckbox.removeListener(SWT.Selection, this);
+		drdaFlowsCheckbox.removeListener(SWT.Selection, this);
+		resultsetMetadataCheckbox.removeListener(SWT.Selection, this);
+		parameterMetadataCheckbox.removeListener(SWT.Selection, this);
+		diagnosticsCheckbox.removeListener(SWT.Selection, this);
+		sqlJCheckbox.removeListener(SWT.Selection, this);
+		xaCallsCheckbox.removeListener(SWT.Selection, this);
+		allButton.removeListener(SWT.Selection, this);
+		noneButton.removeListener(SWT.Selection, this);
+	}
+
+	public void handleEvent(Event event) {
+		Widget source = event.widget;
+		if (isReadOnly){
+			if ((source == disableTracingCheckbox)
+				|| 	(source == appendCheckbox)
+				|| 	(source == connectionCallsCheckbox)
+				|| 	(source == statementCallsCheckbox)
+				|| 	(source == resultSetCallsCheckbox)
+				|| 	(source == driverConfigurationCheckbox)
+				|| 	(source == connectsCheckbox)
+				|| 	(source == drdaFlowsCheckbox)
+				|| 	(source == resultsetMetadataCheckbox)
+				|| 	(source == parameterMetadataCheckbox)
+				|| 	(source == diagnosticsCheckbox)
+				|| 	(source == sqlJCheckbox)
+				|| 	(source == xaCallsCheckbox)			
+			){
+				((Button)source).setSelection(!((Button)source).getSelection());
+			}	
+		} else {
+			if (source == disableTracingCheckbox) {
+				enableTracingUI(!disableTracingCheckbox.getSelection());
+			} else if (source == allButton) {
+				setAllLevelsChecked(true);
+			} else if (source == noneButton) {
+				setAllLevelsChecked(false);
+			} else if (source == browseDirectory) {
+				DirectoryDialog dialog = new DirectoryDialog(browseDirectory
+						.getShell(), SWT.OPEN);
+				dialog.setFilterPath(traceDirectoryText.getText().trim());
+				String directory = dialog.open();
+				if (directory != null) {
+					traceDirectoryText.setText(directory);
+				}
+			}
+			parentDriverProvider.updateURL();
+			parentDriverProvider.setConnectionInformation();
+		}
+	}
+
+	private void setAllLevelsChecked(boolean check) {
+		connectionCallsCheckbox.setSelection(check);
+		statementCallsCheckbox.setSelection(check);
+		resultSetCallsCheckbox.setSelection(check);
+		driverConfigurationCheckbox.setSelection(check);
+		connectsCheckbox.setSelection(check);
+		drdaFlowsCheckbox.setSelection(check);
+		resultsetMetadataCheckbox.setSelection(check);
+		parameterMetadataCheckbox.setSelection(check);
+		diagnosticsCheckbox.setSelection(check);
+		sqlJCheckbox.setSelection(check);
+		xaCallsCheckbox.setSelection(check);
+	}
+
+	public boolean validateControl(DialogPage page) {
+		boolean isValid = true;
+		if (!disableTracingCheckbox.getSelection()) {
+			if ((traceDirectoryText.getText() == null)
+					|| (traceDirectoryText.getText().trim().length() < 1)) { //$NON-NLS-1$
+				page.setErrorMessage(CUI_NEWCW_ENTER_DIRECTORY_MESSAGE_UI_);
+				isValid = false;
+			} else if (!isDirectoryValid(traceDirectoryText.getText().trim())) {
+				page
+						.setErrorMessage(CUI_NEWCW_ENTER_VALID_DIRECTORY_MESSAGE_UI_);
+				isValid = false;
+			} else if ((traceFileText.getText() == null)
+					|| (traceFileText.getText().trim().length() < 1)) { //$NON-NLS-1$
+				page.setErrorMessage(CUI_NEWCW_ENTER_FILE_MESSAGE_UI_);
+				isValid = false;
+			} else if (!isTraceLevelSelected()) {
+				page.setErrorMessage(CUI_NEWCW_SELECT_TRACE_LEVEL_MESSAGE_UI_);
+				isValid = false;
+			}
+		}
+		return isValid;
+	}
+
+	private boolean isDirectoryValid(String directory) {
+		boolean isDirectoryValid = false;
+		File file = new File(directory);
+		if (file.exists() && file.isDirectory()) {
+			isDirectoryValid = true;
+		}
+		return isDirectoryValid;
+	}
+
+	public boolean isTraceLevelSelected() {
+		boolean isSelected = false;
+		if (!getTraceLevel().equals(TRACE_LEVEL_TRACE_NONE_PROPERTY_VALUE)) {
+			isSelected = true;
+		}
+		return isSelected;
+	}
+
+	public String getTracingURLProperties() {
+		String properties = ""; //$NON-NLS-1$
+		if (!disableTracingCheckbox.getSelection()) {
+			String traceDirectory = traceDirectoryText.getText().trim();
+			String traceFile = traceFileText.getText().trim();
+			String append = appendCheckbox.getSelection() ? TRACE_FILE_APPEND_TRUE_PROPERTY_VALUE
+					: TRACE_FILE_APPEND_FALSE_PROPERTY_VALUE;
+			String traceLevel = getTraceLevel();
+
+			properties = TRACE_FILE_PROPERTY_NAME + "=" + traceFile + ";" //$NON-NLS-1$ //$NON-NLS-2$
+					+ TRACE_FILE_APPEND_PROPERTY_NAME + "=" + append + ";" //$NON-NLS-1$ //$NON-NLS-2$
+					+ TRACE_LEVEL_PROPERTY_NAME + "=" + traceLevel + ";" //$NON-NLS-1$ //$NON-NLS-2$
+					+ TRACE_DIRECTORY_PROPERTY_NAME + "=" + traceDirectory //$NON-NLS-1$
+					+ ";"; //$NON-NLS-1$
+		}
+		return properties;
+	}
+
+	private String getTraceLevel() {
+		String traceLevelString = TRACE_LEVEL_TRACE_NONE_PROPERTY_VALUE;
+		int traceLevel = 0;
+		if (connectionCallsCheckbox.getSelection()) {
+			traceLevel += 1;
+		}
+		if (statementCallsCheckbox.getSelection()) {
+			traceLevel += 2;
+		}
+		if (resultSetCallsCheckbox.getSelection()) {
+			traceLevel += 4;
+		}
+		if (driverConfigurationCheckbox.getSelection()) {
+			traceLevel += 16;
+		}
+		if (connectsCheckbox.getSelection()) {
+			traceLevel += 32;
+		}
+		if (drdaFlowsCheckbox.getSelection()) {
+			traceLevel += 64;
+		}
+		if (resultsetMetadataCheckbox.getSelection()) {
+			traceLevel += 128;
+		}
+		if (parameterMetadataCheckbox.getSelection()) {
+			traceLevel += 256;
+		}
+		if (diagnosticsCheckbox.getSelection()) {
+			traceLevel += 512;
+		}
+		if (sqlJCheckbox.getSelection()) {
+			traceLevel += 1024;
+		}
+		if (xaCallsCheckbox.getSelection()) {
+			traceLevel += 2048;
+		}
+		if (traceLevel == 4087) {
+			traceLevel = -1; // Trace All
+		}
+		traceLevelString = Integer.toString(traceLevel);
+		return traceLevelString;
+	}
+
+	private void setTraceLevel(String traceLevelString) {
+		int traceLevel = Integer.parseInt(traceLevelString);
+		if (traceLevel == -1) {
+			setAllLevelsChecked(true); // Trace All
+		} else {
+			connectionCallsCheckbox.setSelection(((traceLevel & 1) != 0));
+			statementCallsCheckbox.setSelection(((traceLevel & 2) != 0));
+			resultSetCallsCheckbox.setSelection(((traceLevel & 4) != 0));
+			driverConfigurationCheckbox.setSelection(((traceLevel & 16) != 0));
+			connectsCheckbox.setSelection(((traceLevel & 32) != 0));
+			drdaFlowsCheckbox.setSelection(((traceLevel & 64) != 0));
+			resultsetMetadataCheckbox.setSelection(((traceLevel & 128) != 0));
+			parameterMetadataCheckbox.setSelection(((traceLevel & 256) != 0));
+			diagnosticsCheckbox.setSelection(((traceLevel & 512) != 0));
+			sqlJCheckbox.setSelection(((traceLevel & 1024) != 0));
+			xaCallsCheckbox.setSelection(((traceLevel & 2048) != 0));
+		}
+	}
+
+	public void loadProperties(String properties) {
+		removeListeners();
+		URLPropertiesParser propertyParser = new URLPropertiesParser(properties);
+		if (propertyParser.isTracingEnabled()) {
+			disableTracingCheckbox.setSelection(false);
+			enableTracingUI(true);
+			traceDirectoryText.setText(propertyParser.getTraceDirectory());
+			traceFileText.setText(propertyParser.getTraceFile());
+			appendCheckbox.setSelection(propertyParser.getTraceFileAppend()
+					.equals(TRACE_FILE_APPEND_TRUE_PROPERTY_VALUE));
+			setTraceLevel(propertyParser.getTraceLevel());
+		} else {
+			disableTracingCheckbox.setSelection(true);
+			enableTracingUI(false);
+			traceDirectoryText.setText(""); //$NON-NLS-1$
+			traceFileText.setText(""); //$NON-NLS-1$
+			restoreDefaultSettings();
+		}
+		addListeners();
+	}
+
+	private class URLPropertiesParser {
+		private String properties = ""; //$NON-NLS-1$
+
+		public URLPropertiesParser(String properties) {
+			this.properties = properties;
+		}
+
+		public String getTraceDirectory() {
+			String traceDirectory = ""; //$NON-NLS-1$
+			int beginningIndex = properties
+					.lastIndexOf(TRACE_DIRECTORY_PROPERTY_NAME)
+					+ TRACE_DIRECTORY_PROPERTY_NAME.length() + 1;
+			int endingIndex = properties.indexOf(";", beginningIndex); //$NON-NLS-1$
+			traceDirectory = properties.substring(beginningIndex, endingIndex);
+			return traceDirectory;
+		}
+
+		public String getTraceFile() {
+			String traceFile = ""; //$NON-NLS-1$
+			int beginningIndex = properties
+					.lastIndexOf(TRACE_FILE_PROPERTY_NAME + "=") //$NON-NLS-1$
+					+ TRACE_FILE_PROPERTY_NAME.length() + 1;
+			int endingIndex = properties.indexOf(";", beginningIndex); //$NON-NLS-1$
+			traceFile = properties.substring(beginningIndex, endingIndex);
+			return traceFile;
+		}
+
+		public String getTraceFileAppend() {
+			String traceFile = ""; //$NON-NLS-1$
+			int beginningIndex = properties
+					.lastIndexOf(TRACE_FILE_APPEND_PROPERTY_NAME)
+					+ TRACE_FILE_APPEND_PROPERTY_NAME.length() + 1;
+			int endingIndex = properties.indexOf(";", beginningIndex); //$NON-NLS-1$
+			traceFile = properties.substring(beginningIndex, endingIndex);
+			return traceFile;
+		}
+
+		public String getTraceLevel() {
+			String traceLevel = ""; //$NON-NLS-1$
+			int beginningIndex = properties
+					.lastIndexOf(TRACE_LEVEL_PROPERTY_NAME)
+					+ TRACE_LEVEL_PROPERTY_NAME.length() + 1;
+			int endingIndex = properties.indexOf(";", beginningIndex); //$NON-NLS-1$
+			traceLevel = properties.substring(beginningIndex, endingIndex);
+			return traceLevel;
+		}
+
+		public boolean isTracingEnabled() {
+			boolean isTracingEnabled = false;
+			if (properties.indexOf(TRACE_LEVEL_PROPERTY_NAME) >= 0) {
+				isTracingEnabled = true;
+			}
+			return isTracingEnabled;
+		}
+	}
+
+	private void restoreDefaultSettings() {
+		setAllLevelsChecked(false);
+		connectionCallsCheckbox.setSelection(true);
+		traceDirectoryText.setText(System.getProperty("user.home")); //$NON-NLS-1$
+		traceFileText.setText(CUI_NEWCW_DEFAULT_TRACE_FILE_NAME_UI_);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.ui/src/org/eclipse/datatools/enablement/ibm/internal/ui/drivers/IIBMJDBCDriverProvider.java b/plugins/org.eclipse.datatools.enablement.ibm.ui/src/org/eclipse/datatools/enablement/ibm/internal/ui/drivers/IIBMJDBCDriverProvider.java
new file mode 100644
index 0000000..babca29
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.ui/src/org/eclipse/datatools/enablement/ibm/internal/ui/drivers/IIBMJDBCDriverProvider.java
@@ -0,0 +1,14 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.internal.ui.drivers;
+
+public interface IIBMJDBCDriverProvider {
+	public void setConnectionInformation();
+	public void updateURL();
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.ui/src/org/eclipse/datatools/enablement/ibm/internal/ui/drivers/Messages.java b/plugins/org.eclipse.datatools.enablement.ibm.ui/src/org/eclipse/datatools/enablement/ibm/internal/ui/drivers/Messages.java
new file mode 100644
index 0000000..c15a623
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.ui/src/org/eclipse/datatools/enablement/ibm/internal/ui/drivers/Messages.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.internal.ui.drivers;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+public class Messages {
+	private static final String BUNDLE_NAME = "org.eclipse.datatools.enablement.ibm.internal.ui.drivers.messages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private Messages() {
+	}
+
+	public static String getString(String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm.ui/src/org/eclipse/datatools/enablement/ibm/internal/ui/drivers/messages.properties b/plugins/org.eclipse.datatools.enablement.ibm.ui/src/org/eclipse/datatools/enablement/ibm/internal/ui/drivers/messages.properties
new file mode 100644
index 0000000..03be0f8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm.ui/src/org/eclipse/datatools/enablement/ibm/internal/ui/drivers/messages.properties
@@ -0,0 +1,47 @@
+###############################################################################
+# Copyright (c) 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+
+#
+## IBM driver tracing support
+#
+
+CUI_NEWCW_DRIVER_OPTIONS_TAB_UI_ = General
+CUI_NEWCW_TRACING_OPTIONS_TAB_UI_ = Tracing
+
+CUI_NEWCW_DISABLE_TRACING_CHECKBOX_UI_ = Disable tracin&g
+CUI_NEWCW_TRACE_DIRECTORY_LABEL_UI_ = Di&rectory:
+CUI_NEWCW_TRACE_DIRECTORY_BROWSE_BUTTON_UI_ = Bro&wse...
+CUI_NEWCW_TRACE_FILE_LABEL_UI_ = File na&me:
+CUI_NEWCW_DEFAULT_TRACE_FILE_NAME_UI_ = trace
+CUI_NEWCW_APPEND_CHECKBOX_UI_ = Append
+CUI_NEWCW_TRACE_LEVELS_GROUPBOX_UI_ = Trace levels
+
+CUI_NEWCW_CONNECTION_CALLS_CHECKBOX_UI_ = Connection calls
+CUI_NEWCW_STATEMENT_CALLS_CHECKBOX_UI_ = Statement ca&lls
+CUI_NEWCW_RESULT_SET_CALLS_CHECKBOX_UI_ = Result set calls
+CUI_NEWCW_DRIVER_CONFIGURATION_CHECKBOX_UI_ = Driver configuration
+CUI_NEWCW_CONNECTS_CHECKBOX_UI_ = Connects
+CUI_NEWCW_DRDA_FLOWS_CHECKBOX_UI_ = DRDA flows
+CUI_NEWCW_RESULT_SET_METADATA_CHECKBOX_UI_ = Result set metadata
+CUI_NEWCW_PARAMETER_METADATA_CHECKBOX_UI_ = Parameter metadata
+CUI_NEWCW_DIAGNOSTICS_CHECKBOX_UI_ = Diagnostics
+CUI_NEWCW_SQLJ_CHECKBOX_UI_ = SQL J
+CUI_NEWCW_XA_CALLS_CHECKBOX_UI_ = XA calls
+CUI_NEWCW_SELECT_ALL_BUTTON_UI_ = Select &All
+CUI_NEWCW_DESELECT_ALL_BUTTON_UI_ = &Deselect All
+
+CUI_NEWCW_ENTER_DIRECTORY_MESSAGE_UI_ = Enter a directory.
+CUI_NEWCW_ENTER_VALID_DIRECTORY_MESSAGE_UI_ = Enter a valid directory.
+CUI_NEWCW_ENTER_FILE_MESSAGE_UI_ = Enter a file name.
+CUI_NEWCW_SELECT_TRACE_LEVEL_MESSAGE_UI_ = Select at least one trace level.
+
+
+
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/.classpath b/plugins/org.eclipse.datatools.enablement.ibm/.classpath
new file mode 100644
index 0000000..1fa3e68
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/.project b/plugins/org.eclipse.datatools.enablement.ibm/.project
new file mode 100644
index 0000000..138fb07
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.ibm</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.enablement.ibm/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..69d7466
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/META-INF/MANIFEST.MF
@@ -0,0 +1,23 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.datatools.enablement.ibm;singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Activator: org.eclipse.datatools.enablement.ibm.IBMPluginActivator
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.datatools.connectivity,
+ org.eclipse.datatools.connectivity.sqm.core,
+ org.eclipse.datatools.modelbase.sql,
+ org.eclipse.datatools.modelbase.sql.query,
+ org.eclipse.datatools.sqltools.parsers.sql,
+ org.eclipse.datatools.sqltools.parsers.sql.query,
+ org.eclipse.emf.ecore.change,
+ org.eclipse.emf.ecore.xmi
+Export-Package: org.eclipse.datatools.enablement.ibm,
+ org.eclipse.datatools.enablement.ibm.catalog,
+ org.eclipse.datatools.enablement.ibm.catalog.util,
+ org.eclipse.datatools.enablement.ibm.ddl,
+ org.eclipse.datatools.enablement.ibm.util
+Bundle-ActivationPolicy: lazy
+Bundle-Vendor: %providerName
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/about.html b/plugins/org.eclipse.datatools.enablement.ibm/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/build.properties b/plugins/org.eclipse.datatools.enablement.ibm/build.properties
new file mode 100644
index 0000000..cdd2db7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/build.properties
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               about.html,\
+               plugin.properties
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/plugin.properties b/plugins/org.eclipse.datatools.enablement.ibm/plugin.properties
new file mode 100644
index 0000000..8958050
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/plugin.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2014 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName=Eclipse Data Tools Platform IBM Plug-in
+providerName=Eclipse Data Tools Platform
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/IBMPluginActivator.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/IBMPluginActivator.java
new file mode 100644
index 0000000..005afce
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/IBMPluginActivator.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentService;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinitionRegistry;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+
+public class IBMPluginActivator extends Plugin {
+
+    private static IBMPluginActivator instance;
+    public static final String PLUGIN_ID = "org.eclipse.datatools.enablement.ibm"; //$NON-NLS-1$
+    
+    public static final String PRIVILEGE_PROPERTY = "PRIVILEGE_PROPERTY"; //$NON-NLS-1$
+    public static final String PRIVILEGE_SYSTEM_GRANT = "PRIVILEGE_SYSTEM_GRANT"; //$NON-NLS-1$
+    
+    public static IBMPluginActivator getInstance() { return instance; }
+
+    public IBMPluginActivator() {
+        super();
+        instance = this;
+    }
+    
+    public DatabaseDefinitionRegistry getDatabaseDefinitionRegistry()
+    {
+        return RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry();
+    }
+    
+    public ContainmentService getContainmentService()
+    {
+        return RDBCorePlugin.getDefault().getContainmentService();
+    }
+    
+    public static void log( Throwable e )
+    {
+        getInstance().getLog().log( (e instanceof CoreException)
+                ? ((CoreException)e).getStatus()
+                : new Status( IStatus.ERROR, PLUGIN_ID, IStatus.OK, e.getMessage(), e ) );
+    }
+    
+    /**
+     * Method writeLog.
+     * @param severity - the severity; one of IStatus.OK, IStatus.ERROR, IStatus.INFO, or IStatus.WARNING
+     * @param code - the plug-in-specific status code, or OK
+     * @param message - a human-readable message, localized to the current locale
+     * @param exception a low-level exception, or null if not applicable
+     */
+    public void writeLog(int severity, int code, String message, Throwable exception) {
+       if (message == null)
+          message = ""; //$NON-NLS-1$
+
+       getLog().log(
+             new Status(severity, getBundle().getSymbolicName(), code, message, exception));
+    }
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/catalog/ICatalogAuthorizationIdentifier.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/catalog/ICatalogAuthorizationIdentifier.java
new file mode 100644
index 0000000..8c2c9e4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/catalog/ICatalogAuthorizationIdentifier.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.catalog;
+
+import org.eclipse.emf.common.util.EList;
+
+public interface ICatalogAuthorizationIdentifier {
+	public EList getCatalogReceivedPrivileges();
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/catalog/IDatabaseObject.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/catalog/IDatabaseObject.java
new file mode 100644
index 0000000..afa426f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/catalog/IDatabaseObject.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.catalog;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+
+public interface IDatabaseObject {
+	public final int IMPACTS = 0;
+	public final int STATISTICS = 1;
+	
+	public ICatalogObject[] getImpacted();
+	public Collection getStatistics();
+	public void refresh(int refreshType);
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/catalog/util/CatalogLoadUtil.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/catalog/util/CatalogLoadUtil.java
new file mode 100644
index 0000000..3b293c7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/catalog/util/CatalogLoadUtil.java
@@ -0,0 +1,453 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.catalog.util;
+
+import java.io.IOException;
+import java.io.LineNumberReader;
+import java.io.PrintWriter;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.text.MessageFormat;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentService;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.enablement.ibm.IBMPluginActivator;
+import org.eclipse.datatools.enablement.ibm.util.ModelHelper;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.IndexMember;
+import org.eclipse.datatools.modelbase.sql.constraints.PrimaryKey;
+import org.eclipse.datatools.modelbase.sql.constraints.SQLConstraintsPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.ENamedElement;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class CatalogLoadUtil
+{
+	public static final String EMPTY = ""; //$NON-NLS-1$
+
+	private static final String CONTEXT_GET_USERNAME = "getUserName"; //$NON-NLS-1$
+
+	public static void load(EObject obj, IProgressMonitor monitor, int task)
+	{
+		loadInternal(obj, monitor, task, true);
+
+		Iterator it = obj.eClass().getEAllStructuralFeatures().iterator();
+		while(it.hasNext() ) {
+			EStructuralFeature feature = (EStructuralFeature) it.next();
+
+			if (isRequired(feature))
+				obj.eGet(feature);
+		}				
+	}
+
+	public static void loadWithoutAttributes(EObject obj, IProgressMonitor monitor, int task)
+	{
+		loadInternal(obj, monitor, task, false);
+
+		Iterator it = obj.eClass().getEAllReferences().iterator();
+		while(it.hasNext() && !monitor.isCanceled()) {
+			EStructuralFeature feature = (EStructuralFeature) it.next();
+
+			if(isRequired(feature))
+				obj.eGet(feature);
+		}				
+	}
+
+	public static double loadInternal( EObject object, IProgressMonitor monitor, double task, boolean includingAttributes)
+	{
+		ContainmentService containmentService = RDBCorePlugin.getDefault().getContainmentService();
+		Collection c = containmentService.getContainedElements(object);
+		Connection connection = object instanceof ICatalogObject ? ((ICatalogObject)object).getConnection() : null;
+        
+		double acc = 0;
+
+		if(c.size() != 0) {
+			double delta = task/c.size();
+
+			Iterator it = c.iterator();
+			while(it.hasNext() && !monitor.isCanceled()) {
+				EObject child = (EObject) it.next();
+
+				if(containmentService.isDisplayableElement(child)) {
+					if(child instanceof ENamedElement) {
+						String name = ((ENamedElement) child).getName();
+
+						if(name != null) {
+//							String type = IDataToolsUIServiceManager.INSTANCE.getLabelService(child).getDisplayType();
+							String type = child.eClass().getName();
+							name = "<" + type + "> " + name;  //$NON-NLS-1$//$NON-NLS-2$
+//bgp							monitor.subTask(Messages.LOADING_SUBTASK + "  " + name); //$NON-NLS-1$
+						}
+					}
+				}
+
+				acc += loadInternal(child, monitor, delta, includingAttributes);
+
+/*
+				try
+                {
+                    if (monitor.isCanceled() || connection != null && connection.isClosed())
+                    {
+                        monitor.setCanceled(true);
+                        return 0.0;
+                    }
+                }
+                catch (SQLException e)
+                {
+                    return 0.0;
+                }
+				if(acc >= 1.0) {
+					monitor.worked((int) acc);			
+					acc = acc - (int) acc;
+				}
+*/
+			}
+		}
+		else {
+			acc = task;
+		}
+
+		if ( includingAttributes ) {
+			Iterator it = object.eClass().getEAllStructuralFeatures().iterator();
+			while ( it.hasNext()) {
+				EStructuralFeature feature = (EStructuralFeature) it.next();
+
+				if(isRequired(feature))
+					object.eGet(feature);
+			}
+		}
+		else {
+			Iterator it = object.eClass().getEAllReferences().iterator();
+			while ( it.hasNext()) {
+				EStructuralFeature feature = (EStructuralFeature) it.next();
+
+				if(isRequired(feature))
+					object.eGet(feature);
+			}
+		}
+		return acc;
+	}
+	
+	public static void generateImplicitPK(Database database)
+	{
+		for (Iterator iterS = database.getSchemas().iterator();iterS.hasNext();){
+			Schema schema = (Schema) iterS.next();
+
+			for (Iterator iterT = schema.getTables().iterator();iterT.hasNext();) {
+				Table table = (Table) iterT.next();
+
+				if (table instanceof BaseTable) {
+					generateImplicitPK((BaseTable)table);
+				}
+			}
+		}
+	}
+	
+	private static boolean isRequired(EStructuralFeature feature) {
+		//Hard-coded Exceptions
+		//Nickname ---> RemoteDataSet
+		if ( feature.getEContainingClass().getName().equals("LUWNickname")) { //$NON-NLS-1$
+			if ( feature.getName().equals("remoteDataSet")) //$NON-NLS-1$
+				return false;
+		}
+		
+		if (feature.isDerived() || feature.isTransient())
+			return false;
+
+		return true;
+	}
+	
+	private static void generateImplicitPK(BaseTable table){
+		PrimaryKey pk = table.getPrimaryKey();
+		if ( pk != null)
+			return;
+		
+		Iterator iter = table.getIndex().iterator();
+		while ( iter.hasNext()) {
+			Index index = (Index) iter.next();
+
+			if (index.isUnique()) {
+				generateImplictPK(table,index);
+
+				break;
+			}
+		}
+	}
+	
+    private static void generateImplictPK(BaseTable table,Index index){
+    	Schema schema = table.getSchema();
+		Database database = ModelHelper.getDatabase(schema);
+		DatabaseDefinition databaseDefinition = IBMPluginActivator.getInstance().getDatabaseDefinitionRegistry().getDefinition(database);
+		DataModelElementFactory factory = databaseDefinition.getDataModelElementFactory();
+
+		PrimaryKey pk = (PrimaryKey)factory.create(SQLConstraintsPackage.eINSTANCE.getPrimaryKey());
+		pk.setEnforced(false);
+
+		EList pkMember = pk.getMembers();
+		for ( Iterator iter = index.getMembers().iterator(); iter.hasNext();){
+			Column column = ((IndexMember) iter.next()).getColumn();
+			if ( column == null) {
+				return;
+			}
+			pkMember.add(column);
+		}
+		
+//bgp		String name = ImplicitRelationshipHandler.INSTANCE.createUniqueConstraintName(table.getConstraints(), PreferenceUtil.getExpandedPKString(table));
+//bgp		pk.setName(name);
+
+		table.getConstraints().add(pk);
+    }
+	
+	public static String getFilterString(String predicate, String parameter){
+		String filter = EMPTY;
+		String pattern = "\\{"; //$NON-NLS-1$
+
+		int occurrences = predicate.length() - predicate.toLowerCase().replaceAll(pattern.toLowerCase(), EMPTY).length();
+
+		if (occurrences > 0) {
+			Object[] params = new Object[ occurrences ];
+
+			for (int i = 0; i<params.length; i++) {
+				params[i] = parameter;
+			}
+
+			filter = MessageFormat.format( predicate.replaceAll( "'", "''" ), params); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		else {
+			filter = parameter + " " + predicate; //$NON-NLS-1$
+		}
+		
+		return "(" + filter + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+	public static String parsePredicateFromReqList( //
+			String reqList, String schemaCol, String nameCol, //
+			@SuppressWarnings ("unused") String filterVal)
+	{	
+		// Create a set of required objects from the various lists, remove duplicates
+		Map<String,Set<String>> objectMap = new HashMap<String,Set<String>>();
+
+		StringTokenizer listTokenizer = new StringTokenizer(reqList, "||"); //$NON-NLS-1$
+
+		while (listTokenizer.hasMoreTokens()) {
+			String fromList = listTokenizer.nextToken();
+
+			fromList = removeTag(fromList);
+
+			StringTokenizer objTokenizer = new StringTokenizer(fromList, ","); //$NON-NLS-1$
+
+			while (objTokenizer.hasMoreTokens()) {
+				addObjectToMap(objTokenizer.nextToken(), objectMap);
+			}
+		}
+		
+		// Return early if no objects are required
+		if (objectMap.size() == 0) {
+			return EMPTY;
+		}
+		
+		// Format set of objects into an IN-list predicate
+		StringBuilder predicate = new StringBuilder();
+		Set<String> schemas = objectMap.keySet();
+
+		for (String schema : schemas) {
+			predicate.append( "(" ); //$NON-NLS-1$
+			predicate.append( schemaCol + "='" + schema + "' AND " + nameCol + " IN (" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+
+			for (String name : objectMap.get(schema)) {
+				predicate.append( "'" + name + "'," ); //$NON-NLS-1$ //$NON-NLS-2$
+			}
+
+			predicate.setLength(predicate.length()-1); // Remove trailing comma
+			predicate.append(")) OR "); //$NON-NLS-1$
+		}
+
+		if (predicate.length() == 0) {
+			return EMPTY;
+		}
+
+		predicate.setLength(predicate.length()-4); // Remove trailing comma
+
+		return predicate.toString();
+	}
+
+	private static void addObjectToMap(String obj, Map<String,Set<String>> objectMap) {
+		String[] elms = obj.split("\\."); //$NON-NLS-1$
+		if (elms.length != 2) {
+			return;
+		}
+		
+		String schema = elms[0];
+		String name = elms[1];
+
+		Set<String> objectSet = objectMap.get(schema);
+
+		if (objectSet == null) {
+			objectSet = new HashSet<String>();
+			objectMap.put(schema, objectSet);
+		}
+
+		objectSet.add(name);
+	}
+
+	private static String removeTag(String fromList) {
+		return fromList.substring( fromList.indexOf( ']' ) + 1 );
+	}
+
+	public static void safeClose( ResultSet rs )
+	{
+		try
+		{
+			if ( rs != null )
+			{
+				rs.close();
+			}
+		}
+		catch (SQLException e)
+		{
+			// eat it
+		}
+	}
+
+	public static void safeClose( Statement stmt, ResultSet rs )
+	{
+		safeClose( rs );
+
+		try
+		{
+			if ( stmt != null )
+			{
+				stmt.close();
+			}
+		}
+		catch (SQLException e)
+		{
+			// eat it
+		}
+	}
+
+//<bgp	/**
+//	 * Gets the user name in the connection or from CURRENT USER if the
+//	 * connection user name is null.
+//	 */
+//	public static String getUserName( Connection connection, Database database )
+//	{
+//		String userName = null;
+//
+//		try
+//		{
+//			if ( connection != null && connection.getMetaData() != null )
+//			{
+//				userName = connection.getMetaData().getUserName();
+//			}
+//		}
+//		catch (Exception e)
+//		{
+//			userName = null;
+//
+//			DB2PluginActivator.log( e );
+//		}
+//
+//		if ( userName == null || userName.trim().length() == 0 )
+//		{
+//			try
+//			{
+//				String query = "select CURRENT USER as USERNAME from sysibm.sysdummy1"; //$NON-NLS-1$
+//
+//				ResultSet r = new PersistentResultSet( database, CONTEXT_GET_USERNAME, connection, query );
+//
+//				try
+//				{
+//					if ( r.next() )
+//					{
+//						userName = r.getString( "USERNAME" ); //$NON-NLS-1$
+//					}
+//				}
+//				catch (Exception e)
+//				{
+//					// Eat it
+//				}
+//				finally
+//				{
+//					safeClose( r );
+//				}
+//			}
+//			catch (Exception e)
+//			{
+//				DB2PluginActivator.log( e );
+//			}
+//		}
+//
+//		return userName;
+//bgp>	}
+
+	public static String safeGetString( ResultSet r, String name ) //
+			throws SQLException
+	{
+		String s = r.getString( name );
+		
+		return (s != null)
+				? s
+				: EMPTY;
+	}
+
+	public static String safeGetTrimmedString( ResultSet r, String name ) //
+			throws SQLException
+	{
+		String s = r.getString( name );
+		
+		return (s != null)
+				? s.trim()
+				: EMPTY;
+	}
+
+	public static void safeClose( LineNumberReader lnr )
+	{
+		if ( lnr != null )
+		{
+			try
+			{
+				lnr.close();
+			}
+			catch (IOException e)
+			{
+				// eat it
+			}
+		}
+	}
+
+	public static void safeClose( PrintWriter pw )
+	{
+		if ( pw != null )
+		{
+			pw.close();
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/catalog/util/CatalogObjectEvent.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/catalog/util/CatalogObjectEvent.java
new file mode 100644
index 0000000..084793a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/catalog/util/CatalogObjectEvent.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.catalog.util;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+
+public class CatalogObjectEvent 
+{
+	public ICatalogObject element;
+	public EVENT_TYPE type;
+	
+	public enum EVENT_TYPE {
+		ELEMENT_REFRESH, ELEMENT_REUSE
+	}
+	
+	public CatalogObjectEvent(ICatalogObject element, EVENT_TYPE type)
+	{
+		this.element = element;
+		this.type = type;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/catalog/util/CatalogStatistics.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/catalog/util/CatalogStatistics.java
new file mode 100644
index 0000000..c8b4791
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/catalog/util/CatalogStatistics.java
@@ -0,0 +1,260 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.catalog.util;
+
+import java.math.BigInteger;
+import java.sql.Timestamp;
+import java.util.Collection;
+
+public class CatalogStatistics {
+
+	public static final byte BOOLEAN_TYPE = 0;
+	public static final byte INTEGER_TYPE = 1;
+	public static final byte STRING_TYPE  = 2;
+	public static final byte FLOAT_TYPE   = 3;
+	public static final byte BIGINT_TYPE  = 4;
+	public static final byte TIMESTAMP_TYPE  = 5;
+	public static final byte COLLECTION_TYPE  = 6;
+	
+	
+	public CatalogStatistics(String id,String name, String description, boolean initialValue, String syscatalog) {
+		this.init(id,name,description,initialValue,syscatalog);
+	}
+
+	public CatalogStatistics(String id,String name, String description, String initialValue,String syscatalog) {
+		this.init(id,name,description,initialValue,syscatalog);
+	}
+	
+	public CatalogStatistics(String id,String name, String description, int initialValue,String syscatalog) {
+		this.init(id,name,description,initialValue,syscatalog);
+	}
+
+	public CatalogStatistics(String id,String name, String description, float initialValue,String syscatalog) {
+		this.init(id,name,description,initialValue,syscatalog);
+	}
+	
+	public CatalogStatistics(String id,String name, String description, BigInteger initialValue,String syscatalog) {
+		this.init(id,name,description,initialValue,syscatalog);
+	}
+
+	public CatalogStatistics(String id,String name, String description, Timestamp initialValue,String syscatalog) {
+		this.init(id,name,description,initialValue,syscatalog);
+	}
+	
+	public CatalogStatistics(String id,String name, String description, Collection initialValue,String syscatalog) {
+		this.init(id,name,description,initialValue,syscatalog);
+	}
+
+	public String getId(){
+		return this.id;
+	}
+	public String  getName() {
+		return this.name;
+	}
+	
+	public String  getDescription() {
+		return this.desc;
+	}
+	
+	public String  getSyscatalog() {
+		return this.syscatalog;
+	}
+
+	public byte  getType() {
+		return this.type;
+	}
+	
+	public boolean getBoolean() {
+		if(this.type != CatalogStatistics.BOOLEAN_TYPE) throw new RuntimeException("Invalid Call"); //$NON-NLS-1$
+		return this.booleanValue;
+	}
+
+	public void setBoolean(boolean value) {
+		if(this.type != CatalogStatistics.BOOLEAN_TYPE) throw new RuntimeException("Invalid Call"); //$NON-NLS-1$
+		this.booleanValue = value;
+	}
+
+	public int getInt() {
+		if(this.type != CatalogStatistics.INTEGER_TYPE)throw new RuntimeException("Invalid Call"); //$NON-NLS-1$
+		return this.intValue;
+		
+	}
+
+	public void setInt(int value) {
+		if(this.type != CatalogStatistics.INTEGER_TYPE) throw new RuntimeException("Invalid Call"); //$NON-NLS-1$
+		this.intValue = value;		
+	}
+	
+	public String  getString() {
+		if(this.type != CatalogStatistics.STRING_TYPE) throw new RuntimeException("Invalid Call"); //$NON-NLS-1$
+		return this.stringValue;
+	}
+	
+	public void setString(String value) {
+		if(this.type != CatalogStatistics.STRING_TYPE) throw new RuntimeException("Invalid Call"); //$NON-NLS-1$
+		this.stringValue = value;
+	}
+
+	public float  getFloat() {
+		if(this.type != CatalogStatistics.FLOAT_TYPE) throw new RuntimeException("Invalid Call"); //$NON-NLS-1$
+		return this.floatValue;
+	}
+	
+	public void setFloat(float value) {
+		if(this.type != CatalogStatistics.FLOAT_TYPE) throw new RuntimeException("Invalid Call"); //$NON-NLS-1$
+		this.floatValue = value;
+	}
+
+	public BigInteger  getBiginteger() {
+		if(this.type != CatalogStatistics.BIGINT_TYPE) throw new RuntimeException("Invalid Call"); //$NON-NLS-1$
+		return this.bigIntegerValue;
+	}
+	
+	public void setBigInteger(BigInteger value) {
+		if(this.type != CatalogStatistics.BIGINT_TYPE) throw new RuntimeException("Invalid Call"); //$NON-NLS-1$
+		this.bigIntegerValue = value;
+	}
+
+	public Timestamp  getTimestamp() {
+		if(this.type != CatalogStatistics.TIMESTAMP_TYPE) throw new RuntimeException("Invalid Call"); //$NON-NLS-1$
+		return this.timestampValue;
+	}
+	
+	public void setTimestampr(Timestamp value) {
+		if(this.type != CatalogStatistics.TIMESTAMP_TYPE) throw new RuntimeException("Invalid Call"); //$NON-NLS-1$
+		this.timestampValue = value;
+	}
+
+	public Collection  getCollection() {
+		if(this.type != CatalogStatistics.COLLECTION_TYPE) throw new RuntimeException("Invalid Call"); //$NON-NLS-1$
+		return this.collectionValue;
+	}
+	
+	public void setComplex(Collection value) {
+		if(this.type != CatalogStatistics.COLLECTION_TYPE) throw new RuntimeException("Invalid Call"); //$NON-NLS-1$
+		this.collectionValue = value;
+	}
+
+	
+	private void init(String id,String name, String description, boolean initialValue,String syscatalog) {
+		this.type = CatalogStatistics.BOOLEAN_TYPE;
+		this.id = id;
+		this.name = name;
+		this.desc = description;
+		this.syscatalog = syscatalog;
+		this.booleanValue = initialValue;
+	}
+
+	public void init (String id,String name, String description, String initialValue,String syscatalog) {
+		this.type = CatalogStatistics.STRING_TYPE;
+		this.id = id;
+		this.name = name;
+		this.desc = description;
+		this.syscatalog = syscatalog;
+		this.stringValue = initialValue;
+	}
+	
+	public void init (String id,String name, String description, int initialValue,String syscatalog) {
+		this.type = CatalogStatistics.INTEGER_TYPE;
+		this.id = id;
+		this.name = name;
+		this.desc = description;
+		this.syscatalog = syscatalog;
+		this.intValue = initialValue;		
+	}
+
+	public void init (String id,String name, String description, float initialValue,String syscatalog) {
+		this.type = CatalogStatistics.FLOAT_TYPE;
+		this.id = id;
+		this.name = name;
+		this.desc = description;
+		this.syscatalog = syscatalog;
+		this.floatValue = initialValue;		
+	}
+
+	public void init (String id,String name, String description, BigInteger initialValue,String syscatalog) {
+		this.type = CatalogStatistics.BIGINT_TYPE;
+		this.id = id;
+		this.name = name;
+		this.desc = description;
+		this.syscatalog = syscatalog;
+		this.bigIntegerValue = initialValue;		
+	}
+
+	public void init (String id,String name, String description, Timestamp initialValue,String syscatalog) {
+		this.type = CatalogStatistics.TIMESTAMP_TYPE;
+		this.id = id;
+		this.name = name;
+		this.desc = description;
+		this.syscatalog = syscatalog;
+		this.timestampValue = initialValue;		
+	}
+
+	public void init (String id,String name, String description, Collection initialValue,String syscatalog) {
+		this.type = CatalogStatistics.COLLECTION_TYPE;
+		this.id = id;
+		this.name = name;
+		this.desc = description;
+		this.syscatalog = syscatalog;
+		this.collectionValue = initialValue;		
+	}
+
+	public String toString() {
+		switch (this.getType()) {
+		case CatalogStatistics.BOOLEAN_TYPE:
+			return Boolean.toString(this.booleanValue);
+		case CatalogStatistics.INTEGER_TYPE:
+			return Integer.toString(this.intValue);
+		case CatalogStatistics.STRING_TYPE:
+			return this.stringValue;
+		case CatalogStatistics.FLOAT_TYPE:
+			return Float.toString(this.floatValue);
+		case CatalogStatistics.TIMESTAMP_TYPE:
+			return this.timestampValue.toString();
+		case CatalogStatistics.BIGINT_TYPE:
+			return this.bigIntegerValue.toString();
+		}
+		return "";
+	}
+
+	public String getForBitData(){
+		return this.forBitData;
+	}
+	
+	public void setForBitData(String fotBitData) {
+		this.forBitData = fotBitData;
+	}
+	
+	public void setForBitDataFromNumeric() 
+	{
+		this.forBitDataFromNumeric = true;
+	}
+	
+	public boolean isForBitDataFromNumeric() 
+	{
+		return this.forBitDataFromNumeric;
+	}
+
+	private String id;
+	private String name;
+	private String desc;
+	private String syscatalog;
+	private boolean booleanValue;
+	private int intValue;
+	private String stringValue;
+	private float floatValue;
+	private BigInteger bigIntegerValue;
+	private Timestamp timestampValue;
+	private Collection collectionValue;
+	private byte type;
+	private String forBitData;
+	private boolean forBitDataFromNumeric = false;
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/catalog/util/ICatalogObjectEventListener.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/catalog/util/ICatalogObjectEventListener.java
new file mode 100644
index 0000000..d2ea2aa
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/catalog/util/ICatalogObjectEventListener.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.catalog.util;
+
+public interface ICatalogObjectEventListener 
+{
+	/**
+	 * 
+	 * @param event, encapsulates the object type and the event
+	 * that triggered the notification
+	 */
+	public void notifyChanged(CatalogObjectEvent event);
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/catalog/util/ICatalogQuery.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/catalog/util/ICatalogQuery.java
new file mode 100644
index 0000000..e98c557
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/catalog/util/ICatalogQuery.java
@@ -0,0 +1,135 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.catalog.util;
+
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.emf.ecore.EObject;
+
+public interface ICatalogQuery
+{
+	public void setContext( String context );
+
+	/**
+	 * TODO obsolete Generate a query string, using the configured on-demand
+	 * option, filter columns and values.
+	 * 
+	 * @param database
+	 *            Database to be queried
+	 * @deprecated Use generateOnDemandQuery() or generateUpFrontQuery() instead
+	 */
+	public String generateQuery( Database database );
+
+	/**
+	 * Generate a query string, using the configured filter columns and values.
+	 * 
+	 * @param database
+	 *            Database to be queried
+	 * @return Query string to execute
+	 */
+	public String generateOnDemandQuery( Database database );
+
+	/**
+	 * @return Number of result items that may be used to filter query results
+	 */
+	public int getFilterColumnCount();
+
+	/**
+	 * @return Names of result items to be used to filter results
+	 */
+	public String[] getFilterColumns();
+
+	/**
+	 * @param filterValues
+	 *            Values to be used to filter results
+	 */
+	public void setFilterValues( EObject eObject );
+
+	/**
+	 * @return Values to be used to filter results
+	 */
+	public String[] getFilterValues();
+
+	/**
+	 * Generate a query to retrieve all data
+	 * 
+	 * @param database
+	 *            Database to be queried
+	 * @return Query string without filtering.
+	 */
+	public String generateUpFrontQuery( Database database );
+
+	/**
+	 * TODO likely obsolete - Generate a query to retrieve all data, with
+	 * filters to exclude the subset of keys already loaded on-demand.
+	 * 
+	 * @param database
+	 *            Database to be queried
+	 * @param alreadyLoadedValues
+	 *            filter values to OMIT from the results
+	 * @return String representation of query to execute
+	 */
+	public String generateUpFrontQueryWithoutLoadedItems( //
+			Database database, String[] alreadyLoadedValues );
+
+	/**
+	 * @return true if we are capable of generating SQL that actually filters
+	 *         the query results. (Some implementations may always run upfront)
+	 */
+	public boolean canBeOnDemand();
+
+	/**
+	 * 
+	 * @return true if we are configured to filter the query results. otherwise
+	 *         the upfront base query will be executed to return all data
+	 */
+	public boolean useOnDemandQuery();
+
+	/**
+	 * 
+	 * @param useOnDemandQuery
+	 *            true to filter the query results. otherwise the upfront base
+	 *            query will be executed to return all data
+	 */
+	public void setUseOnDemandQuery( boolean useOnDemandQuery );
+
+	/**
+	 * SQL query returning the filter keys in the order they will be returned by
+	 * the main query.
+	 * 
+	 * @return Query if one is available, null otherwise
+	 */
+	public ICatalogQuery getOrderQuery();
+
+	/**
+	 * Check whether the specified query has been issued already; a check to
+	 * determine whether slice needs to be processed
+	 */
+	public boolean isQueryProcessed( Database database );
+
+	/**
+	 * An extra check to determined whether the given container Object is
+	 * compatible with the query to be issued.
+	 * 
+	 * For example, a Table may be expected and unexpected results may occur if
+	 * the filter value is not a Table object.
+	 * 
+	 * This may happen with a general feature that is applicable to a large set
+	 * of objects.
+	 * 
+	 * For example, SQLSchemaPackage.eINSTANCE.getSQLObject_Privileges (see
+	 * LUWTablePrivileges)
+	 * 
+	 * @param object
+	 *            Object to check
+	 * @return true if compatible, false otherwise
+	 */
+	public boolean isCompatibleWith( EObject object );
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/CodeTemplateContextPattern.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/CodeTemplateContextPattern.java
new file mode 100644
index 0000000..0b18eba
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/CodeTemplateContextPattern.java
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.ddl;
+
+public class CodeTemplateContextPattern {
+
+	private String name;
+	private String createProlog;
+	private String createPostlog;
+	private String dropProlog;
+	private String dropPostlog;
+	private int appliedType = 0;
+	
+	public String getName(){
+		return this.name;
+	}
+	
+	public void setName (String name) {
+		this.name = name;
+	}
+	
+	public int getAppliedType(){
+		return this.appliedType;
+	}
+	
+	public void setAppliedType(int type){
+		this.appliedType =  this.appliedType | type;
+	}
+	
+	public void setCreateProlog(String prolog){
+		this.createProlog = prolog;
+	}
+	
+	public String getCreateProlog(){
+		return this.createProlog;
+	}
+
+	public void setCreatePostlog(String postlog){
+		this.createPostlog = postlog;
+	}
+	
+	public String getCreatePostlog(){
+		return this.createPostlog;
+	}
+	
+	public void setDropProlog(String prolog){
+		this.dropProlog = prolog;
+	}
+	
+	public String getDropProlog(){
+		return this.dropProlog;
+	}
+
+	public void setDropPostlog(String postlog){
+		this.dropPostlog = postlog;
+	}
+	
+	public String getDropPostlog(){
+		return this.dropPostlog;
+	}
+	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/CoreDdlGenerator.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/CoreDdlGenerator.java
new file mode 100644
index 0000000..4aecdb8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/CoreDdlGenerator.java
@@ -0,0 +1,243 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.ddl;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.Set;
+import java.util.Vector;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.datatools.connectivity.sqm.core.rte.DDLGenerator;
+import org.eclipse.datatools.connectivity.sqm.core.rte.EngineeringOption;
+import org.eclipse.datatools.connectivity.sqm.core.rte.IEngineeringCallBack;
+import org.eclipse.datatools.enablement.ibm.catalog.ICatalogAuthorizationIdentifier;
+import org.eclipse.datatools.enablement.ibm.util.DependencyImpactAnalyst;
+import org.eclipse.datatools.enablement.ibm.util.DependencyImpactDescription;
+import org.eclipse.datatools.enablement.ibm.util.EngineeringOptionID;
+import org.eclipse.datatools.modelbase.sql.schema.Dependency;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.ecore.EObject;
+
+public abstract class CoreDdlGenerator implements DDLGenerator {
+	
+	protected Set<SQLObject> suppressCreateElementSet = null;
+	
+    /**
+     * @deprecated 
+    */
+    public String[] generateDDL(SQLObject[] elements, IProgressMonitor progressMonitor){
+        accessControlInitialize(elements,progressMonitor);
+        return this.generateDDL(elements, progressMonitor, null);
+    }
+    /**
+     * @deprecated 
+    */
+    public String[] createSQLObjects(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor){
+        return this.createSQLObjects(elements, quoteIdentifiers, qualifyNames, progressMonitor,null);
+    }
+    /**
+     * @deprecated 
+    */
+    public String[] dropSQLObjects(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor){
+        return this.dropSQLObjects(elements, quoteIdentifiers, qualifyNames, progressMonitor,null);
+    }
+
+	
+	public String[] generateDDL(SQLObject[] elements, SQLObject[] impacts, IProgressMonitor progressMonitor,IEngineeringCallBack callback){
+		accessControlInitialize(elements,progressMonitor);
+		Vector v = new Vector(Arrays.asList(elements));
+		Vector v_impacts = new Vector(Arrays.asList(impacts));
+		for (int i = 0; i < v_impacts.size(); i++){
+			SQLObject impact = (SQLObject) v_impacts.elementAt(i);
+			if (v.contains(impact)) continue;
+			this.calculateDependency(v, v_impacts, impact);
+		}
+
+		SQLObject[] allElements = new SQLObject[v.size()];
+		v.copyInto(allElements);
+		
+		return this.generateDDL(allElements, progressMonitor,callback);
+	}
+	
+    public String[] createSQLObjects(SQLObject[] elements, SQLObject[] impacts, IProgressMonitor progressMonitor,IEngineeringCallBack callback){
+		Vector v = new Vector(Arrays.asList(elements));
+		Vector v_impacts = new Vector(Arrays.asList(impacts));
+		for (int i = 0; i < v_impacts.size(); i++){
+			SQLObject impact = (SQLObject) v_impacts.elementAt(i);
+			if (v.contains(impact)) continue;
+			this.calculateDependency(v, v_impacts, impact);
+		}
+		SQLObject[] allElements = new SQLObject[v.size()];
+		v.copyInto(allElements);
+		EngineeringOption[] options = this.getOptions(allElements);
+    	return this.createSQLObjects(allElements, EngineeringOptionID.generateQuotedIdentifiers(options), EngineeringOptionID.generateFullyQualifiedNames(options), progressMonitor,callback);
+    	
+    }
+    public String[] dropSQLObjects(SQLObject[] elements, SQLObject[] impacts, IProgressMonitor progressMonitor,IEngineeringCallBack callback){
+		Vector v = new Vector(Arrays.asList(elements));
+		Vector v_impacts = new Vector(Arrays.asList(impacts));
+		for (int i = 0; i < v_impacts.size(); i++){
+			SQLObject impact = (SQLObject) v_impacts.elementAt(i);
+			if (v.contains(impact)) continue;
+			this.calculateDependency(v, v_impacts, impact);
+		}
+		SQLObject[] allElements = new SQLObject[v.size()];
+		v.copyInto(allElements);
+		EngineeringOption[] options = this.getOptions(allElements);
+    	return this.dropSQLObjects(allElements, EngineeringOptionID.generateQuotedIdentifiers(options), EngineeringOptionID.generateFullyQualifiedNames(options), progressMonitor,callback);
+    }
+	
+    public String[] alterTableDropColumn(SQLObject[] columns, SQLObject[] impacts, IProgressMonitor progressMonitor,IEngineeringCallBack callback){
+    	return null;
+    }
+    
+	private void calculateDependency(Vector v,Vector impacts, SQLObject currentImpact){
+		Iterator iter = currentImpact.getDependencies().iterator();
+		while (iter.hasNext()) {
+			Dependency dependency = (Dependency) iter.next();
+			SQLObject targetEnd = (SQLObject) dependency.getTargetEnd();
+			if (impacts.contains(targetEnd)) {
+				this.calculateDependency(v, impacts,targetEnd);
+			}
+		}
+		v.add(currentImpact);
+	}
+
+	protected boolean checkModel(SQLObject[] sqlObjects, EngineeringOption[] options) {
+		boolean ret = true;
+		if (! EngineeringOptionID.checkModel(options)) return ret;
+		
+		ModelValidationProvider provider = DdlGenerationUtility.getModelValidationProvider();
+		if (provider != null) {
+			ret = provider.checkModel(sqlObjects);
+		}
+		return ret;
+	}
+
+    protected EngineeringOption[] getSelectedOptions(SQLObject[] elements) {
+    	// Default behavior is to load options again.  Subclasses can cache options as necessary.
+       	return this.getOptions(elements);
+    }
+    
+	protected void accessControlInitialize(SQLObject[] elements,IProgressMonitor progressMonitor) {
+		EngineeringOption[] options = this.getSelectedOptions(elements);
+		for (int j=0;j<options.length;j++) {
+			if (options[j].getId().equals(EngineeringOptionID.GENERATE_PRIVILEGE)) {
+				if (options[j].getBoolean()) {
+					for (int i=0;i<elements.length;i++) {
+						SQLObject element = elements[i];
+						if (element instanceof ICatalogAuthorizationIdentifier) {
+							String type = element.eClass().getName();
+							String name = " <" + type + "> " + element.getName();  //$NON-NLS-1$//$NON-NLS-2$
+							progressMonitor.subTask(DdlGenerationMessages.LOADING_PRIVILEGES_PROGRESS + name);
+							((ICatalogAuthorizationIdentifier) element).getCatalogReceivedPrivileges();
+							progressMonitor.subTask(null);
+						}
+					}
+				}
+				else return;
+			}
+		}
+	}
+	
+	/**
+	 * Get the builder that is associated with the generator.
+	 * Subclass needs to override this method if needed.
+	 * @return
+	 */
+	public DdlBuilder getDdlBuilder() {
+		return null;
+	}
+	
+	
+	public void suppressCreate(SQLObject element) {
+		if (suppressCreateElementSet == null)
+			suppressCreateElementSet = new HashSet<SQLObject>();
+		suppressCreateElementSet.add(element);
+	}
+
+	public void suppressCreate(Set<SQLObject> elements) {
+		if (suppressCreateElementSet == null)
+			suppressCreateElementSet = new HashSet<SQLObject>();
+		suppressCreateElementSet.addAll(elements);
+	}
+	
+	protected Set<SQLObject> removeCreateSuppressedElements(Set<SQLObject> elements) {
+		if (suppressCreateElementSet == null) return elements;
+		elements.removeAll(suppressCreateElementSet);
+		return elements;
+	}
+	
+	protected Set sortDependency(Collection set){
+        LinkedHashSet sorted = new LinkedHashSet();
+        for (Iterator iter= set.iterator(); iter.hasNext();){
+            dependencySorting(sorted,set,(EObject)iter.next());
+        }
+        return sorted;
+    }
+    
+	private void dependencySorting(LinkedHashSet sorted,Collection orginalSet, EObject object){
+        if (sorted.contains(object)) return;
+        if (enableDependency(object)) {
+            DependencyImpactAnalyst depAnalayst = DependencyImpactAnalyst.getInstance();
+            DependencyImpactDescription[] array = depAnalayst.getDirectDependencies( object );
+            if(array!=null && array.length > 0){
+                for(int i = array.length-1;i >= 0;i--){
+                    DependencyImpactDescription depend = (DependencyImpactDescription)array[i];
+                    EObject targetType = depend.getTarget();
+                    if (orginalSet.contains(targetType) && !sorted.contains(targetType)){
+                        dependencySorting(sorted,orginalSet,targetType);
+                    }
+                }
+            }
+        }
+        sorted.add(object);
+    }
+
+    protected Set sortImpact(Collection set){
+        LinkedHashSet sorted = new LinkedHashSet();
+        for (Iterator iter= set.iterator(); iter.hasNext();){
+            impactSorting(sorted,set,(EObject)iter.next());
+        }
+        //Dependency map should be cleared at the end of call
+        DependencyImpactAnalyst depAnalayst = DependencyImpactAnalyst.getInstance();
+        depAnalayst.clearDependencyMap();
+        return sorted;
+    }
+
+    private void impactSorting(LinkedHashSet sorted,Collection orginalSet, EObject object){
+        if (sorted.contains(object)) return;
+        if (enableDependency(object)) {
+            DependencyImpactAnalyst depAnalayst = DependencyImpactAnalyst.getInstance();
+            DependencyImpactDescription[] array = depAnalayst.getDirectImpacted2(object );
+            if(array!=null && array.length > 0){
+                for(int i = array.length-1;i >= 0;i--){
+                    DependencyImpactDescription depend = (DependencyImpactDescription)array[i];
+                    EObject targetType = depend.getTarget();
+                    if (orginalSet.contains(targetType) && !sorted.contains(targetType)){
+                        impactSorting(sorted,orginalSet,targetType);
+                    }
+                }
+            }
+        }
+        sorted.add(object);
+    }
+
+    //individual ddlGnerator enable this bit
+    protected boolean enableDependency(EObject object) {
+      return false;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/CoreDdlScriptVector.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/CoreDdlScriptVector.java
new file mode 100644
index 0000000..202a562
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/CoreDdlScriptVector.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.ddl;
+
+import java.util.Collection;
+import java.util.TreeSet;
+import java.util.Vector;
+
+import org.eclipse.datatools.enablement.ibm.util.IPreorderedStatementList;
+
+/**
+ * CoreDdlScriptVector collects DDL statements which can be added
+ * in current order, or ordered lexicographically as they are added.
+ */
+public class CoreDdlScriptVector extends Vector {
+
+	/* Perform a sort of the elements of the input collection
+	 * prior to adding them to the underlying Vector.
+	 * @see java.util.Vector#addAll(java.util.Collection)
+	 */
+	public synchronized boolean addAll(Collection collection) {
+		TreeSet set = new TreeSet(collection);
+		return super.addAll(set);
+	}
+
+	public synchronized boolean addAll(Collection collection, boolean sort) {
+		if(sort){
+			TreeSet set = new TreeSet(collection);
+			set.addAll(collection);
+			return super.addAll(set);
+		}else{
+			return super.addAll(collection);
+		}
+	}
+
+	/**
+	 * This method is used for adding groups of statement sets 
+	 * which must retain their current order.
+	 * @param list An IPreorderedStatementList subclass instance
+	 * which has some order.
+	 * @return boolean true if this invocation altered the contents
+	 * of this CoreDdlScriptVector.
+	 */
+	public synchronized boolean addAll(IPreorderedStatementList list) {
+			return super.addAll(list.getAll());
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/CoreDeltaDdlGenerator.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/CoreDeltaDdlGenerator.java
new file mode 100644
index 0000000..40946f8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/CoreDeltaDdlGenerator.java
@@ -0,0 +1,1065 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.ddl;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.Vector;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentServiceImpl;
+import org.eclipse.datatools.connectivity.sqm.core.rte.DDLGenerator;
+import org.eclipse.datatools.connectivity.sqm.core.rte.EngineeringOption;
+import org.eclipse.datatools.connectivity.sqm.core.rte.IEngineeringCallBack;
+import org.eclipse.datatools.connectivity.sqm.internal.core.rte.fe.GenericDeltaDdlGenerator;
+import org.eclipse.datatools.enablement.ibm.util.DependencyImpactAnalyst;
+import org.eclipse.datatools.enablement.ibm.util.DependencyImpactDescription;
+import org.eclipse.datatools.enablement.ibm.util.EngineeringOptionID;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.AuthorizationIdentifier;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Privilege;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Role;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.RoleAuthorization;
+import org.eclipse.datatools.modelbase.sql.constraints.CheckConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.Constraint;
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.IndexMember;
+import org.eclipse.datatools.modelbase.sql.constraints.PrimaryKey;
+import org.eclipse.datatools.modelbase.sql.constraints.SQLConstraintsPackage;
+import org.eclipse.datatools.modelbase.sql.constraints.UniqueConstraint;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.datatools.modelbase.sql.routines.UserDefinedFunction;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.schema.Sequence;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.PersistentTable;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.change.ChangeDescription;
+import org.eclipse.emf.ecore.change.impl.ChangeDescriptionImpl;
+
+@SuppressWarnings({ "rawtypes", "unchecked" })
+public abstract class CoreDeltaDdlGenerator extends GenericDeltaDdlGenerator {
+
+	protected boolean dataPreservationRequired = false;
+	protected Set<SQLObject> suppressCreateElementSet = null;
+	protected EngineeringOption[] selectedOptions = null;
+	private boolean isDefaultSelectedOptionsSet = false;
+	protected DDLGenerator ddlGenerator = null;
+	
+	public DDLGenerator getDdlGeneratorWithDeltaDDLOptions() {
+		if(ddlGenerator == null)
+		{
+			ddlGenerator = getDDLGenerator();
+		}
+		return ddlGenerator;
+	}
+
+
+	public void setDdlGeneratorWithDeltaDDLOptions(DDLGenerator ddlGenerator) {
+		this.ddlGenerator = ddlGenerator;
+	}
+	public CoreDeltaDdlGenerator() {
+		// TODO Auto-generated constructor stub
+	}
+
+	/**
+	 * Subclass must implement this method to take the engineering callback.
+	 * @param callback
+	 */
+	protected abstract void setEngineeringCallback(IEngineeringCallBack callback);
+
+	protected boolean checkModel(SQLObject[] sqlObjects, EngineeringOption[] options) {
+		boolean ret = true;
+		if (! EngineeringOptionID.checkModel(options)) return ret;
+		
+		ModelValidationProvider provider = DdlGenerationUtility.getModelValidationProvider();
+		if (provider != null) {
+			ret = provider.checkModel(sqlObjects);
+		}
+		return ret;
+	}
+
+	public String[] generateDeltaDDL(EObject rootObject, ChangeDescription changeDescription, SQLObject[] impacts, IProgressMonitor monitor, IEngineeringCallBack callback) {
+		dataPreservationRequired = false;
+		setDestructive(false);
+		setEngineeringOption(null);
+		setEngineeringCallback(callback);
+		
+		// the selected options will be null if not invoked from compare merge screen
+		if (selectedOptions == null
+				|| (selectedOptions != null && isDefaultSelectedOptionsSet == true)) {
+			this.rootObject = rootObject;
+			populateDefaultSelectedOptions(rootObject);
+			isDefaultSelectedOptionsSet = true;
+		}
+		
+        if (!this.checkModel(new SQLObject[]{(SQLObject) rootObject}, selectedOptions)) {
+        	callback.writeMessage(DdlGenerationMessages.FE_INVALID_MODEL);
+        	return new String[0];
+        }
+
+		String[] statements = super.generateDeltaDDL(rootObject, changeDescription, monitor);
+		this.changeDescription = changeDescription;
+		impacts = analyzeImpacts(impacts, statements);
+		String[] dropImpactedStatements = getDependentsDropStatements(changeDescription, impacts, monitor, callback);
+		dropImpactedStatements = removeDuplicates(statements, dropImpactedStatements);		
+		String[] createImpactedStatements = getDependentsCreateStatements(changeDescription, impacts, monitor, callback);
+		createImpactedStatements = removeDuplicates(statements, createImpactedStatements);
+		String[] m1 = merge(dropImpactedStatements, statements);
+		String[] m2 = merge(m1, createImpactedStatements);
+		this.changeDescription = null;
+		m2 = postProcess(m2);
+		return m2;
+	}
+
+	private void populateDefaultSelectedOptions(EObject rootObject) {
+		selectedOptions = getDdlGeneratorOptionsForDeltaDdl(
+				getDdlGeneratorWithDeltaDDLOptions(),
+				new SQLObject[] { (SQLObject) rootObject });
+		// set the default options as true
+		for (int i=0; i < selectedOptions.length; i++)
+		{
+			EngineeringOption option = selectedOptions[i];
+			if (!option.getBoolean()
+					&& !option.getId().equals(
+							EngineeringOptionID.GENERATE_CREATE_OR_REPLACE))
+				option.setBoolean(true);
+		}
+	}
+
+
+	/**
+	 * Allows subclasses to perform final processing of DDL before completion
+	 * 
+	 * @param m2
+	 * @return
+	 */
+	protected String[] postProcess(String[] m2) {
+		return m2;
+	}
+
+	protected boolean hasDescription(SQLObject object) {
+		if (object != null) {
+			String description = object.getDescription();
+			if (description != null && description.length() > 0) return true;
+		}
+		return false;
+	}
+	
+	private String[] removeDuplicates(String[] existingStatements,
+			String[] statements) {
+		TreeSet set = new TreeSet(Arrays.asList(existingStatements));
+		ArrayList list = new ArrayList();
+		for (int i = 0; i < statements.length; ++i) {
+			if (!set.contains(statements[i])) {
+				list.add(statements[i]);
+			}
+		}
+		String[] newStatements = new String[list.size()];
+		list.toArray(newStatements);
+		return newStatements;
+	}
+
+	protected boolean isChangeAnnotationRelated(EObject element,EObject changed,EStructuralFeature feature) {
+		if (EcorePackage.eINSTANCE.getEAnnotation().isSuperTypeOf(element.eClass())) return true;
+		EObject container = element.eContainer();
+		if (container != null &&
+				EcorePackage.eINSTANCE.getEAnnotation().isSuperTypeOf(container.eClass())) return true;
+		if (EcorePackage.eINSTANCE.getEAnnotation().isSuperTypeOf(changed.eClass())) return true;
+		container = changed.eContainer();
+		if (container != null &&
+				EcorePackage.eINSTANCE.getEAnnotation().isSuperTypeOf(container.eClass())) return true;
+        if(feature == EcorePackage.eINSTANCE.getEModelElement_EAnnotations()) return true;
+
+		return false;
+	}
+	/**
+	 * This method is here to support callback. The one in GenericDeltaDdlGenerator does not support callback.
+	 * 
+	 */
+	protected String[] getDropStatements(DDLGenerator gen, Map changeMap, IProgressMonitor monitor, IEngineeringCallBack callback) {
+		Vector elements = new Vector();
+		Iterator it = changeMap.keySet().iterator();
+		while(it.hasNext()) {
+			EObject key = (EObject) it.next();
+			int flag = ((Integer) changeMap.get(key)).intValue();
+			if((flag & (DROP)) != 0) {
+				// if this is a drop->create which can be replaced by a CREATE OR REPLACE then we don't need to drop
+				if (((flag & CREATE) == 0) || (((flag & CREATE) != 0) && !isSuppressedDrop(key))) {
+					elements.add(key);
+				} 
+				if (((flag & (CREATE)) != 0) && 
+						(SQLTablesPackage.eINSTANCE.getPersistentTable().isSuperTypeOf(key.eClass()) ||
+								(SQLSchemaPackage.eINSTANCE.getSchema().isSuperTypeOf(key.eClass()) &&
+										((Schema)key).getTables() != null && 
+										!((Schema)key).getTables().isEmpty()))) 
+					setDestructive(true);
+			}
+		}
+		if(elements.size() > 0) {
+			SQLObject[] d = new SQLObject[elements.size()];
+			elements.copyInto(d);
+			return gen.dropSQLObjects(d, this.generateQuotedIdentifiers(this.getSelectedOptions()), this.generateFullyQualifiedNames(this.getSelectedOptions()),  monitor, callback);
+		}
+		else {
+			return new String[0];
+		}
+	}
+	
+	/**
+	 * Add an object to the record of which objects should have their DROP statements suppressed
+	 * 
+	 * @param The object for which a DROP should be suppressed
+	 */
+	protected void addSuppressedDrop(EObject key) {
+	}
+
+	/**
+	 * Determine if an object should have its DROP statement suppressed.
+	 * 
+	 * @return
+	 */
+	protected boolean isSuppressedDrop(EObject key) {
+		return false;
+	}
+	
+	/**
+	 * Reset the record of objects which should have DROP statements suppressed
+	 */
+	protected void resetSuppressedDrops() {
+	}
+
+	/**
+	 * Determine whether a drop can be suppressed due to use of CREATE OR REPLACE statement usage
+	 * 
+	 * @param Object for which the drop suppression is to be determined
+	 * @return true if the drop is unnecessary because a CREATE OR REPLACE will be issued
+	 */
+	protected boolean isDropSuppressedForCreateOrReplace(EObject key) {
+		return false;
+	}
+
+	protected boolean shouldExcludeElement(EObject element) {
+		if (element instanceof PersistentTable) {
+			if (!EngineeringOptionID.generateTables(selectedOptions))
+				return true;
+		} else if (element instanceof ViewTable) {
+			if (!EngineeringOptionID.generateViews(selectedOptions))
+				return true;
+		} else if (element instanceof Procedure) {
+			if (!EngineeringOptionID.generateStoredProcedures(selectedOptions))
+				return true;
+		} else if (element instanceof UserDefinedFunction) {
+			if (!EngineeringOptionID.generateFunctions(selectedOptions))
+				return true;
+		} else if (element instanceof Trigger) {
+			if (!EngineeringOptionID.generateTriggers(selectedOptions))
+				return true;
+		} else if (element instanceof CheckConstraint) {
+			if (!EngineeringOptionID.generateCKConstraints(selectedOptions))
+				return true;
+		} else if (element instanceof ForeignKey) {
+			if (!EngineeringOptionID.generateFKConstraints(selectedOptions))
+				return true;
+		} else if (element instanceof Index) {
+			if (!EngineeringOptionID.generateIndexes(selectedOptions)
+					|| ((Index) element).isSystemGenerated())
+				return true;
+		} else if (element instanceof UserDefinedType) {
+			if (!EngineeringOptionID.generateUserDefinedTypes(selectedOptions))
+				return true;
+		} else if (element instanceof Sequence) {
+			if (!EngineeringOptionID.generateSequences(selectedOptions))
+				return true;
+		} else if (element instanceof Role) {
+			if (!EngineeringOptionID.generateRoles(selectedOptions))
+				return true;
+		} else if (element instanceof Privilege) {
+			if (!EngineeringOptionID.generateRevokeStatement(selectedOptions))
+				return true;
+		} else if (element instanceof RoleAuthorization) {
+			if (!EngineeringOptionID.generateRevokeStatement(selectedOptions))
+				return true;
+		} else if (element instanceof UniqueConstraint) {
+			if (!EngineeringOptionID.generatePKConstraints(selectedOptions)
+					|| !((UniqueConstraint) element).isEnforced())
+				return true;
+		} else if (element instanceof Schema) {
+			if (!EngineeringOptionID.generateSchemas(selectedOptions))
+				return true;
+		} else if (element instanceof Privilege) {
+			if (!EngineeringOptionID.generateRevokeStatement(selectedOptions))
+				return true;
+		} else if (element instanceof AuthorizationIdentifier) {
+			if (EngineeringOptionID.generateRevokeStatement(selectedOptions)) {
+				return true;
+			}
+		} else if (element instanceof Role) {
+			if (!EngineeringOptionID.generateRoles(selectedOptions))
+				return true;
+		} else if (element instanceof RoleAuthorization) {
+			if (!EngineeringOptionID.generateRevokeStatement(selectedOptions))
+				return true;
+		} 
+		return false;
+	}
+	/**
+	 * This method is here to support callback. The one in GenericDeltaDdlGenerator does not support callback.
+	 * 
+	 */
+	protected String[] getCreateStatements(DDLGenerator gen, Map changeMap, IProgressMonitor monitor, IEngineeringCallBack callback) {
+		Vector elements = new Vector();
+		Iterator it = changeMap.keySet().iterator();
+		while(it.hasNext()) {
+			EObject key = (EObject) it.next();
+			int flag = ((Integer) changeMap.get(key)).intValue();
+			if((flag & CREATE) != 0) {
+				elements.add(key);
+			}
+		}
+		if(elements.size() > 0) {
+			SQLObject[] d = new SQLObject[elements.size()];
+			elements.copyInto(d);
+			return gen.createSQLObjects(d, this.generateQuotedIdentifiers(this.getSelectedOptions()), this.generateFullyQualifiedNames(this.getSelectedOptions()), monitor, callback);
+		}
+		else {
+			return new String[0];
+		}
+	}
+
+	
+	//@Override
+	protected void analyze(Map changeMap) {
+		List elements = new LinkedList();
+		elements.addAll(changeMap.keySet());
+		Iterator it = elements.iterator();
+		while(it.hasNext()) {
+			EObject e = (EObject) it.next();
+			int flag = ((Integer) changeMap.get(e)).intValue();
+			if(!needRecreate(e, flag)) {
+				continue;
+			}
+			// Recreate required
+			flag = setFlagsForRecreate(flag);
+			if(e instanceof Column) {
+				Column column = (Column) e;
+				Table table = column.getTable();
+	      		changeMap.put(table, new Integer(flag));
+				if(table instanceof PersistentTable){
+					processModifiedTable((PersistentTable)table, changeMap);
+				}
+			}
+			else if(e instanceof PersistentTable) {
+	      		changeMap.put(e, new Integer(flag));
+				processModifiedTable((PersistentTable) e, changeMap);
+			}
+			else if(e instanceof UniqueConstraint) {
+	      		changeMap.put(e, new Integer(flag));
+				processModifiedUniqueConstraint((UniqueConstraint) e, changeMap);				
+			}
+			else if(e instanceof Index) {
+	      		changeMap.put(e, new Integer(flag));
+				processModifiedIndex((Index) e, changeMap);				
+			}
+			else {
+	      		changeMap.put(e, new Integer(flag));
+			}
+		}
+	}
+
+	/**
+	 * This method takes an existing changeFlag value and modifies it
+	 * to be a drop and recreate instead of an alter.  This implementation
+	 * retains the COMMENT and LABEL flags only.
+	 * @param flag changeFlag
+	 * @return int changeFlag
+	 */
+	protected int setFlagsForRecreate(int flag) {
+		// Data object must be dropped and recreated
+		//   COMMENT and LABEL flags need to be retained
+		//   DROP and CREATE flags need to be set
+		//   ALL OTHER flags need to be reset
+		flag = flag & (COMMENT | LABEL);
+		flag = flag | CREATE | DROP;
+		return flag;
+	}
+	
+	Pattern[] ALTER_PATTERNS;
+	
+	// the following patterns are REs (Regular Expressions). If any of the REs match a 
+	// given DDL Statement, then that statement does not require a DROP/CREATE of the
+	// impacted objects.
+	private final String[] ALTER_STRINGS=
+		{
+			"^alter table .* (drop|add) constraint",//$NON-NLS-1$ //wsdbu00297616: don't recreate objects on ADD or DROP constraints
+			"^alter table .*\\s*compress (yes|no)", //$NON-NLS-1$ //wsdbu00297613
+			"^alter table .*\\s*(activate|deactivate)", //$NON-NLS-1$
+			"^alter tablespace ", //$NON-NLS-1$ //wsdbu00297630			
+		};
+	
+	protected synchronized Pattern[] getAlterPatterns()
+	{
+		if (null==ALTER_PATTERNS)
+		{
+			ALTER_PATTERNS=new Pattern[ALTER_STRINGS.length];
+			for (int i=0; i<ALTER_STRINGS.length; ++i)
+			{
+				ALTER_PATTERNS[i]=Pattern.compile(ALTER_STRINGS[i], Pattern.CASE_INSENSITIVE);
+			}
+		}
+		return ALTER_PATTERNS;
+	}
+
+	/**
+	 * Analyze the impacts of the statements on the dependents.
+	 * Returns the dependents that may be impacted.
+	 * @param dependents
+	 * @param statements
+	 * @return
+	 */
+	protected SQLObject[] analyzeImpacts(SQLObject[] dependents,
+			String[] statements) {
+		// Here is a simple implementation. It only looks for any DDL
+		// that is not a COMMENT ON, REVOKE, or GRANT statement
+		// and determines there will be impacts on every dependent.
+		boolean hasImpact = false;
+		testAlter: for (int i = 0; i < statements.length; i++) {
+			if (statements[i].startsWith("COMMENT ON") || //$NON-NLS-1$
+					statements[i].startsWith("REVOKE") || //$NON-NLS-1$
+					statements[i].startsWith("GRANT")) { //$NON-NLS-1$
+				continue;
+			}
+			for (Pattern pattern: getAlterPatterns())
+			{
+				Matcher matcher=pattern.matcher(statements[i]);
+				if (matcher.find()) continue testAlter;
+			}
+				
+			// If we have fallen through to here, all the exceptions are not true, so me must
+			// deal with the impacted objects.
+			hasImpact = true;
+			break;
+		}
+		if (hasImpact) {
+			return dependents;
+		} else {
+			return new SQLObject[0];
+		}
+	}
+	
+	protected boolean isAncestorModified(Map changeMap, EObject e) {
+		if (isRenameTableSupported()) {
+			Iterator it = ContainmentServiceImpl.INSTANCE.getAllContainers(e).iterator();
+			while(it.hasNext()) {
+				Object c = it.next();
+				if(changeMap.containsKey(c)) {
+					int flag = ((Integer) changeMap.get(c)).intValue();
+					if((flag & (CREATE | DROP | MODIFIED)) != 0) return true;
+					if (!(c instanceof PersistentTable) &&
+							((flag & RENAME) != 0)) return true;
+				}
+			}
+			return false;
+		}
+		return super.ancestorModified(changeMap, e);
+	}
+
+	protected boolean isRenameTableSupported() {
+		return false;
+	}
+	
+	protected boolean isRenamedTable(EObject e,int flag) {
+		if (((flag & RENAME) != 0) &&
+				SQLTablesPackage.eINSTANCE.getPersistentTable().isSuperTypeOf(e.eClass()))
+			return true;
+		return false;
+	}
+	
+	protected void processModifiedUniqueConstraint(UniqueConstraint uk, Map changeMap) {
+		Iterator it = uk.getForeignKey().iterator();
+		while(it.hasNext()) {
+			ForeignKey fk = (ForeignKey) it.next();
+			if (isCreated(fk)) continue;
+			int flag = 0;
+			if(changeMap.containsKey(fk)) {
+				flag = ((Integer) changeMap.get(fk)).intValue();
+			}
+			flag = flag & ~(MODIFIED | RENAME);
+			flag = flag | (CREATE | DROP);
+			changeMap.put(fk, new Integer(flag));
+		}
+	}
+		
+	private void processModifiedIndex(Index index, Map changeMap) {
+		Iterator it = index.getForeignKey().iterator();
+		while(it.hasNext()) {
+			ForeignKey fk = (ForeignKey) it.next();
+			if (isCreated(fk)) continue;
+			int flag = 0;
+			if(changeMap.containsKey(fk)) {
+				flag = ((Integer) changeMap.get(fk)).intValue();
+			}
+			flag = flag & ~(MODIFIED | RENAME);
+			flag = flag | (CREATE | DROP);
+			changeMap.put(fk, new Integer(flag));
+		}
+	}
+
+	private void processModifiedTable(PersistentTable table, Map changeMap) {
+		Iterator it = table.getUniqueConstraints().iterator();
+		while(it.hasNext()) {
+			UniqueConstraint uk = (UniqueConstraint) it.next();
+			if (isCreated(uk)) continue;
+			int flag = 0;
+			if(changeMap.containsKey(uk)) {
+				flag = ((Integer) changeMap.get(uk)).intValue();
+			}
+			flag = flag & ~(MODIFIED | RENAME);
+			flag = flag | (CREATE | DROP);
+			changeMap.put(uk, new Integer(flag));
+			processModifiedUniqueConstraint(uk, changeMap);
+		}
+		
+		it = table.getIndex().iterator();
+		while(it.hasNext()) {
+			Index index = (Index) it.next();
+			if (isCreated(index)) continue;
+			int flag = 0;
+			if(changeMap.containsKey(index)) {
+				flag = ((Integer) changeMap.get(index)).intValue();
+			}
+			flag = modifyIndexChangeFlag(index,changeMap,flag);
+			changeMap.put(index, new Integer(flag));
+			processModifiedIndex(index, changeMap);
+		}
+
+		it = table.getForeignKeys().iterator();
+		while(it.hasNext()) {
+			ForeignKey fk = (ForeignKey) it.next();
+			if (isCreated(fk)) continue;
+			int flag = 0;
+			if(changeMap.containsKey(fk)) {
+				flag = ((Integer) changeMap.get(fk)).intValue();
+			}
+			flag = flag & ~(MODIFIED | RENAME);
+			flag = flag | (CREATE | DROP);
+			changeMap.put(fk, new Integer(flag));
+		}
+
+		it = table.getReferencingForeignKeys().iterator();
+		while(it.hasNext()) {
+			ForeignKey fk = (ForeignKey) it.next();
+			if (isCreated(fk)) continue;
+			int flag = 0;
+			if(changeMap.containsKey(fk)) {
+				flag = ((Integer) changeMap.get(fk)).intValue();
+			}
+			flag = flag & ~(MODIFIED | RENAME);
+			flag = flag | (CREATE | DROP);
+			changeMap.put(fk, new Integer(flag));
+		}
+
+		it = table.getConstraints().iterator();
+		while(it.hasNext()) {
+			Constraint ck = (Constraint) it.next();
+			if (!SQLConstraintsPackage.eINSTANCE.getCheckConstraint().isSuperTypeOf(ck.eClass())) continue;
+			if (isCreated(ck)) continue;
+			int flag = 0;
+			if(changeMap.containsKey(ck)) {
+				flag = ((Integer) changeMap.get(ck)).intValue();
+			}
+			flag = flag & ~(MODIFIED | RENAME);
+			flag = flag | (CREATE | DROP);
+			changeMap.put(ck, new Integer(flag));
+		}
+
+		it = table.getTriggers().iterator();
+		while(it.hasNext()) {
+			Trigger trigger = (Trigger) it.next();
+			if (isCreated(trigger)) continue;
+			int flag = 0;
+			if(changeMap.containsKey(trigger)) {
+				flag = ((Integer) changeMap.get(trigger)).intValue();
+			}
+			flag = flag & ~(MODIFIED | RENAME);
+			flag = flag | (CREATE | DROP);
+			changeMap.put(trigger, new Integer(flag));
+		}
+		
+		it = table.getColumns().iterator();
+		while (it.hasNext()) {
+			Column column = (Column)it.next();
+			if (hasDescription(column)) {
+				Integer flag = 0;
+				if(changeMap.containsKey(column)) {
+					flag = (Integer)changeMap.get(column);
+				}
+				flag = flag | COMMENT;
+				changeMap.put(column, flag);
+			}
+		}
+		// Find views with dependencies 
+		List<ViewTable> impactedViews = getDependentViews(table);
+		for (ViewTable view:impactedViews) {
+			int flag = 0;
+			if(changeMap.containsKey(view)) {
+				flag = ((Integer) changeMap.get(view)).intValue();
+			}
+			flag = flag & ~(MODIFIED | RENAME);
+			flag = flag | (CREATE | DROP);
+			changeMap.put(view, new Integer(flag));
+		}
+	}
+
+	protected List<ViewTable> getDependentViews(Table table) {
+        List<ViewTable> impactedViews = new ArrayList<ViewTable>();
+        
+        DependencyImpactDescription[] impacts = DependencyImpactAnalyst.getInstance().getDirectImpacted(table);
+        for (int i=0; i<impacts.length; i++)
+        {
+        	EObject target = impacts[i].getTarget();
+        	if ( (target != null) && (target instanceof ViewTable)) {
+        		impactedViews.add((ViewTable)target);
+        	}
+        }
+		return impactedViews;
+	}
+	
+	protected int modifyIndexChangeFlag(Index index,Map changeMap,int flag) {
+		flag = flag & ~(MODIFIED | RENAME);
+		flag = flag | (CREATE | DROP);
+		return flag;
+	}
+
+	protected void suppressCreate(SQLObject element) {
+		if (suppressCreateElementSet  == null)
+			suppressCreateElementSet = new HashSet<SQLObject>();
+		suppressCreateElementSet.add(element);
+	}
+	
+    protected void propagateColumnRename(Column column, Map changeMap) {
+		Table table = column.getTable();
+		Set<UniqueConstraint> uCs = new HashSet<UniqueConstraint>();
+		Set<Index> uIs = new HashSet<Index>();
+		if ((table == null) || 
+				!SQLTablesPackage.eINSTANCE.getPersistentTable().isSuperTypeOf(table.eClass())) 
+			return;
+    	// Unique Constraints
+		Iterator it = ((PersistentTable)table).getUniqueConstraints().iterator();
+		while( it.hasNext() ) {
+			UniqueConstraint current = (UniqueConstraint)it.next();
+			if (current != null) {
+				EList columns = current.getMembers();
+				if ( (columns != null) && columns.contains(column) ) {
+					updateMapFlags(current,changeMap,0,DROP | CREATE);
+					uCs.add(current);
+				}
+			}
+		}
+		// PK
+		{
+			PrimaryKey current = ((PersistentTable)table).getPrimaryKey();
+			if (current != null) {
+				EList columns = current.getMembers();
+				if ( (columns != null) && columns.contains(column) ) {
+					updateMapFlags(current,changeMap,0,DROP | CREATE);
+					uCs.add(current);
+				}
+			}
+		}
+    	// Indexes
+		it = ((PersistentTable)table).getIndex().iterator();
+		while( it.hasNext() ) {
+			Index current = (Index)it.next();
+			if (current != null) {
+				EList columns = current.getMembers();
+				if ( indexMemberListContains(columns, column) ) {
+					updateMapFlags(current,changeMap,0,DROP | CREATE);
+					if (current.isUnique()) {
+						uIs.add(current);
+					}
+					continue;
+				}
+				columns = current.getIncludedMembers();
+				if ( indexMemberListContains(columns, column) ) {
+					updateMapFlags(current,changeMap,0,DROP | CREATE);
+				}
+			}
+		}
+    	// FKs
+		it = ((PersistentTable)table).getForeignKeys().iterator();
+		while( it.hasNext() ) {
+			ForeignKey current = (ForeignKey)it.next();
+			if (current != null) {
+				EList columns = current.getMembers();
+				if ( (columns != null) && columns.contains(column) ) {
+					updateMapFlags(current,changeMap,0,DROP | CREATE);
+				}
+			}
+		}
+    	// Referencing FKs
+		it = ((PersistentTable)table).getReferencingForeignKeys().iterator();
+		RefFkLoop: while( it.hasNext() ) {
+			ForeignKey current = (ForeignKey)it.next();
+			if (current != null) {
+				Iterator<UniqueConstraint> it1 = uCs.iterator();
+				while (it1.hasNext()) {
+					if (current.getUniqueConstraint() == it1.next()) {
+						updateMapFlags(current,changeMap,0,DROP | CREATE);
+						continue RefFkLoop;
+					}
+				}
+				Iterator<Index> it2 = uIs.iterator();
+				while (it2.hasNext()) {
+					if (current.getUniqueIndex() == it2.next()) {
+						updateMapFlags(current,changeMap,0,DROP | CREATE);
+						continue RefFkLoop;
+					}
+				}
+				EList columns = current.getReferencedMembers();
+				if ( (columns != null) && columns.contains(column) ) {
+					updateMapFlags(current,changeMap,0,DROP | CREATE);
+				}
+			}
+		}
+    	// Triggers
+		it = ((PersistentTable)table).getTriggers().iterator();
+		while( it.hasNext() ) {
+			Trigger current = (Trigger)it.next();
+			if (current != null) {
+				EList columns = current.getTriggerColumn();
+				if ( (columns != null) && columns.contains(column) ) {
+					updateMapFlags(current,changeMap,0,DROP | CREATE);
+				}
+			}
+		}
+    }
+	
+    /**
+     * Implementation of contains(column) for index member column list - since the
+     * list that is returned by the getMembers method is a list of IndexMember
+     * objects we can't use the contains method of the list. The comparison is done
+     * using the == operator.
+     * 
+     * @param columns The columns members of the list (as IndexMember objects)
+     * @param column The table column for which membership is to be tested
+     * @return true if the index member list includes column
+     */
+    protected boolean indexMemberListContains(EList columns, Column column) {
+		if (columns != null && column != null) {
+			for (Object indexMember : columns) {
+				if (indexMember != null && indexMember instanceof IndexMember) {
+					if (((IndexMember)indexMember).getColumn() == column) {
+						return true;
+					}
+				}
+			}
+		}
+		return false;
+	}
+	
+	protected void removeRedundantColumnChange(Map changeMap, Map colMap) {
+		int flag;
+	    Iterator it = colMap.keySet().iterator();
+		Table table = null;
+        while (it.hasNext()) {
+        	Column column = (Column)it.next();
+        	flag = ((Integer) colMap.get(column)).intValue();
+        	if (flag == DROP) {
+        		EObject obj = ((ChangeDescriptionImpl) changeDescription).getOldContainer(column);
+        		if (SQLTablesPackage.eINSTANCE.getTable().isSuperTypeOf(obj.eClass())) 
+        			table = (Table)((ChangeDescriptionImpl) changeDescription).getOldContainer(column);
+        	}
+        	if (table == null)
+        		table = column.getTable();
+    		if (SQLTablesPackage.eINSTANCE.getPersistentTable().isSuperTypeOf(table.eClass())) {
+        		if(changeMap.containsKey(table)) {
+        			flag = ((Integer) changeMap.get(table)).intValue();
+        			if ((flag & DROP) != 0) {
+        				it.remove();
+        			}
+        		}
+        	}
+        }
+	}
+
+	/**
+	 * This method is here to support callback. The one in GenericDeltaDdlGenerator does not support callback. 
+	 */
+	protected String[] processChangeMap(Map changeMap, IProgressMonitor monitor, IEngineeringCallBack callback) {
+        DDLGenerator ddlGenerator = getDdlGeneratorWithDeltaDDLOptions();
+        this.undo();
+        String[] drops = new String[0];
+        String[] creates = new String[0];
+        
+        if (EngineeringOptionID.generateDropStatement(selectedOptions))
+          drops = getDropStatements(ddlGenerator, changeMap, monitor, callback);
+        this.redo();
+        if (EngineeringOptionID.generateCreateStatement(selectedOptions))
+          creates = getCreateStatements(ddlGenerator, changeMap, monitor, callback);
+        this.changeDescription = null;
+        return merge(drops, creates);		        
+	}
+
+    protected boolean generateQuotedIdentifiers(EngineeringOption[] options) {
+        return getOptionValueByID(EngineeringOptionID.GENERATE_QUOTED_IDENTIFIER, options);
+    }
+
+    protected boolean generateFullyQualifiedNames(EngineeringOption[] options) {
+        return getOptionValueByID(EngineeringOptionID.GENERATE_FULLY_QUALIFIED_NAME, options);
+    }
+
+    private boolean getOptionValueByID(String optionID, EngineeringOption[] options){
+    	return EngineeringOptionID.getOptionValueByID(optionID, options);
+    }
+
+	/**
+	 * This generateDeltaDDL method also generates DDL for the impacted (dependent) database objects.
+	 * @param changeSummary
+	 * @param impacts
+	 * @param monitor
+	 * @return
+	 * @deprecated
+	 */
+	public String[] generateDeltaDDL(EObject rootObject, ChangeDescription changeDescription, SQLObject[] impacts, IProgressMonitor monitor) {		
+        return this.generateDeltaDDL(rootObject, changeDescription, impacts, monitor, null);
+	}
+
+	/**
+	 * Get the SQL statements for dropping the dependents (impacted objects).
+	 * @param changeDescription
+	 * @param impacts
+	 * @param monitor
+	 * @param callback
+	 * @return
+	 */
+	protected String[] getDependentsDropStatements(
+			ChangeDescription changeDescription, SQLObject[] impacts,
+			IProgressMonitor monitor, IEngineeringCallBack callback) {
+		CoreDdlGenerator generator = (CoreDdlGenerator)this.getDdlGeneratorWithDeltaDDLOptions();
+		if(impacts.length > 0) {
+			generator.getSelectedOptions(impacts);
+			for (int count = 0; count < impacts.length; count++) {
+				if (SQLTablesPackage.eINSTANCE.getPersistentTable().isSuperTypeOf(impacts[count].eClass())) {
+					this.setDestructive(true);
+				}
+			}
+			return generator.dropSQLObjects(impacts,EngineeringOptionID.generateQuotedIdentifiers(this.getSelectedOptions()), EngineeringOptionID.generateFullyQualifiedNames(this.getSelectedOptions()), monitor, callback);
+		}
+		else {
+			return new String[0];
+		}
+	}
+
+	/**
+	 * Get the SQL statements for creating the dependents (impacted objects).
+	 * @param changeDescription
+	 * @param impacts
+	 * @param monitor
+	 * @param callback	 * 
+	 * @return
+	 * @deprecated Use the alternative getDependentsCreateStatements.
+	 */
+	protected final String[] getDependentsCreateStatements(ChangeDescription changeDescription,  SQLObject[] impacts, IProgressMonitor monitor) {
+		CoreDdlGenerator generator = (CoreDdlGenerator)this.getDdlGeneratorWithDeltaDDLOptions();
+		if(impacts.length > 0) {
+			generator.getSelectedOptions(impacts);
+			return generator.createSQLObjects(impacts, EngineeringOptionID.generateQuotedIdentifiers(this.getSelectedOptions()), EngineeringOptionID.generateFullyQualifiedNames(this.getSelectedOptions()), monitor, null);
+		}
+		else {
+			return new String[0];
+		}
+	}
+
+	/**
+	 * Get the SQL statements for creating the dependents (impacted objects).
+	 * @param changeDescription
+	 * @param impacts
+	 * @param monitor
+	 * @param callback
+	 * @return
+	 */
+	protected String[] getDependentsCreateStatements(
+			ChangeDescription changeDescription, SQLObject[] impacts,
+			IProgressMonitor monitor, IEngineeringCallBack callback) {
+		CoreDdlGenerator generator = (CoreDdlGenerator)this.getDdlGeneratorWithDeltaDDLOptions();
+		if(impacts.length > 0) {
+			generator.getSelectedOptions(impacts);
+			return generator.createSQLObjects(impacts, EngineeringOptionID.generateQuotedIdentifiers(this.getSelectedOptions()), EngineeringOptionID.generateFullyQualifiedNames(this.getSelectedOptions()), monitor, callback);
+		}
+		else {
+			return new String[0];
+		}
+	}
+
+	public Table getOldContainer(Column column) {
+		return (Table)((ChangeDescriptionImpl)this.changeDescription).getOldContainer(column);
+	}
+
+	protected boolean isColumnInPrimaryKey(Column column) {
+		Table table = column.getTable();
+		if (table instanceof BaseTable) {
+			PrimaryKey key = (PrimaryKey)(((BaseTable)table).getPrimaryKey());
+			if (key != null && key.getMembers().contains(column)) return true;
+		}
+		return false;
+	}
+	
+	public boolean isDataPreservationRequired() {
+		return dataPreservationRequired;
+	}
+	
+	/**
+	 * Given a DDL generator and a list of SQL objects, ask the DDL generator
+	 * to set up a list of DDL generation options. Then change two of
+	 * the options to true. The client can further modify the values of the
+	 * options.
+	 * @param ddlGenerator A DDL generator
+	 * @param sqlObjects An array of SQLObjects
+	 * @return An array of DDL generation options.
+	 */
+	public EngineeringOption[] getDdlGeneratorOptionsForDeltaDdl(DDLGenerator ddlGenerator, SQLObject[] sqlObjects) {
+		EngineeringOption[] ddlGenOptions = ddlGenerator.getOptions(sqlObjects);
+    	for (int i = 0; i < ddlGenOptions.length; i++){
+            EngineeringOption option = (EngineeringOption) ddlGenOptions[i];
+            if (option == null) {
+           	 	continue;
+            }
+            if (option.getId().equals(EngineeringOptionID.GENERATE_FULLY_QUALIFIED_NAME)) { 
+                option.setBoolean(DdlGenerationUtility.getQualifyNamesDefault());
+            }
+            else if (option.getId().equals(EngineeringOptionID.GENERATE_QUOTED_IDENTIFIER)) {
+            	option.setBoolean(DdlGenerationUtility.getQuoteIdentifiersDefault());
+            }
+        }
+    	return ddlGenOptions;
+	}
+
+	/**
+	 * Check to see if there are column order changes.
+	 * Returns 0 if no changes to the columns, otherwise return MODIFIED.
+	 * @param element
+	 * @param feature
+	 * @return
+	 */
+	protected int getColumnsChangeFlag(EObject element, EStructuralFeature feature) {
+		if (feature == SQLTablesPackage.eINSTANCE.getTable_Columns()) {
+			List currentValue = (List)element.eGet(feature);
+			List previousValue = (List)this.getOldValue(feature, element);
+			if (isOrderChanged(currentValue, previousValue)) {
+				return MODIFIED;
+			}
+		}
+		return 0;
+	}
+
+	/**
+	 * Updates the passed map (where the map's key is a changed element, and the
+	 * map's value is the changeFlags), using the passed parameters.
+	 * @param element EObject which has changed.
+	 * @param map Map which should maintain the change flags for this element.
+	 * @param flagsToReset int containing change flags to be reset.
+	 * @param flagsToSet int containing change flags to set.
+	 * @return int the new set of change flags stored for the element.
+	 */
+	protected int updateMapFlags(EObject element,Map map,int flagsToReset,int flagsToSet) {
+		int flags = 0;
+		if (map.containsKey(element)) {
+			flags = ((Integer) map.get(element)).intValue();
+			if (flagsToReset != 0) 
+				flags &= ~flagsToReset;
+		}
+		if (flagsToSet != 0) 
+			flags |= flagsToSet;
+		map.put(element,new Integer(flags));
+		return flags;
+	}
+
+	protected boolean isRenameColumnSupported() {
+		return false;
+	}
+	
+	/**
+	 * Returns true if the order in current is different than that in previous.
+	 * The current list derives from the previous list through add, delete, or modification.
+	 * @param current A list of SQL objects.
+	 * @param previous A list of SQL objects.
+	 * @return
+	 */
+	private boolean isOrderChanged (List current, List previous) {
+		ArrayList currentList = new ArrayList(current.size());				
+		for (Iterator it = current.iterator(); it.hasNext();) {
+			SQLObject object = (SQLObject)it.next();
+			currentList.add(object);
+		}		
+		ArrayList previousList = new ArrayList(previous.size());
+		for (Iterator it = previous.iterator(); it.hasNext();) {
+			SQLObject object = (SQLObject)it.next();
+			previousList.add(object);
+		}
+
+		// We should tolerate columns being dropped, and columns being
+		//   added at the END of the list, but we should not tolerate
+		//   columns being added in the middle of the list
+		
+		// Remove columns which have been dropped (present only in previous
+		//   list)
+		for (int index = 0; index < previousList.size(); ++index) {
+			if (!currentList.contains(previousList.get(index))) {
+				previousList.remove(index--);
+			}
+		}
+
+		// Previous list should now be same or shorter size than current
+		//   list.  Compare the first N columns, where N is the size of
+		//   the possibly shortened previous list.
+		for (int index = 0; index < previousList.size(); ++index) {
+			if (currentList.get(index) != previousList.get(index)) return true;
+		}
+		return false;
+	}
+	/**
+	 * This method returns the DeltaDDLGenerator options
+	 * 
+	 * @return selectedOptions
+	 */
+	public EngineeringOption[] getSelectedOptions() {
+		return selectedOptions;
+	}
+
+	/**
+	 * Sets the options for Delta DDL generation
+	 * @param selectedOptions
+	 */
+	public void setSelectedOptions(EngineeringOption[] selectedOptions) {
+		this.selectedOptions = selectedOptions;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/DdlBuilder.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/DdlBuilder.java
new file mode 100644
index 0000000..0659cf8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/DdlBuilder.java
@@ -0,0 +1,1942 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.ddl;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Vector;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentServiceImpl;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.IEngineeringCallBack;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.internal.core.definition.DatabaseDefinitionRegistryImpl;
+import org.eclipse.datatools.enablement.ibm.IBMPluginActivator;
+import org.eclipse.datatools.enablement.ibm.util.AccessControlUtilities;
+import org.eclipse.datatools.enablement.ibm.util.ModelHelper;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.AuthorizationIdentifier;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Privilege;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Role;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.RoleAuthorization;
+import org.eclipse.datatools.modelbase.sql.constraints.CheckConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.Constraint;
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.IndexMember;
+import org.eclipse.datatools.modelbase.sql.constraints.PrimaryKey;
+import org.eclipse.datatools.modelbase.sql.constraints.ReferenceConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.TableConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.UniqueConstraint;
+import org.eclipse.datatools.modelbase.sql.datatypes.AttributeDefinition;
+import org.eclipse.datatools.modelbase.sql.datatypes.CharacterStringDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.DataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.DateDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.DistinctUserDefinedType;
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.StructuredUserDefinedType;
+import org.eclipse.datatools.modelbase.sql.datatypes.TimeDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.expressions.SearchCondition;
+import org.eclipse.datatools.modelbase.sql.expressions.ValueExpression;
+import org.eclipse.datatools.modelbase.sql.routines.Parameter;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.datatools.modelbase.sql.routines.UserDefinedFunction;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.ReferentialActionType;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.schema.Sequence;
+import org.eclipse.datatools.modelbase.sql.schema.TypedElement;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+
+ /**
+ * @author chetabha
+ *
+ */
+public abstract class DdlBuilder {
+    protected final static String ADMIN                = "ADMIN"; //$NON-NLS-1$
+	protected final static String NEWLINE              = System.getProperty("line.separator"); //$NON-NLS-1$
+    protected final static String UNDERSCORE           = "_"; //$NON-NLS-1$
+    protected final static String EMPTY_STRING         = ""; //$NON-NLS-1$
+    protected final static String DOT                  = "."; //$NON-NLS-1$
+    protected final static String SPACE                = " "; //$NON-NLS-1$
+    protected final static String COMMA                = ","; //$NON-NLS-1$
+    protected final static String SINGLE_QUOTE         = "'"; //$NON-NLS-1$
+    protected final static String DOUBLE_QUOTE         = "\""; //$NON-NLS-1$
+    protected final static String TAB                  = "\t"; //$NON-NLS-1$
+    protected final static String LEFT_PARENTHESIS     = "("; //$NON-NLS-1$
+    protected final static String RIGHT_PARENTHESIS    = ")"; //$NON-NLS-1$
+    protected final static String LEFT_SQUARE     	   = "["; //$NON-NLS-1$
+    protected final static String RIGHT_SQUARE		   = "]"; //$NON-NLS-1$
+    protected final static String COLON                = ":"; //$NON-NLS-1$
+    protected final static String DROP                 = "DROP"; //$NON-NLS-1$
+    protected final static String REMOVE               = "REMOVE"; //$NON-NLS-1$
+    protected final static String CREATE               = "CREATE"; //$NON-NLS-1$
+    protected final static String ALTER                = "ALTER"; //$NON-NLS-1$
+    protected final static String ADD                  = "ADD"; //$NON-NLS-1$
+    protected final static String DELETE               = "DELETE"; //$NON-NLS-1$
+    protected final static String UPDATE               = "UPDATE"; //$NON-NLS-1$
+    protected final static String CASCADE              = "CASCADE"; //$NON-NLS-1$
+    protected final static String CASCADED             = "CASCADED"; //$NON-NLS-1$
+    protected final static String LOCAL                = "LOCAL"; //$NON-NLS-1$
+    protected final static String OPTION               = "OPTION"; //$NON-NLS-1$
+    protected final static String RESTRICT             = "RESTRICT"; //$NON-NLS-1$
+    protected final static String NULL                 = "NULL"; //$NON-NLS-1$
+    protected final static String NOT                  = "NOT"; //$NON-NLS-1$
+    protected final static String DEFAULT              = "DEFAULT"; //$NON-NLS-1$
+    protected final static String SET                  = "SET"; //$NON-NLS-1$
+    protected final static String DATABASE             = "DATABASE"; //$NON-NLS-1$
+    protected final static String DATA_TYPE            = "DATA TYPE";
+    protected final static String TRIGGER              = "TRIGGER"; //$NON-NLS-1$
+    protected final static String TABLE                = "TABLE"; //$NON-NLS-1$
+    protected final static String COLUMN               = "COLUMN";
+    protected final static String TABLESPACE           = "TABLESPACE"; //$NON-NLS-1$
+    protected final static String VIEW                 = "VIEW"; //$NON-NLS-1$
+    protected final static String INDEX                = "INDEX"; //$NON-NLS-1$
+    protected final static String ROUTINE              = "ROUTINE"; //$NON-NLS-1$
+    protected final static String PROCEDURE            = "PROCEDURE"; //$NON-NLS-1$
+    protected final static String FUNCTION             = "FUNCTION"; //$NON-NLS-1$
+    protected final static String METHOD               = "METHOD"; //$NON-NLS-1$
+    protected final static String SEQUENCE             = "SEQUENCE"; //$NON-NLS-1$
+    protected final static String CONSTRAINT           = "CONSTRAINT"; //$NON-NLS-1$
+    protected final static String UNIQUE               = "UNIQUE"; //$NON-NLS-1$
+    protected final static String CHECK                = "CHECK"; //$NON-NLS-1$
+    protected final static String TYPE                 = "TYPE"; //$NON-NLS-1$
+    protected final static String ON                   = "ON"; //$NON-NLS-1$
+    protected final static String FOREIGN_KEY          = "FOREIGN KEY"; //$NON-NLS-1$
+    protected final static String REFERENCES           = "REFERENCES"; //$NON-NLS-1$
+    protected final static String PRIMARY_KEY          = "PRIMARY KEY"; //$NON-NLS-1$
+    protected final static String DEFERRABLE           = "DEFERRABLE"; //$NON-NLS-1$
+    protected final static String DEFERRED             = "DEFERRED"; //$NON-NLS-1$
+    protected final static String INITIALLY            = "INITIALLY"; //$NON-NLS-1$
+    protected final static String ALIAS                = "ALIAS"; //$NON-NLS-1$
+    protected final static String AS                   = "AS"; //$NON-NLS-1$
+    protected final static String FOR                  = "FOR"; //$NON-NLS-1$
+    protected final static String DISTINCT             = "DISTINCT"; //$NON-NLS-1$
+    protected final static String STRUCTURED           = "STRUCTURED"; //$NON-NLS-1$
+    protected final static String LONG                 = "LONG"; //$NON-NLS-1$
+    protected final static String BLOB                 = "BLOB"; //$NON-NLS-1$
+    protected final static String DBCLOB               = "DBCLOB"; //$NON-NLS-1$
+    protected final static String CLOB                 = "CLOB"; //$NON-NLS-1$
+    protected final static String VARCHAR              = "VARCHAR"; //$NON-NLS-1$
+    protected final static String WITH                 = "WITH"; //$NON-NLS-1$
+    protected final static String COMPARISONS          = "COMPARISONS"; //$NON-NLS-1$
+    protected final static String DATALINK             = "DATALINK"; //$NON-NLS-1$
+    protected final static String VARGRAPHIC           = "VARGRAPHIC"; //$NON-NLS-1$
+    protected final static String AFTER                = "AFTER"; //$NON-NLS-1$
+    protected final static String BEFORE               = "BEFORE"; //$NON-NLS-1$
+    protected final static String INSTEAD_OF           = "INSTEAD OF"; //$NON-NLS-1$
+    protected final static String INSERT               = "INSERT"; //$NON-NLS-1$
+    protected final static String NO                   = "NO"; //$NON-NLS-1$
+    protected final static String OF                   = "OF"; //$NON-NLS-1$
+    protected final static String REFERENCING          = "REFERENCING"; //$NON-NLS-1$
+    protected final static String NEW                  = "NEW"; //$NON-NLS-1$
+    protected final static String OLD                  = "OLD"; //$NON-NLS-1$
+    protected final static String NEW_TABLE            = "NEW_TABLE"; //$NON-NLS-1$
+    protected final static String OLD_TABLE            = "OLD_TABLE"; //$NON-NLS-1$
+    protected final static String EACH                 = "EACH"; //$NON-NLS-1$
+    protected final static String ROW                  = "ROW"; //$NON-NLS-1$
+    protected final static String STATEMENT            = "STATEMENT"; //$NON-NLS-1$
+    protected final static String WHEN                 = "WHEN"; //$NON-NLS-1$
+    protected final static String SCHEMA               = "SCHEMA"; //$NON-NLS-1$
+    protected final static String AUTHORIZATION        = "AUTHORIZATION"; //$NON-NLS-1$
+    protected final static String COMMENT              = "COMMENT"; //$NON-NLS-1$
+    protected final static String IS                   = "IS"; //$NON-NLS-1$
+    protected final static String GRANT                = "GRANT"; //$NON-NLS-1$
+    protected final static String REVOKE               = "REVOKE"; //$NON-NLS-1$
+    protected final static String TO               	   = "TO"; //$NON-NLS-1$
+    protected final static String FROM                 = "FROM"; //$NON-NLS-1$
+    protected final static String ROLE                 = "ROLE"; //$NON-NLS-1$
+    protected final static String USER                 = "USER"; //$NON-NLS-1$
+    protected final static String GROUP                = "GROUP"; //$NON-NLS-1$
+	protected final static String NO_ACTION			   = "NO ACTION";  //$NON-NLS-1$
+	protected final static String ZERO_STRING    	   = "0";  //$NON-NLS-1$
+	protected final static String RENAME           	   = "RENAME"; //$NON-NLS-1$
+	protected static final String WHERE				   = "WHERE"; //$NON-NLS-1$
+	protected static final String EQUALS			   = "="; //$NON-NLS-1$
+	protected static final String COMMENT_DELIMITER    = "--"; //$NON-NLS-1$
+    protected static final String LOCK                 = "LOCK"; //$NON-NLS-1$
+    protected static final String OR                   = "OR"; //$NON-NLS-1$
+    protected static final String USING                = "USING"; //$NON-NLS-1$
+
+    private static RoutineDdlBuilder routineDdlBuilder = null;
+    private IEngineeringCallBack callback = null;
+    private IEngineeringCallBack dummyCallback = null;
+    
+    
+    public void setEngineeringCallBack(IEngineeringCallBack callback) {
+    	this.callback = callback;
+    }
+
+    public IEngineeringCallBack getEngineeringCallBack() {
+    	if (this.callback != null) {
+    		return this.callback;
+    	} else{
+    		return this.getDummyEngineeringCallBack();
+    	}
+    }
+    
+    public String dropTrigger(Trigger trigger, boolean quoteIdentifiers, boolean qualifyNames) {
+        return DROP + SPACE + TRIGGER + SPACE + getName(trigger, quoteIdentifiers, qualifyNames);
+    }
+
+    public String dropProcedure(Procedure procedure, boolean quoteIdentifiers, boolean qualifyNames) {
+    	Database database = ModelHelper.getDatabase(procedure.getSchema());
+    	RoutineDdlBuilder routineDdlBuilder = DdlBuilder.getRoutineDdlBuilder(database.getVendor(),database.getVersion());
+    	if (routineDdlBuilder != null) {
+    		String ddl = routineDdlBuilder.buildDropRoutineStatement(procedure,quoteIdentifiers,qualifyNames);
+    		if (ddl != null) return ddl;
+    	}
+   		return DROP + SPACE + PROCEDURE + SPACE + getName(procedure, quoteIdentifiers, qualifyNames);
+    }
+    	
+    public String dropFunction(UserDefinedFunction function, boolean quoteIdentifiers, boolean qualifyNames) {
+    	Database database = ModelHelper.getDatabase(function.getSchema());
+    	RoutineDdlBuilder routineDdlBuilder = DdlBuilder.getRoutineDdlBuilder(database.getVendor(),database.getVersion());
+    	if (routineDdlBuilder != null) {
+    		String ddl = routineDdlBuilder.buildDropRoutineStatement(function,quoteIdentifiers,qualifyNames);
+    		if (ddl!= null) return ddl;
+    	}
+   		return DROP + SPACE + FUNCTION + SPACE + getName(function, quoteIdentifiers, qualifyNames);
+    }
+
+    public String dropView(ViewTable view, boolean quoteIdentifiers, boolean qualifyNames) {
+        return DROP + SPACE + VIEW + SPACE + getName(view, quoteIdentifiers, qualifyNames);
+    }
+
+    public String dropTableConstraint(TableConstraint constraint, boolean quoteIdentifiers, boolean qualifyNames) {
+        return ALTER + SPACE + this.getOwnerType(constraint) + SPACE + getName(constraint.getBaseTable(), quoteIdentifiers, qualifyNames)
+        	+ " DROP CONSTRAINT " + getName(constraint, quoteIdentifiers,qualifyNames); //$NON-NLS-1$
+    }
+    
+    public String dropIndex(Index index, boolean quoteIdentifiers, boolean qualifyNames) {
+        return DROP + SPACE + INDEX + SPACE + getName(index, quoteIdentifiers, qualifyNames);
+    }
+
+    public String dropTable(BaseTable table, boolean quoteIdentifiers, boolean qualifyNames) {
+        return DROP + SPACE + TABLE + SPACE + getName(table, quoteIdentifiers, qualifyNames);
+    }
+
+    public String dropSequence(Sequence sequence, boolean quoteIdentifiers, boolean qualifyNames) {
+        return DROP + SPACE + SEQUENCE + SPACE + getName(sequence, quoteIdentifiers, qualifyNames);
+    }
+    
+    public String dropSchema(Schema schema, boolean quoteIdentifiers, boolean qualifyNames) {
+        return DROP + SPACE + SCHEMA + SPACE + getName(schema, quoteIdentifiers,qualifyNames);
+    }
+
+	protected String getCommentString( SQLObject sqlObject )
+	{
+		String comment = sqlObject.getDescription();
+		if ( comment == null || comment.length() == 0 )
+		{
+			comment = EMPTY_STRING;
+		}
+		return comment;
+	}
+	
+    public String commentOn(Procedure procedure, boolean quoteIdentifiers, boolean qualifyNames) {
+        Database database = ModelHelper.getDatabase(procedure.getSchema());
+        RoutineDdlBuilder routineDdlBuilder = DdlBuilder.getRoutineDdlBuilder(database.getVendor(),database.getVersion());
+        if (routineDdlBuilder != null) {
+            String ddl = routineDdlBuilder.buildCommentOnStatement(procedure,quoteIdentifiers,qualifyNames);
+            if (ddl != null) return ddl;
+        }
+
+        String comment = procedure.getDescription();
+        if(comment == null || comment.length() == 0) {
+            return null;
+        }
+
+        String name = getName(procedure, quoteIdentifiers, qualifyNames);
+
+        return COMMENT + SPACE + ON + SPACE + PROCEDURE + SPACE + name + SPACE + IS
+            + NEWLINE + this.getSingleQuotedString(comment);
+    }
+    
+    public String commentOn(UserDefinedFunction function, boolean quoteIdentifiers, boolean qualifyNames) {
+        Database database = ModelHelper.getDatabase(function.getSchema());
+        RoutineDdlBuilder routineDdlBuilder = DdlBuilder.getRoutineDdlBuilder(database.getVendor(),database.getVersion());
+        if (routineDdlBuilder != null) {
+            String ddl = routineDdlBuilder.buildCommentOnStatement(function,quoteIdentifiers,qualifyNames);
+            if (ddl != null) return ddl;
+        }
+
+        String comment = function.getDescription();
+        if(comment == null || comment.length() == 0) {
+            return null;
+        }
+
+        String functionName = getName(function, quoteIdentifiers, qualifyNames);
+
+        return COMMENT + SPACE + ON + SPACE + FUNCTION + SPACE + functionName + SPACE + IS
+            + NEWLINE + this.getSingleQuotedString(comment);
+    }
+    
+    public String commentOn(Trigger trigger, boolean quoteIdentifiers, boolean qualifyNames) {
+        String comment = trigger.getDescription();
+        if(comment == null || comment.length() == 0) {
+            return null;
+        }
+
+        String name = getName(trigger, quoteIdentifiers, qualifyNames);
+
+        return COMMENT + SPACE + ON + SPACE + TRIGGER + SPACE + name + SPACE + IS
+            + NEWLINE + this.getSingleQuotedString(comment);
+    }
+    
+    public String commentOn(TableConstraint constraint, boolean quoteIdentifiers, boolean qualifyNames) {
+    	return commentOn(constraint, quoteIdentifiers, qualifyNames, false);
+    }
+    
+    public String commentOn(TableConstraint constraint, boolean quoteIdentifiers, boolean qualifyNames, boolean allowEmptyComment) {
+        String comment = constraint.getDescription();
+        if(comment == null || comment.length() == 0) {
+        	if (allowEmptyComment) {
+            	comment = EMPTY_STRING;
+            } else {
+            	return null;
+            }
+        }
+        String constraintName = constraint.getName();
+        String tableName = constraint.getBaseTable().getName();
+        String schemaName = constraint.getBaseTable().getSchema().getName();
+
+        if(quoteIdentifiers) {
+            constraintName = this.getDoubleQuotedString(constraintName);
+            tableName = this.getDoubleQuotedString(tableName);
+            schemaName = this.getDoubleQuotedString(schemaName);
+        }
+        if(qualifyNames) {
+            constraintName = schemaName + DOT + tableName + DOT + constraintName;
+        }
+        else {
+            constraintName = tableName + DOT + constraintName;            
+        }
+
+        return COMMENT + SPACE + ON + SPACE + CONSTRAINT + SPACE + constraintName + SPACE + IS
+            + NEWLINE + this.getSingleQuotedString(comment);
+    }
+    
+    public String commentOn(Index index, boolean quoteIdentifiers, boolean qualifyNames) {
+        String comment = index.getDescription();
+
+        if(comment == null || comment.length() == 0) {
+            return null;
+        }
+
+        String indexName = getName(index, quoteIdentifiers, qualifyNames);
+
+        return COMMENT + SPACE + ON + SPACE + INDEX + SPACE + indexName + SPACE + IS
+            + NEWLINE + this.getSingleQuotedString(comment);
+    }
+    
+    public String commentOn(Sequence sequence, boolean quoteIdentifiers, boolean qualifyNames) {
+    	return commentOn(sequence, quoteIdentifiers, qualifyNames, false);
+    }
+    
+    public String commentOn(Sequence sequence, boolean quoteIdentifiers, boolean qualifyNames, boolean allowEmptyComment) {
+        String comment = sequence.getDescription();
+        if(comment == null || comment.length() == 0) {
+        	if (allowEmptyComment) {
+            	comment = EMPTY_STRING;
+            } else {
+            	return null;
+            }
+        }
+
+        String name = getName(sequence, quoteIdentifiers, qualifyNames);
+
+        return COMMENT + SPACE + ON + SPACE + SEQUENCE + SPACE + name + SPACE + IS
+            + NEWLINE + this.getSingleQuotedString(comment);
+    }
+    
+    public String commentOn(Schema schema, boolean quoteIdentifiers, boolean qualifyNames) {
+        String comment = schema.getDescription();
+        if(comment == null || comment.length() == 0) {
+            return null;
+        }
+
+        return COMMENT + SPACE + ON + SPACE + SCHEMA + SPACE + getName(schema, quoteIdentifiers,qualifyNames) //@d00058820gs
+            + SPACE + IS + NEWLINE + this.getSingleQuotedString(comment);
+    }
+    
+    public String commentOn(StructuredUserDefinedType type, boolean quoteIdentifiers, boolean qualifyNames) {
+        String comment = type.getDescription();
+        if(comment == null || comment.length() == 0) {
+            return null;
+        }
+
+        String name = getName(type, quoteIdentifiers, qualifyNames);
+
+        return COMMENT + SPACE + ON + SPACE + STRUCTURED + SPACE + TYPE + SPACE + name + SPACE + IS
+            + NEWLINE + this.getSingleQuotedString(comment);
+    }
+    
+    public String commentOn(Table table, boolean quoteIdentifiers, boolean qualifyNames) {
+    	return  commentOn(table, quoteIdentifiers, qualifyNames, false);
+    }
+    
+    public String commentOn(Table table, boolean quoteIdentifiers, boolean qualifyNames, boolean allowEmptyComment) {
+        String comment = table.getDescription();
+        if(comment == null || comment.length() == 0) {
+        	if (allowEmptyComment) {
+            	comment = EMPTY_STRING;
+            } else {
+            	return null;
+            }
+        }
+
+        String name = getName(table, quoteIdentifiers, qualifyNames);
+
+        return COMMENT + SPACE + ON + SPACE + TABLE + SPACE + name + SPACE + IS
+            + NEWLINE + this.getSingleQuotedString(comment);
+    }
+	//@ed00058820gs
+	
+    public String dropUserDefinedType(UserDefinedType type, boolean quoteIdentifiers, boolean qualifyNames) {
+        return DROP + SPACE + TYPE + SPACE + getName(type, quoteIdentifiers, qualifyNames);
+    }
+    
+    public String createSchema(Schema schema, boolean quoteIdentifiers,boolean qualifyNames) {
+        String statement = CREATE + SPACE + SCHEMA + SPACE + AUTHORIZATION + SPACE + getName(schema, quoteIdentifiers,qualifyNames);
+    	return statement;
+    }    
+    public String createTable(Table table, boolean quoteIdentifiers, boolean qualifyNames) {
+        String statement = CREATE + SPACE + TABLE + SPACE + getName(table, quoteIdentifiers, qualifyNames)
+        	+ SPACE + LEFT_PARENTHESIS + NEWLINE ;
+        Iterator it = table.getColumns().iterator();
+        while(it.hasNext()) {
+            Column column = (Column) it.next();
+            statement += TAB + TAB + getColumnString(column, quoteIdentifiers,qualifyNames);
+            if(it.hasNext()) {
+                statement += COMMA;                
+            }
+            statement += NEWLINE;                
+        }
+        statement += TAB + RIGHT_PARENTHESIS;
+        
+        return statement;
+    }
+    
+    public String alterTableAddColumn(Column column,  boolean quoteIdentifiers, boolean qualifyNames) {
+    	Table table = column.getTable();
+    	if(table instanceof BaseTable) {
+	        String statement = ALTER + SPACE + TABLE + SPACE + getName(table, quoteIdentifiers, qualifyNames)
+	    		+ SPACE +addColumnClause(column, quoteIdentifiers,qualifyNames); //$NON-NLS-1$
+	        return statement;
+    	}
+    	return null;
+    }
+    
+    public String addColumnClause(Column column,  boolean quoteIdentifiers, boolean qualifyNames)
+    {
+    	String clause=ADD + SPACE + COLUMN +SPACE +getAlterTableAddColumnColumnString(column, quoteIdentifiers,qualifyNames);
+    	return clause;
+    }
+
+    public String alterTableDropColumn(Column column,  boolean quoteIdentifiers, boolean qualifyNames, CoreDeltaDdlGenerator deltaGen) {
+    	Table table = deltaGen.getOldContainer(column);
+    	if(table instanceof BaseTable) {
+	        String statement = ALTER + SPACE + TABLE + SPACE + getName(table, quoteIdentifiers, qualifyNames)
+	    		+ SPACE + dropColumnClause(column, quoteIdentifiers, qualifyNames, deltaGen);
+	        return statement;
+    	}
+    	return null;
+    }
+    
+    public String dropColumnClause(Column column,  boolean quoteIdentifiers, boolean qualifyNames, CoreDeltaDdlGenerator deltaGen)
+    {
+    	String clause=DROP + SPACE + COLUMN + SPACE + getColumnNameString(column, quoteIdentifiers,qualifyNames);
+    	return clause;
+    }
+
+    public String alterTableWithClauses(Table table, Vector<String> clauses, boolean quoteIdentifiers, boolean qualifyNames)
+    {
+		String statement=ALTER + SPACE +TABLE + SPACE + getName(table, quoteIdentifiers, qualifyNames) + SPACE;
+		boolean first=true;
+		for (String clause: clauses)
+		{
+			if (!first)
+			{
+				statement += NEWLINE + TAB;
+			}
+			statement += clause;
+			first=false;
+		}
+		return statement;
+    }
+    
+    public String alterTableAlterColumnDataType(Column column,  boolean quoteIdentifiers, boolean qualifyNames) {
+    	Table table = column.getTable();
+
+    	if(table instanceof BaseTable) {
+	        String statement = ALTER + SPACE + TABLE + SPACE + getName(table, quoteIdentifiers, qualifyNames)
+	    		+ SPACE + alterColumnDatatypeClause(column, quoteIdentifiers, qualifyNames); //$NON-NLS-1$
+	        return statement;
+    	}
+    	return null;
+    }
+    
+    public String alterColumnDatatypeClause(Column column, boolean quoteIdentifiers, boolean qualifyNames)
+    {
+    	String columnName = column.getName();
+    	
+        if(quoteIdentifiers) {
+            columnName = this.getDoubleQuotedString(columnName);
+        }
+            	
+        String columnString = ALTER + SPACE + COLUMN + SPACE + columnName + SPACE + 
+       // SET + SPACE + DATA_TYPE  + SPACE + getDataTypeString(column, column.getTable().getSchema(),qualifyNames); //$NON-NLS-1$
+       // fix for issue wsdbu00985096
+        SET + SPACE + DATA_TYPE  + SPACE + getDataTypeString(column,column.getTable().getSchema(),quoteIdentifiers,qualifyNames); //$NON-NLS-1$
+        return columnString;
+    }
+
+    public String alterTableAlterColumnDefaultValue(Column column,  boolean quoteIdentifiers, boolean qualifyNames) {
+    	Table table = column.getTable();
+    	if (!(table instanceof BaseTable)) return null;
+        String statement = ALTER + SPACE + TABLE + SPACE + getName(table, quoteIdentifiers, qualifyNames)
+        + SPACE + alterColumnDefaultValueClause(column, quoteIdentifiers, qualifyNames);
+    	return statement;
+    }
+    
+    public String alterColumnDefaultValueClause(Column column,  boolean quoteIdentifiers, boolean qualifyNames)
+    {
+    	String columnName = column.getName();
+        if(quoteIdentifiers) {
+            columnName = this.getDoubleQuotedString(columnName);
+        }
+        
+        String clause=ALTER + SPACE + COLUMN +SPACE + columnName; //$NON-NLS-1$
+    	String defaultValue = column.getDefaultValue();
+    	if (defaultValue == null || defaultValue.equals("")) { //$NON-NLS-1$
+    		clause += " DROP DEFAULT "; //$NON-NLS-1$
+    	} else {
+    		clause += " SET DEFAULT " + getDefaultValue(column); //$NON-NLS-1$
+    	}
+        
+    	return clause;
+    }
+    
+    public String getUpdateColumnNullValues(Column column, String defaultValue, boolean quoteIdentifiers, boolean qualifyNames)
+    {
+    	String updateStatement = null;
+    	String formattedValue = formatDefaultValue(column.getContainedType(), defaultValue);
+    	if (formattedValue != null && !formattedValue.equals("")) {
+    		String columnName = column.getName();
+    		String tableName = getName(column.getTable(), quoteIdentifiers, qualifyNames);
+    		if (quoteIdentifiers) {
+    			columnName = this.getDoubleQuotedString(columnName);
+    		}
+    		updateStatement = COMMENT_DELIMITER + SPACE + UPDATE + SPACE + tableName + SPACE +
+    		SET + SPACE + columnName + EQUALS + formattedValue + SPACE +
+    		WHERE + SPACE + columnName + SPACE + IS + SPACE + NULL;
+    	}
+    	return updateStatement;
+    }
+
+    public String alterTableAlterColumnExpression(Column column,  boolean quoteIdentifiers, boolean qualifyNames) {
+    	Table table = column.getTable();
+    	if(table instanceof BaseTable)  return null;
+    	String columnName = column.getName();
+        if(quoteIdentifiers) {
+            columnName = this.getDoubleQuotedString(columnName);
+        }
+
+        String statement = ALTER + SPACE + TABLE + SPACE + getName(table, quoteIdentifiers, qualifyNames)
+        				+ " ALTER COLUMN " + columnName ; //$NON-NLS-1$
+        ValueExpression v = column.getGenerateExpression();
+        if (v != null && !"".equals(v.getSQL())) {
+        	statement +=" SET EXPRESSION AS " + v.getSQL();   //$NON-NLS-1$
+        } else {
+        	statement += " DROP EXPRESSION"; //$NON-NLS-1$
+        }
+        
+        return statement;
+    }
+    
+    public String alterTableAlterColumnIdentity(Column column,  boolean quoteIdentifiers, boolean qualifyNames) {
+    	return null;
+    }
+    
+    public String alterTableAlterColumnNullable(Column column,  boolean quoteIdentifiers, boolean qualifyNames) {
+    	Table table = column.getTable();
+    	if (!(table instanceof BaseTable)) return null;
+    	
+        String statement = ALTER + SPACE + TABLE + SPACE + getName(table, quoteIdentifiers, qualifyNames)
+		+ SPACE + alterNullableClause(column, quoteIdentifiers, qualifyNames);
+    	return statement;
+    }
+    
+    public String alterNullableClause(Column column,  boolean quoteIdentifiers, boolean qualifyNames)
+    {
+    	String columnName = column.getName();
+        if(quoteIdentifiers) {
+            columnName = this.getDoubleQuotedString(columnName);
+        }
+    	String clause = ALTER + SPACE + COLUMN + SPACE + columnName;
+        
+    	if(column.isNullable()) {
+	        clause += " DROP NOT NULL"; //$NON-NLS-1$
+    	} else {
+	        clause += " SET NOT NULL"; //$NON-NLS-1$
+    	}
+    	return clause;
+    }
+
+    public String alterTableAlterProperties(Table table, int propertyType, boolean quoteIdentifiers, boolean qualifyNames) {
+        return null;
+    }
+
+    public String renameTable(Table table, String oldTableName, boolean quoteIdentifiers, boolean qualifyNames) {
+    	if (table == null) return null;
+        String schemaName = table.getSchema() != null ? table.getSchema().getName() : "nullschema";
+
+        if(quoteIdentifiers) {
+            oldTableName = this.getDoubleQuotedString(oldTableName);
+            schemaName = this.getDoubleQuotedString(schemaName);
+        }
+
+        if(qualifyNames) {
+            oldTableName = schemaName + DOT + oldTableName;
+        }
+
+    	return RENAME + SPACE + oldTableName + SPACE + TO + SPACE + getName(table, quoteIdentifiers, false);
+    }
+
+    public String createIndex(Index index, boolean quoteIdentifiers, boolean qualifyNames) {
+        String statement = CREATE + SPACE;
+        statement += getIndexTypePrefix(index);
+        statement += INDEX + SPACE + getName(index, quoteIdentifiers, qualifyNames);
+        statement += NEWLINE + TAB + ON + SPACE	+ getName(index.getTable(), quoteIdentifiers, qualifyNames);
+        statement += getIndexKeyColumns(index, quoteIdentifiers);
+        return statement;
+    }
+	
+    public String addCheckConstraint(CheckConstraint constraint, boolean quoteIdentifiers, boolean qualifyNames) {
+    	String checkCondition = this.getAddCheckConstraintClause(constraint, quoteIdentifiers,qualifyNames);
+    	if (checkCondition == null) return null;
+    	return ALTER + SPACE + this.getOwnerType(constraint) + SPACE + getName(constraint.getBaseTable(), quoteIdentifiers, qualifyNames)
+        	+ SPACE + checkCondition;
+    }
+
+    public String addUniqueConstraint(UniqueConstraint constraint, boolean quoteIdentifiers, boolean qualifyNames) {
+        String statement = ALTER + SPACE + this.getOwnerType(constraint) + SPACE + getName(constraint.getBaseTable(), quoteIdentifiers, qualifyNames) + SPACE;
+        String uniqueClause = this.getAddUniqueConstraintClause(constraint, quoteIdentifiers,qualifyNames);
+        if (uniqueClause == null) return null; //report error
+        statement += uniqueClause;
+        
+        return statement;
+    }
+
+    public String addForeignKey(ForeignKey foreignKey, boolean quoteIdentifiers, boolean qualifyNames) {
+        UniqueConstraint uniqueConstraint = foreignKey.getUniqueConstraint();
+        Index index = foreignKey.getUniqueIndex();
+        Table parentTable = null;
+        String parentKey = null;
+        if(uniqueConstraint != null) {
+            parentTable = uniqueConstraint.getBaseTable();
+            parentKey = this.getKeyColumns(uniqueConstraint,quoteIdentifiers);
+            if (parentKey == null) {
+                // TODO report error
+                return null;
+            }
+        }
+        else if(index != null) {
+        	parentTable = index.getTable();
+            parentKey = this.getParentKeyColumns(index, quoteIdentifiers);
+        }
+        if(parentTable == null) {
+            // TODO report error
+            return null;
+        }
+
+        String statement = ALTER + SPACE + this.getOwnerType(foreignKey) + SPACE + getName(foreignKey.getBaseTable(), quoteIdentifiers, qualifyNames)
+        	+ SPACE + ADD + SPACE + CONSTRAINT + SPACE + getName(foreignKey, quoteIdentifiers,qualifyNames) + SPACE + FOREIGN_KEY;
+        statement += this.getKeyColumns(foreignKey,quoteIdentifiers);
+        statement += NEWLINE + TAB + REFERENCES + SPACE + getName(parentTable, quoteIdentifiers, qualifyNames);
+        statement += parentKey ;
+		
+        statement += this.getDeleteReferentialActionAction(foreignKey);
+        statement += this.getUpdateReferentialActionAction(foreignKey);
+
+        if(foreignKey.isDeferrable()) {
+            statement += NEWLINE + TAB + getDeferrableClause(foreignKey);
+        }
+        return statement;
+    }
+
+    public String createRole(Role role, boolean quoteIdentifiers) {
+        String dbName = role.getName();
+        if(quoteIdentifiers) {
+        	dbName = this.getDoubleQuotedString(dbName);
+        }
+        String statement = "CREATE ROLE " + dbName; //$NON-NLS-1$ //$NON-NLS-2$
+
+        return statement;
+    }
+
+    public String dropRole(Role role, boolean quoteIdentifiers) {
+        String dbName = role.getName();
+        if(quoteIdentifiers) {
+        	dbName = this.getDoubleQuotedString(dbName);
+        }
+        String statement = "DROP ROLE " + dbName; //$NON-NLS-1$ //$NON-NLS-2$
+
+        return statement;
+    }
+
+    public String[] grantOn(Database database, boolean quoteIdentifiers) {
+    	return this.getGrantString(database,quoteIdentifiers, false);
+    }
+    
+    public String[] grantOn(Schema schema, boolean quoteIdentifiers, boolean qualifyNames) {
+    	return this.getGrantString(schema,quoteIdentifiers,qualifyNames);
+    }
+    
+    public String[] grantOn(Table table, boolean quoteIdentifiers, boolean qualifyNames) {
+    	return this.getGrantString(table,quoteIdentifiers,qualifyNames);
+    }
+
+    public String[] grantOn(UserDefinedFunction function,boolean quoteIdentifiers, boolean qualifyNames) {
+    	return this.getGrantString(function,quoteIdentifiers,qualifyNames);
+    }
+
+    public String[] grantOn(Procedure procedure,boolean quoteIdentifiers, boolean qualifyNames) {
+    	return this.getGrantString(procedure,quoteIdentifiers,qualifyNames);
+    }
+
+    public String[] grantOn(Sequence sequence, boolean quoteIdentifiers, boolean qualifyNames) {
+    	return this.getGrantString(sequence,quoteIdentifiers,qualifyNames);
+    }
+
+    public String[] grantOn(Index index, boolean quoteIdentifiers, boolean qualifyNames) {
+    	return this.getGrantString(index,quoteIdentifiers,qualifyNames);
+    }
+
+    public String[] grantOn(DistinctUserDefinedType type, boolean quoteIdentifiers, boolean qualifyNames) {
+    	return this.getGrantString(type,quoteIdentifiers,qualifyNames);
+    }
+
+    public String[] grantOn(Role role, boolean quoteIdentifiers) {
+    	Vector authVec = new Vector();
+    	for (Iterator iter = role.getRoleAuthorization().iterator(); iter.hasNext();) {
+    		authVec.add(this.getGrantRoleAuthorizationString((RoleAuthorization)iter.next(), quoteIdentifiers));
+    	}
+    	String[] authStr = new String[authVec.size()];
+    	authVec.copyInto(authStr);
+    	return authStr;
+    }
+
+    public String getGrantRoleAuthorizationStatement(RoleAuthorization roleAuth, boolean quoteIdentifiers) {
+    	return getGrantRoleAuthorizationString(roleAuth,quoteIdentifiers);
+    }
+
+    public String[] revokeFrom(Database database, boolean quoteIdentifiers, boolean qualifyNames) {
+    	return this.getRevokeString(database,quoteIdentifiers,false);
+    }
+
+    public String[] revokeFrom(Schema schema, boolean quoteIdentifiers, boolean qualifyNames) {
+    	return this.getRevokeString(schema,quoteIdentifiers,qualifyNames);
+    }
+
+    public String[] revokeFrom(Table table, boolean quoteIdentifiers, boolean qualifyNames) {
+    	return this.getRevokeString(table,quoteIdentifiers,qualifyNames);
+    }
+
+    public String[] revokeFrom(UserDefinedFunction function,boolean quoteIdentifiers, boolean qualifyNames) {
+    	return this.getRevokeString(function,quoteIdentifiers,qualifyNames);
+    }
+
+    public String[] revokeFrom(Procedure procedure,boolean quoteIdentifiers, boolean qualifyNames) {
+    	return this.getRevokeString(procedure,quoteIdentifiers,qualifyNames);
+    }
+
+    public String[] revokeFrom(Sequence sequence, boolean quoteIdentifiers, boolean qualifyNames) {
+    	return this.getRevokeString(sequence,quoteIdentifiers,qualifyNames);
+    }
+
+    public String[] revokeFrom(Index index, boolean quoteIdentifiers, boolean qualifyNames) {
+    	return this.getRevokeString(index,quoteIdentifiers,qualifyNames);
+    }
+
+    public String[] revokeFrom(DistinctUserDefinedType type, boolean quoteIdentifiers, boolean qualifyNames) {
+    	return this.getRevokeString(type,quoteIdentifiers,qualifyNames);
+    }
+
+    public String[] revokeFrom(Role role, boolean quoteIdentifiers) {
+    	Vector authVec = new Vector();
+    	for (Iterator iter = role.getRoleAuthorization().iterator(); iter.hasNext();) {
+    		authVec.add(this.getRevokeRoleAuthorizationString((RoleAuthorization)iter.next(), quoteIdentifiers));
+    	}
+    	String[] authStr = new String[authVec.size()];
+    	authVec.copyInto(authStr);
+    	return authStr;
+    }
+    
+	public String getRevokeRoleAuthorizationStatement(RoleAuthorization roleAuth, boolean quoteIdentifiers) {
+    	return 	getRevokeRoleAuthorizationString(roleAuth,quoteIdentifiers);
+}
+
+    public String createTableCodetemplate(Table table, int appliedType, boolean isProlog, Map patternMap){
+    	if (!patternMap.containsKey("Table")) return null;
+    	CodeTemplateContextPattern pattern = (CodeTemplateContextPattern) patternMap.get("Table");
+
+    	if ((pattern.getAppliedType() & appliedType) != appliedType)  return null;
+
+		final DatabaseDefinition databaseDefinition = IBMPluginActivator.getInstance().getDatabaseDefinitionRegistry().getDefinition(ModelHelper.getDatabase(table.getSchema()));
+		String terminator = databaseDefinition.getSQLTerminationCharacter();
+		
+    	if (appliedType == DdlGenerationUtility.GENERATE_CREATE_PATTERN) {
+    		if (isProlog) {
+	    		String prolog = pattern.getCreateProlog();
+	    		if (prolog != null) {
+	    			prolog = prolog.replaceAll("\\{schema\\}",table.getSchema().getName());
+	    			prolog = prolog.replaceAll("\\{table\\}",table.getName());
+	    			prolog = prolog.replaceAll("\\{terminator\\}",terminator);
+	    			return prolog;
+	    		};
+    		} else {
+	    		String postlog = pattern.getCreatePostlog();
+	    		if (postlog != null) {
+	    			postlog = postlog.replaceAll("\\{schema\\}",table.getSchema().getName());
+	    			postlog = postlog.replaceAll("\\{table\\}",table.getName());
+	    			postlog = postlog.replaceAll("\\{terminator\\}",terminator);
+	    			return postlog;
+	    		}
+    		}
+    	} else if (appliedType == DdlGenerationUtility.GENERATE_DROP_PATTERN) {
+    		if (isProlog) {
+	    		String prolog = pattern.getDropProlog();
+	    		if (prolog != null) {
+	    			prolog = prolog.replaceAll("\\{schema\\}",table.getSchema().getName());
+	    			prolog = prolog.replaceAll("\\{table\\}",table.getName());
+	    			prolog = prolog.replaceAll("\\{terminator\\}",terminator);
+	    			return prolog;
+	       		}
+    		} else {
+	    		String postlog = pattern.getDropPostlog();
+	    		if (postlog != null) {
+	    			postlog = postlog.replaceAll("\\{schema\\}",table.getSchema().getName());
+	    			postlog = postlog.replaceAll("\\{table\\}",table.getName());
+	    			postlog = postlog.replaceAll("\\{terminator\\}",terminator);
+	    			return postlog;
+	    		}
+    		}
+    	}
+    	return null;
+    }
+    
+    public String createRoutineCodetemplate(Routine routine, int appliedType, boolean isProlog, Map patternMap){
+    	if (!patternMap.containsKey("Routine")) return null;
+    	CodeTemplateContextPattern pattern = (CodeTemplateContextPattern) patternMap.get("Routine");
+
+    	if ((pattern.getAppliedType() & appliedType) != appliedType)  return null;
+
+		final DatabaseDefinition databaseDefinition = IBMPluginActivator.getInstance().getDatabaseDefinitionRegistry().getDefinition(ModelHelper.getDatabase(routine.getSchema()));
+		String terminator = databaseDefinition.getSQLTerminationCharacter();
+		
+    	if (appliedType == DdlGenerationUtility.GENERATE_CREATE_PATTERN) {
+    		if (isProlog) {
+	    		String prolog = pattern.getCreateProlog();
+	    		if (prolog != null) {
+	    			prolog = prolog.replaceAll("\\{schema\\}",routine.getSchema().getName());
+	    			prolog = prolog.replaceAll("\\{routine\\}",routine.getName());
+	    			prolog = prolog.replaceAll("\\{terminator\\}",terminator);
+	    			return prolog;
+	    		};
+    		} else {
+	    		String postlog = pattern.getCreatePostlog();
+	    		if (postlog != null) {
+	    			postlog = postlog.replaceAll("\\{schema\\}",routine.getSchema().getName());
+	    			postlog = postlog.replaceAll("\\{routine\\}",routine.getName());
+	    			postlog = postlog.replaceAll("\\{terminator\\}",terminator);
+	    			return postlog;
+	    		}
+    		}
+    	} else if (appliedType == DdlGenerationUtility.GENERATE_DROP_PATTERN) {
+    		if (isProlog) {
+	    		String prolog = pattern.getDropProlog();
+	    		if (prolog != null) {
+	    			prolog = prolog.replaceAll("\\{schema\\}",routine.getSchema().getName());
+	    			prolog = prolog.replaceAll("\\{routine\\}",routine.getName());
+	    			prolog = prolog.replaceAll("\\{terminator\\}",terminator);
+	    			return prolog;
+	       		}
+    		} else {
+	    		String postlog = pattern.getDropPostlog();
+	    		if (postlog != null) {
+	    			postlog = postlog.replaceAll("\\{schema\\}",routine.getSchema().getName());
+	    			postlog = postlog.replaceAll("\\{routine\\}",routine.getName());
+	    			postlog = postlog.replaceAll("\\{terminator\\}",terminator);
+	    			return postlog;
+	    		}
+    		}
+    	}
+    	return null;
+    }
+
+    public String createConstraintCodetemplate(TableConstraint constraint, int appliedType, boolean isProlog, Map patternMap){
+    	if (!patternMap.containsKey("Constraint")) return null;
+    	CodeTemplateContextPattern pattern = (CodeTemplateContextPattern) patternMap.get("Constraint");
+
+    	if ((pattern.getAppliedType() & appliedType) != appliedType)  return null;
+
+		final DatabaseDefinition databaseDefinition = IBMPluginActivator.getInstance().getDatabaseDefinitionRegistry().getDefinition(ModelHelper.getDatabase(constraint.getBaseTable().getSchema()));
+		String terminator = databaseDefinition.getSQLTerminationCharacter();
+		
+    	if (appliedType == DdlGenerationUtility.GENERATE_CREATE_PATTERN) {
+    		if (isProlog) {
+	    		String prolog = pattern.getCreateProlog();
+	    		if (prolog != null) {
+	    			prolog = prolog.replaceAll("\\{schema\\}",constraint.getBaseTable().getSchema().getName());
+	    			prolog = prolog.replaceAll("\\{table\\}",constraint.getBaseTable().getName());
+	    			prolog = prolog.replaceAll("\\{constraint\\}",constraint.getName());
+	    			prolog = prolog.replaceAll("\\{terminator\\}",terminator);
+	    			return prolog;
+	    		};
+    		} else {
+	    		String postlog = pattern.getCreatePostlog();
+	    		if (postlog != null) {
+	    			postlog = postlog.replaceAll("\\{schema\\}",constraint.getBaseTable().getSchema().getName());
+	    			postlog = postlog.replaceAll("\\{table\\}",constraint.getBaseTable().getName());
+	    			postlog = postlog.replaceAll("\\{constraint\\}",constraint.getName());
+	    			postlog = postlog.replaceAll("\\{terminator\\}",terminator);
+	    			return postlog;
+	    		}
+    		}
+    	} else if (appliedType == DdlGenerationUtility.GENERATE_DROP_PATTERN) {
+    		if (isProlog) {
+	    		String prolog = pattern.getDropProlog();
+	    		if (prolog != null) {
+	    			prolog = prolog.replaceAll("\\{schema\\}",constraint.getBaseTable().getSchema().getName());
+	    			prolog = prolog.replaceAll("\\{table\\}",constraint.getBaseTable().getName());
+	    			prolog = prolog.replaceAll("\\{constraint\\}",constraint.getName());
+	    			prolog = prolog.replaceAll("\\{terminator\\}",terminator);
+	    			return prolog;
+	       		}
+    		} else {
+	    		String postlog = pattern.getDropPostlog();
+	    		if (postlog != null) {
+	    			postlog = postlog.replaceAll("\\{schema\\}",constraint.getBaseTable().getSchema().getName());
+	    			postlog = postlog.replaceAll("\\{table\\}",constraint.getBaseTable().getName());
+	    			postlog = postlog.replaceAll("\\{constraint\\}",constraint.getName());
+	    			postlog = postlog.replaceAll("\\{terminator\\}",terminator);
+	    			return postlog;
+	    		}
+    		}
+    	}
+    	return null;
+    }
+    
+    public String createViewCodetemplate(ViewTable view, int appliedType, boolean isProlog, Map patternMap){
+    	if (!patternMap.containsKey("View")) return null;
+    	CodeTemplateContextPattern pattern = (CodeTemplateContextPattern) patternMap.get("View");
+
+    	if ((pattern.getAppliedType() & appliedType) != appliedType)  return null;
+
+		final DatabaseDefinition databaseDefinition = IBMPluginActivator.getInstance().getDatabaseDefinitionRegistry().getDefinition(ModelHelper.getDatabase(view.getSchema()));
+		String terminator = databaseDefinition.getSQLTerminationCharacter();
+		
+    	if (appliedType == DdlGenerationUtility.GENERATE_CREATE_PATTERN) {
+    		if (isProlog) {
+	    		String prolog = pattern.getCreateProlog();
+	    		if (prolog != null) {
+	    			prolog = prolog.replaceAll("\\{schema\\}",view.getSchema().getName());
+	    			prolog = prolog.replaceAll("\\{view\\}",view.getName());
+	    			prolog = prolog.replaceAll("\\{terminator\\}",terminator);
+	    			return prolog;
+	    		};
+    		} else {
+	    		String postlog = pattern.getCreatePostlog();
+	    		if (postlog != null) {
+	    			postlog = postlog.replaceAll("\\{schema\\}",view.getSchema().getName());
+	    			postlog = postlog.replaceAll("\\{view\\}",view.getName());
+	    			postlog = postlog.replaceAll("\\{terminator\\}",terminator);
+	    			return postlog;
+	    		}
+    		}
+    	} else if (appliedType == DdlGenerationUtility.GENERATE_DROP_PATTERN) {
+    		if (isProlog) {
+	    		String prolog = pattern.getDropProlog();
+	    		if (prolog != null) {
+	    			prolog = prolog.replaceAll("\\{schema\\}",view.getSchema().getName());
+	    			prolog = prolog.replaceAll("\\{view\\}",view.getName());
+	    			prolog = prolog.replaceAll("\\{terminator\\}",terminator);
+	    			return prolog;
+	       		}
+    		} else {
+	    		String postlog = pattern.getDropPostlog();
+	    		if (postlog != null) {
+	    			postlog = postlog.replaceAll("\\{schema\\}",view.getSchema().getName());
+	    			postlog = postlog.replaceAll("\\{view\\}",view.getName());
+	    			postlog = postlog.replaceAll("\\{terminator\\}",terminator);
+	    			return postlog;
+	    		}
+    		}
+    	}
+    	return null;
+    }
+
+    
+    protected String getDeferrableClause(Constraint constraint) {
+        String clause = null;
+        if(constraint.isDeferrable()) {
+            clause = DEFERRABLE;
+            if(constraint.isInitiallyDeferred()) {
+                clause += SPACE + INITIALLY + SPACE + DEFERRED;
+            }
+        }
+        return clause;
+    }
+    
+    protected String getReferentialAction(ReferentialActionType action) {
+        if(action == ReferentialActionType.CASCADE_LITERAL) {
+            return CASCADE;
+        }
+        else if(action == ReferentialActionType.RESTRICT_LITERAL) {
+            return RESTRICT;
+        }
+        else if(action == ReferentialActionType.SET_DEFAULT_LITERAL) {
+            return SET + SPACE + DEFAULT;
+        }
+        else if(action == ReferentialActionType.SET_NULL_LITERAL) {
+            return SET + SPACE + NULL;
+        }
+        return "";  //$NON-NLS-1$
+    }
+
+    protected String getViewColumnList(ViewTable view, boolean quoteIdentifiers) {
+        String columns = null;
+        Iterator it = view.getColumns().iterator();
+        if(it.hasNext()) {
+            Column c = (Column) it.next();
+            columns = c.getName();
+            if (quoteIdentifiers) {
+            	columns = this.getDoubleQuotedString(columns);
+            }
+        }
+        else {
+            return null;
+        }
+
+        while(it.hasNext()) {
+            Column c = (Column) it.next();
+            String columnName = c.getName();
+            if (quoteIdentifiers) {
+            	columnName = this.getDoubleQuotedString(columnName);
+            }
+            columns += COMMA + SPACE + columnName;
+        }
+        
+        return columns;
+    }
+    
+    protected String getColumnNameString(Column column, boolean quoteIdentifiers,boolean qualifyNames) {
+        String columnName = column.getName();
+        if(quoteIdentifiers) {
+            columnName = this.getDoubleQuotedString(columnName);
+        }
+        return columnName;
+    }
+ 
+    protected String getAlterTableAddColumnColumnString(Column column, boolean quoteIdentifiers,boolean qualifyNames) {
+    	return getColumnString(column,quoteIdentifiers,qualifyNames);
+    }
+    
+    protected String getColumnString(Column column, boolean quoteIdentifiers,boolean qualifyNames) {
+            String columnName = column.getName();
+            if(quoteIdentifiers) {
+                columnName = this.getDoubleQuotedString(columnName);
+            }
+            
+        // String columnString = columnName + SPACE + getDataTypeString(column, column.getTable().getSchema(),qualifyNames);
+        // fix for issue wsdbu00985096
+        String columnString = columnName + SPACE + getDataTypeString(column,column.getTable().getSchema(),quoteIdentifiers,qualifyNames); 
+        String defaultValue = this.getDefaultValue(column);
+        if (defaultValue != null && !defaultValue.equals(EMPTY_STRING)) {
+       		columnString = columnString + SPACE + DEFAULT + SPACE + defaultValue;
+        }
+    
+        if(!column.isNullable()) {
+            columnString = columnString + SPACE + NOT + SPACE + NULL;
+        }
+        
+        return columnString;
+    }
+
+    protected String getAddUniqueConstraintClause(UniqueConstraint constraint, boolean quoteIdentifiers) {
+    	return this.getAddUniqueConstraintClause(constraint, quoteIdentifiers, false);
+    }
+
+    protected String getAddUniqueConstraintClause(UniqueConstraint constraint, boolean quoteIdentifiers,boolean qualifyNames) {
+        String constraintName = getName(constraint, quoteIdentifiers, qualifyNames);
+
+        String text =  ADD + SPACE + CONSTRAINT + SPACE + constraintName 
+        	+ SPACE + getUniqueConstraintType(constraint);
+        	
+        String keyList = this.getKeyColumns(constraint,quoteIdentifiers);
+        
+        if (keyList == null){
+            //report error
+            return null;
+        }
+        
+        text += keyList;
+
+        if(constraint.isDeferrable()) {
+            text += SPACE + getDeferrableClause(constraint);
+        }
+        return text;
+    }
+
+    protected String getUniqueConstraintType(UniqueConstraint constraint) {
+        if(constraint instanceof PrimaryKey) {
+            return PRIMARY_KEY;
+        }
+        return UNIQUE;
+    }
+
+    protected String getAddCheckConstraintClause(CheckConstraint constraint, boolean quoteIdentifiers) {
+        String constraintName = getName(constraint, quoteIdentifiers);
+
+        SearchCondition searchCondition = constraint.getSearchCondition();
+        if (searchCondition == null) return null;
+        String text =  ADD + SPACE + CONSTRAINT + SPACE + constraintName + SPACE + CHECK
+        	+ SPACE + LEFT_PARENTHESIS + searchCondition.getSQL() + RIGHT_PARENTHESIS;
+        if(constraint.isDeferrable()) {
+            text += SPACE + getDeferrableClause(constraint);
+        }
+        return text;
+    }
+
+    protected String getAddCheckConstraintClause(CheckConstraint constraint, boolean quoteIdentifiers,boolean qualifyNames) {
+        String constraintName = getName(constraint, quoteIdentifiers,false);
+
+        SearchCondition searchCondition = constraint.getSearchCondition();
+        if (searchCondition == null) return null;
+        String text =  ADD + SPACE + CONSTRAINT + SPACE + constraintName + SPACE + CHECK
+        	+ SPACE + LEFT_PARENTHESIS + searchCondition.getSQL() + RIGHT_PARENTHESIS;
+        if(constraint.isDeferrable()) {
+            text += SPACE + getDeferrableClause(constraint);
+        }
+        return text;
+    }
+
+    protected String getKeyColumns(ReferenceConstraint constraint, boolean quoteIdentifiers) {
+        String columns = NEWLINE + TAB + LEFT_PARENTHESIS;
+        Iterator it = constraint.getMembers().iterator();
+        if(it.hasNext()) {
+            Column c = (Column) it.next();
+            String colName = c.getName();
+            if (quoteIdentifiers) {
+            	colName = this.getDoubleQuotedString(colName);
+            }
+            columns += colName;
+        }
+        else {
+            // TODO report error
+            return null;
+        }
+        
+        while(it.hasNext()) {
+            Column c = (Column) it.next();
+            String colName = c.getName();
+            if (quoteIdentifiers) {
+            	colName = this.getDoubleQuotedString(colName);
+            }
+            columns += COMMA;
+            columns += NEWLINE + TAB + SPACE + colName;
+        }
+
+        columns += RIGHT_PARENTHESIS;
+        return columns;
+    }
+
+    protected String getIndexKeyColumns(Index index, boolean quoteIdentifiers) {
+        String columns = NEWLINE + TAB + LEFT_PARENTHESIS;
+        Iterator it = index.getMembers().iterator();
+        if(it.hasNext()) {
+        	String keyMemberString = null;
+            IndexMember m = (IndexMember) it.next();
+            Column column = m.getColumn();
+            if (column != null) {
+            	keyMemberString = getIndexKeyColumnName(index, column, quoteIdentifiers);
+            }
+            else {
+            	if (m.getExpression() != null) {
+            		keyMemberString = m.getExpression().getSql();
+            	}
+            }
+            columns += keyMemberString + this.getIncrementTypeString(m);
+        }
+        else {
+            // TODO report error
+            return null;
+        }
+        
+        while(it.hasNext()) {
+        	String keyMemberString = null;
+            IndexMember m = (IndexMember) it.next();
+            Column column = m.getColumn();
+            if (column != null) {
+            	keyMemberString = getIndexKeyColumnName(index, column, quoteIdentifiers);
+            }
+            else {
+            	if (m.getExpression() != null) {
+            		keyMemberString = m.getExpression().getSql();
+            	}
+            }
+            columns += COMMA;
+            columns += NEWLINE+ TAB + SPACE + SPACE + keyMemberString +  this.getIncrementTypeString(m);
+        }
+        columns += RIGHT_PARENTHESIS;
+        return columns;
+    }
+
+	/**
+	 * Get the name of the column for use in the create index statement key members list
+	 * 
+	 * @param column An index key column
+	 * @param quoteIdentifiers Delimit identifiers if true
+	 * @return String containing the name of the column
+	 */
+	protected String getIndexKeyColumnName(Index index, Column column, boolean quoteIdentifiers) {
+		String keyMemberString;
+		keyMemberString = column.getName();
+		if (quoteIdentifiers) {
+			keyMemberString = this.getDoubleQuotedString(keyMemberString);
+		}
+		return keyMemberString;
+	}
+  
+    protected String getParentKeyColumns(Index index, boolean quoteIdentifiers) {
+        String columns = NEWLINE + TAB + LEFT_PARENTHESIS;
+        Iterator it = index.getMembers().iterator();
+        if(it.hasNext()) {
+            IndexMember m = (IndexMember) it.next();
+            Column column = m.getColumn();
+            if (column != null) {
+            	String columnName = column.getName();
+            	if(quoteIdentifiers) {
+            		columnName = this.getDoubleQuotedString(columnName);
+            	}
+            	columns += columnName;
+            }
+            else {
+            	return null;
+            }
+        }
+        else {
+            // TODO report error
+            return null;
+        }
+        
+        while(it.hasNext()) {
+            IndexMember m = (IndexMember) it.next();
+            Column column = m.getColumn();
+            if (column != null) {
+            	String columnName = column.getName();
+            	if (quoteIdentifiers) {
+            		columnName = this.getDoubleQuotedString(columnName);
+            	}
+            	columns += COMMA;
+            	columns += NEWLINE + TAB +SPACE + SPACE + columnName;
+            }
+            else {
+            	return null;
+            }
+        }
+        columns += RIGHT_PARENTHESIS;
+        return columns;
+    }
+  
+	protected String getRoutineSpecifier(SQLObject obj, boolean quoteIdentifiers, boolean qualifyNames) {
+		String name;
+		Routine routine = (Routine)obj;
+		Schema schema = routine.getSchema();
+		name = getName(routine, quoteIdentifiers, qualifyNames);
+		name += "("; //$NON-NLS-1$
+		Iterator it = routine.getParameters().iterator();
+		while (it.hasNext()) {
+			Parameter parm = (Parameter)it.next();
+			//name += getDataTypeString(parm, schema, qualifyNames) + (it.hasNext()?",":""); //$NON-NLS-1$ //$NON-NLS-2$
+			// fix for issue wsdbu00985096
+			name += getDataTypeString(parm,schema,quoteIdentifiers,qualifyNames) + (it.hasNext()?",":""); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		name += ")"; //$NON-NLS-1$
+		return name;
+	}
+
+	public String getParameterString(Parameter parameter, Schema schema, boolean qualifyNames) {
+		return getDataTypeString(parameter, schema, qualifyNames);
+	}
+	
+	/**
+	 * Get the string for the row data type fields. Subclass can override
+	 * this method to provide the database manager specific string.
+	 * This method was created for the compare and sync to compare row data type fields.
+	 * @param type A row data type object
+	 * @return The string for the fields of the row data type.
+	 */
+	public String getRowDataTypeFields(DataType type) {
+		return null;
+	}
+	
+	//(JYEH)This method was created for the compare and sync to compare data type strings.
+	public String getObjectDataTypeString(TypedElement typedElement) {
+		return getDataTypeStringIgnoreDomain(typedElement, null, true, null);
+	}
+
+	public String getObjectDataTypeString(TypedElement typedElement, SQLDataType type) {
+		return getDataTypeStringIgnoreDomain(typedElement, null, true, type);
+	}
+
+	//(JYEH)The default implementation returns the data type string without considering the domains. This is required by
+	//the getObjectDataTypeString(TypedElement) method which is used by the compare and sync editor.
+	protected String getDataTypeString(TypedElement typedElement, Schema schema,boolean qualifyNames) {
+		return getDataTypeStringIgnoreDomain(typedElement, schema, qualifyNames, null);
+	}
+
+	private String getDataTypeStringIgnoreDomain(TypedElement typedElement,
+			Schema schema, boolean qualifyNames, SQLDataType type) {
+		SQLDataType containedType = null;
+		if (type != null) {
+			containedType = type;
+		}
+		else {
+			containedType = typedElement.getContainedType();
+		}
+        if(containedType != null) {
+            if(containedType instanceof PredefinedDataType) {
+                EObject root = ContainmentServiceImpl.INSTANCE.getRootElement(typedElement);
+                if(root instanceof Database) {
+                    DatabaseDefinition def = DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition((Database) root);
+                    return def.getPredefinedDataTypeFormattedName((PredefinedDataType) containedType) + this.getCharacterSetString(containedType);
+                }
+            }
+        }
+        else {
+            UserDefinedType referencedType = typedElement.getReferencedType();
+            if(referencedType != null) {
+                if (referencedType.getSchema() != schema || qualifyNames) {
+                	return this.getName(referencedType,false, true);
+                } else {
+                	return referencedType.getName();
+                }
+            }
+        }
+        return null;
+	}
+
+    protected String getDataTypeString(TypedElement typedElement, Schema schema,boolean quoteIdentifiers,boolean qualifyNames) {
+        SQLDataType containedType = typedElement.getContainedType();
+        if(containedType != null) {
+            if(containedType instanceof PredefinedDataType) {
+                EObject root = ContainmentServiceImpl.INSTANCE.getRootElement(typedElement);
+                if(root instanceof Database) {
+                    DatabaseDefinition def = DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition((Database) root);
+                    return def.getPredefinedDataTypeFormattedName((PredefinedDataType) containedType) + this.getCharacterSetString(containedType);
+                }
+            }
+        }
+        else {
+            UserDefinedType referencedType = typedElement.getReferencedType();
+            if(referencedType != null) {
+                if (referencedType.getSchema() != schema || qualifyNames) {
+                	return this.getName(referencedType,quoteIdentifiers, true);
+                } else {
+                	return this.getName(referencedType,quoteIdentifiers, false);
+                }
+            }
+        }
+        return null;
+    }
+
+    public String getPredefinedTypeCharacterSetString (PredefinedDataType type) {
+    	return getCharacterSetString(type);
+    }
+    
+    protected String getCharacterSetString(SQLDataType type){
+    	return "";
+    }
+    protected String getDomainTypeString(TypedElement typedElement, Schema schema,boolean qualifyNames) {
+    	TypedElementLogicalDomainProvider elementDomainProvider = DdlGenerationUtility.getElementDomainProvider();
+    	if (elementDomainProvider != null) {
+    		if(elementDomainProvider.hasDomain(typedElement)) {
+    			String domainType = elementDomainProvider.getDomainBaseType(typedElement);
+    			if ("".equals(domainType)) return null;
+    			return domainType;
+    		}
+    	}
+    	return null;
+    }
+    
+    
+    protected String getName(TableConstraint constraint, boolean quoteIdentifiers) {
+        String name = constraint.getName();
+
+        if(quoteIdentifiers) {
+            name = this.getDoubleQuotedString(name);
+        }
+    
+        return name;
+    }
+    
+    protected String getName(TableConstraint constraint, boolean quoteIdentifiers,boolean qualifyNames) {
+    	return this.getName(constraint, quoteIdentifiers);
+    }
+    
+    protected String getTableConstraintName(TableConstraint constraint, boolean quoteIdentifiers,boolean qualifyNames) {
+    	String name = constraint.getName();
+        String tableName = constraint.getBaseTable().getName();
+        
+        if(quoteIdentifiers) {
+        	name = this.getDoubleQuotedString(name);
+        	tableName = this.getDoubleQuotedString(tableName);
+        }
+        if(qualifyNames) {
+        	name = tableName + DOT + name;
+        }
+        
+        return name;
+    }
+
+    protected String getName(Column column, boolean quoteIdentifiers, boolean qualifyNames) {
+        String name = column.getName();
+        String tableName = column.getTable().getName();
+        String schemaName = column.getTable().getSchema().getName();
+    
+        if(quoteIdentifiers) {
+            name = this.getDoubleQuotedString(name);
+            tableName  = this.getDoubleQuotedString(tableName);
+            schemaName  = this.getDoubleQuotedString(schemaName);
+        }
+        if(qualifyNames) {
+            name = schemaName + DOT + tableName + DOT + name;
+        }
+		
+        return name;
+    }
+
+    protected String getName(Trigger trigger, boolean quoteIdentifiers, boolean qualifyNames) {
+        String name = trigger.getName();
+        Schema schema = trigger.getSchema() ==null? trigger.getSubjectTable().getSchema():trigger.getSchema();
+        String schemaName = schema.getName();
+    
+        if(quoteIdentifiers) {
+            name = this.getDoubleQuotedString(name);
+            schemaName  = this.getDoubleQuotedString(schemaName);
+        }
+        if(qualifyNames) {
+            name = schemaName + DOT + name;
+        }
+		
+        return name;
+    }
+
+    protected String getName(Routine routine, boolean quoteIdentifiers, boolean qualifyNames) {
+        String name = routine.getName();
+        String schemaName = routine.getSchema().getName();
+
+        if(quoteIdentifiers) {
+            name = this.getDoubleQuotedString(name);
+            schemaName  = this.getDoubleQuotedString(schemaName);
+        }
+        if(qualifyNames) {
+            name = schemaName + DOT + name;
+        }
+
+        return name;
+    }
+
+    protected String getName(Index index, boolean quoteIdentifiers, boolean qualifyNames) {
+        Table table = index.getTable();
+
+        String indexName = index.getName();
+        Schema schema = index.getSchema();
+        if (schema == null) {
+        	schema = table.getSchema();
+        }
+    	String schemaName = schema.getName();
+        if(quoteIdentifiers) {
+            indexName = this.getDoubleQuotedString(indexName);
+            schemaName = this.getDoubleQuotedString(schemaName);
+        }
+
+        if(qualifyNames) {
+            indexName = schemaName + DOT + indexName;
+	    }
+        return indexName;
+    }
+
+    protected String getName(Database database, boolean quoteIdentifiers) {
+        String name = database.getName();
+
+        if(quoteIdentifiers) {
+            name = this.getDoubleQuotedString(name);
+        }
+    
+        return name;
+    }
+
+    protected String getName(AuthorizationIdentifier auth, boolean quoteIdentifiers) {
+        String name = auth.getName();
+
+        if(quoteIdentifiers && !name.equals("PUBLIC")) { // $NON-NLS-1$
+            name = this.getDoubleQuotedString(name);
+        }
+    
+        return name;
+    }
+
+    protected String getName(Schema schema, boolean quoteIdentifiers, boolean qualifyNames) {
+        String schemaName = schema.getName();
+
+        if(quoteIdentifiers) {
+            schemaName = this.getDoubleQuotedString(schemaName);
+        }
+
+        return schemaName;
+    }   
+    
+    protected String getName(Table table, boolean quoteIdentifiers, boolean qualifyNames) {
+        String tableName = table.getName();
+        String schemaName = table.getSchema() != null ? table.getSchema().getName() : "nullschema";
+        if (table.getSchema() == null) {
+        	IBMPluginActivator.getInstance().writeLog(IStatus.ERROR, 0, "Table " + tableName + " does not have a schema. The table name will be qualified with \"nullschema\" in the DDL for now.", null);	        	
+        }
+        
+        if(quoteIdentifiers) {
+            tableName = this.getDoubleQuotedString(tableName);
+            schemaName = this.getDoubleQuotedString(schemaName);
+        }
+
+        if(qualifyNames) {
+            tableName = schemaName + DOT + tableName;
+        }
+    
+        return tableName;
+    }
+
+    protected String getName(Sequence sequence, boolean quoteIdentifiers, boolean qualifyNames) {
+        String sequenceName = sequence.getName();
+        String schemaName = sequence.getSchema() != null ? sequence.getSchema().getName() : null;
+
+        if (schemaName == null) {
+        	IBMPluginActivator.getInstance().writeLog(IStatus.ERROR, 0, "Sequence " + sequence + " does not have a schema. The sequence name will not be qualified in the DDL.", null);	
+        }
+
+        if(quoteIdentifiers) {
+            sequenceName = this.getDoubleQuotedString(sequenceName);
+            if (schemaName != null) {
+            	schemaName = this.getDoubleQuotedString(schemaName);	
+            }            
+        }
+
+        if(qualifyNames && schemaName != null) {
+            sequenceName = schemaName + DOT + sequenceName;
+        }
+    
+        return sequenceName;
+    }
+    
+    protected String getName(UserDefinedType type, boolean quoteIdentifiers, boolean qualifyNames) {
+        String typeName = type.getName();
+        String schemaName = type.getSchema() != null ? type.getSchema().getName() : null;
+
+        if (schemaName == null) {
+        	IBMPluginActivator.getInstance().writeLog(IStatus.ERROR, 0, "User-defined type " + type + " does not have a schema. The user-defined type name will not be qualified in the DDL.", null);	
+        }
+
+        if(quoteIdentifiers) {
+            typeName = this.getDoubleQuotedString(typeName);
+            if (schemaName != null) {
+            	schemaName = this.getDoubleQuotedString(schemaName);	
+            }            
+        }
+
+        if(qualifyNames && schemaName != null) {
+            typeName = schemaName + DOT + typeName;
+        }
+    
+        return typeName;
+    }
+
+    protected String ensureSingleQuotedString(String original) {
+    	if (original == null) return null;
+    	if (original.startsWith(SINGLE_QUOTE) && 
+    			original.endsWith(SINGLE_QUOTE)) 
+    		return original;
+    	return getSingleQuotedString(original);
+    }
+    
+    protected String getSingleQuotedString(String orignal) {
+        String result  = orignal;
+        if ( orignal.startsWith( SINGLE_QUOTE )
+                && orignal.endsWith( SINGLE_QUOTE ) ) {
+            result= orignal.substring(1,orignal.length()-1);
+        }
+
+        result = result.replaceAll(SINGLE_QUOTE,SINGLE_QUOTE + SINGLE_QUOTE);
+        return SINGLE_QUOTE + result + SINGLE_QUOTE;
+
+    }
+  
+    protected String getDoubleQuotedString(String orignal) {
+    	orignal = orignal.replaceAll(DOUBLE_QUOTE,DOUBLE_QUOTE + DOUBLE_QUOTE);
+    	String result  = orignal;
+    	return DOUBLE_QUOTE + result + DOUBLE_QUOTE;
+    }
+    
+	public static String makeCharacterConstant( String constant )
+	{
+		StringBuffer work = new StringBuffer( constant );
+		int pos = 0;
+		while ( 0 <= (pos = work.indexOf( "'", pos )) ) //$NON-NLS-1$
+		{
+			work.insert( pos, '\'' );
+			pos += 2;
+		}
+		work.insert( 0, '\'' );
+		work.append( '\'' );
+		return work.toString();
+	}
+
+    protected String getOwnerType(TableConstraint constraint){
+    	return TABLE;
+    }
+ 
+	public static RoutineDdlBuilder getRoutineDdlBuilder(String dbProduct, String dbVersion) {
+		IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+		IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("com.ibm.datatools.core", "routineDdlBuilder"); //$NON-NLS-1$ //$NON-NLS-2$
+		if (extensionPoint != null) {
+		    IExtension[] extensions = extensionPoint.getExtensions();
+		    for(int i=0; i<extensions.length; ++i) {
+		        IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+		        for(int j=0; j<configElements.length; ++j) {
+		            if(configElements[j].getName().equals("builder")) { //$NON-NLS-1$
+		                String product = configElements[j].getAttribute("product"); //$NON-NLS-1$
+		                if(!product.equals(dbProduct)) continue;
+		                String version = configElements[j].getAttribute("version"); //$NON-NLS-1$
+		                if(!version.equals(dbVersion)) continue;
+		                try {
+		                    routineDdlBuilder = (RoutineDdlBuilder) configElements[j].createExecutableExtension("provider"); //$NON-NLS-1$
+		                }
+		                catch(CoreException e) {
+		                    IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getDefault().getBundle().getSymbolicName(), IStatus.ERROR,
+		                            "The error was detected when creating the routine ddl builder for " + product + " "+ version, e); //$NON-NLS-1$ //$NON-NLS-2$
+		                    IBMPluginActivator.getInstance().getLog().log(status);
+		                }
+		                break;
+		            }
+		        }
+		    }
+		}
+		return routineDdlBuilder;
+	}
+
+	public boolean isImplicitPK (TableConstraint constraint) {
+		return (constraint instanceof PrimaryKey) && !constraint.isEnforced();
+	}
+	
+    protected String getDefaultValue(Column column) {
+    	String defaultValue = column.getDefaultValue();
+    	SQLDataType type = column.getContainedType();
+    	return formatDefaultValue(type, defaultValue);
+    }
+
+    protected String formatDefaultValue(SQLDataType type, String defaultValue) {
+    	if (defaultValue == null || defaultValue.equals("")) return null;
+    	if (type == null) return null;
+    	if (type instanceof CharacterStringDataType 
+    		|| type instanceof DateDataType || type instanceof TimeDataType) {
+    		return this.getSingleQuotedString(defaultValue);
+    	} 
+    	else 
+    		return defaultValue;
+    }
+    
+	protected String[] getGrantString(SQLObject sqlObject,boolean quoteIdentifiers,boolean qualifyNames) {
+		Vector grantVec = new Vector();
+    	Iterator iter = sqlObject.getPrivileges().iterator();
+    	while (iter.hasNext()) {
+    		Privilege privilege = (Privilege) iter.next();
+    		String statement = this.getGrantPrivilegeStatement(privilege, quoteIdentifiers, qualifyNames);
+    		if (statement != null) {
+    			grantVec.add(this.getGrantPrivilegeStatement(privilege, quoteIdentifiers, qualifyNames));
+    		}
+    	}
+
+		String[] grantStr = new String[grantVec.size()];
+		grantVec.copyInto(grantStr);
+    	return grantStr;
+	}
+
+	protected String[] getRevokeString(SQLObject sqlObject,boolean quoteIdentifiers,boolean qualifyNames) {
+		Vector revokeVec = new Vector();
+    	Iterator iter = sqlObject.getPrivileges().iterator();
+    	while (iter.hasNext()) {
+    		Privilege privilege = (Privilege) iter.next();
+    		String statement = this.getGrantPrivilegeStatement(privilege, quoteIdentifiers, qualifyNames);
+    		if (statement != null) {
+    			revokeVec.add(this.getRevokePrivilegeStatement(privilege, quoteIdentifiers, qualifyNames));
+    		}
+   		}
+
+		String[] revokeStr = new String[revokeVec.size()];
+		revokeVec.copyInto(revokeStr);
+    	return revokeStr;
+	}
+
+	public String getGrantPrivilegeStatement(Privilege privilege,boolean quoteIdentifiers,boolean qualifyNames) {
+		if (this.isDDLSupressable(privilege)) return null;
+		String ret = GRANT + SPACE + privilege.getAction() + SPACE + ON + SPACE 
+				+ getPrivilegedObjectTypeString(privilege) + SPACE
+				+ getPrivilegedObjectName(privilege, quoteIdentifiers, qualifyNames) 
+				+ SPACE + TO + SPACE + getGranteeSubstring(privilege.getGrantee(), quoteIdentifiers);
+		if (privilege.isGrantable()) ret += SPACE + WITH + SPACE + GRANT + SPACE + OPTION;
+		return ret;
+	}
+
+	public String getRevokePrivilegeStatement(Privilege privilege,boolean quoteIdentifiers,boolean qualifyNames) {
+		if (this.isDDLSupressable(privilege)) return null;
+		String ret = REVOKE + SPACE + privilege.getAction() + SPACE + ON + SPACE 
+		+ getPrivilegedObjectTypeString(privilege) + SPACE
+		+ getPrivilegedObjectName(privilege, quoteIdentifiers, qualifyNames) 
+		+ SPACE + FROM + SPACE + getGranteeSubstring(privilege.getGrantee(), quoteIdentifiers);
+		return ret;
+	}
+	
+    protected String getGranteeSubstring(AuthorizationIdentifier authId, boolean quoteIdentifiers) {
+    	return getName(authId,quoteIdentifiers);
+    }
+    
+	protected String getPrivilegedObjectName(Privilege privilege, boolean quoteIdentifiers, boolean qualifyNames) {
+		SQLObject obj = privilege.getObject();
+		String name = null;
+		if (obj instanceof Table) name = getName((Table)obj, quoteIdentifiers, qualifyNames);
+		if (obj instanceof Index) name = getName((Index)obj, quoteIdentifiers, qualifyNames);
+		if (obj instanceof Sequence) name = getName((Sequence)obj, quoteIdentifiers, qualifyNames);
+		if (obj instanceof Schema) name = getName((Schema)obj, quoteIdentifiers, qualifyNames);
+		if (obj instanceof Routine) name = getName((Routine)obj, quoteIdentifiers, qualifyNames);
+		if (obj instanceof UserDefinedType) name = getName((UserDefinedType)obj, quoteIdentifiers, qualifyNames);
+		if (obj instanceof Database) name = "";
+		return name;
+	}
+
+	protected String getPrivilegedObjectTypeString(Privilege privilege) {
+		SQLObject obj = privilege.getObject();
+		if (obj instanceof BaseTable) return TABLE;
+		if (obj instanceof ViewTable) return TABLE;
+		if (obj instanceof Index) return INDEX;
+		if (obj instanceof Schema) return SCHEMA;
+		if (obj instanceof Sequence) return SEQUENCE;
+		if (obj instanceof UserDefinedType) return TYPE;
+		if (obj instanceof Database) return DATABASE;
+		return EMPTY_STRING;
+	}
+
+	protected String getGrantRoleAuthorizationString(RoleAuthorization roleAuth, boolean quoteIdentifiers) {
+		String authStr = NEWLINE + GRANT  + SPACE + this.getName(roleAuth.getRole(), quoteIdentifiers) 
+						+ SPACE + TO + this.getGranteeType(roleAuth.getGrantee()) + SPACE + this.getName(roleAuth.getGrantee(), quoteIdentifiers);
+		if (roleAuth.isGrantable()) {
+			authStr += SPACE + WITH + SPACE + GRANT + SPACE + OPTION;
+		}
+    	return authStr;
+	}
+
+
+	protected String getRevokeRoleAuthorizationString(RoleAuthorization roleAuth, boolean quoteIdentifiers) {
+		String authStr = NEWLINE + REVOKE  + SPACE + this.getName(roleAuth.getRole(), quoteIdentifiers) 
+    						+ SPACE + FROM + this.getGranteeType(roleAuth.getGrantee()) + SPACE + this.getName(roleAuth.getGrantee(), quoteIdentifiers);
+    	return authStr;
+	}
+
+	protected String getGranteeType(AuthorizationIdentifier authID){
+		return "";
+	}
+	
+	protected String getIndexTypePrefix(Index index) {
+        if(index.isUnique()) {
+            return UNIQUE + SPACE;
+        }
+        return EMPTY_STRING;
+	}
+	
+    private IEngineeringCallBack getDummyEngineeringCallBack(){
+    	if (this.dummyCallback == null) this.dummyCallback = new dummyEngineeringCallBack();
+    	return dummyCallback;
+    }
+
+    public class dummyEngineeringCallBack implements IEngineeringCallBack {
+    	public String[] getMessages(){
+    		return new String[]{};
+    	}
+    	
+    	public void writeMessage(String message) {
+    	}
+    }
+    
+    protected boolean isDDLSupressable(Privilege privilege) {
+    	return AccessControlUtilities.isDDLSuppressable(privilege);
+    }
+    
+    protected String getDeleteReferentialActionAction(ForeignKey foreignKey){
+    	String statement="";
+    	ReferentialActionType action = foreignKey.getOnDelete();
+        if(action != ReferentialActionType.NO_ACTION_LITERAL) {
+            statement += NEWLINE + TAB + ON + SPACE + DELETE + SPACE + getReferentialAction(action);            
+        }
+        return statement;
+    }
+
+    protected String getUpdateReferentialActionAction(ForeignKey foreignKey){
+    	String statement="";
+        ReferentialActionType action = foreignKey.getOnUpdate();
+        if(action != ReferentialActionType.NO_ACTION_LITERAL) {
+            statement += NEWLINE + TAB + ON + SPACE + UPDATE + SPACE + getReferentialAction(action);      
+        }
+        return statement;
+    }
+
+    protected String getIncrementTypeString(IndexMember m) {
+    	 return TAB + TAB + m.getIncrementType().getName();
+    }
+    
+    protected String getSystemGrantMessage(String action,Privilege privilege,boolean quoteIdentifiers,boolean qualifyNames) {
+    	StringBuffer msg = new StringBuffer();
+    	if (action.equals(GRANT)) msg.append(DdlGenerationMessages.GRANT_NOT_ALLOWED);
+    	if (action.equals(REVOKE)) msg.append(DdlGenerationMessages.REVOKE_NOT_ALLOWED);
+    	if (msg.length() == 0) return null;
+    	msg.append(COLON + SPACE);
+    	msg.append(privilege.getAction());
+    	msg.append(SPACE + ON + SPACE);
+    	msg.append(getPrivilegedObjectName(privilege, quoteIdentifiers, qualifyNames));
+    	return msg.toString();
+    }
+    
+	protected String getAttrString(AttributeDefinition attr, Schema schema,
+			boolean qualifyNames) {
+		String typeName = getDataTypeString(attr,schema,qualifyNames);
+		String statement = attr.getName() + SPACE + typeName;
+		return statement;
+	}
+
+	public String getAttrString(AttributeDefinition attr, Schema schema) {
+		return this.getAttrString(attr, schema, false);
+	}
+	
+	//For certain objects, like SQL procedure, we get DDL source from catalog, which is 
+	//same as what user originally specified on CREATE. This DDL can have the case that
+	//name is not qualified with schema. Per DB2 customer request, we re-parse DDL
+	//and qualify name with schema as required by Generate DDL option. So far, we only
+	//fix this for oracle SQL function and procedure when they are existing objects
+	//of the database server.
+	protected String getNameQualifiedWithSchema(String ddlSource, Routine routine, boolean quoteIdentifiers, boolean qualifyNames)
+	{
+		Schema schema = routine.getSchema();
+		String name = routine.getName();
+		if ( ddlSource == null //
+				|| ddlSource.trim().isEmpty() //
+				|| !( routine instanceof ICatalogObject ) //
+				|| schema == null //
+				|| schema.getName() == null //
+				|| schema.getName().trim().isEmpty() //
+				|| name == null //
+				|| name.trim().isEmpty() ) {
+			return ddlSource;
+		}
+		
+		String result = ddlSource;		
+		if ( qualifyNames ) {
+			String schemaName = schema.getName();
+			String quotedSchemaName = this.getDoubleQuotedString(schemaName);
+			String quotedName = this.getDoubleQuotedString(name);
+			String upperCaseDdlSource = ddlSource.toUpperCase();
+			String upperCaseName = name.toUpperCase();
+			String upperCaseSchemaName = schemaName.toUpperCase();
+			String usedName = quotedName;
+			
+			//first check quoted name
+			int nameIndex = ddlSource.indexOf(quotedName);
+    		if ( nameIndex == -1 ) {
+    			//check unquoted name        			
+    			nameIndex = upperCaseDdlSource.indexOf(upperCaseName);
+    			if ( nameIndex != -1 ) {  			
+    				usedName = ddlSource.substring(nameIndex, nameIndex + name.length());
+    			}
+    		}    		   		
+    		if ( nameIndex > 0 ) {
+    			String pretext = ddlSource.substring(0, nameIndex);
+    			//name is not qualified with quoted schema
+    			if ( pretext.indexOf(quotedSchemaName) == -1 ) {
+    				String upperCasePretext = pretext.toUpperCase();
+    				//name is not qualified with unquoted schema
+    				if ( upperCasePretext.indexOf(upperCaseSchemaName) == -1 ) {
+        				if ( quoteIdentifiers ) {
+        					result = ddlSource.replaceFirst(usedName, quotedSchemaName + DOT + quotedName);
+        				}
+        				else {
+        					result = ddlSource.replaceFirst(usedName, schemaName + DOT + name);
+        				}
+    				}    				
+    			}
+    		}
+		}
+		
+		return result;
+	}
+
+	//This method is not for the DDL Generation, instead used by the compare
+	public String getFullParameterString(Routine routine){
+		EList parms = routine.getParameters();
+		StringBuffer buf = new StringBuffer();
+		if (!parms.isEmpty()) {
+
+			Iterator it = parms.iterator();
+			while(it.hasNext()) {
+				buf.append("(");
+				Parameter parm = (Parameter) it.next();
+				buf.append(parm.getMode());
+				buf.append(" ");
+				buf.append(parm.getName());
+				buf.append(" ");
+				buf.append(getParameterString(parm, routine.getSchema(), false));
+				buf.append(")");
+				if(it.hasNext()) {
+					buf.append(", ");                 //$NON-NLS-1$
+				}
+			}
+		}            	                	
+		String result = buf.toString();
+		return result;
+	}
+	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/DdlGenerationMessages.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/DdlGenerationMessages.java
new file mode 100644
index 0000000..cdd808e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/DdlGenerationMessages.java
@@ -0,0 +1,204 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.ddl;
+
+import org.eclipse.osgi.util.NLS;
+
+ /**
+ * @author chetabha
+ *
+ */
+ 
+public final class DdlGenerationMessages extends NLS {
+
+	private static final String BUNDLE_NAME = "org.eclipse.datatools.enablement.ibm.ddl.DdlGenerationMessages";//$NON-NLS-1$
+
+	private DdlGenerationMessages() {
+		// Do not instantiate
+	}
+
+	public static String GENERATE_FULLY_QUALIFIED_NAME;
+	public static String GENERATE_FULLY_QUALIFIED_NAME_DES;
+	public static String GENERATE_FULLY_QUALIFIED_NAME_LABEL;
+	public static String GENERATE_QUOTED_IDENTIFIER;
+	public static String GENERATE_QUOTED_IDENTIFIER_DES;
+	public static String GENERATE_QUOTED_IDENTIFIER_LABEL;
+	public static String GENERATE_DROP_STATEMENTS;
+	public static String GENERATE_DROP_STATEMENTS_DES;
+	public static String GENERATE_DROP_STATEMENTS_LABEL;
+	public static String GENERATE_CREATE_STATEMENTS;
+	public static String GENERATE_CREATE_STATEMENTS_DES;
+	public static String GENERATE_CREATE_STATEMENTS_LABEL;
+	public static String GENERATE_COMMENTS;
+	public static String GENERATE_COMMENTS_DES;
+	public static String GENERATE_COMMENTS_LABEL;
+	public static String GENERATE_LABELS;
+	public static String GENERATE_LABELS_DES;
+	public static String GENERATE_LABELS_LABEL;
+	public static String GENERATE_IN_TABLESPACE_CLAUSE;
+	public static String GENERATE_IN_TABLESPACE_CLAUSE_DES;
+	public static String GENERATE_IN_TABLESPACE_CLAUSE_LABEL;
+	public static String GENERATE_ON_FILEGROUP_CLAUSE;
+	public static String GENERATE_ON_FILEGROUP_CLAUSE_DES;
+	public static String GENERATE_ON_FILEGROUP_CLAUSE_LABEL;
+	public static String GENERATE_USE_DOMAIN_IF_EXIST;
+	public static String GENERATE_USE_DOMAIN_IF_EXIST_DES;
+	public static String GENERATE_USE_DOMAIN_IF_EXIST_LABEL;
+	public static String GENERATE_CREATE_OR_REPLACE;
+	public static String GENERATE_CREATE_OR_REPLACE_DES;
+	public static String GENERATE_CREATE_OR_REPLACE_LABEL;
+	public static String GENERATE_TABLES;
+	public static String GENERATE_TABLES_DES;
+	public static String GENERATE_TABLES_LABEL;
+	public static String GENERATE_TABLESPACES;
+	public static String GENERATE_TABLESPACES_DES;
+	public static String GENERATE_TABLESPACES_LABEL;
+	//FILEGROUPS is the same as DB2 tablespace concept for MS SQL Server.
+	public static String GENERATE_FILEGROUPS;
+	public static String GENERATE_FILEGROUPS_DES;
+	public static String GENERATE_FILEGROUPS_LABEL;
+	public static String GENERATE_DOMAIN;
+	public static String GENERATE_DOMAIN_TYPE_DES;
+	public static String GENERATE_DOMAIN_TYPE_LABEL;
+	public static String GENERATE_INDEX;
+	public static String GENERATE_INDEX_DES;
+	public static String GENERATE_INDEX_LABEL;
+	public static String GENERATE_STOREDPROCEDURE;
+	public static String GENERATE_STOREDPROCEDURE_DES;
+	public static String GENERATE_STOREDPROCEDURE_LABEL;
+	public static String GENERATE_FUNCTION;
+	public static String GENERATE_FUNCTION_DES;
+	public static String GENERATE_FUNCTION_LABEL;
+	public static String GENERATE_VIEW;
+	public static String GENERATE_VIEW_DES;
+	public static String GENERATE_VIEW_LABEL;
+	public static String GENERATE_TRIGGER;
+	public static String GENERATE_TRIGGER_DES;
+	public static String GENERATE_TRIGGER_LABEL;
+	public static String GENERATE_PK_CONSTRAINTS;
+	public static String GENERATE_PK_CONSTRAINTS_DES;
+	public static String GENERATE_PK_CONSTRAINTS_LABEL;
+	public static String GENERATE_FK_CONSTRAINTS;
+	public static String GENERATE_FK_CONSTRAINTS_DES;
+	public static String GENERATE_FK_CONSTRAINTS_LABEL;
+	public static String GENERATE_CK_CONSTRAINTS;
+	public static String GENERATE_CK_CONSTRAINTS_DES;
+	public static String GENERATE_CK_CONSTRAINTS_LABEL;
+	public static String GENERATE_SEQUENCE;
+	public static String GENERATE_SEQUENCE_DES;
+	public static String GENERATE_SEQUENCE_LABEL;
+	public static String GENERATE_ALIAS;
+	public static String GENERATE_ALIAS_DES;
+	public static String GENERATE_ALIAS_LABEL;
+	public static String GENERATE_SYNONYM;
+	public static String GENERATE_SYNONYM_DES;
+	public static String GENERATE_SYNONYM_LABEL;
+	public static String GENERATE_MQT;
+	public static String GENERATE_MQT_DES;
+	public static String GENERATE_MQT_LABEL;
+	public static String GENERATE_BUFFERPOOL;
+	public static String GENERATE_BUFFERPOOL_DES;
+	public static String GENERATE_BUFFERPOOL_LABEL;
+	public static String GENERATE_DATABASE;
+	public static String GENERATE_DATABASE_DES;
+	public static String GENERATE_DATABASE_LABEL;
+	public static String GENERATE_SCHEMA;
+	public static String GENERATE_SCHEMA_DES;
+	public static String GENERATE_SCHEMA_LABEL;
+	public static String GENERATE_PARTITIONGROUP;
+	public static String GENERATE_PARTITIONGROUP_DES;
+	public static String GENERATE_PARTITIONGROUP_LABEL;
+	public static String GENERATE_STORAGEGROUP;
+	public static String GENERATE_STORAGEGROUP_DES;
+	public static String GENERATE_STORAGEGROUP_LABEL;
+	public static String GENERATE_USER_DEFINED_TYPE;
+	public static String GENERATE_USER_DEFINED_TYPE_DES;
+	public static String GENERATE_USER_DEFINED_TYPE_LABEL;
+	public static String GENERATE_ENFORCED_CONSTRAINTS;
+	public static String GENERATE_ENFORCED_CONSTRAINTS_DES;
+	public static String GENERATE_ENFORCED_CONSTRAINTS_LABEL;
+	public static String GENERATION_OPTIONS;
+	public static String GENERATION_OPTIONS_DES;
+	public static String GENERATION_OPTIONS_LABEL;
+	public static String ADDITIONAL_ELEMENTS;
+	public static String ADDITIONAL_ELEMENTS_DES;
+	public static String ADDITIONAL_ELEMENTS_LABEL;
+	public static String GENERATE_PRIVILEGE;
+	public static String GENERATE_PRIVILEGE_DES;
+	public static String GENERATE_PRIVILEGE_LABEL;
+	public static String GENERATE_PACKAGE;
+	public static String GENERATE_PACKAGE_DES;
+	public static String GENERATE_PACKAGE_LABEL;
+	public static String GENERATE_PACKAGE_BODY;
+	public static String GENERATE_PACKAGE_BODY_DES;
+	public static String GENERATE_PACKAGE_BODY_LABEL;
+	public static String GENERATE_BACKUP_TABLE;
+	public static String GENERATE_BACKUP_TABLE_DES;
+	public static String GENERATE_BACKUP_TABLE_LABEL;
+	public static String GENERATE_STATISTICS;
+	public static String GENERATE_STATISTICS_DES;
+	public static String GENERATE_STATISTICS_LABEL;
+	public static String GENERATE_ROLE;
+	public static String GENERATE_ROLE_DES;
+	public static String GENERATE_ROLE_LABEL;
+	public static String GENERATE_USER;
+	public static String GENERATE_USER_DES;
+	public static String GENERATE_USER_LABEL;
+	public static String GENERATE_GROUP;
+	public static String GENERATE_GROUP_DES;
+	public static String GENERATE_GROUP_LABEL;
+	public static String CHECK_MODEL;
+	public static String CHECK_MODEL_DES;
+	public static String CHECK_MODEL_LABEL;
+
+	public static String GENERATE_MODULE;
+	public static String GENERATE_MODULE_DES;
+	public static String GENERATE_MODULE_LABEL;
+	public static String GENERATE_MODULE_CONDITION;
+	public static String GENERATE_MODULE_CONDITION_DES;
+	public static String GENERATE_MODULE_CONDITION_LABEL;
+	public static String GENERATE_GLOBAL_VARIABLE;
+	public static String GENERATE_GLOBAL_VARIABLE_DES;
+	public static String GENERATE_GLOBAL_VARIABLE_LABEL;
+	public static String GENERATE_HISTORY_TABLE;
+	public static String GENERATE_HISTORY_TABLE_DES;
+	public static String GENERATE_HISTORY_TABLE_LABEL;
+	public static String GENERATE_TEMPORARY_TABLE;
+	public static String GENERATE_TEMPORARY_TABLE_DES;
+	public static String GENERATE_TEMPORARY_TABLE_LABEL;
+	public static String GENERATE_XMLSCHEMA;
+	public static String GENERATE_XMLSCHEMA_DES;
+	public static String GENERATE_XMLSCHEMA_LABEL;
+	public static String GENERATE_SECURITY_POLICY;
+	public static String GENERATE_SECURITY_POLICY_DES;
+	public static String GENERATE_SECURITY_POLICY_LABEL;
+	
+	public static String LOADING_PRIVILEGES_PROGRESS;
+	public static String GRANT_NOT_ALLOWED;
+	public static String REVOKE_NOT_ALLOWED;
+	
+	public static String LOADING_SUBTASK;
+
+	public static String DROP_RESTRICT;
+	public static String DROP_RESTRICT_DES;
+	public static String DROP_RESTRICT_LABEL;
+	public static String GENERATE_ROW_PERMISSIONS;
+	public static String GENERATE_ROW_PERMISSIONS_DES;
+	public static String GENERATE_ROW_PERMISSIONS_LABEL;
+	public static String GENERATE_COLUMN_MASKS;
+	public static String GENERATE_COLUMN_MASKS_DES;
+	public static String GENERATE_COLUMN_MASKS_LABEL;
+	public static String FE_INVALID_MODEL;
+
+	static {
+		NLS.initializeMessages(BUNDLE_NAME, DdlGenerationMessages.class);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/DdlGenerationMessages.properties b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/DdlGenerationMessages.properties
new file mode 100644
index 0000000..18bbe24
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/DdlGenerationMessages.properties
@@ -0,0 +1,189 @@
+# NLS_MESSAGEFORMAT_VAR          needed to handle quotes correctly
+#
+# Copyright (c) 2014 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+#
+
+GENERATE_FULLY_QUALIFIED_NAME		=	&Fully qualified names
+GENERATE_FULLY_QUALIFIED_NAME_DES 	=	Generate fully qualified names
+GENERATE_FULLY_QUALIFIED_NAME_LABEL 	=	Fully qualified names
+GENERATE_QUOTED_IDENTIFIER 			= 	&Quoted identifiers
+GENERATE_QUOTED_IDENTIFIER_DES 		= 	Generate quoted identifiers
+GENERATE_QUOTED_IDENTIFIER_LABEL	= 	Quoted identifiers
+GENERATE_DROP_STATEMENTS 			= 	&DROP statements
+GENERATE_DROP_STATEMENTS_DES 		= 	Generate DROP statements
+GENERATE_DROP_STATEMENTS_LABEL		= 	DROP statements
+GENERATE_CREATE_STATEMENTS 			= 	&CREATE statements
+GENERATE_CREATE_STATEMENTS_DES 		= 	Generate CREATE statements
+GENERATE_CREATE_STATEMENTS_LABEL 	= 	CREATE statements
+GENERATE_COMMENTS 					= 	C&OMMENT ON statements
+GENERATE_COMMENTS_DES 				= 	Generate comments
+GENERATE_COMMENTS_LABEL				= 	COMMENT ON statements
+GENERATE_LABELS						= 	&Label ON statements
+GENERATE_LABELS_DES 				=	Generate labels
+GENERATE_LABELS_LABEL				= 	Label ON statements
+GENERATE_IN_TABLESPACE_CLAUSE 		= 	&IN TABLESPACE clause
+GENERATE_IN_TABLESPACE_CLAUSE_DES 	=	Generate IN TABLESPACE clause
+GENERATE_IN_TABLESPACE_CLAUSE_LABEL	= 	IN TABLESPACE clause
+GENERATE_USE_DOMAIN_IF_EXIST 		= 	&Use domain if exists
+GENERATE_USE_DOMAIN_IF_EXIST_DES 	= 	Use domain if exists
+GENERATE_USE_DOMAIN_IF_EXIST_LABEL 	= 	Use domain if exists
+GENERATE_CREATE_OR_REPLACE			= 	&OR REPLACE clause
+GENERATE_CREATE_OR_REPLACE_DES		= 	OR REPLACE clause
+GENERATE_CREATE_OR_REPLACE_LABEL	= 	OR REPLACE clause
+GENERATE_TABLES 					= 	&Tables
+GENERATE_TABLES_DES 				= 	Generate tables
+GENERATE_TABLES_LABEL				= 	Tables
+GENERATE_TABLESPACES 				= 	T&ablespaces
+GENERATE_TABLESPACES_DES 			= 	Generate table spaces
+GENERATE_TABLESPACES_LABEL			= 	Tablespaces
+GENERATE_FILEGROUPS 				= 	Filegroups
+GENERATE_FILEGROUPS_DES 			= 	Generate file groups
+GENERATE_FILEGROUPS_LABEL			= 	Filegroups
+GENERATE_ON_FILEGROUP_CLAUSE 			= 	ON FILEGROUP clause
+GENERATE_ON_FILEGROUP_CLAUSE_DES 		=	Generate ON FILEGROUP clause
+GENERATE_ON_FILEGROUP_CLAUSE_LABEL 		= 	ON FILEGROUP clause
+GENERATE_INDEX						=	Inde&xes
+GENERATE_INDEX_DES					=	Generate indexes
+GENERATE_INDEX_LABEL				=	Indexes
+GENERATE_STOREDPROCEDURE	 		=	Sto&red procedures
+GENERATE_STOREDPROCEDURE_DES	 	=	Generate stored procedures
+GENERATE_STOREDPROCEDURE_LABEL	 	=	Stored procedures
+GENERATE_FUNCTION	 				=	Funct&ions
+GENERATE_FUNCTION_DES	 			=	Generate functions
+GENERATE_FUNCTION_LABEL	 			=	Functions
+GENERATE_VIEW						=	&Views
+GENERATE_VIEW_DES					=	Generate views
+GENERATE_VIEW_LABEL					=	Views
+GENERATE_TRIGGER					=	Tri&ggers
+GENERATE_TRIGGER_DES				=	Generate triggers
+GENERATE_TRIGGER_LABEL				=	Triggers
+GENERATE_PK_CONSTRAINTS 			=	&Primary key constraint
+GENERATE_PK_CONSTRAINTS_DES 		=	Generate primary key constraint
+GENERATE_PK_CONSTRAINTS_LABEL		=	Generate primary key constraint
+GENERATE_FK_CONSTRAINTS 			=	Foreign ke&y constraint
+GENERATE_FK_CONSTRAINTS_DES	 		=	Generate foreign key constraint
+GENERATE_FK_CONSTRAINTS_LABEL 		=	Foreign key constraint
+GENERATE_CK_CONSTRAINTS 			=	&Check constraint
+GENERATE_CK_CONSTRAINTS_DES 		=	Generate check constraint
+GENERATE_CK_CONSTRAINTS_LABEL 		=	Check constraint
+GENERATE_SEQUENCE					=	Se&quences
+GENERATE_SEQUENCE_DES				=	Generate sequences
+GENERATE_SEQUENCE_LABEL				=	Sequences
+GENERATE_ALIAS						= 	Alia&ses
+GENERATE_ALIAS_DES 					= 	Generate aliases
+GENERATE_ALIAS_LABEL				= 	Aliases
+GENERATE_SYNONYM					= 	&Synonyms
+GENERATE_SYNONYM_DES 				= 	Generate synonyms
+GENERATE_SYNONYM_LABEL				= 	Synonyms
+GENERATE_MQT						= 	&MQTs
+GENERATE_MQT_DES 					= 	Generate MQTs
+GENERATE_MQT_LABEL					= 	MQTs
+GENERATE_BUFFERPOOL					= 	Bu&ffer pools
+GENERATE_BUFFERPOOL_DES	 			= 	Generate buffer pools
+GENERATE_BUFFERPOOL_LABEL			= 	Buffer pools
+GENERATE_DATABASE					= 	&Database
+GENERATE_DATABASE_DES 				= 	Generate database
+GENERATE_DATABASE_LABEL				= 	Database
+GENERATE_SCHEMA						= 	Sc&hemas
+GENERATE_SCHEMA_DES 				= 	Generate schemas
+GENERATE_SCHEMA_LABEL				= 	Schemas
+#GENERATE_WRAPPER 					= 	&Wrappers
+#GENERATE_WRAPPER_DES 				= 	Generate wrappers
+#GENERATE_REMOTESERVER 				= 	R&emote servers
+#GENERATE_REMOTESERVER_DES 			= 	Generate remote servers
+#GENERATE_USERMAPPING 				= 	&User mappings
+#GENERATE_USERMAPPING_DES 			= 	Generate user mappings
+#GENERATE_NICKNAME 					= 	Nic&knames
+#GENERATE_NICKNAME_DES	 			= 	Generate nicknames
+GENERATE_PARTITIONGROUP 			= 	Partiti&on groups
+GENERATE_PARTITIONGROUP_DES 		= 	Generate partition groups
+GENERATE_PARTITIONGROUP_LABEL 		= 	Partition groups
+GENERATE_STORAGEGROUP				= 	St&orage groups
+GENERATE_STORAGEGROUP_DES	 		= 	Generate storage groups
+GENERATE_STORAGEGROUP_LABEL			= 	Storage groups
+GENERATE_USER_DEFINED_TYPE			=	User&-defined types
+GENERATE_USER_DEFINED_TYPE_DES		=	Generate user-defined types
+GENERATE_USER_DEFINED_TYPE_LABEL	=	User-defined types
+GENERATE_DOMAIN         			=	D&omain types
+GENERATE_DOMAIN_TYPE_DES    		=	Generate domain types
+GENERATE_DOMAIN_TYPE_LABEL	        =	Domain types
+GENERATE_ENFORCED_CONSTRAINTS		=	Enforced constr&aints
+GENERATE_ENFORCED_CONSTRAINTS_DES	=	Generate enforced constraints
+GENERATE_ENFORCED_CONSTRAINTS_LABEL	=	Enforced constraints
+GENERATION_OPTIONS 					=	Generation options
+GENERATION_OPTIONS_DES 				=	Options for generation
+GENERATION_OPTIONS_LABEL 			=	Generation options
+ADDITIONAL_ELEMENTS 				=	Additional elements
+ADDITIONAL_ELEMENTS_DES 			=	Generate additional elements
+ADDITIONAL_ELEMENTS_LABEL 			=	Additional elements
+GENERATE_PRIVILEGE			        =   P&rivileges
+GENERATE_PRIVILEGE_DES		        =   Generate grant and revoke privilege statements
+GENERATE_PRIVILEGE_LABEL 		    =   Privileges
+GENERATE_PACKAGE					=   Pac&kage
+GENERATE_PACKAGE_DES				= 	Generate packages
+GENERATE_PACKAGE_LABEL				=   Package
+GENERATE_PACKAGE_BODY				=   Package &Body
+GENERATE_PACKAGE_BODY_DES			= 	Generate package body
+GENERATE_PACKAGE_BODY_LABEL			=   Package Body
+GENERATE_BACKUP_TABLE               =   Backup Table
+GENERATE_BACKUP_TABLE_DES           =   Generate backup tables
+GENERATE_BACKUP_TABLE_LABEL         =   Backup Table
+GENERATE_STATISTICS					=	Update stat&istics catalog
+GENERATE_STATISTICS_DES				=	Generate update statistics values
+GENERATE_STATISTICS_LABEL			=	Update statistics catalog
+GENERATE_ROLE						=	Roles
+GENERATE_ROLE_DES					= 	Generate roles
+GENERATE_ROLE_LABEL					=	Roles
+CHECK_MODEL							=   Check &model
+CHECK_MODEL_DES						=   Model validation
+CHECK_MODEL_LABEL					=   Check model
+GENERATE_MODULE						=   Modu&les
+GENERATE_MODULE_DES					=   Generate module
+GENERATE_MODULE_LABEL				=   Modules
+GENERATE_MODULE_CONDITION			=   Conditions
+GENERATE_MODULE_CONDITION_DES		=	Generate condition
+GENERATE_MODULE_CONDITION_LABEL		=   Conditions
+GENERATE_GLOBAL_VARIABLE			=	Global Variables
+GENERATE_GLOBAL_VARIABLE_DES		=	Generate Global Variables
+GENERATE_GLOBAL_VARIABLE_LABEL		=	Global Variables
+GENERATE_HISTORY_TABLE				=   &History table
+GENERATE_HISTORY_TABLE_DES			=	Generate History table
+GENERATE_HISTORY_TABLE_LABEL		=   History table
+GENERATE_TEMPORARY_TABLE				=   &Temporary table
+GENERATE_TEMPORARY_TABLE_DES			=	Generate Temporary table
+GENERATE_TEMPORARY_TABLE_LABEL		=   Temporary table
+GENERATE_XMLSCHEMA					=   &XML schemas
+GENERATE_XMLSCHEMA_DES				=   Generate XML schemas
+GENERATE_XMLSCHEMA_LABEL			=   XML schemas
+GENERATE_SECURITY_POLICY			=   Security pol&icies
+GENERATE_SECURITY_POLICY_DES		=   Generate security policies
+GENERATE_SECURITY_POLICY_LABEL		=   Security policies
+DROP_RESTRICT						=   Drop restrict
+DROP_RESTRICT_DES					=   Restrict on drop objects
+DROP_RESTRICT_LABEL					=   Drop restrict
+GENERATE_ROW_PERMISSIONS			=   Row p&ermissions 
+GENERATE_ROW_PERMISSIONS_DES		=	Generate Row permissions
+GENERATE_ROW_PERMISSIONS_LABEL		=   Row permissions 
+GENERATE_COLUMN_MASKS				=   Col&umn masks 
+GENERATE_COLUMN_MASKS_DES			=	Generate Column masks 
+GENERATE_COLUMN_MASKS_LABEL			=   Column masks 
+GENERATE_USER						=	Users
+GENERATE_USER_DES					= 	Generate users
+GENERATE_USER_LABEL					=	Users
+GENERATE_GROUP						=	Groups
+GENERATE_GROUP_DES					= 	Generate groups
+GENERATE_GROUP_LABEL				=	Groups
+
+LOADING_PRIVILEGES_PROGRESS         =   Loading privileges for
+GRANT_NOT_ALLOWED                   =   A user cannot grant a privilege to itself
+REVOKE_NOT_ALLOWED                  =   A user cannot revoke a privilege from itself
+
+LOADING_SUBTASK						=   Loading
+FE_INVALID_MODEL                    =   The model is invalid, please check the problem view to make the correction.
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/DdlGenerationUtility.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/DdlGenerationUtility.java
new file mode 100644
index 0000000..90f2123
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/DdlGenerationUtility.java
@@ -0,0 +1,1545 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.ddl;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.Vector;
+import java.util.regex.Pattern;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentServiceImpl;
+import org.eclipse.datatools.connectivity.sqm.core.rte.EngineeringOption;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.internal.core.rte.EngineeringOptionCategory;
+import org.eclipse.datatools.enablement.ibm.IBMPluginActivator;
+import org.eclipse.datatools.enablement.ibm.util.EngineeringOptionCategoryID;
+import org.eclipse.datatools.enablement.ibm.util.EngineeringOptionID;
+import org.eclipse.datatools.enablement.ibm.util.ModelHelper;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.AuthorizationIdentifier;
+import org.eclipse.datatools.modelbase.sql.constraints.CheckConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.IndexMember;
+import org.eclipse.datatools.modelbase.sql.constraints.UniqueConstraint;
+import org.eclipse.datatools.modelbase.sql.expressions.SearchCondition;
+import org.eclipse.datatools.modelbase.sql.query.QuerySearchCondition;
+import org.eclipse.datatools.modelbase.sql.query.QueryStatement;
+import org.eclipse.datatools.modelbase.sql.query.ValueExpressionColumn;
+import org.eclipse.datatools.modelbase.sql.query.helper.StatementHelper;
+import org.eclipse.datatools.modelbase.sql.query.helper.TableHelper;
+import org.eclipse.datatools.modelbase.sql.query.util.SQLQuerySourceFormat;
+import org.eclipse.datatools.modelbase.sql.query.util.SQLQuerySourceInfo;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.sqltools.parsers.sql.postparse.PostParseProcessor;
+import org.eclipse.datatools.sqltools.parsers.sql.query.SQLQueryParseResult;
+import org.eclipse.datatools.sqltools.parsers.sql.query.SQLQueryParserManager;
+import org.eclipse.datatools.sqltools.parsers.sql.query.SQLQueryParserManagerProvider;
+import org.eclipse.datatools.sqltools.parsers.sql.query.postparse.DataTypeResolver;
+import org.eclipse.datatools.sqltools.parsers.sql.query.postparse.TableReferenceResolver;
+import org.eclipse.emf.common.util.EList;
+import org.osgi.service.prefs.Preferences;
+
+ /**
+ * @author chetabha
+ *
+ */
+ 
+public class DdlGenerationUtility {
+    private static OlapDdlBuilder olapDdlBuilder = null;
+    private static ExtendDdlBuilder nicknameDdlBuilder = null;
+    private static ExtendDdlBuilder federatedProcedureDdlBuilder = null; // fsp - pyl
+    private static ExtendDdlBuilder remoteServerDdlBuilder = null;
+    private static ExtendDdlBuilder wrapperDdlBuilder = null;
+    private static ExtendDdlBuilder userMappingDdlBuilder = null;
+    private static TypedElementLogicalDomainProvider elementDomainProvider= null;
+    private static ModelValidationProvider modelValidationProvider = null;
+
+    public static final String QUOTE_IDENTIFIERS_DEFAULT = "quoteIdentifiersDefault" ; //$NON-NLS-1$
+    public static final String QUALIFY_NAMES_DEFAULT = "qualifyNamesDefault" ; //$NON-NLS-1$
+    public static final boolean DEFAULT_QUOTE_IDENTIFIERS_DEFAULT_VALUE = true;
+    public static final boolean DEFAULT_QUALIFY_NAMES_DEFAULT_VALUE = true;
+    protected static boolean quoteIdentifiersDefault = DEFAULT_QUOTE_IDENTIFIERS_DEFAULT_VALUE;
+    protected static boolean qualifyNamesDefault = DEFAULT_QUALIFY_NAMES_DEFAULT_VALUE;
+    public static final String SPUFI_RUNSQLSTM_FORMAT = "spufi_runsqlstm" ; //$NON-NLS-1$
+    public static final boolean SPUFI_RUNSQLSTM_FORMAT_VALUE = false;
+    protected static boolean spufi_runsqlstm_format = SPUFI_RUNSQLSTM_FORMAT_VALUE;
+
+    private final static String CREATE_STATEMENT ="CREATE";
+    private final static String DROP_STATEMENT ="DROP";
+    private final static String STATEMENT_TYPE_SEPARATOR = ";";
+    private final static String CONTEXT_SEPARATOR = ",";
+    private final static String CONTEXT_APPLY_FLAG = "?";
+    public final static String PATTERN_KEY ="codetemplate::";
+    public static String CREATE_PROLOG ="C_PRO";
+    public static String CREATE_POSTLOG ="C_POST";
+    public static String DROP_PROLOG ="D_PRO";
+    public static String DROP_POSTLOG ="D_POST";
+
+    public final static byte GENERATE_CREATE_PATTERN =2;
+    public final static byte GENERATE_DROP_PATTERN=4;
+    
+    public final static String DATABASE_NAME_PROPERTY = "org.eclipse.datatools.connectivity.db.databaseName";
+    
+//bgp    public static Preferences instanceNode = new InstanceScope().getNode("com.ibm.datatools.core.ui"); //$NON-NLS-1$
+    public static Preferences instanceNode = InstanceScope.INSTANCE.getNode("com.ibm.datatools.core.ui"); //$NON-NLS-1$
+    
+    static {
+        initDdlGenerationPreferences();
+    }
+    
+    public static EngineeringOptionCategory[] createDDLGenerationOptionCategories(String product, String version) {        
+
+        Vector categoryVec = new Vector();
+        categoryVec.add(new EngineeringOptionCategory(EngineeringOptionCategoryID.GENERATE_OPTIONS,DdlGenerationMessages.GENERATION_OPTIONS, DdlGenerationMessages.GENERATION_OPTIONS_DES)); 
+        categoryVec.add(new EngineeringOptionCategory(EngineeringOptionCategoryID.GENERATE_ELEMENTS,DdlGenerationMessages.ADDITIONAL_ELEMENTS, DdlGenerationMessages.ADDITIONAL_ELEMENTS_DES));
+//bgp        categoryVec.add(new EngineeringOptionCategory(EngineeringOptionCategoryID.XMLSCHEMA_CONTROLS, EngineeringOptionCategoryID.XMLSCHEMA_CONTROLS, ""));
+    
+        EngineeringOptionCategory[] categories = new EngineeringOptionCategory[categoryVec.size()];
+        categoryVec.copyInto(categories);
+        return categories;
+    }
+    
+    public static Set getAllContainedDisplayableElementSetPlus(SQLObject[] elements) {
+        Set s = new HashSet();
+        for(int i=0; i<elements.length; ++i) {
+            s.add(elements[i]);
+            if (elements[i] instanceof AuthorizationIdentifier) 
+                s.addAll(ContainmentServiceImpl.INSTANCE.getAllContainedElements(elements[i]));
+            else s.addAll(ContainmentServiceImpl.INSTANCE.getAllContainedDisplayableElements(elements[i]));
+        }
+        return s;
+    }
+    
+    public static Set getAllContainedDisplayableElementSet(SQLObject[] elements) {
+        LinkedHashSet s = new LinkedHashSet();
+        for(int i=0; i<elements.length; ++i) {
+            s.add(elements[i]);
+            s.addAll(ContainmentServiceImpl.INSTANCE.getAllContainedDisplayableElements(elements[i]));
+        }
+        return s;
+    }
+ 
+    public static void initDdlGenerationPreferences() {
+        Preferences instanceNode = new InstanceScope().getNode("com.ibm.datatools.core.ui");//$NON-NLS-1$
+        quoteIdentifiersDefault = instanceNode.getBoolean(QUOTE_IDENTIFIERS_DEFAULT, DEFAULT_QUOTE_IDENTIFIERS_DEFAULT_VALUE);
+        qualifyNamesDefault = instanceNode.getBoolean(QUALIFY_NAMES_DEFAULT, DEFAULT_QUALIFY_NAMES_DEFAULT_VALUE);
+        spufi_runsqlstm_format =instanceNode.getBoolean(SPUFI_RUNSQLSTM_FORMAT, SPUFI_RUNSQLSTM_FORMAT_VALUE);
+    }
+    
+    public static boolean getQualifyNamesDefault() {
+        return qualifyNamesDefault;
+    }
+    
+    public static boolean getQuoteIdentifiersDefault() {
+        return quoteIdentifiersDefault;
+    }
+    
+    public static void setQualifyNamesDefault(boolean newValue) {
+        qualifyNamesDefault = newValue;
+    }
+    
+    public static void setQuoteIdentifiersDefault(boolean newValue) {
+        quoteIdentifiersDefault = newValue;
+    }
+
+    public static boolean getSpufiRunsqlstmFormat() {
+        return spufi_runsqlstm_format;
+    }
+    
+    public static void setSpufiRunsqlstmFormat(boolean newValue) {
+        spufi_runsqlstm_format = newValue;
+    }
+    
+
+    //@bd00058820gs
+    public static EngineeringOption getEngineeringOption(String id, String product, String version, EngineeringOptionCategory general_options, EngineeringOptionCategory additional_element)
+    {
+
+        try {
+            if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_FULLY_QUALIFIED_NAME))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_FULLY_QUALIFIED_NAME, DdlGenerationMessages.GENERATE_FULLY_QUALIFIED_NAME_DES,qualifyNamesDefault,general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_QUOTED_IDENTIFIER))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_QUOTED_IDENTIFIER, DdlGenerationMessages.GENERATE_QUOTED_IDENTIFIER_DES,quoteIdentifiersDefault,general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_DROP_STATEMENTS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_DROP_STATEMENTS, DdlGenerationMessages.GENERATE_DROP_STATEMENTS_DES,false,general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_CREATE_STATEMENTS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_CREATE_STATEMENTS, DdlGenerationMessages.GENERATE_CREATE_STATEMENTS_DES,true,general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_PRIVILEGE))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_PRIVILEGE, DdlGenerationMessages.GENERATE_PRIVILEGE_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_COMMENTS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_COMMENTS, DdlGenerationMessages.GENERATE_COMMENTS_DES,true,general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_LABELS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_LABELS, DdlGenerationMessages.GENERATE_LABELS_DES,true,general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_IN_TABLESPACE_CLAUSE))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_IN_TABLESPACE_CLAUSE, DdlGenerationMessages.GENERATE_IN_TABLESPACE_CLAUSE_DES,true,general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_ON_FILEGROUP_CLAUSE))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_ON_FILEGROUP_CLAUSE, DdlGenerationMessages.GENERATE_ON_FILEGROUP_CLAUSE_DES,true,general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_USE_DOMAIN_IF_EXIST))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_USE_DOMAIN_IF_EXIST, DdlGenerationMessages.GENERATE_USE_DOMAIN_IF_EXIST_DES,false,general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_CREATE_OR_REPLACE) && ModelHelper.getVersionAsFloat(version) >= 9.7f)
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_CREATE_OR_REPLACE, DdlGenerationMessages.GENERATE_CREATE_OR_REPLACE_DES,false,general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_TABLES))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_TABLES, DdlGenerationMessages.GENERATE_TABLES_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_TABLESPACES))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_TABLESPACES, DdlGenerationMessages.GENERATE_TABLESPACES_DES,false,additional_element);
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_FILEGROUPS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_FILEGROUPS, DdlGenerationMessages.GENERATE_FILEGROUPS_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_INDICES))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_INDEX, DdlGenerationMessages.GENERATE_INDEX_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_STOREDPROCEDURES))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_STOREDPROCEDURE, DdlGenerationMessages.GENERATE_STOREDPROCEDURE_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_FUNCTIONS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_FUNCTION, DdlGenerationMessages.GENERATE_FUNCTION_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_VIEWS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_VIEW, DdlGenerationMessages.GENERATE_VIEW_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_TRIGGERS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_TRIGGER, DdlGenerationMessages.GENERATE_TRIGGER_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_SEQUENCES))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_SEQUENCE, DdlGenerationMessages.GENERATE_SEQUENCE_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_USER_DEFINED_TYPE))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_USER_DEFINED_TYPE, DdlGenerationMessages.GENERATE_USER_DEFINED_TYPE_DES,true,additional_element); 
+    //      else if(o instanceof DistinctUserDefinedType)
+    //      else if (o instanceof StructuredUserDefinedType)
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_PK_CONSTRAINTS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_PK_CONSTRAINTS, DdlGenerationMessages.GENERATE_PK_CONSTRAINTS_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_CK_CONSTRAINTS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_CK_CONSTRAINTS, DdlGenerationMessages.GENERATE_CK_CONSTRAINTS_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_FK_CONSTRAINTS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_FK_CONSTRAINTS, DdlGenerationMessages.GENERATE_FK_CONSTRAINTS_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_TABLESPACES))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_TABLESPACES, DdlGenerationMessages.GENERATE_TABLESPACES_DES,true,additional_element); 
+    //      else if(id.equalsIgnoreCase(EngineeringOptionID.GENERATE_SYNONYM)
+    //        setOption(new EngineeringOption(id,Messages.getString("GENERATE_SYNONYM"), Messages.getString("GENERATE_SYNONYM_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+    //      }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_DATABASE))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_DATABASE, DdlGenerationMessages.GENERATE_DATABASE_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_MQT))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_MQT, DdlGenerationMessages.GENERATE_MQT_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_ALIAS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_ALIAS, DdlGenerationMessages.GENERATE_ALIAS_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_SYNONYM))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_SYNONYM, DdlGenerationMessages.GENERATE_SYNONYM_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_BUFFERPOOL))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_BUFFERPOOL, DdlGenerationMessages.GENERATE_BUFFERPOOL_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_STORAGEGROUP))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_STORAGEGROUP, DdlGenerationMessages.GENERATE_STORAGEGROUP_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_PARTITIONGROUP))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_PARTITIONGROUP, DdlGenerationMessages.GENERATE_PARTITIONGROUP_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_SCHEMAS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_SCHEMA, DdlGenerationMessages.GENERATE_SCHEMA_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_NICKNAME)) {
+              ExtendDdlBuilder nicknameDdlBuilder = DdlGenerationUtility.getNicknameDdlBuilder(product, version);
+              if (nicknameDdlBuilder != null) {
+                return new EngineeringOption(null,nicknameDdlBuilder.getOption(),nicknameDdlBuilder.getOptionDescription(),true,additional_element);
+              }
+            }
+            //fsp - pyl
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_FEDERATEDPROCEDURES)) {
+                ExtendDdlBuilder federatedProcedureDdlBuilder = DdlGenerationUtility.getFederatedProcedureDdlBuilder(product, version);
+                if (federatedProcedureDdlBuilder != null) {
+                  return new EngineeringOption(null,federatedProcedureDdlBuilder.getOption(),federatedProcedureDdlBuilder.getOptionDescription(),true,additional_element);
+                }
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_REMOTESERVER)) {
+              ExtendDdlBuilder remoteServerDdlBuilder = DdlGenerationUtility.getRemoteServerDdlBuilder(product, version);
+              if (remoteServerDdlBuilder != null) {
+                return new EngineeringOption(null,remoteServerDdlBuilder.getOption(),remoteServerDdlBuilder.getOptionDescription(),true,additional_element);
+              }
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_WRAPPER)) {
+              ExtendDdlBuilder wrapperDdlBuilder = DdlGenerationUtility.getWrapperDdlBuilder(product, version);
+              if (wrapperDdlBuilder != null) {
+                return new EngineeringOption(null,wrapperDdlBuilder.getOption(),wrapperDdlBuilder.getOptionDescription(),true,additional_element);
+              }
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_USERMAPPING)) {
+              ExtendDdlBuilder userMappingDdlBuilder = DdlGenerationUtility.getUserMappingDdlBuilder(product, version);
+              if (userMappingDdlBuilder != null) {
+                return new EngineeringOption(null,userMappingDdlBuilder.getOption(),userMappingDdlBuilder.getOptionDescription(),true,additional_element);
+              }
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_OLAP)) {
+              OlapDdlBuilder olapDdlBuilder = DdlGenerationUtility.getOlapDdlBuilder(product, version);
+              if (olapDdlBuilder != null) {
+                return new EngineeringOption(null,olapDdlBuilder.getOption(),olapDdlBuilder.getOptionDescription(),true,additional_element);
+              }
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_PACKAGE)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_PACKAGE, DdlGenerationMessages.GENERATE_PACKAGE_DES,true,additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_PACKAGE_BODY)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_PACKAGE_BODY, DdlGenerationMessages.GENERATE_PACKAGE_BODY_DES,true,additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_BACKUP_TABLE)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_BACKUP_TABLE, DdlGenerationMessages.GENERATE_BACKUP_TABLE_DES,true,general_options); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_STATISTICS)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_STATISTICS, DdlGenerationMessages.GENERATE_STATISTICS_DES,false,general_options); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_ROLE)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_ROLE, DdlGenerationMessages.GENERATE_ROLE_DES,true,additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_USER)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_USER, DdlGenerationMessages.GENERATE_USER_DES,true,additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_GROUP)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_GROUP, DdlGenerationMessages.GENERATE_GROUP_DES,true,additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.CHECK_MODEL)) {
+                return new EngineeringOption(id,DdlGenerationMessages.CHECK_MODEL, DdlGenerationMessages.CHECK_MODEL_DES,false,general_options); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_MODULE)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_MODULE, DdlGenerationMessages.GENERATE_MODULE_DES,true,additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_MODULE_CONDITION)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_MODULE_CONDITION, DdlGenerationMessages.GENERATE_MODULE_CONDITION_DES,true,additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_GLOBAL_VARIABLE)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_GLOBAL_VARIABLE, DdlGenerationMessages.GENERATE_GLOBAL_VARIABLE_DES,true,additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_HISTORY_TABLE)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_HISTORY_TABLE, DdlGenerationMessages.GENERATE_HISTORY_TABLE_DES,true,additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_TEMPORARY_TABLES)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_TEMPORARY_TABLE, DdlGenerationMessages.GENERATE_TEMPORARY_TABLE_DES,true,additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_XMLSCHEMA)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_XMLSCHEMA, DdlGenerationMessages.GENERATE_XMLSCHEMA_DES,false,additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.XMLSCHEMA_CONNECTION_NAME)) {
+                return new EngineeringOption(EngineeringOptionID.XMLSCHEMA_CONNECTION_NAME, EngineeringOptionID.XMLSCHEMA_CONNECTION_NAME, "");
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.XMLSCHEMA_DIRECTORY)) {
+                return new EngineeringOption(EngineeringOptionID.XMLSCHEMA_DIRECTORY, EngineeringOptionID.XMLSCHEMA_DIRECTORY, "");
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_SECURITY_POLICY)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_SECURITY_POLICY, DdlGenerationMessages.GENERATE_SECURITY_POLICY_DES,true,additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.DROP_RESTRICT)) {
+                return new EngineeringOption(id,DdlGenerationMessages.DROP_RESTRICT, DdlGenerationMessages.DROP_RESTRICT_DES,false,general_options); 
+        	}
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_ROW_PERMISSIONS)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_ROW_PERMISSIONS, DdlGenerationMessages.GENERATE_ROW_PERMISSIONS_DES,true,additional_element); 
+            } 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_COLUMN_MASKS)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_COLUMN_MASKS, DdlGenerationMessages.GENERATE_COLUMN_MASKS_DES,true,additional_element); 
+            } 
+        } catch (Exception e) {
+            //The resource was not found
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+    
+    public static EngineeringOption getDefaultEngineeringOption(String id, String product, String version, EngineeringOptionCategory general_options, EngineeringOptionCategory additional_element)
+    {
+
+        try {
+            if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_FULLY_QUALIFIED_NAME))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_FULLY_QUALIFIED_NAME, DdlGenerationMessages.GENERATE_FULLY_QUALIFIED_NAME_DES,qualifyNamesDefault,general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_QUOTED_IDENTIFIER))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_QUOTED_IDENTIFIER, DdlGenerationMessages.GENERATE_QUOTED_IDENTIFIER_DES,quoteIdentifiersDefault,general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_DROP_STATEMENTS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_DROP_STATEMENTS, DdlGenerationMessages.GENERATE_DROP_STATEMENTS_DES,false,general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_CREATE_STATEMENTS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_CREATE_STATEMENTS, DdlGenerationMessages.GENERATE_CREATE_STATEMENTS_DES,true,general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_PRIVILEGE))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_PRIVILEGE, DdlGenerationMessages.GENERATE_PRIVILEGE_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_COMMENTS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_COMMENTS, DdlGenerationMessages.GENERATE_COMMENTS_DES,true,general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_LABELS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_LABELS, DdlGenerationMessages.GENERATE_LABELS_DES,true,general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_IN_TABLESPACE_CLAUSE))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_IN_TABLESPACE_CLAUSE, DdlGenerationMessages.GENERATE_IN_TABLESPACE_CLAUSE_DES,true,general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_ON_FILEGROUP_CLAUSE))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_ON_FILEGROUP_CLAUSE, DdlGenerationMessages.GENERATE_ON_FILEGROUP_CLAUSE_DES,true,general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_USE_DOMAIN_IF_EXIST))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_USE_DOMAIN_IF_EXIST, DdlGenerationMessages.GENERATE_USE_DOMAIN_IF_EXIST_DES,false,general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_CREATE_OR_REPLACE) && ModelHelper.getVersionAsFloat(version) >= 9.7f)
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_CREATE_OR_REPLACE, DdlGenerationMessages.GENERATE_CREATE_OR_REPLACE_DES,false,general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_TABLES))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_TABLES, DdlGenerationMessages.GENERATE_TABLES_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_TABLESPACES)){
+            	if(product.equals("Oracle"))
+            		return new EngineeringOption(id,DdlGenerationMessages.GENERATE_TABLESPACES, DdlGenerationMessages.GENERATE_TABLESPACES_DES,true,additional_element);
+            	else
+            		return new EngineeringOption(id,DdlGenerationMessages.GENERATE_TABLESPACES, DdlGenerationMessages.GENERATE_TABLESPACES_DES,false,additional_element);
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_FILEGROUPS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_FILEGROUPS, DdlGenerationMessages.GENERATE_FILEGROUPS_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_INDICES))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_INDEX, DdlGenerationMessages.GENERATE_INDEX_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_STOREDPROCEDURES))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_STOREDPROCEDURE, DdlGenerationMessages.GENERATE_STOREDPROCEDURE_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_FUNCTIONS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_FUNCTION, DdlGenerationMessages.GENERATE_FUNCTION_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_VIEWS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_VIEW, DdlGenerationMessages.GENERATE_VIEW_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_TRIGGERS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_TRIGGER, DdlGenerationMessages.GENERATE_TRIGGER_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_SEQUENCES))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_SEQUENCE, DdlGenerationMessages.GENERATE_SEQUENCE_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_USER_DEFINED_TYPE))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_USER_DEFINED_TYPE, DdlGenerationMessages.GENERATE_USER_DEFINED_TYPE_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_DOMAIN))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_DOMAIN, DdlGenerationMessages.GENERATE_DOMAIN_TYPE_DES,true,additional_element); 
+    //      else if(o instanceof DistinctUserDefinedType)
+    //      else if (o instanceof StructuredUserDefinedType)
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_PK_CONSTRAINTS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_PK_CONSTRAINTS, DdlGenerationMessages.GENERATE_PK_CONSTRAINTS_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_CK_CONSTRAINTS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_CK_CONSTRAINTS, DdlGenerationMessages.GENERATE_CK_CONSTRAINTS_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_FK_CONSTRAINTS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_FK_CONSTRAINTS, DdlGenerationMessages.GENERATE_FK_CONSTRAINTS_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_TABLESPACES))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_TABLESPACES, DdlGenerationMessages.GENERATE_TABLESPACES_DES,true,additional_element); 
+    //      else if(id.equalsIgnoreCase(EngineeringOptionID.GENERATE_SYNONYM)
+    //        setOption(new EngineeringOption(id,Messages.getString("GENERATE_SYNONYM"), Messages.getString("GENERATE_SYNONYM_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+    //      }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_DATABASE))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_DATABASE, DdlGenerationMessages.GENERATE_DATABASE_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_MQT))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_MQT, DdlGenerationMessages.GENERATE_MQT_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_ALIAS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_ALIAS, DdlGenerationMessages.GENERATE_ALIAS_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_SYNONYM))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_SYNONYM, DdlGenerationMessages.GENERATE_SYNONYM_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_BUFFERPOOL))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_BUFFERPOOL, DdlGenerationMessages.GENERATE_BUFFERPOOL_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_STORAGEGROUP))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_STORAGEGROUP, DdlGenerationMessages.GENERATE_STORAGEGROUP_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_PARTITIONGROUP))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_PARTITIONGROUP, DdlGenerationMessages.GENERATE_PARTITIONGROUP_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_SCHEMAS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_SCHEMA, DdlGenerationMessages.GENERATE_SCHEMA_DES,true,additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_NICKNAME)) {
+              ExtendDdlBuilder nicknameDdlBuilder = DdlGenerationUtility.getNicknameDdlBuilder(product, version);
+              if (nicknameDdlBuilder != null) {
+                return new EngineeringOption(id,nicknameDdlBuilder.getOption(),nicknameDdlBuilder.getOptionDescription(),true,additional_element);
+              }
+            }
+            //fsp - pyl
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_FEDERATEDPROCEDURES)) {
+                ExtendDdlBuilder federatedProcedureDdlBuilder = DdlGenerationUtility.getFederatedProcedureDdlBuilder(product, version);
+                if (federatedProcedureDdlBuilder != null) {
+                  return new EngineeringOption(id,federatedProcedureDdlBuilder.getOption(),federatedProcedureDdlBuilder.getOptionDescription(),true,additional_element);
+                }
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_REMOTESERVER)) {
+              ExtendDdlBuilder remoteServerDdlBuilder = DdlGenerationUtility.getRemoteServerDdlBuilder(product, version);
+              if (remoteServerDdlBuilder != null) {
+                return new EngineeringOption(id,remoteServerDdlBuilder.getOption(),remoteServerDdlBuilder.getOptionDescription(),true,additional_element);
+              }
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_WRAPPER)) {
+              ExtendDdlBuilder wrapperDdlBuilder = DdlGenerationUtility.getWrapperDdlBuilder(product, version);
+              if (wrapperDdlBuilder != null) {
+                return new EngineeringOption(id,wrapperDdlBuilder.getOption(),wrapperDdlBuilder.getOptionDescription(),true,additional_element);
+              }
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_USERMAPPING)) {
+              ExtendDdlBuilder userMappingDdlBuilder = DdlGenerationUtility.getUserMappingDdlBuilder(product, version);
+              if (userMappingDdlBuilder != null) {
+                return new EngineeringOption(id,userMappingDdlBuilder.getOption(),userMappingDdlBuilder.getOptionDescription(),true,additional_element);
+              }
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_OLAP)) {
+              OlapDdlBuilder olapDdlBuilder = DdlGenerationUtility.getOlapDdlBuilder(product, version);
+              if (olapDdlBuilder != null) {
+                return new EngineeringOption(id,olapDdlBuilder.getOption(),olapDdlBuilder.getOptionDescription(),true,additional_element);
+              }
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_PACKAGE)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_PACKAGE, DdlGenerationMessages.GENERATE_PACKAGE_DES,true,additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_PACKAGE_BODY)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_PACKAGE_BODY, DdlGenerationMessages.GENERATE_PACKAGE_BODY_DES,true,additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_BACKUP_TABLE)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_BACKUP_TABLE, DdlGenerationMessages.GENERATE_BACKUP_TABLE_DES,true,general_options); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_STATISTICS)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_STATISTICS, DdlGenerationMessages.GENERATE_STATISTICS_DES,false,general_options); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_ROLE)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_ROLE, DdlGenerationMessages.GENERATE_ROLE_DES,true,additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_USER)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_USER, DdlGenerationMessages.GENERATE_USER_DES,true,additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_GROUP)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_GROUP, DdlGenerationMessages.GENERATE_GROUP_DES,true,additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.CHECK_MODEL)) {
+                return new EngineeringOption(id,DdlGenerationMessages.CHECK_MODEL, DdlGenerationMessages.CHECK_MODEL_DES,false,general_options); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_MODULE)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_MODULE, DdlGenerationMessages.GENERATE_MODULE_DES,true,additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_MODULE_CONDITION)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_MODULE_CONDITION, DdlGenerationMessages.GENERATE_MODULE_CONDITION_DES,true,additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_GLOBAL_VARIABLE)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_GLOBAL_VARIABLE, DdlGenerationMessages.GENERATE_GLOBAL_VARIABLE_DES,true,additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_HISTORY_TABLE)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_HISTORY_TABLE, DdlGenerationMessages.GENERATE_HISTORY_TABLE_DES,true,additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_TEMPORARY_TABLES)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_TEMPORARY_TABLE, DdlGenerationMessages.GENERATE_TEMPORARY_TABLE_DES,true,additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_XMLSCHEMA)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_XMLSCHEMA, DdlGenerationMessages.GENERATE_XMLSCHEMA_DES,false,additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.XMLSCHEMA_CONNECTION_NAME)) {
+                return new EngineeringOption(EngineeringOptionID.XMLSCHEMA_CONNECTION_NAME, EngineeringOptionID.XMLSCHEMA_CONNECTION_NAME, "");
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.XMLSCHEMA_DIRECTORY)) {
+                return new EngineeringOption(EngineeringOptionID.XMLSCHEMA_DIRECTORY, EngineeringOptionID.XMLSCHEMA_DIRECTORY, "");
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_SECURITY_POLICY)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_SECURITY_POLICY, DdlGenerationMessages.GENERATE_SECURITY_POLICY_DES,true,additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.DROP_RESTRICT)) {
+                return new EngineeringOption(id,DdlGenerationMessages.DROP_RESTRICT, DdlGenerationMessages.DROP_RESTRICT_DES,false,general_options); 
+        	}
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_ROW_PERMISSIONS)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_ROW_PERMISSIONS, DdlGenerationMessages.GENERATE_ROW_PERMISSIONS_DES,true,additional_element); 
+            } 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_COLUMN_MASKS)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_COLUMN_MASKS, DdlGenerationMessages.GENERATE_COLUMN_MASKS_DES,true,additional_element); 
+            } 
+        } catch (Exception e) {
+            //The resource was not found
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+    
+    public static EngineeringOption getEngineeringOption(String id, String product, String version, EngineeringOptionCategory general_options, EngineeringOptionCategory additional_element, SQLObject[] elements)
+    {
+
+        try {
+            if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_FULLY_QUALIFIED_NAME))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_FULLY_QUALIFIED_NAME, DdlGenerationMessages.GENERATE_FULLY_QUALIFIED_NAME_DES,getOptionPreference(id,product,version,elements,qualifyNamesDefault),general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_QUOTED_IDENTIFIER))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_QUOTED_IDENTIFIER, DdlGenerationMessages.GENERATE_QUOTED_IDENTIFIER_DES,getOptionPreference(id,product,version,elements,quoteIdentifiersDefault),general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_DROP_STATEMENTS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_DROP_STATEMENTS, DdlGenerationMessages.GENERATE_DROP_STATEMENTS_DES,getOptionPreference(id,product,version,elements,false),general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_CREATE_STATEMENTS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_CREATE_STATEMENTS, DdlGenerationMessages.GENERATE_CREATE_STATEMENTS_DES,getOptionPreference(id,product,version,elements,true),general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_PRIVILEGE))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_PRIVILEGE, DdlGenerationMessages.GENERATE_PRIVILEGE_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_COMMENTS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_COMMENTS, DdlGenerationMessages.GENERATE_COMMENTS_DES,getOptionPreference(id,product,version,elements,true),general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_LABELS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_LABELS, DdlGenerationMessages.GENERATE_LABELS_DES,getOptionPreference(id,product,version,elements,true),general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_IN_TABLESPACE_CLAUSE))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_IN_TABLESPACE_CLAUSE, DdlGenerationMessages.GENERATE_IN_TABLESPACE_CLAUSE_DES,getOptionPreference(id,product,version,elements,true),general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_ON_FILEGROUP_CLAUSE))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_ON_FILEGROUP_CLAUSE, DdlGenerationMessages.GENERATE_ON_FILEGROUP_CLAUSE_DES,getOptionPreference(id,product,version,elements,true),general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_USE_DOMAIN_IF_EXIST))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_USE_DOMAIN_IF_EXIST, DdlGenerationMessages.GENERATE_USE_DOMAIN_IF_EXIST_DES,getOptionPreference(id,product,version,elements,false),general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_CREATE_OR_REPLACE) && ModelHelper.getVersionAsFloat(version) >= 9.7f)
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_CREATE_OR_REPLACE, DdlGenerationMessages.GENERATE_CREATE_OR_REPLACE_DES,getOptionPreference(id,product,version,elements,false),general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_TABLES))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_TABLES, DdlGenerationMessages.GENERATE_TABLES_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_TABLESPACES)){
+            	if(product.equals("Oracle"))
+            		return new EngineeringOption(id,DdlGenerationMessages.GENERATE_TABLESPACES, DdlGenerationMessages.GENERATE_TABLESPACES_DES,getOptionPreference(id,product,version,elements,true),additional_element);
+            	else
+            		return new EngineeringOption(id,DdlGenerationMessages.GENERATE_TABLESPACES, DdlGenerationMessages.GENERATE_TABLESPACES_DES,getOptionPreference(id,product,version,elements,false),additional_element);
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_FILEGROUPS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_FILEGROUPS, DdlGenerationMessages.GENERATE_FILEGROUPS_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_INDICES))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_INDEX, DdlGenerationMessages.GENERATE_INDEX_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_STOREDPROCEDURES))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_STOREDPROCEDURE, DdlGenerationMessages.GENERATE_STOREDPROCEDURE_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_FUNCTIONS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_FUNCTION, DdlGenerationMessages.GENERATE_FUNCTION_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_VIEWS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_VIEW, DdlGenerationMessages.GENERATE_VIEW_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_TRIGGERS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_TRIGGER, DdlGenerationMessages.GENERATE_TRIGGER_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_SEQUENCES))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_SEQUENCE, DdlGenerationMessages.GENERATE_SEQUENCE_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_USER_DEFINED_TYPE))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_USER_DEFINED_TYPE, DdlGenerationMessages.GENERATE_USER_DEFINED_TYPE_DES,getOptionPreference(id,product,version,elements,true),additional_element);
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_DOMAIN))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_DOMAIN, DdlGenerationMessages.GENERATE_DOMAIN_TYPE_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+    //      else if(o instanceof DistinctUserDefinedType)
+    //      else if (o instanceof StructuredUserDefinedType)
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_PK_CONSTRAINTS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_PK_CONSTRAINTS, DdlGenerationMessages.GENERATE_PK_CONSTRAINTS_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_CK_CONSTRAINTS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_CK_CONSTRAINTS, DdlGenerationMessages.GENERATE_CK_CONSTRAINTS_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_FK_CONSTRAINTS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_FK_CONSTRAINTS, DdlGenerationMessages.GENERATE_FK_CONSTRAINTS_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_TABLESPACES))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_TABLESPACES, DdlGenerationMessages.GENERATE_TABLESPACES_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+    //      else if(id.equalsIgnoreCase(EngineeringOptionID.GENERATE_SYNONYM)
+    //        setOption(new EngineeringOption(id,Messages.getString("GENERATE_SYNONYM"), Messages.getString("GENERATE_SYNONYM_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+    //      }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_DATABASE))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_DATABASE, DdlGenerationMessages.GENERATE_DATABASE_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_MQT))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_MQT, DdlGenerationMessages.GENERATE_MQT_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_ALIAS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_ALIAS, DdlGenerationMessages.GENERATE_ALIAS_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_SYNONYM))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_SYNONYM, DdlGenerationMessages.GENERATE_SYNONYM_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_BUFFERPOOL))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_BUFFERPOOL, DdlGenerationMessages.GENERATE_BUFFERPOOL_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_STORAGEGROUP))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_STORAGEGROUP, DdlGenerationMessages.GENERATE_STORAGEGROUP_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_PARTITIONGROUP))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_PARTITIONGROUP, DdlGenerationMessages.GENERATE_PARTITIONGROUP_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_SCHEMAS))
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_SCHEMA, DdlGenerationMessages.GENERATE_SCHEMA_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_NICKNAME)) {
+              ExtendDdlBuilder nicknameDdlBuilder = DdlGenerationUtility.getNicknameDdlBuilder(product, version);
+              if (nicknameDdlBuilder != null) {
+                return new EngineeringOption(id,nicknameDdlBuilder.getOption(),nicknameDdlBuilder.getOptionDescription(),getOptionPreference(id,product,version,elements,true),additional_element);
+              }
+            }
+            //fsp - pyl
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_FEDERATEDPROCEDURES)) {
+                ExtendDdlBuilder federatedProcedureDdlBuilder = DdlGenerationUtility.getFederatedProcedureDdlBuilder(product, version);
+                if (federatedProcedureDdlBuilder != null) {
+                  return new EngineeringOption(id,federatedProcedureDdlBuilder.getOption(),federatedProcedureDdlBuilder.getOptionDescription(),getOptionPreference(id,product,version,elements,true),additional_element);
+                }
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_REMOTESERVER)) {
+              ExtendDdlBuilder remoteServerDdlBuilder = DdlGenerationUtility.getRemoteServerDdlBuilder(product, version);
+              if (remoteServerDdlBuilder != null) {
+                return new EngineeringOption(id,remoteServerDdlBuilder.getOption(),remoteServerDdlBuilder.getOptionDescription(),getOptionPreference(id,product,version,elements,true),additional_element);
+              }
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_WRAPPER)) {
+              ExtendDdlBuilder wrapperDdlBuilder = DdlGenerationUtility.getWrapperDdlBuilder(product, version);
+              if (wrapperDdlBuilder != null) {
+                return new EngineeringOption(id,wrapperDdlBuilder.getOption(),wrapperDdlBuilder.getOptionDescription(),getOptionPreference(id,product,version,elements,true),additional_element);
+              }
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_USERMAPPING)) {
+              ExtendDdlBuilder userMappingDdlBuilder = DdlGenerationUtility.getUserMappingDdlBuilder(product, version);
+              if (userMappingDdlBuilder != null) {
+                return new EngineeringOption(id,userMappingDdlBuilder.getOption(),userMappingDdlBuilder.getOptionDescription(),getOptionPreference(id,product,version,elements,true),additional_element);
+              }
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_OLAP)) {
+              OlapDdlBuilder olapDdlBuilder = DdlGenerationUtility.getOlapDdlBuilder(product, version);
+              if (olapDdlBuilder != null) {
+                return new EngineeringOption(id,olapDdlBuilder.getOption(),olapDdlBuilder.getOptionDescription(),getOptionPreference(id,product,version,elements,true),additional_element);
+              }
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_PACKAGE)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_PACKAGE, DdlGenerationMessages.GENERATE_PACKAGE_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_PACKAGE_BODY)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_PACKAGE_BODY, DdlGenerationMessages.GENERATE_PACKAGE_BODY_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_BACKUP_TABLE)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_BACKUP_TABLE, DdlGenerationMessages.GENERATE_BACKUP_TABLE_DES,getOptionPreference(id,product,version,elements,true),general_options); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_STATISTICS)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_STATISTICS, DdlGenerationMessages.GENERATE_STATISTICS_DES,getOptionPreference(id,product,version,elements,false),general_options); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_ROLE)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_ROLE, DdlGenerationMessages.GENERATE_ROLE_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_USER)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_USER, DdlGenerationMessages.GENERATE_USER_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_GROUP)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_GROUP, DdlGenerationMessages.GENERATE_GROUP_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.CHECK_MODEL)) {
+                return new EngineeringOption(id,DdlGenerationMessages.CHECK_MODEL, DdlGenerationMessages.CHECK_MODEL_DES,getOptionPreference(id,product,version,elements,false),general_options); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_MODULE)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_MODULE, DdlGenerationMessages.GENERATE_MODULE_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_MODULE_CONDITION)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_MODULE_CONDITION, DdlGenerationMessages.GENERATE_MODULE_CONDITION_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_GLOBAL_VARIABLE)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_GLOBAL_VARIABLE, DdlGenerationMessages.GENERATE_GLOBAL_VARIABLE_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_HISTORY_TABLE)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_HISTORY_TABLE, DdlGenerationMessages.GENERATE_HISTORY_TABLE_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_TEMPORARY_TABLES)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_TEMPORARY_TABLE, DdlGenerationMessages.GENERATE_TEMPORARY_TABLE_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_XMLSCHEMA)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_XMLSCHEMA, DdlGenerationMessages.GENERATE_XMLSCHEMA_DES,getOptionPreference(id,product,version,elements,false),additional_element); 
+            }
+//<bgp            else if (id.equalsIgnoreCase(EngineeringOptionID.XMLSCHEMA_CONNECTION_NAME)) {
+//                return new EngineeringOption(id,EngineeringOptionID.XMLSCHEMA_CONNECTION_NAME, EngineeringOptionID.XMLSCHEMA_CONNECTION_NAME, getOptionPreference(id,product,version,elements,""));
+//            }
+//            else if (id.equalsIgnoreCase(EngineeringOptionID.XMLSCHEMA_DIRECTORY)) {
+//                return new EngineeringOption(id,EngineeringOptionID.XMLSCHEMA_DIRECTORY, EngineeringOptionID.XMLSCHEMA_DIRECTORY, getOptionPreference(id,product,version,elements,""));
+//bgp>            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_SECURITY_POLICY)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_SECURITY_POLICY, DdlGenerationMessages.GENERATE_SECURITY_POLICY_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.DROP_RESTRICT)) {
+                return new EngineeringOption(id,DdlGenerationMessages.DROP_RESTRICT, DdlGenerationMessages.DROP_RESTRICT_DES,getOptionPreference(id,product,version,elements,false),general_options); 
+        	}
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_ROW_PERMISSIONS)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_ROW_PERMISSIONS, DdlGenerationMessages.GENERATE_ROW_PERMISSIONS_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            } 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_COLUMN_MASKS)) {
+                return new EngineeringOption(id,DdlGenerationMessages.GENERATE_COLUMN_MASKS, DdlGenerationMessages.GENERATE_COLUMN_MASKS_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            } 
+        } catch (Exception e) {
+            //The resource was not found
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+    
+    public static EngineeringOption getEngineeringOption(String id, String product, String version, EngineeringOptionCategory general_options, EngineeringOptionCategory additional_element, SQLObject[] elements, String descriptorName)
+    {
+
+        try {
+            if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_FULLY_QUALIFIED_NAME))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_FULLY_QUALIFIED_NAME_DES,getOptionPreference(id,product,version,elements,qualifyNamesDefault),general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_QUOTED_IDENTIFIER))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_QUOTED_IDENTIFIER_DES,getOptionPreference(id,product,version,elements,quoteIdentifiersDefault),general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_DROP_STATEMENTS))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_DROP_STATEMENTS_DES,getOptionPreference(id,product,version,elements,false),general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_CREATE_STATEMENTS))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_CREATE_STATEMENTS_DES,getOptionPreference(id,product,version,elements,true),general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_PRIVILEGE))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_PRIVILEGE_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_COMMENTS))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_COMMENTS_DES,getOptionPreference(id,product,version,elements,true),general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_LABELS))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_LABELS_DES,getOptionPreference(id,product,version,elements,true),general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_IN_TABLESPACE_CLAUSE))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_IN_TABLESPACE_CLAUSE_DES,getOptionPreference(id,product,version,elements,true),general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_ON_FILEGROUP_CLAUSE))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_ON_FILEGROUP_CLAUSE_DES,getOptionPreference(id,product,version,elements,true),general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_USE_DOMAIN_IF_EXIST))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_USE_DOMAIN_IF_EXIST_DES,getOptionPreference(id,product,version,elements,false),general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_CREATE_OR_REPLACE) && ModelHelper.getVersionAsFloat(version) >= 9.7f)
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_CREATE_OR_REPLACE_DES,getOptionPreference(id,product,version,elements,false),general_options); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_TABLES))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_TABLES_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_TABLESPACES)){
+            	if(product.equals("Oracle"))
+            		return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_TABLESPACES_DES,getOptionPreference(id,product,version,elements,true),additional_element);
+            	else
+            		return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_TABLESPACES_DES,getOptionPreference(id,product,version,elements,false),additional_element);
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_FILEGROUPS))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_FILEGROUPS_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_INDICES))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_INDEX_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_STOREDPROCEDURES))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_STOREDPROCEDURE_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_FUNCTIONS))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_FUNCTION_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_VIEWS))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_VIEW_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_TRIGGERS))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_TRIGGER_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_SEQUENCES))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_SEQUENCE_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_USER_DEFINED_TYPE))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_USER_DEFINED_TYPE_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+    //      else if(o instanceof DistinctUserDefinedType)
+    //      else if (o instanceof StructuredUserDefinedType)
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_PK_CONSTRAINTS))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_PK_CONSTRAINTS_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_CK_CONSTRAINTS))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_CK_CONSTRAINTS_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_FK_CONSTRAINTS))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_FK_CONSTRAINTS_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_TABLESPACES))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_TABLESPACES_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+    //      else if(id.equalsIgnoreCase(EngineeringOptionID.GENERATE_SYNONYM)
+    //        setOption(new EngineeringOption(id,Messages.getString("GENERATE_SYNONYM"), Messages.getString("GENERATE_SYNONYM_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+    //      }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_DATABASE))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_DATABASE_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_MQT))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_MQT_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_ALIAS))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_ALIAS_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_SYNONYM))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_SYNONYM_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_BUFFERPOOL))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_BUFFERPOOL_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_STORAGEGROUP))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_STORAGEGROUP_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_PARTITIONGROUP))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_PARTITIONGROUP_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_SCHEMAS))
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_SCHEMA_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_NICKNAME)) {
+              ExtendDdlBuilder nicknameDdlBuilder = DdlGenerationUtility.getNicknameDdlBuilder(product, version);
+              if (nicknameDdlBuilder != null) {
+                return new EngineeringOption(id,nicknameDdlBuilder.getOption(),nicknameDdlBuilder.getOptionDescription(),getOptionPreference(id,product,version,elements,true),additional_element);
+              }
+            }
+            //fsp - pyl
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_FEDERATEDPROCEDURES)) {
+                ExtendDdlBuilder federatedProcedureDdlBuilder = DdlGenerationUtility.getFederatedProcedureDdlBuilder(product, version);
+                if (federatedProcedureDdlBuilder != null) {
+                  return new EngineeringOption(id,federatedProcedureDdlBuilder.getOption(),federatedProcedureDdlBuilder.getOptionDescription(),getOptionPreference(id,product,version,elements,true),additional_element);
+                }
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_REMOTESERVER)) {
+              ExtendDdlBuilder remoteServerDdlBuilder = DdlGenerationUtility.getRemoteServerDdlBuilder(product, version);
+              if (remoteServerDdlBuilder != null) {
+                return new EngineeringOption(id,remoteServerDdlBuilder.getOption(),remoteServerDdlBuilder.getOptionDescription(),getOptionPreference(id,product,version,elements,true),additional_element);
+              }
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_WRAPPER)) {
+              ExtendDdlBuilder wrapperDdlBuilder = DdlGenerationUtility.getWrapperDdlBuilder(product, version);
+              if (wrapperDdlBuilder != null) {
+                return new EngineeringOption(id,wrapperDdlBuilder.getOption(),wrapperDdlBuilder.getOptionDescription(),getOptionPreference(id,product,version,elements,true),additional_element);
+              }
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_USERMAPPING)) {
+              ExtendDdlBuilder userMappingDdlBuilder = DdlGenerationUtility.getUserMappingDdlBuilder(product, version);
+              if (userMappingDdlBuilder != null) {
+                return new EngineeringOption(id,userMappingDdlBuilder.getOption(),userMappingDdlBuilder.getOptionDescription(),getOptionPreference(id,product,version,elements,true),additional_element);
+              }
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_OLAP)) {
+              OlapDdlBuilder olapDdlBuilder = DdlGenerationUtility.getOlapDdlBuilder(product, version);
+              if (olapDdlBuilder != null) {
+                return new EngineeringOption(id,olapDdlBuilder.getOption(),olapDdlBuilder.getOptionDescription(),getOptionPreference(id,product,version,elements,true),additional_element);
+              }
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_PACKAGE)) {
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_PACKAGE_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_PACKAGE_BODY)) {
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_PACKAGE_BODY_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_BACKUP_TABLE)) {
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_BACKUP_TABLE_DES,getOptionPreference(id,product,version,elements,true),general_options); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_STATISTICS)) {
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_STATISTICS_DES,getOptionPreference(id,product,version,elements,false),general_options); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_ROLE)) {
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_ROLE_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_USER)) {
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_USER_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_GROUP)) {
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_GROUP_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.CHECK_MODEL)) {
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.CHECK_MODEL_DES,getOptionPreference(id,product,version,elements,false),general_options); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_MODULE)) {
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_MODULE_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_MODULE_CONDITION)) {
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_MODULE_CONDITION_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_GLOBAL_VARIABLE)) {
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_GLOBAL_VARIABLE_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_HISTORY_TABLE)) {
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_HISTORY_TABLE_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_TEMPORARY_TABLES)) {
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_TEMPORARY_TABLE_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_XMLSCHEMA)) {
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_XMLSCHEMA_DES,getOptionPreference(id,product,version,elements,false),additional_element); 
+            }
+//<bgp            else if (id.equalsIgnoreCase(EngineeringOptionID.XMLSCHEMA_CONNECTION_NAME)) {
+//                return new EngineeringOption(id,EngineeringOptionID.XMLSCHEMA_CONNECTION_NAME, EngineeringOptionID.XMLSCHEMA_CONNECTION_NAME, getOptionPreference(id,product,version,elements,""));
+//            }
+//            else if (id.equalsIgnoreCase(EngineeringOptionID.XMLSCHEMA_DIRECTORY)) {
+//                return new EngineeringOption(id,EngineeringOptionID.XMLSCHEMA_DIRECTORY, EngineeringOptionID.XMLSCHEMA_DIRECTORY, getOptionPreference(id,product,version,elements,""));
+//bgp>            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_SECURITY_POLICY)) {
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_SECURITY_POLICY_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            }
+            else if (id.equalsIgnoreCase(EngineeringOptionID.DROP_RESTRICT)) {
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.DROP_RESTRICT_DES,getOptionPreference(id,product,version,elements,false),general_options); 
+        	}
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_ROW_PERMISSIONS)) {
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_ROW_PERMISSIONS_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            } 
+            else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_COLUMN_MASKS)) {
+                return new EngineeringOption(id,descriptorName, DdlGenerationMessages.GENERATE_COLUMN_MASKS_DES,getOptionPreference(id,product,version,elements,true),additional_element); 
+            } 
+        } catch (Exception e) {
+            //The resource was not found
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+    //@ed00058820gs    
+    
+    public static boolean getOptionPreference(String id, String product, String version, SQLObject[] elements, boolean defaultValue){
+    	return Boolean.parseBoolean(instanceNode.get(PreferenceConstants.PREF_GENERATE_DDL_OPTION + product + version + elements[0].eClass().getName() + id, String.valueOf(defaultValue)));
+    }
+    
+    public static String getOptionPreference(String id, String product, String version, SQLObject[] elements, String defaultValue){
+    	return instanceNode.get(PreferenceConstants.PREF_GENERATE_DDL_OPTION + product + version + elements[0].eClass().getName() + id, defaultValue);
+    }
+    
+    public static OlapDdlBuilder getOlapDdlBuilder(String dbProduct, String dbVersion) {
+        if (olapDdlBuilder != null) return olapDdlBuilder;
+        IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+        IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("com.ibm.datatools.core", "olapDdlBuilder"); //$NON-NLS-1$ //$NON-NLS-2$
+        if (extensionPoint != null) {
+            IExtension[] extensions = extensionPoint.getExtensions();
+            for(int i=0; i<extensions.length; ++i) {
+                IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+                for(int j=0; j<configElements.length; ++j) {
+                    if(configElements[j].getName().equals("builder")) { //$NON-NLS-1$
+                        String product = configElements[j].getAttribute("product"); //$NON-NLS-1$
+                        if(!product.equals(dbProduct)) continue;
+                        try {
+                            olapDdlBuilder = (OlapDdlBuilder) configElements[j].createExecutableExtension("provider"); //$NON-NLS-1$
+                        }
+                        catch(CoreException e) {
+                            IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getDefault().getBundle().getSymbolicName(), IStatus.ERROR,
+                                    "The error was detected when creating the olap ddl builder for " + product, e); //$NON-NLS-1$
+                            IBMPluginActivator.getInstance().getLog().log(status);
+                        }
+                        break;
+                    }
+                }
+            }
+        }
+        return olapDdlBuilder;
+    }
+    
+    public static ExtendDdlBuilder getNicknameDdlBuilder(String dbProduct, String dbVersion) {
+        if (nicknameDdlBuilder != null) return nicknameDdlBuilder;
+        IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+        IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("com.ibm.datatools.core", "nicknameDdlBuilder"); //$NON-NLS-1$ //$NON-NLS-2$
+        if (extensionPoint != null) {
+            IExtension[] extensions = extensionPoint.getExtensions();
+            for(int i=0; i<extensions.length; ++i) {
+                IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+                for(int j=0; j<configElements.length; ++j) {
+                    if(configElements[j].getName().equals("builder")) { //$NON-NLS-1$
+                        String product = configElements[j].getAttribute("product"); //$NON-NLS-1$
+                        if(!product.equals(dbProduct)) continue;
+                        try {
+                            nicknameDdlBuilder = (ExtendDdlBuilder) configElements[j].createExecutableExtension("provider"); //$NON-NLS-1$
+                        }
+                        catch(CoreException e) {
+                            IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getDefault().getBundle().getSymbolicName(), IStatus.ERROR,
+                                    "The error was detected when creating the nickname ddl builder for " + product, e); //$NON-NLS-1$
+                            IBMPluginActivator.getInstance().getLog().log(status);
+                        }
+                        break;
+                    }
+                }
+            }
+        }
+        return nicknameDdlBuilder;
+    }
+    
+    // fsp - pyl
+    public static ExtendDdlBuilder getFederatedProcedureDdlBuilder(String dbProduct, String dbVersion) {
+        if (federatedProcedureDdlBuilder != null) return federatedProcedureDdlBuilder;
+        IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+        IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("com.ibm.datatools.core", "federatedProcedureDdlBuilder"); //$NON-NLS-1$ //$NON-NLS-2$
+        if (extensionPoint != null) {
+            IExtension[] extensions = extensionPoint.getExtensions();
+            for(int i=0; i<extensions.length; ++i) {
+                IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+                for(int j=0; j<configElements.length; ++j) {
+                    if(configElements[j].getName().equals("builder")) { //$NON-NLS-1$
+                        String product = configElements[j].getAttribute("product"); //$NON-NLS-1$
+                        if(!product.equals(dbProduct)) continue;
+                        try {
+                            federatedProcedureDdlBuilder = (ExtendDdlBuilder) configElements[j].createExecutableExtension("provider"); //$NON-NLS-1$
+                        }
+                        catch(CoreException e) {
+                            IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getDefault().getBundle().getSymbolicName(), IStatus.ERROR,
+                                    "The error was detected when creating the federated stored procedure ddl builder for " + product, e); //$NON-NLS-1$
+                            IBMPluginActivator.getInstance().getLog().log(status);
+                        }
+                        break;
+                    }
+                }
+            }
+        }
+        return federatedProcedureDdlBuilder;
+    }
+    
+    public static ExtendDdlBuilder getRemoteServerDdlBuilder(String dbProduct, String dbVersion) {
+        if (remoteServerDdlBuilder != null) return remoteServerDdlBuilder;
+        IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+        IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("com.ibm.datatools.core", "remoteServerDdlBuilder"); //$NON-NLS-1$ //$NON-NLS-2$
+        if (extensionPoint != null) {
+            IExtension[] extensions = extensionPoint.getExtensions();
+            for(int i=0; i<extensions.length; ++i) {
+                IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+                for(int j=0; j<configElements.length; ++j) {
+                    if(configElements[j].getName().equals("builder")) { //$NON-NLS-1$
+                        String product = configElements[j].getAttribute("product"); //$NON-NLS-1$
+                        if(!product.equals(dbProduct)) continue;
+                        try {
+                            remoteServerDdlBuilder = (ExtendDdlBuilder) configElements[j].createExecutableExtension("provider"); //$NON-NLS-1$
+                        }
+                        catch(CoreException e) {
+                            IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getDefault().getBundle().getSymbolicName(), IStatus.ERROR,
+                                    "The error was detected when creating the remote Server ddl builder for " + product, e); //$NON-NLS-1$
+                            IBMPluginActivator.getInstance().getLog().log(status);
+                        }
+                        break;
+                    }
+                }
+            }
+        }
+        return remoteServerDdlBuilder;
+    }
+
+    public static ExtendDdlBuilder getWrapperDdlBuilder(String dbProduct, String dbVersion) {
+        if (wrapperDdlBuilder != null) return wrapperDdlBuilder;
+        IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+        IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("com.ibm.datatools.core", "wrapperDdlBuilder"); //$NON-NLS-1$ //$NON-NLS-2$
+        if (extensionPoint != null) {
+            IExtension[] extensions = extensionPoint.getExtensions();
+            for(int i=0; i<extensions.length; ++i) {
+                IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+                for(int j=0; j<configElements.length; ++j) {
+                    if(configElements[j].getName().equals("builder")) { //$NON-NLS-1$
+                        String product = configElements[j].getAttribute("product"); //$NON-NLS-1$
+                        if(!product.equals(dbProduct)) continue;
+                        try {
+                            wrapperDdlBuilder = (ExtendDdlBuilder) configElements[j].createExecutableExtension("provider"); //$NON-NLS-1$
+                        }
+                        catch(CoreException e) {
+                            IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getDefault().getBundle().getSymbolicName(), IStatus.ERROR,
+                                    "The error was detected when creating the Wrapper ddl builder for " + product, e); //$NON-NLS-1$
+                            IBMPluginActivator.getInstance().getLog().log(status);
+                        }
+                        break;
+                    }
+                }
+            }
+        }
+        return wrapperDdlBuilder;
+    }
+    
+    public static ExtendDdlBuilder getUserMappingDdlBuilder(String dbProduct, String dbVersion) {
+        if (userMappingDdlBuilder != null) return userMappingDdlBuilder;
+        IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+        IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("com.ibm.datatools.core", "userMappingDdlBuilder"); //$NON-NLS-1$ //$NON-NLS-2$
+        if (extensionPoint != null) {
+            IExtension[] extensions = extensionPoint.getExtensions();
+            for(int i=0; i<extensions.length; ++i) {
+                IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+                for(int j=0; j<configElements.length; ++j) {
+                    if(configElements[j].getName().equals("builder")) { //$NON-NLS-1$
+                        String product = configElements[j].getAttribute("product"); //$NON-NLS-1$
+                        if(!product.equals(dbProduct)) continue;
+                        try {
+                            userMappingDdlBuilder = (ExtendDdlBuilder) configElements[j].createExecutableExtension("provider"); //$NON-NLS-1$
+                        }
+                        catch(CoreException e) {
+                            IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getDefault().getBundle().getSymbolicName(), IStatus.ERROR,
+                                    "The error was detected when creating the User Mapping ddl builder for " + product, e); //$NON-NLS-1$
+                            IBMPluginActivator.getInstance().getLog().log(status);
+                        }
+                        break;
+                    }
+                }
+            }
+        }
+        return userMappingDdlBuilder;
+    }
+    
+    public static TypedElementLogicalDomainProvider getElementDomainProvider(){
+        if (elementDomainProvider != null) return elementDomainProvider;
+        IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+        IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("com.ibm.datatools.core", "typedElementLogicalDomainProvider"); //$NON-NLS-1$ //$NON-NLS-2$
+        if (extensionPoint != null) {
+            IExtension[] extensions = extensionPoint.getExtensions();
+            for(int i=0; i<extensions.length; ++i) {
+                IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+                for(int j=0; j<configElements.length; ++j) {
+                    if(configElements[j].getName().equals("provider")) { //$NON-NLS-1$
+                        try {
+                            elementDomainProvider = (TypedElementLogicalDomainProvider) configElements[j].createExecutableExtension("typeProvider"); //$NON-NLS-1$
+                        }
+                        catch(CoreException e) {
+                            IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getDefault().getBundle().getSymbolicName(), IStatus.ERROR,
+                                    "The error was detected when creating the element domain provider ", e); //$NON-NLS-1$
+                            IBMPluginActivator.getInstance().getLog().log(status);
+                        }
+                        break;
+                    }
+                }
+            }
+        }
+        return elementDomainProvider;
+        
+    }
+
+    public static ModelValidationProvider getModelValidationProvider(){
+        if (modelValidationProvider != null) return modelValidationProvider;
+        IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+        IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("com.ibm.datatools.core", "checkModelProvider"); //$NON-NLS-1$ //$NON-NLS-2$
+        if (extensionPoint != null) {
+            IExtension[] extensions = extensionPoint.getExtensions();
+            for(int i=0; i<extensions.length; ++i) {
+                IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+                for(int j=0; j<configElements.length; ++j) {
+                    if(configElements[j].getName().equals("checkModel")) { //$NON-NLS-1$
+                        try {
+                            modelValidationProvider = (ModelValidationProvider) configElements[j].createExecutableExtension("provider"); //$NON-NLS-1$
+                        }
+                        catch(CoreException e) {
+                            IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getDefault().getBundle().getSymbolicName(), IStatus.ERROR,
+                                    "The error was detected when creating the model validation provider ", e); //$NON-NLS-1$
+                            IBMPluginActivator.getInstance().getLog().log(status);
+                        }
+                        break;
+                    }
+                }
+            }
+        }
+        return modelValidationProvider;
+    }
+
+    
+    public static Map getCodetemplatePatterns(){
+        Map patterns = new HashMap();
+        Preferences instanceNode = InstanceScope.INSTANCE.getNode("com.ibm.datatools.core.ui");//$NON-NLS-1$
+        String text="";
+        text = instanceNode.get(PreferenceConstants.CODETEMPLATE_APPLY_CONTEXT_KEY,text);
+        if (text != null && !text.equals("")) {
+            DdlGenerationUtility.getCodetemplateContext(patterns, CREATE_STATEMENT, text);
+            DdlGenerationUtility.getCodetemplateContext(patterns, DROP_STATEMENT, text);
+        }
+        
+        text = instanceNode.get(PreferenceConstants.CODETEMPLATE_TABLE_PATTERN_KEY,"");
+        DdlGenerationUtility.getCodetemplatePattern(patterns, text);
+    
+        text = instanceNode.get(PreferenceConstants.CODETEMPLATE_ROUTINE_PATTERN_KEY,"");
+        DdlGenerationUtility.getCodetemplatePattern(patterns, text);
+    
+        text = instanceNode.get(PreferenceConstants.CODETEMPLATE_VIEW_PATTERN_KEY,"");
+        DdlGenerationUtility.getCodetemplatePattern(patterns, text);
+
+        text = instanceNode.get(PreferenceConstants.CODETEMPLATE_CONSTRAINT_PATTERN_KEY,"");
+        DdlGenerationUtility.getCodetemplatePattern(patterns, text);
+        
+        return patterns;
+    }
+    
+    
+    
+    private static void getCodetemplateContext(Map map,String statementType, String data){
+        StringTokenizer token = new StringTokenizer(data,DdlGenerationUtility.STATEMENT_TYPE_SEPARATOR);
+        while (token.hasMoreTokens()) {
+            String str = token.nextToken();
+            int pos = str.indexOf(statementType);
+            if (pos == -1) continue;
+            StringTokenizer contextToken = new StringTokenizer(str.substring(statementType.length()+1),DdlGenerationUtility.CONTEXT_SEPARATOR);
+            while (contextToken.hasMoreTokens()) {
+                String str1 = contextToken.nextToken();
+                String name =str1;
+                boolean applied = false;
+                if (str1.endsWith(DdlGenerationUtility.CONTEXT_APPLY_FLAG)) {
+                    name = str1.substring(0, str1.length()-1);
+                    applied = true;
+                }
+
+                CodeTemplateContextPattern context = null;
+                if (map.containsKey(name)) {
+                    context = (CodeTemplateContextPattern)map.get(name);
+                }else {
+                    context = new CodeTemplateContextPattern();
+                    map.put(name,context);
+                }
+                
+                if (applied){
+                    if (statementType.equals(CREATE_STATEMENT)) {
+                        context.setAppliedType(DdlGenerationUtility.GENERATE_CREATE_PATTERN);
+                    } else if (statementType.equals(DROP_STATEMENT)) {
+                        context.setAppliedType(DdlGenerationUtility.GENERATE_DROP_PATTERN);
+                    }
+                }
+                
+            }
+        }
+    }
+    
+    private static void getCodetemplatePattern(Map map, String codeTemplate){
+        if (codeTemplate == null) return;
+
+        Pattern pattern = Pattern.compile(DdlGenerationUtility.PATTERN_KEY,Pattern.DOTALL); 
+        String[] result = pattern.split(codeTemplate);
+        for (int i = 0; i < result.length; i++) {
+            parserPattern(map,result[i]);
+        }
+        
+    }
+
+    private static void parserPattern(Map map, String pattern){
+        int pos = pattern.indexOf("::");
+        if (pos == -1 ) return;
+        
+        String context = pattern.substring(0,pos);
+        String text = pattern.substring(pos+2);
+        
+        if (!map.containsKey(context)) {
+            return;
+        }
+
+        CodeTemplateContextPattern contextPattern = (CodeTemplateContextPattern)map.get(context);
+        if (contextPattern == null) return;
+        pos = text.indexOf("::");
+        if (pos == -1 ) return;
+        
+        String type = text.substring(0,pos);
+        if (type.equals(CREATE_PROLOG)){
+            contextPattern.setCreateProlog(text.substring(pos +2));
+        } else if (type.equals(CREATE_POSTLOG)){
+            contextPattern.setCreatePostlog(text.substring(pos +2));
+        } else if (type.equals(DROP_PROLOG)) {
+            contextPattern.setDropProlog(text.substring(pos +2));
+        } else if (type.equals(DROP_POSTLOG)) {
+            contextPattern.setDropPostlog(text.substring(pos +2));
+        }
+
+    }
+
+    private static int tableNameSuffix = 0;
+
+    private static String getTableNameSuffix() {
+        return String.valueOf(tableNameSuffix++);
+    }
+
+    private static String iterateUntilUnique(ArrayList<String> tables,String prefix) {
+        String retString = prefix + getTableNameSuffix();
+        if (tables.size() > 0) {
+            for (String table: tables) {
+                if (table.equals(retString)) return iterateUntilUnique(tables,prefix);
+            }
+        }
+        return retString;
+    }
+    
+    private static String createUniqueTableName(List<Table> existing,String prefix) {
+        int prefixLength = prefix.length();
+        ArrayList<String> tableNames = new ArrayList<String>();
+        // Eliminate all the tables with different prefix first
+        Iterator<Table> it = existing.iterator();
+        while (it.hasNext()) {
+            String tableName = it.next().getName();
+            if ((tableName.length() >= prefixLength) &&
+                    tableName.substring(0,prefixLength).equals(prefix)) tableNames.add(tableName);
+        }
+        // Find a unique name from the remaining index names
+        return iterateUntilUnique(tableNames,prefix);
+    }
+    
+    public static String getUniqueTableName(Schema schema,String prefix) {
+        Object collection = schema.eGet(SQLSchemaPackage.eINSTANCE.getSchema_Tables());
+        if (collection instanceof EList) {
+            return createUniqueTableName((EList)collection,prefix);
+        }
+        return null;
+    }
+
+    // Determine if the unique constraint is supported by the index
+    public static boolean isSameMembership(Index o, UniqueConstraint o1) {
+        EList idxMembers = o.getMembers();
+        EList ucMembers = o1.getMembers();
+        if (idxMembers.size() != ucMembers.size()) return false;
+        for (int i=0;i<idxMembers.size();i++) {
+            if (ucMembers.get(i) != ((IndexMember)(idxMembers.get(i))).getColumn()) return false;
+        }
+        return true;
+    }
+
+    /**
+     * Get the character to use as the data object identifier delimiter
+     * (typically the double quote character).
+     * @param object
+     * @return
+     */
+    public static char getSqlIdentifierDelimiterCharacter(SQLObject object) {
+        // For now, we are always returning the default delimiter, but in the future
+        //   we may want to make use of the object to tailor this to the database 
+        //   vendor/version or user-defined delimiter
+        SQLQuerySourceFormat sourceFormat = SQLQuerySourceFormat.copyDefaultFormat();
+        return sourceFormat.getDelimitedIdentifierQuote();
+    }
+    
+    /**
+     * Get the character to use as the DDL escape character.  There is currently
+     * no support for this in the SQL parser, so we assume it will be the same as
+     * the data object identifier delimiter (hence, when a delimiter character
+     * is embedded in a data object name, it will be doubled up to escape it).
+     * @param object
+     * @return
+     */
+    public static char getSqlEscapeCharacter(SQLObject object) {
+        // For now, there is no separate escape character definition, so we just
+        //   return the indentifier delimiter.  In future this may be implemented and
+        //   dependent on vendor-version
+        return getSqlIdentifierDelimiterCharacter(object);
+    }
+
+    /**
+     * Return true if the name of the object can be used in SQL without delimiting.
+     * @param object The data object whose name is to be considered.
+     * @return
+     */
+    public static boolean isValidUnquotedDataObjectIdentifier(SQLObject object) {
+        String allowedFirstCharSymbols = "@$#";
+        String name = object.getName();
+        if (name == null || name.length() < 1) {
+            return false;
+        }
+        char firstChar = name.charAt(0);
+        if (!Character.isLetter(firstChar) &&
+                !allowedFirstCharSymbols.contains(new String(new char[] {firstChar}))) {
+            return false;
+        }
+        for (int i=1;i<name.length();i++) {
+            char c = name.charAt(i);
+            if (!Character.isLetterOrDigit(c) &&
+                !allowedFirstCharSymbols.contains(new String(new char[] {c})) &&
+                c != '_') {
+                return false;
+            }
+        }
+        return true;
+    }
+    
+    public static List<Integer> getConstraintColumnReferencePointers(CheckConstraint constraint,Column col) {
+        List<Integer> occurrenceIdxs = new ArrayList<Integer>();
+        if(col == null) {
+            return occurrenceIdxs;
+        }
+        String name = col.getName();
+        if(name == null || (name.length()==0)) {
+            return occurrenceIdxs;
+        }
+        SearchCondition cond = constraint.getSearchCondition();
+        if(cond == null) {
+            return occurrenceIdxs;
+        }
+        String sql = cond.getSQL();
+        if((sql==null) || (sql.length()==0)) {
+            return occurrenceIdxs;
+        }
+
+        // Looks like we have all the essentials
+        Table table = constraint.getBaseTable();
+        String tableName = table.getName();
+        Schema schema = table.getSchema();
+        String schemaName = schema.getName();
+        
+        Set<ValueExpressionColumn> vECs = getConstraintValueExpressionColumns(schema,table,constraint);
+
+        // get the SQL source format options and set at least the current schema
+        // that is omited but implicit for any unqualified table references
+        // important for later resolving of table references!
+        SQLQuerySourceFormat sourceFormat = SQLQuerySourceFormat.copyDefaultFormat();
+        sourceFormat.setOmitSchema(schemaName);
+        char nameDelimiter = sourceFormat.getDelimitedIdentifierQuote();
+        String selectProlog = "SELECT * FROM " + nameDelimiter + tableName + nameDelimiter + " WHERE ";//$NON-NLS-1$ //$NON-NLS-2$
+        
+        for (ValueExpressionColumn vEC:vECs) {
+            // Ignore the column references that do not reference the current
+            //   column of interest
+            if (isValidUnquotedDataObjectIdentifier(col)) {
+                // Identifier does not need to be quoted - ignore case
+                if (!((ValueExpressionColumn)vEC).getName().equalsIgnoreCase(col.getName())) {
+                    continue;
+                }
+            }
+            else {
+                // Identifier must be quoted - case must be respected
+                if (!((ValueExpressionColumn)vEC).getName().equals(col.getName())) {
+                    continue;
+                }
+            }
+            SQLQuerySourceInfo info = ((ValueExpressionColumn)vEC).getSourceInfo();
+            int idx = info.getSpanStartOffset();
+            String snippet = info.getSourceSnippet();
+            // If the column name is delimited in the constraint expression, the
+            //   index will pointing to the first delimiter instead of to the first
+            //   character of the name -- so add 1 in this case to the index
+            if ((snippet.charAt(0) == nameDelimiter) &&
+                    (snippet.length() > name.length())) {
+                idx = idx + 1;
+            }
+            occurrenceIdxs.add(idx - selectProlog.length());
+        }
+        return occurrenceIdxs;
+    }
+
+    public static Set<ValueExpressionColumn> getConstraintValueExpressionColumns(Schema schema,Table table,CheckConstraint constraint) {
+        Set<ValueExpressionColumn> cols = new HashSet<ValueExpressionColumn>();
+
+        SearchCondition cond = constraint.getSearchCondition();
+
+        if(cond == null) {
+            return cols;
+        }
+        String sql = cond.getSQL();
+        if((sql==null) || (sql.length()==0)) {
+            return cols;
+        }
+
+        // Looks like we have all the essentials
+        String tableName = table.getName();
+        String schemaName = schema.getName();
+        Database database = schema.getDatabase();
+        
+        try {
+            // create the post parse processors
+            PostParseProcessor tableRefResolver = new TableReferenceResolver(database,schemaName);
+            PostParseProcessor dataTypeResolver = new DataTypeResolver();
+            
+            // ordering is important for post parse processing! first we need to fill
+            // in the database information for table references and column types
+            List postParseProcessors = new ArrayList();
+            postParseProcessors.add(0, tableRefResolver);
+            postParseProcessors.add(1, dataTypeResolver);
+        
+            // get the SQL source format options and set at least the current schema
+            // that is omited but implicit for any unqualified table references
+            // important for later resolving of table references!
+            SQLQuerySourceFormat sourceFormat = SQLQuerySourceFormat.copyDefaultFormat();
+            sourceFormat.setOmitSchema(schemaName);
+            char nameDelimiter = sourceFormat.getDelimitedIdentifierQuote();
+
+            String selectProlog = "SELECT * FROM " + nameDelimiter + tableName + nameDelimiter + " WHERE ";//$NON-NLS-1$ //$NON-NLS-2$
+            String selectStatement = selectProlog + sql; // construct a select statement
+
+            // create an instance of the ParserManager
+            SQLQueryParserManager parserManager = 
+                SQLQueryParserManagerProvider.getInstance().
+                getParserManager(database.getVendor(),database.getVersion());
+            parserManager.configParser(sourceFormat,postParseProcessors);
+            
+            // parse the SQL statement
+            SQLQueryParseResult parseResult = (SQLQueryParseResult) parserManager.parseQuery(selectStatement);
+
+            // get the parsed SQLQueryObject model instance
+            QueryStatement qS = parseResult.getQueryStatement();
+            QuerySearchCondition qSC = StatementHelper.getSearchCondition(qS);
+            Set colSet = TableHelper.findColumnReferencesInSearchCondition(qSC);
+            for (Object vEC:colSet) {
+                if (vEC instanceof ValueExpressionColumn) {
+                    cols.add((ValueExpressionColumn)vEC);
+                }
+            }
+        }
+        catch(Exception ex) {
+        }
+        return cols;
+    }
+
+    public static Column getFirstColumnInCheckConstraintSearchCondition(Schema schema,Table table,CheckConstraint constraint) {
+        Set<ValueExpressionColumn> vECs = getConstraintValueExpressionColumns(schema,table,constraint);
+        List<Column> cols = table.getColumns();
+        for (ValueExpressionColumn vEC:vECs) {
+            for (Column col:cols) {
+                if (isValidUnquotedDataObjectIdentifier(col)) {
+                    // Identifier does not need to be quoted - ignore case
+                    if (!((ValueExpressionColumn)vEC).getName().equalsIgnoreCase(col.getName())) {
+                        continue;
+                    }
+                }
+                else {
+                    // Identifier must be quoted - case must be respected
+                    if (!((ValueExpressionColumn)vEC).getName().equals(col.getName())) {
+                        continue;
+                    }
+                }
+                // Have a match
+                return col;
+            }
+        }
+        return null;
+    }
+    
+    public static String convertLineEndings(String str, String lineEnding) {
+        // Replace line endings with system line ending
+        BufferedReader reader = new BufferedReader(new StringReader(str));
+        StringBuffer buf = new StringBuffer();
+        String line;
+        try {
+            while ((line = reader.readLine()) != null) {
+                buf.append(line + lineEnding);
+            }
+            reader.close();
+        } catch (IOException e) {
+            return null;
+        }
+        return buf.toString();
+    }
+
+	public static boolean filterOutComments( String sql )
+	{
+		String[] statements = sql.split( "\n" );
+		for ( String s : statements )
+		{
+			if ( s.startsWith( "--" ) )
+			{
+				continue;
+			}
+			else if ( s.trim().length() > 0 )
+			{
+				return true;
+			}
+		}
+		return false;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/DdlParser.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/DdlParser.java
new file mode 100644
index 0000000..dcd1478
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/DdlParser.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2003,2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.ddl;
+
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;
+
+public interface DdlParser {
+
+	public void parseView (ViewTable view,String viewText);
+    public void parseTrigger (Trigger trigger,String triggerText);
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/DdlScript.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/DdlScript.java
new file mode 100644
index 0000000..288e8a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/DdlScript.java
@@ -0,0 +1,272 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.ddl;
+
+import java.util.Vector;
+
+public class DdlScript {
+    public void addDropTableStatement(String statement) {
+    	dropTableStatements.addElement(statement);
+    }
+	
+    public void addCreateTableStatement(String statement) {
+    	createTableStatements.addElement(statement);
+    }
+	
+    public void addRenameTableStatement(String statement) {
+    	renameTableStatements.addElement(statement);
+    }
+	
+    public void addRenameColumnStatement(String statement) {
+    	renameColumnStatements.addElement(statement);
+    }
+	
+    public void addAlterTableStatement(String statement) {
+    	alterTableStatements.addElement(statement);
+    }
+
+    public void addAlterTableAddColumnStatement(String statement) {
+    	alterTableAddColumnStatements.addElement(statement);
+    }
+
+    public void addAlterTableDropColumnStatement(String statement) {
+    	alterTableDropColumnStatements.addElement(statement);
+    }
+
+    public void addReorgTableStatement(String statement) {
+    	reorgStatements.addElement(statement);
+    }
+
+	// Data Preservation	
+    public void addBackupTableStatement(String statement) {
+    	backupTableStatements.addElement(statement);
+    }
+
+    public void addPopulateTableStatement(String statement) {
+    	populateTableStatements.addElement(statement);
+    }
+    public void addDropBackupTableStatement(String statement) {
+    	dropBackupTableStatements.addElement(statement);
+    }
+    // End Data Presrevation
+
+    public void addDropViewStatement(String statement) {
+    	dropViewStatements.addElement(statement);
+    }
+
+    public void addCreateViewStatement(String statement) {
+    	createViewStatements.addElement(statement);
+    }
+
+    public void addDropUserDefinedTypeStatement(String statement) {
+    	dropUserDefinedTypeStatements.addElement(statement);
+    }
+ 
+    public void addCreateUserDefinedTypeStatement(String statement) {
+    	createUserDefinedTypeStatements.addElement(statement);
+    }
+
+    public void addDropSequenceStatement(String statement){
+    	dropSequenceStatements.addElement(statement);
+    }
+    
+    public void addCreateSequenceStatement(String statement){
+    	createSequenceStatements.addElement(statement);
+    }
+
+    public void addDropRoutineStatement(String statement) {
+    	dropRoutineStatements.addElement(statement);
+    }
+    
+    public void addCreateRoutineStatement(String statement) {
+    	createRoutineStatements.addElement(statement);
+    }
+	
+    public void addAlterTableDropForeignKeyStatement(String statement) {
+    	dropForeignKeyStatements.addElement(statement);
+    }
+
+    public void addAlterTableAddForeignKeyStatement(String statement) {
+    	addForeignKeyStatements.addElement(statement);
+    }
+	
+    public void addDropIndexStatement(String statement) {
+    	dropIndexStatements.addElement(statement);
+    }
+
+    public void addCreateViewIndexStatement(String statement) {
+    	createViewIndexStatements.addElement(statement);
+    }
+	
+    public void addDropViewIndexStatement(String statement) {
+    	dropViewIndexStatements.addElement(statement);
+    }
+
+    public void addCreateIndexStatement(String statement) {
+    	createIndexStatements.addElement(statement);
+    }
+
+    public void addDropTriggerStatement(String statement) {
+    	dropTriggerStatements.addElement(statement);
+    }
+	
+    public void addCreateTriggerStatement(String statement) {
+    	createTriggerStatements.addElement(statement);
+    }
+	
+    public void addAlterTableDropConstraintStatement(String statement) {
+    	dropConstraintStatements.addElement(statement);
+    }
+
+    public void addAlterTableAddConstraintStatement(String statement) {
+    	addConstraintStatements.addElement(statement);
+    }
+	
+    public void addDropSchemaStatement(String statement) {
+    	dropSchemaStatements.addElement(statement);
+    }
+    
+   	//@bd00058820gs
+    public void addDropDatabaseStatement(String statement) {
+        dropDatabaseStatements.addElement(statement);
+    }    
+   	//@ed00058820gs
+	
+    public void addCreateSchemaStatement(String statement) {
+    	createSchemaStatements.addElement(statement);
+    }
+    
+   	//@bd00058820gs
+    public void addCreateDatabaseStatement(String statement) {
+        createDatabaseStatements.addElement(statement);
+    }    
+	//@ed00058820gs
+	    
+    public void addRevokeStatement(String statement) {
+        revokeStatements.addElement(statement);
+    }    
+	    
+    public void addGrantStatement(String statement) {
+        grantStatements.addElement(statement);
+    }    
+
+    public void addCreateRoleStatement(String statement) {
+    	createRoleStatements.addElement(statement);
+    }
+    
+    public void addCreateUserStatement(String statement) {
+    	createUserStatements.addElement(statement);
+    }
+    
+    public void addCreateGroupStatement(String statement) {
+    	createGroupStatements.addElement(statement);
+    }
+    public void addDropRoleStatement(String statement) {
+        dropRoleStatements.addElement(statement);
+    }  
+    public void addDropUserStatement(String statement) {
+        dropUserStatements.addElement(statement);
+    }  
+    public void addDropGroupStatement(String statement) {
+        dropGroupStatements.addElement(statement);
+    }  
+    
+	public String[] getStatements(){
+		Vector scriptVec = new Vector();
+		scriptVec.addAll(revokeStatements);
+		scriptVec.addAll(dropTriggerStatements);
+		scriptVec.addAll(dropRoutineStatements);
+		scriptVec.addAll(dropForeignKeyStatements);
+		scriptVec.addAll(dropConstraintStatements);
+		scriptVec.addAll(dropViewIndexStatements);
+		scriptVec.addAll(dropIndexStatements);
+		scriptVec.addAll(dropViewStatements);
+		scriptVec.addAll(backupTableStatements); // Data Preservation
+		scriptVec.addAll(dropTableStatements);
+		scriptVec.addAll(dropSequenceStatements);
+		scriptVec.addAll(dropUserDefinedTypeStatements);
+		scriptVec.addAll(dropSchemaStatements);
+        scriptVec.addAll(dropRoleStatements); 
+        scriptVec.addAll(dropUserStatements); 
+        scriptVec.addAll(dropGroupStatements); 
+        scriptVec.addAll(dropDatabaseStatements); //@d00058820gs
+        scriptVec.addAll(createDatabaseStatements); //@d00058820gs
+        scriptVec.addAll(createRoleStatements); 
+        scriptVec.addAll(createUserStatements); 
+        scriptVec.addAll(createGroupStatements); 
+		scriptVec.addAll(createSchemaStatements);
+		scriptVec.addAll(renameTableStatements);
+		scriptVec.addAll(renameColumnStatements);
+		scriptVec.addAll(createUserDefinedTypeStatements);
+		scriptVec.addAll(createSequenceStatements);
+		scriptVec.addAll(createTableStatements);
+		scriptVec.addAll(alterTableStatements);
+		scriptVec.addAll(alterTableDropColumnStatements);
+		scriptVec.addAll(alterTableAddColumnStatements);
+		scriptVec.addAll(reorgStatements);
+		scriptVec.addAll(populateTableStatements); // Data Preservation
+		scriptVec.addAll(dropBackupTableStatements); // Data Preservation
+		scriptVec.addAll(createIndexStatements);
+		scriptVec.addAll(addConstraintStatements);
+		scriptVec.addAll(addForeignKeyStatements);
+		scriptVec.addAll(createViewStatements);
+		scriptVec.addAll(createViewIndexStatements);
+		scriptVec.addAll(createRoutineStatements);
+		scriptVec.addAll(createTriggerStatements);
+		scriptVec.addAll(grantStatements);
+		
+		String[] scripts = new String[scriptVec.size()];
+		scriptVec.copyInto(scripts);
+		return scripts;
+	}
+
+    protected Vector revokeStatements                       = new Vector();
+    protected Vector dropRoutineStatements                  = new Vector();
+    protected Vector dropForeignKeyStatements               = new Vector();
+	protected Vector backupTableStatements                  = new Vector();  // Data Preservation
+	protected Vector populateTableStatements                = new Vector();  // Data Preservation
+	protected Vector dropBackupTableStatements				= new Vector();	 // Data Preservation
+    protected Vector dropTableStatements                    = new Vector();
+    protected Vector renameTableStatements                  = new Vector();
+    protected Vector renameColumnStatements                 = new Vector();
+    protected Vector dropViewStatements                     = new Vector();
+    protected Vector dropUserDefinedTypeStatements          = new Vector();
+    protected Vector dropSequenceStatements                 = new Vector();
+    protected Vector dropConstraintStatements               = new Vector();
+    protected Vector dropTriggerStatements                  = new Vector();
+    protected Vector dropIndexStatements                    = new Vector();
+    protected Vector dropViewIndexStatements                 = new Vector();
+    protected Vector dropDatabaseStatements                 = new Vector(); //@bd00058820gs
+    protected Vector dropSchemaStatements                   = new Vector();
+    protected Vector dropRoleStatements                     = new Vector();
+    protected Vector dropUserStatements                     = new Vector();
+    protected Vector dropGroupStatements                    = new Vector();
+    protected Vector createUserDefinedTypeStatements        = new Vector();
+    protected Vector createRoutineStatements                = new Vector();
+    protected Vector createTableStatements                  = new Vector();
+    protected Vector alterTableStatements                   = new Vector();
+    protected Vector alterTableDropColumnStatements         = new Vector();
+    protected Vector alterTableAddColumnStatements          = new Vector();
+    protected Vector reorgStatements                        = new Vector();
+    protected Vector createViewStatements                   = new Vector();
+    protected Vector createSequenceStatements               = new Vector();
+    protected Vector addForeignKeyStatements                = new Vector();
+    protected Vector createIndexStatements                  = new Vector();
+    protected Vector createViewIndexStatements                  = new Vector();
+    protected Vector createTriggerStatements                = new Vector();
+    protected Vector addConstraintStatements                = new Vector();
+    protected Vector createSchemaStatements                 = new Vector();
+    protected Vector createDatabaseStatements               = new Vector(); //@bd00058820gs
+    protected Vector grantStatements                        = new Vector(); 
+    protected Vector createRoleStatements                   = new Vector();
+    protected Vector createUserStatements                   = new Vector();
+    protected Vector createGroupStatements                  = new Vector();
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/ExtendDdlBuilder.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/ExtendDdlBuilder.java
new file mode 100644
index 0000000..21d92c5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/ExtendDdlBuilder.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.ddl;
+
+
+public interface ExtendDdlBuilder {
+	//	Returns a string to be added (with a checkbox) to the 'Generate DDL' wizard. When the checkbox is checked by the user the buildCreateStatement method will be subsequently called to retrieve OLAP DDL.
+	public String getOption();
+
+	//Returns a string that describes the option string returned by getOption. The string will be displayed as help for the option in the Generate DDL wizard.
+	public String getOptionDescription();
+
+    public String buildDropStatement(Object sqlobject,boolean quoteIdentifiers, boolean qualifyNames);
+    public String buildCreateStatement(Object sqlobject,boolean quoteIdentifiers, boolean qualifyNames);
+    public String buildCommentOnStatement(Object sqlobject,boolean quoteIdentifiers, boolean qualifyNames);
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/ModelValidationProvider.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/ModelValidationProvider.java
new file mode 100644
index 0000000..a1164ad
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/ModelValidationProvider.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.ddl;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+public interface ModelValidationProvider {
+	public boolean checkModel(SQLObject[] sqlObjects);
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/OlapDdlBuilder.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/OlapDdlBuilder.java
new file mode 100644
index 0000000..124fb65
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/OlapDdlBuilder.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.ddl;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+public interface OlapDdlBuilder {
+	
+	//	Returns a string to be added (with a checkbox) to the 'Generate DDL' wizard. When the checkbox is checked by the user the buildCreateStatement method will be subsequently called to retrieve OLAP DDL.
+	public String getOption();
+
+	//Returns a string that describes the option string returned by getOption. The string will be displayed as help for the option in the Generate DDL wizard.
+	public String getOptionDescription();
+
+	String [] buildCreateStatement(SQLObject[] objects,boolean quoteIdentifiers, boolean qualifyNames);
+	String [] buildDropStatement(SQLObject[] objects,boolean quoteIdentifiers, boolean qualifyNames);
+    //String [] buildCommentStatement(SQLObject[] objects,boolean quoteIdentifiers, boolean qualifyNames); //@d00058820gs
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/OrderingDdlScript.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/OrderingDdlScript.java
new file mode 100644
index 0000000..5af568f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/OrderingDdlScript.java
@@ -0,0 +1,123 @@
+/*******************************************************************************
+ * Copyright (c) 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.ddl;
+
+import java.util.Vector;
+
+import org.eclipse.datatools.enablement.ibm.util.CompoundStatementsMap;
+
+public abstract class OrderingDdlScript extends DdlScript {
+
+    public void addDropTableStatements(String statement,Vector<String> statements) {
+        this.orderedDropTableStatements.put(statement,statements);
+    }
+
+    public void addDropTableStatement(String statement) {
+    	addDropTableStatements(statement,null);
+    }
+
+    public void addCreateTableStatements(String statement,Vector<String> statements) {
+        this.orderedCreateTableStatements.put(statement,statements);
+    }
+
+    public void addCreateTableStatement(String statement) {
+    	addCreateTableStatements(statement,null);
+    }
+
+    public void addDropViewStatements(String statement,Vector<String> statements) {
+        this.orderedDropViewStatements.put(statement,statements);
+    }
+
+    public void addDropViewStatement(String statement) {
+    	addDropViewStatements(statement,null);
+    }
+
+    public void addCreateViewStatements(String statement,Vector<String> statements) {
+        this.orderedCreateViewStatements.put(statement,statements);
+    }
+
+    public void addCreateViewStatement(String statement) {
+    	addCreateViewStatements(statement,null);
+    }
+
+    public void addDropRoutineStatements(String statement,Vector<String> statements) {
+        this.orderedDropRoutineStatements.put(statement,statements);
+    }
+
+    public void addDropRoutineStatement(String statement) {
+    	addDropRoutineStatements(statement,null);
+    }
+
+    public void addCreateRoutineStatements(String statement,Vector<String> statements) {
+        this.orderedCreateRoutineStatements.put(statement,statements);
+    }
+
+    public void addCreateRoutineStatement(String statement) {
+    	addCreateRoutineStatements(statement,null);
+    }
+
+    public void addAlterTableDropConstraintStatements(String statement,Vector<String> statements) {
+        this.orderedDropConstraintStatements.put(statement,statements);
+    }
+
+    public void addAlterTableDropConstraintStatement(String statement) {
+    	addAlterTableDropConstraintStatements(statement,null);
+    }
+
+    public void addAlterTableAddConstraintStatements(String statement,Vector<String> statements) {
+        this.orderedCreateConstraintStatements.put(statement,statements);
+    }
+
+    public void addAlterTableAddConstraintStatement(String statement) {
+    	addAlterTableAddConstraintStatements(statement,null);
+    }
+
+    public void addAlterTableDropForeignKeyStatements(String statement,Vector<String> statements) {
+        this.orderedDropForeignKeyStatements.put(statement,statements);
+    }
+
+    public void addAlterTableDropForeignKeyStatement(String statement) {
+    	addAlterTableDropForeignKeyStatements(statement,null);
+    }
+
+    public void addAlterTableAddForeignKeyStatements(String statement,Vector<String> statements) {
+        this.orderedCreateForeignKeyStatements.put(statement,statements);
+    }
+
+    public void addAlterTableAddForeignKeyStatement(String statement) {
+    	addAlterTableAddForeignKeyStatements(statement,null);
+    }
+
+    public Vector<String> combineTemplateStatements(String prolog,String statement,String postlog) {
+		Vector<String> ret = null;
+    	if (prolog != null || postlog != null) {
+    		ret = new Vector<String>();
+    		if (prolog != null) ret.add(prolog);
+    		ret.add(statement);
+    		if (postlog != null) ret.add(postlog);
+    	}
+    	return ret;
+    }
+    
+    abstract public String[] getStatements();
+
+    protected CompoundStatementsMap orderedDropTableStatements    = new CompoundStatementsMap();
+    protected CompoundStatementsMap orderedCreateTableStatements  = new CompoundStatementsMap();
+    protected CompoundStatementsMap orderedDropViewStatements    = new CompoundStatementsMap();
+    protected CompoundStatementsMap orderedCreateViewStatements  = new CompoundStatementsMap();
+    protected CompoundStatementsMap orderedDropRoutineStatements    = new CompoundStatementsMap();
+    protected CompoundStatementsMap orderedCreateRoutineStatements  = new CompoundStatementsMap();
+    protected CompoundStatementsMap orderedDropConstraintStatements    = new CompoundStatementsMap();
+    protected CompoundStatementsMap orderedCreateConstraintStatements  = new CompoundStatementsMap();
+    protected CompoundStatementsMap orderedDropForeignKeyStatements    = new CompoundStatementsMap();
+    protected CompoundStatementsMap orderedCreateForeignKeyStatements  = new CompoundStatementsMap();
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/PreferenceConstants.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/PreferenceConstants.java
new file mode 100644
index 0000000..f3425ae
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/PreferenceConstants.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.ddl;
+
+/**
+ * @author wliu
+ *
+ * To change the template for this generated type comment go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+public class PreferenceConstants {
+	
+	//codetemplate
+	public static final String CODETEMPLATE_APPLY_CONTEXT_KEY ="codetemplate_apply_context";
+	public static final String CODETEMPLATE_TABLE_PATTERN_KEY ="codetemplate_table_pattern";
+	public static final String CODETEMPLATE_ROUTINE_PATTERN_KEY ="codetemplate_routine_pattern";
+	public static final String CODETEMPLATE_VIEW_PATTERN_KEY ="codetemplate_view_pattern";
+	public static final String CODETEMPLATE_CONSTRAINT_PATTERN_KEY ="codetemplate_constraint_pattern";
+		
+	public static final String PREF_GENERATE_DDL_OPTION = "generateDDLOption";
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/RoutineDdlBuilder.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/RoutineDdlBuilder.java
new file mode 100644
index 0000000..d9fd79a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/RoutineDdlBuilder.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.ddl;
+
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+
+public interface RoutineDdlBuilder {
+    public String buildDropRoutineStatement(Routine routine,boolean quoteIdentifiers, boolean qualifyNames);
+    public String buildCreateRoutineStatement(Routine routine,boolean quoteIdentifiers, boolean qualifyNames);
+    public String buildCommentOnStatement(Routine routine,boolean quoteIdentifiers, boolean qualifyNames);
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/TypedElementLogicalDomainProvider.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/TypedElementLogicalDomainProvider.java
new file mode 100644
index 0000000..b9a085f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/ddl/TypedElementLogicalDomainProvider.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.ddl;
+
+import org.eclipse.datatools.modelbase.sql.schema.TypedElement;
+
+public interface TypedElementLogicalDomainProvider {
+
+	public boolean hasDomain(TypedElement typeElement);
+	public String getDomainBaseType(TypedElement typeElement);
+	public String getCCSID(TypedElement typeElement);
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/AccessControlUtilities.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/AccessControlUtilities.java
new file mode 100644
index 0000000..357c075
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/AccessControlUtilities.java
@@ -0,0 +1,243 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.util.ArrayList;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentService;
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentServiceImpl;
+import org.eclipse.datatools.enablement.ibm.IBMPluginActivator;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.AuthorizationIdentifier;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Privilege;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.RoleAuthorization;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.SQLAccessControlPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.ENamedElement;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EcorePackage;
+
+public class AccessControlUtilities {
+
+	public static final String AUTH_ID_TYPE_PUBLIC_TEXT = "(PUBLIC)"; //$NON-NLS-1$
+	public static final String AUTH_ID_PUBLIC_TEXT = "PUBLIC"; //$NON-NLS-1$
+
+	protected static boolean asClauseRequested = false;
+	protected static boolean genSysGrantedRequested = false;
+	protected String product;
+	protected String version;
+	
+	public static boolean isSystemGrantedPrivilege(Privilege privilege) {
+		EAnnotation eAnnotation = privilege.getEAnnotation(IBMPluginActivator.PRIVILEGE_PROPERTY);
+		if (eAnnotation != null) {
+			String detail = (String) eAnnotation.getDetails().get(IBMPluginActivator.PRIVILEGE_SYSTEM_GRANT);
+			if (detail != null) return new Boolean(detail).booleanValue();
+		}
+		ContainmentService contServ=IBMPluginActivator.getInstance().getContainmentService();
+		EObject db=privilege.getObject();
+		while (!(db instanceof Database) && null != contServ.getContainer(db)) db=contServ.getContainer(db);
+		if (db instanceof Database && ((Database)db).getVendor().equalsIgnoreCase("DB2 UDB")) //$NON-NLS-1$
+		{
+			AuthorizationIdentifier grantor=privilege.getGrantor();
+			if (null != grantor)
+			{
+				String grantorName=grantor.getName();
+				if (null != grantorName && grantorName.equalsIgnoreCase("SYSIBM")) return true; //$NON-NLS-1$
+			}
+		}
+		return false;
+	}
+
+	public static boolean isDDLSuppressable(Privilege privilege) {
+		return (isSystemGrantedPrivilege(privilege) && 
+				!isGenSysGrantedRequested());
+	}
+	
+	public boolean isEditable(Privilege priv) {
+		return !isSystemGrantedPrivilege(priv);
+	}
+	
+	public boolean isEditable(EClass eClazz,String action) {
+		return true;
+	}
+
+	public boolean isRoleOptionGrant() {
+		return true;
+	}
+	
+	public boolean isGrantableEditable(Privilege priv) {
+		return (supportsGrantable(priv)
+				&& isEditable(priv)
+				&& authIdSupportsGrantable(priv.getGrantee()));
+	}
+
+	public boolean supportsGrantable(RoleAuthorization roleAuth) {
+		return true;
+	}
+
+	public boolean canRoleAdminRole() {
+		return true;
+	}
+	
+	public boolean authIdSupportsGrantable(AuthorizationIdentifier authId) {
+		return true;
+	}
+
+	public boolean authIdSupportsGrantable(EClass eClazz) {
+		return true;
+	}
+
+	public boolean supportsGrantable(Privilege privilege) {
+    	return true;
+	}
+	
+	public boolean supportsGrantable(EClass eClazz,String action) {
+		return true;
+	}
+
+	public static boolean isAsClauseRequested() {
+		return asClauseRequested;
+	}
+	
+	public static void setAsClauseRequested(boolean useAsClause) {
+		asClauseRequested = useAsClause;
+	}
+	
+	public static boolean isGenSysGrantedRequested() {
+		return genSysGrantedRequested;
+	}
+	
+	public static void setGenSysGrantedRequested(boolean genSysGranted) {
+		genSysGrantedRequested = genSysGranted;
+	}
+	
+	public ArrayList getPublicAuthIds() {
+		ArrayList list = new ArrayList();
+		list.add(AUTH_ID_PUBLIC_TEXT);
+		return list;
+	}
+	
+	public boolean isPublicAuthId(String id) {
+		if (id == null) return false;
+		ArrayList list = getPublicAuthIds();
+		return list.contains(id);
+	}
+	
+	public EClass getPublicEClass() {
+		return SQLAccessControlPackage.eINSTANCE.getUser();
+	}
+	
+	public Object[] getChildren(Database database,SQLObject parentObject,EClass eClass) {
+		return null;
+	}
+	
+	public boolean isValidGranteePrivilegedObjectPair(EClass granteeClass,EClass privilegedObjectClass) {
+		return true;
+	}
+	
+	public static boolean match(Privilege e1, Privilege e2) {
+	    if (e1 == null || e2 == null) return false;
+	    // Check for match of grantable
+	    if (e1.isGrantable() != e2.isGrantable()) return false;
+	    // Check for match of privilege action
+	    String a1 = e1.getAction();
+	    if (a1 == null || !a1.equals(e2.getAction())) return false;
+	    // Check for match of SQLObject on which privilege granted
+	    SQLObject o1 = e1.getObject();
+	    SQLObject o2 = e2.getObject();
+	    if (!matchSQLObjects(o1, o2)) return false;
+	     
+	    // Check for match of Authorization Id to which privilege granted
+	    AuthorizationIdentifier g1 = e1.getGrantee();
+	    AuthorizationIdentifier g2 = e2.getGrantee();
+	    if (g1 == null || g2 == null) return false;
+	    if (g1.eClass() != g2.eClass()) return false;
+	    String n1 = g1.getName();
+	    if (n1 == null || !n1.equals(g2.getName())) return false;
+	    return true;	    	
+	}
+
+	private static boolean matchSQLObjects(SQLObject o1, SQLObject o2) {
+		if (o1 == null || o2 == null)
+			return false;
+		if (o1.eClass() != o2.eClass())
+			return false;
+		String n1 = o1.getName();
+		if (n1 == null || !n1.equals(o2.getName()))
+			return false;
+		// The names match. Now check the qualifiers.
+		ENamedElement c1 = getContainer(o1);
+		ENamedElement c2 = getContainer(o2);
+		if (c1 != null && c2 != null) {
+			if (c1.getName() != null && c1.getName().equals(c2.getName())) {
+				return true;
+			} else {
+				return false;
+			}
+		} else if (c1 == null && c2 != null || c1 != null && c2 == null) {
+			return false;
+		} else {
+			return true;
+		}
+	}
+	
+	/**
+	 * Get the container that can be treated as the qualifier of the input object. 
+	 * @param o The input object
+	 * @return The container of the input object or null.
+	 */
+    private static ENamedElement getContainer(SQLObject o) {
+		EObject c1 = ContainmentServiceImpl.INSTANCE.getContainer(o);
+		if (c1 != null) {
+			if (SQLSchemaPackage.eINSTANCE.getSchema().isSuperTypeOf(
+					c1.eClass()))
+				return (Schema) c1;
+			if (EcorePackage.eINSTANCE.getENamedElement().isSuperTypeOf(
+					c1.eClass())
+					&& "ZSeriesDatabaseInstance".equals(c1.eClass().getName())) {
+				// zSeries table space is contained in ZSeriesDatabaseInstance
+				return (ENamedElement) c1;
+			}
+			EObject c2 = ContainmentServiceImpl.INSTANCE.getContainer(c1);
+			if (c2 != null) {
+				if (SQLSchemaPackage.eINSTANCE.getSchema().isSuperTypeOf(
+						c2.eClass())) {
+					// For example, index is contained in table which is
+					// contained in schema.
+					return (Schema) c2;
+				}
+			}
+		}
+		return null;
+	}
+
+	public String getSQLObjectTreeText(Object object) {
+       	return ((SQLObject) object).getName(); 
+    }
+
+	public boolean isGrantableSupportedForPublic() {
+		return true;
+	}
+	
+	/**
+	 * @param superClass 
+	 * @param objectClass 
+	 * @return whether superClass is a valid superClass of objectClass.
+	 */
+	public boolean isValidSupertype( EClass superClass, EClass objectClass )
+	{
+		return superClass.isSuperTypeOf( objectClass );
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ClientConfiguration.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ClientConfiguration.java
new file mode 100644
index 0000000..4878c34
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ClientConfiguration.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+public class ClientConfiguration 
+{
+	public static final String OLE = "OLE";
+	public static final String DSE = "DSE";
+	public static final String PROPERTIES_VIEW = "PROPERTIES_VIEW";
+	public static final String COMPARE_N_SYNC = "COMPARE_N_SYNC";
+	public static final String DEFAULT = "DEFAULT";
+	public static final String CLONE_UTIL = "CLONE_UTIL";
+	public static final String PKEY = "PKEY";
+	public static final String UOM_MODEL_LOADER = "UOM_MODEL_LOADER";
+	
+	private String clientConfiguration;
+	
+	public ClientConfiguration(String clientConfiguration)
+	{
+		this.clientConfiguration = clientConfiguration;
+	}
+	
+	public String getClientConfiguration()
+	{
+		return clientConfiguration;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ClientStrategyResolver.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ClientStrategyResolver.java
new file mode 100644
index 0000000..bf9db0f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ClientStrategyResolver.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import org.eclipse.datatools.enablement.ibm.catalog.util.ICatalogQuery;
+import org.eclipse.datatools.enablement.ibm.util.IQueryMap.QueryType;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class ClientStrategyResolver
+{
+	private static ClientStrategyResolver resolver;
+	
+	private ClientStrategyResolver()
+	{
+	}
+	
+	public static synchronized ClientStrategyResolver getInstance()
+	{
+		if (resolver == null) {
+			resolver = new ClientStrategyResolver();
+		}
+		return resolver;
+	}
+	
+	@SuppressWarnings("unchecked")
+	public EList getObjects(
+			EObject object, EStructuralFeature feature, ClientConfiguration configuration) 
+			throws ClientStrategyResolverException
+	{
+		Object result = getObject(object, feature, configuration);
+		
+		if(result instanceof EList) {
+			return (EList)result;
+		}
+		
+		throw new ClientStrategyResolverException("A list was expected, but only one object was returned");
+	}
+	
+	public Object getObject(EObject object, EStructuralFeature feature, ClientConfiguration configuration)
+	{
+		IClientStrategy strategy = 
+			ClientStrategyService.getInstance().getClientStrategy(object, configuration);
+		if (strategy != null) {
+			ICatalogQuery[] queries = strategy.getCatalogQueries(object, feature);		
+			realizeQueries(object, queries);
+		}
+		
+		return object.eGet(feature);
+	}
+
+	public void loadObject(EObject object, QueryType queryType, ClientConfiguration configuration)
+	{
+		IClientStrategy strategy = 
+			ClientStrategyService.getInstance().getClientStrategy(object, configuration);
+		if (strategy == null) {
+			return;
+		}
+		ICatalogQuery[] queries = strategy.getCatalogQueries(object, queryType);
+		
+		realizeQueries(object, queries);
+	}
+
+	private void realizeQueries(EObject object, ICatalogQuery[] queries) 
+	{
+		if (queries != null && queries.length > 0) {
+			QueryExecutionEngine.realizeQueries(object, queries);
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ClientStrategyResolverException.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ClientStrategyResolverException.java
new file mode 100644
index 0000000..17c6ad3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ClientStrategyResolverException.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+public class ClientStrategyResolverException extends Exception
+{
+	private static final long serialVersionUID = 1021392743395166363L;
+
+	public ClientStrategyResolverException(String message)
+	{
+		super(message);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ClientStrategyService.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ClientStrategyService.java
new file mode 100644
index 0000000..04463fd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ClientStrategyService.java
@@ -0,0 +1,119 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.util.HashMap;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.emf.ecore.EObject;
+
+public class ClientStrategyService 
+{
+	private final static String EXTENSION_POINT_ID = "com.ibm.datatools.core.loadStrategy";
+	
+	private final static String STRATEGY = "strategy";
+	private final static String CLIENT = "clientDefinition";
+	private final static String VENDOR = "vendor";
+	private final static String DEFAULT_STRATEGY = "defaultStrategy";
+	
+	private static ClientStrategyService service;
+	
+	private final static int STRATEGY_MAP_SIZE = 16;
+	private final static HashMap<String, IClientStrategy> strategies = new HashMap<String, IClientStrategy>(STRATEGY_MAP_SIZE);
+		
+	private ClientStrategyService()
+	{
+	}
+	
+	public static synchronized ClientStrategyService getInstance()
+	{
+		if (service == null) {
+			service = new ClientStrategyService();
+		}
+		return service;
+	}
+	
+	public IClientStrategy getClientStrategy(EObject object, ClientConfiguration configuration)
+	{
+		String vendor = "";
+		if (object instanceof ICatalogObject && ((ICatalogObject)object).getCatalogDatabase() != null) {
+			vendor = ((ICatalogObject)object).getCatalogDatabase().getVendor();
+		} else {
+			return null;
+		}
+		String client = "";
+		if (configuration != null) {
+			client = configuration.getClientConfiguration();
+		}
+		
+		String vendorClientKey = generateVendorClientKey(vendor, client);
+		IClientStrategy strategy = strategies.get(vendorClientKey);
+		
+		if (strategy == null && !strategies.containsKey(vendorClientKey)) {
+			strategy = lookupStrategyInRegistry(vendor, client);
+		}
+			
+		return strategy;
+	}
+	
+	private IClientStrategy lookupStrategyInRegistry(String vendor, String client)
+	{
+		String vendorClientKey = generateVendorClientKey(vendor, client);
+		
+		IExtensionPoint extensionPoint = 
+			Platform.getExtensionRegistry().getExtensionPoint(EXTENSION_POINT_ID);
+		
+		IExtension[] extensions = extensionPoint.getExtensions();
+		
+		for (IExtension extension : extensions) {
+			IConfigurationElement[] elements = extension.getConfigurationElements();
+			
+			for (IConfigurationElement element : elements) {
+				if (element.getName().equals(STRATEGY)) {
+					try {
+						String clientDefinitionAttribute = element.getAttribute(CLIENT);
+						String vendorAttribute = element.getAttribute(VENDOR);
+						if (vendorAttribute != null &&
+							clientDefinitionAttribute != null &&
+							vendorAttribute.equals(vendor) &&
+							clientDefinitionAttribute.equals(client)) {
+							
+							IClientStrategy strategy = null;
+							if (element.getAttribute(DEFAULT_STRATEGY) != null) {
+								strategy = (IClientStrategy) element.createExecutableExtension(DEFAULT_STRATEGY);
+								strategies.put(vendorClientKey, strategy);
+							}
+							// version needs to be taken into account too if provided
+							// override strategy needs to be handled here too...
+							return strategy;
+						}
+					} catch (CoreException e) {
+						e.printStackTrace();
+					}
+				}
+			}
+		}
+		// if strategy was not found, it does not exist.
+		// no need to look for it again
+		strategies.put(vendorClientKey, null);
+		return null;
+	}
+	
+	private String generateVendorClientKey(String vendor, String client)
+	{
+		return vendor + "::" + client;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ClientUtil.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ClientUtil.java
new file mode 100644
index 0000000..69e7a1b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ClientUtil.java
@@ -0,0 +1,2130 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.HashMap;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Preferences;
+import org.eclipse.datatools.enablement.ibm.IBMPluginActivator;
+
+/**
+ * Wraps native methods.
+ * @author Thomas Sharp
+ */
+public class ClientUtil
+{
+   /** Flag to turn on prints for debug. */
+   public static final boolean DEBUG = false;
+
+   /** Key for an arbitrary registry path and key. */
+   public static String REGISTRYVALUE = "getRegistryValue";
+   /** Key for DB2 path. */
+   public static String DB2PATH = "getDB2Path";
+   /** Key for JDK version. */
+   public static String JDKLEVEL = "getJdkLevel";
+   /** Key for the Oracle path. */
+   public static String ORACLEPATH = "getOraclePath";
+   /** Key for the DB2 client version, release, and modification in the form 08022. */
+   public static String DB2CLIENTLEVEL = "getDB2ClientLevel";
+   /** Key for the DB2 client version. */
+   public static String DB2CLIENTVERSION = "getDB2ClientVersion";
+   /** Key for the DB2 client release. */
+   public static String DB2CLIENTRELEASE = "getDB2ClientRelease";
+   /** Key for the DB2 client modification level. */
+   public static String DB2CLIENTMODIFICATION = "getDB2ClientModification";
+   /** Key for the Visual Explain path. */
+   public static String VEPATH = "getVEPath";
+   /** Key for the Visual Explain version.release.modification. */
+   public static String VELEVEL = "getVELevel";
+   /** Key for the Visual Explain version. */
+   public static String VEVERSION = "getVEVersion";
+   /** Key for the Visual Explain release. */
+   public static String VERELEASE = "getVERelease";
+   /** Key for the Visual Explain modification level. */
+   public static String VEMODIFICATION = "getVEModification";
+   /** Key for the alias count. The default value for this method is 0. */
+   public static String ALIASCOUNT = "getAliasCount";
+   /** Key for the aliases and comments. No default value exists for this method. */
+   public static String ALIASES = "getAliases";
+   /** Key for the aliases, hosts, dbnames, and ports. No default value exists for this method. */
+   public static String HOSTINFO = "getHostInfo";
+   /**
+    * Key for getting an environment variable.
+    * The full key for an override of a value is getEnv(varname),
+    * but the argument is specified with the argument property
+    * of the defaultValue or actualValue tag.
+    */
+   public static String ENVVAR = "getEnv";
+
+   /** Table of defaults. */
+   protected static HashMap defaultValues;
+   /** Table of implementation methods. */
+   protected static HashMap implMethods;
+   /** Implementations of IServicePrompt$promptValue methods. */
+   protected static HashMap promptMethods;
+   /** Table of actual values. */
+   protected static HashMap actualValues;
+
+   private static final String PATH_SEPARATOR = java.io.File.pathSeparator;
+
+   // Static section:
+   static
+   {
+      // Initialize internal default values
+      initDefaults();
+      // Override with ExternalService/defaultValue contributions
+//<bgp      initOverrides();
+//		// Test whether we have a local DB2 with version > 7 installed:
+//		if (!hasDB2PathImpl() && getDB2ClientVersion() < 8)
+//		{
+//			DB2Util.setTryNative(false);
+//bgp>		}
+   }
+
+//<bgp   /**
+//    * Registers a base name for the JNI library that implements OSUtil native functions.
+//    * @param lib A base name for the JNI library that implements OSUtil native functions.
+//    */
+//   public static synchronized void setCutilLibrary(String lib)
+//   {
+//      OSUtil.setOSUtilLibrary(lib);
+//   }
+//
+//   /**
+//    * @return The base name for the JNI library that implements OSUtil native functions.
+//    */
+//   public static String getCutilLibrary()
+//   {
+//      return OSUtil.getOSUtilLibrary();
+//   }
+//
+//   /**
+//    * Registers a base name for the JNI library that implements DB2Util native functions.
+//    * @param lib A base name for the JNI library that implements DB2Util native functions.
+//    */
+//   public static synchronized void setDB2UtilLibrary(String lib)
+//   {
+//      DB2Util.setDB2UtilLibrary(lib);
+//   }
+//
+//   /**
+//    * @return The base name for the JNI library that implements DB2Util native functions.
+//    */
+//   public static String getDB2UtilLibrary()
+//   {
+//      return DB2Util.getDB2UtilLibrary();
+//   }
+
+   /**
+    * Initializes default values.
+    */
+   protected static void initDefaults()
+   {
+      // Actual values (cache of the result during the first call)
+      actualValues = new HashMap(37);
+      // Default values
+      defaultValues = new HashMap(37);
+      // Implementation methods to be used instead of protected JNI methods
+      implMethods = new HashMap(37);
+      // Implementations of IServicePrompt$promptValue methods.
+      promptMethods = new HashMap(37);
+      // DB2Path, OraclePath
+      //if (System.getProperty("os.name").indexOf("Win") > -1)
+      //{
+      defaultValues.put(DB2PATH, "null");
+//bgp      defaultValues.put(ORACLEPATH, "null");
+//bgp      defaultValues.put(VEPATH, "null");
+      //}
+      //else
+      //{
+      //   defaultValues.put(DB2PATH, "null");
+      //   defaultValues.put(ORACLEPATH, "null");
+      //   defaultValues.put(VEPATH, "null");
+      //}
+//<bgp      defaultValues.put(VELEVEL, "1.0.0");
+//      defaultValues.put(VEVERSION, "1");
+//      defaultValues.put(VERELEASE, "0");
+//bgp>      defaultValues.put(VEMODIFICATION, "0");
+   }
+
+//   /**
+//    * Overrides internal default values and implementations with
+//    * externalService/defaultValue and implementation contributions.
+//    */
+//   protected static void initOverrides()
+//   {
+//      IExtensionRegistry reg = Platform.getExtensionRegistry();
+//      if (reg != null) {
+//	      IConfigurationElement[] domainConfigs = reg.getConfigurationElementsFor(
+//	               "com.ibm.datatools.externalservices", "externalServices");
+//	      IConfigurationElement config;
+//	      //ConfigurationProperty[] properties;
+//	      String ename, mname, pvalue, iclass, imethod, argval;
+//	      for (int e = 0; e < domainConfigs.length; e++)
+//	      {
+//	         ename = domainConfigs[e].getName();
+//	         config = domainConfigs[e];
+//	         mname = config.getAttribute("methodName");
+//	         if (mname != null)
+//	         {
+//	            mname = mapMethodName(mname);
+//	            if (ename.equalsIgnoreCase("defaultValue"))
+//	            {
+//	               pvalue = config.getAttribute("value");
+//	               if (pvalue != null && pvalue.length() > 0)
+//	               {
+//	                  if (mname.equals(ALIASCOUNT))
+//	                  {
+//	                     defaultValues.put(ALIASCOUNT, Integer.getInteger(pvalue));
+//	                  }
+//	                  else if (mname.equals(ENVVAR))
+//	                  {
+//	                     argval = config.getAttribute("argument");
+//	                     defaultValues.put("getEnv(" + argval + ")", pvalue);
+//	                  }
+//	                  else
+//	                  {
+//	                     defaultValues.put(mname, pvalue);
+//	                  }
+//	               }
+//	            }
+//	            else if (ename.equalsIgnoreCase("actualValue"))
+//	            {
+//	               pvalue = config.getAttribute("value");
+//	               if (pvalue != null && pvalue.length() > 0)
+//	               {
+//	                  if (mname.equals(ALIASCOUNT))
+//	                  {
+//	                     actualValues.put(ALIASCOUNT, Integer.getInteger(pvalue));
+//	                  }
+//	                  else if (mname.equals(ENVVAR))
+//	                  {
+//	                     argval = config.getAttribute("argument");
+//	                     actualValues.put("getEnv(" + argval + ")", pvalue);
+//	                  }
+//	                  else
+//	                  {
+//	                     actualValues.put(mname, pvalue);
+//	                  }
+//	               }
+//	            }
+//	            else if (ename.equalsIgnoreCase("implementation"))
+//	            {
+//	               iclass = config.getAttribute("implClass");
+//	               imethod = config.getAttribute("implMethod");
+//	               if (iclass != null && imethod != null)
+//	               {
+//	                  Method m = getMethod(config, iclass, imethod);
+//	                  if (m != null)
+//	                  {
+//	                     implMethods.put(mname, m);
+//	                  }
+//	               }
+//	            }
+//	            else if (ename.equalsIgnoreCase("prompt"))
+//	            {
+//	               pvalue = config.getAttribute("enable");
+//	               if (pvalue != null && pvalue.equalsIgnoreCase("true"))
+//	               {
+//	                  iclass = config.getAttribute("servicePrompt");
+//	                  if (iclass != null)
+//	                  {
+//	                     Object[] cm = getClassAndMethod(config, iclass, "promptValue", new Class[]{String.class, Object.class});
+//	                     if (cm != null)
+//	                     {
+//	                        promptMethods.put(mname, cm);
+//	                     }
+//	                  }
+//	               }
+//	               else
+//	               {
+//	                  promptMethods.remove(mname);
+//	               }
+//	            }
+//	         }
+//	         else if (ename.equalsIgnoreCase("oslibrary"))
+//	         {
+//	            pvalue = domainConfigs[e].getAttribute("basename");
+//	            setCutilLibrary(pvalue);
+//	         }
+//	         else if (ename.equalsIgnoreCase("db2library"))
+//	         {
+//	            pvalue = domainConfigs[e].getAttribute("basename");
+//	            setDB2UtilLibrary(pvalue);
+//	         }
+//	      }
+//      }
+//   }
+//
+//   /**
+//    * Given a methodName value from an extension,
+//    * returns our method key.
+//    * @param mname The methodName attribute from a contribution.
+//    * @return The value of our static final String for the method.
+//    */
+//   protected static String mapMethodName(String mname)
+//   {
+//      String key = "DEFAULT";
+//      if (mname.equalsIgnoreCase(REGISTRYVALUE))
+//         key = REGISTRYVALUE;
+//      else if (mname.equalsIgnoreCase(DB2PATH))
+//         key = DB2PATH;
+//      else if (mname.equalsIgnoreCase(JDKLEVEL))
+//         key = JDKLEVEL;
+//      else if (mname.equalsIgnoreCase(ORACLEPATH))
+//         key = ORACLEPATH;
+//      else if (mname.equalsIgnoreCase(VEPATH))
+//         key = VEPATH;
+//      else if (mname.equalsIgnoreCase(VELEVEL))
+//         key = VELEVEL;
+//      else if (mname.equalsIgnoreCase(VEVERSION))
+//         key = VEVERSION;
+//      else if (mname.equalsIgnoreCase(VERELEASE))
+//         key = VERELEASE;
+//      else if (mname.equalsIgnoreCase(VEMODIFICATION))
+//         key = VEMODIFICATION;
+//      else if (mname.equalsIgnoreCase(ALIASCOUNT))
+//         key = ALIASCOUNT;
+//      else if (mname.equalsIgnoreCase(ENVVAR))
+//         key = ENVVAR;
+//      return key;
+//bgp>   }
+   
+   /**
+    * Gets the default value for a method.
+    * @param methodname The name of the method whose default value we want.
+    * @return The default value of the method.
+    */
+   public static Object getDefault(String methodname)
+   {
+      return defaultValues.get(methodname);
+   }
+
+//<bgp   /**
+//    * Sets the default value for a method.
+//    * @param methodname The name of the method whose default value we want.
+//    * If the method requires an argument, give it in parentheses,
+//    * such as "getEnv(HOME)."
+//    * @param value The default value of the method, or null.
+//    * If the value is null, the entry is cleared from the table.
+//    */
+//   public static synchronized void setDefault(String methodname, String value)
+//   {
+//      if (value == null)
+//         defaultValues.remove(methodname);
+//      else
+//         defaultValues.put(methodname, value);
+//   }
+//
+//   /**
+//    * Sets the actual value for a method.
+//    * @param methodname The name of the method whose default value we want.
+//    * If the method requires an argument, give it in parentheses,
+//    * such as "getEnv(HOME)."
+//    * @param value The actual value of the method, or null.
+//    * If the value is null, the entry is cleared from the table.
+//    */
+//   public static synchronized void setActualValue(String methodname, String value)
+//   {
+//      if (value == null)
+//         actualValues.remove(methodname);
+//      else
+//         actualValues.put(methodname, value);
+//   }
+//
+//   /**
+//    * Resets the cached actual value for a method.
+//    * @param methodname The name of the method whose default value we want.
+//    */
+//   public static synchronized void clearCache(String methodname)
+//   {
+//      actualValues.remove(methodname);
+//   }
+//
+//
+//   /**
+//    * Gets the Method to implement the named method.
+//    * @param methodname The name of the method whose default value we want.
+//    * @return The implementation Method, or null if it is not set
+//    * using setImplementation or an externalService/implementation contribution.
+//    * The default implementation method in this class is not returned.
+//    */
+//   public static Method getImplementation(String methodname)
+//   {
+//      return (Method)implMethods.get(methodname);
+//   }
+//
+//   /**
+//    * Sets the implementation Method.
+//    * @param methodname The name of the method whose default value we want.
+//    * @param method The implementation Method.
+//    */
+//   public static synchronized void setImplementation(String methodname, Method method)
+//   {
+//      implMethods.put(methodname, method);
+//   }
+//
+//   /**
+//    * Gets a method in a class.
+//    *
+//    * @param config
+//    *            The ConfigurationElement for the contribution to our extension point.
+//    * @param classname
+//    *            The class with the method to call.
+//    * @param methodname
+//    *            The method we want to call.
+//    * @return The Method for methodname in the instance of class classname.
+//    */
+//   protected static Method getMethod(IConfigurationElement config, String classname, String methodname)
+//   {
+//      return getMethod(config, classname, methodname, null);
+//   }
+//
+//   /**
+//    * Gets a method in a class.
+//    *
+//    * @param config
+//    *            The ConfigurationElement for the contribution to our extension point.
+//    * @param classname
+//    *            The class with the method to call.
+//    * @param methodname
+//    *            The method we want to call.
+//    * @param types
+//    *            An array of Class describing the types of the arguments.
+//    * @return The Method for methodname in the instance of class classname.
+//    */
+//   protected static Method getMethod(IConfigurationElement config, String classname, String methodname, Class[] types)
+//   {
+//      Object[] candm = getClassAndMethod(config, classname, methodname, types);
+//      return (candm == null) ? null : (Method)candm[1];
+//   }
+//   /**
+//    * Gets a method in a class.
+//    *
+//    * @param config
+//    *            The ConfigurationElement for the contribution to our extension point.
+//    * @param classname
+//    *            The class with the method to call.
+//    * @param methodname
+//    *            The method we want to call.
+//    * @param types
+//    *            An array of Class describing the types of the arguments.
+//    * @return An array whose first element is the Class object and whose second is the Method.
+//    */
+//   protected static Object[] getClassAndMethod(IConfigurationElement config, String classname, String methodname, Class[] types)
+//   {
+//      Class cclass = null;
+//      Method method = null;
+//      try
+//      {
+//         cclass = ExternalServicesPlugin.getDefault().getBundle().loadClass(classname);
+//      }
+//      catch (ClassNotFoundException cnfe)
+//      {
+//         // createExecutableExtension(InternalPlatform.getDefault().getBundle(getDeclaringExtension().getNamespace()),
+//         //    pluginName, className, initData, this, attributeName);
+//         String namespace = config.getDeclaringExtension().getNamespaceIdentifier();
+//         Bundle pbundle = Platform.getBundle(namespace);
+//         //String id = pbundle.getSymbolicName();
+//         try {
+//            cclass = pbundle.loadClass(classname);
+//         } catch (Exception e1) {
+//            cclass = null;
+//         } catch (LinkageError e) {
+//            cclass = null;
+//            if (DEBUG) System.err.println("ClientUtil.getMethod ClassNotFoundException: "
+//                     + cnfe.getMessage());
+//         }
+//      }
+//      if (cclass != null)
+//      {
+//         try
+//         {
+//            method = cclass.getMethod(methodname, types);
+//         }
+//         catch (NoSuchMethodException nsme)
+//         {
+//            if (DEBUG) System.err
+//            .println("ClientUtil.getMethod NoSuchMethodException: "
+//                     + nsme.getMessage());
+//         }
+//      }
+//      return new Object[]{cclass, method};
+//bgp>   }
+
+   /**
+    * Invokes a static method with no argument and returns a String value.
+    * @param method A Method object representing a static method with no parameter
+    * that returns a String.
+    * @return The value returned by the method, or null.
+    */
+   protected static Object callMethod(Method method)
+   {
+      return callMethod(method, null, null);
+   }
+   
+   /**
+    * Invokes a static method with no argument and returns a String value.
+    * @param method A Method object representing a static method with no parameter
+    * that returns a String.
+    * @param instance Null for a static method, an instance otherwize.
+    * @param args An array of values for input to the method.
+    * @return The value returned by the method, or null.
+    */
+   protected static Object callMethod(Method method, Object instance, Object[] args)
+   {
+      Object rv = null;
+      try {
+         if (method != null) {
+            // Ensure this method is static
+            // or construct an instance using the default constructor.
+            boolean isStatic = Modifier.isStatic(method.getModifiers());
+//bgp            if (instance == null && !isStatic)
+//bgp               instance = ReflectionUtil.dynamicInstance(method.getDeclaringClass(), null, null);
+            if (instance != null || isStatic)
+               rv = method.invoke(instance, args);
+         }
+      } catch (NullPointerException npe) {
+         if (DEBUG) System.err
+         .println("ClientUtil.callMethod NullPointerException: "
+                  + npe.getMessage());
+      } catch (IllegalAccessException iae) {
+         if (DEBUG) System.err
+         .println("ClientUtil.callMethod IllegalAccessException: "
+                  + iae.getMessage());
+      } catch (InvocationTargetException ite) {
+         String msg = ite.getMessage();
+         if (msg == null)
+         {
+            Throwable te = ite.getTargetException();
+            msg = te.getClass().getName() + ": " + te.getMessage();
+         }
+         if (DEBUG) System.err
+         .println("ClientUtil.callMethod InvocationTargetException: "
+                  + msg);
+      } catch (IllegalArgumentException iarge) {
+         if (DEBUG) System.err
+         .println("ClientUtil.callMethod IllegalArgumentException: "
+                  + iarge.getMessage());
+      }
+      return rv;
+   }
+
+   /**
+    * Gets a value from the dialog settings.
+    * This value overrides everything except an actual value.
+    * A null value means we haven't remembered anything.
+    * The value "null" means no and don't ask again.
+    * @param methodname One of the method name keys, such as DB2PATH.
+    * @param args An array of argument values.
+    * @return A value from the dialog settings, or null.
+    */
+   protected static Object getStoredValue(String methodname, Object[] args)
+   {
+      // Check the dialog settings
+	   IBMPluginActivator plugin = IBMPluginActivator.getInstance();
+	   String returnString = null;
+	   if (plugin != null) {
+		   Preferences prefStore = plugin.getPluginPreferences();
+		   String prefKey = getPrefKey(methodname, args);
+		   if (prefStore != null) {
+			   returnString = prefStore.getString(prefKey);
+		   }
+	   }
+	   return returnString;
+   }
+
+   /**
+    * @param methodname The name of the method whose value we are caching.
+    * @param args An array of arguments, or null.
+    * @return A String in the form: "methodname[([arg1[,arg2...])]".
+    */
+   protected static String getPrefKey(String methodname, Object[] args)
+   {
+      if (args != null)
+      {
+         StringBuffer prefKey = new StringBuffer();
+         prefKey.append(methodname).append('(');
+         int m = args.length;
+         if (m > 0)
+         {
+            prefKey.append(args[0]);
+            int a = 1;
+            while (a < m)
+            {
+               prefKey.append(',').append(args[a]);
+               a++;
+            }
+         }
+         prefKey.append(')');
+         return prefKey.toString();
+      }
+      return methodname;
+//    if (methodname.equalsIgnoreCase(ENVVAR) && args != null && args.length == 1)
+//    prefKey += "(" + args[0] + ")";
+//    else if (methodname.equalsIgnoreCase(REGISTRYVALUE) && args != null && args.length == 2)
+//    prefKey += "(" + args[0] + "," + args[1] + ")";
+//    return prefKey;
+   }
+
+//<bgp   /**
+//    * Gets a String value from a registered implementation method
+//    * or from our own JNI method.
+//    * @param methodname One of the method name keys, such as DB2PATH.
+//    * @param args An array of argument values.
+//    */
+//   protected static Object getImplValue(String methodname, Object[] args)
+//   {
+//      Object value = null;
+//      Method m = (Method)implMethods.get(methodname);
+//      if (m != null)
+//         value = callMethod(m, null, args);
+//      if (value == null)
+//      {
+//         if (methodname.equalsIgnoreCase(ENVVAR)
+//         && args != null && args.length == 1 && args[0] instanceof String)
+//         {
+//            value = getenvJNI((String)args[0]);
+//         }
+//         else if (methodname.equalsIgnoreCase(REGISTRYVALUE)
+//         && args != null && args.length == 2 && args[0] instanceof String  && args[1] instanceof String)
+//         {
+//            value = getRegistryValueJNI((String)args[0], (String)args[1]);
+//         }
+//         else if (methodname.equalsIgnoreCase(JDKLEVEL)
+//         && args != null && args.length == 1 && args[0] instanceof String)
+//         {
+//            value = getJdkLevelImpl((String)args[0]);
+//         }
+//      }
+//      return value;
+//bgp>   }
+
+   /**
+    * Gets a String value from a registered implementation method
+    * or from our own JNI method.
+    * @param methodname One of the method name keys, such as DB2PATH.
+    */
+   protected static Object getImplValue(String methodname)
+   {
+      Object value = null;
+      Method m = (Method)implMethods.get(methodname);
+      if (m != null)
+         value = callMethod(m);
+      if (value == null)
+      {
+         if (methodname.equalsIgnoreCase(DB2PATH))
+            value = getDB2PathJNI();
+//bgp         else if (methodname.equalsIgnoreCase(DB2CLIENTVERSION))
+//            value = getDB2ClientVersionImpl();
+//         else if (methodname.equalsIgnoreCase(DB2CLIENTRELEASE))
+//            value = getDB2ClientReleaseImpl();
+//         else if (methodname.equalsIgnoreCase(DB2CLIENTMODIFICATION))
+//            value = getDB2ClientModificationImpl();
+//         else if (methodname.equalsIgnoreCase(ORACLEPATH))
+//            value = getOraclePathJNI();
+//         else if (methodname.equalsIgnoreCase(VEPATH))
+//            value = getVEPathJNI();
+//         else if (methodname.equalsIgnoreCase(VELEVEL))
+//         {
+//            StringBuffer valbuf = new StringBuffer();
+//            value = getImplValue(VEVERSION);
+//            if (value != null && value.toString().length() > 0)
+//            {
+//               valbuf.append(value);
+//               value = getImplValue(VERELEASE);
+//               if (value != null && value.toString().length() > 0)
+//               {
+//                  valbuf.append('.').append(value);
+//                  value = getImplValue(VEMODIFICATION);
+//                  if (value != null && value.toString().length() > 0)
+//                  {
+//                     valbuf.append('.').append(value);
+//                     value = valbuf.toString();
+//                  }
+//                  else
+//                  {
+//                     value = null;
+//                  }
+//               }
+//               else
+//               {
+//                  value = null;
+//               }
+//            }
+//         }
+//         else if (methodname.equalsIgnoreCase(VEVERSION))
+//            value = getVEVersionJNI();
+//         else if (methodname.equalsIgnoreCase(VERELEASE))
+//            value = getVEReleaseJNI();
+//         else if (methodname.equalsIgnoreCase(VEMODIFICATION))
+//            value = getVEModificationJNI();
+//         else if (methodname.equalsIgnoreCase(ALIASCOUNT))
+//            value = new Integer(getAliasCountJNI());
+//         else if (methodname.equalsIgnoreCase(ALIASES))
+//            value = getAliasesNative();
+//         else if (methodname.equalsIgnoreCase(HOSTINFO))
+//bgp>            value = getHostInfoNative();
+      }
+      return value;
+   }
+
+   /**
+    * TODO: candidate for common
+    * Tests whether a directory or file exists.
+    * @param file The name of a directory or file.
+    * @return True if the file exists.
+    */
+   public static boolean fileExists(String file)
+   {
+      File f = new File(file);
+      return f.exists();
+   }
+
+//<bgp   /**
+//    * Prompts the user for a value.
+//    * @param key Our method key for what to prompt for.
+//    * @param value The current value.
+//    * @return The new value, or null if the user declines to enter a new value.
+//    */
+//   protected static Object promptUser(String key, String value)
+//   {
+//      Object[] prompter = (Object[])promptMethods.get(key);
+//      if (prompter != null)
+//      {
+//         Class promptclass = (Class)prompter[0];
+//         Method promptmethod = (Method)prompter[1];
+//         if (promptclass != null && promptmethod != null)
+//         {
+//            Object promptinstance = ReflectionUtil.dynamicInstance(promptclass, null, null);
+//            if (promptinstance != null)
+//               return callMethod(promptmethod, promptinstance,
+//                        new Object[]{key, value});
+//         }
+//      }
+//      return null;
+//   }
+//
+//   /**
+//    * Returns true if we can query the registry.
+//    * @return True if we can query the registry using a given implementation
+//    * or native JNI call; false otherwise.
+//    */
+//   public static synchronized boolean hasRegistryValueImpl()
+//   {
+//      String value = (String)getImplValue(REGISTRYVALUE, new String[]{"HARDWARE\\DEVICEMAP\\VIDEO","VgaCompatible"});
+//      if (value != null && value.length() > 0)
+//      {
+//         return true;
+//      }
+//      else
+//      {
+//         return false;
+//      }
+//   }
+//
+//   /**
+//    * Gets a String value from the OS registry at a given path and key,
+//    * such as [HKEY_LOCAL_MACHINE\SOFTWARE\IBM\DB2\Developer Workbench\products\com.ibm.db2.dwb]
+//    * and "location"
+//    * @param path The path using backslashes for Windows, forward slashes for Linux.
+//    * @param key  The key for the value that we want to get.
+//    * @return The value from the registry, or null if the library cannot be loaded.
+//    */
+//   public static String getRegistryValue(String path, String key)
+//   {
+//      String[] args = new String[]{path, key};
+//      String prefKey = getPrefKey(REGISTRYVALUE, args);
+//      String value = (String)actualValues.get(prefKey);
+//      if (value == null)
+//      {
+//         value = (String)getStoredValue(REGISTRYVALUE, args);
+//         if (value == null || value.length() == 0)
+//            value = (String)getImplValue(REGISTRYVALUE, args);
+//         if (value == null || value.length() == 0)
+//            value = (String)getDefault(prefKey);
+//         if (value == null || value.equals("null"))
+//            value = null;
+//         else
+//            cacheRegistryValue(path, key, value);
+//      }
+//      return value;
+//   }
+//
+//   /**
+//    * Caches a value to replace anything that may be in the OS registry.
+//    * @param path The path using backslashes for Windows, forward slashes for Linux.
+//    * @param key  The key for the value that we want to get.
+//    * @param value The value to replace the use of the registry.
+//    * This value cannot be null.
+//    */
+//   public static void cacheRegistryValue(String path, String key, String value)
+//   {
+//      if (value != null)
+//      {
+//         String[] args = new String[]{path, key};
+//         actualValues.put(getPrefKey(REGISTRYVALUE, args), value);
+//      }
+//   }
+//   
+//   /**
+//    * Gets a String value from the OS registry at a given path and key
+//    * @param path The path using backslashes for Windows, forward slashes for Linux.
+//    * @param key  The key for the value that we want to get.
+//    * @return The value from the registry, or null if the library cannot be loaded.
+//    */
+//   public static String getRegistryValueJNI(String path, String key)
+//   {
+//      return OSUtil.getRegistryValue(path, key);
+//   }
+//
+//   /**
+//    * Returns true if we can find where a local DB2 is installed.
+//    * @return True if a DB2Path is found using a given implementation
+//    * or native JNI call; false otherwise.
+//    */
+//   public static synchronized boolean hasDB2PathImpl()
+//   {
+//      String value = (String)getImplValue(DB2PATH);
+//      if (value != null && value.length() > 0)
+//      {
+//         return setDB2Path(value);
+//      }
+//      else
+//      {
+//         return false;
+//      }
+//bgp>   }
+
+   /**
+    * Gets the path where a local DB2 is installed.
+    * @return The name of the directory where DB2 is installed.
+    */
+   public static synchronized String getDB2Path()
+   {
+      String value = (String)actualValues.get(DB2PATH);
+      if (value == null)
+      {
+         value = (String)getStoredValue(DB2PATH, null);
+         if (value == null || value.length() == 0)
+            value = (String)getImplValue(DB2PATH);
+         if (value == null || value.length() == 0)
+            value = (String)getDefault(DB2PATH);
+         if (value == null || value.equals("null"))
+            value = null;
+         else
+            setDB2Path(cleanPath(value));
+      }
+      if (value != null)
+          return cleanPath(value);
+      else
+         return null;
+   }
+
+   /**
+    * Removes a trailing path separator.
+    * @param path A path that could end in a slash or backslash.
+    * @return The same path without the trailing path separator.
+    */
+   protected static synchronized String cleanPath(String path)
+   {
+      String slash = System.getProperty("file.separator");
+      if (slash != null && slash.length() > 0)
+      {
+         int len = path.length();
+         if (len > 0 && path.charAt(len - 1) == slash.charAt(0))
+         {
+            return path.substring(0,len - 1);
+         }
+      }
+      return path;
+   }
+   
+   /**
+    * Sets the path where a local DB2 is installed.
+    * @param path The name of the directory where DB2 is installed.
+    * @return True if we get a valid path.
+    */
+   public static synchronized boolean setDB2Path(String path)
+   {
+      path = cleanPath(path);
+      if (fileExists(path))
+      {
+         actualValues.put(DB2PATH, path);
+      }
+//<bgp      else
+//      {
+//         Object result = promptUser(DB2PATH, path);
+//         if (result != null
+//                  && result instanceof String
+//                  && fileExists((String)result))
+//         {
+//            actualValues.put(DB2PATH, (String)result);
+//bgp>         }
+         else
+         {
+            actualValues.remove(DB2PATH);
+            return false;
+         }
+//bgp      }
+      return true;
+   }
+
+   /**
+    * Gets the DB2 path from the Windows registry
+    * or based on a UNIX environment variable.
+    * @return The name of the directory where DB2 is installed.
+    */
+   public static String getDB2PathJNI()
+	{
+//		return OSUtil.getDB2Path();
+       return null;
+	}
+
+//<bgp   /**
+//    * Returns true if we can find where a local Oracle is installed.
+//    * @return True if a OraclePath is found using a given implementation
+//    * or native JNI call; false otherwise.
+//    */
+//   public static synchronized boolean hasOraclePathImpl()
+//   {
+//      String value = (String)getImplValue(ORACLEPATH);
+//      if (value != null && value.length() > 0)
+//      {
+//         actualValues.put(ORACLEPATH, value);
+//         return true;
+//      }
+//      else
+//      {
+//         return false;
+//      }
+//   }
+//
+//   /**
+//    * Gets the path where a local Oracle is installed.
+//    * @return The name of the directory where Oracle is installed.
+//    */
+//   public static synchronized String getOraclePath()
+//   {
+//      String value = (String)actualValues.get(ORACLEPATH);
+//      if (value == null)
+//      {
+//         value = (String)getStoredValue(ORACLEPATH, null);
+//         if (value == null || value.length() == 0)
+//            value = (String)getImplValue(ORACLEPATH);
+//         if (value == null || value.length() == 0)
+//            value = (String)getDefault(ORACLEPATH);
+//         if (value == null || value.equals("null"))
+//            value = null;
+//         else
+//            actualValues.put(ORACLEPATH, value);
+//      }
+//      return value;
+//   }
+//
+//   /**
+//    * Gets the Oracle path from the Windows registry
+//    * or the ORACLE_HOME environment variable.
+//    * @return The name of the directory where Oracle is installed.
+//    */
+//   public static String getOraclePathJNI()
+//	{
+//		return OSUtil.getOraclePath();
+//	}
+//
+//   /**
+//    * Returns true if we can find where a local Visual Explain is installed.
+//    * @return True if a Visual Explain path is found using a given implementation
+//    * or native JNI call; false otherwise.
+//    */
+//   public static synchronized boolean hasVEPathImpl()
+//   {
+//      String value = (String)getImplValue(VEPATH);
+//      return (value != null && value.length() > 0);
+//   }
+//
+//   /**
+//    * Gets the path where a local Visual Explain is installed.
+//    * @return The name of the directory where Visual Explain is installed.
+//    */
+//   public static synchronized String getVEPath()
+//   {
+//      String value = (String)actualValues.get(VEPATH);
+//      if (value == null)
+//      {
+//         value = (String)getStoredValue(VEPATH, null);
+//         if (value == null || value.length() == 0)
+//            value = (String)getImplValue(VEPATH);
+//         if (value == null || value.length() == 0)
+//            value = (String)getDefault(VEPATH);
+//         if (value == null || value.equals("null"))
+//            value = null;
+//         else
+//            actualValues.put(VEPATH, value);
+//      }
+//      return value;
+//   }
+//
+//   /**
+//    * Get the value of the install directory of VisualExplain from the Windows registry.
+//    * @return The String value for VEPath
+//    */
+//   public static String getVEPathJNI()
+//	{
+//		return OSUtil.getVEPath();
+//	}
+//
+//   /**
+//    * Returns true if we can find the version of a local Visual Explain.
+//    * @return True if a Visual Explain version is found using a given implementation
+//    * or native JNI call; false otherwise.
+//    */
+//   public static synchronized boolean hasVELevelImpl()
+//   {
+//      String value = (String)getImplValue(VELEVEL);
+//      return (value != null && value.length() > 0);
+//   }
+//
+//   /**
+//    * Gets the version of a local Visual Explain.
+//    * @return The Visual Explain version.
+//    */
+//   public static synchronized String getVELevel()
+//   {
+//      String value = (String)actualValues.get(VELEVEL);
+//      if (value == null)
+//      {
+//         value = (String)getStoredValue(VELEVEL, null);
+//         if (value == null || value.length() == 0)
+//            value = (String)getStoredValue(VELEVEL, null);
+//         if (value == null || value.length() == 0)
+//            value = (String)getImplValue(VELEVEL);
+//         if (value == null || value.length() == 0)
+//            value = (String)getDefault(VELEVEL);
+//         if (value == null || value.equals("null"))
+//            value = null;
+//         else
+//            actualValues.put(VELEVEL, value);
+//      }
+//      return value;
+//   }
+//
+//   /**
+//    * Returns true if we can find the version of a local Visual Explain.
+//    * @return True if a Visual Explain version is found using a given implementation
+//    * or native JNI call; false otherwise.
+//    */
+//   public static synchronized boolean hasVEVersionImpl()
+//   {
+//      String value = (String)getImplValue(VEVERSION);
+//      return (value != null && value.length() > 0);
+//   }
+//
+//   /**
+//    * Gets the version of a local Visual Explain.
+//    * @return The Visual Explain version.
+//    */
+//   public static synchronized String getVEVersion()
+//   {
+//      String value = (String)actualValues.get(VEVERSION);
+//      if (value == null)
+//      {
+//         value = (String)getStoredValue(VEVERSION, null);
+//         if (value == null || value.length() == 0)
+//            value = (String)getImplValue(VEVERSION);
+//         if (value == null || value.length() == 0)
+//            value = (String)getDefault(VEVERSION);
+//         if (value == null || value.equals("null"))
+//            value = null;
+//         else
+//            actualValues.put(VEVERSION, value);
+//      }
+//      return value;
+//   }
+//
+//   /**
+//    * Get the value of the Version of VisualExplain from the Windows registry.
+//    * @return The String value for the Visual Explain version
+//    */
+//   public static String getVEVersionJNI()
+//	{
+//		return OSUtil.getVEVersion();
+//	}
+//
+//   /**
+//    * Returns true if we can find the release of a local Visual Explain.
+//    * @return True if a Visual Explain release is found using a given implementation
+//    * or native JNI call; false otherwise.
+//    */
+//   public static synchronized boolean hasVEReleaseImpl()
+//   {
+//      String value = (String)getImplValue(VERELEASE);
+//      return (value != null && value.length() > 0);
+//   }
+//
+//   /**
+//    * Gets the release of a local Visual Explain.
+//    * @return The Visual Explain release.
+//    */
+//   public static synchronized String getVERelease()
+//   {
+//      String value = (String)actualValues.get(VERELEASE);
+//      if (value == null)
+//      {
+//         value = (String)getStoredValue(VERELEASE, null);
+//         if (value == null || value.length() == 0)
+//            value = (String)getImplValue(VERELEASE);
+//         if (value == null || value.length() == 0)
+//            value = (String)getDefault(VERELEASE);
+//         if (value == null || value.equals("null"))
+//            value = null;
+//         else
+//            actualValues.put(VERELEASE, value);
+//      }
+//      return value;
+//   }
+//
+//   /**
+//    * Get the value of the Release of Visual Explain from the Windows registry.
+//    * @return The String value for the Visual Explain Release
+//    */
+//   public static String getVEReleaseJNI()
+//	{
+//		return OSUtil.getVERelease();
+//	}
+//
+//   /**
+//    * Returns true if we can find the modification level of a local Visual Explain.
+//    * @return True if a Visual Explain modification level
+//    * is found using a given implementation
+//    * or native JNI call; false otherwise.
+//    */
+//   public static synchronized boolean hasVEModificationImpl()
+//   {
+//      String value = (String)getImplValue(VEMODIFICATION);
+//      return (value != null && value.length() > 0);
+//   }
+//
+//   /**
+//    * Gets the modification of a local Visual Explain.
+//    * @return The Visual Explain modification level.
+//    */
+//   public static synchronized String getVEModification()
+//   {
+//      String value = (String)actualValues.get(VEMODIFICATION);
+//      if (value == null)
+//      {
+//         value = (String)getStoredValue(VEMODIFICATION, null);
+//         if (value == null || value.length() == 0)
+//            value = (String)getImplValue(VEMODIFICATION);
+//         if (value == null || value.length() == 0)
+//            value = (String)getDefault(VEMODIFICATION);
+//         if (value == null || value.equals("null"))
+//            value = null;
+//         else
+//            actualValues.put(VEMODIFICATION, value);
+//      }
+//      return value;
+//   }
+//
+//   /**
+//    * Gets the value of the Modification of VisualExplain from the Windows registry.
+//    * @return The String value for the Visual Explain modification level.
+//    */
+//   public static String getVEModificationJNI()
+//	{
+//		return OSUtil.getVEModification();
+//	}
+//
+//   /**
+//    * Returns true if we can find the alias count using our native implementation
+//    * or overridden method.
+//    * @return True if the alias count
+//    * is found using a given implementation
+//    * or native JNI call; false otherwise.
+//    */
+//   public static synchronized boolean hasAliasCountImpl()
+//   {
+//      Integer value = (Integer)getImplValue(ALIASCOUNT);
+//      return (value != null && value.intValue() > -1);
+//   }
+//
+//   /**
+//    * Gets the count of aliases in the client directory.
+//    * @return The count.
+//    */
+//   public static synchronized int getAliasCount()
+//   {
+//      Integer value = (Integer)actualValues.get(ALIASCOUNT);
+//      if (value == null)
+//      {
+//         // DB2DiscoveryUtil:
+//         //value = DB2DiscoveryUtil.getAliasCount();
+//         if (value == null)
+//         {
+//            // Regular override or JNI:
+//            value = (Integer)getImplValue(ALIASCOUNT);
+//            if (value == null) // Default:
+//               value = new Integer(0);
+//         }
+//         actualValues.put(ALIASCOUNT, value);
+//      }
+//      return value.intValue();
+//   }
+//
+//   /**
+//    * Gets the count of aliases in the client directory.
+//    * @return The count.
+//    */
+//   public static int getAliasCountJNI()
+//	{
+//		return DB2Util.getAliasCount();
+//	}
+//
+//   /**
+//    * Gets the names of the aliases in the client directory.
+//    * @param  alias   An array of alias names (output)
+//    * @param  cmt     An array of comments (output)
+//    */
+//   public static synchronized void getAliases(String[] alias, String[] cmt)
+//   {
+//      Object value = actualValues.get(ALIASES);
+//      String[] aliases = null;
+//      String[] cmts = null;
+//      if (value == null)
+//      {
+//         // Regular override or JNI:
+//         value = getImplValue(ALIASES);
+//         if (value != null)
+//         {
+//            aliases = (String[])((Object[])value)[0];
+//            cmts = (String[])((Object[])value)[1];
+//            actualValues.put(ALIASES, value);
+//         }
+//      }
+//      else // value != null
+//      {
+//         aliases = (String[])((Object[])value)[0];
+//         cmts = (String[])((Object[])value)[1];
+//      }
+//      if (aliases != null)
+//      {
+//         int size = aliases.length;
+//         for (int a = 0; a < size; a++)
+//         {
+//            alias[a] = aliases[a];
+//            cmt[a] = cmts[a];
+//         }
+//      }
+//   }
+//
+//   /**
+//    * Gets the names of the aliases in the client directory.
+//    * @return An array of two String arrays:
+//    * the alias names and the comments.
+//    */
+//   protected static Object[] getAliasesNative()
+//   {
+//      int count = getAliasCountJNI();
+//      String[] alias = new String[count];
+//      String[] cmt = new String[count];
+//      if (count > 0)
+//         getAliasesJNI(alias, cmt);
+//      return new Object[]{alias, cmt};
+//   }
+//
+//   /**
+//    * Gets the names of the aliases in the client directory.
+//    * @param  alias   An array of alias names (output)
+//    * @param  cmt     An array of comments (output)
+//    */
+//   public static void getAliasesJNI(String[] alias, String[] cmt)
+//	{
+//		DB2Util.getAliases(alias, cmt);
+//	}
+//
+//   /**
+//    * Gets the list of hostname, port number, and db name of for a list of db aliases.
+//    * For each alias in the input array, its hostname, port number, and db name can be
+//    * found in the corresponding entries in the output arrays.
+//    *
+//    * @param  alias   The array of db aliases cataloged on the client.
+//    * @param  hostname (Output)The array of host names returned by the method.
+//    * @param  port     (Output)The array of port numbers returned by the method.
+//    * @param  dbname   (Output)The array of db names returned by the method.
+//    */
+//   public static synchronized void getHostInfo(
+//            String[] alias,
+//            String[] hostname,
+//            String[] port,
+//            String[] dbname)
+//   {
+//      Object value = actualValues.get(HOSTINFO);
+//      String[] aliases = null;
+//      //String[] cmts = null;
+//      String[] hostnames = null;
+//      String[] ports = null;
+//      String[] dbnames = null;
+//      if (value == null)
+//      {
+//         // Regular override or JNI:
+//         value = getImplValue(HOSTINFO);
+//         if (value != null)
+//         {
+//            
+//            aliases = (String[])((Object[])value)[0];
+//            hostnames = (String[])((Object[])value)[1];
+//            ports = (String[])((Object[])value)[2];
+//            dbnames = (String[])((Object[])value)[3];
+//            actualValues.put(HOSTINFO, value);
+//         }
+//      }
+//      else
+//      {
+//         aliases = (String[])((Object[])value)[0];
+//         hostnames = (String[])((Object[])value)[1];
+//         ports = (String[])((Object[])value)[2];
+//         dbnames = (String[])((Object[])value)[3];
+//      }
+//      if (aliases != null)
+//      {
+//         int size = aliases.length;
+//         for (int a = 0; a < size; a++)
+//         {
+//            alias[a] = aliases[a];
+//            hostname[a] = hostnames[a];
+//            port[a] = ports[a];
+//            dbname[a] = dbnames[a];
+//         }
+//      }
+//   }
+//
+//   /**
+//    * Gets the names of the aliases in the client directory.
+//    * @return An array of four String arrays:
+//    * the alias names, the hostnames, the ports, and the dbnames.
+//    */
+//   protected static Object[] getHostInfoNative()
+//   {
+//      int count = getAliasCountJNI();
+//      String[] alias = new String[count];
+//      String[] hostname = new String[count];
+//      String[] port = new String[count];
+//      String[] dbname = new String[count];
+//      if (count > 0)
+//      {
+//         String[] cmt = new String[count];
+//         getAliases(alias, cmt);
+//         getHostInfoJNI(alias, hostname, port, dbname);
+//      }
+//      return new Object[]{alias, hostname, port, dbname};
+//   }
+//
+//   /**
+//    * Gets the list of hostname, port number, and db name of for a list of db aliases.
+//    * For each alias in the input array, its hostname, port number, and db name can be
+//    * found in the corresponding entries in the output arrays.
+//    *
+//    * @param  alias   The array of db aliases cataloged on the client.
+//    * @param  hostname (Output)The array of host names returned by the method.
+//    * @param  port     (Output)The array of port numbers returned by the method.
+//    * @param  dbname   (Output)The array of db names returned by the method.
+//    */
+//   public static void getHostInfoJNI(
+//            String[] alias,
+//            String[] hostname,
+//            String[] port,
+//            String[] dbname)
+//	{
+//		DB2Util.getHostInfo(alias, hostname, port, dbname);
+//   }
+//
+//   /**
+//    * Execute a command in the current OS environment .
+//    * @param  cmd The command to execute
+//    * @param  emsg The error messages in the first element (output)
+//    * @return If successful, 0; otherwise, a negative number
+//    */
+//   public static int executeEnvJNI(
+//            String cmd,
+//            String workDir,
+//            String javaHome,
+//            Object[] emsg)
+//	{
+//		return OSUtil.executeEnv(cmd, workDir, javaHome, emsg);
+//	}
+//
+//   /**
+//    * Runs a command using the JDK level in a given connection
+//    * in a given working directory.
+//    public static String runit(String cmd, String workDir, int[] rc)
+//    {
+//    return runit(null, cmd, workDir, rc);
+//    }
+//    */
+//   /**
+//    * Runs a command in a given working directory.
+//    * Caller must make sure the javaHome value is set by calling the setJavaHome method.
+//    * <p>
+//    * @param connection The connection object against which the command will run.
+//    * @param cmd The command string to be executed.
+//    * @param workDir The working directory to be used by the command execution.
+//    * @param rc A array of int for the result of the execution.
+//    public synchronized static String runit(
+//    RLDBConnection connection,
+//    String cmd,
+//    String workDir,
+//    int[] rc)
+//    {
+//    if (connection != null)
+//    {
+//    //String jdkLevel = connection.getJdkLevel();
+//     //((BaseOptionsMgr)ComponentMgr.getInstance().getObjMgr(BaseOptionsMgr.OPTIONS_MGR)).getJavaHome(jdkLevel);
+//      String sep = System.getProperty("file.separator");
+//      StringBuffer jdkbuf = new StringBuffer(256);
+//      if (javaHome != null && javaHome.length() != 0)
+//      {
+//      jdkbuf.append(javaHome);
+//      if (!javaHome.endsWith(sep))
+//      jdkbuf.append(sep);
+//      jdkbuf.append("bin");
+//      }
+//      javaHome = jdkbuf.toString();
+//      }
+//      //System.out.println("ClientUtil.runit javaHome: " + javaHome);
+//       Object messages[] = new Object[1];
+//       rc[0] = executeEnvJNI(cmd, workDir, javaHome, messages);
+//       String exemsg = (String) messages[0];
+//       if (exemsg != null && exemsg.equals(""))
+//       {
+//       return null;
+//       }
+//       else
+//       {
+//       return exemsg;
+//       }
+//       }
+//       */
+//
+//   /**
+//    * Returns true if we can find an environment variable implementation.
+//    * @return True if getEnv("HOME") can be found using a given implementation
+//    * or native JNI call; false otherwise.
+//    */
+//   public static synchronized boolean hasEnvImpl()
+//   {
+//      String value = (String)getImplValue(ENVVAR, new Object[]{"HOME"});
+//      return (value != null && value.length() > 0);
+//   }
+//
+//   /**
+//    * Gets the value of an environment variable.
+//    *
+//    * @param evName The environment variable's name
+//    * @return The value contained in the environment variable
+//    */
+//   public static synchronized String getEnv(String evName)
+//   {
+//      String key = ENVVAR +"(" + evName + ")";
+//      String value = (String)actualValues.get(key);
+//      if (value == null)
+//      {
+//         Object[] args = new Object[]{evName};
+//         value = (String)getStoredValue(ENVVAR, args);
+//         if (value == null || value.length() == 0)
+//            value = (String)getImplValue(ENVVAR, args);
+//         if (value == null || value.length() == 0)
+//            value = (String)getDefault(key);
+//         if (value == null || value.equals("null"))
+//            value = null;
+//         else
+//            actualValues.put(key, value);
+//      }
+//      return value;
+//   }
+//
+//   /**
+//    * Gets the value of an environment variable.
+//    *
+//    * @return The value contained in the environment variable
+//    */
+//   public static String getenvJNI(String evName)
+//	{
+//		return OSUtil.getEnv(evName);
+//	}
+//
+//   /**
+//    * Given a host, port, and database name (on the host),
+//    * returns a matching DB2 alias, or null if none can be found.
+//    * @param myHostName The host name or TCP/IP address of the database server.
+//    * @param myPort     The DB2 server's connection port.
+//    * @param myDBName   The name of the database on the server.
+//    * @return The alias name or null if none match.
+//    */
+//   public static String findAlias(String myHostName, String myPort, String myDBName)
+//   {
+//		int count = ClientUtil.getAliasCount();
+//		if (count > -1)
+//      {
+//		   String[] alias = new String[count];
+//		   String[] hostname = new String[count];
+//		   String[] port = new String[count];
+//		   String[] dbname = new String[count];
+//		   ClientUtil.getHostInfo(alias, hostname, port, dbname);
+//		   for (int x = 0; x < count; x++)
+//		   {
+//		      //System.out.println("DbUtil - alias[x], cmt[x], hostname[x], port[x], dbname[x] " +
+//		      //      alias[x] + " " +  hostname[x] + " " + port[x] + " " + dbname[x]);
+//		      if (hostname[x].trim().equalsIgnoreCase(myHostName.trim())
+//		      && port[x].trim().equalsIgnoreCase(myPort.trim())
+//		      && dbname[x].trim().equalsIgnoreCase(myDBName.trim()))
+//		         return alias[x];
+//		   }
+//      }
+//		return null;
+//   }
+//
+//   /**
+//    * Clears the caches for ALIASCOUNT, ALIASES, and HOSTINFO,
+//    * resulting in a fresh snapshot of the DB2 client information.
+//    * This can be used when aliases haave been created or removed.
+//    */
+//	public static void cleanAliases()
+//   {
+//		ClientUtil.clearCache(ClientUtil.ALIASCOUNT);
+//		ClientUtil.clearCache(ClientUtil.ALIASES);
+//		ClientUtil.clearCache(ClientUtil.HOSTINFO);
+//bgp>	}
+
+	 /**
+	  * This method uses an algorithm specifically for zSeries since 
+	  * zSeries connections require the zSeries license jar.
+	  */
+    public static String getDB2zSeriesUniversalDriverClientJarsPath() 
+    {
+       // RATLC01124570 (Should pick jcc jar files from RAD directory, not from sqllib)
+       // Look to pick up Universal driver jars from the RAD installation first. Theoretically,
+       // the program should never get to pick up the jars from DB2 because the RAD installation will 
+       // always be there (picking up the jars from the DB2 installation is kept just in case...) rm
+       StringBuffer db2DriverPath = new StringBuffer();
+       StringBuffer db2zSeriesLicensePath = new StringBuffer();
+       StringBuffer fullPath = new StringBuffer(); 
+       db2DriverPath = new StringBuffer();
+       db2zSeriesLicensePath = new StringBuffer();
+       String path = null;
+     
+       // locate plug-in driver
+       try {
+         path = FileLocator.resolve(
+                Platform.getBundle("com.ibm.datatools.db2").getEntry( //$NON-NLS-1$
+                "/")).getPath(); //$NON-NLS-1$
+          
+          db2DriverPath.append(path).append(File.separator)
+               .append("driver").append(File.separator) //$NON-NLS-1$
+               .append("db2jcc.jar"); //$NON-NLS-1$
+          db2zSeriesLicensePath.append(path).append(File.separator)
+               .append("driver").append(File.separator) //$NON-NLS-1$
+               .append("db2jcc_license_cisuz.jar"); //$NON-NLS-1$
+          File driverJar = new File(db2DriverPath.toString());
+          File licenseJar = new File(db2zSeriesLicensePath.toString());
+          if (driverJar.exists() && licenseJar.exists()) {
+             fullPath.append(driverJar.getAbsolutePath()).append(PATH_SEPARATOR)
+                  .append(licenseJar.getAbsolutePath());
+          }
+       } catch (Exception e) {
+          // if there is an exception, then assume the driver is not found
+       }
+       
+       if (fullPath.toString().equals("")) { //$NON-NLS-1$
+          path = ClientUtil.getDB2Path();
+          if (path != null && !path.equals("")) {
+             db2DriverPath.append(path).append(File.separator)
+                   .append("java").append(File.separator) //$NON-NLS-1$
+                   .append("db2jcc.jar"); //$NON-NLS-1$
+             
+             db2zSeriesLicensePath.append(path).append(File.separator)
+                   .append("java").append(File.separator) //$NON-NLS-1$
+                   .append("db2jcc_license_cisuz.jar"); //$NON-NLS-1$
+             // If this jar exists here, we have a client DB2 V8 or later.
+             File driverJar = new File(db2DriverPath.toString());
+             File licenseJar = new File(db2zSeriesLicensePath.toString());
+             if (driverJar.exists() && licenseJar.exists()) {
+                fullPath.append(db2DriverPath.toString()).append(PATH_SEPARATOR)
+                      .append(db2zSeriesLicensePath.toString());
+             }
+          }
+       }
+       return fullPath.toString();
+    }
+    
+	 /**
+	  * This method uses an algorithm specifically for zSeries since 
+	  * zSeries connections require the zSeries license jar.
+	  */
+   public static String getDB2zSeriesUniversalDriverJDBC4ClientJarsPath() 
+   {
+      // RATLC01124570 (Should pick jcc jar files from RAD directory, not from sqllib)
+      // Look to pick up Universal driver jars from the RAD installation first. Theoretically,
+      // the program should never get to pick up the jars from DB2 because the RAD installation will 
+      // always be there (picking up the jars from the DB2 installation is kept just in case...) rm
+      StringBuffer db2DriverPath = new StringBuffer();
+      StringBuffer db2zSeriesLicensePath = new StringBuffer();
+      StringBuffer fullPath = new StringBuffer(); 
+      db2DriverPath = new StringBuffer();
+      db2zSeriesLicensePath = new StringBuffer();
+      String path = null;
+    
+      // locate plug-in driver
+      try {
+        path = FileLocator.resolve(
+               Platform.getBundle("com.ibm.datatools.db2").getEntry( //$NON-NLS-1$
+               "/")).getPath(); //$NON-NLS-1$
+         
+         db2DriverPath.append(path).append(File.separator)
+              .append("driver").append(File.separator) //$NON-NLS-1$
+              .append("db2jcc4.jar"); //$NON-NLS-1$
+         db2zSeriesLicensePath.append(path).append(File.separator)
+              .append("driver").append(File.separator) //$NON-NLS-1$
+              .append("db2jcc_license_cisuz.jar"); //$NON-NLS-1$
+         File driverJar = new File(db2DriverPath.toString());
+         File licenseJar = new File(db2zSeriesLicensePath.toString());
+         if (driverJar.exists() && licenseJar.exists()) {
+            fullPath.append(driverJar.getAbsolutePath()).append(PATH_SEPARATOR)
+                 .append(licenseJar.getAbsolutePath());
+         }
+      } catch (Exception e) {
+         // if there is an exception, then assume the driver is not found
+      }
+      
+      return fullPath.toString();
+   }
+   
+   public static String getDB2iSeriesJT400ClientJarsPath()
+   {
+
+		/* RATLC01371512: The jt400.jar driver file is shipped with the product
+	    * Hence we should pick the jar from the iseries plugin and not from the
+	    *  DB2 installation */
+		try {
+			String path = FileLocator.resolve(
+					Platform.getBundle("com.ibm.datatools.db2.iseries") //$NON-NLS-1$
+                   .getEntry("driver/jt400.jar")).getPath(); //$NON-NLS-1$
+			if (new File(path).exists())
+				return new File(path).getAbsolutePath();
+		
+		/* If the driver is not found in the iseries plugin,
+		 * try to locate in in the DB2 installation. This will
+		 * only work if there is a local DB2 installation present
+		 */
+	  	    String db2Path = ClientUtil.getDB2Path();
+			if (db2Path != null && !db2Path.equals("")) {
+				StringBuffer db2DriverPath = new StringBuffer();
+				db2DriverPath.append(db2Path).append(File.separator)
+						.append("tools").append(File.separator) //$NON-NLS-1$
+						.append("jt400.jar"); //$NON-NLS-1$
+				File driverJar = new File(db2DriverPath.toString());
+				if (driverJar.exists())
+					return db2DriverPath.toString();
+			}
+
+		} catch (Exception e) {
+			// if there is an exception, then assume the driver is not found
+		}
+
+		return "";
+
+	}
+    
+	 /**
+	  * This method uses an algorithm specifically for non-zSeries servers since
+	  * non-zSeries connections do not require the zSeries license jar.
+	  */
+    public static String getDB2UniversalDriverClientJarsPath() 
+    {
+       // RATLC01124570 (Should pick jcc jar files from RAD directory, not from sqllib)
+       // Look to pick up Universal driver jars from the RAD installation first. Theoretically,
+       // the program should never get to pick up the jars from DB2 because the RAD installation will 
+       // always be there (picking up the jars from the DB2 installation is kept just in case...) rm
+       StringBuffer db2DriverPath = new StringBuffer();
+       StringBuffer db2LicensePath = new StringBuffer();
+       StringBuffer db2zSeriesLicensePath = new StringBuffer();
+       StringBuffer fullPath = new StringBuffer(); 
+       db2DriverPath = new StringBuffer();
+       db2zSeriesLicensePath = new StringBuffer();
+       String path = null;
+      
+       // locate plug-in driver
+       try {
+          path = FileLocator.resolve(
+                Platform.getBundle("com.ibm.datatools.db2").getEntry( //$NON-NLS-1$
+                "/")).getPath(); //$NON-NLS-1$
+          
+          db2DriverPath.append(path).append(File.separator)
+               .append("driver").append(File.separator) //$NON-NLS-1$
+               .append("db2jcc.jar"); //$NON-NLS-1$
+          db2zSeriesLicensePath.append(path).append(File.separator)
+               .append("driver").append(File.separator) //$NON-NLS-1$
+               .append("db2jcc_license_cisuz.jar"); //$NON-NLS-1$
+          File driverJar = new File(db2DriverPath.toString());
+          File licenseJar = new File(db2zSeriesLicensePath.toString());
+          if (driverJar.exists() && licenseJar.exists()) {
+             fullPath.append(driverJar.getAbsolutePath()).append(PATH_SEPARATOR)
+                  .append(licenseJar.getAbsolutePath());
+          }
+       } catch (Exception e) {
+          // if there is an exception, then assume the driver is not found
+       }
+       
+       if (fullPath.toString().equals("")) { //$NON-NLS-1$
+          path = ClientUtil.getDB2Path();
+          if (path != null && !path.equals("")) {
+             db2DriverPath.append(path).append(File.separator)
+                   .append("java").append(File.separator) //$NON-NLS-1$
+                   .append("db2jcc.jar"); //$NON-NLS-1$
+             
+             db2LicensePath.append(path).append(File.separator)
+             		.append("java").append(File.separator) //$NON-NLS-1$
+   				.append("db2jcc_license_cu.jar"); //$NON-NLS-1$
+             
+             db2zSeriesLicensePath.append(path).append(File.separator)
+                   .append("java").append(File.separator) //$NON-NLS-1$
+                   .append("db2jcc_license_cisuz.jar"); //$NON-NLS-1$
+           
+             // If this jar exists here, we have a client DB2 V8 or later.
+             File driverJar = new File(db2DriverPath.toString());
+             File licenseJar = new File(db2LicensePath.toString());
+             File zSeriesLicenseJar = new File(db2zSeriesLicensePath.toString());
+             if (driverJar.exists() && zSeriesLicenseJar.exists()) {
+                fullPath.append(db2DriverPath.toString()).append(PATH_SEPARATOR)
+                		.append(db2zSeriesLicensePath.toString());
+             } else if (driverJar.exists() && licenseJar.exists()) {
+               fullPath.append(db2DriverPath.toString()).append(PATH_SEPARATOR)
+               		.append(db2LicensePath.toString());
+             }
+          }
+       }
+       
+       return fullPath.toString();
+    }
+ 
+    
+	 /**
+	  * This method uses an algorithm specifically for non-zSeries servers since
+	  * non-zSeries connections do not require the zSeries license jar.
+	  */
+   public static String getDB2UniversalDriverJDBC4ClientJarsPath() 
+   {
+      // RATLC01124570 (Should pick jcc jar files from RAD directory, not from sqllib)
+      // Look to pick up Universal driver jars from the RAD installation first. Theoretically,
+      // the program should never get to pick up the jars from DB2 because the RAD installation will 
+      // always be there (picking up the jars from the DB2 installation is kept just in case...) rm
+      StringBuffer db2DriverPath = new StringBuffer();
+      StringBuffer db2zSeriesLicensePath = new StringBuffer();
+      StringBuffer fullPath = new StringBuffer(); 
+      db2DriverPath = new StringBuffer();
+      db2zSeriesLicensePath = new StringBuffer();
+      String path = null;
+     
+      // locate plug-in driver
+      try {
+         path = FileLocator.resolve(
+               Platform.getBundle("com.ibm.datatools.db2").getEntry( //$NON-NLS-1$
+               "/")).getPath(); //$NON-NLS-1$
+         
+         db2DriverPath.append(path).append(File.separator)
+              .append("driver").append(File.separator) //$NON-NLS-1$
+              .append("db2jcc4.jar"); //$NON-NLS-1$
+         db2zSeriesLicensePath.append(path).append(File.separator)
+              .append("driver").append(File.separator) //$NON-NLS-1$
+              .append("db2jcc_license_cisuz.jar"); //$NON-NLS-1$
+         File driverJar = new File(db2DriverPath.toString());
+         File licenseJar = new File(db2zSeriesLicensePath.toString());
+         if (driverJar.exists() && licenseJar.exists()) {
+            fullPath.append(driverJar.getAbsolutePath()).append(PATH_SEPARATOR)
+                 .append(licenseJar.getAbsolutePath());
+         }
+      } catch (Exception e) {
+         // if there is an exception, then assume the driver is not found
+      }
+      
+      return fullPath.toString();
+   }
+    
+//<bgp    /**
+//	  * This method uses an algorithm specifically for DB2 Alias support 
+//	  * in the Database Explorer.
+//	  */
+//   public static String getDB2AliasSupportClientJarsPath() 
+//   {
+//    StringBuffer db2DriverPath = new StringBuffer();
+//    StringBuffer db2zSeriesLicensePath = new StringBuffer();
+//    StringBuffer fullPath = new StringBuffer(); 
+//    String path = ClientUtil.getDB2Path();
+//    if (path != null && !path.equals("")) {
+//       db2DriverPath.append(path).append(File.separator)
+//             .append("java").append(File.separator) //$NON-NLS-1$
+//             .append("db2jcc.jar"); //$NON-NLS-1$
+//       
+//       db2zSeriesLicensePath.append(path).append(File.separator)
+//             .append("java").append(File.separator) //$NON-NLS-1$
+//             .append("db2jcc_license_cisuz.jar"); //$NON-NLS-1$
+//       // If this jar exists here, we have a client DB2 V8 or later;
+//       // otherwise, we test for sqlj.zip; then at leat we have a client
+//       // DB2.
+//       File driverJar = new File(db2DriverPath.toString());
+//       File licenseJar = new File(db2zSeriesLicensePath.toString());
+//       if (driverJar.exists() && licenseJar.exists()) {
+//          fullPath.append(db2DriverPath.toString()).append(PATH_SEPARATOR)
+//                .append(db2zSeriesLicensePath.toString());
+//       }
+//    }
+//    return fullPath.toString();
+//   } 
+//   
+//   /**
+//    * This method locates the DB2 APP driver zip of an installed DB2 client.
+//    * This method is provided as legacy application support for AST.
+//    */
+//   public static String getDB2AppDriverClientZipPath() 
+//   {
+//      StringBuffer db2DriverPath = new StringBuffer();
+//      StringBuffer fullPath = new StringBuffer(); 
+//      String path = ClientUtil.getDB2Path();
+//      if (path != null && !path.equals("")) {
+//         db2DriverPath.append(path).append(File.separator)
+//         .append("java").append(File.separator) //$NON-NLS-1$
+//         .append("db2java.zip"); //$NON-NLS-1$
+//
+//         File driverJar = new File(db2DriverPath.toString());
+//         if (driverJar.exists()) {
+//            fullPath.append(db2DriverPath.toString());
+//         }
+//      }
+//      return fullPath.toString();
+//   }
+//   
+//   /**
+//    * Returns the Java version for a given JDK home directory.
+//    * @param jdkHome A JDK home directory, such as "c:\sqllib\java."
+//    * @return The result from the "java -version" command.
+//    * Returns null if the process fails.
+//    * 
+//    * TODO: ClientUtil APIs can be extended.
+//    */
+//   public static synchronized String getJdkLevel(String jdkHome)
+//   {
+//      String[] jdkarg = new String[]{jdkHome};
+//      String value = (String)actualValues.get(getPrefKey(JDKLEVEL, jdkarg));
+//      if (value == null)
+//      {
+//         value = (String)getStoredValue(JDKLEVEL, jdkarg);
+//         if (value == null || value.length() == 0)
+//            value = (String)getImplValue(JDKLEVEL, jdkarg);
+//         if (value == null || value.length() == 0)
+//            value = (String)getDefault(JDKLEVEL);
+//         if (value == null || value.equals("null"))
+//            value = null;
+//         else
+//            setActualValue(JDKLEVEL, value);
+//      }
+//      return value;
+//   }
+//   /** 
+//    * Our implementation of getJdkLevel(String).
+//    */ 
+//	public static String getJdkLevelImpl(String jdkHome) {
+//		String cmd = null;
+//		if (jdkHome.length() > 0) {
+//			StringBuffer sb;
+//			if (-1 != jdkHome.indexOf(" ") && -1 == jdkHome.indexOf("\"")){
+//				sb = new StringBuffer("\"" + jdkHome);
+//				sb.append(File.separatorChar).append("bin") //$NON-NLS-1$
+//				.append(File.separatorChar).append("java\" -version"); //$NON-NLS-1$
+//			}else{
+//				sb = new StringBuffer(jdkHome);
+//				sb.append(File.separatorChar).append("bin") //$NON-NLS-1$
+//						.append(File.separatorChar).append("java -version"); //$NON-NLS-1$
+//			}
+//			cmd = sb.toString();
+//		} else {
+//			cmd = "java -version"; //$NON-NLS-1$
+//		}
+//		try {
+//			Process p = Runtime.getRuntime().exec(cmd);
+//			InputStream istream = p.getInputStream();
+//			InputStream estream = p.getErrorStream();
+//			// int rc =
+//			p.waitFor();
+//			byte[] lbytes = new byte[250];
+//			int c = istream.read(lbytes);
+//			if (c < 0)
+//				c = estream.read(lbytes);
+//			if (c > 0) {
+//				String output = new String(lbytes, 0, c);
+//				int pos = output.indexOf("\""); //$NON-NLS-1$
+//				if (pos < 0)
+//					return null;
+//				output = output.substring(pos + 1);
+//				pos = output.indexOf("\""); //$NON-NLS-1$
+//				output = output.substring(0, pos);
+//				return output;
+//			}
+//			return null;
+//		} catch (Exception e) {
+//			// System.out.println(e.getMessage());
+//			return null;
+//		}
+//	}
+//    
+//    /**
+//     * Returns the translated output stream from the db2level command.
+//     */
+//    public static String getDb2levelOutput()
+//    {
+//       try
+//       {
+//          String cmd = "db2level";
+//          Process p = Runtime.getRuntime().exec(cmd);
+//          InputStream istream = p.getInputStream();
+//          //int rc = 
+//          p.waitFor();
+//          byte[] lbytes = new byte[250];
+//          int c = istream.read(lbytes);
+//          return new String(lbytes, 0, c);
+//       }
+//       catch (Exception e)
+//       {
+//          //System.out.println(e.getMessage());
+//          return null;
+//       }
+//    }
+//    
+//    /**
+//     * Returns the DB2 level, such as "08022" for 8.2.2.
+//     */
+//    public static String getDB2ClientLevel()
+//    {
+//       String level = (String)actualValues.get(DB2CLIENTLEVEL);
+//       if (level == null)
+//       {
+//          String outstr = getDb2levelOutput();
+//          if (outstr != null)
+//          {
+//             int p = outstr.indexOf("\"SQL");
+//             if (p > -1)
+//             {
+//                level = outstr.substring(p+4, p+9);
+//                actualValues.put(DB2CLIENTLEVEL, level);
+//             }
+//             else
+//             {
+//               // dump out the string for now since there is no error handling.... cwu
+//               System.out.println( "Unexpected output from db2level: " + outstr );
+//             }
+//          }
+//       }
+//       return level;
+//    }
+//    
+//    /**
+//     * Returns the DB2 client version, such as 8.
+//     */
+//    public static int getDB2ClientVersion()
+//    {
+//       Integer actualValue = (Integer)actualValues.get(DB2CLIENTVERSION);
+//       
+//       if (actualValue == null)
+//       {
+//          String storedValue = null;
+//          if (Platform.getExtensionRegistry() != null)
+//             storedValue = (String)getStoredValue(DB2CLIENTVERSION, null);
+//          
+//          if (storedValue == null || storedValue.equals (""))
+//          	// note that getImplValue returns type Integer for key = DB2CLIENTVERSION (see code)
+//          	actualValue = (Integer)getImplValue(DB2CLIENTVERSION);
+//                    
+//          if (actualValue == null || actualValue.intValue() == 0) {
+//          	// FIXME Currently, it doesn't look like setDefault is ever called with the key DB2CLIENTVERSION!
+//          	String defaultValue = (String)getDefault(DB2CLIENTVERSION);
+//          
+//            if (defaultValue != null)
+//            	actualValue = new Integer (defaultValue);
+//          }  
+//       }
+//       if (actualValue == null)
+//          return 0;
+//       else 
+//          return actualValue.intValue();
+//    }
+//    /**
+//     * Returns the DB2 client version, such as 8.
+//     */
+//    public static Integer getDB2ClientVersionImpl()
+//    {
+//       Integer version = null;
+//       String level = getDB2ClientLevel();
+//       if (level != null && level.length() > 1)
+//       {
+//          String ver = level.substring(0,2);
+//          try
+//          {
+//             version = Integer.valueOf(ver, 10);
+//             actualValues.put(DB2CLIENTVERSION, version);
+//          }
+//          catch (NumberFormatException e) {}
+//       }
+//       return version;
+//    }
+//    
+//    /**
+//     * Returns true if we can find the modification level of a local DB2 client.
+//     * @return True if a DB2 client modification level
+//     * is found using a given implementation
+//     * or native JNI call; false otherwise.
+//     */
+//    public static synchronized boolean hasDB2ClientVersionImpl()
+//    {
+//       Integer value = (Integer)getImplValue(DB2CLIENTVERSION);
+//       return (value != null && value.intValue() > 0);
+//    }
+//    
+//    /**
+//     * Returns the DB2 client release, such as 2.
+//     */
+//    public static int getDB2ClientRelease()
+//    {
+//       Integer value = (Integer)actualValues.get(DB2CLIENTRELEASE);
+//       if (value == null)
+//       {
+////         value = (Integer)getStoredValue(DB2CLIENTRELEASE, null);
+////         if (value == null || value.intValue() == 0)
+////            value = (Integer)getImplValue(DB2CLIENTRELEASE);
+////         if (value == null || value.intValue() == 0)
+////            value = (Integer)getDefault(DB2CLIENTRELEASE);
+//         
+//         String storedValue = null;
+//         if (Platform.getExtensionRegistry() != null)
+//            storedValue = (String)getStoredValue(DB2CLIENTRELEASE, null);
+//         
+//         if (storedValue == null || storedValue.equals (""))
+//          value = (Integer)getImplValue(DB2CLIENTRELEASE);
+//                   
+//         if (value == null || value.intValue() == 0) 
+//         {
+//           String defaultValue = (String)getDefault(DB2CLIENTRELEASE);
+//             
+//           if (defaultValue != null)
+//             value = new Integer (defaultValue);
+//         } 
+//       }         
+//
+//       if (value == null)
+//          return 0;
+//       else 
+//          return value.intValue();
+//    }
+//
+//    /**
+//     * Returns the DB2 client release, such as 2.
+//     */
+//    public static Integer getDB2ClientReleaseImpl()
+//    {
+//       Integer release = null;
+//       String level = getDB2ClientLevel();
+//       if (level != null && level.length() > 3)
+//       {
+//          String rel = level.substring(2,4);
+//          try
+//          {
+//             release = Integer.valueOf(rel, 10);
+//             actualValues.put(DB2CLIENTRELEASE, release);
+//          }
+//          catch (NumberFormatException e) {}
+//       }
+//       return release;
+//    }
+//    
+//    /**
+//     * Returns true if we can find the modification level of a local DB2 client.
+//     * @return True if a DB2 client modification level
+//     * is found using a given implementation
+//     * or native JNI call; false otherwise.
+//     */
+//    public static synchronized boolean hasDB2ClientReleaseImpl()
+//    {
+//       Integer value = (Integer)getImplValue(DB2CLIENTRELEASE);
+//       return (value != null && value.intValue() > 0);
+//    }
+//    
+//    /**
+//     * Returns the DB2 client modification, such as 2.
+//     */
+//    public static int getDB2ClientModification()
+//    {
+//       Integer value = (Integer)actualValues.get(DB2CLIENTMODIFICATION);
+//       if (value == null)
+//       {
+//      	  String valueStr = (String)getStoredValue(DB2CLIENTMODIFICATION, null);
+//      	  if ((valueStr != null) && (valueStr.length() > 0)) {
+//            try {
+//							value = Integer.parseInt(valueStr);
+//						} catch (NumberFormatException e) {
+//						}
+//      	  }
+//          if (value == null || value.intValue() == 0)
+//             value = (Integer)getImplValue(DB2CLIENTMODIFICATION);
+//          if (value == null || value.intValue() == 0)
+//             value = (Integer)getDefault(DB2CLIENTMODIFICATION);
+//       }
+//       if (value == null)
+//          return 0;
+//       else 
+//          return value.intValue();
+//    }
+//    /**
+//     * Returns the DB2 client modification, such as 2.
+//     */
+//    public static Integer getDB2ClientModificationImpl()
+//    {
+//       Integer modification = null;
+//       String level = getDB2ClientLevel();
+//       if (level != null && level.length() > 4)
+//       {
+//          String mod = level.substring(4);
+//          try
+//          {
+//             modification = Integer.valueOf(mod, 10);
+//             actualValues.put(DB2CLIENTMODIFICATION, modification);
+//          }
+//          catch (NumberFormatException e) {}
+//       }
+//       return modification;
+//    }
+//
+//    /**
+//     * Returns true if we can find the modification level of a local DB2 client.
+//     * @return True if a DB2 client modification level
+//     * is found using a given implementation
+//     * or native JNI call; false otherwise.
+//     */
+//    public static synchronized boolean hasDB2ClientModificationImpl()
+//    {
+//       Integer value = (Integer)getImplValue(DB2CLIENTMODIFICATION);
+//       return (value != null && value.intValue() > 0);
+//bgp>    }
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/CloneUtil.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/CloneUtil.java
new file mode 100644
index 0000000..556bbac
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/CloneUtil.java
@@ -0,0 +1,1225 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Vector;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentService;
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentServiceImpl;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.Privilege;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.SQLAccessControlPackage;
+import org.eclipse.datatools.modelbase.sql.constraints.PrimaryKey;
+import org.eclipse.datatools.modelbase.sql.constraints.SQLConstraintsPackage;
+import org.eclipse.datatools.modelbase.sql.datatypes.CharacterStringDataType;
+import org.eclipse.datatools.modelbase.sql.schema.Dependency;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.emf.common.util.EMap;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.ENamedElement;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.impl.EStringToStringMapEntryImpl;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.util.EObjectEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.FeatureMap;
+import org.eclipse.emf.ecore.util.FeatureMapUtil;
+import org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl;
+
+public class CloneUtil {
+	
+	static private Hashtable packages = getProviders(); 
+	
+	static private Hashtable requiredFeatures = getRequiredFeatures();
+ 
+	private static ClientConfiguration client = new ClientConfiguration(ClientConfiguration.CLONE_UTIL);
+	
+	public static EObject[] clone(EObject targetContainer, EObject obj) {
+		return cloneWithElementMap(targetContainer, obj, new HashMap());
+	}
+	
+	public static EObject[] clone(EObject[] targetContainers, EObject[] objs) {
+		return cloneWithElementMap(targetContainers, objs, new HashMap());
+	}
+	
+	public static EObject[] cloneWithElementMap(final EObject targetContainer, final EObject obj, final Map map) 
+    {
+	    return cloneWithElementMap(targetContainer, obj, map, false, true);
+    }
+	
+	//This is the one used by Compare and Sync.
+	public static EObject[] cloneWithElementMap(final EObject targetContainer, final EObject obj, final Map map, boolean cloneCrossModelExternalReferenced) 
+    {
+	    return cloneWithElementMap(targetContainer, obj, map, false, true, cloneCrossModelExternalReferenced);
+    }
+
+	public static EObject[] cloneWithElementMap(final EObject[] targetContainers, final EObject[] objs, final Map map) {
+	    return cloneWithElementMap(targetContainers,objs,map,false,true);
+	}
+
+    public static EObject[] cloneWithElementMap(final EObject targetContainer, final EObject obj, final Map map, final boolean isCut, final boolean cloneExternalReferenced) 
+    {
+        final List result = new ArrayList(1);
+//<bgp        DB2PluginActivator.getInstance().getCommandManager().runCommand(new Runnable()
+//        {
+//            public void run()
+//            {
+//                result.add(cloneWithElementMap2(new EObject[] {targetContainer}, new EObject[] {obj}, map, new LinkedList(), new LinkedList(),isCut, cloneExternalReferenced, true));
+//            }
+//bgp>        });
+        return (EObject[]) result.toArray(new Object[1])[0];
+    }
+
+    public static EObject[] cloneWithElementMap(final EObject targetContainer, final EObject obj, final Map map, final boolean isCut, final boolean cloneExternalReferenced, final boolean cloneCrossModelExternalReferenced) 
+    {
+        final List result = new ArrayList(1);
+//<bgp        DB2PluginActivator.getInstance().getCommandManager().runCommand(new Runnable()
+//        {
+//            public void run()
+//            {
+//            	result.add(cloneWithElementMap2(new EObject[] {targetContainer}, new EObject[] {obj}, map, new LinkedList(),new LinkedList(),isCut, cloneExternalReferenced, cloneCrossModelExternalReferenced));
+//            }
+//bgp>        });
+        return (EObject[]) result.toArray(new Object[1])[0];
+    }
+   
+    public static EObject[] cloneWithElementMap(final EObject[] targetContainers, final EObject[] objs, final Map map, final boolean isCut, final boolean cloneExternalReferenced)
+    {
+        final List result = new ArrayList(1);
+//<bgp        DB2PluginActivator.getInstance().getCommandManager().runCommand(new Runnable()
+//        {
+//            public void run()
+//            {
+//                result.add(cloneWithElementMap2(targetContainers, objs, map, isCut, cloneExternalReferenced));
+//            }
+//bgp>        });
+        return (EObject[]) result.toArray(new Object[1])[0];
+    }
+    
+    public static EObject[] cloneWithElementMap(final EObject targetContainer, final EObject obj, final Map map, final Collection containmentExclusion, final Collection externalExclusion, final boolean isCut, final boolean cloneExternalReferenced, final boolean cloneCrossModelExternalReferenced) 
+    {
+        final List result = new ArrayList(1);
+//<bgp        DB2PluginActivator.getInstance().getCommandManager().runCommand(new Runnable()
+//        {
+//            public void run()
+//            {
+//            	result.add(cloneWithElementMap2(new EObject[] {targetContainer}, new EObject[] {obj}, map, containmentExclusion, externalExclusion ,isCut, cloneExternalReferenced, cloneCrossModelExternalReferenced));
+//            }
+//bgp>        });
+        return (EObject[]) result.toArray(new Object[1])[0];
+    }
+    
+    public static EObject[] cloneWithElementMap(final EObject targetContainer, final EObject obj, final Map map, final Collection containmentExclusion, final boolean isCut, final boolean cloneExternalReferenced, final boolean cloneCrossModelExternalReferenced) 
+    {
+        final List result = new ArrayList(1);
+//<bgp        DB2PluginActivator.getInstance().getCommandManager().runCommand(new Runnable()
+//        {
+//            public void run()
+//            {
+//            	result.add(cloneWithElementMap2(new EObject[] {targetContainer}, new EObject[] {obj}, map, containmentExclusion, new LinkedList(),isCut, cloneExternalReferenced, cloneCrossModelExternalReferenced));
+//            }
+//bgp>        });
+        return (EObject[]) result.toArray(new Object[1])[0];
+    }
+    
+    public static void updateReferencesToCloned(EObject[] clonedObjects, ResourceSet resourceSet) {
+    	for(int i=0; i<clonedObjects.length; i++) {
+    		EObject anObj = clonedObjects[i];
+    		Collection affectedObjs = EcoreUtil.UsageCrossReferencer.find(anObj, resourceSet);
+        	Iterator itor = affectedObjs.iterator();
+        	while (itor.hasNext()) {
+				try {
+					EStructuralFeature.Setting setting = (EStructuralFeature.Setting) itor.next();
+					EObject referencingEObject = setting.getEObject();
+					EStructuralFeature eStructuralFeature = setting.getEStructuralFeature();
+					// Containment relationship is taken care of by reParent().  Performance??
+					if (underContainer(anObj, referencingEObject) || underContainer(referencingEObject, anObj)) { 
+						continue;
+					}
+
+					if (eStructuralFeature.isChangeable()) {
+						if(!eStructuralFeature.isMany()) {
+							referencingEObject.eSet(eStructuralFeature, anObj);
+						}
+					}
+				} catch (Exception e) {
+					//e.printStackTrace();
+				}
+			}
+    	}
+    }
+    
+	private static EObject[] cloneWithElementMap2(EObject[] targetContainers, EObject[] objs, Map originalMap, Collection containmentExclusion, Collection externalExclusion, boolean isCut, boolean cloneExternalReferenced, boolean cloneCrossModelExternalReferenced) {
+		LinkedHashMap map = new  LinkedHashMap(originalMap);
+		List sourceContainers = new ArrayList();
+		final ContainmentService service = ContainmentServiceImpl.INSTANCE;
+		for(int i=0; i<targetContainers.length; ++i) {
+	    	final EObject targetContainer = targetContainers[i];
+	    	final EObject source = objs[i];
+			final EObject sourceContainer = service.getContainer(source);
+			sourceContainers.add(sourceContainer);
+			final EObject targetRoot = (targetContainer == null)? null : service.getRootElement(targetContainer);
+			final EObject sourceRoot = service.getRootElement(source);
+			if(targetContainer == null || targetRoot.eClass() != sourceRoot.eClass()) {
+				if (isCut) {
+					map.put(source,source);
+				} else {
+					Collection exclude = findAllObjectsWithRequiredExternalReference(source);
+					Map containmentMap = cloneContainmentHierarchy(source, exclude);
+					map.putAll(containmentMap);
+				}
+		    }
+		    else {
+		    	EObject commonContainer = getLeastCommonContainer(sourceContainer, targetContainer);
+		    	if (isCut) {  //if cut/paste don't clone the object and containment
+			    	map.put(source,source);
+		    	} else {
+					Map containmentMap = cloneContainmentHierarchy(source, containmentExclusion);
+					map.putAll(containmentMap);
+		    	}
+		    	if (commonContainer == null && !map.containsKey(sourceRoot)) {
+		    		map.put(sourceRoot, targetRoot);
+		    	}
+				mapContainers(sourceContainer, targetContainer, map);
+		    }
+	    }
+
+		List containers = new LinkedList();
+	    if (cloneExternalReferenced) {   //clone referenced element, like copy from SE to PE
+		    for(int i=0; i<targetContainers.length; ++i) {
+		    	final EObject targetContainer = targetContainers[i];
+		    	final EObject source = objs[i];
+				final EObject sourceContainer = service.getContainer(source);
+				final EObject targetRoot = (targetContainer == null)? null : service.getRootElement(targetContainer);
+				final EObject sourceRoot = service.getRootElement(source);
+		    	final EObject commonContainer = getLeastCommonContainer(sourceContainer, targetContainer);
+	
+				if(targetContainer != null && targetRoot.eClass() == sourceRoot.eClass()) {
+					if(targetContainer != null && targetRoot.eClass() == sourceRoot.eClass()) {
+						Iterator it = findAllRequiredExternalReferencedObjects(source, map).iterator();
+						while(it.hasNext()) {
+							EObject o = (EObject) it.next();
+							if (!cloneCrossModelExternalReferenced && isCrossModelObject(o,source)) continue; //do not clone the cross model referenced obj
+							if (externalExclusion.contains(o)) continue;
+							if(commonContainer == null || underContainer(o, commonContainer)) { 		
+								findOrCloneExternalObject(o, targetRoot, containers, map);
+							}
+						}
+				    }
+			    }
+		    }
+	    }
+	    
+	    
+	    //if cut/paste then do not copy its reference.
+	    if (isCut) {
+			for(int i=0; i<targetContainers.length; ++i) {
+		    	final EObject targetContainer = targetContainers[i];
+		    	final EObject source = objs[i];
+				final EObject sourceContainer = service.getContainer(source);
+				if(targetContainer != null) {
+					reParent(source,sourceContainer,targetContainer,map);
+				}
+			}
+	    } else {
+			Set exclusion = new HashSet(containmentExclusion);
+			exclusion.addAll(externalExclusion);
+	    	List keySet = new LinkedList(map.keySet());
+			Iterator it  = keySet.iterator();
+			while(it.hasNext()) {
+				EObject obj = (EObject) it.next();
+				if (sourceContainers.contains(obj)) continue;
+				//ODA also calls this method with a non-empty map. The change has caused regression
+				//in their test cases. Comment out the change for now.
+				//(JYEH)WSDBU00261140 Sev 2 Core:SVT - commands generated contain stmts not selected to be copied
+				//If this method is called from a compare and sync copy operation, the originalMap is not empty. 
+				//We should only consider calling the copyReference for those objects drawn into the map
+				//so far during the invocation of this method.
+				//Or we may end up calling the copyReference for those unrelated objects and
+				//seeing the weird result as described in the defect.
+
+				//if (originalMap.containsKey(obj)) continue;
+				copyReference(map, obj,exclusion,!cloneExternalReferenced || !cloneCrossModelExternalReferenced);    
+			}
+	    }
+	    
+	    for(int i=objs.length-1; i>=0; --i) {
+			EObject cloned = (EObject) map.get(objs[i]);
+			containers.add(0, cloned);	  
+
+			//source obj is a root object which has no parent
+			EStructuralFeature feature = service.getContainmentFeature(objs[i]);
+			if (feature == null && underContainer(cloned, targetContainers[i])) {
+				continue;
+			}
+			if(feature == null) {
+			}
+			else if(feature.isMany()){
+				Collection l = (Collection) targetContainers[i].eGet(feature);
+				if (!l.contains(cloned)) {
+					l.add(cloned);
+				}
+			}
+			else {
+				targetContainers[i].eSet(feature,cloned);
+			}
+	    }
+
+	    originalMap.putAll(map);
+	    EObject[] r = new EObject[containers.size()];
+		containers.toArray(r);
+		
+		// modify namespace if LDM model
+		IPostprocessProvider exe = 
+			PostProcessingRegistryReader.getInstance().getPostProcessingExecutable();
+		if (exe != null)
+		{
+			exe.postProcess(r);		
+		}		
+		
+		return r;
+	}
+	
+	private static EObject[] cloneWithElementMap2(EObject[] targetContainers, EObject[] objs, Map map, boolean isCut, boolean cloneExternalReferenced) {
+		return cloneWithElementMap2(targetContainers, objs, map, new LinkedList(), new LinkedList(), isCut, cloneExternalReferenced, true);
+	}
+
+	public static Collection findAllObjectsWithRequiredExternalReference(EObject container) {
+		final ContainmentService service = ContainmentServiceImpl.INSTANCE;
+		Set internal = new HashSet();
+		internal.add(container);
+		internal.addAll(service.getAllContainedElements(container));
+
+		Set goodObjects = new HashSet();
+		Set badObjects = new HashSet();
+		Set visited = new HashSet();
+		Iterator it = internal.iterator();
+		while(it.hasNext()) {
+		    EObject e = (EObject) it.next();
+		    if(!visited.contains(e)) {
+		        hasRequiredExternalReference(e, internal, goodObjects, badObjects, visited);
+		    }
+		}
+		
+		return badObjects;
+	}
+	
+	public static EObject findMappedElement(EObject x, Map map) {
+		if(map.containsKey(x)) return (EObject) map.get(x);
+		final ContainmentService service = ContainmentServiceImpl.INSTANCE;
+	    List containers = service.getAllContainers(x);
+	    containers.add(x);
+	    Iterator it = containers.iterator();
+	    EObject current = null;
+	    EObject currentTarget = null;
+	    while ((currentTarget == null) && it.hasNext()) {
+		    current = (EObject) it.next();
+		    currentTarget = (EObject) map.get(current);
+	    }
+	    if(currentTarget == null) return null;
+	    while(it.hasNext()) {
+		    current = (EObject) it.next();
+		    EObject like = (EObject) map.get(current);
+		    
+		    if(like == null) {
+		        like = findChildLike(currentTarget, current);
+		        if(like != null) {
+			        map.put(current, like);		        	
+		        }
+		    }
+		    
+		    if(like == null) {
+		    	return null;
+		    }
+		    else {
+		        currentTarget = like;
+		    }
+	    }
+	    return currentTarget;
+	}
+
+	public static Collection findAllRequiredExternalReferencedObjects(EObject container, Map map) {
+		final ContainmentService service = ContainmentServiceImpl.INSTANCE;
+		Set internal = new HashSet();
+		Set external = new HashSet();
+		internal.add(container);
+		internal.addAll(service.getAllContainedElements(container));
+
+		Iterator it = internal.iterator();
+		while(it.hasNext()) {
+		    EObject e = (EObject) it.next();
+		    boolean useClientStrategy = false;
+			if (e instanceof Privilege) {
+				useClientStrategy = true;
+			}
+			findRequiredExternalReferencedObjects(e, internal, external, map, useClientStrategy);
+		}
+		
+		return external;
+	}
+	
+	private static void findRequiredExternalReferencedObjects(EObject obj, Collection internal, Collection external, Map map, boolean useClientStrategy) 
+	{
+		final ContainmentService service = ContainmentServiceImpl.INSTANCE;
+		Iterator it = obj.eClass().getEAllReferences().iterator();
+		while(it.hasNext()) {
+			EReference reference = (EReference) it.next();
+			if(isRequired(reference) || isRequired(reference,obj)) {
+				if(reference.isMany()) {
+					Object collection = null;
+					if (useClientStrategy) {
+						try {
+							collection = (Collection) ClientStrategyResolver.getInstance().getObjects(obj, reference, client);
+						} catch (ClientStrategyResolverException exception) {
+							collection = (Collection) obj.eGet(reference);
+						}
+					} else {
+						collection = (Collection) obj.eGet(reference);
+					}
+					Iterator refs = ((Collection) collection).iterator();
+					while(refs.hasNext()) {
+						EObject referenced = (EObject) refs.next();
+						if(internal.contains(referenced)) continue;
+						if(external.contains(referenced)) continue;
+						external.add(referenced);
+						if(findMappedElement(referenced, map) == null) {
+							findRequiredExternalReferencedObjects(referenced, internal, external, map, useClientStrategy);
+						}
+						Iterator containers = service.getAllContainers(referenced).iterator();
+						while(containers.hasNext()) {
+						    EObject container = (EObject) containers.next();
+						    if(!external.contains(container)) {
+								external.add(container);
+								if(findMappedElement(container, map) == null) {
+									findRequiredExternalReferencedObjects(container, internal, external, map, useClientStrategy);
+								}
+						    }
+						}
+					}
+				}
+				else {				
+					EObject referenced = null;
+					if (useClientStrategy) {
+						referenced = (EObject) ClientStrategyResolver.getInstance().getObject(obj, reference, client);
+					}
+					if (referenced == null) {
+						referenced = (EObject) obj.eGet(reference);
+					}
+					if(referenced != null) {
+						if(internal.contains(referenced)) continue;
+						if(external.contains(referenced)) continue;
+						external.add(referenced);
+						if(findMappedElement(referenced, map) == null) {
+							findRequiredExternalReferencedObjects(referenced, internal, external, map, useClientStrategy);
+						}
+						Iterator containers = service.getAllContainers(referenced).iterator();
+						while(containers.hasNext()) {
+						    EObject container = (EObject) containers.next();
+						    if(!external.contains(container)) {
+								external.add(container);
+								if(findMappedElement(container, map) == null) {
+									findRequiredExternalReferencedObjects(container, internal, external, map, useClientStrategy);
+								}
+						    }
+						}
+					}
+				}
+			}
+		}
+	}
+	
+	public static EObject findOrCloneExternalObject(EObject x, EObject targetRoot, Collection addedContainers, Map clonedMap) {
+		final ContainmentService service = ContainmentServiceImpl.INSTANCE;
+	    List containers = service.getAllContainers(x);
+	    containers.add(x);
+	    //comment out the following line so that there is a chance to clone x in the target
+	    //even though x does not have a logical container. (10/3/2013)
+	    //if(containers.size() == 1) return targetRoot; 
+	    Iterator it = containers.iterator();
+//	    EObject current = (EObject) it.next();
+	    EObject current = null;
+	    EObject currentTarget = targetRoot;
+	    while(it.hasNext()) {
+	    	current = (EObject) it.next();
+		    EObject like = (EObject) clonedMap.get(current);
+		    
+		    if(like == null) {
+		        like = findChildLike(currentTarget, current);
+		        if(like != null) {
+			        clonedMap.put(current, like);		        	
+		        }
+		    }
+		    
+		    if(like == null) {
+		        /* Get the cloning information provider, if there is
+		         * one, for the current source object. */
+		        ICloningInfoProvider cip = getProvider(current);
+		          
+		        /* If there is a cloning info provider and it indicates 
+		         * the objects containment hierarchy should be cloned 
+		         * when the object is externally referenced then clone 
+		         * the hierarchy. */ 
+		        if (cip != null &&
+		            cip.cloneContainmentHierarchyOnExtRef(current)) {
+		            Map containmentMap = cloneContainmentHierarchy(current, new LinkedList());
+		            clonedMap.putAll(containmentMap);
+		            currentTarget = (EObject)containmentMap.get(current);
+		            addedContainers.add(currentTarget);
+		        }
+		        else {
+		            EObject cloned = cloneSingleObject(current); 
+		            clonedMap.put(current, cloned); 
+		            currentTarget = cloned; 
+		            addedContainers.add(cloned); 
+		        }
+		          
+		    }
+		    else {
+		        currentTarget = like;
+		    }
+	    }
+	    
+	    return currentTarget;
+	}
+	
+	public static EObject findChildLike(EObject container, EObject like) {
+		final ContainmentService service = ContainmentServiceImpl.INSTANCE;
+		EStructuralFeature feature = service.getContainmentFeature(like);
+		if ( feature != null && !feature.getContainerClass().isAssignableFrom(container.getClass())) return null;
+		if(feature == null) {
+		    Iterator it = service.getContainedElements(container).iterator();
+		    while(it.hasNext()) {
+		        EObject child = (EObject) it.next();
+		        if(service.getContainmentFeature(child) == null) {
+		            if(match(child, like)) return child;
+		        }
+		    }
+		}
+		else if(feature.isMany()){
+		    Iterator it = ((Collection) container.eGet(feature)).iterator();
+		    while(it.hasNext()) {
+		        EObject child = (EObject) it.next();
+	            if(match(child, like)) return child;
+		    }
+		    it = service.getContainedElements(container).iterator();
+		    while(it.hasNext()) {
+		        EObject child = (EObject) it.next();
+	            if(match(child, like)) return child;
+		    }
+		}
+		else {
+		    EObject child = (EObject) container.eGet(feature);
+		    return child;
+		}
+	    return null;
+	}
+	
+	private static boolean match(EObject e1, EObject e2) {
+	    if(e1.eClass() != e2.eClass()) return false;
+	    if (SQLAccessControlPackage.eINSTANCE.getPrivilege().isSuperTypeOf(e1.eClass()))
+	    	return AccessControlUtilities.match((Privilege)e1,(Privilege)e2);
+
+	    if (SQLConstraintsPackage.eINSTANCE.getPrimaryKey().isSuperTypeOf(e1.eClass())) {
+	    	if (((PrimaryKey)e1).getMembers().size() == ((PrimaryKey)e2).getMembers().size()) return true;
+	    }
+
+	    //(JYEH)do the same thing for logical data model primary keys
+	    //except comparing the member sizes.
+	    if ("com.ibm.db.models.logical.PrimaryKey".equals(e1.eClass().getInstanceClassName())) {
+	    	return true;
+	    }
+	    
+	    if (SQLSchemaPackage.eINSTANCE.getDependency().isSuperTypeOf(e1.eClass())) {
+	    	return matchDependency((Dependency)e1, ((Dependency)e2));
+	    }
+	    
+	    if(e1 instanceof ENamedElement) {
+	        String name1 = ((ENamedElement) e1).getName();
+	        String name2 = ((ENamedElement) e2).getName();
+	        if(name1 != null) return name1.equals(name2);
+	        if(name2 != null) return name2.equals(name1);
+	    }
+
+
+		final ContainmentService service = ContainmentServiceImpl.INSTANCE;
+		EStructuralFeature feature = service.getContainmentFeature(e1);
+		if(feature.isMany()) {
+			Object v1 = service.getContainer(e1).eGet(feature);
+			Object v2 = service.getContainer(e2).eGet(feature);
+			if(v1 instanceof List) {
+				return ((List) v1).indexOf(e1) == ((List) v2).indexOf(e2); 
+			}
+			return true;
+		}
+	    else {
+		    return true;	    	
+	    }
+	}
+	
+	private static boolean matchDependency(Dependency d1, Dependency d2) {
+
+		EObject e1 = d1.getTargetEnd();
+		EObject e2 = d2.getTargetEnd();
+
+		if (e1.eClass() != e2.eClass())
+			return false;
+		if (e1 instanceof ENamedElement) {
+			String name1 = ((ENamedElement) e1).getName();
+			String name2 = ((ENamedElement) e2).getName();
+			if (name1 != null)
+				return name1.equals(name2);
+			if (name2 != null)
+				return name2.equals(name1);
+		}
+
+		return false;
+	}
+	
+	public static EObject getLeastCommonContainer(EObject obj1, EObject obj2) {
+		if(obj1 == null || obj2 == null) return null;
+		if(obj1 == obj2) return obj1;
+		final ContainmentService service = ContainmentServiceImpl.INSTANCE;
+		EObject common = null;
+	    List containers1 = service.getAllContainers(obj1);
+	    List containers2 = service.getAllContainers(obj2);
+	    Iterator i1 = containers1.iterator();
+	    Iterator i2 = containers2.iterator();
+	    while(i1.hasNext() && i2.hasNext()) {
+	    	Object c1 = i1.next();
+	    	Object c2 = i2.next();
+	    	if(c1 == c2) {
+	    		common = (EObject) c1;
+	    	}
+	    }
+		return common;
+	}
+	
+	public static boolean underContainer(EObject obj, EObject container) {
+		final ContainmentService service = ContainmentServiceImpl.INSTANCE;
+	    return service.getAllContainers(obj).contains(container);
+	}
+	
+	public static void mapContainers(EObject srcContainer, EObject tgtContainer, Map map) {
+		if(srcContainer == null || tgtContainer == null) return;
+		final ContainmentService service = ContainmentServiceImpl.INSTANCE;
+	    List srcContainers = service.getAllContainers(srcContainer);
+	    srcContainers.add(srcContainer);
+	    List tgtContainers = service.getAllContainers(tgtContainer);
+	    tgtContainers.add(tgtContainer);
+	    if(srcContainers.size() == tgtContainers.size()) {
+	    	Iterator src = srcContainers.iterator();
+	    	Iterator tgt = tgtContainers.iterator();
+	    	while(src.hasNext()) {
+	    		map.put(src.next(), tgt.next());
+	    	}
+	    } else {
+	    	
+	    	//Fix for issue wsdbu00696928
+	    	//When copy a entity and paste to its parent package, can not reach the map statement
+//	    	if (!srcContainers.contains(tgtContainer)) {
+	    	//Fix defect 23607
+	    	if (!map.containsKey(srcContainer)) {
+	    		map.put(srcContainer,tgtContainer);
+	    	}
+	    }
+	}
+
+	private static boolean hasRequiredExternalReference(EObject obj, Collection internals, Collection goodObjects, Collection badObjects, Collection visited) {
+		visited.add(obj);
+		Iterator it = obj.eClass().getEAllReferences().iterator();
+		while(it.hasNext()) {
+			EReference reference = (EReference) it.next();
+			if(isRequired(reference) || isRequired(reference,obj)) {
+				if(reference.isMany()) {
+					Iterator refs = ((Collection) obj.eGet(reference)).iterator();
+					while(refs.hasNext()) {
+						EObject referenced = (EObject) refs.next();
+						if(badObjects.contains(referenced)) return true;
+						if(goodObjects.contains(referenced)) continue;
+						if(visited.contains(referenced)) continue;
+						if(internals.contains(referenced)) {
+							boolean good = hasRequiredExternalReference(referenced, internals, goodObjects, badObjects, visited);
+							if(good) continue;
+						}
+						badObjects.add(obj);
+						return true;						
+					}
+				}
+				else {
+					EObject referenced = (EObject) obj.eGet(reference);
+					if(referenced != null) {
+						if(badObjects.contains(referenced)) return true;
+						if(goodObjects.contains(referenced)) continue;
+						if(visited.contains(referenced)) continue;
+						if(internals.contains(referenced)) {
+							boolean good = hasRequiredExternalReference(referenced, internals, goodObjects, badObjects, visited);
+							if(good) continue;
+						}
+						badObjects.add(obj);
+						return true;
+					}
+				}
+			}
+		}
+		goodObjects.add(obj);
+		return false;
+	}
+	
+	public static void copyReference(Map map, EObject src, boolean keepOriginalReference) {
+		copyReference(map,src,new HashSet(),keepOriginalReference);
+	}
+
+	public static void copyReference(Map map, EObject src,Collection exclude, boolean keepOriginalReference) {
+		copyReference(map,src,new HashSet(),keepOriginalReference, null);
+	}
+
+	/*
+	 * This overloaded version of the copyReference method was created to handle
+	 * a special case issue in which privileges of data objects outside the
+	 * scope of a copy operation should not be accessed.  Outside of compare
+	 * synchronization operations, this method should not be directly called
+	 * without careful consideration.
+	 */
+	public static void copyReference(Map map, EObject src,Collection exclude, boolean keepOriginalReference, EObject[] copiedObjects) {
+		Iterator it = src.eClass().getEAllStructuralFeatures().iterator();
+		EObject cloned = (EObject) map.get(src); 
+		while(it.hasNext()) {
+			EStructuralFeature reference = (EStructuralFeature) it.next();
+			if (!isRequired(reference) && !isRequired(reference,src)) continue;
+			if(!reference.isChangeable()) continue;
+			if(reference.isDerived()) continue;
+			
+			// Only copy privileges references which pertain to the selected objects to be
+			//   copied.
+			if (copiedObjects != null &&
+					copiedObjects.length != 0 &&
+					reference.equals(SQLSchemaPackage.eINSTANCE.getSQLObject_Privileges())) {
+				boolean bypass = true;
+				for (EObject obj:copiedObjects) {
+					if (obj == src) {
+						bypass = false;
+						continue;
+					}
+				}
+				if (bypass) continue;
+			}
+			
+			if(reference instanceof EReference) {
+				if(reference.isMany()) {
+					Collection srcCollection = (Collection) src.eGet(reference);
+					if(srcCollection.size() > 0) {
+						if (srcCollection instanceof EObjectEList) {
+							EObject srcContainer =(( EObjectEList)srcCollection).getEObject();
+							Collection targetCollection = (Collection) cloned.eGet(reference);
+							EObject targetContainer =(( EObjectEList)targetCollection).getEObject();
+							if (!targetContainer.getClass().isAssignableFrom(srcContainer.getClass())) {
+								continue;
+							}
+							Vector elements = new Vector();
+							if(targetCollection.size() == 0) {
+								Iterator refs = srcCollection.iterator();
+								while(refs.hasNext()) {
+									Object srcReference = refs.next();
+									if (exclude.contains(srcReference)) continue;
+									if(map.containsKey(srcReference) && srcReference != map.get(srcReference)) {
+										elements.add(map.get(srcReference));
+									}
+									else if(isRequired(reference) || isRequired(reference,src)) {
+										EObject mapped = findMappedElement((EObject) srcReference, map);
+										//Use Case: the src object is copy/pasted into the same container.
+										//For instance, a LUWPartitionGroupImpl is copy/pasted into the
+										//same database and reference is tableSpaces. A table space
+										//referenced from src is mapped to itself by the findMappedElement
+										//method. 									
+										//As soon as we add the table space from srcCollection into targetCollection,
+										//the table space will be gone from the srcCollection. This is not desirable.
+										//Another use case would be tables and their privileges.
+										//if(mapped != null) {
+										if(mapped != null && mapped != srcReference) {
+											elements.add(map.get(srcReference));
+										}
+									}
+								}
+
+								for (int i = 0; i <elements.size(); i++ ) {
+									targetCollection.add(elements.elementAt(i));
+								}
+							}
+						}
+						else if (srcCollection instanceof EMap && 
+								((EMap)srcCollection).get(0) instanceof EStringToStringMapEntryImpl) {
+							// Copy EMaps which contain String keys and values
+							//   This was added to support EAnnotation.details,
+							//   specifically for CharacterStringDataType length semantics
+							EMap targetCollection = (EMap) cloned.eGet(reference);
+							Set<String> keys = ((EMap)srcCollection).keySet();
+							Iterator<String> keyIter = keys.iterator();
+							for (String key:keys) {
+								targetCollection.put(key,((EMap)srcCollection).get(key));
+							}
+						}
+					}
+				}
+				else {
+					EObject srcReference = (EObject) src.eGet(reference);
+					if(srcReference != null) {
+						if (exclude.contains(srcReference)) continue;
+						Object targetReference = cloned.eGet(reference);
+						if(targetReference == null ) {
+							if(map.containsKey(srcReference)) {
+								cloned.eSet(reference, map.get(srcReference));
+							}
+							else if(isRequired(reference)) {
+								EObject mapped = findMappedElement((EObject) srcReference, map);
+								if(mapped != null) {
+									cloned.eSet(reference, mapped);								
+								} else if (isShallowCopyRecommended(src, reference, keepOriginalReference)){
+									cloned.eSet(reference, srcReference);								
+								}
+							}
+						}
+					}
+				}
+			}
+            else if (FeatureMapUtil.isFeatureMap(reference)) {
+                FeatureMap featureMap = (FeatureMap)src.eGet(reference);
+                FeatureMap copyFeatureMap = (FeatureMap) cloned.eGet(reference);
+                Iterator k = featureMap.iterator();
+                while(k.hasNext()) {
+                    FeatureMap.Entry featureMapEntry = (FeatureMap.Entry)k.next();
+                    EStructuralFeature feature = featureMapEntry.getEStructuralFeature();
+                    if(feature instanceof EReference) {
+                        Object referencedEObject = featureMapEntry.getValue();
+                        Object copyReferencedEObject = map.get(referencedEObject);
+                        copyFeatureMap.add(feature, copyReferencedEObject == null ? referencedEObject : copyReferencedEObject);
+                    }
+                    else {
+                        copyFeatureMap.add(featureMapEntry);
+                    }
+                }
+            }			
+		}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+	}
+
+	// Made this public for use in SynchronizationCloneUtilities - rdr 06/24/2011
+	/**
+	 * This method should only be called from the copyReference method for the purpose of determining
+	 * whether the shallow copy of a reference is recommended when the referenced object
+	 * is not mapped to the target yet.
+	 * @param src The source object whose references are being copied over to the corresponding object 
+	 *            in the target.
+	 * @param reference The particular reference under consideration.
+	 * @param keepOriginalReference The default recommendation.
+	 * @return
+	 */
+	public static boolean isShallowCopyRecommended(EObject src, EStructuralFeature reference, boolean keepOriginalReference) {
+		if (!keepOriginalReference) return false;
+		
+		//A conservative implementation.
+		boolean isRequired = true;
+		if ("Column".equals(reference.getEContainingClass().getName())) { //$NON-NLS-1$
+			if("identitySpecifier".equals(reference.getName())) { //$NON-NLS-1$
+				//It does not make sense to have the corresponding column reference the identitySpecifier that
+				//is referenced by the source column.
+				isRequired = false;
+			}
+		}
+		return isRequired;
+		//Here is an alternative solution that makes sense but may have broader impacts.
+		//From my understanding, the shallow copy of the reference makes sense only when
+		//the referenced object is in a different model.
+//		EObject srcReference = (EObject) src.eGet(reference);
+//		return isCrossModelObject(srcReference, src);
+	}
+	
+	public static Map cloneContainmentHierarchy(EObject obj, Collection exclude) {
+		final ContainmentService service = ContainmentServiceImpl.INSTANCE;
+		Map map = new  LinkedHashMap();
+
+		if(exclude.contains(obj)) return map;
+		EObject cloned = cloneSingleObject(obj);
+		map.put(obj, cloned);
+		Iterator it = service.getContainedElements(obj).iterator();
+		Set children = new HashSet();
+		while(it.hasNext()) {
+			Object o = it.next();
+			if(!exclude.contains(o)) {
+				children.add(o);
+			}
+		}
+		while(!children.isEmpty()) {
+			EObject child = (EObject) children.iterator().next();
+			EStructuralFeature feature = service.getContainmentFeature(child);
+			if(feature != null && feature.getContainerClass().isAssignableFrom(obj.getClass()))  {
+				if(feature.isMany()) {
+					Collection l = (Collection) cloned.eGet(feature);
+					it = ((Collection) obj.eGet(feature)).iterator();
+					Vector childrenVec = new Vector();
+					while(it.hasNext()) {
+						EObject c = (EObject) it.next();
+						if(children.contains(c)) {
+							childrenVec.add(c);
+						}
+					}
+					for (int iVec = 0; iVec < childrenVec.size();iVec++ ){
+						EObject c = (EObject) childrenVec.get(iVec);
+						children.remove(c);
+						map.putAll(cloneContainmentHierarchy(c, exclude));
+						l.add(map.get(c));
+						
+					}
+				}
+				else {
+					map.putAll(cloneContainmentHierarchy(child, exclude));
+					cloned.eSet(feature, map.get(child));
+					children.remove(child);					
+				}
+			}
+			else {
+				children.remove(child);				
+			}
+		}
+		return map;
+	}
+	
+	public static EObject cloneSingleObject(EObject src) {
+		EClass c = src.eClass();
+		EObject target = c.getEPackage().getEFactoryInstance().create(c);
+		Iterator it = c.getEAllAttributes().iterator();
+		while(it.hasNext()) {
+			EAttribute a = (EAttribute) it.next();
+			if(a.isChangeable() && !a.isDerived()) copyAttribute(a, src, target);
+		}
+
+		return target;
+	}
+	
+	private static void copyAttribute(EAttribute attribute, EObject src, EObject target) {
+        if(src.eIsSet(attribute)) {
+	        if (FeatureMapUtil.isFeatureMap(attribute)) {
+	            FeatureMap srcFeatureMap = (FeatureMap) src.eGet(attribute);
+	            FeatureMap tgtFeatureMap = (FeatureMap) src.eGet(attribute);
+	            Iterator i = srcFeatureMap.iterator();
+	            while(i.hasNext()) {
+	              FeatureMap.Entry entry = (FeatureMap.Entry)i.next();
+	              EStructuralFeature feature = entry.getEStructuralFeature();
+	              if(!(feature instanceof EReference)) {
+	                  tgtFeatureMap.add(entry);
+	              }
+	            }
+	        }
+	 		else if(attribute.isMany()) {
+	 			((Collection)target.eGet(attribute)).addAll((Collection) src.eGet(attribute));
+	        }
+	        else {	        	
+	        	String attrType = attribute.getName();
+	        	if (!("namespace".equalsIgnoreCase(attrType) || "namespaceSupported".equalsIgnoreCase(attrType))) //$NON-NLS-1$
+				{	        	
+	        		target.eSet(attribute, src.eGet(attribute));
+				}
+	        }
+	 	}
+	}
+	
+	// Made this public for use in SynchronizationCloneUtilities - rdr 06/24/2011
+	public static boolean isRequired(EStructuralFeature feature) {
+		//This method is a hot spot in the performance profile. The code has been enhanced
+		//using a hash table mechanism. From now on, exceptions should be added through the
+		//new extension point, requiredFeature.
+		Hashtable featureNames = (Hashtable)requiredFeatures.get(feature.getEContainingClass().getName());
+		if (featureNames != null) {
+			Boolean booleanObj = (Boolean)featureNames.get(feature.getName());
+			if (booleanObj != null) return booleanObj.booleanValue();
+		}
+
+		if (feature.isRequired())
+			return true;
+		if (!feature.isMany()) {
+			if (feature instanceof EReference) {
+				EReference ref = (EReference) feature;
+				EReference opposite = ref.getEOpposite();
+				if (opposite == null)
+					return true;
+				if (opposite.isMany())
+					return true;
+			}
+		}
+
+		return false;
+	}
+
+	// This method was added specifically to allow the length semantics to be copied for
+	//   character string data types.  If other applications are found for this method, it
+	//   may improve performance to use an extension-point, as with isRequired(EStructuralFeature)
+	// This method was used instead of the requiredFeatures extension-point because that
+	//   extension-point only allows the qualification of the feature by its defining
+	//   container (in the eAnnotations case, that is EModelElement, which would make ALL
+	//   eAnnotations "required").  We still rely on the requiredFeatures extension-point
+	//   to make the details feature of EAnnotation required.
+	public static boolean isRequired(EStructuralFeature feature,EObject obj) {
+		if (feature != null && 
+				obj instanceof CharacterStringDataType && 
+				feature.getName().equals("eAnnotations")) { //$NON-NLS-1$
+			return true;
+		}
+		return false;
+	}
+
+	private static void reParent(EObject obj,EObject sourceContainer, EObject targetContainer,Map map){
+		if (targetContainer == null) return;
+		EObject sourceObj = obj;
+		EObject cloned = (EObject) map.get(sourceObj);
+		final ContainmentService service = ContainmentServiceImpl.INSTANCE;
+		EStructuralFeature feature = service.getContainmentFeature(obj);
+		if(feature == null) {
+			return;
+		}
+		else if(feature.isMany()){
+			Collection l = (Collection) targetContainer.eGet(feature);
+			if (!l.contains(cloned)) {
+				l.add(cloned);
+			}
+		}
+		else {
+		    targetContainer.eSet(feature,cloned);
+		}
+
+		if (sourceContainer == null || targetContainer == null ) return;
+		//resource the srcObject and cloned if sourceContainer and targetContainer are in different resource file when cut/paste
+		Resource srcResource = sourceContainer.eResource();
+		Resource targetResource = targetContainer.eResource();
+		
+		if (srcResource != null && targetResource != null) {
+			if (srcResource != targetResource) {
+				if (cloned.eContainer() != targetContainer ) {
+					// keep src object ID for the cloned
+					String srcID = null;
+					if ((srcResource instanceof XMLResourceImpl) && (targetResource instanceof XMLResourceImpl)){
+		            	XMLResourceImpl srcXmlResource = (XMLResourceImpl) srcResource;
+		            	srcID = srcXmlResource.getID(sourceObj);
+		            	if(srcID != null) {
+		            		XMLResourceImpl targetXmlResource = (XMLResourceImpl) targetResource;
+		            		targetXmlResource.setID(cloned, srcID);
+		            	}
+					}
+					targetResource.getContents().add(cloned);
+					srcResource.getContents().remove(sourceObj);
+				}
+				reResource(cloned);
+			}
+		}
+	}
+	
+	public static void reResource(EObject obj){
+		final ContainmentService service = ContainmentServiceImpl.INSTANCE;
+		Resource targetResource = obj.eResource();
+		Iterator it = service.getContainedElements(obj).iterator();
+		while (it.hasNext()) {
+			EObject child = (EObject)it.next();
+			if (obj.eContents().contains(child)) {
+				reResource((EObject)child);
+				continue;
+			}
+			if (!targetResource.getContents().contains(child)) {
+				targetResource.getContents().add(child);
+				reResource((EObject)child);
+			}
+			
+		}
+	}
+
+	public static boolean isCrossModelObject(EObject obj1, EObject obj2){
+		//Note: objects from the database explorer may not have a resource associated with them
+		Resource srcResource = obj1.eResource();
+		Resource targetResource = obj2.eResource();
+		return (srcResource != null && targetResource != null && srcResource != targetResource);
+
+	}
+    private static Hashtable getProviders()
+	{
+	    Hashtable packages = new Hashtable();
+	    IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+	    IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("com.ibm.datatools.core", "CloningInfoProvider"); //$NON-NLS-1$ //$NON-NLS-2$
+	    IExtension[] extensions = extensionPoint.getExtensions();
+	    for(int i=0; i<extensions.length; ++i) {
+	      IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+	      for(int j=0; j<configElements.length; ++j) {
+	        if(configElements[j].getName().equals("cloning")) { //$NON-NLS-1$
+	          String packageURI = configElements[j].getAttribute("package"); //$NON-NLS-1$
+	          String className = configElements[j].getAttribute("class"); //$NON-NLS-1$
+	          ICloningInfoProvider provider = null;
+	          try {
+	            provider = (ICloningInfoProvider) configElements[j].createExecutableExtension("provider"); //$NON-NLS-1$
+	          }
+	          catch(CoreException e) {
+	              IStatus status = new Status(IStatus.ERROR, RDBCorePlugin.getDefault().getBundle().getSymbolicName(), IStatus.ERROR,
+	                      "The error was detected when creating the cloning info provider for " + className + " in "+ packageURI, //$NON-NLS-1$ //$NON-NLS-2$
+	                      e);
+	            RDBCorePlugin.getDefault().getLog().log(status);
+	            continue;
+	          }
+
+	          if(packages.containsKey(packageURI)) {
+	            ((Hashtable) packages.get(packageURI)).put(className, provider);
+	          }
+	          else {
+	            Hashtable classNames = new Hashtable();
+	            classNames.put(className, provider);
+	            packages.put(packageURI, classNames);
+	          }
+	        }
+	      }
+	    }
+	    return packages;
+    }
+	  
+    private static ICloningInfoProvider getProvider(EObject eObj) {
+	    EClass clazz = (EClass) eObj.eClass();
+	    String uri = clazz.getEPackage().getNsURI();
+	    if(packages.containsKey(uri)) {
+	      Hashtable classNames = (Hashtable) packages.get(uri);
+	      if(classNames.containsKey(clazz.getName())) {
+	        return (ICloningInfoProvider) classNames.get(clazz.getName());
+	      }
+	    }
+	    return null;
+	}
+
+    private static Hashtable getRequiredFeatures()
+	{
+	    Hashtable features = new Hashtable();
+	    IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+	    IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("com.ibm.datatools.core", "requiredFeature"); //$NON-NLS-1$ //$NON-NLS-2$
+	    IExtension[] extensions = extensionPoint.getExtensions();
+	    for(int i=0; i<extensions.length; ++i) {
+	      IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+	      for(int j=0; j<configElements.length; ++j) {
+	        if(configElements[j].getName().equals("featureInfo")) { //$NON-NLS-1$
+	          String containingClass = configElements[j].getAttribute("containingClass"); //$NON-NLS-1$
+	          String featureName = configElements[j].getAttribute("featureName"); //$NON-NLS-1$
+	          String isRequired = configElements[j].getAttribute("isRequired"); //$NON-NLS-1$
+	          if(features.containsKey(containingClass)) {
+	        	  ((Hashtable) features.get(containingClass)).put(featureName, new Boolean(isRequired));
+	          }
+	          else {
+	        	  Hashtable featureNames = new Hashtable();
+	        	  featureNames.put(featureName, new Boolean(isRequired));
+	        	  features.put(containingClass, featureNames);
+	          }
+	        }
+	      }
+	    }
+	    return features;
+    }
+
+    /**
+     * This API is added for use by ReferenceItemCloneCommand.
+     * This method will clone u in d2 with the exceptions as specified by the
+     * two exclusion collections as follows:
+     * The containmentExclusion is to exclude those contained within d2.
+     * The externalExclusion is to exclude those externally referenced objects from the containment hierarchy of d2.
+     * 
+     * @param d2
+     * @param u
+     * @param map
+     * @param containmentExclusion
+     * @param externalExclusion
+     * @param cloneCrossModelReference
+     * @return
+     */
+	public static EObject[] cloneWithElementMap(final EObject d2, final EObject u,
+			final Map map, final Collection containmentExclusion, final Collection externalExclusion,
+			final boolean cloneCrossModelReference) {
+        final List result = new ArrayList(1);
+//<bgp        DB2PluginActivator.getInstance().getCommandManager().runCommand(new Runnable()
+//        {
+//            public void run()
+//            {
+//            	result.add(cloneWithElementMap2(new EObject[] {d2}, new EObject[] {u}, map, containmentExclusion , externalExclusion, false, true, cloneCrossModelReference));
+//            }
+//bgp>        });
+        return (EObject[]) result.toArray(new Object[1])[0];
+	}
+
+
+	/**
+	 * This is a special version of the clone method that does not use a command.
+	 * This is used by Compare and Sync when creating a snapshot of catalog objects.
+	 * @param targetContainer
+	 * @param obj
+	 * @return
+	 */
+	public static EObject[] clone2Target(EObject targetContainer,
+			EObject obj) {
+		final List result = new ArrayList(1);
+		boolean isCut = false;
+		boolean cloneExternalReferenced = true;
+		result.add(cloneWithElementMap2(
+				new EObject[] { targetContainer }, new EObject[] { obj },
+				new HashMap(), new LinkedList(), new LinkedList(), isCut,
+				cloneExternalReferenced, true));
+		return (EObject[]) result.toArray(new Object[1])[0];
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/CommonOptions.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/CommonOptions.java
new file mode 100644
index 0000000..eb0e0fc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/CommonOptions.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.util.Vector;
+
+public class CommonOptions
+{
+  protected Vector vConfigMessage = null;
+  protected Vector vConfigVariable = null;
+
+  /**
+   * Create a structure to hold the <common_options> element in the xml config file.
+   *
+   * @param  aConfigMessages  A vector of ConfigMessage objects.
+   * @param  aConfigVariables A vector of ConfigVariable objects.
+   */
+  public CommonOptions(Vector aConfigMessages, Vector aConfigVariables) {
+    vConfigMessage = aConfigMessages;
+    vConfigVariable= aConfigVariables;
+  }
+
+  /**
+   * Get the configMessages objects.
+   *
+   * @return Vector  A vector of ConfigMessage objects.
+   */
+  public Vector getConfigMessages() {
+    return vConfigMessage;
+  }
+
+  /**
+   * Get the configVariables objects.
+   *
+   * @return Vector  A vector of ConfigVariable objects.
+   */
+  public Vector getConfigVariables() {
+    return vConfigVariable;
+  }
+
+  /**
+   * Set the configVariables objects.
+   *
+   * @param  aConfigVariables A vector of ConfigVariable objects.
+   */
+  public void   setConfigVariables(Vector aConfigVariables) {
+    vConfigVariable= aConfigVariables;
+  }
+
+  /**
+   * Set the configMessages objects.
+   *
+   * @param  aConfigMessages  A vector of ConfigMessage objects.
+   */
+  public void   setConfigMessages(Vector aConfigMessages) {
+    vConfigMessage = aConfigMessages;
+  }
+}
+
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/CompoundStatementsMap.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/CompoundStatementsMap.java
new file mode 100644
index 0000000..9d06917
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/CompoundStatementsMap.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.util.Iterator;
+import java.util.TreeMap;
+import java.util.Vector;
+
+/**
+ * This class should be used when a requested action will result in multiple
+ * DDL statements which must retain their relative ordering.  This class extends
+ * The TreeMap class, and requires a Key of type String, and a Value of type
+ * Vector<String>.  The key will be used to sort the Vectors of compound DDL
+ * statements relative to each other.  The statements within each Vector will
+ * not be sorted, but will retain the order in which they were added to the
+ * Vector.
+ * If the Value is null, the retrieval behavior of the getAll() method will
+ * assume the Value is equivalent to a Vector with a single String element 
+ * equal to its Key.
+ * 
+ * @author DonClare
+ *
+ */
+public class CompoundStatementsMap extends TreeMap<String,Vector<String>> 
+		implements IPreorderedStatementList {
+
+	public Vector<String> getAll() {
+		Vector<String> all = new Vector<String>();
+		Iterator<String> it = keySet().iterator();
+		while (it.hasNext()) {
+			String key = it.next();
+			if (get(key) == null) all.add(key);
+			else all.addAll(get(key));
+		}
+//		Iterator<Vector<String>> it = values().iterator();
+//		while (it.hasNext()) {
+//			all.addAll((Vector<String>)it.next());
+//		}
+		return all;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ConfigMessage.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ConfigMessage.java
new file mode 100644
index 0000000..70ec34f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ConfigMessage.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+public class ConfigMessage
+{
+  protected String msgText = null;
+  protected String platform = null;
+
+  /**
+   * Create a structure to hold the <message> element in the xml config file.
+   *
+   * @param  aMsgText  The msg.
+   * @param  aPlatform The platform attribute.
+   */
+  public ConfigMessage(String aMsgText, String aPlatform) {
+    msgText = aMsgText;
+    platform = aPlatform;
+  }
+
+  /**
+   * Get the msg text.
+   *
+   * @return String    The msg text.
+   */
+  public String getMsgText() {
+    return msgText;
+  }
+
+  /**
+   * Get the platform text.
+   *
+   * @return String    The platform attribute.
+   */
+  public String getPlatform() {
+    return platform;
+  }
+
+  /**
+   * Set the msg text.
+   *
+   * @param  String    The msg attribute.
+   */
+  public void setMsgText(String aMsgText) {
+    msgText = aMsgText;
+  }
+
+  /**
+   * Set the platform text.
+   *
+   * @param  String    The platform attribute.
+   */
+  public void setPlatform(String aPlatform) {
+    platform = aPlatform;
+  }
+}
+
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ConnectionProfileApp.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ConnectionProfileApp.java
new file mode 100644
index 0000000..30e79d2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ConnectionProfileApp.java
@@ -0,0 +1,292 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.util.Map;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.jobs.IJobChangeListener;
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.IConfigurationType;
+import org.eclipse.datatools.connectivity.IConnectListener;
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IConnectionProfileProvider;
+import org.eclipse.datatools.connectivity.IManagedConnection;
+import org.eclipse.datatools.connectivity.IPropertySetListener;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileProvider;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo;
+
+/**
+ * Impements IConnectionProfile because ConnectionProfile cannot be subclassed
+ * to avoid depending on the plug-in registry. This class must work
+ * outside of the Eclipse plug-in environment, such as for DeployTask.
+ * <p>
+ * The following classes do not work in a Java application, 
+ * but require the Eclipse plug-in environment:
+ * <ul>
+ * <li>org.eclipse.datatools.connectivity.drivers.DriverManager
+ * <li>DatabaseDefinitionRegistry
+ * </ul>
+ * 
+ * @author Thomas Sharp, sharpt@us.ibm.com
+ */
+public class ConnectionProfileApp implements IConnectionProfile
+{
+   protected ConnectionInfo ciApp;
+   protected String loadingPath;
+   protected Properties baseProperties;
+   /** The connected state. */
+   protected int state = IConnectionProfile.DISCONNECTED_STATE;
+   
+   private ConnectionProfileApp() {}
+   
+   public ConnectionProfileApp(ConnectionInfo conInfo)
+   {
+      ciApp = conInfo;
+   }
+
+   public ConnectionInfo getConnectionInfo()
+   {
+      return ciApp;
+   }
+
+   public String getLoadingPath() {
+      return loadingPath;
+   }
+
+   public void setLoadingPath(String path) {
+      loadingPath = path;
+   }
+   
+   public void addConnectListener(IConnectListener listener)
+   {
+      // Do nothing
+   }
+
+   public void addPropertySetListener(IPropertySetListener listener)
+   {
+      // Do nothing
+   }
+
+   public boolean arePropertiesComplete()
+   {
+      return false;
+   }
+
+   public boolean arePropertiesComplete(String type)
+   {
+      return false;
+   }
+
+   public boolean canWorkOffline()
+   {
+      return false;
+   }
+
+   public IStatus connect()
+   {
+      return null;
+   }
+
+   public void connect(IJobChangeListener listener)
+   {
+      // do nothing
+   }
+
+   public IStatus connectWithoutJob()
+   {
+      return null;
+   }
+
+   public IConnection createConnection(String factoryId, String uid, String pwd)
+   {
+	   ConnectionProfileProvider cp = new ConnectionProfileProvider("silent.provider");
+	   return cp.getConnectionFactory("java.sql.Connection").createConnection(this, uid, pwd);
+       
+   }
+
+   public IConnection createConnection(String factory)
+   {
+	   ConnectionProfileProvider cp = new ConnectionProfileProvider("silent.provider");
+	   return cp.getConnectionFactory(factory).createConnection(this);
+   }
+
+   public IStatus disconnect()
+   {
+      return null;
+   }
+
+   public void disconnect(IJobChangeListener listener)
+   {
+      // do nothing
+   }
+
+   public Properties getBaseProperties()
+   {
+      return baseProperties;
+   }
+
+   public ICategory getCategory()
+   {
+      // TODO Auto-generated method stub
+      return null;
+   }
+
+   public IConfigurationType getConfigurationType()
+   {
+      // TODO Auto-generated method stub
+      return null;
+   }
+
+   /**
+    * @return @return the connection state of this profile. One of: 
+    * IConnectionProfile.CONNECTED_STATE 
+    * or IConnectionProfile.DISCONNECTED_STATE.
+    * This does not currently support IConnectionProfile.WORKING_OFFLINE_STATE.
+    * By default, this returns the disconnected state.
+    */
+   public int getConnectionState()
+   {
+      return state;
+   }
+   
+   /**
+    * Sets the connection state. 
+    */
+   public void setConnectionState(int state)
+   {
+      this.state = state;
+   }
+
+   public String getDescription()
+   {
+      // TODO Auto-generated method stub
+      return null;
+   }
+
+   public String getInstanceID()
+   {
+      // TODO Auto-generated method stub
+      return null;
+   }
+
+   public IManagedConnection getManagedConnection(String type)
+   {
+      // TODO Auto-generated method stub
+      return null;
+   }
+
+   public String getName()
+   {
+      return ciApp.getName();
+   }
+
+   public IConnectionProfile getParentProfile()
+   {
+      // TODO Auto-generated method stub
+      return null;
+   }
+
+   public Map getProfileExtensions()
+   {
+      // TODO Auto-generated method stub
+      return null;
+   }
+
+   public Properties getProperties(String type)
+   {
+      // TODO Auto-generated method stub
+      return null;
+   }
+
+   public IConnectionProfileProvider getProvider()
+   {
+      // TODO Auto-generated method stub
+      return null;
+   }
+
+   public String getProviderId()
+   {
+      // TODO Auto-generated method stub
+      return null;
+   }
+
+   public String getProviderName()
+   {
+      // TODO Auto-generated method stub
+      return null;
+   }
+
+   public boolean isAutoConnect()
+   {
+      // TODO Auto-generated method stub
+      return false;
+   }
+
+   public boolean isConnected()
+   {
+      // TODO Auto-generated method stub
+      return false;
+   }
+
+   public void removeConnectListener(IConnectListener listener)
+   {
+      // do nothing
+   }
+
+   public void removePropertySetListener(IPropertySetListener listener)
+   {
+      // do nothing
+   }
+
+   public IStatus saveWorkOfflineData()
+   {
+      return null;
+   }
+
+   public void saveWorkOfflineData(IJobChangeListener listener)
+   {
+      // do nothing
+   }
+
+   public void setBaseProperties(Properties props)
+   {
+      baseProperties = props;
+   }
+
+   public void setConnected(boolean connected)
+   {
+      // do nothing
+   }
+
+   public void setProperties(String type, Properties props)
+   {
+      // do nothing
+   }
+
+   public boolean supportsWorkOfflineMode()
+   {
+      return false;
+   }
+
+   public IStatus workOffline()
+   {
+      return null;
+   }
+
+   public void workOffline(IJobChangeListener listener)
+   {
+      // do nothing
+   }
+   
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ConnectionProfileUtility.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ConnectionProfileUtility.java
new file mode 100644
index 0000000..d18b072
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ConnectionProfileUtility.java
@@ -0,0 +1,1022 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.sql.Connection;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.datatools.connectivity.ConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IConnectionProfileProvider;
+import org.eclipse.datatools.connectivity.IManagedConnection;
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.drivers.DriverManager;
+import org.eclipse.datatools.connectivity.drivers.IDriverMgmtConstants;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
+import org.eclipse.datatools.connectivity.internal.ManagedConnection;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinitionRegistry;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo;
+import org.eclipse.datatools.connectivity.sqm.internal.core.util.ConnectionUtil;
+import org.eclipse.datatools.connectivity.sqm.internal.core.util.DatabaseProviderHelper;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+/**
+ * Utility methods for extracting information associated with a connection profile.
+ *
+ * @author Thomas Sharp, sharpt@us.ibm.com
+ *
+ * <p>Other profile properties:
+ * <ul>
+ * <li>IZSeriesDriverDefinitionConstants.FILTER_ON_TBCREATOR_PROPERTY_ID
+ * <li>String nameValuePairs = props.getProperty(IDBConnectionProfileConstants.CONNECTION_PROPERTIES_PROP_ID);
+ * </ul>
+ */
+public class ConnectionProfileUtility
+{
+	public static final String TRUE_VALUE = "true"; //$NON-NLS-1$
+	public static final String FALSE_VALUE = "false"; //$NON-NLS-1$
+	
+	public static final String GENERIC_JDBC = "Generic JDBC"; //$NON-NLS-1$
+	public static final String GENERIC_JDBC_VERSION = "1.0"; //$NON-NLS-1$
+	public static final String ALIAS_PROPERTY = "com.ibm.datatools.db2.ui.alias.aliasName"; //$NON-NLS-1$
+	public static final String VERSON_INFO = "org.eclipse.datatools.connectivity.versionInfo"; //$NON-NLS-1$
+
+	// From public interface IOracleDriverDefinitionConstants {
+	public static final String CATALOG_TYPE_PROPERTY_ID = "org.eclipse.datatools.enablement.oracle.catalogType"; //$NON-NLS-1$
+	public static final String CATALOG_TYPE_VALUE_ALL = "ALL"; //$NON-NLS-1$
+	public static final String CATALOG_TYPE_VALUE_DBA = "DBA"; //$NON-NLS-1$
+	public static final String CATALOG_TYPE_VALUE_USER = "USER"; //$NON-NLS-1$
+	//}
+	
+	private static final char[] OS_INVALID_CHARACTERS = {'\\', '/', ':', '*', '?', '"', '<', '>', '|'};
+	private static Map<Character, String> mappedSubstitutionCharacters;
+	
+	private static Map<Character, String> getSubstitutionMap()
+	{
+		if (mappedSubstitutionCharacters == null) {
+			mappedSubstitutionCharacters = new HashMap<Character, String>();
+			for (int i = 0; i < OS_INVALID_CHARACTERS.length; i++) {
+				mappedSubstitutionCharacters.put(OS_INVALID_CHARACTERS[i], "_" + i);			 //$NON-NLS-1$
+			}
+		}
+		return mappedSubstitutionCharacters;
+	}
+	
+	public static String getSafeProfileFileName(String profileName)
+	{
+		profileName = escapeProfileName(profileName);
+		
+		StringBuilder builder = new StringBuilder();
+		for (int i = 0; i < profileName.length(); i++) {
+			char current = profileName.charAt(i);
+			String substitution = getSubstitutionMap().get(current);
+			if (substitution != null) {
+				builder.append(substitution);
+			} else {
+				builder.append(current);
+			}
+		}
+		return builder.toString();
+	}
+	
+	private static String escapeProfileName(String profileName)
+	{
+		Collection<String> reservedCharacters = getSubstitutionMap().values();
+		for (String reserved : reservedCharacters) {
+			profileName = escapeCharacter(reserved, profileName);
+		}
+		
+		return profileName;
+	}
+	
+	private static String escapeCharacter(String reservedCharacter, String profileName)
+	{
+		StringBuilder builder = new StringBuilder();
+		String[] pieces = profileName.split(reservedCharacter);
+		
+		int count = 0;
+		for (String piece : pieces) {
+			builder.append(piece);
+			if (count != pieces.length - 1) {
+				builder.append("_" + reservedCharacter);			 //$NON-NLS-1$
+			}
+			count++;
+		}
+		
+		if (profileName.endsWith(reservedCharacter)) {
+			builder.append("_" + reservedCharacter);				 //$NON-NLS-1$
+		}
+		
+		return builder.toString();
+	}
+	
+	/**
+	 * Determines if a database is connected.
+	 * @param profile An <code>IConnectionProfile</code> that describes the database.
+	 * @return True if the database is connected.
+	 */
+	public static boolean isConnected(IConnectionProfile profile)
+	{
+		if (profile == null)
+			return false;
+		else
+			return (profile.getConnectionState() == IConnectionProfile.CONNECTED_STATE);
+	}
+
+	/**
+	 * Determines if a database is cached to let you work offline.
+	 * @param profile An <code>IConnectionProfile</code> that describes the database.
+	 * @return True if the database is in "working offline" state.
+	 */
+	public static boolean isWorkingOffline(IConnectionProfile profile)
+	{
+		if (profile == null)
+			return false;
+		else
+			return (profile.getConnectionState() == IConnectionProfile.WORKING_OFFLINE_STATE);
+	}
+
+	/**
+	 * Given a profile, returns the ConnectionInfo, if available.
+	 * @param profile An <code>IConnectionProfile</code> that describes the database.
+	 */
+	public static ConnectionInfo getConnectionInfo(IConnectionProfile profile)
+	{
+		return getConnectionInfo(profile, true);
+	}
+
+	/**
+	 * Given an <code>IConnectionProfile</code>, returns the corresponding <code>ConnectionInfo</code>,
+	 * if available. This is not available unless the database is either connected or working offline.
+	 * To allow a connection, specify true for <code>okToConnect</code>.
+	 *
+	 * @param profile An <code>IConnectionProfile</code> that describes the database.
+	 * @param okToConnect True if it is OK to connect to obtain the ConnectionInfo.
+	 * @return The <code>ConnectionInfo</code> corresponding to the given profile.
+	 */
+	public static ConnectionInfo getConnectionInfo(IConnectionProfile profile, boolean okToConnect)
+	{
+		if (profile != null)
+		{
+			if (profile instanceof ConnectionProfileApp)
+				return ((ConnectionProfileApp)profile).getConnectionInfo();
+
+			boolean haveCon = false;
+			if (okToConnect && !isConnected(profile))
+			{
+				if (arePropertiesComplete(profile))
+				{
+					IStatus status = profile.connectWithoutJob();
+					haveCon = status.isOK();
+				}
+			}
+			else if (isConnected(profile) ||
+					ConnectionProfileUtility.isWorkingOffline(profile))
+			{
+				haveCon = true;
+			}
+			// If we were able to connect (or were already connected),
+			// then get the connection info object.
+			if (haveCon)
+			{
+				Map factories =  null;
+				if (profile.getProvider() != null)
+					factories = profile.getProvider().getConnectionFactories();
+				if (factories != null && factories.containsKey(Connection.class.getName()))
+				{
+					IManagedConnection managedConnection = profile.getManagedConnection(ConnectionUtil.CONNECTION_TYPE);
+					if (managedConnection == null)
+					{
+						String conName = profile.getName();
+						managedConnection = new ManagedConnection(profile, conName);
+					}
+					if (managedConnection != null)
+					{
+						IConnection iconn = managedConnection.getConnection();
+						// If no IConnection, then no ConnectionInfo.
+						if (iconn != null)
+						{
+							Object rawCon = iconn.getRawConnection();
+							if (rawCon instanceof ConnectionInfo)  {
+								// Thomas: Removed DatabaseProviderHelper().setDatabase
+								// because the DatabaseProviderHelper creates a new Database
+								// instance, which invalidates anyone's existing Database object.
+								return (ConnectionInfo)rawCon;
+							}
+						}
+					}
+				}
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Given an <code>IConnectionProfile</code>, determine the vendor and version.
+	 * <p>
+	 * @param profile An <code>IConnectionProfile</code> that describes the database.
+	 * @return The product and version strings.
+	 */
+	public static String[] getVendorVersion(IConnectionProfile profile)
+	{
+		String[] vendorVersion = new String[2];
+		//      Properties versionInfo = getVersionInfo(profile);
+		//      if (versionInfo != null && versionInfo.size() > 0)
+		//      {
+		//         String serverName = versionInfo.getProperty("server.name"); //$NON-NLS-1$
+		//         // Produces the display name, for example, "DB2 for z/OS V9 (New-Function Mode)"
+		//         // parse the server name?
+		//      }
+		try
+		{
+			Properties properties = profile.getBaseProperties();
+			vendorVersion[0] = (String)properties.getProperty(IJDBCDriverDefinitionConstants.DATABASE_VENDOR_PROP_ID);
+			vendorVersion[1] = (String)properties.getProperty(IJDBCDriverDefinitionConstants.DATABASE_VERSION_PROP_ID);
+			if (vendorVersion[0] == null)
+			{
+				properties = profile.getProperties(ConnectionProfileConstants.VERSION_INFO_PROFILE_EXTENSION_ID);
+				if (properties != null)
+					vendorVersion[0] = properties.getProperty(ConnectionProfileConstants.PROP_SERVER_VERSION);
+			}
+			if (vendorVersion[1] == null)
+			{
+				properties = profile.getProperties(ConnectionProfileConstants.VERSION_INFO_PROFILE_EXTENSION_ID);
+				if (properties != null)
+					vendorVersion[1] = properties.getProperty(ConnectionProfileConstants.PROP_SERVER_NAME);
+			}
+			if (vendorVersion[0] == null)
+				vendorVersion[0] = "DB2 UDB"; //$NON-NLS-1$
+				if (vendorVersion[1] == null)
+					vendorVersion[1] = "V9.5"; //$NON-NLS-1$
+		}
+		catch (Exception e)
+		{
+			vendorVersion[0] = GENERIC_JDBC;
+			vendorVersion[1] = GENERIC_JDBC_VERSION;
+		}
+		return vendorVersion;
+	}
+
+	/**
+	 * These are set after  connecting.
+	 * @since Version 2.1.0 of this plug-in.
+	 */
+	public static Properties getVersionInfo(IConnectionProfile profile)
+	{
+		if (profile != null)
+			return profile.getProperties(VERSON_INFO);
+		else
+			return null;
+	}
+
+	/**
+	 * Given an <code>IConnectionProfile</code>, determine whether we need to prompt
+	 * for profile properties.
+	 * <p>
+	 * @param profile An <code>IConnectionProfile</code> that describes the database.
+	 * @return True if we need to prompt.
+	 */
+	public static boolean arePropertiesComplete(IConnectionProfile profile)
+	{
+		boolean isComplete = false;
+		String providerID = ConnectionProfileUtility.getProviderID(profile);
+		if (providerID != null)
+			isComplete = profile.arePropertiesComplete(providerID);
+		else
+			isComplete = profile.arePropertiesComplete();
+		if (!isComplete)
+		{
+			DatabaseDefinition dbDef = ConnectionProfileUtility.getDatabaseDefinition(profile);
+			if (DBVersion.isDBCloudscape(dbDef))
+			{
+				// To check if only the user ID and password are missing
+				// we get them, check if they are missing, fill them in with dummy values,
+				// then test arePropertiesComplete again.
+				boolean nouid = false, nopwd = false;
+				String[] up = getUidPwd(profile);
+				if (up[0] == null || up[0].length() == 0)
+				{
+					nouid = true;
+					setUID(profile, "dummy"); //$NON-NLS-1$
+				}
+				if (up[1] == null || up[1].length() == 0)
+				{
+					nopwd = true;
+					setPassword(profile, "dummy"); //$NON-NLS-1$
+				}
+				if (providerID != null)
+					isComplete = profile.arePropertiesComplete(providerID);
+				else
+					isComplete = profile.arePropertiesComplete();
+				if (nouid)
+					setUID(profile, ""); //$NON-NLS-1$
+				if (nopwd)
+					setPassword(profile, ""); //$NON-NLS-1$
+			}
+		}
+		return isComplete;
+	}
+
+	/**
+	 * Given an <code>IConnectionProfile</code>, determine whether the profile
+	 * is configured for using client authentication.
+	 * <p>
+	 * @param profile An <code>IConnectionProfile</code> that describes the database.
+	 * @return True if we are using client authentication.
+	 */
+	public static boolean useClientAuthentication(IConnectionProfile profile)
+	{
+		String url = getURL(profile);
+		return (url.indexOf("securityMechanism=4") > -1); //$NON-NLS-1$
+	}
+
+	/**
+	 * Given an <code>IConnectionProfile</code>, determine the user ID and password.
+	 * <p>
+	 * @param profile An <code>IConnectionProfile</code> that describes the database.
+	 * @return The user ID and password strings
+	 */
+	public static String[] getUidPwd(IConnectionProfile profile)
+	{
+		String[] uidPwd = new String[2];
+		try
+		{
+			Properties properties = profile.getBaseProperties();
+			uidPwd[0] = (String)properties.getProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID);
+			uidPwd[1] = (String)properties.getProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID);
+			if (uidPwd[0] == null || uidPwd[0].length() == 0 || uidPwd[1] == null || uidPwd[1].length() == 0)
+			{
+				DriverInstance driverInstance = getDriverInstance(profile);
+				if (driverInstance != null)
+				{
+					if(uidPwd[0] == null || uidPwd[0].length() == 0)
+						uidPwd[0] = driverInstance.getProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID);
+					if(uidPwd[1] == null || uidPwd[1].length() == 0)
+						uidPwd[1] = driverInstance.getProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID);
+				}
+			}
+		}
+		catch (Exception e)
+		{
+			uidPwd[0] = System.getProperty("user.name"); //$NON-NLS-1$
+			uidPwd[1] = null;
+		}
+		return uidPwd;
+	}
+
+	/**
+	 * Given an <code>IConnectionProfile</code>, determine the user ID.
+	 * <p>
+	 * @param profile An <code>IConnectionProfile</code> that describes the database.
+	 * @return The user ID.
+	 */
+	public static String getUID(IConnectionProfile profile)
+	{
+		String uid = null;
+		try
+		{
+			Properties properties = profile.getBaseProperties();
+			uid = (String)properties.getProperty(ConnectionProfileConstants.PROP_UID);
+			if (uid == null || uid.length() == 0)
+				uid = (String)properties.getProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID);
+			if (uid == null || uid.length() == 0)
+			{
+				DriverInstance driverInstance = ConnectionProfileUtility.getDriverInstance(profile);
+				if (driverInstance != null)
+				{
+					uid = driverInstance.getProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID);
+				}
+			}
+		}
+		catch (Exception e)
+		{
+			uid = System.getProperty("user.name"); //$NON-NLS-1$
+		}
+		return uid;
+	}
+
+	/**
+	 * Given an <code>IConnectionProfile</code>, set the user ID.
+	 * <p>
+	 * @param profile An <code>IConnectionProfile</code> that describes the database.
+	 * @param uid The user ID.
+	 */
+	public static void setUID(IConnectionProfile profile, String uid)
+	{
+		Properties properties = profile.getBaseProperties();
+		properties.setProperty(ConnectionProfileConstants.PROP_UID, uid);
+	}
+
+	/**
+	 * Given an <code>IConnectionProfile</code>, set the password.
+	 * <p>
+	 * @param profile An <code>IConnectionProfile</code> that describes the database.
+	 * @param pwd The password.
+	 */
+	public static void setPassword(IConnectionProfile profile, String pwd)
+	{
+		Properties properties = profile.getBaseProperties();
+		properties.setProperty(ConnectionProfileConstants.PROP_PWD, pwd);
+	}
+
+	/**
+	 * Given an <code>IConnectionProfile</code>, determine the connection URL.
+	 * <p>
+	 * @param profile An <code>IConnectionProfile</code> that describes the database.
+	 * @return The connection URL.
+	 */
+	public static String getURL(IConnectionProfile profile)
+	{
+		String url = null;
+		try
+		{
+			Properties properties = profile.getBaseProperties();
+			url = (String)properties.getProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID);
+		}
+		catch (Exception e)
+		{
+			url = ""; //$NON-NLS-1$
+		}
+		return url;
+	}
+
+	/**
+	 * Given an <code>IConnectionProfile</code>, determine the driver definition ID.
+	 * <p>
+	 * @param profile An <code>IConnectionProfile</code> that describes the database.
+	 * @return The driver definition ID.
+	 */
+	public static String getDriverDefinitionID(IConnectionProfile profile)
+	{
+		Properties properties = profile.getBaseProperties();
+		return (String)properties.getProperty(ConnectionProfileConstants.PROP_DRIVER_DEFINITION_ID);
+	}
+
+	/**
+	 * Given an <code>IConnectionProfile</code>, determine the driver class name.
+	 * <p>
+	 * @param profile An <code>IConnectionProfile</code> that describes the database.
+	 * @return The driver class name.
+	 */
+	public static String getDriverClass(IConnectionProfile profile)
+	{
+		Properties properties = profile.getBaseProperties();
+		return (String)properties.getProperty(IJDBCDriverDefinitionConstants.DRIVER_CLASS_PROP_ID);
+	}
+
+	/**
+	 * Given an <code>IConnectionProfile</code>, determine the connection profile provider ID.
+	 * <p>
+	 * @param profile An <code>IConnectionProfile</code> that describes the database.
+	 * @return The connection profile provider ID.
+	 */
+	public static String getProviderID(IConnectionProfile profile)
+	{
+		String id = null;
+		IConnectionProfileProvider provider = profile.getProvider();
+		if (provider != null)
+			id = provider.getId();
+		return id;
+	}
+
+	/**
+	 * Gets the driver template.
+	 * @param profile An <code>IConnectionProfile</code> that describes the database.
+	 * @return The driver definition type.
+	 */
+	public static String getDriverDefinitionType(IConnectionProfile profile)
+	{
+		return profile.getBaseProperties().getProperty(IDriverMgmtConstants.PROP_DEFN_TYPE);
+	}
+
+	/**
+	 * Gets the option to save the password.
+	 * @param profile  An <code>IConnectionProfile</code> that describes the database.
+	 * @return true if the password is to be saved in the connection profile.
+	 */
+	public static String getSavePassword(IConnectionProfile profile)
+	{
+		String save = profile.getBaseProperties().getProperty(IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID);
+		if (save == null)
+			return FALSE_VALUE;
+		else
+			return save;
+	}
+	
+	/**
+	 * Gets the option to save the password.
+	 * @param profile  An <code>IConnectionProfile</code> that describes the database.
+	 * @return True if the option is checked; false otherwise.
+	 */
+	public static boolean isPasswordSaved(IConnectionProfile profile)
+	{
+		String opt = getSavePassword(profile);
+		return opt.equals(TRUE_VALUE);
+	}	
+	/**
+	 * Gets the other properties for a connection profile.
+	 * @param profile  An <code>IConnectionProfile</code> that describes the database.
+	 * @return The properties (I think as a comma-separated list).
+	 */
+	public static String getConnectionProperties(IConnectionProfile profile)
+	{
+		return profile.getBaseProperties().getProperty(IJDBCConnectionProfileConstants.CONNECTION_PROPERTIES_PROP_ID);
+	}
+
+	/**
+	 * Gets the catalog type for an Oracle connection.
+	 * @param profile  An <code>IConnectionProfile</code> that describes the database.
+	 * @return The catalog type: USER, DBA, or ALL (see constants in this class or in IOracleDriverDefinitionConstants).
+	 */
+	public static String getOracleConnectionType(IConnectionProfile profile)
+	{
+		return profile.getBaseProperties().getProperty(CATALOG_TYPE_PROPERTY_ID);
+	}
+
+	/**
+	 * Gets the default schema for the connection.
+	 * @param profile  An <code>IConnectionProfile</code> that describes the database.
+	 * @return The default schema in catalog format, or null.
+	 */
+	public static String getDefaultSchema(IConnectionProfile profile)
+	{
+		return profile.getBaseProperties().getProperty(IJDBCConnectionProfileConstants.DEFAULT_SCHEMA_PROP_ID);
+	}
+
+	/**
+	 * Given an <code>IConnectionProfile</code>, determine the path for loading the driver.
+	 * <p>
+	 * @param profile An <code>IConnectionProfile</code> that describes the database.
+	 * @return The loading path.
+	 */
+	public static String getDriverPath(IConnectionProfile profile)
+	{
+		String driverPath = null;
+		if (profile instanceof ConnectionProfileApp)
+		{
+			driverPath = ((ConnectionProfileApp)profile).getLoadingPath();
+		}
+		if (driverPath == null)
+		{
+			DriverInstance driverInstance = ConnectionProfileUtility.getDriverInstance(profile);
+			if (driverInstance != null)
+			{
+				driverPath = driverInstance.getJarList();
+			}
+		}
+		if (driverPath == null)
+		{
+			driverPath = profile.getBaseProperties().getProperty(IDriverMgmtConstants.PROP_DEFN_JARLIST);
+		}
+		return driverPath;
+	}
+
+	/**
+	 * Get the driver instance, which has properties of its own, given an <code>IConnectionProfile</code>.
+	 * <p>
+	 * @param profile An <code>IConnectionProfile</code> that describes the database.
+	 * @return The driver instance
+	 */
+	public static DriverInstance getDriverInstance(IConnectionProfile profile)
+	{
+		DriverInstance driverInstance = null;
+		if (!(profile instanceof ConnectionProfileApp))
+		{
+			String driverID = (String)profile.getBaseProperties().getProperty(ConnectionProfileConstants.PROP_DRIVER_DEFINITION_ID);
+			if (driverID != null)
+			{
+				try { // Required for running outside of Eclipse
+					driverInstance = DriverManager.getInstance().getDriverInstanceByID(driverID);
+				} catch (Throwable e) {
+					// Do nothing
+				}
+			}
+		}
+		return driverInstance;
+	}
+
+	/**
+	 * Given an <code>ConnectionInfo</code>, determine the <code>DatabaseDefinition</code>.
+	 * <p>
+	 * @param conInfo The <code>ConnectionInfo</code> that the project is associated with.
+	 * @return The <code>DatabaseDefinition</code> for the product and version.
+	 */
+	public static DatabaseDefinition getDatabaseDefinition(ConnectionInfo info)
+	{
+		return info.getDatabaseDefinition();
+	}
+
+	/**
+	 * Given an <code>IConnectionProfile</code>, determine the <code>DatabaseDefinition</code>.
+	 * <p>
+	 * @param profile The profile that the project is associated with.
+	 * @return The DatabaseDefinition for the product and version.
+	 */
+	public static DatabaseDefinition getDatabaseDefinition(IConnectionProfile profile)
+	{
+		if (profile instanceof ConnectionProfileApp)
+		{
+			ConnectionInfo conInfo = ((ConnectionProfileApp)profile).getConnectionInfo();
+			return conInfo.getDatabaseDefinition();
+		}
+		else
+		{
+			String[] vendorVersion = getVendorVersion(profile);
+			RDBCorePlugin rdbc = RDBCorePlugin.getDefault();
+			DatabaseDefinitionRegistry defRegistry = null;
+			if (rdbc != null)
+				defRegistry = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry();
+			DatabaseDefinition dbDef = null;
+			if (defRegistry != null)
+				dbDef = defRegistry.getDefinition(vendorVersion[0], vendorVersion[1]);
+			if (dbDef == null && defRegistry != null)
+			{
+				dbDef = defRegistry.getDefinition(GENERIC_JDBC, GENERIC_JDBC_VERSION);
+				if( dbDef == null ){
+					//in the RCP case, the defect GERNRIC_JDBC doesn't be configed, then it will leads NPE
+					vendorVersion[0] = "DB2 UDB"; //$NON-NLS-1$
+					vendorVersion[1] = "V9.5"; //$NON-NLS-1$
+					dbDef = defRegistry.getDefinition(vendorVersion[0], vendorVersion[1]);
+				}
+			}
+			return dbDef;
+		}
+	}
+
+	/**
+	 * Given an <code>IConnectionProfile</code>, determine the delimiter.
+	 * <p>
+	 * @param profile The profile that the project is associated with.
+	 * @return The DatabaseDefinition for the product and version.
+	 */
+	public static char getDelimiter(IConnectionProfile profile)
+	{
+		DatabaseDefinition dbDef = ConnectionProfileUtility.getDatabaseDefinition(profile);
+		return SQLIdentifier.getDelimiter(dbDef);
+	}
+
+	/**
+	 * Given an <code>IConnectionProfile</code>, determine the Database.
+	 * <p>
+	 * @param profile The profile that the project is associated with.
+	 * @return The name of the Database for the product and version.
+	 */
+	public static String getDatabaseName(IConnectionProfile profile)
+	{
+		String databaseName = null;
+		try
+		{
+			Properties properties = profile.getBaseProperties();
+			databaseName = (String)properties.getProperty(IJDBCDriverDefinitionConstants.DATABASE_NAME_PROP_ID);
+		}
+		catch (Exception e)
+		{
+			databaseName = null;
+		}
+		if (databaseName == null || databaseName.trim().length() == 0)
+		{
+			if (profile != null)
+				databaseName = profile.getName();
+		}
+		return databaseName;
+	}
+
+	/**
+	 * Given an <code>IConnectionProfile</code>, determine the alias, if any.
+	 * A profile has been given an alias if it corresponds to a DB2 database alias
+	 * in local DB2 client. (These can be created by DB2AiasManager.)
+	 * <p>
+	 * @param profile The profile that the project is associated with.
+	 * @return The DB2 database alias. If none is set, then returns null.
+	 * @since Version 2.1.0 of this plug-in.
+	 */
+	public static String getAlias(IConnectionProfile profile)
+	{
+		String alias = null;
+		try
+		{
+			Properties properties = profile.getBaseProperties();
+			alias = (String)properties.getProperty(ALIAS_PROPERTY);
+		}
+		catch (Exception e)
+		{
+			alias = null;
+		}
+		return alias;
+	}
+
+	/**
+	 * Given an <code>ConnectionProfile</code>, determine the <code>Database</code>.
+	 * <p>
+	 * @param profile The profile that the project is associated with.
+	 * @return The <code>Database</code> for the product and version.
+	 */
+	public static Database getDatabase(IConnectionProfile profile)
+	{
+		Database db = null;
+		//      String databaseName = getDatabaseName(profile);
+		//return getDatabasebByName(profile, databaseName, getDatabaseDefinition(profile));
+		ConnectionInfo conInfo = ConnectionProfileUtility.getConnectionInfo(profile);
+		if (conInfo != null)
+		{
+			db = conInfo.getSharedDatabase();
+			if (db == null)
+				db = conInfo.getCachedDatabase();
+		}
+		return db;
+	}
+
+	/**
+	 * Given an <code>ConnectionProfile</code>, return the default value for
+	 * the CURRENT PATH register.
+	 * @param profile The profile that the project is associated with.
+	 * @return The default <code>CURRENT PATH</code> for the product and version.
+	 */
+	public static String getDefaultPath(IConnectionProfile profile){
+		StringBuffer defaultPath = new StringBuffer();
+		DBVersion version = DBVersion.getSharedInstance(profile);
+		String userId = ConnectionProfileUtility.getUID(profile);
+		if (userId == null || userId.length() == 0)
+			userId = System.getProperty("user.name"); //$NON-NLS-1$
+		DatabaseDefinition dbdef = getDatabaseDefinition(profile);
+		userId = SQLIdentifier.toCatalogFormat(userId, dbdef);
+		//TODO check for database version numbers too
+		if (version.isUNO()){
+			defaultPath.append("SYSIBM,SYSFUN,SYSPROC,SYSIBMADM"); //$NON-NLS-1$
+		}
+		else if (version.isDB390()){
+			defaultPath.append("SYSIBM,SYSFUN,SYSPROC"); //$NON-NLS-1$
+		}
+		else if (version.isDB400()){
+			defaultPath.append("QSYS,QSYS2,SYSPROC,SYSIBMADM"); //$NON-NLS-1$
+		}
+		if (defaultPath.length() > 0)
+			defaultPath.append(',');
+		defaultPath.append(userId);
+		return defaultPath.toString();
+	}
+
+	/**
+	 * Given an <code>ConnectionProfile</code>, return the keywords that can
+	 * be used to set the value of the CURRENT PATH register.
+	 * @param profile The profile that the project is associated with.
+	 * @return An array with all the keywords.
+	 */
+	public static String[] getPathKeywordSuggestions(IConnectionProfile profile){
+		String[] keywords = null;
+		DBVersion version = DBVersion.getSharedInstance(profile);
+		//TODO check for database version numbers too
+		if (version.isUNO()) {
+			keywords = new String[]{"\"SYSTEM PATH\"","USER","CURRENT_PATH", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+					"\"CURRENT PATH\"","\"CURRENT PACKAGE PATH\""}; //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		else if (version.isDB390()) {
+			keywords = new String[]{"\"SYSTEM PATH\"","SESSION_USER","USER","PATH", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+					"\"CURRENT PATH\"","\"CURRENT PACKAGE PATH\""}; //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		else if (version.isDB400()) {
+			keywords = new String[]{"\"SYSTEM PATH\"","SESSION_USER","USER","SYSTEM_USER",  //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+					"PATH","\"CURRENT PATH\"","\"CURRENT FUNCTION PATH\"",  //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			"CURRENT_PATH"}; //$NON-NLS-1$
+		}
+		return keywords;
+	}
+
+	/**
+	 * Connect if needed and test the connection by obtaining the value of the
+	 * CURRENT TIMESTAMP special register.
+	 * @param coninfo The ConnectionInfo.
+	 * @param msg A buffer for an error message, used when we return false;
+	 * @return True if we can connect and use the connection.
+	 */
+	public static boolean testConnection(ConnectionInfo coninfo, StringBuffer msg)
+	{
+		boolean ok = true;
+		if (coninfo != null)
+		{
+			Connection testConn = coninfo.getSharedConnection();
+			if (testConn == null)
+			{
+				try
+				{
+					IConnectionProfile profile = coninfo.getConnectionProfile();
+					IStatus status = profile.connectWithoutJob();
+					if (!status.isOK())
+					{
+						//msg.append(failed.to.connect);
+						ok = false;
+					}
+					else
+					{
+						testConn = coninfo.getSharedConnection();
+						if (testConn != null)
+						{
+							String dbname = ConnectionProfileUtility.getDatabaseName(profile);
+							new DatabaseProviderHelper().setDatabase(testConn, coninfo, dbname);
+						}
+					}
+				}
+				catch (Exception e)
+				{
+					msg.append(e.getMessage());
+					ok = false;
+				}
+			}
+			//       if (testConn == null && Utility.isIDS(coninfo) )
+			//       return true;
+		}
+		return ok;
+	}
+
+	/**
+	 * Determines if we are connected or working offline.
+	 * @param coninfo The ConnectionInfo.
+	 * @return True if we are connected.
+	 */
+	public static boolean isInConnectedState(ConnectionInfo conInfo)
+	{
+		IConnectionProfile profile = conInfo.getConnectionProfile();
+		return ConnectionProfileUtility.isConnected(profile)
+		|| ConnectionProfileUtility.isWorkingOffline(profile);
+	}
+
+
+	//   /**
+	//    * Determines if we are able to connect, prompts the user if needed,
+	//    * reconstructs connection information in the Server Explorer if needed,
+	//    * and reconnects, if possible. If not possible, and isLiveConnectionRequired
+	//    * is false, determines if we can switch to working offline.
+	//    * <p>You may call this method from Server Explorer.
+	//    * <p>
+	//    * @param profile The ConnectionProfile.
+	//    * @param isSQLJ True if the checking is for a SQLJ.
+	//    * @param isLiveConnectionRequired True if we must not use the offline cache.
+	//    * @param shell the parent Shell
+	//    * @return True if we are able to connect or work offline.
+	//    */
+	//   public static boolean reestablishConnection(IConnectionProfile profile, boolean isSQLJ,
+	//         boolean isLiveConnectionRequired, Shell shell)
+	//   {
+	//      return reestablishConnection(profile, isSQLJ, isLiveConnectionRequired, false, shell);
+	//   }
+
+	/**
+	 * Returns the java.sql.Connection associated with the connection profile.
+	 * @param profile the connection profile
+	 * @return Connection
+	 */
+	public static Connection getConnection(IConnectionProfile profile){
+		Connection conn = null;
+		if (profile.getConnectionState() != IConnectionProfile.CONNECTED_STATE){
+			profile.connect();
+		}
+		IManagedConnection managedConnection = profile.getManagedConnection(ConnectionUtil.CONNECTION_TYPE);
+		if (managedConnection != null){
+			ConnectionInfo cInfo = (ConnectionInfo)managedConnection.getConnection().getRawConnection();
+			conn = cInfo.getSharedConnection();
+		}
+		return conn;
+	}
+
+	/**
+	 * Parses the database connection URL into
+	 * protocol, subprotocol, host, port, database name, and properties.
+	 * A URL is either type 4 or type 2:
+	 * <dl>
+	 * <dt>Type 4 <dd>protocol:subprotocol://host:port/dbname:property1=value1;property2=value2;...
+	 * <dt>Type 2 <dd>protocol:subprotocol:alias:property1=value1;property2=value2;...
+	 * </dl>
+	 * For a type 2 URL, the host and port are returned as empty strings.
+	 * If no properties are given, the last element is also returned as an empty string.
+	 * The special callback TCP/IP address 127.0.0.1 is returned as "localhost."
+	 * @param A database connection URL.
+	 * @return An array of String, as follows:
+	 * <ol>
+	 * <li>protocol
+	 * <li>subprotocol
+	 * <li>host
+	 * <li>port
+	 * <li>database name
+	 * <li>properties
+	 * </ol>
+	 * If the input URL is null, returns null.
+	 */
+	public static String[] parseURL(String url)
+	{
+		if (url != null)
+		{
+			String[] elements = new String[]{
+					null, // 0: protocol
+					null, // 1: subprotocol
+					null, // 2: host
+					null, // 3: port
+					null, // 4: database name
+					null  // 5: properties
+			};
+			try {
+				int colon = url.indexOf(':');
+				elements[0] = url.substring(0, colon);
+				String remainingURL = url.substring(colon + 1);
+				colon = remainingURL.indexOf(':');
+				elements[1] = remainingURL.substring(0, colon);
+				remainingURL = remainingURL.substring(colon + 1);
+				if (remainingURL.startsWith("//")) //$NON-NLS-1$
+					remainingURL = remainingURL.substring(2);
+				int slash = remainingURL.indexOf('/');
+				if (slash > -1)
+				{
+					elements[2] = remainingURL.substring(0, slash);
+					if (elements[2].indexOf('[') > -1 && elements[2].indexOf("]:") > -1) {
+						elements[3] = elements[2].substring(elements[2].indexOf("]:") + 2);
+						elements[2] = elements[2].substring(1, elements[2].indexOf("]:"));							
+					} else if (elements[2].indexOf(':') > -1) {
+						elements[3] = elements[2].substring(elements[2].indexOf(':') + 1);
+						elements[2] = elements[2].substring(0, elements[2].indexOf(':'));
+					}
+					remainingURL = remainingURL.substring(slash + 1);
+				}
+				if (!elements[1].equalsIgnoreCase("db2")) //$NON-NLS-1$
+				{
+					int semi = remainingURL.indexOf(';');
+					if (semi > -1)
+					{
+						elements[2] = remainingURL.substring(0, semi);
+						elements[5] = remainingURL.substring(semi + 1);
+					}
+					else
+					{
+						elements[2] = remainingURL;
+					}
+				}
+				else
+				{
+					colon = remainingURL.indexOf(':');
+					if (colon > -1) {
+						elements[4] = remainingURL.substring(0, colon);
+						remainingURL = remainingURL.substring(colon + 1);
+						elements[5] = remainingURL;
+					} else {
+						elements[4] = remainingURL;
+					}
+				}
+			}
+			catch (Exception e)
+			{
+				// ignore
+			}
+			for (int i = 0; i < 6; i++)
+			{
+				if (elements[i] == null)
+					elements[i] = ""; //$NON-NLS-1$
+			}
+			if (elements[2].equals("127.0.0.1")) //$NON-NLS-1$
+				elements[2] = "localhost"; //$NON-NLS-1$
+			return elements;
+		}
+		else
+		{
+			return null;
+		}
+	}
+
+
+	/**
+	 * Given a <code>version</code>, <code>currentSchema</code>, return the default value for
+	 * the CURRENT PATH register.
+	 * @param version db2 version
+	 * @param currentSchema current schema for the connection
+	 * @return The default <code>CURRENT PATH</code> for the product and version.
+	 */
+	public static String getDefaultPath(DBVersion version, String currentSchema){
+		StringBuffer defaultPath = new StringBuffer();
+		if (version.isUNO()){
+			defaultPath.append("SYSIBM,SYSFUN,SYSPROC,SYSIBMADM"); //$NON-NLS-1$
+		}
+		else if (version.isDB390()){
+			defaultPath.append("SYSIBM,SYSFUN,SYSPROC"); //$NON-NLS-1$
+		}
+		else if (version.isDB400()){
+			defaultPath.append("QSYS,QSYS2,SYSPROC,SYSIBMADM"); //$NON-NLS-1$
+		}
+		if (defaultPath.length() > 0)
+			defaultPath.append(',');
+		defaultPath.append(currentSchema);
+		return defaultPath.toString();
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/DBReverseProvider.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/DBReverseProvider.java
new file mode 100644
index 0000000..f43306f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/DBReverseProvider.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.emf.ecore.EObject;
+
+public interface DBReverseProvider {
+
+	public void reverseEngineer(Database database, int options,EObject[] objectsToRE,IProgressMonitor monitor);
+	public void prepareLoader(Database database, int options,EObject[] objectsToRE);
+	public void removeNeedlessObjects(EObject[] clonedObjects,int options);
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/DBVersion.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/DBVersion.java
new file mode 100644
index 0000000..2a20178
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/DBVersion.java
@@ -0,0 +1,1344 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.StringTokenizer;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo;
+import org.eclipse.datatools.enablement.ibm.util.ConnectionProfileUtility;
+import org.eclipse.datatools.enablement.ibm.util.ReuseStringBuffer;
+import org.eclipse.datatools.enablement.ibm.util.SQLIdentifier;
+
+/**
+ * Abstracts a database version consisting of a product name and three integers: version,
+ * release, and mod level. It supports comparisons between versions, as
+ * well as comparisons against precisely specified version, release, and/or
+ * mod levels.
+ * <p>
+ * This class also provides a shared set of unique DBVersion instances,
+ * which you may construct and access using the getSharedInstance methods,
+ * instead of using the constructors directly.
+ * Additional methods could be added for contributing a sharable instance
+ * and for removing them when they are not needed.
+ */
+public class DBVersion
+{
+   public static final String PRODUCT_DB2 = "DB2"; //$NON-NLS-1$
+   public static final String DB2FAMILY =	"DB2 Family"; //$NON-NLS-1$
+   public static final String DB2390 =	"DB2"; //$NON-NLS-1$
+
+   public static final String DB2400 =	"AS"; //$NON-NLS-1$
+   public static final String DB2400SQL =	"DB2/400 SQL";	 // AS/400 Toolbox JDBC //$NON-NLS-1$
+   public static final String DB2400UDB =	"DB2 UDB for AS/400";	 // AS/400 Toolbox JDBC version V4R4 after drivers //$NON-NLS-1$
+
+   public static final String DB2ISERIES = "DB2 UDB iSeries"; //$NON-NLS-1$
+   public static final String IBMCLOUDSCAPE = "IBM Cloudscape"; //$NON-NLS-1$
+   public static final String APACHE_DERBY = "Apache Derby";  // returned by DatabaseMetaData for Derby //$NON-NLS-1$
+   public static final String DERBY = "Derby"; //$NON-NLS-1$
+   public static final String DB2UDB = "DB2 UDB"; //$NON-NLS-1$
+   public static final String DB2ZSERIES = "DB2 UDB zSeries"; //$NON-NLS-1$
+   public static final String IDS = "Informix"; //$NON-NLS-1$
+   public static final String IDS_ALIAS = "IDS"; //$NON-NLS-1$
+   public static final String ORACLE = "Oracle"; //$NON-NLS-1$
+   public static final String SYBASE= "Sybase"; //$NON-NLS-1$
+   public static final String DB2ALIAS = "DB2 ALIAS"; //$NON-NLS-1$
+   public static final String POSTGRES = "Postgres"; //$NON-NLS-1$
+
+   public static final String DB2NT =	"DB2/NT"; //$NON-NLS-1$
+   public static final String DB2NT64 =	"DB2/NT64"; //$NON-NLS-1$
+   public static final String DB2Windows95 =	"DB2/Windows 95"; //$NON-NLS-1$
+   public static final String DB26000 =	"DB2/6000"; //$NON-NLS-1$
+   public static final String DB2AIX64 =	"DB2/AIX64"; //$NON-NLS-1$
+   public static final String DB26000PE =	"DB2/6000 PE"; //$NON-NLS-1$
+   public static final String DB2HPUX =	"DB2/HPUX"; //$NON-NLS-1$
+   public static final String DB2HPUX64 =	"DB2/HP64"; //$NON-NLS-1$
+   public static final String DB2SUN =	"DB2/SUN"; //$NON-NLS-1$
+   public static final String SUN64 =	"DB2/SUN64"; //$NON-NLS-1$
+   public static final String LINUX =	"DB2/LINUX"; //$NON-NLS-1$
+   public static final String DYNIX =	"DB2/PTX";	 // Sequent (NUMA-Q) //$NON-NLS-1$
+   public static final String DB22 =	"DB2/2"; //$NON-NLS-1$
+   public static final String WORKSTATION =	"WORKSTATION"; //$NON-NLS-1$
+   public static final String AS400 =	"AS400"; //$NON-NLS-1$
+   public static final String DB2LINUX390 =	"DB2/LINUX390"; //$NON-NLS-1$
+   public static final String IMS =	"IMS"; //$NON-NLS-1$
+
+// DB2 versions
+
+   public static final int DB_VERSION_4 =	4;
+   public static final int DB_VERSION_5 =	5;
+   public static final int DB_VERSION_6 =	6;
+   public static final int DB_VERSION_7 =	7;
+   public static final int DB_VERSION_8 =	8;
+   //
+   public static final int DB_VERSION_9 =   9;
+   public static final int DB_VERSION_10 =  10;
+   public static final double DB_SDK_VERSION_6 =	6.1;
+   public static final double DB_SDK_VERSION_7 =	7.0;
+   public static final double DB_SDK_VERSION_8 =	8.0;
+   public static final double DB_VERSION_5_REL_1 =	5.1;
+   public static final double DB_VERSION_5_REL_2 =	5.2;
+   public static final double DB_VERSION_5_REL_3 =	5.3;
+
+   private static final int[] SUPPORTS_SKIP_LEVEL_COMPAT_MODE = { 10 };
+   
+// DB2 versions (String format)
+
+   public static final String DB_VER_4 =	"V4"; //$NON-NLS-1$
+   public static final String DB_VER_5 =	"V5"; //$NON-NLS-1$
+   public static final String DB_VER_6 =	"V6"; //$NON-NLS-1$
+   public static final String DB_VER_7 =	"V7"; //$NON-NLS-1$
+   public static final String DB_VER_8 =	"V8"; //$NON-NLS-1$
+   public static final String DB_VER_9 =	"V9"; //$NON-NLS-1$
+   public static final String DB_VER_5_REL_1 =	"V5.1"; //$NON-NLS-1$
+   public static final String DB_VER_5_REL_2 =	"V5.2"; //$NON-NLS-1$
+   public static final String DB_VER_5_REL_3 =	"V5.3"; //$NON-NLS-1$
+   // DB version String literals extracted from extensions to ext pt.
+   // com.ibm.datatools.core.databaseDefinition
+   /** @deprecated */
+   public static final String DB_ZSERIES_VERSION_6 = "V6"; //$NON-NLS-1$
+   public static final String DB_ZSERIES_VERSION_7 = "V7"; //$NON-NLS-1$
+   public static final String DB_ZSERIES_VERSION_8_COMPAT = "V8 (Compatibility Mode)"; //$NON-NLS-1$
+   public static final String DB_ZSERIES_VERSION_8_NEWFUN = "V8 (New-Function Mode)"; //$NON-NLS-1$
+   // RATLC001118919 and wsdbu00057906
+   //public static final String DB_ZSERIES_VERSION_9 = "V9"; //$NON-NLS-1$
+   public static final String DB_ZSERIES_VERSION_9_COMPAT = "V9 (Compatibility Mode)"; //$NON-NLS-1$
+   public static final String DB_ZSERIES_VERSION_9_NEWFUN = "V9 (New-Function Mode)"; //$NON-NLS-1$
+   public static final String DB_ZSERIES_VERSION_10_COMPAT = "V10 (Conversion Mode)"; //$NON-NLS-1$
+   public static final String DB_ZSERIES_VERSION_10_NEWFUN = "V10 (New-Function Mode)";//$NON-NLS-1$
+   public static final String DB_ZSERIES_VERSION_11_COMPAT = "V11 (Conversion Mode)"; //$NON-NLS-1$
+   public static final String DB_ZSERIES_VERSION_11_NEWFUN = "V11 (New-Function Mode)";//$NON-NLS-1$
+   
+   public static final String DB_VERSION_8_REL_1 = "V8.1"; //$NON-NLS-1$
+   public static final String DB_VERSION_8_REL_2 = "V8.2"; //$NON-NLS-1$
+   public static final String DB_UDB_VERSION_9 = "V9.1"; //$NON-NLS-1$
+   public static final String DB_UDB_VERSION_9_5 = "V9.5"; //$NON-NLS-1$
+   public static final String DB_UDB_VERSION_9_7 = "V9.7"; //$NON-NLS-1$
+   public static final String DB_UDB_VERSION_10_1 = "V10.1";//$NON-NLS-1$
+   public static final String DB_UDB_VERSION_10_5 = "V10.5";//$NON-NLS-1$
+   /** @deprecated */
+   public static final String DB_ISERIES_VERSION_5_REL_1 = "V5R1"; //$NON-NLS-1$
+   /** @deprecated */
+   public static final String DB_ISERIES_VERSION_5_REL_2 = "V5R2"; //$NON-NLS-1$
+   public static final String DB_ISERIES_VERSION_5 = "5"; //$NON-NLS-1$
+   public static final String DB_ISERIES_VERSION_5_REL_3 = "5R3"; //$NON-NLS-1$
+   /** @deprecated */
+   public static final String DB_ISERIES_VERSION_5_REL_3_NEW = "V05R03"; //$NON-NLS-1$
+   public static final String DB_ISERIES_VERSION_5_REL_4 = "5R4"; //$NON-NLS-1$
+   /** @deprecated */
+   public static final String DB_ISERIES_VERSION_5_REL_4_NEW = "V05R04"; //$NON-NLS-1$
+   public static final String DB_CLOUDSCAPE_VERSION_10_REL_0 = "10.0"; //$NON-NLS-1$
+   public static final String DB_CLOUDSCAPE_VERSION_10_REL_1 = "10.1"; //$NON-NLS-1$
+   public static final String DB_CLOUDSCAPE_VERSION_10_REL_2 = "10.2"; //$NON-NLS-1$
+   public static final String DB_CLOUDSCAPE_VERSION_10_REL_3 = "10.3"; //$NON-NLS-1$
+   public static final String DB_CLOUDSCAPE_VERSION_10_REL_4 = "10.4"; //$NON-NLS-1$
+   public static final String DB_CLOUDSCAPE_VERSION_10_REL_5 = "10.5"; //$NON-NLS-1$
+   public static final String DB_CLOUDSCAPE_VERSION_10_REL_6 = "10.6"; //$NON-NLS-1$
+   public static final String DB_IDS_VERSION_10_REL_0 = "10.00"; //$NON-NLS-1$
+   public static final String DB_IDS_VERSION_9_REL_5 = "9.50"; //$NON-NLS-1$
+   public static final String DB_IDS_VERSION_9_REL_4 = "9.40"; //$NON-NLS-1$
+   public static final String DB_IDS_VERSION_9_REL_3 = "9.30"; //$NON-NLS-1$
+   public static final String DB_IDS_VERSION_9_REL_2 = "9.20"; //$NON-NLS-1$
+
+   
+   //Oracle versions
+   public static final String ORACLE_VERSION_10 = "10"; //$NON-NLS-1$
+   public static final String ORACLE_VERSION_11 = "11"; //$NON-NLS-1$
+   
+   public static final String SYBASE_VERSION_12 = "12.0";
+   public static final String SYBASE_VERSION_12_REL_5 = "12.5";
+   public static final String SYBASE_VERSION_12_REL_X = "12.x";
+   public static final String SYBASE_VERSION_15 = "15.0";
+	   
+   
+   /** Database product. */
+   protected String product = null;
+   /** Database version. */
+   protected int version = 0;
+   /** Database release. */
+   protected int release = 0;
+   /** Database modification. */
+   protected int mod = 0;
+   /** Database delimiter, defaults to a double-quotation mark. */
+   protected char delim = '"';
+   /* True if we have confirmed the delimiter from the connection. *
+   protected boolean delimOK = false;
+    */
+
+   /** Shared instance of the default version. */
+   protected static DBVersion sharedDefault;
+   /** Reusable DBVersion instances. */
+   protected static ArrayList<DBVersion> sharedInstances = new ArrayList<DBVersion>();
+
+   /** LUWO: Linux, UNIX, Windows, and OS/2. */
+   public static final int PLATFORM_LUWO = 0x1;
+   /** OS/390, z/OS. */
+   public static final int PLATFORM_390 = 0x2;
+   /** OS/400, iSeries. */
+   public static final int PLATFORM_400 = 0x4;
+   /** LUWO, 390, and 400 */
+   public static final int PLATFORM_ALL = 0x7;
+   /** Any other platform. */
+   public static final int PLATFORM_OTHER = 0x10;
+
+   private static final String ZOS_NEW_FUNCTION = "New-Function Mode"; //$NON-NLS-1$
+
+   /**
+    * Gets a shared DBVersion, and returns null if it doesn't exist.
+    * @param product The product name.
+    * @param version The version.
+    * @param release The release
+    * @param mod The modification level.
+    * @return A shared DBVersion.
+    */
+   protected static DBVersion findSharedInstance(String product, int version, int release, int mod)
+   {
+      Iterator<DBVersion> i = sharedInstances.iterator();
+      DBVersion dbversion;
+      while (i.hasNext())
+      {
+         dbversion = i.next();
+         if (product.equals(dbversion.getProduct())
+               && version == dbversion.getVersion()
+               && release == dbversion.getRelease()
+               && mod == dbversion.getMod())
+            return dbversion;
+      }
+      // Didn't find one; return null:
+      return null;
+   }
+
+   /**
+    * Gets a shared DBVersion, and creates one if it doesn't already exist.
+    * @param product The product name.
+    * @param version The version.
+    * @param release The release
+    * @param mod The modification level.
+    * @return A shared DBVersion.
+    */
+   public static DBVersion getSharedInstance(String product, int version, int release, int mod)
+   {
+      if (product == null)
+         product = WORKSTATION;
+      DBVersion dbversion = findSharedInstance(product, version, release, mod);
+      if (dbversion == null)	// Didn't find one; create one:
+      {
+         dbversion = new DBVersion(product, version, release, mod);
+         sharedInstances.add(dbversion);
+      }
+      return dbversion;
+   }
+
+   /**
+    * Gets a shared DBVersion, and creates one if it doesn't already exist.
+    * @param product The product name.
+    * @param productVersion The version string (with version, release, and possibly modification)
+    * @return A shared DBVersion.
+    */
+   public static DBVersion getSharedInstance(String product, String productVersion)
+   {
+      int[] v = getVersionArray(productVersion);
+      return getSharedInstance(product, v[0], v[1], v[2]);
+   }
+
+   /**
+    * Gets a shared DBVersion, and creates one if it doesn't already exist.
+    * @param myConnection An RLDBConnection.
+    * @return A shared DBVersion.
+    */
+   public static DBVersion getSharedInstance(ConnectionInfo myConnection)
+   {
+      if (myConnection == null)
+         return getDefault();
+
+      /* obtain version from the connection info
+       * or when not set, from the DatabaseDefinition
+       */
+      DatabaseDefinition dbDef = myConnection.getDatabaseDefinition();
+      String productVersion = myConnection.getDatabaseProductVersion();
+      if (productVersion == null)
+      {
+         Connection con = myConnection.getSharedConnection();
+         if (con != null)
+         {
+            try
+            {
+               DatabaseMetaData dbmd = con.getMetaData();
+               productVersion = dbmd.getDatabaseProductVersion();
+            }
+            catch (SQLException sqle)
+            {
+               productVersion = null;
+            }
+         }
+      }
+      if(isSybase(dbDef)){
+    	  productVersion = dbDef.getVersion();
+      } else if (isIMS(dbDef)){
+    	  productVersion = dbDef.getVersion();
+      }
+      boolean isOracleDatabase = dbDef.getProduct().equalsIgnoreCase(ORACLE) ? true : false;
+      if (productVersion == null || isOracleDatabase)
+      {
+         productVersion = dbDef.getVersion();
+      }
+      String product = dbDef.getProduct();
+
+      if (productVersion!= null && productVersion.length() > 0) {
+         int[] v = getVersionArray(productVersion);
+         if (v== null)
+            v = new int []{0,0,0};
+         else if(isIDS(dbDef)) {
+        	 //only the first digit in the IDS release represents the real release number
+        	 //for example 11.70 represent version 11 release 7. This change is 
+        	 //made to be consistent with informix database definition
+        	 if(v[1]>=10)
+        	    v[1]=v[1]/10;        		        	
+         }
+
+
+         return getSharedInstance(product, v[0], v[1], v[2]);
+      }
+      else {
+         int[] v = getVersionArray(myConnection.getDatabaseDefinition().getVersion());
+         if (v== null)
+            v = new int []{0,0,0};
+
+         return getSharedInstance(product, v[0], v[1], v[2]);
+      }
+   }
+
+   /**
+    * Gets a shared DBVersion, and creates one if it doesn't already exist.
+    * @param profile IConnectionProfile
+    * @return A shared DBVersion.
+    */
+   public static DBVersion getSharedInstance(IConnectionProfile profile)
+   {
+      if (profile == null)
+         return getDefault();
+      ConnectionInfo conInfo = ConnectionProfileUtility.getConnectionInfo(profile, false);
+      if (conInfo != null)
+         return getSharedInstance(conInfo);
+      DatabaseDefinition dbDef = ConnectionProfileUtility.getDatabaseDefinition(profile);
+      return getSharedInstance(dbDef);
+   }
+
+   /**
+    * Gets a shared DBVersion, and creates one if it doesn't already exist.
+    * @param dbDef A database definition.
+    * @return A shared DBVersion.
+    */
+   public static DBVersion getSharedInstance(DatabaseDefinition dbDef)
+   {
+      if (dbDef == null)
+         return getDefault();
+
+      /* obtain version from the connection info
+       * or when not set, from the DatabaseDefinition
+       */
+      String version = dbDef.getVersion();
+      String product = dbDef.getProduct();
+
+      int[] v = getVersionArray(version);
+      if (v == null)
+         v = new int []{0,0,0};
+
+      return getSharedInstance(product, v[0], v[1], v[2]);
+   }
+
+   /**
+    * Gets a shared DBVersion, and creates one if it doesn't already exist.
+    * @param connection A Connection.
+    * @return A shared DBVersion.
+    */
+   public static DBVersion getSharedInstance(Connection connection)
+   {
+      String versionString = null;
+      String product;
+      try
+      {
+         product = connection.getMetaData().getDatabaseProductName();
+         versionString = connection.getMetaData().getDatabaseProductVersion();
+      }
+      catch (SQLException sqle)
+      {
+         product = WORKSTATION;
+         versionString = "8.2.0"; //$NON-NLS-1$
+      }
+      int[] v = getVersionArray(versionString);
+      if (v== null)
+         v = new int []{0,0,0};
+      return getSharedInstance(product, v[0], v[1], v[2]);
+   }
+
+   /**
+    * The Universal JDBC driver formats the version string with a cookie ccc
+    * with the format <code>cccvvrrm</code>.
+    */
+   protected static String SQLCookies = "SQL QSQ DSN"; //$NON-NLS-1$
+
+   public DBVersion(Connection connection)
+   {
+      String versionString = null;
+      try
+      {
+         product = connection.getMetaData().getDatabaseProductName();
+         versionString = connection.getMetaData().getDatabaseProductVersion();
+      }
+      catch (SQLException sqle)
+      {
+         product = WORKSTATION;
+         versionString = "8.2.0"; //$NON-NLS-1$
+      }
+      setVersion(versionString);
+   }
+
+   public DBVersion(String product, String versionString)
+   {
+      this.product = product;
+      setVersion(versionString);
+   }
+
+   public DBVersion(String versionString)
+   {
+      product = WORKSTATION;
+      setVersion(versionString);
+   }
+
+   public DBVersion(int version, int release, int mod)
+   {
+      product = WORKSTATION;
+      setVersion(version, release, mod);
+   }
+
+   public DBVersion(String prod, int version, int release, int mod)
+   {
+      product = prod;
+      setVersion(version, release, mod);
+   }
+
+   public DBVersion(DBVersion copyme)
+   {
+      if (copyme != null)
+      {
+         product = copyme.getProduct();
+         version = copyme.getVersion();
+         release = copyme.getRelease();
+         mod = copyme.getMod();
+         //setDelimiter(copyme.getDelimiter());
+      }
+   }
+
+   public DBVersion(IConnectionProfile profile)
+   {
+      String[] vv = ConnectionProfileUtility.getVendorVersion(profile);
+      setVersion(vv[1]);
+   }
+
+   public DBVersion(ConnectionInfo conInfo)
+   {
+      if (conInfo != null)
+      {
+         /* obtain version from the connection info
+          * or when not set, from the DatabaseDefinition
+          */
+         IConnectionProfile profile = conInfo.getConnectionProfile();
+         DatabaseDefinition dbDef = conInfo.getDatabaseDefinition();
+         String productVersion = dbDef.getVersion();
+         product = dbDef.getProduct();
+
+         if (ConnectionProfileUtility.isConnected(profile))
+         {
+            try
+            {
+               Connection jdbcConn = conInfo.getSharedConnection();
+               productVersion = jdbcConn.getMetaData().getDatabaseProductVersion();
+               product = jdbcConn.getMetaData().getDatabaseProductName();        			 
+            }
+            catch(Exception ex)
+            {
+               // ignore
+            }
+         }     
+         setVersion(productVersion);
+      }
+   }
+
+   /**
+    *  Gets a shared instance for a DatabaseDefinition.
+    *  <p>
+    *  @param The shared instance.
+    */
+   public DBVersion(DatabaseDefinition dbDef)
+   {
+      product = dbDef.getProduct();
+      setVersion(dbDef.getVersion());
+   }
+
+   /**
+    *  Gets the default shared instance, which is a new DBVersion(WORKSTATION,8,2,0).
+    *  <p>
+    *  @param The default shared instance of DBVersion.
+    */
+   public static DBVersion getDefault()
+   {
+      if (sharedDefault == null)
+         sharedDefault = new DBVersion(WORKSTATION,8,2,0);
+      return sharedDefault;
+   }
+
+   /**
+    *  @deprecated Use SQLIdentifier.getDelimiter(ConnectionInfo).
+    *  Gets the delimiter for an SQL identifier
+    *  which should be obtained from the JDBC database metadata.
+    *  <p>
+    *  @return A delimiter char.
+    */
+   public char getDelimiter()
+   {
+      return delim;
+   }
+
+   /**
+    *  @deprecated
+    *  Sets the delimiter for an SQL identifier,
+    *  which should be obtained from the JDBC database metadata.
+    *  <p>
+    *  @param A delimiter char.
+    */
+   public void setDelimiter(char d)
+   {
+      delim = d;
+   }
+
+   public void setProduct(String prod)
+   {
+      product = prod;
+   }
+
+   public String getProduct()
+   {
+      return product;
+   }
+
+   public boolean isDB2Alias(){
+	   return(product != null && DB2ALIAS.equals(product));
+   }
+   /**
+    * Determines if an SQLVendor represents a DB2 product.
+    * @return True if the vendor is DB2.
+    */
+   public boolean isDB2()
+   {
+      return isUNO() || isDB400() || isDB390();
+   }
+
+   public boolean isDB390()
+   {
+      if (product != null // false by default
+      && (DB2390.equals(product)
+      || DB2ZSERIES.equals(product)))
+         return true;
+      else
+         return false;
+   }
+
+   /**
+    * Returns true for "AS400", "AS", "DB2/400 SQL", "DB2 UDB for AS/400"
+    */
+   public boolean isDB400()
+   {
+      if (product != null // false by default
+            && (AS400.equals(product)
+                  || DB2400.equals(product)
+                  || DB2400SQL.equals(product)
+                  || DB2400UDB.equals(product)
+                  || DB2ISERIES.equals(product)))
+         return true;
+      else
+         return false;
+   }
+
+   public boolean isIBMCloudscape()
+   {
+      // Since product is different depending on the
+      // dbDefintion files used, we check for all
+      // variations
+      if (product != null // false by default
+            && (IBMCLOUDSCAPE.equals(product)
+                  || APACHE_DERBY.equals(product)
+                  || DERBY.equals(product)))
+         return true;
+      else
+         return false;
+   }
+
+   public boolean isDerby()
+   {
+      // Since product is different depending on the
+      // dbDefintion files used, we check for all
+      // variations
+      if (product != null // false by default
+            && (DERBY.equals(product)
+                  || APACHE_DERBY.equals(product)
+                  || IBMCLOUDSCAPE.equals(product)))
+         return true;
+      else
+         return false;
+   }
+
+   /**
+    * Returns true for the rest of the database product names belong to UNO:
+    * <pre>
+    * DB2NT =        "DB2/NT"
+    * DB2NT64 =      "DB2/NT64"
+    * DB2Windows95 = "DB2/Windows 95"
+    * DB26000 =      "DB2/6000"
+    * DB2AIX64 =     "DB2/AIX64"
+    * DB26000PE =    "DB2/6000 PE"
+    * DB2HPUX =      "DB2/HPUX"
+    * DB2HPUX64 =    "DB2/HP64"
+    * DB2SUN =       "DB2/SUN"
+    * SUN64 =        "DB2/SUN64"
+    * LINUX =        "DB2/LINUX"
+    * DYNIX =        "DB2/PTX"   * Sequent (NUMA-Q)
+    * DB22 =         "DB2/2"
+    * </pre>
+    */
+   public boolean isUNO()
+   {
+      if (product == null || WORKSTATION.equals(product) || DB2NT.equals(product)
+            || ( product.startsWith(PRODUCT_DB2) 
+               && !isDB390() && !isDB400() && !isIBMCloudscape()))
+         return true;
+      else
+         return false;
+   }
+   public boolean isIDS()
+   {
+      if (product != null && (product.startsWith(IDS)||product.startsWith( IDS_ALIAS )))
+         return true;
+      else
+         return false;
+   }
+   public boolean isOracle()
+   {
+      if (product != null && (product.equalsIgnoreCase(ORACLE) || product.startsWith(ORACLE)))
+         return true;
+      else
+         return false;
+   }
+   
+   public boolean isPostgres()
+   {
+      if (product != null && (product.equalsIgnoreCase(POSTGRES) || product.startsWith(POSTGRES)))
+         return true;
+      else
+         return false;
+   }
+   
+   public boolean isSybase()
+   {
+	   if(product != null && (product.equalsIgnoreCase(SYBASE)))
+			   return true;
+	   else
+		   return false;
+   }
+
+   /**
+    *  Returns the SQLIdentifier code for the DB2 platform.
+    *  <p>
+    *  @return   The platform code; one of the constants:
+    *  <dl>
+    *  <dt>SQLIdentifier.PLATFORM_LUWO   <dd>DB2 UDB for Linux, UNIX, Windows, and OS/2
+    *  <dt>SQLIdentifier.PLATFORM_390   <dd>DB2 UDB for OS/390 (and z/OS)
+    *  <dt>SQLIdentifier.PLATFORM_400   <dd>DB2 UDB for OS/400 (and iSeries)
+    *  <dt>SQLIdentifier.PLATFORM_OTHER   <dd>Not DB2
+    *  </dl>
+    *  @see SQLIdentifier
+    */
+   public int getSQLIdentifierPlatform()
+   {
+      if (isDB390())
+         return PLATFORM_390;
+      else if (isDB400())
+         return PLATFORM_400;
+      else if (WORKSTATION.equals(product)
+            || (product != null // OTHER by default
+                  && product.startsWith(PRODUCT_DB2)))
+         return PLATFORM_LUWO;
+      else
+         return PLATFORM_OTHER;
+   }
+
+   /**
+    * Determines if an SQLVendor represents a DB2 product.
+    * @return True if the vendor is DB2.
+    */
+   public static boolean isDB2(DatabaseDefinition definition)
+   {
+      return isDB2UDB(definition) || isDB2AS400(definition) || isDB2OS390(definition) || isDB2Alias(definition);
+   }
+   /**
+    * Determines if an SQLVendor represents a DB2 product
+    * for the workstation.
+    * @return True if the vendor is DB2.
+    */
+   public static boolean isDB2UDB(DatabaseDefinition definition)
+   {
+      return isProductSupported (definition, DB2UDB);
+   }
+   /**
+    * Determines if an SQLVendor represents a DB2 product
+    * for z/OS.
+    * @return True if the vendor is DB2.
+    */
+   public static boolean isDB2OS390(DatabaseDefinition definition)
+   {
+      return isProductSupported (definition, DB2ZSERIES);
+   }
+   /**
+    * Determines if an SQLVendor represents a DB2 product
+    * for iSeries.
+    * @return True if the vendor is DB2.
+    */
+   public static boolean isDB2AS400(DatabaseDefinition definition)
+   {
+      return isProductSupported (definition, DB2ISERIES);
+   }
+
+   public static boolean isDBCloudscape(DatabaseDefinition definition)
+   {
+      // Since product is different depending on the
+      // dbDefintion files used, we check for all
+      // variations
+      // No need to check for APACHE_DERBY, since that only comes from
+      // connection DatabaseMetaData
+      return isProductSupported (definition, IBMCLOUDSCAPE) ||
+      isProductSupported (definition, DERBY);
+   }
+
+   /**
+    * Determines if an SQLVendor represents an IDS product for the workstation.
+    * <p>
+    * @return <code>True</code> if the vendor is IDS.
+    */
+   public static boolean isIDS(DatabaseDefinition definition) {
+      return isProductSupported (definition, IDS);
+   }
+   
+   public static boolean isSybase(DatabaseDefinition definition) {
+	      return isProductSupported (definition, SYBASE);
+   }
+   
+	public static boolean isIMS(DatabaseDefinition definition) {
+		boolean retVal = false;
+		String prodStr = definition.getProductDisplayString();
+		if (prodStr != null && IMS.equals(prodStr)) {
+			retVal = true;
+		}
+		
+		return retVal;
+   }
+
+   /**
+    * Determines if an SQLVendor represents an Oracle product for the workstation.
+    * <p>
+    * @return <code>True</code> if the vendor is Oracle.
+    */
+   public static boolean isOracle(DatabaseDefinition definition) {
+      return isProductSupported (definition, ORACLE);
+   }
+   
+   /**
+    * Determines if an SQLVendor represents a DB2 alias
+    * @param definition
+    * @return true if the vendor is a DB2 alias
+    */
+public static boolean isDB2Alias(DatabaseDefinition definition){
+	   
+	   return isProductSupported(definition, DB2ALIAS);
+   }
+
+   private static boolean isProductSupported (DatabaseDefinition definition, String product)
+   {
+      if (definition == null)
+      {
+         return false;
+      }
+      else
+      {
+    	  return definition.getProduct().equalsIgnoreCase(product) ? true : false;
+      }
+   }
+
+   /**
+    * Parses the versionString and returns the version, release, and mod ints in an array.
+    * @return An array of version, release, and mod ints.
+    */
+   public static int[] getVersionArray(String versionString)
+   {
+      int[] v = new int[3];
+      if (versionString == null || versionString.length() == 0)
+      {
+         v[0] = 8;
+         v[1] = -1;
+         v[2] = -1;
+      }
+      else
+      {
+         // try to figure out what kind of versionString we have
+         // been passed
+         int clen = 3;
+         int cookieIdx = -1;
+         if (versionString.length() >= clen) {
+            String cookie = versionString.substring(0, clen);
+            cookieIdx = SQLCookies.indexOf(cookie);
+            if(cookieIdx == -1 && cookie.equals("IFX")) cookieIdx = 0;
+         }
+
+         if (cookieIdx > -1)
+            v = parseSQLVersion(versionString.substring(clen));
+         else
+            v = parseNumericVersion(versionString);
+      }
+      return v;
+   }
+
+   /**
+    * Parses the versionString and sets the version, release, and mod ints.
+    */
+   public void setVersion(String versionString)
+   {
+      int v[] = getVersionArray(versionString);
+      if (v != null)
+      {
+         setVersion(v[0], v[1], v[2]);
+      }
+   }
+
+   public void setVersion(int version, int release, int mod)
+   {
+      this.version = version;
+      this.release = release;
+      this.mod = mod;
+   }
+
+   /**
+    * Note: DB2 LUW FP level update:
+    * 
+    * The  architecture of  product and version information ( Product ID) 
+    * for DB2 LUW client and server is in the form PPPVVRRM, where: 
+    * PPP 
+    * is SQL  ( DB2 LUW Product Identifier)
+    * VV 
+    * identifies a 2-digit version number (with high-order 0 in the case of a 1-digit version)
+    * RR 
+    * identifies a 2-digit release number (with high-order 0 in the case of a 1-digit release)
+    * M 
+    * identifies a 1-character modification level (0-9 or A-Z) ( or fixpack level)
+    * 
+    * @param String, representing the numeric portion of the version, such as
+    * 09074 or 0901A
+    * 
+    * @return int[], representing the version, release, and mod (fixpack) level
+    * If the mod level is a letter, i.e. > 9, the letter will be mapped back to an integer
+    * A=10, B=11, etc.
+    * 
+    * In the future, this can be refactored to return the actual mod level if 
+    * callers need it
+    * 
+    * */
+    protected static int[] parseSQLVersion(String s)
+    {
+ 	   int tmpversion = 0;
+ 	   int tmprelease = 0;
+ 	   int tmpmod = 0;
+ 	   // Get values according to substring:
+ 	   try {
+ 		   tmpversion = Integer.parseInt(s.substring(0,2));
+ 		   tmprelease = Integer.parseInt(s.substring(2,4));
+         
+ 		   String mod = s.substring(4);
+ 		   // this character may be a letter for DB2 LUW
+ 		   if (Character.isLetter(mod.charAt(0))) {
+ 			   //assume the character is a valid uppercase letter, otherwise set mod level to 0
+ 			   tmpmod = Math.max(0, mod.charAt(0) - 'A' + 10);
+ 		   } else {
+ 			   tmpmod = Integer.parseInt(s.substring(4));
+ 		   }
+ 	   } catch(NumberFormatException nfe) { 
+ 		   return null; 
+ 	   }
+
+       return new int[]{tmpversion, tmprelease, tmpmod};
+    }
+    
+   protected static int[] parseNumericVersion(String s)
+   {
+      int tmpversion = 0;
+      int tmprelease = 0;
+      int tmpmod = 0;      
+      // tokenize:
+      StringTokenizer st = new StringTokenizer(s, "VRM .\t\n\r\f", false); //$NON-NLS-1$
+      try
+      {
+         if (st.hasMoreTokens())
+         {
+            tmpversion = Integer.parseInt(st.nextToken());
+         }
+         if (st.hasMoreTokens())
+         {
+            tmprelease = Integer.parseInt(st.nextToken());
+         }
+         if (st.hasMoreTokens())
+         {
+            tmpmod = Integer.parseInt(st.nextToken());
+         }
+      }
+      // catch runtime exceptions; could be nosuchelement or numberformat..
+      catch(NumberFormatException rte) 
+      {    	  
+         // return major version if already successfully parsed.
+         if (tmpversion == 0)
+            return null;
+         else if (tmpversion >= 8)
+         {
+            if (s.indexOf(ZOS_NEW_FUNCTION) > -1)
+            {
+               tmprelease = 1;
+               tmpmod = 5;    			  
+            }
+         }
+      }      		
+      catch(java.util.NoSuchElementException nse) 
+      { 
+         // return major version if already successfully parsed.
+         if (tmpversion == 0)
+            return null;
+         else if (tmpversion >= 8)
+         {
+            if (s.indexOf(ZOS_NEW_FUNCTION) > -1)
+            {
+               tmprelease = 1;
+               tmpmod = 5;    			
+            }
+         }
+      }
+
+      // must be OK
+      return new int[]{tmpversion, tmprelease, tmpmod};
+   }
+
+   /**
+    * Parses the SQLVendor type to return the version and release.
+    * SQLVendor doesn't return the version
+    * except in the domain type literal, which doesn't have dots,
+    * so we treat the first character after "_V" as the version
+    * and the second as the release.
+    * @param An SQLVendorType.toString().
+    * @return An int array with version,release,0.
+    */
+   public static int[] parseSQLVendorType(String domain)
+   {
+      int tmpversion = 0;
+      int tmprelease = 1;
+      // tokenize:
+      int vpos = domain.indexOf("_V") + 2; //$NON-NLS-1$
+      try
+      {
+         tmpversion = Integer.parseInt(domain.substring(vpos, vpos + 1));
+         if (vpos + 1 <= domain.length() - 1)
+            tmprelease = Integer.parseInt(domain.substring(vpos + 1, vpos + 2));
+      }
+      catch (NumberFormatException nfe)
+      {
+         // return zeros
+      }
+      return new int[]{tmpversion, tmprelease, 0};
+   }
+
+   public int getVersion() { return version; }
+   public int getRelease() { return release; }
+   public int getMod()   { return mod;   }
+
+   public boolean isZSeriesV10CM8()
+   {
+	   if (isDB390() && (isExactly(10, 1, 0) || isExactly(10, 0, 0))) {
+		   return true;
+	   }
+	   return false;
+   }
+   
+   public boolean isAtLeast(int version)
+   {
+	   int currentVersion = version;
+	   if (isZSeriesV10CM8()) {
+		   currentVersion = 8;
+	   }
+	   return currentVersion >= version;
+   }
+
+   public boolean isAtLeast(int version, int release)
+   {
+      if (this.version > version)
+         return true;
+      if (this.version == version)
+         return this.release >= release;
+         return false;
+   }
+
+   /**
+    * Tests the version, release, and modification levels.
+    * For example:
+    * <pre>
+    *    9,0,5  isAtLeast 9,0,5
+    *    9,1,0  isAtLeast 9,0,5 -- Therefore, if you want 9 NFM, use -1 for the release:
+    *    9,-1,5 isAtLeast 9,0,5
+    * </pre>
+    */
+   public boolean isAtLeast(int version, int release, int mod)
+   {
+	   int currentVersion = this.version;
+	   if (isDB390() && isZSeriesSkipLevelCompatMode()) {
+	   	  currentVersion -= 1;
+	   }
+	      
+	   if (currentVersion > version) {
+		   return true;
+	   }
+	      
+	   if (currentVersion == version)
+      {
+         if (release < 0)
+         {
+            return this.mod >= mod;
+         }
+         else
+         {
+            if (this.release > release)
+               return true;
+            if (this.release == release)
+               return this.mod >= mod;
+         }
+      }
+      return false;
+   }
+
+   private boolean isZSeriesSkipLevelCompatMode()
+   {
+	   if (version < DB_VERSION_10) {
+		   return false;
+	   }
+	   
+	   boolean supportsSkipLevelCompatMode = false;
+	   for (int candidateVersion : SUPPORTS_SKIP_LEVEL_COMPAT_MODE) {
+		   if (candidateVersion == version) {
+			   supportsSkipLevelCompatMode = true;
+			   break;
+		   }
+	   }
+	   
+	   if (supportsSkipLevelCompatMode &&  mod < 2) {
+		   return true;
+	   }
+	   
+	   return false;
+   }
+   
+   public boolean isExactly(int version)
+   {
+      return this.version == version;
+   }
+
+   public boolean isExactly(int version, int release)
+   {
+      return this.version == version
+      && this.release == release;
+   }
+
+   public boolean isExactly(int version, int release, int mod)
+   {
+      return this.version == version
+      && this.release == release
+      && this.mod == mod;
+   }
+
+   public boolean isAtMost(int version)
+   {
+      return this.version <= version;
+   }
+
+   public boolean isAtMost(int version, int release)
+   {
+      if (this.version < version)
+         return true;
+      if (this.version == version)
+         return this.release <= release;
+      return false;
+   }
+
+   /**
+    * Determines if the target is no later than the given v,r,m.
+    * To test for compatibility mode, call, isAtMost(v,-1,4).
+    */
+   public boolean isAtMost(int version, int release, int mod)
+   {
+      if (this.version < version)
+         return true;
+      if (this.version == version)
+      {
+         if (release < 0)
+         {
+            return this.mod <= mod;
+         }
+         else
+         {
+            if (this.release < release)
+               return true;
+            if (this.release == release)
+               return this.mod <= mod;
+         }
+      }
+      return false;
+   }
+
+   public String toString()
+   {
+      StringBuffer str = new StringBuffer();
+      if (product == null)
+         str.append("DB2Version "); //$NON-NLS-1$
+      else
+         str.append(product).append(' ');
+      str.append(version).append('.').append(release).append('.').append(mod);
+      return str.toString();
+   }
+
+   /**
+    * If this database type, and the one represented by the argument are of
+    * the same server platform, return <code>true</code>.
+    * <p>
+    * @param aVer Database to compare against
+    * @return <code>true</code> if the databases are of the same server type.
+    */
+   public boolean isSameServerType(DBVersion aVer) {
+      boolean isSameType = false;
+      if (aVer != null) {
+         // wsdbu098517;  V9 NFM to V9 CM or V8 either NFM or CM is considered unlike for sql procedures
+    	  //V10 NFM to V10 CM or V10 NFM to V9 should be considered unlike
+         if ( aVer.isDB390() && this.isDB390() ) {
+//            if  ((aVer.isAtMost(8) && this.isAtLeast(9,-1,5)) ||
+//                  (aVer.isAtMost(9,-1,4) && this.isAtLeast(9,-1,5)) ||
+//            		(aVer.isAtMost(9)) && this.isAtLeast(10,-1,5) ||
+//            		 (aVer.isAtMost(10,-1,4) && this.isAtLeast(10,-1,5)))
+//               isSameType = false;
+//            else
+               isSameType = true;
+         }
+         if ((aVer.isUNO() && this.isUNO()) ||
+               //(aVer.isDB390() && this.isDB390()) ||
+               (aVer.isDB400() && this.isDB400()) ||
+               // Removed test for IBMCloudscape, since isDerby also
+               // checks for IBMCloudscape string
+               (aVer.isDerby() && this.isDerby()))
+         {
+            isSameType = true;
+         }
+         if (aVer.isOracle() && this.isOracle())
+         {
+        	isSameType = true;
+         }
+         if (aVer.isIDS() && this.isIDS()){
+        	 isSameType = true;
+         }
+         if (aVer.isSybase() && this.isSybase())
+         {
+        	 isSameType = true;
+         }
+      }
+      return isSameType;
+   }
+
+   /**
+    * Normalizes the product and version names to match the keys
+    * in our DatabaseDefinition xmi files.
+    * @return An array whose first element is the product key
+    * and whose second element is the version key. 
+    */
+   public String[] normalizeDatabaseDefinitionKeys()
+   {
+      String[] dbDefKeys = new String[]{"",""}; //$NON-NLS-1$ //$NON-NLS-2$
+      if (isUNO()) {
+         dbDefKeys[0] = DBVersion.DB2UDB;
+         switch (getVersion()) 
+         {
+         case 10:
+        	 switch (getRelease()) 
+             {
+             case 1: dbDefKeys[1] = DB_UDB_VERSION_10_5; break;
+             default: dbDefKeys[1] = DB_UDB_VERSION_10_1;
+             }
+        	 break;
+         case 9:
+            switch (getRelease()) 
+            {
+            case 1: dbDefKeys[1] = DB_UDB_VERSION_9_5; break;
+            default: dbDefKeys[1] = DB_UDB_VERSION_9;
+            }
+            break;
+         default:
+            switch (getRelease()) 
+            {
+            case 1: dbDefKeys[1] = DB_VERSION_8_REL_1; break;
+            default: dbDefKeys[1] = DB_VERSION_8_REL_2; 
+            }
+         }
+      }
+      else if (isDB390()) 
+      {
+         dbDefKeys[0] = DBVersion.DB2ZSERIES; 
+         switch (getVersion()) 
+         {
+         case 7: dbDefKeys[1] = DB_ZSERIES_VERSION_7; break;
+         case 8: if (getMod() < 5)
+            dbDefKeys[1] = DB_ZSERIES_VERSION_8_COMPAT; 
+         else 
+            dbDefKeys[1] = DB_ZSERIES_VERSION_8_NEWFUN; 
+         break;
+         case 9: if (getMod() < 5)
+            dbDefKeys[1] = DB_ZSERIES_VERSION_9_COMPAT; 
+         else
+            dbDefKeys[1] = DB_ZSERIES_VERSION_9_NEWFUN; 
+         break;
+         case 10: if (getMod() < 5)
+             dbDefKeys[1] = DB_ZSERIES_VERSION_10_COMPAT; 
+          else
+             dbDefKeys[1] = DB_ZSERIES_VERSION_10_NEWFUN; 
+          break;
+         case 11: if (getMod() < 5)
+             dbDefKeys[1] = DB_ZSERIES_VERSION_11_COMPAT; 
+          else
+             dbDefKeys[1] = DB_ZSERIES_VERSION_11_NEWFUN; 
+          break;
+         default: dbDefKeys[1] = DB_ZSERIES_VERSION_8_NEWFUN;
+         }
+      }
+      else if (isDB400()) 
+      {
+         dbDefKeys[0] = DBVersion.DB2ISERIES;
+         if (isAtLeast(5)) 
+         {
+            switch (getRelease()) 
+            {
+            case 3: dbDefKeys[1] = DB_ISERIES_VERSION_5_REL_3; break;
+            case 4: dbDefKeys[1] = DB_ISERIES_VERSION_5_REL_4; break;
+            default: dbDefKeys[1] = DB_ISERIES_VERSION_5_REL_4;
+            }
+         }
+      }
+      else if (isIBMCloudscape() || isDerby()) 
+      {
+         dbDefKeys[0] = DBVersion.IBMCLOUDSCAPE;
+         if (isExactly(10))
+            dbDefKeys[1] = DB_CLOUDSCAPE_VERSION_10_REL_0;
+      }
+      return dbDefKeys;
+   }
+
+   /**
+    * Normalizes the product and version to match the name
+    * of the DatabaseDefinition xmi files.
+    * @return A name in the form: "product_version.zmi." 
+    */
+   public String normalizeDatabaseDefinitionName()
+   {
+      ReuseStringBuffer dbDefName = ReuseStringBuffer.getBuffer();
+      if (isUNO()) 
+      {
+         dbDefName.append(DBVersion.DB2UDB).append('_');
+         switch (getVersion()) 
+         {
+         case 9:
+            switch (getRelease()) 
+            {
+            case 1: dbDefName.append("9.5"); break; //$NON-NLS-1$
+            default: dbDefName.append("9.1"); //$NON-NLS-1$
+            }
+            break;
+         default: // 8
+            switch (getRelease()) 
+            {
+            case 1: dbDefName.append("8.1"); break; //$NON-NLS-1$
+            default: dbDefName.append("8.2");  //$NON-NLS-1$
+            }
+         }
+      }
+      else if (isDB390()) 
+      {
+         dbDefName.append(DBVersion.DB2ZSERIES).append('_'); 
+         switch (getVersion()) 
+         {
+         case 7: dbDefName.append("7"); break; //$NON-NLS-1$
+         case 8: if (getMod() < 5)
+            dbDefName.append("8 (Compatibility Mode)");  //$NON-NLS-1$
+         else 
+            dbDefName.append("8 (New-Function Mode)");  //$NON-NLS-1$
+         break;
+         case 9: if (getMod() < 5)
+            dbDefName.append(DB_ZSERIES_VERSION_9_COMPAT); 
+         else
+            dbDefName.append(DB_ZSERIES_VERSION_9_NEWFUN); 
+         break;
+         case 10: if (getMod() < 5)
+             dbDefName.append(DB_ZSERIES_VERSION_10_COMPAT); 
+          else
+             dbDefName.append(DB_ZSERIES_VERSION_10_NEWFUN); 
+          break;
+         case 11: if (getMod() < 5)
+             dbDefName.append(DB_ZSERIES_VERSION_11_COMPAT); 
+          else
+             dbDefName.append(DB_ZSERIES_VERSION_11_NEWFUN); 
+          break;
+         }
+      }
+      else if (isDB400()) 
+      {
+         dbDefName.append(DBVersion.DB2ISERIES).append('_');
+         if (isAtLeast(5)) 
+         {
+            switch (getRelease()) 
+            {
+            case 3: dbDefName.append(DB_ISERIES_VERSION_5_REL_3); break;
+            // there is no 5R4 .xmi file
+//            case 4: dbDefName.append(DB_ISERIES_VERSION_5_REL_4); break;
+            default: dbDefName.append(DB_ISERIES_VERSION_5_REL_3);
+            }
+         }
+      }
+      else if (isIBMCloudscape() || isDerby()) 
+      {
+         dbDefName.append(DBVersion.IBMCLOUDSCAPE).append('_');
+         if (isExactly(10))
+            dbDefName.append(DB_CLOUDSCAPE_VERSION_10_REL_0);
+      }
+
+      dbDefName.append(".xmi"); //$NON-NLS-1$
+      return ReuseStringBuffer.toString(dbDefName);
+   }
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/DdlParser.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/DdlParser.java
new file mode 100644
index 0000000..e5a9bf3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/DdlParser.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;
+
+public interface DdlParser {
+
+	public void parseView (ViewTable view,String viewText);
+    public void parseTrigger (Trigger trigger,String triggerText);
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/DependencyImpactAnalyst.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/DependencyImpactAnalyst.java
new file mode 100644
index 0000000..0792aae
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/DependencyImpactAnalyst.java
@@ -0,0 +1,775 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentService;
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentServiceImpl;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.enablement.ibm.IBMPluginActivator;
+import org.eclipse.datatools.enablement.ibm.catalog.IDatabaseObject;
+import org.eclipse.datatools.enablement.ibm.ddl.DdlGenerationMessages;
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.schema.Dependency;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+
+public class DependencyImpactAnalyst {
+	public static DependencyImpactAnalyst getInstance() {
+		if(DependencyImpactAnalyst.INSTANCE == null) {
+			DependencyImpactAnalyst.INSTANCE = new DependencyImpactAnalyst();
+		}
+		return DependencyImpactAnalyst.INSTANCE;
+	}
+	
+	public DependencyImpactDescription[] getDirectDependencies(EObject obj) {
+		List dependencies = new ArrayList();
+		Set excluded = this.getAllContainedObjects(obj);
+
+		// extensions
+		Iterator it = this.dependencyProviders.iterator();
+		while(it.hasNext()) {
+			DependencyProvider provider = (DependencyProvider) it.next();
+			try {
+				DependencyImpactDescription[] deps = provider.getDependencies(obj);
+				if(deps != null) {
+				for(int i=0; i<deps.length; ++i) {
+					// minimum check on the desc
+					if(deps[i].getSource()[0] != null && deps[i].getTarget() != null) {
+						excluded.add(deps[i].getTarget());
+						dependencies.add(deps[i]);
+					}
+				}
+				}
+			}
+			catch(Exception e) {
+				//TODO log the error
+				it.remove();
+			}
+		}
+
+		dependencies.addAll(getDirectDependenciesInternal(obj, excluded));
+		
+		// convert to an array
+		return (DependencyImpactDescription[]) dependencies.toArray(new DependencyImpactDescription[dependencies.size()]);
+	}
+
+	private List getDirectDependenciesInternal (EObject obj, Set excluded) {
+		List dependencies = new ArrayList();
+		excluded.addAll(this.getAllContainers(obj));
+		excluded.add(obj);
+
+		// modeled dependecies
+		if(obj instanceof SQLObject) {
+			Iterator it = ((SQLObject) obj).getDependencies().iterator();
+			while(it.hasNext()) {
+				Dependency dep = ((Dependency) it.next());
+				dependencies.add(this.constructDependencyImpactDescription(new EObject[] {obj}, dep.getDependencyType(), dep.getTargetEnd()));
+				excluded.add(dep.getTargetEnd());
+			}
+		}
+		
+		// references
+		if(!(obj instanceof Dependency)) {
+			List vec= this.getAllReferenceDependencies(obj, excluded);
+			dependencies.addAll(vec);
+		}
+
+		return dependencies;
+	}
+
+	public DependencyImpactDescription[] getAggregateDependencies(EObject obj) {
+		Set contained = this.getAllContainedObjects(obj);
+		ArrayList dependencies = new ArrayList();
+		DependencyImpactDescription[] desc = this.getDirectDependencies(obj);
+		for(int i=0; i<desc.length; ++i) {
+			dependencies.add(desc[i]);
+		}
+		
+		Iterator it = contained.iterator();
+		while(it.hasNext()) {
+			desc = this.getDirectDependencies((EObject) it.next());
+			for(int i=0; i<desc.length; ++i) {
+				if ( !contained.contains(desc[i].getTarget()) ) 
+				{
+					dependencies.add(desc[i]);
+				}
+			}
+		}
+		
+		DependencyImpactDescription[] r = new DependencyImpactDescription[dependencies.size()];
+		it = dependencies.iterator();
+		int i = 0;
+		while(it.hasNext()) {
+			r[i++] = (DependencyImpactDescription) it.next();
+		}
+		return r;
+	}
+
+	public DependencyImpactDescription[] getDirectDependencies(EObject obj, int recursionDepth) {
+		ArrayList dependencies = new ArrayList();
+		Set excluded = this.getAllContainedObjects(obj);
+		excluded.addAll(this.getAllContainers(obj));
+		DependencyImpactDescription[] d = getDirectDependencies(obj);
+		for(int i=0; i<d.length; ++i) {
+			dependencies.add(d[i]);
+			excluded.add(d[i].getTarget());
+		}
+
+		int size = dependencies.size();
+		for(int i=0; i<size; ++i) {
+			dependencies.addAll(this.getDirectDependencies(((DependencyImpactDescription) dependencies.get(i)).getTarget(), recursionDepth, excluded));
+		}
+		
+		return (DependencyImpactDescription[]) dependencies.toArray(new DependencyImpactDescription[dependencies.size()]);
+	}
+	
+	public DependencyImpactDescription[] getAggregateDependencies(EObject obj, int recursionDepth) {
+		ArrayList dependencies = new ArrayList();
+		Set excluded = this.getAllContainedObjects(obj);
+		excluded.addAll(this.getAllContainers(obj));
+		DependencyImpactDescription[] d = getAggregateDependencies(obj);
+		for(int i=0; i<d.length; ++i) {
+			dependencies.add(d[i]);
+			excluded.add(d[i].getTarget());
+		}
+
+		int size = dependencies.size();
+		for(int i=0; i<size; ++i) {
+			dependencies.addAll(this.getAggregateDependencies(((DependencyImpactDescription) dependencies.get(i)).getTarget(), recursionDepth, excluded));
+		}
+		
+		return (DependencyImpactDescription[]) dependencies.toArray(new DependencyImpactDescription[dependencies.size()]);
+	}
+
+	public DependencyImpactDescription[] getDirectImpacted(final EObject obj) {
+		//buildDependencyMap(obj);
+		buildDependencyMapForAll(obj);
+		//this.dumpDependencyMap();
+		DependencyImpactDescription[] r = getDirectImpactedInternal(obj);
+		clearDependencyMap();
+		return r;
+	}
+	
+	public DependencyImpactDescription[] getDirectImpacted2(final EObject obj) {
+		buildDependencyMapForAll(obj);
+		DependencyImpactDescription[] r = getDirectImpactedInternal(obj);
+		return r;
+	}
+	
+	private void buildDependencyMapForAll(final EObject selectedObj) {
+		if(this.dependencyMap != null) return;
+		this.dependencyMap = new HashMap();
+		if(selectedObj instanceof ICatalogObject) {
+			return;
+		}
+//<bgp		else {
+//			ResourceSet rs = IBMPluginActivator.getInstance().getResourceSet();
+//			try {
+//				Iterator rsItor = rs.getResources().iterator();
+//				while(rsItor.hasNext()) {
+//					Resource r = (Resource)rsItor.next();
+//					EList contents = r.getContents();
+//					if(contents.size() > 0) {	
+//						Object obj = contents.get(0);
+//						//(JYEH) added this check for compare and sync which creates a resource for
+//						//catalog objects and the resource will show up in the list of resources
+//						if (obj instanceof ICatalogObject) continue;
+//						if(obj instanceof SQLObject) {
+//							buildDependencyMap((EObject)obj);
+//						}
+//					}
+//				}
+//			}
+//			catch (ConcurrentModificationException e) {
+//				// When copying changes in the compare editor, it is
+//				//   possible to incur this exception, which will result
+//				//   in a failure to copy the complete set of changes.
+//				//   Catch this and suppress it to prevent copy errors.
+//			}
+//bgp>		}
+	}
+	
+	private void buildDependencyMap(final EObject obj) {
+		
+		EObject root = ContainmentServiceImpl.INSTANCE.getRootElement(obj);
+		Set elements = this.getAllContainedObjects(root);
+		elements.add(root);
+		Iterator i = elements.iterator();
+		while(i.hasNext()) {
+			EObject o = (EObject) i.next();
+			//Set excluded = this.getAllContainedObjects(o);
+			Set excluded = new HashSet();
+			Iterator depIterator = this.getDirectDependenciesInternal(o, excluded).iterator();
+			while(depIterator.hasNext()) {
+				DependencyImpactDescription desc = (DependencyImpactDescription) depIterator.next();
+				EObject target = desc.getTarget();
+				ArrayList impacted;
+				if(this.dependencyMap.containsKey(target)) {
+					impacted = (ArrayList) this.dependencyMap.get(target);
+				}
+				else {
+					impacted = new ArrayList();
+					this.dependencyMap.put(target, impacted);
+				}
+				EObject[] source = desc.getSource();
+				String type = desc.getType();
+				for(int k=0; k<source.length; ++k) {
+					impacted.add(this.constructDependencyImpactDescription(new EObject[] {target}, type, source[k]));
+				}
+
+			}
+		}
+	}
+	
+	public void clearDependencyMap() {
+		this.dependencyMap = null;
+	}
+
+	private DependencyImpactDescription[] getDirectImpactedInternal(final EObject obj) {
+		ArrayList impactedVector = new ArrayList();
+		
+		if(obj instanceof IDatabaseObject) {	
+			//Database objects
+			IDatabaseObject dbObj = (IDatabaseObject)obj;
+			ICatalogObject[] objs = dbObj.getImpacted();
+			int len = objs.length;
+			ArrayList impacted = new ArrayList();
+			for(int i=0; i<len; i++) {
+				EObject target = (EObject)objs[i];
+				// If the impacted object is FK, use its owner table
+				if(target instanceof ForeignKey) {
+					target = ((ForeignKey)target).getBaseTable();
+				}
+				impactedVector.add(this.constructDependencyImpactDescription(new EObject[] {obj}, 
+						DependencyImpactMessages.DependencyImpactAnalyst_REFERENCE, 
+						target));
+			}			
+		}
+		else {		
+			//model objects
+			// extensions
+			Iterator it = this.impactProviders.iterator();
+			while(it.hasNext()) {
+				ImpactProvider provider = (ImpactProvider) it.next();
+				try {
+					DependencyImpactDescription[] impacted = provider.getImpacted(obj);
+					if(impacted != null) {
+					for(int m=0; m<impacted.length; ++m) {
+						// minimum check on the desc
+						if(impacted[m].getSource()[0] != null && impacted[m].getTarget() != null) {
+							impactedVector.add(impacted[m]);
+						}
+					}
+					}
+				}
+				catch(Exception e) {
+					it.remove();
+					IBMPluginActivator.getInstance().writeLog(IStatus.ERROR, 0, e.getMessage(), e);
+				}
+			}
+		
+			Object c = this.dependencyMap.get(obj);
+			if(c != null) { 
+				impactedVector.addAll((ArrayList) c);
+			}
+		}
+		
+		return (DependencyImpactDescription[]) impactedVector.toArray(new DependencyImpactDescription[impactedVector.size()]);
+	}
+	
+	public DependencyImpactDescription[] getAggregateImpacted(final EObject obj) {
+		//buildDependencyMap(obj);
+		buildDependencyMapForAll(obj);
+		
+		Set contained = this.getAllContainedObjects(obj);
+		// Use lists to handle duplicate targets
+		ArrayList keys = new ArrayList();
+		ArrayList values = new ArrayList();
+		DependencyImpactDescription[] desc = this.getDirectImpactedInternal(obj);
+		for(int i=0; i<desc.length; ++i) {
+			keys.add(desc[i].getTarget());
+			values.add(desc[i]);
+		}
+		
+		Iterator it = contained.iterator();
+		while(it.hasNext()) {
+			desc = this.getDirectImpactedInternal((EObject) it.next());
+			for(int i=0; i<desc.length; ++i) {
+				if(!contained.contains(desc[i].getTarget())) {
+					keys.add(desc[i].getTarget());
+					values.add(desc[i]);
+				}
+			}
+		}
+		
+		DependencyImpactDescription[] r = new DependencyImpactDescription[keys.size()];
+		it = values.iterator();
+		int i = 0;
+		while(it.hasNext()) {
+			r[i++] = (DependencyImpactDescription) it.next();
+		}
+		
+		clearDependencyMap();
+		
+		return r;
+	}
+	
+	public DependencyImpactDescription[] getDirectImpacted(final EObject obj, int recursionDepth) {
+		//buildDependencyMap(obj);
+		buildDependencyMapForAll(obj);
+		// test		
+		//this.dumpDependencyMap();
+		
+		ArrayList dependencies = new ArrayList();
+		Set excluded = this.getAllContainedObjects(obj);
+		excluded.addAll(this.getAllContainers(obj));
+		DependencyImpactDescription[] d = getDirectImpactedInternal(obj);
+		for(int i=0; i<d.length; ++i) {
+			dependencies.add(d[i]);
+			excluded.add(d[i].getTarget());
+		}
+
+		int size = dependencies.size();
+		for(int i=0; i<size; ++i) {
+			dependencies.addAll(this.getDirectImpacted(((DependencyImpactDescription) dependencies.get(i)).getTarget(), recursionDepth, excluded));
+		}
+		
+		DependencyImpactDescription[] r= (DependencyImpactDescription[]) dependencies.toArray(new DependencyImpactDescription[dependencies.size()]);
+		
+		clearDependencyMap();
+		
+		return r;
+	}
+	
+	public DependencyImpactDescription[] getAggregateImpacted(final EObject obj, int recursionDepth) {
+		//buildDependencyMap(obj);
+		buildDependencyMapForAll(obj);
+		// test
+		//this.dumpDependencyMap();
+
+		ArrayList dependencies = new ArrayList();
+		Set excluded = this.getAllContainedObjects(obj);
+		excluded.addAll(this.getAllContainers(obj));
+		DependencyImpactDescription[] d = getAggregateImpacted(obj);
+		for(int i=0; i<d.length; ++i) {
+			dependencies.add(d[i]);
+			excluded.add(d[i].getTarget());
+		}
+
+		int size = dependencies.size();
+		for(int i=0; i<size; ++i) {
+			dependencies.addAll(this.getAggregateImpacted(((DependencyImpactDescription) dependencies.get(i)).getTarget(), recursionDepth, excluded));
+		}
+		
+		
+		DependencyImpactDescription[] r= (DependencyImpactDescription[]) dependencies.toArray(new DependencyImpactDescription[dependencies.size()]); 
+
+		clearDependencyMap();
+
+		return r;
+	}
+
+	private Set getAllContainedObjects(EObject obj) {
+		Set children = new HashSet();
+		ContainmentService service = IBMPluginActivator.getInstance().getContainmentService();
+		Iterator it = service.getContainedDisplayableElements(obj).iterator();
+		while(it.hasNext()) {
+			EObject child = (EObject) it.next();
+			if(child instanceof SQLObject) {
+				children.add(child);
+				children.addAll(this.getAllContainedObjects(child));
+			}
+		}		
+		return children;
+	}
+	
+	private Set getAllContainers(EObject obj) {
+		Set containers = new HashSet();
+		containers.addAll(ContainmentServiceImpl.INSTANCE.getAllContainers(obj));
+		return containers;
+	}
+	
+	private ArrayList getAllReferenceDependencies(EObject obj, Set excluded) {
+		ArrayList deps = this.getReferenceDependencies(obj, excluded, obj);
+		Iterator it = this.getAllInvisibleChildren(obj).iterator();
+		while(it.hasNext()) {
+			EObject child = (EObject) it.next();
+			if(child instanceof SQLObject) {
+				deps.addAll(this.getReferenceDependencies(child, excluded, obj));
+			}
+		}
+		return deps;
+	}
+	
+	private ArrayList getReferenceDependencies(EObject obj, Set excluded, EObject source) {
+		ContainmentService service = IBMPluginActivator.getInstance().getContainmentService();
+		ArrayList deps = new ArrayList(); 
+		
+		EClass eClass = obj.eClass();
+		Iterator references = eClass.getEAllReferences().iterator();
+		while(references.hasNext()) {
+			EReference reference = (EReference) references.next();
+			//if(!reference.isContainment()) {//??
+				if(reference.getEOpposite() == null) { // directional
+					if(reference.isMany()) {
+						Iterator it = ((Collection) obj.eGet(reference)).iterator();
+						while(it.hasNext()) {
+							Object t = it.next();
+							if(t instanceof Dependency) {
+								// obj doesn't reference Dependency itself, it reference the target end of Dependency
+								t = ((Dependency)t).getTargetEnd();
+							}
+							if(t instanceof SQLObject && !excluded.contains(t)) {
+								EObject target = (EObject) t;
+								EObject container = service.getContainer(target);
+								if(/*container != null &&*/ service.isDisplayableElement(target)) {
+									excluded.add(target);
+									deps.add(this.constructDependencyImpactDescription(new EObject[] {source}, DependencyImpactMessages.DependencyImpactAnalyst_REFERENCE, target)); 
+								}											
+							}						
+						}
+					}
+					else {
+						Object t = obj.eGet(reference);
+						if(t instanceof SQLObject && !excluded.contains(t)) {
+							EObject target = (EObject) t;
+							EObject container = service.getContainer(target);
+							if(/*container != null &&*/ service.isDisplayableElement(target)) {
+								excluded.add(target);
+								deps.add(this.constructDependencyImpactDescription(new EObject[] {source}, DependencyImpactMessages.DependencyImpactAnalyst_REFERENCE, target)); 
+							}											
+						}
+					}
+				}
+				else { // bidirectional
+					if(!reference.isMany()) {
+						// use impact extension to replace these
+//						Object t = obj.eGet(reference);
+//						if(t instanceof EObject && !excluded.contains(t)) {
+//							if( (obj instanceof ForeignKey) || 
+//									(isLogicalGeneralization(obj)) || 
+//									(isLogicalRelationshipEnd(obj))) {							
+//								// handle relationship, generalization and FK special cases
+//								EObject target = (EObject) t;
+//								EObject container = service.getContainer(target);
+//								EObject objContainer = service.getContainer(obj);
+//								if(container != null 
+//										&& service.isDisplayableElement(target) 
+//										&& (!target.equals(objContainer))
+//										&& (!((source instanceof ForeignKey) && (target instanceof BaseTable) && (!objContainer.equals(target))))) {// remove FK to Parent table reference
+//									excluded.add(target);
+//									EObject displayedSource = service.getContainer(source);
+//									EObject displayedTarget;
+//									if(target instanceof PrimaryKey) {
+//										displayedTarget = service.getContainer(target);
+//									}
+//									else 
+//										displayedTarget = target;
+//									deps.add(this.constructDependencyImpactDescription(new EObject[] {displayedSource}, Messages.DependencyImpactAnalyst_REFERENCE, displayedTarget)); 
+//									//deps.add(this.constructDependencyImpactDescription(new EObject[] {displayedTarget}, Messages.getString("DependencyImpactAnalyst.REFERENCE"), displayedSource)); //$NON-NLS-1$
+//								}
+//							}
+//						}						
+					}
+					if(reference.isMany()) {// bidirectional many
+						if(!reference.isMany()) {
+							Object t = obj.eGet(reference);
+							if(t instanceof EObject && !excluded.contains(t)) {
+								EObject target = (EObject) t;
+								EObject container = service.getContainer(target);
+								if(container != null && service.isDisplayableElement(target)) {
+									excluded.add(target);
+									deps.add(this.constructDependencyImpactDescription(new EObject[] {source}, DependencyImpactMessages.DependencyImpactAnalyst_REFERENCE, target)); 
+								}											
+							}						
+						}
+//						Iterator it = ((Collection) obj.eGet(reference)).iterator();
+//						while(it.hasNext()) {
+//							Object t = it.next();
+//							if(t instanceof SQLObject && !excluded.contains(t)) {
+//								EObject target = (EObject) t;
+//								EObject container = service.getContainer(target);								
+//								if(/*container != null &&*/ service.isDisplayableElement(target) &&
+//										(!((source instanceof PrimaryKey) && (target instanceof ForeignKey))) && //need to remove PK to FK dependency
+//										(!((source instanceof BaseTable) && (target instanceof ForeignKey) && (!container.equals(source)))) ) {//need to remove Parent table to FK reference as dependency
+//									excluded.add(target);
+//									deps.add(this.constructDependencyImpactDescription(new EObject[] {source}, Messages.getString("DependencyImpactAnalyst.REFERENCE"), target)); //$NON-NLS-1$
+//								}
+//							}
+//						}
+					}
+				}
+			//}
+		}
+		return deps;
+	}
+	
+	// Since the dependency to Logical model can NOT be introduced, use the getMethod to identify the types
+	private boolean isLogicalRelationshipEnd(EObject obj) {
+		try {
+			Method m = obj.getClass().getMethod("getVerbPhrase", null);
+			if(m != null)
+				return true;
+		}
+		catch(NoSuchMethodException exp) {
+		}
+		return false;
+	}
+	
+	private boolean isLogicalGeneralization(EObject obj) {
+		try {
+			Method m = obj.getClass().getMethod("getSupertype", null);
+			if(m != null)
+				return true;
+		}
+		catch(NoSuchMethodException exp) {
+		}
+		return false;
+	}
+	
+	private ArrayList getAllInvisibleChildren(EObject obj) {
+		ArrayList children = this.getInvisibleChildren(obj);
+		int size = children.size();
+		for(int i=0; i<size; ++i) {
+			children.addAll(this.getAllInvisibleChildren((EObject) children.get(i)));
+		}
+		return children;
+	}
+	
+	private ArrayList getInvisibleChildren(EObject obj) {
+		ArrayList children = new ArrayList();
+		ContainmentService service = IBMPluginActivator.getInstance().getContainmentService();
+		Set excluded = new HashSet();
+		excluded.addAll(service.getContainedDisplayableElements(obj));
+		
+		Iterator it = service.getContainedElements(obj).iterator();
+		while(it.hasNext()) {
+			Object child = it.next();
+			if(!excluded.contains(child)) {
+				children.add(child);
+			}
+		}		
+		return children;		
+	}
+	
+	private DependencyImpactDescription constructDependencyImpactDescription(final EObject[] source, final String type, final EObject target) {
+		return new DependencyImpactDescription() {
+			public EObject getTarget() {
+				return target;
+			}
+
+			public EObject[] getSource() {
+				return source;
+			}
+
+			public String getType() {
+				return type;
+			}
+		};
+	}
+	
+	private ArrayList getDirectDependencies(final EObject obj, int recursionDepth, Set excluded) {
+		ArrayList dependencies = new ArrayList();
+		ArrayList excludedDependencies = new ArrayList();
+		if(recursionDepth-- == 0) return dependencies;
+
+		DependencyImpactDescription[] d = this.getDirectDependencies(obj);
+		for(int i=0; i<d.length; ++i) {
+			if(!excluded.contains(d[i].getTarget())) {
+				dependencies.add(d[i]);
+				excluded.add(d[i].getTarget());				
+			}
+			else {
+				excludedDependencies.add(d[i]);
+			}
+		}
+		int size = dependencies.size();
+		for(int i=0; i<size; ++i) {
+			dependencies.addAll(this.getDirectDependencies(((DependencyImpactDescription) dependencies.get(i)).getTarget(), recursionDepth, excluded));
+		}
+		dependencies.addAll(excludedDependencies);
+		
+		return dependencies;		
+	}
+	
+	private ArrayList getAggregateDependencies(final EObject obj, int recursionDepth, Set excluded) {
+		ArrayList dependencies = new ArrayList();
+		ArrayList excludedDepencencies = new ArrayList();
+		if(recursionDepth-- == 0) return dependencies;
+
+		DependencyImpactDescription[] d = this.getAggregateDependencies(obj);
+		for(int i=0; i<d.length; ++i) {
+			if(!excluded.contains(d[i].getTarget())) {
+				dependencies.add(d[i]);
+				excluded.add(d[i].getTarget());
+			}
+			else {
+				excludedDepencencies.add(d[i]);
+			}
+		}
+		int size = dependencies.size();
+		for(int i=0; i<size; ++i) {
+			dependencies.addAll(this.getAggregateDependencies(((DependencyImpactDescription) dependencies.get(i)).getTarget(), recursionDepth, excluded));
+		}
+		dependencies.addAll(excludedDepencencies);
+		
+		return dependencies;		
+	}
+	
+	private ArrayList getDirectImpacted(final EObject obj, int recursionDepth, Set excluded) {
+		ArrayList dependencies = new ArrayList();
+		ArrayList excludedDepencencies = new ArrayList();
+		if(recursionDepth-- == 0) return dependencies;
+
+		DependencyImpactDescription[] d = this.getDirectImpactedInternal(obj);
+		for(int i=0; i<d.length; ++i) {
+			if(!excluded.contains(d[i].getTarget())) {
+				dependencies.add(d[i]);
+				excluded.add(d[i].getTarget());
+			}
+			else {
+				excludedDepencencies.add(d[i]);
+			}
+		}
+		int size = dependencies.size();
+		for(int i=0; i<size; ++i) {
+			dependencies.addAll(this.getDirectImpacted(((DependencyImpactDescription) dependencies.get(i)).getTarget(), recursionDepth, excluded));
+		}
+		dependencies.addAll(excludedDepencencies);
+		
+		return dependencies;		
+	}
+
+	private ArrayList getAggregateImpacted(final EObject obj, int recursionDepth, Set excluded) {
+		ArrayList dependencies = new ArrayList();
+		ArrayList excludedDependencies = new ArrayList();
+		if(recursionDepth-- == 0) return dependencies;
+
+		DependencyImpactDescription[] d = this.getAggregateImpacted(obj);
+		for(int i=0; i<d.length; ++i) {
+			if(!excluded.contains(d[i].getTarget())) {
+				dependencies.add(d[i]);
+				excluded.add(d[i].getTarget());
+			}
+			else {
+				excludedDependencies.add(d[i]);
+			}
+		}
+		int size = dependencies.size();
+		for(int i=0; i<size; ++i) {
+			dependencies.addAll(this.getAggregateImpacted(((DependencyImpactDescription) dependencies.get(i)).getTarget(), recursionDepth, excluded));
+		}
+		dependencies.addAll(excludedDependencies);
+		
+		return dependencies;		
+	}
+
+	private void initProviders() {
+		IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
+		IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint("com.ibm.datatools.core", "dependencyExtension"); //$NON-NLS-1$ //$NON-NLS-2$
+		IExtension[] extensions = extensionPoint.getExtensions();
+		for(int i=0; i<extensions.length; ++i) {
+			IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+			for(int j=0; j<configElements.length; ++j) {
+				if(configElements[j].getName().equals("dependency")) { //$NON-NLS-1$
+					DependencyProvider provider = null;
+					try {
+						provider = (DependencyProvider) configElements[j].createExecutableExtension("provider"); //$NON-NLS-1$
+					}
+					catch(CoreException e) {
+						continue;
+					}
+					this.dependencyProviders.add(provider);
+				}
+			}
+		}
+
+		extensionPoint = pluginRegistry.getExtensionPoint("com.ibm.datatools.core", "impactExtension"); //$NON-NLS-1$ //$NON-NLS-2$
+		extensions = extensionPoint.getExtensions();
+		for(int i=0; i<extensions.length; ++i) {
+			IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+			for(int j=0; j<configElements.length; ++j) {
+				if(configElements[j].getName().equals("impact")) { //$NON-NLS-1$
+					ImpactProvider provider = null;
+					try {
+						provider = (ImpactProvider) configElements[j].createExecutableExtension("provider"); //$NON-NLS-1$
+					}
+					catch(CoreException e) {
+						continue;
+					}
+					this.impactProviders.add(provider);
+				}
+			}
+		}
+	}
+	
+	private DependencyImpactAnalyst() {
+		this.initProviders();
+	}
+	
+	private void dumpDependencyMap() {
+		Set keySet = dependencyMap.keySet();
+		Iterator keyItor = keySet.iterator();
+		Object keyObj;
+		ArrayList values;
+		while(keyItor.hasNext()) {
+			keyObj = keyItor.next();
+			System.out.println("key = " + ((SQLObject)keyObj).eClass().getName() + " " + ((SQLObject)keyObj).getName());
+			values = (ArrayList)dependencyMap.get(keyObj);
+			Iterator valItor = values.iterator();
+			while(valItor.hasNext()) {
+				DependencyImpactDescription d = (DependencyImpactDescription)valItor.next();
+				EObject eVal = d.getTarget();
+				if(eVal instanceof SQLObject) {
+					SQLObject val = (SQLObject)eVal;
+					System.out.println("\t" + "target = " + val.eClass().getName() + " " + val.getName());
+				}
+				else {
+					System.out.println("\t" + "target = " + eVal.getClass().getName());
+				}
+				Object[] srcs = d.getSource();
+				for(int i=0; i<srcs.length; i++) {
+					Object src = srcs[i];
+					if(src instanceof SQLObject) {
+						System.out.println("\t" + "source = " + ((SQLObject)src).eClass().getName() + " " + ((SQLObject)src).getName());
+					}
+					else {
+						System.out.println("\t" + "source = " + ((SQLObject)src).getClass().getName());
+					}
+				}
+			}
+		}
+	}
+	
+	private static DependencyImpactAnalyst INSTANCE = null;
+	private ArrayList dependencyProviders = new ArrayList();
+	private ArrayList impactProviders = new ArrayList();
+	private Map dependencyMap = null;
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/DependencyImpactDescription.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/DependencyImpactDescription.java
new file mode 100644
index 0000000..b1fb4a5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/DependencyImpactDescription.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import org.eclipse.emf.ecore.EObject;
+
+public interface DependencyImpactDescription {
+	public static final DependencyImpactDescription[] EMPTY_DESCS = new DependencyImpactDescription[] {};
+	public EObject getTarget();
+	public EObject[] getSource();
+	public String getType();
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/DependencyImpactMessages.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/DependencyImpactMessages.java
new file mode 100644
index 0000000..3335122
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/DependencyImpactMessages.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import org.eclipse.osgi.util.NLS;
+
+public final class DependencyImpactMessages extends NLS {
+
+	private static final String BUNDLE_NAME = "org.eclipse.datatools.enablement.ibm.uti.DependencyImpactMessages";//$NON-NLS-1$
+
+	private DependencyImpactMessages() {
+		// Do not instantiate
+	}
+
+	public static String DependencyImpactAnalyst_REFERENCE;
+
+	static {
+		NLS.initializeMessages(BUNDLE_NAME, DependencyImpactMessages.class);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/DependencyImpactMessages.properties b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/DependencyImpactMessages.properties
new file mode 100644
index 0000000..07013ca
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/DependencyImpactMessages.properties
@@ -0,0 +1,3 @@
+# NLS_MESSAGEFORMAT_VAR          needed to handle quotes correctly
+
+DependencyImpactAnalyst_REFERENCE=Reference
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/DependencyProvider.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/DependencyProvider.java
new file mode 100644
index 0000000..7007991
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/DependencyProvider.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import org.eclipse.emf.ecore.EObject;
+
+public interface DependencyProvider {
+	public DependencyImpactDescription[] getDependencies(EObject object);
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/EngineeringOptionCategoryID.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/EngineeringOptionCategoryID.java
new file mode 100644
index 0000000..d722cac
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/EngineeringOptionCategoryID.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 20011, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+public class EngineeringOptionCategoryID extends org.eclipse.datatools.connectivity.sqm.internal.core.rte.EngineeringOptionCategoryID {
+
+	public final static String XMLSCHEMA_CONTROLS = "XMLSCHEMA_CONTROLS"; //$NON-NLS-1$
+	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/EngineeringOptionID.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/EngineeringOptionID.java
new file mode 100644
index 0000000..24a7cb2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/EngineeringOptionID.java
@@ -0,0 +1,469 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.util.Set;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.EngineeringOption;
+
+ /**
+ * @author chetabha
+ *
+ */
+ 
+public class EngineeringOptionID extends org.eclipse.datatools.connectivity.sqm.core.definition.EngineeringOptionID {
+    public final static String GENERATE_LABELS                 = "GENERATE_LABELS"; //$NON-NLS-1$
+    public final static String GENERATE_SYNONYM                = "GENERATE_SYNONYM"; //$NON-NLS-1$
+    public final static String GENERATE_DATABASE               = "GENERATE_DATABASE"; //$NON-NLS-1$
+    public final static String GENERATE_MQT                    = "GENERATE_MQT"; //$NON-NLS-1$
+    public final static String GENERATE_ALIAS                  = "GENERATE_ALIAS"; //$NON-NLS-1$
+    public final static String GENERATE_CK_CONSTRAINTS         = "GENERATE_CK_CONSTRAINTS"; //$NON-NLS-1$
+    public final static String GENERATE_BUFFERPOOL             = "GENERATE_BUFFERPOOL"; //$NON-NLS-1$
+    public final static String GENERATE_PARTITIONGROUP         = "GENERATE_PARTITIONGROUP"; //$NON-NLS-1$
+    public final static String GENERATE_STORAGEGROUP           = "GENERATE_STORAGEGROUP"; //$NON-NLS-1$
+    public final static String GENERATE_SCHEMAS                = "GENERATE_SCHEMAS"; //$NON-NLS-1$
+    public final static String GENERATE_WRAPPER                = "GENERATE_WRAPPER"; //$NON-NLS-1$    
+    public final static String GENERATE_REMOTESERVER           = "GENERATE_REMOTESERVER"; //$NON-NLS-1$
+    public final static String GENERATE_USERMAPPING            = "GENERATE_USERMAPPING"; //$NON-NLS-1$
+    public final static String GENERATE_NICKNAME               = "GENERATE_NICKNAME"; //$NON-NLS-1$
+    public final static String GENERATE_OLAP                   = "GENERATE_OLAP"; //$NON-NLS-1$
+    // fsp - pyl
+    public final static String GENERATE_FEDERATEDPROCEDURES    = "GENERATE_FEDERATEDPROCEDURES"; //$NON-NLS-1$  
+    public final static String GENERATE_PACKAGE				   = "GENERATE_PACKAGE"; //$NON-NLS-1$  
+    public final static String GENERATE_PACKAGE_BODY		   = "GENERATE_PACKAGE_BODY"; //$NON-NLS-1$  
+    public final static String GENERATE_BACKUP_TABLE		   = "GENERATE_BACKUP_TABLE"; //$NON-NLS-1$  
+    public final static String GENERATE_STATISTICS		       = "GENERATE_STATISTICS"; //$NON-NLS-1$  
+    public final static String GENERATE_ROLE		       	   = "GENERATE_ROLE"; //$NON-NLS-1$  
+    public final static String GENERATE_USER		       	   = "GENERATE_USER"; //$NON-NLS-1$  
+    public final static String GENERATE_GROUP		       	   = "GENERATE_GROUP"; //$NON-NLS-1$  
+    public final static String GENERATE_XMLSCHEMA              = "GENERATE_XMLSCHEMA"; //$NON-NLS-1$
+    public final static String XMLSCHEMA_CONNECTION_NAME       = "XMLSCHEMA_CONNECTION_NAME"; //$NON-NLS-1$
+    public final static String XMLSCHEMA_DIRECTORY             = "XMLSCHEMA_DIRECTORY"; //$NON-NLS-1$
+    public final static String GENERATE_SECURITY_POLICY        = "GENERATE_SECURITY_POLICY"; //$NON-NLS-1$
+    
+	public final static String GENERATE_FULLY_QUALIFIED_NAME   = "GENERATE_FULLY_QUALIFIED_NAME";  //$NON-NLS-1$
+	public final static String GENERATE_QUOTED_IDENTIFIER      = "GENERATE_QUOTED_IDENTIFIER"; //$NON-NLS-1$ 
+	public final static String GENERATE_DROP_STATEMENTS        = "GENERATE_DROP_STATEMENTS"; //$NON-NLS-1$ 
+	public final static String GENERATE_CREATE_STATEMENTS      = "GENERATE_CREATE_STATEMENTS"; //$NON-NLS-1$ 
+	public final static String GENERATE_COMMENTS               = "GENERATE_COMMENTS"; //$NON-NLS-1$
+	public final static String GENERATE_IN_TABLESPACE_CLAUSE   = "GENERATE_IN_TABLESPACE_CLAUSE"; //$NON-NLS-1$
+	public final static String GENERATE_ON_FILEGROUP_CLAUSE    = "GENERATE_ON_FILEGROUP_CLAUSE"; //$NON-NLS-1$
+	public final static String GENERATE_USE_DOMAIN_IF_EXIST    = "USE_DOMAIN_IF_EXIST"; //$NON-NLS-1$
+	public final static String GENERATE_CREATE_OR_REPLACE      = "CREATE_OR_REPLACE"; //$NON-NLS-1$
+	public final static String GENERATE_TABLES                 = "GENERATE_TABLES"; //$NON-NLS-1$ 
+	public final static String GENERATE_TABLESPACES            = "GENERATE_TABLESPACES"; //$NON-NLS-1$
+	public final static String GENERATE_FILEGROUPS            = "GENERATE_FILEGROUPS"; //$NON-NLS-1$
+	public final static String GENERATE_INDICES                = "GENERATE_INDICES"; //$NON-NLS-1$
+	public final static String GENERATE_STOREDPROCEDURES       = "GENERATE_STOREDPROCEDURES"; //$NON-NLS-1$
+	public final static String GENERATE_FUNCTIONS              = "GENERATE_FUNCTIONS"; //$NON-NLS-1$
+	public final static String GENERATE_VIEWS                  = "GENERATE_VIEWS"; //$NON-NLS-1$
+	public final static String GENERATE_TRIGGERS               = "GENERATE_TRIGGERS"; //$NON-NLS-1$
+	public final static String GENERATE_SEQUENCES              = "GENERATE_SEQUENCES"; //$NON-NLS-1$
+	public final static String GENERATE_USER_DEFINED_TYPE      = "GENERATE_USER_DEFINED_TYPE"; //$NON-NLS-1$
+	public final static String GENERATE_ENFORCED_CONSTRAINTS   = "GENERATE_ENFORCED_CONSTRAINTS"; //$NON-NLS-1$
+	public final static String GENERATE_PK_CONSTRAINTS         = "GENERATE_PK_CONSTRAINTS"; //$NON-NLS-1$
+	public final static String GENERATE_FK_CONSTRAINTS         = "GENERATE_FK_CONSTRAINTS"; //$NON-NLS-1$
+	public final static String GENERATE_PRIVILEGE              = "GENERATE_PRIVILEGE"; //$NON-NLS-1$
+	public final static String CHECK_MODEL              		= "CHECK_MODEL"; //$NON-NLS-1$
+	public final static String GENERATE_MODULE              		= "GENERATE_MODULE"; //$NON-NLS-1$
+	public final static String GENERATE_MODULE_CONDITION              		= "GENERATE_CONDITION"; //$NON-NLS-1$
+	public final static String GENERATE_GLOBAL_VARIABLE              = "GENERATE_GLOBAL_VARIABLE"; //$NON-NLS-1$
+	public final static String GENERATE_HISTORY_TABLE          = "GENERATE_HISTORY_TABLE"; //$NON-NLS-1$
+	public final static String DROP_RESTRICT                   = "DROP_RESTRICT"; //$NON-NLS-1$
+	public final static String GENERATE_ROW_PERMISSIONS        = "GENERATE_ROW_PERMISSIONS"; //$NON-NLS-1$
+	public final static String GENERATE_COLUMN_MASKS	       = "GENERATE_COLUMN_MASKS"; //$NON-NLS-1$
+	public final static String GENERATE_TEMPORARY_TABLES	       = "GENERATE_TEMPORARY_TABLES"; //$NON-NLS-1$
+	public final static String GENERATE_DOMAIN	       = "GENERATE_DOMAIN"; //$NON-NLS-1$
+	
+    public static boolean checkModel(EngineeringOption[] options) {
+        return getOptionValueByID(EngineeringOptionID.CHECK_MODEL, options);
+    }
+    
+    public static boolean generateDropStatement(EngineeringOption[] options) {
+        return getOptionValueByID(EngineeringOptionID.GENERATE_DROP_STATEMENTS, options);
+    }
+
+    public static boolean generateTemporaryTables(EngineeringOption[] options) {
+        return getOptionValueByID(EngineeringOptionID.GENERATE_TEMPORARY_TABLES, options);
+    }
+
+ 	// Data Preservation   
+    public static boolean generateBackupStatement(EngineeringOption[] options) {
+        return getOptionValueByID(EngineeringOptionID.GENERATE_BACKUP_TABLE, options);
+    }
+ 	// End Data Preservation   
+    
+    public static boolean generateCreateStatement(EngineeringOption[] options) {
+        return getOptionValueByID(EngineeringOptionID.GENERATE_CREATE_STATEMENTS, options);
+    }
+
+    public static boolean generateCommentStatement(EngineeringOption[] options) {
+        return getOptionValueByID(EngineeringOptionID.GENERATE_COMMENTS, options);
+    }
+
+    public static boolean generateLabelStatement(EngineeringOption[] options) {
+        return getOptionValueByID(EngineeringOptionID.GENERATE_LABELS, options);
+    }
+
+    public static boolean generateGrantStatement(EngineeringOption[] options) {
+        return getOptionValueByID(EngineeringOptionID.GENERATE_PRIVILEGE, options);
+    }
+    
+    public static boolean generateRevokeStatement(EngineeringOption[] options) {
+        return getOptionValueByID(EngineeringOptionID.GENERATE_PRIVILEGE, options);
+    }
+
+    public static boolean generateDatabase(EngineeringOption[] options) {
+        return getOptionValueByID(EngineeringOptionID.GENERATE_DATABASE, options);
+    }
+    
+    public static boolean generateSchemas(EngineeringOption[] options) {
+        return getOptionValueByID(EngineeringOptionID.GENERATE_SCHEMAS, options);
+    }
+
+    public static boolean generateInTablespaceClause(EngineeringOption[] options) {
+        return getOptionValueByID(EngineeringOptionID.GENERATE_IN_TABLESPACE_CLAUSE, options);
+    }
+
+    public static boolean generateOnFileGroupClause(EngineeringOption[] options) {
+        return getOptionValueByID(EngineeringOptionID.GENERATE_ON_FILEGROUP_CLAUSE, options);
+    }
+    
+    public static boolean useDomain(EngineeringOption[] options) {
+        return getOptionValueByID(EngineeringOptionID.GENERATE_USE_DOMAIN_IF_EXIST, options);
+    }
+    
+    public static boolean generateCreateOrReplace(EngineeringOption[] options) {
+        return getOptionValueByID(EngineeringOptionID.GENERATE_CREATE_OR_REPLACE, options);
+    }
+    
+    public static boolean generateQuotedIdentifiers(EngineeringOption[] options) {
+        return getOptionValueByID(EngineeringOptionID.GENERATE_QUOTED_IDENTIFIER, options);
+    }
+
+    public static boolean generateFullyQualifiedNames(EngineeringOption[] options) {
+        return getOptionValueByID(EngineeringOptionID.GENERATE_FULLY_QUALIFIED_NAME, options);
+    }
+
+    public static boolean generatePartitionGroup(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_PARTITIONGROUP, options);
+    }
+
+    public static boolean generateStorageGroups(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_STORAGEGROUP, options);
+    }
+    
+    public static boolean generateBufferPool(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_BUFFERPOOL, options);
+    }
+    
+    public static boolean generateAliases(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_ALIAS, options);
+    }
+
+    public static boolean generateSynonyms(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_SYNONYM, options);
+    }
+    
+    public static boolean generateTables(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_TABLES, options);
+    }
+    
+    public static boolean generateMQTs(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_MQT, options);
+    }
+
+    public static boolean generateTablespaces(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_TABLESPACES, options);
+    }
+    public static boolean generateFileGroups(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_FILEGROUPS, options);
+    }
+    
+    public static boolean generateIndexes(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_INDICES, options);
+    }
+    
+    public static boolean generateStoredProcedures(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_STOREDPROCEDURES, options);
+    }
+
+    // fsp - pyl
+    public static boolean generateFederatedProcedures(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_FEDERATEDPROCEDURES, options);
+    }
+    
+    public static boolean generateViews(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_VIEWS, options);
+    }
+
+    public static boolean generateTriggers(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_TRIGGERS, options);
+    }
+
+    public static boolean generateSequences(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_SEQUENCES, options);
+    }
+    
+    public static boolean generateFunctions(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_FUNCTIONS, options);
+    }
+    
+    public static boolean generateUserDefinedTypes(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_USER_DEFINED_TYPE, options);
+    }
+
+    public static boolean generateDomains(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_DOMAIN, options);
+    }
+
+    public static boolean generateCKConstraints(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_CK_CONSTRAINTS, options);
+    }
+    public static boolean generatePKConstraints(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_PK_CONSTRAINTS, options);
+    }
+    public static boolean generateFKConstraints(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_FK_CONSTRAINTS, options);
+    }
+    public static boolean generatePacakges(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_PACKAGE, options);
+    }
+    public static boolean generatePacakgeBodys(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_PACKAGE_BODY, options);
+    }
+    public static boolean generateStatistics(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_STATISTICS, options);
+    }
+    public static boolean generateRoles(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_ROLE, options);
+    }
+    public static boolean generateUsers(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_USER, options);
+    }
+    public static boolean generateGroups(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_GROUP, options);
+    }
+    public static boolean generateModules(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_MODULE, options);
+    }
+    public static boolean generateModuleConditions(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_MODULE_CONDITION, options);
+    }
+    public static boolean generateGlobalVariables(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_GLOBAL_VARIABLE, options);
+    }
+    public static boolean generateHistoryTable(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_HISTORY_TABLE, options);
+    }
+    public static boolean generateXMLSchema(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_XMLSCHEMA, options);
+    }
+    public static String xmlSchemaConnectionName(EngineeringOption[] options){
+        return getStringOptionByName(EngineeringOptionID.XMLSCHEMA_CONNECTION_NAME, options);
+    }
+    public static String xmlSchemaDirectory(EngineeringOption[] options){
+        return getStringOptionByName(EngineeringOptionID.XMLSCHEMA_DIRECTORY, options);
+    }
+    public static boolean generateSecurityPolicy(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_SECURITY_POLICY, options);
+    }
+    public static boolean dropRestrict(EngineeringOption[] options) {
+        return getOptionValueByID(EngineeringOptionID.DROP_RESTRICT, options);
+    }   
+    public static boolean generateRowPermissions(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_ROW_PERMISSIONS, options);
+    }
+    public static boolean generateColumnMasks(EngineeringOption[] options){
+        return getOptionValueByID(EngineeringOptionID.GENERATE_COLUMN_MASKS, options);
+    }
+    public static String getStringOptionByName(String optionName, EngineeringOption[] options) {
+    	String ret = null;
+        for (int i = 0; i < options.length; i++){
+            EngineeringOption option = options[i];
+            if (option != null && option.getOptionName().equals(optionName)) {
+                ret = option.getString();
+                break;
+            }
+        }
+        return ret;
+	}
+    
+    public static boolean getOptionValue(String optionName, EngineeringOption[] options){
+        boolean ret = false;
+        for (int i = 0; i < options.length; i++){
+            EngineeringOption option = (EngineeringOption) options[i];
+            if (option != null && option.getOptionName().equals(optionName)) { //@d00058820gs
+                ret = option.getBoolean();
+                break;
+            }
+        }
+        return ret;
+    }
+    
+    public static final long DATABASE = 1;
+    public static final long TABLE = 2;
+    public static final long NICKNAME = 4;
+    public static final long SERVER = 8;
+    public static final long WRAPPER = 16;
+    public static final long USER_MAPPING = 32;
+    public static final long OLAP_OBJECT = 64;
+    public static final long TABLESPACE = 128;
+    public static final long INDEX = 256;
+    public static final long PROCEDURE = 512;
+    public static final long USER_DEFINED_FUNCTION = 1024;
+    public static final long VIEW = 2048;
+    public static final long TRIGGER = 4096;
+    public static final long SEQUENCE = 8192; 
+    public static final long USER_DEFINED_TYPE = 16384;
+    public static final long UNIQUE_CONSTRAINT = 32768;
+    public static final long MATERIALIZED_QUERY_TABLE = 65536;
+    public static final long ALIAS = 131072;
+    public static final long CHECK_CONSTRAINT = 262144;
+    public static final long FOREIGN_KEY = 524288;
+    public static final long BUFFER_POOL = 1048576;
+    public static final long PARTITION_GROUP = 2097152;
+    public static final long SCHEMA = 4194304;
+    public static final long DISTINCT_USER_DEFINED_TYPE = 8388608;
+    public static final long STRUCTURED_USER_DEFINED_TYPE = 16777216;
+    public static final long SYNONYM = 33554432;
+    public static final long STORAGE_GROUP = 67108864;
+    public static final long PRIVILEGE  = 134217728; 
+    public static final long FEDERATEDPROCEDURE = 268435456;    // fsp - pyl
+    public static final long PACKAGE  = 536870912; 
+    public static final long PACKAGE_BODY = 1073741824;
+    public static final long BACKUP_TABLE = new Long("2147483648").longValue(); // Data Preservation
+    public static final long COLUMN = new Long("4294967296").longValue();
+    public static final long STATISTICS = new Long("8589934592").longValue(); 
+    public static final long ROLE = new Long("17179869184").longValue(); 
+    public static final long MODULE = new Long("34359738368").longValue(); 
+    public static final long MODULE_CONDITION = new Long("68719476736").longValue(); 
+    public static final long GLOBAL_VARIABLE = new Long("137438953472").longValue(); 
+    public static final long HISTORY_TABLE = new Long("274877906944").longValue(); 
+    public static final long XMLSCHEMA = new Long("549755813888").longValue();
+    public static final long FILEGROUP = new Long("1099511627776").longValue();
+    public static final long SECURITY_POLICY = new Long("2199023255552").longValue();
+    public static final long ROW_PERMISSIONS = new Long("4398046511104").longValue();
+    public static final long COLUMN_MASKS = new Long("8796093022208").longValue();
+    public static final long USER = new Long("17592186044416").longValue();
+    public static final long GROUP = new Long("35184372088832").longValue();
+    public static final long TEMPORARY_TABLE = new Long("70368744177664").longValue();
+    public static final long DOMAIN = new Long("140737488355328").longValue();
+    
+    /**
+     * @param s
+     * @param mask
+     */
+    public static void populateOptions(Set s, long mask) {
+        if ((mask & EngineeringOptionID.DATABASE) == EngineeringOptionID.DATABASE)
+            s.add(EngineeringOptionID.GENERATE_DATABASE);
+        if ((mask & EngineeringOptionID.TABLE) == EngineeringOptionID.TABLE)
+            s.add(EngineeringOptionID.GENERATE_TABLES);
+        if ((mask & EngineeringOptionID.NICKNAME) == EngineeringOptionID.NICKNAME)
+            s.add(EngineeringOptionID.GENERATE_NICKNAME);
+        // fsp - pyl
+        if ((mask & EngineeringOptionID.FEDERATEDPROCEDURE) == EngineeringOptionID.FEDERATEDPROCEDURE)
+            s.add(EngineeringOptionID.GENERATE_FEDERATEDPROCEDURES);
+        if ((mask & EngineeringOptionID.SERVER) == EngineeringOptionID.SERVER)
+            s.add(EngineeringOptionID.GENERATE_REMOTESERVER);
+        if ((mask & EngineeringOptionID.WRAPPER) == EngineeringOptionID.WRAPPER)
+            s.add(EngineeringOptionID.GENERATE_WRAPPER);
+        if ((mask & EngineeringOptionID.USER_MAPPING) == EngineeringOptionID.USER_MAPPING)
+            s.add(EngineeringOptionID.GENERATE_USERMAPPING);
+        if ((mask & EngineeringOptionID.OLAP_OBJECT) == EngineeringOptionID.OLAP_OBJECT)
+            s.add(EngineeringOptionID.GENERATE_OLAP);
+        if ((mask & EngineeringOptionID.TABLESPACE) == EngineeringOptionID.TABLESPACE)
+            s.add(EngineeringOptionID.GENERATE_TABLESPACES);
+        if ((mask & EngineeringOptionID.FILEGROUP) == EngineeringOptionID.FILEGROUP) {
+            s.add(EngineeringOptionID.GENERATE_FILEGROUPS);
+        }
+        if ((mask & EngineeringOptionID.INDEX) == EngineeringOptionID.INDEX)
+            s.add(EngineeringOptionID.GENERATE_INDICES);
+        if ((mask & EngineeringOptionID.PROCEDURE) == EngineeringOptionID.PROCEDURE)
+            s.add(EngineeringOptionID.GENERATE_STOREDPROCEDURES);
+        if ((mask & EngineeringOptionID.USER_DEFINED_FUNCTION) == EngineeringOptionID.USER_DEFINED_FUNCTION)
+            s.add(EngineeringOptionID.GENERATE_FUNCTIONS);
+        if ((mask & EngineeringOptionID.VIEW) == EngineeringOptionID.VIEW)
+            s.add(EngineeringOptionID.GENERATE_VIEWS);
+        if ((mask & EngineeringOptionID.TRIGGER) == EngineeringOptionID.TRIGGER)
+            s.add(EngineeringOptionID.GENERATE_TRIGGERS);
+        if ((mask & EngineeringOptionID.SEQUENCE) == EngineeringOptionID.SEQUENCE)
+            s.add(EngineeringOptionID.GENERATE_SEQUENCES);
+        if ((mask & EngineeringOptionID.USER_DEFINED_TYPE) == EngineeringOptionID.USER_DEFINED_TYPE)
+            s.add(EngineeringOptionID.GENERATE_USER_DEFINED_TYPE);
+        if ((mask & EngineeringOptionID.DOMAIN) == EngineeringOptionID.DOMAIN)
+            s.add(EngineeringOptionID.GENERATE_DOMAIN);
+        if ((mask & EngineeringOptionID.UNIQUE_CONSTRAINT) == EngineeringOptionID.UNIQUE_CONSTRAINT)
+            s.add(EngineeringOptionID.GENERATE_PK_CONSTRAINTS);
+        if ((mask & EngineeringOptionID.MATERIALIZED_QUERY_TABLE) == EngineeringOptionID.MATERIALIZED_QUERY_TABLE)
+            s.add(EngineeringOptionID.GENERATE_MQT);
+        if ((mask & EngineeringOptionID.ALIAS) == EngineeringOptionID.ALIAS)
+            s.add(EngineeringOptionID.GENERATE_ALIAS);
+        if ((mask & EngineeringOptionID.CHECK_CONSTRAINT) == EngineeringOptionID.CHECK_CONSTRAINT)
+            s.add(EngineeringOptionID.GENERATE_CK_CONSTRAINTS);
+        if ((mask & EngineeringOptionID.FOREIGN_KEY) == EngineeringOptionID.FOREIGN_KEY)
+            s.add(EngineeringOptionID.GENERATE_FK_CONSTRAINTS);
+        if ((mask & EngineeringOptionID.BUFFER_POOL) == EngineeringOptionID.BUFFER_POOL)
+            s.add(EngineeringOptionID.GENERATE_BUFFERPOOL);
+        if ((mask & EngineeringOptionID.SCHEMA) == EngineeringOptionID.SCHEMA)
+            s.add(EngineeringOptionID.GENERATE_SCHEMAS);
+        if ((mask & EngineeringOptionID.DISTINCT_USER_DEFINED_TYPE) == EngineeringOptionID.DISTINCT_USER_DEFINED_TYPE)
+            s.add(EngineeringOptionID.GENERATE_USER_DEFINED_TYPE);
+        if ((mask & EngineeringOptionID.STRUCTURED_USER_DEFINED_TYPE) == EngineeringOptionID.STRUCTURED_USER_DEFINED_TYPE)
+            s.add(EngineeringOptionID.GENERATE_USER_DEFINED_TYPE);
+        if ((mask & EngineeringOptionID.SYNONYM) == EngineeringOptionID.SYNONYM)
+            s.add(EngineeringOptionID.GENERATE_SYNONYM);
+        if ((mask & EngineeringOptionID.PARTITION_GROUP) == EngineeringOptionID.PARTITION_GROUP)
+            s.add(EngineeringOptionID.GENERATE_PARTITIONGROUP);
+        if ((mask & EngineeringOptionID.STORAGE_GROUP) == EngineeringOptionID.STORAGE_GROUP)
+            s.add(EngineeringOptionID.GENERATE_STORAGEGROUP);
+        if ((mask & EngineeringOptionID.PACKAGE) == EngineeringOptionID.PACKAGE)
+            s.add(EngineeringOptionID.GENERATE_PACKAGE);
+        if ((mask & EngineeringOptionID.PACKAGE_BODY) == EngineeringOptionID.PACKAGE_BODY)
+            s.add(EngineeringOptionID.GENERATE_PACKAGE_BODY);
+        if ((mask & EngineeringOptionID.BACKUP_TABLE) == EngineeringOptionID.BACKUP_TABLE)
+            s.add(EngineeringOptionID.GENERATE_BACKUP_TABLE);  // Data Preservation
+        if ((mask & EngineeringOptionID.STATISTICS) == EngineeringOptionID.STATISTICS)
+            s.add(EngineeringOptionID.GENERATE_STATISTICS); 
+        if ((mask & EngineeringOptionID.ROLE) == EngineeringOptionID.ROLE)
+            s.add(EngineeringOptionID.GENERATE_ROLE); 
+        if ((mask & EngineeringOptionID.USER) == EngineeringOptionID.USER)
+            s.add(EngineeringOptionID.GENERATE_USER); 
+        if ((mask & EngineeringOptionID.GROUP) == EngineeringOptionID.GROUP)
+            s.add(EngineeringOptionID.GENERATE_GROUP); 
+        if ((mask & EngineeringOptionID.PRIVILEGE) == EngineeringOptionID.PRIVILEGE)
+            s.add(EngineeringOptionID.GENERATE_PRIVILEGE); 
+        if ((mask & EngineeringOptionID.MODULE) == EngineeringOptionID.MODULE)
+            s.add(EngineeringOptionID.GENERATE_MODULE); 
+        if ((mask & EngineeringOptionID.MODULE_CONDITION) == EngineeringOptionID.MODULE_CONDITION)
+            s.add(EngineeringOptionID.GENERATE_MODULE_CONDITION); 
+        if ((mask & EngineeringOptionID.GLOBAL_VARIABLE) == EngineeringOptionID.GLOBAL_VARIABLE)
+            s.add(EngineeringOptionID.GENERATE_GLOBAL_VARIABLE); 
+        if ((mask & EngineeringOptionID.HISTORY_TABLE) == EngineeringOptionID.HISTORY_TABLE)
+            s.add(EngineeringOptionID.GENERATE_HISTORY_TABLE); 
+        if ((mask & EngineeringOptionID.XMLSCHEMA) == EngineeringOptionID.XMLSCHEMA) {
+            s.add(EngineeringOptionID.GENERATE_XMLSCHEMA);
+            s.add(EngineeringOptionID.XMLSCHEMA_CONNECTION_NAME);
+            s.add(EngineeringOptionID.XMLSCHEMA_DIRECTORY);
+        }
+        if ((mask & EngineeringOptionID.SECURITY_POLICY) == EngineeringOptionID.SECURITY_POLICY)
+            s.add(EngineeringOptionID.GENERATE_SECURITY_POLICY); 
+        if ((mask & EngineeringOptionID.ROW_PERMISSIONS) == EngineeringOptionID.ROW_PERMISSIONS)
+            s.add(EngineeringOptionID.GENERATE_ROW_PERMISSIONS); 
+        if ((mask & EngineeringOptionID.COLUMN_MASKS) == EngineeringOptionID.COLUMN_MASKS)
+            s.add(EngineeringOptionID.GENERATE_COLUMN_MASKS);
+        if ((mask & EngineeringOptionID.TEMPORARY_TABLE) == EngineeringOptionID.TEMPORARY_TABLE)
+            s.add(EngineeringOptionID.GENERATE_TEMPORARY_TABLES);
+
+    }    
+}
+
+
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/IClientStrategy.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/IClientStrategy.java
new file mode 100644
index 0000000..8ff24d3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/IClientStrategy.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import org.eclipse.datatools.enablement.ibm.catalog.util.ICatalogQuery;
+import org.eclipse.datatools.enablement.ibm.util.IQueryMap.QueryType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public interface IClientStrategy
+{
+	/**
+	 * The IClientStrategy has insider knowledge on the type of query to 
+	 * construct given the database and feature.  
+	 * 
+	 * It is responsible for setting the appropriate filters as required by the
+	 * implementing strategy.  The filter will be used for the WHERE clause
+	 * 
+	 * @param object, calling object initiating the loading operation
+	 * @param feature, mapping to specific feature to be loaded
+	 * @return, array of objects representing the queries to be executed
+	 */
+	public ICatalogQuery[] getCatalogQueries(EObject object, EStructuralFeature feature);
+	
+	/**
+	 * 
+	 * @param object, calling object initiating the loading operation
+	 * @param queryType, QueryType for an adhoc item to be loaded that is not associated
+	 * with a feature
+	 * @return, array of objects representing the queries to be executed
+	 */
+	public ICatalogQuery[] getCatalogQueries(EObject object, QueryType queryType);
+	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ICloningInfoProvider.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ICloningInfoProvider.java
new file mode 100644
index 0000000..32b763d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ICloningInfoProvider.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import org.eclipse.emf.ecore.EObject;
+
+public interface ICloningInfoProvider 
+{
+  /* Returns a boolean which indicates whether the object 
+   * passed in should have its containment hierarchy also cloned
+   * when the object itself is being cloned becuase it is externally
+   * referenced by another object that is being cloned. */
+  public boolean cloneContainmentHierarchyOnExtRef(EObject obj);
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/IConnectionFilter.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/IConnectionFilter.java
new file mode 100644
index 0000000..a4ce824
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/IConnectionFilter.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+
+public interface IConnectionFilter extends ConnectionFilter{
+
+	public static final String PROPS_FILTER_TAG = "[Props]";
+	
+	public static final String DATABASE_INSTANCE_FILTER = "DatatoolsDatabaseInstanceFilterPredicate"; //$NON-NLS-1$
+	public static final String TABLESPACE_FILTER = "DatatoolsTablespaceFilterPredicate"; //$NON-NLS-1$
+	public static final String FEDERATED_STORED_PROCEDURE_FILTER = "DatatoolsFSPFilterPredicate"; //$NON-NLS-1$
+	public static final String SYNONYM_FILTER = "DatatoolsSynonymFilterPredicate"; //$NON-NLS-1$
+	public static final String PACKAGE_FILTER = "DatatoolsPackageFilterPredicate"; //$NON-NLS-1$
+	public static final String MODULE_FILTER = "DatatoolsModuleFilterPredicate"; //$NON-NLS-1$
+	public static final String PLSQL_PACKAGE_FILTER = "DatatoolsPlsqlPacakgeFilterPredicate"; //$NON-NLS-1$
+	public static final String TRIGGER_FILTER = "DatatoolsTriggerFilterPredicate"; //$NON-NLS-1$
+	public static final String INDEX_FILTER = "DatatoolsIndexFilterPredicate"; //$NON-NLS-1$
+	public static final String CONSTRAINT_FILTER = "DatatoolsConstraintFilterPredicate"; //$NON-NLS-1$
+	
+	
+	public static final String TABLES_REQUIRED_LIST = "DatatoolsTablesRequiredList"; //$NON-NLS-1$
+	public static final String VIEWS_REQUIRED_LIST = "DatatoolsViewsRequiredList"; //$NON-NLS-1$
+	public static final String MQTS_REQUIRED_LIST = "DatatoolsMQTsRequiredList"; //$NON-NLS-1$
+	public static final String ALIASES_REQUIRED_LIST = "DatatoolsAliasesRequiredList"; //$NON-NLS-1$
+	public static final String TRIGGERS_REQUIRED_LIST = "DatatoolsTriggersRequiredList"; //$NON-NLS-1$
+	public static final String STOREDPROCS_REQUIRED_LIST = "DatatoolsStoredProcsRequiredList"; //$NON-NLS-1$
+	public static final String UDFS_REQUIRED_LIST = "DatatoolsUDFsRequiredList"; //$NON-NLS-1$
+	public static final String UDTS_REQUIRED_LIST = "DatatoolsUDTsRequiredList"; //$NON-NLS-1$
+	public static final String PACKAGES_REQUIRED_LIST = "DatatoolsPackagesRequiredList"; //$NON-NLS-1$
+	public static final String SEQUENCE_REQUIRED_LIST = "DatatoolsSequencesRequiredList"; //$NON-NLS-1$
+	public static final String SYNONYM_REQUIRED_LIST = "DatatoolsSynonymRequiredList"; //$NON-NLS-1$
+	public static final String SCHEMA_REQUIRED_LIST = "DatatoolsSchemaRequiredList"; //$NON-NLS-1$
+	public static final String INDEX_REQUIRED_LIST = "DatatoolsIndexRequiredList"; //$NON-NLS-1$
+	public static final String CONSTRAINT_REQUIRED_LIST = "DatatoolsConstraintRequiredList"; //$NON-NLS-1$
+	public static final String TABLESPACE_REQUIRED_LIST = "DatatoolsTableSpaceRequiredList"; //$NON-NLS-1$
+	public static final String XMLSCHEMA_REQUIRED_LIST = "DatatoolsXMLSchemaRequiredList"; //$NON-NLS-1$
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/IPostprocessProvider.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/IPostprocessProvider.java
new file mode 100644
index 0000000..9286539
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/IPostprocessProvider.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import org.eclipse.emf.ecore.EObject;
+
+public interface IPostprocessProvider 
+{
+	/**
+	 * Namespace post processing for EMF EObjects.
+	 * Extension providers must perform any post processing on the provided objects if it is
+	 * determined that post processing is required.  Modified EObjects, if any, will be be done
+	 * on same array passed in.
+	 * @param objs array of EObjects to process
+	 * @return true if post processing is done, false if not
+	 */
+	public boolean postProcess(EObject[] objs);
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/IPreorderedStatementList.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/IPreorderedStatementList.java
new file mode 100644
index 0000000..d2b1bb4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/IPreorderedStatementList.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.util.Vector;
+
+/**
+ * A collection of statements which have been ordered.
+ * 
+ */
+public interface IPreorderedStatementList {
+
+	/**
+	 * Retrieves the ordered statements.
+	 * @return Vector<String> The ordered statements returned as a Vector of Strings.
+	 */
+	public Vector<String> getAll();
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/IQueryMap.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/IQueryMap.java
new file mode 100644
index 0000000..96100bf
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/IQueryMap.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import org.eclipse.datatools.enablement.ibm.catalog.util.ICatalogQuery;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public interface IQueryMap 
+{
+	public enum QueryType {
+		TABLE__CONSTRAINT_QUERY,
+		TABLE__ROW_COUNT,
+		TABLE__MAIN_QUERY,
+		VIEW__MAIN_QUERY,
+		MQT__MAIN_QUERY,
+		ALIAS__MAIN_QUERY,
+		TRIGGER__MAIN_QUERY,
+		STOREDPROC__MAIN_QUERY,
+		UDF__MAIN_QUERY,
+		UDT__MAIN_QUERY,
+		PACKAGE__MAIN_QUERY,
+		SEQUENCE__MAIN_QUERY,
+		SYNONYM__MAIN_QUERY,
+		SCHEMA__MAIN_QUERY,
+		INDEX__MAIN_QUERY,
+		CONSTRAINT__MAIN_QUERY,
+		TABLESPACE__MAIN_QUERY,
+		XMLSCHEMA__MAIN_QUERY;
+	};
+	
+	/**
+	 * 
+	 * @param feature, used to lookup queries in map
+	 * @return array of ICatalogQuery objects for given feature
+	 */
+	public ICatalogQuery[] get(EStructuralFeature feature);
+	
+	/**
+	 * 
+	 * @param queryType, String used to map to an adhoc query not
+	 * defined by a feature
+	 * @return array of ICataloqQuery objects for given String
+	 */
+	public ICatalogQuery[] get(QueryType queryType);
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/IRowCountCache.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/IRowCountCache.java
new file mode 100644
index 0000000..16f2216
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/IRowCountCache.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+public interface IRowCountCache {
+
+	public String getRowCountString();
+	public void setRowCountString(String count);
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ImpactProvider.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ImpactProvider.java
new file mode 100644
index 0000000..770e1ae
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ImpactProvider.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import org.eclipse.emf.ecore.EObject;
+
+public interface ImpactProvider {
+	public DependencyImpactDescription[] getImpacted(EObject object);
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ModelHelper.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ModelHelper.java
new file mode 100644
index 0000000..28f5b3b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ModelHelper.java
@@ -0,0 +1,263 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+//bgp import org.eclipse.datatools.enablement.ibm.db2.util.DataModelResource;
+import org.eclipse.datatools.enablement.ibm.util.ModelVersion;
+import org.eclipse.datatools.modelbase.sql.constraints.IncrementType;
+import org.eclipse.datatools.modelbase.sql.constraints.IndexMember;
+import org.eclipse.datatools.modelbase.sql.schema.Catalog;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.xmi.XMLResource;
+
+public class ModelHelper {
+
+	public static final float DB2LUW_V97 = 9.7f;
+	public static final float DB2LUW_V10_1 = 10.1f;
+	public static final float DB2LUW_V10_5 = 10.5f;
+	
+	public static Database getDatabase(Schema schema) {
+		if (schema != null) {
+			if (schema.getCatalog() != null) {
+				return schema.getCatalog().getDatabase();
+			}
+			else if (schema.getDatabase() != null) {
+				return schema.getDatabase();
+			}
+		}
+		
+		return null;
+	}
+	
+	public static List<Schema> getSchemas (Database database)
+	{
+		if (database == null) throw new IllegalArgumentException();
+		List <Schema> schemaList = new ArrayList<Schema> ();
+
+		schemaList.addAll(database.getSchemas());
+		for (Object o : database.getCatalogs())
+		{
+			Catalog c = (Catalog) o;
+			List <Schema> schemas = c.getSchemas();
+			if (!schemas.isEmpty())
+			{
+				schemaList.addAll(schemas);
+			}
+		}
+		return schemaList;
+	}
+	
+	public static float getVersionAsFloat(String versionString)
+	{
+		float version = 8.0f;
+		
+		try {
+			version = Float.parseFloat(versionString.substring(1));
+		}
+		catch ( NumberFormatException e ) {
+		}
+		return version;
+	}
+	
+	public static float getZseriesVersionAsFloat(String versionString)
+	{
+		float version = 8.0f;
+		
+		try 
+		{
+			if ( versionString.length() >= 3 )
+			{
+				version = Float.parseFloat(versionString.substring(1,3).trim());
+			}
+			else
+			{
+				version = Float.parseFloat(versionString.substring(1,2).trim());
+			}
+		}
+		catch ( NumberFormatException e ) {
+		}
+		return version;
+	}
+	
+	public static boolean isSupportPL_SQL(DatabaseDefinition dbDef){
+		String product = dbDef.getProduct();
+		if ("DB2 UDB".equals(product) && getVersionAsFloat(dbDef.getVersion()) >= DB2LUW_V97) { 
+			return true;
+		}
+		return false;
+	}
+	
+	public static boolean isSupportSecure(DatabaseDefinition dbDef){
+		String product = dbDef.getProduct();
+		if ("DB2 UDB".equals(product) && getVersionAsFloat(dbDef.getVersion()) >= DB2LUW_V10_1) { 
+			return true;
+		}
+		return false;
+	}
+
+	public static boolean isSupportModule(DatabaseDefinition dbDef){
+		String product = dbDef.getProduct();
+		if ("DB2 UDB".equals(product) && getVersionAsFloat(dbDef.getVersion()) >= DB2LUW_V97) { 
+			return true;
+		}
+		return false;
+	}
+	
+	public static boolean isSupportGlobalVariable(DatabaseDefinition dbDef){
+		String product = dbDef.getProduct();
+		if ("DB2 UDB".equals(product) && getVersionAsFloat(dbDef.getVersion()) >= DB2LUW_V97) { 
+			return true;
+		}
+		return false;
+	}
+
+	public static boolean isSupportArrayDataType(DatabaseDefinition dbDef){
+		String product = dbDef.getProduct();
+		if ("DB2 UDB".equals(product) && getVersionAsFloat(dbDef.getVersion()) >= DB2LUW_V97) { 
+			return true;
+		} else if ("Oracle".equals(product)) {
+			return true;
+		}
+		return false;
+	}
+
+	public static boolean isSupportRowDataType(DatabaseDefinition dbDef){
+		String product = dbDef.getProduct();
+		if ("DB2 UDB".equals(product) && getVersionAsFloat(dbDef.getVersion()) >= DB2LUW_V97) { 
+			return true;
+		} 
+		return false;
+	}
+	
+	public static boolean isSupportRandomIndex(DatabaseDefinition dbDef) {
+
+		String product = dbDef.getProduct();
+		if ("DB2 UDB".equals(product)
+				&& getVersionAsFloat(dbDef.getVersion()) >= DB2LUW_V10_5) {
+			return true;
+		}
+		if ("DB2 UDB zSeries".equals(product)) {
+			String version = dbDef.getVersion();
+			if (version.compareTo("V9 (New-Function Mode)") == 0 //
+					|| getZseriesVersionAsFloat(version) > 9) {
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	public static boolean isSupportColumnStore(DatabaseDefinition dbDef){
+		String product = dbDef.getProduct();
+		if ("DB2 UDB".equals(product)
+				&& getVersionAsFloat(dbDef.getVersion()) >= DB2LUW_V10_5) {
+			return true;
+		}
+		return false;
+	}
+	
+	public static boolean isSupportInlineFunction(DatabaseDefinition dbDef){
+		String product = dbDef.getProduct();
+		if ("DB2 UDB zSeries".equals(product) //
+				&& getZseriesVersionAsFloat(dbDef.getVersion()) >= 10 )
+		{
+			 return true;
+		} 
+		return false;
+	}
+	
+	/**
+	 * Gets the model version of the resource
+	 * @param modelResource the model resource
+	 * @return the model version of the resource, or UNKNOWN if not a 
+	 * DataModelResource or version not known
+	 */
+	public static ModelVersion getModelVersion(XMLResource modelResource)
+	{
+		ModelVersion version = ModelVersion.UNKNOWN;
+//bgp		if (modelResource instanceof DataModelResource)
+//		{
+//		    version = ((DataModelResource)modelResource).getVersion();
+//bgp		}
+		return version;
+	}
+	
+	/**
+	 * Determines whether or not the model resource version is the same
+	 * as the current version
+	 * @param resource the resource to check
+	 * @return true if the version is the current version, false if not
+	 */
+	public static boolean isCurrentModelVersion(XMLResource resource)
+	{
+		boolean current = false;
+		ModelVersion version = ModelHelper.getModelVersion(resource);
+		if (ModelVersion.CURRENT_VERSION.equals(version))
+		{
+			current = true;
+		}
+		return current;
+	}
+
+	public static boolean isSupportPartitionedIndex(DatabaseDefinition dbDef){
+		String product = dbDef.getProduct();
+		if ("DB2 UDB".equals(product) && getVersionAsFloat(dbDef.getVersion()) >= DB2LUW_V97) { 
+			return true;
+		}
+		return false;
+	}
+	
+	public static Column getColumn(Table table, String colname)
+	 {
+		 EList<Column> columns = table.getColumns();
+		 for ( Column currentCol: columns )
+		 {
+			 if ( currentCol.getName().equals(colname) )
+			 {
+				 return currentCol;
+	    	}
+		 }
+		 return null;   
+	 }	   
+	
+	public static boolean isEqual(IndexMember member1, IndexMember member2) {
+		if (member1.getColumn() != null &&
+				member2.getColumn() != null) {
+			Column column1 = member1.getColumn();
+			IncrementType incType1 = member1.getIncrementType();
+			Column column2 = member2.getColumn();
+			IncrementType incType2 = member2.getIncrementType();
+			if (column1 == column2 && incType1.getValue() == incType2.getValue()) {
+				return true;
+			}
+		}
+		else if (member1.getExpression() != null &&
+				member2.getExpression() != null) {
+			String sql1 = member1.getExpression().getSql();
+			IncrementType incType1 = member1.getIncrementType();
+			String sql2 = member2.getExpression().getSql();
+			IncrementType incType2 = member2.getIncrementType();
+			if (sql1 != null &&
+					sql1.equals(sql2) &&
+					incType1.getValue() == incType2.getValue()) {
+				return true;
+			}
+		}
+		return false;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ModelVersion.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ModelVersion.java
new file mode 100644
index 0000000..bc8f415
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ModelVersion.java
@@ -0,0 +1,359 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import org.eclipse.datatools.enablement.ibm.util.ModelVersionUtil;
+
+/**
+ * Enum for file version numbers. Version are presented as
+ * major.minor.service.modifier, where each segment represents a integer.
+ * 
+ * @author Mike Kwong
+ * 
+ */
+public enum ModelVersion {	
+	
+	/**
+	 * Represents an UNKNOWN, unrecognized version of the model. Likely an
+	 * error. First in the list of Enums to be treated inferior in comparison 
+	 * to any of the recognized model versions.
+	 */
+	UNKNOWN(ModelVersionUtil.DATAMODEL_PREFIX, "-1", "0", "0", "0"),
+	
+	/**
+	 * Represents RDA 7.0.0.x
+	 */
+	WTP("7", "0", "0", "0"),
+	
+	/**
+	 * Represents RDA 7.5 and IDA 7.5.1
+	 */
+	DTP_75("7", "5", "0", "0"),
+	
+	/**
+	 * Represents IDA 7.5.1.1
+	 */
+	DTP_7511("7", "5", "1", "1"),
+
+	/**
+	 * Represents IDA 7.5.2.0
+	 */
+	DTP_752("7", "5", "2", "0"),
+	
+	/**
+	 * Represents special version for InfoSphere Discovery delivery
+	 * (corresponds to IDA 7.5.2.1) 
+	 */
+	DISCOVERY_2009_10(ModelVersionUtil.DATAMODEL_PREFIX, "1", "0", "0", "0"),
+	
+	/**
+	 * Represents IDA 7.5.2.1 and DS 2.2.1 (Nov 2009 release)
+	 */
+	DTP_2009_11(ModelVersionUtil.DATAMODEL_PREFIX, "1", "0", "0", "1"),
+	
+	/**
+	 * Represents IDA 7.5.2.2 and DS 2.2.2.1 (Mar 2010 release)
+	 */
+	DTP_2010_03(ModelVersionUtil.DATAMODEL_PREFIX, "1", "1", "0", "0"),
+	
+	/**
+	 * Represents IDA 7.5.3/ODS 2.2.3/ODA 2.2.3 and DS 2.3 (Oct 2010 release)
+	 */
+	DTP_2010_10(ModelVersionUtil.DATAMODEL_PREFIX, "1", "2", "0", "0"),
+	
+	/**
+	 * Represents IDA 7.5.3.1/ODS 2.2.3.1/ODA 2.2.3.1 (DS 2011-1Q release)
+	 */
+	DTP_2011_1Q(ModelVersionUtil.DATAMODEL_PREFIX, "1", "2", "1", "0"),
+	
+	/**
+	 * Represents IDA 7.6/ODS 2.3 (DS 2011-4Q release)
+	 */
+	DTP_2011_4Q(ModelVersionUtil.DATAMODEL_PREFIX, "1", "3", "0", "0"),
+	
+	/**
+	 * Represents IDA 7.6 Patch
+	 */
+	DTP_2011_4Q_PATCH(ModelVersionUtil.DATAMODEL_PREFIX, "1", "3", "0", "1"),
+	
+	/**
+	 * Represents IDA 8.1/DS 3.1.1 (DS 2012-1H release)
+	 */
+	DTP_2012_1H(ModelVersionUtil.DATAMODEL_PREFIX, "1", "4", "0", "0"),
+	
+	/**
+	 * Represents IDA 8.5(DS 2012-2H release)
+	 */
+	DTP_2012_2H(ModelVersionUtil.DATAMODEL_PREFIX, "1", "5", "0", "0"),
+	
+	/**
+	 * Represents IDA 9.1(DS 2013-2Q release)
+	 */
+	DTP_2013_2Q(ModelVersionUtil.DATAMODEL_PREFIX, "1", "6", "0", "0"),
+
+	/**
+	 * Represents IDA 9.1.1(DS 2013-2H release)
+	 */
+	DTP_2013_2H(ModelVersionUtil.DATAMODEL_PREFIX, "1", "7", "0", "0"),
+
+	
+	/**
+	 * Represents a version namespace URI that conforms the correct pattern (
+	 * {@link ModelVersionUtil#MODEL_URI_PATTERN}. Usually refers to a future
+	 * version of the model. Note: reading in a model created with a newer
+	 * version of the product than the current one can cause data loss.
+	 * Restriction: does not currently contain information about the actual
+	 * version for the model. TODO: Future enhancement.
+	 */
+	VALID_PATTERN(ModelVersionUtil.DATAMODEL_PREFIX, "100000", "0", "0", "0");
+	
+	public static ModelVersion CURRENT_VERSION = ModelVersion.DTP_2013_2H;
+	
+	private String major;
+	private String minor;
+	private String service;
+	private String modifier;
+	private String prefix;
+	private String uriString;
+	
+	ModelVersion(String major, String minor, String service, String modifier) {
+		this.major = major;
+		this.minor = minor;
+		this.service = service;
+		this.modifier = modifier;
+		this.prefix = ModelVersionUtil.PREFIX;
+		this.uriString = prefix + major + "." + minor + "." + service + "." + modifier;
+		ModelVersionUtil.add(this.uriString, this);
+	}
+	
+	/**
+	 * @param prefix {@link ModelVersionUtil#PREFIX} or {@link ModelVersionUtil#DATAMODEL_PREFIX}
+	 * @param major
+	 * @param minor
+	 * @param service
+	 * @param modifier
+	 */
+	ModelVersion(String prefix, String major, String minor, String service, String modifier) {
+		this.major = major;
+		this.minor = minor;
+		this.service = service;
+		this.modifier = modifier;
+		this.prefix = prefix;
+		this.uriString = prefix + major + "." + minor + "." + service + "." + modifier;
+		ModelVersionUtil.add(this.uriString, this);
+	}
+	
+	/**
+	 * @return uri string appropriate for the version namespace for the model
+	 *         file
+	 */
+	public String getURIString() {
+		return uriString;
+	}
+
+	/**
+	 * Major number should be incremented if the model format has changed in an
+	 * incompatible manner.
+	 * 
+	 * @return string containing the major version; should represent an integer
+	 */
+	public String getMajor() {
+		return major;
+	}
+	
+	/**
+	 * Major number should be incremented if the model format has changed in an
+	 * incompatible manner.
+	 * 
+	 * @return integration representing the major version
+	 */
+	public Integer getMajorNumber() {
+		return Integer.parseInt(major);
+	}
+
+	/**
+	 * Minor number should be incremented if the model format has changed in a
+	 * backwards compatible manner to accommodate significant new function.
+	 * 
+	 * @return string containing the minor version; should represent an integer
+	 */
+	public String getMinor() {
+		return minor;
+	}
+	
+	/**
+	 * Minor number should be incremented if the model format has changed in a
+	 * backwards compatible manner to accommodate significant new function.
+	 * 
+	 * @return integer representing the minor version
+	 */
+	public Integer getMinorNumber() {
+		return Integer.parseInt(minor);
+	}
+
+	/**
+	 * Service number should be incremented if the model format has changed in
+	 * any way.
+	 * 
+	 * @return string containing the service version; should represent an
+	 *         integer
+	 */
+	public String getService() {
+		return service;
+	}
+	
+	/**
+	 * Service number should be incremented if the model format has changed in
+	 * any way.
+	 * 
+	 * @return integer representing the service version
+	 */
+	public Integer getServiceNumber() {
+		return Integer.parseInt(service);
+	}
+
+	/**
+	 * Modifier number should be incremented for all official fix packs and
+	 * releases. This can be used to catch unexpected bugs.
+	 * 
+	 * @return string containing the modifier version; should represent an
+	 *         integer
+	 */
+	public String getModifier() {
+		return modifier;
+	}
+	
+	/**
+	 * Modifier number should be incremented for all official fix packs and
+	 * releases. This can be used to catch unexpected bugs.
+	 * 
+	 * @return integer representing the modifier version
+	 */
+	public Integer getModifierNumber() {
+		return Integer.parseInt(modifier);
+	}
+
+	/**
+	 * @return the prefix used to construct the corresponding namespace URI
+	 */
+	public String getPrefix() {
+		return prefix;
+	}
+	
+	/**
+	 * Compares this version to version to determine which is newer. Only the
+	 * namespace prefix, major, minor and service are treated as significant.
+	 * Modifier differences are ignored for comparison purposes.
+	 * 
+	 * @param version
+	 * @return -1 if this version if older than version being compared; 0 if
+	 *         they are equal; 1 if this version is newer
+	 * @see Comparable#compareTo(Object)
+	 */
+	public int compareToIgnoresModifier(ModelVersion version) {
+		if (version == null) {
+			return 1;
+		}
+		String myNamespacePrefix = this.getPrefix();
+		String theirNamespacePrefix = version.getPrefix();
+		int myMajor = getMajorNumber();
+		int theirMajor = version.getMajorNumber();
+		int myMinor = getMinorNumber();
+		int theirMinor = version.getMinorNumber();
+		int myService = getServiceNumber();
+		int theirService = version.getServiceNumber();
+
+		return compareVersionComponents(myNamespacePrefix, myMajor, myMinor,
+				myService, theirNamespacePrefix, theirMajor, theirMinor,
+				theirService);
+	}
+	
+	/**
+	 * Compares this version to a version string to determine which is newer. Only the
+	 * namespace prefix, major, minor and service are treated as significant.
+	 * Modifier differences are ignored for comparison purposes.
+	 * 
+	 * @param version
+	 * @return -1 if this version if older than version being compared; 0 if
+	 *         they are equal; 1 if this version is newer
+	 * @see Comparable#compareTo(Object)
+	 */
+	public int compareToIgnoresModifier(String versionNamespace) {
+		String[] components = ModelVersionUtil
+				.parseVersionNamespace(versionNamespace);
+		if (components == null) {
+			// Should not get to this point
+			throw new IllegalArgumentException();
+		}
+		return compareVersionComponents(getPrefix(), Integer
+				.parseInt(getMajor()), Integer.parseInt(getMinor()), Integer
+				.parseInt(getService()), components[0], Integer
+				.parseInt(components[1]), Integer.parseInt(components[2]),
+				Integer.parseInt(components[3]));
+	}
+	
+	/**
+	 * Compares version 1 with version 2 to determine which is newer. 
+	 * 
+	 * @param namespacePrefix1 namespace prefix of version 1
+	 * @param major1 major number of version 1
+	 * @param minor1
+	 * @param service1
+	 * @param namespacePrefix2
+	 * @param major2
+	 * @param minor2
+	 * @param service2
+	 * @return -1 if version 1 if older than version 2; 0 if
+	 *         they are equal; 1 if version 2 is newer
+	 */
+	public static int compareVersionComponents(String namespacePrefix1,
+			int major1, int minor1, int service1,
+			String namespacePrefix2, int major2, int minor2,
+			int service2) {
+		if (namespacePrefix1 == null) {
+			// Should not get here
+			throw new IllegalArgumentException();
+		}
+		if (!namespacePrefix1.equals(namespacePrefix2)) {
+			if (namespacePrefix1.equals(ModelVersionUtil.PREFIX)
+					&& namespacePrefix2
+							.equals(ModelVersionUtil.DATAMODEL_PREFIX)) {
+				return -1;
+			} else if (namespacePrefix1
+					.equals(ModelVersionUtil.DATAMODEL_PREFIX)
+					&& namespacePrefix2.equals(ModelVersionUtil.PREFIX)) {
+				return 1;
+			} else {
+				// Should not get here
+				throw new IllegalArgumentException();
+			}
+		} else {
+			int majorDifference = major1 - major2;
+			int minorDifference = minor1 - minor2;
+			int serviceDifference = service1 - service2;
+			if (majorDifference < 0) {
+				return -1;
+			} else if (majorDifference > 0) {
+				return 1;
+			} else if (minorDifference < 0) {
+				return -1;
+			} else if (minorDifference > 0) {
+				return 1;
+			} else if (serviceDifference < 0) {
+				return -1;
+			} else if (serviceDifference > 0) {
+				return 1;
+			} else {
+				return 0;
+			}
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ModelVersionUtil.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ModelVersionUtil.java
new file mode 100644
index 0000000..9fd870d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ModelVersionUtil.java
@@ -0,0 +1,109 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Utilities for managing {@link ModelVersion} enums
+ * @author Mike Kwong
+ *
+ */
+public class ModelVersionUtil {
+	// url prefix to use for IDA 7.5.1.1 and 7.5.2
+	public static final String PREFIX = "http://www.ibm.com/com.ibm.datatools.core/model/";
+	// url prefix to use for IDA 7.5.2+
+	public static final String DATAMODEL_PREFIX = "http://www.ibm.com/com.ibm.datatools.core/model/data/";
+	// uri pattern to use for IDA 7.5.2.1 and beyond
+	public static final Pattern MODEL_URI_PATTERN = Pattern.compile(DATAMODEL_PREFIX + "(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)");
+	public static final Pattern OLD_MODEL_URI_PATTERN = Pattern.compile(PREFIX + "(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)");
+	
+	private static Map<String, ModelVersion> map;
+	
+	static Map<String, ModelVersion> getMap() {
+		if (map == null) {
+			map = new HashMap<String, ModelVersion>();
+			ModelVersion dummy = ModelVersion.CURRENT_VERSION; // Force ModelVersion to load and populate map
+			if (dummy != null) { 
+				// Needed null check, to handle the case when one of the Model_Version enum constants (e.g. WTP)
+				// is accessed before getMap() is called.  This would cause getMap to be invoked without
+				// CURRENT_VERSION being initialized.  This is harmless, as CURRENT_VERSION would be
+				// initialized soon after, as long as we don't try to access dummy.toString
+		//		DataToolsPlugin.getDefault().getLog().log(new Status(IStatus.INFO, DataToolsPlugin.getPluginID(), "Current Version is " + dummy.toString()));
+			}
+		}
+		return map;
+	}
+
+	/**
+	 * Register version object and associate with specified URI
+	 * @param uri
+	 * @param version
+	 */
+	public static void add(String uri, ModelVersion version) {
+		getMap().put(uri, version);
+	}
+
+	/**
+	 * @param uri
+	 * @return version object associated with specified URI,
+	 *         {@link ModelVersion#VALID_PATTERN} if the namespace conforms to the
+	 *         correct pattern, {@link ModelVersion#UNKNOWN} if the namespace
+	 *         does not conform to the correct pattern, or null if the version
+	 *         string is missing
+	 */
+	public static ModelVersion uriToModelVersion(String uri) {
+		if (uri == null) {
+			// Missing version
+			return null; 
+		}
+		// Look up uri to find corresponding version
+		ModelVersion version = getMap().get(uri);
+		if (version != null) {
+			// Known uri with corresponding version
+			return version;
+		} else {
+			Matcher matcher = MODEL_URI_PATTERN.matcher(uri);
+			if (matcher.matches()) {
+				// Conforms to MODEL_URI_PATTERN
+				return ModelVersion.VALID_PATTERN;
+			} else {
+				// Does not conform to MODEL_URI_PATTERN
+				return ModelVersion.UNKNOWN;
+			}
+		}
+	}
+	
+	/**
+	 * @param versionNamespace
+	 *            string containing the namespace string indicating the version
+	 * @return string array containing the namespace prefix, major, minor,
+	 *         service and modifier components; or null if the string is not a
+	 *         valid version namespace
+	 */
+	public static String[] parseVersionNamespace(String versionNamespace) {
+		Matcher matcher = MODEL_URI_PATTERN.matcher(versionNamespace);
+		Matcher oldMatcher = OLD_MODEL_URI_PATTERN.matcher(versionNamespace);
+		if (matcher.matches()) {
+			return new String[] { DATAMODEL_PREFIX, matcher.group(1),
+					matcher.group(2), matcher.group(3), matcher.group(4) };
+		} else if (oldMatcher.matches()) {
+			return new String[] { PREFIX, oldMatcher.group(1),
+					oldMatcher.group(2), oldMatcher.group(3),
+					oldMatcher.group(4) };
+		} else {
+			return null;
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PRSDatabaseLoader.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PRSDatabaseLoader.java
new file mode 100644
index 0000000..46c5197
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PRSDatabaseLoader.java
@@ -0,0 +1,444 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import org.eclipse.datatools.enablement.ibm.IBMPluginActivator;
+import org.eclipse.datatools.enablement.ibm.catalog.util.CatalogLoadUtil;
+import org.eclipse.datatools.enablement.ibm.catalog.util.ICatalogQuery;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+public class PRSDatabaseLoader extends PersistentResultSetData
+{
+	private class QueryDescriptor
+	{
+		String queryText;
+
+		/**
+		 * Strategies do not necessarily cache all the data at once. This API
+		 * will allow caching to occur as needed by clients.
+		 */
+		public QueryDescriptor( ICatalogQuery query )
+		{
+			if ( query.useOnDemandQuery() )
+			{
+				this.queryText = query.generateOnDemandQuery( getDatabase() );
+			}
+			else
+			{
+				this.queryText = query.generateUpFrontQuery( getDatabase() );
+			}
+		}
+	}
+
+	private final PRSQueryInfo qinfo;
+	private QueryDescriptor queryDesc;
+
+	private boolean processingStarted = false;
+	private boolean processingComplete = false;
+	private int rowsProcessed = 0;
+
+	static int nextqnum = 0;
+	static final int QSIZE = 128;
+	static int[] rowcount = new int[ QSIZE ];
+	static PRSDatabaseLoader[] runningQueries = new PRSDatabaseLoader[ QSIZE ];
+	public final int qnum = nextqnum++;
+
+	private static final int CHAR_CONVERSION_EXCEPTION = -4220;
+	
+	public PRSDatabaseLoader( PRSQueryInfo qinfo, ICatalogQuery query )
+	{
+		this.qinfo = qinfo;
+		this.queryDesc = new QueryDescriptor( query );
+	}
+
+	public void initiateQuery( Connection connection )
+	{
+		try
+		{
+			processQuery( connection );
+
+			if ( this.processingComplete )
+			{
+				this.qinfo.loadFinished( this );
+			}
+		}
+		catch (SQLException e)
+		{
+			this.qinfo.setException( e );
+		}
+	}
+
+	public int getRawRowCount()
+	{
+		return this.rowsProcessed;
+	}
+
+	public Database getDatabase()
+	{
+		return this.qinfo.getQueryCache().getDatabase();
+	}
+
+	public ICatalogQuery getQuery()
+	{
+		return this.qinfo.getQuery();
+	}
+
+	private PRSMetadata getMetadata()
+	{
+		return this.qinfo.getMetadata();
+	}
+
+	public synchronized boolean isComplete()
+	{
+		return this.processingComplete;
+	}
+
+	public synchronized void close()
+	{
+		this.processingComplete = true;
+	}
+
+	private void processQuery( Connection connection ) throws SQLException
+	{
+		synchronized (this)
+		{
+			if ( this.processingStarted || this.processingComplete )
+			{
+				return;
+			}
+
+			if ( this.queryDesc.queryText == null )
+			{
+				this.processingComplete = true;
+
+				return;
+			}
+
+			this.processingStarted = true;
+		}
+
+		PRSDebug.debugQueryDelay();
+
+		Statement s = null;
+		ResultSet r = null;
+
+		try
+		{
+			s = connection.createStatement();
+			s.setFetchDirection( ResultSet.FETCH_FORWARD );
+			s.setFetchSize( 1000 );
+
+			if ( PRSDebug.enableTracing )
+			{
+				PRSDebug.trace( "PRS: Running query db=" + getDatabase().getName() ); //$NON-NLS-1$
+				PRSDebug.trace( queryDesc.queryText );
+			}
+
+			if ( PRSDebug.traceQueries )
+			{
+				runningQueries[ qnum % QSIZE ] = this;
+
+				System.out.println( "\n" //$NON-NLS-1$
+						+ PRSDebug.timestamp() //
+						+ " Running query " + qnum + "\n" //$NON-NLS-1$ //$NON-NLS-2$
+						+ queryDesc.queryText );
+
+				traceActiveQueries();
+			}
+
+			r = s.executeQuery( queryDesc.queryText );
+
+			PRSMetadata metadata = this.qinfo.getMetadata();
+
+			if ( metadata == null )
+			{
+				this.qinfo.setMetadata( new PRSMetadata( r ) );
+			}
+		}
+		catch (SQLException e)
+		{
+			CatalogLoadUtil.safeClose( s, r );
+
+			if ( PRSDebug.enableTracing )
+			{
+				PRSDebug.trace( "Error executing query" ); //$NON-NLS-1$
+				PRSDebug.trace( queryDesc.queryText );
+				PRSDebug.trace( e.toString() );
+			}
+
+			synchronized (this)
+			{
+				this.processingComplete = true;
+			}
+
+			this.qinfo.quitOnError( this );
+
+			throw e;
+		}
+
+		final Statement fs = s;
+		final ResultSet fr = r;
+
+		Thread processRowsWorker = new Thread( new Runnable()
+		{
+			public void run()
+			{
+				try
+				{
+					processRows( fr );
+				}
+				finally
+				{
+					CatalogLoadUtil.safeClose( fs, fr );
+				}
+
+				if ( PRSDebug.enableTracing )
+				{
+					PRSDebug.trace( "PRS: Query worker finished" ); //$NON-NLS-1$
+				}
+			}
+		} );
+
+		if ( PRSDebug.enableTracing )
+		{
+			PRSDebug.trace( "PRS: Query worker thread id=" //$NON-NLS-1$
+					+ processRowsWorker.getId() );
+		}
+
+		processRowsWorker.start();
+	}
+
+	private void processRows( ResultSet r )
+	{
+		try
+		{
+			while ( !isComplete() && r.next() )
+			{
+				processRow( r );
+			}
+		}
+		catch (SQLException e)
+		{
+			this.qinfo.setException( e );
+			this.qinfo.quitOnError( this );
+
+			IBMPluginActivator.log( e );
+
+			if ( PRSDebug.enableTracing )
+			{
+				PRSDebug.trace( "Error processing rows for query: count=" + this.rowsProcessed ); //$NON-NLS-1$
+				PRSDebug.trace( queryDesc.queryText );
+				PRSDebug.trace( e.toString() );
+			}
+		}
+		finally
+		{
+			this.qinfo.loadFinished( this );
+
+			synchronized (this)
+			{
+				runningQueries[ qnum % QSIZE ] = null;
+
+				if ( PRSDebug.traceQueries )
+				{
+					System.out.println( PRSDebug.timestamp() //
+							+ " FINISH query#" + qnum //$NON-NLS-1$
+							+ " row#" + rowcount[ qnum % QSIZE ] ); //$NON-NLS-1$
+				}
+
+				traceActiveQueries();
+
+				this.processingComplete = true;
+				this.processingStarted = false;
+
+				notifyAll();
+			}
+		}
+	}
+
+	private void processRow( ResultSet r ) throws SQLException
+	{
+		++this.rowsProcessed;
+
+		if ( PRSDebug.enableTracing )
+		{
+			PRSDebug.trace( "PRS: processing row " + this.rowsProcessed ); //$NON-NLS-1$
+		}
+
+		PRSDebug.debugRowDelay();
+
+		int colcount = getMetadata().getColumnCount();
+
+		Object[] row = new Object[ colcount + 1 ];
+
+		for ( int ii = 1; ii <= colcount; ++ii )
+		{
+			row[ ii - 1 ] = getResultValue( r, ii );
+		}
+
+		if ( PRSDebug.traceQueries )
+		{
+			++rowcount[ qnum % QSIZE ];
+		}
+
+		this.qinfo.addRow( row, this );
+
+		// TODO GLD nobody waits on this class, so this notify is misplaced
+		synchronized (this)
+		{
+			notifyAll();
+		}
+	}
+
+	private Object getResultValue( ResultSet rs, int ii ) throws SQLException
+	{
+		Object o = null;
+
+		switch (getMetadata().columnInfo[ ii - 1 ].columnType)
+		{
+			case PRSMetadata.TYPE_CHAR:
+			case PRSMetadata.TYPE_VARCHAR:
+			case PRSMetadata.TYPE_CLOB:
+				try {
+					o = rs.getObject( ii );
+
+					if ( (o != null) && !(o instanceof String) ) {
+						o = rs.getString( ii );
+					}
+				} catch (Exception e) {
+					if (e instanceof SQLException && ((SQLException)e).getErrorCode() == CHAR_CONVERSION_EXCEPTION) {
+						o = " ";
+					} else {
+						throw new SQLException( "Error getting value for index " + ii, e ); //$NON-NLS-1$
+					}
+				}
+				break;
+
+			case PRSMetadata.TYPE_BINARY:
+			case PRSMetadata.TYPE_VARBINARY:
+				o = rs.getObject( ii );
+				break;
+
+			case PRSMetadata.TYPE_INTEGER:
+			case PRSMetadata.TYPE_SMALLINT:
+			case PRSMetadata.TYPE_BIGINT:
+				o = Long.valueOf( rs.getLong( ii ) );
+				break;
+
+			case PRSMetadata.TYPE_FLOAT:
+			case PRSMetadata.TYPE_DOUBLE:
+				o = Double.valueOf( rs.getDouble( ii ) );
+				break;
+
+			case PRSMetadata.TYPE_DECIMAL:
+				o = rs.getBigDecimal( ii );
+				break;
+
+			case PRSMetadata.TYPE_TIMESTAMP:
+				o = rs.getTimestamp( ii );
+				break;
+
+			default:
+				o = rs.getString( ii );
+				break;
+		}
+
+		if ( o instanceof String )
+		{
+			o = StringCache.getUniqueString( (String)o );
+		}
+
+		return o;
+	}
+
+	public synchronized void waitForRow()
+	{
+		if ( isComplete() )
+		{
+			return;
+		}
+
+		// TODO Wait for a brief minimum period - this avoids a timing issue in
+		// the JUnit test suite that does not manifest with normal usage of
+		// the product. This needs to be diagnosed and fixed...
+		// Then the following code can be replaced with just
+		// wait( 1000 );
+		long deadline1 = System.currentTimeMillis() + 10;
+
+		// We still will return after a longer delay so the caller can log trace
+		// messages, check conditions, etc.
+		long deadline2 = System.currentTimeMillis() + 1000;
+
+		// Remember whether our return condition has been satisfied so we can
+		// return once the first deadline has passed.
+		boolean awakened = false;
+
+		for ( ;; )
+		{
+			long now = System.currentTimeMillis();
+
+			// Return if the second deadline passes, unconditionally -
+			// Or when the first deadline is past and we have been awakened
+			if ( (deadline2 <= now) || (awakened && (deadline1 <= now)) )
+			{
+				return;
+			}
+
+			long waittime = (deadline1 > now)
+					? deadline1 - now
+					: deadline2 - now;
+
+			try
+			{
+				wait( waittime );
+			}
+			catch (InterruptedException e)
+			{
+				// Eat it
+			}
+
+			// Somebody woke us up - we can return as soon as deadline1 passes
+			awakened = true;
+		}
+	}
+
+	private void traceActiveQueries()
+	{
+		if ( !PRSDebug.traceQueries )
+		{
+			return;
+		}
+
+		System.out.print( "  Active queries: " ); //$NON-NLS-1$
+
+		for ( int ii = 0; ii < QSIZE; ++ii )
+		{
+			int idx = ii + nextqnum - QSIZE;
+
+			if ( (idx < 0) || (runningQueries[ idx % QSIZE ] == null) )
+			{
+				continue;
+			}
+
+			int qid = runningQueries[ idx % QSIZE ].qnum;
+			int rows = rowcount[ idx % QSIZE ];
+
+			System.out.print( Integer.toString( qid ) + "(" + rows + ")" ); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+
+		System.out.println();
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PRSDebug.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PRSDebug.java
new file mode 100644
index 0000000..f7a8f26
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PRSDebug.java
@@ -0,0 +1,150 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.PrintStream;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Random;
+import java.util.TimeZone;
+
+/** tracing and statistics gathering */
+public class PRSDebug
+{
+	public static boolean enableTracing = false;
+
+	// TODO clean these two flags up
+	public static boolean enableFileCache = false;
+	public static boolean noFileCache = true;
+	public static boolean traceQueries = false;
+
+	/** DEBUG Time when this class is loaded */
+	private static final long zerotime = System.currentTimeMillis();
+
+	/** DEBUG Trace file */
+	private static PrintStream traceout = null;
+
+	/** DEBUG Sequence number for trace statements */
+	private static int tracecount = 0;
+
+	/** DEBUG Add a fixed delay (ms) for each query */
+	public static int QUERY_DELAY = 0;
+
+	/** DEBUG Add a fixed delay (ms) for each row returned from the query */
+	public static int ROW_DELAY = 0;
+
+	/** DEBUG Count the number of rows processed */
+	public static int rowcount = 0;
+	
+	static
+	{
+		try
+		{
+			if (PRSDebug.enableTracing) {
+				String highLevelQualifier = "persistentResultSet";
+				File traceFile = null;
+		        
+		        String tempDir = System.getProperty( "java.io.tmpdir" );
+		        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'");
+		        sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
+		        Random rnd = new Random(System.currentTimeMillis());
+		        StringBuffer rndStr = new StringBuffer(4);
+		        for(int i = 0; i < 4; i++) {
+		           rndStr.append( (char) (rnd.nextInt( (int) ('z' - 'a') ) + 'a') );
+		        }
+		        String uniqueQualifier = sdf.format(new Date(System.currentTimeMillis())) + "-" + rndStr;
+		        String filePath = tempDir + File.separator + "dsTrace." + highLevelQualifier + "." + uniqueQualifier;
+		        traceFile = new File(filePath);
+		        System.out.println(traceFile.getAbsolutePath());
+				
+		        FileOutputStream fos = new FileOutputStream( traceFile, true ); //$NON-NLS-1$
+				
+				PRSDebug.traceout = new PrintStream( fos );
+
+				PRSDebug.trace( "Tracing engaged" ); //$NON-NLS-1$
+			}
+		}
+		catch (FileNotFoundException e)
+		{
+			// Eat it
+		}
+	}
+
+	public static void debugQueryDelay()
+	{
+		PRSDebug.debugDelay( QUERY_DELAY );
+	}
+
+	public static void debugRowDelay()
+	{
+		PRSDebug.debugDelay( ROW_DELAY );
+		++rowcount;
+	}
+
+	public static void debugDelay( int delay )
+	{
+		try
+		{
+			if ( delay > 0 )
+			{
+				Thread.sleep( delay );
+			}
+		}
+		catch (InterruptedException e)
+		{
+			// Eat it
+		}
+	}
+
+	/** Print a debug message */
+	public static void trace( String msg )
+	{
+		if ( !PRSDebug.enableTracing )
+		{
+			return;
+		}
+
+		long tid = Thread.currentThread().getId();
+		int relativetime = (int)(System.currentTimeMillis() - zerotime);
+		String pattern = "%1$04d %2$04d.%3$03d %4$03d"; //$NON-NLS-1$
+
+		String ts = String.format( pattern, //
+				Long.valueOf( tid ), //
+				Integer.valueOf( relativetime / 1000 ), //
+				Integer.valueOf( relativetime % 1000 ), //
+				Integer.valueOf( tracecount++ % 1000 ) );
+
+		if ( traceout != null )
+		{
+			traceout.println( ts + ": " + msg ); //$NON-NLS-1$
+		}
+
+		System.out.println( ts + ": " + msg ); //$NON-NLS-1$
+	}
+
+	public static String timestamp()
+	{
+		long diff = System.currentTimeMillis() - zerotime;
+
+		int ms = (int)(diff % 1000);
+		int secs = (int)(diff / 1000);
+		int mins = secs / 60;
+		secs = secs % 60;
+
+		return String.format( "%d:%02d.%03d", //$NON-NLS-1$
+				new Object[] {
+						Integer.valueOf( mins ), Integer.valueOf( secs ), Integer.valueOf( ms )
+				} );
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PRSMetadata.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PRSMetadata.java
new file mode 100644
index 0000000..c695223
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PRSMetadata.java
@@ -0,0 +1,457 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.LineNumberReader;
+import java.io.PrintWriter;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.util.IdentityHashMap;
+import java.util.Map;
+import java.util.StringTokenizer;
+
+/** Cache the metadata for the ResultSet we are capturing */
+public class PRSMetadata implements ResultSetMetaData
+{
+	public static final int TYPE_BIT = -7;
+	public static final int TYPE_TINYINT = -6;
+	public static final int TYPE_BIGINT = -5;
+	public static final int TYPE_LONGVARBINARY = -4;
+	public static final int TYPE_VARBINARY = -3;
+	public static final int TYPE_BINARY = -2;
+	public static final int TYPE_LONGVARCHAR = -1;
+	public static final int TYPE_NULL = 0;
+	public static final int TYPE_CHAR = 1;
+	public static final int TYPE_NUMERIC = 2;
+	public static final int TYPE_DECIMAL = 3;
+	public static final int TYPE_INTEGER = 4;
+	public static final int TYPE_SMALLINT = 5;
+	public static final int TYPE_FLOAT = 6;
+	public static final int TYPE_REAL = 7;
+	public static final int TYPE_DOUBLE = 8;
+	public static final int TYPE_VARCHAR = 12;
+	public static final int TYPE_DATE = 91;
+	public static final int TYPE_TIME = 92;
+	public static final int TYPE_TIMESTAMP = 93;
+	public static final int TYPE_CLOB = 2005;
+	public static final int TYPE_OTHER = 1111;
+
+	/** Info about a ResultSet column - values from ResultSetMetadata */
+	public static class MetadataForColumn
+	{
+		public String catalogName;
+		public String columnClassName;
+		public String columnName;
+		public int columnType;
+		public String columnTypeName;
+		public int precision;
+		public int scale;
+		public String schemaName;
+		public String tableName;
+		public boolean isAutoIncrement;
+		public boolean isCaseSensitive;
+		public boolean isCurrency;
+		public boolean isDefinitelyWritable;
+		public int isNullable;
+		public boolean isReadOnly;
+		public boolean isSearchable;
+		public boolean isSigned;
+		public boolean isWritable;
+
+		public void save( PrintWriter pw )
+		{
+			pw.println( toPrintString() );
+		}
+
+		public String toPrintString()
+		{
+			StringBuilder sb = new StringBuilder();
+
+			PRSPersistenceUtility.append( sb, this.catalogName );
+			PRSPersistenceUtility.append( sb, this.columnClassName );
+			PRSPersistenceUtility.append( sb, this.columnName );
+			PRSPersistenceUtility.append( sb, this.columnType );
+			PRSPersistenceUtility.append( sb, this.columnTypeName );
+			PRSPersistenceUtility.append( sb, this.precision );
+			PRSPersistenceUtility.append( sb, this.scale );
+			PRSPersistenceUtility.append( sb, this.schemaName );
+			PRSPersistenceUtility.append( sb, this.tableName );
+			PRSPersistenceUtility.append( sb, this.isAutoIncrement );
+			PRSPersistenceUtility.append( sb, this.isCaseSensitive );
+			PRSPersistenceUtility.append( sb, this.isCurrency );
+			PRSPersistenceUtility.append( sb, this.isDefinitelyWritable );
+			PRSPersistenceUtility.append( sb, this.isNullable );
+			PRSPersistenceUtility.append( sb, this.isReadOnly );
+			PRSPersistenceUtility.append( sb, this.isSearchable );
+			PRSPersistenceUtility.append( sb, this.isSigned );
+			PRSPersistenceUtility.append( sb, this.isWritable );
+
+			return sb.toString();
+		}
+
+		public void fromPrintString( String s )
+		{
+			StringTokenizer toker = new StringTokenizer( s, "|" ); //$NON-NLS-1$
+
+			this.catalogName = PRSPersistenceUtility.getStringToken( toker );
+			this.columnClassName = PRSPersistenceUtility.getStringToken( toker );
+			this.columnName = PRSPersistenceUtility.getStringToken( toker );
+			this.columnType = PRSPersistenceUtility.getIntToken( toker );
+			this.columnTypeName = PRSPersistenceUtility.getStringToken( toker );
+			this.precision = PRSPersistenceUtility.getIntToken( toker );
+			this.scale = PRSPersistenceUtility.getIntToken( toker );
+			this.schemaName = PRSPersistenceUtility.getStringToken( toker );
+			this.tableName = PRSPersistenceUtility.getStringToken( toker );
+			this.isAutoIncrement = PRSPersistenceUtility.getBooleanToken( toker );
+			this.isCaseSensitive = PRSPersistenceUtility.getBooleanToken( toker );
+			this.isCurrency = PRSPersistenceUtility.getBooleanToken( toker );
+			this.isDefinitelyWritable = PRSPersistenceUtility.getBooleanToken( toker );
+			this.isNullable = PRSPersistenceUtility.getIntToken( toker );
+			this.isReadOnly = PRSPersistenceUtility.getBooleanToken( toker );
+			this.isSearchable = PRSPersistenceUtility.getBooleanToken( toker );
+			this.isSigned = PRSPersistenceUtility.getBooleanToken( toker );
+			this.isWritable = PRSPersistenceUtility.getBooleanToken( toker );
+		}
+	}
+
+	/** SQL Type ID */
+	public static final int OTHER = 0;
+	public static final int STRING = 1;
+
+	private int columnCount;
+	public MetadataForColumn[] columnInfo;
+
+	/** This accelerates repeated column look up by identical name (typical) */
+	private final Map<String, int[]> columnmap = new IdentityHashMap<String, int[]>();
+
+	public PRSMetadata()
+	{
+		// do nothing
+	}
+
+	public PRSMetadata( ResultSet rs ) //
+			throws SQLException
+	{
+		extractMetadataFromResults( rs );
+	}
+
+	public static PRSMetadata loadSavedMetadata( LineNumberReader lr ) //
+			throws NumberFormatException, IOException
+	{
+		String line = lr.readLine();
+
+		if ( line == null )
+		{
+			return null;
+		}
+
+		PRSMetadata metadata = new PRSMetadata();
+
+//		int count = Integer.parseInt( line );
+		StringTokenizer toker = new StringTokenizer( line, "|" ); //$NON-NLS-1$
+
+		int count = PRSPersistenceUtility.getIntToken( toker );
+
+		metadata.columnCount = count;
+		metadata.columnInfo = new MetadataForColumn[ count ];
+
+		for ( int ii = 0; ii < count; ++ii )
+		{
+			line = lr.readLine();
+			if ( line == null )
+			{
+				break;
+			}
+
+			MetadataForColumn colinfo = new MetadataForColumn();
+			colinfo.fromPrintString( line );
+
+			metadata.columnInfo[ ii ] = colinfo;
+		}
+		
+		return metadata;
+	}
+
+	/** Convert an array of column names to the corresponding column indexes */
+	public int[] convertColumnNames( String[] colnames )
+	{
+		int[] colnums = new int[ colnames.length ];
+
+		int ii = 0;
+
+		for ( String name : colnames )
+		{
+			try
+			{
+				colnums[ ii ] = findColumn( name );
+			}
+			catch (SQLException e)
+			{
+				colnums[ ii ] = 0;
+			}
+
+			++ii;
+		}
+
+		return colnums;
+	}
+
+	/** Look through the data items for one with a certain name */
+	public int findColumn( String columnName ) throws SQLException
+	{
+		int[] idx = this.columnmap.get( columnName );
+
+		if ( idx != null )
+		{
+			return idx[ 0 ];
+		}
+
+		int count = getColumnCount();
+
+		for ( int ii = 1; ii <= count; ++ii )
+		{
+			if ( getColumnName( ii ).equals( columnName ) )
+			{
+				this.columnmap.put( columnName, new int[] {
+					ii
+				} );
+
+				return ii;
+			}
+		}
+
+		throw new SQLException( "Can't find column named \"" //$NON-NLS-1$
+				+ columnName + "\"" ); //$NON-NLS-1$
+	}
+
+	private void extractMetadataFromResults( ResultSet rs ) throws SQLException
+	{
+		ResultSetMetaData md = rs.getMetaData();
+
+		this.columnCount = md.getColumnCount();
+
+		this.columnInfo = new MetadataForColumn[ this.columnCount ];
+
+		for ( int ii = 1; ii <= this.columnCount; ++ii )
+		{
+			MetadataForColumn mdc = new MetadataForColumn();
+
+			this.columnInfo[ ii - 1 ] = mdc;
+
+			mdc.catalogName = StringCache.getUniqueString( md.getCatalogName( ii ) );
+			mdc.columnClassName = StringCache.getUniqueString( md.getColumnClassName( ii ) );
+			mdc.columnName = StringCache.getUniqueString( md.getColumnLabel( ii ) );
+			mdc.columnType = md.getColumnType( ii );
+			mdc.columnTypeName = StringCache.getUniqueString( md.getColumnTypeName( ii ) );
+			mdc.precision = md.getPrecision( ii );
+			mdc.scale = md.getScale( ii );
+			mdc.schemaName = md.getSchemaName( ii );
+			mdc.tableName = StringCache.getUniqueString( md.getTableName( ii ) );
+			mdc.isAutoIncrement = md.isAutoIncrement( ii );
+			mdc.isCaseSensitive = md.isCaseSensitive( ii );
+			mdc.isCurrency = md.isCurrency( ii );
+			mdc.isDefinitelyWritable = md.isDefinitelyWritable( ii );
+			mdc.isNullable = md.isNullable( ii );
+			mdc.isReadOnly = md.isReadOnly( ii );
+			mdc.isSearchable = md.isSearchable( ii );
+			mdc.isSigned = md.isSigned( ii );
+			mdc.isWritable = md.isWritable( ii );
+		}
+	}
+
+	public void save( File saveFile )
+	{
+		if ( PRSDebug.noFileCache || saveFile == null ) {
+			return;
+		}
+
+		PrintWriter pw = PRSPersistenceUtility.openFileForAppend( saveFile );
+
+		if (pw == null) {
+			return;
+		}
+		
+		pw.print( toPrintString() );
+
+		pw.close();
+	}
+
+	public String toPrintString()
+	{
+		StringBuilder sb = new StringBuilder();
+
+		PRSPersistenceUtility.append( sb, this.columnCount );
+		PRSPersistenceUtility.newline( sb );
+
+		for ( MetadataForColumn colinfo : this.columnInfo )
+		{
+			PRSPersistenceUtility.addLine( sb, colinfo.toPrintString() );
+		}
+
+		return sb.toString();
+	}
+
+	public String getColumnClassName( int column ) throws SQLException
+	{
+		return this.columnInfo[ column - 1 ].columnClassName;
+	}
+
+	public int getColumnCount() throws SQLException
+	{
+		return this.columnCount;
+	}
+
+	public String getCatalogName( int column ) throws SQLException
+	{
+		return this.columnInfo[ column - 1 ].catalogName;
+	}
+
+	public int getColumnDisplaySize( int column ) throws SQLException
+	{
+		return 0;
+	}
+
+	public String getColumnLabel( int column ) throws SQLException
+	{
+		return null;
+	}
+
+	public String getColumnName( int column ) throws SQLException
+	{
+		return this.columnInfo[ column - 1 ].columnName;
+	}
+
+	public int getColumnType( int column ) throws SQLException
+	{
+		return this.columnInfo[ column - 1 ].columnType;
+	}
+
+	public String getColumnTypeName( int column ) throws SQLException
+	{
+		return this.columnInfo[ column - 1 ].columnTypeName;
+	}
+
+	public int getPrecision( int column ) throws SQLException
+	{
+		return this.columnInfo[ column - 1 ].precision;
+	}
+
+	public int getScale( int column ) throws SQLException
+	{
+		return this.columnInfo[ column - 1 ].scale;
+	}
+
+	public String getSchemaName( int column ) throws SQLException
+	{
+		return this.columnInfo[ column - 1 ].schemaName;
+	}
+
+	public String getTableName( int column ) throws SQLException
+	{
+		return this.columnInfo[ column - 1 ].tableName;
+	}
+
+	public boolean isAutoIncrement( int column ) throws SQLException
+	{
+		return this.columnInfo[ column - 1 ].isAutoIncrement;
+	}
+
+	public boolean isCaseSensitive( int column ) throws SQLException
+	{
+		return this.columnInfo[ column - 1 ].isCaseSensitive;
+	}
+
+	public boolean isCurrency( int column ) throws SQLException
+	{
+		return this.columnInfo[ column - 1 ].isCurrency;
+	}
+
+	public boolean isDefinitelyWritable( int column ) throws SQLException
+	{
+		return this.columnInfo[ column - 1 ].isDefinitelyWritable;
+	}
+
+	public int isNullable( int column ) throws SQLException
+	{
+		return this.columnInfo[ column - 1 ].isNullable;
+	}
+
+	public boolean isReadOnly( int column ) throws SQLException
+	{
+		return this.columnInfo[ column - 1 ].isReadOnly;
+	}
+
+	public boolean isSearchable( int column ) throws SQLException
+	{
+		return this.columnInfo[ column - 1 ].isSearchable;
+	}
+
+	public boolean isSigned( int column ) throws SQLException
+	{
+		return this.columnInfo[ column - 1 ].isSigned;
+	}
+
+	public boolean isWritable( int column ) throws SQLException
+	{
+		return this.columnInfo[ column - 1 ].isWritable;
+	}
+
+	public boolean isWrapperFor( Class<?> iface ) throws SQLException
+	{
+		return false;
+	}
+
+	public <T> T unwrap( Class<T> iface ) throws SQLException
+	{
+		return null;
+	}
+}
+
+class PRSMetadataTest
+{
+	@SuppressWarnings ("nls")
+	public static void main( String[] args )
+	{
+		PRSMetadata.MetadataForColumn m4c = new PRSMetadata.MetadataForColumn();
+		PRSMetadata.MetadataForColumn m4c2 = new PRSMetadata.MetadataForColumn();
+
+		m4c.catalogName = "foo";
+		m4c.columnClassName = "|foo|bar|";
+		m4c.columnName = "foo||bar";
+		m4c.columnTypeName = "\u1111foo\u2222bar\u3333";
+		m4c.schemaName = "foo\u1111\u2222bar";
+		m4c.tableName = null;
+		m4c.columnType = 0;
+		m4c.precision = 2;
+		m4c.scale = -1;
+		m4c.isNullable = 0;
+		m4c.isAutoIncrement = false;
+		m4c.isCaseSensitive = true;
+		m4c.isCurrency = false;
+		m4c.isDefinitelyWritable = true;
+		m4c.isReadOnly = false;
+		m4c.isSearchable = true;
+		m4c.isSigned = false;
+		m4c.isWritable = true;
+
+		String s = m4c.toPrintString();
+		System.out.println( "printString='" + s + "'" );
+
+		m4c2.fromPrintString( s );
+
+		System.out.println( "Result=" + ((m4c2.toPrintString().equals( s ))
+				? "success"
+				: "fail") );
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PRSPersistenceUtility.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PRSPersistenceUtility.java
new file mode 100644
index 0000000..fe557a0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PRSPersistenceUtility.java
@@ -0,0 +1,344 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.LineNumberReader;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.io.Reader;
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.util.StringTokenizer;
+
+public class PRSPersistenceUtility
+{
+	public static final String LINESEP = System.getProperty( "line.separator" ); //$NON-NLS-1$
+	private static final String STR_HASH = "#"; //$NON-NLS-1$
+
+	private static final char MARKER_NULL = 'N';
+	private static final char MARKER_STRING = '"';
+	private static final char MARKER_CHAR = 'c';
+	private static final char MARKER_INT = 'i';
+	private static final char MARKER_LONG = 'l';
+	private static final char MARKER_DOUBLE = 'd';
+	private static final char MARKER_BOOLEAN = 'b';
+	private static final char MARKER_DECIMAL = 'D';
+	private static final char MARKER_TIMESTAMP = 'T';
+
+	public static LineNumberReader openFileForRead( File file )
+	{
+		Reader rdr;
+
+		try
+		{
+			rdr = new FileReader( file );
+		}
+		catch (FileNotFoundException e)
+		{
+			return null;
+		}
+
+		return new LineNumberReader( rdr );
+	}
+
+	public static PrintWriter openFileForAppend( File file )
+	{
+		return openFileForWrite( file, true );
+	}
+
+	public static PrintWriter openFileForCreate( File file )
+	{
+		return openFileForWrite( file, false );
+	}
+
+	private static PrintWriter openFileForWrite( File file, boolean append )
+	{
+		if (file == null) {
+			return null;
+		}
+		OutputStream os;
+
+		try
+		{
+			os = new FileOutputStream( file, append );
+		}
+		catch (FileNotFoundException e)
+		{
+			return null;
+		}
+
+		return new PrintWriter( os );
+	}
+
+	public static void addLine( StringBuilder sb, String line )
+	{
+		sb.append( line );
+		newline( sb );
+	}
+
+	public static void newline( StringBuilder sb )
+	{
+		sb.append( LINESEP );
+	}
+
+	public static void append( StringBuilder sb, Object o )
+	{
+		if ( o == null )
+		{
+			appendNull( sb );
+			return;
+		}
+
+		if ( o instanceof String )
+		{
+			append( sb, (String)o );
+		}
+		else if ( o instanceof Long )
+		{
+			append( sb, ((Long)o).longValue() );
+		}
+		else if ( o instanceof Double )
+		{
+			append( sb, ((Double)o).doubleValue() );
+		}
+		else if ( o instanceof BigDecimal )
+		{
+			append( sb, (BigDecimal)o );
+		}
+		else if ( o instanceof Timestamp )
+		{
+			append( sb, (Timestamp)o );
+		}
+		else
+		{
+			append( sb, o.toString() );
+		}
+	}
+
+	public static void appendNull( StringBuilder sb )
+	{
+		sb.append( MARKER_NULL );
+		sb.append( "|" ); //$NON-NLS-1$
+	}
+
+	public static void append( StringBuilder sb, String s )
+	{
+		if ( s == null )
+		{
+			appendNull( sb );
+
+			return;
+		}
+
+		sb.append( MARKER_STRING );
+		sb.append( encodeString( s ) );
+		sb.append( '|' );
+	}
+
+	public static String encodeString( String s )
+	{
+		if ( s == null )
+		{
+			return ""; //$NON-NLS-1$
+		}
+
+		int len = s.length();
+
+		StringBuilder sb = new StringBuilder();
+
+		for ( int ii = 0; ii < len; ++ii )
+		{
+			sb.append( encodeChar( s.charAt( ii ) ) );
+		}
+
+		return sb.toString();
+	}
+
+	private static String encodeChar( char ch )
+	{
+		return ((ch >= 32) && (ch < 127) && (ch != '|') && (ch != '#'))
+				? "" + ch //$NON-NLS-1$
+				: String.format( "#%04x", Integer.valueOf( ch & 0xFFFF ) ); //$NON-NLS-1$
+	}
+
+	public static void append( StringBuilder sb, int i )
+	{
+		sb.append( MARKER_INT );
+		sb.append( i );
+		sb.append( '|' );
+	}
+
+	public static void append( StringBuilder sb, long l )
+	{
+		sb.append( MARKER_LONG );
+		sb.append( l );
+		sb.append( '|' );
+	}
+
+	public static void append( StringBuilder sb, double d )
+	{
+		sb.append( MARKER_DOUBLE );
+		sb.append( d );
+		sb.append( '|' );
+	}
+
+	public static void append( StringBuilder sb, BigDecimal d )
+	{
+		sb.append( MARKER_DECIMAL );
+		sb.append( d );
+		sb.append( '|' );
+	}
+
+	public static void append( StringBuilder sb, Timestamp t )
+	{
+		sb.append( MARKER_TIMESTAMP );
+		sb.append( t.getTime() );
+		sb.append( '|' );
+	}
+
+	public static void append( StringBuilder sb, char ch )
+	{
+		sb.append( MARKER_CHAR );
+		sb.append( encodeChar( ch ) );
+		sb.append( '|' );
+	}
+
+	public static void append( StringBuilder sb, boolean b )
+	{
+		sb.append( MARKER_BOOLEAN );
+		sb.append( (b)
+				? 't'
+				: 'f' );
+		sb.append( '|' );
+	}
+
+	public static Object getToken( StringTokenizer st )
+	{
+		if ( !st.hasMoreTokens() )
+		{
+			return null;
+		}
+
+		String tok = st.nextToken();
+
+		if ( (tok == null) || (tok.length() < 1) )
+		{
+			return null;
+		}
+
+		char marker = tok.charAt( 0 );
+		tok = tok.substring( 1 );
+
+		switch (marker)
+		{
+			case MARKER_STRING:
+			case MARKER_CHAR:
+				return decodeString( tok );
+
+			case MARKER_INT:
+				return new Integer( tok );
+
+			case MARKER_LONG:
+				return new Long( tok );
+
+			case MARKER_DOUBLE:
+				return new Double( tok );
+
+			case MARKER_DECIMAL:
+				return new BigDecimal( tok );
+
+			case MARKER_BOOLEAN:
+				return Boolean.valueOf( tok.charAt( 0 ) == 't' );
+
+			case MARKER_TIMESTAMP:
+				return new Timestamp( Long.parseLong( tok ) );
+
+			case MARKER_NULL:
+			default:
+				return null;
+		}
+	}
+
+	public static String getStringToken( StringTokenizer st )
+	{
+		Object o = getToken( st );
+
+		return (o instanceof String)
+				? (String)o
+				: null;
+	}
+
+	private static String decodeString( String s )
+	{
+		int hash = s.indexOf( STR_HASH );
+
+		if ( hash < 0 )
+		{
+			return s;
+		}
+
+		StringBuilder sb = new StringBuilder( s );
+		//--hash;
+
+		while ( (hash >= 0) && (hash < (sb.length() - 4)) )
+		{
+			char ch = (char)Integer.parseInt( sb.substring( hash + 1, hash + 5 ), 16 );
+
+			sb.setCharAt( hash, ch );
+			sb.delete( hash + 1, hash + 5 );
+
+			if ( hash < (sb.length() - 1) )
+			{
+				hash = sb.indexOf( STR_HASH, hash + 1 );
+			}
+		}
+
+		return sb.toString();
+	}
+
+	public static int getIntToken( StringTokenizer st )
+	{
+		Object o = getToken( st );
+
+		return (o instanceof Integer)
+				? ((Integer)o).intValue()
+				: 0;
+	}
+
+	public static long getLongToken( StringTokenizer st )
+	{
+		Object o = getToken( st );
+
+		return (o instanceof Long)
+				? ((Long)o).longValue()
+				: 0;
+	}
+
+	public static char getCharToken( StringTokenizer st )
+	{
+		Object o = getToken( st );
+
+		return ((o instanceof String) && ((String)o).length() > 0)
+				? ((String)o).charAt( 0 )
+				: 0;
+	}
+
+	public static boolean getBooleanToken( StringTokenizer st )
+	{
+		Object o = getToken( st );
+
+		return (o instanceof Boolean) && ((Boolean)o).booleanValue();
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PRSQueryInfo.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PRSQueryInfo.java
new file mode 100644
index 0000000..c65341e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PRSQueryInfo.java
@@ -0,0 +1,697 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.LineNumberReader;
+import java.io.PrintWriter;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.StringTokenizer;
+
+import org.eclipse.datatools.enablement.ibm.IBMPluginActivator;
+import org.eclipse.datatools.enablement.ibm.catalog.util.CatalogLoadUtil;
+import org.eclipse.datatools.enablement.ibm.catalog.util.ICatalogQuery;
+
+public class PRSQueryInfo
+{
+	private final PersistentQueryCache cache;
+
+	private int id;
+	private String idstring;
+	private long createTime;
+	private ICatalogQuery query;
+	private String upfrontQueryText;
+	private boolean hasUpfrontQueryExecuted;
+	private PRSDatabaseLoader upfrontLoader;
+	private boolean isComplete;
+	private boolean isError = false;
+	private SQLException exception = null;
+
+	private int[] filterColNumbers;
+
+	private PRSMetadata metadata;
+
+	private int nextRowNumber = 0;
+
+	private final List<PRSSliceInfo> loadingSlices = new ArrayList<PRSSliceInfo>();
+
+	private final Map<SliceKey, PRSSliceInfo> sliceMap = new HashMap<SliceKey, PRSSliceInfo>();
+
+	public PRSQueryInfo( PersistentQueryCache cache, int id, ICatalogQuery query )
+	{
+		this.cache = cache;
+		this.id = id;
+		this.idstring = String.format( "%03d", Integer.valueOf( this.id ) ); //$NON-NLS-1$
+
+		reset( query );
+	}
+
+	private PRSQueryInfo( PersistentQueryCache cache )
+	{
+		this.cache = cache;
+		this.id = -1;
+		this.query = null;
+		this.upfrontQueryText = null;
+		this.createTime = 0L;
+
+		this.idstring = null;
+	}
+
+	public void setException( SQLException exception )
+	{
+		this.exception = exception;
+	}
+
+	public SQLException getException()
+	{
+		return this.exception;
+	}
+
+	public synchronized void reset( ICatalogQuery q )
+	{
+		File qdata = getDataFile();
+		File qslices = getSlicesFile();
+		File qmeta = getMetadataFile();
+
+		if ( (qdata != null) && qdata.exists() )
+		{
+			qdata.delete();
+		}
+
+		if ( (qslices != null) && qslices.exists() )
+		{
+			qslices.delete();
+		}
+
+		if ( (qmeta != null) && qmeta.exists() )
+		{
+			qmeta.delete();
+		}
+
+		this.createTime = System.currentTimeMillis();
+		this.isComplete = false;
+		this.nextRowNumber = 1;
+		this.metadata = null;
+		this.query = q;
+		this.upfrontQueryText = this.query.generateUpFrontQuery( this.cache.getDatabase() );
+		this.hasUpfrontQueryExecuted = false;
+		this.upfrontLoader = null;
+
+		this.sliceMap.clear();
+		this.loadingSlices.clear();
+	}
+
+	public static PRSQueryInfo loadSavedQuery( PersistentQueryCache cache, String line )
+	{
+		if ( PRSDebug.noFileCache )
+		{
+			return null;
+		}
+
+		PRSQueryInfo qinfo = new PRSQueryInfo( cache );
+
+		try
+		{
+			if ( !qinfo.fromPrintString( line ) )
+			{
+				return null;
+			}
+		}
+		catch (Exception e)
+		{
+			return null;
+		}
+
+		qinfo.loadSlices();
+		qinfo.loadMetadata();
+
+		cache.registerQueryInfo( qinfo );
+
+		return qinfo;
+	}
+
+	public int getId()
+	{
+		return this.id;
+	}
+
+	public ICatalogQuery getQuery()
+	{
+		return this.query;
+	}
+
+	public PersistentQueryCache getQueryCache()
+	{
+		return this.cache;
+	}
+
+	public String getUpfrontQueryText()
+	{
+		return this.upfrontQueryText;
+	}
+
+	public void setMetadata( PRSMetadata metadata )
+	{
+		this.metadata = metadata;
+
+		this.metadata.save( getMetadataFile() );
+	}
+
+	public PRSMetadata getMetadata()
+	{
+		return this.metadata;
+	}
+
+	/** Return whether the result set is configured to be filtered */
+	public boolean canFilter()
+	{
+		if ( this.filterColNumbers != null )
+		{
+			return this.filterColNumbers.length > 0;
+		}
+
+		return (this.query != null) //
+				&& (this.query.getFilterColumnCount() > 0);
+	}
+
+	public void setComplete()
+	{
+		this.isComplete = true;
+	}
+
+	/** Upfront query has been run, no DB queries are active */
+	public boolean isComplete()
+	{
+		return this.isComplete;
+	}
+
+	/** Upfront query has been initiated for this query */
+	public boolean hasUpfrontQueryExecuted()
+	{
+		return this.hasUpfrontQueryExecuted;
+	}
+
+	public String toPrintString()
+	{
+		StringBuilder sb = new StringBuilder();
+
+		PRSPersistenceUtility.append( sb, this.id );
+		PRSPersistenceUtility.append( sb, this.idstring );
+		PRSPersistenceUtility.append( sb, this.createTime );
+		PRSPersistenceUtility.append( sb, this.upfrontQueryText );
+		PRSPersistenceUtility.append( sb, this.hasUpfrontQueryExecuted );
+		PRSPersistenceUtility.append( sb, this.isComplete );
+
+		determineFilterColumnNumbers();
+
+		PRSPersistenceUtility.append( sb, (this.filterColNumbers != null)
+				? this.filterColNumbers.length
+				: 0 );
+
+		if ( this.filterColNumbers != null )
+		{
+			for ( int colnum : this.filterColNumbers )
+			{
+				PRSPersistenceUtility.append( sb, colnum );
+			}
+		}
+
+		return sb.toString();
+	}
+
+	private boolean fromPrintString( String s )
+	{
+		StringTokenizer toker = new StringTokenizer( s, "|" ); //$NON-NLS-1$
+
+		this.id = PRSPersistenceUtility.getIntToken( toker );
+		this.idstring = PRSPersistenceUtility.getStringToken( toker );
+		this.createTime = PRSPersistenceUtility.getLongToken( toker );
+		this.upfrontQueryText = PRSPersistenceUtility.getStringToken( toker );
+		this.hasUpfrontQueryExecuted = PRSPersistenceUtility.getBooleanToken( toker );
+		this.isComplete = PRSPersistenceUtility.getBooleanToken( toker );
+
+		int numFilterCols = PRSPersistenceUtility.getIntToken( toker );
+
+		this.filterColNumbers = new int[ numFilterCols ];
+
+		for ( int ii = 0; ii < numFilterCols; ++ii )
+		{
+			this.filterColNumbers[ ii ] = PRSPersistenceUtility.getIntToken( toker );
+		}
+
+		return true;
+	}
+
+	public void quitOnError( PRSDatabaseLoader dbloader )
+	{
+		this.isError = true;
+
+		finishLoad( dbloader );
+	}
+
+	public void loadFinished( PRSDatabaseLoader dbloader )
+	{
+		finishLoad( dbloader );
+	}
+
+	private synchronized void finishLoad( PRSDatabaseLoader dbloader )
+	{
+		for ( Iterator<PRSSliceInfo> iter = this.loadingSlices.iterator(); iter.hasNext(); )
+		{
+			PRSSliceInfo slice = iter.next();
+
+			if ( slice.getLoader() == dbloader )
+			{
+				slice.finish();
+				iter.remove();
+			}
+		}
+
+		if ( this.isError //
+				|| (this.hasUpfrontQueryExecuted && this.loadingSlices.isEmpty()) )
+		{
+			this.isComplete = true;
+
+			saveSlices();
+		}
+
+		if ( this.upfrontLoader == dbloader )
+		{
+			this.upfrontLoader = null;
+		}
+	}
+
+	private void saveSlices()
+	{
+		if ( this.sliceMap.isEmpty() || PRSDebug.noFileCache || !PRSDebug.enableFileCache )
+		{
+			return;
+		}
+
+		PrintWriter pw = getSliceFileWriter();
+
+		if (pw == null) {
+			return;
+		}
+		
+		for ( PRSSliceInfo slice : getSlices() )
+		{
+			slice.finish();
+
+			slice.save( pw );
+		}
+
+		CatalogLoadUtil.safeClose( pw );
+	}
+
+	private boolean loadSlices()
+	{
+		if ( PRSDebug.noFileCache )
+		{
+			return false;
+		}
+
+		LineNumberReader lnr = null;
+
+		try
+		{
+			File sfile = getSlicesFile();
+
+			if ( (sfile == null) || !sfile.isFile() || !sfile.canRead() )
+			{
+				return false;
+			}
+
+			lnr = PRSPersistenceUtility.openFileForRead( sfile );
+			if ( lnr == null )
+			{
+				return false;
+			}
+
+			for ( ;; )
+			{
+				String line = lnr.readLine();
+				if ( line == null )
+				{
+					break;
+				}
+
+				PRSSliceInfo slice = PRSSliceInfo.loadSavedSlice( this, line );
+
+				this.sliceMap.put( slice.getSliceKey(), slice );
+				slice.setComplete();
+			}
+		}
+		catch (IOException e)
+		{
+			return false;
+		}
+		finally
+		{
+			CatalogLoadUtil.safeClose( lnr );
+		}
+
+		return true;
+	}
+
+	public void loadMetadata()
+	{
+		if ( PRSDebug.noFileCache )
+		{
+			return;
+		}
+
+		File mdfile = getMetadataFile();
+
+		if ( (mdfile == null) || !mdfile.exists() || !mdfile.canRead() )
+		{
+			return;
+		}
+
+		LineNumberReader lr = null;
+
+		try
+		{
+			lr = new LineNumberReader( new FileReader( mdfile ) );
+
+			this.metadata = PRSMetadata.loadSavedMetadata( lr );
+		}
+		catch (Exception e)
+		{
+			IBMPluginActivator.log( e );
+		}
+		finally
+		{
+			CatalogLoadUtil.safeClose( lr );
+		}
+	}
+
+	public PRSSliceInfo[] getSlices()
+	{
+		PRSSliceInfo[] slices = this.sliceMap.values().toArray( new PRSSliceInfo[ this.sliceMap.size() ] );
+
+		Arrays.sort( slices, //
+				new Comparator<PRSSliceInfo>()
+				{
+					@Override
+					public int compare( PRSSliceInfo s1, PRSSliceInfo s2 )
+					{
+						return (s1.getSerialNumber() > s2.getSerialNumber())
+								? 1
+								: -1;
+					}
+				} );
+
+		return slices;
+	}
+
+	public PrintWriter getSliceFileWriter()
+	{
+		return PRSPersistenceUtility.openFileForCreate( getSlicesFile() );
+	}
+
+	public File getMetadataFile()
+	{
+		File cacheFolder = this.cache.getCacheFolder();
+		if ( cacheFolder == null )
+		{
+			return null;
+		}
+
+		String name = "q" + this.idstring + "_metadata.txt"; //$NON-NLS-1$ //$NON-NLS-2$
+
+		return new File( cacheFolder, name );
+	}
+
+	public File getDataFile()
+	{
+		File cacheFolder = this.cache.getCacheFolder();
+		if ( cacheFolder == null )
+		{
+			return null;
+		}
+
+		String name = "q" + this.idstring + "_data.txt"; //$NON-NLS-1$ //$NON-NLS-2$
+
+		return new File( cacheFolder, name );
+	}
+
+	public long getDataFileByteOffset()
+	{
+		File dataFile = getDataFile();
+
+		return ((dataFile != null) && dataFile.isFile())
+				? dataFile.length()
+				: -1;
+	}
+
+	public int getNextDataFileRowOffset()
+	{
+		return this.nextRowNumber + 1;
+	}
+
+	public int nextDataFileRowOffset()
+	{
+		return ++this.nextRowNumber;
+	}
+
+	public File getSlicesFile()
+	{
+		File cacheFolder = this.cache.getCacheFolder();
+		if ( cacheFolder == null )
+		{
+			return null;
+		}
+
+		String name = "q" + this.idstring + "_slices.txt"; //$NON-NLS-1$ //$NON-NLS-2$
+
+		return new File( cacheFolder, name );
+	}
+
+	/** Get the indexes of the items we are configured to filter on */
+	private synchronized void determineFilterColumnNumbers()
+	{
+		if ( (this.metadata == null) || !canFilter() )
+		{
+			return;
+		}
+
+		if ( this.filterColNumbers == null )
+		{
+			this.filterColNumbers = getMetadata().convertColumnNames( //
+					this.query.getFilterColumns() );
+		}
+	}
+
+	public PRSSliceInfo getSlice( ICatalogQuery q, Connection conn )
+	{
+		SliceKey slicekey = new SliceKey( q.getFilterValues() );
+
+		PRSSliceInfo slice = this.sliceMap.get( slicekey );
+		if ( slice != null )
+		{
+			return slice;
+		}
+
+		slice = getSlice( slicekey );
+
+		if ( isComplete() )
+		{
+			// System.out.println( "qinfo " + this.id +
+			// " is finished; creating empty slice for " +
+			// slicekey.getKeyString() );
+			slice.finish();
+
+			return slice;
+		}
+
+		addSliceBeingLoaded( slice );
+
+		if (q.useOnDemandQuery() && q.canBeOnDemand()) {
+			PRSDatabaseLoader dbloader = createLoader( q );
+
+			slice.setLoader( dbloader );
+			dbloader.initiateQuery( conn );
+		} else if ( !this.isError && (this.exception == null) && !this.hasUpfrontQueryExecuted ) {
+			this.upfrontLoader = createLoader( q );
+			
+			if ( slice.getLoader() == null )
+			{
+				slice.setLoader( this.upfrontLoader );
+			}
+
+			this.upfrontLoader.initiateQuery( conn );
+			this.hasUpfrontQueryExecuted = true;
+		}
+
+		if ( this.isError || (this.exception != null) )
+		{
+			slice.finish();
+		}
+		else if ( slice.getLoader() == null )
+		{
+			slice.setLoader( this.upfrontLoader );
+		}
+		return slice;
+	}
+
+	private PRSDatabaseLoader createLoader( ICatalogQuery q )
+	{
+		return new PRSDatabaseLoader( this, q );
+	}
+
+	public synchronized void addSlice( PRSSliceInfo slice )
+	{
+		this.sliceMap.put( slice.getSliceKey(), slice );
+	}
+
+	public synchronized PRSSliceInfo getSlice( SliceKey slicekey )
+	{
+		PRSSliceInfo slice = this.sliceMap.get( slicekey );
+
+		if ( slice == null )
+		{
+			slice = new PRSSliceInfo( this, slicekey );
+
+			addSlice( slice );
+		}
+
+		return slice;
+	}
+
+	public void addRow( Object[] row, PRSDatabaseLoader dbloader )
+	{
+		SliceKey slicekey = getSliceKey( row );
+
+		if ( PRSDebug.enableTracing )
+		{
+			PRSDebug.trace( "PRSQuery: row key=" + slicekey ); //$NON-NLS-1$
+		}
+
+		PRSSliceInfo slice = this.sliceMap.get( slicekey );
+
+		if ( slice == null )
+		{
+			doneLoadingPreviousSlices( dbloader );
+
+			slice = getSlice( slicekey );
+			addSliceBeingLoaded( slice );
+			slice.setLoader( dbloader );
+
+			startSlice( slice );
+		}
+
+		if ( slice.getLoader() == dbloader )
+		{
+			slice.addRow( row );
+		}
+	}
+
+	private synchronized void addSliceBeingLoaded( PRSSliceInfo slice )
+	{
+		this.loadingSlices.add( slice );
+	}
+
+	private synchronized void doneLoadingPreviousSlices( PRSDatabaseLoader dbloader )
+	{
+		for ( Iterator<PRSSliceInfo> iter = this.loadingSlices.iterator(); iter.hasNext(); )
+		{
+			PRSSliceInfo slice = iter.next();
+
+			if ( !slice.isEmpty() && (slice.getLoader() == dbloader) )
+			{
+				slice.setComplete();
+				iter.remove();
+			}
+		}
+	}
+
+	public SliceKey getSliceKey( Object[] row )
+	{
+		return (canFilter())
+				? new SliceKey( getFilterValues( row ) )
+				: SliceKey.EMPTY;
+	}
+
+	private String[] getFilterValues( Object[] row )
+	{
+		determineFilterColumnNumbers();
+
+		int count = this.query.getFilterColumnCount();
+
+		String[] filterValues = new String[ count ];
+
+		for ( int ii = 0; ii < count; ++ii )
+		{
+			int rowidx = this.filterColNumbers[ ii ] - 1;
+
+			Object obj = row[ rowidx ];
+
+			String value;
+
+			if ( obj instanceof String )
+			{
+				value = (String)obj;
+			}
+			else
+			{
+				value = (obj != null)
+						? obj.toString()
+						: StringCache.EMPTY;
+			}
+
+			filterValues[ ii ] = value.trim();
+		}
+
+		return filterValues;
+	}
+
+	private void startSlice( PRSSliceInfo slice )
+	{
+		if ( PRSDebug.noFileCache )
+		{
+			return;
+		}
+
+		// TODO is there any housekeeping to do here?
+	}
+
+	public boolean hasAlreadyCached( SliceKey slicekey )
+	{
+		if ( this.hasUpfrontQueryExecuted )
+		{
+			return true;
+		}
+
+		return !slicekey.isEmpty() //
+				&& this.sliceMap.containsKey( slicekey );
+	}
+
+	public boolean hasFilteredContent()
+	{
+		return !this.hasUpfrontQueryExecuted && !this.sliceMap.isEmpty();
+	}
+
+	public SliceKey[] getCachedFilters()
+	{
+		return this.sliceMap.keySet().toArray( new SliceKey[ 0 ] );
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PRSSliceInfo.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PRSSliceInfo.java
new file mode 100644
index 0000000..12955dc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PRSSliceInfo.java
@@ -0,0 +1,541 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.LineNumberReader;
+import java.io.PrintWriter;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import org.eclipse.datatools.enablement.ibm.IBMPluginActivator;
+import org.eclipse.datatools.enablement.ibm.catalog.util.CatalogLoadUtil;
+
+public class PRSSliceInfo
+{
+	private static int writeRowCount = 0;
+	private static int readRowCount = 0;
+	private int reloadCount = 0;
+
+	private static int nextSerialNumber = 0;
+
+	private int serialNumber;
+	private final PRSQueryInfo qinfo;
+	private final SliceKey slicekey;
+	private long byteOffset = -1L; // TODO approximate?
+	private int rowOffset = -1;
+	private final List<Object[]> rowBuffer = new ArrayList<Object[]>();
+	private boolean complete = false;
+	private int size = -1;
+
+	private boolean needsFlush = true;
+	private PRSDatabaseLoader dbloader;
+
+	public PRSSliceInfo( PRSQueryInfo qinfo, SliceKey slicekey )
+	{
+		this.serialNumber = nextSerialNumber++;
+		this.qinfo = qinfo;
+		this.slicekey = slicekey;
+	}
+
+	public int getSerialNumber()
+	{
+		return this.serialNumber;
+	}
+
+	public void setSerialNumber( int serialNumber )
+	{
+		this.serialNumber = serialNumber;
+
+		if ( serialNumber >= nextSerialNumber )
+		{
+			nextSerialNumber = serialNumber + 1;
+		}
+	}
+
+	public void setLoader( PRSDatabaseLoader dbloader )
+	{
+		if ( (this.dbloader == null) && this.rowBuffer.isEmpty() )
+		{
+			this.dbloader = dbloader;
+		}
+	}
+
+	public PRSDatabaseLoader getLoader()
+	{
+		return this.dbloader;
+	}
+
+	public static PRSSliceInfo loadSavedSlice( PRSQueryInfo qinfo, String line )
+	{
+		StringTokenizer toker = new StringTokenizer( line, "|" ); //$NON-NLS-1$
+
+		int serialNumber = PRSPersistenceUtility.getIntToken( toker );
+		long byteOffset = PRSPersistenceUtility.getLongToken( toker );
+		int rowOffset = PRSPersistenceUtility.getIntToken( toker );
+		int size = PRSPersistenceUtility.getIntToken( toker );
+		String keystr = PRSPersistenceUtility.getStringToken( toker );
+
+		SliceKey slicekey = new SliceKey( SliceKey.extractFilterValues( keystr ) );
+
+		PRSSliceInfo slice = new PRSSliceInfo( qinfo, slicekey );
+
+		slice.setSerialNumber( serialNumber );
+		slice.byteOffset = byteOffset;
+		slice.rowOffset = rowOffset;
+		slice.size = size;
+
+		slice.needsFlush = false;
+
+		return slice;
+	}
+
+	public PRSQueryInfo getQueryInfo()
+	{
+		return this.qinfo;
+	}
+
+	public SliceKey getSliceKey()
+	{
+		return this.slicekey;
+	}
+
+	public long getDataOffset()
+	{
+		return this.byteOffset;
+	}
+
+	public void setDataOffset( long offset )
+	{
+		this.byteOffset = offset;
+	}
+
+	public boolean isEmpty()
+	{
+		return size() == 0;
+	}
+
+	public boolean isComplete()
+	{
+		synchronized (this.rowBuffer)
+		{
+			return this.complete;
+		}
+	}
+
+	public void setComplete()
+	{
+		synchronized (this.rowBuffer)
+		{
+			this.complete = true;
+			setLoader( null );
+
+			this.size = this.rowBuffer.size();
+		}
+	}
+
+	public void waitUntilComplete()
+	{
+		while ( !isComplete() )
+		{
+			waitForRow();
+		}
+	}
+
+	public void finish()
+	{
+		setComplete();
+
+		if ( size() == 0 )
+		{
+			this.byteOffset = 0L;
+			this.rowOffset = 0;
+			this.needsFlush = false;
+		}
+		else
+		{
+			flushSliceData();
+		}
+	}
+
+	public int size()
+	{
+		synchronized (this.rowBuffer)
+		{
+			if ( this.size < 0 )
+			{
+				this.size = this.rowBuffer.size();
+			}
+
+			return this.size;
+		}
+	}
+
+	public void addRow( Object[] row )
+	{
+		if ( isComplete() || (this.dbloader == null) )
+		{
+			// System.out.println( //
+			// "ERROR! adding row to slice without dbloader set!" );
+			return;
+		}
+
+		synchronized (this.rowBuffer)
+		{
+			this.rowBuffer.add( row );
+			this.size = -1;
+
+			this.needsFlush = true;
+		}
+	}
+
+	public void waitForRow()
+	{
+		waitForRow( size() + 1 );
+	}
+
+	public void waitForRow( int rowRequired )
+	{
+		while ( !isComplete() && (rowRequired > size()) )
+		{
+			// TODO GLD use wait() and notify() to synchronize with data source
+			try
+			{
+				Thread.sleep( 100 );
+			}
+			catch (InterruptedException e)
+			{
+				// whatever
+			}
+		}
+	}
+
+	public Object getCurrentValue( int rownum, int index ) throws SQLException
+	{
+		if ( (index < 1) || (index > this.qinfo.getMetadata().getColumnCount()) )
+		{
+			throw new SQLException( //
+					String.format( PersistentResultSet.ERR_COL_NUM, //
+							new Object[] {
+								Integer.valueOf( index )
+							} ) );
+		}
+
+		Object[] row = getRow( rownum );
+
+		if ( row == null )
+		{
+			throw new SQLException( PersistentResultSet.ERR_NO_ROW + " " + rownum ); //$NON-NLS-1$
+		}
+
+		return row[ index - 1 ];
+	}
+
+	public Object[] getRow( int index )
+	{
+		if ( index < 1 )
+		{
+			return null;
+		}
+
+		synchronized (this.rowBuffer)
+		{
+			if ( this.rowBuffer.isEmpty() && (this.size > 0) )
+			{
+				reloadRowData();
+			}
+		}
+
+		waitForRow( index );
+
+		synchronized (this.rowBuffer)
+		{
+			return (index - 1 < size())
+					? this.rowBuffer.get( index - 1 )
+					: null;
+		}
+	}
+
+	private void flushSliceData()
+	{
+		if ( !this.needsFlush || PRSDebug.noFileCache || !PRSDebug.enableFileCache )
+		{
+			return;
+		}
+
+		if ( PRSDebug.traceQueries )
+		{
+			writeRowCount += this.rowBuffer.size();
+			System.out.println( "Flushing slice q" + this.qinfo.getId() ); //$NON-NLS-1$
+			System.out.println( "  " + this.rowBuffer.size() + " rows" //$NON-NLS-1$ //$NON-NLS-2$
+					+ " total r=" + readRowCount + " w=" + writeRowCount ); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+
+		synchronized (this.rowBuffer)
+		{
+			if ( !this.rowBuffer.isEmpty() )
+			{
+				if ( this.byteOffset < 0 )
+				{
+					File dfile = this.qinfo.getDataFile();
+
+					this.byteOffset = dfile.length();
+				}
+
+				if ( this.rowOffset < 0 )
+				{
+					this.rowOffset = this.qinfo.getNextDataFileRowOffset();
+				}
+
+				PrintWriter pw = getDataFileWriter();
+				if (pw == null) {
+					needsFlush = false;
+					return;
+				}
+
+				for ( Object[] row : this.rowBuffer )
+				{
+					pw.println( rowToPrintString( row ) );
+				}
+
+				CatalogLoadUtil.safeClose( pw );
+			}
+
+			this.needsFlush = false;
+		}
+	}
+
+	public void unloadRowData()
+	{
+		synchronized (this.rowBuffer)
+		{
+			flushSliceData();
+
+			if ( PRSDebug.enableFileCache )
+			{
+				this.rowBuffer.clear();
+			}
+		}
+	}
+
+	private void reloadRowData()
+	{
+		if ( this.size <= 0 )
+		{
+			return;
+		}
+
+		if ( !PRSDebug.enableFileCache )
+		{
+			if ( PRSDebug.traceQueries )
+			{
+				System.out.println( " ERROR! Can't reload slice when file caching is disabled!" ); //$NON-NLS-1$
+			}
+
+			return;
+		}
+
+		if ( PRSDebug.traceQueries )
+		{
+			readRowCount += this.size;
+			++this.reloadCount;
+			System.out.println( "Reloading slice q" + this.qinfo.getId() ); //$NON-NLS-1$
+			System.out.println( "  " + size + " rows" // //$NON-NLS-1$ //$NON-NLS-2$
+					+ " total r=" + readRowCount + " w=" + writeRowCount ); //$NON-NLS-1$ //$NON-NLS-2$
+			System.out.println( "  " + this.reloadCount + " reloads for this slice" ); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+
+		if ( !this.rowBuffer.isEmpty() )
+		{
+			if ( this.needsFlush )
+			{
+				// DataToolsPlugin.log( new SQLException(
+				// "Attempted reload of dirty Slice" ) );
+
+				return;
+			}
+
+			this.rowBuffer.clear();
+		}
+
+		File sfile = this.qinfo.getDataFile();
+
+		if ( (sfile == null) || !sfile.exists() || !sfile.canRead() )
+		{
+			return;
+		}
+
+		LineNumberReader lr = null;
+
+		try
+		{
+			lr = new LineNumberReader( new FileReader( sfile ) );
+
+			int count = this.size;
+
+			for ( String line = seekFirstRow( lr ); (count > 0) && (line != null); --count )
+			{
+				Object[] row = printStringToRow( line );
+
+				if ( row == null )
+				{
+					break;
+				}
+
+				this.rowBuffer.add( row );
+
+				line = lr.readLine();
+			}
+		}
+		catch (Exception e)
+		{
+			IBMPluginActivator.log( e );
+		}
+		finally
+		{
+			CatalogLoadUtil.safeClose( lr );
+		}
+
+		if ( this.rowBuffer.size() != this.size )
+		{
+			// int oldsize = this.size;
+			this.size = this.rowBuffer.size();
+
+			// DataToolsPlugin.log( //
+			// new SQLException( "Row count invalid on reload Slice (" //
+			// + "remembered=" + oldsize + " actual=" + this.size ) );
+		}
+
+		this.needsFlush = false;
+	}
+
+	private String seekFirstRow( LineNumberReader lr ) throws IOException
+	{
+		if ( this.byteOffset > 0 )
+		{
+			lr.skip( this.byteOffset );
+		}
+
+		for ( ;; )
+		{
+			String line = lr.readLine();
+
+			if ( line == null )
+			{
+				return null;
+			}
+
+			StringTokenizer st = new StringTokenizer( line, "|" ); //$NON-NLS-1$
+
+			int rownum = PRSPersistenceUtility.getIntToken( st );
+
+			if ( rownum > this.rowOffset )
+			{
+				return null;
+			}
+
+			if ( rownum == this.rowOffset )
+			{
+				return line;
+			}
+		}
+	}
+
+	public void save( PrintWriter pw )
+	{
+		pw.println( toPrintString() );
+	}
+
+	public String toPrintString()
+	{
+		StringBuilder sb = new StringBuilder();
+
+		if ( this.byteOffset < 0L )
+		{
+			this.byteOffset = 0L;
+		}
+
+		if ( this.rowOffset < 0 )
+		{
+			this.rowOffset = 0;
+		}
+
+		PRSPersistenceUtility.append( sb, this.serialNumber );
+		PRSPersistenceUtility.append( sb, this.byteOffset );
+		PRSPersistenceUtility.append( sb, this.rowOffset );
+		PRSPersistenceUtility.append( sb, size() );
+		PRSPersistenceUtility.append( sb, getSliceKey().toString() );
+
+		return sb.toString();
+	}
+
+	public String rowToPrintString( Object[] row )
+	{
+		int numcols = 0;
+
+		try
+		{
+			numcols = this.qinfo.getMetadata().getColumnCount();
+		}
+		catch (SQLException e)
+		{
+			IBMPluginActivator.log( e );
+		}
+
+		StringBuilder sb = new StringBuilder();
+
+		PRSPersistenceUtility.append( sb, this.qinfo.nextDataFileRowOffset() );
+
+		for ( int ii = 0; ii < numcols; ++ii )
+		{
+			PRSPersistenceUtility.append( sb, row[ ii ] );
+		}
+
+		return sb.toString();
+	}
+
+	public Object[] printStringToRow( String s )
+	{
+		int numcols = 0;
+
+		try
+		{
+			numcols = this.qinfo.getMetadata().getColumnCount();
+		}
+		catch (SQLException e)
+		{
+			IBMPluginActivator.log( e );
+		}
+
+		Object[] row = new Object[ numcols ];
+
+		StringTokenizer st = new StringTokenizer( s, "|" ); //$NON-NLS-1$
+
+		// ignore value int rownum =
+		PRSPersistenceUtility.getIntToken( st );
+
+		for ( int ii = 0; ii < numcols; ++ii )
+		{
+			row[ ii ] = PRSPersistenceUtility.getToken( st );
+		}
+
+		return row;
+	}
+
+	public PrintWriter getDataFileWriter()
+	{
+		return PRSPersistenceUtility.openFileForAppend( this.qinfo.getDataFile() );
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PersistentQueryCache.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PersistentQueryCache.java
new file mode 100644
index 0000000..914a9f0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PersistentQueryCache.java
@@ -0,0 +1,604 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.LineNumberReader;
+import java.io.PrintWriter;
+import java.lang.ref.WeakReference;
+import java.sql.Connection;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.ConnectEvent;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IManagedConnection;
+import org.eclipse.datatools.connectivity.IManagedConnectionListener;
+import org.eclipse.datatools.connectivity.sqm.core.connection.ConnectionInfo;
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentService;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.DatabaseConnectionRegistry;
+import org.eclipse.datatools.connectivity.sqm.internal.core.util.ConnectionUtil;
+import org.eclipse.datatools.enablement.ibm.IBMPluginActivator;
+import org.eclipse.datatools.enablement.ibm.catalog.util.CatalogLoadUtil;
+import org.eclipse.datatools.enablement.ibm.catalog.util.CatalogObjectEvent;
+import org.eclipse.datatools.enablement.ibm.catalog.util.ICatalogObjectEventListener;
+import org.eclipse.datatools.enablement.ibm.catalog.util.ICatalogQuery;
+import org.eclipse.datatools.enablement.ibm.catalog.util.CatalogObjectEvent.EVENT_TYPE;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.emf.ecore.EObject;
+
+public class PersistentQueryCache
+{
+	private static final String METADATA_VERSION = "MD01"; //$NON-NLS-1$
+
+	private static final String LOCALHOST = "localhost"; //$NON-NLS-1$
+
+	private static List<PersistentQueryCache> activeCaches = null;
+	private static int[] cacheLock = new int[ 0 ];
+
+	private final Database database;
+	private File cacheFolder;
+
+	private final List<PRSQueryInfo> queries = new ArrayList<PRSQueryInfo>();
+	private final boolean[] queriesLocked = new boolean[] {
+		false
+	};
+
+	private ConnectionCloseListener connectionCloseListener = null;
+	private ICatalogObjectEventListener refreshListener = null;
+
+	public static PersistentQueryCache getQueryCache( Database db )
+	{
+		synchronized (cacheLock)
+		{
+			if ( activeCaches == null )
+			{
+				activeCaches = new ArrayList<PersistentQueryCache>();
+
+				initializeDiskCache();
+			}
+
+			for ( PersistentQueryCache qcache : activeCaches )
+			{
+				if ( qcache == null //
+						|| qcache.database == null //
+						|| db == null )
+				{
+					continue;
+				}
+				
+				if ( qcache.database.equals( db ) )
+				{
+					return qcache;
+				}
+			}
+		}
+
+		return new PersistentQueryCache( db );
+	}
+
+	private PersistentQueryCache( Database db )
+	{
+		this.database = db;
+			
+		synchronized (cacheLock)
+		{
+			activeCaches.add( this );
+		}
+
+		this.refreshListener = new ICatalogObjectEventListener()
+		{
+			@Override
+			public void notifyChanged( CatalogObjectEvent event )
+			{
+				if ( event.type == EVENT_TYPE.ELEMENT_REFRESH )
+				{
+					respondToRefresh( event.element );
+				}
+			}
+		};
+
+		RefreshEventManager.getInstance().addCatalogObjectEventListener( //
+				null, this.refreshListener );
+
+		this.connectionCloseListener = new ConnectionCloseListener();
+
+		initCacheFolder();
+	}
+
+	private void releaseResources()
+	{
+		// save();
+		purge();
+
+		synchronized (cacheLock)
+		{
+			activeCaches.remove( this );
+		}
+
+		this.connectionCloseListener = null;
+
+		RefreshEventManager.getInstance().removeCatalogObjectEventListener( //
+				null, this.refreshListener );
+		this.refreshListener = null;
+	}
+
+	private void initCacheFolder()
+	{
+		if ( PRSDebug.noFileCache || (this.cacheFolder != null) )
+		{
+			return;
+		}
+
+		File cachedir = generateUniqueCacheFolder();
+
+		if ( cachedir != null )
+		{
+			if ( !cachedir.exists() )
+			{
+				if ( !cachedir.mkdirs() )
+				{
+					cachedir = null;
+				}
+			}
+			else
+			{
+				this.cacheFolder = cachedir;
+
+				load();
+			}
+		}
+
+		this.cacheFolder = cachedir;
+	}
+
+	private File generateUniqueCacheFolder()
+	{
+		if ( this.database == null )
+		{
+			return null;
+		}
+
+		File cacheRoot = getQueryRootFolder();
+		if ( (cacheRoot == null) || !cacheRoot.isDirectory() )
+		{
+			return null;
+		}
+
+		String name = "";
+		IConnectionProfile profile = null;
+		
+		ConnectionInfo connectionInfo = DatabaseConnectionRegistry.getInstance().getConnectionForDatabase(database);
+		if (connectionInfo != null) {
+			profile = connectionInfo.getConnectionProfile();
+			name = profile.getName();
+		} else {
+			name = database.getName();
+		}
+			
+		String dirname = getHostName(profile) + "_" + name;
+		File cachedir = new File( cacheRoot, dirname );
+
+		return cachedir;
+	}
+	
+	private static String getHostName(IConnectionProfile cp)
+	{
+		if ( cp == null )
+		{
+			return LOCALHOST;
+		}
+
+		Properties properties = cp.getProperties( cp.getProviderId() );
+		String URL = properties.getProperty( "org.eclipse.datatools.connectivity.db.URL" ); //$NON-NLS-1$
+
+		int hostStr = URL.indexOf( "://" ); //$NON-NLS-1$
+
+		if ( hostStr < 0 )
+		{
+			return LOCALHOST;
+		}
+
+		// URL is of format jdbc:db2://localhost:port/...
+		hostStr += 3;
+
+		int hostEnd = URL.indexOf( ":", hostStr ); //$NON-NLS-1$
+
+		return (hostEnd > hostStr)
+				? URL.substring( hostStr, hostEnd )
+				: URL.substring( hostStr );
+	}
+
+	public Database getDatabase()
+	{
+		return this.database;
+	}
+
+	public File getCacheFolder()
+	{
+		return this.cacheFolder;
+	}
+
+	private static File getQueryRootFolder()
+	{
+		return null;
+	}
+
+	/** Create the cache (all databases). Purge data if it already exists */
+	private static void initializeDiskCache()
+	{
+		File cacheRoot = getQueryRootFolder();
+		if ( cacheRoot == null )
+		{
+			return;
+		}
+
+		if ( !cacheRoot.exists() )
+		{
+			if ( !cacheRoot.mkdirs() )
+			{
+				// TODO error
+				return;
+			}
+		}
+		else if ( cacheRoot.isDirectory() )
+		{
+			// If reuse of cache data is implemented, we don't want this
+			purgeAll();
+		}
+	}
+
+	public static void resetQuery( Database db, ICatalogQuery query )
+	{
+		PersistentQueryCache cache = getQueryCache( db );
+
+		PRSQueryInfo qinfo = cache.getQueryInfo( query );
+
+		if ( (qinfo != null) && qinfo.isComplete() )
+		{
+			qinfo.reset( query );
+		}
+	}
+
+	/** Purge the entire cache (all databases) */
+	private static void purgeAll()
+	{
+		File cacheRoot = getQueryRootFolder();
+		if ( (cacheRoot == null) || !cacheRoot.isDirectory() )
+		{
+			return;
+		}
+
+		for ( File cachedir : cacheRoot.listFiles() )
+		{
+			if ( cachedir.isDirectory() )
+			{
+				for ( File file : cachedir.listFiles() )
+				{
+					file.delete();
+				}
+
+				cachedir.delete();
+			}
+		}
+	}
+
+	/** Purge the cache for the associated database */
+	public void purge()
+	{
+		synchronized (this.queries)
+		{
+			this.queries.clear();
+		}
+		
+		if ( this.cacheFolder == null )
+		{
+			return;
+		}
+
+		for ( File file : this.cacheFolder.listFiles() )
+		{
+			file.delete();
+		}
+	}
+
+	public PRSQueryInfo getQueryInfo( ICatalogQuery query )
+	{
+		String upfrontQueryText = query.generateUpFrontQuery( this.database );
+
+		if ( upfrontQueryText == null )
+		{
+			return null;
+		}
+
+		synchronized (this.queries)
+		{
+			for ( int ii = this.queries.size() - 1; ii >= 0; --ii )
+			{
+				PRSQueryInfo qinfo = this.queries.get( ii );
+
+				if ( upfrontQueryText.equals( qinfo.getUpfrontQueryText() ) )
+				{
+					return qinfo;
+				}
+			}
+		}
+
+		return null;
+	}
+
+	private PRSQueryInfo findOrCreateQueryInfo( ICatalogQuery query )
+	{
+		PRSQueryInfo qinfo = getQueryInfo( query );
+
+		if ( qinfo == null )
+		{
+			qinfo = createQueryInfo( query );
+		}
+
+		return qinfo;
+	}
+
+	private PRSQueryInfo createQueryInfo( ICatalogQuery query )
+	{
+		synchronized (this.queries)
+		{
+			int id = this.queries.size();
+
+			PRSQueryInfo qinfo = new PRSQueryInfo( this, id, query );
+			registerQueryInfo( qinfo );
+
+			return qinfo;
+		}
+	}
+
+	public PRSSliceInfo getSlice( ICatalogQuery query, Connection conn )
+	{
+		PRSQueryInfo qinfo = findOrCreateQueryInfo( query );
+
+		return qinfo.getSlice( query, conn );
+	}
+
+	public void registerQueryInfo( PRSQueryInfo qinfo )
+	{
+		synchronized (this.queries)
+		{
+			this.queries.add( qinfo );
+
+			saveQueries();
+		}
+	}
+
+	public void save()
+	{
+		saveQueries();
+	}
+
+	public void load()
+	{
+		loadQueries();
+	}
+
+	public void saveQueries()
+	{
+		if (PRSDebug.noFileCache || getCacheFolder() == null) {
+			return;
+		}
+
+		if ( this.queriesLocked[ 0 ] )
+		{
+			return;
+		}
+
+		this.queriesLocked[ 0 ] = true;
+
+		PrintWriter pw = null;
+
+		try
+		{
+			pw = PRSPersistenceUtility.openFileForCreate( getQueriesFile() );
+			if (pw == null) {
+				return;
+			}
+
+			synchronized (this.queries)
+			{
+				pw.println( METADATA_VERSION );
+
+				for ( PRSQueryInfo qinfo : this.queries )
+				{
+					pw.println( qinfo.toPrintString() );
+				}
+			}
+		}
+		finally
+		{
+			if (pw != null) {
+				CatalogLoadUtil.safeClose( pw );
+			}
+
+			this.queriesLocked[ 0 ] = false;
+		}
+	}
+
+	public void loadQueries()
+	{
+		if ( PRSDebug.noFileCache )
+		{
+			return;
+		}
+
+		if ( this.queriesLocked[ 0 ] )
+		{
+			return;
+		}
+
+		File qfile = getQueriesFile();
+
+		if ( (qfile == null) || !qfile.isFile() || !qfile.canRead() )
+		{
+			return;
+		}
+
+		this.queriesLocked[ 0 ] = true;
+
+		LineNumberReader lnr = null;
+
+		try
+		{
+			lnr = PRSPersistenceUtility.openFileForRead( qfile );
+			if ( lnr == null )
+			{
+				return;
+			}
+
+			synchronized (this.queries)
+			{
+				String line = lnr.readLine();
+
+				if ( !METADATA_VERSION.equals( line ) )
+				{
+					CatalogLoadUtil.safeClose( lnr );
+					lnr = null;
+
+					purge();
+
+					return;
+				}
+
+				for ( int ii = 0;; ++ii )
+				{
+					line = lnr.readLine();
+					if ( line == null )
+					{
+						break;
+					}
+
+					PRSQueryInfo.loadSavedQuery( this, line );
+				}
+			}
+		}
+		catch (IOException e)
+		{
+			IBMPluginActivator.log( e );
+		}
+		finally
+		{
+			CatalogLoadUtil.safeClose( lnr );
+
+			this.queriesLocked[ 0 ] = false;
+		}
+	}
+
+	public File getQueriesFile()
+	{
+		String name = "queries.txt"; //$NON-NLS-1$
+
+		return new File( getCacheFolder(), name );
+	}
+
+	private void respondToRefresh( ICatalogObject catalogObject )
+	{
+		ContainmentService cs = IBMPluginActivator.getInstance().getContainmentService();
+
+		if ( !(catalogObject instanceof EObject) //
+				|| (getDatabase() != cs.getRootElement( (EObject)catalogObject )) )
+		{
+			return;
+		}
+
+		purge();
+	}
+
+	private class ConnectionCloseListener implements IManagedConnectionListener
+	{
+		private IConnectionProfile profile;
+		private WeakReference<IManagedConnection> conn;
+
+		public ConnectionCloseListener()
+		{
+			ConnectionInfo connInfo = DatabaseConnectionRegistry.getInstance().getConnectionForDatabase( //
+					// (PersistentQueryCache.this.dbRef != null)
+					// ? PersistentQueryCache.this.dbRef.get()
+					// : null );
+					database );
+
+			if ( connInfo == null )
+			{
+				return;
+			}
+
+			this.profile = connInfo.getConnectionProfile();
+			if ( this.profile == null )
+			{
+				return;
+			}
+
+			IManagedConnection mc = this.profile.getManagedConnection( ConnectionUtil.CONNECTION_TYPE );
+			if ( mc == null )
+			{
+				return;
+			}
+
+			this.conn = new WeakReference<IManagedConnection>( mc );
+
+			mc.addConnectionListener( this );
+		}
+
+		public boolean okToClose( ConnectEvent event )
+		{
+			return true;
+		}
+
+		public void closed( ConnectEvent event )
+		{
+			IConnectionProfile eventProfile = event.getConnectionProfile();
+
+			if ( (eventProfile == null) || (this.profile == null) //
+					|| !eventProfile.getName().equals( this.profile.getName() ) )
+			{
+				return;
+			}
+
+			IManagedConnection c = this.conn.get();
+
+			if ( c != null )
+			{
+				c.removeConnectionListener( this );
+			}
+
+			this.profile = null;
+
+			// if ( flushOnConnectionClose )
+			{
+				releaseResources();
+			}
+		}
+
+		public void aboutToClose( ConnectEvent event )
+		{
+			// do nothing
+		}
+
+		public void modified( ConnectEvent event )
+		{
+			// do nothing
+		}
+
+		public void opened( ConnectEvent event )
+		{
+			// do nothing
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PersistentResultSet.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PersistentResultSet.java
new file mode 100644
index 0000000..82dcf51
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PersistentResultSet.java
@@ -0,0 +1,351 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+
+import org.eclipse.datatools.enablement.ibm.catalog.util.ICatalogQuery;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+/** Preserves the contents of a JDBC ResultSet after it is closed/destroyed */
+public class PersistentResultSet extends PersistentResultSetAdapter
+{
+	public static final String ERR_MOVE = "Cannot move cursor to the specified position"; //$NON-NLS-1$
+	public static final String ERR_RS_CLOSED = "ResultSet is closed"; //$NON-NLS-1$
+	public static final String ERR_NO_ROW = "No current row"; //$NON-NLS-1$
+	public static final String ERR_COL_NUM = "Column number %d is out of bounds"; //$NON-NLS-1$
+
+	private Database database;
+	private PersistentQueryCache cache;
+	private PRSSliceInfo slice;
+
+	private ICatalogQuery query;
+	private Connection conn;
+
+	/** One-based current row number */
+	private int currow;
+
+//<bgp	public PersistentResultSet( //
+//			Database database, String context, Connection conn, //
+//			String query )
+//	{
+//		this( database, context, conn, //
+//				GenericCatalogQuery.getQuery( query ) );
+//bgp>	}
+
+//<bgp	public PersistentResultSet( //
+//			Database database, String context, Connection conn, //
+//			String query, String[] filterColumns, String[] filterValues, String orderQuery )
+//	{
+//		this( database, context, conn, //
+//				GenericCatalogQuery.getQuery( //
+//						query, filterColumns, filterValues, orderQuery ) );
+//bgp>	}
+
+	public PersistentResultSet( //
+			Database database, String context, Connection conn, //
+			ICatalogQuery query )
+	{
+		query.setContext( context );
+
+		this.database = database;
+		this.cache = PersistentQueryCache.getQueryCache( this.database );
+		this.slice = null;
+
+		this.query = query;
+		this.conn = conn;
+
+		this.currow = 0;
+	}
+
+	private void createSlice()
+	{
+		if ( (this.slice == null) && (this.query != null) && (this.conn != null) )
+		{
+			this.slice = this.cache.getSlice( this.query, this.conn );
+			this.query = null;
+			this.conn = null;
+		}
+	}
+
+	private void checkNotClosed() throws SQLException
+	{
+		if ( (this.slice != null) //
+				&& (this.slice.getQueryInfo() != null) //
+				&& (this.slice.getQueryInfo().getException() != null) )
+		{
+			throw this.slice.getQueryInfo().getException();
+		}
+
+		if ( isClosed() )
+		{
+			throw new SQLException( ERR_RS_CLOSED );
+		}
+	}
+
+	private boolean safeIsClosed()
+	{
+		try
+		{
+			return isClosed();
+		}
+		catch (SQLException e)
+		{
+			return true;
+		}
+	}
+
+	public int getRowCount()
+	{
+		completeQueryProcessing();
+
+		return this.slice.size();
+	}
+
+	/** Ensure that the current slice has finished loading */
+	public void completeQueryProcessing()
+	{
+		if ( safeIsClosed() )
+		{
+			return;
+		}
+
+		this.slice.waitUntilComplete();
+	}
+
+	@Override
+	public int findColumn( String columnName ) throws SQLException
+	{
+		return ((PRSMetadata)getMetaData()).findColumn( columnName );
+	}
+
+	protected Object getCurrentValue( int index ) throws SQLException
+	{
+		checkNotClosed();
+
+		return this.slice.getCurrentValue( this.currow, index );
+	}
+
+	@Override
+	public int getType() throws SQLException
+	{
+		checkNotClosed();
+
+		return ResultSet.TYPE_FORWARD_ONLY;
+	}
+
+	@Override
+	public ResultSetMetaData getMetaData() throws SQLException
+	{
+		checkNotClosed();
+
+		return this.slice.getQueryInfo().getMetadata();
+	}
+
+	@Override
+	public boolean isClosed() throws SQLException
+	{
+		createSlice();
+
+		return this.slice == null;
+	}
+
+	@Override
+	public void close() throws SQLException
+	{
+		if ( isClosed() )
+		{
+			return;
+		}
+
+		this.slice.unloadRowData();
+
+		this.slice = null;
+		this.database = null;
+		this.currow = 0;
+	}
+
+	@Override
+	public int getRow() throws SQLException
+	{
+		if ( isBeforeFirst() || isAfterLast() )
+		{
+			return 0;
+		}
+
+		return this.currow;
+	}
+
+	@Override
+	public boolean isAfterLast() throws SQLException
+	{
+		for ( ;; )
+		{
+			checkNotClosed();
+
+			int size = this.slice.size();
+
+			if ( (size > 0) && (this.currow < size) )
+			{
+				return false;
+			}
+
+			if ( this.currow > size )
+			{
+				return true;
+			}
+
+			if ( this.slice.isComplete() )
+			{
+				return false;
+			}
+
+			this.slice.waitForRow();
+		}
+	}
+
+	@Override
+	public boolean isBeforeFirst() throws SQLException
+	{
+		checkNotClosed();
+
+		return this.currow == 0;
+	}
+
+	@Override
+	public boolean isFirst() throws SQLException
+	{
+		checkNotClosed();
+
+		return this.currow == 1;
+	}
+
+	@Override
+	public boolean isLast() throws SQLException
+	{
+		for ( ;; )
+		{
+			checkNotClosed();
+
+			if ( this.slice.isComplete() )
+			{
+				return this.currow == this.slice.size();
+			}
+
+			this.slice.waitForRow();
+		}
+	}
+
+	@Override
+	public boolean last() throws SQLException
+	{
+		checkNotClosed();
+
+		this.slice.waitUntilComplete();
+
+		if ( this.slice.isEmpty() )
+		{
+			return false;
+		}
+
+		this.currow = this.slice.size();
+
+		return true;
+	}
+
+	@Override
+	public boolean absolute( int row ) throws SQLException
+	{
+		checkNotClosed();
+
+		if ( this.currow == row )
+		{
+			return (row != 0) && !isAfterLast();
+		}
+
+		switch (getFetchDirection())
+		{
+			case ResultSet.FETCH_FORWARD:
+				if ( row < this.currow )
+				{
+					throw new SQLException( ERR_MOVE );
+				}
+				break;
+
+			case ResultSet.FETCH_REVERSE:
+				if ( row > this.currow )
+				{
+					throw new SQLException( ERR_MOVE );
+				}
+				break;
+		}
+
+		for ( ;; )
+		{
+			checkNotClosed();
+
+			int size = this.slice.size();
+
+			if ( size >= row )
+			{
+				this.currow = row;
+
+				return true;
+			}
+
+			if ( this.slice.isComplete() )
+			{
+				if ( row > size )
+				{
+					this.currow = size + 1;
+				}
+
+				return false;
+			}
+
+			if ( PRSDebug.enableTracing )
+			{
+				PRSDebug.trace( "PRS: abs(" + row //$NON-NLS-1$
+						+ " sz=" + size //$NON-NLS-1$
+						+ ") Waiting for slice " //$NON-NLS-1$
+						+ this.slice.getSliceKey() );
+			}
+
+			this.slice.waitForRow();
+		}
+	}
+
+	@Override
+	public boolean relative( int rows ) throws SQLException
+	{
+		return absolute( this.currow + rows );
+	}
+
+	@Override
+	public void afterLast() throws SQLException
+	{
+		if ( isAfterLast() )
+		{
+			return;
+		}
+
+		absolute( this.slice.size() + 1 );
+	}
+
+	@Override
+	public void beforeFirst() throws SQLException
+	{
+		absolute( 0 );
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PersistentResultSetAdapter.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PersistentResultSetAdapter.java
new file mode 100644
index 0000000..df84061
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PersistentResultSetAdapter.java
@@ -0,0 +1,1188 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.io.InputStream;
+import java.io.Reader;
+import java.math.BigDecimal;
+import java.net.URL;
+import java.sql.Array;
+import java.sql.Blob;
+import java.sql.Clob;
+import java.sql.Date;
+import java.sql.NClob;
+import java.sql.Ref;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.RowId;
+import java.sql.SQLException;
+import java.sql.SQLWarning;
+import java.sql.SQLXML;
+import java.sql.Statement;
+import java.sql.Time;
+import java.sql.Timestamp;
+import java.util.Calendar;
+import java.util.Map;
+
+/** Empty implementation of JDBC ResultSet interface */
+public abstract class PersistentResultSetAdapter implements ResultSet
+{
+	private static final char[] HEX_CHARS = 
+    {
+        '0', '1', '2', '3', '4', '5', '6', '7',
+            '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
+    };
+	
+	public int getConcurrency() throws SQLException
+	{
+		return ResultSet.CONCUR_READ_ONLY;
+	}
+
+	public boolean first() throws SQLException
+	{
+		return absolute( 1 );
+	}
+
+	public boolean next() throws SQLException
+	{
+		return relative( 1 );
+	}
+
+	public boolean previous() throws SQLException
+	{
+		return relative( -1 );
+	}
+
+	public void moveToCurrentRow() throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public String getCursorName() throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public boolean absolute( int row ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void afterLast() throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void beforeFirst() throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void cancelRowUpdates() throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void clearWarnings() throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void close() throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void deleteRow() throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public int findColumn( String columnName ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public Array getArray( int columnIndex ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public InputStream getAsciiStream( int columnIndex ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	protected abstract Object getCurrentValue( int index ) throws SQLException;
+
+	@Override
+	public BigDecimal getBigDecimal( int columnIndex ) throws SQLException
+	{
+		Object o = getCurrentValue( columnIndex );
+
+		if ( o instanceof BigDecimal )
+		{
+			return (BigDecimal)o;
+		}
+
+		if ( o instanceof Long )
+		{
+			return new BigDecimal( ((Long)o).longValue() );
+		}
+
+		return null;
+	}
+
+	public BigDecimal getBigDecimal( int columnIndex, int scale ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public InputStream getBinaryStream( int columnIndex ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public Blob getBlob( int columnIndex ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public boolean getBoolean( int columnIndex ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public byte getByte( int columnIndex ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public byte[] getBytes( int columnIndex ) throws SQLException
+	{
+		Object o = getCurrentValue( columnIndex );
+
+		if ( o instanceof byte[] )
+		{
+			return (byte[])o;
+		}
+
+		throw new UnsupportedOperationException();
+	}
+
+	public Reader getCharacterStream( int columnIndex ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public Clob getClob( int columnIndex ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public Date getDate( int columnIndex ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public Date getDate( int columnIndex, Calendar cal ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public double getDouble( int columnIndex ) throws SQLException
+	{
+		Object o = getCurrentValue( columnIndex );
+
+		if ( o instanceof Double )
+		{
+			return ((Double)o).doubleValue();
+		}
+
+		if ( o instanceof Float )
+		{
+			return ((Float)o).doubleValue();
+		}
+
+		return 0.0d;
+	}
+
+	public int getFetchDirection() throws SQLException
+	{
+		return ResultSet.FETCH_FORWARD;
+	}
+
+	public int getFetchSize() throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public float getFloat( int columnIndex ) throws SQLException
+	{
+		Object o = getCurrentValue( columnIndex );
+
+		if ( o instanceof Float )
+		{
+			return ((Float)o).floatValue();
+		}
+
+		if ( o instanceof Double )
+		{
+			return ((Double)o).floatValue();
+		}
+
+		return 0.0f;
+	}
+
+	public int getHoldability() throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public int getInt( int columnIndex ) throws SQLException
+	{
+		Object o = getCurrentValue( columnIndex );
+
+		if ( o == null )
+		{
+			return 0;
+		}
+
+		if ( o instanceof Integer )
+		{
+			return ((Integer)o).intValue();
+		}
+
+		if ( o instanceof String )
+		{
+			return Integer.parseInt( (String)o );
+		}
+
+		if ( o instanceof Long )
+		{
+			return ((Long)o).intValue();
+		}
+
+		if ( o instanceof Short )
+		{
+			return ((Short)o).intValue();
+		}
+
+		if ( o instanceof Byte )
+		{
+			return ((Byte)o).intValue();
+		}
+
+		return 0;
+	}
+
+	@Override
+	public long getLong( int columnIndex ) throws SQLException
+	{
+		Object o = getCurrentValue( columnIndex );
+
+		if ( o instanceof Integer )
+		{
+			return ((Integer)o).longValue();
+		}
+
+		if ( o instanceof String )
+		{
+			return Long.parseLong( (String)o );
+		}
+
+		if ( o instanceof Long )
+		{
+			return ((Long)o).longValue();
+		}
+
+		if ( o instanceof Short )
+		{
+			return ((Short)o).longValue();
+		}
+
+		if ( o instanceof Byte )
+		{
+			return ((Byte)o).intValue();
+		}
+
+		return 0;
+	}
+
+	public ResultSetMetaData getMetaData() throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public Reader getNCharacterStream( int columnIndex ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public String getNString( int columnIndex ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public Object getObject( int columnIndex ) throws SQLException
+	{
+		return getCurrentValue( columnIndex );
+	}
+
+	@Override
+	public <T> T getObject( final int columnIndex, final Class<T> type ) throws SQLException
+	{
+		return type.cast( getCurrentValue( columnIndex ) );
+	}
+	
+	public Object getObject( int columnIndex, Map<String, Class<?>> map ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public Ref getRef( int columnIndex ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public int getRow() throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public short getShort( int columnIndex ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public Statement getStatement() throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public String getString( int columnIndex ) throws SQLException
+	{
+		Object curval = getCurrentValue( columnIndex );
+
+		if ( curval == null )
+		{
+			return null;
+		}
+
+		if ( curval instanceof String )
+		{
+			return (String)curval;
+		}
+		
+		if (curval instanceof byte[]) {
+			return toHexString((byte[])curval);
+		}
+
+		return curval.toString();
+	}
+
+	private static final String toHexString(byte[] bytes) 
+    {
+        StringBuilder sb = new StringBuilder();
+        
+        for (int i=0; i < bytes.length; i++)  {
+            sb.append(HEX_CHARS[(bytes[i] >> 4) & 0xf]);
+            sb.append(HEX_CHARS[bytes[i] & 0xf]);
+        }
+        
+        return sb.toString();
+    }
+	
+	public Time getTime( int columnIndex ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public Time getTime( int columnIndex, Calendar cal ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public Timestamp getTimestamp( int columnIndex ) throws SQLException
+	{
+		Object o = getCurrentValue( columnIndex );
+
+		if ( o instanceof Timestamp )
+		{
+			return (Timestamp)o;
+		}
+
+		return null;
+	}
+
+	public Timestamp getTimestamp( int columnIndex, Calendar cal ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public int getType() throws SQLException
+	{
+		return ResultSet.TYPE_SCROLL_INSENSITIVE;
+	}
+
+	public URL getURL( int columnIndex ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public InputStream getUnicodeStream( int columnIndex ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public SQLWarning getWarnings() throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void insertRow() throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public boolean isAfterLast() throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public boolean isBeforeFirst() throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public boolean isClosed() throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public boolean isFirst() throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public boolean isLast() throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public boolean last() throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void moveToInsertRow() throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void refreshRow() throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public boolean relative( int rows ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public boolean rowDeleted() throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public boolean rowInserted() throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public boolean rowUpdated() throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void setFetchDirection( int direction ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void setFetchSize( int rows ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateArray( int columnIndex, Array x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateArray( String columnName, Array x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateAsciiStream( int columnIndex, InputStream x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateAsciiStream( String columnLabel, InputStream x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateAsciiStream( int columnIndex, InputStream x, int length ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateAsciiStream( String columnName, InputStream x, int length ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateAsciiStream( int columnIndex, InputStream x, long length ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateAsciiStream( String columnLabel, InputStream x, long length ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateBigDecimal( int columnIndex, BigDecimal x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateBigDecimal( String columnName, BigDecimal x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateBinaryStream( int columnIndex, InputStream x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateBinaryStream( String columnLabel, InputStream x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateBinaryStream( int columnIndex, InputStream x, int length ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateBinaryStream( String columnName, InputStream x, int length ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateBinaryStream( int columnIndex, InputStream x, long length ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateBinaryStream( String columnLabel, InputStream x, long length ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateBlob( int columnIndex, Blob x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateBlob( String columnName, Blob x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateBlob( int columnIndex, InputStream inputStream ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateBlob( String columnLabel, InputStream inputStream ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateBlob( int columnIndex, InputStream inputStream, long length ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateBlob( String columnLabel, InputStream inputStream, long length ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateBoolean( int columnIndex, boolean x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateBoolean( String columnName, boolean x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateByte( int columnIndex, byte x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateByte( String columnName, byte x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateBytes( int columnIndex, byte[] x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateBytes( String columnName, byte[] x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateCharacterStream( int columnIndex, Reader x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateCharacterStream( String columnLabel, Reader reader ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateCharacterStream( int columnIndex, Reader x, int length ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateCharacterStream( String columnName, Reader reader, int length ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateCharacterStream( int columnIndex, Reader x, long length ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateCharacterStream( String columnLabel, Reader reader, long length ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateClob( int columnIndex, Clob x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateClob( String columnName, Clob x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateClob( int columnIndex, Reader reader ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateClob( String columnLabel, Reader reader ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateClob( int columnIndex, Reader reader, long length ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateClob( String columnLabel, Reader reader, long length ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateDate( int columnIndex, Date x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateDate( String columnName, Date x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateDouble( int columnIndex, double x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateDouble( String columnName, double x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateFloat( int columnIndex, float x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateFloat( String columnName, float x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateInt( int columnIndex, int x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateInt( String columnName, int x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateLong( int columnIndex, long x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateLong( String columnName, long x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateNCharacterStream( int columnIndex, Reader x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateNCharacterStream( String columnLabel, Reader reader ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateNCharacterStream( int columnIndex, Reader x, long length ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateNCharacterStream( String columnLabel, Reader reader, long length ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateNClob( int columnIndex, Reader reader ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateNClob( String columnLabel, Reader reader ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateNClob( int columnIndex, Reader reader, long length ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateNClob( String columnLabel, Reader reader, long length ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateNString( int columnIndex, String nString ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateNString( String columnLabel, String nString ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateNull( int columnIndex ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateNull( String columnName ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateObject( int columnIndex, Object x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateObject( String columnName, Object x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateObject( int columnIndex, Object x, int scale ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateObject( String columnName, Object x, int scale ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateRef( int columnIndex, Ref x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateRef( String columnName, Ref x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateRow() throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateShort( int columnIndex, short x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateShort( String columnName, short x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateString( int columnIndex, String x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateString( String columnName, String x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateTime( int columnIndex, Time x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateTime( String columnName, Time x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateTimestamp( int columnIndex, Timestamp x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void updateTimestamp( String columnName, Timestamp x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public boolean wasNull() throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public boolean isWrapperFor( Class<?> iface ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public <T> T unwrap( Class<T> iface ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public Array getArray( String colName ) throws SQLException
+	{
+		int index = findColumn( colName );
+		return getArray( index );
+	}
+
+	public InputStream getAsciiStream( String columnName ) throws SQLException
+	{
+		int index = findColumn( columnName );
+		return getAsciiStream( index );
+	}
+
+	public BigDecimal getBigDecimal( String columnName ) throws SQLException
+	{
+		int index = findColumn( columnName );
+		return getBigDecimal( index );
+	}
+
+	public BigDecimal getBigDecimal( String columnName, int scale ) throws SQLException
+	{
+		int index = findColumn( columnName );
+		return getBigDecimal( index );
+	}
+
+	public InputStream getBinaryStream( String columnName ) throws SQLException
+	{
+		int index = findColumn( columnName );
+		return getBinaryStream( index );
+	}
+
+	public Blob getBlob( String columnName ) throws SQLException
+	{
+		int index = findColumn( columnName );
+		return getBlob( index );
+	}
+
+	public boolean getBoolean( String columnName ) throws SQLException
+	{
+		int index = findColumn( columnName );
+		return getBoolean( index );
+	}
+
+	public byte getByte( String columnName ) throws SQLException
+	{
+		int index = findColumn( columnName );
+		return getByte( index );
+	}
+
+	public byte[] getBytes( String columnName ) throws SQLException
+	{
+		int index = findColumn( columnName );
+		return getBytes( index );
+	}
+
+	public Reader getCharacterStream( String columnName ) throws SQLException
+	{
+		int index = findColumn( columnName );
+		return getCharacterStream( index );
+	}
+
+	public Clob getClob( String columnName ) throws SQLException
+	{
+		int index = findColumn( columnName );
+		return getClob( index );
+	}
+
+	public Date getDate( String columnName ) throws SQLException
+	{
+		int index = findColumn( columnName );
+		return getDate( index );
+	}
+
+	public Date getDate( String columnName, Calendar cal ) throws SQLException
+	{
+		int index = findColumn( columnName );
+		return getDate( index, cal );
+	}
+
+	public double getDouble( String columnName ) throws SQLException
+	{
+		int index = findColumn( columnName );
+		return getDouble( index );
+	}
+
+	public float getFloat( String columnName ) throws SQLException
+	{
+		int index = findColumn( columnName );
+		return getFloat( index );
+	}
+
+	public int getInt( String columnName ) throws SQLException
+	{
+		int index = findColumn( columnName );
+		return getInt( index );
+	}
+
+	public long getLong( String columnName ) throws SQLException
+	{
+		int index = findColumn( columnName );
+		return getLong( index );
+	}
+
+	public Reader getNCharacterStream( String columnLabel ) throws SQLException
+	{
+		int index = findColumn( columnLabel );
+		return getNCharacterStream( index );
+	}
+
+	public String getNString( String columnLabel ) throws SQLException
+	{
+		int index = findColumn( columnLabel );
+		return getNString( index );
+	}
+
+	public Object getObject( String columnName ) throws SQLException
+	{
+		int index = findColumn( columnName );
+		return getObject( index );
+	}
+
+	public <T> T getObject( final String columnName, final Class<T> type ) throws SQLException
+	{
+		return type.cast( getObject( columnName ) );
+	}
+
+	public Object getObject( String columnName, Map<String, Class<?>> map ) throws SQLException
+	{
+		int index = findColumn( columnName );
+		return getObject( index );
+	}
+
+	public Ref getRef( String columnName ) throws SQLException
+	{
+		int index = findColumn( columnName );
+		return getRef( index );
+	}
+
+	public short getShort( String columnName ) throws SQLException
+	{
+		int index = findColumn( columnName );
+		return getShort( index );
+	}
+
+	public String getString( String columnName ) throws SQLException
+	{
+		int index = findColumn( columnName );
+		return getString( index );
+	}
+
+	public Time getTime( String columnName ) throws SQLException
+	{
+		int index = findColumn( columnName );
+		return getTime( index );
+	}
+
+	public Time getTime( String columnName, Calendar cal ) throws SQLException
+	{
+		int index = findColumn( columnName );
+		return getTime( index );
+	}
+
+	public Timestamp getTimestamp( String columnName ) throws SQLException
+	{
+		int index = findColumn( columnName );
+		return getTimestamp( index );
+	}
+
+	public Timestamp getTimestamp( String columnName, Calendar cal ) throws SQLException
+	{
+		int index = findColumn( columnName );
+		return getTimestamp( index, cal );
+	}
+
+	public URL getURL( String columnName ) throws SQLException
+	{
+		int index = findColumn( columnName );
+		return getURL( index );
+	}
+
+	public InputStream getUnicodeStream( String columnName ) throws SQLException
+	{
+		int index = findColumn( columnName );
+		return getUnicodeStream( index );
+	}
+
+	@Override
+	public RowId getRowId( int columnIndex ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public RowId getRowId( String columnLabel ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public void updateRowId( int columnIndex, RowId x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public void updateRowId( String columnLabel, RowId x ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public void updateNClob( int columnIndex, NClob nClob ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public void updateNClob( String columnLabel, NClob nClob ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public NClob getNClob( int columnIndex ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public NClob getNClob( String columnLabel ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public SQLXML getSQLXML( int columnIndex ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public SQLXML getSQLXML( String columnLabel ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public void updateSQLXML( int columnIndex, SQLXML xmlObject ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public void updateSQLXML( String columnLabel, SQLXML xmlObject ) throws SQLException
+	{
+		throw new UnsupportedOperationException();
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PersistentResultSetData.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PersistentResultSetData.java
new file mode 100644
index 0000000..aac89e22
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PersistentResultSetData.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+// TODO obsolete class
+public class PersistentResultSetData
+{
+	public static void trace( String s )
+	{
+		PRSDebug.trace( s );
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PostProcessingDescriptor.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PostProcessingDescriptor.java
new file mode 100644
index 0000000..ced7821
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PostProcessingDescriptor.java
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+/**
+ * 
+ * Describes a namespace post processing extension
+ * @author quyon
+ *
+ */
+public class PostProcessingDescriptor 
+{
+	private String id;
+	private String modelType;
+	private IPostprocessProvider provider;
+	
+	/**
+	 * Creates an instance of NamespacePostProcessingDescriptor
+	 * @param id the ID of the extension provider
+	 * @param type the model type this extension is for (eg, LDM)
+	 * @param provider the implementation of INamespacePostprocessProvider
+	 */
+	public PostProcessingDescriptor(String id, String type, 
+			IPostprocessProvider provider)
+	{
+		this.id = id;
+		modelType = type;
+		this.provider = provider;
+	}
+	
+	/**
+	 * Sets the ID for the extension provider
+	 * @param id ID of the extension provider
+	 */
+	public void setID(String id)
+	{
+		this.id = id;
+	}
+	
+	/**
+	 * Gets the ID of the extension provider
+	 * @return the extension provider ID
+	 */
+	public String getID()
+	{
+		return id;
+	}
+	
+	/**
+	 * Sets the model type the extension provider is meant for
+	 * @param type type of model this extension provider is for
+	 */
+	public void setModelType (String type)
+	{
+		modelType = type;
+	}
+	
+	/**
+	 * Gets the model type this extension provider is for
+	 * @return the model type
+	 */
+	public String getModelType()
+	{
+		return modelType;
+	}
+	
+	/**
+	 * Sets the INamespacePostprocessProvider
+	 * @param the INamespacePostprocessProvider implementation for namespace post processing
+	 */
+	public void setProvider(IPostprocessProvider provider)
+	{
+		this.provider = provider;
+	}
+	
+	/**
+	 * Gets the INamespacePostprocessProvider implementation
+	 * @return INamespacePostprocessProvider implementation for namespace post processing
+	 */
+	public IPostprocessProvider getProvider()
+	{
+		return provider;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PostProcessingRegistryReader.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PostProcessingRegistryReader.java
new file mode 100644
index 0000000..06598f4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/PostProcessingRegistryReader.java
@@ -0,0 +1,131 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+
+public class PostProcessingRegistryReader 
+{
+	public static final String NAMESPACE_POST_PROCESSING_EXTENSION_POINT = "com.ibm.datatools.core.postProcess"; //$NON-NLS-1$
+	public static final String NAMESPACE_POST_PROCESSING_CLASS = "class"; //$NON-NLS-1$
+	public static final String NAMESPACE_POST_PROCESSING_MODEL_TYPE = "modelType"; //$NON-NLS-1$
+	public static final String NAMESPACE_POST_PROCESSING_ID = "id"; //$NON-NLS-1$
+	public static final String NAMESPACE_POST_PROCESSING_LDM = "LDM"; //$NON-NLS-1$
+	
+	private static PostProcessingRegistryReader myInstance;
+	private List<PostProcessingDescriptor> extensionProviders;
+	
+	/**
+	 * Creates an instance of NamespacePostProcessingRegistryReader
+	 */
+	private PostProcessingRegistryReader()
+	{
+		super();
+	}
+	
+	/**
+	 * Gets an instance of NamespacePostProcessingRegistryReader
+	 * @return an instance of NamespacePostProcessingRegistryReader
+	 */
+	public synchronized static PostProcessingRegistryReader getInstance()
+	{
+		if (myInstance == null)
+		{
+			myInstance = new PostProcessingRegistryReader();
+		}
+		return myInstance;
+	}
+	
+	/**
+	 * Gets all extension providers
+	 * @return a List of extension providers
+	 */
+	public synchronized List<PostProcessingDescriptor> getExtensionProviders()
+	{
+		if (extensionProviders == null)
+		{
+			extensionProviders = new ArrayList<PostProcessingDescriptor>();
+			retrieveExtensionProviders();
+		}
+		return extensionProviders;
+	}
+	
+	/**	 
+	 * Retrieves a list of extension for namespace post processing	 
+	 */
+	private void retrieveExtensionProviders()
+	{		
+		try
+		{
+			IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry();
+			IExtensionPoint extensionPoint = extensionRegistry.getExtensionPoint(NAMESPACE_POST_PROCESSING_EXTENSION_POINT);
+			if (extensionPoint != null)
+			{
+				IExtension[] extensions = extensionPoint.getExtensions();
+				for (int i=0;i<extensions.length;i++)
+				{
+					IExtension ext = extensions[i];
+					IConfigurationElement[] configElements = ext.getConfigurationElements();
+					for (int c=0;c<configElements.length;c++)
+					{
+						String id = configElements[c].getAttribute(NAMESPACE_POST_PROCESSING_ID);
+						String modelType = configElements[c].getAttribute(NAMESPACE_POST_PROCESSING_MODEL_TYPE);
+						IPostprocessProvider provider = (IPostprocessProvider)
+							configElements[c].createExecutableExtension(NAMESPACE_POST_PROCESSING_CLASS);
+						PostProcessingDescriptor descriptor = 
+							new PostProcessingDescriptor(id,modelType, provider);
+						extensionProviders.add(descriptor);
+					}
+				}
+			}
+		}
+		catch (CoreException ex)
+		{
+			// problem with creating executable, don't add to list
+		}
+	}
+	
+	/**
+	 * Gets the executable for namespace post processing	 
+	 * @return the namespace post processing executable, or null if no matching one found.
+	 * This executable implements INamespacePostprocessProvider
+	 */
+	public IPostprocessProvider getPostProcessingExecutable()
+	{
+		IPostprocessProvider exe = null;
+		List<PostProcessingDescriptor> extensionProviders = this.getExtensionProviders();
+		if (extensionProviders != null)
+		{
+			Iterator<PostProcessingDescriptor> iter = extensionProviders.iterator();
+			while (iter.hasNext())
+			{
+				PostProcessingDescriptor desc = iter.next();
+				if (NAMESPACE_POST_PROCESSING_LDM.equalsIgnoreCase(desc.getModelType()))
+				{
+					// use the first extension provider found which supports LDM
+					exe = desc.getProvider();
+					break;
+				}
+			}
+		}
+		return exe;
+	}
+	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/QueryExecutionEngine.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/QueryExecutionEngine.java
new file mode 100644
index 0000000..6dfecba
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/QueryExecutionEngine.java
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.enablement.ibm.catalog.util.ICatalogQuery;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.emf.ecore.EObject;
+
+public class QueryExecutionEngine
+{
+	public static void realizeQueries( EObject object, ICatalogQuery[] queries )
+	{
+		if ( !(object instanceof ICatalogObject) )
+		{
+			return;
+		}
+
+		ICatalogObject catalogObject = (ICatalogObject)object;
+
+		runOrderQueries( catalogObject, queries );
+
+		Database database = catalogObject.getCatalogDatabase();
+
+		Set<QueryExecutionJob> jobs = new HashSet<QueryExecutionJob>();
+
+		for ( int i = 0; i < queries.length; i++ )
+		{
+			if ( !queries[ i ].isQueryProcessed( database ) )
+			{
+				QueryExecutionJob job = new QueryExecutionJob( //
+						"Query Execution Job", queries[ i ], catalogObject ); //$NON-NLS-1$
+
+				jobs.add( job );
+
+				if ( queries[ i ].useOnDemandQuery() )
+				{
+					job.waitUntilFinished();
+				}
+
+				job.schedule();
+			}
+		}
+
+		finishJobs( jobs );
+	}
+
+	private static void runOrderQueries( ICatalogObject object, ICatalogQuery[] queries )
+	{
+		Set<ICatalogQuery> orderQueries = new HashSet<ICatalogQuery>();
+		for ( ICatalogQuery query : queries )
+		{
+			if ( query.getOrderQuery() != null )
+			{
+				orderQueries.add( query.getOrderQuery() );
+			}
+		}
+
+		List<QueryExecutionJob> orderQueryJobs = new ArrayList<QueryExecutionJob>( orderQueries.size() );
+		for ( ICatalogQuery orderQuery : orderQueries )
+		{
+			QueryExecutionJob orderQueryJob = new QueryExecutionJob( //
+					"Query Execution Job -- OrderQuery", orderQuery, object ); //$NON-NLS-1$
+
+			// TODO GLD BUG why do we serialize order jobs?
+			// worse yet, they must all finish before we start the real query
+			orderQueryJob.waitUntilFinished();
+			orderQueryJobs.add( orderQueryJob );
+			orderQueryJob.schedule();
+		}
+
+		finishJobs( orderQueryJobs );
+	}
+
+	private static void finishJobs( Collection<QueryExecutionJob> queryJobs )
+	{
+		for ( QueryExecutionJob queryJob : queryJobs )
+		{
+			try
+			{
+				queryJob.join();
+			}
+			catch (InterruptedException e)
+			{
+				// log this
+				e.printStackTrace();
+			}
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/QueryExecutionJob.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/QueryExecutionJob.java
new file mode 100644
index 0000000..3339cf8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/QueryExecutionJob.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.enablement.ibm.catalog.util.ICatalogQuery;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+public class QueryExecutionJob extends Job 
+{
+	private ICatalogQuery query;
+	private ICatalogObject object;
+	
+	private boolean waitUntilFinished;
+	
+	public QueryExecutionJob(String name, ICatalogQuery query, ICatalogObject catalogObject) 
+	{
+		super(name);
+		setSystem(true);
+		this.query = query;
+		object = catalogObject;
+		waitUntilFinished = false;
+	}
+
+	protected IStatus run(IProgressMonitor monitor) 
+	{
+		Database database = object.getCatalogDatabase();
+		String context = "Query Execution Job";
+
+		Connection connection = object.getConnection();
+		
+		PersistentResultSet resultSet = new PersistentResultSet(database, context, connection, query);
+		try {
+			// this will trigger query execution, but we don't need to process rows here.
+			resultSet.next();
+		} catch (SQLException sqle) {
+			// let the catalog loading layer try again
+		}
+		if (waitUntilFinished) {
+			resultSet.completeQueryProcessing();
+		}
+		
+		return Status.OK_STATUS;
+	}
+	
+	public void waitUntilFinished()
+	{
+		waitUntilFinished = true;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/RefreshEventManager.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/RefreshEventManager.java
new file mode 100644
index 0000000..fadb73e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/RefreshEventManager.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.enablement.ibm.catalog.util.CatalogObjectEvent;
+import org.eclipse.datatools.enablement.ibm.catalog.util.ICatalogObjectEventListener;
+
+public class RefreshEventManager
+{
+	private static RefreshEventManager refreshEventManager;
+	private RefreshManager delegateRefreshManager = RefreshManager.getInstance();
+	
+	private HashMap<ICatalogObject, ArrayList<ICatalogObjectEventListener>> catalogObjectEventListeners;
+	private ArrayList<ICatalogObjectEventListener> globalCatalogObjectEventListeners;
+	
+	private RefreshEventManager()
+	{
+		catalogObjectEventListeners = new HashMap<ICatalogObject, ArrayList<ICatalogObjectEventListener>>();
+		globalCatalogObjectEventListeners = new ArrayList<ICatalogObjectEventListener>();
+	}
+	
+	public static RefreshEventManager getInstance()
+	{
+		if (refreshEventManager == null) {
+			refreshEventManager = new RefreshEventManager();
+		}
+		
+		return refreshEventManager;
+	}
+	
+	public void addCatalogObjectEventListener(
+			ICatalogObject interestedObject, ICatalogObjectEventListener listener)
+	{
+		if (interestedObject == null) {
+			if (!globalCatalogObjectEventListeners.contains(listener)) {
+				globalCatalogObjectEventListeners.add(listener);
+			}
+		} else {
+			if (catalogObjectEventListeners.containsKey(interestedObject)) {
+				ArrayList<ICatalogObjectEventListener> listeners = 
+					catalogObjectEventListeners.get(interestedObject);
+				if (!listeners.contains(listener)) {
+					listeners.add(listener);
+				}
+			} else {
+				ArrayList<ICatalogObjectEventListener> listeners = 
+					new ArrayList<ICatalogObjectEventListener>();
+				listeners.add(listener);
+				catalogObjectEventListeners.put(interestedObject, listeners);
+			}
+		}
+	}
+	
+	public void removeCatalogObjectEventListener(
+			ICatalogObject interestedObject, ICatalogObjectEventListener listener)
+	{
+		if (interestedObject == null) {
+			if (globalCatalogObjectEventListeners.contains(listener)) {
+				globalCatalogObjectEventListeners.remove(listener);
+			}
+		} else {
+			if (catalogObjectEventListeners.containsKey(interestedObject)) {
+				ArrayList<ICatalogObjectEventListener> listeners = 
+					catalogObjectEventListeners.get(interestedObject);
+				if (listeners.contains(listener)) {
+					listeners.remove(listener);
+				}
+			}
+		}
+	}
+	
+	public void refresh(CatalogObjectEvent event)
+	{
+		delegateRefreshManager.referesh(event.element);
+		
+		for (ICatalogObjectEventListener listener : globalCatalogObjectEventListeners) {
+			listener.notifyChanged(event);
+		}
+		
+		if (catalogObjectEventListeners.containsKey(event.element)) {
+			ArrayList<ICatalogObjectEventListener> listeners = catalogObjectEventListeners.get(event.element);
+			for (ICatalogObjectEventListener listener : listeners) {
+				listener.notifyChanged(event);
+			}
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ReuseStringBuffer.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ReuseStringBuffer.java
new file mode 100644
index 0000000..03a9624
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/ReuseStringBuffer.java
@@ -0,0 +1,1153 @@
+/*******************************************************************************
+ * Copyright (c) 2002, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.util.Stack;
+
+/**
+ * A StringBuffer with whose capacity is not reset by setLength(0)
+ * and whose char[] is copied for each toString().
+ * <p>
+ * For the toString() in StringBuffer, the char[] is not copied, so that the
+ * new String is set to use the existing char[] in the StringBuffer (including
+ * any of its unused capacity), and the StringBuffer is marked "shared."
+ * A "shared" StringBuffer is copied if it is reused.
+ * <p>
+ * The class java.lang.StringBuffer has a default capacity of 16,
+ * which it reverts to if you get the toString() and call setLength(0).
+ * StringBuffer has a fixed expansion factor of <code>(n + 1) * 2</code>.
+ * <p>
+ * This class has a default capacity of 128 and a default expansion factor of 1.5.
+ * The initial capacity for this and for StringBuffer is determined by using
+ * the constructor that takes an int, but for this class you may also
+ * set the expansion factor.
+ * <p>
+ * For determining a good initial capacity and expansion factor of ReuseStringBuffer,
+ * construct and use a tool.BufferMonitor and call its
+ * <code>dumpMonitors()</code> method after your last use of the instance.
+ * Ask Thomas Sharp for DumpMonitor.
+ * <p>
+ * Most StringBuffer methods are copied here also because StringBuffer is final
+ * (which means that it cannot be subclassed).
+ * <p>
+ * The boolean <code>shared</code> in StringBuffer is not needed here for the same
+ * purpose. If you call ReuseStringBuffer.toString(), String must copy the value array.
+ * The boolean <code>shared</code> is needed for StringBuffer
+ * because the String constructor collaborates with StringBuffer to avoid copying
+ * the array unless it is reused after a toString().
+ * Because of this feature, ReuseStringBuffer.setLength(0) reuses the existing value array.
+ * This saves ReuseStringBuffer from having to extend a new array of default capacity
+ * and also avoids assigning unused buffer to the new String created by the toString().
+ * <p>
+ * In addition to acting as a StringBuffer replacement, ReuseStringBuffer also acts
+ * as a ReuseStringBuffer factory and pool. The methods getBuffer, toString(Buffer),
+ * and freeBuffer let you share ReuseStringBuffers for different uses.
+ * <p>
+ * A possible enhancement to ReuseStringBuffer would be to restore the boolean <code>shared</code>
+ * and use it to optimize repeated toString() calls without intermediate changes.
+ * This optimation could allow toString() to return the same String if the flag is not reset
+ * by an intermediate change. Currently, we do not believe repeated toStrings()
+ * are a typical pattern of usage; instead, the user is advised to retain the String
+ * and discard the buffer.
+ * <p>
+ * @author	Thomas Sharp, sharpt@us.ibm.com
+ * @see java.lang.StringBuffer
+ */
+public class ReuseStringBuffer implements CharSequence
+{
+   /** Our wrapped buffer. */
+   protected StringBuffer buffer;
+   
+   /** Shared string buffers. */
+   protected static Stack<ReuseStringBuffer> buffers;
+   
+   /**
+    * Gets a reusable ReuseStringBuffer for string concatenation.
+    * @return A ReuseStringBuffer constructed with arguments (128, (float)1.5).
+    */
+   public static ReuseStringBuffer getBuffer()
+   {
+      return getBuffer(128);
+   }
+   
+   /**
+    * Gets a reusable ReuseStringBuffer for string concatenation and appends
+    * to it the given text.
+    * @param str The initial contents of the buffer.
+    * @return A ReuseStringBuffer constructed with arguments (text.length() + 128, (float)1.5).
+    */
+   public static ReuseStringBuffer getBuffer(String str)
+   {
+      ReuseStringBuffer b = getBuffer(str.length() + 128);
+      b.append(str);
+      return b;
+   }
+   
+   /**
+    * Gets a reusable ReuseStringBuffer for string concatenation.
+    * @param capacity The minimum capacity. The actual capacity of the
+    * ReuseStringBuffer returned may be greater.
+    * @return A ReuseStringBuffer constructed with arguments (capacity, (float)1.5).
+    */
+   public static synchronized ReuseStringBuffer getBuffer(int capacity)
+   {
+      if (buffers == null)
+         buffers = new Stack<ReuseStringBuffer>();
+      if (!buffers.empty()) {
+         ReuseStringBuffer b;
+         for (int i = buffers.size() - 1; i > -1; i--)
+         {
+            b = buffers.elementAt(i);
+            if (b.capacity() >= capacity)
+            {
+               buffers.removeElementAt(i);
+               return b;
+            }
+         }
+      }
+      return new ReuseStringBuffer(capacity);
+   }
+   
+   /**
+    * Frees a given buffer for reuse and returns the toString().
+    * @param buffer Any ReuseStringBuffer, whether retrieved from ReuseStringBuffer.getBuffer() or not.
+    * @return The toString().
+    */
+   public static String toString(ReuseStringBuffer buffer)
+   {
+      if (buffers == null)
+         buffers = new Stack<ReuseStringBuffer>();
+      String ts = buffer.toString();
+      buffer.setLength(0);
+      buffers.push(buffer);
+      return ts;
+   }
+   
+   /**
+    * Frees a given buffer for reuse.
+    * @param buffer Any ReuseStringBuffer, whether retrieved from ReuseStringBuffer.getBuffer() or not.
+    */
+   public static void freeBuffer(ReuseStringBuffer buffer)
+   {
+      if (buffers == null)
+         buffers = new Stack<ReuseStringBuffer>();
+      buffer.setLength(0);
+      buffers.push(buffer);
+   }
+   
+   /**
+    * Constructs a string buffer with no characters in it,
+    * an initial capacity of 128 characters,
+    * and an expansion factor of 1.5.
+    */
+   public ReuseStringBuffer() {
+      this(128, (float)1.5);
+   }
+   
+   /**
+    * Constructs a string buffer with no characters in it,
+    * an initial capacity specified by the <code>length</code> argument,
+    * and an expansion factor of 1.5.
+    * <p>
+    * @param		   capacity	the initial capacity.
+    * @exception	NegativeArraySizeException	if the <code>length</code>
+    *					argument is less than <code>0</code>.
+    */
+   public ReuseStringBuffer(int capacity) {
+      this(capacity, (float)1.5);
+   }
+   
+   /**
+    * Constructs a string buffer so that it represents the same
+    * sequence of characters as the string argument; in other
+    * words, the initial contents of the string buffer is a copy of the
+    * argument string. The initial capacity of the string buffer is
+    * <code>128</code> plus the length of the string argument.
+    * The expansion factor is 1.5.
+    * <p>
+    * @param	str	the initial contents of the buffer.
+    */
+   public ReuseStringBuffer(String str) {
+      this(str.length() + 128);
+      buffer.append(str);
+   }
+   
+   /**
+    * @deprecated expansionFactor is not used.
+    * Constructs a string buffer with no characters in it,
+    * an initial capacity of 128 characters,
+    * and an expansion factor specified by the <code>expansionFactor</code> arguement.
+    * <p>
+    * @param expansionFactor A float specify the factor by which to
+    * expand the capacity, if needed.
+    */
+   public ReuseStringBuffer(float expansionFactor) {
+      this(128);
+   }
+   
+   /**
+    * @deprecated expansionFactor is not used.
+    * Constructs a string buffer with no characters in it,
+    * an initial capacity specified by the <code>length</code> argument,
+    * and an expansion factor specified by the <code>expansionFactor</code> arguement.
+    * <p>
+    * @param expansionFactor A float specify the factor by which to
+    * expand the capacity, if needed.
+    * @param		   capacity	the initial capacity.
+    * @param expansionFactor A float specify the factor by which to
+    * expand the capacity, if needed.
+    * @exception	NegativeArraySizeException	if the <code>length</code>
+    *					argument is less than <code>0</code>.
+    */
+   public ReuseStringBuffer(int capacity, float expansionFactor) {
+      buffer = new StringBuffer(capacity); //expansionFactor is not used 
+   }
+   
+   /**
+    * @deprecated expansionFactor is not used.
+    * Constructs a string buffer so that it represents the same
+    * sequence of characters as the string argument; in other
+    * words, the initial contents of the string buffer is a copy of the
+    * argument string. The initial capacity of the string buffer is
+    * <code>128</code> plus the length of the string argument.
+    * The expansion factor is specified by the <code>expansionFactor</code> arguement.
+    * <p>
+    * @param	str	the initial contents of the buffer.
+    * @param expansionFactor A float specify the factor by which to
+    * expand the capacity, if needed.
+    */
+   public ReuseStringBuffer(String str, float expansionFactor) {
+      this(str.length() + 128);
+      buffer.append(str);
+   }
+   
+   /**
+    * Returns the length (character count) of this string buffer.
+    * <p>
+    * @return	the length of the sequence of characters currently
+    *			represented by this string buffer.
+    */
+   public int length() {
+      return buffer.length();
+   }
+   
+   /**
+    * Returns the current capacity of the String buffer. The capacity
+    * is the amount of storage available for newly inserted
+    * characters; beyond which an allocation will occur.
+    * <p>
+    * @return	the current capacity of this string buffer.
+    */
+   public int capacity() {
+      return buffer.capacity();
+   }
+   
+   /**
+    * Ensures that the capacity of the buffer is at least equal to the
+    * specified minimum.
+    * If the current capacity of this string buffer is less than the
+    * argument, then a new internal buffer is allocated with greater
+    * capacity. The new capacity is the larger of:
+    * <ul>
+    * <li>The <code>minimumCapacity</code> argument.
+    * <li>The old capacity times <code>expansionFactor</code>.
+    * </ul>
+    * If the <code>minimumCapacity</code> argument is nonpositive, this
+    * method takes no action and simply returns.
+    * <p>
+    * @param	minimumCapacity	the minimum desired capacity.
+    */
+   public synchronized void ensureCapacity(int minimumCapacity) {
+      buffer.ensureCapacity(minimumCapacity);
+   }
+   
+   /**
+    * Sets the length of this String buffer.
+    * This string buffer is altered to represent a new character sequence
+    * whose length is specified by the argument. For every nonnegative
+    * index <i>k</i> less than <code>newLength</code>, the character at
+    * index <i>k</i> in the new character sequence is the same as the
+    * character at index <i>k</i> in the old sequence if <i>k</i> is less
+    * than the length of the old character sequence; otherwise, it is the
+    * null character <code>'\u0000'</code>.
+    * <p>	
+    * In other words, if the <code>newLength</code> argument is less than
+    * the current length of the string buffer, the string buffer is
+    * truncated to contain exactly the number of characters given by the
+    * <code>newLength</code> argument.
+    * <p>
+    * If the <code>newLength</code> argument is greater than or equal
+    * to the current length, sufficient null characters
+    * (<code>'&#92;u0000'</code>) are appended to the string buffer so that
+    * length becomes the <code>newLength</code> argument.
+    * <p>
+    * The <code>newLength</code> argument must be greater than or equal
+    * to <code>0</code>.
+    * <p>
+    * @param		newLength	the new length of the buffer.
+    * @exception	IndexOutOfBoundsException	if the
+    *					<code>newLength</code> argument is negative.
+    * @see			#length()
+    */
+   public synchronized void setLength(int newLength) {
+      buffer.setLength(newLength);
+   }
+   
+   /**
+    * The specified character of the sequence currently represented by
+    * the string buffer, as indicated by the <code>index</code> argument,
+    * is returned. The first character of a string buffer is at index
+    * <code>0</code>, the next at index <code>1</code>, and so on, for
+    * array indexing.
+    * <p>
+    * The index argument must be greater than or equal to
+    * <code>0</code>, and less than the length of this string buffer.
+    * <p>
+    * @param		index	the index of the desired character.
+    * @return		the character at the specified index of this string buffer.
+    * @exception	IndexOutOfBoundsException	if <code>index</code> is
+    *				negative or greater than or equal to <code>length()</code>.
+    * @see			#length()
+    */
+   public synchronized char charAt(int index) {
+      return buffer.charAt(index);
+   }
+   
+   /**
+    * Characters are copied from this string buffer into the
+    * destination character array <code>dst</code>. The first character to
+    * be copied is at index <code>srcBegin</code>; the last character to
+    * be copied is at index <code>srcEnd-1</code>. The total number of
+    * characters to be copied is <code>srcEnd-srcBegin</code>. The
+    * characters are copied into the subarray of <code>dst</code> starting
+    * at index <code>dstBegin</code> and ending at index:
+    * <p><blockquote><pre>
+    * dstbegin + (srcEnd-srcBegin) - 1
+    * </pre></blockquote>
+    * <p>
+    * @param		srcBegin	start copying at this offset in the string buffer.
+    * @param		srcEnd		stop copying at this offset in the string buffer.
+    * @param		dst			the array to copy the data into.
+    * @param		dstBegin	offset into <code>dst</code>.
+    * @exception	NullPointerException if <code>dst</code> is
+    *				<code>null</code>.
+    * @exception	IndexOutOfBoundsException	if any of the following is true:
+    *				<ul>
+    *				<li><code>srcBegin</code> is negative
+    *				<li><code>dstBegin</code> is negative
+    *				<li>the <code>srcBegin</code> argument is greater than
+    *				the <code>srcEnd</code> argument.
+    *				<li><code>srcEnd</code> is greater than
+    *				<code>this.length()</code>, the current length of this
+    *				string buffer.
+    *				<li><code>dstBegin+srcEnd-srcBegin</code> is greater than
+    *				<code>dst.length</code>
+    *				</ul>
+    */
+   public synchronized void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) {
+      buffer.getChars(srcBegin, srcEnd, dst, dstBegin);
+   }
+   
+   /**
+    * The character at the specified index of this string buffer is set
+    * to <code>ch</code>. The string buffer is altered to represent a new
+    * character sequence that is identical to the old character sequence,
+    * except that it contains the character <code>ch</code> at position
+    * <code>index</code>.
+    * <p>
+    * The offset argument must be greater than or equal to
+    * <code>0</code>, and less than the length of this string buffer.
+    * <p>
+    * @param		index	the index of the character to modify.
+    * @param		ch		the new character.
+    * @exception	IndexOutOfBoundsException	if <code>index</code> is
+    *				negative or greater than or equal to <code>length()</code>.
+    * @see			#length()
+    */
+   public synchronized void setCharAt(int index, char ch) {
+      buffer.setCharAt(index, ch);
+   }
+   
+   /**
+    * Appends the string representation of the <code>Object</code>
+    * argument to this string buffer.
+    * <p>
+    * The argument is converted to a string as if by the method
+    * <code>String.valueOf</code>, and the characters of that
+    * string are then appended to this string buffer.
+    *
+    * @param	obj	an <code>Object</code>.
+    * @return	a reference to this <code>ReuseStringBuffer</code> object.
+    * @see		java.lang.String#valueOf(java.lang.Object)
+    * @see		#append(java.lang.String)
+    */
+   public synchronized ReuseStringBuffer append(Object obj) {
+      buffer.append(obj);
+      return this;
+   }
+   
+   /**
+    * Appends the string to this string buffer.
+    * <p>
+    * The characters of the <code>String</code> argument are appended, in
+    * order, to the contents of this string buffer, increasing the
+    * length of this string buffer by the length of the argument.
+    * If <code>str</code> is <code>null</code>, then the four characters
+    * <code>"null"</code> are appended to this string buffer.
+    * <p>
+    * Let <i>n</i> be the length of the old character sequence, the one
+    * contained in the string buffer just prior to execution of the
+    * <code>append</code> method. Then the character at index <i>k</i> in
+    * the new character sequence is equal to the character at index <i>k</i>
+    * in the old character sequence, if <i>k</i> is less than <i>n</i>;
+    * otherwise, it is equal to the character at index <i>k-n</i> in the
+    * argument <code>str</code>.
+    * <p>
+    * @param	str	a string.
+    * @return	a reference to this <code>ReuseStringBuffer</code>.
+    */
+   public synchronized ReuseStringBuffer append(String str) {
+      buffer.append(str);
+      return this;
+   }
+   
+   /**
+    * Appends the specified <tt>StringBuffer</tt> to this
+    * <tt>ReuseStringBuffer</tt>.
+    * <p>
+    * The characters of the <tt>StringBuffer</tt> argument are appended,
+    * in order, to the contents of this <tt>ReuseStringBuffer</tt>, increasing the
+    * length of this <tt>ReuseStringBuffer</tt> by the length of the argument.
+    * If <tt>sb</tt> is <tt>null</tt>, then the four characters
+    * <tt>"null"</tt> are appended to this <tt>ReuseStringBuffer</tt>.
+    * <p>
+    * Let <i>n</i> be the length of the old character sequence, the one
+    * contained in the <tt>ReuseStringBuffer</tt> just prior to execution of the
+    * <tt>append</tt> method. Then the character at index <i>k</i> in
+    * the new character sequence is equal to the character at index <i>k</i>
+    * in the old character sequence, if <i>k</i> is less than <i>n</i>;
+    * otherwise, it is equal to the character at index <i>k-n</i> in the
+    * argument <code>sb</code>.
+    * <p>
+    * The method <tt>ensureCapacity</tt> is first called on this
+    * <tt>ReuseStringBuffer</tt> with the new buffer length as its argument.
+    * (This ensures that the storage of this <tt>ReuseStringBuffer</tt> is
+    * adequate to contain the additional characters being appended.)
+    *
+    * @param   sb         the <tt>StringBuffer</tt> to append.
+    * @return  a reference to this <tt>ReuseStringBuffer</tt>.
+    */
+   public synchronized ReuseStringBuffer append(StringBuffer sb) {
+      buffer.append(sb);
+      return this;
+   }
+   
+   /**
+    * Appends the specified <tt>ReuseStringBuffer</tt> to this
+    * <tt>ReuseStringBuffer</tt>.
+    * <p>
+    * The characters of the <tt>ReuseStringBuffer</tt> argument are appended,
+    * in order, to the contents of this <tt>ResuseStringBuffer</tt>, increasing the
+    * length of this <tt>ResuseStringBuffer</tt> by the length of the argument.
+    * If <tt>sb</tt> is <tt>null</tt>, then the four characters
+    * <tt>"null"</tt> are appended to this <tt>ResuseStringBuffer</tt>.
+    * <p>
+    * Let <i>n</i> be the length of the old character sequence, the one
+    * contained in the <tt>StringBuffer</tt> just prior to execution of the
+    * <tt>append</tt> method. Then the character at index <i>k</i> in
+    * the new character sequence is equal to the character at index <i>k</i>
+    * in the old character sequence, if <i>k</i> is less than <i>n</i>;
+    * otherwise, it is equal to the character at index <i>k-n</i> in the
+    * argument <code>sb</code>.
+    * 
+    * @param   sb         the <tt>StringBuffer</tt> to append.
+    * @return  a reference to this <tt>ReuseStringBuffer</tt>.
+    */
+   public synchronized ReuseStringBuffer append(ReuseStringBuffer sb) {
+      if (sb == null)
+         buffer.append("null"); //$NON-NLS-1$
+      else
+         buffer.append(sb.toString());
+      return this;
+   }
+   
+   /**
+    * Appends the string representation of the <code>char</code> array
+    * argument to this string buffer.
+    * <p>
+    * The characters of the array argument are appended, in order, to
+    * the contents of this string buffer. The length of this string
+    * buffer increases by the length of the argument.
+    * <p>
+    * The overall effect is exactly as if the argument were converted to
+    * a string by the method {@link String#valueOf(char[])} and the
+    * characters of that string were then {@link #append(String) appended}
+    * to this <code>ReuseStringBuffer</code> object.
+    * <p>
+    * @param	str	the characters to be appended.
+    * @return	a reference to this <code>ReuseStringBuffer</code> object.
+    */
+   public synchronized ReuseStringBuffer append(char[] str) {
+      buffer.append(str);
+      return this;
+   }
+   
+   /**
+    * Appends the string representation of a subarray of the
+    * <code>char</code> array argument to this string buffer.
+    * <p>
+    * Characters of the character array <code>str</code>, starting at
+    * index <code>offset</code>, are appended, in order, to the contents
+    * of this string buffer. The length of this string buffer increases
+    * by the value of <code>len</code>.
+    * <p>
+    * The overall effect is exactly as if the arguments were converted to
+    * a string by the method {@link String#valueOf(char[],int,int)} and the
+    * characters of that string were then {@link #append(String) appended}
+    * to this <code>ReuseStringBuffer</code> object.
+    * <p>
+    * @param	str		the characters to be appended.
+    * @param	offset	the index of the first character to append.
+    * @param	len		the number of characters to append.
+    * @return	a reference to this <code>ReuseStringBuffer</code> object.
+    */
+   public synchronized ReuseStringBuffer append(char[] str, int offset, int len) {
+      buffer.append(str, offset, len);
+      return this;
+   }
+   
+   /**
+    * Appends the string representation of the <code>boolean</code>
+    * argument to the string buffer.
+    * <p>
+    * The argument is converted to a string as if by the method
+    * <code>String.valueOf</code>, and the characters of that
+    * string are then appended to this string buffer.
+    * <p>
+    * @param	b	a <code>boolean</code>.
+    * @return	a reference to this <code>ReuseStringBuffer</code>.
+    * @see		java.lang.String#valueOf(boolean)
+    * @see		#append(java.lang.String)
+    */
+   public synchronized ReuseStringBuffer append(boolean b) {
+      buffer.append(b);
+      return this;
+   }
+   
+   /**
+    * Appends the string representation of the <code>char</code>
+    * argument to this string buffer.
+    * <p>
+    * The argument is appended to the contents of this string buffer.
+    * The length of this string buffer increases by <code>1</code>.
+    * <p>
+    * The overall effect is exactly as if the argument were converted to
+    * a string by the method {@link String#valueOf(char)} and the character
+    * in that string were then {@link #append(String) appended} to this
+    * <code>ReuseStringBuffer</code> object.
+    * <p>
+    * @param	c	a <code>char</code>.
+    * @return	a reference to this <code>ReuseStringBuffer</code> object.
+    */
+   public synchronized ReuseStringBuffer append(char c) {
+      buffer.append(c);
+      return this;
+   }
+   
+   /**
+    * Appends the string representation of the <code>int</code>
+    * argument to this string buffer.
+    * <p>
+    * The argument is converted to a string as if by the method
+    * <code>String.valueOf</code>, and the characters of that
+    * string are then appended to this string buffer.
+    *
+    * @param	i	an <code>int</code>.
+    * @return	a reference to this <code>ReuseStringBuffer</code> object.
+    * @see		java.lang.String#valueOf(int)
+    * @see		#append(java.lang.String)
+    */
+   public synchronized ReuseStringBuffer append(int i) {
+      buffer.append(i);
+      return this;
+   }
+   
+   /**
+    * Appends the string representation of the <code>long</code>
+    * argument to this string buffer.
+    * <p>
+    * The argument is converted to a string as if by the method
+    * <code>String.valueOf</code>, and the characters of that
+    * string are then appended to this string buffer.
+    * <p>
+    * @param	l	a <code>long</code>.
+    * @return	a referenct to this <code>ReuseStringBuffer</code> object.
+    * @see		java.lang.String#valueOf(long)
+    * @see		#append(java.lang.String)
+    */
+   public synchronized ReuseStringBuffer append(long l) {
+      buffer.append(l);
+      return this;
+   }
+   
+   /**
+    * Appends the string representation of the <code>float</code>
+    * argument to this string buffer.
+    * <p>
+    * The argument is converted to a string as if by the method
+    * <code>String.valueOf</code>, and the characters of that
+    * string are then appended to this string buffer.
+    * <p>
+    * @param	f	a <code>float</code>.
+    * @return	a reference to this <code>ReuseStringBuffer</code> object.
+    * @see		java.lang.String#valueOf(float)
+    * @see		#append(java.lang.String)
+    */
+   public synchronized ReuseStringBuffer append(float f) {
+      buffer.append(f);
+      return this;
+   }
+   
+   /**
+    * Appends the string representation of the <code>double</code>
+    * argument to this string buffer.
+    * <p>
+    * The argument is converted to a string as if by the method
+    * <code>String.valueOf</code>, and the characters of that
+    * string are then appended to this string buffer.
+    *
+    * @param	d	a <code>double</code>.
+    * @return	a reference to this <code>ReuseStringBuffer</code> object.
+    * @see		java.lang.String#valueOf(double)
+    * @see		#append(java.lang.String)
+    */
+   public synchronized ReuseStringBuffer append(double d) {
+      buffer.append(d);
+      return this;
+   }
+   
+   /**
+    * Removes the characters in a substring of this <code>ReuseStringBuffer</code>.
+    * The substring begins at the specified <code>start</code> and extends to
+    * the character at index <code>end - 1</code> or to the end of the
+    * <code>ReuseStringBuffer</code> if no such character exists. If
+    * <code>start</code> is equal to <code>end</code>, no changes are made.
+    * <p>
+    * @param		start	The beginning index, inclusive.
+    * @param		end	The ending index, exclusive.
+    * @return		a reference to this <code>ReuseStringBuffer</code> object.
+    * @exception	StringIndexOutOfBoundsException	if <code>start</code>
+    *				is negative, greater than <code>length()</code>, or
+    *			greater than <code>end</code>.
+    */
+   public synchronized ReuseStringBuffer delete(int start, int end) {
+      buffer.delete(start, end);
+      return this;
+   }
+   
+   /**
+    * Removes the character at the specified position in this
+    * <code>ReuseStringBuffer</code> (shortening the <code>ReuseStringBuffer</code>
+    * by one character).
+    * <p>
+    * @param		index	Index of character to remove
+    * @return		a reference to this <code>ReuseStringBuffer</code> object.
+    * @exception	StringIndexOutOfBoundsException	if the <code>index</code>
+    *			is negative or greater than or equal to
+    *			<code>length()</code>.
+    */
+   public synchronized ReuseStringBuffer deleteCharAt(int index) {
+      buffer.deleteCharAt(index);
+      return this;
+   }
+   
+   
+   /**
+    * Replaces the characters in a substring of this <code>StringBuffer</code>
+    * with characters in the specified <code>String</code>. The substring
+    * begins at the specified <code>start</code> and extends to the character
+    * at index <code>end - 1</code> or to the end of the
+    * <code>StringBuffer</code> if no such character exists. First the
+    * characters in the substring are removed and then the specified
+    * <code>String</code> is inserted at <code>start</code>. (The
+    * <code>StringBuffer</code> will be lengthened to accommodate the
+    * specified String if necessary.)
+    *
+    * @param      start    The beginning index, inclusive.
+    * @param      end      The ending index, exclusive.
+    * @param      str   String that will replace previous contents.
+    * @return     a reference to this <code>ReuseStringBuffer</code> object.
+    * @exception  StringIndexOutOfBoundsException  if <code>start</code>
+    *             is negative, greater than <code>length()</code>, or
+    *             greater than <code>end</code>.
+    * @since      1.2
+    */
+   public synchronized ReuseStringBuffer replace(int start, int end, String str) {
+      buffer.replace(start, end, str);
+      return this;
+   }
+   
+   /**
+    * Returns a new <code>String</code> that contains a subsequence of
+    * characters currently contained in this <code>ReuseStringBuffer</code>.The
+    * substring begins at the specified index and extends to the end of the
+    * <code>ReuseStringBuffer</code>.
+    * <p>
+    * @param		start	The beginning index, inclusive.
+    * @return		The new string.
+    * @exception	StringIndexOutOfBoundsException	if <code>start</code> is
+    *				less than zero, or greater than the length of this
+    *				<code>ReuseStringBuffer</code>.
+    */
+   public synchronized String substring(int start) {
+      return buffer.substring(start);
+   }
+   
+   /**
+    * Returns a new character sequence that is a subsequence of this sequence.
+    *
+    * <p> An invocation of this method of the form
+    *
+    * <blockquote><pre>
+    * sb.subSequence(begin,&nbsp;end)</pre></blockquote>
+    *
+    * behaves in exactly the same way as the invocation
+    *
+    * <blockquote><pre>
+    * sb.substring(begin,&nbsp;end)</pre></blockquote>
+    *
+    * This method is provided so that the <tt>ReuseStringBuffer</tt> class can
+    * implement the {@link CharSequence} interface. </p>
+    *
+    * @param      start   the start index, inclusive.
+    * @param      end     the end index, exclusive.
+    * @return     the specified subsequence.
+    *
+    * @throws  IndexOutOfBoundsException
+    *          if <tt>start</tt> or <tt>end</tt> are negative,
+    *          if <tt>end</tt> is greater than <tt>length()</tt>,
+    *          or if <tt>start</tt> is greater than <tt>end</tt>
+    *
+    * @since 1.4
+    * @spec JSR-51
+    */
+   public CharSequence subSequence(int start, int end) {
+       return buffer.substring(start, end);
+   }
+   
+   /**
+    * Returns a new <code>String</code> that contains a subsequence of
+    * characters currently contained in this <code>ReuseStringBuffer</code>. The
+    * substring begins at the specified <code>start</code> and
+    * extends to the character at index <code>end - 1</code>. An
+    * exception is thrown if
+    * <p>
+    * @param		start	The beginning index, inclusive.
+    * @param		end		The ending index, exclusive.
+    * @return		The new string.
+    * @exception	StringIndexOutOfBoundsException	if <code>start</code>
+    *				or <code>end</code> are negative or greater than
+    *			<code>length()</code>, or <code>start</code> is
+    *			greater than <code>end</code>.
+    */
+   public synchronized String substring(int start, int end) {
+      return buffer.substring(start, end);
+   }
+   
+   /**
+    * Inserts the string representation of a subarray of the <code>str</code>
+    * array argument into this string buffer. The subarray begins at the
+    * specified <code>offset</code> and extends <code>len</code> characters.
+    * The characters of the subarray are inserted into this string buffer at
+    * the position indicated by <code>index</code>. The length of this
+    * <code>ReuseStringBuffer</code> increases by <code>len</code> characters.
+    * <p>
+    * @param		index	position at which to insert subarray.
+    * @param		str		A character array.
+    * @param		offset	the index of the first character in subarray to
+    *			to be inserted.
+    * @param		len		the number of characters in the subarray to
+    *			to be inserted.
+    * @return		a reference to this <code>ReuseStringBuffer</code> object.
+    * @exception	StringIndexOutOfBoundsException	if <code>index</code>
+    *				is negative or greater than <code>length()</code>, or
+    *			<code>offset</code> or <code>len</code> are negative, or
+    *			<code>(offset+len)</code> is greater than
+    *			<code>str.length</code>.
+    */
+   public synchronized ReuseStringBuffer insert(int index, char[] str, int offset, int len) {
+      buffer.insert(index, str, offset, len);
+      return this;
+   }
+   
+   /**
+    * Inserts the string representation of the <code>Object</code>
+    * argument into this string buffer.
+    * <p>
+    * The second argument is converted to a string as if by the method
+    * <code>String.valueOf</code>, and the characters of that
+    * string are then inserted into this string buffer at the indicated
+    * offset.
+    * <p>
+    * The offset argument must be greater than or equal to
+    * <code>0</code>, and less than or equal to the length of this
+    * string buffer.
+    *
+    * @param		offset	the offset.
+    * @param		obj		an <code>Object</code>.
+    * @return		a reference to this <code>ReuseStringBuffer</code> object.
+    * @exception	StringIndexOutOfBoundsException	if the offset is invalid.
+    * @see			java.lang.String#valueOf(java.lang.Object)
+    * @see			#insert(int, java.lang.String)
+    * @see			#length()
+    */
+   public synchronized ReuseStringBuffer insert(int offset, Object obj) {
+      buffer.insert(offset, obj);
+      return this;
+   }
+   
+   /**
+    * Inserts the string into this string buffer.
+    * <p>
+    * The characters of the <code>String</code> argument are inserted, in
+    * order, into this string buffer at the indicated offset, moving up any
+    * characters originally above that position and increasing the length
+    * of this string buffer by the length of the argument. If
+    * <code>str</code> is <code>null</code>, then the four characters
+    * <code>"null"</code> are inserted into this string buffer.
+    * <p>
+    * The character at index <i>k</i> in the new character sequence is
+    * equal to:
+    * <ul>
+    * <li>the character at index <i>k</i> in the old character sequence, if
+    * <i>k</i> is less than <code>offset</code>
+    * <li>the character at index <i>k</i><code>-offset</code> in the
+    * argument <code>str</code>, if <i>k</i> is not less than
+    * <code>offset</code> but is less than <code>offset+str.length()</code>
+    * <li>the character at index <i>k</i><code>-str.length()</code> in the
+    * old character sequence, if <i>k</i> is not less than
+    * <code>offset+str.length()</code>
+    * </ul><p>
+    * The offset argument must be greater than or equal to
+    * <code>0</code>, and less than or equal to the length of this
+    * string buffer.
+    * <p>
+    * @param		offset	the offset.
+    * @param		str		a string.
+    * @return		a reference to this <code>ReuseStringBuffer</code> object.
+    * @exception	StringIndexOutOfBoundsException	if the offset is invalid.
+    * @see			#length()
+    */
+   public synchronized ReuseStringBuffer insert(int offset, String str) {
+      buffer.insert(offset, str);
+      return this;
+   }
+   
+   /**
+    * Inserts the string representation of the <code>char</code> array
+    * argument into this string buffer.
+    * <p>
+    * The characters of the array argument are inserted into the
+    * contents of this string buffer at the position indicated by
+    * <code>offset</code>. The length of this string buffer increases by
+    * the length of the argument.
+    * <p>
+    * The overall effect is exactly as if the argument were converted to
+    * a string by the method {@link String#valueOf(char[])} and the
+    * characters of that string were then
+    * {@link #insert(int,String) inserted} into this
+    * <code>ReuseStringBuffer</code>	object at the position indicated by
+    * <code>offset</code>.
+    * <p>
+    * @param		offset	the offset.
+    * @param		str		a character array.
+    * @return		a reference to this <code>ReuseStringBuffer</code> object.
+    * @exception	StringIndexOutOfBoundsException	if the offset is invalid.
+    */
+   public synchronized ReuseStringBuffer insert(int offset, char[] str) {
+      buffer.insert(offset, str);
+      return this;
+   }
+   
+   /**
+    * Inserts the string representation of the <code>boolean</code>
+    * argument into this string buffer.
+    * <p>
+    * The second argument is converted to a string as if by the method
+    * <code>String.valueOf</code>, and the characters of that
+    * string are then inserted into this string buffer at the indicated
+    * offset.
+    * <p>
+    * The offset argument must be greater than or equal to
+    * <code>0</code>, and less than or equal to the length of this
+    * string buffer.
+    * <p>
+    * @param		offset	the offset.
+    * @param		b			a <code>boolean</code>.
+    * @return		a reference to this <code>ReuseStringBuffer</code> object.
+    * @exception	StringIndexOutOfBoundsException	if the offset is invalid.
+    * @see			java.lang.String#valueOf(boolean)
+    * @see			#insert(int, java.lang.String)
+    * @see			#length()
+    */
+   public ReuseStringBuffer insert(int offset, boolean b) {
+      buffer.insert(offset, b);
+      return this;
+   }
+   
+   /**
+    * Inserts the string representation of the <code>char</code>
+    * argument into this string buffer.
+    * <p>
+    * The second argument is inserted into the contents of this string
+    * buffer at the position indicated by <code>offset</code>. The length
+    * of this string buffer increases by one.
+    * <p>
+    * The overall effect is exactly as if the argument were converted to
+    * a string by the method {@link String#valueOf(char)} and the character
+    * in that string were then {@link #insert(int, String) inserted} into
+    * this <code>ReuseStringBuffer</code> object at the position indicated by
+    * <code>offset</code>.
+    * <p>
+    * The offset argument must be greater than or equal to
+    * <code>0</code>, and less than or equal to the length of this
+    * string buffer.
+    * <p>
+    * @param		offset	the offset.
+    * @param		c			a <code>char</code>.
+    * @return		a reference to this <code>ReuseStringBuffer</code> object.
+    * @exception	IndexOutOfBoundsException	if the offset is invalid.
+    * @see			#length()
+    */
+   public synchronized ReuseStringBuffer insert(int offset, char c) {
+      buffer.insert(offset, c);
+      return this;
+   }
+   
+   /**
+    * Inserts the string representation of the second <code>int</code>
+    * argument into this string buffer.
+    * <p>
+    * The second argument is converted to a string as if by the method
+    * <code>String.valueOf</code>, and the characters of that
+    * string are then inserted into this string buffer at the indicated
+    * offset.
+    * <p>
+    * The offset argument must be greater than or equal to
+    * <code>0</code>, and less than or equal to the length of this
+    * string buffer.
+    * <p>
+    * @param		offset	the offset.
+    * @param		i			an <code>int</code>.
+    * @return		a reference to this <code>ReuseStringBuffer</code> object.
+    * @exception	StringIndexOutOfBoundsException	if the offset is invalid.
+    * @see			java.lang.String#valueOf(int)
+    * @see			#insert(int, java.lang.String)
+    * @see			#length()
+    */
+   public ReuseStringBuffer insert(int offset, int i) {
+      buffer.insert(offset, i);
+      return this;
+   }
+   
+   /**
+    * Inserts the string representation of the <code>long</code>
+    * argument into this string buffer.
+    * <p>
+    * The second argument is converted to a string as if by the method
+    * <code>String.valueOf</code>, and the characters of that
+    * string are then inserted into this string buffer at the position
+    * indicated by <code>offset</code>.
+    * <p>
+    * The offset argument must be greater than or equal to
+    * <code>0</code>, and less than or equal to the length of this
+    * string buffer.
+    * <p>
+    * @param		offset	the offset.
+    * @param		l			a <code>long</code>.
+    * @return		a reference to this <code>ReuseStringBuffer</code> object.
+    * @exception	StringIndexOutOfBoundsException	if the offset is invalid.
+    * @see			java.lang.String#valueOf(long)
+    * @see			#insert(int, java.lang.String)
+    * @see			#length()
+    */
+   public ReuseStringBuffer insert(int offset, long l) {
+      buffer.insert(offset, l);
+      return this;
+   }
+   
+   /**
+    * Inserts the string representation of the <code>float</code>
+    * argument into this string buffer.
+    * <p>
+    * The second argument is converted to a string as if by the method
+    * <code>String.valueOf</code>, and the characters of that
+    * string are then inserted into this string buffer at the indicated
+    * offset.
+    * <p>
+    * The offset argument must be greater than or equal to
+    * <code>0</code>, and less than or equal to the length of this
+    * string buffer.
+    * <p>
+    * @param		offset	the offset.
+    * @param		f			a <code>float</code>.
+    * @return		a reference to this <code>ReuseStringBuffer</code> object.
+    * @exception	StringIndexOutOfBoundsException	if the offset is invalid.
+    * @see			java.lang.String#valueOf(float)
+    * @see			#insert(int, java.lang.String)
+    * @see			#length()
+    */
+   public ReuseStringBuffer insert(int offset, float f) {
+      buffer.insert(offset, f);
+      return this;
+   }
+   
+   /**
+    * Inserts the string representation of the <code>double</code>
+    * argument into this string buffer.
+    * <p>
+    * The second argument is converted to a string as if by the method
+    * <code>String.valueOf</code>, and the characters of that
+    * string are then inserted into this string buffer at the indicated
+    * offset.
+    * <p>
+    * The offset argument must be greater than or equal to
+    * <code>0</code>, and less than or equal to the length of this
+    * string buffer.
+    * <p>
+    * @param		offset	the offset.
+    * @param		d			a <code>double</code>.
+    * @return		a reference to this <code>ReuseStringBuffer</code> object.
+    * @exception	StringIndexOutOfBoundsException	if the offset is invalid.
+    * @see			java.lang.String#valueOf(double)
+    * @see			#insert(int, java.lang.String)
+    * @see			#length()
+    */
+   public ReuseStringBuffer insert(int offset, double d) {
+      buffer.insert(offset, d);
+      return this;
+   }
+   
+   /**
+    * Returns the index within this string of the first occurrence of the
+    * specified substring. The integer returned is the smallest value
+    * <i>k</i> such that:
+    * <blockquote><pre>
+    * this.toString().startsWith(str, <i>k</i>)
+    * </pre></blockquote>
+    * is <code>true</code>.
+    *
+    * @param   str   any string.
+    * @return  if the string argument occurs as a substring within this
+    *          object, then the index of the first character of the first
+    *          such substring is returned; if it does not occur as a
+    *          substring, <code>-1</code> is returned.
+    * @exception java.lang.NullPointerException if <code>str</code> is
+    *          <code>null</code>.
+    * @since   1.4
+    */
+   public int indexOf(String str) {
+       return buffer.indexOf(str);
+   }
+
+   /**
+    * Returns the index within this string of the first occurrence of the
+    * specified substring, starting at the specified index.  The integer
+    * returned is the smallest value <tt>k</tt> for which:
+    * <blockquote><pre>
+    *     k >= Math.min(fromIndex, str.length()) &&
+    *                   this.toString().startsWith(str, k)
+    * </pre></blockquote>
+    * If no such value of <i>k</i> exists, then -1 is returned.
+    *
+    * @param   str         the substring for which to search.
+    * @param   fromIndex   the index from which to start the search.
+    * @return  the index within this string of the first occurrence of the
+    *          specified substring, starting at the specified index.
+    * @exception java.lang.NullPointerException if <code>str</code> is
+    *            <code>null</code>.
+    * @since   1.4
+    */
+   public synchronized int indexOf(String str, int fromIndex) {
+       return buffer.indexOf(str, fromIndex);
+   }
+
+   /**
+    * Returns the index within this string of the rightmost occurrence
+    * of the specified substring.  The rightmost empty string "" is
+    * considered to occur at the index value <code>this.length()</code>.
+    * The returned index is the largest value <i>k</i> such that
+    * <blockquote><pre>
+    * this.toString().startsWith(str, k)
+    * </pre></blockquote>
+    * is true.
+    *
+    * @param   str   the substring to search for.
+    * @return  if the string argument occurs one or more times as a substring
+    *          within this object, then the index of the first character of
+    *          the last such substring is returned. If it does not occur as
+    *          a substring, <code>-1</code> is returned.
+    * @exception java.lang.NullPointerException  if <code>str</code> is
+    *          <code>null</code>.
+    * @since   1.4
+    */
+   public synchronized int lastIndexOf(String str) {
+       return buffer.lastIndexOf(str);
+   }
+
+   /**
+    * Returns the index within this string of the last occurrence of the
+    * specified substring. The integer returned is the largest value <i>k</i>
+    * such that:
+    * <blockquote><pre>
+    *     k <= Math.min(fromIndex, str.length()) &&
+    *                   this.toString().startsWith(str, k)
+    * </pre></blockquote>
+    * If no such value of <i>k</i> exists, then -1 is returned.
+    *
+    * @param   str         the substring to search for.
+    * @param   fromIndex   the index to start the search from.
+    * @return  the index within this string of the last occurrence of the
+    *          specified substring.
+    * @exception java.lang.NullPointerException if <code>str</code> is
+    *          <code>null</code>.
+    * @since   1.4
+    */
+   public synchronized int lastIndexOf(String str, int fromIndex) {
+       return buffer.lastIndexOf(str, fromIndex);
+   }
+   
+   /*
+    * The character sequence contained in this string buffer is
+    * replaced by the reverse of the sequence.
+    * <p>
+    * Let <i>n</i> be the length of the old character sequence, the one
+    * contained in the string buffer just prior to execution of the
+    * <code>reverse</code> method. Then the character at index <i>k</i> in
+    * the new character sequence is equal to the character at index
+    * <i>n-k-1</i> in the old character sequence.
+    *
+    * @return	a reference to this <code>ReuseStringBuffer</code> object.
+    */
+   public synchronized ReuseStringBuffer reverse() {
+      buffer.reverse();
+      return this;
+   }
+   
+   /* (non-Javadoc)
+    * @see java.lang.Object#toString()
+    */
+   public String toString() {
+      return buffer.toString();
+   }
+   
+   
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/SQLIdentifier.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/SQLIdentifier.java
new file mode 100644
index 0000000..c20d437
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/SQLIdentifier.java
@@ -0,0 +1,9278 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
+import java.util.Vector;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinitionRegistry;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo;
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * The main methods of this class help handle ordinary and delimited SQL identifiers,
+ * and can be understood according to the origin of the identifier
+ * and their intended use:
+ * <dl>
+ * <dt><b>Identifiers from DB2 catalogs:</b>
+ * <dd>
+ * <ul>
+ * <li>{@link #isDBIDOrdinary(String) boolean isDBIDOrdinary(id)}
+ * <br>{@link #isDBIDOrdinary(String,int) boolean isDBIDOrdinary(id, platforms)}
+ * <br>These methods are used when retrieving an SQL identifier from DB2,
+ * where the delimiters have been dropped and lower-case characters folded to upper case.
+ * <li>{@link #convertDBID(String,char) String convertDBID(id, delimiter)}
+ * <br>{@link #convertDBID(String,char,int) String convertDBID(id, delimiter, platforms)}
+ * <br>These methods are used when retrieving an SQL identifier from DB2,
+ * where the delimiters have been dropped, so that any needed delimiters
+ * are restored.
+ * </ul>
+ * <dt><b>Identifiers from user input:</b>
+ * <dd>
+ * <ul>
+ * <li>For comparison with DB2 catalog values:
+ * <ul>
+ * <li>{@link #isUserInputOrdinary(String) boolean isUserInputOrdinary(id)}
+ * <br>{@link #isUserInputOrdinary(String,int) boolean isUserInputOrdinary(id, platforms)}
+ * <br>{@link #isUserInputOrdinary(String,char,int) boolean isUserInputOrdinary(id, delimiter, platforms)}
+ * <br>These methods are used when processing an SQL identifier from user input,
+ * where delimiters may or may not be provided.
+ * <li>{@link #convertUserInput(String,char) String convertUserInput(id, delimiter)}
+ * <br>{@link #convertUserInput(String,char,int) String convertUserInput(id, delimiter, platforms)}
+ * <br>These methods are used to prepare an SQL identifier from user input
+ * as DB2 would store it.
+ * </ul>
+ * <li>For composition of SQL statements, when the interface
+ * automatically delimits an identifier:
+ * <ul>
+ * <li>{@link #isUserInputOrdinary(String) boolean isUserInputOrdinary(id)}
+ * <br>{@link #isUserInputOrdinary(String,int) boolean isUserInputOrdinary(id, platforms)}
+ * <br>{@link #isUserInputOrdinary(String,char,int) boolean isUserInputOrdinary(id, delimiter, platforms)}
+ * <br>These methods are used when processing an SQL identifier from user input,
+ * where delimiters may or may not be provided.
+ * <li>{@link #convertDBID(String,char) String convertDBID(id, delimiter)}
+ * <br>{@link #convertDBID(String,char,int) String convertDBID(id, delimiter, platforms)}
+ * <br>These methods are used to prepare an SQL identifier from user input
+ * for use in an SQL statement.
+ * </ul>
+ * </ul>
+ * </dl>
+ * <p>
+ * Other methods provide supporting function.
+ * <p>
+ * The methods implement the following differences between platforms:
+ * <ul>
+ * <li>Linux, UNIX, Windows, and OS/2 (LUWO) allow characters from extended
+ * character sets in ordinary identifiers; OS/390 allows DBCS if they are bracketed
+ * with shift-out and shift-in characters. <b>This code currently does
+ * not handle shift-out and shift-in characters.</b>
+ * <li>OS/400 <i>does not</i> allow internal delimiters;
+ * LUWO and OS/390 <i>do</i> allow them.
+ * <li>LUWO and OS/400 ignore trailing blanks in an ordinary identifier,
+ * whether it is delimited or not. <b>Need to check 390.</b>
+ * <li>OS/390 lets users set the delimiter (escape character).
+ * <li>There are differences in reserved words.
+ * </ul>
+ * <p>
+ * For definitions of an ordinary SQL identifier see the online documentation:
+ * <ul>
+ * <li><a href="ftp://ftp.software.ibm.com/ps/products/db2/info/vr6/htm/db2s0/sqlidts.htm#hdrsqlidts">
+ * LUWO ordinary SQL identifiers</a>
+ * <li><a href="ftp://ftp.software.ibm.com/ps/products/db2/info/vr6/htm/db2s0/ch2char.htm#IDX5919">
+ * LUWO letters</a>
+ * <li><a href="http://www.unicode.org/charts/">
+ * The extended Unicode character sets</a>
+ * <li><a href="http://www.s390.ibm.com:80/bookmgr-cgi/bookmgr.cmd/BOOKS/DSNSQ0G2/3%2e3%2e1?SHELF=DSNSH0G3">
+ * OS/390 SQL identifiers</a>
+ * <li><a href="http://www.s390.ibm.com:80/bookmgr-cgi/bookmgr.cmd/BOOKS/DSNSQ0G2/3%2e1?SHELF=DSNSH0G3">
+ * OS/390 letters</a>
+ * <li><a href="http://publib.boulder.ibm.com/pubs/html/as400/v4r4/ic2924/info/db2/rbafzmst38.htm#HDRSQLIDTS">
+ * OS/400 SQL identifiers</a>
+ * <li><a href="ftp://ftp.software.ibm.com/ps/products/db2/info/vr6/htm/db2s0/db2s0476.htm">
+ * ISO/ANS SQL92 Reserved Words</a>
+ * <li><a href="ftp://ftp.software.ibm.com/ps/products/db2/info/vr6/htm/db2s0/db2s0474.htm">
+ * Reserved words for LUWO</a>
+ * <li><a href="http://www.s390.ibm.com:80/bookmgr-cgi/bookmgr.cmd/BOOKS/DSNSQ0G2/E%2e0?SHELF=DSNSH0G3#HDRKEYWD">
+ * Reserved words for OS/390</a>
+ * <li><a href="http://publib.boulder.ibm.com/pubs/html/as400/v4r4/ic2924/info/db2/rbafzmst156.htm#HDRRESWORD">
+ * Reserved words for OS/400</a>
+ * <li><a href="ftp://ftp.software.ibm.com/ps/products/db2/info/vr6/htm/db2s0/db2s0473.htm">
+ * Reserved schemas</a>
+ * <li><a href="http://manuals.sybase.com:80/onlinebooks/group-as/asg1200e/aserefmn/@Generic__BookTextView/29609;pt=28169#X">
+ * Sybase SQL Identifiers</a>
+ * </ul>
+ * <p>
+ * @author Thomas Sharp, sharpt@us.ibm.com
+ */
+public class SQLIdentifier
+{
+// Test main API; deliver only commented out.
+//   public static void main(String[] args)
+//   {
+//      String r = convertAuthID(args[0], DEFAULT_DELIM, PLATFORM_INFORMIX);
+//      System.out.println("SQLIdentifier.main authid: " + r);
+//   }
+
+   /** Use with NLS.bind to construct qualified SQL identifiers. See genQualifiedName. */
+   public static String QUALIFIED_NAME_TEMPLATE = "{0}.{1}"; //$NON-NLS-1$
+
+   /** Any platform. */
+   public static final int PLATFORM_ANY = 0x0;
+   /** LUWO: Linux, UNIX, Windows, and OS/2. */
+   public static final int PLATFORM_LUWO = 0x1;
+   /** OS/390, z/OS. */
+   public static final int PLATFORM_390 = 0x2;
+   /** OS/400, iSeries. */
+   public static final int PLATFORM_400 = 0x4;
+   /** LUWO, z/OS, and iSeries */
+   public static final int PLATFORM_DB2 = PLATFORM_LUWO & PLATFORM_390 & PLATFORM_400;
+   /** Cloudscape. */
+   public static final int PLATFORM_CLOUDSCAPE = 0x8;
+   /** Derby. */
+   public static final int PLATFORM_DERBY = 0x8;
+   /** LUWO, 390, 400, and Cloudscape */
+   public static final int PLATFORM_ALL = 0xF;
+   /** Informix. */
+   public static final int PLATFORM_INFORMIX = 0x20;
+   /** Oracle. */
+   public static final int PLATFORM_ORACLE = 0x40;
+   /** Sybase. */
+   public static final int PLATFORM_SYBASE = 0x80;
+   /** SQL Server. */
+   public static final int PLATFORM_SQLSERVER = 0x100;
+   /** MySQL. */
+   public static final int PLATFORM_MYSQL= 0x200;
+   /** Any other platform. */
+   public static final int PLATFORM_OTHER = 0x10000000;
+
+   /** Hash key for OS/390, z/OS */
+   public static final String PLATFORM_390_KEY = "390_PLATFORM"; //$NON-NLS-1$
+   /** Hash key for OS/400, iSeries. */
+   public static final String PLATFORM_400_KEY = "400_PLATFORM"; //$NON-NLS-1$
+   /** Hash key for LUWO: Linux, UNIX, Windows, and OS/2. */
+   public static final String PLATFORM_LUWO_KEY = "LUWO_PLATFORM"; //$NON-NLS-1$
+   /** Hash key for Cloudscape. */
+   public static final String PLATFORM_CLOUDSCAPE_KEY = "CLOUDSCAPE_PLATFORM"; //$NON-NLS-1$
+   /** Hash key for any other platform. */
+   public static final String PLATFORM_OTHER_KEY = "OTHER_PLATFORM"; //$NON-NLS-1$
+
+   /** For identifying DatabaseDefinitions vendor names for DB2 for zSeries. */
+   public static final String DB2_ZSERIES = "zSeries"; //$NON-NLS-1$
+   /** For identifying DatabaseDefinitions vendor names for DB2 for iSeries. */
+   public static final String DB2_ISERIES = "iSeries"; //$NON-NLS-1$
+   /** For identifying DatabaseDefinitions vendor names for DB2 for workstation. */
+   public static final String DB2_LUW0 = "DB2 UDB"; // and not zSeries or iSeries;  //$NON-NLS-1$
+   /** For identifying DatabaseDefinitions vendor names for IBM Cloudscape. */
+   public static final String CLOUDSCAPE = "Cloudscape"; //$NON-NLS-1$
+   /** For identifying DatabaseDefinitions vendor names for Derby. */
+   public static final String DERBY = "Derby"; //$NON-NLS-1$
+   /** For identifying DatabaseDefinitions vendor names for Informix. */
+   public static final String INFORMIX = "Informix"; //$NON-NLS-1$
+   /** For identifying DatabaseDefinitions vendor names for Oracle. */
+   public static final String ORACLE = "Oracle"; //$NON-NLS-1$
+   /** For identifying DatabaseDefinitions vendor names for Sybase. */
+   public static final String SYBASE = "Sybase"; //$NON-NLS-1$
+   /** For identifying DatabaseDefinitions vendor names for SQL Server. */
+   public static final String SQLSERVER = "SQL Server"; //$NON-NLS-1$
+   /** For identifying DatabaseDefinitions vendor names for MySQL. */
+   public static final String MYSQL = "MySql"; //$NON-NLS-1$
+
+   /** String containing the valid ordinary identifier digits. */
+   protected static String ordinaryDigits;
+
+   /** Hashtable to remember valid ordinary identifier HashSets by platform name. */
+   protected static Hashtable<Object, HashSet<Character>> ordinaryFlagsSet;
+   protected static String ordinaryWideDigits;
+   /** Temporary list of UNO languages where we have good character sets. */
+   protected static ArrayList<String> langsUNO;
+
+   /** Set of reserved words for DB2 UDB for LUWO. */
+   protected static List<String> luwoReserved;
+
+   /** Set of reserved words for DB2 UDB for OS/390. */
+   protected static List<String> os390Reserved;
+
+   /** Set of reserved words for DB2 UDB for OS/400. */
+   protected static List<String> os400Reserved;
+
+   /** Set of reserved words for IBM Cloudscape. */
+   protected static List<String> cloudscapeReserved;
+
+   /** Array containing Characters for the valid ordinary identifier characters for other databases. */
+   protected static HashSet<Character> otherOrdinaryFlags;
+
+   /** Set of reserved schemas. */
+   protected static Set<String> schemaReserved;
+   /** All of the above. */
+   public static final int TRIM_ALL = 0x7;
+   /** Trim from the left and the right.*/
+   public static final int TRIM_BOTH = 0x3;
+   /** Trim inside the specified delimiter from the right. */
+   public static final int TRIM_INSIDE = 0x4;
+
+   /** Trim from the left. */
+   public static final int TRIM_LEFT = 0x1;
+   /** Trim from the right.*/
+   public static final int TRIM_RIGHT = 0x2;
+
+   public final static char DEFAULT_DELIM = '"';
+   public final static String DEFAULT_DELIM_STRING = "\""; //$NON-NLS-1$
+   public final static char DEFAULT_SQUOTE = '\'';
+   public final static String EMPTY_STRING = ""; //$NON-NLS-1$
+   
+   /**
+    * Returns the input authorization ID in SQL format.
+    * Folds to upper case if the ID would be upper-cased in catalog format.
+    * <p>
+    * @param  id        An SQL identifier.
+    * @param  conInfo   Describes the database connection.
+    * @return The authorization ID converted to a SQL identifier in SQL format
+    * @see #convertAuthID(String, char, int)
+    */
+   public static String convertAuthID(String id, ConnectionInfo conInfo)
+   {
+      char delimiter = getDelimiter(conInfo);
+      int platform = getPlatform(conInfo);
+      return convertAuthID(id, delimiter, platform);
+   }
+   
+   /**
+    * Returns the input authorization ID in SQL format.
+    * Folds to upper case if the ID would be upper-cased in catalog format.
+    * <p>
+    * @param  id      An SQL identifier.
+    * @param  dbDef   Describes the database connection.
+    * @return The authorization ID converted to a SQL identifier in SQL format
+    * @see #convertAuthID(String, char, int)
+    */
+   public static String convertAuthID(String id, DatabaseDefinition dbDef)
+   {
+      char delimiter = getDelimiter(dbDef);
+      int platform = getPlatform(dbDef);
+      return convertAuthID(id, delimiter, platform);
+   }
+
+
+   /**
+    * Returns the input authorization ID in SQL format.
+    * Folds to upper case if the ID would be upper-cased in catalog format.
+    * <p>
+    * @param  id        An SQL identifier.
+    * @param delim      The delimiter defined as the escape character
+    * on the DB2 platform or platforms.
+    * @param  platforms  The sum of platform constants.
+    * @return The authorization ID converted to a SQL identifier in SQL format.
+    */
+   public static String convertAuthID(String id, char delim, int platforms)
+   {
+      if ((platforms & PLATFORM_INFORMIX) == 0 && isUserInputOrdinary(id, delim, platforms))
+      {
+         return id.toUpperCase();
+      }
+      else
+      {
+         String sqlid = convertDBID(id, delim, platforms, false);
+         boolean reserved = isReservedIdentifier(sqlid, delim, platforms);
+         if (reserved)
+         {
+            StringBuffer sb = new StringBuffer();
+            sb.insert(0, delim).append(sqlid).append(delim);
+            return sb.toString();
+         }
+         return sqlid;
+      }
+   }
+
+   /**
+    * Returns the input SQL identifier as the database at
+    * the given connection would store it in its catalog.
+    * <p>Equivalent to convertUserInput(String id, char delimiter, int platforms).
+    * <p>
+    * @param  id        An SQL identifier.
+    * @param  conInfo   Describes the database connection.
+    * @return The converted SQL identifier.
+    * @see #convertUserInput(String, char, int)
+    */
+   public static String toCatalogFormat(String id, ConnectionInfo conInfo)
+   {
+      char delimiter = getDelimiter(conInfo);
+      return convertUserInput(id, delimiter, getPlatform(conInfo));
+   }
+
+   /**
+    * Returns the input SQL identifier as a database for 
+    * the given definition would store it in its catalog.
+    * <p>Equivalent to convertUserInput(String id, char delimiter, int platforms).
+    * <p>
+    * @param  id        An SQL identifier.
+    * @param  dbDef     Describes the database.
+    * @return The converted SQL identifier.
+    * @see #convertUserInput(String, char, int)
+    */
+   public static String toCatalogFormat(String id, DatabaseDefinition dbDef)
+   {
+      char delimiter = getDelimiter(dbDef);
+      return convertUserInput(id, delimiter, getPlatform(dbDef));
+   }
+
+   /**
+    * Returns the input SQL identifier ready to be used in an SQL statement
+    * for the given connection.
+    * <p>Equivalent to convertDBID(String id, char delimiter, int platforms).
+    * <p>
+    * @param  id        An SQL identifier.
+    * @param  conInfo   Describes the database connection.
+    * @return The converted SQL identifier.
+    * @see #convertDBID(String, char, int)
+    */
+   public static String toSQLFormat(String id, ConnectionInfo conInfo)
+   {
+      char delimiter = getDelimiter(conInfo);
+      int platform = getPlatform(conInfo);
+      String sqlid = convertDBID(id, delimiter, platform, false);      
+      boolean reserved;
+      if (platform > PLATFORM_ALL)
+         reserved = isReservedIdentifier(sqlid, conInfo);
+      else
+         reserved = isReservedIdentifier(sqlid, delimiter, platform);
+      if (reserved)
+      {
+         StringBuffer sb = new StringBuffer();
+         sb.insert(0, delimiter).append(sqlid).append(delimiter);
+         return sb.toString();
+      }
+      return sqlid;
+   }
+
+   /**
+    * Returns the input SQL identifier ready to be used in an SQL statement
+    * for the given database definition.
+    * <p>Equivalent to convertDBID(String id, char delimiter, int platforms).
+    * <p>
+    * @param  id        An SQL identifier.
+    * @param  dbDef     Describes the database.
+    * @return The converted SQL identifier.
+    * @see #convertDBID(String, char, int)
+    */
+   public static String toSQLFormat(String id, DatabaseDefinition dbDef)
+   {
+      char delimiter = getDelimiter(dbDef);
+      int platform = getPlatform(dbDef);
+      String sqlid = convertDBID(id, delimiter, platform, false);
+      boolean reserved;
+      if (platform > PLATFORM_ALL)
+         reserved = isReservedIdentifier(sqlid, dbDef);
+      else
+         reserved = isReservedIdentifier(sqlid, delimiter, platform);
+      if (reserved)
+      {
+         StringBuffer sb = new StringBuffer();
+         sb.insert(0, delimiter).append(sqlid).append(delimiter);
+         return sb.toString();
+      }
+      return sqlid;
+   }
+
+   /**
+    * Returns true if the two SQL identifiers match to the length of prefix.
+    * Handles delimiters for both id and prefix.
+    * <p>
+    * @param  id  An SQL identifier
+    * @param  prefix  The beginning of an SQL identifier
+    * @param  delimiter  The delimiter defined as the escape character
+    * @return  True if the two SQL identifiers match to the length of prefix.
+    */
+   public static boolean beginsWith(String id, String prefix, char delimiter)
+   {
+      String nid = trim(id,TRIM_ALL,delimiter), pref = trim(prefix,TRIM_ALL,delimiter);
+      if (pref.charAt(0) == delimiter)
+      {
+         int plen = pref.length();
+         // Remove leading delimiter
+         if (pref.charAt(plen - 1) == delimiter)
+            // Remove trailing delimiter, if any
+            pref = pref.substring(1, plen - 2);
+         else
+            pref = pref.substring(1);
+      }
+      else
+      {
+         pref = pref.toUpperCase();
+      }
+      if (nid.charAt(0) == delimiter)
+      {
+         if (nid.length() + 1 < pref.length())
+            return false;
+         nid = nid.substring(1, pref.length() + 1);
+      }
+      else
+      {
+         if (nid.length() < pref.length())
+            return false;
+         nid = (nid.substring(0, pref.length())).toUpperCase();
+      }
+      if (pref.equals(nid))
+         return true;
+      else
+         return false;
+   }
+
+   /**
+    * Checks the passed uniqueName is in the passed Enumeration of names and returns
+    * true if found, false otherwise.
+    *
+    * @param names Array of names
+    * @param uniqueName The name to be checked.
+    * @param  delimiter  The delimiter defined as the escape character
+    *
+    * @return True if found  false otherwise.
+    */
+   public static boolean checkName(Enumeration<String> e, String identifier, char delimiter)
+   {
+      while (e.hasMoreElements())
+      {
+         if (equals(e.nextElement(), identifier, delimiter))
+            return true;
+      }
+      return false;
+   }
+
+   /**
+    * Returns a new identifier concatenating the toString of the object
+    * (before the closing delimiter if need be).
+    * Assumes that the name is well formed, ending with a delimiter if it
+    * begins with one.
+    * <p>
+    * @param  id  The starting identifier
+    * @param  add  The object to add
+    * @param  delimiter  The delimiter defined as the escape character
+    * @return  The resulting identifier
+    */
+   public static String concatIdentifier(String id, Object add, char delimiter)
+   {
+      String nid = trim(id,TRIM_ALL,delimiter);
+      int epos = nid.length() - 1;
+      if (nid.charAt(epos) == delimiter)
+      {
+			StringBuffer sb = new StringBuffer();
+         sb.append(nid.substring(0, epos)).append(add.toString()).append(delimiter);
+			return sb.toString();
+      }
+      else
+      {
+			StringBuffer sb = new StringBuffer();
+         sb.append(nid).append(add.toString());
+			return sb.toString();
+      }
+   }
+
+   /**
+    * Returns a new identifier concatenating the number
+    * (before the closing delimiter if need be).
+    * Assumes that the name is well formed, ending with a delimiter if it
+    * begins with one.
+    * <p>
+    * @param  id  The starting identifier
+    * @param  add  The number to add
+    * @param  delimiter  The delimiter defined as the escape character
+    * @return  The resulting identifier
+    */
+   public static String concatIdentifier(String id, int add, char delimiter)
+   {
+      return concatIdentifier(id, new Integer(add), delimiter);
+   }
+
+   /** 
+    * Return a unique name for adding an attribute by appending a count to the
+    * passed string and also checking for the existence of the name in the vector.
+    *
+    * @param attrNames All attribute names in the type including the
+    *        inherited attribute names.
+    * @param name Name that we append count to.
+    *
+    * @return unique name of the attribute to be added.
+    */
+   public static String getUniqueVarName(Vector<String> varNames, String name) 
+   {
+      String uniqueName = name;
+      int count = 0;
+      boolean found = true;
+      if (varNames != null && varNames.size() > 0) 
+      {
+         while (found) 
+         {
+            uniqueName = concatIdentifier(name, ++count, DEFAULT_DELIM);
+            found = !isNameUnique(varNames, uniqueName);
+         }
+      } else 
+      {
+         uniqueName = concatIdentifier(name, ++count, DEFAULT_DELIM);
+      }
+      return uniqueName;
+   }
+
+   /** 
+    * Checks the passed uniqueName is in the passed array names and returns
+    * false if found, true otherwise.
+    *
+    * @param names Array of names
+    * @param uniqueName The name to be checked.
+    *
+    * @return true if found  false otherwise.
+    */
+   public static boolean isNameUnique(Vector<String> names, String uniqueName)  
+   {
+      int nameslength = names.size();
+      for (int i = 0; i < nameslength; i++) 
+      {
+         if (equals(names.get(i), uniqueName, DEFAULT_DELIM))
+            return false;
+      }
+      return true;
+   }
+  
+
+   /**
+    * Returns the input SQL identifier ready to be used in an SQL statement
+    * for DB2 UDB for LUWO.
+    * If the identifier is not an ordinary identifier, the return is delimited;
+    * otherwise, the return is the original identifier.
+    * This method is used when retrieving an SQL identifier from DB2,
+    * where the delimiters have been dropped, so that any needed delimiters
+    * are restored.
+    * <p>
+    * (Formerly named db2String.)
+    * <p>
+    * This method does not guarantee that the identifier is valid; it might violate
+    * other rules for identifiers, such as exceeding the maximum length.
+    * <p>
+    * For LUWO, OS/390, or OS/400 or a combination of platforms,
+    * see {@link #convertDBID(String,char,int) convertDBID(String, char, int)}.
+    * <p>
+    * @param  id        An SQL identifier.
+    * @param  delimiter  The delimiter defined as the escape character
+    * on the DB2 platform or platforms.
+    * @return  The converted SQL identifier.
+    * @see #convertDBID(String, char, int)
+    */
+   public static String convertDBID(String id, char delimiter)
+   {
+      return convertDBID(id, delimiter, PLATFORM_LUWO, true);
+   }
+
+   /**
+    * Returns the input SQL identifier ready to be used in an SQL statement
+    * for LUWO, OS/390, or OS/400 or a combination of platforms.
+    * @return convertDBID(String,char,int,true)
+    */
+   public static String convertDBID(String id, char delimiter, int platforms)
+   {
+      return convertDBID(id, delimiter, platforms, true);
+   }
+
+   /**
+    * Returns the input SQL identifier ready to be used in an SQL statement
+    * for LUWO, OS/390, or OS/400 or a combination of platforms.
+    * If the identifier is not an ordinary identifier, the return is delimited
+    * and any internal delimiters are doubled;
+    * otherwise, the return is the original identifier.
+    * This method is used when retrieving an SQL identifier from DB2,
+    * where the delimiters have been dropped, so that any needed delimiters
+    * are restored.
+    * <p>
+    * (Formerly named db2String.)
+    * <p>
+    * This method does not guarantee that the identifier is valid; it might violate
+    * other rules for identifiers, such as exceeding the maximum length.
+    * <p>
+    * @param  id        An SQL identifier.
+    * @param  delimiter  The delimiter defined as the escape character
+    * on the DB2 platform or platforms.
+    * @param  platforms  The sum of platform constants.
+    * @param  checkReserved whether or not identifier should be checked against
+    * list of reserved words when considering 'ordinaryness'.  Default true.
+    * @return  The converted SQL identifier for the specified platforms.
+    */
+   public static String convertDBID(String id, char delimiter, int platforms,
+            boolean checkReserved) //@d340004txu
+   {
+      // Note: much of this code is duplicated in method isDBOrdinary,
+      // so one of these methods should probably call the other.
+      if (id == null || id.length() == 0)
+      {
+         return id;
+      }
+      boolean ordinary = true; // Assume the id is ordinary
+		StringBuffer sb = new StringBuffer();
+      char ch = id.charAt(0);
+      if (ch == delimiter)
+      {
+          sb.append(ch);  // Double it
+          ordinary = false;
+      }
+      else if (!isOrdinaryUpperChar(ch, platforms))
+      {
+         ordinary = false;
+      }
+      sb.append(ch);
+      int range = id.length();
+      for (int c = 1; c < range; c++)
+      {
+         ch = id.charAt(c);
+         if (ch == delimiter)
+         {
+            sb.append(ch);  // Double it
+            ordinary = false;
+         }
+         else if (!isOrdinaryUpperChar(ch, platforms)
+                  && !isOrdinaryDigit(ch)
+                  && ch != '_')
+         {
+            ordinary = false;
+         }
+         sb.append(ch);
+      }
+      // @d322643 bgp 04Jun2004 - begin
+      // Check if the identifier is the same as a reserved word.
+      if (checkReserved && isReservedIdentifier(sb.toString(), delimiter, platforms))
+      {   //@d340004txu
+         ordinary = false;
+      }
+      // @d322643 bgp 04Jun2004 - end
+      if (!ordinary)
+      {
+         sb.insert(0, delimiter).append(delimiter);
+         return sb.toString();
+      }
+      return id;
+   }
+
+   /**
+    * Returns the user-input SQL identifier as DB2 for LUWO would store it.
+    * It is either converted to upper case,
+    * if it is an ordinary identifier <i>ignoring the case of each letter</i>,
+    * or delimited, if it cannot be an ordinary identifier.
+    * If the user has begun and ended it with a delimiter,
+    * then new delimiters are not added.
+    * <p>
+    * (Formerly named handleDB2Identifier.)
+    * <p>
+    * This method does not guarantee that the identifier is valid; it might violate
+    * other rules for identifiers, such as exceeding the maximum length,
+    * or failing to double internal delimiters.
+    * <p>
+    * For LUWO, OS/390, or OS/400 or a combination of platforms,
+    * see {@link #convertUserInput(String,char,int) convertUserInput(String, char, int)}.
+    * <p>
+    * @param  id        An SQL identifier.
+    * @param  delimiter  The delimiter defined as the escape character
+    * on the DB2 platform or platforms.
+    * @return  The converted SQL identifier.
+    * @see #convertUserInput(String, char, int)
+    */
+   public static String convertUserInput(String id, char delimiter)
+   {
+      return convertUserInput(id, delimiter, PLATFORM_LUWO);
+   }
+
+   /**
+    * Returns the input SQL identifier either converted to upper case,
+    * if it is an ordinary identifier <i>ignoring the case of each letter</i>,
+    * or delimited, if it cannot be an ordinary identifier,
+    * for LUWO, OS/390, or OS/400 or a combination of platforms.
+    * <p>
+    * (Formerly named handleDB2Identifier.)
+    * <p>
+    * This method does not guarantee that the identifier is valid; it might violate
+    * other rules for identifiers, such as exceeding the maximum length.
+    * <p>
+    * @param  id        An SQL identifier.
+    * @param  conInfo   For the connection information.
+    * @return  The converted SQL identifier for the specified platforms in catalog format.
+    */
+   public static String convertUserInput(String id, ConnectionInfo conInfo)
+   {
+      char delimiter = getDelimiter(conInfo);
+      int platforms = getPlatform(conInfo);
+      return convertUserInput(id, delimiter, platforms);
+   }
+
+   /**
+    * Returns the input SQL identifier either converted to upper case,
+    * if it is an ordinary identifier <i>ignoring the case of each letter</i>,
+    * or delimited, if it cannot be an ordinary identifier,
+    * for LUWO, OS/390, or OS/400 or a combination of platforms.
+    * <p>
+    * (Formerly named handleDB2Identifier.)
+    * <p>
+    * This method does not guarantee that the identifier is valid; it might violate
+    * other rules for identifiers, such as exceeding the maximum length.
+    * <p>
+    * @param  id        An SQL identifier.
+    * @param  dbdef     For the connection information.
+    * @return  The converted SQL identifier for the specified platforms in catalog format.
+    */
+   public static String convertUserInput(String id, DatabaseDefinition dbDef)
+   {
+      char delimiter = getDelimiter(dbDef);
+      int platforms = getPlatform(dbDef);
+      return convertUserInput(id, delimiter, platforms);
+   }
+   
+   /**
+    * Returns the input SQL identifier either converted to upper case,
+    * if it is an ordinary identifier <i>ignoring the case of each letter</i>,
+    * or delimited, if it cannot be an ordinary identifier,
+    * for LUWO, OS/390, or OS/400 or a combination of platforms.
+    * <p>
+    * (Formerly named handleDB2Identifier.)
+    * <p>
+    * This method does not guarantee that the identifier is valid; it might violate
+    * other rules for identifiers, such as exceeding the maximum length.
+    * <p>
+    * @param  id        An SQL identifier.
+    * @param  delimiter  The delimiter defined as the escape character
+    * on the DB2 platform or platforms.
+    * @param  platforms  The sum of platform constants.
+    * @return  The converted SQL identifier for the specified platforms in catalog format.
+    */
+   public static String convertUserInput(String id, char delimiter, int platforms)
+   {
+      if (id == null || id.length() == 0)
+      {
+         return id;
+      }
+      else if (trim(id,TRIM_LEFT,delimiter).length() == 0)
+      {
+         return EMPTY_STRING;
+      }
+      else if (trim(id,TRIM_LEFT,delimiter).charAt(0) == delimiter)
+      {
+         StringBuffer sb = new StringBuffer();
+         char ch;
+         id = trim(id,TRIM_ALL,delimiter);
+         int range = id.length() - 1;
+       
+         if (id.charAt(range) == delimiter)
+         {
+        	 range=range-1;
+         }
+
+        boolean precedingDelimiter=false;
+        for (int c = 1; c <= range; c++)
+        {
+            ch = id.charAt(c);
+            if (ch == delimiter) {
+         	   if(precedingDelimiter) {                      
+         		  precedingDelimiter=false;
+                }
+                else { 
+                	precedingDelimiter=true;
+         	        sb.append(ch);
+                }
+            } else {
+                precedingDelimiter=false;
+                sb.append(ch);
+            }
+        }
+
+		return sb.toString();
+      }
+      else
+      {
+         return (trim(id,TRIM_BOTH,delimiter)).toUpperCase();
+      }
+   }
+
+   /**
+    * Parses an SQL identifier to separate a qualifier.
+    * @param   docText  An SQL identifier, optionally qualified
+    * @param   conInfo  Describes the database connection.
+    * @param qualifierSeparator The character that separates a qualifier.
+    * Usually, this is a period, but for the system naming option on
+    * iSeries, this is a forward slash (/).
+    * @return A String array of 2 elements, where the second element
+    * will be the identifier that is qualified by the first element.
+    * The first element could be qualified.
+    * Any element can be null, but the array will never be null.
+    * @see SmartUtil.divideIdentifier(String, char).
+    */
+   public static String[] getIdentifierParts(String docText, ConnectionInfo conInfo)
+   {
+      return getIdentifierParts(docText, conInfo, '.');
+   }
+
+   /**
+    * Parses an SQL identifier to separate a qualifier.
+    * @param   docText  An SQL identifier, optionally qualified
+    * @param   dbDef    Describes a database.
+    * @return A String array of 2 elements, where the second element
+    * will be the identifier that is qualified by the first element.
+    * The first element could be qualified.
+    * Any element can be null, but the array will never be null.
+    * @see SmartUtil.divideIdentifier(String, char).
+    */
+   public static String[] getIdentifierParts(String docText, DatabaseDefinition dbDef)
+   {
+      return getIdentifierParts(docText, dbDef, '.');
+   }
+
+   /**
+    * Parses an SQL identifier to separate a qualifier.
+    * @param   docText  An SQL identifier, optionally qualified
+    * @param   conInfo  Describes the database connection.
+    * @param qualifierSeparator The character that separates a qualifier.
+    * Usually, this is a period, but for the system naming option on
+    * iSeries, this is a forward slash (/).
+    * @return A String array of 2 elements, where the second element
+    * will be the identifier that is qualified by the first element.
+    * The first element could be qualified.
+    * Any element can be null, but the array will never be null.
+    * @see SmartUtil.divideIdentifier(String, char, char).
+    */
+   public static String[] getIdentifierParts(String docText, ConnectionInfo conInfo, char qualifierSeparator)
+   {
+      char delim = getDelimiter(conInfo);
+      return getIdentifierParts(docText, delim, qualifierSeparator);
+   }
+
+   /**
+    * Parses an SQL identifier to separate a qualifier.
+    * @param   docText  An SQL identifier, optionally qualified.
+    * @param   dbDef    Describes the database.
+    * @param qualifierSeparator The character that separates a qualifier.
+    * Usually, this is a period, but for the system naming option on
+    * iSeries, this is a forward slash (/).
+    * @return A String array of 2 elements, where the second element
+    * will be the identifier that is qualified by the first element.
+    * The first element could be qualified.
+    * Any element can be null, but the array will never be null.
+    * @see SmartUtil.divideIdentifier(String, char, char).
+    */
+   public static String[] getIdentifierParts(String docText, DatabaseDefinition dbDef, char qualifierSeparator)
+   {
+      char delim = getDelimiter(dbDef);
+      return getIdentifierParts(docText, delim, qualifierSeparator);
+   }
+
+   /**
+    * Parses an SQL identifier to separate a qualifier.
+    * @param   docText  An SQL identifier, optionally qualified
+    * @param   delim    The delimiter for SQL identifiers.
+    * @param qualifierSeparator The character that separates a qualifier.
+    * Usually, this is a period, but for the system naming option on
+    * iSeries, this is a forward slash (/).
+    * @return A String array of 2 elements, where the second element
+    * will be the identifier that is qualified by the first element.
+    * The first element could be qualified.
+    * Any element can be null, but the array will never be null.
+    * @see SmartUtil.divideIdentifier(String, char, char).
+    */
+   public static String[] getIdentifierParts(String docText, char delim, char qualifierSeparator)
+   {
+      String[] parse = new String[2];
+      if (docText == null || docText.length() == 0)
+         return parse;
+      int dot = getSeparator(docText, delim, qualifierSeparator);
+      if (dot == -1 || dot == 0) // No separator or at the beginning; all identifier
+      {
+         parse[1] = docText;
+         
+      }
+      else if (dot == docText.length() - 1) // Separator at the end; all schema
+      {
+         parse[0] = docText.substring(0, dot);
+      }
+      else
+      {
+         parse[0] = docText.substring(0, dot);
+         parse[1] = docText.substring(dot + 1);
+      }
+      return parse;
+   }
+
+   /**
+    * Parses an SQL identifier to separate a potential qualifier.
+    * @param   docText, an SQL identifier, optionally qualified
+    * @param   part, one of the following:
+    * <dl compact>
+    * <dt>0   <dd>Return the schema, if any
+    * <dt>1   <dd>Return the unqualified identifier
+    * </dl>
+    * @param   conInfo   Describes the database connection.
+    * @return The identifier part requested
+    */
+   public static String getIdentifierPart(String docText, int part, ConnectionInfo conInfo)
+   {
+      return getIdentifierPart(docText, part, conInfo.getDatabaseDefinition());
+   }
+   /**
+    * Parses an SQL identifier to separate a potential qualifier.
+    * @param   docText, an SQL identifier, optionally qualified
+    * @param   part, one of the following:
+    * <dl compact>
+    * <dt>0   <dd>Return the schema, if any
+    * <dt>1   <dd>Return the unqualified identifier
+    * </dl>
+    * @param   dbDef   Describes the database connection.
+    * @return The identifier part requested
+    */
+   public static String getIdentifierPart(String docText, int part, DatabaseDefinition dbDef)
+   {
+      if (docText == null || docText.length() == 0)
+      {
+         return null;
+      }
+      int dot = getDot(docText, dbDef);
+      if (part == 0)  // Return the schema, if any 
+      {
+         if (dot <= 0)
+         {
+            return null;
+         }
+         else
+         {
+            return docText.substring(0, dot);
+         }
+      }
+      else  /* Return the identifier */
+      {
+         if (dot == -1)
+         {
+            return docText;
+            // No dot; assume it's all identifier
+         }
+         else
+         {
+            if (dot == docText.length())
+            {
+               return null;
+               // Dot at end; no identifier
+            }
+            else
+            {
+               return docText.substring(dot + 1);
+            }
+         }
+      }
+   }
+
+   /**
+    * Parses an SQL identifier to separate a potential qualifier
+    * and returns the name portion only.
+    * @param   docText, an SQL identifier, optionally qualified
+    * @param   conInfo  Describes the database connection.
+    * @return The name part
+    */
+   public static String getNameOnlyPart(String docText, ConnectionInfo conInfo)
+   {
+      return getNameOnlyPart(docText, conInfo.getDatabaseDefinition());
+   }
+   
+   /**
+    * Parses an SQL identifier to separate a potential qualifier
+    * and returns the name portion only.
+    * @param   docText, an SQL identifier, optionally qualified
+    * @param   conInfo  Describes the database connection.
+    * @return The name part
+    */
+   public static String getNameOnlyPart(String docText, DatabaseDefinition dbDef)
+   {
+      if (docText == null || docText.length() == 0)
+      {
+         return null;
+      }
+      int   dot = getDot(docText, dbDef);
+      // No dot , return the whole thing
+      if (dot == -1)
+      {
+         return docText;
+      }
+      // a dot was found, get the name part only
+      else if ((dot > 0) && (dot != docText.length()))
+      {
+         return docText.substring(dot + 1);
+      }
+      else     // anything else, something is weird
+      {
+         return null;
+      }
+   }
+
+   /**
+    * Parses an SQL identifier to find the dot separating a qualifier.
+    * Assumes that the qualifier is optional.
+    * @param   docText  The text to parse
+    * @param   conInfo  Describes the database connection.
+    * @return  The position of any dot separating a qualifier
+    * from an identifier in the input text.
+    * Return -1 if the dot is not found.
+    */
+   public static int getDot(String docText, ConnectionInfo conInfo)
+   {
+		return getSeparator(docText, getDelimiter(conInfo), '.');
+   }
+
+   /**
+    * Parses an SQL identifier to find the dot separating a qualifier.
+    * Assumes that the qualifier is optional.
+    * @param   docText  The text to parse
+    * @param   dbdef    Describes the database connection.
+    * @return  The position of any dot separating a qualifier
+    * from an identifier in the input text.
+    * Return -1 if the dot is not found.
+    */
+   public static int getDot(String docText, DatabaseDefinition dbdef)
+   {
+      return getSeparator(docText, getDelimiter(dbdef), '.');
+   }
+	
+   /**
+    * Parses an SQL identifier to find the dot separating a qualifier.
+    * Assumes that the qualifier is optional.
+    * @param   docText  The text to parse
+    * @param   conInfo  Describes the database connection.
+    * @param qualifierSeparator The character that separates a qualifier.
+    * @return  The position of any dot separating a qualifier
+    * from an identifier in the input text.
+    * Return -1 if the dot is not found.
+    */
+   public static int getSeparator(String docText, ConnectionInfo conInfo, char qualifierSeparator)
+   {
+		return getSeparator(docText, getDelimiter(conInfo), qualifierSeparator);
+   }
+
+   /**
+    * Parses an SQL identifier to separate a potential qualifier.
+    * Assumes that the qualifier is optional.
+    *
+    * @param  docText    The text to parse
+    * @param delim The delimiter character for an SQL identifier.
+    * @return  The position of any dot separating schema from identifier in the field.
+    */
+   public static int getDot(String docText, char delim)
+   {
+      return getSeparator(docText, delim, '.');
+   }
+
+   /**
+    * Parse an SQL identifier to separate a potential qualifier.
+    * @param  docText    The text to parse
+    * @param delim The delimiter character for an SQL identifier.
+    * @param qualifierSeparator The character that separates a qualifier.
+    * @return  The position of any dot separating schema from identifier in the field.
+    */
+   public static int getSeparator(String docText, char delim, char qualifierSeparator)
+   {
+      int docLen = docText.length();
+      if (docLen == 0)
+         return -1;
+      // How many qualifierSeparators?
+      int dot = -1;
+      int dots = 0;
+      int pos1 = docText.indexOf(qualifierSeparator, 0);
+      // No qualifierSeparator:
+      if (pos1 == -1)
+      {
+         return -1;
+      }
+      while (pos1 > -1)
+      {
+         dots++;
+         pos1 = docText.indexOf(qualifierSeparator, pos1 + 1);
+      }
+      // How many delimiters?
+      int delims = 0;
+      // First, replace doubled delimiters (they don't count):
+      ReuseStringBuffer sb = ReuseStringBuffer.getBuffer();
+      sb.append(delim).append(delim);
+      String ddelim = sb.toString();
+      sb.setLength(0);
+      sb.append(docText.charAt(0)); // Skip the first char.
+      pos1 = 1;
+      int pos2 = docText.indexOf(ddelim, 1);
+      while (pos2 > -1)
+      {
+         sb.append(docText.substring(pos1, pos2));
+         sb.append("--"); // hold the positions //$NON-NLS-1$
+         pos1 = pos2 + 2;
+         pos2 = docText.indexOf(ddelim, pos1);
+      }
+      if (pos1 < docLen) // add the tail
+      {
+         sb.append(docText.substring(pos1));
+      }
+      String buffed = ReuseStringBuffer.toString(sb);
+      // Then, count the single delimiters:
+      pos1 = 0;
+      pos2 = buffed.indexOf(delim, pos1);
+      while (pos2 > -1 && pos2 < buffed.length())
+      {
+         delims++;
+         pos2 = buffed.indexOf(delim, pos2 + 1);
+      }
+      // Does it begin or end with a delimiter?
+      //boolean beginDelim = (docText.charAt(docText.indexOf(docText.trim().charAt(0))) == DEFAULT_DELIM);
+      //boolean endDelim = (docText.trim().charAt(docText.trim().length() - 1) == DEFAULT_DELIM);
+      // Odd, or even number of delimiters:
+      if ((delims % 2) == 0) // Even
+      {
+         dot = buffed.lastIndexOf(qualifierSeparator);
+         pos1 = buffed.lastIndexOf(delim);
+         // Return the last dot after the last delimiter
+         if (dot > pos1)
+         {
+            return dot;
+         }
+         // Return the last dot after the second delimiter from the end
+         pos2 = buffed.lastIndexOf(delim, pos1 - 1);
+         while (dot > pos2 && dot > -1)
+         {
+            dot = buffed.lastIndexOf(qualifierSeparator, dot - 1);
+         }
+         if (dot > -1)
+         {
+            return dot;
+         }
+         return -1; //docText.lastIndexOf(qualifierSeparator);
+      }
+      else // Odd number of delims, which is an error
+      {
+         // Return the last dot after the last delimiter
+         dot  = docText.lastIndexOf(qualifierSeparator);
+         pos1 = docText.lastIndexOf(delim);
+         if (dot > pos1)
+         {
+            return dot;
+         }
+         // or return the last dot before the first delimiter
+         pos1 = docText.indexOf(delim);
+         dot = docText.lastIndexOf(qualifierSeparator, pos1);
+         if (dot < pos1)
+         {
+            return dot;
+         }
+         // Otherwise, return -1
+         return -1;
+      }
+   }
+
+   /**
+    * Returns true if two SQL identifiers in SQL format are "equal"
+    * for the given connection.
+    * <p>
+    * @param  id1       An SQL identifier in SQL format.
+    * @param  id2       An SQL identifier in SQL format.
+    * @param  conInfo   Describes the database connection.
+    * @return True if the two SQL identifiers are "equal."
+    * @see #equal(String, String, char, int)
+    */
+   public static boolean equals(String id1, String id2, ConnectionInfo conInfo)
+   {
+      char delimiter = getDelimiter(conInfo);
+      int platform = getPlatform(conInfo);
+      return equals(id1, id2, delimiter, platform);
+   }
+
+   /**
+    * Returns true if two SQL identifiers in SQL format are "equal"
+    * for the given connection.
+    * <p>
+    * @param  id1       An SQL identifier in SQL format.
+    * @param  id2       An SQL identifier in SQL format.
+    * @param  dbDef   Describes the database connection.
+    * @return True if the two SQL identifiers are "equal."
+    * @see #equal(String, String, char, int)
+    */
+   public static boolean equals(String id1, String id2, DatabaseDefinition dbDef)
+   {
+      char delimiter = getDelimiter(dbDef);
+      int platform = getPlatform(dbDef);
+      return equals(id1, id2, delimiter, platform);
+   }
+
+   /**
+    * Returns true if two SQL identifiers are "equal" for DB2 UDB for LUWO.
+    * Equality of SQL identifiers depends on whether they are delimited.
+    * If they are not delimited, they are automatically folded to upper case by DB2.
+    * This method assumes that a delimited identifier is properly formed, that is,
+    * that it has a closing delimiter, and that an ordinary identifier is valid,
+    * that is, that it doesn't include a delimiter.
+    * <p>
+    * @param  ident1  The first identifier
+    * @param  ident2  The second identifier
+    * @param  delimiter  The delimiter defined as the escape character
+    * @return  True if the two SQL identifiers are "equal."
+    */
+   public static boolean equals(String ident1, String ident2, char delimiter)
+   {
+      return equals(ident1, ident2, delimiter, PLATFORM_LUWO);
+   }
+
+   /**
+    * Returns true if two SQL identifiers in SQL format are "equal"
+    * for LUWO, OS/390, or OS/400 or a combination of platforms.
+    * Equality of SQL identifiers depends on whether they are delimited.
+    * If they are not delimited, they are automatically folded to upper case by DB2.
+    * This method assumes that a delimited identifier is properly formed, that is,
+    * that it has a closing delimiter, and that an ordinary identifier is valid,
+    * that is, that it doesn't include a delimiter.
+    * <p>
+    * @param  ident1  The first identifier
+    * @param  ident2  The second identifier
+    * @param  delimiter  The delimiter defined as the escape character
+    * @param  platforms  The sum of platform constants.
+    * @return  True if the two SQL identifiers are "equal."
+    */
+   public static boolean equals(String ident1, String ident2, char delimiter, int platforms)
+   {
+      return convertDBID(ident1, delimiter, platforms).equals(convertDBID(ident2, delimiter, platforms));
+   }
+
+   /**
+    * Determines the length in the database catalog of a given Java String.
+    * Catalog length depends on whether the database is in UTF-8.
+    * This method assumes Unicode catalogs for z/OS V8 and LUWO V9 and later.
+    */
+   public static long getCatalogLength(String text, ConnectionInfo aConInfo)
+   {
+      long len = 0;
+      int p = getPlatform(aConInfo);
+      int[] v = getVersion(aConInfo);
+      if (p == PLATFORM_390 && v[0] > 7)
+         len = getUTF8Length(text);
+      else if (p == PLATFORM_LUWO && v[0] > 8)
+         len = getUTF8Length(text);
+      else
+         len = text.length();
+      return len;
+   }
+
+   /**
+    * Determines the length in the database catalog of a given Java String.
+    * Catalog length depends on whether the database is in UTF-8.
+    * This method assumes Unicode catalogs for z/OS V8 and LUWO V9 and later.
+    */
+   public static long getCatalogLength(String text, DatabaseDefinition dbDef)
+   {
+      long len = 0;
+      int p = getPlatform(dbDef);
+      int[] v = getVersion(dbDef);
+      if (p == PLATFORM_390 && v[0] > 7)
+         len = getUTF8Length(text);
+      else if (p == PLATFORM_LUWO && v[0] > 8)
+         len = getUTF8Length(text);
+      else
+         len = text.length();
+      return len;
+   }
+
+   /**
+    * Determines the length in UTF-8 of a given Java String.
+    * <p>
+    * Each character in a Java String is has a numeric value.
+    * The following table defines the number of octets needed to
+    * represent this value by its numeric range.
+    * This table is derived from the description of UTF-8
+    * at http://ietf.org/rfc/rfc2279.txt.
+    * <dl>
+    * <dt><b>UCS-4 range (in hex)</b>  <dd><b>Number of UTF-8 octets</b>
+    * <dt>0000 0001-0000 007F <dd>1
+    * <dt>0000 0080-0000 07FF <dd>2
+    * <dt>0000 0800-0000 FFFF <dd>3
+    * <dt>0001 0000-001F FFFF <dd>4
+    * <dt>0020 0000-03FF FFFF <dd>5
+    * <dt>0400 0000-7FFF FFFF <dd>6
+    * </dl>
+    * <p>
+    * <b>Terminology:</b>
+    * <dl>
+    * <dt>UCS <dd>Universal Character Set
+    * <dt>UTF <dd>UCS Transformation Format, an 8-bit encoding form
+    * in which each unicode character is encoded using a
+    * variable number of "octets."
+    * </dl>
+    * @param  text An arbitrary string or an identifier in catalog format.
+    * @author Thomas Sharp
+    */
+   public static long getUTF8Length(String text)
+   {
+      long len = 0;
+      if (text != null)
+      {
+         long n = text.length();
+         char c;
+         for (int i = 0; i < n; i++)
+         {
+            c = text.charAt(i);
+            if (c < 128)           // under x0000 0080
+               len += 1;
+            else if (c < 2048)     // under x0000 0800
+               len += 2;
+            else if (c < 65536)    // under x0001 0000
+               len += 3;
+            else if (c < 2097152)  // under x0020 0000
+               len += 4;
+            else if (c < 67108864) // under x0400 0000
+               len += 5;
+            else                   // up to x7FFF FFFF
+               len += 6;
+         }
+      }
+      return len;
+   }
+
+   /**
+    * Gets the delimiter (escape character) used to quote SQL identifiers.
+    * @param conInfo A ConnectionInfo
+    * @return  The delimiter returned by the JDBC implementation,
+    * or a double quotation mark if we can't get the delimiter from the ConnectionInfo.
+    */
+   public static String getDelimiterString(ConnectionInfo conInfo)
+   {
+      if (conInfo != null)
+      {
+         String delim = conInfo.getIdentifierQuoteString();
+         // indentifierQuoteString can be null in DTP
+         if (delim != null) 
+         {
+            delim = delim.trim();
+            if (delim.length() > 0)
+               return delim;
+         }
+      }
+      return DEFAULT_DELIM_STRING;
+   }
+
+   /**
+    * Gets the delimiter (escape character) used to quote SQL identifiers.
+    * @param conInfo A ConnectionInfo
+    * @return  The delimiter returned by the JDBC implementation,
+    * or a double quotation mark if we can't get the delimiter from the ConnectionInfo.
+    */
+   public static char getDelimiter(ConnectionInfo conInfo)
+   {
+      if (conInfo != null)
+      {
+         String delim = conInfo.getIdentifierQuoteString();
+         
+         // indentifierQuoteString can be null in DTP
+         if (delim != null) {
+        	 delim = delim.trim();
+         
+        	 if (delim.length() > 0)
+        		 return delim.charAt(0);
+         }
+      }
+      return DEFAULT_DELIM;
+   }
+
+   /**
+    * @deprecated. Replace this with conInfo.getIdentifierQuoteString()
+    * Returns the delimiter (escape character) used to quote SQL identifiers,
+    * given a Connection object.
+    * <p>
+    * @param  connection A live Connection.
+    * @return  The delimiter returned by the JDBC implementation,
+    * or a double quotation mark if we can't get the delimiter from the connection.
+    */
+   public static char getDelimiter(Connection connection)
+   {
+      try
+      {
+         return connection.getMetaData().getIdentifierQuoteString().charAt(0);
+      }
+      catch (SQLException e)
+      {
+         return DEFAULT_DELIM;
+      }
+   }
+
+   /**
+    * Gets the delimiter (escape character) used to quote SQL identifiers as a String.
+    * User getDelimiter(ConnectionInfo) or getDelimiter(Connection) if you can.
+    * @param dbDef A DatabaseDefinition
+    * @return  The delimiter defined in the definition file.
+    * or a double quotation mark if we can't get the delimiter from the DatabaseDefinition.
+    */
+   public static String getDelimiterString(DatabaseDefinition dbDef)
+   {
+      if (dbDef != null )
+      {
+         try
+         {
+            String delim = dbDef.getIdentifierQuoteString();
+            if (delim != null)
+            {
+               delim = delim.trim();
+               if (delim.length() > 0 && delim.charAt(0) != '\\') // TODO: Bug in DatabaseDefinition returns backslash
+                  return delim;
+            }
+         }
+         catch (NullPointerException npe) {
+            // do nothing
+         }
+      }
+      return DEFAULT_DELIM_STRING;
+   }
+
+   /**
+    * Gets the delimiter (escape character) used to quote SQL identifiers.
+    * User getDelimiter(ConnectionInfo) or getDelimiter(Connection) if you can.
+    * @param dbDef A DatabaseDefinition
+    * @return  The delimiter defined in the definition file.
+    * or a double quotation mark if we can't get the delimiter from the DatabaseDefinition.
+    */
+   public static char getDelimiter(DatabaseDefinition dbDef)
+   {
+      if (dbDef != null)
+      {
+         try
+         {
+            String delim = dbDef.getIdentifierQuoteString();
+            if (delim != null)
+            {
+               delim = delim.trim();
+               if (delim.length() > 0 && delim.charAt(0) != '\\') // TODO: Bug in DatabaseDefinition returns backslash
+                  return delim.charAt(0);
+            }
+         }
+         catch (NullPointerException npe) {
+            // do nothing
+         }
+      }
+      return DEFAULT_DELIM;
+   }
+
+   /**
+    * Returns the code for the DB2 platform represented by
+    * a given Connection object.
+    * <p>
+    * @param   conInfo The connection information object
+    * @return  The platform code.
+    */
+   public static int getPlatform(ConnectionInfo conInfo)
+   {
+      if (conInfo == null)
+         return PLATFORM_ANY;
+      DatabaseDefinition dbDef = conInfo.getDatabaseDefinition();
+      return getPlatform(dbDef);
+   }
+
+   /**
+    * Returns the code for the DB2 platform represented by
+    * a given DatabaseDefinition object.
+    * <p>
+    * @param dbDef A DatabaseDefinition.
+    * @return The platform code.
+    */
+   public static int getPlatform(DatabaseDefinition dbDef)
+   {
+      if (dbDef != null)
+      {
+      String product = dbDef.getProduct();
+      if (product != null)
+      {
+         if (product.indexOf(DB2_ZSERIES) > -1)
+            return PLATFORM_390;
+         else if (product.indexOf(DB2_ISERIES) > -1)
+            return PLATFORM_400;
+         else if (product.indexOf(DB2_LUW0) > -1)
+            return PLATFORM_LUWO;
+         else if (product.indexOf(CLOUDSCAPE) > -1)
+            return PLATFORM_CLOUDSCAPE;
+         else if (product.indexOf(DERBY) > -1)
+             return PLATFORM_CLOUDSCAPE;
+         else if (product.indexOf(INFORMIX) > -1)
+             return PLATFORM_INFORMIX;
+         else if (product.indexOf(SYBASE) > -1)
+            return PLATFORM_SYBASE;
+         else if (product.indexOf(SQLSERVER) > -1)
+            return PLATFORM_SQLSERVER;
+         else if (product.indexOf(MYSQL) > -1)
+            return PLATFORM_MYSQL;
+         else if(product.indexOf(ORACLE) > -1)
+            return PLATFORM_ORACLE;
+      }
+      }
+      return PLATFORM_OTHER;
+   }
+
+   /**
+    * Returns the version, release, and modification levels,
+    * as specified in the ConnectionInfo or DatabaseDefinition.
+    * @param  The connection information object
+    * @return
+    */
+   public static int[] getVersion(ConnectionInfo aConInfo)
+   {
+      DBVersion v = DBVersion.getSharedInstance(aConInfo);
+      return new int[] {v.getVersion(), v.getRelease(), v.getMod()};
+   }
+
+   /**
+    * Returns the version, release, and modification levels,
+    * as specified in the ConnectionInfo or DatabaseDefinition.
+    * @param  The connection information object
+    * @return
+    */
+   public static int[] getVersion(DatabaseDefinition dbDef)
+   {
+      DBVersion v = DBVersion.getSharedInstance(dbDef);
+      return new int[] {v.getVersion(), v.getRelease(), v.getMod()};
+   }
+
+   /**
+    * Returns true if the given character is a DB2 special character.
+    * A special character is any of the characters listed below:
+    * <dl compact>
+    * <dt><code>' '</code>   <dd>An ordinary blank character
+    * <dt><code>'-'</code>   <dd>minus sign
+    * <dt><code>'"'</code>   <dd>quotation mark or double-quote
+    * <dt><code>'.'</code>   <dd>period
+    * <dt><code>'%'</code>   <dd>percent
+    * <dt><code>'/'</code>   <dd>slash
+    * <dt><code>'&'</code>   <dd>ampersand
+    * <dt><code>':'</code>   <dd>colon
+    * <dt><code>'\''</code>   <dd>apostrophe or single quote
+    * <dt><code>';'</code>   <dd>semicolon
+    * <dt><code>'('</code>   <dd>left parenthesis
+    * <dt><code>'<'</code>   <dd>less than
+    * <dt><code>')'</code>   <dd>right parenthesis
+    * <dt><code>'='</code>   <dd>equals
+    * <dt><code>'*'</code>   <dd>asterisk
+    * <dt><code>'>'</code>   <dd>greater than
+    * <dt><code>'+'</code>   <dd>plus sign
+    * <dt><code>'?'</code>   <dd>question mark
+    * <dt><code>','</code>   <dd>comma
+    * <dt><code>'_'</code>   <dd>underline or underscore
+    * <dt><code>'|'</code>   <dd>vertical bar
+    * <dt><code>'^'</code>   <dd>caret
+    * <dt><code>'!'</code>   <dd>exclamation mark
+    * </dl>
+    * <p>
+    * @param  c A character.
+    * @return True if c is a DB2 special character.
+    */
+   public static boolean isDB2SpecialChar(char c)
+   {
+      switch (c)
+      {
+      case ' ':
+      case '-':
+      case '"':
+      case '.':
+      case '%':
+      case '/':
+      case '&':
+      case ':':
+      case '\'':
+      case ';':
+      case '(':
+      case '<':
+      case ')':
+      case '=':
+      case '*':
+      case '>':
+      case '+':
+      case '?':
+      case ',':
+      case '_':
+      case '|':
+      case '^':
+      case '!':
+         return true;
+      default:
+         return false;
+      }
+   }
+
+   /**
+    * Determines whether not not the current language is double-byte
+    * (that is, one of Chinese, Japanese, or Korean).
+    * @return true when the current language is double-byte, otherwise false
+    */
+   protected static boolean isDBCSLanguage()
+   {
+      // @d330618 bgp 20May2004 - new method
+      Locale locale = Locale.getDefault(); //AssistManager.getPreferredLanguage();
+      String lang = locale.getLanguage();
+      if (lang.equals("zh") //$NON-NLS-1$
+         || lang.equals("ja") //$NON-NLS-1$
+         || lang.equals("ko")) //$NON-NLS-1$
+         return true;
+      else
+         return false;
+   }
+
+   /**
+    * Returns true if the given string is an ordinary identifier
+    * for DB2 UDB for LUWO; otherwise returns false.
+    * <p>
+    * (Formerly named isOrdinaryIdentifier.)
+    * <p>
+    * This method is used when retrieving an SQL identifier from DB2,
+    * where the delimiters have been dropped and lower-case characters folded to upper case.
+    * <p>
+    * This method assumes that the delimiter is '"' and the platform is LUWO.
+    * To specify the delimiter and the platform,
+    * see {@link #isDBIDOrdinary(String,int) isDBIDOrdinary(String, int)}.
+    * <p>
+    * @param  id  A candidate ordinary identifier.
+    * @return  True if the id is an ordinary identifier for LUWO.
+    * @see #isDBIDOrdinary(String, int)
+    * @see #isDBIDOrdinary(String, int)
+    */
+   public static boolean isDBIDOrdinary(String id)
+   {
+      return isDBIDOrdinary(id, DEFAULT_DELIM, PLATFORM_LUWO);
+   }
+
+   /**
+    * Returns true if the given identifier from DB2 is an ordinary identifier
+    * for LUWO, OS/390, or OS/400 or a combination of platforms; otherwise returns false.
+    * For LUWO (at least), "IDENT" is ordinary, even though it is delimited.
+    * <p>
+    * (Formerly named isOrdinaryIdentifier.)
+    * <p>
+    * This method is used when retrieving an SQL identifier from DB2,
+    * where the delimiters have been dropped and lower-case characters folded to upper case.
+    * <p>
+    * @param  id  A candidate ordinary identifier.
+    * @param  platforms  The sum of platform constants.
+    * @return  True if the id is an ordinary identifier for the specified platforms.
+    */
+   public static boolean isDBIDOrdinary(String id, int platforms)
+   {
+      return isDBIDOrdinary(id, DEFAULT_DELIM, platforms);
+   }
+
+   /**
+    * Returns true if the given identifier from DB2 is an ordinary identifier
+    * for LUWO, OS/390, or OS/400 or a combination of platforms; otherwise returns false.
+    * For LUWO (at least), "IDENT" is ordinary, even though it is delimited.
+    * <p>
+    * (Formerly named isOrdinaryIdentifier.)
+    * <p>
+    * This method is used when retrieving an SQL identifier from DB2,
+    * where the delimiters have been dropped and lower-case characters folded to upper case.
+    * <p>
+    * @param  id  A candidate ordinary identifier.
+    * @param  delimiter  The delimiter defined as the escape character
+    * on the DB2 platform or platforms.
+    * @param  platforms  The sum of platform constants.
+    * @return  True if the id is an ordinary identifier for the specified platforms.
+    */
+   public static boolean isDBIDOrdinary(String id, char delimiter, int platforms)
+   {
+      if (id == null || id.length() == 0)
+      {
+         return true;
+      }
+      // First char:
+      char ch = id.charAt(0);
+      if (!isOrdinaryUpperChar(ch, platforms))
+      {
+         return false;
+      }
+      // Trailing blanks are ignored in an ordinary identifier:
+      String tid = trim(id, TRIM_RIGHT, delimiter);
+      // Middle chars:
+      int range = tid.length() - 1; // omit the last one
+      if (range > -1)
+      {
+         for (int c = 1; c < range; c++)
+         {
+            ch = tid.charAt(c);
+            if (!isOrdinaryUpperChar(ch, platforms)
+            && !isOrdinaryDigit(ch)
+            && ch != '_')
+            {
+               return false;
+            }
+         }
+         // Last char:
+         ch = tid.charAt(range);
+         if (!isOrdinaryUpperChar(ch, platforms))
+         {
+            return false;
+         }
+         // Reserved words:
+         if (isReservedIdentifier(tid, delimiter, platforms))
+         {
+            return false;
+         }
+      }
+      return true;
+   }
+
+   /**
+    * Determines if the specified character is an ordinary character
+    * for OS/390.
+    What are the shift-out and shift-in chars translated to in Unicode?
+    * <p>
+    * @param  ch  A char.
+    * @return  True if the given char is upper case for the DB2 for OS/390.
+    */
+   public static boolean isOrdinary390Char(char ch)
+   {
+      boolean isOrdinary = false;
+      if (!Locale.getDefault().getLanguage().equalsIgnoreCase("en")) //$NON-NLS-1$
+      {
+         isOrdinary = Character.isUnicodeIdentifierStart( ch );
+      }
+      else
+      {
+         HashSet<Character> flags = ordinaryFlagsSet.get(PLATFORM_390_KEY);
+         if (flags == null)
+         {
+            flags = initOrdinaryFlags390();
+         }
+         isOrdinary = flags.contains(new Character(ch));
+         // If the language of the current locale is double-byte (that is,
+         // Chinese, Korean, Japanese), then consider double-byte characters
+         // to be ordinary characters.
+//         if (isOrdinary == false && isDBCSLanguage() == true)
+//         {
+//            isOrdinary = Character.isUnicodeIdentifierStart( ch );
+//         }
+      }
+      return isOrdinary;
+   }
+
+   /**
+    * Determines if the specified character is an ordinary character
+    * for OS/400.
+    * <p>
+    * @param  ch  A char.
+    * @return  True if the given char is upper case for the DB2 for OS/400.
+    */
+   public static boolean isOrdinary400Char(char ch)
+   {
+      boolean isOrdinary = false;
+      if (!Locale.getDefault().getLanguage().equalsIgnoreCase("en")) //$NON-NLS-1$
+      {
+         isOrdinary = Character.isUnicodeIdentifierStart( ch );
+      }
+      else
+      {
+         HashSet<Character> flags = ordinaryFlagsSet.get(PLATFORM_400_KEY);
+         if (flags == null)
+         {
+            flags = initOrdinaryFlags400();
+         }
+         isOrdinary = flags.contains(new Character(ch));
+         // Unlike DB2 for 390 and DB2 for LUW, DB2 for 400 does not
+         // (according to its SQL Ref.) support double-byte ordinary
+         // identifiers.
+      }
+      return isOrdinary;
+   }
+
+   /**
+    * Determines if the specified character is an ordinary character
+    * for LUWO, OS/390, OS/400, or a combination of platforms,
+    * for user input.
+    * <p>
+    * @param  ch  A char.
+    * @param  platforms  The sum of platform constants.
+    * The platforms are ignored if you have set the extra characters
+    * using setExtraOrdinaryChars(String).
+    * @return  True if the given char is an ordinary character
+    * for the DB2 platform or platforms.
+    */
+   public static boolean isOrdinaryChar(char ch, int platforms)
+   {
+      boolean ok = false;
+      if (otherOrdinaryFlags != null)
+      {
+         ok = isOrdinaryOtherChar(ch);
+      }
+      else
+      {
+         if ((platforms & PLATFORM_LUWO) > 0)
+            ok = isOrdinaryLUWOChar(ch);
+         if (!ok && ((platforms & PLATFORM_390) > 0))
+            ok = isOrdinary390Char(ch);
+         if (!ok && ((platforms & PLATFORM_400) > 0))
+            ok = isOrdinary400Char(ch);
+         if (!ok && ((platforms & PLATFORM_CLOUDSCAPE) > 0)) // Same as PLATFORM_DERBY
+            ok = isOrdinaryCloudscapeChar(ch);
+         // Defaults to LUWO:
+         if (!ok && ((platforms & PLATFORM_INFORMIX) > 0))
+            ok = isOrdinaryLUWOChar(ch);
+         if (!ok && ((platforms & PLATFORM_ORACLE) > 0))
+            ok = isOrdinaryLUWOChar(ch);
+         if (!ok && ((platforms & PLATFORM_SYBASE) > 0))
+            ok = isOrdinaryLUWOChar(ch);
+         if (!ok && ((platforms & PLATFORM_SQLSERVER) > 0))
+            ok = isOrdinaryLUWOChar(ch);
+         if (!ok && ((platforms & PLATFORM_MYSQL) > 0))
+            ok = isOrdinaryLUWOChar(ch);
+         if (!ok && ((platforms & PLATFORM_OTHER) > 0))
+            ok = isOrdinaryLUWOChar(ch);
+      }
+      return ok;
+   }
+
+   /**
+    * Returns true if the given char is in the range 0..9.
+    * <p>
+    * @param  c  The char in question.
+    * @return  True if c is in the range 0..9.
+    */
+   public static boolean isOrdinaryDigit(char c)
+   {
+      // @d330618 bgp 20May2004 - begin
+      boolean isOrdinary = false;
+      isOrdinary = (ordinaryDigits.indexOf(c) > -1);
+      // If the language of the current locale is double-byte (that is,
+      // Chinese, Korean, Japanese), then consider the "wide"
+      // (double-byte) numbers to be ordinary digits too.
+      if (isOrdinary == false  && isDBCSLanguage() == true)
+      {
+         isOrdinary = (ordinaryWideDigits.indexOf(c) > -1);
+      }
+      return isOrdinary;
+      // @d330618 bgp 20May2004 - end
+   }
+
+   /**
+    * Determines if the specified character is an ordinary character
+    * for LUWO.
+    * <p>
+    * @param  ch  A char.
+    * @return  True if the given char is upper case for DB2 for LUWO.
+    */
+   public static boolean isOrdinaryLUWOChar(char ch)
+   {
+      boolean isOrdinary = false;
+      // langsUNO is part of a temporary workaround.
+      // This determination should be based on the codeset of the
+      // database, which we don't have. Here we assume that it corresponds
+      // to the client language, and we have tested, using SQLIdentifierTester,
+      // the languages in langsUNO on Windows codesets (only, so far!).
+      if (langsUNO == null)
+         initOrdinaryFlagsLUWO();
+      String lang = Locale.getDefault().getLanguage().toLowerCase();
+      if (!langsUNO.contains(lang))
+      {
+         isOrdinary = Character.isUnicodeIdentifierStart( ch );
+      }
+      else
+      {
+         // Instead of Character objects in HashSets (which are initialized
+         // in various static init*Flags methods below), it might be more efficient
+         // to use some kind of bitmap that could be produced from a codeset.
+         HashSet<Character> flags = ordinaryFlagsSet.get(PLATFORM_LUWO_KEY);
+         if (flags == null)
+         {
+            flags = initOrdinaryFlagsLUWO();
+         }
+         isOrdinary = flags.contains(new Character(ch));
+         // If the language of the current locale is double-byte (that is,
+         // Chinese, Korean, Japanese), then consider double-byte characters
+         // to be ordinary characters.
+//         if (!isOrdinary && isDBCSLanguage())
+//         {
+//            isOrdinary = Character.isUnicodeIdentifierStart( ch );
+//         }
+      }
+      return isOrdinary;
+   }
+
+   /**
+    * Determines if the specified character is an ordinary character
+    * for IBM Cloudscape.
+    * <p>
+    * @param  ch  A char.
+    * @return  True if the given char is upper case for IBM Cloudscape.
+    */
+   public static boolean isOrdinaryCloudscapeChar(char ch)
+   {
+      boolean isOrdinary = false;
+      if (!Locale.getDefault().getLanguage().equalsIgnoreCase("en")) //$NON-NLS-1$
+      {
+         isOrdinary = Character.isUnicodeIdentifierStart( ch );
+      }
+      else
+      {
+         HashSet<Character> flags = ordinaryFlagsSet.get(PLATFORM_CLOUDSCAPE_KEY);
+         if (flags == null)
+         {
+            flags = initOrdinaryFlagsCloudscape();
+         }
+         isOrdinary = flags.contains(new Character(ch));// If the language of the current locale is double-byte (that is,
+         // Chinese, Korean, Japanese), then consider double-byte characters
+         // to be ordinary characters.
+//         if (isOrdinary == false && isDBCSLanguage() == true)
+//         {
+//            isOrdinary = Character.isUnicodeIdentifierStart( ch );
+//         }
+      }
+      return isOrdinary;
+   }
+
+   /**
+    * Determines if the specified character is an ordinary character
+    * for a database whose ordinary characters are specified
+    * using setExtraOrdinaryChars(String).
+    * <p>
+    * @param  ch  A char.
+    * @return  True if the given char is allowed in an ordinary identifier.
+    */
+   public static boolean isOrdinaryOtherChar(char ch)
+   {
+      if (otherOrdinaryFlags == null)
+         return isOrdinaryLUWOChar(ch);
+      else
+         return otherOrdinaryFlags.contains(new Character(ch));
+   }
+
+   /**
+    * Determines if the specified character is an ordinary character
+    * for LUWO, OS/390, OS/400, or a combination of platforms,
+    * for an identifier in DB2.
+    * <p>
+    * @param  ch  A char.
+    * @param  platforms  The sum of platform constants.
+    * The platforms are ignored if you have set the extra characters
+    * using setExtraOrdinaryChars(String).
+    * @return  True if the given char is an upper case ordinary character
+    * for the DB2 platform or platforms.
+    */
+   public static boolean isOrdinaryUpperChar(char ch, int platforms)
+   {
+      boolean ok = false;
+      if (otherOrdinaryFlags != null)
+      {
+         ok = isOrdinaryOtherChar(ch);
+      }
+      else
+      {
+         if ((platforms & PLATFORM_LUWO) > 0)
+            ok = isOrdinaryLUWOChar(ch);
+         if (!ok && ((platforms & PLATFORM_390) > 0))
+            ok = isOrdinary390Char(ch);
+         if (!ok && ((platforms & PLATFORM_400) > 0))
+            ok = isOrdinary400Char(ch);
+         if (!ok && ((platforms & PLATFORM_CLOUDSCAPE) > 0)) // Same as PLATFORM_DERBY
+            ok = isOrdinaryCloudscapeChar(ch);
+         // Defaults to LUWO:
+         if (!ok && ((platforms & PLATFORM_INFORMIX) > 0))
+            ok = isOrdinaryLUWOChar(ch);
+         if (!ok && ((platforms & PLATFORM_ORACLE) > 0))
+            ok = isOrdinaryLUWOChar(ch);
+         if (!ok && ((platforms & PLATFORM_SYBASE) > 0))
+            ok = isOrdinaryLUWOChar(ch);
+         if (!ok && ((platforms & PLATFORM_SQLSERVER) > 0))
+            ok = isOrdinaryLUWOChar(ch);
+         if (!ok && ((platforms & PLATFORM_MYSQL) > 0))
+            ok = isOrdinaryLUWOChar(ch);
+         if (!ok && ((platforms & PLATFORM_OTHER) > 0))
+            ok = isOrdinaryLUWOChar(ch);
+      }
+      if (ok && (platforms & PLATFORM_INFORMIX) == 0)
+      {
+         ok = !Character.isLowerCase(ch);
+      }
+      return ok;
+   }
+
+   /**
+    * Returns true if the given SQL identifier is a reserved word
+    * for DB2 UDB for LUWO.
+    * If an identifier is delimited but is exactly equal to a reserved schema
+    * within the delimiters, then it is reserved.
+    * <p>
+    * @param  id        An SQL identifier.
+    * @param  delimiter  The delimiter defined as the escape character.
+    * @return True if the given identifier is reserved for LUWO.
+    */
+   public static boolean isReservedIdentifier(String id, char delimiter)
+   {
+      return isReservedIdentifier(id, delimiter, PLATFORM_LUWO);
+   }
+
+   /**
+    * Returns true if the given SQL ordinary identifier is a reserved word
+    * for DB2 UDB for LUWO, OS/390, OS/400, or a combination of platforms.
+    * If an identifier is delimited but is exactly equal to a reserved schema
+    * within the delimiters, then it is a reserved word.
+    * <p>
+    * @param  id        An SQL ordinary identifier.
+    * @param  delimiter  The delimiter defined as the escape character
+    * on the DB2 platform or platforms.
+    * @param  platforms  The sum of platform constants.
+    * @return True if the given identifier is reserved for the specified platforms.
+    */
+   public static boolean isReservedIdentifier(String id, char delimiter, int platforms)
+   {
+      String up = convertUserInput(id, delimiter, platforms);
+      boolean ok = false;
+      if ((platforms & PLATFORM_LUWO) > 0)
+      {
+         if (luwoReserved == null)
+            luwoReserved = initReserved("DB2 UDB", "V8.2"); //$NON-NLS-1$ //$NON-NLS-2$
+         ok = (luwoReserved != null) && luwoReserved.contains(up);
+      }
+      if (!ok && ((platforms & PLATFORM_390) > 0))
+      {
+         if (os390Reserved == null)
+            os390Reserved = initReserved("DB2 UDB zSeries", "V8 (New-Function Mode)"); //$NON-NLS-1$ //$NON-NLS-2$
+         ok = (os390Reserved != null) && os390Reserved.contains(up);
+      }
+      if (!ok && ((platforms & PLATFORM_400) > 0))
+      {
+         if (os400Reserved == null)
+            os400Reserved = initReserved("DB2 UDB iSeries", "V5R4"); //$NON-NLS-1$ //$NON-NLS-2$
+         ok = (os400Reserved != null) && os400Reserved.contains(up);
+      }
+      if (!ok && ((platforms & PLATFORM_CLOUDSCAPE) > 0))
+      {
+         if (cloudscapeReserved == null)
+            cloudscapeReserved = initReserved("IBM Cloudscape", "10.0"); //$NON-NLS-1$ //$NON-NLS-2$
+         ok = (cloudscapeReserved != null) && cloudscapeReserved.contains(up);
+      }
+      // Defaults to LUWO:
+      if (!ok && ((platforms & PLATFORM_OTHER) > 0))
+      {
+         if (luwoReserved == null)
+            luwoReserved = initReserved("DB2 UDB", "V8.2"); //$NON-NLS-1$ //$NON-NLS-2$
+         ok = (luwoReserved != null) && luwoReserved.contains(up);
+      }
+      return ok;
+   }
+
+   /**
+    * Returns true if the given SQL ordinary identifier is a reserved word.
+    * This method should be used only for PLATFORM_OTHER.
+    * For DB2 and IBM Cloudscape platforms, we have canonical Lists of keywords.
+    * See isReservedIdentifier(String id, char delimiter, int platforms).
+    * <p>
+    * @param  id        An SQL identifier.
+    * @param  conInfo   Describes the database connection.
+    * @return True if the id is a keyword, according to the DatabaseDefinition.
+    */
+   public static boolean isReservedIdentifier(String id, ConnectionInfo conInfo)
+   {
+      DatabaseDefinition dbDef = conInfo.getDatabaseDefinition();
+      return isReservedIdentifier(id, dbDef);
+   }
+
+   /**
+    * Returns true if the given SQL ordinary identifier is a reserved word.
+    * This method should be used only for PLATFORM_OTHER.
+    * For DB2 and IBM Cloudscape platforms, we have canonical Lists of keywords.
+    * See isReservedIdentifier(String id, char delimiter, int platforms).
+    * <p>
+    * @param  id        An SQL identifier.
+    * @param  dbDef     Describes the database.
+    * @return True if the id is a keyword, according to the DatabaseDefinition.
+    */
+   @SuppressWarnings("unchecked")
+   public static boolean isReservedIdentifier(String id, DatabaseDefinition dbDef)
+   {
+      if (dbDef != null)
+      {
+         List<String> reslist = dbDef.getSQLKeywords();
+         return reslist.contains(id);
+      }
+      return false;
+   }
+
+   /**
+    * Returns true if the given SQL identifier is a reserved schema.
+    * If an identifier is delimited but is exactly equal to a reserved schema
+    * within the delimiters, then it is reserved.
+    * <p>
+    * @param  id        A schema
+    * @param  delimiter  The delimiter defined as the escape character.
+    * @return True if the given identifier is a reserved schema.
+    */
+   public static boolean isReservedSchema(String id, char delimiter)
+   {
+      return schemaReserved.contains(convertUserInput(id, delimiter));
+   }
+
+   /**
+    * Returns true if the given string is an ordinary identifier
+    * for DB2 UDB for LUWO <i>ignoring the case of each letter</i>;
+    * otherwise returns false.
+    * This method is used when processing an SQL identifier from user input,
+    * where delimiters may or may not be provided.
+    * <p>
+    * (Formerly named isInputOrdinary.)
+    * <p>
+    * This method does not guarantee that the identifier is valid; it might violate
+    * other rules for identifiers, such as exceeding the maximum length.
+    * <p>
+    * For LUWO, OS/390, or OS/400 or a combination of platforms,
+    * see {@link #isUserInputOrdinary(String,int) isUserInputOrdinary(String, int)}.
+    * <p>
+    * @param  id  A candidate ordinary identifier.
+    * @return  True if the id is an ordinary identifier for LUWO.
+    * @see #isUserInputOrdinary(String, int)
+    */
+   public static boolean isUserInputOrdinary(String id)
+   {
+      return isUserInputOrdinary(id, PLATFORM_LUWO);
+   }
+
+   /**
+    * Returns true if the given string as input by the user is an ordinary identifier
+    * for LUWO, OS/390, or OS/400 or a combination of platforms,
+    * <i>ignoring the case of each letter</i>; otherwise returns false.
+    * This method is used when processing an SQL identifier from user input,
+    * where delimiters may or may not be provided.
+    * <p>
+    * (Formerly named isInputOrdinary.)
+    * <p>
+    * This method does not guarantee that the identifier is valid; it might violate
+    * other rules for identifiers, such as exceeding the maximum length.
+    * <p>
+    * @param  id  A candidate ordinary identifier.
+    * @param  delimiter  The delimiter defined as the escape character
+    * on the DB2 platform or platforms.
+    * @param  platforms  The sum of platform constants.
+    * @return  True if the id is an ordinary identifier for the specified platforms.
+    */
+   public static boolean isUserInputOrdinary(String id, char delimiter, int platforms)
+   {
+      if (id == null || id.length() == 0)
+      {
+         return true;
+      }
+      boolean delimited = false;
+      int range;
+      String upid = id;
+      // Remove delimiters. (We don't trim first because spaces
+      // before or after a delimiter would indicate that the delimiter char
+      // is part of the identifier, which would then not be ordinary.
+      // On the other hand, we don't verify that an internal delimiter is doubled.)
+      if (upid.charAt(0) == delimiter)
+      {
+         delimited = true;
+         upid = upid.substring(1);
+         range = upid.length() - 1;
+         if (upid.charAt(range) == delimiter)
+         {
+            upid = upid.substring(0, range);
+         }
+      }
+      // First character can be only alphabetic:
+      char ch = upid.charAt(0);
+      if ((delimited && Character.toUpperCase(ch) != ch)
+               || !isOrdinaryChar(ch, platforms) )
+      {
+         return false;
+      }
+      // Trailing blanks are ignored in an ordinary identifier:
+      upid = trim(upid, TRIM_RIGHT, delimiter);
+      // Remaining characters--alpha, digit, or underscore.
+      range = upid.length();
+      for (int c = 1; c < range; c++)
+      {
+         ch = upid.charAt(c);
+         if ((delimited && Character.toUpperCase(ch) != ch)
+                  || (!isOrdinaryChar(ch, platforms)
+                           && !isOrdinaryDigit(ch)
+                           && ch != '_'))
+         {
+            return false;
+         }
+      }
+      // Reserved words:
+      if (isReservedIdentifier(upid, delimiter, platforms))
+      {
+         return false;
+      }
+      return true;
+   }
+
+   /**
+    * Returns true if the given string is an ordinary identifier
+    * <i>ignoring the case of each letter</i>; otherwise, returns false.
+    * This method is used when processing an SQL identifier from user input,
+    * where delimiters may or may not be provided.
+    * <p>
+    * This method does not guarantee that the identifier is valid; it might violate
+    * other rules for identifiers, such as exceeding the maximum length.
+    * <p>
+    * @param  id  A candidate ordinary identifier.
+    * @param  conInfo   Describes the database connection.
+    * @return  True if the id is an ordinary identifier for the ConnectionInfo.
+    */
+   public static boolean isUserInputOrdinary(String id, ConnectionInfo conInfo)
+   {
+      return isUserInputOrdinary(id, getDelimiter(conInfo), getPlatform(conInfo));
+   }
+   
+   /**
+    * Returns true if the given string is an ordinary identifier
+    * for LUWO, OS/390, or OS/400 or a combination of platforms,
+    * <i>ignoring the case of each letter</i>; otherwise returns false.
+    * This method is used when processing an SQL identifier from user input,
+    * where delimiters may or may not be provided.
+    * <p>
+    * (Formerly named isInputOrdinary.)
+    * <p>
+    * This method assumes that the delimiter is '"'.
+    * To specify the delimiter,
+    * see {@link #isUserInputOrdinary(String,char,int) isUserInputOrdinary(String, char, int)}.
+    * <p>
+    * This method does not guarantee that the identifier is valid; it might violate
+    * other rules for identifiers, such as exceeding the maximum length.
+    * <p>
+    * @param  id  A candidate ordinary identifier.
+    * @param  platforms  The sum of platform constants.
+    * @return  True if the id is an ordinary identifier for the specified platforms.
+    */
+   public static boolean isUserInputOrdinary(String id, int platforms)
+   {
+      return isUserInputOrdinary(id, DEFAULT_DELIM, platforms);
+   }
+
+   /**
+    * Sets the extra characters that you can use in an ordinary identifier
+    * (those beyond a-z, A-Z, 0-9 and _), between 35 and 383.
+    * You need this only for databases other than DB2 UDB on LUWO, 390, and 400.
+    * If this method is not called, this class uses more complete tables of
+    * the allowable characters than you can get from JDBC, but these are available
+    * only for the three DB2 UDB platforms.
+    * <p>
+    * @param  connection A live Connection.
+    * A null removes the otherOrdinaryFlags.
+    * @see java.sql.DatabaseMetaData#getExtraNameCharacters().
+    */
+   public static void setExtraOrdinaryChars(Connection connection)
+   {
+      otherOrdinaryFlags = null;
+      if (connection != null)
+      {
+         Object prod = null;
+         try
+         {
+            prod = connection.getMetaData().getDatabaseProductName();
+         }
+         catch (SQLException e)
+         {
+            prod = PLATFORM_OTHER_KEY;
+         }
+         otherOrdinaryFlags = ordinaryFlagsSet.get(prod);
+         if (otherOrdinaryFlags == null)
+         {
+            String extras = null;
+            try
+            {
+               extras = connection.getMetaData().getExtraNameCharacters();
+            }
+            catch (SQLException e)
+            {
+               return; // leave the flags null, so to be unused.
+            }
+            // Indexes in this array are offset by 35; that is 0 == 35.
+            // Characters over '\u017F' (383) long_s (indexes over 342) are ignored.
+            otherOrdinaryFlags = new HashSet<Character>(59);
+            ordinaryFlagsSet.put(prod, otherOrdinaryFlags);
+            if (extras != null)
+            {
+               int elen = extras.length();
+               char c;
+               for (int i = 0; i < elen; i++)
+               {
+                  c = extras.charAt(i);
+                  otherOrdinaryFlags.add(new Character(c));
+               }
+            }
+            initCommonOrdinaryFlags(otherOrdinaryFlags);
+            otherOrdinaryFlags.add(new Character('\u005F')); // (95) _
+         }
+      }
+   }
+
+   /**
+    * Trims blanks ('\u0020'), but not other whitespace characters such as tabs,
+    * from the left, the right, and the right inside a delimiter.
+    * Different in behavior from java.lang.String.trim(),
+    * which trims trims all ASCII control characters having codes
+    * less than or equal to '\u0020'.
+    * <p>
+    * @param id  An SQL identifier
+    * @param side  A sum of:
+    * <dl>
+    * <dt>TRIM_LEFT  <dd>Trim from the left.
+    * <dt>TRIM_RIGHT  <dd>Trim from the right.
+    * <dt>TRIM_INSIDE <dd>Trim inside the specified delimiter from the right.
+    * <dt>TRIM_ALL    <dd>All of the above.
+    * </dl>
+    * @param  delimiter  The delimiter defined as the escape character,
+    * used only if (side & TRIM_INSIDE) > 0.
+    */
+   public static String trim(String id, int side, char delimiter)
+   {
+      if (id == null || id.length() == 0)
+         return id;
+      int left = 0;
+      int right;
+      char ch;
+      // Left:
+      if ((side & TRIM_LEFT) > 0)
+      {
+         ch = id.charAt(left);
+         while (ch == ' ' && left < id.length())
+         {
+            left++;
+            if (left < id.length())
+               ch = id.charAt(left);
+         }
+      }
+      // Right:
+      right = id.length() - 1;
+		if (right > -1 && (side & TRIM_RIGHT) > 0)
+      {
+         ch = id.charAt(right);
+         //System.out.println("trimming right");
+			while (ch == ' ' && right > -1)
+         {
+            right--;
+            //System.out.println("\t" + right);
+				if (right > -1)
+               ch = id.charAt(right);
+         }
+      }
+      // Inside right:
+		if (right > -1)   // Add  && left < id.length() ?
+      {
+         //System.out.println("inside starting " + right);
+         ch = id.charAt(right);
+         int r = -1;
+         if ((side & TRIM_INSIDE) > 0 && (side & TRIM_RIGHT) == 0) // Skip trailing blanks to the delimiter
+         {
+            while (right > -1 && ch == ' ' && ch != delimiter)
+            {
+               right--;
+               if (right > -1)
+                  ch = id.charAt(right);
+            }
+            if (right > -1 && right < id.length() - 1)
+               r = right + 1;
+         }
+         if ((side & TRIM_INSIDE) > 0 && right > 0 && ch == delimiter)
+         {
+            right--; // skip the delimiter
+            ch = id.charAt(right);
+				while (ch == ' ' && right > -1)
+            {
+					right--;
+					if (right > -1)
+						ch = id.charAt(right);
+				}
+				StringBuffer sb2 = new StringBuffer();
+            //System.out.println("left: " + left);
+            //System.out.println("right: " + right);
+				if (right >= left)
+            {
+               sb2.append(id.substring(left, right + 1)).append(delimiter);
+               if (r > -1)
+                  sb2.append(id.substring(r));
+            }
+            else
+            {
+               sb2.append(id.substring(left)).append(delimiter);
+            }
+            return sb2.toString();
+			}
+			else if (right >= left)
+         {
+            if ((side & TRIM_INSIDE) > 0 && (side & TRIM_RIGHT) == 0)
+            {
+               return id;
+            }
+            else
+            {
+               return id.substring(left, right + 1);
+            }
+         }
+         else
+         {
+            return id.substring(left);
+         }
+      }
+      else
+      {
+         return EMPTY_STRING;
+      }
+   }
+   
+   /**
+    * Prevents construction of instances of this class.
+    * All methods and attributes are static; there is no reason to construct it.
+    */
+   private SQLIdentifier()
+   {
+      // Do nothing.
+   }
+
+   /** Static initialization section. */
+   static
+   {
+      ordinaryFlagsSet = new Hashtable<Object, HashSet<Character>>(37);
+      //OrdinaryChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_$#@";
+      // Letters also include the alphabetics from the extended character sets.
+      // Extended character sets contain additional alphabetic characters; for example, those
+      // with diacritical marks ( Hex B4 is an example of a diacritical mark). The available characters
+      // depend on the code page in use.
+
+      ordinaryDigits = "0123456789"; //$NON-NLS-1$
+      // Define the "wide" (multi-byte) digits used in Chinese, Japanese, Korean.
+      ordinaryWideDigits = "\uFF10\uFF11\uFF12\uFF13\uFF14\uFF15\uFF16\uFF17\uFF18\uFF19"; //$NON-NLS-1$
+
+      schemaReserved = new HashSet<String>(6);
+      schemaReserved.add("SYSCAT"); //$NON-NLS-1$
+      schemaReserved.add("SYSFUN"); //$NON-NLS-1$
+      schemaReserved.add("SYSIBM"); //$NON-NLS-1$
+      schemaReserved.add("SYSSTAT"); //$NON-NLS-1$
+
+   }
+
+   /**
+    * Returns a List of SQL keyswords for the given vendor and version.
+    * <p>
+    * @param vendor A vendor name in a DatabaseDefinition.
+    * @param version A version string in a DatabaseDefinition.
+    * @return A List of reserved words. Might be null.
+    */
+   @SuppressWarnings("unchecked")
+   public static List<String> initReserved(String vendor, String version)
+   {
+      RDBCorePlugin rdb = RDBCorePlugin.getDefault();
+      if (rdb != null)
+      {
+         DatabaseDefinitionRegistry ddreg = rdb.getDatabaseDefinitionRegistry();
+         DatabaseDefinition ddef = ddreg.getDefinition(vendor, version);
+         if (ddef != null)
+         {
+            return (List<String>)ddef.getSQLKeywords();
+         }
+      }
+      // Defaults to LUWO:
+      return luwoReserved;
+   }
+
+   /**
+    * Initializes ordinary characters for IBM Cloudscape.
+    * Has a side-effect of adding the HashSet to ordinaryFlagsSet.
+    * @return The HashSet
+    */
+   protected static HashSet<Character> initOrdinaryFlagsCloudscape()
+   {
+      // For IBM Cloudscape:
+      HashSet<Character> f = new HashSet<Character>(349);
+      ordinaryFlagsSet.put(PLATFORM_CLOUDSCAPE_KEY, f);
+      //f.add(new Character('\u0023')); // (35) #
+      //f.add(new Character('\u0024')); // (36) $
+      //f.add(new Character('\u0040')); // (64) @
+      initCommonOrdinaryFlags(f);
+      f.add(new Character('\u00AA')); // (170) feminine_ordinal
+      f.add(new Character('\u00B5')); // (181) micro
+      f.add(new Character('\u00BA')); // (186) masculine_ordinal
+      f.add(new Character('\u00C0')); // (192) A_grave
+      f.add(new Character('\u00C1')); // (193) A_acute
+      f.add(new Character('\u00C2')); // (194) A_circumflex
+      f.add(new Character('\u00C3')); // (195) A_tilde
+      f.add(new Character('\u00C4')); // (196) A_umlaut
+      f.add(new Character('\u00C5')); // (197) A_ring
+      f.add(new Character('\u00C6')); // (198) AE_ligature
+      f.add(new Character('\u00C7')); // (199) C_cedilla
+      f.add(new Character('\u00C8')); // (200) E_grave
+      f.add(new Character('\u00C9')); // (201) E_acute
+      f.add(new Character('\u00CA')); // (202) E_circumflex
+      f.add(new Character('\u00CB')); // (203) E_umlaut
+      f.add(new Character('\u00CC')); // (204) I_grave
+      f.add(new Character('\u00CD')); // (205) I_acute
+      f.add(new Character('\u00CE')); // (206) I_circumflex
+      f.add(new Character('\u00CF')); // (207) I_umlaut
+      f.add(new Character('\u00D0')); // (208) ETH_Q
+      f.add(new Character('\u00D1')); // (209) N_tilde
+      f.add(new Character('\u00D2')); // (210) O_grave
+      f.add(new Character('\u00D3')); // (211) O_acute
+      f.add(new Character('\u00D4')); // (212) O_circumflex
+      f.add(new Character('\u00D5')); // (213) O_tilde
+      f.add(new Character('\u00D6')); // (214) O_umlaut
+      f.add(new Character('\u00D8')); // (216) O_slash
+      f.add(new Character('\u00D9')); // (217) U_grave
+      f.add(new Character('\u00DA')); // (218) U_acute
+      f.add(new Character('\u00DB')); // (219) U_circumflex
+      f.add(new Character('\u00DC')); // (220) U_umlaut
+      f.add(new Character('\u00DD')); // (221) Y_acute
+      f.add(new Character('\u00DE')); // (222) THORN
+      f.add(new Character('\u00DF')); // (223) sharp_s
+      f.add(new Character('\u00E0')); // (224) a_grave
+      f.add(new Character('\u00E1')); // (225) a_acute
+      f.add(new Character('\u00E2')); // (226) a_circumflex
+      f.add(new Character('\u00E3')); // (227) a_tilde
+      f.add(new Character('\u00E4')); // (228) a_umlaut
+      f.add(new Character('\u00E5')); // (229) a_ring
+      f.add(new Character('\u00E6')); // (230) ae_ligature
+      f.add(new Character('\u00E7')); // (231) c_cedilla
+      f.add(new Character('\u00E8')); // (232) e_grave
+      f.add(new Character('\u00E9')); // (233) e_acute
+      f.add(new Character('\u00EA')); // (234) e_circumflex
+      f.add(new Character('\u00EB')); // (235) e_umlaut
+      f.add(new Character('\u00EC')); // (236) i_grave
+      f.add(new Character('\u00ED')); // (237) i_acute
+      f.add(new Character('\u00EE')); // (238) i_circumflex
+      f.add(new Character('\u00EF')); // (239) i_umlaut
+      f.add(new Character('\u00F0')); // (240) eth
+      f.add(new Character('\u00F1')); // (241) n_tilde
+      f.add(new Character('\u00F2')); // (242) o_grave
+      f.add(new Character('\u00F3')); // (243) o_acute
+      f.add(new Character('\u00F4')); // (244) o_circumflex
+      f.add(new Character('\u00F5')); // (245) o_tilde
+      f.add(new Character('\u00F6')); // (246) o_umlaut
+      f.add(new Character('\u00F8')); // (248) o_slash
+      f.add(new Character('\u00F9')); // (249) u_grave
+      f.add(new Character('\u00FA')); // (250) u_acute
+      f.add(new Character('\u00FB')); // (251) u_circumflex
+      f.add(new Character('\u00FC')); // (252) u_umlaut
+      f.add(new Character('\u00FD')); // (253) y_acute
+      f.add(new Character('\u00FE')); // (254) thorn
+      f.add(new Character('\u00FF')); // (255) y_umlaut
+      f.add(new Character('\u0100')); // (256) A_bar
+      f.add(new Character('\u0101')); // (257) a_bar
+      f.add(new Character('\u0102')); // (258) A_breve
+      f.add(new Character('\u0103')); // (259) a_breve
+      f.add(new Character('\u0104')); // (260) A_ogokek
+      f.add(new Character('\u0105')); // (261) a_ogokek
+      f.add(new Character('\u0106')); // (262) C_acute
+      f.add(new Character('\u0107')); // (263) c_acute
+      f.add(new Character('\u0108')); // (264) C_circumflex
+      f.add(new Character('\u0109')); // (265) c_circumflex
+      f.add(new Character('\u010A')); // (266) C_superdot
+      f.add(new Character('\u010B')); // (267) c_superdot
+      f.add(new Character('\u010C')); // (268) C_caron
+      f.add(new Character('\u010D')); // (269) c_caron
+      f.add(new Character('\u010E')); // (270) D_caron
+      f.add(new Character('\u010F')); // (271) d_caron
+      f.add(new Character('\u0110')); // (272) D_stroke
+      f.add(new Character('\u0111')); // (273) d_stroke
+      f.add(new Character('\u0112')); // (274) E_macron
+      f.add(new Character('\u0113')); // (275) e_macron
+      f.add(new Character('\u0114')); // (276) E_breve
+      f.add(new Character('\u0115')); // (277) e_breve
+      f.add(new Character('\u0116')); // (278) E_superdot
+      f.add(new Character('\u0117')); // (279) e_superdot
+      f.add(new Character('\u0118')); // (280) E_ogonek
+      f.add(new Character('\u0119')); // (281) e_ogonek
+      f.add(new Character('\u011A')); // (282) E_caron
+      f.add(new Character('\u011B')); // (283) e_caron
+      f.add(new Character('\u011C')); // (284) G_circumflex
+      f.add(new Character('\u011D')); // (285) g_circumflex
+      f.add(new Character('\u011E')); // (286) G_breve
+      f.add(new Character('\u011F')); // (287) g_breve
+      f.add(new Character('\u0120')); // (288) G_superdot
+      f.add(new Character('\u0121')); // (289) g_superdot
+      f.add(new Character('\u0122')); // (290) G_cedilla
+      f.add(new Character('\u0123')); // (291) g_cedilla
+      f.add(new Character('\u0124')); // (292) H_circumflex
+      f.add(new Character('\u0125')); // (293) h_circumflex
+      f.add(new Character('\u0126')); // (294) H_stroke
+      f.add(new Character('\u0127')); // (295) h_stroke
+      f.add(new Character('\u0128')); // (296) I_tilde
+      f.add(new Character('\u0129')); // (297) i_tilde
+      f.add(new Character('\u012A')); // (298) I_macron
+      f.add(new Character('\u012B')); // (299) i_macron
+      f.add(new Character('\u012C')); // (300) I_breve
+      f.add(new Character('\u012D')); // (301) i_breve
+      f.add(new Character('\u012E')); // (302) I_ogonek
+      f.add(new Character('\u012F')); // (303) i_ogonek
+      f.add(new Character('\u0130')); // (304) I_superdot
+      f.add(new Character('\u0131')); // (305) i_nodot
+      f.add(new Character('\u0132')); // (306) IJ_ligature
+      f.add(new Character('\u0133')); // (307) ij_ligature
+      f.add(new Character('\u0134')); // (308) J_circumflex
+      f.add(new Character('\u0135')); // (309) j_circumflex
+      f.add(new Character('\u0136')); // (310) K_cedilla
+      f.add(new Character('\u0137')); // (311) k_cedilla
+      f.add(new Character('\u0138')); // (312) kra
+      f.add(new Character('\u0139')); // (313) L_acute
+      f.add(new Character('\u013A')); // (314) l_acute
+      f.add(new Character('\u013B')); // (315) L_cedilla
+      f.add(new Character('\u013C')); // (316) l_cedilla
+      f.add(new Character('\u013D')); // (317) L_caron
+      f.add(new Character('\u013E')); // (318) l_caron
+      f.add(new Character('\u013F')); // (319) L_middot
+      f.add(new Character('\u0140')); // (320) l_middot
+      f.add(new Character('\u0141')); // (321) L_stoke
+      f.add(new Character('\u0142')); // (322) l_stoke
+      f.add(new Character('\u0143')); // (323) N_acute
+      f.add(new Character('\u0144')); // (324) n_acute
+      f.add(new Character('\u0145')); // (325) N_cedilla
+      f.add(new Character('\u0146')); // (326) n_cedilla
+      f.add(new Character('\u0147')); // (327) N_caron
+      f.add(new Character('\u0148')); // (328) n_caron
+      f.add(new Character('\u0149')); // (329) n_apostrophe
+      f.add(new Character('\u014A')); // (330) ENG
+      f.add(new Character('\u014B')); // (331) eng
+      f.add(new Character('\u014C')); // (332) O_macron
+      f.add(new Character('\u014D')); // (333) o_macron
+      f.add(new Character('\u014E')); // (334) O_breve
+      f.add(new Character('\u014F')); // (335) o_breve
+      f.add(new Character('\u0150')); // (336) O_double_acute
+      f.add(new Character('\u0151')); // (337) o_double_acute
+      f.add(new Character('\u0152')); // (338) OE_ligature
+      f.add(new Character('\u0153')); // (339) oe_ligature
+      f.add(new Character('\u0154')); // (340) R_acute
+      f.add(new Character('\u0155')); // (341) r_acute
+      f.add(new Character('\u0156')); // (342) R_cedilla
+      f.add(new Character('\u0157')); // (343) r_cedilla
+      f.add(new Character('\u0158')); // (344) R_caron
+      f.add(new Character('\u0159')); // (345) r_caron
+      f.add(new Character('\u015A')); // (346) S_acute
+      f.add(new Character('\u015B')); // (347) s_acute
+      f.add(new Character('\u015C')); // (348) S_circumflex
+      f.add(new Character('\u015D')); // (349) s_circumflex
+      f.add(new Character('\u015E')); // (350) S_cedilla
+      f.add(new Character('\u015F')); // (351) s_cedilla
+      f.add(new Character('\u0160')); // (352) S_caron
+      f.add(new Character('\u0161')); // (353) s_caron
+      f.add(new Character('\u0162')); // (354) T_cedilla
+      f.add(new Character('\u0163')); // (355) t_cedilla
+      f.add(new Character('\u0164')); // (356) T_caron
+      f.add(new Character('\u0165')); // (357) t_caron
+      f.add(new Character('\u0166')); // (358) T_stroke
+      f.add(new Character('\u0167')); // (359) t_stroke
+      f.add(new Character('\u0168')); // (360) U_tilde
+      f.add(new Character('\u0169')); // (361) u_tilde
+      f.add(new Character('\u016A')); // (362) U_macron
+      f.add(new Character('\u016B')); // (363) u_macron
+      f.add(new Character('\u016C')); // (364) U_breve
+      f.add(new Character('\u016D')); // (365) u_breve
+      f.add(new Character('\u016E')); // (366) U_ring
+      f.add(new Character('\u016F')); // (367) u_ring
+      f.add(new Character('\u0170')); // (368) U_double_acute
+      f.add(new Character('\u0171')); // (369) u_double_acute
+      f.add(new Character('\u0172')); // (370) U_ogonek
+      f.add(new Character('\u0173')); // (371) u_ogonek
+      f.add(new Character('\u0174')); // (372) W_circumflex
+      f.add(new Character('\u0175')); // (373) w_circumflex
+      f.add(new Character('\u0176')); // (374) Y_circumflex
+      f.add(new Character('\u0177')); // (375) y_circumflex
+      f.add(new Character('\u0178')); // (376) Y_diaeresis
+      f.add(new Character('\u0179')); // (377) Z_acute
+      f.add(new Character('\u017A')); // (378) z_acute
+      f.add(new Character('\u017B')); // (379) Z_superdot
+      f.add(new Character('\u017C')); // (380) z_superdot
+      f.add(new Character('\u017D')); // (381) Z_caron
+      f.add(new Character('\u017E')); // (382) z_caron
+      f.add(new Character('\u017F')); // (383) long_s
+      f.add(new Character('\u0180')); // (384) X
+      f.add(new Character('\u0181')); // (385) X
+      f.add(new Character('\u0182')); // (386) X
+      f.add(new Character('\u0183')); // (387) X
+      f.add(new Character('\u0184')); // (388) X
+      f.add(new Character('\u0185')); // (389) X
+      f.add(new Character('\u0186')); // (390) X
+      f.add(new Character('\u0187')); // (391) X
+      f.add(new Character('\u0188')); // (392) X
+      f.add(new Character('\u0189')); // (393) X
+      f.add(new Character('\u018A')); // (394) X
+      f.add(new Character('\u018B')); // (395) X
+      f.add(new Character('\u018C')); // (396) X
+      f.add(new Character('\u018D')); // (397) X
+      f.add(new Character('\u018E')); // (398) X
+      f.add(new Character('\u018F')); // (399) X
+      f.add(new Character('\u0190')); // (400) X
+      f.add(new Character('\u0191')); // (401) X
+      f.add(new Character('\u0192')); // (402) X
+      f.add(new Character('\u0193')); // (403) X
+      f.add(new Character('\u0194')); // (404) X
+      f.add(new Character('\u0195')); // (405) X
+      f.add(new Character('\u0196')); // (406) X
+      f.add(new Character('\u0197')); // (407) X
+      f.add(new Character('\u0198')); // (408) X
+      f.add(new Character('\u0199')); // (409) X
+      f.add(new Character('\u019A')); // (410) X
+      f.add(new Character('\u019B')); // (411) X
+      f.add(new Character('\u019C')); // (412) X
+      f.add(new Character('\u019D')); // (413) X
+      f.add(new Character('\u019E')); // (414) X
+      f.add(new Character('\u019F')); // (415) X
+      f.add(new Character('\u01A0')); // (416) X
+      f.add(new Character('\u01A1')); // (417) X
+      f.add(new Character('\u01A2')); // (418) X
+      f.add(new Character('\u01A3')); // (419) X
+      f.add(new Character('\u01A4')); // (420) X
+      f.add(new Character('\u01A5')); // (421) X
+      f.add(new Character('\u01A6')); // (422) X
+      f.add(new Character('\u01A7')); // (423) X
+      f.add(new Character('\u01A8')); // (424) X
+      f.add(new Character('\u01A9')); // (425) X
+      f.add(new Character('\u01AA')); // (426) X
+      f.add(new Character('\u01AB')); // (427) X
+      f.add(new Character('\u01AC')); // (428) X
+      f.add(new Character('\u01AD')); // (429) X
+      f.add(new Character('\u01AE')); // (430) X
+      f.add(new Character('\u01AF')); // (431) X
+      f.add(new Character('\u01B0')); // (432) X
+      f.add(new Character('\u01B1')); // (433) X
+      f.add(new Character('\u01B2')); // (434) X
+      f.add(new Character('\u01B3')); // (435) X
+      f.add(new Character('\u01B4')); // (436) X
+      f.add(new Character('\u01B5')); // (437) X
+      f.add(new Character('\u01B6')); // (438) X
+      f.add(new Character('\u01B7')); // (439) X
+      f.add(new Character('\u01B8')); // (440) X
+      f.add(new Character('\u01B9')); // (441) X
+      f.add(new Character('\u01BA')); // (442) X
+      f.add(new Character('\u01BB')); // (443) X
+      f.add(new Character('\u01BC')); // (444) X
+      f.add(new Character('\u01BD')); // (445) X
+      f.add(new Character('\u01BE')); // (446) X
+      f.add(new Character('\u01BF')); // (447) X
+      f.add(new Character('\u01C0')); // (448) X
+      f.add(new Character('\u01C1')); // (449) X
+      f.add(new Character('\u01C2')); // (450) X
+      f.add(new Character('\u01C3')); // (451) X
+      f.add(new Character('\u01C4')); // (452) X
+      f.add(new Character('\u01C5')); // (453) X
+      f.add(new Character('\u01C6')); // (454) X
+      f.add(new Character('\u01C7')); // (455) X
+      f.add(new Character('\u01C8')); // (456) X
+      f.add(new Character('\u01C9')); // (457) X
+      f.add(new Character('\u01CA')); // (458) X
+      f.add(new Character('\u01CB')); // (459) X
+      f.add(new Character('\u01CC')); // (460) X
+      f.add(new Character('\u01CD')); // (461) X
+      f.add(new Character('\u01CE')); // (462) X
+      f.add(new Character('\u01CF')); // (463) X
+      f.add(new Character('\u01D0')); // (464) X
+      f.add(new Character('\u01D1')); // (465) X
+      f.add(new Character('\u01D2')); // (466) X
+      f.add(new Character('\u01D3')); // (467) X
+      f.add(new Character('\u01D4')); // (468) X
+      f.add(new Character('\u01D5')); // (469) X
+      f.add(new Character('\u01D6')); // (470) X
+      f.add(new Character('\u01D7')); // (471) X
+      f.add(new Character('\u01D8')); // (472) X
+      f.add(new Character('\u01D9')); // (473) X
+      f.add(new Character('\u01DA')); // (474) X
+      f.add(new Character('\u01DB')); // (475) X
+      f.add(new Character('\u01DC')); // (476) X
+      f.add(new Character('\u01DD')); // (477) X
+      f.add(new Character('\u01DE')); // (478) X
+      f.add(new Character('\u01DF')); // (479) X
+      f.add(new Character('\u01E0')); // (480) X
+      f.add(new Character('\u01E1')); // (481) X
+      f.add(new Character('\u01E2')); // (482) X
+      f.add(new Character('\u01E3')); // (483) X
+      f.add(new Character('\u01E4')); // (484) X
+      f.add(new Character('\u01E5')); // (485) X
+      f.add(new Character('\u01E6')); // (486) X
+      f.add(new Character('\u01E7')); // (487) X
+      f.add(new Character('\u01E8')); // (488) X
+      f.add(new Character('\u01E9')); // (489) X
+      f.add(new Character('\u01EA')); // (490) X
+      f.add(new Character('\u01EB')); // (491) X
+      f.add(new Character('\u01EC')); // (492) X
+      f.add(new Character('\u01ED')); // (493) X
+      f.add(new Character('\u01EE')); // (494) X
+      f.add(new Character('\u01EF')); // (495) X
+      f.add(new Character('\u01F0')); // (496) X
+      f.add(new Character('\u01F1')); // (497) X
+      f.add(new Character('\u01F2')); // (498) X
+      f.add(new Character('\u01F3')); // (499) X
+      f.add(new Character('\u01F4')); // (500) X
+      f.add(new Character('\u01F5')); // (501) X
+      f.add(new Character('\u01FA')); // (506) X
+      f.add(new Character('\u01FB')); // (507) X
+      f.add(new Character('\u01FC')); // (508) X
+      f.add(new Character('\u01FD')); // (509) X
+      f.add(new Character('\u01FE')); // (510) X
+      f.add(new Character('\u01FF')); // (511) X
+      f.add(new Character('\u0200')); // (512) X
+      f.add(new Character('\u0201')); // (513) X
+      f.add(new Character('\u0202')); // (514) X
+      f.add(new Character('\u0203')); // (515) X
+      f.add(new Character('\u0204')); // (516) X
+      f.add(new Character('\u0205')); // (517) X
+      f.add(new Character('\u0206')); // (518) X
+      f.add(new Character('\u0207')); // (519) X
+      f.add(new Character('\u0208')); // (520) X
+      f.add(new Character('\u0209')); // (521) X
+      f.add(new Character('\u020A')); // (522) X
+      f.add(new Character('\u020B')); // (523) X
+      f.add(new Character('\u020C')); // (524) X
+      f.add(new Character('\u020D')); // (525) X
+      f.add(new Character('\u020E')); // (526) X
+      f.add(new Character('\u020F')); // (527) X
+      f.add(new Character('\u0210')); // (528) X
+      f.add(new Character('\u0211')); // (529) X
+      f.add(new Character('\u0212')); // (530) X
+      f.add(new Character('\u0213')); // (531) X
+      f.add(new Character('\u0214')); // (532) X
+      f.add(new Character('\u0215')); // (533) X
+      f.add(new Character('\u0216')); // (534) X
+      f.add(new Character('\u0217')); // (535) X
+      f.add(new Character('\u0250')); // (592) X
+      f.add(new Character('\u0251')); // (593) X
+      f.add(new Character('\u0252')); // (594) X
+      f.add(new Character('\u0253')); // (595) X
+      f.add(new Character('\u0254')); // (596) X
+      f.add(new Character('\u0255')); // (597) X
+      f.add(new Character('\u0256')); // (598) X
+      f.add(new Character('\u0257')); // (599) X
+      f.add(new Character('\u0258')); // (600) X
+      f.add(new Character('\u0259')); // (601) X
+      f.add(new Character('\u025A')); // (602) X
+      f.add(new Character('\u025B')); // (603) X
+      f.add(new Character('\u025C')); // (604) X
+      f.add(new Character('\u025D')); // (605) X
+      f.add(new Character('\u025E')); // (606) X
+      f.add(new Character('\u025F')); // (607) X
+      f.add(new Character('\u0260')); // (608) X
+      f.add(new Character('\u0261')); // (609) X
+      f.add(new Character('\u0262')); // (610) X
+      f.add(new Character('\u0263')); // (611) X
+      f.add(new Character('\u0264')); // (612) X
+      f.add(new Character('\u0265')); // (613) X
+      f.add(new Character('\u0266')); // (614) X
+      f.add(new Character('\u0267')); // (615) X
+      f.add(new Character('\u0268')); // (616) X
+      f.add(new Character('\u0269')); // (617) X
+      f.add(new Character('\u026A')); // (618) X
+      f.add(new Character('\u026B')); // (619) X
+      f.add(new Character('\u026C')); // (620) X
+      f.add(new Character('\u026D')); // (621) X
+      f.add(new Character('\u026E')); // (622) X
+      f.add(new Character('\u026F')); // (623) X
+      f.add(new Character('\u0270')); // (624) X
+      f.add(new Character('\u0271')); // (625) X
+      f.add(new Character('\u0272')); // (626) X
+      f.add(new Character('\u0273')); // (627) X
+      f.add(new Character('\u0274')); // (628) X
+      f.add(new Character('\u0275')); // (629) X
+      f.add(new Character('\u0276')); // (630) X
+      f.add(new Character('\u0277')); // (631) X
+      f.add(new Character('\u0278')); // (632) X
+      f.add(new Character('\u0279')); // (633) X
+      f.add(new Character('\u027A')); // (634) X
+      f.add(new Character('\u027B')); // (635) X
+      f.add(new Character('\u027C')); // (636) X
+      f.add(new Character('\u027D')); // (637) X
+      f.add(new Character('\u027E')); // (638) X
+      f.add(new Character('\u027F')); // (639) X
+      f.add(new Character('\u0280')); // (640) X
+      f.add(new Character('\u0281')); // (641) X
+      f.add(new Character('\u0282')); // (642) X
+      f.add(new Character('\u0283')); // (643) X
+      f.add(new Character('\u0284')); // (644) X
+      f.add(new Character('\u0285')); // (645) X
+      f.add(new Character('\u0286')); // (646) X
+      f.add(new Character('\u0287')); // (647) X
+      f.add(new Character('\u0288')); // (648) X
+      f.add(new Character('\u0289')); // (649) X
+      f.add(new Character('\u028A')); // (650) X
+      f.add(new Character('\u028B')); // (651) X
+      f.add(new Character('\u028C')); // (652) X
+      f.add(new Character('\u028D')); // (653) X
+      f.add(new Character('\u028E')); // (654) X
+      f.add(new Character('\u028F')); // (655) X
+      f.add(new Character('\u0290')); // (656) X
+      f.add(new Character('\u0291')); // (657) X
+      f.add(new Character('\u0292')); // (658) X
+      f.add(new Character('\u0293')); // (659) X
+      f.add(new Character('\u0294')); // (660) X
+      f.add(new Character('\u0295')); // (661) X
+      f.add(new Character('\u0296')); // (662) X
+      f.add(new Character('\u0297')); // (663) X
+      f.add(new Character('\u0298')); // (664) X
+      f.add(new Character('\u0299')); // (665) X
+      f.add(new Character('\u029A')); // (666) X
+      f.add(new Character('\u029B')); // (667) X
+      f.add(new Character('\u029C')); // (668) X
+      f.add(new Character('\u029D')); // (669) X
+      f.add(new Character('\u029E')); // (670) X
+      f.add(new Character('\u029F')); // (671) X
+      f.add(new Character('\u02A0')); // (672) X
+      f.add(new Character('\u02A1')); // (673) X
+      f.add(new Character('\u02A2')); // (674) X
+      f.add(new Character('\u02A3')); // (675) X
+      f.add(new Character('\u02A4')); // (676) X
+      f.add(new Character('\u02A5')); // (677) X
+      f.add(new Character('\u02A6')); // (678) X
+      f.add(new Character('\u02A7')); // (679) X
+      f.add(new Character('\u02A8')); // (680) X
+      f.add(new Character('\u02B0')); // (688) X
+      f.add(new Character('\u02B1')); // (689) X
+      f.add(new Character('\u02B2')); // (690) X
+      f.add(new Character('\u02B3')); // (691) X
+      f.add(new Character('\u02B4')); // (692) X
+      f.add(new Character('\u02B5')); // (693) X
+      f.add(new Character('\u02B6')); // (694) X
+      f.add(new Character('\u02B7')); // (695) X
+      f.add(new Character('\u02B8')); // (696) X
+      f.add(new Character('\u02BB')); // (699) X
+      f.add(new Character('\u02BC')); // (700) X
+      f.add(new Character('\u02BD')); // (701) X
+      f.add(new Character('\u02BE')); // (702) X
+      f.add(new Character('\u02BF')); // (703) X
+      f.add(new Character('\u02C0')); // (704) X
+      f.add(new Character('\u02C1')); // (705) X
+      f.add(new Character('\u02D0')); // (720) X
+      f.add(new Character('\u02D1')); // (721) X
+      f.add(new Character('\u02E0')); // (736) X
+      f.add(new Character('\u02E1')); // (737) X
+      f.add(new Character('\u02E2')); // (738) X
+      f.add(new Character('\u02E3')); // (739) X
+      f.add(new Character('\u02E4')); // (740) X
+      f.add(new Character('\u037A')); // (890) X
+      f.add(new Character('\u0386')); // (902) X
+      f.add(new Character('\u0388')); // (904) X
+      f.add(new Character('\u0389')); // (905) X
+      f.add(new Character('\u038A')); // (906) X
+      f.add(new Character('\u038C')); // (908) X
+      f.add(new Character('\u038E')); // (910) X
+      f.add(new Character('\u038F')); // (911) X
+      f.add(new Character('\u0390')); // (912) X
+      f.add(new Character('\u0391')); // (913) X
+      f.add(new Character('\u0392')); // (914) X
+      f.add(new Character('\u0393')); // (915) X
+      f.add(new Character('\u0394')); // (916) X
+      f.add(new Character('\u0395')); // (917) X
+      f.add(new Character('\u0396')); // (918) X
+      f.add(new Character('\u0397')); // (919) X
+      f.add(new Character('\u0398')); // (920) X
+      f.add(new Character('\u0399')); // (921) X
+      f.add(new Character('\u039A')); // (922) X
+      f.add(new Character('\u039B')); // (923) X
+      f.add(new Character('\u039C')); // (924) X
+      f.add(new Character('\u039D')); // (925) X
+      f.add(new Character('\u039E')); // (926) X
+      f.add(new Character('\u039F')); // (927) X
+      f.add(new Character('\u03A0')); // (928) X
+      f.add(new Character('\u03A1')); // (929) X
+      f.add(new Character('\u03A3')); // (931) X
+      f.add(new Character('\u03A4')); // (932) X
+      f.add(new Character('\u03A5')); // (933) X
+      f.add(new Character('\u03A6')); // (934) X
+      f.add(new Character('\u03A7')); // (935) X
+      f.add(new Character('\u03A8')); // (936) X
+      f.add(new Character('\u03A9')); // (937) X
+      f.add(new Character('\u03AA')); // (938) X
+      f.add(new Character('\u03AB')); // (939) X
+      f.add(new Character('\u03AC')); // (940) X
+      f.add(new Character('\u03AD')); // (941) X
+      f.add(new Character('\u03AE')); // (942) X
+      f.add(new Character('\u03AF')); // (943) X
+      f.add(new Character('\u03B0')); // (944) X
+      f.add(new Character('\u03B1')); // (945) X
+      f.add(new Character('\u03B2')); // (946) X
+      f.add(new Character('\u03B3')); // (947) X
+      f.add(new Character('\u03B4')); // (948) X
+      f.add(new Character('\u03B5')); // (949) X
+      f.add(new Character('\u03B6')); // (950) X
+      f.add(new Character('\u03B7')); // (951) X
+      f.add(new Character('\u03B8')); // (952) X
+      f.add(new Character('\u03B9')); // (953) X
+      f.add(new Character('\u03BA')); // (954) X
+      f.add(new Character('\u03BB')); // (955) X
+      f.add(new Character('\u03BC')); // (956) X
+      f.add(new Character('\u03BD')); // (957) X
+      f.add(new Character('\u03BE')); // (958) X
+      f.add(new Character('\u03BF')); // (959) X
+      f.add(new Character('\u03C0')); // (960) X
+      f.add(new Character('\u03C1')); // (961) X
+      f.add(new Character('\u03C2')); // (962) X
+      f.add(new Character('\u03C3')); // (963) X
+      f.add(new Character('\u03C4')); // (964) X
+      f.add(new Character('\u03C5')); // (965) X
+      f.add(new Character('\u03C6')); // (966) X
+      f.add(new Character('\u03C7')); // (967) X
+      f.add(new Character('\u03C8')); // (968) X
+      f.add(new Character('\u03C9')); // (969) X
+      f.add(new Character('\u03CA')); // (970) X
+      f.add(new Character('\u03CB')); // (971) X
+      f.add(new Character('\u03CC')); // (972) X
+      f.add(new Character('\u03CD')); // (973) X
+      f.add(new Character('\u03CE')); // (974) X
+      f.add(new Character('\u03D0')); // (976) X
+      f.add(new Character('\u03D1')); // (977) X
+      f.add(new Character('\u03D2')); // (978) X
+      f.add(new Character('\u03D3')); // (979) X
+      f.add(new Character('\u03D4')); // (980) X
+      f.add(new Character('\u03D5')); // (981) X
+      f.add(new Character('\u03D6')); // (982) X
+      f.add(new Character('\u03DA')); // (986) X
+      f.add(new Character('\u03DC')); // (988) X
+      f.add(new Character('\u03DE')); // (990) X
+      f.add(new Character('\u03E0')); // (992) X
+      f.add(new Character('\u03E2')); // (994) X
+      f.add(new Character('\u03E3')); // (995) X
+      f.add(new Character('\u03E4')); // (996) X
+      f.add(new Character('\u03E5')); // (997) X
+      f.add(new Character('\u03E6')); // (998) X
+      f.add(new Character('\u03E7')); // (999) X
+      f.add(new Character('\u03E8')); // (1000) X
+      f.add(new Character('\u03E9')); // (1001) X
+      f.add(new Character('\u03EA')); // (1002) X
+      f.add(new Character('\u03EB')); // (1003) X
+      f.add(new Character('\u03EC')); // (1004) X
+      f.add(new Character('\u03ED')); // (1005) X
+      f.add(new Character('\u03EE')); // (1006) X
+      f.add(new Character('\u03EF')); // (1007) X
+      f.add(new Character('\u03F0')); // (1008) X
+      f.add(new Character('\u03F1')); // (1009) X
+      f.add(new Character('\u03F2')); // (1010) X
+      f.add(new Character('\u03F3')); // (1011) X
+      f.add(new Character('\u0401')); // (1025) X
+      f.add(new Character('\u0402')); // (1026) X
+      f.add(new Character('\u0403')); // (1027) X
+      f.add(new Character('\u0404')); // (1028) X
+      f.add(new Character('\u0405')); // (1029) X
+      f.add(new Character('\u0406')); // (1030) X
+      f.add(new Character('\u0407')); // (1031) X
+      f.add(new Character('\u0408')); // (1032) X
+      f.add(new Character('\u0409')); // (1033) X
+      f.add(new Character('\u040A')); // (1034) X
+      f.add(new Character('\u040B')); // (1035) X
+      f.add(new Character('\u040C')); // (1036) X
+      f.add(new Character('\u040E')); // (1038) X
+      f.add(new Character('\u040F')); // (1039) X
+      f.add(new Character('\u0410')); // (1040) X
+      f.add(new Character('\u0411')); // (1041) X
+      f.add(new Character('\u0412')); // (1042) X
+      f.add(new Character('\u0413')); // (1043) X
+      f.add(new Character('\u0414')); // (1044) X
+      f.add(new Character('\u0415')); // (1045) X
+      f.add(new Character('\u0416')); // (1046) X
+      f.add(new Character('\u0417')); // (1047) X
+      f.add(new Character('\u0418')); // (1048) X
+      f.add(new Character('\u0419')); // (1049) X
+      f.add(new Character('\u041A')); // (1050) X
+      f.add(new Character('\u041B')); // (1051) X
+      f.add(new Character('\u041C')); // (1052) X
+      f.add(new Character('\u041D')); // (1053) X
+      f.add(new Character('\u041E')); // (1054) X
+      f.add(new Character('\u041F')); // (1055) X
+      f.add(new Character('\u0420')); // (1056) X
+      f.add(new Character('\u0421')); // (1057) X
+      f.add(new Character('\u0422')); // (1058) X
+      f.add(new Character('\u0423')); // (1059) X
+      f.add(new Character('\u0424')); // (1060) X
+      f.add(new Character('\u0425')); // (1061) X
+      f.add(new Character('\u0426')); // (1062) X
+      f.add(new Character('\u0427')); // (1063) X
+      f.add(new Character('\u0428')); // (1064) X
+      f.add(new Character('\u0429')); // (1065) X
+      f.add(new Character('\u042A')); // (1066) X
+      f.add(new Character('\u042B')); // (1067) X
+      f.add(new Character('\u042C')); // (1068) X
+      f.add(new Character('\u042D')); // (1069) X
+      f.add(new Character('\u042E')); // (1070) X
+      f.add(new Character('\u042F')); // (1071) X
+      f.add(new Character('\u0430')); // (1072) X
+      f.add(new Character('\u0431')); // (1073) X
+      f.add(new Character('\u0432')); // (1074) X
+      f.add(new Character('\u0433')); // (1075) X
+      f.add(new Character('\u0434')); // (1076) X
+      f.add(new Character('\u0435')); // (1077) X
+      f.add(new Character('\u0436')); // (1078) X
+      f.add(new Character('\u0437')); // (1079) X
+      f.add(new Character('\u0438')); // (1080) X
+      f.add(new Character('\u0439')); // (1081) X
+      f.add(new Character('\u043A')); // (1082) X
+      f.add(new Character('\u043B')); // (1083) X
+      f.add(new Character('\u043C')); // (1084) X
+      f.add(new Character('\u043D')); // (1085) X
+      f.add(new Character('\u043E')); // (1086) X
+      f.add(new Character('\u043F')); // (1087) X
+      f.add(new Character('\u0440')); // (1088) X
+      f.add(new Character('\u0441')); // (1089) X
+      f.add(new Character('\u0442')); // (1090) X
+      f.add(new Character('\u0443')); // (1091) X
+      f.add(new Character('\u0444')); // (1092) X
+      f.add(new Character('\u0445')); // (1093) X
+      f.add(new Character('\u0446')); // (1094) X
+      f.add(new Character('\u0447')); // (1095) X
+      f.add(new Character('\u0448')); // (1096) X
+      f.add(new Character('\u0449')); // (1097) X
+      f.add(new Character('\u044A')); // (1098) X
+      f.add(new Character('\u044B')); // (1099) X
+      f.add(new Character('\u044C')); // (1100) X
+      f.add(new Character('\u044D')); // (1101) X
+      f.add(new Character('\u044E')); // (1102) X
+      f.add(new Character('\u044F')); // (1103) X
+      f.add(new Character('\u0451')); // (1105) X
+      f.add(new Character('\u0452')); // (1106) X
+      f.add(new Character('\u0453')); // (1107) X
+      f.add(new Character('\u0454')); // (1108) X
+      f.add(new Character('\u0455')); // (1109) X
+      f.add(new Character('\u0456')); // (1110) X
+      f.add(new Character('\u0457')); // (1111) X
+      f.add(new Character('\u0458')); // (1112) X
+      f.add(new Character('\u0459')); // (1113) X
+      f.add(new Character('\u045A')); // (1114) X
+      f.add(new Character('\u045B')); // (1115) X
+      f.add(new Character('\u045C')); // (1116) X
+      f.add(new Character('\u045E')); // (1118) X
+      f.add(new Character('\u045F')); // (1119) X
+      f.add(new Character('\u0460')); // (1120) X
+      f.add(new Character('\u0461')); // (1121) X
+      f.add(new Character('\u0462')); // (1122) X
+      f.add(new Character('\u0463')); // (1123) X
+      f.add(new Character('\u0464')); // (1124) X
+      f.add(new Character('\u0465')); // (1125) X
+      f.add(new Character('\u0466')); // (1126) X
+      f.add(new Character('\u0467')); // (1127) X
+      f.add(new Character('\u0468')); // (1128) X
+      f.add(new Character('\u0469')); // (1129) X
+      f.add(new Character('\u046A')); // (1130) X
+      f.add(new Character('\u046B')); // (1131) X
+      f.add(new Character('\u046C')); // (1132) X
+      f.add(new Character('\u046D')); // (1133) X
+      f.add(new Character('\u046E')); // (1134) X
+      f.add(new Character('\u046F')); // (1135) X
+      f.add(new Character('\u0470')); // (1136) X
+      f.add(new Character('\u0471')); // (1137) X
+      f.add(new Character('\u0472')); // (1138) X
+      f.add(new Character('\u0473')); // (1139) X
+      f.add(new Character('\u0474')); // (1140) X
+      f.add(new Character('\u0475')); // (1141) X
+      f.add(new Character('\u0476')); // (1142) X
+      f.add(new Character('\u0477')); // (1143) X
+      f.add(new Character('\u0478')); // (1144) X
+      f.add(new Character('\u0479')); // (1145) X
+      f.add(new Character('\u047A')); // (1146) X
+      f.add(new Character('\u047B')); // (1147) X
+      f.add(new Character('\u047C')); // (1148) X
+      f.add(new Character('\u047D')); // (1149) X
+      f.add(new Character('\u047E')); // (1150) X
+      f.add(new Character('\u047F')); // (1151) X
+      f.add(new Character('\u0480')); // (1152) X
+      f.add(new Character('\u0481')); // (1153) X
+      f.add(new Character('\u0490')); // (1168) X
+      f.add(new Character('\u0491')); // (1169) X
+      f.add(new Character('\u0492')); // (1170) X
+      f.add(new Character('\u0493')); // (1171) X
+      f.add(new Character('\u0494')); // (1172) X
+      f.add(new Character('\u0495')); // (1173) X
+      f.add(new Character('\u0496')); // (1174) X
+      f.add(new Character('\u0497')); // (1175) X
+      f.add(new Character('\u0498')); // (1176) X
+      f.add(new Character('\u0499')); // (1177) X
+      f.add(new Character('\u049A')); // (1178) X
+      f.add(new Character('\u049B')); // (1179) X
+      f.add(new Character('\u049C')); // (1180) X
+      f.add(new Character('\u049D')); // (1181) X
+      f.add(new Character('\u049E')); // (1182) X
+      f.add(new Character('\u049F')); // (1183) X
+      f.add(new Character('\u04A0')); // (1184) X
+      f.add(new Character('\u04A1')); // (1185) X
+      f.add(new Character('\u04A2')); // (1186) X
+      f.add(new Character('\u04A3')); // (1187) X
+      f.add(new Character('\u04A4')); // (1188) X
+      f.add(new Character('\u04A5')); // (1189) X
+      f.add(new Character('\u04A6')); // (1190) X
+      f.add(new Character('\u04A7')); // (1191) X
+      f.add(new Character('\u04A8')); // (1192) X
+      f.add(new Character('\u04A9')); // (1193) X
+      f.add(new Character('\u04AA')); // (1194) X
+      f.add(new Character('\u04AB')); // (1195) X
+      f.add(new Character('\u04AC')); // (1196) X
+      f.add(new Character('\u04AD')); // (1197) X
+      f.add(new Character('\u04AE')); // (1198) X
+      f.add(new Character('\u04AF')); // (1199) X
+      f.add(new Character('\u04B0')); // (1200) X
+      f.add(new Character('\u04B1')); // (1201) X
+      f.add(new Character('\u04B2')); // (1202) X
+      f.add(new Character('\u04B3')); // (1203) X
+      f.add(new Character('\u04B4')); // (1204) X
+      f.add(new Character('\u04B5')); // (1205) X
+      f.add(new Character('\u04B6')); // (1206) X
+      f.add(new Character('\u04B7')); // (1207) X
+      f.add(new Character('\u04B8')); // (1208) X
+      f.add(new Character('\u04B9')); // (1209) X
+      f.add(new Character('\u04BA')); // (1210) X
+      f.add(new Character('\u04BB')); // (1211) X
+      f.add(new Character('\u04BC')); // (1212) X
+      f.add(new Character('\u04BD')); // (1213) X
+      f.add(new Character('\u04BE')); // (1214) X
+      f.add(new Character('\u04BF')); // (1215) X
+      f.add(new Character('\u04C0')); // (1216) X
+      f.add(new Character('\u04C1')); // (1217) X
+      f.add(new Character('\u04C2')); // (1218) X
+      f.add(new Character('\u04C3')); // (1219) X
+      f.add(new Character('\u04C4')); // (1220) X
+      f.add(new Character('\u04C7')); // (1223) X
+      f.add(new Character('\u04C8')); // (1224) X
+      f.add(new Character('\u04CB')); // (1227) X
+      f.add(new Character('\u04CC')); // (1228) X
+      f.add(new Character('\u04D0')); // (1232) X
+      f.add(new Character('\u04D1')); // (1233) X
+      f.add(new Character('\u04D2')); // (1234) X
+      f.add(new Character('\u04D3')); // (1235) X
+      f.add(new Character('\u04D4')); // (1236) X
+      f.add(new Character('\u04D5')); // (1237) X
+      f.add(new Character('\u04D6')); // (1238) X
+      f.add(new Character('\u04D7')); // (1239) X
+      f.add(new Character('\u04D8')); // (1240) X
+      f.add(new Character('\u04D9')); // (1241) X
+      f.add(new Character('\u04DA')); // (1242) X
+      f.add(new Character('\u04DB')); // (1243) X
+      f.add(new Character('\u04DC')); // (1244) X
+      f.add(new Character('\u04DD')); // (1245) X
+      f.add(new Character('\u04DE')); // (1246) X
+      f.add(new Character('\u04DF')); // (1247) X
+      f.add(new Character('\u04E0')); // (1248) X
+      f.add(new Character('\u04E1')); // (1249) X
+      f.add(new Character('\u04E2')); // (1250) X
+      f.add(new Character('\u04E3')); // (1251) X
+      f.add(new Character('\u04E4')); // (1252) X
+      f.add(new Character('\u04E5')); // (1253) X
+      f.add(new Character('\u04E6')); // (1254) X
+      f.add(new Character('\u04E7')); // (1255) X
+      f.add(new Character('\u04E8')); // (1256) X
+      f.add(new Character('\u04E9')); // (1257) X
+      f.add(new Character('\u04EA')); // (1258) X
+      f.add(new Character('\u04EB')); // (1259) X
+      f.add(new Character('\u04EE')); // (1262) X
+      f.add(new Character('\u04EF')); // (1263) X
+      f.add(new Character('\u04F0')); // (1264) X
+      f.add(new Character('\u04F1')); // (1265) X
+      f.add(new Character('\u04F2')); // (1266) X
+      f.add(new Character('\u04F3')); // (1267) X
+      f.add(new Character('\u04F4')); // (1268) X
+      f.add(new Character('\u04F5')); // (1269) X
+      //f.add(new Character('\u04F6')); // (1270) X
+      //f.add(new Character('\u04F7')); // (1271) X
+      f.add(new Character('\u04F8')); // (1272) X
+      f.add(new Character('\u04F9')); // (1273) X
+      f.add(new Character('\u0531')); // (1329) X
+      f.add(new Character('\u0532')); // (1330) X
+      f.add(new Character('\u0533')); // (1331) X
+      f.add(new Character('\u0534')); // (1332) X
+      f.add(new Character('\u0535')); // (1333) X
+      f.add(new Character('\u0536')); // (1334) X
+      f.add(new Character('\u0537')); // (1335) X
+      f.add(new Character('\u0538')); // (1336) X
+      f.add(new Character('\u0539')); // (1337) X
+      f.add(new Character('\u053A')); // (1338) X
+      f.add(new Character('\u053B')); // (1339) X
+      f.add(new Character('\u053C')); // (1340) X
+      f.add(new Character('\u053D')); // (1341) X
+      f.add(new Character('\u053E')); // (1342) X
+      f.add(new Character('\u053F')); // (1343) X
+      f.add(new Character('\u0540')); // (1344) X
+      f.add(new Character('\u0541')); // (1345) X
+      f.add(new Character('\u0542')); // (1346) X
+      f.add(new Character('\u0543')); // (1347) X
+      f.add(new Character('\u0544')); // (1348) X
+      f.add(new Character('\u0545')); // (1349) X
+      f.add(new Character('\u0546')); // (1350) X
+      f.add(new Character('\u0547')); // (1351) X
+      f.add(new Character('\u0548')); // (1352) X
+      f.add(new Character('\u0549')); // (1353) X
+      f.add(new Character('\u054A')); // (1354) X
+      f.add(new Character('\u054B')); // (1355) X
+      f.add(new Character('\u054C')); // (1356) X
+      f.add(new Character('\u054D')); // (1357) X
+      f.add(new Character('\u054E')); // (1358) X
+      f.add(new Character('\u054F')); // (1359) X
+      f.add(new Character('\u0550')); // (1360) X
+      f.add(new Character('\u0551')); // (1361) X
+      f.add(new Character('\u0552')); // (1362) X
+      f.add(new Character('\u0553')); // (1363) X
+      f.add(new Character('\u0554')); // (1364) X
+      f.add(new Character('\u0555')); // (1365) X
+      f.add(new Character('\u0556')); // (1366) X
+      f.add(new Character('\u0559')); // (1369) X
+      f.add(new Character('\u0561')); // (1377) X
+      f.add(new Character('\u0562')); // (1378) X
+      f.add(new Character('\u0563')); // (1379) X
+      f.add(new Character('\u0564')); // (1380) X
+      f.add(new Character('\u0565')); // (1381) X
+      f.add(new Character('\u0566')); // (1382) X
+      f.add(new Character('\u0567')); // (1383) X
+      f.add(new Character('\u0568')); // (1384) X
+      f.add(new Character('\u0569')); // (1385) X
+      f.add(new Character('\u056A')); // (1386) X
+      f.add(new Character('\u056B')); // (1387) X
+      f.add(new Character('\u056C')); // (1388) X
+      f.add(new Character('\u056D')); // (1389) X
+      f.add(new Character('\u056E')); // (1390) X
+      f.add(new Character('\u056F')); // (1391) X
+      f.add(new Character('\u0570')); // (1392) X
+      f.add(new Character('\u0571')); // (1393) X
+      f.add(new Character('\u0572')); // (1394) X
+      f.add(new Character('\u0573')); // (1395) X
+      f.add(new Character('\u0574')); // (1396) X
+      f.add(new Character('\u0575')); // (1397) X
+      f.add(new Character('\u0576')); // (1398) X
+      f.add(new Character('\u0577')); // (1399) X
+      f.add(new Character('\u0578')); // (1400) X
+      f.add(new Character('\u0579')); // (1401) X
+      f.add(new Character('\u057A')); // (1402) X
+      f.add(new Character('\u057B')); // (1403) X
+      f.add(new Character('\u057C')); // (1404) X
+      f.add(new Character('\u057D')); // (1405) X
+      f.add(new Character('\u057E')); // (1406) X
+      f.add(new Character('\u057F')); // (1407) X
+      f.add(new Character('\u0580')); // (1408) X
+      f.add(new Character('\u0581')); // (1409) X
+      f.add(new Character('\u0582')); // (1410) X
+      f.add(new Character('\u0583')); // (1411) X
+      f.add(new Character('\u0584')); // (1412) X
+      f.add(new Character('\u0585')); // (1413) X
+      f.add(new Character('\u0586')); // (1414) X
+      f.add(new Character('\u0587')); // (1415) X
+      f.add(new Character('\u05D0')); // (1488) X
+      f.add(new Character('\u05D1')); // (1489) X
+      f.add(new Character('\u05D2')); // (1490) X
+      f.add(new Character('\u05D3')); // (1491) X
+      f.add(new Character('\u05D4')); // (1492) X
+      f.add(new Character('\u05D5')); // (1493) X
+      f.add(new Character('\u05D6')); // (1494) X
+      f.add(new Character('\u05D7')); // (1495) X
+      f.add(new Character('\u05D8')); // (1496) X
+      f.add(new Character('\u05D9')); // (1497) X
+      f.add(new Character('\u05DA')); // (1498) X
+      f.add(new Character('\u05DB')); // (1499) X
+      f.add(new Character('\u05DC')); // (1500) X
+      f.add(new Character('\u05DD')); // (1501) X
+      f.add(new Character('\u05DE')); // (1502) X
+      f.add(new Character('\u05DF')); // (1503) X
+      f.add(new Character('\u05E0')); // (1504) X
+      f.add(new Character('\u05E1')); // (1505) X
+      f.add(new Character('\u05E2')); // (1506) X
+      f.add(new Character('\u05E3')); // (1507) X
+      f.add(new Character('\u05E4')); // (1508) X
+      f.add(new Character('\u05E5')); // (1509) X
+      f.add(new Character('\u05E6')); // (1510) X
+      f.add(new Character('\u05E7')); // (1511) X
+      f.add(new Character('\u05E8')); // (1512) X
+      f.add(new Character('\u05E9')); // (1513) X
+      f.add(new Character('\u05EA')); // (1514) X
+      f.add(new Character('\u05F0')); // (1520) X
+      f.add(new Character('\u05F1')); // (1521) X
+      f.add(new Character('\u05F2')); // (1522) X
+      f.add(new Character('\u0621')); // (1569) X
+      f.add(new Character('\u0622')); // (1570) X
+      f.add(new Character('\u0623')); // (1571) X
+      f.add(new Character('\u0624')); // (1572) X
+      f.add(new Character('\u0625')); // (1573) X
+      f.add(new Character('\u0626')); // (1574) X
+      f.add(new Character('\u0627')); // (1575) X
+      f.add(new Character('\u0628')); // (1576) X
+      f.add(new Character('\u0629')); // (1577) X
+      f.add(new Character('\u062A')); // (1578) X
+      f.add(new Character('\u062B')); // (1579) X
+      f.add(new Character('\u062C')); // (1580) X
+      f.add(new Character('\u062D')); // (1581) X
+      f.add(new Character('\u062E')); // (1582) X
+      f.add(new Character('\u062F')); // (1583) X
+      f.add(new Character('\u0630')); // (1584) X
+      f.add(new Character('\u0631')); // (1585) X
+      f.add(new Character('\u0632')); // (1586) X
+      f.add(new Character('\u0633')); // (1587) X
+      f.add(new Character('\u0634')); // (1588) X
+      f.add(new Character('\u0635')); // (1589) X
+      f.add(new Character('\u0636')); // (1590) X
+      f.add(new Character('\u0637')); // (1591) X
+      f.add(new Character('\u0638')); // (1592) X
+      f.add(new Character('\u0639')); // (1593) X
+      f.add(new Character('\u063A')); // (1594) X
+      f.add(new Character('\u0640')); // (1600) X
+      f.add(new Character('\u0641')); // (1601) X
+      f.add(new Character('\u0642')); // (1602) X
+      f.add(new Character('\u0643')); // (1603) X
+      f.add(new Character('\u0644')); // (1604) X
+      f.add(new Character('\u0645')); // (1605) X
+      f.add(new Character('\u0646')); // (1606) X
+      f.add(new Character('\u0647')); // (1607) X
+      f.add(new Character('\u0648')); // (1608) X
+      f.add(new Character('\u0649')); // (1609) X
+      f.add(new Character('\u064A')); // (1610) X
+      f.add(new Character('\u0671')); // (1649) X
+      f.add(new Character('\u0672')); // (1650) X
+      f.add(new Character('\u0673')); // (1651) X
+      f.add(new Character('\u0674')); // (1652) X
+      f.add(new Character('\u0675')); // (1653) X
+      f.add(new Character('\u0676')); // (1654) X
+      f.add(new Character('\u0677')); // (1655) X
+      f.add(new Character('\u0678')); // (1656) X
+      f.add(new Character('\u0679')); // (1657) X
+      f.add(new Character('\u067A')); // (1658) X
+      f.add(new Character('\u067B')); // (1659) X
+      f.add(new Character('\u067C')); // (1660) X
+      f.add(new Character('\u067D')); // (1661) X
+      f.add(new Character('\u067E')); // (1662) X
+      f.add(new Character('\u067F')); // (1663) X
+      f.add(new Character('\u0680')); // (1664) X
+      f.add(new Character('\u0681')); // (1665) X
+      f.add(new Character('\u0682')); // (1666) X
+      f.add(new Character('\u0683')); // (1667) X
+      f.add(new Character('\u0684')); // (1668) X
+      f.add(new Character('\u0685')); // (1669) X
+      f.add(new Character('\u0686')); // (1670) X
+      f.add(new Character('\u0687')); // (1671) X
+      f.add(new Character('\u0688')); // (1672) X
+      f.add(new Character('\u0689')); // (1673) X
+      f.add(new Character('\u068A')); // (1674) X
+      f.add(new Character('\u068B')); // (1675) X
+      f.add(new Character('\u068C')); // (1676) X
+      f.add(new Character('\u068D')); // (1677) X
+      f.add(new Character('\u068E')); // (1678) X
+      f.add(new Character('\u068F')); // (1679) X
+      f.add(new Character('\u0690')); // (1680) X
+      f.add(new Character('\u0691')); // (1681) X
+      f.add(new Character('\u0692')); // (1682) X
+      f.add(new Character('\u0693')); // (1683) X
+      f.add(new Character('\u0694')); // (1684) X
+      f.add(new Character('\u0695')); // (1685) X
+      f.add(new Character('\u0696')); // (1686) X
+      f.add(new Character('\u0697')); // (1687) X
+      f.add(new Character('\u0698')); // (1688) X
+      f.add(new Character('\u0699')); // (1689) X
+      f.add(new Character('\u069A')); // (1690) X
+      f.add(new Character('\u069B')); // (1691) X
+      f.add(new Character('\u069C')); // (1692) X
+      f.add(new Character('\u069D')); // (1693) X
+      f.add(new Character('\u069E')); // (1694) X
+      f.add(new Character('\u069F')); // (1695) X
+      f.add(new Character('\u06A0')); // (1696) X
+      f.add(new Character('\u06A1')); // (1697) X
+      f.add(new Character('\u06A2')); // (1698) X
+      f.add(new Character('\u06A3')); // (1699) X
+      f.add(new Character('\u06A4')); // (1700) X
+      f.add(new Character('\u06A5')); // (1701) X
+      f.add(new Character('\u06A6')); // (1702) X
+      f.add(new Character('\u06A7')); // (1703) X
+      f.add(new Character('\u06A8')); // (1704) X
+      f.add(new Character('\u06A9')); // (1705) X
+      f.add(new Character('\u06AA')); // (1706) X
+      f.add(new Character('\u06AB')); // (1707) X
+      f.add(new Character('\u06AC')); // (1708) X
+      f.add(new Character('\u06AD')); // (1709) X
+      f.add(new Character('\u06AE')); // (1710) X
+      f.add(new Character('\u06AF')); // (1711) X
+      f.add(new Character('\u06B0')); // (1712) X
+      f.add(new Character('\u06B1')); // (1713) X
+      f.add(new Character('\u06B2')); // (1714) X
+      f.add(new Character('\u06B3')); // (1715) X
+      f.add(new Character('\u06B4')); // (1716) X
+      f.add(new Character('\u06B5')); // (1717) X
+      f.add(new Character('\u06B6')); // (1718) X
+      f.add(new Character('\u06B7')); // (1719) X
+      f.add(new Character('\u06BA')); // (1722) X
+      f.add(new Character('\u06BB')); // (1723) X
+      f.add(new Character('\u06BC')); // (1724) X
+      f.add(new Character('\u06BD')); // (1725) X
+      f.add(new Character('\u06BE')); // (1726) X
+      f.add(new Character('\u06C0')); // (1728) X
+      f.add(new Character('\u06C1')); // (1729) X
+      f.add(new Character('\u06C2')); // (1730) X
+      f.add(new Character('\u06C3')); // (1731) X
+      f.add(new Character('\u06C4')); // (1732) X
+      f.add(new Character('\u06C5')); // (1733) X
+      f.add(new Character('\u06C6')); // (1734) X
+      f.add(new Character('\u06C7')); // (1735) X
+      f.add(new Character('\u06C8')); // (1736) X
+      f.add(new Character('\u06C9')); // (1737) X
+      f.add(new Character('\u06CA')); // (1738) X
+      f.add(new Character('\u06CB')); // (1739) X
+      f.add(new Character('\u06CC')); // (1740) X
+      f.add(new Character('\u06CD')); // (1741) X
+      f.add(new Character('\u06CE')); // (1742) X
+      f.add(new Character('\u06D0')); // (1744) X
+      f.add(new Character('\u06D1')); // (1745) X
+      f.add(new Character('\u06D2')); // (1746) X
+      f.add(new Character('\u06D3')); // (1747) X
+      f.add(new Character('\u06D5')); // (1749) X
+      f.add(new Character('\u06E5')); // (1765) X
+      f.add(new Character('\u06E6')); // (1766) X
+      f.add(new Character('\u0905')); // (2309) X
+      f.add(new Character('\u0906')); // (2310) X
+      f.add(new Character('\u0907')); // (2311) X
+      f.add(new Character('\u0908')); // (2312) X
+      f.add(new Character('\u0909')); // (2313) X
+      f.add(new Character('\u090A')); // (2314) X
+      f.add(new Character('\u090B')); // (2315) X
+      f.add(new Character('\u090C')); // (2316) X
+      f.add(new Character('\u090D')); // (2317) X
+      f.add(new Character('\u090E')); // (2318) X
+      f.add(new Character('\u090F')); // (2319) X
+      f.add(new Character('\u0910')); // (2320) X
+      f.add(new Character('\u0911')); // (2321) X
+      f.add(new Character('\u0912')); // (2322) X
+      f.add(new Character('\u0913')); // (2323) X
+      f.add(new Character('\u0914')); // (2324) X
+      f.add(new Character('\u0915')); // (2325) X
+      f.add(new Character('\u0916')); // (2326) X
+      f.add(new Character('\u0917')); // (2327) X
+      f.add(new Character('\u0918')); // (2328) X
+      f.add(new Character('\u0919')); // (2329) X
+      f.add(new Character('\u091A')); // (2330) X
+      f.add(new Character('\u091B')); // (2331) X
+      f.add(new Character('\u091C')); // (2332) X
+      f.add(new Character('\u091D')); // (2333) X
+      f.add(new Character('\u091E')); // (2334) X
+      f.add(new Character('\u091F')); // (2335) X
+      f.add(new Character('\u0920')); // (2336) X
+      f.add(new Character('\u0921')); // (2337) X
+      f.add(new Character('\u0922')); // (2338) X
+      f.add(new Character('\u0923')); // (2339) X
+      f.add(new Character('\u0924')); // (2340) X
+      f.add(new Character('\u0925')); // (2341) X
+      f.add(new Character('\u0926')); // (2342) X
+      f.add(new Character('\u0927')); // (2343) X
+      f.add(new Character('\u0928')); // (2344) X
+      f.add(new Character('\u0929')); // (2345) X
+      f.add(new Character('\u092A')); // (2346) X
+      f.add(new Character('\u092B')); // (2347) X
+      f.add(new Character('\u092C')); // (2348) X
+      f.add(new Character('\u092D')); // (2349) X
+      f.add(new Character('\u092E')); // (2350) X
+      f.add(new Character('\u092F')); // (2351) X
+      f.add(new Character('\u0930')); // (2352) X
+      f.add(new Character('\u0931')); // (2353) X
+      f.add(new Character('\u0932')); // (2354) X
+      f.add(new Character('\u0933')); // (2355) X
+      f.add(new Character('\u0934')); // (2356) X
+      f.add(new Character('\u0935')); // (2357) X
+      f.add(new Character('\u0936')); // (2358) X
+      f.add(new Character('\u0937')); // (2359) X
+      f.add(new Character('\u0938')); // (2360) X
+      f.add(new Character('\u0939')); // (2361) X
+      f.add(new Character('\u093D')); // (2365) X
+      f.add(new Character('\u0958')); // (2392) X
+      f.add(new Character('\u0959')); // (2393) X
+      f.add(new Character('\u095A')); // (2394) X
+      f.add(new Character('\u095B')); // (2395) X
+      f.add(new Character('\u095C')); // (2396) X
+      f.add(new Character('\u095D')); // (2397) X
+      f.add(new Character('\u095E')); // (2398) X
+      f.add(new Character('\u095F')); // (2399) X
+      f.add(new Character('\u0960')); // (2400) X
+      f.add(new Character('\u0961')); // (2401) X
+      f.add(new Character('\u0985')); // (2437) X
+      f.add(new Character('\u0986')); // (2438) X
+      f.add(new Character('\u0987')); // (2439) X
+      f.add(new Character('\u0988')); // (2440) X
+      f.add(new Character('\u0989')); // (2441) X
+      f.add(new Character('\u098A')); // (2442) X
+      f.add(new Character('\u098B')); // (2443) X
+      f.add(new Character('\u098C')); // (2444) X
+      f.add(new Character('\u098F')); // (2447) X
+      f.add(new Character('\u0990')); // (2448) X
+      f.add(new Character('\u0993')); // (2451) X
+      f.add(new Character('\u0994')); // (2452) X
+      f.add(new Character('\u0995')); // (2453) X
+      f.add(new Character('\u0996')); // (2454) X
+      f.add(new Character('\u0997')); // (2455) X
+      f.add(new Character('\u0998')); // (2456) X
+      f.add(new Character('\u0999')); // (2457) X
+      f.add(new Character('\u099A')); // (2458) X
+      f.add(new Character('\u099B')); // (2459) X
+      f.add(new Character('\u099C')); // (2460) X
+      f.add(new Character('\u099D')); // (2461) X
+      f.add(new Character('\u099E')); // (2462) X
+      f.add(new Character('\u099F')); // (2463) X
+      f.add(new Character('\u09A0')); // (2464) X
+      f.add(new Character('\u09A1')); // (2465) X
+      f.add(new Character('\u09A2')); // (2466) X
+      f.add(new Character('\u09A3')); // (2467) X
+      f.add(new Character('\u09A4')); // (2468) X
+      f.add(new Character('\u09A5')); // (2469) X
+      f.add(new Character('\u09A6')); // (2470) X
+      f.add(new Character('\u09A7')); // (2471) X
+      f.add(new Character('\u09A8')); // (2472) X
+      f.add(new Character('\u09AA')); // (2474) X
+      f.add(new Character('\u09AB')); // (2475) X
+      f.add(new Character('\u09AC')); // (2476) X
+      f.add(new Character('\u09AD')); // (2477) X
+      f.add(new Character('\u09AE')); // (2478) X
+      f.add(new Character('\u09AF')); // (2479) X
+      f.add(new Character('\u09B0')); // (2480) X
+      f.add(new Character('\u09B2')); // (2482) X
+      f.add(new Character('\u09B6')); // (2486) X
+      f.add(new Character('\u09B7')); // (2487) X
+      f.add(new Character('\u09B8')); // (2488) X
+      f.add(new Character('\u09B9')); // (2489) X
+      f.add(new Character('\u09DC')); // (2524) X
+      f.add(new Character('\u09DD')); // (2525) X
+      f.add(new Character('\u09DF')); // (2527) X
+      f.add(new Character('\u09E0')); // (2528) X
+      f.add(new Character('\u09E1')); // (2529) X
+      f.add(new Character('\u09F0')); // (2544) X
+      f.add(new Character('\u09F1')); // (2545) X
+      f.add(new Character('\u0A05')); // (2565) X
+      f.add(new Character('\u0A06')); // (2566) X
+      f.add(new Character('\u0A07')); // (2567) X
+      f.add(new Character('\u0A08')); // (2568) X
+      f.add(new Character('\u0A09')); // (2569) X
+      f.add(new Character('\u0A0A')); // (2570) X
+      f.add(new Character('\u0A0F')); // (2575) X
+      f.add(new Character('\u0A10')); // (2576) X
+      f.add(new Character('\u0A13')); // (2579) X
+      f.add(new Character('\u0A14')); // (2580) X
+      f.add(new Character('\u0A15')); // (2581) X
+      f.add(new Character('\u0A16')); // (2582) X
+      f.add(new Character('\u0A17')); // (2583) X
+      f.add(new Character('\u0A18')); // (2584) X
+      f.add(new Character('\u0A19')); // (2585) X
+      f.add(new Character('\u0A1A')); // (2586) X
+      f.add(new Character('\u0A1B')); // (2587) X
+      f.add(new Character('\u0A1C')); // (2588) X
+      f.add(new Character('\u0A1D')); // (2589) X
+      f.add(new Character('\u0A1E')); // (2590) X
+      f.add(new Character('\u0A1F')); // (2591) X
+      f.add(new Character('\u0A20')); // (2592) X
+      f.add(new Character('\u0A21')); // (2593) X
+      f.add(new Character('\u0A22')); // (2594) X
+      f.add(new Character('\u0A23')); // (2595) X
+      f.add(new Character('\u0A24')); // (2596) X
+      f.add(new Character('\u0A25')); // (2597) X
+      f.add(new Character('\u0A26')); // (2598) X
+      f.add(new Character('\u0A27')); // (2599) X
+      f.add(new Character('\u0A28')); // (2600) X
+      f.add(new Character('\u0A2A')); // (2602) X
+      f.add(new Character('\u0A2B')); // (2603) X
+      f.add(new Character('\u0A2C')); // (2604) X
+      f.add(new Character('\u0A2D')); // (2605) X
+      f.add(new Character('\u0A2E')); // (2606) X
+      f.add(new Character('\u0A2F')); // (2607) X
+      f.add(new Character('\u0A30')); // (2608) X
+      f.add(new Character('\u0A32')); // (2610) X
+      f.add(new Character('\u0A33')); // (2611) X
+      f.add(new Character('\u0A35')); // (2613) X
+      f.add(new Character('\u0A36')); // (2614) X
+      f.add(new Character('\u0A38')); // (2616) X
+      f.add(new Character('\u0A39')); // (2617) X
+      f.add(new Character('\u0A59')); // (2649) X
+      f.add(new Character('\u0A5A')); // (2650) X
+      f.add(new Character('\u0A5B')); // (2651) X
+      f.add(new Character('\u0A5C')); // (2652) X
+      f.add(new Character('\u0A5E')); // (2654) X
+      f.add(new Character('\u0A72')); // (2674) X
+      f.add(new Character('\u0A73')); // (2675) X
+      f.add(new Character('\u0A74')); // (2676) X
+      f.add(new Character('\u0A85')); // (2693) X
+      f.add(new Character('\u0A86')); // (2694) X
+      f.add(new Character('\u0A87')); // (2695) X
+      f.add(new Character('\u0A88')); // (2696) X
+      f.add(new Character('\u0A89')); // (2697) X
+      f.add(new Character('\u0A8A')); // (2698) X
+      f.add(new Character('\u0A8B')); // (2699) X
+      f.add(new Character('\u0A8D')); // (2701) X
+      f.add(new Character('\u0A8F')); // (2703) X
+      f.add(new Character('\u0A90')); // (2704) X
+      f.add(new Character('\u0A91')); // (2705) X
+      f.add(new Character('\u0A93')); // (2707) X
+      f.add(new Character('\u0A94')); // (2708) X
+      f.add(new Character('\u0A95')); // (2709) X
+      f.add(new Character('\u0A96')); // (2710) X
+      f.add(new Character('\u0A97')); // (2711) X
+      f.add(new Character('\u0A98')); // (2712) X
+      f.add(new Character('\u0A99')); // (2713) X
+      f.add(new Character('\u0A9A')); // (2714) X
+      f.add(new Character('\u0A9B')); // (2715) X
+      f.add(new Character('\u0A9C')); // (2716) X
+      f.add(new Character('\u0A9D')); // (2717) X
+      f.add(new Character('\u0A9E')); // (2718) X
+      f.add(new Character('\u0A9F')); // (2719) X
+      f.add(new Character('\u0AA0')); // (2720) X
+      f.add(new Character('\u0AA1')); // (2721) X
+      f.add(new Character('\u0AA2')); // (2722) X
+      f.add(new Character('\u0AA3')); // (2723) X
+      f.add(new Character('\u0AA4')); // (2724) X
+      f.add(new Character('\u0AA5')); // (2725) X
+      f.add(new Character('\u0AA6')); // (2726) X
+      f.add(new Character('\u0AA7')); // (2727) X
+      f.add(new Character('\u0AA8')); // (2728) X
+      f.add(new Character('\u0AAA')); // (2730) X
+      f.add(new Character('\u0AAB')); // (2731) X
+      f.add(new Character('\u0AAC')); // (2732) X
+      f.add(new Character('\u0AAD')); // (2733) X
+      f.add(new Character('\u0AAE')); // (2734) X
+      f.add(new Character('\u0AAF')); // (2735) X
+      f.add(new Character('\u0AB0')); // (2736) X
+      f.add(new Character('\u0AB2')); // (2738) X
+      f.add(new Character('\u0AB3')); // (2739) X
+      f.add(new Character('\u0AB5')); // (2741) X
+      f.add(new Character('\u0AB6')); // (2742) X
+      f.add(new Character('\u0AB7')); // (2743) X
+      f.add(new Character('\u0AB8')); // (2744) X
+      f.add(new Character('\u0AB9')); // (2745) X
+      f.add(new Character('\u0ABD')); // (2749) X
+      f.add(new Character('\u0AE0')); // (2784) X
+      f.add(new Character('\u0B05')); // (2821) X
+      f.add(new Character('\u0B06')); // (2822) X
+      f.add(new Character('\u0B07')); // (2823) X
+      f.add(new Character('\u0B08')); // (2824) X
+      f.add(new Character('\u0B09')); // (2825) X
+      f.add(new Character('\u0B0A')); // (2826) X
+      f.add(new Character('\u0B0B')); // (2827) X
+      f.add(new Character('\u0B0C')); // (2828) X
+      f.add(new Character('\u0B0F')); // (2831) X
+      f.add(new Character('\u0B10')); // (2832) X
+      f.add(new Character('\u0B13')); // (2835) X
+      f.add(new Character('\u0B14')); // (2836) X
+      f.add(new Character('\u0B15')); // (2837) X
+      f.add(new Character('\u0B16')); // (2838) X
+      f.add(new Character('\u0B17')); // (2839) X
+      f.add(new Character('\u0B18')); // (2840) X
+      f.add(new Character('\u0B19')); // (2841) X
+      f.add(new Character('\u0B1A')); // (2842) X
+      f.add(new Character('\u0B1B')); // (2843) X
+      f.add(new Character('\u0B1C')); // (2844) X
+      f.add(new Character('\u0B1D')); // (2845) X
+      f.add(new Character('\u0B1E')); // (2846) X
+      f.add(new Character('\u0B1F')); // (2847) X
+      f.add(new Character('\u0B20')); // (2848) X
+      f.add(new Character('\u0B21')); // (2849) X
+      f.add(new Character('\u0B22')); // (2850) X
+      f.add(new Character('\u0B23')); // (2851) X
+      f.add(new Character('\u0B24')); // (2852) X
+      f.add(new Character('\u0B25')); // (2853) X
+      f.add(new Character('\u0B26')); // (2854) X
+      f.add(new Character('\u0B27')); // (2855) X
+      f.add(new Character('\u0B28')); // (2856) X
+      f.add(new Character('\u0B2A')); // (2858) X
+      f.add(new Character('\u0B2B')); // (2859) X
+      f.add(new Character('\u0B2C')); // (2860) X
+      f.add(new Character('\u0B2D')); // (2861) X
+      f.add(new Character('\u0B2E')); // (2862) X
+      f.add(new Character('\u0B2F')); // (2863) X
+      f.add(new Character('\u0B30')); // (2864) X
+      f.add(new Character('\u0B32')); // (2866) X
+      f.add(new Character('\u0B33')); // (2867) X
+      f.add(new Character('\u0B36')); // (2870) X
+      f.add(new Character('\u0B37')); // (2871) X
+      f.add(new Character('\u0B38')); // (2872) X
+      f.add(new Character('\u0B39')); // (2873) X
+      f.add(new Character('\u0B3D')); // (2877) X
+      f.add(new Character('\u0B5C')); // (2908) X
+      f.add(new Character('\u0B5D')); // (2909) X
+      f.add(new Character('\u0B5F')); // (2911) X
+      f.add(new Character('\u0B60')); // (2912) X
+      f.add(new Character('\u0B61')); // (2913) X
+      f.add(new Character('\u0B85')); // (2949) X
+      f.add(new Character('\u0B86')); // (2950) X
+      f.add(new Character('\u0B87')); // (2951) X
+      f.add(new Character('\u0B88')); // (2952) X
+      f.add(new Character('\u0B89')); // (2953) X
+      f.add(new Character('\u0B8A')); // (2954) X
+      f.add(new Character('\u0B8E')); // (2958) X
+      f.add(new Character('\u0B8F')); // (2959) X
+      f.add(new Character('\u0B90')); // (2960) X
+      f.add(new Character('\u0B92')); // (2962) X
+      f.add(new Character('\u0B93')); // (2963) X
+      f.add(new Character('\u0B94')); // (2964) X
+      f.add(new Character('\u0B95')); // (2965) X
+      f.add(new Character('\u0B99')); // (2969) X
+      f.add(new Character('\u0B9A')); // (2970) X
+      f.add(new Character('\u0B9C')); // (2972) X
+      f.add(new Character('\u0B9E')); // (2974) X
+      f.add(new Character('\u0B9F')); // (2975) X
+      f.add(new Character('\u0BA3')); // (2979) X
+      f.add(new Character('\u0BA4')); // (2980) X
+      f.add(new Character('\u0BA8')); // (2984) X
+      f.add(new Character('\u0BA9')); // (2985) X
+      f.add(new Character('\u0BAA')); // (2986) X
+      f.add(new Character('\u0BAE')); // (2990) X
+      f.add(new Character('\u0BAF')); // (2991) X
+      f.add(new Character('\u0BB0')); // (2992) X
+      f.add(new Character('\u0BB1')); // (2993) X
+      f.add(new Character('\u0BB2')); // (2994) X
+      f.add(new Character('\u0BB3')); // (2995) X
+      f.add(new Character('\u0BB4')); // (2996) X
+      f.add(new Character('\u0BB5')); // (2997) X
+      f.add(new Character('\u0BB7')); // (2999) X
+      f.add(new Character('\u0BB8')); // (3000) X
+      f.add(new Character('\u0BB9')); // (3001) X
+      f.add(new Character('\u0C05')); // (3077) X
+      f.add(new Character('\u0C06')); // (3078) X
+      f.add(new Character('\u0C07')); // (3079) X
+      f.add(new Character('\u0C08')); // (3080) X
+      f.add(new Character('\u0C09')); // (3081) X
+      f.add(new Character('\u0C0A')); // (3082) X
+      f.add(new Character('\u0C0B')); // (3083) X
+      f.add(new Character('\u0C0C')); // (3084) X
+      f.add(new Character('\u0C0E')); // (3086) X
+      f.add(new Character('\u0C0F')); // (3087) X
+      f.add(new Character('\u0C10')); // (3088) X
+      f.add(new Character('\u0C12')); // (3090) X
+      f.add(new Character('\u0C13')); // (3091) X
+      f.add(new Character('\u0C14')); // (3092) X
+      f.add(new Character('\u0C15')); // (3093) X
+      f.add(new Character('\u0C16')); // (3094) X
+      f.add(new Character('\u0C17')); // (3095) X
+      f.add(new Character('\u0C18')); // (3096) X
+      f.add(new Character('\u0C19')); // (3097) X
+      f.add(new Character('\u0C1A')); // (3098) X
+      f.add(new Character('\u0C1B')); // (3099) X
+      f.add(new Character('\u0C1C')); // (3100) X
+      f.add(new Character('\u0C1D')); // (3101) X
+      f.add(new Character('\u0C1E')); // (3102) X
+      f.add(new Character('\u0C1F')); // (3103) X
+      f.add(new Character('\u0C20')); // (3104) X
+      f.add(new Character('\u0C21')); // (3105) X
+      f.add(new Character('\u0C22')); // (3106) X
+      f.add(new Character('\u0C23')); // (3107) X
+      f.add(new Character('\u0C24')); // (3108) X
+      f.add(new Character('\u0C25')); // (3109) X
+      f.add(new Character('\u0C26')); // (3110) X
+      f.add(new Character('\u0C27')); // (3111) X
+      f.add(new Character('\u0C28')); // (3112) X
+      f.add(new Character('\u0C2A')); // (3114) X
+      f.add(new Character('\u0C2B')); // (3115) X
+      f.add(new Character('\u0C2C')); // (3116) X
+      f.add(new Character('\u0C2D')); // (3117) X
+      f.add(new Character('\u0C2E')); // (3118) X
+      f.add(new Character('\u0C2F')); // (3119) X
+      f.add(new Character('\u0C30')); // (3120) X
+      f.add(new Character('\u0C31')); // (3121) X
+      f.add(new Character('\u0C32')); // (3122) X
+      f.add(new Character('\u0C33')); // (3123) X
+      f.add(new Character('\u0C35')); // (3125) X
+      f.add(new Character('\u0C36')); // (3126) X
+      f.add(new Character('\u0C37')); // (3127) X
+      f.add(new Character('\u0C38')); // (3128) X
+      f.add(new Character('\u0C39')); // (3129) X
+      f.add(new Character('\u0C60')); // (3168) X
+      f.add(new Character('\u0C61')); // (3169) X
+      f.add(new Character('\u0C85')); // (3205) X
+      f.add(new Character('\u0C86')); // (3206) X
+      f.add(new Character('\u0C87')); // (3207) X
+      f.add(new Character('\u0C88')); // (3208) X
+      f.add(new Character('\u0C89')); // (3209) X
+      f.add(new Character('\u0C8A')); // (3210) X
+      f.add(new Character('\u0C8B')); // (3211) X
+      f.add(new Character('\u0C8C')); // (3212) X
+      f.add(new Character('\u0C8E')); // (3214) X
+      f.add(new Character('\u0C8F')); // (3215) X
+      f.add(new Character('\u0C90')); // (3216) X
+      f.add(new Character('\u0C92')); // (3218) X
+      f.add(new Character('\u0C93')); // (3219) X
+      f.add(new Character('\u0C94')); // (3220) X
+      f.add(new Character('\u0C95')); // (3221) X
+      f.add(new Character('\u0C96')); // (3222) X
+      f.add(new Character('\u0C97')); // (3223) X
+      f.add(new Character('\u0C98')); // (3224) X
+      f.add(new Character('\u0C99')); // (3225) X
+      f.add(new Character('\u0C9A')); // (3226) X
+      f.add(new Character('\u0C9B')); // (3227) X
+      f.add(new Character('\u0C9C')); // (3228) X
+      f.add(new Character('\u0C9D')); // (3229) X
+      f.add(new Character('\u0C9E')); // (3230) X
+      f.add(new Character('\u0C9F')); // (3231) X
+      f.add(new Character('\u0CA0')); // (3232) X
+      f.add(new Character('\u0CA1')); // (3233) X
+      f.add(new Character('\u0CA2')); // (3234) X
+      f.add(new Character('\u0CA3')); // (3235) X
+      f.add(new Character('\u0CA4')); // (3236) X
+      f.add(new Character('\u0CA5')); // (3237) X
+      f.add(new Character('\u0CA6')); // (3238) X
+      f.add(new Character('\u0CA7')); // (3239) X
+      f.add(new Character('\u0CA8')); // (3240) X
+      f.add(new Character('\u0CAA')); // (3242) X
+      f.add(new Character('\u0CAB')); // (3243) X
+      f.add(new Character('\u0CAC')); // (3244) X
+      f.add(new Character('\u0CAD')); // (3245) X
+      f.add(new Character('\u0CAE')); // (3246) X
+      f.add(new Character('\u0CAF')); // (3247) X
+      f.add(new Character('\u0CB0')); // (3248) X
+      f.add(new Character('\u0CB1')); // (3249) X
+      f.add(new Character('\u0CB2')); // (3250) X
+      f.add(new Character('\u0CB3')); // (3251) X
+      f.add(new Character('\u0CB5')); // (3253) X
+      f.add(new Character('\u0CB6')); // (3254) X
+      f.add(new Character('\u0CB7')); // (3255) X
+      f.add(new Character('\u0CB8')); // (3256) X
+      f.add(new Character('\u0CB9')); // (3257) X
+      f.add(new Character('\u0CDE')); // (3294) X
+      f.add(new Character('\u0CE0')); // (3296) X
+      f.add(new Character('\u0CE1')); // (3297) X
+      f.add(new Character('\u0D05')); // (3333) X
+      f.add(new Character('\u0D06')); // (3334) X
+      f.add(new Character('\u0D07')); // (3335) X
+      f.add(new Character('\u0D08')); // (3336) X
+      f.add(new Character('\u0D09')); // (3337) X
+      f.add(new Character('\u0D0A')); // (3338) X
+      f.add(new Character('\u0D0B')); // (3339) X
+      f.add(new Character('\u0D0C')); // (3340) X
+      f.add(new Character('\u0D0E')); // (3342) X
+      f.add(new Character('\u0D0F')); // (3343) X
+      f.add(new Character('\u0D10')); // (3344) X
+      f.add(new Character('\u0D12')); // (3346) X
+      f.add(new Character('\u0D13')); // (3347) X
+      f.add(new Character('\u0D14')); // (3348) X
+      f.add(new Character('\u0D15')); // (3349) X
+      f.add(new Character('\u0D16')); // (3350) X
+      f.add(new Character('\u0D17')); // (3351) X
+      f.add(new Character('\u0D18')); // (3352) X
+      f.add(new Character('\u0D19')); // (3353) X
+      f.add(new Character('\u0D1A')); // (3354) X
+      f.add(new Character('\u0D1B')); // (3355) X
+      f.add(new Character('\u0D1C')); // (3356) X
+      f.add(new Character('\u0D1D')); // (3357) X
+      f.add(new Character('\u0D1E')); // (3358) X
+      f.add(new Character('\u0D1F')); // (3359) X
+      f.add(new Character('\u0D20')); // (3360) X
+      f.add(new Character('\u0D21')); // (3361) X
+      f.add(new Character('\u0D22')); // (3362) X
+      f.add(new Character('\u0D23')); // (3363) X
+      f.add(new Character('\u0D24')); // (3364) X
+      f.add(new Character('\u0D25')); // (3365) X
+      f.add(new Character('\u0D26')); // (3366) X
+      f.add(new Character('\u0D27')); // (3367) X
+      f.add(new Character('\u0D28')); // (3368) X
+      f.add(new Character('\u0D2A')); // (3370) X
+      f.add(new Character('\u0D2B')); // (3371) X
+      f.add(new Character('\u0D2C')); // (3372) X
+      f.add(new Character('\u0D2D')); // (3373) X
+      f.add(new Character('\u0D2E')); // (3374) X
+      f.add(new Character('\u0D2F')); // (3375) X
+      f.add(new Character('\u0D30')); // (3376) X
+      f.add(new Character('\u0D31')); // (3377) X
+      f.add(new Character('\u0D32')); // (3378) X
+      f.add(new Character('\u0D33')); // (3379) X
+      f.add(new Character('\u0D34')); // (3380) X
+      f.add(new Character('\u0D35')); // (3381) X
+      f.add(new Character('\u0D36')); // (3382) X
+      f.add(new Character('\u0D37')); // (3383) X
+      f.add(new Character('\u0D38')); // (3384) X
+      f.add(new Character('\u0D39')); // (3385) X
+      f.add(new Character('\u0D60')); // (3424) X
+      f.add(new Character('\u0D61')); // (3425) X
+      f.add(new Character('\u0E01')); // (3585) X
+      f.add(new Character('\u0E02')); // (3586) X
+      f.add(new Character('\u0E03')); // (3587) X
+      f.add(new Character('\u0E04')); // (3588) X
+      f.add(new Character('\u0E05')); // (3589) X
+      f.add(new Character('\u0E06')); // (3590) X
+      f.add(new Character('\u0E07')); // (3591) X
+      f.add(new Character('\u0E08')); // (3592) X
+      f.add(new Character('\u0E09')); // (3593) X
+      f.add(new Character('\u0E0A')); // (3594) X
+      f.add(new Character('\u0E0B')); // (3595) X
+      f.add(new Character('\u0E0C')); // (3596) X
+      f.add(new Character('\u0E0D')); // (3597) X
+      f.add(new Character('\u0E0E')); // (3598) X
+      f.add(new Character('\u0E0F')); // (3599) X
+      f.add(new Character('\u0E10')); // (3600) X
+      f.add(new Character('\u0E11')); // (3601) X
+      f.add(new Character('\u0E12')); // (3602) X
+      f.add(new Character('\u0E13')); // (3603) X
+      f.add(new Character('\u0E14')); // (3604) X
+      f.add(new Character('\u0E15')); // (3605) X
+      f.add(new Character('\u0E16')); // (3606) X
+      f.add(new Character('\u0E17')); // (3607) X
+      f.add(new Character('\u0E18')); // (3608) X
+      f.add(new Character('\u0E19')); // (3609) X
+      f.add(new Character('\u0E1A')); // (3610) X
+      f.add(new Character('\u0E1B')); // (3611) X
+      f.add(new Character('\u0E1C')); // (3612) X
+      f.add(new Character('\u0E1D')); // (3613) X
+      f.add(new Character('\u0E1E')); // (3614) X
+      f.add(new Character('\u0E1F')); // (3615) X
+      f.add(new Character('\u0E20')); // (3616) X
+      f.add(new Character('\u0E21')); // (3617) X
+      f.add(new Character('\u0E22')); // (3618) X
+      f.add(new Character('\u0E23')); // (3619) X
+      f.add(new Character('\u0E24')); // (3620) X
+      f.add(new Character('\u0E25')); // (3621) X
+      f.add(new Character('\u0E26')); // (3622) X
+      f.add(new Character('\u0E27')); // (3623) X
+      f.add(new Character('\u0E28')); // (3624) X
+      f.add(new Character('\u0E29')); // (3625) X
+      f.add(new Character('\u0E2A')); // (3626) X
+      f.add(new Character('\u0E2B')); // (3627) X
+      f.add(new Character('\u0E2C')); // (3628) X
+      f.add(new Character('\u0E2D')); // (3629) X
+      f.add(new Character('\u0E2E')); // (3630) X
+      f.add(new Character('\u0E30')); // (3632) X
+      f.add(new Character('\u0E32')); // (3634) X
+      f.add(new Character('\u0E33')); // (3635) X
+      f.add(new Character('\u0E40')); // (3648) X
+      f.add(new Character('\u0E41')); // (3649) X
+      f.add(new Character('\u0E42')); // (3650) X
+      f.add(new Character('\u0E43')); // (3651) X
+      f.add(new Character('\u0E44')); // (3652) X
+      f.add(new Character('\u0E45')); // (3653) X
+      f.add(new Character('\u0E46')); // (3654) X
+      f.add(new Character('\u0E81')); // (3713) X
+      f.add(new Character('\u0E82')); // (3714) X
+      f.add(new Character('\u0E84')); // (3716) X
+      f.add(new Character('\u0E87')); // (3719) X
+      f.add(new Character('\u0E88')); // (3720) X
+      f.add(new Character('\u0E8A')); // (3722) X
+      f.add(new Character('\u0E8D')); // (3725) X
+      f.add(new Character('\u0E94')); // (3732) X
+      f.add(new Character('\u0E95')); // (3733) X
+      f.add(new Character('\u0E96')); // (3734) X
+      f.add(new Character('\u0E97')); // (3735) X
+      f.add(new Character('\u0E99')); // (3737) X
+      f.add(new Character('\u0E9A')); // (3738) X
+      f.add(new Character('\u0E9B')); // (3739) X
+      f.add(new Character('\u0E9C')); // (3740) X
+      f.add(new Character('\u0E9D')); // (3741) X
+      f.add(new Character('\u0E9E')); // (3742) X
+      f.add(new Character('\u0E9F')); // (3743) X
+      f.add(new Character('\u0EA1')); // (3745) X
+      f.add(new Character('\u0EA2')); // (3746) X
+      f.add(new Character('\u0EA3')); // (3747) X
+      f.add(new Character('\u0EA5')); // (3749) X
+      f.add(new Character('\u0EA7')); // (3751) X
+      f.add(new Character('\u0EAA')); // (3754) X
+      f.add(new Character('\u0EAB')); // (3755) X
+      f.add(new Character('\u0EAD')); // (3757) X
+      f.add(new Character('\u0EAE')); // (3758) X
+      f.add(new Character('\u0EB0')); // (3760) X
+      f.add(new Character('\u0EB2')); // (3762) X
+      f.add(new Character('\u0EB3')); // (3763) X
+      f.add(new Character('\u0EBD')); // (3773) X
+      f.add(new Character('\u0EC0')); // (3776) X
+      f.add(new Character('\u0EC1')); // (3777) X
+      f.add(new Character('\u0EC2')); // (3778) X
+      f.add(new Character('\u0EC3')); // (3779) X
+      f.add(new Character('\u0EC4')); // (3780) X
+      f.add(new Character('\u0EC6')); // (3782) X
+      f.add(new Character('\u0EDC')); // (3804) X
+      f.add(new Character('\u0EDD')); // (3805) X
+      f.add(new Character('\u0F40')); // (3904) X
+      f.add(new Character('\u0F41')); // (3905) X
+      f.add(new Character('\u0F42')); // (3906) X
+      f.add(new Character('\u0F43')); // (3907) X
+      f.add(new Character('\u0F44')); // (3908) X
+      f.add(new Character('\u0F45')); // (3909) X
+      f.add(new Character('\u0F46')); // (3910) X
+      f.add(new Character('\u0F47')); // (3911) X
+      f.add(new Character('\u0F49')); // (3913) X
+      f.add(new Character('\u0F4A')); // (3914) X
+      f.add(new Character('\u0F4B')); // (3915) X
+      f.add(new Character('\u0F4C')); // (3916) X
+      f.add(new Character('\u0F4D')); // (3917) X
+      f.add(new Character('\u0F4E')); // (3918) X
+      f.add(new Character('\u0F4F')); // (3919) X
+      f.add(new Character('\u0F50')); // (3920) X
+      f.add(new Character('\u0F51')); // (3921) X
+      f.add(new Character('\u0F52')); // (3922) X
+      f.add(new Character('\u0F53')); // (3923) X
+      f.add(new Character('\u0F54')); // (3924) X
+      f.add(new Character('\u0F55')); // (3925) X
+      f.add(new Character('\u0F56')); // (3926) X
+      f.add(new Character('\u0F57')); // (3927) X
+      f.add(new Character('\u0F58')); // (3928) X
+      f.add(new Character('\u0F59')); // (3929) X
+      f.add(new Character('\u0F5A')); // (3930) X
+      f.add(new Character('\u0F5B')); // (3931) X
+      f.add(new Character('\u0F5C')); // (3932) X
+      f.add(new Character('\u0F5D')); // (3933) X
+      f.add(new Character('\u0F5E')); // (3934) X
+      f.add(new Character('\u0F5F')); // (3935) X
+      f.add(new Character('\u0F60')); // (3936) X
+      f.add(new Character('\u0F61')); // (3937) X
+      f.add(new Character('\u0F62')); // (3938) X
+      f.add(new Character('\u0F63')); // (3939) X
+      f.add(new Character('\u0F64')); // (3940) X
+      f.add(new Character('\u0F65')); // (3941) X
+      f.add(new Character('\u0F66')); // (3942) X
+      f.add(new Character('\u0F67')); // (3943) X
+      f.add(new Character('\u0F68')); // (3944) X
+      f.add(new Character('\u0F69')); // (3945) X
+
+      return f;
+   }
+
+   /**
+    * Initializes ordinary characters for iSeries.
+    * Has a side-effect of adding the HashSet to ordinaryFlagsSet.
+    * @return The HashSet
+    */
+   protected static HashSet<Character> initOrdinaryFlags400()
+   {
+      // For 400:
+      HashSet<Character> f = new HashSet<Character>(349);
+      ordinaryFlagsSet.put(PLATFORM_400_KEY, f);
+      f.add(new Character('\u0023')); // (35) #
+      f.add(new Character('\u0024')); // (36) $
+      f.add(new Character('\u0040')); // (64) @
+      initCommonOrdinaryFlags(f);
+      return f;
+   }
+
+   /**
+    * Initializes ordinary characters for zSeries.
+    * Has a side-effect of adding the HashSet to ordinaryFlagsSet.
+    * @return The HashSet
+    */
+   protected static HashSet<Character> initOrdinaryFlags390()
+   {
+      // For 390:
+      HashSet<Character> f = new HashSet<Character>(349);
+      ordinaryFlagsSet.put(PLATFORM_390_KEY, f);
+      f.add(new Character('\u0023')); // (35) #
+      f.add(new Character('\u0024')); // (36) $
+      f.add(new Character('\u0040')); // (64) @
+      initCommonOrdinaryFlags(f);
+      return f;
+   }
+
+   /**
+    * Initializes ordinary characters for LUWO for all languages.
+    * @param f The HashSet
+    */
+   protected static void initCommonOrdinaryFlags(HashSet<Character> f)
+   {
+      f.add(new Character('\u0041')); // (   65) A
+      f.add(new Character('\u0042')); // (   66) B
+      f.add(new Character('\u0043')); // (   67) C
+      f.add(new Character('\u0044')); // (   68) D
+      f.add(new Character('\u0045')); // (   69) E
+      f.add(new Character('\u0046')); // (   70) F
+      f.add(new Character('\u0047')); // (   71) G
+      f.add(new Character('\u0048')); // (   72) H
+      f.add(new Character('\u0049')); // (   73) I
+      f.add(new Character('\u004A')); // (   74) J
+      f.add(new Character('\u004B')); // (   75) K
+      f.add(new Character('\u004C')); // (   76) L
+      f.add(new Character('\u004D')); // (   77) M
+      f.add(new Character('\u004E')); // (   78) N
+      f.add(new Character('\u004F')); // (   79) O
+      f.add(new Character('\u0050')); // (   80) P
+      f.add(new Character('\u0051')); // (   81) Q
+      f.add(new Character('\u0052')); // (   82) R
+      f.add(new Character('\u0053')); // (   83) S
+      f.add(new Character('\u0054')); // (   84) T
+      f.add(new Character('\u0055')); // (   85) U
+      f.add(new Character('\u0056')); // (   86) V
+      f.add(new Character('\u0057')); // (   87) W
+      f.add(new Character('\u0058')); // (   88) X
+      f.add(new Character('\u0059')); // (   89) Y
+      f.add(new Character('\u005A')); // (   90) Z
+      f.add(new Character('\u0061')); // (   97) a
+      f.add(new Character('\u0062')); // (   98) b
+      f.add(new Character('\u0063')); // (   99) c
+      f.add(new Character('\u0064')); // (  100) d
+      f.add(new Character('\u0065')); // (  101) e
+      f.add(new Character('\u0066')); // (  102) f
+      f.add(new Character('\u0067')); // (  103) g
+      f.add(new Character('\u0068')); // (  104) h
+      f.add(new Character('\u0069')); // (  105) i
+      f.add(new Character('\u006A')); // (  106) j
+      f.add(new Character('\u006B')); // (  107) k
+      f.add(new Character('\u006C')); // (  108) l
+      f.add(new Character('\u006D')); // (  109) m
+      f.add(new Character('\u006E')); // (  110) n
+      f.add(new Character('\u006F')); // (  111) o
+      f.add(new Character('\u0070')); // (  112) p
+      f.add(new Character('\u0071')); // (  113) q
+      f.add(new Character('\u0072')); // (  114) r
+      f.add(new Character('\u0073')); // (  115) s
+      f.add(new Character('\u0074')); // (  116) t
+      f.add(new Character('\u0075')); // (  117) u
+      f.add(new Character('\u0076')); // (  118) v
+      f.add(new Character('\u0077')); // (  119) w
+      f.add(new Character('\u0078')); // (  120) x
+      f.add(new Character('\u0079')); // (  121) y
+      f.add(new Character('\u007A')); // (  122) z
+   }
+
+   /**
+    * Initializes ordinary characters for LUWO for a given language.
+    * @param f The HashSet
+    * @param locale The locale of the database.
+    */
+   protected static void initOrdinaryFlagsLUWO(HashSet<Character> f, Locale locale)
+   {
+      // Get the code page of the database and arrange the init methods
+      // according to code page; check Linux, AIX, etc.
+      // Default to anything goes?
+      String lang = locale.getLanguage();
+      if (lang.equalsIgnoreCase("cs")) //$NON-NLS-1$
+      {
+         initCSFlags(f);
+         init_EU_Flags(f);
+      }
+      else if (lang.equalsIgnoreCase("de")) //$NON-NLS-1$
+      {
+         initDEFlags(f);
+         init_EU_Flags(f);
+      }
+      else if (lang.equalsIgnoreCase("es")) //$NON-NLS-1$
+      {
+         initESFlags(f);
+         init_EU_Flags(f);
+      }
+      else if (lang.equalsIgnoreCase("fr")) //$NON-NLS-1$
+      {
+         initFRFlags(f);
+         init_EU_Flags(f);
+      }
+      else if (lang.equalsIgnoreCase("hu")) //$NON-NLS-1$
+      {
+         initHUFlags(f);
+         init_EU_Flags(f);
+      }
+      else if (lang.equalsIgnoreCase("it")) //$NON-NLS-1$
+      {
+         initITFlags(f);
+         init_EU_Flags(f);
+      }
+      else if (lang.equalsIgnoreCase("ja")) //$NON-NLS-1$
+      {
+         initJAFlags(f);
+      }
+      else if (lang.equalsIgnoreCase("ko")) //$NON-NLS-1$
+      {
+         initKOFlags(f);
+      }
+      else if (lang.equalsIgnoreCase("pl")) //$NON-NLS-1$
+      {
+         initPLFlags(f);
+         init_EU_Flags(f);
+      }
+      else if (lang.equalsIgnoreCase("pt")) //$NON-NLS-1$
+      {
+         initPTFlags(f);
+         init_EU_Flags(f);
+      }
+      else if (lang.equalsIgnoreCase("ru")) //$NON-NLS-1$
+      {
+         initRUFlags(f);
+         init_EU_Flags(f);
+      }
+      else if (lang.equalsIgnoreCase("zh")) //$NON-NLS-1$
+      {
+         String country = locale.getCountry();
+         if (country.equalsIgnoreCase("TW")) //$NON-NLS-1$
+         {
+            initTWFlags(f);
+         }
+         else
+         {
+            initZHFlags(f);
+         }
+      }
+      else //if (lang.equalsIgnoreCase("en"))
+      {
+         initENFlags(f);
+         init_EU_Flags(f);
+      }
+   }
+
+   /**
+    * Initializes ordinary characters for LUWO for the EN language.
+    * @param f The HashSet
+    */
+   protected static void initENFlags(HashSet<Character> f)
+   {
+      f.add(new Character('\u00AA')); // (  170) feminine_ordinal
+      f.add(new Character('\u00BA')); // (  186) masculine_ordinal
+      f.add(new Character('\u00C0')); // (  192) A_grave
+      f.add(new Character('\u00C1')); // (  193) A_acute
+      f.add(new Character('\u00C2')); // (  194) A_circumflex
+      f.add(new Character('\u00C3')); // (  195) A_tilde
+      f.add(new Character('\u00C4')); // (  196) A_umlaut
+      f.add(new Character('\u00C5')); // (  197) A_ring
+      f.add(new Character('\u00C6')); // (  198) AE_ligature
+      f.add(new Character('\u00C7')); // (  199) C_cedilla
+      f.add(new Character('\u00C8')); // (  200) E_grave
+      f.add(new Character('\u00C9')); // (  201) E_acute
+      f.add(new Character('\u00CA')); // (  202) E_circumflex
+      f.add(new Character('\u00CB')); // (  203) E_umlaut
+      f.add(new Character('\u00CC')); // (  204) I_grave
+      f.add(new Character('\u00CD')); // (  205) I_acute
+      f.add(new Character('\u00CE')); // (  206) I_circumflex
+      f.add(new Character('\u00CF')); // (  207) I_umlaut
+      f.add(new Character('\u00D0')); // (  208) ETH_Q
+      f.add(new Character('\u00D1')); // (  209) N_tilde
+      f.add(new Character('\u00D2')); // (  210) O_grave
+      f.add(new Character('\u00D3')); // (  211) O_acute
+      f.add(new Character('\u00D4')); // (  212) O_circumflex
+      f.add(new Character('\u00D5')); // (  213) O_tilde
+      f.add(new Character('\u00D6')); // (  214) O_umlaut
+      f.add(new Character('\u00D8')); // (  216) O_slash
+      f.add(new Character('\u00D9')); // (  217) U_grave
+      f.add(new Character('\u00DA')); // (  218) U_acute
+      f.add(new Character('\u00DB')); // (  219) U_circumflex
+      f.add(new Character('\u00DC')); // (  220) U_umlaut
+      f.add(new Character('\u00DD')); // (  221) Y_acute
+      f.add(new Character('\u00DE')); // (  222) THORN
+      f.add(new Character('\u00DF')); // (  223) sharp_s
+      f.add(new Character('\u00E0')); // (  224) a_grave
+      f.add(new Character('\u00E1')); // (  225) a_acute
+      f.add(new Character('\u00E2')); // (  226) a_circumflex
+      f.add(new Character('\u00E3')); // (  227) a_tilde
+      f.add(new Character('\u00E4')); // (  228) a_umlaut
+      f.add(new Character('\u00E5')); // (  229) a_ring
+      f.add(new Character('\u00E6')); // (  230) ae_ligature
+      f.add(new Character('\u00E7')); // (  231) c_cedilla
+      f.add(new Character('\u00E8')); // (  232) e_grave
+      f.add(new Character('\u00E9')); // (  233) e_acute
+      f.add(new Character('\u00EA')); // (  234) e_circumflex
+      f.add(new Character('\u00EB')); // (  235) e_umlaut
+      f.add(new Character('\u00EC')); // (  236) i_grave
+      f.add(new Character('\u00ED')); // (  237) i_acute
+      f.add(new Character('\u00EE')); // (  238) i_circumflex
+      f.add(new Character('\u00EF')); // (  239) i_umlaut
+      f.add(new Character('\u00F0')); // (  240) eth
+      f.add(new Character('\u00F1')); // (  241) n_tilde
+      f.add(new Character('\u00F2')); // (  242) o_grave
+      f.add(new Character('\u00F3')); // (  243) o_acute
+      f.add(new Character('\u00F4')); // (  244) o_circumflex
+      f.add(new Character('\u00F5')); // (  245) o_tilde
+      f.add(new Character('\u00F6')); // (  246) o_umlaut
+      f.add(new Character('\u00F8')); // (  248) o_slash
+      f.add(new Character('\u00F9')); // (  249) u_grave
+      f.add(new Character('\u00FA')); // (  250) u_acute
+      f.add(new Character('\u00FB')); // (  251) u_circumflex
+      f.add(new Character('\u00FC')); // (  252) u_umlaut
+      f.add(new Character('\u00FD')); // (  253) y_acute
+      f.add(new Character('\u00FE')); // (  254) thorn
+      f.add(new Character('\u00FF')); // (  255) y_umlaut
+      f.add(new Character('\u0152')); // (  338) OE_ligature
+      f.add(new Character('\u0153')); // (  339) oe_ligature
+      f.add(new Character('\u0160')); // (  352) S_caron
+      f.add(new Character('\u0161')); // (  353) s_caron
+      f.add(new Character('\u0178')); // (  376) Y_diaeresis
+   }
+
+   /**
+    * Initializes ordinary characters for LUWO for the ZH language.
+    * @param f The HashSet
+    */
+   protected static void init_EU_Flags(HashSet<Character> f)
+   {
+      f.add(new Character('\uFF03')); // (65283) X
+      f.add(new Character('\uFF04')); // (65284) X
+      f.add(new Character('\uFF20')); // (65312) X
+      f.add(new Character('\uFF21')); // (65313) X
+      f.add(new Character('\uFF22')); // (65314) X
+      f.add(new Character('\uFF23')); // (65315) X
+      f.add(new Character('\uFF24')); // (65316) X
+      f.add(new Character('\uFF25')); // (65317) X
+      f.add(new Character('\uFF26')); // (65318) X
+      f.add(new Character('\uFF27')); // (65319) X
+      f.add(new Character('\uFF28')); // (65320) X
+      f.add(new Character('\uFF29')); // (65321) X
+      f.add(new Character('\uFF2A')); // (65322) X
+      f.add(new Character('\uFF2B')); // (65323) X
+      f.add(new Character('\uFF2C')); // (65324) X
+      f.add(new Character('\uFF2D')); // (65325) X
+      f.add(new Character('\uFF2E')); // (65326) X
+      f.add(new Character('\uFF2F')); // (65327) X
+      f.add(new Character('\uFF30')); // (65328) X
+      f.add(new Character('\uFF31')); // (65329) X
+      f.add(new Character('\uFF32')); // (65330) X
+      f.add(new Character('\uFF33')); // (65331) X
+      f.add(new Character('\uFF34')); // (65332) X
+      f.add(new Character('\uFF35')); // (65333) X
+      f.add(new Character('\uFF36')); // (65334) X
+      f.add(new Character('\uFF37')); // (65335) X
+      f.add(new Character('\uFF38')); // (65336) X
+      f.add(new Character('\uFF39')); // (65337) X
+      f.add(new Character('\uFF3A')); // (65338) X
+      f.add(new Character('\uFF41')); // (65345) X
+      f.add(new Character('\uFF42')); // (65346) X
+      f.add(new Character('\uFF43')); // (65347) X
+      f.add(new Character('\uFF44')); // (65348) X
+      f.add(new Character('\uFF45')); // (65349) X
+      f.add(new Character('\uFF46')); // (65350) X
+      f.add(new Character('\uFF47')); // (65351) X
+      f.add(new Character('\uFF48')); // (65352) X
+      f.add(new Character('\uFF49')); // (65353) X
+      f.add(new Character('\uFF4A')); // (65354) X
+      f.add(new Character('\uFF4B')); // (65355) X
+      f.add(new Character('\uFF4C')); // (65356) X
+      f.add(new Character('\uFF4D')); // (65357) X
+      f.add(new Character('\uFF4E')); // (65358) X
+      f.add(new Character('\uFF4F')); // (65359) X
+      f.add(new Character('\uFF50')); // (65360) X
+      f.add(new Character('\uFF51')); // (65361) X
+      f.add(new Character('\uFF52')); // (65362) X
+      f.add(new Character('\uFF53')); // (65363) X
+      f.add(new Character('\uFF54')); // (65364) X
+      f.add(new Character('\uFF55')); // (65365) X
+      f.add(new Character('\uFF56')); // (65366) X
+      f.add(new Character('\uFF57')); // (65367) X
+      f.add(new Character('\uFF58')); // (65368) X
+      f.add(new Character('\uFF59')); // (65369) X
+      f.add(new Character('\uFF5A')); // (65370) X
+   }
+
+   /**
+    * Initializes ordinary characters for LUWO for the ZH language.
+    * @param f The HashSet
+    */
+   protected static void initZHFlags(HashSet<Character> f)
+   {
+      f.add(new Character('\u00A4')); // (  164) currency
+      f.add(new Character('\u00A7')); // (  167) SECTION
+      f.add(new Character('\u00A8')); // (  168) diaeresis
+      f.add(new Character('\u00B0')); // (  176) degree
+      f.add(new Character('\u00B1')); // (  177) plus_minus
+      f.add(new Character('\u00B7')); // (  183) middot
+      f.add(new Character('\u00D7')); // (  215) times
+      f.add(new Character('\u00E0')); // (  224) a_grave
+      f.add(new Character('\u00E1')); // (  225) a_acute
+      f.add(new Character('\u00E8')); // (  232) e_grave
+      f.add(new Character('\u00E9')); // (  233) e_acute
+      f.add(new Character('\u00EA')); // (  234) e_circumflex
+      f.add(new Character('\u00EC')); // (  236) i_grave
+      f.add(new Character('\u00ED')); // (  237) i_acute
+      f.add(new Character('\u00F2')); // (  242) o_grave
+      f.add(new Character('\u00F3')); // (  243) o_acute
+      f.add(new Character('\u00F9')); // (  249) u_grave
+      f.add(new Character('\u00FA')); // (  250) u_acute
+      f.add(new Character('\u00FC')); // (  252) u_umlaut
+      f.add(new Character('\u0101')); // (  257) a_bar
+      f.add(new Character('\u0113')); // (  275) e_macron
+      f.add(new Character('\u011B')); // (  283) e_caron
+      f.add(new Character('\u012B')); // (  299) i_macron
+      f.add(new Character('\u0144')); // (  324) n_acute
+      f.add(new Character('\u0148')); // (  328) n_caron
+      f.add(new Character('\u014D')); // (  333) o_macron
+      f.add(new Character('\u016B')); // (  363) u_macron
+      f.add(new Character('\u01CE')); // (  462) X
+      f.add(new Character('\u01D0')); // (  464) X
+      f.add(new Character('\u01D2')); // (  466) X
+      f.add(new Character('\u01D4')); // (  468) X
+      f.add(new Character('\u01D6')); // (  470) X
+      f.add(new Character('\u01D8')); // (  472) X
+      f.add(new Character('\u01DA')); // (  474) X
+      f.add(new Character('\u01DC')); // (  476) X
+      f.add(new Character('\u01F9')); // (  505) X
+      f.add(new Character('\u0251')); // (  593) X
+      f.add(new Character('\u0261')); // (  609) X
+      f.add(new Character('\u02C7')); // (  711) X
+      f.add(new Character('\u02C9')); // (  713) X
+      f.add(new Character('\u02CA')); // (  714) X
+      f.add(new Character('\u02CB')); // (  715) X
+      f.add(new Character('\u02D9')); // (  729) X
+      f.add(new Character('\u0391')); // (  913) X
+      f.add(new Character('\u0392')); // (  914) X
+      f.add(new Character('\u0393')); // (  915) X
+      f.add(new Character('\u0394')); // (  916) X
+      f.add(new Character('\u0395')); // (  917) X
+      f.add(new Character('\u0396')); // (  918) X
+      f.add(new Character('\u0397')); // (  919) X
+      f.add(new Character('\u0398')); // (  920) X
+      f.add(new Character('\u0399')); // (  921) X
+      f.add(new Character('\u039A')); // (  922) X
+      f.add(new Character('\u039B')); // (  923) X
+      f.add(new Character('\u039C')); // (  924) X
+      f.add(new Character('\u039D')); // (  925) X
+      f.add(new Character('\u039E')); // (  926) X
+      f.add(new Character('\u039F')); // (  927) X
+      f.add(new Character('\u03A0')); // (  928) X
+      f.add(new Character('\u03A1')); // (  929) X
+      f.add(new Character('\u03A3')); // (  931) X
+      f.add(new Character('\u03A4')); // (  932) X
+      f.add(new Character('\u03A5')); // (  933) X
+      f.add(new Character('\u03A6')); // (  934) X
+      f.add(new Character('\u03A7')); // (  935) X
+      f.add(new Character('\u03A8')); // (  936) X
+      f.add(new Character('\u03A9')); // (  937) X
+      f.add(new Character('\u03B1')); // (  945) X
+      f.add(new Character('\u03B2')); // (  946) X
+      f.add(new Character('\u03B3')); // (  947) X
+      f.add(new Character('\u03B4')); // (  948) X
+      f.add(new Character('\u03B5')); // (  949) X
+      f.add(new Character('\u03B6')); // (  950) X
+      f.add(new Character('\u03B7')); // (  951) X
+      f.add(new Character('\u03B8')); // (  952) X
+      f.add(new Character('\u03B9')); // (  953) X
+      f.add(new Character('\u03BA')); // (  954) X
+      f.add(new Character('\u03BB')); // (  955) X
+      f.add(new Character('\u03BC')); // (  956) X
+      f.add(new Character('\u03BD')); // (  957) X
+      f.add(new Character('\u03BE')); // (  958) X
+      f.add(new Character('\u03BF')); // (  959) X
+      f.add(new Character('\u03C0')); // (  960) X
+      f.add(new Character('\u03C1')); // (  961) X
+      f.add(new Character('\u03C3')); // (  963) X
+      f.add(new Character('\u03C4')); // (  964) X
+      f.add(new Character('\u03C5')); // (  965) X
+      f.add(new Character('\u03C6')); // (  966) X
+      f.add(new Character('\u03C7')); // (  967) X
+      f.add(new Character('\u03C8')); // (  968) X
+      f.add(new Character('\u03C9')); // (  969) X
+      f.add(new Character('\u0401')); // ( 1025) X
+      f.add(new Character('\u0410')); // ( 1040) X
+      f.add(new Character('\u0411')); // ( 1041) X
+      f.add(new Character('\u0412')); // ( 1042) X
+      f.add(new Character('\u0413')); // ( 1043) X
+      f.add(new Character('\u0414')); // ( 1044) X
+      f.add(new Character('\u0415')); // ( 1045) X
+      f.add(new Character('\u0416')); // ( 1046) X
+      f.add(new Character('\u0417')); // ( 1047) X
+      f.add(new Character('\u0418')); // ( 1048) X
+      f.add(new Character('\u0419')); // ( 1049) X
+      f.add(new Character('\u041A')); // ( 1050) X
+      f.add(new Character('\u041B')); // ( 1051) X
+      f.add(new Character('\u041C')); // ( 1052) X
+      f.add(new Character('\u041D')); // ( 1053) X
+      f.add(new Character('\u041E')); // ( 1054) X
+      f.add(new Character('\u041F')); // ( 1055) X
+      f.add(new Character('\u0420')); // ( 1056) X
+      f.add(new Character('\u0421')); // ( 1057) X
+      f.add(new Character('\u0422')); // ( 1058) X
+      f.add(new Character('\u0423')); // ( 1059) X
+      f.add(new Character('\u0424')); // ( 1060) X
+      f.add(new Character('\u0425')); // ( 1061) X
+      f.add(new Character('\u0426')); // ( 1062) X
+      f.add(new Character('\u0427')); // ( 1063) X
+      f.add(new Character('\u0428')); // ( 1064) X
+      f.add(new Character('\u0429')); // ( 1065) X
+      f.add(new Character('\u042A')); // ( 1066) X
+      f.add(new Character('\u042B')); // ( 1067) X
+      f.add(new Character('\u042C')); // ( 1068) X
+      f.add(new Character('\u042D')); // ( 1069) X
+      f.add(new Character('\u042E')); // ( 1070) X
+      f.add(new Character('\u042F')); // ( 1071) X
+      f.add(new Character('\u0430')); // ( 1072) X
+      f.add(new Character('\u0431')); // ( 1073) X
+      f.add(new Character('\u0432')); // ( 1074) X
+      f.add(new Character('\u0433')); // ( 1075) X
+      f.add(new Character('\u0434')); // ( 1076) X
+      f.add(new Character('\u0435')); // ( 1077) X
+      f.add(new Character('\u0436')); // ( 1078) X
+      f.add(new Character('\u0437')); // ( 1079) X
+      f.add(new Character('\u0438')); // ( 1080) X
+      f.add(new Character('\u0439')); // ( 1081) X
+      f.add(new Character('\u043A')); // ( 1082) X
+      f.add(new Character('\u043B')); // ( 1083) X
+      f.add(new Character('\u043C')); // ( 1084) X
+      f.add(new Character('\u043D')); // ( 1085) X
+      f.add(new Character('\u043E')); // ( 1086) X
+      f.add(new Character('\u043F')); // ( 1087) X
+      f.add(new Character('\u0440')); // ( 1088) X
+      f.add(new Character('\u0441')); // ( 1089) X
+      f.add(new Character('\u0442')); // ( 1090) X
+      f.add(new Character('\u0443')); // ( 1091) X
+      f.add(new Character('\u0444')); // ( 1092) X
+      f.add(new Character('\u0445')); // ( 1093) X
+      f.add(new Character('\u0446')); // ( 1094) X
+      f.add(new Character('\u0447')); // ( 1095) X
+      f.add(new Character('\u0448')); // ( 1096) X
+      f.add(new Character('\u0449')); // ( 1097) X
+      f.add(new Character('\u044A')); // ( 1098) X
+      f.add(new Character('\u044B')); // ( 1099) X
+      f.add(new Character('\u044C')); // ( 1100) X
+      f.add(new Character('\u044D')); // ( 1101) X
+      f.add(new Character('\u044E')); // ( 1102) X
+      f.add(new Character('\u044F')); // ( 1103) X
+      f.add(new Character('\u0451')); // ( 1105) X
+      f.add(new Character('\u2010')); // ( 8208) X
+      f.add(new Character('\u2013')); // ( 8211) X
+      f.add(new Character('\u2014')); // ( 8212) X
+      f.add(new Character('\u2015')); // ( 8213) X
+      f.add(new Character('\u2016')); // ( 8214) X
+      f.add(new Character('\u2018')); // ( 8216) X
+      f.add(new Character('\u2019')); // ( 8217) X
+      f.add(new Character('\u201C')); // ( 8220) X
+      f.add(new Character('\u201D')); // ( 8221) X
+      f.add(new Character('\u2025')); // ( 8229) X
+      f.add(new Character('\u2026')); // ( 8230) X
+      f.add(new Character('\u2030')); // ( 8240) X
+      f.add(new Character('\u2032')); // ( 8242) X
+      f.add(new Character('\u2033')); // ( 8243) X
+      f.add(new Character('\u2035')); // ( 8245) X
+      f.add(new Character('\u203B')); // ( 8251) X
+      f.add(new Character('\u20AC')); // ( 8364) X
+      f.add(new Character('\u2103')); // ( 8451) X
+      f.add(new Character('\u2105')); // ( 8453) X
+      f.add(new Character('\u2109')); // ( 8457) X
+      f.add(new Character('\u2116')); // ( 8470) X
+      f.add(new Character('\u2121')); // ( 8481) X
+      f.add(new Character('\u2160')); // ( 8544) X
+      f.add(new Character('\u2161')); // ( 8545) X
+      f.add(new Character('\u2162')); // ( 8546) X
+      f.add(new Character('\u2163')); // ( 8547) X
+      f.add(new Character('\u2164')); // ( 8548) X
+      f.add(new Character('\u2165')); // ( 8549) X
+      f.add(new Character('\u2166')); // ( 8550) X
+      f.add(new Character('\u2167')); // ( 8551) X
+      f.add(new Character('\u2168')); // ( 8552) X
+      f.add(new Character('\u2169')); // ( 8553) X
+      f.add(new Character('\u216A')); // ( 8554) X
+      f.add(new Character('\u216B')); // ( 8555) X
+      f.add(new Character('\u2170')); // ( 8560) X
+      f.add(new Character('\u2171')); // ( 8561) X
+      f.add(new Character('\u2172')); // ( 8562) X
+      f.add(new Character('\u2173')); // ( 8563) X
+      f.add(new Character('\u2174')); // ( 8564) X
+      f.add(new Character('\u2175')); // ( 8565) X
+      f.add(new Character('\u2176')); // ( 8566) X
+      f.add(new Character('\u2177')); // ( 8567) X
+      f.add(new Character('\u2178')); // ( 8568) X
+      f.add(new Character('\u2179')); // ( 8569) X
+      f.add(new Character('\u2190')); // ( 8592) X
+      f.add(new Character('\u2191')); // ( 8593) X
+      f.add(new Character('\u2192')); // ( 8594) X
+      f.add(new Character('\u2193')); // ( 8595) X
+      f.add(new Character('\u2196')); // ( 8598) X
+      f.add(new Character('\u2197')); // ( 8599) X
+      f.add(new Character('\u2198')); // ( 8600) X
+      f.add(new Character('\u2199')); // ( 8601) X
+      f.add(new Character('\u2208')); // ( 8712) X
+      f.add(new Character('\u220F')); // ( 8719) X
+      f.add(new Character('\u2211')); // ( 8721) X
+      f.add(new Character('\u2215')); // ( 8725) X
+      f.add(new Character('\u221A')); // ( 8730) X
+      f.add(new Character('\u221D')); // ( 8733) X
+      f.add(new Character('\u221E')); // ( 8734) X
+      f.add(new Character('\u221F')); // ( 8735) X
+      f.add(new Character('\u2220')); // ( 8736) X
+      f.add(new Character('\u2223')); // ( 8739) X
+      f.add(new Character('\u2225')); // ( 8741) X
+      f.add(new Character('\u2227')); // ( 8743) X
+      f.add(new Character('\u2228')); // ( 8744) X
+      f.add(new Character('\u2229')); // ( 8745) X
+      f.add(new Character('\u222A')); // ( 8746) X
+      f.add(new Character('\u222B')); // ( 8747) X
+      f.add(new Character('\u222E')); // ( 8750) X
+      f.add(new Character('\u2234')); // ( 8756) X
+      f.add(new Character('\u2235')); // ( 8757) X
+      f.add(new Character('\u2236')); // ( 8758) X
+      f.add(new Character('\u2237')); // ( 8759) X
+      f.add(new Character('\u223D')); // ( 8765) X
+      f.add(new Character('\u2248')); // ( 8776) X
+      f.add(new Character('\u224C')); // ( 8780) X
+      f.add(new Character('\u2252')); // ( 8786) X
+      f.add(new Character('\u2260')); // ( 8800) X
+      f.add(new Character('\u2261')); // ( 8801) X
+      f.add(new Character('\u2264')); // ( 8804) X
+      f.add(new Character('\u2265')); // ( 8805) X
+      f.add(new Character('\u2266')); // ( 8806) X
+      f.add(new Character('\u2267')); // ( 8807) X
+      f.add(new Character('\u226E')); // ( 8814) X
+      f.add(new Character('\u226F')); // ( 8815) X
+      f.add(new Character('\u2295')); // ( 8853) X
+      f.add(new Character('\u2299')); // ( 8857) X
+      f.add(new Character('\u22A5')); // ( 8869) X
+      f.add(new Character('\u22BF')); // ( 8895) X
+      f.add(new Character('\u2312')); // ( 8978) X
+      f.add(new Character('\u2460')); // ( 9312) X
+      f.add(new Character('\u2461')); // ( 9313) X
+      f.add(new Character('\u2462')); // ( 9314) X
+      f.add(new Character('\u2463')); // ( 9315) X
+      f.add(new Character('\u2464')); // ( 9316) X
+      f.add(new Character('\u2465')); // ( 9317) X
+      f.add(new Character('\u2466')); // ( 9318) X
+      f.add(new Character('\u2467')); // ( 9319) X
+      f.add(new Character('\u2468')); // ( 9320) X
+      f.add(new Character('\u2469')); // ( 9321) X
+      f.add(new Character('\u2474')); // ( 9332) X
+      f.add(new Character('\u2475')); // ( 9333) X
+      f.add(new Character('\u2476')); // ( 9334) X
+      f.add(new Character('\u2477')); // ( 9335) X
+      f.add(new Character('\u2478')); // ( 9336) X
+      f.add(new Character('\u2479')); // ( 9337) X
+      f.add(new Character('\u247A')); // ( 9338) X
+      f.add(new Character('\u247B')); // ( 9339) X
+      f.add(new Character('\u247C')); // ( 9340) X
+      f.add(new Character('\u247D')); // ( 9341) X
+      f.add(new Character('\u247E')); // ( 9342) X
+      f.add(new Character('\u247F')); // ( 9343) X
+      f.add(new Character('\u2480')); // ( 9344) X
+      f.add(new Character('\u2481')); // ( 9345) X
+      f.add(new Character('\u2482')); // ( 9346) X
+      f.add(new Character('\u2483')); // ( 9347) X
+      f.add(new Character('\u2484')); // ( 9348) X
+      f.add(new Character('\u2485')); // ( 9349) X
+      f.add(new Character('\u2486')); // ( 9350) X
+      f.add(new Character('\u2487')); // ( 9351) X
+      f.add(new Character('\u2488')); // ( 9352) X
+      f.add(new Character('\u2489')); // ( 9353) X
+      f.add(new Character('\u248A')); // ( 9354) X
+      f.add(new Character('\u248B')); // ( 9355) X
+      f.add(new Character('\u248C')); // ( 9356) X
+      f.add(new Character('\u248D')); // ( 9357) X
+      f.add(new Character('\u248E')); // ( 9358) X
+      f.add(new Character('\u248F')); // ( 9359) X
+      f.add(new Character('\u2490')); // ( 9360) X
+      f.add(new Character('\u2491')); // ( 9361) X
+      f.add(new Character('\u2492')); // ( 9362) X
+      f.add(new Character('\u2493')); // ( 9363) X
+      f.add(new Character('\u2494')); // ( 9364) X
+      f.add(new Character('\u2495')); // ( 9365) X
+      f.add(new Character('\u2496')); // ( 9366) X
+      f.add(new Character('\u2497')); // ( 9367) X
+      f.add(new Character('\u2498')); // ( 9368) X
+      f.add(new Character('\u2499')); // ( 9369) X
+      f.add(new Character('\u249A')); // ( 9370) X
+      f.add(new Character('\u249B')); // ( 9371) X
+      f.add(new Character('\u2500')); // ( 9472) X
+      f.add(new Character('\u2501')); // ( 9473) X
+      f.add(new Character('\u2502')); // ( 9474) X
+      f.add(new Character('\u2503')); // ( 9475) X
+      f.add(new Character('\u2504')); // ( 9476) X
+      f.add(new Character('\u2505')); // ( 9477) X
+      f.add(new Character('\u2506')); // ( 9478) X
+      f.add(new Character('\u2507')); // ( 9479) X
+      f.add(new Character('\u2508')); // ( 9480) X
+      f.add(new Character('\u2509')); // ( 9481) X
+      f.add(new Character('\u250A')); // ( 9482) X
+      f.add(new Character('\u250B')); // ( 9483) X
+      f.add(new Character('\u250C')); // ( 9484) X
+      f.add(new Character('\u250D')); // ( 9485) X
+      f.add(new Character('\u250E')); // ( 9486) X
+      f.add(new Character('\u250F')); // ( 9487) X
+      f.add(new Character('\u2510')); // ( 9488) X
+      f.add(new Character('\u2511')); // ( 9489) X
+      f.add(new Character('\u2512')); // ( 9490) X
+      f.add(new Character('\u2513')); // ( 9491) X
+      f.add(new Character('\u2514')); // ( 9492) X
+      f.add(new Character('\u2515')); // ( 9493) X
+      f.add(new Character('\u2516')); // ( 9494) X
+      f.add(new Character('\u2517')); // ( 9495) X
+      f.add(new Character('\u2518')); // ( 9496) X
+      f.add(new Character('\u2519')); // ( 9497) X
+      f.add(new Character('\u251A')); // ( 9498) X
+      f.add(new Character('\u251B')); // ( 9499) X
+      f.add(new Character('\u251C')); // ( 9500) X
+      f.add(new Character('\u251D')); // ( 9501) X
+      f.add(new Character('\u251E')); // ( 9502) X
+      f.add(new Character('\u251F')); // ( 9503) X
+      f.add(new Character('\u2520')); // ( 9504) X
+      f.add(new Character('\u2521')); // ( 9505) X
+      f.add(new Character('\u2522')); // ( 9506) X
+      f.add(new Character('\u2523')); // ( 9507) X
+      f.add(new Character('\u2524')); // ( 9508) X
+      f.add(new Character('\u2525')); // ( 9509) X
+      f.add(new Character('\u2526')); // ( 9510) X
+      f.add(new Character('\u2527')); // ( 9511) X
+      f.add(new Character('\u2528')); // ( 9512) X
+      f.add(new Character('\u2529')); // ( 9513) X
+      f.add(new Character('\u252A')); // ( 9514) X
+      f.add(new Character('\u252B')); // ( 9515) X
+      f.add(new Character('\u252C')); // ( 9516) X
+      f.add(new Character('\u252D')); // ( 9517) X
+      f.add(new Character('\u252E')); // ( 9518) X
+      f.add(new Character('\u252F')); // ( 9519) X
+      f.add(new Character('\u2530')); // ( 9520) X
+      f.add(new Character('\u2531')); // ( 9521) X
+      f.add(new Character('\u2532')); // ( 9522) X
+      f.add(new Character('\u2533')); // ( 9523) X
+      f.add(new Character('\u2534')); // ( 9524) X
+      f.add(new Character('\u2535')); // ( 9525) X
+      f.add(new Character('\u2536')); // ( 9526) X
+      f.add(new Character('\u2537')); // ( 9527) X
+      f.add(new Character('\u2538')); // ( 9528) X
+      f.add(new Character('\u2539')); // ( 9529) X
+      f.add(new Character('\u253A')); // ( 9530) X
+      f.add(new Character('\u253B')); // ( 9531) X
+      f.add(new Character('\u253C')); // ( 9532) X
+      f.add(new Character('\u253D')); // ( 9533) X
+      f.add(new Character('\u253E')); // ( 9534) X
+      f.add(new Character('\u253F')); // ( 9535) X
+      f.add(new Character('\u2540')); // ( 9536) X
+      f.add(new Character('\u2541')); // ( 9537) X
+      f.add(new Character('\u2542')); // ( 9538) X
+      f.add(new Character('\u2543')); // ( 9539) X
+      f.add(new Character('\u2544')); // ( 9540) X
+      f.add(new Character('\u2545')); // ( 9541) X
+      f.add(new Character('\u2546')); // ( 9542) X
+      f.add(new Character('\u2547')); // ( 9543) X
+      f.add(new Character('\u2548')); // ( 9544) X
+      f.add(new Character('\u2549')); // ( 9545) X
+      f.add(new Character('\u254A')); // ( 9546) X
+      f.add(new Character('\u254B')); // ( 9547) X
+      f.add(new Character('\u2550')); // ( 9552) X
+      f.add(new Character('\u2551')); // ( 9553) X
+      f.add(new Character('\u2552')); // ( 9554) X
+      f.add(new Character('\u2553')); // ( 9555) X
+      f.add(new Character('\u2554')); // ( 9556) X
+      f.add(new Character('\u2555')); // ( 9557) X
+      f.add(new Character('\u2556')); // ( 9558) X
+      f.add(new Character('\u2557')); // ( 9559) X
+      f.add(new Character('\u2558')); // ( 9560) X
+      f.add(new Character('\u2559')); // ( 9561) X
+      f.add(new Character('\u255A')); // ( 9562) X
+      f.add(new Character('\u255B')); // ( 9563) X
+      f.add(new Character('\u255C')); // ( 9564) X
+      f.add(new Character('\u255D')); // ( 9565) X
+      f.add(new Character('\u255E')); // ( 9566) X
+      f.add(new Character('\u255F')); // ( 9567) X
+      f.add(new Character('\u2560')); // ( 9568) X
+      f.add(new Character('\u2561')); // ( 9569) X
+      f.add(new Character('\u2562')); // ( 9570) X
+      f.add(new Character('\u2563')); // ( 9571) X
+      f.add(new Character('\u2564')); // ( 9572) X
+      f.add(new Character('\u2565')); // ( 9573) X
+      f.add(new Character('\u2566')); // ( 9574) X
+      f.add(new Character('\u2567')); // ( 9575) X
+      f.add(new Character('\u2568')); // ( 9576) X
+      f.add(new Character('\u2569')); // ( 9577) X
+      f.add(new Character('\u256A')); // ( 9578) X
+      f.add(new Character('\u256B')); // ( 9579) X
+      f.add(new Character('\u256C')); // ( 9580) X
+      f.add(new Character('\u256D')); // ( 9581) X
+      f.add(new Character('\u256E')); // ( 9582) X
+      f.add(new Character('\u256F')); // ( 9583) X
+      f.add(new Character('\u2570')); // ( 9584) X
+      f.add(new Character('\u2571')); // ( 9585) X
+      f.add(new Character('\u2572')); // ( 9586) X
+      f.add(new Character('\u2573')); // ( 9587) X
+      f.add(new Character('\u2581')); // ( 9601) X
+      f.add(new Character('\u2582')); // ( 9602) X
+      f.add(new Character('\u2583')); // ( 9603) X
+      f.add(new Character('\u2584')); // ( 9604) X
+      f.add(new Character('\u2585')); // ( 9605) X
+      f.add(new Character('\u2586')); // ( 9606) X
+      f.add(new Character('\u2587')); // ( 9607) X
+      f.add(new Character('\u2588')); // ( 9608) X
+      f.add(new Character('\u2589')); // ( 9609) X
+      f.add(new Character('\u258A')); // ( 9610) X
+      f.add(new Character('\u258B')); // ( 9611) X
+      f.add(new Character('\u258C')); // ( 9612) X
+      f.add(new Character('\u258D')); // ( 9613) X
+      f.add(new Character('\u258E')); // ( 9614) X
+      f.add(new Character('\u258F')); // ( 9615) X
+      f.add(new Character('\u2593')); // ( 9619) X
+      f.add(new Character('\u2594')); // ( 9620) X
+      f.add(new Character('\u2595')); // ( 9621) X
+      f.add(new Character('\u25A0')); // ( 9632) X
+      f.add(new Character('\u25A1')); // ( 9633) X
+      f.add(new Character('\u25B2')); // ( 9650) X
+      f.add(new Character('\u25B3')); // ( 9651) X
+      f.add(new Character('\u25BC')); // ( 9660) X
+      f.add(new Character('\u25BD')); // ( 9661) X
+      f.add(new Character('\u25C6')); // ( 9670) X
+      f.add(new Character('\u25C7')); // ( 9671) X
+      f.add(new Character('\u25CB')); // ( 9675) X
+      f.add(new Character('\u25CE')); // ( 9678) X
+      f.add(new Character('\u25CF')); // ( 9679) X
+      f.add(new Character('\u25E2')); // ( 9698) X
+      f.add(new Character('\u25E3')); // ( 9699) X
+      f.add(new Character('\u25E4')); // ( 9700) X
+      f.add(new Character('\u25E5')); // ( 9701) X
+      f.add(new Character('\u2605')); // ( 9733) X
+      f.add(new Character('\u2606')); // ( 9734) X
+      f.add(new Character('\u2609')); // ( 9737) X
+      f.add(new Character('\u2640')); // ( 9792) X
+      f.add(new Character('\u2642')); // ( 9794) X
+      f.add(new Character('\u2E81')); // (11905) X
+      f.add(new Character('\u2E84')); // (11908) X
+      f.add(new Character('\u2E88')); // (11912) X
+      f.add(new Character('\u2E8B')); // (11915) X
+      f.add(new Character('\u2E8C')); // (11916) X
+      f.add(new Character('\u2E97')); // (11927) X
+      f.add(new Character('\u2EA7')); // (11943) X
+      f.add(new Character('\u2EAA')); // (11946) X
+      f.add(new Character('\u2EAE')); // (11950) X
+      f.add(new Character('\u2EB3')); // (11955) X
+      f.add(new Character('\u2EB6')); // (11958) X
+      f.add(new Character('\u2EB7')); // (11959) X
+      f.add(new Character('\u2EBB')); // (11963) X
+      f.add(new Character('\u2ECA')); // (11978) X
+      f.add(new Character('\u2FF0')); // (12272) X
+      f.add(new Character('\u2FF1')); // (12273) X
+      f.add(new Character('\u2FF2')); // (12274) X
+      f.add(new Character('\u2FF3')); // (12275) X
+      f.add(new Character('\u2FF4')); // (12276) X
+      f.add(new Character('\u2FF5')); // (12277) X
+      f.add(new Character('\u2FF6')); // (12278) X
+      f.add(new Character('\u2FF7')); // (12279) X
+      f.add(new Character('\u2FF8')); // (12280) X
+      f.add(new Character('\u2FF9')); // (12281) X
+      f.add(new Character('\u2FFA')); // (12282) X
+      f.add(new Character('\u2FFB')); // (12283) X
+      f.add(new Character('\u3001')); // (12289) X
+      f.add(new Character('\u3002')); // (12290) X
+      f.add(new Character('\u3003')); // (12291) X
+      f.add(new Character('\u3005')); // (12293) X
+      f.add(new Character('\u3006')); // (12294) X
+      f.add(new Character('\u3007')); // (12295) X
+      f.add(new Character('\u3008')); // (12296) X
+      f.add(new Character('\u3009')); // (12297) X
+      f.add(new Character('\u300A')); // (12298) X
+      f.add(new Character('\u300B')); // (12299) X
+      f.add(new Character('\u300C')); // (12300) X
+      f.add(new Character('\u300D')); // (12301) X
+      f.add(new Character('\u300E')); // (12302) X
+      f.add(new Character('\u300F')); // (12303) X
+      f.add(new Character('\u3010')); // (12304) X
+      f.add(new Character('\u3011')); // (12305) X
+      f.add(new Character('\u3012')); // (12306) X
+      f.add(new Character('\u3013')); // (12307) X
+      f.add(new Character('\u3014')); // (12308) X
+      f.add(new Character('\u3015')); // (12309) X
+      f.add(new Character('\u3016')); // (12310) X
+      f.add(new Character('\u3017')); // (12311) X
+      f.add(new Character('\u301D')); // (12317) X
+      f.add(new Character('\u301E')); // (12318) X
+      f.add(new Character('\u3021')); // (12321) X
+      f.add(new Character('\u3022')); // (12322) X
+      f.add(new Character('\u3023')); // (12323) X
+      f.add(new Character('\u3024')); // (12324) X
+      f.add(new Character('\u3025')); // (12325) X
+      f.add(new Character('\u3026')); // (12326) X
+      f.add(new Character('\u3027')); // (12327) X
+      f.add(new Character('\u3028')); // (12328) X
+      f.add(new Character('\u3029')); // (12329) X
+      f.add(new Character('\u303E')); // (12350) X
+      f.add(new Character('\u3041')); // (12353) X
+      f.add(new Character('\u3042')); // (12354) X
+      f.add(new Character('\u3043')); // (12355) X
+      f.add(new Character('\u3044')); // (12356) X
+      f.add(new Character('\u3045')); // (12357) X
+      f.add(new Character('\u3046')); // (12358) X
+      f.add(new Character('\u3047')); // (12359) X
+      f.add(new Character('\u3048')); // (12360) X
+      f.add(new Character('\u3049')); // (12361) X
+      f.add(new Character('\u304A')); // (12362) X
+      f.add(new Character('\u304B')); // (12363) X
+      f.add(new Character('\u304C')); // (12364) X
+      f.add(new Character('\u304D')); // (12365) X
+      f.add(new Character('\u304E')); // (12366) X
+      f.add(new Character('\u304F')); // (12367) X
+      f.add(new Character('\u3050')); // (12368) X
+      f.add(new Character('\u3051')); // (12369) X
+      f.add(new Character('\u3052')); // (12370) X
+      f.add(new Character('\u3053')); // (12371) X
+      f.add(new Character('\u3054')); // (12372) X
+      f.add(new Character('\u3055')); // (12373) X
+      f.add(new Character('\u3056')); // (12374) X
+      f.add(new Character('\u3057')); // (12375) X
+      f.add(new Character('\u3058')); // (12376) X
+      f.add(new Character('\u3059')); // (12377) X
+      f.add(new Character('\u305A')); // (12378) X
+      f.add(new Character('\u305B')); // (12379) X
+      f.add(new Character('\u305C')); // (12380) X
+      f.add(new Character('\u305D')); // (12381) X
+      f.add(new Character('\u305E')); // (12382) X
+      f.add(new Character('\u305F')); // (12383) X
+      f.add(new Character('\u3060')); // (12384) X
+      f.add(new Character('\u3061')); // (12385) X
+      f.add(new Character('\u3062')); // (12386) X
+      f.add(new Character('\u3063')); // (12387) X
+      f.add(new Character('\u3064')); // (12388) X
+      f.add(new Character('\u3065')); // (12389) X
+      f.add(new Character('\u3066')); // (12390) X
+      f.add(new Character('\u3067')); // (12391) X
+      f.add(new Character('\u3068')); // (12392) X
+      f.add(new Character('\u3069')); // (12393) X
+      f.add(new Character('\u306A')); // (12394) X
+      f.add(new Character('\u306B')); // (12395) X
+      f.add(new Character('\u306C')); // (12396) X
+      f.add(new Character('\u306D')); // (12397) X
+      f.add(new Character('\u306E')); // (12398) X
+      f.add(new Character('\u306F')); // (12399) X
+      f.add(new Character('\u3070')); // (12400) X
+      f.add(new Character('\u3071')); // (12401) X
+      f.add(new Character('\u3072')); // (12402) X
+      f.add(new Character('\u3073')); // (12403) X
+      f.add(new Character('\u3074')); // (12404) X
+      f.add(new Character('\u3075')); // (12405) X
+      f.add(new Character('\u3076')); // (12406) X
+      f.add(new Character('\u3077')); // (12407) X
+      f.add(new Character('\u3078')); // (12408) X
+      f.add(new Character('\u3079')); // (12409) X
+      f.add(new Character('\u307A')); // (12410) X
+      f.add(new Character('\u307B')); // (12411) X
+      f.add(new Character('\u307C')); // (12412) X
+      f.add(new Character('\u307D')); // (12413) X
+      f.add(new Character('\u307E')); // (12414) X
+      f.add(new Character('\u307F')); // (12415) X
+      f.add(new Character('\u3080')); // (12416) X
+      f.add(new Character('\u3081')); // (12417) X
+      f.add(new Character('\u3082')); // (12418) X
+      f.add(new Character('\u3083')); // (12419) X
+      f.add(new Character('\u3084')); // (12420) X
+      f.add(new Character('\u3085')); // (12421) X
+      f.add(new Character('\u3086')); // (12422) X
+      f.add(new Character('\u3087')); // (12423) X
+      f.add(new Character('\u3088')); // (12424) X
+      f.add(new Character('\u3089')); // (12425) X
+      f.add(new Character('\u308A')); // (12426) X
+      f.add(new Character('\u308B')); // (12427) X
+      f.add(new Character('\u308C')); // (12428) X
+      f.add(new Character('\u308D')); // (12429) X
+      f.add(new Character('\u308E')); // (12430) X
+      f.add(new Character('\u308F')); // (12431) X
+      f.add(new Character('\u3090')); // (12432) X
+      f.add(new Character('\u3091')); // (12433) X
+      f.add(new Character('\u3092')); // (12434) X
+      f.add(new Character('\u3093')); // (12435) X
+      f.add(new Character('\u309B')); // (12443) X
+      f.add(new Character('\u309C')); // (12444) X
+      f.add(new Character('\u309D')); // (12445) X
+      f.add(new Character('\u309E')); // (12446) X
+      f.add(new Character('\u30A1')); // (12449) X
+      f.add(new Character('\u30A2')); // (12450) X
+      f.add(new Character('\u30A3')); // (12451) X
+      f.add(new Character('\u30A4')); // (12452) X
+      f.add(new Character('\u30A5')); // (12453) X
+      f.add(new Character('\u30A6')); // (12454) X
+      f.add(new Character('\u30A7')); // (12455) X
+      f.add(new Character('\u30A8')); // (12456) X
+      f.add(new Character('\u30A9')); // (12457) X
+      f.add(new Character('\u30AA')); // (12458) X
+      f.add(new Character('\u30AB')); // (12459) X
+      f.add(new Character('\u30AC')); // (12460) X
+      f.add(new Character('\u30AD')); // (12461) X
+      f.add(new Character('\u30AE')); // (12462) X
+      f.add(new Character('\u30AF')); // (12463) X
+      f.add(new Character('\u30B0')); // (12464) X
+      f.add(new Character('\u30B1')); // (12465) X
+      f.add(new Character('\u30B2')); // (12466) X
+      f.add(new Character('\u30B3')); // (12467) X
+      f.add(new Character('\u30B4')); // (12468) X
+      f.add(new Character('\u30B5')); // (12469) X
+      f.add(new Character('\u30B6')); // (12470) X
+      f.add(new Character('\u30B7')); // (12471) X
+      f.add(new Character('\u30B8')); // (12472) X
+      f.add(new Character('\u30B9')); // (12473) X
+      f.add(new Character('\u30BA')); // (12474) X
+      f.add(new Character('\u30BB')); // (12475) X
+      f.add(new Character('\u30BC')); // (12476) X
+      f.add(new Character('\u30BD')); // (12477) X
+      f.add(new Character('\u30BE')); // (12478) X
+      f.add(new Character('\u30BF')); // (12479) X
+      f.add(new Character('\u30C0')); // (12480) X
+      f.add(new Character('\u30C1')); // (12481) X
+      f.add(new Character('\u30C2')); // (12482) X
+      f.add(new Character('\u30C3')); // (12483) X
+      f.add(new Character('\u30C4')); // (12484) X
+      f.add(new Character('\u30C5')); // (12485) X
+      f.add(new Character('\u30C6')); // (12486) X
+      f.add(new Character('\u30C7')); // (12487) X
+      f.add(new Character('\u30C8')); // (12488) X
+      f.add(new Character('\u30C9')); // (12489) X
+      f.add(new Character('\u30CA')); // (12490) X
+      f.add(new Character('\u30CB')); // (12491) X
+      f.add(new Character('\u30CC')); // (12492) X
+      f.add(new Character('\u30CD')); // (12493) X
+      f.add(new Character('\u30CE')); // (12494) X
+      f.add(new Character('\u30CF')); // (12495) X
+      f.add(new Character('\u30D0')); // (12496) X
+      f.add(new Character('\u30D1')); // (12497) X
+      f.add(new Character('\u30D2')); // (12498) X
+      f.add(new Character('\u30D3')); // (12499) X
+      f.add(new Character('\u30D4')); // (12500) X
+      f.add(new Character('\u30D5')); // (12501) X
+      f.add(new Character('\u30D6')); // (12502) X
+      f.add(new Character('\u30D7')); // (12503) X
+      f.add(new Character('\u30D8')); // (12504) X
+      f.add(new Character('\u30D9')); // (12505) X
+      f.add(new Character('\u30DA')); // (12506) X
+      f.add(new Character('\u30DB')); // (12507) X
+      f.add(new Character('\u30DC')); // (12508) X
+      f.add(new Character('\u30DD')); // (12509) X
+      f.add(new Character('\u30DE')); // (12510) X
+      f.add(new Character('\u30DF')); // (12511) X
+      f.add(new Character('\u30E0')); // (12512) X
+      f.add(new Character('\u30E1')); // (12513) X
+      f.add(new Character('\u30E2')); // (12514) X
+      f.add(new Character('\u30E3')); // (12515) X
+      f.add(new Character('\u30E4')); // (12516) X
+      f.add(new Character('\u30E5')); // (12517) X
+      f.add(new Character('\u30E6')); // (12518) X
+      f.add(new Character('\u30E7')); // (12519) X
+      f.add(new Character('\u30E8')); // (12520) X
+      f.add(new Character('\u30E9')); // (12521) X
+      f.add(new Character('\u30EA')); // (12522) X
+      f.add(new Character('\u30EB')); // (12523) X
+      f.add(new Character('\u30EC')); // (12524) X
+      f.add(new Character('\u30ED')); // (12525) X
+      f.add(new Character('\u30EE')); // (12526) X
+      f.add(new Character('\u30EF')); // (12527) X
+      f.add(new Character('\u30F0')); // (12528) X
+      f.add(new Character('\u30F1')); // (12529) X
+      f.add(new Character('\u30F2')); // (12530) X
+      f.add(new Character('\u30F3')); // (12531) X
+      f.add(new Character('\u30F4')); // (12532) X
+      f.add(new Character('\u30F5')); // (12533) X
+      f.add(new Character('\u30F6')); // (12534) X
+      f.add(new Character('\u30FC')); // (12540) X
+      f.add(new Character('\u30FD')); // (12541) X
+      f.add(new Character('\u30FE')); // (12542) X
+      f.add(new Character('\u3105')); // (12549) X
+      f.add(new Character('\u3106')); // (12550) X
+      f.add(new Character('\u3107')); // (12551) X
+      f.add(new Character('\u3108')); // (12552) X
+      f.add(new Character('\u3109')); // (12553) X
+      f.add(new Character('\u310A')); // (12554) X
+      f.add(new Character('\u310B')); // (12555) X
+      f.add(new Character('\u310C')); // (12556) X
+      f.add(new Character('\u310D')); // (12557) X
+      f.add(new Character('\u310E')); // (12558) X
+      f.add(new Character('\u310F')); // (12559) X
+      f.add(new Character('\u3110')); // (12560) X
+      f.add(new Character('\u3111')); // (12561) X
+      f.add(new Character('\u3112')); // (12562) X
+      f.add(new Character('\u3113')); // (12563) X
+      f.add(new Character('\u3114')); // (12564) X
+      f.add(new Character('\u3115')); // (12565) X
+      f.add(new Character('\u3116')); // (12566) X
+      f.add(new Character('\u3117')); // (12567) X
+      f.add(new Character('\u3118')); // (12568) X
+      f.add(new Character('\u3119')); // (12569) X
+      f.add(new Character('\u311A')); // (12570) X
+      f.add(new Character('\u311B')); // (12571) X
+      f.add(new Character('\u311C')); // (12572) X
+      f.add(new Character('\u311D')); // (12573) X
+      f.add(new Character('\u311E')); // (12574) X
+      f.add(new Character('\u311F')); // (12575) X
+      f.add(new Character('\u3120')); // (12576) X
+      f.add(new Character('\u3121')); // (12577) X
+      f.add(new Character('\u3122')); // (12578) X
+      f.add(new Character('\u3123')); // (12579) X
+      f.add(new Character('\u3124')); // (12580) X
+      f.add(new Character('\u3125')); // (12581) X
+      f.add(new Character('\u3126')); // (12582) X
+      f.add(new Character('\u3127')); // (12583) X
+      f.add(new Character('\u3128')); // (12584) X
+      f.add(new Character('\u3129')); // (12585) X
+      f.add(new Character('\u3220')); // (12832) X
+      f.add(new Character('\u3221')); // (12833) X
+      f.add(new Character('\u3222')); // (12834) X
+      f.add(new Character('\u3223')); // (12835) X
+      f.add(new Character('\u3224')); // (12836) X
+      f.add(new Character('\u3225')); // (12837) X
+      f.add(new Character('\u3226')); // (12838) X
+      f.add(new Character('\u3227')); // (12839) X
+      f.add(new Character('\u3228')); // (12840) X
+      f.add(new Character('\u3229')); // (12841) X
+      f.add(new Character('\u3231')); // (12849) X
+      f.add(new Character('\u32A3')); // (12963) X
+      f.add(new Character('\u338E')); // (13198) X
+      f.add(new Character('\u338F')); // (13199) X
+      f.add(new Character('\u339C')); // (13212) X
+      f.add(new Character('\u339D')); // (13213) X
+      f.add(new Character('\u339E')); // (13214) X
+      f.add(new Character('\u33A1')); // (13217) X
+      f.add(new Character('\u33C4')); // (13252) X
+      f.add(new Character('\u33CE')); // (13262) X
+      f.add(new Character('\u33D1')); // (13265) X
+      f.add(new Character('\u33D2')); // (13266) X
+      f.add(new Character('\u33D5')); // (13269) X
+      f.add(new Character('\u3447')); // (13383) X
+      f.add(new Character('\u3473')); // (13427) X
+      f.add(new Character('\u359E')); // (13726) X
+      f.add(new Character('\u360E')); // (13838) X
+      f.add(new Character('\u361A')); // (13850) X
+      f.add(new Character('\u3918')); // (14616) X
+      f.add(new Character('\u396E')); // (14702) X
+      f.add(new Character('\u39CF')); // (14799) X
+      f.add(new Character('\u39D0')); // (14800) X
+      f.add(new Character('\u39DF')); // (14815) X
+      f.add(new Character('\u3A73')); // (14963) X
+      f.add(new Character('\u3B4E')); // (15182) X
+      f.add(new Character('\u3C6E')); // (15470) X
+      f.add(new Character('\u3CE0')); // (15584) X
+      f.add(new Character('\u4056')); // (16470) X
+      f.add(new Character('\u415F')); // (16735) X
+      f.add(new Character('\u4337')); // (17207) X
+      f.add(new Character('\u43AC')); // (17324) X
+      f.add(new Character('\u43B1')); // (17329) X
+      f.add(new Character('\u43DD')); // (17373) X
+      f.add(new Character('\u44D6')); // (17622) X
+      f.add(new Character('\u464C')); // (17996) X
+      f.add(new Character('\u4661')); // (18017) X
+      f.add(new Character('\u4723')); // (18211) X
+      f.add(new Character('\u4729')); // (18217) X
+      f.add(new Character('\u477C')); // (18300) X
+      f.add(new Character('\u478D')); // (18317) X
+      f.add(new Character('\u4947')); // (18759) X
+      f.add(new Character('\u497A')); // (18810) X
+      f.add(new Character('\u497D')); // (18813) X
+      f.add(new Character('\u4982')); // (18818) X
+      f.add(new Character('\u4983')); // (18819) X
+      f.add(new Character('\u4985')); // (18821) X
+      f.add(new Character('\u4986')); // (18822) X
+      f.add(new Character('\u499B')); // (18843) X
+      f.add(new Character('\u499F')); // (18847) X
+      f.add(new Character('\u49B6')); // (18870) X
+      f.add(new Character('\u49B7')); // (18871) X
+      f.add(new Character('\u4C77')); // (19575) X
+      f.add(new Character('\u4C9F')); // (19615) X
+      f.add(new Character('\u4CA0')); // (19616) X
+      f.add(new Character('\u4CA1')); // (19617) X
+      f.add(new Character('\u4CA2')); // (19618) X
+      f.add(new Character('\u4CA3')); // (19619) X
+      f.add(new Character('\u4D13')); // (19731) X
+      f.add(new Character('\u4D14')); // (19732) X
+      f.add(new Character('\u4D15')); // (19733) X
+      f.add(new Character('\u4D16')); // (19734) X
+      f.add(new Character('\u4D17')); // (19735) X
+      f.add(new Character('\u4D18')); // (19736) X
+      f.add(new Character('\u4D19')); // (19737) X
+      f.add(new Character('\u4DAE')); // (19886) X
+      f.add(new Character('\u4E00')); // (19968) X
+      f.add(new Character('\u4E01')); // (19969) X
+      f.add(new Character('\u4E02')); // (19970) X
+      f.add(new Character('\u4E03')); // (19971) X
+      f.add(new Character('\u4E04')); // (19972) X
+      f.add(new Character('\u4E05')); // (19973) X
+      f.add(new Character('\u4E06')); // (19974) X
+      f.add(new Character('\u4E07')); // (19975) X
+      f.add(new Character('\u4E08')); // (19976) X
+      f.add(new Character('\u4E09')); // (19977) X
+   }
+
+   /**
+    * Initializes ordinary characters for LUWO for the zh_TW language.
+    * @param f The HashSet
+    */
+   protected static void initTWFlags(HashSet<Character> f)
+   {
+      f.add(new Character('\u00A7')); // ( 167) SECTION
+      f.add(new Character('\u00A8')); // ( 168) diaeresis
+      f.add(new Character('\u00AF')); // ( 175) macron
+      f.add(new Character('\u00B0')); // ( 176) degree
+      f.add(new Character('\u00B1')); // ( 177) plus_minus
+      f.add(new Character('\u00B4')); // ( 180) acute
+      f.add(new Character('\u00B6')); // ( 182) Pilcrow
+      f.add(new Character('\u00B7')); // ( 183) middot
+      f.add(new Character('\u00D7')); // ( 215) times
+      f.add(new Character('\u0100')); // ( 256) A_bar
+      f.add(new Character('\u0101')); // ( 257) a_bar
+      f.add(new Character('\u0102')); // ( 258) A_breve
+      f.add(new Character('\u0103')); // ( 259) a_breve
+      f.add(new Character('\u0104')); // ( 260) A_ogokek
+      f.add(new Character('\u0105')); // ( 261) a_ogokek
+      f.add(new Character('\u0106')); // ( 262) C_acute
+      f.add(new Character('\u0107')); // ( 263) c_acute
+      f.add(new Character('\u0108')); // ( 264) C_circumflex
+      f.add(new Character('\u0109')); // ( 265) c_circumflex
+      f.add(new Character('\u010A')); // ( 266) C_superdot
+      f.add(new Character('\u010B')); // ( 267) c_superdot
+      f.add(new Character('\u010C')); // ( 268) C_caron
+      f.add(new Character('\u010D')); // ( 269) c_caron
+      f.add(new Character('\u010E')); // ( 270) D_caron
+      f.add(new Character('\u010F')); // ( 271) d_caron
+      f.add(new Character('\u0110')); // ( 272) D_stroke
+      f.add(new Character('\u0111')); // ( 273) d_stroke
+      f.add(new Character('\u0112')); // ( 274) E_macron
+      f.add(new Character('\u0113')); // ( 275) e_macron
+      f.add(new Character('\u0114')); // ( 276) E_breve
+      f.add(new Character('\u0115')); // ( 277) e_breve
+      f.add(new Character('\u0116')); // ( 278) E_superdot
+      f.add(new Character('\u0117')); // ( 279) e_superdot
+      f.add(new Character('\u0118')); // ( 280) E_ogonek
+      f.add(new Character('\u0119')); // ( 281) e_ogonek
+      f.add(new Character('\u011A')); // ( 282) E_caron
+      f.add(new Character('\u011B')); // ( 283) e_caron
+      f.add(new Character('\u011C')); // ( 284) G_circumflex
+      f.add(new Character('\u011D')); // ( 285) g_circumflex
+      f.add(new Character('\u011E')); // ( 286) G_breve
+      f.add(new Character('\u011F')); // ( 287) g_breve
+      f.add(new Character('\u0120')); // ( 288) G_superdot
+      f.add(new Character('\u0121')); // ( 289) g_superdot
+      f.add(new Character('\u0122')); // ( 290) G_cedilla
+      f.add(new Character('\u0123')); // ( 291) g_cedilla
+      f.add(new Character('\u0124')); // ( 292) H_circumflex
+      f.add(new Character('\u0125')); // ( 293) h_circumflex
+      f.add(new Character('\u0126')); // ( 294) H_stroke
+      f.add(new Character('\u0127')); // ( 295) h_stroke
+      f.add(new Character('\u0128')); // ( 296) I_tilde
+      f.add(new Character('\u0129')); // ( 297) i_tilde
+      f.add(new Character('\u012A')); // ( 298) I_macron
+      f.add(new Character('\u012B')); // ( 299) i_macron
+      f.add(new Character('\u012C')); // ( 300) I_breve
+      f.add(new Character('\u012D')); // ( 301) i_breve
+      f.add(new Character('\u012E')); // ( 302) I_ogonek
+      f.add(new Character('\u012F')); // ( 303) i_ogonek
+      f.add(new Character('\u0130')); // ( 304) I_superdot
+      f.add(new Character('\u0131')); // ( 305) i_nodot
+      f.add(new Character('\u0132')); // ( 306) IJ_ligature
+      f.add(new Character('\u0133')); // ( 307) ij_ligature
+      f.add(new Character('\u0134')); // ( 308) J_circumflex
+      f.add(new Character('\u0135')); // ( 309) j_circumflex
+      f.add(new Character('\u0136')); // ( 310) K_cedilla
+      f.add(new Character('\u0137')); // ( 311) k_cedilla
+      f.add(new Character('\u0138')); // ( 312) kra
+      f.add(new Character('\u0139')); // ( 313) L_acute
+      f.add(new Character('\u013A')); // ( 314) l_acute
+      f.add(new Character('\u013B')); // ( 315) L_cedilla
+      f.add(new Character('\u013C')); // ( 316) l_cedilla
+      f.add(new Character('\u013D')); // ( 317) L_caron
+      f.add(new Character('\u013E')); // ( 318) l_caron
+      f.add(new Character('\u013F')); // ( 319) L_middot
+      f.add(new Character('\u0140')); // ( 320) l_middot
+      f.add(new Character('\u0141')); // ( 321) L_stoke
+      f.add(new Character('\u0142')); // ( 322) l_stoke
+      f.add(new Character('\u0143')); // ( 323) N_acute
+      f.add(new Character('\u0144')); // ( 324) n_acute
+      f.add(new Character('\u0145')); // ( 325) N_cedilla
+      f.add(new Character('\u0146')); // ( 326) n_cedilla
+      f.add(new Character('\u0147')); // ( 327) N_caron
+      f.add(new Character('\u0148')); // ( 328) n_caron
+      f.add(new Character('\u0149')); // ( 329) n_apostrophe
+      f.add(new Character('\u014A')); // ( 330) ENG
+      f.add(new Character('\u014B')); // ( 331) eng
+      f.add(new Character('\u014C')); // ( 332) O_macron
+      f.add(new Character('\u014D')); // ( 333) o_macron
+      f.add(new Character('\u014E')); // ( 334) O_breve
+      f.add(new Character('\u014F')); // ( 335) o_breve
+      f.add(new Character('\u0150')); // ( 336) O_double_acute
+      f.add(new Character('\u0151')); // ( 337) o_double_acute
+      f.add(new Character('\u0152')); // ( 338) OE_ligature
+      f.add(new Character('\u0153')); // ( 339) oe_ligature
+      f.add(new Character('\u0154')); // ( 340) R_acute
+      f.add(new Character('\u0155')); // ( 341) r_acute
+      f.add(new Character('\u0156')); // ( 342) R_cedilla
+      f.add(new Character('\u0157')); // ( 343) r_cedilla
+      f.add(new Character('\u0158')); // ( 344) R_caron
+      f.add(new Character('\u0159')); // ( 345) r_caron
+      f.add(new Character('\u015A')); // ( 346) S_acute
+      f.add(new Character('\u015B')); // ( 347) s_acute
+      f.add(new Character('\u015C')); // ( 348) S_circumflex
+      f.add(new Character('\u015D')); // ( 349) s_circumflex
+      f.add(new Character('\u015E')); // ( 350) S_cedilla
+      f.add(new Character('\u015F')); // ( 351) s_cedilla
+      f.add(new Character('\u0160')); // ( 352) S_caron
+      f.add(new Character('\u0161')); // ( 353) s_caron
+      f.add(new Character('\u0162')); // ( 354) T_cedilla
+      f.add(new Character('\u0163')); // ( 355) t_cedilla
+      f.add(new Character('\u0164')); // ( 356) T_caron
+      f.add(new Character('\u0165')); // ( 357) t_caron
+      f.add(new Character('\u0166')); // ( 358) T_stroke
+      f.add(new Character('\u0167')); // ( 359) t_stroke
+      f.add(new Character('\u0168')); // ( 360) U_tilde
+      f.add(new Character('\u0169')); // ( 361) u_tilde
+      f.add(new Character('\u016A')); // ( 362) U_macron
+      f.add(new Character('\u016B')); // ( 363) u_macron
+      f.add(new Character('\u016C')); // ( 364) U_breve
+      f.add(new Character('\u016D')); // ( 365) u_breve
+      f.add(new Character('\u016E')); // ( 366) U_ring
+      f.add(new Character('\u016F')); // ( 367) u_ring
+      f.add(new Character('\u0170')); // ( 368) U_double_acute
+      f.add(new Character('\u0171')); // ( 369) u_double_acute
+      f.add(new Character('\u0172')); // ( 370) U_ogonek
+      f.add(new Character('\u0173')); // ( 371) u_ogonek
+      f.add(new Character('\u0174')); // ( 372) W_circumflex
+      f.add(new Character('\u0175')); // ( 373) w_circumflex
+      f.add(new Character('\u0176')); // ( 374) Y_circumflex
+      f.add(new Character('\u0177')); // ( 375) y_circumflex
+      f.add(new Character('\u0178')); // ( 376) Y_diaeresis
+      f.add(new Character('\u0179')); // ( 377) Z_acute
+      f.add(new Character('\u017A')); // ( 378) z_acute
+      f.add(new Character('\u017B')); // ( 379) Z_superdot
+      f.add(new Character('\u017C')); // ( 380) z_superdot
+      f.add(new Character('\u017D')); // ( 381) Z_caron
+      f.add(new Character('\u017E')); // ( 382) z_caron
+      f.add(new Character('\u017F')); // ( 383) long_s
+      f.add(new Character('\u0180')); // ( 384) X
+      f.add(new Character('\u0181')); // ( 385) X
+      f.add(new Character('\u0182')); // ( 386) X
+      f.add(new Character('\u0183')); // ( 387) X
+      f.add(new Character('\u0184')); // ( 388) X
+      f.add(new Character('\u0185')); // ( 389) X
+      f.add(new Character('\u0186')); // ( 390) X
+      f.add(new Character('\u0187')); // ( 391) X
+      f.add(new Character('\u0188')); // ( 392) X
+      f.add(new Character('\u0189')); // ( 393) X
+      f.add(new Character('\u018A')); // ( 394) X
+      f.add(new Character('\u018B')); // ( 395) X
+      f.add(new Character('\u018C')); // ( 396) X
+      f.add(new Character('\u018D')); // ( 397) X
+      f.add(new Character('\u018E')); // ( 398) X
+      f.add(new Character('\u018F')); // ( 399) X
+      f.add(new Character('\u0190')); // ( 400) X
+      f.add(new Character('\u0191')); // ( 401) X
+      f.add(new Character('\u0192')); // ( 402) X
+      f.add(new Character('\u0193')); // ( 403) X
+      f.add(new Character('\u0194')); // ( 404) X
+      f.add(new Character('\u0195')); // ( 405) X
+      f.add(new Character('\u0196')); // ( 406) X
+      f.add(new Character('\u0197')); // ( 407) X
+      f.add(new Character('\u0198')); // ( 408) X
+      f.add(new Character('\u0199')); // ( 409) X
+      f.add(new Character('\u019A')); // ( 410) X
+      f.add(new Character('\u019B')); // ( 411) X
+      f.add(new Character('\u019C')); // ( 412) X
+      f.add(new Character('\u019D')); // ( 413) X
+      f.add(new Character('\u019E')); // ( 414) X
+      f.add(new Character('\u019F')); // ( 415) X
+      f.add(new Character('\u01A0')); // ( 416) X
+      f.add(new Character('\u01A1')); // ( 417) X
+      f.add(new Character('\u01A2')); // ( 418) X
+      f.add(new Character('\u01A3')); // ( 419) X
+      f.add(new Character('\u01A4')); // ( 420) X
+      f.add(new Character('\u01A5')); // ( 421) X
+      f.add(new Character('\u01A6')); // ( 422) X
+      f.add(new Character('\u01A7')); // ( 423) X
+      f.add(new Character('\u01A8')); // ( 424) X
+      f.add(new Character('\u01A9')); // ( 425) X
+      f.add(new Character('\u01AA')); // ( 426) X
+      f.add(new Character('\u01AB')); // ( 427) X
+      f.add(new Character('\u01AC')); // ( 428) X
+      f.add(new Character('\u01AD')); // ( 429) X
+      f.add(new Character('\u01AE')); // ( 430) X
+      f.add(new Character('\u01AF')); // ( 431) X
+      f.add(new Character('\u01B0')); // ( 432) X
+      f.add(new Character('\u01B1')); // ( 433) X
+      f.add(new Character('\u01B2')); // ( 434) X
+      f.add(new Character('\u01B3')); // ( 435) X
+      f.add(new Character('\u01B4')); // ( 436) X
+      f.add(new Character('\u01B5')); // ( 437) X
+      f.add(new Character('\u01B6')); // ( 438) X
+      f.add(new Character('\u01B7')); // ( 439) X
+      f.add(new Character('\u01B8')); // ( 440) X
+      f.add(new Character('\u01B9')); // ( 441) X
+      f.add(new Character('\u01BA')); // ( 442) X
+      f.add(new Character('\u01BB')); // ( 443) X
+      f.add(new Character('\u01BC')); // ( 444) X
+      f.add(new Character('\u01BD')); // ( 445) X
+      f.add(new Character('\u01BE')); // ( 446) X
+      f.add(new Character('\u01BF')); // ( 447) X
+      f.add(new Character('\u01C0')); // ( 448) X
+      f.add(new Character('\u01C1')); // ( 449) X
+      f.add(new Character('\u01C2')); // ( 450) X
+      f.add(new Character('\u01C3')); // ( 451) X
+      f.add(new Character('\u01C4')); // ( 452) X
+      f.add(new Character('\u01C5')); // ( 453) X
+      f.add(new Character('\u01C6')); // ( 454) X
+      f.add(new Character('\u01C7')); // ( 455) X
+      f.add(new Character('\u01C8')); // ( 456) X
+      f.add(new Character('\u01C9')); // ( 457) X
+      f.add(new Character('\u01CA')); // ( 458) X
+      f.add(new Character('\u01CB')); // ( 459) X
+      f.add(new Character('\u01CC')); // ( 460) X
+      f.add(new Character('\u01CD')); // ( 461) X
+      f.add(new Character('\u01CE')); // ( 462) X
+      f.add(new Character('\u01CF')); // ( 463) X
+      f.add(new Character('\u01D0')); // ( 464) X
+      f.add(new Character('\u01D1')); // ( 465) X
+      f.add(new Character('\u01D2')); // ( 466) X
+      f.add(new Character('\u01D3')); // ( 467) X
+      f.add(new Character('\u01D4')); // ( 468) X
+      f.add(new Character('\u01D5')); // ( 469) X
+      f.add(new Character('\u01D6')); // ( 470) X
+      f.add(new Character('\u01D7')); // ( 471) X
+      f.add(new Character('\u01D8')); // ( 472) X
+      f.add(new Character('\u01D9')); // ( 473) X
+      f.add(new Character('\u01DA')); // ( 474) X
+      f.add(new Character('\u01DB')); // ( 475) X
+      f.add(new Character('\u01DC')); // ( 476) X
+      f.add(new Character('\u01DD')); // ( 477) X
+      f.add(new Character('\u01DE')); // ( 478) X
+      f.add(new Character('\u01DF')); // ( 479) X
+      f.add(new Character('\u01E0')); // ( 480) X
+      f.add(new Character('\u01E1')); // ( 481) X
+      f.add(new Character('\u01E2')); // ( 482) X
+      f.add(new Character('\u01E3')); // ( 483) X
+      f.add(new Character('\u01E4')); // ( 484) X
+      f.add(new Character('\u01E5')); // ( 485) X
+      f.add(new Character('\u01E6')); // ( 486) X
+      f.add(new Character('\u01E7')); // ( 487) X
+      f.add(new Character('\u01E8')); // ( 488) X
+      f.add(new Character('\u01E9')); // ( 489) X
+      f.add(new Character('\u01EA')); // ( 490) X
+      f.add(new Character('\u01EB')); // ( 491) X
+      f.add(new Character('\u01EC')); // ( 492) X
+      f.add(new Character('\u01ED')); // ( 493) X
+      f.add(new Character('\u01EE')); // ( 494) X
+      f.add(new Character('\u01EF')); // ( 495) X
+      f.add(new Character('\u01F0')); // ( 496) X
+      f.add(new Character('\u01F1')); // ( 497) X
+      f.add(new Character('\u01F2')); // ( 498) X
+      f.add(new Character('\u01F3')); // ( 499) X
+      f.add(new Character('\u01F4')); // ( 500) X
+      f.add(new Character('\u01F5')); // ( 501) X
+      f.add(new Character('\u01F6')); // ( 502) X
+      f.add(new Character('\u01F7')); // ( 503) X
+      f.add(new Character('\u01F8')); // ( 504) X
+      f.add(new Character('\u01F9')); // ( 505) X
+      f.add(new Character('\u01FA')); // ( 506) X
+      f.add(new Character('\u01FB')); // ( 507) X
+      f.add(new Character('\u01FC')); // ( 508) X
+      f.add(new Character('\u01FD')); // ( 509) X
+      f.add(new Character('\u01FE')); // ( 510) X
+      f.add(new Character('\u01FF')); // ( 511) X
+      f.add(new Character('\u0200')); // ( 512) X
+      f.add(new Character('\u0201')); // ( 513) X
+      f.add(new Character('\u0202')); // ( 514) X
+      f.add(new Character('\u0203')); // ( 515) X
+      f.add(new Character('\u0204')); // ( 516) X
+      f.add(new Character('\u0205')); // ( 517) X
+      f.add(new Character('\u0206')); // ( 518) X
+      f.add(new Character('\u0207')); // ( 519) X
+      f.add(new Character('\u0208')); // ( 520) X
+      f.add(new Character('\u0209')); // ( 521) X
+      f.add(new Character('\u020A')); // ( 522) X
+      f.add(new Character('\u020B')); // ( 523) X
+      f.add(new Character('\u020C')); // ( 524) X
+      f.add(new Character('\u020D')); // ( 525) X
+      f.add(new Character('\u020E')); // ( 526) X
+      f.add(new Character('\u020F')); // ( 527) X
+      f.add(new Character('\u0210')); // ( 528) X
+      f.add(new Character('\u0211')); // ( 529) X
+      f.add(new Character('\u0212')); // ( 530) X
+      f.add(new Character('\u0213')); // ( 531) X
+      f.add(new Character('\u0214')); // ( 532) X
+      f.add(new Character('\u0215')); // ( 533) X
+      f.add(new Character('\u0216')); // ( 534) X
+      f.add(new Character('\u0217')); // ( 535) X
+      f.add(new Character('\u0218')); // ( 536) X
+      f.add(new Character('\u0219')); // ( 537) X
+      f.add(new Character('\u021A')); // ( 538) X
+      f.add(new Character('\u021B')); // ( 539) X
+      f.add(new Character('\u021C')); // ( 540) X
+      f.add(new Character('\u021D')); // ( 541) X
+      f.add(new Character('\u021E')); // ( 542) X
+      f.add(new Character('\u021F')); // ( 543) X
+      f.add(new Character('\u0220')); // ( 544) X
+      f.add(new Character('\u0221')); // ( 545) X
+      f.add(new Character('\u0222')); // ( 546) X
+      f.add(new Character('\u0223')); // ( 547) X
+      f.add(new Character('\u0224')); // ( 548) X
+      f.add(new Character('\u0225')); // ( 549) X
+      f.add(new Character('\u0226')); // ( 550) X
+      f.add(new Character('\u0227')); // ( 551) X
+      f.add(new Character('\u0228')); // ( 552) X
+      f.add(new Character('\u0229')); // ( 553) X
+      f.add(new Character('\u022A')); // ( 554) X
+      f.add(new Character('\u022B')); // ( 555) X
+      f.add(new Character('\u022C')); // ( 556) X
+      f.add(new Character('\u022D')); // ( 557) X
+      f.add(new Character('\u022E')); // ( 558) X
+      f.add(new Character('\u022F')); // ( 559) X
+      f.add(new Character('\u0230')); // ( 560) X
+      f.add(new Character('\u0231')); // ( 561) X
+      f.add(new Character('\u0232')); // ( 562) X
+      f.add(new Character('\u0233')); // ( 563) X
+      f.add(new Character('\u0234')); // ( 564) X
+      f.add(new Character('\u0235')); // ( 565) X
+      f.add(new Character('\u0236')); // ( 566) X
+      f.add(new Character('\u0237')); // ( 567) X
+      f.add(new Character('\u0238')); // ( 568) X
+      f.add(new Character('\u0239')); // ( 569) X
+      f.add(new Character('\u023A')); // ( 570) X
+      f.add(new Character('\u023B')); // ( 571) X
+      f.add(new Character('\u023C')); // ( 572) X
+      f.add(new Character('\u023D')); // ( 573) X
+      f.add(new Character('\u023E')); // ( 574) X
+      f.add(new Character('\u023F')); // ( 575) X
+      f.add(new Character('\u0240')); // ( 576) X
+      f.add(new Character('\u0241')); // ( 577) X
+      f.add(new Character('\u0242')); // ( 578) X
+      f.add(new Character('\u0243')); // ( 579) X
+      f.add(new Character('\u0244')); // ( 580) X
+      f.add(new Character('\u0245')); // ( 581) X
+      f.add(new Character('\u0246')); // ( 582) X
+      f.add(new Character('\u0247')); // ( 583) X
+      f.add(new Character('\u0248')); // ( 584) X
+      f.add(new Character('\u0249')); // ( 585) X
+      f.add(new Character('\u024A')); // ( 586) X
+      f.add(new Character('\u024B')); // ( 587) X
+      f.add(new Character('\u024C')); // ( 588) X
+      f.add(new Character('\u024D')); // ( 589) X
+      f.add(new Character('\u024E')); // ( 590) X
+      f.add(new Character('\u024F')); // ( 591) X
+      f.add(new Character('\u0250')); // ( 592) X
+      f.add(new Character('\u0251')); // ( 593) X
+      f.add(new Character('\u0252')); // ( 594) X
+      f.add(new Character('\u0253')); // ( 595) X
+      f.add(new Character('\u0254')); // ( 596) X
+      f.add(new Character('\u0255')); // ( 597) X
+      f.add(new Character('\u0256')); // ( 598) X
+      f.add(new Character('\u0257')); // ( 599) X
+      f.add(new Character('\u0258')); // ( 600) X
+      f.add(new Character('\u0259')); // ( 601) X
+      f.add(new Character('\u025A')); // ( 602) X
+      f.add(new Character('\u025B')); // ( 603) X
+      f.add(new Character('\u025C')); // ( 604) X
+      f.add(new Character('\u025D')); // ( 605) X
+      f.add(new Character('\u025E')); // ( 606) X
+      f.add(new Character('\u025F')); // ( 607) X
+      f.add(new Character('\u0260')); // ( 608) X
+      f.add(new Character('\u0261')); // ( 609) X
+      f.add(new Character('\u0262')); // ( 610) X
+      f.add(new Character('\u0263')); // ( 611) X
+      f.add(new Character('\u0264')); // ( 612) X
+      f.add(new Character('\u0265')); // ( 613) X
+      f.add(new Character('\u0266')); // ( 614) X
+      f.add(new Character('\u0267')); // ( 615) X
+      f.add(new Character('\u0268')); // ( 616) X
+      f.add(new Character('\u0269')); // ( 617) X
+      f.add(new Character('\u026A')); // ( 618) X
+      f.add(new Character('\u026B')); // ( 619) X
+      f.add(new Character('\u026C')); // ( 620) X
+      f.add(new Character('\u026D')); // ( 621) X
+      f.add(new Character('\u026E')); // ( 622) X
+      f.add(new Character('\u026F')); // ( 623) X
+      f.add(new Character('\u0270')); // ( 624) X
+      f.add(new Character('\u0271')); // ( 625) X
+      f.add(new Character('\u0272')); // ( 626) X
+      f.add(new Character('\u0273')); // ( 627) X
+      f.add(new Character('\u0274')); // ( 628) X
+      f.add(new Character('\u0275')); // ( 629) X
+      f.add(new Character('\u0276')); // ( 630) X
+      f.add(new Character('\u0277')); // ( 631) X
+      f.add(new Character('\u0278')); // ( 632) X
+      f.add(new Character('\u0279')); // ( 633) X
+      f.add(new Character('\u027A')); // ( 634) X
+      f.add(new Character('\u027B')); // ( 635) X
+      f.add(new Character('\u027C')); // ( 636) X
+      f.add(new Character('\u027D')); // ( 637) X
+      f.add(new Character('\u027E')); // ( 638) X
+      f.add(new Character('\u027F')); // ( 639) X
+      f.add(new Character('\u0280')); // ( 640) X
+      f.add(new Character('\u0281')); // ( 641) X
+      f.add(new Character('\u0282')); // ( 642) X
+      f.add(new Character('\u0283')); // ( 643) X
+      f.add(new Character('\u0284')); // ( 644) X
+      f.add(new Character('\u0285')); // ( 645) X
+      f.add(new Character('\u0286')); // ( 646) X
+      f.add(new Character('\u0287')); // ( 647) X
+      f.add(new Character('\u0288')); // ( 648) X
+      f.add(new Character('\u0289')); // ( 649) X
+      f.add(new Character('\u028A')); // ( 650) X
+      f.add(new Character('\u028B')); // ( 651) X
+      f.add(new Character('\u028C')); // ( 652) X
+      f.add(new Character('\u028D')); // ( 653) X
+      f.add(new Character('\u028E')); // ( 654) X
+      f.add(new Character('\u028F')); // ( 655) X
+      f.add(new Character('\u0290')); // ( 656) X
+      f.add(new Character('\u0291')); // ( 657) X
+      f.add(new Character('\u0292')); // ( 658) X
+      f.add(new Character('\u0293')); // ( 659) X
+      f.add(new Character('\u0294')); // ( 660) X
+      f.add(new Character('\u0295')); // ( 661) X
+      f.add(new Character('\u0296')); // ( 662) X
+      f.add(new Character('\u0297')); // ( 663) X
+      f.add(new Character('\u0298')); // ( 664) X
+      f.add(new Character('\u0299')); // ( 665) X
+      f.add(new Character('\u029A')); // ( 666) X
+      f.add(new Character('\u029B')); // ( 667) X
+      f.add(new Character('\u029C')); // ( 668) X
+      f.add(new Character('\u029D')); // ( 669) X
+      f.add(new Character('\u029E')); // ( 670) X
+      f.add(new Character('\u029F')); // ( 671) X
+      f.add(new Character('\u02A0')); // ( 672) X
+      f.add(new Character('\u02A1')); // ( 673) X
+      f.add(new Character('\u02A2')); // ( 674) X
+      f.add(new Character('\u02A3')); // ( 675) X
+      f.add(new Character('\u02A4')); // ( 676) X
+      f.add(new Character('\u02A5')); // ( 677) X
+      f.add(new Character('\u02A6')); // ( 678) X
+      f.add(new Character('\u02A7')); // ( 679) X
+      f.add(new Character('\u02A8')); // ( 680) X
+      f.add(new Character('\u02A9')); // ( 681) X
+      f.add(new Character('\u02AA')); // ( 682) X
+      f.add(new Character('\u02AB')); // ( 683) X
+      f.add(new Character('\u02AC')); // ( 684) X
+      f.add(new Character('\u02AD')); // ( 685) X
+      f.add(new Character('\u02AE')); // ( 686) X
+      f.add(new Character('\u02AF')); // ( 687) X
+      f.add(new Character('\u02B0')); // ( 688) X
+      f.add(new Character('\u02B1')); // ( 689) X
+      f.add(new Character('\u02B2')); // ( 690) X
+      f.add(new Character('\u02B3')); // ( 691) X
+      f.add(new Character('\u02B4')); // ( 692) X
+      f.add(new Character('\u02B5')); // ( 693) X
+      f.add(new Character('\u02B6')); // ( 694) X
+      f.add(new Character('\u02B7')); // ( 695) X
+      f.add(new Character('\u02B8')); // ( 696) X
+      f.add(new Character('\u02B9')); // ( 697) X
+      f.add(new Character('\u02BA')); // ( 698) X
+      f.add(new Character('\u02BB')); // ( 699) X
+      f.add(new Character('\u02BC')); // ( 700) X
+      f.add(new Character('\u02BD')); // ( 701) X
+      f.add(new Character('\u02BE')); // ( 702) X
+      f.add(new Character('\u02BF')); // ( 703) X
+      f.add(new Character('\u02C0')); // ( 704) X
+      f.add(new Character('\u02C1')); // ( 705) X
+      f.add(new Character('\u02C2')); // ( 706) X
+      f.add(new Character('\u02C3')); // ( 707) X
+      f.add(new Character('\u02C4')); // ( 708) X
+      f.add(new Character('\u02C5')); // ( 709) X
+      f.add(new Character('\u02C6')); // ( 710) X
+      f.add(new Character('\u02C7')); // ( 711) X
+      f.add(new Character('\u02C8')); // ( 712) X
+      f.add(new Character('\u02C9')); // ( 713) X
+      f.add(new Character('\u02CA')); // ( 714) X
+      f.add(new Character('\u02CB')); // ( 715) X
+      f.add(new Character('\u02CC')); // ( 716) X
+      f.add(new Character('\u02CD')); // ( 717) X
+      f.add(new Character('\u02CE')); // ( 718) X
+      f.add(new Character('\u02CF')); // ( 719) X
+      f.add(new Character('\u02D0')); // ( 720) X
+      f.add(new Character('\u02D1')); // ( 721) X
+      f.add(new Character('\u02D2')); // ( 722) X
+      f.add(new Character('\u02D3')); // ( 723) X
+      f.add(new Character('\u02D4')); // ( 724) X
+      f.add(new Character('\u02D5')); // ( 725) X
+      f.add(new Character('\u02D6')); // ( 726) X
+      f.add(new Character('\u02D7')); // ( 727) X
+      f.add(new Character('\u02D8')); // ( 728) X
+      f.add(new Character('\u02D9')); // ( 729) X
+      f.add(new Character('\u02DA')); // ( 730) X
+      f.add(new Character('\u02DB')); // ( 731) X
+      f.add(new Character('\u02DC')); // ( 732) X
+      f.add(new Character('\u02DD')); // ( 733) X
+      f.add(new Character('\u02DE')); // ( 734) X
+      f.add(new Character('\u02DF')); // ( 735) X
+      f.add(new Character('\u02E0')); // ( 736) X
+      f.add(new Character('\u02E1')); // ( 737) X
+      f.add(new Character('\u02E2')); // ( 738) X
+      f.add(new Character('\u02E3')); // ( 739) X
+      f.add(new Character('\u02E4')); // ( 740) X
+      f.add(new Character('\u02E5')); // ( 741) X
+      f.add(new Character('\u02E6')); // ( 742) X
+      f.add(new Character('\u02E7')); // ( 743) X
+      f.add(new Character('\u02E8')); // ( 744) X
+      f.add(new Character('\u02E9')); // ( 745) X
+      f.add(new Character('\u02EA')); // ( 746) X
+      f.add(new Character('\u02EB')); // ( 747) X
+      f.add(new Character('\u02EC')); // ( 748) X
+      f.add(new Character('\u02ED')); // ( 749) X
+      f.add(new Character('\u02EE')); // ( 750) X
+      f.add(new Character('\u02EF')); // ( 751) X
+      f.add(new Character('\u02F0')); // ( 752) X
+      f.add(new Character('\u02F1')); // ( 753) X
+      f.add(new Character('\u02F2')); // ( 754) X
+      f.add(new Character('\u02F3')); // ( 755) X
+      f.add(new Character('\u02F4')); // ( 756) X
+      f.add(new Character('\u02F5')); // ( 757) X
+      f.add(new Character('\u02F6')); // ( 758) X
+      f.add(new Character('\u02F7')); // ( 759) X
+      f.add(new Character('\u02F8')); // ( 760) X
+      f.add(new Character('\u02F9')); // ( 761) X
+      f.add(new Character('\u02FA')); // ( 762) X
+      f.add(new Character('\u02FB')); // ( 763) X
+      f.add(new Character('\u02FC')); // ( 764) X
+      f.add(new Character('\u02FD')); // ( 765) X
+      f.add(new Character('\u02FE')); // ( 766) X
+      f.add(new Character('\u02FF')); // ( 767) X
+      f.add(new Character('\u0300')); // ( 768) X
+      f.add(new Character('\u0301')); // ( 769) X
+      f.add(new Character('\u0302')); // ( 770) X
+      f.add(new Character('\u0303')); // ( 771) X
+      f.add(new Character('\u0304')); // ( 772) X
+      f.add(new Character('\u0305')); // ( 773) X
+      f.add(new Character('\u0306')); // ( 774) X
+      f.add(new Character('\u0307')); // ( 775) X
+      f.add(new Character('\u0308')); // ( 776) X
+      f.add(new Character('\u0309')); // ( 777) X
+      f.add(new Character('\u030A')); // ( 778) X
+      f.add(new Character('\u030B')); // ( 779) X
+      f.add(new Character('\u030C')); // ( 780) X
+      f.add(new Character('\u030D')); // ( 781) X
+      f.add(new Character('\u030E')); // ( 782) X
+      f.add(new Character('\u030F')); // ( 783) X
+      f.add(new Character('\u0310')); // ( 784) X
+      f.add(new Character('\u0311')); // ( 785) X
+      f.add(new Character('\u0312')); // ( 786) X
+      f.add(new Character('\u0313')); // ( 787) X
+      f.add(new Character('\u0314')); // ( 788) X
+      f.add(new Character('\u0315')); // ( 789) X
+      f.add(new Character('\u0316')); // ( 790) X
+      f.add(new Character('\u0317')); // ( 791) X
+      f.add(new Character('\u0318')); // ( 792) X
+      f.add(new Character('\u0319')); // ( 793) X
+      f.add(new Character('\u031A')); // ( 794) X
+      f.add(new Character('\u031B')); // ( 795) X
+      f.add(new Character('\u031C')); // ( 796) X
+      f.add(new Character('\u031D')); // ( 797) X
+      f.add(new Character('\u031E')); // ( 798) X
+      f.add(new Character('\u031F')); // ( 799) X
+      f.add(new Character('\u0320')); // ( 800) X
+      f.add(new Character('\u0321')); // ( 801) X
+      f.add(new Character('\u0322')); // ( 802) X
+      f.add(new Character('\u0323')); // ( 803) X
+      f.add(new Character('\u0324')); // ( 804) X
+      f.add(new Character('\u0325')); // ( 805) X
+      f.add(new Character('\u0326')); // ( 806) X
+      f.add(new Character('\u0327')); // ( 807) X
+      f.add(new Character('\u0328')); // ( 808) X
+      f.add(new Character('\u0329')); // ( 809) X
+      f.add(new Character('\u032A')); // ( 810) X
+      f.add(new Character('\u032B')); // ( 811) X
+      f.add(new Character('\u032C')); // ( 812) X
+      f.add(new Character('\u032D')); // ( 813) X
+      f.add(new Character('\u032E')); // ( 814) X
+      f.add(new Character('\u032F')); // ( 815) X
+      f.add(new Character('\u0330')); // ( 816) X
+      f.add(new Character('\u0331')); // ( 817) X
+      f.add(new Character('\u0332')); // ( 818) X
+      f.add(new Character('\u0333')); // ( 819) X
+      f.add(new Character('\u0334')); // ( 820) X
+      f.add(new Character('\u0335')); // ( 821) X
+      f.add(new Character('\u0336')); // ( 822) X
+      f.add(new Character('\u0337')); // ( 823) X
+      f.add(new Character('\u0338')); // ( 824) X
+      f.add(new Character('\u0339')); // ( 825) X
+      f.add(new Character('\u033A')); // ( 826) X
+      f.add(new Character('\u033B')); // ( 827) X
+      f.add(new Character('\u033C')); // ( 828) X
+      f.add(new Character('\u033D')); // ( 829) X
+      f.add(new Character('\u033E')); // ( 830) X
+      f.add(new Character('\u033F')); // ( 831) X
+      f.add(new Character('\u0340')); // ( 832) X
+      f.add(new Character('\u0341')); // ( 833) X
+      f.add(new Character('\u0342')); // ( 834) X
+      f.add(new Character('\u0343')); // ( 835) X
+      f.add(new Character('\u0344')); // ( 836) X
+      f.add(new Character('\u0345')); // ( 837) X
+      f.add(new Character('\u0346')); // ( 838) X
+      f.add(new Character('\u0347')); // ( 839) X
+      f.add(new Character('\u0348')); // ( 840) X
+      f.add(new Character('\u0349')); // ( 841) X
+      f.add(new Character('\u034A')); // ( 842) X
+      f.add(new Character('\u034B')); // ( 843) X
+      f.add(new Character('\u034C')); // ( 844) X
+      f.add(new Character('\u034D')); // ( 845) X
+      f.add(new Character('\u034E')); // ( 846) X
+      f.add(new Character('\u034F')); // ( 847) X
+      f.add(new Character('\u0350')); // ( 848) X
+      f.add(new Character('\u0351')); // ( 849) X
+      f.add(new Character('\u0352')); // ( 850) X
+      f.add(new Character('\u0353')); // ( 851) X
+      f.add(new Character('\u0354')); // ( 852) X
+      f.add(new Character('\u0355')); // ( 853) X
+      f.add(new Character('\u0356')); // ( 854) X
+      f.add(new Character('\u0357')); // ( 855) X
+      f.add(new Character('\u0358')); // ( 856) X
+      f.add(new Character('\u0359')); // ( 857) X
+      f.add(new Character('\u035A')); // ( 858) X
+      f.add(new Character('\u035B')); // ( 859) X
+      f.add(new Character('\u035C')); // ( 860) X
+      f.add(new Character('\u035D')); // ( 861) X
+      f.add(new Character('\u035E')); // ( 862) X
+      f.add(new Character('\u035F')); // ( 863) X
+      f.add(new Character('\u0360')); // ( 864) X
+      f.add(new Character('\u0361')); // ( 865) X
+      f.add(new Character('\u0362')); // ( 866) X
+      f.add(new Character('\u0363')); // ( 867) X
+      f.add(new Character('\u0364')); // ( 868) X
+      f.add(new Character('\u0365')); // ( 869) X
+      f.add(new Character('\u0366')); // ( 870) X
+      f.add(new Character('\u0367')); // ( 871) X
+      f.add(new Character('\u0368')); // ( 872) X
+      f.add(new Character('\u0369')); // ( 873) X
+      f.add(new Character('\u036A')); // ( 874) X
+      f.add(new Character('\u036B')); // ( 875) X
+      f.add(new Character('\u036C')); // ( 876) X
+      f.add(new Character('\u036D')); // ( 877) X
+      f.add(new Character('\u036E')); // ( 878) X
+      f.add(new Character('\u036F')); // ( 879) X
+      f.add(new Character('\u0370')); // ( 880) X
+      f.add(new Character('\u0371')); // ( 881) X
+      f.add(new Character('\u0372')); // ( 882) X
+      f.add(new Character('\u0373')); // ( 883) X
+      f.add(new Character('\u0374')); // ( 884) X
+      f.add(new Character('\u0375')); // ( 885) X
+      f.add(new Character('\u0376')); // ( 886) X
+      f.add(new Character('\u0377')); // ( 887) X
+      f.add(new Character('\u0378')); // ( 888) X
+      f.add(new Character('\u0379')); // ( 889) X
+      f.add(new Character('\u037A')); // ( 890) X
+      f.add(new Character('\u037B')); // ( 891) X
+      f.add(new Character('\u037C')); // ( 892) X
+      f.add(new Character('\u037D')); // ( 893) X
+      f.add(new Character('\u037E')); // ( 894) X
+      f.add(new Character('\u037F')); // ( 895) X
+      f.add(new Character('\u0380')); // ( 896) X
+      f.add(new Character('\u0381')); // ( 897) X
+      f.add(new Character('\u0382')); // ( 898) X
+      f.add(new Character('\u0383')); // ( 899) X
+      f.add(new Character('\u0384')); // ( 900) X
+      f.add(new Character('\u0385')); // ( 901) X
+      f.add(new Character('\u0386')); // ( 902) X
+      f.add(new Character('\u0387')); // ( 903) X
+      f.add(new Character('\u0388')); // ( 904) X
+      f.add(new Character('\u0389')); // ( 905) X
+      f.add(new Character('\u038A')); // ( 906) X
+      f.add(new Character('\u038B')); // ( 907) X
+      f.add(new Character('\u038C')); // ( 908) X
+      f.add(new Character('\u038D')); // ( 909) X
+      f.add(new Character('\u038E')); // ( 910) X
+      f.add(new Character('\u038F')); // ( 911) X
+      f.add(new Character('\u0390')); // ( 912) X
+      f.add(new Character('\u0391')); // ( 913) X
+      f.add(new Character('\u0392')); // ( 914) X
+      f.add(new Character('\u0393')); // ( 915) X
+      f.add(new Character('\u0394')); // ( 916) X
+      f.add(new Character('\u0395')); // ( 917) X
+      f.add(new Character('\u0396')); // ( 918) X
+      f.add(new Character('\u0397')); // ( 919) X
+      f.add(new Character('\u0398')); // ( 920) X
+      f.add(new Character('\u0399')); // ( 921) X
+      f.add(new Character('\u039A')); // ( 922) X
+      f.add(new Character('\u039B')); // ( 923) X
+      f.add(new Character('\u039C')); // ( 924) X
+      f.add(new Character('\u039D')); // ( 925) X
+      f.add(new Character('\u039E')); // ( 926) X
+      f.add(new Character('\u039F')); // ( 927) X
+      f.add(new Character('\u03A0')); // ( 928) X
+      f.add(new Character('\u03A1')); // ( 929) X
+      f.add(new Character('\u03A2')); // ( 930) X
+      f.add(new Character('\u03A3')); // ( 931) X
+      f.add(new Character('\u03A4')); // ( 932) X
+      f.add(new Character('\u03A5')); // ( 933) X
+      f.add(new Character('\u03A6')); // ( 934) X
+      f.add(new Character('\u03A7')); // ( 935) X
+      f.add(new Character('\u03A8')); // ( 936) X
+      f.add(new Character('\u03A9')); // ( 937) X
+      f.add(new Character('\u03AA')); // ( 938) X
+      f.add(new Character('\u03AB')); // ( 939) X
+      f.add(new Character('\u03AC')); // ( 940) X
+      f.add(new Character('\u03AD')); // ( 941) X
+      f.add(new Character('\u03AE')); // ( 942) X
+      f.add(new Character('\u03AF')); // ( 943) X
+      f.add(new Character('\u03B0')); // ( 944) X
+      f.add(new Character('\u03B1')); // ( 945) X
+      f.add(new Character('\u03B2')); // ( 946) X
+      f.add(new Character('\u03B3')); // ( 947) X
+      f.add(new Character('\u03B4')); // ( 948) X
+      f.add(new Character('\u03B5')); // ( 949) X
+      f.add(new Character('\u03B6')); // ( 950) X
+      f.add(new Character('\u03B7')); // ( 951) X
+      f.add(new Character('\u03B8')); // ( 952) X
+      f.add(new Character('\u03B9')); // ( 953) X
+      f.add(new Character('\u03BA')); // ( 954) X
+      f.add(new Character('\u03BB')); // ( 955) X
+      f.add(new Character('\u03BC')); // ( 956) X
+      f.add(new Character('\u03BD')); // ( 957) X
+      f.add(new Character('\u03BE')); // ( 958) X
+      f.add(new Character('\u03BF')); // ( 959) X
+      f.add(new Character('\u03C0')); // ( 960) X
+      f.add(new Character('\u03C1')); // ( 961) X
+      f.add(new Character('\u03C2')); // ( 962) X
+      f.add(new Character('\u03C3')); // ( 963) X
+      f.add(new Character('\u03C4')); // ( 964) X
+      f.add(new Character('\u03C5')); // ( 965) X
+      f.add(new Character('\u03C6')); // ( 966) X
+      f.add(new Character('\u03C7')); // ( 967) X
+      f.add(new Character('\u03C8')); // ( 968) X
+      f.add(new Character('\u03C9')); // ( 969) X
+      f.add(new Character('\u03CA')); // ( 970) X
+      f.add(new Character('\u03CB')); // ( 971) X
+      f.add(new Character('\u03CC')); // ( 972) X
+      f.add(new Character('\u03CD')); // ( 973) X
+      f.add(new Character('\u03CE')); // ( 974) X
+      f.add(new Character('\u03CF')); // ( 975) X
+      f.add(new Character('\u03D0')); // ( 976) X
+      f.add(new Character('\u03D1')); // ( 977) X
+      f.add(new Character('\u03D2')); // ( 978) X
+      f.add(new Character('\u03D3')); // ( 979) X
+      f.add(new Character('\u03D4')); // ( 980) X
+      f.add(new Character('\u03D5')); // ( 981) X
+      f.add(new Character('\u03D6')); // ( 982) X
+      f.add(new Character('\u03D7')); // ( 983) X
+      f.add(new Character('\u03D8')); // ( 984) X
+      f.add(new Character('\u03D9')); // ( 985) X
+      f.add(new Character('\u03DA')); // ( 986) X
+      f.add(new Character('\u03DB')); // ( 987) X
+      f.add(new Character('\u03DC')); // ( 988) X
+      f.add(new Character('\u03DD')); // ( 989) X
+      f.add(new Character('\u03DE')); // ( 990) X
+      f.add(new Character('\u03DF')); // ( 991) X
+      f.add(new Character('\u03E0')); // ( 992) X
+      f.add(new Character('\u03E1')); // ( 993) X
+      f.add(new Character('\u03E2')); // ( 994) X
+      f.add(new Character('\u03E3')); // ( 995) X
+      f.add(new Character('\u03E4')); // ( 996) X
+      f.add(new Character('\u03E5')); // ( 997) X
+      f.add(new Character('\u03E6')); // ( 998) X
+      f.add(new Character('\u03E7')); // ( 999) X
+      f.add(new Character('\u03E8')); // (1000) X
+      f.add(new Character('\u03E9')); // (1001) X
+      f.add(new Character('\u03EA')); // (1002) X
+      f.add(new Character('\u03EB')); // (1003) X
+      f.add(new Character('\u03EC')); // (1004) X
+      f.add(new Character('\u03ED')); // (1005) X
+      f.add(new Character('\u03EE')); // (1006) X
+      f.add(new Character('\u03EF')); // (1007) X
+      f.add(new Character('\u03F0')); // (1008) X
+      f.add(new Character('\u03F1')); // (1009) X
+      f.add(new Character('\u03F2')); // (1010) X
+      f.add(new Character('\u03F3')); // (1011) X
+      f.add(new Character('\u03F4')); // (1012) X
+      f.add(new Character('\u03F5')); // (1013) X
+      f.add(new Character('\u03F6')); // (1014) X
+      f.add(new Character('\u03F7')); // (1015) X
+      f.add(new Character('\u03F8')); // (1016) X
+      f.add(new Character('\u03F9')); // (1017) X
+      f.add(new Character('\u03FA')); // (1018) X
+      f.add(new Character('\u03FB')); // (1019) X
+      f.add(new Character('\u03FC')); // (1020) X
+      f.add(new Character('\u03FD')); // (1021) X
+      f.add(new Character('\u03FE')); // (1022) X
+      f.add(new Character('\u03FF')); // (1023) X
+      f.add(new Character('\u0400')); // (1024) X
+      f.add(new Character('\u0401')); // (1025) X
+      f.add(new Character('\u0402')); // (1026) X
+      f.add(new Character('\u0403')); // (1027) X
+      f.add(new Character('\u0404')); // (1028) X
+      f.add(new Character('\u0405')); // (1029) X
+      f.add(new Character('\u0406')); // (1030) X
+      f.add(new Character('\u0407')); // (1031) X
+      f.add(new Character('\u0408')); // (1032) X
+      f.add(new Character('\u0409')); // (1033) X
+      f.add(new Character('\u040A')); // (1034) X
+      f.add(new Character('\u040B')); // (1035) X
+      f.add(new Character('\u040C')); // (1036) X
+      f.add(new Character('\u040D')); // (1037) X
+      f.add(new Character('\u040E')); // (1038) X
+      f.add(new Character('\u040F')); // (1039) X
+      f.add(new Character('\u0410')); // (1040) X
+      f.add(new Character('\u0411')); // (1041) X
+      f.add(new Character('\u0412')); // (1042) X
+      f.add(new Character('\u0413')); // (1043) X
+      f.add(new Character('\u0414')); // (1044) X
+      f.add(new Character('\u0415')); // (1045) X
+      f.add(new Character('\u0416')); // (1046) X
+      f.add(new Character('\u0417')); // (1047) X
+      f.add(new Character('\u0418')); // (1048) X
+      f.add(new Character('\u0419')); // (1049) X
+      f.add(new Character('\u041A')); // (1050) X
+      f.add(new Character('\u041B')); // (1051) X
+      f.add(new Character('\u041C')); // (1052) X
+      f.add(new Character('\u041D')); // (1053) X
+      f.add(new Character('\u041E')); // (1054) X
+      f.add(new Character('\u041F')); // (1055) X
+      f.add(new Character('\u0420')); // (1056) X
+      f.add(new Character('\u0421')); // (1057) X
+      f.add(new Character('\u0422')); // (1058) X
+      f.add(new Character('\u0423')); // (1059) X
+      f.add(new Character('\u0424')); // (1060) X
+      f.add(new Character('\u0425')); // (1061) X
+      f.add(new Character('\u0426')); // (1062) X
+      f.add(new Character('\u0427')); // (1063) X
+      f.add(new Character('\u0428')); // (1064) X
+      f.add(new Character('\u0429')); // (1065) X
+      f.add(new Character('\u042A')); // (1066) X
+      f.add(new Character('\u042B')); // (1067) X
+      f.add(new Character('\u042C')); // (1068) X
+      f.add(new Character('\u042D')); // (1069) X
+      f.add(new Character('\u042E')); // (1070) X
+      f.add(new Character('\u042F')); // (1071) X
+      f.add(new Character('\u0430')); // (1072) X
+      f.add(new Character('\u0431')); // (1073) X
+      f.add(new Character('\u0432')); // (1074) X
+      f.add(new Character('\u0433')); // (1075) X
+      f.add(new Character('\u0434')); // (1076) X
+      f.add(new Character('\u0435')); // (1077) X
+      f.add(new Character('\u0436')); // (1078) X
+      f.add(new Character('\u0437')); // (1079) X
+      f.add(new Character('\u0438')); // (1080) X
+      f.add(new Character('\u0439')); // (1081) X
+      f.add(new Character('\u043A')); // (1082) X
+      f.add(new Character('\u043B')); // (1083) X
+      f.add(new Character('\u043C')); // (1084) X
+      f.add(new Character('\u043D')); // (1085) X
+      f.add(new Character('\u043E')); // (1086) X
+      f.add(new Character('\u043F')); // (1087) X
+      f.add(new Character('\u0440')); // (1088) X
+      f.add(new Character('\u0441')); // (1089) X
+      f.add(new Character('\u0442')); // (1090) X
+      f.add(new Character('\u0443')); // (1091) X
+      f.add(new Character('\u0444')); // (1092) X
+      f.add(new Character('\u0445')); // (1093) X
+      f.add(new Character('\u0446')); // (1094) X
+      f.add(new Character('\u0447')); // (1095) X
+      f.add(new Character('\u0448')); // (1096) X
+      f.add(new Character('\u0449')); // (1097) X
+      f.add(new Character('\u044A')); // (1098) X
+      f.add(new Character('\u044B')); // (1099) X
+      f.add(new Character('\u044C')); // (1100) X
+      f.add(new Character('\u044D')); // (1101) X
+      f.add(new Character('\u044E')); // (1102) X
+      f.add(new Character('\u044F')); // (1103) X
+      f.add(new Character('\u0450')); // (1104) X
+      f.add(new Character('\u0451')); // (1105) X
+      f.add(new Character('\u0452')); // (1106) X
+      f.add(new Character('\u0453')); // (1107) X
+      f.add(new Character('\u0454')); // (1108) X
+      f.add(new Character('\u0455')); // (1109) X
+      f.add(new Character('\u0456')); // (1110) X
+      f.add(new Character('\u0457')); // (1111) X
+      f.add(new Character('\u0458')); // (1112) X
+      f.add(new Character('\u0459')); // (1113) X
+      f.add(new Character('\u045A')); // (1114) X
+      f.add(new Character('\u045B')); // (1115) X
+      f.add(new Character('\u045C')); // (1116) X
+      f.add(new Character('\u045D')); // (1117) X
+      f.add(new Character('\u045E')); // (1118) X
+      f.add(new Character('\u045F')); // (1119) X
+      f.add(new Character('\u0460')); // (1120) X
+      f.add(new Character('\u0461')); // (1121) X
+      f.add(new Character('\u0462')); // (1122) X
+      f.add(new Character('\u0463')); // (1123) X
+      f.add(new Character('\u0464')); // (1124) X
+      f.add(new Character('\u0465')); // (1125) X
+      f.add(new Character('\u0466')); // (1126) X
+      f.add(new Character('\u0467')); // (1127) X
+      f.add(new Character('\u0468')); // (1128) X
+      f.add(new Character('\u0469')); // (1129) X
+      f.add(new Character('\u046A')); // (1130) X
+      f.add(new Character('\u046B')); // (1131) X
+      f.add(new Character('\u046C')); // (1132) X
+      f.add(new Character('\u046D')); // (1133) X
+      f.add(new Character('\u046E')); // (1134) X
+      f.add(new Character('\u046F')); // (1135) X
+      f.add(new Character('\u0470')); // (1136) X
+      f.add(new Character('\u0471')); // (1137) X
+      f.add(new Character('\u0472')); // (1138) X
+      f.add(new Character('\u0473')); // (1139) X
+      f.add(new Character('\u0474')); // (1140) X
+      f.add(new Character('\u0475')); // (1141) X
+      f.add(new Character('\u0476')); // (1142) X
+      f.add(new Character('\u0477')); // (1143) X
+      f.add(new Character('\u0478')); // (1144) X
+      f.add(new Character('\u0479')); // (1145) X
+      f.add(new Character('\u047A')); // (1146) X
+      f.add(new Character('\u047B')); // (1147) X
+      f.add(new Character('\u047C')); // (1148) X
+      f.add(new Character('\u047D')); // (1149) X
+      f.add(new Character('\u047E')); // (1150) X
+      f.add(new Character('\u047F')); // (1151) X
+      f.add(new Character('\u0480')); // (1152) X
+      f.add(new Character('\u0481')); // (1153) X
+      f.add(new Character('\u0482')); // (1154) X
+      f.add(new Character('\u0483')); // (1155) X
+      f.add(new Character('\u0484')); // (1156) X
+      f.add(new Character('\u0485')); // (1157) X
+      f.add(new Character('\u0486')); // (1158) X
+      f.add(new Character('\u0487')); // (1159) X
+      f.add(new Character('\u0488')); // (1160) X
+      f.add(new Character('\u0489')); // (1161) X
+      f.add(new Character('\u048A')); // (1162) X
+      f.add(new Character('\u048B')); // (1163) X
+      f.add(new Character('\u048C')); // (1164) X
+      f.add(new Character('\u048D')); // (1165) X
+      f.add(new Character('\u048E')); // (1166) X
+      f.add(new Character('\u048F')); // (1167) X
+      f.add(new Character('\u0490')); // (1168) X
+      f.add(new Character('\u0491')); // (1169) X
+      f.add(new Character('\u0492')); // (1170) X
+      f.add(new Character('\u0493')); // (1171) X
+      f.add(new Character('\u0494')); // (1172) X
+      f.add(new Character('\u0495')); // (1173) X
+      f.add(new Character('\u0496')); // (1174) X
+      f.add(new Character('\u0497')); // (1175) X
+      f.add(new Character('\u0498')); // (1176) X
+      f.add(new Character('\u0499')); // (1177) X
+      f.add(new Character('\u049A')); // (1178) X
+      f.add(new Character('\u049B')); // (1179) X
+      f.add(new Character('\u049C')); // (1180) X
+      f.add(new Character('\u049D')); // (1181) X
+      f.add(new Character('\u049E')); // (1182) X
+      f.add(new Character('\u049F')); // (1183) X
+      f.add(new Character('\u04A0')); // (1184) X
+      f.add(new Character('\u04A1')); // (1185) X
+      f.add(new Character('\u04A2')); // (1186) X
+      f.add(new Character('\u04A3')); // (1187) X
+      f.add(new Character('\u04A4')); // (1188) X
+      f.add(new Character('\u04A5')); // (1189) X
+      f.add(new Character('\u04A6')); // (1190) X
+      f.add(new Character('\u04A7')); // (1191) X
+      f.add(new Character('\u04A8')); // (1192) X
+      f.add(new Character('\u04A9')); // (1193) X
+      f.add(new Character('\u04AA')); // (1194) X
+      f.add(new Character('\u04AB')); // (1195) X
+      f.add(new Character('\u04AC')); // (1196) X
+      f.add(new Character('\u04AD')); // (1197) X
+      f.add(new Character('\u04AE')); // (1198) X
+      f.add(new Character('\u04AF')); // (1199) X
+      f.add(new Character('\u04B0')); // (1200) X
+      f.add(new Character('\u04B1')); // (1201) X
+      f.add(new Character('\u04B2')); // (1202) X
+      f.add(new Character('\u04B3')); // (1203) X
+      f.add(new Character('\u04B4')); // (1204) X
+      f.add(new Character('\u04B5')); // (1205) X
+      f.add(new Character('\u04B6')); // (1206) X
+      f.add(new Character('\u04B7')); // (1207) X
+      f.add(new Character('\u04B8')); // (1208) X
+      f.add(new Character('\u04B9')); // (1209) X
+      f.add(new Character('\u04BA')); // (1210) X
+      f.add(new Character('\u04BB')); // (1211) X
+      f.add(new Character('\u04BC')); // (1212) X
+      f.add(new Character('\u04BD')); // (1213) X
+      f.add(new Character('\u04BE')); // (1214) X
+      f.add(new Character('\u04BF')); // (1215) X
+      f.add(new Character('\u04C0')); // (1216) X
+      f.add(new Character('\u04C1')); // (1217) X
+      f.add(new Character('\u04C2')); // (1218) X
+      f.add(new Character('\u04C3')); // (1219) X
+      f.add(new Character('\u04C4')); // (1220) X
+      f.add(new Character('\u04C5')); // (1221) X
+      f.add(new Character('\u04C6')); // (1222) X
+      f.add(new Character('\u04C7')); // (1223) X
+      f.add(new Character('\u04C8')); // (1224) X
+      f.add(new Character('\u04C9')); // (1225) X
+      f.add(new Character('\u04CA')); // (1226) X
+      f.add(new Character('\u04CB')); // (1227) X
+      f.add(new Character('\u04CC')); // (1228) X
+      f.add(new Character('\u04CD')); // (1229) X
+      f.add(new Character('\u04CE')); // (1230) X
+      f.add(new Character('\u04CF')); // (1231) X
+      f.add(new Character('\u04D0')); // (1232) X
+      f.add(new Character('\u04D1')); // (1233) X
+      f.add(new Character('\u04D2')); // (1234) X
+      f.add(new Character('\u04D3')); // (1235) X
+      f.add(new Character('\u04D4')); // (1236) X
+      f.add(new Character('\u04D5')); // (1237) X
+      f.add(new Character('\u04D6')); // (1238) X
+      f.add(new Character('\u04D7')); // (1239) X
+      f.add(new Character('\u04D8')); // (1240) X
+      f.add(new Character('\u04D9')); // (1241) X
+      f.add(new Character('\u04DA')); // (1242) X
+      f.add(new Character('\u04DB')); // (1243) X
+      f.add(new Character('\u04DC')); // (1244) X
+      f.add(new Character('\u04DD')); // (1245) X
+      f.add(new Character('\u04DE')); // (1246) X
+      f.add(new Character('\u04DF')); // (1247) X
+      f.add(new Character('\u04E0')); // (1248) X
+      f.add(new Character('\u04E1')); // (1249) X
+      f.add(new Character('\u04E2')); // (1250) X
+      f.add(new Character('\u04E3')); // (1251) X
+      f.add(new Character('\u04E4')); // (1252) X
+      f.add(new Character('\u04E5')); // (1253) X
+      f.add(new Character('\u04E6')); // (1254) X
+      f.add(new Character('\u04E7')); // (1255) X
+      f.add(new Character('\u04E8')); // (1256) X
+      f.add(new Character('\u04E9')); // (1257) X
+      f.add(new Character('\u04EA')); // (1258) X
+      f.add(new Character('\u04EB')); // (1259) X
+      f.add(new Character('\u04EC')); // (1260) X
+      f.add(new Character('\u04ED')); // (1261) X
+      f.add(new Character('\u04EE')); // (1262) X
+      f.add(new Character('\u04EF')); // (1263) X
+      f.add(new Character('\u04F0')); // (1264) X
+      f.add(new Character('\u04F1')); // (1265) X
+      f.add(new Character('\u04F2')); // (1266) X
+      f.add(new Character('\u04F3')); // (1267) X
+      f.add(new Character('\u04F4')); // (1268) X
+      f.add(new Character('\u04F5')); // (1269) X
+      f.add(new Character('\u04F6')); // (1270) X
+      f.add(new Character('\u04F7')); // (1271) X
+      f.add(new Character('\u04F8')); // (1272) X
+      f.add(new Character('\u04F9')); // (1273) X
+      f.add(new Character('\u04FA')); // (1274) X
+      f.add(new Character('\u04FB')); // (1275) X
+      f.add(new Character('\u04FC')); // (1276) X
+      f.add(new Character('\u04FD')); // (1277) X
+      f.add(new Character('\u04FE')); // (1278) X
+      f.add(new Character('\u04FF')); // (1279) X
+      f.add(new Character('\u0500')); // (1280) X
+      f.add(new Character('\u0501')); // (1281) X
+      f.add(new Character('\u0502')); // (1282) X
+      f.add(new Character('\u0503')); // (1283) X
+      f.add(new Character('\u0504')); // (1284) X
+      f.add(new Character('\u0505')); // (1285) X
+      f.add(new Character('\u0506')); // (1286) X
+      f.add(new Character('\u0507')); // (1287) X
+      f.add(new Character('\u0508')); // (1288) X
+      f.add(new Character('\u0509')); // (1289) X
+      f.add(new Character('\u050A')); // (1290) X
+      f.add(new Character('\u050B')); // (1291) X
+      f.add(new Character('\u050C')); // (1292) X
+      f.add(new Character('\u050D')); // (1293) X
+      f.add(new Character('\u050E')); // (1294) X
+      f.add(new Character('\u050F')); // (1295) X
+      f.add(new Character('\u0510')); // (1296) X
+      f.add(new Character('\u0511')); // (1297) X
+      f.add(new Character('\u0512')); // (1298) X
+      f.add(new Character('\u0513')); // (1299) X
+      f.add(new Character('\u0514')); // (1300) X
+      f.add(new Character('\u0515')); // (1301) X
+      f.add(new Character('\u0516')); // (1302) X
+      f.add(new Character('\u0517')); // (1303) X
+      f.add(new Character('\u0518')); // (1304) X
+      f.add(new Character('\u0519')); // (1305) X
+      f.add(new Character('\u051A')); // (1306) X
+      f.add(new Character('\u051B')); // (1307) X
+      f.add(new Character('\u051C')); // (1308) X
+      f.add(new Character('\u051D')); // (1309) X
+      f.add(new Character('\u051E')); // (1310) X
+      f.add(new Character('\u051F')); // (1311) X
+      f.add(new Character('\u0520')); // (1312) X
+      f.add(new Character('\u0521')); // (1313) X
+      f.add(new Character('\u0522')); // (1314) X
+      f.add(new Character('\u0523')); // (1315) X
+      f.add(new Character('\u0524')); // (1316) X
+      f.add(new Character('\u0525')); // (1317) X
+      f.add(new Character('\u0526')); // (1318) X
+      f.add(new Character('\u0527')); // (1319) X
+      f.add(new Character('\u0528')); // (1320) X
+      f.add(new Character('\u0529')); // (1321) X
+      f.add(new Character('\u052A')); // (1322) X
+      f.add(new Character('\u052B')); // (1323) X
+      f.add(new Character('\u052C')); // (1324) X
+      f.add(new Character('\u052D')); // (1325) X
+      f.add(new Character('\u052E')); // (1326) X
+      f.add(new Character('\u052F')); // (1327) X
+      f.add(new Character('\u0530')); // (1328) X
+      f.add(new Character('\u0531')); // (1329) X
+      f.add(new Character('\u0532')); // (1330) X
+      f.add(new Character('\u0533')); // (1331) X
+      f.add(new Character('\u0534')); // (1332) X
+      f.add(new Character('\u0535')); // (1333) X
+      f.add(new Character('\u0536')); // (1334) X
+      f.add(new Character('\u0537')); // (1335) X
+      f.add(new Character('\u0538')); // (1336) X
+      f.add(new Character('\u0539')); // (1337) X
+      f.add(new Character('\u053A')); // (1338) X
+      f.add(new Character('\u053B')); // (1339) X
+      f.add(new Character('\u053C')); // (1340) X
+      f.add(new Character('\u053D')); // (1341) X
+      f.add(new Character('\u053E')); // (1342) X
+      f.add(new Character('\u053F')); // (1343) X
+      f.add(new Character('\u0540')); // (1344) X
+      f.add(new Character('\u0541')); // (1345) X
+      f.add(new Character('\u0542')); // (1346) X
+      f.add(new Character('\u0543')); // (1347) X
+      f.add(new Character('\u0544')); // (1348) X
+      f.add(new Character('\u0545')); // (1349) X
+      f.add(new Character('\u0546')); // (1350) X
+      f.add(new Character('\u0547')); // (1351) X
+      f.add(new Character('\u0548')); // (1352) X
+      f.add(new Character('\u0549')); // (1353) X
+      f.add(new Character('\u054A')); // (1354) X
+      f.add(new Character('\u054B')); // (1355) X
+      f.add(new Character('\u054C')); // (1356) X
+      f.add(new Character('\u054D')); // (1357) X
+      f.add(new Character('\u054E')); // (1358) X
+      f.add(new Character('\u054F')); // (1359) X
+      f.add(new Character('\u0550')); // (1360) X
+      f.add(new Character('\u0551')); // (1361) X
+      f.add(new Character('\u0552')); // (1362) X
+      f.add(new Character('\u0553')); // (1363) X
+      f.add(new Character('\u0554')); // (1364) X
+      f.add(new Character('\u0555')); // (1365) X
+      f.add(new Character('\u0556')); // (1366) X
+      f.add(new Character('\u0557')); // (1367) X
+      f.add(new Character('\u0558')); // (1368) X
+      f.add(new Character('\u0559')); // (1369) X
+      f.add(new Character('\u055A')); // (1370) X
+      f.add(new Character('\u055B')); // (1371) X
+      f.add(new Character('\u055C')); // (1372) X
+      f.add(new Character('\u055D')); // (1373) X
+      f.add(new Character('\u055E')); // (1374) X
+      f.add(new Character('\u055F')); // (1375) X
+      f.add(new Character('\u0560')); // (1376) X
+      f.add(new Character('\u0561')); // (1377) X
+      f.add(new Character('\u0562')); // (1378) X
+      f.add(new Character('\u0563')); // (1379) X
+      f.add(new Character('\u0564')); // (1380) X
+      f.add(new Character('\u0565')); // (1381) X
+      f.add(new Character('\u0566')); // (1382) X
+      f.add(new Character('\u0567')); // (1383) X
+      f.add(new Character('\u0568')); // (1384) X
+      f.add(new Character('\u0569')); // (1385) X
+      f.add(new Character('\u056A')); // (1386) X
+      f.add(new Character('\u056B')); // (1387) X
+      f.add(new Character('\u056C')); // (1388) X
+      f.add(new Character('\u056D')); // (1389) X
+      f.add(new Character('\u056E')); // (1390) X
+      f.add(new Character('\u056F')); // (1391) X
+      f.add(new Character('\u0570')); // (1392) X
+      f.add(new Character('\u0571')); // (1393) X
+      f.add(new Character('\u0572')); // (1394) X
+      f.add(new Character('\u0573')); // (1395) X
+      f.add(new Character('\u0574')); // (1396) X
+      f.add(new Character('\u0575')); // (1397) X
+      f.add(new Character('\u0576')); // (1398) X
+      f.add(new Character('\u0577')); // (1399) X
+      f.add(new Character('\u0578')); // (1400) X
+      f.add(new Character('\u0579')); // (1401) X
+      f.add(new Character('\u057A')); // (1402) X
+      f.add(new Character('\u057B')); // (1403) X
+      f.add(new Character('\u057C')); // (1404) X
+      f.add(new Character('\u057D')); // (1405) X
+      f.add(new Character('\u057E')); // (1406) X
+      f.add(new Character('\u057F')); // (1407) X
+      f.add(new Character('\u0580')); // (1408) X
+      f.add(new Character('\u0581')); // (1409) X
+      f.add(new Character('\u0582')); // (1410) X
+      f.add(new Character('\u0583')); // (1411) X
+      f.add(new Character('\u0584')); // (1412) X
+      f.add(new Character('\u0585')); // (1413) X
+      f.add(new Character('\u0586')); // (1414) X
+      f.add(new Character('\u0587')); // (1415) X
+   }
+
+   /**
+    * Initializes ordinary characters for LUWO for the RU language.
+    * @param f The HashSet
+    */
+   protected static void initRUFlags(HashSet<Character> f)
+   {
+      f.add(new Character('\u00B5')); // (  181) micro
+      f.add(new Character('\u0401')); // ( 1025) X
+      f.add(new Character('\u0402')); // ( 1026) X
+      f.add(new Character('\u0403')); // ( 1027) X
+      f.add(new Character('\u0404')); // ( 1028) X
+      f.add(new Character('\u0405')); // ( 1029) X
+      f.add(new Character('\u0406')); // ( 1030) X
+      f.add(new Character('\u0407')); // ( 1031) X
+      f.add(new Character('\u0408')); // ( 1032) X
+      f.add(new Character('\u0409')); // ( 1033) X
+      f.add(new Character('\u040A')); // ( 1034) X
+      f.add(new Character('\u040B')); // ( 1035) X
+      f.add(new Character('\u040C')); // ( 1036) X
+      f.add(new Character('\u040E')); // ( 1038) X
+      f.add(new Character('\u040F')); // ( 1039) X
+      f.add(new Character('\u0410')); // ( 1040) X
+      f.add(new Character('\u0411')); // ( 1041) X
+      f.add(new Character('\u0412')); // ( 1042) X
+      f.add(new Character('\u0413')); // ( 1043) X
+      f.add(new Character('\u0414')); // ( 1044) X
+      f.add(new Character('\u0415')); // ( 1045) X
+      f.add(new Character('\u0416')); // ( 1046) X
+      f.add(new Character('\u0417')); // ( 1047) X
+      f.add(new Character('\u0418')); // ( 1048) X
+      f.add(new Character('\u0419')); // ( 1049) X
+      f.add(new Character('\u041A')); // ( 1050) X
+      f.add(new Character('\u041B')); // ( 1051) X
+      f.add(new Character('\u041C')); // ( 1052) X
+      f.add(new Character('\u041D')); // ( 1053) X
+      f.add(new Character('\u041E')); // ( 1054) X
+      f.add(new Character('\u041F')); // ( 1055) X
+      f.add(new Character('\u0420')); // ( 1056) X
+      f.add(new Character('\u0421')); // ( 1057) X
+      f.add(new Character('\u0422')); // ( 1058) X
+      f.add(new Character('\u0423')); // ( 1059) X
+      f.add(new Character('\u0424')); // ( 1060) X
+      f.add(new Character('\u0425')); // ( 1061) X
+      f.add(new Character('\u0426')); // ( 1062) X
+      f.add(new Character('\u0427')); // ( 1063) X
+      f.add(new Character('\u0428')); // ( 1064) X
+      f.add(new Character('\u0429')); // ( 1065) X
+      f.add(new Character('\u042A')); // ( 1066) X
+      f.add(new Character('\u042B')); // ( 1067) X
+      f.add(new Character('\u042C')); // ( 1068) X
+      f.add(new Character('\u042D')); // ( 1069) X
+      f.add(new Character('\u042E')); // ( 1070) X
+      f.add(new Character('\u042F')); // ( 1071) X
+      f.add(new Character('\u0430')); // ( 1072) X
+      f.add(new Character('\u0431')); // ( 1073) X
+      f.add(new Character('\u0432')); // ( 1074) X
+      f.add(new Character('\u0433')); // ( 1075) X
+      f.add(new Character('\u0434')); // ( 1076) X
+      f.add(new Character('\u0435')); // ( 1077) X
+      f.add(new Character('\u0436')); // ( 1078) X
+      f.add(new Character('\u0437')); // ( 1079) X
+      f.add(new Character('\u0438')); // ( 1080) X
+      f.add(new Character('\u0439')); // ( 1081) X
+      f.add(new Character('\u043A')); // ( 1082) X
+      f.add(new Character('\u043B')); // ( 1083) X
+      f.add(new Character('\u043C')); // ( 1084) X
+      f.add(new Character('\u043D')); // ( 1085) X
+      f.add(new Character('\u043E')); // ( 1086) X
+      f.add(new Character('\u043F')); // ( 1087) X
+      f.add(new Character('\u0440')); // ( 1088) X
+      f.add(new Character('\u0441')); // ( 1089) X
+      f.add(new Character('\u0442')); // ( 1090) X
+      f.add(new Character('\u0443')); // ( 1091) X
+      f.add(new Character('\u0444')); // ( 1092) X
+      f.add(new Character('\u0445')); // ( 1093) X
+      f.add(new Character('\u0446')); // ( 1094) X
+      f.add(new Character('\u0447')); // ( 1095) X
+      f.add(new Character('\u0448')); // ( 1096) X
+      f.add(new Character('\u0449')); // ( 1097) X
+      f.add(new Character('\u044A')); // ( 1098) X
+      f.add(new Character('\u044B')); // ( 1099) X
+      f.add(new Character('\u044C')); // ( 1100) X
+      f.add(new Character('\u044D')); // ( 1101) X
+      f.add(new Character('\u044E')); // ( 1102) X
+      f.add(new Character('\u044F')); // ( 1103) X
+      f.add(new Character('\u0451')); // ( 1105) X
+      f.add(new Character('\u0452')); // ( 1106) X
+      f.add(new Character('\u0453')); // ( 1107) X
+      f.add(new Character('\u0454')); // ( 1108) X
+      f.add(new Character('\u0455')); // ( 1109) X
+      f.add(new Character('\u0456')); // ( 1110) X
+      f.add(new Character('\u0457')); // ( 1111) X
+      f.add(new Character('\u0458')); // ( 1112) X
+      f.add(new Character('\u0459')); // ( 1113) X
+      f.add(new Character('\u045A')); // ( 1114) X
+      f.add(new Character('\u045B')); // ( 1115) X
+      f.add(new Character('\u045C')); // ( 1116) X
+      f.add(new Character('\u045E')); // ( 1118) X
+      f.add(new Character('\u045F')); // ( 1119) X
+      f.add(new Character('\u0490')); // ( 1168) X
+      f.add(new Character('\u0491')); // ( 1169) X
+   }
+
+   /**
+    * Initializes ordinary characters for LUWO for the PT language.
+    * @param f The HashSet
+    */
+   protected static void initPTFlags(HashSet<Character> f)
+   {
+      f.add(new Character('\u00AA')); // (  170) feminine_ordinal
+      f.add(new Character('\u00BA')); // (  186) masculine_ordinal
+      f.add(new Character('\u00C0')); // (  192) A_grave
+      f.add(new Character('\u00C1')); // (  193) A_acute
+      f.add(new Character('\u00C2')); // (  194) A_circumflex
+      f.add(new Character('\u00C3')); // (  195) A_tilde
+      f.add(new Character('\u00C4')); // (  196) A_umlaut
+      f.add(new Character('\u00C5')); // (  197) A_ring
+      f.add(new Character('\u00C6')); // (  198) AE_ligature
+      f.add(new Character('\u00C7')); // (  199) C_cedilla
+      f.add(new Character('\u00C8')); // (  200) E_grave
+      f.add(new Character('\u00C9')); // (  201) E_acute
+      f.add(new Character('\u00CA')); // (  202) E_circumflex
+      f.add(new Character('\u00CB')); // (  203) E_umlaut
+      f.add(new Character('\u00CC')); // (  204) I_grave
+      f.add(new Character('\u00CD')); // (  205) I_acute
+      f.add(new Character('\u00CE')); // (  206) I_circumflex
+      f.add(new Character('\u00CF')); // (  207) I_umlaut
+      f.add(new Character('\u00D0')); // (  208) ETH_Q
+      f.add(new Character('\u00D1')); // (  209) N_tilde
+      f.add(new Character('\u00D2')); // (  210) O_grave
+      f.add(new Character('\u00D3')); // (  211) O_acute
+      f.add(new Character('\u00D4')); // (  212) O_circumflex
+      f.add(new Character('\u00D5')); // (  213) O_tilde
+      f.add(new Character('\u00D6')); // (  214) O_umlaut
+      f.add(new Character('\u00D8')); // (  216) O_slash
+      f.add(new Character('\u00D9')); // (  217) U_grave
+      f.add(new Character('\u00DA')); // (  218) U_acute
+      f.add(new Character('\u00DB')); // (  219) U_circumflex
+      f.add(new Character('\u00DC')); // (  220) U_umlaut
+      f.add(new Character('\u00DD')); // (  221) Y_acute
+      f.add(new Character('\u00DE')); // (  222) THORN
+      f.add(new Character('\u00DF')); // (  223) sharp_s
+      f.add(new Character('\u00E0')); // (  224) a_grave
+      f.add(new Character('\u00E1')); // (  225) a_acute
+      f.add(new Character('\u00E2')); // (  226) a_circumflex
+      f.add(new Character('\u00E3')); // (  227) a_tilde
+      f.add(new Character('\u00E4')); // (  228) a_umlaut
+      f.add(new Character('\u00E5')); // (  229) a_ring
+      f.add(new Character('\u00E6')); // (  230) ae_ligature
+      f.add(new Character('\u00E7')); // (  231) c_cedilla
+      f.add(new Character('\u00E8')); // (  232) e_grave
+      f.add(new Character('\u00E9')); // (  233) e_acute
+      f.add(new Character('\u00EA')); // (  234) e_circumflex
+      f.add(new Character('\u00EB')); // (  235) e_umlaut
+      f.add(new Character('\u00EC')); // (  236) i_grave
+      f.add(new Character('\u00ED')); // (  237) i_acute
+      f.add(new Character('\u00EE')); // (  238) i_circumflex
+      f.add(new Character('\u00EF')); // (  239) i_umlaut
+      f.add(new Character('\u00F0')); // (  240) eth
+      f.add(new Character('\u00F1')); // (  241) n_tilde
+      f.add(new Character('\u00F2')); // (  242) o_grave
+      f.add(new Character('\u00F3')); // (  243) o_acute
+      f.add(new Character('\u00F4')); // (  244) o_circumflex
+      f.add(new Character('\u00F5')); // (  245) o_tilde
+      f.add(new Character('\u00F6')); // (  246) o_umlaut
+      f.add(new Character('\u00F8')); // (  248) o_slash
+      f.add(new Character('\u00F9')); // (  249) u_grave
+      f.add(new Character('\u00FA')); // (  250) u_acute
+      f.add(new Character('\u00FB')); // (  251) u_circumflex
+      f.add(new Character('\u00FC')); // (  252) u_umlaut
+      f.add(new Character('\u00FD')); // (  253) y_acute
+      f.add(new Character('\u00FE')); // (  254) thorn
+      f.add(new Character('\u00FF')); // (  255) y_umlaut
+      f.add(new Character('\u0152')); // (  338) OE_ligature
+      f.add(new Character('\u0153')); // (  339) oe_ligature
+      f.add(new Character('\u0160')); // (  352) S_caron
+      f.add(new Character('\u0161')); // (  353) s_caron
+      f.add(new Character('\u0178')); // (  376) Y_diaeresis
+   }
+
+   /**
+    * Initializes ordinary characters for LUWO for the PL language.
+    * @param f The HashSet
+    */
+   protected static void initPLFlags(HashSet<Character> f)
+   {
+      f.add(new Character('\u00B5')); // (  181) micro
+      f.add(new Character('\u00C1')); // (  193) A_acute
+      f.add(new Character('\u00C2')); // (  194) A_circumflex
+      f.add(new Character('\u00C4')); // (  196) A_umlaut
+      f.add(new Character('\u00C7')); // (  199) C_cedilla
+      f.add(new Character('\u00C9')); // (  201) E_acute
+      f.add(new Character('\u00CB')); // (  203) E_umlaut
+      f.add(new Character('\u00CD')); // (  205) I_acute
+      f.add(new Character('\u00CE')); // (  206) I_circumflex
+      f.add(new Character('\u00D3')); // (  211) O_acute
+      f.add(new Character('\u00D4')); // (  212) O_circumflex
+      f.add(new Character('\u00D6')); // (  214) O_umlaut
+      f.add(new Character('\u00DA')); // (  218) U_acute
+      f.add(new Character('\u00DC')); // (  220) U_umlaut
+      f.add(new Character('\u00DD')); // (  221) Y_acute
+      f.add(new Character('\u00DF')); // (  223) sharp_s
+      f.add(new Character('\u00E1')); // (  225) a_acute
+      f.add(new Character('\u00E2')); // (  226) a_circumflex
+      f.add(new Character('\u00E4')); // (  228) a_umlaut
+      f.add(new Character('\u00E7')); // (  231) c_cedilla
+      f.add(new Character('\u00E9')); // (  233) e_acute
+      f.add(new Character('\u00EB')); // (  235) e_umlaut
+      f.add(new Character('\u00ED')); // (  237) i_acute
+      f.add(new Character('\u00EE')); // (  238) i_circumflex
+      f.add(new Character('\u00F3')); // (  243) o_acute
+      f.add(new Character('\u00F4')); // (  244) o_circumflex
+      f.add(new Character('\u00F6')); // (  246) o_umlaut
+      f.add(new Character('\u00FA')); // (  250) u_acute
+      f.add(new Character('\u00FC')); // (  252) u_umlaut
+      f.add(new Character('\u00FD')); // (  253) y_acute
+      f.add(new Character('\u0102')); // (  258) A_breve
+      f.add(new Character('\u0103')); // (  259) a_breve
+      f.add(new Character('\u0104')); // (  260) A_ogokek
+      f.add(new Character('\u0105')); // (  261) a_ogokek
+      f.add(new Character('\u0106')); // (  262) C_acute
+      f.add(new Character('\u0107')); // (  263) c_acute
+      f.add(new Character('\u010C')); // (  268) C_caron
+      f.add(new Character('\u010D')); // (  269) c_caron
+      f.add(new Character('\u010E')); // (  270) D_caron
+      f.add(new Character('\u010F')); // (  271) d_caron
+      f.add(new Character('\u0110')); // (  272) D_stroke
+      f.add(new Character('\u0111')); // (  273) d_stroke
+      f.add(new Character('\u0118')); // (  280) E_ogonek
+      f.add(new Character('\u0119')); // (  281) e_ogonek
+      f.add(new Character('\u011A')); // (  282) E_caron
+      f.add(new Character('\u011B')); // (  283) e_caron
+      f.add(new Character('\u0139')); // (  313) L_acute
+      f.add(new Character('\u013A')); // (  314) l_acute
+      f.add(new Character('\u013D')); // (  317) L_caron
+      f.add(new Character('\u013E')); // (  318) l_caron
+      f.add(new Character('\u0141')); // (  321) L_stoke
+      f.add(new Character('\u0142')); // (  322) l_stoke
+      f.add(new Character('\u0143')); // (  323) N_acute
+      f.add(new Character('\u0144')); // (  324) n_acute
+      f.add(new Character('\u0147')); // (  327) N_caron
+      f.add(new Character('\u0148')); // (  328) n_caron
+      f.add(new Character('\u0150')); // (  336) O_double_acute
+      f.add(new Character('\u0151')); // (  337) o_double_acute
+      f.add(new Character('\u0154')); // (  340) R_acute
+      f.add(new Character('\u0155')); // (  341) r_acute
+      f.add(new Character('\u0158')); // (  344) R_caron
+      f.add(new Character('\u0159')); // (  345) r_caron
+      f.add(new Character('\u015A')); // (  346) S_acute
+      f.add(new Character('\u015B')); // (  347) s_acute
+      f.add(new Character('\u015E')); // (  350) S_cedilla
+      f.add(new Character('\u015F')); // (  351) s_cedilla
+      f.add(new Character('\u0160')); // (  352) S_caron
+      f.add(new Character('\u0161')); // (  353) s_caron
+      f.add(new Character('\u0162')); // (  354) T_cedilla
+      f.add(new Character('\u0163')); // (  355) t_cedilla
+      f.add(new Character('\u0164')); // (  356) T_caron
+      f.add(new Character('\u0165')); // (  357) t_caron
+      f.add(new Character('\u016E')); // (  366) U_ring
+      f.add(new Character('\u016F')); // (  367) u_ring
+      f.add(new Character('\u0170')); // (  368) U_double_acute
+      f.add(new Character('\u0171')); // (  369) u_double_acute
+      f.add(new Character('\u0179')); // (  377) Z_acute
+      f.add(new Character('\u017A')); // (  378) z_acute
+      f.add(new Character('\u017B')); // (  379) Z_superdot
+      f.add(new Character('\u017C')); // (  380) z_superdot
+      f.add(new Character('\u017D')); // (  381) Z_caron
+      f.add(new Character('\u017E')); // (  382) z_caron
+   }
+
+   /**
+    * Initializes ordinary characters for LUWO for the KO language.
+    * @param f The HashSet
+    */
+   protected static void initKOFlags(HashSet<Character> f)
+   {
+      f.add(new Character('\u00A1')); // ( 161) inverted_exclamation
+      f.add(new Character('\u00A4')); // ( 164) currency
+      f.add(new Character('\u00A7')); // ( 167) SECTION
+      f.add(new Character('\u00A8')); // ( 168) diaeresis
+      f.add(new Character('\u00AA')); // ( 170) feminine_ordinal
+      f.add(new Character('\u00AD')); // ( 173) soft_hyphen
+      f.add(new Character('\u00AE')); // ( 174) REGISTERED
+      f.add(new Character('\u00B0')); // ( 176) degree
+      f.add(new Character('\u00B1')); // ( 177) plus_minus
+      f.add(new Character('\u00B2')); // ( 178) super2
+      f.add(new Character('\u00B3')); // ( 179) super3
+      f.add(new Character('\u00B4')); // ( 180) acute
+      f.add(new Character('\u00B6')); // ( 182) Pilcrow
+      f.add(new Character('\u00B7')); // ( 183) middot
+      f.add(new Character('\u00B8')); // ( 184) cedilla
+      f.add(new Character('\u00B9')); // ( 185) super1
+      f.add(new Character('\u00BA')); // ( 186) masculine_ordinal
+      f.add(new Character('\u00BC')); // ( 188) one_quarter
+      f.add(new Character('\u00BD')); // ( 189) one_half
+      f.add(new Character('\u00BE')); // ( 190) three_quarters
+      f.add(new Character('\u00BF')); // ( 191) inverted_question_mark
+      f.add(new Character('\u00C6')); // ( 198) AE_ligature
+      f.add(new Character('\u00D0')); // ( 208) ETH_Q
+      f.add(new Character('\u00D7')); // ( 215) times
+      f.add(new Character('\u00D8')); // ( 216) O_slash
+      f.add(new Character('\u00DE')); // ( 222) THORN
+      f.add(new Character('\u00DF')); // ( 223) sharp_s
+      f.add(new Character('\u00E6')); // ( 230) ae_ligature
+      f.add(new Character('\u00F0')); // ( 240) eth
+      f.add(new Character('\u00F8')); // ( 248) o_slash
+      f.add(new Character('\u00FE')); // ( 254) thorn
+      f.add(new Character('\u0100')); // ( 256) A_bar
+      f.add(new Character('\u0101')); // ( 257) a_bar
+      f.add(new Character('\u0102')); // ( 258) A_breve
+      f.add(new Character('\u0103')); // ( 259) a_breve
+      f.add(new Character('\u0104')); // ( 260) A_ogokek
+      f.add(new Character('\u0105')); // ( 261) a_ogokek
+      f.add(new Character('\u0106')); // ( 262) C_acute
+      f.add(new Character('\u0107')); // ( 263) c_acute
+      f.add(new Character('\u0108')); // ( 264) C_circumflex
+      f.add(new Character('\u0109')); // ( 265) c_circumflex
+      f.add(new Character('\u010A')); // ( 266) C_superdot
+      f.add(new Character('\u010B')); // ( 267) c_superdot
+      f.add(new Character('\u010C')); // ( 268) C_caron
+      f.add(new Character('\u010D')); // ( 269) c_caron
+      f.add(new Character('\u010E')); // ( 270) D_caron
+      f.add(new Character('\u010F')); // ( 271) d_caron
+      f.add(new Character('\u0110')); // ( 272) D_stroke
+      f.add(new Character('\u0111')); // ( 273) d_stroke
+      f.add(new Character('\u0112')); // ( 274) E_macron
+      f.add(new Character('\u0113')); // ( 275) e_macron
+      f.add(new Character('\u0114')); // ( 276) E_breve
+      f.add(new Character('\u0115')); // ( 277) e_breve
+      f.add(new Character('\u0116')); // ( 278) E_superdot
+      f.add(new Character('\u0117')); // ( 279) e_superdot
+      f.add(new Character('\u0118')); // ( 280) E_ogonek
+      f.add(new Character('\u0119')); // ( 281) e_ogonek
+      f.add(new Character('\u011A')); // ( 282) E_caron
+      f.add(new Character('\u011B')); // ( 283) e_caron
+      f.add(new Character('\u011C')); // ( 284) G_circumflex
+      f.add(new Character('\u011D')); // ( 285) g_circumflex
+      f.add(new Character('\u011E')); // ( 286) G_breve
+      f.add(new Character('\u011F')); // ( 287) g_breve
+      f.add(new Character('\u0120')); // ( 288) G_superdot
+      f.add(new Character('\u0121')); // ( 289) g_superdot
+      f.add(new Character('\u0122')); // ( 290) G_cedilla
+      f.add(new Character('\u0123')); // ( 291) g_cedilla
+      f.add(new Character('\u0124')); // ( 292) H_circumflex
+      f.add(new Character('\u0125')); // ( 293) h_circumflex
+      f.add(new Character('\u0126')); // ( 294) H_stroke
+      f.add(new Character('\u0127')); // ( 295) h_stroke
+      f.add(new Character('\u0128')); // ( 296) I_tilde
+      f.add(new Character('\u0129')); // ( 297) i_tilde
+      f.add(new Character('\u012A')); // ( 298) I_macron
+      f.add(new Character('\u012B')); // ( 299) i_macron
+      f.add(new Character('\u012C')); // ( 300) I_breve
+      f.add(new Character('\u012D')); // ( 301) i_breve
+      f.add(new Character('\u012E')); // ( 302) I_ogonek
+      f.add(new Character('\u012F')); // ( 303) i_ogonek
+      f.add(new Character('\u0130')); // ( 304) I_superdot
+      f.add(new Character('\u0131')); // ( 305) i_nodot
+      f.add(new Character('\u0132')); // ( 306) IJ_ligature
+      f.add(new Character('\u0133')); // ( 307) ij_ligature
+      f.add(new Character('\u0134')); // ( 308) J_circumflex
+      f.add(new Character('\u0135')); // ( 309) j_circumflex
+      f.add(new Character('\u0136')); // ( 310) K_cedilla
+      f.add(new Character('\u0137')); // ( 311) k_cedilla
+      f.add(new Character('\u0138')); // ( 312) kra
+      f.add(new Character('\u0139')); // ( 313) L_acute
+      f.add(new Character('\u013A')); // ( 314) l_acute
+      f.add(new Character('\u013B')); // ( 315) L_cedilla
+      f.add(new Character('\u013C')); // ( 316) l_cedilla
+      f.add(new Character('\u013D')); // ( 317) L_caron
+      f.add(new Character('\u013E')); // ( 318) l_caron
+      f.add(new Character('\u013F')); // ( 319) L_middot
+      f.add(new Character('\u0140')); // ( 320) l_middot
+      f.add(new Character('\u0141')); // ( 321) L_stoke
+      f.add(new Character('\u0142')); // ( 322) l_stoke
+      f.add(new Character('\u0143')); // ( 323) N_acute
+      f.add(new Character('\u0144')); // ( 324) n_acute
+      f.add(new Character('\u0145')); // ( 325) N_cedilla
+      f.add(new Character('\u0146')); // ( 326) n_cedilla
+      f.add(new Character('\u0147')); // ( 327) N_caron
+      f.add(new Character('\u0148')); // ( 328) n_caron
+      f.add(new Character('\u0149')); // ( 329) n_apostrophe
+      f.add(new Character('\u014A')); // ( 330) ENG
+      f.add(new Character('\u014B')); // ( 331) eng
+      f.add(new Character('\u014C')); // ( 332) O_macron
+      f.add(new Character('\u014D')); // ( 333) o_macron
+      f.add(new Character('\u014E')); // ( 334) O_breve
+      f.add(new Character('\u014F')); // ( 335) o_breve
+      f.add(new Character('\u0150')); // ( 336) O_double_acute
+      f.add(new Character('\u0151')); // ( 337) o_double_acute
+      f.add(new Character('\u0152')); // ( 338) OE_ligature
+      f.add(new Character('\u0153')); // ( 339) oe_ligature
+      f.add(new Character('\u0154')); // ( 340) R_acute
+      f.add(new Character('\u0155')); // ( 341) r_acute
+      f.add(new Character('\u0156')); // ( 342) R_cedilla
+      f.add(new Character('\u0157')); // ( 343) r_cedilla
+      f.add(new Character('\u0158')); // ( 344) R_caron
+      f.add(new Character('\u0159')); // ( 345) r_caron
+      f.add(new Character('\u015A')); // ( 346) S_acute
+      f.add(new Character('\u015B')); // ( 347) s_acute
+      f.add(new Character('\u015C')); // ( 348) S_circumflex
+      f.add(new Character('\u015D')); // ( 349) s_circumflex
+      f.add(new Character('\u015E')); // ( 350) S_cedilla
+      f.add(new Character('\u015F')); // ( 351) s_cedilla
+      f.add(new Character('\u0160')); // ( 352) S_caron
+      f.add(new Character('\u0161')); // ( 353) s_caron
+      f.add(new Character('\u0162')); // ( 354) T_cedilla
+      f.add(new Character('\u0163')); // ( 355) t_cedilla
+      f.add(new Character('\u0164')); // ( 356) T_caron
+      f.add(new Character('\u0165')); // ( 357) t_caron
+      f.add(new Character('\u0166')); // ( 358) T_stroke
+      f.add(new Character('\u0167')); // ( 359) t_stroke
+      f.add(new Character('\u0168')); // ( 360) U_tilde
+      f.add(new Character('\u0169')); // ( 361) u_tilde
+      f.add(new Character('\u016A')); // ( 362) U_macron
+      f.add(new Character('\u016B')); // ( 363) u_macron
+      f.add(new Character('\u016C')); // ( 364) U_breve
+      f.add(new Character('\u016D')); // ( 365) u_breve
+      f.add(new Character('\u016E')); // ( 366) U_ring
+      f.add(new Character('\u016F')); // ( 367) u_ring
+      f.add(new Character('\u0170')); // ( 368) U_double_acute
+      f.add(new Character('\u0171')); // ( 369) u_double_acute
+      f.add(new Character('\u0172')); // ( 370) U_ogonek
+      f.add(new Character('\u0173')); // ( 371) u_ogonek
+      f.add(new Character('\u0174')); // ( 372) W_circumflex
+      f.add(new Character('\u0175')); // ( 373) w_circumflex
+      f.add(new Character('\u0176')); // ( 374) Y_circumflex
+      f.add(new Character('\u0177')); // ( 375) y_circumflex
+      f.add(new Character('\u0178')); // ( 376) Y_diaeresis
+      f.add(new Character('\u0179')); // ( 377) Z_acute
+      f.add(new Character('\u017A')); // ( 378) z_acute
+      f.add(new Character('\u017B')); // ( 379) Z_superdot
+      f.add(new Character('\u017C')); // ( 380) z_superdot
+      f.add(new Character('\u017D')); // ( 381) Z_caron
+      f.add(new Character('\u017E')); // ( 382) z_caron
+      f.add(new Character('\u017F')); // ( 383) long_s
+      f.add(new Character('\u0180')); // ( 384) X
+      f.add(new Character('\u0181')); // ( 385) X
+      f.add(new Character('\u0182')); // ( 386) X
+      f.add(new Character('\u0183')); // ( 387) X
+      f.add(new Character('\u0184')); // ( 388) X
+      f.add(new Character('\u0185')); // ( 389) X
+      f.add(new Character('\u0186')); // ( 390) X
+      f.add(new Character('\u0187')); // ( 391) X
+      f.add(new Character('\u0188')); // ( 392) X
+      f.add(new Character('\u0189')); // ( 393) X
+      f.add(new Character('\u018A')); // ( 394) X
+      f.add(new Character('\u018B')); // ( 395) X
+      f.add(new Character('\u018C')); // ( 396) X
+      f.add(new Character('\u018D')); // ( 397) X
+      f.add(new Character('\u018E')); // ( 398) X
+      f.add(new Character('\u018F')); // ( 399) X
+      f.add(new Character('\u0190')); // ( 400) X
+      f.add(new Character('\u0191')); // ( 401) X
+      f.add(new Character('\u0192')); // ( 402) X
+      f.add(new Character('\u0193')); // ( 403) X
+      f.add(new Character('\u0194')); // ( 404) X
+      f.add(new Character('\u0195')); // ( 405) X
+      f.add(new Character('\u0196')); // ( 406) X
+      f.add(new Character('\u0197')); // ( 407) X
+      f.add(new Character('\u0198')); // ( 408) X
+      f.add(new Character('\u0199')); // ( 409) X
+      f.add(new Character('\u019A')); // ( 410) X
+      f.add(new Character('\u019B')); // ( 411) X
+      f.add(new Character('\u019C')); // ( 412) X
+      f.add(new Character('\u019D')); // ( 413) X
+      f.add(new Character('\u019E')); // ( 414) X
+      f.add(new Character('\u019F')); // ( 415) X
+      f.add(new Character('\u01A0')); // ( 416) X
+      f.add(new Character('\u01A1')); // ( 417) X
+      f.add(new Character('\u01A2')); // ( 418) X
+      f.add(new Character('\u01A3')); // ( 419) X
+      f.add(new Character('\u01A4')); // ( 420) X
+      f.add(new Character('\u01A5')); // ( 421) X
+      f.add(new Character('\u01A6')); // ( 422) X
+      f.add(new Character('\u01A7')); // ( 423) X
+      f.add(new Character('\u01A8')); // ( 424) X
+      f.add(new Character('\u01A9')); // ( 425) X
+      f.add(new Character('\u01AA')); // ( 426) X
+      f.add(new Character('\u01AB')); // ( 427) X
+      f.add(new Character('\u01AC')); // ( 428) X
+      f.add(new Character('\u01AD')); // ( 429) X
+      f.add(new Character('\u01AE')); // ( 430) X
+      f.add(new Character('\u01AF')); // ( 431) X
+      f.add(new Character('\u01B0')); // ( 432) X
+      f.add(new Character('\u01B1')); // ( 433) X
+      f.add(new Character('\u01B2')); // ( 434) X
+      f.add(new Character('\u01B3')); // ( 435) X
+      f.add(new Character('\u01B4')); // ( 436) X
+      f.add(new Character('\u01B5')); // ( 437) X
+      f.add(new Character('\u01B6')); // ( 438) X
+      f.add(new Character('\u01B7')); // ( 439) X
+      f.add(new Character('\u01B8')); // ( 440) X
+      f.add(new Character('\u01B9')); // ( 441) X
+      f.add(new Character('\u01BA')); // ( 442) X
+      f.add(new Character('\u01BB')); // ( 443) X
+      f.add(new Character('\u01BC')); // ( 444) X
+      f.add(new Character('\u01BD')); // ( 445) X
+      f.add(new Character('\u01BE')); // ( 446) X
+      f.add(new Character('\u01BF')); // ( 447) X
+      f.add(new Character('\u01C0')); // ( 448) X
+      f.add(new Character('\u01C1')); // ( 449) X
+      f.add(new Character('\u01C2')); // ( 450) X
+      f.add(new Character('\u01C3')); // ( 451) X
+      f.add(new Character('\u01C4')); // ( 452) X
+      f.add(new Character('\u01C5')); // ( 453) X
+      f.add(new Character('\u01C6')); // ( 454) X
+      f.add(new Character('\u01C7')); // ( 455) X
+      f.add(new Character('\u01C8')); // ( 456) X
+      f.add(new Character('\u01C9')); // ( 457) X
+      f.add(new Character('\u01CA')); // ( 458) X
+      f.add(new Character('\u01CB')); // ( 459) X
+      f.add(new Character('\u01CC')); // ( 460) X
+      f.add(new Character('\u01CD')); // ( 461) X
+      f.add(new Character('\u01CE')); // ( 462) X
+      f.add(new Character('\u01CF')); // ( 463) X
+      f.add(new Character('\u01D0')); // ( 464) X
+      f.add(new Character('\u01D1')); // ( 465) X
+      f.add(new Character('\u01D2')); // ( 466) X
+      f.add(new Character('\u01D3')); // ( 467) X
+      f.add(new Character('\u01D4')); // ( 468) X
+      f.add(new Character('\u01D5')); // ( 469) X
+      f.add(new Character('\u01D6')); // ( 470) X
+      f.add(new Character('\u01D7')); // ( 471) X
+      f.add(new Character('\u01D8')); // ( 472) X
+      f.add(new Character('\u01D9')); // ( 473) X
+      f.add(new Character('\u01DA')); // ( 474) X
+      f.add(new Character('\u01DB')); // ( 475) X
+      f.add(new Character('\u01DC')); // ( 476) X
+      f.add(new Character('\u01DD')); // ( 477) X
+      f.add(new Character('\u01DE')); // ( 478) X
+      f.add(new Character('\u01DF')); // ( 479) X
+      f.add(new Character('\u01E0')); // ( 480) X
+      f.add(new Character('\u01E1')); // ( 481) X
+      f.add(new Character('\u01E2')); // ( 482) X
+      f.add(new Character('\u01E3')); // ( 483) X
+      f.add(new Character('\u01E4')); // ( 484) X
+      f.add(new Character('\u01E5')); // ( 485) X
+      f.add(new Character('\u01E6')); // ( 486) X
+      f.add(new Character('\u01E7')); // ( 487) X
+      f.add(new Character('\u01E8')); // ( 488) X
+      f.add(new Character('\u01E9')); // ( 489) X
+      f.add(new Character('\u01EA')); // ( 490) X
+      f.add(new Character('\u01EB')); // ( 491) X
+      f.add(new Character('\u01EC')); // ( 492) X
+      f.add(new Character('\u01ED')); // ( 493) X
+      f.add(new Character('\u01EE')); // ( 494) X
+      f.add(new Character('\u01EF')); // ( 495) X
+      f.add(new Character('\u01F0')); // ( 496) X
+      f.add(new Character('\u01F1')); // ( 497) X
+      f.add(new Character('\u01F2')); // ( 498) X
+      f.add(new Character('\u01F3')); // ( 499) X
+      f.add(new Character('\u01F4')); // ( 500) X
+      f.add(new Character('\u01F5')); // ( 501) X
+      f.add(new Character('\u01F6')); // ( 502) X
+      f.add(new Character('\u01F7')); // ( 503) X
+      f.add(new Character('\u01F8')); // ( 504) X
+      f.add(new Character('\u01F9')); // ( 505) X
+      f.add(new Character('\u01FA')); // ( 506) X
+      f.add(new Character('\u01FB')); // ( 507) X
+      f.add(new Character('\u01FC')); // ( 508) X
+      f.add(new Character('\u01FD')); // ( 509) X
+      f.add(new Character('\u01FE')); // ( 510) X
+      f.add(new Character('\u01FF')); // ( 511) X
+      f.add(new Character('\u0200')); // ( 512) X
+      f.add(new Character('\u0201')); // ( 513) X
+      f.add(new Character('\u0202')); // ( 514) X
+      f.add(new Character('\u0203')); // ( 515) X
+      f.add(new Character('\u0204')); // ( 516) X
+      f.add(new Character('\u0205')); // ( 517) X
+      f.add(new Character('\u0206')); // ( 518) X
+      f.add(new Character('\u0207')); // ( 519) X
+      f.add(new Character('\u0208')); // ( 520) X
+      f.add(new Character('\u0209')); // ( 521) X
+      f.add(new Character('\u020A')); // ( 522) X
+      f.add(new Character('\u020B')); // ( 523) X
+      f.add(new Character('\u020C')); // ( 524) X
+      f.add(new Character('\u020D')); // ( 525) X
+      f.add(new Character('\u020E')); // ( 526) X
+      f.add(new Character('\u020F')); // ( 527) X
+      f.add(new Character('\u0210')); // ( 528) X
+      f.add(new Character('\u0211')); // ( 529) X
+      f.add(new Character('\u0212')); // ( 530) X
+      f.add(new Character('\u0213')); // ( 531) X
+      f.add(new Character('\u0214')); // ( 532) X
+      f.add(new Character('\u0215')); // ( 533) X
+      f.add(new Character('\u0216')); // ( 534) X
+      f.add(new Character('\u0217')); // ( 535) X
+      f.add(new Character('\u0218')); // ( 536) X
+      f.add(new Character('\u0219')); // ( 537) X
+      f.add(new Character('\u021A')); // ( 538) X
+      f.add(new Character('\u021B')); // ( 539) X
+      f.add(new Character('\u021C')); // ( 540) X
+      f.add(new Character('\u021D')); // ( 541) X
+      f.add(new Character('\u021E')); // ( 542) X
+      f.add(new Character('\u021F')); // ( 543) X
+      f.add(new Character('\u0220')); // ( 544) X
+      f.add(new Character('\u0221')); // ( 545) X
+      f.add(new Character('\u0222')); // ( 546) X
+      f.add(new Character('\u0223')); // ( 547) X
+      f.add(new Character('\u0224')); // ( 548) X
+      f.add(new Character('\u0225')); // ( 549) X
+      f.add(new Character('\u0226')); // ( 550) X
+      f.add(new Character('\u0227')); // ( 551) X
+      f.add(new Character('\u0228')); // ( 552) X
+      f.add(new Character('\u0229')); // ( 553) X
+      f.add(new Character('\u022A')); // ( 554) X
+      f.add(new Character('\u022B')); // ( 555) X
+      f.add(new Character('\u022C')); // ( 556) X
+      f.add(new Character('\u022D')); // ( 557) X
+      f.add(new Character('\u022E')); // ( 558) X
+      f.add(new Character('\u022F')); // ( 559) X
+      f.add(new Character('\u0230')); // ( 560) X
+      f.add(new Character('\u0231')); // ( 561) X
+      f.add(new Character('\u0232')); // ( 562) X
+      f.add(new Character('\u0233')); // ( 563) X
+      f.add(new Character('\u0234')); // ( 564) X
+      f.add(new Character('\u0235')); // ( 565) X
+      f.add(new Character('\u0236')); // ( 566) X
+      f.add(new Character('\u0237')); // ( 567) X
+      f.add(new Character('\u0238')); // ( 568) X
+      f.add(new Character('\u0239')); // ( 569) X
+      f.add(new Character('\u023A')); // ( 570) X
+      f.add(new Character('\u023B')); // ( 571) X
+      f.add(new Character('\u023C')); // ( 572) X
+      f.add(new Character('\u023D')); // ( 573) X
+      f.add(new Character('\u023E')); // ( 574) X
+      f.add(new Character('\u023F')); // ( 575) X
+      f.add(new Character('\u0240')); // ( 576) X
+      f.add(new Character('\u0241')); // ( 577) X
+      f.add(new Character('\u0242')); // ( 578) X
+      f.add(new Character('\u0243')); // ( 579) X
+      f.add(new Character('\u0244')); // ( 580) X
+      f.add(new Character('\u0245')); // ( 581) X
+      f.add(new Character('\u0246')); // ( 582) X
+      f.add(new Character('\u0247')); // ( 583) X
+      f.add(new Character('\u0248')); // ( 584) X
+      f.add(new Character('\u0249')); // ( 585) X
+      f.add(new Character('\u024A')); // ( 586) X
+      f.add(new Character('\u024B')); // ( 587) X
+      f.add(new Character('\u024C')); // ( 588) X
+      f.add(new Character('\u024D')); // ( 589) X
+      f.add(new Character('\u024E')); // ( 590) X
+      f.add(new Character('\u024F')); // ( 591) X
+      f.add(new Character('\u0250')); // ( 592) X
+      f.add(new Character('\u0251')); // ( 593) X
+      f.add(new Character('\u0252')); // ( 594) X
+      f.add(new Character('\u0253')); // ( 595) X
+      f.add(new Character('\u0254')); // ( 596) X
+      f.add(new Character('\u0255')); // ( 597) X
+      f.add(new Character('\u0256')); // ( 598) X
+      f.add(new Character('\u0257')); // ( 599) X
+      f.add(new Character('\u0258')); // ( 600) X
+      f.add(new Character('\u0259')); // ( 601) X
+      f.add(new Character('\u025A')); // ( 602) X
+      f.add(new Character('\u025B')); // ( 603) X
+      f.add(new Character('\u025C')); // ( 604) X
+      f.add(new Character('\u025D')); // ( 605) X
+      f.add(new Character('\u025E')); // ( 606) X
+      f.add(new Character('\u025F')); // ( 607) X
+      f.add(new Character('\u0260')); // ( 608) X
+      f.add(new Character('\u0261')); // ( 609) X
+      f.add(new Character('\u0262')); // ( 610) X
+      f.add(new Character('\u0263')); // ( 611) X
+      f.add(new Character('\u0264')); // ( 612) X
+      f.add(new Character('\u0265')); // ( 613) X
+      f.add(new Character('\u0266')); // ( 614) X
+      f.add(new Character('\u0267')); // ( 615) X
+      f.add(new Character('\u0268')); // ( 616) X
+      f.add(new Character('\u0269')); // ( 617) X
+      f.add(new Character('\u026A')); // ( 618) X
+      f.add(new Character('\u026B')); // ( 619) X
+      f.add(new Character('\u026C')); // ( 620) X
+      f.add(new Character('\u026D')); // ( 621) X
+      f.add(new Character('\u026E')); // ( 622) X
+      f.add(new Character('\u026F')); // ( 623) X
+      f.add(new Character('\u0270')); // ( 624) X
+      f.add(new Character('\u0271')); // ( 625) X
+      f.add(new Character('\u0272')); // ( 626) X
+      f.add(new Character('\u0273')); // ( 627) X
+      f.add(new Character('\u0274')); // ( 628) X
+      f.add(new Character('\u0275')); // ( 629) X
+      f.add(new Character('\u0276')); // ( 630) X
+      f.add(new Character('\u0277')); // ( 631) X
+      f.add(new Character('\u0278')); // ( 632) X
+      f.add(new Character('\u0279')); // ( 633) X
+      f.add(new Character('\u027A')); // ( 634) X
+      f.add(new Character('\u027B')); // ( 635) X
+      f.add(new Character('\u027C')); // ( 636) X
+      f.add(new Character('\u027D')); // ( 637) X
+      f.add(new Character('\u027E')); // ( 638) X
+      f.add(new Character('\u027F')); // ( 639) X
+      f.add(new Character('\u0280')); // ( 640) X
+      f.add(new Character('\u0281')); // ( 641) X
+      f.add(new Character('\u0282')); // ( 642) X
+      f.add(new Character('\u0283')); // ( 643) X
+      f.add(new Character('\u0284')); // ( 644) X
+      f.add(new Character('\u0285')); // ( 645) X
+      f.add(new Character('\u0286')); // ( 646) X
+      f.add(new Character('\u0287')); // ( 647) X
+      f.add(new Character('\u0288')); // ( 648) X
+      f.add(new Character('\u0289')); // ( 649) X
+      f.add(new Character('\u028A')); // ( 650) X
+      f.add(new Character('\u028B')); // ( 651) X
+      f.add(new Character('\u028C')); // ( 652) X
+      f.add(new Character('\u028D')); // ( 653) X
+      f.add(new Character('\u028E')); // ( 654) X
+      f.add(new Character('\u028F')); // ( 655) X
+      f.add(new Character('\u0290')); // ( 656) X
+      f.add(new Character('\u0291')); // ( 657) X
+      f.add(new Character('\u0292')); // ( 658) X
+      f.add(new Character('\u0293')); // ( 659) X
+      f.add(new Character('\u0294')); // ( 660) X
+      f.add(new Character('\u0295')); // ( 661) X
+      f.add(new Character('\u0296')); // ( 662) X
+      f.add(new Character('\u0297')); // ( 663) X
+      f.add(new Character('\u0298')); // ( 664) X
+      f.add(new Character('\u0299')); // ( 665) X
+      f.add(new Character('\u029A')); // ( 666) X
+      f.add(new Character('\u029B')); // ( 667) X
+      f.add(new Character('\u029C')); // ( 668) X
+      f.add(new Character('\u029D')); // ( 669) X
+      f.add(new Character('\u029E')); // ( 670) X
+      f.add(new Character('\u029F')); // ( 671) X
+      f.add(new Character('\u02A0')); // ( 672) X
+      f.add(new Character('\u02A1')); // ( 673) X
+      f.add(new Character('\u02A2')); // ( 674) X
+      f.add(new Character('\u02A3')); // ( 675) X
+      f.add(new Character('\u02A4')); // ( 676) X
+      f.add(new Character('\u02A5')); // ( 677) X
+      f.add(new Character('\u02A6')); // ( 678) X
+      f.add(new Character('\u02A7')); // ( 679) X
+      f.add(new Character('\u02A8')); // ( 680) X
+      f.add(new Character('\u02A9')); // ( 681) X
+      f.add(new Character('\u02AA')); // ( 682) X
+      f.add(new Character('\u02AB')); // ( 683) X
+      f.add(new Character('\u02AC')); // ( 684) X
+      f.add(new Character('\u02AD')); // ( 685) X
+      f.add(new Character('\u02AE')); // ( 686) X
+      f.add(new Character('\u02AF')); // ( 687) X
+      f.add(new Character('\u02B0')); // ( 688) X
+      f.add(new Character('\u02B1')); // ( 689) X
+      f.add(new Character('\u02B2')); // ( 690) X
+      f.add(new Character('\u02B3')); // ( 691) X
+      f.add(new Character('\u02B4')); // ( 692) X
+      f.add(new Character('\u02B5')); // ( 693) X
+      f.add(new Character('\u02B6')); // ( 694) X
+      f.add(new Character('\u02B7')); // ( 695) X
+      f.add(new Character('\u02B8')); // ( 696) X
+      f.add(new Character('\u02B9')); // ( 697) X
+      f.add(new Character('\u02BA')); // ( 698) X
+      f.add(new Character('\u02BB')); // ( 699) X
+      f.add(new Character('\u02BC')); // ( 700) X
+      f.add(new Character('\u02BD')); // ( 701) X
+      f.add(new Character('\u02BE')); // ( 702) X
+      f.add(new Character('\u02BF')); // ( 703) X
+      f.add(new Character('\u02C0')); // ( 704) X
+      f.add(new Character('\u02C1')); // ( 705) X
+      f.add(new Character('\u02C2')); // ( 706) X
+      f.add(new Character('\u02C3')); // ( 707) X
+      f.add(new Character('\u02C4')); // ( 708) X
+      f.add(new Character('\u02C5')); // ( 709) X
+      f.add(new Character('\u02C6')); // ( 710) X
+      f.add(new Character('\u02C7')); // ( 711) X
+      f.add(new Character('\u02C8')); // ( 712) X
+      f.add(new Character('\u02C9')); // ( 713) X
+      f.add(new Character('\u02CA')); // ( 714) X
+      f.add(new Character('\u02CB')); // ( 715) X
+      f.add(new Character('\u02CC')); // ( 716) X
+      f.add(new Character('\u02CD')); // ( 717) X
+      f.add(new Character('\u02CE')); // ( 718) X
+      f.add(new Character('\u02CF')); // ( 719) X
+      f.add(new Character('\u02D0')); // ( 720) X
+      f.add(new Character('\u02D1')); // ( 721) X
+      f.add(new Character('\u02D2')); // ( 722) X
+      f.add(new Character('\u02D3')); // ( 723) X
+      f.add(new Character('\u02D4')); // ( 724) X
+      f.add(new Character('\u02D5')); // ( 725) X
+      f.add(new Character('\u02D6')); // ( 726) X
+      f.add(new Character('\u02D7')); // ( 727) X
+      f.add(new Character('\u02D8')); // ( 728) X
+      f.add(new Character('\u02D9')); // ( 729) X
+      f.add(new Character('\u02DA')); // ( 730) X
+      f.add(new Character('\u02DB')); // ( 731) X
+      f.add(new Character('\u02DC')); // ( 732) X
+      f.add(new Character('\u02DD')); // ( 733) X
+      f.add(new Character('\u02DE')); // ( 734) X
+      f.add(new Character('\u02DF')); // ( 735) X
+      f.add(new Character('\u02E0')); // ( 736) X
+      f.add(new Character('\u02E1')); // ( 737) X
+      f.add(new Character('\u02E2')); // ( 738) X
+      f.add(new Character('\u02E3')); // ( 739) X
+      f.add(new Character('\u02E4')); // ( 740) X
+      f.add(new Character('\u02E5')); // ( 741) X
+      f.add(new Character('\u02E6')); // ( 742) X
+      f.add(new Character('\u02E7')); // ( 743) X
+      f.add(new Character('\u02E8')); // ( 744) X
+      f.add(new Character('\u02E9')); // ( 745) X
+      f.add(new Character('\u02EA')); // ( 746) X
+      f.add(new Character('\u02EB')); // ( 747) X
+      f.add(new Character('\u02EC')); // ( 748) X
+      f.add(new Character('\u02ED')); // ( 749) X
+      f.add(new Character('\u02EE')); // ( 750) X
+      f.add(new Character('\u02EF')); // ( 751) X
+      f.add(new Character('\u02F0')); // ( 752) X
+      f.add(new Character('\u02F1')); // ( 753) X
+      f.add(new Character('\u02F2')); // ( 754) X
+      f.add(new Character('\u02F3')); // ( 755) X
+      f.add(new Character('\u02F4')); // ( 756) X
+      f.add(new Character('\u02F5')); // ( 757) X
+      f.add(new Character('\u02F6')); // ( 758) X
+      f.add(new Character('\u02F7')); // ( 759) X
+      f.add(new Character('\u02F8')); // ( 760) X
+      f.add(new Character('\u02F9')); // ( 761) X
+      f.add(new Character('\u02FA')); // ( 762) X
+      f.add(new Character('\u02FB')); // ( 763) X
+      f.add(new Character('\u02FC')); // ( 764) X
+      f.add(new Character('\u02FD')); // ( 765) X
+      f.add(new Character('\u02FE')); // ( 766) X
+      f.add(new Character('\u02FF')); // ( 767) X
+      f.add(new Character('\u0300')); // ( 768) X
+      f.add(new Character('\u0301')); // ( 769) X
+      f.add(new Character('\u0302')); // ( 770) X
+      f.add(new Character('\u0303')); // ( 771) X
+      f.add(new Character('\u0304')); // ( 772) X
+      f.add(new Character('\u0305')); // ( 773) X
+      f.add(new Character('\u0306')); // ( 774) X
+      f.add(new Character('\u0307')); // ( 775) X
+      f.add(new Character('\u0308')); // ( 776) X
+      f.add(new Character('\u0309')); // ( 777) X
+      f.add(new Character('\u030A')); // ( 778) X
+      f.add(new Character('\u030B')); // ( 779) X
+      f.add(new Character('\u030C')); // ( 780) X
+      f.add(new Character('\u030D')); // ( 781) X
+      f.add(new Character('\u030E')); // ( 782) X
+      f.add(new Character('\u030F')); // ( 783) X
+      f.add(new Character('\u0310')); // ( 784) X
+      f.add(new Character('\u0311')); // ( 785) X
+      f.add(new Character('\u0312')); // ( 786) X
+      f.add(new Character('\u0313')); // ( 787) X
+      f.add(new Character('\u0314')); // ( 788) X
+      f.add(new Character('\u0315')); // ( 789) X
+      f.add(new Character('\u0316')); // ( 790) X
+      f.add(new Character('\u0317')); // ( 791) X
+      f.add(new Character('\u0318')); // ( 792) X
+      f.add(new Character('\u0319')); // ( 793) X
+      f.add(new Character('\u031A')); // ( 794) X
+      f.add(new Character('\u031B')); // ( 795) X
+      f.add(new Character('\u031C')); // ( 796) X
+      f.add(new Character('\u031D')); // ( 797) X
+      f.add(new Character('\u031E')); // ( 798) X
+      f.add(new Character('\u031F')); // ( 799) X
+      f.add(new Character('\u0320')); // ( 800) X
+      f.add(new Character('\u0321')); // ( 801) X
+      f.add(new Character('\u0322')); // ( 802) X
+      f.add(new Character('\u0323')); // ( 803) X
+      f.add(new Character('\u0324')); // ( 804) X
+      f.add(new Character('\u0325')); // ( 805) X
+      f.add(new Character('\u0326')); // ( 806) X
+      f.add(new Character('\u0327')); // ( 807) X
+      f.add(new Character('\u0328')); // ( 808) X
+      f.add(new Character('\u0329')); // ( 809) X
+      f.add(new Character('\u032A')); // ( 810) X
+      f.add(new Character('\u032B')); // ( 811) X
+      f.add(new Character('\u032C')); // ( 812) X
+      f.add(new Character('\u032D')); // ( 813) X
+      f.add(new Character('\u032E')); // ( 814) X
+      f.add(new Character('\u032F')); // ( 815) X
+      f.add(new Character('\u0330')); // ( 816) X
+      f.add(new Character('\u0331')); // ( 817) X
+      f.add(new Character('\u0332')); // ( 818) X
+      f.add(new Character('\u0333')); // ( 819) X
+      f.add(new Character('\u0334')); // ( 820) X
+      f.add(new Character('\u0335')); // ( 821) X
+      f.add(new Character('\u0336')); // ( 822) X
+      f.add(new Character('\u0337')); // ( 823) X
+      f.add(new Character('\u0338')); // ( 824) X
+      f.add(new Character('\u0339')); // ( 825) X
+      f.add(new Character('\u033A')); // ( 826) X
+      f.add(new Character('\u033B')); // ( 827) X
+      f.add(new Character('\u033C')); // ( 828) X
+      f.add(new Character('\u033D')); // ( 829) X
+      f.add(new Character('\u033E')); // ( 830) X
+      f.add(new Character('\u033F')); // ( 831) X
+      f.add(new Character('\u0340')); // ( 832) X
+      f.add(new Character('\u0341')); // ( 833) X
+      f.add(new Character('\u0342')); // ( 834) X
+      f.add(new Character('\u0343')); // ( 835) X
+      f.add(new Character('\u0344')); // ( 836) X
+      f.add(new Character('\u0345')); // ( 837) X
+      f.add(new Character('\u0346')); // ( 838) X
+      f.add(new Character('\u0347')); // ( 839) X
+      f.add(new Character('\u0348')); // ( 840) X
+      f.add(new Character('\u0349')); // ( 841) X
+      f.add(new Character('\u034A')); // ( 842) X
+      f.add(new Character('\u034B')); // ( 843) X
+      f.add(new Character('\u034C')); // ( 844) X
+      f.add(new Character('\u034D')); // ( 845) X
+      f.add(new Character('\u034E')); // ( 846) X
+      f.add(new Character('\u034F')); // ( 847) X
+      f.add(new Character('\u0350')); // ( 848) X
+      f.add(new Character('\u0351')); // ( 849) X
+      f.add(new Character('\u0352')); // ( 850) X
+      f.add(new Character('\u0353')); // ( 851) X
+      f.add(new Character('\u0354')); // ( 852) X
+      f.add(new Character('\u0355')); // ( 853) X
+      f.add(new Character('\u0356')); // ( 854) X
+      f.add(new Character('\u0357')); // ( 855) X
+      f.add(new Character('\u0358')); // ( 856) X
+      f.add(new Character('\u0359')); // ( 857) X
+      f.add(new Character('\u035A')); // ( 858) X
+      f.add(new Character('\u035B')); // ( 859) X
+      f.add(new Character('\u035C')); // ( 860) X
+      f.add(new Character('\u035D')); // ( 861) X
+      f.add(new Character('\u035E')); // ( 862) X
+      f.add(new Character('\u035F')); // ( 863) X
+      f.add(new Character('\u0360')); // ( 864) X
+      f.add(new Character('\u0361')); // ( 865) X
+      f.add(new Character('\u0362')); // ( 866) X
+      f.add(new Character('\u0363')); // ( 867) X
+      f.add(new Character('\u0364')); // ( 868) X
+      f.add(new Character('\u0365')); // ( 869) X
+      f.add(new Character('\u0366')); // ( 870) X
+      f.add(new Character('\u0367')); // ( 871) X
+      f.add(new Character('\u0368')); // ( 872) X
+      f.add(new Character('\u0369')); // ( 873) X
+      f.add(new Character('\u036A')); // ( 874) X
+      f.add(new Character('\u036B')); // ( 875) X
+      f.add(new Character('\u036C')); // ( 876) X
+      f.add(new Character('\u036D')); // ( 877) X
+      f.add(new Character('\u036E')); // ( 878) X
+      f.add(new Character('\u036F')); // ( 879) X
+      f.add(new Character('\u0370')); // ( 880) X
+      f.add(new Character('\u0371')); // ( 881) X
+      f.add(new Character('\u0372')); // ( 882) X
+      f.add(new Character('\u0373')); // ( 883) X
+      f.add(new Character('\u0374')); // ( 884) X
+      f.add(new Character('\u0375')); // ( 885) X
+      f.add(new Character('\u0376')); // ( 886) X
+      f.add(new Character('\u0377')); // ( 887) X
+      f.add(new Character('\u0378')); // ( 888) X
+      f.add(new Character('\u0379')); // ( 889) X
+      f.add(new Character('\u037A')); // ( 890) X
+      f.add(new Character('\u037B')); // ( 891) X
+      f.add(new Character('\u037C')); // ( 892) X
+      f.add(new Character('\u037D')); // ( 893) X
+      f.add(new Character('\u037E')); // ( 894) X
+      f.add(new Character('\u037F')); // ( 895) X
+      f.add(new Character('\u0380')); // ( 896) X
+      f.add(new Character('\u0381')); // ( 897) X
+      f.add(new Character('\u0382')); // ( 898) X
+      f.add(new Character('\u0383')); // ( 899) X
+      f.add(new Character('\u0384')); // ( 900) X
+      f.add(new Character('\u0385')); // ( 901) X
+      f.add(new Character('\u0386')); // ( 902) X
+      f.add(new Character('\u0387')); // ( 903) X
+      f.add(new Character('\u0388')); // ( 904) X
+      f.add(new Character('\u0389')); // ( 905) X
+      f.add(new Character('\u038A')); // ( 906) X
+      f.add(new Character('\u038B')); // ( 907) X
+      f.add(new Character('\u038C')); // ( 908) X
+      f.add(new Character('\u038D')); // ( 909) X
+      f.add(new Character('\u038E')); // ( 910) X
+      f.add(new Character('\u038F')); // ( 911) X
+      f.add(new Character('\u0390')); // ( 912) X
+      f.add(new Character('\u0391')); // ( 913) X
+      f.add(new Character('\u0392')); // ( 914) X
+      f.add(new Character('\u0393')); // ( 915) X
+      f.add(new Character('\u0394')); // ( 916) X
+      f.add(new Character('\u0395')); // ( 917) X
+      f.add(new Character('\u0396')); // ( 918) X
+      f.add(new Character('\u0397')); // ( 919) X
+      f.add(new Character('\u0398')); // ( 920) X
+      f.add(new Character('\u0399')); // ( 921) X
+      f.add(new Character('\u039A')); // ( 922) X
+      f.add(new Character('\u039B')); // ( 923) X
+      f.add(new Character('\u039C')); // ( 924) X
+      f.add(new Character('\u039D')); // ( 925) X
+      f.add(new Character('\u039E')); // ( 926) X
+      f.add(new Character('\u039F')); // ( 927) X
+      f.add(new Character('\u03A0')); // ( 928) X
+      f.add(new Character('\u03A1')); // ( 929) X
+      f.add(new Character('\u03A2')); // ( 930) X
+      f.add(new Character('\u03A3')); // ( 931) X
+      f.add(new Character('\u03A4')); // ( 932) X
+      f.add(new Character('\u03A5')); // ( 933) X
+      f.add(new Character('\u03A6')); // ( 934) X
+      f.add(new Character('\u03A7')); // ( 935) X
+      f.add(new Character('\u03A8')); // ( 936) X
+      f.add(new Character('\u03A9')); // ( 937) X
+      f.add(new Character('\u03AA')); // ( 938) X
+      f.add(new Character('\u03AB')); // ( 939) X
+      f.add(new Character('\u03AC')); // ( 940) X
+      f.add(new Character('\u03AD')); // ( 941) X
+      f.add(new Character('\u03AE')); // ( 942) X
+      f.add(new Character('\u03AF')); // ( 943) X
+      f.add(new Character('\u03B0')); // ( 944) X
+      f.add(new Character('\u03B1')); // ( 945) X
+      f.add(new Character('\u03B2')); // ( 946) X
+      f.add(new Character('\u03B3')); // ( 947) X
+      f.add(new Character('\u03B4')); // ( 948) X
+      f.add(new Character('\u03B5')); // ( 949) X
+      f.add(new Character('\u03B6')); // ( 950) X
+      f.add(new Character('\u03B7')); // ( 951) X
+      f.add(new Character('\u03B8')); // ( 952) X
+      f.add(new Character('\u03B9')); // ( 953) X
+      f.add(new Character('\u03BA')); // ( 954) X
+      f.add(new Character('\u03BB')); // ( 955) X
+      f.add(new Character('\u03BC')); // ( 956) X
+      f.add(new Character('\u03BD')); // ( 957) X
+      f.add(new Character('\u03BE')); // ( 958) X
+      f.add(new Character('\u03BF')); // ( 959) X
+      f.add(new Character('\u03C0')); // ( 960) X
+      f.add(new Character('\u03C1')); // ( 961) X
+      f.add(new Character('\u03C2')); // ( 962) X
+      f.add(new Character('\u03C3')); // ( 963) X
+      f.add(new Character('\u03C4')); // ( 964) X
+      f.add(new Character('\u03C5')); // ( 965) X
+      f.add(new Character('\u03C6')); // ( 966) X
+      f.add(new Character('\u03C7')); // ( 967) X
+      f.add(new Character('\u03C8')); // ( 968) X
+      f.add(new Character('\u03C9')); // ( 969) X
+      f.add(new Character('\u03CA')); // ( 970) X
+      f.add(new Character('\u03CB')); // ( 971) X
+      f.add(new Character('\u03CC')); // ( 972) X
+      f.add(new Character('\u03CD')); // ( 973) X
+      f.add(new Character('\u03CE')); // ( 974) X
+      f.add(new Character('\u03CF')); // ( 975) X
+      f.add(new Character('\u03D0')); // ( 976) X
+      f.add(new Character('\u03D1')); // ( 977) X
+      f.add(new Character('\u03D2')); // ( 978) X
+      f.add(new Character('\u03D3')); // ( 979) X
+      f.add(new Character('\u03D4')); // ( 980) X
+      f.add(new Character('\u03D5')); // ( 981) X
+      f.add(new Character('\u03D6')); // ( 982) X
+      f.add(new Character('\u03D7')); // ( 983) X
+      f.add(new Character('\u03D8')); // ( 984) X
+      f.add(new Character('\u03D9')); // ( 985) X
+      f.add(new Character('\u03DA')); // ( 986) X
+      f.add(new Character('\u03DB')); // ( 987) X
+      f.add(new Character('\u03DC')); // ( 988) X
+      f.add(new Character('\u03DD')); // ( 989) X
+      f.add(new Character('\u03DE')); // ( 990) X
+      f.add(new Character('\u03DF')); // ( 991) X
+      f.add(new Character('\u03E0')); // ( 992) X
+      f.add(new Character('\u03E1')); // ( 993) X
+      f.add(new Character('\u03E2')); // ( 994) X
+      f.add(new Character('\u03E3')); // ( 995) X
+      f.add(new Character('\u03E4')); // ( 996) X
+      f.add(new Character('\u03E5')); // ( 997) X
+      f.add(new Character('\u03E6')); // ( 998) X
+      f.add(new Character('\u03E7')); // ( 999) X
+      f.add(new Character('\u03E8')); // (1000) X
+      f.add(new Character('\u03E9')); // (1001) X
+      f.add(new Character('\u03EA')); // (1002) X
+      f.add(new Character('\u03EB')); // (1003) X
+      f.add(new Character('\u03EC')); // (1004) X
+      f.add(new Character('\u03ED')); // (1005) X
+      f.add(new Character('\u03EE')); // (1006) X
+      f.add(new Character('\u03EF')); // (1007) X
+      f.add(new Character('\u03F0')); // (1008) X
+      f.add(new Character('\u03F1')); // (1009) X
+      f.add(new Character('\u03F2')); // (1010) X
+      f.add(new Character('\u03F3')); // (1011) X
+      f.add(new Character('\u03F4')); // (1012) X
+      f.add(new Character('\u03F5')); // (1013) X
+      f.add(new Character('\u03F6')); // (1014) X
+      f.add(new Character('\u03F7')); // (1015) X
+      f.add(new Character('\u03F8')); // (1016) X
+      f.add(new Character('\u03F9')); // (1017) X
+      f.add(new Character('\u03FA')); // (1018) X
+      f.add(new Character('\u03FB')); // (1019) X
+      f.add(new Character('\u03FC')); // (1020) X
+      f.add(new Character('\u03FD')); // (1021) X
+      f.add(new Character('\u03FE')); // (1022) X
+      f.add(new Character('\u03FF')); // (1023) X
+      f.add(new Character('\u0400')); // (1024) X
+      f.add(new Character('\u0401')); // (1025) X
+      f.add(new Character('\u0402')); // (1026) X
+      f.add(new Character('\u0403')); // (1027) X
+      f.add(new Character('\u0404')); // (1028) X
+      f.add(new Character('\u0405')); // (1029) X
+      f.add(new Character('\u0406')); // (1030) X
+      f.add(new Character('\u0407')); // (1031) X
+      f.add(new Character('\u0408')); // (1032) X
+      f.add(new Character('\u0409')); // (1033) X
+      f.add(new Character('\u040A')); // (1034) X
+      f.add(new Character('\u040B')); // (1035) X
+      f.add(new Character('\u040C')); // (1036) X
+      f.add(new Character('\u040D')); // (1037) X
+      f.add(new Character('\u040E')); // (1038) X
+      f.add(new Character('\u040F')); // (1039) X
+      f.add(new Character('\u0410')); // (1040) X
+      f.add(new Character('\u0411')); // (1041) X
+      f.add(new Character('\u0412')); // (1042) X
+      f.add(new Character('\u0413')); // (1043) X
+      f.add(new Character('\u0414')); // (1044) X
+      f.add(new Character('\u0415')); // (1045) X
+      f.add(new Character('\u0416')); // (1046) X
+      f.add(new Character('\u0417')); // (1047) X
+      f.add(new Character('\u0418')); // (1048) X
+      f.add(new Character('\u0419')); // (1049) X
+      f.add(new Character('\u041A')); // (1050) X
+      f.add(new Character('\u041B')); // (1051) X
+      f.add(new Character('\u041C')); // (1052) X
+      f.add(new Character('\u041D')); // (1053) X
+      f.add(new Character('\u041E')); // (1054) X
+      f.add(new Character('\u041F')); // (1055) X
+      f.add(new Character('\u0420')); // (1056) X
+      f.add(new Character('\u0421')); // (1057) X
+      f.add(new Character('\u0422')); // (1058) X
+      f.add(new Character('\u0423')); // (1059) X
+      f.add(new Character('\u0424')); // (1060) X
+      f.add(new Character('\u0425')); // (1061) X
+      f.add(new Character('\u0426')); // (1062) X
+      f.add(new Character('\u0427')); // (1063) X
+      f.add(new Character('\u0428')); // (1064) X
+      f.add(new Character('\u0429')); // (1065) X
+      f.add(new Character('\u042A')); // (1066) X
+      f.add(new Character('\u042B')); // (1067) X
+      f.add(new Character('\u042C')); // (1068) X
+      f.add(new Character('\u042D')); // (1069) X
+      f.add(new Character('\u042E')); // (1070) X
+      f.add(new Character('\u042F')); // (1071) X
+      f.add(new Character('\u0430')); // (1072) X
+      f.add(new Character('\u0431')); // (1073) X
+      f.add(new Character('\u0432')); // (1074) X
+      f.add(new Character('\u0433')); // (1075) X
+      f.add(new Character('\u0434')); // (1076) X
+      f.add(new Character('\u0435')); // (1077) X
+      f.add(new Character('\u0436')); // (1078) X
+      f.add(new Character('\u0437')); // (1079) X
+      f.add(new Character('\u0438')); // (1080) X
+      f.add(new Character('\u0439')); // (1081) X
+      f.add(new Character('\u043A')); // (1082) X
+      f.add(new Character('\u043B')); // (1083) X
+      f.add(new Character('\u043C')); // (1084) X
+      f.add(new Character('\u043D')); // (1085) X
+      f.add(new Character('\u043E')); // (1086) X
+      f.add(new Character('\u043F')); // (1087) X
+      f.add(new Character('\u0440')); // (1088) X
+      f.add(new Character('\u0441')); // (1089) X
+      f.add(new Character('\u0442')); // (1090) X
+      f.add(new Character('\u0443')); // (1091) X
+      f.add(new Character('\u0444')); // (1092) X
+      f.add(new Character('\u0445')); // (1093) X
+      f.add(new Character('\u0446')); // (1094) X
+      f.add(new Character('\u0447')); // (1095) X
+      f.add(new Character('\u0448')); // (1096) X
+      f.add(new Character('\u0449')); // (1097) X
+      f.add(new Character('\u044A')); // (1098) X
+      f.add(new Character('\u044B')); // (1099) X
+      f.add(new Character('\u044C')); // (1100) X
+      f.add(new Character('\u044D')); // (1101) X
+      f.add(new Character('\u044E')); // (1102) X
+      f.add(new Character('\u044F')); // (1103) X
+      f.add(new Character('\u0450')); // (1104) X
+      f.add(new Character('\u0451')); // (1105) X
+      f.add(new Character('\u0452')); // (1106) X
+      f.add(new Character('\u0453')); // (1107) X
+      f.add(new Character('\u0454')); // (1108) X
+      f.add(new Character('\u0455')); // (1109) X
+      f.add(new Character('\u0456')); // (1110) X
+      f.add(new Character('\u0457')); // (1111) X
+      f.add(new Character('\u0458')); // (1112) X
+      f.add(new Character('\u0459')); // (1113) X
+      f.add(new Character('\u045A')); // (1114) X
+      f.add(new Character('\u045B')); // (1115) X
+      f.add(new Character('\u045C')); // (1116) X
+      f.add(new Character('\u045D')); // (1117) X
+      f.add(new Character('\u045E')); // (1118) X
+      f.add(new Character('\u045F')); // (1119) X
+      f.add(new Character('\u0460')); // (1120) X
+      f.add(new Character('\u0461')); // (1121) X
+      f.add(new Character('\u0462')); // (1122) X
+      f.add(new Character('\u0463')); // (1123) X
+      f.add(new Character('\u0464')); // (1124) X
+      f.add(new Character('\u0465')); // (1125) X
+      f.add(new Character('\u0466')); // (1126) X
+      f.add(new Character('\u0467')); // (1127) X
+      f.add(new Character('\u0468')); // (1128) X
+      f.add(new Character('\u0469')); // (1129) X
+      f.add(new Character('\u046A')); // (1130) X
+      f.add(new Character('\u046B')); // (1131) X
+      f.add(new Character('\u046C')); // (1132) X
+      f.add(new Character('\u046D')); // (1133) X
+      f.add(new Character('\u046E')); // (1134) X
+      f.add(new Character('\u046F')); // (1135) X
+      f.add(new Character('\u0470')); // (1136) X
+      f.add(new Character('\u0471')); // (1137) X
+      f.add(new Character('\u0472')); // (1138) X
+      f.add(new Character('\u0473')); // (1139) X
+      f.add(new Character('\u0474')); // (1140) X
+      f.add(new Character('\u0475')); // (1141) X
+      f.add(new Character('\u0476')); // (1142) X
+      f.add(new Character('\u0477')); // (1143) X
+      f.add(new Character('\u0478')); // (1144) X
+      f.add(new Character('\u0479')); // (1145) X
+      f.add(new Character('\u047A')); // (1146) X
+      f.add(new Character('\u047B')); // (1147) X
+      f.add(new Character('\u047C')); // (1148) X
+      f.add(new Character('\u047D')); // (1149) X
+      f.add(new Character('\u047E')); // (1150) X
+      f.add(new Character('\u047F')); // (1151) X
+      f.add(new Character('\u0480')); // (1152) X
+      f.add(new Character('\u0481')); // (1153) X
+      f.add(new Character('\u0482')); // (1154) X
+      f.add(new Character('\u0483')); // (1155) X
+      f.add(new Character('\u0484')); // (1156) X
+      f.add(new Character('\u0485')); // (1157) X
+      f.add(new Character('\u0486')); // (1158) X
+      f.add(new Character('\u0487')); // (1159) X
+      f.add(new Character('\u0488')); // (1160) X
+      f.add(new Character('\u0489')); // (1161) X
+      f.add(new Character('\u048A')); // (1162) X
+      f.add(new Character('\u048B')); // (1163) X
+      f.add(new Character('\u048C')); // (1164) X
+      f.add(new Character('\u048D')); // (1165) X
+      f.add(new Character('\u048E')); // (1166) X
+      f.add(new Character('\u048F')); // (1167) X
+      f.add(new Character('\u0490')); // (1168) X
+      f.add(new Character('\u0491')); // (1169) X
+      f.add(new Character('\u0492')); // (1170) X
+      f.add(new Character('\u0493')); // (1171) X
+      f.add(new Character('\u0494')); // (1172) X
+      f.add(new Character('\u0495')); // (1173) X
+      f.add(new Character('\u0496')); // (1174) X
+      f.add(new Character('\u0497')); // (1175) X
+      f.add(new Character('\u0498')); // (1176) X
+      f.add(new Character('\u0499')); // (1177) X
+      f.add(new Character('\u049A')); // (1178) X
+      f.add(new Character('\u049B')); // (1179) X
+      f.add(new Character('\u049C')); // (1180) X
+      f.add(new Character('\u049D')); // (1181) X
+      f.add(new Character('\u049E')); // (1182) X
+      f.add(new Character('\u049F')); // (1183) X
+      f.add(new Character('\u04A0')); // (1184) X
+      f.add(new Character('\u04A1')); // (1185) X
+      f.add(new Character('\u04A2')); // (1186) X
+      f.add(new Character('\u04A3')); // (1187) X
+      f.add(new Character('\u04A4')); // (1188) X
+      f.add(new Character('\u04A5')); // (1189) X
+      f.add(new Character('\u04A6')); // (1190) X
+      f.add(new Character('\u04A7')); // (1191) X
+      f.add(new Character('\u04A8')); // (1192) X
+      f.add(new Character('\u04A9')); // (1193) X
+      f.add(new Character('\u04AA')); // (1194) X
+      f.add(new Character('\u04AB')); // (1195) X
+      f.add(new Character('\u04AC')); // (1196) X
+      f.add(new Character('\u04AD')); // (1197) X
+      f.add(new Character('\u04AE')); // (1198) X
+      f.add(new Character('\u04AF')); // (1199) X
+      f.add(new Character('\u04B0')); // (1200) X
+      f.add(new Character('\u04B1')); // (1201) X
+      f.add(new Character('\u04B2')); // (1202) X
+      f.add(new Character('\u04B3')); // (1203) X
+      f.add(new Character('\u04B4')); // (1204) X
+      f.add(new Character('\u04B5')); // (1205) X
+      f.add(new Character('\u04B6')); // (1206) X
+      f.add(new Character('\u04B7')); // (1207) X
+      f.add(new Character('\u04B8')); // (1208) X
+      f.add(new Character('\u04B9')); // (1209) X
+      f.add(new Character('\u04BA')); // (1210) X
+      f.add(new Character('\u04BB')); // (1211) X
+      f.add(new Character('\u04BC')); // (1212) X
+      f.add(new Character('\u04BD')); // (1213) X
+      f.add(new Character('\u04BE')); // (1214) X
+      f.add(new Character('\u04BF')); // (1215) X
+      f.add(new Character('\u04C0')); // (1216) X
+      f.add(new Character('\u04C1')); // (1217) X
+      f.add(new Character('\u04C2')); // (1218) X
+      f.add(new Character('\u04C3')); // (1219) X
+      f.add(new Character('\u04C4')); // (1220) X
+      f.add(new Character('\u04C5')); // (1221) X
+      f.add(new Character('\u04C6')); // (1222) X
+      f.add(new Character('\u04C7')); // (1223) X
+      f.add(new Character('\u04C8')); // (1224) X
+      f.add(new Character('\u04C9')); // (1225) X
+      f.add(new Character('\u04CA')); // (1226) X
+      f.add(new Character('\u04CB')); // (1227) X
+      f.add(new Character('\u04CC')); // (1228) X
+      f.add(new Character('\u04CD')); // (1229) X
+      f.add(new Character('\u04CE')); // (1230) X
+      f.add(new Character('\u04CF')); // (1231) X
+      f.add(new Character('\u04D0')); // (1232) X
+      f.add(new Character('\u04D1')); // (1233) X
+      f.add(new Character('\u04D2')); // (1234) X
+      f.add(new Character('\u04D3')); // (1235) X
+      f.add(new Character('\u04D4')); // (1236) X
+      f.add(new Character('\u04D5')); // (1237) X
+      f.add(new Character('\u04D6')); // (1238) X
+      f.add(new Character('\u04D7')); // (1239) X
+      f.add(new Character('\u04D8')); // (1240) X
+      f.add(new Character('\u04D9')); // (1241) X
+      f.add(new Character('\u04DA')); // (1242) X
+      f.add(new Character('\u04DB')); // (1243) X
+      f.add(new Character('\u04DC')); // (1244) X
+      f.add(new Character('\u04DD')); // (1245) X
+      f.add(new Character('\u04DE')); // (1246) X
+      f.add(new Character('\u04DF')); // (1247) X
+      f.add(new Character('\u04E0')); // (1248) X
+      f.add(new Character('\u04E1')); // (1249) X
+      f.add(new Character('\u04E2')); // (1250) X
+      f.add(new Character('\u04E3')); // (1251) X
+      f.add(new Character('\u04E4')); // (1252) X
+      f.add(new Character('\u04E5')); // (1253) X
+      f.add(new Character('\u04E6')); // (1254) X
+      f.add(new Character('\u04E7')); // (1255) X
+      f.add(new Character('\u04E8')); // (1256) X
+      f.add(new Character('\u04E9')); // (1257) X
+      f.add(new Character('\u04EA')); // (1258) X
+      f.add(new Character('\u04EB')); // (1259) X
+      f.add(new Character('\u04EC')); // (1260) X
+      f.add(new Character('\u04ED')); // (1261) X
+      f.add(new Character('\u04EE')); // (1262) X
+      f.add(new Character('\u04EF')); // (1263) X
+      f.add(new Character('\u04F0')); // (1264) X
+      f.add(new Character('\u04F1')); // (1265) X
+      f.add(new Character('\u04F2')); // (1266) X
+      f.add(new Character('\u04F3')); // (1267) X
+      f.add(new Character('\u04F4')); // (1268) X
+      f.add(new Character('\u04F5')); // (1269) X
+      f.add(new Character('\u04F6')); // (1270) X
+      f.add(new Character('\u04F7')); // (1271) X
+      f.add(new Character('\u04F8')); // (1272) X
+      f.add(new Character('\u04F9')); // (1273) X
+      f.add(new Character('\u04FA')); // (1274) X
+      f.add(new Character('\u04FB')); // (1275) X
+      f.add(new Character('\u04FC')); // (1276) X
+      f.add(new Character('\u04FD')); // (1277) X
+      f.add(new Character('\u04FE')); // (1278) X
+      f.add(new Character('\u04FF')); // (1279) X
+      f.add(new Character('\u0500')); // (1280) X
+      f.add(new Character('\u0501')); // (1281) X
+      f.add(new Character('\u0502')); // (1282) X
+      f.add(new Character('\u0503')); // (1283) X
+      f.add(new Character('\u0504')); // (1284) X
+      f.add(new Character('\u0505')); // (1285) X
+      f.add(new Character('\u0506')); // (1286) X
+      f.add(new Character('\u0507')); // (1287) X
+      f.add(new Character('\u0508')); // (1288) X
+      f.add(new Character('\u0509')); // (1289) X
+      f.add(new Character('\u050A')); // (1290) X
+      f.add(new Character('\u050B')); // (1291) X
+      f.add(new Character('\u050C')); // (1292) X
+      f.add(new Character('\u050D')); // (1293) X
+      f.add(new Character('\u050E')); // (1294) X
+      f.add(new Character('\u050F')); // (1295) X
+      f.add(new Character('\u0510')); // (1296) X
+      f.add(new Character('\u0511')); // (1297) X
+      f.add(new Character('\u0512')); // (1298) X
+      f.add(new Character('\u0513')); // (1299) X
+      f.add(new Character('\u0514')); // (1300) X
+      f.add(new Character('\u0515')); // (1301) X
+      f.add(new Character('\u0516')); // (1302) X
+      f.add(new Character('\u0517')); // (1303) X
+      f.add(new Character('\u0518')); // (1304) X
+      f.add(new Character('\u0519')); // (1305) X
+      f.add(new Character('\u051A')); // (1306) X
+      f.add(new Character('\u051B')); // (1307) X
+      f.add(new Character('\u051C')); // (1308) X
+      f.add(new Character('\u051D')); // (1309) X
+      f.add(new Character('\u051E')); // (1310) X
+      f.add(new Character('\u051F')); // (1311) X
+      f.add(new Character('\u0520')); // (1312) X
+      f.add(new Character('\u0521')); // (1313) X
+      f.add(new Character('\u0522')); // (1314) X
+      f.add(new Character('\u0523')); // (1315) X
+      f.add(new Character('\u0524')); // (1316) X
+      f.add(new Character('\u0525')); // (1317) X
+      f.add(new Character('\u0526')); // (1318) X
+      f.add(new Character('\u0527')); // (1319) X
+      f.add(new Character('\u0528')); // (1320) X
+      f.add(new Character('\u0529')); // (1321) X
+      f.add(new Character('\u052A')); // (1322) X
+      f.add(new Character('\u052B')); // (1323) X
+      f.add(new Character('\u052C')); // (1324) X
+      f.add(new Character('\u052D')); // (1325) X
+      f.add(new Character('\u052E')); // (1326) X
+      f.add(new Character('\u052F')); // (1327) X
+      f.add(new Character('\u0530')); // (1328) X
+      f.add(new Character('\u0531')); // (1329) X
+      f.add(new Character('\u0532')); // (1330) X
+      f.add(new Character('\u0533')); // (1331) X
+      f.add(new Character('\u0534')); // (1332) X
+      f.add(new Character('\u0535')); // (1333) X
+   }
+
+   /**
+    * Initializes ordinary characters for LUWO for the JA language.
+    * @param f The HashSet
+    */
+   protected static void initJAFlags(HashSet<Character> f)
+   {
+      f.add(new Character('\u00A6')); // ( 166) BROKEN_BAR
+      f.add(new Character('\u00A7')); // ( 167) SECTION
+      f.add(new Character('\u00A8')); // ( 168) diaeresis
+      f.add(new Character('\u00B0')); // ( 176) degree
+      f.add(new Character('\u00B1')); // ( 177) plus_minus
+      f.add(new Character('\u00B4')); // ( 180) acute
+      f.add(new Character('\u00B6')); // ( 182) Pilcrow
+      f.add(new Character('\u00D7')); // ( 215) times
+      f.add(new Character('\u0100')); // ( 256) A_bar
+      f.add(new Character('\u0101')); // ( 257) a_bar
+      f.add(new Character('\u0102')); // ( 258) A_breve
+      f.add(new Character('\u0103')); // ( 259) a_breve
+      f.add(new Character('\u0104')); // ( 260) A_ogokek
+      f.add(new Character('\u0105')); // ( 261) a_ogokek
+      f.add(new Character('\u0106')); // ( 262) C_acute
+      f.add(new Character('\u0107')); // ( 263) c_acute
+      f.add(new Character('\u0108')); // ( 264) C_circumflex
+      f.add(new Character('\u0109')); // ( 265) c_circumflex
+      f.add(new Character('\u010A')); // ( 266) C_superdot
+      f.add(new Character('\u010B')); // ( 267) c_superdot
+      f.add(new Character('\u010C')); // ( 268) C_caron
+      f.add(new Character('\u010D')); // ( 269) c_caron
+      f.add(new Character('\u010E')); // ( 270) D_caron
+      f.add(new Character('\u010F')); // ( 271) d_caron
+      f.add(new Character('\u0110')); // ( 272) D_stroke
+      f.add(new Character('\u0111')); // ( 273) d_stroke
+      f.add(new Character('\u0112')); // ( 274) E_macron
+      f.add(new Character('\u0113')); // ( 275) e_macron
+      f.add(new Character('\u0114')); // ( 276) E_breve
+      f.add(new Character('\u0115')); // ( 277) e_breve
+      f.add(new Character('\u0116')); // ( 278) E_superdot
+      f.add(new Character('\u0117')); // ( 279) e_superdot
+      f.add(new Character('\u0118')); // ( 280) E_ogonek
+      f.add(new Character('\u0119')); // ( 281) e_ogonek
+      f.add(new Character('\u011A')); // ( 282) E_caron
+      f.add(new Character('\u011B')); // ( 283) e_caron
+      f.add(new Character('\u011C')); // ( 284) G_circumflex
+      f.add(new Character('\u011D')); // ( 285) g_circumflex
+      f.add(new Character('\u011E')); // ( 286) G_breve
+      f.add(new Character('\u011F')); // ( 287) g_breve
+      f.add(new Character('\u0120')); // ( 288) G_superdot
+      f.add(new Character('\u0121')); // ( 289) g_superdot
+      f.add(new Character('\u0122')); // ( 290) G_cedilla
+      f.add(new Character('\u0123')); // ( 291) g_cedilla
+      f.add(new Character('\u0124')); // ( 292) H_circumflex
+      f.add(new Character('\u0125')); // ( 293) h_circumflex
+      f.add(new Character('\u0126')); // ( 294) H_stroke
+      f.add(new Character('\u0127')); // ( 295) h_stroke
+      f.add(new Character('\u0128')); // ( 296) I_tilde
+      f.add(new Character('\u0129')); // ( 297) i_tilde
+      f.add(new Character('\u012A')); // ( 298) I_macron
+      f.add(new Character('\u012B')); // ( 299) i_macron
+      f.add(new Character('\u012C')); // ( 300) I_breve
+      f.add(new Character('\u012D')); // ( 301) i_breve
+      f.add(new Character('\u012E')); // ( 302) I_ogonek
+      f.add(new Character('\u012F')); // ( 303) i_ogonek
+      f.add(new Character('\u0130')); // ( 304) I_superdot
+      f.add(new Character('\u0131')); // ( 305) i_nodot
+      f.add(new Character('\u0132')); // ( 306) IJ_ligature
+      f.add(new Character('\u0133')); // ( 307) ij_ligature
+      f.add(new Character('\u0134')); // ( 308) J_circumflex
+      f.add(new Character('\u0135')); // ( 309) j_circumflex
+      f.add(new Character('\u0136')); // ( 310) K_cedilla
+      f.add(new Character('\u0137')); // ( 311) k_cedilla
+      f.add(new Character('\u0138')); // ( 312) kra
+      f.add(new Character('\u0139')); // ( 313) L_acute
+      f.add(new Character('\u013A')); // ( 314) l_acute
+      f.add(new Character('\u013B')); // ( 315) L_cedilla
+      f.add(new Character('\u013C')); // ( 316) l_cedilla
+      f.add(new Character('\u013D')); // ( 317) L_caron
+      f.add(new Character('\u013E')); // ( 318) l_caron
+      f.add(new Character('\u013F')); // ( 319) L_middot
+      f.add(new Character('\u0140')); // ( 320) l_middot
+      f.add(new Character('\u0141')); // ( 321) L_stoke
+      f.add(new Character('\u0142')); // ( 322) l_stoke
+      f.add(new Character('\u0143')); // ( 323) N_acute
+      f.add(new Character('\u0144')); // ( 324) n_acute
+      f.add(new Character('\u0145')); // ( 325) N_cedilla
+      f.add(new Character('\u0146')); // ( 326) n_cedilla
+      f.add(new Character('\u0147')); // ( 327) N_caron
+      f.add(new Character('\u0148')); // ( 328) n_caron
+      f.add(new Character('\u0149')); // ( 329) n_apostrophe
+      f.add(new Character('\u014A')); // ( 330) ENG
+      f.add(new Character('\u014B')); // ( 331) eng
+      f.add(new Character('\u014C')); // ( 332) O_macron
+      f.add(new Character('\u014D')); // ( 333) o_macron
+      f.add(new Character('\u014E')); // ( 334) O_breve
+      f.add(new Character('\u014F')); // ( 335) o_breve
+      f.add(new Character('\u0150')); // ( 336) O_double_acute
+      f.add(new Character('\u0151')); // ( 337) o_double_acute
+      f.add(new Character('\u0152')); // ( 338) OE_ligature
+      f.add(new Character('\u0153')); // ( 339) oe_ligature
+      f.add(new Character('\u0154')); // ( 340) R_acute
+      f.add(new Character('\u0155')); // ( 341) r_acute
+      f.add(new Character('\u0156')); // ( 342) R_cedilla
+      f.add(new Character('\u0157')); // ( 343) r_cedilla
+      f.add(new Character('\u0158')); // ( 344) R_caron
+      f.add(new Character('\u0159')); // ( 345) r_caron
+      f.add(new Character('\u015A')); // ( 346) S_acute
+      f.add(new Character('\u015B')); // ( 347) s_acute
+      f.add(new Character('\u015C')); // ( 348) S_circumflex
+      f.add(new Character('\u015D')); // ( 349) s_circumflex
+      f.add(new Character('\u015E')); // ( 350) S_cedilla
+      f.add(new Character('\u015F')); // ( 351) s_cedilla
+      f.add(new Character('\u0160')); // ( 352) S_caron
+      f.add(new Character('\u0161')); // ( 353) s_caron
+      f.add(new Character('\u0162')); // ( 354) T_cedilla
+      f.add(new Character('\u0163')); // ( 355) t_cedilla
+      f.add(new Character('\u0164')); // ( 356) T_caron
+      f.add(new Character('\u0165')); // ( 357) t_caron
+      f.add(new Character('\u0166')); // ( 358) T_stroke
+      f.add(new Character('\u0167')); // ( 359) t_stroke
+      f.add(new Character('\u0168')); // ( 360) U_tilde
+      f.add(new Character('\u0169')); // ( 361) u_tilde
+      f.add(new Character('\u016A')); // ( 362) U_macron
+      f.add(new Character('\u016B')); // ( 363) u_macron
+      f.add(new Character('\u016C')); // ( 364) U_breve
+      f.add(new Character('\u016D')); // ( 365) u_breve
+      f.add(new Character('\u016E')); // ( 366) U_ring
+      f.add(new Character('\u016F')); // ( 367) u_ring
+      f.add(new Character('\u0170')); // ( 368) U_double_acute
+      f.add(new Character('\u0171')); // ( 369) u_double_acute
+      f.add(new Character('\u0172')); // ( 370) U_ogonek
+      f.add(new Character('\u0173')); // ( 371) u_ogonek
+      f.add(new Character('\u0174')); // ( 372) W_circumflex
+      f.add(new Character('\u0175')); // ( 373) w_circumflex
+      f.add(new Character('\u0176')); // ( 374) Y_circumflex
+      f.add(new Character('\u0177')); // ( 375) y_circumflex
+      f.add(new Character('\u0178')); // ( 376) Y_diaeresis
+      f.add(new Character('\u0179')); // ( 377) Z_acute
+      f.add(new Character('\u017A')); // ( 378) z_acute
+      f.add(new Character('\u017B')); // ( 379) Z_superdot
+      f.add(new Character('\u017C')); // ( 380) z_superdot
+      f.add(new Character('\u017D')); // ( 381) Z_caron
+      f.add(new Character('\u017E')); // ( 382) z_caron
+      f.add(new Character('\u017F')); // ( 383) long_s
+      f.add(new Character('\u0180')); // ( 384) X
+      f.add(new Character('\u0181')); // ( 385) X
+      f.add(new Character('\u0182')); // ( 386) X
+      f.add(new Character('\u0183')); // ( 387) X
+      f.add(new Character('\u0184')); // ( 388) X
+      f.add(new Character('\u0185')); // ( 389) X
+      f.add(new Character('\u0186')); // ( 390) X
+      f.add(new Character('\u0187')); // ( 391) X
+      f.add(new Character('\u0188')); // ( 392) X
+      f.add(new Character('\u0189')); // ( 393) X
+      f.add(new Character('\u018A')); // ( 394) X
+      f.add(new Character('\u018B')); // ( 395) X
+      f.add(new Character('\u018C')); // ( 396) X
+      f.add(new Character('\u018D')); // ( 397) X
+      f.add(new Character('\u018E')); // ( 398) X
+      f.add(new Character('\u018F')); // ( 399) X
+      f.add(new Character('\u0190')); // ( 400) X
+      f.add(new Character('\u0191')); // ( 401) X
+      f.add(new Character('\u0192')); // ( 402) X
+      f.add(new Character('\u0193')); // ( 403) X
+      f.add(new Character('\u0194')); // ( 404) X
+      f.add(new Character('\u0195')); // ( 405) X
+      f.add(new Character('\u0196')); // ( 406) X
+      f.add(new Character('\u0197')); // ( 407) X
+      f.add(new Character('\u0198')); // ( 408) X
+      f.add(new Character('\u0199')); // ( 409) X
+      f.add(new Character('\u019A')); // ( 410) X
+      f.add(new Character('\u019B')); // ( 411) X
+      f.add(new Character('\u019C')); // ( 412) X
+      f.add(new Character('\u019D')); // ( 413) X
+      f.add(new Character('\u019E')); // ( 414) X
+      f.add(new Character('\u019F')); // ( 415) X
+      f.add(new Character('\u01A0')); // ( 416) X
+      f.add(new Character('\u01A1')); // ( 417) X
+      f.add(new Character('\u01A2')); // ( 418) X
+      f.add(new Character('\u01A3')); // ( 419) X
+      f.add(new Character('\u01A4')); // ( 420) X
+      f.add(new Character('\u01A5')); // ( 421) X
+      f.add(new Character('\u01A6')); // ( 422) X
+      f.add(new Character('\u01A7')); // ( 423) X
+      f.add(new Character('\u01A8')); // ( 424) X
+      f.add(new Character('\u01A9')); // ( 425) X
+      f.add(new Character('\u01AA')); // ( 426) X
+      f.add(new Character('\u01AB')); // ( 427) X
+      f.add(new Character('\u01AC')); // ( 428) X
+      f.add(new Character('\u01AD')); // ( 429) X
+      f.add(new Character('\u01AE')); // ( 430) X
+      f.add(new Character('\u01AF')); // ( 431) X
+      f.add(new Character('\u01B0')); // ( 432) X
+      f.add(new Character('\u01B1')); // ( 433) X
+      f.add(new Character('\u01B2')); // ( 434) X
+      f.add(new Character('\u01B3')); // ( 435) X
+      f.add(new Character('\u01B4')); // ( 436) X
+      f.add(new Character('\u01B5')); // ( 437) X
+      f.add(new Character('\u01B6')); // ( 438) X
+      f.add(new Character('\u01B7')); // ( 439) X
+      f.add(new Character('\u01B8')); // ( 440) X
+      f.add(new Character('\u01B9')); // ( 441) X
+      f.add(new Character('\u01BA')); // ( 442) X
+      f.add(new Character('\u01BB')); // ( 443) X
+      f.add(new Character('\u01BC')); // ( 444) X
+      f.add(new Character('\u01BD')); // ( 445) X
+      f.add(new Character('\u01BE')); // ( 446) X
+      f.add(new Character('\u01BF')); // ( 447) X
+      f.add(new Character('\u01C0')); // ( 448) X
+      f.add(new Character('\u01C1')); // ( 449) X
+      f.add(new Character('\u01C2')); // ( 450) X
+      f.add(new Character('\u01C3')); // ( 451) X
+      f.add(new Character('\u01C4')); // ( 452) X
+      f.add(new Character('\u01C5')); // ( 453) X
+      f.add(new Character('\u01C6')); // ( 454) X
+      f.add(new Character('\u01C7')); // ( 455) X
+      f.add(new Character('\u01C8')); // ( 456) X
+      f.add(new Character('\u01C9')); // ( 457) X
+      f.add(new Character('\u01CA')); // ( 458) X
+      f.add(new Character('\u01CB')); // ( 459) X
+      f.add(new Character('\u01CC')); // ( 460) X
+      f.add(new Character('\u01CD')); // ( 461) X
+      f.add(new Character('\u01CE')); // ( 462) X
+      f.add(new Character('\u01CF')); // ( 463) X
+      f.add(new Character('\u01D0')); // ( 464) X
+      f.add(new Character('\u01D1')); // ( 465) X
+      f.add(new Character('\u01D2')); // ( 466) X
+      f.add(new Character('\u01D3')); // ( 467) X
+      f.add(new Character('\u01D4')); // ( 468) X
+      f.add(new Character('\u01D5')); // ( 469) X
+      f.add(new Character('\u01D6')); // ( 470) X
+      f.add(new Character('\u01D7')); // ( 471) X
+      f.add(new Character('\u01D8')); // ( 472) X
+      f.add(new Character('\u01D9')); // ( 473) X
+      f.add(new Character('\u01DA')); // ( 474) X
+      f.add(new Character('\u01DB')); // ( 475) X
+      f.add(new Character('\u01DC')); // ( 476) X
+      f.add(new Character('\u01DD')); // ( 477) X
+      f.add(new Character('\u01DE')); // ( 478) X
+      f.add(new Character('\u01DF')); // ( 479) X
+      f.add(new Character('\u01E0')); // ( 480) X
+      f.add(new Character('\u01E1')); // ( 481) X
+      f.add(new Character('\u01E2')); // ( 482) X
+      f.add(new Character('\u01E3')); // ( 483) X
+      f.add(new Character('\u01E4')); // ( 484) X
+      f.add(new Character('\u01E5')); // ( 485) X
+      f.add(new Character('\u01E6')); // ( 486) X
+      f.add(new Character('\u01E7')); // ( 487) X
+      f.add(new Character('\u01E8')); // ( 488) X
+      f.add(new Character('\u01E9')); // ( 489) X
+      f.add(new Character('\u01EA')); // ( 490) X
+      f.add(new Character('\u01EB')); // ( 491) X
+      f.add(new Character('\u01EC')); // ( 492) X
+      f.add(new Character('\u01ED')); // ( 493) X
+      f.add(new Character('\u01EE')); // ( 494) X
+      f.add(new Character('\u01EF')); // ( 495) X
+      f.add(new Character('\u01F0')); // ( 496) X
+      f.add(new Character('\u01F1')); // ( 497) X
+      f.add(new Character('\u01F2')); // ( 498) X
+      f.add(new Character('\u01F3')); // ( 499) X
+      f.add(new Character('\u01F4')); // ( 500) X
+      f.add(new Character('\u01F5')); // ( 501) X
+      f.add(new Character('\u01F6')); // ( 502) X
+      f.add(new Character('\u01F7')); // ( 503) X
+      f.add(new Character('\u01F8')); // ( 504) X
+      f.add(new Character('\u01F9')); // ( 505) X
+      f.add(new Character('\u01FA')); // ( 506) X
+      f.add(new Character('\u01FB')); // ( 507) X
+      f.add(new Character('\u01FC')); // ( 508) X
+      f.add(new Character('\u01FD')); // ( 509) X
+      f.add(new Character('\u01FE')); // ( 510) X
+      f.add(new Character('\u01FF')); // ( 511) X
+      f.add(new Character('\u0200')); // ( 512) X
+      f.add(new Character('\u0201')); // ( 513) X
+      f.add(new Character('\u0202')); // ( 514) X
+      f.add(new Character('\u0203')); // ( 515) X
+      f.add(new Character('\u0204')); // ( 516) X
+      f.add(new Character('\u0205')); // ( 517) X
+      f.add(new Character('\u0206')); // ( 518) X
+      f.add(new Character('\u0207')); // ( 519) X
+      f.add(new Character('\u0208')); // ( 520) X
+      f.add(new Character('\u0209')); // ( 521) X
+      f.add(new Character('\u020A')); // ( 522) X
+      f.add(new Character('\u020B')); // ( 523) X
+      f.add(new Character('\u020C')); // ( 524) X
+      f.add(new Character('\u020D')); // ( 525) X
+      f.add(new Character('\u020E')); // ( 526) X
+      f.add(new Character('\u020F')); // ( 527) X
+      f.add(new Character('\u0210')); // ( 528) X
+      f.add(new Character('\u0211')); // ( 529) X
+      f.add(new Character('\u0212')); // ( 530) X
+      f.add(new Character('\u0213')); // ( 531) X
+      f.add(new Character('\u0214')); // ( 532) X
+      f.add(new Character('\u0215')); // ( 533) X
+      f.add(new Character('\u0216')); // ( 534) X
+      f.add(new Character('\u0217')); // ( 535) X
+      f.add(new Character('\u0218')); // ( 536) X
+      f.add(new Character('\u0219')); // ( 537) X
+      f.add(new Character('\u021A')); // ( 538) X
+      f.add(new Character('\u021B')); // ( 539) X
+      f.add(new Character('\u021C')); // ( 540) X
+      f.add(new Character('\u021D')); // ( 541) X
+      f.add(new Character('\u021E')); // ( 542) X
+      f.add(new Character('\u021F')); // ( 543) X
+      f.add(new Character('\u0220')); // ( 544) X
+      f.add(new Character('\u0221')); // ( 545) X
+      f.add(new Character('\u0222')); // ( 546) X
+      f.add(new Character('\u0223')); // ( 547) X
+      f.add(new Character('\u0224')); // ( 548) X
+      f.add(new Character('\u0225')); // ( 549) X
+      f.add(new Character('\u0226')); // ( 550) X
+      f.add(new Character('\u0227')); // ( 551) X
+      f.add(new Character('\u0228')); // ( 552) X
+      f.add(new Character('\u0229')); // ( 553) X
+      f.add(new Character('\u022A')); // ( 554) X
+      f.add(new Character('\u022B')); // ( 555) X
+      f.add(new Character('\u022C')); // ( 556) X
+      f.add(new Character('\u022D')); // ( 557) X
+      f.add(new Character('\u022E')); // ( 558) X
+      f.add(new Character('\u022F')); // ( 559) X
+      f.add(new Character('\u0230')); // ( 560) X
+      f.add(new Character('\u0231')); // ( 561) X
+      f.add(new Character('\u0232')); // ( 562) X
+      f.add(new Character('\u0233')); // ( 563) X
+      f.add(new Character('\u0234')); // ( 564) X
+      f.add(new Character('\u0235')); // ( 565) X
+      f.add(new Character('\u0236')); // ( 566) X
+      f.add(new Character('\u0237')); // ( 567) X
+      f.add(new Character('\u0238')); // ( 568) X
+      f.add(new Character('\u0239')); // ( 569) X
+      f.add(new Character('\u023A')); // ( 570) X
+      f.add(new Character('\u023B')); // ( 571) X
+      f.add(new Character('\u023C')); // ( 572) X
+      f.add(new Character('\u023D')); // ( 573) X
+      f.add(new Character('\u023E')); // ( 574) X
+      f.add(new Character('\u023F')); // ( 575) X
+      f.add(new Character('\u0240')); // ( 576) X
+      f.add(new Character('\u0241')); // ( 577) X
+      f.add(new Character('\u0242')); // ( 578) X
+      f.add(new Character('\u0243')); // ( 579) X
+      f.add(new Character('\u0244')); // ( 580) X
+      f.add(new Character('\u0245')); // ( 581) X
+      f.add(new Character('\u0246')); // ( 582) X
+      f.add(new Character('\u0247')); // ( 583) X
+      f.add(new Character('\u0248')); // ( 584) X
+      f.add(new Character('\u0249')); // ( 585) X
+      f.add(new Character('\u024A')); // ( 586) X
+      f.add(new Character('\u024B')); // ( 587) X
+      f.add(new Character('\u024C')); // ( 588) X
+      f.add(new Character('\u024D')); // ( 589) X
+      f.add(new Character('\u024E')); // ( 590) X
+      f.add(new Character('\u024F')); // ( 591) X
+      f.add(new Character('\u0250')); // ( 592) X
+      f.add(new Character('\u0251')); // ( 593) X
+      f.add(new Character('\u0252')); // ( 594) X
+      f.add(new Character('\u0253')); // ( 595) X
+      f.add(new Character('\u0254')); // ( 596) X
+      f.add(new Character('\u0255')); // ( 597) X
+      f.add(new Character('\u0256')); // ( 598) X
+      f.add(new Character('\u0257')); // ( 599) X
+      f.add(new Character('\u0258')); // ( 600) X
+      f.add(new Character('\u0259')); // ( 601) X
+      f.add(new Character('\u025A')); // ( 602) X
+      f.add(new Character('\u025B')); // ( 603) X
+      f.add(new Character('\u025C')); // ( 604) X
+      f.add(new Character('\u025D')); // ( 605) X
+      f.add(new Character('\u025E')); // ( 606) X
+      f.add(new Character('\u025F')); // ( 607) X
+      f.add(new Character('\u0260')); // ( 608) X
+      f.add(new Character('\u0261')); // ( 609) X
+      f.add(new Character('\u0262')); // ( 610) X
+      f.add(new Character('\u0263')); // ( 611) X
+      f.add(new Character('\u0264')); // ( 612) X
+      f.add(new Character('\u0265')); // ( 613) X
+      f.add(new Character('\u0266')); // ( 614) X
+      f.add(new Character('\u0267')); // ( 615) X
+      f.add(new Character('\u0268')); // ( 616) X
+      f.add(new Character('\u0269')); // ( 617) X
+      f.add(new Character('\u026A')); // ( 618) X
+      f.add(new Character('\u026B')); // ( 619) X
+      f.add(new Character('\u026C')); // ( 620) X
+      f.add(new Character('\u026D')); // ( 621) X
+      f.add(new Character('\u026E')); // ( 622) X
+      f.add(new Character('\u026F')); // ( 623) X
+      f.add(new Character('\u0270')); // ( 624) X
+      f.add(new Character('\u0271')); // ( 625) X
+      f.add(new Character('\u0272')); // ( 626) X
+      f.add(new Character('\u0273')); // ( 627) X
+      f.add(new Character('\u0274')); // ( 628) X
+      f.add(new Character('\u0275')); // ( 629) X
+      f.add(new Character('\u0276')); // ( 630) X
+      f.add(new Character('\u0277')); // ( 631) X
+      f.add(new Character('\u0278')); // ( 632) X
+      f.add(new Character('\u0279')); // ( 633) X
+      f.add(new Character('\u027A')); // ( 634) X
+      f.add(new Character('\u027B')); // ( 635) X
+      f.add(new Character('\u027C')); // ( 636) X
+      f.add(new Character('\u027D')); // ( 637) X
+      f.add(new Character('\u027E')); // ( 638) X
+      f.add(new Character('\u027F')); // ( 639) X
+      f.add(new Character('\u0280')); // ( 640) X
+      f.add(new Character('\u0281')); // ( 641) X
+      f.add(new Character('\u0282')); // ( 642) X
+      f.add(new Character('\u0283')); // ( 643) X
+      f.add(new Character('\u0284')); // ( 644) X
+      f.add(new Character('\u0285')); // ( 645) X
+      f.add(new Character('\u0286')); // ( 646) X
+      f.add(new Character('\u0287')); // ( 647) X
+      f.add(new Character('\u0288')); // ( 648) X
+      f.add(new Character('\u0289')); // ( 649) X
+      f.add(new Character('\u028A')); // ( 650) X
+      f.add(new Character('\u028B')); // ( 651) X
+      f.add(new Character('\u028C')); // ( 652) X
+      f.add(new Character('\u028D')); // ( 653) X
+      f.add(new Character('\u028E')); // ( 654) X
+      f.add(new Character('\u028F')); // ( 655) X
+      f.add(new Character('\u0290')); // ( 656) X
+      f.add(new Character('\u0291')); // ( 657) X
+      f.add(new Character('\u0292')); // ( 658) X
+      f.add(new Character('\u0293')); // ( 659) X
+      f.add(new Character('\u0294')); // ( 660) X
+      f.add(new Character('\u0295')); // ( 661) X
+      f.add(new Character('\u0296')); // ( 662) X
+      f.add(new Character('\u0297')); // ( 663) X
+      f.add(new Character('\u0298')); // ( 664) X
+      f.add(new Character('\u0299')); // ( 665) X
+      f.add(new Character('\u029A')); // ( 666) X
+      f.add(new Character('\u029B')); // ( 667) X
+      f.add(new Character('\u029C')); // ( 668) X
+      f.add(new Character('\u029D')); // ( 669) X
+      f.add(new Character('\u029E')); // ( 670) X
+      f.add(new Character('\u029F')); // ( 671) X
+      f.add(new Character('\u02A0')); // ( 672) X
+      f.add(new Character('\u02A1')); // ( 673) X
+      f.add(new Character('\u02A2')); // ( 674) X
+      f.add(new Character('\u02A3')); // ( 675) X
+      f.add(new Character('\u02A4')); // ( 676) X
+      f.add(new Character('\u02A5')); // ( 677) X
+      f.add(new Character('\u02A6')); // ( 678) X
+      f.add(new Character('\u02A7')); // ( 679) X
+      f.add(new Character('\u02A8')); // ( 680) X
+      f.add(new Character('\u02A9')); // ( 681) X
+      f.add(new Character('\u02AA')); // ( 682) X
+      f.add(new Character('\u02AB')); // ( 683) X
+      f.add(new Character('\u02AC')); // ( 684) X
+      f.add(new Character('\u02AD')); // ( 685) X
+      f.add(new Character('\u02AE')); // ( 686) X
+      f.add(new Character('\u02AF')); // ( 687) X
+      f.add(new Character('\u02B0')); // ( 688) X
+      f.add(new Character('\u02B1')); // ( 689) X
+      f.add(new Character('\u02B2')); // ( 690) X
+      f.add(new Character('\u02B3')); // ( 691) X
+      f.add(new Character('\u02B4')); // ( 692) X
+      f.add(new Character('\u02B5')); // ( 693) X
+      f.add(new Character('\u02B6')); // ( 694) X
+      f.add(new Character('\u02B7')); // ( 695) X
+      f.add(new Character('\u02B8')); // ( 696) X
+      f.add(new Character('\u02B9')); // ( 697) X
+      f.add(new Character('\u02BA')); // ( 698) X
+      f.add(new Character('\u02BB')); // ( 699) X
+      f.add(new Character('\u02BC')); // ( 700) X
+      f.add(new Character('\u02BD')); // ( 701) X
+      f.add(new Character('\u02BE')); // ( 702) X
+      f.add(new Character('\u02BF')); // ( 703) X
+      f.add(new Character('\u02C0')); // ( 704) X
+      f.add(new Character('\u02C1')); // ( 705) X
+      f.add(new Character('\u02C2')); // ( 706) X
+      f.add(new Character('\u02C3')); // ( 707) X
+      f.add(new Character('\u02C4')); // ( 708) X
+      f.add(new Character('\u02C5')); // ( 709) X
+      f.add(new Character('\u02C6')); // ( 710) X
+      f.add(new Character('\u02C7')); // ( 711) X
+      f.add(new Character('\u02C8')); // ( 712) X
+      f.add(new Character('\u02C9')); // ( 713) X
+      f.add(new Character('\u02CA')); // ( 714) X
+      f.add(new Character('\u02CB')); // ( 715) X
+      f.add(new Character('\u02CC')); // ( 716) X
+      f.add(new Character('\u02CD')); // ( 717) X
+      f.add(new Character('\u02CE')); // ( 718) X
+      f.add(new Character('\u02CF')); // ( 719) X
+      f.add(new Character('\u02D0')); // ( 720) X
+      f.add(new Character('\u02D1')); // ( 721) X
+      f.add(new Character('\u02D2')); // ( 722) X
+      f.add(new Character('\u02D3')); // ( 723) X
+      f.add(new Character('\u02D4')); // ( 724) X
+      f.add(new Character('\u02D5')); // ( 725) X
+      f.add(new Character('\u02D6')); // ( 726) X
+      f.add(new Character('\u02D7')); // ( 727) X
+      f.add(new Character('\u02D8')); // ( 728) X
+      f.add(new Character('\u02D9')); // ( 729) X
+      f.add(new Character('\u02DA')); // ( 730) X
+      f.add(new Character('\u02DB')); // ( 731) X
+      f.add(new Character('\u02DC')); // ( 732) X
+      f.add(new Character('\u02DD')); // ( 733) X
+      f.add(new Character('\u02DE')); // ( 734) X
+      f.add(new Character('\u02DF')); // ( 735) X
+      f.add(new Character('\u02E0')); // ( 736) X
+      f.add(new Character('\u02E1')); // ( 737) X
+      f.add(new Character('\u02E2')); // ( 738) X
+      f.add(new Character('\u02E3')); // ( 739) X
+      f.add(new Character('\u02E4')); // ( 740) X
+      f.add(new Character('\u02E5')); // ( 741) X
+      f.add(new Character('\u02E6')); // ( 742) X
+      f.add(new Character('\u02E7')); // ( 743) X
+      f.add(new Character('\u02E8')); // ( 744) X
+      f.add(new Character('\u02E9')); // ( 745) X
+      f.add(new Character('\u02EA')); // ( 746) X
+      f.add(new Character('\u02EB')); // ( 747) X
+      f.add(new Character('\u02EC')); // ( 748) X
+      f.add(new Character('\u02ED')); // ( 749) X
+      f.add(new Character('\u02EE')); // ( 750) X
+      f.add(new Character('\u02EF')); // ( 751) X
+      f.add(new Character('\u02F0')); // ( 752) X
+      f.add(new Character('\u02F1')); // ( 753) X
+      f.add(new Character('\u02F2')); // ( 754) X
+      f.add(new Character('\u02F3')); // ( 755) X
+      f.add(new Character('\u02F4')); // ( 756) X
+      f.add(new Character('\u02F5')); // ( 757) X
+      f.add(new Character('\u02F6')); // ( 758) X
+      f.add(new Character('\u02F7')); // ( 759) X
+      f.add(new Character('\u02F8')); // ( 760) X
+      f.add(new Character('\u02F9')); // ( 761) X
+      f.add(new Character('\u02FA')); // ( 762) X
+      f.add(new Character('\u02FB')); // ( 763) X
+      f.add(new Character('\u02FC')); // ( 764) X
+      f.add(new Character('\u02FD')); // ( 765) X
+      f.add(new Character('\u02FE')); // ( 766) X
+      f.add(new Character('\u02FF')); // ( 767) X
+      f.add(new Character('\u0300')); // ( 768) X
+      f.add(new Character('\u0301')); // ( 769) X
+      f.add(new Character('\u0302')); // ( 770) X
+      f.add(new Character('\u0303')); // ( 771) X
+      f.add(new Character('\u0304')); // ( 772) X
+      f.add(new Character('\u0305')); // ( 773) X
+      f.add(new Character('\u0306')); // ( 774) X
+      f.add(new Character('\u0307')); // ( 775) X
+      f.add(new Character('\u0308')); // ( 776) X
+      f.add(new Character('\u0309')); // ( 777) X
+      f.add(new Character('\u030A')); // ( 778) X
+      f.add(new Character('\u030B')); // ( 779) X
+      f.add(new Character('\u030C')); // ( 780) X
+      f.add(new Character('\u030D')); // ( 781) X
+      f.add(new Character('\u030E')); // ( 782) X
+      f.add(new Character('\u030F')); // ( 783) X
+      f.add(new Character('\u0310')); // ( 784) X
+      f.add(new Character('\u0311')); // ( 785) X
+      f.add(new Character('\u0312')); // ( 786) X
+      f.add(new Character('\u0313')); // ( 787) X
+      f.add(new Character('\u0314')); // ( 788) X
+      f.add(new Character('\u0315')); // ( 789) X
+      f.add(new Character('\u0316')); // ( 790) X
+      f.add(new Character('\u0317')); // ( 791) X
+      f.add(new Character('\u0318')); // ( 792) X
+      f.add(new Character('\u0319')); // ( 793) X
+      f.add(new Character('\u031A')); // ( 794) X
+      f.add(new Character('\u031B')); // ( 795) X
+      f.add(new Character('\u031C')); // ( 796) X
+      f.add(new Character('\u031D')); // ( 797) X
+      f.add(new Character('\u031E')); // ( 798) X
+      f.add(new Character('\u031F')); // ( 799) X
+      f.add(new Character('\u0320')); // ( 800) X
+      f.add(new Character('\u0321')); // ( 801) X
+      f.add(new Character('\u0322')); // ( 802) X
+      f.add(new Character('\u0323')); // ( 803) X
+      f.add(new Character('\u0324')); // ( 804) X
+      f.add(new Character('\u0325')); // ( 805) X
+      f.add(new Character('\u0326')); // ( 806) X
+      f.add(new Character('\u0327')); // ( 807) X
+      f.add(new Character('\u0328')); // ( 808) X
+      f.add(new Character('\u0329')); // ( 809) X
+      f.add(new Character('\u032A')); // ( 810) X
+      f.add(new Character('\u032B')); // ( 811) X
+      f.add(new Character('\u032C')); // ( 812) X
+      f.add(new Character('\u032D')); // ( 813) X
+      f.add(new Character('\u032E')); // ( 814) X
+      f.add(new Character('\u032F')); // ( 815) X
+      f.add(new Character('\u0330')); // ( 816) X
+      f.add(new Character('\u0331')); // ( 817) X
+      f.add(new Character('\u0332')); // ( 818) X
+      f.add(new Character('\u0333')); // ( 819) X
+      f.add(new Character('\u0334')); // ( 820) X
+      f.add(new Character('\u0335')); // ( 821) X
+      f.add(new Character('\u0336')); // ( 822) X
+      f.add(new Character('\u0337')); // ( 823) X
+      f.add(new Character('\u0338')); // ( 824) X
+      f.add(new Character('\u0339')); // ( 825) X
+      f.add(new Character('\u033A')); // ( 826) X
+      f.add(new Character('\u033B')); // ( 827) X
+      f.add(new Character('\u033C')); // ( 828) X
+      f.add(new Character('\u033D')); // ( 829) X
+      f.add(new Character('\u033E')); // ( 830) X
+      f.add(new Character('\u033F')); // ( 831) X
+      f.add(new Character('\u0340')); // ( 832) X
+      f.add(new Character('\u0341')); // ( 833) X
+      f.add(new Character('\u0342')); // ( 834) X
+      f.add(new Character('\u0343')); // ( 835) X
+      f.add(new Character('\u0344')); // ( 836) X
+      f.add(new Character('\u0345')); // ( 837) X
+      f.add(new Character('\u0346')); // ( 838) X
+      f.add(new Character('\u0347')); // ( 839) X
+      f.add(new Character('\u0348')); // ( 840) X
+      f.add(new Character('\u0349')); // ( 841) X
+      f.add(new Character('\u034A')); // ( 842) X
+      f.add(new Character('\u034B')); // ( 843) X
+      f.add(new Character('\u034C')); // ( 844) X
+      f.add(new Character('\u034D')); // ( 845) X
+      f.add(new Character('\u034E')); // ( 846) X
+      f.add(new Character('\u034F')); // ( 847) X
+      f.add(new Character('\u0350')); // ( 848) X
+      f.add(new Character('\u0351')); // ( 849) X
+      f.add(new Character('\u0352')); // ( 850) X
+      f.add(new Character('\u0353')); // ( 851) X
+      f.add(new Character('\u0354')); // ( 852) X
+      f.add(new Character('\u0355')); // ( 853) X
+      f.add(new Character('\u0356')); // ( 854) X
+      f.add(new Character('\u0357')); // ( 855) X
+      f.add(new Character('\u0358')); // ( 856) X
+      f.add(new Character('\u0359')); // ( 857) X
+      f.add(new Character('\u035A')); // ( 858) X
+      f.add(new Character('\u035B')); // ( 859) X
+      f.add(new Character('\u035C')); // ( 860) X
+      f.add(new Character('\u035D')); // ( 861) X
+      f.add(new Character('\u035E')); // ( 862) X
+      f.add(new Character('\u035F')); // ( 863) X
+      f.add(new Character('\u0360')); // ( 864) X
+      f.add(new Character('\u0361')); // ( 865) X
+      f.add(new Character('\u0362')); // ( 866) X
+      f.add(new Character('\u0363')); // ( 867) X
+      f.add(new Character('\u0364')); // ( 868) X
+      f.add(new Character('\u0365')); // ( 869) X
+      f.add(new Character('\u0366')); // ( 870) X
+      f.add(new Character('\u0367')); // ( 871) X
+      f.add(new Character('\u0368')); // ( 872) X
+      f.add(new Character('\u0369')); // ( 873) X
+      f.add(new Character('\u036A')); // ( 874) X
+      f.add(new Character('\u036B')); // ( 875) X
+      f.add(new Character('\u036C')); // ( 876) X
+      f.add(new Character('\u036D')); // ( 877) X
+      f.add(new Character('\u036E')); // ( 878) X
+      f.add(new Character('\u036F')); // ( 879) X
+      f.add(new Character('\u0370')); // ( 880) X
+      f.add(new Character('\u0371')); // ( 881) X
+      f.add(new Character('\u0372')); // ( 882) X
+      f.add(new Character('\u0373')); // ( 883) X
+      f.add(new Character('\u0374')); // ( 884) X
+      f.add(new Character('\u0375')); // ( 885) X
+      f.add(new Character('\u0376')); // ( 886) X
+      f.add(new Character('\u0377')); // ( 887) X
+      f.add(new Character('\u0378')); // ( 888) X
+      f.add(new Character('\u0379')); // ( 889) X
+      f.add(new Character('\u037A')); // ( 890) X
+      f.add(new Character('\u037B')); // ( 891) X
+      f.add(new Character('\u037C')); // ( 892) X
+      f.add(new Character('\u037D')); // ( 893) X
+      f.add(new Character('\u037E')); // ( 894) X
+      f.add(new Character('\u037F')); // ( 895) X
+      f.add(new Character('\u0380')); // ( 896) X
+      f.add(new Character('\u0381')); // ( 897) X
+      f.add(new Character('\u0382')); // ( 898) X
+      f.add(new Character('\u0383')); // ( 899) X
+      f.add(new Character('\u0384')); // ( 900) X
+      f.add(new Character('\u0385')); // ( 901) X
+      f.add(new Character('\u0386')); // ( 902) X
+      f.add(new Character('\u0387')); // ( 903) X
+      f.add(new Character('\u0388')); // ( 904) X
+      f.add(new Character('\u0389')); // ( 905) X
+      f.add(new Character('\u038A')); // ( 906) X
+      f.add(new Character('\u038B')); // ( 907) X
+      f.add(new Character('\u038C')); // ( 908) X
+      f.add(new Character('\u038D')); // ( 909) X
+      f.add(new Character('\u038E')); // ( 910) X
+      f.add(new Character('\u038F')); // ( 911) X
+      f.add(new Character('\u0390')); // ( 912) X
+      f.add(new Character('\u0391')); // ( 913) X
+      f.add(new Character('\u0392')); // ( 914) X
+      f.add(new Character('\u0393')); // ( 915) X
+      f.add(new Character('\u0394')); // ( 916) X
+      f.add(new Character('\u0395')); // ( 917) X
+      f.add(new Character('\u0396')); // ( 918) X
+      f.add(new Character('\u0397')); // ( 919) X
+      f.add(new Character('\u0398')); // ( 920) X
+      f.add(new Character('\u0399')); // ( 921) X
+      f.add(new Character('\u039A')); // ( 922) X
+      f.add(new Character('\u039B')); // ( 923) X
+      f.add(new Character('\u039C')); // ( 924) X
+      f.add(new Character('\u039D')); // ( 925) X
+      f.add(new Character('\u039E')); // ( 926) X
+      f.add(new Character('\u039F')); // ( 927) X
+      f.add(new Character('\u03A0')); // ( 928) X
+      f.add(new Character('\u03A1')); // ( 929) X
+      f.add(new Character('\u03A2')); // ( 930) X
+      f.add(new Character('\u03A3')); // ( 931) X
+      f.add(new Character('\u03A4')); // ( 932) X
+      f.add(new Character('\u03A5')); // ( 933) X
+      f.add(new Character('\u03A6')); // ( 934) X
+      f.add(new Character('\u03A7')); // ( 935) X
+      f.add(new Character('\u03A8')); // ( 936) X
+      f.add(new Character('\u03A9')); // ( 937) X
+      f.add(new Character('\u03AA')); // ( 938) X
+      f.add(new Character('\u03AB')); // ( 939) X
+      f.add(new Character('\u03AC')); // ( 940) X
+      f.add(new Character('\u03AD')); // ( 941) X
+      f.add(new Character('\u03AE')); // ( 942) X
+      f.add(new Character('\u03AF')); // ( 943) X
+      f.add(new Character('\u03B0')); // ( 944) X
+      f.add(new Character('\u03B1')); // ( 945) X
+      f.add(new Character('\u03B2')); // ( 946) X
+      f.add(new Character('\u03B3')); // ( 947) X
+      f.add(new Character('\u03B4')); // ( 948) X
+      f.add(new Character('\u03B5')); // ( 949) X
+      f.add(new Character('\u03B6')); // ( 950) X
+      f.add(new Character('\u03B7')); // ( 951) X
+      f.add(new Character('\u03B8')); // ( 952) X
+      f.add(new Character('\u03B9')); // ( 953) X
+      f.add(new Character('\u03BA')); // ( 954) X
+      f.add(new Character('\u03BB')); // ( 955) X
+      f.add(new Character('\u03BC')); // ( 956) X
+      f.add(new Character('\u03BD')); // ( 957) X
+      f.add(new Character('\u03BE')); // ( 958) X
+      f.add(new Character('\u03BF')); // ( 959) X
+      f.add(new Character('\u03C0')); // ( 960) X
+      f.add(new Character('\u03C1')); // ( 961) X
+      f.add(new Character('\u03C2')); // ( 962) X
+      f.add(new Character('\u03C3')); // ( 963) X
+      f.add(new Character('\u03C4')); // ( 964) X
+      f.add(new Character('\u03C5')); // ( 965) X
+      f.add(new Character('\u03C6')); // ( 966) X
+      f.add(new Character('\u03C7')); // ( 967) X
+      f.add(new Character('\u03C8')); // ( 968) X
+      f.add(new Character('\u03C9')); // ( 969) X
+      f.add(new Character('\u03CA')); // ( 970) X
+      f.add(new Character('\u03CB')); // ( 971) X
+      f.add(new Character('\u03CC')); // ( 972) X
+      f.add(new Character('\u03CD')); // ( 973) X
+      f.add(new Character('\u03CE')); // ( 974) X
+      f.add(new Character('\u03CF')); // ( 975) X
+      f.add(new Character('\u03D0')); // ( 976) X
+      f.add(new Character('\u03D1')); // ( 977) X
+      f.add(new Character('\u03D2')); // ( 978) X
+      f.add(new Character('\u03D3')); // ( 979) X
+      f.add(new Character('\u03D4')); // ( 980) X
+      f.add(new Character('\u03D5')); // ( 981) X
+      f.add(new Character('\u03D6')); // ( 982) X
+      f.add(new Character('\u03D7')); // ( 983) X
+      f.add(new Character('\u03D8')); // ( 984) X
+      f.add(new Character('\u03D9')); // ( 985) X
+      f.add(new Character('\u03DA')); // ( 986) X
+      f.add(new Character('\u03DB')); // ( 987) X
+      f.add(new Character('\u03DC')); // ( 988) X
+      f.add(new Character('\u03DD')); // ( 989) X
+      f.add(new Character('\u03DE')); // ( 990) X
+      f.add(new Character('\u03DF')); // ( 991) X
+      f.add(new Character('\u03E0')); // ( 992) X
+      f.add(new Character('\u03E1')); // ( 993) X
+      f.add(new Character('\u03E2')); // ( 994) X
+      f.add(new Character('\u03E3')); // ( 995) X
+      f.add(new Character('\u03E4')); // ( 996) X
+      f.add(new Character('\u03E5')); // ( 997) X
+      f.add(new Character('\u03E6')); // ( 998) X
+      f.add(new Character('\u03E7')); // ( 999) X
+      f.add(new Character('\u03E8')); // (1000) X
+      f.add(new Character('\u03E9')); // (1001) X
+      f.add(new Character('\u03EA')); // (1002) X
+      f.add(new Character('\u03EB')); // (1003) X
+      f.add(new Character('\u03EC')); // (1004) X
+      f.add(new Character('\u03ED')); // (1005) X
+      f.add(new Character('\u03EE')); // (1006) X
+      f.add(new Character('\u03EF')); // (1007) X
+      f.add(new Character('\u03F0')); // (1008) X
+      f.add(new Character('\u03F1')); // (1009) X
+      f.add(new Character('\u03F2')); // (1010) X
+      f.add(new Character('\u03F3')); // (1011) X
+      f.add(new Character('\u03F4')); // (1012) X
+      f.add(new Character('\u03F5')); // (1013) X
+      f.add(new Character('\u03F6')); // (1014) X
+      f.add(new Character('\u03F7')); // (1015) X
+      f.add(new Character('\u03F8')); // (1016) X
+      f.add(new Character('\u03F9')); // (1017) X
+      f.add(new Character('\u03FA')); // (1018) X
+      f.add(new Character('\u03FB')); // (1019) X
+      f.add(new Character('\u03FC')); // (1020) X
+      f.add(new Character('\u03FD')); // (1021) X
+      f.add(new Character('\u03FE')); // (1022) X
+      f.add(new Character('\u03FF')); // (1023) X
+      f.add(new Character('\u0400')); // (1024) X
+      f.add(new Character('\u0401')); // (1025) X
+      f.add(new Character('\u0402')); // (1026) X
+      f.add(new Character('\u0403')); // (1027) X
+      f.add(new Character('\u0404')); // (1028) X
+      f.add(new Character('\u0405')); // (1029) X
+      f.add(new Character('\u0406')); // (1030) X
+      f.add(new Character('\u0407')); // (1031) X
+      f.add(new Character('\u0408')); // (1032) X
+      f.add(new Character('\u0409')); // (1033) X
+      f.add(new Character('\u040A')); // (1034) X
+      f.add(new Character('\u040B')); // (1035) X
+      f.add(new Character('\u040C')); // (1036) X
+      f.add(new Character('\u040D')); // (1037) X
+      f.add(new Character('\u040E')); // (1038) X
+      f.add(new Character('\u040F')); // (1039) X
+      f.add(new Character('\u0410')); // (1040) X
+      f.add(new Character('\u0411')); // (1041) X
+      f.add(new Character('\u0412')); // (1042) X
+      f.add(new Character('\u0413')); // (1043) X
+      f.add(new Character('\u0414')); // (1044) X
+      f.add(new Character('\u0415')); // (1045) X
+      f.add(new Character('\u0416')); // (1046) X
+      f.add(new Character('\u0417')); // (1047) X
+      f.add(new Character('\u0418')); // (1048) X
+      f.add(new Character('\u0419')); // (1049) X
+      f.add(new Character('\u041A')); // (1050) X
+      f.add(new Character('\u041B')); // (1051) X
+      f.add(new Character('\u041C')); // (1052) X
+      f.add(new Character('\u041D')); // (1053) X
+      f.add(new Character('\u041E')); // (1054) X
+      f.add(new Character('\u041F')); // (1055) X
+      f.add(new Character('\u0420')); // (1056) X
+      f.add(new Character('\u0421')); // (1057) X
+      f.add(new Character('\u0422')); // (1058) X
+      f.add(new Character('\u0423')); // (1059) X
+      f.add(new Character('\u0424')); // (1060) X
+      f.add(new Character('\u0425')); // (1061) X
+      f.add(new Character('\u0426')); // (1062) X
+      f.add(new Character('\u0427')); // (1063) X
+      f.add(new Character('\u0428')); // (1064) X
+      f.add(new Character('\u0429')); // (1065) X
+      f.add(new Character('\u042A')); // (1066) X
+      f.add(new Character('\u042B')); // (1067) X
+      f.add(new Character('\u042C')); // (1068) X
+      f.add(new Character('\u042D')); // (1069) X
+      f.add(new Character('\u042E')); // (1070) X
+      f.add(new Character('\u042F')); // (1071) X
+      f.add(new Character('\u0430')); // (1072) X
+      f.add(new Character('\u0431')); // (1073) X
+      f.add(new Character('\u0432')); // (1074) X
+      f.add(new Character('\u0433')); // (1075) X
+      f.add(new Character('\u0434')); // (1076) X
+      f.add(new Character('\u0435')); // (1077) X
+      f.add(new Character('\u0436')); // (1078) X
+      f.add(new Character('\u0437')); // (1079) X
+      f.add(new Character('\u0438')); // (1080) X
+      f.add(new Character('\u0439')); // (1081) X
+      f.add(new Character('\u043A')); // (1082) X
+      f.add(new Character('\u043B')); // (1083) X
+      f.add(new Character('\u043C')); // (1084) X
+      f.add(new Character('\u043D')); // (1085) X
+      f.add(new Character('\u043E')); // (1086) X
+      f.add(new Character('\u043F')); // (1087) X
+      f.add(new Character('\u0440')); // (1088) X
+      f.add(new Character('\u0441')); // (1089) X
+      f.add(new Character('\u0442')); // (1090) X
+      f.add(new Character('\u0443')); // (1091) X
+      f.add(new Character('\u0444')); // (1092) X
+      f.add(new Character('\u0445')); // (1093) X
+      f.add(new Character('\u0446')); // (1094) X
+      f.add(new Character('\u0447')); // (1095) X
+      f.add(new Character('\u0448')); // (1096) X
+      f.add(new Character('\u0449')); // (1097) X
+      f.add(new Character('\u044A')); // (1098) X
+      f.add(new Character('\u044B')); // (1099) X
+      f.add(new Character('\u044C')); // (1100) X
+      f.add(new Character('\u044D')); // (1101) X
+      f.add(new Character('\u044E')); // (1102) X
+      f.add(new Character('\u044F')); // (1103) X
+      f.add(new Character('\u0450')); // (1104) X
+      f.add(new Character('\u0451')); // (1105) X
+      f.add(new Character('\u0452')); // (1106) X
+      f.add(new Character('\u0453')); // (1107) X
+      f.add(new Character('\u0454')); // (1108) X
+      f.add(new Character('\u0455')); // (1109) X
+      f.add(new Character('\u0456')); // (1110) X
+      f.add(new Character('\u0457')); // (1111) X
+      f.add(new Character('\u0458')); // (1112) X
+      f.add(new Character('\u0459')); // (1113) X
+      f.add(new Character('\u045A')); // (1114) X
+      f.add(new Character('\u045B')); // (1115) X
+      f.add(new Character('\u045C')); // (1116) X
+      f.add(new Character('\u045D')); // (1117) X
+      f.add(new Character('\u045E')); // (1118) X
+      f.add(new Character('\u045F')); // (1119) X
+      f.add(new Character('\u0460')); // (1120) X
+      f.add(new Character('\u0461')); // (1121) X
+      f.add(new Character('\u0462')); // (1122) X
+      f.add(new Character('\u0463')); // (1123) X
+      f.add(new Character('\u0464')); // (1124) X
+      f.add(new Character('\u0465')); // (1125) X
+      f.add(new Character('\u0466')); // (1126) X
+      f.add(new Character('\u0467')); // (1127) X
+      f.add(new Character('\u0468')); // (1128) X
+   }
+
+   /**
+    * Initializes ordinary characters for LUWO for the IT language.
+    * @param f The HashSet
+    */
+   private static void initITFlags(HashSet<Character> f)
+   {
+      f.add(new Character('\u00AA')); // (  170) feminine_ordinal
+      f.add(new Character('\u00BA')); // (  186) masculine_ordinal
+      f.add(new Character('\u00C0')); // (  192) A_grave
+      f.add(new Character('\u00C1')); // (  193) A_acute
+      f.add(new Character('\u00C2')); // (  194) A_circumflex
+      f.add(new Character('\u00C3')); // (  195) A_tilde
+      f.add(new Character('\u00C4')); // (  196) A_umlaut
+      f.add(new Character('\u00C5')); // (  197) A_ring
+      f.add(new Character('\u00C6')); // (  198) AE_ligature
+      f.add(new Character('\u00C7')); // (  199) C_cedilla
+      f.add(new Character('\u00C8')); // (  200) E_grave
+      f.add(new Character('\u00C9')); // (  201) E_acute
+      f.add(new Character('\u00CA')); // (  202) E_circumflex
+      f.add(new Character('\u00CB')); // (  203) E_umlaut
+      f.add(new Character('\u00CC')); // (  204) I_grave
+      f.add(new Character('\u00CD')); // (  205) I_acute
+      f.add(new Character('\u00CE')); // (  206) I_circumflex
+      f.add(new Character('\u00CF')); // (  207) I_umlaut
+      f.add(new Character('\u00D0')); // (  208) ETH_Q
+      f.add(new Character('\u00D1')); // (  209) N_tilde
+      f.add(new Character('\u00D2')); // (  210) O_grave
+      f.add(new Character('\u00D3')); // (  211) O_acute
+      f.add(new Character('\u00D4')); // (  212) O_circumflex
+      f.add(new Character('\u00D5')); // (  213) O_tilde
+      f.add(new Character('\u00D6')); // (  214) O_umlaut
+      f.add(new Character('\u00D8')); // (  216) O_slash
+      f.add(new Character('\u00D9')); // (  217) U_grave
+      f.add(new Character('\u00DA')); // (  218) U_acute
+      f.add(new Character('\u00DB')); // (  219) U_circumflex
+      f.add(new Character('\u00DC')); // (  220) U_umlaut
+      f.add(new Character('\u00DD')); // (  221) Y_acute
+      f.add(new Character('\u00DE')); // (  222) THORN
+      f.add(new Character('\u00DF')); // (  223) sharp_s
+      f.add(new Character('\u00E0')); // (  224) a_grave
+      f.add(new Character('\u00E1')); // (  225) a_acute
+      f.add(new Character('\u00E2')); // (  226) a_circumflex
+      f.add(new Character('\u00E3')); // (  227) a_tilde
+      f.add(new Character('\u00E4')); // (  228) a_umlaut
+      f.add(new Character('\u00E5')); // (  229) a_ring
+      f.add(new Character('\u00E6')); // (  230) ae_ligature
+      f.add(new Character('\u00E7')); // (  231) c_cedilla
+      f.add(new Character('\u00E8')); // (  232) e_grave
+      f.add(new Character('\u00E9')); // (  233) e_acute
+      f.add(new Character('\u00EA')); // (  234) e_circumflex
+      f.add(new Character('\u00EB')); // (  235) e_umlaut
+      f.add(new Character('\u00EC')); // (  236) i_grave
+      f.add(new Character('\u00ED')); // (  237) i_acute
+      f.add(new Character('\u00EE')); // (  238) i_circumflex
+      f.add(new Character('\u00EF')); // (  239) i_umlaut
+      f.add(new Character('\u00F0')); // (  240) eth
+      f.add(new Character('\u00F1')); // (  241) n_tilde
+      f.add(new Character('\u00F2')); // (  242) o_grave
+      f.add(new Character('\u00F3')); // (  243) o_acute
+      f.add(new Character('\u00F4')); // (  244) o_circumflex
+      f.add(new Character('\u00F5')); // (  245) o_tilde
+      f.add(new Character('\u00F6')); // (  246) o_umlaut
+      f.add(new Character('\u00F8')); // (  248) o_slash
+      f.add(new Character('\u00F9')); // (  249) u_grave
+      f.add(new Character('\u00FA')); // (  250) u_acute
+      f.add(new Character('\u00FB')); // (  251) u_circumflex
+      f.add(new Character('\u00FC')); // (  252) u_umlaut
+      f.add(new Character('\u00FD')); // (  253) y_acute
+      f.add(new Character('\u00FE')); // (  254) thorn
+      f.add(new Character('\u00FF')); // (  255) y_umlaut
+      f.add(new Character('\u0152')); // (  338) OE_ligature
+      f.add(new Character('\u0153')); // (  339) oe_ligature
+      f.add(new Character('\u0160')); // (  352) S_caron
+      f.add(new Character('\u0161')); // (  353) s_caron
+      f.add(new Character('\u0178')); // (  376) Y_diaeresis
+   }
+
+   /**
+    * Initializes ordinary characters for LUWO for the HU language.
+    * @param f The HashSet
+    */
+   protected static void initHUFlags(HashSet<Character> f)
+   {
+      f.add(new Character('\u00B5')); // (  181) micro
+      f.add(new Character('\u00C1')); // (  193) A_acute
+      f.add(new Character('\u00C2')); // (  194) A_circumflex
+      f.add(new Character('\u00C4')); // (  196) A_umlaut
+      f.add(new Character('\u00C7')); // (  199) C_cedilla
+      f.add(new Character('\u00C9')); // (  201) E_acute
+      f.add(new Character('\u00CB')); // (  203) E_umlaut
+      f.add(new Character('\u00CD')); // (  205) I_acute
+      f.add(new Character('\u00CE')); // (  206) I_circumflex
+      f.add(new Character('\u00D3')); // (  211) O_acute
+      f.add(new Character('\u00D4')); // (  212) O_circumflex
+      f.add(new Character('\u00D6')); // (  214) O_umlaut
+      f.add(new Character('\u00DA')); // (  218) U_acute
+      f.add(new Character('\u00DC')); // (  220) U_umlaut
+      f.add(new Character('\u00DD')); // (  221) Y_acute
+      f.add(new Character('\u00DF')); // (  223) sharp_s
+      f.add(new Character('\u00E1')); // (  225) a_acute
+      f.add(new Character('\u00E2')); // (  226) a_circumflex
+      f.add(new Character('\u00E4')); // (  228) a_umlaut
+      f.add(new Character('\u00E7')); // (  231) c_cedilla
+      f.add(new Character('\u00E9')); // (  233) e_acute
+      f.add(new Character('\u00EB')); // (  235) e_umlaut
+      f.add(new Character('\u00ED')); // (  237) i_acute
+      f.add(new Character('\u00EE')); // (  238) i_circumflex
+      f.add(new Character('\u00F3')); // (  243) o_acute
+      f.add(new Character('\u00F4')); // (  244) o_circumflex
+      f.add(new Character('\u00F6')); // (  246) o_umlaut
+      f.add(new Character('\u00FA')); // (  250) u_acute
+      f.add(new Character('\u00FC')); // (  252) u_umlaut
+      f.add(new Character('\u00FD')); // (  253) y_acute
+      f.add(new Character('\u0102')); // (  258) A_breve
+      f.add(new Character('\u0103')); // (  259) a_breve
+      f.add(new Character('\u0104')); // (  260) A_ogokek
+      f.add(new Character('\u0105')); // (  261) a_ogokek
+      f.add(new Character('\u0106')); // (  262) C_acute
+      f.add(new Character('\u0107')); // (  263) c_acute
+      f.add(new Character('\u010C')); // (  268) C_caron
+      f.add(new Character('\u010D')); // (  269) c_caron
+      f.add(new Character('\u010E')); // (  270) D_caron
+      f.add(new Character('\u010F')); // (  271) d_caron
+      f.add(new Character('\u0110')); // (  272) D_stroke
+      f.add(new Character('\u0111')); // (  273) d_stroke
+      f.add(new Character('\u0118')); // (  280) E_ogonek
+      f.add(new Character('\u0119')); // (  281) e_ogonek
+      f.add(new Character('\u011A')); // (  282) E_caron
+      f.add(new Character('\u011B')); // (  283) e_caron
+      f.add(new Character('\u0139')); // (  313) L_acute
+      f.add(new Character('\u013A')); // (  314) l_acute
+      f.add(new Character('\u013D')); // (  317) L_caron
+      f.add(new Character('\u013E')); // (  318) l_caron
+      f.add(new Character('\u0141')); // (  321) L_stoke
+      f.add(new Character('\u0142')); // (  322) l_stoke
+      f.add(new Character('\u0143')); // (  323) N_acute
+      f.add(new Character('\u0144')); // (  324) n_acute
+      f.add(new Character('\u0147')); // (  327) N_caron
+      f.add(new Character('\u0148')); // (  328) n_caron
+      f.add(new Character('\u0150')); // (  336) O_double_acute
+      f.add(new Character('\u0151')); // (  337) o_double_acute
+      f.add(new Character('\u0154')); // (  340) R_acute
+      f.add(new Character('\u0155')); // (  341) r_acute
+      f.add(new Character('\u0158')); // (  344) R_caron
+      f.add(new Character('\u0159')); // (  345) r_caron
+      f.add(new Character('\u015A')); // (  346) S_acute
+      f.add(new Character('\u015B')); // (  347) s_acute
+      f.add(new Character('\u015E')); // (  350) S_cedilla
+      f.add(new Character('\u015F')); // (  351) s_cedilla
+      f.add(new Character('\u0160')); // (  352) S_caron
+      f.add(new Character('\u0161')); // (  353) s_caron
+      f.add(new Character('\u0162')); // (  354) T_cedilla
+      f.add(new Character('\u0163')); // (  355) t_cedilla
+      f.add(new Character('\u0164')); // (  356) T_caron
+      f.add(new Character('\u0165')); // (  357) t_caron
+      f.add(new Character('\u016E')); // (  366) U_ring
+      f.add(new Character('\u016F')); // (  367) u_ring
+      f.add(new Character('\u0170')); // (  368) U_double_acute
+      f.add(new Character('\u0171')); // (  369) u_double_acute
+      f.add(new Character('\u0179')); // (  377) Z_acute
+      f.add(new Character('\u017A')); // (  378) z_acute
+      f.add(new Character('\u017B')); // (  379) Z_superdot
+      f.add(new Character('\u017C')); // (  380) z_superdot
+      f.add(new Character('\u017D')); // (  381) Z_caron
+      f.add(new Character('\u017E')); // (  382) z_caron
+   }
+
+   /**
+    * Initializes ordinary characters for LUWO for the FR language.
+    * @param f The HashSet
+    */
+   protected static void initFRFlags(HashSet<Character> f)
+   {
+      f.add(new Character('\u00AA')); // (  170) feminine_ordinal
+      f.add(new Character('\u00BA')); // (  186) masculine_ordinal
+      f.add(new Character('\u00C0')); // (  192) A_grave
+      f.add(new Character('\u00C1')); // (  193) A_acute
+      f.add(new Character('\u00C2')); // (  194) A_circumflex
+      f.add(new Character('\u00C3')); // (  195) A_tilde
+      f.add(new Character('\u00C4')); // (  196) A_umlaut
+      f.add(new Character('\u00C5')); // (  197) A_ring
+      f.add(new Character('\u00C6')); // (  198) AE_ligature
+      f.add(new Character('\u00C7')); // (  199) C_cedilla
+      f.add(new Character('\u00C8')); // (  200) E_grave
+      f.add(new Character('\u00C9')); // (  201) E_acute
+      f.add(new Character('\u00CA')); // (  202) E_circumflex
+      f.add(new Character('\u00CB')); // (  203) E_umlaut
+      f.add(new Character('\u00CC')); // (  204) I_grave
+      f.add(new Character('\u00CD')); // (  205) I_acute
+      f.add(new Character('\u00CE')); // (  206) I_circumflex
+      f.add(new Character('\u00CF')); // (  207) I_umlaut
+      f.add(new Character('\u00D0')); // (  208) ETH_Q
+      f.add(new Character('\u00D1')); // (  209) N_tilde
+      f.add(new Character('\u00D2')); // (  210) O_grave
+      f.add(new Character('\u00D3')); // (  211) O_acute
+      f.add(new Character('\u00D4')); // (  212) O_circumflex
+      f.add(new Character('\u00D5')); // (  213) O_tilde
+      f.add(new Character('\u00D6')); // (  214) O_umlaut
+      f.add(new Character('\u00D8')); // (  216) O_slash
+      f.add(new Character('\u00D9')); // (  217) U_grave
+      f.add(new Character('\u00DA')); // (  218) U_acute
+      f.add(new Character('\u00DB')); // (  219) U_circumflex
+      f.add(new Character('\u00DC')); // (  220) U_umlaut
+      f.add(new Character('\u00DD')); // (  221) Y_acute
+      f.add(new Character('\u00DE')); // (  222) THORN
+      f.add(new Character('\u00DF')); // (  223) sharp_s
+      f.add(new Character('\u00E0')); // (  224) a_grave
+      f.add(new Character('\u00E1')); // (  225) a_acute
+      f.add(new Character('\u00E2')); // (  226) a_circumflex
+      f.add(new Character('\u00E3')); // (  227) a_tilde
+      f.add(new Character('\u00E4')); // (  228) a_umlaut
+      f.add(new Character('\u00E5')); // (  229) a_ring
+      f.add(new Character('\u00E6')); // (  230) ae_ligature
+      f.add(new Character('\u00E7')); // (  231) c_cedilla
+      f.add(new Character('\u00E8')); // (  232) e_grave
+      f.add(new Character('\u00E9')); // (  233) e_acute
+      f.add(new Character('\u00EA')); // (  234) e_circumflex
+      f.add(new Character('\u00EB')); // (  235) e_umlaut
+      f.add(new Character('\u00EC')); // (  236) i_grave
+      f.add(new Character('\u00ED')); // (  237) i_acute
+      f.add(new Character('\u00EE')); // (  238) i_circumflex
+      f.add(new Character('\u00EF')); // (  239) i_umlaut
+      f.add(new Character('\u00F0')); // (  240) eth
+      f.add(new Character('\u00F1')); // (  241) n_tilde
+      f.add(new Character('\u00F2')); // (  242) o_grave
+      f.add(new Character('\u00F3')); // (  243) o_acute
+      f.add(new Character('\u00F4')); // (  244) o_circumflex
+      f.add(new Character('\u00F5')); // (  245) o_tilde
+      f.add(new Character('\u00F6')); // (  246) o_umlaut
+      f.add(new Character('\u00F8')); // (  248) o_slash
+      f.add(new Character('\u00F9')); // (  249) u_grave
+      f.add(new Character('\u00FA')); // (  250) u_acute
+      f.add(new Character('\u00FB')); // (  251) u_circumflex
+      f.add(new Character('\u00FC')); // (  252) u_umlaut
+      f.add(new Character('\u00FD')); // (  253) y_acute
+      f.add(new Character('\u00FE')); // (  254) thorn
+      f.add(new Character('\u00FF')); // (  255) y_umlaut
+      f.add(new Character('\u0152')); // (  338) OE_ligature
+      f.add(new Character('\u0153')); // (  339) oe_ligature
+      f.add(new Character('\u0160')); // (  352) S_caron
+      f.add(new Character('\u0161')); // (  353) s_caron
+      f.add(new Character('\u0178')); // (  376) Y_diaeresis
+   }
+
+   /**
+    * Initializes ordinary characters for LUWO for the ES language.
+    * @param f The HashSet
+    */
+   protected static void initESFlags(HashSet<Character> f)
+   {
+      f.add(new Character('\u00AA')); // (  170) feminine_ordinal
+      f.add(new Character('\u00BA')); // (  186) masculine_ordinal
+      f.add(new Character('\u00C0')); // (  192) A_grave
+      f.add(new Character('\u00C1')); // (  193) A_acute
+      f.add(new Character('\u00C2')); // (  194) A_circumflex
+      f.add(new Character('\u00C3')); // (  195) A_tilde
+      f.add(new Character('\u00C4')); // (  196) A_umlaut
+      f.add(new Character('\u00C5')); // (  197) A_ring
+      f.add(new Character('\u00C6')); // (  198) AE_ligature
+      f.add(new Character('\u00C7')); // (  199) C_cedilla
+      f.add(new Character('\u00C8')); // (  200) E_grave
+      f.add(new Character('\u00C9')); // (  201) E_acute
+      f.add(new Character('\u00CA')); // (  202) E_circumflex
+      f.add(new Character('\u00CB')); // (  203) E_umlaut
+      f.add(new Character('\u00CC')); // (  204) I_grave
+      f.add(new Character('\u00CD')); // (  205) I_acute
+      f.add(new Character('\u00CE')); // (  206) I_circumflex
+      f.add(new Character('\u00CF')); // (  207) I_umlaut
+      f.add(new Character('\u00D0')); // (  208) ETH_Q
+      f.add(new Character('\u00D1')); // (  209) N_tilde
+      f.add(new Character('\u00D2')); // (  210) O_grave
+      f.add(new Character('\u00D3')); // (  211) O_acute
+      f.add(new Character('\u00D4')); // (  212) O_circumflex
+      f.add(new Character('\u00D5')); // (  213) O_tilde
+      f.add(new Character('\u00D6')); // (  214) O_umlaut
+      f.add(new Character('\u00D8')); // (  216) O_slash
+      f.add(new Character('\u00D9')); // (  217) U_grave
+      f.add(new Character('\u00DA')); // (  218) U_acute
+      f.add(new Character('\u00DB')); // (  219) U_circumflex
+      f.add(new Character('\u00DC')); // (  220) U_umlaut
+      f.add(new Character('\u00DD')); // (  221) Y_acute
+      f.add(new Character('\u00DE')); // (  222) THORN
+      f.add(new Character('\u00DF')); // (  223) sharp_s
+      f.add(new Character('\u00E0')); // (  224) a_grave
+      f.add(new Character('\u00E1')); // (  225) a_acute
+      f.add(new Character('\u00E2')); // (  226) a_circumflex
+      f.add(new Character('\u00E3')); // (  227) a_tilde
+      f.add(new Character('\u00E4')); // (  228) a_umlaut
+      f.add(new Character('\u00E5')); // (  229) a_ring
+      f.add(new Character('\u00E6')); // (  230) ae_ligature
+      f.add(new Character('\u00E7')); // (  231) c_cedilla
+      f.add(new Character('\u00E8')); // (  232) e_grave
+      f.add(new Character('\u00E9')); // (  233) e_acute
+      f.add(new Character('\u00EA')); // (  234) e_circumflex
+      f.add(new Character('\u00EB')); // (  235) e_umlaut
+      f.add(new Character('\u00EC')); // (  236) i_grave
+      f.add(new Character('\u00ED')); // (  237) i_acute
+      f.add(new Character('\u00EE')); // (  238) i_circumflex
+      f.add(new Character('\u00EF')); // (  239) i_umlaut
+      f.add(new Character('\u00F0')); // (  240) eth
+      f.add(new Character('\u00F1')); // (  241) n_tilde
+      f.add(new Character('\u00F2')); // (  242) o_grave
+      f.add(new Character('\u00F3')); // (  243) o_acute
+      f.add(new Character('\u00F4')); // (  244) o_circumflex
+      f.add(new Character('\u00F5')); // (  245) o_tilde
+      f.add(new Character('\u00F6')); // (  246) o_umlaut
+      f.add(new Character('\u00F8')); // (  248) o_slash
+      f.add(new Character('\u00F9')); // (  249) u_grave
+      f.add(new Character('\u00FA')); // (  250) u_acute
+      f.add(new Character('\u00FB')); // (  251) u_circumflex
+      f.add(new Character('\u00FC')); // (  252) u_umlaut
+      f.add(new Character('\u00FD')); // (  253) y_acute
+      f.add(new Character('\u00FE')); // (  254) thorn
+      f.add(new Character('\u00FF')); // (  255) y_umlaut
+      f.add(new Character('\u0152')); // (  338) OE_ligature
+      f.add(new Character('\u0153')); // (  339) oe_ligature
+      f.add(new Character('\u0160')); // (  352) S_caron
+      f.add(new Character('\u0161')); // (  353) s_caron
+      f.add(new Character('\u0178')); // (  376) Y_diaeresis
+   }
+
+   /**
+    * Initializes ordinary characters for LUWO for the DE language.
+    * @param f The HashSet
+    */
+   protected static void initDEFlags(HashSet<Character> f)
+   {
+      f.add(new Character('\u00AA')); // (  170) feminine_ordinal
+      f.add(new Character('\u00BA')); // (  186) masculine_ordinal
+      f.add(new Character('\u00C0')); // (  192) A_grave
+      f.add(new Character('\u00C1')); // (  193) A_acute
+      f.add(new Character('\u00C2')); // (  194) A_circumflex
+      f.add(new Character('\u00C3')); // (  195) A_tilde
+      f.add(new Character('\u00C4')); // (  196) A_umlaut
+      f.add(new Character('\u00C5')); // (  197) A_ring
+      f.add(new Character('\u00C6')); // (  198) AE_ligature
+      f.add(new Character('\u00C7')); // (  199) C_cedilla
+      f.add(new Character('\u00C8')); // (  200) E_grave
+      f.add(new Character('\u00C9')); // (  201) E_acute
+      f.add(new Character('\u00CA')); // (  202) E_circumflex
+      f.add(new Character('\u00CB')); // (  203) E_umlaut
+      f.add(new Character('\u00CC')); // (  204) I_grave
+      f.add(new Character('\u00CD')); // (  205) I_acute
+      f.add(new Character('\u00CE')); // (  206) I_circumflex
+      f.add(new Character('\u00CF')); // (  207) I_umlaut
+      f.add(new Character('\u00D0')); // (  208) ETH_Q
+      f.add(new Character('\u00D1')); // (  209) N_tilde
+      f.add(new Character('\u00D2')); // (  210) O_grave
+      f.add(new Character('\u00D3')); // (  211) O_acute
+      f.add(new Character('\u00D4')); // (  212) O_circumflex
+      f.add(new Character('\u00D5')); // (  213) O_tilde
+      f.add(new Character('\u00D6')); // (  214) O_umlaut
+      f.add(new Character('\u00D8')); // (  216) O_slash
+      f.add(new Character('\u00D9')); // (  217) U_grave
+      f.add(new Character('\u00DA')); // (  218) U_acute
+      f.add(new Character('\u00DB')); // (  219) U_circumflex
+      f.add(new Character('\u00DC')); // (  220) U_umlaut
+      f.add(new Character('\u00DD')); // (  221) Y_acute
+      f.add(new Character('\u00DE')); // (  222) THORN
+      f.add(new Character('\u00DF')); // (  223) sharp_s
+      f.add(new Character('\u00E0')); // (  224) a_grave
+      f.add(new Character('\u00E1')); // (  225) a_acute
+      f.add(new Character('\u00E2')); // (  226) a_circumflex
+      f.add(new Character('\u00E3')); // (  227) a_tilde
+      f.add(new Character('\u00E4')); // (  228) a_umlaut
+      f.add(new Character('\u00E5')); // (  229) a_ring
+      f.add(new Character('\u00E6')); // (  230) ae_ligature
+      f.add(new Character('\u00E7')); // (  231) c_cedilla
+      f.add(new Character('\u00E8')); // (  232) e_grave
+      f.add(new Character('\u00E9')); // (  233) e_acute
+      f.add(new Character('\u00EA')); // (  234) e_circumflex
+      f.add(new Character('\u00EB')); // (  235) e_umlaut
+      f.add(new Character('\u00EC')); // (  236) i_grave
+      f.add(new Character('\u00ED')); // (  237) i_acute
+      f.add(new Character('\u00EE')); // (  238) i_circumflex
+      f.add(new Character('\u00EF')); // (  239) i_umlaut
+      f.add(new Character('\u00F0')); // (  240) eth
+      f.add(new Character('\u00F1')); // (  241) n_tilde
+      f.add(new Character('\u00F2')); // (  242) o_grave
+      f.add(new Character('\u00F3')); // (  243) o_acute
+      f.add(new Character('\u00F4')); // (  244) o_circumflex
+      f.add(new Character('\u00F5')); // (  245) o_tilde
+      f.add(new Character('\u00F6')); // (  246) o_umlaut
+      f.add(new Character('\u00F8')); // (  248) o_slash
+      f.add(new Character('\u00F9')); // (  249) u_grave
+      f.add(new Character('\u00FA')); // (  250) u_acute
+      f.add(new Character('\u00FB')); // (  251) u_circumflex
+      f.add(new Character('\u00FC')); // (  252) u_umlaut
+      f.add(new Character('\u00FD')); // (  253) y_acute
+      f.add(new Character('\u00FE')); // (  254) thorn
+      f.add(new Character('\u00FF')); // (  255) y_umlaut
+      f.add(new Character('\u0152')); // (  338) OE_ligature
+      f.add(new Character('\u0153')); // (  339) oe_ligature
+      f.add(new Character('\u0160')); // (  352) S_caron
+      f.add(new Character('\u0161')); // (  353) s_caron
+      f.add(new Character('\u0178')); // (  376) Y_diaeresis
+   }
+
+
+   /**
+    * Initializes ordinary characters for LUWO for the CS language.
+    * @param f The HashSet
+    */
+   protected static void initCSFlags(HashSet<Character> f)
+   {
+      f.add(new Character('\u05D0')); // ( 1488) X
+      f.add(new Character('\u05D1')); // ( 1489) X
+      f.add(new Character('\u05D2')); // ( 1490) X
+      f.add(new Character('\u05D3')); // ( 1491) X
+      f.add(new Character('\u05D4')); // ( 1492) X
+      f.add(new Character('\u05D5')); // ( 1493) X
+      f.add(new Character('\u05D6')); // ( 1494) X
+      f.add(new Character('\u05D7')); // ( 1495) X
+      f.add(new Character('\u05D8')); // ( 1496) X
+      f.add(new Character('\u05D9')); // ( 1497) X
+      f.add(new Character('\u05DA')); // ( 1498) X
+      f.add(new Character('\u05DB')); // ( 1499) X
+      f.add(new Character('\u05DC')); // ( 1500) X
+      f.add(new Character('\u05DD')); // ( 1501) X
+      f.add(new Character('\u05DE')); // ( 1502) X
+      f.add(new Character('\u05DF')); // ( 1503) X
+      f.add(new Character('\u05E0')); // ( 1504) X
+      f.add(new Character('\u05E1')); // ( 1505) X
+      f.add(new Character('\u05E2')); // ( 1506) X
+      f.add(new Character('\u05E3')); // ( 1507) X
+      f.add(new Character('\u05E4')); // ( 1508) X
+      f.add(new Character('\u05E5')); // ( 1509) X
+      f.add(new Character('\u05E6')); // ( 1510) X
+      f.add(new Character('\u05E7')); // ( 1511) X
+      f.add(new Character('\u05E8')); // ( 1512) X
+      f.add(new Character('\u05E9')); // ( 1513) X
+      f.add(new Character('\u05EA')); // ( 1514) X
+      f.add(new Character('\u05F0')); // ( 1520) X
+      f.add(new Character('\u05F1')); // ( 1521) X
+      f.add(new Character('\u05F2')); // ( 1522) X
+   }
+
+   /**
+    * Initializes ordinary characters for LUWO.
+    * Has a side-effect of adding the HashSet to ordinaryFlagsSet.
+    * @return The HashSet
+    */
+   protected static HashSet<Character> initOrdinaryFlagsLUWO()
+   {
+      langsUNO = new ArrayList<String>(); // Part of workaround til we get codeset info
+      langsUNO.add("en"); //$NON-NLS-1$
+      langsUNO.add("cs"); //$NON-NLS-1$
+      langsUNO.add("de"); //$NON-NLS-1$
+      langsUNO.add("es"); //$NON-NLS-1$
+      langsUNO.add("fr"); //$NON-NLS-1$
+      langsUNO.add("hu"); //$NON-NLS-1$
+      langsUNO.add("it"); //$NON-NLS-1$
+      langsUNO.add("ja"); //$NON-NLS-1$
+      langsUNO.add("ko"); //$NON-NLS-1$
+      langsUNO.add("pl"); //$NON-NLS-1$
+      langsUNO.add("pt"); //$NON-NLS-1$
+      langsUNO.add("ru"); //$NON-NLS-1$
+      langsUNO.add("zh"); //$NON-NLS-1$
+      HashSet<Character> f = new HashSet<Character>(349);
+      ordinaryFlagsSet.put(PLATFORM_LUWO_KEY, f);
+      // First add characters for all LUWO locales:
+      f.add(new Character('\u0023')); // (   35) #
+      f.add(new Character('\u0024')); // (   36) $
+      f.add(new Character('\u0040')); // (   64) @
+      initCommonOrdinaryFlags(f);
+      // Then for the locale:
+      Locale locale = Locale.getDefault();
+      initOrdinaryFlagsLUWO(f, locale);
+      return f;
+   }
+
+   /** 
+    * Formats {0}.{1}.
+    * @param schema The schema name, in catalog format.
+    * @param name The routine name, in catalog format.
+    * @param conInfo The ConnnectionInfo.
+    * @return The qualified name in SQL format.
+    */
+   public static String getQualifiedName(String schema, String name, ConnectionInfo conInfo)
+   {
+      String sqlName = toSQLFormat(name, conInfo);
+      if (schema != null && schema.length() > 0)
+      {
+         String sqlSchema = toSQLFormat(schema, conInfo);
+         return NLS.bind(QUALIFIED_NAME_TEMPLATE, sqlSchema, sqlName);
+      }
+      else
+      {
+         return sqlName;
+      }
+   }
+
+   /** 
+    * Formats {0}.{1}.
+    * @param schema The schema name, in catalog format.
+    * @param name The routine name, in catalog format.
+    * @param dbDef Defines the database.
+    * @return The qualified name in SQL format.
+    */
+   public static String getQualifiedName(String schema, String name, DatabaseDefinition dbDef)
+   {
+      String sqlName = toSQLFormat(name, dbDef);
+      if (schema != null && schema.length() > 0)
+      {
+         String sqlSchema = toSQLFormat(schema, dbDef);
+         return NLS.bind(QUALIFIED_NAME_TEMPLATE, sqlSchema, sqlName);
+      }
+      else
+      {
+         return sqlName;
+      }
+   }
+
+   /** 
+    * Formats {0}.{1}.{2}....
+    * @param names An array of the unqualified names, in catalog format.
+    * @param conInfo The ConnnectionInfo.
+    * @return The qualified name in SQL format.
+    */
+   public static String getQualifiedName(String[] names, ConnectionInfo conInfo)
+   {
+      String sqlName1 = null;
+      int count = names.length;
+      ArrayList<String> nns = new ArrayList<String>(count);
+      int n = 0;
+      while (n < count)
+      {
+         if (names[n] != null && names[n].length() > 0)
+            nns.add(names[n]);
+         n++;
+      }
+      count = nns.size();
+      if (count > 0)
+      {
+         sqlName1 = toSQLFormat(nns.get(0), conInfo);
+         if (count > 1)
+         {
+            String sqlName2;
+            n = 1;
+            while (n < count)
+            {
+               sqlName2 = toSQLFormat(nns.get(n), conInfo);
+               sqlName1 = NLS.bind(QUALIFIED_NAME_TEMPLATE, sqlName1, sqlName2);
+               n++;
+            }
+         }
+      }
+      return sqlName1;
+   }
+
+   /** 
+    * Formats {0}.{1}.{2}....
+    * @param names An array of the unqualified names, in catalog format.
+    * @param dbDef Defines the database.
+    * @return The qualified name in SQL format.
+    */
+   public static String getQualifiedName(String[] names, DatabaseDefinition dbDef)
+   {
+      String sqlName1 = null;
+      int count = names.length;
+      ArrayList<String> nns = new ArrayList<String>(count);
+      int n = 0;
+      while (n < count)
+      {
+         if (names[n] != null && names[n].length() > 0)
+            nns.add(names[n]);
+         n++;
+      }
+      count = nns.size();
+      if (count > 0)
+      {
+         sqlName1 = toSQLFormat(nns.get(0), dbDef);
+         if (count > 1)
+         {
+            String sqlName2;
+            n = 1;
+            while (n < count)
+            {
+               sqlName2 = toSQLFormat(nns.get(n), dbDef);
+               sqlName1 = NLS.bind(QUALIFIED_NAME_TEMPLATE, sqlName1, sqlName2);
+               n++;
+            }
+         }
+      }
+      return sqlName1;
+   }
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/SimpleColumnDetails.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/SimpleColumnDetails.java
new file mode 100644
index 0000000..ef0e74b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/SimpleColumnDetails.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2002, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import org.eclipse.datatools.modelbase.sql.datatypes.DataType;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class SimpleColumnDetails {
+	public String name;
+	public String type;
+	public int length;
+	public int scale;
+
+	public SimpleColumnDetails(Column col) {
+		this.name = col.getName();
+		DataType type = col.getDataType();
+		this.type = type.getName();
+		EStructuralFeature f = type.eClass().getEStructuralFeature("length"); //$NON-NLS-1$
+		if (f != null) {
+			this.length = ((Integer) type.eGet(f)).intValue();
+		}
+		f = type.eClass().getEStructuralFeature("precision"); //$NON-NLS-1$
+		if (f != null) {
+			this.length = ((Integer) type.eGet(f)).intValue();
+		}
+		f = type.eClass().getEStructuralFeature("scale"); //$NON-NLS-1$
+		if (f != null) {
+			this.scale = ((Integer) type.eGet(f)).intValue();
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/SliceKey.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/SliceKey.java
new file mode 100644
index 0000000..8a332fc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/SliceKey.java
@@ -0,0 +1,218 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.StringTokenizer;
+
+public class SliceKey
+{
+	public static final SliceKey EMPTY = new SliceKey( new String[ 0 ] );
+
+	String[] keyvalues;
+	String keystring;
+
+	public SliceKey( String... values )
+	{
+		if ( values == null )
+		{
+			this.keyvalues = new String[ 0 ];
+		}
+		else
+		{
+			this.keyvalues = new String[ values.length ];
+
+			for ( int ii = 0; ii < values.length; ++ii )
+			{
+				if ( values[ ii ] == null )
+				{
+					values[ ii ] = ""; //$NON-NLS-1$
+				}
+
+				this.keyvalues[ ii ] = StringCache.getUniqueString( values[ ii ].trim() );
+			}
+		}
+
+		StringBuilder sb = new StringBuilder();
+
+		for ( String s : this.keyvalues )
+		{
+			if ( s == null )
+			{
+				sb.setLength( 0 );
+				break;
+			}
+
+			addKeyValue( sb, s );
+		}
+
+		this.keystring = StringCache.getUniqueString( sb.toString() );
+	}
+
+	@Override
+	public int hashCode()
+	{
+		if ( keyvalues == null )
+		{
+			return 0;
+		}
+
+		int hash = 0;
+
+		for ( int ii = 0; ii < this.keyvalues.length; ++ii )
+		{
+			hash <<= 1;
+
+			String kv = this.keyvalues[ ii ];
+
+			if ( kv != null )
+			{
+				hash ^= kv.hashCode();
+			}
+		}
+
+		return hash;
+	}
+
+	@Override
+	public boolean equals( Object o )
+	{
+		if ( this == o )
+		{
+			return true;
+		}
+
+		if ( !(o instanceof SliceKey) )
+		{
+			return false;
+		}
+
+		SliceKey other = (SliceKey)o;
+
+		if ( this.keyvalues.length != other.keyvalues.length )
+		{
+			return false;
+		}
+
+		for ( int ii = 0; ii < this.keyvalues.length; ++ii )
+		{
+			String kv1 = this.keyvalues[ ii ];
+			String kv2 = other.keyvalues[ ii ];
+
+			if ( kv1 == null )
+			{
+				if ( kv2 != null )
+				{
+					return false;
+				}
+			}
+			else if ( !kv1.equals( kv2 ) )
+			{
+				return false;
+			}
+		}
+
+		return true;
+	}
+
+	public boolean isEmpty()
+	{
+		return (this.keyvalues == null) || (this.keyvalues.length == 0);
+	}
+
+	public String toString()
+	{
+		return getKeyString();
+	}
+
+	public String getKeyString()
+	{
+		return this.keystring;
+	}
+
+	public static String[] extractFilterValues( String keystring )
+	{
+		if ( keystring == null )
+		{
+			return new String[ 0 ];
+		}
+		StringTokenizer toker = new StringTokenizer( keystring, "." ); //$NON-NLS-1$
+
+		List<String> filterValues = new ArrayList<String>();
+
+		while ( toker.hasMoreTokens() )
+		{
+			filterValues.add( decode( toker.nextToken() ) );
+		}
+
+		return filterValues.toArray( new String[ filterValues.size() ] );
+	}
+
+	private static String decode( String encoded )
+	{
+		int amp = encoded.indexOf( '&' );
+
+		if ( amp < 0 )
+		{
+			return encoded;
+		}
+
+		StringBuilder sb = new StringBuilder( encoded );
+
+		while ( (amp >= 0) && (amp < sb.length() - 1) )
+		{
+			sb.deleteCharAt( amp );
+
+			if ( sb.charAt( amp ) == 'd' )
+			{
+				sb.setCharAt( amp, '.' );
+			}
+
+			amp = sb.indexOf( "&", amp + 1 ); //$NON-NLS-1$
+		}
+
+		return sb.toString();
+	}
+
+	private static void addKeyValue( StringBuilder sb, String value )
+	{
+		if ( sb.length() > 0 )
+		{
+			sb.append( '.' );
+		}
+
+		if ( (value.indexOf( '.' ) >= 0) || (value.indexOf( '&' ) >= 0) )
+		{
+			for ( int ii = 0; ii < value.length(); ++ii )
+			{
+				char c = value.charAt( ii );
+
+				switch (c)
+				{
+					case '.':
+						sb.append( "&d" ); //$NON-NLS-1$
+						break;
+					case '&':
+						sb.append( "&&" ); //$NON-NLS-1$
+						break;
+					default:
+						sb.append( c );
+						break;
+				}
+			}
+		}
+		else
+		{
+			sb.append( value );
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/StringCache.java b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/StringCache.java
new file mode 100644
index 0000000..19ffaa4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ibm/src/org/eclipse/datatools/enablement/ibm/util/StringCache.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ibm.util;
+
+import java.lang.ref.WeakReference;
+import java.util.Map;
+import java.util.WeakHashMap;
+
+/** Cache small strings */
+public class StringCache
+{
+	// Don't keep strong references to the strings
+	private static int INITIAL_SIZE = 32768;
+	private static Map<String, WeakReference<String>> stringCache = new WeakHashMap<String, WeakReference<String>>( INITIAL_SIZE );
+
+	public static final String EMPTY = getUniqueString( "" ); //$NON-NLS-1$
+
+	/**
+	 * Get the cached object for a value
+	 * 
+	 * @return The common object, or the argument if it was not yet in the cache
+	 */
+	public static String getUniqueString( String value )
+	{
+		if ( value == null )
+		{
+			return value;
+		}
+
+		synchronized (stringCache)
+		{
+			WeakReference<String> existingRef = stringCache.get( value );
+			String existing = (existingRef != null)
+					? existingRef.get()
+					: null;
+
+			if ( existing == null )
+			{
+				stringCache.put( value, new WeakReference<String>( value ) );
+			}
+			else if ( value != existing )
+			{
+				value = existing;
+			}
+		}
+
+		return value;
+	}
+
+	private StringCache()
+	{
+		// no instances
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.dbdefinition/.project b/plugins/org.eclipse.datatools.enablement.ingres.dbdefinition/.project
new file mode 100644
index 0000000..21c9daf
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.dbdefinition/.project
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.ingres.dbdefinition</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.dbdefinition/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.enablement.ingres.dbdefinition/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..3337ce5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.dbdefinition/META-INF/MANIFEST.MF
@@ -0,0 +1,9 @@
+Manifest-Version: 1.0
+Bundle-Localization: plugin
+Bundle-ManifestVersion: 2
+Bundle-Name: %PLUGIN_NAME
+Bundle-SymbolicName: org.eclipse.datatools.enablement.ingres.dbdefinition;singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: %PROVIDER_NAME
+Eclipse-LazyStart: true
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.dbdefinition/about.html b/plugins/org.eclipse.datatools.enablement.ingres.dbdefinition/about.html
new file mode 100644
index 0000000..6f6dda3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.dbdefinition/about.html
@@ -0,0 +1,28 @@
+<html>
+<head>
+<title>About This Content</title>
+</head>
+<body>
+<div>
+<h3>About This Content</h3>
+<p>June 15, 2009</p>
+<h3>License</h3>
+<p>The Eclipse Foundation makes available all content in this plug-in
+(&quot;Content&quot;). Unless otherwise indicated below, the Content is
+provided to you under the terms and conditions of the Eclipse Public License
+Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available at <a
+href="http://www.eclipse.org/org/documents/epl-v10.php">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation,
+the Content is being redistributed by another party (&quot;Redistributor&quot;)
+and different terms and conditions may apply to your use of any object code in
+the Content. Check the RedistributorÂ’s license that was provided with the
+Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source
+code in the Content and such source code may be obtained at <a
+href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+<p>&nbsp;</p>
+</div>
+</body>
+</html>
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.dbdefinition/build.properties b/plugins/org.eclipse.datatools.enablement.ingres.dbdefinition/build.properties
new file mode 100644
index 0000000..7edb603
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.dbdefinition/build.properties
@@ -0,0 +1,6 @@
+bin.includes = META-INF/,\
+               plugin.xml,\
+               runtime/,\
+               plugin.properties,\
+               about.html
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.dbdefinition/plugin.properties b/plugins/org.eclipse.datatools.enablement.ingres.dbdefinition/plugin.properties
new file mode 100644
index 0000000..febc4aa
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.dbdefinition/plugin.properties
@@ -0,0 +1,16 @@
+################################################################################
+## Copyright (c) 2006-2007 Ingres Corporation and others.
+## All rights reserved.   This program and the accompanying materials
+## are made available under the terms of the Eclipse Public License v1.0
+## which accompanies this distribution, and is available at
+## http://www.eclipse.org/legal/epl-v10.html
+##
+## Contributors: 
+##  Ingres - Implementation
+################################################################################
+
+PLUGIN_NAME = Ingres DTP Database Definition Plug-in
+PROVIDER_NAME=Eclipse Data Tools Platform
+
+PRODUCT_DISPLAY_STRING = Ingres
+VERSION_DISPLAY_STRING = 2006
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.dbdefinition/plugin.xml b/plugins/org.eclipse.datatools.enablement.ingres.dbdefinition/plugin.xml
new file mode 100644
index 0000000..c6d9d9a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.dbdefinition/plugin.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.databaseDefinition">
+      <definition
+            file="runtime/vendors/ingres/ingres_2006.xmi"
+            product="Ingres"
+            productDisplayString="%PRODUCT_DISPLAY_STRING"
+            version="2006"
+            versionDisplayString="%VERSION_DISPLAY_STRING">
+      </definition>
+   </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.dbdefinition/runtime/vendors/ingres/ingres_2006.xmi b/plugins/org.eclipse.datatools.enablement.ingres.dbdefinition/runtime/vendors/ingres/ingres_2006.xmi
new file mode 100644
index 0000000..098ed52
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.dbdefinition/runtime/vendors/ingres/ingres_2006.xmi
@@ -0,0 +1,426 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="Ingres" version="2006" maximumIdentifierLength="32" joinSupported="true" tablespacesSupported="false" maximumCommentLength="60" sequenceSupported="true" mQTSupported="true" aliasSupported="true" synonymSupported="true" userDefinedTypeSupported="true" SQLStatementSupported="true" eventSupported="true" sqlUDFSupported="true">
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="32000" jdbcEnumType="1" javaClassName="java.lang.String" defaultLength="1">
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>C</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_2" lengthSupported="true" keyConstraintSupported="true" maximumLength="32000" jdbcEnumType="1" javaClassName="java.lang.String" defaultLength="1">
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR</name>
+    <name>CHARACTER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_2" lengthSupported="true" keyConstraintSupported="true" maximumLength="32000" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String" defaultLength="1">
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="32000" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String" defaultLength="1">
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG VARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="16000" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String" defaultLength="1">
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="15999" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String" defaultLength="1">
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NVARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_LARGE_OBJECT_1" primitiveType="NATIONAL_CHARACTER_LARGE_OBJECT" jdbcEnumType="-1" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG NVARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_3" keyConstraintSupported="true" identitySupported="true" maximumValue="127" minimumValue="-128" primitiveType="INTEGER" jdbcEnumType="-6" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TINYINT</name>
+    <name>INTEGER1</name>
+    <name>INTEGER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_4" keyConstraintSupported="true" identitySupported="true" maximumValue="-32767" minimumValue="-32768" primitiveType="INTEGER" jdbcEnumType="5" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+    <name>INTEGER2</name>
+    <name>INTEGER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" maximumValue="2147483647" minimumValue="-2147483648" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INTEGER</name>
+    <name>INTEGER4</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_2" keyConstraintSupported="true" identitySupported="true" maximumValue="9223372036854775807" minimumValue="-9223372036854775808" primitiveType="INTEGER" jdbcEnumType="-5" javaClassName="long">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIGINT</name>
+    <name>INTEGER8</name>
+    <name>INTEGER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" scaleSupported="true" precisionSupported="true" keyConstraintSupported="true" identitySupported="true" maximumPrecision="31" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal" defaultPrecision="10">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_2" keyConstraintSupported="true" maximumPrecision="23" primitiveType="REAL" jdbcEnumType="7" javaClassName="double" fieldQualifierSeparator="">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT4</name>
+    <name>REAL</name>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" maximumPrecision="53" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+    <name>FLOAT8</name>
+    <name>DOUBLE PRECISION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="91" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>ANSIDATE</name>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INGRESDATE</name>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="92" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIME WITHOUT TIME ZONE</name>
+    <name>TIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="92" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIME WITH TIME ZONE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="92" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIME WITH LOCAL TIME ZONE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP WITHOUT TIME ZONE</name>
+    <name>TIMESTAMP</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP WITH TIME ZONE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP WITH LOCAL TIME ZONE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions lengthSupported="true" keyConstraintSupported="true" maximumLength="32000" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String" defaultLength="1">
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INTERVAL YEAR TO MONTH</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions lengthSupported="true" keyConstraintSupported="true" maximumLength="32000" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String" defaultLength="1">
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INTERVAL DAY TO SECOND</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_2" precisionSupported="true" keyConstraintSupported="true" identitySupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>MONEY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions lengthSupported="true" keyConstraintSupported="true" jdbcEnumType="1" javaClassName="java.lang.String" defaultLength="16">
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TABLE_KEY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions lengthSupported="true" keyConstraintSupported="true" jdbcEnumType="1" javaClassName="java.lang.String" defaultLength="16">
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>OBJECT_KEY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" keyConstraintSupported="true" maximumLength="32000" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BYTE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_1" keyConstraintSupported="true" maximumLength="32000" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BYTE VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_1" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="-4" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONG BYTE</name>
+  </predefinedDataTypeDefinitions>
+  <storedProcedureDefinition/>
+  <triggerDefinition/>
+  <columnDefinition identitySupported="true" identityIncrementSupported="true"/>
+  <constraintDefinition clusteredPrimaryKeySupported="true" clusteredUniqueConstraintSupported="true" primaryKeyNullable="true" uniqueKeyNullable="true">
+    <parentUpdateDRIRuleType>RESTRICT</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>CASCADE</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>SET_NULL</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>RESTRICT</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>SET_NULL</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+  </constraintDefinition>
+  <indexDefinition/>
+  <tableDefinition/>
+  <udtDefinition/>
+  <queryDefinition identifierQuoteString="&quot;" hostVariableMarker="@" hostVariableMarkerSupported="true"/>
+  <SQLSyntaxDefinition>
+    <keywords>ADD</keywords>
+    <keywords>ALL</keywords>
+    <keywords>ALTER</keywords>
+    <keywords>ANALYZE</keywords>
+    <keywords>AND</keywords>
+    <keywords>AS</keywords>
+    <keywords>ASC</keywords>
+    <keywords>ASENSITIVE</keywords>
+    <keywords>BEFORE</keywords>
+    <keywords>BETWEEN</keywords>
+    <keywords>BIGINT</keywords>
+    <keywords>BINARY</keywords>
+    <keywords>BLOB</keywords>
+    <keywords>BOTH</keywords>
+    <keywords>BY</keywords>
+    <keywords>CALL</keywords>
+    <keywords>CASCADE</keywords>
+    <keywords>CASE</keywords>
+    <keywords>CHANGE</keywords>
+    <keywords>CHAR</keywords>
+    <keywords>CHARACTER</keywords>
+    <keywords>CHECK</keywords>
+    <keywords>COLLATE</keywords>
+    <keywords>COLUMN</keywords>
+    <keywords>CONDITION</keywords>
+    <keywords>CONNECTION</keywords>
+    <keywords>CONSTRAINT</keywords>
+    <keywords>CONTINUE</keywords>
+    <keywords>CONVERT</keywords>
+    <keywords>CREATE</keywords>
+    <keywords>CROSS</keywords>
+    <keywords>CURRENT_DATE</keywords>
+    <keywords>CURRENT_TIME</keywords>
+    <keywords>CURRENT_TIMESTAMP</keywords>
+    <keywords>CURRENT_USER</keywords>
+    <keywords>CURSOR</keywords>
+    <keywords>DATABASE</keywords>
+    <keywords>DATABASES</keywords>
+    <keywords>DAY_HOUR</keywords>
+    <keywords>DAY_MICROSECOND</keywords>
+    <keywords>DAY_MINUTE</keywords>
+    <keywords>DAY_SECOND</keywords>
+    <keywords>DEC</keywords>
+    <keywords>DECIMAL</keywords>
+    <keywords>DECLARE</keywords>
+    <keywords>DEFAULT</keywords>
+    <keywords>DELAYED</keywords>
+    <keywords>DELETE</keywords>
+    <keywords>DESC</keywords>
+    <keywords>DESCRIBE</keywords>
+    <keywords>DETERMINISTIC</keywords>
+    <keywords>DISTINCT</keywords>
+    <keywords>DISTINCTROW</keywords>
+    <keywords>DIV</keywords>
+    <keywords>DOUBLE</keywords>
+    <keywords>DROP</keywords>
+    <keywords>DUAL</keywords>
+    <keywords>EACH</keywords>
+    <keywords>ELSE</keywords>
+    <keywords>ELSEIF</keywords>
+    <keywords>ENCLOSED</keywords>
+    <keywords>ESCAPED</keywords>
+    <keywords>EXISTS</keywords>
+    <keywords>EXIT</keywords>
+    <keywords>EXPLAIN</keywords>
+    <keywords>FALSE</keywords>
+    <keywords>FETCH</keywords>
+    <keywords>FLOAT</keywords>
+    <keywords>FOR</keywords>
+    <keywords>FORCE</keywords>
+    <keywords>FOREIGN</keywords>
+    <keywords>FROM</keywords>
+    <keywords>FULLTEXT</keywords>
+    <keywords>GOTO</keywords>
+    <keywords>GRANT</keywords>
+    <keywords>GROUP</keywords>
+    <keywords>HAVING</keywords>
+    <keywords>HIGH_PRIORITY</keywords>
+    <keywords>HOUR_MICROSECOND</keywords>
+    <keywords>HOUR_MINUTE</keywords>
+    <keywords>HOUR_SECOND</keywords>
+    <keywords>IF</keywords>
+    <keywords>IGNORE</keywords>
+    <keywords>IN</keywords>
+    <keywords>INDEX</keywords>
+    <keywords>INFILE</keywords>
+    <keywords>INNER</keywords>
+    <keywords>INOUT</keywords>
+    <keywords>INSENSITIVE</keywords>
+    <keywords>INSERT</keywords>
+    <keywords>INT</keywords>
+    <keywords>INTEGER</keywords>
+    <keywords>INTERVAL</keywords>
+    <keywords>INTO</keywords>
+    <keywords>IS</keywords>
+    <keywords>ITERATE</keywords>
+    <keywords>JOIN</keywords>
+    <keywords>KEY</keywords>
+    <keywords>KEYS</keywords>
+    <keywords>KILL</keywords>
+    <keywords>LEADING</keywords>
+    <keywords>LEAVE</keywords>
+    <keywords>LEFT</keywords>
+    <keywords>LIKE</keywords>
+    <keywords>LIMIT</keywords>
+    <keywords>LINES</keywords>
+    <keywords>LOAD</keywords>
+    <keywords>LOCALTIME</keywords>
+    <keywords>LOCALTIMESTAMP</keywords>
+    <keywords>LOCK</keywords>
+    <keywords>LONG</keywords>
+    <keywords>LONGBLOB</keywords>
+    <keywords>LONGTEXT</keywords>
+    <keywords>LOOP</keywords>
+    <keywords>LOW_PRIORITY</keywords>
+    <keywords>MATCH</keywords>
+    <keywords>MEDIUMBLOB</keywords>
+    <keywords>MEDIUMINT</keywords>
+    <keywords>MEDIUMTEXT</keywords>
+    <keywords>MIDDLEINT</keywords>
+    <keywords>MINUTE_MICROSECOND</keywords>
+    <keywords>MINUTE_SECOND</keywords>
+    <keywords>MOD</keywords>
+    <keywords>MODIFIES</keywords>
+    <keywords>NATURAL</keywords>
+    <keywords>NOT</keywords>
+    <keywords>NO_WRITE_TO_BINLOG</keywords>
+    <keywords>NULL</keywords>
+    <keywords>NUMERIC</keywords>
+    <keywords>ON</keywords>
+    <keywords>OPTIMIZE</keywords>
+    <keywords>OPTION</keywords>
+    <keywords>OPTIONALLY</keywords>
+    <keywords>OR</keywords>
+    <keywords>ORDER</keywords>
+    <keywords>OUT</keywords>
+    <keywords>OUTER</keywords>
+    <keywords>OUTFILE</keywords>
+    <keywords>PRECISION</keywords>
+    <keywords>PRIMARY</keywords>
+    <keywords>PROCEDURE</keywords>
+    <keywords>PURGE</keywords>
+    <keywords>READ</keywords>
+    <keywords>READS</keywords>
+    <keywords>REAL</keywords>
+    <keywords>REFERENCES</keywords>
+    <keywords>REGEXP</keywords>
+    <keywords>RELEASE</keywords>
+    <keywords>RENAME</keywords>
+    <keywords>REPEAT</keywords>
+    <keywords>REPLACE</keywords>
+    <keywords>REQUIRE</keywords>
+    <keywords>RESTRICT</keywords>
+    <keywords>RETURN</keywords>
+    <keywords>REVOKE</keywords>
+    <keywords>RIGHT</keywords>
+    <keywords>RLIKE</keywords>
+    <keywords>SCHEMA</keywords>
+    <keywords>SCHEMAS</keywords>
+    <keywords>SECOND_MICROSECOND</keywords>
+    <keywords>SELECT</keywords>
+    <keywords>SENSITIVE</keywords>
+    <keywords>SEPARATOR</keywords>
+    <keywords>SET</keywords>
+    <keywords>SHOW</keywords>
+    <keywords>SMALLINT</keywords>
+    <keywords>SONAME</keywords>
+    <keywords>SPATIAL</keywords>
+    <keywords>SPECIFIC</keywords>
+    <keywords>SQL</keywords>
+    <keywords>SQLEXCEPTION</keywords>
+    <keywords>SQLSTATE</keywords>
+    <keywords>SQLWARNING</keywords>
+    <keywords>SQL_BIG_RESULT</keywords>
+    <keywords>SQL_CALC_FOUND_ROWS</keywords>
+    <keywords>SQL_SMALL_RESULT</keywords>
+    <keywords>SSL</keywords>
+    <keywords>STARTING</keywords>
+    <keywords>STRAIGHT_JOIN</keywords>
+    <keywords>TABLE</keywords>
+    <keywords>TERMINATED</keywords>
+    <keywords>THEN</keywords>
+    <keywords>TINYBLOB</keywords>
+    <keywords>TINYINT</keywords>
+    <keywords>TINYTEXT</keywords>
+    <keywords>TO</keywords>
+    <keywords>TRAILING</keywords>
+    <keywords>TRIGGER</keywords>
+    <keywords>TRUE</keywords>
+    <keywords>UNDO</keywords>
+    <keywords>UNION</keywords>
+    <keywords>UNIQUE</keywords>
+    <keywords>UNLOCK</keywords>
+    <keywords>UNSIGNED</keywords>
+    <keywords>UPDATE</keywords>
+    <keywords>USAGE</keywords>
+    <keywords>USE</keywords>
+    <keywords>USING</keywords>
+    <keywords>UTC_DATE</keywords>
+    <keywords>UTC_TIME</keywords>
+    <keywords>UTC_TIMESTAMP</keywords>
+    <keywords>VALUES</keywords>
+    <keywords>VARBINARY</keywords>
+    <keywords>VARCHAR</keywords>
+    <keywords>VARCHARACTER</keywords>
+    <keywords>VARYING</keywords>
+    <keywords>WHEN</keywords>
+    <keywords>WHERE</keywords>
+    <keywords>WHILE</keywords>
+    <keywords>WITH</keywords>
+    <keywords>WRITE</keywords>
+    <keywords>XOR</keywords>
+    <keywords>YEAR_MONTH</keywords>
+    <keywords>ZEROFILL</keywords>
+    <operators>:=</operators>
+    <operators>||</operators>
+    <operators>OR</operators>
+    <operators>XOR</operators>
+    <operators>&amp;&amp;</operators>
+    <operators>AND</operators>
+    <operators>NOT</operators>
+    <operators>BETWEEN</operators>
+    <operators>CASE</operators>
+    <operators>WHEN</operators>
+    <operators>THEN</operators>
+    <operators>ELSE</operators>
+    <operators>=</operators>
+    <operators>&lt;=></operators>
+    <operators>>=</operators>
+    <operators>></operators>
+    <operators>&lt;=</operators>
+    <operators>&lt;</operators>
+    <operators>&lt;></operators>
+    <operators>!=</operators>
+    <operators>IS</operators>
+    <operators>LIKE</operators>
+    <operators>REGEXP</operators>
+    <operators>IN</operators>
+    <operators>|</operators>
+    <operators>&amp;</operators>
+    <operators>&lt;&lt;</operators>
+    <operators>>></operators>
+    <operators>-</operators>
+    <operators>+</operators>
+    <operators>*</operators>
+    <operators>/</operators>
+    <operators>DIV</operators>
+    <operators>%</operators>
+    <operators>MOD</operators>
+    <operators>^</operators>
+    <operators>~</operators>
+    <operators>!</operators>
+    <operators>BINARY</operators>
+    <operators>COLLATE</operators>
+  </SQLSyntaxDefinition>
+</DBDefinition:DatabaseVendorDefinition>
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/.classpath b/plugins/org.eclipse.datatools.enablement.ingres.ui/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/.project b/plugins/org.eclipse.datatools.enablement.ingres.ui/.project
new file mode 100644
index 0000000..406fd55
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.ingres.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.enablement.ingres.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..57d0392
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Tue Apr 01 11:09:25 CEST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.3
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.enablement.ingres.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..5462d1e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,31 @@
+Manifest-Version: 1.0
+Bundle-Localization: plugin
+Bundle-ManifestVersion: 2
+Bundle-Name: %PLUGIN_NAME
+Bundle-SymbolicName: org.eclipse.datatools.enablement.ingres.ui;singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-Vendor: %PROVIDER_NAME
+Eclipse-LazyStart: true
+Require-Bundle: org.eclipse.datatools.connectivity.db.generic.ui,
+ org.eclipse.datatools.connectivity.ui,
+ org.eclipse.ui,
+ org.eclipse.datatools.connectivity,
+ org.eclipse.datatools.connectivity.db.generic,
+ org.eclipse.datatools.connectivity.sqm.core.ui,
+ org.eclipse.datatools.connectivity.sqm.core,
+ org.eclipse.core.runtime,
+ org.eclipse.datatools.enablement.ingres,
+ org.eclipse.ui.navigator,
+ org.eclipse.datatools.connectivity.sqm.server.ui,
+ org.eclipse.emf.common,
+ org.eclipse.datatools.modelbase.sql,
+ org.eclipse.datatools.sqltools.sqleditor,
+ org.eclipse.datatools.sqltools.sql,
+ org.eclipse.datatools.sqltools.editor.core,
+ org.eclipse.datatools.sqltools.plan,
+ org.eclipse.datatools.sqltools.routineeditor,
+ org.eclipse.debug.core,
+ org.eclipse.datatools.sqltools.routineeditor.ui,
+ org.eclipse.datatools.sqltools.editor.core.ui,
+ org.eclipse.datatools.sqltools.sql.ui
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/about.html b/plugins/org.eclipse.datatools.enablement.ingres.ui/about.html
new file mode 100644
index 0000000..6f6dda3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/about.html
@@ -0,0 +1,28 @@
+<html>
+<head>
+<title>About This Content</title>
+</head>
+<body>
+<div>
+<h3>About This Content</h3>
+<p>June 15, 2009</p>
+<h3>License</h3>
+<p>The Eclipse Foundation makes available all content in this plug-in
+(&quot;Content&quot;). Unless otherwise indicated below, the Content is
+provided to you under the terms and conditions of the Eclipse Public License
+Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available at <a
+href="http://www.eclipse.org/org/documents/epl-v10.php">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation,
+the Content is being redistributed by another party (&quot;Redistributor&quot;)
+and different terms and conditions may apply to your use of any object code in
+the Content. Check the RedistributorÂ’s license that was provided with the
+Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source
+code in the Content and such source code may be obtained at <a
+href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+<p>&nbsp;</p>
+</div>
+</body>
+</html>
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/build.properties b/plugins/org.eclipse.datatools.enablement.ingres.ui/build.properties
new file mode 100644
index 0000000..fc498a2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/build.properties
@@ -0,0 +1,9 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               plugin.xml,\
+               plugin.properties,\
+               .,\
+               about.html,\
+               icons/
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/grammar/sql.jjt b/plugins/org.eclipse.datatools.enablement.ingres.ui/grammar/sql.jjt
new file mode 100644
index 0000000..f508459
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/grammar/sql.jjt
@@ -0,0 +1,2603 @@
+/*******************************************************************************

+ * Copyright (c) 2006, 2007 Ingres Corporation and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *    Ingres Corporation - initial API and implementation

+ *******************************************************************************/

+

+options{

+    STATIC=false;

+    MULTI=true;

+    NODE_DEFAULT_VOID=true;

+    NODE_SCOPE_HOOK=true;

+    VISITOR=true;

+    IGNORE_CASE=true;

+}

+PARSER_BEGIN(IngresSQLParser)

+

+package org.eclipse.datatools.enablement.ingres.internal.ui.parser;

+

+import java.util.ArrayList;

+import java.io.StringReader;

+

+import org.eclipse.datatools.sqltools.sql.parser.SQLParser;

+import org.eclipse.datatools.sqltools.sql.parser.ast.Node;

+import org.eclipse.datatools.sqltools.sql.parser.ast.SimpleNode;

+import org.eclipse.datatools.sqltools.sql.parser.ParseException;

+import org.eclipse.datatools.sqltools.sql.parser.SQLParserConstants;

+import org.eclipse.datatools.sqltools.sql.parser.JavaCharStream;

+import org.eclipse.datatools.sqltools.sql.parser.Token;

+import org.eclipse.datatools.sqltools.sql.parser.TokenMgrError;

+import org.eclipse.datatools.sqltools.sql.parser.ParsingResult;

+import org.eclipse.datatools.sqltools.sql.parser.util.ParserUtil;

+import org.eclipse.datatools.sqltools.sql.parser.ParserParameters;

+

+

+/**

+ * Ingres SQL parser.

+ *

+ * @author stefan.reddig@ingres.com

+ */

+public class IngresSQLParser extends SQLParser implements SQLParserConstants

+{

+	private static IngresSQLParser _instance = new IngresSQLParser(new StringReader(""));

+    private boolean _debug = false;

+

+    private ParsingResult result = null;

+    private ArrayList exceptions = new ArrayList();

+    private ArrayList knownExceptions = new ArrayList();

+	private static final int[] STMT_START = new int[]{ALTER, //BEGIN,

+		CLOSE, COMMIT, //CONTINUE,

+		CREATE,

+		DECLARE, DELETE, 

+		DROP, //DUMP, 

+		EXECUTE, EXEC,

+		FETCH, //GOTO, GRANT, 

+		IF, INSERT, //KILL, LOAD, 

+		OPEN, PREPARE, //MOUNT, PRINT, 

+		REMOVE,RETURN, REVOKE, ROLLBACK, SAVE, SELECT, SET, 

+		UPDATE, //UNMOUNT,

+		WHILE

+				 };

+    

+	public static final String[] STMT_START_STRING = new String[]{"ALTER",//"BEGIN",

+	"CLOSE","COMMIT", //"CONTINUE",

+	"CREATE",

+	"DECLARE","DELETE",

+	"DROP",//"DUMP",

+	"EXECUTE","EXEC",

+	"FETCH",//"GOTO","GRANT",

+	"IF","INSERT",//"KILL","LOAD",

+	"OPEN","PREPARE",//"PRINT",

+	"REMOVE","RETURN","REVOKE","ROLLBACK","SAVE","SELECT","SET",

+	"UPDATE",

+	"WHILE"

+				 };

+    

+	private static final int[] DEFINED_STMT_START = new int[]{ALTER, //BEGIN, 

+		CREATE, DECLARE, DELETE, EXECUTE, EXEC, 

+		FETCH, IF, INSERT, //PRINT, 

+		RETURN, SELECT, UPDATE

+				 };

+

+	private static final int[] TERMINATORS = new int[]{GO, SEMICOLON};

+	private static final String[] TERMINATORS_STRING = new String[]{"\\g", ";"};

+	private static int[] STMT_START_TERMINATORS = new int[STMT_START.length + TERMINATORS.length];

+	

+	static 

+	{

+		System.arraycopy(STMT_START, 0, STMT_START_TERMINATORS, 0, STMT_START.length);

+		System.arraycopy(TERMINATORS, 0, STMT_START_TERMINATORS, STMT_START.length, TERMINATORS.length);

+	}

+

+	//FIXME do we need this field?

+	private boolean isContentAssist = true;

+	

+    /*

+    * Singleton

+    */

+    public static IngresSQLParser getInstance(){

+    	return _instance;

+    }

+    

+    public IngresSQLParser()

+    {

+    }

+

+	//Implements JavaCC methods

+    void jjtreeOpenNodeScope(Node n)

+    {

+      ((SimpleNode)n).setFirstToken ( getToken(1));

+    }

+

+    void jjtreeCloseNodeScope(Node n)

+    {

+      ((SimpleNode)n).setLastToken( getToken(0));

+    }

+    

+    //Implements SQLParser abstract methods

+    /**

+	 * Returns the statement terminator array. Different vendors will have their

+	 * own terminators defined, so we just leave this method as abstract here.

+	 * 

+	 * @return statement terminator array

+	 */

+    public String[] getStatementTerminators()

+    {

+    	return TERMINATORS_STRING;

+    }

+    

+    /**

+     * Returns the token strings that can be used to begin a SQL statement. 

+     * 

+     * @return statement start token array

+     */

+    public String[] getStatementStartTokens()

+    {

+    	return STMT_START_STRING;

+    }

+    

+    /**

+     * Concrete parsers must imlement this method to do the real parsing.

+     * @param text sql text to be parsed.

+     * @return <code>ParsingResult</code> containing root AST node and <code>ParseException</code>s.

+     */

+    protected synchronized ParsingResult doParse(String text)

+    {

+    	java.io.StringReader sr = new java.io.StringReader( text );

+		java.io.Reader r = new java.io.BufferedReader( sr );

+		//ReInit will be generated by JavaCC

+		ReInit(r);

+    	initParsing();

+    	return startIgnoreException();

+    }

+    

+    

+    //Other methods

+    private ParsingResult startIgnoreException()

+    {

+    	

+    	Node node = new ASTStart(JJTSTART);

+        try

+        {

+			node = startRootIgnoreException();

+        }catch (ParseException e) {

+            exceptions.add(e);

+		}

+		catch (TokenMgrError t)

+		{

+		    ParseException e = new ParseException(t.getMessage());

+		    if (token == null){

+		    	//when the error token occurs at the beginning

+		    	e.currentToken = new Token();

+		    }else{

+			    e.currentToken = token;

+		    }

+		    if (t.getToken() != null){

+		        e.currentToken.next = t.getToken();

+		    }else{

+		        Token errtoken = new Token();

+		        errtoken.beginLine = token.endLine;

+		        errtoken.beginColumn = token.endColumn + 1;

+		        errtoken.endLine = token.endLine;

+		        errtoken.endColumn = token.endColumn + 1;

+		        e.currentToken.next = errtoken;

+		    }

+		    exceptions.add(e);

+		}

+		catch (Throwable t)

+		{ 

+			// Activator.getDefault().log(t);

+		}

+

+        Boolean consumeException = (Boolean)getParameters().getProperty(ParserParameters.PARAM_CONSUME_EXCEPTION);

+        result.setRootNode(node);

+        if ( consumeException == null || consumeException.booleanValue())

+        {

+        	result.setExceptions(knownExceptions);

+        }

+        else

+        {

+        	result.setExceptions(exceptions);

+        }

+    	return result;

+    }

+

+	private void initParsing(){

+		result = new IngresParsingResult();

+		exceptions = new ArrayList();

+		knownExceptions = new ArrayList();

+	}

+	

+	private boolean isSupportedStatementStartToken(int kind)

+	{

+		for (int i=0; i<DEFINED_STMT_START.length; i++)

+		{

+			if (kind == DEFINED_STMT_START[i])

+			{

+				return true;

+			}

+		}

+		return false;

+	}

+

+	private boolean isStatementStartToken(int kind)

+	{

+		for (int i=0; i<STMT_START.length; i++)

+		{

+			if (kind == STMT_START[i])

+			{

+				return true;

+			}

+		}

+		return false;

+	}

+

+	private boolean isStatementToken(int kind)

+	{

+		if (kind == 0 || isStatementStartToken(kind))

+		{

+			return false;

+		}

+

+		for (int i=0; i<TERMINATORS.length; i++)

+		{

+			if (kind == TERMINATORS[i])

+			{

+				return false;

+			}

+		}

+		return true;

+	}

+	

+	private boolean check(String unReservedKeyword)

+  	{

+    Token currentToken = getToken(1);

+    int currentTokenKind = currentToken.kind;

+    String currentTokenImage = currentToken.image;

+    if (currentTokenKind == ID && currentTokenImage.equalsIgnoreCase(unReservedKeyword))

+    {

+        return true;

+    }

+	if (currentTokenKind == INVALID_TOKEN)

+	{

+		  result.addExpectedUnreservedKeywords(unReservedKeyword);

+	}

+    return false;

+    }

+	

+	  private boolean check(int type, String multiKeyword)

+  {

+	return check(type, new String[]{multiKeyword});

+  }

+  	

+  /**

+  *multiKeywords will show as content assist proposal

+  */	

+  private boolean check(int type, String[] multiKeywords)

+  {

+    Token currentToken = getToken(1);

+    int currentTokenKind = currentToken.kind;

+    String currentTokenImage = currentToken.image;

+    if (currentTokenKind == type)

+    {

+        return true;

+    }

+	if (currentTokenKind == INVALID_TOKEN)

+	{

+		for (int i=0; i< multiKeywords.length; i++)

+		{

+    		result.addExpectedUnreservedKeywords(multiKeywords[i]);

+        }

+	}

+    return false;

+  }  	

+

+    final private void logDebug(String message)

+    {

+	    if (_debug)

+		{

+			//Activator.getDefault().log(message);

+		}

+    }

+

+	

+}

+

+PARSER_END(IngresSQLParser)

+

+SKIP:

+{

+    " "

+  | "\n"

+  | "\r"

+  | "\t"

+  | "\f"

+}

+

+

+  /* COMMENTS */

+ 

+  MORE :

+    {

+  	"--" : IN_SINGLE_LINE_COMMENT

+    }

+    

+  <IN_SINGLE_LINE_COMMENT>

+  SPECIAL_TOKEN :

+  {

+

+    <SINGLE_LINE_COMMENT: "\n" | "\r" | "\r\n"  > : DEFAULT

+

+  }

+  

+  <IN_SINGLE_LINE_COMMENT>

+  MORE :

+  {

+    < ~[] >

+  }

+/* 

+  SPECIAL_TOKEN :

+  {

+    < SINGLE_LINE_COMMENT: "--"(~["\n","\r"])* ("\n"|"\r"|"\r\n")? > 

+  } 

+*/

+    TOKEN_MGR_DECLS : {

+	    int commentNestingDepth = 0 ; 

+	}

+	MORE : {  "/*" { commentNestingDepth = 1 ; } : IN_MULTI_LINE_COMMENT }

+	

+	< IN_MULTI_LINE_COMMENT >  MORE : {  "/*" { commentNestingDepth += 1 ; } }

+	< IN_MULTI_LINE_COMMENT >  SPECIAL_TOKEN : {  "*/" {

+		commentNestingDepth -= 1;

+	    SwitchTo( commentNestingDepth==0 ? DEFAULT : IN_MULTI_LINE_COMMENT ); } } 

+	< IN_MULTI_LINE_COMMENT >  MORE : { <COMMENT_CONTENT: ~[]> {} }		 

+

+TOKEN:

+{

+	< INVALID_TOKEN: "!%^&" >	//Using token will always causes exception

+| < ADD: "add" >

+| < ALTER: "alter" >

+| < AND: "and" >

+| < ANY: "any" >

+| < AS: "as" >

+| < ASC: "asc" >

+| < AT: "at" >

+| < AUTHORIZATION: "authorization" >

+| < AVG: "avg" >

+| < BEGIN: "begin" >

+| < BETWEEN: "between" >

+| < BY: "by" >

+| < CASCADE: "cascade" >

+| < CASE: "case" >

+| < CHECK: "check" >

+| < CHECKPOINT: "checkpoint" >

+| < CLOSE: "close" >

+| < COALESCE: "coalesce" >

+| < COMMIT: "commit" >

+| < CONSTRAINT: "constraint" >

+| < CONTINUE: "continue" >

+| < COUNT: "count" >

+| < CREATE: "create" >

+| < CURRENT: "current" >

+| < CURSOR: "cursor" >

+| < DATABASE: "database" >

+| < DBEVENT: "dbevent" >

+| < DECLARE: "declare" >

+| < DEFAULT_VAL: "default" >

+| < DELETE: "delete" >

+| < DESC: "desc" >

+| < DISTINCT: "distinct" >

+| < DOMAIN: "domain" >

+| < DROP: "drop" >

+| < DUMP: "dump" >

+| < ELSE: "else" >

+| < END: "end" >

+| < ESCAPE: "escape" >

+| < EXCEPT: "except" >

+| < EXCLUSIVE: "exclusive" >

+| < EXEC: "exec" >

+| < EXECUTE: "execute" >

+| < EXISTS: "exists" >

+| < FETCH: "fetch" >

+| < FILLFACTOR: "fillfactor" >

+| < FOR: "for" >

+| < FOREIGN: "foreign" >

+| < FROM: "from" >

+| < FUNC: "func" >

+| < FUNCTION: "function" >

+| < GO: "\\g" > //terminator

+| < GOTO: "goto" >

+| < GRANT: "grant" >

+| < GROUP: "group" >

+| < HAVING: "having" >

+| < IF: "if" >

+| < IN: "in" >

+| < INDEX: "index" >

+| < INSERT: "insert" >

+| < INTERSECT: "intersect" >

+| < INTEGRITY: "integrity" >

+| < INTO: "into" >

+| < IS: "is" >

+| < ISOLATION: "isolation" >

+| < JOIN: "join" >

+| < KEY: "key" >

+| < KILL: "kill" >

+| < LEVEL: "level" >

+| < LIKE: "like" >

+| < LOAD: "load" >

+| < LOCATION: "location" >

+| < MAX: "max" >

+| < MIN: "min" >

+| < MODIFY: "modify" >

+| < NO: "no" >

+| < NOT: "not" >

+| < NULL: "null" >

+| < NULLIF: "nullif" >

+| < OF: "of" >

+| < OFF: "off" >

+| < ON: "on" >

+| < ONLY: "only" >

+| < OPEN: "open" >

+| < OPTION: "option" >

+| < OR: "or" >

+| < ORDER: "order" >

+| < OUT: "out" >

+| < OUTPUT: "output" >

+| < PARTITION: "partition" >

+| < PERM: "perm" >

+| < PERMANENT: "permanent" >

+| < PREPARE: "prepare" >

+| < PRIMARY: "primary" >

+| < PRIVILEGES: "privileges" >

+| < PRINT: "print" >

+| < PROCEDURE: "procedure" >

+| < PROFILE: "profile" >

+| < PUBLIC: "public" >

+| < READ: "read" >

+| < REFERENCES: "references" >

+| < REMOVE: "remove" >

+| < REORGANIZE: "reorganize" >

+| < RETURN: "return" >

+| < REVOKE: "revoke" >

+| < ROLE: "role" >

+| < ROLLBACK: "rollback" >

+| < ROWCOUNT: "rowcount" >

+| < ROWS: "rows" >

+| < RULE: "rule" >

+| < SAVE: "save" >

+| < SCHEMA: "schema" >

+| < SECURITY_AUDIT: "security_audit" >

+| < SECURITY_ALARM: "security_alarm" >

+| < SELECT: "select" >

+| < SEQUENCE: "sequence" >

+| < SESSION: "session" >

+| < SET: "set" >

+| < SHARED: "shared" >

+| < SOME: "some" >

+| < STATISTICS: "statistics" >

+| < SUM: "sum" >

+| < SYNONYM: "synonym" >

+| < TABLE: "table" >

+| < TEMPORARY: "temporary" >

+| < TO: "to" >

+| < TRANSACTION: "transaction" >

+| < UNION: "union" >

+| < UNIQUE: "unique" >

+| < UNPARTITION: "unpartition" >

+| < UPDATE: "update" >

+| < USER: "user" >

+| < USING: "using" >

+| < VALUES: "values" >

+| < VARYING: "varying" >

+| < VIEW: "view" >

+| < WHEN: "when" >

+| < WHERE: "where" >

+| < WHILE: "while" >

+| < WITH: "with" >

+| < WORK: "work" >

+| < II_DBA: "$dba">

+| < II_INGRES: "$ingres" >

+    }

+    

+/*    

+    <DESCRIPTION_START_STATE> TOKEN:

+    {

+      < OPENDESCRIPTION: "\r\n" > : DESCRIPTION_STATE

+    }

+*/    

+    

+   // <DESCRIPTION_STATE> TOKEN:  /* Line */

+/*   

+    {

+        < CLOSEDESCRIPTION: "~" > : DEFAULT

+      | < DESCRIPTION: (~["~"])* "~" > : DEFAULT

+    }

+*/    

+

+    TOKEN:  /* Literals */

+    {

+        < INTEGER_LITERAL: (["0"-"9"])+ >

+      | < FLOATING_POINT_LITERAL:

+              (["0"-"9"])+ "." (["0"-"9"])* (<EXPONENT>)?

+            | "." (["0"-"9"])+ (<EXPONENT>)?

+            | (["0"-"9"])+ (<EXPONENT>)?

+        >

+      | < #EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+ >

+      | < SINGLE_STRING_LITERAL: "'" (~["'"])* ( "''" (~["'"])* )* "'" >

+      | < DOUBLE_STRING_LITERAL: "\"" (~["\""])* ( "\"\"" (~["\""])* )* "\"" >

+      | < BINARY_LITERAL: "0" ("x" | "X" ) ( <HEXDIGIT> )+ >

+      | < #HEXDIGIT: ["A"-"F", "a"-"f", "0"-"9"] >

+      | < MONEY_LITERAL: ("$" | "\u00a5" | "\u00a3" )? <FLOATING_POINT_LITERAL> >

+    }

+	Token string_literal() : {Token t;}

+	{

+		( t = <SINGLE_STRING_LITERAL> | t = <DOUBLE_STRING_LITERAL> )

+		{return t;}

+	}

+	

+	TOKEN:  /* Identifiers */

+    {

+      < ID: ( <LETTER> | "_" )+ ( <SYMBOL> | <DIGIT> | <LETTER> | "#" | "@" )* >

+	  |	< SQUARE_BRACKET_ID: ("[" <ID> "]")>

+      |	< #VAR_NAME_BODY: ( <SYMBOL> | <DIGIT> | <LETTER> | "#" )+  ( <SYMBOL> | <DIGIT> | <LETTER> | "#" | "@" )* >  

+      |	< VAR_NAME: "@"<VAR_NAME_BODY> >

+      |	< LABEL: <ID>":" >

+      |	< GLOBAL_VAR_NAME: "@@"<VAR_NAME_BODY> >

+      |	< TEMP_TABLE_NAME: "#" ( <SYMBOL> | <DIGIT> | <LETTER> | "#" | "@" )+  >

+      /*FIXME: Unicode code point ranges from 0000 to 10ffff, but JavaCC seems only recognize four digits following "u". Not sure what the consequence will be for now.*/

+//      | < #LETTER: ["A"-"Z", "a"-"z", "\u0080"-"\uffff"] > //Umlaute?!?

+      | < #LETTER: ["A"-"Z", "a"-"z", "ä", "Ä", "ö", "Ö", "ü", "Ü","ß","\u0080"-"\uffff"] >

+      | < #DIGIT: ["0"-"9"] >

+      | < #SYMBOL: ["$","_"] >

+    }

+

+    TOKEN: /* Ingres specific Identifiers */

+    {

+    	//32chars max, unique til 24.char

+    	//start with letter or "_", contain "#", "@", "$", digits, no keywords

+    	//delimited-> "", additional: keywords, specsymb

+    	< #SPECSYMB:

+    	   ["&", "*", "@", ":", ",", "#", "=", "/", "<", ">", "(", ")", "-", "%", ".", "+", "?",

+    		"'"," ", "_", "|", "\\","^", "{", "}", "!", "~"]> //+ASCII96, never ASCII127 aka DEL

+		|< #DELIM_START: ( <SPECSYMB> | <DIGIT> | <LETTER> )* > //no $ allowed

+		|< #DELIM_PART: ( <SPECSYMB> | <DIGIT> | <LETTER> | "$" )* >

+    	|< DELIM_IDENT: "\"" ( <DELIM_START> )* ("\"\"" (<DELIM_PART>)* )* "\"">

+    }

+

+    

+    TOKEN:  /* Separators and operators */

+    {

+       < CONCAT: "||" >

+      | < COMMA: "," >

+      | < SEMICOLON: ";" >

+      | < DOT: "." >

+      | < ROWTYPE: "%rowtype" >

+      | < TILDE: "~" >

+      | < LESS: "<" >

+      | < LESSEQUAL: "<=" >

+      | < GREATER: ">" >

+      | < GREATEREQUAL: ">=" >

+      | < EQUAL: "=" >

+      | < NOTEQUAL: "!=" >

+      | < JOINPLUS: "(+)" >

+      | < OPENPAREN: "(" >

+      | < CLOSEPAREN: ")" >

+      | < ASTERISK: "*" >

+      | < SLASH: "/" >

+      | < PLUS: "+" >

+      | < MINUS: "-" >

+      | < QUESTIONMARK: "?" >

+	  | < LEQJOIN: "*="> //FIXME: 

+	  | < REQJOIN: "=*">

+	  | < JAVA_REF: ">>">

+      

+    }

+    

+

+    /*******************************************************************

+     * Unreserved Keywords

+     *******************************************************************/

+    

+Token UK_ABSOLUTE() : {Token t;}

+{

+	(LOOKAHEAD({check("absolute")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_AFTER() : {Token t;}

+{

+	(LOOKAHEAD({check("after")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_ALL() : {Token t;}

+{

+	(LOOKAHEAD({check("all")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_BIGINT() : {Token t;}

+{

+	(LOOKAHEAD({check("bigint")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_BINARY() : {Token t;}

+{

+	(LOOKAHEAD({check("binary")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_BEFORE() : {Token t;}

+{

+	(LOOKAHEAD({check("before")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_BIT() : {Token t;}

+{

+	(LOOKAHEAD({check("bit")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_BOOLEAN() : {Token t;}

+{

+	(LOOKAHEAD({check("boolean")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_CHAR() : {Token t;}

+{

+	(LOOKAHEAD({check("char")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_CHAR_S() : {Token t;}

+{

+	(LOOKAHEAD({check("character")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_DATE() : {Token t;}

+{

+	(LOOKAHEAD({check("date")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_DATETIME() : {Token t;}

+{

+	(LOOKAHEAD({check("datetime")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_DB2SQL() : {Token t;}

+{

+	(LOOKAHEAD({check("db2sql")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_DECIMAL() : {Token t;}

+{

+	(LOOKAHEAD({check("decimal")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_DECIMAL_S() : {Token t;}

+{

+	(LOOKAHEAD({check("dec")}) t = <ID> )

+	{return t;}

+}

+

+TOKEN:{ < UK_DOUBLE_PRECISION: "double" ("\t"|" "|"\r"|"\n")+ "precision"> }

+Token UK_DOUBLE_PRECISION() : {Token t;}

+{

+	(LOOKAHEAD({check( UK_DOUBLE_PRECISION, "double precision")}) t = <UK_DOUBLE_PRECISION> )

+	{return t;}

+}

+

+Token UK_EACH() : {Token t;}

+{

+	(LOOKAHEAD({check("each")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_FALSE() : {Token t;}

+{

+	(LOOKAHEAD({check("false")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_FIRST() : {Token t;}

+{

+	(LOOKAHEAD({check("first")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_FLOAT() : {Token t;}

+{

+	(LOOKAHEAD({check("float")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_FLOAT4() : {Token t;}

+{

+	(LOOKAHEAD({check("float4")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_FLOAT8() : {Token t;}

+{

+	(LOOKAHEAD({check("float8")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_FULL() : {Token t;}

+{

+	(LOOKAHEAD({check("full")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_IMAGE() : {Token t;}

+{

+	(LOOKAHEAD({check("image")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_INNER() : {Token t;}

+{

+	(LOOKAHEAD({check( "inner")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_INSENSITIVE() : {Token t;}

+{

+	(LOOKAHEAD({check("insensitive")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_INT() : {Token t;}

+{

+	(LOOKAHEAD({check("integer")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_INT1() : {Token t;}

+{

+	(LOOKAHEAD({check("integer1")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_INT2() : {Token t;}

+{

+	(LOOKAHEAD({check("integer2")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_INT4() : {Token t;}

+{

+	(LOOKAHEAD({check("integer4")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_INT8() : {Token t;}

+{

+	(LOOKAHEAD({check("integer8")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_LAST() : {Token t;}

+{

+	(LOOKAHEAD({check("last")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_LEFT() : {Token t;}

+{

+	(LOOKAHEAD({check("left")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_MODE() : {Token t;}

+{

+	(LOOKAHEAD({check("mode")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_MONEY() : {Token t;}

+{

+	(LOOKAHEAD({check("money")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_NAME() : {Token t;}

+{

+	(LOOKAHEAD({check("name")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_NCHAR() : {Token t;}

+{

+	(LOOKAHEAD({check("nchar")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_NEXT() : {Token t;}

+{

+	(LOOKAHEAD({check("next")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_NEW() : {Token t;}

+{

+	(LOOKAHEAD({check("new")}) t = <ID> )

+	{return t;}

+}

+

+

+Token UK_NEW_TABLE() : {Token t;}

+{

+	(LOOKAHEAD({check("new_table")}) t = <ID> )

+	{return t;}

+}

+

+

+Token UK_NONE() : {Token t;}

+{

+	(LOOKAHEAD({check("none")}) t = <ID> )

+	{return t;}

+}

+

+TOKEN:{ < UK_NO_SCROLL: "no" ("\t"|" "|"\r"|"\n")+ "scroll"> }

+Token UK_NO_SCROLL() : {Token t;}

+{

+	(LOOKAHEAD({check( UK_NO_SCROLL, "no scroll")}) t = <UK_NO_SCROLL> )

+	{return t;}

+}

+

+Token UK_NUMERIC() : {Token t;}

+{

+	(LOOKAHEAD({check("numeric")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_NVARCHAR() : {Token t;}

+{

+	(LOOKAHEAD({check("nvarchar")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_OF() : {Token t;}

+{

+	(LOOKAHEAD({check("of")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_OLD() : {Token t;}

+{

+	(LOOKAHEAD({check("old")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_OLD_TABLE() : {Token t;}

+{

+	(LOOKAHEAD({check("old_table")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_OUTER() : {Token t;}

+{

+	(LOOKAHEAD({check("outer")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_PRIOR() : {Token t;}

+{

+	(LOOKAHEAD({check("prior")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_REAL() : {Token t;}

+{

+	(LOOKAHEAD({check("real")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_REFERENCING() : {Token t;}

+{

+	(LOOKAHEAD({check("referencing")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_RELATIVE() : {Token t;}

+{

+	(LOOKAHEAD({check("relative")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_RESULT() : {Token t;}

+{

+	(LOOKAHEAD({check("result")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_RIGHT() : {Token t;}

+{

+	(LOOKAHEAD({check("right")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_ROW() : {Token t;}

+{

+	(LOOKAHEAD({check("row")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_SCROLL() : {Token t;}

+{

+	(LOOKAHEAD({check("scroll")}) t = <ID> )

+	{return t;}

+}

+

+TOKEN:{ < UK_SEMI_SENSITIVE: "semi" ("\t"|" "|"\r"|"\n")+ "sensitive"> }

+Token UK_SEMI_SENSITIVE() : {Token t;}

+{

+	(LOOKAHEAD({check( UK_SEMI_SENSITIVE, "semi sensitive")}) t = <UK_SEMI_SENSITIVE> )

+	{return t;}

+}

+

+Token UK_SMALLDATETIME() : {Token t;}

+{

+	(LOOKAHEAD({check("smalldatetime")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_SMALLINT() : {Token t;}

+{

+	(LOOKAHEAD({check("smallint")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_SMALLMONEY() : {Token t;}

+{

+	(LOOKAHEAD({check("smallmoney")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_STATEMENT() : {Token t;}

+{

+	(LOOKAHEAD({check("statement")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_TEXT() : {Token t;}

+{

+	(LOOKAHEAD({check("text")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_THEN() : {Token t;}

+{

+	(LOOKAHEAD({check("then")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_TIME() : {Token t;}

+{

+	(LOOKAHEAD({check("time")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_TIMESTAMP() : {Token t;}

+{

+	(LOOKAHEAD({check("timestamp")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_TINYINT() : {Token t;}

+{

+	(LOOKAHEAD({check("tinyint")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_TRUE() : {Token t;}

+{

+	(LOOKAHEAD({check("true")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_UNICHAR() : {Token t;}

+{

+	(LOOKAHEAD({check("unichar")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_UNIVARCHAR() : {Token t;}

+{

+	(LOOKAHEAD({check("univarchar")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_VARBINARY() : {Token t;}

+{

+	(LOOKAHEAD({check("varbinary")}) t = <ID> )

+	{return t;}

+}

+

+Token UK_VARCHAR() : {Token t;}

+{

+	(LOOKAHEAD({check("varchar")}) t = <ID> )

+	{return t;}

+}

+

+TOKEN:{ < UK_VARCHAR_S: "char" ("\t"|" "|"\r"|"\n")+ "varying"> }

+Token UK_VARCHAR_S() : {Token t;}

+{

+	(LOOKAHEAD({check( UK_VARCHAR_S, "char varying")}) t = <UK_VARCHAR_S> )

+	{return t;}

+}

+

+TOKEN:{ < UK_VARCHAR_S1: "character" ("\t"|" "|"\r"|"\n")+ "varying"> }

+Token UK_VARCHAR_S1() : {Token t;}

+{

+	(LOOKAHEAD({check( UK_VARCHAR_S1, "character varying")}) t = <UK_VARCHAR_S1> )

+	{return t;}

+}

+

+

+	/**

+	 * Ignore exception during parsing so that the rest part can be parsed

+	 * rule: [ delimiter()] ( statement() )* <EOF>

+	 */

+	Node startRootIgnoreException()  #Start:  {}

+	{

+	(

+	        [ delimiter()]

+	        ( 

+	        try{

+					statement() 

+	        }catch (ParseException e) {

+	           	//TODO can we create an UnknownStatement?

+	            exceptions.add(e);

+	            error_skiptobefore(new int[]{END}, STMT_START_TERMINATORS);

+	        } catch (Throwable t) { 

+	        //TODO: handle this throwable separately in SQLEditor:setOutlineContent.

+	        	ParseException e = new ParseException(ParserUtil.getErrorMessage(getToken(0)));

+	        	e.currentToken = getToken(0);

+		        exceptions.add(e);

+	            error_skiptobefore(new int[]{END}, STMT_START_TERMINATORS);

+	        }    

+	            

+	         )* <EOF>

+	 )

+	 { return jjtThis; }

+	}

+		

+

+ASTSQLDelimiter delimiter() #SQLDelimiter:{}

+{

+	(LOOKAHEAD(2) (<SEMICOLON>|<GO>))+

+	{

+		return jjtThis;

+	}

+}

+

+void statement() : {setScope("SQL Statement", SCOPE_DEFAULT);/*the default scope*/result.clearCurrentTableNames(isContentAssist);} 

+{

+		try{

+		(

+		  (

+          LOOKAHEAD( <CREATE> ) create_stmts()

+          | LOOKAHEAD( <ALTER> ) alter_stmts()

+          | LOOKAHEAD( <DROP> ) drop_stmts()

+          | LOOKAHEAD( <INSERT> ) insert_stmts()

+          | LOOKAHEAD( <UPDATE> ) update_stmts()

+          | LOOKAHEAD( <SELECT> ) select() 

+          | LOOKAHEAD( <DELETE> ) delete_stmts()

+          | LOOKAHEAD( <REMOVE> ) remove_stmts()

+          | LOOKAHEAD(1) return_stmt()

+          | LOOKAHEAD(2) execute_stmt()

+          | LOOKAHEAD(1) if_stmt()

+          | LOOKAHEAD(1) print()

+          | LOOKAHEAD(1) unknown_sql_stmt()

+			) #SQLStatement

+		 | LOOKAHEAD(1) declare() 

+         )

+        

+        [LOOKAHEAD(<SEMICOLON>|<GO>) delimiter()]

+         

+        }catch(ParseException e){

+          exceptions.add(e);

+            error_skiptobefore(new int[]{END}, STMT_START_TERMINATORS);

+            //to generate an ASTSQLDelimiter node so that the statement can be separated

+            if (getToken(1).kind == SEMICOLON )

+            {

+            	delimiter();

+            }

+        } catch (Throwable t) { 

+        //TODO: handle this throwable separately in SQLEditor:setOutlineContent.

+        	ParseException e = new ParseException(ParserUtil.getErrorMessage(getToken(0)));

+        	e.currentToken = getToken(0);

+	        exceptions.add(e);

+            error_skiptobefore(new int[]{END}, STMT_START_TERMINATORS);

+            if ( getToken(1).kind == SEMICOLON )

+            {

+            	delimiter();

+            }

+        }    

+        {

+        }

+}           

+

+void unknown_sql_stmt() : {}

+{

+	 LOOKAHEAD({ !isSupportedStatementStartToken(getToken(1).kind) })

+	 (

+		<CLOSE> | <COMMIT> | <CONTINUE> | <DECLARE> | <DUMP> | <EXEC> |

+		<GOTO> | <GRANT> | <KILL> | <LOAD> | <MODIFY> | <OPEN> | <PREPARE> | 

+		<RETURN> | <REVOKE> |<ROLLBACK> | <SAVE> | <SET> | <WHILE> | <ID>

+	 )

+	 {

+	 	error_skiptobefore(new int[]{END}, STMT_START_TERMINATORS);

+	 } 

+}

+

+void any_stmt_token():{}

+{

+	{

+	 	error_skiptobefore(new int[]{END}, STMT_START_TERMINATORS);

+	} 

+}

+

+void create_stmts() : {}

+{

+	LOOKAHEAD(2) <CREATE> <PROCEDURE> create_proc_body()

+	| LOOKAHEAD(2) <CREATE> 

+		(<DBEVENT>

+		|<GROUP>

+		|unique() <INDEX>

+		|<INTEGRITY>

+		|<LOCATION>

+		|<PROFILE>

+		|<ROLE>

+		|<SCHEMA>

+		|<SECURITY_ALARM>

+		|<SEQUENCE>

+		|<SYNONYM>

+		|<TABLE>

+		|<USER>

+		|<VIEW>

+		)

+		any_stmt_token()	

+}

+

+void create_proc_body() : {}

+{

+	<ID>

+	[cdbp_parmspec()] [cdbp_resrowspec()] 

+	(<AS>|<EQUAL>) cdbp_beblock()

+}

+

+void cdbp_parmspec() : {}

+{

+	<OPENPAREN> cdbp_parmlist() <CLOSEPAREN>

+}

+

+void cdbp_parmlist() : {}

+{

+	cdbp_parmitem() (<COMMA> cdbp_parmitem())*

+}

+

+void cdbp_parmitem() : {}

+{

+	<ID> [<EQUAL>] datatype() //ID zuwenig -> lokale Vars bei dynSQL :ID

+	( (<WITH>|<NOT>) (<DEFAULT_VAL>|<NULL>) )*  //FIXME: "default" und "null" sollen nur je 1x auftreten

+}

+

+void cdbp_resrowspec() : {}

+{

+	UK_RESULT() UK_ROW()

+	(

+		datatype() 

+		( (<WITH>|<NOT>) (<DEFAULT_VAL>|<NULL>) )*

+	)+

+}

+

+void cdbp_beblock() : {}

+{

+	[declare()] <BEGIN> (statement())+ <END>

+}

+

+void unique() : {}

+{

+			[ <UNIQUE> ]

+}

+            

+void alter_stmts() : {}

+{

+	<ALTER> 

+	(<GROUP>

+	|<LOCATION>

+	|<PROFILE>

+	|<ROLE>

+	|<SECURITY_AUDIT>

+	|<SEQUENCE>

+	|<TABLE>

+	|<USER>

+	)

+	any_stmt_token()

+}

+

+void drop_stmts() : {}

+{

+	LOOKAHEAD(2) <DROP> <PROCEDURE> <ID>

+    |LOOKAHEAD (2)<DROP> 

+		(<DBEVENT>

+		|<DOMAIN>

+		|<GROUP>

+		|<INDEX>

+		|<INTEGRITY>

+		|<LOCATION>

+		|<PROFILE>

+		|<ROLE>

+		|<RULE>

+		|<SECURITY_ALARM>

+		|<SEQUENCE>

+		|<SYNONYM>

+		|<TABLE>

+		|<USER>

+		|<VIEW>

+		|<ID>

+		)

+		any_stmt_token()

+}

+

+void delete_stmts() : {}

+{

+          delete() 

+}

+

+void insert_stmts() : {}

+{

+           insert() 

+}

+

+void update_stmts() : {}

+{

+           update() 

+}

+

+void remove_stmts() : {}

+{

+	<REMOVE> 

+	(<DBEVENT>

+	|<TABLE>

+	)

+	any_stmt_token()

+}

+

+ASTSQLDataType datatype()   #SQLDataType: {}

+{

+	

+	(

+			base_datatype() 

+	)

+	{return jjtThis;}

+}

+

+

+ASTSQLDataType base_datatype()   #SQLDataType: {Token t= null; int length=0, scale=-1; String name=null; }

+{

+

+	try{

+		 (  

+	      ( t = UK_CHAR() | t = UK_CHAR_S() | t = UK_TEXT() | UK_VARCHAR() ) [ LOOKAHEAD(2) "(" length = number() ")" ]

+	      | t = UK_NCHAR() [ LOOKAHEAD(2) "(" length = number() ")" ]

+	      | t = UK_NVARCHAR() [ LOOKAHEAD(2) "(" length = number() ")" ]

+	      | ( t = UK_TINYINT() | t = UK_SMALLINT() | t = UK_INT() | t = UK_BIGINT() )

+	      | ( t = UK_INT1() | t = UK_INT2() | t = UK_INT4() | t = UK_INT8() )

+	      | ( t = UK_NUMERIC() | t = UK_DECIMAL() | t = UK_DECIMAL_S() )

+	          [ LOOKAHEAD(2) "(" length = number() [ "," scale = number() ] ")"

+		       {

+		        if ((length < scale))                                                                                     

+		        {                                                                                                         

+		 		    ParseException e = new ParseException("You must specify a scale that is less than or equal to the size");  

+		 		    e.currentToken = t.next;                                                                                 

+		 		    exceptions.add(e);                                                                                       

+		        }

+		       } 

+	          ]

+	      | t = UK_FLOAT() [ LOOKAHEAD(2) "(" length = number() ")" ]

+		  | t = UK_DOUBLE_PRECISION()

+	      | t = UK_FLOAT4() [ LOOKAHEAD(2) "(" length = number() ")" ]

+	      | t = UK_FLOAT8() [ LOOKAHEAD(2) "(" length = number() ")" ]

+	      | t = UK_REAL()

+	      | t = UK_DATE()

+	      | t = UK_MONEY()

+	      // TODO: 

+	      // logical types

+	      // byte, byte varying, long varchar, long byte

+//	      | t = UK_BINARY() [ LOOKAHEAD(2) "(" length = number() ")" ]

+//	      | t = UK_BIT()

+//	      | t = UK_DATETIME()

+//	      | t = UK_SMALLDATETIME()

+//	      | t = UK_SMALLMONEY()

+//	      | t = UK_TIMESTAMP()

+//	      | t = UK_TIME()

+//	      | t = UK_UNICHAR()[ LOOKAHEAD(2) "(" length = number() ")" ]

+//	      | t = UK_UNIVARCHAR()[ LOOKAHEAD(2) "(" length = number() ")" ]

+//	      | t = UK_VARBINARY() [ LOOKAHEAD(2) "(" length = number() ")" ]

+//	      | name = java_name() [ LOOKAHEAD(2) "(" length = number() ")" ] //TODO: retrieve user defined datatype from ASE system table   

+         )

+       {

+       	if (t != null )

+       	{

+	      	((ASTSQLDataType)jjtThis).setName(t.image);

+       	}else{

+       		((ASTSQLDataType)jjtThis).setName(name);

+       	}

+      ((ASTSQLDataType)jjtThis).setLength(length);

+      ((ASTSQLDataType)jjtThis).setScale(scale);

+      return jjtThis;

+      }

+    }catch(ParseException e){

+		exceptions.add(e);

+		return jjtThis;

+    }     

+

+}

+

+//not needed, if not in DataTypes

+String java_name() : {Token t = null; String wholename = null; String part = null;}

+{

+			 t = id_or_string() {wholename = t.image;} [LOOKAHEAD(2) "." part = java_name() {wholename += "." + part;} ]

+	{return wholename;}			 

+}

+

+void insert() : {setScope("insert", SCOPE_TABLES);}

+{

+			 <INSERT> <INTO> ii_obj_spec() {setScope("insert", SCOPE_COLUMNS);} 

+			 optional_insert_col_list()  insert_source()

+}

+

+void optional_insert_col_list() : {}

+{

+			[ LOOKAHEAD(2) "(" insert_column_list() ")" ]

+}

+

+void insert_column_list() : {}

+{

+			 ii_col_spec()

+                   (  "," ii_col_spec() )*

+}

+

+void insert_source() : {}

+{

+			 <VALUES>  "(" insert_values() ")"

+              | select()

+}

+

+void insert_values() : {}

+{

+			[ insert_value_list()]

+}

+

+void insert_value_list() : {}

+{

+			 insert_value()

+                  (  "," insert_value() )*

+}

+

+void insert_value() : {}

+{

+			 expression()

+             | <DEFAULT_VAL>

+}

+

+void update() : {}

+{

+			 <UPDATE> 

+			 {setScope("update", SCOPE_TABLES);} ii_obj_spec()

+			 <SET> 

+			 {setScope("update", SCOPE_COLUMNS);} set_clause_list() 

+			 {setScope("update", SCOPE_TABLES);}  from_where_clause()  

+}

+

+void set_clause_list() : {}

+{

+			 set_clause()

+                (  "," set_clause() )*

+}

+

+

+void set_clause() : {}

+{

+				( 

+            LOOKAHEAD(3) primary() 

+		   | variable_assignment() 

+           )

+           "=" expression()

+}

+

+void select() : {}

+{

+			 query_expression()  order_by_clause()

+}

+

+

+void query_expression() : {}

+{

+			 query_term() ( <UNION>  all_option() query_term() )*

+}

+

+void query_term() : {}

+{

+			 query_primary()

+}

+

+void all_option() : {}

+{

+			[ UK_ALL() ]

+}

+

+void query_primary() : {}

+{

+			 simple_table()

+              | "(" query_expression() ")"

+}

+

+void simple_table() : {}

+{

+			 query_specification()

+}

+

+void query_specification() : {}

+{

+	<SELECT>  all_distinct() 

+		{setScope("query_specification", SCOPE_COLUMNS);} select_list()

+		{setScope("query_specification", SCOPE_TABLES);}

+		optional_from_clause() [ where_clause() ] group_by_clause() having_clause()

+}

+

+void all_distinct() : {}

+{

+             [ UK_ALL()

+             | <DISTINCT> ]

+}

+

+void delete() : {setScope("delete", SCOPE_TABLES);} 

+{

+			 <DELETE> <FROM> ii_tbl_spec()

+		 		[where_clause()]

+}

+

+void subquery() : {}

+{

+			 "("  subquery_content() ")"

+}

+

+void subquery_content() #SQLStatement: {}

+{

+			 <SELECT> subq_select()

+			 {}

+}

+

+void subq_select() : {}

+{

+			 [ subq_all_distinct() subquery_select_expression()  

+	          optional_from_clause()

+			 [ where_clause() ]	          

+			 group_by_clause() having_clause() subq_fake_union() subq_fake_order_by_clause() ]

+}

+

+void subq_all_distinct() : {}

+{

+			[ UK_ALL()

+                  | <DISTINCT> ]

+}

+

+

+void subq_fake_union() : {}

+{

+			 [ <UNION>  subq_fake_select() ]

+}

+

+void subq_fake_select() : {}

+{

+		[ LOOKAHEAD(2) subq_fake_primary() <UNION> ] subq_fake_primary()

+}

+

+void subq_fake_primary() : {}

+{

+			 <SELECT> subq_fake_all_distinct() subq_fake_select_expression() 

+	          optional_from_clause()

+			 [ where_clause() ]

+			 group_by_clause() having_clause()

+}

+

+void subq_fake_all_distinct() : {}

+{

+			[ UK_ALL()

+                       | <DISTINCT> ]

+}

+

+void subq_fake_select_expression() : {}

+{

+			 LOOKAHEAD(2) subq_expression_list()

+                            | [ ii_schema_spec() ] "*"

+}

+

+

+void subq_fake_order_by_clause() : {}

+{

+			 [ <ORDER> <BY>  subq_fake_order_by_list() ]

+}

+

+void subq_fake_order_by_list() : {}

+{

+			 subq_fake_order_by_item()

+                        (  "," subq_fake_order_by_item() )*

+}

+

+void subq_fake_order_by_item() : {}

+{

+			 expression() [ order_by_option() ]

+}

+

+void subq_fake_cursor_update_list() : {}

+{

+			[ <OF> subq_fake_cursor_column_list()]

+}

+

+void subq_fake_cursor_column_list() : {}

+{

+			 subq_fake_curs_upd_column()

+                             (  "," subq_fake_curs_upd_column() )*

+}

+

+void subq_fake_curs_upd_column() : {}

+{

+       ii_obj_spec()

+}

+

+void compound_statement() : {}

+{

+			 <BEGIN>  nullprogram() <END>

+}

+

+void nullprogram() : {}

+{

+			 [ program() ]

+}

+

+void program() : {}

+{

+			 ( statement() )+

+}

+

+void declare() : {}

+{

+	{int oldScope = setScope(SCOPE_DEFINE_VARIABLES);}

+	declare_prefix() declaration_list()

+    {setScope(oldScope);}

+}

+

+

+void declare_prefix() #DeclareKeyword : {}

+{

+			 <DECLARE>

+}

+

+void fetch_orientation() : {}

+{

+	//Though weird, FIRST can be used as object name, so LOOKAHEAD(2)

+	<FETCH> [LOOKAHEAD(	UK_NEXT() | UK_PRIOR() | UK_FIRST() | UK_LAST() |  UK_ABSOLUTE() | UK_RELATIVE(),

+				{getToken(2).kind != INTO && getToken(2).kind != FROM} ) 

+				( UK_NEXT() | UK_PRIOR() | UK_FIRST() | UK_LAST() |  UK_ABSOLUTE() | UK_RELATIVE() ) 

+			]

+}

+

+void fetch_val_spec() : {Token t=null;}

+{

+			[ t = <VAR_NAME> 

+               | number()]

+}

+

+void fetch_into_clause() : {}

+{

+			[ <INTO> fetch_into_list()]

+}

+

+void fetch_into_list() : {}

+{

+			 variable_assignment()

+                (  "," variable_assignment() )*

+}

+

+void fetch_from_spec() : {}

+{

+			[ <FROM> ]

+}

+

+void return_stmt() : {}

+{

+			 <RETURN>  optional_expression()

+}

+

+void execute_stmt() : {}

+{

+			 <EXECUTE> <PROCEDURE> any_stmt_token()

+}

+

+void optional_expression() : {}

+{

+			[ LOOKAHEAD(2) expression()]

+}

+

+void if_stmt() : {}

+{

+		    (if_prefix() statement() [ LOOKAHEAD(1) <ELSE>  statement() ])

+}

+

+

+void if_prefix() : {}

+{

+			 <IF>  boolean_expression()

+}

+

+void begin_tran() : {}

+{

+			 <BEGIN> <TRANSACTION> optional_xact_name()

+}

+

+void commit_tran() : {}

+{

+			 <COMMIT> tran_or_work()  optional_xact_name()

+}

+

+void tran_or_work() : {}

+{

+			[ <TRANSACTION>

+             | <WORK> ]

+}

+

+void rollback_tran() : {}

+{

+			 <ROLLBACK> tran_or_work()  optional_xact_name()

+}

+

+

+void optional_xact_name() : {}

+{

+			[ LOOKAHEAD(2) xact_name()]

+}

+

+void xact_name() : {}

+{

+			 <INTEGER_LITERAL> ":" <ID> "." <ID>

+          | id()

+}

+

+void print() : {}

+{

+			 <PRINT> pr_arglist()

+}

+

+void pr_arglist() : {}

+{

+			printstring() arglist()

+}

+

+void arglist() : {}

+{

+			( "," literal() )*

+}

+

+void printstring() : {}

+{

+			 string_literal()

+            | variable()

+            | null_stmt() 

+}

+

+

+Token id_or_string() : {Token t;}

+{

+			 ( t = idplus()

+             | t = string_literal()

+             )

+             {return t;}

+}

+

+

+//Special case: "NEW" can be used as id

+Token idplus() : {Token t;}

+{

+	(  t = <ID>

+      | t = <TEMP_TABLE_NAME> //TEMP_TABLE_NAME can also be used as column name

+      | t = <SQUARE_BRACKET_ID>

+    )

+    {return t;}

+}

+

+

+void select_list() : {}

+{

+			 select_expression()

+            (  "," select_expression() )*

+}

+

+void select_expression() : {}

+{

+                    LOOKAHEAD(<VAR_NAME> "=") (  select_or_set_variable_assignment())

+                  | LOOKAHEAD(idplus() "=") idplus() "=" (  expression() )

+                  | LOOKAHEAD(string_literal() "=") string_literal() "=" (  expression())

+//                  | "*" 

+                  | LOOKAHEAD([ii_schema_spec()] "*") [ii_schema_spec()] "*" 

+				  | LOOKAHEAD(expression()) ( expression()) 

+				    [

+				      LOOKAHEAD(2)

+				      ( LOOKAHEAD(2)( optional_as() ( idplus() | string_literal() ) ) 

+				        | "=" expression()

+				      ) 

+				    ]

+				  //we have put java_memberref support in expression()

+				  //| java_memberref() "=" expression()

+}

+

+void select_or_set_variable_assignment() : {}

+{

+			 variable_assignment() "="  expression() 

+}

+

+void optional_as() : {}

+{

+			[ <AS> ]

+}

+

+void subquery_select_expression() : {}

+{

+			 LOOKAHEAD(3) subq_expression_list()

+			| [ ii_schema_spec() ] "*"

+}

+

+void declaration_list() : {}

+{

+			 declaration()

+                 ( comma()  declaration() )*

+}

+

+void comma() #DeclareComma : {}

+{

+	","

+}

+

+void declaration() #SQLParam: {Token name=null; String defaultValue=null; Node type=null; int direction = 0;}

+{

+		try{

+			 name = <VAR_NAME> 

+			 type = base_datatype() 

+			 defaultValue = optional_param_default() 

+			 direction = param_options() 

+		}catch(ParseException e){

+            exceptions.add(e);

+            error_skiptobefore(new int[]{}, new int[]{COMMA, CLOSEPAREN, WITH, AS});

+        }

+        {

+        ((ASTSQLParam)jjtThis).setName(name.image);

+        ((ASTSQLParam)jjtThis).setType(type.toString());

+        ((ASTSQLParam)jjtThis).setTypeObject((ASTSQLDataType)type);

+        if (defaultValue != null){

+            ((ASTSQLParam)jjtThis).setDefaultValue(defaultValue);

+        }

+        ((ASTSQLParam)jjtThis).setDirection(direction);

+         }

+}

+

+String optional_param_default() : {String t = null;}

+{

+			[ "=" t = literal()]

+			{return t;}

+}

+

+int param_options() : {int direction = 0;}

+{

+			[ <IN>

+              | out_option() {direction = 1;}]

+            {return direction;}

+}

+

+void out_option() : {}

+{

+			 <OUT>

+           | <OUTPUT>

+}

+

+void shared() : {}

+{

+	[ <SHARED> ]

+}

+

+void forceoptions() : {}

+{

+	[ LOOKAHEAD(2)

+		"(" 

+		[ LOOKAHEAD(2)

+			<INTEGER_LITERAL> [ LOOKAHEAD(2) forceoption_terms() ]  

+			|  <PARTITION> <ID>  

+			|  forceoption_terms() 

+		]

+		")" 

+	]

+}

+

+void forceoption_terms() : {}

+{

+	 ( forceoption_term() )+

+}

+

+void forceoption_term() : {}

+{

+	 forceindex()

+     | forcestrategy()

+}

+

+void forceindex() : {}

+{

+	 <INDEX> ( <INTEGER_LITERAL> | idplus() )

+}

+

+void forcestrategy() : {}

+{

+	 <ID> [ number() ]

+      | "(" <ID> ( <ID> ")" | number() number() ")" )

+}

+

+void inner_join() : {}

+{

+	[UK_INNER()] <JOIN>

+}

+

+void oj_operator() : {}

+{

+			 UK_LEFT() [UK_OUTER()] <JOIN>

+            | UK_RIGHT() [UK_OUTER()] <JOIN>

+            | inner_join()

+}

+

+void from_where_clause() : {}

+{

+			[ LOOKAHEAD(2) <WHERE> <CURRENT> <OF> ii_obj_spec()

+                  | from_clause() [ where_clause() ]

+                  | where_clause() ]

+}

+

+void where_current_clause() : {}

+{

+			[ LOOKAHEAD(2) <WHERE> <CURRENT> <OF> ii_obj_spec()

+                  | where_clause() ]

+}

+

+void from_clause() : {}

+{

+			 <FROM> 

+			  from_list()

+}

+

+void optional_from_clause() : {}

+{

+			 [ from_clause() ]

+}

+

+void from_list() : {}

+{

+			 from_table()

+          (  "," from_table() {} )*	

+}

+

+void from_table() : {}

+{

+    {setScope("from_clause", SCOPE_TABLES);}

+	from_item()

+	{setScope("from_clause", SCOPE_DEFAULT);}

+}

+

+void from_item() : {}

+{

+	( 

+		LOOKAHEAD(from_unit()) from_unit() 

+		( 

+	  		LOOKAHEAD(2) oj_operator() from_unit() <ON>

+	  		  {setScope("from_item", SCOPE_COLUMNS);}

+	  		  boolean_expression()

+		)*

+		| LOOKAHEAD(3) "(" from_unit()

+		  (

+		    LOOKAHEAD(2) oj_operator() from_unit() <ON>  boolean_expression() 

+		  )+ ")"

+    )

+}

+

+void from_unit() : {}

+{

+	( ii_obj_spec()

+		( [LOOKAHEAD({(getToken(1).kind == AS || getToken(1).kind == ID) 

+			           && !(getToken(1).image.equalsIgnoreCase("inner") 

+			                || getToken(1).image.equalsIgnoreCase("left") 

+			                || getToken(1).image.equalsIgnoreCase("right"))

+			         }) 

+			optional_as() idplus() ]

+		  forceoptions() shared() 

+		)

+	   | "("  select() ")" optional_as() derived_table_name() optional_derived_col_name_list() shared()

+    )

+}

+

+void derived_table_name() : {}

+{

+  [LOOKAHEAD({!(getToken(1).image.equalsIgnoreCase("inner") || getToken(1).image.equalsIgnoreCase("left") || getToken(1).image.equalsIgnoreCase("right"))}) idplus()]

+}

+

+void optional_derived_col_name_list() : {}

+{

+  [LOOKAHEAD(2) "(" derived_column_list() ")"]

+}

+

+void derived_column_list() : {}

+{

+  derived_col_name() ("," derived_col_name() )*

+}

+

+void derived_col_name() : {}

+{

+  idplus()

+}

+

+void where_clause() : {setScope("from_clause", SCOPE_COLUMNS);}

+{

+			 <WHERE>  boolean_expression()

+			 {setScope("where_clause", SCOPE_DEFAULT);}

+}

+

+void boolean_expression() : {}

+{

+			 boolean_term() ( <OR> boolean_term() )*

+}

+

+void boolean_term() : {}

+{

+			 boolean_factor() ( <AND> boolean_factor() )*

+}

+

+void boolean_factor() : {}

+{

+			 boolean_primary()

+               | <NOT> boolean_primary()

+}

+

+void boolean_primary() : {}

+{

+				 boolean_function()

+                | LOOKAHEAD ("(" boolean_expression() ")" ) "(" boolean_expression() ")"

+                | predicate()

+}

+

+void group_by_clause() : {}

+{

+			 [ <GROUP> <BY>  by_all() group_by_list() ]

+}

+

+void by_all() : {}

+{

+			[ UK_ALL() ]

+}

+

+void group_by_list() : {}

+{

+			 group_by_item()

+              (  "," group_by_item() )*

+}

+

+void group_by_item() : {}

+{

+			 {setScope("group_clause", SCOPE_COLUMNS);}

+			  expression()

+			 {setScope("group_clause", SCOPE_DEFAULT);}

+}

+

+

+void having_clause() : {}

+{

+			[ <HAVING> {setScope("having_clause", SCOPE_COLUMNS);} boolean_expression() {setScope("having_clause", SCOPE_DEFAULT);}]

+}

+

+

+void order_by_clause() : {}

+{

+			[ <ORDER>  <BY>  order_by_list() ]

+}

+

+void order_by_list() : {}

+{

+			 order_by_item()

+              (  "," order_by_item() )*

+}

+

+void order_by_item() : {setScope("order_by_clause", SCOPE_COLUMNS);}

+{

+		 expression() [ order_by_option() ]{setScope("order_by_clause", SCOPE_DEFAULT);}

+}

+

+void order_by_option() : {}

+{

+			 <ASC>

+                | <DESC>

+}

+

+void predicate() : {}

+{

+            LOOKAHEAD(<EXISTS>) exists_predicate() //starts with exists

+          | LOOKAHEAD( ("(")+ <SELECT> | expression() ) (expression() 

+          					(

+					            LOOKAHEAD( comp_op() <ANY> ) any_predicate()

+					          | LOOKAHEAD( comp_op() UK_ALL() ) all_predicate()

+          					  | LOOKAHEAD( comp_op() | join_op() ) comparison_predicate()

+	          				  | LOOKAHEAD( [ <NOT> ] <BETWEEN> ) between_predicate()

+					          | LOOKAHEAD( <IS> [ <NOT> ] ) null_predicate()

+					          | LOOKAHEAD([ <NOT> ]  <IN> ) in_predicate()

+					          | LOOKAHEAD([ <NOT> ] <LIKE> ) like_predicate()

+          					) 

+          				)

+          | LOOKAHEAD( row_constructor()) row_constructor() row_comparison_predicate()

+}

+

+void predicate_op() : {}

+{

+	<EXISTS>

+	| LOOKAHEAD( expression() (comp_op() | join_op() | [ <NOT> ] ( <BETWEEN> | <IN> | <LIKE>  ) | <IS> )) expression() (comp_op() | join_op() | [ <NOT> ] ( <BETWEEN> | <IN> | <LIKE> ) | <IS> )

+	| row_constructor() ( comp_op() | join_op() )

+	

+}

+void comparison_predicate() : {}

+{

+	 	( comp_op() | join_op() ) expression()

+}

+

+void row_comparison_predicate() : {}

+{

+		comp_op() row_constructor()

+}

+

+void comp_op() : {}

+{

+	      "="

+        | "!" [ ">" | "=" | "<" ]

+        | "!>" | "!=" | "!<" 

+        | ">" [ "=" ] 

+        | ">="

+        | "<" [ ">" | "=" ]

+        | "<>" | "<=" 

+}

+

+void join_op() : {}

+{

+			 <LEQJOIN>

+        | <REQJOIN>

+}

+

+void between_predicate() : {}

+{

+			 [ <NOT> ] <BETWEEN> expression() <AND> expression()

+}

+

+void null_predicate() : {}

+{

+  	<IS> [ <NOT> ] null_stmt()

+}

+

+

+void in_predicate() : {}

+{

+			 [ <NOT> ]  <IN> "(" (  in_value_list() | <SELECT> subq_select() ) ")"

+}

+

+

+void in_value_list() : {}

+{

+			 expression()

+              (  "," expression() )*

+}

+

+

+void any_predicate() : {}

+{

+			 comp_op() <ANY>  subquery() 

+}

+

+void all_predicate() : {}

+{

+			 comp_op() UK_ALL()  subquery() 

+}

+

+void exists_predicate() : {}

+{

+			 <EXISTS>  subquery() 

+}

+

+void like_predicate() : {}

+{

+			 [ <NOT> ] <LIKE> pattern_clause()

+}

+

+void pattern_clause() : {}

+{

+			 expression() escape_clause()

+}

+

+void escape_clause() : {}

+{

+			[ <ESCAPE> expression()]

+}

+

+void row_constructor() : {}

+{

+			 "(" row_constructor_list() ")"

+}

+

+void row_constructor_list() : {}

+{

+			 row_constructor_elem()

+                     (  "," row_constructor_elem() )*

+}

+

+void row_constructor_elem() : {}

+{

+			 expression()

+}

+

+

+ASTExpression expression() #Expression: {}

+{

+	term()

+		(LOOKAHEAD(3)

+			( LOOKAHEAD(3) "|" "|" 

+	        | LOOKAHEAD(2) "+" 

+	        | LOOKAHEAD(2) "-" 

+	        | LOOKAHEAD(2) "&" 

+	        | LOOKAHEAD(2) "|" 

+	        | LOOKAHEAD(2) "^"

+			) term()

+		)*

+   {

+   	return jjtThis;

+   }

+}

+void term() : {}

+{

+	factor()

+	( "*" factor()

+    | "/" factor()

+    | "%" factor()

+    )*

+}

+

+void factor() : {}

+{

+	[ "~" ] subfactor()

+}

+

+void subfactor() : {}

+{

+ 	[ "+" | "-" ] primary()

+}

+

+void primary_1() : {}

+{

+	LOOKAHEAD(constant()) constant()

+    | LOOKAHEAD("(" <SELECT>) subquery() 

+    | LOOKAHEAD(function()) function()

+    | LOOKAHEAD(column()) column() 

+    | case_expression()

+    | "(" expression() ")"

+}

+

+//supports javaname>>javaref

+void primary() : {}

+{

+				primary_1() ( LOOKAHEAD(2) ( <DOT> | <JAVA_REF> ) id_or_string() [ LOOKAHEAD(2) "("  expression_list() ")" ] )*

+}

+

+void case_expression() : {}

+{

+			 case_abbreviation()

+                | case_specification()

+}

+

+void case_abbreviation() : {}

+{

+			 nullif_format()

+                  | coalesce_format()

+}

+

+void case_specification() : {}

+{

+			 <CASE>  simple_or_searched_case()

+}

+

+void simple_or_searched_case() : {}

+{

+			 simple_case()

+                        | searched_case()

+}

+

+void simple_case() : {}

+{

+			 expression() simple_when_clause_list() optional_else_clause() <END>

+}

+

+void searched_case() : {}

+{

+			 searched_when_clause_list() optional_else_clause() <END>

+}

+

+void simple_when_clause_list() : {}

+{

+			 simple_when_clause()

+                        (  simple_when_clause() )*

+}

+

+void simple_when_clause() : {}

+{

+			 <WHEN> expression() UK_THEN() result()

+}

+

+void searched_when_clause_list() : {}

+{

+			 searched_when_clause()

+                          (  searched_when_clause() )*

+}

+

+void searched_when_clause() : {}

+{

+			 <WHEN> boolean_expression() UK_THEN() result()

+}

+

+void optional_else_clause() : {}

+{

+			[ <ELSE> result()]

+}

+

+void result() : {}

+{

+			 expression()

+}

+

+void coalesce_format() : {}

+{

+			 <COALESCE>  "(" coalesce_list() ")"

+}

+

+void coalesce_list() : {}

+{

+			 coalesce_element()

+              (  "," coalesce_element() )*

+}

+

+void coalesce_element() : {}

+{

+			 expression()

+}

+

+void nullif_format() : {}

+{

+			 <NULLIF>  "(" expression() "," expression() ")"

+}

+

+void column() : {}

+{

+      LOOKAHEAD(ii_col_spec()) ii_col_spec()

+      | LOOKAHEAD (idplus()) idplus()

+}

+

+Token id() : {Token t = null;}

+{

+	(t = idplus()

+   | t = variable()

+   )

+   {return t;}

+}

+

+void string() : {}

+{

+			 string_literal()

+       | variable()

+}

+

+void id_string() : {}

+{

+			 idplus()

+          | <DOUBLE_STRING_LITERAL>

+          | variable()

+}

+

+void integer() : {}

+{

+			 <INTEGER_LITERAL>

+        | variable()

+}

+

+int number() : {int retval = 0;}

+{

+       ( "-" <INTEGER_LITERAL> {try {retval = Integer.parseInt("-" + getToken(0).image);}catch(Exception e){}}

+       | [ "+" ] <INTEGER_LITERAL> {try {retval = Integer.parseInt(getToken(0).image);}catch(Exception e){}}

+       )

+       {return retval;}

+}

+

+void constant() : {}

+{

+			 signed_const()

+         | unsigned_const()

+}

+

+Token signed_const() : {Token t;}

+{

+			 ( t = <INTEGER_LITERAL>

+			   | t = <FLOATING_POINT_LITERAL>

+             | t = <MONEY_LITERAL>

+             )

+             {return t;}

+             

+}

+

+Token unsigned_const() : {Token t;}

+{

+			  (  t = <BINARY_LITERAL>

+               | t = string_literal()

+               | t = null_stmt()

+               | t = variable()

+               )

+               {return t;}

+}

+

+String literal() : {Token t; boolean negative = false;}

+{

+        ( [ "+" | "-" { negative = true;} ] t = signed_const()

+        | t = unsigned_const()

+        | t = idplus()

+        | t = <PRIMARY>

+        | t = <FOREIGN>

+        )

+         {return negative?"-"+t.image:t.image;}

+}

+

+void binary() : {}

+{

+			 UK_BINARY()

+       | variable()

+}

+

+Token null_stmt() : {Token t;}

+{

+			 t = <NULL>

+			 {return t;}

+}

+

+//variable reference

+Token variable() : {Token t;}

+{

+		(	t = <VAR_NAME> 

+         | t = dyn_question_mark()

+         | t = <GLOBAL_VAR_NAME>

+         )

+         {return t;}

+}

+

+Token variable_assignment() : {Token t;}

+{

+		(	t = <VAR_NAME> 

+         )

+         {return t;}

+}

+

+Token dyn_question_mark() : {Token t;}

+{

+			 t = <QUESTIONMARK>

+			 {return t;}

+}

+

+//include field reference and method reference

+void java_memberref() : {}

+{

+			 primary_1() ( LOOKAHEAD(3) ( <DOT> | <JAVA_REF> ) id_or_string() [ "("  expression_list() ")" ] )* 

+}

+

+void function() : {}

+{

+		 LOOKAHEAD(2) builtin_function()

+         | LOOKAHEAD(2) agg_function()

+}

+

+

+void builtin_function() : {}

+{

+       		<USER>

+			 | ii_obj_spec() "("  expression_list() optional_using_clause() ")"

+}

+

+void subq_expression_list() : {}

+{

+			 subq_expression()

+                     (  "," subq_expression() )*

+}

+

+void subq_expression() : {}

+{

+                LOOKAHEAD(2) idplus() "=" [ expression() ]

+                | LOOKAHEAD(2) expression() [ optional_as() ( idplus() | string_literal() ) ]

+                | LOOKAHEAD(2) string_literal() "=" expression()

+}

+

+void expression_list() : {}

+{

+			[LOOKAHEAD(2) expression()

+                ( LOOKAHEAD(2)  "," expression() )* ]

+}

+

+void optional_using_clause() : {}

+{

+			[ "," [ <USING> <ID>]

+                      | <AS> datatype() 

+      ]

+}

+

+void optional_comma_argument() : {}

+{

+			[ "," expression()]

+}

+

+void agg_function() : {}

+{

+			 agg_function_specification()

+}

+

+void agg_function_specification() : {}

+{

+                           <COUNT> "(" ( "*" | ( <DISTINCT> | all() ) expression() ) ")"

+                           | <AVG> "(" ( ( <DISTINCT> | all() ) expression()  ) ")"

+                           | <MAX> "(" ( ( <DISTINCT> | all() ) expression()  ) ")"

+                           | <MIN> "(" ( ( <DISTINCT> | all() ) expression()  ) ")"

+                           | <SUM> "(" ( ( <DISTINCT> | all() ) expression()  ) ")"

+}

+

+void all() : {}

+{

+			[ UK_ALL() ]

+}

+

+void boolean_function() : {}

+{

+			 <UPDATE> "(" idplus() ")"

+}

+

+/****************************************************************************

+** GENERIC RULES							@RH@

+**

+** These rules are "generic" in that they are referenced by several

+** productions from different statements, but serve a common purpose.

+** They include:

+**

+**	nonkeyword		same as NAME; used to distinguish non-keywords in the grammar

+**	name_or_sconst	Use for any constant; not valid for identifiers

+**	generic_ident	any user-defined object

+**	internal_ident	same as generic_ident, but may also include SCONST

+**	sconst_ident	same is internal_ident, but doesn't check length of SCONST,

+**					used in WITH-clauses where need more context to verify length limits.

+**  auth_ident      same as internal_ident; used to distinguish authorization identifiers

+**	user_ident		same as auth_ident, but may also include $dba or $ingres

+**	schema_spec		same as user_ident; used to distinguish	schema identifiers

+**	obj_spec		generic object specification

+**	tbl_spec		same as generic_ident; used to distinguish table names

+**	col_spec		same as generic_ident; used to distinguish column names

+*****************************************************************************/

+Token ii_generic_ident(): {Token t;}

+{

+	(t = <DELIM_IDENT>)

+//    (t = string_literal())

+	|(t = <ID>)

+	{return t;}

+}

+

+void ii_sconst_ident(): {}

+{

+	ii_generic_ident()

+//	| string_literal()

+}

+

+void ii_internal_ident(): {}

+{

+	ii_generic_ident()

+//	| string_literal()

+}

+

+void ii_auth_ident(): {}

+{

+	LOOKAHEAD(2) ii_internal_ident()

+//	| string_literal()

+}

+

+void ii_user_ident(): {}

+{

+	ii_internal_ident()

+	|<II_DBA>

+	|<II_INGRES>

+}

+

+void ii_schema_spec(): {}

+{

+	ii_user_ident()

+}

+

+void ii_tbl_spec(): {}

+{

+	ii_generic_ident()

+}

+

+void ii_col_spec(): {}

+{

+	ii_generic_ident()

+}

+

+void ii_obj_spec(): {}

+{

+	LOOKAHEAD(2) ii_schema_spec() <DOT> ii_generic_ident()

+	| LOOKAHEAD(<SESSION>) <SESSION> <DOT> ii_generic_ident()

+	| ii_generic_ident()

+	

+}

+

+JAVACODE

+/**

+ * Skips the subsequent tokens when parsing error occurrs. 

+ * The process will continue until the current consumed token matches <code>tokinds</code> 

+ * or the next token to be consumed matches <code>beforekinds</code>.

+ */

+void error_skiptobefore(int[] tokinds, int[] beforekinds) {

+  boolean match = false;

+  Token t1 = getToken(0);

+    // The following loop consumes tokens all the way up to a token of

+    // "kind".  We use a do-while loop rather than a while because the

+    // current token is the one immediately before the erroneous token

+    // (in our case the token immediately before what should have been

+    // "if"/"while".

+  do {

+    match = token.kind == 0 || getToken(1).kind == 0 ; // 0 means the <EOF>

+    if (match) {break;}

+    for (int i=0; i< tokinds.length; i++){

+        match = match || token.kind == tokinds[i];

+        if (match) {break;}

+    }

+    if (match) {break;}

+    for (int i=0; i< beforekinds.length; i++){

+        match = match || getToken(1).kind == beforekinds[i];

+        if (match) {break;}

+    }

+    if (!match){

+        logDebug("current token:" + token.image);

+        getNextToken() ;

+    }

+    

+  } while (!match); 

+  

+  Token t2 = getToken(0);

+  if (t1 == t2 ){

+  	//force get next token

+  	logDebug("current token:" + token.image);

+    getNextToken() ;

+  }

+}

+

diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/icons/event.gif b/plugins/org.eclipse.datatools.enablement.ingres.ui/icons/event.gif
new file mode 100644
index 0000000..24330d1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/icons/event.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/icons/new_db_element.gif b/plugins/org.eclipse.datatools.enablement.ingres.ui/icons/new_db_element.gif
new file mode 100644
index 0000000..1d459ce
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/icons/new_db_element.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/icons/synonym.gif b/plugins/org.eclipse.datatools.enablement.ingres.ui/icons/synonym.gif
new file mode 100644
index 0000000..5a12ea6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/icons/synonym.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/plugin.properties b/plugins/org.eclipse.datatools.enablement.ingres.ui/plugin.properties
new file mode 100644
index 0000000..4b68a63
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/plugin.properties
@@ -0,0 +1,24 @@
+################################################################################
+## Copyright (c) 2006-2007, 2010 Ingres Corporation and others.
+## All rights reserved.   This program and the accompanying materials
+## are made available under the terms of the Eclipse Public License v1.0
+## which accompanies this distribution, and is available at
+## http://www.eclipse.org/legal/epl-v10.html
+##
+## Contributors: 
+##  Ingres - Implementation
+##  Ingres - update for bugzilla 317378
+################################################################################
+
+PLUGIN_NAME = Ingres DTP UI Plug-in
+PROVIDER_NAME=Eclipse Data Tools Platform
+
+# new connection profile wizard
+WIZARD_NAME        = Ingres
+WIZARD_DESCRIPTION =
+
+# Property page
+PROPERTY_PAGE_NAME = Ingres Connection Properties
+
+SynonymDecorationServiceLabel = Data Tools - Ingres Synonym
+datatools.core.ui.modelexplorer.modelExplorerColumnDecoration = Data Tools - Ingres Column Data Type 
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/plugin.xml b/plugins/org.eclipse.datatools.enablement.ingres.ui/plugin.xml
new file mode 100644
index 0000000..236c680
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/plugin.xml
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension
+         point="org.eclipse.datatools.connectivity.connectionProfile">
+      <newWizard
+            class="org.eclipse.datatools.enablement.ingres.internal.ui.profiles.NewIngresConnectionProfileWizard"
+            description="%WIZARD_DESCRIPTION"
+            icon="icons/new_db_element.gif"
+            id="org.eclipse.datatools.enablement.ingres.NewIngresConnectionProfileWizard"
+            name="%WIZARD_NAME"
+            profile="org.eclipse.datatools.enablement.ingres.connectionProfile">
+      </newWizard>
+   </extension>
+   <extension
+         point="org.eclipse.ui.propertyPages">
+      <page
+            class="org.eclipse.datatools.enablement.ingres.internal.ui.profiles.IngresPropertyPage"
+            id="org.eclipse.datatools.enablement.ingres.IngresPropertyPage"
+            name="%PROPERTY_PAGE_NAME">
+         <filter
+               name="org.eclipse.datatools.profile.property.id"
+               value="org.eclipse.datatools.enablement.ingres.connectionProfile">
+         </filter>
+         <enabledWhen>
+            <adapt
+                  type="org.eclipse.datatools.connectivity.IConnectionProfile">
+            </adapt>
+         </enabledWhen>
+      </page>
+   </extension>
+   <extension
+         point="org.eclipse.ui.navigator.viewer">
+      <viewerContentBinding
+            viewerId="org.eclipse.datatools.connectivity.DataSourceExplorerNavigator">
+         <includes>
+            <contentExtension
+                  pattern="org.eclipse.datatools.enablement.ingres.IngresSqlModelContent">
+            </contentExtension>
+            <contentExtension
+                  pattern="org.eclipse.datatools.enablement.ingres.UdtUdfFilter">
+            </contentExtension>
+         </includes>
+      </viewerContentBinding>
+   </extension>
+   <extension
+         point="org.eclipse.ui.navigator.navigatorContent">
+      <navigatorContent
+            contentProvider="org.eclipse.datatools.enablement.ingres.internal.ui.providers.IngresContentProvider"
+            id="org.eclipse.datatools.enablement.ingres.IngresSqlModelContent"
+            labelProvider="org.eclipse.datatools.enablement.ingres.internal.ui.providers.IngresLabelProvider"
+            name="Ingres SQL Model Content Extension"
+            priority="highest">
+         <enablement>
+            <or>
+               <instanceof
+                     value="org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSchema">
+               </instanceof>
+               <instanceof
+                     value="org.eclipse.datatools.enablement.ingres.internal.catalog.IngresProcedure">
+               </instanceof>
+            </or>
+         </enablement>
+      </navigatorContent>
+      <commonFilter
+            activeByDefault="true"
+            class="org.eclipse.datatools.enablement.ingres.internal.ui.filters.UdtUdfFilterFilter"
+            id="org.eclipse.datatools.enablement.ingres.UdtUdfFilter"
+            name="Ingres UDT and UDF Filter">
+      </commonFilter>
+   </extension>
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.ui.labelService">
+      <contributor
+            iconLocation="/icons/synonym.gif"
+            type="org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSynonym">
+      </contributor>
+   </extension>
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.ui.labelService">
+      <contributor
+            iconLocation="/icons/event.gif"
+            type="org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresDBEvent">
+      </contributor>
+   </extension>
+   <extension
+         point="org.eclipse.datatools.sqltools.sqleditor.texthover">
+      <hover
+            class="org.eclipse.datatools.enablement.ingres.internal.ui.sqleditor.texthover.IngresSQLEditorTextHover"
+            id="org.eclipse.datatools.enablement.ingres.ui.sqleditor.texthover.IngresSQLEditorTextHover">
+      </hover>
+   </extension>
+   <extension
+         point="org.eclipse.ui.decorators">
+		<decorator
+            lightweight="true"
+            location="TOP_LEFT"
+            adaptable="false"
+            label="%SynonymDecorationServiceLabel"
+            state="true"
+            class="org.eclipse.datatools.enablement.ingres.internal.ui.providers.decorators.SynonymDecorationService"
+            id="org.eclipse.datatools.enablement.ingres.ui.providers.decorators.SynonymDecorationService">
+         <enablement>
+	            <objectClass
+	                  name="org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSynonym">
+	            </objectClass>
+         </enablement>
+      </decorator>  
+   </extension>
+      <extension
+         id="org.eclipse.datatools.connectivity.sqm.core.internal.ui.modelexplorer.decorator"
+         name="%org.eclipse.datatools.connectivity.sqm.core.internal.ui.modelexplorer.decorator"
+         point="org.eclipse.ui.decorators">
+       <decorator
+            lightweight="true"
+            location="TOP_LEFT"
+            adaptable="false"
+            label="%datatools.core.ui.modelexplorer.modelExplorerColumnDecoration"
+            state="true"
+            class="org.eclipse.datatools.enablement.ingres.internal.ui.providers.decorators.ParameterDecorationService"
+            id="org.eclipse.datatools.enablement.ingres.internal.ui.providers.decorators.ParameterDecorationService">
+         <enablement>
+	            <objectClass
+	                  name="org.eclipse.datatools.modelbase.sql.routines.Parameter">
+	            </objectClass>
+         </enablement>
+      </decorator>        
+         </extension>
+      <extension
+            point="org.eclipse.datatools.connectivity.ui.driverPropertyEditor">
+         <propertyEditor
+               customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+               driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+               driverTemplateID="org.eclipse.datatools.enablement.ingres.2006.driverTemplate"
+               id="org.eclipse.datatools.connectivity.db.password.propertyeditor">
+         </propertyEditor>
+      </extension>
+   <extension
+         point="org.eclipse.datatools.sqltools.editor.core.dbConfigurations">
+      <dbConfiguration
+            configurationClass="org.eclipse.datatools.enablement.ingres.internal.ui.core.IngresDBConfiguration"
+            default="false"
+            product="Ingres"
+            supportsDebugging="false"
+            version="2006">
+      </dbConfiguration>
+   </extension>
+   <extension
+         point="org.eclipse.datatools.sqltools.plan.planService">
+      <planService
+            databaseVendorDefinitionId="Ingres_2006"
+            serviceClass="org.eclipse.datatools.enablement.ingres.internal.ui.plan.IngresPlanService">
+      </planService>
+   </extension>
+   <extension
+         point="org.eclipse.datatools.sqltools.editor.core.ui.dbUIConfigurations">
+      <dbUIConfiguration
+            configurationClass="org.eclipse.datatools.enablement.ingres.internal.ui.core.IngresDBUIConfiguration"
+            default="false"
+            product="Ingres"
+            version="2006">
+      </dbUIConfiguration>
+   </extension>
+   <extension
+         point="org.eclipse.datatools.sqltools.sql.ui.sqlNodesImage">
+      <nodeImage
+            imageHandler="org.eclipse.datatools.enablement.ingres.internal.ui.parser.IngresASTSQLStatementImageHandler"
+            nodeClazzName="org.eclipse.datatools.enablement.ingres.internal.ui.parser.ASTSQLStatement">
+      </nodeImage>
+   </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresCallableSQLResultRunnable.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresCallableSQLResultRunnable.java
new file mode 100644
index 0000000..8261b41
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresCallableSQLResultRunnable.java
@@ -0,0 +1,103 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.core;
+
+import java.sql.CallableStatement;
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.sql.Types;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.datatools.sqltools.core.DatabaseIdentifier;
+import org.eclipse.datatools.sqltools.core.ProcIdentifier;
+import org.eclipse.datatools.sqltools.core.dbitem.ParameterDescriptor;
+import org.eclipse.datatools.sqltools.core.profile.NoSuchProfileException;
+import org.eclipse.datatools.sqltools.editor.core.connection.IConnectionTracker;
+import org.eclipse.datatools.sqltools.routineeditor.launching.LaunchHelper;
+import org.eclipse.datatools.sqltools.routineeditor.parameter.ParameterInOutWrapper;
+import org.eclipse.datatools.sqltools.routineeditor.result.CallableSQLResultRunnable;
+import org.eclipse.datatools.sqltools.routineeditor.ui.launching.LaunchUI;
+import org.eclipse.debug.core.ILaunchConfiguration;
+
+/**
+ * The class CallableSupportRunnalbe has been overrriden to provide return
+ * values in stored procedure calls.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresCallableSQLResultRunnable extends CallableSQLResultRunnable {
+
+	public IngresCallableSQLResultRunnable(Connection con,
+			ILaunchConfiguration configuration, boolean closeCon,
+			IConnectionTracker tracker, DatabaseIdentifier databaseIdentifier)
+			throws CoreException, SQLException, NoSuchProfileException {
+		super(con, configuration, closeCon, tracker, databaseIdentifier);
+	}
+
+	protected Statement prepareStatement(Connection connection)
+			throws SQLException {
+
+		CallableStatement cstmt = connection.prepareCall(_sql);
+		if (_configuration != null) {
+			ProcIdentifier proc;
+			try {
+				proc = LaunchHelper.readProcIdentifier(_configuration);
+				if (proc != null) {
+					_procName = proc.getProcName();
+					_pws = LaunchHelper.getAllParameterWrappersByOrder(proc);
+
+					// The call
+					// _sql =
+					// LaunchHelper.constructCallableStatementSQLString(configuration);
+					// (called in the constructor of this class parents class)
+					// creates always an SQL string with a result
+					// parameter, but there is no result object in _pws
+					// (generated by LaunchUI)
+
+					// Add a placeholder for the return parameter wrapper
+					ParameterInOutWrapper piow = createReturnParameterWrapper();
+					ParameterInOutWrapper[] pws = new ParameterInOutWrapper[_pws.length + 1];
+					System.arraycopy(_pws, 0, pws, 1, _pws.length);
+					pws[0] = piow;
+					_pws = pws;
+
+					setInParameter(cstmt, _pws);
+					registerOutParameter(cstmt, _pws);
+
+				}
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+		return cstmt;
+	}
+
+	private ParameterInOutWrapper createReturnParameterWrapper() {
+		DatabaseIdentifier databaseIdentifier = _databaseIdentifier;
+		String name = "return"; //$NON-NLS-1$
+		int parmType = DatabaseMetaData.procedureColumnReturn;
+		int sqlDataType = Types.VARCHAR;
+		int precision = 0;
+		short scale = 0;
+		String typeName = "VARCHAR"; //$NON-NLS-1$
+		short nullable = 1;
+		String comment = ""; //$NON-NLS-1$
+
+		ParameterDescriptor pd = new ParameterDescriptor(databaseIdentifier,
+				name, parmType, sqlDataType, precision, scale, typeName,
+				nullable, comment);
+		ParameterInOutWrapper piow = new ParameterInOutWrapper(pd);
+		return piow;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresConnectionService.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresConnectionService.java
new file mode 100644
index 0000000..56ae0c1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresConnectionService.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.core;
+
+import java.sql.SQLException;
+
+import org.eclipse.datatools.sqltools.core.DatabaseIdentifier;
+import org.eclipse.datatools.sqltools.core.EditorCorePlugin;
+import org.eclipse.datatools.sqltools.core.IControlConnection;
+import org.eclipse.datatools.sqltools.core.services.ConnectionService;
+
+/**
+ * An Ingres related connection service implementation.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresConnectionService extends ConnectionService {
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.sqltools.core.services.ConnectionService#createControlConnection(org.eclipse.datatools.sqltools.core.DatabaseIdentifier)
+	 */
+	public IControlConnection createControlConnection(
+			DatabaseIdentifier databaseIdentifier) throws SQLException {
+		return new IngresControlConnection(EditorCorePlugin
+				.getControlConnectionManager(), databaseIdentifier);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresControlConnection.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresControlConnection.java
new file mode 100644
index 0000000..e43bd5b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresControlConnection.java
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.core;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.sqltools.core.DatabaseIdentifier;
+import org.eclipse.datatools.sqltools.core.IControlConnection;
+import org.eclipse.datatools.sqltools.core.IControlConnectionManager;
+import org.eclipse.datatools.sqltools.core.ProcIdentifier;
+import org.eclipse.datatools.sqltools.core.dbitem.IDBItem;
+import org.eclipse.datatools.sqltools.internal.core.AbstractControlConnection;
+import org.eclipse.datatools.sqltools.sql.util.ModelUtil;
+
+/**
+ * An Ingres related control connection implementation.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresControlConnection extends AbstractControlConnection
+		implements IControlConnection {
+
+	public IngresControlConnection(IControlConnectionManager manager,
+			DatabaseIdentifier databaseIdentifier) {
+		super(manager, databaseIdentifier);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.sqltools.internal.core.AbstractControlConnection#createDBItem(org.eclipse.datatools.sqltools.core.ProcIdentifier)
+	 */
+	protected IDBItem createDBItem(ProcIdentifier proc) {
+		SQLObject obj = ModelUtil.findProceduralObject(proc);
+		if (obj != null) {
+			return new IngresSQLObjectItem(proc, obj, this);
+		}
+		return null;
+	}
+
+	/**
+	 * This method encapsulates the execution of the provided DDL statements
+	 * within a transaction.
+	 * 
+	 * @see org.eclipse.datatools.sqltools.internal.core.AbstractControlConnection#executeDDL(java.lang.String[])
+	 */
+	public void executeDDL(String[] src) throws SQLException {
+		// we will try to use a new connection so can have transaction
+		Connection con;
+		con = getReusableConnection();
+
+		boolean autoCommit = con.getAutoCommit();
+
+		Statement stmt = con.createStatement();
+		try {
+			// encapsulate the ddl statements in a transaction
+			con.setAutoCommit(false);
+			try {
+				for (int i = 0; i < src.length; i++) {
+					stmt.executeUpdate(src[i]);
+				}
+				con.commit();
+				refresh();
+			} catch (SQLException ex) {
+				// we failed to create the new stored procedure
+
+				// rollback the statements
+				con.rollback();
+
+				throw ex; // throw the original exception out, so caller can
+				// get the error.
+			}
+		} finally {
+			stmt.close();
+			con.setAutoCommit(autoCommit);
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresDBConfiguration.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresDBConfiguration.java
new file mode 100644
index 0000000..f64fbcf
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresDBConfiguration.java
@@ -0,0 +1,103 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.core;
+
+import java.util.HashMap;
+
+import org.eclipse.datatools.enablement.ingres.internal.ui.plan.IngresExplainSQLActionDelegate;
+import org.eclipse.datatools.sqltools.core.DBHelper;
+import org.eclipse.datatools.sqltools.core.DatabaseVendorDefinitionId;
+import org.eclipse.datatools.sqltools.core.SQLDevToolsConfiguration;
+import org.eclipse.datatools.sqltools.core.services.ConnectionService;
+import org.eclipse.datatools.sqltools.core.services.ExecutionService;
+import org.eclipse.datatools.sqltools.core.services.SQLEditorService;
+import org.eclipse.datatools.sqltools.core.services.SQLService;
+
+/**
+ * An Ingres related database configuration implementation.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresDBConfiguration extends SQLDevToolsConfiguration {
+
+	private static final String[] PRODUCTS = { "Ingres", "II" };
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.sqltools.core.SQLDevToolsConfiguration#getConnectionService()
+	 */
+	public ConnectionService getConnectionService() {
+		return new IngresConnectionService();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.sqltools.core.SQLDevToolsConfiguration#getDBHelper()
+	 */
+	public DBHelper getDBHelper() {
+		return new IngresDBHelper();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.sqltools.core.SQLDevToolsConfiguration#getSQLService()
+	 */
+	public SQLService getSQLService() {
+		return new IngresSQLService();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.sqltools.core.SQLDevToolsConfiguration#getExecutionService()
+	 */
+	public ExecutionService getExecutionService() {
+		return new IngresExcecutionService();
+	}
+
+	private String format(String in) {
+		return in.trim().toLowerCase();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.sqltools.core.SQLDevToolsConfiguration#recognize(java.lang.String, java.lang.String)
+	 */
+	public boolean recognize(String product, String version) {
+		// TODO extract version from supplied string
+		// example product="INGRES" and version="0.1.0.w32/115)"
+
+		// BTF - per bug 347164, the code comparison being done on "II" was conflicting with another
+		// enablement project (at JBoss) called Teiid - so there needs to be a better way to handle that
+		if (product != null) {
+			DatabaseVendorDefinitionId targetid = new DatabaseVendorDefinitionId(
+					product, version);
+			for (int i = 0; i < PRODUCTS.length; i++) {
+				DatabaseVendorDefinitionId id = new DatabaseVendorDefinitionId(
+						PRODUCTS[i], getDatabaseVendorDefinitionId()
+								.getVersion());
+				if (id.equals(targetid)) {
+					return true;
+				}
+			}
+			return false;
+//			String formattedProduct = format(product);
+//			for (int i = 0; i < PRODUCTS.length; i++) {
+//				if (formattedProduct.indexOf(format(PRODUCTS[i])) > -1) {
+//					return true;
+//				}
+//			}
+		}
+		return false;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.sqltools.core.SQLDevToolsConfiguration#getAssociatedConnectionProfileType()
+	 */
+	public String[] getAssociatedConnectionProfileType() {
+		return new String[] { "org.eclipse.datatools.enablement.ingres.profile.connectionProfile" };
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresDBHelper.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresDBHelper.java
new file mode 100644
index 0000000..9fc5384
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresDBHelper.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.core;
+
+import java.util.Map;
+
+import org.eclipse.datatools.sqltools.core.DBHelper;
+import org.eclipse.datatools.sqltools.core.DatabaseIdentifier;
+import org.eclipse.datatools.sqltools.core.ProcIdentifier;
+
+/**
+ * An Ingres related database helper implementation.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresDBHelper extends DBHelper {
+
+	public ProcIdentifier getProcIdentifier(
+			DatabaseIdentifier databaseIdentifier, int dbObjectType, Map map) {
+		return new IngresProcIdentifierImpl(dbObjectType, databaseIdentifier,
+				map);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresDBUIConfiguration.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresDBUIConfiguration.java
new file mode 100644
index 0000000..049a0a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresDBUIConfiguration.java
@@ -0,0 +1,23 @@
+package org.eclipse.datatools.enablement.ingres.internal.ui.core;
+
+import java.util.HashMap;
+
+import org.eclipse.datatools.enablement.ingres.internal.ui.plan.IngresExplainSQLActionDelegate;
+import org.eclipse.datatools.sqltools.core.services.SQLEditorUIService;
+import org.eclipse.datatools.sqltools.editor.ui.core.SQLDevToolsUIConfiguration;
+
+public class IngresDBUIConfiguration extends SQLDevToolsUIConfiguration 
+{
+	public SQLEditorUIService getSQLEditorUIService() 
+	{
+		return new SQLEditorUIService() {
+			public HashMap getAdditionalActions() {
+				// XXX Add an Ingres specific extension to the editors context menu
+				// (until QEP generation is enabled by default)
+				HashMap additions = super.getAdditionalActions();
+				additions.put("", new IngresExplainSQLActionDelegate());
+				return additions;
+			}
+		};
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresExcecutionService.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresExcecutionService.java
new file mode 100644
index 0000000..36c8e8f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresExcecutionService.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.core;
+
+import java.sql.Connection;
+
+import org.eclipse.datatools.sqltools.core.DatabaseIdentifier;
+import org.eclipse.datatools.sqltools.core.services.ExecutionService;
+import org.eclipse.datatools.sqltools.editor.core.connection.IConnectionTracker;
+import org.eclipse.debug.core.ILaunchConfiguration;
+
+/**
+ * A SQL execution service specific to Ingres.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresExcecutionService extends ExecutionService {
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.sqltools.core.services.ExecutionService#createCallableSQLResultRunnable(java.sql.Connection, org.eclipse.debug.core.ILaunchConfiguration, boolean, org.eclipse.datatools.sqltools.editor.core.connection.IConnectionTracker, org.eclipse.datatools.sqltools.core.DatabaseIdentifier)
+	 */
+	public Runnable createCallableSQLResultRunnable(Connection con,
+			ILaunchConfiguration configuration, boolean closeCon,
+			IConnectionTracker tracker, DatabaseIdentifier databaseIdentifier) {
+		try {
+			return new IngresCallableSQLResultRunnable(con, configuration, closeCon,
+					tracker, databaseIdentifier);
+		} catch (Exception e) {
+			e.printStackTrace();
+			return null;
+		}
+	}
+
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresProcIdentifierImpl.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresProcIdentifierImpl.java
new file mode 100644
index 0000000..7c5191e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresProcIdentifierImpl.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.core;
+
+import java.util.Map;
+
+import org.eclipse.datatools.sqltools.core.DatabaseIdentifier;
+import org.eclipse.datatools.sqltools.core.ProcIdentifierImpl;
+
+/**
+ * An Ingres related proc identifier implementation.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresProcIdentifierImpl extends ProcIdentifierImpl {
+
+	public IngresProcIdentifierImpl(int type, DatabaseIdentifier db, Map map) {
+		super(type, db, map);
+	}
+
+	/**
+	 * Overridden to avoid database identifiers within procedure calls.
+	 * 
+	 * @see org.eclipse.datatools.sqltools.core.ProcIdentifierImpl#getCallableStringWithoutGroupNumber(boolean)
+	 */
+	public String getCallableStringWithoutGroupNumber(boolean quoted_id) {
+		// Ingres cannot handle database identifiers within procedure call
+		// statements.
+		// Statements like the following will not work "{?=call
+		// database.owner.procedure()}"
+
+		String result = super.getCallableStringWithoutGroupNumber(quoted_id);
+
+		// remove the database name from the statement
+		if (this.getDatabaseName() != null
+				&& this.getDatabaseName().length() > 0) {
+			result = result.substring(result.indexOf(".") + 1);
+		}
+
+		return result;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresSQLObjectItem.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresSQLObjectItem.java
new file mode 100644
index 0000000..ac10ddb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresSQLObjectItem.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.core;
+
+import java.sql.ParameterMetaData;
+import java.sql.SQLException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.sqltools.core.IControlConnection;
+import org.eclipse.datatools.sqltools.core.ProcIdentifier;
+import org.eclipse.datatools.sqltools.core.dbitem.ParameterDescriptor;
+import org.eclipse.datatools.sqltools.core.internal.dbitem.SQLObjectItem;
+
+/**
+ * An Ingres related SQL object item implementation.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresSQLObjectItem extends SQLObjectItem {
+
+	private static final Pattern RESULT_ROW_PATTERN = Pattern
+			.compile(
+					"(\\s*)(create)(.*)(result)(\\s*)(row)(.*)(begin)(.*)", Pattern.DOTALL | Pattern.MULTILINE | Pattern.CASE_INSENSITIVE); //$NON-NLS-1$
+
+	public IngresSQLObjectItem(ProcIdentifier proc, SQLObject routine,
+			IControlConnection controlConn) {
+		super(proc, routine, controlConn);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.sqltools.core.internal.dbitem.SQLObjectItem#getParameterDescriptor()
+	 */
+	public ParameterDescriptor[] getParameterDescriptor() throws SQLException {
+		ParameterDescriptor[] pds = super.getParameterDescriptor();
+
+		if (pds != null) {
+			for (int i = 0; i < pds.length; i++) {
+				if (isRowProducing()) {
+					pds[i].setParmType(ParameterMetaData.parameterModeIn);
+				} else {
+					pds[i].setParmType(ParameterMetaData.parameterModeInOut);
+				}
+			}
+		}
+
+		return pds;
+	}
+
+	/**
+	 * Determine if the wrapped routine is row producing.
+	 * 
+	 * @return <code>true</code> if the routine is rowproducing,
+	 *         <code>false</code> otherwise
+	 */
+	private boolean isRowProducing() {
+		boolean result = true;
+		if (_routine instanceof Routine) {
+			Routine ingresProcedure = (Routine) _routine;
+			if (ingresProcedure.getSource() != null
+					&& ingresProcedure.getSource().getBody() != null) {
+				Matcher matcher = RESULT_ROW_PATTERN.matcher(ingresProcedure
+						.getSource().getBody());
+				result = matcher.matches();
+			}
+		}
+		return result;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresSQLService.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresSQLService.java
new file mode 100644
index 0000000..1f15e1f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/core/IngresSQLService.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.core;
+
+import org.eclipse.datatools.enablement.ingres.internal.ui.parser.IngresSQLParser;
+import org.eclipse.datatools.enablement.ingres.internal.ui.sql.IngresSQLSyntax;
+import org.eclipse.datatools.sqltools.core.services.SQLService;
+import org.eclipse.datatools.sqltools.sql.ISQLSyntax;
+import org.eclipse.datatools.sqltools.sql.parser.SQLParser;
+
+/**
+ * An Ingres related SQL service implementation.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresSQLService extends SQLService {
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.sqltools.core.services.SQLService#getSQLParser()
+	 */
+	public SQLParser getSQLParser() {
+		return IngresSQLParser.getInstance();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.sqltools.core.services.SQLService#getSQLSyntax()
+	 */
+	public ISQLSyntax getSQLSyntax() {
+		return new IngresSQLSyntax();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/filters/UdtUdfFilterFilter.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/filters/UdtUdfFilterFilter.java
new file mode 100644
index 0000000..7e6a722
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/filters/UdtUdfFilterFilter.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.filters;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IUDFNode;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.virtual.IUDTNode;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSchema;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+
+/**
+ * Filter to exclude UDF and UDT nodes.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class UdtUdfFilterFilter extends ViewerFilter {
+
+    /**
+     * Returns false if the given element is an <code>IUDFNode</code> or an
+     * <code>IUDTNode</code> that is part of a representation of an Ingres
+     * database.
+     * 
+     * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer,
+     *      java.lang.Object, java.lang.Object)
+     */
+    public boolean select(final Viewer viewer, final Object parentElement,
+            final Object element) {
+        if (element instanceof IUDFNode
+                && ((IUDFNode) element).getParent() instanceof IngresSchema) {
+            return false;
+        }
+        if (element instanceof IUDTNode
+                && ((IUDTNode) element).getParent() instanceof IngresSchema) {
+            return false;
+        }
+
+        return true;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/l10n/messages.properties b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/l10n/messages.properties
new file mode 100644
index 0000000..3c7255d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/l10n/messages.properties
@@ -0,0 +1,38 @@
+DBEvent.Name=Events
+DBEvent.DisplayName=Events
+Synonym.Name=Synonyms
+Synonym.DisplayName=Synonyms
+Synonym.NameDecoration=\ (-> {0})
+
+ProcedureParameter.Name=Parameters
+ProcedureParameter.DisplayName=Parameters
+
+HoverInfoBuilder.alter.database    = 
+HoverInfoBuilder.alter.event       = 
+HoverInfoBuilder.alter.function    = 
+HoverInfoBuilder.alter.index       = 
+HoverInfoBuilder.alter.procedure   = 
+HoverInfoBuilder.alter.table       = alter table [schema.]table_name\nadd [column] column_name format [default_clause]\n[null_clause] [column_constraint] [collate collation_name]\n| drop [column] column_name restrict | cascade\n| add [constraint constraint_name] constraint_spec\n| drop constraint constraint_name restrict | cascade\n| alter [column] column_name format [default_clause]\n[null_clause] [column_constraint] [collate collation_name]
+HoverInfoBuilder.alter.trigger     = 
+HoverInfoBuilder.alter.view        = 
+HoverInfoBuilder.begin             = 
+HoverInfoBuilder.begin.transaction = 
+HoverInfoBuilder.call              = call system (command =command_string)
+HoverInfoBuilder.create.database   = 
+HoverInfoBuilder.create.default    = 
+HoverInfoBuilder.create.event      = 
+HoverInfoBuilder.create.function   = 
+HoverInfoBuilder.create.index      = 
+HoverInfoBuilder.create.procedure  = 
+HoverInfoBuilder.create.table      = create table [schema.] table_name\n(column_specification {, column_specification }\n[, [constraint constraint_name] table_constraint\n{, [constraint constraint_name] table_constraint}])\n[with with_clause]
+HoverInfoBuilder.create.trigger    = 
+HoverInfoBuilder.create.view       = create view view_name\r\n[(column_name {, column_name})]\r\nas select_stmt\r\n[with check option]
+HoverInfoBuilder.declare           = declare statement_name {, statement_name) statement
+HoverInfoBuilder.delete            = delete from [schema.]table_name [corr_name]\n[where search_condition];
+HoverInfoBuilder.drop.view         = drop objecttype [schema.]objectname {, [schema.]objectname};
+HoverInfoBuilder.insert            = insert into [schema.]table_name\n[(column {, column})]\n[values (expr{, expr})] | [subselect];
+HoverInfoBuilder.others            = 
+HoverInfoBuilder.root              = 
+HoverInfoBuilder.select            = select [first rowCount] [all | distinct]\n[from from_source {, from_source}\n[where search_condition]\n[group by column {, column}]\n[having search_condition]\n[union [all] full_select]\n[order by result_column [asc|desc]\n{, result_column [asc|desc]}]\n[for [deferred | direct] update of column {, column}];
+HoverInfoBuilder.select.into       = 
+HoverInfoBuilder.update            = update [schema.]table_name [corr_name]\n[from [schema.]table_name [corr_name]\n{ , [schema.]table_name [corr_name]}]\nset column = expression {, column = expression}\n[where search_condition];
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/ASTDeclareComma.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/ASTDeclareComma.java
new file mode 100644
index 0000000..705017c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/ASTDeclareComma.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.parser;
+
+
+import org.eclipse.datatools.sqltools.sql.parser.ast.IASTDeclareComma;
+
+public class ASTDeclareComma extends SimpleNode implements IASTDeclareComma{
+  public ASTDeclareComma(int id) {
+    super(id);
+  }
+
+  public ASTDeclareComma(IngresSQLParser p, int id) {
+    super(p, id);
+  }
+
+
+  /** Accept the visitor. **/
+  public Object jjtAccept(IngresSQLParserVisitor visitor, Object data) {
+    return visitor.visit(this, data);
+  }
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/ASTDeclareKeyword.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/ASTDeclareKeyword.java
new file mode 100644
index 0000000..846206d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/ASTDeclareKeyword.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.parser;
+
+import org.eclipse.datatools.sqltools.sql.parser.ast.IASTDeclareKeyword;
+
+public class ASTDeclareKeyword extends SimpleNode implements IASTDeclareKeyword {
+  public ASTDeclareKeyword(int id) {
+    super(id);
+  }
+
+  public ASTDeclareKeyword(IngresSQLParser p, int id) {
+    super(p, id);
+  }
+
+
+  /** Accept the visitor. **/
+  public Object jjtAccept(IngresSQLParserVisitor visitor, Object data) {
+    return visitor.visit(this, data);
+  }
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/ASTExpression.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/ASTExpression.java
new file mode 100644
index 0000000..f6b73c4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/ASTExpression.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.parser;
+
+
+
+public class ASTExpression extends SimpleNode {
+  public ASTExpression(int id) {
+    super(id);
+  }
+
+  public ASTExpression(IngresSQLParser p, int id) {
+    super(p, id);
+  }
+
+
+  /** Accept the visitor. **/
+  public Object jjtAccept(IngresSQLParserVisitor visitor, Object data) {
+    return visitor.visit(this, data);
+  }
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/ASTSQLDataType.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/ASTSQLDataType.java
new file mode 100644
index 0000000..cc7ac70
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/ASTSQLDataType.java
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.parser;
+
+
+import org.eclipse.datatools.sqltools.sql.parser.ast.IASTSQLDataType;
+
+public class ASTSQLDataType extends SimpleNode implements IASTSQLDataType {
+
+	private String _name;
+
+	/** can also be used be as precision when _scale is not zero */
+	private int _length;
+
+	private int _scale;
+
+	public ASTSQLDataType(int id) {
+		super(id);
+	}
+
+	public ASTSQLDataType(IngresSQLParser p, int id) {
+		super(p, id);
+	}
+
+	public int getLength() {
+		return _length;
+	}
+
+	public void setLength(int length) {
+		this._length = length;
+	}
+
+	public String getName() {
+		return _name;
+	}
+
+	public void setName(String name) {
+		this._name = name;
+	}
+
+	public String toString() {
+		String retval = _name;
+
+		if (_length > 0 || _scale >= 0) {
+			if (_scale >= 0) {
+				retval = retval + "(" + _length + "," + _scale + ")";
+			} else {
+				retval = retval + "(" + _length + ")";
+			}
+
+		}
+
+		return retval;
+	}
+
+	public int getScale() {
+		return _scale;
+	}
+
+	public void setScale(int scale) {
+		this._scale = scale;
+	}
+
+	/** Accept the visitor. * */
+	public Object jjtAccept(IngresSQLParserVisitor visitor, Object data) {
+		return visitor.visit(this, data);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/ASTSQLDelimiter.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/ASTSQLDelimiter.java
new file mode 100644
index 0000000..4d47651
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/ASTSQLDelimiter.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.parser;
+
+
+import org.eclipse.datatools.sqltools.sql.parser.ast.IASTSQLDelimiter;
+
+public class ASTSQLDelimiter extends SimpleNode implements IASTSQLDelimiter{
+  public ASTSQLDelimiter(int id) {
+    super(id);
+  }
+
+  public ASTSQLDelimiter(IngresSQLParser p, int id) {
+    super(p, id);
+  }
+
+
+  /** Accept the visitor. **/
+  public Object jjtAccept(IngresSQLParserVisitor visitor, Object data) {
+    return visitor.visit(this, data);
+  }
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/ASTSQLParam.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/ASTSQLParam.java
new file mode 100644
index 0000000..1fe94ea
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/ASTSQLParam.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.parser;
+
+
+import org.eclipse.datatools.sqltools.sql.parser.ast.IASTSQLDataType;
+import org.eclipse.datatools.sqltools.sql.parser.ast.IASTSQLParam;
+
+public class ASTSQLParam extends SimpleNode implements IASTSQLParam {
+
+	private String _name;
+
+	private String _type;
+
+	private IASTSQLDataType _typeObj;
+
+	private String _defaultValue;
+
+	private int _direction = INPUT;
+
+	public ASTSQLParam(int id) {
+		super(id);
+	}
+
+	public ASTSQLParam(IngresSQLParser p, int id) {
+		super(p, id);
+	}
+
+	/** Accept the visitor. * */
+	public Object jjtAccept(IngresSQLParserVisitor visitor, Object data) {
+		return visitor.visit(this, data);
+	}
+
+	public String getDefaultValue() {
+		return _defaultValue;
+	}
+
+	public void setDefaultValue(String defaultValue) {
+		this._defaultValue = defaultValue;
+	}
+
+	public int getDirection() {
+		return _direction;
+	}
+
+	public void setDirection(int direction) {
+		this._direction = direction;
+	}
+
+	public String getName() {
+		return _name;
+	}
+
+	public void setName(String name) {
+		this._name = name;
+	}
+
+	public String getType() {
+		return _type;
+	}
+
+	public void setType(String type) {
+		this._type = type;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.sybase.stf.dmp.ui.sqleditor.sql.parser.IASTSQLParam#getTypeObject()
+	 */
+	public IASTSQLDataType getTypeObject() {
+		return _typeObj;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.sybase.stf.dmp.ui.sqleditor.sql.parser.IASTSQLParam#setTypeObject(com.sybase.stf.dmp.ui.sqleditor.sql.parser.IASTSQLDataType)
+	 */
+	public void setTypeObject(IASTSQLDataType type) {
+		_typeObj = type;
+	}
+
+	public String toString() {
+		String retval = _name == null ? "" : _name;
+		retval += (_type == null ? "" : ":" + _type);
+		retval += (_defaultValue == null ? "" : ":" + _defaultValue);
+		retval += (_direction == 1 ? ":" + "OUT" : (_direction == 2 ? ":" + "INOUT" : "")); //$NON-NLS-2$ //$NON-NLS-4$
+
+		return retval;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/ASTSQLStatement.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/ASTSQLStatement.java
new file mode 100644
index 0000000..e8ccde3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/ASTSQLStatement.java
@@ -0,0 +1,136 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.parser;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+
+import org.eclipse.datatools.sqltools.sql.parser.SQLParserConstants;
+import org.eclipse.datatools.sqltools.sql.parser.Token;
+import org.eclipse.datatools.sqltools.sql.parser.ast.IASTSQLStatement;
+import org.eclipse.datatools.sqltools.sql.parser.util.ASTSQLStatementUtil;
+import org.eclipse.swt.graphics.Image;
+
+public class ASTSQLStatement extends SimpleNode implements IASTSQLStatement, IngresSQLParserConstants {
+
+	private int _type = -1;
+
+	private ArrayList objectIds = new ArrayList();
+
+	public ASTSQLStatement(int id) {
+		super(id);
+	}
+
+	public ASTSQLStatement(IngresSQLParser p, int id) {
+		super(p, id);
+	}
+
+	/** Accept the visitor. * */
+	public Object jjtAccept(IngresSQLParserVisitor visitor, Object data) {
+		return visitor.visit(this, data);
+	}
+
+	public int getType() {
+		if (_type == -1) {
+			_type = determineType();
+		}
+		return _type;
+	}
+
+	/**
+	 * @return
+	 */
+	private int determineType() {
+		switch (_firstToken.kind) {
+		case SELECT:
+			return SQLParserConstants.TYPE_SQL_SELECT;
+		case UPDATE:
+			return SQLParserConstants.TYPE_SQL_UPDATE;
+		case DELETE:
+			return SQLParserConstants.TYPE_SQL_DELETE;
+		case INSERT:
+			return SQLParserConstants.TYPE_SQL_INSERT;
+		case CREATE:
+			Token createToken = _firstToken.next;
+			switch (createToken.kind) {
+			case DATABASE:
+			case TEMPORARY:
+				return SQLParserConstants.TYPE_SQL_CREATE_DATABASE;
+			case TABLE:
+				return SQLParserConstants.TYPE_SQL_CREATE_TABLE;
+			case VIEW:
+				return SQLParserConstants.TYPE_SQL_CREATE_VIEW;
+			case PROCEDURE:
+			case ID:
+				if ("FUNCTION".equalsIgnoreCase(createToken.image)) {
+					return SQLParserConstants.TYPE_SQL_CREATE_FUNCTION;
+				}
+				if ("TRIGGER".equalsIgnoreCase(createToken.image)) {
+					return SQLParserConstants.TYPE_SQL_CREATE_TRIGGER;
+				}
+			case DEFAULT_VAL:
+				return SQLParserConstants.TYPE_SQL_CREATE_DEFAULT;
+			default:
+				break;
+			}
+			break;
+		case ALTER:
+			Token alterToken = _firstToken.next;
+			switch (alterToken.kind) {
+			case DATABASE:
+			case TEMPORARY:
+				return SQLParserConstants.TYPE_SQL_ALTER_DATABASE;
+			case TABLE:
+				return SQLParserConstants.TYPE_SQL_ALTER_TABLE;
+			default:
+				break;
+			}
+		case DECLARE:
+			Token declareToken = _firstToken.next;
+			switch (declareToken.kind) {
+			case VAR_NAME:
+				return SQLParserConstants.TYPE_SQL_DECLARE;
+			default:
+				break;
+			}
+		case BEGIN:
+			return SQLParserConstants.TYPE_SQL_BEGIN;
+		default:
+			break;
+		}
+		return SQLParserConstants.TYPE_SQL_OTHERS;
+	}
+
+	public String toString() {
+		return ASTSQLStatementUtil.toString(getType(), this,
+				getObjectIdentifiers());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.sybase.stf.dmp.ui.sqleditor.sql.parser.IASTSQLStatement#getAffectedTables()
+	 */
+	public Collection getObjectIdentifiers() {
+		return objectIds;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.sybase.stf.dmp.ui.sqleditor.sql.parser.IASTSQLStatement#addObjectIdentifiers(java.lang.String)
+	 */
+	public void addObjectIdentifier(String name) {
+		objectIds.add(name);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/ASTStart.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/ASTStart.java
new file mode 100644
index 0000000..caabbc9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/ASTStart.java
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.parser;
+
+import org.eclipse.datatools.sqltools.sql.parser.ast.IASTStart;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.source.IAnnotationModel;
+import org.eclipse.ui.IEditorInput;
+
+public class ASTStart extends SimpleNode implements IASTStart {
+
+	private IEditorInput _input;
+
+	private IDocument _document;
+
+	private IAnnotationModel _model;
+
+	public ASTStart(int id) {
+		super(id);
+	}
+
+	public ASTStart(IngresSQLParser p, int id) {
+		super(p, id);
+	}
+
+	/** Accept the visitor. * */
+	public Object jjtAccept(IngresSQLParserVisitor visitor, Object data) {
+		return visitor.visit(this, data);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.sybase.stf.dmp.ui.sqleditor.sql.parser.Node#setEditorInput(org.eclipse.ui.IEditorInput)
+	 */
+	public void doSetEditorInput(IEditorInput input) {
+		_input = input;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.sybase.stf.dmp.ui.sqleditor.sql.parser.Node#getEditorInput()
+	 */
+	public IEditorInput doGetEditorInput() {
+		return _input;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.sybase.stf.dmp.ui.sqleditor.sql.parser.IASTStart#doSetDocument(org.eclipse.jface.text.IDocument)
+	 */
+	public void doSetDocument(IDocument document) {
+		_document = document;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.sybase.stf.dmp.ui.sqleditor.sql.parser.IASTStart#doGetDocument()
+	 */
+	public IDocument doGetDocument() {
+		return _document;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.sybase.stf.dmp.ui.sqleditor.sql.parser.IASTStart#doSetAnnotationModel(org.eclipse.jface.text.source.IAnnotationModel)
+	 */
+	public void doSetAnnotationModel(IAnnotationModel model) {
+		_model = model;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.sybase.stf.dmp.ui.sqleditor.sql.parser.IASTStart#doGetAnnotationModel()
+	 */
+	public IAnnotationModel doGetAnnotationModel() {
+		return _model;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/IngresASTSQLStatementImageHandler.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/IngresASTSQLStatementImageHandler.java
new file mode 100644
index 0000000..c43867d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/IngresASTSQLStatementImageHandler.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2008 Sybase, Inc. and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Sybase, Inc. - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.datatools.enablement.ingres.internal.ui.parser;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.datatools.sqltools.sql.parser.ast.Node;
+import org.eclipse.datatools.sqltools.sql.ui.ASTSQLStatementUIUtil;
+import org.eclipse.datatools.sqltools.sql.ui.INodesImageHandler;
+import org.eclipse.swt.graphics.Image;
+
+public class IngresASTSQLStatementImageHandler implements INodesImageHandler {
+
+	public Image getImage(Node node) {
+		Assert.isTrue(node instanceof ASTSQLStatement);
+		return ASTSQLStatementUIUtil.getImage(((ASTSQLStatement)node).getType());
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/IngresParsingResult.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/IngresParsingResult.java
new file mode 100644
index 0000000..5610dde
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/IngresParsingResult.java
@@ -0,0 +1,136 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.parser;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import org.eclipse.datatools.sqltools.sql.parser.ParsingResult;
+import org.eclipse.datatools.sqltools.sql.parser.Token;
+import org.eclipse.datatools.sqltools.sql.parser.ast.IASTDeployable;
+import org.eclipse.datatools.sqltools.sql.parser.ast.IASTSQLParam;
+import org.eclipse.datatools.sqltools.sql.parser.ast.IASTSQLParamDefList;
+import org.eclipse.datatools.sqltools.sql.parser.ast.IASTSQLStatement;
+import org.eclipse.datatools.sqltools.sql.parser.ast.IASTStart;
+import org.eclipse.datatools.sqltools.sql.parser.ast.Node;
+import org.eclipse.datatools.sqltools.sql.parser.ast.SimpleNode;
+import org.eclipse.jface.text.IDocument;
+
+/**
+ * @author Hui Cao
+ * 
+ */
+public class IngresParsingResult extends ParsingResult {
+	
+    /**
+     *  
+     */
+    public IngresParsingResult()
+    {
+    }
+    
+	
+	/**
+     * @param rootNode
+     * @param exceptions
+     */
+    public IngresParsingResult(Node rootNode, ArrayList exceptions)
+    {
+        super(rootNode, exceptions);
+    }
+
+
+	protected ArrayList findCursorNames(IDocument document, int offset,
+			SimpleNode node) {
+        ArrayList cursors = new ArrayList();
+        if ("DECLARE".equalsIgnoreCase(node.getFirstToken().image))
+        {
+
+            try
+            {
+                Token second = node.getFirstToken().next;
+                Token third = second.next;
+                if ("CURSOR".equalsIgnoreCase(third.image))
+                {
+                    cursors.add(second.image);
+                }
+            }
+            catch (RuntimeException e)
+            {
+                //maybe there's no second and third token, do nothing
+            }
+        }
+        //we must use recursion since cursors defined in a compound statement can be referenced by later statements
+        else if ((node instanceof IASTStart || node instanceof IASTDeployable || node instanceof IASTSQLStatement)
+        && node.jjtGetNumChildren() > 0)
+        {
+            for (int i = 0; i < node.jjtGetNumChildren(); i++)
+            {
+                SimpleNode child = (SimpleNode) node.jjtGetChild(i);
+                if (child.getStartOffset(document) >= offset)
+                {
+                    break;
+                }
+                cursors.addAll(findCursorNames(document, offset, child));
+
+            }
+        }
+        return cursors;
+    }
+
+	protected HashMap findVariables(IDocument document, int offset,
+			SimpleNode node) {
+        HashMap map = new HashMap();
+        if (node instanceof IASTSQLParam && !(node.jjtGetParent() instanceof IASTSQLParamDefList))
+        {
+            IASTSQLParam param = (IASTSQLParam) node;
+            map.put(param.getName(), param);
+        }
+        //we must use recursion since cursors defined in a compound statement can be referenced by later statements
+        else if ((node instanceof IASTStart || node instanceof IASTDeployable || node instanceof IASTSQLStatement)
+        && node.jjtGetNumChildren() > 0)
+        {
+            for (int i = 0; i < node.jjtGetNumChildren(); i++)
+            {
+                SimpleNode child = (SimpleNode) node.jjtGetChild(i);
+                if (child.getStartOffset(document) >= offset)
+                {
+                    break;
+                }
+                map.putAll(findVariables(document, offset, child));
+
+            }
+        }
+        return map;
+	}
+
+	protected HashMap findCursors(IDocument document, int offset,
+			SimpleNode node) {
+		return new HashMap();
+	}
+
+	public boolean isValidObjectsFormats(ArrayList tokenLists) {
+		return false;
+	}
+
+	public boolean isVarOrPara(ArrayList tokenLists) {
+		return false;
+	}
+
+	public ArrayList getPrefix(ArrayList tokenLists, Node node) {
+		return new ArrayList();
+	}
+
+	public ArrayList getUnSharableTempTables(IDocument document, int offset) {
+		return new ArrayList();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/IngresSQLParser.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/IngresSQLParser.java
new file mode 100644
index 0000000..65ce92e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/IngresSQLParser.java
@@ -0,0 +1,11251 @@
+/* Generated By:JJTree&JavaCC: Do not edit this line. IngresSQLParser.java */
+package org.eclipse.datatools.enablement.ingres.internal.ui.parser;
+
+import java.util.ArrayList;
+import java.io.StringReader;
+
+import org.eclipse.datatools.sqltools.sql.parser.SQLParser;
+import org.eclipse.datatools.sqltools.sql.parser.ast.Node;
+import org.eclipse.datatools.sqltools.sql.parser.ast.SimpleNode;
+import org.eclipse.datatools.sqltools.sql.parser.ParseException;
+import org.eclipse.datatools.sqltools.sql.parser.SQLParserConstants;
+import org.eclipse.datatools.sqltools.sql.parser.JavaCharStream;
+import org.eclipse.datatools.sqltools.sql.parser.Token;
+import org.eclipse.datatools.sqltools.sql.parser.TokenMgrError;
+import org.eclipse.datatools.sqltools.sql.parser.ParsingResult;
+import org.eclipse.datatools.sqltools.sql.parser.util.ParserUtil;
+import org.eclipse.datatools.sqltools.sql.parser.ParserParameters;
+
+
+/**
+ * Ingres SQL parser.
+ * 
+ * @author stefan.reddig@ingres.com
+ */
+public class IngresSQLParser extends SQLParser implements/*@bgen(jjtree)*/ IngresSQLParserTreeConstants,SQLParserConstants, IngresSQLParserConstants {/*@bgen(jjtree)*/
+  protected JJTIngresSQLParserState jjtree = new JJTIngresSQLParserState();private static IngresSQLParser _instance = new IngresSQLParser(new StringReader(""));
+    private boolean _debug = false;
+
+    private ParsingResult result = null;
+    private ArrayList exceptions = new ArrayList();
+    private ArrayList knownExceptions = new ArrayList();
+        private static final int[] STMT_START = new int[]{ALTER, //BEGIN,
+                CLOSE, COMMIT, //CONTINUE,
+                CREATE,
+                DECLARE, DELETE,
+                DROP, //DUMP, 
+                EXECUTE, EXEC,
+                FETCH, //GOTO, GRANT, 
+                IF, INSERT, //KILL, LOAD, 
+                OPEN, PREPARE, //MOUNT, PRINT, 
+                REMOVE,RETURN, REVOKE, ROLLBACK, SAVE, SELECT, SET,
+                UPDATE, //UNMOUNT,
+                WHILE
+                                 };
+
+        public static final String[] STMT_START_STRING = new String[]{"ALTER",//"BEGIN",
+        "CLOSE","COMMIT", //"CONTINUE",
+        "CREATE",
+        "DECLARE","DELETE",
+        "DROP",//"DUMP",
+        "EXECUTE","EXEC",
+        "FETCH",//"GOTO","GRANT",
+        "IF","INSERT",//"KILL","LOAD",
+        "OPEN","PREPARE",//"PRINT",
+        "REMOVE","RETURN","REVOKE","ROLLBACK","SAVE","SELECT","SET",
+        "UPDATE",
+        "WHILE"
+                                 };
+
+        private static final int[] DEFINED_STMT_START = new int[]{ALTER, //BEGIN, 
+                CREATE, DECLARE, DELETE, EXECUTE, EXEC,
+                FETCH, IF, INSERT, //PRINT, 
+                RETURN, SELECT, UPDATE
+                                 };
+
+        private static final int[] TERMINATORS = new int[]{GO, SEMICOLON};
+        private static final String[] TERMINATORS_STRING = new String[]{"\\g", ";"};
+        private static int[] STMT_START_TERMINATORS = new int[STMT_START.length + TERMINATORS.length];
+
+        static
+        {
+                System.arraycopy(STMT_START, 0, STMT_START_TERMINATORS, 0, STMT_START.length);
+                System.arraycopy(TERMINATORS, 0, STMT_START_TERMINATORS, STMT_START.length, TERMINATORS.length);
+        }
+
+        //FIXME do we need this field?
+        private boolean isContentAssist = true;
+
+    /*
+    * Singleton
+    */
+    public static IngresSQLParser getInstance(){
+        return _instance;
+    }
+
+    public IngresSQLParser()
+    {
+    }
+
+        //Implements JavaCC methods
+    void jjtreeOpenNodeScope(Node n)
+    {
+      ((SimpleNode)n).setFirstToken ( getToken(1));
+    }
+
+    void jjtreeCloseNodeScope(Node n)
+    {
+      ((SimpleNode)n).setLastToken( getToken(0));
+    }
+
+    //Implements SQLParser abstract methods
+    /**
+	 * Returns the statement terminator array. Different vendors will have their
+	 * own terminators defined, so we just leave this method as abstract here.
+	 * 
+	 * @return statement terminator array
+	 */
+    public String[] getStatementTerminators()
+    {
+        return TERMINATORS_STRING;
+    }
+
+    /**
+     * Returns the token strings that can be used to begin a SQL statement. 
+     * 
+     * @return statement start token array
+     */
+    public String[] getStatementStartTokens()
+    {
+        return STMT_START_STRING;
+    }
+
+    /**
+     * Concrete parsers must imlement this method to do the real parsing.
+     * @param text sql text to be parsed.
+     * @return <code>ParsingResult</code> containing root AST node and <code>ParseException</code>s.
+     */
+    protected synchronized ParsingResult doParse(String text)
+    {
+        java.io.StringReader sr = new java.io.StringReader( text );
+                java.io.Reader r = new java.io.BufferedReader( sr );
+                //ReInit will be generated by JavaCC
+                ReInit(r);
+        initParsing();
+        return startIgnoreException();
+    }
+
+
+    //Other methods
+    private ParsingResult startIgnoreException()
+    {
+
+        Node node = new ASTStart(JJTSTART);
+        try
+        {
+                        node = startRootIgnoreException();
+        }catch (ParseException e) {
+            exceptions.add(e);
+                }
+                catch (TokenMgrError t)
+                {
+                    ParseException e = new ParseException(t.getMessage());
+                    if (token == null){
+                        //when the error token occurs at the beginning
+                        e.currentToken = new Token();
+                    }else{
+                            e.currentToken = token;
+                    }
+                    if (t.getToken() != null){
+                        e.currentToken.next = t.getToken();
+                    }else{
+                        Token errtoken = new Token();
+                        errtoken.beginLine = token.endLine;
+                        errtoken.beginColumn = token.endColumn + 1;
+                        errtoken.endLine = token.endLine;
+                        errtoken.endColumn = token.endColumn + 1;
+                        e.currentToken.next = errtoken;
+                    }
+                    exceptions.add(e);
+                }
+                catch (Throwable t)
+                {
+                        // Activator.getDefault().log(t);
+                }
+
+        Boolean consumeException = (Boolean)getParameters().getProperty(ParserParameters.PARAM_CONSUME_EXCEPTION);
+        result.setRootNode(node);
+        if ( consumeException == null || consumeException.booleanValue())
+        {
+                result.setExceptions(knownExceptions);
+        }
+        else
+        {
+                result.setExceptions(exceptions);
+        }
+        return result;
+    }
+
+        private void initParsing(){
+                result = new IngresParsingResult();
+                exceptions = new ArrayList();
+                knownExceptions = new ArrayList();
+        }
+
+        private boolean isSupportedStatementStartToken(int kind)
+        {
+                for (int i=0; i<DEFINED_STMT_START.length; i++)
+                {
+                        if (kind == DEFINED_STMT_START[i])
+                        {
+                                return true;
+                        }
+                }
+                return false;
+        }
+
+        private boolean isStatementStartToken(int kind)
+        {
+                for (int i=0; i<STMT_START.length; i++)
+                {
+                        if (kind == STMT_START[i])
+                        {
+                                return true;
+                        }
+                }
+                return false;
+        }
+
+        private boolean isStatementToken(int kind)
+        {
+                if (kind == 0 || isStatementStartToken(kind))
+                {
+                        return false;
+                }
+
+                for (int i=0; i<TERMINATORS.length; i++)
+                {
+                        if (kind == TERMINATORS[i])
+                        {
+                                return false;
+                        }
+                }
+                return true;
+        }
+
+        private boolean check(String unReservedKeyword)
+        {
+    Token currentToken = getToken(1);
+    int currentTokenKind = currentToken.kind;
+    String currentTokenImage = currentToken.image;
+    if (currentTokenKind == ID && currentTokenImage.equalsIgnoreCase(unReservedKeyword))
+    {
+        return true;
+    }
+        if (currentTokenKind == INVALID_TOKEN)
+        {
+                  result.addExpectedUnreservedKeywords(unReservedKeyword);
+        }
+    return false;
+    }
+
+          private boolean check(int type, String multiKeyword)
+  {
+        return check(type, new String[]{multiKeyword});
+  }
+
+  /**
+  *multiKeywords will show as content assist proposal
+  */
+  private boolean check(int type, String[] multiKeywords)
+  {
+    Token currentToken = getToken(1);
+    int currentTokenKind = currentToken.kind;
+    String currentTokenImage = currentToken.image;
+    if (currentTokenKind == type)
+    {
+        return true;
+    }
+        if (currentTokenKind == INVALID_TOKEN)
+        {
+                for (int i=0; i< multiKeywords.length; i++)
+                {
+                result.addExpectedUnreservedKeywords(multiKeywords[i]);
+        }
+        }
+    return false;
+  }
+
+    final private void logDebug(String message)
+    {
+            if (_debug)
+                {
+                        //Activator.getDefault().log(message);
+                }
+    }
+
+  final public Token string_literal() throws ParseException {
+                                  Token t;
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case SINGLE_STRING_LITERAL:
+      t = jj_consume_token(SINGLE_STRING_LITERAL);
+      break;
+    case DOUBLE_STRING_LITERAL:
+      t = jj_consume_token(DOUBLE_STRING_LITERAL);
+      break;
+    default:
+      jj_la1[0] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+                 {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+    /*******************************************************************
+     * Unreserved Keywords
+     *******************************************************************/
+  final public Token UK_ABSOLUTE() throws ParseException {
+                       Token t;
+    if (check("absolute")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_AFTER() throws ParseException {
+                    Token t;
+    if (check("after")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_ALL() throws ParseException {
+                  Token t;
+    if (check("all")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_BIGINT() throws ParseException {
+                     Token t;
+    if (check("bigint")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_BINARY() throws ParseException {
+                     Token t;
+    if (check("binary")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_BEFORE() throws ParseException {
+                     Token t;
+    if (check("before")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_BIT() throws ParseException {
+                  Token t;
+    if (check("bit")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_BOOLEAN() throws ParseException {
+                      Token t;
+    if (check("boolean")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_CHAR() throws ParseException {
+                   Token t;
+    if (check("char")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_CHAR_S() throws ParseException {
+                     Token t;
+    if (check("character")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_DATE() throws ParseException {
+                   Token t;
+    if (check("date")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_DATETIME() throws ParseException {
+                       Token t;
+    if (check("datetime")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_DB2SQL() throws ParseException {
+                     Token t;
+    if (check("db2sql")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_DECIMAL() throws ParseException {
+                      Token t;
+    if (check("decimal")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_DECIMAL_S() throws ParseException {
+                        Token t;
+    if (check("dec")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_DOUBLE_PRECISION() throws ParseException {
+                               Token t;
+    if (check( UK_DOUBLE_PRECISION, "double precision")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(UK_DOUBLE_PRECISION);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_EACH() throws ParseException {
+                   Token t;
+    if (check("each")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_FALSE() throws ParseException {
+                    Token t;
+    if (check("false")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_FIRST() throws ParseException {
+                    Token t;
+    if (check("first")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_FLOAT() throws ParseException {
+                    Token t;
+    if (check("float")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_FLOAT4() throws ParseException {
+                     Token t;
+    if (check("float4")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_FLOAT8() throws ParseException {
+                     Token t;
+    if (check("float8")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_FULL() throws ParseException {
+                   Token t;
+    if (check("full")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_IMAGE() throws ParseException {
+                    Token t;
+    if (check("image")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_INNER() throws ParseException {
+                    Token t;
+    if (check( "inner")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_INSENSITIVE() throws ParseException {
+                          Token t;
+    if (check("insensitive")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_INT() throws ParseException {
+                  Token t;
+    if (check("integer")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_INT1() throws ParseException {
+                   Token t;
+    if (check("integer1")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_INT2() throws ParseException {
+                   Token t;
+    if (check("integer2")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_INT4() throws ParseException {
+                   Token t;
+    if (check("integer4")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_INT8() throws ParseException {
+                   Token t;
+    if (check("integer8")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_LAST() throws ParseException {
+                   Token t;
+    if (check("last")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_LEFT() throws ParseException {
+                   Token t;
+    if (check("left")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_MODE() throws ParseException {
+                   Token t;
+    if (check("mode")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_MONEY() throws ParseException {
+                    Token t;
+    if (check("money")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_NAME() throws ParseException {
+                   Token t;
+    if (check("name")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_NCHAR() throws ParseException {
+                    Token t;
+    if (check("nchar")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_NEXT() throws ParseException {
+                   Token t;
+    if (check("next")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_NEW() throws ParseException {
+                  Token t;
+    if (check("new")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_NEW_TABLE() throws ParseException {
+                        Token t;
+    if (check("new_table")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_NONE() throws ParseException {
+                   Token t;
+    if (check("none")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_NO_SCROLL() throws ParseException {
+                        Token t;
+    if (check( UK_NO_SCROLL, "no scroll")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(UK_NO_SCROLL);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_NUMERIC() throws ParseException {
+                      Token t;
+    if (check("numeric")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_NVARCHAR() throws ParseException {
+                       Token t;
+    if (check("nvarchar")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_OF() throws ParseException {
+                 Token t;
+    if (check("of")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_OLD() throws ParseException {
+                  Token t;
+    if (check("old")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_OLD_TABLE() throws ParseException {
+                        Token t;
+    if (check("old_table")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_OUTER() throws ParseException {
+                    Token t;
+    if (check("outer")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_PRIOR() throws ParseException {
+                    Token t;
+    if (check("prior")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_REAL() throws ParseException {
+                   Token t;
+    if (check("real")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_REFERENCING() throws ParseException {
+                          Token t;
+    if (check("referencing")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_RELATIVE() throws ParseException {
+                       Token t;
+    if (check("relative")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_RESULT() throws ParseException {
+                     Token t;
+    if (check("result")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_RIGHT() throws ParseException {
+                    Token t;
+    if (check("right")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_ROW() throws ParseException {
+                  Token t;
+    if (check("row")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_SCROLL() throws ParseException {
+                     Token t;
+    if (check("scroll")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_SEMI_SENSITIVE() throws ParseException {
+                             Token t;
+    if (check( UK_SEMI_SENSITIVE, "semi sensitive")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(UK_SEMI_SENSITIVE);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_SMALLDATETIME() throws ParseException {
+                            Token t;
+    if (check("smalldatetime")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_SMALLINT() throws ParseException {
+                       Token t;
+    if (check("smallint")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_SMALLMONEY() throws ParseException {
+                         Token t;
+    if (check("smallmoney")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_STATEMENT() throws ParseException {
+                        Token t;
+    if (check("statement")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_TEXT() throws ParseException {
+                   Token t;
+    if (check("text")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_THEN() throws ParseException {
+                   Token t;
+    if (check("then")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_TIME() throws ParseException {
+                   Token t;
+    if (check("time")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_TIMESTAMP() throws ParseException {
+                        Token t;
+    if (check("timestamp")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_TINYINT() throws ParseException {
+                      Token t;
+    if (check("tinyint")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_TRUE() throws ParseException {
+                   Token t;
+    if (check("true")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_UNICHAR() throws ParseException {
+                      Token t;
+    if (check("unichar")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_UNIVARCHAR() throws ParseException {
+                         Token t;
+    if (check("univarchar")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_VARBINARY() throws ParseException {
+                        Token t;
+    if (check("varbinary")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_VARCHAR() throws ParseException {
+                      Token t;
+    if (check("varchar")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(ID);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_VARCHAR_S() throws ParseException {
+                        Token t;
+    if (check( UK_VARCHAR_S, "char varying")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(UK_VARCHAR_S);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token UK_VARCHAR_S1() throws ParseException {
+                         Token t;
+    if (check( UK_VARCHAR_S1, "character varying")) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    t = jj_consume_token(UK_VARCHAR_S1);
+         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+        /**
+	 * Ignore exception during parsing so that the rest part can be parsed
+	 * rule: [ delimiter()] ( statement() )* <EOF>
+	 */
+  final public Node startRootIgnoreException() throws ParseException {
+                                                   /*@bgen(jjtree) Start */
+  ASTStart jjtn000 = new ASTStart(JJTSTART);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+  jjtreeOpenNodeScope(jjtn000);
+    try {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GO:
+      case SEMICOLON:
+        delimiter();
+        break;
+      default:
+        jj_la1[1] = jj_gen;
+        ;
+      }
+      label_1:
+      while (true) {
+        if (jj_2_1(1)) {
+          ;
+        } else {
+          break label_1;
+        }
+        try {
+          statement();
+        } catch (ParseException e) {
+                        //TODO can we create an UnknownStatement?
+                    exceptions.add(e);
+                    error_skiptobefore(new int[]{END}, STMT_START_TERMINATORS);
+        } catch (Throwable t) {
+                //TODO: handle this throwable separately in SQLEditor:setOutlineContent.
+                        ParseException e = new ParseException(ParserUtil.getErrorMessage(getToken(0)));
+                        e.currentToken = getToken(0);
+                        exceptions.add(e);
+                    error_skiptobefore(new int[]{END}, STMT_START_TERMINATORS);
+        }
+      }
+      jj_consume_token(0);
+           jjtree.closeNodeScope(jjtn000, true);
+           jjtc000 = false;
+           jjtreeCloseNodeScope(jjtn000);
+           {if (true) return jjtn000;}
+    } catch (Throwable jjte000) {
+          if (jjtc000) {
+            jjtree.clearNodeScope(jjtn000);
+            jjtc000 = false;
+          } else {
+            jjtree.popNode();
+          }
+          if (jjte000 instanceof RuntimeException) {
+            {if (true) throw (RuntimeException)jjte000;}
+          }
+          if (jjte000 instanceof ParseException) {
+            {if (true) throw (ParseException)jjte000;}
+          }
+          {if (true) throw (Error)jjte000;}
+    } finally {
+          if (jjtc000) {
+            jjtree.closeNodeScope(jjtn000, true);
+            jjtreeCloseNodeScope(jjtn000);
+          }
+    }
+    throw new Error("Missing return statement in function");
+  }
+
+  final public ASTSQLDelimiter delimiter() throws ParseException {
+                                           /*@bgen(jjtree) SQLDelimiter */
+  ASTSQLDelimiter jjtn000 = new ASTSQLDelimiter(JJTSQLDELIMITER);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+  jjtreeOpenNodeScope(jjtn000);
+    try {
+      label_2:
+      while (true) {
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case SEMICOLON:
+          jj_consume_token(SEMICOLON);
+          break;
+        case GO:
+          jj_consume_token(GO);
+          break;
+        default:
+          jj_la1[2] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+        if (jj_2_2(2)) {
+          ;
+        } else {
+          break label_2;
+        }
+      }
+          jjtree.closeNodeScope(jjtn000, true);
+          jjtc000 = false;
+          jjtreeCloseNodeScope(jjtn000);
+                {if (true) return jjtn000;}
+    } finally {
+          if (jjtc000) {
+            jjtree.closeNodeScope(jjtn000, true);
+            jjtreeCloseNodeScope(jjtn000);
+          }
+    }
+    throw new Error("Missing return statement in function");
+  }
+
+  final public void statement() throws ParseException {
+                    setScope("SQL Statement", SCOPE_DEFAULT);/*the default scope*/result.clearCurrentTableNames(isContentAssist);
+    try {
+      if (jj_2_13(1)) {
+                    ASTSQLStatement jjtn001 = new ASTSQLStatement(JJTSQLSTATEMENT);
+                    boolean jjtc001 = true;
+                    jjtree.openNodeScope(jjtn001);
+                    jjtreeOpenNodeScope(jjtn001);
+        try {
+          if (jj_2_3(2147483647)) {
+            create_stmts();
+          } else if (jj_2_4(2147483647)) {
+            alter_stmts();
+          } else if (jj_2_5(2147483647)) {
+            drop_stmts();
+          } else if (jj_2_6(2147483647)) {
+            insert_stmts();
+          } else if (jj_2_7(2147483647)) {
+            update_stmts();
+          } else if (jj_2_8(2147483647)) {
+            select();
+          } else if (jj_2_9(2147483647)) {
+            delete_stmts();
+          } else if (jj_2_10(2147483647)) {
+            remove_stmts();
+          } else {
+            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+            case RETURN:
+              return_stmt();
+              break;
+            default:
+              jj_la1[3] = jj_gen;
+              if (jj_2_11(2)) {
+                execute_stmt();
+              } else {
+                switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+                case IF:
+                  if_stmt();
+                  break;
+                case PRINT:
+                  print();
+                  break;
+                default:
+                  jj_la1[4] = jj_gen;
+                  if (jj_2_12(1)) {
+                    unknown_sql_stmt();
+                  } else {
+                    jj_consume_token(-1);
+                    throw new ParseException();
+                  }
+                }
+              }
+            }
+          }
+        } catch (Throwable jjte001) {
+                    if (jjtc001) {
+                      jjtree.clearNodeScope(jjtn001);
+                      jjtc001 = false;
+                    } else {
+                      jjtree.popNode();
+                    }
+                    if (jjte001 instanceof RuntimeException) {
+                      {if (true) throw (RuntimeException)jjte001;}
+                    }
+                    if (jjte001 instanceof ParseException) {
+                      {if (true) throw (ParseException)jjte001;}
+                    }
+                    {if (true) throw (Error)jjte001;}
+        } finally {
+                    if (jjtc001) {
+                      jjtree.closeNodeScope(jjtn001, true);
+                      jjtreeCloseNodeScope(jjtn001);
+                    }
+        }
+      } else {
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case DECLARE:
+          declare();
+          break;
+        default:
+          jj_la1[5] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+      }
+      if (jj_2_14(2147483647)) {
+        delimiter();
+      } else {
+        ;
+      }
+    } catch (ParseException e) {
+          exceptions.add(e);
+            error_skiptobefore(new int[]{END}, STMT_START_TERMINATORS);
+            //to generate an ASTSQLDelimiter node so that the statement can be separated
+            if (getToken(1).kind == SEMICOLON )
+            {
+                delimiter();
+            }
+    } catch (Throwable t) {
+        //TODO: handle this throwable separately in SQLEditor:setOutlineContent.
+                ParseException e = new ParseException(ParserUtil.getErrorMessage(getToken(0)));
+                e.currentToken = getToken(0);
+                exceptions.add(e);
+            error_skiptobefore(new int[]{END}, STMT_START_TERMINATORS);
+            if ( getToken(1).kind == SEMICOLON )
+            {
+                delimiter();
+            }
+    }
+
+  }
+
+  final public void unknown_sql_stmt() throws ParseException {
+    if (!isSupportedStatementStartToken(getToken(1).kind)) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case CLOSE:
+      jj_consume_token(CLOSE);
+      break;
+    case COMMIT:
+      jj_consume_token(COMMIT);
+      break;
+    case CONTINUE:
+      jj_consume_token(CONTINUE);
+      break;
+    case DECLARE:
+      jj_consume_token(DECLARE);
+      break;
+    case DUMP:
+      jj_consume_token(DUMP);
+      break;
+    case EXEC:
+      jj_consume_token(EXEC);
+      break;
+    case GOTO:
+      jj_consume_token(GOTO);
+      break;
+    case GRANT:
+      jj_consume_token(GRANT);
+      break;
+    case KILL:
+      jj_consume_token(KILL);
+      break;
+    case LOAD:
+      jj_consume_token(LOAD);
+      break;
+    case MODIFY:
+      jj_consume_token(MODIFY);
+      break;
+    case OPEN:
+      jj_consume_token(OPEN);
+      break;
+    case PREPARE:
+      jj_consume_token(PREPARE);
+      break;
+    case RETURN:
+      jj_consume_token(RETURN);
+      break;
+    case REVOKE:
+      jj_consume_token(REVOKE);
+      break;
+    case ROLLBACK:
+      jj_consume_token(ROLLBACK);
+      break;
+    case SAVE:
+      jj_consume_token(SAVE);
+      break;
+    case SET:
+      jj_consume_token(SET);
+      break;
+    case WHILE:
+      jj_consume_token(WHILE);
+      break;
+    case ID:
+      jj_consume_token(ID);
+      break;
+    default:
+      jj_la1[6] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+                error_skiptobefore(new int[]{END}, STMT_START_TERMINATORS);
+  }
+
+  final public void any_stmt_token() throws ParseException {
+                error_skiptobefore(new int[]{END}, STMT_START_TERMINATORS);
+  }
+
+  final public void create_stmts() throws ParseException {
+    if (jj_2_15(2)) {
+      jj_consume_token(CREATE);
+      jj_consume_token(PROCEDURE);
+      create_proc_body();
+    } else if (jj_2_16(2)) {
+      jj_consume_token(CREATE);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case DBEVENT:
+        jj_consume_token(DBEVENT);
+        break;
+      case GROUP:
+        jj_consume_token(GROUP);
+        break;
+      case INDEX:
+      case UNIQUE:
+        unique();
+        jj_consume_token(INDEX);
+        break;
+      case INTEGRITY:
+        jj_consume_token(INTEGRITY);
+        break;
+      case LOCATION:
+        jj_consume_token(LOCATION);
+        break;
+      case PROFILE:
+        jj_consume_token(PROFILE);
+        break;
+      case ROLE:
+        jj_consume_token(ROLE);
+        break;
+      case SCHEMA:
+        jj_consume_token(SCHEMA);
+        break;
+      case SECURITY_ALARM:
+        jj_consume_token(SECURITY_ALARM);
+        break;
+      case SEQUENCE:
+        jj_consume_token(SEQUENCE);
+        break;
+      case SYNONYM:
+        jj_consume_token(SYNONYM);
+        break;
+      case TABLE:
+        jj_consume_token(TABLE);
+        break;
+      case USER:
+        jj_consume_token(USER);
+        break;
+      case VIEW:
+        jj_consume_token(VIEW);
+        break;
+      default:
+        jj_la1[7] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+      any_stmt_token();
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void create_proc_body() throws ParseException {
+    jj_consume_token(ID);
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case OPENPAREN:
+      cdbp_parmspec();
+      break;
+    default:
+      jj_la1[8] = jj_gen;
+      ;
+    }
+    if (jj_2_17(1)) {
+      cdbp_resrowspec();
+    } else {
+      ;
+    }
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case AS:
+      jj_consume_token(AS);
+      break;
+    case EQUAL:
+      jj_consume_token(EQUAL);
+      break;
+    default:
+      jj_la1[9] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    cdbp_beblock();
+  }
+
+  final public void cdbp_parmspec() throws ParseException {
+    jj_consume_token(OPENPAREN);
+    cdbp_parmlist();
+    jj_consume_token(CLOSEPAREN);
+  }
+
+  final public void cdbp_parmlist() throws ParseException {
+    cdbp_parmitem();
+    label_3:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case COMMA:
+        ;
+        break;
+      default:
+        jj_la1[10] = jj_gen;
+        break label_3;
+      }
+      jj_consume_token(COMMA);
+      cdbp_parmitem();
+    }
+  }
+
+  final public void cdbp_parmitem() throws ParseException {
+    jj_consume_token(ID);
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case EQUAL:
+      jj_consume_token(EQUAL);
+      break;
+    default:
+      jj_la1[11] = jj_gen;
+      ;
+    }
+    datatype();
+    label_4:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case NOT:
+      case WITH:
+        ;
+        break;
+      default:
+        jj_la1[12] = jj_gen;
+        break label_4;
+      }
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case WITH:
+        jj_consume_token(WITH);
+        break;
+      case NOT:
+        jj_consume_token(NOT);
+        break;
+      default:
+        jj_la1[13] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case DEFAULT_VAL:
+        jj_consume_token(DEFAULT_VAL);
+        break;
+      case NULL:
+        jj_consume_token(NULL);
+        break;
+      default:
+        jj_la1[14] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    }
+  }
+
+  final public void cdbp_resrowspec() throws ParseException {
+    UK_RESULT();
+    UK_ROW();
+    label_5:
+    while (true) {
+      datatype();
+      label_6:
+      while (true) {
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case NOT:
+        case WITH:
+          ;
+          break;
+        default:
+          jj_la1[15] = jj_gen;
+          break label_6;
+        }
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case WITH:
+          jj_consume_token(WITH);
+          break;
+        case NOT:
+          jj_consume_token(NOT);
+          break;
+        default:
+          jj_la1[16] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case DEFAULT_VAL:
+          jj_consume_token(DEFAULT_VAL);
+          break;
+        case NULL:
+          jj_consume_token(NULL);
+          break;
+        default:
+          jj_la1[17] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+      }
+      if (jj_2_18(1)) {
+        ;
+      } else {
+        break label_5;
+      }
+    }
+  }
+
+  final public void cdbp_beblock() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case DECLARE:
+      declare();
+      break;
+    default:
+      jj_la1[18] = jj_gen;
+      ;
+    }
+    jj_consume_token(BEGIN);
+    label_7:
+    while (true) {
+      statement();
+      if (jj_2_19(1)) {
+        ;
+      } else {
+        break label_7;
+      }
+    }
+    jj_consume_token(END);
+  }
+
+  final public void unique() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case UNIQUE:
+      jj_consume_token(UNIQUE);
+      break;
+    default:
+      jj_la1[19] = jj_gen;
+      ;
+    }
+  }
+
+  final public void alter_stmts() throws ParseException {
+    jj_consume_token(ALTER);
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case GROUP:
+      jj_consume_token(GROUP);
+      break;
+    case LOCATION:
+      jj_consume_token(LOCATION);
+      break;
+    case PROFILE:
+      jj_consume_token(PROFILE);
+      break;
+    case ROLE:
+      jj_consume_token(ROLE);
+      break;
+    case SECURITY_AUDIT:
+      jj_consume_token(SECURITY_AUDIT);
+      break;
+    case SEQUENCE:
+      jj_consume_token(SEQUENCE);
+      break;
+    case TABLE:
+      jj_consume_token(TABLE);
+      break;
+    case USER:
+      jj_consume_token(USER);
+      break;
+    default:
+      jj_la1[20] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    any_stmt_token();
+  }
+
+  final public void drop_stmts() throws ParseException {
+    if (jj_2_20(2)) {
+      jj_consume_token(DROP);
+      jj_consume_token(PROCEDURE);
+      jj_consume_token(ID);
+    } else if (jj_2_21(2)) {
+      jj_consume_token(DROP);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case DBEVENT:
+        jj_consume_token(DBEVENT);
+        break;
+      case DOMAIN:
+        jj_consume_token(DOMAIN);
+        break;
+      case GROUP:
+        jj_consume_token(GROUP);
+        break;
+      case INDEX:
+        jj_consume_token(INDEX);
+        break;
+      case INTEGRITY:
+        jj_consume_token(INTEGRITY);
+        break;
+      case LOCATION:
+        jj_consume_token(LOCATION);
+        break;
+      case PROFILE:
+        jj_consume_token(PROFILE);
+        break;
+      case ROLE:
+        jj_consume_token(ROLE);
+        break;
+      case RULE:
+        jj_consume_token(RULE);
+        break;
+      case SECURITY_ALARM:
+        jj_consume_token(SECURITY_ALARM);
+        break;
+      case SEQUENCE:
+        jj_consume_token(SEQUENCE);
+        break;
+      case SYNONYM:
+        jj_consume_token(SYNONYM);
+        break;
+      case TABLE:
+        jj_consume_token(TABLE);
+        break;
+      case USER:
+        jj_consume_token(USER);
+        break;
+      case VIEW:
+        jj_consume_token(VIEW);
+        break;
+      case ID:
+        jj_consume_token(ID);
+        break;
+      default:
+        jj_la1[21] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+      any_stmt_token();
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void delete_stmts() throws ParseException {
+    delete();
+  }
+
+  final public void insert_stmts() throws ParseException {
+    insert();
+  }
+
+  final public void update_stmts() throws ParseException {
+    update();
+  }
+
+  final public void remove_stmts() throws ParseException {
+    jj_consume_token(REMOVE);
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case DBEVENT:
+      jj_consume_token(DBEVENT);
+      break;
+    case TABLE:
+      jj_consume_token(TABLE);
+      break;
+    default:
+      jj_la1[22] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    any_stmt_token();
+  }
+
+  final public ASTSQLDataType datatype() throws ParseException {
+                                           /*@bgen(jjtree) SQLDataType */
+  ASTSQLDataType jjtn000 = new ASTSQLDataType(JJTSQLDATATYPE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+  jjtreeOpenNodeScope(jjtn000);
+    try {
+      base_datatype();
+          jjtree.closeNodeScope(jjtn000, true);
+          jjtc000 = false;
+          jjtreeCloseNodeScope(jjtn000);
+         {if (true) return jjtn000;}
+    } catch (Throwable jjte000) {
+          if (jjtc000) {
+            jjtree.clearNodeScope(jjtn000);
+            jjtc000 = false;
+          } else {
+            jjtree.popNode();
+          }
+          if (jjte000 instanceof RuntimeException) {
+            {if (true) throw (RuntimeException)jjte000;}
+          }
+          if (jjte000 instanceof ParseException) {
+            {if (true) throw (ParseException)jjte000;}
+          }
+          {if (true) throw (Error)jjte000;}
+    } finally {
+          if (jjtc000) {
+            jjtree.closeNodeScope(jjtn000, true);
+            jjtreeCloseNodeScope(jjtn000);
+          }
+    }
+    throw new Error("Missing return statement in function");
+  }
+
+  final public ASTSQLDataType base_datatype() throws ParseException {
+                                                /*@bgen(jjtree) SQLDataType */
+                                                ASTSQLDataType jjtn000 = new ASTSQLDataType(JJTSQLDATATYPE);
+                                                boolean jjtc000 = true;
+                                                jjtree.openNodeScope(jjtn000);
+                                                jjtreeOpenNodeScope(jjtn000);Token t= null; int length=0, scale=-1; String name=null;
+    try {
+      try {
+        if (jj_2_44(1)) {
+          if (jj_2_22(1)) {
+            t = UK_CHAR();
+          } else if (jj_2_23(1)) {
+            t = UK_CHAR_S();
+          } else if (jj_2_24(1)) {
+            t = UK_TEXT();
+          } else if (jj_2_25(1)) {
+            UK_VARCHAR();
+          } else {
+            jj_consume_token(-1);
+            throw new ParseException();
+          }
+          if (jj_2_26(2)) {
+            jj_consume_token(OPENPAREN);
+            length = number();
+            jj_consume_token(CLOSEPAREN);
+          } else {
+            ;
+          }
+        } else if (jj_2_45(1)) {
+          t = UK_NCHAR();
+          if (jj_2_27(2)) {
+            jj_consume_token(OPENPAREN);
+            length = number();
+            jj_consume_token(CLOSEPAREN);
+          } else {
+            ;
+          }
+        } else if (jj_2_46(1)) {
+          t = UK_NVARCHAR();
+          if (jj_2_28(2)) {
+            jj_consume_token(OPENPAREN);
+            length = number();
+            jj_consume_token(CLOSEPAREN);
+          } else {
+            ;
+          }
+        } else if (jj_2_47(1)) {
+          if (jj_2_29(1)) {
+            t = UK_TINYINT();
+          } else if (jj_2_30(1)) {
+            t = UK_SMALLINT();
+          } else if (jj_2_31(1)) {
+            t = UK_INT();
+          } else if (jj_2_32(1)) {
+            t = UK_BIGINT();
+          } else {
+            jj_consume_token(-1);
+            throw new ParseException();
+          }
+        } else if (jj_2_48(1)) {
+          if (jj_2_33(1)) {
+            t = UK_INT1();
+          } else if (jj_2_34(1)) {
+            t = UK_INT2();
+          } else if (jj_2_35(1)) {
+            t = UK_INT4();
+          } else if (jj_2_36(1)) {
+            t = UK_INT8();
+          } else {
+            jj_consume_token(-1);
+            throw new ParseException();
+          }
+        } else if (jj_2_49(1)) {
+          if (jj_2_37(1)) {
+            t = UK_NUMERIC();
+          } else if (jj_2_38(1)) {
+            t = UK_DECIMAL();
+          } else if (jj_2_39(1)) {
+            t = UK_DECIMAL_S();
+          } else {
+            jj_consume_token(-1);
+            throw new ParseException();
+          }
+          if (jj_2_40(2)) {
+            jj_consume_token(OPENPAREN);
+            length = number();
+            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+            case COMMA:
+              jj_consume_token(COMMA);
+              scale = number();
+              break;
+            default:
+              jj_la1[23] = jj_gen;
+              ;
+            }
+            jj_consume_token(CLOSEPAREN);
+                        if ((length < scale))
+                        {
+                                    ParseException e = new ParseException("You must specify a scale that is less than or equal to the size");
+                                    e.currentToken = t.next;
+                                    exceptions.add(e);
+                        }
+          } else {
+            ;
+          }
+        } else if (jj_2_50(1)) {
+          t = UK_FLOAT();
+          if (jj_2_41(2)) {
+            jj_consume_token(OPENPAREN);
+            length = number();
+            jj_consume_token(CLOSEPAREN);
+          } else {
+            ;
+          }
+        } else if (jj_2_51(1)) {
+          t = UK_DOUBLE_PRECISION();
+        } else if (jj_2_52(1)) {
+          t = UK_FLOAT4();
+          if (jj_2_42(2)) {
+            jj_consume_token(OPENPAREN);
+            length = number();
+            jj_consume_token(CLOSEPAREN);
+          } else {
+            ;
+          }
+        } else if (jj_2_53(1)) {
+          t = UK_FLOAT8();
+          if (jj_2_43(2)) {
+            jj_consume_token(OPENPAREN);
+            length = number();
+            jj_consume_token(CLOSEPAREN);
+          } else {
+            ;
+          }
+        } else if (jj_2_54(1)) {
+          t = UK_REAL();
+        } else if (jj_2_55(1)) {
+          t = UK_DATE();
+        } else if (jj_2_56(1)) {
+          t = UK_MONEY();
+        } else {
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+        if (t != null )
+        {
+                ((ASTSQLDataType)jjtn000).setName(t.image);
+        }else{
+                ((ASTSQLDataType)jjtn000).setName(name);
+        }
+      ((ASTSQLDataType)jjtn000).setLength(length);
+      ((ASTSQLDataType)jjtn000).setScale(scale);
+      {if (true) return jjtn000;}
+      } catch (ParseException e) {
+                exceptions.add(e);
+                {if (true) return jjtn000;}
+      }
+    } catch (Throwable jjte000) {
+          if (jjtc000) {
+            jjtree.clearNodeScope(jjtn000);
+            jjtc000 = false;
+          } else {
+            jjtree.popNode();
+          }
+          if (jjte000 instanceof RuntimeException) {
+            {if (true) throw (RuntimeException)jjte000;}
+          }
+          if (jjte000 instanceof ParseException) {
+            {if (true) throw (ParseException)jjte000;}
+          }
+          {if (true) throw (Error)jjte000;}
+    } finally {
+          if (jjtc000) {
+            jjtree.closeNodeScope(jjtn000, true);
+            jjtreeCloseNodeScope(jjtn000);
+          }
+    }
+    throw new Error("Missing return statement in function");
+  }
+
+//not needed, if not in DataTypes
+  final public String java_name() throws ParseException {
+                      Token t = null; String wholename = null; String part = null;
+    t = id_or_string();
+                                             wholename = t.image;
+    if (jj_2_57(2)) {
+      jj_consume_token(DOT);
+      part = java_name();
+                                                                                                         wholename += "." + part;
+    } else {
+      ;
+    }
+         {if (true) return wholename;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public void insert() throws ParseException {
+                 setScope("insert", SCOPE_TABLES);
+    jj_consume_token(INSERT);
+    jj_consume_token(INTO);
+    ii_obj_spec();
+                                                        setScope("insert", SCOPE_COLUMNS);
+    optional_insert_col_list();
+    insert_source();
+  }
+
+  final public void optional_insert_col_list() throws ParseException {
+    if (jj_2_58(2)) {
+      jj_consume_token(OPENPAREN);
+      insert_column_list();
+      jj_consume_token(CLOSEPAREN);
+    } else {
+      ;
+    }
+  }
+
+  final public void insert_column_list() throws ParseException {
+    ii_col_spec();
+    label_8:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case COMMA:
+        ;
+        break;
+      default:
+        jj_la1[24] = jj_gen;
+        break label_8;
+      }
+      jj_consume_token(COMMA);
+      ii_col_spec();
+    }
+  }
+
+  final public void insert_source() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case VALUES:
+      jj_consume_token(VALUES);
+      jj_consume_token(OPENPAREN);
+      insert_values();
+      jj_consume_token(CLOSEPAREN);
+      break;
+    case SELECT:
+    case OPENPAREN:
+      select();
+      break;
+    default:
+      jj_la1[25] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void insert_values() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case AVG:
+    case CASE:
+    case COALESCE:
+    case COUNT:
+    case DEFAULT_VAL:
+    case MAX:
+    case MIN:
+    case NULL:
+    case NULLIF:
+    case SESSION:
+    case SUM:
+    case USER:
+    case II_DBA:
+    case II_INGRES:
+    case INTEGER_LITERAL:
+    case FLOATING_POINT_LITERAL:
+    case SINGLE_STRING_LITERAL:
+    case DOUBLE_STRING_LITERAL:
+    case BINARY_LITERAL:
+    case MONEY_LITERAL:
+    case ID:
+    case SQUARE_BRACKET_ID:
+    case VAR_NAME:
+    case GLOBAL_VAR_NAME:
+    case TEMP_TABLE_NAME:
+    case DELIM_IDENT:
+    case TILDE:
+    case OPENPAREN:
+    case PLUS:
+    case MINUS:
+    case QUESTIONMARK:
+      insert_value_list();
+      break;
+    default:
+      jj_la1[26] = jj_gen;
+      ;
+    }
+  }
+
+  final public void insert_value_list() throws ParseException {
+    insert_value();
+    label_9:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case COMMA:
+        ;
+        break;
+      default:
+        jj_la1[27] = jj_gen;
+        break label_9;
+      }
+      jj_consume_token(COMMA);
+      insert_value();
+    }
+  }
+
+  final public void insert_value() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case AVG:
+    case CASE:
+    case COALESCE:
+    case COUNT:
+    case MAX:
+    case MIN:
+    case NULL:
+    case NULLIF:
+    case SESSION:
+    case SUM:
+    case USER:
+    case II_DBA:
+    case II_INGRES:
+    case INTEGER_LITERAL:
+    case FLOATING_POINT_LITERAL:
+    case SINGLE_STRING_LITERAL:
+    case DOUBLE_STRING_LITERAL:
+    case BINARY_LITERAL:
+    case MONEY_LITERAL:
+    case ID:
+    case SQUARE_BRACKET_ID:
+    case VAR_NAME:
+    case GLOBAL_VAR_NAME:
+    case TEMP_TABLE_NAME:
+    case DELIM_IDENT:
+    case TILDE:
+    case OPENPAREN:
+    case PLUS:
+    case MINUS:
+    case QUESTIONMARK:
+      expression();
+      break;
+    case DEFAULT_VAL:
+      jj_consume_token(DEFAULT_VAL);
+      break;
+    default:
+      jj_la1[28] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void update() throws ParseException {
+    jj_consume_token(UPDATE);
+                          setScope("update", SCOPE_TABLES);
+    ii_obj_spec();
+    jj_consume_token(SET);
+                          setScope("update", SCOPE_COLUMNS);
+    set_clause_list();
+                          setScope("update", SCOPE_TABLES);
+    from_where_clause();
+  }
+
+  final public void set_clause_list() throws ParseException {
+    set_clause();
+    label_10:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case COMMA:
+        ;
+        break;
+      default:
+        jj_la1[29] = jj_gen;
+        break label_10;
+      }
+      jj_consume_token(COMMA);
+      set_clause();
+    }
+  }
+
+  final public void set_clause() throws ParseException {
+    if (jj_2_59(3)) {
+      primary();
+    } else {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case VAR_NAME:
+        variable_assignment();
+        break;
+      default:
+        jj_la1[30] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    }
+    jj_consume_token(EQUAL);
+    expression();
+  }
+
+  final public void select() throws ParseException {
+    query_expression();
+    order_by_clause();
+  }
+
+  final public void query_expression() throws ParseException {
+    query_term();
+    label_11:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case UNION:
+        ;
+        break;
+      default:
+        jj_la1[31] = jj_gen;
+        break label_11;
+      }
+      jj_consume_token(UNION);
+      all_option();
+      query_term();
+    }
+  }
+
+  final public void query_term() throws ParseException {
+    query_primary();
+  }
+
+  final public void all_option() throws ParseException {
+    if (jj_2_60(1)) {
+      UK_ALL();
+    } else {
+      ;
+    }
+  }
+
+  final public void query_primary() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case SELECT:
+      simple_table();
+      break;
+    case OPENPAREN:
+      jj_consume_token(OPENPAREN);
+      query_expression();
+      jj_consume_token(CLOSEPAREN);
+      break;
+    default:
+      jj_la1[32] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void simple_table() throws ParseException {
+    query_specification();
+  }
+
+  final public void query_specification() throws ParseException {
+    jj_consume_token(SELECT);
+    all_distinct();
+                 setScope("query_specification", SCOPE_COLUMNS);
+    select_list();
+                 setScope("query_specification", SCOPE_TABLES);
+    optional_from_clause();
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case WHERE:
+      where_clause();
+      break;
+    default:
+      jj_la1[33] = jj_gen;
+      ;
+    }
+    group_by_clause();
+    having_clause();
+  }
+
+  final public void all_distinct() throws ParseException {
+    if (jj_2_62(1)) {
+      if (jj_2_61(1)) {
+        UK_ALL();
+      } else {
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case DISTINCT:
+          jj_consume_token(DISTINCT);
+          break;
+        default:
+          jj_la1[34] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+      }
+    } else {
+      ;
+    }
+  }
+
+  final public void delete() throws ParseException {
+                 setScope("delete", SCOPE_TABLES);
+    jj_consume_token(DELETE);
+    jj_consume_token(FROM);
+    ii_tbl_spec();
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case WHERE:
+      where_clause();
+      break;
+    default:
+      jj_la1[35] = jj_gen;
+      ;
+    }
+  }
+
+  final public void subquery() throws ParseException {
+    jj_consume_token(OPENPAREN);
+    subquery_content();
+    jj_consume_token(CLOSEPAREN);
+  }
+
+  final public void subquery_content() throws ParseException {
+                                        /*@bgen(jjtree) SQLStatement */
+  ASTSQLStatement jjtn000 = new ASTSQLStatement(JJTSQLSTATEMENT);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+  jjtreeOpenNodeScope(jjtn000);
+    try {
+      jj_consume_token(SELECT);
+      subq_select();
+                           jjtree.closeNodeScope(jjtn000, true);
+                           jjtc000 = false;
+                           jjtreeCloseNodeScope(jjtn000);
+
+    } catch (Throwable jjte000) {
+                           if (jjtc000) {
+                             jjtree.clearNodeScope(jjtn000);
+                             jjtc000 = false;
+                           } else {
+                             jjtree.popNode();
+                           }
+                           if (jjte000 instanceof RuntimeException) {
+                             {if (true) throw (RuntimeException)jjte000;}
+                           }
+                           if (jjte000 instanceof ParseException) {
+                             {if (true) throw (ParseException)jjte000;}
+                           }
+                           {if (true) throw (Error)jjte000;}
+    } finally {
+                           if (jjtc000) {
+                             jjtree.closeNodeScope(jjtn000, true);
+                             jjtreeCloseNodeScope(jjtn000);
+                           }
+    }
+  }
+
+  final public void subq_select() throws ParseException {
+    if (jj_2_63(1)) {
+      subq_all_distinct();
+      subquery_select_expression();
+      optional_from_clause();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case WHERE:
+        where_clause();
+        break;
+      default:
+        jj_la1[36] = jj_gen;
+        ;
+      }
+      group_by_clause();
+      having_clause();
+      subq_fake_union();
+      subq_fake_order_by_clause();
+    } else {
+      ;
+    }
+  }
+
+  final public void subq_all_distinct() throws ParseException {
+    if (jj_2_65(1)) {
+      if (jj_2_64(1)) {
+        UK_ALL();
+      } else {
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case DISTINCT:
+          jj_consume_token(DISTINCT);
+          break;
+        default:
+          jj_la1[37] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+      }
+    } else {
+      ;
+    }
+  }
+
+  final public void subq_fake_union() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case UNION:
+      jj_consume_token(UNION);
+      subq_fake_select();
+      break;
+    default:
+      jj_la1[38] = jj_gen;
+      ;
+    }
+  }
+
+  final public void subq_fake_select() throws ParseException {
+    if (jj_2_66(2)) {
+      subq_fake_primary();
+      jj_consume_token(UNION);
+    } else {
+      ;
+    }
+    subq_fake_primary();
+  }
+
+  final public void subq_fake_primary() throws ParseException {
+    jj_consume_token(SELECT);
+    subq_fake_all_distinct();
+    subq_fake_select_expression();
+    optional_from_clause();
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case WHERE:
+      where_clause();
+      break;
+    default:
+      jj_la1[39] = jj_gen;
+      ;
+    }
+    group_by_clause();
+    having_clause();
+  }
+
+  final public void subq_fake_all_distinct() throws ParseException {
+    if (jj_2_68(1)) {
+      if (jj_2_67(1)) {
+        UK_ALL();
+      } else {
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case DISTINCT:
+          jj_consume_token(DISTINCT);
+          break;
+        default:
+          jj_la1[40] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+      }
+    } else {
+      ;
+    }
+  }
+
+  final public void subq_fake_select_expression() throws ParseException {
+    if (jj_2_69(2)) {
+      subq_expression_list();
+    } else {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case II_DBA:
+      case II_INGRES:
+      case ID:
+      case DELIM_IDENT:
+      case ASTERISK:
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case II_DBA:
+        case II_INGRES:
+        case ID:
+        case DELIM_IDENT:
+          ii_schema_spec();
+          break;
+        default:
+          jj_la1[41] = jj_gen;
+          ;
+        }
+        jj_consume_token(ASTERISK);
+        break;
+      default:
+        jj_la1[42] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    }
+  }
+
+  final public void subq_fake_order_by_clause() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case ORDER:
+      jj_consume_token(ORDER);
+      jj_consume_token(BY);
+      subq_fake_order_by_list();
+      break;
+    default:
+      jj_la1[43] = jj_gen;
+      ;
+    }
+  }
+
+  final public void subq_fake_order_by_list() throws ParseException {
+    subq_fake_order_by_item();
+    label_12:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case COMMA:
+        ;
+        break;
+      default:
+        jj_la1[44] = jj_gen;
+        break label_12;
+      }
+      jj_consume_token(COMMA);
+      subq_fake_order_by_item();
+    }
+  }
+
+  final public void subq_fake_order_by_item() throws ParseException {
+    expression();
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case ASC:
+    case DESC:
+      order_by_option();
+      break;
+    default:
+      jj_la1[45] = jj_gen;
+      ;
+    }
+  }
+
+  final public void subq_fake_cursor_update_list() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case OF:
+      jj_consume_token(OF);
+      subq_fake_cursor_column_list();
+      break;
+    default:
+      jj_la1[46] = jj_gen;
+      ;
+    }
+  }
+
+  final public void subq_fake_cursor_column_list() throws ParseException {
+    subq_fake_curs_upd_column();
+    label_13:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case COMMA:
+        ;
+        break;
+      default:
+        jj_la1[47] = jj_gen;
+        break label_13;
+      }
+      jj_consume_token(COMMA);
+      subq_fake_curs_upd_column();
+    }
+  }
+
+  final public void subq_fake_curs_upd_column() throws ParseException {
+    ii_obj_spec();
+  }
+
+  final public void compound_statement() throws ParseException {
+    jj_consume_token(BEGIN);
+    nullprogram();
+    jj_consume_token(END);
+  }
+
+  final public void nullprogram() throws ParseException {
+    if (jj_2_70(1)) {
+      program();
+    } else {
+      ;
+    }
+  }
+
+  final public void program() throws ParseException {
+    label_14:
+    while (true) {
+      statement();
+      if (jj_2_71(1)) {
+        ;
+      } else {
+        break label_14;
+      }
+    }
+  }
+
+  final public void declare() throws ParseException {
+         int oldScope = setScope(SCOPE_DEFINE_VARIABLES);
+    declare_prefix();
+    declaration_list();
+     setScope(oldScope);
+  }
+
+  final public void declare_prefix() throws ParseException {
+                                         /*@bgen(jjtree) DeclareKeyword */
+  ASTDeclareKeyword jjtn000 = new ASTDeclareKeyword(JJTDECLAREKEYWORD);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+  jjtreeOpenNodeScope(jjtn000);
+    try {
+      jj_consume_token(DECLARE);
+    } finally {
+                           if (jjtc000) {
+                             jjtree.closeNodeScope(jjtn000, true);
+                             jjtreeCloseNodeScope(jjtn000);
+                           }
+    }
+  }
+
+  final public void fetch_orientation() throws ParseException {
+    jj_consume_token(FETCH);
+    if (jj_2_78(2147483647) && (getToken(2).kind != INTO && getToken(2).kind != FROM)) {
+      if (jj_2_72(1)) {
+        UK_NEXT();
+      } else if (jj_2_73(1)) {
+        UK_PRIOR();
+      } else if (jj_2_74(1)) {
+        UK_FIRST();
+      } else if (jj_2_75(1)) {
+        UK_LAST();
+      } else if (jj_2_76(1)) {
+        UK_ABSOLUTE();
+      } else if (jj_2_77(1)) {
+        UK_RELATIVE();
+      } else {
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } else {
+      ;
+    }
+  }
+
+  final public void fetch_val_spec() throws ParseException {
+                         Token t=null;
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case INTEGER_LITERAL:
+    case VAR_NAME:
+    case PLUS:
+    case MINUS:
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case VAR_NAME:
+        t = jj_consume_token(VAR_NAME);
+        break;
+      case INTEGER_LITERAL:
+      case PLUS:
+      case MINUS:
+        number();
+        break;
+      default:
+        jj_la1[48] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+      break;
+    default:
+      jj_la1[49] = jj_gen;
+      ;
+    }
+  }
+
+  final public void fetch_into_clause() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case INTO:
+      jj_consume_token(INTO);
+      fetch_into_list();
+      break;
+    default:
+      jj_la1[50] = jj_gen;
+      ;
+    }
+  }
+
+  final public void fetch_into_list() throws ParseException {
+    variable_assignment();
+    label_15:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case COMMA:
+        ;
+        break;
+      default:
+        jj_la1[51] = jj_gen;
+        break label_15;
+      }
+      jj_consume_token(COMMA);
+      variable_assignment();
+    }
+  }
+
+  final public void fetch_from_spec() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case FROM:
+      jj_consume_token(FROM);
+      break;
+    default:
+      jj_la1[52] = jj_gen;
+      ;
+    }
+  }
+
+  final public void return_stmt() throws ParseException {
+    jj_consume_token(RETURN);
+    optional_expression();
+  }
+
+  final public void execute_stmt() throws ParseException {
+    jj_consume_token(EXECUTE);
+    jj_consume_token(PROCEDURE);
+    any_stmt_token();
+  }
+
+  final public void optional_expression() throws ParseException {
+    if (jj_2_79(2)) {
+      expression();
+    } else {
+      ;
+    }
+  }
+
+  final public void if_stmt() throws ParseException {
+    if_prefix();
+    statement();
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case ELSE:
+      jj_consume_token(ELSE);
+      statement();
+      break;
+    default:
+      jj_la1[53] = jj_gen;
+      ;
+    }
+  }
+
+  final public void if_prefix() throws ParseException {
+    jj_consume_token(IF);
+    boolean_expression();
+  }
+
+  final public void begin_tran() throws ParseException {
+    jj_consume_token(BEGIN);
+    jj_consume_token(TRANSACTION);
+    optional_xact_name();
+  }
+
+  final public void commit_tran() throws ParseException {
+    jj_consume_token(COMMIT);
+    tran_or_work();
+    optional_xact_name();
+  }
+
+  final public void tran_or_work() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case TRANSACTION:
+    case WORK:
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case TRANSACTION:
+        jj_consume_token(TRANSACTION);
+        break;
+      case WORK:
+        jj_consume_token(WORK);
+        break;
+      default:
+        jj_la1[54] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+      break;
+    default:
+      jj_la1[55] = jj_gen;
+      ;
+    }
+  }
+
+  final public void rollback_tran() throws ParseException {
+    jj_consume_token(ROLLBACK);
+    tran_or_work();
+    optional_xact_name();
+  }
+
+  final public void optional_xact_name() throws ParseException {
+    if (jj_2_80(2)) {
+      xact_name();
+    } else {
+      ;
+    }
+  }
+
+  final public void xact_name() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case INTEGER_LITERAL:
+      jj_consume_token(INTEGER_LITERAL);
+      jj_consume_token(206);
+      jj_consume_token(ID);
+      jj_consume_token(DOT);
+      jj_consume_token(ID);
+      break;
+    case ID:
+    case SQUARE_BRACKET_ID:
+    case VAR_NAME:
+    case GLOBAL_VAR_NAME:
+    case TEMP_TABLE_NAME:
+    case QUESTIONMARK:
+      id();
+      break;
+    default:
+      jj_la1[56] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void print() throws ParseException {
+    jj_consume_token(PRINT);
+    pr_arglist();
+  }
+
+  final public void pr_arglist() throws ParseException {
+    printstring();
+    arglist();
+  }
+
+  final public void arglist() throws ParseException {
+    label_16:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case COMMA:
+        ;
+        break;
+      default:
+        jj_la1[57] = jj_gen;
+        break label_16;
+      }
+      jj_consume_token(COMMA);
+      literal();
+    }
+  }
+
+  final public void printstring() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case SINGLE_STRING_LITERAL:
+    case DOUBLE_STRING_LITERAL:
+      string_literal();
+      break;
+    case VAR_NAME:
+    case GLOBAL_VAR_NAME:
+    case QUESTIONMARK:
+      variable();
+      break;
+    case NULL:
+      null_stmt();
+      break;
+    default:
+      jj_la1[58] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public Token id_or_string() throws ParseException {
+                        Token t;
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case ID:
+    case SQUARE_BRACKET_ID:
+    case TEMP_TABLE_NAME:
+      t = idplus();
+      break;
+    case SINGLE_STRING_LITERAL:
+    case DOUBLE_STRING_LITERAL:
+      t = string_literal();
+      break;
+    default:
+      jj_la1[59] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+              {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+//Special case: "NEW" can be used as id
+  final public Token idplus() throws ParseException {
+                  Token t;
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case ID:
+      t = jj_consume_token(ID);
+      break;
+    case TEMP_TABLE_NAME:
+      t = jj_consume_token(TEMP_TABLE_NAME);
+      break;
+    case SQUARE_BRACKET_ID:
+      t = jj_consume_token(SQUARE_BRACKET_ID);
+      break;
+    default:
+      jj_la1[60] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+     {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public void select_list() throws ParseException {
+    select_expression();
+    label_17:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case COMMA:
+        ;
+        break;
+      default:
+        jj_la1[61] = jj_gen;
+        break label_17;
+      }
+      jj_consume_token(COMMA);
+      select_expression();
+    }
+  }
+
+  final public void select_expression() throws ParseException {
+    if (jj_2_83(2147483647)) {
+      select_or_set_variable_assignment();
+    } else if (jj_2_84(2147483647)) {
+      idplus();
+      jj_consume_token(EQUAL);
+      expression();
+    } else if (jj_2_85(2147483647)) {
+      string_literal();
+      jj_consume_token(EQUAL);
+      expression();
+    } else if (jj_2_86(2147483647)) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case II_DBA:
+      case II_INGRES:
+      case ID:
+      case DELIM_IDENT:
+        ii_schema_spec();
+        break;
+      default:
+        jj_la1[62] = jj_gen;
+        ;
+      }
+      jj_consume_token(ASTERISK);
+    } else if (jj_2_87(2147483647)) {
+      expression();
+      if (jj_2_82(2)) {
+        if (jj_2_81(2)) {
+          optional_as();
+          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+          case ID:
+          case SQUARE_BRACKET_ID:
+          case TEMP_TABLE_NAME:
+            idplus();
+            break;
+          case SINGLE_STRING_LITERAL:
+          case DOUBLE_STRING_LITERAL:
+            string_literal();
+            break;
+          default:
+            jj_la1[63] = jj_gen;
+            jj_consume_token(-1);
+            throw new ParseException();
+          }
+        } else {
+          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+          case EQUAL:
+            jj_consume_token(EQUAL);
+            expression();
+            break;
+          default:
+            jj_la1[64] = jj_gen;
+            jj_consume_token(-1);
+            throw new ParseException();
+          }
+        }
+      } else {
+        ;
+      }
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void select_or_set_variable_assignment() throws ParseException {
+    variable_assignment();
+    jj_consume_token(EQUAL);
+    expression();
+  }
+
+  final public void optional_as() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case AS:
+      jj_consume_token(AS);
+      break;
+    default:
+      jj_la1[65] = jj_gen;
+      ;
+    }
+  }
+
+  final public void subquery_select_expression() throws ParseException {
+    if (jj_2_88(3)) {
+      subq_expression_list();
+    } else {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case II_DBA:
+      case II_INGRES:
+      case ID:
+      case DELIM_IDENT:
+      case ASTERISK:
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case II_DBA:
+        case II_INGRES:
+        case ID:
+        case DELIM_IDENT:
+          ii_schema_spec();
+          break;
+        default:
+          jj_la1[66] = jj_gen;
+          ;
+        }
+        jj_consume_token(ASTERISK);
+        break;
+      default:
+        jj_la1[67] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    }
+  }
+
+  final public void declaration_list() throws ParseException {
+    declaration();
+    label_18:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case COMMA:
+        ;
+        break;
+      default:
+        jj_la1[68] = jj_gen;
+        break label_18;
+      }
+      comma();
+      declaration();
+    }
+  }
+
+  final public void comma() throws ParseException {
+                              /*@bgen(jjtree) DeclareComma */
+  ASTDeclareComma jjtn000 = new ASTDeclareComma(JJTDECLARECOMMA);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+  jjtreeOpenNodeScope(jjtn000);
+    try {
+      jj_consume_token(COMMA);
+    } finally {
+          if (jjtc000) {
+            jjtree.closeNodeScope(jjtn000, true);
+            jjtreeCloseNodeScope(jjtn000);
+          }
+    }
+  }
+
+  final public void declaration() throws ParseException {
+                               /*@bgen(jjtree) SQLParam */
+                               ASTSQLParam jjtn000 = new ASTSQLParam(JJTSQLPARAM);
+                               boolean jjtc000 = true;
+                               jjtree.openNodeScope(jjtn000);
+                               jjtreeOpenNodeScope(jjtn000);Token name=null; String defaultValue=null; Node type=null; int direction = 0;
+    try {
+      try {
+        name = jj_consume_token(VAR_NAME);
+        type = base_datatype();
+        defaultValue = optional_param_default();
+        direction = param_options();
+      } catch (ParseException e) {
+            exceptions.add(e);
+            error_skiptobefore(new int[]{}, new int[]{COMMA, CLOSEPAREN, WITH, AS});
+      }
+          jjtree.closeNodeScope(jjtn000, true);
+          jjtc000 = false;
+          jjtreeCloseNodeScope(jjtn000);
+        ((ASTSQLParam)jjtn000).setName(name.image);
+        ((ASTSQLParam)jjtn000).setType(type.toString());
+        ((ASTSQLParam)jjtn000).setTypeObject((ASTSQLDataType)type);
+        if (defaultValue != null){
+            ((ASTSQLParam)jjtn000).setDefaultValue(defaultValue);
+        }
+        ((ASTSQLParam)jjtn000).setDirection(direction);
+    } catch (Throwable jjte000) {
+                  if (jjtc000) {
+                    jjtree.clearNodeScope(jjtn000);
+                    jjtc000 = false;
+                  } else {
+                    jjtree.popNode();
+                  }
+                  if (jjte000 instanceof RuntimeException) {
+                    {if (true) throw (RuntimeException)jjte000;}
+                  }
+                  if (jjte000 instanceof ParseException) {
+                    {if (true) throw (ParseException)jjte000;}
+                  }
+                  {if (true) throw (Error)jjte000;}
+    } finally {
+                  if (jjtc000) {
+                    jjtree.closeNodeScope(jjtn000, true);
+                    jjtreeCloseNodeScope(jjtn000);
+                  }
+    }
+  }
+
+  final public String optional_param_default() throws ParseException {
+                                   String t = null;
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case EQUAL:
+      jj_consume_token(EQUAL);
+      t = literal();
+      break;
+    default:
+      jj_la1[69] = jj_gen;
+      ;
+    }
+                         {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public int param_options() throws ParseException {
+                       int direction = 0;
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case IN:
+    case OUT:
+    case OUTPUT:
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case IN:
+        jj_consume_token(IN);
+        break;
+      case OUT:
+      case OUTPUT:
+        out_option();
+                              direction = 1;
+        break;
+      default:
+        jj_la1[70] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+      break;
+    default:
+      jj_la1[71] = jj_gen;
+      ;
+    }
+             {if (true) return direction;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public void out_option() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case OUT:
+      jj_consume_token(OUT);
+      break;
+    case OUTPUT:
+      jj_consume_token(OUTPUT);
+      break;
+    default:
+      jj_la1[72] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void shared() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case SHARED:
+      jj_consume_token(SHARED);
+      break;
+    default:
+      jj_la1[73] = jj_gen;
+      ;
+    }
+  }
+
+  final public void forceoptions() throws ParseException {
+    if (jj_2_91(2)) {
+      jj_consume_token(OPENPAREN);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case INDEX:
+      case PARTITION:
+      case INTEGER_LITERAL:
+      case ID:
+      case OPENPAREN:
+        if (jj_2_90(2)) {
+          jj_consume_token(INTEGER_LITERAL);
+          if (jj_2_89(2)) {
+            forceoption_terms();
+          } else {
+            ;
+          }
+        } else {
+          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+          case PARTITION:
+            jj_consume_token(PARTITION);
+            jj_consume_token(ID);
+            break;
+          case INDEX:
+          case ID:
+          case OPENPAREN:
+            forceoption_terms();
+            break;
+          default:
+            jj_la1[74] = jj_gen;
+            jj_consume_token(-1);
+            throw new ParseException();
+          }
+        }
+        break;
+      default:
+        jj_la1[75] = jj_gen;
+        ;
+      }
+      jj_consume_token(CLOSEPAREN);
+    } else {
+      ;
+    }
+  }
+
+  final public void forceoption_terms() throws ParseException {
+    label_19:
+    while (true) {
+      forceoption_term();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case INDEX:
+      case ID:
+      case OPENPAREN:
+        ;
+        break;
+      default:
+        jj_la1[76] = jj_gen;
+        break label_19;
+      }
+    }
+  }
+
+  final public void forceoption_term() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case INDEX:
+      forceindex();
+      break;
+    case ID:
+    case OPENPAREN:
+      forcestrategy();
+      break;
+    default:
+      jj_la1[77] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void forceindex() throws ParseException {
+    jj_consume_token(INDEX);
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case INTEGER_LITERAL:
+      jj_consume_token(INTEGER_LITERAL);
+      break;
+    case ID:
+    case SQUARE_BRACKET_ID:
+    case TEMP_TABLE_NAME:
+      idplus();
+      break;
+    default:
+      jj_la1[78] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void forcestrategy() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case ID:
+      jj_consume_token(ID);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case INTEGER_LITERAL:
+      case PLUS:
+      case MINUS:
+        number();
+        break;
+      default:
+        jj_la1[79] = jj_gen;
+        ;
+      }
+      break;
+    case OPENPAREN:
+      jj_consume_token(OPENPAREN);
+      jj_consume_token(ID);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case ID:
+        jj_consume_token(ID);
+        jj_consume_token(CLOSEPAREN);
+        break;
+      case INTEGER_LITERAL:
+      case PLUS:
+      case MINUS:
+        number();
+        number();
+        jj_consume_token(CLOSEPAREN);
+        break;
+      default:
+        jj_la1[80] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+      break;
+    default:
+      jj_la1[81] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void inner_join() throws ParseException {
+    if (jj_2_92(1)) {
+      UK_INNER();
+    } else {
+      ;
+    }
+    jj_consume_token(JOIN);
+  }
+
+  final public void oj_operator() throws ParseException {
+    if (jj_2_95(1)) {
+      UK_LEFT();
+      if (jj_2_93(1)) {
+        UK_OUTER();
+      } else {
+        ;
+      }
+      jj_consume_token(JOIN);
+    } else if (jj_2_96(1)) {
+      UK_RIGHT();
+      if (jj_2_94(1)) {
+        UK_OUTER();
+      } else {
+        ;
+      }
+      jj_consume_token(JOIN);
+    } else if (jj_2_97(1)) {
+      inner_join();
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void from_where_clause() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case FROM:
+    case WHERE:
+      if (jj_2_98(2)) {
+        jj_consume_token(WHERE);
+        jj_consume_token(CURRENT);
+        jj_consume_token(OF);
+        ii_obj_spec();
+      } else {
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case FROM:
+          from_clause();
+          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+          case WHERE:
+            where_clause();
+            break;
+          default:
+            jj_la1[82] = jj_gen;
+            ;
+          }
+          break;
+        case WHERE:
+          where_clause();
+          break;
+        default:
+          jj_la1[83] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+      }
+      break;
+    default:
+      jj_la1[84] = jj_gen;
+      ;
+    }
+  }
+
+  final public void where_current_clause() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case WHERE:
+      if (jj_2_99(2)) {
+        jj_consume_token(WHERE);
+        jj_consume_token(CURRENT);
+        jj_consume_token(OF);
+        ii_obj_spec();
+      } else {
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case WHERE:
+          where_clause();
+          break;
+        default:
+          jj_la1[85] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+      }
+      break;
+    default:
+      jj_la1[86] = jj_gen;
+      ;
+    }
+  }
+
+  final public void from_clause() throws ParseException {
+    jj_consume_token(FROM);
+    from_list();
+  }
+
+  final public void optional_from_clause() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case FROM:
+      from_clause();
+      break;
+    default:
+      jj_la1[87] = jj_gen;
+      ;
+    }
+  }
+
+  final public void from_list() throws ParseException {
+    from_table();
+    label_20:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case COMMA:
+        ;
+        break;
+      default:
+        jj_la1[88] = jj_gen;
+        break label_20;
+      }
+      jj_consume_token(COMMA);
+      from_table();
+
+    }
+  }
+
+  final public void from_table() throws ParseException {
+     setScope("from_clause", SCOPE_TABLES);
+    from_item();
+         setScope("from_clause", SCOPE_DEFAULT);
+  }
+
+  final public void from_item() throws ParseException {
+    if (jj_2_102(2147483647)) {
+      from_unit();
+      label_21:
+      while (true) {
+        if (jj_2_100(2)) {
+          ;
+        } else {
+          break label_21;
+        }
+        oj_operator();
+        from_unit();
+        jj_consume_token(ON);
+                           setScope("from_item", SCOPE_COLUMNS);
+        boolean_expression();
+      }
+    } else if (jj_2_103(3)) {
+      jj_consume_token(OPENPAREN);
+      from_unit();
+      label_22:
+      while (true) {
+        oj_operator();
+        from_unit();
+        jj_consume_token(ON);
+        boolean_expression();
+        if (jj_2_101(2)) {
+          ;
+        } else {
+          break label_22;
+        }
+      }
+      jj_consume_token(CLOSEPAREN);
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void from_unit() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case SESSION:
+    case II_DBA:
+    case II_INGRES:
+    case ID:
+    case DELIM_IDENT:
+      ii_obj_spec();
+      if ((getToken(1).kind == AS || getToken(1).kind == ID)
+                                         && !(getToken(1).image.equalsIgnoreCase("inner")
+                                              || getToken(1).image.equalsIgnoreCase("left")
+                                              || getToken(1).image.equalsIgnoreCase("right"))) {
+        optional_as();
+        idplus();
+      } else {
+        ;
+      }
+      forceoptions();
+      shared();
+      break;
+    case OPENPAREN:
+      jj_consume_token(OPENPAREN);
+      select();
+      jj_consume_token(CLOSEPAREN);
+      optional_as();
+      derived_table_name();
+      optional_derived_col_name_list();
+      shared();
+      break;
+    default:
+      jj_la1[89] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void derived_table_name() throws ParseException {
+    if (!(getToken(1).image.equalsIgnoreCase("inner") || getToken(1).image.equalsIgnoreCase("left") || getToken(1).image.equalsIgnoreCase("right"))) {
+      idplus();
+    } else {
+      ;
+    }
+  }
+
+  final public void optional_derived_col_name_list() throws ParseException {
+    if (jj_2_104(2)) {
+      jj_consume_token(OPENPAREN);
+      derived_column_list();
+      jj_consume_token(CLOSEPAREN);
+    } else {
+      ;
+    }
+  }
+
+  final public void derived_column_list() throws ParseException {
+    derived_col_name();
+    label_23:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case COMMA:
+        ;
+        break;
+      default:
+        jj_la1[90] = jj_gen;
+        break label_23;
+      }
+      jj_consume_token(COMMA);
+      derived_col_name();
+    }
+  }
+
+  final public void derived_col_name() throws ParseException {
+    idplus();
+  }
+
+  final public void where_clause() throws ParseException {
+                       setScope("from_clause", SCOPE_COLUMNS);
+    jj_consume_token(WHERE);
+    boolean_expression();
+                          setScope("where_clause", SCOPE_DEFAULT);
+  }
+
+  final public void boolean_expression() throws ParseException {
+    boolean_term();
+    label_24:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case OR:
+        ;
+        break;
+      default:
+        jj_la1[91] = jj_gen;
+        break label_24;
+      }
+      jj_consume_token(OR);
+      boolean_term();
+    }
+  }
+
+  final public void boolean_term() throws ParseException {
+    boolean_factor();
+    label_25:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case AND:
+        ;
+        break;
+      default:
+        jj_la1[92] = jj_gen;
+        break label_25;
+      }
+      jj_consume_token(AND);
+      boolean_factor();
+    }
+  }
+
+  final public void boolean_factor() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case AVG:
+    case CASE:
+    case COALESCE:
+    case COUNT:
+    case EXISTS:
+    case MAX:
+    case MIN:
+    case NULL:
+    case NULLIF:
+    case SESSION:
+    case SUM:
+    case UPDATE:
+    case USER:
+    case II_DBA:
+    case II_INGRES:
+    case INTEGER_LITERAL:
+    case FLOATING_POINT_LITERAL:
+    case SINGLE_STRING_LITERAL:
+    case DOUBLE_STRING_LITERAL:
+    case BINARY_LITERAL:
+    case MONEY_LITERAL:
+    case ID:
+    case SQUARE_BRACKET_ID:
+    case VAR_NAME:
+    case GLOBAL_VAR_NAME:
+    case TEMP_TABLE_NAME:
+    case DELIM_IDENT:
+    case TILDE:
+    case OPENPAREN:
+    case PLUS:
+    case MINUS:
+    case QUESTIONMARK:
+      boolean_primary();
+      break;
+    case NOT:
+      jj_consume_token(NOT);
+      boolean_primary();
+      break;
+    default:
+      jj_la1[93] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void boolean_primary() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case UPDATE:
+      boolean_function();
+      break;
+    default:
+      jj_la1[94] = jj_gen;
+      if (jj_2_105(2147483647)) {
+        jj_consume_token(OPENPAREN);
+        boolean_expression();
+        jj_consume_token(CLOSEPAREN);
+      } else {
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case AVG:
+        case CASE:
+        case COALESCE:
+        case COUNT:
+        case EXISTS:
+        case MAX:
+        case MIN:
+        case NULL:
+        case NULLIF:
+        case SESSION:
+        case SUM:
+        case USER:
+        case II_DBA:
+        case II_INGRES:
+        case INTEGER_LITERAL:
+        case FLOATING_POINT_LITERAL:
+        case SINGLE_STRING_LITERAL:
+        case DOUBLE_STRING_LITERAL:
+        case BINARY_LITERAL:
+        case MONEY_LITERAL:
+        case ID:
+        case SQUARE_BRACKET_ID:
+        case VAR_NAME:
+        case GLOBAL_VAR_NAME:
+        case TEMP_TABLE_NAME:
+        case DELIM_IDENT:
+        case TILDE:
+        case OPENPAREN:
+        case PLUS:
+        case MINUS:
+        case QUESTIONMARK:
+          predicate();
+          break;
+        default:
+          jj_la1[95] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+      }
+    }
+  }
+
+  final public void group_by_clause() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case GROUP:
+      jj_consume_token(GROUP);
+      jj_consume_token(BY);
+      by_all();
+      group_by_list();
+      break;
+    default:
+      jj_la1[96] = jj_gen;
+      ;
+    }
+  }
+
+  final public void by_all() throws ParseException {
+    if (jj_2_106(1)) {
+      UK_ALL();
+    } else {
+      ;
+    }
+  }
+
+  final public void group_by_list() throws ParseException {
+    group_by_item();
+    label_26:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case COMMA:
+        ;
+        break;
+      default:
+        jj_la1[97] = jj_gen;
+        break label_26;
+      }
+      jj_consume_token(COMMA);
+      group_by_item();
+    }
+  }
+
+  final public void group_by_item() throws ParseException {
+                          setScope("group_clause", SCOPE_COLUMNS);
+    expression();
+                          setScope("group_clause", SCOPE_DEFAULT);
+  }
+
+  final public void having_clause() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case HAVING:
+      jj_consume_token(HAVING);
+                                    setScope("having_clause", SCOPE_COLUMNS);
+      boolean_expression();
+                                                                                                     setScope("having_clause", SCOPE_DEFAULT);
+      break;
+    default:
+      jj_la1[98] = jj_gen;
+      ;
+    }
+  }
+
+  final public void order_by_clause() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case ORDER:
+      jj_consume_token(ORDER);
+      jj_consume_token(BY);
+      order_by_list();
+      break;
+    default:
+      jj_la1[99] = jj_gen;
+      ;
+    }
+  }
+
+  final public void order_by_list() throws ParseException {
+    order_by_item();
+    label_27:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case COMMA:
+        ;
+        break;
+      default:
+        jj_la1[100] = jj_gen;
+        break label_27;
+      }
+      jj_consume_token(COMMA);
+      order_by_item();
+    }
+  }
+
+  final public void order_by_item() throws ParseException {
+                        setScope("order_by_clause", SCOPE_COLUMNS);
+    expression();
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case ASC:
+    case DESC:
+      order_by_option();
+      break;
+    default:
+      jj_la1[101] = jj_gen;
+      ;
+    }
+                                                    setScope("order_by_clause", SCOPE_DEFAULT);
+  }
+
+  final public void order_by_option() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case ASC:
+      jj_consume_token(ASC);
+      break;
+    case DESC:
+      jj_consume_token(DESC);
+      break;
+    default:
+      jj_la1[102] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void predicate() throws ParseException {
+    if (jj_2_114(2147483647)) {
+      exists_predicate();
+    } else if (jj_2_115(2147483647)) {
+      expression();
+      if (jj_2_107(2147483647)) {
+        any_predicate();
+      } else if (jj_2_108(2147483647)) {
+        all_predicate();
+      } else if (jj_2_109(2147483647)) {
+        comparison_predicate();
+      } else if (jj_2_110(2147483647)) {
+        between_predicate();
+      } else if (jj_2_111(2147483647)) {
+        null_predicate();
+      } else if (jj_2_112(2147483647)) {
+        in_predicate();
+      } else if (jj_2_113(2147483647)) {
+        like_predicate();
+      } else {
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } else if (jj_2_116(2147483647)) {
+      row_constructor();
+      row_comparison_predicate();
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void predicate_op() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case EXISTS:
+      jj_consume_token(EXISTS);
+      break;
+    default:
+      jj_la1[107] = jj_gen;
+      if (jj_2_117(2147483647)) {
+        expression();
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case LESS:
+        case LESSEQUAL:
+        case GREATER:
+        case GREATEREQUAL:
+        case EQUAL:
+        case NOTEQUAL:
+        case 207:
+        case 208:
+        case 209:
+        case 210:
+          comp_op();
+          break;
+        case LEQJOIN:
+        case REQJOIN:
+          join_op();
+          break;
+        case BETWEEN:
+        case IN:
+        case LIKE:
+        case NOT:
+          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+          case NOT:
+            jj_consume_token(NOT);
+            break;
+          default:
+            jj_la1[103] = jj_gen;
+            ;
+          }
+          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+          case BETWEEN:
+            jj_consume_token(BETWEEN);
+            break;
+          case IN:
+            jj_consume_token(IN);
+            break;
+          case LIKE:
+            jj_consume_token(LIKE);
+            break;
+          default:
+            jj_la1[104] = jj_gen;
+            jj_consume_token(-1);
+            throw new ParseException();
+          }
+          break;
+        case IS:
+          jj_consume_token(IS);
+          break;
+        default:
+          jj_la1[105] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+      } else {
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case OPENPAREN:
+          row_constructor();
+          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+          case LESS:
+          case LESSEQUAL:
+          case GREATER:
+          case GREATEREQUAL:
+          case EQUAL:
+          case NOTEQUAL:
+          case 207:
+          case 208:
+          case 209:
+          case 210:
+            comp_op();
+            break;
+          case LEQJOIN:
+          case REQJOIN:
+            join_op();
+            break;
+          default:
+            jj_la1[106] = jj_gen;
+            jj_consume_token(-1);
+            throw new ParseException();
+          }
+          break;
+        default:
+          jj_la1[108] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+      }
+    }
+  }
+
+  final public void comparison_predicate() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case LESS:
+    case LESSEQUAL:
+    case GREATER:
+    case GREATEREQUAL:
+    case EQUAL:
+    case NOTEQUAL:
+    case 207:
+    case 208:
+    case 209:
+    case 210:
+      comp_op();
+      break;
+    case LEQJOIN:
+    case REQJOIN:
+      join_op();
+      break;
+    default:
+      jj_la1[109] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    expression();
+  }
+
+  final public void row_comparison_predicate() throws ParseException {
+    comp_op();
+    row_constructor();
+  }
+
+  final public void comp_op() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case EQUAL:
+      jj_consume_token(EQUAL);
+      break;
+    case 207:
+      jj_consume_token(207);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case LESS:
+      case GREATER:
+      case EQUAL:
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case GREATER:
+          jj_consume_token(GREATER);
+          break;
+        case EQUAL:
+          jj_consume_token(EQUAL);
+          break;
+        case LESS:
+          jj_consume_token(LESS);
+          break;
+        default:
+          jj_la1[110] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+        break;
+      default:
+        jj_la1[111] = jj_gen;
+        ;
+      }
+      break;
+    case 208:
+      jj_consume_token(208);
+      break;
+    case NOTEQUAL:
+      jj_consume_token(NOTEQUAL);
+      break;
+    case 209:
+      jj_consume_token(209);
+      break;
+    case GREATER:
+      jj_consume_token(GREATER);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case EQUAL:
+        jj_consume_token(EQUAL);
+        break;
+      default:
+        jj_la1[112] = jj_gen;
+        ;
+      }
+      break;
+    case GREATEREQUAL:
+      jj_consume_token(GREATEREQUAL);
+      break;
+    case LESS:
+      jj_consume_token(LESS);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GREATER:
+      case EQUAL:
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case GREATER:
+          jj_consume_token(GREATER);
+          break;
+        case EQUAL:
+          jj_consume_token(EQUAL);
+          break;
+        default:
+          jj_la1[113] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+        break;
+      default:
+        jj_la1[114] = jj_gen;
+        ;
+      }
+      break;
+    case 210:
+      jj_consume_token(210);
+      break;
+    case LESSEQUAL:
+      jj_consume_token(LESSEQUAL);
+      break;
+    default:
+      jj_la1[115] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void join_op() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case LEQJOIN:
+      jj_consume_token(LEQJOIN);
+      break;
+    case REQJOIN:
+      jj_consume_token(REQJOIN);
+      break;
+    default:
+      jj_la1[116] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void between_predicate() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case NOT:
+      jj_consume_token(NOT);
+      break;
+    default:
+      jj_la1[117] = jj_gen;
+      ;
+    }
+    jj_consume_token(BETWEEN);
+    expression();
+    jj_consume_token(AND);
+    expression();
+  }
+
+  final public void null_predicate() throws ParseException {
+    jj_consume_token(IS);
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case NOT:
+      jj_consume_token(NOT);
+      break;
+    default:
+      jj_la1[118] = jj_gen;
+      ;
+    }
+    null_stmt();
+  }
+
+  final public void in_predicate() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case NOT:
+      jj_consume_token(NOT);
+      break;
+    default:
+      jj_la1[119] = jj_gen;
+      ;
+    }
+    jj_consume_token(IN);
+    jj_consume_token(OPENPAREN);
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case AVG:
+    case CASE:
+    case COALESCE:
+    case COUNT:
+    case MAX:
+    case MIN:
+    case NULL:
+    case NULLIF:
+    case SESSION:
+    case SUM:
+    case USER:
+    case II_DBA:
+    case II_INGRES:
+    case INTEGER_LITERAL:
+    case FLOATING_POINT_LITERAL:
+    case SINGLE_STRING_LITERAL:
+    case DOUBLE_STRING_LITERAL:
+    case BINARY_LITERAL:
+    case MONEY_LITERAL:
+    case ID:
+    case SQUARE_BRACKET_ID:
+    case VAR_NAME:
+    case GLOBAL_VAR_NAME:
+    case TEMP_TABLE_NAME:
+    case DELIM_IDENT:
+    case TILDE:
+    case OPENPAREN:
+    case PLUS:
+    case MINUS:
+    case QUESTIONMARK:
+      in_value_list();
+      break;
+    case SELECT:
+      jj_consume_token(SELECT);
+      subq_select();
+      break;
+    default:
+      jj_la1[120] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    jj_consume_token(CLOSEPAREN);
+  }
+
+  final public void in_value_list() throws ParseException {
+    expression();
+    label_28:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case COMMA:
+        ;
+        break;
+      default:
+        jj_la1[121] = jj_gen;
+        break label_28;
+      }
+      jj_consume_token(COMMA);
+      expression();
+    }
+  }
+
+  final public void any_predicate() throws ParseException {
+    comp_op();
+    jj_consume_token(ANY);
+    subquery();
+  }
+
+  final public void all_predicate() throws ParseException {
+    comp_op();
+    UK_ALL();
+    subquery();
+  }
+
+  final public void exists_predicate() throws ParseException {
+    jj_consume_token(EXISTS);
+    subquery();
+  }
+
+  final public void like_predicate() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case NOT:
+      jj_consume_token(NOT);
+      break;
+    default:
+      jj_la1[122] = jj_gen;
+      ;
+    }
+    jj_consume_token(LIKE);
+    pattern_clause();
+  }
+
+  final public void pattern_clause() throws ParseException {
+    expression();
+    escape_clause();
+  }
+
+  final public void escape_clause() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case ESCAPE:
+      jj_consume_token(ESCAPE);
+      expression();
+      break;
+    default:
+      jj_la1[123] = jj_gen;
+      ;
+    }
+  }
+
+  final public void row_constructor() throws ParseException {
+    jj_consume_token(OPENPAREN);
+    row_constructor_list();
+    jj_consume_token(CLOSEPAREN);
+  }
+
+  final public void row_constructor_list() throws ParseException {
+    row_constructor_elem();
+    label_29:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case COMMA:
+        ;
+        break;
+      default:
+        jj_la1[124] = jj_gen;
+        break label_29;
+      }
+      jj_consume_token(COMMA);
+      row_constructor_elem();
+    }
+  }
+
+  final public void row_constructor_elem() throws ParseException {
+    expression();
+  }
+
+  final public ASTExpression expression() throws ParseException {
+                                         /*@bgen(jjtree) Expression */
+  ASTExpression jjtn000 = new ASTExpression(JJTEXPRESSION);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+  jjtreeOpenNodeScope(jjtn000);
+    try {
+      term();
+      label_30:
+      while (true) {
+        if (jj_2_118(3)) {
+          ;
+        } else {
+          break label_30;
+        }
+        if (jj_2_119(3)) {
+          jj_consume_token(211);
+          jj_consume_token(211);
+        } else if (jj_2_120(2)) {
+          jj_consume_token(PLUS);
+        } else if (jj_2_121(2)) {
+          jj_consume_token(MINUS);
+        } else if (jj_2_122(2)) {
+          jj_consume_token(212);
+        } else if (jj_2_123(2)) {
+          jj_consume_token(211);
+        } else if (jj_2_124(2)) {
+          jj_consume_token(213);
+        } else {
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+        term();
+      }
+     jjtree.closeNodeScope(jjtn000, true);
+     jjtc000 = false;
+     jjtreeCloseNodeScope(jjtn000);
+        {if (true) return jjtn000;}
+    } catch (Throwable jjte000) {
+          if (jjtc000) {
+            jjtree.clearNodeScope(jjtn000);
+            jjtc000 = false;
+          } else {
+            jjtree.popNode();
+          }
+          if (jjte000 instanceof RuntimeException) {
+            {if (true) throw (RuntimeException)jjte000;}
+          }
+          if (jjte000 instanceof ParseException) {
+            {if (true) throw (ParseException)jjte000;}
+          }
+          {if (true) throw (Error)jjte000;}
+    } finally {
+          if (jjtc000) {
+            jjtree.closeNodeScope(jjtn000, true);
+            jjtreeCloseNodeScope(jjtn000);
+          }
+    }
+    throw new Error("Missing return statement in function");
+  }
+
+  final public void term() throws ParseException {
+    factor();
+    label_31:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case ASTERISK:
+      case SLASH:
+      case 214:
+        ;
+        break;
+      default:
+        jj_la1[125] = jj_gen;
+        break label_31;
+      }
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case ASTERISK:
+        jj_consume_token(ASTERISK);
+        factor();
+        break;
+      case SLASH:
+        jj_consume_token(SLASH);
+        factor();
+        break;
+      case 214:
+        jj_consume_token(214);
+        factor();
+        break;
+      default:
+        jj_la1[126] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    }
+  }
+
+  final public void factor() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case TILDE:
+      jj_consume_token(TILDE);
+      break;
+    default:
+      jj_la1[127] = jj_gen;
+      ;
+    }
+    subfactor();
+  }
+
+  final public void subfactor() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case PLUS:
+    case MINUS:
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case PLUS:
+        jj_consume_token(PLUS);
+        break;
+      case MINUS:
+        jj_consume_token(MINUS);
+        break;
+      default:
+        jj_la1[128] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+      break;
+    default:
+      jj_la1[129] = jj_gen;
+      ;
+    }
+    primary();
+  }
+
+  final public void primary_1() throws ParseException {
+    if (jj_2_125(2147483647)) {
+      constant();
+    } else if (jj_2_126(2147483647)) {
+      subquery();
+    } else if (jj_2_127(2147483647)) {
+      function();
+    } else if (jj_2_128(2147483647)) {
+      column();
+    } else {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case CASE:
+      case COALESCE:
+      case NULLIF:
+        case_expression();
+        break;
+      case OPENPAREN:
+        jj_consume_token(OPENPAREN);
+        expression();
+        jj_consume_token(CLOSEPAREN);
+        break;
+      default:
+        jj_la1[130] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    }
+  }
+
+//supports javaname>>javaref
+  final public void primary() throws ParseException {
+    primary_1();
+    label_32:
+    while (true) {
+      if (jj_2_129(2)) {
+        ;
+      } else {
+        break label_32;
+      }
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case DOT:
+        jj_consume_token(DOT);
+        break;
+      case JAVA_REF:
+        jj_consume_token(JAVA_REF);
+        break;
+      default:
+        jj_la1[131] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+      id_or_string();
+      if (jj_2_130(2)) {
+        jj_consume_token(OPENPAREN);
+        expression_list();
+        jj_consume_token(CLOSEPAREN);
+      } else {
+        ;
+      }
+    }
+  }
+
+  final public void case_expression() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case COALESCE:
+    case NULLIF:
+      case_abbreviation();
+      break;
+    case CASE:
+      case_specification();
+      break;
+    default:
+      jj_la1[132] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void case_abbreviation() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case NULLIF:
+      nullif_format();
+      break;
+    case COALESCE:
+      coalesce_format();
+      break;
+    default:
+      jj_la1[133] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void case_specification() throws ParseException {
+    jj_consume_token(CASE);
+    simple_or_searched_case();
+  }
+
+  final public void simple_or_searched_case() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case AVG:
+    case CASE:
+    case COALESCE:
+    case COUNT:
+    case MAX:
+    case MIN:
+    case NULL:
+    case NULLIF:
+    case SESSION:
+    case SUM:
+    case USER:
+    case II_DBA:
+    case II_INGRES:
+    case INTEGER_LITERAL:
+    case FLOATING_POINT_LITERAL:
+    case SINGLE_STRING_LITERAL:
+    case DOUBLE_STRING_LITERAL:
+    case BINARY_LITERAL:
+    case MONEY_LITERAL:
+    case ID:
+    case SQUARE_BRACKET_ID:
+    case VAR_NAME:
+    case GLOBAL_VAR_NAME:
+    case TEMP_TABLE_NAME:
+    case DELIM_IDENT:
+    case TILDE:
+    case OPENPAREN:
+    case PLUS:
+    case MINUS:
+    case QUESTIONMARK:
+      simple_case();
+      break;
+    case WHEN:
+      searched_case();
+      break;
+    default:
+      jj_la1[134] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void simple_case() throws ParseException {
+    expression();
+    simple_when_clause_list();
+    optional_else_clause();
+    jj_consume_token(END);
+  }
+
+  final public void searched_case() throws ParseException {
+    searched_when_clause_list();
+    optional_else_clause();
+    jj_consume_token(END);
+  }
+
+  final public void simple_when_clause_list() throws ParseException {
+    simple_when_clause();
+    label_33:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case WHEN:
+        ;
+        break;
+      default:
+        jj_la1[135] = jj_gen;
+        break label_33;
+      }
+      simple_when_clause();
+    }
+  }
+
+  final public void simple_when_clause() throws ParseException {
+    jj_consume_token(WHEN);
+    expression();
+    UK_THEN();
+    result();
+  }
+
+  final public void searched_when_clause_list() throws ParseException {
+    searched_when_clause();
+    label_34:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case WHEN:
+        ;
+        break;
+      default:
+        jj_la1[136] = jj_gen;
+        break label_34;
+      }
+      searched_when_clause();
+    }
+  }
+
+  final public void searched_when_clause() throws ParseException {
+    jj_consume_token(WHEN);
+    boolean_expression();
+    UK_THEN();
+    result();
+  }
+
+  final public void optional_else_clause() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case ELSE:
+      jj_consume_token(ELSE);
+      result();
+      break;
+    default:
+      jj_la1[137] = jj_gen;
+      ;
+    }
+  }
+
+  final public void result() throws ParseException {
+    expression();
+  }
+
+  final public void coalesce_format() throws ParseException {
+    jj_consume_token(COALESCE);
+    jj_consume_token(OPENPAREN);
+    coalesce_list();
+    jj_consume_token(CLOSEPAREN);
+  }
+
+  final public void coalesce_list() throws ParseException {
+    coalesce_element();
+    label_35:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case COMMA:
+        ;
+        break;
+      default:
+        jj_la1[138] = jj_gen;
+        break label_35;
+      }
+      jj_consume_token(COMMA);
+      coalesce_element();
+    }
+  }
+
+  final public void coalesce_element() throws ParseException {
+    expression();
+  }
+
+  final public void nullif_format() throws ParseException {
+    jj_consume_token(NULLIF);
+    jj_consume_token(OPENPAREN);
+    expression();
+    jj_consume_token(COMMA);
+    expression();
+    jj_consume_token(CLOSEPAREN);
+  }
+
+  final public void column() throws ParseException {
+    if (jj_2_131(2147483647)) {
+      ii_col_spec();
+    } else if (jj_2_132(2147483647)) {
+      idplus();
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public Token id() throws ParseException {
+              Token t = null;
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case ID:
+    case SQUARE_BRACKET_ID:
+    case TEMP_TABLE_NAME:
+      t = idplus();
+      break;
+    case VAR_NAME:
+    case GLOBAL_VAR_NAME:
+    case QUESTIONMARK:
+      t = variable();
+      break;
+    default:
+      jj_la1[139] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public void string() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case SINGLE_STRING_LITERAL:
+    case DOUBLE_STRING_LITERAL:
+      string_literal();
+      break;
+    case VAR_NAME:
+    case GLOBAL_VAR_NAME:
+    case QUESTIONMARK:
+      variable();
+      break;
+    default:
+      jj_la1[140] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void id_string() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case ID:
+    case SQUARE_BRACKET_ID:
+    case TEMP_TABLE_NAME:
+      idplus();
+      break;
+    case DOUBLE_STRING_LITERAL:
+      jj_consume_token(DOUBLE_STRING_LITERAL);
+      break;
+    case VAR_NAME:
+    case GLOBAL_VAR_NAME:
+    case QUESTIONMARK:
+      variable();
+      break;
+    default:
+      jj_la1[141] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void integer() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case INTEGER_LITERAL:
+      jj_consume_token(INTEGER_LITERAL);
+      break;
+    case VAR_NAME:
+    case GLOBAL_VAR_NAME:
+    case QUESTIONMARK:
+      variable();
+      break;
+    default:
+      jj_la1[142] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public int number() throws ParseException {
+                int retval = 0;
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case MINUS:
+      jj_consume_token(MINUS);
+      jj_consume_token(INTEGER_LITERAL);
+                                try {retval = Integer.parseInt("-" + getToken(0).image);}catch(Exception e){}
+      break;
+    case INTEGER_LITERAL:
+    case PLUS:
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case PLUS:
+        jj_consume_token(PLUS);
+        break;
+      default:
+        jj_la1[143] = jj_gen;
+        ;
+      }
+      jj_consume_token(INTEGER_LITERAL);
+                                    try {retval = Integer.parseInt(getToken(0).image);}catch(Exception e){}
+      break;
+    default:
+      jj_la1[144] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+        {if (true) return retval;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public void constant() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case INTEGER_LITERAL:
+    case FLOATING_POINT_LITERAL:
+    case MONEY_LITERAL:
+      signed_const();
+      break;
+    case NULL:
+    case SINGLE_STRING_LITERAL:
+    case DOUBLE_STRING_LITERAL:
+    case BINARY_LITERAL:
+    case VAR_NAME:
+    case GLOBAL_VAR_NAME:
+    case QUESTIONMARK:
+      unsigned_const();
+      break;
+    default:
+      jj_la1[145] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public Token signed_const() throws ParseException {
+                        Token t;
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case INTEGER_LITERAL:
+      t = jj_consume_token(INTEGER_LITERAL);
+      break;
+    case FLOATING_POINT_LITERAL:
+      t = jj_consume_token(FLOATING_POINT_LITERAL);
+      break;
+    case MONEY_LITERAL:
+      t = jj_consume_token(MONEY_LITERAL);
+      break;
+    default:
+      jj_la1[146] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+              {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token unsigned_const() throws ParseException {
+                          Token t;
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case BINARY_LITERAL:
+      t = jj_consume_token(BINARY_LITERAL);
+      break;
+    case SINGLE_STRING_LITERAL:
+    case DOUBLE_STRING_LITERAL:
+      t = string_literal();
+      break;
+    case NULL:
+      t = null_stmt();
+      break;
+    case VAR_NAME:
+    case GLOBAL_VAR_NAME:
+    case QUESTIONMARK:
+      t = variable();
+      break;
+    default:
+      jj_la1[147] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+                {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public String literal() throws ParseException {
+                    Token t; boolean negative = false;
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case INTEGER_LITERAL:
+    case FLOATING_POINT_LITERAL:
+    case MONEY_LITERAL:
+    case PLUS:
+    case MINUS:
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case PLUS:
+      case MINUS:
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case PLUS:
+          jj_consume_token(PLUS);
+          break;
+        case MINUS:
+          jj_consume_token(MINUS);
+                        negative = true;
+          break;
+        default:
+          jj_la1[148] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+        break;
+      default:
+        jj_la1[149] = jj_gen;
+        ;
+      }
+      t = signed_const();
+      break;
+    case NULL:
+    case SINGLE_STRING_LITERAL:
+    case DOUBLE_STRING_LITERAL:
+    case BINARY_LITERAL:
+    case VAR_NAME:
+    case GLOBAL_VAR_NAME:
+    case QUESTIONMARK:
+      t = unsigned_const();
+      break;
+    case ID:
+    case SQUARE_BRACKET_ID:
+    case TEMP_TABLE_NAME:
+      t = idplus();
+      break;
+    case PRIMARY:
+      t = jj_consume_token(PRIMARY);
+      break;
+    case FOREIGN:
+      t = jj_consume_token(FOREIGN);
+      break;
+    default:
+      jj_la1[150] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+          {if (true) return negative?"-"+t.image:t.image;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public void binary() throws ParseException {
+    if (jj_2_133(1)) {
+      UK_BINARY();
+    } else {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case VAR_NAME:
+      case GLOBAL_VAR_NAME:
+      case QUESTIONMARK:
+        variable();
+        break;
+      default:
+        jj_la1[151] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    }
+  }
+
+  final public Token null_stmt() throws ParseException {
+                     Token t;
+    t = jj_consume_token(NULL);
+                          {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+//variable reference
+  final public Token variable() throws ParseException {
+                    Token t;
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case VAR_NAME:
+      t = jj_consume_token(VAR_NAME);
+      break;
+    case QUESTIONMARK:
+      t = dyn_question_mark();
+      break;
+    case GLOBAL_VAR_NAME:
+      t = jj_consume_token(GLOBAL_VAR_NAME);
+      break;
+    default:
+      jj_la1[152] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+          {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token variable_assignment() throws ParseException {
+                               Token t;
+    t = jj_consume_token(VAR_NAME);
+          {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Token dyn_question_mark() throws ParseException {
+                             Token t;
+    t = jj_consume_token(QUESTIONMARK);
+                          {if (true) return t;}
+    throw new Error("Missing return statement in function");
+  }
+
+//include field reference and method reference
+  final public void java_memberref() throws ParseException {
+    primary_1();
+    label_36:
+    while (true) {
+      if (jj_2_134(3)) {
+        ;
+      } else {
+        break label_36;
+      }
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case DOT:
+        jj_consume_token(DOT);
+        break;
+      case JAVA_REF:
+        jj_consume_token(JAVA_REF);
+        break;
+      default:
+        jj_la1[153] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+      id_or_string();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case OPENPAREN:
+        jj_consume_token(OPENPAREN);
+        expression_list();
+        jj_consume_token(CLOSEPAREN);
+        break;
+      default:
+        jj_la1[154] = jj_gen;
+        ;
+      }
+    }
+  }
+
+  final public void function() throws ParseException {
+    if (jj_2_135(2)) {
+      builtin_function();
+    } else if (jj_2_136(2)) {
+      agg_function();
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void builtin_function() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case USER:
+      jj_consume_token(USER);
+      break;
+    case SESSION:
+    case II_DBA:
+    case II_INGRES:
+    case ID:
+    case DELIM_IDENT:
+      ii_obj_spec();
+      jj_consume_token(OPENPAREN);
+      expression_list();
+      optional_using_clause();
+      jj_consume_token(CLOSEPAREN);
+      break;
+    default:
+      jj_la1[155] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void subq_expression_list() throws ParseException {
+    subq_expression();
+    label_37:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case COMMA:
+        ;
+        break;
+      default:
+        jj_la1[156] = jj_gen;
+        break label_37;
+      }
+      jj_consume_token(COMMA);
+      subq_expression();
+    }
+  }
+
+  final public void subq_expression() throws ParseException {
+    if (jj_2_137(2)) {
+      idplus();
+      jj_consume_token(EQUAL);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case AVG:
+      case CASE:
+      case COALESCE:
+      case COUNT:
+      case MAX:
+      case MIN:
+      case NULL:
+      case NULLIF:
+      case SESSION:
+      case SUM:
+      case USER:
+      case II_DBA:
+      case II_INGRES:
+      case INTEGER_LITERAL:
+      case FLOATING_POINT_LITERAL:
+      case SINGLE_STRING_LITERAL:
+      case DOUBLE_STRING_LITERAL:
+      case BINARY_LITERAL:
+      case MONEY_LITERAL:
+      case ID:
+      case SQUARE_BRACKET_ID:
+      case VAR_NAME:
+      case GLOBAL_VAR_NAME:
+      case TEMP_TABLE_NAME:
+      case DELIM_IDENT:
+      case TILDE:
+      case OPENPAREN:
+      case PLUS:
+      case MINUS:
+      case QUESTIONMARK:
+        expression();
+        break;
+      default:
+        jj_la1[157] = jj_gen;
+        ;
+      }
+    } else if (jj_2_138(2)) {
+      expression();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case AS:
+      case SINGLE_STRING_LITERAL:
+      case DOUBLE_STRING_LITERAL:
+      case ID:
+      case SQUARE_BRACKET_ID:
+      case TEMP_TABLE_NAME:
+        optional_as();
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case ID:
+        case SQUARE_BRACKET_ID:
+        case TEMP_TABLE_NAME:
+          idplus();
+          break;
+        case SINGLE_STRING_LITERAL:
+        case DOUBLE_STRING_LITERAL:
+          string_literal();
+          break;
+        default:
+          jj_la1[158] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+        break;
+      default:
+        jj_la1[159] = jj_gen;
+        ;
+      }
+    } else if (jj_2_139(2)) {
+      string_literal();
+      jj_consume_token(EQUAL);
+      expression();
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void expression_list() throws ParseException {
+    if (jj_2_141(2)) {
+      expression();
+      label_38:
+      while (true) {
+        if (jj_2_140(2)) {
+          ;
+        } else {
+          break label_38;
+        }
+        jj_consume_token(COMMA);
+        expression();
+      }
+    } else {
+      ;
+    }
+  }
+
+  final public void optional_using_clause() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case AS:
+    case COMMA:
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case COMMA:
+        jj_consume_token(COMMA);
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case USING:
+          jj_consume_token(USING);
+          jj_consume_token(ID);
+          break;
+        default:
+          jj_la1[160] = jj_gen;
+          ;
+        }
+        break;
+      case AS:
+        jj_consume_token(AS);
+        datatype();
+        break;
+      default:
+        jj_la1[161] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+      break;
+    default:
+      jj_la1[162] = jj_gen;
+      ;
+    }
+  }
+
+  final public void optional_comma_argument() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case COMMA:
+      jj_consume_token(COMMA);
+      expression();
+      break;
+    default:
+      jj_la1[163] = jj_gen;
+      ;
+    }
+  }
+
+  final public void agg_function() throws ParseException {
+    agg_function_specification();
+  }
+
+  final public void agg_function_specification() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case COUNT:
+      jj_consume_token(COUNT);
+      jj_consume_token(OPENPAREN);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case ASTERISK:
+        jj_consume_token(ASTERISK);
+        break;
+      default:
+        jj_la1[165] = jj_gen;
+        if (jj_2_142(1)) {
+          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+          case DISTINCT:
+            jj_consume_token(DISTINCT);
+            break;
+          default:
+            jj_la1[164] = jj_gen;
+            all();
+          }
+          expression();
+        } else {
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+      }
+      jj_consume_token(CLOSEPAREN);
+      break;
+    case AVG:
+      jj_consume_token(AVG);
+      jj_consume_token(OPENPAREN);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case DISTINCT:
+        jj_consume_token(DISTINCT);
+        break;
+      default:
+        jj_la1[166] = jj_gen;
+        all();
+      }
+      expression();
+      jj_consume_token(CLOSEPAREN);
+      break;
+    case MAX:
+      jj_consume_token(MAX);
+      jj_consume_token(OPENPAREN);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case DISTINCT:
+        jj_consume_token(DISTINCT);
+        break;
+      default:
+        jj_la1[167] = jj_gen;
+        all();
+      }
+      expression();
+      jj_consume_token(CLOSEPAREN);
+      break;
+    case MIN:
+      jj_consume_token(MIN);
+      jj_consume_token(OPENPAREN);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case DISTINCT:
+        jj_consume_token(DISTINCT);
+        break;
+      default:
+        jj_la1[168] = jj_gen;
+        all();
+      }
+      expression();
+      jj_consume_token(CLOSEPAREN);
+      break;
+    case SUM:
+      jj_consume_token(SUM);
+      jj_consume_token(OPENPAREN);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case DISTINCT:
+        jj_consume_token(DISTINCT);
+        break;
+      default:
+        jj_la1[169] = jj_gen;
+        all();
+      }
+      expression();
+      jj_consume_token(CLOSEPAREN);
+      break;
+    default:
+      jj_la1[170] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void all() throws ParseException {
+    if (jj_2_143(1)) {
+      UK_ALL();
+    } else {
+      ;
+    }
+  }
+
+  final public void boolean_function() throws ParseException {
+    jj_consume_token(UPDATE);
+    jj_consume_token(OPENPAREN);
+    idplus();
+    jj_consume_token(CLOSEPAREN);
+  }
+
+/****************************************************************************
+** GENERIC RULES							@RH@
+**
+** These rules are "generic" in that they are referenced by several
+** productions from different statements, but serve a common purpose.
+** They include:
+**
+**	nonkeyword		same as NAME; used to distinguish non-keywords in the grammar
+**	name_or_sconst	Use for any constant; not valid for identifiers
+**	generic_ident	any user-defined object
+**	internal_ident	same as generic_ident, but may also include SCONST
+**	sconst_ident	same is internal_ident, but doesn't check length of SCONST,
+**					used in WITH-clauses where need more context to verify length limits.
+**  auth_ident      same as internal_ident; used to distinguish authorization identifiers
+**	user_ident		same as auth_ident, but may also include $dba or $ingres
+**	schema_spec		same as user_ident; used to distinguish	schema identifiers
+**	obj_spec		generic object specification
+**	tbl_spec		same as generic_ident; used to distinguish table names
+**	col_spec		same as generic_ident; used to distinguish column names
+*****************************************************************************/
+  final public Token ii_generic_ident() throws ParseException {
+                           Token t;
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case DELIM_IDENT:
+      t = jj_consume_token(DELIM_IDENT);
+      break;
+    case ID:
+      t = jj_consume_token(ID);
+         {if (true) return t;}
+      break;
+    default:
+      jj_la1[171] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    throw new Error("Missing return statement in function");
+  }
+
+  final public void ii_sconst_ident() throws ParseException {
+    ii_generic_ident();
+  }
+
+  final public void ii_internal_ident() throws ParseException {
+    ii_generic_ident();
+  }
+
+  final public void ii_auth_ident() throws ParseException {
+    if (jj_2_144(2)) {
+
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    ii_internal_ident();
+  }
+
+  final public void ii_user_ident() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case ID:
+    case DELIM_IDENT:
+      ii_internal_ident();
+      break;
+    case II_DBA:
+      jj_consume_token(II_DBA);
+      break;
+    case II_INGRES:
+      jj_consume_token(II_INGRES);
+      break;
+    default:
+      jj_la1[172] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void ii_schema_spec() throws ParseException {
+    ii_user_ident();
+  }
+
+  final public void ii_tbl_spec() throws ParseException {
+    ii_generic_ident();
+  }
+
+  final public void ii_col_spec() throws ParseException {
+    ii_generic_ident();
+  }
+
+  final public void ii_obj_spec() throws ParseException {
+    if (jj_2_145(2)) {
+      ii_schema_spec();
+      jj_consume_token(DOT);
+      ii_generic_ident();
+    } else if (jj_2_146(2147483647)) {
+      jj_consume_token(SESSION);
+      jj_consume_token(DOT);
+      ii_generic_ident();
+    } else {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case ID:
+      case DELIM_IDENT:
+        ii_generic_ident();
+        break;
+      default:
+        jj_la1[173] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    }
+  }
+
+/**
+ * Skips the subsequent tokens when parsing error occurrs. 
+ * The process will continue until the current consumed token matches <code>tokinds</code> 
+ * or the next token to be consumed matches <code>beforekinds</code>.
+ */
+  void error_skiptobefore(int[] tokinds, int[] beforekinds) throws ParseException {
+  boolean match = false;
+  Token t1 = getToken(0);
+    // The following loop consumes tokens all the way up to a token of
+    // "kind".  We use a do-while loop rather than a while because the
+    // current token is the one immediately before the erroneous token
+    // (in our case the token immediately before what should have been
+    // "if"/"while".
+  do {
+    match = token.kind == 0 || getToken(1).kind == 0 ; // 0 means the <EOF>
+    if (match) {break;}
+    for (int i=0; i< tokinds.length; i++){
+        match = match || token.kind == tokinds[i];
+        if (match) {break;}
+    }
+    if (match) {break;}
+    for (int i=0; i< beforekinds.length; i++){
+        match = match || getToken(1).kind == beforekinds[i];
+        if (match) {break;}
+    }
+    if (!match){
+        logDebug("current token:" + token.image);
+        getNextToken() ;
+    }
+
+  } while (!match);
+
+  Token t2 = getToken(0);
+  if (t1 == t2 ){
+        //force get next token
+        logDebug("current token:" + token.image);
+    getNextToken() ;
+  }
+  }
+
+  final private boolean jj_2_1(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_1(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(0, xla); }
+  }
+
+  final private boolean jj_2_2(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_2(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(1, xla); }
+  }
+
+  final private boolean jj_2_3(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_3(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(2, xla); }
+  }
+
+  final private boolean jj_2_4(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_4(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(3, xla); }
+  }
+
+  final private boolean jj_2_5(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_5(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(4, xla); }
+  }
+
+  final private boolean jj_2_6(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_6(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(5, xla); }
+  }
+
+  final private boolean jj_2_7(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_7(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(6, xla); }
+  }
+
+  final private boolean jj_2_8(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_8(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(7, xla); }
+  }
+
+  final private boolean jj_2_9(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_9(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(8, xla); }
+  }
+
+  final private boolean jj_2_10(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_10(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(9, xla); }
+  }
+
+  final private boolean jj_2_11(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_11(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(10, xla); }
+  }
+
+  final private boolean jj_2_12(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_12(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(11, xla); }
+  }
+
+  final private boolean jj_2_13(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_13(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(12, xla); }
+  }
+
+  final private boolean jj_2_14(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_14(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(13, xla); }
+  }
+
+  final private boolean jj_2_15(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_15(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(14, xla); }
+  }
+
+  final private boolean jj_2_16(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_16(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(15, xla); }
+  }
+
+  final private boolean jj_2_17(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_17(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(16, xla); }
+  }
+
+  final private boolean jj_2_18(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_18(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(17, xla); }
+  }
+
+  final private boolean jj_2_19(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_19(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(18, xla); }
+  }
+
+  final private boolean jj_2_20(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_20(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(19, xla); }
+  }
+
+  final private boolean jj_2_21(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_21(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(20, xla); }
+  }
+
+  final private boolean jj_2_22(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_22(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(21, xla); }
+  }
+
+  final private boolean jj_2_23(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_23(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(22, xla); }
+  }
+
+  final private boolean jj_2_24(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_24(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(23, xla); }
+  }
+
+  final private boolean jj_2_25(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_25(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(24, xla); }
+  }
+
+  final private boolean jj_2_26(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_26(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(25, xla); }
+  }
+
+  final private boolean jj_2_27(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_27(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(26, xla); }
+  }
+
+  final private boolean jj_2_28(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_28(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(27, xla); }
+  }
+
+  final private boolean jj_2_29(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_29(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(28, xla); }
+  }
+
+  final private boolean jj_2_30(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_30(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(29, xla); }
+  }
+
+  final private boolean jj_2_31(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_31(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(30, xla); }
+  }
+
+  final private boolean jj_2_32(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_32(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(31, xla); }
+  }
+
+  final private boolean jj_2_33(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_33(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(32, xla); }
+  }
+
+  final private boolean jj_2_34(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_34(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(33, xla); }
+  }
+
+  final private boolean jj_2_35(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_35(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(34, xla); }
+  }
+
+  final private boolean jj_2_36(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_36(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(35, xla); }
+  }
+
+  final private boolean jj_2_37(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_37(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(36, xla); }
+  }
+
+  final private boolean jj_2_38(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_38(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(37, xla); }
+  }
+
+  final private boolean jj_2_39(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_39(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(38, xla); }
+  }
+
+  final private boolean jj_2_40(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_40(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(39, xla); }
+  }
+
+  final private boolean jj_2_41(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_41(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(40, xla); }
+  }
+
+  final private boolean jj_2_42(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_42(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(41, xla); }
+  }
+
+  final private boolean jj_2_43(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_43(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(42, xla); }
+  }
+
+  final private boolean jj_2_44(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_44(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(43, xla); }
+  }
+
+  final private boolean jj_2_45(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_45(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(44, xla); }
+  }
+
+  final private boolean jj_2_46(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_46(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(45, xla); }
+  }
+
+  final private boolean jj_2_47(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_47(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(46, xla); }
+  }
+
+  final private boolean jj_2_48(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_48(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(47, xla); }
+  }
+
+  final private boolean jj_2_49(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_49(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(48, xla); }
+  }
+
+  final private boolean jj_2_50(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_50(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(49, xla); }
+  }
+
+  final private boolean jj_2_51(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_51(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(50, xla); }
+  }
+
+  final private boolean jj_2_52(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_52(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(51, xla); }
+  }
+
+  final private boolean jj_2_53(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_53(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(52, xla); }
+  }
+
+  final private boolean jj_2_54(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_54(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(53, xla); }
+  }
+
+  final private boolean jj_2_55(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_55(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(54, xla); }
+  }
+
+  final private boolean jj_2_56(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_56(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(55, xla); }
+  }
+
+  final private boolean jj_2_57(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_57(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(56, xla); }
+  }
+
+  final private boolean jj_2_58(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_58(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(57, xla); }
+  }
+
+  final private boolean jj_2_59(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_59(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(58, xla); }
+  }
+
+  final private boolean jj_2_60(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_60(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(59, xla); }
+  }
+
+  final private boolean jj_2_61(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_61(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(60, xla); }
+  }
+
+  final private boolean jj_2_62(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_62(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(61, xla); }
+  }
+
+  final private boolean jj_2_63(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_63(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(62, xla); }
+  }
+
+  final private boolean jj_2_64(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_64(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(63, xla); }
+  }
+
+  final private boolean jj_2_65(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_65(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(64, xla); }
+  }
+
+  final private boolean jj_2_66(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_66(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(65, xla); }
+  }
+
+  final private boolean jj_2_67(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_67(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(66, xla); }
+  }
+
+  final private boolean jj_2_68(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_68(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(67, xla); }
+  }
+
+  final private boolean jj_2_69(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_69(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(68, xla); }
+  }
+
+  final private boolean jj_2_70(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_70(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(69, xla); }
+  }
+
+  final private boolean jj_2_71(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_71(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(70, xla); }
+  }
+
+  final private boolean jj_2_72(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_72(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(71, xla); }
+  }
+
+  final private boolean jj_2_73(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_73(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(72, xla); }
+  }
+
+  final private boolean jj_2_74(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_74(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(73, xla); }
+  }
+
+  final private boolean jj_2_75(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_75(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(74, xla); }
+  }
+
+  final private boolean jj_2_76(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_76(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(75, xla); }
+  }
+
+  final private boolean jj_2_77(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_77(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(76, xla); }
+  }
+
+  final private boolean jj_2_78(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_78(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(77, xla); }
+  }
+
+  final private boolean jj_2_79(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_79(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(78, xla); }
+  }
+
+  final private boolean jj_2_80(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_80(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(79, xla); }
+  }
+
+  final private boolean jj_2_81(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_81(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(80, xla); }
+  }
+
+  final private boolean jj_2_82(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_82(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(81, xla); }
+  }
+
+  final private boolean jj_2_83(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_83(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(82, xla); }
+  }
+
+  final private boolean jj_2_84(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_84(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(83, xla); }
+  }
+
+  final private boolean jj_2_85(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_85(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(84, xla); }
+  }
+
+  final private boolean jj_2_86(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_86(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(85, xla); }
+  }
+
+  final private boolean jj_2_87(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_87(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(86, xla); }
+  }
+
+  final private boolean jj_2_88(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_88(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(87, xla); }
+  }
+
+  final private boolean jj_2_89(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_89(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(88, xla); }
+  }
+
+  final private boolean jj_2_90(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_90(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(89, xla); }
+  }
+
+  final private boolean jj_2_91(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_91(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(90, xla); }
+  }
+
+  final private boolean jj_2_92(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_92(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(91, xla); }
+  }
+
+  final private boolean jj_2_93(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_93(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(92, xla); }
+  }
+
+  final private boolean jj_2_94(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_94(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(93, xla); }
+  }
+
+  final private boolean jj_2_95(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_95(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(94, xla); }
+  }
+
+  final private boolean jj_2_96(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_96(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(95, xla); }
+  }
+
+  final private boolean jj_2_97(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_97(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(96, xla); }
+  }
+
+  final private boolean jj_2_98(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_98(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(97, xla); }
+  }
+
+  final private boolean jj_2_99(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_99(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(98, xla); }
+  }
+
+  final private boolean jj_2_100(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_100(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(99, xla); }
+  }
+
+  final private boolean jj_2_101(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_101(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(100, xla); }
+  }
+
+  final private boolean jj_2_102(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_102(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(101, xla); }
+  }
+
+  final private boolean jj_2_103(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_103(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(102, xla); }
+  }
+
+  final private boolean jj_2_104(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_104(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(103, xla); }
+  }
+
+  final private boolean jj_2_105(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_105(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(104, xla); }
+  }
+
+  final private boolean jj_2_106(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_106(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(105, xla); }
+  }
+
+  final private boolean jj_2_107(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_107(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(106, xla); }
+  }
+
+  final private boolean jj_2_108(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_108(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(107, xla); }
+  }
+
+  final private boolean jj_2_109(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_109(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(108, xla); }
+  }
+
+  final private boolean jj_2_110(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_110(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(109, xla); }
+  }
+
+  final private boolean jj_2_111(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_111(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(110, xla); }
+  }
+
+  final private boolean jj_2_112(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_112(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(111, xla); }
+  }
+
+  final private boolean jj_2_113(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_113(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(112, xla); }
+  }
+
+  final private boolean jj_2_114(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_114(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(113, xla); }
+  }
+
+  final private boolean jj_2_115(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_115(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(114, xla); }
+  }
+
+  final private boolean jj_2_116(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_116(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(115, xla); }
+  }
+
+  final private boolean jj_2_117(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_117(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(116, xla); }
+  }
+
+  final private boolean jj_2_118(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_118(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(117, xla); }
+  }
+
+  final private boolean jj_2_119(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_119(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(118, xla); }
+  }
+
+  final private boolean jj_2_120(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_120(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(119, xla); }
+  }
+
+  final private boolean jj_2_121(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_121(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(120, xla); }
+  }
+
+  final private boolean jj_2_122(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_122(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(121, xla); }
+  }
+
+  final private boolean jj_2_123(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_123(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(122, xla); }
+  }
+
+  final private boolean jj_2_124(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_124(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(123, xla); }
+  }
+
+  final private boolean jj_2_125(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_125(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(124, xla); }
+  }
+
+  final private boolean jj_2_126(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_126(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(125, xla); }
+  }
+
+  final private boolean jj_2_127(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_127(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(126, xla); }
+  }
+
+  final private boolean jj_2_128(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_128(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(127, xla); }
+  }
+
+  final private boolean jj_2_129(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_129(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(128, xla); }
+  }
+
+  final private boolean jj_2_130(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_130(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(129, xla); }
+  }
+
+  final private boolean jj_2_131(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_131(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(130, xla); }
+  }
+
+  final private boolean jj_2_132(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_132(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(131, xla); }
+  }
+
+  final private boolean jj_2_133(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_133(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(132, xla); }
+  }
+
+  final private boolean jj_2_134(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_134(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(133, xla); }
+  }
+
+  final private boolean jj_2_135(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_135(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(134, xla); }
+  }
+
+  final private boolean jj_2_136(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_136(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(135, xla); }
+  }
+
+  final private boolean jj_2_137(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_137(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(136, xla); }
+  }
+
+  final private boolean jj_2_138(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_138(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(137, xla); }
+  }
+
+  final private boolean jj_2_139(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_139(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(138, xla); }
+  }
+
+  final private boolean jj_2_140(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_140(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(139, xla); }
+  }
+
+  final private boolean jj_2_141(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_141(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(140, xla); }
+  }
+
+  final private boolean jj_2_142(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_142(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(141, xla); }
+  }
+
+  final private boolean jj_2_143(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_143(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(142, xla); }
+  }
+
+  final private boolean jj_2_144(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_144(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(143, xla); }
+  }
+
+  final private boolean jj_2_145(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_145(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(144, xla); }
+  }
+
+  final private boolean jj_2_146(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_146(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(145, xla); }
+  }
+
+  final private boolean jj_3R_421() {
+    if (jj_scan_token(COMMA)) return true;
+    if (jj_3R_365()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_435() {
+    if (jj_3R_102()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_408() {
+    if (jj_scan_token(UNION)) return true;
+    if (jj_3R_419()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_395() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_408()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_429() {
+    if (jj_scan_token(ELSE)) return true;
+    if (jj_3R_435()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_66() {
+    if (jj_3R_87()) return true;
+    if (jj_scan_token(UNION)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_422() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_429()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_113() {
+    lookingAhead = true;
+    jj_semLA = check( "inner");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_205()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_419() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_66()) jj_scanpos = xsp;
+    if (jj_3R_87()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_64() {
+    if (jj_3R_84()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_65() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_64()) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(45)) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_382() {
+    if (jj_scan_token(WHEN)) return true;
+    if (jj_3R_121()) return true;
+    if (jj_3R_434()) return true;
+    if (jj_3R_435()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_430() {
+    if (jj_3R_382()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_85() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_65()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_183() {
+    return false;
+  }
+
+  final private boolean jj_3R_394() {
+    if (jj_3R_386()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_367() {
+    if (jj_3R_382()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_430()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  final private boolean jj_3_63() {
+    if (jj_3R_85()) return true;
+    if (jj_3R_86()) return true;
+    if (jj_3R_370()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_394()) jj_scanpos = xsp;
+    if (jj_3R_372()) return true;
+    if (jj_3R_373()) return true;
+    if (jj_3R_395()) return true;
+    if (jj_3R_396()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_312() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_63()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_182() {
+    return false;
+  }
+
+  final private boolean jj_3R_381() {
+    if (jj_scan_token(WHEN)) return true;
+    if (jj_3R_102()) return true;
+    if (jj_3R_434()) return true;
+    if (jj_3R_435()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_428() {
+    if (jj_3R_381()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_299() {
+    if (jj_scan_token(SELECT)) return true;
+    if (jj_3R_312()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_77() {
+    lookingAhead = true;
+    jj_semLA = check("float8");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_183()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_180() {
+    return false;
+  }
+
+  final private boolean jj_3R_366() {
+    if (jj_3R_381()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_428()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_279() {
+    if (jj_scan_token(OPENPAREN)) return true;
+    if (jj_3R_299()) return true;
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_371() {
+    if (jj_3R_386()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_76() {
+    lookingAhead = true;
+    jj_semLA = check("float4");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_182()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_196() {
+    return false;
+  }
+
+  final private boolean jj_3R_354() {
+    if (jj_3R_367()) return true;
+    if (jj_3R_422()) return true;
+    if (jj_scan_token(END)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_239() {
+    if (jj_scan_token(DELETE)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_74() {
+    lookingAhead = true;
+    jj_semLA = check("float");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_180()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_353() {
+    if (jj_3R_102()) return true;
+    if (jj_3R_366()) return true;
+    if (jj_3R_422()) return true;
+    if (jj_scan_token(END)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_346() {
+    if (jj_3R_354()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_92() {
+    lookingAhead = true;
+    jj_semLA = check("first");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_196()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_345() {
+    if (jj_3R_353()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_333() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_345()) {
+    jj_scanpos = xsp;
+    if (jj_3R_346()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3_129() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(181)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(200)) return true;
+    }
+    if (jj_3R_135()) return true;
+    xsp = jj_scanpos;
+    if (jj_3_130()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_314() {
+    if (jj_scan_token(CASE)) return true;
+    if (jj_3R_333()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_181() {
+    return false;
+  }
+
+  final private boolean jj_3_61() {
+    if (jj_3R_84()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_62() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_61()) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(45)) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_368() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_62()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_331() {
+    if (jj_3R_343()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_330() {
+    if (jj_3R_342()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_313() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_331()) {
+    jj_scanpos = xsp;
+    if (jj_3R_332()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_177() {
+    return false;
+  }
+
+  final private boolean jj_3R_332() {
+    if (jj_3R_344()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_83() {
+    if (jj_3R_187()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3_129()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_310() {
+    if (jj_3R_330()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_305() {
+    if (jj_scan_token(UNION)) return true;
+    if (jj_3R_319()) return true;
+    if (jj_3R_278()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_300() {
+    if (jj_3R_313()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_298() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_310()) {
+    jj_scanpos = xsp;
+    if (jj_3R_311()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_280() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_300()) {
+    jj_scanpos = xsp;
+    if (jj_3R_301()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_75() {
+    lookingAhead = true;
+    jj_semLA = check( UK_DOUBLE_PRECISION, "double precision");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_181()) return true;
+    if (jj_scan_token(UK_DOUBLE_PRECISION)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_176() {
+    return false;
+  }
+
+  final private boolean jj_3_60() {
+    if (jj_3R_84()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_342() {
+    if (jj_scan_token(SELECT)) return true;
+    if (jj_3R_368()) return true;
+    if (jj_3R_369()) return true;
+    if (jj_3R_370()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_371()) jj_scanpos = xsp;
+    if (jj_3R_372()) return true;
+    if (jj_3R_373()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_319() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_60()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_301() {
+    if (jj_3R_314()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_71() {
+    lookingAhead = true;
+    jj_semLA = check("dec");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_177()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_311() {
+    if (jj_scan_token(OPENPAREN)) return true;
+    if (jj_3R_238()) return true;
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_278() {
+    if (jj_3R_298()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_70() {
+    lookingAhead = true;
+    jj_semLA = check("decimal");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_176()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_238() {
+    if (jj_3R_278()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_305()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_185() {
+    return false;
+  }
+
+  final private boolean jj_3R_152() {
+    if (jj_3R_238()) return true;
+    if (jj_3R_289()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_128() {
+    if (jj_3R_134()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_127() {
+    if (jj_3R_133()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_125() {
+    if (jj_3R_132()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_126() {
+    if (jj_scan_token(OPENPAREN)) return true;
+    if (jj_scan_token(SELECT)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_162() {
+    return false;
+  }
+
+  final private boolean jj_3R_247() {
+    if (jj_scan_token(OPENPAREN)) return true;
+    if (jj_3R_102()) return true;
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_246() {
+    if (jj_3R_280()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_79() {
+    lookingAhead = true;
+    jj_semLA = check("date");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_185()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_245() {
+    if (jj_3R_134()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_161() {
+    return false;
+  }
+
+  final private boolean jj_3R_244() {
+    if (jj_3R_133()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_242() {
+    if (jj_3R_132()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_187() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_242()) {
+    jj_scanpos = xsp;
+    if (jj_3R_243()) {
+    jj_scanpos = xsp;
+    if (jj_3R_244()) {
+    jj_scanpos = xsp;
+    if (jj_3R_245()) {
+    jj_scanpos = xsp;
+    if (jj_3R_246()) {
+    jj_scanpos = xsp;
+    if (jj_3R_247()) return true;
+    }
+    }
+    }
+    }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_243() {
+    if (jj_3R_279()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_293() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(195)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(196)) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_57() {
+    lookingAhead = true;
+    jj_semLA = check("character");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_162()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_264() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_293()) jj_scanpos = xsp;
+    if (jj_3R_83()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_59() {
+    if (jj_3R_83()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_219() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(183)) jj_scanpos = xsp;
+    if (jj_3R_264()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_56() {
+    lookingAhead = true;
+    jj_semLA = check("char");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_161()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_237() {
+    if (jj_scan_token(UPDATE)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_119() {
+    if (jj_scan_token(211)) return true;
+    if (jj_scan_token(211)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_265() {
+    if (jj_scan_token(ASTERISK)) return true;
+    if (jj_3R_219()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_220() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_265()) {
+    jj_scanpos = xsp;
+    if (jj_3R_266()) {
+    jj_scanpos = xsp;
+    if (jj_3R_267()) return true;
+    }
+    }
+    return false;
+  }
+
+  final private boolean jj_3_57() {
+    if (jj_scan_token(DOT)) return true;
+    if (jj_3R_81()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_267() {
+    if (jj_scan_token(214)) return true;
+    if (jj_3R_219()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_124() {
+    if (jj_scan_token(213)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_266() {
+    if (jj_scan_token(SLASH)) return true;
+    if (jj_3R_219()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_123() {
+    if (jj_scan_token(211)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_131() {
+    if (jj_3R_219()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_220()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  final private boolean jj_3_122() {
+    if (jj_scan_token(212)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_121() {
+    if (jj_scan_token(MINUS)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_120() {
+    if (jj_scan_token(PLUS)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_228() {
+    return false;
+  }
+
+  final private boolean jj_3R_262() {
+    if (jj_3R_102()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_118() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_119()) {
+    jj_scanpos = xsp;
+    if (jj_3_120()) {
+    jj_scanpos = xsp;
+    if (jj_3_121()) {
+    jj_scanpos = xsp;
+    if (jj_3_122()) {
+    jj_scanpos = xsp;
+    if (jj_3_123()) {
+    jj_scanpos = xsp;
+    if (jj_3_124()) return true;
+    }
+    }
+    }
+    }
+    }
+    if (jj_3R_131()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_170() {
+    return false;
+  }
+
+  final private boolean jj_3R_263() {
+    if (jj_scan_token(COMMA)) return true;
+    if (jj_3R_262()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_218() {
+    if (jj_3R_262()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_263()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_138() {
+    lookingAhead = true;
+    jj_semLA = check("binary");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_228()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_188() {
+    return false;
+  }
+
+  final private boolean jj_3R_102() {
+    if (jj_3R_131()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3_118()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_127() {
+    if (jj_scan_token(OPENPAREN)) return true;
+    if (jj_3R_218()) return true;
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_392() {
+    if (jj_scan_token(SELECT)) return true;
+    if (jj_3R_312()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_418() {
+    if (jj_scan_token(ESCAPE)) return true;
+    if (jj_3R_102()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_64() {
+    lookingAhead = true;
+    jj_semLA = check("bigint");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_170()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_406() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_418()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_82() {
+    if (jj_3R_137()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_393() {
+    if (jj_3R_102()) return true;
+    if (jj_3R_406()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_84() {
+    lookingAhead = true;
+    jj_semLA = check("all");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_188()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_58() {
+    if (jj_scan_token(OPENPAREN)) return true;
+    if (jj_3R_82()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_198() {
+    return false;
+  }
+
+  final private boolean jj_3R_380() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(89)) jj_scanpos = xsp;
+    if (jj_scan_token(LIKE)) return true;
+    if (jj_3R_393()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_236() {
+    if (jj_scan_token(INSERT)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_391() {
+    if (jj_3R_405()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_356() {
+    if (jj_scan_token(EXISTS)) return true;
+    if (jj_3R_279()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_94() {
+    lookingAhead = true;
+    jj_semLA = check("absolute");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_198()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_81() {
+    if (jj_3R_135()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_375() {
+    if (jj_3R_122()) return true;
+    if (jj_3R_84()) return true;
+    if (jj_3R_279()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_26() {
+    if (jj_scan_token(OPENPAREN)) return true;
+    if (jj_3R_60()) return true;
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_374() {
+    if (jj_3R_122()) return true;
+    if (jj_scan_token(ANY)) return true;
+    if (jj_3R_279()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_32() {
+    if (jj_3R_64()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_405() {
+    if (jj_3R_102()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_417()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  final private boolean jj_3_36() {
+    if (jj_3R_68()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_25() {
+    if (jj_3R_59()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_379() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(89)) jj_scanpos = xsp;
+    if (jj_scan_token(IN)) return true;
+    if (jj_scan_token(OPENPAREN)) return true;
+    xsp = jj_scanpos;
+    if (jj_3R_391()) {
+    jj_scanpos = xsp;
+    if (jj_3R_392()) return true;
+    }
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_417() {
+    if (jj_scan_token(COMMA)) return true;
+    if (jj_3R_102()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_407() {
+    if (jj_scan_token(COMMA)) return true;
+    if (jj_3R_60()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_39() {
+    if (jj_3R_71()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_31() {
+    if (jj_3R_63()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_124() {
+    if (jj_3R_217()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_130() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(89)) jj_scanpos = xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(24)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(70)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(82)) return true;
+    }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_377() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(89)) jj_scanpos = xsp;
+    if (jj_scan_token(BETWEEN)) return true;
+    if (jj_3R_102()) return true;
+    if (jj_scan_token(AND)) return true;
+    if (jj_3R_102()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_35() {
+    if (jj_3R_67()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_43() {
+    if (jj_scan_token(OPENPAREN)) return true;
+    if (jj_3R_60()) return true;
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_42() {
+    if (jj_scan_token(OPENPAREN)) return true;
+    if (jj_3R_60()) return true;
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_24() {
+    if (jj_3R_58()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_41() {
+    if (jj_scan_token(OPENPAREN)) return true;
+    if (jj_3R_60()) return true;
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_113() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(89)) jj_scanpos = xsp;
+    if (jj_scan_token(LIKE)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_217() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(198)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(199)) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3_112() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(89)) jj_scanpos = xsp;
+    if (jj_scan_token(IN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_111() {
+    if (jj_scan_token(IS)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(89)) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3_110() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(89)) jj_scanpos = xsp;
+    if (jj_scan_token(BETWEEN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_109() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_123()) {
+    jj_scanpos = xsp;
+    if (jj_3R_124()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_123() {
+    if (jj_3R_122()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_108() {
+    if (jj_3R_122()) return true;
+    if (jj_3R_84()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_107() {
+    if (jj_3R_122()) return true;
+    if (jj_scan_token(ANY)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_129() {
+    if (jj_3R_217()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_378() {
+    if (jj_scan_token(IS)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(89)) jj_scanpos = xsp;
+    if (jj_3R_308()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_38() {
+    if (jj_3R_70()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_30() {
+    if (jj_3R_62()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_363() {
+    if (jj_3R_380()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_362() {
+    if (jj_3R_379()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_34() {
+    if (jj_3R_66()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_28() {
+    if (jj_scan_token(OPENPAREN)) return true;
+    if (jj_3R_60()) return true;
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_56() {
+    if (jj_3R_80()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_361() {
+    if (jj_3R_378()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_51() {
+    if (jj_3R_75()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_55() {
+    if (jj_3R_79()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_360() {
+    if (jj_3R_377()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_54() {
+    if (jj_3R_78()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_359() {
+    if (jj_3R_376()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_53() {
+    if (jj_3R_77()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_43()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_358() {
+    if (jj_3R_375()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_27() {
+    if (jj_scan_token(OPENPAREN)) return true;
+    if (jj_3R_60()) return true;
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_52() {
+    if (jj_3R_76()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_42()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_357() {
+    if (jj_3R_374()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_261() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(186)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(188)) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_390() {
+    if (jj_3R_217()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_23() {
+    if (jj_3R_57()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_50() {
+    if (jj_3R_74()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_41()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_128() {
+    if (jj_3R_122()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_260() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(186)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(188)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(184)) return true;
+    }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_216() {
+    if (jj_scan_token(LESS)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_261()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3_40() {
+    if (jj_scan_token(OPENPAREN)) return true;
+    if (jj_3R_60()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_407()) jj_scanpos = xsp;
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_122() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(188)) {
+    jj_scanpos = xsp;
+    if (jj_3R_214()) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(208)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(189)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(209)) {
+    jj_scanpos = xsp;
+    if (jj_3R_215()) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(187)) {
+    jj_scanpos = xsp;
+    if (jj_3R_216()) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(210)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(185)) return true;
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_215() {
+    if (jj_scan_token(GREATER)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(188)) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_109() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(159)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(160)) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_364() {
+    if (jj_3R_122()) return true;
+    if (jj_3R_127()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_214() {
+    if (jj_scan_token(207)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_260()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3_37() {
+    if (jj_3R_69()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_33() {
+    if (jj_3R_65()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_29() {
+    if (jj_3R_61()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_49() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_37()) {
+    jj_scanpos = xsp;
+    if (jj_3_38()) {
+    jj_scanpos = xsp;
+    if (jj_3_39()) return true;
+    }
+    }
+    xsp = jj_scanpos;
+    if (jj_3_40()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_389() {
+    if (jj_3R_122()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_48() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_33()) {
+    jj_scanpos = xsp;
+    if (jj_3_34()) {
+    jj_scanpos = xsp;
+    if (jj_3_35()) {
+    jj_scanpos = xsp;
+    if (jj_3_36()) return true;
+    }
+    }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_126() {
+    if (jj_3R_102()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_47() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_29()) {
+    jj_scanpos = xsp;
+    if (jj_3_30()) {
+    jj_scanpos = xsp;
+    if (jj_3_31()) {
+    jj_scanpos = xsp;
+    if (jj_3_32()) return true;
+    }
+    }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_376() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_389()) {
+    jj_scanpos = xsp;
+    if (jj_3R_390()) return true;
+    }
+    if (jj_3R_102()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_46() {
+    if (jj_3R_73()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_28()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3_45() {
+    if (jj_3R_72()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_27()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3_117() {
+    if (jj_3R_102()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_128()) {
+    jj_scanpos = xsp;
+    if (jj_3R_129()) {
+    jj_scanpos = xsp;
+    if (jj_3R_130()) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(76)) return true;
+    }
+    }
+    }
+    return false;
+  }
+
+  final private boolean jj_3_22() {
+    if (jj_3R_56()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_44() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_22()) {
+    jj_scanpos = xsp;
+    if (jj_3_23()) {
+    jj_scanpos = xsp;
+    if (jj_3_24()) {
+    jj_scanpos = xsp;
+    if (jj_3_25()) return true;
+    }
+    }
+    }
+    xsp = jj_scanpos;
+    if (jj_3_26()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3_116() {
+    if (jj_3R_127()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_160() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_44()) {
+    jj_scanpos = xsp;
+    if (jj_3_45()) {
+    jj_scanpos = xsp;
+    if (jj_3_46()) {
+    jj_scanpos = xsp;
+    if (jj_3_47()) {
+    jj_scanpos = xsp;
+    if (jj_3_48()) {
+    jj_scanpos = xsp;
+    if (jj_3_49()) {
+    jj_scanpos = xsp;
+    if (jj_3_50()) {
+    jj_scanpos = xsp;
+    if (jj_3_51()) {
+    jj_scanpos = xsp;
+    if (jj_3_52()) {
+    jj_scanpos = xsp;
+    if (jj_3_53()) {
+    jj_scanpos = xsp;
+    if (jj_3_54()) {
+    jj_scanpos = xsp;
+    if (jj_3_55()) {
+    jj_scanpos = xsp;
+    if (jj_3_56()) return true;
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_350() {
+    if (jj_3R_127()) return true;
+    if (jj_3R_364()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_115() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_125()) {
+    jj_scanpos = xsp;
+    if (jj_3R_126()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_125() {
+    Token xsp;
+    if (jj_scan_token(191)) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(191)) { jj_scanpos = xsp; break; }
+    }
+    if (jj_scan_token(SELECT)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_114() {
+    if (jj_scan_token(EXISTS)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_347() {
+    if (jj_3R_355()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_355() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(19)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(44)) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_55() {
+    if (jj_3R_160()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_349() {
+    if (jj_3R_102()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_357()) {
+    jj_scanpos = xsp;
+    if (jj_3R_358()) {
+    jj_scanpos = xsp;
+    if (jj_3R_359()) {
+    jj_scanpos = xsp;
+    if (jj_3R_360()) {
+    jj_scanpos = xsp;
+    if (jj_3R_361()) {
+    jj_scanpos = xsp;
+    if (jj_3R_362()) {
+    jj_scanpos = xsp;
+    if (jj_3R_363()) return true;
+    }
+    }
+    }
+    }
+    }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_348() {
+    if (jj_3R_356()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_339() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_348()) {
+    jj_scanpos = xsp;
+    if (jj_3R_349()) {
+    jj_scanpos = xsp;
+    if (jj_3R_350()) return true;
+    }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_320() {
+    if (jj_3R_336()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_337()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_154() {
+    if (jj_scan_token(REMOVE)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_336() {
+    if (jj_3R_102()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_347()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_151() {
+    if (jj_3R_237()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_306() {
+    if (jj_scan_token(ORDER)) return true;
+    if (jj_scan_token(BY)) return true;
+    if (jj_3R_320()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_289() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_306()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_337() {
+    if (jj_scan_token(COMMA)) return true;
+    if (jj_3R_336()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_150() {
+    if (jj_3R_236()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_388() {
+    if (jj_scan_token(HAVING)) return true;
+    if (jj_3R_121()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_373() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_388()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_153() {
+    if (jj_3R_239()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_415() {
+    if (jj_3R_102()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_404() {
+    if (jj_3R_415()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_416()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  final private boolean jj_3_106() {
+    if (jj_3R_84()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_403() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_106()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_416() {
+    if (jj_scan_token(COMMA)) return true;
+    if (jj_3R_415()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_387() {
+    if (jj_scan_token(GROUP)) return true;
+    if (jj_scan_token(BY)) return true;
+    if (jj_3R_403()) return true;
+    if (jj_3R_404()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_322() {
+    if (jj_3R_338()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_307() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_322()) {
+    jj_scanpos = xsp;
+    if (jj_3R_323()) {
+    jj_scanpos = xsp;
+    if (jj_3R_324()) return true;
+    }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_259() {
+    if (jj_scan_token(AND)) return true;
+    if (jj_3R_258()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_372() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_387()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3_105() {
+    if (jj_scan_token(OPENPAREN)) return true;
+    if (jj_3R_121()) return true;
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_20() {
+    if (jj_scan_token(DROP)) return true;
+    if (jj_scan_token(PROCEDURE)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_149() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_20()) {
+    jj_scanpos = xsp;
+    if (jj_3_21()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_213() {
+    if (jj_scan_token(OR)) return true;
+    if (jj_3R_212()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_21() {
+    if (jj_scan_token(DROP)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(40)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(46)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(67)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(71)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(74)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(84)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(110)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(118)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(122)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(126)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(128)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(135)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(136)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(144)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(148)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(164)) return true;
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    return false;
+  }
+
+  final private boolean jj_3_19() {
+    if (jj_3R_39()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_158() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(141)) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_324() {
+    if (jj_3R_339()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_323() {
+    if (jj_scan_token(OPENPAREN)) return true;
+    if (jj_3R_121()) return true;
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_291() {
+    if (jj_3R_307()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_258() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_291()) {
+    jj_scanpos = xsp;
+    if (jj_3R_292()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_212() {
+    if (jj_3R_258()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_259()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_148() {
+    if (jj_scan_token(ALTER)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_292() {
+    if (jj_scan_token(NOT)) return true;
+    if (jj_3R_307()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_121() {
+    if (jj_3R_212()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_213()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  final private boolean jj_3_18() {
+    if (jj_3R_55()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_386() {
+    if (jj_scan_token(WHERE)) return true;
+    if (jj_3R_121()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_54() {
+    if (jj_3R_159()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_17() {
+    if (jj_3R_54()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_321() {
+    if (jj_scan_token(COMMA)) return true;
+    if (jj_3R_211()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_211() {
+    if (jj_3R_108()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_120() {
+    if (jj_3R_211()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_321()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  final private boolean jj_3_104() {
+    if (jj_scan_token(OPENPAREN)) return true;
+    if (jj_3R_120()) return true;
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_257() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_104()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_210() {
+    if (jj_scan_token(OPENPAREN)) return true;
+    if (jj_3R_152()) return true;
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    if (jj_3R_104()) return true;
+    if (jj_3R_256()) return true;
+    if (jj_3R_257()) return true;
+    if (jj_3R_255()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_253() {
+    if (jj_3R_104()) return true;
+    if (jj_3R_108()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_53() {
+    if (jj_3R_158()) return true;
+    if (jj_scan_token(INDEX)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_290() {
+    if (jj_3R_108()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_256() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_290()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3_101() {
+    if (jj_3R_118()) return true;
+    if (jj_3R_119()) return true;
+    if (jj_scan_token(ON)) return true;
+    if (jj_3R_121()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_102() {
+    if (jj_3R_119()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_100() {
+    if (jj_3R_118()) return true;
+    if (jj_3R_119()) return true;
+    if (jj_scan_token(ON)) return true;
+    if (jj_3R_121()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_209() {
+    if (jj_3R_252()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_253()) jj_scanpos = xsp;
+    if (jj_3R_254()) return true;
+    if (jj_3R_255()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_16() {
+    if (jj_scan_token(CREATE)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(40)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(67)) {
+    jj_scanpos = xsp;
+    if (jj_3R_53()) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(74)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(84)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(110)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(118)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(124)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(126)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(128)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(135)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(136)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(144)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(148)) return true;
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    return false;
+  }
+
+  final private boolean jj_3_103() {
+    if (jj_scan_token(OPENPAREN)) return true;
+    if (jj_3R_119()) return true;
+    Token xsp;
+    if (jj_3_101()) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3_101()) { jj_scanpos = xsp; break; }
+    }
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_119() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_209()) {
+    jj_scanpos = xsp;
+    if (jj_3R_210()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3_15() {
+    if (jj_scan_token(CREATE)) return true;
+    if (jj_scan_token(PROCEDURE)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_147() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_15()) {
+    jj_scanpos = xsp;
+    if (jj_3_16()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_436() {
+    if (jj_3R_119()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3_100()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_146() {
+    return false;
+  }
+
+  final private boolean jj_3R_414() {
+    if (jj_3R_424()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_425()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_385() {
+    if (jj_3R_402()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_431() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_436()) {
+    jj_scanpos = xsp;
+    if (jj_3_103()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_370() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_385()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_41() {
+    lookingAhead = true;
+    jj_semLA = !isSupportedStatementStartToken(getToken(1).kind);
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_146()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(30)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(32)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(34)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(41)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(48)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(54)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(65)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(66)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(80)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(83)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(87)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(96)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(105)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(116)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(117)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(119)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(123)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(130)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(151)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(164)) return true;
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_425() {
+    if (jj_scan_token(COMMA)) return true;
+    if (jj_3R_424()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_402() {
+    if (jj_scan_token(FROM)) return true;
+    if (jj_3R_414()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_424() {
+    if (jj_3R_431()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_99() {
+    if (jj_scan_token(WHERE)) return true;
+    if (jj_scan_token(CURRENT)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_93() {
+    if (jj_3R_114()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_98() {
+    if (jj_scan_token(WHERE)) return true;
+    if (jj_scan_token(CURRENT)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_14() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(180)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(64)) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_145() {
+    if (jj_3R_235()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_94() {
+    if (jj_3R_114()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_95() {
+    if (jj_3R_115()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_93()) jj_scanpos = xsp;
+    if (jj_scan_token(JOIN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_118() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_95()) {
+    jj_scanpos = xsp;
+    if (jj_3_96()) {
+    jj_scanpos = xsp;
+    if (jj_3_97()) return true;
+    }
+    }
+    return false;
+  }
+
+  final private boolean jj_3_10() {
+    if (jj_scan_token(REMOVE)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_316() {
+    if (jj_3R_108()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_9() {
+    if (jj_scan_token(DELETE)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_8() {
+    if (jj_scan_token(SELECT)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_7() {
+    if (jj_scan_token(UPDATE)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_411() {
+    if (jj_3R_60()) return true;
+    if (jj_3R_60()) return true;
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_6() {
+    if (jj_scan_token(INSERT)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_5() {
+    if (jj_scan_token(DROP)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_4() {
+    if (jj_scan_token(ALTER)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_12() {
+    if (jj_3R_41()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_52() {
+    if (jj_3R_157()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_51() {
+    if (jj_3R_156()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_97() {
+    if (jj_3R_117()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_3() {
+    if (jj_scan_token(CREATE)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_11() {
+    if (jj_3R_40()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_96() {
+    if (jj_3R_116()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_94()) jj_scanpos = xsp;
+    if (jj_scan_token(JOIN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_50() {
+    if (jj_3R_155()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_49() {
+    if (jj_3R_154()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_48() {
+    if (jj_3R_153()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_13() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_42()) {
+    jj_scanpos = xsp;
+    if (jj_3R_43()) {
+    jj_scanpos = xsp;
+    if (jj_3R_44()) {
+    jj_scanpos = xsp;
+    if (jj_3R_45()) {
+    jj_scanpos = xsp;
+    if (jj_3R_46()) {
+    jj_scanpos = xsp;
+    if (jj_3R_47()) {
+    jj_scanpos = xsp;
+    if (jj_3R_48()) {
+    jj_scanpos = xsp;
+    if (jj_3R_49()) {
+    jj_scanpos = xsp;
+    if (jj_3R_50()) {
+    jj_scanpos = xsp;
+    if (jj_3_11()) {
+    jj_scanpos = xsp;
+    if (jj_3R_51()) {
+    jj_scanpos = xsp;
+    if (jj_3R_52()) {
+    jj_scanpos = xsp;
+    if (jj_3_12()) return true;
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_47() {
+    if (jj_3R_152()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_46() {
+    if (jj_3R_151()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_410() {
+    if (jj_scan_token(ID)) return true;
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_45() {
+    if (jj_3R_150()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_44() {
+    if (jj_3R_149()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_39() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_13()) {
+    jj_scanpos = xsp;
+    if (jj_3R_145()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_43() {
+    if (jj_3R_148()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_89() {
+    if (jj_3R_111()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_335() {
+    if (jj_3R_60()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_42() {
+    if (jj_3R_147()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_92() {
+    if (jj_3R_113()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_117() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_92()) jj_scanpos = xsp;
+    if (jj_scan_token(JOIN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_318() {
+    if (jj_scan_token(OPENPAREN)) return true;
+    if (jj_scan_token(ID)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_410()) {
+    jj_scanpos = xsp;
+    if (jj_3R_411()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_317() {
+    if (jj_scan_token(ID)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_335()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_304() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_317()) {
+    jj_scanpos = xsp;
+    if (jj_3R_318()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_303() {
+    if (jj_scan_token(INDEX)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(156)) {
+    jj_scanpos = xsp;
+    if (jj_3R_316()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_204() {
+    if (jj_3R_111()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_2() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(180)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(64)) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_203() {
+    if (jj_scan_token(PARTITION)) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_285() {
+    if (jj_3R_303()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_251() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_285()) {
+    jj_scanpos = xsp;
+    if (jj_3R_286()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_286() {
+    if (jj_3R_304()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_202() {
+    if (jj_3R_251()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_111() {
+    Token xsp;
+    if (jj_3R_202()) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_202()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  final private boolean jj_3_90() {
+    if (jj_scan_token(INTEGER_LITERAL)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_89()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_112() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_90()) {
+    jj_scanpos = xsp;
+    if (jj_3R_203()) {
+    jj_scanpos = xsp;
+    if (jj_3R_204()) return true;
+    }
+    }
+    return false;
+  }
+
+  final private boolean jj_3_1() {
+    if (jj_3R_39()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_91() {
+    if (jj_scan_token(OPENPAREN)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_112()) jj_scanpos = xsp;
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_254() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_91()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_255() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(131)) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_106() {
+    if (jj_3R_109()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_164() {
+    return false;
+  }
+
+  final private boolean jj_3R_105() {
+    if (jj_3R_108()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_146() {
+    if (jj_scan_token(SESSION)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_59() {
+    lookingAhead = true;
+    jj_semLA = check("varchar");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_164()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_288() {
+    if (jj_3R_227()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_287() {
+    if (jj_scan_token(SESSION)) return true;
+    if (jj_scan_token(DOT)) return true;
+    if (jj_3R_227()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_252() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_145()) {
+    jj_scanpos = xsp;
+    if (jj_3R_287()) {
+    jj_scanpos = xsp;
+    if (jj_3R_288()) return true;
+    }
+    }
+    return false;
+  }
+
+  final private boolean jj_3_145() {
+    if (jj_3R_144()) return true;
+    if (jj_scan_token(DOT)) return true;
+    if (jj_3R_227()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_413() {
+    if (jj_3R_144()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_248() {
+    if (jj_3R_144()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_137() {
+    if (jj_3R_227()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_189() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_248()) jj_scanpos = xsp;
+    if (jj_scan_token(ASTERISK)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_167() {
+    return false;
+  }
+
+  final private boolean jj_3_88() {
+    if (jj_3R_88()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_86() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_88()) {
+    jj_scanpos = xsp;
+    if (jj_3R_189()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3_87() {
+    if (jj_3R_102()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_107() {
+    if (jj_scan_token(EQUAL)) return true;
+    if (jj_3R_102()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_81() {
+    if (jj_3R_104()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_105()) {
+    jj_scanpos = xsp;
+    if (jj_3R_106()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_104() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(18)) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_144() {
+    if (jj_3R_234()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_82() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_81()) {
+    jj_scanpos = xsp;
+    if (jj_3R_107()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_412() {
+    if (jj_3R_423()) return true;
+    if (jj_scan_token(EQUAL)) return true;
+    if (jj_3R_102()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_61() {
+    lookingAhead = true;
+    jj_semLA = check("tinyint");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_167()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_401() {
+    if (jj_3R_102()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_82()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_276() {
+    if (jj_3R_297()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_234() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_276()) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(154)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(155)) return true;
+    }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_437() {
+    return false;
+  }
+
+  final private boolean jj_3R_110() {
+    if (jj_3R_144()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_86() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_110()) jj_scanpos = xsp;
+    if (jj_scan_token(ASTERISK)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_85() {
+    if (jj_3R_109()) return true;
+    if (jj_scan_token(EQUAL)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_84() {
+    if (jj_3R_108()) return true;
+    if (jj_scan_token(EQUAL)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_83() {
+    if (jj_scan_token(VAR_NAME)) return true;
+    if (jj_scan_token(EQUAL)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_163() {
+    return false;
+  }
+
+  final private boolean jj_3R_143() {
+    if (jj_3R_233()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_297() {
+    if (jj_3R_227()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_329() {
+    if (jj_3R_233()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_328() {
+    if (jj_3R_233()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_327() {
+    if (jj_3R_233()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_434() {
+    lookingAhead = true;
+    jj_semLA = check("then");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_437()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_400() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_413()) jj_scanpos = xsp;
+    if (jj_scan_token(ASTERISK)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_326() {
+    if (jj_3R_233()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_399() {
+    if (jj_3R_109()) return true;
+    if (jj_scan_token(EQUAL)) return true;
+    if (jj_3R_102()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_398() {
+    if (jj_3R_108()) return true;
+    if (jj_scan_token(EQUAL)) return true;
+    if (jj_3R_102()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_397() {
+    if (jj_3R_412()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_383() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_397()) {
+    jj_scanpos = xsp;
+    if (jj_3R_398()) {
+    jj_scanpos = xsp;
+    if (jj_3R_399()) {
+    jj_scanpos = xsp;
+    if (jj_3R_400()) {
+    jj_scanpos = xsp;
+    if (jj_3R_401()) return true;
+    }
+    }
+    }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_369() {
+    if (jj_3R_383()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_384()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_58() {
+    lookingAhead = true;
+    jj_semLA = check("text");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_163()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_270() {
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_227() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(177)) {
+    jj_scanpos = xsp;
+    if (jj_3R_270()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3_142() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(45)) {
+    jj_scanpos = xsp;
+    if (jj_3R_143()) return true;
+    }
+    if (jj_3R_102()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_232() {
+    if (jj_3R_109()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_168() {
+    return false;
+  }
+
+  final private boolean jj_3R_384() {
+    if (jj_scan_token(COMMA)) return true;
+    if (jj_3R_383()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_338() {
+    if (jj_scan_token(UPDATE)) return true;
+    if (jj_scan_token(OPENPAREN)) return true;
+    if (jj_3R_108()) return true;
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_139() {
+    if (jj_scan_token(OPENPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_143() {
+    if (jj_3R_84()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_225() {
+    if (jj_3R_108()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_275() {
+    if (jj_scan_token(SUM)) return true;
+    if (jj_scan_token(OPENPAREN)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(45)) {
+    jj_scanpos = xsp;
+    if (jj_3R_329()) return true;
+    }
+    if (jj_3R_102()) return true;
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_233() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_143()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_231() {
+    if (jj_3R_108()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_62() {
+    lookingAhead = true;
+    jj_semLA = check("smallint");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_168()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_274() {
+    if (jj_scan_token(MIN)) return true;
+    if (jj_scan_token(OPENPAREN)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(45)) {
+    jj_scanpos = xsp;
+    if (jj_3R_328()) return true;
+    }
+    if (jj_3R_102()) return true;
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_135() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_225()) {
+    jj_scanpos = xsp;
+    if (jj_3R_226()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_273() {
+    if (jj_scan_token(MAX)) return true;
+    if (jj_scan_token(OPENPAREN)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(45)) {
+    jj_scanpos = xsp;
+    if (jj_3R_327()) return true;
+    }
+    if (jj_3R_102()) return true;
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_272() {
+    if (jj_scan_token(AVG)) return true;
+    if (jj_scan_token(OPENPAREN)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(45)) {
+    jj_scanpos = xsp;
+    if (jj_3R_326()) return true;
+    }
+    if (jj_3R_102()) return true;
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_271() {
+    if (jj_scan_token(COUNT)) return true;
+    if (jj_scan_token(OPENPAREN)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(193)) {
+    jj_scanpos = xsp;
+    if (jj_3_142()) return true;
+    }
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_230() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_271()) {
+    jj_scanpos = xsp;
+    if (jj_3R_272()) {
+    jj_scanpos = xsp;
+    if (jj_3R_273()) {
+    jj_scanpos = xsp;
+    if (jj_3R_274()) {
+    jj_scanpos = xsp;
+    if (jj_3R_275()) return true;
+    }
+    }
+    }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_108() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(164)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(170)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(165)) return true;
+    }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_226() {
+    if (jj_3R_109()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_141() {
+    if (jj_3R_230()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_142() {
+    if (jj_3R_104()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_231()) {
+    jj_scanpos = xsp;
+    if (jj_3R_232()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_351() {
+    if (jj_scan_token(USING)) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_284() {
+    if (jj_3R_102()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_208() {
+    return false;
+  }
+
+  final private boolean jj_3R_340() {
+    if (jj_scan_token(COMMA)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_351()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_325() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_340()) {
+    jj_scanpos = xsp;
+    if (jj_3R_341()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_157() {
+    if (jj_scan_token(PRINT)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_341() {
+    if (jj_scan_token(AS)) return true;
+    if (jj_3R_55()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_309() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_325()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_241() {
+    return false;
+  }
+
+  final private boolean jj_3R_200() {
+    if (jj_scan_token(INTEGER_LITERAL)) return true;
+    if (jj_scan_token(206)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_103() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_200()) {
+    jj_scanpos = xsp;
+    if (jj_3R_201()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_116() {
+    lookingAhead = true;
+    jj_semLA = check("right");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_208()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_141() {
+    if (jj_3R_102()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3_140()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_199() {
+    return false;
+  }
+
+  final private boolean jj_3R_136() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_141()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3_80() {
+    if (jj_3R_103()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_77() {
+    if (jj_3R_95()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_159() {
+    lookingAhead = true;
+    jj_semLA = check("result");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_241()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_140() {
+    if (jj_scan_token(COMMA)) return true;
+    if (jj_3R_102()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_101() {
+    if (jj_3R_95()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_201() {
+    if (jj_3R_250()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_95() {
+    lookingAhead = true;
+    jj_semLA = check("relative");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_199()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_139() {
+    if (jj_3R_109()) return true;
+    if (jj_scan_token(EQUAL)) return true;
+    if (jj_3R_102()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_193() {
+    if (jj_scan_token(COMMA)) return true;
+    if (jj_3R_192()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_184() {
+    return false;
+  }
+
+  final private boolean jj_3_138() {
+    if (jj_3R_102()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_142()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_88() {
+    if (jj_3R_192()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_193()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_229() {
+    if (jj_3R_252()) return true;
+    if (jj_scan_token(OPENPAREN)) return true;
+    if (jj_3R_136()) return true;
+    if (jj_3R_309()) return true;
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_192() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_137()) {
+    jj_scanpos = xsp;
+    if (jj_3_138()) {
+    jj_scanpos = xsp;
+    if (jj_3_139()) return true;
+    }
+    }
+    return false;
+  }
+
+  final private boolean jj_3_137() {
+    if (jj_3R_108()) return true;
+    if (jj_scan_token(EQUAL)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_284()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3_134() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(181)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(200)) return true;
+    }
+    if (jj_3R_135()) return true;
+    xsp = jj_scanpos;
+    if (jj_3R_139()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_195() {
+    return false;
+  }
+
+  final private boolean jj_3_76() {
+    if (jj_3R_94()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_78() {
+    lookingAhead = true;
+    jj_semLA = check("real");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_184()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_100() {
+    if (jj_3R_94()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_206() {
+    return false;
+  }
+
+  final private boolean jj_3R_140() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(144)) {
+    jj_scanpos = xsp;
+    if (jj_3R_229()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_91() {
+    lookingAhead = true;
+    jj_semLA = check("prior");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_195()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_240() {
+    if (jj_scan_token(IF)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_75() {
+    if (jj_3R_93()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_135() {
+    if (jj_3R_140()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_133() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_135()) {
+    jj_scanpos = xsp;
+    if (jj_3_136()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_114() {
+    lookingAhead = true;
+    jj_semLA = check("outer");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_206()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_99() {
+    if (jj_3R_93()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_334() {
+    if (jj_scan_token(QUESTIONMARK)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_136() {
+    if (jj_3R_141()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_79() {
+    if (jj_3R_102()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_156() {
+    if (jj_3R_240()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_74() {
+    if (jj_3R_92()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_40() {
+    if (jj_scan_token(EXECUTE)) return true;
+    if (jj_scan_token(PROCEDURE)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_179() {
+    return false;
+  }
+
+  final private boolean jj_3R_98() {
+    if (jj_3R_92()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_155() {
+    if (jj_scan_token(RETURN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_423() {
+    if (jj_scan_token(VAR_NAME)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_175() {
+    return false;
+  }
+
+  final private boolean jj_3_73() {
+    if (jj_3R_91()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_73() {
+    lookingAhead = true;
+    jj_semLA = check("nvarchar");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_179()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_308() {
+    if (jj_scan_token(NULL)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_302() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(167)) {
+    jj_scanpos = xsp;
+    if (jj_3R_315()) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(169)) return true;
+    }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_97() {
+    if (jj_3R_91()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_69() {
+    lookingAhead = true;
+    jj_semLA = check("numeric");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_175()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_315() {
+    if (jj_3R_334()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_133() {
+    if (jj_3R_138()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_72() {
+    if (jj_3R_90()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_78() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_96()) {
+    jj_scanpos = xsp;
+    if (jj_3R_97()) {
+    jj_scanpos = xsp;
+    if (jj_3R_98()) {
+    jj_scanpos = xsp;
+    if (jj_3R_99()) {
+    jj_scanpos = xsp;
+    if (jj_3R_100()) {
+    jj_scanpos = xsp;
+    if (jj_3R_101()) return true;
+    }
+    }
+    }
+    }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_96() {
+    if (jj_3R_90()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_269() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(161)) {
+    jj_scanpos = xsp;
+    if (jj_3R_294()) {
+    jj_scanpos = xsp;
+    if (jj_3R_295()) {
+    jj_scanpos = xsp;
+    if (jj_3R_296()) return true;
+    }
+    }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_277() {
+    if (jj_scan_token(DECLARE)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_194() {
+    return false;
+  }
+
+  final private boolean jj_3R_296() {
+    if (jj_3R_302()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_295() {
+    if (jj_3R_308()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_178() {
+    return false;
+  }
+
+  final private boolean jj_3R_294() {
+    if (jj_3R_109()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_268() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(156)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(157)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(163)) return true;
+    }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_90() {
+    lookingAhead = true;
+    jj_semLA = check("next");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_194()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_71() {
+    if (jj_3R_39()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_89() {
+    Token xsp;
+    if (jj_3_71()) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3_71()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_221() {
+    if (jj_3R_268()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_70() {
+    if (jj_3R_89()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_132() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_221()) {
+    jj_scanpos = xsp;
+    if (jj_3R_222()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_72() {
+    lookingAhead = true;
+    jj_semLA = check("nchar");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_178()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_186() {
+    return false;
+  }
+
+  final private boolean jj_3R_235() {
+    if (jj_3R_277()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_433() {
+    if (jj_3R_355()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_222() {
+    if (jj_3R_269()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_80() {
+    lookingAhead = true;
+    jj_semLA = check("money");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_186()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_207() {
+    return false;
+  }
+
+  final private boolean jj_3R_197() {
+    return false;
+  }
+
+  final private boolean jj_3R_166() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(195)) jj_scanpos = xsp;
+    if (jj_scan_token(INTEGER_LITERAL)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_165() {
+    if (jj_scan_token(MINUS)) return true;
+    if (jj_scan_token(INTEGER_LITERAL)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_115() {
+    lookingAhead = true;
+    jj_semLA = check("left");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_207()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_174() {
+    return false;
+  }
+
+  final private boolean jj_3R_60() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_165()) {
+    jj_scanpos = xsp;
+    if (jj_3R_166()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_426() {
+    if (jj_3R_102()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_433()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_427() {
+    if (jj_scan_token(COMMA)) return true;
+    if (jj_3R_426()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_93() {
+    lookingAhead = true;
+    jj_semLA = check("last");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_197()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_173() {
+    return false;
+  }
+
+  final private boolean jj_3R_420() {
+    if (jj_3R_426()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_427()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_409() {
+    if (jj_scan_token(ORDER)) return true;
+    if (jj_scan_token(BY)) return true;
+    if (jj_3R_420()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_68() {
+    lookingAhead = true;
+    jj_semLA = check("integer8");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_174()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_281() {
+    if (jj_3R_144()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_172() {
+    return false;
+  }
+
+  final private boolean jj_3R_396() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_409()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_249() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_281()) jj_scanpos = xsp;
+    if (jj_scan_token(ASTERISK)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_67() {
+    lookingAhead = true;
+    jj_semLA = check("integer4");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_173()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_171() {
+    return false;
+  }
+
+  final private boolean jj_3R_343() {
+    if (jj_scan_token(NULLIF)) return true;
+    if (jj_scan_token(OPENPAREN)) return true;
+    if (jj_3R_102()) return true;
+    if (jj_scan_token(COMMA)) return true;
+    if (jj_3R_102()) return true;
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_191() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_69()) {
+    jj_scanpos = xsp;
+    if (jj_3R_249()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3_69() {
+    if (jj_3R_88()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_132() {
+    if (jj_3R_108()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_66() {
+    lookingAhead = true;
+    jj_semLA = check("integer2");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_172()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_169() {
+    return false;
+  }
+
+  final private boolean jj_3_131() {
+    if (jj_3R_137()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_365() {
+    if (jj_3R_102()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_282() {
+    if (jj_3R_108()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_67() {
+    if (jj_3R_84()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_68() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_67()) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(45)) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_250() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_282()) {
+    jj_scanpos = xsp;
+    if (jj_3R_283()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_190() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_68()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3R_283() {
+    if (jj_3R_302()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_65() {
+    lookingAhead = true;
+    jj_semLA = check("integer1");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_171()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_432() {
+    if (jj_3R_386()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_352() {
+    if (jj_3R_365()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_421()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_224() {
+    if (jj_3R_108()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_130() {
+    if (jj_scan_token(OPENPAREN)) return true;
+    if (jj_3R_136()) return true;
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_223() {
+    if (jj_3R_137()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_87() {
+    if (jj_scan_token(SELECT)) return true;
+    if (jj_3R_190()) return true;
+    if (jj_3R_191()) return true;
+    if (jj_3R_370()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_432()) jj_scanpos = xsp;
+    if (jj_3R_372()) return true;
+    if (jj_3R_373()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_134() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_223()) {
+    jj_scanpos = xsp;
+    if (jj_3R_224()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_63() {
+    lookingAhead = true;
+    jj_semLA = check("integer");
+    lookingAhead = false;
+    if (!jj_semLA || jj_3R_169()) return true;
+    if (jj_scan_token(ID)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_344() {
+    if (jj_scan_token(COALESCE)) return true;
+    if (jj_scan_token(OPENPAREN)) return true;
+    if (jj_3R_352()) return true;
+    if (jj_scan_token(CLOSEPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_205() {
+    return false;
+  }
+
+  final private boolean jj_3_144() {
+    if (jj_scan_token(0)) return true;
+    return false;
+  }
+
+  public IngresSQLParserTokenManager token_source;
+  SimpleCharStream jj_input_stream;
+  public Token token, jj_nt;
+  private int jj_ntk;
+  private Token jj_scanpos, jj_lastpos;
+  private int jj_la;
+  public boolean lookingAhead = false;
+  private boolean jj_semLA;
+  private int jj_gen;
+  final private int[] jj_la1 = new int[174];
+  static private int[] jj_la1_0;
+  static private int[] jj_la1_1;
+  static private int[] jj_la1_2;
+  static private int[] jj_la1_3;
+  static private int[] jj_la1_4;
+  static private int[] jj_la1_5;
+  static private int[] jj_la1_6;
+  static {
+      jj_la1_0();
+      jj_la1_1();
+      jj_la1_2();
+      jj_la1_3();
+      jj_la1_4();
+      jj_la1_5();
+      jj_la1_6();
+   }
+   private static void jj_la1_0() {
+      jj_la1_0 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x40000000,0x0,0x0,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x88400000,0x0,0x88400000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10000,0x88400000,0x0,0x88400000,0x0,0x0,0x0,0x0,0x0,0x80000,0x80000,0x0,0x1000000,0x1000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x88400000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x88000000,0x0,0x88000000,0x80000000,0x88400000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x88400000,0x0,0x40000,0x0,0x40000,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x400000,0x0,0x0,0x0,};
+   }
+   private static void jj_la1_1() {
+      jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x200,0x410205,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x400,0x0,0x0,0x400,0x200,0x0,0x0,0x4100,0x100,0x0,0x0,0x0,0x408,0x0,0x408,0x0,0x0,0x0,0x0,0x0,0x2000,0x0,0x0,0x2000,0x0,0x0,0x2000,0x0,0x0,0x0,0x0,0x1000,0x0,0x0,0x0,0x0,0x0,0x0,0x20000000,0x20000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000000,0x20000000,0x0,0x0,0x20000000,0x0,0x0,0x0,0x0,0x0,0x1000008,0x0,0x1000008,0x0,0x0,0x0,0x0,0x0,0x1000,0x1000,0x0,0x0,0x0,0x0,0x1000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x80000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x20000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10000000,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x2000,0x0,0x2000,0x2000,0x2000,0x2000,0x8,0x0,0x0,0x0,};
+   }
+   private static void jj_la1_2() {
+      jj_la1_2 = new int[] {0x0,0x1,0x1,0x0,0x20,0x0,0x890006,0x100488,0x0,0x0,0x0,0x0,0x2000000,0x2000000,0x4000000,0x2000000,0x2000000,0x4000000,0x0,0x0,0x100008,0x100488,0x0,0x0,0x0,0x0,0xc600000,0x0,0xc600000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10000000,0x0,0x0,0x0,0x800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x40,0x0,0x0,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe600000,0x0,0xc600000,0x8,0x0,0x10,0x0,0x0,0x0,0x0,0x2000000,0x40040,0x2041040,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2000000,0x2000000,0x2000000,0xc600000,0x0,0x2000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8000000,0x0,0x8000000,0x8000000,0xc600000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4000000,0x0,0x4000000,0x0,0x0,0x4000000,0x0,0x0,0x0,0x0,0x0,0x0,0xc600000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x600000,0x0,0x0,0x0,};
+   }
+   private static void jj_la1_3() {
+      jj_la1_3 = new int[] {0x0,0x0,0x0,0x100000,0x1000,0x0,0x8b00201,0x50404000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20404000,0x44404000,0x0,0x0,0x0,0x80000000,0x0,0x0,0x0,0x0,0x0,0x0,0x80000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30,0x30,0x30,0x0,0x40,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x400,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+   }
+   private static void jj_la1_4() {
+      jj_la1_4 = new int[] {0x80000000,0x0,0x0,0x0,0x0,0x0,0x800004,0x112181,0x0,0x0,0x0,0x0,0x1000000,0x1000000,0x0,0x1000000,0x1000000,0x0,0x0,0x2000,0x10101,0x110181,0x100,0x0,0x0,0x40000,0xbc010042,0x0,0xbc010042,0x0,0x0,0x1000,0x0,0x400000,0x0,0x400000,0x400000,0x0,0x1000,0x400000,0x0,0xc000000,0xc000000,0x0,0x0,0x0,0x0,0x0,0x10000000,0x10000000,0x0,0x0,0x0,0x0,0x2000800,0x2000800,0x10000000,0x0,0x80000000,0x80000000,0x0,0x0,0xc000000,0x80000000,0x0,0x0,0xc000000,0xc000000,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x10000000,0x0,0x0,0x10000000,0x10000000,0x10000000,0x0,0x400000,0x400000,0x400000,0x400000,0x400000,0x0,0x0,0xc000002,0x0,0x0,0x0,0xbc018042,0x8000,0xbc010042,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xbc010042,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xbc210042,0x200000,0x200000,0x0,0x0,0x0,0x80000000,0x0,0x10000000,0x0,0x10000000,0xb0000000,0x30000000,0x80000000,0x0,0x0,0xb0000000,0x0,0x0,0x0,0x0,0xc010002,0x0,0xbc010042,0x80000000,0x80000000,0x20000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0xc000000,0x0,};
+   }
+   private static void jj_la1_5() {
+      jj_la1_5 = new int[] {0x1,0x100000,0x100000,0x0,0x0,0x0,0x10,0x0,0x80000000,0x10000000,0x80000,0x10000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x0,0x80000,0x80000,0x80000000,0x808206bb,0x80000,0x808206bb,0x80000,0x80,0x0,0x80000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20010,0x20010,0x0,0x80000,0x0,0x0,0x80000,0x80,0x80,0x0,0x80000,0x0,0x0,0x0,0x0,0x6b0,0x80000,0x281,0x431,0x430,0x80000,0x20010,0x431,0x10000000,0x0,0x20010,0x20010,0x80000,0x10000000,0x0,0x0,0x0,0x0,0x80000010,0x80000010,0x80000010,0x80000010,0x430,0x0,0x10,0x80000010,0x0,0x0,0x0,0x0,0x0,0x0,0x80000,0x80020010,0x80000,0x0,0x0,0x808206bb,0x0,0x808206bb,0x0,0x80000,0x0,0x0,0x80000,0x0,0x0,0x0,0x0,0x3f000000,0x3f000000,0x0,0x80000000,0x3f000000,0x15000000,0x15000000,0x10000000,0x14000000,0x14000000,0x3f000000,0x0,0x0,0x0,0x0,0x808206bb,0x80000,0x0,0x0,0x80000,0x0,0x0,0x800000,0x0,0x0,0x80000000,0x200000,0x0,0x0,0x808206bb,0x0,0x0,0x0,0x80000,0x6b0,0x281,0x6b1,0x280,0x0,0x0,0x28b,0x8,0x283,0x0,0x0,0x6bb,0x280,0x280,0x200000,0x80000000,0x20010,0x80000,0x808206bb,0x431,0x431,0x0,0x80000,0x80000,0x80000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20010,0x20010,0x20010,};
+   }
+   private static void jj_la1_6() {
+      jj_la1_6 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x38,0x0,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x18,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x18,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x38,0x0,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x780c0,0x780c0,0x0,0x0,0x780c0,0x0,0x0,0x0,0x0,0x0,0x78000,0xc0,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0x0,0x400006,0x400006,0x0,0x18,0x18,0x0,0x100,0x0,0x0,0x38,0x0,0x0,0x0,0x0,0x20,0x20,0x20,0x20,0x8,0x18,0x20,0x0,0x20,0x18,0x18,0x38,0x20,0x20,0x100,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+   }
+  final private JJCalls[] jj_2_rtns = new JJCalls[146];
+  private boolean jj_rescan = false;
+  private int jj_gc = 0;
+
+  public IngresSQLParser(java.io.InputStream stream) {
+     this(stream, null);
+  }
+  public IngresSQLParser(java.io.InputStream stream, String encoding) {
+    try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
+    token_source = new IngresSQLParserTokenManager(jj_input_stream);
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 174; i++) jj_la1[i] = -1;
+    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
+  }
+
+  public void ReInit(java.io.InputStream stream) {
+     ReInit(stream, null);
+  }
+  public void ReInit(java.io.InputStream stream, String encoding) {
+    try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
+    token_source.ReInit(jj_input_stream);
+    token = new Token();
+    jj_ntk = -1;
+    jjtree.reset();
+    jj_gen = 0;
+    for (int i = 0; i < 174; i++) jj_la1[i] = -1;
+    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
+  }
+
+  public IngresSQLParser(java.io.Reader stream) {
+    jj_input_stream = new SimpleCharStream(stream, 1, 1);
+    token_source = new IngresSQLParserTokenManager(jj_input_stream);
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 174; i++) jj_la1[i] = -1;
+    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
+  }
+
+  public void ReInit(java.io.Reader stream) {
+    jj_input_stream.ReInit(stream, 1, 1);
+    token_source.ReInit(jj_input_stream);
+    token = new Token();
+    jj_ntk = -1;
+    jjtree.reset();
+    jj_gen = 0;
+    for (int i = 0; i < 174; i++) jj_la1[i] = -1;
+    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
+  }
+
+  public IngresSQLParser(IngresSQLParserTokenManager tm) {
+    token_source = tm;
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 174; i++) jj_la1[i] = -1;
+    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
+  }
+
+  public void ReInit(IngresSQLParserTokenManager tm) {
+    token_source = tm;
+    token = new Token();
+    jj_ntk = -1;
+    jjtree.reset();
+    jj_gen = 0;
+    for (int i = 0; i < 174; i++) jj_la1[i] = -1;
+    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
+  }
+
+  final private Token jj_consume_token(int kind) throws ParseException {
+    Token oldToken;
+    if ((oldToken = token).next != null) token = token.next;
+    else token = token.next = token_source.getNextToken();
+    jj_ntk = -1;
+    if (token.kind == kind) {
+      jj_gen++;
+      if (++jj_gc > 100) {
+        jj_gc = 0;
+        for (int i = 0; i < jj_2_rtns.length; i++) {
+          JJCalls c = jj_2_rtns[i];
+          while (c != null) {
+            if (c.gen < jj_gen) c.first = null;
+            c = c.next;
+          }
+        }
+      }
+      return token;
+    }
+    token = oldToken;
+    jj_kind = kind;
+    throw generateParseException();
+  }
+
+  static private final class LookaheadSuccess extends java.lang.Error { }
+  final private LookaheadSuccess jj_ls = new LookaheadSuccess();
+  final private boolean jj_scan_token(int kind) {
+    if (jj_scanpos == jj_lastpos) {
+      jj_la--;
+      if (jj_scanpos.next == null) {
+        jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
+      } else {
+        jj_lastpos = jj_scanpos = jj_scanpos.next;
+      }
+    } else {
+      jj_scanpos = jj_scanpos.next;
+    }
+    if (jj_rescan) {
+      int i = 0; Token tok = token;
+      while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
+      if (tok != null) jj_add_error_token(kind, i);
+    }
+    if (jj_scanpos.kind != kind) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls;
+    return false;
+  }
+
+  final public Token getNextToken() {
+    if (token.next != null) token = token.next;
+    else token = token.next = token_source.getNextToken();
+    jj_ntk = -1;
+    jj_gen++;
+    return token;
+  }
+
+  final public Token getToken(int index) {
+    Token t = lookingAhead ? jj_scanpos : token;
+    for (int i = 0; i < index; i++) {
+      if (t.next != null) t = t.next;
+      else t = t.next = token_source.getNextToken();
+    }
+    return t;
+  }
+
+  final private int jj_ntk() {
+    if ((jj_nt=token.next) == null)
+      return (jj_ntk = (token.next=token_source.getNextToken()).kind);
+    else
+      return (jj_ntk = jj_nt.kind);
+  }
+
+  private java.util.Vector jj_expentries = new java.util.Vector();
+  private int[] jj_expentry;
+  private int jj_kind = -1;
+  private int[] jj_lasttokens = new int[100];
+  private int jj_endpos;
+
+  private void jj_add_error_token(int kind, int pos) {
+    if (pos >= 100) return;
+    if (pos == jj_endpos + 1) {
+      jj_lasttokens[jj_endpos++] = kind;
+    } else if (jj_endpos != 0) {
+      jj_expentry = new int[jj_endpos];
+      for (int i = 0; i < jj_endpos; i++) {
+        jj_expentry[i] = jj_lasttokens[i];
+      }
+      boolean exists = false;
+      for (java.util.Enumeration e = jj_expentries.elements(); e.hasMoreElements();) {
+        int[] oldentry = (int[])(e.nextElement());
+        if (oldentry.length == jj_expentry.length) {
+          exists = true;
+          for (int i = 0; i < jj_expentry.length; i++) {
+            if (oldentry[i] != jj_expentry[i]) {
+              exists = false;
+              break;
+            }
+          }
+          if (exists) break;
+        }
+      }
+      if (!exists) jj_expentries.addElement(jj_expentry);
+      if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
+    }
+  }
+
+  public ParseException generateParseException() {
+    jj_expentries.removeAllElements();
+    boolean[] la1tokens = new boolean[215];
+    if (jj_kind >= 0) {
+      la1tokens[jj_kind] = true;
+      jj_kind = -1;
+    }
+    for (int i = 0; i < 174; i++) {
+      if (jj_la1[i] == jj_gen) {
+        for (int j = 0; j < 32; j++) {
+          if ((jj_la1_0[i] & (1<<j)) != 0) {
+            la1tokens[j] = true;
+          }
+          if ((jj_la1_1[i] & (1<<j)) != 0) {
+            la1tokens[32+j] = true;
+          }
+          if ((jj_la1_2[i] & (1<<j)) != 0) {
+            la1tokens[64+j] = true;
+          }
+          if ((jj_la1_3[i] & (1<<j)) != 0) {
+            la1tokens[96+j] = true;
+          }
+          if ((jj_la1_4[i] & (1<<j)) != 0) {
+            la1tokens[128+j] = true;
+          }
+          if ((jj_la1_5[i] & (1<<j)) != 0) {
+            la1tokens[160+j] = true;
+          }
+          if ((jj_la1_6[i] & (1<<j)) != 0) {
+            la1tokens[192+j] = true;
+          }
+        }
+      }
+    }
+    for (int i = 0; i < 215; i++) {
+      if (la1tokens[i]) {
+        jj_expentry = new int[1];
+        jj_expentry[0] = i;
+        jj_expentries.addElement(jj_expentry);
+      }
+    }
+    jj_endpos = 0;
+    jj_rescan_token();
+    jj_add_error_token(0, 0);
+    int[][] exptokseq = new int[jj_expentries.size()][];
+    for (int i = 0; i < jj_expentries.size(); i++) {
+      exptokseq[i] = (int[])jj_expentries.elementAt(i);
+    }
+    return new ParseException(token, exptokseq, tokenImage);
+  }
+
+  final public void enable_tracing() {
+  }
+
+  final public void disable_tracing() {
+  }
+
+  final private void jj_rescan_token() {
+    jj_rescan = true;
+    for (int i = 0; i < 146; i++) {
+    try {
+      JJCalls p = jj_2_rtns[i];
+      do {
+        if (p.gen > jj_gen) {
+          jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
+          switch (i) {
+            case 0: jj_3_1(); break;
+            case 1: jj_3_2(); break;
+            case 2: jj_3_3(); break;
+            case 3: jj_3_4(); break;
+            case 4: jj_3_5(); break;
+            case 5: jj_3_6(); break;
+            case 6: jj_3_7(); break;
+            case 7: jj_3_8(); break;
+            case 8: jj_3_9(); break;
+            case 9: jj_3_10(); break;
+            case 10: jj_3_11(); break;
+            case 11: jj_3_12(); break;
+            case 12: jj_3_13(); break;
+            case 13: jj_3_14(); break;
+            case 14: jj_3_15(); break;
+            case 15: jj_3_16(); break;
+            case 16: jj_3_17(); break;
+            case 17: jj_3_18(); break;
+            case 18: jj_3_19(); break;
+            case 19: jj_3_20(); break;
+            case 20: jj_3_21(); break;
+            case 21: jj_3_22(); break;
+            case 22: jj_3_23(); break;
+            case 23: jj_3_24(); break;
+            case 24: jj_3_25(); break;
+            case 25: jj_3_26(); break;
+            case 26: jj_3_27(); break;
+            case 27: jj_3_28(); break;
+            case 28: jj_3_29(); break;
+            case 29: jj_3_30(); break;
+            case 30: jj_3_31(); break;
+            case 31: jj_3_32(); break;
+            case 32: jj_3_33(); break;
+            case 33: jj_3_34(); break;
+            case 34: jj_3_35(); break;
+            case 35: jj_3_36(); break;
+            case 36: jj_3_37(); break;
+            case 37: jj_3_38(); break;
+            case 38: jj_3_39(); break;
+            case 39: jj_3_40(); break;
+            case 40: jj_3_41(); break;
+            case 41: jj_3_42(); break;
+            case 42: jj_3_43(); break;
+            case 43: jj_3_44(); break;
+            case 44: jj_3_45(); break;
+            case 45: jj_3_46(); break;
+            case 46: jj_3_47(); break;
+            case 47: jj_3_48(); break;
+            case 48: jj_3_49(); break;
+            case 49: jj_3_50(); break;
+            case 50: jj_3_51(); break;
+            case 51: jj_3_52(); break;
+            case 52: jj_3_53(); break;
+            case 53: jj_3_54(); break;
+            case 54: jj_3_55(); break;
+            case 55: jj_3_56(); break;
+            case 56: jj_3_57(); break;
+            case 57: jj_3_58(); break;
+            case 58: jj_3_59(); break;
+            case 59: jj_3_60(); break;
+            case 60: jj_3_61(); break;
+            case 61: jj_3_62(); break;
+            case 62: jj_3_63(); break;
+            case 63: jj_3_64(); break;
+            case 64: jj_3_65(); break;
+            case 65: jj_3_66(); break;
+            case 66: jj_3_67(); break;
+            case 67: jj_3_68(); break;
+            case 68: jj_3_69(); break;
+            case 69: jj_3_70(); break;
+            case 70: jj_3_71(); break;
+            case 71: jj_3_72(); break;
+            case 72: jj_3_73(); break;
+            case 73: jj_3_74(); break;
+            case 74: jj_3_75(); break;
+            case 75: jj_3_76(); break;
+            case 76: jj_3_77(); break;
+            case 77: jj_3_78(); break;
+            case 78: jj_3_79(); break;
+            case 79: jj_3_80(); break;
+            case 80: jj_3_81(); break;
+            case 81: jj_3_82(); break;
+            case 82: jj_3_83(); break;
+            case 83: jj_3_84(); break;
+            case 84: jj_3_85(); break;
+            case 85: jj_3_86(); break;
+            case 86: jj_3_87(); break;
+            case 87: jj_3_88(); break;
+            case 88: jj_3_89(); break;
+            case 89: jj_3_90(); break;
+            case 90: jj_3_91(); break;
+            case 91: jj_3_92(); break;
+            case 92: jj_3_93(); break;
+            case 93: jj_3_94(); break;
+            case 94: jj_3_95(); break;
+            case 95: jj_3_96(); break;
+            case 96: jj_3_97(); break;
+            case 97: jj_3_98(); break;
+            case 98: jj_3_99(); break;
+            case 99: jj_3_100(); break;
+            case 100: jj_3_101(); break;
+            case 101: jj_3_102(); break;
+            case 102: jj_3_103(); break;
+            case 103: jj_3_104(); break;
+            case 104: jj_3_105(); break;
+            case 105: jj_3_106(); break;
+            case 106: jj_3_107(); break;
+            case 107: jj_3_108(); break;
+            case 108: jj_3_109(); break;
+            case 109: jj_3_110(); break;
+            case 110: jj_3_111(); break;
+            case 111: jj_3_112(); break;
+            case 112: jj_3_113(); break;
+            case 113: jj_3_114(); break;
+            case 114: jj_3_115(); break;
+            case 115: jj_3_116(); break;
+            case 116: jj_3_117(); break;
+            case 117: jj_3_118(); break;
+            case 118: jj_3_119(); break;
+            case 119: jj_3_120(); break;
+            case 120: jj_3_121(); break;
+            case 121: jj_3_122(); break;
+            case 122: jj_3_123(); break;
+            case 123: jj_3_124(); break;
+            case 124: jj_3_125(); break;
+            case 125: jj_3_126(); break;
+            case 126: jj_3_127(); break;
+            case 127: jj_3_128(); break;
+            case 128: jj_3_129(); break;
+            case 129: jj_3_130(); break;
+            case 130: jj_3_131(); break;
+            case 131: jj_3_132(); break;
+            case 132: jj_3_133(); break;
+            case 133: jj_3_134(); break;
+            case 134: jj_3_135(); break;
+            case 135: jj_3_136(); break;
+            case 136: jj_3_137(); break;
+            case 137: jj_3_138(); break;
+            case 138: jj_3_139(); break;
+            case 139: jj_3_140(); break;
+            case 140: jj_3_141(); break;
+            case 141: jj_3_142(); break;
+            case 142: jj_3_143(); break;
+            case 143: jj_3_144(); break;
+            case 144: jj_3_145(); break;
+            case 145: jj_3_146(); break;
+          }
+        }
+        p = p.next;
+      } while (p != null);
+      } catch(LookaheadSuccess ls) { }
+    }
+    jj_rescan = false;
+  }
+
+  final private void jj_save(int index, int xla) {
+    JJCalls p = jj_2_rtns[index];
+    while (p.gen > jj_gen) {
+      if (p.next == null) { p = p.next = new JJCalls(); break; }
+      p = p.next;
+    }
+    p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;
+  }
+
+  static final class JJCalls {
+    int gen;
+    Token first;
+    int arg;
+    JJCalls next;
+  }
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/IngresSQLParserConstants.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/IngresSQLParserConstants.java
new file mode 100644
index 0000000..8c38764
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/IngresSQLParserConstants.java
@@ -0,0 +1,425 @@
+/* Generated By:JJTree&JavaCC: Do not edit this line. IngresSQLParserConstants.java */
+package org.eclipse.datatools.enablement.ingres.internal.ui.parser;
+
+public interface IngresSQLParserConstants {
+
+  int EOF = 0;
+  int SINGLE_LINE_COMMENT = 7;
+  int COMMENT_CONTENT = 12;
+  int INVALID_TOKEN = 13;
+  int ADD = 14;
+  int ALTER = 15;
+  int AND = 16;
+  int ANY = 17;
+  int AS = 18;
+  int ASC = 19;
+  int AT = 20;
+  int AUTHORIZATION = 21;
+  int AVG = 22;
+  int BEGIN = 23;
+  int BETWEEN = 24;
+  int BY = 25;
+  int CASCADE = 26;
+  int CASE = 27;
+  int CHECK = 28;
+  int CHECKPOINT = 29;
+  int CLOSE = 30;
+  int COALESCE = 31;
+  int COMMIT = 32;
+  int CONSTRAINT = 33;
+  int CONTINUE = 34;
+  int COUNT = 35;
+  int CREATE = 36;
+  int CURRENT = 37;
+  int CURSOR = 38;
+  int DATABASE = 39;
+  int DBEVENT = 40;
+  int DECLARE = 41;
+  int DEFAULT_VAL = 42;
+  int DELETE = 43;
+  int DESC = 44;
+  int DISTINCT = 45;
+  int DOMAIN = 46;
+  int DROP = 47;
+  int DUMP = 48;
+  int ELSE = 49;
+  int END = 50;
+  int ESCAPE = 51;
+  int EXCEPT = 52;
+  int EXCLUSIVE = 53;
+  int EXEC = 54;
+  int EXECUTE = 55;
+  int EXISTS = 56;
+  int FETCH = 57;
+  int FILLFACTOR = 58;
+  int FOR = 59;
+  int FOREIGN = 60;
+  int FROM = 61;
+  int FUNC = 62;
+  int FUNCTION = 63;
+  int GO = 64;
+  int GOTO = 65;
+  int GRANT = 66;
+  int GROUP = 67;
+  int HAVING = 68;
+  int IF = 69;
+  int IN = 70;
+  int INDEX = 71;
+  int INSERT = 72;
+  int INTERSECT = 73;
+  int INTEGRITY = 74;
+  int INTO = 75;
+  int IS = 76;
+  int ISOLATION = 77;
+  int JOIN = 78;
+  int KEY = 79;
+  int KILL = 80;
+  int LEVEL = 81;
+  int LIKE = 82;
+  int LOAD = 83;
+  int LOCATION = 84;
+  int MAX = 85;
+  int MIN = 86;
+  int MODIFY = 87;
+  int NO = 88;
+  int NOT = 89;
+  int NULL = 90;
+  int NULLIF = 91;
+  int OF = 92;
+  int OFF = 93;
+  int ON = 94;
+  int ONLY = 95;
+  int OPEN = 96;
+  int OPTION = 97;
+  int OR = 98;
+  int ORDER = 99;
+  int OUT = 100;
+  int OUTPUT = 101;
+  int PARTITION = 102;
+  int PERM = 103;
+  int PERMANENT = 104;
+  int PREPARE = 105;
+  int PRIMARY = 106;
+  int PRIVILEGES = 107;
+  int PRINT = 108;
+  int PROCEDURE = 109;
+  int PROFILE = 110;
+  int PUBLIC = 111;
+  int READ = 112;
+  int REFERENCES = 113;
+  int REMOVE = 114;
+  int REORGANIZE = 115;
+  int RETURN = 116;
+  int REVOKE = 117;
+  int ROLE = 118;
+  int ROLLBACK = 119;
+  int ROWCOUNT = 120;
+  int ROWS = 121;
+  int RULE = 122;
+  int SAVE = 123;
+  int SCHEMA = 124;
+  int SECURITY_AUDIT = 125;
+  int SECURITY_ALARM = 126;
+  int SELECT = 127;
+  int SEQUENCE = 128;
+  int SESSION = 129;
+  int SET = 130;
+  int SHARED = 131;
+  int SOME = 132;
+  int STATISTICS = 133;
+  int SUM = 134;
+  int SYNONYM = 135;
+  int TABLE = 136;
+  int TEMPORARY = 137;
+  int TO = 138;
+  int TRANSACTION = 139;
+  int UNION = 140;
+  int UNIQUE = 141;
+  int UNPARTITION = 142;
+  int UPDATE = 143;
+  int USER = 144;
+  int USING = 145;
+  int VALUES = 146;
+  int VARYING = 147;
+  int VIEW = 148;
+  int WHEN = 149;
+  int WHERE = 150;
+  int WHILE = 151;
+  int WITH = 152;
+  int WORK = 153;
+  int II_DBA = 154;
+  int II_INGRES = 155;
+  int INTEGER_LITERAL = 156;
+  int FLOATING_POINT_LITERAL = 157;
+  int EXPONENT = 158;
+  int SINGLE_STRING_LITERAL = 159;
+  int DOUBLE_STRING_LITERAL = 160;
+  int BINARY_LITERAL = 161;
+  int HEXDIGIT = 162;
+  int MONEY_LITERAL = 163;
+  int ID = 164;
+  int SQUARE_BRACKET_ID = 165;
+  int VAR_NAME_BODY = 166;
+  int VAR_NAME = 167;
+  int LABEL = 168;
+  int GLOBAL_VAR_NAME = 169;
+  int TEMP_TABLE_NAME = 170;
+  int LETTER = 171;
+  int DIGIT = 172;
+  int SYMBOL = 173;
+  int SPECSYMB = 174;
+  int DELIM_START = 175;
+  int DELIM_PART = 176;
+  int DELIM_IDENT = 177;
+  int CONCAT = 178;
+  int COMMA = 179;
+  int SEMICOLON = 180;
+  int DOT = 181;
+  int ROWTYPE = 182;
+  int TILDE = 183;
+  int LESS = 184;
+  int LESSEQUAL = 185;
+  int GREATER = 186;
+  int GREATEREQUAL = 187;
+  int EQUAL = 188;
+  int NOTEQUAL = 189;
+  int JOINPLUS = 190;
+  int OPENPAREN = 191;
+  int CLOSEPAREN = 192;
+  int ASTERISK = 193;
+  int SLASH = 194;
+  int PLUS = 195;
+  int MINUS = 196;
+  int QUESTIONMARK = 197;
+  int LEQJOIN = 198;
+  int REQJOIN = 199;
+  int JAVA_REF = 200;
+  int UK_DOUBLE_PRECISION = 201;
+  int UK_NO_SCROLL = 202;
+  int UK_SEMI_SENSITIVE = 203;
+  int UK_VARCHAR_S = 204;
+  int UK_VARCHAR_S1 = 205;
+
+  int DEFAULT = 0;
+  int IN_SINGLE_LINE_COMMENT = 1;
+  int IN_MULTI_LINE_COMMENT = 2;
+
+  String[] tokenImage = {
+    "<EOF>",
+    "\" \"",
+    "\"\\n\"",
+    "\"\\r\"",
+    "\"\\t\"",
+    "\"\\f\"",
+    "\"--\"",
+    "<SINGLE_LINE_COMMENT>",
+    "<token of kind 8>",
+    "\"/*\"",
+    "\"/*\"",
+    "\"*/\"",
+    "<COMMENT_CONTENT>",
+    "\"!%^&\"",
+    "\"add\"",
+    "\"alter\"",
+    "\"and\"",
+    "\"any\"",
+    "\"as\"",
+    "\"asc\"",
+    "\"at\"",
+    "\"authorization\"",
+    "\"avg\"",
+    "\"begin\"",
+    "\"between\"",
+    "\"by\"",
+    "\"cascade\"",
+    "\"case\"",
+    "\"check\"",
+    "\"checkpoint\"",
+    "\"close\"",
+    "\"coalesce\"",
+    "\"commit\"",
+    "\"constraint\"",
+    "\"continue\"",
+    "\"count\"",
+    "\"create\"",
+    "\"current\"",
+    "\"cursor\"",
+    "\"database\"",
+    "\"dbevent\"",
+    "\"declare\"",
+    "\"default\"",
+    "\"delete\"",
+    "\"desc\"",
+    "\"distinct\"",
+    "\"domain\"",
+    "\"drop\"",
+    "\"dump\"",
+    "\"else\"",
+    "\"end\"",
+    "\"escape\"",
+    "\"except\"",
+    "\"exclusive\"",
+    "\"exec\"",
+    "\"execute\"",
+    "\"exists\"",
+    "\"fetch\"",
+    "\"fillfactor\"",
+    "\"for\"",
+    "\"foreign\"",
+    "\"from\"",
+    "\"func\"",
+    "\"function\"",
+    "\"\\\\g\"",
+    "\"goto\"",
+    "\"grant\"",
+    "\"group\"",
+    "\"having\"",
+    "\"if\"",
+    "\"in\"",
+    "\"index\"",
+    "\"insert\"",
+    "\"intersect\"",
+    "\"integrity\"",
+    "\"into\"",
+    "\"is\"",
+    "\"isolation\"",
+    "\"join\"",
+    "\"key\"",
+    "\"kill\"",
+    "\"level\"",
+    "\"like\"",
+    "\"load\"",
+    "\"location\"",
+    "\"max\"",
+    "\"min\"",
+    "\"modify\"",
+    "\"no\"",
+    "\"not\"",
+    "\"null\"",
+    "\"nullif\"",
+    "\"of\"",
+    "\"off\"",
+    "\"on\"",
+    "\"only\"",
+    "\"open\"",
+    "\"option\"",
+    "\"or\"",
+    "\"order\"",
+    "\"out\"",
+    "\"output\"",
+    "\"partition\"",
+    "\"perm\"",
+    "\"permanent\"",
+    "\"prepare\"",
+    "\"primary\"",
+    "\"privileges\"",
+    "\"print\"",
+    "\"procedure\"",
+    "\"profile\"",
+    "\"public\"",
+    "\"read\"",
+    "\"references\"",
+    "\"remove\"",
+    "\"reorganize\"",
+    "\"return\"",
+    "\"revoke\"",
+    "\"role\"",
+    "\"rollback\"",
+    "\"rowcount\"",
+    "\"rows\"",
+    "\"rule\"",
+    "\"save\"",
+    "\"schema\"",
+    "\"security_audit\"",
+    "\"security_alarm\"",
+    "\"select\"",
+    "\"sequence\"",
+    "\"session\"",
+    "\"set\"",
+    "\"shared\"",
+    "\"some\"",
+    "\"statistics\"",
+    "\"sum\"",
+    "\"synonym\"",
+    "\"table\"",
+    "\"temporary\"",
+    "\"to\"",
+    "\"transaction\"",
+    "\"union\"",
+    "\"unique\"",
+    "\"unpartition\"",
+    "\"update\"",
+    "\"user\"",
+    "\"using\"",
+    "\"values\"",
+    "\"varying\"",
+    "\"view\"",
+    "\"when\"",
+    "\"where\"",
+    "\"while\"",
+    "\"with\"",
+    "\"work\"",
+    "\"$dba\"",
+    "\"$ingres\"",
+    "<INTEGER_LITERAL>",
+    "<FLOATING_POINT_LITERAL>",
+    "<EXPONENT>",
+    "<SINGLE_STRING_LITERAL>",
+    "<DOUBLE_STRING_LITERAL>",
+    "<BINARY_LITERAL>",
+    "<HEXDIGIT>",
+    "<MONEY_LITERAL>",
+    "<ID>",
+    "<SQUARE_BRACKET_ID>",
+    "<VAR_NAME_BODY>",
+    "<VAR_NAME>",
+    "<LABEL>",
+    "<GLOBAL_VAR_NAME>",
+    "<TEMP_TABLE_NAME>",
+    "<LETTER>",
+    "<DIGIT>",
+    "<SYMBOL>",
+    "<SPECSYMB>",
+    "<DELIM_START>",
+    "<DELIM_PART>",
+    "<DELIM_IDENT>",
+    "\"||\"",
+    "\",\"",
+    "\";\"",
+    "\".\"",
+    "\"%rowtype\"",
+    "\"~\"",
+    "\"<\"",
+    "\"<=\"",
+    "\">\"",
+    "\">=\"",
+    "\"=\"",
+    "\"!=\"",
+    "\"(+)\"",
+    "\"(\"",
+    "\")\"",
+    "\"*\"",
+    "\"/\"",
+    "\"+\"",
+    "\"-\"",
+    "\"?\"",
+    "\"*=\"",
+    "\"=*\"",
+    "\">>\"",
+    "<UK_DOUBLE_PRECISION>",
+    "<UK_NO_SCROLL>",
+    "<UK_SEMI_SENSITIVE>",
+    "<UK_VARCHAR_S>",
+    "<UK_VARCHAR_S1>",
+    "\":\"",
+    "\"!\"",
+    "\"!>\"",
+    "\"!<\"",
+    "\"<>\"",
+    "\"|\"",
+    "\"&\"",
+    "\"^\"",
+    "\"%\"",
+  };
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/IngresSQLParserTokenManager.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/IngresSQLParserTokenManager.java
new file mode 100644
index 0000000..df35c75
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/IngresSQLParserTokenManager.java
@@ -0,0 +1,3275 @@
+/* Generated By:JJTree&JavaCC: Do not edit this line. IngresSQLParserTokenManager.java */
+package org.eclipse.datatools.enablement.ingres.internal.ui.parser;
+import java.util.ArrayList;
+import java.io.StringReader;
+import org.eclipse.datatools.sqltools.sql.parser.SQLParser;
+import org.eclipse.datatools.sqltools.sql.parser.ast.Node;
+import org.eclipse.datatools.sqltools.sql.parser.ast.SimpleNode;
+import org.eclipse.datatools.sqltools.sql.parser.ParseException;
+import org.eclipse.datatools.sqltools.sql.parser.SQLParserConstants;
+import org.eclipse.datatools.sqltools.sql.parser.JavaCharStream;
+import org.eclipse.datatools.sqltools.sql.parser.Token;
+import org.eclipse.datatools.sqltools.sql.parser.TokenMgrError;
+import org.eclipse.datatools.sqltools.sql.parser.ParsingResult;
+import org.eclipse.datatools.sqltools.sql.parser.util.ParserUtil;
+import org.eclipse.datatools.sqltools.sql.parser.ParserParameters;
+
+public class IngresSQLParserTokenManager implements IngresSQLParserConstants
+{
+            int commentNestingDepth = 0 ;
+  public  java.io.PrintStream debugStream = System.out;
+  public  void setDebugStream(java.io.PrintStream ds) { debugStream = ds; }
+private final int jjStopStringLiteralDfa_0(int pos, long active0, long active1, long active2, long active3)
+{
+   switch (pos)
+   {
+      case 0:
+         if ((active1 & 0xf800000000000000L) != 0L || (active2 & 0xffL) != 0L)
+         {
+            jjmatchedKind = 164;
+            return 76;
+         }
+         if ((active0 & 0x7ffc000000L) != 0L)
+         {
+            jjmatchedKind = 164;
+            return 123;
+         }
+         if ((active2 & 0xc000000L) != 0L)
+            return 10;
+         if ((active0 & 0x1ff8000000000L) != 0L)
+         {
+            jjmatchedKind = 164;
+            return 53;
+         }
+         if ((active1 & 0xf000000L) != 0L)
+         {
+            jjmatchedKind = 164;
+            return 55;
+         }
+         if ((active0 & 0xfffe000003ffc000L) != 0L || (active1 & 0x7fffffff0fffffeL) != 0L || (active2 & 0x3ffff00L) != 0L)
+         {
+            jjmatchedKind = 164;
+            return 140;
+         }
+         if ((active2 & 0x20000000000000L) != 0L)
+            return 141;
+         return -1;
+      case 1:
+         if ((active0 & 0x400000000000L) != 0L)
+         {
+            if (jjmatchedPos != 1)
+            {
+               jjmatchedKind = 164;
+               jjmatchedPos = 1;
+            }
+            return 52;
+         }
+         if ((active1 & 0x3000000L) != 0L)
+            return 142;
+         if ((active0 & 0x21c0000L) != 0L || (active1 & 0xcf0003fe0L) != 0L || (active2 & 0x400L) != 0L)
+            return 140;
+         if ((active0 & 0xffffbfffcde3c000L) != 0L || (active1 & 0x1ffffff30cffc01eL) != 0L || (active2 & 0x3fffbf8L) != 0L)
+         {
+            if (jjmatchedPos != 1)
+            {
+               jjmatchedKind = 164;
+               jjmatchedPos = 1;
+            }
+            return 140;
+         }
+         if ((active1 & 0xe000000000000000L) != 0L || (active2 & 0x7L) != 0L)
+         {
+            if (jjmatchedPos != 1)
+            {
+               jjmatchedKind = 164;
+               jjmatchedPos = 1;
+            }
+            return 75;
+         }
+         if ((active0 & 0x30000000L) != 0L)
+         {
+            if (jjmatchedPos != 1)
+            {
+               jjmatchedKind = 164;
+               jjmatchedPos = 1;
+            }
+            return 122;
+         }
+         return -1;
+      case 2:
+         if ((active0 & 0xe7fbfffffda08000L) != 0L || (active1 & 0xffffffcb8c9f6f9eL) != 0L || (active2 & 0x3fffbbbL) != 0L)
+         {
+            if (jjmatchedPos != 2)
+            {
+               jjmatchedKind = 164;
+               jjmatchedPos = 2;
+            }
+            return 140;
+         }
+         if ((active0 & 0x18040000004b4000L) != 0L || (active1 & 0x3022608000L) != 0L || (active2 & 0x44L) != 0L)
+            return 140;
+         return -1;
+      case 3:
+         if ((active0 & 0xe0c3900008000000L) != 0L || (active1 & 0xe4101818c0d4802L) != 0L || (active2 & 0x3310010L) != 0L)
+            return 140;
+         if ((active0 & 0x17386ffff5a08000L) != 0L || (active1 & 0xf1befe6a0092279cL) != 0L || (active2 & 0xcefbabL) != 0L)
+         {
+            if (jjmatchedPos != 3)
+            {
+               jjmatchedKind = 164;
+               jjmatchedPos = 3;
+            }
+            return 140;
+         }
+         return -1;
+      case 4:
+         if ((active0 & 0x95b86ff785200000L) != 0L || (active1 & 0xf1beef6208902710L) != 0L || (active2 & 0xceaabL) != 0L)
+         {
+            if (jjmatchedPos != 4)
+            {
+               jjmatchedKind = 164;
+               jjmatchedPos = 4;
+            }
+            return 140;
+         }
+         if ((active0 & 0x200000870808000L) != 0L || (active1 & 0x10080002008cL) != 0L || (active2 & 0xc21100L) != 0L)
+            return 140;
+         return -1;
+      case 5:
+         if ((active0 & 0x118485100000000L) != 0L || (active1 & 0x9034802208800110L) != 0L || (active2 & 0x4a008L) != 0L)
+            return 140;
+         if ((active0 & 0x94a027a6a5200000L) != 0L || (active1 & 0x618a6f4000102600L) != 0L || (active2 & 0x84aa3L) != 0L)
+         {
+            jjmatchedKind = 164;
+            jjmatchedPos = 5;
+            return 140;
+         }
+         return -1;
+      case 6:
+         if ((active0 & 0x1080072005000000L) != 0L || (active1 & 0x460000000000L) != 0L || (active2 & 0x80082L) != 0L)
+            return 140;
+         if ((active0 & 0x84202086a0200000L) != 0L || (active1 & 0x618a294000102600L) != 0L || (active2 & 0x4a21L) != 0L)
+         {
+            jjmatchedKind = 164;
+            jjmatchedPos = 6;
+            return 140;
+         }
+         return -1;
+      case 7:
+         if ((active0 & 0x420000220200000L) != 0L || (active1 & 0x600a294000002600L) != 0L || (active2 & 0x4a20L) != 0L)
+         {
+            jjmatchedKind = 164;
+            jjmatchedPos = 7;
+            return 140;
+         }
+         if ((active0 & 0x8000208480000000L) != 0L || (active1 & 0x180000000100000L) != 0L || (active2 & 0x1L) != 0L)
+            return 140;
+         return -1;
+      case 8:
+         if ((active0 & 0x20000000000000L) != 0L || (active1 & 0x214000002600L) != 0L || (active2 & 0x200L) != 0L)
+            return 140;
+         if ((active0 & 0x400000220200000L) != 0L || (active1 & 0x600a080000000000L) != 0L || (active2 & 0x4820L) != 0L)
+         {
+            jjmatchedKind = 164;
+            jjmatchedPos = 8;
+            return 140;
+         }
+         return -1;
+      case 9:
+         if ((active0 & 0x400000220000000L) != 0L || (active1 & 0xa080000000000L) != 0L || (active2 & 0x20L) != 0L)
+            return 140;
+         if ((active0 & 0x200000L) != 0L || (active1 & 0x6000000000000000L) != 0L || (active2 & 0x4800L) != 0L)
+         {
+            jjmatchedKind = 164;
+            jjmatchedPos = 9;
+            return 140;
+         }
+         return -1;
+      case 10:
+         if ((active2 & 0x4800L) != 0L)
+            return 140;
+         if ((active0 & 0x200000L) != 0L || (active1 & 0x6000000000000000L) != 0L)
+         {
+            jjmatchedKind = 164;
+            jjmatchedPos = 10;
+            return 140;
+         }
+         return -1;
+      case 11:
+         if ((active0 & 0x200000L) != 0L || (active1 & 0x6000000000000000L) != 0L)
+         {
+            jjmatchedKind = 164;
+            jjmatchedPos = 11;
+            return 140;
+         }
+         return -1;
+      case 12:
+         if ((active0 & 0x200000L) != 0L)
+            return 140;
+         if ((active1 & 0x6000000000000000L) != 0L)
+         {
+            jjmatchedKind = 164;
+            jjmatchedPos = 12;
+            return 140;
+         }
+         return -1;
+      default :
+         return -1;
+   }
+}
+private final int jjStartNfa_0(int pos, long active0, long active1, long active2, long active3)
+{
+   return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0, active1, active2, active3), pos + 1);
+}
+private final int jjStopAtPos(int pos, int kind)
+{
+   jjmatchedKind = kind;
+   jjmatchedPos = pos;
+   return pos + 1;
+}
+private final int jjStartNfaWithStates_0(int pos, int kind, int state)
+{
+   jjmatchedKind = kind;
+   jjmatchedPos = pos;
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) { return pos + 1; }
+   return jjMoveNfa_0(state, pos + 1);
+}
+private final int jjMoveStringLiteralDfa0_0()
+{
+   switch(curChar)
+   {
+      case 33:
+         jjmatchedKind = 207;
+         return jjMoveStringLiteralDfa1_0(0x2000L, 0x0L, 0x2000000000000000L, 0x30000L);
+      case 36:
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0xc000000L, 0x0L);
+      case 37:
+         jjmatchedKind = 214;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x40000000000000L, 0x0L);
+      case 38:
+         return jjStopAtPos(0, 212);
+      case 40:
+         jjmatchedKind = 191;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x4000000000000000L, 0x0L);
+      case 41:
+         return jjStopAtPos(0, 192);
+      case 42:
+         jjmatchedKind = 193;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x40L);
+      case 43:
+         return jjStopAtPos(0, 195);
+      case 44:
+         return jjStopAtPos(0, 179);
+      case 45:
+         jjmatchedKind = 196;
+         return jjMoveStringLiteralDfa1_0(0x40L, 0x0L, 0x0L, 0x0L);
+      case 46:
+         return jjStartNfaWithStates_0(0, 181, 141);
+      case 47:
+         jjmatchedKind = 194;
+         return jjMoveStringLiteralDfa1_0(0x200L, 0x0L, 0x0L, 0x0L);
+      case 58:
+         return jjStopAtPos(0, 206);
+      case 59:
+         return jjStopAtPos(0, 180);
+      case 60:
+         jjmatchedKind = 184;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x200000000000000L, 0x40000L);
+      case 61:
+         jjmatchedKind = 188;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x80L);
+      case 62:
+         jjmatchedKind = 186;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x800000000000000L, 0x100L);
+      case 63:
+         return jjStopAtPos(0, 197);
+      case 92:
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x1L, 0x0L, 0x0L);
+      case 94:
+         return jjStopAtPos(0, 213);
+      case 65:
+      case 97:
+         return jjMoveStringLiteralDfa1_0(0x7fc000L, 0x0L, 0x0L, 0x0L);
+      case 66:
+      case 98:
+         return jjMoveStringLiteralDfa1_0(0x3800000L, 0x0L, 0x0L, 0x0L);
+      case 67:
+      case 99:
+         return jjMoveStringLiteralDfa1_0(0x7ffc000000L, 0x0L, 0x0L, 0x0L);
+      case 68:
+      case 100:
+         return jjMoveStringLiteralDfa1_0(0x1ff8000000000L, 0x0L, 0x0L, 0x0L);
+      case 69:
+      case 101:
+         return jjMoveStringLiteralDfa1_0(0x1fe000000000000L, 0x0L, 0x0L, 0x0L);
+      case 70:
+      case 102:
+         return jjMoveStringLiteralDfa1_0(0xfe00000000000000L, 0x0L, 0x0L, 0x0L);
+      case 71:
+      case 103:
+         return jjMoveStringLiteralDfa1_0(0x0L, 0xeL, 0x0L, 0x0L);
+      case 72:
+      case 104:
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x10L, 0x0L, 0x0L);
+      case 73:
+      case 105:
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x3fe0L, 0x0L, 0x0L);
+      case 74:
+      case 106:
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x4000L, 0x0L, 0x0L);
+      case 75:
+      case 107:
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x18000L, 0x0L, 0x0L);
+      case 76:
+      case 108:
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x1e0000L, 0x0L, 0x0L);
+      case 77:
+      case 109:
+         return jjMoveStringLiteralDfa1_0(0x0L, 0xe00000L, 0x0L, 0x0L);
+      case 78:
+      case 110:
+         return jjMoveStringLiteralDfa1_0(0x0L, 0xf000000L, 0x0L, 0x0L);
+      case 79:
+      case 111:
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x3ff0000000L, 0x0L, 0x0L);
+      case 80:
+      case 112:
+         return jjMoveStringLiteralDfa1_0(0x0L, 0xffc000000000L, 0x0L, 0x0L);
+      case 82:
+      case 114:
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x7ff000000000000L, 0x0L, 0x0L);
+      case 83:
+      case 115:
+         return jjMoveStringLiteralDfa1_0(0x0L, 0xf800000000000000L, 0xffL, 0x0L);
+      case 84:
+      case 116:
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0xf00L, 0x0L);
+      case 85:
+      case 117:
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x3f000L, 0x0L);
+      case 86:
+      case 118:
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x1c0000L, 0x0L);
+      case 87:
+      case 119:
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x3e00000L, 0x0L);
+      case 124:
+         jjmatchedKind = 211;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x4000000000000L, 0x0L);
+      case 126:
+         return jjStopAtPos(0, 183);
+      default :
+         return jjMoveNfa_0(0, 0);
+   }
+}
+private final int jjMoveStringLiteralDfa1_0(long active0, long active1, long active2, long active3)
+{
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(0, active0, active1, active2, active3);
+      return 1;
+   }
+   switch(curChar)
+   {
+      case 37:
+         return jjMoveStringLiteralDfa2_0(active0, 0x2000L, active1, 0L, active2, 0L, active3, 0L);
+      case 42:
+         if ((active0 & 0x200L) != 0L)
+            return jjStopAtPos(1, 9);
+         else if ((active3 & 0x80L) != 0L)
+            return jjStopAtPos(1, 199);
+         break;
+      case 43:
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0L, active2, 0x4000000000000000L, active3, 0L);
+      case 45:
+         if ((active0 & 0x40L) != 0L)
+            return jjStopAtPos(1, 6);
+         break;
+      case 60:
+         if ((active3 & 0x20000L) != 0L)
+            return jjStopAtPos(1, 209);
+         break;
+      case 61:
+         if ((active2 & 0x200000000000000L) != 0L)
+            return jjStopAtPos(1, 185);
+         else if ((active2 & 0x800000000000000L) != 0L)
+            return jjStopAtPos(1, 187);
+         else if ((active2 & 0x2000000000000000L) != 0L)
+            return jjStopAtPos(1, 189);
+         else if ((active3 & 0x40L) != 0L)
+            return jjStopAtPos(1, 198);
+         break;
+      case 62:
+         if ((active3 & 0x100L) != 0L)
+            return jjStopAtPos(1, 200);
+         else if ((active3 & 0x10000L) != 0L)
+            return jjStopAtPos(1, 208);
+         else if ((active3 & 0x40000L) != 0L)
+            return jjStopAtPos(1, 210);
+         break;
+      case 65:
+      case 97:
+         return jjMoveStringLiteralDfa2_0(active0, 0x800c000000L, active1, 0x800004000200010L, active2, 0xc0100L, active3, 0L);
+      case 66:
+      case 98:
+         return jjMoveStringLiteralDfa2_0(active0, 0x10000000000L, active1, 0L, active2, 0L, active3, 0L);
+      case 67:
+      case 99:
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x1000000000000000L, active2, 0L, active3, 0L);
+      case 68:
+      case 100:
+         return jjMoveStringLiteralDfa2_0(active0, 0x4000L, active1, 0L, active2, 0x4000000L, active3, 0L);
+      case 69:
+      case 101:
+         return jjMoveStringLiteralDfa2_0(active0, 0x2001e0001800000L, active1, 0xe03f018000028000L, active2, 0x207L, active3, 0L);
+      case 70:
+      case 102:
+         if ((active1 & 0x20L) != 0L)
+            return jjStartNfaWithStates_0(1, 69, 140);
+         else if ((active1 & 0x10000000L) != 0L)
+         {
+            jjmatchedKind = 92;
+            jjmatchedPos = 1;
+         }
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x20000000L, active2, 0L, active3, 0L);
+      case 71:
+      case 103:
+         if ((active1 & 0x1L) != 0L)
+            return jjStopAtPos(1, 64);
+         break;
+      case 72:
+      case 104:
+         return jjMoveStringLiteralDfa2_0(active0, 0x30000000L, active1, 0L, active2, 0xe00008L, active3, 0L);
+      case 73:
+      case 105:
+         return jjMoveStringLiteralDfa2_0(active0, 0x400200000000000L, active1, 0x450000L, active2, 0x9100000L, active3, 0L);
+      case 76:
+      case 108:
+         return jjMoveStringLiteralDfa2_0(active0, 0x2000040008000L, active1, 0L, active2, 0L, active3, 0L);
+      case 78:
+      case 110:
+         if ((active1 & 0x40L) != 0L)
+         {
+            jjmatchedKind = 70;
+            jjmatchedPos = 1;
+         }
+         else if ((active1 & 0x40000000L) != 0L)
+         {
+            jjmatchedKind = 94;
+            jjmatchedPos = 1;
+         }
+         return jjMoveStringLiteralDfa2_0(active0, 0x4000000030000L, active1, 0x80000f80L, active2, 0x7000L, active3, 0L);
+      case 79:
+      case 111:
+         if ((active1 & 0x1000000L) != 0L)
+         {
+            jjmatchedKind = 88;
+            jjmatchedPos = 1;
+         }
+         else if ((active2 & 0x400L) != 0L)
+            return jjStartNfaWithStates_0(1, 138, 140);
+         return jjMoveStringLiteralDfa2_0(active0, 0x1800400f80000000L, active1, 0x3c0000002984002L, active2, 0x2000010L, active3, 0L);
+      case 80:
+      case 112:
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x300000000L, active2, 0x8000L, active3, 0L);
+      case 82:
+      case 114:
+         if ((active1 & 0x400000000L) != 0L)
+         {
+            jjmatchedKind = 98;
+            jjmatchedPos = 1;
+         }
+         return jjMoveStringLiteralDfa2_0(active0, 0x2000801000000000L, active1, 0x7e080000000cL, active2, 0x40000000000800L, active3, 0L);
+      case 83:
+      case 115:
+         if ((active0 & 0x40000L) != 0L)
+         {
+            jjmatchedKind = 18;
+            jjmatchedPos = 1;
+         }
+         else if ((active1 & 0x1000L) != 0L)
+         {
+            jjmatchedKind = 76;
+            jjmatchedPos = 1;
+         }
+         return jjMoveStringLiteralDfa2_0(active0, 0x8000000080000L, active1, 0x2000L, active2, 0x30000L, active3, 0L);
+      case 84:
+      case 116:
+         if ((active0 & 0x100000L) != 0L)
+            return jjStartNfaWithStates_0(1, 20, 140);
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0L, active2, 0x20L, active3, 0L);
+      case 85:
+      case 117:
+         return jjMoveStringLiteralDfa2_0(active0, 0xc001006000200000L, active1, 0x40080300c000000L, active2, 0x40L, active3, 0L);
+      case 86:
+      case 118:
+         return jjMoveStringLiteralDfa2_0(active0, 0x400000L, active1, 0L, active2, 0L, active3, 0L);
+      case 88:
+      case 120:
+         return jjMoveStringLiteralDfa2_0(active0, 0x1f0000000000000L, active1, 0L, active2, 0L, active3, 0L);
+      case 89:
+      case 121:
+         if ((active0 & 0x2000000L) != 0L)
+            return jjStartNfaWithStates_0(1, 25, 140);
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0L, active2, 0x80L, active3, 0L);
+      case 124:
+         if ((active2 & 0x4000000000000L) != 0L)
+            return jjStopAtPos(1, 178);
+         break;
+      default :
+         break;
+   }
+   return jjStartNfa_0(0, active0, active1, active2, active3);
+}
+private final int jjMoveStringLiteralDfa2_0(long old0, long active0, long old1, long active1, long old2, long active2, long old3, long active3)
+{
+   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2) | (active3 &= old3)) == 0L)
+      return jjStartNfa_0(0, old0, old1, old2, old3); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(1, active0, active1, active2, 0L);
+      return 2;
+   }
+   switch(curChar)
+   {
+      case 41:
+         if ((active2 & 0x4000000000000000L) != 0L)
+            return jjStopAtPos(2, 190);
+         break;
+      case 94:
+         return jjMoveStringLiteralDfa3_0(active0, 0x2000L, active1, 0L, active2, 0L);
+      case 65:
+      case 97:
+         return jjMoveStringLiteralDfa3_0(active0, 0x80000000L, active1, 0x1000000080004L, active2, 0x828L);
+      case 66:
+      case 98:
+         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x800000000000L, active2, 0x4000100L);
+      case 67:
+      case 99:
+         if ((active0 & 0x80000L) != 0L)
+            return jjStartNfaWithStates_0(2, 19, 140);
+         return jjMoveStringLiteralDfa3_0(active0, 0x38020000000000L, active1, 0x6000000000100000L, active2, 0L);
+      case 68:
+      case 100:
+         if ((active0 & 0x4000L) != 0L)
+            return jjStartNfaWithStates_0(2, 14, 140);
+         else if ((active0 & 0x10000L) != 0L)
+            return jjStartNfaWithStates_0(2, 16, 140);
+         else if ((active0 & 0x4000000000000L) != 0L)
+            return jjStartNfaWithStates_0(2, 50, 140);
+         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x800800080L, active2, 0x8000L);
+      case 69:
+      case 101:
+         return jjMoveStringLiteralDfa3_0(active0, 0xc0011030000000L, active1, 0x20100000000L, active2, 0x710000L);
+      case 70:
+      case 102:
+         if ((active1 & 0x20000000L) != 0L)
+            return jjStartNfaWithStates_0(2, 93, 140);
+         return jjMoveStringLiteralDfa3_0(active0, 0x40000000000L, active1, 0x2000000000000L, active2, 0L);
+      case 71:
+      case 103:
+         if ((active0 & 0x400000L) != 0L)
+            return jjStartNfaWithStates_0(2, 22, 140);
+         return jjMoveStringLiteralDfa3_0(active0, 0x800000L, active1, 0L, active2, 0L);
+      case 72:
+      case 104:
+         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x1000000000000000L, active2, 0L);
+      case 73:
+      case 105:
+         return jjMoveStringLiteralDfa3_0(active0, 0x100000000000000L, active1, 0x1c0000004000L, active2, 0x823000L);
+      case 75:
+      case 107:
+         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x40000L, active2, 0L);
+      case 76:
+      case 108:
+         return jjMoveStringLiteralDfa3_0(active0, 0x400080000000000L, active1, 0x84c000008c010000L, active2, 0x40000L);
+      case 77:
+      case 109:
+         if ((active2 & 0x40L) != 0L)
+            return jjStartNfaWithStates_0(2, 134, 140);
+         return jjMoveStringLiteralDfa3_0(active0, 0x1400100000000L, active1, 0x4000000000000L, active2, 0x210L);
+      case 78:
+      case 110:
+         if ((active1 & 0x400000L) != 0L)
+            return jjStartNfaWithStates_0(2, 86, 140);
+         return jjMoveStringLiteralDfa3_0(active0, 0xc000000600000000L, active1, 0L, active2, 0x8000080L);
+      case 79:
+      case 111:
+         return jjMoveStringLiteralDfa3_0(active0, 0x2000800040000000L, active1, 0x8600000002008L, active2, 0x40000000000000L);
+      case 80:
+      case 112:
+         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0L, active2, 0x4000L);
+      case 81:
+      case 113:
+         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0L, active2, 0x1L);
+      case 82:
+      case 114:
+         if ((active0 & 0x800000000000000L) != 0L)
+         {
+            jjmatchedKind = 59;
+            jjmatchedPos = 2;
+         }
+         return jjMoveStringLiteralDfa3_0(active0, 0x1000006000000000L, active1, 0x1c000000000L, active2, 0x2080000L);
+      case 83:
+      case 115:
+         return jjMoveStringLiteralDfa3_0(active0, 0x230000c000000L, active1, 0x100L, active2, 0x2L);
+      case 84:
+      case 116:
+         if ((active1 & 0x2000000L) != 0L)
+            return jjStartNfaWithStates_0(2, 89, 140);
+         else if ((active1 & 0x1000000000L) != 0L)
+         {
+            jjmatchedKind = 100;
+            jjmatchedPos = 2;
+         }
+         else if ((active2 & 0x4L) != 0L)
+            return jjStartNfaWithStates_0(2, 130, 140);
+         return jjMoveStringLiteralDfa3_0(active0, 0x200008001208000L, active1, 0x10002200000e02L, active2, 0x1000000L);
+      case 85:
+      case 117:
+         return jjMoveStringLiteralDfa3_0(active0, 0x800000000L, active1, 0L, active2, 0L);
+      case 86:
+      case 118:
+         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x820000000020010L, active2, 0L);
+      case 87:
+      case 119:
+         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x300000000000000L, active2, 0L);
+      case 88:
+      case 120:
+         if ((active1 & 0x200000L) != 0L)
+            return jjStartNfaWithStates_0(2, 85, 140);
+         break;
+      case 89:
+      case 121:
+         if ((active0 & 0x20000L) != 0L)
+            return jjStartNfaWithStates_0(2, 17, 140);
+         else if ((active1 & 0x8000L) != 0L)
+            return jjStartNfaWithStates_0(2, 79, 140);
+         break;
+      default :
+         break;
+   }
+   return jjStartNfa_0(1, active0, active1, active2, 0L);
+}
+private final int jjMoveStringLiteralDfa3_0(long old0, long active0, long old1, long active1, long old2, long active2)
+{
+   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2)) == 0L)
+      return jjStartNfa_0(1, old0, old1, old2, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(2, active0, active1, active2, 0L);
+      return 3;
+   }
+   switch(curChar)
+   {
+      case 38:
+         if ((active0 & 0x2000L) != 0L)
+            return jjStopAtPos(3, 13);
+         break;
+      case 65:
+      case 97:
+         if ((active2 & 0x4000000L) != 0L)
+            return jjStopAtPos(3, 154);
+         return jjMoveStringLiteralDfa4_0(active0, 0x8449000000000L, active1, 0x100000L, active2, 0xc000L);
+      case 67:
+      case 99:
+         if ((active0 & 0x100000000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 44, 140);
+         else if ((active0 & 0x40000000000000L) != 0L)
+         {
+            jjmatchedKind = 54;
+            jjmatchedPos = 3;
+         }
+         else if ((active0 & 0x4000000000000000L) != 0L)
+         {
+            jjmatchedKind = 62;
+            jjmatchedPos = 3;
+         }
+         return jjMoveStringLiteralDfa4_0(active0, 0x8280000034000000L, active1, 0x100200000000000L, active2, 0L);
+      case 68:
+      case 100:
+         if ((active1 & 0x80000L) != 0L)
+            return jjStartNfaWithStates_0(3, 83, 140);
+         else if ((active1 & 0x1000000000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 112, 140);
+         break;
+      case 69:
+      case 101:
+         if ((active0 & 0x8000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 27, 140);
+         else if ((active0 & 0x2000000000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 49, 140);
+         else if ((active1 & 0x40000L) != 0L)
+            return jjStartNfaWithStates_0(3, 82, 140);
+         else if ((active1 & 0x40000000000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 118, 140);
+         else if ((active1 & 0x400000000000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 122, 140);
+         else if ((active1 & 0x800000000000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 123, 140);
+         else if ((active2 & 0x10L) != 0L)
+            return jjStartNfaWithStates_0(3, 132, 140);
+         return jjMoveStringLiteralDfa4_0(active0, 0x1010080000008000L, active1, 0x9002000800020780L, active2, 0L);
+      case 70:
+      case 102:
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x400000000000L, active2, 0L);
+      case 71:
+      case 103:
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x8000000L);
+      case 72:
+      case 104:
+         if ((active2 & 0x1000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 152, 140);
+         return jjMoveStringLiteralDfa4_0(active0, 0x200000L, active1, 0L, active2, 0L);
+      case 73:
+      case 105:
+         return jjMoveStringLiteralDfa4_0(active0, 0x800000L, active1, 0x200800010L, active2, 0L);
+      case 75:
+      case 107:
+         if ((active2 & 0x2000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 153, 140);
+         break;
+      case 76:
+      case 108:
+         if ((active1 & 0x10000L) != 0L)
+            return jjStartNfaWithStates_0(3, 80, 140);
+         else if ((active1 & 0x4000000L) != 0L)
+         {
+            jjmatchedKind = 90;
+            jjmatchedPos = 3;
+         }
+         return jjMoveStringLiteralDfa4_0(active0, 0x420020080000000L, active1, 0x80800008002000L, active2, 0x800100L);
+      case 77:
+      case 109:
+         if ((active0 & 0x2000000000000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 61, 140);
+         else if ((active1 & 0x8000000000L) != 0L)
+         {
+            jjmatchedKind = 103;
+            jjmatchedPos = 3;
+         }
+         return jjMoveStringLiteralDfa4_0(active0, 0x100000000L, active1, 0x50000000000L, active2, 0L);
+      case 78:
+      case 110:
+         if ((active1 & 0x4000L) != 0L)
+            return jjStartNfaWithStates_0(3, 78, 140);
+         else if ((active1 & 0x100000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 96, 140);
+         else if ((active2 & 0x200000L) != 0L)
+            return jjStartNfaWithStates_0(3, 149, 140);
+         return jjMoveStringLiteralDfa4_0(active0, 0x800000000L, active1, 0x100000000004L, active2, 0x20800L);
+      case 79:
+      case 111:
+         if ((active1 & 0x2L) != 0L)
+            return jjStartNfaWithStates_0(3, 65, 140);
+         else if ((active1 & 0x800L) != 0L)
+            return jjStartNfaWithStates_0(3, 75, 140);
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x24000000000000L, active2, 0x1080L);
+      case 80:
+      case 112:
+         if ((active0 & 0x800000000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 47, 140);
+         else if ((active0 & 0x1000000000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 48, 140);
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x22000000000L, active2, 0x200L);
+      case 81:
+      case 113:
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x2000L);
+      case 82:
+      case 114:
+         if ((active2 & 0x10000L) != 0L)
+            return jjStartNfaWithStates_0(3, 144, 140);
+         return jjMoveStringLiteralDfa4_0(active0, 0x2000000000L, active1, 0x8000000000000L, active2, 0x400008L);
+      case 83:
+      case 115:
+         if ((active1 & 0x200000000000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 121, 140);
+         return jjMoveStringLiteralDfa4_0(active0, 0x100004240000000L, active1, 0L, active2, 0x2L);
+      case 84:
+      case 116:
+         return jjMoveStringLiteralDfa4_0(active0, 0x200400000000L, active1, 0x4000000000L, active2, 0x20L);
+      case 85:
+      case 117:
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x6010000000000008L, active2, 0x40001L);
+      case 86:
+      case 118:
+         return jjMoveStringLiteralDfa4_0(active0, 0x10000000000L, active1, 0x80000000000L, active2, 0L);
+      case 87:
+      case 119:
+         if ((active2 & 0x100000L) != 0L)
+            return jjStartNfaWithStates_0(3, 148, 140);
+         return jjMoveStringLiteralDfa4_0(active0, 0x1000000L, active1, 0L, active2, 0x40000000000000L);
+      case 89:
+      case 121:
+         if ((active1 & 0x80000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 95, 140);
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x80000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(2, active0, active1, active2, 0L);
+}
+private final int jjMoveStringLiteralDfa4_0(long old0, long active0, long old1, long active1, long old2, long active2)
+{
+   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2)) == 0L)
+      return jjStartNfa_0(2, old0, old1, old2, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(3, active0, active1, active2, 0L);
+      return 4;
+   }
+   switch(curChar)
+   {
+      case 65:
+      case 97:
+         return jjMoveStringLiteralDfa5_0(active0, 0x20004000000L, active1, 0x70000002000L, active2, 0L);
+      case 66:
+      case 98:
+         return jjMoveStringLiteralDfa5_0(active0, 0x8000000000L, active1, 0x80000000000000L, active2, 0L);
+      case 67:
+      case 99:
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x8000000000000000L, active2, 0L);
+      case 69:
+      case 101:
+         if ((active0 & 0x40000000L) != 0L)
+            return jjStartNfaWithStates_0(4, 30, 140);
+         else if ((active2 & 0x100L) != 0L)
+            return jjStartNfaWithStates_0(4, 136, 140);
+         else if ((active2 & 0x400000L) != 0L)
+            return jjStartNfaWithStates_0(4, 150, 140);
+         else if ((active2 & 0x800000L) != 0L)
+            return jjStartNfaWithStates_0(4, 151, 140);
+         return jjMoveStringLiteralDfa5_0(active0, 0x12081000000L, active1, 0x200000000000L, active2, 0x40009L);
+      case 70:
+      case 102:
+         return jjMoveStringLiteralDfa5_0(active0, 0x400000000000000L, active1, 0x800000L, active2, 0L);
+      case 71:
+      case 103:
+         if ((active2 & 0x20000L) != 0L)
+            return jjStartNfaWithStates_0(4, 145, 140);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x8000000000400L, active2, 0L);
+      case 72:
+      case 104:
+         if ((active0 & 0x200000000000000L) != 0L)
+            return jjStartNfaWithStates_0(4, 57, 140);
+         break;
+      case 73:
+      case 105:
+         return jjMoveStringLiteralDfa5_0(active0, 0x1000600500000000L, active1, 0xc84008000000L, active2, 0x80022L);
+      case 75:
+      case 107:
+         if ((active0 & 0x10000000L) != 0L)
+         {
+            jjmatchedKind = 28;
+            jjmatchedPos = 4;
+         }
+         return jjMoveStringLiteralDfa5_0(active0, 0x20000000L, active1, 0x20000000000000L, active2, 0L);
+      case 76:
+      case 108:
+         if ((active1 & 0x20000L) != 0L)
+            return jjStartNfaWithStates_0(4, 81, 140);
+         break;
+      case 77:
+      case 109:
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x1000000000000000L, active2, 0L);
+      case 78:
+      case 110:
+         if ((active0 & 0x800000L) != 0L)
+            return jjStartNfaWithStates_0(4, 23, 140);
+         else if ((active2 & 0x1000L) != 0L)
+            return jjStartNfaWithStates_0(4, 140, 140);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x10L, active2, 0x80L);
+      case 79:
+      case 111:
+         return jjMoveStringLiteralDfa5_0(active0, 0x4000200000L, active1, 0x100000200000000L, active2, 0x200L);
+      case 80:
+      case 112:
+         if ((active1 & 0x8L) != 0L)
+            return jjStartNfaWithStates_0(4, 67, 140);
+         return jjMoveStringLiteralDfa5_0(active0, 0x18000000000000L, active1, 0L, active2, 0L);
+      case 82:
+      case 114:
+         if ((active0 & 0x8000L) != 0L)
+            return jjStartNfaWithStates_0(4, 15, 140);
+         else if ((active1 & 0x800000000L) != 0L)
+            return jjStartNfaWithStates_0(4, 99, 140);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x6012000000000300L, active2, 0x8004000L);
+      case 83:
+      case 115:
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0L, active2, 0x800L);
+      case 84:
+      case 116:
+         if ((active0 & 0x800000000L) != 0L)
+            return jjStartNfaWithStates_0(4, 35, 140);
+         else if ((active1 & 0x4L) != 0L)
+            return jjStartNfaWithStates_0(4, 66, 140);
+         else if ((active1 & 0x100000000000L) != 0L)
+            return jjStartNfaWithStates_0(4, 108, 140);
+         return jjMoveStringLiteralDfa5_0(active0, 0x8100081200000000L, active1, 0x100000L, active2, 0x40000000008000L);
+      case 85:
+      case 117:
+         return jjMoveStringLiteralDfa5_0(active0, 0xa0040000000000L, active1, 0x2000000000L, active2, 0x2000L);
+      case 86:
+      case 118:
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x4000000000000L, active2, 0L);
+      case 88:
+      case 120:
+         if ((active1 & 0x80L) != 0L)
+            return jjStartNfaWithStates_0(4, 71, 140);
+         break;
+      default :
+         break;
+   }
+   return jjStartNfa_0(3, active0, active1, active2, 0L);
+}
+private final int jjMoveStringLiteralDfa5_0(long old0, long active0, long old1, long active1, long old2, long active2)
+{
+   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2)) == 0L)
+      return jjStartNfa_0(3, old0, old1, old2, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(4, active0, active1, active2, 0L);
+      return 5;
+   }
+   switch(curChar)
+   {
+      case 65:
+      case 97:
+         if ((active1 & 0x1000000000000000L) != 0L)
+            return jjStartNfaWithStates_0(5, 124, 140);
+         return jjMoveStringLiteralDfa6_0(active0, 0x400008000000000L, active1, 0x88000000000000L, active2, 0x800L);
+      case 67:
+      case 99:
+         if ((active1 & 0x800000000000L) != 0L)
+            return jjStartNfaWithStates_0(5, 111, 140);
+         break;
+      case 68:
+      case 100:
+         if ((active2 & 0x8L) != 0L)
+            return jjStartNfaWithStates_0(5, 131, 140);
+         return jjMoveStringLiteralDfa6_0(active0, 0x4000000L, active1, 0x200000000000L, active2, 0L);
+      case 69:
+      case 101:
+         if ((active0 & 0x1000000000L) != 0L)
+            return jjStartNfaWithStates_0(5, 36, 140);
+         else if ((active0 & 0x80000000000L) != 0L)
+            return jjStartNfaWithStates_0(5, 43, 140);
+         else if ((active0 & 0x8000000000000L) != 0L)
+            return jjStartNfaWithStates_0(5, 51, 140);
+         else if ((active1 & 0x4000000000000L) != 0L)
+            return jjStartNfaWithStates_0(5, 114, 140);
+         else if ((active1 & 0x20000000000000L) != 0L)
+            return jjStartNfaWithStates_0(5, 117, 140);
+         else if ((active2 & 0x2000L) != 0L)
+            return jjStartNfaWithStates_0(5, 141, 140);
+         else if ((active2 & 0x8000L) != 0L)
+            return jjStartNfaWithStates_0(5, 143, 140);
+         return jjMoveStringLiteralDfa6_0(active0, 0x1000000L, active1, 0x2000000000000L, active2, 0x8000000L);
+      case 70:
+      case 102:
+         if ((active1 & 0x8000000L) != 0L)
+            return jjStartNfaWithStates_0(5, 91, 140);
+         break;
+      case 71:
+      case 103:
+         if ((active1 & 0x10L) != 0L)
+            return jjStartNfaWithStates_0(5, 68, 140);
+         return jjMoveStringLiteralDfa6_0(active0, 0x1000000000000000L, active1, 0L, active2, 0L);
+      case 73:
+      case 105:
+         return jjMoveStringLiteralDfa6_0(active0, 0x8000000000000000L, active1, 0x6000000000100000L, active2, 0L);
+      case 76:
+      case 108:
+         return jjMoveStringLiteralDfa6_0(active0, 0x40000000000L, active1, 0x480000000000L, active2, 0L);
+      case 78:
+      case 110:
+         if ((active0 & 0x400000000000L) != 0L)
+            return jjStartNfaWithStates_0(5, 46, 140);
+         else if ((active1 & 0x200000000L) != 0L)
+            return jjStartNfaWithStates_0(5, 97, 140);
+         else if ((active1 & 0x10000000000000L) != 0L)
+            return jjStartNfaWithStates_0(5, 116, 140);
+         return jjMoveStringLiteralDfa6_0(active0, 0x212400000000L, active1, 0x10000000000L, active2, 0x80001L);
+      case 79:
+      case 111:
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x2L);
+      case 80:
+      case 112:
+         return jjMoveStringLiteralDfa6_0(active0, 0x20000000L, active1, 0L, active2, 0L);
+      case 82:
+      case 114:
+         if ((active0 & 0x4000000000L) != 0L)
+            return jjStartNfaWithStates_0(5, 38, 140);
+         return jjMoveStringLiteralDfa6_0(active0, 0x20200200000L, active1, 0x60000000400L, active2, 0x200L);
+      case 83:
+      case 115:
+         if ((active0 & 0x100000000000000L) != 0L)
+            return jjStartNfaWithStates_0(5, 56, 140);
+         else if ((active2 & 0x40000L) != 0L)
+            return jjStartNfaWithStates_0(5, 146, 140);
+         return jjMoveStringLiteralDfa6_0(active0, 0x20000080000000L, active1, 0x200L, active2, 0x20L);
+      case 84:
+      case 116:
+         if ((active0 & 0x100000000L) != 0L)
+            return jjStartNfaWithStates_0(5, 32, 140);
+         else if ((active0 & 0x10000000000000L) != 0L)
+            return jjStartNfaWithStates_0(5, 52, 140);
+         else if ((active1 & 0x100L) != 0L)
+            return jjStartNfaWithStates_0(5, 72, 140);
+         else if ((active1 & 0x2000000000L) != 0L)
+            return jjStartNfaWithStates_0(5, 101, 140);
+         else if ((active1 & 0x8000000000000000L) != 0L)
+            return jjStartNfaWithStates_0(5, 127, 140);
+         return jjMoveStringLiteralDfa6_0(active0, 0x80000000000000L, active1, 0x4000002000L, active2, 0x4000L);
+      case 85:
+      case 117:
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x100000000000000L, active2, 0L);
+      case 89:
+      case 121:
+         if ((active1 & 0x800000L) != 0L)
+            return jjStartNfaWithStates_0(5, 87, 140);
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x40000000000080L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(4, active0, active1, active2, 0L);
+}
+private final int jjMoveStringLiteralDfa6_0(long old0, long active0, long old1, long active1, long old2, long active2)
+{
+   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2)) == 0L)
+      return jjStartNfa_0(4, old0, old1, old2, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(5, active0, active1, active2, 0L);
+      return 6;
+   }
+   switch(curChar)
+   {
+      case 65:
+      case 97:
+         return jjMoveStringLiteralDfa7_0(active0, 0x200000000L, active1, 0L, active2, 0x200L);
+      case 67:
+      case 99:
+         return jjMoveStringLiteralDfa7_0(active0, 0x400200080000000L, active1, 0x80000000000000L, active2, 0x801L);
+      case 69:
+      case 101:
+         if ((active0 & 0x4000000L) != 0L)
+            return jjStartNfaWithStates_0(6, 26, 140);
+         else if ((active0 & 0x20000000000L) != 0L)
+            return jjStartNfaWithStates_0(6, 41, 140);
+         else if ((active0 & 0x80000000000000L) != 0L)
+            return jjStartNfaWithStates_0(6, 55, 140);
+         else if ((active1 & 0x20000000000L) != 0L)
+            return jjStartNfaWithStates_0(6, 105, 140);
+         else if ((active1 & 0x400000000000L) != 0L)
+            return jjStartNfaWithStates_0(6, 110, 140);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x90000000200L, active2, 0L);
+      case 71:
+      case 103:
+         if ((active2 & 0x80000L) != 0L)
+            return jjStartNfaWithStates_0(6, 147, 140);
+         break;
+      case 73:
+      case 105:
+         return jjMoveStringLiteralDfa7_0(active0, 0x20000000200000L, active1, 0x4000002400L, active2, 0x4000L);
+      case 77:
+      case 109:
+         if ((active2 & 0x80L) != 0L)
+            return jjStartNfaWithStates_0(6, 135, 140);
+         break;
+      case 78:
+      case 110:
+         if ((active0 & 0x1000000L) != 0L)
+            return jjStartNfaWithStates_0(6, 24, 140);
+         else if ((active0 & 0x1000000000000000L) != 0L)
+            return jjStartNfaWithStates_0(6, 60, 140);
+         else if ((active2 & 0x2L) != 0L)
+            return jjStartNfaWithStates_0(6, 129, 140);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x10a000000000000L, active2, 0L);
+      case 79:
+      case 111:
+         return jjMoveStringLiteralDfa7_0(active0, 0x8000000020000000L, active1, 0x100000L, active2, 0L);
+      case 80:
+      case 112:
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x40000000000000L);
+      case 83:
+      case 115:
+         if ((active2 & 0x8000000L) != 0L)
+            return jjStopAtPos(6, 155);
+         return jjMoveStringLiteralDfa7_0(active0, 0x8000000000L, active1, 0L, active2, 0L);
+      case 84:
+      case 116:
+         if ((active0 & 0x2000000000L) != 0L)
+            return jjStartNfaWithStates_0(6, 37, 140);
+         else if ((active0 & 0x10000000000L) != 0L)
+            return jjStartNfaWithStates_0(6, 40, 140);
+         else if ((active0 & 0x40000000000L) != 0L)
+            return jjStartNfaWithStates_0(6, 42, 140);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x6000000000000000L, active2, 0x20L);
+      case 85:
+      case 117:
+         return jjMoveStringLiteralDfa7_0(active0, 0x400000000L, active1, 0x200000000000L, active2, 0L);
+      case 89:
+      case 121:
+         if ((active1 & 0x40000000000L) != 0L)
+            return jjStartNfaWithStates_0(6, 106, 140);
+         break;
+      default :
+         break;
+   }
+   return jjStartNfa_0(5, active0, active1, active2, 0L);
+}
+private final int jjMoveStringLiteralDfa7_0(long old0, long active0, long old1, long active1, long old2, long active2)
+{
+   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2)) == 0L)
+      return jjStartNfa_0(5, old0, old1, old2, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(6, active0, active1, active2, 0L);
+      return 7;
+   }
+   switch(curChar)
+   {
+      case 67:
+      case 99:
+         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x2000000000200L, active2, 0L);
+      case 69:
+      case 101:
+         if ((active0 & 0x80000000L) != 0L)
+            return jjStartNfaWithStates_0(7, 31, 140);
+         else if ((active0 & 0x400000000L) != 0L)
+            return jjStartNfaWithStates_0(7, 34, 140);
+         else if ((active0 & 0x8000000000L) != 0L)
+            return jjStartNfaWithStates_0(7, 39, 140);
+         else if ((active2 & 0x1L) != 0L)
+            return jjStartNfaWithStates_0(7, 128, 140);
+         else if ((active2 & 0x40000000000000L) != 0L)
+            return jjStopAtPos(7, 182);
+         break;
+      case 71:
+      case 103:
+         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x80000000000L, active2, 0L);
+      case 73:
+      case 105:
+         return jjMoveStringLiteralDfa8_0(active0, 0x220000000L, active1, 0x8000000000000L, active2, 0x20L);
+      case 75:
+      case 107:
+         if ((active1 & 0x80000000000000L) != 0L)
+            return jjStartNfaWithStates_0(7, 119, 140);
+         break;
+      case 78:
+      case 110:
+         if ((active0 & 0x8000000000000000L) != 0L)
+            return jjStartNfaWithStates_0(7, 63, 140);
+         else if ((active1 & 0x100000L) != 0L)
+            return jjStartNfaWithStates_0(7, 84, 140);
+         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x10000000000L, active2, 0L);
+      case 79:
+      case 111:
+         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x4000002000L, active2, 0L);
+      case 82:
+      case 114:
+         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x200000000000L, active2, 0x200L);
+      case 84:
+      case 116:
+         if ((active0 & 0x200000000000L) != 0L)
+            return jjStartNfaWithStates_0(7, 45, 140);
+         else if ((active1 & 0x100000000000000L) != 0L)
+            return jjStartNfaWithStates_0(7, 120, 140);
+         return jjMoveStringLiteralDfa8_0(active0, 0x400000000000000L, active1, 0x400L, active2, 0x4800L);
+      case 86:
+      case 118:
+         return jjMoveStringLiteralDfa8_0(active0, 0x20000000000000L, active1, 0L, active2, 0L);
+      case 89:
+      case 121:
+         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x6000000000000000L, active2, 0L);
+      case 90:
+      case 122:
+         return jjMoveStringLiteralDfa8_0(active0, 0x200000L, active1, 0L, active2, 0L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(6, active0, active1, active2, 0L);
+}
+private final int jjMoveStringLiteralDfa8_0(long old0, long active0, long old1, long active1, long old2, long active2)
+{
+   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2)) == 0L)
+      return jjStartNfa_0(6, old0, old1, old2, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(7, active0, active1, active2, 0L);
+      return 8;
+   }
+   switch(curChar)
+   {
+      case 95:
+         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x6000000000000000L, active2, 0L);
+      case 65:
+      case 97:
+         return jjMoveStringLiteralDfa9_0(active0, 0x200000L, active1, 0L, active2, 0L);
+      case 67:
+      case 99:
+         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0L, active2, 0x20L);
+      case 69:
+      case 101:
+         if ((active0 & 0x20000000000000L) != 0L)
+            return jjStartNfaWithStates_0(8, 53, 140);
+         else if ((active1 & 0x200000000000L) != 0L)
+            return jjStartNfaWithStates_0(8, 109, 140);
+         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x2080000000000L, active2, 0L);
+      case 73:
+      case 105:
+         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0L, active2, 0x4800L);
+      case 78:
+      case 110:
+         if ((active1 & 0x2000L) != 0L)
+            return jjStartNfaWithStates_0(8, 77, 140);
+         else if ((active1 & 0x4000000000L) != 0L)
+            return jjStartNfaWithStates_0(8, 102, 140);
+         return jjMoveStringLiteralDfa9_0(active0, 0x220000000L, active1, 0L, active2, 0L);
+      case 79:
+      case 111:
+         return jjMoveStringLiteralDfa9_0(active0, 0x400000000000000L, active1, 0L, active2, 0L);
+      case 84:
+      case 116:
+         if ((active1 & 0x200L) != 0L)
+            return jjStartNfaWithStates_0(8, 73, 140);
+         else if ((active1 & 0x10000000000L) != 0L)
+            return jjStartNfaWithStates_0(8, 104, 140);
+         break;
+      case 89:
+      case 121:
+         if ((active1 & 0x400L) != 0L)
+            return jjStartNfaWithStates_0(8, 74, 140);
+         else if ((active2 & 0x200L) != 0L)
+            return jjStartNfaWithStates_0(8, 137, 140);
+         break;
+      case 90:
+      case 122:
+         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x8000000000000L, active2, 0L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(7, active0, active1, active2, 0L);
+}
+private final int jjMoveStringLiteralDfa9_0(long old0, long active0, long old1, long active1, long old2, long active2)
+{
+   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2)) == 0L)
+      return jjStartNfa_0(7, old0, old1, old2, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(8, active0, active1, active2, 0L);
+      return 9;
+   }
+   switch(curChar)
+   {
+      case 65:
+      case 97:
+         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0x6000000000000000L, active2, 0L);
+      case 69:
+      case 101:
+         if ((active1 & 0x8000000000000L) != 0L)
+            return jjStartNfaWithStates_0(9, 115, 140);
+         break;
+      case 79:
+      case 111:
+         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0L, active2, 0x4800L);
+      case 82:
+      case 114:
+         if ((active0 & 0x400000000000000L) != 0L)
+            return jjStartNfaWithStates_0(9, 58, 140);
+         break;
+      case 83:
+      case 115:
+         if ((active1 & 0x80000000000L) != 0L)
+            return jjStartNfaWithStates_0(9, 107, 140);
+         else if ((active1 & 0x2000000000000L) != 0L)
+            return jjStartNfaWithStates_0(9, 113, 140);
+         else if ((active2 & 0x20L) != 0L)
+            return jjStartNfaWithStates_0(9, 133, 140);
+         break;
+      case 84:
+      case 116:
+         if ((active0 & 0x20000000L) != 0L)
+            return jjStartNfaWithStates_0(9, 29, 140);
+         else if ((active0 & 0x200000000L) != 0L)
+            return jjStartNfaWithStates_0(9, 33, 140);
+         return jjMoveStringLiteralDfa10_0(active0, 0x200000L, active1, 0L, active2, 0L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(8, active0, active1, active2, 0L);
+}
+private final int jjMoveStringLiteralDfa10_0(long old0, long active0, long old1, long active1, long old2, long active2)
+{
+   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2)) == 0L)
+      return jjStartNfa_0(8, old0, old1, old2, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(9, active0, active1, active2, 0L);
+      return 10;
+   }
+   switch(curChar)
+   {
+      case 73:
+      case 105:
+         return jjMoveStringLiteralDfa11_0(active0, 0x200000L, active1, 0L, active2, 0L);
+      case 76:
+      case 108:
+         return jjMoveStringLiteralDfa11_0(active0, 0L, active1, 0x4000000000000000L, active2, 0L);
+      case 78:
+      case 110:
+         if ((active2 & 0x800L) != 0L)
+            return jjStartNfaWithStates_0(10, 139, 140);
+         else if ((active2 & 0x4000L) != 0L)
+            return jjStartNfaWithStates_0(10, 142, 140);
+         break;
+      case 85:
+      case 117:
+         return jjMoveStringLiteralDfa11_0(active0, 0L, active1, 0x2000000000000000L, active2, 0L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(9, active0, active1, active2, 0L);
+}
+private final int jjMoveStringLiteralDfa11_0(long old0, long active0, long old1, long active1, long old2, long active2)
+{
+   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2)) == 0L)
+      return jjStartNfa_0(9, old0, old1, old2, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(10, active0, active1, 0L, 0L);
+      return 11;
+   }
+   switch(curChar)
+   {
+      case 65:
+      case 97:
+         return jjMoveStringLiteralDfa12_0(active0, 0L, active1, 0x4000000000000000L);
+      case 68:
+      case 100:
+         return jjMoveStringLiteralDfa12_0(active0, 0L, active1, 0x2000000000000000L);
+      case 79:
+      case 111:
+         return jjMoveStringLiteralDfa12_0(active0, 0x200000L, active1, 0L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(10, active0, active1, 0L, 0L);
+}
+private final int jjMoveStringLiteralDfa12_0(long old0, long active0, long old1, long active1)
+{
+   if (((active0 &= old0) | (active1 &= old1)) == 0L)
+      return jjStartNfa_0(10, old0, old1, 0L, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(11, active0, active1, 0L, 0L);
+      return 12;
+   }
+   switch(curChar)
+   {
+      case 73:
+      case 105:
+         return jjMoveStringLiteralDfa13_0(active0, 0L, active1, 0x2000000000000000L);
+      case 78:
+      case 110:
+         if ((active0 & 0x200000L) != 0L)
+            return jjStartNfaWithStates_0(12, 21, 140);
+         break;
+      case 82:
+      case 114:
+         return jjMoveStringLiteralDfa13_0(active0, 0L, active1, 0x4000000000000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(11, active0, active1, 0L, 0L);
+}
+private final int jjMoveStringLiteralDfa13_0(long old0, long active0, long old1, long active1)
+{
+   if (((active0 &= old0) | (active1 &= old1)) == 0L)
+      return jjStartNfa_0(11, old0, old1, 0L, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(12, 0L, active1, 0L, 0L);
+      return 13;
+   }
+   switch(curChar)
+   {
+      case 77:
+      case 109:
+         if ((active1 & 0x4000000000000000L) != 0L)
+            return jjStartNfaWithStates_0(13, 126, 140);
+         break;
+      case 84:
+      case 116:
+         if ((active1 & 0x2000000000000000L) != 0L)
+            return jjStartNfaWithStates_0(13, 125, 140);
+         break;
+      default :
+         break;
+   }
+   return jjStartNfa_0(12, 0L, active1, 0L, 0L);
+}
+private final void jjCheckNAdd(int state)
+{
+   if (jjrounds[state] != jjround)
+   {
+      jjstateSet[jjnewStateCnt++] = state;
+      jjrounds[state] = jjround;
+   }
+}
+private final void jjAddStates(int start, int end)
+{
+   do {
+      jjstateSet[jjnewStateCnt++] = jjnextStates[start];
+   } while (start++ != end);
+}
+private final void jjCheckNAddTwoStates(int state1, int state2)
+{
+   jjCheckNAdd(state1);
+   jjCheckNAdd(state2);
+}
+private final void jjCheckNAddStates(int start, int end)
+{
+   do {
+      jjCheckNAdd(jjnextStates[start]);
+   } while (start++ != end);
+}
+private final void jjCheckNAddStates(int start)
+{
+   jjCheckNAdd(jjnextStates[start]);
+   jjCheckNAdd(jjnextStates[start + 1]);
+}
+static final long[] jjbitVec0 = {
+   0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
+};
+static final long[] jjbitVec1 = {
+   0x0L, 0x0L, 0x2800000000L, 0x0L
+};
+static final long[] jjbitVec2 = {
+   0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
+};
+private final int jjMoveNfa_0(int startState, int curPos)
+{
+   int[] nextStates;
+   int startsAt = 0;
+   jjnewStateCnt = 140;
+   int i = 1;
+   jjstateSet[0] = startState;
+   int j, kind = 0x7fffffff;
+   for (;;)
+   {
+      if (++jjround == 0x7fffffff)
+         ReInitRounds();
+      if (curChar < 64)
+      {
+         long l = 1L << curChar;
+         MatchLoop: do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 75:
+                  if ((0x3ff001800000000L & l) != 0L)
+                     jjCheckNAddTwoStates(110, 111);
+                  else if (curChar == 58)
+                  {
+                     if (kind > 168)
+                        kind = 168;
+                  }
+                  if ((0x3ff001800000000L & l) != 0L)
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAdd(108);
+                  }
+                  break;
+               case 142:
+                  if ((0x3ff001800000000L & l) != 0L)
+                     jjCheckNAddTwoStates(110, 111);
+                  else if ((0x100002600L & l) != 0L)
+                     jjCheckNAddTwoStates(56, 62);
+                  else if (curChar == 58)
+                  {
+                     if (kind > 168)
+                        kind = 168;
+                  }
+                  if ((0x3ff001800000000L & l) != 0L)
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAdd(108);
+                  }
+                  break;
+               case 122:
+                  if ((0x3ff001800000000L & l) != 0L)
+                     jjCheckNAddTwoStates(110, 111);
+                  else if (curChar == 58)
+                  {
+                     if (kind > 168)
+                        kind = 168;
+                  }
+                  if ((0x3ff001800000000L & l) != 0L)
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAdd(108);
+                  }
+                  break;
+               case 55:
+                  if ((0x3ff001800000000L & l) != 0L)
+                     jjCheckNAddTwoStates(110, 111);
+                  else if (curChar == 58)
+                  {
+                     if (kind > 168)
+                        kind = 168;
+                  }
+                  if ((0x3ff001800000000L & l) != 0L)
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAdd(108);
+                  }
+                  break;
+               case 53:
+                  if ((0x3ff001800000000L & l) != 0L)
+                     jjCheckNAddTwoStates(110, 111);
+                  else if (curChar == 58)
+                  {
+                     if (kind > 168)
+                        kind = 168;
+                  }
+                  if ((0x3ff001800000000L & l) != 0L)
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAdd(108);
+                  }
+                  break;
+               case 141:
+                  if ((0x3ff000000000000L & l) != 0L)
+                  {
+                     if (kind > 163)
+                        kind = 163;
+                     jjCheckNAddTwoStates(11, 12);
+                  }
+                  if ((0x3ff000000000000L & l) != 0L)
+                  {
+                     if (kind > 157)
+                        kind = 157;
+                     jjCheckNAddTwoStates(91, 92);
+                  }
+                  break;
+               case 52:
+                  if ((0x3ff001800000000L & l) != 0L)
+                     jjCheckNAddTwoStates(110, 111);
+                  else if (curChar == 58)
+                  {
+                     if (kind > 168)
+                        kind = 168;
+                  }
+                  if ((0x3ff001800000000L & l) != 0L)
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAdd(108);
+                  }
+                  break;
+               case 10:
+                  if ((0x3ff000000000000L & l) != 0L)
+                  {
+                     if (kind > 163)
+                        kind = 163;
+                     jjCheckNAddStates(0, 3);
+                  }
+                  else if (curChar == 46)
+                     jjCheckNAdd(11);
+                  break;
+               case 123:
+                  if ((0x3ff001800000000L & l) != 0L)
+                     jjCheckNAddTwoStates(110, 111);
+                  else if (curChar == 58)
+                  {
+                     if (kind > 168)
+                        kind = 168;
+                  }
+                  if ((0x3ff001800000000L & l) != 0L)
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAdd(108);
+                  }
+                  break;
+               case 0:
+                  if ((0x3ff000000000000L & l) != 0L)
+                  {
+                     if (kind > 156)
+                        kind = 156;
+                     jjCheckNAddStates(4, 12);
+                  }
+                  else if (curChar == 34)
+                     jjCheckNAddStates(13, 18);
+                  else if (curChar == 46)
+                     jjCheckNAddTwoStates(91, 11);
+                  else if (curChar == 35)
+                     jjCheckNAdd(38);
+                  else if (curChar == 36)
+                     jjAddStates(19, 20);
+                  else if (curChar == 39)
+                     jjCheckNAddStates(21, 23);
+                  if (curChar == 48)
+                     jjstateSet[jjnewStateCnt++] = 7;
+                  break;
+               case 76:
+                  if ((0x3ff001800000000L & l) != 0L)
+                     jjCheckNAddTwoStates(110, 111);
+                  else if (curChar == 58)
+                  {
+                     if (kind > 168)
+                        kind = 168;
+                  }
+                  if ((0x3ff001800000000L & l) != 0L)
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAdd(108);
+                  }
+                  break;
+               case 140:
+                  if ((0x3ff001800000000L & l) != 0L)
+                     jjCheckNAddTwoStates(110, 111);
+                  else if (curChar == 58)
+                  {
+                     if (kind > 168)
+                        kind = 168;
+                  }
+                  if ((0x3ff001800000000L & l) != 0L)
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAdd(108);
+                  }
+                  break;
+               case 1:
+                  if ((0xffffff7fffffffffL & l) != 0L)
+                     jjCheckNAddStates(21, 23);
+                  break;
+               case 2:
+                  if (curChar == 39)
+                     jjCheckNAddStates(24, 26);
+                  break;
+               case 3:
+                  if (curChar == 39)
+                     jjstateSet[jjnewStateCnt++] = 2;
+                  break;
+               case 4:
+                  if ((0xffffff7fffffffffL & l) != 0L)
+                     jjCheckNAddStates(24, 26);
+                  break;
+               case 5:
+                  if (curChar == 39 && kind > 159)
+                     kind = 159;
+                  break;
+               case 6:
+                  if (curChar == 48)
+                     jjstateSet[jjnewStateCnt++] = 7;
+                  break;
+               case 8:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 161)
+                     kind = 161;
+                  jjstateSet[jjnewStateCnt++] = 8;
+                  break;
+               case 9:
+                  if (curChar == 36)
+                     jjAddStates(19, 20);
+                  break;
+               case 11:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 163)
+                     kind = 163;
+                  jjCheckNAddTwoStates(11, 12);
+                  break;
+               case 13:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(14);
+                  break;
+               case 14:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 163)
+                     kind = 163;
+                  jjCheckNAdd(14);
+                  break;
+               case 15:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 163)
+                     kind = 163;
+                  jjCheckNAddStates(0, 3);
+                  break;
+               case 16:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(16, 17);
+                  break;
+               case 17:
+                  if (curChar != 46)
+                     break;
+                  if (kind > 163)
+                     kind = 163;
+                  jjCheckNAddTwoStates(18, 19);
+                  break;
+               case 18:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 163)
+                     kind = 163;
+                  jjCheckNAddTwoStates(18, 19);
+                  break;
+               case 20:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(21);
+                  break;
+               case 21:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 163)
+                     kind = 163;
+                  jjCheckNAdd(21);
+                  break;
+               case 22:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 163)
+                     kind = 163;
+                  jjCheckNAddTwoStates(22, 23);
+                  break;
+               case 24:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(25);
+                  break;
+               case 25:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 163)
+                     kind = 163;
+                  jjCheckNAdd(25);
+                  break;
+               case 28:
+                  if ((0x3ff001800000000L & l) != 0L)
+                     jjAddStates(27, 28);
+                  break;
+               case 31:
+                  if ((0x3ff001800000000L & l) == 0L)
+                     break;
+                  if (kind > 167)
+                     kind = 167;
+                  jjCheckNAddTwoStates(31, 32);
+                  break;
+               case 32:
+                  if ((0x3ff001800000000L & l) == 0L)
+                     break;
+                  if (kind > 167)
+                     kind = 167;
+                  jjCheckNAdd(32);
+                  break;
+               case 34:
+                  if ((0x3ff001800000000L & l) == 0L)
+                     break;
+                  if (kind > 169)
+                     kind = 169;
+                  jjCheckNAddTwoStates(34, 35);
+                  break;
+               case 35:
+                  if ((0x3ff001800000000L & l) == 0L)
+                     break;
+                  if (kind > 169)
+                     kind = 169;
+                  jjCheckNAdd(35);
+                  break;
+               case 37:
+                  if (curChar == 35)
+                     jjCheckNAdd(38);
+                  break;
+               case 38:
+                  if ((0x3ff001800000000L & l) == 0L)
+                     break;
+                  if (kind > 170)
+                     kind = 170;
+                  jjCheckNAdd(38);
+                  break;
+               case 40:
+                  if ((0x100002600L & l) != 0L)
+                     jjAddStates(29, 30);
+                  break;
+               case 56:
+                  if ((0x100002600L & l) != 0L)
+                     jjCheckNAddTwoStates(56, 62);
+                  break;
+               case 65:
+                  if ((0x100002600L & l) != 0L)
+                     jjAddStates(31, 32);
+                  break;
+               case 78:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 156)
+                     kind = 156;
+                  jjCheckNAddStates(4, 12);
+                  break;
+               case 79:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 156)
+                     kind = 156;
+                  jjCheckNAdd(79);
+                  break;
+               case 80:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(80, 81);
+                  break;
+               case 81:
+                  if (curChar != 46)
+                     break;
+                  if (kind > 157)
+                     kind = 157;
+                  jjCheckNAddTwoStates(82, 83);
+                  break;
+               case 82:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 157)
+                     kind = 157;
+                  jjCheckNAddTwoStates(82, 83);
+                  break;
+               case 84:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(85);
+                  break;
+               case 85:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 157)
+                     kind = 157;
+                  jjCheckNAdd(85);
+                  break;
+               case 86:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 157)
+                     kind = 157;
+                  jjCheckNAddTwoStates(86, 87);
+                  break;
+               case 88:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(89);
+                  break;
+               case 89:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 157)
+                     kind = 157;
+                  jjCheckNAdd(89);
+                  break;
+               case 90:
+                  if (curChar == 46)
+                     jjCheckNAddTwoStates(91, 11);
+                  break;
+               case 91:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 157)
+                     kind = 157;
+                  jjCheckNAddTwoStates(91, 92);
+                  break;
+               case 93:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(94);
+                  break;
+               case 94:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 157)
+                     kind = 157;
+                  jjCheckNAdd(94);
+                  break;
+               case 95:
+                  if (curChar == 34)
+                     jjCheckNAddStates(13, 18);
+                  break;
+               case 96:
+                  if ((0xfffffffbffffffffL & l) != 0L)
+                     jjCheckNAddStates(33, 35);
+                  break;
+               case 97:
+                  if (curChar == 34)
+                     jjCheckNAddStates(36, 38);
+                  break;
+               case 98:
+                  if (curChar == 34)
+                     jjstateSet[jjnewStateCnt++] = 97;
+                  break;
+               case 99:
+                  if ((0xfffffffbffffffffL & l) != 0L)
+                     jjCheckNAddStates(36, 38);
+                  break;
+               case 100:
+                  if (curChar == 34 && kind > 160)
+                     kind = 160;
+                  break;
+               case 101:
+                  if ((0xf7ffffeb00000000L & l) != 0L)
+                     jjCheckNAddStates(39, 41);
+                  break;
+               case 102:
+                  if (curChar == 34)
+                     jjCheckNAddStates(42, 44);
+                  break;
+               case 103:
+                  if (curChar == 34)
+                     jjstateSet[jjnewStateCnt++] = 102;
+                  break;
+               case 104:
+                  if ((0xf7fffffb00000000L & l) != 0L)
+                     jjCheckNAddStates(42, 44);
+                  break;
+               case 105:
+                  if (curChar == 34 && kind > 177)
+                     kind = 177;
+                  break;
+               case 108:
+                  if ((0x3ff001800000000L & l) == 0L)
+                     break;
+                  if (kind > 164)
+                     kind = 164;
+                  jjCheckNAdd(108);
+                  break;
+               case 110:
+                  if ((0x3ff001800000000L & l) != 0L)
+                     jjCheckNAddTwoStates(110, 111);
+                  break;
+               case 111:
+                  if (curChar == 58 && kind > 168)
+                     kind = 168;
+                  break;
+               case 114:
+                  if ((0x100002600L & l) != 0L)
+                     jjAddStates(45, 46);
+                  break;
+               case 125:
+                  if ((0x100002600L & l) != 0L)
+                     jjAddStates(47, 48);
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      else if (curChar < 128)
+      {
+         long l = 1L << (curChar & 077);
+         MatchLoop: do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 75:
+                  if ((0x7fffffe87ffffffL & l) != 0L)
+                     jjCheckNAddTwoStates(110, 111);
+                  if ((0x7fffffe87ffffffL & l) != 0L)
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAdd(108);
+                  }
+                  if ((0x7fffffe87fffffeL & l) != 0L)
+                     jjCheckNAddStates(49, 51);
+                  if ((0x7fffffe87fffffeL & l) != 0L)
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAddTwoStates(107, 108);
+                  }
+                  if ((0x200000002000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 64;
+                  break;
+               case 142:
+                  if ((0x7fffffe87ffffffL & l) != 0L)
+                     jjCheckNAddTwoStates(110, 111);
+                  if ((0x7fffffe87ffffffL & l) != 0L)
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAdd(108);
+                  }
+                  if ((0x7fffffe87fffffeL & l) != 0L)
+                     jjCheckNAddStates(49, 51);
+                  if ((0x7fffffe87fffffeL & l) != 0L)
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAddTwoStates(107, 108);
+                  }
+                  break;
+               case 122:
+                  if ((0x7fffffe87ffffffL & l) != 0L)
+                     jjCheckNAddTwoStates(110, 111);
+                  if ((0x7fffffe87ffffffL & l) != 0L)
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAdd(108);
+                  }
+                  if ((0x7fffffe87fffffeL & l) != 0L)
+                     jjCheckNAddStates(49, 51);
+                  if ((0x7fffffe87fffffeL & l) != 0L)
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAddTwoStates(107, 108);
+                  }
+                  if ((0x200000002L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 137;
+                  if ((0x200000002L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 113;
+                  break;
+               case 55:
+                  if ((0x7fffffe87ffffffL & l) != 0L)
+                     jjCheckNAddTwoStates(110, 111);
+                  if ((0x7fffffe87ffffffL & l) != 0L)
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAdd(108);
+                  }
+                  if ((0x7fffffe87fffffeL & l) != 0L)
+                     jjCheckNAddStates(49, 51);
+                  if ((0x7fffffe87fffffeL & l) != 0L)
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAddTwoStates(107, 108);
+                  }
+                  if ((0x800000008000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 56;
+                  break;
+               case 53:
+                  if ((0x7fffffe87ffffffL & l) != 0L)
+                     jjCheckNAddTwoStates(110, 111);
+                  if ((0x7fffffe87ffffffL & l) != 0L)
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAdd(108);
+                  }
+                  if ((0x7fffffe87fffffeL & l) != 0L)
+                     jjCheckNAddStates(49, 51);
+                  if ((0x7fffffe87fffffeL & l) != 0L)
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAddTwoStates(107, 108);
+                  }
+                  if ((0x800000008000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 52;
+                  break;
+               case 52:
+                  if ((0x7fffffe87ffffffL & l) != 0L)
+                     jjCheckNAddTwoStates(110, 111);
+                  if ((0x7fffffe87ffffffL & l) != 0L)
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAdd(108);
+                  }
+                  if ((0x7fffffe87fffffeL & l) != 0L)
+                     jjCheckNAddStates(49, 51);
+                  if ((0x7fffffe87fffffeL & l) != 0L)
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAddTwoStates(107, 108);
+                  }
+                  if ((0x20000000200000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 51;
+                  break;
+               case 123:
+                  if ((0x7fffffe87ffffffL & l) != 0L)
+                     jjCheckNAddTwoStates(110, 111);
+                  if ((0x7fffffe87ffffffL & l) != 0L)
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAdd(108);
+                  }
+                  if ((0x7fffffe87fffffeL & l) != 0L)
+                     jjCheckNAddStates(49, 51);
+                  if ((0x7fffffe87fffffeL & l) != 0L)
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAddTwoStates(107, 108);
+                  }
+                  if ((0x10000000100L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 138;
+                  if ((0x10000000100L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 122;
+                  break;
+               case 0:
+                  if ((0x7fffffe87fffffeL & l) != 0L)
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAddStates(52, 56);
+                  }
+                  else if (curChar == 64)
+                     jjstateSet[jjnewStateCnt++] = 33;
+                  else if (curChar == 91)
+                     jjCheckNAdd(27);
+                  if ((0x800000008L & l) != 0L)
+                     jjAddStates(57, 58);
+                  else if ((0x8000000080000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 76;
+                  else if ((0x400000004000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 55;
+                  else if ((0x1000000010L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 53;
+                  else if (curChar == 64)
+                     jjCheckNAdd(31);
+                  break;
+               case 76:
+                  if ((0x7fffffe87ffffffL & l) != 0L)
+                     jjCheckNAddTwoStates(110, 111);
+                  if ((0x7fffffe87ffffffL & l) != 0L)
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAdd(108);
+                  }
+                  if ((0x7fffffe87fffffeL & l) != 0L)
+                     jjCheckNAddStates(49, 51);
+                  if ((0x7fffffe87fffffeL & l) != 0L)
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAddTwoStates(107, 108);
+                  }
+                  if ((0x2000000020L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 75;
+                  break;
+               case 140:
+                  if ((0x7fffffe87ffffffL & l) != 0L)
+                     jjCheckNAddTwoStates(110, 111);
+                  if ((0x7fffffe87ffffffL & l) != 0L)
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAdd(108);
+                  }
+                  if ((0x7fffffe87fffffeL & l) != 0L)
+                     jjCheckNAddStates(49, 51);
+                  if ((0x7fffffe87fffffeL & l) != 0L)
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAddTwoStates(107, 108);
+                  }
+                  break;
+               case 1:
+                  jjCheckNAddStates(21, 23);
+                  break;
+               case 4:
+                  jjCheckNAddStates(24, 26);
+                  break;
+               case 7:
+                  if ((0x100000001000000L & l) != 0L)
+                     jjCheckNAdd(8);
+                  break;
+               case 8:
+                  if ((0x7e0000007eL & l) == 0L)
+                     break;
+                  if (kind > 161)
+                     kind = 161;
+                  jjCheckNAdd(8);
+                  break;
+               case 12:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(59, 60);
+                  break;
+               case 19:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(61, 62);
+                  break;
+               case 23:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(63, 64);
+                  break;
+               case 26:
+                  if (curChar == 91)
+                     jjCheckNAdd(27);
+                  break;
+               case 27:
+                  if ((0x7fffffe87fffffeL & l) != 0L)
+                     jjCheckNAddStates(65, 67);
+                  break;
+               case 28:
+                  if ((0x7fffffe87ffffffL & l) != 0L)
+                     jjCheckNAddTwoStates(28, 29);
+                  break;
+               case 29:
+                  if (curChar == 93 && kind > 165)
+                     kind = 165;
+                  break;
+               case 30:
+                  if (curChar == 64)
+                     jjCheckNAdd(31);
+                  break;
+               case 31:
+                  if ((0x7fffffe87fffffeL & l) == 0L)
+                     break;
+                  if (kind > 167)
+                     kind = 167;
+                  jjCheckNAddTwoStates(31, 32);
+                  break;
+               case 32:
+                  if ((0x7fffffe87ffffffL & l) == 0L)
+                     break;
+                  if (kind > 167)
+                     kind = 167;
+                  jjCheckNAdd(32);
+                  break;
+               case 33:
+                  if (curChar == 64)
+                     jjCheckNAdd(34);
+                  break;
+               case 34:
+                  if ((0x7fffffe87fffffeL & l) == 0L)
+                     break;
+                  if (kind > 169)
+                     kind = 169;
+                  jjCheckNAddTwoStates(34, 35);
+                  break;
+               case 35:
+                  if ((0x7fffffe87ffffffL & l) == 0L)
+                     break;
+                  if (kind > 169)
+                     kind = 169;
+                  jjCheckNAdd(35);
+                  break;
+               case 36:
+                  if (curChar == 64)
+                     jjstateSet[jjnewStateCnt++] = 33;
+                  break;
+               case 38:
+                  if ((0x7fffffe87ffffffL & l) == 0L)
+                     break;
+                  if (kind > 170)
+                     kind = 170;
+                  jjstateSet[jjnewStateCnt++] = 38;
+                  break;
+               case 39:
+                  if ((0x2000000020L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 40;
+                  break;
+               case 41:
+                  if ((0x400000004000L & l) != 0L && kind > 201)
+                     kind = 201;
+                  break;
+               case 42:
+                  if ((0x800000008000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 41;
+                  break;
+               case 43:
+                  if ((0x20000000200L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 42;
+                  break;
+               case 44:
+                  if ((0x8000000080000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 43;
+                  break;
+               case 45:
+                  if ((0x20000000200L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 44;
+                  break;
+               case 46:
+                  if ((0x800000008L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 45;
+                  break;
+               case 47:
+                  if ((0x2000000020L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 46;
+                  break;
+               case 48:
+                  if ((0x4000000040000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 47;
+                  break;
+               case 49:
+                  if ((0x1000000010000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 48;
+                  break;
+               case 50:
+                  if ((0x100000001000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 39;
+                  break;
+               case 51:
+                  if ((0x400000004L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 50;
+                  break;
+               case 54:
+                  if ((0x1000000010L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 53;
+                  break;
+               case 57:
+                  if ((0x100000001000L & l) != 0L && kind > 202)
+                     kind = 202;
+                  break;
+               case 58:
+                  if ((0x100000001000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 57;
+                  break;
+               case 59:
+                  if ((0x800000008000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 58;
+                  break;
+               case 60:
+                  if ((0x4000000040000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 59;
+                  break;
+               case 61:
+                  if ((0x800000008L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 60;
+                  break;
+               case 62:
+                  if ((0x8000000080000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 61;
+                  break;
+               case 63:
+                  if ((0x400000004000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 55;
+                  break;
+               case 64:
+                  if ((0x20000000200L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 65;
+                  break;
+               case 66:
+                  if ((0x2000000020L & l) != 0L && kind > 203)
+                     kind = 203;
+                  break;
+               case 67:
+                  if ((0x40000000400000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 66;
+                  break;
+               case 68:
+                  if ((0x20000000200L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 67;
+                  break;
+               case 69:
+                  if ((0x10000000100000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 68;
+                  break;
+               case 70:
+                  if ((0x20000000200L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 69;
+                  break;
+               case 71:
+                  if ((0x8000000080000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 70;
+                  break;
+               case 72:
+                  if ((0x400000004000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 71;
+                  break;
+               case 73:
+                  if ((0x2000000020L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 72;
+                  break;
+               case 74:
+                  if ((0x8000000080000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 73;
+                  break;
+               case 77:
+                  if ((0x8000000080000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 76;
+                  break;
+               case 83:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(68, 69);
+                  break;
+               case 87:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(70, 71);
+                  break;
+               case 92:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(72, 73);
+                  break;
+               case 96:
+                  jjCheckNAddStates(33, 35);
+                  break;
+               case 99:
+                  jjCheckNAddStates(36, 38);
+                  break;
+               case 101:
+                  if ((0x7ffffffed7ffffffL & l) != 0L)
+                     jjCheckNAddStates(39, 41);
+                  break;
+               case 104:
+                  if ((0x7ffffffed7ffffffL & l) != 0L)
+                     jjCheckNAddStates(42, 44);
+                  break;
+               case 106:
+                  if ((0x7fffffe87fffffeL & l) == 0L)
+                     break;
+                  if (kind > 164)
+                     kind = 164;
+                  jjCheckNAddStates(52, 56);
+                  break;
+               case 107:
+                  if ((0x7fffffe87fffffeL & l) == 0L)
+                     break;
+                  if (kind > 164)
+                     kind = 164;
+                  jjCheckNAddTwoStates(107, 108);
+                  break;
+               case 108:
+                  if ((0x7fffffe87ffffffL & l) == 0L)
+                     break;
+                  if (kind > 164)
+                     kind = 164;
+                  jjCheckNAdd(108);
+                  break;
+               case 109:
+                  if ((0x7fffffe87fffffeL & l) != 0L)
+                     jjCheckNAddStates(49, 51);
+                  break;
+               case 110:
+                  if ((0x7fffffe87ffffffL & l) != 0L)
+                     jjCheckNAddTwoStates(110, 111);
+                  break;
+               case 112:
+                  if ((0x800000008L & l) != 0L)
+                     jjAddStates(57, 58);
+                  break;
+               case 113:
+                  if ((0x4000000040000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 114;
+                  break;
+               case 115:
+                  if ((0x8000000080L & l) != 0L && kind > 204)
+                     kind = 204;
+                  break;
+               case 116:
+                  if ((0x400000004000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 115;
+                  break;
+               case 117:
+                  if ((0x20000000200L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 116;
+                  break;
+               case 118:
+                  if ((0x200000002000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 117;
+                  break;
+               case 119:
+                  if ((0x4000000040000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 118;
+                  break;
+               case 120:
+                  if ((0x200000002L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 119;
+                  break;
+               case 121:
+                  if ((0x40000000400000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 120;
+                  break;
+               case 124:
+                  if ((0x4000000040000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 125;
+                  break;
+               case 126:
+                  if ((0x8000000080L & l) != 0L && kind > 205)
+                     kind = 205;
+                  break;
+               case 127:
+                  if ((0x400000004000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 126;
+                  break;
+               case 128:
+                  if ((0x20000000200L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 127;
+                  break;
+               case 129:
+                  if ((0x200000002000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 128;
+                  break;
+               case 130:
+                  if ((0x4000000040000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 129;
+                  break;
+               case 131:
+                  if ((0x200000002L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 130;
+                  break;
+               case 132:
+                  if ((0x40000000400000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 131;
+                  break;
+               case 133:
+                  if ((0x2000000020L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 124;
+                  break;
+               case 134:
+                  if ((0x10000000100000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 133;
+                  break;
+               case 135:
+                  if ((0x800000008L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 134;
+                  break;
+               case 136:
+                  if ((0x200000002L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 135;
+                  break;
+               case 137:
+                  if ((0x4000000040000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 136;
+                  break;
+               case 138:
+                  if ((0x200000002L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 137;
+                  break;
+               case 139:
+                  if ((0x10000000100L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 138;
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      else
+      {
+         int hiByte = (int)(curChar >> 8);
+         int i1 = hiByte >> 6;
+         long l1 = 1L << (hiByte & 077);
+         int i2 = (curChar & 0xff) >> 6;
+         long l2 = 1L << (curChar & 077);
+         MatchLoop: do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 75:
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAddTwoStates(107, 108);
+                  }
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAdd(108);
+                  }
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddStates(49, 51);
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddTwoStates(110, 111);
+                  break;
+               case 142:
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAddTwoStates(107, 108);
+                  }
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAdd(108);
+                  }
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddStates(49, 51);
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddTwoStates(110, 111);
+                  break;
+               case 122:
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAddTwoStates(107, 108);
+                  }
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAdd(108);
+                  }
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddStates(49, 51);
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddTwoStates(110, 111);
+                  break;
+               case 55:
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAddTwoStates(107, 108);
+                  }
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAdd(108);
+                  }
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddStates(49, 51);
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddTwoStates(110, 111);
+                  break;
+               case 53:
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAddTwoStates(107, 108);
+                  }
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAdd(108);
+                  }
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddStates(49, 51);
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddTwoStates(110, 111);
+                  break;
+               case 52:
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAddTwoStates(107, 108);
+                  }
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAdd(108);
+                  }
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddStates(49, 51);
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddTwoStates(110, 111);
+                  break;
+               case 123:
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAddTwoStates(107, 108);
+                  }
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAdd(108);
+                  }
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddStates(49, 51);
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddTwoStates(110, 111);
+                  break;
+               case 0:
+                  if (jjCanMove_1(hiByte, i1, i2, l1, l2))
+                     jjAddStates(19, 20);
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAddStates(52, 56);
+                  }
+                  break;
+               case 76:
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAddTwoStates(107, 108);
+                  }
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAdd(108);
+                  }
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddStates(49, 51);
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddTwoStates(110, 111);
+                  break;
+               case 140:
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAddTwoStates(107, 108);
+                  }
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                  {
+                     if (kind > 164)
+                        kind = 164;
+                     jjCheckNAdd(108);
+                  }
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddStates(49, 51);
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddTwoStates(110, 111);
+                  break;
+               case 1:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddStates(21, 23);
+                  break;
+               case 4:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddStates(24, 26);
+                  break;
+               case 9:
+                  if (jjCanMove_1(hiByte, i1, i2, l1, l2))
+                     jjAddStates(19, 20);
+                  break;
+               case 27:
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddStates(65, 67);
+                  break;
+               case 28:
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddTwoStates(28, 29);
+                  break;
+               case 31:
+                  if (!jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 167)
+                     kind = 167;
+                  jjCheckNAddTwoStates(31, 32);
+                  break;
+               case 32:
+                  if (!jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 167)
+                     kind = 167;
+                  jjCheckNAdd(32);
+                  break;
+               case 34:
+                  if (!jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 169)
+                     kind = 169;
+                  jjCheckNAddTwoStates(34, 35);
+                  break;
+               case 35:
+                  if (!jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 169)
+                     kind = 169;
+                  jjCheckNAdd(35);
+                  break;
+               case 38:
+                  if (!jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 170)
+                     kind = 170;
+                  jjstateSet[jjnewStateCnt++] = 38;
+                  break;
+               case 96:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddStates(33, 35);
+                  break;
+               case 99:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddStates(36, 38);
+                  break;
+               case 101:
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddStates(39, 41);
+                  break;
+               case 104:
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddStates(42, 44);
+                  break;
+               case 106:
+                  if (!jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 164)
+                     kind = 164;
+                  jjCheckNAddStates(52, 56);
+                  break;
+               case 107:
+                  if (!jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 164)
+                     kind = 164;
+                  jjCheckNAddTwoStates(107, 108);
+                  break;
+               case 108:
+                  if (!jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 164)
+                     kind = 164;
+                  jjCheckNAdd(108);
+                  break;
+               case 109:
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddStates(49, 51);
+                  break;
+               case 110:
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddTwoStates(110, 111);
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      if (kind != 0x7fffffff)
+      {
+         jjmatchedKind = kind;
+         jjmatchedPos = curPos;
+         kind = 0x7fffffff;
+      }
+      ++curPos;
+      if ((i = jjnewStateCnt) == (startsAt = 140 - (jjnewStateCnt = startsAt)))
+         return curPos;
+      try { curChar = input_stream.readChar(); }
+      catch(java.io.IOException e) { return curPos; }
+   }
+}
+private final int jjMoveStringLiteralDfa0_2()
+{
+   switch(curChar)
+   {
+      case 42:
+         return jjMoveStringLiteralDfa1_2(0x800L);
+      case 47:
+         return jjMoveStringLiteralDfa1_2(0x400L);
+      default :
+         return 1;
+   }
+}
+private final int jjMoveStringLiteralDfa1_2(long active0)
+{
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      return 1;
+   }
+   switch(curChar)
+   {
+      case 42:
+         if ((active0 & 0x400L) != 0L)
+            return jjStopAtPos(1, 10);
+         break;
+      case 47:
+         if ((active0 & 0x800L) != 0L)
+            return jjStopAtPos(1, 11);
+         break;
+      default :
+         return 2;
+   }
+   return 2;
+}
+private final int jjMoveStringLiteralDfa0_1()
+{
+   return jjMoveNfa_1(0, 0);
+}
+private final int jjMoveNfa_1(int startState, int curPos)
+{
+   int[] nextStates;
+   int startsAt = 0;
+   jjnewStateCnt = 3;
+   int i = 1;
+   jjstateSet[0] = startState;
+   int j, kind = 0x7fffffff;
+   for (;;)
+   {
+      if (++jjround == 0x7fffffff)
+         ReInitRounds();
+      if (curChar < 64)
+      {
+         long l = 1L << curChar;
+         MatchLoop: do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 0:
+                  if ((0x2400L & l) != 0L)
+                  {
+                     if (kind > 7)
+                        kind = 7;
+                  }
+                  if (curChar == 13)
+                     jjstateSet[jjnewStateCnt++] = 1;
+                  break;
+               case 1:
+                  if (curChar == 10 && kind > 7)
+                     kind = 7;
+                  break;
+               case 2:
+                  if (curChar == 13)
+                     jjstateSet[jjnewStateCnt++] = 1;
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      else if (curChar < 128)
+      {
+         long l = 1L << (curChar & 077);
+         MatchLoop: do
+         {
+            switch(jjstateSet[--i])
+            {
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      else
+      {
+         int hiByte = (int)(curChar >> 8);
+         int i1 = hiByte >> 6;
+         long l1 = 1L << (hiByte & 077);
+         int i2 = (curChar & 0xff) >> 6;
+         long l2 = 1L << (curChar & 077);
+         MatchLoop: do
+         {
+            switch(jjstateSet[--i])
+            {
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      if (kind != 0x7fffffff)
+      {
+         jjmatchedKind = kind;
+         jjmatchedPos = curPos;
+         kind = 0x7fffffff;
+      }
+      ++curPos;
+      if ((i = jjnewStateCnt) == (startsAt = 3 - (jjnewStateCnt = startsAt)))
+         return curPos;
+      try { curChar = input_stream.readChar(); }
+      catch(java.io.IOException e) { return curPos; }
+   }
+}
+static final int[] jjnextStates = {
+   16, 17, 22, 23, 79, 80, 81, 86, 87, 16, 17, 22, 23, 96, 98, 100, 
+   101, 103, 105, 10, 15, 1, 3, 5, 3, 4, 5, 28, 29, 40, 49, 65, 
+   74, 96, 98, 100, 98, 99, 100, 101, 103, 105, 103, 104, 105, 114, 121, 125, 
+   132, 109, 110, 111, 107, 108, 109, 110, 111, 123, 139, 13, 14, 20, 21, 24, 
+   25, 27, 28, 29, 84, 85, 88, 89, 93, 94, 
+};
+private static final boolean jjCanMove_0(int hiByte, int i1, int i2, long l1, long l2)
+{
+   switch(hiByte)
+   {
+      case 0:
+         return ((jjbitVec0[i2] & l2) != 0L);
+      default : 
+         return false;
+   }
+}
+private static final boolean jjCanMove_1(int hiByte, int i1, int i2, long l1, long l2)
+{
+   switch(hiByte)
+   {
+      case 0:
+         return ((jjbitVec1[i2] & l2) != 0L);
+      default : 
+         return false;
+   }
+}
+private static final boolean jjCanMove_2(int hiByte, int i1, int i2, long l1, long l2)
+{
+   switch(hiByte)
+   {
+      case 0:
+         return ((jjbitVec0[i2] & l2) != 0L);
+      default : 
+         if ((jjbitVec2[i1] & l1) != 0L)
+            return true;
+         return false;
+   }
+}
+public static final String[] jjstrLiteralImages = {
+"", null, null, null, null, null, null, null, null, null, null, null, null, 
+"\41\45\136\46", null, null, null, null, null, null, null, null, null, null, null, null, null, 
+null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
+null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
+null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
+null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
+null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
+null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
+null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
+null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
+null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
+null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
+null, null, null, null, null, null, null, null, null, null, null, "\174\174", "\54", 
+"\73", "\56", null, "\176", "\74", "\74\75", "\76", "\76\75", "\75", "\41\75", 
+"\50\53\51", "\50", "\51", "\52", "\57", "\53", "\55", "\77", "\52\75", "\75\52", "\76\76", 
+null, null, null, null, null, "\72", "\41", "\41\76", "\41\74", "\74\76", "\174", 
+"\46", "\136", "\45", };
+public static final String[] lexStateNames = {
+   "DEFAULT", 
+   "IN_SINGLE_LINE_COMMENT", 
+   "IN_MULTI_LINE_COMMENT", 
+};
+public static final int[] jjnewLexState = {
+   -1, -1, -1, -1, -1, -1, 1, 0, -1, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+};
+static final long[] jjtoToken = {
+   0xffffffffffffe001L, 0xffffffffffffffffL, 0xfffe07bbbfffffffL, 0x7fffffL, 
+};
+static final long[] jjtoSkip = {
+   0x8beL, 0x0L, 0x0L, 0x0L, 
+};
+static final long[] jjtoSpecial = {
+   0x880L, 0x0L, 0x0L, 0x0L, 
+};
+static final long[] jjtoMore = {
+   0x1740L, 0x0L, 0x0L, 0x0L, 
+};
+protected SimpleCharStream input_stream;
+private final int[] jjrounds = new int[140];
+private final int[] jjstateSet = new int[280];
+StringBuffer image;
+int jjimageLen;
+int lengthOfMatch;
+protected char curChar;
+public IngresSQLParserTokenManager(SimpleCharStream stream){
+   if (SimpleCharStream.staticFlag)
+      throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.");
+   input_stream = stream;
+}
+public IngresSQLParserTokenManager(SimpleCharStream stream, int lexState){
+   this(stream);
+   SwitchTo(lexState);
+}
+public void ReInit(SimpleCharStream stream)
+{
+   jjmatchedPos = jjnewStateCnt = 0;
+   curLexState = defaultLexState;
+   input_stream = stream;
+   ReInitRounds();
+}
+private final void ReInitRounds()
+{
+   int i;
+   jjround = 0x80000001;
+   for (i = 140; i-- > 0;)
+      jjrounds[i] = 0x80000000;
+}
+public void ReInit(SimpleCharStream stream, int lexState)
+{
+   ReInit(stream);
+   SwitchTo(lexState);
+}
+public void SwitchTo(int lexState)
+{
+   if (lexState >= 3 || lexState < 0)
+      throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
+   else
+      curLexState = lexState;
+}
+
+protected Token jjFillToken()
+{
+   Token t = Token.newToken(jjmatchedKind);
+   t.kind = jjmatchedKind;
+   String im = jjstrLiteralImages[jjmatchedKind];
+   t.image = (im == null) ? input_stream.GetImage() : im;
+   t.beginLine = input_stream.getBeginLine();
+   t.beginColumn = input_stream.getBeginColumn();
+   t.endLine = input_stream.getEndLine();
+   t.endColumn = input_stream.getEndColumn();
+   return t;
+}
+
+int curLexState = 0;
+int defaultLexState = 0;
+int jjnewStateCnt;
+int jjround;
+int jjmatchedPos;
+int jjmatchedKind;
+
+public Token getNextToken() 
+{
+  int kind;
+  Token specialToken = null;
+  Token matchedToken;
+  int curPos = 0;
+
+  EOFLoop :
+  for (;;)
+  {   
+   try   
+   {     
+      curChar = input_stream.BeginToken();
+   }     
+   catch(java.io.IOException e)
+   {        
+      jjmatchedKind = 0;
+      matchedToken = jjFillToken();
+      matchedToken.specialToken = specialToken;
+      return matchedToken;
+   }
+   image = null;
+   jjimageLen = 0;
+
+   for (;;)
+   {
+     switch(curLexState)
+     {
+       case 0:
+         try { input_stream.backup(0);
+            while (curChar <= 32 && (0x100003600L & (1L << curChar)) != 0L)
+               curChar = input_stream.BeginToken();
+         }
+         catch (java.io.IOException e1) { continue EOFLoop; }
+         jjmatchedKind = 0x7fffffff;
+         jjmatchedPos = 0;
+         curPos = jjMoveStringLiteralDfa0_0();
+         break;
+       case 1:
+         jjmatchedKind = 0x7fffffff;
+         jjmatchedPos = 0;
+         curPos = jjMoveStringLiteralDfa0_1();
+         if (jjmatchedPos == 0 && jjmatchedKind > 8)
+         {
+            jjmatchedKind = 8;
+         }
+         break;
+       case 2:
+         jjmatchedKind = 0x7fffffff;
+         jjmatchedPos = 0;
+         curPos = jjMoveStringLiteralDfa0_2();
+         if (jjmatchedPos == 0 && jjmatchedKind > 12)
+         {
+            jjmatchedKind = 12;
+         }
+         break;
+     }
+     if (jjmatchedKind != 0x7fffffff)
+     {
+        if (jjmatchedPos + 1 < curPos)
+           input_stream.backup(curPos - jjmatchedPos - 1);
+        if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
+        {
+           matchedToken = jjFillToken();
+           matchedToken.specialToken = specialToken;
+       if (jjnewLexState[jjmatchedKind] != -1)
+         curLexState = jjnewLexState[jjmatchedKind];
+           return matchedToken;
+        }
+        else if ((jjtoSkip[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
+        {
+           if ((jjtoSpecial[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
+           {
+              matchedToken = jjFillToken();
+              if (specialToken == null)
+                 specialToken = matchedToken;
+              else
+              {
+                 matchedToken.specialToken = specialToken;
+                 specialToken = (specialToken.next = matchedToken);
+              }
+              SkipLexicalActions(matchedToken);
+           }
+           else 
+              SkipLexicalActions(null);
+         if (jjnewLexState[jjmatchedKind] != -1)
+           curLexState = jjnewLexState[jjmatchedKind];
+           continue EOFLoop;
+        }
+        MoreLexicalActions();
+      if (jjnewLexState[jjmatchedKind] != -1)
+        curLexState = jjnewLexState[jjmatchedKind];
+        curPos = 0;
+        jjmatchedKind = 0x7fffffff;
+        try {
+           curChar = input_stream.readChar();
+           continue;
+        }
+        catch (java.io.IOException e1) { }
+     }
+     int error_line = input_stream.getEndLine();
+     int error_column = input_stream.getEndColumn();
+     String error_after = null;
+     boolean EOFSeen = false;
+     try { input_stream.readChar(); input_stream.backup(1); }
+     catch (java.io.IOException e1) {
+        EOFSeen = true;
+        error_after = curPos <= 1 ? "" : input_stream.GetImage();
+        if (curChar == '\n' || curChar == '\r') {
+           error_line++;
+           error_column = 0;
+        }
+        else
+           error_column++;
+     }
+     if (!EOFSeen) {
+        input_stream.backup(1);
+        error_after = curPos <= 1 ? "" : input_stream.GetImage();
+     }
+     throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR);
+   }
+  }
+}
+
+void SkipLexicalActions(Token matchedToken)
+{
+   switch(jjmatchedKind)
+   {
+      case 11 :
+         if (image == null)
+            image = new StringBuffer();
+         image.append(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
+                commentNestingDepth -= 1;
+            SwitchTo( commentNestingDepth==0 ? DEFAULT : IN_MULTI_LINE_COMMENT );
+         break;
+      default :
+         break;
+   }
+}
+void MoreLexicalActions()
+{
+   jjimageLen += (lengthOfMatch = jjmatchedPos + 1);
+   switch(jjmatchedKind)
+   {
+      case 9 :
+         if (image == null)
+            image = new StringBuffer();
+         image.append(input_stream.GetSuffix(jjimageLen));
+         jjimageLen = 0;
+                         commentNestingDepth = 1 ;
+         break;
+      case 10 :
+         if (image == null)
+            image = new StringBuffer();
+         image.append(input_stream.GetSuffix(jjimageLen));
+         jjimageLen = 0;
+                                                    commentNestingDepth += 1 ;
+         break;
+      default : 
+         break;
+   }
+}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/IngresSQLParserTreeConstants.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/IngresSQLParserTreeConstants.java
new file mode 100644
index 0000000..a8e3d51
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/IngresSQLParserTreeConstants.java
@@ -0,0 +1,29 @@
+/* Generated By:JJTree: Do not edit this line. ..\src\org\eclipse\datatools\enablement\ingres\internal\parser\IngresSQLParserTreeConstants.java */
+
+package org.eclipse.datatools.enablement.ingres.internal.ui.parser;
+
+public interface IngresSQLParserTreeConstants
+{
+  public int JJTVOID = 0;
+  public int JJTSTART = 1;
+  public int JJTSQLDELIMITER = 2;
+  public int JJTSQLSTATEMENT = 3;
+  public int JJTSQLDATATYPE = 4;
+  public int JJTDECLAREKEYWORD = 5;
+  public int JJTDECLARECOMMA = 6;
+  public int JJTSQLPARAM = 7;
+  public int JJTEXPRESSION = 8;
+
+
+  public String[] jjtNodeName = {
+    "void",
+    "Start",
+    "SQLDelimiter",
+    "SQLStatement",
+    "SQLDataType",
+    "DeclareKeyword",
+    "DeclareComma",
+    "SQLParam",
+    "Expression",
+  };
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/IngresSQLParserVisitor.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/IngresSQLParserVisitor.java
new file mode 100644
index 0000000..e8cca82
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/IngresSQLParserVisitor.java
@@ -0,0 +1,16 @@
+/* Generated By:JJTree: Do not edit this line. ..\src\org\eclipse\datatools\enablement\ingres\internal\parser\IngresSQLParserVisitor.java */
+
+package org.eclipse.datatools.enablement.ingres.internal.ui.parser;
+
+public interface IngresSQLParserVisitor
+{
+  public Object visit(SimpleNode node, Object data);
+  public Object visit(ASTStart node, Object data);
+  public Object visit(ASTSQLDelimiter node, Object data);
+  public Object visit(ASTSQLStatement node, Object data);
+  public Object visit(ASTSQLDataType node, Object data);
+  public Object visit(ASTDeclareKeyword node, Object data);
+  public Object visit(ASTDeclareComma node, Object data);
+  public Object visit(ASTSQLParam node, Object data);
+  public Object visit(ASTExpression node, Object data);
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/IngresSimpleNode.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/IngresSimpleNode.java
new file mode 100644
index 0000000..2293e51
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/IngresSimpleNode.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.parser;
+
+import org.eclipse.datatools.sqltools.sql.parser.SQLParser;
+import org.eclipse.datatools.sqltools.sql.parser.ast.Node;
+
+public class IngresSimpleNode extends org.eclipse.datatools.sqltools.sql.parser.ast.SimpleNode implements Node {
+
+    public IngresSimpleNode(int i) {
+        super(i);
+    }
+
+    public IngresSimpleNode(SQLParser p, int i) {
+        super(p, i);
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/JJTIngresSQLParserState.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/JJTIngresSQLParserState.java
new file mode 100644
index 0000000..4157fe3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/JJTIngresSQLParserState.java
@@ -0,0 +1,132 @@
+/* Generated By:JJTree: Do not edit this line. ..\src\org\eclipse\datatools\sqltools\db\ingres\parser\JJTIngresSQLParserState.java */
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.parser;
+
+class JJTIngresSQLParserState {
+  private java.util.Stack nodes;
+  private java.util.Stack marks;
+
+  private int sp;		// number of nodes on stack
+  private int mk;		// current mark
+  private boolean node_created;
+
+  JJTIngresSQLParserState() {
+    nodes = new java.util.Stack();
+    marks = new java.util.Stack();
+    sp = 0;
+    mk = 0;
+  }
+
+  /* Determines whether the current node was actually closed and
+     pushed.  This should only be called in the final user action of a
+     node scope.  */
+  boolean nodeCreated() {
+    return node_created;
+  }
+
+  /* Call this to reinitialize the node stack.  It is called
+     automatically by the parser's ReInit() method. */
+  void reset() {
+    nodes.removeAllElements();
+    marks.removeAllElements();
+    sp = 0;
+    mk = 0;
+  }
+
+  /* Returns the root node of the AST.  It only makes sense to call
+     this after a successful parse. */
+  Node rootNode() {
+    return (Node)nodes.elementAt(0);
+  }
+
+  /* Pushes a node on to the stack. */
+  void pushNode(Node n) {
+    nodes.push(n);
+    ++sp;
+  }
+
+  /* Returns the node on the top of the stack, and remove it from the
+     stack.  */
+  Node popNode() {
+    if (--sp < mk) {
+      mk = ((Integer)marks.pop()).intValue();
+    }
+    return (Node)nodes.pop();
+  }
+
+  /* Returns the node currently on the top of the stack. */
+  Node peekNode() {
+    return (Node)nodes.peek();
+  }
+
+  /* Returns the number of children on the stack in the current node
+     scope. */
+  int nodeArity() {
+    return sp - mk;
+  }
+
+
+  void clearNodeScope(Node n) {
+    while (sp > mk) {
+      popNode();
+    }
+    mk = ((Integer)marks.pop()).intValue();
+  }
+
+
+  void openNodeScope(Node n) {
+    marks.push(new Integer(mk));
+    mk = sp;
+    n.jjtOpen();
+  }
+
+
+  /* A definite node is constructed from a specified number of
+     children.  That number of nodes are popped from the stack and
+     made the children of the definite node.  Then the definite node
+     is pushed on to the stack. */
+  void closeNodeScope(Node n, int num) {
+    mk = ((Integer)marks.pop()).intValue();
+    while (num-- > 0) {
+      Node c = popNode();
+      c.jjtSetParent(n);
+      n.jjtAddChild(c, num);
+    }
+    n.jjtClose();
+    pushNode(n);
+    node_created = true;
+  }
+
+
+  /* A conditional node is constructed if its condition is true.  All
+     the nodes that have been pushed since the node was opened are
+     made children of the the conditional node, which is then pushed
+     on to the stack.  If the condition is false the node is not
+     constructed and they are left on the stack. */
+  void closeNodeScope(Node n, boolean condition) {
+    if (condition) {
+      int a = nodeArity();
+      mk = ((Integer)marks.pop()).intValue();
+      while (a-- > 0) {
+	Node c = popNode();
+	c.jjtSetParent(n);
+	n.jjtAddChild(c, a);
+      }
+      n.jjtClose();
+      pushNode(n);
+      node_created = true;
+    } else {
+      mk = ((Integer)marks.pop()).intValue();
+      node_created = false;
+    }
+  }
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/Node.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/Node.java
new file mode 100644
index 0000000..7b85947
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/Node.java
@@ -0,0 +1,24 @@
+/* Generated By:JJTree: Do not edit this line. Node.java */
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.parser;
+
+/*
+ * All AST nodes must implement this interface. It provides basic machinery for
+ * constructing the parent and child relationships between nodes.
+ */
+public interface Node extends
+		org.eclipse.datatools.sqltools.sql.parser.ast.Node {
+
+	/** Accept the visitor. * */
+	public Object jjtAccept(IngresSQLParserVisitor visitor, Object data);
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/ParseException.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/ParseException.java
new file mode 100644
index 0000000..53c9d36
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/ParseException.java
@@ -0,0 +1,202 @@
+/* Generated By:JavaCC: Do not edit this line. ParseException.java Version 3.0 */
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.parser;
+
+/**
+ * This exception is thrown when parse errors are encountered.
+ * You can explicitly create objects of this exception type by
+ * calling the method generateParseException in the generated
+ * parser.
+ *
+ * You can modify this class to customize your error reporting
+ * mechanisms so long as you retain the public fields.
+ */
+public class ParseException extends Exception {
+
+  /**
+   * This constructor is used by the method "generateParseException"
+   * in the generated parser.  Calling this constructor generates
+   * a new object of this type with the fields "currentToken",
+   * "expectedTokenSequences", and "tokenImage" set.  The boolean
+   * flag "specialConstructor" is also set to true to indicate that
+   * this constructor was used to create this object.
+   * This constructor calls its super class with the empty string
+   * to force the "toString" method of parent class "Throwable" to
+   * print the error message in the form:
+   *     ParseException: <result of getMessage>
+   */
+  public ParseException(Token currentTokenVal,
+                        int[][] expectedTokenSequencesVal,
+                        String[] tokenImageVal
+                       )
+  {
+    super("");
+    specialConstructor = true;
+    currentToken = currentTokenVal;
+    expectedTokenSequences = expectedTokenSequencesVal;
+    tokenImage = tokenImageVal;
+  }
+
+  /**
+   * The following constructors are for use by you for whatever
+   * purpose you can think of.  Constructing the exception in this
+   * manner makes the exception behave in the normal way - i.e., as
+   * documented in the class "Throwable".  The fields "errorToken",
+   * "expectedTokenSequences", and "tokenImage" do not contain
+   * relevant information.  The JavaCC generated code does not use
+   * these constructors.
+   */
+
+  public ParseException() {
+    super();
+    specialConstructor = false;
+  }
+
+  public ParseException(String message) {
+    super(message);
+    specialConstructor = false;
+  }
+
+  /**
+   * This variable determines which constructor was used to create
+   * this object and thereby affects the semantics of the
+   * "getMessage" method (see below).
+   */
+  protected boolean specialConstructor;
+
+  /**
+   * This is the last token that has been consumed successfully.  If
+   * this object has been created due to a parse error, the token
+   * followng this token will (therefore) be the first error token.
+   */
+  public Token currentToken;
+
+  /**
+   * Each entry in this array is an array of integers.  Each array
+   * of integers represents a sequence of tokens (by their ordinal
+   * values) that is expected at this point of the parse.
+   */
+  public int[][] expectedTokenSequences;
+
+  /**
+   * This is a reference to the "tokenImage" array of the generated
+   * parser within which the parse error occurred.  This array is
+   * defined in the generated ...Constants interface.
+   */
+  public String[] tokenImage;
+
+  /**
+   * This method has the standard behavior when this object has been
+   * created using the standard constructors.  Otherwise, it uses
+   * "currentToken" and "expectedTokenSequences" to generate a parse
+   * error message and returns it.  If this object has been created
+   * due to a parse error, and you do not catch it (it gets thrown
+   * from the parser), then this method is called during the printing
+   * of the final stack trace, and hence the correct error message
+   * gets displayed.
+   */
+  public String getMessage() {
+    if (!specialConstructor) {
+      return super.getMessage();
+    }
+    StringBuffer expected = new StringBuffer();
+    int maxSize = 0;
+    for (int i = 0; i < expectedTokenSequences.length; i++) {
+      if (maxSize < expectedTokenSequences[i].length) {
+        maxSize = expectedTokenSequences[i].length;
+      }
+      for (int j = 0; j < expectedTokenSequences[i].length; j++) {
+        expected.append(tokenImage[expectedTokenSequences[i][j]]).append(" ");
+      }
+      if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) {
+        expected.append("...");
+      }
+      expected.append(eol).append("    ");
+    }
+    String retval = "Encountered \"";
+    Token tok = currentToken.next;
+    for (int i = 0; i < maxSize; i++) {
+      if (i != 0) retval += " ";
+      if (tok.kind == 0) {
+        retval += tokenImage[0];
+        break;
+      }
+      retval += add_escapes(tok.image);
+      tok = tok.next; 
+    }
+    retval += "\" at line " + currentToken.next.beginLine + ", column " + currentToken.next.beginColumn;
+    retval += "." + eol;
+    if (expectedTokenSequences.length == 1) {
+      retval += "Was expecting:" + eol + "    ";
+    } else {
+      retval += "Was expecting one of:" + eol + "    ";
+    }
+    retval += expected.toString();
+    return retval;
+  }
+
+  /**
+   * The end of line string for this machine.
+   */
+  protected String eol = System.getProperty("line.separator", "\n");
+ 
+  /**
+   * Used to convert raw characters to their escaped version
+   * when these raw version cannot be used as part of an ASCII
+   * string literal.
+   */
+  protected String add_escapes(String str) {
+      StringBuffer retval = new StringBuffer();
+      char ch;
+      for (int i = 0; i < str.length(); i++) {
+        switch (str.charAt(i))
+        {
+           case 0 :
+              continue;
+           case '\b':
+              retval.append("\\b");
+              continue;
+           case '\t':
+              retval.append("\\t");
+              continue;
+           case '\n':
+              retval.append("\\n");
+              continue;
+           case '\f':
+              retval.append("\\f");
+              continue;
+           case '\r':
+              retval.append("\\r");
+              continue;
+           case '\"':
+              retval.append("\\\"");
+              continue;
+           case '\'':
+              retval.append("\\\'");
+              continue;
+           case '\\':
+              retval.append("\\\\");
+              continue;
+           default:
+              if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
+                 String s = "0000" + Integer.toString(ch, 16);
+                 retval.append("\\u" + s.substring(s.length() - 4, s.length()));
+              } else {
+                 retval.append(ch);
+              }
+              continue;
+        }
+      }
+      return retval.toString();
+   }
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/SimpleCharStream.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/SimpleCharStream.java
new file mode 100644
index 0000000..4e56092
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/SimpleCharStream.java
@@ -0,0 +1,454 @@
+/* Generated By:JavaCC: Do not edit this line. SimpleCharStream.java Version 4.0 */
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.parser;
+
+/**
+ * An implementation of interface CharStream, where the stream is assumed to
+ * contain only ASCII characters (without unicode processing).
+ * 
+ * Changed default tabSize from 8 to 1.
+ * JavaCC generates SimpleCharStream with default tab size of 8 characters, that
+ * conflicts with the "real" document size and generates errors when retrieving
+ * parts of the SQL source from the document
+ */
+
+public class SimpleCharStream
+{
+  public static final boolean staticFlag = false;
+  int bufsize;
+  int available;
+  int tokenBegin;
+  public int bufpos = -1;
+  protected int bufline[];
+  protected int bufcolumn[];
+
+  protected int column = 0;
+  protected int line = 1;
+
+  protected boolean prevCharIsCR = false;
+  protected boolean prevCharIsLF = false;
+
+  protected java.io.Reader inputStream;
+
+  protected char[] buffer;
+  protected int maxNextCharInd = 0;
+  protected int inBuf = 0;
+  protected int tabSize = 1;
+
+  protected void setTabSize(int i) { tabSize = i; }
+  protected int getTabSize(int i) { return tabSize; }
+
+
+  protected void ExpandBuff(boolean wrapAround)
+  {
+     char[] newbuffer = new char[bufsize + 2048];
+     int newbufline[] = new int[bufsize + 2048];
+     int newbufcolumn[] = new int[bufsize + 2048];
+
+     try
+     {
+        if (wrapAround)
+        {
+           System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
+           System.arraycopy(buffer, 0, newbuffer,
+                                             bufsize - tokenBegin, bufpos);
+           buffer = newbuffer;
+
+           System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
+           System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);
+           bufline = newbufline;
+
+           System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
+           System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);
+           bufcolumn = newbufcolumn;
+
+           maxNextCharInd = (bufpos += (bufsize - tokenBegin));
+        }
+        else
+        {
+           System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
+           buffer = newbuffer;
+
+           System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
+           bufline = newbufline;
+
+           System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
+           bufcolumn = newbufcolumn;
+
+           maxNextCharInd = (bufpos -= tokenBegin);
+        }
+     }
+     catch (Throwable t)
+     {
+        throw new Error(t.getMessage());
+     }
+
+
+     bufsize += 2048;
+     available = bufsize;
+     tokenBegin = 0;
+  }
+
+  protected void FillBuff() throws java.io.IOException
+  {
+     if (maxNextCharInd == available)
+     {
+        if (available == bufsize)
+        {
+           if (tokenBegin > 2048)
+           {
+              bufpos = maxNextCharInd = 0;
+              available = tokenBegin;
+           }
+           else if (tokenBegin < 0)
+              bufpos = maxNextCharInd = 0;
+           else
+              ExpandBuff(false);
+        }
+        else if (available > tokenBegin)
+           available = bufsize;
+        else if ((tokenBegin - available) < 2048)
+           ExpandBuff(true);
+        else
+           available = tokenBegin;
+     }
+
+     int i;
+     try {
+        if ((i = inputStream.read(buffer, maxNextCharInd,
+                                    available - maxNextCharInd)) == -1)
+        {
+           inputStream.close();
+           throw new java.io.IOException();
+        }
+        else
+           maxNextCharInd += i;
+        return;
+     }
+     catch(java.io.IOException e) {
+        --bufpos;
+        backup(0);
+        if (tokenBegin == -1)
+           tokenBegin = bufpos;
+        throw e;
+     }
+  }
+
+  public char BeginToken() throws java.io.IOException
+  {
+     tokenBegin = -1;
+     char c = readChar();
+     tokenBegin = bufpos;
+
+     return c;
+  }
+
+  protected void UpdateLineColumn(char c)
+  {
+     column++;
+
+     if (prevCharIsLF)
+     {
+        prevCharIsLF = false;
+        line += (column = 1);
+     }
+     else if (prevCharIsCR)
+     {
+        prevCharIsCR = false;
+        if (c == '\n')
+        {
+           prevCharIsLF = true;
+        }
+        else
+           line += (column = 1);
+     }
+
+     switch (c)
+     {
+        case '\r' :
+           prevCharIsCR = true;
+           break;
+        case '\n' :
+           prevCharIsLF = true;
+           break;
+        case '\t' :
+           column--;
+           column += (tabSize - (column % tabSize));
+           break;
+        default :
+           break;
+     }
+
+     bufline[bufpos] = line;
+     bufcolumn[bufpos] = column;
+  }
+
+  public char readChar() throws java.io.IOException
+  {
+     if (inBuf > 0)
+     {
+        --inBuf;
+
+        if (++bufpos == bufsize)
+           bufpos = 0;
+
+        return buffer[bufpos];
+     }
+
+     if (++bufpos >= maxNextCharInd)
+        FillBuff();
+
+     char c = buffer[bufpos];
+
+     UpdateLineColumn(c);
+     return (c);
+  }
+
+  /**
+   * @deprecated 
+   * @see #getEndColumn
+   */
+
+  public int getColumn() {
+     return bufcolumn[bufpos];
+  }
+
+  /**
+   * @deprecated 
+   * @see #getEndLine
+   */
+
+  public int getLine() {
+     return bufline[bufpos];
+  }
+
+  public int getEndColumn() {
+     return bufcolumn[bufpos];
+  }
+
+  public int getEndLine() {
+     return bufline[bufpos];
+  }
+
+  public int getBeginColumn() {
+     return bufcolumn[tokenBegin];
+  }
+
+  public int getBeginLine() {
+     return bufline[tokenBegin];
+  }
+
+  public void backup(int amount) {
+
+    inBuf += amount;
+    if ((bufpos -= amount) < 0)
+       bufpos += bufsize;
+  }
+
+  public SimpleCharStream(java.io.Reader dstream, int startline,
+  int startcolumn, int buffersize)
+  {
+    inputStream = dstream;
+    line = startline;
+    column = startcolumn - 1;
+
+    available = bufsize = buffersize;
+    buffer = new char[buffersize];
+    bufline = new int[buffersize];
+    bufcolumn = new int[buffersize];
+  }
+
+  public SimpleCharStream(java.io.Reader dstream, int startline,
+                          int startcolumn)
+  {
+     this(dstream, startline, startcolumn, 4096);
+  }
+
+  public SimpleCharStream(java.io.Reader dstream)
+  {
+     this(dstream, 1, 1, 4096);
+  }
+  public void ReInit(java.io.Reader dstream, int startline,
+  int startcolumn, int buffersize)
+  {
+    inputStream = dstream;
+    line = startline;
+    column = startcolumn - 1;
+
+    if (buffer == null || buffersize != buffer.length)
+    {
+      available = bufsize = buffersize;
+      buffer = new char[buffersize];
+      bufline = new int[buffersize];
+      bufcolumn = new int[buffersize];
+    }
+    prevCharIsLF = prevCharIsCR = false;
+    tokenBegin = inBuf = maxNextCharInd = 0;
+    bufpos = -1;
+  }
+
+  public void ReInit(java.io.Reader dstream, int startline,
+                     int startcolumn)
+  {
+     ReInit(dstream, startline, startcolumn, 4096);
+  }
+
+  public void ReInit(java.io.Reader dstream)
+  {
+     ReInit(dstream, 1, 1, 4096);
+  }
+  public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,
+  int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
+  {
+     this(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
+  }
+
+  public SimpleCharStream(java.io.InputStream dstream, int startline,
+  int startcolumn, int buffersize)
+  {
+     this(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
+  }
+
+  public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,
+                          int startcolumn) throws java.io.UnsupportedEncodingException
+  {
+     this(dstream, encoding, startline, startcolumn, 4096);
+  }
+
+  public SimpleCharStream(java.io.InputStream dstream, int startline,
+                          int startcolumn)
+  {
+     this(dstream, startline, startcolumn, 4096);
+  }
+
+  public SimpleCharStream(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
+  {
+     this(dstream, encoding, 1, 1, 4096);
+  }
+
+  public SimpleCharStream(java.io.InputStream dstream)
+  {
+     this(dstream, 1, 1, 4096);
+  }
+
+  public void ReInit(java.io.InputStream dstream, String encoding, int startline,
+                          int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
+  {
+     ReInit(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
+  }
+
+  public void ReInit(java.io.InputStream dstream, int startline,
+                          int startcolumn, int buffersize)
+  {
+     ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
+  }
+
+  public void ReInit(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
+  {
+     ReInit(dstream, encoding, 1, 1, 4096);
+  }
+
+  public void ReInit(java.io.InputStream dstream)
+  {
+     ReInit(dstream, 1, 1, 4096);
+  }
+  public void ReInit(java.io.InputStream dstream, String encoding, int startline,
+                     int startcolumn) throws java.io.UnsupportedEncodingException
+  {
+     ReInit(dstream, encoding, startline, startcolumn, 4096);
+  }
+  public void ReInit(java.io.InputStream dstream, int startline,
+                     int startcolumn)
+  {
+     ReInit(dstream, startline, startcolumn, 4096);
+  }
+  public String GetImage()
+  {
+     if (bufpos >= tokenBegin)
+        return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);
+     else
+        return new String(buffer, tokenBegin, bufsize - tokenBegin) +
+                              new String(buffer, 0, bufpos + 1);
+  }
+
+  public char[] GetSuffix(int len)
+  {
+     char[] ret = new char[len];
+
+     if ((bufpos + 1) >= len)
+        System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);
+     else
+     {
+        System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0,
+                                                          len - bufpos - 1);
+        System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);
+     }
+
+     return ret;
+  }
+
+  public void Done()
+  {
+     buffer = null;
+     bufline = null;
+     bufcolumn = null;
+  }
+
+  /**
+   * Method to adjust line and column numbers for the start of a token.
+   */
+  public void adjustBeginLineColumn(int newLine, int newCol)
+  {
+     int start = tokenBegin;
+     int len;
+
+     if (bufpos >= tokenBegin)
+     {
+        len = bufpos - tokenBegin + inBuf + 1;
+     }
+     else
+     {
+        len = bufsize - tokenBegin + bufpos + 1 + inBuf;
+     }
+
+     int i = 0, j = 0, k = 0;
+     int nextColDiff = 0, columnDiff = 0;
+
+     while (i < len &&
+            bufline[j = start % bufsize] == bufline[k = ++start % bufsize])
+     {
+        bufline[j] = newLine;
+        nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];
+        bufcolumn[j] = newCol + columnDiff;
+        columnDiff = nextColDiff;
+        i++;
+     } 
+
+     if (i < len)
+     {
+        bufline[j] = newLine++;
+        bufcolumn[j] = newCol + columnDiff;
+
+        while (i++ < len)
+        {
+           if (bufline[j = start % bufsize] != bufline[++start % bufsize])
+              bufline[j] = newLine++;
+           else
+              bufline[j] = newLine;
+        }
+     }
+
+     line = bufline[j];
+     column = bufcolumn[j];
+  }
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/SimpleNode.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/SimpleNode.java
new file mode 100644
index 0000000..c78dd84
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/SimpleNode.java
@@ -0,0 +1,80 @@
+/* Generated By:JJTree: Do not edit this line. SimpleNode.java */
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.parser;
+
+import org.eclipse.datatools.sqltools.sql.parser.SQLParser;
+
+public class SimpleNode extends org.eclipse.datatools.sqltools.sql.parser.ast.SimpleNode implements Node {
+    protected Node parent;
+
+    protected Node[] children;
+
+    protected int id;
+
+    protected IngresSQLParser parser;
+
+    public SimpleNode(int i) {
+        super(i);
+    }
+
+    public SimpleNode(IngresSQLParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    /** Accept the visitor. * */
+    public Object jjtAccept(IngresSQLParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    /** Accept the visitor. * */
+    public Object childrenAccept(IngresSQLParserVisitor visitor, Object data) {
+        if (children != null) {
+            for (int i = 0; i < children.length; ++i) {
+                children[i].jjtAccept(visitor, data);
+            }
+        }
+        return data;
+    }
+
+    /*
+     * You can override these two methods in subclasses of SimpleNode to
+     * customize the way the node appears when the tree is dumped. If your
+     * output uses more than one line you should override toString(String),
+     * otherwise overriding toString() is probably all you need to do.
+     */
+
+    public String toString() {
+        return IngresSQLParserTreeConstants.jjtNodeName[id];
+    }
+
+    public String toString(String prefix) {
+        return prefix + toString();
+    }
+
+    /*
+     * Override this method if you want to customize how the node dumps out its
+     * children.
+     */
+
+    public void dump(String prefix) {
+        System.out.println(toString(prefix));
+        if (children != null) {
+            for (int i = 0; i < children.length; ++i) {
+                SimpleNode n = (SimpleNode) children[i];
+                if (n != null) {
+                    n.dump(prefix + " ");
+                }
+            }
+        }
+    }
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/Token.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/Token.java
new file mode 100644
index 0000000..3c681ae
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/Token.java
@@ -0,0 +1,91 @@
+/* Generated By:JavaCC: Do not edit this line. Token.java Version 3.0 */
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.parser;
+
+/**
+ * Describes the input token stream.
+ */
+
+public class Token {
+
+  /**
+   * An integer that describes the kind of this token.  This numbering
+   * system is determined by JavaCCParser, and a table of these numbers is
+   * stored in the file ...Constants.java.
+   */
+  public int kind;
+
+  /**
+   * beginLine and beginColumn describe the position of the first character
+   * of this token; endLine and endColumn describe the position of the
+   * last character of this token.
+   */
+  public int beginLine, beginColumn, endLine, endColumn;
+
+  /**
+   * The string image of the token.
+   */
+  public String image;
+
+  /**
+   * A reference to the next regular (non-special) token from the input
+   * stream.  If this is the last token from the input stream, or if the
+   * token manager has not read tokens beyond this one, this field is
+   * set to null.  This is true only if this token is also a regular
+   * token.  Otherwise, see below for a description of the contents of
+   * this field.
+   */
+  public Token next;
+
+  /**
+   * This field is used to access special tokens that occur prior to this
+   * token, but after the immediately preceding regular (non-special) token.
+   * If there are no such special tokens, this field is set to null.
+   * When there are more than one such special token, this field refers
+   * to the last of these special tokens, which in turn refers to the next
+   * previous special token through its specialToken field, and so on
+   * until the first special token (whose specialToken field is null).
+   * The next fields of special tokens refer to other special tokens that
+   * immediately follow it (without an intervening regular token).  If there
+   * is no such token, this field is null.
+   */
+  public Token specialToken;
+
+  /**
+   * Returns the image.
+   */
+  public String toString()
+  {
+     return image;
+  }
+
+  /**
+   * Returns a new Token object, by default. However, if you want, you
+   * can create and return subclass objects based on the value of ofKind.
+   * Simply add the cases to the switch for all those special cases.
+   * For example, if you have a subclass of Token called IDToken that
+   * you want to create if ofKind is ID, simlpy add something like :
+   *
+   *    case MyParserConstants.ID : return new IDToken();
+   *
+   * to the following switch statement. Then you can cast matchedToken
+   * variable to the appropriate type and use it in your lexical actions.
+   */
+  public static final Token newToken(int ofKind)
+  {
+     switch(ofKind)
+     {
+       default : return new Token();
+     }
+  }
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/TokenMgrError.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/TokenMgrError.java
new file mode 100644
index 0000000..5399ccd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/parser/TokenMgrError.java
@@ -0,0 +1,143 @@
+/* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 3.0 */
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.parser;
+
+public class TokenMgrError extends Error
+{
+   /*
+    * Ordinals for various reasons why an Error of this type can be thrown.
+    */
+
+   /**
+    * Lexical error occured.
+    */
+   static final int LEXICAL_ERROR = 0;
+
+   /**
+    * An attempt wass made to create a second instance of a static token manager.
+    */
+   static final int STATIC_LEXER_ERROR = 1;
+
+   /**
+    * Tried to change to an invalid lexical state.
+    */
+   static final int INVALID_LEXICAL_STATE = 2;
+
+   /**
+    * Detected (and bailed out of) an infinite loop in the token manager.
+    */
+   static final int LOOP_DETECTED = 3;
+
+   /**
+    * Indicates the reason why the exception is thrown. It will have
+    * one of the above 4 values.
+    */
+   int errorCode;
+
+   /**
+    * Replaces unprintable characters by their espaced (or unicode escaped)
+    * equivalents in the given string
+    */
+   protected static final String addEscapes(String str) {
+      StringBuffer retval = new StringBuffer();
+      char ch;
+      for (int i = 0; i < str.length(); i++) {
+        switch (str.charAt(i))
+        {
+           case 0 :
+              continue;
+           case '\b':
+              retval.append("\\b");
+              continue;
+           case '\t':
+              retval.append("\\t");
+              continue;
+           case '\n':
+              retval.append("\\n");
+              continue;
+           case '\f':
+              retval.append("\\f");
+              continue;
+           case '\r':
+              retval.append("\\r");
+              continue;
+           case '\"':
+              retval.append("\\\"");
+              continue;
+           case '\'':
+              retval.append("\\\'");
+              continue;
+           case '\\':
+              retval.append("\\\\");
+              continue;
+           default:
+              if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
+                 String s = "0000" + Integer.toString(ch, 16);
+                 retval.append("\\u" + s.substring(s.length() - 4, s.length()));
+              } else {
+                 retval.append(ch);
+              }
+              continue;
+        }
+      }
+      return retval.toString();
+   }
+
+   /**
+    * Returns a detailed message for the Error when it is thrown by the
+    * token manager to indicate a lexical error.
+    * Parameters : 
+    *    EOFSeen     : indicates if EOF caused the lexicl error
+    *    curLexState : lexical state in which this error occured
+    *    errorLine   : line number when the error occured
+    *    errorColumn : column number when the error occured
+    *    errorAfter  : prefix that was seen before this error occured
+    *    curchar     : the offending character
+    * Note: You can customize the lexical error message by modifying this method.
+    */
+   protected static String LexicalError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar) {
+      return("Lexical error at line " +
+           errorLine + ", column " +
+           errorColumn + ".  Encountered: " +
+           (EOFSeen ? "<EOF> " : ("\"" + addEscapes(String.valueOf(curChar)) + "\"") + " (" + (int)curChar + "), ") +
+           "after : \"" + addEscapes(errorAfter) + "\"");
+   }
+
+   /**
+    * You can also modify the body of this method to customize your error messages.
+    * For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not
+    * of end-users concern, so you can return something like : 
+    *
+    *     "Internal Error : Please file a bug report .... "
+    *
+    * from this method for such cases in the release version of your parser.
+    */
+   public String getMessage() {
+      return super.getMessage();
+   }
+
+   /*
+    * Constructors of various flavors follow.
+    */
+
+   public TokenMgrError() {
+   }
+
+   public TokenMgrError(String message, int reason) {
+      super(message);
+      errorCode = reason;
+   }
+
+   public TokenMgrError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar, int reason) {
+      this(LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason);
+   }
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/plan/IngresExplainSQLActionDelegate.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/plan/IngresExplainSQLActionDelegate.java
new file mode 100644
index 0000000..8d821e7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/plan/IngresExplainSQLActionDelegate.java
@@ -0,0 +1,149 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.plan;
+
+import java.util.HashMap;
+
+import org.eclipse.datatools.sqltools.core.DatabaseIdentifier;
+import org.eclipse.datatools.sqltools.sql.parser.ParsingResult;
+import org.eclipse.datatools.sqltools.sqleditor.ISQLEditorActionConstants;
+import org.eclipse.datatools.sqltools.sqleditor.SQLEditor;
+import org.eclipse.datatools.sqltools.sqleditor.plan.BaseExplainAction;
+import org.eclipse.datatools.sqltools.sqleditor.plan.Images;
+import org.eclipse.datatools.sqltools.sqleditor.plan.Messages;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.ui.IEditorActionDelegate;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.texteditor.IUpdate;
+
+/**
+ * Action class to explain the selected SQL statements in SQL Editor or Routine
+ * Editor
+ * 
+ * Basically a copy of
+ * org.eclipse.datatools.sqltools.sqleditor.plan.ExplainSQLActionDelegate with
+ * extension to be used as additional action in the SQLEditorService. XXX This class
+ * is for provisional usage only. It's obsolete when a menu entry for QEP generation is available.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresExplainSQLActionDelegate extends BaseExplainAction implements
+		IEditorActionDelegate, ISelectionChangedListener, IUpdate {
+
+	protected SQLEditor _sqlEditor;
+
+	public IngresExplainSQLActionDelegate() {
+		setText(Messages.getString("ExplainSQLActionDelegate.action_title")); //$NON-NLS-1$
+		setToolTipText(Messages
+				.getString("ExplainSQLActionDelegate.action_tooltip")); //$NON-NLS-1$
+		setImageDescriptor(Images.DESC_EXPLAIN_SQL);
+		setActionDefinitionId(ISQLEditorActionConstants.EXPLAIN_SQL_ACTION_ID);
+	}
+
+	public void setActiveEditor(SQLEditor targetEditor) {
+		_sqlEditor = targetEditor;
+		targetEditor.getSelectionProvider().addSelectionChangedListener(this);
+		update();
+	}
+
+	public void update() {
+		setEnabled(_sqlEditor != null && (_sqlEditor.isConnected())
+				&& super.canBeEnabled());
+	}
+
+	public DatabaseIdentifier getDatabaseIdentifier() {
+		return _sqlEditor == null ? null : _sqlEditor.getDatabaseIdentifier();
+	}
+
+	public String getSQLStatements() {
+		String orignalSql = (_sqlEditor == null) ? null : _sqlEditor
+				.getTargetText();
+		return orignalSql;
+	}
+
+	/**
+	 * Sets the focus to the editor after the execution plan is shown
+	 */
+	public Runnable getPostRun() {
+		Runnable postRun = new Runnable() {
+			public void run() {
+				_sqlEditor.getEditorSite().getPage().activate(_sqlEditor);
+			}
+		};
+		return postRun;
+	}
+
+	/**
+	 * Returns the variable declarations in the SQL Editor
+	 */
+	protected HashMap getVariableDeclarations() {
+		ITextSelection _selection = (ITextSelection) _sqlEditor
+				.getSelectionProvider().getSelection();
+		int start = 0;
+		int length = 0;
+		if (_selection == null) {
+			_selection = (ITextSelection) _sqlEditor.getSelectionProvider()
+					.getSelection();
+		}
+		// get the offset of the selection
+		if (_selection != null && !_selection.isEmpty()) {
+			start = _selection.getOffset();
+			length = _selection.getLength();
+			if (length < 0) {
+				length = -length;
+				start -= length;
+			}
+		}
+		// when user selects a range
+		int offset = length > 0 ? start + 1 : start;
+
+		IDocument document = _sqlEditor.getDocumentProvider().getDocument(
+				_sqlEditor.getEditorInput());
+		ParsingResult result = _sqlEditor.getParsingResult();
+		HashMap variables = new HashMap();
+		if (result != null) {
+			variables = result.getVariables(document, offset);
+			HashMap sp_params = result.getParameters(document, offset);
+			variables.putAll(sp_params);
+		}
+		return variables;
+	}
+
+	/**
+	 * Updates the action when selection changes
+	 * 
+	 * @param event
+	 */
+	public void selectionChanged(SelectionChangedEvent event) {
+		if (event.getSelection() instanceof ITextSelection) {
+			update();
+		}
+	}
+
+	public void setActiveEditor(IAction action, IEditorPart targetEditor) {
+		setActiveEditor((SQLEditor) targetEditor);
+	}
+
+	public void run(IAction action) {
+		run();
+	}
+
+	public void selectionChanged(IAction action, ISelection selection) {
+		if (selection instanceof ITextSelection) {
+			update();
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/plan/IngresPlanService.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/plan/IngresPlanService.java
new file mode 100644
index 0000000..243147c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/plan/IngresPlanService.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007, 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.plan;
+
+import org.eclipse.datatools.sqltools.plan.PlanRequest;
+import org.eclipse.datatools.sqltools.plan.PlanService;
+import org.eclipse.datatools.sqltools.plan.PlanSupportRunnable;
+
+/**
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresPlanService extends PlanService {
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.sqltools.plan.PlanService#createPlanSupportRunnable(org.eclipse.datatools.sqltools.plan.PlanRequest, java.lang.String, java.lang.String)
+	 */
+	public PlanSupportRunnable createPlanSupportRunnable(
+			final PlanRequest request, final String profileName,
+			final String dbName) {
+		return new IngresPlanSupportRunnable(request, profileName, dbName);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/plan/IngresPlanSupportRunnable.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/plan/IngresPlanSupportRunnable.java
new file mode 100644
index 0000000..1e5445c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/plan/IngresPlanSupportRunnable.java
@@ -0,0 +1,153 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007, 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.plan;
+
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import org.eclipse.datatools.sqltools.core.SQLDevToolsConfiguration;
+import org.eclipse.datatools.sqltools.core.SQLToolsFacade;
+import org.eclipse.datatools.sqltools.core.services.ConnectionService;
+import org.eclipse.datatools.sqltools.plan.PlanRequest;
+import org.eclipse.datatools.sqltools.plan.PlanSupportRunnable;
+
+/**
+ * This class is responsible for retrieving QEP's from an driver log file.
+ * 
+ * It parses the log file and extracts the last stored QEP (actually it's the
+ * last DBMS log entry). It's neither guaranteed that the found log message is a
+ * QEP nor that the found QEP is linked to the SQL statement. There's a small
+ * chance that another QEP is logged between execution of the query and
+ * retrieving the QEP.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresPlanSupportRunnable extends PlanSupportRunnable {
+
+	private static final String LINE_SEPARATOR = System
+			.getProperty("line.separator");
+
+	public IngresPlanSupportRunnable(PlanRequest request, String profileName,
+			String dbName) {
+		super(request, profileName, dbName);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.sqltools.plan.PlanSupportRunnable#explainPlan(java.sql.Statement)
+	 */
+	protected String explainPlan(final Statement stmt) throws SQLException {
+		String[] qepMsg = new String[0];
+
+		// minimize the risk of creating more than one QEP at the same time,
+		// should be possible only outside this class, e.g. manually setting
+		// "SET qep" and executing a query
+		synchronized (IngresPlanSupportRunnable.class) {
+
+			// make sure we have reached the end of the log file
+			try {
+				QEPLogExtractor.getInstance().skipAll();
+			} catch (IOException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+
+			// execute the query
+			try {
+				stmt.execute(this._request.getSql());
+			} catch (SQLException e) {
+				// exception is expected because we use "SET optimizeonly"
+			}
+
+			// read the QEP from the driver log
+			try {
+				qepMsg = QEPLogExtractor.getInstance().extractLastQEP();
+			} catch (IOException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+		}
+
+		final StringBuffer buf = new StringBuffer();
+		for (int i = 0; i < qepMsg.length; i++) {
+			buf.append(qepMsg[i]).append(LINE_SEPARATOR);
+		}
+
+		return buf.toString();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.sqltools.plan.PlanSupportRunnable#getConnection()
+	 */
+	public Connection getConnection() {
+		if (_conn == null) {
+			_conn = createConnection();
+		}
+		return _conn;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.sqltools.plan.PlanSupportRunnable#prepareConnection()
+	 */
+	protected void prepareConnection() {
+		// always use a new connection
+		_conn = createConnection();
+	}
+
+	/**
+	 * Returns a new created connection from the SQL tools.
+	 * 
+	 * @return the connection
+	 */
+	public Connection createConnection() {
+		final SQLDevToolsConfiguration config = SQLToolsFacade
+				.getConfigurationByProfileName(_profileName);
+		final ConnectionService conService = config.getConnectionService();
+		final Connection con = conService.createConnection(_profileName,
+				_dbName);
+
+		_needReleaseConn = true;
+
+		return con;
+	}
+
+	/**
+	 * Setting the connection has no effect, as we always use an own connection.
+	 * 
+	 * @see org.eclipse.datatools.sqltools.plan.PlanSupportRunnable#setConnection(java.sql.Connection)
+	 */
+	public void setConnection(final Connection conn) {
+		// do nothing, as we will always use an own connection
+	}
+
+	/**
+	 * The returned statement is initialized with the queries:
+	 * <ul>
+	 * <li><code>SET qep</code></li>
+	 * <li><code>SET optimizeonly</code></li>
+	 * </ul>
+	 * Every executed query is returning the QEP and the queries execution in
+	 * the dbms is disabled.
+	 * 
+	 * @see org.eclipse.datatools.sqltools.plan.PlanSupportRunnable#prepareStatement(java.sql.Connection)
+	 */
+	protected Statement prepareStatement(final Connection connection)
+			throws SQLException {
+		final Statement stmt = connection.createStatement();
+		// force transmission of the qep
+		stmt.execute("SET qep");
+		// but do not execute the query
+		stmt.execute("SET optimizeonly");
+		return stmt;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/plan/QEPLogExtractor.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/plan/QEPLogExtractor.java
new file mode 100644
index 0000000..1d423d5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/plan/QEPLogExtractor.java
@@ -0,0 +1,112 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007, 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.plan;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * This class is responsible for extracting QEP's from the Ingres JDBC driver's
+ * logfile. It watches the log file that is defined in the system property
+ * "ingres.jdbc.trace.log".
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public final class QEPLogExtractor {
+
+	private static final QEPLogExtractor INSTANCE = new QEPLogExtractor();
+
+	private static final String LINE_START = "DBMS TRACE: ";
+
+	private transient BufferedReader logReader;
+
+	private QEPLogExtractor() {
+	}
+
+	public static QEPLogExtractor getInstance() {
+		return INSTANCE;
+	}
+
+	/**
+	 * Reads to the end of the file, without retrieving a QEP.
+	 * 
+	 * @throws IOException
+	 */
+	public void skipAll() throws IOException {
+		final BufferedReader reader = getLogReader();
+
+		synchronized (reader) {
+			while (reader.readLine() != null) {
+			}
+		}
+	}
+
+	/**
+	 * Reads the log file to the last line and returns the last QEP found.
+	 * 
+	 * @return String array containing the lines of the QEP. Empty if no QEP was
+	 *         found.
+	 * @throws IOException
+	 */
+	public String[] extractLastQEP() throws IOException {
+		final BufferedReader reader = getLogReader();
+
+		synchronized (reader) {
+			final List messages = new ArrayList();
+
+			String line;
+			boolean insideQep = false;
+			while ((line = reader.readLine()) != null) {
+				if (line.startsWith(LINE_START)) {
+					if (insideQep == false) {
+						insideQep = true;
+						messages.clear();
+					}
+
+					line = line.substring(LINE_START.length());
+					messages.add(line);
+				} else {
+					insideQep = false;
+				}
+			}
+
+			return (String[]) messages.toArray(new String[0]);
+		}
+	}
+
+	private BufferedReader getLogReader() throws IOException {
+		if (logReader == null) {
+			logReader = createReader(findLogFile());
+		}
+
+		return logReader;
+	}
+
+	private BufferedReader createReader(final File file) throws IOException {
+		return new BufferedReader(new FileReader(file));
+	}
+
+	private File findLogFile() {
+		File log = null;
+
+		final String file = System.getProperty("ingres.jdbc.trace.log");
+		if (file != null) {
+			log = new File(file);
+		}
+
+		return log;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/profiles/IngresProfileDetailsWizardPage.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/profiles/IngresProfileDetailsWizardPage.java
new file mode 100644
index 0000000..a9ce0d1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/profiles/IngresProfileDetailsWizardPage.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.profiles;
+
+import org.eclipse.datatools.connectivity.db.generic.ui.GenericDBProfileDetailsWizardPage;
+
+/**
+ * Ingres specific wizard page for the connection profile.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresProfileDetailsWizardPage extends
+        GenericDBProfileDetailsWizardPage {
+
+    /**
+     * Constructor
+     * 
+     * @param pageName
+     *                the page name
+     */
+    public IngresProfileDetailsWizardPage(String pageName) {
+        super(pageName);
+        
+        // define driver category for this property page, so only Ingres related
+        // drivers will be shown in the driver selection dialog
+        setDriverCategory("org.eclipse.datatools.enablement.ingres.2006.driverCategory"); //$NON-NLS-1$
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/profiles/IngresPropertyPage.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/profiles/IngresPropertyPage.java
new file mode 100644
index 0000000..780c8eb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/profiles/IngresPropertyPage.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.profiles;
+
+import org.eclipse.datatools.connectivity.db.generic.ui.GenericDBProfilePropertyPage;
+
+/**
+ * Ingres specific property page for the connection profile.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresPropertyPage extends GenericDBProfilePropertyPage {
+
+    /**
+     * Constructor
+     */
+    public IngresPropertyPage() {
+        super();
+        // define driver category for this property page, so only Ingres related
+        // drivers will be shown in the driver selection dialog
+        setDriverCategory("org.eclipse.datatools.enablement.ingres.2006.driverCategory"); //$NON-NLS-1$
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/profiles/NewIngresConnectionProfileWizard.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/profiles/NewIngresConnectionProfileWizard.java
new file mode 100644
index 0000000..cf09463
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/profiles/NewIngresConnectionProfileWizard.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.profiles;
+
+import org.eclipse.datatools.connectivity.db.generic.GenericDBPlugin;
+import org.eclipse.datatools.connectivity.db.generic.ui.NewConnectionProfileWizard;
+
+/**
+ * Ingres connection profile wizard.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class NewIngresConnectionProfileWizard extends
+        NewConnectionProfileWizard {
+
+    /**
+     * Constructor
+     */
+    public NewIngresConnectionProfileWizard() {
+        super();
+        setWindowTitle(GenericDBPlugin.getDefault().getResourceString(
+                "NewConnectionProfileWizard.title")); //$NON-NLS-1$
+    }
+
+    /**
+     * Add's the Ingres details page to the wizard
+     * 
+     * @see org.eclipse.datatools.connectivity.db.generic.ui.NewConnectionProfileWizard#addCustomPages()
+     */
+    public void addCustomPages() {
+        mPropPage = new IngresProfileDetailsWizardPage("detailsPage"); //$NON-NLS-1$
+        addPage(mPropPage);
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/providers/IDBEventsFolder.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/providers/IDBEventsFolder.java
new file mode 100644
index 0000000..ab291d4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/providers/IDBEventsFolder.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.providers;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+
+/**
+ * Tagging interface to mark nodes as a DB event folder.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public interface IDBEventsFolder extends IVirtualNode {
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/providers/IProcedureParameterFolder.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/providers/IProcedureParameterFolder.java
new file mode 100644
index 0000000..2eed1b8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/providers/IProcedureParameterFolder.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.providers;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+
+/**
+ * Tagging interface to mark nodes as a procedure folder.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public interface IProcedureParameterFolder extends IVirtualNode {
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/providers/ISynonymsFolder.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/providers/ISynonymsFolder.java
new file mode 100644
index 0000000..5b076c0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/providers/ISynonymsFolder.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.providers;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+
+/**
+ * Tagging interface to mark nodes as a synonym folder.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public interface ISynonymsFolder extends IVirtualNode {
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/providers/IngresContentProvider.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/providers/IngresContentProvider.java
new file mode 100644
index 0000000..50147aa
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/providers/IngresContentProvider.java
@@ -0,0 +1,134 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.providers;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.services.IVirtualNodeServiceFactory;
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+import org.eclipse.datatools.connectivity.sqm.core.ui.services.IDataToolsUIServiceManager;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.impl.ServerExplorerContentProviderNav;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.enablement.ingres.internal.ui.util.Messages;
+import org.eclipse.datatools.enablement.ingres.internal.ui.virtual.DBEventsFolder;
+import org.eclipse.datatools.enablement.ingres.internal.ui.virtual.ProcedureParameterFolder;
+import org.eclipse.datatools.enablement.ingres.internal.ui.virtual.SynonymFolder;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresDBEvent;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSchema;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSynonym;
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.navigator.ICommonContentExtensionSite;
+import org.eclipse.ui.navigator.ICommonContentProvider;
+
+/**
+ * A content provider that supports various Ingres catalog objects.
+ * 
+ * @author enrico.schenk@ingres.com
+ * 
+ */
+public class IngresContentProvider extends ServerExplorerContentProviderNav
+		implements ICommonContentProvider {
+
+	protected static final IVirtualNodeServiceFactory nodeFactory = IDataToolsUIServiceManager.INSTANCE
+			.getVirtualNodeServiceFactory();
+
+	protected static final ResourceLoader resourceLoader = ResourceLoader.INSTANCE;
+
+	private static final String DEPENDENCY = resourceLoader
+			.queryString("DATATOOLS.SERVER.UI.EXPLORER.DEPENDENCY"); //$NON-NLS-1$
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.impl.ServerExplorerContentProviderNav#getChildren(java.lang.Object)
+	 */
+	public Object[] getChildren(Object parentElement) {
+		if (parentElement instanceof IngresSchema) {
+			IDBEventsFolder dbef = new DBEventsFolder(
+					Messages.getString("DBEvent.Name"), Messages.getString("DBEvent.DisplayName"), //$NON-NLS-1$ //$NON-NLS-2$
+					parentElement);
+			ISynonymsFolder sf = new SynonymFolder(
+					Messages.getString("Synonym.Name"), Messages.getString("Synonym.DisplayName"), //$NON-NLS-1$ //$NON-NLS-2$
+					parentElement);
+			return new Object[] { dbef, sf };
+		} else if (parentElement instanceof IDBEventsFolder) {
+			IDBEventsFolder dbef = (IDBEventsFolder) parentElement;
+			IngresSchema schema = (IngresSchema) ((IDBEventsFolder) parentElement)
+					.getParent();
+			dbef.addChildren(schema.getDBEvents());
+			return dbef.getChildrenArray();
+		} else if (parentElement instanceof ISynonymsFolder) {
+			ISynonymsFolder sf = (ISynonymsFolder) parentElement;
+			IngresSchema schema = (IngresSchema) ((ISynonymsFolder) parentElement)
+					.getParent();
+			sf.addChildren(schema.getSynonyms());
+			return sf.getChildrenArray();
+		} else if (parentElement instanceof IngresDBEvent) {
+			List collection = new ArrayList();
+			collection.add(nodeFactory.makeDependencyNode(DEPENDENCY,
+					DEPENDENCY, parentElement));
+			if (parentElement instanceof IVirtualNode
+					&& !((IVirtualNode) parentElement).hasChildren()) {
+				((IVirtualNode) parentElement).addChildren(collection);
+			}
+			return collection.toArray(new Object[collection.size()]);
+		} else if (parentElement instanceof IngresSynonym) {
+			List collection = new ArrayList();
+			collection.add(nodeFactory.makeDependencyNode(DEPENDENCY,
+					DEPENDENCY, parentElement));
+			if (parentElement instanceof IVirtualNode
+					&& !((IVirtualNode) parentElement).hasChildren()) {
+				((IVirtualNode) parentElement).addChildren(collection);
+			}
+			return collection.toArray(new Object[collection.size()]);
+		} else if (parentElement instanceof Routine) {
+			IProcedureParameterFolder pcf = new ProcedureParameterFolder(
+					Messages.getString("ProcedureParameter.Name"), Messages.getString("ProcedureParameter.DisplayName"), //$NON-NLS-1$ //$NON-NLS-2$
+					parentElement);
+			return new Object[] { pcf };
+		} else if (parentElement instanceof IProcedureParameterFolder) {
+			IProcedureParameterFolder pcf = (IProcedureParameterFolder) parentElement;
+			Routine routine = (Routine) ((IProcedureParameterFolder) parentElement)
+					.getParent();
+			pcf.addChildren(routine.getParameters());
+			return pcf.getChildrenArray();
+		}
+
+		return super.getChildren(parentElement);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.ICommonContentProvider#init(org.eclipse.ui.navigator.ICommonContentExtensionSite)
+	 */
+	public void init(ICommonContentExtensionSite config) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.IMementoAware#restoreState(org.eclipse.ui.IMemento)
+	 */
+	public void restoreState(IMemento memento) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.IMementoAware#saveState(org.eclipse.ui.IMemento)
+	 */
+	public void saveState(IMemento memento) {
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/providers/IngresLabelProvider.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/providers/IngresLabelProvider.java
new file mode 100644
index 0000000..af04378
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/providers/IngresLabelProvider.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.providers;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+import org.eclipse.datatools.connectivity.sqm.core.ui.services.IDataToolsUIServiceManager;
+import org.eclipse.emf.ecore.ENamedElement;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * A label provider that supports various Ingres catalog objects.
+ * 
+ * @author enrico.schenk@ingres.com
+ * 
+ */
+public class IngresLabelProvider extends LabelProvider {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
+	 */
+	public String getText(Object element) {
+		if (element instanceof IVirtualNode) {
+			return ((IVirtualNode) element).getDisplayName();
+		} else if (element instanceof ENamedElement) {
+			return ((ENamedElement) element).getName();
+		} else {
+			return super.getText(element);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.LabelProvider#getImage(java.lang.Object)
+	 */
+	public Image getImage(Object element) {
+		return IDataToolsUIServiceManager.INSTANCE.getLabelService(element).getIcon();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/providers/decorators/ParameterDecorationService.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/providers/decorators/ParameterDecorationService.java
new file mode 100644
index 0000000..8cac768
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/providers/decorators/ParameterDecorationService.java
@@ -0,0 +1,73 @@
+package org.eclipse.datatools.enablement.ingres.internal.ui.providers.decorators;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinitionRegistry;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators.impl.AbstractDecorationService;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.sql.datatypes.DataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+import org.eclipse.datatools.modelbase.sql.routines.Parameter;
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.datatools.modelbase.sql.schema.Catalog;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.jface.viewers.IDecoration;
+
+
+/**
+ * TODO org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators.impl.ColumnDecorationService
+ *
+ * @author enrico.schenk@ingres.com
+ */
+public class ParameterDecorationService extends AbstractDecorationService {
+
+	public void decorate(Object element, IDecoration decoration) {
+		if (element instanceof Parameter) {
+			decorate((Parameter) element, decoration);
+		}
+	}
+	
+	private void decorate(Parameter parameter, IDecoration decoration) {
+		String dataType = getDataType(parameter);
+		if (dataType != null && dataType.trim().length() > 0) {
+			dataType = " [" + dataType + "]";
+		}
+		decoration.addSuffix(dataType);
+	}
+	
+	// copied from org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.helpers.ColumnHelper
+	private DatabaseDefinitionRegistry dbRegistry = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry();
+	private static final String BLANK = "";
+	/**
+	 * TODO copied from org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.helpers.ColumnHelper
+	 *
+	 * @param parameter
+	 * @return
+	 */
+	public String getDataType(Parameter parameter) {
+		Routine routine;
+		Schema schema;
+		Catalog catalog;
+		Database database;
+		DataType datatype = parameter.getDataType();
+		
+		if ((routine = parameter.getRoutine()) != null
+				&& (schema = routine.getSchema()) != null
+				&& (((catalog = schema.getCatalog()) != null && (database = catalog
+						.getDatabase()) != null) || (database = schema
+						.getDatabase()) != null)) {
+			DatabaseDefinition definition = dbRegistry.getDefinition(database);
+			if (datatype != null) {
+				if (datatype instanceof PredefinedDataType) {
+					return definition
+							.getPredefinedDataTypeFormattedName((PredefinedDataType) datatype);
+				} else {
+					return datatype.getName();
+				}
+			}
+		}
+		return BLANK;
+	}
+
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/providers/decorators/SynonymDecorationService.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/providers/decorators/SynonymDecorationService.java
new file mode 100644
index 0000000..2a3b684
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/providers/decorators/SynonymDecorationService.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007, 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.providers.decorators;
+
+import java.text.MessageFormat;
+
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.decorators.impl.AbstractDecorationService;
+import org.eclipse.datatools.enablement.ingres.internal.ui.util.Messages;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSynonym;
+import org.eclipse.jface.viewers.IDecoration;
+
+/**
+ * TODO
+ * 
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class SynonymDecorationService extends AbstractDecorationService {
+
+	private static final String SYNONYM_NAME_DECORATION = Messages
+			.getString("Synonym.NameDecoration"); //$NON-NLS-1$
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ILightweightLabelDecorator#decorate(java.lang.Object,
+	 *      org.eclipse.jface.viewers.IDecoration)
+	 */
+	public void decorate(Object element, IDecoration decoration) {
+		if (element instanceof IngresSynonym) {
+			decorate((IngresSynonym) element, decoration);
+		}
+	}
+
+	public void decorate(IngresSynonym synonym, IDecoration decoration) {
+		decoration.addSuffix(MessageFormat.format(SYNONYM_NAME_DECORATION,
+				new String[] { synonym.getTableName() }));
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/sql/IngresSQLSyntax.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/sql/IngresSQLSyntax.java
new file mode 100644
index 0000000..849f1f6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/sql/IngresSQLSyntax.java
@@ -0,0 +1,959 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.sql;
+
+import org.eclipse.datatools.sqltools.sql.ISQLSyntax;
+
+/**
+ * Ingres SQL Syntax description
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresSQLSyntax implements ISQLSyntax {
+
+	protected static final String[] EMPTY = new String[0];
+
+	// Keywords
+	private static final String[] _unreservedwords = {
+//		"ABSOLUTE",
+//		"ACTION",
+//		"ALLOCATE",
+//		"ARE",
+//		"ASENSITIVE",
+//		"ASSERTION",
+//		"SYMMETRIC",
+//		"ATOMIC",
+//		"BIT",
+//		"BIT_LENGTH",
+//		"BOTH",
+//		"CALLED",
+//		"CARDINALITY",
+//		"CASCADED",
+//		"CAST",
+//		"CATALOG",
+//		"CHAR",
+//		"CHAR_LENGTH",
+//		"CHARACTER",
+//		"CHARACTER_LENGTH",
+//		"COALESCE",
+//		"COLLATE",
+//		"COLLATION",
+//		"COLLECT",
+//		"CONDITION",
+//		"CONNECTION",
+//		"CONSTRAINTS",
+//		"CONVERT",
+//		"CORR",
+//		"CORRESPONDING",
+//		"CROSS",
+//		"CUBE",
+//		"CURRENT_DATE",
+//		"CURRENT_DEFAULT_TRANSFORM_GROUP",
+//		"CURRENT_PATH",
+//		"CURRENT_ROLE",
+//		"CURRENT_TIME",
+//		"CURRENT_TIMESTAMP",
+//		"DATE",
+//		"DAY",
+//		"DEALLOCATE",
+//		"DEC",
+//		"DECIMAL",
+//		"DEFERRABLE",
+//		"DEFERRED",
+//		"DEREF",
+//		"DETERMINISTIC",
+//		"DIAGNOSTICS",
+//		"DOMAIN",
+//		"DOUBLE",
+//		"DYNAMIC",
+//		"EACH",
+//		"ELEMENT",
+//		"EVERY",
+//		"EXCEPT",
+//		"EXCEPTION",
+//		"EXEC",
+//		"EXTERNAL",
+//		"EXTRACT",
+//		"FALSE",
+//		"FILTER",
+//		"FLOAT",
+//		"FOUND",
+//		"FREE",
+//		"FUNCTION",
+//		"FUSION",
+//		"GO",
+//		"GROUPING",
+//		"HOLD",
+//		"HOUR",
+//		"IDENTITY",
+//		"INITIALLY",
+//		"INOUT",
+//		"INPUT",
+//		"INSENSITIVE",
+//		"INT",
+//		"INTEGER",
+//		"INTERSECT",
+//		"INTERSECTION",
+//		"INTERSECTS",
+//		"INTERVAL",
+//		"LANGUAGE",
+//		"LARGE",
+//		"LAST",
+//		"LATERAL",
+//		"LEADING",
+//		"LN",
+//		"LOCALTIME",
+//		"LOCALTIMESTAMP",
+//		"LOWER",
+//		"MATCH",
+//		"MEMBER",
+//		"MERGE",
+//		"METHOD",
+//		"MINUTE",
+//		"MOD",
+//		"MODIFIES",
+//		"MONTH",
+//		"MULTISET",
+//		"NAMES",
+//		"NATIONAL",
+//		"NCHAR",
+//		"NEW",
+//		"NO",
+//		"NONE",
+//		"NORMALIZE",
+//		"NULLIF",
+//		"NUMERIC",
+//		"OCTET_LENGTH",
+//		"OLD",
+//		"OUTPUT",
+//		"OVER",
+//		"OVERLAPS",
+//		"OVERLAY",
+//		"PAD",
+//		"PARAMETER",
+//		"PARTIAL",
+//		"PARTITION",
+//		"POSITION",
+//		"PRECISION",
+//		"PRIOR",
+//		"RANK",
+//		"READS",
+//		"REAL",
+//		"RECURSIVE",
+//		"REF",
+//		"RELATIVE",
+//		"RELEASE",
+//		"RETURNS",
+//		"ROLLUP",
+//		"ROW_NUMBER",
+//		"SCOPE",
+//		"SEARCH",
+//		"SECOND",
+//		"SENSITIVE",
+//		"SIMILAR",
+//		"SIZE",
+//		"SMALLINT",
+//		"SPACE",
+//		"SPECIFIC",
+//		"SPECIFICTYPE",
+//		"SQLCODE",
+//		"SQLERROR",
+//		"SQLEXCEPTION",
+//		"SQLSTATE",
+//		"SQLWARNING",
+//		"STATIC",
+//		"SUBMULTISET",
+//		"SYMMETRIC",
+//		"TABLESAMPLE",
+//		"TIME",
+//		"TIMESTAMP",
+//		"TIMEZONE_HOUR",
+//		"TIMEZONE_MINUTE",
+//		"TRAILING",
+//		"TRANSACTION",
+//		"TRANSLATE",
+//		"TRANSLATION",
+//		"TREAT",
+//		"TRIGGER",
+//		"TRIM",
+//		"TRUE",
+//		"UESCAPE",
+//		"UNKNOWN",
+//		"UNNEST",
+//		"UPPER",
+//		"USAGE",
+//		"VALUE",
+//		"VARCHAR",
+//		"VARYING",
+//		"WIDTH_BUCKET",
+//		"WINDOW",
+//		"WITHIN",
+//		"WITHOUT",
+//		"YEAR",
+//		"ZONE",
+	};
+
+	// Keywords
+	private static final String[] reservedwords = {
+		"ABORT", // sql_isql, sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"ACTIVATE", // sql_esql, quel_equel, 
+		"ADD", // sql_esql, sql_4gl, 
+		"ADDFORM", // sql_esql, quel_equel, 
+		"AFTER", // sql_esql, sql_4gl, quel_4gl, 
+		"AGGREGATE", // sql_isql, quel_iquel, 
+		"ALL", // sql_esql, quel_iquel, quel_equel, 
+		"ALTER", // sql_esql, sql_4gl, 
+		"AND", // sql_isql, sql_esql, quel_iquel, quel_equel, 
+		"ANY", // sql_isql, sql_esql, sql_4gl, quel_iquel, quel_equel, 
+		// "APPEND", // quel_iquel, quel_equel, quel_4gl, 
+		"ARRAY", // sql_esql, sql_4gl, 
+		"AS", // sql_isql, sql_esql, quel_iquel, quel_equel, quel_4gl, 
+		"ASC", // sql_isql, sql_4gl, 
+		"ASYMMETRIC", // sql_isql, sql_esql, 
+		"AT", // sql_isql, sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"ATTRIBUTE", // sql_esql, 
+		"AUTHORIZATION", // sql_esql, sql_4gl, 
+		"AUTOCOMMIT", // sql_isql, quel_iquel, 
+		"AUTOMATIC", // sql_isql, 
+		"AVG", // sql_isql, sql_esql, sql_4gl, quel_iquel, quel_equel, 
+		"AVGU", // sql_esql, quel_iquel, quel_equel, 
+		"BASE", // sql_isql, 
+		"BEFORE", // sql_esql, sql_4gl, quel_4gl, 
+		"BEGIN", // sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"BETWEEN", // sql_isql, sql_esql, sql_4gl, 
+		"BREAKDISPLAY", // sql_esql, quel_equel, 
+		"BY", // sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"BYREF", // sql_isql, sql_4gl, quel_4gl, 
+		"CACHE", // sql_esql, sql_4gl, 
+		"CALL", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		// "CALLFRAME", // sql_4gl, quel_4gl, 
+		"CALLPROC", // sql_isql, sql_4gl, quel_4gl, 
+		"CASCADE", // sql_isql, sql_esql, 
+		"CASE", // sql_isql, sql_esql, sql_4gl, 
+		"CAST", // sql_isql, 
+		"CHECK", // sql_isql, sql_esql, sql_4gl, 
+		// "CLASS", // sql_4gl, 
+		"CLEAR", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		"CLEARROW", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		"CLOSE", // sql_esql, quel_iquel, quel_equel, 
+		"COALESCE", // sql_isql, 
+		"COLLATE", // sql_isql, sql_esql, 
+		"COLUMN", // sql_isql, sql_esql, sql_4gl, quel_equel, 
+		"COMMAND", // sql_esql, quel_equel, 
+		"COMMENT", // sql_esql, sql_4gl, 
+		"COMMIT", // sql_esql, sql_4gl, 
+		"COMMITED", // sql_isql, sql_esql, sql_4gl, 
+		"CONNECT", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		"CONSTRAINT", // sql_isql, sql_esql, sql_4gl, 
+		"CONTINUE", // sql_isql, sql_esql, 
+		"COPY", // sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"COPY_FROM", // sql_isql, 
+		"COPY_INTO", // sql_isql, 
+		"COUNT", // sql_isql, sql_esql, sql_4gl, quel_iquel, quel_equel, 
+		"COUNTU", // sql_esql, quel_iquel, quel_equel, 
+		"CPUFACTOR", // sql_isql, quel_iquel, 
+		"CREATE", // sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"CROSS", // sql_isql, sql_esql, sql_4gl, 
+		"CURR", // sql_isql, 
+		"CURRENT", // sql_esql, sql_4gl, 
+		"CURRENT_USER", // sql_isql, 
+		"CURRVAL", // sql_isql, sql_esql, sql_4gl, 
+		"CURSOR", // sql_esql, quel_iquel, quel_equel, quel_4gl, 
+		"CYCLE", // sql_esql, sql_4gl, 
+		"DATA", // sql_esql, 
+		"DATABASE", // sql_isql, sql_4gl, 
+		// "DATAHANDLER", // quel_iquel, 
+		"DATE_FORMAT", // sql_isql, quel_iquel, 
+		"DBEVENT", // sql_esql, sql_4gl, 
+		"DDL_CONCURRENCY", // sql_isql, 
+		"DECIMAL", // sql_isql, quel_iquel, 
+		"DECLARE", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		"DEFAULT", // sql_esql, sql_4gl, quel_4gl, 
+		"DEFERRED", // sql_isql, quel_iquel, 
+		// "DEFINE", // quel_iquel, quel_equel, quel_4gl, 
+		"DELETE", // sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"DELETEROW", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		// "DESC", // sql_4gl, 
+		"DESCRIBE", // sql_esql, 
+		"DESCRIPTOR", // sql_esql, 
+		"DESTROY", // sql_esql, quel_iquel, quel_equel, quel_4gl, 
+		"DIRECT", // sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"DISABLE", // sql_esql, sql_4gl, 
+		"DISCONNECT", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		"DISPLAY", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		"DISTINCT", // sql_isql, sql_esql, sql_4gl, 
+		// "DISTRIBUTE", // quel_iquel, 
+		"DO", // sql_isql, sql_4gl, quel_4gl, 
+		"DOMAIN", // sql_esql, 
+		"DOWN", // sql_esql, quel_equel, 
+		"DROP", // sql_esql, sql_4gl, 
+		"EACH", // sql_esql, 
+		"ELSE", // sql_isql, sql_4gl, quel_4gl, 
+		"ELSEIF", // sql_isql, sql_4gl, quel_4gl, 
+		"ENABLE", // sql_esql, sql_4gl, 
+		"END", // sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"END-EXEC", // sql_esql, 
+		"ENDDATA", // sql_esql, quel_equel, 
+		"ENDDISPLAY", // sql_esql, quel_equel, 
+		"ENDFOR", // sql_isql, sql_esql, sql_4gl, 
+		"ENDFORMS", // sql_esql, quel_equel, 
+		"ENDIF", // sql_isql, sql_4gl, quel_4gl, 
+		"ENDLOOP", // sql_isql, sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		"ENDREPEAT", // sql_isql, sql_esql, sql_4gl, 
+		// "ENDRETRIEVE", // quel_equel, 
+		"ENDSELECT", // sql_esql, 
+		"ENDWHILE", // sql_isql, sql_4gl, quel_4gl, 
+		// "ENTRY", // sql_4gl, quel_4gl, 
+		"ERROR", // sql_isql, 
+		"ESCAPE", // sql_isql, sql_esql, 
+		"EXCEPT", // sql_isql, 
+		"EXCLUDE", // sql_esql, quel_iquel, 
+		"EXCLUDING", // sql_isql, quel_iquel, 
+		"EXEC", // sql_esql, 
+		"EXECUTE", // sql_esql, sql_4gl, quel_iquel, quel_4gl, 
+		"EXISTS", // sql_isql, sql_esql, sql_4gl, 
+		// "EXIT", // sql_4gl, quel_equel, quel_4gl, 
+		"FETCH", // sql_isql, sql_esql, 
+		"FIELD", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		"FINALIZE", // sql_esql, quel_equel, 
+		"FIRST", // sql_isql, sql_esql, sql_4gl, 
+		"FLATTEN", // sql_isql, 
+		"FOR", // sql_esql, sql_4gl, quel_iquel, quel_equel, 
+		"FOREIGN", // sql_esql, sql_4gl, 
+		"FORM", // sql_esql, 
+		"FORMDATA", // sql_esql, quel_equel, 
+		"FORMINIT", // sql_esql, quel_equel, 
+		"FORMS", // sql_esql, quel_equel, 
+		"FROM", // sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"FULL", // sql_esql, sql_4gl, 
+		"GET", // sql_esql, sql_4gl, 
+		"GETFORM", // sql_esql, quel_equel, 
+		"GETOPER", // sql_esql, quel_equel, 
+		"GETROW", // sql_esql, quel_equel, 
+		"GLOBAL", // sql_esql, sql_4gl, 
+		"GOTO", // sql_esql, 
+		"GRANT", // sql_isql, sql_esql, sql_4gl, 
+		"GRANTED", // sql_esql, sql_4gl, 
+		"GROUP", // sql_esql, sql_4gl, 
+		// "HASH", // 
+		"HAVING", // sql_isql, sql_esql, sql_4gl, 
+		"HELP", // sql_esql, quel_iquel, quel_equel, 
+		// "HELP_FORMS", // sql_4gl, quel_4gl, 
+		"HELP_FRS", // sql_esql, quel_equel, 
+		"HELPFILE", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		"IDENTIFIED", // sql_esql, sql_4gl, 
+		"IF", // sql_isql, sql_4gl, quel_4gl, 
+		"IIMESSAGE", // sql_esql, quel_equel, 
+		"IIPRINTF", // sql_esql, quel_equel, 
+		"IIPROMPT", // sql_esql, quel_equel, 
+		// "IISTATEMENT", // quel_equel, 
+		"IMMEDIATE", // sql_esql, sql_4gl, quel_4gl, 
+		"IMPORT", // sql_isql, 
+		"IN", // sql_isql, sql_esql, sql_4gl, quel_iquel, quel_equel, 
+		"INCLUDE", // sql_esql, quel_iquel, 
+		"INCREMENT", // sql_isql, sql_esql, sql_4gl, 
+		"INDEX", // sql_isql, sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"INDICATOR", // sql_esql, 
+		// "INGRES", // quel_equel, 
+		"INITIAL_USER", // sql_isql, quel_iquel, 
+		"INITIALIZE", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		"INITTABLE", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		"INNER", // sql_esql, sql_4gl, 
+		// "INQUIRE_EQUEL", // quel_equel, 
+		// "INQUIRE_FORMS", // sql_4gl, quel_4gl, 
+		"INQUIRE_FRS", // sql_esql, quel_equel, 
+		"INQUIRE_INGRES", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		"INQUIRE_SQL", // sql_esql, sql_4gl, 
+		"INSERT", // sql_isql, sql_esql, sql_4gl, 
+		"INSERTROW", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		// "INSTALLATION", // sql_4gl, 
+		"INTEGRITY", // sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"INTERSECT", // sql_isql, 
+		"INTO", // sql_isql, sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"IO_TRACE", // sql_isql, quel_iquel, 
+		"IS", // sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"ISOLATION", // sql_esql, sql_4gl, quel_iquel, 
+		// "JCPUFACTOR", // quel_iquel, 
+		"JOIN", // sql_esql, sql_4gl, 
+		"JOINOP", // sql_isql, quel_iquel, 
+		"JOURNALING", // sql_isql, quel_iquel, 
+		"KEY", // sql_esql, sql_4gl, quel_4gl, 
+		"LEAVE", // sql_isql, sql_esql, sql_4gl, 
+		"LEFT", // sql_esql, sql_4gl, 
+		"LEVEL", // sql_esql, quel_iquel, quel_equel, 
+		"LIKE", // sql_esql, sql_4gl, quel_4gl, 
+		"LINK", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		"LIST", // sql_isql, 
+		"LOADTABLE", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		"LOCAL", // sql_isql, 
+		"LOCATION", // sql_esql, sql_4gl, quel_iquel, 
+		"LOCK_TRACE", // sql_isql, quel_iquel, 
+		"LOCKMODE", // sql_isql, quel_iquel, 
+		"LOG_TRACE", // sql_isql, quel_iquel, 
+		"LOGDBEVENTS", // sql_isql, 
+		"LOGGING", // sql_isql, quel_iquel, 
+		"MAX", // sql_isql, sql_esql, sql_4gl, quel_iquel, quel_equel, 
+		"MAXCONNECT", // sql_isql, 
+		"MAXCOST", // sql_isql, quel_iquel, 
+		"MAXCPU", // sql_isql, quel_iquel, 
+		"MAXIDLE", // sql_isql, 
+		"MAXIO", // sql_isql, quel_iquel, 
+		"MAXPAGE", // sql_isql, quel_iquel, 
+		"MAXQUERY", // sql_isql, quel_iquel, 
+		"MAXROW", // sql_isql, quel_iquel, 
+		"MAXVALUE", // sql_esql, sql_4gl, 
+		// "MENU", // sql_4gl, quel_4gl, 
+		"MENUITEM", // sql_esql, quel_equel, 
+		"MESSAGE", // sql_isql, sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		"MIN", // sql_isql, sql_esql, sql_4gl, quel_iquel, quel_equel, 
+		"MINVALUE", // sql_esql, sql_4gl, 
+		// "MODE", // sql_4gl, quel_4gl, 
+		"MODIFY", // sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"MODULE", // sql_isql, 
+		"MONEY_FORMAT", // sql_isql, quel_iquel, 
+		"MONEY_PREC", // sql_isql, quel_iquel, 
+		// "MOVE", // quel_iquel, 
+		"NATURAL", // sql_isql, sql_esql, 
+		"NEXT", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		// "NEXTFIELD", // sql_4gl, 
+		"NEXTVAL", // sql_isql, sql_esql, sql_4gl, 
+		"NO", // sql_esql, sql_4gl, 
+		"NOCACHE", // sql_isql, sql_esql, sql_4gl, 
+		"NOCYCLE", // sql_isql, sql_esql, sql_4gl, 
+		// "NOECHO", // sql_4gl, quel_4gl, 
+		"NOFLATTEN", // sql_isql, 
+		"NOHASH", // sql_isql, 
+		"NOIO_TRACE", // sql_isql, quel_iquel, 
+		"NOJOINOP", // sql_isql, quel_iquel, 
+		"NOJOURNALING", // sql_isql, quel_iquel, 
+		"NOLOCK_TRACE", // sql_isql, quel_iquel, 
+		"NOLOG_TRACE", // sql_isql, quel_iquel, 
+		"NOLOGDBEVENTS", // sql_isql, 
+		"NOLOGGING", // sql_isql, quel_iquel, 
+		"NOMAXCONNECT", // sql_isql, 
+		"NOMAXCOST", // sql_isql, quel_iquel, 
+		"NOMAXCPU", // sql_isql, quel_iquel, 
+		"NOMAXIDLE", // sql_isql, 
+		"NOMAXIO", // sql_isql, quel_iquel, 
+		"NOMAXPAGE", // sql_isql, quel_iquel, 
+		"NOMAXQUERY", // sql_isql, quel_iquel, 
+		"NOMAXROW", // sql_isql, quel_iquel, 
+		"NOMAXVALUE", // sql_isql, sql_esql, sql_4gl, 
+		"NOMINVALUE", // sql_isql, sql_esql, sql_4gl, 
+		"NOOJFLATTEN", // sql_isql, 
+		"NOOPTIMIZEONLY", // sql_isql, quel_iquel, 
+		"NOORDER", // sql_isql, sql_esql, sql_4gl, 
+		"NOPARALLEL", // sql_isql, 
+		"NOPRINTDBEVENTS", // sql_isql, 
+		"NOPRINTQRY", // sql_isql, quel_iquel, 
+		"NOPRINTRULES", // sql_isql, 
+		"NOQEP", // sql_isql, quel_iquel, 
+		"NORULES", // sql_isql, 
+		// "NOSQL", // quel_iquel, 
+		"NOSTATISTICS", // sql_isql, quel_iquel, 
+		"NOT", // sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"NOTRACE", // sql_isql, quel_iquel, 
+		"NOTRIM", // sql_esql, quel_equel, 
+		"NOUNICODE_SUBSTITUTION", // sql_isql, 
+		"NULL", // sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"NULLIF", // sql_isql, 
+		"OF", // sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"OJFLATTEN", // sql_isql, 
+		"ON", // sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"ONLY", // sql_esql, sql_4gl, quel_iquel, quel_4gl, 
+		"OPEN", // sql_esql, quel_iquel, quel_equel, 
+		"OPTIMIZEONLY", // sql_isql, quel_iquel, 
+		"OPTION", // sql_isql, 
+		"OR", // sql_isql, sql_esql, quel_iquel, quel_equel, 
+		"ORDER", // sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"OUT", // sql_esql, 
+		"OUTER", // sql_esql, sql_4gl, 
+		"PARALLEL", // sql_isql, 
+		// "PARAM", // quel_equel, 
+		"PARTITION", // sql_esql, 
+		"PERMIT", // sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"PREPARE", // sql_isql, sql_esql, 
+		"PRESERVE", // sql_isql, sql_esql, 
+		// "PREVIOUSFIELD", // sql_4gl, 
+		"PRIMARY", // sql_esql, sql_4gl, 
+		"PRINT", // sql_esql, quel_iquel, quel_equel, 
+		"PRINTDBEVENTS", // sql_isql, 
+		"PRINTQRY", // sql_isql, quel_iquel, 
+		"PRINTRULES", // sql_isql, 
+		"PRINTSCREEN", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		// "PRIVILEGES", // sql_4gl, 
+		"PROCEDURE", // sql_esql, sql_4gl, quel_4gl, 
+		// "PROFILE", // 
+		"PROMPT", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		"PUBLIC", // sql_isql, sql_esql, 
+		"PURGETABLE", // sql_esql, sql_4gl, quel_4gl, 
+		"PUT", // sql_esql, 
+		"PUTFORM", // sql_esql, quel_equel, 
+		"PUTOPER", // sql_esql, quel_equel, 
+		"PUTROW", // sql_esql, quel_equel, 
+		"QEP", // sql_isql, quel_iquel, 
+		"QRY", // sql_isql, quel_iquel, quel_4gl, 
+		// "QUALIFICATION", // sql_4gl, quel_4gl, 
+		"QUERY", // sql_isql, quel_iquel, 
+		"RAISE", // sql_esql, sql_4gl, 
+		"RANDOM_SEED", // sql_isql, 
+		// "RANGE", // quel_iquel, quel_equel, quel_4gl, 
+		"RAWPCT", // sql_isql, sql_esql, sql_4gl, 
+		"READ", // sql_esql, 
+		"READONLY", // sql_isql, quel_iquel, 
+		"REDISPLAY", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		"REFERENCES", // sql_isql, sql_esql, sql_4gl, 
+		"REFERENCING", // sql_isql, sql_4gl, 
+		"REGISTER", // sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"RELOCATE", // sql_isql, sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"REMOTE", // sql_esql, 
+		"REMOVE", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		// "RENAME", // quel_iquel, 
+		"REPEAT", // sql_isql, sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		"REPEATABLE", // sql_isql, sql_esql, sql_4gl, 
+		"REPEATED", // sql_esql, sql_4gl, 
+		"REPLACE", // sql_esql, quel_iquel, quel_equel, quel_4gl, 
+		// "REPLICATE", // quel_iquel, 
+		"RESTART", // sql_isql, sql_esql, sql_4gl, 
+		"RESTRICT", // sql_isql, sql_esql, 
+		"RESULT", // sql_esql, sql_4gl, 
+		"RESULT_STRUCTURE", // sql_isql, quel_iquel, 
+		"RESUME", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		"RET_INTO", // sql_isql, quel_iquel, 
+		"RETRIEVE", // sql_esql, quel_iquel, quel_equel, quel_4gl, 
+		"RETURN", // sql_isql, sql_4gl, quel_4gl, 
+		// "RETURNING", // sql_4gl, quel_4gl, 
+		"REVOKE", // sql_isql, sql_esql, sql_4gl, 
+		"RIGHT", // sql_esql, sql_4gl, 
+		"ROLE", // sql_esql, sql_4gl, 
+		"ROLLBACK", // sql_isql, sql_esql, sql_4gl, 
+		"ROW", // sql_esql, sql_4gl, 
+		"ROWS", // sql_isql, sql_esql, 
+		"RULE", // sql_esql, sql_4gl, 
+		"RULES", // sql_isql, 
+		// "RUN", // sql_4gl, quel_4gl, 
+		"SAVE", // sql_isql, sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"SAVEPOINT", // sql_isql, sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"SCHEMA", // sql_isql, sql_esql, 
+		"SCREEN", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		"SCROLL", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		"SCROLLDOWN", // sql_esql, quel_equel, 
+		"SCROLLUP", // sql_esql, quel_equel, 
+		"SECTION", // sql_esql, 
+		"SECURITY_ALARM", // sql_esql, sql_4gl, 
+		"SECURITY_AUDIT", // sql_esql, sql_4gl, 
+		"SELECT", // sql_isql, sql_esql, sql_4gl, 
+		// "SEND", // sql_4gl, 
+		"SEQUENCE", // sql_esql, sql_4gl, 
+		"SERIALIZABLE", // sql_isql, sql_esql, sql_4gl, 
+		"SESSION", // sql_esql, sql_4gl, quel_iquel, 
+		"SESSION_USER", // sql_isql, quel_iquel, 
+		"SET", // sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		// "SET_4GL", // quel_equel, 
+		// "SET_EQUEL", // quel_equel, 
+		// "SET_FORMS", // sql_4gl, quel_4gl, 
+		"SET_FRS", // sql_esql, quel_equel, 
+		"SET_INGRES", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		"SET_SQL", // sql_esql, sql_4gl, 
+		"SHORT_REMARK", // sql_isql, 
+		"SLEEP", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		"SOME", // sql_isql, sql_esql, sql_4gl, 
+		// "SORT", // quel_iquel, quel_equel, quel_4gl, 
+		"SQL", // sql_esql, quel_iquel, 
+		"START", // sql_isql, sql_esql, sql_4gl, 
+		"STATEMENT", // sql_esql, 
+		"STATISTICS", // sql_isql, quel_iquel, 
+		"STOP", // sql_esql, 
+		"STRUCTURE", // sql_isql, 
+		"SUBMENU", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		"SUBSTRING", // sql_isql, sql_esql, 
+		"SUM", // sql_isql, sql_esql, sql_4gl, quel_iquel, quel_equel, 
+		"SUMU", // sql_esql, quel_iquel, quel_equel, 
+		"SYMMETRIC", // sql_isql, sql_esql, 
+		"SYNONYM", // sql_esql, sql_4gl, 
+		// "SYSTEM", // sql_4gl, quel_4gl, 
+		"SYSTEM_MAINTAINED", // sql_isql, sql_esql, quel_iquel, quel_equel, 
+		"SYSTEM_PASSWORD", // sql_esql, 
+		"SYSTEM_USER", // sql_esql, 
+		"TABLE", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		"TABLEDATA", // sql_esql, quel_equel, 
+		"TEMPORARY", // sql_esql, sql_4gl, 
+		"THEN", // sql_isql, sql_esql, sql_4gl, quel_4gl, 
+		"TO", // sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"TRACE", // sql_isql, quel_iquel, 
+		"TRANSACTION", // sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		// "TYPE", // sql_4gl, 
+		"UNCOMMITTED", // sql_isql, sql_esql, sql_4gl, 
+		"UNICODE_SUBSTITUTION", // sql_isql, 
+		"UNION", // sql_isql, sql_esql, sql_4gl, 
+		"UNIQUE", // sql_isql, sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"UNLOADTABLE", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		"UNTIL", // sql_isql, sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"UP", // sql_esql, quel_equel, 
+		"UPDATE", // sql_esql, sql_4gl, quel_iquel, 
+		"UPDATE_ROWCOUNT", // sql_isql, 
+		"USER", // sql_esql, sql_4gl, 
+		// "USEREVENT", // sql_4gl, 
+		"USING", // sql_isql, sql_esql, 
+		"VALIDATE", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		"VALIDROW", // sql_esql, sql_4gl, quel_equel, quel_4gl, 
+		"VALUE", // sql_esql, sql_4gl, 
+		"VALUES", // sql_esql, sql_4gl, 
+		"VIEW", // sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"WHEN", // sql_isql, sql_esql, 
+		"WHENEVER", // sql_esql, 
+		"WHERE", // sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		"WHILE", // sql_isql, quel_4gl, 
+		"WITH", // sql_esql, sql_4gl, quel_iquel, quel_equel, quel_4gl, 
+		// "WORK", // sql_4gl, 
+		"WRITE", // sql_esql, sql_4gl, 
+	};
+
+	// Understanding the Elements of SQL Statements/SQL Operations
+	private static final String[] predicates = {
+			"+",
+			"-",
+			"**",
+			"*",
+			"/",
+			"=",
+			"<>",
+			">",
+			">=",
+			"<",
+			"<=",
+			"!=",
+			"^=",
+			"||",
+			",",
+			";",
+			".",
+			"(",
+			")",
+			"?"
+			};
+
+	// Understanding SQL Data Types
+	private static final String[] types = {
+		"C",
+		"CHAR",
+		"CHARACTER",
+		"TEXT",
+		"VARCHAR",
+		"CHARACTER", "VARYING",
+		"LONG", "VARCHAR",
+		"LONG", "VARCHAR",
+		"CLOB",
+		"CHARACTER", "LARGE", "OBJECT",
+		"CHAR", "LARGE", "OBJECT",
+		"NCHAR",
+		"NVARCHAR",
+		"LONG", "NVARCHAR",
+		"CLOB",
+		"NCLOB",
+		"NCHAR", "LARGE", "OBJECT",
+		"NATIONAL", "CHARACTER", "LARGE", "OBJECT",
+		"INTEGER",
+		"INTEGER4",
+		"SMALLINT",
+		"INTEGER2",
+		"BIGINT",
+		"INTEGER8",
+		"TINYINT",
+		"INTEGER1",
+		"DECIMAL",
+		"FLOAT",
+		"FLOAT8",
+		"DOUBLE", "PRECISION",
+		"FLOAT4",
+		"REAL",
+		"DATE",
+		"ANSIDATE",
+		"INGRESDATE",
+		"TIME",
+		"TIME", "WITH", "TIME", "ZONE",
+		"TIME", "WITHOUT", "TIME", "ZONE",
+		"TIME", "WITH", "LOCAL", "TIME", "ZONE",
+		"TIMESTAMP",
+		"TIMESTAMP", "WITH", "TIME", "ZONE",
+		"TIMESTAMP", "WITHOUT", "TIME", "ZONE",
+		"TIMESTAMP", "WITH", "LOCAL", "TIME", "ZONE",
+		"INTERVAL",
+		"INTERVAL", "YEAR", "TO", "MONTH",
+		"INTERVAL", "DAY", "TO", "SECOND",
+		"MONEY",
+		"OBJECT_KEY",
+		"TABLE_KEY",
+		"BYTE",
+		"BYTE", "VARYING",
+		"LONG", "BYTE",
+		"BLOB",
+		"BINARY", "LARGE", "OBJECT",
+	};
+	
+	// SQL Constants
+	private static final String[] constants = {
+		"NOW",
+		"NULL",
+		"TODAY",
+		"CURRENT_DATE",
+		"CURRENT_TIME",
+		"CURRENT_TIMESTAMP",
+		"LOCAL_TIME",
+		"LOCAL_TIMESTAMP",
+		"USER",
+		"CURRENT_USER",
+		"SYSTEM_USER",
+		"INITIAL_USER",
+		"SESSION_USER",		
+	};
+	
+	//Understanding the Elements of SQL Statements/SQL Functions
+	private static final String[] functions = {
+//		"ANSIDATE", // type cast
+//		"BYTE", // type cast
+//		"BINARY", // type cast
+//		"C", // type cast
+//		"CHAR", // type cast
+//		"DATE", // type cast
+//		"INGRESDATE", // type cast
+//		"DECIMAL", // type cast
+		"NUMERIC",
+		"DOW",
+//		"FLOAT4", // type cast
+//		"FLOAT8", // type cast
+		"HEX",
+		"INT1",
+//		"TINYINT", // type cast
+		"INT2",
+//		"SMALLINT", // type cast
+		"INT4",
+		"INT",
+//		"INTEGER", // type cast
+		"INT8",
+//		"BIGINT", // type cast
+		"INTERVAL_DTOS",
+		"INTERVAL_YTOM",
+		"LONG_BYTE",
+		"LONG_BINARY",
+		"LONG_VARCHAR",
+//		"MONEY", // type cast
+//		"NCHAR", // type cast
+//		"NVARCHAR", // type cast
+//		"OBJECT_KEY", // type cast
+//		"TABLE_KEY", // type cast
+//		"TEXT", // type cast
+		"TIME_LOCAL",
+		"TIME_WITH_TZ",
+//		"TIME", // type cast
+		"TIME_WO_TZ",
+		"TIMESTAMP_LOCAL",
+		"TIMESTAMP_WITH_TZ",
+//		"TIMESTAMP", // type cast
+		"TIMESTAMP_WO_TZ",
+		"UNHEX",
+		"VARBYTE",
+		"VARBINARY",
+//		"VARCHAR", // type cast
+		"ABS",
+		"ACOS",
+		"ASIN",
+		"ATAN",
+		"ATAN2",
+		"CEIL",
+		"CEILING",
+		"COS",
+		"EXP",
+		"FLOOR",
+		"LOG",
+		"LN",
+		"MOD",
+		"PI",
+		"POWER",
+		"ROUND",
+		"SIGN",
+		"SIN",
+		"SQRT",
+		"TAN",
+		"TRUNC",
+		"TRUNCATE",
+		"ASCII",
+		"BYTEEXTRACT",
+		"CHAREXTRACT",
+		"CHARACTER_LENGTH",
+		"CHR",
+		"COLLATION_WEIGHT",
+		"CONCAT",
+		"II_IPADDR",
+		"LEFT",
+		"LENGTH",
+		"LOCATE",
+		"LOWERCASE",
+		"LOWER",
+		"LPAD",
+		"LTRIM",
+		"OCTET_LENGTH",
+		"POSITION",
+		"REPLACE",
+		"RIGHT",
+		"RPAD",
+		"RTRIM",
+		"SHIFT",
+		"SIZE",
+		"SOUNDEX",
+		"SQUEEZE",
+		"SUBSTRING",
+		"TRIM",
+		"NOTRIM",
+		"UPPERCASE",
+		"UPPER",
+		"YEAR",
+		"QUARTER",
+		"MONTH",
+		"WEEK",
+		"WEEK_ISO",
+		"DAY",
+		"HOUR",
+		"MINUTE",
+		"SECOND",
+		"MICROSECOND",
+		"NANOSECOND",
+		"DATE_TRUNC",
+		"DATE_PART",
+		"DATE_GMT",
+		"GMT_TIMESTAMP",
+//		"INTERVAL", // type cast
+		"ISDST",
+		"_DATE",
+		"_DATE4",
+		"_TIME",
+		"EXTRACT",
+		"BIT_ADD",
+		"BIT_AND",
+		"BIT_NOT",
+		"BIT_OR",
+		"BIT_XOR",
+		"INTEXTRACT",
+		"HASH",
+		"RANDOM",
+		"ANY",
+		"AVG",
+		"COUNT",
+		"MAX",
+		"MIN",
+		"SUM",
+		"STDDEV_POP",
+		"STDDEV_SAMP",
+		"VAR_POP",
+		"VAR_SAMP",
+		"REGR_COUNT",
+		"INDEP_PARM",
+		"DEP_PARM",
+		"COVAR_POP",
+		"INDEP_PARM",
+		"DEP_PARM",
+		"COVAR_SAMP",
+		"INDEP_PARM",
+		"DEP_PARM",
+		"CORR",
+		"INDEP_PARM",
+		"DEP_PARM",
+		"REGR_R2",
+		"INDEP_PARM",
+		"DEP_PARM",
+		"REGR_SLOPE",
+		"INDEP_PARM",
+		"DEP_PARM",
+		"REGR_INTERCEPT",
+		"INDEP_PARM",
+		"DEP_PARM",
+		"REGR_SXX",
+		"INDEP_PARM",
+		"DEP_PARM",
+		"REGR_SYY",
+		"INDEP_PARM",
+		"DEP_PARM",
+		"REGR_SXY",
+		"INDEP_PARM",
+		"DEP_PARM",
+		"REGR_AVGX",
+		"INDEP_PARM",
+		"DEP_PARM",
+		"REGR_AVGY",
+		"INDEP_PARM",
+		"DEP_PARM",
+		"IFNULL",
+		"UUID_CREATE",
+		"UUID_FROM_CHAR",
+		"UUID_COMPARE",
+	};
+
+	private static final String[] _comments = {
+		"--"
+	};
+
+	/**
+	 * @return Returns the functions.
+	 */
+	public String[] getFunctions() {
+		return functions;
+	}
+
+	/**
+	 * @return Returns the predicates.
+	 */
+	public String[] getPredicates() {
+		return predicates;
+	}
+
+	/**
+	 * @return Returns the reservedwords.
+	 */
+	public String[] getReservedwords() {
+		return reservedwords;
+	}
+
+	public String[] getUnreservedwords() {
+		return _unreservedwords;
+	}
+
+	/**
+	 * @return Returns the types.
+	 */
+	public String[] getTypes() {
+		return types;
+	}
+
+	/**
+	 * @return Returns the allWords.
+	 */
+	public Object[] getAllWords() {
+		return new Object[] { getReservedwords(), getUnreservedwords(),
+				getPredicates(), getTypes(), getConstants(), getFunctions(),
+				getGlobalVariables() };
+	}
+
+	/**
+	 * @return Returns the constants.
+	 */
+	public String[] getConstants() {
+		return constants;
+	}
+
+	public String[] getSingleLineComments() {
+		return _comments;
+	}
+
+	public String[] getGlobalVariables() {
+		return EMPTY;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/sqleditor/texthover/HoverInfoBuilder.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/sqleditor/texthover/HoverInfoBuilder.java
new file mode 100644
index 0000000..85afe65
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/sqleditor/texthover/HoverInfoBuilder.java
@@ -0,0 +1,172 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.sqleditor.texthover;
+
+import org.eclipse.datatools.enablement.ingres.internal.ui.util.Messages;
+import org.eclipse.datatools.sqltools.sql.parser.SQLParserConstants;
+import org.eclipse.datatools.sqltools.sql.parser.ast.IASTSQLStatement;
+import org.eclipse.datatools.sqltools.sql.parser.ast.Node;
+
+/**
+ * Translates given objects into hover texts.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class HoverInfoBuilder {
+
+	/**
+	 * translates a given node (of type IASTSQLStatement) into an hovering text.
+	 * simple maps (IASTSQLStatement) node).getType() to a string. Help text is
+	 * stored in the property file
+	 * org.eclipse.datatools.enablement.ingres.internal.ui.l10n.messages.properties
+	 * with the prefix "HoverInfoBuilder."
+	 * 
+	 * @param node
+	 *            the node
+	 * @return the mapped string or null
+	 */
+	public static String getHoverInfoString(final Node node) {
+		String hoverInfo = null;
+
+		if (node instanceof IASTSQLStatement) {
+			switch (((IASTSQLStatement) node).getType()) {
+			case SQLParserConstants.TYPE_SQL_ROOT:
+				hoverInfo = Messages.getString("HoverInfoBuilder.root"); //$NON-NLS-1$
+				break;
+
+			case SQLParserConstants.TYPE_SQL_OTHERS:
+				hoverInfo = Messages.getString("HoverInfoBuilder.others"); //$NON-NLS-1$
+				break;
+
+			case SQLParserConstants.TYPE_SQL_SELECT:
+				hoverInfo = Messages.getString("HoverInfoBuilder.select"); //$NON-NLS-1$
+				break;
+
+			case SQLParserConstants.TYPE_SQL_INSERT:
+				hoverInfo = Messages.getString("HoverInfoBuilder.insert"); //$NON-NLS-1$
+				break;
+
+			case SQLParserConstants.TYPE_SQL_DELETE:
+				hoverInfo = Messages.getString("HoverInfoBuilder.delete"); //$NON-NLS-1$
+				break;
+
+			case SQLParserConstants.TYPE_SQL_UPDATE:
+				hoverInfo = Messages.getString("HoverInfoBuilder.update"); //$NON-NLS-1$
+				break;
+
+			case SQLParserConstants.TYPE_SQL_CREATE_DATABASE:
+				hoverInfo = Messages
+						.getString("HoverInfoBuilder.create.database"); //$NON-NLS-1$
+				break;
+
+			case SQLParserConstants.TYPE_SQL_CREATE_TABLE:
+				hoverInfo = Messages.getString("HoverInfoBuilder.create.table"); //$NON-NLS-1$
+				break;
+
+			case SQLParserConstants.TYPE_SQL_CREATE_VIEW:
+				hoverInfo = Messages.getString("HoverInfoBuilder.create.view"); //$NON-NLS-1$
+				break;
+
+			case SQLParserConstants.TYPE_SQL_CREATE_PROCEDURE:
+				hoverInfo = Messages
+						.getString("HoverInfoBuilder.create.procedure"); //$NON-NLS-1$
+				break;
+
+			case SQLParserConstants.TYPE_SQL_CREATE_FUNCTION:
+				hoverInfo = Messages
+						.getString("HoverInfoBuilder.create.function"); //$NON-NLS-1$
+				break;
+
+			case SQLParserConstants.TYPE_SQL_CREATE_EVENT:
+				hoverInfo = Messages.getString("HoverInfoBuilder.create.event"); //$NON-NLS-1$
+				break;
+
+			case SQLParserConstants.TYPE_SQL_CREATE_TRIGGER:
+				hoverInfo = Messages
+						.getString("HoverInfoBuilder.create.trigger"); //$NON-NLS-1$
+				break;
+
+			case SQLParserConstants.TYPE_SQL_CREATE_DEFAULT:
+				hoverInfo = Messages
+						.getString("HoverInfoBuilder.create.default"); //$NON-NLS-1$
+				break;
+
+			case SQLParserConstants.TYPE_SQL_DECLARE:
+				hoverInfo = Messages.getString("HoverInfoBuilder.declare"); //$NON-NLS-1$
+				break;
+
+			case SQLParserConstants.TYPE_SQL_BEGIN:
+				hoverInfo = Messages.getString("HoverInfoBuilder.begin"); //$NON-NLS-1$
+				break;
+
+			case SQLParserConstants.TYPE_SQL_CREATE_INDEX:
+				hoverInfo = Messages.getString("HoverInfoBuilder.create.index"); //$NON-NLS-1$
+				break;
+
+			case SQLParserConstants.TYPE_SQL_ALTER_DATABASE:
+				hoverInfo = Messages
+						.getString("HoverInfoBuilder.alter.database"); //$NON-NLS-1$
+				break;
+
+			case SQLParserConstants.TYPE_SQL_ALTER_TABLE:
+				hoverInfo = Messages.getString("HoverInfoBuilder.alter.table"); //$NON-NLS-1$
+				break;
+
+			case SQLParserConstants.TYPE_SQL_ALTER_VIEW:
+				hoverInfo = Messages.getString("HoverInfoBuilder.alter.view"); //$NON-NLS-1$
+				break;
+
+			case SQLParserConstants.TYPE_SQL_ALTER_PROCEDURE:
+				hoverInfo = Messages
+						.getString("HoverInfoBuilder.alter.procedure"); //$NON-NLS-1$
+				break;
+
+			case SQLParserConstants.TYPE_SQL_ALTER_FUNCTION:
+				hoverInfo = Messages
+						.getString("HoverInfoBuilder.alter.function"); //$NON-NLS-1$
+				break;
+
+			case SQLParserConstants.TYPE_SQL_ALTER_EVENT:
+				hoverInfo = Messages.getString("HoverInfoBuilder.alter.event"); //$NON-NLS-1$
+				break;
+
+			case SQLParserConstants.TYPE_SQL_ALTER_TRIGGER:
+				hoverInfo = Messages
+						.getString("HoverInfoBuilder.alter.trigger"); //$NON-NLS-1$
+				break;
+
+			case SQLParserConstants.TYPE_SQL_CALL:
+				hoverInfo = Messages.getString("HoverInfoBuilder.call"); //$NON-NLS-1$
+				break;
+
+			case SQLParserConstants.TYPE_SQL_BEGIN_TRANSACTION:
+				hoverInfo = Messages
+						.getString("HoverInfoBuilder.begin.transaction"); //$NON-NLS-1$
+				break;
+
+			case SQLParserConstants.TYPE_SQL_ALTER_INDEX:
+				hoverInfo = Messages.getString("HoverInfoBuilder.alter.index"); //$NON-NLS-1$
+				break;
+
+			case SQLParserConstants.TYPE_SQL_DROP_VIEW:
+				hoverInfo = Messages.getString("HoverInfoBuilder.drop.view"); //$NON-NLS-1$
+				break;
+
+			case SQLParserConstants.TYPE_SQL_SELECT_INTO:
+				hoverInfo = Messages.getString("HoverInfoBuilder.select.into"); //$NON-NLS-1$
+				break;
+			}
+		}
+
+		return hoverInfo;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/sqleditor/texthover/IngresSQLEditorTextHover.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/sqleditor/texthover/IngresSQLEditorTextHover.java
new file mode 100644
index 0000000..ab219a1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/sqleditor/texthover/IngresSQLEditorTextHover.java
@@ -0,0 +1,194 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.sqleditor.texthover;
+
+import org.eclipse.datatools.sqltools.core.DatabaseVendorDefinitionId;
+import org.eclipse.datatools.sqltools.editor.core.connection.ISQLEditorConnectionInfo;
+import org.eclipse.datatools.sqltools.sql.parser.ast.IASTSQLStatement;
+import org.eclipse.datatools.sqltools.sql.parser.ast.Node;
+import org.eclipse.datatools.sqltools.sql.parser.ast.SimpleNode;
+import org.eclipse.datatools.sqltools.sqleditor.SQLEditor;
+import org.eclipse.datatools.sqltools.sqleditor.sql.AbstractSQLEditorTextHover;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.ui.IEditorPart;
+
+/**
+ * Provides hovering information for a given sql document. Uses results from sql
+ * parser, so the sql needs to be valid.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresSQLEditorTextHover extends AbstractSQLEditorTextHover {
+
+	public static final String VENDOR_INGRES = "INGRES";
+
+	private transient IEditorPart mEditor;
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.sqltools.sqleditor.sql.AbstractSQLEditorTextHover#setEditor(org.eclipse.ui.IEditorPart)
+	 */
+	public void setEditor(final IEditorPart editor) {
+		mEditor = editor;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.text.ITextHover#getHoverInfo(org.eclipse.jface.text.ITextViewer,
+	 *      org.eclipse.jface.text.IRegion)
+	 */
+	public String getHoverInfo(final ITextViewer textViewer,
+			final IRegion hoverRegion) {
+		String result = null;
+		if (canHandle()) {
+			// get covering node of the given hoverRegion, finds the covering
+			// statement node and translates the statement node to a help
+			// text
+			result = HoverInfoBuilder
+					.getHoverInfoString(findStatement(findNode(hoverRegion
+							.getOffset())));
+		}
+
+		return result;
+	}
+
+	/**
+	 * Determines if the class can handle the given input. It is required that
+	 * the editor is an SQLEditor and the vendor of the assigned connection info
+	 * is "Ingres".
+	 * 
+	 * @return
+	 */
+	private boolean canHandle() {
+		boolean result = false;
+
+		if (mEditor instanceof SQLEditor) {
+			ISQLEditorConnectionInfo connInfo = ((SQLEditor) mEditor)
+					.getConnectionInfo();
+			result = canHandle(connInfo);
+		}
+
+		return result;
+	}
+
+	/**
+	 * Determines if the class can handle the given input. Checks that the
+	 * vendor of the given connection info is "Ingres".
+	 * 
+	 * @param connInfo
+	 * @return
+	 */
+	private boolean canHandle(final ISQLEditorConnectionInfo connInfo) {
+		boolean result = false;
+		if (connInfo != null) {
+			DatabaseVendorDefinitionId vendorDefId = connInfo
+					.getDatabaseVendorDefinitionId();
+			result = canHandle(vendorDefId);
+		}
+		return result;
+	}
+
+	/**
+	 * Determines if the class can handle the given input. Checks that the
+	 * vendor of the given vendor id is "Ingres".
+	 * 
+	 * @param vendorDefId
+	 * @return
+	 */
+	private boolean canHandle(final DatabaseVendorDefinitionId vendorDefId) {
+		boolean result = false;
+		if (vendorDefId != null
+				&& VENDOR_INGRES.equalsIgnoreCase(vendorDefId.getProductName())) {
+			result = true;
+		}
+		return result;
+	}
+
+	/**
+	 * Searches and returns the node (from the parsing result) that covers the
+	 * offset in the document of the editor.
+	 * 
+	 * @param offset
+	 * @return
+	 */
+	private Node findNode(final int offset) {
+		Node result = null;
+
+		if (mEditor instanceof SQLEditor) {
+			IDocument document = ((SQLEditor) mEditor).getDocumentProvider()
+					.getDocument(mEditor.getEditorInput());
+			if (((SQLEditor) mEditor).getParsingResult() != null) {
+				Node rootNode = ((SQLEditor) mEditor).getParsingResult()
+						.getRootNode();
+				result = findNode(document, offset, rootNode, true);
+			}
+		}
+
+		return result;
+	}
+
+	private Node findStatement(Node node) {
+		if (node == null || node instanceof IASTSQLStatement) {
+			return node;
+		} else {
+			return findStatement(node.jjtGetParent());
+		}
+	}
+
+	// the following methods are copied from
+	// org.eclipse.datatools.sqltools.sql.parser.ParsingResult
+	// there was just a small change in contains(IDocument, int, Node, boolean)
+	// necessary to enable recognize the containing nodes (the hovering failed
+	// on the first keyword of a statement)
+
+	public static Node findNode(final IDocument document, final int offset,
+			final Node rootNode, final boolean inclusive) {
+		if (!contains(document, offset, rootNode, inclusive)) {
+			return null;
+		}
+
+		// now we are sure the root contains offset
+		SimpleNode root = (SimpleNode) rootNode;
+		for (int i = root.jjtGetNumChildren() - 1; i >= 0; i--) {
+			SimpleNode node = (SimpleNode) root.jjtGetChild(i);
+			if (contains(document, offset, node, inclusive)) {
+				return findNode(document, offset, node, inclusive);
+			}
+		}
+		return root;
+	}
+
+	private static boolean contains(final IDocument document, final int offset,
+			final Node node, final boolean inclusive) {
+		SimpleNode simpleNode = (SimpleNode) node;
+		if (offset > document.getLength()) {
+			return false;
+		}
+
+		// I assume that both offsets are zero based (@see
+		// Token.getStartOffset(IDocument)), thats why the offset is part of the
+		// region if it equals to the start offset
+		// boolean in = simpleNode.getStartOffset(document) < offset ;
+		boolean in = simpleNode.getStartOffset(document) <= offset;
+		if (inclusive) {
+			in = in && simpleNode.getGreatestEndOffset(document) >= offset;
+		} else {
+			in = in && simpleNode.getEndOffset(document) >= offset;
+		}
+		return in;
+
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/util/Messages.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/util/Messages.java
new file mode 100644
index 0000000..2ef0150
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/util/Messages.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.util;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * @author enrico.schenk@ingres.com
+ */
+public class Messages {
+	
+	private static final String BUNDLE_NAME = "org.eclipse.datatools.enablement.ingres.internal.ui.l10n.messages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private Messages() {
+	}
+
+	public static String getString(String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/virtual/DBEventsFolder.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/virtual/DBEventsFolder.java
new file mode 100644
index 0000000..7f23a6f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/virtual/DBEventsFolder.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual.VirtualNode;
+import org.eclipse.datatools.enablement.ingres.containment.IngresGroupID;
+import org.eclipse.datatools.enablement.ingres.internal.ui.providers.IDBEventsFolder;
+
+/**
+ * A virtual node, representing a database event folder.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class DBEventsFolder extends VirtualNode implements IDBEventsFolder {
+
+	public DBEventsFolder(String name, String displayName, Object parent) {
+		super(name, displayName, parent);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode#getGroupID()
+	 */
+	public String getGroupID() {
+		return IngresGroupID.DB_EVENT_GROUP_ID;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/virtual/ProcedureParameterFolder.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/virtual/ProcedureParameterFolder.java
new file mode 100644
index 0000000..4ffa0cb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/virtual/ProcedureParameterFolder.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual.VirtualNode;
+import org.eclipse.datatools.enablement.ingres.containment.IngresGroupID;
+import org.eclipse.datatools.enablement.ingres.internal.ui.providers.IProcedureParameterFolder;
+
+/**
+ * A virtual node, representing a procedure parameter folder.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class ProcedureParameterFolder extends VirtualNode implements IProcedureParameterFolder {
+
+	public ProcedureParameterFolder(String name, String displayName, Object parent) {
+		super(name, displayName, parent);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode#getGroupID()
+	 */
+	public String getGroupID() {
+		return IngresGroupID.PROCEDURE_PARAMETER_GROUP_ID;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/virtual/SynonymFolder.java b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/virtual/SynonymFolder.java
new file mode 100644
index 0000000..0b86d10
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres.ui/src/org/eclipse/datatools/enablement/ingres/internal/ui/virtual/SynonymFolder.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ui.virtual;
+
+import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual.VirtualNode;
+import org.eclipse.datatools.enablement.ingres.containment.IngresGroupID;
+import org.eclipse.datatools.enablement.ingres.internal.ui.providers.ISynonymsFolder;
+
+/**
+ * A virtual node, representing a synonym folder.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class SynonymFolder extends VirtualNode implements ISynonymsFolder {
+
+	public SynonymFolder(String name, String displayName, Object parent) {
+		super(name, displayName, parent);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode#getGroupID()
+	 */
+	public String getGroupID() {
+		return IngresGroupID.SYNONYM_GROUP_ID;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/.classpath b/plugins/org.eclipse.datatools.enablement.ingres/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/.project b/plugins/org.eclipse.datatools.enablement.ingres/.project
new file mode 100644
index 0000000..9d3152f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/.project
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.ingres</name>
+	<comment>JavaCC Nature</comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>sf.eclipse.javacc.javaccbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.enablement.ingres/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..5bfbfba
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Tue Apr 01 12:23:59 CEST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.3
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.enablement.ingres/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..177f941
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-Localization: plugin
+Bundle-ManifestVersion: 2
+Bundle-Name: %PLUGIN_NAME
+Bundle-SymbolicName: org.eclipse.datatools.enablement.ingres;singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-Vendor: %PROVIDER_NAME
+Require-Bundle: org.eclipse.datatools.connectivity,
+ org.eclipse.datatools.connectivity.db.generic,
+ org.eclipse.datatools.connectivity.sqm.core,
+ org.eclipse.datatools.modelbase.sql,
+ org.eclipse.core.runtime
+Eclipse-LazyStart: true
+Export-Package: org.eclipse.datatools.enablement.ingres.containment,
+ org.eclipse.datatools.enablement.ingres.models.ingressqlmodel,
+ org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl,
+ org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.util
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/about.html b/plugins/org.eclipse.datatools.enablement.ingres/about.html
new file mode 100644
index 0000000..6f6dda3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/about.html
@@ -0,0 +1,28 @@
+<html>
+<head>
+<title>About This Content</title>
+</head>
+<body>
+<div>
+<h3>About This Content</h3>
+<p>June 15, 2009</p>
+<h3>License</h3>
+<p>The Eclipse Foundation makes available all content in this plug-in
+(&quot;Content&quot;). Unless otherwise indicated below, the Content is
+provided to you under the terms and conditions of the Eclipse Public License
+Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available at <a
+href="http://www.eclipse.org/org/documents/epl-v10.php">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation,
+the Content is being redistributed by another party (&quot;Redistributor&quot;)
+and different terms and conditions may apply to your use of any object code in
+the Content. Check the RedistributorÂ’s license that was provided with the
+Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source
+code in the Content and such source code may be obtained at <a
+href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+<p>&nbsp;</p>
+</div>
+</body>
+</html>
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/build.properties b/plugins/org.eclipse.datatools.enablement.ingres/build.properties
new file mode 100644
index 0000000..709e4c1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/build.properties
@@ -0,0 +1,9 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.properties,\
+               plugin.xml,\
+               icons/,\
+               about.html
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/icons/jdbc_16.gif b/plugins/org.eclipse.datatools.enablement.ingres/icons/jdbc_16.gif
new file mode 100644
index 0000000..ef7809c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/icons/jdbc_16.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/models/ingressqlmodel.ecore b/plugins/org.eclipse.datatools.enablement.ingres/models/ingressqlmodel.ecore
new file mode 100644
index 0000000..cbd9d86
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/models/ingressqlmodel.ecore
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="ingressqlmodel"
+    nsURI="http:///org/eclipse/datatools/enablement/ingres/ingressqlmodel.ecore" nsPrefix="IngresModel">
+  <eClassifiers xsi:type="ecore:EClass" name="IngresSynonym" eSuperTypes="platform:/plugin/org.eclipse.datatools.modelbase.sql/model/sqlmodel.ecore#//schema/SQLObject">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="schema" lowerBound="1"
+        eType="#//IngresSchema" eOpposite="#//IngresSchema/synonyms"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="tableName" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="IngresDBEvent" eSuperTypes="platform:/plugin/org.eclipse.datatools.modelbase.sql/model/sqlmodel.ecore#//schema/SQLObject">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="schema" lowerBound="1"
+        eType="#//IngresSchema" eOpposite="#//IngresSchema/dBEvents"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="IngresSchema" eSuperTypes="platform:/plugin/org.eclipse.datatools.modelbase.sql/model/sqlmodel.ecore#//schema/Schema">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="dBEvents" upperBound="-1"
+        eType="#//IngresDBEvent" eOpposite="#//IngresDBEvent/schema"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="synonyms" upperBound="-1"
+        eType="#//IngresSynonym" eOpposite="#//IngresSynonym/schema"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="IngresViewTable" eSuperTypes="platform:/plugin/org.eclipse.datatools.modelbase.sql/model/sqlmodel.ecore#//tables/ViewTable">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="source" eType="ecore:EClass platform:/plugin/org.eclipse.datatools.modelbase.sql/model/sqlmodel.ecore#//routines/Source"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="IngresTrigger" eSuperTypes="platform:/plugin/org.eclipse.datatools.modelbase.sql/model/sqlmodel.ecore#//tables/Trigger">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="source" eType="ecore:EClass platform:/plugin/org.eclipse.datatools.modelbase.sql/model/sqlmodel.ecore#//routines/Source"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="IngresIdentitySpecifier" eSuperTypes="platform:/plugin/org.eclipse.datatools.modelbase.sql/model/sqlmodel.ecore#//schema/IdentitySpecifier">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="dataType" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="seqLength" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EBigInteger"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="seqPrecision" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EBigInteger"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="maximumOption" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EBooleanObject"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="minimumOption" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EBooleanObject"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="cacheSize" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EBigInteger"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="cacheOption" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EBooleanObject"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="orderOption" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EBooleanObject"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/models/ingressqlmodel.genmodel b/plugins/org.eclipse.datatools.enablement.ingres/models/ingressqlmodel.genmodel
new file mode 100644
index 0000000..f7f60e9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/models/ingressqlmodel.genmodel
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" copyrightText="Copyright (c) 2008 Ingres Corporation and others.&#xD;&#xA;All rights reserved. This program and the accompanying materials&#xD;&#xA;are made available under the terms of the Eclipse Public License v1.0&#xD;&#xA;which accompanies this distribution, and is available at&#xD;&#xA;http://www.eclipse.org/legal/epl-v10.html&#xD;&#xA;&#xD;&#xA;Contributors:&#xD;&#xA;  Ingres Corporation - initial API and implementation"
+    modelDirectory="/org.eclipse.datatools.enablement.ingres/src" modelPluginID="org.eclipse.datatools.enablement.ingres"
+    redirection="" modelName="Ingressqlmodel" editPluginClass="org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.provider.IngressqlmodelEditPlugin"
+    editorPluginClass="org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.presentation.IngressqlmodelEditorPlugin"
+    rootImplementsInterface="" runtimeCompatibility="true" importerID="org.eclipse.emf.importer.ecore"
+    providerRootExtendsClass="" usedGenPackages="platform:/plugin/org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore platform:/plugin/org.eclipse.datatools.modelbase.sql/model/sqlmodel.genmodel#//sqlmodel">
+  <foreignModel>ingressqlmodel.ecore</foreignModel>
+  <genPackages prefix="Ingressqlmodel" basePackage="org.eclipse.datatools.enablement.ingres.models"
+      disposableProviderFactory="true" ecorePackage="ingressqlmodel.ecore#/">
+    <genClasses ecoreClass="ingressqlmodel.ecore#//IngresSynonym">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference ingressqlmodel.ecore#//IngresSynonym/schema"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ingressqlmodel.ecore#//IngresSynonym/tableName"/>
+    </genClasses>
+    <genClasses ecoreClass="ingressqlmodel.ecore#//IngresDBEvent">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference ingressqlmodel.ecore#//IngresDBEvent/schema"/>
+    </genClasses>
+    <genClasses ecoreClass="ingressqlmodel.ecore#//IngresSchema">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference ingressqlmodel.ecore#//IngresSchema/dBEvents"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference ingressqlmodel.ecore#//IngresSchema/synonyms"/>
+    </genClasses>
+    <genClasses ecoreClass="ingressqlmodel.ecore#//IngresViewTable">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference ingressqlmodel.ecore#//IngresViewTable/source"/>
+    </genClasses>
+    <genClasses ecoreClass="ingressqlmodel.ecore#//IngresTrigger">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference ingressqlmodel.ecore#//IngresTrigger/source"/>
+    </genClasses>
+    <genClasses ecoreClass="ingressqlmodel.ecore#//IngresIdentitySpecifier">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ingressqlmodel.ecore#//IngresIdentitySpecifier/dataType"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ingressqlmodel.ecore#//IngresIdentitySpecifier/seqLength"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ingressqlmodel.ecore#//IngresIdentitySpecifier/seqPrecision"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ingressqlmodel.ecore#//IngresIdentitySpecifier/maximumOption"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ingressqlmodel.ecore#//IngresIdentitySpecifier/minimumOption"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ingressqlmodel.ecore#//IngresIdentitySpecifier/cacheSize"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ingressqlmodel.ecore#//IngresIdentitySpecifier/cacheOption"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ingressqlmodel.ecore#//IngresIdentitySpecifier/orderOption"/>
+    </genClasses>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/plugin.properties b/plugins/org.eclipse.datatools.enablement.ingres/plugin.properties
new file mode 100644
index 0000000..3957348
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/plugin.properties
@@ -0,0 +1,56 @@
+################################################################################
+## Copyright (c) 2006-2007 Ingres Corporation and others.
+## All rights reserved.   This program and the accompanying materials
+## are made available under the terms of the Eclipse Public License v1.0
+## which accompanies this distribution, and is available at
+## http://www.eclipse.org/legal/epl-v10.html
+##
+## Contributors: 
+##  Ingres - Implementation
+################################################################################
+
+PLUGIN_NAME = Ingres DTP Plug-in
+PROVIDER_NAME = Eclipse Data Tools Platform
+
+# Parent category for Ingres in the driver definition
+CATEGORY_PRODUCT_FAMILY_NAME        = Ingres
+CATEGORY_PRODUCT_FAMILY_DESCRIPTION =
+
+# Category for Ingres 2006 in the driver definition
+CATEGORY_PRODUCT_NAME        = 2006
+CATEGORY_PRODUCT_DESCRIPTION =
+
+# Ingres 2006 Driver Template
+DRIVER_NAME = Ingres JDBC Driver
+DRIVER_DESCRIPTION =
+
+# Various properties for the driver template
+
+DRIVER_DRIVER_CLASS_NAME = Driver Class
+DRIVER_DRIVER_CLASS_DESCRIPTION =
+
+DRIVER_DB_VENDOR_NAME = Vendor
+DRIVER_DB_VENDOR_DESCRIPTION =
+
+DRIVER_DB_VERSION_NAME = 2006
+DRIVER_DB_VERSION_DESCRIPTION =
+
+DRIVER_DATABASE_NAME_NAME = Database Name
+DRIVER_DATABASE_NAME_DESCRIPTION =
+
+DRIVER_DB_URL_NAME = Connection URL
+DRIVER_DB_URL_DESCRIPTION =
+
+DRIVER_DB_USERNAME_NAME = Username
+DRIVER_DB_USERNAME_DESCRIPTION =
+
+DRIVER_DB_PASSWORD_NAME = Password
+DRIVER_DB_PASSWORD_DESCRIPTION =
+
+# Connection Profile
+CONNECTION_PROFILE_NAME = Ingres Database
+
+# Connection factory
+CONNECTION_FACTORY_NAME = Ingres JDBC Connection Factory
+# ====================================================================
+
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/plugin.xml b/plugins/org.eclipse.datatools.enablement.ingres/plugin.xml
new file mode 100644
index 0000000..7b28472
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/plugin.xml
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension
+         point="org.eclipse.datatools.connectivity.driverExtension">
+      <category
+            description="%CATEGORY_PRODUCT_FAMILY_DESCRIPTION"
+            id="org.eclipse.datatools.enablement.ingres.driverCategory"
+            name="%CATEGORY_PRODUCT_FAMILY_NAME"
+            parentCategory="org.eclipse.datatools.connectivity.db.driverCategory">
+      </category>
+      <category
+            description="%CATEGORY_PRODUCT_DESCRIPTION"
+            id="org.eclipse.datatools.enablement.ingres.2006.driverCategory"
+            name="%CATEGORY_PRODUCT_NAME"
+            parentCategory="org.eclipse.datatools.enablement.ingres.driverCategory">
+      </category>
+      <driverTemplate
+            createDefault="false"
+            description="%DRIVER_DESCRIPTION"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.enablement.ingres.2006.driverTemplate"
+            jarList="iijdbc.jar"
+            name="%DRIVER_NAME"
+            parentCategory="org.eclipse.datatools.enablement.ingres.2006.driverCategory">
+         <properties>
+            <property
+                  description="%DRIVER_DRIVER_CLASS_DESCRIPTION"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%DRIVER_DRIVER_CLASS_NAME"
+                  required="true"
+                  value="com.ingres.jdbc.IngresDriver"
+                  visible="true">
+            </property>
+            <property
+                  description="%DRIVER_DB_VENDOR_DESCRIPTION"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%DRIVER_DB_VENDOR_NAME"
+                  required="true"
+                  value="Ingres"
+                  visible="false">
+            </property>
+            <property
+                  description="%DRIVER_DB_VERSION_DESCRIPTION"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%DRIVER_DB_VERSION_NAME"
+                  required="true"
+                  value="2006"
+                  visible="false">
+            </property>
+            <property
+                  description="%DRIVER_DATABASE_NAME_DESCRIPTION"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%DRIVER_DATABASE_NAME_NAME"
+                  required="true"
+                  value="demodb"
+                  visible="true">
+            </property>
+            <property
+                  description="%DRIVER_DB_URL_DESCRIPTION"
+                  example="jdbc:ingres://localhost:II7/demodb"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%DRIVER_DB_URL_NAME"
+                  required="true"
+                  value="jdbc:ingres://localhost:II7/demodb"
+                  visible="true">
+            </property>
+            <property
+                  description="%DRIVER_DB_USERNAME_DESCRIPTION"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%DRIVER_DB_USERNAME_NAME"
+                  required="false"
+                  visible="true">
+            </property>
+            <property
+                  description="%DRIVER_DB_PASSWORD_DESCRIPTION"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%DRIVER_DB_PASSWORD_NAME"
+                  required="false"
+                  visible="true">
+            </property>
+         </properties>
+      </driverTemplate>
+   </extension>
+   <extension
+         point="org.eclipse.datatools.connectivity.connectionProfile">
+      <connectionProfile
+            category="org.eclipse.datatools.connectivity.db.category"
+            icon="icons/jdbc_16.gif"
+            id="org.eclipse.datatools.enablement.ingres.connectionProfile"
+            name="%CONNECTION_PROFILE_NAME"
+            pingFactory="org.eclipse.datatools.enablement.ingres.internal.connectivity.IngresConnectionFactory"
+            propertiesPersistenceHook="org.eclipse.datatools.connectivity.db.generic.GenericDBPropertiesPersistenceHook">
+      </connectionProfile>
+      <connectionFactory
+            class="org.eclipse.datatools.enablement.ingres.internal.connectivity.IngresConnectionFactory"
+            id="java.sql.Connection"
+            name="%CONNECTION_FACTORY_NAME"
+            profile="org.eclipse.datatools.enablement.ingres.connectionProfile">
+      </connectionFactory>
+   </extension>
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.catalog">
+      <overrideLoader
+            eclass="org.eclipse.datatools.modelbase.sql.schema.Schema"
+            product="Ingres"
+            provider="org.eclipse.datatools.enablement.ingres.internal.loaders.IngresSchemaLoader"
+            version="2006">
+      </overrideLoader>
+      <overrideLoader
+            eclass="org.eclipse.datatools.modelbase.sql.tables.Table"
+            product="Ingres"
+            provider="org.eclipse.datatools.enablement.ingres.internal.loaders.IngresTableLoader"
+            version="2006">
+      </overrideLoader>
+      <overrideLoader
+            eclass="org.eclipse.datatools.modelbase.sql.routines.Routine"
+            product="Ingres"
+            provider="org.eclipse.datatools.enablement.ingres.internal.loaders.IngresRoutineLoader"
+            version="2006">
+      </overrideLoader>
+      <overrideLoader
+            eclass="org.eclipse.datatools.modelbase.sql.constraints.TableConstraint"
+            product="Ingres"
+            provider="org.eclipse.datatools.enablement.ingres.internal.loaders.IngresTableConstraintLoader"
+            version="2006">
+      </overrideLoader>
+   </extension>
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.logicalContainment">
+      <containment
+            class="IngresDBEvent"
+            package="http:///org/eclipse/datatools/enablement/ingres/ingressqlmodel.ecore"
+            provider="org.eclipse.datatools.enablement.ingres.internal.containment.IngresDBEventContainmentProvider">
+      </containment>
+      <containment
+            class="IngresSynonym"
+            package="http:///org/eclipse/datatools/enablement/ingres/ingressqlmodel.ecore"
+            provider="org.eclipse.datatools.enablement.ingres.internal.containment.IngresSynonymContainmentProvider">
+      </containment>
+      <containment
+            class="IngresSchema"
+            package="http:///org/eclipse/datatools/enablement/ingres/ingressqlmodel.ecore"
+            provider="org.eclipse.datatools.enablement.ingres.internal.containment.IngresSchemaContainmentProvider">
+      </containment>
+   </extension>
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.ddlGeneration">
+      <generator
+            class="org.eclipse.datatools.enablement.ingres.internal.ddl.IngresDdlGenerator"
+            product="Ingres"
+            version="2006">
+      </generator>
+   </extension>
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.mappings">
+      <providerIDtoDriverCategoryID
+            driverCategoryID="org.eclipse.datatools.enablement.ingres.driverCategory"
+            providerID="org.eclipse.datatools.enablement.ingres.connectionProfile">
+      </providerIDtoDriverCategoryID>
+   </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/containment/IngresGroupID.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/containment/IngresGroupID.java
new file mode 100644
index 0000000..56a476a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/containment/IngresGroupID.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.containment;
+
+/**
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresGroupID {
+
+	public static final String DB_EVENT_GROUP_ID = "dbeventgroup"; //$NON-NLS-1$
+
+	public static final String SYNONYM_GROUP_ID = "synonymgroup"; //$NON-NLS-1$
+	
+	public static final String PROCEDURE_PARAMETER_GROUP_ID = "proceduregroup"; //$NON-NLS-1$
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/catalog/IngresCatalogCheckConstraint.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/catalog/IngresCatalogCheckConstraint.java
new file mode 100644
index 0000000..86d8366
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/catalog/IngresCatalogCheckConstraint.java
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.catalog;
+
+import java.lang.ref.SoftReference;
+import java.sql.Connection;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.enablement.ingres.internal.loaders.IngresTableConstraintDefinitionLoader;
+import org.eclipse.datatools.modelbase.sql.constraints.impl.CheckConstraintImpl;
+import org.eclipse.datatools.modelbase.sql.expressions.SQLExpressionsFactory;
+import org.eclipse.datatools.modelbase.sql.expressions.SearchCondition;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+/**
+ * Ingres related extension of CheckConstraint to provide support for loading the
+ * constraint definition.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresCatalogCheckConstraint extends CheckConstraintImpl implements
+		ICatalogObject {
+	
+	private final Object SEARCHCONDITION_LOCK = new Object();
+
+	private Boolean searchConditionLoaded = Boolean.FALSE;
+
+	private SoftReference constraintDefinitionLoaderRef;
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject#getCatalogDatabase()
+	 */
+	public Database getCatalogDatabase() {
+		return getBaseTable().getSchema().getCatalog().getDatabase();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject#getConnection()
+	 */
+	public Connection getConnection() {
+		Database db = getCatalogDatabase();
+		if (db instanceof ICatalogObject) {
+			return ((ICatalogObject) db).getConnection();
+		}
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject#refresh()
+	 */
+	public void refresh() {
+		synchronized (SEARCHCONDITION_LOCK) {
+			if (searchConditionLoaded.booleanValue()) {
+				searchConditionLoaded = Boolean.FALSE;
+			}
+		}
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.modelbase.sql.constraints.impl.CheckConstraintImpl#getSearchCondition()
+	 */
+	public SearchCondition getSearchCondition() {
+		synchronized (SEARCHCONDITION_LOCK) {
+			if (!searchConditionLoaded.booleanValue()) {
+				loadSearchCondition();
+			}
+		}
+		return super.getSearchCondition();
+	}
+
+	protected final IngresTableConstraintDefinitionLoader getConstraintDefinitionLoader() {
+		if (constraintDefinitionLoaderRef == null || constraintDefinitionLoaderRef.get() == null) {
+			constraintDefinitionLoaderRef = new SoftReference(
+					createConstraintDefinitionLoader());
+		}
+		return (IngresTableConstraintDefinitionLoader) constraintDefinitionLoaderRef.get();
+	}
+
+	protected IngresTableConstraintDefinitionLoader createConstraintDefinitionLoader() {
+		return new IngresTableConstraintDefinitionLoader(this);
+	}
+
+	private void loadSearchCondition() {
+		boolean deliver = eDeliver();
+		try {
+			eSetDeliver(false);
+
+			SearchCondition loadedSearchCondition = SQLExpressionsFactory.eINSTANCE
+					.createSearchConditionDefault();
+			getConstraintDefinitionLoader().loadCheckConstraintDefinition(
+					getBaseTable().getSchema().getName(),
+					getBaseTable().getName(), getName(), loadedSearchCondition);
+			setSearchCondition(loadedSearchCondition);
+
+			searchConditionLoaded = Boolean.TRUE;
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			eSetDeliver(deliver);
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/catalog/IngresCatalogSchema.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/catalog/IngresCatalogSchema.java
new file mode 100644
index 0000000..7bc7550
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/catalog/IngresCatalogSchema.java
@@ -0,0 +1,408 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.catalog;
+
+import java.lang.ref.SoftReference;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.core.util.CatalogLoaderOverrideManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilterListener;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.DatabaseConnectionRegistry;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCBaseLoader;
+import org.eclipse.datatools.enablement.ingres.internal.loaders.IngresDBEventLoader;
+import org.eclipse.datatools.enablement.ingres.internal.loaders.IngresSequenceLoader;
+import org.eclipse.datatools.enablement.ingres.internal.loaders.IngresSynonymLoader;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresSchemaImpl;
+import org.eclipse.datatools.modelbase.sql.schema.Catalog;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * Ingres Schema
+ * 
+ * Enhances the original implementation of <code>JDBCSchema</code> to support
+ * the following features:
+ * <ul>
+ * <li>Sequence loading</li>
+ * </ul>
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresCatalogSchema extends IngresSchemaImpl {
+	
+	private final Object SEQUENCE_LOCK = new Object();
+	
+	private final Object DBEVENT_LOCK = new Object();
+	
+	private final Object SYNONYM_LOCK = new Object();
+
+	private Boolean sequencesLoaded = Boolean.FALSE;
+
+	private Boolean dbEventsLoaded = Boolean.FALSE;
+
+	private Boolean synonymsLoaded = Boolean.FALSE;
+
+	private transient SoftReference sequenceLoaderRef;
+
+	private transient SoftReference dbEventLoaderRef;
+
+	private transient SoftReference synonymLoaderRef;
+
+	/**
+	 * Registers/unregisters a filter listener to handle sequence filter events.
+	 * 
+	 * @see org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCSchema#basicSetCatalog(org.eclipse.datatools.modelbase.sql.schema.Catalog,
+	 *      org.eclipse.emf.common.notify.NotificationChain)
+	 */
+	public NotificationChain basicSetCatalog(Catalog newCatalog,
+			NotificationChain msgs) {
+		if (catalog != null && catalog.getDatabase() != null) {
+			ConnectionInfo connectionInfo = DatabaseConnectionRegistry
+					.getInstance().getConnectionForDatabase(
+							catalog.getDatabase());
+			connectionInfo.removeFilterListener(filterListener);
+		}
+		if (newCatalog != null && newCatalog.getDatabase() != null) {
+			ConnectionInfo connectionInfo = DatabaseConnectionRegistry
+					.getInstance().getConnectionForDatabase(
+							newCatalog.getDatabase());
+			connectionInfo.addFilterListener(filterListener);
+		}
+		return super.basicSetCatalog(newCatalog, msgs);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCSchema#refresh()
+	 */
+	public void refresh() {
+		synchronized (SEQUENCE_LOCK) {
+			if (sequencesLoaded.booleanValue()) {
+				sequencesLoaded = Boolean.FALSE;
+			}
+		}
+		synchronized (DBEVENT_LOCK) {
+			if (dbEventsLoaded.booleanValue()) {
+				dbEventsLoaded = Boolean.FALSE;
+			}
+		}
+		synchronized (SYNONYM_LOCK) {
+			if (synonymsLoaded.booleanValue()) {
+				synonymsLoaded = Boolean.FALSE;
+			}
+		}
+		super.refresh();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.modelbase.sql.schema.impl.SchemaImpl#getSequences()
+	 */
+	public EList getSequences() {
+		synchronized (SEQUENCE_LOCK) {
+			if (!sequencesLoaded.booleanValue())
+				loadSequences();
+		}
+		return super.getSequences();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresSchemaImpl#getSynonyms()
+	 */
+	public EList getSynonyms() {
+		synchronized (SYNONYM_LOCK) {
+			if (!synonymsLoaded.booleanValue())
+				loadSynonyms();
+		}
+		return super.getSynonyms();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresSchemaImpl#getDBEvents()
+	 */
+	public EList getDBEvents() {
+		synchronized (DBEVENT_LOCK) {
+			if (!dbEventsLoaded.booleanValue())
+				loadDbEvents();
+		}
+		return super.getDBEvents();
+	}
+
+	protected final IngresSequenceLoader getSequenceLoader() {
+		// cache the SequenceLoader for better performance
+		if (sequenceLoaderRef == null || sequenceLoaderRef.get() == null) {
+			sequenceLoaderRef = new SoftReference(
+					createSequenceLoader());
+		}
+		return (IngresSequenceLoader) sequenceLoaderRef.get();
+	}
+
+	private void loadSequences() {
+		synchronized (SEQUENCE_LOCK) {
+			boolean deliver = eDeliver();
+			try {
+				List container = super.getSequences();
+				List existingSequences = new ArrayList(container);
+
+				eSetDeliver(false);
+
+				container.clear();
+				getSequenceLoader().loadSequences(container, existingSequences);
+				getSequenceLoader().clearSequences(existingSequences);
+
+				sequencesLoaded = Boolean.TRUE;
+			} catch (Exception e) {
+				e.printStackTrace();
+			} finally {
+				eSetDeliver(deliver);
+			}
+		}
+	}
+
+	protected final IngresDBEventLoader getDbEventLoader() {
+		// cache the SequenceLoader for better performance
+		if (dbEventLoaderRef == null || dbEventLoaderRef.get() == null) {
+			dbEventLoaderRef = new SoftReference(
+					createDbEventLoader());
+		}
+		return (IngresDBEventLoader) dbEventLoaderRef.get();
+	}
+
+	private void loadDbEvents() {
+		synchronized (DBEVENT_LOCK) {
+			boolean deliver = eDeliver();
+			try {
+				List container = super.getDBEvents();
+				List existingDbEvents = new ArrayList(container);
+
+				eSetDeliver(false);
+
+				container.clear();
+				getDbEventLoader().loadDbEvents(container, existingDbEvents);
+				getDbEventLoader().clearDbEvents(existingDbEvents);
+
+				dbEventsLoaded = Boolean.TRUE;
+			} catch (Exception e) {
+				e.printStackTrace();
+			} finally {
+				eSetDeliver(deliver);
+			}
+		}
+	}
+
+	protected final IngresSynonymLoader getSynonymLoader() {
+		// cache the SequenceLoader for better performance
+		if (synonymLoaderRef == null || synonymLoaderRef.get() == null) {
+			synonymLoaderRef = new SoftReference(
+					createSynonymLoader());
+		}
+		return (IngresSynonymLoader) synonymLoaderRef.get();
+	}
+
+	private void loadSynonyms() {
+		synchronized (SYNONYM_LOCK) {
+			boolean deliver = eDeliver();
+			try {
+				List container = super.getSynonyms();
+				List existingSynonyms = new ArrayList(container);
+
+				eSetDeliver(false);
+
+				container.clear();
+				getSynonymLoader().loadSynonyms(container, existingSynonyms);
+				getSynonymLoader().clearSynonyms(existingSynonyms);
+
+				synonymsLoaded = Boolean.TRUE;
+			} catch (Exception e) {
+				e.printStackTrace();
+			} finally {
+				eSetDeliver(deliver);
+			}
+		}
+	}
+
+	/**
+	 * Creates and returns an instance of the SequenceLoader. By default an
+	 * instance of the <code>IngresSequenceLoader</code> is returned. This
+	 * behavior can be changed by providing an <code>overrideLoader</code>
+	 * using the eclass org.eclipse.datatools.modelbase.sql.schema.Sequence.
+	 * 
+	 * @return An instance of IngresSequenceLoader.
+	 */
+	private IngresSequenceLoader createSequenceLoader() {
+		// get the database definiton for the actual database
+		DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault()
+				.getDatabaseDefinitionRegistry().getDefinition(
+						this.getCatalogDatabase());
+
+		// see if someone is interested in providing an own sequence loader
+		JDBCBaseLoader loader = CatalogLoaderOverrideManager.INSTANCE
+				.getLoaderForDatabase(databaseDefinition,
+						SQLSchemaPackage.eINSTANCE.getSequence()
+								.getInstanceClassName());
+
+		if (loader != null) {
+			IngresSequenceLoader sequenceLoader = (IngresSequenceLoader) loader;
+			sequenceLoader.setCatalogObject(this);
+			return sequenceLoader;
+		}
+
+		return new IngresSequenceLoader(this);
+	}
+
+	/**
+	 * Creates and returns an instance of the DbEventLoader. By default an
+	 * instance of the <code>IngresDbEventLoader</code> is returned. This
+	 * behavior can be changed by providing an <code>overrideLoader</code>
+	 * using the eclass
+	 * org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresDBEvent
+	 * 
+	 * @return An instance of IngresDbEventLoader.
+	 */
+	private IngresDBEventLoader createDbEventLoader() {
+		// get the database definiton for the actual database
+		DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault()
+				.getDatabaseDefinitionRegistry().getDefinition(
+						this.getCatalogDatabase());
+
+		// see if someone is interested in providing an own db event loader
+		JDBCBaseLoader loader = CatalogLoaderOverrideManager.INSTANCE
+				.getLoaderForDatabase(databaseDefinition,
+						IngressqlmodelPackage.eINSTANCE.getIngresDBEvent()
+								.getInstanceClassName());
+
+		if (loader != null) {
+			IngresDBEventLoader sequenceLoader = (IngresDBEventLoader) loader;
+			sequenceLoader.setCatalogObject(this);
+			return sequenceLoader;
+		}
+
+		return new IngresDBEventLoader(this);
+	}
+
+	/**
+	 * Creates and returns an instance of the SynonymLoader. By default an
+	 * instance of the <code>IngresSynonymLoader</code> is returned. This
+	 * behavior can be changed by providing an <code>overrideLoader</code>
+	 * using the eclass
+	 * org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSynonym
+	 * 
+	 * @return An instance of IngresSynonymLoader.
+	 */
+	private IngresSynonymLoader createSynonymLoader() {
+		// get the database definiton for the actual database
+		DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault()
+				.getDatabaseDefinitionRegistry().getDefinition(
+						this.getCatalogDatabase());
+
+		// see if someone is interested in providing an own db event loader
+		JDBCBaseLoader loader = CatalogLoaderOverrideManager.INSTANCE
+				.getLoaderForDatabase(databaseDefinition,
+						IngressqlmodelPackage.eINSTANCE.getIngresSynonym()
+								.getInstanceClassName());
+
+		if (loader != null) {
+			IngresSynonymLoader synonymLoader = (IngresSynonymLoader) loader;
+			synonymLoader.setCatalogObject(this);
+			return synonymLoader;
+		}
+
+		return new IngresSynonymLoader(this);
+	}
+
+	/**
+	 * Force refresh of loaded sequences if necessary.
+	 * 
+	 * @param filterKey
+	 *            the id of the changed filter
+	 */
+	private void handleFilterChanged(String filterKey) {
+		boolean refresh = false;
+		ConnectionInfo conInf = DatabaseConnectionRegistry.getInstance()
+				.getConnectionForDatabase(getCatalogDatabase());
+		if (sequencesLoaded.booleanValue()
+				&& filterKey.equals(getSequenceFilterKey())
+				|| (conInf != null
+						&& conInf.getFilter(getSequenceFilterKey()) == null && (ConnectionFilter.SEQUENCE_FILTER
+						.equals(filterKey) || filterKey.equals(getCatalog()
+						.getName()
+						+ ConnectionFilter.FILTER_SEPARATOR
+						+ ConnectionFilter.SEQUENCE_FILTER)))) {
+			sequencesLoaded = Boolean.FALSE;
+			getSequenceLoader().clearSequences(super.getSequences());
+			refresh = true;
+		}
+		if (dbEventsLoaded.booleanValue()
+				&& filterKey.equals(getDbEventFilterKey())
+				|| (conInf != null
+						&& conInf.getFilter(getDbEventFilterKey()) == null && (IngresCatalogUtils.DB_EVENT_FILTER
+						.equals(filterKey) || filterKey.equals(getCatalog()
+						.getName()
+						+ ConnectionFilter.FILTER_SEPARATOR
+						+ IngresCatalogUtils.DB_EVENT_FILTER)))) {
+			dbEventsLoaded = Boolean.FALSE;
+			getDbEventLoader().clearDbEvents(super.getDBEvents());
+			refresh = true;
+		}
+		if (synonymsLoaded.booleanValue()
+				&& filterKey.equals(getSynonymFilterKey())
+				|| (conInf != null
+						&& conInf.getFilter(getSynonymFilterKey()) == null && (IngresCatalogUtils.SYNONYM_FILTER
+						.equals(filterKey) || filterKey.equals(getCatalog()
+						.getName()
+						+ ConnectionFilter.FILTER_SEPARATOR
+						+ IngresCatalogUtils.SYNONYM_FILTER)))) {
+			synonymsLoaded = Boolean.FALSE;
+			getSynonymLoader().clearSynonyms(super.getSynonyms());
+			refresh = true;
+		}
+		if (refresh) {
+			RefreshManager.getInstance().referesh(this);
+		}
+	}
+
+	private String getSequenceFilterKey() {
+		return getCatalog().getName() + ConnectionFilter.FILTER_SEPARATOR
+				+ getName() + ConnectionFilter.FILTER_SEPARATOR
+				+ ConnectionFilter.SEQUENCE_FILTER;
+	}
+
+	private String getDbEventFilterKey() {
+		return getCatalog().getName() + ConnectionFilter.FILTER_SEPARATOR
+				+ getName() + ConnectionFilter.FILTER_SEPARATOR
+				+ IngresCatalogUtils.DB_EVENT_FILTER;
+	}
+
+	private String getSynonymFilterKey() {
+		return getCatalog().getName() + ConnectionFilter.FILTER_SEPARATOR
+				+ getName() + ConnectionFilter.FILTER_SEPARATOR
+				+ IngresCatalogUtils.DB_EVENT_FILTER;
+	}
+
+	private final transient ConnectionFilterListener filterListener = new ConnectionFilterListener() {
+
+		public void connectionFilterAdded(String filterKey) {
+			handleFilterChanged(filterKey);
+		}
+
+		public void connectionFilterRemoved(String filterKey) {
+			handleFilterChanged(filterKey);
+		}
+
+	};
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/catalog/IngresCatalogTable.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/catalog/IngresCatalogTable.java
new file mode 100644
index 0000000..5d3891a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/catalog/IngresCatalogTable.java
@@ -0,0 +1,158 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.catalog;
+
+import java.lang.ref.SoftReference;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Vector;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCTable;
+import org.eclipse.datatools.connectivity.sqm.core.util.CatalogLoaderOverrideManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCBaseLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableConstraintLoader;
+import org.eclipse.datatools.enablement.ingres.internal.loaders.IngresTableConstraintLoader;
+import org.eclipse.datatools.enablement.ingres.internal.loaders.IngresTableTriggerLoader;
+import org.eclipse.datatools.modelbase.sql.constraints.CheckConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.Constraint;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * Ingres related extension of JDBCTable to provide support for loading
+ * triggers and constraints.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresCatalogTable extends JDBCTable {
+	
+	private final Object TRIGGER_LOCK = new Object();
+	
+	private final Object CCS_LOCK = new Object();
+
+	private Boolean triggersLoaded = Boolean.FALSE;
+
+	private Boolean ccsLoaded = Boolean.FALSE;
+
+	private transient SoftReference triggerLoaderRef;
+
+	public EList getTriggers() {
+		synchronized (TRIGGER_LOCK) {
+			if (!triggersLoaded.booleanValue())
+				loadTriggers();
+		}
+		return super.getTriggers();
+	}
+
+	public EList getConstraints() {
+		synchronized (CCS_LOCK) {
+			if (!ccsLoaded.booleanValue())
+				loadCheckConstraints();
+		}
+		return super.getConstraints();
+	}
+
+	public void refresh() {
+		synchronized (TRIGGER_LOCK) {
+			if (triggersLoaded.booleanValue()) {
+				triggersLoaded = Boolean.FALSE;
+			}
+		}
+		synchronized (CCS_LOCK) {
+			if (ccsLoaded.booleanValue()) {
+				ccsLoaded = Boolean.FALSE;
+			}
+		}
+		super.refresh();
+	}
+
+	private void loadTriggers() {
+		boolean deliver = eDeliver();
+		try {
+			List container = super.getTriggers();
+			List existingTriggers = new ArrayList(container);
+
+			eSetDeliver(false);
+
+			container.clear();
+
+			getTriggerLoader().loadTriggers(container, existingTriggers);
+
+			getTriggerLoader().clearTriggers(existingTriggers);
+
+			triggersLoaded = Boolean.TRUE;
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			eSetDeliver(deliver);
+		}
+	}
+
+	protected final IngresTableTriggerLoader getTriggerLoader() {
+		if (triggerLoaderRef == null || triggerLoaderRef.get() == null) {
+			triggerLoaderRef = new SoftReference(createTriggerLoader());
+		}
+		return (IngresTableTriggerLoader) triggerLoaderRef.get();
+	}
+
+	protected IngresTableTriggerLoader createTriggerLoader() {
+		DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault()
+				.getDatabaseDefinitionRegistry().getDefinition(
+						this.getCatalogDatabase());
+
+		JDBCBaseLoader loader = CatalogLoaderOverrideManager.INSTANCE
+				.getLoaderForDatabase(databaseDefinition,
+						SQLTablesPackage.eINSTANCE.getTrigger()
+								.getInstanceClassName());
+
+		if (loader != null) {
+			IngresTableTriggerLoader triggerLoader = (IngresTableTriggerLoader) loader;
+			triggerLoader.setCatalogObject(this);
+			return triggerLoader;
+		}
+		return new IngresTableTriggerLoader(this);
+	}
+
+	private void loadCheckConstraints() {
+		boolean deliver = eDeliver();
+		try {
+			List container = super.getConstraints();
+			List existingCCs = internalGetCheckConstraints(container);
+			container.removeAll(existingCCs);
+			JDBCTableConstraintLoader loader = getConstraintLoader();
+			if (loader instanceof IngresTableConstraintLoader) {
+				((IngresTableConstraintLoader) loader).loadCheckConstraints(
+						container, existingCCs);
+			}
+			ccsLoaded = Boolean.TRUE;
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			eSetDeliver(deliver);
+		}
+	}
+
+	private List internalGetCheckConstraints(Collection constraints) {
+		Vector uniqueConstraints = new Vector();
+		for (Iterator it = constraints.iterator(); it.hasNext();) {
+			Constraint currentConstraint = (Constraint) it.next();
+			if (currentConstraint instanceof CheckConstraint) {
+				uniqueConstraints.add(currentConstraint);
+			}
+		}
+		return uniqueConstraints;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/catalog/IngresCatalogTrigger.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/catalog/IngresCatalogTrigger.java
new file mode 100644
index 0000000..07e851a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/catalog/IngresCatalogTrigger.java
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.catalog;
+
+import java.lang.ref.SoftReference;
+import java.sql.Connection;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.enablement.ingres.internal.loaders.IngresTriggerSourceLoader;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresTriggerImpl;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesFactory;
+import org.eclipse.datatools.modelbase.sql.routines.Source;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+/**
+ * This class represents an Ingres Trigger (Rule).
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresCatalogTrigger extends IngresTriggerImpl implements
+		ICatalogObject {
+	
+	private final Object SOURCE_LOCK = new Object();
+
+	private Boolean sourceLoaded = Boolean.FALSE;
+
+	private SoftReference sourceLoaderRef;
+
+	public Database getCatalogDatabase() {
+		return this.getSchema().getCatalog().getDatabase();
+	}
+
+	public Connection getConnection() {
+		Database db = this.getCatalogDatabase();
+		if (db instanceof ICatalogObject) {
+			return ((ICatalogObject) db).getConnection();
+		}
+		return null;
+	}
+
+	public void refresh() {
+		synchronized (SOURCE_LOCK) {
+			if (sourceLoaded.booleanValue()) {
+				sourceLoaded = Boolean.FALSE;
+			}
+		}
+		RefreshManager.getInstance().referesh(this);
+	}
+
+	public Source getSource() {
+		synchronized (SOURCE_LOCK) {
+			if (!sourceLoaded.booleanValue()) {
+				loadSource();
+			}
+		}
+		return super.getSource();
+	}
+
+	protected final IngresTriggerSourceLoader getSourceLoader() {
+		if (sourceLoaderRef == null || sourceLoaderRef.get() == null) {
+			sourceLoaderRef = new SoftReference(
+					createSourceLoader());
+		}
+		return (IngresTriggerSourceLoader) sourceLoaderRef.get();
+	}
+
+	protected IngresTriggerSourceLoader createSourceLoader() {
+		return new IngresTriggerSourceLoader(this);
+	}
+
+	private void loadSource() {
+		boolean deliver = eDeliver();
+		try {
+			eSetDeliver(false);
+
+			Source loadedSource = SQLRoutinesFactory.eINSTANCE.createSource();
+			getSourceLoader().loadSource(this.getSubjectTable().getName(),
+					this.getSchema().getName(), this.getName(), loadedSource);
+			setSource(loadedSource);
+
+			sourceLoaded = Boolean.TRUE;
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			eSetDeliver(deliver);
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/catalog/IngresCatalogUtils.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/catalog/IngresCatalogUtils.java
new file mode 100644
index 0000000..dd535c3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/catalog/IngresCatalogUtils.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.catalog;
+
+/**
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresCatalogUtils {
+
+	public static final String DB_EVENT_FILTER = "DatatoolsDbEventFilterPredicate"; //$NON-NLS-1$
+
+	public static final String SYNONYM_FILTER = "DatatoolsSynonymFilterPredicate"; //$NON-NLS-1$
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/catalog/IngresCatalogView.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/catalog/IngresCatalogView.java
new file mode 100644
index 0000000..ca9f673
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/catalog/IngresCatalogView.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.catalog;
+
+import java.lang.ref.SoftReference;
+
+import org.eclipse.datatools.enablement.ingres.internal.loaders.IngresViewSourceLoader;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresViewTableImpl;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesFactory;
+import org.eclipse.datatools.modelbase.sql.routines.Source;
+
+/**
+ * Ingres related extension of JDBCView to provide support for loading the
+ * procedure source.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresCatalogView extends IngresViewTableImpl {
+	
+	private final Object SOURCE_LOCK = new Object();
+
+	private Boolean sourceLoaded = Boolean.FALSE;
+
+	private SoftReference sourceLoaderRef;
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCView#refresh()
+	 */
+	public void refresh() {
+		synchronized (SOURCE_LOCK) {
+			if (sourceLoaded.booleanValue()) {
+				sourceLoaded = Boolean.FALSE;
+			}
+		}
+		super.refresh();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresViewTableImpl#getSource()
+	 */
+	public Source getSource() {
+		synchronized (SOURCE_LOCK) {
+			if (!sourceLoaded.booleanValue()) {
+				loadSource();
+			}
+		}
+		return super.getSource();
+	}
+
+	protected final IngresViewSourceLoader getSourceLoader() {
+		if (sourceLoaderRef == null || sourceLoaderRef.get() == null) {
+			sourceLoaderRef = new SoftReference(
+					createSourceLoader());
+		}
+		return (IngresViewSourceLoader) sourceLoaderRef.get();
+	}
+
+	protected IngresViewSourceLoader createSourceLoader() {
+		return new IngresViewSourceLoader(this);
+	}
+
+	private void loadSource() {
+		boolean deliver = eDeliver();
+		try {
+			eSetDeliver(false);
+
+			Source loadedSource = SQLRoutinesFactory.eINSTANCE.createSource();
+			getSourceLoader().loadSource(this.getSchema().getName(),
+					this.getName(), loadedSource);
+			setSource(loadedSource);
+
+			sourceLoaded = Boolean.TRUE;
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			eSetDeliver(deliver);
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/catalog/IngresProcedure.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/catalog/IngresProcedure.java
new file mode 100644
index 0000000..f349b2a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/catalog/IngresProcedure.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.catalog;
+
+import java.lang.ref.SoftReference;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCProcedure;
+import org.eclipse.datatools.enablement.ingres.internal.loaders.IngresProcedureSourceLoader;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesFactory;
+import org.eclipse.datatools.modelbase.sql.routines.Source;
+
+/**
+ * Ingres related extension of JDBCProcedure to provide support for loading the
+ * procedure source.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresProcedure extends JDBCProcedure {
+	
+	private final Object SOURCE_LOCK = new Object();
+
+	private Boolean sourceLoaded = Boolean.FALSE;
+
+	private SoftReference sourceLoaderRef;
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCProcedure#refresh()
+	 */
+	public void refresh() {
+		synchronized (SOURCE_LOCK) {
+			if (sourceLoaded.booleanValue()) {
+				sourceLoaded = Boolean.FALSE;
+			}
+		}
+		super.refresh();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.modelbase.sql.routines.impl.RoutineImpl#getSource()
+	 */
+	public Source getSource() {
+		synchronized (SOURCE_LOCK) {
+			if (!sourceLoaded.booleanValue()) {
+				loadSource();
+			}
+		}
+		return super.getSource();
+	}
+
+	protected final IngresProcedureSourceLoader getSourceLoader() {
+		if (sourceLoaderRef == null || sourceLoaderRef.get() == null) {
+			sourceLoaderRef = new SoftReference(createSourceLoader());
+		}
+		return (IngresProcedureSourceLoader) sourceLoaderRef.get();
+	}
+
+	protected IngresProcedureSourceLoader createSourceLoader() {
+		return new IngresProcedureSourceLoader(this);
+	}
+
+	private void loadSource() {
+		boolean deliver = eDeliver();
+		try {
+			eSetDeliver(false);
+
+			Source loadedSource = SQLRoutinesFactory.eINSTANCE.createSource();
+			getSourceLoader().loadSource(getSchema().getName(), getName(),
+					loadedSource);
+			setSource(loadedSource);
+
+			sourceLoaded = Boolean.TRUE;
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			eSetDeliver(deliver);
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/connectivity/IngresConnectionFactory.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/connectivity/IngresConnectionFactory.java
new file mode 100644
index 0000000..c590002
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/connectivity/IngresConnectionFactory.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007, 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.connectivity;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionFactory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+
+/**
+ * Ingres connection factory implementation.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresConnectionFactory implements IConnectionFactory {
+
+	public static final String INGRES_TRACE_LOG = "ingres.jdbc.trace.log";
+
+	public static final String INGRES_TRACE_DRV = "ingres.jdbc.trace.drv";
+
+	/**
+	 * This method creates a connection to an Ingres DBMS.
+	 * 
+	 * Driver logging is activated. The log file is retrieved from the system
+	 * property "ingres.jdbc.trace.log". If no filename is found, a new
+	 * temporary log file is used. The following logging parameter is set:
+	 * 
+	 * ingres.jdbc.trace.drv = 1 (if not passed as system property)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionFactory#createConnection(org.eclipse.datatools.connectivity.IConnectionProfile)
+	 */
+	public IConnection createConnection(final IConnectionProfile profile) {
+		if (System.getProperty(INGRES_TRACE_LOG) == null) {
+			try {
+				final File log = File.createTempFile("ingres_jdbc_trace_",
+						".log");
+				log.deleteOnExit();
+				System.setProperty(INGRES_TRACE_LOG, log.getAbsolutePath());
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+
+		if (System.getProperty(INGRES_TRACE_DRV) == null) {
+			System.setProperty(INGRES_TRACE_DRV, "1");
+		}
+
+		final IngresJDBCConnection connection = new IngresJDBCConnection(profile,
+				getClass());
+		connection.open();
+		return connection;
+	}
+
+	/**
+	 * This method creates a connection to an Ingres DBMS.
+	 * 
+	 * Driver logging is activated. The log file is retrieved from the system
+	 * property "ingres.jdbc.trace.log". If no filename is found, a new
+	 * temporary log file is used. The following logging parameter is set:
+	 * 
+	 * ingres.jdbc.trace.drv = 1 (if not passed as system property)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.IConnectionFactory#createConnection(org.eclipse.datatools.connectivity.IConnectionProfile,
+	 *      java.lang.String, java.lang.String)
+	 */
+	public IConnection createConnection(final IConnectionProfile profile,
+			final String uid, String pwd) {
+		return createConnection(profile);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/connectivity/IngresJDBCConnection.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/connectivity/IngresJDBCConnection.java
new file mode 100644
index 0000000..5175f8e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/connectivity/IngresJDBCConnection.java
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007, 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.connectivity;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.SQLException;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.Version;
+import org.eclipse.datatools.connectivity.db.generic.JDBCConnection;
+
+/**
+ * JDBC connection object to provide support for Ingres databases.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresJDBCConnection extends JDBCConnection {
+
+	private String mServerName;
+	
+	private Version mServerVersion;
+	
+	private Version mTechVersion;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param profile
+	 * @param factoryClass
+	 */
+	public IngresJDBCConnection(IConnectionProfile profile, Class factoryClass) {
+		super(profile, factoryClass);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.drivers.jdbc.JDBCConnection#getProviderName()
+	 */
+	public String getProviderName() {
+		return mServerName;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.drivers.jdbc.JDBCConnection#getProviderVersion()
+	 */
+	public Version getProviderVersion() {
+		return mServerVersion;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.drivers.jdbc.JDBCConnection#getTechnologyVersion()
+	 */
+	public Version getTechnologyVersion() {
+		return mTechVersion;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.drivers.jdbc.JDBCConnection#initVersions()
+	 */
+	protected void initVersions() {
+		try {
+			DatabaseMetaData dbmd = ((Connection) getRawConnection())
+					.getMetaData();
+			try {
+				mServerName = dbmd.getDatabaseProductName();
+			} catch (Throwable e) {
+			}
+			try {
+				String versionString = dbmd.getDatabaseProductVersion();
+				mServerVersion = VersionHelper.valueOf(versionString);
+			} catch (Throwable e) {
+			}
+			try {
+				mTechVersion = new Version(dbmd.getJDBCMajorVersion(), dbmd
+						.getJDBCMinorVersion(), 0, "");
+			} catch (Throwable e) {
+			}
+		} catch (SQLException e) {
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/connectivity/VersionHelper.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/connectivity/VersionHelper.java
new file mode 100644
index 0000000..5a17197
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/connectivity/VersionHelper.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007, 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.connectivity;
+
+import org.eclipse.datatools.connectivity.Version;
+
+/**
+ * Helper class for handling Ingres version strings.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class VersionHelper {
+
+	/**
+	 * Returns a Version object according to the given argument. For Ingres the
+	 * string looks like "II 9.2.0 (int.w32/118)". The returned object contains
+	 * major version "9", minor version "2", release version "0" and the build
+	 * version "(int.w32/118)". If the argument is no Ingres version string the
+	 * result of Version.valueOf(String) is returned.
+	 * 
+	 * @param version string with version information
+	 * @return Version object according the the argument
+	 */
+	public static Version valueOf(String version) {
+		if (version == null || version.trim().length() == 0
+				|| version.equals(Version.NULL_VERSION.toString())) {
+			return Version.NULL_VERSION;
+		}
+		int major = 0, minor = 0, release = 0;
+		String build = "";
+		String[] components = version.split(" ", 3); //$NON-NLS-1$
+
+		Version result = null;
+
+		if (components.length > 1) {
+			String[] versionComponents = components[1].split("\\.", 4); //$NON-NLS-1$
+			if (versionComponents[0].trim().length() > 0) {
+				try {
+					major = Integer.parseInt(versionComponents[0].trim());
+				} catch (NumberFormatException e) {
+				}
+			}
+			if (versionComponents.length > 1
+					&& versionComponents[1].trim().length() > 0) {
+				try {
+					minor = Integer.parseInt(versionComponents[1].trim());
+				} catch (NumberFormatException e) {
+				}
+			}
+			if (versionComponents.length > 2
+					&& versionComponents[2].trim().length() > 0) {
+				try {
+					release = Integer.parseInt(versionComponents[2].trim());
+				} catch (NumberFormatException e) {
+				}
+			}
+
+			if (components.length > 2 && components[2].trim().length() > 0) {
+				build = components[2].trim();
+			}
+
+			result = new Version(major, minor, release, build);
+		} else {
+			result = Version.valueOf(version);
+		}
+
+		return result;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/containment/IngresDBEventContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/containment/IngresDBEventContainmentProvider.java
new file mode 100644
index 0000000..6fd0d25
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/containment/IngresDBEventContainmentProvider.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.containment;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.enablement.ingres.containment.IngresGroupID;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresDBEvent;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * A containment provider to support Ingres db events.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresDBEventContainmentProvider extends
+		AbstractContainmentProvider {
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider#getContainer(org.eclipse.emf.ecore.EObject)
+	 */
+	public EObject getContainer(EObject obj) {
+		return ((IngresDBEvent) obj).getSchema();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.internal.core.containment.ContainmentProvider#getGroupId(org.eclipse.emf.ecore.EObject)
+	 */
+	public String getGroupId(EObject obj) {
+		return IngresGroupID.DB_EVENT_GROUP_ID;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/containment/IngresSchemaContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/containment/IngresSchemaContainmentProvider.java
new file mode 100644
index 0000000..b7eae03
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/containment/IngresSchemaContainmentProvider.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.containment;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.connectivity.sqm.internal.core.containment.GroupID;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSchema;
+import org.eclipse.datatools.modelbase.sql.schema.Catalog;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+/**
+ * A containment provider to support Ingres schemas.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresSchemaContainmentProvider extends
+		AbstractContainmentProvider {
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider#getContainedElements(org.eclipse.emf.ecore.EObject)
+	 */
+	public Collection getContainedElements(EObject obj) {
+		Collection children = super.getContainedElements(obj);
+		IngresSchema schema = (IngresSchema) obj;
+		children.addAll(schema.getTables());
+		children.addAll(schema.getRoutines());
+		children.addAll(schema.getSequences());
+		children.addAll(schema.getUserDefinedTypes());
+		children.addAll(schema.getAssertions());
+		children.addAll(schema.getCharSets());
+		children.addAll(schema.getSynonyms());
+		children.addAll(schema.getDBEvents());
+		return children;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider#getContainer(org.eclipse.emf.ecore.EObject)
+	 */
+	public EObject getContainer(EObject obj) {
+		Catalog catalog = ((Schema) obj).getCatalog();
+		if (catalog != null) {
+			return catalog;
+		} else {
+			return ((Schema) obj).getDatabase();
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider#getContainmentFeature(org.eclipse.emf.ecore.EObject)
+	 */
+	public EStructuralFeature getContainmentFeature(EObject obj) {
+		return SQLSchemaPackage.eINSTANCE.getCatalog_Schemas();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.internal.core.containment.ContainmentProvider#getGroupId(org.eclipse.emf.ecore.EObject)
+	 */
+	public String getGroupId(EObject obj) {
+		return GroupID.SCHEMA;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/containment/IngresSynonymContainmentProvider.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/containment/IngresSynonymContainmentProvider.java
new file mode 100644
index 0000000..86d0bc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/containment/IngresSynonymContainmentProvider.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.containment;
+
+import org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider;
+import org.eclipse.datatools.enablement.ingres.containment.IngresGroupID;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSynonym;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * A containment provider to support Ingres synonyms.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresSynonymContainmentProvider extends
+		AbstractContainmentProvider {
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.core.containment.AbstractContainmentProvider#getContainer(org.eclipse.emf.ecore.EObject)
+	 */
+	public EObject getContainer(EObject obj) {
+		return ((IngresSynonym) obj).getSchema();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.internal.core.containment.ContainmentProvider#getGroupId(org.eclipse.emf.ecore.EObject)
+	 */
+	public String getGroupId(EObject obj) {
+		return IngresGroupID.SYNONYM_GROUP_ID;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/ddl/IngresDdlBuilder.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/ddl/IngresDdlBuilder.java
new file mode 100644
index 0000000..bfadc20
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/ddl/IngresDdlBuilder.java
@@ -0,0 +1,463 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ddl;
+
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.fe.GenericDdlBuilder;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCPrimaryKey;
+import org.eclipse.datatools.enablement.ingres.internal.catalog.IngresCatalogCheckConstraint;
+import org.eclipse.datatools.enablement.ingres.internal.catalog.IngresCatalogView;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresDBEvent;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSynonym;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresTrigger;
+import org.eclipse.datatools.modelbase.sql.constraints.CheckConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.IndexMember;
+import org.eclipse.datatools.modelbase.sql.constraints.TableConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.UniqueConstraint;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.datatools.modelbase.sql.schema.ReferentialActionType;
+import org.eclipse.datatools.modelbase.sql.schema.Sequence;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;
+
+/**
+ * DDL builder for use with Ingres databases.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresDdlBuilder extends GenericDdlBuilder {
+
+	protected static final String RULE = "RULE";
+
+	protected static final String SYNONYM = "SYNONYM";
+
+	protected static final String DB_EVENT = "DBEVENT";
+
+	protected static final String SEQUENCE = "SEQUENCE";
+
+	private static final String START = "START";
+
+	private static final String BY = "BY";
+
+	private static final String INCREMENT = "INCREMENT";
+
+	private static final String MAXVALUE = "MAXVALUE";
+
+	private static final String MINVALUE = "MINVALUE";
+
+	private static final String CACHE = "CACHE";
+
+	private static final String CYCLE = "CYCLE";
+
+	private static final String ORDER = "ORDER";
+
+	private static final String BEGIN = "BEGIN";
+
+	private static final String SEMICOLON = ";";
+
+	private static final String END = "END";
+
+	private static final String RETURN = "RETURN";
+
+	public String createProcedures(Procedure procedure,
+			boolean quoteIdentifiers, boolean qualifyNames) {
+		return procedure.getSource().getBody();
+	}
+
+	public String createProcedureEmptyBody(Procedure procedure,
+			boolean quoteIdentifiers, boolean qualifyNames) {
+		StringBuffer stmtBuf = new StringBuffer();
+		stmtBuf.append(CREATE).append(SPACE).append(PROCEDURE).append(SPACE);
+		stmtBuf.append(getName(procedure, quoteIdentifiers, qualifyNames));
+		stmtBuf.append(SPACE).append(AS).append(SPACE).append(BEGIN).append(
+				SPACE);
+		stmtBuf.append(RETURN).append(SEMICOLON).append(SPACE).append(END);
+		return stmtBuf.toString();
+	}
+
+	public String dropProcedures(Procedure trigger, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		return DROP + SPACE + PROCEDURE + SPACE
+				+ getName(trigger, quoteIdentifiers, qualifyNames);
+	}
+
+	public String createTrigger(Trigger trigger, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		if (trigger instanceof IngresTrigger) {
+			return ((IngresTrigger) trigger).getSource().getBody();
+		}
+		return super.createTrigger(trigger, quoteIdentifiers, qualifyNames);
+	}
+
+	public String dropTrigger(Trigger trigger, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		return DROP + SPACE + RULE + SPACE
+				+ getName(trigger, quoteIdentifiers, qualifyNames);
+	}
+
+	public String createView(ViewTable view, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		if (view instanceof IngresCatalogView) {
+			return ((IngresCatalogView) view).getSource().getBody();
+		}
+		return super.createView(view, quoteIdentifiers, qualifyNames);
+	}
+
+	protected String getIndexKeyColumns(Index index, boolean quoteIdentifiers) {
+		StringBuffer columns = new StringBuffer();
+		Iterator it = index.getIncludedMembers().iterator();
+		if (it.hasNext()) {
+			IndexMember m = (IndexMember) it.next();
+			String columnName = m.getColumn().getName();
+			if (quoteIdentifiers) {
+				columnName = this.getDoubleQuotedString(columnName);
+			}
+			columns.append(columnName);
+			columns.append(SPACE);
+			columns.append(m.getIncrementType().getName());
+		} else {
+			// TODO report error
+			return null;
+		}
+
+		while (it.hasNext()) {
+			IndexMember m = (IndexMember) it.next();
+			String columnName = m.getColumn().getName();
+			if (quoteIdentifiers) {
+				columnName = this.getDoubleQuotedString(columnName);
+			}
+			columns.append(COMMA);
+			columns.append(SPACE);
+			columns.append(columnName);
+			columns.append(SPACE);
+			columns.append(m.getIncrementType().getName());
+		}
+		return columns.toString();
+	}
+
+	public String createIndex(Index index, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		String result = null;
+		if (!index.getName().startsWith("$")) {
+			result = super.createIndex(index, quoteIdentifiers, qualifyNames);
+		}
+		return result;
+	}
+
+	public String dropIndex(Index index, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		String result = null;
+		if (!index.getName().startsWith("$")) {
+			result = super.dropIndex(index, quoteIdentifiers, qualifyNames);
+		}
+		return result;
+	}
+
+	public String addForeignKey(ForeignKey foreignKey,
+			boolean quoteIdentifiers, boolean qualifyNames) {
+		UniqueConstraint uniqueConstraint = foreignKey.getUniqueConstraint();
+		Index index = foreignKey.getUniqueIndex();
+		Table parentTable = null;
+		String parentKey = null;
+		if (uniqueConstraint != null) {
+			parentTable = uniqueConstraint.getBaseTable();
+			parentKey = this.getKeyColumns(uniqueConstraint, quoteIdentifiers);
+		} else if (index != null) {
+			parentTable = index.getTable();
+			parentKey = this.getParentKeyColumns(index, quoteIdentifiers);
+		}
+		if (parentTable == null) {
+			// this.getEngineeringCallBack().writeMessage(MessageFormat.format(
+			// GenericCatalogMessages.FE_PARENT_TABLLE_OR_KEY_DO_NOT_EXIST, new
+			// Object[] { foreignKey.getName()}));
+			return null;
+		}
+
+		String statement = ALTER
+				+ SPACE
+				+ TABLE
+				+ SPACE
+				+ getName(foreignKey.getBaseTable(), quoteIdentifiers,
+						qualifyNames) + SPACE + ADD + SPACE
+				+ getConstraintName(foreignKey, quoteIdentifiers) + SPACE
+				+ FOREIGN_KEY + SPACE + LEFT_PARENTHESIS
+				+ this.getKeyColumns(foreignKey, quoteIdentifiers)
+				+ RIGHT_PARENTHESIS + NEWLINE;
+		statement += TAB + REFERENCES + SPACE
+				+ getName(parentTable, quoteIdentifiers, qualifyNames) + SPACE
+				+ LEFT_PARENTHESIS + parentKey + RIGHT_PARENTHESIS;
+
+		ReferentialActionType action = foreignKey.getOnDelete();
+		if (action != ReferentialActionType.NO_ACTION_LITERAL) {
+			statement += NEWLINE + TAB + ON + SPACE + DELETE + SPACE;
+		}
+		statement += getReferentialAction(action);
+
+		action = foreignKey.getOnUpdate();
+		if (action != ReferentialActionType.NO_ACTION_LITERAL) {
+			statement += NEWLINE + TAB + ON + SPACE + UPDATE + SPACE;
+		}
+		statement += getReferentialAction(action);
+
+		if (foreignKey.isDeferrable()) {
+			statement += NEWLINE + TAB + getDeferrableClause(foreignKey);
+		}
+		return statement;
+	}
+
+	public String dropTableConstraint(TableConstraint constraint,
+			boolean quoteIdentifiers, boolean qualifyNames) {
+		if (constraint.getName().startsWith("$")) {
+			return null;
+		}
+		return super.dropTableConstraint(constraint, quoteIdentifiers,
+				qualifyNames);
+	}
+
+	public String createSequence(Sequence sequence, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		StringBuffer stmtBuf = new StringBuffer();
+		stmtBuf.append(CREATE).append(SPACE).append(SEQUENCE).append(SPACE);
+		stmtBuf.append(getName(sequence, quoteIdentifiers)).append(SPACE);
+		if (sequence.getIdentity() instanceof IngresIdentitySpecifier) {
+			IngresIdentitySpecifier options = (IngresIdentitySpecifier) sequence
+					.getIdentity();
+
+			// AS data type
+			stmtBuf.append(AS).append(SPACE).append(options.getDataType())
+					.append(SPACE);
+			if ("decimal".equalsIgnoreCase(options.getDataType())) {
+				stmtBuf.append(LEFT_PARENTHESIS);
+				stmtBuf.append(options.getSeqPrecision());
+				stmtBuf.append(COMMA);
+				stmtBuf.append("0");
+				stmtBuf.append(RIGHT_PARENTHESIS);
+				stmtBuf.append(SPACE);
+			}
+
+			// START WITH number
+			stmtBuf.append(START).append(SPACE).append(WITH).append(SPACE);
+			stmtBuf.append(options.getStartValue()).append(SPACE);
+
+			// INCREMENT BY number
+			stmtBuf.append(INCREMENT).append(SPACE).append(BY).append(SPACE);
+			stmtBuf.append(options.getIncrement()).append(SPACE);
+
+			// MAXVALUE number | NO MAXVALUE
+			if (options.getMaximumOption() != null && options.getMaximumOption().booleanValue()) {
+				stmtBuf.append(MAXVALUE).append(SPACE);
+				stmtBuf.append(options.getMaximum()).append(SPACE);
+			} else {
+				stmtBuf.append(NO).append(SPACE).append(MAXVALUE).append(SPACE);
+			}
+
+			// MINVALUE number | NO MINVALUE
+			if (options.getMinimumOption() != null && options.getMinimumOption().booleanValue()) {
+				stmtBuf.append(MINVALUE).append(SPACE);
+				stmtBuf.append(options.getMinimum()).append(SPACE);
+			} else {
+				stmtBuf.append(NO).append(SPACE).append(MINVALUE).append(SPACE);
+			}
+
+			// CACHE number | NO CACHE
+			if (options.getCacheOption() != null && options.getCacheOption().booleanValue()) {
+				stmtBuf.append(CACHE).append(SPACE);
+				stmtBuf.append(options.getCacheSize()).append(SPACE);
+			} else {
+				stmtBuf.append(NO).append(SPACE).append(CACHE).append(SPACE);
+			}
+
+			// CYCLE | NO CYCLE
+			if (options.isCycleOption()) {
+				stmtBuf.append(CYCLE).append(SPACE);
+			} else {
+				stmtBuf.append(NO).append(SPACE).append(CYCLE).append(SPACE);
+			}
+
+			// ORDER | NO ORDER
+			if (options.getOrderOption() != null && options.getOrderOption().booleanValue()) {
+				stmtBuf.append(ORDER).append(SPACE);
+			} else {
+				stmtBuf.append(NO).append(SPACE).append(ORDER).append(SPACE);
+			}
+
+		}
+
+		return stmtBuf.toString();
+	}
+
+	public String dropSequence(Sequence sequence, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		StringBuffer stmtBuf = new StringBuffer();
+		stmtBuf.append(DROP).append(SPACE).append(SEQUENCE).append(SPACE)
+				.append(getName(sequence, quoteIdentifiers));
+		return stmtBuf.toString();
+	}
+
+	protected String getAddUniqueConstraintClause(UniqueConstraint constraint,
+			boolean quoteIdentifiers) {
+		String constraintName = getConstraintName(constraint, quoteIdentifiers);
+
+		String text = ADD + SPACE + constraintName + SPACE
+				+ getUniqueConstraintType(constraint) + SPACE
+				+ LEFT_PARENTHESIS
+				+ this.getKeyColumns(constraint, quoteIdentifiers)
+				+ RIGHT_PARENTHESIS;
+
+		if (constraint.isDeferrable()) {
+			text += SPACE + getDeferrableClause(constraint);
+		}
+		return text;
+	}
+
+	protected String getUniqueConstraintType(UniqueConstraint constraint) {
+        // XXX Workaround: JDBCUniqueConstraint extends PrimaryKeyImpl
+		if(constraint instanceof JDBCPrimaryKey) {
+            return PRIMARY_KEY;
+        }
+        return UNIQUE;
+	}
+
+	protected String getCheckConstraintClause(CheckConstraint constraint,
+			boolean quoteIdentifiers) {
+		String constraintName = getConstraintName(constraint, quoteIdentifiers);
+
+		String text = constraintName + SPACE;
+
+		if (constraint instanceof IngresCatalogCheckConstraint) {
+			text += constraint.getSearchCondition().getSQL() + SPACE;
+		} else {
+			text += CHECK + SPACE + LEFT_PARENTHESIS
+					+ constraint.getSearchCondition().getSQL()
+					+ RIGHT_PARENTHESIS + SPACE;
+		}
+
+		if (constraint.isDeferrable()) {
+			text += getDeferrableClause(constraint);
+		}
+		return text;
+	}
+
+	public String createSynonym(IngresSynonym synonym,
+			boolean quoteIdentifiers, boolean qualifyNames) {
+		StringBuffer stmtBuf = new StringBuffer();
+		stmtBuf.append(CREATE).append(SPACE).append(SYNONYM).append(SPACE);
+		stmtBuf.append(getName(synonym, quoteIdentifiers));
+		stmtBuf.append(SPACE).append(FOR).append(SPACE);
+		stmtBuf.append(getSynonymTableName(synonym, quoteIdentifiers,
+				qualifyNames));
+
+		return stmtBuf.toString();
+	}
+
+	public String dropSynonym(IngresSynonym synonym, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		StringBuffer stmtBuf = new StringBuffer();
+		stmtBuf.append(DROP).append(SPACE).append(SYNONYM).append(SPACE);
+		stmtBuf.append(getName(synonym, quoteIdentifiers));
+
+		return stmtBuf.toString();
+	}
+
+	public String createDBEvent(IngresDBEvent event, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		StringBuffer stmtBuf = new StringBuffer();
+		stmtBuf.append(CREATE).append(SPACE).append(DB_EVENT).append(SPACE);
+		stmtBuf.append(getName(event, quoteIdentifiers));
+		return stmtBuf.toString();
+	}
+
+	public String dropDBEvent(IngresDBEvent event, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		StringBuffer stmtBuf = new StringBuffer();
+		stmtBuf.append(DROP).append(SPACE).append(DB_EVENT).append(SPACE);
+		stmtBuf.append(getName(event, quoteIdentifiers));
+		return stmtBuf.toString();
+	}
+
+	protected String getSynonymTableName(IngresSynonym synonym,
+			boolean quoteIdentifiers, boolean qualifyNames) {
+		String tableName = synonym.getTableName();
+		String schemaName = synonym.getSchema().getName();
+
+		if (quoteIdentifiers) {
+			tableName = this.getDoubleQuotedString(tableName);
+			schemaName = this.getQuotedIdentifierString(synonym.getSchema());
+		}
+
+		if (qualifyNames) {
+			tableName = schemaName + DOT + tableName;
+		}
+
+		return tableName;
+	}
+
+	protected String getName(IngresSynonym synonym, boolean quoteIdentifiers) {
+		String name = synonym.getName();
+
+		if (quoteIdentifiers) {
+			name = this.getQuotedIdentifierString(synonym);
+		}
+
+		return name;
+	}
+
+	protected String getName(IngresDBEvent event, boolean quoteIdentifiers) {
+		String name = event.getName();
+
+		if (quoteIdentifiers) {
+			name = this.getQuotedIdentifierString(event);
+		}
+
+		return name;
+	}
+
+	protected String getName(Sequence sequence, boolean quoteIdentifiers) {
+		String name = sequence.getName();
+
+		if (quoteIdentifiers) {
+			name = this.getQuotedIdentifierString(sequence);
+		}
+
+		return name;
+	}
+
+	protected String getName(TableConstraint constraint,
+			boolean quoteIdentifiers) {
+		String name = constraint.getName();
+
+		if (name.startsWith("$")) {
+			name = "";
+		} else {
+			if (quoteIdentifiers) {
+				name = this.getDoubleQuotedString(name);
+			}
+		}
+
+		return name;
+	}
+
+	protected String getConstraintName(TableConstraint constraint,
+			boolean quoteIdentifiers) {
+		String constraintName = getName(constraint, quoteIdentifiers);
+		if (constraintName != null && constraintName.trim().length() > 0) {
+			constraintName = CONSTRAINT + SPACE + constraintName;
+		}
+
+		return constraintName;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/ddl/IngresDdlGenerator.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/ddl/IngresDdlGenerator.java
new file mode 100644
index 0000000..d2acf26
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/ddl/IngresDdlGenerator.java
@@ -0,0 +1,278 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ddl;
+
+import java.util.Iterator;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.datatools.connectivity.sqm.core.rte.EngineeringOption;
+import org.eclipse.datatools.connectivity.sqm.core.rte.fe.GenericDdlGenerator;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresDBEvent;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSynonym;
+import org.eclipse.datatools.modelbase.sql.constraints.CheckConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.UniqueConstraint;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.Sequence;
+import org.eclipse.datatools.modelbase.sql.tables.PersistentTable;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;
+
+/**
+ * DDL generator for use with Ingres databases.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresDdlGenerator extends GenericDdlGenerator {
+
+	private IngresDdlBuilder builder;
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.core.rte.fe.GenericDdlGenerator#dropStatements(org.eclipse.datatools.modelbase.sql.schema.SQLObject[], boolean, boolean, org.eclipse.core.runtime.IProgressMonitor, int)
+	 */
+	protected String[] dropStatements(SQLObject[] elements,
+			boolean quoteIdentifiers, boolean qualifyNames,
+			IProgressMonitor progressMonitor, int task) {
+		IngresDdlScript script = new IngresDdlScript();
+		if (this.builder == null) {
+			this.builder = new IngresDdlBuilder();
+		}
+
+		EngineeringOption[] options = this.getSelectedOptions(elements);
+
+		Iterator it = this.getAllContainedDisplayableElementSet(elements)
+				.iterator();
+		while (it.hasNext()) {
+			Object o = it.next();
+			if (o instanceof PersistentTable) {
+				if (!this.generateTables(options))
+					continue;
+				String statement = builder.dropTable((PersistentTable) o,
+						quoteIdentifiers, qualifyNames);
+				if (statement != null)
+					script.addDropTableStatement(statement);
+			} else if (o instanceof ViewTable) {
+				if (!this.generateViews(options))
+					continue;
+				String statement = builder.dropView((ViewTable) o,
+						quoteIdentifiers, qualifyNames);
+				if (statement != null)
+					script.addDropViewStatement(statement);
+			} else if (o instanceof Trigger) {
+				if (!this.generateTriggers(options))
+					continue;
+				String statement = builder.dropTrigger((Trigger) o,
+						quoteIdentifiers, qualifyNames);
+				if (statement != null)
+					script.addDropTriggerStatement(statement);
+			} else if (o instanceof Procedure) {
+				// Handle procedures
+				// TODO include procedures in ddl gen dialog
+				// if (!this.generateProcedures(options))
+				// continue;
+				String statement = builder.dropProcedures((Procedure) o,
+						quoteIdentifiers, qualifyNames);
+				if (statement != null)
+					script.addDropProcedureStatement(statement);
+			} else if (o instanceof CheckConstraint) {
+				if (!this.generateCKConstraints(options))
+					continue;
+				String statement = builder.dropTableConstraint(
+						(CheckConstraint) o, quoteIdentifiers, qualifyNames);
+				if (statement != null)
+					script.addAlterTableDropConstraintStatement(statement);
+			} else if (o instanceof UniqueConstraint) {
+				if (!this.generatePKConstraints(options))
+					continue;
+				String statement = builder.dropTableConstraint(
+						(UniqueConstraint) o, quoteIdentifiers, qualifyNames);
+				if (statement != null)
+					script.addAlterTableDropConstraintStatement(statement);
+			} else if (o instanceof ForeignKey) {
+				if (!this.generateFKConstraints(options))
+					continue;
+				String statement = builder.dropTableConstraint((ForeignKey) o,
+						quoteIdentifiers, qualifyNames);
+				if (statement != null)
+					script.addAlterTableDropForeignKeyStatement(statement);
+			} else if (o instanceof Index) {
+				if (!this.generateIndexes(options))
+					continue;
+				String statement = builder.dropIndex((Index) o,
+						quoteIdentifiers, qualifyNames);
+				if (statement != null)
+					script.addDropIndexStatement(statement);
+			} else if (o instanceof IngresSynonym) {
+				// TODO include synonyms in ddl gen dialog
+				// if (!this.generateViews(options))
+				// continue;
+				String statement = builder.dropSynonym((IngresSynonym) o,
+						quoteIdentifiers, qualifyNames);
+				if (statement != null)
+					script.addDropSynonymStatement(statement);
+			} else if (o instanceof IngresDBEvent) {
+				// TODO include db events in ddl gen dialog
+				// if (!this.generateViews(options))
+				// continue;
+				String statement = builder.dropDBEvent((IngresDBEvent) o,
+						quoteIdentifiers, qualifyNames);
+				if (statement != null)
+					script.addDropDBEventStatement(statement);
+			} else if (o instanceof Sequence) {
+				// TODO include db events in ddl gen dialog
+				// if (!this.generateViews(options))
+				// continue;
+				String statement = builder.dropSequence((Sequence) o,
+						quoteIdentifiers, qualifyNames);
+				if (statement != null)
+					script.addDropSequenceStatement(statement);
+			}
+		}
+		return script.getStatements();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.datatools.connectivity.sqm.core.rte.fe.GenericDdlGenerator#createStatements(org.eclipse.datatools.modelbase.sql.schema.SQLObject[],
+	 *      boolean, boolean, org.eclipse.core.runtime.IProgressMonitor, int)
+	 */
+	protected String[] createStatements(SQLObject[] elements,
+			boolean quoteIdentifiers, boolean qualifyNames,
+			IProgressMonitor progressMonitor, int task) {
+		IngresDdlScript script = new IngresDdlScript();
+		if (this.builder == null) {
+			this.builder = new IngresDdlBuilder();
+		}
+
+		EngineeringOption[] options = this.getSelectedOptions(elements);
+
+		Set allObjectss = getAllContainedDisplayableElementSet(elements);
+
+		// it's a single statement or a script?
+		boolean singleObject = true;
+		if (allObjectss.size() > 1) {
+			singleObject = false;
+		}
+
+		Iterator it = allObjectss.iterator();
+		while (it.hasNext()) {
+			Object o = it.next();
+			if (o instanceof PersistentTable) {
+				if (!this.generateTables(options))
+					continue;
+				String statement = builder.createTable((PersistentTable) o,
+						quoteIdentifiers, qualifyNames);
+				if (statement != null)
+					script.addCreateTableStatement(statement);
+			} else if (o instanceof ViewTable) {
+				if (!this.generateViews(options))
+					continue;
+				String statement = builder.createView((ViewTable) o,
+						quoteIdentifiers, qualifyNames);
+				if (statement != null)
+					script.addCreateViewStatement(statement);
+			} else if (o instanceof Trigger) {
+				if (!this.generateTriggers(options))
+					continue;
+				String statement = builder.createTrigger((Trigger) o,
+						quoteIdentifiers, qualifyNames);
+				if (statement != null)
+					script.addCreateTriggerStatement(statement);
+			} else if (o instanceof Procedure) {
+				// Handle procedures
+				// TODO include procedures in ddl gen dialog
+				// if (!this.generateProcedures(options))
+				// continue;
+
+				// create all procedures with an empty body, afterwards recreate
+				// every procedure (avoids dependency errors)
+
+				String stmtEmpty = null;
+				String stmtDrop = null;
+				if (!singleObject) {
+					stmtEmpty = builder.createProcedureEmptyBody((Procedure) o,
+							quoteIdentifiers, qualifyNames);
+					stmtDrop = builder.dropProcedure((Procedure) o,
+							quoteIdentifiers, qualifyNames);
+				}
+				String statement = builder.createProcedures((Procedure) o,
+						quoteIdentifiers, qualifyNames);
+				if (stmtEmpty != null) {
+					script.addCreateEmptyProcedureStatement(stmtEmpty);
+				}
+				if (stmtDrop != null) {
+					script.addCreateProcedureStatement(stmtDrop);
+				}
+				if (statement != null) {
+					script.addCreateProcedureStatement(statement);
+				}
+			} else if (o instanceof CheckConstraint) {
+				if (!this.generateCKConstraints(options))
+					continue;
+				String statement = builder.addCheckConstraint(
+						(CheckConstraint) o, quoteIdentifiers, qualifyNames);
+				if (statement != null)
+					script.addAlterTableAddConstraintStatement(statement);
+			} else if (o instanceof UniqueConstraint) {
+				if (!this.generatePKConstraints(options))
+					continue;
+				String statement = builder.addUniqueConstraint(
+						(UniqueConstraint) o, quoteIdentifiers, qualifyNames);
+				if (statement != null)
+					script.addAlterTableAddConstraintStatement(statement);
+			} else if (o instanceof ForeignKey) {
+				if (!this.generateFKConstraints(options))
+					continue;
+				String statement = builder.addForeignKey((ForeignKey) o,
+						quoteIdentifiers, qualifyNames);
+				if (statement != null)
+					script.addAlterTableAddForeignKeyStatement(statement);
+			} else if (o instanceof Index) {
+				if (!this.generateIndexes(options))
+					continue;
+				String statement = builder.createIndex((Index) o,
+						quoteIdentifiers, qualifyNames);
+				if (statement != null)
+					script.addCreateIndexStatement(statement);
+			} else if (o instanceof IngresSynonym) {
+				// TODO include synonyms in ddl gen dialog
+				// if (!this.generateViews(options))
+				// continue;
+				String statement = builder.createSynonym((IngresSynonym) o,
+						quoteIdentifiers, qualifyNames);
+				if (statement != null)
+					script.addCreateSynonymStatement(statement);
+			} else if (o instanceof IngresDBEvent) {
+				// TODO include db events in ddl gen dialog
+				// if (!this.generateViews(options))
+				// continue;
+				String statement = builder.createDBEvent((IngresDBEvent) o,
+						quoteIdentifiers, qualifyNames);
+				if (statement != null)
+					script.addCreateDBEventStatement(statement);
+			} else if (o instanceof Sequence) {
+				// TODO include sequences in ddl gen dialog
+				// if (!this.generateViews(options))
+				// continue;
+				String statement = builder.createSequence((Sequence) o,
+						quoteIdentifiers, qualifyNames);
+				if (statement != null)
+					script.addCreateSequenceStatement(statement);
+			}
+		}
+		return script.getStatements();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/ddl/IngresDdlScript.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/ddl/IngresDdlScript.java
new file mode 100644
index 0000000..51faa07
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/ddl/IngresDdlScript.java
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.ddl;
+
+import java.util.Vector;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.fe.GenericDdlScript;
+
+/**
+ * DDL script for use with Ingres databases.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresDdlScript extends GenericDdlScript {
+
+	protected Vector createProcedureStatements = new Vector();
+	protected Vector createEmptyProcedureStatements = new Vector();
+	protected Vector dropProcedureStatements = new Vector();
+	protected Vector createSynonymStatements = new Vector();
+	protected Vector dropSynonymStatements = new Vector();
+	protected Vector createDBEventStatements = new Vector();
+	protected Vector dropDBEventStatements = new Vector();
+	protected Vector createSequencesStatements = new Vector();
+	protected Vector dropSequencesStatements = new Vector();
+
+	public void addCreateProcedureStatement(String stmtCreate) {
+		createProcedureStatements.add(stmtCreate);
+	}
+
+	public void addDropProcedureStatement(String statement) {
+		dropProcedureStatements.add(statement);
+	}
+
+	public void addCreateSynonymStatement(String statement) {
+		createSynonymStatements.add(statement);
+	}
+
+	public void addDropSynonymStatement(String statement) {
+		dropSynonymStatements.add(statement);
+	}
+
+	public void addDropDBEventStatement(String statement) {
+		dropDBEventStatements.add(statement);
+	}
+
+	public void addCreateDBEventStatement(String statement) {
+		createDBEventStatements.add(statement);
+	}
+
+	public void addDropSequenceStatement(String statement) {
+		dropSequencesStatements.add(statement);
+	}
+
+	public void addCreateSequenceStatement(String statement) {
+		createSequencesStatements.add(statement);
+	}
+
+	public String[] getStatements() {
+		Vector scriptVec = new Vector();
+
+		scriptVec.addAll(dropForeignKeyStatements);
+		scriptVec.addAll(dropConstraintStatements);
+		scriptVec.addAll(dropIndexStatements);
+		scriptVec.addAll(dropTriggerStatements);
+		scriptVec.addAll(dropProcedureStatements);
+		scriptVec.addAll(dropDBEventStatements);
+		scriptVec.addAll(dropSynonymStatements);
+		scriptVec.addAll(dropViewStatements);
+		scriptVec.addAll(dropTableStatements);
+		scriptVec.addAll(dropSequencesStatements);
+
+		scriptVec.addAll(createSequencesStatements);
+		scriptVec.addAll(createTableStatements);
+		scriptVec.addAll(createViewStatements);
+		scriptVec.addAll(createSynonymStatements);
+		scriptVec.addAll(createDBEventStatements);
+
+		scriptVec.addAll(createEmptyProcedureStatements);
+		scriptVec.addAll(createProcedureStatements);
+
+		scriptVec.addAll(createTriggerStatements);
+		scriptVec.addAll(alterTableStatements);
+		scriptVec.addAll(createIndexStatements);
+		scriptVec.addAll(addConstraintStatements);
+		scriptVec.addAll(addForeignKeyStatements);
+
+		String[] scripts = new String[scriptVec.size()];
+		scriptVec.copyInto(scripts);
+		return scripts;
+	}
+
+	public void addCreateEmptyProcedureStatement(String statement) {
+		createEmptyProcedureStatements.add(statement);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresDBEventLoader.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresDBEventLoader.java
new file mode 100644
index 0000000..f90e983
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresDBEventLoader.java
@@ -0,0 +1,126 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.loaders;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.loader.IConnectionFilterProvider;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCBaseLoader;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresDBEvent;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelFactory;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+
+/**
+ * Class for loading a list of database events from an Ingres database.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresDBEventLoader extends JDBCBaseLoader {
+
+	private static final String DB_EVENT_QUERY = "SELECT DISTINCT event_name, event_owner FROM iievents WHERE event_owner = ?"; //$NON-NLS-1$
+
+	private static final String DB_EVENT_NAME = "event_name"; //$NON-NLS-1$
+
+	public IngresDBEventLoader() {
+		this(null);
+	}
+
+	public IngresDBEventLoader(ICatalogObject catalogObject) {
+		this(catalogObject, null);
+	}
+
+	public IngresDBEventLoader(ICatalogObject catalogObject,
+			IConnectionFilterProvider connectionFilterProvider) {
+		super(catalogObject, connectionFilterProvider);
+	}
+
+	/**
+	 * Loads all synonyms for the catalog object of this loader.
+	 * 
+	 * @param containmentList result list
+	 * @param existingDBEvents list of known db events
+	 * @throws SQLException
+	 */
+	public void loadDbEvents(List containmentList,
+			List existingDBEvents) throws SQLException {
+		ResultSet rs = null;
+		PreparedStatement stmt = null;
+		try {
+			stmt = getCatalogObject().getConnection().prepareStatement(
+					DB_EVENT_QUERY);
+			rs = createResultSet(stmt);
+
+			String dbEventName = null;
+			while (rs.next()) {
+				dbEventName = rs.getString(DB_EVENT_NAME).trim();
+
+				IngresDBEvent dbEvent = (IngresDBEvent) getAndRemoveSQLObject(
+						existingDBEvents, dbEventName);
+
+				if (dbEvent == null) {
+					dbEvent = processRow(rs);
+					if (dbEvent != null) {
+						containmentList.add(dbEvent);
+					}
+				} else {
+					containmentList.add(dbEvent);
+					if (dbEvent instanceof ICatalogObject) {
+						((ICatalogObject) dbEvent).refresh();
+					}
+				}
+			}
+		} finally {
+			LoaderHelper.close(rs);
+			LoaderHelper.close(stmt);
+		}
+	}
+
+	public void clearDbEvents(List existingDbEvents) {
+		existingDbEvents.clear();
+	}
+
+	protected ResultSet createResultSet(PreparedStatement stmt)
+			throws SQLException {
+		try {
+			// it's expected that catalog object is a Schema
+			String schema = ((Schema) getCatalogObject()).getName();
+			stmt.setString(1, schema);
+			return stmt.executeQuery();
+		} catch (RuntimeException e) {
+			SQLException error = new SQLException(
+					"Error while retrieving catalog information (db event)");
+			error.initCause(e);
+			throw error;
+		}
+	}
+
+	protected IngresDBEvent processRow(ResultSet rs) throws SQLException {
+		IngresDBEvent dbEvent = createDBEvent();
+		initialize(dbEvent, rs);
+		return dbEvent;
+	}
+
+	protected void initialize(IngresDBEvent dbEvent, ResultSet rs)
+			throws SQLException {
+		String triggerName = rs.getString(DB_EVENT_NAME).trim();
+		dbEvent.setName(triggerName);
+		// dbEvent.setSchema(((Schema) getCatalogObject()).getSchema());
+	}
+
+	protected IngresDBEvent createDBEvent() {
+		return IngressqlmodelFactory.eINSTANCE.createIngresDBEvent();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresProcedureColumnLoader.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresProcedureColumnLoader.java
new file mode 100644
index 0000000..ed39c56
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresProcedureColumnLoader.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.loaders;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCProcedureColumnLoader;
+import org.eclipse.datatools.modelbase.sql.routines.Parameter;
+import org.eclipse.datatools.modelbase.sql.routines.ParameterMode;
+
+/**
+ * Class for loading procedure columns from an Ingres database.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresProcedureColumnLoader extends JDBCProcedureColumnLoader {
+
+	public IngresProcedureColumnLoader() {
+		super(null);
+	}
+
+	/**
+	 * This implementation treats all parameters as INOUT (it is not distinguish
+	 * between INOUT/OUT/IN at the moment).
+	 * 
+	 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCProcedureColumnLoader#initParameter(org.eclipse.datatools.modelbase.sql.routines.Parameter,
+	 *      java.sql.ResultSet)
+	 */
+	protected void initParameter(Parameter parameter, ResultSet rs)
+			throws SQLException {
+		// TODO is there a way to differentiate between in/out/inout?
+		super.initParameter(parameter, rs);
+		parameter.setMode(ParameterMode.INOUT_LITERAL);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresProcedureSourceLoader.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresProcedureSourceLoader.java
new file mode 100644
index 0000000..7724a32
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresProcedureSourceLoader.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.loaders;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.loader.IConnectionFilterProvider;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCBaseLoader;
+import org.eclipse.datatools.modelbase.sql.routines.Source;
+
+/**
+ * Class for loading the source of a procedure from an Ingres database.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresProcedureSourceLoader extends JDBCBaseLoader {
+
+	private static final String PROCEDURE_SOURCE_QUERY = "SELECT text_segment FROM iiprocedures WHERE procedure_name=? AND procedure_owner=? ORDER BY text_sequence";
+
+	private static final String PROCEDURE_SOURCE_SEGMENT = "text_segment";
+
+	public IngresProcedureSourceLoader() {
+		this(null);
+	}
+
+	public IngresProcedureSourceLoader(ICatalogObject catalogObject) {
+		this(catalogObject, null);
+	}
+
+	public IngresProcedureSourceLoader(ICatalogObject catalogObject,
+			IConnectionFilterProvider connectionFilterProvider) {
+		super(catalogObject, connectionFilterProvider);
+	}
+
+	/**
+	 * Loads the source for a procedure and stores the result in the
+	 * given source object.
+	 * 
+	 * @param procedureOwner schema
+	 * @param procedureName procedure
+	 * @param source result
+	 */
+	public void loadSource(String procedureOwner, String procedureName,
+			Source source) {
+		ResultSet rs = null;
+		PreparedStatement stmt = null;
+		try {
+			stmt = getCatalogObject().getConnection().prepareStatement(
+					PROCEDURE_SOURCE_QUERY);
+			stmt.setString(1, procedureName);
+			stmt.setString(2, procedureOwner);
+			rs = stmt.executeQuery();
+
+			StringBuffer sourceBuf = new StringBuffer();
+			while (rs.next()) {
+				sourceBuf.append(rs.getString(PROCEDURE_SOURCE_SEGMENT));
+			}
+
+			source.setBody(sourceBuf.toString());
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			LoaderHelper.close(rs);
+			LoaderHelper.close(stmt);
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresRoutineLoader.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresRoutineLoader.java
new file mode 100644
index 0000000..d786360
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresRoutineLoader.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.loaders;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCRoutineLoader;
+import org.eclipse.datatools.enablement.ingres.internal.catalog.IngresProcedure;
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+
+/**
+ * Class for loading procedures from an Ingres database.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresRoutineLoader extends JDBCRoutineLoader {
+
+	public IngresRoutineLoader() {
+		super(null);
+		setProcedureFactory(new IngresProcedureFactory());
+	}
+
+	/**
+	 * Used by processRow() to determine whether or not the meta-data represents
+	 * a SP or UDF.
+	 * 
+	 * @param rs the result set
+	 * @return returns always TRUE
+	 * @throws SQLException if anything goes wrong
+
+	 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCRoutineLoader#isProcedure(java.sql.ResultSet)
+	 */
+	protected boolean isProcedure(ResultSet rs) throws SQLException {
+		// handle every routine as SP
+		return true;
+	}
+
+	public static class IngresProcedureFactory extends ProcedureFactory {
+
+		protected Routine newRoutine() {
+			return new IngresProcedure();
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresSchemaLoader.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresSchemaLoader.java
new file mode 100644
index 0000000..6ec4d31
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresSchemaLoader.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.loaders;
+
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCSchemaLoader;
+import org.eclipse.datatools.enablement.ingres.internal.catalog.IngresCatalogSchema;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+
+/**
+ * Class for loading schemas from an Ingres database.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresSchemaLoader extends JDBCSchemaLoader {
+
+	public IngresSchemaLoader() {
+		super(null);
+	}
+
+	/**
+	 * Returns a new Schema object. This method overrides the default behavior
+	 * and returns a new IngresSchema.
+	 * 
+	 * @return a new Schema object.
+	 * 
+	 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCSchemaLoader#createSchema()
+	 */
+	protected Schema createSchema() {
+		return new IngresCatalogSchema();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresSequenceLoader.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresSequenceLoader.java
new file mode 100644
index 0000000..d392070
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresSequenceLoader.java
@@ -0,0 +1,190 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.loaders;
+
+import java.math.BigInteger;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.connectivity.sqm.loader.IConnectionFilterProvider;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCBaseLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.SchemaObjectFilterProvider;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelFactory;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaFactory;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.schema.Sequence;
+
+/**
+ * This class adds the ability to retrieve a list of sequences from an Ingres
+ * database.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresSequenceLoader extends JDBCBaseLoader {
+
+	private static final String SEQUENCE_NAME = "seq_name"; //$NON-NLS-1$
+
+	private static final String SEQUENCE_QUERY = "SELECT seq_name, seq_owner, create_date, modify_date, data_type, seq_length, seq_precision, start_value, increment_value, next_value, min_value, max_value, cache_size, start_flag, incr_flag, min_flag, max_flag, restart_flag, cache_flag, cycle_flag, order_flag FROM iisequences WHERE seq_owner = ? ORDER BY seq_name"; //$NON-NLS-1$
+
+	private static final String DATA_TYPE = "data_type";
+
+	private static final String SEQ_LENGTH = "seq_length";
+
+	private static final String SEQ_PRECISION = "seq_precision";
+
+	private static final String START_VALUE = "start_value";
+
+	private static final String INCREMENT_VALUE = "increment_value";
+
+	private static final String MAX_VALUE = "max_value";
+
+	private static final String MIN_VALUE = "min_value";
+
+	private static final String CACHE_SIZE = "cache_size";
+
+	private static final String MAX_FLAG = "max_flag";
+
+	private static final String MIN_FLAG = "min_flag";
+
+	private static final String CYCLE_FLAG = "cycle_flag";
+
+	private static final String ORDER_FLAG = "order_flag";
+
+	private static final String CACHE_FLAG = "cache_flag";
+
+	public IngresSequenceLoader(ICatalogObject catalogObject) {
+		this(catalogObject, new SchemaObjectFilterProvider(
+				ConnectionFilter.SEQUENCE_FILTER));
+	}
+
+	public IngresSequenceLoader(ICatalogObject catalogObject,
+			IConnectionFilterProvider connectionFilterProvider) {
+		super(catalogObject, connectionFilterProvider);
+	}
+
+	public void clearSequences(List sequences) {
+		sequences.clear();
+	}
+
+	/**
+	 * This method loads and fills the containmentList with the sequences. In
+	 * addition every reference (to an found sequence) is removed from
+	 * existingSequences. Considered are only those sequences, that are owned by
+	 * the schema denoted by CatalogObject (should be an Schema).
+	 * 
+	 * @param containmentList
+	 *            List of new Sequences
+	 * @param existingSequences
+	 *            List of old Sequences
+	 * @throws SQLException
+	 *             In case of an database error
+	 */
+	public void loadSequences(List containmentList,
+			Collection existingSequences) throws SQLException {
+		ResultSet rs = null;
+		PreparedStatement stmt = null;
+		try {
+			initActiveFilter();
+
+			stmt = getCatalogObject().getConnection().prepareStatement(
+					SEQUENCE_QUERY);
+			rs = createResultSet(stmt);
+
+			while (rs.next()) {
+				String sequenceName = rs.getString(SEQUENCE_NAME);
+
+				if (sequenceName == null || isFiltered(sequenceName)) {
+					continue;
+				}
+
+				Sequence sequence = (Sequence) getAndRemoveSQLObject(
+						existingSequences, sequenceName);
+
+				if (sequence == null) {
+					sequence = processRow(rs);
+					if (sequence != null) {
+						containmentList.add(sequence);
+					}
+				} else {
+					containmentList.add(sequence);
+					if (sequence instanceof ICatalogObject) {
+						((ICatalogObject) sequence).refresh();
+					}
+				}
+			}
+		} finally {
+			LoaderHelper.close(rs);
+			LoaderHelper.close(stmt);
+		}
+	}
+
+	protected Sequence processRow(ResultSet rs) throws SQLException {
+		Sequence sequence = createSequence();
+		initialize(sequence, rs);
+		return sequence;
+	}
+
+	protected void initialize(Sequence sequence, ResultSet rs)
+			throws SQLException {
+		sequence.setName(rs.getString(SEQUENCE_NAME).trim());
+
+		IngresIdentitySpecifier spec = IngressqlmodelFactory.eINSTANCE
+				.createIngresIdentitySpecifier();
+		spec.setDataType(rs.getString(DATA_TYPE));
+		spec.setSeqLength(BigInteger.valueOf(rs.getLong(SEQ_LENGTH)));
+		spec.setSeqPrecision(BigInteger.valueOf(rs.getLong(SEQ_PRECISION)));
+		spec.setStartValue(BigInteger.valueOf(rs.getLong(START_VALUE)));
+		spec.setIncrement(BigInteger.valueOf(rs.getLong(INCREMENT_VALUE)));
+		spec.setMaximum(BigInteger.valueOf(rs.getLong(MAX_VALUE)));
+		spec.setMaximumOption(parseBoolean(rs.getString(MAX_FLAG)));
+		spec.setMinimum(BigInteger.valueOf(rs.getLong(MIN_VALUE)));
+		spec.setMinimumOption(parseBoolean(rs.getString(MIN_FLAG)));
+		spec.setCacheSize(BigInteger.valueOf(rs.getLong(CACHE_SIZE)));
+		spec.setCacheOption(parseBoolean(rs.getString(CACHE_FLAG)));
+		spec.setCycleOption(parseBoolean(rs.getString(CYCLE_FLAG)).booleanValue());
+		spec.setOrderOption(parseBoolean(rs.getString(ORDER_FLAG)));
+
+		sequence.setIdentity(spec);
+	}
+
+	protected Sequence createSequence() {
+		return SQLSchemaFactory.eINSTANCE.createSequence();
+	}
+
+	protected ResultSet createResultSet(PreparedStatement stmt)
+			throws SQLException {
+		try {
+			// it's expected that catalog object is an Schema
+			String schema = ((Schema) getCatalogObject()).getName();
+			stmt.setString(1, schema);
+			return stmt.executeQuery();
+		} catch (RuntimeException e) {
+			SQLException error = new SQLException(
+					"Error while retrieving catalog information (sequences)");
+			error.initCause(e);
+			throw error;
+		}
+	}
+
+	private Boolean parseBoolean(String in) {
+		if (in != null && "Y".equalsIgnoreCase(in.trim())) {
+			return Boolean.TRUE;
+		}
+		return Boolean.FALSE;
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresSynonymLoader.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresSynonymLoader.java
new file mode 100644
index 0000000..668ff65
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresSynonymLoader.java
@@ -0,0 +1,132 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.loaders;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.loader.IConnectionFilterProvider;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCBaseLoader;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSynonym;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelFactory;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+
+/**
+ * Class for loading a list of synonyms from an Ingres database.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresSynonymLoader extends JDBCBaseLoader {
+
+	private static final String SYNONYM_QUERY = "SELECT DISTINCT synonym_name, synonym_owner, table_name, table_owner FROM iisynonyms WHERE synonym_owner = ?"; //$NON-NLS-1$
+
+	private static final String SYNONYM_NAME = "synonym_name"; //$NON-NLS-1$
+
+	private static final String TABLE_NAME = "table_name"; //$NON-NLS-1$
+
+	public IngresSynonymLoader() {
+		this(null);
+	}
+
+	public IngresSynonymLoader(ICatalogObject catalogObject) {
+		this(catalogObject, null);
+	}
+
+	public IngresSynonymLoader(ICatalogObject catalogObject,
+			IConnectionFilterProvider connectionFilterProvider) {
+		super(catalogObject, connectionFilterProvider);
+	}
+
+	/**
+	 * Loads all synonyms for the catalog object of this loader.
+	 * 
+	 * @param containmentList
+	 *            result list
+	 * @param existingSynonyms
+	 *            list of already known synonyms
+	 * @throws SQLException
+	 */
+	public void loadSynonyms(List containmentList, List existingSynonyms)
+			throws SQLException {
+		ResultSet rs = null;
+		PreparedStatement stmt = null;
+		try {
+			stmt = getCatalogObject().getConnection().prepareStatement(
+					SYNONYM_QUERY);
+			rs = createResultSet(stmt);
+
+			String synonymName = null;
+			while (rs.next()) {
+				synonymName = rs.getString(SYNONYM_NAME).trim();
+
+				IngresSynonym synonym = (IngresSynonym) getAndRemoveSQLObject(
+						existingSynonyms, synonymName);
+
+				if (synonym == null) {
+					synonym = processRow(rs);
+					if (synonym != null) {
+						containmentList.add(synonym);
+					}
+				} else {
+					containmentList.add(synonym);
+					if (synonym instanceof ICatalogObject) {
+						((ICatalogObject) synonym).refresh();
+					}
+				}
+			}
+		} finally {
+			LoaderHelper.close(rs);
+			LoaderHelper.close(stmt);
+		}
+	}
+
+	public void clearSynonyms(List existingSynonyms) {
+		existingSynonyms.clear();
+	}
+
+	protected ResultSet createResultSet(PreparedStatement stmt)
+			throws SQLException {
+		try {
+			// it's expected that catalog object is a Schema
+			String schema = ((Schema) getCatalogObject()).getName();
+			stmt.setString(1, schema);
+			return stmt.executeQuery();
+		} catch (RuntimeException e) {
+			SQLException error = new SQLException(
+					"Error while retrieving catalog information (db event)");
+			error.initCause(e);
+			throw error;
+		}
+	}
+
+	protected IngresSynonym processRow(ResultSet rs) throws SQLException {
+		IngresSynonym synonym = createSynonym();
+		initialize(synonym, rs);
+		return synonym;
+	}
+
+	protected void initialize(IngresSynonym synonym, ResultSet rs)
+			throws SQLException {
+		String synonymName = rs.getString(SYNONYM_NAME).trim();
+		String tableName = rs.getString(TABLE_NAME).trim();
+		synonym.setName(synonymName);
+		synonym.setTableName(tableName);
+		// dbEvent.setSchema(((Schema) getCatalogObject()).getSchema());
+	}
+
+	protected IngresSynonym createSynonym() {
+		return IngressqlmodelFactory.eINSTANCE.createIngresSynonym();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresTableConstraintDefinitionLoader.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresTableConstraintDefinitionLoader.java
new file mode 100644
index 0000000..387d69c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresTableConstraintDefinitionLoader.java
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.loaders;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.loader.IConnectionFilterProvider;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCBaseLoader;
+import org.eclipse.datatools.modelbase.sql.expressions.SearchCondition;
+
+/**
+ * Class for loading additional information (constraint definition) for a
+ * constraint from an Ingres database.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresTableConstraintDefinitionLoader extends JDBCBaseLoader {
+
+	private static final String CONSTRAINT_DEFINITION_QUERY = "SELECT text_segment FROM iiconstraints c WHERE c.schema_name = ? AND c.table_name = ? AND c.constraint_name = ? AND c.constraint_type = ? ORDER BY c.text_sequence";
+
+	private static final String CONSTRAINT_DEFINITION_SEGMENT = "text_segment";
+
+	public IngresTableConstraintDefinitionLoader() {
+		this(null);
+	}
+
+	public IngresTableConstraintDefinitionLoader(ICatalogObject catalogObject) {
+		this(catalogObject, null);
+	}
+
+	public IngresTableConstraintDefinitionLoader(ICatalogObject catalogObject,
+			IConnectionFilterProvider connectionFilterProvider) {
+		super(catalogObject, connectionFilterProvider);
+	}
+
+	public void loadCheckConstraintDefinition(String schemaName,
+			String tableName, String constraintName, SearchCondition condition) {
+		loadConstraintDefinition(schemaName, tableName, constraintName, "C",
+				condition);
+	}
+
+	/**
+	 * Loads additional constraint information (constraint definition) for the
+	 * given constraint.
+	 * 
+	 * @param schemaName
+	 *            schema
+	 * @param tableName
+	 *            table
+	 * @param constraintName
+	 *            constraint
+	 * @param constraintType
+	 *            constraint type
+	 * @param condition
+	 *            result
+	 */
+	public void loadConstraintDefinition(String schemaName, String tableName,
+			String constraintName, String constraintType,
+			SearchCondition condition) {
+
+		ResultSet rs = null;
+		PreparedStatement stmt = null;
+		try {
+			stmt = getCatalogObject().getConnection().prepareStatement(
+					CONSTRAINT_DEFINITION_QUERY);
+			stmt.setString(1, schemaName);
+			stmt.setString(2, tableName);
+			stmt.setString(3, constraintName);
+			stmt.setString(4, constraintType);
+			rs = stmt.executeQuery();
+
+			StringBuffer definitionBuf = new StringBuffer();
+			while (rs.next()) {
+				definitionBuf.append(rs
+						.getString(CONSTRAINT_DEFINITION_SEGMENT));
+			}
+
+			condition.setSQL(definitionBuf.toString());
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			LoaderHelper.close(rs);
+			LoaderHelper.close(stmt);
+		}
+
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresTableConstraintLoader.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresTableConstraintLoader.java
new file mode 100644
index 0000000..7759560
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresTableConstraintLoader.java
@@ -0,0 +1,135 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.loaders;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.loader.IConnectionFilterProvider;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableConstraintLoader;
+import org.eclipse.datatools.enablement.ingres.internal.catalog.IngresCatalogCheckConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.CheckConstraint;
+
+/**
+ * Class for loading a list of constraints for a tables from an Ingres database.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresTableConstraintLoader extends JDBCTableConstraintLoader {
+
+	public IngresTableConstraintLoader() {
+		super(null);
+	}
+
+	public IngresTableConstraintLoader(ICatalogObject catalogObject) {
+		super(catalogObject);
+	}
+
+	public IngresTableConstraintLoader(ICatalogObject catalogObject,
+			IConnectionFilterProvider connectionFilterProvider) {
+		super(catalogObject, connectionFilterProvider);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.datatools.connectivity.sqm.loader.JDBCTableConstraintLoader
+	 * #createUniqueConstraintResultSet()
+	 */
+	protected ResultSet createUniqueConstraintResultSet() throws SQLException {
+		try {
+			// it's expected that catalog object is an Table
+			Connection con = getCatalogObject().getConnection();
+			PreparedStatement stmt = con
+					.prepareStatement("SELECT DISTINCT trim(c.constraint_name) AS PK_NAME, trim(k.column_name) AS PKCOLUMN_NAME, k.key_position AS KEY_SEQ FROM iiconstraints c, iikeys k WHERE k.constraint_name = c.constraint_name AND c.schema_name = ? AND c.table_name = ? AND c.constraint_type = 'U' AND k.schema_name = ? AND k.table_name = ?");
+			String schemaName = getTable().getSchema().getName();
+			String tableName = getTable().getName();
+
+			stmt.setString(1, schemaName);
+			stmt.setString(2, tableName);
+			stmt.setString(3, schemaName);
+			stmt.setString(4, tableName);
+
+			// Can not close the Statement here because the ResultSet will be
+			// closed too. Statement will be closed in closeResultSet(). 
+			return stmt.executeQuery();
+		} catch (RuntimeException e) {
+			SQLException error = new SQLException(
+					"Error while retrieving catalog information (unique constraints)");
+			error.initCause(e);
+			throw error;
+		}
+	}
+
+	/**
+	 * Loads all check constraints for the table that is associated with this
+	 * loaders catalog object.
+	 * 
+	 * @param containmentList
+	 *            result list
+	 * @param existingCCs
+	 *            existing check constraints
+	 * @throws SQLException
+	 */
+	public void loadCheckConstraints(List containmentList,
+			Collection existingCCs) throws SQLException {
+		PreparedStatement stmt = getCatalogObject()
+				.getConnection()
+				.prepareStatement(
+						"SELECT DISTINCT	trim(c.constraint_name) AS CC_NAME FROM	iiconstraints c WHERE c.schema_name = ? AND	c.table_name = ? AND c.constraint_type = 'C'");
+		String schemaName = getTable().getSchema().getName();
+		String tableName = getTable().getName();
+
+		stmt.setString(1, schemaName);
+		stmt.setString(2, tableName);
+
+		ResultSet rst = stmt.executeQuery();
+
+		while (rst.next()) {
+			String ccName = rst.getString("CC_NAME");
+			CheckConstraint cc = (CheckConstraint) getAndRemoveSQLObject(
+					existingCCs, ccName);
+			if (cc == null) {
+				cc = new IngresCatalogCheckConstraint();
+				cc.setName(ccName);
+			}
+			containmentList.add(cc);
+		}
+
+		LoaderHelper.close(rst);
+		LoaderHelper.close(stmt);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.datatools.connectivity.sqm.loader.JDBCTableConstraintLoader
+	 * #closeResultSet(java.sql.ResultSet)
+	 */
+	protected void closeResultSet(ResultSet rs) {
+		LoaderHelper.close(rs);
+		// try to close the associated statement (still open from
+		// createUniqueConstraintResultSet)
+		try {
+			LoaderHelper.close(rs.getStatement());
+		} catch (SQLException e) {
+			// ignored
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresTableLoader.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresTableLoader.java
new file mode 100644
index 0000000..87656b4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresTableLoader.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.loaders;
+
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableLoader;
+import org.eclipse.datatools.enablement.ingres.internal.catalog.IngresCatalogTable;
+import org.eclipse.datatools.enablement.ingres.internal.catalog.IngresCatalogView;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+
+/**
+ * Class for loading a list of tables from an Ingres database.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresTableLoader extends JDBCTableLoader {
+
+	/**
+	 * Constructor registers new factories for tables and views.
+	 */
+	public IngresTableLoader() {
+		super(null);
+		registerTableFactory(TYPE_TABLE, new IngresTableFactory());
+		registerTableFactory(TYPE_VIEW, new IngresViewFactory());
+	}
+
+	public static class IngresTableFactory extends TableFactory {
+
+		protected Table newTable() {
+			return new IngresCatalogTable();
+		}
+
+	}
+
+	public static class IngresViewFactory extends ViewFactory {
+
+		protected Table newTable() {
+			return new IngresCatalogView();
+		}
+
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresTableTriggerLoader.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresTableTriggerLoader.java
new file mode 100644
index 0000000..8ddbcc1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresTableTriggerLoader.java
@@ -0,0 +1,131 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.loaders;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.loader.IConnectionFilterProvider;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCBaseLoader;
+import org.eclipse.datatools.enablement.ingres.internal.catalog.IngresCatalogTrigger;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+
+/**
+ * Class for loading a list of trigger from an Ingres database.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresTableTriggerLoader extends JDBCBaseLoader {
+
+	private static final String TRIGGER_QUERY = "SELECT DISTINCT rule_name, rule_owner, system_use, table_name FROM iirules WHERE table_name = ? AND rule_owner = ? AND system_use='U' ORDER BY rule_name"; //$NON-NLS-1$
+
+	private static final String TRIGGER_NAME = "rule_name"; //$NON-NLS-1$
+
+	public IngresTableTriggerLoader() {
+		this(null);
+	}
+
+	public IngresTableTriggerLoader(ICatalogObject catalogObject) {
+		this(catalogObject, null);
+	}
+
+	public IngresTableTriggerLoader(ICatalogObject catalogObject,
+			IConnectionFilterProvider connectionFilterProvider) {
+		super(catalogObject, connectionFilterProvider);
+	}
+
+	/**
+	 * Loads all triggers for the table that is associated with this loaders
+	 * catalog object.
+	 * 
+	 * @param containmentList
+	 *            result
+	 * @param existingTriggers
+	 *            existing triggers
+	 * @throws SQLException
+	 */
+	public void loadTriggers(List containmentList, List existingTriggers)
+			throws SQLException {
+		ResultSet rs = null;
+		PreparedStatement stmt = null;
+		try {
+			stmt = getCatalogObject().getConnection().prepareStatement(
+					TRIGGER_QUERY);
+			rs = createResultSet(stmt);
+
+			String triggerName = null;
+			while (rs.next()) {
+				triggerName = rs.getString(TRIGGER_NAME).trim();
+
+				Trigger trigger = (Trigger) getAndRemoveSQLObject(
+						existingTriggers, triggerName);
+
+				if (trigger == null) {
+					trigger = processRow(rs);
+					if (trigger != null) {
+						containmentList.add(trigger);
+					}
+				} else {
+					containmentList.add(trigger);
+					if (trigger instanceof ICatalogObject) {
+						((ICatalogObject) trigger).refresh();
+					}
+				}
+			}
+		} finally {
+			LoaderHelper.close(rs);
+			LoaderHelper.close(stmt);
+		}
+	}
+
+	public void clearTriggers(List existingTriggers) {
+		existingTriggers.clear();
+	}
+
+	protected ResultSet createResultSet(PreparedStatement stmt)
+			throws SQLException {
+		try {
+			// it's expected that catalog object is an Table
+			String table = ((Table) getCatalogObject()).getName();
+			String schema = ((Table) getCatalogObject()).getSchema().getName();
+			stmt.setString(1, table);
+			stmt.setString(2, schema);
+			return stmt.executeQuery();
+		} catch (RuntimeException e) {
+			SQLException error = new SQLException(
+					"Error while retrieving catalog information (sequences)");
+			error.initCause(e);
+			throw error;
+		}
+	}
+
+	protected Trigger processRow(ResultSet rs) throws SQLException {
+		Trigger trigger = createTrigger();
+		initialize(trigger, rs);
+		return trigger;
+	}
+
+	protected void initialize(Trigger trigger, ResultSet rs)
+			throws SQLException {
+		String triggerName = rs.getString(TRIGGER_NAME).trim();
+		trigger.setName(triggerName);
+		trigger.setSchema(((Table) getCatalogObject()).getSchema());
+	}
+
+	protected Trigger createTrigger() {
+		return new IngresCatalogTrigger();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresTriggerSourceLoader.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresTriggerSourceLoader.java
new file mode 100644
index 0000000..4069b2d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresTriggerSourceLoader.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.loaders;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.loader.IConnectionFilterProvider;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCBaseLoader;
+import org.eclipse.datatools.modelbase.sql.routines.Source;
+
+/**
+ * Class for loading the source of a trigger from an Ingres database.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresTriggerSourceLoader extends JDBCBaseLoader {
+
+	private static final String TRIGGER_SOURCE_QUERY = "SELECT DISTINCT rule_name, rule_owner, system_use, table_name, text_sequence, text_segment FROM iirules WHERE table_name = ? AND rule_owner = ? AND rule_name = ? ORDER BY text_sequence";
+
+	private static final String TRIGGER_SOURCE_SEGMENT = "text_segment";
+
+	public IngresTriggerSourceLoader() {
+		this(null);
+	}
+
+	public IngresTriggerSourceLoader(ICatalogObject catalogObject) {
+		this(catalogObject, null);
+	}
+
+	public IngresTriggerSourceLoader(ICatalogObject catalogObject,
+			IConnectionFilterProvider connectionFilterProvider) {
+		super(catalogObject, connectionFilterProvider);
+	}
+
+	/**
+	 * Loads the source for a rule and stores the result in the
+	 * given source object.
+	 * 
+	 * @param tableName table
+	 * @param ruleOwner schema
+	 * @param ruleName rule
+	 * @param source result
+	 */
+	public void loadSource(String tableName, String ruleOwner, String ruleName,
+			Source source) {
+		ResultSet rs = null;
+		PreparedStatement stmt = null;
+		try {
+			stmt = getCatalogObject().getConnection().prepareStatement(
+					TRIGGER_SOURCE_QUERY);
+			stmt.setString(1, tableName);
+			stmt.setString(2, ruleOwner);
+			stmt.setString(3, ruleName);
+			rs = stmt.executeQuery();
+
+			StringBuffer sourceBuf = new StringBuffer();
+			while (rs.next()) {
+				sourceBuf.append(rs.getString(TRIGGER_SOURCE_SEGMENT));
+			}
+
+			source.setBody(sourceBuf.toString());
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			LoaderHelper.close(rs);
+			LoaderHelper.close(stmt);
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresViewSourceLoader.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresViewSourceLoader.java
new file mode 100644
index 0000000..f01b563
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/IngresViewSourceLoader.java
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.loaders;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.loader.IConnectionFilterProvider;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCBaseLoader;
+import org.eclipse.datatools.modelbase.sql.routines.Source;
+
+/**
+ * Class for loading the source of a view from an Ingres database.
+ * 
+ * @author enrico.schenk@ingres.com
+ */
+public class IngresViewSourceLoader extends JDBCBaseLoader {
+
+	private static final String VIEW_SOURCE_QUERY = "SELECT text_segment FROM iiviews WHERE table_name=? AND table_owner=? ORDER BY text_sequence";
+
+	private static final String VIEW_SOURCE_SEGMENT = "text_segment";
+
+	public IngresViewSourceLoader() {
+		this(null);
+	}
+
+	public IngresViewSourceLoader(ICatalogObject catalogObject) {
+		this(catalogObject, null);
+	}
+
+	public IngresViewSourceLoader(ICatalogObject catalogObject,
+			IConnectionFilterProvider connectionFilterProvider) {
+		super(catalogObject, connectionFilterProvider);
+	}
+
+	/**
+	 * Loads the source for a view and stores the result in the
+	 * given source object.
+	 * 
+	 * @param viewOwner schema
+	 * @param viewName view
+	 * @param source result object
+	 */
+	public void loadSource(String viewOwner, String viewName, Source source) {
+		ResultSet rs = null;
+		PreparedStatement stmt = null;
+		try {
+			stmt = getCatalogObject().getConnection().prepareStatement(
+					VIEW_SOURCE_QUERY);
+			stmt.setString(1, viewName);
+			stmt.setString(2, viewOwner);
+			rs = stmt.executeQuery();
+
+			StringBuffer sourceBuf = new StringBuffer();
+			while (rs.next()) {
+				sourceBuf.append(rs.getString(VIEW_SOURCE_SEGMENT));
+			}
+
+			source.setBody(sourceBuf.toString());
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			LoaderHelper.close(rs);
+			LoaderHelper.close(stmt);
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/LoaderHelper.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/LoaderHelper.java
new file mode 100644
index 0000000..b025009
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/internal/loaders/LoaderHelper.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ingres Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.ingres.internal.loaders;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+public class LoaderHelper {
+
+	/**
+	 * Close the statement and ignores thrown SQLExceptions.
+	 * 
+	 * @param stmt
+	 *            Statement
+	 */
+	public static void close(Statement stmt) {
+		try {
+			if (stmt != null) {
+				stmt.close();
+			}
+		} catch (SQLException e) {
+			// ignored
+		}
+	}
+
+	/**
+	 * Close the result set and ignores thrown SQLExceptions.
+	 * 
+	 * @param rst
+	 *            ResultSet
+	 */
+	public static void close(ResultSet rs) {
+		try {
+			if (rs != null) {
+				rs.close();
+			}
+		} catch (SQLException e) {
+			// ignored
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/IngresDBEvent.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/IngresDBEvent.java
new file mode 100644
index 0000000..a186a46
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/IngresDBEvent.java
@@ -0,0 +1,69 @@
+/**
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *   Ingres Corporation - initial API and implementation
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ingres.models.ingressqlmodel;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Ingres DB Event</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresDBEvent#getSchema <em>Schema</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage#getIngresDBEvent()
+ * @model
+ * @generated
+ */
+public interface IngresDBEvent extends SQLObject {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String copyright = "Copyright (c) 2008 Ingres Corporation and others.\r\nAll rights reserved. This program and the accompanying materials\r\nare made available under the terms of the Eclipse Public License v1.0\r\nwhich accompanies this distribution, and is available at\r\nhttp://www.eclipse.org/legal/epl-v10.html\r\n\r\nContributors:\r\n  Ingres Corporation - initial API and implementation";
+
+	/**
+	 * Returns the value of the '<em><b>Schema</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSchema#getDBEvents <em>DB Events</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Schema</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Schema</em>' reference.
+	 * @see #setSchema(IngresSchema)
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage#getIngresDBEvent_Schema()
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSchema#getDBEvents
+	 * @model opposite="dBEvents" required="true"
+	 * @generated
+	 */
+	IngresSchema getSchema();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresDBEvent#getSchema <em>Schema</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Schema</em>' reference.
+	 * @see #getSchema()
+	 * @generated
+	 */
+	void setSchema(IngresSchema value);
+
+} // IngresDBEvent
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/IngresIdentitySpecifier.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/IngresIdentitySpecifier.java
new file mode 100644
index 0000000..d14329a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/IngresIdentitySpecifier.java
@@ -0,0 +1,258 @@
+/**
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *   Ingres Corporation - initial API and implementation
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ingres.models.ingressqlmodel;
+
+import java.math.BigInteger;
+
+import org.eclipse.datatools.modelbase.sql.schema.IdentitySpecifier;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Ingres Identity Specifier</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getDataType <em>Data Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getSeqLength <em>Seq Length</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getSeqPrecision <em>Seq Precision</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getMaximumOption <em>Maximum Option</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getMinimumOption <em>Minimum Option</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getCacheSize <em>Cache Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getCacheOption <em>Cache Option</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getOrderOption <em>Order Option</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage#getIngresIdentitySpecifier()
+ * @model
+ * @generated
+ */
+public interface IngresIdentitySpecifier extends IdentitySpecifier {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String copyright = "Copyright (c) 2008 Ingres Corporation and others.\r\nAll rights reserved. This program and the accompanying materials\r\nare made available under the terms of the Eclipse Public License v1.0\r\nwhich accompanies this distribution, and is available at\r\nhttp://www.eclipse.org/legal/epl-v10.html\r\n\r\nContributors:\r\n  Ingres Corporation - initial API and implementation";
+
+	/**
+	 * Returns the value of the '<em><b>Data Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Data Type</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Data Type</em>' attribute.
+	 * @see #setDataType(String)
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage#getIngresIdentitySpecifier_DataType()
+	 * @model
+	 * @generated
+	 */
+	String getDataType();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getDataType <em>Data Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Data Type</em>' attribute.
+	 * @see #getDataType()
+	 * @generated
+	 */
+	void setDataType(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Seq Length</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Seq Length</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Seq Length</em>' attribute.
+	 * @see #setSeqLength(BigInteger)
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage#getIngresIdentitySpecifier_SeqLength()
+	 * @model
+	 * @generated
+	 */
+	BigInteger getSeqLength();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getSeqLength <em>Seq Length</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Seq Length</em>' attribute.
+	 * @see #getSeqLength()
+	 * @generated
+	 */
+	void setSeqLength(BigInteger value);
+
+	/**
+	 * Returns the value of the '<em><b>Seq Precision</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Seq Precision</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Seq Precision</em>' attribute.
+	 * @see #setSeqPrecision(BigInteger)
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage#getIngresIdentitySpecifier_SeqPrecision()
+	 * @model
+	 * @generated
+	 */
+	BigInteger getSeqPrecision();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getSeqPrecision <em>Seq Precision</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Seq Precision</em>' attribute.
+	 * @see #getSeqPrecision()
+	 * @generated
+	 */
+	void setSeqPrecision(BigInteger value);
+
+	/**
+	 * Returns the value of the '<em><b>Maximum Option</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Maximum Option</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Maximum Option</em>' attribute.
+	 * @see #setMaximumOption(Boolean)
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage#getIngresIdentitySpecifier_MaximumOption()
+	 * @model
+	 * @generated
+	 */
+	Boolean getMaximumOption();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getMaximumOption <em>Maximum Option</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Maximum Option</em>' attribute.
+	 * @see #getMaximumOption()
+	 * @generated
+	 */
+	void setMaximumOption(Boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Minimum Option</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Minimum Option</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Minimum Option</em>' attribute.
+	 * @see #setMinimumOption(Boolean)
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage#getIngresIdentitySpecifier_MinimumOption()
+	 * @model
+	 * @generated
+	 */
+	Boolean getMinimumOption();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getMinimumOption <em>Minimum Option</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Minimum Option</em>' attribute.
+	 * @see #getMinimumOption()
+	 * @generated
+	 */
+	void setMinimumOption(Boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Cache Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Cache Size</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Cache Size</em>' attribute.
+	 * @see #setCacheSize(BigInteger)
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage#getIngresIdentitySpecifier_CacheSize()
+	 * @model
+	 * @generated
+	 */
+	BigInteger getCacheSize();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getCacheSize <em>Cache Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Cache Size</em>' attribute.
+	 * @see #getCacheSize()
+	 * @generated
+	 */
+	void setCacheSize(BigInteger value);
+
+	/**
+	 * Returns the value of the '<em><b>Cache Option</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Cache Option</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Cache Option</em>' attribute.
+	 * @see #setCacheOption(Boolean)
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage#getIngresIdentitySpecifier_CacheOption()
+	 * @model
+	 * @generated
+	 */
+	Boolean getCacheOption();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getCacheOption <em>Cache Option</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Cache Option</em>' attribute.
+	 * @see #getCacheOption()
+	 * @generated
+	 */
+	void setCacheOption(Boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Order Option</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Order Option</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Order Option</em>' attribute.
+	 * @see #setOrderOption(Boolean)
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage#getIngresIdentitySpecifier_OrderOption()
+	 * @model
+	 * @generated
+	 */
+	Boolean getOrderOption();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getOrderOption <em>Order Option</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Order Option</em>' attribute.
+	 * @see #getOrderOption()
+	 * @generated
+	 */
+	void setOrderOption(Boolean value);
+
+} // IngresIdentitySpecifier
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/IngresSchema.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/IngresSchema.java
new file mode 100644
index 0000000..6b03563
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/IngresSchema.java
@@ -0,0 +1,80 @@
+/**
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *   Ingres Corporation - initial API and implementation
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ingres.models.ingressqlmodel;
+
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Ingres Schema</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSchema#getDBEvents <em>DB Events</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSchema#getSynonyms <em>Synonyms</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage#getIngresSchema()
+ * @model
+ * @generated
+ */
+public interface IngresSchema extends Schema {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String copyright = "Copyright (c) 2008 Ingres Corporation and others.\r\nAll rights reserved. This program and the accompanying materials\r\nare made available under the terms of the Eclipse Public License v1.0\r\nwhich accompanies this distribution, and is available at\r\nhttp://www.eclipse.org/legal/epl-v10.html\r\n\r\nContributors:\r\n  Ingres Corporation - initial API and implementation";
+
+	/**
+	 * Returns the value of the '<em><b>DB Events</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresDBEvent}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresDBEvent#getSchema <em>Schema</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>DB Events</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>DB Events</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage#getIngresSchema_DBEvents()
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresDBEvent#getSchema
+	 * @model type="org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresDBEvent" opposite="schema"
+	 * @generated
+	 */
+	EList getDBEvents();
+
+	/**
+	 * Returns the value of the '<em><b>Synonyms</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSynonym}.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSynonym#getSchema <em>Schema</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Synonyms</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Synonyms</em>' reference list.
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage#getIngresSchema_Synonyms()
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSynonym#getSchema
+	 * @model type="org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSynonym" opposite="schema"
+	 * @generated
+	 */
+	EList getSynonyms();
+
+} // IngresSchema
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/IngresSynonym.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/IngresSynonym.java
new file mode 100644
index 0000000..6069204
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/IngresSynonym.java
@@ -0,0 +1,96 @@
+/**
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *   Ingres Corporation - initial API and implementation
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ingres.models.ingressqlmodel;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Ingres Synonym</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSynonym#getSchema <em>Schema</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSynonym#getTableName <em>Table Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage#getIngresSynonym()
+ * @model
+ * @generated
+ */
+public interface IngresSynonym extends SQLObject {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String copyright = "Copyright (c) 2008 Ingres Corporation and others.\r\nAll rights reserved. This program and the accompanying materials\r\nare made available under the terms of the Eclipse Public License v1.0\r\nwhich accompanies this distribution, and is available at\r\nhttp://www.eclipse.org/legal/epl-v10.html\r\n\r\nContributors:\r\n  Ingres Corporation - initial API and implementation";
+
+	/**
+	 * Returns the value of the '<em><b>Schema</b></em>' reference.
+	 * It is bidirectional and its opposite is '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSchema#getSynonyms <em>Synonyms</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Schema</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Schema</em>' reference.
+	 * @see #setSchema(IngresSchema)
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage#getIngresSynonym_Schema()
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSchema#getSynonyms
+	 * @model opposite="synonyms" required="true"
+	 * @generated
+	 */
+	IngresSchema getSchema();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSynonym#getSchema <em>Schema</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Schema</em>' reference.
+	 * @see #getSchema()
+	 * @generated
+	 */
+	void setSchema(IngresSchema value);
+
+	/**
+	 * Returns the value of the '<em><b>Table Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Table Name</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Table Name</em>' attribute.
+	 * @see #setTableName(String)
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage#getIngresSynonym_TableName()
+	 * @model
+	 * @generated
+	 */
+	String getTableName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSynonym#getTableName <em>Table Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Table Name</em>' attribute.
+	 * @see #getTableName()
+	 * @generated
+	 */
+	void setTableName(String value);
+
+} // IngresSynonym
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/IngresTrigger.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/IngresTrigger.java
new file mode 100644
index 0000000..2eaf17a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/IngresTrigger.java
@@ -0,0 +1,69 @@
+/**
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *   Ingres Corporation - initial API and implementation
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ingres.models.ingressqlmodel;
+
+import org.eclipse.datatools.modelbase.sql.routines.Source;
+
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Ingres Trigger</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresTrigger#getSource <em>Source</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage#getIngresTrigger()
+ * @model
+ * @generated
+ */
+public interface IngresTrigger extends Trigger {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String copyright = "Copyright (c) 2008 Ingres Corporation and others.\r\nAll rights reserved. This program and the accompanying materials\r\nare made available under the terms of the Eclipse Public License v1.0\r\nwhich accompanies this distribution, and is available at\r\nhttp://www.eclipse.org/legal/epl-v10.html\r\n\r\nContributors:\r\n  Ingres Corporation - initial API and implementation";
+
+	/**
+	 * Returns the value of the '<em><b>Source</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Source</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Source</em>' reference.
+	 * @see #setSource(Source)
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage#getIngresTrigger_Source()
+	 * @model
+	 * @generated
+	 */
+	Source getSource();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresTrigger#getSource <em>Source</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Source</em>' reference.
+	 * @see #getSource()
+	 * @generated
+	 */
+	void setSource(Source value);
+
+} // IngresTrigger
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/IngresViewTable.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/IngresViewTable.java
new file mode 100644
index 0000000..d963069
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/IngresViewTable.java
@@ -0,0 +1,69 @@
+/**
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *   Ingres Corporation - initial API and implementation
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ingres.models.ingressqlmodel;
+
+import org.eclipse.datatools.modelbase.sql.routines.Source;
+
+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Ingres View Table</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresViewTable#getSource <em>Source</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage#getIngresViewTable()
+ * @model
+ * @generated
+ */
+public interface IngresViewTable extends ViewTable {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String copyright = "Copyright (c) 2008 Ingres Corporation and others.\r\nAll rights reserved. This program and the accompanying materials\r\nare made available under the terms of the Eclipse Public License v1.0\r\nwhich accompanies this distribution, and is available at\r\nhttp://www.eclipse.org/legal/epl-v10.html\r\n\r\nContributors:\r\n  Ingres Corporation - initial API and implementation";
+
+	/**
+	 * Returns the value of the '<em><b>Source</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Source</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Source</em>' reference.
+	 * @see #setSource(Source)
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage#getIngresViewTable_Source()
+	 * @model
+	 * @generated
+	 */
+	Source getSource();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresViewTable#getSource <em>Source</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Source</em>' reference.
+	 * @see #getSource()
+	 * @generated
+	 */
+	void setSource(Source value);
+
+} // IngresViewTable
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/IngressqlmodelFactory.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/IngressqlmodelFactory.java
new file mode 100644
index 0000000..9522d84
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/IngressqlmodelFactory.java
@@ -0,0 +1,104 @@
+/**
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *   Ingres Corporation - initial API and implementation
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ingres.models.ingressqlmodel;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage
+ * @generated
+ */
+public interface IngressqlmodelFactory extends EFactory {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String copyright = "Copyright (c) 2008 Ingres Corporation and others.\r\nAll rights reserved. This program and the accompanying materials\r\nare made available under the terms of the Eclipse Public License v1.0\r\nwhich accompanies this distribution, and is available at\r\nhttp://www.eclipse.org/legal/epl-v10.html\r\n\r\nContributors:\r\n  Ingres Corporation - initial API and implementation";
+
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	IngressqlmodelFactory eINSTANCE = org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngressqlmodelFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Ingres Synonym</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Ingres Synonym</em>'.
+	 * @generated
+	 */
+	IngresSynonym createIngresSynonym();
+
+	/**
+	 * Returns a new object of class '<em>Ingres DB Event</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Ingres DB Event</em>'.
+	 * @generated
+	 */
+	IngresDBEvent createIngresDBEvent();
+
+	/**
+	 * Returns a new object of class '<em>Ingres Schema</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Ingres Schema</em>'.
+	 * @generated
+	 */
+	IngresSchema createIngresSchema();
+
+	/**
+	 * Returns a new object of class '<em>Ingres View Table</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Ingres View Table</em>'.
+	 * @generated
+	 */
+	IngresViewTable createIngresViewTable();
+
+	/**
+	 * Returns a new object of class '<em>Ingres Trigger</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Ingres Trigger</em>'.
+	 * @generated
+	 */
+	IngresTrigger createIngresTrigger();
+
+	/**
+	 * Returns a new object of class '<em>Ingres Identity Specifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Ingres Identity Specifier</em>'.
+	 * @generated
+	 */
+	IngresIdentitySpecifier createIngresIdentitySpecifier();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	IngressqlmodelPackage getIngressqlmodelPackage();
+
+} //IngressqlmodelFactory
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/IngressqlmodelPackage.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/IngressqlmodelPackage.java
new file mode 100644
index 0000000..29123d5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/IngressqlmodelPackage.java
@@ -0,0 +1,1532 @@
+/**
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *   Ingres Corporation - initial API and implementation
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ingres.models.ingressqlmodel;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface IngressqlmodelPackage extends EPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String copyright = "Copyright (c) 2008 Ingres Corporation and others.\r\nAll rights reserved. This program and the accompanying materials\r\nare made available under the terms of the Eclipse Public License v1.0\r\nwhich accompanies this distribution, and is available at\r\nhttp://www.eclipse.org/legal/epl-v10.html\r\n\r\nContributors:\r\n  Ingres Corporation - initial API and implementation";
+
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "ingressqlmodel";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///org/eclipse/datatools/enablement/ingres/ingressqlmodel.ecore";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "IngresModel";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	IngressqlmodelPackage eINSTANCE = org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngressqlmodelPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresSynonymImpl <em>Ingres Synonym</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresSynonymImpl
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngressqlmodelPackageImpl#getIngresSynonym()
+	 * @generated
+	 */
+	int INGRES_SYNONYM = 0;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SYNONYM__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SYNONYM__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SYNONYM__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SYNONYM__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SYNONYM__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SYNONYM__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SYNONYM__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SYNONYM__SCHEMA = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Table Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SYNONYM__TABLE_NAME = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Ingres Synonym</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SYNONYM_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresDBEventImpl <em>Ingres DB Event</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresDBEventImpl
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngressqlmodelPackageImpl#getIngresDBEvent()
+	 * @generated
+	 */
+	int INGRES_DB_EVENT = 1;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_DB_EVENT__EANNOTATIONS = SQLSchemaPackage.SQL_OBJECT__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_DB_EVENT__NAME = SQLSchemaPackage.SQL_OBJECT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_DB_EVENT__DEPENDENCIES = SQLSchemaPackage.SQL_OBJECT__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_DB_EVENT__DESCRIPTION = SQLSchemaPackage.SQL_OBJECT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_DB_EVENT__LABEL = SQLSchemaPackage.SQL_OBJECT__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_DB_EVENT__COMMENTS = SQLSchemaPackage.SQL_OBJECT__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_DB_EVENT__PRIVILEGES = SQLSchemaPackage.SQL_OBJECT__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_DB_EVENT__SCHEMA = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Ingres DB Event</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_DB_EVENT_FEATURE_COUNT = SQLSchemaPackage.SQL_OBJECT_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresSchemaImpl <em>Ingres Schema</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresSchemaImpl
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngressqlmodelPackageImpl#getIngresSchema()
+	 * @generated
+	 */
+	int INGRES_SCHEMA = 2;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SCHEMA__EANNOTATIONS = SQLSchemaPackage.SCHEMA__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SCHEMA__NAME = SQLSchemaPackage.SCHEMA__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SCHEMA__DEPENDENCIES = SQLSchemaPackage.SCHEMA__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SCHEMA__DESCRIPTION = SQLSchemaPackage.SCHEMA__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SCHEMA__LABEL = SQLSchemaPackage.SCHEMA__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SCHEMA__COMMENTS = SQLSchemaPackage.SCHEMA__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SCHEMA__PRIVILEGES = SQLSchemaPackage.SCHEMA__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Triggers</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SCHEMA__TRIGGERS = SQLSchemaPackage.SCHEMA__TRIGGERS;
+
+	/**
+	 * The feature id for the '<em><b>Indices</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SCHEMA__INDICES = SQLSchemaPackage.SCHEMA__INDICES;
+
+	/**
+	 * The feature id for the '<em><b>Tables</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SCHEMA__TABLES = SQLSchemaPackage.SCHEMA__TABLES;
+
+	/**
+	 * The feature id for the '<em><b>Sequences</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SCHEMA__SEQUENCES = SQLSchemaPackage.SCHEMA__SEQUENCES;
+
+	/**
+	 * The feature id for the '<em><b>Database</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SCHEMA__DATABASE = SQLSchemaPackage.SCHEMA__DATABASE;
+
+	/**
+	 * The feature id for the '<em><b>Catalog</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SCHEMA__CATALOG = SQLSchemaPackage.SCHEMA__CATALOG;
+
+	/**
+	 * The feature id for the '<em><b>Assertions</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SCHEMA__ASSERTIONS = SQLSchemaPackage.SCHEMA__ASSERTIONS;
+
+	/**
+	 * The feature id for the '<em><b>User Defined Types</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SCHEMA__USER_DEFINED_TYPES = SQLSchemaPackage.SCHEMA__USER_DEFINED_TYPES;
+
+	/**
+	 * The feature id for the '<em><b>Char Sets</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SCHEMA__CHAR_SETS = SQLSchemaPackage.SCHEMA__CHAR_SETS;
+
+	/**
+	 * The feature id for the '<em><b>Routines</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SCHEMA__ROUTINES = SQLSchemaPackage.SCHEMA__ROUTINES;
+
+	/**
+	 * The feature id for the '<em><b>Owner</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SCHEMA__OWNER = SQLSchemaPackage.SCHEMA__OWNER;
+
+	/**
+	 * The feature id for the '<em><b>DB Events</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SCHEMA__DB_EVENTS = SQLSchemaPackage.SCHEMA_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Synonyms</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SCHEMA__SYNONYMS = SQLSchemaPackage.SCHEMA_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Ingres Schema</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_SCHEMA_FEATURE_COUNT = SQLSchemaPackage.SCHEMA_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresViewTableImpl <em>Ingres View Table</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresViewTableImpl
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngressqlmodelPackageImpl#getIngresViewTable()
+	 * @generated
+	 */
+	int INGRES_VIEW_TABLE = 3;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_VIEW_TABLE__EANNOTATIONS = SQLTablesPackage.VIEW_TABLE__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_VIEW_TABLE__NAME = SQLTablesPackage.VIEW_TABLE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_VIEW_TABLE__DEPENDENCIES = SQLTablesPackage.VIEW_TABLE__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_VIEW_TABLE__DESCRIPTION = SQLTablesPackage.VIEW_TABLE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_VIEW_TABLE__LABEL = SQLTablesPackage.VIEW_TABLE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_VIEW_TABLE__COMMENTS = SQLTablesPackage.VIEW_TABLE__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_VIEW_TABLE__PRIVILEGES = SQLTablesPackage.VIEW_TABLE__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Columns</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_VIEW_TABLE__COLUMNS = SQLTablesPackage.VIEW_TABLE__COLUMNS;
+
+	/**
+	 * The feature id for the '<em><b>Supertable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_VIEW_TABLE__SUPERTABLE = SQLTablesPackage.VIEW_TABLE__SUPERTABLE;
+
+	/**
+	 * The feature id for the '<em><b>Subtables</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_VIEW_TABLE__SUBTABLES = SQLTablesPackage.VIEW_TABLE__SUBTABLES;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_VIEW_TABLE__SCHEMA = SQLTablesPackage.VIEW_TABLE__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Udt</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_VIEW_TABLE__UDT = SQLTablesPackage.VIEW_TABLE__UDT;
+
+	/**
+	 * The feature id for the '<em><b>Triggers</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_VIEW_TABLE__TRIGGERS = SQLTablesPackage.VIEW_TABLE__TRIGGERS;
+
+	/**
+	 * The feature id for the '<em><b>Index</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_VIEW_TABLE__INDEX = SQLTablesPackage.VIEW_TABLE__INDEX;
+
+	/**
+	 * The feature id for the '<em><b>Self Ref Column Generation</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_VIEW_TABLE__SELF_REF_COLUMN_GENERATION = SQLTablesPackage.VIEW_TABLE__SELF_REF_COLUMN_GENERATION;
+
+	/**
+	 * The feature id for the '<em><b>Insertable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_VIEW_TABLE__INSERTABLE = SQLTablesPackage.VIEW_TABLE__INSERTABLE;
+
+	/**
+	 * The feature id for the '<em><b>Updatable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_VIEW_TABLE__UPDATABLE = SQLTablesPackage.VIEW_TABLE__UPDATABLE;
+
+	/**
+	 * The feature id for the '<em><b>Query Expression</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_VIEW_TABLE__QUERY_EXPRESSION = SQLTablesPackage.VIEW_TABLE__QUERY_EXPRESSION;
+
+	/**
+	 * The feature id for the '<em><b>Check Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_VIEW_TABLE__CHECK_TYPE = SQLTablesPackage.VIEW_TABLE__CHECK_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Source</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_VIEW_TABLE__SOURCE = SQLTablesPackage.VIEW_TABLE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Ingres View Table</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_VIEW_TABLE_FEATURE_COUNT = SQLTablesPackage.VIEW_TABLE_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresTriggerImpl <em>Ingres Trigger</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresTriggerImpl
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngressqlmodelPackageImpl#getIngresTrigger()
+	 * @generated
+	 */
+	int INGRES_TRIGGER = 4;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_TRIGGER__EANNOTATIONS = SQLTablesPackage.TRIGGER__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_TRIGGER__NAME = SQLTablesPackage.TRIGGER__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_TRIGGER__DEPENDENCIES = SQLTablesPackage.TRIGGER__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_TRIGGER__DESCRIPTION = SQLTablesPackage.TRIGGER__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_TRIGGER__LABEL = SQLTablesPackage.TRIGGER__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_TRIGGER__COMMENTS = SQLTablesPackage.TRIGGER__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_TRIGGER__PRIVILEGES = SQLTablesPackage.TRIGGER__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Schema</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_TRIGGER__SCHEMA = SQLTablesPackage.TRIGGER__SCHEMA;
+
+	/**
+	 * The feature id for the '<em><b>Subject Table</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_TRIGGER__SUBJECT_TABLE = SQLTablesPackage.TRIGGER__SUBJECT_TABLE;
+
+	/**
+	 * The feature id for the '<em><b>Action Statement</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_TRIGGER__ACTION_STATEMENT = SQLTablesPackage.TRIGGER__ACTION_STATEMENT;
+
+	/**
+	 * The feature id for the '<em><b>Trigger Column</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_TRIGGER__TRIGGER_COLUMN = SQLTablesPackage.TRIGGER__TRIGGER_COLUMN;
+
+	/**
+	 * The feature id for the '<em><b>Action Granularity</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_TRIGGER__ACTION_GRANULARITY = SQLTablesPackage.TRIGGER__ACTION_GRANULARITY;
+
+	/**
+	 * The feature id for the '<em><b>When</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_TRIGGER__WHEN = SQLTablesPackage.TRIGGER__WHEN;
+
+	/**
+	 * The feature id for the '<em><b>Time Stamp</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_TRIGGER__TIME_STAMP = SQLTablesPackage.TRIGGER__TIME_STAMP;
+
+	/**
+	 * The feature id for the '<em><b>Action Time</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_TRIGGER__ACTION_TIME = SQLTablesPackage.TRIGGER__ACTION_TIME;
+
+	/**
+	 * The feature id for the '<em><b>Update Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_TRIGGER__UPDATE_TYPE = SQLTablesPackage.TRIGGER__UPDATE_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Insert Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_TRIGGER__INSERT_TYPE = SQLTablesPackage.TRIGGER__INSERT_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Delete Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_TRIGGER__DELETE_TYPE = SQLTablesPackage.TRIGGER__DELETE_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Old Row</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_TRIGGER__OLD_ROW = SQLTablesPackage.TRIGGER__OLD_ROW;
+
+	/**
+	 * The feature id for the '<em><b>New Row</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_TRIGGER__NEW_ROW = SQLTablesPackage.TRIGGER__NEW_ROW;
+
+	/**
+	 * The feature id for the '<em><b>Old Table</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_TRIGGER__OLD_TABLE = SQLTablesPackage.TRIGGER__OLD_TABLE;
+
+	/**
+	 * The feature id for the '<em><b>New Table</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_TRIGGER__NEW_TABLE = SQLTablesPackage.TRIGGER__NEW_TABLE;
+
+	/**
+	 * The feature id for the '<em><b>Source</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_TRIGGER__SOURCE = SQLTablesPackage.TRIGGER_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Ingres Trigger</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_TRIGGER_FEATURE_COUNT = SQLTablesPackage.TRIGGER_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresIdentitySpecifierImpl <em>Ingres Identity Specifier</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresIdentitySpecifierImpl
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngressqlmodelPackageImpl#getIngresIdentitySpecifier()
+	 * @generated
+	 */
+	int INGRES_IDENTITY_SPECIFIER = 5;
+
+	/**
+	 * The feature id for the '<em><b>EAnnotations</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_IDENTITY_SPECIFIER__EANNOTATIONS = SQLSchemaPackage.IDENTITY_SPECIFIER__EANNOTATIONS;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_IDENTITY_SPECIFIER__NAME = SQLSchemaPackage.IDENTITY_SPECIFIER__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Dependencies</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_IDENTITY_SPECIFIER__DEPENDENCIES = SQLSchemaPackage.IDENTITY_SPECIFIER__DEPENDENCIES;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_IDENTITY_SPECIFIER__DESCRIPTION = SQLSchemaPackage.IDENTITY_SPECIFIER__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_IDENTITY_SPECIFIER__LABEL = SQLSchemaPackage.IDENTITY_SPECIFIER__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Comments</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_IDENTITY_SPECIFIER__COMMENTS = SQLSchemaPackage.IDENTITY_SPECIFIER__COMMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Privileges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_IDENTITY_SPECIFIER__PRIVILEGES = SQLSchemaPackage.IDENTITY_SPECIFIER__PRIVILEGES;
+
+	/**
+	 * The feature id for the '<em><b>Generation Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_IDENTITY_SPECIFIER__GENERATION_TYPE = SQLSchemaPackage.IDENTITY_SPECIFIER__GENERATION_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Start Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_IDENTITY_SPECIFIER__START_VALUE = SQLSchemaPackage.IDENTITY_SPECIFIER__START_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Increment</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_IDENTITY_SPECIFIER__INCREMENT = SQLSchemaPackage.IDENTITY_SPECIFIER__INCREMENT;
+
+	/**
+	 * The feature id for the '<em><b>Minimum</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_IDENTITY_SPECIFIER__MINIMUM = SQLSchemaPackage.IDENTITY_SPECIFIER__MINIMUM;
+
+	/**
+	 * The feature id for the '<em><b>Maximum</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_IDENTITY_SPECIFIER__MAXIMUM = SQLSchemaPackage.IDENTITY_SPECIFIER__MAXIMUM;
+
+	/**
+	 * The feature id for the '<em><b>Cycle Option</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_IDENTITY_SPECIFIER__CYCLE_OPTION = SQLSchemaPackage.IDENTITY_SPECIFIER__CYCLE_OPTION;
+
+	/**
+	 * The feature id for the '<em><b>Data Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_IDENTITY_SPECIFIER__DATA_TYPE = SQLSchemaPackage.IDENTITY_SPECIFIER_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Seq Length</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_IDENTITY_SPECIFIER__SEQ_LENGTH = SQLSchemaPackage.IDENTITY_SPECIFIER_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Seq Precision</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_IDENTITY_SPECIFIER__SEQ_PRECISION = SQLSchemaPackage.IDENTITY_SPECIFIER_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Maximum Option</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_IDENTITY_SPECIFIER__MAXIMUM_OPTION = SQLSchemaPackage.IDENTITY_SPECIFIER_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Minimum Option</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_IDENTITY_SPECIFIER__MINIMUM_OPTION = SQLSchemaPackage.IDENTITY_SPECIFIER_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Cache Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_IDENTITY_SPECIFIER__CACHE_SIZE = SQLSchemaPackage.IDENTITY_SPECIFIER_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Cache Option</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_IDENTITY_SPECIFIER__CACHE_OPTION = SQLSchemaPackage.IDENTITY_SPECIFIER_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Order Option</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_IDENTITY_SPECIFIER__ORDER_OPTION = SQLSchemaPackage.IDENTITY_SPECIFIER_FEATURE_COUNT + 7;
+
+	/**
+	 * The number of structural features of the '<em>Ingres Identity Specifier</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INGRES_IDENTITY_SPECIFIER_FEATURE_COUNT = SQLSchemaPackage.IDENTITY_SPECIFIER_FEATURE_COUNT + 8;
+
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSynonym <em>Ingres Synonym</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Ingres Synonym</em>'.
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSynonym
+	 * @generated
+	 */
+	EClass getIngresSynonym();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSynonym#getSchema <em>Schema</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Schema</em>'.
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSynonym#getSchema()
+	 * @see #getIngresSynonym()
+	 * @generated
+	 */
+	EReference getIngresSynonym_Schema();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSynonym#getTableName <em>Table Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Table Name</em>'.
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSynonym#getTableName()
+	 * @see #getIngresSynonym()
+	 * @generated
+	 */
+	EAttribute getIngresSynonym_TableName();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresDBEvent <em>Ingres DB Event</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Ingres DB Event</em>'.
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresDBEvent
+	 * @generated
+	 */
+	EClass getIngresDBEvent();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresDBEvent#getSchema <em>Schema</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Schema</em>'.
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresDBEvent#getSchema()
+	 * @see #getIngresDBEvent()
+	 * @generated
+	 */
+	EReference getIngresDBEvent_Schema();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSchema <em>Ingres Schema</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Ingres Schema</em>'.
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSchema
+	 * @generated
+	 */
+	EClass getIngresSchema();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSchema#getDBEvents <em>DB Events</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>DB Events</em>'.
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSchema#getDBEvents()
+	 * @see #getIngresSchema()
+	 * @generated
+	 */
+	EReference getIngresSchema_DBEvents();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSchema#getSynonyms <em>Synonyms</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Synonyms</em>'.
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSchema#getSynonyms()
+	 * @see #getIngresSchema()
+	 * @generated
+	 */
+	EReference getIngresSchema_Synonyms();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresViewTable <em>Ingres View Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Ingres View Table</em>'.
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresViewTable
+	 * @generated
+	 */
+	EClass getIngresViewTable();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresViewTable#getSource <em>Source</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Source</em>'.
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresViewTable#getSource()
+	 * @see #getIngresViewTable()
+	 * @generated
+	 */
+	EReference getIngresViewTable_Source();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresTrigger <em>Ingres Trigger</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Ingres Trigger</em>'.
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresTrigger
+	 * @generated
+	 */
+	EClass getIngresTrigger();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresTrigger#getSource <em>Source</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Source</em>'.
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresTrigger#getSource()
+	 * @see #getIngresTrigger()
+	 * @generated
+	 */
+	EReference getIngresTrigger_Source();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier <em>Ingres Identity Specifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Ingres Identity Specifier</em>'.
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier
+	 * @generated
+	 */
+	EClass getIngresIdentitySpecifier();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getDataType <em>Data Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Data Type</em>'.
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getDataType()
+	 * @see #getIngresIdentitySpecifier()
+	 * @generated
+	 */
+	EAttribute getIngresIdentitySpecifier_DataType();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getSeqLength <em>Seq Length</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Seq Length</em>'.
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getSeqLength()
+	 * @see #getIngresIdentitySpecifier()
+	 * @generated
+	 */
+	EAttribute getIngresIdentitySpecifier_SeqLength();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getSeqPrecision <em>Seq Precision</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Seq Precision</em>'.
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getSeqPrecision()
+	 * @see #getIngresIdentitySpecifier()
+	 * @generated
+	 */
+	EAttribute getIngresIdentitySpecifier_SeqPrecision();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getMaximumOption <em>Maximum Option</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Maximum Option</em>'.
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getMaximumOption()
+	 * @see #getIngresIdentitySpecifier()
+	 * @generated
+	 */
+	EAttribute getIngresIdentitySpecifier_MaximumOption();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getMinimumOption <em>Minimum Option</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Minimum Option</em>'.
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getMinimumOption()
+	 * @see #getIngresIdentitySpecifier()
+	 * @generated
+	 */
+	EAttribute getIngresIdentitySpecifier_MinimumOption();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getCacheSize <em>Cache Size</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Cache Size</em>'.
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getCacheSize()
+	 * @see #getIngresIdentitySpecifier()
+	 * @generated
+	 */
+	EAttribute getIngresIdentitySpecifier_CacheSize();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getCacheOption <em>Cache Option</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Cache Option</em>'.
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getCacheOption()
+	 * @see #getIngresIdentitySpecifier()
+	 * @generated
+	 */
+	EAttribute getIngresIdentitySpecifier_CacheOption();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getOrderOption <em>Order Option</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Order Option</em>'.
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier#getOrderOption()
+	 * @see #getIngresIdentitySpecifier()
+	 * @generated
+	 */
+	EAttribute getIngresIdentitySpecifier_OrderOption();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	IngressqlmodelFactory getIngressqlmodelFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresSynonymImpl <em>Ingres Synonym</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresSynonymImpl
+		 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngressqlmodelPackageImpl#getIngresSynonym()
+		 * @generated
+		 */
+		EClass INGRES_SYNONYM = eINSTANCE.getIngresSynonym();
+
+		/**
+		 * The meta object literal for the '<em><b>Schema</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference INGRES_SYNONYM__SCHEMA = eINSTANCE.getIngresSynonym_Schema();
+
+		/**
+		 * The meta object literal for the '<em><b>Table Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute INGRES_SYNONYM__TABLE_NAME = eINSTANCE.getIngresSynonym_TableName();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresDBEventImpl <em>Ingres DB Event</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresDBEventImpl
+		 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngressqlmodelPackageImpl#getIngresDBEvent()
+		 * @generated
+		 */
+		EClass INGRES_DB_EVENT = eINSTANCE.getIngresDBEvent();
+
+		/**
+		 * The meta object literal for the '<em><b>Schema</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference INGRES_DB_EVENT__SCHEMA = eINSTANCE.getIngresDBEvent_Schema();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresSchemaImpl <em>Ingres Schema</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresSchemaImpl
+		 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngressqlmodelPackageImpl#getIngresSchema()
+		 * @generated
+		 */
+		EClass INGRES_SCHEMA = eINSTANCE.getIngresSchema();
+
+		/**
+		 * The meta object literal for the '<em><b>DB Events</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference INGRES_SCHEMA__DB_EVENTS = eINSTANCE.getIngresSchema_DBEvents();
+
+		/**
+		 * The meta object literal for the '<em><b>Synonyms</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference INGRES_SCHEMA__SYNONYMS = eINSTANCE.getIngresSchema_Synonyms();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresViewTableImpl <em>Ingres View Table</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresViewTableImpl
+		 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngressqlmodelPackageImpl#getIngresViewTable()
+		 * @generated
+		 */
+		EClass INGRES_VIEW_TABLE = eINSTANCE.getIngresViewTable();
+
+		/**
+		 * The meta object literal for the '<em><b>Source</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference INGRES_VIEW_TABLE__SOURCE = eINSTANCE.getIngresViewTable_Source();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresTriggerImpl <em>Ingres Trigger</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresTriggerImpl
+		 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngressqlmodelPackageImpl#getIngresTrigger()
+		 * @generated
+		 */
+		EClass INGRES_TRIGGER = eINSTANCE.getIngresTrigger();
+
+		/**
+		 * The meta object literal for the '<em><b>Source</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference INGRES_TRIGGER__SOURCE = eINSTANCE.getIngresTrigger_Source();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresIdentitySpecifierImpl <em>Ingres Identity Specifier</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresIdentitySpecifierImpl
+		 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngressqlmodelPackageImpl#getIngresIdentitySpecifier()
+		 * @generated
+		 */
+		EClass INGRES_IDENTITY_SPECIFIER = eINSTANCE.getIngresIdentitySpecifier();
+
+		/**
+		 * The meta object literal for the '<em><b>Data Type</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute INGRES_IDENTITY_SPECIFIER__DATA_TYPE = eINSTANCE.getIngresIdentitySpecifier_DataType();
+
+		/**
+		 * The meta object literal for the '<em><b>Seq Length</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute INGRES_IDENTITY_SPECIFIER__SEQ_LENGTH = eINSTANCE.getIngresIdentitySpecifier_SeqLength();
+
+		/**
+		 * The meta object literal for the '<em><b>Seq Precision</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute INGRES_IDENTITY_SPECIFIER__SEQ_PRECISION = eINSTANCE.getIngresIdentitySpecifier_SeqPrecision();
+
+		/**
+		 * The meta object literal for the '<em><b>Maximum Option</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute INGRES_IDENTITY_SPECIFIER__MAXIMUM_OPTION = eINSTANCE.getIngresIdentitySpecifier_MaximumOption();
+
+		/**
+		 * The meta object literal for the '<em><b>Minimum Option</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute INGRES_IDENTITY_SPECIFIER__MINIMUM_OPTION = eINSTANCE.getIngresIdentitySpecifier_MinimumOption();
+
+		/**
+		 * The meta object literal for the '<em><b>Cache Size</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute INGRES_IDENTITY_SPECIFIER__CACHE_SIZE = eINSTANCE.getIngresIdentitySpecifier_CacheSize();
+
+		/**
+		 * The meta object literal for the '<em><b>Cache Option</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute INGRES_IDENTITY_SPECIFIER__CACHE_OPTION = eINSTANCE.getIngresIdentitySpecifier_CacheOption();
+
+		/**
+		 * The meta object literal for the '<em><b>Order Option</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute INGRES_IDENTITY_SPECIFIER__ORDER_OPTION = eINSTANCE.getIngresIdentitySpecifier_OrderOption();
+
+	}
+
+} //IngressqlmodelPackage
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/impl/IngresDBEventImpl.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/impl/IngresDBEventImpl.java
new file mode 100644
index 0000000..0127d94
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/impl/IngresDBEventImpl.java
@@ -0,0 +1,221 @@
+/**
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *   Ingres Corporation - initial API and implementation
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl;
+
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresDBEvent;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSchema;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Ingres DB Event</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresDBEventImpl#getSchema <em>Schema</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class IngresDBEventImpl extends SQLObjectImpl implements IngresDBEvent {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String copyright = "Copyright (c) 2008 Ingres Corporation and others.\r\nAll rights reserved. This program and the accompanying materials\r\nare made available under the terms of the Eclipse Public License v1.0\r\nwhich accompanies this distribution, and is available at\r\nhttp://www.eclipse.org/legal/epl-v10.html\r\n\r\nContributors:\r\n  Ingres Corporation - initial API and implementation";
+
+	/**
+	 * The cached value of the '{@link #getSchema() <em>Schema</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSchema()
+	 * @generated
+	 * @ordered
+	 */
+	protected IngresSchema schema;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IngresDBEventImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return IngressqlmodelPackage.Literals.INGRES_DB_EVENT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IngresSchema getSchema() {
+		if (schema != null && schema.eIsProxy()) {
+			InternalEObject oldSchema = (InternalEObject)schema;
+			schema = (IngresSchema)eResolveProxy(oldSchema);
+			if (schema != oldSchema) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, IngressqlmodelPackage.INGRES_DB_EVENT__SCHEMA, oldSchema, schema));
+			}
+		}
+		return schema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IngresSchema basicGetSchema() {
+		return schema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetSchema(IngresSchema newSchema, NotificationChain msgs) {
+		IngresSchema oldSchema = schema;
+		schema = newSchema;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, IngressqlmodelPackage.INGRES_DB_EVENT__SCHEMA, oldSchema, newSchema);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSchema(IngresSchema newSchema) {
+		if (newSchema != schema) {
+			NotificationChain msgs = null;
+			if (schema != null)
+				msgs = ((InternalEObject)schema).eInverseRemove(this, IngressqlmodelPackage.INGRES_SCHEMA__DB_EVENTS, IngresSchema.class, msgs);
+			if (newSchema != null)
+				msgs = ((InternalEObject)newSchema).eInverseAdd(this, IngressqlmodelPackage.INGRES_SCHEMA__DB_EVENTS, IngresSchema.class, msgs);
+			msgs = basicSetSchema(newSchema, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, IngressqlmodelPackage.INGRES_DB_EVENT__SCHEMA, newSchema, newSchema));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_DB_EVENT__SCHEMA:
+				if (schema != null)
+					msgs = ((InternalEObject)schema).eInverseRemove(this, IngressqlmodelPackage.INGRES_SCHEMA__DB_EVENTS, IngresSchema.class, msgs);
+				return basicSetSchema((IngresSchema)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_DB_EVENT__SCHEMA:
+				return basicSetSchema(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_DB_EVENT__SCHEMA:
+				if (resolve) return getSchema();
+				return basicGetSchema();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_DB_EVENT__SCHEMA:
+				setSchema((IngresSchema)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_DB_EVENT__SCHEMA:
+				setSchema((IngresSchema)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_DB_EVENT__SCHEMA:
+				return schema != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //IngresDBEventImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/impl/IngresIdentitySpecifierImpl.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/impl/IngresIdentitySpecifierImpl.java
new file mode 100644
index 0000000..b8265ac
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/impl/IngresIdentitySpecifierImpl.java
@@ -0,0 +1,555 @@
+/**
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *   Ingres Corporation - initial API and implementation
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl;
+
+import java.math.BigInteger;
+
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.IdentitySpecifierImpl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Ingres Identity Specifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresIdentitySpecifierImpl#getDataType <em>Data Type</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresIdentitySpecifierImpl#getSeqLength <em>Seq Length</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresIdentitySpecifierImpl#getSeqPrecision <em>Seq Precision</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresIdentitySpecifierImpl#getMaximumOption <em>Maximum Option</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresIdentitySpecifierImpl#getMinimumOption <em>Minimum Option</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresIdentitySpecifierImpl#getCacheSize <em>Cache Size</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresIdentitySpecifierImpl#getCacheOption <em>Cache Option</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresIdentitySpecifierImpl#getOrderOption <em>Order Option</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class IngresIdentitySpecifierImpl extends IdentitySpecifierImpl implements IngresIdentitySpecifier {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String copyright = "Copyright (c) 2008 Ingres Corporation and others.\r\nAll rights reserved. This program and the accompanying materials\r\nare made available under the terms of the Eclipse Public License v1.0\r\nwhich accompanies this distribution, and is available at\r\nhttp://www.eclipse.org/legal/epl-v10.html\r\n\r\nContributors:\r\n  Ingres Corporation - initial API and implementation";
+
+	/**
+	 * The default value of the '{@link #getDataType() <em>Data Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDataType()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String DATA_TYPE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getDataType() <em>Data Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDataType()
+	 * @generated
+	 * @ordered
+	 */
+	protected String dataType = DATA_TYPE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getSeqLength() <em>Seq Length</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSeqLength()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final BigInteger SEQ_LENGTH_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getSeqLength() <em>Seq Length</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSeqLength()
+	 * @generated
+	 * @ordered
+	 */
+	protected BigInteger seqLength = SEQ_LENGTH_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getSeqPrecision() <em>Seq Precision</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSeqPrecision()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final BigInteger SEQ_PRECISION_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getSeqPrecision() <em>Seq Precision</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSeqPrecision()
+	 * @generated
+	 * @ordered
+	 */
+	protected BigInteger seqPrecision = SEQ_PRECISION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getMaximumOption() <em>Maximum Option</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMaximumOption()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final Boolean MAXIMUM_OPTION_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getMaximumOption() <em>Maximum Option</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMaximumOption()
+	 * @generated
+	 * @ordered
+	 */
+	protected Boolean maximumOption = MAXIMUM_OPTION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getMinimumOption() <em>Minimum Option</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMinimumOption()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final Boolean MINIMUM_OPTION_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getMinimumOption() <em>Minimum Option</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMinimumOption()
+	 * @generated
+	 * @ordered
+	 */
+	protected Boolean minimumOption = MINIMUM_OPTION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getCacheSize() <em>Cache Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCacheSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final BigInteger CACHE_SIZE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getCacheSize() <em>Cache Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCacheSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected BigInteger cacheSize = CACHE_SIZE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getCacheOption() <em>Cache Option</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCacheOption()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final Boolean CACHE_OPTION_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getCacheOption() <em>Cache Option</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCacheOption()
+	 * @generated
+	 * @ordered
+	 */
+	protected Boolean cacheOption = CACHE_OPTION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getOrderOption() <em>Order Option</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOrderOption()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final Boolean ORDER_OPTION_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getOrderOption() <em>Order Option</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOrderOption()
+	 * @generated
+	 * @ordered
+	 */
+	protected Boolean orderOption = ORDER_OPTION_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IngresIdentitySpecifierImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return IngressqlmodelPackage.Literals.INGRES_IDENTITY_SPECIFIER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getDataType() {
+		return dataType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDataType(String newDataType) {
+		String oldDataType = dataType;
+		dataType = newDataType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__DATA_TYPE, oldDataType, dataType));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public BigInteger getSeqLength() {
+		return seqLength;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSeqLength(BigInteger newSeqLength) {
+		BigInteger oldSeqLength = seqLength;
+		seqLength = newSeqLength;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__SEQ_LENGTH, oldSeqLength, seqLength));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public BigInteger getSeqPrecision() {
+		return seqPrecision;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSeqPrecision(BigInteger newSeqPrecision) {
+		BigInteger oldSeqPrecision = seqPrecision;
+		seqPrecision = newSeqPrecision;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__SEQ_PRECISION, oldSeqPrecision, seqPrecision));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Boolean getMaximumOption() {
+		return maximumOption;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setMaximumOption(Boolean newMaximumOption) {
+		Boolean oldMaximumOption = maximumOption;
+		maximumOption = newMaximumOption;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__MAXIMUM_OPTION, oldMaximumOption, maximumOption));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Boolean getMinimumOption() {
+		return minimumOption;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setMinimumOption(Boolean newMinimumOption) {
+		Boolean oldMinimumOption = minimumOption;
+		minimumOption = newMinimumOption;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__MINIMUM_OPTION, oldMinimumOption, minimumOption));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public BigInteger getCacheSize() {
+		return cacheSize;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCacheSize(BigInteger newCacheSize) {
+		BigInteger oldCacheSize = cacheSize;
+		cacheSize = newCacheSize;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__CACHE_SIZE, oldCacheSize, cacheSize));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Boolean getCacheOption() {
+		return cacheOption;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCacheOption(Boolean newCacheOption) {
+		Boolean oldCacheOption = cacheOption;
+		cacheOption = newCacheOption;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__CACHE_OPTION, oldCacheOption, cacheOption));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Boolean getOrderOption() {
+		return orderOption;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOrderOption(Boolean newOrderOption) {
+		Boolean oldOrderOption = orderOption;
+		orderOption = newOrderOption;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__ORDER_OPTION, oldOrderOption, orderOption));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__DATA_TYPE:
+				return getDataType();
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__SEQ_LENGTH:
+				return getSeqLength();
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__SEQ_PRECISION:
+				return getSeqPrecision();
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__MAXIMUM_OPTION:
+				return getMaximumOption();
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__MINIMUM_OPTION:
+				return getMinimumOption();
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__CACHE_SIZE:
+				return getCacheSize();
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__CACHE_OPTION:
+				return getCacheOption();
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__ORDER_OPTION:
+				return getOrderOption();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__DATA_TYPE:
+				setDataType((String)newValue);
+				return;
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__SEQ_LENGTH:
+				setSeqLength((BigInteger)newValue);
+				return;
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__SEQ_PRECISION:
+				setSeqPrecision((BigInteger)newValue);
+				return;
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__MAXIMUM_OPTION:
+				setMaximumOption((Boolean)newValue);
+				return;
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__MINIMUM_OPTION:
+				setMinimumOption((Boolean)newValue);
+				return;
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__CACHE_SIZE:
+				setCacheSize((BigInteger)newValue);
+				return;
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__CACHE_OPTION:
+				setCacheOption((Boolean)newValue);
+				return;
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__ORDER_OPTION:
+				setOrderOption((Boolean)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__DATA_TYPE:
+				setDataType(DATA_TYPE_EDEFAULT);
+				return;
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__SEQ_LENGTH:
+				setSeqLength(SEQ_LENGTH_EDEFAULT);
+				return;
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__SEQ_PRECISION:
+				setSeqPrecision(SEQ_PRECISION_EDEFAULT);
+				return;
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__MAXIMUM_OPTION:
+				setMaximumOption(MAXIMUM_OPTION_EDEFAULT);
+				return;
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__MINIMUM_OPTION:
+				setMinimumOption(MINIMUM_OPTION_EDEFAULT);
+				return;
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__CACHE_SIZE:
+				setCacheSize(CACHE_SIZE_EDEFAULT);
+				return;
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__CACHE_OPTION:
+				setCacheOption(CACHE_OPTION_EDEFAULT);
+				return;
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__ORDER_OPTION:
+				setOrderOption(ORDER_OPTION_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__DATA_TYPE:
+				return DATA_TYPE_EDEFAULT == null ? dataType != null : !DATA_TYPE_EDEFAULT.equals(dataType);
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__SEQ_LENGTH:
+				return SEQ_LENGTH_EDEFAULT == null ? seqLength != null : !SEQ_LENGTH_EDEFAULT.equals(seqLength);
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__SEQ_PRECISION:
+				return SEQ_PRECISION_EDEFAULT == null ? seqPrecision != null : !SEQ_PRECISION_EDEFAULT.equals(seqPrecision);
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__MAXIMUM_OPTION:
+				return MAXIMUM_OPTION_EDEFAULT == null ? maximumOption != null : !MAXIMUM_OPTION_EDEFAULT.equals(maximumOption);
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__MINIMUM_OPTION:
+				return MINIMUM_OPTION_EDEFAULT == null ? minimumOption != null : !MINIMUM_OPTION_EDEFAULT.equals(minimumOption);
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__CACHE_SIZE:
+				return CACHE_SIZE_EDEFAULT == null ? cacheSize != null : !CACHE_SIZE_EDEFAULT.equals(cacheSize);
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__CACHE_OPTION:
+				return CACHE_OPTION_EDEFAULT == null ? cacheOption != null : !CACHE_OPTION_EDEFAULT.equals(cacheOption);
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER__ORDER_OPTION:
+				return ORDER_OPTION_EDEFAULT == null ? orderOption != null : !ORDER_OPTION_EDEFAULT.equals(orderOption);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (dataType: ");
+		result.append(dataType);
+		result.append(", seqLength: ");
+		result.append(seqLength);
+		result.append(", seqPrecision: ");
+		result.append(seqPrecision);
+		result.append(", maximumOption: ");
+		result.append(maximumOption);
+		result.append(", minimumOption: ");
+		result.append(minimumOption);
+		result.append(", cacheSize: ");
+		result.append(cacheSize);
+		result.append(", cacheOption: ");
+		result.append(cacheOption);
+		result.append(", orderOption: ");
+		result.append(orderOption);
+		result.append(')');
+		return result.toString();
+	}
+
+} //IngresIdentitySpecifierImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/impl/IngresSchemaImpl.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/impl/IngresSchemaImpl.java
new file mode 100644
index 0000000..1c17876
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/impl/IngresSchemaImpl.java
@@ -0,0 +1,210 @@
+/**
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *   Ingres Corporation - initial API and implementation
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl;
+
+import java.util.Collection;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCSchema;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresDBEvent;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSchema;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSynonym;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Ingres Schema</b></em>'.
+ * Inherits from JDBCSchema to benefit from the DTP JDBC loading mechanism.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresSchemaImpl#getDBEvents <em>DB Events</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresSchemaImpl#getSynonyms <em>Synonyms</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * generated NOT
+ */
+public class IngresSchemaImpl extends JDBCSchema implements IngresSchema {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String copyright = "Copyright (c) 2008 Ingres Corporation and others.\r\nAll rights reserved. This program and the accompanying materials\r\nare made available under the terms of the Eclipse Public License v1.0\r\nwhich accompanies this distribution, and is available at\r\nhttp://www.eclipse.org/legal/epl-v10.html\r\n\r\nContributors:\r\n  Ingres Corporation - initial API and implementation";
+
+	/**
+	 * The cached value of the '{@link #getDBEvents() <em>DB Events</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDBEvents()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList dBEvents;
+
+	/**
+	 * The cached value of the '{@link #getSynonyms() <em>Synonyms</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSynonyms()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList synonyms;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IngresSchemaImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return IngressqlmodelPackage.Literals.INGRES_SCHEMA;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getDBEvents() {
+		if (dBEvents == null) {
+			dBEvents = new EObjectWithInverseResolvingEList(IngresDBEvent.class, this, IngressqlmodelPackage.INGRES_SCHEMA__DB_EVENTS, IngressqlmodelPackage.INGRES_DB_EVENT__SCHEMA);
+		}
+		return dBEvents;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getSynonyms() {
+		if (synonyms == null) {
+			synonyms = new EObjectWithInverseResolvingEList(IngresSynonym.class, this, IngressqlmodelPackage.INGRES_SCHEMA__SYNONYMS, IngressqlmodelPackage.INGRES_SYNONYM__SCHEMA);
+		}
+		return synonyms;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_SCHEMA__DB_EVENTS:
+				return ((InternalEList)getDBEvents()).basicAdd(otherEnd, msgs);
+			case IngressqlmodelPackage.INGRES_SCHEMA__SYNONYMS:
+				return ((InternalEList)getSynonyms()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_SCHEMA__DB_EVENTS:
+				return ((InternalEList)getDBEvents()).basicRemove(otherEnd, msgs);
+			case IngressqlmodelPackage.INGRES_SCHEMA__SYNONYMS:
+				return ((InternalEList)getSynonyms()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_SCHEMA__DB_EVENTS:
+				return getDBEvents();
+			case IngressqlmodelPackage.INGRES_SCHEMA__SYNONYMS:
+				return getSynonyms();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_SCHEMA__DB_EVENTS:
+				getDBEvents().clear();
+				getDBEvents().addAll((Collection)newValue);
+				return;
+			case IngressqlmodelPackage.INGRES_SCHEMA__SYNONYMS:
+				getSynonyms().clear();
+				getSynonyms().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_SCHEMA__DB_EVENTS:
+				getDBEvents().clear();
+				return;
+			case IngressqlmodelPackage.INGRES_SCHEMA__SYNONYMS:
+				getSynonyms().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_SCHEMA__DB_EVENTS:
+				return dBEvents != null && !dBEvents.isEmpty();
+			case IngressqlmodelPackage.INGRES_SCHEMA__SYNONYMS:
+				return synonyms != null && !synonyms.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //IngresSchemaImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/impl/IngresSynonymImpl.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/impl/IngresSynonymImpl.java
new file mode 100644
index 0000000..5471978
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/impl/IngresSynonymImpl.java
@@ -0,0 +1,288 @@
+/**
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *   Ingres Corporation - initial API and implementation
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl;
+
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSchema;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSynonym;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage;
+
+import org.eclipse.datatools.modelbase.sql.schema.impl.SQLObjectImpl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Ingres Synonym</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresSynonymImpl#getSchema <em>Schema</em>}</li>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresSynonymImpl#getTableName <em>Table Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class IngresSynonymImpl extends SQLObjectImpl implements IngresSynonym {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String copyright = "Copyright (c) 2008 Ingres Corporation and others.\r\nAll rights reserved. This program and the accompanying materials\r\nare made available under the terms of the Eclipse Public License v1.0\r\nwhich accompanies this distribution, and is available at\r\nhttp://www.eclipse.org/legal/epl-v10.html\r\n\r\nContributors:\r\n  Ingres Corporation - initial API and implementation";
+
+	/**
+	 * The cached value of the '{@link #getSchema() <em>Schema</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSchema()
+	 * @generated
+	 * @ordered
+	 */
+	protected IngresSchema schema;
+
+	/**
+	 * The default value of the '{@link #getTableName() <em>Table Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTableName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String TABLE_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getTableName() <em>Table Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTableName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String tableName = TABLE_NAME_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IngresSynonymImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return IngressqlmodelPackage.Literals.INGRES_SYNONYM;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IngresSchema getSchema() {
+		if (schema != null && schema.eIsProxy()) {
+			InternalEObject oldSchema = (InternalEObject)schema;
+			schema = (IngresSchema)eResolveProxy(oldSchema);
+			if (schema != oldSchema) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, IngressqlmodelPackage.INGRES_SYNONYM__SCHEMA, oldSchema, schema));
+			}
+		}
+		return schema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IngresSchema basicGetSchema() {
+		return schema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetSchema(IngresSchema newSchema, NotificationChain msgs) {
+		IngresSchema oldSchema = schema;
+		schema = newSchema;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, IngressqlmodelPackage.INGRES_SYNONYM__SCHEMA, oldSchema, newSchema);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSchema(IngresSchema newSchema) {
+		if (newSchema != schema) {
+			NotificationChain msgs = null;
+			if (schema != null)
+				msgs = ((InternalEObject)schema).eInverseRemove(this, IngressqlmodelPackage.INGRES_SCHEMA__SYNONYMS, IngresSchema.class, msgs);
+			if (newSchema != null)
+				msgs = ((InternalEObject)newSchema).eInverseAdd(this, IngressqlmodelPackage.INGRES_SCHEMA__SYNONYMS, IngresSchema.class, msgs);
+			msgs = basicSetSchema(newSchema, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, IngressqlmodelPackage.INGRES_SYNONYM__SCHEMA, newSchema, newSchema));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getTableName() {
+		return tableName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTableName(String newTableName) {
+		String oldTableName = tableName;
+		tableName = newTableName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, IngressqlmodelPackage.INGRES_SYNONYM__TABLE_NAME, oldTableName, tableName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_SYNONYM__SCHEMA:
+				if (schema != null)
+					msgs = ((InternalEObject)schema).eInverseRemove(this, IngressqlmodelPackage.INGRES_SCHEMA__SYNONYMS, IngresSchema.class, msgs);
+				return basicSetSchema((IngresSchema)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_SYNONYM__SCHEMA:
+				return basicSetSchema(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_SYNONYM__SCHEMA:
+				if (resolve) return getSchema();
+				return basicGetSchema();
+			case IngressqlmodelPackage.INGRES_SYNONYM__TABLE_NAME:
+				return getTableName();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_SYNONYM__SCHEMA:
+				setSchema((IngresSchema)newValue);
+				return;
+			case IngressqlmodelPackage.INGRES_SYNONYM__TABLE_NAME:
+				setTableName((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_SYNONYM__SCHEMA:
+				setSchema((IngresSchema)null);
+				return;
+			case IngressqlmodelPackage.INGRES_SYNONYM__TABLE_NAME:
+				setTableName(TABLE_NAME_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_SYNONYM__SCHEMA:
+				return schema != null;
+			case IngressqlmodelPackage.INGRES_SYNONYM__TABLE_NAME:
+				return TABLE_NAME_EDEFAULT == null ? tableName != null : !TABLE_NAME_EDEFAULT.equals(tableName);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (tableName: ");
+		result.append(tableName);
+		result.append(')');
+		return result.toString();
+	}
+
+} //IngresSynonymImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/impl/IngresTriggerImpl.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/impl/IngresTriggerImpl.java
new file mode 100644
index 0000000..a9cf313
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/impl/IngresTriggerImpl.java
@@ -0,0 +1,171 @@
+/**
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *   Ingres Corporation - initial API and implementation
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl;
+
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresTrigger;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage;
+
+import org.eclipse.datatools.modelbase.sql.routines.Source;
+
+import org.eclipse.datatools.modelbase.sql.tables.impl.TriggerImpl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Ingres Trigger</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresTriggerImpl#getSource <em>Source</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class IngresTriggerImpl extends TriggerImpl implements IngresTrigger {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String copyright = "Copyright (c) 2008 Ingres Corporation and others.\r\nAll rights reserved. This program and the accompanying materials\r\nare made available under the terms of the Eclipse Public License v1.0\r\nwhich accompanies this distribution, and is available at\r\nhttp://www.eclipse.org/legal/epl-v10.html\r\n\r\nContributors:\r\n  Ingres Corporation - initial API and implementation";
+
+	/**
+	 * The cached value of the '{@link #getSource() <em>Source</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSource()
+	 * @generated
+	 * @ordered
+	 */
+	protected Source source;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IngresTriggerImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return IngressqlmodelPackage.Literals.INGRES_TRIGGER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Source getSource() {
+		if (source != null && source.eIsProxy()) {
+			InternalEObject oldSource = (InternalEObject)source;
+			source = (Source)eResolveProxy(oldSource);
+			if (source != oldSource) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, IngressqlmodelPackage.INGRES_TRIGGER__SOURCE, oldSource, source));
+			}
+		}
+		return source;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Source basicGetSource() {
+		return source;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSource(Source newSource) {
+		Source oldSource = source;
+		source = newSource;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, IngressqlmodelPackage.INGRES_TRIGGER__SOURCE, oldSource, source));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_TRIGGER__SOURCE:
+				if (resolve) return getSource();
+				return basicGetSource();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_TRIGGER__SOURCE:
+				setSource((Source)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_TRIGGER__SOURCE:
+				setSource((Source)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_TRIGGER__SOURCE:
+				return source != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //IngresTriggerImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/impl/IngresViewTableImpl.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/impl/IngresViewTableImpl.java
new file mode 100644
index 0000000..dbf932d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/impl/IngresViewTableImpl.java
@@ -0,0 +1,167 @@
+/**
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *   Ingres Corporation - initial API and implementation
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCView;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresViewTable;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage;
+import org.eclipse.datatools.modelbase.sql.routines.Source;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Ingres View Table</b></em>'.
+ * Inherits from JDBCView to benefit from the DTP JDBC loading mechanism.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl.IngresViewTableImpl#getSource <em>Source</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * generated NOT
+ */
+public class IngresViewTableImpl extends JDBCView implements IngresViewTable {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String copyright = "Copyright (c) 2008 Ingres Corporation and others.\r\nAll rights reserved. This program and the accompanying materials\r\nare made available under the terms of the Eclipse Public License v1.0\r\nwhich accompanies this distribution, and is available at\r\nhttp://www.eclipse.org/legal/epl-v10.html\r\n\r\nContributors:\r\n  Ingres Corporation - initial API and implementation";
+
+	/**
+	 * The cached value of the '{@link #getSource() <em>Source</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSource()
+	 * @generated
+	 * @ordered
+	 */
+	protected Source source;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IngresViewTableImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return IngressqlmodelPackage.Literals.INGRES_VIEW_TABLE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Source getSource() {
+		if (source != null && source.eIsProxy()) {
+			InternalEObject oldSource = (InternalEObject)source;
+			source = (Source)eResolveProxy(oldSource);
+			if (source != oldSource) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, IngressqlmodelPackage.INGRES_VIEW_TABLE__SOURCE, oldSource, source));
+			}
+		}
+		return source;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Source basicGetSource() {
+		return source;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSource(Source newSource) {
+		Source oldSource = source;
+		source = newSource;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, IngressqlmodelPackage.INGRES_VIEW_TABLE__SOURCE, oldSource, source));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_VIEW_TABLE__SOURCE:
+				if (resolve) return getSource();
+				return basicGetSource();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_VIEW_TABLE__SOURCE:
+				setSource((Source)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_VIEW_TABLE__SOURCE:
+				setSource((Source)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case IngressqlmodelPackage.INGRES_VIEW_TABLE__SOURCE:
+				return source != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //IngresViewTableImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/impl/IngressqlmodelFactoryImpl.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/impl/IngressqlmodelFactoryImpl.java
new file mode 100644
index 0000000..cd4714b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/impl/IngressqlmodelFactoryImpl.java
@@ -0,0 +1,165 @@
+/**
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *   Ingres Corporation - initial API and implementation
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl;
+
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.*;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class IngressqlmodelFactoryImpl extends EFactoryImpl implements IngressqlmodelFactory {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String copyright = "Copyright (c) 2008 Ingres Corporation and others.\r\nAll rights reserved. This program and the accompanying materials\r\nare made available under the terms of the Eclipse Public License v1.0\r\nwhich accompanies this distribution, and is available at\r\nhttp://www.eclipse.org/legal/epl-v10.html\r\n\r\nContributors:\r\n  Ingres Corporation - initial API and implementation";
+
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static IngressqlmodelFactory init() {
+		try {
+			IngressqlmodelFactory theIngressqlmodelFactory = (IngressqlmodelFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org/eclipse/datatools/enablement/ingres/ingressqlmodel.ecore"); 
+			if (theIngressqlmodelFactory != null) {
+				return theIngressqlmodelFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new IngressqlmodelFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IngressqlmodelFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case IngressqlmodelPackage.INGRES_SYNONYM: return createIngresSynonym();
+			case IngressqlmodelPackage.INGRES_DB_EVENT: return createIngresDBEvent();
+			case IngressqlmodelPackage.INGRES_SCHEMA: return createIngresSchema();
+			case IngressqlmodelPackage.INGRES_VIEW_TABLE: return createIngresViewTable();
+			case IngressqlmodelPackage.INGRES_TRIGGER: return createIngresTrigger();
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER: return createIngresIdentitySpecifier();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IngresSynonym createIngresSynonym() {
+		IngresSynonymImpl ingresSynonym = new IngresSynonymImpl();
+		return ingresSynonym;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IngresDBEvent createIngresDBEvent() {
+		IngresDBEventImpl ingresDBEvent = new IngresDBEventImpl();
+		return ingresDBEvent;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IngresSchema createIngresSchema() {
+		IngresSchemaImpl ingresSchema = new IngresSchemaImpl();
+		return ingresSchema;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IngresViewTable createIngresViewTable() {
+		IngresViewTableImpl ingresViewTable = new IngresViewTableImpl();
+		return ingresViewTable;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IngresTrigger createIngresTrigger() {
+		IngresTriggerImpl ingresTrigger = new IngresTriggerImpl();
+		return ingresTrigger;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IngresIdentitySpecifier createIngresIdentitySpecifier() {
+		IngresIdentitySpecifierImpl ingresIdentitySpecifier = new IngresIdentitySpecifierImpl();
+		return ingresIdentitySpecifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IngressqlmodelPackage getIngressqlmodelPackage() {
+		return (IngressqlmodelPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	public static IngressqlmodelPackage getPackage() {
+		return IngressqlmodelPackage.eINSTANCE;
+	}
+
+} //IngressqlmodelFactoryImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/impl/IngressqlmodelPackageImpl.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/impl/IngressqlmodelPackageImpl.java
new file mode 100644
index 0000000..59fe911
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/impl/IngressqlmodelPackageImpl.java
@@ -0,0 +1,497 @@
+/**
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *   Ingres Corporation - initial API and implementation
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.impl;
+
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresDBEvent;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSchema;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSynonym;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresTrigger;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresViewTable;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelFactory;
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage;
+
+import org.eclipse.datatools.modelbase.sql.accesscontrol.SQLAccessControlPackage;
+
+import org.eclipse.datatools.modelbase.sql.constraints.SQLConstraintsPackage;
+
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataTypesPackage;
+
+import org.eclipse.datatools.modelbase.sql.expressions.SQLExpressionsPackage;
+
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesPackage;
+
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+
+import org.eclipse.datatools.modelbase.sql.statements.SQLStatementsPackage;
+
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EcorePackage;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class IngressqlmodelPackageImpl extends EPackageImpl implements IngressqlmodelPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String copyright = "Copyright (c) 2008 Ingres Corporation and others.\r\nAll rights reserved. This program and the accompanying materials\r\nare made available under the terms of the Eclipse Public License v1.0\r\nwhich accompanies this distribution, and is available at\r\nhttp://www.eclipse.org/legal/epl-v10.html\r\n\r\nContributors:\r\n  Ingres Corporation - initial API and implementation";
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass ingresSynonymEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass ingresDBEventEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass ingresSchemaEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass ingresViewTableEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass ingresTriggerEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass ingresIdentitySpecifierEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private IngressqlmodelPackageImpl() {
+		super(eNS_URI, IngressqlmodelFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this
+	 * model, and for any others upon which it depends.  Simple
+	 * dependencies are satisfied by calling this method on all
+	 * dependent packages before doing anything else.  This method drives
+	 * initialization for interdependent packages directly, in parallel
+	 * with this package, itself.
+	 * <p>Of this package and its interdependencies, all packages which
+	 * have not yet been registered by their URI values are first created
+	 * and registered.  The packages are then initialized in two steps:
+	 * meta-model objects for all of the packages are created before any
+	 * are initialized, since one package's meta-model objects may refer to
+	 * those of another.
+	 * <p>Invocation of this method will not affect any packages that have
+	 * already been initialized.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static IngressqlmodelPackage init() {
+		if (isInited) return (IngressqlmodelPackage)EPackage.Registry.INSTANCE.getEPackage(IngressqlmodelPackage.eNS_URI);
+
+		// Obtain or create and register package
+		IngressqlmodelPackageImpl theIngressqlmodelPackage = (IngressqlmodelPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(eNS_URI) instanceof IngressqlmodelPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(eNS_URI) : new IngressqlmodelPackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		EcorePackage.eINSTANCE.eClass();
+		SQLSchemaPackage.eINSTANCE.eClass();
+		SQLConstraintsPackage.eINSTANCE.eClass();
+		SQLDataTypesPackage.eINSTANCE.eClass();
+		SQLExpressionsPackage.eINSTANCE.eClass();
+		SQLRoutinesPackage.eINSTANCE.eClass();
+		SQLStatementsPackage.eINSTANCE.eClass();
+		SQLTablesPackage.eINSTANCE.eClass();
+		SQLAccessControlPackage.eINSTANCE.eClass();
+
+		// Create package meta-data objects
+		theIngressqlmodelPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theIngressqlmodelPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theIngressqlmodelPackage.freeze();
+
+		return theIngressqlmodelPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getIngresSynonym() {
+		return ingresSynonymEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getIngresSynonym_Schema() {
+		return (EReference)ingresSynonymEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getIngresSynonym_TableName() {
+		return (EAttribute)ingresSynonymEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getIngresDBEvent() {
+		return ingresDBEventEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getIngresDBEvent_Schema() {
+		return (EReference)ingresDBEventEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getIngresSchema() {
+		return ingresSchemaEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getIngresSchema_DBEvents() {
+		return (EReference)ingresSchemaEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getIngresSchema_Synonyms() {
+		return (EReference)ingresSchemaEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getIngresViewTable() {
+		return ingresViewTableEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getIngresViewTable_Source() {
+		return (EReference)ingresViewTableEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getIngresTrigger() {
+		return ingresTriggerEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getIngresTrigger_Source() {
+		return (EReference)ingresTriggerEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getIngresIdentitySpecifier() {
+		return ingresIdentitySpecifierEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getIngresIdentitySpecifier_DataType() {
+		return (EAttribute)ingresIdentitySpecifierEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getIngresIdentitySpecifier_SeqLength() {
+		return (EAttribute)ingresIdentitySpecifierEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getIngresIdentitySpecifier_SeqPrecision() {
+		return (EAttribute)ingresIdentitySpecifierEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getIngresIdentitySpecifier_MaximumOption() {
+		return (EAttribute)ingresIdentitySpecifierEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getIngresIdentitySpecifier_MinimumOption() {
+		return (EAttribute)ingresIdentitySpecifierEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getIngresIdentitySpecifier_CacheSize() {
+		return (EAttribute)ingresIdentitySpecifierEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getIngresIdentitySpecifier_CacheOption() {
+		return (EAttribute)ingresIdentitySpecifierEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getIngresIdentitySpecifier_OrderOption() {
+		return (EAttribute)ingresIdentitySpecifierEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IngressqlmodelFactory getIngressqlmodelFactory() {
+		return (IngressqlmodelFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		ingresSynonymEClass = createEClass(INGRES_SYNONYM);
+		createEReference(ingresSynonymEClass, INGRES_SYNONYM__SCHEMA);
+		createEAttribute(ingresSynonymEClass, INGRES_SYNONYM__TABLE_NAME);
+
+		ingresDBEventEClass = createEClass(INGRES_DB_EVENT);
+		createEReference(ingresDBEventEClass, INGRES_DB_EVENT__SCHEMA);
+
+		ingresSchemaEClass = createEClass(INGRES_SCHEMA);
+		createEReference(ingresSchemaEClass, INGRES_SCHEMA__DB_EVENTS);
+		createEReference(ingresSchemaEClass, INGRES_SCHEMA__SYNONYMS);
+
+		ingresViewTableEClass = createEClass(INGRES_VIEW_TABLE);
+		createEReference(ingresViewTableEClass, INGRES_VIEW_TABLE__SOURCE);
+
+		ingresTriggerEClass = createEClass(INGRES_TRIGGER);
+		createEReference(ingresTriggerEClass, INGRES_TRIGGER__SOURCE);
+
+		ingresIdentitySpecifierEClass = createEClass(INGRES_IDENTITY_SPECIFIER);
+		createEAttribute(ingresIdentitySpecifierEClass, INGRES_IDENTITY_SPECIFIER__DATA_TYPE);
+		createEAttribute(ingresIdentitySpecifierEClass, INGRES_IDENTITY_SPECIFIER__SEQ_LENGTH);
+		createEAttribute(ingresIdentitySpecifierEClass, INGRES_IDENTITY_SPECIFIER__SEQ_PRECISION);
+		createEAttribute(ingresIdentitySpecifierEClass, INGRES_IDENTITY_SPECIFIER__MAXIMUM_OPTION);
+		createEAttribute(ingresIdentitySpecifierEClass, INGRES_IDENTITY_SPECIFIER__MINIMUM_OPTION);
+		createEAttribute(ingresIdentitySpecifierEClass, INGRES_IDENTITY_SPECIFIER__CACHE_SIZE);
+		createEAttribute(ingresIdentitySpecifierEClass, INGRES_IDENTITY_SPECIFIER__CACHE_OPTION);
+		createEAttribute(ingresIdentitySpecifierEClass, INGRES_IDENTITY_SPECIFIER__ORDER_OPTION);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		SQLSchemaPackage theSQLSchemaPackage = (SQLSchemaPackage)EPackage.Registry.INSTANCE.getEPackage(SQLSchemaPackage.eNS_URI);
+		EcorePackage theEcorePackage = (EcorePackage)EPackage.Registry.INSTANCE.getEPackage(EcorePackage.eNS_URI);
+		SQLTablesPackage theSQLTablesPackage = (SQLTablesPackage)EPackage.Registry.INSTANCE.getEPackage(SQLTablesPackage.eNS_URI);
+		SQLRoutinesPackage theSQLRoutinesPackage = (SQLRoutinesPackage)EPackage.Registry.INSTANCE.getEPackage(SQLRoutinesPackage.eNS_URI);
+
+		// Add supertypes to classes
+		ingresSynonymEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		ingresDBEventEClass.getESuperTypes().add(theSQLSchemaPackage.getSQLObject());
+		ingresSchemaEClass.getESuperTypes().add(theSQLSchemaPackage.getSchema());
+		ingresViewTableEClass.getESuperTypes().add(theSQLTablesPackage.getViewTable());
+		ingresTriggerEClass.getESuperTypes().add(theSQLTablesPackage.getTrigger());
+		ingresIdentitySpecifierEClass.getESuperTypes().add(theSQLSchemaPackage.getIdentitySpecifier());
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(ingresSynonymEClass, IngresSynonym.class, "IngresSynonym", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getIngresSynonym_Schema(), this.getIngresSchema(), this.getIngresSchema_Synonyms(), "schema", null, 1, 1, IngresSynonym.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getIngresSynonym_TableName(), theEcorePackage.getEString(), "tableName", null, 0, 1, IngresSynonym.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(ingresDBEventEClass, IngresDBEvent.class, "IngresDBEvent", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getIngresDBEvent_Schema(), this.getIngresSchema(), this.getIngresSchema_DBEvents(), "schema", null, 1, 1, IngresDBEvent.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(ingresSchemaEClass, IngresSchema.class, "IngresSchema", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getIngresSchema_DBEvents(), this.getIngresDBEvent(), this.getIngresDBEvent_Schema(), "dBEvents", null, 0, -1, IngresSchema.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getIngresSchema_Synonyms(), this.getIngresSynonym(), this.getIngresSynonym_Schema(), "synonyms", null, 0, -1, IngresSchema.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(ingresViewTableEClass, IngresViewTable.class, "IngresViewTable", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getIngresViewTable_Source(), theSQLRoutinesPackage.getSource(), null, "source", null, 0, 1, IngresViewTable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(ingresTriggerEClass, IngresTrigger.class, "IngresTrigger", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getIngresTrigger_Source(), theSQLRoutinesPackage.getSource(), null, "source", null, 0, 1, IngresTrigger.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(ingresIdentitySpecifierEClass, IngresIdentitySpecifier.class, "IngresIdentitySpecifier", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getIngresIdentitySpecifier_DataType(), theEcorePackage.getEString(), "dataType", null, 0, 1, IngresIdentitySpecifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getIngresIdentitySpecifier_SeqLength(), theEcorePackage.getEBigInteger(), "seqLength", null, 0, 1, IngresIdentitySpecifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getIngresIdentitySpecifier_SeqPrecision(), theEcorePackage.getEBigInteger(), "seqPrecision", null, 0, 1, IngresIdentitySpecifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getIngresIdentitySpecifier_MaximumOption(), theEcorePackage.getEBooleanObject(), "maximumOption", null, 0, 1, IngresIdentitySpecifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getIngresIdentitySpecifier_MinimumOption(), theEcorePackage.getEBooleanObject(), "minimumOption", null, 0, 1, IngresIdentitySpecifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getIngresIdentitySpecifier_CacheSize(), theEcorePackage.getEBigInteger(), "cacheSize", null, 0, 1, IngresIdentitySpecifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getIngresIdentitySpecifier_CacheOption(), theEcorePackage.getEBooleanObject(), "cacheOption", null, 0, 1, IngresIdentitySpecifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getIngresIdentitySpecifier_OrderOption(), theEcorePackage.getEBooleanObject(), "orderOption", null, 0, 1, IngresIdentitySpecifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //IngressqlmodelPackageImpl
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/util/IngressqlmodelAdapterFactory.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/util/IngressqlmodelAdapterFactory.java
new file mode 100644
index 0000000..90790ce
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/util/IngressqlmodelAdapterFactory.java
@@ -0,0 +1,382 @@
+/**
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *   Ingres Corporation - initial API and implementation
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.util;
+
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.*;
+
+import org.eclipse.datatools.modelbase.sql.schema.IdentitySpecifier;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+
+import org.eclipse.datatools.modelbase.sql.tables.DerivedTable;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EModelElement;
+import org.eclipse.emf.ecore.ENamedElement;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage
+ * @generated
+ */
+public class IngressqlmodelAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String copyright = "Copyright (c) 2008 Ingres Corporation and others.\r\nAll rights reserved. This program and the accompanying materials\r\nare made available under the terms of the Eclipse Public License v1.0\r\nwhich accompanies this distribution, and is available at\r\nhttp://www.eclipse.org/legal/epl-v10.html\r\n\r\nContributors:\r\n  Ingres Corporation - initial API and implementation";
+
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static IngressqlmodelPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IngressqlmodelAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = IngressqlmodelPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch the delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IngressqlmodelSwitch modelSwitch =
+		new IngressqlmodelSwitch() {
+			public Object caseIngresSynonym(IngresSynonym object) {
+				return createIngresSynonymAdapter();
+			}
+			public Object caseIngresDBEvent(IngresDBEvent object) {
+				return createIngresDBEventAdapter();
+			}
+			public Object caseIngresSchema(IngresSchema object) {
+				return createIngresSchemaAdapter();
+			}
+			public Object caseIngresViewTable(IngresViewTable object) {
+				return createIngresViewTableAdapter();
+			}
+			public Object caseIngresTrigger(IngresTrigger object) {
+				return createIngresTriggerAdapter();
+			}
+			public Object caseIngresIdentitySpecifier(IngresIdentitySpecifier object) {
+				return createIngresIdentitySpecifierAdapter();
+			}
+			public Object caseEModelElement(EModelElement object) {
+				return createEModelElementAdapter();
+			}
+			public Object caseENamedElement(ENamedElement object) {
+				return createENamedElementAdapter();
+			}
+			public Object caseSQLObject(SQLObject object) {
+				return createSQLObjectAdapter();
+			}
+			public Object caseSchema(Schema object) {
+				return createSchemaAdapter();
+			}
+			public Object caseTable(Table object) {
+				return createTableAdapter();
+			}
+			public Object caseDerivedTable(DerivedTable object) {
+				return createDerivedTableAdapter();
+			}
+			public Object caseViewTable(ViewTable object) {
+				return createViewTableAdapter();
+			}
+			public Object caseTrigger(Trigger object) {
+				return createTriggerAdapter();
+			}
+			public Object caseIdentitySpecifier(IdentitySpecifier object) {
+				return createIdentitySpecifierAdapter();
+			}
+			public Object defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	public Adapter createAdapter(Notifier target) {
+		return (Adapter)modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSynonym <em>Ingres Synonym</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSynonym
+	 * @generated
+	 */
+	public Adapter createIngresSynonymAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresDBEvent <em>Ingres DB Event</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresDBEvent
+	 * @generated
+	 */
+	public Adapter createIngresDBEventAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSchema <em>Ingres Schema</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresSchema
+	 * @generated
+	 */
+	public Adapter createIngresSchemaAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresViewTable <em>Ingres View Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresViewTable
+	 * @generated
+	 */
+	public Adapter createIngresViewTableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresTrigger <em>Ingres Trigger</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresTrigger
+	 * @generated
+	 */
+	public Adapter createIngresTriggerAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier <em>Ingres Identity Specifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngresIdentitySpecifier
+	 * @generated
+	 */
+	public Adapter createIngresIdentitySpecifierAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.emf.ecore.EModelElement <em>EModel Element</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.emf.ecore.EModelElement
+	 * @generated
+	 */
+	public Adapter createEModelElementAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.emf.ecore.ENamedElement <em>ENamed Element</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.emf.ecore.ENamedElement
+	 * @generated
+	 */
+	public Adapter createENamedElementAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.schema.SQLObject <em>SQL Object</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.datatools.modelbase.sql.schema.SQLObject
+	 * @generated
+	 */
+	public Adapter createSQLObjectAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.schema.Schema <em>Schema</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.datatools.modelbase.sql.schema.Schema
+	 * @generated
+	 */
+	public Adapter createSchemaAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.tables.Table <em>Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.datatools.modelbase.sql.tables.Table
+	 * @generated
+	 */
+	public Adapter createTableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.tables.DerivedTable <em>Derived Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.datatools.modelbase.sql.tables.DerivedTable
+	 * @generated
+	 */
+	public Adapter createDerivedTableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.tables.ViewTable <em>View Table</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.datatools.modelbase.sql.tables.ViewTable
+	 * @generated
+	 */
+	public Adapter createViewTableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.tables.Trigger <em>Trigger</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.datatools.modelbase.sql.tables.Trigger
+	 * @generated
+	 */
+	public Adapter createTriggerAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.datatools.modelbase.sql.schema.IdentitySpecifier <em>Identity Specifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.datatools.modelbase.sql.schema.IdentitySpecifier
+	 * @generated
+	 */
+	public Adapter createIdentitySpecifierAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //IngressqlmodelAdapterFactory
diff --git a/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/util/IngressqlmodelSwitch.java b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/util/IngressqlmodelSwitch.java
new file mode 100644
index 0000000..97f2108
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.ingres/src/org/eclipse/datatools/enablement/ingres/models/ingressqlmodel/util/IngressqlmodelSwitch.java
@@ -0,0 +1,418 @@
+/**
+ * Copyright (c) 2008 Ingres Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *   Ingres Corporation - initial API and implementation
+ *
+ * $Id$
+ */
+package org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.util;
+
+import java.util.List;
+
+import org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.*;
+
+import org.eclipse.datatools.modelbase.sql.schema.IdentitySpecifier;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+
+import org.eclipse.datatools.modelbase.sql.tables.DerivedTable;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EModelElement;
+import org.eclipse.emf.ecore.ENamedElement;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.datatools.enablement.ingres.models.ingressqlmodel.IngressqlmodelPackage
+ * @generated
+ */
+public class IngressqlmodelSwitch {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String copyright = "Copyright (c) 2008 Ingres Corporation and others.\r\nAll rights reserved. This program and the accompanying materials\r\nare made available under the terms of the Eclipse Public License v1.0\r\nwhich accompanies this distribution, and is available at\r\nhttp://www.eclipse.org/legal/epl-v10.html\r\n\r\nContributors:\r\n  Ingres Corporation - initial API and implementation";
+
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static IngressqlmodelPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IngressqlmodelSwitch() {
+		if (modelPackage == null) {
+			modelPackage = IngressqlmodelPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public Object doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected Object doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch((EClass)eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected Object doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case IngressqlmodelPackage.INGRES_SYNONYM: {
+				IngresSynonym ingresSynonym = (IngresSynonym)theEObject;
+				Object result = caseIngresSynonym(ingresSynonym);
+				if (result == null) result = caseSQLObject(ingresSynonym);
+				if (result == null) result = caseENamedElement(ingresSynonym);
+				if (result == null) result = caseEModelElement(ingresSynonym);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case IngressqlmodelPackage.INGRES_DB_EVENT: {
+				IngresDBEvent ingresDBEvent = (IngresDBEvent)theEObject;
+				Object result = caseIngresDBEvent(ingresDBEvent);
+				if (result == null) result = caseSQLObject(ingresDBEvent);
+				if (result == null) result = caseENamedElement(ingresDBEvent);
+				if (result == null) result = caseEModelElement(ingresDBEvent);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case IngressqlmodelPackage.INGRES_SCHEMA: {
+				IngresSchema ingresSchema = (IngresSchema)theEObject;
+				Object result = caseIngresSchema(ingresSchema);
+				if (result == null) result = caseSchema(ingresSchema);
+				if (result == null) result = caseSQLObject(ingresSchema);
+				if (result == null) result = caseENamedElement(ingresSchema);
+				if (result == null) result = caseEModelElement(ingresSchema);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case IngressqlmodelPackage.INGRES_VIEW_TABLE: {
+				IngresViewTable ingresViewTable = (IngresViewTable)theEObject;
+				Object result = caseIngresViewTable(ingresViewTable);
+				if (result == null) result = caseViewTable(ingresViewTable);
+				if (result == null) result = caseDerivedTable(ingresViewTable);
+				if (result == null) result = caseTable(ingresViewTable);
+				if (result == null) result = caseSQLObject(ingresViewTable);
+				if (result == null) result = caseENamedElement(ingresViewTable);
+				if (result == null) result = caseEModelElement(ingresViewTable);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case IngressqlmodelPackage.INGRES_TRIGGER: {
+				IngresTrigger ingresTrigger = (IngresTrigger)theEObject;
+				Object result = caseIngresTrigger(ingresTrigger);
+				if (result == null) result = caseTrigger(ingresTrigger);
+				if (result == null) result = caseSQLObject(ingresTrigger);
+				if (result == null) result = caseENamedElement(ingresTrigger);
+				if (result == null) result = caseEModelElement(ingresTrigger);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case IngressqlmodelPackage.INGRES_IDENTITY_SPECIFIER: {
+				IngresIdentitySpecifier ingresIdentitySpecifier = (IngresIdentitySpecifier)theEObject;
+				Object result = caseIngresIdentitySpecifier(ingresIdentitySpecifier);
+				if (result == null) result = caseIdentitySpecifier(ingresIdentitySpecifier);
+				if (result == null) result = caseSQLObject(ingresIdentitySpecifier);
+				if (result == null) result = caseENamedElement(ingresIdentitySpecifier);
+				if (result == null) result = caseEModelElement(ingresIdentitySpecifier);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Ingres Synonym</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Ingres Synonym</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseIngresSynonym(IngresSynonym object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Ingres DB Event</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Ingres DB Event</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseIngresDBEvent(IngresDBEvent object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Ingres Schema</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Ingres Schema</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseIngresSchema(IngresSchema object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Ingres View Table</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Ingres View Table</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseIngresViewTable(IngresViewTable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Ingres Trigger</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Ingres Trigger</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseIngresTrigger(IngresTrigger object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Ingres Identity Specifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Ingres Identity Specifier</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseIngresIdentitySpecifier(IngresIdentitySpecifier object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EModel Element</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EModel Element</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseEModelElement(EModelElement object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>ENamed Element</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>ENamed Element</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseENamedElement(ENamedElement object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>SQL Object</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>SQL Object</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseSQLObject(SQLObject object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Schema</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Schema</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseSchema(Schema object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Table</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Table</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseTable(Table object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Derived Table</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Derived Table</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseDerivedTable(DerivedTable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>View Table</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>View Table</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseViewTable(ViewTable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Trigger</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Trigger</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseTrigger(Trigger object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Identity Specifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Identity Specifier</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseIdentitySpecifier(IdentitySpecifier object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public Object defaultCase(EObject object) {
+		return null;
+	}
+
+} //IngressqlmodelSwitch
diff --git a/plugins/org.eclipse.datatools.enablement.jdt.classpath/.classpath b/plugins/org.eclipse.datatools.enablement.jdt.classpath/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.jdt.classpath/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.enablement.jdt.classpath/.gitignore b/plugins/org.eclipse.datatools.enablement.jdt.classpath/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.jdt.classpath/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/plugins/org.eclipse.datatools.enablement.jdt.classpath/.project b/plugins/org.eclipse.datatools.enablement.jdt.classpath/.project
new file mode 100644
index 0000000..37c0702
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.jdt.classpath/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.jdt.classpath</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.enablement.jdt.classpath/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.enablement.jdt.classpath/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..73f4382
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.jdt.classpath/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Fri Apr 13 14:14:14 PDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.4
diff --git a/plugins/org.eclipse.datatools.enablement.jdt.classpath/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.enablement.jdt.classpath/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..b40405c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.jdt.classpath/META-INF/MANIFEST.MF
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Plugin.Name
+Bundle-SymbolicName: org.eclipse.datatools.enablement.jdt.classpath;singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-Activator: org.eclipse.datatools.enablement.jdt.classpath.internal.ConnJDTPlugin
+Bundle-Vendor: %Plugin.ProviderName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.jdt.core,
+ org.eclipse.jdt.ui,
+ org.eclipse.datatools.connectivity,
+ org.eclipse.datatools.connectivity.ui
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.datatools.enablement.jdt.classpath,
+ org.eclipse.datatools.enablement.jdt.classpath.internal
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/plugins/org.eclipse.datatools.enablement.jdt.classpath/about.html b/plugins/org.eclipse.datatools.enablement.jdt.classpath/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.jdt.classpath/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.jdt.classpath/about.ini b/plugins/org.eclipse.datatools.enablement.jdt.classpath/about.ini
new file mode 100644
index 0000000..76a0356
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.jdt.classpath/about.ini
@@ -0,0 +1,27 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%blurb
+
+# Property "windowImage" contains path to window icon (16x16)
+# needed for primary features only
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=eclipse32.png
+
+# Property "aboutImage" contains path to product image (500x330 or 115x164)
+# needed for primary features only
+
+# Property "appName" contains name of the application (not translated)
+# needed for primary features only
+
+# Property "welcomePerspective" contains the id of the perspective in which the
+# welcome page is to be opened.
+# optional
+
+# Property "tipsAndTricksHref" contains the Help topic href to a tips and tricks page 
+# optional
diff --git a/plugins/org.eclipse.datatools.enablement.jdt.classpath/about.mappings b/plugins/org.eclipse.datatools.enablement.jdt.classpath/about.mappings
new file mode 100644
index 0000000..3f4348a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.jdt.classpath/about.mappings
@@ -0,0 +1 @@
+0=@BUILD@
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.jdt.classpath/about.properties b/plugins/org.eclipse.datatools.enablement.jdt.classpath/about.properties
new file mode 100644
index 0000000..9b2c8bb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.jdt.classpath/about.properties
@@ -0,0 +1,19 @@
+###############################################################################
+# Copyright (c) 2006 Sybase, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     Sybase, Inc. - initial API and implementation
+###############################################################################
+blurb=Eclipse Data Tools Platform Enablement\n\
+\n\
+Visit http://www.eclipse.org/datatools\n\
+\n\
+Copyright (c) 2017 Eclipse Contributors\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html
diff --git a/plugins/org.eclipse.datatools.enablement.jdt.classpath/build.properties b/plugins/org.eclipse.datatools.enablement.jdt.classpath/build.properties
new file mode 100644
index 0000000..234f3db
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.jdt.classpath/build.properties
@@ -0,0 +1,19 @@
+bin.includes = plugin.xml,\
+               plugin.properties,\
+               about.html,\
+               META-INF/,\
+               .,\
+               about.ini,\
+               about.mappings,\
+               about.properties,\
+               eclipse32.png
+jars.compile.order = .
+src.dir			 = src/
+plugin.version =	1.0.1.200710171
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+source.. = src/
+output.. = bin/
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.enablement.jdt.classpath/build.xml b/plugins/org.eclipse.datatools.enablement.jdt.classpath/build.xml
new file mode 100644
index 0000000..3f4aea4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.jdt.classpath/build.xml
@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.datatools.connectivity.jdt" default="build.jars" basedir=".">
+
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${java.home}/lib">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins">
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.datatools.connectivity.jdt">
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.datatools.connectivity.jdt for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<zip destfile="${plugin.destination}/org.eclipse.datatools.connectivity.jdt_1.0.0.20061024.jar" basedir="${temp.folder}/org.eclipse.datatools.connectivity.jdt_1.0.0.20061024" filesonly="false" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="connectivityjdt.jar" depends="init" unless="connectivityjdt.jar" description="Create jar: org.eclipse.datatools.connectivity.jdt connectivityjdt.jar.">
+		<delete dir="${temp.folder}/connectivityjdt.jar.bin"/>
+		<mkdir dir="${temp.folder}/connectivityjdt.jar.bin"/>
+		<path id="connectivityjdt.jar.classpath">
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ui_3.2.1.M20060913-0800.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.runtime_3.2.0.v20060603.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.osgi_3.2.1.R32x_v20060919.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.equinox.common_3.2.0.v20060603.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.jobs_3.2.0.v20060603.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.runtime.compatibility.registry_3.2.1.R32x_v20060907/runtime_registry_compatibility.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.runtime.compatibility.registry_3.2.1.R32x_v20060907"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.equinox.registry_3.2.1.R32x_v20060814.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.apache.xerces_2.8.0.v200606131651/resolver.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.apache.xerces_2.8.0.v200606131651/xercesImpl.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.apache.xerces_2.8.0.v200606131651/xml-apis.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.equinox.preferences_3.2.1.R32x_v20060717.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.runtime.compatibility.registry_3.2.1.R32x_v20060907/@dot"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.contenttype_3.2.0.v20060603.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.runtime.compatibility.auth_3.2.0.v20060601.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.swt_3.2.1.v3235e.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.swt.win32.win32.x86_3.2.1.v3235.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.jface_3.2.1.M20060908-1000.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.commands_3.2.0.I20060605-1400.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ui.workbench_3.2.1.M20060906-0800.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ui.workbench.compatibility_3.2.0.I20060605-1400/@dot"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ui.workbench.compatibility_3.2.0.I20060605-1400/compatibility.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/com.ibm.icu_3.4.5.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.help_3.2.1.R321_v20060920.jar"/>
+			<pathelement path="../org.eclipse.core.expressions/bin"/>
+			<pathelement path="../org.eclipse.core.expressions/@dot"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.resources_3.2.1.R32x_v20060914.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.resources.compatibility_3.2.0.v20060603.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.resources.win32_3.2.0.v20060603.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.runtime.compatibility_3.1.100.v20060603.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.update.configurator_3.2.1.v20092006.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ant.core_3.1.100.v20060531.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.variables_3.1.100.v20060605.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.filesystem_1.0.0.v20060603.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.filesystem.win32.x86_1.0.0.v20060603.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.jdt.core_3.2.1.v_677_R32x.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.text_3.2.0.v20060605-1400.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.team.core_3.2.1.M20060711.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.jdt.ui_3.2.1.r321_v20060907.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ui.console_3.1.100.v20060605.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.jface.text_3.2.1.r321_v20060810.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ui.workbench.texteditor_3.2.0.v20060605-1400.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.search_3.2.1.r321_v20060726.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.core.filebuffers_3.2.1.r321_v20060721.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ui.ide_3.2.1.M20060915-1030.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ui.win32_3.2.0.I20060605-1400.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ui.views_3.2.1.M20060906-0800.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.update.core_3.2.1.v20092006.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.update.core.win32_3.2.1.v20092006.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.update.ui_3.2.1.v20092006.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ui.forms_3.2.0.v20060602.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.debug.core_3.2.1.v20060823.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.debug.ui_3.2.1.v20060823.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ui.editors_3.2.1.r321_v20060721.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.jdt.launching_3.2.1.r321_v20060731.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.jdt.debug_3.2.1.r321_v20060731/jdi.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.jdt.debug_3.2.1.r321_v20060731/jdimodel.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.jdt.debug_3.2.1.r321_v20060731/tools.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.compare_3.2.1.M20060711.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.team.ui_3.2.1.M200608151725.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ui.navigator_3.2.1.M20060913-0800.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ui.navigator.resources_3.2.1.M20060906-0800b.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ui.views.properties.tabbed_3.2.1.M20060830-0800.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ltk.core.refactoring_3.2.1.r321_v20060823.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.ltk.ui.refactoring_3.2.1.r321_v20060726.jar"/>
+			<pathelement path="../../../MyTargetPlatform3.2.1/eclipse/plugins/org.eclipse.jdt.core.manipulation_1.0.1.r321_v20060721.jar"/>
+			<pathelement path="../org.eclipse.datatools.connectivity/bin/"/>
+			<pathelement path="../org.eclipse.datatools.connectivity/connectivity.jar"/>
+			<pathelement path="../org.eclipse.datatools.connectivity.ui/bin/"/>
+			<pathelement path="../org.eclipse.datatools.connectivity.ui/connectivityui.jar"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${temp.folder}/connectivityjdt.jar.bin" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="connectivityjdt.jar.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler.connectivityjdt.jar.args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+			<compilerarg line="-log '${temp.folder}/connectivityjdt.jar.bin${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+		</javac>
+		<!-- Copy necessary resources -->
+		<copy todir="${temp.folder}/connectivityjdt.jar.bin" failonerror="true" overwrite="false">
+			<fileset dir="src/" excludes="**/*.java, **/package.htm*"			/>
+		</copy>
+		<mkdir dir="${build.result.folder}"/>
+		<jar destfile="${build.result.folder}/connectivityjdt.jar" basedir="${temp.folder}/connectivityjdt.jar.bin"/>
+		<delete dir="${temp.folder}/connectivityjdt.jar.bin"/>
+	</target>
+
+	<target name="connectivityjdtsrc.zip" depends="init" unless="connectivityjdtsrc.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<zip destfile="${build.result.folder}/connectivityjdtsrc.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/" includes="**/*.java"			/>
+		</zip>
+	</target>
+
+	<target name="build.jars" depends="init" description="Build all the jars for the plug-in: org.eclipse.datatools.connectivity.jdt.">
+		<available property="connectivityjdt.jar" file="${build.result.folder}/connectivityjdt.jar"/>
+		<antcall target="connectivityjdt.jar"/>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="connectivityjdtsrc.zip" file="${build.result.folder}/connectivityjdtsrc.zip"/>
+		<antcall target="connectivityjdtsrc.zip"/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.datatools.connectivity.jdt_1.0.0.20061024"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.datatools.connectivity.jdt_1.0.0.20061024" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}" includes="connectivityjdt.jar"			/>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.datatools.connectivity.jdt_1.0.0.20061024" failonerror="true" overwrite="false">
+			<fileset dir="${basedir}" includes="plugin.xml,plugin.properties,about.html,.options,META-INF/,connectivityjdt.jar"			/>
+		</copy>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.datatools.connectivity.jdt_1.0.0.20061024"/>
+		<copy file="${build.result.folder}/connectivityjdtsrc.zip" todir="${destination.temp.folder}/org.eclipse.datatools.connectivity.jdt_1.0.0.20061024" failonerror="false" overwrite="false"/>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.datatools.connectivity.jdt_1.0.0.20061024"/>
+		<copy file="${temp.folder}/connectivityjdt.jar.bin${logExtension}" todir="${destination.temp.folder}/org.eclipse.datatools.connectivity.jdt_1.0.0.20061024" failonerror="false" overwrite="false"/>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.datatools.connectivity.jdt of all the zips, jars and logs created.">
+		<delete file="${build.result.folder}/connectivityjdt.jar"/>
+		<delete file="${build.result.folder}/connectivityjdtsrc.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.datatools.connectivity.jdt_1.0.0.20061024.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.datatools.connectivity.jdt_1.0.0.20061024.zip"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="C:/Eclipse3.2/workspace/org.eclipse.datatools.connectivity.jdt" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.datatools.connectivity.jdt.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}" includes="**/*.bin${logExtension}"			/>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.datatools.connectivity.jdt_1.0.0.20061024.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+</project>
diff --git a/plugins/org.eclipse.datatools.enablement.jdt.classpath/eclipse32.png b/plugins/org.eclipse.datatools.enablement.jdt.classpath/eclipse32.png
new file mode 100644
index 0000000..568fac1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.jdt.classpath/eclipse32.png
Binary files differ
diff --git a/plugins/org.eclipse.datatools.enablement.jdt.classpath/plugin.properties b/plugins/org.eclipse.datatools.enablement.jdt.classpath/plugin.properties
new file mode 100644
index 0000000..db7664d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.jdt.classpath/plugin.properties
@@ -0,0 +1,14 @@
+################################################################################
+## Copyright (c) 2006 Sybase, Inc.
+## All rights reserved. This program and the accompanying materials
+## are made available under the terms of the Eclipse Public License v1.0
+## which accompanies this distribution, and is available at
+## http://www.eclipse.org/legal/epl-v10.html
+##
+## Contributors:
+##    Sybase, Inc. - initial API and implementation
+################################################################################ 
+Plugin.Name = Data Tools Platform Connectivity JDT Extension Plug-in
+Plugin.ProviderName = Eclipse Data Tools Platform
+
+driver.classpath.container.name = Connectivity Driver Definition
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.jdt.classpath/plugin.xml b/plugins/org.eclipse.datatools.enablement.jdt.classpath/plugin.xml
new file mode 100644
index 0000000..292d35b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.jdt.classpath/plugin.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension
+         point="org.eclipse.jdt.core.classpathContainerInitializer">
+      <classpathContainerInitializer
+            class="org.eclipse.datatools.enablement.jdt.classpath.internal.DriverClasspathContainerInitializer"
+            id="org.eclipse.datatools.connectivity.jdt.DRIVERLIBRARY"/>
+   </extension>
+   <extension
+         point="org.eclipse.jdt.ui.classpathContainerPage">
+      <classpathContainerPage
+            class="org.eclipse.datatools.enablement.jdt.classpath.internal.DriverClasspathContainerPage"
+            id="org.eclipse.datatools.connectivity.jdt.DRIVERLIBRARY"
+            name="%driver.classpath.container.name"/>
+   </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.datatools.enablement.jdt.classpath/src/org/eclipse/datatools/enablement/jdt/classpath/DriverClasspathContainer.java b/plugins/org.eclipse.datatools.enablement.jdt.classpath/src/org/eclipse/datatools/enablement/jdt/classpath/DriverClasspathContainer.java
new file mode 100644
index 0000000..81d958b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.jdt.classpath/src/org/eclipse/datatools/enablement/jdt/classpath/DriverClasspathContainer.java
@@ -0,0 +1,134 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.jdt.classpath;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.drivers.DriverManager;
+import org.eclipse.datatools.enablement.jdt.classpath.internal.ConnJDTPlugin;
+import org.eclipse.jdt.core.IClasspathContainer;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.JavaCore;
+
+/**
+ * Container that adapts the jar list from a driver instance
+ * to add the referenced jars to a Java project.
+ * @author brianf
+ *
+ */
+public class DriverClasspathContainer implements IClasspathContainer {
+
+	// descriptive name for the container
+	private String name;
+	
+	// local reference to the driver instance
+	private DriverInstance mDriverInstance;
+	
+	/**
+	 * @param libName
+	 */
+	public DriverClasspathContainer(String libName) {
+		this.name= libName;
+		mDriverInstance =
+			DriverManager.getInstance().getDriverInstanceByName(this.name);
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.core.IClasspathContainer#getClasspathEntries()
+	 */
+	public IClasspathEntry[] getClasspathEntries() {
+		IClasspathEntry[] entries = getEntries();
+		if (entries != null)
+			return entries;
+		return new IClasspathEntry[0];
+		
+	}
+	
+	/**
+	 * @param inFile
+	 * @return
+	 */
+	private IPath getPathForJavaIOFile ( java.io.File inFile ) {
+		try {
+			URL url = inFile.toURL();
+			try {
+				url = FileLocator.toFileURL(url);
+	
+				IPath path = new Path(url.getFile());
+				
+				return path;
+			} catch (IOException e) {
+				// do nothing
+			}
+		} catch (MalformedURLException e){
+			
+		}
+		return null;
+	}
+	
+	/**
+	 * @return
+	 */
+	private IClasspathEntry[] getEntries() {
+		ArrayList list = new ArrayList();
+		mDriverInstance = DriverManager.getInstance().getDriverInstanceByID(mDriverInstance.getId());
+		if (mDriverInstance != null) {
+			for (int i = 0; i < mDriverInstance.getJarListAsArray().length; i++) {
+				String path = mDriverInstance.getJarListAsArray()[i];
+				java.io.File file = new java.io.File(path);
+	
+				// if it's not a jar or zip, don't process it
+				if (!(file.getName().endsWith(".jar") ||
+						file.getName().endsWith(".zip")))
+					continue;
+				
+				IPath jarPath = getPathForJavaIOFile(file);
+				IClasspathEntry entry = JavaCore.newLibraryEntry(
+						jarPath, 
+						null, 
+						null);
+				list.add(entry);
+			}
+			if (list.size() > 0) {
+				return (IClasspathEntry[]) list.toArray( new IClasspathEntry[list.size()]);
+			}
+		}
+		return new IClasspathEntry[0];
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.core.IClasspathContainer#getDescription()
+	 */
+	public String getDescription() {
+		return this.name;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.core.IClasspathContainer#getKind()
+	 */
+	public int getKind() {
+		return K_APPLICATION;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.core.IClasspathContainer#getPath()
+	 */
+	public IPath getPath() {
+		return new Path(ConnJDTPlugin.DRIVER_CONTAINER_ID).append(this.name);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.jdt.classpath/src/org/eclipse/datatools/enablement/jdt/classpath/internal/ConnJDTPlugin.java b/plugins/org.eclipse.datatools.enablement.jdt.classpath/src/org/eclipse/datatools/enablement/jdt/classpath/internal/ConnJDTPlugin.java
new file mode 100644
index 0000000..0a2dcd8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.jdt.classpath/src/org/eclipse/datatools/enablement/jdt/classpath/internal/ConnJDTPlugin.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.jdt.classpath.internal;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ * 
+ * @author brianf
+ */
+public class ConnJDTPlugin extends AbstractUIPlugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.datatools.enablement.jdt.classpath.internal";
+
+	// ID for the driver library container type
+	public static final String DRIVER_CONTAINER_ID= "org.eclipse.datatools.connectivity.jdt.DRIVERLIBRARY"; //$NON-NLS-1$
+
+	// The shared instance
+	private static ConnJDTPlugin plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public ConnJDTPlugin() {
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static ConnJDTPlugin getDefault() {
+		return plugin;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.jdt.classpath/src/org/eclipse/datatools/enablement/jdt/classpath/internal/DriverClasspathContainerInitializer.java b/plugins/org.eclipse.datatools.enablement.jdt.classpath/src/org/eclipse/datatools/enablement/jdt/classpath/internal/DriverClasspathContainerInitializer.java
new file mode 100644
index 0000000..9116be3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.jdt.classpath/src/org/eclipse/datatools/enablement/jdt/classpath/internal/DriverClasspathContainerInitializer.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2009 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ * 				brianf - update for 267123
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.jdt.classpath.internal;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.drivers.DriverManager;
+import org.eclipse.datatools.enablement.jdt.classpath.DriverClasspathContainer;
+import org.eclipse.jdt.core.ClasspathContainerInitializer;
+import org.eclipse.jdt.core.IClasspathContainer;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+
+/**
+ * Initializes the driver classpath container 
+ * @author brianf
+ *
+ */
+public class DriverClasspathContainerInitializer extends ClasspathContainerInitializer {
+
+	public void initialize(IPath containerPath, IJavaProject javaProject)
+		throws CoreException {
+		if (containerPath != null && isDriverContainer(containerPath)) {
+			String name= containerPath.segment(1);
+			DriverInstance di = DriverManager.getInstance().getDriverInstanceByName(name);
+			if (di != null) {
+				// make sure the driver instance isn't null (in case the driver hasn't been defined yet)
+				IClasspathContainer container = new DriverClasspathContainer(di.getName());
+				JavaCore.setClasspathContainer(containerPath, new IJavaProject[] { javaProject }, new IClasspathContainer[] {container},  null);
+			}
+		}
+	}
+	
+	/**
+	 * @param path
+	 * @return
+	 */
+	private boolean isDriverContainer(IPath path) {
+		return path != null && path.segmentCount() == 2 && ConnJDTPlugin.DRIVER_CONTAINER_ID.equals(path.segment(0));
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.jdt.core.ClasspathContainerInitializer#getComparisonID(org.eclipse.core.runtime.IPath, org.eclipse.jdt.core.IJavaProject)
+	 */
+	public Object getComparisonID(IPath containerPath, IJavaProject project) {
+		if (containerPath == null || project == null)
+			return null;
+			
+		return containerPath.segment(0) + "/" + project.getPath().segment(0); //$NON-NLS-1$
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.core.ClasspathContainerInitializer#canUpdateClasspathContainer(org.eclipse.core.runtime.IPath, org.eclipse.jdt.core.IJavaProject)
+	 */
+	public boolean canUpdateClasspathContainer(IPath containerPath, IJavaProject project) {
+		return isDriverContainer(containerPath);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.core.ClasspathContainerInitializer#getDescription(org.eclipse.core.runtime.IPath, org.eclipse.jdt.core.IJavaProject)
+	 */
+	public String getDescription(IPath containerPath, IJavaProject project) {
+		if (isDriverContainer(containerPath)) {
+			return containerPath.segment(1);
+		}
+		return super.getDescription(containerPath, project);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.core.ClasspathContainerInitializer#requestClasspathContainerUpdate(org.eclipse.core.runtime.IPath, org.eclipse.jdt.core.IJavaProject, org.eclipse.jdt.core.IClasspathContainer)
+	 */
+	public void requestClasspathContainerUpdate(IPath containerPath, IJavaProject project, IClasspathContainer containerSuggestion) throws CoreException {
+		// empty
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.jdt.classpath/src/org/eclipse/datatools/enablement/jdt/classpath/internal/DriverClasspathContainerPage.java b/plugins/org.eclipse.datatools.enablement.jdt.classpath/src/org/eclipse/datatools/enablement/jdt/classpath/internal/DriverClasspathContainerPage.java
new file mode 100644
index 0000000..6eaa639
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.jdt.classpath/src/org/eclipse/datatools/enablement/jdt/classpath/internal/DriverClasspathContainerPage.java
@@ -0,0 +1,184 @@
+/*******************************************************************************
+ * Copyright (c) 2006-2009 Sybase, Inc. and Others
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ * 				brianf - fix for BZ 280668
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.jdt.classpath.internal;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.internal.ui.DriverListCombo;
+import org.eclipse.datatools.enablement.jdt.classpath.DriverClasspathContainer;
+import org.eclipse.jdt.core.IClasspathContainer;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.ui.wizards.IClasspathContainerPage;
+import org.eclipse.jdt.ui.wizards.IClasspathContainerPageExtension;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * Wizard page presented to the user to create the classpath
+ * container from the driver instance.
+ * @author brianf
+ *
+ */
+public class DriverClasspathContainerPage extends WizardPage implements
+		IClasspathContainerPage, IClasspathContainerPageExtension {
+
+	private DriverListCombo combo;
+	private Set fUsedPaths;
+	private String initialSelectName = null;
+	private boolean fIsExported;
+	private IClasspathEntry fEditResult= null;
+	private IJavaProject fProject = null;
+
+	/**
+	 * Constructor
+	 */
+	public DriverClasspathContainerPage() {
+		this(DriverClasspathMessages.getString("DriverClasspathContainerPage.name"));
+		this.setTitle(DriverClasspathMessages.getString("DriverClasspathContainerPage.title"));
+		this.setMessage(DriverClasspathMessages.getString("DriverClasspathContainerPage.msg"));
+	}
+	
+	/**
+	 * @param pageName
+	 */
+	public DriverClasspathContainerPage(String pageName) {
+		super(pageName);
+		fUsedPaths= new HashSet();
+	}
+
+	/**
+	 * @param pageName
+	 * @param title
+	 * @param titleImage
+	 */
+	public DriverClasspathContainerPage(String pageName, String title,
+			ImageDescriptor titleImage) {
+		super(pageName, title, titleImage);
+		fUsedPaths= new HashSet();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.ui.wizards.IClasspathContainerPage#finish()
+	 */
+	public boolean finish() {
+		return true;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.ui.wizards.IClasspathContainerPage#getSelection()
+	 */
+	public IClasspathEntry getSelection() {
+		if (fEditResult != null) {
+			return JavaCore.newContainerEntry(fEditResult.getPath(), fIsExported);
+		}
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.ui.wizards.IClasspathContainerPage#setSelection(org.eclipse.jdt.core.IClasspathEntry)
+	 */
+	public void setSelection(IClasspathEntry containerEntry) {
+		fIsExported= containerEntry != null && containerEntry.isExported();
+
+		if (containerEntry != null) {
+			fUsedPaths.remove(containerEntry.getPath());
+			IPath path = containerEntry.getPath();
+			if (isDriverContainer(path)) {
+				initialSelectName = path.segment(1);
+			}
+		}
+	}
+
+	/**
+	 * @param path
+	 * @return
+	 */
+	private boolean isDriverContainer(IPath path) {
+		return path != null && path.segmentCount() == 2 && ConnJDTPlugin.DRIVER_CONTAINER_ID.equals(path.segment(0));
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.ui.wizards.IClasspathContainerPageExtension#initialize(org.eclipse.jdt.core.IJavaProject, org.eclipse.jdt.core.IClasspathEntry[])
+	 */
+	public void initialize(
+			IJavaProject project,
+			IClasspathEntry[] currentEntries) {
+			fProject = project;
+			for (int i= 0; i < currentEntries.length; i++) {
+				IClasspathEntry curr= currentEntries[i];
+				if (curr.getEntryKind() == IClasspathEntry.CPE_CONTAINER) {
+					fUsedPaths.add(curr.getPath());
+				}
+			}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+	 */
+	public void createControl(Composite parent) {
+		Composite composite= new Composite(parent, SWT.NONE);
+		composite.setLayout(new GridLayout(1, true));
+		composite.setFont(parent.getFont());
+		
+		combo = new DriverListCombo();
+		combo.setLabelText(DriverClasspathMessages.getString("DriverClasspathContainerPage.combo.title"));
+		combo.createContents(composite);
+		combo.getCombo().setLayoutData(new GridData(SWT.FILL, 0, true, false));
+		combo.setSelection(this.initialSelectName);
+		combo.addChangeListener(new ChangeListener() {
+			public void stateChanged(ChangeEvent arg0) {
+				update(DriverClasspathContainerPage.this.combo.getSelectedDriverInstance());
+			}
+		});
+		
+		Dialog.applyDialogFont(composite);
+		setControl(composite);
+	}
+
+	private void update(DriverInstance di) {
+		// brianf - fix for BZ 280668
+		if (di != null) {
+			IClasspathContainer container= new DriverClasspathContainer(di.getName());
+			try {
+				JavaCore.setClasspathContainer(container.getPath(),
+					new IJavaProject[]{fProject}, new IClasspathContainer[] {container}, null);
+				IClasspathEntry entry = JavaCore.newContainerEntry(container.getPath());
+				fEditResult = entry;
+			} catch (JavaModelException e) {
+				// ignore
+				fEditResult = null;
+			}
+		}
+		else {
+			fEditResult = null;
+		}
+	}
+
+	public void dispose() {
+		this.combo.dispose();
+		super.dispose();
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.jdt.classpath/src/org/eclipse/datatools/enablement/jdt/classpath/internal/DriverClasspathMessages.java b/plugins/org.eclipse.datatools.enablement.jdt.classpath/src/org/eclipse/datatools/enablement/jdt/classpath/internal/DriverClasspathMessages.java
new file mode 100644
index 0000000..92c41f7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.jdt.classpath/src/org/eclipse/datatools/enablement/jdt/classpath/internal/DriverClasspathMessages.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.jdt.classpath.internal;
+
+import java.text.MessageFormat;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * Utility class which helps managing messages
+ * 
+ * @author brianf
+ */
+public class DriverClasspathMessages {
+
+	// constants
+	private static final String RESOURCE_BUNDLE = "org.eclipse.datatools.enablement.jdt.classpath.internal.messages";//$NON-NLS-1$
+	private static ResourceBundle bundle = ResourceBundle
+			.getBundle(RESOURCE_BUNDLE);
+
+	/**
+	 * Private constructor
+	 */
+	private DriverClasspathMessages() {
+		// prevent instantiation of class
+	}
+
+	/**
+	 * Returns the formatted message for the given key in the resource bundle.
+	 * 
+	 * @param key the resource name
+	 * @param args the message arguments
+	 * @return the string
+	 */
+	public static String format(String key, Object[] args) {
+		return MessageFormat.format(getString(key), args);
+	}
+
+	/**
+	 * Returns the resource object with the given key in the resource bundle. If
+	 * there isn't any value under the given key, the key is returned.
+	 * 
+	 * @param key the resource name
+	 * @return the string
+	 */
+	public static String getString(String key) {
+		try {
+			return bundle.getString(key);
+		}
+		catch (MissingResourceException e) {
+			return key;
+		}
+	}
+
+	/**
+	 * Returns the resource object with the given key in the resource bundle. If
+	 * there isn't any value under the given key, the default value is returned.
+	 * 
+	 * @param key the resource name
+	 * @param def the default value
+	 * @return the string
+	 */
+	public static String getString(String key, String def) {
+		try {
+			return bundle.getString(key);
+		}
+		catch (MissingResourceException e) {
+			return def;
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.jdt.classpath/src/org/eclipse/datatools/enablement/jdt/classpath/internal/messages.properties b/plugins/org.eclipse.datatools.enablement.jdt.classpath/src/org/eclipse/datatools/enablement/jdt/classpath/internal/messages.properties
new file mode 100644
index 0000000..480280f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.jdt.classpath/src/org/eclipse/datatools/enablement/jdt/classpath/internal/messages.properties
@@ -0,0 +1,16 @@
+################################################################################
+## Copyright (c) 2006 Sybase, Inc.
+## All rights reserved. This program and the accompanying materials
+## are made available under the terms of the Eclipse Public License v1.0
+## which accompanies this distribution, and is available at
+## http://www.eclipse.org/legal/epl-v10.html
+##
+## Contributors:
+##    Sybase, Inc. - initial API and implementation
+################################################################################ 
+# package: org.eclipse.datatools.connectivity.jdt.internal
+
+DriverClasspathContainerPage.name = MyDriverClassPathPage
+DriverClasspathContainerPage.title = Connectivity Driver Definition
+DriverClasspathContainerPage.msg = Select a driver definition to add its jars to the classpath.
+DriverClasspathContainerPage.combo.title = Available Driver Definitions:
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/.gitignore b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/.gitignore
new file mode 100644
index 0000000..60463af
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/.gitignore
@@ -0,0 +1,2 @@
+bin
+build.xml
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/.project b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/.project
new file mode 100644
index 0000000..d0a407e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/.project
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..2034018
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition; singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/about.html b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/build.properties b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/build.properties
new file mode 100644
index 0000000..d59a9b8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/build.properties
@@ -0,0 +1,21 @@
+###############################################################################
+# Copyright (c) 2001, 2004 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+bin.includes = plugin.xml,\
+               runtime/,\
+               plugin.properties,\
+               about.html,\
+               META-INF/
+plugin.version =	1.0.0.200706071
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/plugin.properties b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/plugin.properties
new file mode 100644
index 0000000..b8f59f6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/plugin.properties
@@ -0,0 +1,25 @@
+###############################################################################
+# Copyright (c) 2001, 2004 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+
+pluginName = Eclipse Data Tools Platform SQL Server Database Definition Plug-in
+nl1PluginName = SQL Server Database Definition  NL1 Fragment
+providerName = Eclipse Data Tools Platform
+
+2000ProductString = SQL Server
+2000VersionString = 2000
+2005ProductString = SQL Server
+2005VersionString = 2005
+2008ProductString = SQL Server
+2008VersionString = 2008
+2012ProductString = SQL Server
+2012VersionString = 2012
+2014ProductString = SQL Server
+2014VersionString = 2014
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/plugin.xml b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/plugin.xml
new file mode 100644
index 0000000..29b31c6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/plugin.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+   
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.databaseDefinition">
+      <definition
+            version="2000"
+            product="SQL Server"
+            productDisplayString="%2000ProductString"
+            versionDisplayString="%2000VersionString"
+            file="runtime/vendors/SQL Server_2000/SQL Server_2000.xmi">
+      </definition>
+      <definition
+            version="2005"
+            product="SQL Server"
+            productDisplayString="%2005ProductString"
+            versionDisplayString="%2005VersionString"
+            file="runtime/vendors/SQL Server_2005/SQL Server_2005.xmi">
+      </definition>
+      <definition
+            version="2008"
+            product="SQL Server"
+            productDisplayString="%2008ProductString"
+            versionDisplayString="%2008VersionString"
+            file="runtime/vendors/SQL Server_2008/SQL Server_2008.xmi">
+      </definition>
+      <definition
+            version="2012"
+            product="SQL Server"
+            productDisplayString="%2012ProductString"
+            versionDisplayString="%2012VersionString"
+            file="runtime/vendors/SQL Server_2012/SQL Server_2012.xmi">
+      </definition>
+      <definition
+            version="2014"
+            product="SQL Server"
+            productDisplayString="%2014ProductString"
+            versionDisplayString="%2014VersionString"
+            file="runtime/vendors/SQL Server_2014/SQL Server_2014.xmi">
+      </definition>
+   </extension>
+</plugin>
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/runtime/vendors/SQL Server_2000/SQL Server_2000.xmi b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/runtime/vendors/SQL Server_2000/SQL Server_2000.xmi
new file mode 100644
index 0000000..07b63aa
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/runtime/vendors/SQL Server_2000/SQL Server_2000.xmi
@@ -0,0 +1,894 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="SQL Server" version="2000" maximumIdentifierLength="128"
+ viewTriggerSupported="true">
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_1" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="long">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIGINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_2" multipleColumnsSupported="true" primitiveType="INTEGER" jdbcEnumType="-7" javaClassName="boolean">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" lengthSupported="true" lengthUnit="BYTE" multipleColumnsSupported="true" defaultLength="50" maximumLength="8000" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BINARY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_1" lengthSupported="true" lengthUnit="BYTE" multipleColumnsSupported="true" defaultLength="50" maximumLength="8000" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARBINARY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_2" multipleColumnsSupported="true" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="-4" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>IMAGE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" multipleColumnsSupported="true"  maximumLength="8000" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>SYSTEM_USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR</name>
+    <name>CHARACTER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" multipleColumnsSupported="true"  maximumLength="4000" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>SYSTEM_USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" multipleColumnsSupported="true" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="-1" javaClassName="java.sql.Clob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_LARGE_OBJECT_1" multipleColumnsSupported="true" primitiveType="NATIONAL_CHARACTER_LARGE_OBJECT" jdbcEnumType="-10" javaClassName="java.sql.Clob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NTEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" multipleColumnsSupported="true"  maximumLength="8000" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>SYSTEM_USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR</name>
+    <name>CHARACTER VARYING</name>
+    <name>CHAR VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_2" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>UNIQUEIDENTIFIER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" multipleColumnsSupported="true"  maximumLength="4000" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>SYSTEM_USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NVARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="DATE" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATETIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" scaleSupported="true" precisionSupported="true" maximumPrecision="38" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE PRECISION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" precisionSupported="true" maximumPrecision="53" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="FLOAT" jdbcEnumType="6" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INT</name>
+    <name>INTEGER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" scaleSupported="true" precisionSupported="true" maximumPrecision="38" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_2" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>MONEY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_3" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLMONEY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_2" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="DATE" jdbcEnumType="92" javaClassName="java.sql.Time">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLDATETIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_2" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="SMALLINT" jdbcEnumType="-6" javaClassName="short">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TINYINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_2" keyConstraintSupported="true" primitiveType="CHARACTER" jdbcEnumType="-150" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SQL_VARIANT</name>
+  </predefinedDataTypeDefinitions>
+  <triggerDefinition maximumIdentifierLength="128" typeSupported="true" insteadOfTriggerSupported="true"/>
+  <columnDefinition maximumIdentifierLength="128" identitySupported="true" computedSupported="true" identityStartValueSupported="true" identityIncrementSupported="true"/>
+  <constraintDefinition maximumPrimaryKeyIdentifierLength="128" maximumForeignKeyIdentifierLength="128" maximumCheckConstraintIdentifierLength="128" uniqueKeyNullable="true">
+    <parentUpdateDRIRuleType>CASCADE</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+  </constraintDefinition>
+  <queryDefinition hostVariableMarker="@"/>
+  <indexDefinition maximumIdentifierLength="128" clusteringSupported="true"/>
+  <viewDefinition maximumIdentifierLength="128" indexSupported="true"/>
+  <tableDefinition maximumIdentifierLength="128"/>
+  <schemaDefinition maximumIdentifierLength="128"/>
+  <storedProcedureDefinition maximumIdentifierLength="128">
+    <functionLanguageType>SQL</functionLanguageType>
+  </storedProcedureDefinition>
+  <SQLSyntaxDefinition terminationCharacter="GO">
+    <keywords>A</keywords>
+	<keywords>ABORT</keywords>
+	<keywords>ABS</keywords>
+	<keywords>ABSOLUTE</keywords>
+	<keywords>ACCESS</keywords>
+	<keywords>ACOS</keywords>
+	<keywords>ACQUIRE</keywords>
+	<keywords>ACTION</keywords>
+	<keywords>ACTIVATE</keywords>
+	<keywords>ADA</keywords>
+	<keywords>ADD</keywords>
+	<keywords>ADDFORM</keywords>
+	<keywords>ADMIN</keywords>
+	<keywords>AFTER</keywords>
+	<keywords>AGGREGATE</keywords>
+	<keywords>ALIAS</keywords>
+	<keywords>ALL</keywords>
+	<keywords>ALLOCATE</keywords>
+	<keywords>ALTER</keywords>
+	<keywords>AN</keywords>
+	<keywords>ANALYZE</keywords>
+	<keywords>AND</keywords>
+	<keywords>ANY</keywords>
+	<keywords>APPEND</keywords>
+	<keywords>ARCHIVE</keywords>
+	<keywords>ARCHIVELOG</keywords>
+	<keywords>ARE</keywords>
+	<keywords>ARRAY</keywords>
+	<keywords>ARRAYLEN</keywords>
+	<keywords>AS</keywords>
+	<keywords>ASC</keywords>
+	<keywords>ASCII</keywords>
+	<keywords>ASIN</keywords>
+	<keywords>ASSERTION</keywords>
+	<keywords>AT</keywords>
+	<keywords>ATAN</keywords>
+	<keywords>AUDIT</keywords>
+	<keywords>AUTHORIZATION</keywords>
+	<keywords>AVG</keywords>
+	<keywords>AVGU</keywords>
+	<keywords>BACKUP</keywords>
+	<keywords>BECOME</keywords>
+	<keywords>BEFORE</keywords>
+	<keywords>BEGIN</keywords>
+	<keywords>BETWEEN</keywords>
+	<keywords>BIGINT</keywords>
+	<keywords>BINARY</keywords>
+	<keywords>BIND</keywords>
+	<keywords>BINDING</keywords>
+	<keywords>BIT</keywords>
+	<keywords>BLOB</keywords>
+	<keywords>BLOCK</keywords>
+	<keywords>BODY</keywords>
+	<keywords>BOOLEAN</keywords>
+	<keywords>BOTH</keywords>
+	<keywords>BREADTH</keywords>
+	<keywords>BREAK</keywords>
+	<keywords>BREAKDISPLAY</keywords>
+	<keywords>BROWSE</keywords>
+	<keywords>BUFFERPOOL</keywords>
+	<keywords>BULK</keywords>
+	<keywords>BY</keywords>
+	<keywords>BYREF</keywords>
+	<keywords>CACHE</keywords>
+	<keywords>CALL</keywords>
+	<keywords>CALLPROC</keywords>
+	<keywords>CANCEL</keywords>
+	<keywords>CAPTURE</keywords>
+	<keywords>CASCADE</keywords>
+	<keywords>CASCADED</keywords>
+	<keywords>CASE</keywords>
+	<keywords>CAST</keywords>
+	<keywords>CATALOG</keywords>
+	<keywords>CCSID</keywords>
+	<keywords>CEILING</keywords>
+	<keywords>CHANGE</keywords>
+	<keywords>CHAR</keywords>
+	<keywords>CHARACTER</keywords>
+	<keywords>CHARTOROWID</keywords>
+	<keywords>CHECK</keywords>
+	<keywords>CLASS</keywords>
+	<keywords>CLOB</keywords>
+	<keywords>CHECKPOINT</keywords>
+	<keywords>CHR</keywords>
+	<keywords>CLEANUP</keywords>
+	<keywords>CLEAR</keywords>
+	<keywords>CLEARROW</keywords>
+	<keywords>CLOSE</keywords>
+	<keywords>CLUSTER</keywords>
+	<keywords>CLUSTERED</keywords>
+	<keywords>COALESCE</keywords>
+	<keywords>COBOL</keywords>
+	<keywords>COLGROUP</keywords>
+	<keywords>COLLATE</keywords>
+	<keywords>COLLATION</keywords>
+	<keywords>COLLECTION</keywords>
+	<keywords>COLUMN</keywords>
+	<keywords>COMMAND</keywords>
+	<keywords>COMMENT</keywords>
+	<keywords>COMMIT</keywords>
+	<keywords>COMPLETION</keywords>
+	<keywords>COMMITTED</keywords>
+	<keywords>COMPILE</keywords>
+	<keywords>COMPLEX</keywords>
+	<keywords>COMPRESS</keywords>
+	<keywords>COMPUTE</keywords>
+	<keywords>CONCAT</keywords>
+	<keywords>CONFIRM</keywords>
+	<keywords>CONNECT</keywords>
+	<keywords>CONNECTION</keywords>
+	<keywords>CONSTRAINT</keywords>
+	<keywords>CONSTRAINTS</keywords>
+	<keywords>CONSTRUCTOR</keywords>
+	<keywords>CONTAINS</keywords>
+	<keywords>CONTAINSTABLE</keywords>
+	<keywords>CONTENTS</keywords>
+	<keywords>CONTINUE</keywords>
+	<keywords>CONTROLFILE</keywords>
+	<keywords>CONTROLROW</keywords>
+	<keywords>CONVERT</keywords>
+	<keywords>COPY</keywords>
+	<keywords>CORRESPONDING</keywords>
+	<keywords>COS</keywords>
+	<keywords>COUNT</keywords>
+	<keywords>COUNTU</keywords>
+	<keywords>CREATE</keywords>
+	<keywords>CROSS</keywords>
+	<keywords>CUBE</keywords>
+	<keywords>CURRENT</keywords>
+	<keywords>CURRENT_DATE</keywords>
+	<keywords>CURRENT_PATH</keywords>
+	<keywords>CURRENT_ROLE</keywords>
+	<keywords>CURRENT_TIME</keywords>
+	<keywords>CURRENT_TIMESTAMP</keywords>
+	<keywords>CURRENT_USER</keywords>
+	<keywords>CURSOR</keywords>
+	<keywords>CVAR</keywords>
+	<keywords>CYCLE</keywords>
+	<keywords>DATA</keywords>
+	<keywords>DATABASE</keywords>
+	<keywords>DATAFILE</keywords>
+	<keywords>DATAHANDLER</keywords>
+	<keywords>DATAPAGES</keywords>
+	<keywords>DATE</keywords>
+	<keywords>DAY</keywords>
+	<keywords>DAYOFMONTH</keywords>
+	<keywords>DAYOFWEEK</keywords>
+	<keywords>DAYOFYEAR</keywords>
+	<keywords>DAYS</keywords>
+	<keywords>DBA</keywords>
+	<keywords>DBCC</keywords>
+	<keywords>DBSPACE</keywords>
+	<keywords>DEALLOCATE</keywords>
+	<keywords>DEC</keywords>
+	<keywords>DECIMAL</keywords>
+	<keywords>DECLARATION</keywords>
+	<keywords>DECLARE</keywords>
+	<keywords>DECODE</keywords>
+	<keywords>DEFAULT</keywords>
+	<keywords>DEFERRABLE</keywords>
+	<keywords>DEFERRED</keywords>
+	<keywords>DEFINE</keywords>
+	<keywords>DEFINITION</keywords>
+	<keywords>DEGREES</keywords>
+	<keywords>DELETE</keywords>
+	<keywords>DEPTH</keywords>
+	<keywords>DEREF</keywords>
+	<keywords>DELETEROW</keywords>
+	<keywords>DENY</keywords>
+	<keywords>DESC</keywords>
+	<keywords>DESCRIBE</keywords>
+	<keywords>DESCRIPTOR</keywords>
+	<keywords>DESTROY</keywords>
+	<keywords>DHTYPE</keywords>
+	<keywords>DESTRUCTOR</keywords>
+	<keywords>DETERMINISTIC</keywords>
+	<keywords>DICTIONARY</keywords>
+	<keywords>DIAGNOSTICS</keywords>
+	<keywords>DIRECT</keywords>
+	<keywords>DISABLE</keywords>
+	<keywords>DISCONNECT</keywords>
+	<keywords>DISK</keywords>
+	<keywords>DISMOUNT</keywords>
+	<keywords>DISPLAY</keywords>
+	<keywords>DISTINCT</keywords>
+	<keywords>DISTRIBUTE</keywords>
+	<keywords>DISTRIBUTED</keywords>
+	<keywords>DO</keywords>
+	<keywords>DOMAIN</keywords>
+	<keywords>DOUBLE</keywords>
+	<keywords>DOWN</keywords>
+	<keywords>DROP</keywords>
+	<keywords>DUMMY</keywords>
+	<keywords>DUMP</keywords>
+	<keywords>DYNAMIC</keywords>
+	<keywords>EACH</keywords>
+	<keywords>EDITPROC</keywords>
+	<keywords>ELSE</keywords>
+	<keywords>ELSEIF</keywords>
+	<keywords>ENABLE</keywords>
+	<keywords>END</keywords>
+	<keywords>ENDDATA</keywords>
+	<keywords>ENDDISPLAY</keywords>
+	<keywords>ENDEXEC</keywords>
+	<keywords>END-EXEC</keywords>
+	<keywords>ENDFORMS</keywords>
+	<keywords>ENDIF</keywords>
+	<keywords>ENDLOOP</keywords>
+	<keywords>EQUALS</keywords>
+	<keywords>ENDSELECT</keywords>
+	<keywords>ENDWHILE</keywords>
+	<keywords>ERASE</keywords>
+	<keywords>ERRLVL</keywords>
+	<keywords>ERROREXIT</keywords>
+	<keywords>ESCAPE</keywords>
+	<keywords>EVENTS</keywords>
+	<keywords>EVERY</keywords>
+	<keywords>EXCEPT</keywords>
+	<keywords>EXCEPTION</keywords>
+	<keywords>EXCEPTIONS</keywords>
+	<keywords>EXCLUDE</keywords>
+	<keywords>EXCLUDING</keywords>
+	<keywords>EXCLUSIVE</keywords>
+	<keywords>EXEC</keywords>
+	<keywords>EXECUTE</keywords>
+	<keywords>EXISTS</keywords>
+	<keywords>EXIT</keywords>
+	<keywords>EXP</keywords>
+	<keywords>EXPLAIN</keywords>
+	<keywords>EXPLICIT</keywords>
+	<keywords>EXTENT</keywords>
+	<keywords>EXTERNAL</keywords>
+	<keywords>EXTERNALLY</keywords>
+	<keywords>EXTRACT</keywords>
+	<keywords>FALSE</keywords>
+	<keywords>FETCH</keywords>
+	<keywords>FIELD</keywords>
+	<keywords>FIELDPROC</keywords>
+	<keywords>FILE</keywords>
+	<keywords>FILLFACTOR</keywords>
+	<keywords>FINALIZE</keywords>
+	<keywords>FINALIZE</keywords>
+	<keywords>FIRST</keywords>
+	<keywords>FLOAT</keywords>
+	<keywords>FLOOR</keywords>
+	<keywords>FLOPPY</keywords>
+	<keywords>FLUSH</keywords>
+	<keywords>FOR</keywords>
+	<keywords>FORCE</keywords>
+	<keywords>FORMDATA</keywords>
+	<keywords>FORMINIT</keywords>
+	<keywords>FORMS</keywords>
+	<keywords>FORTRAN</keywords>
+	<keywords>FOREIGN</keywords>
+	<keywords>FOUND</keywords>
+	<keywords>FREELIST</keywords>
+	<keywords>FREELISTS</keywords>
+	<keywords>FREETEXT</keywords>
+	<keywords>FREETEXTTABLE</keywords>
+	<keywords>FROM</keywords>
+	<keywords>FREE</keywords>
+	<keywords>FULL</keywords>
+	<keywords>FUNCTION</keywords>
+	<keywords>GENERAL</keywords>
+	<keywords>GET</keywords>
+	<keywords>GETCURRENTCONNECTION</keywords>
+	<keywords>GETFORM</keywords>
+	<keywords>GETOPER</keywords>
+	<keywords>GETROW</keywords>
+	<keywords>GLOBAL</keywords>
+	<keywords>GO</keywords>
+	<keywords>GOTO</keywords>
+	<keywords>GRANT</keywords>
+	<keywords>GRANTED</keywords>
+	<keywords>GRAPHIC</keywords>
+	<keywords>GREATEST</keywords>
+	<keywords>GROUP</keywords>
+	<keywords>GROUPING</keywords>
+	<keywords>GROUPS</keywords>
+	<keywords>HASH</keywords>
+	<keywords>HAVING</keywords>
+	<keywords>HOST</keywords>
+	<keywords>HELP</keywords>
+	<keywords>HELPFILE</keywords>
+	<keywords>HOLDLOCK</keywords>
+	<keywords>HOUR</keywords>
+	<keywords>HOURS</keywords>
+	<keywords>IDENTIFIED</keywords>
+	<keywords>IDENTITY</keywords>
+	<keywords>IGNORE</keywords>
+	<keywords>IDENTITYCOL</keywords>
+	<keywords>IF</keywords>
+	<keywords>IFNULL</keywords>
+	<keywords>IIMESSAGE</keywords>
+	<keywords>IIPRINTF</keywords>
+	<keywords>IMMEDIATE</keywords>
+	<keywords>IMPORT</keywords>
+	<keywords>IN</keywords>
+	<keywords>INCLUDE</keywords>
+	<keywords>INCLUDING</keywords>
+	<keywords>INCREMENT</keywords>
+	<keywords>INDEX</keywords>
+	<keywords>INDEXPAGES</keywords>
+	<keywords>INDICATOR</keywords>
+	<keywords>INITCAP</keywords>
+	<keywords>INITIAL</keywords>
+	<keywords>INITIALIZE</keywords>
+	<keywords>INITIALLY</keywords>
+	<keywords>INITRANS</keywords>
+	<keywords>INITTABLE</keywords>
+	<keywords>INNER</keywords>
+	<keywords>INOUT</keywords>
+	<keywords>INPUT</keywords>
+	<keywords>INSENSITIVE</keywords>
+	<keywords>INSERT</keywords>
+	<keywords>INSERTROW</keywords>
+	<keywords>INSTANCE</keywords>
+	<keywords>INSTR</keywords>
+	<keywords>INT</keywords>
+	<keywords>INTEGER</keywords>
+	<keywords>INTEGRITY</keywords>
+	<keywords>INTERFACE</keywords>
+	<keywords>INTERSECT</keywords>
+	<keywords>INTERVAL</keywords>
+	<keywords>INTO</keywords>
+	<keywords>IS</keywords>
+	<keywords>ISOLATION</keywords>
+	<keywords>ITERATE</keywords>
+	<keywords>JOIN</keywords>
+	<keywords>KEY</keywords>
+	<keywords>KILL</keywords>
+	<keywords>LABEL</keywords>
+	<keywords>LANGUAGE</keywords>
+	<keywords>LARGE</keywords>
+	<keywords>LAST</keywords>
+	<keywords>LATERAL</keywords>
+	<keywords>LAYER</keywords>
+	<keywords>LEADING</keywords>
+	<keywords>LEAST</keywords>
+	<keywords>LEFT</keywords>
+	<keywords>LESS</keywords>
+	<keywords>LENGTH</keywords>
+	<keywords>LEVEL</keywords>
+	<keywords>LIKE</keywords>
+	<keywords>LIMIT</keywords>
+	<keywords>LINENO</keywords>
+	<keywords>LINK</keywords>
+	<keywords>LIST</keywords>
+	<keywords>LISTS</keywords>
+	<keywords>LOAD</keywords>
+	<keywords>LOADTABLE</keywords>
+	<keywords>LOCAL</keywords>
+	<keywords>LOCALTIME</keywords>
+	<keywords>LOCALTIMESTAMP</keywords>
+	<keywords>LOCATOR</keywords>
+	<keywords>LOCATE</keywords>
+	<keywords>LOCK</keywords>
+	<keywords>LOCKSIZE</keywords>
+	<keywords>LOG</keywords>
+	<keywords>LOGFILE</keywords>
+	<keywords>LONG</keywords>
+	<keywords>LONGINT</keywords>
+	<keywords>LOWER</keywords>
+	<keywords>LPAD</keywords>
+	<keywords>LTRIM</keywords>
+	<keywords>LVARBINARY</keywords>
+	<keywords>LVARCHAR</keywords>
+	<keywords>MAIN</keywords>
+	<keywords>MANAGE</keywords>
+	<keywords>MANUAL</keywords>
+	<keywords>MAP</keywords>
+	<keywords>MATCH</keywords>
+	<keywords>MAX</keywords>
+	<keywords>MAXDATAFILES</keywords>
+	<keywords>MAXEXTENTS</keywords>
+	<keywords>MAXINSTANCES</keywords>
+	<keywords>MAXLOGFILES</keywords>
+	<keywords>MAXLOGHISTORY</keywords>
+	<keywords>MAXLOGMEMBERS</keywords>
+	<keywords>MAXTRANS</keywords>
+	<keywords>MAXVALUE</keywords>
+	<keywords>MENUITEM</keywords>
+	<keywords>MESSAGE</keywords>
+	<keywords>MICROSECOND</keywords>
+	<keywords>MICROSECONDS</keywords>
+	<keywords>MIN</keywords>
+	<keywords>MINEXTENTS</keywords>
+	<keywords>MINUS</keywords>
+	<keywords>MINUTE</keywords>
+	<keywords>MODIFIES</keywords>
+	<keywords>MINUTES</keywords>
+	<keywords>MINVALUE</keywords>
+	<keywords>MIRROREXIT</keywords>
+	<keywords>MOD</keywords>
+	<keywords>MODE</keywords>
+	<keywords>MODIFY</keywords>
+	<keywords>MODULE</keywords>
+	<keywords>MONEY</keywords>
+	<keywords>MONTH</keywords>
+	<keywords>MONTHS</keywords>
+	<keywords>MOUNT</keywords>
+	<keywords>MOVE</keywords>
+	<keywords>NAMED</keywords>
+	<keywords>NAMES</keywords>
+	<keywords>NATIONAL</keywords>
+	<keywords>NATURAL</keywords>
+	<keywords>NCHAR</keywords>
+	<keywords>NCLOB</keywords>
+	<keywords>NEW</keywords>
+	<keywords>NEXT</keywords>
+	<keywords>NHEADER</keywords>
+	<keywords>NO</keywords>
+	<keywords>NOARCHIVELOG</keywords>
+	<keywords>NOAUDIT</keywords>
+	<keywords>NOCACHE</keywords>
+	<keywords>NOCHECK</keywords>
+	<keywords>NOCOMPRESS</keywords>
+	<keywords>NOCYCLE</keywords>
+	<keywords>NOECHO</keywords>
+	<keywords>NOMAXVALUE</keywords>
+	<keywords>NOMINVALUE</keywords>
+	<keywords>NONCLUSTERED</keywords>
+	<keywords>NONE</keywords>
+	<keywords>NOORDER</keywords>
+	<keywords>NORESETLOGS</keywords>
+	<keywords>NORMAL</keywords>
+	<keywords>NOSORT</keywords>
+	<keywords>NOT</keywords>
+	<keywords>NOTFOUND</keywords>
+	<keywords>NOTRIM</keywords>
+	<keywords>NOWAIT</keywords>
+	<keywords>NULL</keywords>
+	<keywords>NULLIF</keywords>
+	<keywords>NULLVALUE</keywords>
+	<keywords>NUMBER</keywords>
+	<keywords>NUMERIC</keywords>
+	<keywords>OBJECT</keywords>
+	<keywords>NUMPARTS</keywords>
+	<keywords>NVL</keywords>
+	<keywords>OBID</keywords>
+	<keywords>ODBCINFO</keywords>
+	<keywords>OF</keywords>
+	<keywords>OFF</keywords>
+	<keywords>OFFLINE</keywords>
+	<keywords>OFFSETS</keywords>
+	<keywords>OLD</keywords>
+	<keywords>ON</keywords>
+	<keywords>ONCE</keywords>
+	<keywords>ONLINE</keywords>
+	<keywords>ONLY</keywords>
+	<keywords>OPEN</keywords>
+	<keywords>OPERATION</keywords>
+	<keywords>OPENDATASOURCE</keywords>
+	<keywords>OPENQUERY</keywords>
+	<keywords>OPENROWSET</keywords>
+	<keywords>OPTIMAL</keywords>
+	<keywords>OPTIMIZE</keywords>
+	<keywords>OPTION</keywords>
+	<keywords>OR</keywords>
+	<keywords>ORDER</keywords>
+	<keywords>ORDINALITY</keywords>
+	<keywords>OUT</keywords>
+	<keywords>OUTER</keywords>
+	<keywords>OUTPUT</keywords>
+	<keywords>OVER</keywords>
+	<keywords>OVERLAPS</keywords>
+	<keywords>OWN</keywords>
+	<keywords>PACKAGE</keywords>
+	<keywords>PAD</keywords>
+	<keywords>PARAMETER</keywords>
+	<keywords>PARAMETERS</keywords>
+	<keywords>PAGE</keywords>
+	<keywords>PAGES</keywords>
+	<keywords>PARALLEL</keywords>
+	<keywords>PART</keywords>
+	<keywords>PARTIAL</keywords>
+	<keywords>PATH</keywords>
+	<keywords>POSTFIX</keywords>
+	<keywords>PASCAL</keywords>
+	<keywords>PCTFREE</keywords>
+	<keywords>PCTINCREASE</keywords>
+	<keywords>PCTINDEX</keywords>
+	<keywords>PCTUSED</keywords>
+	<keywords>PERCENT</keywords>
+	<keywords>PERM</keywords>
+	<keywords>PERMANENT</keywords>
+	<keywords>PERMIT</keywords>
+	<keywords>PI</keywords>
+	<keywords>PIPE</keywords>
+	<keywords>PLAN</keywords>
+	<keywords>PLI</keywords>
+	<keywords>POSITION</keywords>
+	<keywords>POWER</keywords>
+	<keywords>PRECISION</keywords>
+	<keywords>PREFIX</keywords>
+	<keywords>PREORDER</keywords>
+	<keywords>PREPARE</keywords>
+	<keywords>PRESERVE</keywords>
+	<keywords>PRIMARY</keywords>
+	<keywords>PRINT</keywords>
+	<keywords>PRINTSCREEN</keywords>
+	<keywords>PRIOR</keywords>
+	<keywords>PRIQTY</keywords>
+	<keywords>PRIVATE</keywords>
+	<keywords>PRIVILEGES</keywords>
+	<keywords>PROC</keywords>
+	<keywords>PROCEDURE</keywords>
+	<keywords>PROCESSEXIT</keywords>
+	<keywords>PROFILE</keywords>
+	<keywords>PROGRAM</keywords>
+	<keywords>PROMPT</keywords>
+	<keywords>PUBLIC</keywords>
+	<keywords>PUTFORM</keywords>
+	<keywords>PUTOPER</keywords>
+	<keywords>PUTROW</keywords>
+	<keywords>QUALIFICATION</keywords>
+	<keywords>QUARTER</keywords>
+	<keywords>QUOTA</keywords>
+	<keywords>RADIANS</keywords>
+	<keywords>RAISE</keywords>
+	<keywords>RAISERROR</keywords>
+	<keywords>RAND</keywords>
+	<keywords>RANGE</keywords>
+	<keywords>RAW</keywords>
+	<keywords>READ</keywords>
+	<keywords>READS</keywords>
+	<keywords>READTEXT</keywords>
+	<keywords>REAL</keywords>
+	<keywords>RECURSIVE</keywords>
+	<keywords>REF</keywords>
+	<keywords>RECONFIGURE</keywords>
+	<keywords>RECORD</keywords>
+	<keywords>RECOVER</keywords>
+	<keywords>REDISPLAY</keywords>
+	<keywords>REFERENCES</keywords>
+	<keywords>REFERENCING</keywords>
+	<keywords>RELATIVE</keywords>
+	<keywords>REGISTER</keywords>
+	<keywords>RELEASE</keywords>
+	<keywords>RELOCATE</keywords>
+	<keywords>REMOVE</keywords>
+	<keywords>RENAME</keywords>
+	<keywords>REPEAT</keywords>
+	<keywords>REPEATABLE</keywords>
+	<keywords>REPEATED</keywords>
+	<keywords>REPLACE</keywords>
+	<keywords>REPLICATE</keywords>
+	<keywords>REPLICATION</keywords>
+	<keywords>RESET</keywords>
+	<keywords>RESETLOGS</keywords>
+	<keywords>RESOURCE</keywords>
+	<keywords>RESTORE</keywords>
+	<keywords>RESTRICT</keywords>
+	<keywords>RESULT</keywords>
+	<keywords>RESTRICTED</keywords>
+	<keywords>RESUME</keywords>
+	<keywords>RETRIEVE</keywords>
+	<keywords>RETURN</keywords>
+	<keywords>RETURNS</keywords>
+	<keywords>REUSE</keywords>
+	<keywords>REVOKE</keywords>
+	<keywords>RIGHT</keywords>
+	<keywords>ROLE</keywords>
+	<keywords>ROLES</keywords>
+	<keywords>ROLLBACK</keywords>
+	<keywords>ROLLUP</keywords>
+	<keywords>ROUTINE</keywords>
+	<keywords>ROW</keywords>
+	<keywords>ROWS</keywords>
+	<keywords>ROWCOUNT</keywords>
+	<keywords>ROWGUIDCOL</keywords>
+	<keywords>ROWID</keywords>
+	<keywords>ROWIDTOCHAR</keywords>
+	<keywords>ROWLABEL</keywords>
+	<keywords>ROWNUM</keywords>
+	<keywords>ROWS</keywords>
+	<keywords>RPAD</keywords>
+	<keywords>RRN</keywords>
+	<keywords>RTRIM</keywords>
+	<keywords>RULE</keywords>
+	<keywords>RUN</keywords>
+	<keywords>RUNTIMESTATISTICS</keywords>
+	<keywords>SAVE</keywords>
+	<keywords>SAVEPOINT</keywords>
+	<keywords>SCHEDULE</keywords>
+	<keywords>SCHEMA</keywords>
+	<keywords>SCN</keywords>
+	<keywords>SCREEN</keywords>
+	<keywords>SCROLL</keywords>
+	<keywords>SCOPE</keywords>
+	<keywords>SEARCH</keywords>
+	<keywords>SCROLLDOWN</keywords>
+	<keywords>SCROLLUP</keywords>
+	<keywords>SECOND</keywords>
+	<keywords>SECONDS</keywords>
+	<keywords>SECQTY</keywords>
+	<keywords>SECTION</keywords>
+	<keywords>SEGMENT</keywords>
+	<keywords>SELECT</keywords>
+	<keywords>SEQUENCE</keywords>
+	<keywords>SERIALIZABLE</keywords>
+	<keywords>SERVICE</keywords>
+	<keywords>SESSION</keywords>
+	<keywords>SESSION_USER</keywords>
+	<keywords>SET</keywords>
+	<keywords>SETS</keywords>
+	<keywords>SETUSER</keywords>
+	<keywords>SIN</keywords>
+	<keywords>SIMPLE</keywords>
+	<keywords>SIGN</keywords>
+	<keywords>SHUTDOWN</keywords>
+	<keywords>SHORT</keywords>
+	<keywords>SHARE</keywords>
+	<keywords>SHARED</keywords>
+	<keywords>SETUSER</keywords>
+	<keywords>SIZE</keywords>
+	<keywords>SLEEP</keywords>
+	<keywords>SMALLINT</keywords>
+	<keywords>SNAPSHOT</keywords>
+	<keywords>SOME</keywords>
+	<keywords>SORT</keywords>
+	<keywords>SOUNDEX</keywords>
+	<keywords>SPACE</keywords>
+	<keywords>SPECIFIC</keywords>
+	<keywords>SPECIFICTYPE</keywords>
+	<keywords>SQL</keywords>
+	<keywords>SQLEXCEPTION</keywords>
+	<keywords>SQLBUF</keywords>
+	<keywords>SQLCA</keywords>
+	<keywords>SQLCODE</keywords>
+	<keywords>SQLERROR</keywords>
+	<keywords>SQLSTATE</keywords>
+	<keywords>SQLWARNING</keywords>
+	<keywords>SQRT</keywords>
+	<keywords>START</keywords>
+	<keywords>STATE</keywords>
+	<keywords>STATEMENT</keywords>
+	<keywords>STATIC</keywords>
+	<keywords>STRUCTURE</keywords>
+	<keywords>STATISTICS</keywords>
+	<keywords>STOGROUP</keywords>
+	<keywords>STOP</keywords>
+	<keywords>STORAGE</keywords>
+	<keywords>STORPOOL</keywords>
+	<keywords>SUBMENU</keywords>
+	<keywords>SUBPAGES</keywords>
+	<keywords>SUBSTR</keywords>
+	<keywords>SUBSTRING</keywords>
+	<keywords>SUCCESSFUL</keywords>
+	<keywords>SUFFIX</keywords>
+	<keywords>SUM</keywords>
+	<keywords>SYSTEM_USER</keywords>
+	<keywords>SUMU</keywords>
+	<keywords>SWITCH</keywords>
+	<keywords>SYNONYM</keywords>
+	<keywords>SYSCAT</keywords>
+	<keywords>SYSDATE</keywords>
+	<keywords>SYSFUN</keywords>
+	<keywords>SYSIBM</keywords>
+	<keywords>SYSSTAT</keywords>
+	<keywords>SYSTEM</keywords>
+	<keywords>SYSTIME</keywords>
+	<keywords>SYSTIMESTAMP</keywords>
+	<keywords>TABLE</keywords>
+	<keywords>TABLEDATA</keywords>
+	<keywords>TABLES</keywords>
+	<keywords>TABLESPACE</keywords>
+	<keywords>TAN</keywords>
+	<keywords>TAPE</keywords>
+	<keywords>TEMP</keywords>
+	<keywords>TEMPORARY</keywords>
+	<keywords>TERMINATE</keywords>
+	<keywords>THAN</keywords>
+	<keywords>TEXTSIZE</keywords>
+	<keywords>THEN</keywords>
+	<keywords>THREAD</keywords>
+	<keywords>TIME</keywords>
+	<keywords>TIMEOUT</keywords>
+	<keywords>TIMESTAMP</keywords>
+	<keywords>TIMEZONE_HOUR</keywords>
+	<keywords>TIMEZONE_MINUTE</keywords>
+	<keywords>TINYINT</keywords>
+	<keywords>TO</keywords>
+	<keywords>TOP</keywords>
+	<keywords>TPE</keywords>
+	<keywords>TRACING</keywords>
+	<keywords>TRAILING</keywords>
+	<keywords>TRAN</keywords>
+	<keywords>TRANSACTION</keywords>
+	<keywords>TRANSLATE</keywords>
+	<keywords>TRANSLATION</keywords>
+	<keywords>TREAT</keywords>
+	<keywords>TRIGGER</keywords>
+	<keywords>TRIGGERS</keywords>
+	<keywords>TRIM</keywords>
+	<keywords>TRUE</keywords>
+	<keywords>TRUNCATE</keywords>
+	<keywords>TSEQUAL</keywords>
+	<keywords>TYPE</keywords>
+	<keywords>UID</keywords>
+	<keywords>UNCOMMITTED</keywords>
+	<keywords>UNDER</keywords>
+	<keywords>UNION</keywords>
+	<keywords>UNIQUE</keywords>
+	<keywords>UNKNOWN</keywords>
+	<keywords>UNNEST</keywords>
+	<keywords>UNLIMITED</keywords>
+	<keywords>UNLOADTABLE</keywords>
+	<keywords>UNSIGNED</keywords>
+	<keywords>UNTIL</keywords>
+	<keywords>UP</keywords>
+	<keywords>UPDATE</keywords>
+	<keywords>UPDATETEXT</keywords>
+	<keywords>UPPER</keywords>
+	<keywords>USAGE</keywords>
+	<keywords>USE</keywords>
+	<keywords>USER</keywords>
+	<keywords>USING</keywords>
+	<keywords>UUID</keywords>
+	<keywords>VALIDATE</keywords>
+	<keywords>VALIDPROC</keywords>
+	<keywords>VALIDROW</keywords>
+	<keywords>VALUE</keywords>
+	<keywords>VALUES</keywords>
+	<keywords>VARBINARY</keywords>
+	<keywords>VARCHAR</keywords>
+	<keywords>VARIABLE</keywords>
+	<keywords>VARIABLES</keywords>
+	<keywords>VARYING</keywords>
+	<keywords>VCAT</keywords>
+	<keywords>VERSION</keywords>
+	<keywords>VIEW</keywords>
+	<keywords>VOLUMES</keywords>
+	<keywords>WAITFOR</keywords>
+	<keywords>WEEK</keywords>
+	<keywords>WHEN</keywords>
+	<keywords>WHENEVER</keywords>
+	<keywords>WHERE</keywords>
+	<keywords>WHILE</keywords>
+	<keywords>WITH</keywords>
+	<keywords>WITHOUT</keywords>
+	<keywords>WORK</keywords>
+	<keywords>WRITE</keywords>
+	<keywords>WRITETEXT</keywords>
+	<keywords>YEAR</keywords>
+	<keywords>YEARS</keywords>
+	<keywords>ZONE</keywords>
+  </SQLSyntaxDefinition>
+</DBDefinition:DatabaseVendorDefinition>
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/runtime/vendors/SQL Server_2005/SQL Server_2005.xmi b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/runtime/vendors/SQL Server_2005/SQL Server_2005.xmi
new file mode 100644
index 0000000..04bb6c5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/runtime/vendors/SQL Server_2005/SQL Server_2005.xmi
@@ -0,0 +1,900 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="SQL Server" version="2005" maximumIdentifierLength="128"
+ viewTriggerSupported="true" userDefinedTypeSupported="true">
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_1" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="long">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIGINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_2" multipleColumnsSupported="true" primitiveType="INTEGER" jdbcEnumType="-7" javaClassName="boolean">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" lengthSupported="true" lengthUnit="BYTE" multipleColumnsSupported="true" defaultLength="50" maximumLength="8000" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BINARY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_1" lengthSupported="true" lengthUnit="BYTE" multipleColumnsSupported="true" defaultLength="50" maximumLength="8000" largeValueSpecifierSupported="true" largeValueSpecifierName="MAX" largeValueSpecifierLength="-1" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARBINARY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_2" multipleColumnsSupported="true" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="-4" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>IMAGE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" multipleColumnsSupported="true"  maximumLength="8000" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>SYSTEM_USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR</name>
+    <name>CHARACTER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" multipleColumnsSupported="true"  maximumLength="4000" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>SYSTEM_USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" multipleColumnsSupported="true" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="-1" javaClassName="java.sql.Clob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_LARGE_OBJECT_1" multipleColumnsSupported="true" primitiveType="NATIONAL_CHARACTER_LARGE_OBJECT" jdbcEnumType="-1" javaClassName="java.sql.Clob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NTEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" multipleColumnsSupported="true"  maximumLength="8000" largeValueSpecifierSupported="true" largeValueSpecifierName="MAX" largeValueSpecifierLength="-1" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>SYSTEM_USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR</name>
+    <name>CHARACTER VARYING</name>
+    <name>CHAR VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_2" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>UNIQUEIDENTIFIER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" multipleColumnsSupported="true"  maximumLength="4000" largeValueSpecifierSupported="true" largeValueSpecifierName="MAX" largeValueSpecifierLength="-1" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>SYSTEM_USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NVARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="DATE" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATETIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" scaleSupported="true" precisionSupported="true" maximumPrecision="38" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE PRECISION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" precisionSupported="true" maximumPrecision="53" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="FLOAT" jdbcEnumType="6" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INT</name>
+    <name>INTEGER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" scaleSupported="true" precisionSupported="true" maximumPrecision="38" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_2" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>MONEY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_3" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLMONEY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_2" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="DATE" jdbcEnumType="92" javaClassName="java.sql.Time">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLDATETIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_2" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="SMALLINT" jdbcEnumType="-6" javaClassName="short">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TINYINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP</name>
+    <name>ROWVERSION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_2" keyConstraintSupported="true" primitiveType="CHARACTER" jdbcEnumType="-150" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SQL_VARIANT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="XML_TYPE_1" primitiveType="XML_TYPE" jdbcEnumType="509" orderingSupported="false" groupingSupported="false" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>XML</name>
+  </predefinedDataTypeDefinitions>
+  <triggerDefinition maximumIdentifierLength="128" typeSupported="true" insteadOfTriggerSupported="true"/>
+  <columnDefinition maximumIdentifierLength="128" identitySupported="true" computedSupported="true" identityStartValueSupported="true" identityIncrementSupported="true"/>
+  <constraintDefinition maximumPrimaryKeyIdentifierLength="128" maximumForeignKeyIdentifierLength="128" maximumCheckConstraintIdentifierLength="128" uniqueKeyNullable="true">
+    <parentUpdateDRIRuleType>CASCADE</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+  </constraintDefinition>
+  <queryDefinition hostVariableMarker="@"/>
+  <indexDefinition maximumIdentifierLength="128" clusteringSupported="true"/>
+  <viewDefinition maximumIdentifierLength="128" indexSupported="true"/>
+  <tableDefinition maximumIdentifierLength="128"/>
+  <schemaDefinition maximumIdentifierLength="128"/>
+  <storedProcedureDefinition maximumIdentifierLength="128">
+    <functionLanguageType>SQL</functionLanguageType>
+  </storedProcedureDefinition>
+  <udtDefinition maximumIdentifierLength="128" distinctTypeSupported="true"/>
+  <SQLSyntaxDefinition terminationCharacter="GO">
+    <keywords>A</keywords>
+	<keywords>ABORT</keywords>
+	<keywords>ABS</keywords>
+	<keywords>ABSOLUTE</keywords>
+	<keywords>ACCESS</keywords>
+	<keywords>ACOS</keywords>
+	<keywords>ACQUIRE</keywords>
+	<keywords>ACTION</keywords>
+	<keywords>ACTIVATE</keywords>
+	<keywords>ADA</keywords>
+	<keywords>ADD</keywords>
+	<keywords>ADDFORM</keywords>
+	<keywords>ADMIN</keywords>
+	<keywords>AFTER</keywords>
+	<keywords>AGGREGATE</keywords>
+	<keywords>ALIAS</keywords>
+	<keywords>ALL</keywords>
+	<keywords>ALLOCATE</keywords>
+	<keywords>ALTER</keywords>
+	<keywords>AN</keywords>
+	<keywords>ANALYZE</keywords>
+	<keywords>AND</keywords>
+	<keywords>ANY</keywords>
+	<keywords>APPEND</keywords>
+	<keywords>ARCHIVE</keywords>
+	<keywords>ARCHIVELOG</keywords>
+	<keywords>ARE</keywords>
+	<keywords>ARRAY</keywords>
+	<keywords>ARRAYLEN</keywords>
+	<keywords>AS</keywords>
+	<keywords>ASC</keywords>
+	<keywords>ASCII</keywords>
+	<keywords>ASIN</keywords>
+	<keywords>ASSERTION</keywords>
+	<keywords>AT</keywords>
+	<keywords>ATAN</keywords>
+	<keywords>AUDIT</keywords>
+	<keywords>AUTHORIZATION</keywords>
+	<keywords>AVG</keywords>
+	<keywords>AVGU</keywords>
+	<keywords>BACKUP</keywords>
+	<keywords>BECOME</keywords>
+	<keywords>BEFORE</keywords>
+	<keywords>BEGIN</keywords>
+	<keywords>BETWEEN</keywords>
+	<keywords>BIGINT</keywords>
+	<keywords>BINARY</keywords>
+	<keywords>BIND</keywords>
+	<keywords>BINDING</keywords>
+	<keywords>BIT</keywords>
+	<keywords>BLOB</keywords>
+	<keywords>BLOCK</keywords>
+	<keywords>BODY</keywords>
+	<keywords>BOOLEAN</keywords>
+	<keywords>BOTH</keywords>
+	<keywords>BREADTH</keywords>
+	<keywords>BREAK</keywords>
+	<keywords>BREAKDISPLAY</keywords>
+	<keywords>BROWSE</keywords>
+	<keywords>BUFFERPOOL</keywords>
+	<keywords>BULK</keywords>
+	<keywords>BY</keywords>
+	<keywords>BYREF</keywords>
+	<keywords>CACHE</keywords>
+	<keywords>CALL</keywords>
+	<keywords>CALLPROC</keywords>
+	<keywords>CANCEL</keywords>
+	<keywords>CAPTURE</keywords>
+	<keywords>CASCADE</keywords>
+	<keywords>CASCADED</keywords>
+	<keywords>CASE</keywords>
+	<keywords>CAST</keywords>
+	<keywords>CATALOG</keywords>
+	<keywords>CCSID</keywords>
+	<keywords>CEILING</keywords>
+	<keywords>CHANGE</keywords>
+	<keywords>CHAR</keywords>
+	<keywords>CHARACTER</keywords>
+	<keywords>CHARTOROWID</keywords>
+	<keywords>CHECK</keywords>
+	<keywords>CLASS</keywords>
+	<keywords>CLOB</keywords>
+	<keywords>CHECKPOINT</keywords>
+	<keywords>CHR</keywords>
+	<keywords>CLEANUP</keywords>
+	<keywords>CLEAR</keywords>
+	<keywords>CLEARROW</keywords>
+	<keywords>CLOSE</keywords>
+	<keywords>CLUSTER</keywords>
+	<keywords>CLUSTERED</keywords>
+	<keywords>COALESCE</keywords>
+	<keywords>COBOL</keywords>
+	<keywords>COLGROUP</keywords>
+	<keywords>COLLATE</keywords>
+	<keywords>COLLATION</keywords>
+	<keywords>COLLECTION</keywords>
+	<keywords>COLUMN</keywords>
+	<keywords>COMMAND</keywords>
+	<keywords>COMMENT</keywords>
+	<keywords>COMMIT</keywords>
+	<keywords>COMPLETION</keywords>
+	<keywords>COMMITTED</keywords>
+	<keywords>COMPILE</keywords>
+	<keywords>COMPLEX</keywords>
+	<keywords>COMPRESS</keywords>
+	<keywords>COMPUTE</keywords>
+	<keywords>CONCAT</keywords>
+	<keywords>CONFIRM</keywords>
+	<keywords>CONNECT</keywords>
+	<keywords>CONNECTION</keywords>
+	<keywords>CONSTRAINT</keywords>
+	<keywords>CONSTRAINTS</keywords>
+	<keywords>CONSTRUCTOR</keywords>
+	<keywords>CONTAINS</keywords>
+	<keywords>CONTAINSTABLE</keywords>
+	<keywords>CONTENTS</keywords>
+	<keywords>CONTINUE</keywords>
+	<keywords>CONTROLFILE</keywords>
+	<keywords>CONTROLROW</keywords>
+	<keywords>CONVERT</keywords>
+	<keywords>COPY</keywords>
+	<keywords>CORRESPONDING</keywords>
+	<keywords>COS</keywords>
+	<keywords>COUNT</keywords>
+	<keywords>COUNTU</keywords>
+	<keywords>CREATE</keywords>
+	<keywords>CROSS</keywords>
+	<keywords>CUBE</keywords>
+	<keywords>CURRENT</keywords>
+	<keywords>CURRENT_DATE</keywords>
+	<keywords>CURRENT_PATH</keywords>
+	<keywords>CURRENT_ROLE</keywords>
+	<keywords>CURRENT_TIME</keywords>
+	<keywords>CURRENT_TIMESTAMP</keywords>
+	<keywords>CURRENT_USER</keywords>
+	<keywords>CURSOR</keywords>
+	<keywords>CVAR</keywords>
+	<keywords>CYCLE</keywords>
+	<keywords>DATA</keywords>
+	<keywords>DATABASE</keywords>
+	<keywords>DATAFILE</keywords>
+	<keywords>DATAHANDLER</keywords>
+	<keywords>DATAPAGES</keywords>
+	<keywords>DATE</keywords>
+	<keywords>DAY</keywords>
+	<keywords>DAYOFMONTH</keywords>
+	<keywords>DAYOFWEEK</keywords>
+	<keywords>DAYOFYEAR</keywords>
+	<keywords>DAYS</keywords>
+	<keywords>DBA</keywords>
+	<keywords>DBCC</keywords>
+	<keywords>DBSPACE</keywords>
+	<keywords>DEALLOCATE</keywords>
+	<keywords>DEC</keywords>
+	<keywords>DECIMAL</keywords>
+	<keywords>DECLARATION</keywords>
+	<keywords>DECLARE</keywords>
+	<keywords>DECODE</keywords>
+	<keywords>DEFAULT</keywords>
+	<keywords>DEFERRABLE</keywords>
+	<keywords>DEFERRED</keywords>
+	<keywords>DEFINE</keywords>
+	<keywords>DEFINITION</keywords>
+	<keywords>DEGREES</keywords>
+	<keywords>DELETE</keywords>
+	<keywords>DEPTH</keywords>
+	<keywords>DEREF</keywords>
+	<keywords>DELETEROW</keywords>
+	<keywords>DENY</keywords>
+	<keywords>DESC</keywords>
+	<keywords>DESCRIBE</keywords>
+	<keywords>DESCRIPTOR</keywords>
+	<keywords>DESTROY</keywords>
+	<keywords>DHTYPE</keywords>
+	<keywords>DESTRUCTOR</keywords>
+	<keywords>DETERMINISTIC</keywords>
+	<keywords>DICTIONARY</keywords>
+	<keywords>DIAGNOSTICS</keywords>
+	<keywords>DIRECT</keywords>
+	<keywords>DISABLE</keywords>
+	<keywords>DISCONNECT</keywords>
+	<keywords>DISK</keywords>
+	<keywords>DISMOUNT</keywords>
+	<keywords>DISPLAY</keywords>
+	<keywords>DISTINCT</keywords>
+	<keywords>DISTRIBUTE</keywords>
+	<keywords>DISTRIBUTED</keywords>
+	<keywords>DO</keywords>
+	<keywords>DOMAIN</keywords>
+	<keywords>DOUBLE</keywords>
+	<keywords>DOWN</keywords>
+	<keywords>DROP</keywords>
+	<keywords>DUMMY</keywords>
+	<keywords>DUMP</keywords>
+	<keywords>DYNAMIC</keywords>
+	<keywords>EACH</keywords>
+	<keywords>EDITPROC</keywords>
+	<keywords>ELSE</keywords>
+	<keywords>ELSEIF</keywords>
+	<keywords>ENABLE</keywords>
+	<keywords>END</keywords>
+	<keywords>ENDDATA</keywords>
+	<keywords>ENDDISPLAY</keywords>
+	<keywords>ENDEXEC</keywords>
+	<keywords>END-EXEC</keywords>
+	<keywords>ENDFORMS</keywords>
+	<keywords>ENDIF</keywords>
+	<keywords>ENDLOOP</keywords>
+	<keywords>EQUALS</keywords>
+	<keywords>ENDSELECT</keywords>
+	<keywords>ENDWHILE</keywords>
+	<keywords>ERASE</keywords>
+	<keywords>ERRLVL</keywords>
+	<keywords>ERROREXIT</keywords>
+	<keywords>ESCAPE</keywords>
+	<keywords>EVENTS</keywords>
+	<keywords>EVERY</keywords>
+	<keywords>EXCEPT</keywords>
+	<keywords>EXCEPTION</keywords>
+	<keywords>EXCEPTIONS</keywords>
+	<keywords>EXCLUDE</keywords>
+	<keywords>EXCLUDING</keywords>
+	<keywords>EXCLUSIVE</keywords>
+	<keywords>EXEC</keywords>
+	<keywords>EXECUTE</keywords>
+	<keywords>EXISTS</keywords>
+	<keywords>EXIT</keywords>
+	<keywords>EXP</keywords>
+	<keywords>EXPLAIN</keywords>
+	<keywords>EXPLICIT</keywords>
+	<keywords>EXTENT</keywords>
+	<keywords>EXTERNAL</keywords>
+	<keywords>EXTERNALLY</keywords>
+	<keywords>EXTRACT</keywords>
+	<keywords>FALSE</keywords>
+	<keywords>FETCH</keywords>
+	<keywords>FIELD</keywords>
+	<keywords>FIELDPROC</keywords>
+	<keywords>FILE</keywords>
+	<keywords>FILLFACTOR</keywords>
+	<keywords>FINALIZE</keywords>
+	<keywords>FINALIZE</keywords>
+	<keywords>FIRST</keywords>
+	<keywords>FLOAT</keywords>
+	<keywords>FLOOR</keywords>
+	<keywords>FLOPPY</keywords>
+	<keywords>FLUSH</keywords>
+	<keywords>FOR</keywords>
+	<keywords>FORCE</keywords>
+	<keywords>FORMDATA</keywords>
+	<keywords>FORMINIT</keywords>
+	<keywords>FORMS</keywords>
+	<keywords>FORTRAN</keywords>
+	<keywords>FOREIGN</keywords>
+	<keywords>FOUND</keywords>
+	<keywords>FREELIST</keywords>
+	<keywords>FREELISTS</keywords>
+	<keywords>FREETEXT</keywords>
+	<keywords>FREETEXTTABLE</keywords>
+	<keywords>FROM</keywords>
+	<keywords>FREE</keywords>
+	<keywords>FULL</keywords>
+	<keywords>FUNCTION</keywords>
+	<keywords>GENERAL</keywords>
+	<keywords>GET</keywords>
+	<keywords>GETCURRENTCONNECTION</keywords>
+	<keywords>GETFORM</keywords>
+	<keywords>GETOPER</keywords>
+	<keywords>GETROW</keywords>
+	<keywords>GLOBAL</keywords>
+	<keywords>GO</keywords>
+	<keywords>GOTO</keywords>
+	<keywords>GRANT</keywords>
+	<keywords>GRANTED</keywords>
+	<keywords>GRAPHIC</keywords>
+	<keywords>GREATEST</keywords>
+	<keywords>GROUP</keywords>
+	<keywords>GROUPING</keywords>
+	<keywords>GROUPS</keywords>
+	<keywords>HASH</keywords>
+	<keywords>HAVING</keywords>
+	<keywords>HOST</keywords>
+	<keywords>HELP</keywords>
+	<keywords>HELPFILE</keywords>
+	<keywords>HOLDLOCK</keywords>
+	<keywords>HOUR</keywords>
+	<keywords>HOURS</keywords>
+	<keywords>IDENTIFIED</keywords>
+	<keywords>IDENTITY</keywords>
+	<keywords>IGNORE</keywords>
+	<keywords>IDENTITYCOL</keywords>
+	<keywords>IF</keywords>
+	<keywords>IFNULL</keywords>
+	<keywords>IIMESSAGE</keywords>
+	<keywords>IIPRINTF</keywords>
+	<keywords>IMMEDIATE</keywords>
+	<keywords>IMPORT</keywords>
+	<keywords>IN</keywords>
+	<keywords>INCLUDE</keywords>
+	<keywords>INCLUDING</keywords>
+	<keywords>INCREMENT</keywords>
+	<keywords>INDEX</keywords>
+	<keywords>INDEXPAGES</keywords>
+	<keywords>INDICATOR</keywords>
+	<keywords>INITCAP</keywords>
+	<keywords>INITIAL</keywords>
+	<keywords>INITIALIZE</keywords>
+	<keywords>INITIALLY</keywords>
+	<keywords>INITRANS</keywords>
+	<keywords>INITTABLE</keywords>
+	<keywords>INNER</keywords>
+	<keywords>INOUT</keywords>
+	<keywords>INPUT</keywords>
+	<keywords>INSENSITIVE</keywords>
+	<keywords>INSERT</keywords>
+	<keywords>INSERTROW</keywords>
+	<keywords>INSTANCE</keywords>
+	<keywords>INSTR</keywords>
+	<keywords>INT</keywords>
+	<keywords>INTEGER</keywords>
+	<keywords>INTEGRITY</keywords>
+	<keywords>INTERFACE</keywords>
+	<keywords>INTERSECT</keywords>
+	<keywords>INTERVAL</keywords>
+	<keywords>INTO</keywords>
+	<keywords>IS</keywords>
+	<keywords>ISOLATION</keywords>
+	<keywords>ITERATE</keywords>
+	<keywords>JOIN</keywords>
+	<keywords>KEY</keywords>
+	<keywords>KILL</keywords>
+	<keywords>LABEL</keywords>
+	<keywords>LANGUAGE</keywords>
+	<keywords>LARGE</keywords>
+	<keywords>LAST</keywords>
+	<keywords>LATERAL</keywords>
+	<keywords>LAYER</keywords>
+	<keywords>LEADING</keywords>
+	<keywords>LEAST</keywords>
+	<keywords>LEFT</keywords>
+	<keywords>LESS</keywords>
+	<keywords>LENGTH</keywords>
+	<keywords>LEVEL</keywords>
+	<keywords>LIKE</keywords>
+	<keywords>LIMIT</keywords>
+	<keywords>LINENO</keywords>
+	<keywords>LINK</keywords>
+	<keywords>LIST</keywords>
+	<keywords>LISTS</keywords>
+	<keywords>LOAD</keywords>
+	<keywords>LOADTABLE</keywords>
+	<keywords>LOCAL</keywords>
+	<keywords>LOCALTIME</keywords>
+	<keywords>LOCALTIMESTAMP</keywords>
+	<keywords>LOCATOR</keywords>
+	<keywords>LOCATE</keywords>
+	<keywords>LOCK</keywords>
+	<keywords>LOCKSIZE</keywords>
+	<keywords>LOG</keywords>
+	<keywords>LOGFILE</keywords>
+	<keywords>LONG</keywords>
+	<keywords>LONGINT</keywords>
+	<keywords>LOWER</keywords>
+	<keywords>LPAD</keywords>
+	<keywords>LTRIM</keywords>
+	<keywords>LVARBINARY</keywords>
+	<keywords>LVARCHAR</keywords>
+	<keywords>MAIN</keywords>
+	<keywords>MANAGE</keywords>
+	<keywords>MANUAL</keywords>
+	<keywords>MAP</keywords>
+	<keywords>MATCH</keywords>
+	<keywords>MAX</keywords>
+	<keywords>MAXDATAFILES</keywords>
+	<keywords>MAXEXTENTS</keywords>
+	<keywords>MAXINSTANCES</keywords>
+	<keywords>MAXLOGFILES</keywords>
+	<keywords>MAXLOGHISTORY</keywords>
+	<keywords>MAXLOGMEMBERS</keywords>
+	<keywords>MAXTRANS</keywords>
+	<keywords>MAXVALUE</keywords>
+	<keywords>MENUITEM</keywords>
+	<keywords>MESSAGE</keywords>
+	<keywords>MICROSECOND</keywords>
+	<keywords>MICROSECONDS</keywords>
+	<keywords>MIN</keywords>
+	<keywords>MINEXTENTS</keywords>
+	<keywords>MINUS</keywords>
+	<keywords>MINUTE</keywords>
+	<keywords>MODIFIES</keywords>
+	<keywords>MINUTES</keywords>
+	<keywords>MINVALUE</keywords>
+	<keywords>MIRROREXIT</keywords>
+	<keywords>MOD</keywords>
+	<keywords>MODE</keywords>
+	<keywords>MODIFY</keywords>
+	<keywords>MODULE</keywords>
+	<keywords>MONEY</keywords>
+	<keywords>MONTH</keywords>
+	<keywords>MONTHS</keywords>
+	<keywords>MOUNT</keywords>
+	<keywords>MOVE</keywords>
+	<keywords>NAMED</keywords>
+	<keywords>NAMES</keywords>
+	<keywords>NATIONAL</keywords>
+	<keywords>NATURAL</keywords>
+	<keywords>NCHAR</keywords>
+	<keywords>NCLOB</keywords>
+	<keywords>NEW</keywords>
+	<keywords>NEXT</keywords>
+	<keywords>NHEADER</keywords>
+	<keywords>NO</keywords>
+	<keywords>NOARCHIVELOG</keywords>
+	<keywords>NOAUDIT</keywords>
+	<keywords>NOCACHE</keywords>
+	<keywords>NOCHECK</keywords>
+	<keywords>NOCOMPRESS</keywords>
+	<keywords>NOCYCLE</keywords>
+	<keywords>NOECHO</keywords>
+	<keywords>NOMAXVALUE</keywords>
+	<keywords>NOMINVALUE</keywords>
+	<keywords>NONCLUSTERED</keywords>
+	<keywords>NONE</keywords>
+	<keywords>NOORDER</keywords>
+	<keywords>NORESETLOGS</keywords>
+	<keywords>NORMAL</keywords>
+	<keywords>NOSORT</keywords>
+	<keywords>NOT</keywords>
+	<keywords>NOTFOUND</keywords>
+	<keywords>NOTRIM</keywords>
+	<keywords>NOWAIT</keywords>
+	<keywords>NULL</keywords>
+	<keywords>NULLIF</keywords>
+	<keywords>NULLVALUE</keywords>
+	<keywords>NUMBER</keywords>
+	<keywords>NUMERIC</keywords>
+	<keywords>OBJECT</keywords>
+	<keywords>NUMPARTS</keywords>
+	<keywords>NVL</keywords>
+	<keywords>OBID</keywords>
+	<keywords>ODBCINFO</keywords>
+	<keywords>OF</keywords>
+	<keywords>OFF</keywords>
+	<keywords>OFFLINE</keywords>
+	<keywords>OFFSETS</keywords>
+	<keywords>OLD</keywords>
+	<keywords>ON</keywords>
+	<keywords>ONCE</keywords>
+	<keywords>ONLINE</keywords>
+	<keywords>ONLY</keywords>
+	<keywords>OPEN</keywords>
+	<keywords>OPERATION</keywords>
+	<keywords>OPENDATASOURCE</keywords>
+	<keywords>OPENQUERY</keywords>
+	<keywords>OPENROWSET</keywords>
+	<keywords>OPTIMAL</keywords>
+	<keywords>OPTIMIZE</keywords>
+	<keywords>OPTION</keywords>
+	<keywords>OR</keywords>
+	<keywords>ORDER</keywords>
+	<keywords>ORDINALITY</keywords>
+	<keywords>OUT</keywords>
+	<keywords>OUTER</keywords>
+	<keywords>OUTPUT</keywords>
+	<keywords>OVER</keywords>
+	<keywords>OVERLAPS</keywords>
+	<keywords>OWN</keywords>
+	<keywords>PACKAGE</keywords>
+	<keywords>PAD</keywords>
+	<keywords>PARAMETER</keywords>
+	<keywords>PARAMETERS</keywords>
+	<keywords>PAGE</keywords>
+	<keywords>PAGES</keywords>
+	<keywords>PARALLEL</keywords>
+	<keywords>PART</keywords>
+	<keywords>PARTIAL</keywords>
+	<keywords>PATH</keywords>
+	<keywords>POSTFIX</keywords>
+	<keywords>PASCAL</keywords>
+	<keywords>PCTFREE</keywords>
+	<keywords>PCTINCREASE</keywords>
+	<keywords>PCTINDEX</keywords>
+	<keywords>PCTUSED</keywords>
+	<keywords>PERCENT</keywords>
+	<keywords>PERM</keywords>
+	<keywords>PERMANENT</keywords>
+	<keywords>PERMIT</keywords>
+	<keywords>PI</keywords>
+	<keywords>PIPE</keywords>
+	<keywords>PLAN</keywords>
+	<keywords>PLI</keywords>
+	<keywords>POSITION</keywords>
+	<keywords>POWER</keywords>
+	<keywords>PRECISION</keywords>
+	<keywords>PREFIX</keywords>
+	<keywords>PREORDER</keywords>
+	<keywords>PREPARE</keywords>
+	<keywords>PRESERVE</keywords>
+	<keywords>PRIMARY</keywords>
+	<keywords>PRINT</keywords>
+	<keywords>PRINTSCREEN</keywords>
+	<keywords>PRIOR</keywords>
+	<keywords>PRIQTY</keywords>
+	<keywords>PRIVATE</keywords>
+	<keywords>PRIVILEGES</keywords>
+	<keywords>PROC</keywords>
+	<keywords>PROCEDURE</keywords>
+	<keywords>PROCESSEXIT</keywords>
+	<keywords>PROFILE</keywords>
+	<keywords>PROGRAM</keywords>
+	<keywords>PROMPT</keywords>
+	<keywords>PUBLIC</keywords>
+	<keywords>PUTFORM</keywords>
+	<keywords>PUTOPER</keywords>
+	<keywords>PUTROW</keywords>
+	<keywords>QUALIFICATION</keywords>
+	<keywords>QUARTER</keywords>
+	<keywords>QUOTA</keywords>
+	<keywords>RADIANS</keywords>
+	<keywords>RAISE</keywords>
+	<keywords>RAISERROR</keywords>
+	<keywords>RAND</keywords>
+	<keywords>RANGE</keywords>
+	<keywords>RAW</keywords>
+	<keywords>READ</keywords>
+	<keywords>READS</keywords>
+	<keywords>READTEXT</keywords>
+	<keywords>REAL</keywords>
+	<keywords>RECURSIVE</keywords>
+	<keywords>REF</keywords>
+	<keywords>RECONFIGURE</keywords>
+	<keywords>RECORD</keywords>
+	<keywords>RECOVER</keywords>
+	<keywords>REDISPLAY</keywords>
+	<keywords>REFERENCES</keywords>
+	<keywords>REFERENCING</keywords>
+	<keywords>RELATIVE</keywords>
+	<keywords>REGISTER</keywords>
+	<keywords>RELEASE</keywords>
+	<keywords>RELOCATE</keywords>
+	<keywords>REMOVE</keywords>
+	<keywords>RENAME</keywords>
+	<keywords>REPEAT</keywords>
+	<keywords>REPEATABLE</keywords>
+	<keywords>REPEATED</keywords>
+	<keywords>REPLACE</keywords>
+	<keywords>REPLICATE</keywords>
+	<keywords>REPLICATION</keywords>
+	<keywords>RESET</keywords>
+	<keywords>RESETLOGS</keywords>
+	<keywords>RESOURCE</keywords>
+	<keywords>RESTORE</keywords>
+	<keywords>RESTRICT</keywords>
+	<keywords>RESULT</keywords>
+	<keywords>RESTRICTED</keywords>
+	<keywords>RESUME</keywords>
+	<keywords>RETRIEVE</keywords>
+	<keywords>RETURN</keywords>
+	<keywords>RETURNS</keywords>
+	<keywords>REUSE</keywords>
+	<keywords>REVOKE</keywords>
+	<keywords>RIGHT</keywords>
+	<keywords>ROLE</keywords>
+	<keywords>ROLES</keywords>
+	<keywords>ROLLBACK</keywords>
+	<keywords>ROLLUP</keywords>
+	<keywords>ROUTINE</keywords>
+	<keywords>ROW</keywords>
+	<keywords>ROWS</keywords>
+	<keywords>ROWCOUNT</keywords>
+	<keywords>ROWGUIDCOL</keywords>
+	<keywords>ROWID</keywords>
+	<keywords>ROWIDTOCHAR</keywords>
+	<keywords>ROWLABEL</keywords>
+	<keywords>ROWNUM</keywords>
+	<keywords>ROWS</keywords>
+	<keywords>RPAD</keywords>
+	<keywords>RRN</keywords>
+	<keywords>RTRIM</keywords>
+	<keywords>RULE</keywords>
+	<keywords>RUN</keywords>
+	<keywords>RUNTIMESTATISTICS</keywords>
+	<keywords>SAVE</keywords>
+	<keywords>SAVEPOINT</keywords>
+	<keywords>SCHEDULE</keywords>
+	<keywords>SCHEMA</keywords>
+	<keywords>SCN</keywords>
+	<keywords>SCREEN</keywords>
+	<keywords>SCROLL</keywords>
+	<keywords>SCOPE</keywords>
+	<keywords>SEARCH</keywords>
+	<keywords>SCROLLDOWN</keywords>
+	<keywords>SCROLLUP</keywords>
+	<keywords>SECOND</keywords>
+	<keywords>SECONDS</keywords>
+	<keywords>SECQTY</keywords>
+	<keywords>SECTION</keywords>
+	<keywords>SEGMENT</keywords>
+	<keywords>SELECT</keywords>
+	<keywords>SEQUENCE</keywords>
+	<keywords>SERIALIZABLE</keywords>
+	<keywords>SERVICE</keywords>
+	<keywords>SESSION</keywords>
+	<keywords>SESSION_USER</keywords>
+	<keywords>SET</keywords>
+	<keywords>SETS</keywords>
+	<keywords>SETUSER</keywords>
+	<keywords>SIN</keywords>
+	<keywords>SIMPLE</keywords>
+	<keywords>SIGN</keywords>
+	<keywords>SHUTDOWN</keywords>
+	<keywords>SHORT</keywords>
+	<keywords>SHARE</keywords>
+	<keywords>SHARED</keywords>
+	<keywords>SETUSER</keywords>
+	<keywords>SIZE</keywords>
+	<keywords>SLEEP</keywords>
+	<keywords>SMALLINT</keywords>
+	<keywords>SNAPSHOT</keywords>
+	<keywords>SOME</keywords>
+	<keywords>SORT</keywords>
+	<keywords>SOUNDEX</keywords>
+	<keywords>SPACE</keywords>
+	<keywords>SPECIFIC</keywords>
+	<keywords>SPECIFICTYPE</keywords>
+	<keywords>SQL</keywords>
+	<keywords>SQLEXCEPTION</keywords>
+	<keywords>SQLBUF</keywords>
+	<keywords>SQLCA</keywords>
+	<keywords>SQLCODE</keywords>
+	<keywords>SQLERROR</keywords>
+	<keywords>SQLSTATE</keywords>
+	<keywords>SQLWARNING</keywords>
+	<keywords>SQRT</keywords>
+	<keywords>START</keywords>
+	<keywords>STATE</keywords>
+	<keywords>STATEMENT</keywords>
+	<keywords>STATIC</keywords>
+	<keywords>STRUCTURE</keywords>
+	<keywords>STATISTICS</keywords>
+	<keywords>STOGROUP</keywords>
+	<keywords>STOP</keywords>
+	<keywords>STORAGE</keywords>
+	<keywords>STORPOOL</keywords>
+	<keywords>SUBMENU</keywords>
+	<keywords>SUBPAGES</keywords>
+	<keywords>SUBSTR</keywords>
+	<keywords>SUBSTRING</keywords>
+	<keywords>SUCCESSFUL</keywords>
+	<keywords>SUFFIX</keywords>
+	<keywords>SUM</keywords>
+	<keywords>SYSTEM_USER</keywords>
+	<keywords>SUMU</keywords>
+	<keywords>SWITCH</keywords>
+	<keywords>SYNONYM</keywords>
+	<keywords>SYSCAT</keywords>
+	<keywords>SYSDATE</keywords>
+	<keywords>SYSFUN</keywords>
+	<keywords>SYSIBM</keywords>
+	<keywords>SYSSTAT</keywords>
+	<keywords>SYSTEM</keywords>
+	<keywords>SYSTIME</keywords>
+	<keywords>SYSTIMESTAMP</keywords>
+	<keywords>TABLE</keywords>
+	<keywords>TABLEDATA</keywords>
+	<keywords>TABLES</keywords>
+	<keywords>TABLESPACE</keywords>
+	<keywords>TAN</keywords>
+	<keywords>TAPE</keywords>
+	<keywords>TEMP</keywords>
+	<keywords>TEMPORARY</keywords>
+	<keywords>TERMINATE</keywords>
+	<keywords>THAN</keywords>
+	<keywords>TEXTSIZE</keywords>
+	<keywords>THEN</keywords>
+	<keywords>THREAD</keywords>
+	<keywords>TIME</keywords>
+	<keywords>TIMEOUT</keywords>
+	<keywords>TIMESTAMP</keywords>
+	<keywords>TIMEZONE_HOUR</keywords>
+	<keywords>TIMEZONE_MINUTE</keywords>
+	<keywords>TINYINT</keywords>
+	<keywords>TO</keywords>
+	<keywords>TOP</keywords>
+	<keywords>TPE</keywords>
+	<keywords>TRACING</keywords>
+	<keywords>TRAILING</keywords>
+	<keywords>TRAN</keywords>
+	<keywords>TRANSACTION</keywords>
+	<keywords>TRANSLATE</keywords>
+	<keywords>TRANSLATION</keywords>
+	<keywords>TREAT</keywords>
+	<keywords>TRIGGER</keywords>
+	<keywords>TRIGGERS</keywords>
+	<keywords>TRIM</keywords>
+	<keywords>TRUE</keywords>
+	<keywords>TRUNCATE</keywords>
+	<keywords>TSEQUAL</keywords>
+	<keywords>TYPE</keywords>
+	<keywords>UID</keywords>
+	<keywords>UNCOMMITTED</keywords>
+	<keywords>UNDER</keywords>
+	<keywords>UNION</keywords>
+	<keywords>UNIQUE</keywords>
+	<keywords>UNKNOWN</keywords>
+	<keywords>UNNEST</keywords>
+	<keywords>UNLIMITED</keywords>
+	<keywords>UNLOADTABLE</keywords>
+	<keywords>UNSIGNED</keywords>
+	<keywords>UNTIL</keywords>
+	<keywords>UP</keywords>
+	<keywords>UPDATE</keywords>
+	<keywords>UPDATETEXT</keywords>
+	<keywords>UPPER</keywords>
+	<keywords>USAGE</keywords>
+	<keywords>USE</keywords>
+	<keywords>USER</keywords>
+	<keywords>USING</keywords>
+	<keywords>UUID</keywords>
+	<keywords>VALIDATE</keywords>
+	<keywords>VALIDPROC</keywords>
+	<keywords>VALIDROW</keywords>
+	<keywords>VALUE</keywords>
+	<keywords>VALUES</keywords>
+	<keywords>VARBINARY</keywords>
+	<keywords>VARCHAR</keywords>
+	<keywords>VARIABLE</keywords>
+	<keywords>VARIABLES</keywords>
+	<keywords>VARYING</keywords>
+	<keywords>VCAT</keywords>
+	<keywords>VERSION</keywords>
+	<keywords>VIEW</keywords>
+	<keywords>VOLUMES</keywords>
+	<keywords>WAITFOR</keywords>
+	<keywords>WEEK</keywords>
+	<keywords>WHEN</keywords>
+	<keywords>WHENEVER</keywords>
+	<keywords>WHERE</keywords>
+	<keywords>WHILE</keywords>
+	<keywords>WITH</keywords>
+	<keywords>WITHOUT</keywords>
+	<keywords>WORK</keywords>
+	<keywords>WRITE</keywords>
+	<keywords>WRITETEXT</keywords>
+	<keywords>YEAR</keywords>
+	<keywords>YEARS</keywords>
+	<keywords>ZONE</keywords>
+  </SQLSyntaxDefinition>
+</DBDefinition:DatabaseVendorDefinition>
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/runtime/vendors/SQL Server_2008/SQL Server_2008.xmi b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/runtime/vendors/SQL Server_2008/SQL Server_2008.xmi
new file mode 100644
index 0000000..b02bbce
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/runtime/vendors/SQL Server_2008/SQL Server_2008.xmi
@@ -0,0 +1,943 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="SQL Server" version="2008" maximumIdentifierLength="128"
+ viewTriggerSupported="true" userDefinedTypeSupported="true">
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_1" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="long">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIGINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_2" multipleColumnsSupported="true" primitiveType="INTEGER" jdbcEnumType="-7" javaClassName="boolean">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" lengthSupported="true" lengthUnit="BYTE" multipleColumnsSupported="true" defaultLength="50" maximumLength="8000" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BINARY</name>
+  </predefinedDataTypeDefinitions>
+ <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_1" lengthSupported="true" lengthUnit="BYTE" multipleColumnsSupported="true" defaultLength="50" maximumLength="8000" largeValueSpecifierSupported="true" largeValueSpecifierName="MAX" largeValueSpecifierLength="-1" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARBINARY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_2" multipleColumnsSupported="true" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="-4" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>IMAGE</name>
+  </predefinedDataTypeDefinitions>
+  
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" multipleColumnsSupported="true"  maximumLength="8000" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>SYSTEM_USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR</name>
+    <name>CHARACTER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" multipleColumnsSupported="true"  maximumLength="4000" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>SYSTEM_USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" multipleColumnsSupported="true" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="-1" javaClassName="java.sql.Clob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_LARGE_OBJECT_1" multipleColumnsSupported="true" primitiveType="NATIONAL_CHARACTER_LARGE_OBJECT" jdbcEnumType="-1" javaClassName="java.sql.Clob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NTEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" multipleColumnsSupported="true"  maximumLength="8000" largeValueSpecifierSupported="true" largeValueSpecifierName="MAX" largeValueSpecifierLength="-1" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>SYSTEM_USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR</name>
+    <name>CHARACTER VARYING</name>
+    <name>CHAR VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_2" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>UNIQUEIDENTIFIER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" multipleColumnsSupported="true"  maximumLength="4000" largeValueSpecifierSupported="true" largeValueSpecifierName="MAX" largeValueSpecifierLength="-1" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>SYSTEM_USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NVARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="DATE" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATETIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_3" keyConstraintSupported="true" primitiveType="CHARACTER" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+   <predefinedDataTypeDefinitions xmi:id="DATE_4" keyConstraintSupported="true" primitiveType="CHARACTER" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATETIME2</name>
+  </predefinedDataTypeDefinitions>
+   <predefinedDataTypeDefinitions xmi:id="DATE_5" keyConstraintSupported="true" primitiveType="CHARACTER" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATETIMEOFFSET</name>
+  </predefinedDataTypeDefinitions>
+   <predefinedDataTypeDefinitions xmi:id="DATE_6" keyConstraintSupported="true" primitiveType="CHARACTER" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" scaleSupported="true" precisionSupported="true" maximumPrecision="38" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE PRECISION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" precisionSupported="true" maximumPrecision="53" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="FLOAT" jdbcEnumType="6" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INT</name>
+    <name>INTEGER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" scaleSupported="true" precisionSupported="true" maximumPrecision="38" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_2" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>MONEY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_3" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLMONEY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_2" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="DATE" jdbcEnumType="92" javaClassName="java.sql.Time">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLDATETIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_2" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="SMALLINT" jdbcEnumType="-6" javaClassName="short">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TINYINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP</name>
+    <name>ROWVERSION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_2" keyConstraintSupported="true" primitiveType="CHARACTER" jdbcEnumType="-150" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SQL_VARIANT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="XML_TYPE_1" primitiveType="XML_TYPE" jdbcEnumType="509" orderingSupported="false" groupingSupported="false" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>XML</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="GEOMETRY_1" jdbcEnumType="-4" orderingSupported="false" groupingSupported="false" primitiveType="BINARY" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>GEOMETRY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="GEOGRAPHY_1" jdbcEnumType="-4" orderingSupported="false" groupingSupported="false" primitiveType="BINARY" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>GEOGRAPHY</name>
+  </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="HIERARCHYID_2" keyConstraintSupported="true" primitiveType="CHARACTER" jdbcEnumType="-4" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>HIERARCHYID</name>
+  </predefinedDataTypeDefinitions>
+  
+  <triggerDefinition maximumIdentifierLength="128" typeSupported="true" insteadOfTriggerSupported="true"/>
+  <columnDefinition maximumIdentifierLength="128" identitySupported="true" computedSupported="true" identityStartValueSupported="true" identityIncrementSupported="true"/>
+  <constraintDefinition maximumPrimaryKeyIdentifierLength="128" maximumForeignKeyIdentifierLength="128" maximumCheckConstraintIdentifierLength="128" uniqueKeyNullable="true">
+    <parentUpdateDRIRuleType>CASCADE</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+  </constraintDefinition>
+  <queryDefinition hostVariableMarker="@"/>
+  <indexDefinition maximumIdentifierLength="128" clusteringSupported="true"/>
+  <viewDefinition maximumIdentifierLength="128" indexSupported="true"/>
+  <tableDefinition maximumIdentifierLength="128"/>
+  <schemaDefinition maximumIdentifierLength="128"/>
+  <storedProcedureDefinition maximumIdentifierLength="128">
+    <functionLanguageType>SQL</functionLanguageType>
+  </storedProcedureDefinition>
+  <udtDefinition maximumIdentifierLength="128" distinctTypeSupported="true"/>
+  <SQLSyntaxDefinition terminationCharacter="GO">
+    <keywords>A</keywords>
+	<keywords>ABORT</keywords>
+	<keywords>ABS</keywords>
+	<keywords>ABSOLUTE</keywords>
+	<keywords>ACCESS</keywords>
+	<keywords>ACOS</keywords>
+	<keywords>ACQUIRE</keywords>
+	<keywords>ACTION</keywords>
+	<keywords>ACTIVATE</keywords>
+	<keywords>ADA</keywords>
+	<keywords>ADD</keywords>
+	<keywords>ADDFORM</keywords>
+	<keywords>ADMIN</keywords>
+	<keywords>AFTER</keywords>
+	<keywords>AGGREGATE</keywords>
+	<keywords>ALIAS</keywords>
+	<keywords>ALL</keywords>
+	<keywords>ALLOCATE</keywords>
+	<keywords>ALTER</keywords>
+	<keywords>AN</keywords>
+	<keywords>ANALYZE</keywords>
+	<keywords>AND</keywords>
+	<keywords>ANY</keywords>
+	<keywords>APPEND</keywords>
+	<keywords>ARCHIVE</keywords>
+	<keywords>ARCHIVELOG</keywords>
+	<keywords>ARE</keywords>
+	<keywords>ARRAY</keywords>
+	<keywords>ARRAYLEN</keywords>
+	<keywords>AS</keywords>
+	<keywords>ASC</keywords>
+	<keywords>ASCII</keywords>
+	<keywords>ASIN</keywords>
+	<keywords>ASSERTION</keywords>
+	<keywords>AT</keywords>
+	<keywords>ATAN</keywords>
+	<keywords>AUDIT</keywords>
+	<keywords>AUTHORIZATION</keywords>
+	<keywords>AVG</keywords>
+	<keywords>AVGU</keywords>
+	<keywords>BACKUP</keywords>
+	<keywords>BECOME</keywords>
+	<keywords>BEFORE</keywords>
+	<keywords>BEGIN</keywords>
+	<keywords>BETWEEN</keywords>
+	<keywords>BIGINT</keywords>
+	<keywords>BINARY</keywords>
+	<keywords>BIND</keywords>
+	<keywords>BINDING</keywords>
+	<keywords>BIT</keywords>
+	<keywords>BIT_LENGTH</keywords>
+	<keywords>BLOB</keywords>
+	<keywords>BLOCK</keywords>
+	<keywords>BODY</keywords>
+	<keywords>BOOLEAN</keywords>
+	<keywords>BOTH</keywords>
+	<keywords>BREADTH</keywords>
+	<keywords>BREAK</keywords>
+	<keywords>BREAKDISPLAY</keywords>
+	<keywords>BROWSE</keywords>
+	<keywords>BUFFERPOOL</keywords>
+	<keywords>BULK</keywords>
+	<keywords>BY</keywords>
+	<keywords>BYREF</keywords>
+	<keywords>CACHE</keywords>
+	<keywords>CALL</keywords>
+	<keywords>CALLPROC</keywords>
+	<keywords>CANCEL</keywords>
+	<keywords>CAPTURE</keywords>
+	<keywords>CASCADE</keywords>
+	<keywords>CASCADED</keywords>
+	<keywords>CASE</keywords>
+	<keywords>CAST</keywords>
+	<keywords>CATALOG</keywords>
+	<keywords>CCSID</keywords>
+	<keywords>CEILING</keywords>
+	<keywords>CHANGE</keywords>
+	<keywords>CHAR</keywords>
+	<keywords>CHAR_LENGTH</keywords>
+	<keywords>CHARACTER</keywords>
+	<keywords>CHARACTER_LENGTH</keywords>
+	<keywords>CHARTOROWID</keywords>
+	<keywords>CHECK</keywords>
+	<keywords>CLASS</keywords>
+	<keywords>CLOB</keywords>
+	<keywords>CHECKPOINT</keywords>
+	<keywords>CHR</keywords>
+	<keywords>CLEANUP</keywords>
+	<keywords>CLEAR</keywords>
+	<keywords>CLEARROW</keywords>
+	<keywords>CLOSE</keywords>
+	<keywords>CLUSTER</keywords>
+	<keywords>CLUSTERED</keywords>
+	<keywords>COALESCE</keywords>
+	<keywords>COBOL</keywords>
+	<keywords>COLGROUP</keywords>
+	<keywords>COLLATE</keywords>
+	<keywords>COLLATION</keywords>
+	<keywords>COLLECTION</keywords>
+	<keywords>COLUMN</keywords>
+	<keywords>COMMAND</keywords>
+	<keywords>COMMENT</keywords>
+	<keywords>COMMIT</keywords>
+	<keywords>COMPLETION</keywords>
+	<keywords>COMMITTED</keywords>
+	<keywords>COMPILE</keywords>
+	<keywords>COMPLEX</keywords>
+	<keywords>COMPRESS</keywords>
+	<keywords>COMPUTE</keywords>
+	<keywords>CONCAT</keywords>
+	<keywords>CONFIRM</keywords>
+	<keywords>CONNECT</keywords>
+	<keywords>CONNECTION</keywords>
+	<keywords>CONSTRAINT</keywords>
+	<keywords>CONSTRAINTS</keywords>
+	<keywords>CONSTRUCTOR</keywords>
+	<keywords>CONTAINS</keywords>
+	<keywords>CONTAINSTABLE</keywords>
+	<keywords>CONTENTS</keywords>
+	<keywords>CONTINUE</keywords>
+	<keywords>CONTROLFILE</keywords>
+	<keywords>CONTROLROW</keywords>
+	<keywords>CONVERT</keywords>
+	<keywords>COPY</keywords>
+	<keywords>CORRESPONDING</keywords>
+	<keywords>COS</keywords>
+	<keywords>COUNT</keywords>
+	<keywords>COUNTU</keywords>
+	<keywords>CREATE</keywords>
+	<keywords>CROSS</keywords>
+	<keywords>CUBE</keywords>
+	<keywords>CURRENT</keywords>
+	<keywords>CURRENT_DATE</keywords>
+	<keywords>CURRENT_PATH</keywords>
+	<keywords>CURRENT_ROLE</keywords>
+	<keywords>CURRENT_TIME</keywords>
+	<keywords>CURRENT_TIMESTAMP</keywords>
+	<keywords>CURRENT_USER</keywords>
+	<keywords>CURSOR</keywords>
+	<keywords>CVAR</keywords>
+	<keywords>CYCLE</keywords>
+	<keywords>DATA</keywords>
+	<keywords>DATABASE</keywords>
+	<keywords>DATAFILE</keywords>
+	<keywords>DATAHANDLER</keywords>
+	<keywords>DATAPAGES</keywords>
+	<keywords>DATE</keywords>
+	<keywords>DAY</keywords>
+	<keywords>DAYOFMONTH</keywords>
+	<keywords>DAYOFWEEK</keywords>
+	<keywords>DAYOFYEAR</keywords>
+	<keywords>DAYS</keywords>
+	<keywords>DBA</keywords>
+	<keywords>DBCC</keywords>
+	<keywords>DBSPACE</keywords>
+	<keywords>DEALLOCATE</keywords>
+	<keywords>DEC</keywords>
+	<keywords>DECIMAL</keywords>
+	<keywords>DECLARATION</keywords>
+	<keywords>DECLARE</keywords>
+	<keywords>DECODE</keywords>
+	<keywords>DEFAULT</keywords>
+	<keywords>DEFERRABLE</keywords>
+	<keywords>DEFERRED</keywords>
+	<keywords>DEFINE</keywords>
+	<keywords>DEFINITION</keywords>
+	<keywords>DEGREES</keywords>
+	<keywords>DELETE</keywords>
+	<keywords>DEPTH</keywords>
+	<keywords>DEREF</keywords>
+	<keywords>DELETEROW</keywords>
+	<keywords>DENY</keywords>
+	<keywords>DESC</keywords>
+	<keywords>DESCRIBE</keywords>
+	<keywords>DESCRIPTOR</keywords>
+	<keywords>DESTROY</keywords>
+	<keywords>DHTYPE</keywords>
+	<keywords>DESTRUCTOR</keywords>
+	<keywords>DETERMINISTIC</keywords>
+	<keywords>DICTIONARY</keywords>
+	<keywords>DIAGNOSTICS</keywords>
+	<keywords>DIRECT</keywords>
+	<keywords>DISABLE</keywords>
+	<keywords>DISCONNECT</keywords>
+	<keywords>DISK</keywords>
+	<keywords>DISMOUNT</keywords>
+	<keywords>DISPLAY</keywords>
+	<keywords>DISTINCT</keywords>
+	<keywords>DISTRIBUTE</keywords>
+	<keywords>DISTRIBUTED</keywords>
+	<keywords>DO</keywords>
+	<keywords>DOMAIN</keywords>
+	<keywords>DOUBLE</keywords>
+	<keywords>DOWN</keywords>
+	<keywords>DROP</keywords>
+	<keywords>DUMMY</keywords>
+	<keywords>DUMP</keywords>
+	<keywords>DYNAMIC</keywords>
+	<keywords>EACH</keywords>
+	<keywords>EDITPROC</keywords>
+	<keywords>ELSE</keywords>
+	<keywords>ELSEIF</keywords>
+	<keywords>ENABLE</keywords>
+	<keywords>END</keywords>
+	<keywords>ENDDATA</keywords>
+	<keywords>ENDDISPLAY</keywords>
+	<keywords>ENDEXEC</keywords>
+	<keywords>END-EXEC</keywords>
+	<keywords>ENDFORMS</keywords>
+	<keywords>ENDIF</keywords>
+	<keywords>ENDLOOP</keywords>
+	<keywords>EQUALS</keywords>
+	<keywords>ENDSELECT</keywords>
+	<keywords>ENDWHILE</keywords>
+	<keywords>ERASE</keywords>
+	<keywords>ERRLVL</keywords>
+	<keywords>ERROREXIT</keywords>
+	<keywords>ESCAPE</keywords>
+	<keywords>EVENTS</keywords>
+	<keywords>EVERY</keywords>
+	<keywords>EXCEPT</keywords>
+	<keywords>EXCEPTION</keywords>
+	<keywords>EXCEPTIONS</keywords>
+	<keywords>EXCLUDE</keywords>
+	<keywords>EXCLUDING</keywords>
+	<keywords>EXCLUSIVE</keywords>
+	<keywords>EXEC</keywords>
+	<keywords>EXECUTE</keywords>
+	<keywords>EXISTS</keywords>
+	<keywords>EXIT</keywords>
+	<keywords>EXP</keywords>
+	<keywords>EXPLAIN</keywords>
+	<keywords>EXPLICIT</keywords>
+	<keywords>EXTENT</keywords>
+	<keywords>EXTERNAL</keywords>
+	<keywords>EXTERNALLY</keywords>
+	<keywords>EXTRACT</keywords>
+	<keywords>FALSE</keywords>
+	<keywords>FETCH</keywords>
+	<keywords>FIELD</keywords>
+	<keywords>FIELDPROC</keywords>
+	<keywords>FILE</keywords>
+	<keywords>FILLFACTOR</keywords>
+	<keywords>FINALIZE</keywords>
+	<keywords>FINALIZE</keywords>
+	<keywords>FIRST</keywords>
+	<keywords>FLOAT</keywords>
+	<keywords>FLOOR</keywords>
+	<keywords>FLOPPY</keywords>
+	<keywords>FLUSH</keywords>
+	<keywords>FOR</keywords>
+	<keywords>FORCE</keywords>
+	<keywords>FORMDATA</keywords>
+	<keywords>FORMINIT</keywords>
+	<keywords>FORMS</keywords>
+	<keywords>FORTRAN</keywords>
+	<keywords>FOREIGN</keywords>
+	<keywords>FOUND</keywords>
+	<keywords>FREELIST</keywords>
+	<keywords>FREELISTS</keywords>
+	<keywords>FREETEXT</keywords>
+	<keywords>FREETEXTTABLE</keywords>
+	<keywords>FROM</keywords>
+	<keywords>FREE</keywords>
+	<keywords>FULL</keywords>
+	<keywords>FULLTEXTTABLE</keywords>
+	<keywords>FUNCTION</keywords>
+	<keywords>GENERAL</keywords>
+	<keywords>GET</keywords>
+	<keywords>GETCURRENTCONNECTION</keywords>
+	<keywords>GETFORM</keywords>
+	<keywords>GETOPER</keywords>
+	<keywords>GETROW</keywords>
+	<keywords>GLOBAL</keywords>
+	<keywords>GO</keywords>
+	<keywords>GOTO</keywords>
+	<keywords>GRANT</keywords>
+	<keywords>GRANTED</keywords>
+	<keywords>GRAPHIC</keywords>
+	<keywords>GREATEST</keywords>
+	<keywords>GROUP</keywords>
+	<keywords>GROUPING</keywords>
+	<keywords>GROUPS</keywords>
+	<keywords>HASH</keywords>
+	<keywords>HAVING</keywords>
+	<keywords>HOST</keywords>
+	<keywords>HELP</keywords>
+	<keywords>HELPFILE</keywords>
+	<keywords>HOLDLOCK</keywords>
+	<keywords>HOUR</keywords>
+	<keywords>HOURS</keywords>
+	<keywords>IDENTIFIED</keywords>
+	<keywords>IDENTITY</keywords>
+	<keywords>IDENTITY_INSERT</keywords>
+	<keywords>IGNORE</keywords>
+	<keywords>IDENTITYCOL</keywords>
+	<keywords>IF</keywords>
+	<keywords>IFNULL</keywords>
+	<keywords>IIMESSAGE</keywords>
+	<keywords>IIPRINTF</keywords>
+	<keywords>IMMEDIATE</keywords>
+	<keywords>IMPORT</keywords>
+	<keywords>IN</keywords>
+	<keywords>INCLUDE</keywords>
+	<keywords>INCLUDING</keywords>
+	<keywords>INCREMENT</keywords>
+	<keywords>INDEX</keywords>
+	<keywords>INDEXPAGES</keywords>
+	<keywords>INDICATOR</keywords>
+	<keywords>INITCAP</keywords>
+	<keywords>INITIAL</keywords>
+	<keywords>INITIALIZE</keywords>
+	<keywords>INITIALLY</keywords>
+	<keywords>INITRANS</keywords>
+	<keywords>INITTABLE</keywords>
+	<keywords>INNER</keywords>
+	<keywords>INOUT</keywords>
+	<keywords>INPUT</keywords>
+	<keywords>INSENSITIVE</keywords>
+	<keywords>INSERT</keywords>
+	<keywords>INSERTROW</keywords>
+	<keywords>INSTANCE</keywords>
+	<keywords>INSTR</keywords>
+	<keywords>INT</keywords>
+	<keywords>INTEGER</keywords>
+	<keywords>INTEGRITY</keywords>
+	<keywords>INTERFACE</keywords>
+	<keywords>INTERSECT</keywords>
+	<keywords>INTERVAL</keywords>
+	<keywords>INTO</keywords>
+	<keywords>IS</keywords>
+	<keywords>ISOLATION</keywords>
+	<keywords>ITERATE</keywords>
+	<keywords>JOIN</keywords>
+	<keywords>KEY</keywords>
+	<keywords>KILL</keywords>
+	<keywords>LABEL</keywords>
+	<keywords>LANGUAGE</keywords>
+	<keywords>LARGE</keywords>
+	<keywords>LAST</keywords>
+	<keywords>LATERAL</keywords>
+	<keywords>LAYER</keywords>
+	<keywords>LEADING</keywords>
+	<keywords>LEAST</keywords>
+	<keywords>LEFT</keywords>
+	<keywords>LESS</keywords>
+	<keywords>LENGTH</keywords>
+	<keywords>LEVEL</keywords>
+	<keywords>LIKE</keywords>
+	<keywords>LIMIT</keywords>
+	<keywords>LINENO</keywords>
+	<keywords>LINK</keywords>
+	<keywords>LIST</keywords>
+	<keywords>LISTS</keywords>
+	<keywords>LOAD</keywords>
+	<keywords>LOADTABLE</keywords>
+	<keywords>LOCAL</keywords>
+	<keywords>LOCALTIME</keywords>
+	<keywords>LOCALTIMESTAMP</keywords>
+	<keywords>LOCATOR</keywords>
+	<keywords>LOCATE</keywords>
+	<keywords>LOCK</keywords>
+	<keywords>LOCKSIZE</keywords>
+	<keywords>LOG</keywords>
+	<keywords>LOGFILE</keywords>
+	<keywords>LONG</keywords>
+	<keywords>LONGINT</keywords>
+	<keywords>LOWER</keywords>
+	<keywords>LPAD</keywords>
+	<keywords>LTRIM</keywords>
+	<keywords>LVARBINARY</keywords>
+	<keywords>LVARCHAR</keywords>
+	<keywords>MAIN</keywords>
+	<keywords>MANAGE</keywords>
+	<keywords>MANUAL</keywords>
+	<keywords>MAP</keywords>
+	<keywords>MATCH</keywords>
+	<keywords>MAX</keywords>
+	<keywords>MAXDATAFILES</keywords>
+	<keywords>MAXEXTENTS</keywords>
+	<keywords>MAXINSTANCES</keywords>
+	<keywords>MAXLOGFILES</keywords>
+	<keywords>MAXLOGHISTORY</keywords>
+	<keywords>MAXLOGMEMBERS</keywords>
+	<keywords>MAXTRANS</keywords>
+	<keywords>MAXVALUE</keywords>
+	<keywords>MENUITEM</keywords>
+	<keywords>MESSAGE</keywords>
+	<keywords>MERGE</keywords>
+	<keywords>MICROSECOND</keywords>
+	<keywords>MICROSECONDS</keywords>
+	<keywords>MIN</keywords>
+	<keywords>MINEXTENTS</keywords>
+	<keywords>MINUS</keywords>
+	<keywords>MINUTE</keywords>
+	<keywords>MODIFIES</keywords>
+	<keywords>MINUTES</keywords>
+	<keywords>MINVALUE</keywords>
+	<keywords>MIRROREXIT</keywords>
+	<keywords>MOD</keywords>
+	<keywords>MODE</keywords>
+	<keywords>MODIFY</keywords>
+	<keywords>MODULE</keywords>
+	<keywords>MONEY</keywords>
+	<keywords>MONTH</keywords>
+	<keywords>MONTHS</keywords>
+	<keywords>MOUNT</keywords>
+	<keywords>MOVE</keywords>
+	<keywords>NAMED</keywords>
+	<keywords>NAMES</keywords>
+	<keywords>NATIONAL</keywords>
+	<keywords>NATURAL</keywords>
+	<keywords>NCHAR</keywords>
+	<keywords>NCLOB</keywords>
+	<keywords>NEW</keywords>
+	<keywords>NEXT</keywords>
+	<keywords>NHEADER</keywords>
+	<keywords>NO</keywords>
+	<keywords>NOARCHIVELOG</keywords>
+	<keywords>NOAUDIT</keywords>
+	<keywords>NOCACHE</keywords>
+	<keywords>NOCHECK</keywords>
+	<keywords>NOCOMPRESS</keywords>
+	<keywords>NOCYCLE</keywords>
+	<keywords>NOECHO</keywords>
+	<keywords>NOMAXVALUE</keywords>
+	<keywords>NOMINVALUE</keywords>
+	<keywords>NONCLUSTERED</keywords>
+	<keywords>NONE</keywords>
+	<keywords>NOORDER</keywords>
+	<keywords>NORESETLOGS</keywords>
+	<keywords>NORMAL</keywords>
+	<keywords>NOSORT</keywords>
+	<keywords>NOT</keywords>
+	<keywords>NOTFOUND</keywords>
+	<keywords>NOTRIM</keywords>
+	<keywords>NOWAIT</keywords>
+	<keywords>NULL</keywords>
+	<keywords>NULLIF</keywords>
+	<keywords>NULLVALUE</keywords>
+	<keywords>NUMBER</keywords>
+	<keywords>NUMERIC</keywords>
+	<keywords>OBJECT</keywords>
+	<keywords>NUMPARTS</keywords>
+	<keywords>NVL</keywords>
+	<keywords>OBID</keywords>
+	<keywords>OCTET_LENGTH</keywords>
+	<keywords>ODBCINFO</keywords>
+	<keywords>OF</keywords>
+	<keywords>OFF</keywords>
+	<keywords>OFFLINE</keywords>
+	<keywords>OFFSETS</keywords>
+	<keywords>OLD</keywords>
+	<keywords>ON</keywords>
+	<keywords>ONCE</keywords>
+	<keywords>ONLINE</keywords>
+	<keywords>ONLY</keywords>
+	<keywords>OPEN</keywords>
+	<keywords>OPERATION</keywords>
+	<keywords>OPENDATASOURCE</keywords>
+	<keywords>OPENQUERY</keywords>
+	<keywords>OPENROWSET</keywords>
+	<keywords>OPENXML</keywords>
+	<keywords>OPTIMAL</keywords>
+	<keywords>OPTIMIZE</keywords>
+	<keywords>OPTION</keywords>
+	<keywords>OR</keywords>
+	<keywords>ORDER</keywords>
+	<keywords>ORDINALITY</keywords>
+	<keywords>OUT</keywords>
+	<keywords>OUTER</keywords>
+	<keywords>OUTPUT</keywords>
+	<keywords>OVER</keywords>
+	<keywords>OVERLAPS</keywords>
+	<keywords>OWN</keywords>
+	<keywords>PACKAGE</keywords>
+	<keywords>PAD</keywords>
+	<keywords>PARAMETER</keywords>
+	<keywords>PARAMETERS</keywords>
+	<keywords>PAGE</keywords>
+	<keywords>PAGES</keywords>
+	<keywords>PARALLEL</keywords>
+	<keywords>PART</keywords>
+	<keywords>PARTIAL</keywords>
+	<keywords>PATH</keywords>
+	<keywords>PIVOT</keywords>
+	<keywords>POSTFIX</keywords>
+	<keywords>PASCAL</keywords>
+	<keywords>PCTFREE</keywords>
+	<keywords>PCTINCREASE</keywords>
+	<keywords>PCTINDEX</keywords>
+	<keywords>PCTUSED</keywords>
+	<keywords>PERCENT</keywords>
+	<keywords>PERM</keywords>
+	<keywords>PERMANENT</keywords>
+	<keywords>PERMIT</keywords>
+	<keywords>PI</keywords>
+	<keywords>PIPE</keywords>
+	<keywords>PLAN</keywords>
+	<keywords>PLI</keywords>
+	<keywords>POSITION</keywords>
+	<keywords>POWER</keywords>
+	<keywords>PRECISION</keywords>
+	<keywords>PREFIX</keywords>
+	<keywords>PREORDER</keywords>
+	<keywords>PREPARE</keywords>
+	<keywords>PRESERVE</keywords>
+	<keywords>PRIMARY</keywords>
+	<keywords>PRINT</keywords>
+	<keywords>PRINTSCREEN</keywords>
+	<keywords>PRIOR</keywords>
+	<keywords>PRIQTY</keywords>
+	<keywords>PRIVATE</keywords>
+	<keywords>PRIVILEGES</keywords>
+	<keywords>PROC</keywords>
+	<keywords>PROCEDURE</keywords>
+	<keywords>PROCESSEXIT</keywords>
+	<keywords>PROFILE</keywords>
+	<keywords>PROGRAM</keywords>
+	<keywords>PROMPT</keywords>
+	<keywords>PUBLIC</keywords>
+	<keywords>PUTFORM</keywords>
+	<keywords>PUTOPER</keywords>
+	<keywords>PUTROW</keywords>
+	<keywords>QUALIFICATION</keywords>
+	<keywords>QUARTER</keywords>
+	<keywords>QUOTA</keywords>
+	<keywords>RADIANS</keywords>
+	<keywords>RAISE</keywords>
+	<keywords>RAISERROR</keywords>
+	<keywords>RAND</keywords>
+	<keywords>RANGE</keywords>
+	<keywords>RAW</keywords>
+	<keywords>READ</keywords>
+	<keywords>READS</keywords>
+	<keywords>READTEXT</keywords>
+	<keywords>REAL</keywords>
+	<keywords>RECURSIVE</keywords>
+	<keywords>REF</keywords>
+	<keywords>RECONFIGURE</keywords>
+	<keywords>RECORD</keywords>
+	<keywords>RECOVER</keywords>
+	<keywords>REDISPLAY</keywords>
+	<keywords>REFERENCES</keywords>
+	<keywords>REFERENCING</keywords>
+	<keywords>RELATIVE</keywords>
+	<keywords>REGISTER</keywords>
+	<keywords>RELEASE</keywords>
+	<keywords>RELOCATE</keywords>
+	<keywords>REMOVE</keywords>
+	<keywords>RENAME</keywords>
+	<keywords>REPEAT</keywords>
+	<keywords>REPEATABLE</keywords>
+	<keywords>REPEATED</keywords>
+	<keywords>REPLACE</keywords>
+	<keywords>REPLICATE</keywords>
+	<keywords>REPLICATION</keywords>
+	<keywords>RESET</keywords>
+	<keywords>RESETLOGS</keywords>
+	<keywords>RESOURCE</keywords>
+	<keywords>RESTORE</keywords>
+	<keywords>RESTRICT</keywords>
+	<keywords>RESULT</keywords>
+	<keywords>RESTRICTED</keywords>
+	<keywords>RESUME</keywords>
+	<keywords>RETRIEVE</keywords>
+	<keywords>RETURN</keywords>
+	<keywords>RETURNS</keywords>
+	<keywords>REUSE</keywords>
+	<keywords>REVERT</keywords>
+	<keywords>REVOKE</keywords>
+	<keywords>RIGHT</keywords>
+	<keywords>ROLE</keywords>
+	<keywords>ROLES</keywords>
+	<keywords>ROLLBACK</keywords>
+	<keywords>ROLLUP</keywords>
+	<keywords>ROUTINE</keywords>
+	<keywords>ROW</keywords>
+	<keywords>ROWS</keywords>
+	<keywords>ROWCOUNT</keywords>
+	<keywords>ROWGUIDCOL</keywords>
+	<keywords>ROWID</keywords>
+	<keywords>ROWIDTOCHAR</keywords>
+	<keywords>ROWLABEL</keywords>
+	<keywords>ROWNUM</keywords>
+	<keywords>ROWS</keywords>
+	<keywords>RPAD</keywords>
+	<keywords>RRN</keywords>
+	<keywords>RTRIM</keywords>
+	<keywords>RULE</keywords>
+	<keywords>RUN</keywords>
+	<keywords>RUNTIMESTATISTICS</keywords>
+	<keywords>SAVE</keywords>
+	<keywords>SAVEPOINT</keywords>
+	<keywords>SCHEDULE</keywords>
+	<keywords>SCHEMA</keywords>
+	<keywords>SCN</keywords>
+	<keywords>SCREEN</keywords>
+	<keywords>SCROLL</keywords>
+	<keywords>SCOPE</keywords>
+	<keywords>SEARCH</keywords>
+	<keywords>SCROLLDOWN</keywords>
+	<keywords>SCROLLUP</keywords>
+	<keywords>SECOND</keywords>
+	<keywords>SECONDS</keywords>
+	<keywords>SECQTY</keywords>
+	<keywords>SECTION</keywords>
+	<keywords>SECURITYAUDIT</keywords>
+	<keywords>SEGMENT</keywords>
+	<keywords>SELECT</keywords>
+	<keywords>SEQUENCE</keywords>
+	<keywords>SERIALIZABLE</keywords>
+	<keywords>SERVICE</keywords>
+	<keywords>SESSION</keywords>
+	<keywords>SESSION_USER</keywords>
+	<keywords>SET</keywords>
+	<keywords>SETS</keywords>
+	<keywords>SETUSER</keywords>
+	<keywords>SIN</keywords>
+	<keywords>SIMPLE</keywords>
+	<keywords>SIGN</keywords>
+	<keywords>SHUTDOWN</keywords>
+	<keywords>SHORT</keywords>
+	<keywords>SHARE</keywords>
+	<keywords>SHARED</keywords>
+	<keywords>SETUSER</keywords>
+	<keywords>SIZE</keywords>
+	<keywords>SLEEP</keywords>
+	<keywords>SMALLINT</keywords>
+	<keywords>SNAPSHOT</keywords>
+	<keywords>SOME</keywords>
+	<keywords>SORT</keywords>
+	<keywords>SOUNDEX</keywords>
+	<keywords>SPACE</keywords>
+	<keywords>SPECIFIC</keywords>
+	<keywords>SPECIFICTYPE</keywords>
+	<keywords>SQL</keywords>
+	<keywords>SQLEXCEPTION</keywords>
+	<keywords>SQLBUF</keywords>
+	<keywords>SQLCA</keywords>
+	<keywords>SQLCODE</keywords>
+	<keywords>SQLERROR</keywords>
+	<keywords>SQLSTATE</keywords>
+	<keywords>SQLWARNING</keywords>
+	<keywords>SQRT</keywords>
+	<keywords>START</keywords>
+	<keywords>STATE</keywords>
+	<keywords>STATEMENT</keywords>
+	<keywords>STATIC</keywords>
+	<keywords>STRUCTURE</keywords>
+	<keywords>STATISTICS</keywords>
+	<keywords>STOGROUP</keywords>
+	<keywords>STOP</keywords>
+	<keywords>STORAGE</keywords>
+	<keywords>STORPOOL</keywords>
+	<keywords>SUBMENU</keywords>
+	<keywords>SUBPAGES</keywords>
+	<keywords>SUBSTR</keywords>
+	<keywords>SUBSTRING</keywords>
+	<keywords>SUCCESSFUL</keywords>
+	<keywords>SUFFIX</keywords>
+	<keywords>SUM</keywords>
+	<keywords>SYSTEM_USER</keywords>
+	<keywords>SUMU</keywords>
+	<keywords>SWITCH</keywords>
+	<keywords>SYNONYM</keywords>
+	<keywords>SYSCAT</keywords>
+	<keywords>SYSDATE</keywords>
+	<keywords>SYSFUN</keywords>
+	<keywords>SYSIBM</keywords>
+	<keywords>SYSSTAT</keywords>
+	<keywords>SYSTEM</keywords>
+	<keywords>SYSTIME</keywords>
+	<keywords>SYSTIMESTAMP</keywords>
+	<keywords>TABLE</keywords>
+	<keywords>TABLEDATA</keywords>
+	<keywords>TABLES</keywords>
+	<keywords>TABLESAMPLE</keywords>
+	<keywords>TABLESPACE</keywords>
+	<keywords>TAN</keywords>
+	<keywords>TAPE</keywords>
+	<keywords>TEMP</keywords>
+	<keywords>TEMPORARY</keywords>
+	<keywords>TERMINATE</keywords>
+	<keywords>THAN</keywords>
+	<keywords>TEXTSIZE</keywords>
+	<keywords>THEN</keywords>
+	<keywords>THREAD</keywords>
+	<keywords>TIME</keywords>
+	<keywords>TIMEOUT</keywords>
+	<keywords>TIMESTAMP</keywords>
+	<keywords>TIMEZONE_HOUR</keywords>
+	<keywords>TIMEZONE_MINUTE</keywords>
+	<keywords>TINYINT</keywords>
+	<keywords>TO</keywords>
+	<keywords>TOP</keywords>
+	<keywords>TPE</keywords>
+	<keywords>TRACING</keywords>
+	<keywords>TRAILING</keywords>
+	<keywords>TRAN</keywords>
+	<keywords>TRANSACTION</keywords>
+	<keywords>TRANSLATE</keywords>
+	<keywords>TRANSLATION</keywords>
+	<keywords>TREAT</keywords>
+	<keywords>TRIGGER</keywords>
+	<keywords>TRIGGERS</keywords>
+	<keywords>TRIM</keywords>
+	<keywords>TRUE</keywords>
+	<keywords>TRUNCATE</keywords>
+	<keywords>TSEQUAL</keywords>
+	<keywords>TYPE</keywords>
+	<keywords>UID</keywords>
+	<keywords>UNCOMMITTED</keywords>
+	<keywords>UNDER</keywords>
+	<keywords>UNION</keywords>
+	<keywords>UNIQUE</keywords>
+	<keywords>UNKNOWN</keywords>
+	<keywords>UNNEST</keywords>
+	<keywords>UNLIMITED</keywords>
+	<keywords>UNLOADTABLE</keywords>
+	<keywords>UNPIVOT</keywords>
+	<keywords>UNSIGNED</keywords>
+	<keywords>UNTIL</keywords>
+	<keywords>UP</keywords>
+	<keywords>UPDATE</keywords>
+	<keywords>UPDATETEXT</keywords>
+	<keywords>UPPER</keywords>
+	<keywords>USAGE</keywords>
+	<keywords>USE</keywords>
+	<keywords>USER</keywords>
+	<keywords>USING</keywords>
+	<keywords>UUID</keywords>
+	<keywords>VALIDATE</keywords>
+	<keywords>VALIDPROC</keywords>
+	<keywords>VALIDROW</keywords>
+	<keywords>VALUE</keywords>
+	<keywords>VALUES</keywords>
+	<keywords>VARBINARY</keywords>
+	<keywords>VARCHAR</keywords>
+	<keywords>VARIABLE</keywords>
+	<keywords>VARIABLES</keywords>
+	<keywords>VARYING</keywords>
+	<keywords>VCAT</keywords>
+	<keywords>VERSION</keywords>
+	<keywords>VIEW</keywords>
+	<keywords>VOLUMES</keywords>
+	<keywords>WAITFOR</keywords>
+	<keywords>WEEK</keywords>
+	<keywords>WHEN</keywords>
+	<keywords>WHENEVER</keywords>
+	<keywords>WHERE</keywords>
+	<keywords>WHILE</keywords>
+	<keywords>WITH</keywords>
+	<keywords>WITHOUT</keywords>
+	<keywords>WORK</keywords>
+	<keywords>WRITE</keywords>
+	<keywords>WRITETEXT</keywords>
+	<keywords>YEAR</keywords>
+	<keywords>YEARS</keywords>
+	<keywords>ZONE</keywords>
+  </SQLSyntaxDefinition>
+</DBDefinition:DatabaseVendorDefinition>
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/runtime/vendors/SQL Server_2012/SQL Server_2012.xmi b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/runtime/vendors/SQL Server_2012/SQL Server_2012.xmi
new file mode 100644
index 0000000..0b9eea4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/runtime/vendors/SQL Server_2012/SQL Server_2012.xmi
@@ -0,0 +1,943 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="SQL Server" version="2012" maximumIdentifierLength="128"
+ viewTriggerSupported="true" userDefinedTypeSupported="true">
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_1" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="long">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIGINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_2" multipleColumnsSupported="true" primitiveType="INTEGER" jdbcEnumType="-7" javaClassName="boolean">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" lengthSupported="true" lengthUnit="BYTE" multipleColumnsSupported="true" defaultLength="50" maximumLength="8000" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BINARY</name>
+  </predefinedDataTypeDefinitions>
+ <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_1" lengthSupported="true" lengthUnit="BYTE" multipleColumnsSupported="true" defaultLength="50" maximumLength="8000" largeValueSpecifierSupported="true" largeValueSpecifierName="MAX" largeValueSpecifierLength="-1" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARBINARY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_2" multipleColumnsSupported="true" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="-4" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>IMAGE</name>
+  </predefinedDataTypeDefinitions>
+  
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" multipleColumnsSupported="true"  maximumLength="8000" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>SYSTEM_USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR</name>
+    <name>CHARACTER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" multipleColumnsSupported="true"  maximumLength="4000" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>SYSTEM_USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" multipleColumnsSupported="true" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="-1" javaClassName="java.sql.Clob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_LARGE_OBJECT_1" multipleColumnsSupported="true" primitiveType="NATIONAL_CHARACTER_LARGE_OBJECT" jdbcEnumType="-1" javaClassName="java.sql.Clob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NTEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" multipleColumnsSupported="true"  maximumLength="8000" largeValueSpecifierSupported="true" largeValueSpecifierName="MAX" largeValueSpecifierLength="-1" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>SYSTEM_USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR</name>
+    <name>CHARACTER VARYING</name>
+    <name>CHAR VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_2" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>UNIQUEIDENTIFIER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" multipleColumnsSupported="true"  maximumLength="4000" largeValueSpecifierSupported="true" largeValueSpecifierName="MAX" largeValueSpecifierLength="-1" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>SYSTEM_USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NVARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="DATE" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATETIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_3" keyConstraintSupported="true" primitiveType="CHARACTER" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+   <predefinedDataTypeDefinitions xmi:id="DATE_4" keyConstraintSupported="true" primitiveType="CHARACTER" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATETIME2</name>
+  </predefinedDataTypeDefinitions>
+   <predefinedDataTypeDefinitions xmi:id="DATE_5" keyConstraintSupported="true" primitiveType="CHARACTER" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATETIMEOFFSET</name>
+  </predefinedDataTypeDefinitions>
+   <predefinedDataTypeDefinitions xmi:id="DATE_6" keyConstraintSupported="true" primitiveType="CHARACTER" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" scaleSupported="true" precisionSupported="true" maximumPrecision="38" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE PRECISION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" precisionSupported="true" maximumPrecision="53" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="FLOAT" jdbcEnumType="6" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INT</name>
+    <name>INTEGER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" scaleSupported="true" precisionSupported="true" maximumPrecision="38" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_2" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>MONEY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_3" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLMONEY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_2" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="DATE" jdbcEnumType="92" javaClassName="java.sql.Time">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLDATETIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_2" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="SMALLINT" jdbcEnumType="-6" javaClassName="short">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TINYINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP</name>
+    <name>ROWVERSION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_2" keyConstraintSupported="true" primitiveType="CHARACTER" jdbcEnumType="-150" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SQL_VARIANT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="XML_TYPE_1" primitiveType="XML_TYPE" jdbcEnumType="509" orderingSupported="false" groupingSupported="false" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>XML</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="GEOMETRY_1" jdbcEnumType="-4" orderingSupported="false" groupingSupported="false" primitiveType="BINARY" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>GEOMETRY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="GEOGRAPHY_1" jdbcEnumType="-4" orderingSupported="false" groupingSupported="false" primitiveType="BINARY" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>GEOGRAPHY</name>
+  </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="HIERARCHYID_2" keyConstraintSupported="true" primitiveType="CHARACTER" jdbcEnumType="-4" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>HIERARCHYID</name>
+  </predefinedDataTypeDefinitions>
+  
+  <triggerDefinition maximumIdentifierLength="128" typeSupported="true" insteadOfTriggerSupported="true"/>
+  <columnDefinition maximumIdentifierLength="128" identitySupported="true" computedSupported="true" identityStartValueSupported="true" identityIncrementSupported="true"/>
+  <constraintDefinition maximumPrimaryKeyIdentifierLength="128" maximumForeignKeyIdentifierLength="128" maximumCheckConstraintIdentifierLength="128" uniqueKeyNullable="true">
+    <parentUpdateDRIRuleType>CASCADE</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+  </constraintDefinition>
+  <queryDefinition hostVariableMarker="@"/>
+  <indexDefinition maximumIdentifierLength="128" clusteringSupported="true"/>
+  <viewDefinition maximumIdentifierLength="128" indexSupported="true"/>
+  <tableDefinition maximumIdentifierLength="128"/>
+  <schemaDefinition maximumIdentifierLength="128"/>
+  <storedProcedureDefinition maximumIdentifierLength="128">
+    <functionLanguageType>SQL</functionLanguageType>
+  </storedProcedureDefinition>
+  <udtDefinition maximumIdentifierLength="128" distinctTypeSupported="true"/>
+  <SQLSyntaxDefinition terminationCharacter="GO">
+    <keywords>A</keywords>
+	<keywords>ABORT</keywords>
+	<keywords>ABS</keywords>
+	<keywords>ABSOLUTE</keywords>
+	<keywords>ACCESS</keywords>
+	<keywords>ACOS</keywords>
+	<keywords>ACQUIRE</keywords>
+	<keywords>ACTION</keywords>
+	<keywords>ACTIVATE</keywords>
+	<keywords>ADA</keywords>
+	<keywords>ADD</keywords>
+	<keywords>ADDFORM</keywords>
+	<keywords>ADMIN</keywords>
+	<keywords>AFTER</keywords>
+	<keywords>AGGREGATE</keywords>
+	<keywords>ALIAS</keywords>
+	<keywords>ALL</keywords>
+	<keywords>ALLOCATE</keywords>
+	<keywords>ALTER</keywords>
+	<keywords>AN</keywords>
+	<keywords>ANALYZE</keywords>
+	<keywords>AND</keywords>
+	<keywords>ANY</keywords>
+	<keywords>APPEND</keywords>
+	<keywords>ARCHIVE</keywords>
+	<keywords>ARCHIVELOG</keywords>
+	<keywords>ARE</keywords>
+	<keywords>ARRAY</keywords>
+	<keywords>ARRAYLEN</keywords>
+	<keywords>AS</keywords>
+	<keywords>ASC</keywords>
+	<keywords>ASCII</keywords>
+	<keywords>ASIN</keywords>
+	<keywords>ASSERTION</keywords>
+	<keywords>AT</keywords>
+	<keywords>ATAN</keywords>
+	<keywords>AUDIT</keywords>
+	<keywords>AUTHORIZATION</keywords>
+	<keywords>AVG</keywords>
+	<keywords>AVGU</keywords>
+	<keywords>BACKUP</keywords>
+	<keywords>BECOME</keywords>
+	<keywords>BEFORE</keywords>
+	<keywords>BEGIN</keywords>
+	<keywords>BETWEEN</keywords>
+	<keywords>BIGINT</keywords>
+	<keywords>BINARY</keywords>
+	<keywords>BIND</keywords>
+	<keywords>BINDING</keywords>
+	<keywords>BIT</keywords>
+	<keywords>BIT_LENGTH</keywords>
+	<keywords>BLOB</keywords>
+	<keywords>BLOCK</keywords>
+	<keywords>BODY</keywords>
+	<keywords>BOOLEAN</keywords>
+	<keywords>BOTH</keywords>
+	<keywords>BREADTH</keywords>
+	<keywords>BREAK</keywords>
+	<keywords>BREAKDISPLAY</keywords>
+	<keywords>BROWSE</keywords>
+	<keywords>BUFFERPOOL</keywords>
+	<keywords>BULK</keywords>
+	<keywords>BY</keywords>
+	<keywords>BYREF</keywords>
+	<keywords>CACHE</keywords>
+	<keywords>CALL</keywords>
+	<keywords>CALLPROC</keywords>
+	<keywords>CANCEL</keywords>
+	<keywords>CAPTURE</keywords>
+	<keywords>CASCADE</keywords>
+	<keywords>CASCADED</keywords>
+	<keywords>CASE</keywords>
+	<keywords>CAST</keywords>
+	<keywords>CATALOG</keywords>
+	<keywords>CCSID</keywords>
+	<keywords>CEILING</keywords>
+	<keywords>CHANGE</keywords>
+	<keywords>CHAR</keywords>
+	<keywords>CHAR_LENGTH</keywords>
+	<keywords>CHARACTER</keywords>
+	<keywords>CHARACTER_LENGTH</keywords>
+	<keywords>CHARTOROWID</keywords>
+	<keywords>CHECK</keywords>
+	<keywords>CLASS</keywords>
+	<keywords>CLOB</keywords>
+	<keywords>CHECKPOINT</keywords>
+	<keywords>CHR</keywords>
+	<keywords>CLEANUP</keywords>
+	<keywords>CLEAR</keywords>
+	<keywords>CLEARROW</keywords>
+	<keywords>CLOSE</keywords>
+	<keywords>CLUSTER</keywords>
+	<keywords>CLUSTERED</keywords>
+	<keywords>COALESCE</keywords>
+	<keywords>COBOL</keywords>
+	<keywords>COLGROUP</keywords>
+	<keywords>COLLATE</keywords>
+	<keywords>COLLATION</keywords>
+	<keywords>COLLECTION</keywords>
+	<keywords>COLUMN</keywords>
+	<keywords>COMMAND</keywords>
+	<keywords>COMMENT</keywords>
+	<keywords>COMMIT</keywords>
+	<keywords>COMPLETION</keywords>
+	<keywords>COMMITTED</keywords>
+	<keywords>COMPILE</keywords>
+	<keywords>COMPLEX</keywords>
+	<keywords>COMPRESS</keywords>
+	<keywords>COMPUTE</keywords>
+	<keywords>CONCAT</keywords>
+	<keywords>CONFIRM</keywords>
+	<keywords>CONNECT</keywords>
+	<keywords>CONNECTION</keywords>
+	<keywords>CONSTRAINT</keywords>
+	<keywords>CONSTRAINTS</keywords>
+	<keywords>CONSTRUCTOR</keywords>
+	<keywords>CONTAINS</keywords>
+	<keywords>CONTAINSTABLE</keywords>
+	<keywords>CONTENTS</keywords>
+	<keywords>CONTINUE</keywords>
+	<keywords>CONTROLFILE</keywords>
+	<keywords>CONTROLROW</keywords>
+	<keywords>CONVERT</keywords>
+	<keywords>COPY</keywords>
+	<keywords>CORRESPONDING</keywords>
+	<keywords>COS</keywords>
+	<keywords>COUNT</keywords>
+	<keywords>COUNTU</keywords>
+	<keywords>CREATE</keywords>
+	<keywords>CROSS</keywords>
+	<keywords>CUBE</keywords>
+	<keywords>CURRENT</keywords>
+	<keywords>CURRENT_DATE</keywords>
+	<keywords>CURRENT_PATH</keywords>
+	<keywords>CURRENT_ROLE</keywords>
+	<keywords>CURRENT_TIME</keywords>
+	<keywords>CURRENT_TIMESTAMP</keywords>
+	<keywords>CURRENT_USER</keywords>
+	<keywords>CURSOR</keywords>
+	<keywords>CVAR</keywords>
+	<keywords>CYCLE</keywords>
+	<keywords>DATA</keywords>
+	<keywords>DATABASE</keywords>
+	<keywords>DATAFILE</keywords>
+	<keywords>DATAHANDLER</keywords>
+	<keywords>DATAPAGES</keywords>
+	<keywords>DATE</keywords>
+	<keywords>DAY</keywords>
+	<keywords>DAYOFMONTH</keywords>
+	<keywords>DAYOFWEEK</keywords>
+	<keywords>DAYOFYEAR</keywords>
+	<keywords>DAYS</keywords>
+	<keywords>DBA</keywords>
+	<keywords>DBCC</keywords>
+	<keywords>DBSPACE</keywords>
+	<keywords>DEALLOCATE</keywords>
+	<keywords>DEC</keywords>
+	<keywords>DECIMAL</keywords>
+	<keywords>DECLARATION</keywords>
+	<keywords>DECLARE</keywords>
+	<keywords>DECODE</keywords>
+	<keywords>DEFAULT</keywords>
+	<keywords>DEFERRABLE</keywords>
+	<keywords>DEFERRED</keywords>
+	<keywords>DEFINE</keywords>
+	<keywords>DEFINITION</keywords>
+	<keywords>DEGREES</keywords>
+	<keywords>DELETE</keywords>
+	<keywords>DEPTH</keywords>
+	<keywords>DEREF</keywords>
+	<keywords>DELETEROW</keywords>
+	<keywords>DENY</keywords>
+	<keywords>DESC</keywords>
+	<keywords>DESCRIBE</keywords>
+	<keywords>DESCRIPTOR</keywords>
+	<keywords>DESTROY</keywords>
+	<keywords>DHTYPE</keywords>
+	<keywords>DESTRUCTOR</keywords>
+	<keywords>DETERMINISTIC</keywords>
+	<keywords>DICTIONARY</keywords>
+	<keywords>DIAGNOSTICS</keywords>
+	<keywords>DIRECT</keywords>
+	<keywords>DISABLE</keywords>
+	<keywords>DISCONNECT</keywords>
+	<keywords>DISK</keywords>
+	<keywords>DISMOUNT</keywords>
+	<keywords>DISPLAY</keywords>
+	<keywords>DISTINCT</keywords>
+	<keywords>DISTRIBUTE</keywords>
+	<keywords>DISTRIBUTED</keywords>
+	<keywords>DO</keywords>
+	<keywords>DOMAIN</keywords>
+	<keywords>DOUBLE</keywords>
+	<keywords>DOWN</keywords>
+	<keywords>DROP</keywords>
+	<keywords>DUMMY</keywords>
+	<keywords>DUMP</keywords>
+	<keywords>DYNAMIC</keywords>
+	<keywords>EACH</keywords>
+	<keywords>EDITPROC</keywords>
+	<keywords>ELSE</keywords>
+	<keywords>ELSEIF</keywords>
+	<keywords>ENABLE</keywords>
+	<keywords>END</keywords>
+	<keywords>ENDDATA</keywords>
+	<keywords>ENDDISPLAY</keywords>
+	<keywords>ENDEXEC</keywords>
+	<keywords>END-EXEC</keywords>
+	<keywords>ENDFORMS</keywords>
+	<keywords>ENDIF</keywords>
+	<keywords>ENDLOOP</keywords>
+	<keywords>EQUALS</keywords>
+	<keywords>ENDSELECT</keywords>
+	<keywords>ENDWHILE</keywords>
+	<keywords>ERASE</keywords>
+	<keywords>ERRLVL</keywords>
+	<keywords>ERROREXIT</keywords>
+	<keywords>ESCAPE</keywords>
+	<keywords>EVENTS</keywords>
+	<keywords>EVERY</keywords>
+	<keywords>EXCEPT</keywords>
+	<keywords>EXCEPTION</keywords>
+	<keywords>EXCEPTIONS</keywords>
+	<keywords>EXCLUDE</keywords>
+	<keywords>EXCLUDING</keywords>
+	<keywords>EXCLUSIVE</keywords>
+	<keywords>EXEC</keywords>
+	<keywords>EXECUTE</keywords>
+	<keywords>EXISTS</keywords>
+	<keywords>EXIT</keywords>
+	<keywords>EXP</keywords>
+	<keywords>EXPLAIN</keywords>
+	<keywords>EXPLICIT</keywords>
+	<keywords>EXTENT</keywords>
+	<keywords>EXTERNAL</keywords>
+	<keywords>EXTERNALLY</keywords>
+	<keywords>EXTRACT</keywords>
+	<keywords>FALSE</keywords>
+	<keywords>FETCH</keywords>
+	<keywords>FIELD</keywords>
+	<keywords>FIELDPROC</keywords>
+	<keywords>FILE</keywords>
+	<keywords>FILLFACTOR</keywords>
+	<keywords>FINALIZE</keywords>
+	<keywords>FINALIZE</keywords>
+	<keywords>FIRST</keywords>
+	<keywords>FLOAT</keywords>
+	<keywords>FLOOR</keywords>
+	<keywords>FLOPPY</keywords>
+	<keywords>FLUSH</keywords>
+	<keywords>FOR</keywords>
+	<keywords>FORCE</keywords>
+	<keywords>FORMDATA</keywords>
+	<keywords>FORMINIT</keywords>
+	<keywords>FORMS</keywords>
+	<keywords>FORTRAN</keywords>
+	<keywords>FOREIGN</keywords>
+	<keywords>FOUND</keywords>
+	<keywords>FREELIST</keywords>
+	<keywords>FREELISTS</keywords>
+	<keywords>FREETEXT</keywords>
+	<keywords>FREETEXTTABLE</keywords>
+	<keywords>FROM</keywords>
+	<keywords>FREE</keywords>
+	<keywords>FULL</keywords>
+	<keywords>FULLTEXTTABLE</keywords>
+	<keywords>FUNCTION</keywords>
+	<keywords>GENERAL</keywords>
+	<keywords>GET</keywords>
+	<keywords>GETCURRENTCONNECTION</keywords>
+	<keywords>GETFORM</keywords>
+	<keywords>GETOPER</keywords>
+	<keywords>GETROW</keywords>
+	<keywords>GLOBAL</keywords>
+	<keywords>GO</keywords>
+	<keywords>GOTO</keywords>
+	<keywords>GRANT</keywords>
+	<keywords>GRANTED</keywords>
+	<keywords>GRAPHIC</keywords>
+	<keywords>GREATEST</keywords>
+	<keywords>GROUP</keywords>
+	<keywords>GROUPING</keywords>
+	<keywords>GROUPS</keywords>
+	<keywords>HASH</keywords>
+	<keywords>HAVING</keywords>
+	<keywords>HOST</keywords>
+	<keywords>HELP</keywords>
+	<keywords>HELPFILE</keywords>
+	<keywords>HOLDLOCK</keywords>
+	<keywords>HOUR</keywords>
+	<keywords>HOURS</keywords>
+	<keywords>IDENTIFIED</keywords>
+	<keywords>IDENTITY</keywords>
+	<keywords>IDENTITY_INSERT</keywords>
+	<keywords>IGNORE</keywords>
+	<keywords>IDENTITYCOL</keywords>
+	<keywords>IF</keywords>
+	<keywords>IFNULL</keywords>
+	<keywords>IIMESSAGE</keywords>
+	<keywords>IIPRINTF</keywords>
+	<keywords>IMMEDIATE</keywords>
+	<keywords>IMPORT</keywords>
+	<keywords>IN</keywords>
+	<keywords>INCLUDE</keywords>
+	<keywords>INCLUDING</keywords>
+	<keywords>INCREMENT</keywords>
+	<keywords>INDEX</keywords>
+	<keywords>INDEXPAGES</keywords>
+	<keywords>INDICATOR</keywords>
+	<keywords>INITCAP</keywords>
+	<keywords>INITIAL</keywords>
+	<keywords>INITIALIZE</keywords>
+	<keywords>INITIALLY</keywords>
+	<keywords>INITRANS</keywords>
+	<keywords>INITTABLE</keywords>
+	<keywords>INNER</keywords>
+	<keywords>INOUT</keywords>
+	<keywords>INPUT</keywords>
+	<keywords>INSENSITIVE</keywords>
+	<keywords>INSERT</keywords>
+	<keywords>INSERTROW</keywords>
+	<keywords>INSTANCE</keywords>
+	<keywords>INSTR</keywords>
+	<keywords>INT</keywords>
+	<keywords>INTEGER</keywords>
+	<keywords>INTEGRITY</keywords>
+	<keywords>INTERFACE</keywords>
+	<keywords>INTERSECT</keywords>
+	<keywords>INTERVAL</keywords>
+	<keywords>INTO</keywords>
+	<keywords>IS</keywords>
+	<keywords>ISOLATION</keywords>
+	<keywords>ITERATE</keywords>
+	<keywords>JOIN</keywords>
+	<keywords>KEY</keywords>
+	<keywords>KILL</keywords>
+	<keywords>LABEL</keywords>
+	<keywords>LANGUAGE</keywords>
+	<keywords>LARGE</keywords>
+	<keywords>LAST</keywords>
+	<keywords>LATERAL</keywords>
+	<keywords>LAYER</keywords>
+	<keywords>LEADING</keywords>
+	<keywords>LEAST</keywords>
+	<keywords>LEFT</keywords>
+	<keywords>LESS</keywords>
+	<keywords>LENGTH</keywords>
+	<keywords>LEVEL</keywords>
+	<keywords>LIKE</keywords>
+	<keywords>LIMIT</keywords>
+	<keywords>LINENO</keywords>
+	<keywords>LINK</keywords>
+	<keywords>LIST</keywords>
+	<keywords>LISTS</keywords>
+	<keywords>LOAD</keywords>
+	<keywords>LOADTABLE</keywords>
+	<keywords>LOCAL</keywords>
+	<keywords>LOCALTIME</keywords>
+	<keywords>LOCALTIMESTAMP</keywords>
+	<keywords>LOCATOR</keywords>
+	<keywords>LOCATE</keywords>
+	<keywords>LOCK</keywords>
+	<keywords>LOCKSIZE</keywords>
+	<keywords>LOG</keywords>
+	<keywords>LOGFILE</keywords>
+	<keywords>LONG</keywords>
+	<keywords>LONGINT</keywords>
+	<keywords>LOWER</keywords>
+	<keywords>LPAD</keywords>
+	<keywords>LTRIM</keywords>
+	<keywords>LVARBINARY</keywords>
+	<keywords>LVARCHAR</keywords>
+	<keywords>MAIN</keywords>
+	<keywords>MANAGE</keywords>
+	<keywords>MANUAL</keywords>
+	<keywords>MAP</keywords>
+	<keywords>MATCH</keywords>
+	<keywords>MAX</keywords>
+	<keywords>MAXDATAFILES</keywords>
+	<keywords>MAXEXTENTS</keywords>
+	<keywords>MAXINSTANCES</keywords>
+	<keywords>MAXLOGFILES</keywords>
+	<keywords>MAXLOGHISTORY</keywords>
+	<keywords>MAXLOGMEMBERS</keywords>
+	<keywords>MAXTRANS</keywords>
+	<keywords>MAXVALUE</keywords>
+	<keywords>MENUITEM</keywords>
+	<keywords>MESSAGE</keywords>
+	<keywords>MERGE</keywords>
+	<keywords>MICROSECOND</keywords>
+	<keywords>MICROSECONDS</keywords>
+	<keywords>MIN</keywords>
+	<keywords>MINEXTENTS</keywords>
+	<keywords>MINUS</keywords>
+	<keywords>MINUTE</keywords>
+	<keywords>MODIFIES</keywords>
+	<keywords>MINUTES</keywords>
+	<keywords>MINVALUE</keywords>
+	<keywords>MIRROREXIT</keywords>
+	<keywords>MOD</keywords>
+	<keywords>MODE</keywords>
+	<keywords>MODIFY</keywords>
+	<keywords>MODULE</keywords>
+	<keywords>MONEY</keywords>
+	<keywords>MONTH</keywords>
+	<keywords>MONTHS</keywords>
+	<keywords>MOUNT</keywords>
+	<keywords>MOVE</keywords>
+	<keywords>NAMED</keywords>
+	<keywords>NAMES</keywords>
+	<keywords>NATIONAL</keywords>
+	<keywords>NATURAL</keywords>
+	<keywords>NCHAR</keywords>
+	<keywords>NCLOB</keywords>
+	<keywords>NEW</keywords>
+	<keywords>NEXT</keywords>
+	<keywords>NHEADER</keywords>
+	<keywords>NO</keywords>
+	<keywords>NOARCHIVELOG</keywords>
+	<keywords>NOAUDIT</keywords>
+	<keywords>NOCACHE</keywords>
+	<keywords>NOCHECK</keywords>
+	<keywords>NOCOMPRESS</keywords>
+	<keywords>NOCYCLE</keywords>
+	<keywords>NOECHO</keywords>
+	<keywords>NOMAXVALUE</keywords>
+	<keywords>NOMINVALUE</keywords>
+	<keywords>NONCLUSTERED</keywords>
+	<keywords>NONE</keywords>
+	<keywords>NOORDER</keywords>
+	<keywords>NORESETLOGS</keywords>
+	<keywords>NORMAL</keywords>
+	<keywords>NOSORT</keywords>
+	<keywords>NOT</keywords>
+	<keywords>NOTFOUND</keywords>
+	<keywords>NOTRIM</keywords>
+	<keywords>NOWAIT</keywords>
+	<keywords>NULL</keywords>
+	<keywords>NULLIF</keywords>
+	<keywords>NULLVALUE</keywords>
+	<keywords>NUMBER</keywords>
+	<keywords>NUMERIC</keywords>
+	<keywords>OBJECT</keywords>
+	<keywords>NUMPARTS</keywords>
+	<keywords>NVL</keywords>
+	<keywords>OBID</keywords>
+	<keywords>OCTET_LENGTH</keywords>
+	<keywords>ODBCINFO</keywords>
+	<keywords>OF</keywords>
+	<keywords>OFF</keywords>
+	<keywords>OFFLINE</keywords>
+	<keywords>OFFSETS</keywords>
+	<keywords>OLD</keywords>
+	<keywords>ON</keywords>
+	<keywords>ONCE</keywords>
+	<keywords>ONLINE</keywords>
+	<keywords>ONLY</keywords>
+	<keywords>OPEN</keywords>
+	<keywords>OPERATION</keywords>
+	<keywords>OPENDATASOURCE</keywords>
+	<keywords>OPENQUERY</keywords>
+	<keywords>OPENROWSET</keywords>
+	<keywords>OPENXML</keywords>
+	<keywords>OPTIMAL</keywords>
+	<keywords>OPTIMIZE</keywords>
+	<keywords>OPTION</keywords>
+	<keywords>OR</keywords>
+	<keywords>ORDER</keywords>
+	<keywords>ORDINALITY</keywords>
+	<keywords>OUT</keywords>
+	<keywords>OUTER</keywords>
+	<keywords>OUTPUT</keywords>
+	<keywords>OVER</keywords>
+	<keywords>OVERLAPS</keywords>
+	<keywords>OWN</keywords>
+	<keywords>PACKAGE</keywords>
+	<keywords>PAD</keywords>
+	<keywords>PARAMETER</keywords>
+	<keywords>PARAMETERS</keywords>
+	<keywords>PAGE</keywords>
+	<keywords>PAGES</keywords>
+	<keywords>PARALLEL</keywords>
+	<keywords>PART</keywords>
+	<keywords>PARTIAL</keywords>
+	<keywords>PATH</keywords>
+	<keywords>PIVOT</keywords>
+	<keywords>POSTFIX</keywords>
+	<keywords>PASCAL</keywords>
+	<keywords>PCTFREE</keywords>
+	<keywords>PCTINCREASE</keywords>
+	<keywords>PCTINDEX</keywords>
+	<keywords>PCTUSED</keywords>
+	<keywords>PERCENT</keywords>
+	<keywords>PERM</keywords>
+	<keywords>PERMANENT</keywords>
+	<keywords>PERMIT</keywords>
+	<keywords>PI</keywords>
+	<keywords>PIPE</keywords>
+	<keywords>PLAN</keywords>
+	<keywords>PLI</keywords>
+	<keywords>POSITION</keywords>
+	<keywords>POWER</keywords>
+	<keywords>PRECISION</keywords>
+	<keywords>PREFIX</keywords>
+	<keywords>PREORDER</keywords>
+	<keywords>PREPARE</keywords>
+	<keywords>PRESERVE</keywords>
+	<keywords>PRIMARY</keywords>
+	<keywords>PRINT</keywords>
+	<keywords>PRINTSCREEN</keywords>
+	<keywords>PRIOR</keywords>
+	<keywords>PRIQTY</keywords>
+	<keywords>PRIVATE</keywords>
+	<keywords>PRIVILEGES</keywords>
+	<keywords>PROC</keywords>
+	<keywords>PROCEDURE</keywords>
+	<keywords>PROCESSEXIT</keywords>
+	<keywords>PROFILE</keywords>
+	<keywords>PROGRAM</keywords>
+	<keywords>PROMPT</keywords>
+	<keywords>PUBLIC</keywords>
+	<keywords>PUTFORM</keywords>
+	<keywords>PUTOPER</keywords>
+	<keywords>PUTROW</keywords>
+	<keywords>QUALIFICATION</keywords>
+	<keywords>QUARTER</keywords>
+	<keywords>QUOTA</keywords>
+	<keywords>RADIANS</keywords>
+	<keywords>RAISE</keywords>
+	<keywords>RAISERROR</keywords>
+	<keywords>RAND</keywords>
+	<keywords>RANGE</keywords>
+	<keywords>RAW</keywords>
+	<keywords>READ</keywords>
+	<keywords>READS</keywords>
+	<keywords>READTEXT</keywords>
+	<keywords>REAL</keywords>
+	<keywords>RECURSIVE</keywords>
+	<keywords>REF</keywords>
+	<keywords>RECONFIGURE</keywords>
+	<keywords>RECORD</keywords>
+	<keywords>RECOVER</keywords>
+	<keywords>REDISPLAY</keywords>
+	<keywords>REFERENCES</keywords>
+	<keywords>REFERENCING</keywords>
+	<keywords>RELATIVE</keywords>
+	<keywords>REGISTER</keywords>
+	<keywords>RELEASE</keywords>
+	<keywords>RELOCATE</keywords>
+	<keywords>REMOVE</keywords>
+	<keywords>RENAME</keywords>
+	<keywords>REPEAT</keywords>
+	<keywords>REPEATABLE</keywords>
+	<keywords>REPEATED</keywords>
+	<keywords>REPLACE</keywords>
+	<keywords>REPLICATE</keywords>
+	<keywords>REPLICATION</keywords>
+	<keywords>RESET</keywords>
+	<keywords>RESETLOGS</keywords>
+	<keywords>RESOURCE</keywords>
+	<keywords>RESTORE</keywords>
+	<keywords>RESTRICT</keywords>
+	<keywords>RESULT</keywords>
+	<keywords>RESTRICTED</keywords>
+	<keywords>RESUME</keywords>
+	<keywords>RETRIEVE</keywords>
+	<keywords>RETURN</keywords>
+	<keywords>RETURNS</keywords>
+	<keywords>REUSE</keywords>
+	<keywords>REVERT</keywords>
+	<keywords>REVOKE</keywords>
+	<keywords>RIGHT</keywords>
+	<keywords>ROLE</keywords>
+	<keywords>ROLES</keywords>
+	<keywords>ROLLBACK</keywords>
+	<keywords>ROLLUP</keywords>
+	<keywords>ROUTINE</keywords>
+	<keywords>ROW</keywords>
+	<keywords>ROWS</keywords>
+	<keywords>ROWCOUNT</keywords>
+	<keywords>ROWGUIDCOL</keywords>
+	<keywords>ROWID</keywords>
+	<keywords>ROWIDTOCHAR</keywords>
+	<keywords>ROWLABEL</keywords>
+	<keywords>ROWNUM</keywords>
+	<keywords>ROWS</keywords>
+	<keywords>RPAD</keywords>
+	<keywords>RRN</keywords>
+	<keywords>RTRIM</keywords>
+	<keywords>RULE</keywords>
+	<keywords>RUN</keywords>
+	<keywords>RUNTIMESTATISTICS</keywords>
+	<keywords>SAVE</keywords>
+	<keywords>SAVEPOINT</keywords>
+	<keywords>SCHEDULE</keywords>
+	<keywords>SCHEMA</keywords>
+	<keywords>SCN</keywords>
+	<keywords>SCREEN</keywords>
+	<keywords>SCROLL</keywords>
+	<keywords>SCOPE</keywords>
+	<keywords>SEARCH</keywords>
+	<keywords>SCROLLDOWN</keywords>
+	<keywords>SCROLLUP</keywords>
+	<keywords>SECOND</keywords>
+	<keywords>SECONDS</keywords>
+	<keywords>SECQTY</keywords>
+	<keywords>SECTION</keywords>
+	<keywords>SECURITYAUDIT</keywords>
+	<keywords>SEGMENT</keywords>
+	<keywords>SELECT</keywords>
+	<keywords>SEQUENCE</keywords>
+	<keywords>SERIALIZABLE</keywords>
+	<keywords>SERVICE</keywords>
+	<keywords>SESSION</keywords>
+	<keywords>SESSION_USER</keywords>
+	<keywords>SET</keywords>
+	<keywords>SETS</keywords>
+	<keywords>SETUSER</keywords>
+	<keywords>SIN</keywords>
+	<keywords>SIMPLE</keywords>
+	<keywords>SIGN</keywords>
+	<keywords>SHUTDOWN</keywords>
+	<keywords>SHORT</keywords>
+	<keywords>SHARE</keywords>
+	<keywords>SHARED</keywords>
+	<keywords>SETUSER</keywords>
+	<keywords>SIZE</keywords>
+	<keywords>SLEEP</keywords>
+	<keywords>SMALLINT</keywords>
+	<keywords>SNAPSHOT</keywords>
+	<keywords>SOME</keywords>
+	<keywords>SORT</keywords>
+	<keywords>SOUNDEX</keywords>
+	<keywords>SPACE</keywords>
+	<keywords>SPECIFIC</keywords>
+	<keywords>SPECIFICTYPE</keywords>
+	<keywords>SQL</keywords>
+	<keywords>SQLEXCEPTION</keywords>
+	<keywords>SQLBUF</keywords>
+	<keywords>SQLCA</keywords>
+	<keywords>SQLCODE</keywords>
+	<keywords>SQLERROR</keywords>
+	<keywords>SQLSTATE</keywords>
+	<keywords>SQLWARNING</keywords>
+	<keywords>SQRT</keywords>
+	<keywords>START</keywords>
+	<keywords>STATE</keywords>
+	<keywords>STATEMENT</keywords>
+	<keywords>STATIC</keywords>
+	<keywords>STRUCTURE</keywords>
+	<keywords>STATISTICS</keywords>
+	<keywords>STOGROUP</keywords>
+	<keywords>STOP</keywords>
+	<keywords>STORAGE</keywords>
+	<keywords>STORPOOL</keywords>
+	<keywords>SUBMENU</keywords>
+	<keywords>SUBPAGES</keywords>
+	<keywords>SUBSTR</keywords>
+	<keywords>SUBSTRING</keywords>
+	<keywords>SUCCESSFUL</keywords>
+	<keywords>SUFFIX</keywords>
+	<keywords>SUM</keywords>
+	<keywords>SYSTEM_USER</keywords>
+	<keywords>SUMU</keywords>
+	<keywords>SWITCH</keywords>
+	<keywords>SYNONYM</keywords>
+	<keywords>SYSCAT</keywords>
+	<keywords>SYSDATE</keywords>
+	<keywords>SYSFUN</keywords>
+	<keywords>SYSIBM</keywords>
+	<keywords>SYSSTAT</keywords>
+	<keywords>SYSTEM</keywords>
+	<keywords>SYSTIME</keywords>
+	<keywords>SYSTIMESTAMP</keywords>
+	<keywords>TABLE</keywords>
+	<keywords>TABLEDATA</keywords>
+	<keywords>TABLES</keywords>
+	<keywords>TABLESAMPLE</keywords>
+	<keywords>TABLESPACE</keywords>
+	<keywords>TAN</keywords>
+	<keywords>TAPE</keywords>
+	<keywords>TEMP</keywords>
+	<keywords>TEMPORARY</keywords>
+	<keywords>TERMINATE</keywords>
+	<keywords>THAN</keywords>
+	<keywords>TEXTSIZE</keywords>
+	<keywords>THEN</keywords>
+	<keywords>THREAD</keywords>
+	<keywords>TIME</keywords>
+	<keywords>TIMEOUT</keywords>
+	<keywords>TIMESTAMP</keywords>
+	<keywords>TIMEZONE_HOUR</keywords>
+	<keywords>TIMEZONE_MINUTE</keywords>
+	<keywords>TINYINT</keywords>
+	<keywords>TO</keywords>
+	<keywords>TOP</keywords>
+	<keywords>TPE</keywords>
+	<keywords>TRACING</keywords>
+	<keywords>TRAILING</keywords>
+	<keywords>TRAN</keywords>
+	<keywords>TRANSACTION</keywords>
+	<keywords>TRANSLATE</keywords>
+	<keywords>TRANSLATION</keywords>
+	<keywords>TREAT</keywords>
+	<keywords>TRIGGER</keywords>
+	<keywords>TRIGGERS</keywords>
+	<keywords>TRIM</keywords>
+	<keywords>TRUE</keywords>
+	<keywords>TRUNCATE</keywords>
+	<keywords>TSEQUAL</keywords>
+	<keywords>TYPE</keywords>
+	<keywords>UID</keywords>
+	<keywords>UNCOMMITTED</keywords>
+	<keywords>UNDER</keywords>
+	<keywords>UNION</keywords>
+	<keywords>UNIQUE</keywords>
+	<keywords>UNKNOWN</keywords>
+	<keywords>UNNEST</keywords>
+	<keywords>UNLIMITED</keywords>
+	<keywords>UNLOADTABLE</keywords>
+	<keywords>UNPIVOT</keywords>
+	<keywords>UNSIGNED</keywords>
+	<keywords>UNTIL</keywords>
+	<keywords>UP</keywords>
+	<keywords>UPDATE</keywords>
+	<keywords>UPDATETEXT</keywords>
+	<keywords>UPPER</keywords>
+	<keywords>USAGE</keywords>
+	<keywords>USE</keywords>
+	<keywords>USER</keywords>
+	<keywords>USING</keywords>
+	<keywords>UUID</keywords>
+	<keywords>VALIDATE</keywords>
+	<keywords>VALIDPROC</keywords>
+	<keywords>VALIDROW</keywords>
+	<keywords>VALUE</keywords>
+	<keywords>VALUES</keywords>
+	<keywords>VARBINARY</keywords>
+	<keywords>VARCHAR</keywords>
+	<keywords>VARIABLE</keywords>
+	<keywords>VARIABLES</keywords>
+	<keywords>VARYING</keywords>
+	<keywords>VCAT</keywords>
+	<keywords>VERSION</keywords>
+	<keywords>VIEW</keywords>
+	<keywords>VOLUMES</keywords>
+	<keywords>WAITFOR</keywords>
+	<keywords>WEEK</keywords>
+	<keywords>WHEN</keywords>
+	<keywords>WHENEVER</keywords>
+	<keywords>WHERE</keywords>
+	<keywords>WHILE</keywords>
+	<keywords>WITH</keywords>
+	<keywords>WITHOUT</keywords>
+	<keywords>WORK</keywords>
+	<keywords>WRITE</keywords>
+	<keywords>WRITETEXT</keywords>
+	<keywords>YEAR</keywords>
+	<keywords>YEARS</keywords>
+	<keywords>ZONE</keywords>
+  </SQLSyntaxDefinition>
+</DBDefinition:DatabaseVendorDefinition>
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/runtime/vendors/SQL Server_2014/SQL Server_2014.xmi b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/runtime/vendors/SQL Server_2014/SQL Server_2014.xmi
new file mode 100644
index 0000000..d3fc2dc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition/runtime/vendors/SQL Server_2014/SQL Server_2014.xmi
@@ -0,0 +1,943 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="SQL Server" version="2014" maximumIdentifierLength="128"
+ viewTriggerSupported="true" userDefinedTypeSupported="true">
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_1" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="long">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIGINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_2" multipleColumnsSupported="true" primitiveType="INTEGER" jdbcEnumType="-7" javaClassName="boolean">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" lengthSupported="true" lengthUnit="BYTE" multipleColumnsSupported="true" defaultLength="50" maximumLength="8000" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BINARY</name>
+  </predefinedDataTypeDefinitions>
+ <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_1" lengthSupported="true" lengthUnit="BYTE" multipleColumnsSupported="true" defaultLength="50" maximumLength="8000" largeValueSpecifierSupported="true" largeValueSpecifierName="MAX" largeValueSpecifierLength="-1" primitiveType="BINARY_VARYING" jdbcEnumType="-3" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARBINARY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_2" multipleColumnsSupported="true" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="-4" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>IMAGE</name>
+  </predefinedDataTypeDefinitions>
+  
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" multipleColumnsSupported="true"  maximumLength="8000" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>SYSTEM_USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>CHAR</name>
+    <name>CHARACTER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" multipleColumnsSupported="true"  maximumLength="4000" primitiveType="NATIONAL_CHARACTER" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>SYSTEM_USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" multipleColumnsSupported="true" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="-1" javaClassName="java.sql.Clob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_LARGE_OBJECT_1" multipleColumnsSupported="true" primitiveType="NATIONAL_CHARACTER_LARGE_OBJECT" jdbcEnumType="-1" javaClassName="java.sql.Clob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NTEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" multipleColumnsSupported="true"  maximumLength="8000" largeValueSpecifierSupported="true" largeValueSpecifierName="MAX" largeValueSpecifierLength="-1" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>SYSTEM_USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARCHAR</name>
+    <name>CHARACTER VARYING</name>
+    <name>CHAR VARYING</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_2" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>UNIQUEIDENTIFIER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NATIONAL_CHARACTER_VARYING_1" lengthSupported="true" defaultLength="1" keyConstraintSupported="true" multipleColumnsSupported="true"  maximumLength="4000" largeValueSpecifierSupported="true" largeValueSpecifierName="MAX" largeValueSpecifierLength="-1" primitiveType="NATIONAL_CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>USER</defaultValueTypes>
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <defaultValueTypes>SYSTEM_USER</defaultValueTypes>
+    <defaultValueTypes>SESSION_USER</defaultValueTypes>
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NVARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="DATE" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATETIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_3" keyConstraintSupported="true" primitiveType="CHARACTER" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+   <predefinedDataTypeDefinitions xmi:id="DATE_4" keyConstraintSupported="true" primitiveType="CHARACTER" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATETIME2</name>
+  </predefinedDataTypeDefinitions>
+   <predefinedDataTypeDefinitions xmi:id="DATE_5" keyConstraintSupported="true" primitiveType="CHARACTER" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATETIMEOFFSET</name>
+  </predefinedDataTypeDefinitions>
+   <predefinedDataTypeDefinitions xmi:id="DATE_6" keyConstraintSupported="true" primitiveType="CHARACTER" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" scaleSupported="true" precisionSupported="true" maximumPrecision="38" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE PRECISION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" precisionSupported="true" maximumPrecision="53" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="FLOAT" jdbcEnumType="6" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INT</name>
+    <name>INTEGER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" scaleSupported="true" precisionSupported="true" maximumPrecision="38" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_2" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>MONEY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_3" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLMONEY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_2" keyConstraintSupported="true" multipleColumnsSupported="true" primitiveType="DATE" jdbcEnumType="92" javaClassName="java.sql.Time">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLDATETIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_2" keyConstraintSupported="true" identitySupported="true" multipleColumnsSupported="true" primitiveType="SMALLINT" jdbcEnumType="-6" javaClassName="short">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TINYINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP</name>
+    <name>ROWVERSION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_2" keyConstraintSupported="true" primitiveType="CHARACTER" jdbcEnumType="-150" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SQL_VARIANT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="XML_TYPE_1" primitiveType="XML_TYPE" jdbcEnumType="509" orderingSupported="false" groupingSupported="false" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>XML</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="GEOMETRY_1" jdbcEnumType="-4" orderingSupported="false" groupingSupported="false" primitiveType="BINARY" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>GEOMETRY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="GEOGRAPHY_1" jdbcEnumType="-4" orderingSupported="false" groupingSupported="false" primitiveType="BINARY" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>GEOGRAPHY</name>
+  </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="HIERARCHYID_2" keyConstraintSupported="true" primitiveType="CHARACTER" jdbcEnumType="-4" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>HIERARCHYID</name>
+  </predefinedDataTypeDefinitions>
+  
+  <triggerDefinition maximumIdentifierLength="128" typeSupported="true" insteadOfTriggerSupported="true"/>
+  <columnDefinition maximumIdentifierLength="128" identitySupported="true" computedSupported="true" identityStartValueSupported="true" identityIncrementSupported="true"/>
+  <constraintDefinition maximumPrimaryKeyIdentifierLength="128" maximumForeignKeyIdentifierLength="128" maximumCheckConstraintIdentifierLength="128" uniqueKeyNullable="true">
+    <parentUpdateDRIRuleType>CASCADE</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+  </constraintDefinition>
+  <queryDefinition hostVariableMarker="@"/>
+  <indexDefinition maximumIdentifierLength="128" clusteringSupported="true"/>
+  <viewDefinition maximumIdentifierLength="128" indexSupported="true"/>
+  <tableDefinition maximumIdentifierLength="128"/>
+  <schemaDefinition maximumIdentifierLength="128"/>
+  <storedProcedureDefinition maximumIdentifierLength="128">
+    <functionLanguageType>SQL</functionLanguageType>
+  </storedProcedureDefinition>
+  <udtDefinition maximumIdentifierLength="128" distinctTypeSupported="true"/>
+  <SQLSyntaxDefinition terminationCharacter="GO">
+    <keywords>A</keywords>
+	<keywords>ABORT</keywords>
+	<keywords>ABS</keywords>
+	<keywords>ABSOLUTE</keywords>
+	<keywords>ACCESS</keywords>
+	<keywords>ACOS</keywords>
+	<keywords>ACQUIRE</keywords>
+	<keywords>ACTION</keywords>
+	<keywords>ACTIVATE</keywords>
+	<keywords>ADA</keywords>
+	<keywords>ADD</keywords>
+	<keywords>ADDFORM</keywords>
+	<keywords>ADMIN</keywords>
+	<keywords>AFTER</keywords>
+	<keywords>AGGREGATE</keywords>
+	<keywords>ALIAS</keywords>
+	<keywords>ALL</keywords>
+	<keywords>ALLOCATE</keywords>
+	<keywords>ALTER</keywords>
+	<keywords>AN</keywords>
+	<keywords>ANALYZE</keywords>
+	<keywords>AND</keywords>
+	<keywords>ANY</keywords>
+	<keywords>APPEND</keywords>
+	<keywords>ARCHIVE</keywords>
+	<keywords>ARCHIVELOG</keywords>
+	<keywords>ARE</keywords>
+	<keywords>ARRAY</keywords>
+	<keywords>ARRAYLEN</keywords>
+	<keywords>AS</keywords>
+	<keywords>ASC</keywords>
+	<keywords>ASCII</keywords>
+	<keywords>ASIN</keywords>
+	<keywords>ASSERTION</keywords>
+	<keywords>AT</keywords>
+	<keywords>ATAN</keywords>
+	<keywords>AUDIT</keywords>
+	<keywords>AUTHORIZATION</keywords>
+	<keywords>AVG</keywords>
+	<keywords>AVGU</keywords>
+	<keywords>BACKUP</keywords>
+	<keywords>BECOME</keywords>
+	<keywords>BEFORE</keywords>
+	<keywords>BEGIN</keywords>
+	<keywords>BETWEEN</keywords>
+	<keywords>BIGINT</keywords>
+	<keywords>BINARY</keywords>
+	<keywords>BIND</keywords>
+	<keywords>BINDING</keywords>
+	<keywords>BIT</keywords>
+	<keywords>BIT_LENGTH</keywords>
+	<keywords>BLOB</keywords>
+	<keywords>BLOCK</keywords>
+	<keywords>BODY</keywords>
+	<keywords>BOOLEAN</keywords>
+	<keywords>BOTH</keywords>
+	<keywords>BREADTH</keywords>
+	<keywords>BREAK</keywords>
+	<keywords>BREAKDISPLAY</keywords>
+	<keywords>BROWSE</keywords>
+	<keywords>BUFFERPOOL</keywords>
+	<keywords>BULK</keywords>
+	<keywords>BY</keywords>
+	<keywords>BYREF</keywords>
+	<keywords>CACHE</keywords>
+	<keywords>CALL</keywords>
+	<keywords>CALLPROC</keywords>
+	<keywords>CANCEL</keywords>
+	<keywords>CAPTURE</keywords>
+	<keywords>CASCADE</keywords>
+	<keywords>CASCADED</keywords>
+	<keywords>CASE</keywords>
+	<keywords>CAST</keywords>
+	<keywords>CATALOG</keywords>
+	<keywords>CCSID</keywords>
+	<keywords>CEILING</keywords>
+	<keywords>CHANGE</keywords>
+	<keywords>CHAR</keywords>
+	<keywords>CHAR_LENGTH</keywords>
+	<keywords>CHARACTER</keywords>
+	<keywords>CHARACTER_LENGTH</keywords>
+	<keywords>CHARTOROWID</keywords>
+	<keywords>CHECK</keywords>
+	<keywords>CLASS</keywords>
+	<keywords>CLOB</keywords>
+	<keywords>CHECKPOINT</keywords>
+	<keywords>CHR</keywords>
+	<keywords>CLEANUP</keywords>
+	<keywords>CLEAR</keywords>
+	<keywords>CLEARROW</keywords>
+	<keywords>CLOSE</keywords>
+	<keywords>CLUSTER</keywords>
+	<keywords>CLUSTERED</keywords>
+	<keywords>COALESCE</keywords>
+	<keywords>COBOL</keywords>
+	<keywords>COLGROUP</keywords>
+	<keywords>COLLATE</keywords>
+	<keywords>COLLATION</keywords>
+	<keywords>COLLECTION</keywords>
+	<keywords>COLUMN</keywords>
+	<keywords>COMMAND</keywords>
+	<keywords>COMMENT</keywords>
+	<keywords>COMMIT</keywords>
+	<keywords>COMPLETION</keywords>
+	<keywords>COMMITTED</keywords>
+	<keywords>COMPILE</keywords>
+	<keywords>COMPLEX</keywords>
+	<keywords>COMPRESS</keywords>
+	<keywords>COMPUTE</keywords>
+	<keywords>CONCAT</keywords>
+	<keywords>CONFIRM</keywords>
+	<keywords>CONNECT</keywords>
+	<keywords>CONNECTION</keywords>
+	<keywords>CONSTRAINT</keywords>
+	<keywords>CONSTRAINTS</keywords>
+	<keywords>CONSTRUCTOR</keywords>
+	<keywords>CONTAINS</keywords>
+	<keywords>CONTAINSTABLE</keywords>
+	<keywords>CONTENTS</keywords>
+	<keywords>CONTINUE</keywords>
+	<keywords>CONTROLFILE</keywords>
+	<keywords>CONTROLROW</keywords>
+	<keywords>CONVERT</keywords>
+	<keywords>COPY</keywords>
+	<keywords>CORRESPONDING</keywords>
+	<keywords>COS</keywords>
+	<keywords>COUNT</keywords>
+	<keywords>COUNTU</keywords>
+	<keywords>CREATE</keywords>
+	<keywords>CROSS</keywords>
+	<keywords>CUBE</keywords>
+	<keywords>CURRENT</keywords>
+	<keywords>CURRENT_DATE</keywords>
+	<keywords>CURRENT_PATH</keywords>
+	<keywords>CURRENT_ROLE</keywords>
+	<keywords>CURRENT_TIME</keywords>
+	<keywords>CURRENT_TIMESTAMP</keywords>
+	<keywords>CURRENT_USER</keywords>
+	<keywords>CURSOR</keywords>
+	<keywords>CVAR</keywords>
+	<keywords>CYCLE</keywords>
+	<keywords>DATA</keywords>
+	<keywords>DATABASE</keywords>
+	<keywords>DATAFILE</keywords>
+	<keywords>DATAHANDLER</keywords>
+	<keywords>DATAPAGES</keywords>
+	<keywords>DATE</keywords>
+	<keywords>DAY</keywords>
+	<keywords>DAYOFMONTH</keywords>
+	<keywords>DAYOFWEEK</keywords>
+	<keywords>DAYOFYEAR</keywords>
+	<keywords>DAYS</keywords>
+	<keywords>DBA</keywords>
+	<keywords>DBCC</keywords>
+	<keywords>DBSPACE</keywords>
+	<keywords>DEALLOCATE</keywords>
+	<keywords>DEC</keywords>
+	<keywords>DECIMAL</keywords>
+	<keywords>DECLARATION</keywords>
+	<keywords>DECLARE</keywords>
+	<keywords>DECODE</keywords>
+	<keywords>DEFAULT</keywords>
+	<keywords>DEFERRABLE</keywords>
+	<keywords>DEFERRED</keywords>
+	<keywords>DEFINE</keywords>
+	<keywords>DEFINITION</keywords>
+	<keywords>DEGREES</keywords>
+	<keywords>DELETE</keywords>
+	<keywords>DEPTH</keywords>
+	<keywords>DEREF</keywords>
+	<keywords>DELETEROW</keywords>
+	<keywords>DENY</keywords>
+	<keywords>DESC</keywords>
+	<keywords>DESCRIBE</keywords>
+	<keywords>DESCRIPTOR</keywords>
+	<keywords>DESTROY</keywords>
+	<keywords>DHTYPE</keywords>
+	<keywords>DESTRUCTOR</keywords>
+	<keywords>DETERMINISTIC</keywords>
+	<keywords>DICTIONARY</keywords>
+	<keywords>DIAGNOSTICS</keywords>
+	<keywords>DIRECT</keywords>
+	<keywords>DISABLE</keywords>
+	<keywords>DISCONNECT</keywords>
+	<keywords>DISK</keywords>
+	<keywords>DISMOUNT</keywords>
+	<keywords>DISPLAY</keywords>
+	<keywords>DISTINCT</keywords>
+	<keywords>DISTRIBUTE</keywords>
+	<keywords>DISTRIBUTED</keywords>
+	<keywords>DO</keywords>
+	<keywords>DOMAIN</keywords>
+	<keywords>DOUBLE</keywords>
+	<keywords>DOWN</keywords>
+	<keywords>DROP</keywords>
+	<keywords>DUMMY</keywords>
+	<keywords>DUMP</keywords>
+	<keywords>DYNAMIC</keywords>
+	<keywords>EACH</keywords>
+	<keywords>EDITPROC</keywords>
+	<keywords>ELSE</keywords>
+	<keywords>ELSEIF</keywords>
+	<keywords>ENABLE</keywords>
+	<keywords>END</keywords>
+	<keywords>ENDDATA</keywords>
+	<keywords>ENDDISPLAY</keywords>
+	<keywords>ENDEXEC</keywords>
+	<keywords>END-EXEC</keywords>
+	<keywords>ENDFORMS</keywords>
+	<keywords>ENDIF</keywords>
+	<keywords>ENDLOOP</keywords>
+	<keywords>EQUALS</keywords>
+	<keywords>ENDSELECT</keywords>
+	<keywords>ENDWHILE</keywords>
+	<keywords>ERASE</keywords>
+	<keywords>ERRLVL</keywords>
+	<keywords>ERROREXIT</keywords>
+	<keywords>ESCAPE</keywords>
+	<keywords>EVENTS</keywords>
+	<keywords>EVERY</keywords>
+	<keywords>EXCEPT</keywords>
+	<keywords>EXCEPTION</keywords>
+	<keywords>EXCEPTIONS</keywords>
+	<keywords>EXCLUDE</keywords>
+	<keywords>EXCLUDING</keywords>
+	<keywords>EXCLUSIVE</keywords>
+	<keywords>EXEC</keywords>
+	<keywords>EXECUTE</keywords>
+	<keywords>EXISTS</keywords>
+	<keywords>EXIT</keywords>
+	<keywords>EXP</keywords>
+	<keywords>EXPLAIN</keywords>
+	<keywords>EXPLICIT</keywords>
+	<keywords>EXTENT</keywords>
+	<keywords>EXTERNAL</keywords>
+	<keywords>EXTERNALLY</keywords>
+	<keywords>EXTRACT</keywords>
+	<keywords>FALSE</keywords>
+	<keywords>FETCH</keywords>
+	<keywords>FIELD</keywords>
+	<keywords>FIELDPROC</keywords>
+	<keywords>FILE</keywords>
+	<keywords>FILLFACTOR</keywords>
+	<keywords>FINALIZE</keywords>
+	<keywords>FINALIZE</keywords>
+	<keywords>FIRST</keywords>
+	<keywords>FLOAT</keywords>
+	<keywords>FLOOR</keywords>
+	<keywords>FLOPPY</keywords>
+	<keywords>FLUSH</keywords>
+	<keywords>FOR</keywords>
+	<keywords>FORCE</keywords>
+	<keywords>FORMDATA</keywords>
+	<keywords>FORMINIT</keywords>
+	<keywords>FORMS</keywords>
+	<keywords>FORTRAN</keywords>
+	<keywords>FOREIGN</keywords>
+	<keywords>FOUND</keywords>
+	<keywords>FREELIST</keywords>
+	<keywords>FREELISTS</keywords>
+	<keywords>FREETEXT</keywords>
+	<keywords>FREETEXTTABLE</keywords>
+	<keywords>FROM</keywords>
+	<keywords>FREE</keywords>
+	<keywords>FULL</keywords>
+	<keywords>FULLTEXTTABLE</keywords>
+	<keywords>FUNCTION</keywords>
+	<keywords>GENERAL</keywords>
+	<keywords>GET</keywords>
+	<keywords>GETCURRENTCONNECTION</keywords>
+	<keywords>GETFORM</keywords>
+	<keywords>GETOPER</keywords>
+	<keywords>GETROW</keywords>
+	<keywords>GLOBAL</keywords>
+	<keywords>GO</keywords>
+	<keywords>GOTO</keywords>
+	<keywords>GRANT</keywords>
+	<keywords>GRANTED</keywords>
+	<keywords>GRAPHIC</keywords>
+	<keywords>GREATEST</keywords>
+	<keywords>GROUP</keywords>
+	<keywords>GROUPING</keywords>
+	<keywords>GROUPS</keywords>
+	<keywords>HASH</keywords>
+	<keywords>HAVING</keywords>
+	<keywords>HOST</keywords>
+	<keywords>HELP</keywords>
+	<keywords>HELPFILE</keywords>
+	<keywords>HOLDLOCK</keywords>
+	<keywords>HOUR</keywords>
+	<keywords>HOURS</keywords>
+	<keywords>IDENTIFIED</keywords>
+	<keywords>IDENTITY</keywords>
+	<keywords>IDENTITY_INSERT</keywords>
+	<keywords>IGNORE</keywords>
+	<keywords>IDENTITYCOL</keywords>
+	<keywords>IF</keywords>
+	<keywords>IFNULL</keywords>
+	<keywords>IIMESSAGE</keywords>
+	<keywords>IIPRINTF</keywords>
+	<keywords>IMMEDIATE</keywords>
+	<keywords>IMPORT</keywords>
+	<keywords>IN</keywords>
+	<keywords>INCLUDE</keywords>
+	<keywords>INCLUDING</keywords>
+	<keywords>INCREMENT</keywords>
+	<keywords>INDEX</keywords>
+	<keywords>INDEXPAGES</keywords>
+	<keywords>INDICATOR</keywords>
+	<keywords>INITCAP</keywords>
+	<keywords>INITIAL</keywords>
+	<keywords>INITIALIZE</keywords>
+	<keywords>INITIALLY</keywords>
+	<keywords>INITRANS</keywords>
+	<keywords>INITTABLE</keywords>
+	<keywords>INNER</keywords>
+	<keywords>INOUT</keywords>
+	<keywords>INPUT</keywords>
+	<keywords>INSENSITIVE</keywords>
+	<keywords>INSERT</keywords>
+	<keywords>INSERTROW</keywords>
+	<keywords>INSTANCE</keywords>
+	<keywords>INSTR</keywords>
+	<keywords>INT</keywords>
+	<keywords>INTEGER</keywords>
+	<keywords>INTEGRITY</keywords>
+	<keywords>INTERFACE</keywords>
+	<keywords>INTERSECT</keywords>
+	<keywords>INTERVAL</keywords>
+	<keywords>INTO</keywords>
+	<keywords>IS</keywords>
+	<keywords>ISOLATION</keywords>
+	<keywords>ITERATE</keywords>
+	<keywords>JOIN</keywords>
+	<keywords>KEY</keywords>
+	<keywords>KILL</keywords>
+	<keywords>LABEL</keywords>
+	<keywords>LANGUAGE</keywords>
+	<keywords>LARGE</keywords>
+	<keywords>LAST</keywords>
+	<keywords>LATERAL</keywords>
+	<keywords>LAYER</keywords>
+	<keywords>LEADING</keywords>
+	<keywords>LEAST</keywords>
+	<keywords>LEFT</keywords>
+	<keywords>LESS</keywords>
+	<keywords>LENGTH</keywords>
+	<keywords>LEVEL</keywords>
+	<keywords>LIKE</keywords>
+	<keywords>LIMIT</keywords>
+	<keywords>LINENO</keywords>
+	<keywords>LINK</keywords>
+	<keywords>LIST</keywords>
+	<keywords>LISTS</keywords>
+	<keywords>LOAD</keywords>
+	<keywords>LOADTABLE</keywords>
+	<keywords>LOCAL</keywords>
+	<keywords>LOCALTIME</keywords>
+	<keywords>LOCALTIMESTAMP</keywords>
+	<keywords>LOCATOR</keywords>
+	<keywords>LOCATE</keywords>
+	<keywords>LOCK</keywords>
+	<keywords>LOCKSIZE</keywords>
+	<keywords>LOG</keywords>
+	<keywords>LOGFILE</keywords>
+	<keywords>LONG</keywords>
+	<keywords>LONGINT</keywords>
+	<keywords>LOWER</keywords>
+	<keywords>LPAD</keywords>
+	<keywords>LTRIM</keywords>
+	<keywords>LVARBINARY</keywords>
+	<keywords>LVARCHAR</keywords>
+	<keywords>MAIN</keywords>
+	<keywords>MANAGE</keywords>
+	<keywords>MANUAL</keywords>
+	<keywords>MAP</keywords>
+	<keywords>MATCH</keywords>
+	<keywords>MAX</keywords>
+	<keywords>MAXDATAFILES</keywords>
+	<keywords>MAXEXTENTS</keywords>
+	<keywords>MAXINSTANCES</keywords>
+	<keywords>MAXLOGFILES</keywords>
+	<keywords>MAXLOGHISTORY</keywords>
+	<keywords>MAXLOGMEMBERS</keywords>
+	<keywords>MAXTRANS</keywords>
+	<keywords>MAXVALUE</keywords>
+	<keywords>MENUITEM</keywords>
+	<keywords>MESSAGE</keywords>
+	<keywords>MERGE</keywords>
+	<keywords>MICROSECOND</keywords>
+	<keywords>MICROSECONDS</keywords>
+	<keywords>MIN</keywords>
+	<keywords>MINEXTENTS</keywords>
+	<keywords>MINUS</keywords>
+	<keywords>MINUTE</keywords>
+	<keywords>MODIFIES</keywords>
+	<keywords>MINUTES</keywords>
+	<keywords>MINVALUE</keywords>
+	<keywords>MIRROREXIT</keywords>
+	<keywords>MOD</keywords>
+	<keywords>MODE</keywords>
+	<keywords>MODIFY</keywords>
+	<keywords>MODULE</keywords>
+	<keywords>MONEY</keywords>
+	<keywords>MONTH</keywords>
+	<keywords>MONTHS</keywords>
+	<keywords>MOUNT</keywords>
+	<keywords>MOVE</keywords>
+	<keywords>NAMED</keywords>
+	<keywords>NAMES</keywords>
+	<keywords>NATIONAL</keywords>
+	<keywords>NATURAL</keywords>
+	<keywords>NCHAR</keywords>
+	<keywords>NCLOB</keywords>
+	<keywords>NEW</keywords>
+	<keywords>NEXT</keywords>
+	<keywords>NHEADER</keywords>
+	<keywords>NO</keywords>
+	<keywords>NOARCHIVELOG</keywords>
+	<keywords>NOAUDIT</keywords>
+	<keywords>NOCACHE</keywords>
+	<keywords>NOCHECK</keywords>
+	<keywords>NOCOMPRESS</keywords>
+	<keywords>NOCYCLE</keywords>
+	<keywords>NOECHO</keywords>
+	<keywords>NOMAXVALUE</keywords>
+	<keywords>NOMINVALUE</keywords>
+	<keywords>NONCLUSTERED</keywords>
+	<keywords>NONE</keywords>
+	<keywords>NOORDER</keywords>
+	<keywords>NORESETLOGS</keywords>
+	<keywords>NORMAL</keywords>
+	<keywords>NOSORT</keywords>
+	<keywords>NOT</keywords>
+	<keywords>NOTFOUND</keywords>
+	<keywords>NOTRIM</keywords>
+	<keywords>NOWAIT</keywords>
+	<keywords>NULL</keywords>
+	<keywords>NULLIF</keywords>
+	<keywords>NULLVALUE</keywords>
+	<keywords>NUMBER</keywords>
+	<keywords>NUMERIC</keywords>
+	<keywords>OBJECT</keywords>
+	<keywords>NUMPARTS</keywords>
+	<keywords>NVL</keywords>
+	<keywords>OBID</keywords>
+	<keywords>OCTET_LENGTH</keywords>
+	<keywords>ODBCINFO</keywords>
+	<keywords>OF</keywords>
+	<keywords>OFF</keywords>
+	<keywords>OFFLINE</keywords>
+	<keywords>OFFSETS</keywords>
+	<keywords>OLD</keywords>
+	<keywords>ON</keywords>
+	<keywords>ONCE</keywords>
+	<keywords>ONLINE</keywords>
+	<keywords>ONLY</keywords>
+	<keywords>OPEN</keywords>
+	<keywords>OPERATION</keywords>
+	<keywords>OPENDATASOURCE</keywords>
+	<keywords>OPENQUERY</keywords>
+	<keywords>OPENROWSET</keywords>
+	<keywords>OPENXML</keywords>
+	<keywords>OPTIMAL</keywords>
+	<keywords>OPTIMIZE</keywords>
+	<keywords>OPTION</keywords>
+	<keywords>OR</keywords>
+	<keywords>ORDER</keywords>
+	<keywords>ORDINALITY</keywords>
+	<keywords>OUT</keywords>
+	<keywords>OUTER</keywords>
+	<keywords>OUTPUT</keywords>
+	<keywords>OVER</keywords>
+	<keywords>OVERLAPS</keywords>
+	<keywords>OWN</keywords>
+	<keywords>PACKAGE</keywords>
+	<keywords>PAD</keywords>
+	<keywords>PARAMETER</keywords>
+	<keywords>PARAMETERS</keywords>
+	<keywords>PAGE</keywords>
+	<keywords>PAGES</keywords>
+	<keywords>PARALLEL</keywords>
+	<keywords>PART</keywords>
+	<keywords>PARTIAL</keywords>
+	<keywords>PATH</keywords>
+	<keywords>PIVOT</keywords>
+	<keywords>POSTFIX</keywords>
+	<keywords>PASCAL</keywords>
+	<keywords>PCTFREE</keywords>
+	<keywords>PCTINCREASE</keywords>
+	<keywords>PCTINDEX</keywords>
+	<keywords>PCTUSED</keywords>
+	<keywords>PERCENT</keywords>
+	<keywords>PERM</keywords>
+	<keywords>PERMANENT</keywords>
+	<keywords>PERMIT</keywords>
+	<keywords>PI</keywords>
+	<keywords>PIPE</keywords>
+	<keywords>PLAN</keywords>
+	<keywords>PLI</keywords>
+	<keywords>POSITION</keywords>
+	<keywords>POWER</keywords>
+	<keywords>PRECISION</keywords>
+	<keywords>PREFIX</keywords>
+	<keywords>PREORDER</keywords>
+	<keywords>PREPARE</keywords>
+	<keywords>PRESERVE</keywords>
+	<keywords>PRIMARY</keywords>
+	<keywords>PRINT</keywords>
+	<keywords>PRINTSCREEN</keywords>
+	<keywords>PRIOR</keywords>
+	<keywords>PRIQTY</keywords>
+	<keywords>PRIVATE</keywords>
+	<keywords>PRIVILEGES</keywords>
+	<keywords>PROC</keywords>
+	<keywords>PROCEDURE</keywords>
+	<keywords>PROCESSEXIT</keywords>
+	<keywords>PROFILE</keywords>
+	<keywords>PROGRAM</keywords>
+	<keywords>PROMPT</keywords>
+	<keywords>PUBLIC</keywords>
+	<keywords>PUTFORM</keywords>
+	<keywords>PUTOPER</keywords>
+	<keywords>PUTROW</keywords>
+	<keywords>QUALIFICATION</keywords>
+	<keywords>QUARTER</keywords>
+	<keywords>QUOTA</keywords>
+	<keywords>RADIANS</keywords>
+	<keywords>RAISE</keywords>
+	<keywords>RAISERROR</keywords>
+	<keywords>RAND</keywords>
+	<keywords>RANGE</keywords>
+	<keywords>RAW</keywords>
+	<keywords>READ</keywords>
+	<keywords>READS</keywords>
+	<keywords>READTEXT</keywords>
+	<keywords>REAL</keywords>
+	<keywords>RECURSIVE</keywords>
+	<keywords>REF</keywords>
+	<keywords>RECONFIGURE</keywords>
+	<keywords>RECORD</keywords>
+	<keywords>RECOVER</keywords>
+	<keywords>REDISPLAY</keywords>
+	<keywords>REFERENCES</keywords>
+	<keywords>REFERENCING</keywords>
+	<keywords>RELATIVE</keywords>
+	<keywords>REGISTER</keywords>
+	<keywords>RELEASE</keywords>
+	<keywords>RELOCATE</keywords>
+	<keywords>REMOVE</keywords>
+	<keywords>RENAME</keywords>
+	<keywords>REPEAT</keywords>
+	<keywords>REPEATABLE</keywords>
+	<keywords>REPEATED</keywords>
+	<keywords>REPLACE</keywords>
+	<keywords>REPLICATE</keywords>
+	<keywords>REPLICATION</keywords>
+	<keywords>RESET</keywords>
+	<keywords>RESETLOGS</keywords>
+	<keywords>RESOURCE</keywords>
+	<keywords>RESTORE</keywords>
+	<keywords>RESTRICT</keywords>
+	<keywords>RESULT</keywords>
+	<keywords>RESTRICTED</keywords>
+	<keywords>RESUME</keywords>
+	<keywords>RETRIEVE</keywords>
+	<keywords>RETURN</keywords>
+	<keywords>RETURNS</keywords>
+	<keywords>REUSE</keywords>
+	<keywords>REVERT</keywords>
+	<keywords>REVOKE</keywords>
+	<keywords>RIGHT</keywords>
+	<keywords>ROLE</keywords>
+	<keywords>ROLES</keywords>
+	<keywords>ROLLBACK</keywords>
+	<keywords>ROLLUP</keywords>
+	<keywords>ROUTINE</keywords>
+	<keywords>ROW</keywords>
+	<keywords>ROWS</keywords>
+	<keywords>ROWCOUNT</keywords>
+	<keywords>ROWGUIDCOL</keywords>
+	<keywords>ROWID</keywords>
+	<keywords>ROWIDTOCHAR</keywords>
+	<keywords>ROWLABEL</keywords>
+	<keywords>ROWNUM</keywords>
+	<keywords>ROWS</keywords>
+	<keywords>RPAD</keywords>
+	<keywords>RRN</keywords>
+	<keywords>RTRIM</keywords>
+	<keywords>RULE</keywords>
+	<keywords>RUN</keywords>
+	<keywords>RUNTIMESTATISTICS</keywords>
+	<keywords>SAVE</keywords>
+	<keywords>SAVEPOINT</keywords>
+	<keywords>SCHEDULE</keywords>
+	<keywords>SCHEMA</keywords>
+	<keywords>SCN</keywords>
+	<keywords>SCREEN</keywords>
+	<keywords>SCROLL</keywords>
+	<keywords>SCOPE</keywords>
+	<keywords>SEARCH</keywords>
+	<keywords>SCROLLDOWN</keywords>
+	<keywords>SCROLLUP</keywords>
+	<keywords>SECOND</keywords>
+	<keywords>SECONDS</keywords>
+	<keywords>SECQTY</keywords>
+	<keywords>SECTION</keywords>
+	<keywords>SECURITYAUDIT</keywords>
+	<keywords>SEGMENT</keywords>
+	<keywords>SELECT</keywords>
+	<keywords>SEQUENCE</keywords>
+	<keywords>SERIALIZABLE</keywords>
+	<keywords>SERVICE</keywords>
+	<keywords>SESSION</keywords>
+	<keywords>SESSION_USER</keywords>
+	<keywords>SET</keywords>
+	<keywords>SETS</keywords>
+	<keywords>SETUSER</keywords>
+	<keywords>SIN</keywords>
+	<keywords>SIMPLE</keywords>
+	<keywords>SIGN</keywords>
+	<keywords>SHUTDOWN</keywords>
+	<keywords>SHORT</keywords>
+	<keywords>SHARE</keywords>
+	<keywords>SHARED</keywords>
+	<keywords>SETUSER</keywords>
+	<keywords>SIZE</keywords>
+	<keywords>SLEEP</keywords>
+	<keywords>SMALLINT</keywords>
+	<keywords>SNAPSHOT</keywords>
+	<keywords>SOME</keywords>
+	<keywords>SORT</keywords>
+	<keywords>SOUNDEX</keywords>
+	<keywords>SPACE</keywords>
+	<keywords>SPECIFIC</keywords>
+	<keywords>SPECIFICTYPE</keywords>
+	<keywords>SQL</keywords>
+	<keywords>SQLEXCEPTION</keywords>
+	<keywords>SQLBUF</keywords>
+	<keywords>SQLCA</keywords>
+	<keywords>SQLCODE</keywords>
+	<keywords>SQLERROR</keywords>
+	<keywords>SQLSTATE</keywords>
+	<keywords>SQLWARNING</keywords>
+	<keywords>SQRT</keywords>
+	<keywords>START</keywords>
+	<keywords>STATE</keywords>
+	<keywords>STATEMENT</keywords>
+	<keywords>STATIC</keywords>
+	<keywords>STRUCTURE</keywords>
+	<keywords>STATISTICS</keywords>
+	<keywords>STOGROUP</keywords>
+	<keywords>STOP</keywords>
+	<keywords>STORAGE</keywords>
+	<keywords>STORPOOL</keywords>
+	<keywords>SUBMENU</keywords>
+	<keywords>SUBPAGES</keywords>
+	<keywords>SUBSTR</keywords>
+	<keywords>SUBSTRING</keywords>
+	<keywords>SUCCESSFUL</keywords>
+	<keywords>SUFFIX</keywords>
+	<keywords>SUM</keywords>
+	<keywords>SYSTEM_USER</keywords>
+	<keywords>SUMU</keywords>
+	<keywords>SWITCH</keywords>
+	<keywords>SYNONYM</keywords>
+	<keywords>SYSCAT</keywords>
+	<keywords>SYSDATE</keywords>
+	<keywords>SYSFUN</keywords>
+	<keywords>SYSIBM</keywords>
+	<keywords>SYSSTAT</keywords>
+	<keywords>SYSTEM</keywords>
+	<keywords>SYSTIME</keywords>
+	<keywords>SYSTIMESTAMP</keywords>
+	<keywords>TABLE</keywords>
+	<keywords>TABLEDATA</keywords>
+	<keywords>TABLES</keywords>
+	<keywords>TABLESAMPLE</keywords>
+	<keywords>TABLESPACE</keywords>
+	<keywords>TAN</keywords>
+	<keywords>TAPE</keywords>
+	<keywords>TEMP</keywords>
+	<keywords>TEMPORARY</keywords>
+	<keywords>TERMINATE</keywords>
+	<keywords>THAN</keywords>
+	<keywords>TEXTSIZE</keywords>
+	<keywords>THEN</keywords>
+	<keywords>THREAD</keywords>
+	<keywords>TIME</keywords>
+	<keywords>TIMEOUT</keywords>
+	<keywords>TIMESTAMP</keywords>
+	<keywords>TIMEZONE_HOUR</keywords>
+	<keywords>TIMEZONE_MINUTE</keywords>
+	<keywords>TINYINT</keywords>
+	<keywords>TO</keywords>
+	<keywords>TOP</keywords>
+	<keywords>TPE</keywords>
+	<keywords>TRACING</keywords>
+	<keywords>TRAILING</keywords>
+	<keywords>TRAN</keywords>
+	<keywords>TRANSACTION</keywords>
+	<keywords>TRANSLATE</keywords>
+	<keywords>TRANSLATION</keywords>
+	<keywords>TREAT</keywords>
+	<keywords>TRIGGER</keywords>
+	<keywords>TRIGGERS</keywords>
+	<keywords>TRIM</keywords>
+	<keywords>TRUE</keywords>
+	<keywords>TRUNCATE</keywords>
+	<keywords>TSEQUAL</keywords>
+	<keywords>TYPE</keywords>
+	<keywords>UID</keywords>
+	<keywords>UNCOMMITTED</keywords>
+	<keywords>UNDER</keywords>
+	<keywords>UNION</keywords>
+	<keywords>UNIQUE</keywords>
+	<keywords>UNKNOWN</keywords>
+	<keywords>UNNEST</keywords>
+	<keywords>UNLIMITED</keywords>
+	<keywords>UNLOADTABLE</keywords>
+	<keywords>UNPIVOT</keywords>
+	<keywords>UNSIGNED</keywords>
+	<keywords>UNTIL</keywords>
+	<keywords>UP</keywords>
+	<keywords>UPDATE</keywords>
+	<keywords>UPDATETEXT</keywords>
+	<keywords>UPPER</keywords>
+	<keywords>USAGE</keywords>
+	<keywords>USE</keywords>
+	<keywords>USER</keywords>
+	<keywords>USING</keywords>
+	<keywords>UUID</keywords>
+	<keywords>VALIDATE</keywords>
+	<keywords>VALIDPROC</keywords>
+	<keywords>VALIDROW</keywords>
+	<keywords>VALUE</keywords>
+	<keywords>VALUES</keywords>
+	<keywords>VARBINARY</keywords>
+	<keywords>VARCHAR</keywords>
+	<keywords>VARIABLE</keywords>
+	<keywords>VARIABLES</keywords>
+	<keywords>VARYING</keywords>
+	<keywords>VCAT</keywords>
+	<keywords>VERSION</keywords>
+	<keywords>VIEW</keywords>
+	<keywords>VOLUMES</keywords>
+	<keywords>WAITFOR</keywords>
+	<keywords>WEEK</keywords>
+	<keywords>WHEN</keywords>
+	<keywords>WHENEVER</keywords>
+	<keywords>WHERE</keywords>
+	<keywords>WHILE</keywords>
+	<keywords>WITH</keywords>
+	<keywords>WITHOUT</keywords>
+	<keywords>WORK</keywords>
+	<keywords>WRITE</keywords>
+	<keywords>WRITETEXT</keywords>
+	<keywords>YEAR</keywords>
+	<keywords>YEARS</keywords>
+	<keywords>ZONE</keywords>
+  </SQLSyntaxDefinition>
+</DBDefinition:DatabaseVendorDefinition>
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/.classpath b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/.gitignore b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/.project b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/.project
new file mode 100644
index 0000000..3cd1153
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.msft.sqlserver.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..73f4382
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Fri Apr 13 14:14:14 PDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.4
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..f7fbd5a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.datatools.enablement.msft.sqlserver.ui;singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.datatools.connectivity,
+ org.eclipse.datatools.connectivity.ui,
+ org.eclipse.datatools.enablement.msft.sqlserver
+Import-Package: com.ibm.icu.text;version="3.6.1",
+ com.ibm.icu.util;version="3.6.1"
+Export-Package: org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection,
+ org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection.drivers,
+ org.eclipse.datatools.enablement.msft.sqlserver.ui.drivers
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/about.html b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/about.html
new file mode 100644
index 0000000..129db9d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/build.properties b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/build.properties
new file mode 100644
index 0000000..fec4e4d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/build.properties
@@ -0,0 +1,15 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               about.html,\
+               icons/,\
+               plugin.properties,\
+               plugin.xml
+src.dir	= src/
+plugin.version =	1.0.0.200711021
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/icons/new_db_element.gif b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/icons/new_db_element.gif
new file mode 100644
index 0000000..1d459ce
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/icons/new_db_element.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/plugin.properties b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/plugin.properties
new file mode 100644
index 0000000..071fa3e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/plugin.properties
@@ -0,0 +1,16 @@
+###############################################################################
+# Copyright (c) 2006, 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName=Eclipse Data Tools Platform Microsoft SQL Server UI Plug-in
+providerName=Eclipse Data Tools Platform
+
+profile.sqlserver.wizard.title = SQL Server
+profile.sqlserver.wizard.description = Create a SQL Server connection profile.
+profile.sqlserver.properties = Driver Properties
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/plugin.xml b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/plugin.xml
new file mode 100644
index 0000000..ceffab8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/plugin.xml
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+    <extension point="org.eclipse.datatools.connectivity.connectionProfile">
+      <newWizard
+            class="org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection.NewSQLServerConnectionProfileWizard"
+            icon="icons/new_db_element.gif"
+            id="org.eclipse.datatools.enablement.msft.sqlserver.NewSQLServerConnectionProfileWizard"
+            name="%profile.sqlserver.wizard.title"
+            description = "%profile.sqlserver.wizard.description"
+            profile="org.eclipse.datatools.enablement.msft.sqlserver.connectionProfile"/>
+   </extension>
+   <extension point="org.eclipse.ui.propertyPages">
+      <page
+            class="org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection.SQLServerDBProfilePropertyPage"
+            id="org.eclipse.datatools.enablement.msft.sqlserver.profileProperties"
+            name="%profile.sqlserver.properties"
+            objectClass="org.eclipse.datatools.connectivity.IConnectionProfile">
+         <filter
+               name="org.eclipse.datatools.profile.property.id"
+               value="org.eclipse.datatools.enablement.msft.sqlserver.connectionProfile"/>
+      </page>
+   </extension>
+   <extension point="org.eclipse.datatools.connectivity.ui.driverPropertyEditor">
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.enablement.msft.sqlserver.2014.driverTemplate"
+            id="org.eclipse.datatools.enablement.msft.sqlserver.2014.driverTemplate.password">
+      </propertyEditor>
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.enablement.msft.sqlserver.2012.driverTemplate"
+            id="org.eclipse.datatools.enablement.msft.sqlserver.2012.driverTemplate.password">
+      </propertyEditor>
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.enablement.msft.sqlserver.2008.driverTemplate"
+            id="org.eclipse.datatools.enablement.msft.sqlserver.2008.driverTemplate.password">
+      </propertyEditor>
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.enablement.msft.sqlserver.2005.driverTemplate"
+            id="org.eclipse.datatools.enablement.msft.sqlserver.2005.driverTemplate.password">
+      </propertyEditor>
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.enablement.msft.sqlserver.2000.driverTemplate"
+            id="org.eclipse.datatools.enablement.msft.sqlserver.2000.driverTemplate.password">
+      </propertyEditor>
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.enablement.msft.sqlserver.2005.other.driverTemplate"
+            id="org.eclipse.datatools.enablement.msft.sqlserver.2005.other.driverTemplate.password">
+      </propertyEditor>
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.enablement.msft.sqlserver.2000.other.driverTemplate"
+            id="org.eclipse.datatools.enablement.msft.sqlserver.2000.other.driverTemplate.password">
+      </propertyEditor>
+   </extension>
+   
+   <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection.drivers.SQLServerOtherDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.msft.sqlserver.2005.other.driverTemplate"
+            id="org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection.drivers.2005.SQLServerOtherDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+   <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection.drivers.SQLServerOtherDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.msft.sqlserver.2000.other.driverTemplate"
+            id="org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection.drivers.2000.SQLServerOtherDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+
+  <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection.drivers.SQLServer2014DriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.msft.sqlserver.2014.driverTemplate"
+            id="org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection.drivers.SQLServer2014DriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+  <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection.drivers.SQLServer2012DriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.msft.sqlserver.2012.driverTemplate"
+            id="org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection.drivers.SQLServer2012DriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+  <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection.drivers.SQLServer2008DriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.msft.sqlserver.2008.driverTemplate"
+            id="org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection.drivers.SQLServer2008DriverUIContributor">
+      </driverUIContributor>
+   </extension>
+
+  
+  <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection.drivers.SQLServer2005DriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.msft.sqlserver.2005.driverTemplate"
+            id="org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection.drivers.SQLServer2005DriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+   <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection.drivers.SQLServer2000DriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.msft.sqlserver.2000.driverTemplate"
+            id="org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection.drivers.SQLServer2000DriverUIContributor">
+      </driverUIContributor>
+   </extension>
+ </plugin>  
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/internal/ui/connection/NewSQLServerConnectionProfileWizard.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/internal/ui/connection/NewSQLServerConnectionProfileWizard.java
new file mode 100644
index 0000000..699e7b2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/internal/ui/connection/NewSQLServerConnectionProfileWizard.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection;
+
+import org.eclipse.datatools.connectivity.ui.wizards.ExtensibleNewConnectionProfileWizard;
+
+public class NewSQLServerConnectionProfileWizard extends
+		ExtensibleNewConnectionProfileWizard {
+
+	public NewSQLServerConnectionProfileWizard() {
+		super(
+				new SQLServerDBProfileDetailsWizardPage(
+						"org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection.SQLServerDBProfileDetailsWizardPage"));
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/internal/ui/connection/SQLServerDBProfileDetailsWizardPage.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/internal/ui/connection/SQLServerDBProfileDetailsWizardPage.java
new file mode 100644
index 0000000..55b2fcc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/internal/ui/connection/SQLServerDBProfileDetailsWizardPage.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection;
+
+import org.eclipse.datatools.connectivity.ui.wizards.ExtensibleProfileDetailsWizardPage;
+import org.eclipse.datatools.enablement.msft.internal.sqlserver.connection.ISQLServerConnectionProfileConstants;
+
+public class SQLServerDBProfileDetailsWizardPage extends
+		ExtensibleProfileDetailsWizardPage {
+
+	public SQLServerDBProfileDetailsWizardPage(String pageName) {
+		super(pageName,
+				ISQLServerConnectionProfileConstants.SQLSERVER_CATEGORY_ID);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/internal/ui/connection/SQLServerDBProfilePropertyPage.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/internal/ui/connection/SQLServerDBProfilePropertyPage.java
new file mode 100644
index 0000000..b2fd749
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/internal/ui/connection/SQLServerDBProfilePropertyPage.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection;
+
+import org.eclipse.datatools.connectivity.ui.wizards.ExtensibleProfileDetailsPropertyPage;
+import org.eclipse.datatools.enablement.msft.internal.sqlserver.connection.ISQLServerConnectionProfileConstants;
+
+public class SQLServerDBProfilePropertyPage extends
+		ExtensibleProfileDetailsPropertyPage {
+
+	public SQLServerDBProfilePropertyPage() {
+		super(ISQLServerConnectionProfileConstants.SQLSERVER_CATEGORY_ID);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/internal/ui/connection/drivers/Messages.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/internal/ui/connection/drivers/Messages.java
new file mode 100644
index 0000000..c913023
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/internal/ui/connection/drivers/Messages.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection.drivers;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+public class Messages {
+	private static final String BUNDLE_NAME = "org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection.drivers.messages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private Messages() {
+	}
+
+	public static String getString(String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/internal/ui/connection/drivers/SQLServer2000DriverUIContributor.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/internal/ui/connection/drivers/SQLServer2000DriverUIContributor.java
new file mode 100644
index 0000000..7462f0c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/internal/ui/connection/drivers/SQLServer2000DriverUIContributor.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection.drivers;
+
+import org.eclipse.datatools.enablement.msft.sqlserver.ui.drivers.SQLServer2000DriverUIContributorBase;
+
+public class SQLServer2000DriverUIContributor extends SQLServer2000DriverUIContributorBase {
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/internal/ui/connection/drivers/SQLServer2005DriverUIContributor.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/internal/ui/connection/drivers/SQLServer2005DriverUIContributor.java
new file mode 100644
index 0000000..f377d0c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/internal/ui/connection/drivers/SQLServer2005DriverUIContributor.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection.drivers;
+
+import org.eclipse.datatools.enablement.msft.sqlserver.ui.drivers.SQLServer2005DriverUIContributorBase;
+
+public class SQLServer2005DriverUIContributor extends SQLServer2005DriverUIContributorBase {
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/internal/ui/connection/drivers/SQLServer2008DriverUIContributor.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/internal/ui/connection/drivers/SQLServer2008DriverUIContributor.java
new file mode 100644
index 0000000..c7f6d7f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/internal/ui/connection/drivers/SQLServer2008DriverUIContributor.java
@@ -0,0 +1,540 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection.drivers;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributor;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributorInformation;
+import org.eclipse.jface.dialogs.DialogPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Text;
+
+import com.ibm.icu.text.MessageFormat;
+
+public class SQLServer2008DriverUIContributor implements IDriverUIContributor,
+		Listener {
+
+	private static final String CUI_NEWCW_DATABASE_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_DATABASE_LBL_UI_");
+
+	private static final String CUI_NEWCW_HOST_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_HOST_LBL_UI_");
+
+	private static final String CUI_NEWCW_PORT_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_PORT_LBL_UI_");
+	
+	private static final String CUI_NEWCW_INTEGRATED_AUTHENTICATION_BTN_UI_ = Messages
+	.getString("CUI_NEWCW_INTEGRATED_AUTHENTICATION_BTN_UI_");
+
+	private static final String CUI_NEWCW_USERNAME_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_USERNAME_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_PASSWORD_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_PASSWORD_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_SAVE_PASSWORD_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_SAVE_PASSWORD_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_CONNECTIONURL_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_CONNECTIONURL_LBL_UI_");
+
+	private static final String CUI_NEWCW_DEFDBNAME_VAL_UI_ = Messages
+			.getString("CUI_NEWCW_DEFDBNAME_VAL_UI_");
+
+	private static final String CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_USE_INTEGRATED_AUTHENICATION_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_USE_INTEGRATED_AUTHENICATION_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+	
+	private static final String CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_URL_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_URL_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+	
+	private static final String INTEGRATED_AUTHETICATION_TEXT = "integratedSecurity=true;"; 
+
+	protected IDriverUIContributorInformation contributorInformation;
+
+	private Label databaseLabel;
+
+	protected Text databaseText;
+
+	private Label hostLabel;
+
+	protected Text hostText;
+
+	private Label portLabel;
+
+	protected Text portText;
+	
+	private Button integratedAuthenticationButton;
+
+	private Label usernameLabel;
+
+	private Text usernameText;
+
+	private Label passwordLabel;
+
+	private Text passwordText;
+
+	private Button savePasswordButton;
+
+	private Label urlLabel;
+
+	protected Text urlText;
+
+	private DialogPage parentPage;
+
+	private ScrolledComposite parentComposite;
+
+	private Properties properties;
+
+	private boolean isReadOnly = false;
+	
+	public boolean determineContributorCompletion() {
+		boolean isComplete = true;
+		if (databaseText.getText().trim().length() < 1) //$NON-NLS-1$
+		{
+			parentPage.setErrorMessage(MessageFormat.format(Messages
+					.getString("CUI_NEWCW_VALIDATE_DATABASE_REQ_UI_"), //$NON-NLS-1$
+					new String[] { CUI_NEWCW_DEFDBNAME_VAL_UI_ })); //$NON-NLS-1$
+			isComplete = false;
+		} else if (hostText.getText().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_HOST_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (!integratedAuthenticationButton.getSelection()
+				&& usernameText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_USERID_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (!integratedAuthenticationButton.getSelection()
+				&& passwordText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_PASSWORD_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (urlText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_URL_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		}
+		return isComplete;
+	}
+
+	public Composite getContributedDriverUI(Composite parent, boolean isReadOnly) {
+
+		if ((parentComposite == null) || parentComposite.isDisposed() || (this.isReadOnly != isReadOnly)) {
+			GridData gd;
+
+			this.isReadOnly = isReadOnly;
+			int additionalStyles = SWT.NONE;
+			if (isReadOnly){
+				additionalStyles = SWT.READ_ONLY;
+			}
+			
+			parentComposite = new ScrolledComposite(parent, SWT.H_SCROLL
+					| SWT.V_SCROLL);
+			parentComposite.setExpandHorizontal(true);
+			parentComposite.setExpandVertical(true);
+			parentComposite.setLayout(new GridLayout());
+
+			Composite baseComposite = new Composite(parentComposite, SWT.NULL);
+			GridLayout layout = new GridLayout();
+			layout.numColumns = 3;
+			baseComposite.setLayout(layout);
+
+			databaseLabel = new Label(baseComposite, SWT.NONE);
+			databaseLabel.setText(CUI_NEWCW_DATABASE_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			databaseLabel.setLayoutData(gd);
+
+			databaseText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalAlignment = GridData.FILL;
+			gd.horizontalSpan = 2;
+			databaseText.setLayoutData(gd);
+
+			hostLabel = new Label(baseComposite, SWT.NONE);
+			hostLabel.setText(CUI_NEWCW_HOST_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 1;
+			hostLabel.setLayoutData(gd);
+
+			hostText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 2;
+			gd.grabExcessHorizontalSpace = true;
+			hostText.setLayoutData(gd);
+
+			portLabel = new Label(baseComposite, SWT.NONE);
+			portLabel.setText(CUI_NEWCW_PORT_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 1;
+			portLabel.setLayoutData(gd);
+
+			portText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			portText.setLayoutData(gd);
+
+			integratedAuthenticationButton = new Button(baseComposite, SWT.CHECK);
+			integratedAuthenticationButton.setText(CUI_NEWCW_INTEGRATED_AUTHENTICATION_BTN_UI_); //$NON-NLS-1$
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 3;
+			gd.grabExcessHorizontalSpace = true;
+			integratedAuthenticationButton.setLayoutData(gd);
+			integratedAuthenticationButton
+			.addSelectionListener(new SelectionListener() {
+				public void widgetDefaultSelected(SelectionEvent e) {
+
+				}
+
+				public void widgetSelected(SelectionEvent e) {
+					if (!SQLServer2008DriverUIContributor.this.isReadOnly){
+						if (((Button) e.widget).getSelection()) {
+							enableAuthenticationControls(false);
+						} else {
+							enableAuthenticationControls(true);
+						}
+					}
+				}
+			});
+
+			
+			usernameLabel = new Label(baseComposite, SWT.NONE);
+			usernameLabel.setText(CUI_NEWCW_USERNAME_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			usernameLabel.setLayoutData(gd);
+
+			usernameText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			usernameText.setLayoutData(gd);
+
+			passwordLabel = new Label(baseComposite, SWT.NONE);
+			passwordLabel.setText(CUI_NEWCW_PASSWORD_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			passwordLabel.setLayoutData(gd);
+
+			passwordText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER
+					| SWT.PASSWORD | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			passwordText.setLayoutData(gd);
+
+			this.savePasswordButton = new Button(baseComposite, SWT.CHECK);
+			this.savePasswordButton.setText(CUI_NEWCW_SAVE_PASSWORD_LBL_UI_); //$NON-NLS-1$
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 3;
+			gd.grabExcessHorizontalSpace = true;
+			savePasswordButton.setLayoutData(gd);
+
+			urlLabel = new Label(baseComposite, SWT.NONE);
+			urlLabel.setText(CUI_NEWCW_CONNECTIONURL_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 1;
+			urlLabel.setLayoutData(gd);
+
+			urlText = new Text(baseComposite, SWT.MULTI | SWT.BORDER
+					| SWT.READ_ONLY | SWT.WRAP | SWT.V_SCROLL);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			gd.widthHint = 190;
+			gd.heightHint = 50;
+			urlText.setLayoutData(gd);
+
+			parentComposite.setContent(baseComposite);
+			parentComposite.setMinSize(baseComposite.computeSize(SWT.DEFAULT,
+					SWT.DEFAULT));
+
+			initialize();
+		}
+		return parentComposite;
+	}
+
+	private void enableAuthenticationControls(boolean enabled) {
+		usernameLabel.setEnabled(enabled);
+		usernameText.setEnabled(enabled);
+		passwordLabel.setEnabled(enabled);
+		passwordText.setEnabled(enabled);
+		savePasswordButton.setEnabled(enabled);
+	}
+	
+	public List getSummaryData() {
+		List summaryData = new ArrayList();
+
+		summaryData.add(new String[] { CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_,
+				this.databaseText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_,
+				this.hostText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_,
+				this.portText.getText().trim() });
+		summaryData
+		.add(new String[] {
+				CUI_NEWCW_USE_INTEGRATED_AUTHENICATION_SUMMARY_DATA_TEXT_,
+				integratedAuthenticationButton.getSelection() ? CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_
+						: CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ });
+		if (!integratedAuthenticationButton.getSelection()) {
+		summaryData.add(new String[] { CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_,
+				this.usernameText.getText().trim() });
+		summaryData
+				.add(new String[] {
+						CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_,
+						savePasswordButton.getSelection() ? CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_
+								: CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ });
+		}
+		summaryData.add(new String[] { CUI_NEWCW_URL_SUMMARY_DATA_TEXT_,
+				this.urlText.getText().trim() });
+		return summaryData;
+	}
+
+	public void loadProperties() {
+		removeListeners();
+		SqlServerJDBCURL url = new SqlServerJDBCURL(this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID));
+		hostText.setText(url.getNode());
+		portText.setText(url.getPort());
+		databaseText.setText(url.getDatabaseName());
+
+		if (url.getProperties().indexOf(INTEGRATED_AUTHETICATION_TEXT) > -1) {
+			integratedAuthenticationButton.setSelection(true);
+			enableAuthenticationControls(false);
+		}
+		String username = this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID);
+		if (username != null) {
+			usernameText.setText(username);
+		}
+		String password = this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID);
+		if (password != null) {
+			passwordText.setText(password);
+		}
+		String savePassword = this.properties
+				.getProperty(IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID);
+		if ((savePassword != null)
+				&& Boolean.valueOf(savePassword) == Boolean.TRUE) {
+			savePasswordButton.setSelection(true);
+		}
+		updateURL();
+		addListeners();
+		setConnectionInformation();
+	}
+
+	public void setDialogPage(DialogPage parentPage) {
+		this.parentPage = parentPage;
+	}
+
+	public void setDriverUIContributorInformation(
+			IDriverUIContributorInformation contributorInformation) {
+		this.contributorInformation = contributorInformation;
+		this.properties = contributorInformation.getProperties();
+	}
+
+	public void handleEvent(Event event) {
+		if (isReadOnly){
+			if (event.widget == savePasswordButton){
+				savePasswordButton.setSelection(!savePasswordButton.getSelection());
+			}
+		} else {
+			updateURL();
+			setConnectionInformation();
+		}
+	}
+
+	private void setConnectionInformation() {
+		properties.setProperty(
+				IJDBCDriverDefinitionConstants.DATABASE_NAME_PROP_ID,
+				this.databaseText.getText().trim());
+		properties.setProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID,
+				this.passwordText.getText());
+		properties.setProperty(
+				IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID, String
+						.valueOf(savePasswordButton.getSelection()));
+		properties.setProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID,
+				this.usernameText.getText());
+		properties.setProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID,
+				this.urlText.getText().trim());
+		this.contributorInformation.setProperties(properties);
+	}
+
+	private void initialize() {
+		updateURL();
+		addListeners();
+	}
+
+	private void addListeners() {
+		databaseText.addListener(SWT.Modify, this);
+		hostText.addListener(SWT.Modify, this);
+		portText.addListener(SWT.Modify, this);
+		integratedAuthenticationButton.addListener(SWT.Selection, this);
+		usernameText.addListener(SWT.Modify, this);
+		passwordText.addListener(SWT.Modify, this);
+		savePasswordButton.addListener(SWT.Selection, this);
+	}
+
+	private void removeListeners() {
+		databaseText.removeListener(SWT.Modify, this);
+		hostText.removeListener(SWT.Modify, this);
+		portText.removeListener(SWT.Modify, this);
+		integratedAuthenticationButton.removeListener(SWT.Selection, this);
+		usernameText.removeListener(SWT.Modify, this);
+		passwordText.removeListener(SWT.Modify, this);
+		savePasswordButton.removeListener(SWT.Selection, this);
+	}
+
+	protected void updateURL() {
+		String url = "jdbc:sqlserver://" + this.hostText.getText() + (this.portText.getText().equalsIgnoreCase("") ? "" : ":" + this.portText.getText()) + ";databaseName=" + this.databaseText.getText(); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		url += !integratedAuthenticationButton.getSelection() ? "" : ";" + INTEGRATED_AUTHETICATION_TEXT;
+		urlText.setText(url);
+	}
+
+	private class SqlServerJDBCURL {
+		private String subprotocol = ""; //$NON-NLS-1$
+
+		private String node = ""; //$NON-NLS-1$
+
+		private String port = ""; //$NON-NLS-1$
+
+		private String databaseName = ""; //$NON-NLS-1$
+
+		private String properties = ""; //$NON-NLS-1$
+
+		/**
+		 * @param url
+		 */
+		public SqlServerJDBCURL(String url) {
+			parseURL(url);
+		}
+
+		/**
+		 * @return Returns the databaseName.
+		 */
+		public String getDatabaseName() {
+			return databaseName;
+		}
+
+		/**
+		 * @return Returns the node.
+		 */
+		public String getNode() {
+			return node;
+		}
+
+		/**
+		 * @return Returns the subprotocol.
+		 */
+		public String getSubprotocol() {
+			return subprotocol;
+		}
+
+		private void parseURL(String url) {
+
+			try {
+				String remainingURL = url.substring(url.indexOf(':') + 1);
+				this.subprotocol = remainingURL.substring(0, remainingURL
+						.indexOf(':'));
+				remainingURL = remainingURL
+						.substring(remainingURL.indexOf(':') + 3);
+				this.node = remainingURL
+						.substring(0, remainingURL.indexOf(';'));
+				if (this.node.indexOf(':') > -1) {
+					this.port = this.node.substring(this.node.indexOf(':') + 1);
+					this.node = this.node.substring(0, this.node.indexOf(':'));
+				}
+				remainingURL = remainingURL
+						.substring(remainingURL.indexOf(';') + 1);
+				if (remainingURL.indexOf(';') > -1) {
+					this.databaseName = remainingURL.substring(0, remainingURL
+							.indexOf(';'));
+					this.databaseName = this.databaseName.substring(new String(
+							"databaseName=").length()); //$NON-NLS-1$
+					remainingURL = remainingURL.substring(remainingURL
+							.indexOf(';') + 1);
+					this.properties = remainingURL;
+				} else {
+					this.databaseName = remainingURL.substring(new String(
+							"databaseName=").length()); //$NON-NLS-1$
+				}
+			} catch (Exception e) {
+			}
+		}
+
+		/**
+		 * @return Returns the port.
+		 */
+		public String getPort() {
+			return port;
+		}
+
+		/**
+		 * @return Returns the properties.
+		 */
+		public String getProperties() {
+			return properties;
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/internal/ui/connection/drivers/SQLServerOtherDriverUIContributor.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/internal/ui/connection/drivers/SQLServerOtherDriverUIContributor.java
new file mode 100644
index 0000000..40a2e30
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/internal/ui/connection/drivers/SQLServerOtherDriverUIContributor.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection.drivers;
+
+import org.eclipse.datatools.connectivity.ui.wizards.OtherDriverUIContributor;
+
+public class SQLServerOtherDriverUIContributor extends OtherDriverUIContributor {
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/internal/ui/connection/drivers/messages.properties b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/internal/ui/connection/drivers/messages.properties
new file mode 100644
index 0000000..4cdba7c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/internal/ui/connection/drivers/messages.properties
@@ -0,0 +1,41 @@
+###############################################################################
+# Copyright (c) 2007, 2013 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+
+#
+## SQL Server Driver UI Contributor
+#
+CUI_NEWCW_DATABASE_LBL_UI_ = Databa&se:
+CUI_NEWCW_HOST_LBL_UI_ = &Host:
+CUI_NEWCW_PORT_LBL_UI_ = Port nu&mber:
+CUI_NEWCW_CONNECTIONURL_LBL_UI_= Connection UR&L:
+CUI_NEWCW_DEFDBNAME_VAL_UI_ = pubs
+CUI_NEWCW_INTEGRATED_AUTHENTICATION_BTN_UI_ = Use integrated authentication
+CUI_NEWCW_USERNAME_LBL_UI_ = User n&ame:
+CUI_NEWCW_PASSWORD_LBL_UI_ = Pass&word:
+CUI_NEWCW_SAVE_PASSWORD_LBL_UI_ = Sa&ve password
+CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_ = Database
+CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_ = Host
+CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_ = Port number
+CUI_NEWCW_USE_INTEGRATED_AUTHENICATION_SUMMARY_DATA_TEXT_ = Use integrated authentication
+CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_ = User name
+CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_ = Save password
+CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_ = true
+CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ = false
+CUI_NEWCW_URL_SUMMARY_DATA_TEXT_ = URL
+
+CUI_NEWCW_VALIDATE_DATABASE_REQ_UI_ = Enter a database name; for example, {0}.
+CUI_NEWCW_VALIDATE_HOST_REQ_UI_= Enter the host name for the database server.
+CUI_NEWCW_VALIDATE_PORT_REQ_UI_ = Enter the connection port number for the database server.
+CUI_NEWCW_VALIDATE_USERID_REQ_UI_ = Enter a user name.
+CUI_NEWCW_VALIDATE_PASSWORD_REQ_UI_ = Enter a password.
+
+
+
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/ui/drivers/SQLServer2000DriverUIContributorBase.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/ui/drivers/SQLServer2000DriverUIContributorBase.java
new file mode 100644
index 0000000..7c9cae4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/ui/drivers/SQLServer2000DriverUIContributorBase.java
@@ -0,0 +1,575 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ *               Actuate Corporation - re-factored to an extendable base class and
+ *                  added the optional properties tab
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.msft.sqlserver.ui.drivers;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributor;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributorInformation;
+import org.eclipse.datatools.connectivity.ui.wizards.OptionalPropertiesPane;
+import org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection.drivers.Messages;
+import org.eclipse.jface.dialogs.DialogPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.swt.widgets.Text;
+
+import com.ibm.icu.text.MessageFormat;
+
+public class SQLServer2000DriverUIContributorBase implements IDriverUIContributor,
+		Listener {
+
+	private static final String CUI_NEWCW_DATABASE_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_DATABASE_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_HOST_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_HOST_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_PORT_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_PORT_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_USERNAME_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_USERNAME_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_PASSWORD_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_PASSWORD_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_SAVE_PASSWORD_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_SAVE_PASSWORD_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_CONNECTIONURL_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_CONNECTIONURL_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_DEFDBNAME_VAL_UI_ = Messages
+			.getString("CUI_NEWCW_DEFDBNAME_VAL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_URL_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_URL_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	protected IDriverUIContributorInformation contributorInformation;
+
+	private Label databaseLabel;
+
+	protected Text databaseText;
+
+	private Label hostLabel;
+
+	protected Text hostText;
+
+	private Label portLabel;
+
+	protected Text portText;
+
+	private Label usernameLabel;
+
+	private Text usernameText;
+
+	private Label passwordLabel;
+
+	private Text passwordText;
+
+	private Button savePasswordButton;
+
+	private Label urlLabel;
+
+	protected Text urlText;
+
+	protected DialogPage parentPage;
+
+	private ScrolledComposite parentComposite;
+
+    protected OptionalPropertiesPane optionalPropsComposite;
+
+	private Properties properties;
+	
+	protected boolean isReadOnly = false;
+
+	public boolean determineContributorCompletion() {
+		boolean isComplete = true;
+		if (databaseText.getText().trim().length() < 1)
+		{
+			parentPage.setErrorMessage(MessageFormat.format(Messages
+					.getString("CUI_NEWCW_VALIDATE_DATABASE_REQ_UI_"), //$NON-NLS-1$
+					new String[] { CUI_NEWCW_DEFDBNAME_VAL_UI_ }));
+			isComplete = false;
+		} else if (hostText.getText().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_HOST_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (portText.getText().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_PORT_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (usernameText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_USERID_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+//		Turning off password requirement per bug 242732 - brianf
+//		} else if (passwordText.getText().trim().length() < 1) {
+//			parentPage.setErrorMessage(Messages
+//					.getString("CUI_NEWCW_VALIDATE_PASSWORD_REQ_UI_")); //$NON-NLS-1$
+//			isComplete = false;
+		} else if (urlText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_URL_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+        } else if (!optionalPropsComposite.validateControl(parentPage)) {
+            isComplete = false;
+        } 
+		return isComplete;
+	}
+
+	public Composite getContributedDriverUI(Composite parent, boolean isReadOnly) {
+
+		if ((parentComposite == null) || parentComposite.isDisposed() || (this.isReadOnly != isReadOnly)) {
+			GridData gd;
+
+			this.isReadOnly = isReadOnly;
+			int additionalStyles = SWT.NONE;
+			if (isReadOnly){
+				additionalStyles = SWT.READ_ONLY;
+			}
+			
+			parentComposite = new ScrolledComposite(parent, SWT.H_SCROLL
+					| SWT.V_SCROLL);
+			parentComposite.setExpandHorizontal(true);
+			parentComposite.setExpandVertical(true);
+			parentComposite.setLayout(new GridLayout());
+
+            TabFolder tabComposite = new TabFolder(parentComposite, SWT.TOP);
+
+            // add general tab
+            TabItem generalTab = new TabItem(tabComposite, SWT.None);
+            generalTab.setText(ConnectivityUIPlugin.getDefault()
+                    .getResourceString("CommonDriverUIContributor.generaltab")); //$NON-NLS-1$
+
+            Composite baseComposite = new Composite(tabComposite, SWT.NULL);
+			GridLayout layout = new GridLayout();
+			layout.numColumns = 3;
+			baseComposite.setLayout(layout);
+            generalTab.setControl(baseComposite);
+
+			databaseLabel = new Label(baseComposite, SWT.NONE);
+			databaseLabel.setText(CUI_NEWCW_DATABASE_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			databaseLabel.setLayoutData(gd);
+
+			databaseText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalAlignment = GridData.FILL;
+			gd.horizontalSpan = 2;
+			databaseText.setLayoutData(gd);
+
+			hostLabel = new Label(baseComposite, SWT.NONE);
+			hostLabel.setText(CUI_NEWCW_HOST_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 1;
+			hostLabel.setLayoutData(gd);
+
+			hostText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 2;
+			gd.grabExcessHorizontalSpace = true;
+			hostText.setLayoutData(gd);
+
+			portLabel = new Label(baseComposite, SWT.NONE);
+			portLabel.setText(CUI_NEWCW_PORT_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 1;
+			portLabel.setLayoutData(gd);
+
+			portText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			portText.setLayoutData(gd);
+
+			usernameLabel = new Label(baseComposite, SWT.NONE);
+			usernameLabel.setText(CUI_NEWCW_USERNAME_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			usernameLabel.setLayoutData(gd);
+
+			usernameText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			usernameText.setLayoutData(gd);
+
+			passwordLabel = new Label(baseComposite, SWT.NONE);
+			passwordLabel.setText(CUI_NEWCW_PASSWORD_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			passwordLabel.setLayoutData(gd);
+
+			passwordText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER
+					| SWT.PASSWORD | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			passwordText.setLayoutData(gd);
+
+			this.savePasswordButton = new Button(baseComposite, SWT.CHECK);
+			this.savePasswordButton.setText(CUI_NEWCW_SAVE_PASSWORD_LBL_UI_);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 3;
+			gd.grabExcessHorizontalSpace = true;
+			savePasswordButton.setLayoutData(gd);
+
+			urlLabel = new Label(baseComposite, SWT.NONE);
+			urlLabel.setText(CUI_NEWCW_CONNECTIONURL_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 1;
+			urlLabel.setLayoutData(gd);
+
+			urlText = new Text(baseComposite, SWT.MULTI | SWT.BORDER
+					| SWT.READ_ONLY | SWT.WRAP | SWT.V_SCROLL);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			gd.widthHint = 190;
+			gd.heightHint = 50;
+			urlText.setLayoutData(gd);
+
+            // add optional properties tab
+            TabItem optionalPropsTab = new TabItem( tabComposite, SWT.None );
+            optionalPropsTab.setText( ConnectivityUIPlugin.getDefault()
+                    .getResourceString( "CommonDriverUIContributor.optionaltab" ) ); //$NON-NLS-1$
+            optionalPropsComposite = createOptionalPropertiesPane( tabComposite, SWT.NULL, isReadOnly );
+            optionalPropsTab.setControl( optionalPropsComposite );
+
+            parentComposite.setContent(tabComposite);
+            parentComposite.setMinSize(tabComposite.computeSize(SWT.DEFAULT,
+                    SWT.DEFAULT));
+
+			initialize();
+		}
+		return parentComposite;
+	}
+
+	public List getSummaryData() {
+		List summaryData = new ArrayList();
+
+		summaryData.add(new String[] { CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_,
+				this.databaseText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_,
+				this.hostText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_,
+				this.portText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_,
+				this.usernameText.getText().trim() });
+		summaryData
+				.add(new String[] {
+						CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_,
+						savePasswordButton.getSelection() ? CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_
+								: CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ });
+		summaryData.add(new String[] { CUI_NEWCW_URL_SUMMARY_DATA_TEXT_,
+				this.urlText.getText().trim() });
+		return summaryData;
+	}
+
+	public void loadProperties() {
+		removeListeners();
+		SqlServerJDBCURL url = getURLHandle(this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID));
+		hostText.setText(url.getNode());
+		portText.setText(url.getPort());
+		databaseText.setText(url.getDatabaseName());
+
+		String username = this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID);
+		if (username != null) {
+			usernameText.setText(username);
+		}
+		String password = this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID);
+		if (password != null) {
+			passwordText.setText(password);
+		}
+		String savePassword = this.properties
+				.getProperty(IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID);
+		if ((savePassword != null)
+				&& Boolean.valueOf(savePassword) == Boolean.TRUE) {
+			savePasswordButton.setSelection(true);
+		}
+        
+        // load optional connection properties
+        optionalPropsComposite.loadProperties();
+
+        updateURL();
+		addListeners();
+		setConnectionInformation();
+	}
+
+	public void setDialogPage(DialogPage parentPage) {
+		this.parentPage = parentPage;
+	}
+
+	public void setDriverUIContributorInformation(
+			IDriverUIContributorInformation contributorInformation) {
+		this.contributorInformation = contributorInformation;
+		this.properties = contributorInformation.getProperties();
+        optionalPropsComposite.setDriverUIContributorInformation( contributorInformation );
+	}
+
+	public void handleEvent(Event event) {
+		if (isReadOnly){
+			if (event.widget == savePasswordButton){
+				savePasswordButton.setSelection(!savePasswordButton.getSelection());
+			}
+		} else {
+			updateURL();
+			setConnectionInformation();
+		}
+	}
+
+	private void setConnectionInformation() {
+		properties.setProperty(
+				IJDBCDriverDefinitionConstants.DATABASE_NAME_PROP_ID,
+				this.databaseText.getText().trim());
+		properties.setProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID,
+				this.passwordText.getText());
+		properties.setProperty(
+				IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID, String
+						.valueOf(savePasswordButton.getSelection()));
+		properties.setProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID,
+				this.usernameText.getText());
+		properties.setProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID,
+				this.urlText.getText().trim());
+        optionalPropsComposite.setConnectionInformation();
+		this.contributorInformation.setProperties(properties);
+	}
+
+	private void initialize() {
+		updateURL();
+		addListeners();
+	}
+
+	private void addListeners() {
+		databaseText.addListener(SWT.Modify, this);
+		hostText.addListener(SWT.Modify, this);
+		portText.addListener(SWT.Modify, this);
+		usernameText.addListener(SWT.Modify, this);
+		passwordText.addListener(SWT.Modify, this);
+		savePasswordButton.addListener(SWT.Selection, this);
+	}
+
+	private void removeListeners() {
+		databaseText.removeListener(SWT.Modify, this);
+		hostText.removeListener(SWT.Modify, this);
+		portText.removeListener(SWT.Modify, this);
+		usernameText.removeListener(SWT.Modify, this);
+		passwordText.removeListener(SWT.Modify, this);
+		savePasswordButton.removeListener(SWT.Selection, this);
+	}
+
+	protected void updateURL() {
+        String url = getURLHandle(hostText.getText().trim(), 
+                        portText.getText().trim(), 
+                        databaseText.getText().trim())
+                      .formatURL();
+		urlText.setText(url);
+	}
+    
+    /**
+     * Creates an OptionalPropertiesPane.  
+     * Extenders may override to return an extended composite.
+     */
+    protected OptionalPropertiesPane createOptionalPropertiesPane( Composite parent, int style, 
+            boolean useReadOnlyControls )
+    {
+        return new OptionalPropertiesPane( parent, style, useReadOnlyControls );
+    }
+
+    /**
+     * Returns a SQL Server JDBC URL handle that parses the specified JDBC URL.
+     * Extenders may override to return an extended URL handle for its own JDBC URL format.
+     * @param url   JDBC connection URL 
+     * @return  an URL handle that provides accessors for each of the attributes found in the specified URL. 
+     */
+    protected SqlServerJDBCURL getURLHandle( String url ) {
+        return new SqlServerJDBCURL( url );
+    }
+    
+    /**
+     * Returns a SQL Server JDBC URL handle for the specified URL attributes.
+     * @param node  TCP/IP address or TCP/IP host name of the server to which to connect
+     * @param port  the number of the TCP/IP port.
+     * @param databaseName  the name of the database to which to connect
+     * @return  an URL handle that can format a SQL Server JDBC connection URL based on the specified attributes
+     */
+    protected SqlServerJDBCURL getURLHandle(String node, String port, String databaseName) {
+        return new SqlServerJDBCURL( node, port, databaseName );
+    }
+
+    /**
+     * A SQL Server 2000 JDBC URL handle that formats and parses a driver-specific JDBC connection URL.
+     */
+    protected class SqlServerJDBCURL {
+		protected String subprotocol = ""; //$NON-NLS-1$
+
+		protected String node = ""; //$NON-NLS-1$
+
+		protected String port = ""; //$NON-NLS-1$
+
+		protected String databaseName = ""; //$NON-NLS-1$
+
+		protected String urlProperties = ""; //$NON-NLS-1$
+
+		/**
+		 * @param url
+		 */
+		public SqlServerJDBCURL(String url) {
+			parseURL(url);
+		}
+
+        public SqlServerJDBCURL(String node, String port, String databaseName) {
+            this.node = node;
+            this.port = port;
+            this.databaseName = databaseName;
+        }
+
+		/**
+		 * @return Returns the databaseName.
+		 */
+		public String getDatabaseName() {
+			return databaseName;
+		}
+
+		/**
+		 * @return Returns the node.
+		 */
+		public String getNode() {
+			return node;
+		}
+
+		/**
+		 * @return Returns the subprotocol.
+		 */
+		public String getSubprotocol() {
+			return subprotocol;
+		}
+
+        /**
+         * @return Returns the port.
+         */
+        public String getPort() {
+            return port;
+        }
+
+        /**
+         * @return Returns the properties.
+         */
+        public String getProperties() {
+            return urlProperties;
+        }
+        
+        /**
+         * Formats the driver URL based on values specified in 
+         * constructor {@link SqlServerJDBCURL(String, String, String)}.
+         */
+        protected String formatURL() {
+            String url = "jdbc:microsoft:sqlserver://" + getNode() + ":" + getPort()  //$NON-NLS-1$ //$NON-NLS-2$
+                            + ";databaseName=" + getDatabaseName(); //$NON-NLS-1$
+            return url;
+        }        
+
+        /**
+         * Parses the specified URL string into URL attributes that can be accessed 
+         * by the corresponding getter methods.
+         */
+        protected void parseURL(String url) {
+			try {
+				String remainingURL = url.substring(url.indexOf(':') + 1);
+				this.subprotocol = remainingURL.substring(0, remainingURL
+						.indexOf(':'));
+				remainingURL = remainingURL
+						.substring(remainingURL.indexOf(':') + 1);
+				this.subprotocol = this.subprotocol
+						+ remainingURL.substring(0, remainingURL.indexOf(':'));
+				remainingURL = remainingURL
+						.substring(remainingURL.indexOf(':') + 3);
+				this.node = remainingURL
+						.substring(0, remainingURL.indexOf(';'));
+				if (this.node.indexOf(':') > -1) {
+					this.port = this.node.substring(this.node.indexOf(':') + 1);
+					this.node = this.node.substring(0, this.node.indexOf(':'));
+				}
+				remainingURL = remainingURL
+						.substring(remainingURL.indexOf(';') + 1);
+				if (remainingURL.indexOf(';') > -1) {
+					this.databaseName = remainingURL.substring(0, remainingURL
+							.indexOf(';'));
+					this.databaseName = this.databaseName.substring(new String(
+							"databaseName=").length()); //$NON-NLS-1$
+					remainingURL = remainingURL.substring(remainingURL
+							.indexOf(';') + 1);
+					this.urlProperties = remainingURL;
+				} else {
+					this.databaseName = remainingURL.substring(new String(
+							"databaseName=").length()); //$NON-NLS-1$
+				}
+			} catch (Exception e) {
+			}
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/ui/drivers/SQLServer2005DriverUIContributorBase.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/ui/drivers/SQLServer2005DriverUIContributorBase.java
new file mode 100644
index 0000000..a71fdf6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui/src/org/eclipse/datatools/enablement/msft/sqlserver/ui/drivers/SQLServer2005DriverUIContributorBase.java
@@ -0,0 +1,651 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ *               Actuate Corporation - re-factored to an extendable base class and
+ *                  added the optional properties tab
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.msft.sqlserver.ui.drivers;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCConnectionProfileConstants;
+import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCDriverDefinitionConstants;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributor;
+import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributorInformation;
+import org.eclipse.datatools.connectivity.ui.wizards.OptionalPropertiesPane;
+import org.eclipse.datatools.enablement.msft.sqlserver.internal.ui.connection.drivers.Messages;
+import org.eclipse.jface.dialogs.DialogPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.swt.widgets.Text;
+
+import com.ibm.icu.text.MessageFormat;
+
+public class SQLServer2005DriverUIContributorBase implements IDriverUIContributor,
+		Listener {
+
+	private static final String CUI_NEWCW_DATABASE_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_DATABASE_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_HOST_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_HOST_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_PORT_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_PORT_LBL_UI_"); //$NON-NLS-1$
+	
+	private static final String CUI_NEWCW_INTEGRATED_AUTHENTICATION_BTN_UI_ = Messages
+	        .getString("CUI_NEWCW_INTEGRATED_AUTHENTICATION_BTN_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_USERNAME_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_USERNAME_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_PASSWORD_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_PASSWORD_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_SAVE_PASSWORD_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_SAVE_PASSWORD_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_CONNECTIONURL_LBL_UI_ = Messages
+			.getString("CUI_NEWCW_CONNECTIONURL_LBL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_DEFDBNAME_VAL_UI_ = Messages
+			.getString("CUI_NEWCW_DEFDBNAME_VAL_UI_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_USE_INTEGRATED_AUTHENICATION_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_USE_INTEGRATED_AUTHENICATION_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+	
+	private static final String CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+
+	private static final String CUI_NEWCW_URL_SUMMARY_DATA_TEXT_ = Messages
+			.getString("CUI_NEWCW_URL_SUMMARY_DATA_TEXT_"); //$NON-NLS-1$
+	
+	private static final String INTEGRATED_AUTHETICATION_TEXT = "integratedSecurity=true;";  //$NON-NLS-1$
+
+	protected IDriverUIContributorInformation contributorInformation;
+
+	private Label databaseLabel;
+
+	protected Text databaseText;
+
+	private Label hostLabel;
+
+	protected Text hostText;
+
+	private Label portLabel;
+
+	protected Text portText;
+	
+	protected Button integratedAuthenticationButton;
+
+	private Label usernameLabel;
+
+	private Text usernameText;
+
+	private Label passwordLabel;
+
+	private Text passwordText;
+
+	private Button savePasswordButton;
+
+	private Label urlLabel;
+
+	protected Text urlText;
+
+	protected DialogPage parentPage;
+
+	private ScrolledComposite parentComposite;
+
+    protected OptionalPropertiesPane optionalPropsComposite;
+
+	private Properties properties;
+
+	protected boolean isReadOnly = false;
+	
+	public boolean determineContributorCompletion() {
+		boolean isComplete = true;
+		if (databaseText.getText().trim().length() < 1) 
+		{
+			parentPage.setErrorMessage(MessageFormat.format(Messages
+					.getString("CUI_NEWCW_VALIDATE_DATABASE_REQ_UI_"), //$NON-NLS-1$
+					new String[] { CUI_NEWCW_DEFDBNAME_VAL_UI_ })); 
+			isComplete = false;
+		} else if (hostText.getText().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_HOST_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (!integratedAuthenticationButton.getSelection()
+				&& usernameText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_USERID_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (!integratedAuthenticationButton.getSelection()
+				&& passwordText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_PASSWORD_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+		} else if (urlText.getText().trim().length() < 1) {
+			parentPage.setErrorMessage(Messages
+					.getString("CUI_NEWCW_VALIDATE_URL_REQ_UI_")); //$NON-NLS-1$
+			isComplete = false;
+        } else if (!optionalPropsComposite.validateControl(parentPage)) {
+            isComplete = false;
+        } 
+		return isComplete;
+	}
+
+	public Composite getContributedDriverUI(Composite parent, boolean isReadOnly) {
+
+		if ((parentComposite == null) || parentComposite.isDisposed() || (this.isReadOnly != isReadOnly)) {
+			GridData gd;
+
+			this.isReadOnly = isReadOnly;
+			int additionalStyles = SWT.NONE;
+			if (isReadOnly){
+				additionalStyles = SWT.READ_ONLY;
+			}
+			
+			parentComposite = new ScrolledComposite(parent, SWT.H_SCROLL
+					| SWT.V_SCROLL);
+			parentComposite.setExpandHorizontal(true);
+			parentComposite.setExpandVertical(true);
+			parentComposite.setLayout(new GridLayout());
+
+            TabFolder tabComposite = new TabFolder(parentComposite, SWT.TOP);
+
+            // add general tab
+            TabItem generalTab = new TabItem(tabComposite, SWT.None);
+            generalTab.setText(ConnectivityUIPlugin.getDefault()
+                    .getResourceString("CommonDriverUIContributor.generaltab")); //$NON-NLS-1$
+
+            Composite baseComposite = new Composite(tabComposite, SWT.NULL);
+			GridLayout layout = new GridLayout();
+			layout.numColumns = 3;
+			baseComposite.setLayout(layout);
+            generalTab.setControl(baseComposite);
+
+			databaseLabel = new Label(baseComposite, SWT.NONE);
+			databaseLabel.setText(CUI_NEWCW_DATABASE_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			databaseLabel.setLayoutData(gd);
+
+			databaseText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalAlignment = GridData.FILL;
+			gd.horizontalSpan = 2;
+			databaseText.setLayoutData(gd);
+
+			hostLabel = new Label(baseComposite, SWT.NONE);
+			hostLabel.setText(CUI_NEWCW_HOST_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 1;
+			hostLabel.setLayoutData(gd);
+
+			hostText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 2;
+			gd.grabExcessHorizontalSpace = true;
+			hostText.setLayoutData(gd);
+
+			portLabel = new Label(baseComposite, SWT.NONE);
+			portLabel.setText(CUI_NEWCW_PORT_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 1;
+			portLabel.setLayoutData(gd);
+
+			portText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			portText.setLayoutData(gd);
+
+			integratedAuthenticationButton = new Button(baseComposite, SWT.CHECK);
+			integratedAuthenticationButton.setText(CUI_NEWCW_INTEGRATED_AUTHENTICATION_BTN_UI_); 
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 3;
+			gd.grabExcessHorizontalSpace = true;
+			integratedAuthenticationButton.setLayoutData(gd);
+			integratedAuthenticationButton
+			.addSelectionListener(new SelectionListener() {
+				public void widgetDefaultSelected(SelectionEvent e) {
+
+				}
+
+				public void widgetSelected(SelectionEvent e) {
+					if (!SQLServer2005DriverUIContributorBase.this.isReadOnly){
+						if (((Button) e.widget).getSelection()) {
+							enableAuthenticationControls(false);
+						} else {
+							enableAuthenticationControls(true);
+						}
+					}
+				}
+			});
+
+			
+			usernameLabel = new Label(baseComposite, SWT.NONE);
+			usernameLabel.setText(CUI_NEWCW_USERNAME_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			usernameLabel.setLayoutData(gd);
+
+			usernameText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			usernameText.setLayoutData(gd);
+
+			passwordLabel = new Label(baseComposite, SWT.NONE);
+			passwordLabel.setText(CUI_NEWCW_PASSWORD_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			passwordLabel.setLayoutData(gd);
+
+			passwordText = new Text(baseComposite, SWT.SINGLE | SWT.BORDER
+					| SWT.PASSWORD | additionalStyles);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			passwordText.setLayoutData(gd);
+
+			this.savePasswordButton = new Button(baseComposite, SWT.CHECK);
+			this.savePasswordButton.setText(CUI_NEWCW_SAVE_PASSWORD_LBL_UI_); 
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 3;
+			gd.grabExcessHorizontalSpace = true;
+			savePasswordButton.setLayoutData(gd);
+
+			urlLabel = new Label(baseComposite, SWT.NONE);
+			urlLabel.setText(CUI_NEWCW_CONNECTIONURL_LBL_UI_);
+			gd = new GridData();
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.horizontalSpan = 1;
+			urlLabel.setLayoutData(gd);
+
+			urlText = new Text(baseComposite, SWT.MULTI | SWT.BORDER
+					| SWT.READ_ONLY | SWT.WRAP | SWT.V_SCROLL);
+			gd = new GridData();
+			gd.horizontalAlignment = GridData.FILL;
+			gd.verticalAlignment = GridData.BEGINNING;
+			gd.grabExcessHorizontalSpace = true;
+			gd.horizontalSpan = 2;
+			gd.widthHint = 190;
+			gd.heightHint = 50;
+			urlText.setLayoutData(gd);
+
+            // add optional properties tab
+            TabItem optionalPropsTab = new TabItem( tabComposite, SWT.None );
+            optionalPropsTab.setText( ConnectivityUIPlugin.getDefault()
+                    .getResourceString( "CommonDriverUIContributor.optionaltab" ) ); //$NON-NLS-1$
+            optionalPropsComposite = createOptionalPropertiesPane( tabComposite, SWT.NULL, isReadOnly );
+            optionalPropsTab.setControl( optionalPropsComposite );
+
+            parentComposite.setContent(tabComposite);
+            parentComposite.setMinSize(tabComposite.computeSize(SWT.DEFAULT,
+                    SWT.DEFAULT));
+
+			initialize();
+		}
+		return parentComposite;
+	}
+
+	protected void enableAuthenticationControls(boolean enabled) {
+		usernameLabel.setEnabled(enabled);
+		usernameText.setEnabled(enabled);
+		passwordLabel.setEnabled(enabled);
+		passwordText.setEnabled(enabled);
+		savePasswordButton.setEnabled(enabled);
+	}
+	
+	public List getSummaryData() {
+		List summaryData = new ArrayList();
+
+		summaryData.add(new String[] { CUI_NEWCW_DATABASE_SUMMARY_DATA_TEXT_,
+				this.databaseText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_HOST_SUMMARY_DATA_TEXT_,
+				this.hostText.getText().trim() });
+		summaryData.add(new String[] { CUI_NEWCW_PORT_SUMMARY_DATA_TEXT_,
+				this.portText.getText().trim() });
+		summaryData
+		.add(new String[] {
+				CUI_NEWCW_USE_INTEGRATED_AUTHENICATION_SUMMARY_DATA_TEXT_,
+				integratedAuthenticationButton.getSelection() ? CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_
+						: CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ });
+		if (!integratedAuthenticationButton.getSelection()) {
+		summaryData.add(new String[] { CUI_NEWCW_USERNAME_SUMMARY_DATA_TEXT_,
+				this.usernameText.getText().trim() });
+		summaryData
+				.add(new String[] {
+						CUI_NEWCW_SAVE_PASSWORD_SUMMARY_DATA_TEXT_,
+						savePasswordButton.getSelection() ? CUI_NEWCW_TRUE_SUMMARY_DATA_TEXT_
+								: CUI_NEWCW_FALSE_SUMMARY_DATA_TEXT_ });
+		}
+		summaryData.add(new String[] { CUI_NEWCW_URL_SUMMARY_DATA_TEXT_,
+				this.urlText.getText().trim() });
+		return summaryData;
+	}
+
+	public void loadProperties() {
+		removeListeners();
+		SqlServerJDBCURL url = getURLHandle( this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID));
+		hostText.setText(url.getNode());
+		portText.setText(url.getPort());
+		databaseText.setText(url.getDatabaseName());
+
+	    if (url.useClientAuthentication()) {
+			integratedAuthenticationButton.setSelection(true);
+			enableAuthenticationControls(false);
+		}
+		String username = this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID);
+		if (username != null) {
+			usernameText.setText(username);
+		}
+		String password = this.properties
+				.getProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID);
+		if (password != null) {
+			passwordText.setText(password);
+		}
+		String savePassword = this.properties
+				.getProperty(IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID);
+		if ((savePassword != null)
+				&& Boolean.valueOf(savePassword) == Boolean.TRUE) {
+			savePasswordButton.setSelection(true);
+		}
+        
+        // load optional connection properties
+        optionalPropsComposite.loadProperties();
+
+        updateURL();
+		addListeners();
+		setConnectionInformation();
+	}
+
+	public void setDialogPage(DialogPage parentPage) {
+		this.parentPage = parentPage;
+	}
+
+	public void setDriverUIContributorInformation(
+			IDriverUIContributorInformation contributorInformation) {
+		this.contributorInformation = contributorInformation;
+		this.properties = contributorInformation.getProperties();
+        optionalPropsComposite.setDriverUIContributorInformation( contributorInformation );
+	}
+
+	public void handleEvent(Event event) {
+		if (isReadOnly){
+			if (event.widget == savePasswordButton){
+				savePasswordButton.setSelection(!savePasswordButton.getSelection());
+			}
+		} else {
+			updateURL();
+			setConnectionInformation();
+		}
+	}
+
+	private void setConnectionInformation() {
+		properties.setProperty(
+				IJDBCDriverDefinitionConstants.DATABASE_NAME_PROP_ID,
+				this.databaseText.getText().trim());
+		properties.setProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID,
+				this.passwordText.getText());
+		properties.setProperty(
+				IJDBCConnectionProfileConstants.SAVE_PASSWORD_PROP_ID, String
+						.valueOf(savePasswordButton.getSelection()));
+		properties.setProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID,
+				this.usernameText.getText());
+		properties.setProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID,
+				this.urlText.getText().trim());        
+        optionalPropsComposite.setConnectionInformation();
+		this.contributorInformation.setProperties(properties);
+	}
+
+	private void initialize() {
+		updateURL();
+		addListeners();
+	}
+
+	private void addListeners() {
+		databaseText.addListener(SWT.Modify, this);
+		hostText.addListener(SWT.Modify, this);
+		portText.addListener(SWT.Modify, this);
+		integratedAuthenticationButton.addListener(SWT.Selection, this);
+		usernameText.addListener(SWT.Modify, this);
+		passwordText.addListener(SWT.Modify, this);
+		savePasswordButton.addListener(SWT.Selection, this);
+	}
+
+	private void removeListeners() {
+		databaseText.removeListener(SWT.Modify, this);
+		hostText.removeListener(SWT.Modify, this);
+		portText.removeListener(SWT.Modify, this);
+		integratedAuthenticationButton.removeListener(SWT.Selection, this);
+		usernameText.removeListener(SWT.Modify, this);
+		passwordText.removeListener(SWT.Modify, this);
+		savePasswordButton.removeListener(SWT.Selection, this);
+	}
+
+	protected void updateURL() {
+        String url = getURLHandle(hostText.getText().trim(), 
+                        portText.getText().trim(), 
+                        databaseText.getText().trim(),
+                        integratedAuthenticationButton.getSelection())
+                      .formatURL();
+		urlText.setText(url);
+	}
+    
+    /**
+     * Creates an OptionalPropertiesPane.  
+     * Extenders may override to return an extended composite.
+     */
+    protected OptionalPropertiesPane createOptionalPropertiesPane( Composite parent, int style, 
+            boolean useReadOnlyControls )
+    {
+        return new OptionalPropertiesPane( parent, style, useReadOnlyControls );
+    }
+
+    /**
+     * Returns a SQL Server JDBC URL handle that parses the specified JDBC URL.
+     * Extenders may override to return an extended URL handle for its own JDBC URL format.
+     * @param url   JDBC connection URL 
+     * @return  an URL handle that provides accessors for each of the attributes found in the specified URL. 
+     */
+    protected SqlServerJDBCURL getURLHandle( String url ) {
+        return new SqlServerJDBCURL( url );
+    }
+    
+    /**
+     * Returns a SQL Server JDBC URL handle for the specified URL attributes.
+     * @param node  TCP/IP address or TCP/IP host name of the server to which to connect
+     * @param port  the number of the TCP/IP port.
+     * @param databaseName  the name of the database to which to connect
+     * @param useClientAuthentication indicates whether to rely on the client to authenticate the user,
+     *          i.e. use the user ID of the user logged onto the system 
+     *          on which the driver is running when establishing a connection.
+     * @return  an URL handle that can format a SQL Server JDBC connection URL based on the specified attributes
+     */
+    protected SqlServerJDBCURL getURLHandle(String node, String port, String databaseName,
+                                    boolean useClientAuthentication) {
+        return new SqlServerJDBCURL( node, port, databaseName, useClientAuthentication );
+    }
+
+    /**
+     * A SQL Server 2005 JDBC URL handle that formats and parses a driver-specific JDBC connection URL.
+     */
+    protected class SqlServerJDBCURL {
+	    protected String subprotocol = ""; //$NON-NLS-1$
+
+		protected String node = ""; //$NON-NLS-1$
+
+		protected String port = ""; //$NON-NLS-1$
+
+		protected String databaseName = ""; //$NON-NLS-1$
+
+        protected String urlProperties = ""; //$NON-NLS-1$
+
+        protected boolean useClientAuthentication = false;
+
+		/**
+		 * @param url
+		 */
+		public SqlServerJDBCURL(String url) {
+			parseURL(url);
+		}
+
+        public SqlServerJDBCURL(String node, String port, String databaseName, boolean useClientAuthentication ) {
+            this.node = node;
+            this.port = port;
+            this.databaseName = databaseName;
+            this.useClientAuthentication = useClientAuthentication;
+        }
+
+		/**
+		 * @return Returns the databaseName.
+		 */
+		public String getDatabaseName() {
+			return databaseName;
+		}
+
+		/**
+		 * @return Returns the node.
+		 */
+		public String getNode() {
+			return node;
+		}
+
+		/**
+		 * @return Returns the subprotocol.
+		 */
+		public String getSubprotocol() {
+			return subprotocol;
+		}
+
+        /**
+         * @return Returns the port.
+         */
+        public String getPort() {
+            return port;
+        }
+
+        /**
+         * @return Returns the properties.
+         */
+        public String getProperties() {
+            return urlProperties;
+        }
+
+        /**
+         * @return  Returns whether to use client authentication to connect.
+         */
+        public boolean useClientAuthentication() {
+            return useClientAuthentication;
+        }
+        
+        /**
+         * Formats the driver URL based on values specified in 
+         * constructor {@link SqlServerJDBCURL(String, String, String, boolean)}.
+         */
+        protected String formatURL() {
+            String url = "jdbc:sqlserver://" + getNode(); //$NON-NLS-1$
+            if ( getPort().length() > 0 )
+                url += ":" + getPort(); //$NON-NLS-1$
+            url += ";databaseName=" + getDatabaseName(); //$NON-NLS-1$
+            if ( useClientAuthentication() )
+                url += ";" + INTEGRATED_AUTHETICATION_TEXT; //$NON-NLS-1$
+            return url;
+        }        
+
+        /**
+         * Parses the specified URL string into URL attributes that can be accessed 
+         * by the corresponding getter methods.
+         */
+        protected void parseURL(String url) {
+			try {
+				String remainingURL = url.substring(url.indexOf(':') + 1);
+				this.subprotocol = remainingURL.substring(0, remainingURL
+						.indexOf(':'));
+				remainingURL = remainingURL
+						.substring(remainingURL.indexOf(':') + 3);
+				this.node = remainingURL
+						.substring(0, remainingURL.indexOf(';'));
+				if (this.node.indexOf(':') > -1) {
+					this.port = this.node.substring(this.node.indexOf(':') + 1);
+					this.node = this.node.substring(0, this.node.indexOf(':'));
+				}
+				remainingURL = remainingURL
+						.substring(remainingURL.indexOf(';') + 1);
+				if (remainingURL.indexOf(';') > -1) {
+					this.databaseName = remainingURL.substring(0, remainingURL
+							.indexOf(';'));
+					this.databaseName = this.databaseName.substring(new String(
+							"databaseName=").length()); //$NON-NLS-1$
+					remainingURL = remainingURL.substring(remainingURL
+							.indexOf(';') + 1);
+					this.urlProperties = remainingURL;
+				} else {
+					this.databaseName = remainingURL.substring(new String(
+							"databaseName=").length()); //$NON-NLS-1$
+				}
+				String[] props = url.split(";"); //$NON-NLS-1$
+				for(int i = 0; i < props.length; i++) {
+					if(props[i].equalsIgnoreCase("integratedSecurity=true")) //$NON-NLS-1$
+						useClientAuthentication = true;
+				}
+			} catch (Exception e) {
+			}
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/.classpath b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/.gitignore b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/.project b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/.project
new file mode 100644
index 0000000..5748a27
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.msft.sqlserver</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..07aa75f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name:  %pluginName
+Bundle-SymbolicName: org.eclipse.datatools.enablement.msft.sqlserver;singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.datatools.modelbase.sql,
+ org.eclipse.datatools.connectivity.sqm.core,
+ org.eclipse.datatools.connectivity
+Import-Package: com.ibm.icu.text;version="3.6.1",
+ com.ibm.icu.util;version="3.6.1"
+Export-Package: org.eclipse.datatools.enablement.msft.internal.sqlserver.connection,
+ org.eclipse.datatools.enablement.msft.internal.sqlserver.driver,
+ org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/about.html b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/build.properties b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/build.properties
new file mode 100644
index 0000000..fdbed35
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/build.properties
@@ -0,0 +1,15 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               about.html,\
+               plugin.properties,\
+               plugin.xml,\
+               icons/
+src.dir	= src/
+plugin.version =	1.0.1.200801211
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/icons/jdbc_16.gif b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/icons/jdbc_16.gif
new file mode 100644
index 0000000..ef7809c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/icons/jdbc_16.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/plugin.properties b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/plugin.properties
new file mode 100644
index 0000000..1222c76
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/plugin.properties
@@ -0,0 +1,41 @@
+###############################################################################
+# Copyright (c) 2006, 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName=Eclipse Data Tools Platform Microsoft SQL Server Plug-in
+providerName=Eclipse Data Tools Platform
+
+driverClass = Driver Class
+driverVendor = Vendor
+driverVersion = Version
+driverDBName = Database Name
+driverConnectionURL = Connection URL
+driverUID = User ID
+driverPWD = Password
+
+SQLSERVER_CATEGORY_NAME = SQL Server
+2014_VERSION_CATEGORY_NAME = 2014
+2012_VERSION_CATEGORY_NAME = 2012
+2008_VERSION_CATEGORY_NAME = 2008
+2005_VERSION_CATEGORY_NAME = 2005
+2000_VERSION_CATEGORY_NAME = 2000
+
+org.eclipse.datatools.enablement.msft.sqlserver.2014.driverTemplate = Microsoft SQL Server 2014 JDBC Driver
+org.eclipse.datatools.enablement.msft.sqlserver.2012.driverTemplate = Microsoft SQL Server 2012 JDBC Driver
+org.eclipse.datatools.enablement.msft.sqlserver.2008.driverTemplate = Microsoft SQL Server 2008 JDBC Driver
+org.eclipse.datatools.enablement.msft.sqlserver.2005.driverTemplate = Microsoft SQL Server 2005 JDBC Driver
+org.eclipse.datatools.enablement.msft.sqlserver.2000.driverTemplate = Microsoft SQL Server 2000 Driver for JDBC
+org.eclipse.datatools.enablement.msft.sqlserver.2014.other.driverTemplate = Other Driver
+org.eclipse.datatools.enablement.msft.sqlserver.2012.other.driverTemplate = Other Driver
+org.eclipse.datatools.enablement.msft.sqlserver.2008.other.driverTemplate = Other Driver
+org.eclipse.datatools.enablement.msft.sqlserver.2005.other.driverTemplate = Other Driver
+org.eclipse.datatools.enablement.msft.sqlserver.2000.other.driverTemplate = Other Driver
+
+jdbc.connection.name = JDBC Connection
+profile.sqlserver.title = SQL Server
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/plugin.xml b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/plugin.xml
new file mode 100644
index 0000000..8873ff1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/plugin.xml
@@ -0,0 +1,800 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+	<extension
+         point="org.eclipse.datatools.connectivity.sqm.core.databaseRecognition">
+      <recognizer
+            class="org.eclipse.datatools.enablement.msft.internal.sqlserver.connection.SQLServerDatabaseRecognizer">
+      </recognizer>
+	</extension>
+	<extension point="org.eclipse.datatools.connectivity.connectionProfile">
+		<connectionProfile category="org.eclipse.datatools.connectivity.db.category"
+			configurationType="org.eclipse.datatools.connectivity.db.generic.configurationType"
+			icon="icons/jdbc_16.gif"
+			id="org.eclipse.datatools.enablement.msft.sqlserver.connectionProfile"
+			name="%profile.sqlserver.title"
+			pingFactory="org.eclipse.datatools.enablement.msft.internal.sqlserver.connection.JDBCSQLServerConnectionFactory"
+			propertiesPersistenceHook="org.eclipse.datatools.enablement.msft.internal.sqlserver.connection.SQLServerDBPropertiesPersistenceHook" />
+		<connectionFactory
+			class="org.eclipse.datatools.enablement.msft.internal.sqlserver.connection.JDBCSQLServerConnectionFactory"
+			id="java.sql.Connection" 
+			name="%jdbc.connection.name"
+			profile="org.eclipse.datatools.enablement.msft.sqlserver.connectionProfile" />
+		<configurationType
+			id="org.eclipse.datatools.enablement.msft.sqlserver.configurationType1"
+			name="SQL Server">
+		</configurationType>
+	</extension>
+	<extension point="org.eclipse.datatools.connectivity.driverExtension">
+		<category parentCategory="org.eclipse.datatools.connectivity.db.driverCategory"
+			id="org.eclipse.datatools.enablement.msft.sqlserver.driverCategory"
+			name="%SQLSERVER_CATEGORY_NAME" />
+		<category
+			parentCategory="org.eclipse.datatools.enablement.msft.sqlserver.driverCategory"
+			id="org.eclipse.datatools.enablement.msft.sqlserver.2014.driverCategory"
+			name="%2014_VERSION_CATEGORY_NAME" />
+		<category
+			parentCategory="org.eclipse.datatools.enablement.msft.sqlserver.driverCategory"
+			id="org.eclipse.datatools.enablement.msft.sqlserver.2012.driverCategory"
+			name="%2012_VERSION_CATEGORY_NAME" />
+		<category
+			parentCategory="org.eclipse.datatools.enablement.msft.sqlserver.driverCategory"
+			id="org.eclipse.datatools.enablement.msft.sqlserver.2008.driverCategory"
+			name="%2008_VERSION_CATEGORY_NAME" />
+		<category
+			parentCategory="org.eclipse.datatools.enablement.msft.sqlserver.driverCategory"
+			id="org.eclipse.datatools.enablement.msft.sqlserver.2005.driverCategory"
+			name="%2005_VERSION_CATEGORY_NAME" />
+		<category
+			parentCategory="org.eclipse.datatools.enablement.msft.sqlserver.driverCategory"
+			id="org.eclipse.datatools.enablement.msft.sqlserver.2000.driverCategory"
+			name="%2000_VERSION_CATEGORY_NAME" />
+		<driverTemplate createDefault="false" emptyJarListIsOK="false"
+			id="org.eclipse.datatools.enablement.msft.sqlserver.2014.driverTemplate"
+			jarList="sqljdbc.jar"
+			name="%org.eclipse.datatools.enablement.msft.sqlserver.2014.driverTemplate"
+			parentCategory="org.eclipse.datatools.enablement.msft.sqlserver.2014.driverCategory"
+			valuesProvider="org.eclipse.datatools.enablement.msft.internal.sqlserver.driver.SQLServer2014DriverValuesProvider">
+			<properties>
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.driverClass" name="%driverClass"
+					value="com.microsoft.sqlserver.jdbc.SQLServerDriver" required="true"
+					visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.vendor" name="%driverVendor"
+					value="SQL Server" required="true" visible="false" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.version" name="%driverVersion"
+					value="2014" required="true" visible="false" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.databaseName" name="%driverDBName"
+					value="pubs" required="true" visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.URL" name="%driverConnectionURL"
+					value="jdbc:sqlserver://localhost:1433;databaseName=pubs" required="true"
+					visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.username" name="%driverUID"
+					value="" required="false" visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.password" name="%driverPWD"
+					required="false" visible="true" />
+			</properties>
+		</driverTemplate>
+		<driverTemplate createDefault="false" emptyJarListIsOK="false"
+			id="org.eclipse.datatools.enablement.msft.sqlserver.2012.driverTemplate"
+			jarList="sqljdbc.jar"
+			name="%org.eclipse.datatools.enablement.msft.sqlserver.2012.driverTemplate"
+			parentCategory="org.eclipse.datatools.enablement.msft.sqlserver.2012.driverCategory"
+			valuesProvider="org.eclipse.datatools.enablement.msft.internal.sqlserver.driver.SQLServer2012DriverValuesProvider">
+			<properties>
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.driverClass" name="%driverClass"
+					value="com.microsoft.sqlserver.jdbc.SQLServerDriver" required="true"
+					visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.vendor" name="%driverVendor"
+					value="SQL Server" required="true" visible="false" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.version" name="%driverVersion"
+					value="2012" required="true" visible="false" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.databaseName" name="%driverDBName"
+					value="pubs" required="true" visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.URL" name="%driverConnectionURL"
+					value="jdbc:sqlserver://localhost:1433;databaseName=pubs" required="true"
+					visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.username" name="%driverUID"
+					value="" required="false" visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.password" name="%driverPWD"
+					required="false" visible="true" />
+			</properties>
+		</driverTemplate>
+		<driverTemplate createDefault="false" emptyJarListIsOK="false"
+			id="org.eclipse.datatools.enablement.msft.sqlserver.2008.driverTemplate"
+			jarList="sqljdbc.jar"
+			name="%org.eclipse.datatools.enablement.msft.sqlserver.2008.driverTemplate"
+			parentCategory="org.eclipse.datatools.enablement.msft.sqlserver.2008.driverCategory"
+			valuesProvider="org.eclipse.datatools.enablement.msft.internal.sqlserver.driver.SQLServer2008DriverValuesProvider">
+			<properties>
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.driverClass" name="%driverClass"
+					value="com.microsoft.sqlserver.jdbc.SQLServerDriver" required="true"
+					visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.vendor" name="%driverVendor"
+					value="SQL Server" required="true" visible="false" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.version" name="%driverVersion"
+					value="2008" required="true" visible="false" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.databaseName" name="%driverDBName"
+					value="pubs" required="true" visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.URL" name="%driverConnectionURL"
+					value="jdbc:sqlserver://localhost:1433;databaseName=pubs" required="true"
+					visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.username" name="%driverUID"
+					value="" required="false" visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.password" name="%driverPWD"
+					required="false" visible="true" />
+			</properties>
+		</driverTemplate>
+		<driverTemplate createDefault="false" emptyJarListIsOK="false"
+			id="org.eclipse.datatools.enablement.msft.sqlserver.2005.driverTemplate"
+			jarList="sqljdbc.jar"
+			name="%org.eclipse.datatools.enablement.msft.sqlserver.2005.driverTemplate"
+			parentCategory="org.eclipse.datatools.enablement.msft.sqlserver.2005.driverCategory"
+			valuesProvider="org.eclipse.datatools.enablement.msft.internal.sqlserver.driver.SQLServer2005DriverValuesProvider">
+			<properties>
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.driverClass" name="%driverClass"
+					value="com.microsoft.sqlserver.jdbc.SQLServerDriver" required="true"
+					visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.vendor" name="%driverVendor"
+					value="SQL Server" required="true" visible="false" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.version" name="%driverVersion"
+					value="2005" required="true" visible="false" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.databaseName" name="%driverDBName"
+					value="pubs" required="true" visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.URL" name="%driverConnectionURL"
+					value="jdbc:sqlserver://localhost:1433;databaseName=pubs" required="true"
+					visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.username" name="%driverUID"
+					value="" required="false" visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.password" name="%driverPWD"
+					required="false" visible="true" />
+			</properties>
+		</driverTemplate>
+		<driverTemplate createDefault="false" emptyJarListIsOK="false"
+			id="org.eclipse.datatools.enablement.msft.sqlserver.2000.driverTemplate"
+			jarList="msbase.jar;mssqlserver.jar;msutil.jar"
+			name="%org.eclipse.datatools.enablement.msft.sqlserver.2000.driverTemplate"
+			parentCategory="org.eclipse.datatools.enablement.msft.sqlserver.2000.driverCategory"
+			valuesProvider="org.eclipse.datatools.enablement.msft.internal.sqlserver.driver.SQLServer2000DriverValuesProvider">
+			<properties>
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.driverClass" name="%driverClass"
+					value="com.microsoft.jdbc.sqlserver.SQLServerDriver" required="true"
+					visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.vendor" name="%driverVendor"
+					value="SQL Server" required="true" visible="false" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.version" name="%driverVersion"
+					value="2000" required="true" visible="false" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.databaseName" name="%driverDBName"
+					value="pubs" required="true" visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.URL" name="%driverConnectionURL"
+					value="jdbc:microsoft:sqlserver://localhost:1433;databaseName=pubs"
+					required="true" visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.username" name="%driverUID"
+					value="" required="false" visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.password" name="%driverPWD"
+					required="false" visible="true" />
+			</properties>
+		</driverTemplate>
+		<!--<driverTemplate createDefault="false" emptyJarListIsOK="false"
+			id="org.eclipse.datatools.enablement.msft.sqlserver.2008.other.driverTemplate"
+			jarList=""
+			name="%org.eclipse.datatools.enablement.msft.sqlserver.2008.other.driverTemplate"
+			parentCategory="org.eclipse.datatools.enablement.msft.sqlserver.2008.driverCategory"
+			valuesProvider="org.eclipse.datatools.enablement.msft.internal.sqlserver.driver.SQLServer2008DriverValuesProvider">
+			<properties>
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.driverClass" name="%driverClass"
+					value="" required="true" visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.vendor" name="%driverVendor"
+					value="SQL Server" required="true" visible="false" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.version" name="%driverVersion"
+					value="2008" required="true" visible="false" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.databaseName" name="%driverDBName"
+					value="" required="true" visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.URL" name="%driverConnectionURL"
+					value="" required="true" visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.username" name="%driverUID"
+					value="" required="false" visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.password" name="%driverPWD"
+					required="false" visible="true" />
+			</properties>
+		</driverTemplate>
+		<driverTemplate createDefault="false" emptyJarListIsOK="false"
+			id="org.eclipse.datatools.enablement.msft.sqlserver.2005.other.driverTemplate"
+			jarList=""
+			name="%org.eclipse.datatools.enablement.msft.sqlserver.2005.other.driverTemplate"
+			parentCategory="org.eclipse.datatools.enablement.msft.sqlserver.2005.driverCategory"
+			valuesProvider="org.eclipse.datatools.enablement.msft.internal.sqlserver.driver.SQLServer2005DriverValuesProvider">
+			<properties>
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.driverClass" name="%driverClass"
+					value="" required="true" visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.vendor" name="%driverVendor"
+					value="SQL Server" required="true" visible="false" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.version" name="%driverVersion"
+					value="2005" required="true" visible="false" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.databaseName" name="%driverDBName"
+					value="" required="true" visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.URL" name="%driverConnectionURL"
+					value="" required="true" visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.username" name="%driverUID"
+					value="" required="false" visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.password" name="%driverPWD"
+					required="false" visible="true" />
+			</properties>
+		</driverTemplate>
+		<driverTemplate createDefault="false" emptyJarListIsOK="false"
+			id="org.eclipse.datatools.enablement.msft.sqlserver.2000.other.driverTemplate"
+			jarList=""
+			name="%org.eclipse.datatools.enablement.msft.sqlserver.2000.other.driverTemplate"
+			parentCategory="org.eclipse.datatools.enablement.msft.sqlserver.2000.driverCategory"
+			valuesProvider="org.eclipse.datatools.enablement.msft.internal.sqlserver.driver.SQLServer2000DriverValuesProvider">
+			<properties>
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.driverClass" name="%driverClass"
+					value="" required="true" visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.vendor" name="%driverVendor"
+					value="SQL Server" required="true" visible="false" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.version" name="%driverVersion"
+					value="2000" required="true" visible="false" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.databaseName" name="%driverDBName"
+					value="" required="true" visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.URL" name="%driverConnectionURL"
+					value="" required="true" visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.username" name="%driverUID"
+					value="" required="false" visible="true" />
+				<property generated="false"
+					id="org.eclipse.datatools.connectivity.db.password" name="%driverPWD"
+					required="false" visible="true" />
+			</properties>
+		</driverTemplate>-->
+	</extension>
+	<extension point="org.eclipse.datatools.connectivity.sqm.core.catalog">
+		<overrideLoader
+			provider="org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005SchemaLoader"
+			eclass="org.eclipse.datatools.modelbase.sql.schema.Schema" 
+			product="SQL Server"
+			version="2014" />
+		<overrideLoader
+			provider="org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005SchemaLoader"
+			eclass="org.eclipse.datatools.modelbase.sql.schema.Schema" 
+			product="SQL Server"
+			version="2012" />
+		<overrideLoader
+			provider="org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005SchemaLoader"
+			eclass="org.eclipse.datatools.modelbase.sql.schema.Schema" 
+			product="SQL Server"
+			version="2008" />
+		<overrideLoader
+			provider="org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005SchemaLoader"
+			eclass="org.eclipse.datatools.modelbase.sql.schema.Schema" 
+			product="SQL Server"
+			version="2005" />
+		<overrideLoader
+			provider="org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005SchemaLoader"
+			eclass="org.eclipse.datatools.modelbase.sql.schema.Schema" 
+			product="SQL Server"
+			version="2000" />
+		
+		<overrideLoader
+			provider="org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005ColumnLoader"
+			eclass="org.eclipse.datatools.modelbase.sql.tables.Column" 
+			product="SQL Server"
+			version="2014" />
+		<overrideLoader
+			provider="org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005ColumnLoader"
+			eclass="org.eclipse.datatools.modelbase.sql.tables.Column" 
+			product="SQL Server"
+			version="2012" />	
+		<overrideLoader
+			provider="org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005ColumnLoader"
+			eclass="org.eclipse.datatools.modelbase.sql.tables.Column" 
+			product="SQL Server"
+			version="2008" />
+		<overrideLoader
+			provider="org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005ColumnLoader"
+			eclass="org.eclipse.datatools.modelbase.sql.tables.Column" 
+			product="SQL Server"
+			version="2005" />
+		<overrideLoader
+			provider="org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005ColumnLoader"
+			eclass="org.eclipse.datatools.modelbase.sql.tables.Column" 
+			product="SQL Server"
+			version="2000" />
+		<overrideLoader 
+			provider="org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005RoutineLoader"
+			eclass="org.eclipse.datatools.modelbase.sql.routines.Routine"
+			product="SQL Server"
+			version="2014" />
+		<overrideLoader 
+			provider="org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005RoutineLoader"
+			eclass="org.eclipse.datatools.modelbase.sql.routines.Routine"
+			product="SQL Server"
+			version="2012" />	
+		<overrideLoader 
+			provider="org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005RoutineLoader"
+			eclass="org.eclipse.datatools.modelbase.sql.routines.Routine"
+			product="SQL Server"
+			version="2008" />
+		<overrideLoader 
+			provider="org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005RoutineLoader"
+			eclass="org.eclipse.datatools.modelbase.sql.routines.Routine"
+			product="SQL Server"
+			version="2005" />
+		<overrideLoader 
+			provider="org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005RoutineLoader"
+			eclass="org.eclipse.datatools.modelbase.sql.routines.Routine"
+			product="SQL Server"
+			version="2000" />
+		<overrideLoader 
+			provider="org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005TableLoader"
+			eclass="org.eclipse.datatools.modelbase.sql.tables.Table"
+			product="SQL Server"
+			version="2014" />
+		<overrideLoader 
+			provider="org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005TableLoader"
+			eclass="org.eclipse.datatools.modelbase.sql.tables.Table"
+			product="SQL Server"
+			version="2012" />	
+		<overrideLoader 
+			provider="org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005TableLoader"
+			eclass="org.eclipse.datatools.modelbase.sql.tables.Table"
+			product="SQL Server"
+			version="2008" />
+		<overrideLoader 
+			provider="org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005TableLoader"
+			eclass="org.eclipse.datatools.modelbase.sql.tables.Table"
+			product="SQL Server"
+			version="2005" />
+		<overrideLoader 
+			provider="org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2000TableLoader"
+			eclass="org.eclipse.datatools.modelbase.sql.tables.Table"
+			product="SQL Server"
+			version="2000" />
+		
+		<overrideLoader 
+			provider="org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005TableIndexLoader"
+			eclass="org.eclipse.datatools.modelbase.sql.constraints.Index"
+			product="SQL Server"
+			version="2014" />
+		<overrideLoader 
+			provider="org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005TableIndexLoader"
+			eclass="org.eclipse.datatools.modelbase.sql.constraints.Index"
+			product="SQL Server"
+			version="2012" />	
+		<overrideLoader 
+			provider="org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005TableIndexLoader"
+			eclass="org.eclipse.datatools.modelbase.sql.constraints.Index"
+			product="SQL Server"
+			version="2008" />
+		<overrideLoader 
+			provider="org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005TableIndexLoader"
+			eclass="org.eclipse.datatools.modelbase.sql.constraints.Index"
+			product="SQL Server"
+			version="2005" />
+		<!--<overrideLoader 
+			provider="org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005TableIndexLoader"
+			eclass="org.eclipse.datatools.modelbase.sql.constraints.Index"
+			product="SQL Server"
+			version="2000" />-->
+<!--  <overrideLoader 
+			provider="org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005UDTypeLoader"
+			eclass="org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType"
+			product="SQL Server"
+			version="2008" />
+		<overrideLoader 
+			provider="org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005UDTypeLoader"
+			eclass="org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType"
+			product="SQL Server"
+			version="2005" />
+		<overrideLoader 
+			provider="org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005UDTypeLoader"
+			eclass="org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType"
+			product="SQL Server"
+			version="2000" />
+-->  
+	</extension>
+	<extension point="org.eclipse.datatools.connectivity.sqm.core.ddlGeneration">
+		<generator
+			class="org.eclipse.datatools.enablement.msft.internal.sqlserver.ddl.SqlServerDdlGenerator"
+			product="SQL Server"
+			version="2005">
+		</generator>
+			<generator
+			class="org.eclipse.datatools.enablement.msft.internal.sqlserver.ddl.SqlServer2000DdlGenerator"
+			product="SQL Server"
+			version="2000">
+		</generator>
+			<generator
+			class="org.eclipse.datatools.enablement.msft.internal.sqlserver.ddl.SqlServerDdlGenerator"
+			product="SQL Server"
+			version="2008">
+		</generator>
+		<generator
+			class="org.eclipse.datatools.enablement.msft.internal.sqlserver.ddl.SqlServerDdlGenerator"
+			product="SQL Server"
+			version="2012">
+		</generator>
+		<generator
+			class="org.eclipse.datatools.enablement.msft.internal.sqlserver.ddl.SqlServerDdlGenerator"
+			product="SQL Server"
+			version="2014">
+		</generator>
+	</extension>
+	
+	<extension
+         point="org.eclipse.datatools.connectivity.sqm.core.mappings">
+      <providerIDtoDriverCategoryID
+            driverCategoryID="org.eclipse.datatools.enablement.msft.sqlserver.driverCategory"
+            providerID="org.eclipse.datatools.enablement.msft.sqlserver.connectionProfile">
+      </providerIDtoDriverCategoryID>
+    </extension>
+ <extension
+       point="org.eclipse.datatools.connectivity.driverExtension">
+    <driverTemplate
+          createDefault="false"
+          emptyJarListIsOK="false"
+          id="org.eclipse.datatools.enablement.msft.sqlserver.2005.other.driverTemplate"
+          name="%org.eclipse.datatools.enablement.msft.sqlserver.2005.other.driverTemplate"
+          parentCategory="org.eclipse.datatools.enablement.msft.sqlserver.2005.driverCategory">
+       <properties>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.driverClass"
+                name="%driverClass"
+                required="true"
+                visible="true">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.vendor"
+                name="%driverVendor"
+                required="true"
+                value="SQL Server"
+                visible="false">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.version"
+                name="%driverVersion"
+                required="true"
+                value="2005"
+                visible="false">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.databaseName"
+                name="%driverDBName"
+                required="true"
+                visible="true">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.URL"
+                name="%driverConnectionURL"
+                required="true"
+                visible="true">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.username"
+                name="%driverUID"
+                required="false"
+                visible="true">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.password"
+                name="%driverPWD"
+                required="false"
+                visible="true">
+          </property>
+       </properties>
+    </driverTemplate>
+ </extension>
+ <extension
+       point="org.eclipse.datatools.connectivity.driverExtension">
+    <driverTemplate
+          createDefault="false"
+          emptyJarListIsOK="false"
+          id="org.eclipse.datatools.enablement.msft.sqlserver.2000.other.driverTemplate"
+          name="%org.eclipse.datatools.enablement.msft.sqlserver.2000.other.driverTemplate"
+          parentCategory="org.eclipse.datatools.enablement.msft.sqlserver.2000.driverCategory">
+       <properties>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.driverClass"
+                name="%driverClass"
+                required="true"
+                visible="true">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.vendor"
+                name="%driverVendor"
+                required="true"
+                value="SQL Server"
+                visible="false">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.version"
+                name="%driverVersion"
+                required="true"
+                value="2000"
+                visible="false">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.databaseName"
+                name="%driverDBName"
+                required="true"
+                visible="true">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.URL"
+                name="%driverConnectionURL"
+                required="true"
+                visible="true">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.username"
+                name="%driverUID"
+                required="false"
+                visible="true">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.password"
+                name="%driverPWD"
+                required="false"
+                visible="true">
+          </property>
+       </properties>
+    </driverTemplate>
+ </extension>
+ <extension
+       point="org.eclipse.datatools.connectivity.driverExtension">
+    <driverTemplate
+          createDefault="false"
+          emptyJarListIsOK="false"
+          id="org.eclipse.datatools.enablement.msft.sqlserver.2008.other.driverTemplate"
+          name="%org.eclipse.datatools.enablement.msft.sqlserver.2008.other.driverTemplate"
+          parentCategory="org.eclipse.datatools.enablement.msft.sqlserver.2008.driverCategory">
+       <properties>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.driverClass"
+                name="%driverClass"
+                required="true"
+                visible="true">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.vendor"
+                name="%driverVendor"
+                required="true"
+                value="SQL Server"
+                visible="false">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.version"
+                name="%driverVersion"
+                required="true"
+                value="2008"
+                visible="false">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.databaseName"
+                name="%driverDBName"
+                required="true"
+                visible="true">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.URL"
+                name="%driverConnectionURL"
+                required="true"
+                visible="true">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.username"
+                name="%driverUID"
+                required="false"
+                visible="true">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.password"
+                name="%driverPWD"
+                required="false"
+                visible="true">
+          </property>
+       </properties>
+    </driverTemplate>
+ </extension>
+ 
+ <extension
+       point="org.eclipse.datatools.connectivity.driverExtension">
+    <driverTemplate
+          createDefault="false"
+          emptyJarListIsOK="false"
+          id="org.eclipse.datatools.enablement.msft.sqlserver.2012.other.driverTemplate"
+          name="%org.eclipse.datatools.enablement.msft.sqlserver.2012.other.driverTemplate"
+          parentCategory="org.eclipse.datatools.enablement.msft.sqlserver.2012.driverCategory">
+       <properties>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.driverClass"
+                name="%driverClass"
+                required="true"
+                visible="true">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.vendor"
+                name="%driverVendor"
+                required="true"
+                value="SQL Server"
+                visible="false">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.version"
+                name="%driverVersion"
+                required="true"
+                value="2012"
+                visible="false">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.databaseName"
+                name="%driverDBName"
+                required="true"
+                visible="true">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.URL"
+                name="%driverConnectionURL"
+                required="true"
+                visible="true">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.username"
+                name="%driverUID"
+                required="false"
+                visible="true">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.password"
+                name="%driverPWD"
+                required="false"
+                visible="true">
+          </property>
+       </properties>
+    </driverTemplate>
+ </extension>
+ <extension
+       point="org.eclipse.datatools.connectivity.driverExtension">
+    <driverTemplate
+          createDefault="false"
+          emptyJarListIsOK="false"
+          id="org.eclipse.datatools.enablement.msft.sqlserver.2014.other.driverTemplate"
+          name="%org.eclipse.datatools.enablement.msft.sqlserver.2014.other.driverTemplate"
+          parentCategory="org.eclipse.datatools.enablement.msft.sqlserver.2014.driverCategory">
+       <properties>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.driverClass"
+                name="%driverClass"
+                required="true"
+                visible="true">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.vendor"
+                name="%driverVendor"
+                required="true"
+                value="SQL Server"
+                visible="false">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.version"
+                name="%driverVersion"
+                required="true"
+                value="2014"
+                visible="false">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.databaseName"
+                name="%driverDBName"
+                required="true"
+                visible="true">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.URL"
+                name="%driverConnectionURL"
+                required="true"
+                visible="true">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.username"
+                name="%driverUID"
+                required="false"
+                visible="true">
+          </property>
+          <property
+                generated="false"
+                id="org.eclipse.datatools.connectivity.db.password"
+                name="%driverPWD"
+                required="false"
+                visible="true">
+          </property>
+       </properties>
+    </driverTemplate>
+ </extension>
+	
+</plugin>
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/connection/ISQLServerConnectionProfileConstants.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/connection/ISQLServerConnectionProfileConstants.java
new file mode 100644
index 0000000..3c278c2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/connection/ISQLServerConnectionProfileConstants.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.connection;
+
+
+public interface ISQLServerConnectionProfileConstants {
+
+	public static final String SQLSERVER_CATEGORY_ID = "org.eclipse.datatools.enablement.msft.sqlserver.driverCategory"; //$NON-NLS-1$
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/connection/JDBCSQLServerConnectionFactory.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/connection/JDBCSQLServerConnectionFactory.java
new file mode 100644
index 0000000..cc88a7b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/connection/JDBCSQLServerConnectionFactory.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.connection;
+
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionFactory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+
+public class JDBCSQLServerConnectionFactory implements IConnectionFactory {
+
+	public JDBCSQLServerConnectionFactory() {
+		super();
+	}
+
+	public IConnection createConnection(IConnectionProfile profile) {
+		JDBCSQLServerJDBCConnection connection = new JDBCSQLServerJDBCConnection(profile,
+				getClass());
+		connection.open();
+		return connection;
+	}
+
+	public IConnection createConnection(IConnectionProfile profile, String uid,
+			String pwd) {
+		return createConnection(profile);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/connection/JDBCSQLServerJDBCConnection.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/connection/JDBCSQLServerJDBCConnection.java
new file mode 100644
index 0000000..f7e42bc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/connection/JDBCSQLServerJDBCConnection.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.connection;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.drivers.jdbc.JDBCConnection;
+
+public class JDBCSQLServerJDBCConnection extends JDBCConnection {
+
+	public JDBCSQLServerJDBCConnection(IConnectionProfile profile, Class factoryClass) {
+		super(profile, factoryClass);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/connection/SQLServerDBPropertiesPersistenceHook.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/connection/SQLServerDBPropertiesPersistenceHook.java
new file mode 100644
index 0000000..c42d04b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/connection/SQLServerDBPropertiesPersistenceHook.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.connection;
+
+import org.eclipse.datatools.connectivity.drivers.jdbc.JDBCPasswordPropertyPersistenceHook;
+
+public class SQLServerDBPropertiesPersistenceHook extends
+		JDBCPasswordPropertyPersistenceHook {
+
+	public String getConnectionPropertiesPageID() {
+		return "org.eclipse.datatools.enablement.msft.sqlserver.profileProperties"; //$NON-NLS-1$
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/connection/SQLServerDatabaseRecognizer.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/connection/SQLServerDatabaseRecognizer.java
new file mode 100644
index 0000000..dc19f8e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/connection/SQLServerDatabaseRecognizer.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2008 NexB Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Anton Safonov and Ahti Kitsik - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.connection;
+
+import java.sql.Connection;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.internal.core.definition.DatabaseDefinitionRegistryImpl;
+import org.eclipse.datatools.connectivity.sqm.internal.core.definition.IDatabaseRecognizer;
+
+public class SQLServerDatabaseRecognizer implements IDatabaseRecognizer {
+    public static final String PRODUCT = "SQL Server"; //$NON-NLS-1$
+	public static final String VERSION2000 = "2000"; //$NON-NLS-1$
+	public static final String VERSION2005 = "2005"; //$NON-NLS-1$
+	public static final String VERSION2008 = "2008"; //$NON-NLS-1$
+	public static final String VERSION2012 = "2012"; //$NON-NLS-1$
+	public static final String VERSION2014 = "2014"; //$NON-NLS-1$
+    
+    public DatabaseDefinition recognize(Connection connection) {
+        try {
+        	String product = connection.getMetaData().getDatabaseProductName();
+        	if (product.indexOf(PRODUCT) < 0)
+        		return null;
+        	
+        	String version = connection.getMetaData().getDatabaseProductVersion();
+            if (version == null) {
+            	return null;
+            }
+            Pattern p = Pattern.compile("[\\d]+[.][\\d]+[.][\\d]+"); //$NON-NLS-1$
+            Matcher m = p.matcher(version);
+            m.find();
+            version = m.group();
+            if(version.startsWith("8.")) { //$NON-NLS-1$
+                return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, VERSION2000);
+            }
+            else if(version.startsWith("9.")) { //$NON-NLS-1$
+                return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, VERSION2005);
+            }
+            else if(version.startsWith("10.")) { //$NON-NLS-1$
+                return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, VERSION2008);
+            }
+            else if(version.startsWith("11.")) { //$NON-NLS-1$
+                return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, VERSION2012);
+            }
+            else if(version.startsWith("12.")) { //$NON-NLS-1$
+                return DatabaseDefinitionRegistryImpl.INSTANCE.getDefinition(PRODUCT, VERSION2014);
+            }
+        }
+        catch (Exception e) {
+        }
+
+        return null;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/ddl/SqlServer2000DdlBuilder.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/ddl/SqlServer2000DdlBuilder.java
new file mode 100644
index 0000000..3f900a7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/ddl/SqlServer2000DdlBuilder.java
@@ -0,0 +1,372 @@
+/*******************************************************************************
+ * Copyright (c) 2008 NexB Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Anton Safonov and Ahti Kitsik - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.ddl;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.fe.GenericDdlBuilder;
+import org.eclipse.datatools.connectivity.sqm.internal.core.util.GenericCatalogMessages;
+import org.eclipse.datatools.modelbase.sql.constraints.CheckConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.ReferenceConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.TableConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.UniqueConstraint;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.routines.Parameter;
+import org.eclipse.datatools.modelbase.sql.routines.ParameterMode;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.datatools.modelbase.sql.schema.ReferentialActionType;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.TemporaryTable;
+
+import com.ibm.icu.text.MessageFormat;
+
+public class SqlServer2000DdlBuilder extends GenericDdlBuilder {
+
+	protected static final String ACTION = "ACTION"; //$NON-NLS-1$
+	protected static final String ANSI_NULLS = "ANSI_NULLS"; //$NON-NLS-1$
+	protected static final String ANSI_PADDING = "ANSI_PADDING"; //$NON-NLS-1$
+	protected static final String OFF = "OFF";//$NON-NLS-1$
+	protected static final String OUT = "OUT";//$NON-NLS-1$
+	protected static final String QUOTED_IDENTIFIER = "QUOTED_IDENTIFIER"; //$NON-NLS-1$
+
+	private Set elements;
+
+	public String createTable(BaseTable table, boolean quoteIdentifiers, boolean qualifyNames) {
+		StringBuffer statement = new StringBuffer();
+		boolean isTemp = table instanceof TemporaryTable;
+
+		statement.append(CREATE).append(SPACE);
+		if (isTemp) {
+			if (((TemporaryTable) table).isLocal()) {
+				statement.append(LOCAL).append(SPACE);
+			} else {
+				statement.append(GLOBAL).append(SPACE);
+			}
+			statement.append(TEMPORARY).append(SPACE);
+		}
+		statement.append(TABLE).append(SPACE).append(getName(table, quoteIdentifiers, qualifyNames)).append(SPACE);
+
+		statement.append(LEFT_PARENTHESIS).append(NEWLINE);
+
+		List items = new ArrayList();
+		items.addAll(table.getColumns());
+		items.addAll(getTableConstraints(table));
+		Iterator it = items.iterator();
+		boolean first = true;
+		while (it.hasNext()) {
+			Object item = it.next();
+			String clause;
+			if (item instanceof Column) {
+				clause = getColumnString((Column) item, quoteIdentifiers);
+			} else if (item instanceof CheckConstraint) {
+				clause = getCheckConstraintClause((CheckConstraint) item, quoteIdentifiers);
+			} else if (item instanceof UniqueConstraint) {
+				clause = getUniqueConstraintClause((UniqueConstraint) item, quoteIdentifiers);
+			} else {
+				continue;
+			}
+
+			if (!first) {
+				statement.append(COMMA);
+				statement.append(NEWLINE);
+			} else {
+				first = false;
+			}
+
+			statement.append(TAB).append(clause);
+		}
+
+		statement.append(NEWLINE).append(RIGHT_PARENTHESIS);
+
+		if (isTemp) {
+			statement.append(NEWLINE).append(TAB).append(ON_COMMIT).append(SPACE);
+			if (((TemporaryTable) table).isDeleteOnCommit()) {
+				statement.append(DELETE).append(SPACE);
+			} else {
+				statement.append(PRESERVE).append(SPACE);
+			}
+			statement.append(ROWS);
+		}
+
+		return statement.append(NEWLINE).toString();
+	}
+
+	private Set getTableConstraints(Table table) {
+		Set constraints = new HashSet(elements.size());
+		Iterator it = elements.iterator();
+		while (it.hasNext()) {
+			Object elem = it.next();
+			if (elem instanceof TableConstraint && ((TableConstraint) elem).getBaseTable() == table) {
+				constraints.add(elem);
+			}
+		}
+		return constraints;
+	}
+
+	public String createProcedure(Procedure procedure, boolean quoteIdentifiers, boolean qualifyNames) {
+		StringBuffer statement = new StringBuffer();
+
+		// CREATE PROCEDURE procedure_name
+		statement.append(CREATE).append(SPACE).append(PROCEDURE).append(SPACE).append(getName(procedure, quoteIdentifiers, qualifyNames)).append(SPACE);
+
+		// parameters
+		// SQL server doesn't like " as quotation identifier.
+		statement.append(getParameterListClause(procedure, false));
+
+		// begin characteristics
+		// language
+		if (procedure.getLanguage() != null && procedure.getLanguage().length() > 0) {
+			statement.append(TAB).append(LANGUAGE).append(SPACE).append(procedure.getLanguage()).append(NEWLINE);
+		}
+
+		// parameter style
+		if (procedure.getParameterStyle() != null && procedure.getParameterStyle().length() > 0) {
+			statement.append(TAB).append(PARAMETER_STYLE).append(SPACE).append(procedure.getParameterStyle()).append(NEWLINE);
+		}
+
+		// dynamic result sets
+		if (procedure.getMaxResultSets() > 0) {
+			statement.append(TAB).append(DYNAMIC_RESULT_SETS).append(SPACE).append(procedure.getMaxResultSets()).append(NEWLINE);
+		}
+		// end characteristics
+
+		// body
+		if (procedure.getSource() != null) {
+			String body = procedure.getSource().getBody();
+			if (body != null && body.length() > 0) {
+				statement.append(AS).append(NEWLINE).append(body).append(NEWLINE);
+			}
+		}
+
+		return statement.append(NEWLINE).toString();
+	}
+
+	protected String getParameterListClause(Routine routine, boolean quoteIdentifiers) {
+		StringBuffer statement = new StringBuffer();
+		statement.append(NEWLINE);
+		for (Iterator it = routine.getParameters().iterator(); it.hasNext();) {
+			Parameter param = (Parameter) it.next();
+			String name = param.getName();
+			if (name.equals("@RETURN_VALUE"))
+				continue;
+			ParameterMode mode = param.getMode();
+
+			// formatting
+			statement.append(TAB).append(TAB);
+
+			// name
+			if (name != null && name.length() > 0) {
+				statement.append(quoteIdentifiers ? getQuotedIdentifierString(param) : name).append(SPACE);
+			}
+
+			// type
+			statement.append(getDataTypeString(param, routine.getSchema()));
+
+			// mode (IN, INOUT, OUT)
+			if (mode.getName().toLowerCase().equals("inout") || mode.getName().toLowerCase().equals("out")) {
+				statement.append(SPACE).append(OUT).append(SPACE);
+			}
+
+			// TODO: default value
+
+			// locator
+			// TODO: anything?
+
+			if (it.hasNext()) {
+				// prepare for the next parameter
+				statement.append(COMMA);
+				statement.append(NEWLINE);
+			}
+		}
+		statement.append(NEWLINE);
+
+		return statement.toString();
+	}
+
+	public String dropIndex(Index index, boolean quoteIdentifiers, boolean qualifyNames) {
+		return DROP + SPACE + INDEX + SPACE + getName(index.getTable(), quoteIdentifiers, qualifyNames) + DOT + getName(index, quoteIdentifiers, false)
+				+ NEWLINE;
+	}
+
+	public String createIndex(Index index, boolean quoteIdentifiers, boolean qualifyNames) {
+		String statement = CREATE + SPACE;
+		if (index.isUnique()) {
+			statement += UNIQUE + SPACE;
+		}
+		statement += INDEX + SPACE + getName(index, quoteIdentifiers, false) + SPACE + ON + SPACE + getName(index.getTable(), quoteIdentifiers, qualifyNames)
+				+ SPACE + LEFT_PARENTHESIS + getIndexKeyColumns(index, quoteIdentifiers) + RIGHT_PARENTHESIS;
+
+		return statement + NEWLINE;
+	}
+
+	
+	public final String asOnOff(final boolean flag) {
+		return flag ? "ON" : "OFF";
+	}
+
+	public void setElements(Set elements) {
+		this.elements = elements;
+	}
+
+	public final void clear() {
+		this.elements = null;
+	}
+
+	protected String getAddUniqueConstraintClause(UniqueConstraint constraint, boolean quoteIdentifiers) {
+		return ADD + SPACE + getUniqueConstraintClause(constraint, quoteIdentifiers) + NEWLINE;
+	}
+
+	protected String getUniqueConstraintClause(UniqueConstraint constraint, boolean quoteIdentifiers) {
+		String text = CONSTRAINT + SPACE + getName(constraint, quoteIdentifiers) + SPACE + getUniqueConstraintType(constraint) + SPACE + LEFT_PARENTHESIS
+				+ this.getKeyColumns(constraint, quoteIdentifiers) + RIGHT_PARENTHESIS;
+
+		Index index = findIndexByConstraint(constraint);
+
+		// TODO is it for MS SQL Server?
+		if (constraint.isDeferrable()) {
+			text += SPACE + getDeferrableClause(constraint);
+		}
+		return text + NEWLINE;
+	}
+
+	public ReferenceConstraint findConstraintByIndex(Index index) {
+		Iterator it = this.elements.iterator();
+		while (it.hasNext()) {
+			Object elem = it.next();
+			if (elem instanceof ReferenceConstraint && ((ReferenceConstraint) elem).getName().equals(index.getName())) {
+				return (ReferenceConstraint) elem;
+			}
+		}
+		return null;
+	}
+
+	public Index findIndexByConstraint(ReferenceConstraint constraint) {
+		Iterator it = this.elements.iterator();
+		while (it.hasNext()) {
+			Object elem = it.next();
+			if (elem instanceof Index && ((Index) elem).getName().equals(constraint.getName())) {
+				return (Index) elem;
+			}
+		}
+		return null;
+	}
+
+	public String createUserDefinedType(UserDefinedType type, boolean quoteIdentifiers, boolean qualifyNames) {
+		return super.createUserDefinedType(type, quoteIdentifiers, qualifyNames);
+	}
+
+	public String addForeignKey(ForeignKey foreignKey, boolean quoteIdentifiers, boolean qualifyNames) {
+		UniqueConstraint uniqueConstraint = foreignKey.getUniqueConstraint();
+		Index index = foreignKey.getUniqueIndex();
+		Table parentTable = null;
+		String parentKey = null;
+		if (uniqueConstraint != null) {
+			parentTable = uniqueConstraint.getBaseTable();
+			parentKey = this.getKeyColumns(uniqueConstraint, quoteIdentifiers);
+		} else if (index != null) {
+			parentTable = index.getTable();
+			parentKey = this.getParentKeyColumns(index, quoteIdentifiers);
+		}
+		if (parentTable == null) {
+			this.getEngineeringCallBack().writeMessage(
+					MessageFormat.format(GenericCatalogMessages.FE_PARENT_TABLLE_OR_KEY_DO_NOT_EXIST, new Object[] { foreignKey.getName() }));
+			return null;
+		}
+
+		String statement = ALTER + SPACE + TABLE + SPACE + getName(foreignKey.getBaseTable(), quoteIdentifiers, qualifyNames) + SPACE + ADD + SPACE
+				+ CONSTRAINT + SPACE + getName(foreignKey, quoteIdentifiers) + SPACE + FOREIGN_KEY + SPACE + LEFT_PARENTHESIS
+				+ this.getKeyColumns(foreignKey, quoteIdentifiers) + RIGHT_PARENTHESIS + NEWLINE;
+		statement += TAB + REFERENCES + SPACE + getName(parentTable, quoteIdentifiers, qualifyNames) + SPACE + LEFT_PARENTHESIS + parentKey + RIGHT_PARENTHESIS;
+
+		ReferentialActionType action = foreignKey.getOnDelete();
+		if (action != ReferentialActionType.RESTRICT_LITERAL && action != ReferentialActionType.NO_ACTION_LITERAL) {
+			statement += NEWLINE + TAB + ON + SPACE + DELETE + SPACE;
+			statement += getReferentialAction(action);
+		}
+
+		action = foreignKey.getOnUpdate();
+		if (action != ReferentialActionType.RESTRICT_LITERAL && action != ReferentialActionType.NO_ACTION_LITERAL) {
+			statement += NEWLINE + TAB + ON + SPACE + UPDATE + SPACE;
+			statement += getReferentialAction(action);
+		}
+
+		if (foreignKey.isDeferrable()) {
+			statement += NEWLINE + TAB + getDeferrableClause(foreignKey);
+		}
+		return statement + NEWLINE;
+	}
+
+	public String addUniqueConstraint(Index constraint, boolean quoteIdentifiers, boolean qualifyNames) {
+		String statement = ALTER + SPACE + TABLE + SPACE + getName(constraint.getTable(), quoteIdentifiers, qualifyNames) + SPACE;
+		statement += this.getAddUniqueConstraintClause(constraint, quoteIdentifiers);
+
+		return statement + NEWLINE;
+	}
+
+	protected String getAddUniqueConstraintClause(Index constraint, boolean quoteIdentifiers) {
+		return ADD + SPACE + getUniqueConstraintClause(constraint, quoteIdentifiers) + NEWLINE;
+	}
+
+	protected String getUniqueConstraintClause(Index constraint, boolean quoteIdentifiers) {
+		String text = CONSTRAINT + SPACE + getName(constraint, quoteIdentifiers, false) + SPACE + UNIQUE + SPACE + LEFT_PARENTHESIS
+				+ this.getIndexKeyColumns(constraint, quoteIdentifiers) + RIGHT_PARENTHESIS;
+
+
+		return text + NEWLINE;
+	}
+
+	public String dropTable(BaseTable table, boolean quoteIdentifiers, boolean qualifyNames) {
+		return DROP + SPACE + TABLE + SPACE + getName(table, quoteIdentifiers, qualifyNames) + NEWLINE;
+	}
+
+	public String dropTableConstraint(Index uniqueIndex, boolean quoteIdentifiers, boolean qualifyNames) {
+		return ALTER + SPACE + TABLE + SPACE + getName(uniqueIndex.getTable(), quoteIdentifiers, qualifyNames)
+				+ " DROP CONSTRAINT " + getName(uniqueIndex, quoteIdentifiers, false) + NEWLINE; //$NON-NLS-1$
+	}
+
+	public String dropTableConstraint(TableConstraint constraint, boolean quoteIdentifiers, boolean qualifyNames) {
+		return super.dropTableConstraint(constraint, quoteIdentifiers, qualifyNames) + NEWLINE;
+	}
+
+	/**
+	 * http://msdn.microsoft.com/en-us/library/ms191203.aspx
+	 * http://msdn.microsoft.com/en-us/library/ms190707.aspx
+	 * http://msdn.microsoft.com/en-us/library/ms190356.aspx
+	 */
+	public String[] createSetOptions(SQLObject[] elements) {
+		String[] setOptions = new String[3];
+
+		setOptions[0] = SET + SPACE + ANSI_NULLS + SPACE + ON + NEWLINE;
+		setOptions[1] = SET + SPACE + QUOTED_IDENTIFIER + SPACE + ON + NEWLINE;
+		setOptions[2] = SET + SPACE + ANSI_PADDING + SPACE + ON + NEWLINE;
+
+		return setOptions;
+	}
+
+	public String[] createUnsetOptions(SQLObject[] elements) {
+		String[] unsetOptions = new String[1];
+
+		unsetOptions[0] = SET + SPACE + ANSI_PADDING + SPACE + OFF + NEWLINE;
+
+		return unsetOptions;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/ddl/SqlServer2000DdlGenerator.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/ddl/SqlServer2000DdlGenerator.java
new file mode 100644
index 0000000..1976bf7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/ddl/SqlServer2000DdlGenerator.java
@@ -0,0 +1,316 @@
+/*******************************************************************************
+ * Copyright (c) 2008 NexB Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Anton Safonov and Ahti Kitsik - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.ddl;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.datatools.connectivity.sqm.core.rte.EngineeringOption;
+import org.eclipse.datatools.connectivity.sqm.core.rte.fe.GenericDdlGenerator;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCProcedure;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCUserDefinedFunction;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCView;
+import org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQLs;
+import org.eclipse.datatools.enablement.msft.internal.sqlserver.models.SQLServerJdbcIndex;
+import org.eclipse.datatools.enablement.msft.internal.sqlserver.models.SQLServerTrigger;
+import org.eclipse.datatools.modelbase.sql.constraints.Assertion;
+import org.eclipse.datatools.modelbase.sql.constraints.CheckConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.ReferenceConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.TableConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.UniqueConstraint;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.datatools.modelbase.sql.routines.UserDefinedFunction;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.PersistentTable;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;
+
+public class SqlServer2000DdlGenerator extends GenericDdlGenerator {
+
+	private SqlServer2000DdlBuilder builder;
+
+	public SqlServer2000DdlGenerator() {
+		this.builder = new SqlServer2000DdlBuilder();
+	}
+	
+	public String[] generateDDL(SQLObject[] elements, IProgressMonitor progressMonitor) {
+		return super.generateDDL(elements, progressMonitor);
+	}
+
+	protected String[] dropStatements(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor, int task) {
+		SqlServerDdlScript script = new SqlServerDdlScript();
+
+		EngineeringOption[] options = this.getSelectedOptions(elements);        
+
+		Set allElements = this.getAllContainedDisplayableElementSet(elements);
+
+		builder.setElements(allElements);
+
+		allElements = new HashSet(allElements);
+		filterElements(allElements);
+
+		try {
+	        Iterator it = allElements.iterator();
+	        while(it.hasNext()) {
+	            Object o = it.next();
+	            if(o instanceof PersistentTable) {
+	            	if (!this.generateTables(options)) continue;
+	                String statement = builder.dropTable((PersistentTable) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) script.addDropTableStatement(statement);
+	            }
+	            else if(o instanceof ViewTable) {
+	            	if (!this.generateViews(options)) continue;
+	                String statement = builder.dropView((ViewTable) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) script.addDropViewStatement(statement);
+	            }
+	            else if(o instanceof Trigger) {
+	            	if (!this.generateTriggers(options)) continue;
+	                String statement = builder.dropTrigger((Trigger) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) script.addDropTriggerStatement(statement);
+	            }
+	            else if(o instanceof CheckConstraint) {
+	            	if (!this.generateCKConstraints(options)) continue;
+	                String statement = builder.dropTableConstraint((CheckConstraint) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) script.addAlterTableDropConstraintStatement(statement);
+	            }
+	            else if(o instanceof UniqueConstraint) {
+	            	if (!this.generatePKConstraints(options) || builder.isImplicitConstraint((UniqueConstraint)o)) continue;
+	                String statement = builder.dropTableConstraint((UniqueConstraint) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) script.addAlterTableDropConstraintStatement(statement);
+	            }
+	            else if(o instanceof ForeignKey) {
+	            	if (!this.generateFKConstraints(options) || builder.isImplicitConstraint((ForeignKey)o)) continue;
+	                String statement = builder.dropTableConstraint((ForeignKey) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) script.addAlterTableDropForeignKeyStatement(statement);
+	            }
+	            else if(o instanceof Index) {
+	            	if (!this.generateIndexes(options)) {
+	            		continue;
+	            	}
+	            	if (((SQLServerJdbcIndex) o).isUniqueConstraint()) {
+	            		String statement = builder.dropTableConstraint((Index) o, quoteIdentifiers, qualifyNames);
+	            		if(statement != null) script.addAlterTableDropConstraintStatement(statement);
+	            	} else {
+	            		String statement = builder.dropIndex((Index) o, quoteIdentifiers, qualifyNames);
+		                if(statement != null) script.addDropIndexStatement(statement);
+	            	}
+	            }
+	            else if(o instanceof Procedure) {
+	            	if (!this.generateStoredProcedures(options)) continue;
+	                String statement = builder.dropProcedure((Procedure) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) script.addDropStoredProcedureStatement(statement);
+	            }
+	            else if(o instanceof UserDefinedFunction) {
+	            	if (!this.generateFunctions(options)) continue;
+	                String statement = builder.dropFunction((UserDefinedFunction) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) script.addDropUserDefinedFunctionStatement(statement);
+	            }
+	            else if(o instanceof Schema) {
+	            	if (!this.generateSchemas(options)) continue;
+	                String statement = builder.dropSchema((Schema) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) script.addDropSchemaStatement(statement);
+	            }
+	            else if(o instanceof UserDefinedType) {
+	            	if (!this.generateUserDefinedTypes(options)) continue;
+	                String statement = builder.dropUserDefinedType((UserDefinedType) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) script.addDropUserDefinedTypeStatement(statement);
+	            }
+	            else if(o instanceof Assertion) {
+	            	if (!this.generateAssertions(options)) continue;
+	                String statement = builder.dropAssertion((Assertion) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) script.addDropAssertionStatement(statement);
+	            }
+	        }
+		} finally {   
+			builder.clear();
+		}
+		return script.getStatements();	
+	}
+	
+	protected String[] createStatements(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor, int task) {
+		SqlServerDdlScript script = new SqlServerDdlScript();
+		EngineeringOption[] options = this.getSelectedOptions(elements);
+
+		Set allElements = this.getAllContainedDisplayableElementSet(elements);
+
+		builder.setElements(allElements);
+
+		allElements = new HashSet(allElements);
+		filterElements(allElements);
+
+		try {
+			String[] setOptions = builder.createSetOptions(elements);
+			for (int i = 0; i < setOptions.length; i++) {
+				script.addSetOptionStatement(setOptions[i]);
+			}
+
+			Iterator it = allElements.iterator();
+			while (it.hasNext()) {
+				Object o = it.next();
+
+				if (o instanceof TableConstraint && allElements.contains(((TableConstraint) o).getBaseTable())) {
+					// will be generated as part of table clause
+					continue;
+				}
+				
+				if (o instanceof PersistentTable) {
+					if (!this.generateTables(options))
+						continue;
+					String statement = builder.createTable((PersistentTable) o, quoteIdentifiers, qualifyNames);
+					if (statement != null)
+						script.addCreateTableStatement(statement);
+				} else if (o instanceof ViewTable) {
+					if (!this.generateViews(options))
+						continue;
+					String statement = null;
+					if (o instanceof JDBCView) {
+						statement = executeQuery(((JDBCView) o).getConnection(), ((JDBCView) o).getName());
+					}
+					if (statement != null)
+						script.addCreateViewStatement(statement);
+				} else if (o instanceof Trigger) {
+					if (!this.generateTriggers(options))
+						continue;
+					String statement = executeQuery(((SQLServerTrigger) o).getConnection(), ((SQLServerTrigger) o).getName());
+					if (statement != null)
+						script.addCreateTriggerStatement(statement);
+				} else if (o instanceof CheckConstraint) {
+					if (!this.generateCKConstraints(options)) {
+						continue;
+					}
+					String statement = builder.addCheckConstraint((CheckConstraint) o, quoteIdentifiers, qualifyNames);
+					if (statement != null)
+						script.addAlterTableAddConstraintStatement(statement);
+				} else if (o instanceof UniqueConstraint) {
+					if (!this.generatePKConstraints(options) || builder.isImplicitConstraint((UniqueConstraint) o))
+						continue;
+					String statement = builder.addUniqueConstraint((UniqueConstraint) o, quoteIdentifiers, qualifyNames);
+					if (statement != null)
+						script.addAlterTableAddConstraintStatement(statement);
+				} else if (o instanceof ForeignKey) {
+					if (!this.generateFKConstraints(options) || builder.isImplicitConstraint((ForeignKey) o))
+						continue;
+					String statement = builder.addForeignKey((ForeignKey) o, quoteIdentifiers, qualifyNames);
+					if (statement != null)
+						script.addAlterTableAddForeignKeyStatement(statement);
+				} else if (o instanceof Index) {
+					if (!this.generateIndexes(options)) {
+						continue;
+					}
+					if (((SQLServerJdbcIndex) o).isUniqueConstraint()) {
+						String statement = builder.addUniqueConstraint((Index) o, quoteIdentifiers, qualifyNames);
+						if (statement != null) script.addAlterTableAddConstraintStatement(statement);
+					} else {
+						String statement = builder.createIndex((Index) o, quoteIdentifiers, qualifyNames);
+						if (statement != null) script.addCreateIndexStatement(statement);
+					}
+				} else if (o instanceof Procedure) {
+					if (!this.generateStoredProcedures(options))
+						continue;
+					String statement = null; // ignore the builder as we don't have
+					// the resources to build a satisfactory builder.
+					if (o instanceof JDBCProcedure) {
+						statement = builder.createProcedure(((JDBCProcedure) o), quoteIdentifiers, qualifyNames);
+					}
+					if (statement != null)
+						script.addCreateStoredProcedureStatement(statement);
+				} else if (o instanceof UserDefinedFunction) {
+					if (!this.generateFunctions(options))
+						continue;
+					String statement = null; // ignore the builder as we don't have
+					// the resources to build a satisfactory builder.
+					if (o instanceof JDBCUserDefinedFunction) {
+						statement = executeQuery(((JDBCUserDefinedFunction) o).getConnection(), ((JDBCUserDefinedFunction) o).getName());
+					}
+
+					if (statement != null)
+						script.addCreateUserDefinedFunctionStatement(statement);
+				} else if (o instanceof Schema) {
+					if (!this.generateSchemas(options))
+						continue;
+					String statement = builder.createSchema((Schema) o, quoteIdentifiers, qualifyNames);
+					if (statement != null)
+						script.addCreateSchemaStatement(statement);
+				} else if (o instanceof UserDefinedType) {
+					if (!this.generateUserDefinedTypes(options))
+						continue;
+					String statement = builder.createUserDefinedType((UserDefinedType) o, quoteIdentifiers, qualifyNames);
+					if (statement != null)
+						script.addCreateUserDefinedTypeStatement(statement);
+				} else if (o instanceof Assertion) {
+					if (!this.generateAssertions(options))
+						continue;
+					String statement = builder.createAssertion((Assertion) o, quoteIdentifiers, qualifyNames);
+					if (statement != null)
+						script.addCreateAssertionStatement(statement);
+				}
+			}
+			
+			String[] unsetOptions = builder.createUnsetOptions(elements);
+			for (int i = 0; i < unsetOptions.length; i++) {
+				script.addUnsetOptionStatement(unsetOptions[i]);
+			}
+			
+		} finally {
+			builder.clear();
+		}
+		
+		return script.getStatements();
+	}
+
+	private void filterElements(Set allElements) {
+		Iterator toFilter = allElements.iterator();
+		while (toFilter.hasNext()) {
+			Object obj = toFilter.next();
+			if (obj instanceof Index) {
+				ReferenceConstraint constr = builder.findConstraintByIndex((Index) obj);
+				if (constr != null) {
+					toFilter.remove();
+					continue;
+				} 
+				if (((SQLServerJdbcIndex) obj).isPrimaryKey()) {
+					toFilter.remove();
+					continue;
+				}
+			}
+		}
+	}
+	
+	private String executeQuery(Connection connection, String name) {
+		try {
+			PreparedStatement stmt = connection.prepareStatement(SQLs.SELECT_OBJ_BY_NAME_2000);
+
+			stmt.setString(1, name);
+
+			ResultSet r = stmt.executeQuery();
+
+			StringBuffer statement = new StringBuffer();
+			while(r.next()) {
+				statement.append(r.getString(1));
+			}
+			return statement.toString();
+		} catch (SQLException e) {
+			// TODO log properly
+			e.printStackTrace();
+		}
+		return null;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/ddl/SqlServerDdlBuilder.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/ddl/SqlServerDdlBuilder.java
new file mode 100644
index 0000000..e39eaad
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/ddl/SqlServerDdlBuilder.java
@@ -0,0 +1,404 @@
+/*******************************************************************************
+ * Copyright (c) 2008 NexB Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Anton Safonov and Ahti Kitsik - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.ddl;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.fe.GenericDdlBuilder;
+import org.eclipse.datatools.connectivity.sqm.internal.core.util.GenericCatalogMessages;
+import org.eclipse.datatools.enablement.msft.internal.sqlserver.models.SQLServerJdbcIndex;
+import org.eclipse.datatools.modelbase.sql.constraints.CheckConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.ReferenceConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.TableConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.UniqueConstraint;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.routines.Parameter;
+import org.eclipse.datatools.modelbase.sql.routines.ParameterMode;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.datatools.modelbase.sql.schema.ReferentialActionType;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.TemporaryTable;
+
+import com.ibm.icu.text.MessageFormat;
+
+public class SqlServerDdlBuilder extends GenericDdlBuilder {
+
+	protected static final String ACTION = "ACTION"; //$NON-NLS-1$
+	protected static final String ANSI_NULLS = "ANSI_NULLS"; //$NON-NLS-1$
+	protected static final String ANSI_PADDING = "ANSI_PADDING"; //$NON-NLS-1$
+	protected static final String OFF = "OFF";//$NON-NLS-1$
+	protected static final String OUT = "OUT";//$NON-NLS-1$
+	protected static final String QUOTED_IDENTIFIER = "QUOTED_IDENTIFIER"; //$NON-NLS-1$
+
+	private Set elements;
+
+	public String createTable(BaseTable table, boolean quoteIdentifiers, boolean qualifyNames) {
+		StringBuffer statement = new StringBuffer();
+		boolean isTemp = table instanceof TemporaryTable;
+
+		statement.append(CREATE).append(SPACE);
+		if (isTemp) {
+			if (((TemporaryTable) table).isLocal()) {
+				statement.append(LOCAL).append(SPACE);
+			} else {
+				statement.append(GLOBAL).append(SPACE);
+			}
+			statement.append(TEMPORARY).append(SPACE);
+		}
+		statement.append(TABLE).append(SPACE).append(getName(table, quoteIdentifiers, qualifyNames)).append(SPACE);
+
+		statement.append(LEFT_PARENTHESIS).append(NEWLINE);
+
+		List items = new ArrayList();
+		items.addAll(table.getColumns());
+		items.addAll(getTableConstraints(table));
+		Iterator it = items.iterator();
+		boolean first = true;
+		while (it.hasNext()) {
+			Object item = it.next();
+			String clause;
+			if (item instanceof Column) {
+				clause = getColumnString((Column) item, quoteIdentifiers);
+			} else if (item instanceof CheckConstraint) {
+				clause = getCheckConstraintClause((CheckConstraint) item, quoteIdentifiers);
+			} else if (item instanceof UniqueConstraint) {
+				clause = getUniqueConstraintClause((UniqueConstraint) item, quoteIdentifiers);
+			} else {
+				continue;
+			}
+
+			if (!first) {
+				statement.append(COMMA);
+				statement.append(NEWLINE);
+			} else {
+				first = false;
+			}
+
+			statement.append(TAB).append(clause);
+		}
+
+		statement.append(NEWLINE).append(RIGHT_PARENTHESIS);
+
+		if (isTemp) {
+			statement.append(NEWLINE).append(TAB).append(ON_COMMIT).append(SPACE);
+			if (((TemporaryTable) table).isDeleteOnCommit()) {
+				statement.append(DELETE).append(SPACE);
+			} else {
+				statement.append(PRESERVE).append(SPACE);
+			}
+			statement.append(ROWS);
+		}
+
+		return statement.append(NEWLINE).toString();
+	}
+
+	private Set getTableConstraints(Table table) {
+		Set constraints = new HashSet(elements.size());
+		Iterator it = elements.iterator();
+		while (it.hasNext()) {
+			Object elem = it.next();
+			if (elem instanceof TableConstraint && ((TableConstraint) elem).getBaseTable() == table) {
+				constraints.add(elem);
+			}
+		}
+		return constraints;
+	}
+
+	public String createProcedure(Procedure procedure, boolean quoteIdentifiers, boolean qualifyNames) {
+		StringBuffer statement = new StringBuffer();
+
+		// CREATE PROCEDURE procedure_name
+		statement.append(CREATE).append(SPACE).append(PROCEDURE).append(SPACE).append(getName(procedure, quoteIdentifiers, qualifyNames)).append(SPACE);
+
+		// parameters
+		// SQL server doesn't like " as quotation identifier.
+		statement.append(getParameterListClause(procedure, false));
+
+		// begin characteristics
+		// language
+		if (procedure.getLanguage() != null && procedure.getLanguage().length() > 0) {
+			statement.append(TAB).append(LANGUAGE).append(SPACE).append(procedure.getLanguage()).append(NEWLINE);
+		}
+
+		// parameter style
+		if (procedure.getParameterStyle() != null && procedure.getParameterStyle().length() > 0) {
+			statement.append(TAB).append(PARAMETER_STYLE).append(SPACE).append(procedure.getParameterStyle()).append(NEWLINE);
+		}
+
+		// dynamic result sets
+		if (procedure.getMaxResultSets() > 0) {
+			statement.append(TAB).append(DYNAMIC_RESULT_SETS).append(SPACE).append(procedure.getMaxResultSets()).append(NEWLINE);
+		}
+		// end characteristics
+
+		// comments for future:
+		// with recompiled -- "sys"."all_sql_modules" col is_recompiled.
+		// with encrypted -- nothing to do as encrypted procedures can't be
+		// loaded from db
+
+		// body
+		if (procedure.getSource() != null) {
+			String body = procedure.getSource().getBody();
+			if (body != null && body.length() > 0) {
+				statement.append(AS).append(NEWLINE).append(body).append(NEWLINE);
+			}
+		}
+
+		return statement.append(NEWLINE).toString();
+	}
+
+	protected String getParameterListClause(Routine routine, boolean quoteIdentifiers) {
+		StringBuffer statement = new StringBuffer();
+		statement.append(NEWLINE);
+		for (Iterator it = routine.getParameters().iterator(); it.hasNext();) {
+			Parameter param = (Parameter) it.next();
+			String name = param.getName();
+			if (name.equals("@RETURN_VALUE"))
+				continue;
+			ParameterMode mode = param.getMode();
+
+			// formatting
+			statement.append(TAB).append(TAB);
+
+			// name
+			if (name != null && name.length() > 0) {
+				statement.append(quoteIdentifiers ? getQuotedIdentifierString(param) : name).append(SPACE);
+			}
+
+			// type
+			statement.append(getDataTypeString(param, routine.getSchema()));
+
+			// mode (IN, INOUT, OUT)
+			if (mode.getName().toLowerCase().equals("inout") || mode.getName().toLowerCase().equals("out")) {
+				statement.append(SPACE).append(OUT).append(SPACE);
+			}
+
+			// TODO: default value
+
+			// locator
+			// TODO: anything?
+
+			if (it.hasNext()) {
+				// prepare for the next parameter
+				statement.append(COMMA);
+				statement.append(NEWLINE);
+			}
+		}
+		statement.append(NEWLINE);
+
+		return statement.toString();
+	}
+
+	public String dropIndex(Index index, boolean quoteIdentifiers, boolean qualifyNames) {
+		return DROP + SPACE + INDEX + SPACE + getName(index.getTable(), quoteIdentifiers, qualifyNames) + DOT + getName(index, quoteIdentifiers, false) + NEWLINE;
+	}
+
+	public String createIndex(Index index, boolean quoteIdentifiers, boolean qualifyNames) {
+		String statement = CREATE + SPACE;
+		if (index.isUnique()) {
+			statement += UNIQUE + SPACE;
+		}
+		statement += INDEX + SPACE + getName(index, quoteIdentifiers, false) + SPACE + ON + SPACE + getName(index.getTable(), quoteIdentifiers, qualifyNames)
+				+ SPACE + LEFT_PARENTHESIS + getIndexKeyColumns(index, quoteIdentifiers) + RIGHT_PARENTHESIS;
+
+		statement += NEWLINE + WITH + SPACE + LEFT_PARENTHESIS + generateIndexOptions(index) + RIGHT_PARENTHESIS;
+
+		return statement + NEWLINE;
+	}
+
+	/**
+	 * http://msdn.microsoft.com/en-us/library/ms188783.aspx
+	 * <relational_index_option> ::= { PAD_INDEX = { ON | OFF } | FILLFACTOR =
+	 * fillfactor | SORT_IN_TEMPDB = { ON | OFF } | IGNORE_DUP_KEY = { ON | OFF
+	 * } | STATISTICS_NORECOMPUTE = { ON | OFF } | DROP_EXISTING = { ON | OFF }
+	 * | ONLINE = { ON | OFF } | ALLOW_ROW_LOCKS = { ON | OFF } |
+	 * ALLOW_PAGE_LOCKS = { ON | OFF } | MAXDOP = max_degree_of_parallelism }
+	 */
+	public String generateIndexOptions(Index index) {
+		return "PAD_INDEX = "
+				+ asOnOff(((SQLServerJdbcIndex) index).isPadIndex())
+				+ COMMA
+				+ SPACE
+				// + "FILL_FACTOR" + SPACE + ((SQLServerJdbcIndex)
+				// index).getFillFactor() + COMMA + SPACE
+				+ "STATISTICS_NORECOMPUTE = " + asOnOff(((SQLServerJdbcIndex) index).isStatisticsNoRecompute()) + COMMA + SPACE + "IGNORE_DUP_KEY = "
+				+ asOnOff(((SQLServerJdbcIndex) index).isIgnoreDupKey()) + COMMA + SPACE + "ALLOW_ROW_LOCKS = "
+				+ asOnOff(((SQLServerJdbcIndex) index).isAllowRowLocks()) + COMMA + SPACE + "ALLOW_PAGE_LOCKS = "
+				+ asOnOff(((SQLServerJdbcIndex) index).isAllowPageLocks());
+	}
+
+	public final String asOnOff(final boolean flag) {
+		return flag ? "ON" : "OFF";
+	}
+
+	public void setElements(Set elements) {
+		this.elements = elements;
+	}
+
+	public final void clear() {
+		this.elements = null;
+	}
+
+	protected String getAddUniqueConstraintClause(UniqueConstraint constraint, boolean quoteIdentifiers) {
+		return ADD + SPACE + getUniqueConstraintClause(constraint, quoteIdentifiers) + NEWLINE;
+	}
+
+	protected String getUniqueConstraintClause(UniqueConstraint constraint, boolean quoteIdentifiers) {
+		String text = CONSTRAINT + SPACE + getName(constraint, quoteIdentifiers) + SPACE + getUniqueConstraintType(constraint) + SPACE + LEFT_PARENTHESIS
+				+ this.getKeyColumns(constraint, quoteIdentifiers) + RIGHT_PARENTHESIS;
+
+		Index index = findIndexByConstraint(constraint);
+		if (index != null) {
+			text += SPACE + WITH + SPACE + LEFT_PARENTHESIS + generateIndexOptions(index) + RIGHT_PARENTHESIS;
+		}
+
+		// TODO is it for MS SQL Server?
+		if (constraint.isDeferrable()) {
+			text += SPACE + getDeferrableClause(constraint);
+		}
+		return text + NEWLINE;
+	}
+
+	public ReferenceConstraint findConstraintByIndex(Index index) {
+		Iterator it = this.elements.iterator();
+		while (it.hasNext()) {
+			Object elem = it.next();
+			if (elem instanceof ReferenceConstraint && ((ReferenceConstraint) elem).getName().equals(index.getName())) {
+				return (ReferenceConstraint) elem;
+			}
+		}
+		return null;
+	}
+
+	public Index findIndexByConstraint(ReferenceConstraint constraint) {
+		Iterator it = this.elements.iterator();
+		while (it.hasNext()) {
+			Object elem = it.next();
+			if (elem instanceof Index && ((Index) elem).getName().equals(constraint.getName())) {
+				return (Index) elem;
+			}
+		}
+		return null;
+	}
+
+	public String createUserDefinedType(UserDefinedType type, boolean quoteIdentifiers, boolean qualifyNames) {
+		return super.createUserDefinedType(type, quoteIdentifiers, qualifyNames);
+	}
+
+	public String addForeignKey(ForeignKey foreignKey, boolean quoteIdentifiers, boolean qualifyNames) {
+		UniqueConstraint uniqueConstraint = foreignKey.getUniqueConstraint();
+		Index index = foreignKey.getUniqueIndex();
+		Table parentTable = null;
+		String parentKey = null;
+		if (uniqueConstraint != null) {
+			parentTable = uniqueConstraint.getBaseTable();
+			parentKey = this.getKeyColumns(uniqueConstraint, quoteIdentifiers);
+		} else if (index != null) {
+			parentTable = index.getTable();
+			parentKey = this.getParentKeyColumns(index, quoteIdentifiers);
+		}
+		if (parentTable == null) {
+			this.getEngineeringCallBack().writeMessage(
+					MessageFormat.format(GenericCatalogMessages.FE_PARENT_TABLLE_OR_KEY_DO_NOT_EXIST, new Object[] { foreignKey.getName() }));
+			return null;
+		}
+
+		String statement = ALTER + SPACE + TABLE + SPACE + getName(foreignKey.getBaseTable(), quoteIdentifiers, qualifyNames) + SPACE + ADD + SPACE
+				+ CONSTRAINT + SPACE + getName(foreignKey, quoteIdentifiers) + SPACE + FOREIGN_KEY + SPACE + LEFT_PARENTHESIS
+				+ this.getKeyColumns(foreignKey, quoteIdentifiers) + RIGHT_PARENTHESIS + NEWLINE;
+		statement += TAB + REFERENCES + SPACE + getName(parentTable, quoteIdentifiers, qualifyNames) + SPACE + LEFT_PARENTHESIS + parentKey + RIGHT_PARENTHESIS;
+
+		ReferentialActionType action = foreignKey.getOnDelete();
+		if (action != ReferentialActionType.RESTRICT_LITERAL && action != ReferentialActionType.NO_ACTION_LITERAL) {
+			statement += NEWLINE + TAB + ON + SPACE + DELETE + SPACE;
+			statement += getReferentialAction(action);
+		}
+
+		action = foreignKey.getOnUpdate();
+		if (action != ReferentialActionType.RESTRICT_LITERAL && action != ReferentialActionType.NO_ACTION_LITERAL) {
+			statement += NEWLINE + TAB + ON + SPACE + UPDATE + SPACE;
+			statement += getReferentialAction(action);
+		}
+
+		if (foreignKey.isDeferrable()) {
+			statement += NEWLINE + TAB + getDeferrableClause(foreignKey);
+		}
+		return statement + NEWLINE;
+	}
+
+	public String addUniqueConstraint(Index constraint, boolean quoteIdentifiers, boolean qualifyNames) {
+		String statement = ALTER + SPACE + TABLE + SPACE + getName(constraint.getTable(), quoteIdentifiers, qualifyNames) + SPACE;
+		statement += this.getAddUniqueConstraintClause(constraint, quoteIdentifiers);
+
+		return statement + NEWLINE;
+	}
+
+	protected String getAddUniqueConstraintClause(Index constraint, boolean quoteIdentifiers) {
+		return ADD + SPACE + getUniqueConstraintClause(constraint, quoteIdentifiers) + NEWLINE;
+	}
+
+	protected String getUniqueConstraintClause(Index constraint, boolean quoteIdentifiers) {
+		String text = CONSTRAINT + SPACE + getName(constraint, quoteIdentifiers, false) + SPACE + UNIQUE + SPACE + LEFT_PARENTHESIS
+				+ this.getIndexKeyColumns(constraint, quoteIdentifiers) + RIGHT_PARENTHESIS;
+
+		text += SPACE + WITH + SPACE + LEFT_PARENTHESIS + generateIndexOptions(constraint) + RIGHT_PARENTHESIS;
+
+		return text + NEWLINE;
+	}
+
+	public String dropTable(BaseTable table, boolean quoteIdentifiers, boolean qualifyNames) {
+        return DROP + SPACE + TABLE + SPACE + getName(table, quoteIdentifiers, qualifyNames) + NEWLINE;
+    }
+
+	
+	public String dropTableConstraint(Index uniqueIndex, boolean quoteIdentifiers, boolean qualifyNames) {
+		return ALTER + SPACE + TABLE + SPACE + getName(uniqueIndex.getTable(), quoteIdentifiers, qualifyNames)
+				+ " DROP CONSTRAINT " + getName(uniqueIndex, quoteIdentifiers, false) + NEWLINE; //$NON-NLS-1$
+	}
+
+	public String dropTableConstraint(TableConstraint constraint, boolean quoteIdentifiers, boolean qualifyNames) {
+		return super.dropTableConstraint(constraint, quoteIdentifiers, qualifyNames) + NEWLINE;
+	}
+	
+	/**
+	 * http://msdn.microsoft.com/en-us/library/ms191203.aspx
+	 * http://msdn.microsoft.com/en-us/library/ms190707.aspx
+	 * http://msdn.microsoft.com/en-us/library/ms190356.aspx
+	 */
+	public String[] createSetOptions(SQLObject[] elements) {
+		String[] setOptions = new String[3];
+
+		setOptions[0] = SET + SPACE + ANSI_NULLS + SPACE + ON + NEWLINE;
+		setOptions[1] = SET + SPACE + QUOTED_IDENTIFIER + SPACE + ON + NEWLINE;
+		setOptions[2] = SET + SPACE + ANSI_PADDING + SPACE + ON + NEWLINE;
+
+		return setOptions;
+	}
+
+	public String[] createUnsetOptions(SQLObject[] elements) {
+		String[] unsetOptions = new String[1];
+
+		unsetOptions[0] = SET + SPACE + ANSI_PADDING + SPACE + OFF + NEWLINE;
+
+		return unsetOptions;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/ddl/SqlServerDdlGenerator.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/ddl/SqlServerDdlGenerator.java
new file mode 100644
index 0000000..3da789f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/ddl/SqlServerDdlGenerator.java
@@ -0,0 +1,314 @@
+/*******************************************************************************
+ * Copyright (c) 2008 NexB Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Anton Safonov and Ahti Kitsik - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.ddl;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.datatools.connectivity.sqm.core.rte.EngineeringOption;
+import org.eclipse.datatools.connectivity.sqm.core.rte.fe.GenericDdlGenerator;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCProcedure;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCUserDefinedFunction;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCView;
+import org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQLs;
+import org.eclipse.datatools.enablement.msft.internal.sqlserver.models.SQLServerJdbcIndex;
+import org.eclipse.datatools.enablement.msft.internal.sqlserver.models.SQLServerTrigger;
+import org.eclipse.datatools.modelbase.sql.constraints.Assertion;
+import org.eclipse.datatools.modelbase.sql.constraints.CheckConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.ReferenceConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.TableConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.UniqueConstraint;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.datatools.modelbase.sql.routines.UserDefinedFunction;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.PersistentTable;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;
+
+public class SqlServerDdlGenerator extends GenericDdlGenerator {
+
+	private SqlServerDdlBuilder builder;
+
+	public SqlServerDdlGenerator() {
+		this.builder = new SqlServerDdlBuilder();
+	}
+	
+	public String[] generateDDL(SQLObject[] elements, IProgressMonitor progressMonitor) {
+		return super.generateDDL(elements, progressMonitor);
+	}
+
+	protected String[] dropStatements(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor, int task) {
+		SqlServerDdlScript script = new SqlServerDdlScript();
+
+		EngineeringOption[] options = this.getSelectedOptions(elements);        
+
+		Set allElements = this.getAllContainedDisplayableElementSet(elements);
+
+		builder.setElements(allElements);
+
+		allElements = new HashSet(allElements);
+		filterElements(allElements);
+
+		try {
+	        Iterator it = allElements.iterator();
+	        while(it.hasNext()) {
+	            Object o = it.next();
+	            if(o instanceof PersistentTable) {
+	            	if (!this.generateTables(options)) continue;
+	                String statement = builder.dropTable((PersistentTable) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) script.addDropTableStatement(statement);
+	            }
+	            else if(o instanceof ViewTable) {
+	            	if (!this.generateViews(options)) continue;
+	                String statement = builder.dropView((ViewTable) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) script.addDropViewStatement(statement);
+	            }
+	            else if(o instanceof Trigger) {
+	            	if (!this.generateTriggers(options)) continue;
+	                String statement = builder.dropTrigger((Trigger) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) script.addDropTriggerStatement(statement);
+	            }
+	            else if(o instanceof CheckConstraint) {
+	            	if (!this.generateCKConstraints(options)) continue;
+	                String statement = builder.dropTableConstraint((CheckConstraint) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) script.addAlterTableDropConstraintStatement(statement);
+	            }
+	            else if(o instanceof UniqueConstraint) {
+	            	if (!this.generatePKConstraints(options) || builder.isImplicitConstraint((UniqueConstraint)o)) continue;
+	                String statement = builder.dropTableConstraint((UniqueConstraint) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) script.addAlterTableDropConstraintStatement(statement);
+	            }
+	            else if(o instanceof ForeignKey) {
+	            	if (!this.generateFKConstraints(options) || builder.isImplicitConstraint((ForeignKey)o)) continue;
+	                String statement = builder.dropTableConstraint((ForeignKey) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) script.addAlterTableDropForeignKeyStatement(statement);
+	            }
+	            else if(o instanceof Index) {
+	            	if (!this.generateIndexes(options)) {
+	            		continue;
+	            	}
+	            	if (((SQLServerJdbcIndex) o).isUniqueConstraint()) {
+	            		String statement = builder.dropTableConstraint((Index) o, quoteIdentifiers, qualifyNames);
+	            		if(statement != null) script.addAlterTableDropConstraintStatement(statement);
+	            	} else {
+	            		String statement = builder.dropIndex((Index) o, quoteIdentifiers, qualifyNames);
+		                if(statement != null) script.addDropIndexStatement(statement);
+	            	}
+	            }
+	            else if(o instanceof Procedure) {
+	            	if (!this.generateStoredProcedures(options)) continue;
+	                String statement = builder.dropProcedure((Procedure) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) script.addDropStoredProcedureStatement(statement);
+	            }
+	            else if(o instanceof UserDefinedFunction) {
+	            	if (!this.generateFunctions(options)) continue;
+	                String statement = builder.dropFunction((UserDefinedFunction) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) script.addDropUserDefinedFunctionStatement(statement);
+	            }
+	            else if(o instanceof Schema) {
+	            	if (!this.generateSchemas(options)) continue;
+	                String statement = builder.dropSchema((Schema) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) script.addDropSchemaStatement(statement);
+	            }
+	            else if(o instanceof UserDefinedType) {
+	            	if (!this.generateUserDefinedTypes(options)) continue;
+	                String statement = builder.dropUserDefinedType((UserDefinedType) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) script.addDropUserDefinedTypeStatement(statement);
+	            }
+	            else if(o instanceof Assertion) {
+	            	if (!this.generateAssertions(options)) continue;
+	                String statement = builder.dropAssertion((Assertion) o, quoteIdentifiers, qualifyNames);
+	                if(statement != null) script.addDropAssertionStatement(statement);
+	            }
+	        }
+		} finally {   
+			builder.clear();
+		}
+		return script.getStatements();	
+	}
+	
+	protected String[] createStatements(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor, int task) {
+		SqlServerDdlScript script = new SqlServerDdlScript();
+		EngineeringOption[] options = this.getSelectedOptions(elements);
+
+		Set allElements = this.getAllContainedDisplayableElementSet(elements);
+
+		builder.setElements(allElements);
+
+		allElements = new HashSet(allElements);
+		filterElements(allElements);
+
+		try {
+			String[] setOptions = builder.createSetOptions(elements);
+			for (int i = 0; i < setOptions.length; i++) {
+				script.addSetOptionStatement(setOptions[i]);
+			}
+
+			Iterator it = allElements.iterator();
+			while (it.hasNext()) {
+				Object o = it.next();
+
+				if (o instanceof TableConstraint && allElements.contains(((TableConstraint) o).getBaseTable())) {
+					// will be generated as part of table clause
+					continue;
+				}
+				
+				if (o instanceof PersistentTable) {
+					if (!this.generateTables(options))
+						continue;
+					String statement = builder.createTable((PersistentTable) o, quoteIdentifiers, qualifyNames);
+					if (statement != null)
+						script.addCreateTableStatement(statement);
+				} else if (o instanceof ViewTable) {
+					if (!this.generateViews(options))
+						continue;
+					String statement = null;
+					if (o instanceof JDBCView) {
+						statement = executeQuery(((JDBCView) o).getConnection(), ((JDBCView) o).getName());
+					}
+					if (statement != null)
+						script.addCreateViewStatement(statement);
+				} else if (o instanceof Trigger) {
+					if (!this.generateTriggers(options))
+						continue;
+					String statement = executeQuery(((SQLServerTrigger) o).getConnection(), ((SQLServerTrigger) o).getName());
+					if (statement != null)
+						script.addCreateTriggerStatement(statement);
+				} else if (o instanceof CheckConstraint) {
+					if (!this.generateCKConstraints(options)) {
+						continue;
+					}
+					String statement = builder.addCheckConstraint((CheckConstraint) o, quoteIdentifiers, qualifyNames);
+					if (statement != null)
+						script.addAlterTableAddConstraintStatement(statement);
+				} else if (o instanceof UniqueConstraint) {
+					if (!this.generatePKConstraints(options) || builder.isImplicitConstraint((UniqueConstraint) o))
+						continue;
+					String statement = builder.addUniqueConstraint((UniqueConstraint) o, quoteIdentifiers, qualifyNames);
+					if (statement != null)
+						script.addAlterTableAddConstraintStatement(statement);
+				} else if (o instanceof ForeignKey) {
+					if (!this.generateFKConstraints(options) || builder.isImplicitConstraint((ForeignKey) o))
+						continue;
+					String statement = builder.addForeignKey((ForeignKey) o, quoteIdentifiers, qualifyNames);
+					if (statement != null)
+						script.addAlterTableAddForeignKeyStatement(statement);
+				} else if (o instanceof Index) {
+					if (!this.generateIndexes(options)) {
+						continue;
+					}
+					if (((SQLServerJdbcIndex) o).isUniqueConstraint()) {
+						String statement = builder.addUniqueConstraint((Index) o, quoteIdentifiers, qualifyNames);
+						if (statement != null) script.addAlterTableAddConstraintStatement(statement);
+					} else {
+						String statement = builder.createIndex((Index) o, quoteIdentifiers, qualifyNames);
+						if (statement != null) script.addCreateIndexStatement(statement);
+					}
+				} else if (o instanceof Procedure) {
+					if (!this.generateStoredProcedures(options))
+						continue;
+					String statement = null; // ignore the builder as we don't have
+					// the resources to build a satisfactory builder.
+					if (o instanceof JDBCProcedure) {
+						statement = executeQuery(((JDBCProcedure) o).getConnection(), ((JDBCProcedure) o).getName());
+					}
+					if (statement != null)
+						script.addCreateStoredProcedureStatement(statement);
+				} else if (o instanceof UserDefinedFunction) {
+					if (!this.generateFunctions(options))
+						continue;
+					String statement = null; // ignore the builder as we don't have
+					// the resources to build a satisfactory builder.
+					if (o instanceof JDBCUserDefinedFunction) {
+						statement = executeQuery(((JDBCUserDefinedFunction) o).getConnection(), ((JDBCUserDefinedFunction) o).getName());
+					}
+
+					if (statement != null)
+						script.addCreateUserDefinedFunctionStatement(statement);
+				} else if (o instanceof Schema) {
+					if (!this.generateSchemas(options))
+						continue;
+					String statement = builder.createSchema((Schema) o, quoteIdentifiers, qualifyNames);
+					if (statement != null)
+						script.addCreateSchemaStatement(statement);
+				} else if (o instanceof UserDefinedType) {
+					if (!this.generateUserDefinedTypes(options))
+						continue;
+					String statement = builder.createUserDefinedType((UserDefinedType) o, quoteIdentifiers, qualifyNames);
+					if (statement != null)
+						script.addCreateUserDefinedTypeStatement(statement);
+				} else if (o instanceof Assertion) {
+					if (!this.generateAssertions(options))
+						continue;
+					String statement = builder.createAssertion((Assertion) o, quoteIdentifiers, qualifyNames);
+					if (statement != null)
+						script.addCreateAssertionStatement(statement);
+				}
+			}
+			
+			String[] unsetOptions = builder.createUnsetOptions(elements);
+			for (int i = 0; i < unsetOptions.length; i++) {
+				script.addUnsetOptionStatement(unsetOptions[i]);
+			}
+			
+		} finally {
+			builder.clear();
+		}
+		
+		return script.getStatements();
+	}
+
+	private void filterElements(Set allElements) {
+		Iterator toFilter = allElements.iterator();
+		while (toFilter.hasNext()) {
+			Object obj = toFilter.next();
+			if (obj instanceof Index) {
+				ReferenceConstraint constr = builder.findConstraintByIndex((Index) obj);
+				if (constr != null) {
+					toFilter.remove();
+					continue;
+				} 
+				if (((SQLServerJdbcIndex) obj).isPrimaryKey()) {
+					toFilter.remove();
+					continue;
+				}
+			}
+		}
+	}
+	
+	private String executeQuery(Connection connection, String name) {
+		try {
+			PreparedStatement stmt = connection.prepareStatement(SQLs.SELECT_OBJ_BY_NAME);
+
+			stmt.setString(1, name);
+
+			ResultSet r = stmt.executeQuery();
+
+			if (r.next()) {
+				return r.getString(2);
+			}
+		} catch (SQLException e) {
+			// TODO log properly
+			e.printStackTrace();
+		}
+		return null;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/ddl/SqlServerDdlScript.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/ddl/SqlServerDdlScript.java
new file mode 100644
index 0000000..9d3a31b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/ddl/SqlServerDdlScript.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2008 NexB Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Anton Safonov and Ahti Kitsik - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.ddl;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Vector;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.fe.GenericDdlScript;
+
+public class SqlServerDdlScript extends GenericDdlScript {
+
+    protected Vector setOptionStatements				= new Vector();
+    protected Vector unsetOptionStatements				= new Vector();
+
+    public void addSetOptionStatement(String statement) {
+    	setOptionStatements.addElement(statement);
+    }
+
+    public void addUnsetOptionStatement(String statement) {
+    	unsetOptionStatements.addElement(statement);
+    }
+
+	public String[] getStatements(){
+		String[] stats = super.getStatements();
+
+		ArrayList list = new ArrayList(stats.length + setOptionStatements.size() + unsetOptionStatements.size());
+		list.addAll(setOptionStatements);
+		list.addAll(Arrays.asList(stats));
+		list.addAll(unsetOptionStatements);
+		
+		return (String[]) list.toArray(new String[list.size()]);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/driver/SQLServer2000DriverValuesProvider.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/driver/SQLServer2000DriverValuesProvider.java
new file mode 100644
index 0000000..72b3bd6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/driver/SQLServer2000DriverValuesProvider.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2008 NexB Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Anton Safonov and Ahti Kitsik - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.driver;
+
+public class SQLServer2000DriverValuesProvider extends
+		SQLServerDriverValuesProvider {
+
+	public String getDriverDirName() {
+		return "lib/SQL Server_2000";
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/driver/SQLServer2005DriverValuesProvider.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/driver/SQLServer2005DriverValuesProvider.java
new file mode 100644
index 0000000..8d0292a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/driver/SQLServer2005DriverValuesProvider.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2008 NexB Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Anton Safonov and Ahti Kitsik - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.driver;
+
+public class SQLServer2005DriverValuesProvider extends
+		SQLServerDriverValuesProvider {
+
+	public String getDriverDirName() {
+		return "lib/SQL Server_2005";
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/driver/SQLServer2008DriverValuesProvider.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/driver/SQLServer2008DriverValuesProvider.java
new file mode 100644
index 0000000..5fbaf74
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/driver/SQLServer2008DriverValuesProvider.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2008 NexB Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Anton Safonov and Ahti Kitsik - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.driver;
+
+public class SQLServer2008DriverValuesProvider extends
+		SQLServerDriverValuesProvider {
+
+	public String getDriverDirName() {
+		return "lib/SQL Server_2008";
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/driver/SQLServer2012DriverValuesProvider.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/driver/SQLServer2012DriverValuesProvider.java
new file mode 100644
index 0000000..1bf53e2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/driver/SQLServer2012DriverValuesProvider.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2008 NexB Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Anton Safonov and Ahti Kitsik - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.driver;
+
+public class SQLServer2012DriverValuesProvider extends
+		SQLServerDriverValuesProvider {
+
+	public String getDriverDirName() {
+		return "lib/SQL Server_2012";
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/driver/SQLServer2014DriverValuesProvider.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/driver/SQLServer2014DriverValuesProvider.java
new file mode 100644
index 0000000..a6b0435
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/driver/SQLServer2014DriverValuesProvider.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2008 NexB Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Anton Safonov and Ahti Kitsik - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.driver;
+
+public class SQLServer2014DriverValuesProvider extends
+		SQLServerDriverValuesProvider {
+
+	public String getDriverDirName() {
+		return "lib/SQL Server_2014";
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/driver/SQLServerDriverValuesProvider.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/driver/SQLServerDriverValuesProvider.java
new file mode 100644
index 0000000..f71c5ff
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/driver/SQLServerDriverValuesProvider.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     nexB - implementation
+ *******************************************************************************/
+
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.driver;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.Enumeration;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.drivers.DefaultDriverValuesProvider;
+import org.eclipse.datatools.connectivity.drivers.IDriverValuesProvider;
+import org.osgi.framework.Bundle;
+
+public abstract class SQLServerDriverValuesProvider extends DefaultDriverValuesProvider {
+
+	public abstract String getDriverDirName();
+	
+	public String createDefaultValue(String key) {
+		/**
+		 * Check to see if the wrapper plug-in is in the Eclipse environment.
+		 * If it is we'll use it and grab the sqljdbc jar from there.
+		 */
+		if (key.equals(IDriverValuesProvider.VALUE_CREATE_DEFAULT)) {
+			Bundle[] bundles =
+				Platform.getBundles("org.eclipse.datatools.enablement.msft.sqlserver.driver", null); //$NON-NLS-1$
+			if (bundles != null && bundles.length > 0) {
+				Enumeration jars = bundles[0].findEntries(getDriverDirName(), "*.jar", true); //$NON-NLS-1$
+				while (jars != null && jars.hasMoreElements()) { 
+					URL url = (URL) jars.nextElement();
+					if (url != null) {
+						return Boolean.toString(true);
+					}
+				}
+			}
+		}
+		if (key.equals(IDriverValuesProvider.VALUE_JARLIST)) {
+			Bundle[] bundles =
+				Platform.getBundles("org.eclipse.datatools.enablement.msft.sqlserver.driver", null); //$NON-NLS-1$
+			if (bundles != null && bundles.length > 0) {
+				Enumeration jars = bundles[0].findEntries(getDriverDirName(), "*.jar", true); //$NON-NLS-1$
+				StringBuffer urls = null;
+				while (jars != null && jars.hasMoreElements()) { 
+					URL url = (URL) jars.nextElement();
+
+					if (url != null) {
+						try {
+							url = FileLocator.toFileURL(url);
+							IPath path = new Path(url.getFile());
+							if (urls == null) {
+								urls = new StringBuffer();
+							}
+							if (urls.length() > 0) {
+								urls.append(";");
+							}
+							urls.append(path.toOSString());
+						}
+						catch (IOException e) {
+							e.printStackTrace();
+						}
+					}
+				}
+				if (urls != null && urls.length() > 0) {
+					return urls.toString();
+				}
+			}
+		}
+		return super.createDefaultValue(key);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/loaders/SQL2000TableLoader.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/loaders/SQL2000TableLoader.java
new file mode 100644
index 0000000..6ade6aa
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/loaders/SQL2000TableLoader.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2008 NexB Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Anton Safonov and Ahti Kitsik - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableLoader;
+import org.eclipse.datatools.enablement.msft.internal.sqlserver.models.SQLServer2000JdbcTable;
+import org.eclipse.datatools.enablement.msft.internal.sqlserver.models.SQLServerJdbcTable;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+
+public class SQL2000TableLoader extends JDBCTableLoader {
+
+	public SQL2000TableLoader() {
+		super(null);
+		initFactories();
+	}
+
+	public SQL2000TableLoader(ICatalogObject catalogObject) {
+		super(catalogObject);
+		initFactories();
+	}
+
+	protected void initFactories() {
+		super.registerTableFactory(TYPE_TABLE, new SQLServerTableFactory());
+	}
+	
+	public static class SQLServerTableFactory extends TableFactory {
+		protected Table newTable() {
+			return new SQLServer2000JdbcTable(); 
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/loaders/SQL2005ColumnLoader.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/loaders/SQL2005ColumnLoader.java
new file mode 100644
index 0000000..65cac8c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/loaders/SQL2005ColumnLoader.java
@@ -0,0 +1,41 @@
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableColumnLoader;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.IdentitySpecifier;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+
+public class SQL2005ColumnLoader extends JDBCTableColumnLoader {
+
+	public SQL2005ColumnLoader() {
+		super(null);
+	}
+
+	protected void initialize(Column column, ResultSet rs) throws SQLException {
+		// Get the basic stuff right
+		super.initialize(column, rs);
+		
+		String typeName = rs.getString(COLUMN_TYPE_NAME).toUpperCase();
+		if (typeName.indexOf("IDENTITY") >= 0) {
+			
+			final Database database = this.getCatalogObject().getCatalogDatabase();
+			final DatabaseDefinition databaseDefinition = RDBCorePlugin
+					.getDefault().getDatabaseDefinitionRegistry()
+					.getDefinition(database);
+			final DataModelElementFactory factory = databaseDefinition
+					.getDataModelElementFactory();
+			IdentitySpecifier identitySpecifier = (IdentitySpecifier) factory
+					.create(SQLSchemaPackage.eINSTANCE
+							.getIdentitySpecifier());
+			column.setIdentitySpecifier(identitySpecifier);
+		}
+	}
+	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/loaders/SQL2005RoutineLoader.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/loaders/SQL2005RoutineLoader.java
new file mode 100644
index 0000000..e15ff80
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/loaders/SQL2005RoutineLoader.java
@@ -0,0 +1,249 @@
+/*******************************************************************************
+ * Copyright (c) 2008 NexB Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Anton Safonov and Ahti Kitsik - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCProcedure;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCUserDefinedFunction;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.loader.IConnectionFilterProvider;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCRoutineLoader;
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesPackage;
+import org.eclipse.datatools.modelbase.sql.routines.Source;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.emf.ecore.EClass;
+
+public class SQL2005RoutineLoader extends JDBCRoutineLoader {
+
+	public static final String COLUMN_ROUTINE_NAME = "ROUTINE_NAME";
+	public static final String COLUMN_ROUTINE_CATALOG = "SPECIFIC_CATALOG";
+	public static final String COLUMN_ROUTINE_SCHEMA = "SPECIFIC_SCHEMA";
+	public static final String COLUMN_ROUTINE_TYPE = "ROUTINE_TYPE";
+	public static final String COLUMN_ROUTINE_DEFINITION = "ROUTINE_DEFINITION";
+
+	private static final String ROUTINE_QUERY = "select SPECIFIC_CATALOG as \'" + COLUMN_ROUTINE_CATALOG + "\', "
+	+ "SPECIFIC_SCHEMA as \'" + COLUMN_ROUTINE_SCHEMA + "\', " + "ROUTINE_NAME as \'"
+	+ COLUMN_ROUTINE_NAME + "\', " + "ROUTINE_DEFINITION as \'" + COLUMN_ROUTINE_DEFINITION + "\', "
+	+ "ROUTINE_TYPE as \'" + COLUMN_ROUTINE_TYPE + "\' " 
+	+ "from catalogName.INFORMATION_SCHEMA.ROUTINES "
+	+ "where SPECIFIC_SCHEMA = ?";
+		
+	private IRoutineFactory mUserDefinedFunctionFactory;
+	private IRoutineFactory mProcedureFactory;
+
+	private static final String getRoutineQuery(String catalogName)
+	{
+		return ROUTINE_QUERY.replaceAll("catalogName", catalogName);
+	}
+	
+	public static class SQL2005ProcedureFactory extends ProcedureFactory {
+
+		private Database database = null;
+		private final ICatalogObject catalogObject;
+
+		public SQL2005ProcedureFactory(ICatalogObject catalogObject) {
+			this.catalogObject = catalogObject;
+		}
+
+		public void setDatabase(Database db) {
+			database = db;
+		}
+
+		public void initialize(Routine routine, ResultSet rs) throws SQLException {
+			String name = rs.getString(COLUMN_ROUTINE_NAME);
+
+			// strip out the version indicator
+			if (name.indexOf(";") > -1)
+				name = name.substring(0, name.indexOf(";") - 1);
+			routine.setName(name);
+
+			String source = rs.getString(COLUMN_ROUTINE_DEFINITION);
+			loadSource(routine, source, database);
+		}
+
+		protected Routine newRoutine() {
+			return new JDBCProcedure();
+		}
+
+	}
+
+	public static class SQL2005UserDefinedFunctionFactory extends SQL2005ProcedureFactory {
+
+		private final ICatalogObject catalogObject;
+
+		public SQL2005UserDefinedFunctionFactory(ICatalogObject catalogObject) {
+			super(catalogObject);
+			this.catalogObject = catalogObject;
+		}
+		
+		public EClass getRoutineEClass() {
+			return SQLRoutinesPackage.eINSTANCE.getUserDefinedFunction();
+		}
+
+		protected Routine newRoutine() {
+			return new JDBCUserDefinedFunction();
+		}
+	}
+
+	public SQL2005RoutineLoader() {
+		super(null);
+	}
+
+	public SQL2005RoutineLoader(ICatalogObject catalogObject) {
+		super(catalogObject);
+	}
+
+	public SQL2005RoutineLoader(ICatalogObject catalogObject, IConnectionFilterProvider connectionFilterProvider) {
+		super(catalogObject, connectionFilterProvider);
+		mUserDefinedFunctionFactory = new SQL2005UserDefinedFunctionFactory(catalogObject);
+		mProcedureFactory = new SQL2005ProcedureFactory(catalogObject);
+		this.setProcedureFactory(mProcedureFactory);
+		this.setUserDefinedFunctionFactory(mUserDefinedFunctionFactory);
+
+	}
+
+	public SQL2005RoutineLoader(ICatalogObject catalogObject, IConnectionFilterProvider connectionFilterProvider, IRoutineFactory udfFactory,
+			IRoutineFactory spFactory) {
+		super(catalogObject, connectionFilterProvider, udfFactory, spFactory);
+		mUserDefinedFunctionFactory = new SQL2005UserDefinedFunctionFactory(catalogObject);
+		mProcedureFactory = new SQL2005ProcedureFactory(catalogObject);
+		this.setProcedureFactory(mProcedureFactory);
+		this.setUserDefinedFunctionFactory(mUserDefinedFunctionFactory);
+	}
+
+	protected ResultSet createResultSet() throws SQLException {
+		String catalogName = getSchema().getCatalog().getName();
+		String schemaName = getSchema().getName();
+		
+		String query = getRoutineQuery(catalogName);
+
+		if (getJDBCFilterPattern() != null && getJDBCFilterPattern().length() > 0) {
+			String filter = " AND ALIAS LIKE " + getJDBCFilterPattern();//$NON-NLS-1$
+			query = query + filter;
+		}
+		query = query + " ORDER BY " + COLUMN_ROUTINE_NAME;
+
+		PreparedStatement prepareStatement = getCatalogObject().getConnection().prepareStatement(query);			
+		prepareStatement.setString(1, schemaName);
+		
+		return prepareStatement.executeQuery();
+	}
+
+	protected boolean isProcedure(ResultSet rs) throws SQLException {
+		return rs.getString(COLUMN_ROUTINE_TYPE).startsWith("P");
+	}
+
+	public IRoutineFactory getProcedureFactory() {
+		return this.mProcedureFactory;
+	}
+
+	public IRoutineFactory getUserDefinedFunctionFactory() {
+		return this.mUserDefinedFunctionFactory;
+	}
+
+	protected Routine processRow(ResultSet rs) throws SQLException {
+		ICatalogObject object = getCatalogObject();
+		Database database = object.getCatalogDatabase();
+		if (mProcedureFactory == null) {
+			mProcedureFactory = new SQL2005ProcedureFactory(object);
+			((SQL2005ProcedureFactory) mProcedureFactory).setDatabase(database);
+		}
+		if (mUserDefinedFunctionFactory == null) {
+			mUserDefinedFunctionFactory = new SQL2005UserDefinedFunctionFactory(object);
+			((SQL2005UserDefinedFunctionFactory) mUserDefinedFunctionFactory).setDatabase(database);
+		}
+		IRoutineFactory routineFactory = isProcedure(rs) ? mProcedureFactory : mUserDefinedFunctionFactory;
+		return routineFactory.createRoutine(rs);
+	}
+
+	public void loadRoutines(List containmentList, Collection existingRoutines) throws SQLException {
+		ResultSet rs = null;
+		try {
+			initActiveFilter();
+			ICatalogObject object = getCatalogObject();
+			Database database = object.getCatalogDatabase();
+			for (rs = createResultSet(); rs.next();) {
+				String routineName = rs.getString(COLUMN_ROUTINE_NAME);
+				if (routineName == null || isFiltered(routineName)) {
+					continue;
+				}
+				Routine routine = (Routine) getAndRemoveSQLObject(existingRoutines, routineName);
+				if (routine == null) {
+					routine = processRow(rs);
+					if (routine != null) {
+						containmentList.add(routine);
+					}
+				} else {
+					if (isProcedure(rs)) {
+						((SQL2005ProcedureFactory) mProcedureFactory).setDatabase(database);
+						mProcedureFactory.initialize(routine, rs);
+					} else {
+						((SQL2005UserDefinedFunctionFactory) mUserDefinedFunctionFactory).setDatabase(database);
+						mUserDefinedFunctionFactory.initialize(routine, rs);
+					}
+					containmentList.add(routine);
+					if (routine instanceof ICatalogObject) {
+						((ICatalogObject) routine).refresh();
+					}
+				}
+			}
+		}
+		finally {
+			if (rs != null) {
+				closeResultSet(rs);
+			}
+		}
+	}
+
+	private static void loadSource(Routine routine, String aliasInfo,
+			Database database) {
+		if (aliasInfo == null || aliasInfo.trim().length() == 0) 
+			return;
+
+		int index = -1;
+		int begin = aliasInfo.toLowerCase().indexOf("begin"); //$NON-NLS-1$
+		// so we would get the info after returns 
+		int returns = aliasInfo.toLowerCase().indexOf("returns");//$NON-NLS-1$
+
+		// if it doesn't have any source, then don't bother
+		if (begin == -1 && returns == -1)
+			return;
+		
+		if (begin == -1) // begin doesn't exist
+			index = returns;
+		else if (returns > -1 && begin > -1) // begins and returns exist
+			index = Math.min(returns, begin);
+		else // begin exists and returns doesn't exist
+			index = begin;
+ 		
+		// otherwise process the source
+		String body = aliasInfo.substring(index);
+		final DatabaseDefinition definition = RDBCorePlugin.getDefault()
+				.getDatabaseDefinitionRegistry().getDefinition(database);
+		final DataModelElementFactory factory = definition
+				.getDataModelElementFactory();
+
+		Source s = (Source) factory.create(SQLRoutinesPackage.eINSTANCE
+				.getSource());
+		s.setBody(body);
+		routine.setSource(s);
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/loaders/SQL2005SchemaLoader.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/loaders/SQL2005SchemaLoader.java
new file mode 100644
index 0000000..b282e15
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/loaders/SQL2005SchemaLoader.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2013 NexB Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Anton Safonov and Ahti Kitsik - initial API and implementation
+ *     Actuate Corporation - bug fix Bugzilla 348160
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCSchemaLoader;
+import org.eclipse.datatools.enablement.msft.internal.sqlserver.models.SqlServerSchema;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+
+public class SQL2005SchemaLoader extends JDBCSchemaLoader {
+
+	private static final String SCHEMA_QUERY = "select CATALOG_NAME as \'" + COLUMN_TABLE_CATALOG + "\', SCHEMA_NAME as \'" + COLUMN_TABLE_SCHEM + "\' from catalogName.INFORMATION_SCHEMA.SCHEMATA"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+	
+	private static final String getSchemaQuery(String catalogName)
+	{
+		return SCHEMA_QUERY.replaceAll("catalogName", catalogName); //$NON-NLS-1$
+	}
+	
+	public SQL2005SchemaLoader() {
+		super(null);
+	}
+	
+	public SQL2005SchemaLoader(ICatalogObject catalogObject) {
+		super(catalogObject);
+	}
+
+	protected Schema createSchema() {
+		return new SqlServerSchema();
+	}
+	
+	protected ResultSet createResultSet() throws SQLException {		
+        try {
+            // BZ 348160
+            return super.createResultSet();
+        }
+        catch( Exception e ) {
+            // fall back to use the original approach, which may have access permission issue
+    		String query = getSchemaQuery(getCatalog().getName());
+    		
+    		if (getJDBCFilterPattern() != null
+    				&& getJDBCFilterPattern().length() > 0) {
+    			String filter = " AND ALIAS LIKE " + getJDBCFilterPattern();//$NON-NLS-1$
+    			query = query + filter;
+    		}
+    		query = query + " ORDER BY " + COLUMN_TABLE_SCHEM; //$NON-NLS-1$
+    
+    		return getCatalogObject().getConnection().createStatement().executeQuery(query);
+        }
+	}
+
+    protected boolean isSchemaInCatalog( ResultSet rs ) throws SQLException {
+        if( super.isSchemaInCatalog( rs ) )
+            return true;
+
+        // handles the case where the JDBC driver, e.g. sqljdbc 1.2, returns inconsistent catalog name,
+        // i.e. if the result set's catalogName is "dbo", ignore it and
+        // simply checks whether this schema's catalog is the current catalog or
+        // one for objects without a catalog
+        String catalogName = rs.getString(COLUMN_TABLE_CATALOG);
+        if( catalogName == null )
+            return false;
+
+        if( catalogName.equals( "dbo" ) ) //$NON-NLS-1$
+            return isCurrentCatalog();
+
+        return false;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/loaders/SQL2005TableIndexLoader.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/loaders/SQL2005TableIndexLoader.java
new file mode 100644
index 0000000..0ba4a57
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/loaders/SQL2005TableIndexLoader.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2008 NexB Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Anton Safonov and Ahti Kitsik - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.loader.IConnectionFilterProvider;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableIndexLoader;
+import org.eclipse.datatools.enablement.msft.internal.sqlserver.models.SQLServerJdbcIndex;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+
+public class SQL2005TableIndexLoader extends JDBCTableIndexLoader {
+
+	public SQL2005TableIndexLoader() {
+		super(null);
+	}
+
+	public SQL2005TableIndexLoader(ICatalogObject catalogObject) {
+		super(catalogObject);
+	}
+
+	public SQL2005TableIndexLoader(ICatalogObject catalogObject,
+			IConnectionFilterProvider connectionFilterProvider) {
+		super(catalogObject, connectionFilterProvider);
+	}
+
+	protected Index createIndex() {
+		return new SQLServerJdbcIndex();
+	}
+	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/loaders/SQL2005TableLoader.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/loaders/SQL2005TableLoader.java
new file mode 100644
index 0000000..62b2f92
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/loaders/SQL2005TableLoader.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2008 NexB Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Anton Safonov and Ahti Kitsik - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableLoader;
+import org.eclipse.datatools.enablement.msft.internal.sqlserver.models.SQLServerJdbcTable;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+
+public class SQL2005TableLoader extends JDBCTableLoader {
+
+	public SQL2005TableLoader() {
+		super(null);
+		initFactories();
+	}
+
+	public SQL2005TableLoader(ICatalogObject catalogObject) {
+		super(catalogObject);
+		initFactories();
+	}
+
+	protected void initFactories() {
+		super.registerTableFactory(TYPE_TABLE, new SQLServerTableFactory());
+	}
+	
+	public static class SQLServerTableFactory extends TableFactory {
+		protected Table newTable() {
+			return new SQLServerJdbcTable(); 
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/loaders/SQL2005UDTypeLoader.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/loaders/SQL2005UDTypeLoader.java
new file mode 100644
index 0000000..9b258e0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/loaders/SQL2005UDTypeLoader.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2008 NexB Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Anton Safonov and Ahti Kitsik - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCUserDefinedTypeLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.SchemaObjectFilterProvider;
+import org.eclipse.datatools.modelbase.sql.datatypes.DistinctUserDefinedType;
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.datatypes.impl.FixedPrecisionDataTypeImpl;
+import org.eclipse.datatools.modelbase.sql.datatypes.impl.NumericalDataTypeImpl;
+
+public class SQL2005UDTypeLoader extends JDBCUserDefinedTypeLoader {
+
+	
+	private static final class DistinctTypeFactoryExtension extends DistinctTypeFactory {
+		public DistinctTypeFactoryExtension(DatabaseDefinition databaseDefinition) {
+			super(databaseDefinition);
+		}
+
+		public void initialize(UserDefinedType udt, ResultSet rs) throws SQLException {
+			super.initialize(udt, rs);
+
+			PredefinedDataType pdt = getDatabaseDefinition().getPredefinedDataType(rs.getString("BASE_NAME"));
+			if (pdt != null) {
+				// Assume first type listed is the appropriately named type.
+				if (pdt instanceof NumericalDataTypeImpl)
+				{
+					((NumericalDataTypeImpl) pdt).setPrecision(rs.getInt("precision"));
+				}
+				if (pdt instanceof FixedPrecisionDataTypeImpl)
+				{
+					((FixedPrecisionDataTypeImpl) pdt).setScale(rs.getInt("scale"));
+				}
+				((DistinctUserDefinedType) udt).setPredefinedRepresentation(pdt);
+			}
+		}
+	}
+
+	private static final String USER_DEFINED_TYPE_QUERY = "select userType.name as " + COLUMN_TYPE_NAME + ", baseType.user_type_id as " + COLUMN_BASE_TYPE + ", 2001 as " + COLUMN_DATA_TYPE + ", '' as " + COLUMN_REMARKS + ", baseType.name as BASE_NAME, baseType.system_type_id, baseType.precision, baseType.scale from catalogName.sys.types userType inner join catalogName.sys.schemas schemas on schemas.schema_id = userType.schema_id inner join catalogName.sys.types baseType on userType.system_type_id = baseType.user_type_id where userType.is_user_defined = 1 and schemas.name = ?";
+	
+	private static final String getUDTypeQuery(String catalogName)
+	{
+		return USER_DEFINED_TYPE_QUERY.replaceAll("catalogName", catalogName);
+	}
+
+	public SQL2005UDTypeLoader(ICatalogObject catalogObject) {
+		super(catalogObject, new SchemaObjectFilterProvider(ConnectionFilter.USER_DEFINED_TYPE_FILTER), new DistinctTypeFactoryExtension(RDBCorePlugin
+				.getDefault().getDatabaseDefinitionRegistry().getDefinition(catalogObject.getCatalogDatabase())), new StructTypeFactory(), null);
+	}
+
+	protected ResultSet createResultSet() throws SQLException {
+		String schemaName = getSchema().getName();		
+		String catalogName = getSchema().getCatalog().getName();
+		
+		getCatalogObject().getConnection().getMetaData().getUDTs(catalogName, schemaName, getJDBCFilterPattern(), null);
+		
+		PreparedStatement prepareStatement = getCatalogObject().getConnection().prepareStatement(getUDTypeQuery(catalogName));			
+		prepareStatement.setString(1, schemaName);
+		
+		return prepareStatement.executeQuery();
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/loaders/SQLCatalogUtils.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/loaders/SQLCatalogUtils.java
new file mode 100644
index 0000000..1779f8e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/loaders/SQLCatalogUtils.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2008 NexB Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Anton Safonov and Ahti Kitsik - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+public class SQLCatalogUtils {
+
+	static public void cleanupJDBCResouce(ResultSet rs, Statement stmt,
+			String oldCatalog, Connection conn) {
+		try {
+			if (rs != null)
+				rs.close();
+		} catch (SQLException e) {
+			// TODO log properly JDBCASEPlugin.getDefault().log(e);
+			e.printStackTrace();
+		}
+		try {
+			if (stmt != null)
+				stmt.close();
+		} catch (SQLException e) {
+			// TODO log properly JDBCASEPlugin.getDefault().log(e);
+			e.printStackTrace();
+		}
+		try {
+			if (oldCatalog != null)
+				conn.setCatalog(oldCatalog);
+		} catch (SQLException e) {
+			// TODO log properly JDBCASEPlugin.getDefault().log(e);
+			e.printStackTrace();
+		}
+	}
+	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/loaders/SQLs.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/loaders/SQLs.java
new file mode 100644
index 0000000..a6ad232
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/loaders/SQLs.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2008 NexB Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Anton Safonov and Ahti Kitsik - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders;
+
+public class SQLs {
+
+    public static final String QUERY_TABLE_TYPE_INFO = "SELECT o.id, o.type FROM dbo.sysobjects AS o, dbo.sysusers AS u WHERE o.uid = u.uid AND u.name = ? AND o.name = ? AND (o.type = 'U' OR o.type = 'S')";
+	
+	public static final String INDEX_INFO_QUERY = "select i.is_padded, s.no_recompute, i.ignore_dup_key, i.allow_row_locks, i.allow_page_locks, i.is_unique_constraint, i.is_primary_key from sys.indexes as i, sys.stats as s where i.object_id = ? and i.name = ? AND i.object_id=s.object_id AND i.name=s.name";
+
+	public static final String SELECT_OBJ_BY_NAME = "SELECT OBJ.name, sys.sql_modules.definition FROM sys.all_objects AS OBJ JOIN sys.sql_modules ON OBJ.object_id = sys.sql_modules.object_id where OBJ.name = ?";
+	
+	public static final String SELECT_OBJ_BY_NAME_2000 = "execute sp_helptext ?";
+
+	public static final String QUERY_TRIGGERS = "SELECT t.*, m.*, o.* FROM sys.triggers t INNER JOIN sys.sql_modules m ON t.object_id = m.object_id	inner join sys.objects o on o.object_id = t.parent_id WHERE t.type = 'TR' AND t.parent_class = 1 and o.name= ?";
+	
+	public static final String TRIGGER_SCHEMA = "select b.name from sys.all_objects a inner join sys.schemas b on a.schema_id=b.schema_id where object_id = ?";
+	
+	public static final String TRIGGER_EVENTS = "select b.type from sys.all_objects a inner join sys.trigger_events b on a.object_id=b.object_id where a.object_id = ?";
+		
+	public static final String QUERY_TRIGGERS_2000 = "execute sp_helptrigger ?";
+	
+	
+	
+	
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/models/SQLServer2000JdbcTable.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/models/SQLServer2000JdbcTable.java
new file mode 100644
index 0000000..b4eb191
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/models/SQLServer2000JdbcTable.java
@@ -0,0 +1,206 @@
+/*******************************************************************************
+ * Copyright (c) 2008 NexB Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Anton Safonov and Ahti Kitsik - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.models;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCTable;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQLCatalogUtils;
+import org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQLs;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.statements.SQLStatement;
+import org.eclipse.datatools.modelbase.sql.statements.SQLStatementDefault;
+import org.eclipse.datatools.modelbase.sql.statements.SQLStatementsPackage;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.emf.common.util.EList;
+
+public class SQLServer2000JdbcTable extends JDBCTable {
+
+	private Boolean tableTypeIdStatusLoaded = Boolean.FALSE;
+
+	private int id;
+
+	protected boolean triggerLoaded = false;
+
+	public int getId() {
+		synchronized (tableTypeIdStatusLoaded) {
+			if (!tableTypeIdStatusLoaded.booleanValue()) {
+				loadTableIdStat();
+			}
+		}
+
+		return this.id;
+	}
+
+	synchronized private void loadTableIdStat() {
+		Connection conn = this.getConnection();
+		PreparedStatement stmt = null;
+		ResultSet rs = null;
+		String oldCatalog = null;
+
+		try {
+			oldCatalog = conn.getCatalog();
+			conn.setCatalog(this.getSchema().getCatalog().getName());
+			stmt = conn.prepareStatement(SQLs.QUERY_TABLE_TYPE_INFO);
+			stmt.setString(1, this.getSchema().getName());
+			stmt.setString(2, this.getName());
+			rs = stmt.executeQuery();
+			while (rs.next()) {
+				this.id = rs.getInt(1);
+			}
+		} catch (SQLException e) {
+			// TODO log properly JDBCASEPlugin.getDefault().log(e);
+			e.printStackTrace();
+		} finally {
+			SQLCatalogUtils.cleanupJDBCResouce(rs, stmt, oldCatalog, conn);
+		}
+
+		this.tableTypeIdStatusLoaded = Boolean.TRUE;
+	}
+
+	private Schema getSchema(String schemaName) {
+		Schema s = this.getSchema();
+		if (s.getName().equals(schemaName))
+			return s;
+		Database d = s.getCatalog().getDatabase();
+		Iterator it = d.getSchemas().iterator();
+		while (it.hasNext()) {
+			s = (Schema) it.next();
+			if (s.getName().equals(schemaName))
+				return s;
+		}
+		Schema schema = new SqlServerSchema();
+		schema.setName(schemaName);
+		schema.setCatalog(s.getCatalog());
+		schema.setDatabase(d);
+
+		return schema;
+	}
+
+	protected synchronized void loadTriggers() {
+		if (this.triggerLoaded)
+			return;
+		EList triggerList = super.getTriggers();
+		Object[] list = triggerList.toArray();
+		clearTriggers(triggerList);
+		Connection connection = this.getConnection();
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);
+
+		try {
+			DataModelElementFactory factory = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(this.getCatalogDatabase())
+					.getDataModelElementFactory();
+
+			PreparedStatement s = connection.prepareStatement(SQLs.QUERY_TRIGGERS_2000);
+			s.setString(1, getName());
+
+			ResultSet r = s.executeQuery();
+			while (r.next()) {
+				SQLServerTrigger trigger;
+				final String trigName = r.getString("trigger_name"); //$NON-NLS-1$
+
+				Object element = findTrigger(list, trigName);
+
+				if (element != null) {
+					trigger = (SQLServerTrigger) element;
+					((ICatalogObject) element).refresh();
+				} else {
+					trigger = new SQLServerTrigger();
+				}
+				trigger.setConnection(connection);
+
+				trigger.setName(trigName);
+
+				trigger.setSchema(getSchema());
+
+				trigger.setInsertType(r.getInt("isinsert") == 1);
+				trigger.setUpdateType(r.getInt("isupdate") == 1);
+				trigger.setDeleteType(r.getInt("isdelete") == 1);
+
+				// body
+
+				final String text = executeQuery(connection, trigName);
+				SQLStatement body = (SQLStatement) factory.create(SQLStatementsPackage.eINSTANCE.getSQLStatementDefault());
+				((SQLStatementDefault) body).setSQL(text);
+				trigger.getActionStatement().add(body);
+
+				triggerList.add(trigger);
+			}
+
+			this.triggerLoaded = true;
+			r.close();
+			s.close();
+
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		this.eSetDeliver(deliver);
+
+	}
+
+	protected void clearTriggers(EList triggerList) {
+		for (Iterator it = triggerList.iterator(); it.hasNext();) {
+			SQLServerTrigger trigger = (SQLServerTrigger) it.next();
+			trigger.getActionStatement().clear();
+			trigger.setSchema(null);
+		}
+		triggerList.clear();
+	}
+
+	public EList getTriggers() {
+		if (!this.triggerLoaded)
+			this.loadTriggers();
+		return this.triggers;
+	}
+
+	protected Object findTrigger(Object[] list, String name) {
+		Object object = null;
+		for (int i = 0; i < list.length; i++) {
+			SQLObject sqlObject = (SQLObject) list[i];
+			if (sqlObject.getName().equals(name) && sqlObject.eClass() == SQLTablesPackage.eINSTANCE.getTrigger()) {
+				object = list[i];
+				break;
+			}
+		}
+		return object;
+	}
+
+	private String executeQuery(Connection connection, String name) {
+		try {
+			PreparedStatement stmt = connection.prepareStatement(SQLs.SELECT_OBJ_BY_NAME_2000);
+
+			stmt.setString(1, name);
+
+			ResultSet r = stmt.executeQuery();
+
+			StringBuffer statement = new StringBuffer();
+			while (r.next()) {
+				statement.append(r.getString(1));
+			}
+			return statement.toString();
+		} catch (SQLException e) {
+			// TODO log properly
+			e.printStackTrace();
+		}
+		return null;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/models/SQLServerJdbcIndex.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/models/SQLServerJdbcIndex.java
new file mode 100644
index 0000000..fa4242a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/models/SQLServerJdbcIndex.java
@@ -0,0 +1,132 @@
+/*******************************************************************************
+ * Copyright (c) 2008 NexB Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Anton Safonov and Ahti Kitsik - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.models;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCIndex;
+import org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQLCatalogUtils;
+import org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQLs;
+
+public class SQLServerJdbcIndex extends JDBCIndex {
+
+	private Boolean loadedExtendedIndexInfo = Boolean.FALSE;
+
+	private boolean padIndex;
+	private boolean statisticsNoRecompute;
+	private boolean ignoreDupKey;
+	private boolean allowRowLocks;
+	private boolean allowPageLocks;
+	private boolean uniqueConstraint;
+	private boolean primaryKey;
+
+	public boolean isPadIndex() {
+		synchronized (loadedExtendedIndexInfo) {
+			if (!loadedExtendedIndexInfo.booleanValue()) {
+				loadExtendedIndexInfo();
+			}
+		}
+
+		return padIndex;
+	}
+
+	public boolean isStatisticsNoRecompute() {
+		synchronized (loadedExtendedIndexInfo) {
+			if (!loadedExtendedIndexInfo.booleanValue()) {
+				loadExtendedIndexInfo();
+			}
+		}
+		return statisticsNoRecompute;
+	}
+
+	public boolean isIgnoreDupKey() {
+		synchronized (loadedExtendedIndexInfo) {
+			if (!loadedExtendedIndexInfo.booleanValue()) {
+				loadExtendedIndexInfo();
+			}
+		}
+		return ignoreDupKey;
+	}
+
+	public boolean isAllowRowLocks() {
+		synchronized (loadedExtendedIndexInfo) {
+			if (!loadedExtendedIndexInfo.booleanValue()) {
+				loadExtendedIndexInfo();
+			}
+		}
+		return allowRowLocks;
+	}
+
+	public boolean isAllowPageLocks() {
+		synchronized (loadedExtendedIndexInfo) {
+			if (!loadedExtendedIndexInfo.booleanValue()) {
+				loadExtendedIndexInfo();
+			}
+		}
+		return allowPageLocks;
+	}
+
+	public boolean isUniqueConstraint() {
+		synchronized (loadedExtendedIndexInfo) {
+			if (!loadedExtendedIndexInfo.booleanValue()) {
+				loadExtendedIndexInfo();
+			}
+		}
+		return uniqueConstraint;
+	}
+
+	public boolean isPrimaryKey() {
+		synchronized (loadedExtendedIndexInfo) {
+			if (!loadedExtendedIndexInfo.booleanValue()) {
+				loadExtendedIndexInfo();
+			}
+		}
+		return primaryKey;
+	}
+
+	synchronized private void loadExtendedIndexInfo() {
+		if (!(this.getTable() instanceof SQLServerJdbcTable))
+			return;
+
+		Connection conn = this.getConnection();
+		PreparedStatement stmt = null;
+		ResultSet rs = null;
+		String oldCatalog = null;
+		try {
+			oldCatalog = conn.getCatalog();
+			conn.setCatalog(this.getTable().getSchema().getCatalog().getName());
+			stmt = conn.prepareStatement(SQLs.INDEX_INFO_QUERY);
+			stmt.setInt(1, ((SQLServerJdbcTable) this.getTable()).getId());
+			stmt.setString(2, this.getName());
+			rs = stmt.executeQuery();
+			while (rs.next()) {
+				padIndex = rs.getBoolean(1);
+				statisticsNoRecompute = rs.getBoolean(2);
+				ignoreDupKey = rs.getBoolean(3);
+				allowRowLocks = rs.getBoolean(4);
+				allowPageLocks = rs.getBoolean(5);
+				uniqueConstraint = rs.getBoolean(6);
+				primaryKey = rs.getBoolean(7);
+			}
+		} catch (SQLException e) {
+			// TODO: log properly, e.g. JDBCASEPlugin.getDefault().log(e);
+			e.printStackTrace();
+		} finally {
+			SQLCatalogUtils.cleanupJDBCResouce(rs, stmt, oldCatalog, conn);
+		}
+
+		this.loadedExtendedIndexInfo = Boolean.TRUE;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/models/SQLServerJdbcTable.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/models/SQLServerJdbcTable.java
new file mode 100644
index 0000000..d547f0f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/models/SQLServerJdbcTable.java
@@ -0,0 +1,237 @@
+/*******************************************************************************
+ * Copyright (c) 2008 NexB Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Anton Safonov and Ahti Kitsik - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.models;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DataModelElementFactory;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCTable;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQLCatalogUtils;
+import org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQLs;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.statements.SQLStatement;
+import org.eclipse.datatools.modelbase.sql.statements.SQLStatementDefault;
+import org.eclipse.datatools.modelbase.sql.statements.SQLStatementsPackage;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.emf.common.util.EList;
+
+public class SQLServerJdbcTable extends JDBCTable {
+
+	private Boolean tableTypeIdStatusLoaded = Boolean.FALSE;
+
+	private int id;
+
+	protected boolean triggerLoaded = false;
+
+	public int getId() {
+		synchronized (tableTypeIdStatusLoaded) {
+			if (!tableTypeIdStatusLoaded.booleanValue()) {
+				loadTableIdStat();
+			}
+		}
+
+		return this.id;
+	}
+
+	synchronized private void loadTableIdStat() {
+		Connection conn = this.getConnection();
+		PreparedStatement stmt = null;
+		ResultSet rs = null;
+		String oldCatalog = null;
+
+		try {
+			oldCatalog = conn.getCatalog();
+			conn.setCatalog(this.getSchema().getCatalog().getName());
+			stmt = conn.prepareStatement(SQLs.QUERY_TABLE_TYPE_INFO);
+			stmt.setString(1, this.getSchema().getName());
+			stmt.setString(2, this.getName());
+			rs = stmt.executeQuery();
+			while (rs.next()) {
+				this.id = rs.getInt(1);
+			}
+		} catch (SQLException e) {
+			// TODO log properly JDBCASEPlugin.getDefault().log(e);
+			e.printStackTrace();
+		} finally {
+			SQLCatalogUtils.cleanupJDBCResouce(rs, stmt, oldCatalog, conn);
+		}
+
+		this.tableTypeIdStatusLoaded = Boolean.TRUE;
+	}
+
+	private Schema getSchema(String schemaName) {
+		Schema s = this.getSchema();
+		if (s.getName().equals(schemaName))
+			return s;
+		Database d = s.getCatalog().getDatabase();
+		Iterator it = d.getSchemas().iterator();
+		while (it.hasNext()) {
+			s = (Schema) it.next();
+			if (s.getName().equals(schemaName))
+				return s;
+		}
+		Schema schema = new SqlServerSchema();
+		schema.setName(schemaName);
+		schema.setCatalog(s.getCatalog());
+		schema.setDatabase(d);
+
+		return schema;
+	}
+
+	protected synchronized void loadTriggers() {
+		if (this.triggerLoaded)
+			return;
+		EList triggerList = super.getTriggers();
+		Object[] list = triggerList.toArray();
+		clearTriggers(triggerList);
+		Connection connection = this.getConnection();
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);
+
+		try {
+			DataModelElementFactory factory = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(this.getCatalogDatabase())
+					.getDataModelElementFactory();
+
+			PreparedStatement s = connection.prepareStatement(SQLs.QUERY_TRIGGERS);
+			s.setString(1, getName());
+			
+			ResultSet r = s.executeQuery();
+			while (r.next()) {
+				SQLServerTrigger trigger;
+				final String trigName = r.getString("name"); //$NON-NLS-1$
+				final long trigId = r.getLong("object_id"); //$NON-NLS-1$
+
+				Object element = findTrigger(list, trigName);
+
+				if (element != null) {
+					trigger = (SQLServerTrigger) element;
+					((ICatalogObject) element).refresh();
+				} else {
+					trigger = new SQLServerTrigger();
+				}
+				trigger.setConnection(connection);
+				
+				trigger.setName(trigName);
+
+				PreparedStatement s1 = connection.prepareStatement(SQLs.TRIGGER_SCHEMA);
+				s1.setLong(1, trigId);
+				ResultSet r1 = s1.executeQuery();
+				
+				if (r1.next()){
+					trigger.setSchema(this.getSchema(r1.getString("name")));
+				}
+				
+				s1 = connection.prepareStatement(SQLs.TRIGGER_EVENTS);
+				s1.setLong(1, trigId);
+				r1 = s1.executeQuery();
+
+				while (r1.next()){
+
+					switch (r1.getInt(1)) {
+					case 1:
+						trigger.setInsertType(true); //$NON-NLS-1$
+					break;
+					case 2:
+						trigger.setUpdateType(true); //$NON-NLS-1$
+						break;
+					case 3:
+						trigger.setDeleteType(true); //$NON-NLS-1$
+						break;
+
+					default:
+						break;
+					}
+					
+				}
+//				final String trigTime = r.getString("FIRINGTIME"); //$NON-NLS-1$
+//				if (trigTime.equals("A"))trigger.setActionTime(ActionTimeType.AFTER_LITERAL); //$NON-NLS-1$
+//				else if (trigTime.equals("B"))trigger.setActionTime(ActionTimeType.BEFORE_LITERAL); //$NON-NLS-1$
+//				else if (r.getInt("is_instead_of_trigger")==1)trigger.setActionTime(ActionTimeType.INSTEADOF_LITERAL); //$NON-NLS-1$
+//				else
+//					continue;
+//				
+//				final String granularity = r.getString("TYPE"); //$NON-NLS-1$
+//				if (granularity.equals("S"))trigger.setActionGranularity(ActionGranularityType.STATEMENT_LITERAL); //$NON-NLS-1$
+//				else if (granularity.equals("R"))trigger.setActionGranularity(ActionGranularityType.ROW_LITERAL); //$NON-NLS-1$
+//				else
+//					continue;
+
+				
+//				String columns = r.getString("REFERENCEDCOLUMNS"); //$NON-NLS-1$
+//				if (columns != null) {
+//					EList updateColumns = trigger.getTriggerColumn();
+//					EList columnList = this.getColumns();
+//					columns = columns.substring(columns.indexOf("(") + 1, columns.indexOf(")")); //$NON-NLS-1$ //$NON-NLS-2$
+//					StringTokenizer tokenizer = new StringTokenizer(columns, ","); //$NON-NLS-1$
+//					while (tokenizer.hasMoreTokens()) {
+//						String token = tokenizer.nextToken().trim();
+//						Column column = (Column) columnList.get(Integer.parseInt(token) - 1);
+//						updateColumns.add(column);
+//					}
+//				}
+
+				// body
+				final String text = r.getString("definition"); //$NON-NLS-1$
+				SQLStatement body = (SQLStatement) factory.create(SQLStatementsPackage.eINSTANCE.getSQLStatementDefault());
+				((SQLStatementDefault) body).setSQL(text);
+				trigger.getActionStatement().add(body);
+
+				triggerList.add(trigger);
+			}
+
+			this.triggerLoaded = true;
+			r.close();
+			s.close();
+
+		} catch (Exception e) {
+			System.out.println(e.toString());
+		}
+
+		this.eSetDeliver(deliver);
+
+	}
+
+	protected void clearTriggers(EList triggerList) {
+		for (Iterator it = triggerList.iterator(); it.hasNext();) {
+			SQLServerTrigger trigger = (SQLServerTrigger) it.next();
+			trigger.getActionStatement().clear();
+			trigger.setSchema(null);
+		}
+		triggerList.clear();
+	}
+
+	public EList getTriggers() {
+		if (!this.triggerLoaded)
+			this.loadTriggers();
+		return this.triggers;
+	}
+
+	protected Object findTrigger(Object[] list, String name) {
+		Object object = null;
+		for (int i = 0; i < list.length; i++) {
+			SQLObject sqlObject = (SQLObject) list[i];
+			if (sqlObject.getName().equals(name) && sqlObject.eClass() == SQLTablesPackage.eINSTANCE.getTrigger()) {
+				object = list[i];
+				break;
+			}
+		}
+		return object;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/models/SQLServerTrigger.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/models/SQLServerTrigger.java
new file mode 100644
index 0000000..d26e109
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/models/SQLServerTrigger.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2008 NexB Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Anton Safonov and Ahti Kitsik - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.models;
+
+import java.sql.Connection;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.tables.impl.TriggerImpl;
+
+public class SQLServerTrigger extends TriggerImpl implements ICatalogObject{
+
+	
+	private Connection connection;
+
+	public SQLServerTrigger() {
+	}
+
+	public void refresh() {
+//		if (this.columnLoaded) {
+//			this.triggerColumn.clear();
+//			this.columnLoaded = false;
+//		}
+		RefreshManager.getInstance().referesh(this);
+	}
+	
+	
+	public Connection getConnection() {
+		if (connection !=null)
+			return connection;
+		Database db = this.getCatalogDatabase();
+		if (db instanceof ICatalogObject) {
+			return ((ICatalogObject) db).getConnection();
+		}
+		return null;
+	}
+
+	public Database getCatalogDatabase() {
+		return this.getSchema().getDatabase();
+	}
+
+	public void setConnection(Connection connection) {
+		this.connection = connection;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/models/SqlServerSchema.java b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/models/SqlServerSchema.java
new file mode 100644
index 0000000..020761c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.msft.sqlserver/src/org/eclipse/datatools/enablement/msft/internal/sqlserver/models/SqlServerSchema.java
@@ -0,0 +1,373 @@
+/*******************************************************************************
+ * Copyright (c) 2008 NexB Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Anton Safonov and Ahti Kitsik - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.msft.internal.sqlserver.models;
+
+import java.lang.ref.SoftReference;
+import java.sql.Connection;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.RefreshManager;
+import org.eclipse.datatools.connectivity.sqm.core.util.CatalogLoaderOverrideManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilterListener;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.DatabaseConnectionRegistry;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCBaseLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCRoutineLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCUserDefinedTypeLoader;
+import org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005RoutineLoader;
+import org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005TableLoader;
+import org.eclipse.datatools.enablement.msft.internal.sqlserver.loaders.SQL2005UDTypeLoader;
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataTypesPackage;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Catalog;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.schema.impl.SchemaImpl;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+/**
+ *	Thank you DerbyCatalogSchema :)
+ */
+// FIXME extend JDBCSchema and remove duplicate items
+public class SqlServerSchema extends SchemaImpl implements ICatalogObject{
+
+	
+	private Boolean tablesLoaded = Boolean.FALSE;
+	private SoftReference tableLoaderRef;
+
+	private Boolean routinesLoaded = Boolean.FALSE;
+
+	private SoftReference routineLoaderRef;
+
+	private Boolean udtsLoaded = Boolean.FALSE;
+
+	private SoftReference udtLoaderRef;
+
+
+	private transient ConnectionFilterListener filterListener = new ConnectionFilterListener() {
+
+		public void connectionFilterAdded(String filterKey) {
+			handleFilterChanged(filterKey);
+		}
+
+		public void connectionFilterRemoved(String filterKey) {
+			handleFilterChanged(filterKey);
+		}
+
+	};
+
+	public SqlServerSchema() {
+	}
+
+	/**
+	 * @generated NOT
+	 */
+	public NotificationChain basicSetCatalog(Catalog newCatalog,
+			NotificationChain msgs) {
+		if (catalog != null && catalog.getDatabase() != null) {
+			ConnectionInfo connectionInfo = DatabaseConnectionRegistry
+					.getInstance().getConnectionForDatabase(
+							catalog.getDatabase());
+			connectionInfo.removeFilterListener(filterListener);
+		}
+		if (newCatalog != null && newCatalog.getDatabase() != null) {
+			ConnectionInfo connectionInfo = DatabaseConnectionRegistry
+					.getInstance().getConnectionForDatabase(
+							newCatalog.getDatabase());
+			connectionInfo.addFilterListener(filterListener);
+		}
+		return super.basicSetCatalog(newCatalog, msgs);
+	}
+
+	protected JDBCRoutineLoader createRoutineLoader() {
+		DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().
+		getDefinition(this.getCatalogDatabase());
+
+		JDBCBaseLoader loader =
+			CatalogLoaderOverrideManager.INSTANCE.getLoaderForDatabase(databaseDefinition, 
+					SQLRoutinesPackage.eINSTANCE.getRoutine().getInstanceClassName());
+
+		if (loader != null) {
+			JDBCRoutineLoader routineLoader = (JDBCRoutineLoader) loader;
+			routineLoader.setCatalogObject(this);
+			return routineLoader;
+		}
+		return new SQL2005RoutineLoader(this);
+	}
+
+	protected JDBCTableLoader createTableLoader() {
+			DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(this.getCatalogDatabase());
+
+		JDBCBaseLoader loader =
+			CatalogLoaderOverrideManager.INSTANCE.getLoaderForDatabase(databaseDefinition, 
+					SQLTablesPackage.eINSTANCE.getTable().getInstanceClassName());
+
+		if (loader != null) {
+			JDBCTableLoader tableLoader = (JDBCTableLoader) loader;
+			tableLoader.setCatalogObject(this);
+			return tableLoader;
+		}
+		return new SQL2005TableLoader(this);
+	}
+
+		protected JDBCUserDefinedTypeLoader createUDTLoader() {
+		DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().
+		getDefinition(this.getCatalogDatabase());
+
+		JDBCBaseLoader loader =
+			CatalogLoaderOverrideManager.INSTANCE.getLoaderForDatabase(databaseDefinition, 
+					SQLDataTypesPackage.eINSTANCE.getUserDefinedType().getInstanceClassName());
+
+		if (loader != null) {
+			JDBCUserDefinedTypeLoader udtLoader = (JDBCUserDefinedTypeLoader) loader;
+			udtLoader.setCatalogObject(this);
+			return udtLoader;
+		}
+		return new JDBCUserDefinedTypeLoader(this);
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		switch (eDerivedStructuralFeatureID(eFeature)) {
+		case SQLSchemaPackage.SCHEMA__TABLES:
+			getTables();
+			break;
+		case SQLSchemaPackage.SCHEMA__ROUTINES:
+			getRoutines();
+			break;
+		case SQLSchemaPackage.SCHEMA__USER_DEFINED_TYPES:
+			getUserDefinedTypes();
+			break;
+		}
+		return super.eIsSet(eFeature);
+	}
+
+	public Database getCatalogDatabase() {
+		return getCatalog().getDatabase();
+	}
+
+	public Connection getConnection() {
+		Database db = getCatalogDatabase();
+		if (db instanceof ICatalogObject) {
+			return ((ICatalogObject) db).getConnection();
+		}
+		return null;
+	}
+
+	private String getRoutineFilterKey() {
+		return getCatalog().getName() + ConnectionFilter.FILTER_SEPARATOR
+				+ getName() + ConnectionFilter.FILTER_SEPARATOR
+				+ ConnectionFilter.STORED_PROCEDURE_FILTER;
+	}
+
+	protected final JDBCRoutineLoader getRoutineLoader() {
+		if (routineLoaderRef == null || routineLoaderRef.get() == null) {
+			routineLoaderRef = new SoftReference(createRoutineLoader());
+		}
+		return (JDBCRoutineLoader) routineLoaderRef.get();
+	}
+
+	public EList getRoutines() {
+		synchronized (routinesLoaded) {
+			if (!routinesLoaded.booleanValue())
+				loadRoutines();
+		}
+		return super.getRoutines();
+	}
+
+	private String getTableFilterKey() {
+		return getCatalog().getName() + ConnectionFilter.FILTER_SEPARATOR
+				+ getName() + ConnectionFilter.FILTER_SEPARATOR
+				+ ConnectionFilter.TABLE_FILTER;
+	}
+
+	protected final JDBCTableLoader getTableLoader() {
+		if (tableLoaderRef == null || tableLoaderRef.get() == null) {
+			tableLoaderRef = new SoftReference(createTableLoader());
+		}
+		return (JDBCTableLoader) tableLoaderRef.get();
+	}
+
+	public EList getTables() {
+		synchronized (tablesLoaded) {
+			if (!tablesLoaded.booleanValue())
+				loadTables();
+		}
+		return super.getTables();
+	}
+
+	private String getUDTFilterKey() {
+		return getCatalog().getName() + ConnectionFilter.FILTER_SEPARATOR
+				+ getName() + ConnectionFilter.FILTER_SEPARATOR
+				+ ConnectionFilter.USER_DEFINED_TYPE_FILTER;
+	}
+
+	protected final JDBCUserDefinedTypeLoader getUDTLoader() {
+		if (udtLoaderRef == null || udtLoaderRef.get() == null) {
+			udtLoaderRef = new SoftReference(new SQL2005UDTypeLoader(this));
+		}
+		return (JDBCUserDefinedTypeLoader) udtLoaderRef.get();
+	}
+	public EList getUserDefinedTypes() {
+		synchronized (udtsLoaded) {
+			if (!routinesLoaded.booleanValue())
+				loadUDTs();
+		}
+		return super.getUserDefinedTypes();
+	}
+	private void handleFilterChanged(String filterKey) {
+		boolean refresh = false;
+		if (catalog == null || catalog.getDatabase() == null) return;
+		ConnectionInfo conInf = DatabaseConnectionRegistry.getInstance()
+				.getConnectionForDatabase(getCatalogDatabase());
+		if (tablesLoaded.booleanValue()
+				&& filterKey.equals(getTableFilterKey())
+				|| (conInf != null
+						&& conInf.getFilter(getTableFilterKey()) == null && (ConnectionFilter.TABLE_FILTER
+						.equals(filterKey) || filterKey.equals(getCatalog()
+						.getName()
+						+ ConnectionFilter.FILTER_SEPARATOR
+						+ ConnectionFilter.TABLE_FILTER)))) {
+			tablesLoaded = Boolean.FALSE;
+			getTableLoader().clearTables(super.getTables());
+			refresh = true;
+		}
+		if (routinesLoaded.booleanValue()
+				&& filterKey.equals(getRoutineFilterKey())
+				|| (conInf != null
+						&& conInf.getFilter(getRoutineFilterKey()) == null && (ConnectionFilter.STORED_PROCEDURE_FILTER
+						.equals(filterKey) || filterKey.equals(getCatalog()
+						.getName()
+						+ ConnectionFilter.FILTER_SEPARATOR
+						+ ConnectionFilter.STORED_PROCEDURE_FILTER)))) {
+			routinesLoaded = Boolean.FALSE;
+			getRoutineLoader().clearRoutines(super.getRoutines());
+			refresh = true;
+		}
+		if (udtsLoaded.booleanValue()
+				&& filterKey.equals(getUDTFilterKey())
+				|| (conInf != null
+						&& conInf.getFilter(getUDTFilterKey()) == null && (ConnectionFilter.USER_DEFINED_TYPE_FILTER
+						.equals(filterKey) || filterKey.equals(getCatalog()
+						.getName()
+						+ ConnectionFilter.FILTER_SEPARATOR
+						+ ConnectionFilter.USER_DEFINED_TYPE_FILTER)))) {
+			udtsLoaded = Boolean.FALSE;
+			getUDTLoader().clearUDTs(super.getUserDefinedTypes());
+			refresh = true;
+		}
+		if (refresh) {
+			RefreshManager.getInstance().referesh(this);
+		}
+	}
+	private void loadRoutines() {
+		synchronized (routinesLoaded) {
+			boolean deliver = eDeliver();
+			try {
+				List container = super.getRoutines();
+				List existingRoutines = new ArrayList(container);
+				
+				eSetDeliver(false);
+
+				container.clear();
+
+				getRoutineLoader().loadRoutines(container, existingRoutines);
+
+				getRoutineLoader().clearRoutines(existingRoutines);
+
+				routinesLoaded = Boolean.TRUE;
+			}
+			catch (Exception e) {
+				e.printStackTrace();
+			}
+			finally {
+				eSetDeliver(deliver);
+			}
+		}
+	}
+	private void loadTables() {
+		synchronized (tablesLoaded) {
+			boolean deliver = eDeliver();
+			try {
+				List container = super.getTables();
+				List existingTables = new ArrayList(container);
+				
+				eSetDeliver(false);
+
+				container.clear();
+
+				getTableLoader().loadTables(container, existingTables);
+
+				getTableLoader().clearTables(existingTables);
+
+				tablesLoaded = Boolean.TRUE;
+			}
+			catch (Exception e) {
+				e.printStackTrace();
+			}
+			finally {
+				eSetDeliver(deliver);
+			}
+		}
+	}
+	private void loadUDTs() {
+		synchronized (routinesLoaded) {
+			boolean deliver = eDeliver();
+			try {
+				List container = super.getUserDefinedTypes();
+				List existingUDTs = new ArrayList(container);
+				
+				eSetDeliver(false);
+
+				container.clear();
+
+				getUDTLoader().loadUDTs(container, existingUDTs);
+
+				getUDTLoader().clearUDTs(existingUDTs);
+
+				udtsLoaded = Boolean.TRUE;
+			}
+			catch (Exception e) {
+				e.printStackTrace();
+			}
+			finally {
+				eSetDeliver(deliver);
+			}
+		}
+	}
+	public void refresh() {
+		synchronized (tablesLoaded) {
+			if (tablesLoaded.booleanValue()) {
+				tablesLoaded = Boolean.FALSE;
+			}
+		}
+		synchronized (routinesLoaded) {
+			if (routinesLoaded.booleanValue()) {
+				routinesLoaded = Boolean.FALSE;
+			}
+		}
+		synchronized (udtsLoaded) {
+			if (udtsLoaded.booleanValue()) {
+				udtsLoaded = Boolean.FALSE;
+			}
+		}
+
+		RefreshManager.getInstance().referesh(this);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/.gitignore b/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/.gitignore
new file mode 100644
index 0000000..60463af
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/.gitignore
@@ -0,0 +1,2 @@
+bin
+build.xml
diff --git a/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/.project b/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/.project
new file mode 100644
index 0000000..6e61d15
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/.project
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.mysql.dbdefinition</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..6ea466a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,5 @@
+#Wed May 09 17:55:28 EDT 2007
+eclipse.preferences.version=1
+encoding//runtime/vendors/MySql_4.0/MySql_4.0.xmi=ASCII
+encoding//runtime/vendors/MySql_5.0/MySql_5.0.xmi=ASCII
+encoding//runtime/vendors/MySql_5.1/MySql_5.1.xmi=ASCII
diff --git a/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..2b3bbeb
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.datatools.enablement.mysql.dbdefinition; singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/about.html b/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/build.properties b/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/build.properties
new file mode 100644
index 0000000..74be917
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/build.properties
@@ -0,0 +1,21 @@
+###############################################################################
+# Copyright (c) 2005 Versant Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     Versant Corporation - initial API and implementation
+###############################################################################
+bin.includes = runtime/,\
+               plugin.xml,\
+               plugin.properties,\
+               about.html,\
+               META-INF/
+plugin.version =	1.0.1.200709181
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/plugin.properties b/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/plugin.properties
new file mode 100644
index 0000000..595bd47
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/plugin.properties
@@ -0,0 +1,20 @@
+###############################################################################
+# Copyright (c) 2005 Versant Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     Versant Corporation - initial API and implementation
+###############################################################################
+pluginName=Eclipse Data Tools Platform MySQL Database Definition Plug-in
+providerName=Eclipse Data Tools Platform
+4.0_ProductString = MySQL
+4.0_VersionString = 4.0
+4.1_ProductString = MySQL
+4.1_VersionString = 4.1
+5.0_ProductString = MySQL
+5.0_VersionString = 5.0
+5.1_ProductString = MySQL
+5.1_VersionString = 5.1
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/plugin.xml b/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/plugin.xml
new file mode 100644
index 0000000..74ced1e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/plugin.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+   
+   <extension
+         point="org.eclipse.datatools.connectivity.sqm.core.databaseDefinition">
+      <definition
+            version="4.0"
+            product="MySql"
+            productDisplayString="%4.0_ProductString"
+            versionDisplayString="%4.0_VersionString"
+            file="runtime/vendors/MySql_4.0/MySql_4.0.xmi">
+      </definition>
+      <definition
+            version="4.1"
+            product="MySql"
+            productDisplayString="%4.1_ProductString"
+            versionDisplayString="%4.1_VersionString"
+            file="runtime/vendors/MySql_4.1/MySql_4.1.xmi">
+      </definition>
+	  <definition
+            version="5.0"
+            product="MySql"
+            productDisplayString="%5.0_ProductString"
+            versionDisplayString="%5.0_VersionString"
+            file="runtime/vendors/MySql_5.0/MySql_5.0.xmi">
+      </definition>
+	  <definition
+            version="5.1"
+            product="MySql"
+            productDisplayString="%5.1_ProductString"
+            versionDisplayString="%5.1_VersionString"
+            file="runtime/vendors/MySql_5.1/MySql_5.1.xmi">
+      </definition>
+   </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/runtime/vendors/MySql_4.0/MySql_4.0.xmi b/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/runtime/vendors/MySql_4.0/MySql_4.0.xmi
new file mode 100644
index 0000000..84eb278
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/runtime/vendors/MySql_4.0/MySql_4.0.xmi
@@ -0,0 +1,450 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="MySql" version="4.0" maximumIdentifierLength="64" joinSupported="true" tablespacesSupported="false" maximumCommentLength="60" schemaSupported="false" aliasSupported="true" SQLStatementSupported="true">
+  <predefinedDataTypeDefinitions xmi:id="BIT_1" keyConstraintSupported="true"
+maximumValue="1" minimumValue="0" primitiveType="SMALLINT" jdbcEnumType="-6"
+javaClassName="byte">
+    <defaultValueTypes>0</defaultValueTypes>
+    <name>BIT</name>
+    <name>BOOL</name>
+    <name>BOOLEAN</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TINYINT_UNSIGNED"
+keyConstraintSupported="true" maximumValue="255" minimumValue="0"
+primitiveType="SMALLINT" jdbcEnumType="-6" javaClassName="byte">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TINYINT UNSIGNED</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_UNSIGNED"
+keyConstraintSupported="true" maximumValue="65535" minimumValue="0"
+primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="int">
+    <defaultValueTypes>0</defaultValueTypes>
+    <name>SMALLINT UNSIGNED</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="MEDIUMINT_UNSIGNED"
+keyConstraintSupported="true" maximumValue="16777215" minimumValue="0"
+primitiveType="SMALLINT" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>0</defaultValueTypes>
+    <name>MEDIUMINT UNSIGNED</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_UNSIGNED"
+keyConstraintSupported="true" maximumValue="4294967295" minimumValue="0"
+primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>0</defaultValueTypes>
+    <name>INTEGER UNSIGNED</name>
+    <name>INT UNSIGNED</name>    
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_UNSIGNED"
+keyConstraintSupported="true" identitySupported="true" primitiveType="BIGINT"
+jdbcEnumType="-5" javaClassName="java.math.BigInteger">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIGINT UNSIGNED</name>
+    <name>SERIAL</name>    
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_UNSIGNED"
+keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7"
+javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL UNSIGNED</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_UNSIGNED_PRECISION"
+keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8"
+javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE UNSIGNED</name>
+    <name>DOUBLE UNSIGNED PRECISION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_UNSIGNED"
+keyConstraintSupported="true" primitiveType="FLOAT" jdbcEnumType="6"
+javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT UNSIGNED</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_UNSIGNED"
+scaleSupported="true" precisionSupported="true" maximumPrecision="64"
+keyConstraintSupported="true" primitiveType="DECIMAL" jdbcEnumType="3"
+javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL UNSIGNED</name>
+    <name>DEC UNSIGNED</name>
+  </predefinedDataTypeDefinitions>
+    -<predefinedDataTypeDefinitions xmi:id="SMALLINT_2" keyConstraintSupported="true" maximumValue="127" minimumValue="-128" primitiveType="SMALLINT" jdbcEnumType="-6" javaClassName="byte">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TINYINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" maximumValue="32767" minimumValue="-32768" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_2" keyConstraintSupported="true" maximumValue="8388607" minimumValue="-8388608" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>MEDIUMINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" maximumValue="2147483647" minimumValue="-2147483648" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INT</name>
+    <name>INTEGER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="java.math.BigInteger">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIGINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE</name>
+    <name>DOUBLE PRECISION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" keyConstraintSupported="true" primitiveType="FLOAT" jdbcEnumType="6" javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" scaleSupported="true" precisionSupported="true" maximumPrecision="64" keyConstraintSupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" scaleSupported="true" precisionSupported="true" maximumPrecision="64" keyConstraintSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIME_1" keyConstraintSupported="true" primitiveType="TIME" jdbcEnumType="92" javaClassName="java.sql.Time">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_2" keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.util.Date">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATETIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="255" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <name>CHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="255" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <name>VARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_1" defaultSupported="false" maximumLength="256" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TINYBLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_2" defaultSupported="false" maximumLength="65536" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_3" defaultSupported="false" maximumLength="16777216" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>MEDIUMBLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_4" defaultSupported="false" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONGBLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" keyConstraintSupported="true" defaultSupported="false" maximumLength="256" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TINYTEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_2" keyConstraintSupported="true" defaultSupported="false" maximumLength="65536" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_3" keyConstraintSupported="true" defaultSupported="false" maximumLength="16777216" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>MEDIUMTEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_4" keyConstraintSupported="true" defaultSupported="false" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONGTEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="ENUM" keyConstraintSupported="false" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>ENUM</name>
+  </predefinedDataTypeDefinitions>
+
+  <storedProcedureDefinition/>
+  <triggerDefinition/>
+  <columnDefinition maximumIdentifierLength="64" identitySupported="true" identityIncrementSupported="true"/>
+  <constraintDefinition clusteredPrimaryKeySupported="true" clusteredUniqueConstraintSupported="true" primaryKeyNullable="true" uniqueKeyNullable="true">
+    <parentUpdateDRIRuleType>RESTRICT</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>CASCADE</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>SET_NULL</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>RESTRICT</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>SET_NULL</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+  </constraintDefinition>
+  <indexDefinition/>
+  <udtDefinition/>
+  <tableDefinition maximumIdentifierLength="64"/>
+  <queryDefinition identifierQuoteString="`" hostVariableMarker="@" hostVariableMarkerSupported="true"/>
+  <viewDefinition maximumIdentifierLength="64"/>
+  <SQLSyntaxDefinition>
+    <keywords>ADD</keywords>
+    <keywords>ALL</keywords>
+    <keywords>ALTER</keywords>
+    <keywords>ANALYZE</keywords>
+    <keywords>AND</keywords>
+    <keywords>AS</keywords>
+    <keywords>ASC</keywords>
+    <keywords>ASENSITIVE</keywords>
+    <keywords>BEFORE</keywords>
+    <keywords>BETWEEN</keywords>
+    <keywords>BIGINT</keywords>
+    <keywords>BINARY</keywords>
+    <keywords>BLOB</keywords>
+    <keywords>BOTH</keywords>
+    <keywords>BY</keywords>
+    <keywords>CALL</keywords>
+    <keywords>CASCADE</keywords>
+    <keywords>CASE</keywords>
+    <keywords>CHANGE</keywords>
+    <keywords>CHAR</keywords>
+    <keywords>CHARACTER</keywords>
+    <keywords>CHECK</keywords>
+    <keywords>COLLATE</keywords>
+    <keywords>COLUMN</keywords>
+    <keywords>CONDITION</keywords>
+    <keywords>CONNECTION</keywords>
+    <keywords>CONSTRAINT</keywords>
+    <keywords>CONTINUE</keywords>
+    <keywords>CONVERT</keywords>
+    <keywords>CREATE</keywords>
+    <keywords>CROSS</keywords>
+    <keywords>CURRENT_DATE</keywords>
+    <keywords>CURRENT_TIME</keywords>
+    <keywords>CURRENT_TIMESTAMP</keywords>
+    <keywords>CURRENT_USER</keywords>
+    <keywords>CURSOR</keywords>
+    <keywords>DATABASE</keywords>
+    <keywords>DATABASES</keywords>
+    <keywords>DAY_HOUR</keywords>
+    <keywords>DAY_MICROSECOND</keywords>
+    <keywords>DAY_MINUTE</keywords>
+    <keywords>DAY_SECOND</keywords>
+    <keywords>DEC</keywords>
+    <keywords>DECIMAL</keywords>
+    <keywords>DECLARE</keywords>
+    <keywords>DEFAULT</keywords>
+    <keywords>DELAYED</keywords>
+    <keywords>DELETE</keywords>
+    <keywords>DESC</keywords>
+    <keywords>DESCRIBE</keywords>
+    <keywords>DETERMINISTIC</keywords>
+    <keywords>DISTINCT</keywords>
+    <keywords>DISTINCTROW</keywords>
+    <keywords>DIV</keywords>
+    <keywords>DOUBLE</keywords>
+    <keywords>DROP</keywords>
+    <keywords>DUAL</keywords>
+    <keywords>EACH</keywords>
+    <keywords>ELSE</keywords>
+    <keywords>ELSEIF</keywords>
+    <keywords>ENCLOSED</keywords>
+    <keywords>ESCAPED</keywords>
+    <keywords>EXISTS</keywords>
+    <keywords>EXIT</keywords>
+    <keywords>EXPLAIN</keywords>
+    <keywords>FALSE</keywords>
+    <keywords>FETCH</keywords>
+    <keywords>FLOAT</keywords>
+    <keywords>FOR</keywords>
+    <keywords>FORCE</keywords>
+    <keywords>FOREIGN</keywords>
+    <keywords>FROM</keywords>
+    <keywords>FULLTEXT</keywords>
+    <keywords>GOTO</keywords>
+    <keywords>GRANT</keywords>
+    <keywords>GROUP</keywords>
+    <keywords>HAVING</keywords>
+    <keywords>HIGH_PRIORITY</keywords>
+    <keywords>HOUR_MICROSECOND</keywords>
+    <keywords>HOUR_MINUTE</keywords>
+    <keywords>HOUR_SECOND</keywords>
+    <keywords>IF</keywords>
+    <keywords>IGNORE</keywords>
+    <keywords>IN</keywords>
+    <keywords>INDEX</keywords>
+    <keywords>INFILE</keywords>
+    <keywords>INNER</keywords>
+    <keywords>INOUT</keywords>
+    <keywords>INSENSITIVE</keywords>
+    <keywords>INSERT</keywords>
+    <keywords>INT</keywords>
+    <keywords>INTEGER</keywords>
+    <keywords>INTERVAL</keywords>
+    <keywords>INTO</keywords>
+    <keywords>IS</keywords>
+    <keywords>ITERATE</keywords>
+    <keywords>JOIN</keywords>
+    <keywords>KEY</keywords>
+    <keywords>KEYS</keywords>
+    <keywords>KILL</keywords>
+    <keywords>LEADING</keywords>
+    <keywords>LEAVE</keywords>
+    <keywords>LEFT</keywords>
+    <keywords>LIKE</keywords>
+    <keywords>LIMIT</keywords>
+    <keywords>LINES</keywords>
+    <keywords>LOAD</keywords>
+    <keywords>LOCALTIME</keywords>
+    <keywords>LOCALTIMESTAMP</keywords>
+    <keywords>LOCK</keywords>
+    <keywords>LONG</keywords>
+    <keywords>LONGBLOB</keywords>
+    <keywords>LONGTEXT</keywords>
+    <keywords>LOOP</keywords>
+    <keywords>LOW_PRIORITY</keywords>
+    <keywords>MATCH</keywords>
+    <keywords>MEDIUMBLOB</keywords>
+    <keywords>MEDIUMINT</keywords>
+    <keywords>MEDIUMTEXT</keywords>
+    <keywords>MIDDLEINT</keywords>
+    <keywords>MINUTE_MICROSECOND</keywords>
+    <keywords>MINUTE_SECOND</keywords>
+    <keywords>MOD</keywords>
+    <keywords>MODIFIES</keywords>
+    <keywords>NATURAL</keywords>
+    <keywords>NOT</keywords>
+    <keywords>NO_WRITE_TO_BINLOG</keywords>
+    <keywords>NULL</keywords>
+    <keywords>NUMERIC</keywords>
+    <keywords>ON</keywords>
+    <keywords>OPTIMIZE</keywords>
+    <keywords>OPTION</keywords>
+    <keywords>OPTIONALLY</keywords>
+    <keywords>OR</keywords>
+    <keywords>ORDER</keywords>
+    <keywords>OUT</keywords>
+    <keywords>OUTER</keywords>
+    <keywords>OUTFILE</keywords>
+    <keywords>PRECISION</keywords>
+    <keywords>PRIMARY</keywords>
+    <keywords>PROCEDURE</keywords>
+    <keywords>PURGE</keywords>
+    <keywords>READ</keywords>
+    <keywords>READS</keywords>
+    <keywords>REAL</keywords>
+    <keywords>REFERENCES</keywords>
+    <keywords>REGEXP</keywords>
+    <keywords>RELEASE</keywords>
+    <keywords>RENAME</keywords>
+    <keywords>REPEAT</keywords>
+    <keywords>REPLACE</keywords>
+    <keywords>REQUIRE</keywords>
+    <keywords>RESTRICT</keywords>
+    <keywords>RETURN</keywords>
+    <keywords>REVOKE</keywords>
+    <keywords>RIGHT</keywords>
+    <keywords>RLIKE</keywords>
+    <keywords>SCHEMA</keywords>
+    <keywords>SCHEMAS</keywords>
+    <keywords>SECOND_MICROSECOND</keywords>
+    <keywords>SELECT</keywords>
+    <keywords>SENSITIVE</keywords>
+    <keywords>SEPARATOR</keywords>
+    <keywords>SET</keywords>
+    <keywords>SHOW</keywords>
+    <keywords>SMALLINT</keywords>
+    <keywords>SONAME</keywords>
+    <keywords>SPATIAL</keywords>
+    <keywords>SPECIFIC</keywords>
+    <keywords>SQL</keywords>
+    <keywords>SQLEXCEPTION</keywords>
+    <keywords>SQLSTATE</keywords>
+    <keywords>SQLWARNING</keywords>
+    <keywords>SQL_BIG_RESULT</keywords>
+    <keywords>SQL_CALC_FOUND_ROWS</keywords>
+    <keywords>SQL_SMALL_RESULT</keywords>
+    <keywords>SSL</keywords>
+    <keywords>STARTING</keywords>
+    <keywords>STRAIGHT_JOIN</keywords>
+    <keywords>TABLE</keywords>
+    <keywords>TERMINATED</keywords>
+    <keywords>THEN</keywords>
+    <keywords>TINYBLOB</keywords>
+    <keywords>TINYINT</keywords>
+    <keywords>TINYTEXT</keywords>
+    <keywords>TO</keywords>
+    <keywords>TRAILING</keywords>
+    <keywords>TRIGGER</keywords>
+    <keywords>TRUE</keywords>
+    <keywords>UNDO</keywords>
+    <keywords>UNION</keywords>
+    <keywords>UNIQUE</keywords>
+    <keywords>UNLOCK</keywords>
+    <keywords>UNSIGNED</keywords>
+    <keywords>UPDATE</keywords>
+    <keywords>USAGE</keywords>
+    <keywords>USE</keywords>
+    <keywords>USING</keywords>
+    <keywords>UTC_DATE</keywords>
+    <keywords>UTC_TIME</keywords>
+    <keywords>UTC_TIMESTAMP</keywords>
+    <keywords>VALUES</keywords>
+    <keywords>VARBINARY</keywords>
+    <keywords>VARCHAR</keywords>
+    <keywords>VARCHARACTER</keywords>
+    <keywords>VARYING</keywords>
+    <keywords>WHEN</keywords>
+    <keywords>WHERE</keywords>
+    <keywords>WHILE</keywords>
+    <keywords>WITH</keywords>
+    <keywords>WRITE</keywords>
+    <keywords>XOR</keywords>
+    <keywords>YEAR_MONTH</keywords>
+    <keywords>ZEROFILL</keywords>
+    <operators>:=</operators>
+    <operators>||</operators>
+    <operators>OR</operators>
+    <operators>XOR</operators>
+    <operators>&amp;&amp;</operators>
+    <operators>AND</operators>
+    <operators>NOT</operators>
+    <operators>BETWEEN</operators>
+    <operators>CASE</operators>
+    <operators>WHEN</operators>
+    <operators>THEN</operators>
+    <operators>ELSE</operators>
+    <operators>=</operators>
+    <operators>&lt;=></operators>
+    <operators>>=</operators>
+    <operators>></operators>
+    <operators>&lt;=</operators>
+    <operators>&lt;</operators>
+    <operators>&lt;></operators>
+    <operators>!=</operators>
+    <operators>IS</operators>
+    <operators>LIKE</operators>
+    <operators>REGEXP</operators>
+    <operators>IN</operators>
+    <operators>|</operators>
+    <operators>&amp;</operators>
+    <operators>&lt;&lt;</operators>
+    <operators>>></operators>
+    <operators>-</operators>
+    <operators>+</operators>
+    <operators>*</operators>
+    <operators>/</operators>
+    <operators>DIV</operators>
+    <operators>%</operators>
+    <operators>MOD</operators>
+    <operators>^</operators>
+    <operators>~</operators>
+    <operators>!</operators>
+    <operators>BINARY</operators>
+    <operators>COLLATE</operators>
+  </SQLSyntaxDefinition>
+</DBDefinition:DatabaseVendorDefinition>
diff --git a/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/runtime/vendors/MySql_4.1/MySql_4.1.xmi b/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/runtime/vendors/MySql_4.1/MySql_4.1.xmi
new file mode 100644
index 0000000..133fd81
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/runtime/vendors/MySql_4.1/MySql_4.1.xmi
@@ -0,0 +1,448 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="MySql" version="4.0" maximumIdentifierLength="64" joinSupported="true" tablespacesSupported="false" maximumCommentLength="60" schemaSupported="false" aliasSupported="true" SQLStatementSupported="true">
+  <predefinedDataTypeDefinitions xmi:id="BIT_1" keyConstraintSupported="true"
+maximumValue="1" minimumValue="0" primitiveType="SMALLINT" jdbcEnumType="-6"
+javaClassName="byte">
+    <defaultValueTypes>0</defaultValueTypes>
+    <name>BIT</name>
+    <name>BOOL</name>
+    <name>BOOLEAN</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TINYINT_UNSIGNED"
+keyConstraintSupported="true" maximumValue="255" minimumValue="0"
+primitiveType="SMALLINT" jdbcEnumType="-6" javaClassName="byte">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TINYINT UNSIGNED</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_UNSIGNED"
+keyConstraintSupported="true" maximumValue="65535" minimumValue="0"
+primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="int">
+    <defaultValueTypes>0</defaultValueTypes>
+    <name>SMALLINT UNSIGNED</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="MEDIUMINT_UNSIGNED"
+keyConstraintSupported="true" maximumValue="16777215" minimumValue="0"
+primitiveType="SMALLINT" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>0</defaultValueTypes>
+    <name>MEDIUMINT UNSIGNED</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_UNSIGNED"
+keyConstraintSupported="true" maximumValue="4294967295" minimumValue="0"
+primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>0</defaultValueTypes>
+    <name>INTEGER UNSIGNED</name>
+    <name>INT UNSIGNED</name>    
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_UNSIGNED"
+keyConstraintSupported="true" identitySupported="true" primitiveType="BIGINT"
+jdbcEnumType="-5" javaClassName="java.math.BigInteger">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIGINT UNSIGNED</name>
+    <name>SERIAL</name>    
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_UNSIGNED"
+keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7"
+javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL UNSIGNED</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_UNSIGNED_PRECISION"
+keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8"
+javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE UNSIGNED</name>
+    <name>DOUBLE UNSIGNED PRECISION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_UNSIGNED"
+keyConstraintSupported="true" primitiveType="FLOAT" jdbcEnumType="6"
+javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT UNSIGNED</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_UNSIGNED"
+scaleSupported="true" precisionSupported="true" maximumPrecision="64"
+keyConstraintSupported="true" primitiveType="DECIMAL" jdbcEnumType="3"
+javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL UNSIGNED</name>
+    <name>DEC UNSIGNED</name>
+  </predefinedDataTypeDefinitions>  <predefinedDataTypeDefinitions xmi:id="SMALLINT_2" keyConstraintSupported="true" maximumValue="127" minimumValue="-128" primitiveType="SMALLINT" jdbcEnumType="-6" javaClassName="byte">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TINYINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" maximumValue="32767" minimumValue="-32768" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_2" keyConstraintSupported="true" maximumValue="8388607" minimumValue="-8388608" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>MEDIUMINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" maximumValue="2147483647" minimumValue="-2147483648" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INT</name>
+    <name>INTEGER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="java.math.BigInteger">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIGINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE</name>
+    <name>DOUBLE PRECISION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" keyConstraintSupported="true" primitiveType="FLOAT" jdbcEnumType="6" javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" scaleSupported="true" precisionSupported="true" maximumPrecision="64" keyConstraintSupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" scaleSupported="true" precisionSupported="true" maximumPrecision="64" keyConstraintSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIME_1" keyConstraintSupported="true" primitiveType="TIME" jdbcEnumType="92" javaClassName="java.sql.Time">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_2" keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.util.Date">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATETIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="255" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <name>CHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="255" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <name>VARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_1" defaultSupported="false" maximumLength="256" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TINYBLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_2" defaultSupported="false" maximumLength="65536" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_3" defaultSupported="false" maximumLength="16777216" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>MEDIUMBLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_4" defaultSupported="false" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONGBLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" keyConstraintSupported="true" defaultSupported="false" maximumLength="256" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TINYTEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_2" keyConstraintSupported="true" defaultSupported="false" maximumLength="65536" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_3" keyConstraintSupported="true" defaultSupported="false" maximumLength="16777216" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>MEDIUMTEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_4" keyConstraintSupported="true" defaultSupported="false" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONGTEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="ENUM" keyConstraintSupported="false" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>ENUM</name>
+  </predefinedDataTypeDefinitions>
+  <storedProcedureDefinition/>
+  <triggerDefinition/>
+  <columnDefinition maximumIdentifierLength="64" identitySupported="true" identityIncrementSupported="true"/>
+  <constraintDefinition clusteredPrimaryKeySupported="true" clusteredUniqueConstraintSupported="true" primaryKeyNullable="true" uniqueKeyNullable="true">
+    <parentUpdateDRIRuleType>RESTRICT</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>CASCADE</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>SET_NULL</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>RESTRICT</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>SET_NULL</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+  </constraintDefinition>
+  <indexDefinition maximumIdentifierLength="64"/>
+  <tableDefinition maximumIdentifierLength="64"/>
+  <udtDefinition/>
+  <queryDefinition identifierQuoteString="`" hostVariableMarker="@" hostVariableMarkerSupported="true"/>
+  <viewDefinition maximumIdentifierLength="64"/>
+  <SQLSyntaxDefinition>
+    <keywords>ADD</keywords>
+    <keywords>ALL</keywords>
+    <keywords>ALTER</keywords>
+    <keywords>ANALYZE</keywords>
+    <keywords>AND</keywords>
+    <keywords>AS</keywords>
+    <keywords>ASC</keywords>
+    <keywords>ASENSITIVE</keywords>
+    <keywords>BEFORE</keywords>
+    <keywords>BETWEEN</keywords>
+    <keywords>BIGINT</keywords>
+    <keywords>BINARY</keywords>
+    <keywords>BLOB</keywords>
+    <keywords>BOTH</keywords>
+    <keywords>BY</keywords>
+    <keywords>CALL</keywords>
+    <keywords>CASCADE</keywords>
+    <keywords>CASE</keywords>
+    <keywords>CHANGE</keywords>
+    <keywords>CHAR</keywords>
+    <keywords>CHARACTER</keywords>
+    <keywords>CHECK</keywords>
+    <keywords>COLLATE</keywords>
+    <keywords>COLUMN</keywords>
+    <keywords>CONDITION</keywords>
+    <keywords>CONNECTION</keywords>
+    <keywords>CONSTRAINT</keywords>
+    <keywords>CONTINUE</keywords>
+    <keywords>CONVERT</keywords>
+    <keywords>CREATE</keywords>
+    <keywords>CROSS</keywords>
+    <keywords>CURRENT_DATE</keywords>
+    <keywords>CURRENT_TIME</keywords>
+    <keywords>CURRENT_TIMESTAMP</keywords>
+    <keywords>CURRENT_USER</keywords>
+    <keywords>CURSOR</keywords>
+    <keywords>DATABASE</keywords>
+    <keywords>DATABASES</keywords>
+    <keywords>DAY_HOUR</keywords>
+    <keywords>DAY_MICROSECOND</keywords>
+    <keywords>DAY_MINUTE</keywords>
+    <keywords>DAY_SECOND</keywords>
+    <keywords>DEC</keywords>
+    <keywords>DECIMAL</keywords>
+    <keywords>DECLARE</keywords>
+    <keywords>DEFAULT</keywords>
+    <keywords>DELAYED</keywords>
+    <keywords>DELETE</keywords>
+    <keywords>DESC</keywords>
+    <keywords>DESCRIBE</keywords>
+    <keywords>DETERMINISTIC</keywords>
+    <keywords>DISTINCT</keywords>
+    <keywords>DISTINCTROW</keywords>
+    <keywords>DIV</keywords>
+    <keywords>DOUBLE</keywords>
+    <keywords>DROP</keywords>
+    <keywords>DUAL</keywords>
+    <keywords>EACH</keywords>
+    <keywords>ELSE</keywords>
+    <keywords>ELSEIF</keywords>
+    <keywords>ENCLOSED</keywords>
+    <keywords>ESCAPED</keywords>
+    <keywords>EXISTS</keywords>
+    <keywords>EXIT</keywords>
+    <keywords>EXPLAIN</keywords>
+    <keywords>FALSE</keywords>
+    <keywords>FETCH</keywords>
+    <keywords>FLOAT</keywords>
+    <keywords>FOR</keywords>
+    <keywords>FORCE</keywords>
+    <keywords>FOREIGN</keywords>
+    <keywords>FROM</keywords>
+    <keywords>FULLTEXT</keywords>
+    <keywords>GOTO</keywords>
+    <keywords>GRANT</keywords>
+    <keywords>GROUP</keywords>
+    <keywords>HAVING</keywords>
+    <keywords>HIGH_PRIORITY</keywords>
+    <keywords>HOUR_MICROSECOND</keywords>
+    <keywords>HOUR_MINUTE</keywords>
+    <keywords>HOUR_SECOND</keywords>
+    <keywords>IF</keywords>
+    <keywords>IGNORE</keywords>
+    <keywords>IN</keywords>
+    <keywords>INDEX</keywords>
+    <keywords>INFILE</keywords>
+    <keywords>INNER</keywords>
+    <keywords>INOUT</keywords>
+    <keywords>INSENSITIVE</keywords>
+    <keywords>INSERT</keywords>
+    <keywords>INT</keywords>
+    <keywords>INTEGER</keywords>
+    <keywords>INTERVAL</keywords>
+    <keywords>INTO</keywords>
+    <keywords>IS</keywords>
+    <keywords>ITERATE</keywords>
+    <keywords>JOIN</keywords>
+    <keywords>KEY</keywords>
+    <keywords>KEYS</keywords>
+    <keywords>KILL</keywords>
+    <keywords>LEADING</keywords>
+    <keywords>LEAVE</keywords>
+    <keywords>LEFT</keywords>
+    <keywords>LIKE</keywords>
+    <keywords>LIMIT</keywords>
+    <keywords>LINES</keywords>
+    <keywords>LOAD</keywords>
+    <keywords>LOCALTIME</keywords>
+    <keywords>LOCALTIMESTAMP</keywords>
+    <keywords>LOCK</keywords>
+    <keywords>LONG</keywords>
+    <keywords>LONGBLOB</keywords>
+    <keywords>LONGTEXT</keywords>
+    <keywords>LOOP</keywords>
+    <keywords>LOW_PRIORITY</keywords>
+    <keywords>MATCH</keywords>
+    <keywords>MEDIUMBLOB</keywords>
+    <keywords>MEDIUMINT</keywords>
+    <keywords>MEDIUMTEXT</keywords>
+    <keywords>MIDDLEINT</keywords>
+    <keywords>MINUTE_MICROSECOND</keywords>
+    <keywords>MINUTE_SECOND</keywords>
+    <keywords>MOD</keywords>
+    <keywords>MODIFIES</keywords>
+    <keywords>NATURAL</keywords>
+    <keywords>NOT</keywords>
+    <keywords>NO_WRITE_TO_BINLOG</keywords>
+    <keywords>NULL</keywords>
+    <keywords>NUMERIC</keywords>
+    <keywords>ON</keywords>
+    <keywords>OPTIMIZE</keywords>
+    <keywords>OPTION</keywords>
+    <keywords>OPTIONALLY</keywords>
+    <keywords>OR</keywords>
+    <keywords>ORDER</keywords>
+    <keywords>OUT</keywords>
+    <keywords>OUTER</keywords>
+    <keywords>OUTFILE</keywords>
+    <keywords>PRECISION</keywords>
+    <keywords>PRIMARY</keywords>
+    <keywords>PROCEDURE</keywords>
+    <keywords>PURGE</keywords>
+    <keywords>READ</keywords>
+    <keywords>READS</keywords>
+    <keywords>REAL</keywords>
+    <keywords>REFERENCES</keywords>
+    <keywords>REGEXP</keywords>
+    <keywords>RELEASE</keywords>
+    <keywords>RENAME</keywords>
+    <keywords>REPEAT</keywords>
+    <keywords>REPLACE</keywords>
+    <keywords>REQUIRE</keywords>
+    <keywords>RESTRICT</keywords>
+    <keywords>RETURN</keywords>
+    <keywords>REVOKE</keywords>
+    <keywords>RIGHT</keywords>
+    <keywords>RLIKE</keywords>
+    <keywords>SCHEMA</keywords>
+    <keywords>SCHEMAS</keywords>
+    <keywords>SECOND_MICROSECOND</keywords>
+    <keywords>SELECT</keywords>
+    <keywords>SENSITIVE</keywords>
+    <keywords>SEPARATOR</keywords>
+    <keywords>SET</keywords>
+    <keywords>SHOW</keywords>
+    <keywords>SMALLINT</keywords>
+    <keywords>SONAME</keywords>
+    <keywords>SPATIAL</keywords>
+    <keywords>SPECIFIC</keywords>
+    <keywords>SQL</keywords>
+    <keywords>SQLEXCEPTION</keywords>
+    <keywords>SQLSTATE</keywords>
+    <keywords>SQLWARNING</keywords>
+    <keywords>SQL_BIG_RESULT</keywords>
+    <keywords>SQL_CALC_FOUND_ROWS</keywords>
+    <keywords>SQL_SMALL_RESULT</keywords>
+    <keywords>SSL</keywords>
+    <keywords>STARTING</keywords>
+    <keywords>STRAIGHT_JOIN</keywords>
+    <keywords>TABLE</keywords>
+    <keywords>TERMINATED</keywords>
+    <keywords>THEN</keywords>
+    <keywords>TINYBLOB</keywords>
+    <keywords>TINYINT</keywords>
+    <keywords>TINYTEXT</keywords>
+    <keywords>TO</keywords>
+    <keywords>TRAILING</keywords>
+    <keywords>TRIGGER</keywords>
+    <keywords>TRUE</keywords>
+    <keywords>UNDO</keywords>
+    <keywords>UNION</keywords>
+    <keywords>UNIQUE</keywords>
+    <keywords>UNLOCK</keywords>
+    <keywords>UNSIGNED</keywords>
+    <keywords>UPDATE</keywords>
+    <keywords>USAGE</keywords>
+    <keywords>USE</keywords>
+    <keywords>USING</keywords>
+    <keywords>UTC_DATE</keywords>
+    <keywords>UTC_TIME</keywords>
+    <keywords>UTC_TIMESTAMP</keywords>
+    <keywords>VALUES</keywords>
+    <keywords>VARBINARY</keywords>
+    <keywords>VARCHAR</keywords>
+    <keywords>VARCHARACTER</keywords>
+    <keywords>VARYING</keywords>
+    <keywords>WHEN</keywords>
+    <keywords>WHERE</keywords>
+    <keywords>WHILE</keywords>
+    <keywords>WITH</keywords>
+    <keywords>WRITE</keywords>
+    <keywords>XOR</keywords>
+    <keywords>YEAR_MONTH</keywords>
+    <keywords>ZEROFILL</keywords>
+    <operators>:=</operators>
+    <operators>||</operators>
+    <operators>OR</operators>
+    <operators>XOR</operators>
+    <operators>&amp;&amp;</operators>
+    <operators>AND</operators>
+    <operators>NOT</operators>
+    <operators>BETWEEN</operators>
+    <operators>CASE</operators>
+    <operators>WHEN</operators>
+    <operators>THEN</operators>
+    <operators>ELSE</operators>
+    <operators>=</operators>
+    <operators>&lt;=></operators>
+    <operators>>=</operators>
+    <operators>></operators>
+    <operators>&lt;=</operators>
+    <operators>&lt;</operators>
+    <operators>&lt;></operators>
+    <operators>!=</operators>
+    <operators>IS</operators>
+    <operators>LIKE</operators>
+    <operators>REGEXP</operators>
+    <operators>IN</operators>
+    <operators>|</operators>
+    <operators>&amp;</operators>
+    <operators>&lt;&lt;</operators>
+    <operators>>></operators>
+    <operators>-</operators>
+    <operators>+</operators>
+    <operators>*</operators>
+    <operators>/</operators>
+    <operators>DIV</operators>
+    <operators>%</operators>
+    <operators>MOD</operators>
+    <operators>^</operators>
+    <operators>~</operators>
+    <operators>!</operators>
+    <operators>BINARY</operators>
+    <operators>COLLATE</operators>
+  </SQLSyntaxDefinition>
+</DBDefinition:DatabaseVendorDefinition>
diff --git a/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/runtime/vendors/MySql_5.0/MySql_5.0.xmi b/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/runtime/vendors/MySql_5.0/MySql_5.0.xmi
new file mode 100644
index 0000000..6d8565a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/runtime/vendors/MySql_5.0/MySql_5.0.xmi
@@ -0,0 +1,487 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="MySql" version="5.0" maximumIdentifierLength="64" joinSupported="true" tablespacesSupported="false" maximumCommentLength="60" schemaSupported="false" aliasSupported="true" SQLStatementSupported="true">
+  <predefinedDataTypeDefinitions xmi:id="BIT_1" keyConstraintSupported="true"
+maximumValue="1" minimumValue="0" primitiveType="SMALLINT" jdbcEnumType="-6"
+javaClassName="byte">
+    <defaultValueTypes>0</defaultValueTypes>
+    <name>BIT</name>
+    <name>BOOL</name>
+    <name>BOOLEAN</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TINYINT_UNSIGNED"
+keyConstraintSupported="true" maximumValue="255" minimumValue="0"
+primitiveType="SMALLINT" jdbcEnumType="-6" javaClassName="byte">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TINYINT UNSIGNED</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_UNSIGNED"
+keyConstraintSupported="true" maximumValue="65535" minimumValue="0"
+primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="int">
+    <defaultValueTypes>0</defaultValueTypes>
+    <name>SMALLINT UNSIGNED</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="MEDIUMINT_UNSIGNED"
+keyConstraintSupported="true" maximumValue="16777215" minimumValue="0"
+primitiveType="SMALLINT" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>0</defaultValueTypes>
+    <name>MEDIUMINT UNSIGNED</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_UNSIGNED"
+keyConstraintSupported="true" maximumValue="4294967295" minimumValue="0"
+primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>0</defaultValueTypes>
+    <name>INTEGER UNSIGNED</name>
+    <name>INT UNSIGNED</name>    
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_UNSIGNED"
+keyConstraintSupported="true" identitySupported="true" primitiveType="BIGINT"
+jdbcEnumType="-5" javaClassName="java.math.BigInteger">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIGINT UNSIGNED</name>
+    <name>SERIAL</name>    
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_UNSIGNED"
+keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7"
+javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL UNSIGNED</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_UNSIGNED_PRECISION"
+keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8"
+javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE UNSIGNED</name>
+    <name>DOUBLE UNSIGNED PRECISION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_UNSIGNED"
+keyConstraintSupported="true" primitiveType="FLOAT" jdbcEnumType="6"
+javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT UNSIGNED</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_UNSIGNED"
+scaleSupported="true" precisionSupported="true" maximumPrecision="64"
+keyConstraintSupported="true" primitiveType="DECIMAL" jdbcEnumType="3"
+javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL UNSIGNED</name>
+    <name>DEC UNSIGNED</name>
+  </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="SMALLINT_2" keyConstraintSupported="true" maximumValue="127" minimumValue="-128" primitiveType="SMALLINT" jdbcEnumType="-6" javaClassName="byte">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TINYINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" maximumValue="32767" minimumValue="-32768" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_2" keyConstraintSupported="true" maximumValue="8388607" minimumValue="-8388608" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>MEDIUMINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" maximumValue="2147483647" minimumValue="-2147483648" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INT</name>
+    <name>INTEGER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="java.math.BigInteger">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIGINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE</name>
+    <name>DOUBLE PRECISION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" keyConstraintSupported="true" primitiveType="FLOAT" jdbcEnumType="6" javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" scaleSupported="true" precisionSupported="true" maximumPrecision="64" keyConstraintSupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" scaleSupported="true" precisionSupported="true" maximumPrecision="64" keyConstraintSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIME_1" keyConstraintSupported="true" primitiveType="TIME" jdbcEnumType="92" javaClassName="java.sql.Time">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_2" keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.util.Date">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATETIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="255" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <name>CHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="255" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <name>VARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_1" defaultSupported="false" maximumLength="256" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TINYBLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_2" defaultSupported="false" maximumLength="65536" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_3" defaultSupported="false" maximumLength="16777216" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>MEDIUMBLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_4" defaultSupported="false" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONGBLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" keyConstraintSupported="true" defaultSupported="false" maximumLength="256" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TINYTEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_2" keyConstraintSupported="true" defaultSupported="false" maximumLength="65536" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_3" keyConstraintSupported="true" defaultSupported="false" maximumLength="16777216" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>MEDIUMTEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_4" keyConstraintSupported="true" defaultSupported="false" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONGTEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="ENUM" keyConstraintSupported="false" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>ENUM</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_2" keyConstraintSupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>YEAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="255" lengthUnit="BYTE" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BINARY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="255" primitiveType="BINARY_VARYING" lengthUnit="BYTE" jdbcEnumType="-3" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARBINARY</name>
+  </predefinedDataTypeDefinitions>
+  <storedProcedureDefinition/>
+  <triggerDefinition/>
+  <columnDefinition maximumIdentifierLength="64" identitySupported="true" identityIncrementSupported="true"/>
+  <constraintDefinition clusteredPrimaryKeySupported="true" clusteredUniqueConstraintSupported="true" primaryKeyNullable="true" uniqueKeyNullable="true">
+    <parentUpdateDRIRuleType>RESTRICT</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>CASCADE</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>SET_NULL</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>RESTRICT</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>SET_NULL</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+  </constraintDefinition>
+  <indexDefinition maximumIdentifierLength="64"/>
+  <tableDefinition maximumIdentifierLength="64"/>
+  <udtDefinition/>
+  <queryDefinition identifierQuoteString="`" hostVariableMarker="@" hostVariableMarkerSupported="true"/>
+  <viewDefinition maximumIdentifierLength="64" checkOptionLevelsSupported="true"/>
+  <SQLSyntaxDefinition>
+    <keywords>ADD</keywords>
+    <keywords>ALGORITHM</keywords>
+    <keywords>ALL</keywords>
+    <keywords>ALTER</keywords>
+    <keywords>ANALYZE</keywords>
+    <keywords>AND</keywords>
+    <keywords>AS</keywords>
+    <keywords>ASC</keywords>
+    <keywords>ASENSITIVE</keywords>
+    <keywords>BEFORE</keywords>
+    <keywords>BETWEEN</keywords>
+    <keywords>BIGINT</keywords>
+    <keywords>BINARY</keywords>
+    <keywords>BLOB</keywords>
+    <keywords>BOTH</keywords>
+    <keywords>BY</keywords>
+    <keywords>CALL</keywords>
+    <keywords>CASCADE</keywords>
+    <keywords>CASE</keywords>
+    <keywords>CHANGE</keywords>
+    <keywords>CHAR</keywords>
+    <keywords>CHARACTER</keywords>
+    <keywords>CHECK</keywords>
+    <keywords>CHECKSUM</keywords>
+    <keywords>COLLATE</keywords>
+    <keywords>COLUMN</keywords>
+    <keywords>COLUMNS</keywords>
+    <keywords>COMMENT</keywords>
+    <keywords>CONDITION</keywords>
+    <keywords>CONNECTION</keywords>
+    <keywords>CONSTRAINT</keywords>
+    <keywords>CONTINUE</keywords>
+    <keywords>CONVERT</keywords>
+    <keywords>CREATE</keywords>
+    <keywords>CROSS</keywords>
+    <keywords>CURRENT_DATE</keywords>
+    <keywords>CURRENT_TIME</keywords>
+    <keywords>CURRENT_TIMESTAMP</keywords>
+    <keywords>CURRENT_USER</keywords>
+    <keywords>CURSOR</keywords>
+    <keywords>DATABASE</keywords>
+    <keywords>DATABASES</keywords>
+    <keywords>DAY_HOUR</keywords>
+    <keywords>DAY_MICROSECOND</keywords>
+    <keywords>DAY_MINUTE</keywords>
+    <keywords>DAY_SECOND</keywords>
+    <keywords>DEC</keywords>
+    <keywords>DECIMAL</keywords>
+    <keywords>DECLARE</keywords>
+    <keywords>DEFAULT</keywords>
+    <keywords>DEFINER</keywords>
+    <keywords>DELAYED</keywords>
+    <keywords>DELETE</keywords>
+    <keywords>DESC</keywords>
+    <keywords>DESCRIBE</keywords>
+    <keywords>DETERMINISTIC</keywords>
+    <keywords>DISTINCT</keywords>
+    <keywords>DISTINCTROW</keywords>
+    <keywords>DIV</keywords>
+    <keywords>DOUBLE</keywords>
+    <keywords>DROP</keywords>
+    <keywords>DUAL</keywords>
+    <keywords>EACH</keywords>
+    <keywords>ELSE</keywords>
+    <keywords>ELSEIF</keywords>
+    <keywords>ENCLOSED</keywords>
+    <keywords>ESCAPED</keywords>
+    <keywords>EXISTS</keywords>
+    <keywords>EXIT</keywords>
+    <keywords>EXPLAIN</keywords>
+    <keywords>FALSE</keywords>
+    <keywords>FETCH</keywords>
+    <keywords>FIELDS</keywords>
+    <keywords>FLOAT</keywords>
+    <keywords>FLOAT4</keywords>
+    <keywords>FLOAT8</keywords>
+    <keywords>FOR</keywords>
+    <keywords>FORCE</keywords>
+    <keywords>FOREIGN</keywords>
+    <keywords>FROM</keywords>
+    <keywords>FULLTEXT</keywords>
+    <keywords>GOTO</keywords>
+    <keywords>GRANT</keywords>
+    <keywords>GROUP</keywords>
+    <keywords>HAVING</keywords>
+    <keywords>HIGH_PRIORITY</keywords>
+    <keywords>HOUR_MICROSECOND</keywords>
+    <keywords>HOUR_MINUTE</keywords>
+    <keywords>HOUR_SECOND</keywords>
+    <keywords>IF</keywords>
+    <keywords>IGNORE</keywords>
+    <keywords>IN</keywords>
+    <keywords>INDEX</keywords>
+    <keywords>INFILE</keywords>
+    <keywords>INNER</keywords>
+    <keywords>INOUT</keywords>
+    <keywords>INSENSITIVE</keywords>
+    <keywords>INSERT</keywords>
+    <keywords>INT</keywords>
+    <keywords>INT1</keywords>
+    <keywords>INT2</keywords>
+    <keywords>INT3</keywords>
+    <keywords>INT4</keywords>
+    <keywords>INT8</keywords>
+    <keywords>INTEGER</keywords>
+    <keywords>INTERVAL</keywords>
+    <keywords>INTO</keywords>
+    <keywords>INVOKER</keywords>
+    <keywords>IS</keywords>
+    <keywords>ITERATE</keywords>
+    <keywords>JOIN</keywords>
+    <keywords>KEY</keywords>
+    <keywords>KEYS</keywords>
+    <keywords>KILL</keywords>
+    <keywords>LABEL</keywords>
+    <keywords>LEADING</keywords>
+    <keywords>LEAVE</keywords>
+    <keywords>LEFT</keywords>
+    <keywords>LIKE</keywords>
+    <keywords>LIMIT</keywords>
+    <keywords>LINES</keywords>
+    <keywords>LOAD</keywords>
+    <keywords>LOCALTIME</keywords>
+    <keywords>LOCALTIMESTAMP</keywords>
+    <keywords>LOCK</keywords>
+    <keywords>LONG</keywords>
+    <keywords>LONGBLOB</keywords>
+    <keywords>LONGTEXT</keywords>
+    <keywords>LOOP</keywords>
+    <keywords>LOW_PRIORITY</keywords>
+    <keywords>MATCH</keywords>
+    <keywords>MAX_ROWS</keywords>
+    <keywords>MEDIUMBLOB</keywords>
+    <keywords>MEDIUMINT</keywords>
+    <keywords>MEDIUMTEXT</keywords>
+    <keywords>MERGE</keywords>
+    <keywords>MIDDLEINT</keywords>
+    <keywords>MIN_ROWS</keywords>
+    <keywords>MINUTE_MICROSECOND</keywords>
+    <keywords>MINUTE_SECOND</keywords>
+    <keywords>MOD</keywords>
+    <keywords>MODIFIES</keywords>
+    <keywords>NATURAL</keywords>
+    <keywords>NO_WRITE_TO_BINLOG</keywords>
+    <keywords>NOT</keywords>
+    <keywords>NULL</keywords>
+    <keywords>NUMERIC</keywords>
+    <keywords>ON</keywords>
+    <keywords>OPTIMIZE</keywords>
+    <keywords>OPTION</keywords>
+    <keywords>OPTIONALLY</keywords>
+    <keywords>OR</keywords>
+    <keywords>ORDER</keywords>
+    <keywords>OUT</keywords>
+    <keywords>OUTER</keywords>
+    <keywords>OUTFILE</keywords>
+    <keywords>PRECISION</keywords>
+    <keywords>PRIMARY</keywords>
+    <keywords>PRIVILEGES</keywords>
+    <keywords>PROCEDURE</keywords>
+    <keywords>PURGE</keywords>
+    <keywords>READ</keywords>
+    <keywords>READS</keywords>
+    <keywords>REAL</keywords>
+    <keywords>REFERENCES</keywords>
+    <keywords>REGEXP</keywords>
+    <keywords>RELEASE</keywords>
+    <keywords>RENAME</keywords>
+    <keywords>REPEAT</keywords>
+    <keywords>REPLACE</keywords>
+    <keywords>REQUIRE</keywords>
+    <keywords>RESTRICT</keywords>
+    <keywords>RETURN</keywords>
+    <keywords>REVOKE</keywords>
+    <keywords>RIGHT</keywords>
+    <keywords>RLIKE</keywords>
+    <keywords>ROW_FORMAT</keywords>
+    <keywords>SCHEMA</keywords>
+    <keywords>SCHEMAS</keywords>
+    <keywords>SECOND_MICROSECOND</keywords>
+    <keywords>SELECT</keywords>
+    <keywords>SENSITIVE</keywords>
+    <keywords>SEPARATOR</keywords>
+    <keywords>SET</keywords>
+    <keywords>SHOW</keywords>
+    <keywords>SMALLINT</keywords>
+    <keywords>SONAME</keywords>
+    <keywords>SPATIAL</keywords>
+    <keywords>SPECIFIC</keywords>
+    <keywords>SQL</keywords>
+    <keywords>SQL_BIG_RESULT</keywords>
+    <keywords>SQL_CALC_FOUND_ROWS</keywords>
+    <keywords>SQL_SECURITY</keywords>
+    <keywords>SQL_SMALL_RESULT</keywords>
+    <keywords>SQL</keywords>
+    <keywords>SQLEXCEPTION</keywords>
+    <keywords>SQLSTATE</keywords>
+    <keywords>SQLWARNING</keywords>
+    <keywords>SSL</keywords>
+    <keywords>STARTING</keywords>
+    <keywords>STRAIGHT_JOIN</keywords>
+    <keywords>TABLE</keywords>
+    <keywords>TABLES</keywords>
+    <keywords>TEMPTABLE</keywords>
+    <keywords>TERMINATED</keywords>
+    <keywords>THEN</keywords>
+    <keywords>TINYBLOB</keywords>
+    <keywords>TINYINT</keywords>
+    <keywords>TINYTEXT</keywords>
+    <keywords>TO</keywords>
+    <keywords>TRAILING</keywords>
+    <keywords>TRIGGER</keywords>
+    <keywords>TRUE</keywords>
+    <keywords>UNDEFINED</keywords>
+    <keywords>UNDO</keywords>
+    <keywords>UNION</keywords>
+    <keywords>UNIQUE</keywords>
+    <keywords>UNLOCK</keywords>
+    <keywords>UNSIGNED</keywords>
+    <keywords>UPDATE</keywords>
+    <keywords>UPGRADE</keywords>
+    <keywords>USAGE</keywords>
+    <keywords>USE</keywords>
+    <keywords>USING</keywords>
+    <keywords>UTC_DATE</keywords>
+    <keywords>UTC_TIME</keywords>
+    <keywords>UTC_TIMESTAMP</keywords>
+    <keywords>VALUES</keywords>
+    <keywords>VARBINARY</keywords>
+    <keywords>VARCHAR</keywords>
+    <keywords>VARCHARACTER</keywords>
+    <keywords>VARYING</keywords>
+    <keywords>WHEN</keywords>
+    <keywords>WHERE</keywords>
+    <keywords>WHILE</keywords>
+    <keywords>WITH</keywords>
+    <keywords>WRITE</keywords>
+    <keywords>XOR</keywords>
+    <keywords>YEAR_MONTH</keywords>
+    <keywords>ZEROFILL</keywords>
+    <operators>:=</operators>
+    <operators>||</operators>
+    <operators>OR</operators>
+    <operators>XOR</operators>
+    <operators>&amp;&amp;</operators>
+    <operators>AND</operators>
+    <operators>NOT</operators>
+    <operators>BETWEEN</operators>
+    <operators>CASE</operators>
+    <operators>WHEN</operators>
+    <operators>THEN</operators>
+    <operators>ELSE</operators>
+    <operators>=</operators>
+    <operators>&lt;=></operators>
+    <operators>>=</operators>
+    <operators>></operators>
+    <operators>&lt;=</operators>
+    <operators>&lt;</operators>
+    <operators>&lt;></operators>
+    <operators>!=</operators>
+    <operators>IS</operators>
+    <operators>LIKE</operators>
+    <operators>REGEXP</operators>
+    <operators>IN</operators>
+    <operators>|</operators>
+    <operators>&amp;</operators>
+    <operators>&lt;&lt;</operators>
+    <operators>>></operators>
+    <operators>-</operators>
+    <operators>+</operators>
+    <operators>*</operators>
+    <operators>/</operators>
+    <operators>DIV</operators>
+    <operators>%</operators>
+    <operators>MOD</operators>
+    <operators>^</operators>
+    <operators>~</operators>
+    <operators>!</operators>
+    <operators>BINARY</operators>
+    <operators>COLLATE</operators>
+  </SQLSyntaxDefinition>
+</DBDefinition:DatabaseVendorDefinition>
diff --git a/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/runtime/vendors/MySql_5.1/MySql_5.1.xmi b/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/runtime/vendors/MySql_5.1/MySql_5.1.xmi
new file mode 100644
index 0000000..fd53b45
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql.dbdefinition/runtime/vendors/MySql_5.1/MySql_5.1.xmi
@@ -0,0 +1,491 @@
+<?xml version="1.0" encoding="ASCII"?>
+<DBDefinition:DatabaseVendorDefinition xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:DBDefinition="http:///org/eclipse/datatools/modelbase/dbdefinition/dbdefinition.ecore" vendor="MySql" version="5.1" maximumIdentifierLength="64" joinSupported="true" tablespacesSupported="false" maximumCommentLength="60" schemaSupported="false" aliasSupported="true" SQLStatementSupported="true">
+  <predefinedDataTypeDefinitions xmi:id="BIT_1" keyConstraintSupported="true"
+maximumValue="1" minimumValue="0" primitiveType="SMALLINT" jdbcEnumType="-6"
+javaClassName="byte">
+    <defaultValueTypes>0</defaultValueTypes>
+    <name>BIT</name>
+    <name>BOOL</name>
+    <name>BOOLEAN</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TINYINT_UNSIGNED"
+keyConstraintSupported="true" maximumValue="255" minimumValue="0"
+primitiveType="SMALLINT" jdbcEnumType="-6" javaClassName="byte">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TINYINT UNSIGNED</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_UNSIGNED"
+keyConstraintSupported="true" maximumValue="65535" minimumValue="0"
+primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="int">
+    <defaultValueTypes>0</defaultValueTypes>
+    <name>SMALLINT UNSIGNED</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="MEDIUMINT_UNSIGNED"
+keyConstraintSupported="true" maximumValue="16777215" minimumValue="0"
+primitiveType="SMALLINT" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>0</defaultValueTypes>
+    <name>MEDIUMINT UNSIGNED</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_UNSIGNED"
+keyConstraintSupported="true" maximumValue="4294967295" minimumValue="0"
+primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>0</defaultValueTypes>
+    <name>INTEGER UNSIGNED</name>
+    <name>INT UNSIGNED</name>    
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_UNSIGNED"
+keyConstraintSupported="true" identitySupported="true" primitiveType="BIGINT"
+jdbcEnumType="-5" javaClassName="java.math.BigInteger">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIGINT UNSIGNED</name>
+    <name>SERIAL</name>    
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_UNSIGNED"
+keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7"
+javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL UNSIGNED</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_UNSIGNED_PRECISION"
+keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8"
+javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE UNSIGNED</name>
+    <name>DOUBLE UNSIGNED PRECISION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_UNSIGNED"
+keyConstraintSupported="true" primitiveType="FLOAT" jdbcEnumType="6"
+javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT UNSIGNED</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_UNSIGNED"
+scaleSupported="true" precisionSupported="true" maximumPrecision="64"
+keyConstraintSupported="true" primitiveType="DECIMAL" jdbcEnumType="3"
+javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL UNSIGNED</name>
+    <name>DEC UNSIGNED</name>
+  </predefinedDataTypeDefinitions>
+    <predefinedDataTypeDefinitions xmi:id="SMALLINT_2" keyConstraintSupported="true" maximumValue="127" minimumValue="-128" primitiveType="SMALLINT" jdbcEnumType="-6" javaClassName="byte">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TINYINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="SMALLINT_1" keyConstraintSupported="true" maximumValue="32767" minimumValue="-32768" primitiveType="SMALLINT" jdbcEnumType="5" javaClassName="short">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>SMALLINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_2" keyConstraintSupported="true" maximumValue="8388607" minimumValue="-8388608" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>MEDIUMINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="INTEGER_1" keyConstraintSupported="true" identitySupported="true" maximumValue="2147483647" minimumValue="-2147483648" primitiveType="INTEGER" jdbcEnumType="4" javaClassName="int">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>INT</name>
+    <name>INTEGER</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BIGINT_1" keyConstraintSupported="true" identitySupported="true" primitiveType="BIGINT" jdbcEnumType="-5" javaClassName="java.math.BigInteger">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BIGINT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="REAL_1" keyConstraintSupported="true" primitiveType="REAL" jdbcEnumType="7" javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>REAL</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DOUBLE_PRECISION_1" keyConstraintSupported="true" primitiveType="DOUBLE_PRECISION" jdbcEnumType="8" javaClassName="double">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DOUBLE</name>
+    <name>DOUBLE PRECISION</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="FLOAT_1" keyConstraintSupported="true" primitiveType="FLOAT" jdbcEnumType="6" javaClassName="float">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>FLOAT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DECIMAL_1" scaleSupported="true" precisionSupported="true" maximumPrecision="64" keyConstraintSupported="true" primitiveType="DECIMAL" jdbcEnumType="3" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DECIMAL</name>
+    <name>DEC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="NUMERIC_1" scaleSupported="true" precisionSupported="true" maximumPrecision="64" keyConstraintSupported="true" primitiveType="NUMERIC" jdbcEnumType="2" javaClassName="java.math.BigDecimal">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>NUMERIC</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_1" keyConstraintSupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATE</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIME_1" keyConstraintSupported="true" primitiveType="TIME" jdbcEnumType="92" javaClassName="java.sql.Time">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_1" keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.sql.Timestamp">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TIMESTAMP</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="TIMESTAMP_2" keyConstraintSupported="true" primitiveType="TIMESTAMP" jdbcEnumType="93" javaClassName="java.util.Date">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>DATETIME</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="255" jdbcEnumType="1" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <name>CHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_VARYING_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="255" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <defaultValueTypes>CURRENT_USER</defaultValueTypes>
+    <name>VARCHAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_1" defaultSupported="false" maximumLength="256" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TINYBLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_2" defaultSupported="false" maximumLength="65536" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_3" defaultSupported="false" maximumLength="16777216" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>MEDIUMBLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_LARGE_OBJECT_4" defaultSupported="false" primitiveType="BINARY_LARGE_OBJECT" jdbcEnumType="2004" javaClassName="java.sql.Blob">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONGBLOB</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_1" keyConstraintSupported="true" defaultSupported="false" maximumLength="256" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TINYTEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_2" keyConstraintSupported="true" defaultSupported="false" maximumLength="65536" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>TEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_3" keyConstraintSupported="true" defaultSupported="false" maximumLength="16777216" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>MEDIUMTEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="CHARACTER_LARGE_OBJECT_4" keyConstraintSupported="true" defaultSupported="false" primitiveType="CHARACTER_LARGE_OBJECT" jdbcEnumType="2005" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>LONGTEXT</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="ENUM" keyConstraintSupported="false" primitiveType="CHARACTER_VARYING" jdbcEnumType="12" javaClassName="java.lang.String">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>ENUM</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="DATE_2" keyConstraintSupported="true" primitiveType="DATE" jdbcEnumType="91" javaClassName="java.sql.Date">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>YEAR</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="255" lengthUnit="BYTE" primitiveType="BINARY" jdbcEnumType="-2" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>BINARY</name>
+  </predefinedDataTypeDefinitions>
+  <predefinedDataTypeDefinitions xmi:id="BINARY_VARYING_1" lengthSupported="true" keyConstraintSupported="true" maximumLength="255" primitiveType="BINARY_VARYING" lengthUnit="BYTE" jdbcEnumType="-3" javaClassName="byte[]">
+    <defaultValueTypes>NULL</defaultValueTypes>
+    <name>VARBINARY</name>
+  </predefinedDataTypeDefinitions>
+  <storedProcedureDefinition/>
+  <triggerDefinition/>
+  <columnDefinition maximumIdentifierLength="64" identitySupported="true" identityIncrementSupported="true"/>
+  <constraintDefinition clusteredPrimaryKeySupported="true" clusteredUniqueConstraintSupported="true" primaryKeyNullable="true" uniqueKeyNullable="true">
+    <parentUpdateDRIRuleType>RESTRICT</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>CASCADE</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>SET_NULL</parentUpdateDRIRuleType>
+    <parentUpdateDRIRuleType>NO_ACTION</parentUpdateDRIRuleType>
+    <parentDeleteDRIRuleType>RESTRICT</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>CASCADE</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>SET_NULL</parentDeleteDRIRuleType>
+    <parentDeleteDRIRuleType>NO_ACTION</parentDeleteDRIRuleType>
+  </constraintDefinition>
+  <indexDefinition maximumIdentifierLength="64"/>
+  <tableDefinition maximumIdentifierLength="64"/>
+  <udtDefinition/>
+  <queryDefinition identifierQuoteString="`" hostVariableMarker="@" hostVariableMarkerSupported="true"/>
+  <viewDefinition maximumIdentifierLength="64" checkOptionLevelsSupported="true"/>
+  <SQLSyntaxDefinition>
+    <keywords>ACCESSIBLE</keywords>
+    <keywords>ADD</keywords>
+    <keywords>ALGORITHM</keywords>
+    <keywords>ALL</keywords>
+    <keywords>ALTER</keywords>
+    <keywords>ANALYZE</keywords>
+    <keywords>AND</keywords>
+    <keywords>AS</keywords>
+    <keywords>ASC</keywords>
+    <keywords>ASENSITIVE</keywords>
+    <keywords>BEFORE</keywords>
+    <keywords>BETWEEN</keywords>
+    <keywords>BIGINT</keywords>
+    <keywords>BINARY</keywords>
+    <keywords>BLOB</keywords>
+    <keywords>BOTH</keywords>
+    <keywords>BY</keywords>
+    <keywords>CALL</keywords>
+    <keywords>CASCADE</keywords>
+    <keywords>CASE</keywords>
+    <keywords>CHANGE</keywords>
+    <keywords>CHAR</keywords>
+    <keywords>CHARACTER</keywords>
+    <keywords>CHECK</keywords>
+    <keywords>CHECKSUM</keywords>
+    <keywords>COLLATE</keywords>
+    <keywords>COLUMN</keywords>
+    <keywords>COMMENT</keywords>
+    <keywords>CONDITION</keywords>
+    <keywords>CONNECTION</keywords>
+    <keywords>CONSTRAINT</keywords>
+    <keywords>CONTINUE</keywords>
+    <keywords>CONVERT</keywords>
+    <keywords>CREATE</keywords>
+    <keywords>CROSS</keywords>
+    <keywords>CURRENT_DATE</keywords>
+    <keywords>CURRENT_TIME</keywords>
+    <keywords>CURRENT_TIMESTAMP</keywords>
+    <keywords>CURRENT_USER</keywords>
+    <keywords>CURSOR</keywords>
+    <keywords>DATABASE</keywords>
+    <keywords>DATABASES</keywords>
+    <keywords>DAY_HOUR</keywords>
+    <keywords>DAY_MICROSECOND</keywords>
+    <keywords>DAY_MINUTE</keywords>
+    <keywords>DAY_SECOND</keywords>
+    <keywords>DEC</keywords>
+    <keywords>DECIMAL</keywords>
+    <keywords>DECLARE</keywords>
+    <keywords>DEFAULT</keywords>
+    <keywords>DEFINER</keywords>
+    <keywords>DELAYED</keywords>
+    <keywords>DELETE</keywords>
+    <keywords>DESC</keywords>
+    <keywords>DESCRIBE</keywords>
+    <keywords>DETERMINISTIC</keywords>
+    <keywords>DISTINCT</keywords>
+    <keywords>DISTINCTROW</keywords>
+    <keywords>DIV</keywords>
+    <keywords>DOUBLE</keywords>
+    <keywords>DROP</keywords>
+    <keywords>DUAL</keywords>
+    <keywords>EACH</keywords>
+    <keywords>ELSE</keywords>
+    <keywords>ELSEIF</keywords>
+    <keywords>ENCLOSED</keywords>
+    <keywords>ESCAPED</keywords>
+    <keywords>EXISTS</keywords>
+    <keywords>EXIT</keywords>
+    <keywords>EXPLAIN</keywords>
+    <keywords>FALSE</keywords>
+    <keywords>FETCH</keywords>
+    <keywords>FLOAT</keywords>
+    <keywords>FLOAT4</keywords>
+    <keywords>FLOAT8</keywords>
+    <keywords>FOR</keywords>
+    <keywords>FORCE</keywords>
+    <keywords>FOREIGN</keywords>
+    <keywords>FROM</keywords>
+    <keywords>FULLTEXT</keywords>
+    <keywords>GOTO</keywords>
+    <keywords>GRANT</keywords>
+    <keywords>GROUP</keywords>
+    <keywords>HAVING</keywords>
+    <keywords>HIGH_PRIORITY</keywords>
+    <keywords>HOUR_MICROSECOND</keywords>
+    <keywords>HOUR_MINUTE</keywords>
+    <keywords>HOUR_SECOND</keywords>
+    <keywords>IF</keywords>
+    <keywords>IGNORE</keywords>
+    <keywords>IN</keywords>
+    <keywords>INDEX</keywords>
+    <keywords>INFILE</keywords>
+    <keywords>INNER</keywords>
+    <keywords>INOUT</keywords>
+    <keywords>INSENSITIVE</keywords>
+    <keywords>INSERT</keywords>
+    <keywords>INT</keywords>
+    <keywords>INT1</keywords>
+    <keywords>INT2</keywords>
+    <keywords>INT3</keywords>
+    <keywords>INT4</keywords>
+    <keywords>INT8</keywords>
+    <keywords>INTEGER</keywords>
+    <keywords>INTERVAL</keywords>
+    <keywords>INTO</keywords>
+    <keywords>INVOKER</keywords>
+    <keywords>IS</keywords>
+    <keywords>ITERATE</keywords>
+    <keywords>JOIN</keywords>
+    <keywords>KEY_BLOCK_SIZE</keywords>
+    <keywords>KEY</keywords>
+    <keywords>KEYS</keywords>
+    <keywords>KILL</keywords>
+    <keywords>LABEL</keywords>
+    <keywords>LEADING</keywords>
+    <keywords>LEAVE</keywords>
+    <keywords>LEFT</keywords>
+    <keywords>LIKE</keywords>
+    <keywords>LIMIT</keywords>
+    <keywords>LINEAR</keywords>
+    <keywords>LINES</keywords>
+    <keywords>LOAD</keywords>
+    <keywords>LOCALTIME</keywords>
+    <keywords>LOCALTIMESTAMP</keywords>
+    <keywords>LOCK</keywords>
+    <keywords>LONG</keywords>
+    <keywords>LONGBLOB</keywords>
+    <keywords>LONGTEXT</keywords>
+    <keywords>LOOP</keywords>
+    <keywords>LOW_PRIORITY</keywords>
+    <keywords>MASTER_SSL_VERIFY_SERVER_CERT</keywords>
+    <keywords>MATCH</keywords>
+    <keywords>MAX_ROWS</keywords>
+    <keywords>MEDIUMBLOB</keywords>
+    <keywords>MEDIUMINT</keywords>
+    <keywords>MEDIUMTEXT</keywords>
+    <keywords>MERGE</keywords>
+    <keywords>MIDDLEINT</keywords>
+    <keywords>MIN_ROWS</keywords>
+    <keywords>MINUTE_MICROSECOND</keywords>
+    <keywords>MINUTE_SECOND</keywords>
+    <keywords>MOD</keywords>
+    <keywords>MODIFIES</keywords>
+    <keywords>NATURAL</keywords>
+    <keywords>NO_WRITE_TO_BINLOG</keywords>
+    <keywords>NOT</keywords>
+    <keywords>NULL</keywords>
+    <keywords>NUMERIC</keywords>
+    <keywords>ON</keywords>
+    <keywords>OPTIMIZE</keywords>
+    <keywords>OPTION</keywords>
+    <keywords>OPTIONALLY</keywords>
+    <keywords>OR</keywords>
+    <keywords>ORDER</keywords>
+    <keywords>OUT</keywords>
+    <keywords>OUTER</keywords>
+    <keywords>OUTFILE</keywords>
+    <keywords>PRECISION</keywords>
+    <keywords>PRIMARY</keywords>
+    <keywords>PROCEDURE</keywords>
+    <keywords>PURGE</keywords>
+    <keywords>RANGE</keywords>
+    <keywords>READ</keywords>
+    <keywords>READ_ONLY</keywords>
+    <keywords>READ_WRITE</keywords>
+    <keywords>READ</keywords>
+    <keywords>READS</keywords>
+    <keywords>REAL</keywords>
+    <keywords>REFERENCES</keywords>
+    <keywords>REGEXP</keywords>
+    <keywords>RELEASE</keywords>
+    <keywords>RENAME</keywords>
+    <keywords>REPEAT</keywords>
+    <keywords>REPLACE</keywords>
+    <keywords>REQUIRE</keywords>
+    <keywords>RESTRICT</keywords>
+    <keywords>RETURN</keywords>
+    <keywords>REVOKE</keywords>
+    <keywords>RIGHT</keywords>
+    <keywords>RLIKE</keywords>
+    <keywords>ROW_FORMAT</keywords>
+    <keywords>SCHEMA</keywords>
+    <keywords>SCHEMAS</keywords>
+    <keywords>SECOND_MICROSECOND</keywords>
+    <keywords>SELECT</keywords>
+    <keywords>SENSITIVE</keywords>
+    <keywords>SEPARATOR</keywords>
+    <keywords>SET</keywords>
+    <keywords>SHOW</keywords>
+    <keywords>SMALLINT</keywords>
+    <keywords>SONAME</keywords>
+    <keywords>SPATIAL</keywords>
+    <keywords>SPECIFIC</keywords>
+    <keywords>SQL</keywords>
+    <keywords>SQL_BIG_RESULT</keywords>
+    <keywords>SQL_CALC_FOUND_ROWS</keywords>
+    <keywords>SQL_SECURITY</keywords>
+    <keywords>SQL_SMALL_RESULT</keywords>
+    <keywords>SQL</keywords>
+    <keywords>SQLEXCEPTION</keywords>
+    <keywords>SQLSTATE</keywords>
+    <keywords>SQLWARNING</keywords>
+    <keywords>SSL</keywords>
+    <keywords>STARTING</keywords>
+    <keywords>STRAIGHT_JOIN</keywords>
+    <keywords>TABLE</keywords>
+    <keywords>TEMPTABLE</keywords>
+    <keywords>TERMINATED</keywords>
+    <keywords>THEN</keywords>
+    <keywords>TINYBLOB</keywords>
+    <keywords>TINYINT</keywords>
+    <keywords>TINYTEXT</keywords>
+    <keywords>TO</keywords>
+    <keywords>TRAILING</keywords>
+    <keywords>TRIGGER</keywords>
+    <keywords>TRUE</keywords>
+    <keywords>UNDEFINED</keywords>
+    <keywords>UNDO</keywords>
+    <keywords>UNION</keywords>
+    <keywords>UNIQUE</keywords>
+    <keywords>UNLOCK</keywords>
+    <keywords>UNSIGNED</keywords>
+    <keywords>UPDATE</keywords>
+    <keywords>UPGRADE</keywords>
+    <keywords>USAGE</keywords>
+    <keywords>USE</keywords>
+    <keywords>USING</keywords>
+    <keywords>UTC_DATE</keywords>
+    <keywords>UTC_TIME</keywords>
+    <keywords>UTC_TIMESTAMP</keywords>
+    <keywords>VALUES</keywords>
+    <keywords>VARBINARY</keywords>
+    <keywords>VARCHAR</keywords>
+    <keywords>VARCHARACTER</keywords>
+    <keywords>VARYING</keywords>
+    <keywords>WHEN</keywords>
+    <keywords>WHERE</keywords>
+    <keywords>WHILE</keywords>
+    <keywords>WITH</keywords>
+    <keywords>WRITE</keywords>
+    <keywords>XOR</keywords>
+    <keywords>YEAR_MONTH</keywords>
+    <keywords>ZEROFILL</keywords>
+    <operators>:=</operators>
+    <operators>||</operators>
+    <operators>OR</operators>
+    <operators>XOR</operators>
+    <operators>&amp;&amp;</operators>
+    <operators>AND</operators>
+    <operators>NOT</operators>
+    <operators>BETWEEN</operators>
+    <operators>CASE</operators>
+    <operators>WHEN</operators>
+    <operators>THEN</operators>
+    <operators>ELSE</operators>
+    <operators>=</operators>
+    <operators>&lt;=></operators>
+    <operators>>=</operators>
+    <operators>></operators>
+    <operators>&lt;=</operators>
+    <operators>&lt;</operators>
+    <operators>&lt;></operators>
+    <operators>!=</operators>
+    <operators>IS</operators>
+    <operators>LIKE</operators>
+    <operators>REGEXP</operators>
+    <operators>IN</operators>
+    <operators>|</operators>
+    <operators>&amp;</operators>
+    <operators>&lt;&lt;</operators>
+    <operators>>></operators>
+    <operators>-</operators>
+    <operators>+</operators>
+    <operators>*</operators>
+    <operators>/</operators>
+    <operators>DIV</operators>
+    <operators>%</operators>
+    <operators>MOD</operators>
+    <operators>^</operators>
+    <operators>~</operators>
+    <operators>!</operators>
+    <operators>BINARY</operators>
+    <operators>COLLATE</operators>
+  </SQLSyntaxDefinition>
+</DBDefinition:DatabaseVendorDefinition>
diff --git a/plugins/org.eclipse.datatools.enablement.mysql.ui/.classpath b/plugins/org.eclipse.datatools.enablement.mysql.ui/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.enablement.mysql.ui/.gitignore b/plugins/org.eclipse.datatools.enablement.mysql.ui/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql.ui/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/plugins/org.eclipse.datatools.enablement.mysql.ui/.project b/plugins/org.eclipse.datatools.enablement.mysql.ui/.project
new file mode 100644
index 0000000..0c4e7a8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.mysql.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.enablement.mysql.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.enablement.mysql.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..d4f585e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.datatools.enablement.mysql.ui;singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-Activator: org.eclipse.datatools.enablement.mysql.ui.Activator
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.datatools.connectivity,
+ org.eclipse.datatools.connectivity.ui,
+ org.eclipse.datatools.enablement.mysql
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.datatools.enablement.mysql.ui,
+ org.eclipse.datatools.enablement.mysql.internal.ui.connection,
+ org.eclipse.datatools.enablement.mysql.internal.ui.connection.drivers
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/plugins/org.eclipse.datatools.enablement.mysql.ui/about.html b/plugins/org.eclipse.datatools.enablement.mysql.ui/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql.ui/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.mysql.ui/build.properties b/plugins/org.eclipse.datatools.enablement.mysql.ui/build.properties
new file mode 100644
index 0000000..84b5434
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql.ui/build.properties
@@ -0,0 +1,27 @@
+###############################################################################
+# Copyright (c) 2005 Versant Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     Versant Corporation - initial API and implementation
+#     IBM Corporation - migrated to new wizard framework
+###############################################################################
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               about.html,\
+               icons/,\
+               plugin.properties,\
+               plugin.xml
+src.dir	= src/
+plugin.version =	1.0.0.200711021
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
+               
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.mysql.ui/icons/new_db_element.gif b/plugins/org.eclipse.datatools.enablement.mysql.ui/icons/new_db_element.gif
new file mode 100644
index 0000000..1d459ce
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql.ui/icons/new_db_element.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.enablement.mysql.ui/plugin.properties b/plugins/org.eclipse.datatools.enablement.mysql.ui/plugin.properties
new file mode 100644
index 0000000..eebc65d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql.ui/plugin.properties
@@ -0,0 +1,17 @@
+###############################################################################
+# Copyright (c) 2006, 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName=Eclipse Data Tools Platform MySQL UI Plug-in
+providerName=Eclipse Data Tools Platform
+
+profile.mysql.wizard.title = MySQL
+profile.mysql.wizard.description = Create a MySQL connection profile.
+profile.mysql.properties = Driver Properties
+
diff --git a/plugins/org.eclipse.datatools.enablement.mysql.ui/plugin.xml b/plugins/org.eclipse.datatools.enablement.mysql.ui/plugin.xml
new file mode 100644
index 0000000..8d69f7b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql.ui/plugin.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+   <extension
+         point="org.eclipse.datatools.connectivity.ui.driverPropertyEditor">
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.enablement.mysql.4_0.driverTemplate"
+            id="org.eclipse.datatools.enablement.mysql.4_0.driverTemplate.password">
+      </propertyEditor>
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.enablement.mysql.4_1.driverTemplate"
+            id="org.eclipse.datatools.enablement.mysql.4_1.driverTemplate.password">
+      </propertyEditor>
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.enablement.mysql.5_0.driverTemplate"
+            id="org.eclipse.datatools.enablement.mysql.5_0.driverTemplate.password">
+      </propertyEditor>
+      <propertyEditor
+            customPropertyDescriptor="org.eclipse.datatools.connectivity.ui.PasswordTextPropertyDescriptor"
+            driverPropertyID="org.eclipse.datatools.connectivity.db.password"
+            driverTemplateID="org.eclipse.datatools.enablement.mysql.5_1.driverTemplate"
+            id="org.eclipse.datatools.enablement.mysql.5_1.driverTemplate.password">
+      </propertyEditor>
+   </extension>
+
+	<extension
+         point="org.eclipse.datatools.connectivity.connectionProfile">
+      <newWizard
+            class="org.eclipse.datatools.enablement.mysql.internal.ui.connection.NewMySQLConnectionProfileWizard"
+            icon="icons/new_db_element.gif"
+            id="org.eclipse.datatools.enablement.mysql.NewMySQLConnectionProfileWizard"
+            name="%profile.mysql.wizard.title"
+            description = "%profile.mysql.wizard.description"
+            profile="org.eclipse.datatools.enablement.mysql.connectionProfile"/>
+   </extension>
+   <extension
+         point="org.eclipse.ui.propertyPages">
+      <page
+            class="org.eclipse.datatools.enablement.mysql.internal.ui.connection.MySQLDBProfilePropertyPage"
+            id="org.eclipse.datatools.enablement.mysql.profileProperties"
+            name="%profile.mysql.properties"
+            objectClass="org.eclipse.datatools.connectivity.IConnectionProfile">
+         <filter
+               name="org.eclipse.datatools.profile.property.id"
+               value="org.eclipse.datatools.enablement.mysql.connectionProfile"/>
+      </page>
+   </extension>
+   
+   <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.mysql.internal.ui.connection.drivers.MySQLOtherDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.mysql.4_0.driverTemplate"
+            id="org.eclipse.datatools.enablement.mysql.internal.ui.connection.drivers.4_0.MySQLOtherDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+      <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.mysql.internal.ui.connection.drivers.MySQLOtherDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.mysql.4_1.driverTemplate"
+            id="org.eclipse.datatools.enablement.mysql.internal.ui.connection.drivers.4_1.MySQLOtherDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+      <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.mysql.internal.ui.connection.drivers.MySQLOtherDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.mysql.5_0.driverTemplate"
+            id="org.eclipse.datatools.enablement.mysql.internal.ui.connection.drivers.5_0.MySQLOtherDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+   
+      <extension point="org.eclipse.datatools.connectivity.ui.driverUIContributor">
+      <driverUIContributor
+            class="org.eclipse.datatools.enablement.mysql.internal.ui.connection.drivers.MySQLOtherDriverUIContributor"
+            driverTemplateID="org.eclipse.datatools.enablement.mysql.5_1.driverTemplate"
+            id="org.eclipse.datatools.enablement.mysql.internal.ui.connection.drivers.5_1.MySQLOtherDriverUIContributor">
+      </driverUIContributor>
+   </extension>
+</plugin>
diff --git a/plugins/org.eclipse.datatools.enablement.mysql.ui/src/org/eclipse/datatools/enablement/mysql/internal/ui/connection/MySQLDBProfilePropertyPage.java b/plugins/org.eclipse.datatools.enablement.mysql.ui/src/org/eclipse/datatools/enablement/mysql/internal/ui/connection/MySQLDBProfilePropertyPage.java
new file mode 100644
index 0000000..647cc41
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql.ui/src/org/eclipse/datatools/enablement/mysql/internal/ui/connection/MySQLDBProfilePropertyPage.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.mysql.internal.ui.connection;
+
+import org.eclipse.datatools.connectivity.ui.wizards.ExtensibleProfileDetailsPropertyPage;
+import org.eclipse.datatools.enablement.internal.mysql.connection.IMySQLConnectionProfileConstants;
+
+public class MySQLDBProfilePropertyPage extends
+		ExtensibleProfileDetailsPropertyPage {
+
+	public MySQLDBProfilePropertyPage() {
+		super(IMySQLConnectionProfileConstants.MYSQL_CATEGORY_ID);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.mysql.ui/src/org/eclipse/datatools/enablement/mysql/internal/ui/connection/MySQLProfileDetailsWizardPage.java b/plugins/org.eclipse.datatools.enablement.mysql.ui/src/org/eclipse/datatools/enablement/mysql/internal/ui/connection/MySQLProfileDetailsWizardPage.java
new file mode 100644
index 0000000..817a790
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql.ui/src/org/eclipse/datatools/enablement/mysql/internal/ui/connection/MySQLProfileDetailsWizardPage.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.mysql.internal.ui.connection;
+
+import org.eclipse.datatools.connectivity.ui.wizards.ExtensibleProfileDetailsWizardPage;
+import org.eclipse.datatools.enablement.internal.mysql.connection.IMySQLConnectionProfileConstants;
+
+public class MySQLProfileDetailsWizardPage extends
+		ExtensibleProfileDetailsWizardPage {
+
+	public MySQLProfileDetailsWizardPage(String pageName) {
+		super(pageName,
+				IMySQLConnectionProfileConstants.MYSQL_CATEGORY_ID);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.mysql.ui/src/org/eclipse/datatools/enablement/mysql/internal/ui/connection/NewMySQLConnectionProfileWizard.java b/plugins/org.eclipse.datatools.enablement.mysql.ui/src/org/eclipse/datatools/enablement/mysql/internal/ui/connection/NewMySQLConnectionProfileWizard.java
new file mode 100644
index 0000000..f6c6c3b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql.ui/src/org/eclipse/datatools/enablement/mysql/internal/ui/connection/NewMySQLConnectionProfileWizard.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.mysql.internal.ui.connection;
+
+import org.eclipse.datatools.connectivity.ui.wizards.ExtensibleNewConnectionProfileWizard;
+
+public class NewMySQLConnectionProfileWizard extends
+		ExtensibleNewConnectionProfileWizard {
+
+	public NewMySQLConnectionProfileWizard() {
+		super(
+				new MySQLProfileDetailsWizardPage(
+						"org.eclipse.datatools.enablement.mysql.internal.ui.connection.MySQLProfileDetailsWizardPage"));
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.mysql.ui/src/org/eclipse/datatools/enablement/mysql/internal/ui/connection/drivers/MySQLOtherDriverUIContributor.java b/plugins/org.eclipse.datatools.enablement.mysql.ui/src/org/eclipse/datatools/enablement/mysql/internal/ui/connection/drivers/MySQLOtherDriverUIContributor.java
new file mode 100644
index 0000000..489cf31
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql.ui/src/org/eclipse/datatools/enablement/mysql/internal/ui/connection/drivers/MySQLOtherDriverUIContributor.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.mysql.internal.ui.connection.drivers;
+
+import org.eclipse.datatools.connectivity.ui.wizards.OtherDriverUIContributor;
+
+public class MySQLOtherDriverUIContributor extends OtherDriverUIContributor {
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.mysql.ui/src/org/eclipse/datatools/enablement/mysql/ui/Activator.java b/plugins/org.eclipse.datatools.enablement.mysql.ui/src/org/eclipse/datatools/enablement/mysql/ui/Activator.java
new file mode 100644
index 0000000..ae26bf3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql.ui/src/org/eclipse/datatools/enablement/mysql/ui/Activator.java
@@ -0,0 +1,50 @@
+package org.eclipse.datatools.enablement.mysql.ui;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.datatools.enablement.mysql.ui";
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/.classpath b/plugins/org.eclipse.datatools.enablement.mysql/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/.gitignore b/plugins/org.eclipse.datatools.enablement.mysql/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/.project b/plugins/org.eclipse.datatools.enablement.mysql/.project
new file mode 100644
index 0000000..205aa1f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.mysql</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.datatools.enablement.mysql/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..73f4382
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Fri Apr 13 14:14:14 PDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.4
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.enablement.mysql/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..002d8d9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/META-INF/MANIFEST.MF
@@ -0,0 +1,24 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.datatools.enablement.mysql; singleton:=true
+Bundle-Version: 1.2.1.qualifier
+Bundle-Activator: org.eclipse.datatools.enablement.mysql.MysqlPlugin
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.emf.ecore,
+ org.eclipse.core.runtime,
+ org.eclipse.datatools.modelbase.dbdefinition,
+ org.eclipse.datatools.modelbase.sql,
+ org.eclipse.datatools.connectivity.sqm.core,
+ org.eclipse.datatools.connectivity
+Import-Package: com.ibm.icu.text;version="3.6.1",
+ com.ibm.icu.util;version="3.6.1"
+Export-Package: org.eclipse.datatools.enablement.internal.mysql.connection,
+ org.eclipse.datatools.enablement.mysql;x-internal:=true,
+ org.eclipse.datatools.enablement.mysql.catalog;x-internal:=true,
+ org.eclipse.datatools.enablement.mysql.catalog.loaders,
+ org.eclipse.datatools.enablement.mysql.ddl;x-internal:=true,
+ org.eclipse.datatools.enablement.mysql.ddl.shared
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/about.html b/plugins/org.eclipse.datatools.enablement.mysql/about.html
new file mode 100644
index 0000000..129db9d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/build.properties b/plugins/org.eclipse.datatools.enablement.mysql/build.properties
new file mode 100644
index 0000000..842707f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/build.properties
@@ -0,0 +1,24 @@
+###############################################################################
+# Copyright (c) 2005 Versant Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     Versant Corporation - initial API and implementation
+###############################################################################
+bin.includes = plugin.xml,\
+               .,\
+               plugin.properties,\
+               about.html,\
+               META-INF/,\
+               icons/
+jars.compile.order = .
+source.. = src/
+plugin.version =	1.0.0.200706071
+javadoc.dir =		doc/api/
+download.dir =		./download/
+javac.source =		1.4
+javac.target =		1.4
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/icons/jdbc_16.gif b/plugins/org.eclipse.datatools.enablement.mysql/icons/jdbc_16.gif
new file mode 100644
index 0000000..ef7809c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/icons/jdbc_16.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/plugin.properties b/plugins/org.eclipse.datatools.enablement.mysql/plugin.properties
new file mode 100644
index 0000000..e4f65bc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/plugin.properties
@@ -0,0 +1,35 @@
+###############################################################################
+# Copyright (c) 2005 Versant Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     Versant Corporation - initial API and implementation
+###############################################################################
+pluginName=Eclipse Data Tools Platform MySQL Enablement Plug-in
+providerName=Eclipse Data Tools Platform
+
+driverClass = Driver Class
+driverVendor = Vendor
+driverVersion = Version
+driverDBName = Database Name
+driverConnectionURL = Connection URL
+driverUID = User ID
+driverPWD = Password
+driverCP = Properties
+
+MYSQL_CATEGORY_NAME = MySQL
+4_0_VERSION_CATEGORY_NAME = 4.0
+4_1_VERSION_CATEGORY_NAME = 4.1
+5_0_VERSION_CATEGORY_NAME = 5.0
+5_1_VERSION_CATEGORY_NAME = 5.1
+
+org.eclipse.datatools.enablement.mysql.4_0.driverTemplate = MySQL JDBC Driver
+org.eclipse.datatools.enablement.mysql.4_1.driverTemplate = MySQL JDBC Driver
+org.eclipse.datatools.enablement.mysql.5_0.driverTemplate = MySQL JDBC Driver
+org.eclipse.datatools.enablement.mysql.5_1.driverTemplate = MySQL JDBC Driver
+
+jdbc.connection.name = JDBC Connection
+profile.mysql.title = MySQL
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/plugin.xml b/plugins/org.eclipse.datatools.enablement.mysql/plugin.xml
new file mode 100644
index 0000000..5015436
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/plugin.xml
@@ -0,0 +1,519 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+
+      <extension
+        point="org.eclipse.datatools.connectivity.sqm.core.catalog">
+        <catalog
+            version="4.0"
+            product="MySql"
+            provider="org.eclipse.datatools.enablement.mysql.catalog.MySqlCatalogProvider">
+        </catalog>
+    </extension>
+    <extension
+        point="org.eclipse.datatools.connectivity.sqm.core.ddlGeneration">
+        <generator
+            version="4.0"
+            product="MySql"
+            class="org.eclipse.datatools.enablement.mysql.ddl.MySqlDdlGenerator">
+        </generator>
+    </extension>
+    
+   <extension
+        point="org.eclipse.datatools.connectivity.sqm.core.catalog">
+        <catalog
+            version="4.1"
+            product="MySql"
+            provider="org.eclipse.datatools.enablement.mysql.catalog.MySqlCatalogProvider">
+        </catalog>
+    </extension>
+    <extension
+        point="org.eclipse.datatools.connectivity.sqm.core.ddlGeneration">
+        <generator
+            version="4.1"
+            product="MySql"
+            class="org.eclipse.datatools.enablement.mysql.ddl.MySqlDdlGenerator">
+        </generator>
+    </extension>
+	
+	 <extension
+        point="org.eclipse.datatools.connectivity.sqm.core.catalog">
+        <catalog
+            version="5.0"
+            product="MySql"
+            provider="org.eclipse.datatools.enablement.mysql.catalog.MySqlCatalogProvider">
+        </catalog>
+    </extension>
+    <extension
+        point="org.eclipse.datatools.connectivity.sqm.core.ddlGeneration">
+        <generator
+            version="5.0"
+            product="MySql"
+            class="org.eclipse.datatools.enablement.mysql.ddl.MySqlDdlGenerator">
+        </generator>
+    </extension>
+	
+	 <extension
+        point="org.eclipse.datatools.connectivity.sqm.core.catalog">
+        <catalog
+            version="5.1"
+            product="MySql"
+            provider="org.eclipse.datatools.enablement.mysql.catalog.MySqlCatalogProvider">
+        </catalog>
+    </extension>
+    <extension
+        point="org.eclipse.datatools.connectivity.sqm.core.ddlGeneration">
+        <generator
+            version="5.1"
+            product="MySql"
+            class="org.eclipse.datatools.enablement.mysql.ddl.MySqlDdlGenerator">
+        </generator>
+    </extension>
+       
+	<extension
+         point="org.eclipse.datatools.connectivity.connectionProfile">
+      <connectionProfile
+            category="org.eclipse.datatools.connectivity.db.category"
+            configurationType="org.eclipse.datatools.connectivity.db.generic.configurationType"
+            icon="icons/jdbc_16.gif"
+            id="org.eclipse.datatools.enablement.mysql.connectionProfile"
+            name="%profile.mysql.title"
+            pingFactory="org.eclipse.datatools.enablement.internal.mysql.connection.JDBCMySQLConnectionFactory"
+            propertiesPersistenceHook="org.eclipse.datatools.enablement.internal.mysql.connection.MySQLPasswordPropertiesPersistenceHook"/>
+      <connectionFactory
+            class="org.eclipse.datatools.enablement.internal.mysql.connection.JDBCMySQLConnectionFactory"
+            id="java.sql.Connection"
+            name="%jdbc.connection.name"
+            profile="org.eclipse.datatools.enablement.mysql.connectionProfile"/>
+    </extension>
+   
+    <extension
+         point="org.eclipse.datatools.connectivity.driverExtension">    
+         <category
+      		parentCategory="org.eclipse.datatools.connectivity.db.driverCategory"
+            id="org.eclipse.datatools.enablement.mysql.driverCategory"
+            name="%MYSQL_CATEGORY_NAME"/>
+         <category
+      		parentCategory="org.eclipse.datatools.enablement.mysql.driverCategory"
+            id="org.eclipse.datatools.enablement.mysql.4_0.driverCategory"
+            name="%4_0_VERSION_CATEGORY_NAME"/>
+		 <category
+      		parentCategory="org.eclipse.datatools.enablement.mysql.driverCategory"
+            id="org.eclipse.datatools.enablement.mysql.4_1.driverCategory"
+            name="%4_1_VERSION_CATEGORY_NAME"/>
+         <category
+      		parentCategory="org.eclipse.datatools.enablement.mysql.driverCategory"
+            id="org.eclipse.datatools.enablement.mysql.5_0.driverCategory"
+            name="%5_0_VERSION_CATEGORY_NAME"/>
+		<category
+      		parentCategory="org.eclipse.datatools.enablement.mysql.driverCategory"
+            id="org.eclipse.datatools.enablement.mysql.5_1.driverCategory"
+            name="%5_1_VERSION_CATEGORY_NAME"/>
+            
+      <driverTemplate
+            createDefault="false"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.enablement.mysql.4_0.driverTemplate"
+            jarList="mysql-connector-java-4.0.0-bin.jar"
+            name="%org.eclipse.datatools.enablement.mysql.4_0.driverTemplate"
+            parentCategory="org.eclipse.datatools.enablement.mysql.4_0.driverCategory">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%driverClass"
+                  value="com.mysql.jdbc.Driver"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%driverVendor"
+                  value="MySql"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%driverVersion"
+                  value="4.0"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%driverDBName"
+                  value="database"
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%driverConnectionURL"
+                  value="jdbc:mysql://localhost:3306/database"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%driverUID"
+                  value="root"
+                  required="false"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.connectionProperties"
+                  name="%driverCP"
+                  value="zeroDateTimeBehavior=convertToNull"
+                  required="false"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%driverPWD"
+                  required="false"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+		
+      <driverTemplate
+            createDefault="false"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.enablement.mysql.4_1.driverTemplate"
+            jarList="mysql-connector-java-4.1.0-bin.jar"
+            name="%org.eclipse.datatools.enablement.mysql.4_1.driverTemplate"
+            parentCategory="org.eclipse.datatools.enablement.mysql.4_1.driverCategory">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%driverClass"
+                  value="com.mysql.jdbc.Driver"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%driverVendor"
+                  value="MySql"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%driverVersion"
+                  value="4.1"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%driverDBName"
+                  value="database"
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%driverConnectionURL"
+                  value="jdbc:mysql://localhost:3306/database"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%driverUID"
+                  value="root"
+                  required="false"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%driverPWD"
+                  required="false"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+		
+      <driverTemplate
+            createDefault="false"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.enablement.mysql.5_0.driverTemplate"
+            jarList="mysql-connector-java-5.0.0-bin.jar"
+            name="%org.eclipse.datatools.enablement.mysql.5_0.driverTemplate"
+            parentCategory="org.eclipse.datatools.enablement.mysql.5_0.driverCategory">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%driverClass"
+                  value="com.mysql.jdbc.Driver"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%driverVendor"
+                  value="MySql"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%driverVersion"
+                  value="5.0"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%driverDBName"
+                  value="database"
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%driverConnectionURL"
+                  value="jdbc:mysql://localhost:3306/database"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%driverUID"
+                  value="root"
+                  required="false"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%driverPWD"
+                  required="false"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>
+
+	 <driverTemplate
+            createDefault="false"
+            emptyJarListIsOK="false"
+            id="org.eclipse.datatools.enablement.mysql.5_1.driverTemplate"
+            jarList="mysql-connector-java-5.1.0-bin.jar"
+            name="%org.eclipse.datatools.enablement.mysql.5_1.driverTemplate"
+            parentCategory="org.eclipse.datatools.enablement.mysql.5_1.driverCategory">
+         <properties>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.driverClass"
+                  name="%driverClass"
+                  value="com.mysql.jdbc.Driver"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.vendor"
+                  name="%driverVendor"
+                  value="MySql"
+                  required="true"
+                  visible="false"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.version"
+                  name="%driverVersion"
+                  value="5.1"
+                  required="true"
+                  visible="false"/>   
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.databaseName"
+                  name="%driverDBName"
+                  value="database"
+                  required="true"
+                  visible="true"/>                             
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.URL"
+                  name="%driverConnectionURL"
+                  value="jdbc:mysql://localhost:3306/database"
+                  required="true"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.username"
+                  name="%driverUID"
+                  value="root"
+                  required="false"
+                  visible="true"/>
+            <property
+                  generated="false"
+                  id="org.eclipse.datatools.connectivity.db.password"
+                  name="%driverPWD"
+                  required="false"
+                  visible="true"/>
+         </properties>
+      </driverTemplate>		
+   </extension>
+    <extension
+          point="org.eclipse.datatools.connectivity.sqm.core.catalog">
+       <overrideLoader
+             eclass="org.eclipse.datatools.modelbase.sql.constraints.TableConstraint"
+             product="MySql"
+             provider="org.eclipse.datatools.enablement.mysql.catalog.loaders.MySqlTableConstraintLoader"
+             version="5.1">
+       </overrideLoader>
+       <overrideLoader
+             eclass="org.eclipse.datatools.modelbase.sql.tables.Table"
+             product="MySql"
+             provider="org.eclipse.datatools.enablement.mysql.catalog.loaders.MySqlTableLoader"
+             version="5.1">
+       </overrideLoader>
+       <overrideLoader
+             eclass="org.eclipse.datatools.modelbase.sql.tables.Column"
+             product="MySql"
+             provider="org.eclipse.datatools.enablement.mysql.catalog.loaders.MySqlTableColumnLoader"
+             version="5.1">
+       </overrideLoader>
+       <overrideLoader
+             eclass="org.eclipse.datatools.modelbase.sql.constraints.Index"
+             product="MySql"
+             provider="org.eclipse.datatools.enablement.mysql.catalog.loaders.MySqlTableIndexLoader"
+             version="5.1">
+       </overrideLoader>
+       <overrideLoader
+             eclass="org.eclipse.datatools.modelbase.sql.routines.Routine"
+             product="MySql"
+             provider="org.eclipse.datatools.enablement.mysql.catalog.loaders.MySqlRoutineLoader"
+             version="5.1">
+       </overrideLoader>
+       <overrideLoader
+             eclass="org.eclipse.datatools.modelbase.sql.accesscontrol.AuthorizationIdentifier"
+             product="MySql"
+             provider="org.eclipse.datatools.enablement.mysql.catalog.loaders.MySqlAuthorizationIdentifierLoader"
+             version="5.1">
+       </overrideLoader>
+    </extension>
+    <extension
+          point="org.eclipse.datatools.connectivity.sqm.core.catalog">
+       <overrideLoader
+             eclass="org.eclipse.datatools.modelbase.sql.constraints.TableConstraint"
+             product="MySql"
+             provider="org.eclipse.datatools.enablement.mysql.catalog.loaders.MySqlTableConstraintLoader"
+             version="5.0">
+       </overrideLoader>
+       <overrideLoader
+             eclass="org.eclipse.datatools.modelbase.sql.tables.Table"
+             product="MySql"
+             provider="org.eclipse.datatools.enablement.mysql.catalog.loaders.MySqlTableLoader"
+             version="5.0">
+       </overrideLoader>
+       <overrideLoader
+             eclass="org.eclipse.datatools.modelbase.sql.tables.Column"
+             product="MySql"
+             provider="org.eclipse.datatools.enablement.mysql.catalog.loaders.MySqlTableColumnLoader"
+             version="5.0">
+       </overrideLoader>
+       <overrideLoader
+             eclass="org.eclipse.datatools.modelbase.sql.constraints.Index"
+             product="MySql"
+             provider="org.eclipse.datatools.enablement.mysql.catalog.loaders.MySqlTableIndexLoader"
+             version="5.0">
+       </overrideLoader>
+       <overrideLoader
+             eclass="org.eclipse.datatools.modelbase.sql.routines.Routine"
+             product="MySql"
+             provider="org.eclipse.datatools.enablement.mysql.catalog.loaders.MySqlRoutineLoader"
+             version="5.0">
+       </overrideLoader>
+       <overrideLoader
+             eclass="org.eclipse.datatools.modelbase.sql.accesscontrol.AuthorizationIdentifier"
+             product="MySql"
+             provider="org.eclipse.datatools.enablement.mysql.catalog.loaders.MySqlAuthorizationIdentifierLoader"
+             version="5.0">
+       </overrideLoader>
+    </extension>
+    <extension
+          point="org.eclipse.datatools.connectivity.sqm.core.catalog">
+       <overrideLoader
+             eclass="org.eclipse.datatools.modelbase.sql.constraints.TableConstraint"
+             product="MySql"
+             provider="org.eclipse.datatools.enablement.mysql.catalog.loaders.MySqlTableConstraintLoader"
+             version="4.1">
+       </overrideLoader>
+       <overrideLoader
+             eclass="org.eclipse.datatools.modelbase.sql.tables.Table"
+             product="MySql"
+             provider="org.eclipse.datatools.enablement.mysql.catalog.loaders.MySqlTableLoader"
+             version="4.1">
+       </overrideLoader>
+       <overrideLoader
+             eclass="org.eclipse.datatools.modelbase.sql.tables.Column"
+             product="MySql"
+             provider="org.eclipse.datatools.enablement.mysql.catalog.loaders.MySqlTableColumnLoader"
+             version="4.1">
+       </overrideLoader>
+       <overrideLoader
+             eclass="org.eclipse.datatools.modelbase.sql.constraints.Index"
+             product="MySql"
+             provider="org.eclipse.datatools.enablement.mysql.catalog.loaders.MySqlTableIndexLoader"
+             version="4.1">
+       </overrideLoader>
+       <overrideLoader
+             eclass="org.eclipse.datatools.modelbase.sql.routines.Routine"
+             product="MySql"
+             provider="org.eclipse.datatools.enablement.mysql.catalog.loaders.MySqlRoutineLoader"
+             version="4.1">
+       </overrideLoader>
+       <overrideLoader
+             eclass="org.eclipse.datatools.modelbase.sql.accesscontrol.AuthorizationIdentifier"
+             product="MySql"
+             provider="org.eclipse.datatools.enablement.mysql.catalog.loaders.MySqlAuthorizationIdentifierLoader"
+             version="4.1">
+       </overrideLoader>
+    </extension>
+    <extension
+          point="org.eclipse.datatools.connectivity.sqm.core.catalog">
+       <overrideLoader
+             eclass="org.eclipse.datatools.modelbase.sql.constraints.TableConstraint"
+             product="MySql"
+             provider="org.eclipse.datatools.enablement.mysql.catalog.loaders.MySqlTableConstraintLoader"
+             version="4.0">
+       </overrideLoader>
+       <overrideLoader
+             eclass="org.eclipse.datatools.modelbase.sql.tables.Table"
+             product="MySql"
+             provider="org.eclipse.datatools.enablement.mysql.catalog.loaders.MySqlTableLoader"
+             version="4.0">
+       </overrideLoader>
+       <overrideLoader
+             eclass="org.eclipse.datatools.modelbase.sql.tables.Column"
+             product="MySql"
+             provider="org.eclipse.datatools.enablement.mysql.catalog.loaders.MySqlTableColumnLoader"
+             version="4.0">
+       </overrideLoader>
+       <overrideLoader
+             eclass="org.eclipse.datatools.modelbase.sql.constraints.Index"
+             product="MySql"
+             provider="org.eclipse.datatools.enablement.mysql.catalog.loaders.MySqlTableIndexLoader"
+             version="4.0">
+       </overrideLoader>
+       <overrideLoader
+             eclass="org.eclipse.datatools.modelbase.sql.routines.Routine"
+             product="MySql"
+             provider="org.eclipse.datatools.enablement.mysql.catalog.loaders.MySqlRoutineLoader"
+             version="4.0">
+       </overrideLoader>
+       <overrideLoader
+             eclass="org.eclipse.datatools.modelbase.sql.accesscontrol.AuthorizationIdentifier"
+             product="MySql"
+             provider="org.eclipse.datatools.enablement.mysql.catalog.loaders.MySqlAuthorizationIdentifierLoader"
+             version="4.0">
+       </overrideLoader>
+    </extension>
+    <extension
+          point="org.eclipse.datatools.connectivity.sqm.core.mappings">
+       <providerIDtoDriverCategoryID
+             driverCategoryID="org.eclipse.datatools.enablement.mysql.driverCategory"
+             providerID="org.eclipse.datatools.enablement.mysql.connectionProfile">
+       </providerIDtoDriverCategoryID>
+    </extension>
+</plugin>
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/internal/mysql/connection/IMySQLConnectionProfileConstants.java b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/internal/mysql/connection/IMySQLConnectionProfileConstants.java
new file mode 100644
index 0000000..8a9e7ee
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/internal/mysql/connection/IMySQLConnectionProfileConstants.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.internal.mysql.connection;
+
+
+public interface IMySQLConnectionProfileConstants {
+
+	public static final String MYSQL_CATEGORY_ID = "org.eclipse.datatools.enablement.mysql.driverCategory"; //$NON-NLS-1$
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/internal/mysql/connection/JDBCMySQLConnectionFactory.java b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/internal/mysql/connection/JDBCMySQLConnectionFactory.java
new file mode 100644
index 0000000..f1f68a9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/internal/mysql/connection/JDBCMySQLConnectionFactory.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.datatools.enablement.internal.mysql.connection;
+
+import org.eclipse.datatools.connectivity.IConnection;
+import org.eclipse.datatools.connectivity.IConnectionFactory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+
+
+public class JDBCMySQLConnectionFactory implements IConnectionFactory {
+
+	public JDBCMySQLConnectionFactory() {
+		super();
+	}
+
+	public IConnection createConnection(IConnectionProfile profile) {
+		JDBCMySQLJDBCConnection connection = new JDBCMySQLJDBCConnection(profile,
+				getClass());
+		connection.open();
+		return connection;
+	}
+
+	public IConnection createConnection(IConnectionProfile profile, String uid,
+			String pwd) {
+		return createConnection(profile);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/internal/mysql/connection/JDBCMySQLJDBCConnection.java b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/internal/mysql/connection/JDBCMySQLJDBCConnection.java
new file mode 100644
index 0000000..40914e5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/internal/mysql/connection/JDBCMySQLJDBCConnection.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.internal.mysql.connection;
+
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.drivers.jdbc.JDBCConnection;
+
+public class JDBCMySQLJDBCConnection extends JDBCConnection {
+
+	public JDBCMySQLJDBCConnection(IConnectionProfile profile, Class factoryClass) {
+		super(profile, factoryClass);
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/internal/mysql/connection/MySQLPasswordPropertiesPersistenceHook.java b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/internal/mysql/connection/MySQLPasswordPropertiesPersistenceHook.java
new file mode 100644
index 0000000..6891dda
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/internal/mysql/connection/MySQLPasswordPropertiesPersistenceHook.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.internal.mysql.connection;
+
+import org.eclipse.datatools.connectivity.drivers.jdbc.JDBCPasswordPropertyPersistenceHook;
+
+public class MySQLPasswordPropertiesPersistenceHook extends
+		JDBCPasswordPropertyPersistenceHook {
+
+	public String getConnectionPropertiesPageID() {
+		return "org.eclipse.datatools.enablement.mysql.profileProperties"; //$NON-NLS-1$
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/MysqlPlugin.java b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/MysqlPlugin.java
new file mode 100644
index 0000000..8b1b920
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/MysqlPlugin.java
@@ -0,0 +1,89 @@
+ /*******************************************************************************
+  * Copyright (c) 2005 Versant Corporation and others.
+  * All rights reserved. This program and the accompanying materials
+  * are made available under the terms of the Eclipse Public License v1.0
+  * which accompanies this distribution, and is available at
+  * http://www.eclipse.org/legal/epl-v10.html
+  * 
+  * Contributors:
+  *     Versant Corporation - initial API and implementation
+  *******************************************************************************/
+ package org.eclipse.datatools.enablement.mysql;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The main plugin class to be used in the desktop.
+ */
+public class MysqlPlugin extends Plugin {
+	// The shared instance.
+	private static MysqlPlugin plugin;
+
+	// Resource bundle.
+	private ResourceBundle resourceBundle;
+
+	public static final String ID = "org.eclipse.wst.rdb.mysql"; //$NON-NLS-1$
+
+	/**
+	 * The constructor.
+	 */
+	public MysqlPlugin() {
+		super();
+		plugin = this;
+	}
+
+	/**
+	 * This method is called upon plug-in activation
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+	}
+
+	/**
+	 * This method is called when the plug-in is stopped
+	 */
+	public void stop(BundleContext context) throws Exception {
+		super.stop(context);
+		plugin = null;
+		resourceBundle = null;
+	}
+
+	/**
+	 * Returns the shared instance.
+	 */
+	public static MysqlPlugin getDefault() {
+		return plugin;
+	}
+
+	/**
+	 * Returns the string from the plugin's resource bundle, or 'key' if not
+	 * found.
+	 */
+	public static String getResourceString(String key) {
+		ResourceBundle bundle = MysqlPlugin.getDefault().getResourceBundle();
+		try {
+			return (bundle != null) ? bundle.getString(key) : key;
+		} catch (MissingResourceException e) {
+			return key;
+		}
+	}
+
+	/**
+	 * Returns the plugin's resource bundle,
+	 */
+	public ResourceBundle getResourceBundle() {
+		try {
+			if (resourceBundle == null)
+				resourceBundle = ResourceBundle
+						.getBundle("org.eclipse.wst.rdb.mysql.MysqlPluginResources"); //$NON-NLS-1$
+		} catch (MissingResourceException x) {
+			resourceBundle = null;
+		}
+		return resourceBundle;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/MySqlCatalogColumn.java b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/MySqlCatalogColumn.java
new file mode 100644
index 0000000..f717dbf
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/MySqlCatalogColumn.java
@@ -0,0 +1,34 @@
+ /*******************************************************************************
+  * Copyright (c) 2005, 2009 Versant Corporation and others.
+  * All rights reserved. This program and the accompanying materials
+  * are made available under the terms of the Eclipse Public License v1.0
+  * which accompanies this distribution, and is available at
+  * http://www.eclipse.org/legal/epl-v10.html
+  * 
+  * Contributors:
+  *     Versant Corporation - initial API and implementation
+  *     brianf - updates to make catalog loaders work with filtering
+  *******************************************************************************/
+ package org.eclipse.datatools.enablement.mysql.catalog;
+
+import java.sql.Connection;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCColumn;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+/**
+ * This class holds the column information
+ */
+public class MySqlCatalogColumn extends JDBCColumn {
+
+	private static final long serialVersionUID = 3257008765202151480L;
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((MySqlCatalogDatabase) database).getConnection();
+	}
+
+	public Database getCatalogDatabase() {
+		return this.getTable().getSchema().getDatabase();
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/MySqlCatalogDatabase.java b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/MySqlCatalogDatabase.java
new file mode 100644
index 0000000..f6a3e37
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/MySqlCatalogDatabase.java
@@ -0,0 +1,165 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2009 Versant Corporation and others. All rights reserved. This
+ * program and the accompanying materials are made available under the terms of
+ * the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Versant Corporation - initial API and implementation
+ * 		brianf - updates to make catalog loading work with filtering
+ ******************************************************************************/
+package org.eclipse.datatools.enablement.mysql.catalog;
+
+import java.lang.ref.SoftReference;
+import java.sql.Connection;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCDatabase;
+import org.eclipse.datatools.connectivity.sqm.core.util.CatalogLoaderOverrideManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCBaseLoader;
+import org.eclipse.datatools.enablement.mysql.catalog.loaders.MySqlAuthorizationIdentifierLoader;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.SQLAccessControlPackage;
+import org.eclipse.datatools.modelbase.sql.schema.SQLSchemaPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+
+/**
+ * This is the Database implementation, and contains schemas (MySql does not
+ * have schemas)
+ */
+public class MySqlCatalogDatabase extends JDBCDatabase {
+	
+	private Boolean schemasLoaded = Boolean.FALSE;
+	private Boolean catalogsLoaded = Boolean.FALSE;
+	private Boolean authorizationIdsLoaded = Boolean.FALSE;
+
+	private transient SoftReference authorizationIdLoaderRef;
+
+	public MySqlCatalogDatabase(Connection connection){
+		super(connection);
+	}
+
+	public void refresh() {
+		synchronized (schemasLoaded) {
+			if (schemasLoaded.booleanValue()) {
+				schemasLoaded = Boolean.FALSE;
+			}
+		}
+
+		synchronized (catalogsLoaded) {
+			if (catalogsLoaded.booleanValue()) {
+				catalogsLoaded = Boolean.FALSE;
+			}
+		}
+
+		synchronized (authorizationIdsLoaded) {
+			if (authorizationIdsLoaded.booleanValue()) {
+				authorizationIdsLoaded = Boolean.FALSE;
+			}
+		}
+
+		super.refresh();
+	}
+
+	public EList getSchemas() {
+		synchronized (schemasLoaded) {
+			if(!schemasLoaded.booleanValue()) { 
+				if (schemas == null) {
+					schemas = new EObjectWithInverseResolvingEList(Schema.class, this,
+							SQLSchemaPackage.DATABASE__SCHEMAS,
+							SQLSchemaPackage.SCHEMA__DATABASE);
+					Schema schema = new MySqlCatalogSchema();
+					schema.setName(getName());
+					schemas.add(schema);
+					schemasLoaded = Boolean.TRUE;
+				}
+				return this.schemas;
+			}
+		}
+		return super.getSchemas();
+	}
+
+	public EList getCatalogs() {
+		synchronized (catalogsLoaded) {
+			if(!catalogsLoaded.booleanValue()) { 
+				if (catalogs == null) {
+					catalogs = new EObjectWithInverseResolvingEList(Schema.class, this,
+									SQLSchemaPackage.DATABASE__CATALOGS,
+									SQLSchemaPackage.SCHEMA__DATABASE);
+					catalogsLoaded = Boolean.TRUE;
+				}
+			}
+		}
+		return catalogs;
+	}
+
+	public EList getAuthorizationIds() {
+		synchronized (this.authorizationIdsLoaded) {
+			if (!authorizationIdsLoaded.booleanValue())
+				this.loadAuthorizationIdentifiers();
+		}
+
+		return super.getAuthorizationIds();
+	}
+
+	private void loadAuthorizationIdentifiers() {
+		boolean deliver = eDeliver();
+		try {
+			List container = super.getAuthorizationIds();
+			List existingAuthorizationIds = new ArrayList(container);
+
+			eSetDeliver(false);
+
+			container.clear();
+			getAuthorizationIdentifierLoader().loadAuthorizationIdentifiers(container, existingAuthorizationIds);
+			getAuthorizationIdentifierLoader().clearAuthorizationIdentifiers(existingAuthorizationIds);
+
+			authorizationIdsLoaded = Boolean.TRUE;
+
+		} catch (Exception e) {
+			e.printStackTrace();
+
+		} finally {
+			eSetDeliver(deliver);
+		}
+	}
+
+	protected final MySqlAuthorizationIdentifierLoader getAuthorizationIdentifierLoader() {
+		// cache the AuthorizationIdentifierLoader for better performance
+		if (authorizationIdLoaderRef == null || authorizationIdLoaderRef.get() == null) {
+			authorizationIdLoaderRef = new SoftReference(createAuthorizationIdentifierLoader());
+		}
+
+		return (MySqlAuthorizationIdentifierLoader) authorizationIdLoaderRef.get();
+	}
+
+	/**
+	 * Creates and returns an instance of the AuthorizationIdentifierLoader. By default an instance of the
+	 * <code>MySqlAuthorizationIdentifierLoader</code> is returned. This behavior can be changed by providing an
+	 * <code>overrideLoader</code> using the eclass org.eclipse.datatools.modelbase.sql.accesscontrol.
+	 * AuthorizationIdentifier.
+	 * 
+	 * @return An instance of MySqlAuthorizationIdentifierLoader.
+	 */
+	private MySqlAuthorizationIdentifierLoader createAuthorizationIdentifierLoader() {
+		// get the database definition for the actual database
+		DatabaseDefinition databaseDefinition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry()
+				.getDefinition(this.getCatalogDatabase());
+
+		// see if someone is interested in providing an own authorization identifier loader
+		JDBCBaseLoader loader = CatalogLoaderOverrideManager.INSTANCE.getLoaderForDatabase(databaseDefinition,
+				SQLAccessControlPackage.eINSTANCE.getAuthorizationIdentifier().getInstanceClassName());
+
+		if (loader != null) {
+			MySqlAuthorizationIdentifierLoader authorizationIdLoader = (MySqlAuthorizationIdentifierLoader) loader;
+			authorizationIdLoader.setCatalogObject(this);
+			return authorizationIdLoader;
+		}
+
+		return new MySqlAuthorizationIdentifierLoader(this);
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/MySqlCatalogForeignKey.java b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/MySqlCatalogForeignKey.java
new file mode 100644
index 0000000..13426c2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/MySqlCatalogForeignKey.java
@@ -0,0 +1,114 @@
+ /*******************************************************************************
+  * Copyright (c) 2005, 2009 Versant Corporation and others.
+  * All rights reserved. This program and the accompanying materials
+  * are made available under the terms of the Eclipse Public License v1.0
+  * which accompanies this distribution, and is available at
+  * http://www.eclipse.org/legal/epl-v10.html
+  * 
+  * Contributors:
+  *     Versant Corporation - initial API and implementation
+  *     Sybase, Inc. - updates to make catalog loaders work with filtering
+  *******************************************************************************/
+ package org.eclipse.datatools.enablement.mysql.catalog;
+
+import java.sql.Connection;
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCForeignKey;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.constraints.SQLConstraintsPackage;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+/**
+ * This class is the ForeignKey implementation
+ */
+public class MySqlCatalogForeignKey extends JDBCForeignKey {
+
+	private static final long serialVersionUID = 3833460717268643894L;
+
+	private boolean eAnnotationLoaded = false;
+
+	public void refresh() {
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public EList getEAnnotations() {
+		if (!this.eAnnotationLoaded)
+			this.loadEAnnotations();
+		return this.eAnnotations;
+	}
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((MySqlCatalogDatabase) database).getConnection();
+	}
+
+	public Database getCatalogDatabase() {
+		return this.getBaseTable().getSchema().getDatabase();
+	}
+
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if (id == SQLConstraintsPackage.FOREIGN_KEY__EANNOTATIONS) {
+			this.getEAnnotations();
+		}
+
+		return super.eIsSet(eFeature);
+	}
+
+	private synchronized void loadEAnnotations() {
+		if (this.eAnnotationLoaded)
+			return;
+		this.eAnnotationLoaded = true;
+		super.getEAnnotations();
+
+		boolean deliver = this.eDeliver();
+		this.eSetDeliver(false);
+
+		MySqlCatalogForeignKey.setAsIdentifyingRelatinship(this, this
+				.isIdentifyingRelationship(super.getMembers()));
+
+		this.eSetDeliver(deliver);
+	}
+
+	public static void setAsIdentifyingRelatinship(ForeignKey fk,
+			boolean identifying) {
+		EAnnotation eAnnotation = fk
+				.addEAnnotation(RDBCorePlugin.FK_MODELING_RELATIONSHIP);
+		fk.addEAnnotationDetail(eAnnotation,
+				RDBCorePlugin.FK_IS_IDENTIFYING_RELATIONSHIP, new Boolean(
+						identifying).toString());
+		fk.addEAnnotationDetail(eAnnotation,
+				RDBCorePlugin.FK_CHILD_MULTIPLICITY, RDBCorePlugin.MANY);
+		fk.addEAnnotationDetail(eAnnotation, RDBCorePlugin.FK_CHILD_ROLE_NAME,
+				new String());
+		fk.addEAnnotationDetail(eAnnotation,
+				RDBCorePlugin.FK_PARENT_MULTIPLICITY,
+				(fk.getMembers().size() > 0) ? RDBCorePlugin.ZERO_TO_ONE
+						: RDBCorePlugin.ONE);
+		fk.addEAnnotationDetail(eAnnotation, RDBCorePlugin.FK_PARENT_ROLE_NAME,
+				new String());
+	}
+
+	public boolean isIdentifyingRelationship(EList columns) {
+		boolean isIdentifying = true;
+		Iterator it = columns.iterator();
+		while (it.hasNext()) {
+			Column column = (Column) it.next();
+			if (!column.isPartOfPrimaryKey()) {
+				isIdentifying = false;
+				break;
+			}
+		}
+		return isIdentifying;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/MySqlCatalogIndex.java b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/MySqlCatalogIndex.java
new file mode 100644
index 0000000..cbb6b21
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/MySqlCatalogIndex.java
@@ -0,0 +1,42 @@
+ /*******************************************************************************
+  * Copyright (c) 2005, 2009 Versant Corporation and others.
+  * All rights reserved. This program and the accompanying materials
+  * are made available under the terms of the Eclipse Public License v1.0
+  * which accompanies this distribution, and is available at
+  * http://www.eclipse.org/legal/epl-v10.html
+  * 
+  * Contributors:
+  *     Versant Corporation - initial API and implementation
+  *     brianf - updates to make catalog loading work with filters
+  *******************************************************************************/
+ package org.eclipse.datatools.enablement.mysql.catalog;
+
+import java.sql.Connection;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCIndex;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+/**
+ * This class is the Index implementation
+ */
+public class MySqlCatalogIndex extends JDBCIndex {
+
+	private static final long serialVersionUID = 4121975841161754672L;
+
+	public void refresh() {
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((MySqlCatalogDatabase) database).getConnection();
+	}
+
+	public Database getCatalogDatabase() {
+		return this.getSchema().getDatabase();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/MySqlCatalogPrimaryKey.java b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/MySqlCatalogPrimaryKey.java
new file mode 100644
index 0000000..51f032e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/MySqlCatalogPrimaryKey.java
@@ -0,0 +1,42 @@
+ /*******************************************************************************
+  * Copyright (c) 2005, 2009 Versant Corporation and others.
+  * All rights reserved. This program and the accompanying materials
+  * are made available under the terms of the Eclipse Public License v1.0
+  * which accompanies this distribution, and is available at
+  * http://www.eclipse.org/legal/epl-v10.html
+  * 
+  * Contributors:
+  *     Versant Corporation - initial API and implementation
+  *     Sybase, Inc. - updates to make catalog loader work with filters
+  *******************************************************************************/
+ package org.eclipse.datatools.enablement.mysql.catalog;
+
+import java.sql.Connection;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCPrimaryKey;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+/**
+ * This class is the PrimaryKey implementation
+ */
+public class MySqlCatalogPrimaryKey extends JDBCPrimaryKey {
+
+	private static final long serialVersionUID = 3256441425942951474L;
+
+	public void refresh() {
+	}
+
+	public boolean isSystemObject() {
+		return false;
+	}
+
+	public Connection getConnection() {
+		Database database = this.getCatalogDatabase();
+		return ((MySqlCatalogDatabase) database).getConnection();
+	}
+
+	public Database getCatalogDatabase() {
+		return this.getBaseTable().getSchema().getDatabase();
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/MySqlCatalogProvider.java b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/MySqlCatalogProvider.java
new file mode 100644
index 0000000..71580a1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/MySqlCatalogProvider.java
@@ -0,0 +1,42 @@
+ /*******************************************************************************
+  * Copyright (c) 2005, 2009 Versant Corporation and others.
+  * All rights reserved. This program and the accompanying materials
+  * are made available under the terms of the Eclipse Public License v1.0
+  * which accompanies this distribution, and is available at
+  * http://www.eclipse.org/legal/epl-v10.html
+  * 
+  * Contributors:
+  *     Versant Corporation - initial API and implementation
+  *     brianf - updates to make catalog loading work with filtering
+  *******************************************************************************/
+ package org.eclipse.datatools.enablement.mysql.catalog;
+
+import java.sql.Connection;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExecutableExtension;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogProvider;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+public class MySqlCatalogProvider implements ICatalogProvider,
+		IExecutableExtension {
+
+    private String product;
+    private String version;
+
+	public void setInitializationData(IConfigurationElement config,
+			String propertyName, Object data) throws CoreException {
+		this.product = config.getAttribute("product"); //$NON-NLS-1$
+		this.version = config.getAttribute("version"); //$NON-NLS-1$
+	}
+
+	public Database getCatalogDatabase(Connection connection) {
+		Database database = new MySqlCatalogDatabase(connection);
+		database.setVendor(this.product);
+		database.setVersion(this.version);
+		return database;
+	}
+
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/MySqlCatalogSchema.java b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/MySqlCatalogSchema.java
new file mode 100644
index 0000000..bf54de2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/MySqlCatalogSchema.java
@@ -0,0 +1,26 @@
+ /*******************************************************************************
+  * Copyright (c) 2005, 2009 Versant Corporation and others.
+  * All rights reserved. This program and the accompanying materials
+  * are made available under the terms of the Eclipse Public License v1.0
+  * which accompanies this distribution, and is available at
+  * http://www.eclipse.org/legal/epl-v10.html
+  * 
+  * Contributors:
+  *     Versant Corporation - initial API and implementation
+  *     brianf - updates to make catalog loaders work with filtering
+  *******************************************************************************/
+ package org.eclipse.datatools.enablement.mysql.catalog;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCSchema;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+
+/**
+ * This class is the Schema implementation, its purpose is to load tables
+ */
+public class MySqlCatalogSchema extends JDBCSchema {
+
+	public Database getCatalogDatabase() {
+		return super.getDatabase();
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/MySqlCatalogTable.java b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/MySqlCatalogTable.java
new file mode 100644
index 0000000..af761f8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/MySqlCatalogTable.java
@@ -0,0 +1,92 @@
+ /*******************************************************************************
+  * Copyright (c) 2005, 2009 Versant Corporation and others.
+  * All rights reserved. This program and the accompanying materials
+  * are made available under the terms of the Eclipse Public License v1.0
+  * which accompanies this distribution, and is available at
+  * http://www.eclipse.org/legal/epl-v10.html
+  * 
+  * Contributors:
+  *     Versant Corporation - initial API and implementation
+  *     Brianf - updates to get catalog loading working with filtering
+  *******************************************************************************/
+package org.eclipse.datatools.enablement.mysql.catalog;
+
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCTable;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.IndexMember;
+import org.eclipse.datatools.modelbase.sql.constraints.SQLConstraintsPackage;
+import org.eclipse.datatools.modelbase.sql.constraints.TableConstraint;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.tables.SQLTablesPackage;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+
+/**
+ * This class is the Schema implementation, its purpose is to load columns,
+ * constraint, index and primaryKeys
+ */
+public class MySqlCatalogTable extends JDBCTable {
+
+	private static final long serialVersionUID = 3761127145711088689L;
+
+	private String tableType;
+	private boolean isAutoInc;
+	
+	public boolean eIsSet(EStructuralFeature eFeature) {
+		int id = eDerivedStructuralFeatureID(eFeature);
+		if (id == SQLTablesPackage.PERSISTENT_TABLE__TRIGGERS) {
+			this.getTriggers();
+		}
+
+		return super.eIsSet(eFeature);
+	}
+
+	public String getTableType() {
+		return tableType;
+	}
+
+	public void setTableType(String tableType) {
+		this.tableType = tableType;
+	}
+
+	public boolean isAutoInc() {
+		return isAutoInc;
+	}
+
+	public void setAutoInc(boolean autoInc) {
+		isAutoInc = autoInc;
+	}
+
+	public EList getConstraints() {
+		if (constraints == null) {
+			constraints = new EObjectContainmentWithInverseEList(TableConstraint.class, this, SQLTablesPackage.BASE_TABLE__CONSTRAINTS, SQLConstraintsPackage.TABLE_CONSTRAINT__BASE_TABLE);
+		}
+		return constraints;
+	}
+
+	public Index findIndexWithColumnName(String colName) {
+		EList eList = this.getIndex();
+		for (Iterator it = eList.iterator(); it.hasNext();) {
+			MySqlCatalogIndex index = (MySqlCatalogIndex) it.next();
+			EList list = index.getMembers();
+			for (Iterator iter = list.iterator(); iter.hasNext();) {
+				IndexMember member = (IndexMember) iter.next();
+				if (member.getColumn().getName().equals(colName)) {
+					return index;
+				}
+			}
+		}
+		return null;
+	}
+
+	public Database getCatalogDatabase() {
+		return this.getSchema().getDatabase();		
+	}
+
+	protected void loadSupertable() {
+		supertableLoaded = Boolean.FALSE;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/loaders/MySqlAuthorizationIdentifierLoader.java b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/loaders/MySqlAuthorizationIdentifierLoader.java
new file mode 100644
index 0000000..b630159
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/loaders/MySqlAuthorizationIdentifierLoader.java
@@ -0,0 +1,141 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Zenika
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: queinnec - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.mysql.catalog.loaders;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.connection.ConnectionFilter;
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.loader.IConnectionFilterProvider;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCBaseLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.SchemaObjectFilterProvider;
+import org.eclipse.datatools.enablement.mysql.model.impl.MySqlUserImpl;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.User;
+
+/**
+ * This class adds the ability to retrieve a list of authorization identifiers from a MySQL database.
+ * 
+ * @author pierre.queinnec@zenika.com
+ */
+public class MySqlAuthorizationIdentifierLoader extends JDBCBaseLoader {
+
+	private static final String USER_QUERY = "SELECT * FROM mysql.user;"; //$NON-NLS-1$
+	private static final String USER_NAME = "User";
+	private static final String HOST_NAME = "Host";
+
+	public MySqlAuthorizationIdentifierLoader() {
+		this(null);
+	}
+
+	public MySqlAuthorizationIdentifierLoader(ICatalogObject catalogObject) {
+		this(catalogObject, new SchemaObjectFilterProvider(ConnectionFilter.SEQUENCE_FILTER));
+	}
+
+	/**
+	 * @param catalogObject
+	 * @param connectionFilterProvider
+	 */
+	public MySqlAuthorizationIdentifierLoader(ICatalogObject catalogObject,
+			IConnectionFilterProvider connectionFilterProvider) {
+
+		super(catalogObject, connectionFilterProvider);
+	}
+
+	public void clearAuthorizationIdentifiers(List existingAuthorizationIds) {
+		existingAuthorizationIds.clear();
+	}
+
+	public void loadAuthorizationIdentifiers(List containmentList, List existingAuthorizationIds) throws SQLException {
+		ResultSet rs = null;
+		PreparedStatement stmt = null;
+		try {
+			// initActiveFilter();
+
+			stmt = getCatalogObject().getConnection().prepareStatement(USER_QUERY);
+			rs = createResultSet(stmt);
+
+			while (rs.next()) {
+				String userDisplayName = this.toDisplayLabel(rs);
+
+				if (userDisplayName == null || isFiltered(userDisplayName)) {
+					continue;
+				}
+
+				User user = (User) getAndRemoveSQLObject(existingAuthorizationIds, userDisplayName);
+
+				if (user == null) {
+					user = processRow(rs);
+					if (user != null) {
+						containmentList.add(user);
+					}
+				} else {
+					containmentList.add(user);
+					if (user instanceof ICatalogObject) {
+						((ICatalogObject) user).refresh();
+					}
+				}
+			}
+		} finally {
+			try {
+				if (rs != null) {
+					rs.close();
+				}
+
+			} catch (SQLException e) {
+				// ignored
+
+			} finally {
+				try {
+					if (stmt != null) {
+						stmt.close();
+					}
+				} catch (SQLException e) {
+					// ignored
+				}
+			}
+		}
+	}
+
+	protected String toDisplayLabel(ResultSet rs) throws SQLException {
+		String userName = rs.getString(USER_NAME).trim();
+		String hostName = rs.getString(HOST_NAME).trim();
+		String displayName = userName + " [" + hostName + ']';
+
+		return displayName;
+	}
+
+	protected User processRow(ResultSet rs) throws SQLException {
+		User user = new MySqlUserImpl();
+		String displayName = this.toDisplayLabel(rs);
+
+		// user.setName(userName);
+		user.setName(displayName);
+		user.setLabel(displayName);
+
+		return user;
+	}
+
+	protected ResultSet createResultSet(PreparedStatement stmt) throws SQLException {
+		try {
+			return stmt.executeQuery();
+
+		} catch (RuntimeException e) {
+			SQLException error = new SQLException(
+					"Error while retrieving database information (authorization identifiers)");
+			error.initCause(e);
+			throw error;
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/loaders/MySqlRoutineLoader.java b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/loaders/MySqlRoutineLoader.java
new file mode 100644
index 0000000..bb0bbd7
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/loaders/MySqlRoutineLoader.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Sybase, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Sybase, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.mysql.catalog.loaders;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCRoutineLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.Messages;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+
+import com.ibm.icu.text.MessageFormat;
+
+public class MySqlRoutineLoader extends JDBCRoutineLoader {
+
+	public MySqlRoutineLoader() {
+		super(null, null);
+	}
+	
+	protected ResultSet createResultSet() throws SQLException {
+		try {
+			Schema schema = getSchema();
+			return getCatalogObject().getConnection().getMetaData()
+					.getProcedures(schema.getDatabase().getName(),
+							schema.getName(), getJDBCFilterPattern());
+		}
+		catch (RuntimeException e) {
+			SQLException error = new SQLException(
+					MessageFormat
+							.format(
+									Messages.Error_Unsupported_DatabaseMetaData_Method,
+									new Object[] { "java.sql.DatabaseMetaData.getProcedures()"})); //$NON-NLS-1$
+			error.initCause(e);
+			throw error;
+		}
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/loaders/MySqlSchemaLoader.java b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/loaders/MySqlSchemaLoader.java
new file mode 100644
index 0000000..d6b7f70
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/loaders/MySqlSchemaLoader.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Sybase, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Sybase, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.mysql.catalog.loaders;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCSchemaLoader;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+
+public class MySqlSchemaLoader extends JDBCSchemaLoader {
+
+	public MySqlSchemaLoader() {
+		super(null, null);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCSchemaLoader#initialize(org.eclipse.datatools.modelbase.sql.schema.Schema, java.sql.ResultSet)
+	 */
+	protected void initialize(Schema schema, ResultSet rs) throws SQLException {
+		schema.setName("Default");
+	}
+
+	public void loadSchemas(List containmentList, Collection existingSchemas)
+		throws SQLException {
+		Schema schema = (Schema) getAndRemoveSQLObject(existingSchemas, "Default");
+		if (schema == null) {
+			schema = processRow(null);
+			if (schema != null) {
+				containmentList.add(schema);
+			}
+		}
+		else {
+			containmentList.add(schema);
+			if (schema instanceof ICatalogObject) {
+				((ICatalogObject) schema).refresh();
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/loaders/MySqlTableColumnLoader.java b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/loaders/MySqlTableColumnLoader.java
new file mode 100644
index 0000000..3536096
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/loaders/MySqlTableColumnLoader.java
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Sybase, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Sybase, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.mysql.catalog.loaders;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableColumnLoader;
+import org.eclipse.datatools.enablement.mysql.catalog.MySqlCatalogColumn;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public class MySqlTableColumnLoader extends JDBCTableColumnLoader {
+
+	public MySqlTableColumnLoader(){
+		super(null, null);
+	}
+
+	protected Column createColumn() {
+		return new MySqlCatalogColumn();
+	}
+
+	protected ResultSet createResultSet() throws SQLException {
+		Connection connection = getCatalogObject().getConnection();
+		DatabaseMetaData dbm = connection.getMetaData();
+		return dbm.getColumns(null, null, this.getTable().getName(), getJDBCFilterPattern());
+	}
+
+	protected Column processRow(ResultSet rs) throws SQLException {
+		Column column = new MySqlCatalogColumn();
+
+		final String columnName = rs.getString(4);
+		column.setName(columnName);
+
+		final String remarks = rs.getString(12);
+		column.setDescription(remarks);
+
+		String defaultValue = rs.getString(13);
+		column.setDefaultValue(defaultValue);
+
+		String typeName = rs.getString(6);
+
+		final DatabaseDefinition databaseDefinition = this
+				.getDatabaseDefinition();
+		PredefinedDataTypeDefinition typeDefinition = databaseDefinition
+				.getPredefinedDataTypeDefinition(typeName);
+		if (typeDefinition != null) {
+			PredefinedDataType type = databaseDefinition
+					.getPredefinedDataType(typeDefinition);
+			if (typeDefinition.isLengthSupported()) {
+				EStructuralFeature feature = type.eClass()
+						.getEStructuralFeature("length"); //$NON-NLS-1$
+				type.eSet(feature, new Integer(rs.getInt(7)));
+			} else if (typeDefinition.isPrecisionSupported()) {
+				EStructuralFeature feature = type.eClass()
+						.getEStructuralFeature("precision"); //$NON-NLS-1$
+				type.eSet(feature, new Integer(rs.getInt(10)));
+			}
+
+			if (typeDefinition.isScaleSupported()) {
+				EStructuralFeature feature = type.eClass()
+						.getEStructuralFeature("scale"); //$NON-NLS-1$
+				type.eSet(feature, new Integer(rs.getInt(9)));
+			}
+			column.setContainedType(type);
+		}
+
+		final String nulls = rs.getString(18);
+		if (nulls.equals("YES")) { //$NON-NLS-1$
+			column.setNullable(true);
+		} else {
+			column.setNullable(false);
+		}
+
+		return column;
+	}
+	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/loaders/MySqlTableConstraintLoader.java b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/loaders/MySqlTableConstraintLoader.java
new file mode 100644
index 0000000..8243e7a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/loaders/MySqlTableConstraintLoader.java
@@ -0,0 +1,396 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Sybase, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Sybase, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.mysql.catalog.loaders;
+
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.core.rte.jdbc.JDBCColumn;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableConstraintLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.Messages;
+import org.eclipse.datatools.enablement.mysql.catalog.MySqlCatalogForeignKey;
+import org.eclipse.datatools.enablement.mysql.catalog.MySqlCatalogPrimaryKey;
+import org.eclipse.datatools.enablement.mysql.catalog.MySqlCatalogTable;
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.PrimaryKey;
+import org.eclipse.datatools.modelbase.sql.constraints.UniqueConstraint;
+import org.eclipse.datatools.modelbase.sql.schema.ReferentialActionType;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.common.util.EList;
+
+import com.ibm.icu.text.MessageFormat;
+
+public class MySqlTableConstraintLoader extends JDBCTableConstraintLoader {
+
+	public MySqlTableConstraintLoader() {
+		super(null, null);
+	}
+
+	protected ForeignKey createForeignKey() {
+		return new MySqlCatalogForeignKey();
+	}
+
+	protected PrimaryKey createPrimaryKey() {
+		return new MySqlCatalogPrimaryKey();
+	}
+
+	public PrimaryKey loadPrimaryKey(PrimaryKey existingPK) throws SQLException {
+		ResultSet rs = null;
+		try {
+			Map columns = new HashMap();
+			PrimaryKey pk = null;
+			for (rs = createPrimaryKeyResultSet(); rs.next();) {
+				int seq = -1;
+				String columnName = null;
+				if (pk == null) {
+					String pkName = rs.getString(6);
+					if (pkName == null) {
+						return null;
+					}
+					columnName = rs.getString(4);
+					seq = rs.getInt(5);
+
+					if (existingPK != null
+							&& pkName.equals(existingPK.getName())) {
+						pk = existingPK;
+						pk.getMembers().clear();
+						if (existingPK instanceof ICatalogObject) {
+							((ICatalogObject) pk).refresh();
+						}
+					}
+					else {
+						pk = createPrimaryKey();
+						pk.setName(pkName);
+					}
+				}
+				if (seq > -1) {
+					columns.put(new Integer(seq),
+							findColumn(columnName));
+				}
+				else {
+					columns.put(new Integer(rs.getShort(COLUMN_KEY_SEQ)),
+							findColumn(rs.getString(COLUMN_COLUMN_NAME)));
+				}
+			}
+			for (Iterator it = columns.values().iterator(); it.hasNext();) {
+				pk.getMembers().add(it.next());
+			}
+			return pk;
+		}
+		finally {
+			if (rs != null) {
+				closeResultSet(rs);
+			}
+		}
+	}
+
+	protected ResultSet createForeignKeyResultSet() throws SQLException {
+		return getCatalogObject().getConnection().
+		getMetaData().getImportedKeys(null, null, this.getTable().getName());
+	}
+
+	protected ResultSet createPrimaryKeyResultSet() throws SQLException {
+		return getCatalogObject().getConnection().
+		getMetaData().getPrimaryKeys(null, null, this.getTable().getName());
+	}
+
+	protected ResultSet createUniqueConstraintResultSet() throws SQLException {
+		try {
+			return getCatalogObject().getConnection().getMetaData()
+					.getExportedKeys(null,
+							null, this.getTable().getName());
+		}
+		catch (RuntimeException e) {
+			SQLException error = new SQLException(
+					MessageFormat
+							.format(
+									Messages.Error_Unsupported_DatabaseMetaData_Method,
+									new Object[] { "java.sql.DatabaseMetaData.getExportedKeys()"})); //$NON-NLS-1$
+			error.initCause(e);
+			throw error;
+		}
+	}
+
+	public void loadUniqueConstraints(PrimaryKey pk, List containmentList,
+			Collection existingUCs) throws SQLException {
+		ResultSet rs = null;
+		if (pk != null) {
+			// Remove this guy from the list.
+			existingUCs.remove(pk);
+		}
+		try {
+			Map constraints = new HashMap();
+			Map constraintColumns = new HashMap();
+			for (rs = createUniqueConstraintResultSet(); rs.next();) {
+				
+				String ucName = rs.getString(COLUMN_PKCOLUMN_NAME);
+				if (ucName.equals(pk == null ? null : pk.getName())) {
+					// Already seen this guy
+					continue;
+				}
+				if (pk.getMembers() != null && pk.getMembers().get(0) instanceof JDBCColumn) {
+					if (((JDBCColumn)pk.getMembers().get(0)).getName().equals(ucName))
+						// don't duplicate the PK
+						continue;
+				}
+				if (!constraints.containsKey(ucName)) {
+					UniqueConstraint uc = (UniqueConstraint) getAndRemoveSQLObject(
+							existingUCs, ucName);
+					if (uc == null) {
+						// create the next UC
+						uc = createUniqueConstraint();
+						uc.setName(ucName);
+					}
+					else {
+						uc.getMembers().clear();
+						if (uc instanceof ICatalogObject) {
+							((ICatalogObject) uc).refresh();
+						}
+					}
+					containmentList.add(uc);
+					constraints.put(ucName, uc);
+					constraintColumns.put(ucName, new TreeMap());
+				}
+				((Map) constraintColumns.get(ucName)).put(new Integer(rs
+						.getShort(COLUMN_KEY_SEQ)), findColumn(rs
+						.getString(COLUMN_PKCOLUMN_NAME)));
+			}
+			for (Iterator it = constraints.entrySet().iterator(); it.hasNext();) {
+				Map.Entry entry = (Map.Entry) it.next();
+				UniqueConstraint uc = (UniqueConstraint) entry.getValue();
+				for (Iterator colIt = ((Map) constraintColumns
+						.get(uc.getName())).values().iterator(); colIt
+						.hasNext();) {
+					uc.getMembers().add(colIt.next());
+				}
+			}
+		}
+		finally {
+			if (rs != null) {
+				closeResultSet(rs);
+			}
+		}
+	}
+
+	private Table findFKTable (String fkTable_Name) {
+		EList tables = this.getTable().getSchema().getTables();
+		ListIterator iterator = tables.listIterator();
+		while (iterator.hasNext()) {
+			Table table = (Table) iterator.next();
+			if (table.getName().equals(fkTable_Name)) 
+				return table;
+		}
+		return null;
+	}
+	
+	public void loadForeignKeys(List containmentList, Collection existingFKs)
+		throws SQLException {
+		
+		ResultSet rs = null;
+		try {
+			Map constraints = new HashMap();
+			Map constraintColumns = new HashMap();
+			for (rs = createForeignKeyResultSet(); rs.next();) {
+				final String fkTable_Name = rs.getString("PKTABLE_NAME"); //$NON-NLS-1$
+				final String fkName = rs.getString("FK_NAME"); //$NON-NLS-1$
+
+				MySqlCatalogTable fkTable = (MySqlCatalogTable) findFKTable(fkTable_Name);
+				if (fkTable == null || fkName == null)
+					continue;
+
+				if (!constraints.containsKey(fkName)) {
+					ForeignKey fk = (ForeignKey) getAndRemoveSQLObject(
+							existingFKs, fkName);
+					if (fk == null) {
+						// create the next FK
+						fk = createForeignKey();
+						fk.setName(fkName);
+					}
+					else {
+						fk.getMembers().clear();
+						if (fk instanceof ICatalogObject) {
+							((ICatalogObject) fk).refresh();
+						}
+					}
+					if (fkTable.getPrimaryKey() != null) {
+						fk.setUniqueConstraint(fkTable.getPrimaryKey());
+					} else {
+						Index index = fkTable.findIndexWithColumnName(rs
+								.getString("PKCOLUMN_NAME")); //$NON-NLS-1$
+						if (index != null) {
+							fk.setUniqueIndex(index);
+						}
+					}
+					short updateRule = rs.getShort("UPDATE_RULE"); //$NON-NLS-1$
+					switch (updateRule) {
+					case DatabaseMetaData.importedKeyCascade:
+						fk.setOnUpdate(ReferentialActionType.CASCADE_LITERAL);
+						break;
+					case DatabaseMetaData.importedKeyRestrict:
+						fk.setOnUpdate(ReferentialActionType.RESTRICT_LITERAL);
+						break;
+					case DatabaseMetaData.importedKeySetDefault:
+						fk.setOnUpdate(ReferentialActionType.SET_DEFAULT_LITERAL);
+						break;
+					case DatabaseMetaData.importedKeySetNull:
+						fk.setOnUpdate(ReferentialActionType.SET_NULL_LITERAL);
+						break;
+					case DatabaseMetaData.importedKeyNoAction:
+                        fk.setOnUpdate(ReferentialActionType.NO_ACTION_LITERAL);
+                        break;
+                    default:
+						fk.setOnUpdate(ReferentialActionType.CASCADE_LITERAL);
+						break;
+					}
+					short deleteRule = rs.getShort("DELETE_RULE"); //$NON-NLS-1$
+					switch (deleteRule) {
+					case DatabaseMetaData.importedKeyCascade:
+						fk.setOnDelete(ReferentialActionType.CASCADE_LITERAL);
+						break;
+					case DatabaseMetaData.importedKeyRestrict:
+						fk.setOnDelete(ReferentialActionType.RESTRICT_LITERAL);
+						break;
+					case DatabaseMetaData.importedKeySetDefault:
+						fk.setOnDelete(ReferentialActionType.SET_DEFAULT_LITERAL);
+						break;
+					case DatabaseMetaData.importedKeySetNull:
+						fk.setOnDelete(ReferentialActionType.SET_NULL_LITERAL);
+						break;
+					case DatabaseMetaData.importedKeyNoAction:
+                        fk.setOnDelete(ReferentialActionType.NO_ACTION_LITERAL);
+                        break;
+                    default:
+						fk.setOnDelete(ReferentialActionType.CASCADE_LITERAL);
+						break;
+					}
+					short deferrability = rs.getShort("DEFERRABILITY"); //$NON-NLS-1$
+					switch (deferrability) {
+					case DatabaseMetaData.importedKeyInitiallyDeferred:
+						fk.setDeferrable(true);
+						fk.setInitiallyDeferred(true);
+						break;
+					case DatabaseMetaData.importedKeyInitiallyImmediate:
+						fk.setDeferrable(true);
+						fk.setInitiallyDeferred(false);
+						break;
+					case DatabaseMetaData.importedKeyNotDeferrable:
+					default:
+						fk.setDeferrable(false);
+						break;
+					}
+					String columnName = rs.getString("FKCOLUMN_NAME"); //$NON-NLS-1$
+					Column column = this.findColumn(columnName);
+					fk.getMembers().add(column);
+					UniqueConstraint uk = findUniqueConstraint(rs
+							.getString(COLUMN_PKTABLE_CAT), rs
+							.getString(COLUMN_PKTABLE_SCHEM), rs
+							.getString(COLUMN_PKTABLE_NAME), rs
+							.getString(COLUMN_PK_NAME));
+					if (uk == null) continue;
+					fk.setUniqueConstraint(uk);
+
+					containmentList.add(fk);
+					constraints.put(fkName, fk);
+					constraintColumns.put(fkName, new TreeMap());
+				}
+				((Map) constraintColumns.get(fkName)).put(new Integer(rs
+						.getShort(COLUMN_KEY_SEQ)), findColumn(rs
+								.getString(COLUMN_FKCOLUMN_NAME)));
+			}
+			for (Iterator it = constraints.entrySet().iterator(); it.hasNext();) {
+				Map.Entry entry = (Map.Entry) it.next();
+				ForeignKey fk = (ForeignKey) entry.getValue();
+				for (Iterator colIt = ((Map) constraintColumns
+						.get(fk.getName())).values().iterator(); colIt
+						.hasNext();) {
+					fk.getMembers().add(colIt.next());
+				}
+				initReferenceAnnotation(fk);
+			}
+		}
+		finally {
+			if (rs != null) {
+				closeResultSet(rs);
+			}
+		}
+	}
+
+	protected UniqueConstraint findUniqueConstraint(String catalogName,
+			String schemaName, String tableName, String keyName) {
+		Table table = findTable(catalogName, schemaName, tableName);
+		if (table == null || !(table instanceof BaseTable)) {
+			return null;
+		}
+		keyName = ((MySqlCatalogTable)table).getPrimaryKey().getName();
+		for (Iterator it = ((BaseTable) table).getUniqueConstraints()
+				.iterator(); it.hasNext();) {
+			UniqueConstraint uc = (UniqueConstraint) it.next();
+			if (keyName.equals(uc.getName())) {
+				return uc;
+			}
+		}
+		return null;
+	}
+
+	protected Table findTable(String catalogName, String schemaName,
+			String tableName) {
+		if (tableName == null) {
+			return null;
+		}
+		if (catalogName == null) {
+			catalogName = getTable().getSchema().getCatalog().getName();
+			try {
+				if (getCatalogObject().getConnection().getMetaData()
+						.supportsCatalogsInTableDefinitions()) {
+					catalogName = new String();
+				}
+			}
+			catch (SQLException e) {
+				e.printStackTrace();
+			}
+		}
+		if (schemaName == null) {
+			schemaName = getTable().getSchema().getName();
+			try {
+				if (getCatalogObject().getConnection().getMetaData()
+						.supportsSchemasInTableDefinitions()) {
+					schemaName = new String();
+				}
+			}
+			catch (SQLException e) {
+				e.printStackTrace();
+			}
+		}
+
+		for (Iterator tableIt = getTable().getSchema().getTables().iterator(); tableIt
+				.hasNext();) {
+			Table table = (Table) tableIt.next();
+			if (tableName.equals(table.getName())) {
+				// found it
+				return table;
+			}
+		}
+		return null;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/loaders/MySqlTableIndexLoader.java b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/loaders/MySqlTableIndexLoader.java
new file mode 100644
index 0000000..9a92c50
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/loaders/MySqlTableIndexLoader.java
@@ -0,0 +1,155 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Sybase, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Sybase, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.mysql.catalog.loaders;
+
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableIndexLoader;
+import org.eclipse.datatools.enablement.mysql.catalog.MySqlCatalogIndex;
+import org.eclipse.datatools.enablement.mysql.catalog.MySqlCatalogTable;
+import org.eclipse.datatools.modelbase.sql.constraints.IncrementType;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.IndexMember;
+import org.eclipse.datatools.modelbase.sql.constraints.PrimaryKey;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.emf.common.util.EList;
+
+public class MySqlTableIndexLoader extends JDBCTableIndexLoader {
+
+	public MySqlTableIndexLoader() {
+		super(null, null);
+	}
+
+	protected ResultSet createResultSet() throws SQLException {
+		return getCatalogObject().getConnection().getMetaData().
+			getIndexInfo(null, null, this.getTable().getName(),
+				false, false);
+	}
+	
+	protected Schema findSchema(String schemaName) {
+		if (schemaName == null) {
+			return getTable().getSchema();
+		}
+		Table table = getTable();
+
+		// short circuit
+		if (schemaName.equals(table.getSchema().getName())) {
+			return table.getSchema();
+		}
+
+		for (Iterator schemIt = table.getSchema().getDatabase().getSchemas()
+				.iterator(); schemIt.hasNext();) {
+			Schema schema = (Schema) schemIt.next();
+			if (schemaName.equals(schema.getName())) {
+				return schema;
+			}
+		}
+		// if we get here, we couldn't find the schema. return table's schema
+		return table.getSchema();
+	}
+
+	public void loadIndexes(List containmentList, Collection existingIndexes)
+		throws SQLException {
+		
+		ResultSet rs = null;
+		try {
+			initActiveFilter();
+			Index index = null;
+			PrimaryKey pk = ((MySqlCatalogTable)this.getTable()).getPrimaryKey();
+			for (rs = createResultSet(); rs.next();) {
+				String indexName = rs.getString(COLUMN_INDEX_NAME);
+				if (indexName == null
+						|| isFiltered(indexName)
+						|| DatabaseMetaData.tableIndexStatistic == rs
+						.getShort(COLUMN_TYPE)) {
+					continue;
+				}
+				final String indName = rs.getString(6);
+				if (pk == null || !indName.equalsIgnoreCase(pk.getName())) {
+					indexName = indName;
+					index = (Index) getAndRemoveSQLObject(existingIndexes,
+							indexName);
+					if (index == null) {
+						index = createIndex();
+						initIndex(index, rs);
+					}
+					else {
+						initIndex(index, rs);
+						index.getMembers().clear();
+						if (index instanceof ICatalogObject) {
+							((ICatalogObject) index).refresh();
+						}
+					}
+					index.setName(indName);
+					index.setSchema(this.getTable().getSchema());
+
+					final boolean isUnqiue = !rs.getBoolean(4);
+					index.setUnique(isUnqiue);
+
+					final short type = rs.getShort(7);
+					if (type == DatabaseMetaData.tableIndexClustered) {
+						index.setClustered(true);
+					}
+					containmentList.add(index);
+
+					final String column_name = rs.getString(9);
+					Column column = findColumn(rs.getString(COLUMN_COLUMN_NAME));
+					if (column == null) {
+						continue;
+					}
+					IndexMember im = createIndexMember();
+					if (im == null) {
+						continue;
+					}
+					initIndexMember(im, column, rs);
+					im.setColumn(findTableColumn(getTable(),
+							column_name));
+					final String order = rs.getString(10);
+					if (order.equals("A")) //$NON-NLS-1$
+						im.setIncrementType(IncrementType.ASC_LITERAL);
+					else if (order.equals("D")) //$NON-NLS-1$
+						im.setIncrementType(IncrementType.DESC_LITERAL);
+					index.getMembers().add(im);
+				}
+			}
+		}
+		finally {
+			if (rs != null) {
+				closeResultSet(rs);
+			}
+		}
+	}
+
+	protected Index createIndex() {
+		return new MySqlCatalogIndex();
+	}
+
+	private Column findTableColumn (Table table, String name) {
+		EList columns = table.getColumns();
+		ListIterator iterator = columns.listIterator();
+		while (iterator.hasNext()) {
+			Column column = (Column) iterator.next();
+			if (column.getName().equals(name)) 
+				return column;
+		}
+		return null;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/loaders/MySqlTableLoader.java b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/loaders/MySqlTableLoader.java
new file mode 100644
index 0000000..f4f4207
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/catalog/loaders/MySqlTableLoader.java
@@ -0,0 +1,183 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Sybase, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Sybase, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.mysql.catalog.loaders;
+
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
+import org.eclipse.datatools.connectivity.sqm.loader.CatalogFilterProvider;
+import org.eclipse.datatools.connectivity.sqm.loader.JDBCTableLoader;
+import org.eclipse.datatools.connectivity.sqm.loader.Messages;
+import org.eclipse.datatools.connectivity.sqm.loader.SchemaFilterProvider;
+import org.eclipse.datatools.enablement.mysql.catalog.MySqlCatalogTable;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+
+import com.ibm.icu.text.MessageFormat;
+
+public class MySqlTableLoader extends JDBCTableLoader {
+	
+	private static final String TYPES_TABLE = "TYPES";
+	private static final String MySQLTYPE_TABLE = "TYPE";
+	private static final String ENGINE_TABLE = "ENGINE";
+	
+	private static final String[] POSSIBLE_TABLE_TYPE_COL_NAMES =
+        new String[] {TYPES_TABLE, TYPE_TABLE, ENGINE_TABLE}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+	
+	private static final String COL_TABLE_NAME = "Name";
+
+	public MySqlTableLoader() {
+		super(null, null);
+		registerTableFactory(TYPES_TABLE, new MySqlTableFactory());
+		registerTableFactory(MySQLTYPE_TABLE, new MySqlTableFactory());
+		registerTableFactory(ENGINE_TABLE, new MySqlTableFactory());
+	}
+
+	/**
+	 * Base factory implementation for LOCAL TEMPORARY type tables.
+	 */
+	public static class MySqlTableFactory extends TableFactory {
+
+		protected Table newTable() {
+			return new MySqlCatalogTable();
+		}
+
+		/**
+		 * Initializes the isLocal attribute in addition to the the attributes
+		 * initialized by super().
+		 * 
+		 * @see org.eclipse.datatools.connectivity.sqm.loader.JDBCTableLoader.TableFactory#initialize(org.eclipse.datatools.modelbase.sql.tables.Table,
+		 *      java.sql.ResultSet)
+		 */
+		public void initialize(Table table, ResultSet rs)
+				throws SQLException {
+			super.initialize(table, rs);
+			((MySqlCatalogTable)table).setAutoInc(rs.getBoolean("Auto_increment")); //$NON-NLS-1$
+		}
+	}
+	
+	public void loadTables(List containmentList, Collection existingTables)
+		throws SQLException {
+		
+		ResultSet rs = null;
+		try {
+			initActiveFilter();
+			rs = createResultSet();
+			if (!mSupportedColumnsInitialized) {
+				Set supportedColumns = new TreeSet();
+				ResultSetMetaData rsmd = rs.getMetaData();
+				for (int colNum = 1, colCount = rsmd.getColumnCount(); colNum <= colCount; ++colNum) {
+					supportedColumns.add(rsmd.getColumnName(colNum));
+				}
+				for (Iterator it = mTableFactories.values().iterator(); it
+						.hasNext();) {
+					((ITableFactory) it.next())
+					.setSupportedColumns(supportedColumns);
+				}
+			}
+			while (rs.next()) {
+				String tableName = rs.getString(COL_TABLE_NAME);
+				if (tableName == null || isFiltered(tableName)) {
+					continue;
+				}
+	            ResultSetMetaData rmd = rs.getMetaData();
+				String typeStr = null;
+				int columnCount = rmd.getColumnCount();
+				HashSet possibleTableTypeColNames = new HashSet(Arrays.asList(POSSIBLE_TABLE_TYPE_COL_NAMES));
+				for(int x = 1; x <= columnCount; x++){
+					String colName = rmd.getColumnName(x).trim();
+	                if(possibleTableTypeColNames.contains(colName)){
+						typeStr = colName;
+						break;
+					}
+				}
+				Table table = (Table) getAndRemoveSQLObject(existingTables,
+						tableName);
+				if (table == null) {
+					table = processRow(rs);
+					if (table != null) {
+						containmentList.add(table);
+					}
+				}
+				else {
+					if (typeStr != null ) {
+						ITableFactory tableFactory = getTableFactory(rs
+								.getString(typeStr));
+						if (tableFactory != null) {
+							tableFactory.initialize(table, rs);
+						}
+					}
+					containmentList.add(table);
+					if (table instanceof ICatalogObject) {
+						((ICatalogObject) table).refresh();
+					}
+				}
+			}
+		}
+		finally {
+			if (rs != null) {
+				closeResultSet(rs);
+			}
+		}
+	}
+
+	protected ResultSet createResultSet() throws SQLException {
+		try {
+			String catalogName = getCatalogObject().getConnection().getCatalog();
+			if(catalogName == null || catalogName.trim().length() == 0){
+				getCatalogObject().getConnection().setCatalog(getSchema().getCatalog().getName());
+			}
+			String query = "SHOW TABLE STATUS FROM `"+getCatalogObject().getConnection().getCatalog()+"`";
+			if (getJDBCFilterPattern() != null && getJDBCFilterPattern().trim().length() > 0)
+				query = query+ " where TABLE NAME LIKE '" + getJDBCFilterPattern() + "'"; //$NON-NLS-1$ //$NON-NLS-2$
+			Statement s = getCatalogObject().getConnection().createStatement();
+			ResultSet r = s.executeQuery(query);
+			return r;
+		}
+		catch (RuntimeException e) {
+			SQLException error = new SQLException(MessageFormat.format(
+					Messages.Error_Unsupported_DatabaseMetaData_Method,
+					new Object[] { "java.sql.DatabaseMetaData.getTables()"})); //$NON-NLS-1$
+			error.initCause(e);
+			throw error;
+		}
+	}
+
+	protected Table processRow(ResultSet rs) throws SQLException {
+        ResultSetMetaData rmd = rs.getMetaData();
+		String typeStr = null;
+		int columnCount = rmd.getColumnCount();
+		HashSet possibleTableTypeColNames = new HashSet(Arrays.asList(POSSIBLE_TABLE_TYPE_COL_NAMES));
+		for(int x = 1; x <= columnCount; x++){
+			String colName = rmd.getColumnName(x).trim();
+            if(possibleTableTypeColNames.contains(colName)){
+				typeStr = colName;
+				break;
+			}
+		}
+		MySqlCatalogTable table = new MySqlCatalogTable();
+		table.setName(rs.getString("Name")); //$NON-NLS-1$
+		if(typeStr != null){
+			table.setTableType(rs.getString(typeStr));
+		}
+		table.setAutoInc(rs.getBoolean("Auto_increment")); //$NON-NLS-1$
+		return table;
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/ddl/MySqlDdlBuilder.java b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/ddl/MySqlDdlBuilder.java
new file mode 100644
index 0000000..3f4827e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/ddl/MySqlDdlBuilder.java
@@ -0,0 +1,244 @@
+ /*******************************************************************************
+  * Copyright (c) 2005, 2008. Versant Corporation and others.
+  * All rights reserved. This program and the accompanying materials
+  * are made available under the terms of the Eclipse Public License v1.0
+  * which accompanies this distribution, and is available at
+  * http://www.eclipse.org/legal/epl-v10.html
+  * 
+  * Contributors:
+  *     Versant Corporation - initial API and implementation
+  *     IBM Corporation - fix for 237964
+  *******************************************************************************/
+ package org.eclipse.datatools.enablement.mysql.ddl;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.datatools.enablement.mysql.catalog.MySqlCatalogTable;
+import org.eclipse.datatools.enablement.mysql.ddl.shared.MySqlDdlBuilderHelper;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.PrimaryKey;
+import org.eclipse.datatools.modelbase.sql.statements.SQLStatement;
+import org.eclipse.datatools.modelbase.sql.tables.ActionGranularityType;
+import org.eclipse.datatools.modelbase.sql.tables.ActionTimeType;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.datatools.modelbase.sql.tables.CheckType;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;
+
+/**
+ * This class generates the actual sql statements for MySql
+ */
+public class MySqlDdlBuilder extends MySqlDdlBuilderHelper{
+
+    public String dropIndex(Index index, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		/*
+		 * ALTER [IGNORE] TABLE tbl_name DROP INDEX index_name
+		 */
+		Table table = index.getTable();
+		return ALTER + SPACE + TABLE + SPACE
+				+ getName(table, quoteIdentifiers, qualifyNames) + SPACE + DROP
+				+ SPACE + INDEX + SPACE
+				+ getName(index, quoteIdentifiers, qualifyNames);
+	}
+
+	public String createTable(BaseTable table, boolean quoteIdentifiers,
+			boolean qualifyNames, boolean generatePk) {
+		PrimaryKey pk = table.getPrimaryKey();
+		boolean hasPK = false;
+		if (pk != null && pk.getMembers() != null && !pk.getMembers().isEmpty()){
+			hasPK = true;
+		}
+		String statement = CREATE + SPACE + TABLE + SPACE
+				+ getName(table, quoteIdentifiers, qualifyNames) + SPACE
+				+ LEFT_PARENTHESIS + NEWLINE;
+		Iterator it = table.getColumns().iterator();
+		while (it.hasNext()) {
+			Column column = (Column) it.next();
+			statement += TAB + getColumnString(column, quoteIdentifiers,
+                    generatePk);
+			if (it.hasNext()) {
+				statement += COMMA;
+			} else if (hasPK && generatePk){
+				statement += COMMA;
+			}
+			statement += NEWLINE;
+		}
+		if (hasPK && generatePk) {
+            setCreateDone(pk);
+            String pkStatement = TAB + PRIMARY_KEY + SPACE + LEFT_PARENTHESIS;
+			// PRIMARY KEY  (`class_a_id`)
+			ArrayList colList = new ArrayList();
+			Iterator iter = pk.getMembers().iterator();
+			while (iter.hasNext()){
+				Column c = (Column) iter.next();
+				if (c.getIdentitySpecifier() != null) {
+					colList.add(c);
+				}
+			}
+			iter = pk.getMembers().iterator();
+			while (iter.hasNext()){
+				Column c = (Column) iter.next();
+				if (c.getIdentitySpecifier() == null) {
+					colList.add(c);
+				}
+			}
+			iter = colList.iterator();
+			while (iter.hasNext()){
+				Column c = (Column) iter.next();
+				String columnName = c.getName();
+				if (quoteIdentifiers) {
+					pkStatement += this.getQuotedString(columnName);
+				} else {
+					pkStatement += columnName;
+				}
+				if (iter.hasNext()) {
+					pkStatement += COMMA;
+				}
+			}
+			pkStatement += RIGHT_PARENTHESIS + NEWLINE;
+			statement += pkStatement;
+		}
+		statement += RIGHT_PARENTHESIS;
+		if (table instanceof MySqlCatalogTable) {
+			MySqlCatalogTable mySqlTable = (MySqlCatalogTable) table;
+			String tableType = mySqlTable.getTableType();
+			if (tableType != null) {
+				statement += SPACE + ENGINE + "=" + tableType; //$NON-NLS-1$
+			}
+		}
+
+		return statement;
+	}
+
+	public String createView(ViewTable view, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		String viewDefinition = CREATE + SPACE;
+		viewDefinition += VIEW + SPACE
+				+ getName(view, quoteIdentifiers, qualifyNames) + SPACE;
+
+		String columns = getViewColumnList(view);
+		if (columns != null) {
+			viewDefinition += LEFT_PARENTHESIS + columns + RIGHT_PARENTHESIS
+					+ SPACE;
+		}
+		viewDefinition += AS + NEWLINE;
+		viewDefinition += view.getQueryExpression().getSQL();
+		CheckType checkType = view.getCheckType();
+		if (checkType == CheckType.CASCADED_LITERAL) {
+			viewDefinition += NEWLINE + WITH + SPACE + CASCADED + SPACE + CHECK
+					+ SPACE + OPTION;
+		} else if (checkType == CheckType.LOCAL_LITERAL) {
+			viewDefinition += NEWLINE + WITH + SPACE + LOCAL + SPACE + CHECK
+					+ SPACE + OPTION;
+		}
+		return viewDefinition;
+	}
+
+	public String createIndex(Index index, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		String statement = CREATE + SPACE;
+		if (index.isUnique()) {
+			statement += UNIQUE + SPACE;
+		}
+		statement += INDEX + SPACE
+				+ getName(index, quoteIdentifiers, false) + SPACE + ON
+				+ SPACE
+				+ getName(index.getTable(), quoteIdentifiers, qualifyNames)
+				+ SPACE + LEFT_PARENTHESIS
+				+ getIndexKeyColumns(index, quoteIdentifiers)
+				+ RIGHT_PARENTHESIS;
+
+		return statement;
+	}
+
+	public String createTrigger(Trigger trigger, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		String statement = CREATE + SPACE + TRIGGER + SPACE
+				+ getName(trigger, quoteIdentifiers, qualifyNames) + SPACE;
+
+		final ActionTimeType actionTime = trigger.getActionTime();
+		if (actionTime == ActionTimeType.AFTER_LITERAL) {
+			statement += AFTER;
+		} else if (actionTime == ActionTimeType.BEFORE_LITERAL) {
+			statement += BEFORE;
+		} else if (actionTime == ActionTimeType.INSTEADOF_LITERAL) {
+			statement += INSTEAD_OF;
+		}
+		statement += SPACE;
+
+		if (trigger.isDeleteType()) {
+			statement += DELETE;
+		} else if (trigger.isInsertType()) {
+			statement += INSERT;
+		} else if (trigger.isUpdateType()) {
+			statement += UPDATE;
+			Collection updateColumns = trigger.getTriggerColumn();
+			if (!updateColumns.isEmpty()) {
+				statement += SPACE + OF + SPACE;
+				Iterator it = updateColumns.iterator();
+				while (it.hasNext()) {
+					Column column = (Column) it.next();
+					statement += column.getName();
+					if (it.hasNext()) {
+						statement += COMMA + SPACE;
+					}
+				}
+			}
+		}
+
+		statement += SPACE
+				+ ON
+				+ SPACE
+				+ getName(trigger.getSubjectTable(), quoteIdentifiers,
+						qualifyNames) + NEWLINE;
+
+		final String newRow = trigger.getNewRow();
+		final String oldRow = trigger.getOldRow();
+//		final String newTable = trigger.getNewTable();
+//		final String oldTable = trigger.getOldTable();
+
+		if (newRow != null && newRow.length() != 0) {
+			statement += REFERENCING + SPACE + NEW + SPACE + AS + SPACE
+					+ newRow + NEWLINE;
+		}
+		if (oldRow != null && oldRow.length() != 0) {
+			statement += REFERENCING + SPACE + OLD + SPACE + AS + SPACE
+					+ oldRow + NEWLINE;
+		}
+
+		if (trigger.getActionGranularity() == ActionGranularityType.ROW_LITERAL) {
+			statement += FOR + SPACE + EACH + SPACE + ROW;
+		} else {
+			statement += FOR + SPACE + EACH + SPACE + STATEMENT;
+		}
+
+		Iterator it = trigger.getActionStatement().iterator();
+		while (it.hasNext()) {
+			SQLStatement s = (SQLStatement) it.next();
+			statement += s.getSQL();
+		}
+
+		return statement;
+	}
+
+	protected String getName(Index index, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		String indexName = index.getName();
+		String dbName = null;
+		if (quoteIdentifiers) {
+			indexName = this.getQuotedString(indexName);
+			if (qualifyNames) {
+				dbName = index.getSchema().getDatabase().getName();
+				dbName = this.getQuotedString(dbName);
+				indexName = dbName + DOT + indexName;
+			}
+		}
+		return indexName;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/ddl/MySqlDdlGenerator.java b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/ddl/MySqlDdlGenerator.java
new file mode 100644
index 0000000..0b8ed03
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/ddl/MySqlDdlGenerator.java
@@ -0,0 +1,24 @@
+ /*******************************************************************************
+  * Copyright (c) 2005, 2008. Versant Corporation and others.
+  * All rights reserved. This program and the accompanying materials
+  * are made available under the terms of the Eclipse Public License v1.0
+  * which accompanies this distribution, and is available at
+  * http://www.eclipse.org/legal/epl-v10.html
+  * 
+  * Contributors:
+  *     Versant Corporation - initial API and implementation
+  *     IBM Corporation - fix for 237964
+  *******************************************************************************/
+package org.eclipse.datatools.enablement.mysql.ddl;
+
+import org.eclipse.datatools.enablement.mysql.ddl.shared.MySqlDdlGeneratorHelper;
+
+ /**
+  * This class uses the MySqlDdlBuilder to generates the sql scripts.
+  */
+ public class MySqlDdlGenerator  extends MySqlDdlGeneratorHelper{
+ 	public MySqlDdlGenerator() {
+ 		super();
+		this.setBuilder(new MySqlDdlBuilder());
+	}
+}
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/ddl/MySqlDdlScript.java b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/ddl/MySqlDdlScript.java
new file mode 100644
index 0000000..72c2a6b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/ddl/MySqlDdlScript.java
@@ -0,0 +1,107 @@
+ /*******************************************************************************
+  * Copyright (c) 2005 Versant Corporation and others.
+  * All rights reserved. This program and the accompanying materials
+  * are made available under the terms of the Eclipse Public License v1.0
+  * which accompanies this distribution, and is available at
+  * http://www.eclipse.org/legal/epl-v10.html
+  * 
+  * Contributors:
+  *     Versant Corporation - initial API and implementation
+  *******************************************************************************/
+ package org.eclipse.datatools.enablement.mysql.ddl;
+
+import java.util.ArrayList;
+
+/**
+ * This class takes all the sql scripts and puts them in the right order, for
+ * execution.
+ */
+public class MySqlDdlScript {
+	protected ArrayList dropForeignKeyStatements = new ArrayList();
+	protected ArrayList dropTableStatements = new ArrayList();
+	protected ArrayList dropViewStatements = new ArrayList();
+	protected ArrayList dropConstraintStatements = new ArrayList();
+	protected ArrayList dropTriggerStatements = new ArrayList();
+	protected ArrayList dropIndexStatements = new ArrayList();
+	protected ArrayList createTableStatements = new ArrayList();
+	protected ArrayList alterTableStatements = new ArrayList();
+	protected ArrayList createViewStatements = new ArrayList();
+	protected ArrayList addForeignKeyStatements = new ArrayList();
+	protected ArrayList createIndexStatements = new ArrayList();
+	protected ArrayList createTriggerStatements = new ArrayList();
+	protected ArrayList addConstraintStatements = new ArrayList();
+
+	public void addDropTableStatement(String statement) {
+		dropTableStatements.add(statement);
+	}
+
+	public void addCreateTableStatement(String statement) {
+		createTableStatements.add(statement);
+	}
+
+	public void addAlterTableStatement(String statement) {
+		createTableStatements.add(statement);
+	}
+
+	public void addDropViewStatement(String statement) {
+		dropViewStatements.add(statement);
+	}
+
+	public void addCreateViewStatement(String statement) {
+		createViewStatements.add(statement);
+	}
+
+	public void addAlterTableDropForeignKeyStatement(String statement) {
+		dropForeignKeyStatements.add(statement);
+	}
+
+	public void addAlterTableAddForeignKeyStatement(String statement) {
+		addForeignKeyStatements.add(statement);
+	}
+
+	public void addDropIndexStatement(String statement) {
+		dropIndexStatements.add(statement);
+	}
+
+	public void addCreateIndexStatement(String statement) {
+		createIndexStatements.add(statement);
+	}
+
+	public void addDropTriggerStatement(String statement) {
+		dropTriggerStatements.add(statement);
+	}
+
+	public void addCreateTriggerStatement(String statement) {
+		createTriggerStatements.add(statement);
+	}
+
+	public void addAlterTableDropConstraintStatement(String statement) {
+		dropConstraintStatements.add(statement);
+	}
+
+	public void addAlterTableAddConstraintStatement(String statement) {
+		addConstraintStatements.add(statement);
+	}
+
+	public String[] getStatements() {
+		ArrayList script = new ArrayList();
+		script.addAll(dropTriggerStatements);
+		script.addAll(dropForeignKeyStatements);
+		script.addAll(dropConstraintStatements);
+		script.addAll(dropIndexStatements);
+		script.addAll(dropViewStatements);
+		script.addAll(dropTableStatements);
+		script.addAll(createTableStatements);
+		script.addAll(alterTableStatements);
+		script.addAll(createViewStatements);
+		script.addAll(createIndexStatements);
+		script.addAll(addConstraintStatements);
+		script.addAll(addForeignKeyStatements);
+		script.addAll(createTriggerStatements);
+
+		String[] scripts = new String[script.size()];
+		script.toArray(scripts);
+		return scripts;
+	}
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/ddl/shared/MySqlDdlBuilderHelper.java b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/ddl/shared/MySqlDdlBuilderHelper.java
new file mode 100644
index 0000000..2985b09
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/ddl/shared/MySqlDdlBuilderHelper.java
@@ -0,0 +1,739 @@
+ /*******************************************************************************
+  * Copyright (c) 2005, 2008. Versant Corporation and others.
+  * All rights reserved. This program and the accompanying materials
+  * are made available under the terms of the Eclipse Public License v1.0
+  * which accompanies this distribution, and is available at
+  * http://www.eclipse.org/legal/epl-v10.html
+  * 
+  * Contributors:
+  *     Versant Corporation - initial API and implementation
+  *     IBM Corporation - fix for 237964
+  *******************************************************************************/
+package org.eclipse.datatools.enablement.mysql.ddl.shared;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentServiceImpl;
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.core.rte.IEngineeringCallBack;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.enablement.mysql.MysqlPlugin;
+import org.eclipse.datatools.modelbase.sql.constraints.CheckConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.Constraint;
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.IndexMember;
+import org.eclipse.datatools.modelbase.sql.constraints.PrimaryKey;
+import org.eclipse.datatools.modelbase.sql.constraints.ReferenceConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.TableConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.UniqueConstraint;
+import org.eclipse.datatools.modelbase.sql.datatypes.BinaryStringDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.expressions.ValueExpression;
+import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.IdentitySpecifier;
+import org.eclipse.datatools.modelbase.sql.schema.ReferentialActionType;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.schema.Sequence;
+import org.eclipse.datatools.modelbase.sql.schema.TypedElement;
+import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
+import org.eclipse.datatools.modelbase.sql.tables.Column;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;
+import org.eclipse.emf.ecore.EObject;
+
+import com.ibm.icu.util.StringTokenizer;
+
+/**
+ * This class generates the actual sql statements for MySql
+ */
+public abstract class MySqlDdlBuilderHelper {
+	protected final static String NEWLINE = System
+			.getProperty("line.separator"); //$NON-NLS-1$
+	protected final static String EMPTY_STRING = ""; //$NON-NLS-1$
+	protected final static String DOT = "."; //$NON-NLS-1$
+	protected final static String SPACE = " "; //$NON-NLS-1$
+	protected final static String COMMA = ","; //$NON-NLS-1$
+	protected final static String QUOTE = "`"; //$NON-NLS-1$
+	protected final static String TAB = "\t"; //$NON-NLS-1$
+	protected final static String LEFT_PARENTHESIS = "("; //$NON-NLS-1$
+	protected final static String RIGHT_PARENTHESIS = ")"; //$NON-NLS-1$
+	protected final static String DROP = "DROP"; //$NON-NLS-1$
+	protected final static String CREATE = "CREATE"; //$NON-NLS-1$
+	protected final static String ALTER = "ALTER"; //$NON-NLS-1$
+	protected final static String ADD = "ADD"; //$NON-NLS-1$
+	protected final static String DELETE = "DELETE"; //$NON-NLS-1$
+	protected final static String UPDATE = "UPDATE"; //$NON-NLS-1$
+	protected final static String CASCADE = "CASCADE"; //$NON-NLS-1$
+	protected final static String CASCADED = "CASCADED"; //$NON-NLS-1$
+	protected final static String CHANGE = "CHANGE"; //$NON-NLS-1$
+	protected final static String COLUMN = "COLUMN"; //$NON-NLS-1$
+	protected final static String LOCAL = "LOCAL"; //$NON-NLS-1$
+	protected final static String OPTION = "OPTION"; //$NON-NLS-1$
+	protected final static String RESTRICT = "RESTRICT"; //$NON-NLS-1$
+	protected final static String NULL = "NULL"; //$NON-NLS-1$
+	protected final static String NOT = "NOT"; //$NON-NLS-1$
+	protected final static String DEFAULT = "DEFAULT"; //$NON-NLS-1$
+	protected final static String SET = "SET"; //$NON-NLS-1$
+	protected final static String TRIGGER = "TRIGGER"; //$NON-NLS-1$
+	protected final static String TABLE = "TABLE"; //$NON-NLS-1$
+	protected final static String VIEW = "VIEW"; //$NON-NLS-1$
+	protected final static String INDEX = "INDEX"; //$NON-NLS-1$
+	protected final static String PROCEDURE = "PROCEDURE"; //$NON-NLS-1$
+	protected final static String CONSTRAINT = "CONSTRAINT"; //$NON-NLS-1$
+	protected final static String UNIQUE = "UNIQUE"; //$NON-NLS-1$
+	protected final static String CHECK = "CHECK"; //$NON-NLS-1$
+	protected final static String ENGINE = "ENGINE"; //$NON-NLS-1$
+	protected final static String ON = "ON"; //$NON-NLS-1$
+	protected final static String FOREIGN_KEY = "FOREIGN KEY"; //$NON-NLS-1$
+	protected final static String REFERENCES = "REFERENCES"; //$NON-NLS-1$
+	protected final static String PRIMARY_KEY = "PRIMARY KEY"; //$NON-NLS-1$
+	protected final static String DEFERRABLE = "DEFERRABLE"; //$NON-NLS-1$
+	protected final static String DEFERRED = "DEFERRED"; //$NON-NLS-1$
+	protected final static String INITIALLY = "INITIALLY"; //$NON-NLS-1$
+	protected final static String ALIAS = "ALIAS"; //$NON-NLS-1$
+	protected final static String AS = "AS"; //$NON-NLS-1$
+	protected final static String FOR = "FOR"; //$NON-NLS-1$
+	protected final static String LONG = "LONG"; //$NON-NLS-1$
+	protected final static String BLOB = "BLOB"; //$NON-NLS-1$
+	protected final static String DBCLOB = "DBCLOB"; //$NON-NLS-1$
+	protected final static String CLOB = "CLOB"; //$NON-NLS-1$
+	protected final static String VARCHAR = "VARCHAR"; //$NON-NLS-1$
+	protected final static String WITH = "WITH"; //$NON-NLS-1$
+	protected final static String COMPARISONS = "COMPARISONS"; //$NON-NLS-1$
+	protected final static String DATALINK = "DATALINK"; //$NON-NLS-1$
+	protected final static String VARGRAPHIC = "VARGRAPHIC"; //$NON-NLS-1$
+	protected final static String AFTER = "AFTER"; //$NON-NLS-1$
+	protected final static String BEFORE = "BEFORE"; //$NON-NLS-1$
+	protected final static String INSTEAD_OF = "INSTEAD OF"; //$NON-NLS-1$
+	protected final static String INSERT = "INSERT"; //$NON-NLS-1$
+	protected final static String NO = "NO"; //$NON-NLS-1$
+	protected final static String OF = "OF"; //$NON-NLS-1$
+	protected final static String REFERENCING = "REFERENCING"; //$NON-NLS-1$
+	protected final static String NEW = "NEW"; //$NON-NLS-1$
+	protected final static String OLD = "OLD"; //$NON-NLS-1$
+	protected final static String NEW_TABLE = "NEW_TABLE"; //$NON-NLS-1$
+	protected final static String OLD_TABLE = "OLD_TABLE"; //$NON-NLS-1$
+	protected final static String EACH = "EACH"; //$NON-NLS-1$
+	protected final static String ROW = "ROW"; //$NON-NLS-1$
+	protected final static String STATEMENT = "STATEMENT"; //$NON-NLS-1$
+	protected final static String WHEN = "WHEN"; //$NON-NLS-1$ 
+	protected final static String AUTO_INCREMENT = "AUTO_INCREMENT"; //$NON-NLS-1$
+
+    protected HashMap createMap = new HashMap();
+    protected HashMap dropMap = new HashMap();
+    protected IEngineeringCallBack callback = null;
+    protected IEngineeringCallBack dummyCallback = null;
+
+    public void setEngineeringCallBack(IEngineeringCallBack callback) {
+    	this.callback = callback;
+    }
+
+    public IEngineeringCallBack getEngineeringCallBack() {
+    	if (this.callback != null) {
+    		return this.callback;
+    	} else{
+    		return this.getDummyEngineeringCallBack();
+    	}
+    }
+
+    public void clearDrop() {
+        dropMap.clear();
+    }
+
+    public void clearCreate() {
+        createMap.clear();
+    }
+
+    protected void setCreateDone(Object sqlObject) {
+        createMap.put(sqlObject, sqlObject);
+    }
+
+    private boolean hasCreateDone(Object sqlObject) {
+        return createMap.get(sqlObject) != null;
+    }
+
+    public String dropTrigger(Trigger trigger, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		return DROP + SPACE + TRIGGER + SPACE
+				+ getName(trigger, quoteIdentifiers, qualifyNames);
+	}
+
+	public String dropView(ViewTable view, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		return DROP + SPACE + VIEW + SPACE
+				+ getName(view, quoteIdentifiers, qualifyNames);
+	}
+
+	public List dropTableConstraint(TableConstraint constraint,
+			boolean quoteIdentifiers, boolean qualifyNames) {
+		ArrayList statements = new ArrayList();
+
+		if (constraint instanceof PrimaryKey) {
+			/*
+			 * -- DROP A PRIMARY KEY - with a auto inc ALTER TABLE xxx CHANGE
+			 * COLUMN `id3` `id3` INT NOT NULL -- it did have a auto inc ALTER
+			 * TABLE `xxx` DROP PRIMARY KEY
+			 */
+			PrimaryKey pk = (PrimaryKey) constraint;
+			if (isAutoInc(pk)) {
+				Column column = getAutoIncColumn(pk);
+				String statement = ALTER
+						+ SPACE
+						+ TABLE
+						+ SPACE
+						+ getName(constraint.getBaseTable(), quoteIdentifiers,
+								qualifyNames) + SPACE + CHANGE + SPACE + COLUMN
+						+ SPACE + getName(column, quoteIdentifiers) + SPACE
+						+ getColumnString(column, quoteIdentifiers, false);
+				statements.add(statement);
+			}
+
+			String statement = ALTER
+					+ SPACE
+					+ TABLE
+					+ SPACE
+					+ getName(constraint.getBaseTable(), quoteIdentifiers,
+							qualifyNames) + SPACE + DROP + SPACE + PRIMARY_KEY;
+			statements.add(statement);
+		} else if (constraint instanceof ForeignKey) {
+			/*
+			 * ALTER TABLE xxx DROP FOREIGN KEY fk_symbol
+			 */
+			String statement = ALTER
+					+ SPACE
+					+ TABLE
+					+ SPACE
+					+ getName(constraint.getBaseTable(), quoteIdentifiers,
+							qualifyNames) + SPACE + DROP + SPACE + FOREIGN_KEY
+					+ SPACE + getName(constraint, quoteIdentifiers);
+			statements.add(statement);
+		}
+
+		return statements;
+
+	}
+
+	private Column getAutoIncColumn(PrimaryKey pk) {
+		Iterator it = pk.getMembers().iterator();
+		if (it.hasNext()) {
+			Column c = (Column) it.next();
+			if (c.getIdentitySpecifier() != null) {
+				return c;
+			}
+		}
+		return null;
+	}
+
+	public String dropTable(BaseTable table, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		return DROP + SPACE + TABLE + SPACE
+				+ getName(table, quoteIdentifiers, qualifyNames);
+	}
+
+	public String alterTableAddColumn(Column column, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		Table table = column.getTable();
+		if (table instanceof BaseTable) {
+			String statement = ALTER + SPACE + TABLE + SPACE
+					+ getName(table, quoteIdentifiers, qualifyNames) + ADD
+					+ SPACE + COLUMN
+					+ getColumnString(column, quoteIdentifiers);
+			return statement;
+		}
+		return null;
+	}
+
+	public String addCheckConstraint(CheckConstraint constraint,
+			boolean quoteIdentifiers, boolean qualifyNames) {
+		return ALTER
+				+ SPACE
+				+ TABLE
+				+ SPACE
+				+ getName(constraint.getBaseTable(), quoteIdentifiers,
+						qualifyNames)
+				+ SPACE
+				+ this
+						.getAddCheckConstraintClause(constraint,
+								quoteIdentifiers);
+	}
+
+	private boolean isAutoInc(UniqueConstraint constraint) {
+		Iterator it = constraint.getMembers().iterator();
+		if (it.hasNext()) {
+			Column c = (Column) it.next();
+			if (c.getIdentitySpecifier() != null) {
+				return true;
+			}
+		}
+		return false;
+
+	}
+
+	public String addUniqueConstraint(UniqueConstraint constraint,
+			boolean quoteIdentifiers, boolean qualifyNames) {
+		if (hasCreateDone(constraint)) return null;
+        if (isAutoInc(constraint)) return null;
+
+        return ALTER
+				+ SPACE
+				+ TABLE
+				+ SPACE
+				+ getName(constraint.getBaseTable(), quoteIdentifiers,
+						qualifyNames) + SPACE + ADD + SPACE
+				+ getUniqueConstraintType(constraint) + SPACE
+				+ LEFT_PARENTHESIS
+				+ getKeyColumns(constraint, quoteIdentifiers)
+				+ RIGHT_PARENTHESIS;
+
+	}
+
+	public String addForeignKey(ForeignKey foreignKey,
+			boolean quoteIdentifiers, boolean qualifyNames) {
+		UniqueConstraint uniqueConstraint = foreignKey.getUniqueConstraint();
+		Index index = foreignKey.getUniqueIndex();
+		Table parentTable = null;
+		String parentKey = null;
+		if (uniqueConstraint != null) {
+			parentTable = uniqueConstraint.getBaseTable();
+			parentKey = this.getKeyColumns(uniqueConstraint, quoteIdentifiers);
+		} else if (index != null) {
+			parentTable = index.getTable();
+			parentKey = this.getParentKeyColumns(index, quoteIdentifiers);
+		}
+        if (parentTable == null) {
+            MysqlPlugin.getDefault().getLog().log(new Status(IStatus.ERROR,
+                    MysqlPlugin.ID, 0,
+                    "Could not generate a foreignKey constraint for table " + //$NON-NLS-1$
+                    foreignKey.getBaseTable(),
+                    new Throwable("No Index or Primary Key on referenced table"))); //$NON-NLS-1$
+            return null;
+		}
+
+		String statement = ALTER
+				+ SPACE
+				+ TABLE
+				+ SPACE
+				+ getName(foreignKey.getBaseTable(), quoteIdentifiers,
+						qualifyNames) + SPACE + ADD + SPACE + CONSTRAINT
+				+ SPACE + getName(foreignKey, quoteIdentifiers) + SPACE
+				+ FOREIGN_KEY + SPACE + LEFT_PARENTHESIS
+				+ this.getKeyColumns(foreignKey, quoteIdentifiers)
+				+ RIGHT_PARENTHESIS + NEWLINE;
+		statement += TAB + REFERENCES + SPACE
+				+ getName(parentTable, quoteIdentifiers, qualifyNames) + SPACE
+				+ LEFT_PARENTHESIS + parentKey + RIGHT_PARENTHESIS;
+
+		/*
+		 * ALTER TABLE `xx1` ADD CONSTRAINT `xx1_foreign_key` FOREIGN KEY
+		 * (xxid1) REFERENCES `xx2` (`xxid2`) ALTER TABLE `xx1` ADD CONSTRAINT
+		 * `xx1_foreign_key` FOREIGN KEY (xxid1) REFERENCES `xx1` (xxid1)
+		 */
+
+		ReferentialActionType action = foreignKey.getOnDelete();
+        if (action != ReferentialActionType.NO_ACTION_LITERAL) {
+			statement += NEWLINE + TAB + ON + SPACE + DELETE + SPACE;
+		}
+		statement += getReferentialAction(action);
+
+		action = foreignKey.getOnUpdate();
+        if (action != ReferentialActionType.NO_ACTION_LITERAL) {
+			statement += NEWLINE + TAB + ON + SPACE + UPDATE + SPACE;
+		}
+		statement += getReferentialAction(action);
+
+		if (foreignKey.isDeferrable()) {
+			statement += NEWLINE + TAB + getDeferrableClause(foreignKey);
+		}
+		return statement;
+	}
+
+	protected String getDeferrableClause(Constraint constraint) {
+		String clause = null;
+		if (constraint.isDeferrable()) {
+			clause = DEFERRABLE;
+			if (constraint.isInitiallyDeferred()) {
+				clause += SPACE + INITIALLY + SPACE + DEFERRED;
+			}
+		}
+		return clause;
+
+	}
+
+	protected String getReferentialAction(ReferentialActionType action) {
+		if (action == ReferentialActionType.CASCADE_LITERAL) {
+			return CASCADE;
+		} else if (action == ReferentialActionType.RESTRICT_LITERAL) {
+			return RESTRICT;
+		} else if (action == ReferentialActionType.SET_DEFAULT_LITERAL) {
+			return SET + SPACE + DEFAULT;
+		} else if (action == ReferentialActionType.SET_NULL_LITERAL) {
+			return SET + SPACE + NULL;
+		}
+		return ""; //$NON-NLS-1$
+	}
+
+	protected String getViewColumnList(ViewTable view) {
+		String columns = null;
+		Iterator it = view.getColumns().iterator();
+		if (it.hasNext()) {
+			Column c = (Column) it.next();
+			columns = c.getName();
+		} else {
+			return null;
+		}
+
+		while (it.hasNext()) {
+			Column c = (Column) it.next();
+			columns += COMMA + SPACE + c.getName();
+		}
+
+		return columns;
+
+	}
+
+	protected String getColumnString(Column column, boolean quoteIdentifiers) {
+		return getColumnString(column, quoteIdentifiers, true);
+	}
+
+	protected String getColumnString(Column column, boolean quoteIdentifiers,
+			boolean includeAutoInc) {
+        ValueExpression exp = column.getGenerateExpression();
+        if(exp != null){
+            String sql = exp.getSQL();
+            if(sql != null){
+                return sql;
+            }
+        }
+		String columnName = column.getName();
+		if (quoteIdentifiers) {
+			columnName = this.getQuotedString(columnName);
+		}
+
+        String dataType = getDataTypeString(column, null);
+		String columnString = columnName + SPACE
+				+ dataType;
+		String defaultValue = column.getDefaultValue();
+		if (defaultValue != null && defaultValue.trim().length() > 0) {
+            if (dataType.equals("DATETIME") || //$NON-NLS-1$
+                    dataType.equals("TIME") || //$NON-NLS-1$
+                    dataType.equals("DATE") || //$NON-NLS-1$
+                    dataType.equals("TIMESTAMP")) { //$NON-NLS-1$
+                defaultValue = "'" + defaultValue.trim() + "'";  //$NON-NLS-1$//$NON-NLS-2$
+            } else if (column.getDataType() instanceof BinaryStringDataType ) {
+                defaultValue = "'" + defaultValue + "'";  //$NON-NLS-1$//$NON-NLS-2$
+            }
+            
+			columnString = columnString + SPACE + DEFAULT + SPACE
+					+ defaultValue;
+		}
+
+		if (!column.isNullable()) {
+			columnString = columnString + SPACE + NOT + SPACE + NULL;
+		}
+		if (includeAutoInc) {
+			IdentitySpecifier specifier = column.getIdentitySpecifier();
+			if (specifier != null) {
+				columnString += SPACE + AUTO_INCREMENT;
+			}
+		}
+
+		return columnString;
+	}
+
+	protected String getUniqueConstraintType(UniqueConstraint constraint) {
+		if (constraint instanceof PrimaryKey) {
+			return PRIMARY_KEY;
+		}
+		return UNIQUE;
+	}
+
+	protected String getAddCheckConstraintClause(CheckConstraint constraint,
+			boolean quoteIdentifiers) {
+		String constraintName = getName(constraint, quoteIdentifiers);
+
+		String text = ADD + SPACE + CONSTRAINT + SPACE + constraintName + SPACE
+				+ CHECK + SPACE + LEFT_PARENTHESIS
+				+ constraint.getSearchCondition().getSQL() + RIGHT_PARENTHESIS;
+		if (constraint.isDeferrable()) {
+			text += SPACE + getDeferrableClause(constraint);
+		}
+		return text;
+	}
+
+	protected String getKeyColumns(ReferenceConstraint constraint,
+			boolean quoteIdentifiers) {
+		String columns = null;
+		Iterator it = constraint.getMembers().iterator();
+		if (it.hasNext()) {
+			Column c = (Column) it.next();
+			String name = c.getName();
+			if (quoteIdentifiers) {
+				name = getQuotedString(name);
+			}
+			columns = name;
+		}
+
+		while (it.hasNext()) {
+			Column c = (Column) it.next();
+			String name = c.getName();
+			if (quoteIdentifiers) {
+				name = getQuotedString(name);
+			}
+			columns += COMMA + SPACE + name;
+		}
+
+		return columns;
+	}
+
+	protected String getIndexKeyColumns(Index index, boolean quoteIdentifiers) {
+		String columns;
+		Iterator it = index.getMembers().iterator();
+		if (it.hasNext()) {
+			IndexMember m = (IndexMember) it.next();
+			String columnName = m.getColumn().getName();
+			if (quoteIdentifiers) {
+				columnName = this.getQuotedString(columnName);
+			}
+			columns = columnName + SPACE + m.getIncrementType().getName();
+		} else {
+            MysqlPlugin.getDefault().getLog().log(new Status(IStatus.ERROR,
+                    MysqlPlugin.ID, 0,
+                    "No column found for index " + index.getName(), //$NON-NLS-1$
+                    new Throwable("Index has no columns"))); //$NON-NLS-1$
+			return null;
+		}
+
+		while (it.hasNext()) {
+			IndexMember m = (IndexMember) it.next();
+			String columnName = m.getColumn().getName();
+			if (quoteIdentifiers) {
+				columnName = this.getQuotedString(columnName);
+			}
+			columns += COMMA + SPACE;
+			columns += columnName + SPACE + m.getIncrementType().getName();
+		}
+		return columns;
+	}
+
+	protected String getParentKeyColumns(Index index, boolean quoteIdentifiers) {
+		String columns;
+		Iterator it = index.getMembers().iterator();
+		if (it.hasNext()) {
+			IndexMember m = (IndexMember) it.next();
+			String columnName = m.getColumn().getName();
+			if (quoteIdentifiers) {
+				columnName = this.getQuotedString(columnName);
+			}
+			columns = columnName;
+		} else {
+            MysqlPlugin.getDefault().getLog().log(new Status(IStatus.ERROR,
+                    MysqlPlugin.ID, 0,
+                    "No column found for index " + index.getName(), //$NON-NLS-1$
+                    new Throwable("Index has no columns"))); //$NON-NLS-1$
+            return null;
+		}
+
+		while (it.hasNext()) {
+			IndexMember m = (IndexMember) it.next();
+			String columnName = m.getColumn().getName();
+			if (quoteIdentifiers) {
+				columnName = this.getQuotedString(columnName);
+			}
+			columns += COMMA + SPACE + columnName;
+		}
+		return columns;
+	}
+
+	protected String getDataTypeString(TypedElement typedElement, Schema schema) {
+		SQLDataType containedType = typedElement.getContainedType();
+		if (containedType != null) {
+			if (containedType instanceof PredefinedDataType) {
+				EObject root = ContainmentServiceImpl.INSTANCE
+						.getRootElement(typedElement);
+				if (root instanceof Database) {
+					DatabaseDefinition def = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry()
+							.getDefinition((Database) root);
+					return def.getPredefinedDataTypeFormattedName(
+                            (PredefinedDataType) containedType);
+				}
+			}
+		} else {
+			UserDefinedType referencedType = typedElement.getReferencedType();
+			if (referencedType != null) {
+				if (referencedType.getSchema() != schema) {
+					return this.getName(referencedType, false, true);
+				} else {
+					return referencedType.getName();
+				}
+			}
+		}
+		return null;
+	}
+
+	protected String getName(TableConstraint constraint,
+			boolean quoteIdentifiers) {
+		String name = constraint.getName();
+
+		if (quoteIdentifiers) {
+			name = this.getQuotedString(name);
+		}
+
+		return name;
+	}
+
+	protected String getName(Trigger trigger, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		String name = trigger.getName();
+		String dbName = null;
+
+		if (quoteIdentifiers) {
+			name = this.getQuotedString(name);
+			if (qualifyNames) {
+				dbName = trigger.getSchema().getDatabase().getName();
+				name = dbName + DOT + name;
+				dbName = this.getQuotedString(dbName);
+			}
+		}
+
+		return name;
+	}
+
+	protected String getName(Routine routine, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		String name = routine.getName();
+		String dbName = null;
+
+		if (quoteIdentifiers) {
+			name = this.getQuotedString(name);
+			if (qualifyNames) {
+				dbName = routine.getSchema().getDatabase().getName();
+				dbName = this.getQuotedString(dbName);
+				name = dbName + DOT + name;
+			}
+		}
+
+		return name;
+	}
+
+	protected String getName(Column column, boolean quoteIdentifiers) {
+		String columnName = column.getName();
+		if (quoteIdentifiers) {
+			columnName = this.getQuotedString(columnName);
+		}
+
+		return columnName;
+	}
+
+	protected String getName(Table table, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		String tableName = table.getName();
+		String dbName = null;
+
+		if (quoteIdentifiers) {
+			tableName = this.getQuotedString(tableName);
+			if (qualifyNames) {
+				dbName = table.getSchema().getDatabase().getName();
+				dbName = this.getQuotedString(dbName);
+				tableName = dbName + DOT + tableName;
+			}
+		}
+
+		return tableName;
+	}
+
+	protected String getName(Sequence sequence, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		String sequenceName = sequence.getName();
+		String dbName = null;
+
+		if (quoteIdentifiers) {
+			sequenceName = this.getQuotedString(sequenceName);
+			if (qualifyNames) {
+				dbName = sequence.getSchema().getDatabase().getName();
+				dbName = this.getQuotedString(dbName);
+				sequenceName = dbName + DOT + sequenceName;
+			}
+		}
+
+		return sequenceName;
+	}
+
+	protected String getName(UserDefinedType type, boolean quoteIdentifiers,
+			boolean qualifyNames) {
+		String typeName = type.getName();
+		String dbName = null;
+
+		if (quoteIdentifiers) {
+			typeName = this.getQuotedString(typeName);
+			if (qualifyNames) {
+				dbName = type.getSchema().getDatabase().getName();
+				dbName = this.getQuotedString(dbName);
+				typeName = dbName + DOT + typeName;
+			}
+
+		}
+
+		return typeName;
+	}
+
+	protected String getQuotedString(String orignal) {
+		StringTokenizer tokenizer = new StringTokenizer(orignal, QUOTE);
+		String result = null;
+		if (tokenizer.countTokens() > 1) {
+			if (tokenizer.hasMoreTokens()) {
+				result = tokenizer.nextToken();
+			}
+			while (tokenizer.hasMoreTokens()) {
+				result = result + QUOTE + QUOTE + tokenizer.nextToken();
+			}
+		} else {
+			if (tokenizer.hasMoreTokens()) {
+				result = tokenizer.nextToken();
+			}
+		}
+		return QUOTE + result + QUOTE;
+	}
+	
+    private IEngineeringCallBack getDummyEngineeringCallBack(){
+    	if (this.dummyCallback == null) this.dummyCallback = new dummyEngineeringCallBack();
+    	return dummyCallback;
+    }
+
+    private class dummyEngineeringCallBack implements IEngineeringCallBack {
+    	public String[] getMessages(){
+    		return new String[]{};
+    	}
+    	
+    	public void writeMessage(String message) {
+    	}
+    }
+
+	public abstract String createTable(BaseTable o, boolean quoteIdentifiers,
+			boolean qualifyNames, boolean generatePKConstraints) ;
+
+	public abstract String createIndex(Index o, boolean quoteIdentifiers,
+			boolean qualifyNames) ;
+
+	public abstract String createTrigger(Trigger o, boolean quoteIdentifiers,
+			boolean qualifyNames);
+
+	public abstract String createView(ViewTable o, boolean quoteIdentifiers,
+			boolean qualifyNames);
+
+	public abstract String dropIndex(Index o, boolean quoteIdentifiers,
+			boolean qualifyNames);
+	
+	protected abstract String getName(Index index, boolean quoteIdentifiers,
+			boolean qualifyNames);
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/ddl/shared/MySqlDdlGeneratorHelper.java b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/ddl/shared/MySqlDdlGeneratorHelper.java
new file mode 100644
index 0000000..072ef9a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/ddl/shared/MySqlDdlGeneratorHelper.java
@@ -0,0 +1,645 @@
+ /*******************************************************************************
+  * Copyright (c) 2005, 2008. Versant Corporation and others.
+  * All rights reserved. This program and the accompanying materials
+  * are made available under the terms of the Eclipse Public License v1.0
+  * which accompanies this distribution, and is available at
+  * http://www.eclipse.org/legal/epl-v10.html
+  * 
+  * Contributors:
+  *     Versant Corporation - initial API and implementation
+  *     IBM Corporation - fix for 237964
+  *******************************************************************************/
+package org.eclipse.datatools.enablement.mysql.ddl.shared;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.ResourceBundle;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentServiceImpl;
+import org.eclipse.datatools.connectivity.sqm.core.definition.EngineeringOptionID;
+import org.eclipse.datatools.connectivity.sqm.core.rte.DDLGenerator;
+import org.eclipse.datatools.connectivity.sqm.core.rte.EngineeringOption;
+import org.eclipse.datatools.connectivity.sqm.core.rte.IEngineeringCallBack;
+import org.eclipse.datatools.connectivity.sqm.internal.core.rte.EngineeringOptionCategory;
+import org.eclipse.datatools.connectivity.sqm.internal.core.rte.EngineeringOptionCategoryID;
+import org.eclipse.datatools.connectivity.sqm.internal.core.rte.fe.GenericDdlGenerationOptions;
+import org.eclipse.datatools.enablement.mysql.ddl.MySqlDdlBuilder;
+import org.eclipse.datatools.enablement.mysql.ddl.MySqlDdlScript;
+import org.eclipse.datatools.modelbase.sql.constraints.CheckConstraint;
+import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
+import org.eclipse.datatools.modelbase.sql.constraints.Index;
+import org.eclipse.datatools.modelbase.sql.constraints.PrimaryKey;
+import org.eclipse.datatools.modelbase.sql.constraints.UniqueConstraint;
+import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.datatools.modelbase.sql.routines.UserDefinedFunction;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
+import org.eclipse.datatools.modelbase.sql.schema.Sequence;
+import org.eclipse.datatools.modelbase.sql.tables.PersistentTable;
+import org.eclipse.datatools.modelbase.sql.tables.Table;
+import org.eclipse.datatools.modelbase.sql.tables.Trigger;
+import org.eclipse.datatools.modelbase.sql.tables.ViewTable;
+
+//TODO: Uncomment this file once RDB modifications are migrated to DTP
+
+
+public class MySqlDdlGeneratorHelper implements DDLGenerator {	
+     private EngineeringOption[] options = null;
+     private EngineeringOptionCategory[] categories = null;
+     private MySqlDdlBuilderHelper builder = null;
+
+ 	public MySqlDdlGeneratorHelper() {
+	}
+
+ 	public String[] generateDDL(SQLObject[] elements, IProgressMonitor progressMonitor){
+		return this.generateDDL(elements, progressMonitor, null);
+	}
+
+    public String[] createSQLObjects(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor){
+    	return this.createSQLObjects(elements, quoteIdentifiers, qualifyNames, progressMonitor,null);
+    }
+    
+    public String[] dropSQLObjects(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor){
+    	return this.dropSQLObjects(elements, quoteIdentifiers, qualifyNames, progressMonitor,null);
+    }
+
+     
+     public String[] generateDDL(SQLObject[] elements,
+    		 				     IProgressMonitor progressMonitor,
+    		 				     IEngineeringCallBack callback) {
+     	this.builder.setEngineeringCallBack(callback);
+        String[] statements = new String[0];
+     	EngineeringOption[] options = this.getSelectedOptions(elements);
+     	
+        if (generateCreateStatement(options)) {
+         	statements = this.createSQLObjects(elements, generateQuotedIdentifiers(options),
+                    generateFullyQualifiedNames(options), progressMonitor);
+        }
+     	
+     	if(generateDropStatement(options)) {
+     		String[] drop = this.dropSQLObjects(elements, generateQuotedIdentifiers(options),
+     						generateFullyQualifiedNames(options), progressMonitor);    	
+     		String[] temp = statements;
+     		statements = new String[temp.length + drop.length];
+            System.arraycopy(drop, 0, statements, 0, drop.length);
+            System.arraycopy(temp, 0, statements, drop.length , temp.length);
+     	}
+     	 
+        return statements;
+     }
+
+     public String[] createSQLObjects(SQLObject[] elements, 
+    		 						  boolean quoteIdentifiers, boolean qualifyNames,
+    		 						  IProgressMonitor progressMonitor,
+    		 						  IEngineeringCallBack callback) {
+    	 this.builder.setEngineeringCallBack(callback);
+         String[] statements = this.createStatements(elements, quoteIdentifiers,
+                 qualifyNames, progressMonitor, 100);
+         return statements;
+     }
+
+     public String[] dropSQLObjects(SQLObject[] elements,
+                                    boolean quoteIdentifiers, boolean qualifyNames,
+                                    IProgressMonitor progressMonitor,
+                                    IEngineeringCallBack callback) {
+    	 this.builder.setEngineeringCallBack(callback);
+         String[] statements = this.dropStatements(elements, quoteIdentifiers,
+                 qualifyNames, progressMonitor, 100);
+         return statements;
+     }
+
+     private String[] createStatements(SQLObject[] elements,
+                                       boolean quoteIdentifiers, boolean qualifyNames,
+                                       IProgressMonitor progressMonitor, int task) {
+         MySqlDdlScript script = new MySqlDdlScript();
+         if (this.builder == null) {
+             this.builder = new MySqlDdlBuilder();
+         }
+
+//         Set set = null;
+//         if (optionDependency != null)
+//             set = optionDependency.getElementsToUse();
+
+         Iterator it = null;
+//         if (set != null && set.size() > 0)
+//             it = optionDependency.getElementsToUse().iterator();
+//         else
+             it = getAllContainedDisplayableElementSet(elements).iterator();
+         
+         EngineeringOption[] options = this.getSelectedOptions(elements);
+         
+         while (it.hasNext()) {
+             Object o = it.next();
+             if (o instanceof PersistentTable) {
+             	 if (!generateTables(options)) continue;
+                 String statement = builder.createTable((PersistentTable) o,
+                         quoteIdentifiers, qualifyNames, generatePKConstraints(options));
+                 if (statement != null)
+                     script.addCreateTableStatement(statement);
+             } else if (o instanceof ViewTable) {
+             	 if (!generateViews(options)) continue;
+                 String statement = builder.createView((ViewTable) o,
+                         quoteIdentifiers, qualifyNames);
+                 if (statement != null)
+                     script.addCreateViewStatement(statement);
+             } else if (o instanceof Trigger) {
+             	 if (!generateTriggers(options)) continue;
+                 String statement = builder.createTrigger((Trigger) o,
+                         quoteIdentifiers, qualifyNames);
+                 if (statement != null)
+                     script.addCreateTriggerStatement(statement);
+             } else if (o instanceof CheckConstraint) {
+             	 if (!generateCKConstraints(options)) continue;
+                 String statement = builder.addCheckConstraint(
+                         (CheckConstraint) o, quoteIdentifiers, qualifyNames);
+                 if (statement != null)
+                     script.addAlterTableAddConstraintStatement(statement);
+             } else if (o instanceof UniqueConstraint) {
+                 String statement = null;
+                 if (o instanceof PrimaryKey) {
+                 	 if(!generatePKConstraints(options)) continue;
+                     statement = builder.addUniqueConstraint(
+                             (UniqueConstraint) o, quoteIdentifiers, qualifyNames);
+                 } else {
+                 	 if (!generateIndexes(options)) continue;
+                     statement = builder.addUniqueConstraint(
+                             (UniqueConstraint) o, quoteIdentifiers, qualifyNames);
+                 }
+                 if (statement != null)
+                     script.addAlterTableAddConstraintStatement(statement);
+             } else if (o instanceof ForeignKey) {
+             	 if(!generateFKConstraints(options)) continue;
+                 String statement = builder.addForeignKey((ForeignKey) o,
+                         quoteIdentifiers, qualifyNames);
+                 if (statement != null)
+                     script.addAlterTableAddForeignKeyStatement(statement);
+             } else if (o instanceof Index) {
+             	 if (!generateIndexes(options)) continue;
+                 String statement = builder.createIndex((Index) o,
+                         quoteIdentifiers, qualifyNames);
+                 if (statement != null)
+                     script.addCreateIndexStatement(statement);
+             }
+         }
+         return script.getStatements();
+     }
+
+     private String[] dropStatements(SQLObject[] elements,
+                                     boolean quoteIdentifiers, boolean qualifyNames,
+                                     IProgressMonitor progressMonitor, int task) {
+         MySqlDdlScript script = new MySqlDdlScript();
+         if (this.builder == null) {
+             this.builder = new MySqlDdlBuilder();
+         }
+
+         Iterator it = getAllContainedDisplayableElementSet(elements).iterator();
+         EngineeringOption[] options = this.getSelectedOptions(elements);
+         
+         while (it.hasNext()) {
+             Object o = it.next();
+             if (o instanceof PersistentTable) {
+             	 if (!generateTables(options)) continue;
+                 String statement = builder.dropTable((PersistentTable) o,
+                         quoteIdentifiers, qualifyNames);
+                 if (statement != null)
+                     script.addDropTableStatement(statement);
+             } else if (o instanceof ViewTable) {
+             	 if (!generateViews(options)) continue;
+                 String statement = builder.dropView((ViewTable) o,
+                         quoteIdentifiers, qualifyNames);
+                 if (statement != null)
+                     script.addDropViewStatement(statement);
+             } else if (o instanceof Trigger) {
+             	 if (!generateTriggers(options)) continue;
+                 String statement = builder.dropTrigger((Trigger) o,
+                         quoteIdentifiers, qualifyNames);
+                 if (statement != null)
+                     script.addDropTriggerStatement(statement);
+             } else if (o instanceof CheckConstraint) {
+             	 if (!generateCKConstraints(options)) continue;
+                 List statements = builder.dropTableConstraint(
+                         (CheckConstraint) o, quoteIdentifiers, qualifyNames);
+                 if (!statements.isEmpty()) {
+                     for (Iterator iter = statements.iterator(); iter.hasNext();) {
+                         String statement = (String) iter.next();
+                         script.addAlterTableDropConstraintStatement(statement);
+                     }
+                 }
+             } else if (o instanceof UniqueConstraint) {
+                 List statements = null;
+                 if (o instanceof PrimaryKey) {
+                 	 if(!generatePKConstraints(options)) continue;
+                     statements = builder.dropTableConstraint(
+                             (UniqueConstraint) o, quoteIdentifiers, qualifyNames);
+                 } else {
+                 	 if (!generateIndexes(options)) continue;
+                     statements = builder.dropTableConstraint(
+                             (UniqueConstraint) o, quoteIdentifiers, qualifyNames);
+                 }
+                 if (!statements.isEmpty()) {
+                     for (Iterator iter = statements.iterator(); iter.hasNext();) {
+                         String statement = (String) iter.next();
+                         script.addAlterTableDropConstraintStatement(statement);
+                     }
+                 }
+             } else if (o instanceof ForeignKey) {
+             	 if(!generateFKConstraints(options)) continue;
+                 List statements = builder.dropTableConstraint((ForeignKey) o,
+                         quoteIdentifiers, qualifyNames);
+                 if (!statements.isEmpty()) {
+                     for (Iterator iter = statements.iterator(); iter.hasNext();) {
+                         String statement = (String) iter.next();
+                         script.addAlterTableDropForeignKeyStatement(statement);
+                     }
+                 }
+             } else if (o instanceof Index) {
+             	 if (!generateIndexes(options)) continue;
+                 String statement = builder.dropIndex((Index) o,
+                         quoteIdentifiers, qualifyNames);
+                 if (statement != null)
+                     script.addDropIndexStatement(statement);
+             }
+         }
+         return script.getStatements();
+     }
+
+     public EngineeringOptionCategory[] getOptionCategories() {
+         if(this.categories == null) {
+             this.categories = GenericDdlGenerationOptions.createDDLGenerationOptionCategories();
+         }
+         return this.categories;
+     }
+     
+     
+     public EngineeringOption[] getOptions(SQLObject[] elements) {
+         return this.calculateOptions(elements);
+     }
+     
+     
+     public EngineeringOption[] getSelectedOptions(SQLObject[] elements) {
+         if (options == null)
+              this.getOptions(elements);
+         return options;
+     }
+
+     
+     public boolean generateDropStatement(EngineeringOption[] options) {
+         return getOptionValueByID(EngineeringOptionID.GENERATE_DROP_STATEMENTS, options);
+     }
+     
+     public boolean generateCreateStatement(EngineeringOption[] options) {
+         return getOptionValueByID(EngineeringOptionID.GENERATE_CREATE_STATEMENTS, options);
+     }
+
+     public boolean generateCommentStatement(EngineeringOption[] options) {
+         return getOptionValueByID(EngineeringOptionID.GENERATE_COMMENTS, options);
+     }
+
+     public boolean generateDatabase(EngineeringOption[] options) {
+         return getOptionValueByID(EngineeringOptionID.GENERATE_DATABASE, options);
+     }
+     
+     public boolean generateSchemas(EngineeringOption[] options) {
+         return getOptionValueByID(EngineeringOptionID.GENERATE_SCHEMAS, options);
+     }
+
+     public boolean generateQuotedIdentifiers(EngineeringOption[] options) {
+         return getOptionValueByID(EngineeringOptionID.GENERATE_QUOTED_IDENTIFIER, options);
+     }
+
+     public boolean generateFullyQualifiedNames(EngineeringOption[] options) {
+         return getOptionValueByID(EngineeringOptionID.GENERATE_FULLY_QUALIFIED_NAME, options);
+     }
+
+     public boolean generateTables(EngineeringOption[] options){
+         return getOptionValueByID(EngineeringOptionID.GENERATE_TABLES, options);
+     }
+     
+     public boolean generateIndexes(EngineeringOption[] options){
+         return getOptionValueByID(EngineeringOptionID.GENERATE_INDICES, options);
+     }
+     
+     public boolean generateStoredProcedures(EngineeringOption[] options){
+         return getOptionValueByID(EngineeringOptionID.GENERATE_STOREDPROCEDURES, options);
+     }
+
+     public boolean generateViews(EngineeringOption[] options){
+         return getOptionValueByID(EngineeringOptionID.GENERATE_VIEWS, options);
+     }
+
+     public boolean generateTriggers(EngineeringOption[] options){
+         return getOptionValueByID(EngineeringOptionID.GENERATE_TRIGGERS, options);
+     }
+
+     public boolean generateSequences(EngineeringOption[] options){
+         return getOptionValueByID(EngineeringOptionID.GENERATE_SEQUENCES, options);
+     }
+     
+     public boolean generateFunctions(EngineeringOption[] options){
+         return getOptionValueByID(EngineeringOptionID.GENERATE_FUNCTIONS, options);
+     }
+     
+     public boolean generateUserDefinedTypes(EngineeringOption[] options){
+         return getOptionValueByID(EngineeringOptionID.GENERATE_USER_DEFINED_TYPE, options);
+     }
+
+     public boolean generateCKConstraints(EngineeringOption[] options){
+         return getOptionValueByID(EngineeringOptionID.GENERATE_CK_CONSTRAINTS, options);
+     }
+     
+     public boolean generatePKConstraints(EngineeringOption[] options){
+         return getOptionValueByID(EngineeringOptionID.GENERATE_PK_CONSTRAINTS, options);
+     }
+     
+     public boolean generateFKConstraints(EngineeringOption[] options){
+         return getOptionValueByID(EngineeringOptionID.GENERATE_FK_CONSTRAINTS, options);
+     }
+     
+     public boolean generateAssertions(EngineeringOption[] options){
+         return getOptionValueByID(EngineeringOptionID.GENERATE_ASSERTIONS, options);
+     }
+     
+     private boolean getOptionValueByID(String optionID, EngineeringOption[] options){
+     	return EngineeringOptionID.getOptionValueByID(optionID, options);
+     }
+     
+ 	protected Set getAllContainedDisplayableElementSet(SQLObject[] elements) {
+         Set s = new HashSet();
+         for(int i=0; i<elements.length; ++i) {
+             s.add(elements[i]);
+             s.addAll(ContainmentServiceImpl.INSTANCE.getAllContainedDisplayableElements(elements[i]));
+         }
+         return s;
+     }
+
+     private EngineeringOption[] calculateOptions(SQLObject[] elements) {
+     	EngineeringOptionCategory[] categories_new = this.getOptionCategories();
+             
+     	EngineeringOptionCategory general_options =null;
+     	EngineeringOptionCategory additional_element =null;
+         for (int i = 0; i < categories_new.length; i++) {
+           if (categories_new[i].getId().equals(EngineeringOptionCategoryID.GENERATE_OPTIONS)){
+               general_options = categories_new[i];
+           } else if (categories_new[i].getId().equals(EngineeringOptionCategoryID.GENERATE_ELEMENTS)){
+               additional_element = categories_new[i];
+           }
+         }           
+         this.options = this.getOptionDependency(elements, general_options, additional_element);
+         return this.options;
+     }
+
+     
+    private EngineeringOption[] getOptionDependency (SQLObject[] elements,EngineeringOptionCategory general_options, EngineeringOptionCategory additional_element){
+     	Set sOptions = new LinkedHashSet();
+
+     	sOptions.add(EngineeringOptionID.GENERATE_FULLY_QUALIFIED_NAME);
+     	sOptions.add(EngineeringOptionID.GENERATE_QUOTED_IDENTIFIER);
+     	sOptions.add(EngineeringOptionID.GENERATE_DROP_STATEMENTS);
+     	sOptions.add(EngineeringOptionID.GENERATE_CREATE_STATEMENTS);
+     	sOptions.add(EngineeringOptionID.GENERATE_COMMENTS);
+     	sOptions.addAll(this.getAllContainedDisplayableElementSetDepedency(elements));
+
+         int idx = 0, size = 0;
+         EngineeringOption[] options = new EngineeringOption[sOptions.size()];
+         int i = 0;
+         for (Iterator it=sOptions.iterator(); it.hasNext(); i++) {
+             options[i] = this.getEngineeringOption((String)it.next(), general_options, additional_element);
+             if (options[i] != null && options[i].getCategory().getId().equals(EngineeringOptionCategoryID.GENERATE_ELEMENTS)) {
+             	idx = i;
+             	size++;
+             }
+         }
+         if (size == 1) {
+         	EngineeringOption option = options[idx];
+         	option.setBoolean(true);
+         }
+         return options;
+     }
+     
+     
+     protected  EngineeringOption getEngineeringOption(String id, EngineeringOptionCategory general_options, EngineeringOptionCategory additional_element)
+     {
+         ResourceBundle resource = ResourceBundle.getBundle("org.eclipse.datatools.connectivity.sqm.internal.core.rte.fe.GenericDdlGeneration"); //$NON-NLS-1$
+
+         try {
+             if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_FULLY_QUALIFIED_NAME))
+                 return new EngineeringOption(id,resource.getString("GENERATE_FULLY_QUALIFIED_NAME"), resource.getString("GENERATE_FULLY_QUALIFIED_NAME_DES"), false,general_options); //$NON-NLS-1$ //$NON-NLS-2$
+             else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_QUOTED_IDENTIFIER))
+                 return new EngineeringOption(id,resource.getString("GENERATE_QUOTED_IDENTIFIER"), resource.getString("GENERATE_QUOTED_IDENTIFIER_DES"),false,general_options); //$NON-NLS-1$ //$NON-NLS-2$
+             else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_DROP_STATEMENTS))
+                 return new EngineeringOption(id,resource.getString("GENERATE_DROP_STATEMENTS"), resource.getString("GENERATE_DROP_STATEMENTS_DES"),false,general_options); //$NON-NLS-1$ //$NON-NLS-2$
+             else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_CREATE_STATEMENTS))
+                 return new EngineeringOption(id,resource.getString("GENERATE_CREATE_STATEMENTS"), resource.getString("GENERATE_CREATE_STATEMENTS_DES"),true,general_options); //$NON-NLS-1$ //$NON-NLS-2$
+             else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_COMMENTS))
+                 return new EngineeringOption(id,resource.getString("GENERATE_COMMENTS"), resource.getString("GENERATE_COMMENTS_DES"),true,general_options); //$NON-NLS-1$ //$NON-NLS-2$
+             else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_SCHEMAS))
+                 return new EngineeringOption(id,resource.getString("GENERATE_SCHEMAS"), resource.getString("GENERATE_SCHEMAS_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+             else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_TABLES))
+                 return new EngineeringOption(id,resource.getString("GENERATE_TABLES"), resource.getString("GENERATE_TABLES_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+             else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_PK_CONSTRAINTS))
+                 return new EngineeringOption(id,resource.getString("GENERATE_PK_CONSTRAINTS"), resource.getString("GENERATE_PK_CONSTRAINTS_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+             else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_CK_CONSTRAINTS))
+                 return new EngineeringOption(id,resource.getString("GENERATE_CK_CONSTRAINTS"), resource.getString("GENERATE_CK_CONSTRAINTS_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+             else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_FK_CONSTRAINTS))
+                 return new EngineeringOption(id,resource.getString("GENERATE_FK_CONSTRAINTS"), resource.getString("GENERATE_FK_CONSTRAINTS_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+             else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_INDICES))
+                 return new EngineeringOption(id,resource.getString("GENERATE_INDEX"), resource.getString("GENERATE_INDEX_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+             else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_STOREDPROCEDURES))
+                 return new EngineeringOption(id,resource.getString("GENERATE_STOREDPROCEDURE"), resource.getString("GENERATE_STOREDPROCEDURE_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+             else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_FUNCTIONS))
+                 return new EngineeringOption(id,resource.getString("GENERATE_FUNCTION"), resource.getString("GENERATE_FUNCTION_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+             else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_VIEWS))
+                 return new EngineeringOption(id,resource.getString("GENERATE_VIEW"), resource.getString("GENERATE_VIEW_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+             else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_TRIGGERS))
+                 return new EngineeringOption(id,resource.getString("GENERATE_TIGGER"), resource.getString("GENERATE_TIGGER_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+             else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_SEQUENCES))
+                 return new EngineeringOption(id,resource.getString("GENERATE_SEQUENCE"), resource.getString("GENERATE_SEQUENCE_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+             else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_USER_DEFINED_TYPE))
+                 return new EngineeringOption(id,resource.getString("GENERATE_USER_DEFINED_TYPE"), resource.getString("GENERATE_USER_DEFINED_TYPE_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+             else if (id.equalsIgnoreCase(EngineeringOptionID.GENERATE_ASSERTIONS))
+                 return new EngineeringOption(id,resource.getString("GENERATE_ASSERTIONS"), resource.getString("GENERATE_GENERATE_ASSERTION_DES"),true,additional_element); //$NON-NLS-1$ //$NON-NLS-2$
+         } catch (Exception e) {
+             //The resource was not found
+         	e.printStackTrace();
+         }
+         return null;
+     }
+
+     
+     protected Set getAllContainedDisplayableElementSetDepedency(SQLObject[] elements) {
+         SingletonOptionDependency sod = SingletonOptionDependency.getSingletonObject();
+         
+         Set s = new TreeSet();
+         for(int i=0; i<elements.length; ++i) {
+             Class key = null;
+             if(elements[i] instanceof Database) {
+                 key = Database.class;
+             } else if(elements[i] instanceof Schema) {
+                 key = Schema.class;
+             } else if (elements[i] instanceof PersistentTable) {
+                  key = Table.class;
+             } else if (elements[i] instanceof Index) {
+                 key = Index.class;
+             } else if (elements[i] instanceof Procedure) {
+                 key = Procedure.class;
+             } else if (elements[i] instanceof UserDefinedFunction) {
+                 key = UserDefinedFunction.class;
+             } else if (elements[i] instanceof ViewTable) {
+                 key = ViewTable.class;
+             } else if (elements[i] instanceof Trigger) {
+                 key = Trigger.class;
+             } else if (elements[i] instanceof Sequence) {
+                 key = Sequence.class;
+             } else if (elements[i] instanceof UserDefinedType) {
+                 key = UserDefinedType.class;
+             } else if (elements[i] instanceof UniqueConstraint) {
+                 key = UniqueConstraint.class;
+             } else if(elements[i] instanceof CheckConstraint) {
+                 key = CheckConstraint.class;
+             } else if(elements[i] instanceof ForeignKey) {
+                key = ForeignKey.class;
+             }
+
+             try {
+                 int mask = sod.getMask(key).intValue();
+                 MySqlDdlGeneratorHelper.this.populateOptions(s, mask);
+             } catch (Exception e) {
+                 System.err.println("Missing definition for: " + elements[i].getClass().toString());
+                 e.printStackTrace();
+             }
+         }
+         return s;
+     }
+     
+     
+     protected void populateOptions(Set s, int mask) {
+         if ((mask & EngineeringOptionID.DATABASE) == EngineeringOptionID.DATABASE)
+             s.add(EngineeringOptionID.GENERATE_DATABASE);
+         if ((mask & EngineeringOptionID.TABLE) == EngineeringOptionID.TABLE)
+             s.add(EngineeringOptionID.GENERATE_TABLES);
+         if ((mask & EngineeringOptionID.INDEX) == EngineeringOptionID.INDEX)
+             s.add(EngineeringOptionID.GENERATE_INDICES);
+         if ((mask & EngineeringOptionID.PROCEDURE) == EngineeringOptionID.PROCEDURE)
+             s.add(EngineeringOptionID.GENERATE_STOREDPROCEDURES);
+         if ((mask & EngineeringOptionID.USER_DEFINED_FUNCTION) == EngineeringOptionID.USER_DEFINED_FUNCTION)
+             s.add(EngineeringOptionID.GENERATE_FUNCTIONS);
+         if ((mask & EngineeringOptionID.VIEW) == EngineeringOptionID.VIEW)
+             s.add(EngineeringOptionID.GENERATE_VIEWS);
+         if ((mask & EngineeringOptionID.TRIGGER) == EngineeringOptionID.TRIGGER)
+             s.add(EngineeringOptionID.GENERATE_TRIGGERS);
+         if ((mask & EngineeringOptionID.SEQUENCE) == EngineeringOptionID.SEQUENCE)
+             s.add(EngineeringOptionID.GENERATE_SEQUENCES);
+         if ((mask & EngineeringOptionID.USER_DEFINED_TYPE) == EngineeringOptionID.USER_DEFINED_TYPE)
+             s.add(EngineeringOptionID.GENERATE_USER_DEFINED_TYPE);
+         if ((mask & EngineeringOptionID.UNIQUE_CONSTRAINT) == EngineeringOptionID.UNIQUE_CONSTRAINT)
+             s.add(EngineeringOptionID.GENERATE_PK_CONSTRAINTS);
+         if ((mask & EngineeringOptionID.CHECK_CONSTRAINT) == EngineeringOptionID.CHECK_CONSTRAINT)
+             s.add(EngineeringOptionID.GENERATE_CK_CONSTRAINTS);
+         if ((mask & EngineeringOptionID.FOREIGN_KEY) == EngineeringOptionID.FOREIGN_KEY)
+             s.add(EngineeringOptionID.GENERATE_FK_CONSTRAINTS);
+         if ((mask & EngineeringOptionID.SCHEMA) == EngineeringOptionID.SCHEMA)
+             s.add(EngineeringOptionID.GENERATE_SCHEMAS);
+     }    
+
+
+     public static class SingletonOptionDependency {
+
+         private Map data = new HashMap();
+         private static SingletonOptionDependency ref;
+         
+         private SingletonOptionDependency()
+         {
+         }
+
+         public static SingletonOptionDependency getSingletonObject()
+         {
+             if (ref == null) {
+                 ref = new SingletonOptionDependency();
+
+                 //Database
+                 int mask = EngineeringOptionID.TABLE | EngineeringOptionID.INDEX | EngineeringOptionID.VIEW | 
+                          EngineeringOptionID.TRIGGER | EngineeringOptionID.UNIQUE_CONSTRAINT | 
+                          EngineeringOptionID.CHECK_CONSTRAINT | EngineeringOptionID.FOREIGN_KEY; 
+                 ref.data.put(Database.class, new Integer(mask));
+
+                 //Schema
+                 mask = EngineeringOptionID.TABLE | EngineeringOptionID.INDEX | EngineeringOptionID.VIEW | 
+                          EngineeringOptionID.TRIGGER | EngineeringOptionID.UNIQUE_CONSTRAINT | 
+                          EngineeringOptionID.CHECK_CONSTRAINT | EngineeringOptionID.FOREIGN_KEY; 
+                 ref.data.put(Schema.class, new Integer(mask));
+                
+                 //Table
+                 mask = EngineeringOptionID.TABLE | EngineeringOptionID.INDEX | EngineeringOptionID.TRIGGER | 
+                          EngineeringOptionID.UNIQUE_CONSTRAINT | EngineeringOptionID.CHECK_CONSTRAINT | 
+                          EngineeringOptionID.FOREIGN_KEY;
+                 ref.data.put(Table.class, new Integer(mask));
+                 
+                 
+                 //Index
+                 mask = EngineeringOptionID.INDEX;
+                 ref.data.put(Index.class, new Integer(mask));
+
+                 //Procedure
+                 mask = EngineeringOptionID.PROCEDURE;
+                 ref.data.put(Procedure.class, new Integer(mask));
+
+                 //UserDefinedFunction
+                 mask = EngineeringOptionID.USER_DEFINED_FUNCTION;
+                 ref.data.put(UserDefinedFunction.class, new Integer(mask));
+  
+                 //ViewTable
+                 mask = EngineeringOptionID.VIEW | EngineeringOptionID.TRIGGER;
+                 ref.data.put(ViewTable.class, new Integer(mask));
+
+                 //Trigger
+                 mask = EngineeringOptionID.TRIGGER;
+                 ref.data.put(Trigger.class, new Integer(mask));
+
+                 //Sequence
+                 mask = EngineeringOptionID.SEQUENCE;
+                 ref.data.put(Sequence.class, new Integer(mask));
+
+                 //UserDefinedType
+                 mask = EngineeringOptionID.USER_DEFINED_TYPE;
+                 ref.data.put(UserDefinedType.class, new Integer(mask));
+
+                 //UniqueConstraint
+                 mask = EngineeringOptionID.UNIQUE_CONSTRAINT;
+                 ref.data.put(UniqueConstraint.class, new Integer(mask));
+
+                 //ForeignKey
+                 mask = EngineeringOptionID.FOREIGN_KEY;
+                 ref.data.put(ForeignKey.class, new Integer(mask));
+
+                 //CheckConstraint
+                 mask = EngineeringOptionID.CHECK_CONSTRAINT;
+                 ref.data.put(CheckConstraint.class, new Integer(mask));
+           }
+           return ref;
+         }        
+        
+         public Integer getMask(Class key) {
+             return (Integer)data.get(key);
+         }
+     }
+
+
+	protected MySqlDdlBuilderHelper getBuilder() {
+		return builder;
+	}
+
+	protected void setBuilder(MySqlDdlBuilderHelper builder) {
+		this.builder = builder;
+	}
+
+	
+}
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/model/MySqlUser.java b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/model/MySqlUser.java
new file mode 100644
index 0000000..dad9581
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/model/MySqlUser.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Zenika
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: queinnec - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.mysql.model;
+
+import org.eclipse.datatools.modelbase.sql.accesscontrol.User;
+
+/**
+ * A MySQL user definition.
+ * 
+ * @author pierre.queinnec@zenika.com
+ */
+public interface MySqlUser extends User {
+
+}
diff --git a/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/model/impl/MySqlUserImpl.java b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/model/impl/MySqlUserImpl.java
new file mode 100644
index 0000000..82552ca
--- /dev/null
+++ b/plugins/org.eclipse.datatools.enablement.mysql/src/org/eclipse/datatools/enablement/mysql/model/impl/MySqlUserImpl.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Zenika
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: queinnec - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.mysql.model.impl;
+
+import org.eclipse.datatools.enablement.mysql.model.MySqlUser;
+import org.eclipse.datatools.modelbase.sql.accesscontrol.impl.UserImpl;
+
+/**
+ * A MySQL user definition.
+ * 
+ * @author pierre.queinnec@zenika.com
+ */
+public class MySqlUserImpl extends UserImpl implements MySqlUser {
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.help/.classpath b/plugins/org.eclipse.datatools.help/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.help/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.datatools.help/.project b/plugins/org.eclipse.datatools.help/.project
new file mode 100644
index 0000000..35d0ffa
--- /dev/null
+++ b/plugins/org.eclipse.datatools.help/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.help</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.help/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.help/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..d210799
--- /dev/null
+++ b/plugins/org.eclipse.datatools.help/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %PluginName
+Bundle-SymbolicName: org.eclipse.datatools.help; singleton:=true
+Bundle-Version: 1.7.1.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %ProviderName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.help;visibility:=reexport,
+ org.eclipse.core.runtime,
+ org.eclipse.ui
+Export-Package: org.eclipse.datatools.help
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/plugins/org.eclipse.datatools.help/about.html b/plugins/org.eclipse.datatools.help/about.html
new file mode 100644
index 0000000..d0a7cc2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.help/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.help/build.properties b/plugins/org.eclipse.datatools.help/build.properties
new file mode 100644
index 0000000..df69c5d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.help/build.properties
@@ -0,0 +1,9 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               schema/,\
+               about.html,\
+               plugin.xml,\
+               plugin.properties
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.help/plugin.properties b/plugins/org.eclipse.datatools.help/plugin.properties
new file mode 100644
index 0000000..d9882bd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.help/plugin.properties
@@ -0,0 +1,5 @@
+# Properties for plugin.xml for org.eclipse.datatools.help
+# File is located in the org.eclipse.datatools.help root directory
+
+ProviderName=Eclipse Data Tools Platform
+PluginName=Data Tools Platform Help Utilities
diff --git a/plugins/org.eclipse.datatools.help/plugin.xml b/plugins/org.eclipse.datatools.help/plugin.xml
new file mode 100644
index 0000000..be13f9f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.help/plugin.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+
+     <extension-point id="helpKeyProperties" name="Help Key Properties" schema="schema/helpKeyProperties.exsd"/>
+   
+</plugin>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.help/schema/helpKeyProperties.exsd b/plugins/org.eclipse.datatools.help/schema/helpKeyProperties.exsd
new file mode 100644
index 0000000..89228b8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.help/schema/helpKeyProperties.exsd
@@ -0,0 +1,150 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.help">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.datatools.help" id="helpKeyProperties" name="Help Key Properties"/>
+      </appInfo>
+      <documentation>
+         This extension point supports the abstraction of help context IDs (and context-specific help search expressions for dynamic context-sensitive help) from the code in UI plug-ins.
+&lt;p&gt;Context-sensitive help plug-ins, which declare contributions via the org.eclipse.help.contexts extension point, can also use this extension point to declare helpKey .properties files contributions. UI plug-ins that call the org.eclipse.datatools.help.ContextProviderDelegate method can use those helpKey .properties files to dynamically set help context IDs on widgets that adapt to IContextProvider.&lt;/p&gt;
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <complexType>
+         <sequence minOccurs="0" maxOccurs="unbounded">
+            <element ref="contextIds"/>
+            <element ref="searchExpressions" minOccurs="0" maxOccurs="1"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="contextIds">
+      <annotation>
+         <documentation>
+            The &amp;lt;contextIds&amp;gt; element identifies a .properties file that defines help context IDs for a UI plug-in.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="plugin" type="string" use="required">
+            <annotation>
+               <documentation>
+                  the UI plug-in for which a help context ID .properties file is contributed by a context-sensitive help plug-in.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="file" type="string" use="required">
+            <annotation>
+               <documentation>
+                  a help context ID .properties file contributed by a context-sensitive help plug-in.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="searchExpressions">
+      <annotation>
+         <documentation>
+            The &amp;lt;searchExpressions&amp;gt; element identifies a .properties file that defines context-specific help search expressions for a UI plug-in.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="plugin" type="string" use="required">
+            <annotation>
+               <documentation>
+                  the UI plug-in for which a help search expression .properties file is contributed by a context-sensitive help plug-in.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="file" type="string" use="required">
+            <annotation>
+               <documentation>
+                  a help search expression .properties file contributed by a context-sensitive help plug-in.
+&lt;p&gt;For each UI plug-in that a particular context-sensitive help plug-in contributes .properties files, the &amp;lt;contextIds&amp;gt; and &amp;lt;searchExpressions&amp;gt; elements must be declared in the org.eclipse.datatools.help.helpKeyProperties extension.&lt;/p&gt;
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         DTP 1.5
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         The following is an example of using the Help Key Properties extension point in the plug-in manifest (plugin.xml file) of a context-sensitive help plug-in:
+&lt;p&gt;
+&lt;pre&gt;
+     &lt;extension point=&quot;org.eclipse.datatools.help.helpKeyProperties&quot;&gt;
+         &lt;contextIds plugin=&quot;org.eclipse.datatools.connectivity.ui&quot;
+             file=&quot;org.eclipse.datatools.connectivity.ui_contextIds.properties&quot;/&gt;
+         &lt;searchExpressions plugin=&quot;org.eclipse.datatools.connectivity.ui&quot;
+             file=&quot;org.eclipse.datatools.connectivity.ui_searchExpressions.properties&quot;/&gt;
+     &lt;/extension&gt;
+&lt;/pre&gt;
+&lt;/p&gt;
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         To take advantage of the help context ID abstraction, workbench parts must implement IContextProvider and call the org.eclipse.datatools.help.ContextProviderDelegate method.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         The default implementation of org.eclipse.datatools.help supports this extension point.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         Copyright (c) 2007 Sybase, Inc.
+&lt;br&gt;
+All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at &lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.help/src/org/eclipse/datatools/help/ContextProviderDelegate.java b/plugins/org.eclipse.datatools.help/src/org/eclipse/datatools/help/ContextProviderDelegate.java
new file mode 100644
index 0000000..d6fff75
--- /dev/null
+++ b/plugins/org.eclipse.datatools.help/src/org/eclipse/datatools/help/ContextProviderDelegate.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Sybase, Inc. - initial API and implementation
+ *******************************************************************************/ 
+package org.eclipse.datatools.help;
+
+import org.eclipse.help.HelpSystem;
+import org.eclipse.help.IContext;
+import org.eclipse.help.IContextProvider;
+
+public class ContextProviderDelegate implements IContextProvider
+{
+	private String			_contextHelpPluginID;
+	
+	public ContextProviderDelegate(String contextHelpPluginID)
+	{
+		_contextHelpPluginID = contextHelpPluginID;
+	}
+	
+	public IContext getContext(Object target)
+	{
+		String		contextId = HelpUtil.getContextId(HelpUtil.getHelpKey(target), _contextHelpPluginID);
+		
+		if (contextId == null)
+		{
+			return null;
+		}
+		return HelpSystem.getContext(contextId);
+	}
+
+	public int getContextChangeMask()
+	{
+		return SELECTION;
+	}
+
+	public String getSearchExpression(Object target)
+	{
+		return HelpUtil.getSearchExpression(HelpUtil.getHelpKey(target), _contextHelpPluginID);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.help/src/org/eclipse/datatools/help/HelpUtil.java b/plugins/org.eclipse.datatools.help/src/org/eclipse/datatools/help/HelpUtil.java
new file mode 100644
index 0000000..3e60918
--- /dev/null
+++ b/plugins/org.eclipse.datatools.help/src/org/eclipse/datatools/help/HelpUtil.java
@@ -0,0 +1,318 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Sybase, Inc. - initial API and implementation
+ *******************************************************************************/ 
+package org.eclipse.datatools.help;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.MissingResourceException;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.help.HelpSystem;
+import org.eclipse.help.IContext;
+import org.eclipse.help.IContextProvider;
+import org.eclipse.swt.events.HelpEvent;
+import org.eclipse.swt.events.HelpListener;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Widget;
+import org.eclipse.ui.PlatformUI;
+import org.osgi.framework.Bundle;
+
+public class HelpUtil
+{
+	public static String			HELP_KEY = "org.eclipse.ui.help"; //$NON-NLS-1$
+
+	public static String			CONTEXT_PROVIDER_KEY = "org.eclipse.datatools.help.context.provider"; //$NON-NLS-1$
+	
+	private static HelpListener		_helpListener = null;
+	
+	private static boolean			_debug = Platform.inDebugMode();
+	
+	// To prevent this class from being instantiated
+	private HelpUtil()
+	{
+	}
+	
+	private static class HelpUtilHelpListener implements HelpListener {
+		public void helpRequested(HelpEvent event) {
+			if (event.widget != null && !event.widget.isDisposed()) {
+				Widget				widget = event.widget;
+				IContextProvider 	provider = null;
+				
+				for (; widget != null && provider == null;) {
+					if (widget instanceof IAdaptable) {
+						provider = (IContextProvider)((IAdaptable)widget).getAdapter(IContextProvider.class);
+					} else if (widget instanceof IContextProvider) {
+						provider = (IContextProvider)widget;
+					} else if (widget.getData(CONTEXT_PROVIDER_KEY) != null
+										&& widget.getData(CONTEXT_PROVIDER_KEY) instanceof IContextProvider) {
+						provider = (IContextProvider)widget.getData(CONTEXT_PROVIDER_KEY);
+					}
+					if (widget instanceof Control) {
+						widget = ((Control)widget).getParent();
+					} else {
+						break;
+					}
+				}
+				if ((provider == null) || ((provider.getContextChangeMask() & IContextProvider.SELECTION) != 0)) {
+
+					String id = getHelpKey(event.widget);
+					debugMessage("Requested help for id = " + id);
+
+                    IContext context = null;
+                    if (id  != null)  { 
+                    	context = HelpSystem.getContext(id ); 					
+    					debugMessage("Retrieved context (" + context + ") for id = " + id);
+                    }
+					
+					if (context != null) {
+						// determine a location in the upper right corner of the
+						// widget
+						Point point = computePopUpLocation(event.widget.getDisplay());
+						// display the help
+						PlatformUI.getWorkbench().getHelpSystem().displayContext(context, point.x, point.y);
+					}
+				}
+			}
+		}
+	}
+	
+	/**
+	 * Determines the location for the help popup shell given the widget which
+	 * orginated the request for help.
+	 * 
+	 * @param display
+	 *            the display where the help will appear
+	 */
+	private static Point computePopUpLocation(Display display) {
+		Point point = display.getCursorLocation();
+		return new Point(point.x + 15, point.y);
+	}
+	
+	/**
+	 * Returns the help listener
+	 * @return
+	 */
+	private static HelpListener getHelpListener()
+	{
+		if (_helpListener == null)
+		{
+			_helpListener = new HelpUtilHelpListener();
+		}
+		return _helpListener;
+	}
+	
+	/**
+	 * Sets the help for a particular control
+	 * @param control
+	 * @param contextId
+	 */
+	public static void setHelp(Control control, String contextId)
+	{
+		if (contextId == null) {
+			return;
+		}
+		if (control != null) {
+			control.removeHelpListener(getHelpListener());
+			control.addHelpListener(getHelpListener());
+		}
+		control.setData(HELP_KEY, contextId);
+	}
+	
+	/**
+	 * Retrieves the help key back from a particular control
+	 * @see setHelp
+	 * @param target
+	 * @return
+	 */
+	public static String getHelpKey(Object target)
+	{
+		if (target instanceof Control)
+		{
+			for (Control control = (Control)target; control != null; control = control.getParent())
+			{
+				Object		contextId = control.getData(HELP_KEY);
+				
+				if (contextId != null && contextId instanceof String)
+				{
+					debugMessage("--getHelpKey returns " + (String)contextId);
+					return (String)contextId;
+				}
+			}
+		}
+		return null;
+	}
+	
+	/**
+	 * @param helpKey 
+	 * @param helpPluginID e.g. "org.eclipse.datatools.connectivity.ui"
+	 * @return
+	 */
+	public static String getContextId(String helpKey, String helpPluginID)
+	{
+		return getHelpString(helpKey, helpPluginID, "contextIds"); //$NON-NLS-1$
+	}
+
+	/**
+	 * @param helpKey 
+	 * @param helpPluginID e.g. "org.eclipse.datatools.connectivity.ui"
+	 * @return
+	 */
+	public static String getSearchExpression(String helpKey, String helpPluginID)
+	{
+		return getHelpString(helpKey, helpPluginID, "searchExpressions"); //$NON-NLS-1$
+	}
+	
+	/**
+	 * Retrieves the help string from the bundled properties
+	 * @param helpKey
+	 * @param helpPluginID
+	 * @param bundleType
+	 * @return
+	 */
+	private static String getHelpString(String helpKey, String helpPluginID, String bundleType)
+	{
+		if (helpKey == null)
+		{
+			return null;
+		}
+		Properties properties[] = (Properties[])_properties.get(helpPluginID + ';' + bundleType);
+		try
+		{
+			if (properties == null)
+			{
+				URLConnection		propertiesFiles[] = getPropertiesFiles(helpPluginID, bundleType);
+				
+				properties = new Properties[propertiesFiles.length];
+				for (int i = 0; i < propertiesFiles.length; i++)
+				{
+					URLConnection connection = (URLConnection) propertiesFiles[i];
+					InputStream is = connection.getInputStream();
+					properties[i] = new Properties();
+					properties[i].load(is);
+				}
+    			_properties.put(helpPluginID + ';' + bundleType, properties);
+			}
+			String		bundleString = null;
+			
+			for (int i = 0; bundleString == null && i < properties.length; i++)
+			{
+				bundleString = properties[i].getProperty(helpKey);
+			}
+			if (bundleString != null && bundleString.length() > 0 && bundleString.indexOf(".") == -1) {
+				bundleString = helpPluginID + "." + bundleString;
+			}
+			if (bundleString != null && bundleString.trim().length() == 0)
+				bundleString = null;
+			debugMessage("--getHelpString (helpkey = " + helpKey + ", helpPluginId = " + helpPluginID + " returned " + bundleString);
+			return bundleString;
+		}
+		catch (MissingResourceException e)
+		{
+			return null;
+		}
+		catch (IOException e)
+		{
+			return null;
+		}
+	}
+	
+	private static HashMap	_properties = new HashMap();
+	
+	/**
+	 * Retrieves URLConnections to jarred doc context plugins to retrieve the appropriate properties files
+	 * @param pluginIDToMatch
+	 * @param bundleType
+	 * @return
+	 */
+	private static URLConnection[] getPropertiesFiles(String pluginIDToMatch, String bundleType)
+	{
+		IExtensionPoint exp = Platform.getExtensionRegistry().getExtensionPoint("org.eclipse.datatools.help", "helpKeyProperties"); //$NON-NLS-1$ //$NON-NLS-2$
+		IExtension[] exts = exp.getExtensions();
+		ArrayList propertiesFiles = new ArrayList();
+		for (int index = 0, count = exts.length; index < count; ++index)
+		{
+			for (Iterator it = Arrays.asList(exts[index].getConfigurationElements()).iterator(); it.hasNext();)
+			{
+				IConfigurationElement elem = (IConfigurationElement) it.next();
+				if (!elem.getName().equals(bundleType))
+				{
+					continue;
+				}
+				String	pluginID = elem.getAttribute("plugin"); //$NON-NLS-1$
+				if (!pluginID.equals(pluginIDToMatch))
+				{
+					continue;
+				}
+				String	propertiesFile = elem.getAttribute("file"); //$NON-NLS-1$
+				
+				try
+				{
+					debugMessage("---Getting Property Files---");
+					String	helpPluginID = exts[index].getNamespaceIdentifier();
+					debugMessage("helpPluginID = " + helpPluginID);
+					Bundle	helpPluginBundle = Platform.getBundle(helpPluginID);
+					debugMessage("helpPluginBundle = " + helpPluginBundle.getLocation());
+					if (helpPluginBundle != null) {
+						URL		propertiesFileURL = helpPluginBundle.getResource(propertiesFile);
+						debugMessage("propertiesFileURL = " + propertiesFileURL );
+						if (propertiesFileURL == null) {
+							debugMessage("didn't find resource = " + propertiesFile );
+							continue;
+						}
+						else {
+							debugMessage("found resource: " + propertiesFile ) ;
+						}
+						try {
+							propertiesFileURL = FileLocator.resolve(propertiesFileURL);
+							URLConnection connection = propertiesFileURL.openConnection();
+							propertiesFiles.add(connection);
+						} catch (NullPointerException npe) {
+							debugMessage("Failed to get property file: " + propertiesFile );
+							npe.printStackTrace();
+							continue;
+						}
+					}
+				}
+				catch (IOException ioe)
+				{
+					ioe.printStackTrace();
+				}
+			}
+		}
+		return (URLConnection[])propertiesFiles.toArray(new URLConnection[propertiesFiles.size()]);
+	}
+	
+	/*
+	 * Puts a message in the development console if the 
+	 * -debug option is set for the running workbench instance
+	 * @param message
+	 */
+	private static void debugMessage ( String message ) {
+		if (_debug) {
+			System.out.println("HelpUtil <Debug>: " + message);
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.oda.cshelp/.gitignore b/plugins/org.eclipse.datatools.oda.cshelp/.gitignore
new file mode 100644
index 0000000..0f86643
--- /dev/null
+++ b/plugins/org.eclipse.datatools.oda.cshelp/.gitignore
@@ -0,0 +1,8 @@
+*.bak
+*.bom
+*.log
+*.opt
+css.zip
+*_toc.xml
+*.chm
+export
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.oda.cshelp/.project b/plugins/org.eclipse.datatools.oda.cshelp/.project
new file mode 100644
index 0000000..a9f44dd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.oda.cshelp/.project
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.oda.cshelp</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.oda.cshelp/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.oda.cshelp/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..76e379e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.oda.cshelp/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: DTP ODA Context-sensitive Help
+Bundle-SymbolicName: org.eclipse.datatools.oda.cshelp;singleton:=true
+Bundle-Version: 1.3.1.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Activator: org.eclipse.core.internal.compatibility.PluginActivator
+Bundle-Vendor: Eclipse Data Tools Platform
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.help
+Eclipse-LazyStart: true
diff --git a/plugins/org.eclipse.datatools.oda.cshelp/about.html b/plugins/org.eclipse.datatools.oda.cshelp/about.html
new file mode 100644
index 0000000..129db9d
--- /dev/null
+++ b/plugins/org.eclipse.datatools.oda.cshelp/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2009</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.oda.cshelp/about.ini b/plugins/org.eclipse.datatools.oda.cshelp/about.ini
new file mode 100644
index 0000000..fd7187e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.oda.cshelp/about.ini
@@ -0,0 +1,29 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%aboutText
+
+# Property "windowImage" contains path to window icon (16x16)
+# needed for primary features only
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=eclipse32.png
+
+# Property "aboutImage" contains path to product image (500x330 or 115x164)
+# needed for primary features only
+
+# Property "appName" contains name of the application (translated)
+# needed for primary features only
+
+# Property "welcomePage" contains path to welcome page (special XML-based format)
+# optional
+
+# Property "welcomePerspective" contains the id of the perspective in which the
+# welcome page is to be opened.
+# optional
+
+
diff --git a/plugins/org.eclipse.datatools.oda.cshelp/about.mappings b/plugins/org.eclipse.datatools.oda.cshelp/about.mappings
new file mode 100644
index 0000000..a903677
--- /dev/null
+++ b/plugins/org.eclipse.datatools.oda.cshelp/about.mappings
@@ -0,0 +1,6 @@
+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=@Replace_By_Date@
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.oda.cshelp/about.properties b/plugins/org.eclipse.datatools.oda.cshelp/about.properties
new file mode 100644
index 0000000..ec02c4a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.oda.cshelp/about.properties
@@ -0,0 +1,15 @@
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+aboutText=Eclipse Data Tools Platform ODA Context Sensitive Help\n\
+\n\
+Visit http://www.eclipse.org/datatools\n\
+\n\
+Copyright (c) 2017 Eclipse Contributors\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html
diff --git a/plugins/org.eclipse.datatools.oda.cshelp/build.properties b/plugins/org.eclipse.datatools.oda.cshelp/build.properties
new file mode 100644
index 0000000..b2dbd45
--- /dev/null
+++ b/plugins/org.eclipse.datatools.oda.cshelp/build.properties
@@ -0,0 +1,10 @@
+bin.includes = plugin.properties,\
+               plugin.xml,\
+               contexts.xml,\
+               META-INF/MANIFEST.MF,\
+               about.html,\
+               eclipse32.gif,\
+               about.ini,\
+               about.mappings,\
+               about.properties
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.oda.cshelp/contexts.xml b/plugins/org.eclipse.datatools.oda.cshelp/contexts.xml
new file mode 100644
index 0000000..3b7bf55
--- /dev/null
+++ b/plugins/org.eclipse.datatools.oda.cshelp/contexts.xml
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?NLS type="org.eclipse.help.contexts"?>
+
+<contexts>
+<context id="dummy_outer_container" title="Data Tools ODA contexts">
+<description>Contexts for items identified by Actuate, 2008-08-26</description>
+</context>
+<context id="Dialog_ColumnMapping_ID" title="Column Mapping">
+<description>Use this dialog box to complete the definition of a column.
+
+The Column Name field contains the name of the XML element or attribute that you selected as the column. You can change this name to make it more meaningful. For example, your data structure might use the same attribute name in multiple elements. You can set the name so that you know which element is the source of the column.
+The XPath expression represents the XML element that you selected as the column. You can make changes to this expression if you want to filter the data. You must use valid XPath syntax.
+In Data Type, select the correct data type for the column.
+</description>
+</context>
+<context id="Dialog_SelectTableColumn_ID" title="Select Table - Select Columns">
+<description>Use this dialog box to select columns for the tables in a flat file data set.
+
+In Select File, select the file that contains the data for a table.
+
+For each table, use the right arrow button to move the available columns from the list on the left to the right. Columns in the list on the right are available to the report design. You can change the name and data type of a column in this list.
+To remove a column from the data set, use the X button.
+To change the order of the columns in the data set, use the up and down arrow buttons.
+</description>
+</context>
+<context id="Dialog_ColumnEditDialog_ID" title="Select Columns">
+   <description>Type a meaningful name to display for the column.

+

+Select the data type that matches the column values.

+

+Original Name contains the name specified in the flat file or a name that starts with COLUMN if the file did not specify column names.
+   </description>
+</context>
+<context id="Dialog_SOAP_Request_Parameter_Properties_ID">
+   <description>Use this dialog to set the default value for a parameter for the SOAP operation for a WSDL data set. The WSDL data set uses this value to query the WSDL data source.
+</description>
+</context>
+<context id="Dialog_SOAP_Request_Parameters_ID">
+   <description>Use this dialog to examine and set properties for the parameters for the SOAP operation for a WSDL data set.
+
+To set the properties for a parameter, double-click the parameter.
+</description>
+</context>
+<context id="Dialog_XMLSampleData_ID" title="Sample XML Data">
+<description>Use this table to verify that the XML or Web Services data set returns the expected data.
+
+This table displays values for each mapped column from the first few rows that the data set returns. If the values that you see do not match your requirements, or you see no values, modify your choices on the wizard or editor until this table does show the values you need.
+</description>
+</context>
+<context id="Dialog_XPathExpression_ID" title="Select or edit the XPath expression">
+<description>Use this dialog box to specify the XPath expression to be used.
+
+The XPath expression represents the XML element that you selected as the table root. You can make changes to this expression if you want to filter the data. You must use valid XPath syntax.
+</description>
+</context>
+<context id="Preference_DataSetEditor_XML_ID" title="Preferences - XML Data Set">
+<description>Use this dialog box to set preferences for XML data sets.
+
+Set the number of rows of XML data to parse if the XML data source does not use a schema file to define the data structure.
+</description>
+</context>
+<context id="Wizard_ConnectionProfile_ID" title="New Data Source - Select a Connection Profile">
+<description>Use this dialog box to select a connection profile for creating a data source.
+
+
+
+</description>
+</context>
+<context id="Wizard_FlatfileDatasource_ID" title="New Flat File Data Source Profile">
+<description>Use this dialog box to define the profile for a new flat file.
+
+A flat file data source contains values for a single table as character-separated values in a text file. The first line of the file can include the names of the columns. The second line of the file can include the data types of the columns.
+
+To set the value for the folder that contains the files of text data, either type the path to the folder in Select folder, or use the Browse button to navigate to the folder on the file system.
+
+In Select charset, select the character set that your data files use.
+
+In Select flatfile style, select the character that separates the values in each line in your text file. The available characters are comma (,), semi-colon (;), tab (character value 9), and pipe (|). Select CSV, SSV, TSV, or PSV respectively for these separators.
+
+If the first line of the file contains the column names, select Use first line as column name indicator. Column names must be separated by the same character that the file uses to separate data values.
+
+If the second line of the file contains data types for the columns, select Use second line as data type indicator. Data types must be separated by the same character that the file uses to separate data values. This choice is not available unless the first line contains column names.
+Valid data types are:
+Big Decimal
+Date
+Double
+Integer
+String
+Time
+Timestamp
+
+To test that the values you entered are valid, choose Test Connection. When Test Connection shows Ping succeeded, choose Finish.
+</description>
+</context>
+<context id="Wizard_WS_OPERATION_ID">
+   <description>Use this dialog box to define the operation that the WSDL data source uses to provide data. Each WSDL data set uses a single WSDL operation to provide data. If multiple operations in the WSDL data source can provide data, you define a data set for each of these operations individually.
+
+In WSDL Operation, expand the tree of available operations and scroll to the operation that provides data.
+Select the operation.
+The operation&apos;s name appears in Selected Operation. If the WSDL provider has written any information about this operation, that information appears in Documentation.</description>
+</context>
+<context id="Wizard_XML_Datasource_ID" title="New XML File Data Source Profile">
+<description>Use this dialog box to define an XML file data source.
+
+The XML source must contain well-formed XML.
+
+To set the value for Enter the URL of the XML source or browse to the file containing the data:
+* Type the URL for XML data that is a network resource
+Or
+* Use the Browse button to locate a file on the file system
+
+The next field is Enter the URL of the XML schema or browse to the file containing the schema. Leave this empty if no schema is available.
+You provide a value for this field in the same way as the previous field. If you do not have an XML schema, the data source uses the data you provide in the XML file as a template for defining data tables and columns. In this case, make sure that the data file contains a representative selection of data. If the data file does not contain all the required columns, you will not be able to use the columns in your report design.
+
+To test that the values in the fields are valid, choose Test Connection. When Test Connection shows Ping succeeded, choose Finish.
+</description>
+</context>
+<context id="Wizard_XML_ColumnMapping_ID" title="Column Mapping">
+<description>Use this page to map XML elements to columns.
+
+Select an XML element or attribute in the XML structure diagram to represent a data column. To set the element as a column, choose the > button.
+After you verify the definition for the column, the column details appear in the Column Mapping table. You can change the name and data type of a column in this list.
+Select as many XML elements to represent columns as you need in your data set. Use the > button to add the selected XML elements to the data set. Use the >> button to add all the available XML elements to the data set.
+
+To add a column using XPath syntax, choose the Add button.
+To modify a column's definition, select the column in Column Mapping and choose the Edit button.
+To remove one or more columns from the data set, select the columns in Column Mapping and choose the Remove button.
+To change the order of the columns in the data set, select the columns in Column Mapping and use the Up and Down buttons.
+
+To confirm that the set of columns in Column Mapping contains the data that you require, choose Show Sample Data.
+</description>
+</context>
+<context id="Wizard_XMLSample_ID" title="DTP XML DataSet">
+<description>Use this dialog box to specify a sample XML source for data preview.
+
+You can use the data file that the data source specifies or a different file that contains XML data with the same structure. To use the same file, select Use the XML file defined in data source. To use a different file, deselect this field, then type the path to the file you want to use in Enter the URL of the XML source or browse to the file containing the data. Alternatively, you can use the Browse button to find a file on the file system.
+
+If your XML data file is large, you can reduce the number of rows that the Report Designer reads when you preview the report. To set the number of rows, select Preview first, then enter the number of rows of data in the next field. When you choose this option, make sure that your data file contains all the data fields that you need in your report design in the set of rows that you choose.
+</description>
+</context>
+<context id="Wizard_XMLXPath_ID" title="Row Mapping">
+<description>Use this dialog box to define a row element.
+
+Select an XML element in the XML structure diagram to represent the row root. To set the element as the row, choose the &gt; button.
+After you verify the XPath expression for the row, the row path appears in Row Mapping-XPath Expression.
+The data set creates a row for every row element in the data source. For example, consider a data source that has a &lt;Customer&gt; element that has child elements, &lt;Order&gt;. If you define the &lt;Customer&gt; element as the row, the data set creates one row for every &lt;Customer&gt; element. This row can include the information for only one order. If you define the &lt;Order&gt; element as the row, the data set creates a row for every order element.
+</description>
+</context>
+<context id="Wizard_WS_DATASOURCE_ID">
+   <description>Use this dialog box to define a Web Services data source. This data source type requires a WSDL Descriptor. The other fields in this dialog box are optional.
+
+To set the value for WSDL Descriptor:
+* Type the URL for Web Services data that is a network resource
+Or
+* Use the Browse button to locate a file on the file system
+
+The next field is the SOAP End Point. Leave this field empty if the descriptor defines the end point or if the WSDL does not require a SOAP end point. If your WSDL does require a SOAP end point, type the URL here.
+
+If you have written a Java class to perform the connection to the WSDL data source, type the fully qualified path to this class in Custom Driver Class. This class must implement the <code>org.eclipse.datatools.enablement.oda.ws.api.IWSDriver</code> interface.
+
+If you have a custom driver class, list the JAR files or folders to search for the class in Driver Class Path. Separate multiple folders and JAR files with semicolon (;) characters in the normal way.
+
+To test that the values in the fields are valid, choose Test Connection. When Test Connection shows Ping succeeded, choose Finish.</description>
+</context>
+<context id="Wizard_WS_SOAP_PARAMETER_ID">
+<description>Use this dialog box to select the SOAP parameters to use for the WSDL operation. The WSDL descriptor provides the information about the available parameters for the operation. The parameters you select are used to filter the query on the WSDL data set.
+
+Use the Select All button to select all the available parameters. Use the Deselect All button to use none of the parameters. Use the check-box beside each parameter to select or deselect the parameter individually.
+</description>
+</context>
+<context id="Wizard_WS_SOAP_REQUEST_ID">
+<description>Use this dialog box to check or modify the XML for the SOAP request. The XML defines the SOAP operation and its parameters. Parameters are indicated in the XML by &amp;?ParameterName?&amp;.
+
+Edit the XML if your data source needs customizations that the wizard does not provide.
+
+To discard all your changes and reset the parameter selection to the default for the SOAP operation, choose Regenerate Template.
+
+To set the default value for any parameters to the SOAP operation, choose Insert Parameter.
+
+To discard all the XML in the SOAP request, choose Clear.
+</description>
+</context>
+<context id="Wizard_WS_SOAP_RESPONSE_ID">
+   <description>Use this dialog box to define the SOAP response for the Web Services data set's WSDL operation.
+
+To set the value for Select SOAP Response Schema:
+* If the WSDL descriptor describes the SOAP response, select Use operation response schema defined in data source WSDL.
+Or
+* Use the Browse button to locate the XML schema file for the SOAP response on the file system
+
+The next field sets up a sample SOAP response message. This field is optional.
+* To request a sample response from the SOAP end point, select Query Web Services at SOAP end point, then type the URL, and choose Connect Now.
+Or
+* Select Use external sample data file, and use the Browse button to locate the file on the file system
+</description>
+</context>
+</contexts>
diff --git a/plugins/org.eclipse.datatools.oda.cshelp/eclipse32.gif b/plugins/org.eclipse.datatools.oda.cshelp/eclipse32.gif
new file mode 100644
index 0000000..f71a8f6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.oda.cshelp/eclipse32.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.oda.cshelp/eclipse32.png b/plugins/org.eclipse.datatools.oda.cshelp/eclipse32.png
new file mode 100644
index 0000000..568fac1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.oda.cshelp/eclipse32.png
Binary files differ
diff --git a/plugins/org.eclipse.datatools.oda.cshelp/plugin.properties b/plugins/org.eclipse.datatools.oda.cshelp/plugin.properties
new file mode 100644
index 0000000..30173ca
--- /dev/null
+++ b/plugins/org.eclipse.datatools.oda.cshelp/plugin.properties
@@ -0,0 +1,3 @@
+# NLS_MESSAGEFORMAT_VAR 
+# NLS_ENCODING=UTF-8
+Plugin.name=org.eclipse.datatools.oda.cshelp
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.oda.cshelp/plugin.xml b/plugins/org.eclipse.datatools.oda.cshelp/plugin.xml
new file mode 100644
index 0000000..e0036f4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.oda.cshelp/plugin.xml
@@ -0,0 +1,5 @@
+<plugin>
+  <extension point="org.eclipse.help.contexts">
+    <contexts file="contexts.xml" plugin="org.eclipse.datatools.oda.cshelp" />
+  </extension>
+</plugin>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.releng.builder/.project b/plugins/org.eclipse.datatools.releng.builder/.project
new file mode 100644
index 0000000..f89d070
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.releng.builder</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.releng.builder/about.html b/plugins/org.eclipse.datatools.releng.builder/about.html
new file mode 100755
index 0000000..4602330
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 2, 2006</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.releng.builder/bootstrap.sh b/plugins/org.eclipse.datatools.releng.builder/bootstrap.sh
new file mode 100755
index 0000000..c3e0e00
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/bootstrap.sh
@@ -0,0 +1,403 @@
+# User specific environment and startup programs
+umask 002
+
+BASE_PATH=.:/bin:/usr/bin:/usr/bin/X11:/usr/local/bin:/usr/bin:/usr/X11R6/bin
+LD_LIBRARY_PATH=.
+BASH_ENV=$HOME/.bashrc
+USERNAME=`whoami`
+xhost +$HOSTNAME
+DISPLAY=:0.0
+export DISPLAY
+
+# CVSROOT=:ext:xgu@dev.eclipse.org:/cvsroot/datatools
+# CVS_RSH=ssh
+ulimit -c unlimited
+export USERNAME BASH_ENV LD_LIBRARY_PATH DISPLAY
+
+#cvs update -r HEAD -C -d buildAll.xml build.xml eclipse extras
+#dos2unix extras/updateFeatureTag.sh extras/checkCompareDone.sh
+#chmod -R +x build.xml buildAll.xml eclipse extras
+
+gitUser=xgu
+gitPass=xx
+buildEclipseUser=xgu
+buildEclipsePass=xx
+export GitRepo=ssh://${gitUser}@git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git
+export BranchName=master
+rm -rf plugins
+git archive --format=tar --remote=$GitRepo $BranchName plugins/org.eclipse.datatools.releng.builder | tar -xf -
+cp -f plugins/org.eclipse.datatools.releng.builder/buildAll.xml ./
+cp -f plugins/org.eclipse.datatools.releng.builder/build.xml ./
+cp -f plugins/org.eclipse.datatools.releng.builder/git-map.sh ./
+cp -f plugins/org.eclipse.datatools.releng.builder/git-submission.sh ./
+cp -rf plugins/org.eclipse.datatools.releng.builder/eclipse ./
+cp -rf plugins/org.eclipse.datatools.releng.builder/extras ./
+
+if [ "x"$ANT_HOME = "x" ]; then export ANT_HOME=/usr/local/apache-ant-1.7.0; fi
+if [ "x"$JAVA_HOME = "x" ]; then export JAVA_HOME=/usr/local/j2sdk1.4.2_13; fi
+export PATH=${PATH}:${ANT_HOME}/bin:/usr/local/bin
+
+proc=$$
+
+#notification list
+recipients=lchan@actuate.com,xgu@actuate.com
+sender=qa-build@actuate.com
+
+#sets skip.performance.tests Ant property
+skipPerf=""
+
+#sets skip.tests Ant property
+skipTest=""
+
+#sets sign Ant property
+sign=""
+
+tagMaps=""
+
+#sets fetchTag="HEAD" for nightly builds if required
+tag=""
+
+#buildProjectTags=v20060524
+buildProjectTags=v20060529
+
+#updateSite property setting
+updateSite=""
+
+#flag indicating whether or not mail should be sent to indicate build has started
+mail=""
+
+#flag used to build based on changes in map files
+compareMaps=""
+
+#buildId - build name
+buildId=""
+
+#buildLabel - name parsed in php scripts <buildType>-<buildId>-<datestamp>
+buildLabel=""
+
+# tag for build contribution project containing .map files
+mapVersionTag=HEAD
+
+# directory in which to export builder projects
+builderDir=$HOME/releng.dtp.1120/org.eclipse.datatools.releng.builder
+
+# buildtype determines whether map file tags are used as entered or are replaced with HEAD
+buildType=I
+
+# Integration Build, normally done on Friday
+FridayBuild=false
+
+# directory where to copy build
+postingDirectory=$HOME/releng/BIRTOutput/dtp.output/1.12.0
+
+# flag to indicate if test build
+testBuild=""
+
+# path to javadoc executable
+javadoc=""
+
+# value used in buildLabel and for text replacement in index.php template file
+builddate=`date +%Y%m%d`
+buildtime=`date +%H%M`
+
+buildinfoDate=`date +%F%t%H:%M:%S`
+buildinfounivDate=`date +%c%z`
+
+timestamp=$builddate$buildtime
+
+echo "======[builddate]: $builddate " > $USER.log
+echo "======[buildtime]: $buildtime " >> $USER.log
+echo "======[timestamp]: $timestamp " >> $USER.log
+
+# process command line arguments
+usage="usage: $0 [-notify emailaddresses][-test][-buildDirectory directory][-buildId name][-buildLabel directory name][-tagMapFiles][-mapVersionTag tag][-builderTag tag][-bootclasspath path][-compareMaps][-skipPerf] [-skipTest][-updateSite site][-sign] M|N|I|S|R"
+
+if [ $# -lt 1 ]
+then
+		 echo >&2 "$usage"
+		 exit 1
+fi
+
+while [ $# -gt 0 ]
+do
+		 case "$1" in
+		 		 -buildId) buildId="$2"; shift;;
+		 		 -buildLabel) buildLabel="$2"; shift;;
+		 		 -mapVersionTag) mapVersionTag="$2"; shift;;
+				 -noAutoTag) noAutoTag=true;;
+				 -ForceAutoTag) ForceAutoTag=true;;
+				 -Fridaybuild) FridayBuild=true;;
+		 		 -tagMapFiles) tagMaps="-DtagMaps=true";;
+		 		 -noSign) noSign="-DnoSign=true";;
+		 		 -skipPerf) skipPerf="-Dskip.performance.tests=true";;
+		 		 -skipTest) skipTest="-Dskip.tests=true";;
+		 		 -buildDirectory) builderDir="$2"; shift;;
+		 		 -notify) recipients="$2"; shift;;
+		 		 -test) postingDirectory="/builds/transfer/files/bogus/downloads/drops";testBuild="-Dtest=true";;
+		 		 -builderTag) buildProjectTags="$2"; shift;;
+		 		 -compareMaps) compareMaps="-DcompareMaps=true";;
+		 		 -updateSite) updateSite="-DupdateSite=$2";shift;;
+		 		 -sign) sign="-Dsign=true";shift;;
+                                 -upload) upload=true;;
+				 -CheckPluginVersion) CheckPluginVersion=true;;
+		 		 -*)
+		 		 		 echo >&2 $usage
+		 		 		 exit 1;;
+		 		 *) break;;		 # terminate while loop
+		 esac
+		 shift
+done
+
+# After the above the build type is left in $1.
+buildType=$1
+echo "======[buildType]: $buildType " >> $USER.log
+
+# Set default buildId and buildLabel if none explicitly set
+if [ "$buildId" = "" ]
+then
+		 #buildId=$buildType$builddate-$buildtime
+		 buildId=v$builddate-$buildtime
+fi
+
+if [ "$buildLabel" = "" ]
+then
+		 buildLabel=$buildId
+fi
+echo "======[buildId]: $buildId " >> $USER.log
+
+#Set the tag to HEAD for Nightly builds
+if [ "$buildType" = "N" ]
+then
+        tag="-DfetchTag=CVS=HEAD,GIT=master"
+        versionQualifier="-DforceContextQualifier=$buildId"
+fi
+
+echo "======[tag]: $tag" >> $USER.log
+echo "======[versionQualifier]: $versionQualifier" >> $USER.log
+
+# tag for eclipseInternalBuildTools on ottcvs1
+internalToolsTag=$buildProjectTags
+echo "======[internalToolsTag]: $internalToolsTag" >> $USER.log
+
+# tag for exporting org.eclipse.releng.basebuilder
+baseBuilderTag=$buildProjectTags
+echo "======[baseBuilderTag]: $baseBuilderTag" >> $USER.log
+
+# tag for exporting the custom builder
+customBuilderTag=$buildProjectTags
+echo "======[customBuilderTag]: $customBuilderTag" >> $USER.log
+
+#if [ -e $builderDir ]
+#then
+#	 builderDir=$builderDir$timestamp
+#fi
+
+# directory where features and plugins will be compiled
+buildDirectory=$HOME/releng.dtp.1120/src
+
+echo "======[buildDirectory]: $buildDirectory" >> $USER.log
+
+mkdir -p $builderDir
+cd $builderDir
+
+#Pull or clone a branch from a repository
+#Usage: pull repositoryURL  branch
+pull() {
+	mkdir -p $builderDir/gitClones
+        pushd $builderDir/gitClones
+        directory=$(basename $1 .git)
+        if [ ! -d $directory ]; then
+                echo git clone $1
+                git clone $1
+        fi
+        popd
+        pushd $builderDir/gitClones/$directory
+	echo git fetch
+        git fetch
+        echo git checkout $2
+        git checkout $2
+	echo git pull origin $BranchName
+        git pull origin $BranchName
+        popd
+}
+##################AUTO TAGGING START ###########################
+
+if [ "$buildType" == "N" -o "$noAutoTag" ]; then
+	echo "Skipping auto plugins tagging for nightly build or -noAutoTag build"
+else
+	pushd $builderDir
+
+	#remove comments
+	rm -f repos-clean.txt clones.txt
+	GitRoot=ssh://${gitUser}@git.eclipse.org/gitroot/datatools
+	echo "$GitRoot/org.eclipse.datatools.build.git $BranchName" > repos-clean.txt
+	echo "$GitRoot/org.eclipse.datatools.connectivity.git $BranchName" >> repos-clean.txt
+	echo "$GitRoot/org.eclipse.datatools.doc.git $BranchName" >> repos-clean.txt
+	echo "$GitRoot/org.eclipse.datatools.enablement.general.git $BranchName" >> repos-clean.txt
+	echo "$GitRoot/org.eclipse.datatools.enablement.hsqldb.git $BranchName" >> repos-clean.txt
+	echo "$GitRoot/org.eclipse.datatools.enablement.ibm.git $BranchName" >> repos-clean.txt
+	echo "$GitRoot/org.eclipse.datatools.enablement.ingres.git $BranchName" >> repos-clean.txt
+	echo "$GitRoot/org.eclipse.datatools.enablement.msft.git $BranchName" >> repos-clean.txt
+	echo "$GitRoot/org.eclipse.datatools.enablement.mysql.git $BranchName" >> repos-clean.txt
+	echo "$GitRoot/org.eclipse.datatools.enablement.oda.git $BranchName" >> repos-clean.txt
+	echo "$GitRoot/org.eclipse.datatools.enablement.oracle.git $BranchName" >> repos-clean.txt
+	echo "$GitRoot/org.eclipse.datatools.enablement.postgresql.git $BranchName" >> repos-clean.txt
+	echo "$GitRoot/org.eclipse.datatools.enablement.sap.git $BranchName" >> repos-clean.txt
+	echo "$GitRoot/org.eclipse.datatools.enablement.sqlite.git $BranchName" >> repos-clean.txt
+	echo "$GitRoot/org.eclipse.datatools.enablement.sybase.git $BranchName" >> repos-clean.txt
+#	echo "$GitRoot/org.eclipse.datatools.incubator.git $BranchName" >> repos-clean.txt
+	echo "$GitRoot/org.eclipse.datatools.modelbase.git $BranchName" >> repos-clean.txt
+	echo "$GitRoot/org.eclipse.datatools.sqltools.git $BranchName" >> repos-clean.txt
+	
+	#clone or pull each repository and checkout the appropriate branch
+	while read line; do
+        	#each line is of the form <repository> <branch>
+        	set -- $line
+        	pull $1 $2
+        	echo $1 | sed 's/ssh:.*@git.eclipse.org/git:\/\/git.eclipse.org/g' >> clones.txt
+	done < repos-clean.txt
+
+	cat clones.txt| xargs /bin/bash git-map.sh $builderDir/gitClones \
+        $builderDir/gitClones > maps.txt
+		
+	#Trim out lines that don't require execution
+	grep -v ^OK maps.txt | grep -v ^Executed >run.txt
+	if ( cat run.txt | grep sed ); then
+		/bin/bash run.txt
+                mkdir -p $builderDir/report
+                cp report.txt $builderDir/report/report$buildId.txt
+		if [ "$FridayBuild" == "true" ]; then
+			echo "This is Friday build" >> $USER.log
+			echo "DoFridayBuild=false" > checkFridayBuild.properties
+		else
+			echo "This is not Friday build" >> $USER.log
+			echo "DoFridayBuild=true" > checkFridayBuild.properties
+		fi
+	elif [ "$ForceAutoTag" == "true" ]; then
+		echo "Continue to build even if no bundles changed for -ForceAutoTag build" >> $USER.log
+	elif [ "$FridayBuild" == "true" ]; then
+		source checkFridayBuild.properties
+		if [ "$DoFridayBuild" == "true" ]; then
+			echo "Detected changes since the previous Friday build, continue to build..." >> $USER.log
+			echo "DoFridayBuild=false" > checkFridayBuild.properties
+		else
+			echo "No changes since the previous Friday Integration build. The 1.12.0 Integration Build ($buildId) is canceled." >> $USER.log
+			sendEmail -f lchan@actuate.com -t lchan@actuate.com -cc bpayton@us.ibm.com -s localhost:5025 -u "1.12.0 Integration build ($buildId) is canceled" -m "No changes were detected since the previous Integration build.\nThe 1.12.0 Integration Build ($buildId) is canceled" -l mail.log
+			exit
+		fi
+	else
+		echo "No change detected. 1.12.0 Nightly Build ($buildId) is canceled." >> $USER.log
+		sendEmail -f xgu@actuate.com -t xgu@actuate.com lchan@actuate.com -cc bpayton@us.ibm.com -s localhost:5025 -u "1.12.0 Nightly build ($buildId) is canceled" -m "No changes were detected in all the DTP Git repositories.\nThe 1.12.0 Nightly Build ($buildId) is canceled" -l mail.log
+                exit
+	fi
+	
+	popd
+fi
+#### END OF auto-tagging ######
+
+mkdir -p $postingDirectory/$buildLabel
+#chmod -R 755 $builderDir
+
+#default value of the bootclasspath attribute used in ant javac calls.  
+bootclasspath="/usr/local/j2sdk1.4.2_13/jre/lib/rt.jar:/usr/local/j2sdk1.4.2_13/jre/lib/jsse.jar:/usr/local/j2sdk1.4.2_13/jre/lib/jce.jar"
+bootclasspath_15="/usr/local/jdk1.5.0_02/jre/lib/rt.jar:/usr/local/jdk1.5.0_02/jre/lib/jsse.jar:/usr/local/jdk1.5.0_02/jre/lib/jce.jar:"
+bootclasspath_16="/usr/local/jdk1.6.0/jre/lib/rt.jar:/usr/local/jdk1.6.0/jre/lib/jsse.jar:/usr/local/jdk1.6.0/jre/lib/jce.jar"
+jvm15_home="/usr/local/jdk1.5.0_02"
+
+cd $HOME/releng.dtp.1120/org.eclipse.datatools.releng.builder
+
+echo buildId=$buildId >> monitor.properties 
+echo timestamp=$timestamp >> monitor.properties 
+echo buildLabel=$buildLabel >> monitor.properties 
+echo currentDay=$builddate >> monitor.properties
+echo recipients=$recipients >> monitor.properties
+echo sender=$sender >> monitor.properties
+echo log=$postingDirectory/$buildLabel/index.php >> monitor.properties
+
+#the base command used to run AntRunner headless
+#antRunner="/usr/local/jdk1.5.0_09/bin/java -Xmx500m -jar ../org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.jar -Dosgi.os=linux -Dosgi.ws=gtk -Dosgi.arch=ppc -application org.eclipse.ant.core.antRunner"
+#antRunner="/usr/local/j2sdk1.4.2_13/bin/java -Xmx500m -jar ../org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.jar -Dosgi.os=linux -Dosgi.ws=gtk -Dosgi.arch=ppc -application org.eclipse.ant.core.antRunner"
+antRunner="/usr/local/jdk1.6.0/bin/java -Xmx500m -jar ../org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.jar -Dosgi.os=linux -Dosgi.ws=gtk -Dosgi.arch=ppc -application org.eclipse.ant.core.antRunner"
+
+echo "==========[antRunner]: $antRunner" >> $USER.log
+
+#$HOME/releng.dtp.1120/BIRTBuilder/replaceBuildInfo.sh $buildinfoDate $buildinfounivDate
+
+#clean drop directories
+
+#full command with args
+#buildId=v20110808-1451
+echo $tagMaps >> $USER.log
+echo $compareMaps >> $USER.log
+
+PackageVersion=1.12.0RC3-$timestamp
+echo "======[PackageVersion]: $PackageVersion" >> $USER.log
+
+#cp $HOME/releng.dtp.1120/dtpURLmonitor.properties $HOME/releng.260/src/
+
+buildCommand="$antRunner -q -buildfile buildAll.xml $mail $testBuild $compareMaps \
+-DmapVersionTag=$mapVersionTag -DpostingDirectory=$postingDirectory \
+-Dbootclasspath=$bootclasspath_15 -DbuildType=$buildType -D$buildType=true \
+-DbuildId=$buildId -Dbuildid=$buildId -DbuildLabel=$buildId -Dtimestamp=$timestamp $skipPerf $skipTest $tagMaps $noSign \
+-DJ2SE-1.5=$bootclasspath_15 -DJavaSE-1.6=$bootclasspath_16 -DlogExtension=.xml $javadoc $updateSite $sign \
+-Djava15-home=$bootclasspath_15 -DbuildDirectory=$HOME/releng.dtp.1120/src \
+-DbaseLocation=$HOME/releng.dtp.1120/baseLocation -Dwtp.home=$HOME/releng.dtp.1120/baseLocation \
+-DgroupConfiguration=true -DjavacVerbose=true -DjavacFailOnError=false \
+-Dbasebuilder=$HOME/releng.dtp.1120/org.eclipse.releng.basebuilder  \
+-Djvm15_home=$jvm15_home  -DmapTag.properties=$HOME/releng.dtp.1120/org.eclipse.datatools.releng.builder/mapTag.properties \
+-Dbuild.date=$builddate -Dpackage.version=$PackageVersion \
+-DmapGitRoot=ssh://${gitUser}@git.eclipse.org/gitroot/datatools \
+-DmapVersionTag=$BranchName -DBranchVersion=1.12.0 \
+-Dusername.sign=${buildEclipseUser} -Dpassword.sign=${buildEclipsePass} -Dhostname.sign=build.eclipse.org -Dhome.dir=/home/data/users/${buildEclipseUser} -Dsign.dir=/home/data/httpd/download-staging.priv/birt \
+-Dorbit.url.token=download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository/plugins \
+-Dorbit.url.newvalue=qa-build/BIRTOutput/platform/orbit-S20110521195923-Indigo/bundles"
+
+
+#-DjavacTarget=1.5 -DjavacSource=1.5 \
+
+#-DmapCvsRoot=:ext:${gitUser}@dev.eclipse.org:/cvsroot/datatools \
+#-Ddtp.url.token=:ext:${gitUser}@dev.eclipse.org:/cvsroot/datatools \
+#-Ddtp.url.newvalue=:ext:${gitUser}@192.168.218.218:/cvsroot/datatools"
+
+#skipPreBuild
+
+#capture command used to run the build
+echo $buildCommand>command.txt
+
+#run the build
+$buildCommand >> $USER.log
+#retCode=$?
+#
+#if [ $retCode != 0 ]
+#then
+#        echo "Build failed (error code $retCode)."
+#        exit -1
+#fi
+
+#clean up
+#rm -rf $builderDir
+rm -rf $HOME/releng.dtp.1120/src/$buildId
+#cp -f $HOME/releng.dtp.1120/src/directory.txt last_directory.txt
+
+#Audit Check of DTP release plugin version updates
+if [ "$CheckPluginVersion" = "true" ]; then
+  dos2unix -k $builderDir/extras/CheckDTP_PotentialVersionIssue.sh
+  source $builderDir/extras/CheckDTP_PotentialVersionIssue.sh $postingDirectory/$buildId $PackageVersion > CheckDTP_PotentialVersionIssue.log
+  if [ -s $builderDir/change.txt ]; then
+    sendEmail -f lchan@actuate.com -t xgu@actuate.com lchan@actuate.com -cc bpayton@us.ibm.com \
+    -s localhost:5025 \
+    -u "Automated script: potential version update issue between $PackageVersion and 1.11.2 Release" \
+    -o message-file=$builderDir/change.txt \
+    -l mail.log
+  fi
+fi
+
+#upload build to Eclipse site
+if [ "$upload" = "true" ]
+then
+# expects DTP website Git repo is already checked out in datatools folder under the working directory
+  cd $builderDir/uploadScripts
+  ant -f dtplogupload.1.12.0.xml -l log/dtplogupload.1.12.0.log -Dusername=${buildEclipseUser} -Dpassword=${buildEclipsePass}
+  ant -f dtpupload.1.12.0.xml -l log/dtpupload.1.12.0.log -Dusername=${buildEclipseUser} -Dpassword=${buildEclipsePass} -DintegrationBuild=${FridayBuild}
+fi
+
diff --git a/plugins/org.eclipse.datatools.releng.builder/bootstrap.xml b/plugins/org.eclipse.datatools.releng.builder/bootstrap.xml
new file mode 100644
index 0000000..1028ec4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/bootstrap.xml
@@ -0,0 +1,89 @@
+<project name="bootstrap" default="nodefault">
+
+    <property environment="env" />
+    <property name="WORKSPACE" location="${env.WORKSPACE}" />
+
+    <property name="eclipse.sdk.url" value="http://archive.eclipse.org/eclipse/downloads/drops/R-3.7.2-201202080800/eclipse-SDK-3.7.2-linux-gtk.tar.gz"/>
+    <property name="eclipse.sdk.name" value="eclipse-SDK-3.7.2-linux-gtk.tar.gz"/>
+
+    <property name="emf.url" value="http://download.eclipse.org/modeling/emf/emf/downloads/drops/2.7.2/R201201300943/emf-xsd-SDK-2.7.2.zip"/>
+    <property name="emf.name" value="emf-xsd-SDK-2.7.2.zip"/>
+
+    <property name="gef.url" value="http://archive.eclipse.org/tools/gef/downloads/drops/3.7.2/R201201171043/GEF-ALL-3.7.2.zip"/>
+    <property name="gef.name" value="GEF-ALL-3.7.2"/>
+
+    <property name="javahome_15" value="/shared/common/jdk-1.5.0_16"/>
+    <property name="javahome_16" value="/shared/common/sun-jdk1.6.0_21_i586"/>
+
+ 
+    <target name="nodefault">
+    </target>
+
+    <target name="prepareDependency">
+        <antcall target="installDependencies"/>
+    </target>
+    <target name="installDependencies">
+
+        <!-- install eclipse -->
+        <get src="${eclipse.sdk.url}"  dest="/tmp/${eclipse.sdk.name}" verbose="true" usetimestamp="true" />
+        <exec executable="tar" dir="${WORKSPACE}">
+             <arg value="-xzf"/>
+             <arg value="/tmp/${eclipse.sdk.name}"/>
+             <arg value="-C"/>
+             <arg value="${WORKSPACE}"/>
+        </exec>
+
+        <!-- install emf -->
+        <get src="${emf.url}"  dest="/tmp/${emf.name}" verbose="true" usetimestamp="true" />
+        <exec executable="unzip" dir="${WORKSPACE}">
+             <arg value="-o"/>
+             <arg value="/tmp/${emf.name}"/>
+        </exec>
+
+        <!-- install gef -->
+        <get src="${gef.url}"  dest="/tmp/${gef.name}" verbose="true" usetimestamp="true" />
+        <exec executable="unzip" dir="${WORKSPACE}">
+             <arg value="-o"/>
+             <arg value="/tmp/${gef.name}"/>
+        </exec>
+    </target>
+
+    <tstamp>
+        <format property="buildTimestamp" pattern="yyyyMMdd-HHmm" /> 
+        <format property="buildTimestamp2" pattern="yyyyMMddHHmm" /> 
+        <format property="builddate" pattern="yyyyMMdd" /> 
+    </tstamp>
+
+    <target name="run">
+	<property name="BranchName" value="master" />
+        <ant antfile="buildAll.xml">
+	    <property name="postingDirectory" value="${WORKSPACE}/output" />
+	    <property name="buildDirectory" value="${WORKSPACE}/src" />
+	    <property name="baseLocation" value="${WORKSPACE}/eclipse" />
+	    <property name="basebuilder" value="${WORKSPACE}/eclipse.platform.releng.basebuilder" />
+	    <property name="buildType" value="${buildType}" />
+	    <property name="mapVersionTag" value="${BranchName}" />
+	    <property name="BranchVersion" value="1.12.0" />
+	    <property name="mapGitRoot" value="git://git.eclipse.org/gitroot/datatools" />
+	    <property name="buildId" value="v${buildTimestamp}" />
+	    <property name="buildid" value="v${buildTimestamp}" />
+	    <property name="buildLabel" value="v${buildTimestamp}" />
+	    <property name="timestamp" value="${buildTimestamp2}" />
+	    <property name="build.date" value="${builddate}" />
+	    <property name="logExtension" value=".xml" />
+	    <property name="groupConfiguration" value="true" />
+	    <property name="javacVerbose" value="true" />
+	    <property name="javacFailOnError" value="true" />
+	    <property name="hostname.sign" value="build.eclipse.org" />
+	    <property name="sign.dir" value="/home/data/httpd/download-staging.priv/birt" />
+	    <property name="home.dir" value="/home/data/users/${gitUser}" />
+	    <property name="updateSite" value="${WORKSPACE}/updatesite" />
+            <property name="J2SE-1.5" value="${javahome_15}/jre/lib/rt.jar:${javahome_15}/jre/lib/jsse.jar:${javahome_15}/jre/lib/jce.jar"/>
+            <property name="JavaSE-1.6" value="${javahome_16}/jre/lib/rt.jar:${javahome_16}/jre/lib/jsse.jar:${javahome_16}/jre/lib/jce.jar"/>
+            <property name="mapTag.properties" value="${WORKSPACE}/org.eclipse.datatools.releng.builder/mapTag.properties"/>
+            <property name="package.version" value="1.12.0M6-${buildTimestamp2}"/>
+	</ant>
+    </target>
+       
+	
+</project>
diff --git a/plugins/org.eclipse.datatools.releng.builder/build.properties b/plugins/org.eclipse.datatools.releng.builder/build.properties
new file mode 100644
index 0000000..8717f70
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/build.properties
@@ -0,0 +1,57 @@
+
+############# JAVA COMPILER OPTIONS ##############
+# The location of the Java jars to compile against.  Typically the rt.jar for your JDK/JRE
+bootclasspath=${java.home}/lib/rt.jar
+
+# specific JRE locations to compile against. These values are used to compile bundles specifying a
+# Bundle-RequiredExecutionEnvironment. Uncomment and set values for environments that you support
+#CDC-1.0/Foundation-1.0= /path/to/rt.jar
+#CDC-1.1/Foundation-1.1=
+#OSGi/Minimum-1.0=
+#OSGi/Minimum-1.1=
+#JRE-1.1=
+#J2SE-1.2=
+#J2SE-1.3=
+#J2SE-1.4=
+#J2SE-1.5=
+#PersonalJava-1.1=
+#PersonalJava-1.2=
+#CDC-1.0/PersonalBasis-1.0=
+#CDC-1.0/PersonalJava-1.0=
+#CDC-1.1/PersonalBasis-1.1=
+#CDC-1.1/PersonalJava-1.1=
+
+
+# Whether or not to include debug info in the output jars
+javacDebugInfo=false
+
+# Whether or not to fail the build if there are compiler errors
+javacFailOnError=false
+
+# Enable or disable verbose mode of the compiler
+javacVerbose=true
+
+# Extra arguments for the compiler. These are specific to the java compiler being used.
+#compilerArg=
+
+# Default value for the version of the source code. This value is used when compiling plug-ins that do not set the Bundle-RequiredExecutionEnvironment or set javacSource in build.properties
+#javacSource=1.3
+
+# Default value for the version of the byte code targeted. This value is used when compiling plug-ins that do not set the Bundle-RequiredExecutionEnvironment or set javacTarget in build.properties.
+#javacTarget=1.1
+
+buildDirectory=/home/adb/releng.dtp.172/src
+
+postingDirectory=/home/adb/releng/BIRTOutput/dtp.output/1.7.2
+
+baseLocation=/home/adb/releng.dtp.172/baseLocation
+
+eclipse.pdebuild.scripts=/home/adb/releng.dtp.172/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build/scripts
+
+eclipse.pdebuild.templates=/home/adb/releng.dtp.172/src/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build/templates
+
+eclipse.pdebuild.home=/home/adb/releng.dtp.172/org.eclipse.releng.basebuilder
+
+
+dependencyURLs=http://archive.eclipse.org/eclipse/downloads/drops/R-3.7.2-201202080800/download.php?dropFile=eclipse-SDK-3.7.2-linux-gtk.tar.gz
+
diff --git a/plugins/org.eclipse.datatools.releng.builder/build.xml b/plugins/org.eclipse.datatools.releng.builder/build.xml
new file mode 100644
index 0000000..b61f47e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/build.xml
@@ -0,0 +1,65 @@
+<project default="main">
+        <target name="init">
+                <touch file="${user.home}/.cvspass" />
+                <available file="${buildDirectory}/label.properties" property="label.properties.exists" />
+                <antcall target="create.label.properties" />
+                <property file="${buildDirectory}/label.properties" />
+                <!--fetch the HEAD stream of all projects if build type specified as N-->
+                <condition property="fetchTag" value="HEAD">
+                        <equals arg1="${buildType}" arg2="N" />
+                </condition>
+                <!--
+                <condition property="forceContextQualifier" value="${buildId}">
+                        <equals arg1="${buildType}" arg2="N" />
+                </condition>
+                        -->
+
+                <!--Default values for required properties-->
+                <property name="buildDirectory" value="${basedir}/src" />
+
+                <!--compiler args-->
+                <property name="compilerArg" value="-enableJavadoc -encoding ISO-8859-1 -warn:-discouraged,forbidden" />
+                <property name="javacSource" value="1.4" />
+                <property name="javacTarget" value="1.4" />
+                <property name="javacDebugInfo" value="true" />
+                <property name="javacFailOnError" value="false" />
+                <property name="javacVerbose" value="true" />
+                <!--this property required as of Eclipse 3.0 stream builds > 20031126 -->
+                <property name="buildingOSGi" value="true" />
+                <!--zip args-->
+                <property name="zipargs" value="-y -qq" />
+                <!--unzip args-->
+                <property name="unzipArgs" value="-qq" />
+
+        </target>
+
+        <target name="main" depends="init">
+                <property name="component" value="${basedir}/eclipse/buildConfigs/birt" />
+                <!--run the build for the specified component-->
+                <ant antfile="build.xml" dir="${eclipse.pdebuild.scripts}">
+                        <property name="builder" value="${component}" />
+                </ant>
+        </target>
+
+        <target name="create.label.properties" unless="label.properties.exists">
+                <mkdir dir="${buildDirectory}" />
+                <tstamp/>
+                <property name="date" value="${DSTAMP}" />
+                <property name="time" value="${TSTAMP}" />
+                <property name="timestamp" value="${date}-${time}" />
+                <property name="buildType" value="I" />
+                <property name="buildId" value="${buildType}${timestamp}" />
+
+                <!--this naming convention used by php scripts on download server-->
+                <property name="buildLabel" value="${buildId}" />
+
+                <!--store the build label information in a file-->
+                <echo file="${buildDirectory}/label.properties">
+                        timestamp=${timestamp}
+                        buildType=${buildType}
+                        buildId=${buildId}
+                        buildLabel=${buildLabel}
+                </echo>
+        </target>
+
+</project>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.releng.builder/buildAll.xml b/plugins/org.eclipse.datatools.releng.builder/buildAll.xml
new file mode 100644
index 0000000..c3e15b3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/buildAll.xml
@@ -0,0 +1,658 @@
+<project default="main">

+

+	<!--

+		Steps

+	 	Ant properties available at runtime: 

+	

+	 - eclipse.pdebuild.scripts: the org.eclipse.eclipse.pdebuild.scripts folder

+	 - eclipse.pdebuild.home: the root folder of pde build

+	 - eclipse.pdebuild.templates: the  templates folder

+	

+	-->

+

+	<!--build monitoring information:  e-mail, smtp server, build label-->

+	<property file="monitor.properties"/>

+	

+	<!--location of PDE Build configuration files for builder and packager-->

+	<property name="eclipse.build.configs" value="${basedir}/eclipse/buildConfigs" />

+	

+	<property name="sdkHelper" location="${eclipse.build.configs}/eclipse/helper.xml"/>

+	<property name="base.builder" value="${basedir}/../BaseBuilder" />

+	

+	<!--location of properties file containing last tag used for integration build-->

+	<property name="mapTag.properties" value="/home/users/releng/buildTools/eclipse33/mapTag.properties"/>

+	

+	<!--location of properties file containing last performance reference test information-->

+	<property name="ref.properties" value="/home/users/releng/buildTools/eclipse.perf/ref33.properties"/>

+	

+	<!--location of test update site-->

+	<property file="${ref.properties}"/>

+	

+	<!--default buildDirectory-->

+	<property name="buildDirectory" value="${basedir}/../src" />

+	

+	<!--default location for build output, parent to ${buildId}-->

+	<property name="postingDirectory" value="${buildDirectory}" />

+

+    <!--remote sign machine login infomation-->

+    <property name="username.sign" value="" />

+    <property name="password.sign" value="" />

+    <property name="hostname.sign" value="" />

+    <property name="home.dir" value="" />

+    <property name="sign.dir" value="" />

+

+    <target name="main" depends="init">

+		<antcall target="prepareMapFile"/>

+		<antcall target="buildDtpSdkAllFeature"/>

+		<antcall target="compareMapFiles" />

+		<antcall target="buildDtpEnablementAllFeature"/>

+    	<antcall target="buildDtpDocISV"/>

+    	<!--  <antcall target="buildDtpIncubationAllFeature"/>  -->

+		<ant antfile="${eclipse.build.configs}/../helper.xml" target="verifyCompile" />

+		<antcall target="integrateDtpFeatures"/>

+        <antcall target="Package"/>

+        <antcall target="GenerateUpdateSite"/>

+

+	</target>

+

+	<target name="init">

+		<ant antfile="build.xml" target="init" />

+		<property file="${buildDirectory}/label.properties" />

+		

+		<condition property="fetchTag" value="CVS=HEAD,GIT=master">

+			<equals arg1="${buildType}" arg2="N" />

+		</condition>

+		<condition property="forceContextQualifier" value="${buildId}">

+			<equals arg1="${buildType}" arg2="N" />

+		</condition>

+		<condition property="generateFeatureVersionSuffix" value="false">

+			<equals arg1="${buildType}" arg2="N" />

+		</condition>

+		<!--compiler args-->

+		<property name="compilerArg" value="-enableJavadoc -encoding utf-8 -warn:-discouraged,forbidden" />

+		<!--property name="javacSource" value="1.5" />

+		<property name="javacTarget" value="1.5" /-->

+		<property name="javacDebugInfo" value="true" />

+		<property name="javacFailOnError" value="true" />

+		<property name="javacVerbose" value="false" />

+		<property name="logExtension" value=".xml" />

+		<!--this property required as of Eclipse 3.0 stream builds > 20031126 -->

+		<property name="buildingOSGi" value="true" />

+		<!--zip args-->

+		<property name="zipargs" value="-y -qq" />

+		<!--unzip args-->

+		<property name="unzipArgs" value="-qq" />

+	</target>

+	

+	<target name="checkLocal">

+		<available property="mapsLocal" file="${buildDirectory}/maps/releng" />

+	</target>

+	

+	<target name="prepareMapFile" depends="checkLocal" unless="mapsLocal">

+		

+		<!--delete dir="${buildDirectory}/TempRepo" failonerror="false" /-->

+                <mkdir dir="${buildDirectory}/maps"/>

+		

+		<antcall target="GetMapFiles">

+			<param name="gitRepo.name" value="org.eclipse.datatools.build.git"/>

+		</antcall>

+	<!--

+		<antcall target="GetMapFiles">

+			<param name="gitRepo.name" value="org.eclipse.datatools.incubator.git"/>

+		</antcall>

+	-->

+		<antcall target="GetMapFiles">

+			<param name="gitRepo.name" value="org.eclipse.datatools.connectivity.git"/>

+		</antcall>

+		<antcall target="GetMapFiles">

+			<param name="gitRepo.name" value="org.eclipse.datatools.modelbase.git"/>

+		</antcall>

+		<antcall target="GetMapFiles">

+			<param name="gitRepo.name" value="org.eclipse.datatools.sqltools.git"/>

+		</antcall>

+		<antcall target="GetMapFiles">

+			<param name="gitRepo.name" value="org.eclipse.datatools.doc.git"/>

+		</antcall>

+		<antcall target="GetMapFiles">

+			<param name="gitRepo.name" value="org.eclipse.datatools.enablement.general.git"/>

+		</antcall>

+		<antcall target="GetMapFiles">

+			<param name="gitRepo.name" value="org.eclipse.datatools.enablement.hsqldb.git"/>

+		</antcall>

+		<antcall target="GetMapFiles">

+			<param name="gitRepo.name" value="org.eclipse.datatools.enablement.ibm.git"/>

+		</antcall>

+		<antcall target="GetMapFiles">

+			<param name="gitRepo.name" value="org.eclipse.datatools.enablement.ingres.git"/>

+		</antcall>

+		<antcall target="GetMapFiles">

+			<param name="gitRepo.name" value="org.eclipse.datatools.enablement.msft.git"/>

+		</antcall>

+		<antcall target="GetMapFiles">

+			<param name="gitRepo.name" value="org.eclipse.datatools.enablement.mysql.git"/>

+		</antcall>

+		<antcall target="GetMapFiles">

+			<param name="gitRepo.name" value="org.eclipse.datatools.enablement.oda.git"/>

+		</antcall>

+		<antcall target="GetMapFiles">

+			<param name="gitRepo.name" value="org.eclipse.datatools.enablement.oracle.git"/>

+		</antcall>

+		<antcall target="GetMapFiles">

+			<param name="gitRepo.name" value="org.eclipse.datatools.enablement.postgresql.git"/>

+		</antcall>

+		<antcall target="GetMapFiles">

+			<param name="gitRepo.name" value="org.eclipse.datatools.enablement.sap.git"/>

+		</antcall>

+		<antcall target="GetMapFiles">

+			<param name="gitRepo.name" value="org.eclipse.datatools.enablement.sqlite.git"/>

+		</antcall>

+		<antcall target="GetMapFiles">

+			<param name="gitRepo.name" value="org.eclipse.datatools.enablement.sybase.git"/>

+		</antcall>

+				

+		<!--compare the map files project-->

+		<!--antcall target="compareMapFiles" /-->

+

+		<!--tag the map files project-->

+		<antcall target="tagMapFiles" />

+			

+		<!-- this value could be overwrite by the bootstrap command -->

+		<!--property name="dtp.url.token" value="@DTP.URL.TOKEN@"/>

+		<property name="dtp.url.newvalue" value="${mapCvsRoot}"/-->

+		<property name="orbit.url.token" value="@ORBIT.URL.TOKEN@"/>

+		<property name="orbit.url.newvalue" value="@ORBIT.URL.NEWVALUE@"/>

+		

+		<!-- replace orbit url to local server -->

+		<replace dir="${buildDirectory}/maps" value="${orbit.url.newvalue}" token="${orbit.url.token}">

+			<include name="**/orbit-bundles.map" />

+		</replace>

+		

+		<!--replace dir="${buildDirectory}/maps" value="${dtp.url.newvalue}" token="${dtp.url.token}">

+			<include name="**/*.map" />

+		</replace-->

+		

+		<!--delete dir="${buildDirectory}/TempRepo" failonerror="false" /-->

+		

+	</target>

+	

+	<target name="GetMapFiles">

+		<!--echo message="git clone ${mapGitRoot}/${gitRepo.name}.git ${buildDirectory}/TempRepo/${gitRepo.name}"/>

+		<exec executable="git">

+			<arg line="clone ${mapGitRoot}/${gitRepo.name}.git ${buildDirectory}/TempRepo/${gitRepo.name}"/>

+		</exec>

+		<exec executable="git" dir="${buildDirectory}/TempRepo/${gitRepo.name}">

+			<arg line="checkout ${mapVersionTag}"/>

+		</exec>

+		<copy todir="${buildDirectory}/maps">

+			<fileset dir="${buildDirectory}/TempRepo/${gitRepo.name}/releng" includes="${gitRepo.name}.releng/**"/>

+		</copy-->

+		<echo message="git archive -o ${buildDirectory}/maps/${gitRepo.name}.maps.tar --remote=${mapGitRoot}/${gitRepo.name} ${mapVersionTag} releng"/>

+		<exec executable="git" dir="${buildDirectory}/maps" output="${buildDirectory}/maps/${gitRepo.name}.maps.tar">

+                        <arg line="archive --format=tar" />

+                        <arg line="--remote=${mapGitRoot}/${gitRepo.name}" />

+                        <arg line="${mapVersionTag} releng" />

+                </exec>

+                <untar src="${buildDirectory}/maps/${gitRepo.name}.maps.tar" dest="${buildDirectory}/maps" />

+	</target>

+	

+	<target name="compareMapFiles" if="compareMaps">

+		<!--property file="${mapTag.properties}"/>

+		<property name="cvsDiffFile" value="${buildDirectory}/cvsDiff.txt" />

+		<cvs cvsRoot="${mapCvsRoot}" dest="${buildDirectory}/maps" command="diff -w -r ${lastMapTag}" output="${cvsDiffFile}" />

+		<modifiedMaps mapDiffFile="${cvsDiffFile}" /-->

+

+		<condition property="NoMapChange">

+			<filesmatch file1="${buildDirectory}/directory.txt" file2="last_directory.txt"/>	

+		</condition>

+		<ant antfile="${eclipse.build.configs}/../helper.xml" target="InformCancelBuild" />

+		<fail message="No change in map files, canceled build" if="NoMapChange"/>

+		

+	</target>

+

+	<target name="tagMapFiles" if="tagMaps">

+		<!-- Stores tag on the filesystem so map files can be compared -->

+		<echo file="${mapTag.properties}">

+		lastMapTag=r19_${buildId}

+		</echo>

+		<echo message="tagging org.eclipse.datatools.releng..."/>

+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.releng" command="tag r19_${buildId}" />

+		<echo message="tagging org.eclipse.datatools.connectivity.releng..."/>

+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.connectivity/releng/org.eclipse.datatools.connectivity.releng" command="tag r19_${buildId}" />

+		<echo message="tagging org.eclipse.datatools.enablement.releng..."/>

+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.enablement/releng/org.eclipse.datatools.enablement.releng" command="tag r19_${buildId}" />

+		<echo message="tagging org.eclipse.datatools.modelbase.releng..."/>

+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.modelbase/releng/org.eclipse.datatools.modelbase.releng" command="tag r19_${buildId}" />

+		<echo message="tagging org.eclipse.datatools.sqltools.releng..."/>

+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.sqltools/releng/org.eclipse.datatools.sqltools.releng" command="tag r19_${buildId}" />

+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.incubator/releng/org.eclipse.datatools.incubator.releng" command="tag r19_${buildId}" />

+

+	</target>

+			

+	<target name="buildDtpEnablementAllFeature">

+                <ant antfile="build.xml" dir="${basedir}">

+                        <property name="component" value="${eclipse.build.configs}/dtp.enablement.all" />

+                </ant>

+	</target>

+

+	<target name="buildDtpIncubationAllFeature">

+                <ant antfile="build.xml" dir="${basedir}">

+                        <property name="component" value="${eclipse.build.configs}/dtp.incubation.all" />

+                </ant>

+	</target>

+	

+	<!-- build doc.isv plugin -->

+	<target name="buildDtpDocISV">

+

+        <ant antfile="build.xml" dir="${eclipse.pdebuild.scripts}" target="generate">

+                <property name="builder" value="${eclipse.build.configs}/dtp.doc.isv" />

+        </ant>

+        <ant antfile="build.xml" dir="${eclipse.pdebuild.scripts}" target="process">

+                <property name="builder" value="${eclipse.build.configs}/dtp.doc.isv" />

+        </ant>

+		

+	</target>

+	

+	<target name="buildDtpSdkAllFeature">

+

+		<!-- build dtp sdk feature -->

+		<ant antfile="build.xml" dir="${basedir}">

+			<property name="component" value="${eclipse.build.configs}/dtp.sdk.all" />

+		</ant>

+

+	</target>

+

+	<target name="buildDtpEnablementFeature">

+		<ant antfile="build.xml" dir="${basedir}">

+			<property name="component" value="${eclipse.build.configs}/dtp.enablement" />

+		</ant>

+	</target>

+	

+	<target name="buildUpdateSite" if="updateSite">

+		<ant antfile="${eclipse.build.configs}/../helper.xml" target="buildUpdateJars" />

+	</target>

+	

+	<target name="integrateDtpFeatures">

+

+		<property name="tmpsite" value="${buildDirectory}/tmpsite" />

+		<mkdir dir="${tmpsite}/new/eclipse/features" />

+		<mkdir dir="${tmpsite}/new/eclipse/plugins" />

+

+		<!-- unzip all dtp packages into same directory -->

+		<unzip src="${buildDirectory}/${buildId}/dtp-all-${package.version}.zip" dest="${buildDirectory}/tmpsite"/>

+		<unzip src="${buildDirectory}/${buildId}/dtp-enablement-all-${package.version}.zip" dest="${buildDirectory}/tmpsite" overwrite="true"/>

+	<!--		

+		<unzip src="${buildDirectory}/${buildId}/dtp-incubation-all-${package.version}.zip" dest="${buildDirectory}/tmpsite" overwrite="true"/>

+	-->

+		<copy todir="${buildDirectory}/tmpsite/eclipse/plugins" overwrite="true">

+			<fileset dir="${buildDirectory}">

+				<include name="org.eclipse.datatools.doc.isv_*.jar"/>

+			</fileset>

+		</copy>

+		

+		<!-- TODO: 

+		    1. zip features/ plugins/ pack.properties under ${buildDirectory}/tmpsite/eclipse as dtp-all-unsign.zip 

+		    2. sign features, plugins under ${buildDirectory}/tmpsite

+			3. Download back, replace the unsigned version in ${buildDirectory}/tmpsite/eclipse

+			4. Keep the signed, packed zip under ${buildDirectory}/, name as dtp-all-signed.zip

+		-->

+

+        <zip destfile="${tmpsite}/dtp-p2repo.zip">

+           <fileset dir="${tmpsite}/eclipse" includes="features/**"/>

+           <fileset dir="${tmpsite}/eclipse" includes="plugins/**"/>

+        </zip>

+		

+        <antcall target="signDTPJars"/>

+

+		<unpackUpdateJars site="${tmpsite}/eclipse" output="${tmpsite}/new/eclipse"/>

+

+		<copy todir="${tmpsite}/new/eclipse">

+			<fileset dir="${tmpsite}/eclipse" includes="*.html" />

+		</copy>

+

+	</target>

+

+	<target name="p2.test">

+		<p2.generator source="${reposource}" compress="true" 

+                  append="true" flavor="tooling" 

+                  metadataRepository="file:${tmpsite}/new/eclipse" 

+                  artifactRepository="file:${tmpsite}/new/eclipse" 

+                  metadataRepositoryName="DTP test" 

+                  artifactRepositoryName="DTP test" 

+                  publishArtifacts="true" p2OS="linux" mode="incremental" /> 

+

+	</target>

+	

+	<target name="signDTPJars" unless="noSign">

+		

+        <zip destfile="${tmpsite}/dtp-all-unsign.zip">

+           <fileset dir="${tmpsite}/eclipse" includes="features/**"/>

+           <fileset dir="${tmpsite}/eclipse" includes="plugins/**"/>

+           <fileset dir="${eclipse.build.configs}/../../extras" includes="pack.properties"/>

+        </zip>

+		

+		<antcall target="SignJars">

+			<param name="source.dir" value="${tmpsite}"/>

+			<param name="source.name" value="dtp-all-unsign.zip"/>

+			<param name="target.dir" value="${tmpsite}"/>

+			<param name="target.name" value="dtp-all-signed.zip"/>

+		</antcall>

+

+		<unzip src="${tmpsite}/dtp-all-signed.zip" dest="${tmpsite}/eclipse"/>

+		

+		<copy file="${tmpsite}/dtp-all-signed.zip" tofile="${tmpsite}/dtp-p2repo.zip" overwrite="true"/>

+		

+	</target>

+	

+    <target name="SignJars">

+    	

+        <tstamp prefix="timestamp">

+            <format property="upload" pattern="yyyy-MM-dd HH:mm:ss" locale="en" />

+        </tstamp>

+        <echo message="[${timestamp.upload}] Upload unsign package to signing server ..."/>

+    	

+        <scp todir="${username.sign}:${password.sign}@${hostname.sign}:${home.dir}" trust="true">

+            <fileset dir="${source.dir}" includes="${source.name}"/>

+        </scp>

+    	

+        <tstamp prefix="timestamp">

+            <format property="sign.start" pattern="yyyy-MM-dd HH:mm:ss" locale="en" />

+        </tstamp>

+        <echo message="[${timestamp.sign.start}] Upload finished and start jarsigning, wait for 25 mins."/>

+    	

+        <sshexec host="${hostname.sign}" username="${username.sign}" password="${password.sign}" trust="true"

+                 command="cd ${sign.dir};cp ${home.dir}/${source.name} ./;sign ${source.name} nomail;"/>

+    	<sleep minutes="25"/>

+    	

+        <tstamp prefix="timestamp">

+            <format property="download.start" pattern="yyyy-MM-dd HH:mm:ss" locale="en" />

+        </tstamp>

+    	<echo message="[${timestamp.download.start}] Download signed jars from server starts"/>

+    	

+        <scp localtofile="${target.dir}/${target.name}" trust="true"

+             file="${username.sign}:${password.sign}@${hostname.sign}:${sign.dir}/${source.name}"/>

+    	

+        <tstamp prefix="timestamp">

+            <format property="download.end" pattern="yyyy-MM-dd HH:mm:ss" locale="en" />

+        </tstamp>

+    	<echo message="[${timestamp.download.end}] Download signed jars from server ends"/>

+

+        <condition property="CompareSignPack" value="true">

+             <filesmatch file1="${source.dir}/${source.name}"

+                         file2="${target.dir}/${target.name}"/>

+        </condition>

+    	

+        <antcall target="DownloadSignedPackAgain">

+        	<param name="source.name" value="${source.name}"/>

+        	<param name="target.dir" value="${target.dir}"/>

+        	<param name="target.name" value="${target.name}"/>

+        </antcall>

+    	       

+    </target>

+

+    <target name="DownloadSignedPackAgain" if="CompareSignPack">

+    	

+        <tstamp prefix="timestamp">

+            <format property="download.again.now" pattern="yyyy-MM-dd HH:mm:ss" locale="en" />

+        </tstamp>

+    	<echo message="[${timestamp.download.again.now}] Sign check failed and wait for 10 mins to download again"/>

+

+        <sleep minutes="10"/>

+    	

+        <tstamp prefix="timestamp">

+            <format property="download.again.start" pattern="yyyy-MM-dd HH:mm:ss" locale="en" />

+        </tstamp>

+        <echo message="[${timestamp.download.again.start}] Download signed package again"/>

+    	

+        <scp localtofile="${target.dir}/${target.name}" trust="true"

+             file="${username.sign}:${password.sign}@${hostname.sign}:${sign.dir}/${source.name}"/>

+    	

+        <tstamp prefix="timestamp">

+            <format property="download.again.end" pattern="yyyy-MM-dd HH:mm:ss" locale="en" />

+        </tstamp>

+        <echo message="[${timestamp.download.again.end}] Download signed package ends. Start packaging..."/>

+    	

+    </target>

+

+	<target name="Package">

+

+		<property file="${buildDirectory}/finalPluginsVersions.properties"/>

+

+		<!-- repackage source features and plugins -->

+

+		<delete includeemptydirs="true">

+			<fileset dir="${buildDirectory}/tmpsite/eclipse/features">

+				<include name="org.eclipse.datatools.sdk-all.feature_*/**"/>

+			</fileset>

+			<fileset dir="${buildDirectory}/tmpsite/new/eclipse/features">

+				<include name="org.eclipse.datatools.sdk-all.feature_*/**"/>

+			</fileset>

+		</delete>

+

+		<!-- package sdk package -->

+		<zip destfile="${buildDirectory}/${buildId}/dtp-sdk-${package.version}.zip">

+			<zipfileset dir="${buildDirectory}/tmpsite/new/eclipse/features" prefix="eclipse/features">

+				<include name="**"/>

+				<exclude name="*.ecore.feature*/**"/>

+				<exclude name="*.ecore.sdk.feature*/**"/>

+			</zipfileset>

+			<zipfileset dir="${buildDirectory}/tmpsite/new/eclipse/plugins" prefix="eclipse/plugins">

+				<include name="**"/>

+				<exclude name="org.eclipse.datatools.enablement.oda.ecore*/**"/>

+			</zipfileset>

+			<zipfileset dir="${buildDirectory}/tmpsite/new/eclipse" prefix="eclipse">

+				<include name="*.html"/>

+			</zipfileset>

+		</zip>

+

+		<!-- package non-sdk package -->

+		<zip destfile="${buildDirectory}/${buildId}/dtp-${package.version}.zip">

+			<zipfileset dir="${buildDirectory}/tmpsite/new/eclipse/features" prefix="eclipse/features">

+				<include name="**"/>

+				<exclude name="*sdk-all.feature*/**"/>

+				<exclude name="*sdk.feature*/**"/>

+				<exclude name="*.source_*/**"/>

+				<exclude name="org.eclipse.datatools.enablement.oda.ecore*/**"/>

+			</zipfileset>

+			<zipfileset dir="${buildDirectory}/tmpsite/new/eclipse/plugins" prefix="eclipse/plugins">

+				<include name="**"/>

+				<exclude name="*.source_*/**"/>

+				<exclude name="org.eclipse.datatools.doc.isv_*.jar"/>

+				<exclude name="org.eclipse.datatools.connectivity.ui.templates_*.jar"/>

+				<exclude name="org.eclipse.datatools.enablement.oda.ecore*/**"/>

+			</zipfileset>

+			<zipfileset dir="${buildDirectory}/tmpsite/new/eclipse" prefix="eclipse">

+				<include name="readme/**"/>

+				<include name="*.html"/>

+			</zipfileset>

+		</zip>

+

+		<!-- package incubator-sdk package -->

+	<!--

+		<zip destfile="${buildDirectory}/${buildId}/dtp-incubator-sdk-${package.version}.zip">

+			<zipfileset dir="${buildDirectory}/tmpsite/new/eclipse/features" prefix="eclipse/features">

+				<include name="org.eclipse.datatools.enablement.oda.ecore.*/**"/>

+			</zipfileset>

+			<zipfileset dir="${buildDirectory}/tmpsite/new/eclipse/plugins" prefix="eclipse/plugins">

+				<include name="org.eclipse.datatools.enablement.oda.ecore*/**"/>

+			</zipfileset>

+			<zipfileset dir="${buildDirectory}/tmpsite/new/eclipse" prefix="eclipse">

+				<include name="readme/**"/>

+				<include name="*.html"/>

+			</zipfileset>

+		</zip>

+	-->

+		<!-- package incubator package -->

+	<!--

+		<zip destfile="${buildDirectory}/${buildId}/dtp-incubator-${package.version}.zip">

+			<zipfileset dir="${buildDirectory}/tmpsite/new/eclipse/features" prefix="eclipse/features">

+				<include name="org.eclipse.datatools.enablement.oda.ecore.feature_*/**"/>

+				<exclude name="org.eclipse.datatools.enablement.oda.ecore.feature.source_*/**"/>

+				<exclude name="org.eclipse.datatools.enablement.oda.ecore.sdk.feature_*/**"/>

+			</zipfileset>

+			<zipfileset dir="${buildDirectory}/tmpsite/new/eclipse/plugins" prefix="eclipse/plugins">

+				<include name="org.eclipse.datatools.enablement.oda.ecore*/**"/>

+				<exclude name="org.eclipse.datatools.enablement.oda.ecore*source*/**"/>

+			</zipfileset>

+			<zipfileset dir="${buildDirectory}/tmpsite/new/eclipse" prefix="eclipse">

+				<include name="readme/**"/>

+				<include name="*.html"/>

+			</zipfileset>

+		</zip>

+	-->

+

+		<!-- package source package -->

+		<zip destfile="${buildDirectory}/${buildId}/dtp-source-${package.version}.zip">

+			<zipfileset dir="${buildDirectory}">

+			    <include name="*.txt"/>

+			    <include name="*.properties"/>

+			    <include name="*.xml"/>

+			</zipfileset>

+	    </zip>

+		

+		<!-- copy to output directory -->

+		<mkdir dir="${postingDirectory}/${buildId}" />

+		<copy file="${buildDirectory}/${buildId}/dtp-sdk-${package.version}.zip" todir="${postingDirectory}/${buildId}"/>

+		<copy file="${buildDirectory}/${buildId}/dtp-${package.version}.zip" todir="${postingDirectory}/${buildId}"/>

+	<!--

+		<copy file="${buildDirectory}/${buildId}/dtp-incubator-sdk-${package.version}.zip" todir="${postingDirectory}/${buildId}"/>

+		<copy file="${buildDirectory}/${buildId}/dtp-incubator-${package.version}.zip" todir="${postingDirectory}/${buildId}"/>

+	-->

+		<copy file="${buildDirectory}/${buildId}/dtp-source-${package.version}.zip" todir="${postingDirectory}/${buildId}"/>

+		<copy file="${buildDirectory}/directory.txt" todir="${postingDirectory}/${buildId}"/>

+        <copy tofile="${postingDirectory}/finalFeaturesVersions.properties" file="${buildDirectory}/finalFeaturesVersions.properties" overwrite="true" />

+		<copy tofile="${postingDirectory}/monitor.properties" file="monitor.properties" overwrite="true" />

+        <copy todir="${postingDirectory}/${buildId}">

+		   <fileset dir="." includes="*.log"/>

+		</copy>

+		

+        <tstamp prefix="timestamp">

+            <format property="package.end" pattern="yyyy-MM-dd HH:mm:ss" locale="en" />

+        </tstamp>

+        <echo message="[${timestamp.package.end}] Packaging finished."/>

+		

+	</target>

+

+    <target name="GenerateUpdateSite" unless="HQ.BIRT.skip">

+        <property file="${buildDirectory}/finalFeaturesVersions.properties"/>

+    	<property name="tmpsite" value="${buildDirectory}/tmpsite" />

+        <mkdir dir="${postingDirectory}/${buildId}/UpdateSite"/>

+    	<mkdir dir="${postingDirectory}/${buildId}/pack200site"/>

+        <property name="updateSiteDir" value="${postingDirectory}/${buildId}/UpdateSite"/>  	

+    	<property name="pack200Dir" value="${postingDirectory}/${buildId}/pack200site"/>

+        

+    	<!-- replace the feature version in site.xml -->

+        <!--copy file="${eclipse.build.configs}/../../extras/site.xml" tofile="${updateSiteDir}/site.xml" overwrite="true"/>

+        <replace file="${updateSiteDir}/site.xml" value="1.8.0" token="@RELEASE.VERSION@"/>

+        <replace file="${updateSiteDir}/site.xml" value="${org.eclipse.datatools.enablement.sdk.feature}" token="@org.eclipse.datatools.enablement.sdk.feature@"/>

+        <replace file="${updateSiteDir}/site.xml" value="${org.eclipse.datatools.sdk.feature}" token="@org.eclipse.datatools.sdk.feature@"/-->

+

+        <!-- push update site to output directory -->

+

+        <unzip src="${tmpsite}/dtp-p2repo.zip" 

+        	dest="${postingDirectory}/${buildId}/UpdateSite" overwrite="true"/>

+    	

+        <copy todir="${postingDirectory}/${buildId}/UpdateSite" overwrite="true">

+        	<fileset dir="${eclipse.build.configs}/../../extras">

+        		<include name="pack.properties"/>

+        	</fileset>

+    	</copy>

+    	

+    	<delete includeemptydirs="true" failonerror="false">

+            <fileset dir="${postingDirectory}/${buildId}/UpdateSite/features">

+                <include name="org.eclipse.datatools.sdk-all.feature_*/**"/>

+            </fileset>

+            <fileset dir="${postingDirectory}/${buildId}/UpdateSite">

+                <include name="*.html"/>

+            </fileset>

+        </delete>

+	

+		<!-- push p2 repo to local update site for testing -->

+		<antcall target="genP2CompositeUpdateSite"/>

+		

+    	<!-- zip p2 repo-->

+		<zip destfile="${postingDirectory}/${buildId}/dtp-p2repo-${package.version}.zip">

+			<zipfileset dir="${postingDirectory}/${buildId}/UpdateSite/features/" prefix="features">

+				<include name="*.jar"/>

+				<include name="*.pack.gz"/>

+			</zipfileset>

+			<zipfileset dir="${postingDirectory}/${buildId}/UpdateSite/plugins/" prefix="plugins">

+				<include name="*.jar"/>

+				<include name="*.pack.gz"/>

+			</zipfileset>

+			<zipfileset dir="${postingDirectory}/${buildId}/UpdateSite/">

+				<include name="*.jar"/>

+			</zipfileset>

+		</zip>

+    	

+    	<delete includeemptydirs="true" failonerror="false">

+            <fileset dir="${postingDirectory}/${buildId}">

+                <include name="UpdateSite/**"/>

+            </fileset>

+        </delete>    	   	

+	</target>

+

+	<target name="GenerateCVSChangeLog">

+		<ant antfile="${eclipse.build.configs}/../../extras/cvschanges.xml"/>

+	</target>

+

+    <target name="genP2CompositeUpdateSite">

+    	

+        <property name="compsite.site" value="${postingDirectory}/../../../../UpdateSite/dtp_${BranchVersion}" />

+        <property name="repo" value="${compsite.site}/${buildId}" />

+        <property name="p2.repo.name" value="DTP Update Site" />

+        <mkdir dir="${repo}" />       

+    	

+	   	<!-- generate pack200 -->	

+		<replace file="${eclipse.build.configs}/../../extras/pack200" token="@pack200@" value="${jvm15_home}/bin/pack200"/>

+		<chmod file="${eclipse.build.configs}/../../extras/pack200" perm="755"/>

+

+		<exec executable="dos2unix" dir="${eclipse.build.configs}/../../extras">

+			<arg line=" pack200" />

+		</exec>

+		

+    	<!-- create pack200 -->

+    	<java jar="${basedir}/../org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.jar"

+                fork="true"

+                timeout="10800000"

+                jvm="${jvm15_home}/bin/java"

+                failonerror="true"

+                maxmemory="512m"

+                dir="${postingDirectory}/${buildId}/">

+                <jvmarg value="-Dorg.eclipse.update.jarprocessor.pack200=${eclipse.build.configs}/../../extras"/>

+                <arg line="-application org.eclipse.update.core.siteOptimizer -verbose"/>

+                <arg line="-jarProcessor -outputDir ${pack200Dir} -processAll -pack UpdateSite"/>

+        </java>

+    	    	

+        <!-- generator features and plugins metadata -->

+        <!--copy file="${updateSiteDir}/site.xml" todir="${pack200Dir}"/-->

+    	<p2.publish.featuresAndBundles

+    	      metadataRepository="file:${repo}"

+    	      artifactRepository="file:${repo}"

+    	      source="${pack200Dir}"

+    	      publishArtifacts="true"

+    	      compress="true"

+    	      reusePackedFiles="true"/>

+    	<copy todir="${repo}/features">

+    	   <fileset dir="${pack200Dir}/features" includes="*.pack.gz"/>

+        </copy>

+        

+        <!--try create composite repository-->

+        <p2.composite.artifact.repository.create location="file://${compsite.site}" name="${p2.repo.name}" compressed="true" failOnExists="false" />

+        <p2.composite.metadata.repository.create location="file://${compsite.site}" name="${p2.repo.name}" compressed="true" failOnExists="false" />

+

+        <!--add childRepo to composite repo-->

+        <p2.composite.artifact.repository.add location="file://${compsite.site}" child="${buildId}" />

+        <p2.composite.metadata.repository.add location="file://${compsite.site}" child="${buildId}" />

+

+    	<!-- copy p2 metadata to build directory -->

+    	<copy todir="${postingDirectory}/${buildId}/UpdateSite" overwrite="true">

+    		<fileset dir="${compsite.site}/${buildId}">

+    			<include name="features/**"/>

+    			<include name="plugins/**"/>

+    			<include name="*.jar"/>

+    		</fileset>

+    	</copy>

+    	

+    </target>

+	<!-- test -->

+</project>

diff --git a/plugins/org.eclipse.datatools.releng.builder/config.properties b/plugins/org.eclipse.datatools.releng.builder/config.properties
new file mode 100644
index 0000000..9323da3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/config.properties
@@ -0,0 +1,23 @@
+#Daily build can check the disk capacity._2.2.0

+##diskspace.warning.threshold is the minimum disk space.

+##diskspace.path is the path for the disk, can be c:\,c: etc for win32 environment.

+

+#Disk that needs to be checked.

+diskspace.warning.threshold=400

+

+########################################################################

+

+replyto.address=xgu@actuate.com

+QA.test.dir=\\\\qa-build\\BIRTOutput

+

+mail.port=5025

+mail.from=xgu@actuate.com

+

+

+BUILD.COMPLETE.members=xgu@actuate.com,lchan@actuate.com,bpayton@us.ibm.com

+

+COMPILE.ERROR.RECIPIENTS=dtp-dev@eclipse.org,xgu@actuate.com 

+

+build.environment=Eclipse 3.4M5, EMF 2.2.2, GEF 3.4M5, WTP 3.0M5, JDK1.4.2_07

+rtn=\n

+

diff --git a/plugins/org.eclipse.datatools.releng.builder/eclipse/buildConfigs/dtp.doc.isv/build.properties b/plugins/org.eclipse.datatools.releng.builder/eclipse/buildConfigs/dtp.doc.isv/build.properties
new file mode 100644
index 0000000..98538e0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/eclipse/buildConfigs/dtp.doc.isv/build.properties
@@ -0,0 +1,46 @@
+###############################################################################
+# Copyright (c) 2000, 2006 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+
+generateFeatureVersionSuffix=true
+baseLocation=/home/adb/farrah/baseLocation
+p4.home=/home/adb/farrah/P4
+buildDirectory=/home/adb/farrah/src
+outputUpdateJars=true
+individualSourceBundles=true
+
+runPackager=true
+mapVersionTag=HEAD
+bootclasspath=${java.home}/lib/rt.jar
+buildType=I
+buildId=build
+buildLabel=${buildType}.${buildId}
+timestamp=0000
+collPlace=eclipse
+collBase=.
+configs=*,*,*
+
+archivesFormat =*,*,*-zip
+
+javacFailOnError=false
+javacDebugInfo=on
+javacVerbose=true
+compileArg=-enableJavadoc
+
+zipargs=
+tarargs=--owner=0 --group=0 
+
+collectingFolder=eclipse
+archivePrefix=eclipse
+
+baseos=win32
+basews=win32
+basearch=x86
+
diff --git a/plugins/org.eclipse.datatools.releng.builder/eclipse/buildConfigs/dtp.doc.isv/customTargets.xml b/plugins/org.eclipse.datatools.releng.builder/eclipse/buildConfigs/dtp.doc.isv/customTargets.xml
new file mode 100644
index 0000000..137f624
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/eclipse/buildConfigs/dtp.doc.isv/customTargets.xml
@@ -0,0 +1,219 @@
+<project name="Build specific targets and properties" default="noDefault" basedir=".">
+
+	<property name="postingDirectory" value="${buildDirectory}" />
+	<property name="package.version" value="1_9_0" />
+	<property name="archiveName" value="dtp-docisv-${package.version}.zip"/>
+
+	
+	<!-- ===================================================================== -->
+	<!-- Run a given ${target} on all elements being built -->
+	<!-- ===================================================================== -->
+	<target name="allElements">
+		<ant antfile="${genericTargets}" target="${target}" >
+			<property name="type" value="plugin" />
+			<property name="id" value="org.eclipse.datatools.doc.isv" />
+		</ant>
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Targets to assemble the built elements for particular configurations  -->
+	<!-- These generally call the generated assemble scripts (named in -->
+	<!-- ${assembleScriptName}) but may also add pre and post processing -->
+	<!-- Add one target for each root element and each configuration -->
+	<!-- ===================================================================== -->
+	
+	<target name="assemble.org.eclipse.datatools.docisv">
+		<property name="archiveName" value="dtp-docisv-${package.version}.zip"/>
+		<antcall target="assemble" />
+	</target>
+
+
+	<target name="assemble">
+		<property name="archiveFullPath" value="${buildDirectory}/${buildLabel}/${archiveName}" />
+		<ant antfile="${assembleScriptName}" />
+	</target>
+	
+	<target name="postPackage">
+	</target>
+	<!-- ===================================================================== -->
+	<!-- Check out map files from correct repository -->
+	<!-- Replace values for cvsRoot, package and mapVersionTag as desired. -->
+	<!-- ===================================================================== -->
+	<target name="checkLocal">
+		<available property="mapsLocal" file="${buildDirectory}/maps/releng" />
+	</target>
+	
+	<target name="getMapFiles" depends="checkLocal" unless="mapsLocal">
+
+		<!-- ***  change the repo info -->
+		<property name="mapCvsRoot" value=":pserver:anonymous@dev.eclipse.org:/cvsroot/datatools" />
+		<property name="mapVersionTag" value="HEAD" />
+
+        <cvs cvsRoot="${mapCvsRoot}" 
+             package="org.eclipse.datatools.releng" dest="${buildDirectory}/maps" tag="${mapVersionTag}" />
+
+        <cvs cvsRoot="${mapCvsRoot}" 
+             package="org.eclipse.datatools.connectivity/releng/org.eclipse.datatools.connectivity.releng" 
+             dest="${buildDirectory}/maps" tag="${mapVersionTag}" />
+        <cvs cvsRoot="${mapCvsRoot}" 
+             package="org.eclipse.datatools.enablement/releng/org.eclipse.datatools.enablement.releng" 
+             dest="${buildDirectory}/maps" tag="${mapVersionTag}" />
+        <cvs cvsRoot="${mapCvsRoot}" 
+             package="org.eclipse.datatools.modelbase/releng/org.eclipse.datatools.modelbase.releng" 
+             dest="${buildDirectory}/maps" tag="${mapVersionTag}" />
+        <cvs cvsRoot="${mapCvsRoot}" 
+             package="org.eclipse.datatools.sqltools/releng/org.eclipse.datatools.sqltools.releng" 
+             dest="${buildDirectory}/maps" tag="${mapVersionTag}" />
+        <cvs cvsRoot="${mapCvsRoot}" 
+             package="org.eclipse.datatools.incubator/releng/org.eclipse.datatools.incubator.releng" 
+             dest="${buildDirectory}/maps" tag="${mapVersionTag}" />
+
+
+		<!--compare the map files project-->
+		<antcall target="compareMapFiles" />
+		<!--tag the map files project-->
+		<antcall target="tagMapFiles" />
+
+	</target>
+	<target name="compareMapFiles" if="compareMaps">
+		<property file="${mapTag.properties}"/>
+		<property name="cvsDiffFile" value="${buildDirectory}/cvsDiff.txt" />
+		<cvs cvsRoot="${mapCvsRoot}" dest="${buildDirectory}/maps" command="diff -w -r ${lastMapTag}" output="${cvsDiffFile}" />
+		<modifiedMaps mapDiffFile="${cvsDiffFile}" />
+	</target>
+
+	<target name="tagMapFiles" if="tagMaps">
+		<!-- Stores tag on the filesystem so map files can be compared -->
+		<echo file="${mapTag.properties}">
+		lastMapTag=r19_${buildId}
+		</echo>
+		<echo message="tagging org.eclipse.datatools.releng..."/>
+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.releng" command="tag r18_${buildId}" />
+		<echo message="tagging org.eclipse.datatools.connectivity.releng..."/>
+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.connectivity/releng/org.eclipse.datatools.connectivity.releng" command="tag r19_${buildId}" />
+		<echo message="tagging org.eclipse.datatools.enablement.releng..."/>
+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.enablement/releng/org.eclipse.datatools.enablement.releng" command="tag r19_${buildId}" />
+		<echo message="tagging org.eclipse.datatools.modelbase.releng..."/>
+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.modelbase/releng/org.eclipse.datatools.modelbase.releng" command="tag r19_${buildId}" />
+		<echo message="tagging org.eclipse.datatools.sqltools.releng..."/>
+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.sqltools/releng/org.eclipse.datatools.sqltools.releng" command="tag r19_${buildId}" />
+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.incubator/releng/org.eclipse.datatools.incubator.releng" command="tag r19_${buildId}" />
+
+	</target>
+	
+	<!-- ===================================================================== -->
+	<!-- Steps to do before setup -->
+	<!-- ===================================================================== -->
+	<target name="preSetup">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after setup but before starting the build proper -->
+	<!-- ===================================================================== -->
+	<target name="postSetup">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before fetching the build elements -->
+	<!-- ===================================================================== -->
+	<target name="preFetch">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the fetch -->
+	<!-- ===================================================================== -->
+	<target name="postFetch">
+	</target>
+	
+	<!-- ===================================================================== -->
+	<!-- Steps to do before generating build scripts -->
+	<!-- ===================================================================== -->
+	<target name="preGenerate">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after generating the build scripts -->
+	<!-- ===================================================================== -->
+	<target name="postGenerate">
+		<antcall target="clean" />
+	</target>
+
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before assembling -->
+	<!-- ===================================================================== -->
+	<target name="preAssemble">
+	
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after assembling-->
+	<!-- ===================================================================== -->
+	<target name="postAssemble">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before running the build.xmls for the elements being built. -->
+	<!-- ===================================================================== -->
+	<target name="preProcess">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after running the build.xmls for the elements being built. -->
+	<!-- ===================================================================== -->
+	<target name="postProcess">
+        <property file="${buildDirectory}/finalPluginsVersions.properties"/>
+        <property name="module.name" value="org.eclipse.datatools.doc.isv"/>
+        <property name="work.dir" value="${buildDirectory}/plugins/${module.name}"/>
+        <property name="output.dir" value="${buildDirectory}"/>
+		<property name="manifest" value="META-INF/MANIFEST.MF"/>
+	
+		<replace dir="${work.dir}" value="${org.eclipse.datatools.doc.isv}" token="${BranchVersion}.qualifier">
+			<include name="META-INF/MANIFEST.MF" />
+		</replace>
+		
+		<echo message="output jar name:${output.dir}/${module.name}_${org.eclipse.datatools.doc.isv}.jar"/>
+        <jar destfile="${output.dir}/${module.name}_${org.eclipse.datatools.doc.isv}.jar"  manifest="${work.dir}/${manifest}">
+                <fileset dir="${work.dir}">
+                        <include name="${manifest}"/>
+                        <include name="*.*"/>
+                        <include name="html/**"/>
+                        <include name="projects/**"/>
+                		<exclude name="build.*"/>
+                		<exclude name="Build*"/>
+                		<exclude name=".classpath"/>
+                		<exclude name=".project"/>
+                		<exclude name="customBuildCallbacks.xml"/>
+                </fileset>
+        </jar>
+	</target>
+
+	<target name="prePackage" />
+	
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after everything is built and assembled -->
+	<!-- (e.g., testing, posting, emailing, ...) -->
+	<!-- ===================================================================== -->
+	<target name="postBuild">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Helper targets -->
+	<!-- ===================================================================== -->
+	<target name="gatherLogs" if="logsAvailable">
+	</target>
+	
+	<target name="clean" unless="noclean">
+		<antcall target="allElements">
+			<param name="target" value="cleanElement" />
+		</antcall>
+	</target>
+	<!-- ===================================================================== -->
+	<!-- Default target                                                        -->
+	<!-- ===================================================================== -->
+	<target name="noDefault">
+		<echo message="You must specify a target when invoking this file" />
+	</target>
+
+</project>
diff --git a/plugins/org.eclipse.datatools.releng.builder/eclipse/buildConfigs/dtp.enablement.all/build.properties b/plugins/org.eclipse.datatools.releng.builder/eclipse/buildConfigs/dtp.enablement.all/build.properties
new file mode 100644
index 0000000..98538e0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/eclipse/buildConfigs/dtp.enablement.all/build.properties
@@ -0,0 +1,46 @@
+###############################################################################
+# Copyright (c) 2000, 2006 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+
+generateFeatureVersionSuffix=true
+baseLocation=/home/adb/farrah/baseLocation
+p4.home=/home/adb/farrah/P4
+buildDirectory=/home/adb/farrah/src
+outputUpdateJars=true
+individualSourceBundles=true
+
+runPackager=true
+mapVersionTag=HEAD
+bootclasspath=${java.home}/lib/rt.jar
+buildType=I
+buildId=build
+buildLabel=${buildType}.${buildId}
+timestamp=0000
+collPlace=eclipse
+collBase=.
+configs=*,*,*
+
+archivesFormat =*,*,*-zip
+
+javacFailOnError=false
+javacDebugInfo=on
+javacVerbose=true
+compileArg=-enableJavadoc
+
+zipargs=
+tarargs=--owner=0 --group=0 
+
+collectingFolder=eclipse
+archivePrefix=eclipse
+
+baseos=win32
+basews=win32
+basearch=x86
+
diff --git a/plugins/org.eclipse.datatools.releng.builder/eclipse/buildConfigs/dtp.enablement.all/customTargets.xml b/plugins/org.eclipse.datatools.releng.builder/eclipse/buildConfigs/dtp.enablement.all/customTargets.xml
new file mode 100644
index 0000000..cb022dd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/eclipse/buildConfigs/dtp.enablement.all/customTargets.xml
@@ -0,0 +1,236 @@
+<project name="Build specific targets and properties" default="noDefault" basedir=".">
+
+	<property name="postingDirectory" value="${buildDirectory}" />
+	<property name="package.version" value="1_6_0" />
+	<property name="archiveName" value="dtp-enablement-all-${package.version}.zip"/>
+
+	
+	<!-- ===================================================================== -->
+	<!-- Run a given ${target} on all elements being built -->
+	<!-- ===================================================================== -->
+	<target name="allElements">
+		<ant antfile="${genericTargets}" target="${target}" >
+			<property name="type" value="feature" />
+			<property name="id" value="org.eclipse.datatools.enablement.sdk.feature" />
+		</ant>
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Targets to assemble the built elements for particular configurations  -->
+	<!-- These generally call the generated assemble scripts (named in -->
+	<!-- ${assembleScriptName}) but may also add pre and post processing -->
+	<!-- Add one target for each root element and each configuration -->
+	<!-- ===================================================================== -->
+	
+	<target name="assemble.org.eclipse.datatools.enablement.sdk.feature">
+		<property name="archiveName" value="dtp-enablement-all-${package.version}.zip"/>
+		<antcall target="assemble" />
+	</target>
+
+
+	<target name="assemble">
+		<property name="archiveFullPath" value="${buildDirectory}/${buildLabel}/${archiveName}" />
+		<ant antfile="${assembleScriptName}" />
+	</target>
+	
+	<target name="postPackage">
+	</target>
+	<!-- ===================================================================== -->
+	<!-- Check out map files from correct repository -->
+	<!-- Replace values for cvsRoot, package and mapVersionTag as desired. -->
+	<!-- ===================================================================== -->
+	<target name="checkLocal">
+		<available property="mapsLocal" file="${buildDirectory}/maps/releng" />
+		<!--
+		<available property="mapsLocal" file="${buildDirectory}/maps/source/pde_build/maps" />
+		-->
+	</target>
+	
+	<target name="getMapFiles" depends="checkLocal" unless="mapsLocal">
+
+		<!-- ***  change the repo info -->
+		<property name="mapCvsRoot" value=":pserver:anonymous@dev.eclipse.org:/cvsroot/datatools" />
+		<property name="mapVersionTag" value="HEAD" />
+		<echo message="cvs root: ${mapCvsRoot}"/>
+
+        <cvs cvsRoot="${mapCvsRoot}" 
+             package="org.eclipse.datatools.releng" dest="${buildDirectory}/maps" tag="${mapVersionTag}" />
+
+        <cvs cvsRoot="${mapCvsRoot}" 
+             package="org.eclipse.datatools.connectivity/releng/org.eclipse.datatools.connectivity.releng" 
+             dest="${buildDirectory}/maps" tag="${mapVersionTag}" />
+        <cvs cvsRoot="${mapCvsRoot}" 
+             package="org.eclipse.datatools.enablement/releng/org.eclipse.datatools.enablement.releng" 
+             dest="${buildDirectory}/maps" tag="${mapVersionTag}" />
+        <cvs cvsRoot="${mapCvsRoot}" 
+             package="org.eclipse.datatools.modelbase/releng/org.eclipse.datatools.modelbase.releng" 
+             dest="${buildDirectory}/maps" tag="${mapVersionTag}" />
+        <cvs cvsRoot="${mapCvsRoot}" 
+             package="org.eclipse.datatools.sqltools/releng/org.eclipse.datatools.sqltools.releng" 
+             dest="${buildDirectory}/maps" tag="${mapVersionTag}" />
+        <cvs cvsRoot="${mapCvsRoot}" 
+             package="org.eclipse.datatools.incubator/releng/org.eclipse.datatools.incubator.releng" 
+             dest="${buildDirectory}/maps" tag="${mapVersionTag}" />
+
+		<!--compare the map files project-->
+		<antcall target="compareMapFiles" />
+		<!--tag the map files project-->
+		<antcall target="tagMapFiles" />
+
+	</target>
+	<target name="compareMapFiles" if="compareMaps">
+		<property file="${mapTag.properties}"/>
+		<property name="cvsDiffFile" value="${buildDirectory}/cvsDiff.txt" />
+		<cvs cvsRoot="${mapCvsRoot}" dest="${buildDirectory}/maps" command="diff -w -r ${lastMapTag}" output="${cvsDiffFile}" />
+		<modifiedMaps mapDiffFile="${cvsDiffFile}" />
+	</target>
+
+	<target name="tagMapFiles" if="tagMaps">
+		<!-- Stores tag on the filesystem so map files can be compared -->
+		<echo file="${mapTag.properties}">
+		lastMapTag=r18_${buildId}
+		</echo>
+		<echo message="tagging org.eclipse.datatools.releng..."/>
+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.releng" command="tag r18_${buildId}" />
+		<echo message="tagging org.eclipse.datatools.connectivity.releng..."/>
+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.connectivity/releng/org.eclipse.datatools.connectivity.releng" command="tag r18_${buildId}" />
+		<echo message="tagging org.eclipse.datatools.enablement.releng..."/>
+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.enablement/releng/org.eclipse.datatools.enablement.releng" command="tag r18_${buildId}" />
+		<echo message="tagging org.eclipse.datatools.modelbase.releng..."/>
+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.modelbase/releng/org.eclipse.datatools.modelbase.releng" command="tag r18_${buildId}" />
+		<echo message="tagging org.eclipse.datatools.sqltools.releng..."/>
+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.sqltools/releng/org.eclipse.datatools.sqltools.releng" command="tag r18_${buildId}" />
+		<echo message="tagging org.eclipse.datatools.incubator.releng..."/>
+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.incubator/releng/org.eclipse.datatools.incubator.releng" command="tag r18_${buildId}" />
+	</target>
+	
+	<!-- ===================================================================== -->
+	<!-- Steps to do before setup -->
+	<!-- ===================================================================== -->
+	<target name="preSetup">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after setup but before starting the build proper -->
+	<!-- ===================================================================== -->
+	<target name="postSetup">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before fetching the build elements -->
+	<!-- ===================================================================== -->
+	<target name="preFetch">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the fetch -->
+	<!-- ===================================================================== -->
+	<target name="postFetch">
+                <replace dir="${buildDirectory}/plugins" value="1.7.2.${buildId}" token="@BUILD@">
+                        <include name="**/about.mappings" />
+                </replace>
+	</target>
+	
+	<!-- ===================================================================== -->
+	<!-- Steps to do before generating build scripts -->
+	<!-- ===================================================================== -->
+	<target name="preGenerate">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after generating the build scripts -->
+	<!-- ===================================================================== -->
+	<target name="postGenerate">
+		<antcall target="clean" />
+	</target>
+
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before assembling -->
+	<!-- ===================================================================== -->
+	<target name="preAssemble">
+	
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after assembling-->
+	<!-- ===================================================================== -->
+	<target name="postAssemble">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before running the build.xmls for the elements being built. -->
+	<!-- ===================================================================== -->
+	<target name="preProcess">
+		<replace dir="${buildDirectory}/plugins" value="${buildId}" token="@Replace_By_Date@">
+			<include name="**/about.mappings" />
+		</replace>
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after running the build.xmls for the elements being built. -->
+	<!-- ===================================================================== -->
+	<target name="postProcess">
+		<condition property="logsAvailable">
+			<istrue value="${javacVerbose}"/> 
+		</condition>
+		<antcall target="gatherLogs" />
+	</target>
+
+	<target name="prePackage" />
+	
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after everything is built and assembled -->
+	<!-- (e.g., testing, posting, emailing, ...) -->
+	<!-- ===================================================================== -->
+	<target name="postBuild">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Helper targets -->
+	<!-- ===================================================================== -->
+	<target name="gatherLogs" if="logsAvailable">
+		<mkdir dir="${postingDirectory}/${buildLabel}/compilelogs" />
+		<antcall target="allElements">
+			<param name="target" value="gatherLogs" />
+		</antcall>
+	
+                <unzip dest="${postingDirectory}/${buildLabel}/compilelogs" overwrite="true">
+                        <fileset dir="${buildDirectory}/features/org.eclipse.datatools.enablement.sdk.feature">
+                                <include name="*.log.zip" />
+                        </fileset>
+                </unzip>
+
+                <copy todir="${postingDirectory}/${buildLabel}/compilelogs" overwrite="true" failonerror="false">
+			<fileset dir="${buildDirectory}/features/org.eclipse.datatools.enablement.feature/feature.temp.folder"/>
+			<fileset dir="${buildDirectory}/features/org.eclipse.datatools.enablement.sybase.feature/feature.temp.folder"/>
+			<fileset dir="${buildDirectory}/features/org.eclipse.datatools.enablement.sap.feature/feature.temp.folder"/>
+			<fileset dir="${buildDirectory}/features/org.eclipse.datatools.enablement.postgresql.feature/feature.temp.folder"/>
+			<fileset dir="${buildDirectory}/features/org.eclipse.datatools.enablement.oracle.feature/feature.temp.folder"/>
+			<fileset dir="${buildDirectory}/features/org.eclipse.datatools.enablement.oda.feature/feature.temp.folder"/>
+			<fileset dir="${buildDirectory}/features/org.eclipse.datatools.enablement.oda.designer.feature/feature.temp.folder"/>
+			<fileset dir="${buildDirectory}/features/org.eclipse.datatools.enablement.mysql.feature/feature.temp.folder"/>
+			<fileset dir="${buildDirectory}/features/org.eclipse.datatools.enablement.msft.feature/feature.temp.folder"/>
+			<fileset dir="${buildDirectory}/features/org.eclipse.datatools.enablement.jdt.feature/feature.temp.folder"/>
+			<fileset dir="${buildDirectory}/features/org.eclipse.datatools.enablement.jdbc.feature/feature.temp.folder"/>
+			<fileset dir="${buildDirectory}/features/org.eclipse.datatools.enablement.ibm.feature/feature.temp.folder"/>
+			<fileset dir="${buildDirectory}/features/org.eclipse.datatools.enablement.hsqldb.feature/feature.temp.folder"/>
+			<fileset dir="${buildDirectory}/features/org.eclipse.datatools.enablement.apache.derby.feature/feature.temp.folder"/>
+                </copy>
+
+	</target>
+	
+	<target name="clean" unless="noclean">
+		<antcall target="allElements">
+			<param name="target" value="cleanElement" />
+		</antcall>
+	</target>
+	<!-- ===================================================================== -->
+	<!-- Default target                                                        -->
+	<!-- ===================================================================== -->
+	<target name="noDefault">
+		<echo message="You must specify a target when invoking this file" />
+	</target>
+
+</project>
diff --git a/plugins/org.eclipse.datatools.releng.builder/eclipse/buildConfigs/dtp.incubation.all/build.properties b/plugins/org.eclipse.datatools.releng.builder/eclipse/buildConfigs/dtp.incubation.all/build.properties
new file mode 100644
index 0000000..98538e0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/eclipse/buildConfigs/dtp.incubation.all/build.properties
@@ -0,0 +1,46 @@
+###############################################################################
+# Copyright (c) 2000, 2006 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+
+generateFeatureVersionSuffix=true
+baseLocation=/home/adb/farrah/baseLocation
+p4.home=/home/adb/farrah/P4
+buildDirectory=/home/adb/farrah/src
+outputUpdateJars=true
+individualSourceBundles=true
+
+runPackager=true
+mapVersionTag=HEAD
+bootclasspath=${java.home}/lib/rt.jar
+buildType=I
+buildId=build
+buildLabel=${buildType}.${buildId}
+timestamp=0000
+collPlace=eclipse
+collBase=.
+configs=*,*,*
+
+archivesFormat =*,*,*-zip
+
+javacFailOnError=false
+javacDebugInfo=on
+javacVerbose=true
+compileArg=-enableJavadoc
+
+zipargs=
+tarargs=--owner=0 --group=0 
+
+collectingFolder=eclipse
+archivePrefix=eclipse
+
+baseos=win32
+basews=win32
+basearch=x86
+
diff --git a/plugins/org.eclipse.datatools.releng.builder/eclipse/buildConfigs/dtp.incubation.all/customTargets.xml b/plugins/org.eclipse.datatools.releng.builder/eclipse/buildConfigs/dtp.incubation.all/customTargets.xml
new file mode 100644
index 0000000..c1e682b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/eclipse/buildConfigs/dtp.incubation.all/customTargets.xml
@@ -0,0 +1,214 @@
+<project name="Build specific targets and properties" default="noDefault" basedir=".">
+
+	<property name="postingDirectory" value="${buildDirectory}" />
+	<property name="package.version" value="1_7_0" />
+	<property name="archiveName" value="dtp-incubation-all-${package.version}.zip"/>
+
+	
+	<!-- ===================================================================== -->
+	<!-- Run a given ${target} on all elements being built -->
+	<!-- ===================================================================== -->
+	<target name="allElements">
+		<ant antfile="${genericTargets}" target="${target}" >
+			<property name="type" value="feature" />
+			<property name="id" value="org.eclipse.datatools.enablement.oda.ecore.sdk.feature" />
+		</ant>
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Targets to assemble the built elements for particular configurations  -->
+	<!-- These generally call the generated assemble scripts (named in -->
+	<!-- ${assembleScriptName}) but may also add pre and post processing -->
+	<!-- Add one target for each root element and each configuration -->
+	<!-- ===================================================================== -->
+	
+	<target name="assemble.org.eclipse.datatools.enablement.oda.ecore.sdk.feature">
+		<property name="archiveName" value="dtp-incubation-all-${package.version}.zip"/>
+		<antcall target="assemble" />
+	</target>
+
+
+	<target name="assemble">
+		<property name="archiveFullPath" value="${buildDirectory}/${buildLabel}/${archiveName}" />
+		<ant antfile="${assembleScriptName}" />
+	</target>
+	
+	<target name="postPackage">
+	</target>
+	<!-- ===================================================================== -->
+	<!-- Check out map files from correct repository -->
+	<!-- Replace values for cvsRoot, package and mapVersionTag as desired. -->
+	<!-- ===================================================================== -->
+	<target name="checkLocal">
+		<available property="mapsLocal" file="${buildDirectory}/maps/releng" />
+	</target>
+	
+	<target name="getMapFiles" depends="checkLocal" unless="mapsLocal">
+
+		<!-- ***  change the repo info -->
+		<property name="mapCvsRoot" value=":pserver:anonymous@dev.eclipse.org:/cvsroot/datatools" />
+		<property name="mapVersionTag" value="HEAD" />
+
+        <cvs cvsRoot="${mapCvsRoot}" 
+             package="org.eclipse.datatools.releng" dest="${buildDirectory}/maps" tag="${mapVersionTag}" />
+
+        <cvs cvsRoot="${mapCvsRoot}" 
+             package="org.eclipse.datatools.connectivity/releng/org.eclipse.datatools.connectivity.releng" 
+             dest="${buildDirectory}/maps" tag="${mapVersionTag}" />
+        <cvs cvsRoot="${mapCvsRoot}" 
+             package="org.eclipse.datatools.enablement/releng/org.eclipse.datatools.enablement.releng" 
+             dest="${buildDirectory}/maps" tag="${mapVersionTag}" />
+        <cvs cvsRoot="${mapCvsRoot}" 
+             package="org.eclipse.datatools.modelbase/releng/org.eclipse.datatools.modelbase.releng" 
+             dest="${buildDirectory}/maps" tag="${mapVersionTag}" />
+        <cvs cvsRoot="${mapCvsRoot}" 
+             package="org.eclipse.datatools.sqltools/releng/org.eclipse.datatools.sqltools.releng" 
+             dest="${buildDirectory}/maps" tag="${mapVersionTag}" />
+        <cvs cvsRoot="${mapCvsRoot}" 
+             package="org.eclipse.datatools.incubator/releng/org.eclipse.datatools.incubator.releng" 
+             dest="${buildDirectory}/maps" tag="${mapVersionTag}" />
+
+		<!--compare the map files project-->
+		<antcall target="compareMapFiles" />
+		<!--tag the map files project-->
+		<antcall target="tagMapFiles" />
+
+	</target>
+	<target name="compareMapFiles" if="compareMaps">
+		<property file="${mapTag.properties}"/>
+		<property name="cvsDiffFile" value="${buildDirectory}/cvsDiff.txt" />
+		<cvs cvsRoot="${mapCvsRoot}" dest="${buildDirectory}/maps" command="diff -w -r ${lastMapTag}" output="${cvsDiffFile}" />
+		<modifiedMaps mapDiffFile="${cvsDiffFile}" />
+	</target>
+
+	<target name="tagMapFiles" if="tagMaps">
+		<!-- Stores tag on the filesystem so map files can be compared -->
+		<echo file="${mapTag.properties}">
+		lastMapTag=r18_${buildId}
+		</echo>
+		<echo message="tagging org.eclipse.datatools.releng..."/>
+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.releng" command="tag r18_${buildId}" />
+		<echo message="tagging org.eclipse.datatools.connectivity.releng..."/>
+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.connectivity/releng/org.eclipse.datatools.connectivity.releng" command="tag r18_${buildId}" />
+		<echo message="tagging org.eclipse.datatools.enablement.releng..."/>
+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.enablement/releng/org.eclipse.datatools.enablement.releng" command="tag r18_${buildId}" />
+		<echo message="tagging org.eclipse.datatools.modelbase.releng..."/>
+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.modelbase/releng/org.eclipse.datatools.modelbase.releng" command="tag r18_${buildId}" />
+		<echo message="tagging org.eclipse.datatools.sqltools.releng..."/>
+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.sqltools/releng/org.eclipse.datatools.sqltools.releng" command="tag r18_${buildId}" />
+		<echo message="tagging org.eclipse.datatools.incubator.releng..."/>
+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.incubator/releng/org.eclipse.datatools.incubator.releng" command="tag r18_${buildId}" />
+	</target>
+	
+	<!-- ===================================================================== -->
+	<!-- Steps to do before setup -->
+	<!-- ===================================================================== -->
+	<target name="preSetup">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after setup but before starting the build proper -->
+	<!-- ===================================================================== -->
+	<target name="postSetup">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before fetching the build elements -->
+	<!-- ===================================================================== -->
+	<target name="preFetch">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the fetch -->
+	<!-- ===================================================================== -->
+	<target name="postFetch">
+                <replace dir="${buildDirectory}/plugins" value="1.7.1.${buildId}" token="@BUILD@">
+                        <include name="**/about.mappings" />
+                </replace>
+	</target>
+	
+	<!-- ===================================================================== -->
+	<!-- Steps to do before generating build scripts -->
+	<!-- ===================================================================== -->
+	<target name="preGenerate">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after generating the build scripts -->
+	<!-- ===================================================================== -->
+	<target name="postGenerate">
+		<antcall target="clean" />
+	</target>
+
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before assembling -->
+	<!-- ===================================================================== -->
+	<target name="preAssemble">
+	
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after assembling-->
+	<!-- ===================================================================== -->
+	<target name="postAssemble">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before running the build.xmls for the elements being built. -->
+	<!-- ===================================================================== -->
+	<target name="preProcess">
+		<replace dir="${buildDirectory}/plugins" value="${buildId}" token="@Replace_By_Date@">
+			<include name="**/about.mappings" />
+		</replace>
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after running the build.xmls for the elements being built. -->
+	<!-- ===================================================================== -->
+	<target name="postProcess">
+		<condition property="logsAvailable">
+			<istrue value="${javacVerbose}"/> 
+		</condition>
+		<antcall target="gatherLogs" />
+	</target>
+
+	<target name="prePackage" />
+	
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after everything is built and assembled -->
+	<!-- (e.g., testing, posting, emailing, ...) -->
+	<!-- ===================================================================== -->
+	<target name="postBuild">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Helper targets -->
+	<!-- ===================================================================== -->
+	<target name="gatherLogs" if="logsAvailable">
+		<mkdir dir="${postingDirectory}/${buildLabel}/compilelogs" />
+		<antcall target="allElements">
+			<param name="target" value="gatherLogs" />
+		</antcall>
+	
+        <unzip dest="${postingDirectory}/${buildLabel}/compilelogs" overwrite="true">
+        	<fileset dir="${buildDirectory}/features/org.eclipse.datatools.enablement.oda.ecore.sdk.feature">
+            	<include name="*.log.zip" />
+            </fileset>
+        </unzip>
+	</target>
+	
+	<target name="clean" unless="noclean">
+		<antcall target="allElements">
+			<param name="target" value="cleanElement" />
+		</antcall>
+	</target>
+	<!-- ===================================================================== -->
+	<!-- Default target                                                        -->
+	<!-- ===================================================================== -->
+	<target name="noDefault">
+		<echo message="You must specify a target when invoking this file" />
+	</target>
+
+</project>
diff --git a/plugins/org.eclipse.datatools.releng.builder/eclipse/buildConfigs/dtp.sdk.all/build.properties b/plugins/org.eclipse.datatools.releng.builder/eclipse/buildConfigs/dtp.sdk.all/build.properties
new file mode 100644
index 0000000..98538e0
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/eclipse/buildConfigs/dtp.sdk.all/build.properties
@@ -0,0 +1,46 @@
+###############################################################################
+# Copyright (c) 2000, 2006 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+
+generateFeatureVersionSuffix=true
+baseLocation=/home/adb/farrah/baseLocation
+p4.home=/home/adb/farrah/P4
+buildDirectory=/home/adb/farrah/src
+outputUpdateJars=true
+individualSourceBundles=true
+
+runPackager=true
+mapVersionTag=HEAD
+bootclasspath=${java.home}/lib/rt.jar
+buildType=I
+buildId=build
+buildLabel=${buildType}.${buildId}
+timestamp=0000
+collPlace=eclipse
+collBase=.
+configs=*,*,*
+
+archivesFormat =*,*,*-zip
+
+javacFailOnError=false
+javacDebugInfo=on
+javacVerbose=true
+compileArg=-enableJavadoc
+
+zipargs=
+tarargs=--owner=0 --group=0 
+
+collectingFolder=eclipse
+archivePrefix=eclipse
+
+baseos=win32
+basews=win32
+basearch=x86
+
diff --git a/plugins/org.eclipse.datatools.releng.builder/eclipse/buildConfigs/dtp.sdk.all/customTargets.xml b/plugins/org.eclipse.datatools.releng.builder/eclipse/buildConfigs/dtp.sdk.all/customTargets.xml
new file mode 100644
index 0000000..668e38e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/eclipse/buildConfigs/dtp.sdk.all/customTargets.xml
@@ -0,0 +1,251 @@
+<project name="Build specific targets and properties" default="noDefault" basedir=".">
+
+	<property name="postingDirectory" value="${buildDirectory}" />
+	<property name="package.version" value="1_6_0" />
+	<property name="archiveName" value="dtp-all-${package.version}.zip"/>
+
+	
+	<!-- ===================================================================== -->
+	<!-- Run a given ${target} on all elements being built -->
+	<!-- ===================================================================== -->
+	<target name="allElements">
+		<ant antfile="${genericTargets}" target="${target}" >
+			<property name="type" value="feature" />
+			<property name="id" value="org.eclipse.datatools.sdk-all.feature" />
+		</ant>
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Targets to assemble the built elements for particular configurations  -->
+	<!-- These generally call the generated assemble scripts (named in -->
+	<!-- ${assembleScriptName}) but may also add pre and post processing -->
+	<!-- Add one target for each root element and each configuration -->
+	<!-- ===================================================================== -->
+	
+	<target name="assemble.org.eclipse.datatools.sdk-all.feature">
+		<property name="archiveName" value="dtp-all-${package.version}.zip"/>
+		<antcall target="assemble" />
+	</target>
+
+
+	<target name="assemble">
+		<property name="archiveFullPath" value="${buildDirectory}/${buildLabel}/${archiveName}" />
+		<ant antfile="${assembleScriptName}" />
+	</target>
+	
+	<target name="postPackage">
+	</target>
+	<!-- ===================================================================== -->
+	<!-- Check out map files from correct repository -->
+	<!-- Replace values for cvsRoot, package and mapVersionTag as desired. -->
+	<!-- ===================================================================== -->
+	<target name="checkLocal">
+		<available property="mapsLocal" file="${buildDirectory}/maps/releng" />
+	</target>
+	
+	<target name="getMapFiles" depends="checkLocal" unless="mapsLocal">
+
+		<!-- ***  change the repo info -->
+		<property name="mapCvsRoot" value=":pserver:anonymous@dev.eclipse.org:/cvsroot/datatools" />
+		<property name="mapVersionTag" value="HEAD" />
+
+        <cvs cvsRoot="${mapCvsRoot}" 
+             package="org.eclipse.datatools.releng" dest="${buildDirectory}/maps" tag="${mapVersionTag}" />
+
+        <cvs cvsRoot="${mapCvsRoot}" 
+             package="org.eclipse.datatools.connectivity/releng/org.eclipse.datatools.connectivity.releng" 
+             dest="${buildDirectory}/maps" tag="${mapVersionTag}" />
+        <cvs cvsRoot="${mapCvsRoot}" 
+             package="org.eclipse.datatools.enablement/releng/org.eclipse.datatools.enablement.releng" 
+             dest="${buildDirectory}/maps" tag="${mapVersionTag}" />
+        <cvs cvsRoot="${mapCvsRoot}" 
+             package="org.eclipse.datatools.modelbase/releng/org.eclipse.datatools.modelbase.releng" 
+             dest="${buildDirectory}/maps" tag="${mapVersionTag}" />
+        <cvs cvsRoot="${mapCvsRoot}" 
+             package="org.eclipse.datatools.sqltools/releng/org.eclipse.datatools.sqltools.releng" 
+             dest="${buildDirectory}/maps" tag="${mapVersionTag}" />
+        <cvs cvsRoot="${mapCvsRoot}" 
+             package="org.eclipse.datatools.incubator/releng/org.eclipse.datatools.incubator.releng" 
+             dest="${buildDirectory}/maps" tag="${mapVersionTag}" />
+
+
+		<!--compare the map files project-->
+		<antcall target="compareMapFiles" />
+		<!--tag the map files project-->
+		<antcall target="tagMapFiles" />
+
+	</target>
+	<target name="compareMapFiles" if="compareMaps">
+		<property file="${mapTag.properties}"/>
+		<property name="cvsDiffFile" value="${buildDirectory}/cvsDiff.txt" />
+		<cvs cvsRoot="${mapCvsRoot}" dest="${buildDirectory}/maps" command="diff -w -r ${lastMapTag}" output="${cvsDiffFile}" />
+		<modifiedMaps mapDiffFile="${cvsDiffFile}" />
+	</target>
+
+	<target name="tagMapFiles" if="tagMaps">
+		<!-- Stores tag on the filesystem so map files can be compared -->
+		<echo file="${mapTag.properties}">
+		lastMapTag=r18_${buildId}
+		</echo>
+		<echo message="tagging org.eclipse.datatools.releng..."/>
+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.releng" command="tag r18_${buildId}" />
+		<echo message="tagging org.eclipse.datatools.connectivity.releng..."/>
+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.connectivity/releng/org.eclipse.datatools.connectivity.releng" command="tag r18_${buildId}" />
+		<echo message="tagging org.eclipse.datatools.enablement.releng..."/>
+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.enablement/releng/org.eclipse.datatools.enablement.releng" command="tag r18_${buildId}" />
+		<echo message="tagging org.eclipse.datatools.modelbase.releng..."/>
+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.modelbase/releng/org.eclipse.datatools.modelbase.releng" command="tag r18_${buildId}" />
+		<echo message="tagging org.eclipse.datatools.sqltools.releng..."/>
+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.sqltools/releng/org.eclipse.datatools.sqltools.releng" command="tag r18_${buildId}" />
+		<cvs dest="${buildDirectory}/maps/org.eclipse.datatools.incubator/releng/org.eclipse.datatools.incubator.releng" command="tag r18_${buildId}" />
+
+	</target>
+	
+	<!-- ===================================================================== -->
+	<!-- Steps to do before setup -->
+	<!-- ===================================================================== -->
+	<target name="preSetup">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after setup but before starting the build proper -->
+	<!-- ===================================================================== -->
+	<target name="postSetup">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before fetching the build elements -->
+	<!-- ===================================================================== -->
+	<target name="preFetch">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the fetch -->
+	<!-- ===================================================================== -->
+	<target name="postFetch">
+		<copy todir="${buildDirectory}/plugins">
+			<fileset dir="${buildDirectory}/../staticFiles" includes="*.jar"/>
+		</copy>
+                <replace dir="${buildDirectory}/plugins" value="1.7.2.${buildId}" token="@BUILD@">
+                        <include name="**/about.mappings" />
+                </replace>
+                <replace dir="${buildDirectory}/features" value="1.7.2.${buildId}" token="@BUILD@">
+                        <include name="**/about.mappings" />
+                </replace>
+                <replace dir="${buildDirectory}/features" value="1.7.2.${buildId}" token="@BUILD@">
+                        <include name="**/about.mappings" />
+                </replace>
+	</target>
+	
+	<!-- ===================================================================== -->
+	<!-- Steps to do before generating build scripts -->
+	<!-- ===================================================================== -->
+	<target name="preGenerate">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after generating the build scripts -->
+	<!-- ===================================================================== -->
+	<target name="postGenerate">
+		<antcall target="clean" />
+	</target>
+
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before assembling -->
+	<!-- ===================================================================== -->
+	<target name="preAssemble">
+	
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after assembling-->
+	<!-- ===================================================================== -->
+	<target name="postAssemble">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before running the build.xmls for the elements being built. -->
+	<!-- ===================================================================== -->
+	<target name="preProcess">
+		<replace dir="${buildDirectory}/plugins" value="${buildId}" token="@Replace_By_Date@">
+			<include name="**/about.mappings" />
+		</replace>
+		<!--
+		<replace dir="${buildDirectory}/plugins/" value="1.3.0.${buildId}" token="@Replace_By_Version@">
+			<include name="org.w3c.sac/about.properties" />
+		</replace>
+		<replace dir="${buildDirectory}/plugins/" value="1.6.7.${buildId}" token="@Replace_By_Version@">
+			<include name="org.mozilla.rhino/about.properties" />
+		</replace>
+		<replace dir="${buildDirectory}/plugins/" value="1.4.6.${buildId}" token="@Replace_By_Version@">
+			<include name="com.lowagie.itext/about.properties" />
+		</replace>
+		-->
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after running the build.xmls for the elements being built. -->
+	<!-- ===================================================================== -->
+	<target name="postProcess">
+		<condition property="logsAvailable">
+			<istrue value="${javacVerbose}"/> 
+		</condition>
+		<antcall target="gatherLogs" />
+	</target>
+
+	<target name="prePackage" />
+	
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after everything is built and assembled -->
+	<!-- (e.g., testing, posting, emailing, ...) -->
+	<!-- ===================================================================== -->
+	<target name="postBuild">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Helper targets -->
+	<!-- ===================================================================== -->
+	<target name="gatherLogs" if="logsAvailable">
+		<mkdir dir="${postingDirectory}/${buildLabel}/compilelogs" />
+		<antcall target="allElements">
+			<param name="target" value="gatherLogs" />
+		</antcall>
+
+                <unzip dest="${postingDirectory}/${buildLabel}/compilelogs" overwrite="true">
+                        <fileset dir="${buildDirectory}/features/org.eclipse.datatools.sdk-all.feature">
+                                <include name="*.log.zip" />
+                        </fileset>
+                </unzip>
+
+                <copy todir="${postingDirectory}/${buildLabel}/compilelogs" overwrite="true" failonerror="false">
+                        <fileset dir="${buildDirectory}/features/org.eclipse.datatools.sdk.feature/feature.temp.folder"/>
+			<fileset dir="${buildDirectory}/features/org.eclipse.datatools.sqldevtools.data.feature/feature.temp.folder"/>
+			<fileset dir="${buildDirectory}/features/org.eclipse.datatools.sqldevtools.ddl.feature/feature.temp.folder"/>
+			<fileset dir="${buildDirectory}/features/org.eclipse.datatools.sqldevtools.ddlgen.feature/feature.temp.folder"/>
+			<fileset dir="${buildDirectory}/features/org.eclipse.datatools.sqldevtools.feature/feature.temp.folder"/>
+			<fileset dir="${buildDirectory}/features/org.eclipse.datatools.sqldevtools.parsers.feature/feature.temp.folder"/>
+			<fileset dir="${buildDirectory}/features/org.eclipse.datatools.sqldevtools.results.feature/feature.temp.folder"/>
+			<fileset dir="${buildDirectory}/features/org.eclipse.datatools.modelbase.feature/feature.temp.folder"/>
+			<fileset dir="${buildDirectory}/features/org.eclipse.datatools.intro/feature.temp.folder"/>
+			<fileset dir="${buildDirectory}/features/org.eclipse.datatools.connectivity.oda.feature/feature.temp.folder"/>
+			<fileset dir="${buildDirectory}/features/org.eclipse.datatools.connectivity.oda.designer.feature/feature.temp.folder"/>
+			<fileset dir="${buildDirectory}/features/org.eclipse.datatools.connectivity.feature/feature.temp.folder"/>
+		</copy> 
+	
+	</target>
+	
+	<target name="clean" unless="noclean">
+		<antcall target="allElements">
+			<param name="target" value="cleanElement" />
+		</antcall>
+	</target>
+	<!-- ===================================================================== -->
+	<!-- Default target                                                        -->
+	<!-- ===================================================================== -->
+	<target name="noDefault">
+		<echo message="You must specify a target when invoking this file" />
+	</target>
+
+</project>
diff --git a/plugins/org.eclipse.datatools.releng.builder/eclipse/helper.xml b/plugins/org.eclipse.datatools.releng.builder/eclipse/helper.xml
new file mode 100644
index 0000000..2f06c1b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/eclipse/helper.xml
@@ -0,0 +1,919 @@
+<project name="Helper targets" default="noDefault" basedir="." >
+	<property name="postingDirectory" value="${buildDirectory}" />
+	<property name="publishingContent" value="${eclipse.build.configs}/../publishingFiles"/>
+
+	<!-- ===================================================================== -->
+	<!-- Set of helper targets for building the Eclipse SDK -->
+	<!-- ===================================================================== -->
+	<target name="discoverOS">
+		<condition property="onUnix">
+			<and>
+				<os family="unix" />
+			</and>
+		</condition>
+		<condition property="onWindows">
+			<and>
+				<os family="windows" />
+			</and>
+		</condition>
+	</target>
+
+	<target name="printWarnings" if="onWindows" depends="discoverOS">
+		<echo message="The UNIX versions of your build output will be invalid.  Windows will not preserve symbolic links and permissions on executable files." />
+	</target>
+
+	<target name="setLabels">
+		<!--required-->
+		<!-- setup the label.properties file packaged in the source builds. -->
+		<!--Set this property to empty string-->
+		<property name="buildType" value="" />
+		<tstamp>
+			<format property="TODAY" pattern="MMMM d, yyyy" />
+			<format property="TSTAMP" pattern="HHmm" />
+		</tstamp>
+		<copy file="label.properties.template" tofile="${buildDirectory}/label.properties" overwrite="true" />
+		<replace file="${buildDirectory}/label.properties" token="@builddate@" value="${TODAY}" />
+		<replace file="${buildDirectory}/label.properties" token="@buildtype@" value="${buildType}" />
+		<replace file="${buildDirectory}/label.properties" token="@ds@" value="${timestamp}" />
+		<replace file="${buildDirectory}/label.properties" token="@buildid@" value="${buildId}" />
+	</target>
+
+	<target name="generateChecksum" unless="skipChecksum">
+		<checksum file="${archiveFullPath}" property="md5" />
+		<echo message="${md5} *${downloadFile}" file="${postingDirectory}/${buildLabel}/checksum/${downloadFile}.md5" />
+	</target>
+
+	<target name="publish" description="Preparing to post the build...">
+		<!--post clickThroughs-->
+		<copy todir="${postingDirectory}/${buildLabel}">
+			<fileset dir="${buildDirectory}/maps/org.eclipse.releng" includes="clickThroughs/" />
+		</copy>
+
+		<!--post directory.txt-->
+		<copy file="${buildDirectory}/directory.txt" todir="${postingDirectory}/${buildLabel}" />
+
+		<!--post instructions on automated testing-->
+		<copy file="${eclipse.build.configs}/sdk.tests/testScripts/readme.html" tofile="${postingDirectory}/${buildLabel}/automatedtesting.html" />
+		<copy file="${buildDirectory}/plugins/org.eclipse.test/testframework.html" tofile="${postingDirectory}/${buildLabel}/testframework.html" />
+
+		<antcall target="generateEclipseIndex" />
+
+		<!--get static files required in the buildLabel directory-->
+		<copy todir="${postingDirectory}/${buildLabel}">
+			<fileset dir="${publishingContent}/staticDropFiles" />
+		</copy>
+
+		<!--copy buildnotes from plugin directories-->
+		<mkdir dir="${postingDirectory}/${buildLabel}/buildnotes" />
+		<copy todir="${postingDirectory}/${buildLabel}/buildnotes" flatten="true">
+			<fileset dir="${buildDirectory}/plugins" includes="**/buildnotes_*.html,**/buildnotes_*.htm,**/jdt_core_style.css" />
+		</copy>
+
+		<!--copy javadoc logs-->
+		<copy file="${buildDirectory}/plugins/org.eclipse.platform.doc.isv/doc.bin.log" tofile="${postingDirectory}/${buildLabel}/compilelogs/platform.doc.isv.javadoc.txt" failonerror="false" />
+		<copy file="${buildDirectory}/plugins/org.eclipse.jdt.doc.isv/doc.bin.log" tofile="${postingDirectory}/${buildLabel}/compilelogs/jdt.doc.isv.javadoc.txt" failonerror="false" />
+		<copy file="${buildDirectory}/plugins/org.eclipse.jdt.doc.isv/jdtapt.doc.bin.log" tofile="${postingDirectory}/${buildLabel}/compilelogs/jdt.apt.javadoc.txt" failonerror="false" />
+		<copy file="${buildDirectory}/plugins/org.eclipse.pde.doc.user/doc.bin.log" tofile="${postingDirectory}/${buildLabel}/compilelogs/pde.doc.user.javadoc.txt" failonerror="false" />
+		<copy file="${buildDirectory}/plugins/org.eclipse.platform.doc.isv/platformconvert.txt" tofile="${postingDirectory}/${buildLabel}/compilelogs/platform.doc.isv.schema.txt" failonerror="false" />
+		<copy file="${buildDirectory}/plugins/org.eclipse.jdt.doc.isv/jdtconvert.txt" tofile="${postingDirectory}/${buildLabel}/compilelogs/jdt.doc.isv.schema.txt" failonerror="false" />
+		<copy file="${buildDirectory}/plugins/org.eclipse.pde.doc.user/pdeconvert.txt" tofile="${postingDirectory}/${buildLabel}/compilelogs/pde.doc.user.schema.txt" failonerror="false" />
+
+	</target>
+
+
+	<!-- ===================================================================== -->
+	<!-- Target used to test the build                                         -->
+	<!-- ===================================================================== -->
+	<target name="testAll" unless="skip.tests">
+		<waitfor maxwait="4" maxwaitunit="hour" checkevery="1" checkeveryunit="minute">
+			<and>
+				<available file="${postingDirectory}/${buildLabel}/checksum/eclipse-Automated-Tests-${buildId}.zip.md5"/>
+				<available file="${postingDirectory}/${buildLabel}/checksum/eclipse-SDK-${buildId}-win32.zip.md5"/>
+				<available file="${postingDirectory}/${buildLabel}/checksum/eclipse-SDK-${buildId}-linux-gtk.tar.gz.md5"/>
+				<available file="${postingDirectory}/${buildLabel}/checksum/eclipse-SDK-${buildId}-macosx-carbon.tar.gz.md5"/>
+			</and>
+		</waitfor>
+
+		<property name="cvstest.properties" value="${base.builder}/../eclipseInternalBuildTools/cvstest.properties" />
+		<antcall target="configure.team.cvs.test"/>
+
+		<!--replace buildid in vm.properties for JVM location settings-->
+		<replace dir="${eclipse.build.configs}/sdk.tests/testConfigs"
+			token="@buildid@"
+			value="${buildId}"
+			includes="**/vm.properties"/>
+
+		<parallel>
+			<antcall target="test-JUnit" />
+			<antcall target="test-performance" />
+		</parallel>
+	</target>
+
+	<target name="test-JUnit">
+		<echo message="Starting tests." />
+		<property name="dropLocation" value="${postingDirectory}" />
+		<ant antfile="testAll.xml" dir="${eclipse.build.configs}/sdk.tests/testConfigs" />
+
+		<antcall target="generateEclipseIndex" />
+
+		<!--copy the test results and new index page to the posting location-->
+		<copy todir="${postingDirectory}/${buildLabel}" overwrite="true">
+			<fileset dir="${buildDirectory}/${buildLabel}" includes="testresults/**,*.php" />
+		</copy>
+		<replace file="${postingDirectory}/${buildLabel}/testResults.php" token="@build@" value="${buildId}" />
+
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Target used to test the build                                         -->
+	<!-- ===================================================================== -->
+	<target name="test-performance" unless="skip.performance.tests">
+		<echo message="Starting performance tests." />
+		<property name="dropLocation" value="${postingDirectory}" />
+		<ant antfile="testAll.xml" dir="${eclipse.build.configs}/sdk.tests/testConfigs" target="performanceTests" />
+		<antcall target="generatePerformanceResults" />
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Target used to test the build for internal references                 -->
+	<!-- ===================================================================== -->
+	<target name="test-internalReferences">
+		<waitfor maxwait="4" maxwaitunit="hour" checkevery="1" checkeveryunit="minute">
+			<available file="${postingDirectory}/${buildLabel}/checksum/eclipse-SDK-${buildId}-win32.zip.md5"/>
+		</waitfor>
+
+		<property name="apiscanner" value="${eclipse.build.configs}/sdk/tools/apiscanner" />
+		<property name="workingDir" value="${buildDirectory}/internalReference" />
+		<mkdir dir="${workingDir}" />
+		<unzip src="${postingDirectory}/${buildLabel}/eclipse-SDK-${buildId}-win32.zip" dest="${workingDir}" />
+
+		<java classname="org.eclipse.wtp.releng.tools.component.violation.ComponentViolationEmitter" fork="true" dir="${apiscanner}">
+			<arg line="
+         	-eclipseDir ${workingDir}/eclipse
+         	-compXMLDir ${buildDirectory}/plugins
+         	-compRefDir component-ref
+         	-compVioDir ${postingDirectory}/${buildLabel}/internalReference
+         	-xsl xsl/component-violation.xsl
+         	-summaryXSL xsl/component-violation-summary.xsl" />
+			<classpath>
+				<fileset dir="${apiscanner}/lib" />
+			</classpath>
+		</java>
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Helper targets                                                        -->
+	<!-- ===================================================================== -->
+
+
+	<target name="configure.team.cvs.test" unless="test.xml.tmp" if="cvstest.properties">
+		<copy file="${eclipse.build.configs}/sdk.tests/testScripts/test.xml" tofile="${eclipse.build.configs}/sdk.tests/testScripts/test.xml.tmp" />
+		<replace file="${eclipse.build.configs}/sdk.tests/testScripts/test.xml" propertyFile="${cvstest.properties}">
+			<replacefilter token="${cvs_user}" property="cvs_user" />
+			<replacefilter token="${cvs_password}" property="cvs_password" />
+			<replacefilter token="${cvs_host}" property="cvs_host" />
+			<replacefilter token="${cvs_root}" property="cvs_root" />
+		</replace>
+		<delete file="${eclipse.build.configs}/sdk.tests/testScripts/test.xml.tmp" />
+	</target>
+
+
+
+	<target name="generatePerformanceResults">
+		<mkdir dir="${buildDirectory}/${buildLabel}/performance" />
+		<mkdir dir="${postingDirectory}/${buildLabel}/performance" />
+		<taskdef name="performanceResults" classname="org.eclipse.releng.performance.PerformanceResultHtmlGenerator" />
+		<condition property="configArgs" value="-ws gtk -arch ppc">
+			<not>
+				<equals arg1="{os.arch}" arg2="i386" />
+			</not>
+		</condition>
+		<property name="configArgs" value="" />
+
+		<java jar="${basedir}/../org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.jar" fork="true" maxmemory="256m">
+			<arg line="${configArgs} -application org.eclipse.test.performance.ui.resultGenerator
+					-baseline ${eclipse.perf.ref}
+					-baseline.prefix 3.2_200606291905
+					-current ${buildId}
+					-jvm ${eclipse.perf.jvm}
+					-output ${postingDirectory}/${buildLabel}/performance/
+					-config eclipseperfwin1_R3.3,eclipseperflnx1_R3.3,eclipseperfwin2_R3.3,eclipseperflnx2_R3.3,eclipseperflnx3_R3.3
+					-config.properties ${eclipse.perf.config.descriptors}
+					-scenario.pattern org.eclipse.%.test"
+				/>
+			<!-- add this argument to list above when there are milestone builds to highlight 
+			-highlight.latest 3.3M1_
+			-->
+			<env key="LD_LIBRARY_PATH" value="${basedir}/../org.eclipse.releng.basebuilder" />
+			<sysproperty key="eclipse.perf.dbloc" value="${dbloc}" />
+		</java>
+
+		<performanceResults
+			xmlDirectoryName="${postingDirectory}/${buildLabel}/performance/xml"
+			dropDirectoryName="${postingDirectory}/${buildLabel}"
+			testResultsTemplateFileName="${publishingContent}/templateFiles/performance.php.template"
+			testResultsHtmlFileName="performance/performance.php"
+			hrefTestResultsTargetPath="html"
+			testManifestFileName="${publishingContent}/performanceTestManifest.xml" 
+		/>
+
+		<replace file="${postingDirectory}/${buildLabel}/performance/performance.php" token="@buildType@" value="${buildType}" />
+	</target>
+
+	<target name="verifyCompile" if="eclipse.running">
+
+		<echo message="Checking for compile errors..." />
+		<echo message="Log file directory: ${postingDirectory}/${buildId}/compilelogs" />
+
+		<!--create html output for compile logs-->
+		<echo message="${postingDirectory}/${buildId}/compilelogs/plugins"/>
+		<eclipse.convert input="${postingDirectory}/${buildId}/compilelogs/plugins" validation="true"/>
+
+		<!-- Sends email to recipient list in monitor.properties with compile logs attached if errors found-->
+		<!-- The shell scripts will gather compile error plugin list into monitor.properties -->
+		<!--
+		<echo message="${eclipse.build.configs}/../../extras/verifyCompile.sh"/>
+		<exec executable="${eclipse.build.configs}/../../extras/verifyCompile.sh">
+			<arg value="${postingDirectory}/${buildId}/compilelogs"/>
+		</exec>
+		-->
+		<echo message="start check compile error"/>
+		<antcall target="verifyCompileUtil"/>
+		<antcall target="checkCompileError"/>
+	</target>
+	
+	<target name="checkUtilExists">
+		<available file="${eclipse.build.configs}/../../extras/org.eclipse.birt.build_2.2.0.jar" 
+			property="isFileAvail"/>
+	</target>
+	  
+
+	<target name="verifyCompileUtil" depends="checkUtilExists" if="isFileAvail">
+		<path id="customjar.classpath">
+			<fileset dir="${eclipse.build.configs}/../../extras/">
+				<include name="*.jar"/>
+			</fileset>
+			<fileset dir="${buildDirectory}/plugins">
+				<include name="org.apache.xerces_*.jar"/>
+			</fileset>
+		</path>
+		
+		<!-- Using custom build tools to get failure/error summary of test result -->
+		<java classname="org.eclipse.birt.build.VerifyCompileUtils" output="${eclipse.build.configs}/../../verifyCompile.log">
+			<classpath refid="customjar.classpath" />
+			<arg value="${postingDirectory}/${buildId}/compilelogs/plugins" />
+			<arg value="${eclipse.build.configs}/../../monitor.properties" />
+		</java>
+		
+	</target>
+				
+	<target name="rSyncWithSnzZrh" unless="test">
+		<waitfor maxwait="300" maxwaitunit="minute" checkevery="1" checkeveryunit="minute">
+			<available file="${postingDirectory}/${buildId}/eclipse-Automated-Tests-${buildId}.zip" />
+		</waitfor>
+		<antcall target="zrhBuilds" />
+		<antcall target="snzBuilds" />
+	</target>
+
+	<target name="snzBuilds">
+		<!--copy drops to local directory for rsync with snz-->
+		<copy todir="/builds/transfer/files/snz">
+			<fileset dir="${postingDirectory}" includes ="${buildId}/eclipse-SDK-*-win32.zip,${buildId}/eclipse-SDK-*-linux-gtk.tar.gz" excludes="${buildId}/eclipse-SDK-examples-*-win32.zip" />
+		</copy>
+	</target>
+
+	<target name="zrhBuilds">
+		<!--copy drops to local directory for rsync with zrh-->
+		<copy todir="/builds/transfer/files/zrh">
+			<fileset dir="${postingDirectory}" includes ="${buildId}/eclipse-SDK-*-macosx-carbon.tar.gz,${buildId}/eclipse-SDK-*-win32.zip,${buildId}/eclipse-SDK-*-linux-*.tar.gz" excludes="${buildId}/eclipse-SDK-examples-*-win32.zip,${buildId}/eclipse-SDK-*-linux-gtk-x86_64.tar.gz,${buildId}/eclipse-SDK-*-linux-gtk-ppc.tar.gz" />
+		</copy>
+	</target>
+	<!-- ===================================================================== -->
+	<!-- Default target                                                        -->
+	<!-- ===================================================================== -->
+	<target name="noDefault">
+		<echo message="You must specify a target when invoking this file" />
+	</target>
+
+	<target name="buildUpdateJars">
+		<property name="updateJarWorkingDir" value="${buildDirectory}/updateJars" />
+		<mkdir dir="${updateJarWorkingDir}" />
+		<mkdir dir="${updateJarWorkingDir}/site" />
+
+		<!--eclipse-master-${buildId}.bak.zip contains the signed update jars. eclipse-master-${buildId}.zip contains the
+		features and plug-ins unpacked.  Need features in directory structures for tool to work. -->
+
+		<unzip src="${buildDirectory}/${buildId}/birt-report-framework-sdk-${package.version}.zip" dest="${updateJarWorkingDir}" />
+
+		<!--operation on creates update jars for features and for plug-ins which are to be unpacked when installed-->
+		<java classname="org.eclipse.releng.generators.UpdateBuilder" >
+			<arg line="-root ${updateJarWorkingDir}/eclipse -directory ${buildDirectory}/directory.txt -build ${buildId} -site ${updateJarWorkingDir}/site -sitexml ${updateSite}/site.xml" />
+			<classpath>
+				<pathelement location="${base.builder}/plugins/org.eclipse.internal.build.tools/internalTools.jar"/>
+				<pathelement location="${base.builder}/plugins/org.eclipse.build.tools/buildTools.jar"/>
+				<pathelement location="${base.builder}/plugins/org.eclipse.osgi_3.2.0.v20060601.jar"/>
+			</classpath>
+		</java>
+		
+		<!--store previous site.xml-->
+		<move file="${updateSite}/site.xml" tofile="${updateSite}/site.xml.bak" overwrite="true" />
+		<!--copy site.xml to update site-->
+		<copy todir="${updateSite}" overwrite="true">
+			<fileset dir="${updateJarWorkingDir}/site" includes="site.xml" />
+		</copy>
+		
+		<mkdir dir="${updateSite}/features" />
+		<mkdir dir="${updateSite}/plugins" />
+
+		<!--use original signed update jars-->
+		<!-- back up 
+		<exec executable="unzip" dir=".">
+			<arg line="-j ${buildDirectory}/${buildId}/birt-report-framework-sdk-${package.version}.bak.zip -i */features/* -x */master-equinox* */com.ibm.icu.base* -d ${updateSite}/features" />
+		</exec>
+		-->
+		<exec executable="unzip" dir=".">
+			<arg line="-j ${buildDirectory}/${buildId}/birt-report-framework-sdk-${package.version}.bak.zip -i */features/* -d ${updateSite}/features" />
+		</exec>
+	    <java jar="${eclipse.home}/startup.jar"
+	           fork="true"
+     	       jvm="${java15-home}/bin/java"
+	           failonerror="true"
+	           maxmemory="128m"
+			   dir="${buildDirectory}">
+	         <arg line="-application org.eclipse.update.core.siteOptimizer"/>
+	         <arg line="-digestBuilder -digestOutputDir=${updateSite} -siteXML=${updateSite}/site.xml"/>
+	       </java>
+	</target>
+
+	<target name="cleanSites">
+		<cleanSite ageInMinutes="1440" directoryName="/builds/transfer/files/master/downloads/drops" realDelete="true" />
+		<cleanSite ageInMinutes="1440" directoryName="/builds/transfer/files/master/equinox/drops/" realDelete="true" />
+		<cleanSite ageInMinutes="1440" directoryName="/builds/transfer/files/bogus/downloads/drops" realDelete="true" />
+		<cleanSite ageInMinutes="1440" directoryName="/builds/transfer/files/zrh" realDelete="true" />
+		<cleanSite ageInMinutes="1440" directoryName="/builds/transfer/files/snz" realDelete="true" />
+	</target>
+
+	<target name="CheckoutFromP4" depends="init">
+
+		<!-- check out org.eclipse.releng     -->
+		<!-- check out version control files  -->
+
+		<property file="${eclipse.build.configs}/../../config.properties"/>
+
+		<echo message="p4.workspace=${p4.workspace}"/>
+		<echo message="p4.home=${p4.home}"/>
+		<echo message="p4.client=${p4.client}"/>
+
+
+        <delete dir="${p4.workspace}/Development/JRP/Dev/build" failonerror="false" />
+        <mkdir dir="${p4.workspace}/Development/JRP/Dev/build" />
+
+        <delete dir="${p4.home}/CvsDiff" failonerror="false"/>
+		<delete dir="${p4.home}/reportTestsLib" failonerror="false"/>
+
+		<!-- checkout the package to checkout.dir -->
+        <echo message="checking out daily build scripts" />
+
+        <!-- //${p4.client}/Development/JRP/Dev/build/sampleReports/... 
+        //${p4.client}/Development/JRP/Dev/build/cvsDiff/... 
+        -->
+        <p4sync view="//${p4.client}/Development/JRP/Dev/build/script/... 
+                      //${p4.client}/Development/JRP/Dev/build/lib/... 
+     		  //${p4.client}/Development/JRP/Dev/build/AutomationLib/...
+	          //${p4.client}/Development/JRP/Dev/birt/org.eclipse.birt.report.data.oda.jdbc/jdbc-drivers/..." 
+                    port="${p4.port}" 
+                    user="${p4.user}" 
+                    globalopts="-P ${p4.passwd}" 
+                    failonerror="true" 
+                    force="true" />
+
+        <copy todir="${p4.home}/reportTestsLib"  overwrite="true" failonerror="true">
+                <fileset dir="${p4.workspace}/Development/JRP/Dev/build/AutomationLib"/>
+        </copy>
+        <copy todir="${p4.home}/drivers"  overwrite="true" failonerror="true">
+                <fileset dir="${p4.workspace}/Development/JRP/Dev/birt/org.eclipse.birt.report.data.oda.jdbc/jdbc-drivers"/>
+        </copy>
+		<!--
+        <copy todir="${p4.home}/CvsDiff"  overwrite="true" failonerror="true">
+                <fileset dir="${p4.workspace}/Development/JRP/Dev/build/cvsDiff"/>
+        </copy>
+        -->
+		<copy todir="${p4.home}/../PackageFiles/template" overwrite="true" failonerror="true">
+			<fileset dir="${p4.workspace}/Development/JRP/Dev/build/script/template">
+				<include name="**"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="backupSrc">
+	</target>
+
+	<target name="cleanBuild">
+
+		<echo message="clean up last input under ${buildDirectory} ..." />
+		<delete failonerror="false" includeemptydirs="true">
+			<fileset dir="${buildDirectory}">	
+				<include name="*.properties"/>
+				<include name="*.txt"/>
+				<include name="*.xml"/>
+				<include name="plugins/**"/>
+				<include name="features/**"/>
+				<include name="maps/source"/>
+			</fileset>
+		</delete>
+		<delete failonerror="false" includeemptydirs="true">
+			<fileset dir="${p4.home}">	
+				<include name="source/**"/>
+				<include name="CvsResult/*.xml"/>
+				<include name="CvsResult/DaysInPast/*.xml"/>
+			</fileset>
+		</delete>
+	</target> 
+	<target name="init">
+		<echo message="loading ${eclipse.build.configs}/../../build.properties ..."/>
+		<property file="${eclipse.build.configs}/../../build.properties"/>
+	</target>
+
+	<target name="getDTPDownloads" depends="init">
+
+		<tstamp prefix="timestamp">
+			<format property="TODAY_US" pattern="MMddyy" timezone="GMT-16"/>
+			<format property="TODAY_SH" pattern="MMddyy" />
+		</tstamp>
+
+		<property name="plugin-dest" value="${baseLocation}"/>
+		<property name="package-dest" value="${baseLocation}/../PackageFiles"/>
+		<property name="AllInOne-dest" value="${baseLocation}/../PackageFiles/AllInOne"/>
+		<property name="AllInOne-Linux-dest" value="${baseLocation}/../PackageFiles/AllInOne-Linux"/>
+		<property name="file-version" value="${file-prefix}${timestamp.TODAY_US}"/>
+
+		<get src="http://download.eclipse.org/datatools/downloads/drops/N_DTP_1.6/${file-version}.zip"  dest="${postingDirectory}/../platform/DTP/${file-version}.zip" verbose="true" usetimestamp="true" />
+
+		<echo message="START to Unzip the downloaded Plugins files" />
+		<unzip src="${postingDirectory}/../platform/DTP/${file-version}.zip" dest="${p4.home}/downloads/${file-version}"/>
+		
+		<echo message="Clean last download stuff" />
+		<delete includeemptydirs="true" failonerror="false">
+			<fileset dir="${plugin-dest}/plugins" >
+				<include name="*.datatools.*.jar" />
+				<include name="org.eclipse.datatools.*/**" />
+			        <include name="org.apache.xerces_*.jar"/>
+			        <include name="org.apache.xml.resolver_*.jar"/>
+			        <include name="javax.wsdl_*.jar"/>
+			</fileset>
+			<fileset dir="${plugin-dest}/features" >
+				<include name="org.eclipse.datatools.*/**" />
+			</fileset>
+			<fileset dir="${package-dest}/dtp/eclipse/plugins" >
+				<include name="*.datatools.*.jar" />
+				<include name="org.eclipse.datatools.*/**" />
+			        <include name="org.apache.xerces_*.jar"/>
+			        <include name="org.apache.xml.resolver_*.jar"/>
+			        <include name="javax.wsdl_*.jar"/>
+			</fileset>
+			<fileset dir="${package-dest}/dtp/eclipse/features" >
+				<include name="org.eclipse.datatools.*/**" />
+			</fileset>
+			<!-- =============================
+			<fileset dir="${AllInOne-dest}/eclipse/plugins" >
+				<include name="*.datatools.*.jar" />
+				<include name="org.eclipse.datatools.*/**" />
+			        <include name="org.apache.xerces_*.jar"/>
+			        <include name="org.apache.xml.resolver_*.jar"/>
+			        <include name="javax.wsdl_*.jar"/>
+			</fileset>
+			<fileset dir="${AllInOne-dest}/eclipse/features" >
+				<include name="org.eclipse.datatools.*/**" />
+			</fileset>
+			<fileset dir="${AllInOne-Linux-dest}/eclipse/plugins" >
+				<include name="*.datatools.*.jar" />
+				<include name="org.eclipse.datatools.*/**" />
+			        <include name="org.apache.xerces_*.jar"/>
+			        <include name="org.apache.xml.resolver_*.jar"/>
+			        <include name="javax.wsdl_*.jar"/>
+			</fileset>
+			<fileset dir="${AllInOne-Linux-dest}/eclipse/features" >
+				<include name="org.eclipse.datatools.*/**" />
+			</fileset>
+				====================================== -->
+		</delete>
+
+		<!--Define the ODA dependency plugins-->
+		<patternset id="oda.runtime.plugins">
+			<include name="org.eclipse.datatools.connectivity_*.jar" />
+			<include name="org.eclipse.datatools.connectivity.ui_*.jar" />
+			<include name="org.eclipse.datatools.connectivity.ui.dse_*.jar" />
+			<include name="org.eclipse.datatools.doc.user_*/**"/>
+			<include name="org.eclipse.datatools.connectivity.oda.consumer_*.jar" />
+			<include name="org.eclipse.datatools.connectivity.oda.design.ui_*.jar" />
+			<include name="org.eclipse.datatools.connectivity.oda.design_*.jar" />
+			<include name="org.eclipse.datatools.connectivity.oda.flatfile.ui_*.jar" />
+			<include name="org.eclipse.datatools.connectivity.oda.flatfile_*.jar" />
+			<include name="org.eclipse.datatools.connectivity.oda.profile_*.jar" />
+			<include name="org.eclipse.datatools.connectivity.oda_*.jar" />
+			<include name="org.eclipse.datatools.connectivity.oda.designer.finfo_*.jar"/>
+			<include name="org.eclipse.datatools.connectivity.oda.finfo_*.jar"/>
+			<include name="org.eclipse.datatools.connectivity.oda.template.ui_*.jar"/>
+			<include name="org.eclipse.datatools.enablement.oda.xml_*.jar"/>
+			<include name="org.eclipse.datatools.enablement.oda.xml.ui_*.jar"/>
+			<include name="org.eclipse.datatools.enablement.oda.designer.finfo_*.jar"/>
+			<include name="org.eclipse.datatools.enablement.oda.finfo_*.jar"/>
+			<include name="org.eclipse.datatools.oda.cshelp_*.jar"/>
+			<include name="org.eclipse.datatools.enablement.oda.ws.ui_*.jar"/>
+			<include name="org.eclipse.datatools.enablement.oda.ws_*.jar"/>
+			<include name="org.eclipse.datatools.help_*.jar"/>
+			<include name="org.eclipse.datatools.doc.isv_*.jar"/>
+			<include name="org.apache.xerces_*.jar"/>
+			<include name="org.apache.xml.resolver_*.jar"/>
+			<include name="javax.wsdl_*.jar"/>
+		</patternset>
+		<patternset id="oda.runtime.features">
+			<include name="org.eclipse.datatools.connectivity.oda.designer.feature_*/**" />
+			<include name="org.eclipse.datatools.connectivity.oda.feature_*/**" />
+    		<include name="org.eclipse.datatools.enablement.oda.feature_*/**" />
+    		<include name="org.eclipse.datatools.enablement.oda.designer.feature_*/**" />
+			<include name="org.eclipse.datatools.doc.user_*/**"/>
+		</patternset>
+
+
+		<!-- Copy to static baseLocation -->
+		<copy todir="${plugin-dest}/plugins" failonerror="false" >
+			<fileset dir="${p4.home}/downloads/${file-version}/eclipse/plugins">
+				<patternset refid="oda.runtime.plugins" />
+			</fileset> 
+		</copy>	
+		<copy todir="${plugin-dest}/features" failonerror="false" >
+			<fileset dir="${p4.home}/downloads/${file-version}/eclipse/features">
+				<patternset refid="oda.runtime.features" />
+			</fileset> 
+		</copy>
+
+		<!-- Copy to package files dir -->	
+		<copy todir="${package-dest}/dtp/eclipse/plugins" failonerror="false">
+			<fileset dir="${p4.home}/downloads/${file-version}/eclipse/plugins">
+				<patternset refid="oda.runtime.plugins" />
+			</fileset>
+		</copy>
+				
+		<copy todir="${package-dest}/dtp/eclipse/features" failonerror="false" >
+			<fileset dir="${p4.home}/downloads/${file-version}/eclipse/features">
+				<patternset refid="oda.runtime.features" />
+			</fileset> 
+		</copy>
+	</target>
+	
+	<!-- Build BIRT Web Viewer -->
+	<target name="BuildWebViewer" depends="init">
+		<mkdir dir="${buildDirectory}/${buildId}/birt_web"/>
+		<ant antfile="WebViewerPackager.xml" dir="${buildDirectory}/plugins/org.eclipse.birt.report.viewer" target="Jar">
+			<property name="integrate.dir" value="${buildDirectory}/${buildId}/eclipse"/>
+			<property name="baseLocation.emf" value="${baseLocation.emf}"/>
+		</ant>
+		<ant antfile="WebViewerPackager.xml" dir="${buildDirectory}/plugins/org.eclipse.birt.report.viewer" target="Export">
+			<property name="export.dir" value="${buildDirectory}/${buildId}/birt_web"/>
+		</ant>
+		<!-- copy extra chartengine and emf -->
+		<!--
+		<copy todir="${buildDirectory}/${buildId}/birt_web/org.eclipse.birt.report.viewer/birt_web/WEB-INF/platform/lib">
+			<fileset dir="${baseLocation}/plugins/">
+				<include name="org.eclipse.emf.common_*.jar" />
+				<include name="org.eclipse.emf.ecore.xmi_*.jar" />
+				<include name="org.eclipse.emf.ecore_*.jar" />
+			</fileset>
+		</copy>
+		<copy todir="${buildDirectory}/${buildId}/birt_web/org.eclipse.birt.report.viewer/birt_web/WEB-INF/platform/lib">
+			<fileset dir="${buildDirectory}/${buildId}/eclipse/plugins" />
+			<mapper type="regexp"  from="org.eclipse.birt.chart.engine_.*.jar" to="chartengineapi.jar"/>
+		</copy>
+		-->
+		<copy todir="${buildDirectory}/${buildId}/birt_web/org.eclipse.birt.report.viewer/birt_web/WEB-INF/lib">
+			<fileset dir="${buildDirectory}/${buildId}/eclipse/plugins" >
+				<include name="org.eclipse.birt.chart.engine_.*.jar"/>
+			</fileset>
+                        <mapper type="regexp"  from="org.eclipse.birt.chart.engine_.*.jar" to="chartengineapi.jar"/>
+		</copy>
+	</target>
+	
+	<target name="runBirtPerformance" depends="init">
+		<ant dir="${runner.dir}" antfile="testRunner.xml" target="org.eclipse.birt.test.performance"/>
+		<!-- copy performance result to public test result dir -->
+		<property file="${buildDirectory}/finalPluginsVersions.properties"/>
+		<copy todir="${test.dir}/unitTestReport/html">
+			<fileset dir="${test.dir}/eclipse/plugins/org.eclipse.birt.test.performance_${org.eclipse.birt.test.performance}">
+				<include name="reporting_*.xml"/>
+			</fileset>
+		</copy>
+	</target>
+	
+	<target name="runBirtTest" depends="init,prepareBirtTest">
+		<!-- call the birt unit test -->
+		<ant dir="${runner.dir}" antfile="testRunner.xml" />
+		<antcall target="transformTestReports"/>
+	</target>
+	
+	<target name="prepareBirtTest" depends="init">
+		<!-- Clean last test plugins -->
+		<delete includeEmptyDirs="true" failonerror="false">
+			<fileset dir="${test.dir}/eclipse">
+				<include name="**/*"/>
+			</fileset>
+		</delete>
+		<!-- clean last unit test reports -->
+		<delete failonerror="false">
+			<fileset dir="${test.dir}/unitTestReport">
+				<include name="**/*.xml"/>
+				<include name="**/*.html"/>
+				<exclude name="**/build.xml"/>
+			</fileset>
+		</delete>
+		<!-- prepare unit test components -->
+		<copy todir="${test.dir}">
+			<fileset dir="${postingDirectory}/${buildId}">
+				<include name="birt-report-designer-all-in-one-${package.version}-linux-gtk.tar.gz"/>
+				<include name="birt-tests-suite-${package.version}.zip"/>
+			</fileset>
+		</copy>
+		
+		<exec executable="gunzip" dir="${test.dir}">
+			<arg line="birt-report-designer-all-in-one-${package.version}-linux-gtk.tar.gz" />
+		</exec>
+		<exec executable="tar" dir="${test.dir}">
+			<arg line="-xvf birt-report-designer-all-in-one-${package.version}-linux-gtk.tar" />
+		</exec>
+		<exec executable="unzip" dir="${test.dir}">
+			<arg line="-o -q birt-tests-suite-${package.version}.zip -d ${test.dir}" />
+		</exec>
+		<exec executable="unzip" dir="${postingDirectory}/${buildId}/../../platform/2.3M4_platform">
+			<arg line="-o -q eclipse-test-framework-3.4M4.zip -d ${test.dir}" />
+		</exec>
+		<delete>
+			<fileset dir="${test.dir}">
+				<include name="*.zip"/>
+				<include name="*.gz"/>
+				<include name="*.tar"/>
+			</fileset>
+		</delete>
+
+		<!-- copy drivers for jdbc testing -->
+		<property file="${buildDirectory}/finalPluginsVersions.properties"/>
+		<copy todir="${test.dir}/eclipse/plugins/org.eclipse.birt.report.data.oda.jdbc_${org.eclipse.birt.report.data.oda.jdbc}/drivers">
+			<fileset dir="${p4.home}/drivers">
+				<include name="**"/>
+			</fileset>
+		</copy>
+	</target>
+	
+
+	
+	<target name="transformTestReports">
+		<property file="${buildDirectory}/finalPluginsVersions.properties"/>
+		<copy todir="${test.dir}/unitTestReport/smokexml">
+			<fileset dir="${test.dir}/eclipse/plugins/org.eclipse.birt.report.tests.engine_${org.eclipse.birt.report.tests.engine}">
+				<include name="TESTS-*.xml"/>
+			</fileset>
+			<fileset dir="${test.dir}/eclipse/plugins/org.eclipse.birt.tests.data_${org.eclipse.birt.tests.data}">
+				<include name="TESTS-*.xml"/>
+			</fileset>
+		</copy>
+		<!-- XSLT trasform-->
+		<exec executable="${test.dir}/unitTestReport/processXML.sh"/>
+		<ant dir="${test.dir}/unitTestReport" antfile="build.xml"/>
+		<mkdir dir="${postingDirectory}/../unitTestReport/${package.version}/${buildId}"/>
+		<copy todir="${postingDirectory}/../unitTestReport/${package.version}/${buildId}" overwrite="true">
+			<fileset dir="${test.dir}/unitTestReport/html">
+				<include name="*.html"/>
+			</fileset>
+		</copy>
+	</target>
+	
+	<target name="buildLanguagePack">
+		<antcall target="MakeNLPack1"/>
+		<antcall target="PackageNLPack1"/>
+	</target>
+	<target name="MakeNLPack1">
+		<echo message="Start Make NL1 Pack" />
+		<ant antfile="LanguagePackBuild.xml" dir="${eclipse.build.configs}/birt.nl/tools" target="main" inheritAll="true">
+			<property name="build.id" value="${buildId}" />
+		</ant>
+	</target>
+	
+	<target name="PackageNLPack1" >
+		<echo message="Start Packaging NL1 for full, framework and RCP" />
+		<ant antfile="BIRTDownloadSetup.xml" target="createNLGroup1" dir="${eclipse.build.configs}/birt/tools"  inheritAll="false">
+			<property name="deposit" value="${buildDirectory}/${buildId}" />
+			<property name="OutputDir" value="${postingDirectory}/${buildId}"/>
+		</ant>
+		<echo message="Start Packaging NL1 for charts" />
+		<ant antfile="BIRTDownloadSetup.xml" target="createNLGroup1Chart" dir="${eclipse.build.configs}/birt/tools"  inheritAll="false">
+			<property name="deposit" value="${buildDirectory}/${buildId}" />
+			<property name="OutputDir" value="${postingDirectory}/${buildId}"/>
+		</ant>
+		<echo message="Start Packaging NL1 for runtime" />
+		<ant antfile="BIRTDownloadSetup.xml" target="createNLGroup1Runtime" dir="${eclipse.build.configs}/birt/tools"  inheritAll="false">
+			<property name="deposit" value="${buildDirectory}/${buildId}" />
+			<property name="OutputDir" value="${postingDirectory}/${buildId}"/>
+		</ant>
+		<!-- Create NL FeatureOverlay packages -->
+		<ant antfile="BIRTDownloadSetup.xml" dir="${eclipse.build.configs}/birt/tools" target="createBirtNLFeatureOverlay">
+			<property name="OutputDir" value="${postingDirectory}/${buildId}" />
+			<property name="deposit" value="${buildDirectory}/${buildId}" />
+		</ant>
+	</target>
+	
+	<target name="InformCancelBuild" if="NoMapChange">
+	    <property file="${eclipse.build.configs}/../../config.properties" />
+	    <mail mailport="${mail.port}" subject="${BranchVersion} Nightly build (${buildId}) is canceled, no change in map files" tolist="${DTP.members}" from="${mail.from}" replyto="${replyto.address}">
+	          <message>
+No change detected in map file project.
+${BranchVersion} Nightly Build (${buildId}) is canceled.
+	          </message>
+	     </mail>
+	</target>
+	
+	<target name="InformQA" unless="nomail">
+        <property file="${eclipse.build.configs}/../../config.properties" />
+        <mail mailport="${mail.port}" tolist="${QA.members}" from="${mail.from}" replyto="${replyto.address}" subject="${BranchVersion} Build Is Ready (BuildId: ${buildId})" >
+                <message>
+Hi All,
+
+Today's build (BuildId: ${buildId}) is available.
+Build based on:
+${build.environment}
+                	
+Please download :
+                	
+AllInOne from ${QA.test.dir}\BIRT2.3-download\${buildId}\birt-report-designer-all-in-one-${package.version}.zip${rtn}               	
+AllInOne for linux from: ${QA.test.dir}\BIRT2.3-download\${buildId}\birt-report-designer-all-in-one-${package.version}-linux-gtk.tar.gz${rtn}               	
+RCP from ${QA.test.dir}\BIRT2.3-download\${buildId}\birt-rcp-report-designer-${package.version}.zip${rtn}            	
+Runtime from ${QA.test.dir}\BIRT2.3-download\${buildId}\birt-runtime-${package.version}.zip${rtn}           	
+Framework from ${QA.test.dir}\BIRT2.3-download\${buildId}\birt-report-framework-${package.version}.zip${rtn}
+Source drops from ${QA.test.dir}\BIRT2.3-download\${buildId}\birt-source-${package.version}.zip${rtn}              	
+JUnit Test Suite Framework from ${QA.test.dir}\BIRT2.3-download\${buildId}\birt-tests-suite-${package.version}.zip${rtn}
+                	
+NL pack from ${QA.test.dir}\BIRT2.3-download\${buildId}\
+
+Internal Update Site URL: http://qa-build/UpdateSite/${package.version}
+
+Please visit [ http://qa-build:8080/BuildCentral ] for more information.
+                	
+Have a nice day!
+                </message>
+        </mail>
+		<!-- create download info file -->
+		<echo file="download.properties" append="false">
+			allInOne=\\${QA.test.dir}\\BIRT2.3-download\\${buildId}\\birt-report-designer-all-in-one-${package.version}.zip
+			runtime=\\${QA.test.dir}\\BIRT2.3-download\\${buildId}\\birt-runtime-${package.version}.zip
+			rcp=\\${QA.test.dir}\\BIRT2.3-download\\${buildId}\\birt-rcp-report-designer-${package.version}.zip
+			frameworkSDK=\\${QA.test.dir}\\BIRT2.3-download\\${buildId}\\birt-report-framework-sdk-${package.version}.zip
+		</echo>
+		<copy tofile="${postingDirectory}/download.properties" file="download.properties" overwrite="true" />
+	</target>
+	
+	<target name="InformPerformance" unless="nomail">
+		<property file="${eclipse.build.configs}/../../config.properties" />			
+        <mail mailport="${mail.port}" subject="${BranchVersion} Performance Test Reporting (BuildId: ${buildId} ) " tolist="${QA.PERFORMANCE}">
+			<from address="${mail.from}"/>
+			<replyto address="${replyto.address}"/>
+			<message>
+Hi All,
+
+Please see the attachments for performance test (BuildId: ${buildId}) results.
+
+Please visit [ http://qa-build:8080/BuildCentral ] for more information.
+				
+Have a nice day!
+			</message>
+			<fileset dir="${test.dir}/unitTestReport/html">
+				<include name="reporting_*.xml"/>
+			</fileset>
+		</mail>
+	</target>
+
+
+    <target name="genTestResultSummary">
+    	<property file="${eclipse.build.configs}/../../config.properties" />
+        <property name="tool.lib.path" value="${p4.home}/dailybuild/source/org.eclipse.birt.build"/>
+        <path id="customjar.classpath">
+                <path location="${tool.lib.path}/customtask.jar" />
+                <fileset dir="${tool.lib.path}/lib">
+                        <include name="*.jar"/>
+                </fileset>
+        </path>
+        <!-- Using custom build tools to get failure/error summary of test result -->
+        <java classname="org.eclipse.birt.build.ParseResultCount">
+            <classpath refid="customjar.classpath" />
+            <arg value="${test.dir}/unitTestReport/xml" />
+            <arg value="${test.dir}/unitTestReport/html/result.properties" />
+            <arg value="Y"/>
+            <arg value="Y"/>
+        </java>
+	<!--
+        <java classname="org.eclipse.birt.build.ParseResultCount">
+            <classpath refid="customjar.classpath" />
+            <arg value="${test.dir}/unitTestReport/smokexml" />
+            <arg value="${test.dir}/unitTestReport/html/result.properties" />
+            <arg value="Y"/>
+            <arg value="N"/>
+        </java>
+	-->
+    	<move file="${test.dir}/unitTestReport/html/result.properties" 
+    		tofile="${postingDirectory}/result.properties"/>
+    </target>
+	
+	<target name="InformAutomation" unless="nomail">
+		<property file="${eclipse.build.configs}/../../config.properties" />			
+        <mail mailport="${mail.port}" subject="${BranchVersion} Test Suite Projects Reporting (BuildId: ${buildId} ) " tolist="${QA.AUTOMATION}">
+			<from address="${mail.from}"/>
+			<replyto address="${replyto.address}"/>
+			<message>
+Hi All,
+
+Please see the attachments for test results.
+The repository of junit test reports can be found under: 	${QA.test.dir}\unitTestReport\${package.version}\
+
+Please visit [ http://qa-build:8080/BuildCentral ] for more information.
+				
+Have a nice day!
+			</message>
+			<!--
+			<fileset dir="${test.dir}/unitTestReport/html">
+				
+				<include name="TESTS-EngineSmokeTests.html"/>
+				<include name="TESTS-DtESmokeTests.html"/>
+				
+				<include name="org.eclipse.birt.report.tests.model.AllTests.html"/>
+				<include name="org.eclipse.birt.report.tests.engine.AllTests.html"/>
+				<include name="org.eclipse.birt.report.tests.chart.AllTests.html"/>
+				<include name="org.eclipse.birt.tests.data.engine.AllTests.html"/>
+				<include name="org.eclipse.birt.report.tests.regression.AllTests.html"/>
+			</fileset>
+			-->
+		</mail>
+	</target>
+	
+	<target name="checkErrorExist">
+		<property file="${eclipse.build.configs}/../../monitor.properties" />
+		<condition property="has.compile.error" value="true">
+			<equals arg1="${compileHasError}" arg2="true" />
+		</condition>
+		<echo message="${has.compile.error}"/>
+		<echo message="monitor: ${eclipse.build.configs}/../../monitor.properties" />
+	</target>
+	
+    <target name="checkCompileError" depends="checkErrorExist" if="has.compile.error" >
+		<property file="${eclipse.build.configs}/../../config.properties" />
+		<property file="${eclipse.build.configs}/../../monitor.properties" />
+		<echo message="${mail.port}"/>
+		<echo message="${buildId}"/>
+		<echo message="${COMPILE.ERROR.RECIPIENTS}"/>
+		<echo message="${mail.from}"/>
+		<echo message="${replyto.address}"/>
+		<echo message="${error.plugin.list}"/>
+
+		<echo message="${postingDirectory}/${buildId}/compilelogs/plugins"/>
+		<mail mailport="${mail.port}" subject="Compile errors found in Today's Datatools ${BranchVersion} Build (BuildId: ${buildId} ) " tolist="${COMPILE.ERROR.RECIPIENTS.LOCAL}">
+                    <from address="${mail.from}"/>
+                    <replyto address="${replyto.address}"/>
+                    <message>
+Hi All,
+
+Compile errors are found in today's DTP build(BuildId: ${buildId}):
+                    	
+${error.plugin.list}  
+        
+Please see the attachments for details.
+                    	
+Have a nice day!
+                    </message>
+	<attachments>
+                    <fileset dir="${postingDirectory}/${buildId}/compilelogs/plugins">
+                            <include name="*compilelog.html"/>
+                    </fileset>
+	</attachments>
+            </mail>
+    </target>
+	
+	<target name="generateCompileSummary">
+		
+        <property file="config.properties" />
+        <property name="tool.lib.path" value="${p4.home}/dailybuild/source/org.eclipse.birt.build"/>
+	<property name="compile.log.summary" value="${postingDirectory}/compileSummary.properties"/>
+		
+        <path id="customjar.classpath">
+                <path location="${tool.lib.path}/customtask.jar" />
+                <fileset dir="${tool.lib.path}/lib">
+                        <include name="*.jar"/>
+                </fileset>
+        </path>
+		
+        <delete file="${compile.log.summary}"  failonerror="false" />
+         <!-- Using custom build tools to get failure/error summary of test result -->
+         <java classname="org.eclipse.birt.build.ParseCompileSummary">
+             <classpath refid="customjar.classpath" />
+             <arg value="${postingDirectory}/${buildId}/compilelogs/plugins" />
+             <arg value="${compile.log.summary}" />
+             <arg value="Y" />
+             <arg value="Y" />
+         </java>
+	</target>
+</project>
diff --git a/plugins/org.eclipse.datatools.releng.builder/extras/CheckDTP_PotentialVersionIssue.sh b/plugins/org.eclipse.datatools.releng.builder/extras/CheckDTP_PotentialVersionIssue.sh
new file mode 100755
index 0000000..68c9d5a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/extras/CheckDTP_PotentialVersionIssue.sh
@@ -0,0 +1,82 @@
+# Copyright (c) 2011, 2014 Actuate Corporation.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+#Script that can automatically compare each plugin's version between the current version and the last release version.
+#And send the list of plugins that have potential version update issue in an email to the PMC members.
+#For example, the org.eclipse.datatools.enablement.oda.xml plugin has version 1.2.1.v201104121500 in the last release 1.9.1.
+#The plugin has apparently changes in 1.9.2 nightly build, with a later datetime stamp, but it still has version 1.2.1.
+#So this plugin would be a candidate to alert the PMC that the plugin micro/minor/major version should have been incremented.
+
+if [ $# -lt 2 ]; then
+	echo "USAGE: $0 CurrentBuildPostDirectory CurrentBuildId"
+	echo "Example: $0 $HOME/releng/BIRTOutput/dtp.output/1.9.2/v20111202-1046 1.9.2RC1-201112021046"
+	exit 1
+fi
+
+CurrentPostDir=$1
+CurrentBuildId=$2
+LastReleasePostDir=$HOME/releng/BIRTOutput/dtp.output/1.11.2/v20140208-0500-Released
+LastReleaseBuildId=1.11.2RC2-201402080500
+
+if [ ! -e $CurrentPostDir/dtp-sdk-${CurrentBuildId}.zip ]; then
+	echo "Current build does not exist, cancel comparison script."
+	exit
+fi
+
+echo "Start running comparison script"
+rm -rf DtpCurrent DtpLast
+rm -f nochange.txt change.txt allchange.txt excludechange.txt
+
+echo "unzip -q -o $CurrentPostDir/dtp-sdk-${CurrentBuildId}.zip -d DtpCurrent"
+unzip -q -o $CurrentPostDir/dtp-sdk-${CurrentBuildId}.zip -d DtpCurrent
+# echo "unzip -q -o $CurrentPostDir/dtp-incubator-sdk-${CurrentBuildId}.zip -d DtpCurrent"
+# unzip -q -o $CurrentPostDir/dtp-incubator-sdk-${CurrentBuildId}.zip -d DtpCurrent
+
+echo "unzip -q -o $LastReleasePostDir/dtp-sdk-${LastReleaseBuildId}.zip -d DtpLast"
+unzip -q -o $LastReleasePostDir/dtp-sdk-${LastReleaseBuildId}.zip -d DtpLast
+# echo "unzip -q -o $LastReleasePostDir/dtp-incubator-sdk-${LastReleaseBuildId}.zip -d DtpLast"
+# unzip -q -o $LastReleasePostDir/dtp-incubator-sdk-${LastReleaseBuildId}.zip -d DtpLast
+
+ls DtpCurrent/eclipse/plugins/ | grep org.eclipse.datatools | grep -v .source_ > DtpCurrent.txt
+ls DtpLast/eclipse/plugins/ | grep org.eclipse.datatools | grep -v .source_ > DtpLast.txt
+
+while read LINE; do
+	PluginName=$( echo $LINE | sed 's/\(.*datatools.*\)_.*/\1/g' )
+	MajorVersion=$( echo $LINE | sed 's/.*_\([0-9]*\.[0-9]*\.[0-9]*\)\..*/\1/g' )
+	TimeStamp=$( echo $LINE | sed 's/.*_[0-9]*\.[0-9]*\.[0-9]*\.\(.*\)\.jar/\1/g' )
+	
+	LINE2=$( cat DtpCurrent.txt | grep ${PluginName}_ )
+	PluginName2=$( echo $LINE2 | sed 's/\(.*datatools.*\)_.*/\1/g' )
+        MajorVersion2=$( echo $LINE2 | sed 's/.*_\([0-9]*\.[0-9]*\.[0-9]*\)\..*/\1/g' )
+        TimeStamp2=$( echo $LINE2 | sed 's/.*_[0-9]*\.[0-9]*\.[0-9]*\.\(.*\)\.jar/\1/g' )
+	
+	if [ "$TimeStamp" = "$TimeStamp2" ]; then
+		echo "$PluginName: no change since last release"
+		echo "$PluginName" >> nochange.txt
+	elif [ "$MajorVersion" = "$MajorVersion2" ]; then
+		#Exclude current bundle version timestamp of v201403131814,v201403131825 in list of plugins with potential version issue
+		if ( echo "$TimeStamp2" | grep v201403131814 >/dev/null ) || ( echo "$TimeStamp2" | grep v201403131825 >/dev/null ); then
+			echo "$PluginName: Exclude in list of plugins with potential version issue"
+                        echo "$PluginName" >> excludechange.txt
+                        echo "Last_Release_Version: $MajorVersion.$TimeStamp" >> excludechange.txt
+                        echo "Current_Version:      $MajorVersion2.$TimeStamp2" >> excludechange.txt
+                        echo "====================" >> excludechange.txt
+		else
+			echo "$PluginName: TimeStamp changed but Major Version do not change"
+			echo "$PluginName" >> change.txt
+			echo "Last_Release_Version: $MajorVersion.$TimeStamp" >> change.txt
+			echo "Current_Version:      $MajorVersion2.$TimeStamp2" >> change.txt
+			echo "====================" >> change.txt		
+		fi
+	else
+		echo "$PluginName: TimeStamp and Major Version both changed"
+		echo "$PluginName" >> allchange.txt
+		echo "Last_Release_Version: $MajorVersion.$TimeStamp" >> allchange.txt
+                echo "Current_Version:      $MajorVersion2.$TimeStamp2" >> allchange.txt
+                echo "====================" >> allchange.txt
+
+	fi
+done < DtpLast.txt
diff --git a/plugins/org.eclipse.datatools.releng.builder/extras/checkCompareDone.sh b/plugins/org.eclipse.datatools.releng.builder/extras/checkCompareDone.sh
new file mode 100644
index 0000000..a78a784
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/extras/checkCompareDone.sh
@@ -0,0 +1,11 @@
+usage="usage: $0 Path_of_cvsDiff.txt DTP_Version \nExample: $0 /home/adb/releng.dtp.182/src 182"

+if [ $# -lt 2 ]

+then

+     echo -e >&2 "$usage"

+     exit 1

+fi

+

+if [ ! -e $1/cvsDiff.txt ]

+then

+  sendEmail -f xgu@actuate.com -t yjiang@actuate.com xgu@actuate.com -s localhost:5025 -u "Compare map files time out for today's DTP $2 nightly build" -m "Remind: compare map files time out for today's $2 nightly build,please have a check" -l mail.log

+fi
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.releng.builder/extras/cvschanges.xml b/plugins/org.eclipse.datatools.releng.builder/extras/cvschanges.xml
new file mode 100644
index 0000000..b32650e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/extras/cvschanges.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ *************************************************************************
+ * Copyright (c) 2007 Sybase, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Sybase, Inc.  - initial API and implementation
+ *  
+ ***************************************************************************
+ -->
+<project default="cvs.changelog" basedir=".">
+
+	<property name="start.date" value="1 July 2007"/>
+	<property name="report.prefix" value="dtp1.6_"/>
+	<property name="cvs.root" value=":pserver:anonymous@dev.eclipse.org:/cvsroot/datatools"/>
+	<property name="ant.home" value="/usr/local/apache-ant-1.7.0"/>
+	<property name="checkout.version" value=" -r BIRT_2_2_2_Release_20080227"/>
+	<property name="cvs.options" value=" "/>
+
+	<target name="cvs.changelog" depends="check.out">
+		<cvschangelog cvsRoot="${cvs.root}" 
+			      dir="${buildDirecory}/../../cvsChangeLog" 
+                              start="${start.date}" 
+                              destfile="${postingDirectory}/${buildId}/${report.prefix}changelog.xml"/>
+		<antcall target="generate.report"/>
+	</target>
+
+	<target name="generate.report">
+		<style in="${postingDirectory}/${buildId}/${report.prefix}changelog.xml" 
+                    out="${postingDirectory}/${buildId}/${report.prefix}changelog.html" 
+                    style="${eclipse.build.configs}/../../extras/dtp_changelog.xsl">
+          		<param name="title" expression="DTP 1.6 ChangeLog"/>
+	        </style>
+	</target>
+
+	<target name="check.out">
+               <cvs cvsRoot="${cvs.root}"
+                     package="org.eclipse.datatools.connectivity/plugins"
+                     dest="${buildDirecory}/../../cvsChangeLog"
+                     command="update -P ${checkout.version} ${cvs.options}"
+                     failonerror="yes" />
+               <cvs cvsRoot="${cvs.root}"
+                     package="org.eclipse.datatools.sqltools/plugins"
+                     dest="${buildDirecory}/../../cvsChangeLog"
+                     command="update -P ${checkout.version} ${cvs.options}"
+                     failonerror="yes" />
+               <cvs cvsRoot="${cvs.root}"
+                     package="org.eclipse.datatools.enablement/plugins"
+                     dest="${buildDirecory}/../../cvsChangeLog"
+                     command="update -P ${checkout.version} ${cvs.options}"
+                     failonerror="yes" />
+               <cvs cvsRoot="${cvs.root}"
+                     package="org.eclipse.datatools.modelbase/plugins"
+                     dest="${buildDirecory}/../../cvsChangeLog"
+                     command="update -P ${checkout.version} ${cvs.options}"
+                     failonerror="yes" />
+	</target>
+</project>
diff --git a/plugins/org.eclipse.datatools.releng.builder/extras/dtp.sc.template b/plugins/org.eclipse.datatools.releng.builder/extras/dtp.sc.template
new file mode 100755
index 0000000..92c342f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/extras/dtp.sc.template
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!-- deprecated in Galileo release -->
+<sc:siteContribution
+    xmlns="http://www.eclipse.org/buckminster/CSpec-1.0"
+    xmlns:sc="http://www.eclipse.org/buckminster/SiteContribution-1.0"
+    updateSite="${downloads}/datatools/downloads/drops/N_updates/site.xml">
+    <sc:member
+        name="Xiaoying Gu"
+        email="xgu@actuate.com" />
+    <sc:cspec name="org.eclipse.dtp-sc">
+        <dependencies>
+            <dependency
+                name="org.eclipse.datatools.connectivity.feature"
+                versionDesignator="[@org.eclipse.datatools.connectivity.feature@]" />
+            <dependency
+                name="org.eclipse.datatools.connectivity.oda.designer.feature"
+                versionDesignator="[@org.eclipse.datatools.connectivity.oda.designer.feature@]" />
+            <dependency
+                name="org.eclipse.datatools.connectivity.oda.feature"
+                versionDesignator="[@org.eclipse.datatools.connectivity.oda.feature@]" />
+            <dependency
+                name="org.eclipse.datatools.doc.user"
+                versionDesignator="[@org.eclipse.datatools.doc.user@]" />
+            <dependency
+                name="org.eclipse.datatools.common.doc.user"
+                versionDesignator="[@org.eclipse.datatools.common.doc.user@]" />
+            <dependency
+                name="org.eclipse.datatools.connectivity.doc.user"
+                versionDesignator="[@org.eclipse.datatools.connectivity.doc.user@]" />
+            <dependency
+                name="org.eclipse.datatools.sqltools.doc.user"
+                versionDesignator="[@org.eclipse.datatools.sqltools.doc.user@]" />
+            <dependency
+                name="org.eclipse.datatools.enablement.apache.derby.feature"
+                versionDesignator="[@org.eclipse.datatools.enablement.apache.derby.feature@]" />
+            <dependency
+                name="org.eclipse.datatools.enablement.feature"
+                versionDesignator="[@org.eclipse.datatools.enablement.feature@]" />
+            <dependency
+                name="org.eclipse.datatools.enablement.hsqldb.feature"
+                versionDesignator="[@org.eclipse.datatools.enablement.hsqldb.feature@]" />
+            <dependency
+                name="org.eclipse.datatools.enablement.ibm.feature"
+                versionDesignator="[@org.eclipse.datatools.enablement.ibm.feature@]" />
+            <dependency
+                name="org.eclipse.datatools.enablement.jdbc.feature"
+                versionDesignator="[@org.eclipse.datatools.enablement.jdbc.feature@]" />
+            <dependency
+                name="org.eclipse.datatools.enablement.jdt.feature"
+                versionDesignator="[@org.eclipse.datatools.enablement.jdt.feature@]" />
+            <dependency
+                name="org.eclipse.datatools.enablement.msft.feature"
+                versionDesignator="[@org.eclipse.datatools.enablement.msft.feature@]" />
+            <dependency
+                name="org.eclipse.datatools.enablement.mysql.feature"
+                versionDesignator="[@org.eclipse.datatools.enablement.mysql.feature@]" />
+            <dependency
+                name="org.eclipse.datatools.enablement.oda.designer.feature"
+                versionDesignator="[@org.eclipse.datatools.enablement.oda.designer.feature@]" />
+            <dependency
+                name="org.eclipse.datatools.enablement.oda.feature"
+                versionDesignator="[@org.eclipse.datatools.enablement.oda.feature@]" />
+            <dependency
+                name="org.eclipse.datatools.enablement.oracle.feature"
+                versionDesignator="[@org.eclipse.datatools.enablement.oracle.feature@]" />
+            <dependency
+                name="org.eclipse.datatools.enablement.postgresql.feature"
+                versionDesignator="[@org.eclipse.datatools.enablement.postgresql.feature@]" />
+            <dependency
+                name="org.eclipse.datatools.enablement.sap.feature"
+                versionDesignator="[@org.eclipse.datatools.enablement.sap.feature@]" />
+            <dependency
+                name="org.eclipse.datatools.enablement.sybase.feature"
+                versionDesignator="[@org.eclipse.datatools.enablement.sybase.feature@]" />
+            <dependency
+                name="org.eclipse.datatools.intro"
+                versionDesignator="[@org.eclipse.datatools.intro@]" />
+            <dependency
+                name="org.eclipse.datatools.modelbase.feature"
+                versionDesignator="[@org.eclipse.datatools.modelbase.feature@]" />
+            <dependency
+                name="org.eclipse.datatools.sdk.feature"
+                versionDesignator="[@org.eclipse.datatools.sdk.feature@]" />
+            <dependency
+                name="org.eclipse.datatools.sqldevtools.data.feature"
+                versionDesignator="[@org.eclipse.datatools.sqldevtools.data.feature@]" />
+            <dependency
+                name="org.eclipse.datatools.sqldevtools.ddl.feature"
+                versionDesignator="[@org.eclipse.datatools.sqldevtools.ddl.feature@]" />
+            <dependency
+                name="org.eclipse.datatools.sqldevtools.ddlgen.feature"
+                versionDesignator="[@org.eclipse.datatools.sqldevtools.ddlgen.feature@]" />
+            <dependency
+                name="org.eclipse.datatools.sqldevtools.feature"
+                versionDesignator="[@org.eclipse.datatools.sqldevtools.feature@]" />
+            <dependency
+                name="org.eclipse.datatools.sqldevtools.parsers.feature"
+                versionDesignator="[@org.eclipse.datatools.sqldevtools.parsers.feature@]" />
+            <dependency
+                name="org.eclipse.datatools.sqldevtools.results.feature"
+                versionDesignator="[@org.eclipse.datatools.sqldevtools.results.feature@]" />
+        </dependencies>
+        <groups>
+            <public name="Enabling Features">
+                <attribute component="org.eclipse.datatools.connectivity.feature" />
+                <attribute component="org.eclipse.datatools.connectivity.oda.designer.feature" />
+                <attribute component="org.eclipse.datatools.connectivity.oda.feature" />
+                <attribute component="org.eclipse.datatools.enablement.apache.derby.feature" />
+                <attribute component="org.eclipse.datatools.enablement.hsqldb.feature" />
+                <attribute component="org.eclipse.datatools.enablement.ibm.feature" />
+                <attribute component="org.eclipse.datatools.enablement.jdbc.feature" />
+                <attribute component="org.eclipse.datatools.enablement.jdt.feature" />
+                <attribute component="org.eclipse.datatools.enablement.msft.feature" />
+                <attribute component="org.eclipse.datatools.enablement.mysql.feature" />
+                <attribute component="org.eclipse.datatools.enablement.oda.designer.feature" />
+                <attribute component="org.eclipse.datatools.enablement.oda.feature" />
+                <attribute component="org.eclipse.datatools.enablement.oracle.feature" />
+                <attribute component="org.eclipse.datatools.enablement.postgresql.feature" />
+                <attribute component="org.eclipse.datatools.enablement.sap.feature" />
+                <attribute component="org.eclipse.datatools.enablement.sybase.feature" />
+                <attribute component="org.eclipse.datatools.modelbase.feature" />
+                <attribute component="org.eclipse.datatools.sqldevtools.data.feature" />
+                <attribute component="org.eclipse.datatools.sqldevtools.ddl.feature" />
+                <attribute component="org.eclipse.datatools.sqldevtools.ddlgen.feature" />
+                <attribute component="org.eclipse.datatools.sqldevtools.parsers.feature" />
+                <attribute component="org.eclipse.datatools.sqldevtools.results.feature" />
+            </public>
+            <public name="Database Development">
+                <attribute component="org.eclipse.datatools.doc.user" />
+                <attribute component="org.eclipse.datatools.common.doc.user" />
+                <attribute component="org.eclipse.datatools.connectivity.doc.user" />
+                <attribute component="org.eclipse.datatools.sqltools.doc.user" />
+                <attribute component="org.eclipse.datatools.enablement.feature" />
+                <attribute component="org.eclipse.datatools.intro" />
+                <attribute component="org.eclipse.datatools.sdk.feature" />
+                <attribute component="org.eclipse.datatools.sqldevtools.feature" />
+            </public>
+        </groups>
+    </sc:cspec>
+</sc:siteContribution>
+
+
diff --git a/plugins/org.eclipse.datatools.releng.builder/extras/dtp1.6_changelog.xml b/plugins/org.eclipse.datatools.releng.builder/extras/dtp1.6_changelog.xml
new file mode 100755
index 0000000..78a6f65
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/extras/dtp1.6_changelog.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<changelog>
+	<entry>
+		<date>2008-03-12</date>
+		<time>07:13</time>
+		<author><![CDATA[xgu]]></author>
+		<file>
+			<name><![CDATA[source/org.eclipse.birt.build/build.properties]]></name>
+			<revision>1.2</revision>
+		</file>
+		<msg><![CDATA[[222352]Move ExportManifestUtils from report.engine to org.eclipse.birt.build project]]></msg>
+	</entry>
+	<entry>
+		<date>2008-03-12</date>
+		<time>07:10</time>
+		<author><![CDATA[xgu]]></author>
+		<file>
+			<name><![CDATA[source/org.eclipse.birt.build/src/org/eclipse/birt/build/ExportManifestUtils.java]]></name>
+			<revision>1.1</revision>
+		</file>
+		<msg><![CDATA[[222352]Move ExportManifestUtils from report.engine to org.eclipse.birt.build project]]></msg>
+	</entry>
+</changelog>
diff --git a/plugins/org.eclipse.datatools.releng.builder/extras/dtp_changelog.xsl b/plugins/org.eclipse.datatools.releng.builder/extras/dtp_changelog.xsl
new file mode 100644
index 0000000..edf01b8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/extras/dtp_changelog.xsl
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<xsl:stylesheet
+    xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
+    version='1.0'>
+
+<!--
+   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.
+   
+-->
+  <xsl:param name="title"/>
+ 
+  <xsl:output method="html" indent="yes" encoding="US-ASCII"
+              doctype-public="-//W3C//DTD HTML 4.01//EN"
+              doctype-system="http://www.w3.org/TR/html401/strict.dtd"/>
+
+  <!-- Copy standard document elements.  Elements that
+       should be ignored must be filtered by apply-templates
+       tags. -->
+  <xsl:template match="*">
+    <xsl:copy>
+      <xsl:copy-of select="attribute::*[. != '']"/>
+      <xsl:apply-templates/>
+    </xsl:copy>
+  </xsl:template>
+
+  <xsl:template match="changelog">
+    <html>
+      <head>
+        <title><xsl:value-of select="$title"/></title>
+        <style type="text/css">
+          body, p {
+            font-family: Verdana, Arial, Helvetica, sans-serif;
+            font-size: 80%;
+            color: #000000;
+            background-color: #ffffff;
+          }
+          tr, td {
+            font-family: Verdana, Arial, Helvetica, sans-serif;
+            background: #eeeee0;
+          }
+          td {
+            padding-left: 20px;
+          }
+      .dateAndAuthor {
+            font-family: Verdana, Arial, Helvetica, sans-serif;
+            font-weight: bold;
+            text-align: left;
+            background: #a6caf0;
+            padding-left: 3px;
+      }
+          a {
+            color: #000000;
+          }
+          pre {
+            font-weight: bold;
+          }
+        </style>
+      </head>
+      <body>
+        <h1>
+          <a name="top"><xsl:value-of select="$title"/></a>
+        </h1>
+        <p style="text-align: right">Designed for use with <a href="http://ant.apache.org/">Apache Ant</a>.</p>
+        <hr/>
+        <table border="0" width="100%" cellspacing="1">
+          
+          <xsl:apply-templates select=".//entry">
+            <xsl:sort select="date" data-type="text" order="descending"/>
+            <xsl:sort select="time" data-type="text" order="descending"/>
+          </xsl:apply-templates>
+          
+        </table>
+        
+      </body>
+    </html>
+  </xsl:template>
+  
+  <xsl:template match="entry">
+    <tr>
+      <td class="dateAndAuthor">
+        <xsl:value-of select="date"/><xsl:text> </xsl:text><xsl:value-of select="time"/><xsl:text> </xsl:text><xsl:value-of select="author"/>
+      </td>
+    </tr>
+    <tr>
+      <td>
+        <pre>
+<xsl:apply-templates select="msg"/></pre>
+        <ul>
+          <xsl:apply-templates select="file"/>
+        </ul>
+      </td>
+    </tr>
+  </xsl:template>
+
+  <xsl:template match="date">
+    <i><xsl:value-of select="."/></i>
+  </xsl:template>
+
+  <xsl:template match="time">
+    <i><xsl:value-of select="."/></i>
+  </xsl:template>
+
+  <xsl:template match="author">
+    <i>
+      <a>
+        <xsl:attribute name="href">mailto:<xsl:value-of select="."/></xsl:attribute>
+        <xsl:value-of select="."/></a>
+    </i>
+  </xsl:template>
+
+  <xsl:template match="file">
+    <li>
+         <xsl:value-of select="name" /> (<xsl:value-of select="revision"/>)
+    </li>
+  </xsl:template>
+
+  <!-- Any elements within a msg are processed,
+       so that we can preserve HTML tags. -->
+  <xsl:template match="msg">
+    <xsl:apply-templates/>
+  </xsl:template>
+  
+</xsl:stylesheet>
diff --git a/plugins/org.eclipse.datatools.releng.builder/extras/pack.properties b/plugins/org.eclipse.datatools.releng.builder/extras/pack.properties
new file mode 100644
index 0000000..88193c3
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/extras/pack.properties
@@ -0,0 +1,2 @@
+pack200.default.args=-E4
+
diff --git a/plugins/org.eclipse.datatools.releng.builder/extras/pack200 b/plugins/org.eclipse.datatools.releng.builder/extras/pack200
new file mode 100644
index 0000000..56a146a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/extras/pack200
@@ -0,0 +1,12 @@
+#!/bin/sh

+

+@pack200@ -E4 -J-Xmx512m $*

+

+pack200retCode=$?

+

+if [ $pack200retCode != 0 ]

+then

+        echo "Build failed (error code $retCode)."

+        exit -1

+fi

+

diff --git a/plugins/org.eclipse.datatools.releng.builder/extras/site.xml b/plugins/org.eclipse.datatools.releng.builder/extras/site.xml
new file mode 100644
index 0000000..d83fd52
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/extras/site.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<site>
+   <description url="http://download.eclipse.org//datatools/drops/updates/site.xml">
+      To install these plugins, point your Eclipse Update Manager at this site.
+   </description>
+   <feature url="features/org.eclipse.datatools.sdk.feature_@org.eclipse.datatools.sdk.feature@.jar" id="org.eclipse.datatools.sdk.feature" version="@org.eclipse.datatools.sdk.feature@">
+      <category name="Eclipse Data Tools Platform SDK @RELEASE.VERSION@"/>
+   </feature>
+   <feature url="features/org.eclipse.datatools.enablement.sdk.feature_@org.eclipse.datatools.enablement.sdk.feature@.jar" id="org.eclipse.datatools.enablement.sdk.feature" version="@org.eclipse.datatools.enablement.sdk.feature@">
+      <category name="Eclipse Data Tools Platform Enablement SDK @RELEASE.VERSION@"/>
+   </feature>
+   <category-def name="Eclipse Data Tools Platform SDK @RELEASE.VERSION@" label="Eclipse Data Tools Platform SDK @RELEASE.VERSION@">
+      <description>
+         The @RELEASE.VERSION@ build of the Eclipse Data Tools Platform (DTP)
+      </description>
+   </category-def>
+   <category-def name="Eclipse Data Tools Platform Enablement SDK @RELEASE.VERSION@" label="Eclipse Data Tools Platform Enablement SDK @RELEASE.VERSION@">
+      <description>
+         The @RELEASE.VERSION@ build of the Eclipse Data Tools Platform (DTP) Enablement
+      </description>
+   </category-def>
+</site>
diff --git a/plugins/org.eclipse.datatools.releng.builder/extras/tagdiff.xml b/plugins/org.eclipse.datatools.releng.builder/extras/tagdiff.xml
new file mode 100755
index 0000000..5324a04
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/extras/tagdiff.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tagdiff cvsroot=":pserver:anonymous@dev.eclipse.org:/cvsroot/birt" endTag="v20080314" package="source/org.eclipse.birt.build" startTag="BIRT_2_2_2_Release_20080227">
+	<entry>
+		<file>
+			<name><![CDATA[build.properties]]></name>
+			<revision>1.2</revision>
+			<prevrevision>1.1</prevrevision>
+		</file>
+	</entry>
+	<entry>
+		<file>
+			<name><![CDATA[src/org/eclipse/birt/build/ExportManifestUtils.java]]></name>
+			<revision>1.1</revision>
+		</file>
+	</entry>
+</tagdiff>
diff --git a/plugins/org.eclipse.datatools.releng.builder/extras/updateFeatureTag.sh b/plugins/org.eclipse.datatools.releng.builder/extras/updateFeatureTag.sh
new file mode 100644
index 0000000..a60cb36
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/extras/updateFeatureTag.sh
@@ -0,0 +1,33 @@
+#!/bin/sh

+

+export CVSROOT=:ext:xgu@dev.eclipse.org:/cvsroot/datatools

+export CVS_RSH=ssh

+

+builddate=`date +%Y%m%d`

+buildtime=`date +%H%M`

+datetimestamp=$builddate$buildtime

+

+WORKING_FOLDER=$1

+echo "Current working folder: $WORKING_FOLDER"

+

+#Check out all dtp features

+

+cd $WORKING_FOLDER/

+cvs checkout org.eclipse.datatools.build/R1.6_Feature_Projects

+cd org.eclipse.datatools.build

+echo "New Feature Tag: v$datetimestamp"

+cvs tag v$datetimestamp R1.6_Feature_Projects

+

+

+#Check out releng map file

+

+cd $WORKING_FOLDER

+cvs checkout org.eclipse.datatools.releng

+cd org.eclipse.datatools.releng/maps

+sed s/=.*,:/=v$datetimestamp,:/ dtp-features.map > dtp-features.map.new 

+mv dtp-features.map.new dtp-features.map

+

+#Submit the change for dtp map files

+cd $WORKING_FOLDER

+cvs commit -m "Update feature version to v$datetimestamp (auto)" org.eclipse.datatools.releng

+

diff --git a/plugins/org.eclipse.datatools.releng.builder/extras/verifyCompile.sh b/plugins/org.eclipse.datatools.releng.builder/extras/verifyCompile.sh
new file mode 100644
index 0000000..294e8c4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/extras/verifyCompile.sh
@@ -0,0 +1,50 @@
+#!/bin/bash
+
+######################
+#rename compile log
+######################
+
+find $1 -name "*.html" > $1/compile.log
+
+awk -F "/" '{print "cp " $0 " "$1 FS $2 FS $3 FS $4 FS $5 FS $6 FS $7 FS $8 FS $9 FS $10 FS $11 FS"_compilelog.html"  }' $1/compile.log >  $1/plugins.rename
+chmod +x $1/plugins.rename
+$1/plugins.rename
+
+
+
+echo $1
+find $1 -name "*.html" -exec grep "ERROR&nbsp;in" -c {} \; -print > $1/error.plugins
+
+awk ' /\/org/ {print $1}' $1/error.plugins > $1/error.plugins.tmp
+mv $1/error.plugins.tmp  $1/error.plugins
+
+######################################
+#Get compile error plugins total count
+######################################
+
+wc -l $1/error.plugins > $1/error.plugins.count
+count=`awk '{print $1}' $1/error.plugins.count`
+
+#############################################
+#found compile error, generate notify list
+#############################################
+
+if [ $count -gt 0 ] ; then
+        echo "#Compile has error in $1" >> /home/adb/releng.dtp.172/org.eclipse.datatools.releng.builder/monitor.properties
+        awk -F "/" '{print "cp " $0 " "$1 FS $2 FS $3 FS $4 FS $5 FS $6 FS $7 FS $8 FS $9 FS $10 FS $11"_compilelog.html"  }' $1/error.plugins >  $1/error.plugins.rename
+        chmod +x $1/error.plugins.rename
+        $1/error.plugins.rename
+
+        #set error plugins or notification
+        awk -F "/" '{print $11}' $1/error.plugins  > $1/notify.list
+        awk -F "_" '{print " "$1"\\n\\"}' $1/notify.list > $1/notify.list.tmp
+        mv $1/notify.list.tmp $1/notify.list
+
+        echo "compileHasError=true" >> /home/adb/releng.dtp.172/org.eclipse.datatools.releng.builder/monitor.properties
+        echo "error.plugin.list=\\" >> /home/adb/releng.dtp.172/org.eclipse.datatools.releng.builder/monitor.properties
+        cat $1/notify.list >> /home/adb/releng.dtp.172/org.eclipse.datatools.releng.builder/monitor.properties
+        echo " "  >> /home/adb/releng.dtp.172/org.eclipse.datatools.releng.builder/monitor.properties
+else
+        echo "#No compile error in $1" >> /home/adb/releng.dtp.172/org.eclipse.datatools.releng.builder/monitor.properties
+        echo "compileHasError=false" >> /home/adb/releng.dtp.172/org.eclipse.datatools.releng.builder/monitor.properties
+fi
diff --git a/plugins/org.eclipse.datatools.releng.builder/git-map.sh b/plugins/org.eclipse.datatools.releng.builder/git-map.sh
new file mode 100755
index 0000000..57b21ce
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/git-map.sh
@@ -0,0 +1,124 @@
+#!/bin/bash 
+#
+#
+# example usage - you must have your repos checked out on the branch you
+# expect to tag.
+#
+# USAGE: repoRoot relengRoot repoURL [repoURL]*
+#    repoRoot   - absolute path to a folder containing cloned git repositories
+#    relengRoot - absolute path to releng project containing map files
+#    repoURL    - git repository urls to tag, must match entries in the map files
+# EXAMPLE: git-map.sh  \
+#   /opt/pwebster/git/eclipse \
+#   /opt/pwebster/workspaces/gitMigration/org.eclipse.releng \
+#   git://git.eclipse.org/gitroot/platform/eclipse.platform.runtime.git \
+#   git://git.eclipse.org/gitroot/platform/eclipse.platform.ui.git >maps.txt
+# examine the file
+# grep -v ^OK maps.txt >run.txt
+# /bin/bash run.txt
+#
+
+PLATFORM=$( uname -s )
+
+get_repo_tag () {
+	REPO=$1
+	REPO_DIR=$( basename $REPO .git )
+	cd $ROOT/$REPO_DIR
+	REPO_COMMIT=$( git rev-list -1 HEAD  )
+	NEW_DATE=$( git log -1 --format="%ci" "$REPO_COMMIT" )
+	if [ "$PLATFORM" == "Darwin" ]; then
+		echo v$( date -u -j -f "%s" "$NEW_DATE" "+%Y%m%d-%H%M" )
+	else
+		echo v$( date --date="$NEW_DATE"  "+%Y%m%d%H%M" )
+	fi
+}
+
+tag_repo_commit () {
+	REPO=$1
+	REPO_DIR=$( basename $REPO .git )
+	NEW_TAG=$( get_repo_tag $REPO )
+	cd $ROOT/$REPO_DIR
+	REPO_COMMIT=$( git rev-list -1 HEAD  )
+	if ! ( git log -1  --format="%d" "$REPO_COMMIT" | grep "[ (]$NEW_TAG[,)]" >/dev/null); then
+		OLD_TAG=$( git log --pretty=oneline --decorate | grep "[ (][vI][0-9]" \
+			| head -1 | sed 's/^[^(]* (.*\([vI][0-9][0-9][0-9][0-9]\)/\1/g'   | sed 's/[,)].*$//g' ) 
+		SUBMISSION_ARGS="$SUBMISSION_ARGS $REPO $OLD_TAG $NEW_TAG"
+		echo "#OK Executed: cd $ROOT/$REPO_DIR \; git tag \"$NEW_TAG\" \"$REPO_COMMIT\""
+		cd $ROOT/$REPO_DIR ; git tag "$NEW_TAG" "$REPO_COMMIT"
+	fi
+}
+
+update_map () {
+	#echo update_map "$@"
+	REPO=$1
+	REPO_DIR=$( basename $REPO .git )
+	MAP=$2
+	cd $ROOT/$REPO_DIR
+	grep "repo=${REPO}," "$MAP" >/tmp/maplines_$$.txt
+	dos2unix /tmp/maplines_$$.txt
+	if [ ! -s /tmp/maplines_$$.txt ]; then
+		return
+	fi
+	while read LINE; do
+		LINE_START=$( echo $LINE | sed 's/^\([^=]*\)=.*$/\1/g' )
+		PROJ_PATH=$( echo $LINE | sed 's/^.*path=//g' )
+		CURRENT_TAG=$( echo $LINE | sed 's/.*tag=\([^,]*\),.*$/\1/g' )
+		LAST_COMMIT=$( git rev-list -1 HEAD -- "$PROJ_PATH" )
+        if [ -z "$LAST_COMMIT" ]; then
+            echo "#SKIPPING $LINE_START, no commits for $PROJ_PATH"
+            continue
+        fi
+		
+		if ! ( git tag --contains $LAST_COMMIT | grep $CURRENT_TAG >/dev/null ); then
+			NEW_DATE=$( git log -1 --format="%ci" "$LAST_COMMIT" )
+			if [ "$PLATFORM" == "Darwin" ]; then
+				NEW_TAG=v$( date -u -j -f "%s" "$NEW_DATE" "+%Y%m%d-%H%M" )
+			else
+				NEW_TAG=v$( date --date="$NEW_DATE"  "+%Y%m%d%H%M" )
+			fi
+			
+			if ! ( git log -1  --format="%d" "$LAST_COMMIT" | grep "[ (]$NEW_TAG[,)]" >/dev/null); then
+				SUBMISSION_ARGS="$SUBMISSION_ARGS $REPO $CURRENT_TAG $NEW_TAG"
+				echo "#OK Executed: cd $ROOT/$REPO_DIR \; git tag \"$NEW_TAG\" \"$LAST_COMMIT\""
+				cd $ROOT/$REPO_DIR ; git tag "$NEW_TAG" "$LAST_COMMIT"
+			fi
+			echo sed "'s/$LINE_START=GIT,tag=$CURRENT_TAG/$LINE_START=GIT,tag=$NEW_TAG/g'" $MAP \>/tmp/t1_$$.txt \; mv /tmp/t1_$$.txt $MAP
+			#echo \( cd $ROOT/$REPO_DIR \; git commit -a -m \"Update map file for "$LINE_START" by auto tag script\" \)
+		else
+			echo OK $LINE_START $CURRENT_TAG 
+		fi
+	done </tmp/maplines_$$.txt
+	rm -f /tmp/maplines_$$.txt
+	echo \( cd $ROOT/$REPO_DIR \; git commit -a -m \"Update map file for "$REPO_DIR" repository by auto tag script\" \)
+	echo \( cd $ROOT/$REPO_DIR \; git push \; git push --tags \)
+}
+
+
+STATUS=OK
+STATUS_MSG=""
+LATEST_SUBMISSION=""
+SUBMISSION_ARGS=""
+
+if [ $# -lt 3 ]; then
+  echo "USAGE: $0 repoRoot relengRoot repoURL [repoURL]*"
+  exit 1
+fi
+
+
+ROOT=$1; shift
+RELENG=$1; shift
+REPOS="$@"
+
+
+for REPO in $REPOS; do
+	cd $ROOT
+	#tag_repo_commit $REPO
+	MAPS=$( find $RELENG -name "*.map" -exec grep -l "repo=${REPO}," {} \; )
+	if [ ! -z "$MAPS" ]; then
+		for MAP in $MAPS; do
+			update_map $REPO $MAP
+		done
+	fi
+done
+
+echo "/bin/bash git-submission.sh $ROOT $SUBMISSION_ARGS > report.txt"
diff --git a/plugins/org.eclipse.datatools.releng.builder/git-submission.sh b/plugins/org.eclipse.datatools.releng.builder/git-submission.sh
new file mode 100755
index 0000000..af7db69
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/git-submission.sh
@@ -0,0 +1,45 @@
+#!/bin/bash
+#
+# When the map file has been updated, this can be used to generate
+# the releng build submission report
+# USAGE: git-submission.sh repoRoot repoURL last_tag build_tag [repoURL...] >report.txt
+#
+
+
+ROOT=$1; shift
+rm -f /tmp/proj_changed_$$.txt /tmp/bug_list_$$.txt
+
+while [ $# -gt 0 ]; do
+	REPO="$1"; shift
+	REPO_DIR=$( basename $REPO .git )
+	LAST_TAG="$1"; shift
+echo "LAST_TAG: $LAST_TAG"
+	BUILD_TAG="$1"; shift
+echo "BUILD_TAG: $BUILD_TAG"
+	cd $ROOT/$REPO_DIR
+	git diff --name-only ${LAST_TAG} ${BUILD_TAG} | cut -f2 -d/ | sort -u >>/tmp/proj_changed_$$.txt
+	 
+	
+	git log --first-parent ${LAST_TAG}..${BUILD_TAG} \
+		| grep '\[[^0-9]*[0-9][0-9][0-9][0-9][0-9]*[^0-9]'  \
+		| sed 's/.*\[[^0-9]*\([0-9][0-9][0-9][0-9][0-9]*\)[^0-9].*$/\1/g' >>/tmp/bug_list_$$.txt
+done
+
+rm -f /tmp/bug_info_$$.txt
+
+for BUG in $( cat /tmp/bug_list_$$.txt | sort -n -u ); do
+	BUGT2=/tmp/buginfo_${BUG}_$$.txt
+	curl -k https://bugs.eclipse.org/bugs/show_bug.cgi?id=${BUG}\&ctype=xml >$BUGT2 2>/dev/null
+	TITLE=$( grep short_desc $BUGT2 | sed 's/^.*<short_desc.//g' | sed 's/<\/short_desc.*$//g' )
+    STATUS=$( grep bug_status $BUGT2 | sed 's/^.*<bug_status.//g' | sed 's/<\/bug_status.*$//g' )
+    if [ RESOLVED = "$STATUS" -o VERIFIED = "$STATUS" ]; then
+        STATUS=$( grep '<resolution>' $BUGT2 | sed 's/^.*<resolution.//g' | sed 's/<\/resolution.*$//g' )
+    fi
+    echo + Bug $BUG - $TITLE \(${STATUS}\) >>/tmp/bug_info_$$.txt
+done
+
+echo The build contains the following changes:
+cat /tmp/bug_info_$$.txt
+echo ""
+echo The following projects have changed:
+cat /tmp/proj_changed_$$.txt | sort -u
diff --git a/plugins/org.eclipse.datatools.releng.builder/prepare.sh b/plugins/org.eclipse.datatools.releng.builder/prepare.sh
new file mode 100755
index 0000000..4a50568
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/prepare.sh
@@ -0,0 +1,16 @@
+folder=/home/adb/releng.dtp.1120
+rm -rf $folder/src/plugins/*
+rm -rf $folder/src/updateJars
+rm -rf $folder/src/features/*
+rm -rf $folder/src/maps/*
+rm -rf $folder/src/org.eclipse.datatools.build
+rm -rf $folder/src/org.eclipse.datatools.releng
+rm -rf $folder/src/*.jar
+rm -rf $folder/src/nestedJars
+
+rm -rf $folder/src/scmCache
+#rm -rf $folder/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.7.0.v20110512-1320/scripts/scmCache/*
+
+rm -rf $folder/src/tmpsite* $folder/src/*.properties $folder/src/*.txt $folder/src/*.xml $folder/src/dtp.sc
+rm -f  $folder/org.eclipse.datatools.releng.builder/monitor.properties
+rm -f /home/adb/releng/BIRTOutput/dtp.output/1.12.0/monitor.properties
diff --git a/plugins/org.eclipse.datatools.releng.builder/uploadScripts/dtplogupload.1.12.0.xml b/plugins/org.eclipse.datatools.releng.builder/uploadScripts/dtplogupload.1.12.0.xml
new file mode 100644
index 0000000..ce729b1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/uploadScripts/dtplogupload.1.12.0.xml
@@ -0,0 +1,56 @@
+<!--
+ *************************************************************************
+ * Copyright (c) 2004, 2014 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial implementation
+ *  
+ *************************************************************************
+-->
+
+<project default="main">
+
+        <property name="username" value="xgu"/>
+        <property name="password" value="xx"/>
+        <property name="hostname" value="build.eclipse.org"/>
+        <property name="eclipse_dtp_path" value="~/downloads/datatools/downloads/drops/N_DTP_1.12.0"/>
+        <property name="buildDir" value="/home/adb/releng.dtp.1120/org.eclipse.datatools.releng.builder"/>
+        <property name="local_upload_path" value="${buildDir}/uploadScripts/workdir"/>
+        <property name="buildVersionLog" value="build.1.12.0.log"/>
+        <property name="up_status" value="start"/>
+
+        <target name="main">
+                      
+          <antcall target="copytolocal"/>
+          <antcall target="copytoeclipse"/>
+          
+        </target>        
+
+
+        <target name="copytolocal">
+           <tstamp>
+               <format property="dtplog.upload.start" pattern="yyyy-MM-dd HH:mm:ss"/>
+           </tstamp>
+           <echo message="Start to dtp log upload at ${dtplog.upload.start}"/>
+           
+           <copy file="${buildDir}/adb.log" 
+                 tofile="${local_upload_path}/${buildVersionLog}" overwrite="true"/>
+        </target>
+
+        <target name="copytoeclipse">   
+           <echo file="${local_upload_path}/${buildVersionLog}" append="true">
+              ${up_status} DTP Upload... 
+           </echo>
+
+           <scp remoteTofile="${username}:${password}@${hostname}:${eclipse_dtp_path}/build.log" trust="true"
+                file="${local_upload_path}/${buildVersionLog}"/>
+           <sshexec host="${hostname}" username="${username}" password="${password}" trust="true"
+			failonerror="false" 
+                    command="chmod g+w ${eclipse_dtp_path}/build.log" />
+        </target>
+
+</project>
diff --git a/plugins/org.eclipse.datatools.releng.builder/uploadScripts/dtpupload.1.12.0.xml b/plugins/org.eclipse.datatools.releng.builder/uploadScripts/dtpupload.1.12.0.xml
new file mode 100644
index 0000000..ae935d5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.releng.builder/uploadScripts/dtpupload.1.12.0.xml
@@ -0,0 +1,298 @@
+<!--
+ *************************************************************************
+ * Copyright (c) 2004, 2014 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial implementation
+ *  
+ *************************************************************************
+-->
+
+<project default="main">
+
+	<taskdef resource="net/sf/antcontrib/antlib.xml"/>
+        
+        <property name="username" value="xgu"/>
+        <property name="password" value="xx"/>
+	<property name="hostname" value="build.eclipse.org"/>
+	<property name="username_sign" value="${username}"/>
+        <property name="password_sign" value="${password}"/>
+        <property name="hostname_sign" value="build.eclipse.org"/>
+
+        <property name="dtp.buildhome"  value="/home/adb/releng.dtp.1120"/>
+        <property name="dtp.builddir"  value="${dtp.buildhome}/org.eclipse.datatools.releng.builder"/>
+        <property name="postingDirectory" value="/home/adb/releng/BIRTOutput/dtp.output/1.12.0"/>
+
+        <property name="upload_workdir" value="${dtp.builddir}/uploadScripts/workdir"/>
+        <property name="sign_path" value="${upload_workdir}/UpdateSiteUpload"/>
+        <property name="LocalUpdatesiteDir" value="${upload_workdir}/UpdateSite/dtp_1.12.0"/>
+	<property name="DTP.website.repo"  value="${dtp.builddir}/uploadScripts/datatools"/>
+        <property file="${postingDirectory}/monitor.properties"/>
+        <property name="local_dtp_path" value="${postingDirectory}/${buildId}"/>
+        <property name="eclipse_dtp_path" value="~/downloads/datatools/downloads/drops/N_DTP_1.12.0"/>
+        <property name="eclipse_staging_path" value="/home/data/httpd/download-staging.priv/birt"/>
+        <!--property name="local_version" value="RC3"/-->
+        <property name="M_version" value="RC3"/>
+
+
+        <tstamp prefix="timestamp">
+            <format property="date" pattern="yyyyMMdd" locale="en" />
+        </tstamp>
+
+	<target name="checkMonitor">
+            <available property="isUpload" file="${postingDirectory}/monitor.properties" />
+        </target>
+	
+	<target name="main" depends="checkMonitor" if="isUpload">
+           <if>
+             <equals arg1="${compileHasError}" arg2="false"/>
+             <then>
+               <echo file="${dtp.buildhome}/dtpURLmonitor.properties">
+dtpURL=http://download.eclipse.org/datatools/downloads/drops/N_DTP_1.12.0/dtp-1.12.0${M_version}-${timestamp}.zip
+dtpSdkURL=http://download.eclipse.org/datatools/downloads/drops/N_DTP_1.12.0/dtp-sdk-1.12.0${M_version}-${timestamp}.zip
+dtpP2URL=http://download.eclipse.org/datatools/downloads/drops/N_DTP_1.12.0/dtp-p2repo-1.12.0${M_version}-${timestamp}.zip
+file-version=dtp-1.12.0${M_version}-${timestamp}
+SdkFileVersion=dtp-sdk-1.12.0${M_version}-${timestamp}
+P2FileVersion=dtp-p2repo-1.12.0${M_version}-${timestamp}
+currentDay=${timestamp.date}
+               </echo>
+	       <ant antfile="dtplogupload.1.12.0.xml" target="main"/>
+               <antcall target="dtpupload"/>
+               <antcall target="dtpP2upload"/>
+               <!--antcall target="signing"/-->
+               <antcall target="updategitfile"/>
+               <antcall target="inform"/>
+               <antcall target="finishlogupload"/>
+             </then>
+             <elseif>
+               <equals arg1="${compileHasError}" arg2="true"/>
+               <then>
+                 <antcall target="CompileError"/>
+               </then>
+             </elseif>
+             <else>
+               <antcall target="BuildError"/>
+             </else>
+           </if>
+        </target>
+        
+        <target name="dtpupload"> 
+           <property name="temp.dir" value="${dtp.builddir}/uploadScripts/workdir/temp"/>
+           <tstamp>
+               <format property="dtp.upload.start" pattern="yyyy-MM-dd HH:mm:ss"/>
+           </tstamp>
+           <echo message="Start to dtp upload at ${dtp.upload.start}"/>
+           <scp todir="${username}:${password}@${hostname}:${eclipse_dtp_path}" trust="true">
+	     <fileset dir="${local_dtp_path}" includes="dtp-sdk-1.12.0${M_version}-${timestamp}.zip,dtp-1.12.0${M_version}-${timestamp}.zip,dtp-p2repo-1.12.0${M_version}-${timestamp}.zip"/>
+           </scp>
+           <scp remoteTofile="${username}:${password}@${hostname}:${eclipse_dtp_path}/directory_N.txt" trust="true"
+                file="${local_dtp_path}/directory.txt"/>
+           <sshexec host="${hostname}" username="${username}" password="${password}" trust="true" 
+			failonerror="false" 
+                    command="chmod g+w ${eclipse_dtp_path}/dtp-*1.12.0${M_version}-${timestamp}.zip ${eclipse_dtp_path}/directory_N.txt" />
+	</target>
+
+        <target name="dtpP2upload">
+           <sshexec host="${hostname}" username="${username}" password="${password}" trust="true"
+                    command="unzip -q -o ${eclipse_dtp_path}/dtp-p2repo-1.12.0${M_version}-${timestamp}.zip -d ${eclipse_dtp_path}/../N_updates_1.12.0/${buildId}"/>
+           <scp todir="${username}:${password}@${hostname}:${eclipse_dtp_path}/../N_updates_1.12.0" trust="true">
+             <fileset dir="${LocalUpdatesiteDir}" includes="compositeArtifacts.jar,compositeContent.jar"/>
+           </scp>
+           <sshexec host="${hostname}" username="${username}" password="${password}" trust="true"
+			failonerror="false" 
+                    command="chmod -R g+w ${eclipse_dtp_path}/../N_updates_1.12.0/*.jar ${eclipse_dtp_path}/../N_updates_1.12.0/${buildId}" />
+        </target>
+
+        <target name="signing">
+           <sshexec host="${hostname_sign}" username="${username_sign}" password="${password_sign}" trust="true"
+                    command="cd ${eclipse_staging_path};cp ${eclipse_dtp_path}/*1.12.0${M_version}-${timestamp}.zip ./;sign dtp-sdk-1.12.0${M_version}-${timestamp}.zip nomail;sign dtp-1.12.0${M_version}-${timestamp}.zip nomail;sign dtp-incubator-sdk-1.12.0${M_version}-${timestamp}.zip nomail;sign dtp-incubator-1.12.0${M_version}-${timestamp}.zip nomail"/>
+           <sleep minutes="50"/>
+           <scp todir="${sign_path}/SignPack" trust="true"
+                file="${username_sign}:${password_sign}@${hostname_sign}:${eclipse_staging_path}/dtp-sdk-1.12.0${M_version}-${timestamp}.zip"/>
+           <copy todir="${local_dtp_path}" failonerror="false" overwrite="true">
+             <fileset dir="${sign_path}/SignPack" includes="dtp-sdk-1.12.0${M_version}-${timestamp}.zip"/>
+           </copy>
+           <scp todir="${sign_path}/SignPack" trust="true"
+                file="${username_sign}:${password_sign}@${hostname_sign}:${eclipse_staging_path}/dtp-1.12.0${M_version}-${timestamp}.zip"/>
+           <copy todir="${local_dtp_path}" failonerror="false" overwrite="true">
+             <fileset dir="${sign_path}/SignPack" includes="dtp-1.12.0${M_version}-${timestamp}.zip"/>
+           </copy>
+           <scp todir="${sign_path}/SignPack" trust="true"
+                file="${username_sign}:${password_sign}@${hostname_sign}:${eclipse_staging_path}/dtp-incubator-sdk-1.12.0${M_version}-${timestamp}.zip"/>
+           <copy todir="${local_dtp_path}" failonerror="false" overwrite="true">
+             <fileset dir="${sign_path}/SignPack" includes="dtp-incubator-sdk-1.12.0${M_version}-${timestamp}.zip"/>
+           </copy>
+           <scp todir="${sign_path}/SignPack" trust="true"
+                file="${username_sign}:${password_sign}@${hostname_sign}:${eclipse_staging_path}/dtp-incubator-1.12.0${M_version}-${timestamp}.zip"/>
+           <copy todir="${local_dtp_path}" failonerror="false" overwrite="true">
+             <fileset dir="${sign_path}/SignPack" includes="dtp-incubator-1.12.0${M_version}-${timestamp}.zip"/>
+           </copy>
+           <scp todir="${username}:${password}@${hostname}:${eclipse_dtp_path}" trust="true">
+             <fileset dir="${sign_path}/SignPack" includes="dtp-sdk-1.12.0${M_version}-${timestamp}.zip,dtp-1.12.0${M_version}-${timestamp}.zip,dtp-incubator-sdk-1.12.0${M_version}-${timestamp}.zip,dtp-incubator-1.12.0${M_version}-${timestamp}.zip,directory.txt"/>
+           </scp>
+       </target>
+      
+        <target name="updategitfile">
+	   <property name="integrationBuild" value="false"/>
+           <property file="lastmonitor_N_1120.properties"/>
+           <property file="lastmonitor_I_1120.properties"/>
+           <tstamp>
+               <format property="downloads.php.pattern" pattern="M/d/yy"/> 
+           </tstamp>
+
+           <!--cvs command="update -C downloads.php" dest="www/datatools"/-->
+	   <echo message="Git pull ${DTP.website.repo}"/>
+           <exec executable="git" dir="${DTP.website.repo}">
+             <arg line="pull origin master" />
+           </exec>
+
+           <echo message="Updating downloads.php matching pattern: dtp-sdk-1\.12\.0${lastMversion_N}-${lasttimestamp_N}\.zip(.*)(\s*)DTP 1\.12\.0${lastMversion_N} SDK.*Nightly Build(.*)dtp-sdk-1\.12\.0${lastMversion_N}-${lasttimestamp_N}"/>
+           <replaceregexp file="${DTP.website.repo}/downloads.php"
+                          match="dtp-sdk-1\.12\.0${lastMversion_N}-${lasttimestamp_N}\.zip(.*)(\s*)DTP 1\.12\.0${lastMversion_N} SDK.*Nightly Build(.*)dtp-sdk-1\.12\.0${lastMversion_N}-${lasttimestamp_N}"
+                          replace="dtp-sdk-1.12.0${M_version}-${timestamp}.zip\1\2DTP 1.12.0${M_version} SDK ${downloads.php.pattern} Nightly Build\3dtp-sdk-1.12.0${M_version}-${timestamp}"/>
+           <replaceregexp file="${DTP.website.repo}/downloads.php"
+                          match="dtp-1\.12\.0${lastMversion_N}-${lasttimestamp_N}\.zip(.*)(\s*)DTP 1\.12\.0${lastMversion_N}.*Nightly Build(.*)dtp-1\.12\.0${lastMversion_N}-${lasttimestamp_N}" 
+                          replace="dtp-1.12.0${M_version}-${timestamp}.zip\1\2DTP 1.12.0${M_version} ${downloads.php.pattern} Nightly Build\3dtp-1.12.0${M_version}-${timestamp}"/>
+           <replaceregexp file="${DTP.website.repo}/downloads.php"
+                          match="dtp-p2repo-1\.12\.0${lastMversion_N}-${lasttimestamp_N}\.zip(.*)(\s*)DTP 1\.12\.0${lastMversion_N} P2 Repo.*Nightly Build(.*)dtp-p2repo-1\.12\.0${lastMversion_N}-${lasttimestamp_N}"
+                          replace="dtp-p2repo-1.12.0${M_version}-${timestamp}.zip\1\2DTP 1.12.0${M_version} P2 Repo ${downloads.php.pattern} Nightly Build\3dtp-p2repo-1.12.0${M_version}-${timestamp}"/>
+           <!--replaceregexp file="${DTP.website.repo}/downloads.php"
+                          match="dtp-incubator-sdk-1\.12\.0${lastMversion_N}-${lasttimestamp_N}\.zip(.*)(\s*)DTP Incubator 1\.12\.0${lastMversion_N} SDK.*Nightly Build(.*)dtp-incubator-sdk-1\.12\.0${lastMversion_N}-${lasttimestamp_N}"
+                          replace="dtp-incubator-sdk-1.12.0${M_version}-${timestamp}.zip\1\2DTP Incubator 1.12.0${M_version} SDK ${downloads.php.pattern} Nightly Build\3dtp-incubator-sdk-1.12.0${M_version}-${timestamp}"/>
+           <replaceregexp file="${DTP.website.repo}/downloads.php"
+                          match="dtp-incubator-1\.12\.0${lastMversion_N}-${lasttimestamp_N}\.zip(.*)(\s*)DTP Incubator 1\.12\.0${lastMversion_N}.*Nightly Build(.*)dtp-incubator-1\.12\.0${lastMversion_N}-${lasttimestamp_N}"
+                          replace="dtp-incubator-1.12.0${M_version}-${timestamp}.zip\1\2DTP Incubator 1.12.0${M_version} ${downloads.php.pattern} Nightly Build\3dtp-incubator-1.12.0${M_version}-${timestamp}"/-->
+           <if>
+	      <equals arg1="${integrationBuild}" arg2="true"/>
+              <then>
+                 <replaceregexp file="${DTP.website.repo}/downloads.php"
+                                match="dtp-sdk-1\.12\.0${lastMversion_I}-${lasttimestamp_I}\.zip(.*)(\s*)DTP 1\.12\.0${lastMversion_I} SDK.*I-Build(.*)dtp-sdk-1\.12\.0${lastMversion_I}-${lasttimestamp_I}"
+                                replace="dtp-sdk-1.12.0${M_version}-${timestamp}.zip\1\2DTP 1.12.0${M_version} SDK ${downloads.php.pattern} I-Build\3dtp-sdk-1.12.0${M_version}-${timestamp}"/>
+                 <replaceregexp file="${DTP.website.repo}/downloads.php"
+                                match="dtp-1\.12\.0${lastMversion_I}-${lasttimestamp_I}\.zip(.*)(\s*)DTP 1\.12\.0${lastMversion_I}.*I-Build(.*)dtp-1\.12\.0${lastMversion_I}-${lasttimestamp_I}"
+                                replace="dtp-1.12.0${M_version}-${timestamp}.zip\1\2DTP 1.12.0${M_version} ${downloads.php.pattern} I-Build\3dtp-1.12.0${M_version}-${timestamp}"/>
+                 <replaceregexp file="${DTP.website.repo}/downloads.php"
+                                match="dtp-p2repo-1\.12\.0${lastMversion_I}-${lasttimestamp_I}\.zip(.*)(\s*)DTP 1\.12\.0${lastMversion_I} P2 Repo.*I-Build(.*)dtp-p2repo-1\.12\.0${lastMversion_I}-${lasttimestamp_I}"
+                                replace="dtp-p2repo-1.12.0${M_version}-${timestamp}.zip\1\2DTP 1.12.0${M_version} P2 Repo ${downloads.php.pattern} I-Build\3dtp-p2repo-1.12.0${M_version}-${timestamp}"/>
+
+                 <scp remoteTofile="${username}:${password}@${hostname}:${eclipse_dtp_path}/directory_I.txt" trust="true"
+                      file="${local_dtp_path}/directory.txt"/>
+           	 <sshexec host="${hostname}" username="${username}" password="${password}" trust="true"
+			failonerror="false" 
+                    command="chmod g+w ${eclipse_dtp_path}/directory_I.txt" />
+              </then>
+           </if>
+           
+           <!--cvs command="commit -m 'update for 1.12.0 nightly build ${buildId}' downloads.php" dest="www/datatools"/-->
+           <exec executable="git" dir="${DTP.website.repo}">
+             <arg line="commit -a -m 'Update for 1.12.0 Nightly Build ${buildId}'" />
+           </exec>
+           <exec executable="git" dir="${DTP.website.repo}">
+             <arg line="push origin master" />
+           </exec>
+
+           <echo file="lastmonitor_N_1120.properties">
+lasttimestamp_N=${timestamp}
+lastMversion_N=${M_version}
+</echo>
+           <if>
+	      <equals arg1="${integrationBuild}" arg2="true"/>
+              <then>
+                 <echo file="lastmonitor_I_1120.properties">
+lasttimestamp_I=${timestamp}
+lastMversion_I=${M_version}
+</echo>
+              </then>
+           </if>
+        </target>
+
+
+        <target name="inform">
+ 
+           <mail from="DAILYBUILD@QA-SHA" tolist="xgu@actuate.com,lchan@actuate.com,bpayton@us.ibm.com" mailport="5025" 
+                 subject="Today's DTP 1.12.0 build is available (${buildId})">
+             <message>
+Hi All,
+
+Today's DTP build is available at:
+
+SDK package: http://www.eclipse.org/downloads/download.php?file=/datatools/downloads/drops/N_DTP_1.12.0/dtp-sdk-1.12.0${M_version}-${timestamp}.zip  
+
+Non-SDK package: http://www.eclipse.org/downloads/download.php?file=/datatools/downloads/drops/N_DTP_1.12.0/dtp-1.12.0${M_version}-${timestamp}.zip  
+
+P2 Repo package: http://www.eclipse.org/downloads/download.php?file=/datatools/downloads/drops/N_DTP_1.12.0/dtp-p2repo-1.12.0${M_version}-${timestamp}.zip  
+             </message>
+           </mail>
+        </target>
+
+        <target name="finishlogupload">
+          <ant antfile="dtplogupload.1.12.0.xml" target="copytoeclipse">
+            <property name="up_status" value="finish"/>
+          </ant>
+        </target> 
+
+        <target name="CompileError">
+                <property file="${dtp.builddir}/monitor.properties" />
+                <property file="${dtp.builddir}/config.properties" />
+                <echo message="${mail.port}"/>
+                <echo message="${buildId}"/>
+                <echo message="${COMPILE.ERROR.RECIPIENTS}"/>
+                <echo message="${mail.from}"/>
+                <echo message="${replyto.address}"/>
+                <echo message="${error.plugin.list}"/>
+
+                <echo message="compile log location: ${postingDirectory}/${buildId}/compilelogs/plugins"/>
+                <mail mailport="${mail.port}" subject="Compile errors found in Today's Datatools 1.12.0 Build (BuildId: ${buildId} )" tolist="${COMPILE.ERROR.RECIPIENTS}">
+                    <from address="${mail.from}"/>
+                    <replyto address="${replyto.address}"/>
+                    <message>
+
+Hi All,
+
+Compile errors are found in today's DTP 1.12.0 build(BuildId: ${buildId}):
+
+${error.plugin.list}
+
+Please see the attachments for details.
+
+Have a nice day!
+
+                    </message>
+
+                  <attachments>
+                    <fileset dir="${postingDirectory}/${buildId}/compilelogs/plugins">
+                       <include name="*compilelog.html"/>
+                    </fileset>
+                  </attachments>
+                </mail>
+
+        </target>
+
+        <target name="BuildError">
+                <property file="${dtp.builddir}/monitor.properties" />
+                <property file="${dtp.builddir}/config.properties" />
+                <mail mailport="${mail.port}" subject="Build errors found in Today's Datatools 1.12.0 Build (BuildId: ${buildId} )" tolist="${BUILD.ERROR.RECIPIENTS}">
+                    <from address="${mail.from}"/>
+                    <replyto address="${replyto.address}"/>
+                    <message>
+
+Hi All,
+
+Build errors are found in today's DTP 1.12.0 build(BuildId: ${buildId}):
+
+Please refer to build.log for details: 
+
+http://www.eclipse.org/downloads/download.php?file=/datatools/downloads/drops/N_DTP_1.12.0/build.log
+
+Have a nice day!
+
+                    </message>
+                </mail>
+
+        </target>
+
+</project>
diff --git a/plugins/org.eclipse.datatools.sdk/.project b/plugins/org.eclipse.datatools.sdk/.project
new file mode 100644
index 0000000..e2b7ca8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sdk/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.sdk</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.datatools.sdk/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.sdk/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..0587ac2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sdk/META-INF/MANIFEST.MF
@@ -0,0 +1,17 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: DTP SDK Plug-in
+Bundle-SymbolicName: org.eclipse.datatools.sdk;singleton:=true
+Bundle-Version: 1.9.0.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.core.resources,
+ org.eclipse.pde.ui,
+ org.eclipse.pde.ui.templates,
+ org.eclipse.ui.views,
+ org.eclipse.datatools.connectivity
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
+Bundle-Localization: plugin
+Bundle-Vendor: Eclipse Data Tools Platform
diff --git a/plugins/org.eclipse.datatools.sdk/about.html b/plugins/org.eclipse.datatools.sdk/about.html
new file mode 100644
index 0000000..c23c946
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sdk/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2008</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.sdk/about.ini b/plugins/org.eclipse.datatools.sdk/about.ini
new file mode 100644
index 0000000..76a0356
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sdk/about.ini
@@ -0,0 +1,27 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%blurb
+
+# Property "windowImage" contains path to window icon (16x16)
+# needed for primary features only
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=eclipse32.png
+
+# Property "aboutImage" contains path to product image (500x330 or 115x164)
+# needed for primary features only
+
+# Property "appName" contains name of the application (not translated)
+# needed for primary features only
+
+# Property "welcomePerspective" contains the id of the perspective in which the
+# welcome page is to be opened.
+# optional
+
+# Property "tipsAndTricksHref" contains the Help topic href to a tips and tricks page 
+# optional
diff --git a/plugins/org.eclipse.datatools.sdk/about.mappings b/plugins/org.eclipse.datatools.sdk/about.mappings
new file mode 100644
index 0000000..0aacd82
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sdk/about.mappings
@@ -0,0 +1,6 @@
+# about.mappings

+# contains fill-ins for about.properties

+# java.io.Properties file (ISO 8859-1 with "\" escapes)

+# This file does not need to be translated.

+

+0=@BUILD@
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.sdk/about.properties b/plugins/org.eclipse.datatools.sdk/about.properties
new file mode 100644
index 0000000..2dd4309
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sdk/about.properties
@@ -0,0 +1,19 @@
+###############################################################################
+# Copyright (c) 2006 Sybase, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     Sybase, Inc. - initial API and implementation
+###############################################################################
+blurb=Eclipse Data Tools Platform SDK\n\
+\n\
+Visit http://www.eclipse.org/datatools\n\
+\n\
+Copyright (c) 2017 Eclipse Contributors\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html
diff --git a/plugins/org.eclipse.datatools.sdk/build.properties b/plugins/org.eclipse.datatools.sdk/build.properties
new file mode 100644
index 0000000..0801ad5
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sdk/build.properties
@@ -0,0 +1,8 @@
+bin.includes = META-INF/,\
+               about.html,\
+               about.ini,\
+               about.mappings,\
+               about.properties,\
+               eclipse32.png
+src.dir =		src/
+src.includes = about.html
diff --git a/plugins/org.eclipse.datatools.sdk/eclipse32.png b/plugins/org.eclipse.datatools.sdk/eclipse32.png
new file mode 100644
index 0000000..568fac1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sdk/eclipse32.png
Binary files differ
diff --git a/releng.new/build.properties b/releng.new/build.properties
new file mode 100644
index 0000000..80e8675
--- /dev/null
+++ b/releng.new/build.properties
@@ -0,0 +1,136 @@
+# The name of the product for display purposes
+
+product.name = Eclipse Data Tools
+
+# The prefix to use when creating the product repository archive and other packages
+
+product.package.file.prefix = dtp
+
+# The feature that includes all other features
+
+root.feature = org.eclipse.datatools
+
+# The feature whose version determines the overall product version
+
+version.master.feature = org.eclipse.datatools.connectivity.feature
+
+# The names of the supported target configurations, separated by commas
+
+configurations = oxygen,oxygen.1a,oxygen.2,photon
+
+# The minimal (oldest) supported configuration
+
+configuration.min = oxygen
+
+# The maximum (newest) supported configuration
+
+configuration.max = photon
+
+# The configuration to use for the main build as well as for dev-eclipse and dev-target
+
+configuration.recommended = oxygen.2
+
+# The Mylyn and EGit repositories (used only for dev-eclipse, so kept at the latest version in all configurations)
+
+rep.dev = \
+${rep.eclipse.mylyn-latest},\
+${rep.eclipse.egit-latest}
+
+# The photon configuration
+
+photon.repositories = \
+${rep.eclipse-photon},\
+${rep.eclipse.gef-photon},\
+${rep.eclipse.emf-photon},\
+${rep.eclipse.orbit-photon},\
+file:../../org.eclipse.datatools.doc/packaged_jars,\
+${rep.dev}
+
+# The oxygen.2 configuration
+
+oxygen.2.repositories = \
+${rep.eclipse-oxygen.2},\
+${rep.eclipse.gef-oxygen.2},\
+${rep.eclipse.emf-oxygen.2},\
+${rep.eclipse.orbit-oxygen.2},\
+file:../../org.eclipse.datatools.doc/packaged_jars,\
+${rep.dev}
+
+# The oxygen.1a configuration
+
+oxygen.1a.repositories = \
+${rep.eclipse-oxygen.1a},\
+${rep.eclipse.gef-oxygen.1a},\
+${rep.eclipse.emf-oxygen.1a},\
+${rep.eclipse.orbit-oxygen.1a},\
+file:../../org.eclipse.datatools.doc/packaged_jars,\
+${rep.dev}
+
+# The oxygen configuration
+
+oxygen.repositories = \
+${rep.eclipse-oxygen},\
+${rep.eclipse.gef-oxygen},\
+${rep.eclipse.emf-oxygen},\
+${rep.eclipse.orbit-oxygen},\
+file:../../org.eclipse.datatools.doc/packaged_jars,\
+${rep.dev}
+
+# Automatically set Require-Bundle version ranges
+
+require.bundle.version.constraint.excludes = .*\.source
+
+require.bundle.version.constraint.rules = \
+com.ibm.icu=[M1.M2.M3,T1+10.0.0);\
+*=[M1.M2.M3,T1+1.0.0)
+
+# Verify that Bundle-RequiredExecutionEnvironment is set to the specified value
+
+verify.bundle.required.env = true
+verify.bundle.required.env.value = JavaSE-1.8
+
+# The components to install in build's target platform
+
+iu.orbit = net.sourceforge.lpg.lpgjavaruntime,\
+org.apache.xerces,\
+javax.wsdl/1.5.1.v201012040544,\
+org.apache.lucene.core/6.1.0.v20161115-1612,\
+org.apache.lucene.queryparser/6.1.0.v20161115-1612,\
+org.apache.lucene.analyzers-common/6.1.0.v20161115-1612
+
+iu.packaged.jars = org.eclipse.datatools.common.doc.user,\
+org.eclipse.datatools.connectivity.doc.user.contexts,\
+org.eclipse.datatools.connectivity.doc.user,\
+org.eclipse.datatools.doc.user,\
+org.eclipse.datatools.intro,\
+org.eclipse.datatools.sqltools.doc.user.contexts,\
+org.eclipse.datatools.sqltools.doc.user
+
+iu.build.target = \
+${iu.eclipse.jdt},\
+${iu.eclipse.pde},\
+${iu.eclipse.emf},\
+${iu.eclipse.gef},\
+${iu.orbit},\
+${iu.packaged.jars}
+
+# The components to install in dev-target (typically the same as build target, but with source)
+
+iu.dev.target = \
+${iu.eclipse.platform.source},\
+${iu.eclipse.jdt},\
+${iu.eclipse.jdt.source},\
+${iu.eclipse.pde},\
+${iu.eclipse.pde.source},\
+${iu.eclipse.emf.sdk},\
+${iu.eclipse.gef.sdk},\
+${iu.orbit},\
+${iu.packaged.jars}
+
+# The components to install in dev-eclipse
+
+iu.dev.env = \
+${iu.eclipse.jdt},\
+${iu.eclipse.pde},\
+${iu.eclipse.mylyn},\
+${iu.eclipse.egit}
diff --git a/releng.new/build.xml b/releng.new/build.xml
new file mode 100644
index 0000000..22683cd
--- /dev/null
+++ b/releng.new/build.xml
@@ -0,0 +1,121 @@
+<!-- 
+ ******************************************************************************
+ * Copyright (c) 2017 Oracle
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Konstantin Komissarchik - initial implementation and ongoing maintenance
+ ******************************************************************************
+-->
+
+<project name="dtp" default="full-build">
+
+  <dirname property="root.dir" file="${ant.file.dtp}"/>
+  <property name="build.dir" value="${root.dir}/build"/>
+  <property name="releng.dir" value="${root.dir}/releng"/>
+
+  
+  <delete dir="releng/corundum" quiet="true"/>
+  <property name="corundum-url" value="https://hudson.eclipse.org/sapphire/job/Corundum/lastSuccessfulBuild/artifact/corundum.zip"/>
+  <get src="${corundum-url}" dest="releng/corundum.zip" usetimestamp="true"/>
+  <unzip src="releng/corundum.zip" dest="releng/corundum"/>
+    
+  <import file="releng/corundum/corundum.xml"/>
+    
+  <import>
+    <fileset dir="releng/corundum/extensions/eclipse.org" includes="*.xml"/>
+  </import>
+  
+  
+  <!--
+    locate-source
+  -->
+  
+  <macrodef name="locate-source">
+    <sequential>
+
+      <if>
+        <not>
+          <and>
+            <isset property="source.location"/>
+            <available file="${source.location}"/>
+          </and>
+        </not>
+        <then>
+        
+          <echo message="Copying plugins and features into a consolidated source folder..."/>
+          
+          <var name="source.location" value="${build.dir}/source"/>
+              
+          <delete dir="${source.location}" quiet="true"/>
+          <mkdir dir="${source.location}"/>
+              
+          <for param="git.repo">
+            <dirset dir="${root.dir}/../.." includes="org.eclipse.*" excludes="org.eclipse.datatools.nl"/>
+            <sequential>
+              <copy todir="${source.location}">
+                <fileset dir="@{git.repo}" includes="plugins/**"/>
+                <fileset dir="@{git.repo}" includes="features/**"/>
+              </copy>
+            </sequential>
+          </for>
+          
+          <copy todir="${source.location}/features">
+            <fileset dir="${root.dir}/releng" includes="org.eclipse.datatools/**"/>
+          </copy>
+          
+        </then>
+      </if>
+
+    </sequential>
+  </macrodef>
+
+
+  <!--
+    clean-source
+  -->
+  
+  <macrodef name="clean-source">
+    <sequential>
+
+      <delete dir="${build.dir}/source" quiet="true"/>
+      <var name="source.location" unset="true"/>
+
+    </sequential>
+  </macrodef>
+
+
+  <!--
+    pre-finalize-repository
+  -->
+  
+  <macrodef name="pre-finalize-repository">
+    <sequential>
+
+      <delete>
+        <fileset dir="${build.dir}/repository">
+          <include name="epl-v10.html"/>
+          <include name="notice.html"/>
+          <include name="${root.feature}_*.jar"/>
+        </fileset>
+      </delete>
+
+      <with-target name="${configuration.recommended}">
+        <for list="javax.wsdl,javax.xml,net.sourceforge.lpg.lpgjavaruntime,org.apache.xerces,org.apache.xml.resolver,org.apache.xml.serializer,org.apache.lucene.core,org.apache.lucene.analyzers-common,org.apache.lucene.queryparser" param="bundle">
+          <sequential>
+            <echo message="Mirroring @{bundle} bundle"/>
+            <find-eclipse-bundle property=".bundle" eclipse="${.target}" bundle="@{bundle}"/>
+            <copy file="${.bundle}" todir="${build.dir}/repository/plugins"/>
+            <var name=".bundle" unset="true"/>
+          </sequential>
+        </for>
+      </with-target>
+      
+    </sequential>
+  </macrodef>
+
+
+</project>
diff --git a/releng.new/releng/.gitignore b/releng.new/releng/.gitignore
new file mode 100644
index 0000000..a58c63a
--- /dev/null
+++ b/releng.new/releng/.gitignore
@@ -0,0 +1,2 @@
+/corundum/
+/corundum.zip
diff --git a/releng.new/releng/org.eclipse.datatools/.project b/releng.new/releng/org.eclipse.datatools/.project
new file mode 100644
index 0000000..3b900d8
--- /dev/null
+++ b/releng.new/releng/org.eclipse.datatools/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/releng.new/releng/org.eclipse.datatools/build.properties b/releng.new/releng/org.eclipse.datatools/build.properties
new file mode 100644
index 0000000..64f93a9
--- /dev/null
+++ b/releng.new/releng/org.eclipse.datatools/build.properties
@@ -0,0 +1 @@
+bin.includes = feature.xml
diff --git a/releng.new/releng/org.eclipse.datatools/feature.xml b/releng.new/releng/org.eclipse.datatools/feature.xml
new file mode 100644
index 0000000..64e001c
--- /dev/null
+++ b/releng.new/releng/org.eclipse.datatools/feature.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.datatools"
+      label="%featureName"
+      version="1.14.1.qualifier"
+      provider-name="%providerName">
+
+   <includes
+         id="org.eclipse.datatools.sdk.feature"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.datatools.enablement.sdk.feature"
+         version="0.0.0"/>
+
+</feature>
diff --git a/releng.new/releng/site.xml b/releng.new/releng/site.xml
new file mode 100644
index 0000000..c8e0821
--- /dev/null
+++ b/releng.new/releng/site.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<site>
+   <feature url="features/org.eclipse.datatools.sdk.feature_##version##.jar" id="org.eclipse.datatools.sdk.feature" version="##version##">
+      <category name="org.eclipse.datatools"/>
+   </feature>
+   <feature url="features/org.eclipse.datatools.enablement.sdk.feature_##version.jar" id="org.eclipse.datatools.enablement.sdk.feature" version="##version##">
+      <category name="org.eclipse.datatools"/>
+   </feature>
+   <category-def name="org.eclipse.datatools" label="Eclipse Data Tools">
+      <description>
+         Tools for working with databases in Eclipse.
+      </description>
+   </category-def>
+</site>
diff --git a/releng/org.eclipse.datatools.connectivity.releng/.project b/releng/org.eclipse.datatools.connectivity.releng/.project
new file mode 100644
index 0000000..76993bd
--- /dev/null
+++ b/releng/org.eclipse.datatools.connectivity.releng/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.releng</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.wst.common.project.facet.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+	</natures>
+</projectDescription>
diff --git a/releng/org.eclipse.datatools.connectivity.releng/maps/connectivity-plugins.map b/releng/org.eclipse.datatools.connectivity.releng/maps/connectivity-plugins.map
new file mode 100644
index 0000000..16e4170
--- /dev/null
+++ b/releng/org.eclipse.datatools.connectivity.releng/maps/connectivity-plugins.map
@@ -0,0 +1,21 @@
+plugin@org.eclipse.datatools.connectivity=GIT,tag=v201401230755,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.connectivity.git,path=plugins/org.eclipse.datatools.connectivity

+plugin@org.eclipse.datatools.connectivity.apache.derby.dbdefinition=GIT,tag=v201107221459,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.connectivity.git,path=plugins/org.eclipse.datatools.connectivity.apache.derby.dbdefinition

+plugin@org.eclipse.datatools.connectivity.apache.derby.ui=GIT,tag=v201107221459,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.connectivity.git,path=plugins/org.eclipse.datatools.connectivity.apache.derby.ui

+plugin@org.eclipse.datatools.connectivity.apache.derby=GIT,tag=v201212070447,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.connectivity.git,path=plugins/org.eclipse.datatools.connectivity.apache.derby

+plugin@org.eclipse.datatools.connectivity.console.profile=GIT,tag=v201109250955,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.connectivity.git,path=plugins/org.eclipse.datatools.connectivity.console.profile

+plugin@org.eclipse.datatools.connectivity.db.generic.ui=GIT,tag=v201211200622,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.connectivity.git,path=plugins/org.eclipse.datatools.connectivity.db.generic.ui

+plugin@org.eclipse.datatools.connectivity.db.generic=GIT,tag=v201107221459,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.connectivity.git,path=plugins/org.eclipse.datatools.connectivity.db.generic

+plugin@org.eclipse.datatools.connectivity.dbdefinition.genericJDBC=GIT,tag=v201310181001,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.connectivity.git,path=plugins/org.eclipse.datatools.connectivity.dbdefinition.genericJDBC

+plugin@org.eclipse.datatools.connectivity.ui=GIT,tag=v201212070447,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.connectivity.git,path=plugins/org.eclipse.datatools.connectivity.ui

+plugin@org.eclipse.datatools.connectivity.ui.templates=GIT,tag=v201205240353,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.connectivity.git,path=plugins/org.eclipse.datatools.connectivity.ui.templates

+plugin@org.eclipse.datatools.connectivity.ui.dse=GIT,tag=v201212070447,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.connectivity.git,path=plugins/org.eclipse.datatools.connectivity.ui.dse

+plugin@org.eclipse.datatools.connectivity.sqm.core=GIT,tag=v201401230755,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.connectivity.git,path=plugins/org.eclipse.datatools.connectivity.sqm.core

+plugin@org.eclipse.datatools.connectivity.sqm.core.ui=GIT,tag=v201212070447,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.connectivity.git,path=plugins/org.eclipse.datatools.connectivity.sqm.core.ui

+plugin@org.eclipse.datatools.connectivity.sqm.server.ui=GIT,tag=v201212070447,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.connectivity.git,path=plugins/org.eclipse.datatools.connectivity.sqm.server.ui

+plugin@org.eclipse.datatools.connectivity.oda=GIT,tag=v201405301249,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.connectivity.git,path=plugins/org.eclipse.datatools.connectivity.oda

+plugin@org.eclipse.datatools.connectivity.oda.template.ui=GIT,tag=v201403131814,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.connectivity.git,path=plugins/org.eclipse.datatools.connectivity.oda.template.ui

+plugin@org.eclipse.datatools.connectivity.oda.profile=GIT,tag=v201403131814,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.connectivity.git,path=plugins/org.eclipse.datatools.connectivity.oda.profile

+plugin@org.eclipse.datatools.connectivity.oda.design=GIT,tag=v201403131814,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.connectivity.git,path=plugins/org.eclipse.datatools.connectivity.oda.design

+plugin@org.eclipse.datatools.connectivity.oda.design.ui=GIT,tag=v201403131814,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.connectivity.git,path=plugins/org.eclipse.datatools.connectivity.oda.design.ui

+plugin@org.eclipse.datatools.connectivity.oda.consumer=GIT,tag=v201403131814,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.connectivity.git,path=plugins/org.eclipse.datatools.connectivity.oda.consumer

+plugin@org.eclipse.datatools.connectivity.jdt=GIT,tag=v201107221459,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.connectivity.git,path=plugins/org.eclipse.datatools.connectivity.jdt

diff --git a/releng/org.eclipse.datatools.doc.releng/.project b/releng/org.eclipse.datatools.doc.releng/.project
new file mode 100644
index 0000000..b758c6e
--- /dev/null
+++ b/releng/org.eclipse.datatools.doc.releng/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.doc.releng</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.wst.common.project.facet.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+	</natures>
+</projectDescription>
diff --git a/releng/org.eclipse.datatools.doc.releng/maps/end-user-doc-plugins.map b/releng/org.eclipse.datatools.doc.releng/maps/end-user-doc-plugins.map
new file mode 100644
index 0000000..5c7aff3
--- /dev/null
+++ b/releng/org.eclipse.datatools.doc.releng/maps/end-user-doc-plugins.map
@@ -0,0 +1,4 @@
+plugin@org.eclipse.datatools.doc.isv=GIT,tag=v201403111158,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.doc.git,path=plugins/org.eclipse.datatools.doc.isv
+plugin@org.eclipse.datatools.help=GIT,tag=v200906020553,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.doc.git,path=plugins/org.eclipse.datatools.help
+plugin@org.eclipse.datatools.oda.cshelp=GIT,tag=v201309200751,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.doc.git,path=plugins/org.eclipse.datatools.oda.cshelp
+
diff --git a/releng/org.eclipse.datatools.enablement.general.releng/maps/enablement-general-plugins.map b/releng/org.eclipse.datatools.enablement.general.releng/maps/enablement-general-plugins.map
new file mode 100644
index 0000000..d074d93
--- /dev/null
+++ b/releng/org.eclipse.datatools.enablement.general.releng/maps/enablement-general-plugins.map
@@ -0,0 +1 @@
+plugin@org.eclipse.datatools.enablement.jdt.classpath=GIT,tag=v201107221501,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.enablement.general.git,path=plugins/org.eclipse.datatools.enablement.jdt.classpath
diff --git a/releng/org.eclipse.datatools.enablement.hsqldb.releng/.project b/releng/org.eclipse.datatools.enablement.hsqldb.releng/.project
new file mode 100644
index 0000000..17d67ea
--- /dev/null
+++ b/releng/org.eclipse.datatools.enablement.hsqldb.releng/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.datatools.enablement.hsqldb.releng</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+	</buildSpec>

+	<natures>

+	</natures>

+</projectDescription>

diff --git a/releng/org.eclipse.datatools.enablement.hsqldb.releng/maps/enablement-hsqldb-plugins.map b/releng/org.eclipse.datatools.enablement.hsqldb.releng/maps/enablement-hsqldb-plugins.map
new file mode 100644
index 0000000..24d76c0
--- /dev/null
+++ b/releng/org.eclipse.datatools.enablement.hsqldb.releng/maps/enablement-hsqldb-plugins.map
@@ -0,0 +1,3 @@
+plugin@org.eclipse.datatools.enablement.hsqldb.dbdefinition=GIT,tag=v201107221502,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.enablement.hsqldb.git,path=plugins/org.eclipse.datatools.enablement.hsqldb.dbdefinition
+plugin@org.eclipse.datatools.enablement.hsqldb.ui=GIT,tag=v201108120600,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.enablement.hsqldb.git,path=plugins/org.eclipse.datatools.enablement.hsqldb.ui
+plugin@org.eclipse.datatools.enablement.hsqldb=GIT,tag=v201107221502,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.enablement.hsqldb.git,path=plugins/org.eclipse.datatools.enablement.hsqldb
diff --git a/releng/org.eclipse.datatools.enablement.ibm.releng/.project b/releng/org.eclipse.datatools.enablement.ibm.releng/.project
new file mode 100644
index 0000000..1083b94
--- /dev/null
+++ b/releng/org.eclipse.datatools.enablement.ibm.releng/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.datatools.enablement.ibm.releng</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+	</buildSpec>

+	<natures>

+	</natures>

+</projectDescription>

diff --git a/releng/org.eclipse.datatools.enablement.ibm.releng/maps/enablement-ibm-plugins.map b/releng/org.eclipse.datatools.enablement.ibm.releng/maps/enablement-ibm-plugins.map
new file mode 100644
index 0000000..69d31c5
--- /dev/null
+++ b/releng/org.eclipse.datatools.enablement.ibm.releng/maps/enablement-ibm-plugins.map
@@ -0,0 +1,15 @@
+plugin@org.eclipse.datatools.enablement.ibm=GIT,tag=v201401170830,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.enablement.ibm.git,path=plugins/org.eclipse.datatools.enablement.ibm
+plugin@org.eclipse.datatools.enablement.ibm.db2=GIT,tag=v201401170830,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.enablement.ibm.git,path=plugins/org.eclipse.datatools.enablement.ibm.db2
+plugin@org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition=GIT,tag=v201107221502,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.enablement.ibm.git,path=plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.dbdefinition
+plugin@org.eclipse.datatools.enablement.ibm.db2.iseries.ui=GIT,tag=v201212120614,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.enablement.ibm.git,path=plugins/org.eclipse.datatools.enablement.ibm.db2.iseries.ui
+plugin@org.eclipse.datatools.enablement.ibm.db2.iseries=GIT,tag=v201107221502,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.enablement.ibm.git,path=plugins/org.eclipse.datatools.enablement.ibm.db2.iseries
+plugin@org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition=GIT,tag=v201405302027,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.enablement.ibm.git,path=plugins/org.eclipse.datatools.enablement.ibm.db2.luw.dbdefinition
+plugin@org.eclipse.datatools.enablement.ibm.db2.luw.ui=GIT,tag=v201402010752,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.enablement.ibm.git,path=plugins/org.eclipse.datatools.enablement.ibm.db2.luw.ui
+plugin@org.eclipse.datatools.enablement.ibm.db2.luw=GIT,tag=v201401170830,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.enablement.ibm.git,path=plugins/org.eclipse.datatools.enablement.ibm.db2.luw
+plugin@org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition=GIT,tag=v201107221502,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.enablement.ibm.git,path=plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.dbdefinition
+plugin@org.eclipse.datatools.enablement.ibm.db2.zseries.ui=GIT,tag=v201202100836,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.enablement.ibm.git,path=plugins/org.eclipse.datatools.enablement.ibm.db2.zseries.ui
+plugin@org.eclipse.datatools.enablement.ibm.db2.zseries=GIT,tag=v201107221502,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.enablement.ibm.git,path=plugins/org.eclipse.datatools.enablement.ibm.db2.zseries
+plugin@org.eclipse.datatools.enablement.ibm.informix.dbdefinition=GIT,tag=v201107221502,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.enablement.ibm.git,path=plugins/org.eclipse.datatools.enablement.ibm.informix.dbdefinition
+plugin@org.eclipse.datatools.enablement.ibm.informix.ui=GIT,tag=v201202100836,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.enablement.ibm.git,path=plugins/org.eclipse.datatools.enablement.ibm.informix.ui
+plugin@org.eclipse.datatools.enablement.ibm.informix=GIT,tag=v201107221502,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.enablement.ibm.git,path=plugins/org.eclipse.datatools.enablement.ibm.informix
+plugin@org.eclipse.datatools.enablement.ibm.ui=GIT,tag=v201107221502,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.enablement.ibm.git,path=plugins/org.eclipse.datatools.enablement.ibm.ui
diff --git a/releng/org.eclipse.datatools.enablement.ingres.releng/maps/enablement-ingres-plugins.map b/releng/org.eclipse.datatools.enablement.ingres.releng/maps/enablement-ingres-plugins.map
new file mode 100644
index 0000000..eb2ae45
--- /dev/null
+++ b/releng/org.eclipse.datatools.enablement.ingres.releng/maps/enablement-ingres-plugins.map
@@ -0,0 +1,3 @@
+plugin@org.eclipse.datatools.enablement.ingres=GIT,tag=v200906111150,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.enablement.ingres.git,path=plugins/org.eclipse.datatools.enablement.ingres
+plugin@org.eclipse.datatools.enablement.ingres.dbdefinition=GIT,tag=v200906161800,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.enablement.ingres.git,path=plugins/org.eclipse.datatools.enablement.ingres.dbdefinition
+plugin@org.eclipse.datatools.enablement.ingres.ui=GIT,tag=v201105270214,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.enablement.ingres.git,path=plugins/org.eclipse.datatools.enablement.ingres.ui
diff --git a/releng/org.eclipse.datatools.enablement.msft.releng/maps/enablement-msft-plugins.map b/releng/org.eclipse.datatools.enablement.msft.releng/maps/enablement-msft-plugins.map
new file mode 100644
index 0000000..737f948
--- /dev/null
+++ b/releng/org.eclipse.datatools.enablement.msft.releng/maps/enablement-msft-plugins.map
@@ -0,0 +1,3 @@
+plugin@org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition=GIT,tag=v201201240505,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.enablement.msft.git,path=plugins/org.eclipse.datatools.enablement.msft.sqlserver.dbdefinition
+plugin@org.eclipse.datatools.enablement.msft.sqlserver.ui=GIT,tag=v201308031011,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.enablement.msft.git,path=plugins/org.eclipse.datatools.enablement.msft.sqlserver.ui
+plugin@org.eclipse.datatools.enablement.msft.sqlserver=GIT,tag=v201308161009,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.enablement.msft.git,path=plugins/org.eclipse.datatools.enablement.msft.sqlserver
diff --git a/releng/org.eclipse.datatools.enablement.mysql.releng/maps/enablement-mysql-plugins.map b/releng/org.eclipse.datatools.enablement.mysql.releng/maps/enablement-mysql-plugins.map
new file mode 100644
index 0000000..b60a48c
--- /dev/null
+++ b/releng/org.eclipse.datatools.enablement.mysql.releng/maps/enablement-mysql-plugins.map
@@ -0,0 +1,3 @@
+plugin@org.eclipse.datatools.enablement.mysql.dbdefinition=GIT,tag=v201109022331,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.enablement.mysql.git,path=plugins/org.eclipse.datatools.enablement.mysql.dbdefinition
+plugin@org.eclipse.datatools.enablement.mysql.ui=GIT,tag=v201109022331,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.enablement.mysql.git,path=plugins/org.eclipse.datatools.enablement.mysql.ui
+plugin@org.eclipse.datatools.enablement.mysql=GIT,tag=v201212120617,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.enablement.mysql.git,path=plugins/org.eclipse.datatools.enablement.mysql
diff --git a/releng/org.eclipse.datatools.releng/.gitignore b/releng/org.eclipse.datatools.releng/.gitignore
new file mode 100644
index 0000000..3a4edf6
--- /dev/null
+++ b/releng/org.eclipse.datatools.releng/.gitignore
@@ -0,0 +1 @@
+.project
diff --git a/releng/org.eclipse.datatools.releng/maps/dtp-features.map b/releng/org.eclipse.datatools.releng/maps/dtp-features.map
new file mode 100644
index 0000000..8818f74
--- /dev/null
+++ b/releng/org.eclipse.datatools.releng/maps/dtp-features.map
@@ -0,0 +1,53 @@
+!**************** SDK FEATURES **************************
+feature@org.eclipse.datatools.sdk-all.feature=GIT,tag=v201405281819,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.sdk-all.feature
+feature@org.eclipse.datatools.enablement.sdk.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.enablement.sdk.feature
+feature@org.eclipse.datatools.sdk.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.sdk.feature
+
+!**************** CONNECTIVITY FEATURES *****************
+feature@org.eclipse.datatools.connectivity.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.connectivity.feature
+feature@org.eclipse.datatools.connectivity.oda.designer.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.connectivity.oda.designer.feature
+feature@org.eclipse.datatools.connectivity.oda.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.connectivity.oda.feature
+feature@org.eclipse.datatools.connectivity.oda.designer.core.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.connectivity.oda.designer.core.feature
+
+!**************** ENABLEMENT FEATURES *******************
+feature@org.eclipse.datatools.enablement.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.enablement.feature
+feature@org.eclipse.datatools.enablement.apache.derby.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.enablement.apache.derby.feature
+feature@org.eclipse.datatools.enablement.hsqldb.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.enablement.hsqldb.feature
+feature@org.eclipse.datatools.enablement.ibm.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.enablement.ibm.feature
+feature@org.eclipse.datatools.enablement.jdbc.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.enablement.jdbc.feature
+feature@org.eclipse.datatools.enablement.jdt.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.enablement.jdt.feature
+feature@org.eclipse.datatools.enablement.msft.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.enablement.msft.feature
+feature@org.eclipse.datatools.enablement.mysql.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.enablement.mysql.feature
+feature@org.eclipse.datatools.enablement.oda.designer.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.enablement.oda.designer.feature
+feature@org.eclipse.datatools.enablement.oda.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.enablement.oda.feature
+feature@org.eclipse.datatools.enablement.oracle.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.enablement.oracle.feature
+feature@org.eclipse.datatools.enablement.postgresql.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.enablement.postgresql.feature
+feature@org.eclipse.datatools.enablement.sap.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.enablement.sap.feature
+feature@org.eclipse.datatools.enablement.sybase.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.enablement.sybase.feature
+feature@org.eclipse.datatools.enablement.ingres.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.enablement.ingres.feature
+feature@org.eclipse.datatools.enablement.sqlite.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.enablement.sqlite.feature
+feature@org.eclipse.datatools.enablement.oda.ecore.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.enablement.oda.ecore.feature
+feature@org.eclipse.datatools.enablement.oda.ecore.sdk.feature=GIT,tag=v201402250828,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.enablement.oda.ecore.sdk.feature
+
+!**************** SQLDEVTOOLS FEATURES ****************
+feature@org.eclipse.datatools.sqldevtools.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.sqldevtools.feature
+feature@org.eclipse.datatools.sqldevtools.data.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.sqldevtools.data.feature
+feature@org.eclipse.datatools.sqldevtools.ddl.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.sqldevtools.ddl.feature
+feature@org.eclipse.datatools.sqldevtools.ddlgen.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.sqldevtools.ddlgen.feature
+feature@org.eclipse.datatools.sqldevtools.parsers.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.sqldevtools.parsers.feature
+feature@org.eclipse.datatools.sqldevtools.results.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.sqldevtools.results.feature
+feature@org.eclipse.datatools.sqldevtools.sqlbuilder.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.sqldevtools.sqlbuilder.feature
+feature@org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature
+
+!**************** MODELBASE FEATURES ******************
+feature@org.eclipse.datatools.modelbase.feature=GIT,tag=v201406061321,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.modelbase.feature
+
+!**************** DOCUMENT FEATURES *******************
+feature@org.eclipse.datatools.intro=GIT,tag=v201405281819,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.intro
+feature@org.eclipse.datatools.doc.user=GIT,tag=v201405281819,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.doc.user
+feature@org.eclipse.datatools.common.doc.user=GIT,tag=v201405281819,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.common.doc.user
+feature@org.eclipse.datatools.connectivity.doc.user=GIT,tag=v201405281819,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.connectivity.doc.user
+feature@org.eclipse.datatools.sqltools.doc.user=GIT,tag=v201405281819,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=features/org.eclipse.datatools.sqltools.doc.user
+
+plugin@org.eclipse.datatools.sdk=GIT,tag=v200906161850,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=plugins/org.eclipse.datatools.sdk
+plugin@org.eclipse.datatools.enablement.finfo=GIT,tag=v200906161800,repo=git://git.eclipse.org/gitroot/datatools/org.eclipse.datatools.build.git,path=plugins/org.eclipse.datatools.enablement.finfo
diff --git a/releng/org.eclipse.datatools.releng/maps/orbit-bundles.map b/releng/org.eclipse.datatools.releng/maps/orbit-bundles.map
new file mode 100644
index 0000000..04bd92f
--- /dev/null
+++ b/releng/org.eclipse.datatools.releng/maps/orbit-bundles.map
@@ -0,0 +1,17 @@
+plugin@org.apache.xerces,2.9.0=GET,http://download.eclipse.org/tools/orbit/downloads/drops/R20140114142710/repository/plugins/org.apache.xerces_2.9.0.v201101211617.jar

+

+

+plugin@org.apache.xml.resolver,1.2.0=GET,http://download.eclipse.org/tools/orbit/downloads/drops/R20140114142710/repository/plugins/org.apache.xml.resolver_1.2.0.v201005080400.jar

+

+plugin@org.apache.xml.serializer,2.7.1=GET,http://download.eclipse.org/tools/orbit/downloads/drops/R20140114142710/repository/plugins/org.apache.xml.serializer_2.7.1.v201005080400.jar

+

+plugin@org.apache.xml.serializer,2.7.1=GET,http://download.eclipse.org/tools/orbit/downloads/drops/R20140114142710/repository/plugins/org.apache.xml.serializer_2.7.1.v201005080400.jar

+

+plugin@javax.xml,1.3.4=GET,http://download.eclipse.org/tools/orbit/downloads/drops/R20140114142710/repository/plugins/javax.xml_1.3.4.v201005080400.jar

+

+plugin@net.sourceforge.lpg.lpgjavaruntime,1.1.0=GET,http://download.eclipse.org/tools/orbit/downloads/drops/R20140114142710/repository/plugins/net.sourceforge.lpg.lpgjavaruntime_1.1.0.v201004271650.jar

+

+plugin@org.apache.lucene,2.9.1=GET,http://download.eclipse.org/tools/orbit/downloads/drops/R20140114142710/repository/plugins/org.apache.lucene_2.9.1.v201101211721.jar

+

+plugin@javax.wsdl,1.5.1=GET,http://download.eclipse.org/tools/orbit/downloads/drops/R20140114142710/repository/plugins/javax.wsdl_1.5.1.v201012040544.jar

+

diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/.classpath b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/.gitignore b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/.gitignore
new file mode 100644
index 0000000..8b4c519
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/.gitignore
@@ -0,0 +1,4 @@
+*.jar
+bin
+*.scc
+.settings
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/.options b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/.options
new file mode 100644
index 0000000..65f3026
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/.options
@@ -0,0 +1,5 @@
+org.eclipse.datatools.connectivity.oda.consumer.testdriver/debug = true
+org.eclipse.datatools.connectivity.oda.consumer.testdriver/traceLogging/logLevel = OFF
+org.eclipse.datatools.connectivity.oda.consumer.testdriver/traceLogging/logFormatterClass = 
+org.eclipse.datatools.connectivity.oda.consumer.testdriver/traceLogging/logFileNamePrefix = 
+org.eclipse.datatools.connectivity.oda.consumer.testdriver/traceLogging/logDirectory = traceOptionsDir
\ No newline at end of file
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/.project b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/.project
new file mode 100644
index 0000000..48cf153
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.oda.consumer.testdriver</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/META-INF/.gitignore b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/META-INF/.gitignore
new file mode 100644
index 0000000..73ebc4b
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/META-INF/.gitignore
@@ -0,0 +1 @@
+*.scc
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/META-INF/MANIFEST.MF b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..44fa1d9
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: DTP ODA Consumer Test Driver Plug-in
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.oda.consumer.testdriver; singleton:=true
+Bundle-Version: 3.2.1.qualifier
+Bundle-Vendor: Eclipse.org
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.datatools.connectivity.oda;bundle-version="[3.2.1,4.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.3.0,4.0.0)"
+Eclipse-LazyStart: true
+Export-Package: org.eclipse.datatools.connectivity.oda.consumer.testdriver;x-friends:="org.eclipse.datatools.connectivity.oda.consumer.tests"
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/about.html b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/about.html
new file mode 100644
index 0000000..7cc0bf0
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/about.html
@@ -0,0 +1,28 @@
+<html>
+<head>
+<title>About This Content</title>
+</head>
+<body>
+<div>
+<h3>About This Content</h3>
+<p>October 23, 2006</p>
+<h3>License</h3>
+<p>The Eclipse Foundation makes available all content in this plug-in
+(&quot;Content&quot;). Unless otherwise indicated below, the Content is
+provided to you under the terms and conditions of the Eclipse Public License
+Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available at <a
+href="http://www.eclipse.org/org/documents/epl-v10.php">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation,
+the Content is being redistributed by another party (&quot;Redistributor&quot;)
+and different terms and conditions may apply to your use of any object code in
+the Content. Check the RedistributorÂ’s license that was provided with the
+Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source
+code in the Content and such source code may be obtained at <a
+href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+<p>&nbsp;</p>
+</div>
+</body>
+</html>
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/build.properties b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/build.properties
new file mode 100644
index 0000000..826459d
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/build.properties
@@ -0,0 +1,12 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/MANIFEST.MF,\
+               plugin.xml,\
+               about.html
+javac.debug =            on
+javac.source =           1.4
+javac.target =           1.4
+build.result.dir =	 	 ./
+temp.dir =		         ./tempdir/
+plugin.destination =     ./
+download.dir =           ./download/
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/buildAnt.xml b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/buildAnt.xml
new file mode 100644
index 0000000..0942f48
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/buildAnt.xml
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ *************************************************************************
+ * Copyright (c) 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ *  buildAnt.xml
+ *
+ *  Build script for project org.eclipse.datatools.connectivity.oda.consumer.testdriver
+ *
+ *  Usage:
+ *    ant [any one or more of the public targets] 
+ *        -Declipse.home=<your eclipse home> 
+ *		  -Ddtp.home=<your DTP plugins source home>  [optional]
+ *
+ *  Default target is "build.jars".
+ *
+ *  Notes:
+ *  1. classpath need to be set for junit.jar
+ *  2. The build script requires Ant 1.6
+ *
+-->
+
+<project name="org.eclipse.datatools.connectivity.oda.consumer.testdriver" default="download.plugin" basedir=".">
+	<property file="build.properties"/>
+	<property name="module.name" value="org.eclipse.datatools.connectivity.oda.consumer.testdriver"/>
+	<property file="META-INF/MANIFEST.MF" />
+	<property name="plugin.version" value="${Bundle-Version}" />
+	<property name="plugin.package" value="${module.name}_${plugin.version}" />
+
+	<property name="eclipse.home" location="."/>
+	<property name="dtp.home" location="../../plugins/"/>
+
+	<property name="src.dir" value="${source..}"/>
+	<property name="bin.dir" value="${output..}"/>
+	
+	<property name="dtp.oda.plugin" value="org.eclipse.datatools.connectivity.oda" />
+	<property name="dtp.oda.dir" location="${dtp.home}/${dtp.oda.plugin}"/>
+
+	<!-- Class Path -->
+	<path id="class.path">
+		<pathelement path="${bin.dir}"/>
+		<fileset dir="${dtp.oda.dir}">
+			<include name="oda.jar"/>
+			<include name="download/${dtp.oda.plugin}_*.jar"/>			
+		</fileset>
+		<!-- Dependencies on Eclipse installation -->
+		<fileset dir="${eclipse.home}/plugins">
+			<include name="org.eclipse.core.runtime*.jar"/>
+			<include name="org.eclipse.osgi*.jar"/>
+			<include name="com.ibm.icu_*.jar"/>
+		</fileset>
+	</path>
+
+	<target name="compileSource" depends="buildDependency">
+		<mkdir dir="${bin.dir}"/>
+		<!-- compile the source code -->
+		<javac srcdir="${src.dir}"
+			   destdir="${bin.dir}" 
+			   debug="${javac.debug}" 
+			   includeAntRuntime="no" 
+			   source="${javac.source}" 
+			   target="${javac.target}" 
+			   encoding="utf-8">
+			<classpath refid="class.path" />
+		</javac>
+	</target>
+
+	<target name="buildDependency">
+	</target>
+						
+	<target name="clean" description="Clean the plug-in of all the zips, jars and logs created.">
+		<!-- Delete the binary and unit tests directories -->
+		<delete dir="${bin.dir}"/>
+		<delete dir="${temp.dir}"/>
+		<antcall target="clean.download.dir"/>
+		<delete>
+			<fileset dir="${plugin.destination}" includes="${module.name}_*.zip"/>
+		</delete>
+	</target>
+
+	<target name="clean.download.dir" unless="dtp.build">
+		<delete dir="${download.dir}"/>
+	</target>
+
+	<target name="create.download.dir" unless="dtp.build">
+		<mkdir dir="${download.dir}"/>
+	</target>
+	
+	<target name="download.plugin" description="Create a download folder that contains all the files to include in DTP download build.">
+		<antcall target="clean"/>
+		<antcall target="create.download.dir"/>
+		
+		<antcall target="compileSource"/>
+		<antcall target="jar.plugin"/>
+	</target>
+
+	<target name="jar.plugin" >
+		<property file="META-INF/MANIFEST.MF" />
+		<property name="jar.name" value="${plugin.package}.jar" />
+		<jar destfile="${download.dir}/${jar.name}" manifest="./META-INF/MANIFEST.MF">
+			<fileset dir="${bin.dir}">
+				<include name="**/*.class"/>
+				<include name="**/*.txt"/>
+				<include name="**/*.xml"/>
+				<include name="**/*.def"/>
+				<include name="**/*.properties"/>
+			</fileset>
+			<fileset dir="." includes="${bin.includes}"/>
+	    </jar>
+	</target>
+
+</project>
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/plugin.xml b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/plugin.xml
new file mode 100644
index 0000000..016ddcc
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/plugin.xml
@@ -0,0 +1,458 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+     <extension
+         id="org.eclipse.datatools.connectivity.oda.consumer.testdriver"
+         point="org.eclipse.datatools.connectivity.oda.dataSource">
+      <dataSource
+            odaVersion="3.1"
+            driverClass="org.eclipse.datatools.connectivity.oda.consumer.testdriver.TestDriverImpl"
+            setThreadContextClassLoader="false"
+            id="org.eclipse.datatools.connectivity.oda.consumer.testdriver"/>
+      <dataSet id="org.eclipse.datatools.connectivity.oda.consumer.testdriver.dataSet">
+         <dataTypeMapping
+               nativeDataType="CHAR"
+               nativeDataTypeCode="12"
+               odaScalarDataType="String"/>
+         <dataTypeMapping
+               nativeDataType="DATE"
+               nativeDataTypeCode="91"
+               odaScalarDataType="Date"/>
+         <dataTypeMapping
+               nativeDataType="BCD"
+               nativeDataTypeCode="3"
+               odaScalarDataType="Decimal"/>
+         <dataTypeMapping
+               nativeDataType="DOUBLE"
+               nativeDataTypeCode="8"
+               odaScalarDataType="Double"/>
+         <dataTypeMapping
+               nativeDataType="INT"
+               nativeDataTypeCode="4"
+               odaScalarDataType="Integer"/>
+         <dataTypeMapping
+               nativeDataType="TIME"
+               nativeDataTypeCode="92"
+               odaScalarDataType="Time"/>
+         <dataTypeMapping
+               nativeDataType="TIMESTAMP"
+               nativeDataTypeCode="93"
+               odaScalarDataType="Timestamp"/>
+         <dataTypeMapping
+               nativeDataType="BLOB"
+               nativeDataTypeCode="97"
+               odaScalarDataType="Blob"/>
+         <dataTypeMapping
+               nativeDataType="CLOB"
+               nativeDataTypeCode="98"
+               odaScalarDataType="Clob"/>
+         <dataTypeMapping
+               nativeDataType="BOOLEAN"
+               nativeDataTypeCode="16"
+               odaScalarDataType="Boolean"/>
+           <dataTypeMapping
+                 nativeDataType="JAVAOBJECT"
+                 nativeDataTypeCode="2000"
+                 odaScalarDataType="JavaObject">
+           </dataTypeMapping>
+      </dataSet>
+
+   </extension>
+     <extension
+           id="dynamicResultSetExtension"
+           point="org.eclipse.datatools.connectivity.oda.dynamicResultSet">
+        <contributor
+              specificationFactoryClass="org.eclipse.datatools.connectivity.oda.consumer.testdriver.spec.impl.MySpecFactory"
+              validatorClass="org.eclipse.datatools.connectivity.oda.consumer.testdriver.spec.impl.ExpressionTester">
+         <supportedDataSetType
+               odaDataSetId="org.eclipse.datatools.connectivity.oda.consumer.testdriver.dataSet"
+               odaDataSourceId="org.eclipse.datatools.connectivity.oda.consumer.testdriver">
+         </supportedDataSetType>
+         <supportedDataSetType
+               odaDataSetId="org.eclipse.datatools.connectivity.oda.consumer.testdriver.jdbc.dbprofile.sqbDataSet"
+               odaDataSourceId="org.eclipse.datatools.connectivity.oda.consumer.testdriver.jdbc.dbprofile">
+         </supportedDataSetType>
+         <supportsRowOrdering></supportsRowOrdering>
+        </contributor>
+        <filterExpressionTypes>
+         <filterType
+              displayName="Equal to"
+              id="0"
+              isNegatable="true"
+              isOptionable="true"
+              maxArguments="*"
+              minArguments="1">
+        </filterType>
+        <filterType
+              class="org.eclipse.datatools.connectivity.oda.consumer.testdriver.spec.impl.MyCustomExpression"
+              displayName="Between"
+              id="1001"
+              isNegatable="true"
+              isOptionable="true"
+              maxArguments="2"
+              minArguments="1">
+           <variableRestriction
+                 variableType="ResultSetColumn">
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="String">
+              </variableOdaDataTypeRestriction>
+              <variableOdaDataTypeRestriction
+                  odaScalarDataType="Integer">
+              </variableOdaDataTypeRestriction>
+         	  <variableOdaDataTypeRestriction
+            	  odaScalarDataType="Double">
+         	  </variableOdaDataTypeRestriction>
+         	  <variableOdaDataTypeRestriction
+               	  odaScalarDataType="Decimal">
+         	  </variableOdaDataTypeRestriction>
+         	  <variableOdaDataTypeRestriction
+               	  odaScalarDataType="Date">
+         	  </variableOdaDataTypeRestriction>
+         	  <variableOdaDataTypeRestriction
+               	  odaScalarDataType="Time">
+         	  </variableOdaDataTypeRestriction>
+         	  <variableOdaDataTypeRestriction
+               	  odaScalarDataType="Timestamp">
+         	  </variableOdaDataTypeRestriction>
+           </variableRestriction>
+        </filterType>
+        <filterType
+              displayName="In"
+              id="1003"
+              isNegatable="true"
+              isOptionable="true"
+              maxArguments="*"
+              minArguments="1">
+        </filterType>
+        <filterType
+              displayName="IsNull"
+              id="1005"
+              isNegatable="true"
+              isOptionable="false"
+              maxArguments="0"
+              minArguments="0">
+        </filterType>
+        <filterType
+              displayName="IsInstanceOf"
+              id="instanceOf"
+              isNegatable="true"
+              isOptionable="false"
+              maxArguments="1"
+              minArguments="1">
+           <variableRestriction
+                 variableType="InstanceOf">
+              <variableClassRestriction
+                    class="org.eclipse.datatools.connectivity.oda.consumer.testdriver.OrderItem">
+              </variableClassRestriction>
+           </variableRestriction>
+        </filterType>
+        <filterType
+              id="IdentityEq"
+              isNegatable="false"
+              isOptionable="false"
+              maxArguments="1"
+              minArguments="1">
+           <variableRestriction
+                 variableType="ResultSetColumn">
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="JavaObject">
+              </variableOdaDataTypeRestriction>
+           </variableRestriction>
+        </filterType>
+        <supportedOdaFilterExpression
+              name="AndExpression">
+        </supportedOdaFilterExpression>
+        <supportedOdaFilterExpression
+              name="OrExpression">
+        </supportedOdaFilterExpression>
+        <supportedOdaFilterExpression
+              name="NotExpression">
+        </supportedOdaFilterExpression>
+       </filterExpressionTypes>
+       <aggregateExpressionTypes>
+        <aggregateType
+              canIgnoreDuplicates="false"
+              canIgnoreNull="true"
+              displayName="Minimum"
+              id="MIN">
+           <variableRestriction
+                 variableType="ResultSetColumn">
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Integer">
+              </variableOdaDataTypeRestriction>
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Double">
+              </variableOdaDataTypeRestriction>
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Decimal">
+              </variableOdaDataTypeRestriction>
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Date">
+              </variableOdaDataTypeRestriction>
+           </variableRestriction>
+        </aggregateType>
+        <aggregateType
+              canIgnoreDuplicates="true"
+              canIgnoreNull="true"
+              id="COUNT"
+              minInputVariables="0">
+        </aggregateType>
+        <aggregateType
+              canIgnoreDuplicates="false"
+              canIgnoreNull="true"
+              displayName="Average"
+              id="AVG">
+           <variableRestriction
+                 variableType="ResultSetColumn">
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Integer">
+              </variableOdaDataTypeRestriction>
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Double">
+              </variableOdaDataTypeRestriction>
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Decimal">
+              </variableOdaDataTypeRestriction>
+           </variableRestriction>
+        </aggregateType>
+        <aggregateType
+              canIgnoreDuplicates="false"
+              canIgnoreNull="true"
+              displayName="Weighted Average"
+              id="WtAvg"
+              maxInputVariables="2"
+              minInputVariables="2">
+           <variableRestriction
+                 variableType="ResultSetColumn">
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Integer">
+              </variableOdaDataTypeRestriction>
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Double">
+              </variableOdaDataTypeRestriction>
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Decimal">
+              </variableOdaDataTypeRestriction>
+           </variableRestriction>
+        </aggregateType>
+        <aggregateType
+              canIgnoreDuplicates="true"
+              canIgnoreNull="true"
+              displayName="Standard Deviation"
+              id="StdDev">
+           <variableRestriction
+                 variableType="InstanceOf">
+              <variableClassRestriction
+                    class="org.eclipse.datatools.connectivity.oda.consumer.testdriver.Mortgage">
+              </variableClassRestriction>
+           </variableRestriction>
+        </aggregateType>
+       </aggregateExpressionTypes>
+       <valueExpressionTypes
+             supportsNestedExpressions="true">
+	       <combinedOperatorTypes>
+	          <supportedOdaCombinedOperator
+	                id="Add">
+	          </supportedOdaCombinedOperator>
+           <supportedOdaCombinedOperator
+                 id="Multiply">
+           </supportedOdaCombinedOperator>
+	          <supportedOdaCombinedOperator
+	                class="org.eclipse.datatools.connectivity.oda.consumer.testdriver.spec.impl.MyCombinedOperator"
+	                id="Concatenate">
+	          </supportedOdaCombinedOperator>
+	          <combinedOperatorType
+	                class="org.eclipse.datatools.connectivity.oda.consumer.testdriver.spec.impl.MyCombinedOperator"
+	                displayName="Dot"
+	                id="org.eclipse.datatools.connectivity.oda.consumer.testdriver.combinedOperator.dot"
+	                literal=".">
+	          </combinedOperatorType>
+	          <combinedOperatorType
+	                displayName="At"
+	                id="org.eclipse.datatools.connectivity.oda.consumer.testdriver.combinedOperator.at"
+	                literal="@">
+	          </combinedOperatorType>
+	       </combinedOperatorTypes>
+        <functionExpressionType
+              canIgnoreDuplicates="false"
+              description="Round up to the next higher integer value"
+              displayName="Ceiling(&lt;numerical expression&gt;)"
+              id="CEIL"
+              maxArguments="1"
+              minArguments="1">
+           <variableRestriction
+                 variableType="QueryExpression">
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Double">
+              </variableOdaDataTypeRestriction>
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Decimal">
+              </variableOdaDataTypeRestriction>
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Integer">
+              </variableOdaDataTypeRestriction>
+           </variableRestriction>
+        </functionExpressionType>
+        <functionExpressionType
+              canIgnoreDuplicates="false"
+              description="Round down to the next least integer value"
+              displayName="Floor(&lt;numerical expression&gt;)"
+              id="FLOOR"
+              maxArguments="1"
+              minArguments="1">
+           <variableRestriction
+                 variableType="QueryExpression">
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Double">
+              </variableOdaDataTypeRestriction>
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Decimal">
+              </variableOdaDataTypeRestriction>
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Integer">
+              </variableOdaDataTypeRestriction>
+           </variableRestriction>
+        </functionExpressionType>
+        <functionExpressionType
+              canIgnoreDuplicates="false"
+              description="Returns the &lt;numeric_expression&gt; raised to the power of &lt;power&gt;"
+              displayName="Power(&lt;numeric_expression&gt;,&lt;power&gt;)  "
+              id="POWER"
+              maxArguments="2"
+              minArguments="2">
+           <variableRestriction
+                 variableType="QueryExpression">
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Double">
+              </variableOdaDataTypeRestriction>
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Decimal">
+              </variableOdaDataTypeRestriction>
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Integer">
+              </variableOdaDataTypeRestriction>
+           </variableRestriction>
+        </functionExpressionType>
+        <functionExpressionType
+              canIgnoreDuplicates="false"
+              description="Returns the remainder of numeric_expression1 divided by numeric_expression2"
+              displayName="Modulo(&lt;numeric_expression1&gt;,&lt;numeric_expression2&gt;)"
+              id="MOD"
+              maxArguments="2"
+              minArguments="2">
+           <variableRestriction
+                 variableType="QueryExpression">
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Double">
+              </variableOdaDataTypeRestriction>
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Decimal">
+              </variableOdaDataTypeRestriction>
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Integer">
+              </variableOdaDataTypeRestriction>
+           </variableRestriction>
+        </functionExpressionType>
+        <functionExpressionType
+              canIgnoreDuplicates="false"
+              description="Returns the square root of the positive numeric_expression"
+              displayName="Sqrt(&lt;numeric_expression&gt;)  "
+              id="SQRT">
+           <variableRestriction
+                 variableType="QueryExpression">
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Double">
+              </variableOdaDataTypeRestriction>
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Decimal">
+              </variableOdaDataTypeRestriction>
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Integer">
+              </variableOdaDataTypeRestriction>
+           </variableRestriction>
+        </functionExpressionType>
+        <functionExpressionType
+              canIgnoreDuplicates="false"
+              description="Returns the absolute value of an numeric expression"
+              displayName="Absolute(&lt;numeric expression&gt;)  "
+              id="ABS"
+              maxArguments="1"
+              minArguments="1">
+           <variableRestriction
+                 variableType="QueryExpression">
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Double">
+              </variableOdaDataTypeRestriction>
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Decimal">
+              </variableOdaDataTypeRestriction>
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Integer">
+              </variableOdaDataTypeRestriction>
+           </variableRestriction>
+        </functionExpressionType>
+        <functionExpressionType
+              canIgnoreDuplicates="false"
+              description="Converts all characters in a string into uppercase"
+              displayName="Upper(&lt;string_expression&gt;)"
+              id="UPPER"
+              maxArguments="1"
+              minArguments="1">
+           <variableRestriction
+                 variableType="QueryExpression">
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="String">
+              </variableOdaDataTypeRestriction>
+           </variableRestriction>
+        </functionExpressionType>
+        <functionExpressionType
+              canIgnoreDuplicates="false"
+              description="Converts all characters in a string into lowercase"
+              displayName="Lower(&lt;string_expression&gt;)"
+              id="LOWER">
+           <variableRestriction
+                 variableType="QueryExpression">
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="String">
+              </variableOdaDataTypeRestriction>
+           </variableRestriction>
+        </functionExpressionType>
+        <functionExpressionType
+              canIgnoreDuplicates="false"
+              description="Returns the current date"
+              displayName="Current Date"
+              id="CURRENT_DATE"
+              maxArguments="0"
+              minArguments="0">
+        </functionExpressionType>
+        <functionExpressionType
+              canIgnoreDuplicates="false"
+              description="Returns an integer value for the month part of date_expression"
+              displayName="Month(&lt;date_expression&gt;)"
+              id="MONTH"
+              maxArguments="1"
+              minArguments="1">
+           <variableRestriction
+                 variableType="QueryExpression">
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Date">
+              </variableOdaDataTypeRestriction>
+              <variableOdaDataTypeRestriction
+                    odaScalarDataType="Timestamp">
+              </variableOdaDataTypeRestriction>
+           </variableRestriction>
+        </functionExpressionType>
+        <functionExpressionType
+              canIgnoreDuplicates="false"
+              class="org.eclipse.datatools.connectivity.oda.consumer.testdriver.spec.impl.MyCustomFunction"
+              description="Test custom class implementation"
+              displayName="Custom Function"
+              id="100"
+              maxArguments="1"
+              minArguments="1"
+              name="CustomFunc">
+        </functionExpressionType>
+       </valueExpressionTypes>
+     </extension>
+   
+</plugin>
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/.gitignore b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/.gitignore
new file mode 100644
index 0000000..73ebc4b
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/.gitignore
@@ -0,0 +1 @@
+*.scc
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestAdvQueryImpl.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestAdvQueryImpl.java
new file mode 100644
index 0000000..3b83f39
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestAdvQueryImpl.java
@@ -0,0 +1,1141 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.testdriver;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+import java.sql.Time;
+import java.sql.Timestamp;
+import java.util.ArrayList;
+
+import org.eclipse.datatools.connectivity.oda.IAdvancedQuery;
+import org.eclipse.datatools.connectivity.oda.IBlob;
+import org.eclipse.datatools.connectivity.oda.IClob;
+import org.eclipse.datatools.connectivity.oda.IParameterMetaData;
+import org.eclipse.datatools.connectivity.oda.IParameterRowSet;
+import org.eclipse.datatools.connectivity.oda.IResultSet;
+import org.eclipse.datatools.connectivity.oda.IResultSetMetaData;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.SortSpec;
+import org.eclipse.datatools.connectivity.oda.spec.QuerySpecification;
+
+/**
+ * A tester ODA driver to test the behavior of odaconsumer, calling
+ * on an ODA driver's IQuery implementation. 
+ * Behavior being tested include:
+ * 	setAppContext
+ */
+public class TestAdvQueryImpl implements IAdvancedQuery
+{
+	private TestConnectionImpl m_conn;
+    private Object m_appContext;
+    private boolean m_isPrepareCalled = false;
+    private IParameterMetaData m_paramMetaData = null;
+    private ArrayList m_resultSetInfoList = new ArrayList();
+    private int m_maxRows = 0;
+    private boolean m_isOpen = true;
+    private boolean m_wasNull = false;
+    private static final String TEST_QUERY_PROP_NAME = "TEST_QUERY_PROP_NAME";
+    private int m_outputParamStartIndex = 0;
+    private String m_preparedText;
+    private QuerySpecification m_querySpec;
+
+    // 0-based result set index.
+    private int m_curResultSetIndex = -1;
+    
+    // Constants for indicating the type of 
+    // query specified.  Currently there are 2 types:
+    // - Simple Query : no input parameter.  Just 3 output parameters, including one
+    //                  output parameter for the use of returning context.
+    // - Complex Query : has scalar input parameters.
+    // - Advanced Query : has both complex input parameters and scalar/complex output parameters.
+    // - Multiple Result Sets Query : has multiple result sets.  No parameters.
+    // - Limit Rows Command : This makes any subsequent query return only 1 row of data.
+    //                        This is to simulate the effect of commit/rollback 
+    //                        changing the database content.  If IConnection.rollback()
+    //         				  is called, then the database will return the default number
+    //                        of rows (same as before.)
+    public static final String SIMPLE_QUERY = "Simple Query";
+    public static final String COMPLEX_QUERY = "Complex Query";
+    public static final String ADVANCED_QUERY = "Advanced Query";
+    public static final String MULTIPLE_RESULT_SETS_QUERY = "Multiple Result Sets Query";
+    public static final String LIMIT_ROWS_COMMAND = "Limit Rows Command";
+    
+    private static final int queryTypeUnknown = -1;
+    private static final int queryTypeSimple = 0;
+    private static final int queryTypeComplex = 1;
+    private static final int queryTypeAdvanced = 2;
+    private static final int queryTypeMultipleResultSets = 3;
+    private static final int queryTypeLimitRowsCommand = 4;
+    
+    private int m_queryType = queryTypeUnknown;
+    
+    private Object[] m_inputParamValues;
+	
+    public TestAdvQueryImpl( TestConnectionImpl conn )
+    {
+    	m_conn = conn;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#prepare(java.lang.String)
+     */
+    public void prepare( String queryText ) throws OdaException
+    {
+    	if ( ! m_isOpen )
+    		throw new OdaException( "Query cannot be prepared because it has been closed." );
+    	
+    	if ( queryText == null )
+    		throw new OdaException( "Query text cannot be null." );
+    	
+    	queryText.trim();
+    	
+    	if ( queryText.length() == 0 )
+    		throw new OdaException( "Query text cannot be an empty string." );
+    	
+    	if ( queryText.equals( SIMPLE_QUERY ) )
+    	{
+    		m_queryType = queryTypeSimple;
+        	setResultSetMetaData( new TestResultSetMetaDataImpl() );
+    		m_paramMetaData = 
+    			new TestParamMetaDataImpl( TestParamMetaDataImpl.QUERY_TYPE_SIMPLE );
+    	}
+    	else if ( queryText.equals( COMPLEX_QUERY ) )
+    	{
+    		m_queryType = queryTypeComplex;
+        	setResultSetMetaData( new TestResultSetMetaDataImpl() );
+    		m_paramMetaData = 
+    			new TestParamMetaDataImpl( TestParamMetaDataImpl.QUERY_TYPE_COMPLEX );
+    	}
+    	else if ( queryText.equals( ADVANCED_QUERY ) )
+    	{
+    		m_queryType = queryTypeAdvanced;
+        	setResultSetMetaData( new TestResultSetMetaDataImpl() );
+    		m_paramMetaData = 
+    			new TestParamMetaDataImpl( TestParamMetaDataImpl.QUERY_TYPE_ADVANCED );
+    		m_outputParamStartIndex = 3;
+    	}
+    	else if ( queryText.equals( MULTIPLE_RESULT_SETS_QUERY ) )
+    	{
+    		m_queryType = queryTypeMultipleResultSets;
+    		
+    		// Two result sets.
+        	setResultSetMetaData( "ResultSet1", new TestResultSetMetaDataImpl() );
+        	addResultSetMetaData( "ResultSet2", new TestResultSetMetaDataImpl() );
+    		m_paramMetaData = null;
+    	}
+    	else if ( queryText.equals( LIMIT_ROWS_COMMAND ) )
+    	{
+    		m_queryType = queryTypeLimitRowsCommand;
+        	m_paramMetaData = null;
+        	clearAllResultSetInfo();
+    	}
+
+    	resetInputParamValuesArray();
+    	m_isPrepareCalled = true;
+    	m_preparedText = queryText;
+    }
+    
+    private final void resetInputParamValuesArray() throws OdaException
+    {
+    	// Find number of input parameters.
+    	int numInputParams = getNumInputParams();
+    	
+    	if ( numInputParams == 0 )
+    		m_inputParamValues = null;
+    	else
+    		m_inputParamValues = new Object[ numInputParams ];
+    }
+
+    private void setResultSetMetaData( IResultSetMetaData rsmd ) throws OdaException
+    {
+    	setResultSetMetaData( "DefaultName", rsmd );
+    }
+    
+    private void setResultSetMetaData( String resultSetName, IResultSetMetaData rsmd ) throws OdaException
+    {
+    	clearAllResultSetInfo();
+    	
+    	if ( rsmd != null )
+    	{
+    		TestResultSetInfo rsInfo = new TestResultSetInfo( resultSetName, rsmd );
+    		m_resultSetInfoList.add( rsInfo );
+    		m_curResultSetIndex = 0;
+    	}
+    }
+    
+    private void clearAllResultSetInfo()
+    {
+    	m_resultSetInfoList.clear();
+    	m_curResultSetIndex = -1;    	
+    }
+    
+    private void addResultSetMetaData( String resultSetName, IResultSetMetaData rsmd ) throws OdaException
+    {
+    	if ( rsmd == null )
+    		throw new OdaException( "Cannot add null result set meta data." );
+
+    	TestResultSetInfo rsInfo = new TestResultSetInfo( resultSetName, rsmd );
+    	m_resultSetInfoList.add( rsInfo );
+    }
+    
+    private int getNumInputParams() throws OdaException
+    {
+    	if ( m_paramMetaData == null )
+    		return 0;
+    	
+    	int numInputParams = 0;
+    	int totalParamCount = m_paramMetaData.getParameterCount();
+    	for( int i = 1; i <= totalParamCount; i++ )
+    	{
+    		if ( m_paramMetaData.getParameterMode( i ) == IParameterMetaData.parameterModeIn ||
+    			m_paramMetaData.getParameterMode( i ) == IParameterMetaData.parameterModeInOut )
+    			numInputParams++;
+    	}  
+    	
+    	return numInputParams;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setAppContext(java.lang.Object)
+     */
+    public void setAppContext( Object context ) throws OdaException
+    {
+        // a new this instance should be created each time by odaconsumer,
+        // when it opens a connection;
+        // so the state should be initialized properly each time
+        if( m_isPrepareCalled )
+            throw new OdaException( "Error: setAppContext should have been called *before* IQuery.prepare." );
+        m_appContext = context;
+    }
+    
+    public Object getAppContext()
+    {
+        return m_appContext;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setProperty(java.lang.String, java.lang.String)
+     */
+    public void setProperty( String name, String value ) throws OdaException
+    {
+    	// Currently, just test if the supplied prop name is valid.
+    	// Throw an exception if not. 
+    	if ( ! name.equals( TEST_QUERY_PROP_NAME ) )
+    		throw new OdaException( "Invalid prop name: " + name );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#close()
+     */
+    public void close() throws OdaException
+    {
+        m_preparedText = null;
+    	m_isOpen = false;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setMaxRows(int)
+     */
+    public void setMaxRows( int max ) throws OdaException
+    {
+    	m_maxRows = max;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#getMaxRows()
+     */
+    public int getMaxRows() throws OdaException
+    {
+        return m_maxRows;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#getMetaData()
+     */
+    public IResultSetMetaData getMetaData() throws OdaException
+    {
+    	if ( m_resultSetInfoList.size() == 0 )
+    		return null;
+    	
+    	// Return the current result set.
+        return ( ( TestResultSetInfo ) 
+        		m_resultSetInfoList.get( m_curResultSetIndex ) ).getResultSetMetaData();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#executeQuery()
+     */
+    public IResultSet executeQuery() throws OdaException
+    {
+    	execute();
+    	
+    	// Return (current) result set, if exists.
+    	return getResultSet();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#clearInParameters()
+     */
+    public void clearInParameters() throws OdaException
+    {
+    	if ( m_inputParamValues != null )
+    	{
+    		// Check if the input parameters are non-null values.
+    		for( int i = 0; i < m_inputParamValues.length; i++ )
+    			m_inputParamValues[ i ] = null;
+    	}
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setInt(java.lang.String, int)
+     */
+    public void setInt( String parameterName, int value ) throws OdaException
+    {
+    	setValue( parameterName, new Integer( value ) );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setInt(int, int)
+     */
+    public void setInt( int parameterId, int value ) throws OdaException
+    {
+    	setValue( parameterId, new Integer( value ) );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setDouble(java.lang.String, double)
+     */
+    public void setDouble( String parameterName, double value )
+            throws OdaException
+    {
+    	setValue( parameterName, new Double( value ) ); 
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setDouble(int, double)
+     */
+    public void setDouble( int parameterId, double value ) throws OdaException
+    {
+    	setValue( parameterId, new Double( value ) );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setBigDecimal(java.lang.String, java.math.BigDecimal)
+     */
+    public void setBigDecimal( String parameterName, BigDecimal value )
+            throws OdaException
+    {
+    	setValue( parameterName, value );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setBigDecimal(int, java.math.BigDecimal)
+     */
+    public void setBigDecimal( int parameterId, BigDecimal value )
+            throws OdaException
+    {
+    	setValue( parameterId, value );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setString(java.lang.String, java.lang.String)
+     */
+    public void setString( String parameterName, String value )
+            throws OdaException
+    {
+    	setValue( parameterName, value );  
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setString(int, java.lang.String)
+     */
+    public void setString( int parameterId, String value ) throws OdaException
+    {
+    	setValue( parameterId, value );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setDate(java.lang.String, java.sql.Date)
+     */
+    public void setDate( String parameterName, Date value ) throws OdaException
+    {
+    	setValue( parameterName, value );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setDate(int, java.sql.Date)
+     */
+    public void setDate( int parameterId, Date value ) throws OdaException
+    {
+    	setValue( parameterId, value );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setTime(java.lang.String, java.sql.Time)
+     */
+    public void setTime( String parameterName, Time value ) throws OdaException
+    {
+    	setValue( parameterName, value ); 
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setTime(int, java.sql.Time)
+     */
+    public void setTime( int parameterId, Time value ) throws OdaException
+    {
+    	setValue( parameterId, value );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setTimestamp(java.lang.String, java.sql.Timestamp)
+     */
+    public void setTimestamp( String parameterName, Timestamp value )
+            throws OdaException
+    {
+    	setValue( parameterName, value );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setTimestamp(int, java.sql.Timestamp)
+     */
+    public void setTimestamp( int parameterId, Timestamp value )
+            throws OdaException
+    {
+    	setValue( parameterId, value );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setBoolean(java.lang.String, boolean)
+     */
+    public void setBoolean( String parameterName, boolean value )
+            throws OdaException
+    {
+        setValue( parameterName, new Boolean( value ) );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setBoolean(int, boolean)
+     */
+    public void setBoolean( int parameterId, boolean value )
+            throws OdaException
+    {
+        setValue( parameterId, new Boolean( value ) );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setNull(java.lang.String)
+     */
+    public void setNull( String parameterName ) throws OdaException
+    {
+        setValue( parameterName, null );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setNull(int)
+     */
+    public void setNull( int parameterId ) throws OdaException
+    {
+        setValue( parameterId, null );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#findInParameter(java.lang.String)
+     */
+    public int findInParameter( String parameterName ) throws OdaException
+    {
+    	if ( m_queryType != queryTypeComplex && m_queryType != queryTypeAdvanced )
+    		throw new OdaException( "Invalid query type." );
+    	
+    	TestParamMetaDataImpl paramMetaData = ( TestParamMetaDataImpl ) getParameterMetaData();
+    	int index = paramMetaData.findInParameter( parameterName ); 
+    	if ( index == 0 )
+    		throw new OdaException( "Invalid input parameter name : " + parameterName );
+    	
+    	return index;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#getParameterMetaData()
+     */
+    public IParameterMetaData getParameterMetaData() throws OdaException
+    {
+        return m_paramMetaData;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setSortSpec(org.eclipse.datatools.connectivity.oda.SortSpec)
+     */
+    public void setSortSpec( SortSpec sortBy ) throws OdaException
+    {
+    	TestResultSetInfo rsInfo = getCurrentResultSetInfo();
+    	if ( rsInfo == null )
+    		throw new OdaException( "There is no result set available for setting sort spec." );
+    	
+    	rsInfo.setSortSpec( sortBy );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#getSortSpec()
+     */
+    public SortSpec getSortSpec() throws OdaException
+    {
+    	TestResultSetInfo rsInfo = getCurrentResultSetInfo();
+    	if ( rsInfo == null )
+    		throw new OdaException( "There is no result set available for getting sort spec." );
+    	
+    	return rsInfo.getSortSpec();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#execute()
+     */
+    public boolean execute() throws OdaException
+    {
+    	if ( m_queryType == queryTypeLimitRowsCommand )
+    	{
+    		// This command will simulate modifying the database
+    		// content so that a small result set will be returned
+    		// in any query.
+    		m_conn.setLimitRows();
+    	}
+    	else if ( m_queryType == queryTypeMultipleResultSets )
+    	{
+    		// Create 2 result sets.
+    		int numResultSets = 2;
+    		
+    		for( int i = 0; i < numResultSets; i++ )
+    			addNewResultSetToList( i, new TestResultSetImpl( this, m_conn.getLimitRows() ) );
+    		
+	    	// Point current result set index to the first result set.
+       		m_curResultSetIndex = 0;
+    	}
+    	else
+    	{
+	    	if ( m_inputParamValues != null )
+	    	{
+	    		// Check if the input parameters are non-null values.
+	    		for( int i = 0; i < m_inputParamValues.length; i++ )
+	    		{
+	    			if ( m_inputParamValues[ i ] == null )
+	    				throw new OdaException( "Input parameter(s) cannot be null." );
+	    		}
+	    	}
+	    	
+	    	// Add result set.  ( There is only 1 so far. )
+			addNewResultSetToList( 0, new TestResultSetImpl( this, m_conn.getLimitRows() ) );
+			
+	    	// Point current result set index to the first result set.
+       		m_curResultSetIndex = 0;
+    	}
+
+        return true;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#findOutParameter(java.lang.String)
+     */
+    public int findOutParameter( String parameterName ) throws OdaException
+    {
+    	if ( m_queryType != queryTypeAdvanced )
+    		throw new OdaException( "Invalid query type." );
+    	
+    	TestParamMetaDataImpl paramMetaData = ( TestParamMetaDataImpl ) getParameterMetaData();
+    	int index = paramMetaData.findOutParameter( parameterName );
+    	if ( index == 0 )
+            throwInvalidParamNameException( parameterName );
+
+    	return index;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getBoolean(int)
+     */
+    public boolean getBoolean( int parameterId ) throws OdaException 
+    {
+        checkOutputParameterIndex( parameterId );
+        m_wasNull = false;
+        return TestData.createBooleanFalseData();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getBoolean(java.lang.String)
+     */
+    public boolean getBoolean( String parameterName ) throws OdaException 
+    {
+        int index = getOutputParamIndex( parameterName );
+        return getBoolean( index );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getObject(int)
+     */
+    public Object getObject( int parameterId ) throws OdaException
+    {
+        checkOutputParameterIndex( parameterId );
+        m_wasNull = false;
+        return TestData.createObjectData();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getObject(java.lang.String)
+     */
+    public Object getObject( String parameterName ) throws OdaException
+    {
+        int index = getOutputParamIndex( parameterName );
+        return getObject( index );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getBigDecimal(int)
+     */
+    public BigDecimal getBigDecimal( int parameterId ) throws OdaException
+    {
+    	checkOutputParameterIndex( parameterId );
+    	m_wasNull = false;
+    	return TestData.createBigDecimalData();
+    }
+    
+    private int getOutputParamIndex( String parameterName ) throws OdaException
+    {
+    	int index = findOutParameter( parameterName );
+    	return index;
+    }
+    
+    private void checkOutputParameterIndex( int index ) throws OdaException
+    {
+    	if ( m_paramMetaData == null || 
+    			( index <= getNumInputParams() || index > m_paramMetaData.getParameterCount() ) )
+    		throw new OdaException( "Output parameter index is invalid: " + index );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getBigDecimal(java.lang.String)
+     */
+    public BigDecimal getBigDecimal( String parameterName ) throws OdaException
+    {
+    	int index = getOutputParamIndex( parameterName );
+    	return getBigDecimal( index );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getBlob(int)
+     */
+    public IBlob getBlob( int parameterId ) throws OdaException
+    {
+    	checkOutputParameterIndex( parameterId );
+    	
+    	// Simulate having 2 blob-type output parameters.
+    	if ( parameterId == m_outputParamStartIndex + 1 )
+    	{
+    		m_wasNull = false;
+    		return TestData.createBlobData();
+    	}
+
+   		m_wasNull = true;
+   		return null;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getBlob(java.lang.String)
+     */
+    public IBlob getBlob( String parameterName ) throws OdaException
+    {
+    	int index = getOutputParamIndex( parameterName );
+    	return getBlob( index );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getClob(int)
+     */
+    public IClob getClob( int parameterId ) throws OdaException
+    {
+    	checkOutputParameterIndex( parameterId );
+    	
+    	// Simulate having 2 blob-type output parameters.
+    	if ( parameterId == m_outputParamStartIndex + 3 )
+    	{
+    		m_wasNull = false;
+    		return TestData.createClobData();
+    	}
+    	
+    	m_wasNull = true;
+    	return null;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getClob(java.lang.String)
+     */
+    public IClob getClob( String parameterName ) throws OdaException
+    {
+    	int index = getOutputParamIndex( parameterName );
+    	return getClob( index );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getDate(int)
+     */
+    public Date getDate( int parameterId ) throws OdaException
+    {
+    	checkOutputParameterIndex( parameterId );
+    	m_wasNull = false;
+    	return TestData.createDateData();
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getDate(java.lang.String)
+     */
+    public Date getDate( String parameterName ) throws OdaException
+    {
+    	int index = getOutputParamIndex( parameterName );
+    	return getDate( index );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getDouble(int)
+     */
+    public double getDouble( int parameterId ) throws OdaException
+    {
+    	checkOutputParameterIndex( parameterId );
+    	m_wasNull = false;
+    	return TestData.createDoubleData();
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getDouble(java.lang.String)
+     */
+    public double getDouble( String parameterName ) throws OdaException
+    {
+    	int index = getOutputParamIndex( parameterName );
+    	return getDouble( index );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getInt(int)
+     */
+    public int getInt( int parameterId ) throws OdaException
+    {
+    	checkOutputParameterIndex( parameterId );
+    	m_wasNull = false;
+    	return TestData.createIntData();
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getInt(java.lang.String)
+     */
+    public int getInt( String parameterName ) throws OdaException
+    {
+    	int index = getOutputParamIndex( parameterName );
+    	return getInt( index );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getMetaDataOf(java.lang.String)
+     */
+    public IResultSetMetaData getMetaDataOf( String resultSetName )
+            throws OdaException
+    {
+    	TestResultSetInfo rsInfo = findResultSetInfo( resultSetName, true );
+    	return rsInfo.getResultSetMetaData();
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getMoreResults()
+     */
+    public boolean getMoreResults() throws OdaException
+    {
+    	if ( m_curResultSetIndex >= m_resultSetInfoList.size() - 1 )
+    		return false;
+    	
+   		m_curResultSetIndex++;
+    	return true;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getResultSet()
+     */
+    public IResultSet getResultSet() throws OdaException
+    {
+    	if ( m_curResultSetIndex == -1 )
+    		return null;
+    	
+    	return ( ( TestResultSetInfo ) m_resultSetInfoList.get( m_curResultSetIndex ) ).getResultSet();
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getResultSet(java.lang.String)
+     */
+    public IResultSet getResultSet( String resultSetName ) throws OdaException
+    {
+    	TestResultSetInfo rsInfo = findResultSetInfo( resultSetName, false );
+    	return ( rsInfo == null ? null : rsInfo.getResultSet() );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getResultSetNames()
+     */
+    public String[] getResultSetNames() throws OdaException
+    {
+    	if ( m_resultSetInfoList.size() == 0 )
+    		return null;
+    	
+    	String[] names = new String[ m_resultSetInfoList.size() ];
+    	for( int i = 0; i < m_resultSetInfoList.size(); i++ )
+    		names[ i ] = ( ( TestResultSetInfo ) m_resultSetInfoList.get( i ) ).getName();
+    	
+    	return names;    	
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getRow(int)
+     */
+    public IParameterRowSet getRow( int parameterId ) throws OdaException
+    {
+    	// Only structure parameter is supported.
+    	checkOutputParameterIndex( parameterId );
+    	m_wasNull = false;
+    	return TestData.createStructData();
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getRow(java.lang.String)
+     */
+    public IParameterRowSet getRow( String parameterName ) throws OdaException
+    {
+    	int index = getOutputParamIndex( parameterName );
+    	return getRow( index );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getSortSpec(java.lang.String)
+     */
+    public SortSpec getSortSpec( String resultSetName ) throws OdaException
+    {
+   		TestResultSetInfo rsInfo = findResultSetInfo( resultSetName, true );
+    	return rsInfo.getSortSpec();
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getString(int)
+     */
+    public String getString( int parameterId ) throws OdaException
+    {
+        if ( m_queryType == queryTypeSimple )
+        {
+        	// return appContext object for parameter 1
+        	if( parameterId == 1 && getAppContext() != null )
+        		return getAppContext().toString();
+        	if( parameterId == 3 )
+        		return "parameter 3 value as a String";
+        }
+        else if ( m_queryType == queryTypeAdvanced )
+        {
+            checkOutputParameterIndex( parameterId );
+        	m_wasNull = false;
+        	return TestData.createStringData();
+        }
+        
+        return null;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getString(java.lang.String)
+     */
+    public String getString( String parameterName ) throws OdaException
+    {
+    	int index = getOutputParamIndex( parameterName );
+    	return getString( index );   	
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getTime(int)
+     */
+    public Time getTime( int parameterId ) throws OdaException
+    {
+        checkOutputParameterIndex( parameterId );
+    	m_wasNull = false;
+    	return TestData.createTimeData();
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getTime(java.lang.String)
+     */
+    public Time getTime( String parameterName ) throws OdaException
+    {
+    	int index = getOutputParamIndex( parameterName );
+    	return getTime( index );  
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getTimestamp(int)
+     */
+    public Timestamp getTimestamp( int parameterId ) throws OdaException
+    {
+        checkOutputParameterIndex( parameterId );
+    	m_wasNull = false;
+    	return TestData.createTimestampData();
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#getTimestamp(java.lang.String)
+     */
+    public Timestamp getTimestamp( String parameterName ) throws OdaException
+    {
+    	int index = getOutputParamIndex( parameterName );
+    	return getTimestamp( index );  
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#setNewRow(int)
+     */
+    public IParameterRowSet setNewRow( int parameterId ) throws OdaException
+    {
+    	return setNewParamRowSet( parameterId, false );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#setNewRow(java.lang.String)
+     */
+    public IParameterRowSet setNewRow( String parameterName )
+            throws OdaException
+    {
+		int paramIndex = findInParameter( parameterName );
+		return setNewRow( paramIndex );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#setNewRowSet(int)
+     */
+    public IParameterRowSet setNewRowSet( int parameterId ) throws OdaException
+    {
+    	return setNewParamRowSet( parameterId, true );
+    }
+    
+    private IParameterRowSet setNewParamRowSet( int parameterId, boolean isTable )
+    	throws OdaException
+    {
+    	if ( m_queryType != queryTypeAdvanced )
+    		throw new OdaException( "Invalid query type." );
+    	
+    	checkInputParamIndex( parameterId );
+   		IParameterRowSet prs = new TestInputParamRowSetImpl( isTable );
+   		
+   		setValue( parameterId, prs );
+   		return prs;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#setNewRowSet(java.lang.String)
+     */
+    public IParameterRowSet setNewRowSet( String parameterName )
+            throws OdaException
+    {
+		int paramIndex = findInParameter( parameterName );
+		return setNewRowSet( paramIndex );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#setSortSpec(java.lang.String, org.eclipse.datatools.connectivity.oda.SortSpec)
+     */
+    public void setSortSpec( String resultSetName, SortSpec sortBy )
+            throws OdaException
+    {
+    	TestResultSetInfo rsInfo = findResultSetInfo( resultSetName, true );
+    	rsInfo.setSortSpec( sortBy );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IAdvancedQuery#wasNull()
+     */
+    public boolean wasNull() throws OdaException
+    {
+        return m_wasNull;	
+    }
+    
+    private void throwInvalidParamNameException( String parameterName )
+    	throws OdaException
+    {
+    	throw new OdaException( "Invalid output parameter name: " + parameterName );
+    }
+    
+    private void checkInputParamIndex( int index ) throws OdaException
+    {
+    	IParameterMetaData pmd = getParameterMetaData();
+    	
+    	if ( index < 1 || index > pmd.getParameterCount() )
+    		throw new OdaException( "Invalid parameter index: " + index );
+    	
+    	if ( pmd.getParameterMode( index ) == IParameterMetaData.parameterModeOut )
+    		throw new OdaException( "Invalid input parameter index: " + index ); 	
+    }
+    
+    private void setValue( String parameterName, Object value )
+    	throws OdaException
+	{
+		int paramIndex = findInParameter( parameterName );
+		setValue( paramIndex, value );
+	}
+    
+    private void setValue( int parameterId, Object value ) throws OdaException
+    {
+    	if ( m_paramMetaData == null )
+    		throw new OdaException( "Unable to set parameter value.  Parameter meta data is null." );
+    	
+    	checkInputParamIndex( parameterId );
+    	
+    	// Need to find the corresponding position in the input param values array.
+    	int pos = -1;
+    	for( int i = 1; i <= parameterId; i++ )
+    	{
+    		if ( m_paramMetaData.getParameterMode( i ) == IParameterMetaData.parameterModeIn ||
+    			m_paramMetaData.getParameterMode( i ) == IParameterMetaData.parameterModeInOut )
+    		{
+    			pos++;
+    		}
+    	}
+    	m_inputParamValues[ pos ] = value;
+    }
+    
+    private TestResultSetInfo findResultSetInfo( String resultSetName, boolean throwExceptionWhenNotFound )
+    	throws OdaException
+    {
+    	for( int i = 0; i < m_resultSetInfoList.size(); i++ )
+    	{
+    		TestResultSetInfo rsInfo = ( TestResultSetInfo ) m_resultSetInfoList.get( i );
+    		if ( rsInfo != null )
+    			return rsInfo;
+    	}   	
+    	
+    	if ( throwExceptionWhenNotFound )
+    		throw new OdaException( "Cannot find result set with name: " + resultSetName );
+
+    	return null;    		
+    }
+    
+    private TestResultSetInfo getCurrentResultSetInfo()
+    {
+    	if ( m_curResultSetIndex == -1 )
+    		return null;
+    	
+    	TestResultSetInfo rsInfo = ( TestResultSetInfo ) m_resultSetInfoList.get( m_curResultSetIndex );
+    	return rsInfo;
+    }
+    
+    private void addNewResultSetToList( int index, IResultSet resultSet ) throws OdaException
+    {
+    	resultSet.setMaxRows( getMaxRows() );
+    	
+    	TestResultSetInfo rsInfo = ( TestResultSetInfo ) m_resultSetInfoList.get( index );
+    	rsInfo.setResultSet( resultSet );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#cancel()
+     */
+    public void cancel() throws OdaException, UnsupportedOperationException
+    {
+        m_preparedText = null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#getEffectiveQueryText()
+     */
+    public String getEffectiveQueryText()
+    {
+        if( getSpecification() != null )
+            return m_preparedText + getSpecification();
+        return m_preparedText;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#getSpecification()
+     */
+    @SuppressWarnings("restriction")
+    public QuerySpecification getSpecification()
+    {
+        return m_querySpec;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setSpecification(org.eclipse.datatools.connectivity.oda.spec.QuerySpecification)
+     */
+    @SuppressWarnings("restriction")
+    public void setSpecification( QuerySpecification querySpec )
+            throws OdaException, UnsupportedOperationException
+    {
+        m_querySpec = querySpec;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setObject(int, java.lang.Object)
+     */
+    public void setObject( int parameterId, Object value ) throws OdaException
+    {
+        setValue( parameterId, value );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IQuery#setObject(java.lang.String, java.lang.Object)
+     */
+    public void setObject( String parameterName, Object value )
+            throws OdaException
+    {
+        setValue( parameterName, value );
+    }
+
+    class TestResultSetInfo
+    {
+    	private String m_name = null;
+    	private IResultSet m_resultSet = null;
+    	private IResultSetMetaData m_resultSetMetaData = null;
+    	private SortSpec m_sortSpec = null;
+    	
+    	TestResultSetInfo( String name, IResultSetMetaData rsmd )
+    	{
+    		m_name = name; 
+    		m_resultSetMetaData = rsmd;
+    	}
+    	
+    	String getName()
+    	{
+    		return m_name;
+    	}
+    	
+    	void setResultSet( IResultSet rs )
+    	{
+    		m_resultSet = rs;
+    	}
+    	
+    	IResultSet getResultSet()
+    	{
+    		return m_resultSet;
+    	}
+    	
+    	IResultSetMetaData getResultSetMetaData()
+    	{
+    		return m_resultSetMetaData;
+    	}
+    	
+    	void setSortSpec( SortSpec ss )
+    	{
+    		m_sortSpec = ss;
+    	}
+    	
+    	SortSpec getSortSpec()
+    	{
+    		return m_sortSpec;
+    	}
+    }
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestColumnMetaData.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestColumnMetaData.java
new file mode 100644
index 0000000..55b4333
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestColumnMetaData.java
@@ -0,0 +1,90 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.testdriver;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+public class TestColumnMetaData 
+{
+	private int m_displayLength = 0;
+	private String m_label = null;
+	private String m_name = null;
+	private int m_type = 0;
+	private String m_typeName = null;
+	private int m_precision = 0;
+	private int m_scale = 0;
+	private int m_isNullable;
+	
+	TestColumnMetaData( int displayLength,
+			String label,
+			String name,
+			int type,
+			String typeName,
+			int precision,
+			int scale,
+			int isNullable )
+	{
+		m_displayLength = displayLength;
+		m_label = label;
+		m_name = name;
+		m_type = type;
+		m_typeName = typeName;
+		m_precision = precision;
+		m_scale = scale;
+		m_isNullable = isNullable;
+	}
+	
+	int getDisplayLength()
+	{
+		return m_displayLength;
+	}
+
+	String getLabel()
+	{
+		return m_label;
+	}
+
+	String getName()
+	{
+		return m_name;
+	}
+
+	int getType()
+	{
+		return m_type;
+	}
+
+	String getTypeName() 
+	{
+		return m_typeName;
+	}
+
+	int getPrecision() 
+	{
+		return m_precision;
+	}
+
+	public int getScale() 
+	{
+		return m_scale;
+	}
+
+	public int isNullable() throws OdaException 
+	{
+		return m_isNullable;
+	}	
+}
+
+
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestConnectionImpl.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestConnectionImpl.java
new file mode 100644
index 0000000..d83253b
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestConnectionImpl.java
@@ -0,0 +1,144 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.testdriver;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.oda.IConnection;
+import org.eclipse.datatools.connectivity.oda.IDataSetMetaData;
+import org.eclipse.datatools.connectivity.oda.IQuery;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+import com.ibm.icu.util.ULocale;
+
+/**
+ * A tester ODA driver to test the behavior of odaconsumer, calling
+ * on an ODA driver's IConnection implementation. 
+ * Behavior being tested include:
+ * 	setAppContext
+ */
+public class TestConnectionImpl implements IConnection
+{
+    private Object m_appContext;
+    private boolean m_isOpen = false;
+    private boolean m_limitRowsCurrentState = false;
+    private boolean m_limitRowsSavedState = false;
+    
+    public TestConnectionImpl()
+    {
+    }
+
+    public TestConnectionImpl( boolean isConnOpen )
+    {
+        m_isOpen = isConnOpen;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IConnection#close()
+     */
+    public void close() throws OdaException
+    {
+        m_isOpen = false;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IConnection#commit()
+     */
+    public void commit() throws OdaException
+    {
+    	m_limitRowsSavedState = m_limitRowsCurrentState;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IConnection#getMaxQueries()
+     */
+    public int getMaxQueries() throws OdaException
+    {
+    	// Allow a maximum of 3 active queries.
+        return 3;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IConnection#getMetaData(java.lang.String)
+     */
+    public IDataSetMetaData getMetaData( String dataSetType )
+            throws OdaException
+    {
+        return new TestDataSetMetaDataImpl( this, dataSetType );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IConnection#isOpen()
+     */
+    public boolean isOpen() throws OdaException
+    {
+        return m_isOpen;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IConnection#newQuery(java.lang.String)
+     */
+    public IQuery newQuery( String dataSetType ) throws OdaException
+    {
+       return new TestAdvQueryImpl( this );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IConnection#open(java.util.Properties)
+     */
+    public void open( Properties connProperties ) throws OdaException
+    {
+        m_isOpen = true;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IConnection#rollback()
+     */
+    public void rollback() throws OdaException
+    {
+    	m_limitRowsCurrentState = m_limitRowsSavedState;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IConnection#setAppContext(java.lang.Object)
+     */
+    public void setAppContext( Object context ) throws OdaException
+    {
+        m_appContext = context;
+    }
+    
+    public Object getAppContext()
+    {
+        return m_appContext;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IConnection#setLocale(com.ibm.icu.util.ULocale)
+     */
+    public void setLocale( ULocale locale ) throws OdaException
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    void setLimitRows()
+    {
+    	m_limitRowsCurrentState = true;
+    }
+    
+    boolean getLimitRows()
+    {
+    	return m_limitRowsCurrentState;
+    }
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestData.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestData.java
new file mode 100644
index 0000000..b09853d
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestData.java
@@ -0,0 +1,257 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.testdriver;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.math.BigDecimal;
+import java.sql.Date;
+import java.sql.Time;
+import java.sql.Timestamp;
+
+import org.eclipse.datatools.connectivity.oda.IBlob;
+import org.eclipse.datatools.connectivity.oda.IClob;
+import org.eclipse.datatools.connectivity.oda.IParameterRowSet;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.impl.Blob;
+import org.eclipse.datatools.connectivity.oda.impl.Clob;
+
+public class TestData 
+{
+    private static final double BIG_DECIMAL_DATA = 1234567890.12;
+    private static final byte[] BLOB_DATA = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 
+        0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf };
+    private static final String CLOB_DATA = "abcdefghijklmnopqrstuvwxyz"; 
+    private static final String STRING_DATA = "String data";
+    private static final double DOUBLE_DATA = 123.4567890123;
+    private static final int INT_DATA = 2147483647;
+    
+    // Time data for Wed, 1 Nov 2006 10:30:30 UTC, 
+    // represented in milliseconds since January 1, 1970, 00:00:00 GMT
+    private static final long TIME_DATA = 1162377030;
+    
+    // Timestamp data for Thu, 2 Nov 2006 10:30:30 UTC, 
+    // represented in milliseconds since January 1, 1970, 00:00:00 GMT
+    private static final long TIMESTAMP_DATA = 1162463430;
+    
+    // Date data for Fri, 3 Nov 2006,
+    // represented in milliseconds since January 1, 1970, 00:00:00 GMT
+    private static final long DATE_DATA = 1162512000;    
+    
+    public static final boolean createBooleanTrueData()
+    {
+        return true;
+    }
+    
+    public static final boolean createBooleanFalseData()
+    {
+        return false;
+    }
+    
+    public static final BigDecimal createBigDecimalData()
+    {
+    	return new BigDecimal( BIG_DECIMAL_DATA );
+    }
+    
+    public static final Blob createBlobData()
+    {
+    	return new Blob( BLOB_DATA );
+    }
+    
+    public static final Clob createClobData()
+    {
+    	return new Clob( CLOB_DATA );
+    }
+    
+    public static final String createClobDataString()
+    {
+    	return CLOB_DATA;
+    }
+    
+    public static final String createStringData()
+    {
+    	return STRING_DATA;
+    }
+    
+    public static final double createDoubleData()
+    {
+    	return DOUBLE_DATA;
+    }
+    
+    public static final int createIntData()
+    {
+    	return INT_DATA;
+    }
+    
+    public static final Time createTimeData()
+    {
+    	return new Time( TIME_DATA );
+    }
+    
+    public static final Timestamp createTimestampData()
+    {
+    	return new Timestamp( TIMESTAMP_DATA );
+    }
+    
+    public static final Date createDateData()
+    {
+    	return new Date( DATE_DATA );
+    }
+    
+    public static final Object createObjectData()
+    {
+        return TestData.class;
+    }
+    
+    public static final Object createObjectDataWithString()
+    {
+        return new String( "testObject" ); //$NON-NLS-1$
+    }
+    
+    public static final IParameterRowSet createStructData() throws OdaException
+    {
+    	return new TestOutputParamRowSetImpl();
+    }
+    
+	public static boolean checkBlobData( IBlob val1, IBlob val2 ) throws OdaException
+	{
+		if ( val1 == val2 )
+			return true;
+		
+		// Check the content of the blob's byte array.
+		try
+		{
+			// Obtain the byte data as an InputStream's.  Reset
+			// the streams to their starting points.
+			InputStream is1 = val1.getBinaryStream();
+			is1.reset();
+			InputStream is2 = val2.getBinaryStream();
+			is2.reset();
+			
+			// Check if they have the same content.
+			return streamsContentEqual( is1, is2 );
+		}
+		catch( IOException e )
+		{
+			throw new OdaException( e );
+		}
+	}
+	
+	private static boolean streamsContentEqual( InputStream is1, InputStream is2 ) throws OdaException
+	{
+		try
+		{
+			if( is1 == is2 )
+				return true;
+
+			if( is1 == null || is2 == null ) // only one has contents
+				return false;
+
+			while( true )
+			{
+				int c1 = is1.read();
+				int c2 = is2.read();
+				if( c1 == -1 && c2 == -1 )
+					return true;
+				if( c1 != c2 )
+					break;
+			}
+		}
+		catch( IOException ex )
+		{
+			throw new OdaException( ex );
+		}
+		finally
+		{
+			try
+			{
+				if( is1 != null )
+					is1.close();
+			}
+			catch( IOException e )
+			{
+				throw new OdaException( e );
+			}
+			
+			try
+			{
+				if( is2 != null )
+					is2.close();
+			}
+			catch( IOException e )
+			{
+				throw new OdaException( e );
+			}
+		}
+
+		return false;
+	}
+	
+	public static boolean checkClobData( IClob val, String clobData ) throws OdaException
+	{
+		String valStr = getClobDataAsString( val );
+		if ( valStr == null )
+			return ( clobData == null );
+		
+		return valStr.equals( clobData );
+	}
+	
+	public static boolean checkClobData( IClob val1, IClob val2 ) throws OdaException
+	{
+		String val2Str = getClobDataAsString( val2 );
+		return checkClobData( val1, val2Str );
+	}
+	
+	private static String getClobDataAsString( IClob val ) throws OdaException
+	{
+		if ( val == null )
+			return null;
+		
+		Reader is = val.getCharacterStream();
+		if( is == null )
+			return null;
+		
+		try
+		{
+			String outStr = "";
+			for( int index = 0; ; index++ )
+			{
+				int c = is.read();
+				if( c == -1 )
+					return outStr;
+			
+				outStr += ( char ) c;
+			}
+		}
+		catch( IOException ex )
+		{
+			throw new OdaException( ex );
+		}
+		finally
+		{
+			try
+			{
+				if( is != null )
+					is.close();
+			}
+			catch( IOException e )
+			{
+				throw new OdaException( e );
+			}
+		}
+	}
+	
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestDataSetMetaDataImpl.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestDataSetMetaDataImpl.java
new file mode 100644
index 0000000..cc3caf2
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestDataSetMetaDataImpl.java
@@ -0,0 +1,165 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.testdriver;
+
+import org.eclipse.datatools.connectivity.oda.IConnection;
+import org.eclipse.datatools.connectivity.oda.IDataSetMetaData;
+import org.eclipse.datatools.connectivity.oda.IResultSet;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+/**
+ * Default implementation of IDataSetMetaData 
+ * for a simple ODA runtime driver.
+ */
+public class TestDataSetMetaDataImpl implements IDataSetMetaData
+{
+	private IConnection m_connection;
+	private boolean m_supportsMultipleResultSets;
+	private boolean m_supportsMultipleOpenResults;
+	private boolean m_supportsNamedResultSets;
+	private boolean m_supportsNamedParameters;
+	private boolean m_supportsInParameters;
+	private boolean m_supportsOutParameters;
+	
+	private static final String MULTIPLE_RESULT_SETS_DATA_SET = "Multiple Result Sets Data Set";
+	private static final String NAMED_RESULT_SETS_DATA_SET = "Named Result Sets Data Set";
+	
+	TestDataSetMetaDataImpl( IConnection connection, String dataSetType )
+	{
+		m_connection = connection;
+		
+		m_supportsMultipleResultSets = ( dataSetType != null &&
+				dataSetType.equals( MULTIPLE_RESULT_SETS_DATA_SET ) );
+		m_supportsMultipleOpenResults = false;
+		m_supportsNamedResultSets = ( dataSetType != null && 
+				dataSetType.equals( NAMED_RESULT_SETS_DATA_SET ) );
+		m_supportsNamedParameters = true;
+		m_supportsInParameters = true;
+		m_supportsOutParameters = true;
+	}
+	
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getConnection()
+	 */
+	public IConnection getConnection() throws OdaException
+	{
+		return m_connection;
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getDataSourceObjects(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
+	 */
+	public IResultSet getDataSourceObjects( String catalog, String schema, String object, String version ) throws OdaException
+	{
+	    throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getDataSourceMajorVersion()
+	 */
+	public int getDataSourceMajorVersion() throws OdaException
+	{
+		return 2;
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getDataSourceMinorVersion()
+	 */
+	public int getDataSourceMinorVersion() throws OdaException
+	{
+		return 3;
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getDataSourceProductName()
+	 */
+	public String getDataSourceProductName() throws OdaException
+	{
+		return "Simple Data Source";
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getDataSourceProductVersion()
+	 */
+	public String getDataSourceProductVersion() throws OdaException
+	{
+		return Integer.toString( getDataSourceMajorVersion() ) + "." + 
+			   Integer.toString( getDataSourceMinorVersion() );
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getSQLStateType()
+	 */
+	public int getSQLStateType() throws OdaException
+	{
+		return IDataSetMetaData.sqlStateSQL99;
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#supportsMultipleResultSets()
+	 */
+	public boolean supportsMultipleResultSets() throws OdaException
+	{
+		return m_supportsMultipleResultSets;
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#supportsMultipleOpenResults()
+	 */
+	public boolean supportsMultipleOpenResults() throws OdaException
+	{
+		return m_supportsMultipleOpenResults;
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#supportsNamedResultSets()
+	 */
+	public boolean supportsNamedResultSets() throws OdaException
+	{
+		return m_supportsNamedResultSets;
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#supportsNamedParameters()
+	 */
+	public boolean supportsNamedParameters() throws OdaException
+	{
+		return m_supportsNamedParameters;
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#supportsInParameters()
+	 */
+	public boolean supportsInParameters() throws OdaException
+	{
+		return m_supportsInParameters;
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#supportsOutParameters()
+	 */
+	public boolean supportsOutParameters() throws OdaException
+	{
+		return m_supportsOutParameters;
+	}
+
+	/**
+	 * @see org.eclipse.datatools.connectivity.oda.IDataSetMetaData#getSortMode()
+	 */
+	public int getSortMode()
+	{
+		return IDataSetMetaData.sortModeNone;
+	}
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestDriverImpl.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestDriverImpl.java
new file mode 100644
index 0000000..1f6262f
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestDriverImpl.java
@@ -0,0 +1,117 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.testdriver;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.oda.IConnection;
+import org.eclipse.datatools.connectivity.oda.IDriver;
+import org.eclipse.datatools.connectivity.oda.LogConfiguration;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.util.logging.LogManager;
+import org.eclipse.datatools.connectivity.oda.util.logging.Logger;
+
+/**
+ * A tester ODA driver to test the behavior of odaconsumer, calling
+ * on an ODA driver's IDriver implementation. 
+ * Behavior being tested include:
+ * 	setAppContext
+ */
+public class TestDriverImpl implements IDriver
+{
+    public static final String TEST_DRIVER_CONN_STATE = 
+        "org.eclipse.datatools.connectivity.oda.consumer.testdriver.TestDriverImpl.connstate";
+    public static final String TEST_DRIVER_CONN_STATE_OPEN = "isOpen";
+
+    private Object m_appContext;
+
+    // the same driver instance is cached by odaconsumer
+    // for the same ODA driver type, and gets re-used
+    // when it opens a connection;
+    // use counter to keep track of the sequence that
+    // setAppContext and getConnection got called by odaconsumer
+    private int m_setAppContextCallCounter = 0;
+    private int m_getConnectionCallCounter = 0;
+
+    public TestDriverImpl()
+    {        
+    }
+        
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IDriver#setAppContext(java.lang.Object)
+     */
+    public void setAppContext( Object context ) throws OdaException
+    {
+        m_setAppContextCallCounter++;
+        if( m_setAppContextCallCounter <= m_getConnectionCallCounter )
+            throw new OdaException( "Error: setAppContext should have been called *before* IDriver.getConnection." );
+        m_appContext = context;
+    }
+    
+    public Object getAppContext()
+    {
+        return m_appContext;
+    }    
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IDriver#getConnection(java.lang.String)
+     */
+    public IConnection getConnection( String connectionClassName )
+            throws OdaException
+    {
+        m_getConnectionCallCounter++;
+        
+        // check if the appContext contains connection state to use
+        boolean isConnOpen = false;
+        if( m_appContext != null && ( m_appContext instanceof Properties ) )
+        {
+            Object connState = ((Properties) m_appContext).get( TEST_DRIVER_CONN_STATE );
+            if( connState != null &&
+                connState.toString().equals( TEST_DRIVER_CONN_STATE_OPEN ) )
+                isConnOpen = true;
+        }
+        
+        return new TestConnectionImpl( isConnOpen );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IDriver#getMaxConnections()
+     */
+    public int getMaxConnections() throws OdaException
+    {
+        return 2;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IDriver#setLogConfiguration(org.eclipse.datatools.connectivity.oda.LogConfiguration)
+     */
+    public void setLogConfiguration( LogConfiguration logConfig )
+            throws OdaException
+    {
+        if( logConfig == null )
+            return;
+        
+        if( logConfig.getFormatterClassName() == "throwsException" )
+            throw new UnsupportedOperationException();
+        
+        // proceed to create log and write at config level
+        Logger logger = LogManager.getLogger( logConfig.getDataSourceId(), 
+                    logConfig.getLogLevel(), 
+                    logConfig.getLogDirectory(), 
+                    logConfig.getLogPrefix(), 
+                    logConfig.getFormatterClassName() );
+        logger.config( "Created logger in TestDriverImpl.setLogConfiguration." );
+    }
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestInputParamRowSetImpl.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestInputParamRowSetImpl.java
new file mode 100644
index 0000000..fbc7e16
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestInputParamRowSetImpl.java
@@ -0,0 +1,163 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.testdriver;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+import java.sql.Time;
+import java.sql.Timestamp;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+public class TestInputParamRowSetImpl extends TestParamRowSetImpl 
+{
+	TestInputParamRowSetImpl( boolean isTable ) throws OdaException
+	{
+		super( isTable, new TestResultSetMetaDataImpl( false ) );
+	}
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IParameterRowSet#setBoolean(int, boolean)
+     */
+    public void setBoolean( int columnIndex, boolean value )
+            throws OdaException
+    {
+        setValue( columnIndex, new Boolean( value ) );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IParameterRowSet#setBoolean(java.lang.String, boolean)
+     */
+    public void setBoolean( String columnName, boolean value )
+            throws OdaException
+    {
+        setValue( columnName, new Boolean( value ) );
+    }
+
+	public void setBigDecimal( int columnIndex, BigDecimal value )
+			throws OdaException 
+	{
+		setValue( columnIndex, value );
+	}
+
+	public void setBigDecimal( String columnName, BigDecimal value )
+			throws OdaException 
+	{
+		setValue( columnName, value );
+	}
+
+	public void setDate( int columnIndex, Date value ) throws OdaException
+	{
+		setValue( columnIndex, value );
+	}
+
+	public void setDate( String columnName, Date value ) throws OdaException
+	{
+		setValue( columnName, value );
+	}
+
+	public void setDouble( int columnIndex, double value ) throws OdaException
+	{
+		setValue( columnIndex, new Double( value ) );
+	}
+
+	public void setDouble( String columnName, double value ) throws OdaException
+	{
+		setValue( columnName, new Double( value ) );
+	}
+
+	public void setInt( int columnIndex, int value ) throws OdaException
+	{
+		setValue( columnIndex, new Integer( value ) );
+	}
+
+	public void setInt( String columnName, int value ) throws OdaException
+	{
+		setValue( columnName, new Integer( value ) );
+	}
+
+	/* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IParameterRowSet#setObject(int, java.lang.Object)
+     */
+    public void setObject( int columnIndex, Object value ) throws OdaException
+    {
+        setValue( columnIndex, value );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IParameterRowSet#setObject(java.lang.String, java.lang.Object)
+     */
+    public void setObject( String columnName, Object value )
+            throws OdaException
+    {
+        setValue( columnName, value );
+    }
+
+    public void setString( int columnIndex, String value ) throws OdaException
+	{
+		setValue( columnIndex, value );
+	}
+
+	public void setString( String columnName, String value ) throws OdaException
+	{
+		setValue( columnName, value );
+	}
+
+	public void setTime( int columnIndex, Time value ) throws OdaException
+	{
+		setValue( columnIndex, value );
+	}
+
+	public void setTime( String columnName, Time value ) throws OdaException
+	{
+		setValue( columnName, value );
+	}
+
+	public void setTimestamp( int columnIndex, Timestamp value )
+			throws OdaException
+	{
+		setValue( columnIndex, value );
+	}
+
+	public void setTimestamp( String columnName, Timestamp value )
+			throws OdaException
+	{
+		setValue( columnName, value );
+	}
+
+    public void setNull( int columnIndex )
+            throws OdaException
+    {
+        setValue( columnIndex, null );
+    }
+
+    public void setNull( String columnName )
+            throws OdaException
+    {
+        setValue( columnName, null );
+    }
+
+	private void setValue( int columnIndex, Object val ) throws OdaException
+	{
+		TestParamRow row = getCurrentRow();
+		row.setValue( columnIndex, val );
+	}
+
+	private void setValue( String colName, Object val ) throws OdaException
+	{
+		int index = getColIndex( colName );
+		setValue( index, val );
+	}
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestOutputParamRowSetImpl.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestOutputParamRowSetImpl.java
new file mode 100644
index 0000000..7596f36
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestOutputParamRowSetImpl.java
@@ -0,0 +1,186 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.testdriver;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+import java.sql.Time;
+import java.sql.Timestamp;
+
+import org.eclipse.datatools.connectivity.oda.IBlob;
+import org.eclipse.datatools.connectivity.oda.IClob;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+public class TestOutputParamRowSetImpl extends TestParamRowSetImpl  
+{
+	private boolean m_wasNull = false;
+	
+	TestOutputParamRowSetImpl() throws OdaException
+	{
+		// Currently, structure is the only type of complex output parameter.
+		// Table is not an option.
+		super( false, new TestResultSetMetaDataImpl( true ) );
+	}
+
+    public boolean getBoolean( int index ) throws OdaException 
+    {
+        checkColIndex( index );
+        m_wasNull = false;
+        return TestData.createBooleanFalseData();
+    }
+
+    public boolean getBoolean( String columnName ) throws OdaException 
+    {
+        int index = getColIndex( columnName );
+        return getBoolean( index );
+    }
+
+	public BigDecimal getBigDecimal(int index) throws OdaException 
+	{
+		checkColIndex( index );
+		m_wasNull = false;
+		return TestData.createBigDecimalData();
+	}
+
+	public BigDecimal getBigDecimal(String columnName) throws OdaException 
+	{
+		int index = getColIndex( columnName );
+		return getBigDecimal( index );
+	}
+
+	public IBlob getBlob(int index) throws OdaException 
+	{
+		checkColIndex( index );
+		
+		if ( index == 2 )
+		{
+			m_wasNull = false;
+			return TestData.createBlobData();
+		}
+		
+		m_wasNull = true;
+		return null;
+	}
+
+	public IBlob getBlob(String columnName) throws OdaException 
+	{
+		int index = getColIndex( columnName );
+		return getBlob( index );
+	}
+
+	public IClob getClob(int index) throws OdaException 
+	{
+		checkColIndex( index );
+		
+		if ( index == 4 )
+		{
+			m_wasNull = false;
+			return TestData.createClobData();
+		}
+		
+		m_wasNull = true;
+		return null;		
+	}
+
+	public IClob getClob(String columnName) throws OdaException 
+	{
+		int index = getColIndex( columnName );
+		return getClob( index );
+	}
+
+	public Date getDate(int index) throws OdaException 
+	{
+		checkColIndex( index );
+		m_wasNull = false;
+		return TestData.createDateData();
+	}
+
+	public Date getDate(String columnName) throws OdaException 
+	{
+		int index = getColIndex( columnName );
+		return getDate( index );
+	}
+
+	public double getDouble(int index) throws OdaException 
+	{
+		checkColIndex( index );
+		m_wasNull = false;
+		return TestData.createDoubleData();
+	}
+
+	public double getDouble(String columnName) throws OdaException 
+	{
+		int index = getColIndex( columnName );
+		return getDouble( index );
+	}
+
+	public int getInt(int index) throws OdaException 
+	{
+		checkColIndex( index );
+		m_wasNull = false;
+		return TestData.createIntData();
+	}
+
+	public int getInt(String columnName) throws OdaException 
+	{
+		int index = getColIndex( columnName );
+		return getInt( index );
+	}
+
+	public String getString(int index) throws OdaException 
+	{
+		checkColIndex( index );
+		m_wasNull = false;
+		return TestData.createStringData();
+	}
+
+	public String getString(String columnName) throws OdaException 
+	{
+		int index = getColIndex( columnName );
+		return getString( index );
+	}
+
+	public Time getTime(int index) throws OdaException 
+	{
+		checkColIndex( index );
+		m_wasNull = false;
+		return TestData.createTimeData();
+	}
+
+	public Time getTime(String columnName) throws OdaException 
+	{
+		int index = getColIndex( columnName );
+		return getTime( index );
+	}
+
+	public Timestamp getTimestamp(int index) throws OdaException 
+	{
+		checkColIndex( index );
+		m_wasNull = false;
+		return TestData.createTimestampData();
+	}
+
+	public Timestamp getTimestamp(String columnName) throws OdaException 
+	{
+		int index = getColIndex( columnName );
+		return getTimestamp( index );
+	}
+
+	public boolean wasNull() throws OdaException 
+	{
+		return m_wasNull;
+	}
+
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestParamMetaDataImpl.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestParamMetaDataImpl.java
new file mode 100644
index 0000000..0ec6001
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestParamMetaDataImpl.java
@@ -0,0 +1,270 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.testdriver;
+
+import java.sql.Types;
+import java.util.ArrayList;
+
+import org.eclipse.datatools.connectivity.oda.IParameterMetaData;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+
+public class TestParamMetaDataImpl implements IParameterMetaData 
+{
+	ArrayList m_params = null;
+	public final static int QUERY_TYPE_SIMPLE = 0;
+	public final static int QUERY_TYPE_COMPLEX = 1;	
+	public final static int QUERY_TYPE_ADVANCED = 2;
+	public final static int NATIVETYPE_TABLE_CODE = Types.OTHER;
+	
+    @SuppressWarnings("unchecked")
+    public TestParamMetaDataImpl( int queryType )
+    {
+    	m_params = new ArrayList();
+    	
+    	if ( queryType == QUERY_TYPE_SIMPLE )
+    	{
+	    	m_params.add( new TestParameterMetaData( "StringParamIn", Types.VARCHAR, "CHAR", -1, -1, 
+	    		IParameterMetaData.parameterModeOut, IParameterMetaData.parameterNullableUnknown ) );
+		    m_params.add( new TestParameterMetaData( "DateParamIn", Types.DATE, "DATE", -1, -1, 
+		    	IParameterMetaData.parameterModeOut, IParameterMetaData.parameterNullableUnknown ) );
+		    
+		    // Notice that here the data type is unknown in the plugin.xml.
+		    m_params.add( new TestParameterMetaData( "DummyParamIn", Types.NULL, "Unknown type", -1, -1, 
+		    	IParameterMetaData.parameterModeOut, IParameterMetaData.parameterNullableUnknown ) );    		
+    	}
+    	else if ( queryType == QUERY_TYPE_COMPLEX )
+    	{
+	    	// Input parameters only.
+	    	m_params.add( new TestParameterMetaData( "BigDecimalParamIn", Types.DECIMAL, "BCD", 10, 2, 
+	    		IParameterMetaData.parameterModeIn, IParameterMetaData.parameterNullableUnknown ) );
+		    m_params.add( new TestParameterMetaData( "DateParamIn", Types.DATE, "DATE", -1, -1, 
+		    	IParameterMetaData.parameterModeIn, IParameterMetaData.parameterNullableUnknown ) );
+		    m_params.add( new TestParameterMetaData( "DoubleParamIn", Types.DOUBLE, "DOUBLE", -1, -1, 
+		    	IParameterMetaData.parameterModeIn, IParameterMetaData.parameterNullableUnknown ) );
+		    m_params.add( new TestParameterMetaData( "IntegerParamIn", Types.INTEGER, "INT", 10, -1, 
+		    	IParameterMetaData.parameterModeIn, IParameterMetaData.parameterNullableUnknown ) );
+		    m_params.add( new TestParameterMetaData( "StringParamIn", Types.CHAR, "CHAR", -1, -1, 
+		    	IParameterMetaData.parameterModeIn, IParameterMetaData.parameterNullableUnknown ) );
+		    m_params.add( new TestParameterMetaData( "TimeParamIn", Types.TIME, "TIME", -1, -1, 
+		    	IParameterMetaData.parameterModeIn, IParameterMetaData.parameterNullableUnknown ) );
+		    m_params.add( new TestParameterMetaData( "TimestampParamIn", Types.TIMESTAMP, "TIMESTAMP", -1, -1, 
+		    	IParameterMetaData.parameterModeIn, IParameterMetaData.parameterNullableUnknown ) );
+            m_params.add( new TestParameterMetaData( "BooleanParamIn", Types.BOOLEAN, "BOOLEAN", -1, -1, 
+                IParameterMetaData.parameterModeIn, IParameterMetaData.parameterNullableUnknown ) );
+            m_params.add( new TestParameterMetaData( "ObjectParamIn", Types.JAVA_OBJECT, "JAVAOBJECT", -1, -1, 
+                    IParameterMetaData.parameterModeIn, IParameterMetaData.parameterNullable ) );
+    	}
+    	else if ( queryType == QUERY_TYPE_ADVANCED )
+    	{
+    		// Input parameters.
+		    m_params.add( new TestParameterMetaData( "StructParamIn", Types.STRUCT, "STRUCT", -1, -1, 
+			    	IParameterMetaData.parameterModeIn, IParameterMetaData.parameterNullableUnknown ) );
+		    m_params.add( new TestParameterMetaData( "TableParamIn", NATIVETYPE_TABLE_CODE, "TABLE", -1, -1, 
+			    	IParameterMetaData.parameterModeIn, IParameterMetaData.parameterNullableUnknown ) );
+		    
+	    	// Output parameters.
+	    	m_params.add( new TestParameterMetaData( "BigDecimalParamOut", Types.DECIMAL, "BCD", 10, 2, 
+	    		IParameterMetaData.parameterModeOut, IParameterMetaData.parameterNullableUnknown ) );
+	    	m_params.add( new TestParameterMetaData( "BlobParam1Out", Types.BLOB, "BLOB", -1, -1, 
+	    		IParameterMetaData.parameterModeOut, IParameterMetaData.parameterNoNulls ) );
+	    	m_params.add( new TestParameterMetaData( "BlobParam2Out", Types.BLOB, "BLOB", -1, -1, 
+	    		IParameterMetaData.parameterModeOut, IParameterMetaData.parameterNullable ) );
+	    	m_params.add( new TestParameterMetaData( "ClobParam1Out", Types.CLOB, "CLOB", -1, -1, 
+	    		IParameterMetaData.parameterModeOut, IParameterMetaData.parameterNoNulls ) );
+	    	m_params.add( new TestParameterMetaData( "ClobParam2Out", Types.CLOB, "CLOB", -1, -1, 
+	    		IParameterMetaData.parameterModeOut, IParameterMetaData.parameterNullable ) );
+		    m_params.add( new TestParameterMetaData( "DateParamOut", Types.DATE, "DATE", -1, -1, 
+		    	IParameterMetaData.parameterModeOut, IParameterMetaData.parameterNullableUnknown ) );
+		    m_params.add( new TestParameterMetaData( "DoubleParamOut", Types.DOUBLE, "DOUBLE", -1, -1, 
+		    	IParameterMetaData.parameterModeOut, IParameterMetaData.parameterNullableUnknown ) );
+		    m_params.add( new TestParameterMetaData( "IntegerParamOut", Types.INTEGER, "INT", 10, -1, 
+		    	IParameterMetaData.parameterModeOut, IParameterMetaData.parameterNullableUnknown ) );
+		    m_params.add( new TestParameterMetaData( "StringParamOut", Types.CHAR, "CHAR", -1, -1, 
+		    	IParameterMetaData.parameterModeOut, IParameterMetaData.parameterNullableUnknown ) );
+		    m_params.add( new TestParameterMetaData( "TimeParamOut", Types.TIME, "TIME", -1, -1,
+		    	IParameterMetaData.parameterModeOut, IParameterMetaData.parameterNullableUnknown ) );
+		    m_params.add( new TestParameterMetaData( "TimestampParamOut", Types.TIMESTAMP, "TIMESTAMP", -1, -1,
+		    	IParameterMetaData.parameterModeOut, IParameterMetaData.parameterNullableUnknown ) );
+		    m_params.add( new TestParameterMetaData( "StructParamOut", Types.STRUCT, "STRUCT", -1, -1, 
+			    IParameterMetaData.parameterModeOut, IParameterMetaData.parameterNullableUnknown ) );
+            m_params.add( new TestParameterMetaData( "BooleanParamOut", Types.BOOLEAN, "BOOLEAN", -1, -1, 
+                IParameterMetaData.parameterModeOut, IParameterMetaData.parameterNullableUnknown ) );
+            m_params.add( new TestParameterMetaData( "ObjectParamOut", Types.JAVA_OBJECT, "OBJECT", -1, -1, 
+                    IParameterMetaData.parameterModeOut, IParameterMetaData.parameterNullableUnknown ) );
+    	}
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getParameterCount()
+     */
+    public int getParameterCount() throws OdaException
+    {
+        return m_params.size();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getParameterMode(int)
+     */
+    public int getParameterMode( int index ) throws OdaException
+    {
+    	return getParameter( index ).getMode();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getParameterName(int)
+     */
+    public String getParameterName( int param ) throws OdaException
+    {
+        return null;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getParameterType(int)
+     */
+    public int getParameterType( int index ) throws OdaException
+    {        	
+    	return getParameter( index ).getType();
+    }
+    	
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getParameterTypeName(int)
+     */
+    public String getParameterTypeName( int index ) throws OdaException
+    {
+    	return getParameter( index ).getTypeName();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getPrecision(int)
+     */
+    public int getPrecision( int index ) throws OdaException
+    {
+    	return getParameter( index ).getPrecision();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getScale(int)
+     */
+    public int getScale( int index ) throws OdaException
+    {
+    	return getParameter( index ).getScale();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#isNullable(int)
+     */
+    public int isNullable( int param ) throws OdaException
+    {
+        return IParameterMetaData.parameterNullableUnknown;
+    }
+    
+    public int findInParameter( String name ) throws OdaException
+    {
+    	for( int i = 0; i < m_params.size(); i++ )
+    	{
+    		TestParameterMetaData param = ( TestParameterMetaData ) m_params.get( i );
+    		if ( param.getName().equals( name ) && 
+    				( param.getMode() == IParameterMetaData.parameterModeIn || 
+    				  param.getMode() == IParameterMetaData.parameterModeInOut ) )
+    			return i + 1;
+    	}
+    	
+    	return 0;
+    }
+    
+    public int findOutParameter( String name ) throws OdaException
+    {
+    	for( int i = 0; i < m_params.size(); i++ )
+    	{
+    		TestParameterMetaData param = ( TestParameterMetaData ) m_params.get( i );
+    		if ( param.getName().equals( name ) && 
+    				( param.getMode() == IParameterMetaData.parameterModeOut || 
+    				  param.getMode() == IParameterMetaData.parameterModeInOut ) )
+    			return i + 1;
+    	}
+    	
+    	return 0;
+    }
+    
+    private TestParameterMetaData getParameter( int index ) throws OdaException
+    {
+    	int paramCount = getParameterCount();
+    	
+    	if ( index < 1 || index > paramCount )
+    		throw new OdaException( "Invalid parameter index: " + index );    
+    	
+    	return ( TestParameterMetaData ) m_params.get( index - 1 );
+    }
+    
+    private class TestParameterMetaData
+    {
+    	private String m_name;
+    	private int m_type;
+    	private String m_typeName;
+    	private int m_precision;
+    	private int m_scale;
+    	private int m_mode;
+    	private int m_isNullable;
+    	
+    	TestParameterMetaData( String name, int type, String typeName, int precision, 
+    			int scale, int mode, int isNullable )
+    	{
+    		m_name = name;
+    		m_type = type;
+    		m_typeName = typeName;
+    		m_precision = precision;
+    		m_scale = scale;
+    		m_mode = mode;
+    		m_isNullable = isNullable;
+    	}
+    	
+    	String getName()
+    	{
+    		return m_name;
+    	}
+    	
+    	int getType()
+    	{
+    		return m_type;
+    	}
+    	
+    	String getTypeName()
+    	{
+    		return m_typeName;
+    	}
+    	
+    	int getPrecision()
+    	{
+    		return m_precision;
+    	}
+    	
+    	int getScale()
+    	{
+    		return m_scale;
+    	}
+    	
+    	int getMode()
+    	{
+    		return m_mode;
+    	}
+    	
+    	int getIsNullable()
+    	{
+    		return m_isNullable;
+    	}
+    }
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestParamRowSetImpl.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestParamRowSetImpl.java
new file mode 100644
index 0000000..35272a8
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestParamRowSetImpl.java
@@ -0,0 +1,336 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.testdriver;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+import java.sql.Time;
+import java.sql.Timestamp;
+import java.util.ArrayList;
+
+import org.eclipse.datatools.connectivity.oda.IParameterRowSet;
+import org.eclipse.datatools.connectivity.oda.IResultSetMetaData;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+abstract class TestParamRowSetImpl extends TestResultSetImpl implements IParameterRowSet 
+{
+	private IResultSetMetaData m_paramRowSetMetaData = null;
+	private Object[] m_paramVals = null;
+	
+	private ArrayList m_paramRowSet = new ArrayList();
+	
+	// Indicates whether the Parameter Row Set is a table or a structure.
+	private boolean m_isTable = false;
+	
+	// Position of the current row (cursor).  This value is 1-based.
+	private int m_cursorIndex = 0;
+	
+	// Max rows in the row set.
+	private int m_maxRows = 0;
+	
+	TestParamRowSetImpl( boolean isTable, IResultSetMetaData paramRowSetMetaData ) 
+		throws OdaException
+	{
+        super( ! isTable, paramRowSetMetaData );
+        
+		m_isTable = isTable;
+		
+		m_paramRowSetMetaData = paramRowSetMetaData;
+		m_paramVals = new Object[ m_paramRowSetMetaData.getColumnCount() ];
+		
+		if ( isStruct() )
+		{
+			// A structure only contains 1 row.
+			addRow();
+		}
+	}
+
+	public boolean absolute( int rowIndex ) throws OdaException 
+	{
+		if ( rowIndex > m_paramRowSet.size() )
+			return false;
+		
+		// row index and the cursor position are both 1-based.
+		m_cursorIndex = rowIndex; 
+		return true;
+	}
+
+	public int add() throws OdaException 
+	{
+		if ( isStruct() )
+			throw new OdaException( "Cannot add new parameter row to a structure." );
+		
+		return addRow();
+	}
+
+	public void clear() throws OdaException 
+	{
+		if ( isStruct() )
+			throw new OdaException( "Cannot remove parameter row for a structure." );
+		
+		m_paramRowSet.clear();
+		m_cursorIndex = 0;
+	}
+
+	public boolean isEmpty() throws OdaException 
+	{
+		return m_paramRowSet.isEmpty();
+	}
+
+	public boolean previous() throws OdaException 
+	{
+		if ( isStruct() )
+			throw new OdaException( "Cannot move the parameter row cursor for a structure." );
+		
+		if ( m_cursorIndex > 1 )
+		{
+			m_cursorIndex--;
+			return true;
+		}
+		
+		return false;
+	}
+
+	/* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IParameterRowSet#setBoolean(int, boolean)
+     */
+    public void setBoolean( int columnIndex, boolean value )
+            throws OdaException
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IParameterRowSet#setBoolean(java.lang.String, boolean)
+     */
+    public void setBoolean( String columnName, boolean value )
+            throws OdaException
+    {
+        throw new UnsupportedOperationException();
+    }
+
+	public void setBigDecimal( int columnIndex, BigDecimal value )
+			throws OdaException 
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void setBigDecimal( String columnName, BigDecimal value )
+			throws OdaException 
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void setDate( int columnIndex, Date value ) throws OdaException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void setDate( String columnName, Date value ) throws OdaException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void setDouble( int columnIndex, double value ) throws OdaException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void setDouble( String columnName, double value ) throws OdaException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void setInt( int columnIndex, int value ) throws OdaException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void setInt( String columnName, int value ) throws OdaException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	/* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IParameterRowSet#setObject(int, java.lang.Object)
+     */
+    public void setObject( int columnIndex, Object value ) throws OdaException
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IParameterRowSet#setObject(java.lang.String, java.lang.Object)
+     */
+    public void setObject( String columnName, Object value )
+            throws OdaException
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    public void setString( int columnIndex, String value ) throws OdaException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void setString( String columnName, String value ) throws OdaException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void setTime( int columnIndex, Time value ) throws OdaException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void setTime( String columnName, Time value ) throws OdaException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void setTimestamp( int columnIndex, Timestamp value )
+			throws OdaException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	public void setTimestamp( String columnName, Timestamp value )
+			throws OdaException
+	{
+		throw new UnsupportedOperationException();
+	}
+
+	/* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IParameterRowSet#setNull(int)
+     */
+    public void setNull( int columnIndex ) throws OdaException
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IParameterRowSet#setNull(java.lang.String)
+     */
+    public void setNull( String columnName ) throws OdaException
+    {
+        throw new UnsupportedOperationException();
+    }
+
+	public int size() throws OdaException
+	{
+		return m_paramRowSet.size();
+	}
+
+	public int findColumn( String columnName ) throws OdaException
+	{
+		for( int i = 1; i <= getNumCols(); i++ )
+		{
+			if ( m_paramRowSetMetaData.getColumnName( i ).equals( columnName ) )
+				return i;
+		}
+		
+		return 0;
+	}
+
+	public IResultSetMetaData getMetaData() throws OdaException
+	{
+		return m_paramRowSetMetaData;
+	}
+
+	public int getRow() throws OdaException
+	{
+		return m_cursorIndex;
+	}
+
+	public boolean next() throws OdaException
+	{
+		if ( m_cursorIndex < m_maxRows && m_cursorIndex < m_paramRowSet.size() )
+		{
+			m_cursorIndex++;
+			return true;
+		}
+			
+		return false;
+	}
+
+	public void setMaxRows( int max ) throws OdaException
+	{
+		m_maxRows = max;
+	}
+
+	protected TestParamRow getCurrentRow() throws OdaException
+	{
+		if ( isTable() && m_cursorIndex == 0 )
+			throw new OdaException( "Cannot set value because there are no rows in the parameter row set." );
+		
+		return ( TestParamRow ) m_paramRowSet.get( m_cursorIndex - 1 );		
+	}
+	
+	protected int getColIndex( String colName ) throws OdaException
+	{
+		int index = findColumn( colName );
+		if ( index == 0 )
+			throw new OdaException( "Unknown column name: " + colName );
+		
+		return index;
+	}
+	
+	protected void checkColIndex( int index ) throws OdaException
+	{
+		if ( index < 1 || index > getNumCols() )
+			throw new OdaException( "Invalid index: " + index );
+	}
+	
+	private int getNumCols() throws OdaException
+	{
+		return m_paramRowSetMetaData.getColumnCount();
+	}
+	
+	private boolean isTable() 
+	{
+		return m_isTable;
+	}
+	
+	private boolean isStruct()
+	{
+		return m_isTable == false;
+	}
+
+	private int addRow()
+	{
+		m_paramRowSet.add( new TestParamRow() );
+		m_cursorIndex = m_paramRowSet.size();
+		return m_cursorIndex;
+	}
+	
+	class TestParamRow
+	{
+		TestParamRow()
+		{			
+		}
+		
+		void setValue( int index, Object val ) throws OdaException
+		{
+			checkColIndex( index );
+			m_paramVals[ index - 1 ] = val;
+		}
+		
+		void setValue( String colName, Object val ) throws OdaException
+		{
+			int index = getColIndex( colName );
+			setValue( index, val );
+		}
+	}
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestResultSetImpl.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestResultSetImpl.java
new file mode 100644
index 0000000..1561a39
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestResultSetImpl.java
@@ -0,0 +1,280 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.testdriver;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+import java.sql.Time;
+import java.sql.Timestamp;
+
+import org.eclipse.datatools.connectivity.oda.IBlob;
+import org.eclipse.datatools.connectivity.oda.IClob;
+import org.eclipse.datatools.connectivity.oda.IQuery;
+import org.eclipse.datatools.connectivity.oda.IResultSet;
+import org.eclipse.datatools.connectivity.oda.IResultSetMetaData;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+class TestResultSetImpl implements IResultSet 
+{
+	private IResultSetMetaData m_resultSetMetaData = null;
+	private int m_currentRow = 0;
+	private int m_numRows = 5;
+	private int m_maxRows = 0;
+	private boolean m_wasNull = false;
+	private boolean m_isOpen = true;
+	
+	TestResultSetImpl( IQuery query, boolean isSmallResultSet ) throws OdaException
+	{
+		m_resultSetMetaData = query.getMetaData();
+		
+		if ( isSmallResultSet )
+			m_numRows = 1;
+	}
+    
+    TestResultSetImpl( boolean hasOneRow, IResultSetMetaData rsmd )
+    {
+        m_resultSetMetaData = rsmd;
+        
+        if ( hasOneRow )
+            m_numRows = 1;
+    }
+	
+	public void close() throws OdaException 
+	{
+		m_isOpen = false;
+	}
+
+	public int findColumn(String columnName) throws OdaException 
+	{
+		int numCols = m_resultSetMetaData.getColumnCount();
+		for( int i = 1; i <= numCols; i++ )
+		{
+			String name = m_resultSetMetaData.getColumnName( i );
+			if ( name.equals( columnName ) )
+				return i;
+		}
+		
+		throw new OdaException( "Unknown column name : " + columnName );
+	}
+
+    public boolean getBoolean( int index ) throws OdaException 
+    {
+        checkColumnIndex( index );
+        m_wasNull = false;
+        return TestData.createBooleanFalseData();
+    }
+
+    public boolean getBoolean( String columnName ) throws OdaException 
+    {
+        int index = findColumn( columnName );
+        return getBoolean( index );
+    }
+	
+	public BigDecimal getBigDecimal(int index) throws OdaException 
+	{
+		checkColumnIndex( index );
+		m_wasNull = false;
+		return TestData.createBigDecimalData();
+	}
+
+	public BigDecimal getBigDecimal(String columnName) throws OdaException 
+	{
+		int index = findColumn( columnName );
+		return getBigDecimal( index );
+	}
+
+	public IBlob getBlob(int index) throws OdaException 
+	{
+		checkColumnIndex( index );
+		
+		// Column 2 will return a Blob object with bytes data.
+		if ( index == 2 )
+		{
+			m_wasNull = false;
+			return TestData.createBlobData();
+		}
+		
+		// Otherwise, a Blob object with null bytes data will be returned.
+		m_wasNull = true;
+		return null;
+	}
+
+	public IBlob getBlob(String columnName) throws OdaException 
+	{
+		int index = findColumn( columnName );
+		return getBlob( index );
+	}
+
+	public IClob getClob(int index) throws OdaException 
+	{
+		checkColumnIndex( index );
+		
+		// Column 2 will return a Blob object with bytes data.
+		if ( index == 4 )
+		{
+			m_wasNull = false;
+			return TestData.createClobData();
+		}
+		
+		// Otherwise, a Clob object with null string data will be returned.
+		m_wasNull = true;
+		return null;
+	}
+
+	public IClob getClob(String columnName) throws OdaException 
+	{
+		int index = findColumn( columnName );
+		return getClob( index );
+	}
+
+	public Date getDate(int index) throws OdaException 
+	{
+		checkColumnIndex( index );
+		m_wasNull = false;
+		return TestData.createDateData();
+	}
+
+	public Date getDate(String columnName) throws OdaException 
+	{
+		int index = findColumn( columnName );
+		return getDate( index );
+	}
+
+	public double getDouble(int index) throws OdaException 
+	{
+		checkColumnIndex( index );
+		m_wasNull = false;
+		return TestData.createDoubleData();
+	}
+
+	public double getDouble(String columnName) throws OdaException 
+	{
+		int index = findColumn( columnName );
+		return getDouble( index );
+	}
+
+	public int getInt(int index) throws OdaException 
+	{
+		checkColumnIndex( index );
+		m_wasNull = false;
+		return TestData.createIntData();
+	}
+
+	public int getInt(String columnName) throws OdaException 
+	{
+		int index = findColumn( columnName );
+		return getInt( index );
+	}
+
+	public IResultSetMetaData getMetaData() throws OdaException 
+	{
+		return m_resultSetMetaData;
+	}
+
+	public int getRow() throws OdaException 
+	{
+		return m_currentRow;
+	}
+
+	/* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getObject(int)
+     */
+    public Object getObject( int index ) throws OdaException
+    {
+        checkColumnIndex( index );
+        m_wasNull = false;
+        return TestData.createObjectData();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IResultSet#getObject(java.lang.String)
+     */
+    public Object getObject( String columnName ) throws OdaException
+    {
+        int index = findColumn( columnName );
+        return getObject( index );      
+    }
+
+    public String getString(int index) throws OdaException 
+	{
+		checkColumnIndex( index );
+		m_wasNull = false;
+		return TestData.createStringData();
+	}
+
+	public String getString(String columnName) throws OdaException 
+	{
+		int index = findColumn( columnName );
+		return getString( index );		
+	}
+
+	public Time getTime(int index) throws OdaException 
+	{
+		checkColumnIndex( index );
+		m_wasNull = false;
+		return TestData.createTimeData();
+	}
+
+	public Time getTime(String columnName) throws OdaException 
+	{
+		int index = findColumn( columnName );
+		return getTime( index );	
+	}
+
+	public Timestamp getTimestamp(int index) throws OdaException 
+	{
+		checkColumnIndex( index );
+		m_wasNull = false;
+		return TestData.createTimestampData();
+	}
+
+	public Timestamp getTimestamp(String columnName) throws OdaException 
+	{
+		int index = findColumn( columnName );
+		m_wasNull = false;
+		return getTimestamp( index );	
+	}
+
+	public boolean next() throws OdaException 
+	{
+		if ( ! m_isOpen )
+			throw new OdaException( "Result set has been closed." );
+		
+		if ( m_currentRow < m_numRows && 
+				( m_maxRows == 0 || m_currentRow < m_maxRows ) )
+		{
+			m_currentRow++;
+			return true;
+		}
+		
+		return false;
+	}
+
+	public void setMaxRows(int max) throws OdaException 
+	{
+		m_maxRows = max;
+	}
+
+	public boolean wasNull() throws OdaException 
+	{
+		return m_wasNull;
+	}
+	
+	private void checkColumnIndex( int index ) throws OdaException 
+	{
+		if ( index < 1 || index > m_resultSetMetaData.getColumnCount() )
+			throw new OdaException( "Invalid column index : " + index );
+	}
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestResultSetMetaDataImpl.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestResultSetMetaDataImpl.java
new file mode 100644
index 0000000..7430c58
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/TestResultSetMetaDataImpl.java
@@ -0,0 +1,198 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.testdriver;
+
+import java.sql.Types;
+import java.util.ArrayList;
+
+import org.eclipse.datatools.connectivity.oda.IResultSetMetaData;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+class TestResultSetMetaDataImpl implements IResultSetMetaData 
+{
+	private ArrayList m_columns = null;
+	
+	TestResultSetMetaDataImpl()
+	{
+		init( true );
+	}
+	
+	TestResultSetMetaDataImpl( boolean includeLOBs )
+	{
+		init( includeLOBs );
+	}
+
+	public int getColumnCount() throws OdaException 
+	{
+		return m_columns.size();
+	}
+
+	public int getColumnDisplayLength(int index) throws OdaException 
+	{
+		return getCol( index ).getDisplayLength();
+	}
+
+	public String getColumnLabel(int index) throws OdaException 
+	{
+		return getCol( index ).getLabel();
+	}
+
+	public String getColumnName(int index) throws OdaException 
+	{
+		return getCol( index ).getName();
+	}
+
+	public int getColumnType(int index) throws OdaException 
+	{
+		return getCol( index ).getType();
+	}
+
+	public String getColumnTypeName(int index) throws OdaException 
+	{
+		return getCol( index ).getTypeName();
+	}
+
+	public int getPrecision(int index) throws OdaException 
+	{
+		return getCol( index ).getPrecision();
+	}
+
+	public int getScale(int index) throws OdaException 
+	{
+		return getCol( index ).getScale();
+	}
+
+	public int isNullable(int index) throws OdaException 
+	{
+		return getCol( index ).isNullable();
+	}
+		
+	@SuppressWarnings("unchecked")
+    private void init( boolean includeLOBs ) 
+	{
+		m_columns = new ArrayList();
+		
+		m_columns.add( new 
+			TestColumnMetaData( 13, "BigDecimalLabel", "BigDecimalCol", 3, "BCD", 10, 2, columnNoNulls ) );
+		
+		if ( includeLOBs )
+		{
+			m_columns.add( new 
+				TestColumnMetaData( 50, "BlobLabel1", "BlobCol1", 97, "BLOB", -1, -1, columnNoNulls ) );
+			m_columns.add( new 
+				TestColumnMetaData( 50, "BlobLabel2", "BlobCol2", 97, "BLOB", -1, -1, columnNullable ) );
+			m_columns.add( new 
+				TestColumnMetaData( 100, "ClobLabel1", "ClobCol1", 98, "CLOB", -1, -1, columnNoNulls ) );
+			m_columns.add( new 
+				TestColumnMetaData( 100, "ClobLabel2", "ClobCol2", 98, "CLOB", -1, -1, columnNullable ) );
+		}
+		
+		m_columns.add( new 
+			TestColumnMetaData( 10, "DateLabel", "DateCol", 91, "DATE", -1, -1, columnNoNulls ) );
+		m_columns.add( new 
+			TestColumnMetaData( 10, "DoubleLabel", "DoubleCol", 8, "DOUBLE", -1, -1, columnNoNulls ) );
+		m_columns.add( new 
+			TestColumnMetaData( 11, "IntLabel", "IntCol", 4, "INT", 10, -1, columnNoNulls ) );
+		m_columns.add( new 
+			TestColumnMetaData( 20, "StringLabel", "StringCol", 12, "CHAR", -1, -1, columnNoNulls ) );
+		m_columns.add( new
+			TestColumnMetaData( 17, "TimeLabel", "TimeCol", 92, "TIME", -1, -1, columnNoNulls ) );
+		m_columns.add( new
+			TestColumnMetaData( 17, "TimestampLabel", "TimestampCol", 93, "TIMESTAMP", -1, -1, columnNoNulls ) );
+        m_columns.add( new
+            TestColumnMetaData( 5, "BooleanLabel", "BooleanCol", Types.BOOLEAN, "BOOLEAN", -1, -1, columnNoNulls ) );
+        m_columns.add( new
+            TestColumnMetaData( 100, "ObjectLabel", "ObjectCol", Types.JAVA_OBJECT, "JAVAOBJECT", -1, -1, columnNullable ) );
+	}
+	
+	private TestColumnMetaData getCol( int index ) throws OdaException
+	{
+		if ( index < 1 || index > m_columns.size() )
+			throw new OdaException( "Invalid column index : " + index );
+		
+		return ( TestColumnMetaData ) m_columns.get( index - 1 );
+	}
+	
+	private class TestColumnMetaData 
+	{
+		private int m_displayLength = 0;
+		private String m_label = null;
+		private String m_name = null;
+		private int m_type = 0;
+		private String m_typeName = null;
+		private int m_precision = 0;
+		private int m_scale = 0;
+		private int m_isNullable;
+		
+		TestColumnMetaData( int displayLength,
+				String label,
+				String name,
+				int type,
+				String typeName,
+				int precision,
+				int scale,
+				int isNullable )
+		{
+			m_displayLength = displayLength;
+			m_label = label;
+			m_name = name;
+			m_type = type;
+			m_typeName = typeName;
+			m_precision = precision;
+			m_scale = scale;
+			m_isNullable = isNullable;
+		}
+		
+		int getDisplayLength()
+		{
+			return m_displayLength;
+		}
+
+		String getLabel()
+		{
+			return m_label;
+		}
+
+		String getName()
+		{
+			return m_name;
+		}
+
+		int getType()
+		{
+			return m_type;
+		}
+
+		String getTypeName() 
+		{
+			return m_typeName;
+		}
+
+		int getPrecision() 
+		{
+			return m_precision;
+		}
+
+		public int getScale() 
+		{
+			return m_scale;
+		}
+
+		public int isNullable() throws OdaException 
+		{
+			return m_isNullable;
+		}	
+	}
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/spec/impl/ExpressionTester.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/spec/impl/ExpressionTester.java
new file mode 100644
index 0000000..5f61410
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/spec/impl/ExpressionTester.java
@@ -0,0 +1,168 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.testdriver.spec.impl;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExecutableExtension;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.spec.IValidator;
+import org.eclipse.datatools.connectivity.oda.spec.QuerySpecification;
+import org.eclipse.datatools.connectivity.oda.spec.ValidationContext;
+import org.eclipse.datatools.connectivity.oda.spec.impl.ValidatorBaseImpl;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.ExtensionContributor;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.SupportedDataSetType;
+import org.eclipse.datatools.connectivity.oda.spec.result.ColumnIdentifier;
+import org.eclipse.datatools.connectivity.oda.spec.result.FilterExpression;
+import org.eclipse.datatools.connectivity.oda.spec.result.ResultSetSpecification;
+import org.eclipse.datatools.connectivity.oda.spec.result.SortSpecification;
+import org.eclipse.datatools.connectivity.oda.spec.result.filter.CustomExpression;
+import org.eclipse.datatools.connectivity.oda.spec.util.QuerySpecificationHelper;
+
+/**
+ *  Sample custom validator of extension-defined filter expressions.
+ */
+@SuppressWarnings("restriction")
+public class ExpressionTester extends ValidatorBaseImpl implements IValidator, IExecutableExtension
+{
+    private ExtensionContributor m_contributor;
+
+    public ExpressionTester()
+    {}
+
+    /* (non-Javadoc)
+     * @see org.eclipse.core.runtime.IExecutableExtension#setInitializationData(org.eclipse.core.runtime.IConfigurationElement, java.lang.String, java.lang.Object)
+     */
+    public void setInitializationData( IConfigurationElement contributorElement,
+            String propertyName, Object data ) throws CoreException
+    {
+        try
+        {
+            m_contributor = new ExtensionContributor( contributorElement );
+        }
+        catch( OdaException ex )
+        {
+            // TODO ignore, log warning
+        }
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.filter.IValidator#validate(org.eclipse.datatools.connectivity.oda.filter.FilterExpression, org.eclipse.datatools.connectivity.oda.filter.ValidationContext)
+     */
+    public void validate( FilterExpression expr, ValidationContext context )
+            throws OdaException
+    {
+        validateSyntax( expr, context );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.IValidator#validateSyntax(org.eclipse.datatools.connectivity.oda.spec.result.FilterExpression, org.eclipse.datatools.connectivity.oda.spec.ValidationContext)
+     */
+    public void validateSyntax( FilterExpression expr, ValidationContext context ) throws OdaException
+    {
+        if( !(expr instanceof CustomExpression) )
+        {
+            return;     // done
+        }
+        
+        CustomExpression customExpr = (CustomExpression) expr;
+        
+        // validate if the data set types specified by the contributor of this validator matches 
+        // the type declared as supported in the custom expression definition
+        SupportedDataSetType[] dataSetTypes = m_contributor.getSupportedDataSetTypes();
+        if( dataSetTypes.length > 0 )
+        {
+            boolean supportsExprDataSetType = false;
+            for( int i=0; i < dataSetTypes.length; i++ )
+            {
+                SupportedDataSetType validatorDataSetType = dataSetTypes[i];
+                if( customExpr.supportsDataSetType( validatorDataSetType ))
+                {
+                    supportsExprDataSetType = true;
+                    break;
+                }
+            }
+            if( ! supportsExprDataSetType )
+                throw new OdaException( "The filter expression (" + customExpr.getQualifiedId() 
+                        + ") is not valid for the ODA data set type." );
+        }
+        
+        // TODO 
+        // validate a custom expression is supported 
+        // vaildate ExpressionVariable is of type RESULT_COLUMN
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.IValidator#validate(org.eclipse.datatools.connectivity.oda.spec.result.SortSpecification, org.eclipse.datatools.connectivity.oda.spec.ValidationContext)
+     */
+    public void validate( SortSpecification sortSpec, ValidationContext context )
+            throws OdaException
+    {
+        if( sortSpec == null )
+            return;
+
+        for( int i=1; i <= sortSpec.getSortKeyCount(); i++ )
+        {
+            // validate that no null ordering is specified
+            int nullOrdering = sortSpec.getNullOrdering( i );
+            if( nullOrdering != SortSpecification.NULL_ORDERING_NONE )
+                throw new OdaException( "Cannot support null ordering: " + nullOrdering ); //$NON-NLS-1$
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.IValidator#validate(org.eclipse.datatools.connectivity.oda.spec.result.SortSpecification, org.eclipse.datatools.connectivity.oda.spec.ValidationContext)
+     */
+    public void validate( QuerySpecification querySpec, ValidationContext context )
+            throws OdaException
+    {
+        validate( querySpec.getResultSetSpecification(), context );
+        
+        SortSpecification sortSpec = QuerySpecificationHelper.getSortSpecification( querySpec );
+        if( sortSpec != null )
+        {
+            for( int i=1; i <= sortSpec.getSortKeyCount(); i++ )
+            {
+                ColumnIdentifier column = sortSpec.getSortColumn( i );
+                
+                // test driver expects sort column identifier are defined as querySpec property names
+                String columnName = column.isIdentifiedByNumber() ? column.getNumber().toString() : column.getNameExpression();
+                if( ! querySpec.getProperties().containsKey( columnName ) )
+                    throw new OdaException( "Unexpected sort column: " + column ); //$NON-NLS-1$
+            }
+        }
+        
+        if( context != null )
+        {
+            String propValue = context.getQueryText();
+            String expectedPropValue = (String) querySpec.getProperties().get( "TESTER_EXPECTED_QUERY" );
+            if(  propValue != expectedPropValue )
+                throw new OdaException( "Unexpected query text: " + propValue ); //$NON-NLS-1$
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.IValidator#validate(org.eclipse.datatools.connectivity.oda.spec.result.ResultSetSpecification, org.eclipse.datatools.connectivity.oda.spec.ValidationContext)
+     */
+    public void validate( ResultSetSpecification resultSetSpec, ValidationContext context ) 
+        throws OdaException
+    {
+        if( resultSetSpec == null )
+            return;
+        validate( resultSetSpec.getSortSpecification(), context );
+        validate( resultSetSpec.getFilterSpecification(), context );
+    }
+
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/spec/impl/MyCombinedOperator.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/spec/impl/MyCombinedOperator.java
new file mode 100644
index 0000000..a0bbfaf
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/spec/impl/MyCombinedOperator.java
@@ -0,0 +1,58 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.testdriver.spec.impl;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.datatools.connectivity.oda.spec.valueexpr.CombinedValueExpressionOperator;
+
+/**
+ * Test class implementation of a custom combined operator type.
+ */
+public class MyCombinedOperator extends CombinedValueExpressionOperator
+{
+    private static final String CUSTOM_COMBINED_OP_ID = "org.eclipse.datatools.connectivity.oda.consumer.testdriver.combinedOperator.dot"; //$NON-NLS-1$
+     
+    /**
+     * Constructor for use in an IExecutableExtension.
+     * @see #setInitializationData
+     */
+    public MyCombinedOperator()
+    {
+        super( null, null );
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.core.runtime.IExecutableExtension#setInitializationData(org.eclipse.core.runtime.IConfigurationElement, java.lang.String, java.lang.Object)
+     */
+    public void setInitializationData( IConfigurationElement config,
+            String propertyName, Object data ) throws CoreException
+    {
+        super.setInitializationData( config, propertyName, data );
+        
+        if( getId().equals( CONCATENATE ) )   // overrides built-in operator's literal representation
+            setLiteral( "||" );
+    }
+
+    @Override
+    public String getLiteral()
+    {
+        // alternate way to override an operator's literal representation
+        if( getId().equals( CUSTOM_COMBINED_OP_ID ) )
+            return "."; //$NON-NLS-1$
+        return super.getLiteral();
+    }
+
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/spec/impl/MyCustomExpression.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/spec/impl/MyCustomExpression.java
new file mode 100644
index 0000000..f204fd0
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/spec/impl/MyCustomExpression.java
@@ -0,0 +1,43 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.testdriver.spec.impl;
+
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionArguments;
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionVariable;
+import org.eclipse.datatools.connectivity.oda.spec.result.filter.CustomExpression;
+
+@SuppressWarnings("restriction")
+public class MyCustomExpression extends CustomExpression
+{
+
+    public MyCustomExpression( String extensionId, String id )
+    {
+        super( extensionId, id );
+        // TODO Auto-generated constructor stub
+    }
+
+    public MyCustomExpression( String extensionId, String id,
+            ExpressionVariable variable, ExpressionArguments args )
+    {
+        super( extensionId, id, variable, args );
+        // TODO Auto-generated constructor stub
+    }
+
+    public MyCustomExpression()
+    {
+        // TODO Auto-generated constructor stub
+    }
+
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/spec/impl/MyCustomFunction.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/spec/impl/MyCustomFunction.java
new file mode 100644
index 0000000..2659f51
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/spec/impl/MyCustomFunction.java
@@ -0,0 +1,65 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.testdriver.spec.impl;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.spec.ValidationContext;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.FunctionExpressionDefinition;
+import org.eclipse.datatools.connectivity.oda.spec.valueexpr.CustomFunction;
+
+/**
+ * Test class implementation of a custom function value expression type.
+ */
+public class MyCustomFunction extends CustomFunction
+{
+
+    /**
+     * @param extensionId
+     * @param id
+     */
+    public MyCustomFunction( String extensionId, String id )
+    {
+        super( extensionId, id );
+    }
+
+    /**
+     * 
+     */
+    public MyCustomFunction()
+    {
+        // TODO Auto-generated constructor stub
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.valueexpr.CustomFunction#getName()
+     */
+    @Override
+    public String getName()
+    {
+        return "My" + super.getName();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.spec.valueexpr.CustomFunction#validateSyntax(org.eclipse.datatools.connectivity.oda.spec.ValidationContext, org.eclipse.datatools.connectivity.oda.spec.manifest.FunctionExpressionDefinition)
+     */
+    @Override
+    protected void validateSyntax( ValidationContext context,
+            FunctionExpressionDefinition defn ) throws OdaException
+    {
+        // TODO override with custom validation
+        super.validateSyntax( context, defn );
+    }
+
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/spec/impl/MySortSpecification.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/spec/impl/MySortSpecification.java
new file mode 100644
index 0000000..6e994b5
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/spec/impl/MySortSpecification.java
@@ -0,0 +1,34 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.testdriver.spec.impl;
+
+import org.eclipse.datatools.connectivity.oda.spec.result.SortSpecification;
+
+/**
+ *
+ */
+@SuppressWarnings("restriction")
+public class MySortSpecification extends SortSpecification
+{
+    public MySortSpecification()
+    {
+        super();
+    }
+    
+    public MySortSpecification( int sortMode )
+    {
+        super( sortMode );
+    }
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/spec/impl/MySpecFactory.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/spec/impl/MySpecFactory.java
new file mode 100644
index 0000000..2475ca3
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.testdriver/src/org/eclipse/datatools/connectivity/oda/consumer/testdriver/spec/impl/MySpecFactory.java
@@ -0,0 +1,37 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.testdriver.spec.impl;
+
+import org.eclipse.datatools.connectivity.oda.spec.result.SortSpecification;
+import org.eclipse.datatools.connectivity.oda.spec.util.QuerySpecificationFactory;
+
+/**
+ *  Extended factory of query specification instances.
+ */
+@SuppressWarnings("restriction")
+public class MySpecFactory extends QuerySpecificationFactory
+{
+
+    protected SortSpecification createSortSpecification()
+    {
+        return new MySortSpecification();
+    }
+   
+    protected SortSpecification createSortSpecification( int sortMode )
+    {
+        return new MySortSpecification( sortMode );
+    }
+
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/.classpath b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/.gitignore b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/.gitignore
new file mode 100644
index 0000000..b13f603
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/.gitignore
@@ -0,0 +1,3 @@
+bin
+*.scc
+TestLogDir
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/.project b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/.project
new file mode 100644
index 0000000..ae22afd
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.oda.consumer.tests</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/META-INF/.gitignore b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/META-INF/.gitignore
new file mode 100644
index 0000000..73ebc4b
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/META-INF/.gitignore
@@ -0,0 +1 @@
+*.scc
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..ef614a4
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/META-INF/MANIFEST.MF
@@ -0,0 +1,14 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: DTP ODA Consumer Helper Tests Suite
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.oda.consumer.tests;singleton:=true
+Bundle-Version: 3.2.4.qualifier
+Bundle-Vendor: Eclipse.org
+Require-Bundle: org.junit;bundle-version="[3.8.1,4.0.0)",
+ org.eclipse.datatools.connectivity.oda.consumer;bundle-version="[3.2.4,4.0.0)",
+ org.eclipse.datatools.connectivity.oda.flatfile;bundle-version="[3.0.2,4.0.0)";resolution:=optional,
+ org.eclipse.core.runtime;bundle-version="[3.3.0,4.0.0)",
+ org.eclipse.datatools.connectivity.oda.consumer.testdriver;bundle-version="[3.2.0,4.0.0)"
+Bundle-ActivationPolicy: lazy
+Bundle-Activator: org.eclipse.datatools.connectivity.oda.consumer.test.impl.OdaConsumerTestPlugin
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/about.html b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/about.html
new file mode 100644
index 0000000..1b7d275
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/about.html
@@ -0,0 +1,28 @@
+<html>
+<head>
+<title>About This Content</title>
+</head>
+<body>
+<div>
+<h3>About This Content</h3>
+<p>May 2, 2006</p>
+<h3>License</h3>
+<p>The Eclipse Foundation makes available all content in this plug-in
+(&quot;Content&quot;). Unless otherwise indicated below, the Content is
+provided to you under the terms and conditions of the Eclipse Public License
+Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available at <a
+href="http://www.eclipse.org/org/documents/epl-v10.php">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation,
+the Content is being redistributed by another party (&quot;Redistributor&quot;)
+and different terms and conditions may apply to your use of any object code in
+the Content. Check the RedistributorÂ’s license that was provided with the
+Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source
+code in the Content and such source code may be obtained at <a
+href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+<p>&nbsp;</p>
+</div>
+</body>
+</html>
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/build.properties b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/build.properties
new file mode 100644
index 0000000..ae1489d
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+bin.includes = META-INF/,\
+               .,\
+               about.html,\
+               plugin.xml
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/plugin.xml b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/plugin.xml
new file mode 100644
index 0000000..8917780
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/plugin.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<!--
+/**
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ *
+ */
+-->
+
+<plugin>
+   <extension
+         point="org.eclipse.datatools.connectivity.oda.consumer.propertyProvider">
+      <dataSourcePropertyService
+            consumerApplicationId="org.eclipse.datatools.connectivity.oda.consumer.tests"
+            providerClass="org.eclipse.datatools.connectivity.oda.consumer.tests.ExternalizedPropertyProvider"/>
+   </extension>
+   <extension
+         point="org.eclipse.datatools.connectivity.oda.consumer.driverBridge">
+      <bridge
+            bridgeId="org.eclipse.datatools.connectivity.oda.consumer.tests"
+            driverType="org.eclipse.datatools.connectivity.oda.consumer.testdriver.TestDriverImpl">
+      </bridge>
+   </extension>
+   <extension
+         id="org.eclipse.datatools.connectivity.oda.consumer.tests"
+         point="org.eclipse.datatools.connectivity.oda.dataSource">
+      <dataSource
+            driverClass="org.eclipse.datatools.connectivity.oda.consumer.test.impl.DummyDriver"
+            id="org.eclipse.datatools.connectivity.oda.consumer.tests"
+            odaVersion="3.0"
+            overrideExplorerFiltering="false"
+            setThreadContextClassLoader="false">
+      </dataSource>
+   </extension>
+
+</plugin>
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/test/impl/DummyDriver.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/test/impl/DummyDriver.java
new file mode 100644
index 0000000..ef8e4ca
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/test/impl/DummyDriver.java
@@ -0,0 +1,72 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.test.impl;
+
+import java.util.Map;
+
+import org.eclipse.datatools.connectivity.oda.IConnection;
+import org.eclipse.datatools.connectivity.oda.IDriver;
+import org.eclipse.datatools.connectivity.oda.LogConfiguration;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+/**
+ *  Dummy IDriver implementation as a placeholder in the oda.datasource extension.
+ */
+public class DummyDriver implements IDriver
+{
+    public static final String DRIVER_NAME_CONTEXT_KEY = "DummyDriver.className"; //$NON-NLS-1$
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IDriver#getConnection(java.lang.String)
+     */
+    public IConnection getConnection( String dataSourceId ) throws OdaException
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IDriver#setLogConfiguration(org.eclipse.datatools.connectivity.oda.LogConfiguration)
+     */
+    public void setLogConfiguration( LogConfiguration logConfig )
+            throws OdaException
+    {
+        // TODO Auto-generated method stub
+
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IDriver#getMaxConnections()
+     */
+    public int getMaxConnections() throws OdaException
+    {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.IDriver#setAppContext(java.lang.Object)
+     */
+    public void setAppContext( Object context ) throws OdaException
+    {
+        if( context instanceof Map )
+        {
+            Map contextMap = (Map)context;
+            ((Map) context).put( DRIVER_NAME_CONTEXT_KEY, getClass().getName() );
+        }
+
+    }
+
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/test/impl/ExternalizedPropertyProvider.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/test/impl/ExternalizedPropertyProvider.java
new file mode 100644
index 0000000..3b5e310
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/test/impl/ExternalizedPropertyProvider.java
@@ -0,0 +1,40 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.test.impl;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.consumer.services.impl.PropertyProviderImpl;
+import org.eclipse.datatools.connectivity.oda.flatfile.CommonConstants;
+
+public class ExternalizedPropertyProvider extends PropertyProviderImpl
+{
+    /* (non-Javadoc)
+     * @see org.eclipse.datatools.connectivity.oda.consumer.services.impl.PropertyProviderImpl#getExternalizedProperties(java.lang.String, java.lang.Object)
+     */
+    protected Properties getExternalizedProperties( String configId, Object appContext ) 
+        throws OdaException
+    {
+        Properties testProps = new Properties();
+        if( appContext != null && appContext instanceof String )
+        {
+            testProps.setProperty( CommonConstants.CONN_HOME_DIR_PROP, 
+                                    (String) appContext );
+            testProps.setProperty( "D", "configD" ); 
+        }
+        return testProps;
+    }
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/test/impl/LoggerAccessor.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/test/impl/LoggerAccessor.java
new file mode 100644
index 0000000..df8095d
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/test/impl/LoggerAccessor.java
@@ -0,0 +1,74 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.test.impl;
+
+import org.eclipse.datatools.connectivity.oda.LogConfiguration;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.consumer.helper.OdaDriver;
+import org.eclipse.datatools.connectivity.oda.util.logging.Logger;
+
+/**
+ * Tester OdaDriver for testing behavior of the ThreadLocal variable
+ * and obtaining odaconsumer logger instance.
+ * It has very specific implementation for verifying test cases 
+ * in {@link LoggerInstanceTest}, should not be used by general test cases.
+ */
+public class LoggerAccessor extends OdaDriver
+{
+
+    public static final String HANDLES_LOG_CONFIG = "HANDLES_LOG_CONFIG"; //$NON-NLS-1$
+
+    public LoggerAccessor( String driverConfig ) throws OdaException
+    {
+        super( driverConfig );
+    }
+
+    /**
+     * Exposes the protected method of base class.
+     */
+    public Logger getLogger()
+    {
+        return super.getLogger();
+    }
+
+    /**
+     * Exposes the protected method of base class.
+     */
+    public void setLogger( Logger logger )
+    {
+        super.setLogger( logger );
+    }
+
+    /**
+     * This method intercepts calls to super.setLogConfiguration.
+     * It stops logger creation while instantiating an OdaDriver in
+     * ODA Consumer helper.  It is intended for verifying very specific 
+     * test cases in {@link LoggerInstanceTest}.
+     */
+    public void setLogConfiguration( LogConfiguration logConfig )
+            throws OdaException
+    {
+        if( logConfig != null )
+        {
+            if( logConfig.getFormatterClassName() != null
+                    && !logConfig.getFormatterClassName().equals( HANDLES_LOG_CONFIG ) )
+            {
+                logConfig = null;   // do not handle the specified logConfig
+            }
+        }
+        super.setLogConfiguration( logConfig );
+    }
+    
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/test/impl/OdaConsumerTestPlugin.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/test/impl/OdaConsumerTestPlugin.java
new file mode 100644
index 0000000..09f4552
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/test/impl/OdaConsumerTestPlugin.java
@@ -0,0 +1,52 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.test.impl;
+
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * Bundle activator class.
+ */
+public class OdaConsumerTestPlugin extends Plugin
+{
+    private static OdaConsumerTestPlugin sm_plugin;
+    
+    public OdaConsumerTestPlugin()
+    {
+        super();
+        sm_plugin = this;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
+     */
+    public void stop( BundleContext context ) throws Exception
+    {
+        // release plugin's singleton instance(s)
+        super.stop( context );
+        sm_plugin = null;
+    }
+   
+    /**
+     * Returns the shared instance of this plugin activator.
+     * @return
+     */
+    public static OdaConsumerTestPlugin getDefault()
+    {
+        return sm_plugin;
+    }
+
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/.gitignore b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/.gitignore
new file mode 100644
index 0000000..73ebc4b
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/.gitignore
@@ -0,0 +1 @@
+*.scc
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/AdvQueryTest.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/AdvQueryTest.java
new file mode 100644
index 0000000..46ae0d8
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/AdvQueryTest.java
@@ -0,0 +1,710 @@
+/*************************************************************************
+ * Copyright (c) 2004, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ */
+ package org.eclipse.datatools.connectivity.oda.consumer.tests;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+import java.sql.Time;
+import java.sql.Timestamp;
+
+import org.eclipse.datatools.connectivity.oda.IAdvancedQuery;
+import org.eclipse.datatools.connectivity.oda.IBlob;
+import org.eclipse.datatools.connectivity.oda.IClob;
+import org.eclipse.datatools.connectivity.oda.IConnection;
+import org.eclipse.datatools.connectivity.oda.IParameterRowSet;
+import org.eclipse.datatools.connectivity.oda.IResultSet;
+import org.eclipse.datatools.connectivity.oda.IResultSetMetaData;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.SortSpec;
+import org.eclipse.datatools.connectivity.oda.consumer.testdriver.TestData;
+import org.eclipse.datatools.connectivity.oda.impl.Blob;
+
+public class AdvQueryTest extends ConnectionTest 
+{
+	private IAdvancedQuery m_query;
+	
+	protected void setUp() throws Exception
+	{
+		super.setUp( );
+
+		IConnection conn = getConnection();
+		m_query = ( IAdvancedQuery ) conn.newQuery( null );
+	}
+
+	protected void tearDown() throws Exception
+	{
+		m_query.close();
+
+		super.tearDown( );
+	}
+	
+	public final void testFindOutParameter() throws OdaException
+	{
+		// Test FindOutParmaeter without preparing the query.
+		// A exception should be caught.
+		try
+		{
+			m_query.findOutParameter( "Dummy name" );
+			
+			// Should not get here.
+			fail();
+		}
+		catch( OdaException e )
+		{
+			String error = e.toString();
+			
+			// Expect an exception complaining about statement not being prepared yet.
+			assertTrue( error.indexOf( "parameter metadata" ) >= 0 &&
+					error.indexOf( "prepared" ) >= 0 );
+		}
+		
+		// Prepare a complex query which takes input parameters.
+		m_query.prepare( "Advanced Query" );
+		
+		// Try look up a valid parameter name.
+		int paramPos = m_query.findOutParameter( "BigDecimalParamOut" );
+		assertTrue( paramPos == 3 );
+		
+		// Try look up an invalid parameter name.
+		String badParamName = "param_unknown";
+		try
+		{
+			paramPos = m_query.findOutParameter( badParamName );
+		}
+		catch( OdaException e )
+		{
+			assertTrue( e.toString().indexOf( badParamName ) >= 0 );
+		}
+	}
+	
+	public final void testSetAndGetParameterValuesByPos() throws OdaException
+	{
+		testSetAndGetParameterValue( true );
+	}
+	
+	public final void testSetAndGetParameterValuesByName() throws OdaException
+	{
+		testSetAndGetParameterValue( false );
+	}
+	
+	public final void testGetResultSetNames() throws OdaException
+	{
+		// Prepare a multiple result set query.
+		m_query.prepare( "Multiple Result Sets Query" );
+		
+		// Call execute().
+		boolean ret = m_query.execute();
+		assertTrue( ret );
+		
+		String[] nameArray = m_query.getResultSetNames();
+		assertTrue( nameArray.length == 2 );
+			
+		for( int i = 0; i < nameArray.length; i++ )
+		{
+			assertEquals( nameArray[ i ], "ResultSet" + ( i + 1 ) );
+		}
+	}
+	
+	public final void testIterateResultSets1()  throws OdaException
+	{
+		// If mulitple result sets is not supported in the data set meta data,
+		// executeQuery() will be called instead of execute(), and only
+		// one result set will be returned.
+		testIterateResultSetsHelper( false );
+	}
+	
+	public final void testIterateResultSets2()  throws OdaException
+	{
+		// If mulitple result sets is supported in the data set meta data,
+		// execute() will be called, and multiple result sets
+		// can be accessed.
+		testIterateResultSetsHelper( true );
+	}
+	
+	
+	public final void testSetAndGetSortSpecByResultSetName() throws OdaException
+	{
+		String resultSetName = "ResultSet1";
+		SortSpec ssIn = new SortSpec( SortSpec.sortAsc );
+		
+		try
+		{
+			// Set sort spec without preparing a query.  An exception should be thrown.
+			m_query.setSortSpec( resultSetName, ssIn );
+			
+			// Should not get here.
+			fail();
+		}
+		catch( OdaException e )
+		{
+			// An exception will be thrown complaining about 
+			// query not prepared yet.
+			assertTrue( e.toString().indexOf( "sort specification" ) >= 0 
+					&& e.toString().indexOf( "prepared" ) >= 0 );
+		}
+		
+		// Prepare a multiple result set query.
+		m_query.prepare( "Multiple Result Sets Query" );
+
+		// Set the sort specification.
+		ssIn = new SortSpec( SortSpec.sortAsc );
+		m_query.setSortSpec( resultSetName, ssIn );
+		
+		// Retrieve the sort specification.  Verify if it is identical to the value set.
+		SortSpec ssOut = m_query.getSortSpec( resultSetName );
+		assertEquals( ssIn, ssOut );
+	}
+	
+	public final void testGetNamedResultSets1() throws OdaException
+	{
+		boolean supportsMultipleResultSets = true;
+		boolean supportsNamedResultSets = false;
+
+		testGetNamedResultSet( supportsMultipleResultSets, supportsNamedResultSets );
+	}
+	
+	public final void testGetNamedResultSets2() throws OdaException
+	{
+		boolean supportsMultipleResultSets = false;
+		boolean supportsNamedResultSets = true;
+		
+		testGetNamedResultSet( supportsMultipleResultSets, supportsNamedResultSets );
+	}
+	
+	public final void testGetNamedResultSets3() throws OdaException
+	{
+		boolean supportsMultipleResultSets = false;
+		boolean supportsNamedResultSets = false;
+		
+		testGetNamedResultSet( supportsMultipleResultSets, supportsNamedResultSets );
+	}
+	
+	private final void testIterateResultSetsHelper( boolean supportMultipleResultSets ) throws OdaException
+	{
+		m_query = ( IAdvancedQuery ) getConnection().newQuery( supportMultipleResultSets ?
+				"Multiple Result Sets Data Set" : null );
+		
+		// Prepare a multiple result set query.
+		m_query.prepare( "Multiple Result Sets Query" );
+		
+		// Call execute().
+		boolean ret = m_query.execute();
+		assertTrue( ret );
+		
+		int count = 0;
+		while( true )
+		{
+			IResultSet rs = m_query.getResultSet();
+			assertNotNull( rs );
+			
+			count++;
+			
+			if ( count == 1 && ! supportMultipleResultSets )
+			{
+				assertFalse( m_query.getMoreResults() );
+				break;
+			}
+			
+			assertTrue( m_query.getMoreResults() == ( count < 2 ) );
+			
+			if ( count == 2 )
+				break;
+		}
+		
+		assertTrue( count == ( supportMultipleResultSets ? 2 : 1 ) );
+	}
+
+	private void testGetNamedResultSet( boolean supportsMultipleResultSets,
+			boolean supportsNamedResultSets )
+		throws OdaException
+	{	
+		if ( supportsMultipleResultSets )
+			m_query = ( IAdvancedQuery ) getConnection().newQuery( "Multiple Result Sets Data Set" );
+		else if ( supportsNamedResultSets )
+			m_query = ( IAdvancedQuery ) getConnection().newQuery( "Named Result Sets Data Set" );
+		
+		// Prepare a multiple result set query.
+		m_query.prepare( "Multiple Result Sets Query" );
+		
+		// Call execute().  If multiple result sets is not supported,
+		// this should internally trigger executeQuery() instead.
+		boolean ret = m_query.execute();
+		assertTrue( ret );
+		
+		try 
+		{
+			for( int i = 1; i <= 2; i++ )
+			{
+				String resultSetName = "ResultSet" + i;
+				IResultSet resultSet = m_query.getResultSet( resultSetName );
+			
+				if ( ! ( supportsMultipleResultSets || supportsNamedResultSets ) )
+					fail();
+			
+				assertNotNull( resultSet );
+				
+				IResultSetMetaData rsmd = m_query.getMetaDataOf( resultSetName );
+				assertNotNull( rsmd );
+			}
+		}
+		catch( OdaException e )
+		{
+			// Check for the error indicating that cannot get result
+			// sets by name after executeQuery() has been called.
+			String error = e.toString();
+			assertTrue( error.indexOf( "result sets by name" ) >= 0 &&
+					error.indexOf( "executeQuery" ) >= 0 );
+			return;
+		}
+	}
+	
+	private void testSetAndGetParameterValue( boolean byPos ) throws OdaException
+	{
+		// Try setting parameter values before preparing the query (i.e. isPrepared=false).
+		// A number of exceptions should be thrown and captured.
+		setInputParameterValues( byPos, false );
+		
+		// Try getting parameter values before executing the query (i.e. isExecuted=false).
+		// A number of exceptions should be thrown and captured.
+		getParameterValues( byPos, false );
+		
+		// Prepare an advanced query which takes input parameters and return output
+		// parameters.
+		m_query.prepare( "Advanced Query" );
+		
+		// Set the input parameters.
+		setInputParameterValues( byPos, true );
+		
+		// Execute the query.
+		IResultSet rs = m_query.executeQuery();
+		assertNotNull( rs );
+		
+		// Get Parameter values again.  This time it should succeed since
+		// the query has been executed (isExecuted=true).
+		getParameterValues( byPos, true );		
+	}
+	
+	private void setInputParameterValues( boolean byPos, boolean isPrepared ) throws OdaException
+	{
+		setStructureInputParamValues( byPos, isPrepared );
+		setTableInputParamValues( byPos, isPrepared );
+	}
+	
+	private void setStructureInputParamValues( boolean byPos, boolean isPrepared ) throws OdaException
+	{
+		IParameterRowSet prs = null;
+		try
+		{
+			// Create Structure parameter.
+			prs = ( byPos ? m_query.setNewRow( 1 ) : m_query.setNewRow( "StructParamIn" ) );
+			
+			if ( ! isPrepared )
+				fail();
+		}
+		catch( OdaException e )
+		{
+			String error = e.toString();
+			
+			// Expect an exception complaining about statement not being prepared yet.
+			assertTrue( error.indexOf( "input parameters" ) >= 0 &&
+					error.indexOf( "prepared" ) >= 0 );
+			
+			return;
+		}		
+		
+		setRowData( byPos, prs );
+	}
+	
+	private void setTableInputParamValues( boolean byPos, boolean isPrepared ) throws OdaException
+	{
+		IParameterRowSet prs = null;
+		try
+		{
+			// Create Table parameter.
+			prs = ( byPos ? m_query.setNewRowSet( 2 ) : m_query.setNewRowSet( "TableParamIn" ) );
+			
+			if ( ! isPrepared )
+				fail();
+		}
+		catch( OdaException e )
+		{
+			String error = e.toString();
+			
+			// Expect an exception complaining about statement not being prepared yet.
+			assertTrue( error.indexOf( "input parameters" ) >= 0 &&
+					error.indexOf( "prepared" ) >= 0 );
+			
+			return;
+		}
+		
+		// Add 2 rows of data.
+		for( int i = 1 ; i <= 2 ; i++ )
+		{
+			int curPos = prs.add();
+			assertTrue( curPos == i );
+			setRowData( byPos, prs );
+		}
+	}
+	
+	private void setRowData( boolean byPos, IParameterRowSet prs ) throws OdaException
+	{
+		if ( byPos )
+		{
+			prs.setBigDecimal( 1, TestData.createBigDecimalData() );
+			prs.setDate( 2, TestData.createDateData() );
+			prs.setDouble( 3, TestData.createDoubleData() );
+			prs.setInt( 4, TestData.createIntData() );
+			prs.setString( 5, TestData.createStringData() );
+			prs.setTime( 6, TestData.createTimeData() );
+			prs.setTimestamp( 7, TestData.createTimestampData() );
+            prs.setBoolean( 8, TestData.createBooleanFalseData() );
+		}
+		else
+		{
+			prs.setBigDecimal( "BigDecimalCol", TestData.createBigDecimalData() );
+			prs.setDate( "DateCol", TestData.createDateData() );
+			prs.setDouble( "DoubleCol", TestData.createDoubleData() );
+			prs.setInt( "IntCol", TestData.createIntData() );
+			prs.setString( "StringCol", TestData.createStringData() );
+			prs.setTime( "TimeCol", TestData.createTimeData() );
+			prs.setTimestamp( "TimestampCol", TestData.createTimestampData() );			
+            prs.setBoolean( "BooleanCol", TestData.createBooleanTrueData() );         
+		}
+	}
+	
+	private void getParameterValues( boolean byPos, boolean isExecuted ) throws OdaException
+	{
+		int outParamStartIndex = 3;
+		
+		try
+		{
+			BigDecimal val = byPos ? 
+					m_query.getBigDecimal( outParamStartIndex ) :
+					m_query.getBigDecimal( "BigDecimalParamOut" );
+
+			if ( isExecuted )
+			{
+				BigDecimal refVal = TestData.createBigDecimalData();
+				assertEquals( val, refVal );
+				assertFalse( m_query.wasNull() );
+			}
+			else
+				fail(); // should not get here.
+		}
+		catch( OdaException e )
+		{
+			checkGetParamValueBeforeExecutedError( e, isExecuted );
+		}
+		
+		try
+		{
+			IBlob val = byPos ? 
+					m_query.getBlob( outParamStartIndex + 1 ) :
+					m_query.getBlob( "BlobParam1Out" );
+
+			if ( isExecuted )
+			{
+				Blob refVal = TestData.createBlobData();
+				assertTrue( TestData.checkBlobData( val, refVal ) );
+				assertFalse( m_query.wasNull() );
+			}
+			else
+				fail(); // should not get here.
+		}
+		catch( OdaException e )
+		{
+			checkGetParamValueBeforeExecutedError( e, isExecuted );
+		}
+		
+		try
+		{
+			IBlob val = byPos ? 
+					m_query.getBlob( outParamStartIndex + 2 ) :
+					m_query.getBlob( "BlobParam2Out" );
+
+			if ( isExecuted )
+			{
+				// The IBlob value returned should be null.
+				assertNull( val );
+				assertTrue( m_query.wasNull() );
+			}
+			else
+				fail(); // should not get here.
+		}
+		catch( OdaException e )
+		{
+			checkGetParamValueBeforeExecutedError( e, isExecuted );
+		}
+		
+		try
+		{
+			IClob val = byPos ? 
+					m_query.getClob( outParamStartIndex + 3 ) :
+					m_query.getClob( "ClobParam1Out" );
+ 
+			if ( isExecuted )
+			{
+				String refValStr = TestData.createClobDataString();
+				assertTrue( TestData.checkClobData( val, refValStr ) );
+				assertFalse( m_query.wasNull() );
+			}
+			else
+				fail(); // should not get here.
+		}
+		catch( OdaException e )
+		{
+			checkGetParamValueBeforeExecutedError( e, isExecuted );
+		}
+		
+		try
+		{
+			IClob val = byPos ? 
+					m_query.getClob( outParamStartIndex + 4 ) :
+					m_query.getClob( "ClobParam2Out" );
+
+			if ( isExecuted )
+			{
+				// The IClob value returned should be null.
+				assertNull( val );
+				assertTrue( m_query.wasNull() );
+			}
+			else
+				fail(); // should not get here.
+		}
+		catch( OdaException e )
+		{
+			checkGetParamValueBeforeExecutedError( e, isExecuted );
+		}
+		
+		try
+		{
+			Date val = byPos ? 
+					m_query.getDate( outParamStartIndex + 5 ) :
+					m_query.getDate( "DateParamOut" );
+
+			if ( isExecuted )
+			{
+				Date refVal = TestData.createDateData();
+				assertEquals( val, refVal );
+				assertFalse( m_query.wasNull() );
+			}
+			else
+				fail(); // should not get here.
+		}
+		catch( OdaException e )
+		{
+			checkGetParamValueBeforeExecutedError( e, isExecuted );
+		}
+		
+		try
+		{
+			double val = byPos ? 
+					m_query.getDouble( outParamStartIndex + 6 ) :
+					m_query.getDouble( "DoubleParamOut");
+
+			if ( isExecuted )
+			{
+				double refVal = TestData.createDoubleData();
+				assertEquals( val, refVal, 0 );
+				assertFalse( m_query.wasNull() );
+			}
+			else
+				fail(); // should not get here.
+		}
+		catch( OdaException e )
+		{
+			checkGetParamValueBeforeExecutedError( e, isExecuted );
+		}
+		
+		try
+		{
+			int val = byPos ? 
+					m_query.getInt( outParamStartIndex + 7 ) :
+					m_query.getInt( "IntegerParamOut" );
+
+			if ( isExecuted )
+			{
+				int refVal = TestData.createIntData();
+				assertEquals( val, refVal );
+				assertFalse( m_query.wasNull() );
+			}
+			else
+				fail(); // should not get here.
+		}
+		catch( OdaException e )
+		{
+			checkGetParamValueBeforeExecutedError( e, isExecuted );
+		}
+		
+		try
+		{
+			String val = byPos ? 
+					m_query.getString( outParamStartIndex + 8 ) :
+					m_query.getString( "StringParamOut" );
+
+			if ( isExecuted )
+			{
+				String refVal = TestData.createStringData();
+				assertEquals( val, refVal );
+				assertFalse( m_query.wasNull() );
+			}
+			else
+				fail(); // should not get here.
+		}
+		catch( OdaException e )
+		{
+			checkGetParamValueBeforeExecutedError( e, isExecuted );
+		}
+		
+		try
+		{
+			Time val = byPos ? 
+					m_query.getTime( outParamStartIndex + 9 ) :
+					m_query.getTime( "TimeParamOut" );
+
+			if ( isExecuted )
+			{
+				Time refVal = TestData.createTimeData();
+				assertEquals( val, refVal );
+				assertFalse( m_query.wasNull() );
+			}
+			else
+				fail(); // should not get here.
+		}
+		catch( OdaException e )
+		{
+			checkGetParamValueBeforeExecutedError( e, isExecuted );
+		}
+		
+		try
+		{
+			Timestamp val = byPos ? 
+					m_query.getTimestamp( outParamStartIndex + 10 ) :
+					m_query.getTimestamp( "TimestampParamOut" );
+
+			if ( isExecuted )
+			{
+				Timestamp refVal = TestData.createTimestampData();
+				assertEquals( val, refVal );
+				assertFalse( m_query.wasNull() );
+			}
+			else
+				fail(); // should not get here.
+		}
+		catch( OdaException e )
+		{
+			checkGetParamValueBeforeExecutedError( e, isExecuted );
+		}
+		
+		try
+		{
+			IParameterRowSet val = byPos ? 
+					m_query.getRow( outParamStartIndex + 11 ) :
+					m_query.getRow( "StructParamOut" );
+
+			if ( isExecuted )
+			{
+				IParameterRowSet refVal = TestData.createStructData();
+				assertSameParamRowSetData( val, refVal );
+				assertFalse( m_query.wasNull() );
+			}
+			else
+				fail(); // should not get here.
+		}
+		catch( OdaException e )
+		{
+			checkGetParamValueBeforeExecutedError( e, isExecuted );
+		}
+        
+        try
+        {
+            boolean val = byPos ? 
+                    m_query.getBoolean( outParamStartIndex + 12 ) :
+                    m_query.getBoolean( "BooleanParamOut" );
+
+            if ( isExecuted )
+            {
+                boolean refVal = TestData.createBooleanFalseData();
+                assertEquals( val, refVal );
+                assertFalse( m_query.wasNull() );
+            }
+            else
+                fail(); // should not get here.
+        }
+        catch( OdaException e )
+        {
+            checkGetParamValueBeforeExecutedError( e, isExecuted );
+        }
+        
+        try
+        {
+            Object val = byPos ? 
+                    m_query.getObject( outParamStartIndex + 13 ) :
+                    m_query.getObject( "ObjectParamOut" );
+
+            if ( isExecuted )
+            {
+                Object refVal = TestData.createObjectData();
+                assertEquals( val, refVal );
+                assertFalse( m_query.wasNull() );
+            }
+            else
+                fail(); // should not get here.
+        }
+        catch( OdaException e )
+        {
+            checkGetParamValueBeforeExecutedError( e, isExecuted );
+        }
+	}
+	
+	private void checkGetParamValueBeforeExecutedError( OdaException e, boolean isExecuted )
+	{
+		if ( ! isExecuted )
+			assertTrue( e.toString().indexOf( "execute" ) >= 0 );
+		else
+		{
+			// Since we already get an exception, mark the test as failed here.
+			fail();
+		}
+	}
+	
+	private void assertSameParamRowSetData( IParameterRowSet val1, IParameterRowSet val2 )
+		throws OdaException
+	{
+		assertEquals( val1.size(), val2.size() );
+		
+		boolean ret1 = val1.absolute( 1 );
+		boolean ret2 = val2.absolute( 1 );
+		assertTrue( ret1 == ret2 );
+		
+		while( ret1 && ret2 )
+		{
+			assertEquals( val1.getBigDecimal( 1 ), val2.getBigDecimal( 1 ) );
+			assertTrue( TestData.checkBlobData( val1.getBlob( 2 ), val2.getBlob( 2 ) ) );
+			assertTrue( TestData.checkBlobData( val1.getBlob( 3 ), val2.getBlob( 3 ) ) );
+			assertTrue( TestData.checkClobData( val1.getClob( 4 ), val2.getClob( 4 ) ) );
+			assertTrue( TestData.checkClobData( val1.getClob( 5 ), val2.getClob( 5 ) ) );
+			assertEquals( val1.getDate( 6 ), val2.getDate( 6 ) );
+			assertEquals( val1.getDouble( 7 ), val2.getDouble( 7 ), 0 );
+			assertEquals( val1.getInt( 8 ), val2.getInt( 8 ) );
+			assertEquals( val1.getString( 9 ), val2.getString( 9 ) );
+			assertEquals( val1.getTime( 10 ), val2.getTime( 10 ) );
+			assertEquals( val1.getTimestamp( 11 ), val2.getTimestamp( 11 ) );
+			
+			ret1 = val1.next();
+			ret2 = val2.next();
+			
+			assertTrue( ret1 == ret2 );
+		}
+	}
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/AppContextTest.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/AppContextTest.java
new file mode 100644
index 0000000..cc77d8c
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/AppContextTest.java
@@ -0,0 +1,207 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.tests;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.oda.IAdvancedQuery;
+import org.eclipse.datatools.connectivity.oda.IConnection;
+import org.eclipse.datatools.connectivity.oda.IDriver;
+import org.eclipse.datatools.connectivity.oda.IQuery;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.consumer.testdriver.TestAdvQueryImpl;
+import org.eclipse.datatools.connectivity.oda.consumer.testdriver.TestConnectionImpl;
+import org.eclipse.datatools.connectivity.oda.consumer.testdriver.TestDriverImpl;
+
+/**
+ *  Test ODA Consumer handling of passing thru application context objects
+ *  to an underlying ODA driver.
+ */
+public class AppContextTest extends OdaTestCase
+{
+    private Properties sm_appContextMap = null;
+    
+    /* (non-Javadoc)
+     * @see junit.framework.TestCase#setUp()
+     */
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+        
+	    if( sm_appContextMap == null )
+	    {
+	        sm_appContextMap = new Properties();
+
+	        sm_appContextMap.put( getTestDriverId(), getTestDriver() );
+	        sm_appContextMap.put( TestDriverImpl.TEST_DRIVER_CONN_STATE, "" );
+	    }
+    }
+    
+    /* (non-Javadoc)
+     * @see junit.framework.TestCase#tearDown()
+     */
+    protected void tearDown() throws Exception
+    {
+        super.tearDown();
+        sm_appContextMap.put( TestDriverImpl.TEST_DRIVER_CONN_STATE, "" );
+    }
+  
+    /*
+     * Test that setAppContext is passed thru the ODA Consumer
+     * to an ODA driver's IDriver, IConnection and IQuery setAppContext calls
+     * in the normal ODA calls sequence.
+     */
+    public void testSetAppContext() throws OdaException
+    {
+        verifyDriverSetAppContext();
+        
+       	doTestSetAppContext( false );
+    }
+       
+    /*
+     * Test that setAppContext is passed thru to an opened connection,
+     * i.e. the driver's IConnection.isOpen returns true *before* IConnection.open is called.
+     */
+    public void testSetAppContextOpenConnection() throws OdaException
+    {
+        // indicate to test driver to set connection state to isOpen() == true
+        // without waiting for the open call
+        sm_appContextMap.put( TestDriverImpl.TEST_DRIVER_CONN_STATE, 
+                			  TestDriverImpl.TEST_DRIVER_CONN_STATE_OPEN );
+        
+       	doTestSetAppContext( true );
+    } 
+    
+    /*
+     * Perform the actual setting of the app context to the oda driver.
+     * After creating a query object, preparing and executing it,
+     * then verify whether the app context has been successfly passed to the 
+     * query object.
+     */
+    private void doTestSetAppContext( boolean isDriverConnStateOpen ) throws OdaException
+    {
+    	IDriver odaDriver = getTestDriver();
+    	
+    	// Assign the app context to the driver
+    	odaDriver.setAppContext( sm_appContextMap );
+    	
+        /* creates a new Oda connection.  The oda consumer passes thru
+         * driver context to the underlying connection as a driver context,
+         * before calling open on underlying connection.
+         */
+     	IConnection hostConn = odaDriver.getConnection( null );
+        assertNotNull( hostConn );
+        
+        /* verifies appContext got passed thru to connection instance,
+         * setting the testdriver's connection state, 
+         * before connection.open is called 
+         */
+        if( isDriverConnStateOpen )
+            assertTrue( hostConn.isOpen() );
+        else
+            assertFalse( hostConn.isOpen() );
+       
+        /* Open the connection.  The oda consumer sets
+         * driver context as the underlying connection's own appContext.
+         */
+        hostConn.open( null );        
+            
+        // uses default dataSetType in plugin.xml
+        IAdvancedQuery hostQuery = ( IAdvancedQuery ) hostConn.newQuery( null );
+        assertNotNull( hostQuery );
+            
+        /* Prepare the query with a statement.
+         * During prepare(), the oda consumer passes thru
+         * the connection's appContext as the query's own appContext.
+         */
+        hostQuery.prepare( "Simple Query" );
+            
+        // execute the query.
+        boolean result = hostQuery.execute();
+        assertTrue( result );
+            
+        // The string representation of the query's appContext will
+        // be returned as the first output parameter value.
+        String queryContextStr = hostQuery.getString( 1 );
+
+        // Verify if the app context returned by the
+        // query object is same as the one originally assigned to the driver.
+        assertEquals( sm_appContextMap.toString(), queryContextStr );
+        
+        // close the query
+        hostQuery.close();
+        hostConn.close();
+    } 
+    
+    /*
+     * Verify that the ODA driver tester has implemented
+     * the setAppContext method.
+     */
+    private void verifyDriverSetAppContext()
+    {
+    	IDriver odaDriver = new TestDriverImpl();
+    	
+        try
+        {
+            // test call to IDriver.setAppContext
+            odaDriver.setAppContext( sm_appContextMap );
+        }
+        catch( OdaException e )
+        {
+            fail( "The ODA driver tester is not properly setup.");
+        }
+        
+        Object driverContext = ( ( TestDriverImpl ) odaDriver ).getAppContext();
+        assertNotNull( driverContext );
+        assertEquals( driverContext, sm_appContextMap );
+        assertEquals( sm_appContextMap.toString(), driverContext.toString() );
+        
+        // test call to IConnection.setAppContext
+        IConnection odaConn = null;
+        try
+        {
+            // test call to IConnection.setAppContext
+            odaConn = odaDriver.getConnection( null );
+            odaConn.setAppContext( sm_appContextMap );
+        }
+        catch( OdaException e1 )
+        {
+            fail( "The ODA driver tester is not properly setup.");
+        }
+        
+        driverContext = ( ( TestConnectionImpl ) odaConn ).getAppContext();
+        assertNotNull( driverContext );
+        assertEquals( driverContext, sm_appContextMap );
+        assertEquals( sm_appContextMap.toString(), driverContext.toString() );
+        
+        // test call to IQuery.setAppContext
+        IQuery odaQuery = null;
+        try
+        {
+            // test call to IConnection.setAppContext
+            odaQuery = odaConn.newQuery( "dummy" );
+            odaQuery.setAppContext( sm_appContextMap );
+        }
+        catch( OdaException e1 )
+        {
+            fail( "The ODA driver tester is not properly setup.");
+        }
+        
+        driverContext = ( ( TestAdvQueryImpl ) odaQuery ).getAppContext();
+        assertNotNull( driverContext );
+        assertEquals( driverContext, sm_appContextMap );
+        assertEquals( sm_appContextMap.toString(), driverContext.toString() );
+    }
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/BinaryCompatibiltyTest.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/BinaryCompatibiltyTest.java
new file mode 100644
index 0000000..94600cb
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/BinaryCompatibiltyTest.java
@@ -0,0 +1,59 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.tests;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.oda.IConnection;
+
+public class BinaryCompatibiltyTest extends OdaTestCase
+{
+    private IConnection m_connection;
+
+    protected void setUp( ) throws Exception
+    {
+        super.setUp( );
+
+        m_connection = getTestDriver().getConnection( null );
+        assertNotNull( m_connection );
+    }
+    
+    protected String getTestDriverId()
+    {
+        return "org.eclipse.datatools.connectivity.oda.flatfile";
+    }
+
+    protected void tearDown( ) throws Exception
+    {
+        if ( m_connection.isOpen() )
+            m_connection.close( );
+
+        super.tearDown( );
+    }
+
+    public void testSetLocale() throws Exception
+    {
+        boolean hasException = false;
+        try
+        {
+            m_connection.setLocale( null );
+        }
+        catch( UnsupportedOperationException ex )
+        {
+            hasException = true;
+        }
+        assertTrue( hasException );
+    }
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/ConnectionTest.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/ConnectionTest.java
new file mode 100644
index 0000000..894f6f7
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/ConnectionTest.java
@@ -0,0 +1,217 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.tests;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.oda.IAdvancedQuery;
+import org.eclipse.datatools.connectivity.oda.IConnection;
+import org.eclipse.datatools.connectivity.oda.IDataSetMetaData;
+import org.eclipse.datatools.connectivity.oda.IQuery;
+import org.eclipse.datatools.connectivity.oda.IResultSet;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+public class ConnectionTest extends OdaTestCase
+{
+	private IConnection m_connection;
+
+	protected void setUp( ) throws Exception
+	{
+		super.setUp( );
+
+		m_connection = getTestDriver().getConnection( null );
+		assertNotNull( m_connection );
+		
+		Properties connProperties = null;
+		m_connection.open( connProperties );
+	}
+
+	protected void tearDown( ) throws Exception
+	{
+		if ( m_connection.isOpen() )
+			m_connection.close( );
+
+		super.tearDown( );
+	}
+
+	public final void testIsOpen() throws OdaException
+	{
+		// setUp() function must already have the connection opened.
+		assertTrue( m_connection.isOpen() );
+		
+		// Close connection, and verify that isOpen() is false.
+		m_connection.close();
+		assertFalse( m_connection.isOpen() );
+	}
+	
+	public final void testGetMetaData( ) throws OdaException
+	{
+		IDataSetMetaData md = m_connection.getMetaData( null );
+		assertNotNull( md );
+	}
+
+	public final void testMetaDataCache( ) throws OdaException
+	{
+		IDataSetMetaData c1 = m_connection.getMetaData( null );
+		assertNotNull( c1 );
+	
+		// The previous meta data has been cached, so the 
+		// current getMetaData() call should retrieve the same 
+		// meta data.
+		IDataSetMetaData c2 = m_connection.getMetaData( null );
+		assertNotNull( c2 );
+	
+		// Assert that caching works and the two meta data are the same.
+		assertSame( c1, c2 );
+	}
+
+	public final void testCreateQuery( ) throws OdaException
+	{
+		IAdvancedQuery query = ( IAdvancedQuery ) m_connection.newQuery( null );
+		assertNotNull( query );
+		
+		query.close( );
+	}
+
+	public final void testPrepareQueryStatement( ) throws OdaException
+	{
+		IAdvancedQuery query = ( IAdvancedQuery ) m_connection.newQuery( null );
+		assertNotNull( query );
+		
+		query.prepare( "Simple Query" );
+		query.close( );
+	}
+
+	public final void testClose( ) throws OdaException
+	{
+		m_connection.close( );
+		
+		assertFalse( m_connection.isOpen() );
+	}
+
+	public final void testGetMaxQueries( ) throws OdaException
+	{
+		// Open a new connection and make sure there is no opened queries
+		if ( m_connection.isOpen() )
+			m_connection.close();
+		m_connection.open( null );
+		
+		// Max queries specified in the test driver.
+		int maxQueries = 3;
+		
+		// Verify the max queries specified
+		assertEquals( m_connection.getMaxQueries( ), maxQueries );
+		
+		int count = 0;
+		try
+		{
+			// A while loop to iteratively generate new queries.
+			// The testing condition "count <= maxQueries" should
+			// always be true.  It is just there to prevent 
+			// the possibility of having an infinite loop.
+			while( count <= maxQueries )
+			{
+				IQuery query = m_connection.newQuery( null );
+				query.prepare( "Simple Query" );
+				count++;
+			}
+		}
+		catch( OdaException e )
+		{
+			// Expect to get an ODA exception here complaining
+			// about maxQueries has been reached.
+			assertTrue( count == maxQueries );
+			return;
+		}
+		
+		// Should not get here.
+		fail();
+	}
+	
+	public final void testCommitAndRollback() throws OdaException
+	{
+		RunQueryAndCheckRowCount( 5 );
+		
+		// Execute command to "change the database".
+		// The effect is that any subsequent query will only return 1 row of data.		
+		IQuery queryCmd = m_connection.newQuery( null );
+		queryCmd.prepare( "Limit Rows Command" );
+		queryCmd.executeQuery();
+		queryCmd.close();
+		
+		// The query should now only get 1 row of data.
+		RunQueryAndCheckRowCount( 1 );	
+		
+		// Rollback so that the "database state" is restored.
+		m_connection.rollback();
+		
+		// The query should now only get back the original (5) rows of data.
+		RunQueryAndCheckRowCount( 5 );	
+		
+		// Execute command to "change the database".
+		// The effect is that any subsequent query will only return 1 row of data.		
+		queryCmd = m_connection.newQuery( null );
+		queryCmd.prepare( "Limit Rows Command" );
+		queryCmd.executeQuery();
+		queryCmd.close();
+		
+		// Commit the change
+		m_connection.commit();
+		
+		// The query should now only get 1 row of data.
+		RunQueryAndCheckRowCount( 1 );	
+		
+		// Perform rollback.
+		m_connection.rollback();
+		
+		// Rollback should have no effect.  The query should still 
+		// only get 1 row of data.
+		RunQueryAndCheckRowCount( 1 );	
+	}
+	
+	public void testSetLocale() throws Exception
+	{
+	    boolean hasException = false;
+	    try
+        {
+            m_connection.setLocale( null );
+        }
+        catch( UnsupportedOperationException ex )
+        {
+            hasException = true;
+        }
+        assertTrue( hasException );
+	}
+
+	private void RunQueryAndCheckRowCount( int count ) throws OdaException
+	{
+		IQuery query = m_connection.newQuery( null );
+		query.prepare( "Simple Query" );
+		IResultSet resultSet = query.executeQuery();
+		assertNotNull( resultSet );
+		
+		int rowCount = 0;
+		while ( resultSet.next( ) )
+			rowCount++;
+		assertTrue( rowCount == count );
+		
+		query.close();
+	}
+	
+	IConnection getConnection()
+	{
+		return m_connection;
+	}
+}
\ No newline at end of file
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/ConsumerMessagesTest.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/ConsumerMessagesTest.java
new file mode 100644
index 0000000..9de0b48
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/ConsumerMessagesTest.java
@@ -0,0 +1,41 @@
+/*
+ *****************************************************************************
+ * Copyright (c) 2004, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *
+ ******************************************************************************
+ */ 
+
+package org.eclipse.datatools.connectivity.oda.consumer.tests;
+
+import junit.framework.TestCase;
+
+import org.eclipse.datatools.connectivity.oda.consumer.helper.OdaHelperException;
+import org.eclipse.datatools.connectivity.oda.consumer.nls.Messages;
+
+public class ConsumerMessagesTest extends TestCase
+{
+	public final void testManagerNlsMessage()
+	{
+	    OdaHelperException exception = 
+			new OdaHelperException( Messages.helper_cannotGetNamedResultsAfterExecuteQuery, 
+			                         null );
+		assertEquals( "Cannot get result sets by name after executeQuery() has been called.", 
+		              exception.getLocalizedMessage() );
+	}
+	
+	public final void testManagerNlsMessage2()
+	{
+	    OdaHelperException exception = 
+			new OdaHelperException( Messages.helper_cannotExecuteBeforePrepare, 
+			                         null );
+		assertEquals( "Cannot execute the statement before statement has been prepared.", 
+		              exception.getMessage() );
+	}
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/DataSetMetaDataTest.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/DataSetMetaDataTest.java
new file mode 100644
index 0000000..b96ecec
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/DataSetMetaDataTest.java
@@ -0,0 +1,123 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.tests;
+
+import org.eclipse.datatools.connectivity.oda.IConnection;
+import org.eclipse.datatools.connectivity.oda.IDataSetMetaData;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+public class DataSetMetaDataTest extends ConnectionTest
+{
+	IDataSetMetaData m_dataSetMetaData = null;
+	
+	protected void setUp() throws Exception
+	{
+		super.setUp( );
+		
+		IConnection conn = getConnection();
+		m_dataSetMetaData = conn.getMetaData( null );
+	}
+
+	protected void tearDown() throws Exception
+	{
+		super.tearDown();
+	}	
+	
+	public final void testGetConnection() throws OdaException
+	{
+		IConnection conn = m_dataSetMetaData.getConnection();
+		assertNotNull( conn );
+	}
+
+	public final void testGetDataSourceObjects() throws OdaException
+	{
+		try
+		{
+			m_dataSetMetaData.getDataSourceObjects( null, null, null, null );
+		}
+		catch( UnsupportedOperationException e )
+		{
+			// The test driver does not support this.  An 
+			// unsupported operation exception should be thrown.
+			return;
+		}
+		
+		fail();
+	}
+
+	public final void testGetDataSourceMajorVersion() throws OdaException
+	{
+		assertTrue( m_dataSetMetaData.getDataSourceMajorVersion() == 2 );
+	}
+
+	public final void testGetDataSourceMinorVersion() throws OdaException
+	{
+		assertTrue( m_dataSetMetaData.getDataSourceMinorVersion() == 3 );
+	}
+
+	public final void testGetDataSourceProductName() throws OdaException
+	{
+		assertTrue( m_dataSetMetaData.getDataSourceProductName().
+				equals( "Simple Data Source" ) );
+	}
+
+	public final void testGetDataSourceProductVersion() throws OdaException
+	{
+		assertTrue( m_dataSetMetaData.getDataSourceProductVersion().equals( "2.3" ) );
+	}
+
+	public final void testGetSQLStateType() throws OdaException
+	{
+		assertTrue( m_dataSetMetaData.getSQLStateType() == 
+			IDataSetMetaData.sqlStateSQL99 );
+	}
+
+	public final void testSupportsMultipleResultSets() throws OdaException
+	{
+		assertFalse( m_dataSetMetaData.supportsMultipleResultSets() );
+	}
+
+	public final void testSupportsMultipleOpenResults() throws OdaException
+	{
+		assertFalse( m_dataSetMetaData.supportsMultipleOpenResults() );
+	}
+
+	public final void testSupportsNamedResultSets() throws OdaException
+	{
+		assertFalse( m_dataSetMetaData.supportsNamedResultSets() );
+	}
+
+	public final void testSupportsNamedParameters() throws OdaException
+	{
+		assertTrue( m_dataSetMetaData.supportsNamedParameters() );
+	}
+
+	public final void testSupportsInParameters() throws OdaException
+	{
+		assertTrue( m_dataSetMetaData.supportsInParameters() );
+	}
+
+	public final void testSupportsOutParameters() throws OdaException
+	{
+		assertTrue( m_dataSetMetaData.supportsOutParameters() );
+	}
+
+	public final void testGetSortMode() throws OdaException
+	{
+		assertTrue( m_dataSetMetaData.getSortMode() == 
+			IDataSetMetaData.sortModeNone );
+	}
+
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/DriverBridgeTest.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/DriverBridgeTest.java
new file mode 100644
index 0000000..f797b4e
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/DriverBridgeTest.java
@@ -0,0 +1,85 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.tests;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.datatools.connectivity.oda.IDriver;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.consumer.helper.DriverExtensionHelper;
+import org.eclipse.datatools.connectivity.oda.consumer.helper.OdaDriver;
+import org.eclipse.datatools.connectivity.oda.consumer.test.impl.DummyDriver;
+
+import junit.framework.TestCase;
+
+/**
+ * Test implementation of the driverBridge extension point.
+ */
+public class DriverBridgeTest extends TestCase
+{
+    // requires the org.eclipse.datatools.connectivity.oda.consumer.testdriver plugin,
+    // and the test extension of the oda.consumer.driverBridge extension point 
+    // defined in this test plugin
+    private final String m_testOdaDataSourceId = 
+        "org.eclipse.datatools.connectivity.oda.consumer.testdriver"; //$NON-NLS-1$
+    /* 
+     * Tests the public API to obtain the effective data source id that overrides 
+     * via the driverBridge extension point.
+     */
+    public void testGetEffectiveDataSourceId()
+    {
+        String expectedBridgeId = "org.eclipse.datatools.connectivity.oda.consumer.tests"; //$NON-NLS-1$
+        String actualBridgeId = null;
+        try
+        {
+            actualBridgeId = DriverExtensionHelper.getEffectiveDataSourceId( m_testOdaDataSourceId );
+        }
+        catch( OdaException ex )
+        {
+            fail();
+        }
+        assertEquals( expectedBridgeId, actualBridgeId );
+    }
+    
+    public void testGetEffectiveBridgeDriver()
+    {
+        IDriver consumerDriver = null;
+        try
+        {
+            consumerDriver = new OdaDriver( m_testOdaDataSourceId );
+        }
+        catch( OdaException e )
+        {
+            fail();
+        }       
+        assertNotNull( consumerDriver );
+
+        Map contextMap = new HashMap(1);
+        try
+        {
+            // the test bridge IDriver has implemented #setAppContext to put its classname in the Map
+            consumerDriver.setAppContext( contextMap );
+        }
+        catch( OdaException e )
+        {
+            fail();
+        }
+
+        assertEquals( 1, contextMap.size() );
+        assertEquals( DummyDriver.class.getName(), contextMap.get( DummyDriver.DRIVER_NAME_CONTEXT_KEY ));
+    }
+    
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/DriverTest.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/DriverTest.java
new file mode 100644
index 0000000..cd377ac
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/DriverTest.java
@@ -0,0 +1,189 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.tests;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.oda.IConnection;
+import org.eclipse.datatools.connectivity.oda.IDriver;
+import org.eclipse.datatools.connectivity.oda.LogConfiguration;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.consumer.testdriver.TestDriverImpl;
+import org.osgi.framework.Bundle;
+
+public class DriverTest extends OdaTestCase
+{
+	private static final String TEST_DATA_SOURCE_ID = 
+		"org.eclipse.datatools.connectivity.oda.consumer.testdriver";
+	
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+    }
+    
+    protected void tearDown() throws Exception
+    {
+        super.tearDown();
+    }
+    
+    public final void testSetAppContext() throws OdaException
+    {
+    	IDriver driver = new TestDriverImpl();
+    	String appContext = "Application Context String";
+    	driver.setAppContext( appContext );
+    	
+    	// Retrieve the app context back and compare.
+    	String returnedAppContext = ( String ) ( ( TestDriverImpl ) driver ).getAppContext();
+    	assertSame( appContext, returnedAppContext );
+    }
+    
+    public final void testGetConnection() throws OdaException
+    {
+    	IConnection connection = getTestDriver().getConnection( TEST_DATA_SOURCE_ID );
+    	assertNotNull( connection );
+    }
+    
+    public final void testGetMaxConnections() throws OdaException
+    {
+        IDriver testDriver = getNewTestDriver();
+    	// Verify that the test driver's maximum number of concurrent connections is 2
+    	int maxConnections = 2;
+        assertTrue( testDriver.getMaxConnections() == maxConnections );
+
+		Properties connProperties = null;
+        ArrayList openConnList = new ArrayList();
+        boolean testPassed = false;
+        
+        // Try opening connection "maxConnections + 1" times.
+        // The last time should trigger an exception.
+		for( int i = 1 ; i <= maxConnections + 1; i++ )
+		{
+			try
+			{
+				IConnection connection = testDriver.getConnection( TEST_DATA_SOURCE_ID );
+				assertNotNull( connection );
+				connection.open( connProperties );
+                
+				// cache the connection in a collection for cleanup
+                openConnList.add( connection );
+			}
+			catch( OdaException e )
+			{
+				/* Expect an ODA exception when number of concurrently opened connections
+                 * has exceeded the maximum allowed.
+				 */
+				assertTrue( i == maxConnections + 1 );
+                testPassed = true;
+			}
+		}
+		
+		// verify if expected exception did occur
+		assertTrue( testPassed );
+        
+        // Close all opened connections
+        Iterator openConnItr = openConnList.iterator();
+        while( openConnItr.hasNext() )
+        {
+            IConnection conn = ( IConnection ) openConnItr.next();
+            conn.close();
+        }
+    }
+    
+    public final void testSetLogConfiguration() throws OdaException
+    {
+    	String logDirectory = getTestLogDir();
+
+    	File logDirectoryFileObject = new File( logDirectory );
+    	
+    	// First, remove this log directory and its contents, if exists.
+    	recursiveDelete( logDirectoryFileObject );
+    	
+ 	   // Re-create the log directory.
+        boolean success = logDirectoryFileObject.mkdir();
+
+        // Make sure the creation of directory succeeds.  Otherwise, stop 
+        // the test.
+        assertTrue( success );
+        
+        String logFilePrefix = "TestDriverLog";
+    	LogConfiguration logConfig = 
+    		new LogConfiguration( TEST_DATA_SOURCE_ID, 0, logDirectory, logFilePrefix, null );
+    	
+    	getTestDriver().setLogConfiguration( logConfig );
+    	
+    	// Detect the existing of the log file.
+    	assertTrue( findLogFile( logDirectoryFileObject, logFilePrefix ) );
+    	
+    	// Notice that the log file cannot be cleaned-up/deleted
+    	// at this point, since it is still being held onto.
+    	// However, the directory will be deleted the next time
+    	// before the real test begins.
+    }
+    
+    private void recursiveDelete( File dirPath ) 
+    {
+    	String [] ls = dirPath.list();
+    	if ( ls == null )
+    		return;
+      
+    	for ( int idx = 0; idx < ls.length; idx++ ) 
+    	{
+    		File file = new File( dirPath, ls[ idx ] );
+    		if ( file.isDirectory () )
+    			recursiveDelete( file );
+    		file.delete ();
+    	}
+    	
+    	dirPath.delete();
+    }
+    
+    private boolean findLogFile( File dirPath, String prefix ) 
+    {
+    	String [] ls = dirPath.list();
+    	if ( ls == null )
+    		return false;
+      
+    	// We only need to look at the first file and see if 
+    	// it has the log file prefix.
+   		return ( ls[ 0 ].indexOf( prefix ) >= 0 );
+    }
+
+    private String getTestLogDir()
+	{
+    	String pluginPath = null;
+		try 
+		{
+			Bundle b = Platform.getBundle( getPluginName() );
+			pluginPath = FileLocator.toFileURL( b.getEntry( "/" ) ).getFile();
+		} 
+		catch ( IOException e ) 
+		{
+			fail();
+		}       
+		
+		return pluginPath + "TestLogDir\\";
+	}
+    
+    private String getPluginName()
+    {
+    	return getClass().getPackage().getName();
+    }
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/FlatFileTestCase.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/FlatFileTestCase.java
new file mode 100644
index 0000000..e3bbbed
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/FlatFileTestCase.java
@@ -0,0 +1,72 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.tests;
+
+import org.eclipse.datatools.connectivity.oda.IConnection;
+import org.eclipse.datatools.connectivity.oda.IDriver;
+import org.eclipse.datatools.connectivity.oda.consumer.helper.OdaConnection;
+import org.eclipse.datatools.connectivity.oda.consumer.helper.OdaDriver;
+
+import junit.framework.TestCase;
+
+/**
+ * @author lchan
+ *
+ */
+public class FlatFileTestCase extends TestCase
+{
+	static final String TEST_FLATFILE_ID = 
+		"org.eclipse.datatools.connectivity.oda.flatfile"; //$NON-NLS-1$
+
+	private static IDriver sm_odaDriver;
+	private static IConnection sm_odaConn;
+	
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	protected void setUp() throws Exception
+	{
+		super.setUp();
+		
+		if( sm_odaDriver == null )
+			sm_odaDriver = new OdaDriver( TEST_FLATFILE_ID );
+		if( sm_odaConn == null )
+			sm_odaConn = sm_odaDriver.getConnection( TEST_FLATFILE_ID );
+	}
+
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	protected void tearDown() throws Exception
+	{
+		super.tearDown();
+		// up to subclass to close connection at tearDown
+	}
+
+	protected static IConnection getOdaConn()
+	{
+		return sm_odaConn;
+	}
+
+	protected static IDriver getOdaDriver()
+	{
+		return sm_odaDriver;
+	}
+
+	public final void testOpenConnection()
+	{
+		assertTrue( sm_odaConn instanceof OdaConnection );
+	}
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/LoggerInstanceTest.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/LoggerInstanceTest.java
new file mode 100644
index 0000000..5619eea
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/LoggerInstanceTest.java
@@ -0,0 +1,132 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.tests;
+
+import java.io.File;
+import java.io.IOException;
+
+import junit.framework.TestCase;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.datatools.connectivity.oda.LogConfiguration;
+import org.eclipse.datatools.connectivity.oda.consumer.test.impl.LoggerAccessor;
+import org.eclipse.datatools.connectivity.oda.consumer.test.impl.OdaConsumerTestPlugin;
+import org.eclipse.datatools.connectivity.oda.util.logging.Level;
+import org.eclipse.datatools.connectivity.oda.util.logging.Logger;
+
+/**
+ * This test case is for the thread local implementation in odaconusmer.OdaDriver,
+ * which caches its static logger instance in each thread.
+ */
+public class LoggerInstanceTest extends TestCase
+{
+    static final String TEST_DRIVER_ID = "org.eclipse.datatools.connectivity.oda.consumer.testdriver"; //$NON-NLS-1$
+
+    private static LoggerAccessor sm_odaDriver;
+
+    private static File sm_consumerLogDir;
+
+    private File m_bundleDir;
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see junit.framework.TestCase#setUp()
+     */
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+        
+        sm_odaDriver = new LoggerAccessor( TEST_DRIVER_ID );
+        sm_odaDriver.setLogger( null );
+        
+        if( sm_consumerLogDir == null )
+        {
+            m_bundleDir = FileLocator.getBundleFile( OdaConsumerTestPlugin
+                    .getDefault().getBundle() );
+            if( m_bundleDir.isDirectory() )
+            {
+                sm_consumerLogDir = new File( m_bundleDir.getAbsolutePath()+ "//logs" );  //$NON-NLS-1$
+                if( !sm_consumerLogDir.mkdir() )
+                {
+                    fail( "Unable to create a test log directory." );  //$NON-NLS-1$
+                }
+            }
+            else   
+            {
+                fail( "Unable to determine the test bundle directory." );  //$NON-NLS-1$
+            }
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see junit.framework.TestCase#tearDown()
+     */
+    protected void tearDown() throws Exception
+    {
+        super.tearDown();
+        String logDir = sm_consumerLogDir.getAbsolutePath();
+        // turn off OdaDriver's logging before log files can be deleted
+        LogConfiguration offLogConfig = new LogConfiguration( TEST_DRIVER_ID,
+                Level.OFF, logDir, TraceLogTestUtil.CONSUMER_LOG_PREFIX,
+                LoggerAccessor.HANDLES_LOG_CONFIG );
+        sm_odaDriver.setLogConfiguration( offLogConfig );
+        cleanupTestLogFiles( sm_consumerLogDir ); // reset for new test case
+        if( sm_consumerLogDir != null )
+            sm_consumerLogDir.delete();
+        sm_odaDriver = null;
+    }
+
+    /**
+     * This test evaluates ThreadLocal solution in both cases where driver has
+     * logger instance and where driver lacks logger instance for ODA consumer
+     * helper driver.
+     * 
+     * @throws Exception
+     */
+    public void testLoggerInstance() throws Exception
+    {
+        // The first test checks for the absence of logger instance
+        // when a driver does not provide default logConfig
+        // by setting trace options or traceLogging element.
+        // For testing purpose we are setting logConfig to be null
+        sm_odaDriver.setLogConfiguration( null );
+        Logger loggerInstance1 = sm_odaDriver.getLogger();
+        // test for null logger instance
+        assertNull( loggerInstance1 );
+
+        // The second test provides a new logConfiguration to test shared logger instances
+        String logDir = sm_consumerLogDir.getAbsolutePath();
+        LogConfiguration logConfig = new LogConfiguration( TEST_DRIVER_ID,
+                Level.FINE, logDir, TraceLogTestUtil.CONSUMER_LOG_PREFIX,
+                LoggerAccessor.HANDLES_LOG_CONFIG ); // triggers LoggerAccessor to handle log config
+        sm_odaDriver.setLogConfiguration( logConfig );
+        loggerInstance1 = sm_odaDriver.getLogger();
+        Logger loggerInstance2 = sm_odaDriver.getLogger();
+
+        // test of equality for logger instances in single thread
+        assertNotNull( loggerInstance1 );
+        assertNotNull( loggerInstance2 );
+        assertEquals( loggerInstance1, loggerInstance2 );
+    }
+
+    private void cleanupTestLogFiles( File logDir ) throws IOException
+    {
+        TraceLogTestUtil.cleanupTestLogFiles( logDir );
+    }
+
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/OdaBlobTest.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/OdaBlobTest.java
new file mode 100644
index 0000000..a26159c
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/OdaBlobTest.java
@@ -0,0 +1,348 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.tests;
+
+import java.io.IOException;
+
+import org.eclipse.datatools.connectivity.oda.IBlob;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.consumer.helper.OdaBlob;
+import org.eclipse.datatools.connectivity.oda.consumer.helper.OdaConnection;
+import org.eclipse.datatools.connectivity.oda.impl.Blob;
+
+public class OdaBlobTest extends FlatFileTestCase
+{
+    private static IBlob sm_driverBlob;
+    
+    private static final byte[] sm_bytesData = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 
+            0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf };
+
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+        if( sm_driverBlob == null )
+        {
+            sm_driverBlob = new DriverTestBlob( sm_bytesData );
+        }
+    }
+
+    /*
+     * @see TestCase#tearDown()
+     */
+    protected void tearDown() throws Exception
+    {
+        super.tearDown();
+        
+/*        if( getOdaConn() != null )
+            getOdaConn().close();
+*/    
+        sm_driverBlob = null;
+    }
+
+    /*
+     * Test getting specific number of bytes starting from beginning.
+     */
+    public void testGetLeadingBytes() throws OdaException, IOException
+    {       
+        IBlob testBlob = new OdaTestBlob( sm_driverBlob, 
+        						(OdaConnection) getOdaConn(), 5 );
+        int startPos = 1;
+        int fetchLen = 7;
+        
+        byte[] retrievedBytes = testBlob.getBytes( startPos, fetchLen );
+        
+        assertEquals( fetchLen, retrievedBytes.length );
+        for( int i= 0, dataIndexValue = startPos - 1;  // offset 1-based startPos
+             i < retrievedBytes.length; i++, dataIndexValue++ )
+        {
+            assertEquals( dataIndexValue, retrievedBytes[i] );
+        }        
+    }
+
+    /*
+     * Test getting specific number of bytes skipping some at beginning.
+     */
+    public void testGetSkippedBytes() throws OdaException, IOException
+    {       
+        IBlob testBlob = new OdaTestBlob( sm_driverBlob, 
+        								(OdaConnection) getOdaConn(), 5 );
+        int startPos = 4;
+        int fetchLen = 7;
+        
+        byte[] retrievedBytes = testBlob.getBytes( startPos, fetchLen );
+        
+        assertEquals( fetchLen, retrievedBytes.length );
+        for( int i= 0, dataIndexValue = startPos - 1;  // offset 1-based startPos
+             i < retrievedBytes.length; i++, dataIndexValue++ )
+        {
+            assertEquals( dataIndexValue, retrievedBytes[i] );
+        }        
+    }
+
+    /*
+     * Test getting specific number of bytes that are more than what is available in
+     * remaining stream.
+     */
+    public void testGetMoreThanAvailableBytes() throws OdaException, IOException
+    {       
+        IBlob testBlob = new OdaTestBlob( sm_driverBlob, (OdaConnection) getOdaConn(), 5 );
+        int startPos = 13;
+        int fetchLen = 7;
+        int streamLen = sm_bytesData.length;
+        
+        byte[] retrievedBytes = testBlob.getBytes( startPos, fetchLen );
+        
+        assertEquals( (streamLen - startPos + 1), retrievedBytes.length );
+        for( int i= 0, dataIndexValue = startPos - 1;  // offset 1-based startPos
+             i < retrievedBytes.length; i++, dataIndexValue++ )
+        {
+            assertEquals( dataIndexValue, retrievedBytes[i] );
+        }        
+    }
+
+    /*
+     * Test getting all remaining bytes with the driver able to determine stream length.
+     */
+    public void testGetRemainingBytes() throws OdaException, IOException
+    {       
+        IBlob testBlob = new OdaTestBlob( sm_driverBlob, (OdaConnection) getOdaConn(), 5 );
+        int startPos = 13;
+        int fetchLen = -1;
+        int streamLen = sm_bytesData.length;
+        
+        byte[] retrievedBytes = testBlob.getBytes( startPos, fetchLen );
+        
+        assertEquals( (streamLen - startPos + 1), retrievedBytes.length );
+        for( int i= 0, dataIndexValue = startPos - 1;  // offset 1-based startPos
+             i < retrievedBytes.length; i++, dataIndexValue++ )
+        {
+            assertEquals( dataIndexValue, retrievedBytes[i] );
+        }        
+    }
+
+    /*
+     * Test getting all remaining bytes with the driver *not* able to 
+     * determine stream length, using full buffers
+     */
+    public void testGetWholeBufferedBytes() throws OdaException, IOException
+    {
+        int startPos = 2;
+        byte[] retrievedBytes = getBufferedBytes( startPos, -1, 5 );
+        assertRetrievedData( retrievedBytes, startPos );
+    }
+
+    /*
+     * Test getting all remaining bytes with the driver *not* able to 
+     * determine stream length, whose
+     * last buffer has data less than buffer size
+     */
+    public void testGetPartialBufferedBytes() throws OdaException, IOException
+    {
+        int startPos = 1;
+        byte[] retrievedBytes = getBufferedBytes( startPos, -1, 5 );
+        assertRetrievedData( retrievedBytes, startPos );
+    }
+    
+    /*
+     * Test getting all remaining bytes with the driver able to 
+     * determine stream length, where no data remained since startPos is at end of stream
+     */
+    public void testGetBytesNoData() throws OdaException, IOException
+    {
+        IBlob testBlob = new OdaTestBlob( sm_driverBlob, (OdaConnection) getOdaConn(), 5 );
+        
+        byte[] retrievedBytes = testBlob.getBytes( 17, 3 );
+        assertEquals( 0, retrievedBytes.length );
+    }
+    
+    /*
+     * Test getting all remaining bytes with the driver *not* able to 
+     * determine stream length, where no data remained since startPos is at end of stream
+     */
+    public void testGetBufferedBytesNoData() throws OdaException, IOException
+    {
+        byte[] retrievedBytes = getBufferedBytes( 17, -1, 5 );
+        assertEquals( 0, retrievedBytes.length );
+    }
+
+    /*
+     * Test getting all remaining bytes with the driver able to 
+     * determine stream length, and skipping bytes beyond the end of stream
+     */
+    public void testSkipBytesBeyondStream() throws OdaException, IOException
+    {
+        IBlob testBlob = new OdaTestBlob( sm_driverBlob, (OdaConnection) getOdaConn(), 5 );
+        
+        boolean caughtException = false;
+        try
+        {
+            testBlob.getBytes( 20, 3 );
+        }
+        catch( UnsupportedOperationException e )
+        {
+            caughtException = true;
+        }
+        assertTrue( caughtException );
+    }
+    
+    /*
+     * Test getting all remaining bytes with the driver *not* able to 
+     * determine stream length, and skipping bytes beyond the end of stream
+     */
+    public void testSkipBytesBeyondBufferedStream() throws OdaException, IOException
+    {
+        boolean caughtException = false;
+        try
+        {
+            getBufferedBytes( 20, -1, 5 );
+        }
+        catch( UnsupportedOperationException e )
+        {
+            caughtException = true;
+        }
+        assertTrue( caughtException );
+    }
+    
+    /*
+     * Test incremental read where the buffer size specified is 0.
+     */
+    public void testBufferSizeZero() throws OdaException, IOException
+    {       
+        byte[] retrievedBytes = getBufferedBytes( 0, -1, 0 );        
+        assertEquals( 0, retrievedBytes.length );
+    }
+    
+    /*
+     * Testing reading from an empty stream.
+     */
+    public void testGetEmptyStream() throws OdaException, IOException
+    {       
+        IBlob driverBlob = new DriverTestBlob( new byte[0] );
+        IBlob testBlob = new OdaTestBlob( driverBlob, (OdaConnection) getOdaConn(), 5 );
+        int startPos = 0;
+        int fetchLen = -1;
+        
+        byte[] retrievedBytes = testBlob.getBytes( startPos, fetchLen );
+        
+        assertEquals( 0, retrievedBytes.length );
+    }
+    
+    /*
+     * Utility test functions to similate driver not knowing stream length,
+     * and need to keep reading subsequence of bytes till end of stream.
+     */
+    private byte[] getBufferedBytes( int startPos, int fetchLen, int defaultBufferSize ) 
+        throws OdaException, IOException
+    {
+        IBlob testBlob = new OdaTestBlob( sm_driverBlob, (OdaConnection) getOdaConn(), defaultBufferSize );
+        
+        // triggers test driver to throw exception on the optional method - length()
+        DriverTestBlob driverBlob = (DriverTestBlob) sm_driverBlob;
+        driverBlob.setThrowsOnLength( true );
+        
+        return testBlob.getBytes( startPos, fetchLen );
+    }
+    
+    private void assertRetrievedData( byte[] retrievedBytes, int startPos )
+    {
+        int streamLen = sm_bytesData.length;
+        assertEquals( (streamLen - startPos + 1), retrievedBytes.length );
+        for( int i= 0, dataIndexValue = startPos - 1;  // offset 1-based startPos
+             i < retrievedBytes.length; i++, dataIndexValue++ )
+        {
+            assertEquals( dataIndexValue, retrievedBytes[i] );
+        }        
+    }
+    
+    /**
+     * Extends the odaconsumer.helper OdaBlob implementation to control 
+     * test configuration.
+     */
+    class OdaTestBlob extends OdaBlob
+    {
+        private int m_defaultBufferSize = 5;
+        
+        OdaTestBlob( IBlob blob, OdaConnection connection, int defaultBufferSize )
+        {
+            super( blob, connection, false, null );
+            m_defaultBufferSize = defaultBufferSize;
+        }
+
+        /* (non-Javadoc)
+         * @see org.eclipse.datatools.connectivity.oda.consumer.helper.OdaBlob#getReaderBufferSize()()
+         */
+        protected int getReaderBufferSize()
+        {
+            return m_defaultBufferSize;
+        }
+        
+    }
+    
+    /**
+     * Extends the simple ODA driver implementation of IBlob
+     * to control test configuration.
+     */
+    class DriverTestBlob extends Blob
+    {
+        private int m_streamLen;
+        private int m_configStreamLen;     
+        private boolean m_throwsOnLength = false;
+        
+        DriverTestBlob( byte[] byteArray )
+        {
+            super( byteArray );
+            m_streamLen = byteArray.length;
+            resetTestLength();
+        }
+
+        // Overrides the stream length returned value for testing configuration
+        void setTestLength( int len )
+        {
+            m_configStreamLen = len;
+        }
+        
+        void setThrowsOnLength( boolean doThrow )
+        {
+            m_throwsOnLength = doThrow;
+        }
+        
+        // Resets the stream length return value to its bytes array size
+        void resetTestLength()
+        {
+            m_configStreamLen = m_streamLen;
+        }
+        
+        /* (non-Javadoc)
+         * @see org.eclipse.datatools.connectivity.oda.impl.Blob#length()
+         */
+        public long length() throws OdaException
+        {
+            if( m_throwsOnLength )
+                throw new UnsupportedOperationException();
+
+            return m_configStreamLen;
+        }
+
+        /* (non-Javadoc)
+         * @see org.eclipse.datatools.connectivity.oda.impl.Blob#getBytes(long, int)
+         */
+        public byte[] getBytes( long position, int length ) throws OdaException
+        {
+            // claims unsupported operation to trigger default implementation in odaconsumer.helper
+            throw new UnsupportedOperationException();
+        }
+        
+    }
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/OdaClobTest.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/OdaClobTest.java
new file mode 100644
index 0000000..9685f26
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/OdaClobTest.java
@@ -0,0 +1,336 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.tests;
+
+import java.io.IOException;
+
+import org.eclipse.datatools.connectivity.oda.IClob;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.consumer.helper.OdaClob;
+import org.eclipse.datatools.connectivity.oda.consumer.helper.OdaConnection;
+import org.eclipse.datatools.connectivity.oda.impl.Clob;
+
+public class OdaClobTest extends FlatFileTestCase
+{
+    private static IClob sm_driverClob;
+    
+    private static final String sm_testData = "abcdefghijklmnopqrstuvwxyz";
+
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+        if( sm_driverClob == null )
+        {
+            sm_driverClob = new DriverTestClob( sm_testData );
+        }
+    }
+
+    /*
+     * @see TestCase#tearDown()
+     */
+    protected void tearDown() throws Exception
+    {
+        super.tearDown();
+        
+/*        if( getOdaConn() != null )
+            getOdaConn().close();
+*/    
+        sm_driverClob = null;
+    }
+
+    /*
+     * Test getting specific number of characters starting from beginning.
+     */
+    public void testGetLeadingChars() throws OdaException, IOException
+    {       
+        IClob testClob = new OdaTestClob( sm_driverClob, 
+        						(OdaConnection) getOdaConn(), 5 );
+        int startPos = 1;
+        int fetchLen = 7;
+        
+        String retrievedData = testClob.getSubString( startPos, fetchLen );        
+        assertRetrievedData( retrievedData, startPos, fetchLen );
+    }
+
+    /*
+     * Test getting specific number of chars skipping some at beginning.
+     */
+    public void testGetSkippedChars() throws OdaException, IOException
+    {       
+        IClob testClob = new OdaTestClob( sm_driverClob, 
+        								(OdaConnection) getOdaConn(), 5 );
+        int startPos = 6;
+        int fetchLen = 7;
+        
+        String retrievedData = testClob.getSubString( startPos, fetchLen );        
+        assertRetrievedData( retrievedData, startPos, fetchLen );
+    }
+
+    /*
+     * Test getting specific number of chars that are more than what is available in
+     * remaining stream.
+     */
+    public void testGetMoreThanAvailableChars() throws OdaException, IOException
+    {       
+        IClob testClob = new OdaTestClob( sm_driverClob, 
+        								(OdaConnection) getOdaConn(), 5 );
+        int startPos = 23;
+        int fetchLen = 7;
+
+        String retrievedData = testClob.getSubString( startPos, fetchLen );        
+        assertRetrievedData( retrievedData, startPos, -1 );
+    }
+
+    /*
+     * Test getting all remaining chars with the driver able to determine stream length.
+     */
+    public void testGetRemainingChars() throws OdaException, IOException
+    {       
+        IClob testClob = new OdaTestClob( sm_driverClob, 
+        								(OdaConnection) getOdaConn(), 5 );
+        int startPos = 16;
+        int fetchLen = -1;
+
+        String retrievedData = testClob.getSubString( startPos, fetchLen );        
+        assertRetrievedData( retrievedData, startPos, fetchLen );
+    }
+
+    /*
+     * Test getting all remaining chars with the driver *not* able to 
+     * determine stream length, using full buffers.
+     */
+    public void testGetWholeBufferedChars() throws OdaException, IOException
+    {
+        int startPos = 3;
+        int fetchLen = -1;
+        String retrievedData = getBufferedSubString( startPos, fetchLen, 8 );
+        assertRetrievedData( retrievedData, startPos, fetchLen );
+    }
+
+    /*
+     * Test getting all remaining chars with the driver *not* able to 
+     * determine stream length, whose
+     * last buffer has data less than buffer size
+     */
+    public void testGetPartialBufferedChars() throws OdaException, IOException
+    {
+        int startPos = 7;
+        int fetchLen = -1;
+        String retrievedData = getBufferedSubString( startPos, fetchLen, 8 );
+        assertRetrievedData( retrievedData, startPos, fetchLen );
+    }
+    
+    /*
+     * Test getting all remaining chars with the driver able to 
+     * determine stream length, where no data remained since startPos is at end of stream
+     */
+    public void testGetCharsNoData() throws OdaException, IOException
+    {
+        IClob testClob = new OdaTestClob( sm_driverClob, 
+        								(OdaConnection) getOdaConn(), 5 );
+        int startPos = 27;
+        int fetchLen = 3;
+       
+        String retrievedData = testClob.getSubString( startPos, fetchLen );        
+        assertEquals( 0, retrievedData.length() );
+    }
+    
+    /*
+     * Test getting all remaining chars with the driver *not* able to 
+     * determine stream length, where no data remained since startPos is at end of stream
+     */
+    public void testGetBufferedCharsNoData() throws OdaException, IOException
+    {
+        int startPos = 27;
+        int fetchLen = -1;
+        String retrievedData = getBufferedSubString( startPos, fetchLen, 5 );
+        assertEquals( 0, retrievedData.length() );
+    }
+
+    /*
+     * Test getting all remaining chars with the driver able to 
+     * determine stream length, and skipping chars beyond the end of stream
+     */
+    public void testSkipCharsBeyondStream() throws OdaException, IOException
+    {
+        IClob testClob = new OdaTestClob( sm_driverClob, 
+        								(OdaConnection) getOdaConn(), 5 );
+        
+        boolean caughtException = false;
+        try
+        {
+            testClob.getSubString( 30, 3 );        
+        }
+        catch( UnsupportedOperationException e )
+        {
+            caughtException = true;
+        }
+        assertTrue( caughtException );
+    }
+    
+    /*
+     * Test getting all remaining chars with the driver *not* able to 
+     * determine stream length, and skipping chars beyond the end of stream
+     */
+    public void testSkipCharsBeyondBufferedStream() throws OdaException, IOException
+    {
+        boolean caughtException = false;
+        try
+        {
+            getBufferedSubString( 30, -1, 5 );
+        }
+        catch( UnsupportedOperationException e )
+        {
+            caughtException = true;
+        }
+        assertTrue( caughtException );
+    }
+    
+    /*
+     * Test incremental read where the buffer size specified is 0.
+     */
+    public void testBufferSizeZero() throws OdaException, IOException
+    {       
+        String retrievedData = getBufferedSubString( 0, -1, 0 );   
+        assertEquals( 0, retrievedData.length() );
+    }
+    
+    /*
+     * Testing reading from an empty stream.
+     */
+    public void testGetEmptyStream() throws OdaException, IOException
+    {       
+        IClob driverClob = new DriverTestClob( new String() );
+        IClob testClob = new OdaTestClob( driverClob, 
+        								(OdaConnection) getOdaConn(), 5 );
+        int startPos = 0;
+        int fetchLen = -1;
+        
+        String retrievedData = testClob.getSubString( startPos, fetchLen );        
+        
+        assertEquals( 0, retrievedData.length() );
+    }
+    
+    /*
+     * Utility test functions to similate driver not knowing stream length,
+     * and need to keep reading subsequence of characters till end of stream.
+     */
+    private String getBufferedSubString( int startPos, int fetchLen, int defaultBufferSize ) 
+        throws OdaException, IOException
+    {
+        IClob testClob = new OdaTestClob( sm_driverClob, 
+        								(OdaConnection) getOdaConn(), defaultBufferSize );
+        
+        // triggers test driver to throw exception on the optional method - length()
+        DriverTestClob driverBlob = (DriverTestClob) sm_driverClob;
+        driverBlob.setThrowsOnLength( true );
+        
+        return testClob.getSubString( startPos, fetchLen );        
+    }
+    
+    private void assertRetrievedData( String retrievedData, int startPos, int fetchLen )
+    {
+        if( fetchLen < 0 )
+            fetchLen = (sm_testData.length() - startPos + 1);
+        
+        assertEquals( fetchLen, retrievedData.length() );
+        for( int i= 0, dataIndexValue = startPos - 1;  // offset 1-based startPos
+             i < retrievedData.length(); i++, dataIndexValue++ )
+        {
+            assertEquals( 'a' + dataIndexValue, retrievedData.charAt(i) );
+        }        
+    }
+    
+    /**
+     * Extends the odaconsumer.helper OdaClob implementation to control 
+     * test configuration.
+     */
+    class OdaTestClob extends OdaClob
+    {
+        private int m_defaultBufferSize = 5;
+        
+        OdaTestClob( IClob clob, OdaConnection connection, int defaultBufferSize )
+        {
+            super( clob, connection, false, null );
+            m_defaultBufferSize = defaultBufferSize;
+        }
+
+        /* (non-Javadoc)
+         * @see org.eclipse.datatools.connectivity.oda.consumer.helper.OdaClob#getReaderBufferSize()()
+         */
+        protected int getReaderBufferSize()
+        {
+            return m_defaultBufferSize;
+        }
+        
+    }
+    
+    /**
+     * Extends the simple ODA driver implementation of IClob
+     * to control test configuration.
+     */
+    class DriverTestClob extends Clob
+    {
+        private int m_streamLen;
+        private int m_configStreamLen;     
+        private boolean m_throwsOnLength = false;
+        
+        DriverTestClob( String charArray )
+        {
+            super( charArray );
+            m_streamLen = charArray.length();
+            resetTestLength();
+        }
+
+        // Overrides the stream length returned value for testing configuration
+        void setTestLength( int len )
+        {
+            m_configStreamLen = len;
+        }
+        
+        void setThrowsOnLength( boolean doThrow )
+        {
+            m_throwsOnLength = doThrow;
+        }
+        
+        // Resets the stream length return value to its bytes array size
+        void resetTestLength()
+        {
+            m_configStreamLen = m_streamLen;
+        }
+        
+        /* (non-Javadoc)
+         * @see org.eclipse.datatools.connectivity.oda.impl.Clob#length()
+         */
+        public long length() throws OdaException
+        {
+            if( m_throwsOnLength )
+                throw new UnsupportedOperationException();
+
+            return m_configStreamLen;
+        }
+
+        /* (non-Javadoc)
+         * @see org.eclipse.datatools.connectivity.oda.impl.Clob#getSubString(long, int)
+         */
+        public String getSubString( long position, int length ) throws OdaException
+        {
+            // claims unsupported operation to trigger default implementation in odaconsumer.helper
+            throw new UnsupportedOperationException();
+        }
+        
+    }
+
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/OdaTestCase.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/OdaTestCase.java
new file mode 100644
index 0000000..f7cf9ca
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/OdaTestCase.java
@@ -0,0 +1,50 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.tests;
+
+import org.eclipse.datatools.connectivity.oda.IDriver;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.consumer.helper.OdaDriver;
+
+import junit.framework.TestCase;
+
+/**
+ * Abstract base test case class for the oda test suite,
+ * using the oda.consumer.testdriver as the underlying ODA driver.
+ */
+abstract class OdaTestCase extends TestCase 
+{
+    private static final String TEST_DRIVER_ID = 
+        "org.eclipse.datatools.connectivity.oda.consumer.testdriver";
+    private IDriver m_driver = null;
+    
+    IDriver getTestDriver() throws OdaException
+    {
+    	if ( m_driver == null )
+    		m_driver = getNewTestDriver();
+    	
+    	return m_driver;
+    }
+    
+    IDriver getNewTestDriver() throws OdaException
+    {
+        return new OdaDriver( getTestDriverId() );
+    }
+    
+    protected String getTestDriverId()
+    {
+    	return TEST_DRIVER_ID;
+    }
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/OutputParametersTest.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/OutputParametersTest.java
new file mode 100644
index 0000000..f1ea5b0
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/OutputParametersTest.java
@@ -0,0 +1,79 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.tests;
+
+import org.eclipse.datatools.connectivity.oda.IAdvancedQuery;
+import org.eclipse.datatools.connectivity.oda.IConnection;
+import org.eclipse.datatools.connectivity.oda.IDriver;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+/**
+ * Test ODA Consumer handling of output parameters.
+ */
+public class OutputParametersTest extends OdaTestCase
+{
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+    }
+    
+    public void testOutputParamDataTypeMapping()
+    {
+        Object outParam2Value = null;
+        Object outParam3Value = null;
+        
+        try
+        {
+        	IDriver odaDriver = getTestDriver();
+            IConnection hostConn = odaDriver.getConnection( null );
+            assertNotNull( hostConn );
+            
+            hostConn.open( null );
+            
+            // uses default dataSetType in the test driver.
+            IAdvancedQuery hostQuery = ( IAdvancedQuery ) hostConn.newQuery( null );
+            
+            // Prepare query.
+            hostQuery.prepare( "Simple Query" );
+            
+            // Execute query.
+            boolean result = hostQuery.execute();
+            assertTrue( result );
+            
+            outParam2Value = hostQuery.getDate( 2 );
+            outParam3Value = hostQuery.getString( 3 );
+            
+            // close query and connection
+            hostQuery.close();
+            hostConn.close();
+        }
+        catch( OdaException e )
+        {
+            fail( "testOutputParamDataTypeMapping failed: " + e.toString() );
+        }
+
+        // parameter 2 is expected to have a data type with mapping
+        // in test driver's plugin.xml, and would thus trigger the
+        // correct call to getDate, returning a Date value
+        assertNotNull( outParam2Value );
+        assertTrue( outParam2Value instanceof java.util.Date );
+
+        // parameter 3 is not expected to have a data type with mapping
+        // in test driver's plugin.xml; so it will be mapped to a String by default,
+        // and getString will be called, returning a String value
+        assertNotNull( outParam3Value );
+        assertTrue( outParam3Value instanceof String );
+    } 
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/ParamMetaDataTest.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/ParamMetaDataTest.java
new file mode 100644
index 0000000..68afcf0
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/ParamMetaDataTest.java
@@ -0,0 +1,159 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.tests;
+
+import java.sql.Types;
+
+import org.eclipse.datatools.connectivity.oda.IAdvancedQuery;
+import org.eclipse.datatools.connectivity.oda.IParameterMetaData;
+import org.eclipse.datatools.connectivity.oda.IQuery;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.consumer.testdriver.TestParamMetaDataImpl;
+
+public class ParamMetaDataTest extends ConnectionTest 
+{
+	private IQuery m_query = null;
+	private IAdvancedQuery m_advQuery = null;
+	private IParameterMetaData m_paramMetaData;
+	private final static int NATIVETYPE_TABLE_CODE = TestParamMetaDataImpl.NATIVETYPE_TABLE_CODE;
+
+	protected void setUp() throws Exception
+	{
+		super.setUp( );
+	}
+
+	protected void tearDown() throws Exception
+	{
+		if ( m_query != null )
+			m_query.close();
+		
+		if ( m_advQuery != null )
+			m_advQuery.close();
+		
+		super.tearDown();
+	}
+	
+    public final void testGetParameterCount() throws OdaException
+    {
+    	prepareComplexQuery();
+    	
+        assertTrue( m_paramMetaData.getParameterCount() == 9 );
+    }
+    
+    public final void testGetParameterName() throws OdaException
+    {
+        prepareComplexQuery();
+        
+        assertNull( m_paramMetaData.getParameterName( 1 ) );
+    }
+
+    public final void testGetParameterMode() throws OdaException
+    {
+    	prepareAdvancedQuery();
+    	
+    	// Test getting parameter mode for a few parameters.
+    	assertTrue( m_paramMetaData.getParameterMode( 1 ) == IParameterMetaData.parameterModeIn );
+    	assertTrue( m_paramMetaData.getParameterMode( 3 ) == IParameterMetaData.parameterModeOut );
+    }
+
+    public final void testGetParameterType() throws OdaException
+    {        	
+    	prepareComplexQuery();
+    	
+    	// Test getting parameter type for some parameters.
+    	assertTrue( m_paramMetaData.getParameterType( 1 ) == Types.DECIMAL );
+    	assertTrue( m_paramMetaData.getParameterType( 2 ) == Types.DATE );
+    	assertTrue( m_paramMetaData.getParameterType( 3 ) == Types.DOUBLE );
+    	assertTrue( m_paramMetaData.getParameterType( 4 ) == Types.INTEGER );
+    	assertTrue( m_paramMetaData.getParameterType( 5 ) == Types.CHAR );
+    	assertTrue( m_paramMetaData.getParameterType( 6 ) == Types.TIME );
+    	assertTrue( m_paramMetaData.getParameterType( 7 ) == Types.TIMESTAMP );
+        assertTrue( m_paramMetaData.getParameterType( 8 ) == Types.BOOLEAN );
+        assertTrue( m_paramMetaData.getParameterType( 9 ) == Types.JAVA_OBJECT );
+    	
+    	prepareAdvancedQuery();
+    	
+    	// Test getting parameter type for some parameters.
+    	assertTrue( m_paramMetaData.getParameterType( 1 ) == Types.STRUCT );
+    	assertTrue( m_paramMetaData.getParameterType( 2 ) == NATIVETYPE_TABLE_CODE );
+    	assertTrue( m_paramMetaData.getParameterType( 4 ) == Types.BLOB );
+    	assertTrue( m_paramMetaData.getParameterType( 6 ) == Types.CLOB );
+    }
+    	
+    public final void testGetParameterTypeName() throws OdaException
+    {
+    	prepareComplexQuery();
+    	
+    	// Test getting parameter type name for some parameters.
+    	assertTrue( m_paramMetaData.getParameterTypeName( 1 ).equals( "BCD" ) );
+    	assertTrue( m_paramMetaData.getParameterTypeName( 2 ).equals( "DATE" ) );
+    	assertTrue( m_paramMetaData.getParameterTypeName( 3 ).equals( "DOUBLE" ) );
+    	assertTrue( m_paramMetaData.getParameterTypeName( 4 ).equals( "INT" ) );
+    	assertTrue( m_paramMetaData.getParameterTypeName( 5 ).equals( "CHAR" ) );
+    	assertTrue( m_paramMetaData.getParameterTypeName( 6 ).equals( "TIME" ) );
+    	assertTrue( m_paramMetaData.getParameterTypeName( 7 ).equals( "TIMESTAMP" ) );
+        assertTrue( m_paramMetaData.getParameterTypeName( 8 ).equals( "BOOLEAN" ) );
+        assertTrue( m_paramMetaData.getParameterTypeName( 9 ).equals( "JAVAOBJECT" ) );
+   	
+    	prepareAdvancedQuery();
+    	
+    	// Test getting parameter type for some parameters.
+    	assertTrue( m_paramMetaData.getParameterTypeName( 1 ) == "STRUCT" );
+    	assertTrue( m_paramMetaData.getParameterTypeName( 2 ) == "TABLE" );
+    	assertTrue( m_paramMetaData.getParameterTypeName( 4 ) == "BLOB" );
+    	assertTrue( m_paramMetaData.getParameterTypeName( 6 ) == "CLOB" );
+    }
+
+    public final void testGetPrecision() throws OdaException
+    {
+    	prepareComplexQuery();
+    	
+    	// Test getting parameter precision for some parameters.
+        assertTrue( m_paramMetaData.getPrecision( 1 ) == 10 );
+        assertTrue( m_paramMetaData.getPrecision( 2 ) == -1 );
+    }
+
+    public final void testGetScale() throws OdaException
+    {
+    	prepareComplexQuery();
+    	
+    	// Test getting parameter precision for some parameters.
+        assertTrue( m_paramMetaData.getScale( 1 ) == 2 );
+        assertTrue( m_paramMetaData.getScale( 2 ) == -1 );
+    }
+
+    public final void testIsNullable( int param ) throws OdaException
+    {
+    	prepareComplexQuery();
+    	
+    	// Test getting parameter precision for some parameters.
+        assertTrue( m_paramMetaData.isNullable( 1 ) == 2 );
+        assertTrue( m_paramMetaData.isNullable( 2 ) == -1 );
+    }
+    
+    private void prepareComplexQuery() throws OdaException
+    {
+    	m_query = getConnection().newQuery( null );
+    	m_query.prepare( "Complex Query" );
+    	m_paramMetaData = m_query.getParameterMetaData();    	
+    }
+    
+    private void prepareAdvancedQuery() throws OdaException
+    {
+    	m_advQuery = ( IAdvancedQuery ) getConnection().newQuery( null );
+    	m_advQuery.prepare( "Advanced Query" );
+    	m_paramMetaData = m_advQuery.getParameterMetaData();       	
+    }
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/ParameterRowSetTest.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/ParameterRowSetTest.java
new file mode 100644
index 0000000..939f2a7
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/ParameterRowSetTest.java
@@ -0,0 +1,90 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2005 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.tests;
+
+import org.eclipse.datatools.connectivity.oda.IAdvancedQuery;
+import org.eclipse.datatools.connectivity.oda.IConnection;
+import org.eclipse.datatools.connectivity.oda.IParameterRowSet;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.consumer.testdriver.TestData;
+
+public class ParameterRowSetTest extends ConnectionTest 
+{
+	private IAdvancedQuery m_query;
+	
+	protected void setUp() throws Exception
+	{
+		super.setUp( );
+
+		IConnection conn = getConnection();
+		m_query = ( IAdvancedQuery ) conn.newQuery( null );
+	}
+
+	protected void tearDown() throws Exception
+	{
+		m_query.close();
+
+		super.tearDown( );
+	}
+	
+	public final void testNavigateRowSet() throws OdaException
+	{
+		// Prepare an advanced query which takes input parameters and return output
+		// parameters.
+		m_query.prepare( "Advanced Query" );
+		
+		// Create Table parameter.
+		IParameterRowSet prs = m_query.setNewRowSet( 2 );
+
+		// Verify that the row set is empty.
+		assertTrue( prs.isEmpty() );
+		
+		// Add 2 rows of data.
+		for( int i = 1 ; i <= 2 ; i++ )
+		{
+			int curPos = prs.add();
+			assertTrue( curPos == i );
+			setRowData( prs );
+		}
+		
+		// Verify that the size is 2 (rows)
+		assertTrue( prs.size() == 2 );
+		
+		// Move cursor back to row 1 (first position).
+		assertTrue( prs.previous() );
+		
+		// Check that the cursor cannot be further moved back,
+		// since it is already in first position.
+		assertFalse( prs.previous() );
+		
+		// Clear all rows
+		prs.clear();
+		
+		// Assert that size is zero.
+		assertTrue( prs.size() == 0 );
+	}
+	
+	
+	private void setRowData( IParameterRowSet prs ) throws OdaException
+	{
+		prs.setBigDecimal( 1, TestData.createBigDecimalData() );
+		prs.setDate( 2, TestData.createDateData() );
+		prs.setDouble( 3, TestData.createDoubleData() );
+		prs.setInt( 4, TestData.createIntData() );
+		prs.setString( 5, TestData.createStringData() );
+		prs.setTime( 6, TestData.createTimeData() );
+		prs.setTimestamp( 7, TestData.createTimestampData() );
+	}
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/PropertyProviderTest.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/PropertyProviderTest.java
new file mode 100644
index 0000000..32ddf7e
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/PropertyProviderTest.java
@@ -0,0 +1,212 @@
+/*
+ *****************************************************************************
+ * Copyright (c) 2006, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *
+ ******************************************************************************
+ */ 
+
+package org.eclipse.datatools.connectivity.oda.consumer.tests;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.oda.IConnection;
+import org.eclipse.datatools.connectivity.oda.IDriver;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.consumer.helper.OdaDriver;
+import org.eclipse.datatools.connectivity.oda.consumer.services.IPropertyProvider;
+import org.eclipse.datatools.connectivity.oda.consumer.services.impl.PropertyProviderImpl;
+import org.eclipse.datatools.connectivity.oda.flatfile.CommonConstants;
+
+import junit.framework.TestCase;
+
+/**
+ * Test cases for the consumer extension point - propertyProvider
+ */
+public class PropertyProviderTest extends TestCase
+{
+	private static final String TEST_CONSUMER_ID = 
+		PropertyProviderTest.class.getPackage().getName();
+	private static final String TEST_FLATFILE_ID = 
+		"org.eclipse.datatools.connectivity.oda.flatfile"; //$NON-NLS-1$
+
+	private static IDriver sm_odaDriver;
+	private static IConnection sm_odaConn;
+	private static HashMap sm_appContext;
+	
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	protected void setUp() throws Exception
+	{
+		super.setUp();
+		
+		if( sm_odaDriver == null )
+		{
+			sm_odaDriver = new OdaDriver( TEST_FLATFILE_ID );
+			sm_odaDriver.setAppContext( setupAppContext() );
+		}
+		if( sm_odaConn == null )
+			sm_odaConn = sm_odaDriver.getConnection( TEST_FLATFILE_ID );
+	}
+
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	protected void tearDown() throws Exception
+	{
+		super.tearDown();
+		
+		if( sm_odaConn != null )
+			sm_odaConn.close();
+	}
+
+	public final void testProviderWithContextAsFolder() throws OdaException
+	{				
+		IConnection myConn = sm_odaConn;
+		assertFalse( myConn.isOpen() );
+		
+		// expects to trigger call to ExternalizedPropertyProvider
+		// and uses appContext as folder property to open connection
+		Properties connProps = new Properties();
+        connProps.setProperty( PropertyProviderImpl.DEFAULT_ODA_CONFIGURATION_ID_PROP_NAME, "dummyId" );
+
+        myConn.open( connProps );	
+		assertTrue( myConn.isOpen() );
+	}
+    
+    public final void testMergeExternalizedProperties() throws OdaException
+    {
+        IConnection myConn = sm_odaConn;
+        assertFalse( myConn.isOpen() );
+
+        // expects to trigger call to ExternalizedPropertyProvider
+        // to override this property with folder in context
+        Properties connProps = new Properties();
+        connProps.setProperty( PropertyProviderImpl.DEFAULT_ODA_CONFIGURATION_ID_PROP_NAME, "dummyId" );
+        connProps.setProperty( CommonConstants.CONN_HOME_DIR_PROP, "nonExistDir" );  //$NON-NLS-1$
+
+        myConn.open( connProps );   
+        assertTrue( myConn.isOpen() );
+    }
+
+	public final void testProviderUsingCandidateValues() throws OdaException
+	{
+		IConnection myConn = sm_odaConn;
+		assertFalse( myConn.isOpen() );
+
+		// pass in non-exist folder name in connection properties; 
+        // since config id was not specified in connection properties, 
+        // this non-exist folder name should get used, and
+		// expects OdaException
+		Properties connProps = new Properties();
+		connProps.setProperty( CommonConstants.CONN_HOME_DIR_PROP, "./dummyName" );  //$NON-NLS-1$
+		
+		boolean caughtExpectedException = false;
+		try
+		{
+			myConn.open( connProps );
+		}
+		catch( OdaException ex )
+		{
+            caughtExpectedException = true;
+		}
+        catch( RuntimeException ex )
+        {
+            fail( "Unexpected exception: " + ex.toString() );
+        }
+		assertTrue( caughtExpectedException );
+	}
+	
+	public final void testEmptyConsumerId() throws OdaException
+	{
+		Map appContext = new HashMap();
+		appContext.put( IPropertyProvider.ODA_CONSUMER_ID, "" ); //$NON-NLS-1$
+
+        IDriver odaDriver = new OdaDriver( TEST_FLATFILE_ID );
+        odaDriver.setAppContext( appContext );
+		
+		IConnection myConn = odaDriver.getConnection( TEST_FLATFILE_ID );
+		
+		// pass in empty property collection; 
+		// since consumer id was not specified in appContext, 
+		// this empty connProps should get used, and
+		// expects Exception for missing home folder property
+		Properties connProps = new Properties();
+		
+		boolean caughtExpectedException = false;
+		try
+		{
+			myConn.open( connProps );
+		}
+		catch( RuntimeException ex )
+		{
+            caughtExpectedException = true;
+		}
+        catch( OdaException ex )
+        {
+            caughtExpectedException = true;
+        }
+		assertTrue( caughtExpectedException );
+	}
+
+    public final void testNoAppContext() throws OdaException
+    {               
+        IDriver odaDriver = new OdaDriver( TEST_FLATFILE_ID );        
+        IConnection myConn = odaDriver.getConnection( TEST_FLATFILE_ID );
+        assertFalse( myConn.isOpen() );
+        
+        // expects no propertyProvider is used, and given properties are used as is
+        Properties connProps = new Properties();
+        connProps.setProperty( CommonConstants.CONN_HOME_DIR_PROP, "./" );  //$NON-NLS-1$
+
+        myConn.open( connProps );   
+        assertTrue( myConn.isOpen() );
+        
+        myConn.close();
+    }
+
+    public final void testNullConnProperties() throws OdaException
+    {
+        IConnection myConn = sm_odaConn;
+        assertFalse( myConn.isOpen() );
+
+        // pass in null connection properties, which should get used, and
+        // expects OdaException for null properties
+        
+        boolean caughtExpectedException = false;
+        try
+        {
+            myConn.open( null );
+        }
+        catch( OdaException ex )
+        {
+            caughtExpectedException = true;
+        }
+        catch( RuntimeException ex )
+        {
+            fail( "Unexpected exception: " + ex.toString() );
+        }
+        assertTrue( caughtExpectedException );
+    }
+    
+	private Object setupAppContext()
+	{
+		if( sm_appContext == null )
+		{		
+			sm_appContext = new HashMap();
+			sm_appContext.put( IPropertyProvider.ODA_CONSUMER_ID, TEST_CONSUMER_ID );
+			String folderPathContext = "./"; 	//$NON-NLS-1$
+			sm_appContext.put( IPropertyProvider.ODA_CONN_PROP_CONTEXT, folderPathContext );
+		}
+		return sm_appContext;
+	}
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/QueryTest.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/QueryTest.java
new file mode 100644
index 0000000..768d171
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/QueryTest.java
@@ -0,0 +1,781 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.tests;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+import java.sql.Time;
+import java.sql.Timestamp;
+
+import org.eclipse.datatools.connectivity.oda.IParameterMetaData;
+import org.eclipse.datatools.connectivity.oda.IQuery;
+import org.eclipse.datatools.connectivity.oda.IResultSet;
+import org.eclipse.datatools.connectivity.oda.IResultSetMetaData;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.SortSpec;
+import org.eclipse.datatools.connectivity.oda.consumer.testdriver.TestData;
+import org.eclipse.datatools.connectivity.oda.spec.QuerySpecification;
+import org.eclipse.datatools.connectivity.oda.spec.util.QuerySpecificationFactory;
+import org.eclipse.datatools.connectivity.oda.spec.util.QuerySpecificationHelper;
+
+@SuppressWarnings("restriction")
+public class QueryTest extends ConnectionTest
+{
+	private IQuery m_query;
+
+	IQuery getQuery()
+	{
+		return m_query;
+	}
+
+	protected void setUp() throws Exception
+	{
+		super.setUp( );
+
+		m_query = getConnection().newQuery( null );
+	}
+
+	protected void tearDown() throws Exception
+	{
+		m_query.close();
+
+		super.tearDown( );
+	}
+
+	public final void testSortSpecMessages( )
+	{
+		try
+		{
+			new SortSpec( 100 );
+			fail();
+		}
+		catch ( IllegalArgumentException ex )
+		{
+			assertEquals( "Invalid sort mode specified: 100.", ex.getMessage( ) );
+		}
+	}
+
+	public final void testSetProperty( ) throws OdaException
+	{
+		//
+		// Test the setting of property.
+		//
+		final String propName = "TEST_QUERY_PROP_NAME";
+		final String propVal = "propVal_123";
+		m_query.setProperty( propName, propVal );
+		
+		//
+		// Test with a bad property name.  The test driver throws an exception. 
+		// 
+		final String badPropertyName = "bad_prop_123";
+
+		try
+		{
+			m_query.setProperty( badPropertyName, "propVal_123" );
+			fail(); // shouldn't get here
+		}
+		catch ( OdaException ex )
+		{
+			// Expected exception. 
+			// Exception message contains the bad property name
+			assertTrue( ex.toString().indexOf( badPropertyName ) >= 0 );
+		}
+	}
+
+	public final void testSetAndGetSortSpec( ) throws OdaException
+	{
+		SortSpec ssDesc = new SortSpec( SortSpec.sortDesc );
+		
+		// Test setting sort spec without preparing the query.
+		// A exception should be caught.
+		try
+		{
+			m_query.setSortSpec( ssDesc );
+			
+			// Should not get here.
+			fail();
+		}
+		catch( OdaException e )
+		{
+			String error = e.toString();
+			
+			// Expect an exception complaining about statement not being prepared yet.
+			assertTrue( error.indexOf( "sort specification" ) >= 0 &&
+					error.indexOf( "prepared" ) >= 0 );
+		}
+		
+		// Prepare the query.
+		m_query.prepare( "Simple Query" );
+		
+		// Set sort spec.
+		m_query.setSortSpec( ssDesc );
+		
+		// Test retrieving sort spec.
+		SortSpec ss = m_query.getSortSpec();
+		assertSame( ss, ssDesc );
+	}
+
+	private void doTestSetMaxRows( int max, int expected, boolean setMax )
+			throws OdaException
+	{
+		if ( setMax )
+			m_query.setMaxRows( max );
+
+		m_query.prepare( "Simple Query" );
+		IResultSet result = m_query.executeQuery( );
+		assertNotNull( result );
+		int count = 0;
+		while ( result.next( ) )
+			count++;
+		assertEquals( expected, count );
+	}
+
+	public final void testSetAndGetMaxRows() throws OdaException
+	{
+		int maxRows = 1001;
+		m_query.setMaxRows( maxRows );
+		
+		assertTrue( m_query.getMaxRows() == maxRows );
+	}
+	
+	public final void testSetMaxRows0( ) throws OdaException
+	{
+		doTestSetMaxRows( 0, 5, false /* setMax */);
+	}
+
+	public final void testSetMaxRows1( ) throws OdaException
+	{
+		doTestSetMaxRows( 2, 2, true /* setMax */);
+	}
+
+	public final void testSetMaxRows2( ) throws OdaException
+	{
+		// Setting max to 0 means there is no limit.
+		doTestSetMaxRows( 0, 5, true /* setMax */);
+	}
+
+	public final void testSetMaxRows3( ) throws OdaException
+	{
+		doTestSetMaxRows( 10, 5, true /* setMax */);
+	}
+
+	public final void testGetResultSetMetaDataFromQuery() throws OdaException
+	{
+		// Test getting meta data without preparing the query.
+		// A exception should be caught.
+		try
+		{
+			m_query.getMetaData();
+			
+			// Should not get here.
+			fail();
+		}
+		catch( OdaException e )
+		{
+			String error = e.toString();
+			
+			// Expect an exception complaining about statement not being prepared yet.
+			assertTrue( error.indexOf( "result set metadata" ) >= 0 &&
+					error.indexOf( "prepared" ) >= 0 );
+		}
+		
+		// Test getting non-null meta data from the test driver.
+		// The oda consumer layer will return an OdaResultSetMetaData
+		// object encapsulating the meta data.
+		m_query.prepare( "Simple Query" );
+		IResultSetMetaData md = m_query.getMetaData( );
+		assertNotNull( md );
+		
+		// Test getting non-null meta data from the test driver
+		// by issuing a query that returns null meta data.
+		// The oda consumer layer will return null.
+		m_query.prepare( "Limit Rows Command" );
+		md = m_query.getMetaData();
+		assertNull( md );
+	}
+	
+	public final void testPrepareNullQuery() throws OdaException
+	{
+		try
+		{
+			// Test prepare a query in the form of a null string.
+			m_query.prepare( null );
+		}
+		catch( OdaException e )
+		{
+			// The oda consumer layer will detect the null string
+			// and convert it to an empty string.  The Test driver will
+			// throw an exception indicating that it cannot prepare
+			// a query with an empty string.
+			assertTrue( e.toString().indexOf( "Query text cannot be an empty string." ) >= 0 );
+		}
+	}
+	
+	public final void testExecuteQuery() throws OdaException
+	{
+		// Test execute query without prepare.  Error occurs.
+		try
+		{
+			m_query.executeQuery();
+		}
+		catch( OdaException e )
+		{
+			String error = e.toString();
+			
+			// Expect an exception complaining about statement not being prepared yet.
+			assertTrue( error.indexOf( "execute" ) >= 0 &&
+					error.indexOf( "prepared" ) >= 0 );
+		}
+		
+		// Test execute a query after preparing it.  Query execution should succeed.
+		m_query.prepare( "Simple Query" );
+		IResultSet md = m_query.executeQuery();
+		assertNotNull( md );
+	}
+
+	public void testCancelQuery() throws Exception
+	{
+        m_query.prepare( "Simple Query" );
+        
+        boolean hasException = false;
+        try
+        {
+            m_query.cancel();
+        }
+        catch( OdaException ex )
+        {
+            hasException = true;
+        }
+        assertTrue( hasException );
+        
+        m_query.executeQuery();
+        hasException = false;
+        try
+        {
+            m_query.cancel();
+        }
+        catch( OdaException ex )
+        {
+            hasException = true;
+        }
+        assertTrue( hasException );
+	}
+
+    public void testPreparedQueryText() throws Exception
+    {
+        QuerySpecification querySpec = new QuerySpecificationHelper( (QuerySpecificationFactory)null ).createQuerySpecification();
+        m_query.setSpecification( querySpec );
+        m_query.prepare( "Simple Query" );
+        
+        String preparedText = m_query.getEffectiveQueryText();
+        assertEquals( "Simple Query" + querySpec, preparedText );
+    }
+    
+	public final void testSetParametersByPos() throws OdaException
+	{
+		// Test setting parameters by position, without preparing
+		// the query first.  Exceptions will be thrown and caught.
+		setParameterValuesByPos( false );		
+		
+		// Prepare a complex query with parameters.
+		m_query.prepare( "Complex Query" );
+		
+		// Set parameters with valid positions.  This should
+		// work without throwing any exceptions.
+		setParameterValuesByPos( true );
+		
+		// Try setting parameter using invalid index.
+		// An exception will be thrown.
+		int badParamIndex = 100;
+		try
+		{
+			m_query.setBigDecimal( badParamIndex, null );
+			
+			// Should not get here.
+			fail();
+		}
+		catch( OdaException e )
+		{
+			// Expected exception.
+			// Exception message contains the bad parameter index.
+			assertTrue( e.toString().indexOf( badParamIndex ) >= 0 );
+		}
+	}
+	
+	private void CheckExceptionSetParamBeforePrepare( OdaException e )
+	{
+		// Confirming exception message about setting input parameters 
+		// before the statement is prepared.
+		assertTrue( e.toString().indexOf( "set input parameters" ) >= 0 &&
+				e.toString().indexOf( "prepared" ) >= 0 );
+	}
+	
+	private final void setParameterValuesByPos( boolean isQueryPrepared ) throws OdaException
+	{
+		try
+		{
+			BigDecimal bdVal = TestData.createBigDecimalData();
+			m_query.setBigDecimal( 1, bdVal );
+			
+			if ( ! isQueryPrepared )
+				fail();
+		}
+		catch( OdaException e )
+		{
+			if ( ! isQueryPrepared )
+				CheckExceptionSetParamBeforePrepare( e );
+			else
+				fail();
+		}
+	
+		try
+		{
+			Date dateVal = TestData.createDateData();
+			m_query.setDate( 2, dateVal );
+			
+			if ( ! isQueryPrepared )
+				fail();
+		}
+		catch( OdaException e )
+		{
+			if ( ! isQueryPrepared )
+				CheckExceptionSetParamBeforePrepare( e );
+			else
+				fail();
+		}
+		
+		try
+		{
+			double doubleVal = TestData.createDoubleData();
+			m_query.setDouble( 3, doubleVal );
+
+			if ( ! isQueryPrepared )
+				fail();
+		}
+		catch( OdaException e )
+		{
+			if ( ! isQueryPrepared )
+				CheckExceptionSetParamBeforePrepare( e );
+			else
+				fail();
+		}
+		
+		try
+		{
+			int intVal = TestData.createIntData();
+			m_query.setInt( 4, intVal );
+
+			if ( ! isQueryPrepared )
+				fail();
+		}
+		catch( OdaException e )
+		{
+			if ( ! isQueryPrepared )
+				CheckExceptionSetParamBeforePrepare( e );
+			else
+				fail();
+		}
+		
+		try
+		{
+			String strVal = TestData.createStringData();
+			m_query.setString( 5, strVal );
+
+			if ( ! isQueryPrepared )
+				fail();
+		}
+		catch( OdaException e )
+		{
+			if ( ! isQueryPrepared )
+				CheckExceptionSetParamBeforePrepare( e );
+			else
+				fail();
+		}
+		
+		try
+		{
+			Time timeVal = TestData.createTimeData();
+			m_query.setTime( 6, timeVal );
+
+			if ( ! isQueryPrepared )
+				fail();
+		}
+		catch( OdaException e )
+		{
+			CheckExceptionSetParamBeforePrepare( e );
+		}
+
+		try
+		{
+			Timestamp tsVal = TestData.createTimestampData();
+			m_query.setTimestamp( 7, tsVal );
+
+			if ( ! isQueryPrepared )
+				fail();
+		}
+		catch( OdaException e )
+		{
+			if ( ! isQueryPrepared )
+				CheckExceptionSetParamBeforePrepare( e );
+			else
+				fail();
+		}
+
+        try
+        {
+            boolean val = TestData.createBooleanFalseData();
+            m_query.setBoolean( 8, val );
+
+            if ( ! isQueryPrepared )
+                fail();
+        }
+        catch( OdaException e )
+        {
+            if ( ! isQueryPrepared )
+                CheckExceptionSetParamBeforePrepare( e );
+            else
+                fail();
+        }
+
+        try
+        {
+            Object val = TestData.createObjectData();
+            m_query.setObject( 9, val );
+
+            if ( ! isQueryPrepared )
+                fail();
+        }
+        catch( OdaException e )
+        {
+            if ( ! isQueryPrepared )
+                CheckExceptionSetParamBeforePrepare( e );
+            else
+                fail();
+        }
+	}
+	
+	public final void testSetParametersByName() throws OdaException
+	{
+		// Test setting parameters by names, without preparing
+		// the query first.  Exceptions will be thrown and caught.
+		setParameterValuesByName( false );
+		
+		// Prepare a complex query with parameters.
+		m_query.prepare( "Complex Query" );
+		
+		// Set parameters with valid names.  This should work 
+		// without throwing exceptions.
+		setParameterValuesByName( true );
+		
+		// Try setting parameter using invalid name.  An 
+		// exception should be thrown.
+		String badParamName = "param_unknown";		
+		try
+		{
+			m_query.setBigDecimal( badParamName, null );
+		}
+		catch( OdaException e )
+		{
+			// Expected exception.
+			// exception message contains the bad parameter name.
+			assertTrue( e.toString().indexOf( badParamName ) >= 0 );
+		}
+	}
+	
+	private final void setParameterValuesByName( boolean isQueryPrepared ) throws OdaException
+	{
+		try
+		{
+			BigDecimal bdVal = TestData.createBigDecimalData();
+			m_query.setBigDecimal( "BigDecimalParamIn", bdVal );
+
+			if ( ! isQueryPrepared )
+				fail();
+		}
+		catch( OdaException e )
+		{
+			if ( ! isQueryPrepared )
+				CheckExceptionSetParamBeforePrepare( e );
+			else
+				fail();
+		}
+		
+		try
+		{
+			Date dateVal = TestData.createDateData();
+			m_query.setDate( "DateParamIn", dateVal );
+
+			if ( ! isQueryPrepared )
+				fail();
+		}
+		catch( OdaException e )
+		{
+			if ( ! isQueryPrepared )
+				CheckExceptionSetParamBeforePrepare( e );
+			else
+				fail();
+		}
+		
+		try
+		{
+			double doubleVal = TestData.createDoubleData();
+			m_query.setDouble( "DoubleParamIn", doubleVal );
+
+			if ( ! isQueryPrepared )
+				fail();
+		}
+		catch( OdaException e )
+		{
+			if ( ! isQueryPrepared )
+				CheckExceptionSetParamBeforePrepare( e );
+			else
+				fail();
+		}
+		
+		try
+		{
+			int intVal = TestData.createIntData();
+			m_query.setInt( "IntegerParamIn", intVal );
+
+			if ( ! isQueryPrepared )
+				fail();
+		}
+		catch( OdaException e )
+		{
+			if ( ! isQueryPrepared )
+				CheckExceptionSetParamBeforePrepare( e );
+			else
+				fail();
+		}
+		
+		try
+		{
+			String strVal = TestData.createStringData();
+			m_query.setString( "StringParamIn", strVal );
+
+			if ( ! isQueryPrepared )
+				fail();
+		}
+		catch( OdaException e )
+		{
+			if ( ! isQueryPrepared )
+				CheckExceptionSetParamBeforePrepare( e );
+			else
+				fail();
+		}
+		
+		try
+		{
+			Time timeVal = TestData.createTimeData();
+			m_query.setTime( "TimeParamIn", timeVal );
+
+			if ( ! isQueryPrepared )
+				fail();
+		}
+		catch( OdaException e )
+		{
+			if ( ! isQueryPrepared )
+				CheckExceptionSetParamBeforePrepare( e );
+			else
+				fail();
+		}
+		
+		try
+		{
+			Timestamp tsVal = TestData.createTimestampData();
+			m_query.setTimestamp( "TimestampParamIn", tsVal );
+
+			if ( ! isQueryPrepared )
+				fail();
+		}
+		catch( OdaException e )
+		{
+			if ( ! isQueryPrepared )
+				CheckExceptionSetParamBeforePrepare( e );
+			else
+				fail();
+		}
+        
+        try
+        {
+            boolean val = TestData.createBooleanFalseData();
+            m_query.setBoolean( "BooleanParamIn", val );
+
+            if ( ! isQueryPrepared )
+                fail();
+        }
+        catch( OdaException e )
+        {
+            if ( ! isQueryPrepared )
+                CheckExceptionSetParamBeforePrepare( e );
+            else
+                fail();
+        }
+        
+        try
+        {
+            Object val = TestData.createObjectData();
+            m_query.setObject( "ObjectParamIn", val );
+
+            if ( ! isQueryPrepared )
+                fail();
+        }
+        catch( OdaException e )
+        {
+            if ( ! isQueryPrepared )
+                CheckExceptionSetParamBeforePrepare( e );
+            else
+                fail();
+        }
+	}
+	
+	public final void testFindInParameter( ) throws OdaException
+	{
+		// Test FindInParmaeter without preparing the query.
+		// A exception should be caught.
+		try
+		{
+			m_query.findInParameter( "Dummy name" );
+			
+			// Should not get here.
+			fail();
+		}
+		catch( OdaException e )
+		{
+			String error = e.toString();
+			
+			// Expect an exception complaining about statement not being prepared yet.
+			assertTrue( error.indexOf( "parameter metadata" ) >= 0 &&
+					error.indexOf( "prepared" ) >= 0 );
+		}
+		
+		// Prepare a complex query which takes input parameters.
+		m_query.prepare( "Complex Query" );
+		
+		// Try look up a valid parameter name.
+		int paramPos = m_query.findInParameter( "BigDecimalParamIn" );
+		assertTrue( paramPos == 1 );
+		
+		// Try look up an invalid parameter name.
+		String badParamName = "param_unknown";
+
+		try
+		{
+			paramPos = m_query.findInParameter( badParamName );
+			
+			// Should not reach here.
+			fail();
+		}
+		catch( OdaException e )
+		{
+			// An exception should be thrown indicating that 
+			// a parameter with that name cannot be found.
+			assertTrue( e.toString().indexOf( badParamName ) >= 0 );
+		}
+	}
+	
+	public final void testGetParameterMetaData() throws OdaException
+	{
+		// Test getting parameter meta data without preparing the query.
+		// A exception should be caught.
+		try
+		{
+			m_query.getParameterMetaData();
+			
+			// Should not get here.
+			fail();
+		}
+		catch( OdaException e )
+		{
+			String error = e.toString();
+			
+			// Expect an exception complaining about statement not being prepared yet.
+			assertTrue( error.indexOf( "parameter metadata" ) >= 0 &&
+					error.indexOf( "prepared" ) >= 0 );
+		}
+		
+		// Prepare a complex query which takes input parameters.
+		m_query.prepare( "Complex Query" );
+		
+		// Test getting parameter meta data.  This time it should succeed.
+		IParameterMetaData pmd = m_query.getParameterMetaData();
+		assertNotNull( pmd );
+	}
+	
+	public final void testClearInParameters() throws OdaException
+	{
+		// Prepare a complex query which takes input parameters.
+		m_query.prepare( "Complex Query" );
+		
+		// Set parameter values.
+		setParameterValuesByName( true );
+		
+		// Execute Query.  The parameters are correct and no 
+		// exception will be thrown.
+		IResultSet resultSet = m_query.executeQuery();
+		assertNotNull( resultSet );
+		
+		// Clear the parameter values.
+		m_query.clearInParameters();
+		
+		try
+		{
+			// Execute the query again, this time with null param values.
+			resultSet = m_query.executeQuery();
+		}
+		catch( OdaException e )
+		{
+			// Expected exception.
+			// The query execution throws an exception if
+			// the at least one input parameter is null.
+			assertTrue( e.toString().indexOf( "Input parameter(s) cannot be null." ) > 0 );
+		}
+	}
+	
+	public final void testGetMetaDataFromResultSet() throws OdaException
+	{
+		// Prepare a simple query.
+		m_query.prepare( "Simple Query" );
+		
+		// Execute query.
+		IResultSet resultSet = m_query.executeQuery();
+		assertNotNull( resultSet );
+		
+		// Get Result Set Meta Data.
+		IResultSetMetaData rsmd = resultSet.getMetaData();
+		assertNotNull( rsmd );
+	}
+
+	public final void testQueryClose( ) throws OdaException
+	{
+		// Close the query.
+		m_query.close( );
+		
+		try
+		{
+			m_query.prepare( "Simple Query" );
+		}
+		catch( OdaException e )
+		{
+			// An exception is expected here, complaining about the query
+			// already being closed.
+			assertTrue( e.toString().indexOf( "closed" ) >= 0 );
+			return;
+		}
+		
+		// Should not get here.
+		fail();
+	}
+}
\ No newline at end of file
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/ResultSetMetaDataTest.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/ResultSetMetaDataTest.java
new file mode 100644
index 0000000..711071b
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/ResultSetMetaDataTest.java
@@ -0,0 +1,290 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.tests;
+
+import org.eclipse.datatools.connectivity.oda.IQuery;
+import org.eclipse.datatools.connectivity.oda.IResultSet;
+import org.eclipse.datatools.connectivity.oda.IResultSetMetaData;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+
+public class ResultSetMetaDataTest extends QueryTest
+{
+	private IQuery m_query = null;
+	private IResultSetMetaData m_resultSetMetaData;
+
+	protected void setUp() throws Exception
+	{
+		super.setUp( );
+		m_query = getQuery();
+		
+		if ( ! getName().equals( "testExecuteQuery" ) &&
+				! getName().equals( "testFindInParameter" ) &&
+				! getName().equals( "testGetParameterMetaData" ) &&
+				! getName().equals( "testSetAndGetSortSpec" ) &&
+				! getName().equals( "testGetResultSetMetaDataFromQuery" ) &&
+				! getName().equals( "testSetParametersByName" ) &&
+				! getName().equals( "testSetParametersByPos" ) )
+		{
+			m_query.prepare( "Simple Query" );
+			m_resultSetMetaData = m_query.getMetaData();
+		}
+	}
+
+	protected void tearDown() throws Exception
+	{
+		m_query.close();
+		
+		super.tearDown();
+	}
+
+	public final void testGetColumnName( ) throws Exception
+	{
+		checkColumnNames( m_resultSetMetaData );
+	}
+
+	public final void testGetColumnName1( ) throws Exception
+	{
+		IResultSetMetaData metadata = getMetaDataFromResult( );
+
+		checkColumnNames( metadata );
+	}
+	
+	public final void testGetColumnLabel( ) throws Exception
+	{
+		checkColumnLabels( m_resultSetMetaData );
+	}
+
+	public final void testGetColumnLabel1( ) throws Exception
+	{
+		IResultSetMetaData metadata = getMetaDataFromResult( );
+
+		checkColumnLabels( metadata );
+	}
+
+	public final void testGetColumnType( ) throws Exception
+	{
+		checkColumnTypes( m_resultSetMetaData );
+	}
+
+	public final void testGetColumnType1( ) throws Exception
+	{
+		IResultSetMetaData metadata = getMetaDataFromResult( );
+
+		checkColumnTypes( metadata );
+	}
+	
+	public final void testGetColumnTypeName( ) throws Exception
+	{
+		checkColumnTypeNames( m_resultSetMetaData );
+	}
+
+	public final void testGetColumnTypeName1( ) throws Exception
+	{
+		IResultSetMetaData metadata = getMetaDataFromResult( );
+
+		checkColumnTypeNames( metadata );
+	}
+	
+	public final void testGetColumnDisplayLength( ) throws Exception
+	{
+		checkColumnDisplayLengths( m_resultSetMetaData );
+	}
+
+	public final void testGetColumnDisplayLength1( ) throws Exception
+	{
+		IResultSetMetaData metadata = getMetaDataFromResult( );
+
+		checkColumnDisplayLengths( metadata );
+	}
+	
+	public final void testGetColumnPrecision( ) throws Exception
+	{
+		checkColumnPrecision( m_resultSetMetaData );
+	}
+
+	public final void testGetColumnPrecision1( ) throws Exception
+	{
+		IResultSetMetaData metadata = getMetaDataFromResult( );
+
+		checkColumnPrecision( metadata );
+	}
+	
+	public final void testGetColumnScale( ) throws Exception
+	{
+		checkColumnScale( m_resultSetMetaData );
+	}
+
+	public final void testGetColumnScale1( ) throws Exception
+	{
+		IResultSetMetaData metadata = getMetaDataFromResult( );
+
+		checkColumnScale( metadata );
+	}
+	
+	public final void testGetColumnIsNullable( ) throws Exception
+	{
+		checkColumnIsNullable( m_resultSetMetaData );
+	}
+
+	public final void testGetColumnIsNullable1( ) throws Exception
+	{
+		IResultSetMetaData metadata = getMetaDataFromResult( );
+
+		checkColumnIsNullable( metadata );
+	}
+	
+	public final void testGetColumnCount( ) throws OdaException
+	{
+		checkColumnCount( m_resultSetMetaData );
+	}
+
+	public final void testGetColumnCount1( ) throws Exception
+	{
+		IResultSetMetaData metadata = getMetaDataFromResult( );
+
+		checkColumnCount( metadata );
+	}
+
+	private IResultSetMetaData getMetaDataFromResult( ) throws OdaException
+	{
+		IResultSet resultSet = m_query.executeQuery();
+		return resultSet.getMetaData( );
+	}
+
+	private void checkColumnCount( IResultSetMetaData md ) throws OdaException
+	{
+		assertEquals( 13, md.getColumnCount() );
+	}
+	
+	private void checkColumnNames( IResultSetMetaData md ) throws OdaException
+	{
+		assertTrue( md.getColumnName( 1 ).equals( "BigDecimalCol" ) );
+		assertTrue( md.getColumnName( 2 ).equals( "BlobCol1" ) );
+		assertTrue( md.getColumnName( 3 ).equals( "BlobCol2" ) );
+		assertTrue( md.getColumnName( 4 ).equals( "ClobCol1" ) );
+		assertTrue( md.getColumnName( 5 ).equals( "ClobCol2" ) );
+		assertTrue( md.getColumnName( 6 ).equals( "DateCol" ) );
+		assertTrue( md.getColumnName( 7 ).equals( "DoubleCol" ) );
+		assertTrue( md.getColumnName( 8 ).equals( "IntCol" ) );
+		assertTrue( md.getColumnName( 9 ).equals( "StringCol" ) );
+		assertTrue( md.getColumnName( 10 ).equals( "TimeCol" ) );
+		assertTrue( md.getColumnName( 11 ).equals( "TimestampCol" ) );		
+	}
+	
+	private void checkColumnLabels( IResultSetMetaData md ) throws OdaException
+	{
+		assertTrue( md.getColumnLabel( 1 ).equals( "BigDecimalLabel" ) );
+		assertTrue( md.getColumnLabel( 2 ).equals( "BlobLabel1" ) );
+		assertTrue( md.getColumnLabel( 3 ).equals( "BlobLabel2" ) );
+		assertTrue( md.getColumnLabel( 4 ).equals( "ClobLabel1" ) );
+		assertTrue( md.getColumnLabel( 5 ).equals( "ClobLabel2" ) );
+		assertTrue( md.getColumnLabel( 6 ).equals( "DateLabel" ) );
+		assertTrue( md.getColumnLabel( 7 ).equals( "DoubleLabel" ) );
+		assertTrue( md.getColumnLabel( 8 ).equals( "IntLabel" ) );
+		assertTrue( md.getColumnLabel( 9 ).equals( "StringLabel" ) );
+		assertTrue( md.getColumnLabel( 10 ).equals( "TimeLabel" ) );
+		assertTrue( md.getColumnLabel( 11 ).equals( "TimestampLabel" ) );		
+	}
+	
+	private void checkColumnTypes( IResultSetMetaData md ) throws OdaException
+	{
+		assertTrue( md.getColumnType( 1 ) == 3 );
+		assertTrue( md.getColumnType( 2 ) == 97 );
+		assertTrue( md.getColumnType( 3 ) == 97 );
+		assertTrue( md.getColumnType( 4 ) == 98 );
+		assertTrue( md.getColumnType( 5 ) == 98 );
+		assertTrue( md.getColumnType( 6 ) == 91 );
+		assertTrue( md.getColumnType( 7 ) == 8 );
+		assertTrue( md.getColumnType( 8 ) == 4 );
+		assertTrue( md.getColumnType( 9 ) == 12 );	
+		assertTrue( md.getColumnType( 10 ) == 92 );	
+		assertTrue( md.getColumnType( 11 ) == 93 );	
+	}
+	
+	private void checkColumnTypeNames( IResultSetMetaData md ) throws OdaException
+	{
+		assertTrue( md.getColumnTypeName( 1 ).equals( "BCD" ) );
+		assertTrue( md.getColumnTypeName( 2 ).equals( "BLOB" ) );
+		assertTrue( md.getColumnTypeName( 3 ).equals( "BLOB" ) );
+		assertTrue( md.getColumnTypeName( 4 ).equals( "CLOB" ) );
+		assertTrue( md.getColumnTypeName( 5 ).equals( "CLOB" ) );
+		assertTrue( md.getColumnTypeName( 6 ).equals( "DATE" ) );
+		assertTrue( md.getColumnTypeName( 7 ).equals( "DOUBLE" ) );
+		assertTrue( md.getColumnTypeName( 8 ).equals( "INT" ) );
+		assertTrue( md.getColumnTypeName( 9 ).equals( "CHAR" ) );
+		assertTrue( md.getColumnTypeName( 10 ).equals( "TIME" ) );
+		assertTrue( md.getColumnTypeName( 11 ).equals( "TIMESTAMP" ) );		
+	}
+	
+	private void checkColumnDisplayLengths( IResultSetMetaData md ) throws OdaException
+	{
+		assertTrue( md.getColumnDisplayLength( 1 ) == 13 );
+		assertTrue( md.getColumnDisplayLength( 2 ) == 50 );
+		assertTrue( md.getColumnDisplayLength( 3 ) == 50 );
+		assertTrue( md.getColumnDisplayLength( 4 ) == 100 );
+		assertTrue( md.getColumnDisplayLength( 5 ) == 100 );
+		assertTrue( md.getColumnDisplayLength( 6 ) == 10 );
+		assertTrue( md.getColumnDisplayLength( 7 ) == 10 );	
+		assertTrue( md.getColumnDisplayLength( 8 ) == 11 );	
+		assertTrue( md.getColumnDisplayLength( 9 ) == 20 );	
+		assertTrue( md.getColumnDisplayLength( 10 ) == 17 );	
+		assertTrue( md.getColumnDisplayLength( 11 ) == 17 );	
+	}
+	
+	private void checkColumnPrecision( IResultSetMetaData md ) throws OdaException
+	{
+		assertTrue( md.getPrecision( 1 ) == 10 );
+		assertTrue( md.getPrecision( 2 ) == -1 );
+		assertTrue( md.getPrecision( 3 ) == -1 );
+		assertTrue( md.getPrecision( 4 ) == -1 );
+		assertTrue( md.getPrecision( 5 ) == -1 );
+		assertTrue( md.getPrecision( 6 ) == -1 );
+		assertTrue( md.getPrecision( 7 ) == -1 );
+		assertTrue( md.getPrecision( 8 ) == 10 );
+		assertTrue( md.getPrecision( 9 ) == -1 );	
+		assertTrue( md.getPrecision( 10 ) == -1 );	
+		assertTrue( md.getPrecision( 11 ) == -1 );	
+	}
+	
+	private void checkColumnScale( IResultSetMetaData md ) throws OdaException
+	{
+		assertTrue( md.getScale( 1 ) == 2 );
+		assertTrue( md.getScale( 2 ) == -1 );
+		assertTrue( md.getScale( 3 ) == -1 );
+		assertTrue( md.getScale( 4 ) == -1 );
+		assertTrue( md.getScale( 5 ) == -1 );
+		assertTrue( md.getScale( 6 ) == -1 );
+		assertTrue( md.getScale( 7 ) == -1 );	
+		assertTrue( md.getScale( 8 ) == -1 );	
+		assertTrue( md.getScale( 9 ) == -1 );
+		assertTrue( md.getScale( 10 ) == -1 );	
+		assertTrue( md.getScale( 11 ) == -1 );	
+	}
+	
+	private void checkColumnIsNullable( IResultSetMetaData md ) throws OdaException
+	{
+		assertTrue( md.isNullable( 1 ) == IResultSetMetaData.columnNoNulls );
+		assertTrue( md.isNullable( 2 ) == IResultSetMetaData.columnNoNulls );
+		assertTrue( md.isNullable( 3 ) == IResultSetMetaData.columnNullable );
+		assertTrue( md.isNullable( 4 ) == IResultSetMetaData.columnNoNulls );
+		assertTrue( md.isNullable( 5 ) == IResultSetMetaData.columnNullable );
+		assertTrue( md.isNullable( 6 ) == IResultSetMetaData.columnNoNulls );
+		assertTrue( md.isNullable( 7 ) == IResultSetMetaData.columnNoNulls );
+		assertTrue( md.isNullable( 8 ) == IResultSetMetaData.columnNoNulls );
+		assertTrue( md.isNullable( 9 ) == IResultSetMetaData.columnNoNulls );	
+		assertTrue( md.isNullable( 10 ) == IResultSetMetaData.columnNoNulls );	
+		assertTrue( md.isNullable( 11 ) == IResultSetMetaData.columnNoNulls );	
+	}
+}
\ No newline at end of file
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/ResultSetTest.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/ResultSetTest.java
new file mode 100644
index 0000000..8d1fdc0
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/ResultSetTest.java
@@ -0,0 +1,417 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.tests;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+import java.sql.Time;
+import java.sql.Timestamp;
+
+import org.eclipse.datatools.connectivity.oda.IBlob;
+import org.eclipse.datatools.connectivity.oda.IClob;
+import org.eclipse.datatools.connectivity.oda.IConnection;
+import org.eclipse.datatools.connectivity.oda.IQuery;
+import org.eclipse.datatools.connectivity.oda.IResultSet;
+import org.eclipse.datatools.connectivity.oda.IResultSetMetaData;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.consumer.testdriver.TestData;
+
+public class ResultSetTest extends QueryTest 
+{
+	private IQuery m_query = null;
+	private IResultSet m_resultSet = null;
+	
+	protected void setUp() throws Exception
+	{
+		super.setUp( );
+		m_query = getQuery();
+		
+		if ( ! getName().equals( "testExecuteQuery" ) &&
+				! getName().equals( "testFindInParameter" ) &&
+				! getName().equals( "testGetParameterMetaData" ) &&
+				! getName().equals( "testSetAndGetSortSpec" ) &&
+				! getName().equals( "testGetResultSetMetaDataFromQuery" ) &&
+				! getName().equals( "testSetParametersByName" ) &&
+				! getName().equals( "testSetParametersByPos" ) )
+		{
+			m_query.prepare( "Simple Query" );
+			m_resultSet = m_query.executeQuery();
+		}
+	}
+
+	protected void tearDown() throws Exception
+	{
+		if ( m_resultSet != null )
+			m_resultSet.close();
+		
+		m_query.close();
+		
+		super.tearDown();
+	}
+	
+	public final void testCloseResultSet() throws OdaException 
+	{
+		// Close result set.
+		m_resultSet.close();
+		
+		try
+		{
+			m_resultSet.next();
+		}
+		catch( OdaException e )
+		{
+			// Expect an exception from the test driver complaining that the
+			// result set has been closed.
+			assertTrue( e.toString().indexOf( "closed" ) >= 0 );
+			return;
+		}
+		
+		// Should not get here.
+		fail();
+	}
+
+	public final void testFindColumn() throws OdaException 
+	{
+		// Test finding an existing column.
+		int index = m_resultSet.findColumn( "BigDecimalCol" );
+		assertTrue( index == 1 );
+		
+		// Test finding a non-existent column.
+		try
+		{
+			index = m_resultSet.findColumn( "NonExistentColumn" );
+		}
+		catch( OdaException e )
+		{
+			// Expect an exception to be caught here.
+			assertTrue( e.toString().indexOf( "Unknown column name" ) >= 0 );
+		}
+	}
+    
+    public final void testGetBoolean() throws OdaException 
+    {
+        boolean retVal = m_resultSet.next();
+        assertTrue( retVal );
+        
+        boolean expectedVal = TestData.createBooleanFalseData();
+        
+        // Test get value by column pos. defined in TestResultSetMetaDataImpl
+        boolean val = m_resultSet.getBoolean( 12 );
+        assertEquals( expectedVal, val );
+        
+        // Test get value by column name.
+        val = m_resultSet.getBoolean( "BooleanCol" );
+        assertEquals( expectedVal, val );
+    }
+    
+    public final void testGetObject() throws OdaException 
+    {
+        boolean retVal = m_resultSet.next();
+        assertTrue( retVal );
+        
+        Object expectedVal = TestData.createObjectData();
+        
+        // Test get value by column pos. defined in TestResultSetMetaDataImpl
+        Object val = m_resultSet.getObject( 13 );
+        assertEquals( expectedVal, val );
+        
+        // Test get value by column name.
+        val = m_resultSet.getObject( "ObjectCol" );
+        assertEquals( expectedVal, val );
+    }
+	
+	public final void testGetBigDecimal() throws OdaException 
+	{
+		boolean retVal = m_resultSet.next();
+		assertTrue( retVal );
+		
+		BigDecimal bdVal = TestData.createBigDecimalData();
+		
+		// Test get value by column pos.
+		BigDecimal val = m_resultSet.getBigDecimal( 1 );
+		assertEquals( bdVal, val );
+		
+		// Test get value by column name.
+		val = m_resultSet.getBigDecimal( "BigDecimalCol" );
+		assertEquals( bdVal, val );
+	}
+
+	public final void testGetBlob() throws OdaException 
+	{
+		boolean retVal = m_resultSet.next();
+		assertTrue( retVal );
+		
+		// 
+		// Test with non-null blob data.
+		//
+		
+		IBlob refVal = TestData.createBlobData();
+		
+		// Test get value by column pos.
+		IBlob val1 = m_resultSet.getBlob( 2 );
+		assertTrue( TestData.checkBlobData( val1, refVal ) );
+		
+		// Test get value by column name.
+		val1 = m_resultSet.getBlob( "BlobCol1" );
+		assertTrue( TestData.checkBlobData( val1, refVal ) );
+		
+		
+		//
+		// Test with null blob data.  Notice that when the blob data is null,
+		// the returned IBlob value by the oda consumer will also be null and no
+		// wrapper will be applied on top of the value.
+		//
+		
+		// Test get value by column pos.
+		IBlob val2 = m_resultSet.getBlob( 3 );
+		assertNull( val2 );
+		
+		// Test get value by column name.
+		val2 = m_resultSet.getBlob( "BlobCol2" );
+		assertNull( val2 );
+	}
+	
+	public final void testGetClob() throws OdaException 
+	{
+		boolean retVal = m_resultSet.next();
+		assertTrue( retVal );
+		
+		// 
+		// Test with non-null clob data.
+		//
+		String refVal = TestData.createClobDataString();
+		
+		// Test get value by column pos.
+		IClob val1 = m_resultSet.getClob( 4 );
+		assertTrue( TestData.checkClobData( val1, refVal ) );
+		
+		// Test get value by column name.
+		val1 = m_resultSet.getClob( "ClobCol1" );
+		assertTrue( TestData.checkClobData( val1, refVal ) );
+		
+		// 
+		// Test with null clob data.  Notice that when the clob data is null,
+		// the returned IClob value by the oda consumer will also be null and no
+		// wrapper will be applied on top of the value.
+		//
+		
+		// Test get value by column pos.
+		IClob val2 = m_resultSet.getClob( 5 );
+		assertNull( val2 );
+		
+		// Test get value by column name.
+		val1 = m_resultSet.getClob( "ClobCol2" );
+		assertNull( val2 );
+	}
+	
+	public final void testGetDate() throws OdaException 
+	{
+		boolean retVal = m_resultSet.next();
+		assertTrue( retVal );
+		
+		Date dateVal = TestData.createDateData();
+		
+		// Test get value by column pos.
+		Date val = m_resultSet.getDate( 6 );
+		assertEquals( dateVal, val );
+		
+		// Test get value by column name.
+		val = m_resultSet.getDate( "DateCol" );
+		assertEquals( dateVal, val );
+	}
+	
+	public final void testGetDouble() throws OdaException 
+	{
+		boolean retVal = m_resultSet.next();
+		assertTrue( retVal );
+		
+		double doubleVal = TestData.createDoubleData();
+		
+		// Test get value by column pos.
+		double val = m_resultSet.getDouble( 7 );
+		assertTrue( doubleVal == val );
+		
+		// Test get value by column name.
+		val = m_resultSet.getDouble( "DoubleCol" );
+		assertTrue( doubleVal == val );
+	}
+	
+	public final void testGetInt() throws OdaException 
+	{
+		boolean retVal = m_resultSet.next();
+		assertTrue( retVal );
+		
+		int intVal = TestData.createIntData();
+		
+		// Test get value by column pos.
+		int val = m_resultSet.getInt( 8 );
+        assertEquals( intVal, val );
+		
+		// Test get value by column name.
+		val = m_resultSet.getInt( "IntCol" );
+        assertEquals( intVal, val );
+	}
+	
+	public final void testGetResultSetMetaData() throws OdaException 
+	{
+		IResultSetMetaData rsmd = m_resultSet.getMetaData();
+		assertNotNull( rsmd );
+	}
+
+	private void doTestSetMaxRows( int max, int expected, boolean setMax )
+	throws OdaException
+	{
+		if ( setMax )
+			m_resultSet.setMaxRows( max );
+		
+		int count = 0;
+		while ( m_resultSet.next( ) )
+			count++;
+		assertEquals( expected, count );
+	}
+	
+	public final void testSetResultSetMaxRows0( ) throws OdaException
+	{
+		doTestSetMaxRows( 0, 5, false /* setMax */);
+	}
+	
+	public final void testSetResultSetMaxRows1( ) throws OdaException
+	{
+		doTestSetMaxRows( 2, 2, true /* setMax */);
+	}
+	
+	public final void testSetResultSetMaxRows2( ) throws OdaException
+	{
+		// Setting max to 0 means there is no limit.
+		doTestSetMaxRows( 0, 5, true /* setMax */);
+	}
+
+	public final void testSetResultSetMaxRows3( ) throws OdaException
+	{
+		doTestSetMaxRows( 10, 5, true /* setMax */);
+	}
+
+	public final void testGetString() throws OdaException 
+	{
+		boolean retVal = m_resultSet.next();
+		assertTrue( retVal );
+		
+		String strVal = TestData.createStringData();
+		
+		// Test get value by column pos.
+		String val = m_resultSet.getString( 9 );
+		assertEquals( strVal, val );
+		
+		// Test get value by column name.
+		val = m_resultSet.getString( "StringCol" );
+		assertEquals( strVal, val );
+	}
+
+	public final void testGetTime() throws OdaException 
+	{
+		boolean retVal = m_resultSet.next();
+		assertTrue( retVal );
+		
+		Time timeVal = TestData.createTimeData();
+		
+		// Test get value by column pos.
+		Time val = m_resultSet.getTime( 10 );
+		assertEquals( timeVal, val );
+		
+		// Test get value by column name.
+		val = m_resultSet.getTime( "TimeCol" );
+		assertEquals( timeVal, val );
+	}
+	
+	public final void testGetTimestamp() throws OdaException 
+	{
+		boolean retVal = m_resultSet.next();
+		assertTrue( retVal );
+		
+		Timestamp tsVal = TestData.createTimestampData();
+		
+		// Test get value by column pos.
+		Timestamp val = m_resultSet.getTimestamp( 11 );
+		assertEquals( tsVal, val );
+		
+		// Test get value by column name.
+		val = m_resultSet.getTimestamp( "TimestampCol" );
+		assertEquals( tsVal, val );
+	}
+	
+	public final void testWasNull() throws OdaException 
+	{
+		boolean retVal = m_resultSet.next();
+		assertTrue( retVal );
+		
+		// Get column "BigDecimalCol" value.
+		// The value is not null.
+		BigDecimal bdVal = m_resultSet.getBigDecimal( "BigDecimalCol" );
+		assertNotNull( bdVal );
+		assertFalse( m_resultSet.wasNull() );
+		
+		// Get column "BlobCol2" value.
+		// The value is null.
+		IBlob blobVal = m_resultSet.getBlob( "BlobCol2" );
+		assertNull( blobVal );
+		assertTrue( m_resultSet.wasNull() );
+	}
+	
+	public final void testGetRowAndNext() throws OdaException
+	{
+		int count = 0;
+		while ( m_resultSet.next( ) )
+		{
+			count++;
+			assertTrue( m_resultSet.getRow() == count );
+		}
+	}
+	
+	public final void testNextWithInactiveConnection() throws OdaException
+	{
+		IConnection conn = getConnection();
+		conn.open( null );
+		
+		IQuery query = conn.newQuery( null );
+		query.prepare( "Simple Query" );
+		IResultSet rs = query.executeQuery();
+		
+		// Under normal situation, calling next() should point 
+		// to the first row of the result set.
+		assertTrue( rs.next() );
+		
+		// Close connection.
+		conn.close();
+		
+		try
+		{
+			rs.next();
+			
+			// Should not get here.
+			fail();
+		}
+		catch( OdaException e )
+		{
+			// Expect an exception complaining about the connection is 
+			// not active.
+			String error = e.toString();
+			assertTrue( error.indexOf( "connection" ) >= 0 &&
+					error.indexOf( "not active" ) >= 0 );
+		}
+		
+		query.close();
+		conn.close();
+	}
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/TraceLogConfigTest.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/TraceLogConfigTest.java
new file mode 100644
index 0000000..13d7d4c
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/TraceLogConfigTest.java
@@ -0,0 +1,170 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.tests;
+
+import java.io.File;
+import java.io.IOException;
+
+import junit.framework.TestCase;
+
+import org.eclipse.datatools.connectivity.oda.IDriver;
+import org.eclipse.datatools.connectivity.oda.LogConfiguration;
+import org.eclipse.datatools.connectivity.oda.consumer.helper.OdaConsumerPlugin;
+import org.eclipse.datatools.connectivity.oda.consumer.helper.OdaDriver;
+import org.eclipse.datatools.connectivity.oda.util.logging.Level;
+
+/**
+ *
+ */
+public class TraceLogConfigTest extends TestCase
+{
+    static final String TEST_DRIVER_ID = 
+        "org.eclipse.datatools.connectivity.oda.consumer.testdriver"; //$NON-NLS-1$
+
+    private static IDriver sm_odaDriver;
+    private static File sm_consumerLogDir;
+    private String m_driverLogRelativeDirName;
+    private File m_driverLogAbsoluteDir;
+
+    /* (non-Javadoc)
+     * @see junit.framework.TestCase#setUp()
+     */
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+        
+        if( sm_odaDriver == null )
+            sm_odaDriver = new OdaDriver( TEST_DRIVER_ID );
+
+        if( sm_consumerLogDir == null )
+        {
+            sm_consumerLogDir = 
+                    OdaConsumerPlugin.getDefault().getStateLocation()
+                        .append( "logs" )
+                        .append( TEST_DRIVER_ID ).toFile();
+        }
+        
+        m_driverLogRelativeDirName = TraceLogTestUtil.getOptionsLogDir( TEST_DRIVER_ID );
+        // change driver log dir in explicit setLogConfig
+        if( getName() == "testDriverTraceOptionsAndSetLogConfig" )
+            m_driverLogRelativeDirName = "testSetLogDir";   
+        
+        if( m_driverLogRelativeDirName != null )
+        {
+            m_driverLogAbsoluteDir = 
+                OdaConsumerPlugin.getDefault().getStateLocation()
+                    .append( "logs" )
+                    .append( m_driverLogRelativeDirName ).toFile();
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see junit.framework.TestCase#tearDown()
+     */
+    protected void tearDown() throws Exception
+    {
+        super.tearDown();
+        // turn off OdaDriver's logging before log files can be deleted
+        String logDir = m_driverLogAbsoluteDir != null ?
+                m_driverLogAbsoluteDir.getPath() :
+                m_driverLogRelativeDirName;
+        LogConfiguration offLogConfig = 
+            new LogConfiguration( 
+                     TEST_DRIVER_ID,
+                     Level.OFF, 
+                     logDir,
+                     TraceLogTestUtil.CONSUMER_LOG_PREFIX, 
+                     null );
+        sm_odaDriver.setLogConfiguration( offLogConfig );
+        
+        cleanupTestLogFiles( sm_consumerLogDir ); // reset for new test case
+        if( sm_consumerLogDir != null )
+            sm_consumerLogDir.delete();
+        
+        try
+        {
+            cleanupTestLogFiles( m_driverLogAbsoluteDir );
+            if( m_driverLogAbsoluteDir != null )
+                m_driverLogAbsoluteDir.delete();
+        }
+        catch( IOException e )
+        {
+            // ignore
+            e.printStackTrace();
+        }
+   }
+    
+    public void testDriverTraceOptions() throws Exception
+    {
+        // use the default one set by trace options or traceLogging element
+        // change driver log dir in explicit setLogConfig
+        String logFilePrefix = "testTraceOptions";
+        String logDir = m_driverLogAbsoluteDir != null ?
+                m_driverLogAbsoluteDir.getPath() :
+                m_driverLogRelativeDirName;
+        LogConfiguration logConfig = new LogConfiguration( TEST_DRIVER_ID,
+                 Level.FINE,  
+                 logDir,
+                 logFilePrefix, 
+                 "throwsException" );   // triggers test driver to throw exception
+        ((OdaDriver) sm_odaDriver ).setLogDirectory( sm_consumerLogDir.getAbsolutePath() );
+        sm_odaDriver.setLogConfiguration( logConfig );
+
+        // expects driver has thrown exception, so no log is written
+        assertFalse( hasTestLogFiles( m_driverLogAbsoluteDir, logFilePrefix ) );
+        
+        // expected to use odaconsumer's logs/driver directory 
+        // to log driver's unsupported operation exception
+        assertTrue( hasTestLogFiles( sm_consumerLogDir, TraceLogTestUtil.CONSUMER_LOG_PREFIX ) );
+    }
+    
+    public void testDriverTraceOptionsAndSetLogConfig() throws Exception
+    {
+        // change driver log dir in explicit setLogConfig
+        String logFilePrefix = "testTraceOptionsAndSetLogConfig";
+        LogConfiguration logConfig = new LogConfiguration( TEST_DRIVER_ID,
+                 Level.FINE,  // triggers test driver to log
+                 m_driverLogAbsoluteDir.getPath(),
+                 logFilePrefix, 
+                 null );
+        sm_odaDriver.setLogConfiguration( logConfig );
+      
+        // expects driver log gets written to explicit logConfig's logDir
+        assertTrue( hasTestLogFiles( m_driverLogAbsoluteDir, logFilePrefix ) );
+
+        // expects default log dir is not used
+        String optionsLogDir = TraceLogTestUtil.getOptionsLogDir( TEST_DRIVER_ID );
+        if( optionsLogDir != null )
+        {
+            File defaultLogDir =
+                OdaConsumerPlugin.getDefault().getStateLocation()
+                    .append( "logs" )
+                    .append( optionsLogDir ).toFile();
+            assertFalse( defaultLogDir.exists() );
+            assertFalse( hasTestLogFiles( defaultLogDir, logFilePrefix ) );  
+        }
+    }
+    
+    private void cleanupTestLogFiles( File logDir ) throws IOException
+    {      
+        TraceLogTestUtil.cleanupTestLogFiles( logDir );
+    }
+    
+    private boolean hasTestLogFiles( File logDir, String logFilePrefix )
+    {
+        return TraceLogTestUtil.hasTestLogFiles( logDir, logFilePrefix );
+    }
+    
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/TraceLogTest.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/TraceLogTest.java
new file mode 100644
index 0000000..030b52e
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/TraceLogTest.java
@@ -0,0 +1,138 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.tests;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.eclipse.datatools.connectivity.oda.LogConfiguration;
+import org.eclipse.datatools.connectivity.oda.consumer.helper.OdaConsumerPlugin;
+import org.eclipse.datatools.connectivity.oda.consumer.helper.OdaDriver;
+import org.eclipse.datatools.connectivity.oda.util.logging.Level;
+
+public class TraceLogTest extends FlatFileTestCase
+{
+	private static final String CONSUMER_LOG_PREFIX = TraceLogTestUtil.CONSUMER_LOG_PREFIX;
+    private static File sm_consumerLogDir;
+    private String m_driverLogRelativeDirName;
+	private File m_driverLogAbsoluteDir;
+    
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+            
+        if( sm_consumerLogDir == null )
+        {
+	        sm_consumerLogDir = 
+	        		OdaConsumerPlugin.getDefault().getStateLocation()
+	        			.append( "logs" )
+	        			.append( TEST_FLATFILE_ID ).toFile();
+        }
+        cleanupTestLogFiles( sm_consumerLogDir );       
+        
+        if( getName() == "testDefaultLogDir" )
+            m_driverLogRelativeDirName = "./OdaLogs";
+        else if( getName() == "testSetLogDir" )
+            m_driverLogRelativeDirName = "testSetLogDir";
+        
+        if( m_driverLogRelativeDirName != null )
+            m_driverLogAbsoluteDir = 
+                OdaConsumerPlugin.getDefault().getStateLocation()
+                    .append( "logs" )
+                    .append( m_driverLogRelativeDirName ).toFile();
+        cleanupTestLogFiles( m_driverLogAbsoluteDir );
+    }
+
+    /*
+     * @see TestCase#tearDown()
+     */
+    protected void tearDown() throws Exception
+    {
+        super.tearDown();
+        
+        if( getOdaConn() != null )
+            getOdaConn().close();
+
+        // turn off OdaDriver's logging before log files can be deleted
+		LogConfiguration offLogConfig = 
+		    new LogConfiguration( 
+		    		TEST_FLATFILE_ID,
+					 Level.OFF, 
+                     m_driverLogRelativeDirName,
+					 CONSUMER_LOG_PREFIX, 
+					 null );
+    	getOdaDriver().setLogConfiguration( offLogConfig );
+		
+        cleanupTestLogFiles( sm_consumerLogDir );
+        cleanupTestLogFiles( m_driverLogAbsoluteDir );
+    }
+    
+	private void cleanupTestLogFiles( File logDir ) throws IOException
+    {      
+        TraceLogTestUtil.cleanupTestLogFiles( logDir );
+    }
+
+    public void testDefaultLogDir() throws Exception
+    {
+    	LogConfiguration logConfig = new LogConfiguration( TEST_FLATFILE_ID,
+    						 Level.FINE, 
+    						 m_driverLogRelativeDirName,
+    						 CONSUMER_LOG_PREFIX, 
+    						 null );
+    	
+    	assertFalse( hasTestLogFiles( sm_consumerLogDir ) );
+        if( getOdaDriver() instanceof OdaDriver )
+        {
+            // reset to use default odaconsumer log dir
+            ((OdaDriver) getOdaDriver()).setLogDirectory( sm_consumerLogDir.getPath() );
+        }
+    	getOdaDriver().setLogConfiguration( logConfig );
+    	
+    	assertTrue( hasTestLogFiles( sm_consumerLogDir ) );
+    }
+    
+    public void testSetLogDir() throws Exception
+    {
+    	LogConfiguration logConfig = new LogConfiguration( TEST_FLATFILE_ID,
+    						 Level.FINE, 
+                             m_driverLogRelativeDirName,
+    						 CONSUMER_LOG_PREFIX, 
+    						 null );
+    	
+    	assertFalse( hasTestLogFiles( sm_consumerLogDir ) );
+    	
+    	String ownLogDir = m_driverLogRelativeDirName;
+    	if( getOdaDriver() instanceof OdaDriver )
+    	{
+    		// overrides the default log dir
+    		((OdaDriver) getOdaDriver()).setLogDirectory( ownLogDir );
+    	}
+    		
+        // this is expected to use odaconsumer's logs/$m_logRelativeDirName 
+        // to log driver's unsupported operation exception
+    	getOdaDriver().setLogConfiguration( logConfig );
+    	
+    	// default log dir still should not exist
+    	assertFalse( hasTestLogFiles( sm_consumerLogDir ) );
+    	    	
+    	// expects to find log file relative to the odaconsumer logs base dir
+    	assertTrue( hasTestLogFiles( m_driverLogAbsoluteDir ) );
+    }
+    
+    private boolean hasTestLogFiles( File logDir )
+    {
+        return TraceLogTestUtil.hasTestLogFiles( logDir, CONSUMER_LOG_PREFIX );
+    }
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/TraceLogTestUtil.java b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/TraceLogTestUtil.java
new file mode 100644
index 0000000..7add205
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.consumer.tests/src/org/eclipse/datatools/connectivity/oda/consumer/tests/TraceLogTestUtil.java
@@ -0,0 +1,64 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.consumer.tests;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.eclipse.core.runtime.Platform;
+
+public class TraceLogTestUtil
+{
+    static final String CONSUMER_LOG_PREFIX = "OdaHelperLog"; //$NON-NLS-1$
+
+    static String getOptionsLogDir( String pluginId )
+    {
+        String logDirOption = pluginId + "/traceLogging/logDirectory";
+        return Platform.getDebugOption( logDirOption );        
+    }
+
+    static void cleanupTestLogFiles( File logDir ) throws IOException
+    {        
+        if( logDir == null || ! logDir.exists() )
+            return;     // nothing to clear
+        File[] filesInDir = logDir.listFiles();
+        if( filesInDir == null )
+            return;     // nothing to clear
+        
+        for ( int i = 0; i < filesInDir.length; i += 1 )
+        {         
+            boolean deleted = filesInDir[i].delete();
+            if ( ! deleted )
+                throw new IOException( "Cannot delete file: " + filesInDir[i].getName() );
+        }
+    }
+    
+    static boolean hasTestLogFiles( File logDir, String logFilePrefix )
+    {
+        if( logDir == null )
+            return false;
+        String[] filesInDir = logDir.list();
+        if( filesInDir == null )
+            return false;
+
+        for( int i = 0; i < filesInDir.length; i++ )
+        {
+            if( filesInDir[i].startsWith( logFilePrefix ) )
+                return true;
+        }       
+        return false;
+    }
+
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.design.tests/.classpath b/tests/org.eclipse.datatools.connectivity.oda.design.tests/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.design.tests/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/tests/org.eclipse.datatools.connectivity.oda.design.tests/.gitignore b/tests/org.eclipse.datatools.connectivity.oda.design.tests/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.design.tests/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/tests/org.eclipse.datatools.connectivity.oda.design.tests/.project b/tests/org.eclipse.datatools.connectivity.oda.design.tests/.project
new file mode 100644
index 0000000..279752c
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.design.tests/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.oda.design.tests</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/tests/org.eclipse.datatools.connectivity.oda.design.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.datatools.connectivity.oda.design.tests/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..d3afaa5
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.design.tests/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: DTP ODA Design Tests Suite
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.oda.design.tests; singleton:=true
+Bundle-Version: 3.2.3.qualifier
+Bundle-ClassPath: org.eclipse.datatools.connectivity.oda.design.tests.jar
+Bundle-Vendor: Eclipse.org
+Export-Package: org.eclipse.datatools.connectivity.oda.design.tests
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.3.0,4.0.0)",
+ org.eclipse.datatools.connectivity.oda.design;bundle-version="[3.3.3,4.0.0)";visibility:=reexport,
+ org.eclipse.emf.ecore.xmi;bundle-version="[2.4.0,3.0.0)";visibility:=reexport,
+ org.junit;bundle-version="[3.8.2,4.0.0)";visibility:=reexport
+Eclipse-LazyStart: true
diff --git a/tests/org.eclipse.datatools.connectivity.oda.design.tests/about.html b/tests/org.eclipse.datatools.connectivity.oda.design.tests/about.html
new file mode 100644
index 0000000..1b7d275
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.design.tests/about.html
@@ -0,0 +1,28 @@
+<html>
+<head>
+<title>About This Content</title>
+</head>
+<body>
+<div>
+<h3>About This Content</h3>
+<p>May 2, 2006</p>
+<h3>License</h3>
+<p>The Eclipse Foundation makes available all content in this plug-in
+(&quot;Content&quot;). Unless otherwise indicated below, the Content is
+provided to you under the terms and conditions of the Eclipse Public License
+Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available at <a
+href="http://www.eclipse.org/org/documents/epl-v10.php">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation,
+the Content is being redistributed by another party (&quot;Redistributor&quot;)
+and different terms and conditions may apply to your use of any object code in
+the Content. Check the RedistributorÂ’s license that was provided with the
+Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source
+code in the Content and such source code may be obtained at <a
+href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+<p>&nbsp;</p>
+</div>
+</body>
+</html>
diff --git a/tests/org.eclipse.datatools.connectivity.oda.design.tests/build.properties b/tests/org.eclipse.datatools.connectivity.oda.design.tests/build.properties
new file mode 100644
index 0000000..1392450
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.design.tests/build.properties
@@ -0,0 +1,23 @@
+# <copyright>
+# *************************************************************************
+# * Copyright (c) 2007 Actuate Corporation.
+# * All rights reserved. This program and the accompanying materials
+# * are made available under the terms of the Eclipse Public License v1.0
+# * which accompanies this distribution, and is available at
+# * http://www.eclipse.org/legal/epl-v10.html
+# *
+# * Contributors:
+# *  Actuate Corporation - initial API and implementation
+# *  
+# *************************************************************************
+# </copyright>
+#
+# $Id$
+
+bin.includes = org.eclipse.datatools.connectivity.oda.design.tests.jar,\
+               META-INF/,\
+               plugin.xml,\
+               testFiles/
+jars.compile.order = org.eclipse.datatools.connectivity.oda.design.tests.jar
+source.org.eclipse.datatools.connectivity.oda.design.tests.jar = src/
+output.org.eclipse.datatools.connectivity.oda.design.tests.jar = bin/
diff --git a/tests/org.eclipse.datatools.connectivity.oda.design.tests/plugin.xml b/tests/org.eclipse.datatools.connectivity.oda.design.tests/plugin.xml
new file mode 100644
index 0000000..823ccb0
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.design.tests/plugin.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ <copyright>
+ *************************************************************************
+ * Copyright (c) 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ </copyright>
+
+ $Id$
+-->
+
+<plugin>
+</plugin>
+
diff --git a/tests/org.eclipse.datatools.connectivity.oda.design.tests/src/org/eclipse/datatools/connectivity/oda/design/tests/DesignUtilLoadSaveTest.java b/tests/org.eclipse.datatools.connectivity.oda.design.tests/src/org/eclipse/datatools/connectivity/oda/design/tests/DesignUtilLoadSaveTest.java
new file mode 100644
index 0000000..a13b930
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.design.tests/src/org/eclipse/datatools/connectivity/oda/design/tests/DesignUtilLoadSaveTest.java
@@ -0,0 +1,620 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007, 2011 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.tests;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Iterator;
+
+import junit.framework.TestCase;
+
+import org.eclipse.datatools.connectivity.oda.design.AxisAttributes;
+import org.eclipse.datatools.connectivity.oda.design.AxisType;
+import org.eclipse.datatools.connectivity.oda.design.ColumnDefinition;
+import org.eclipse.datatools.connectivity.oda.design.CustomData;
+import org.eclipse.datatools.connectivity.oda.design.CustomFilterExpression;
+import org.eclipse.datatools.connectivity.oda.design.DataSetDesign;
+import org.eclipse.datatools.connectivity.oda.design.DataSetParameters;
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.DesignSessionResponse;
+import org.eclipse.datatools.connectivity.oda.design.DynamicFilterExpression;
+import org.eclipse.datatools.connectivity.oda.design.DynamicValuesQuery;
+import org.eclipse.datatools.connectivity.oda.design.ExpressionArguments;
+import org.eclipse.datatools.connectivity.oda.design.ExpressionParameterDefinition;
+import org.eclipse.datatools.connectivity.oda.design.ExpressionVariable;
+import org.eclipse.datatools.connectivity.oda.design.FilterExpressionType;
+import org.eclipse.datatools.connectivity.oda.design.InputElementAttributes;
+import org.eclipse.datatools.connectivity.oda.design.OdaDesignSession;
+import org.eclipse.datatools.connectivity.oda.design.OrExpression;
+import org.eclipse.datatools.connectivity.oda.design.ParameterDefinition;
+import org.eclipse.datatools.connectivity.oda.design.ResourceIdentifiers;
+import org.eclipse.datatools.connectivity.oda.design.ResultSubset;
+import org.eclipse.datatools.connectivity.oda.design.SortDirectionType;
+import org.eclipse.datatools.connectivity.oda.design.SortKey;
+import org.eclipse.datatools.connectivity.oda.design.util.DesignUtil;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+
+/**
+ * Test cases for loading and saving OdaDesignSession utility in DesignUtil.  
+ */
+public class DesignUtilLoadSaveTest extends TestCase
+{
+    private String m_testFilePath;
+    private File m_tempOutFile;
+    
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+        if( m_testFilePath == null )
+        {
+            try
+            {
+                m_testFilePath = TestUtil.getPluginTestFilePath();
+            }
+            catch( IOException ex )
+            {
+                ex.printStackTrace();
+                fail();
+            }
+        }
+    }
+
+    protected void tearDown() throws Exception
+    {        
+        cleanupFile( m_tempOutFile );
+        m_tempOutFile = null;
+        super.tearDown();
+    }
+
+    public void testLoadOdaDesignSession()
+    {
+        OdaDesignSession design = loadOdaDesignSession( new File( getSampleDbTestFilePath() ));
+        assertEquals( "sampledb Data Set", design.getResponseDataSetDesign().getName() ); //$NON-NLS-1$
+        assertNotNull( design.getRequestDataSetDesign() );
+        assertNotNull( design.getResponseDataSetDesign() );
+    }
+    
+    private OdaDesignSession loadOdaDesignSession( File testFile )
+    {
+        OdaDesignSession design = null;
+        try
+        {
+            design = DesignUtil.loadOdaDesignSession( testFile );
+        }
+        catch( Exception ex )
+        {
+            fail();
+        }
+        assertNotNull( design );
+        return design;
+    }
+    
+    private String getGoldenTestFilePath()
+    {
+        return m_testFilePath + "/golden"; //$NON-NLS-1$
+    }
+    
+    private String getSampleDbTestFilePath()
+    {
+        return getGoldenTestFilePath() + "/jdbcBirtSampleSession.xml"; //$NON-NLS-1$
+    }
+    
+    private String getSampleDbTestMigrateDefaultValueFilePath()
+    {
+        return getGoldenTestFilePath() + "/jdbcBirtSampleSession_multDefValues.xml"; //$NON-NLS-1$
+    }
+    
+    private String getSampleDbTestMigrateDefaultValueOutFilePath()
+    {
+        return getGoldenTestFilePath() + "/jdbcBirtSampleSession_multDefValues_out.xml"; //$NON-NLS-1$
+    }
+    
+    private String getSampleDbResourceFilePath()
+    {
+        return getGoldenTestFilePath() + "/BirtSampleResourceSession.xml"; //$NON-NLS-1$
+    }
+    
+    private String getTempOutFilePath()
+    {
+        return m_testFilePath + "/tempOut.xml"; //$NON-NLS-1$
+    }
+
+    public void testSaveDesignSession()
+    {
+        File goldenFile = new File( getSampleDbTestFilePath() );
+        OdaDesignSession design = loadOdaDesignSession( goldenFile );
+
+        File tempOut = getTempOutFile();
+        saveDesignSession( design, tempOut );
+        assertTrue( compareFileContent( goldenFile, tempOut ) );
+        
+        // modify the design and test nonEqual output
+        design.getResponseDataSetDesign().setName( "test change in name" ); //$NON-NLS-1$
+        saveDesignSession( design, tempOut );
+        assertFalse( compareFileContent( goldenFile, tempOut ) );
+    }
+    
+    public void testAddOptionalResourceIDElement()
+    {
+        String odaDesignURIString = "http://www.eclipse.org/datatools/connectivity/oda/design"; //$NON-NLS-1$
+        URI odaDesignURI = null;
+        try
+        {
+            odaDesignURI = new URI( odaDesignURIString );
+        }
+        catch( URISyntaxException ex )
+        {
+            fail();
+        }
+
+        // assign baseURI each in URI and String format, and test their format conversion
+        ResourceIdentifiers resourceIDs = DesignFactory.eINSTANCE.createResourceIdentifiers();
+        resourceIDs.setApplResourceBaseURIString( odaDesignURIString );        
+        resourceIDs.setDesignResourceBaseURI( odaDesignURI );
+        assertEquals( odaDesignURIString, resourceIDs.getDesignResourceBaseURIString() );
+        assertEquals( odaDesignURI, resourceIDs.getApplResourceBaseURI() );
+        
+        // add the ResourceIdentifiers to an ODA design session, and test its persistent format
+        File goldenFile = new File( getSampleDbTestFilePath() );
+        OdaDesignSession design = loadOdaDesignSession( goldenFile );        
+        DataSourceDesign dataSourceDesign = design.getRequestDataSourceDesign();
+        dataSourceDesign.setHostResourceIdentifiers( resourceIDs );
+
+        File tempOut = getTempOutFile();
+        saveDesignSession( design, tempOut );
+
+        goldenFile = new File( getSampleDbResourceFilePath() );
+        assertTrue( compareFileContent( goldenFile, tempOut ) );
+    }
+    
+    public void testCreateResultSetCriteriaDesign()
+    {
+        final String filterExprExtId = "org.eclipse.datatools.connectivity.oda.design.tests";   //$NON-NLS-1$
+        
+        File goldenFile = new File( getSampleDbTestFilePath() );
+        OdaDesignSession design = loadOdaDesignSession( goldenFile );
+        DataSetDesign dataSetDesign = design.getResponseDataSetDesign();
+        
+        ExpressionVariable exprVariable = DesignFactory.eINSTANCE.createExpressionVariable();
+        exprVariable.setIdentifier( "CUSTOMERNAME" ); //$NON-NLS-1$
+        exprVariable.setNativeDataTypeCode( 4 ); // integer
+        
+        ExpressionArguments exprArgs1 = DesignFactory.eINSTANCE.createExpressionArguments();
+
+        DataSetParameters dataSetParams = dataSetDesign.getParameters();
+        
+        // test that the localizable attribute is properly handled by EcoreUtil.copy
+        {
+            ParameterDefinition paramDefn = dataSetParams.getParameterDefinitions().get( 0 );
+            String desc = "default desc"; //$NON-NLS-1$
+            String descKey = "myDescKey"; //$NON-NLS-1$
+            paramDefn.getAttributes().setUiDescription( desc );
+            paramDefn.getAttributes().getUiHints().setDescriptionKey( descKey );
+            
+            DataSetParameters copy = (DataSetParameters) EcoreUtil.copy( dataSetParams );
+            ParameterDefinition paramDefnCopy = copy.getParameterDefinitions().get( 0 );
+            assertEquals( desc, paramDefnCopy.getAttributes().getUiHints().getDescription() );
+            assertEquals( descKey, paramDefnCopy.getAttributes().getUiHints().getDescriptionKey() );
+        }
+        
+        Iterator<ParameterDefinition> iter = dataSetParams.getParameterDefinitions().iterator();
+        while( iter.hasNext() )
+        {
+            ExpressionParameterDefinition newDynamicParamDefn = 
+                exprArgs1.addDynamicParameter( (ParameterDefinition) EcoreUtil.copy( iter.next() ) );
+
+            newDynamicParamDefn.addStaticValue( "ineffective static value" ); //$NON-NLS-1$
+            assertFalse( newDynamicParamDefn.hasEffectiveStaticValues() );
+        }
+        ExpressionParameterDefinition newStaticParamDefn = exprArgs1.addStaticParameter( new Date() );
+        assertTrue( newStaticParamDefn.hasEffectiveStaticValues() );
+        
+        CustomFilterExpression customExpr1 = DesignFactory.eINSTANCE.createCustomFilterExpression();
+        customExpr1.setDeclaringExtensionId( filterExprExtId );
+        customExpr1.setId( "1007" ); //$NON-NLS-1$
+        customExpr1.setContextVariable( exprVariable );
+        customExpr1.setContextArguments( exprArgs1 );
+        customExpr1.setIsOptional( true );
+        
+        CustomFilterExpression customExpr2 = DesignFactory.eINSTANCE.createCustomFilterExpression();
+        customExpr2.setDeclaringExtensionId( filterExprExtId );
+        customExpr2.setId( "10005" ); //$NON-NLS-1$
+        customExpr2.setContextVariable( exprVariable );
+
+        ExpressionArguments exprArgs2 = DesignFactory.eINSTANCE.createExpressionArguments();
+        newStaticParamDefn = exprArgs2.addStaticParameter( "static value 1" ); //$NON-NLS-1$
+        newStaticParamDefn.addStaticValue( "static value 2 " );         //$NON-NLS-1$
+        customExpr2.setContextArguments( exprArgs2 );
+
+        assertTrue( newStaticParamDefn.hasEffectiveStaticValues() );
+        assertEquals( 2, newStaticParamDefn.getEffectiveStaticValueCount() );
+        
+        OrExpression orExpr = DesignFactory.eINSTANCE.createOrExpression();
+        orExpr.add( customExpr1 );
+        orExpr.add( customExpr2 );
+        
+        DynamicFilterExpression dynamicFilterExpr = DesignFactory.eINSTANCE.createDynamicFilterExpression();
+        dynamicFilterExpr.setContextVariable( exprVariable );
+        dynamicFilterExpr.setContextArguments( exprArgs1 );
+        dynamicFilterExpr.setIsOptional( false );
+        FilterExpressionType defaultType = DesignFactory.eINSTANCE.createFilterExpressionType();
+        defaultType.setDeclaringExtensionId( filterExprExtId );
+        defaultType.setId( "10005" ); //$NON-NLS-1$
+        dynamicFilterExpr.setDefaultType( defaultType );
+        assertEquals( defaultType, dynamicFilterExpr.getDefaultType() );
+        
+        dataSetDesign.getPrimaryResultSet().getCriteria().setFilterSpecification( orExpr );
+        
+        // create sort spec in result set criteria
+        SortKey sortKey1 = DesignFactory.eINSTANCE.createSortKey();
+        sortKey1.setColumnPosition( 1 );
+
+        assertTrue( sortKey1.getColumnName().length() == 0 ); // default empty name if position is set
+        assertEquals( SortDirectionType.ASCENDING, sortKey1.getSortDirection() );   // default sort direction
+        
+        dataSetDesign.getPrimaryResultSet().getCriteria().addRowSortKey( sortKey1 );
+        
+        // test the created filter expressions are valid
+        try
+        {
+            DesignUtil.validateObject( dataSetDesign );
+        }
+        catch( IllegalStateException ex )
+        {
+            fail();
+        }  
+        
+        // test saving updated design session with the filter expression
+        File tempOut = getTempOutFile();
+        saveDesignSession( design, tempOut );
+    }
+    
+    public void testCreateAxisAttributesDesign()
+    {
+        File goldenFile = new File( getSampleDbTestFilePath() );
+        OdaDesignSession design = loadOdaDesignSession( goldenFile );
+        DataSetDesign dataSetDesign = design.getResponseDataSetDesign();
+        ColumnDefinition columnDefn =
+            dataSetDesign.getPrimaryResultSet().getResultSetColumns()
+                .getResultColumnDefinitions().get( 0 );
+        assertNotNull( columnDefn );
+        
+        AxisAttributes axisAttrs = DesignFactory.eINSTANCE.createAxisAttributes();
+        columnDefn.setMultiDimensionAttributes( axisAttrs );
+        axisAttrs.setAxisType( AxisType.DIMENSION_MEMBER_LITERAL );
+        axisAttrs.setRelatedColumns( DesignFactory.eINSTANCE.createResultSubset() );
+        ResultSubset relatedResultColumns = axisAttrs.getRelatedColumns();
+        relatedResultColumns.addColumnIdentifier( "column1" );
+        relatedResultColumns.addColumnIdentifier( null, 2 );
+        
+        assertEquals( 2, relatedResultColumns.getColumnIdentifiers().getIdentifiers().size() );
+        // check that null column name is automatically converted to empty string
+        assertEquals( "", relatedResultColumns.getColumnIdentifiers().getIdentifiers().get( 1 ).getName() ); //$NON-NLS-1$
+    }
+    
+    public void testInputElementMigrateDefaultValues()
+    {
+        File goldenFile = new File( getSampleDbTestMigrateDefaultValueFilePath() );
+        OdaDesignSession design = loadOdaDesignSession( goldenFile );
+        DataSetDesign dataSetDesign = design.getResponseDataSetDesign();
+        
+        DataSetParameters dataSetParams = dataSetDesign.getParameters();
+        for( ParameterDefinition aParamDefn : dataSetParams.getParameterDefinitions() )
+        {
+            InputElementAttributes inputElementAttrs = aParamDefn.getInputAttributes().getElementAttributes();
+            
+            String existingDefaultValue = aParamDefn.getDefaultScalarValue();
+            assertEquals( existingDefaultValue, inputElementAttrs.getDefaultScalarValue() );
+            
+            int initialDefaultValueCount = 4;
+            assertEquals( initialDefaultValueCount, aParamDefn.getDefaultValueCount() );
+            assertEquals( initialDefaultValueCount, inputElementAttrs.getDefaultValueCount() );
+            
+            // test default value accessors in ParameterDefinition
+            Date defaultDateValue = null;
+            try
+            {
+                defaultDateValue = new SimpleDateFormat("MM/dd/yyyy").parse( "06/01/2010" );
+            }
+            catch( ParseException ex )
+            {
+                fail();
+            }
+            aParamDefn.addDefaultValue( defaultDateValue );
+            int defaultValuePos = initialDefaultValueCount + 1;
+            assertEquals( defaultValuePos, aParamDefn.getDefaultValueCount() );
+            assertEquals( defaultDateValue, aParamDefn.getDefaultValues().getValues().get( defaultValuePos-1 ));
+            
+            // test default value accessors in InputElementAttributes
+            Integer newDefaultValue2 = Integer.valueOf( 3 );
+            inputElementAttrs.addDefaultValue( newDefaultValue2 );
+            defaultValuePos++;
+            assertEquals( defaultValuePos, inputElementAttrs.getDefaultValueCount() );
+            assertEquals( newDefaultValue2, inputElementAttrs.getDefaultValues().getValues().get( defaultValuePos-1 ));
+            
+            // test including CustomData in default StaticValues
+            CustomData customData = DesignFactory.eINSTANCE.createCustomData();
+            customData.setProviderId( "org.eclipse.birt.report.model.adapter.oda" );
+            customData.setValue( defaultDateValue );
+            inputElementAttrs.addDefaultValue( customData );
+            defaultValuePos++;
+            assertEquals( defaultValuePos, inputElementAttrs.getDefaultValueCount() );
+            assertEquals( customData, inputElementAttrs.getDefaultValues().getValues().get( defaultValuePos-1 ));
+            assertEquals( defaultDateValue, customData.getValue() );
+            assertEquals( defaultDateValue.toString(), customData.getDisplayValue() );
+
+            String displayValue = "June 1, 2010";
+            customData.setDisplayValue( displayValue );
+            assertEquals( displayValue, customData.getDisplayValue() );
+        }
+        
+        // test saving updated design session with the filter expression and additional default values
+        File tempOut = getTempOutFile();
+        saveDesignSession( design, tempOut );
+
+        File goldenOutFile = new File( 
+                getSampleDbTestMigrateDefaultValueOutFilePath() );
+        assertTrue( compareFileContent( goldenOutFile, tempOut ) );    
+        
+        // test backward compatibility of deprecated method, which reset and overrides all exisitng values
+        for( ParameterDefinition aParamDefn : dataSetParams.getParameterDefinitions() )
+        {
+            InputElementAttributes inputElementAttrs = aParamDefn.getInputAttributes().getElementAttributes();
+            
+            assertEquals( 7, inputElementAttrs.getDefaultValueCount() );
+            
+            String newDefaultValue = "new default value";
+            inputElementAttrs.setDefaultScalarValue( newDefaultValue );
+            assertEquals( 1, inputElementAttrs.getDefaultValueCount() );
+            assertEquals( newDefaultValue, inputElementAttrs.getDefaultValues().getValues().get( 0 ));
+        }
+    }
+    
+    public void testAddResourceKeys()
+    {
+        File goldenFile = new File( getSampleDbTestFilePath() );
+        OdaDesignSession design = loadOdaDesignSession( goldenFile );
+        DataSourceDesign dataSourceDesign = design.getResponseDataSourceDesign();
+
+        String displayName = dataSourceDesign.getDisplayName();
+        
+        // adding resource key
+        String displayNameKey = "sourceDesignKey";
+        dataSourceDesign.setDisplayNameKey( displayNameKey );
+        assertEquals( displayNameKey, dataSourceDesign.getDisplayNameKey() );
+        // test that the display name remains the same after having added resource key
+        assertEquals( displayName, dataSourceDesign.getDisplayName() );
+        
+        // add default resource string
+        displayName = "newDefault";
+        dataSourceDesign.setDisplayName( displayName );
+        assertEquals( displayName, dataSourceDesign.getDisplayName() );
+        // test that the key remains the same after having added resource default
+        assertEquals( displayNameKey, dataSourceDesign.getDisplayNameKey() );
+
+        // change resource key
+        displayNameKey = " sourceDesignKey2 ";
+        dataSourceDesign.setDisplayNameKey( displayNameKey );
+        assertEquals( displayNameKey.trim(), dataSourceDesign.getDisplayNameKey() );
+        // test that the display name remains the same after having changed resource key
+        assertEquals( displayName, dataSourceDesign.getDisplayName() );
+        
+        // change default resource string
+        displayName = " %new Default 2 ";
+        dataSourceDesign.setDisplayName( displayName );
+        assertEquals( displayName, dataSourceDesign.getDisplayName() );
+        // test that the key remains the same after having added resource default
+        assertEquals( displayNameKey.trim(), dataSourceDesign.getDisplayNameKey() );
+        
+        // change default resource string to contain literal key prefix
+        displayName = "%new Default 2 ";
+        dataSourceDesign.setDisplayName( displayName );
+        assertEquals( displayName, dataSourceDesign.getDisplayName() );
+        // test that the key remains the same after having added resource default
+        assertEquals( displayNameKey.trim(), dataSourceDesign.getDisplayNameKey() );
+        
+        // test the added resource keys are valid and can be saved
+        try
+        {
+            DesignUtil.validateObject( dataSourceDesign );
+        }
+        catch( IllegalStateException ex )
+        {
+            fail();
+        }  
+        
+        // test saving updated design session with the resource keys
+        File tempOut = getTempOutFile();
+        saveDesignSession( design, tempOut );
+
+        // reset resource key
+        displayNameKey = null;
+        dataSourceDesign.setDisplayNameKey( displayNameKey );
+        assertEquals( displayNameKey, dataSourceDesign.getDisplayNameKey() );
+        // test that the display name remains the same after having changed resource key
+        assertEquals( displayName, dataSourceDesign.getDisplayName() );
+        
+        displayName = null;
+        dataSourceDesign.setDisplayName( displayName );
+        assertEquals( displayName, dataSourceDesign.getDisplayName() );
+        // test that the display name remains the same after having changed resource key
+        assertEquals( displayNameKey, dataSourceDesign.getDisplayNameKey() );
+        
+        // test invalid resource key
+        boolean hasException = false;
+        try
+        {
+            dataSourceDesign.setDisplayNameKey( " invalid key " );  // contains embedded white space
+        }
+        catch( IllegalArgumentException ex )
+        {
+            hasException = true;
+        }
+        assertTrue( hasException );
+    }
+   
+    public void testAddResourceFileName()
+    {
+        File goldenFile = new File( getSampleDbTestFilePath() );
+        OdaDesignSession design = loadOdaDesignSession( goldenFile );
+        DataSourceDesign dataSourceDesign = design.getResponseDataSourceDesign();
+
+        String resourceFileName = "dummyFile.properties";
+        dataSourceDesign.setResourceFile( resourceFileName );
+        assertEquals( resourceFileName, dataSourceDesign.getResourceFile() );
+        
+        // test invalid resource file name
+        boolean hasException = false;
+        try
+        {
+            dataSourceDesign.setResourceFile( "dummyFile" );    // missing expected suffix
+        }
+        catch( IllegalArgumentException ex )
+        {
+            hasException = true;
+        }
+        assertTrue( hasException );        
+    }
+    
+    public void testNullDataSourceDesignRef()
+    {
+        File goldenFile = new File( getSampleDbTestFilePath() );
+        OdaDesignSession design = loadOdaDesignSession( goldenFile );
+        DataSetDesign dataSetDesign = design.getResponseDataSetDesign();
+
+        dataSetDesign.setDataSourceDesign( null );
+        
+        // test invalid null DataSourceDesign reference
+        DesignSessionResponse designResponse = design.getResponse();
+        boolean hasException = false;
+        try
+        {
+            DesignUtil.validateObject( designResponse );
+        }
+        catch( IllegalStateException ex )
+        {
+            hasException = true;
+        }
+        assertTrue( hasException );
+        
+        // test valid null DataSourceDesign reference in DynamicValuesQuery
+        design = loadOdaDesignSession( goldenFile );    // reload original content
+        dataSetDesign = design.getResponseDataSetDesign();
+        DataSetParameters dataSetParams = dataSetDesign.getParameters();
+        for( ParameterDefinition aParamDefn : dataSetParams.getParameterDefinitions() )
+        {           
+            DataSetDesign nestedDataSetDesign = (DataSetDesign) EcoreUtil.copy( dataSetDesign );
+            nestedDataSetDesign.setDataSourceDesign( null );    // set nested data set to reference a null data source
+
+            DynamicValuesQuery dynamicQuery = DesignFactory.eINSTANCE.createDynamicValuesQuery();
+            dynamicQuery.setDataSetDesign( nestedDataSetDesign );
+            dynamicQuery.setValueColumn( "1" ); //$NON-NLS-1$
+
+            InputElementAttributes inputElementAttrs = aParamDefn.getInputAttributes().getElementAttributes();
+            inputElementAttrs.setDynamicValueChoices( dynamicQuery );           
+        }
+        // test the null reference in this case is valid 
+        designResponse = design.getResponse();
+        try
+        {
+            DesignUtil.validateObject( designResponse );
+        }
+        catch( IllegalStateException ex )
+        {
+            fail();     // not expecting a validation error
+        }  
+    }
+   
+    private void saveDesignSession( OdaDesignSession design, File tempOut )
+    {
+        try
+        {
+            DesignUtil.saveOdaDesignSession( design, tempOut );
+        }
+        catch( Exception ex )
+        {
+            fail();
+        }
+    }
+    
+    private boolean compareFileContent( File file1, File file2 )
+    {
+        boolean match = true;
+        BufferedReader file1BufReader = null;
+        BufferedReader file2BufReader = null;
+        try
+        {
+            file1BufReader = new BufferedReader( new FileReader( file1 ) ); 
+            file2BufReader = new BufferedReader( new FileReader( file2 ) );
+        }
+        catch( FileNotFoundException ex )
+        {
+            match = false;
+            ex.printStackTrace();
+        } 
+        
+        try
+        {
+            String file1Line, file2Line;
+            while( match && (file1Line = file1BufReader.readLine() ) != null )
+            {
+                file2Line = file2BufReader.readLine();
+                match = file1Line.equals( file2Line );
+            }
+        }
+        catch( IOException ex )
+        {
+            match = false;
+            ex.printStackTrace();
+        }
+
+        try
+        {
+            file1BufReader.close();
+            file2BufReader.close();
+        }
+        catch( IOException ex )
+        {
+            ex.printStackTrace();
+        }
+        
+        return match;
+    }
+    
+    private File getTempOutFile()
+    {
+        if( m_tempOutFile == null )
+            m_tempOutFile = new File( getTempOutFilePath() );
+        return m_tempOutFile;
+    }
+    
+    private void cleanupFile( File file )
+    {
+        if( file != null && file.exists() )
+            file.delete();
+    }
+    
+}
+
diff --git a/tests/org.eclipse.datatools.connectivity.oda.design.tests/src/org/eclipse/datatools/connectivity/oda/design/tests/TestUtil.java b/tests/org.eclipse.datatools.connectivity.oda.design.tests/src/org/eclipse/datatools/connectivity/oda/design/tests/TestUtil.java
new file mode 100644
index 0000000..7815558
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.design.tests/src/org/eclipse/datatools/connectivity/oda/design/tests/TestUtil.java
@@ -0,0 +1,34 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.design.tests;
+
+import java.io.IOException;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Platform;
+import org.osgi.framework.Bundle;
+
+public class TestUtil
+{
+
+    static String getPluginTestFilePath()
+        throws IOException
+    {       
+        Bundle bundle = Platform.getBundle( TestUtil.class.getPackage().getName() );
+        String testFilePath = FileLocator.toFileURL( bundle.getEntry( "/testFiles" ) ).getFile();
+        return testFilePath;
+    }
+    
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.design.tests/testFiles/golden/BirtSampleResourceSession.xml b/tests/org.eclipse.datatools.connectivity.oda.design.tests/testFiles/golden/BirtSampleResourceSession.xml
new file mode 100644
index 0000000..53ababc
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.design.tests/testFiles/golden/BirtSampleResourceSession.xml
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="ASCII"?>
+<design:odaDesignSession xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:design="http://www.eclipse.org/datatools/connectivity/oda/design" xsi:schemaLocation="http://www.eclipse.org/datatools/connectivity/oda/design java://org.eclipse.datatools.connectivity.oda.design.DesignPackage">
+  <design:request>
+    <design:dataAccessDesign>
+      <design:dataSetDesign>
+        <design:name>sampledb Data Set</design:name>
+        <design:odaExtensionDataSetId>org.eclipse.birt.report.data.oda.jdbc.JdbcSelectDataSet</design:odaExtensionDataSetId>
+        <design:dataSourceDesign>
+          <design:name>sampledb Data Source</design:name>
+          <design:odaExtensionId>org.eclipse.birt.report.data.oda.jdbc</design:odaExtensionId>
+          <design:publicProperties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaDriverClass</design:name>
+                <design:value>org.eclipse.birt.report.data.oda.sampledb.Driver</design:value>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaURL</design:name>
+                <design:value>jdbc:classicmodels:sampledb</design:value>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaUser</design:name>
+                <design:value>ClassicModels</design:value>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaPassword</design:name>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaJndiName</design:name>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>OdaConnProfileName</design:name>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>OdaConnProfileStorePath</design:name>
+              </design:nameValue>
+            </design:properties>
+          </design:publicProperties>
+          <design:hostResourceIdentifiers>
+            <design:applResourceBaseURIString>http://www.eclipse.org/datatools/connectivity/oda/design</design:applResourceBaseURIString>
+            <design:designResourceBaseURIString>http://www.eclipse.org/datatools/connectivity/oda/design</design:designResourceBaseURIString>
+          </design:hostResourceIdentifiers>
+        </design:dataSourceDesign>
+        <design:query>
+          <design:queryText>select city
+from CLASSICMODELS.OFFICES
+where officecode like ?</design:queryText>
+        </design:query>
+        <design:resultSets>
+          <design:resultSetDefinitions>
+            <design:resultSetColumns>
+              <design:resultColumnDefinitions>
+                <design:attributes>
+                  <design:identifier>
+                    <design:name>CITY</design:name>
+                    <design:position>1</design:position>
+                  </design:identifier>
+                  <design:nativeDataTypeCode>12</design:nativeDataTypeCode>
+                  <design:uiHints>
+                    <design:displayName>CITY</design:displayName>
+                  </design:uiHints>
+                </design:attributes>
+              </design:resultColumnDefinitions>
+            </design:resultSetColumns>
+          </design:resultSetDefinitions>
+        </design:resultSets>
+        <design:parameters>
+          <design:parameterDefinitions>
+            <design:inOutMode>In</design:inOutMode>
+            <design:attributes>
+              <design:identifier>
+                <design:name></design:name>
+                <design:position>1</design:position>
+              </design:identifier>
+              <design:nativeDataTypeCode>12</design:nativeDataTypeCode>
+              <design:nullability>Nullable</design:nullability>
+              <design:uiHints/>
+            </design:attributes>
+            <design:inputAttributes>
+              <design:elementAttributes>
+                <design:optional>true</design:optional>
+                <design:masksValue>false</design:masksValue>
+                <design:uiHints>
+                  <design:promptStyle>SelectableListWithTextField</design:promptStyle>
+                </design:uiHints>
+              </design:elementAttributes>
+            </design:inputAttributes>
+          </design:parameterDefinitions>
+        </design:parameters>
+      </design:dataSetDesign>
+    </design:dataAccessDesign>
+    <design:sessionLocale>
+      <design:language>en</design:language>
+      <design:country>US</design:country>
+    </design:sessionLocale>
+  </design:request>
+  <design:response>
+    <design:sessionStatus>Ok</design:sessionStatus>
+    <design:dataAccessDesign>
+      <design:dataSetDesign>
+        <design:name>sampledb Data Set</design:name>
+        <design:odaExtensionDataSetId>org.eclipse.birt.report.data.oda.jdbc.JdbcSelectDataSet</design:odaExtensionDataSetId>
+        <design:dataSourceDesign>
+          <design:name>sampledb Data Source</design:name>
+          <design:odaExtensionId>org.eclipse.birt.report.data.oda.jdbc</design:odaExtensionId>
+          <design:publicProperties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaDriverClass</design:name>
+                <design:value>org.eclipse.birt.report.data.oda.sampledb.Driver</design:value>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaURL</design:name>
+                <design:value>jdbc:classicmodels:sampledb</design:value>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaUser</design:name>
+                <design:value>ClassicModels</design:value>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaPassword</design:name>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaJndiName</design:name>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>OdaConnProfileName</design:name>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>OdaConnProfileStorePath</design:name>
+              </design:nameValue>
+            </design:properties>
+          </design:publicProperties>
+        </design:dataSourceDesign>
+        <design:query>
+          <design:queryText>select city
+from CLASSICMODELS.OFFICES
+where officecode like ?</design:queryText>
+        </design:query>
+        <design:resultSets>
+          <design:resultSetDefinitions>
+            <design:resultSetColumns>
+              <design:resultColumnDefinitions>
+                <design:attributes>
+                  <design:identifier>
+                    <design:name>CITY</design:name>
+                    <design:position>1</design:position>
+                  </design:identifier>
+                  <design:nativeDataTypeCode>12</design:nativeDataTypeCode>
+                  <design:uiHints>
+                    <design:displayName>CITY</design:displayName>
+                  </design:uiHints>
+                </design:attributes>
+              </design:resultColumnDefinitions>
+            </design:resultSetColumns>
+          </design:resultSetDefinitions>
+        </design:resultSets>
+        <design:parameters>
+          <design:parameterDefinitions>
+            <design:inOutMode>In</design:inOutMode>
+            <design:attributes>
+              <design:identifier>
+                <design:name></design:name>
+                <design:position>1</design:position>
+              </design:identifier>
+              <design:nativeDataTypeCode>12</design:nativeDataTypeCode>
+              <design:nullability>Nullable</design:nullability>
+              <design:uiHints/>
+            </design:attributes>
+            <design:inputAttributes>
+              <design:elementAttributes>
+                <design:optional>true</design:optional>
+                <design:masksValue>false</design:masksValue>
+                <design:uiHints>
+                  <design:promptStyle>SelectableListWithTextField</design:promptStyle>
+                </design:uiHints>
+              </design:elementAttributes>
+            </design:inputAttributes>
+          </design:parameterDefinitions>
+        </design:parameters>
+      </design:dataSetDesign>
+    </design:dataAccessDesign>
+  </design:response>
+</design:odaDesignSession>
\ No newline at end of file
diff --git a/tests/org.eclipse.datatools.connectivity.oda.design.tests/testFiles/golden/jdbcBirtSampleSession.xml b/tests/org.eclipse.datatools.connectivity.oda.design.tests/testFiles/golden/jdbcBirtSampleSession.xml
new file mode 100644
index 0000000..2d1ccc1
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.design.tests/testFiles/golden/jdbcBirtSampleSession.xml
@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="ASCII"?>
+<design:odaDesignSession xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:design="http://www.eclipse.org/datatools/connectivity/oda/design" xsi:schemaLocation="http://www.eclipse.org/datatools/connectivity/oda/design java://org.eclipse.datatools.connectivity.oda.design.DesignPackage">
+  <design:request>
+    <design:dataAccessDesign>
+      <design:dataSetDesign>
+        <design:name>sampledb Data Set</design:name>
+        <design:odaExtensionDataSetId>org.eclipse.birt.report.data.oda.jdbc.JdbcSelectDataSet</design:odaExtensionDataSetId>
+        <design:dataSourceDesign>
+          <design:name>sampledb Data Source</design:name>
+          <design:odaExtensionId>org.eclipse.birt.report.data.oda.jdbc</design:odaExtensionId>
+          <design:publicProperties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaDriverClass</design:name>
+                <design:value>org.eclipse.birt.report.data.oda.sampledb.Driver</design:value>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaURL</design:name>
+                <design:value>jdbc:classicmodels:sampledb</design:value>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaUser</design:name>
+                <design:value>ClassicModels</design:value>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaPassword</design:name>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaJndiName</design:name>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>OdaConnProfileName</design:name>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>OdaConnProfileStorePath</design:name>
+              </design:nameValue>
+            </design:properties>
+          </design:publicProperties>
+        </design:dataSourceDesign>
+        <design:query>
+          <design:queryText>select city
+from CLASSICMODELS.OFFICES
+where officecode like ?</design:queryText>
+        </design:query>
+        <design:resultSets>
+          <design:resultSetDefinitions>
+            <design:resultSetColumns>
+              <design:resultColumnDefinitions>
+                <design:attributes>
+                  <design:identifier>
+                    <design:name>CITY</design:name>
+                    <design:position>1</design:position>
+                  </design:identifier>
+                  <design:nativeDataTypeCode>12</design:nativeDataTypeCode>
+                  <design:uiHints>
+                    <design:displayName>CITY</design:displayName>
+                  </design:uiHints>
+                </design:attributes>
+              </design:resultColumnDefinitions>
+            </design:resultSetColumns>
+          </design:resultSetDefinitions>
+        </design:resultSets>
+        <design:parameters>
+          <design:parameterDefinitions>
+            <design:inOutMode>In</design:inOutMode>
+            <design:attributes>
+              <design:identifier>
+                <design:name></design:name>
+                <design:position>1</design:position>
+              </design:identifier>
+              <design:nativeDataTypeCode>12</design:nativeDataTypeCode>
+              <design:nullability>Nullable</design:nullability>
+              <design:uiHints/>
+            </design:attributes>
+            <design:inputAttributes>
+              <design:elementAttributes>
+                <design:optional>true</design:optional>
+                <design:masksValue>false</design:masksValue>
+                <design:uiHints>
+                  <design:promptStyle>SelectableListWithTextField</design:promptStyle>
+                </design:uiHints>
+              </design:elementAttributes>
+            </design:inputAttributes>
+          </design:parameterDefinitions>
+        </design:parameters>
+      </design:dataSetDesign>
+    </design:dataAccessDesign>
+    <design:sessionLocale>
+      <design:language>en</design:language>
+      <design:country>US</design:country>
+    </design:sessionLocale>
+  </design:request>
+  <design:response>
+    <design:sessionStatus>Ok</design:sessionStatus>
+    <design:dataAccessDesign>
+      <design:dataSetDesign>
+        <design:name>sampledb Data Set</design:name>
+        <design:odaExtensionDataSetId>org.eclipse.birt.report.data.oda.jdbc.JdbcSelectDataSet</design:odaExtensionDataSetId>
+        <design:dataSourceDesign>
+          <design:name>sampledb Data Source</design:name>
+          <design:odaExtensionId>org.eclipse.birt.report.data.oda.jdbc</design:odaExtensionId>
+          <design:publicProperties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaDriverClass</design:name>
+                <design:value>org.eclipse.birt.report.data.oda.sampledb.Driver</design:value>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaURL</design:name>
+                <design:value>jdbc:classicmodels:sampledb</design:value>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaUser</design:name>
+                <design:value>ClassicModels</design:value>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaPassword</design:name>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaJndiName</design:name>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>OdaConnProfileName</design:name>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>OdaConnProfileStorePath</design:name>
+              </design:nameValue>
+            </design:properties>
+          </design:publicProperties>
+        </design:dataSourceDesign>
+        <design:query>
+          <design:queryText>select city
+from CLASSICMODELS.OFFICES
+where officecode like ?</design:queryText>
+        </design:query>
+        <design:resultSets>
+          <design:resultSetDefinitions>
+            <design:resultSetColumns>
+              <design:resultColumnDefinitions>
+                <design:attributes>
+                  <design:identifier>
+                    <design:name>CITY</design:name>
+                    <design:position>1</design:position>
+                  </design:identifier>
+                  <design:nativeDataTypeCode>12</design:nativeDataTypeCode>
+                  <design:uiHints>
+                    <design:displayName>CITY</design:displayName>
+                  </design:uiHints>
+                </design:attributes>
+              </design:resultColumnDefinitions>
+            </design:resultSetColumns>
+          </design:resultSetDefinitions>
+        </design:resultSets>
+        <design:parameters>
+          <design:parameterDefinitions>
+            <design:inOutMode>In</design:inOutMode>
+            <design:attributes>
+              <design:identifier>
+                <design:name></design:name>
+                <design:position>1</design:position>
+              </design:identifier>
+              <design:nativeDataTypeCode>12</design:nativeDataTypeCode>
+              <design:nullability>Nullable</design:nullability>
+              <design:uiHints/>
+            </design:attributes>
+            <design:inputAttributes>
+              <design:elementAttributes>
+                <design:optional>true</design:optional>
+                <design:masksValue>false</design:masksValue>
+                <design:uiHints>
+                  <design:promptStyle>SelectableListWithTextField</design:promptStyle>
+                </design:uiHints>
+              </design:elementAttributes>
+            </design:inputAttributes>
+          </design:parameterDefinitions>
+        </design:parameters>
+      </design:dataSetDesign>
+    </design:dataAccessDesign>
+  </design:response>
+</design:odaDesignSession>
\ No newline at end of file
diff --git a/tests/org.eclipse.datatools.connectivity.oda.design.tests/testFiles/golden/jdbcBirtSampleSession_multDefValues.xml b/tests/org.eclipse.datatools.connectivity.oda.design.tests/testFiles/golden/jdbcBirtSampleSession_multDefValues.xml
new file mode 100644
index 0000000..1a7a7b5
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.design.tests/testFiles/golden/jdbcBirtSampleSession_multDefValues.xml
@@ -0,0 +1,210 @@
+<?xml version="1.0" encoding="ASCII"?>
+<design:odaDesignSession xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:design="http://www.eclipse.org/datatools/connectivity/oda/design" xsi:schemaLocation="http://www.eclipse.org/datatools/connectivity/oda/design java://org.eclipse.datatools.connectivity.oda.design.DesignPackage">
+  <design:request>
+    <design:dataAccessDesign>
+      <design:dataSetDesign>
+        <design:name>sampledb Data Set</design:name>
+        <design:odaExtensionDataSetId>org.eclipse.birt.report.data.oda.jdbc.JdbcSelectDataSet</design:odaExtensionDataSetId>
+        <design:dataSourceDesign>
+          <design:name>sampledb Data Source</design:name>
+          <design:odaExtensionId>org.eclipse.birt.report.data.oda.jdbc</design:odaExtensionId>
+          <design:publicProperties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaDriverClass</design:name>
+                <design:value>org.eclipse.birt.report.data.oda.sampledb.Driver</design:value>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaURL</design:name>
+                <design:value>jdbc:classicmodels:sampledb</design:value>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaUser</design:name>
+                <design:value>ClassicModels</design:value>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaPassword</design:name>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaJndiName</design:name>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>OdaConnProfileName</design:name>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>OdaConnProfileStorePath</design:name>
+              </design:nameValue>
+            </design:properties>
+          </design:publicProperties>
+        </design:dataSourceDesign>
+        <design:query>
+          <design:queryText>select city
+from CLASSICMODELS.OFFICES
+where officecode like ?</design:queryText>
+        </design:query>
+        <design:resultSets>
+          <design:resultSetDefinitions>
+            <design:resultSetColumns>
+              <design:resultColumnDefinitions>
+                <design:attributes>
+                  <design:identifier>
+                    <design:name>CITY</design:name>
+                    <design:position>1</design:position>
+                  </design:identifier>
+                  <design:nativeDataTypeCode>12</design:nativeDataTypeCode>
+                  <design:uiHints>
+                    <design:displayName>CITY</design:displayName>
+                  </design:uiHints>
+                </design:attributes>
+              </design:resultColumnDefinitions>
+            </design:resultSetColumns>
+          </design:resultSetDefinitions>
+        </design:resultSets>
+        <design:parameters>
+          <design:parameterDefinitions>
+            <design:inOutMode>In</design:inOutMode>
+            <design:attributes>
+              <design:identifier>
+                <design:name></design:name>
+                <design:position>1</design:position>
+              </design:identifier>
+              <design:nativeDataTypeCode>12</design:nativeDataTypeCode>
+              <design:nullability>Nullable</design:nullability>
+              <design:uiHints/>
+            </design:attributes>
+            <design:inputAttributes>
+              <design:elementAttributes>
+                <design:optional>true</design:optional>
+                <design:masksValue>false</design:masksValue>
+                <design:uiHints>
+                  <design:promptStyle>SelectableListWithTextField</design:promptStyle>
+                </design:uiHints>
+              </design:elementAttributes>
+            </design:inputAttributes>
+          </design:parameterDefinitions>
+        </design:parameters>
+      </design:dataSetDesign>
+    </design:dataAccessDesign>
+    <design:sessionLocale>
+      <design:language>en</design:language>
+      <design:country>US</design:country>
+    </design:sessionLocale>
+  </design:request>
+  <design:response>
+    <design:sessionStatus>Ok</design:sessionStatus>
+    <design:dataAccessDesign>
+      <design:dataSetDesign>
+        <design:name>sampledb Data Set</design:name>
+        <design:odaExtensionDataSetId>org.eclipse.birt.report.data.oda.jdbc.JdbcSelectDataSet</design:odaExtensionDataSetId>
+        <design:dataSourceDesign>
+          <design:name>sampledb Data Source</design:name>
+          <design:odaExtensionId>org.eclipse.birt.report.data.oda.jdbc</design:odaExtensionId>
+          <design:publicProperties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaDriverClass</design:name>
+                <design:value>org.eclipse.birt.report.data.oda.sampledb.Driver</design:value>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaURL</design:name>
+                <design:value>jdbc:classicmodels:sampledb</design:value>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaUser</design:name>
+                <design:value>ClassicModels</design:value>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaPassword</design:name>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaJndiName</design:name>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>OdaConnProfileName</design:name>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>OdaConnProfileStorePath</design:name>
+              </design:nameValue>
+            </design:properties>
+          </design:publicProperties>
+        </design:dataSourceDesign>
+        <design:query>
+          <design:queryText>select city
+from CLASSICMODELS.OFFICES
+where officecode like ?</design:queryText>
+        </design:query>
+        <design:resultSets>
+          <design:resultSetDefinitions>
+            <design:resultSetColumns>
+              <design:resultColumnDefinitions>
+                <design:attributes>
+                  <design:identifier>
+                    <design:name>CITY</design:name>
+                    <design:position>1</design:position>
+                  </design:identifier>
+                  <design:nativeDataTypeCode>12</design:nativeDataTypeCode>
+                  <design:uiHints>
+                    <design:displayName>CITY</design:displayName>
+                  </design:uiHints>
+                </design:attributes>
+              </design:resultColumnDefinitions>
+            </design:resultSetColumns>
+          </design:resultSetDefinitions>
+        </design:resultSets>
+        <design:parameters>
+          <design:parameterDefinitions>
+            <design:inOutMode>In</design:inOutMode>
+            <design:attributes>
+              <design:identifier>
+                <design:name></design:name>
+                <design:position>1</design:position>
+              </design:identifier>
+              <design:nativeDataTypeCode>12</design:nativeDataTypeCode>
+              <design:nullability>Nullable</design:nullability>
+              <design:uiHints/>
+            </design:attributes>
+            <design:inputAttributes>
+              <design:elementAttributes>
+                <design:defaultValues>
+                  <design:values>my default value</design:values>
+                  <design:values>Tue Jun 01 00:00:00 PDT 2010</design:values>
+                  <design:values>3</design:values>
+                  <design:values>CustomData value: Tue Jun 01 00:00:00 PDT 2010, displayValue: June 1, 2010</design:values>
+                </design:defaultValues>
+                <design:optional>true</design:optional>
+                <design:masksValue>false</design:masksValue>
+                <design:uiHints>
+                  <design:promptStyle>SelectableListWithTextField</design:promptStyle>
+                </design:uiHints>
+              </design:elementAttributes>
+            </design:inputAttributes>
+          </design:parameterDefinitions>
+        </design:parameters>
+      </design:dataSetDesign>
+    </design:dataAccessDesign>
+  </design:response>
+</design:odaDesignSession>
\ No newline at end of file
diff --git a/tests/org.eclipse.datatools.connectivity.oda.design.tests/testFiles/golden/jdbcBirtSampleSession_multDefValues_out.xml b/tests/org.eclipse.datatools.connectivity.oda.design.tests/testFiles/golden/jdbcBirtSampleSession_multDefValues_out.xml
new file mode 100644
index 0000000..748061d
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.design.tests/testFiles/golden/jdbcBirtSampleSession_multDefValues_out.xml
@@ -0,0 +1,213 @@
+<?xml version="1.0" encoding="ASCII"?>
+<design:odaDesignSession xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:design="http://www.eclipse.org/datatools/connectivity/oda/design" xsi:schemaLocation="http://www.eclipse.org/datatools/connectivity/oda/design java://org.eclipse.datatools.connectivity.oda.design.DesignPackage">
+  <design:request>
+    <design:dataAccessDesign>
+      <design:dataSetDesign>
+        <design:name>sampledb Data Set</design:name>
+        <design:odaExtensionDataSetId>org.eclipse.birt.report.data.oda.jdbc.JdbcSelectDataSet</design:odaExtensionDataSetId>
+        <design:dataSourceDesign>
+          <design:name>sampledb Data Source</design:name>
+          <design:odaExtensionId>org.eclipse.birt.report.data.oda.jdbc</design:odaExtensionId>
+          <design:publicProperties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaDriverClass</design:name>
+                <design:value>org.eclipse.birt.report.data.oda.sampledb.Driver</design:value>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaURL</design:name>
+                <design:value>jdbc:classicmodels:sampledb</design:value>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaUser</design:name>
+                <design:value>ClassicModels</design:value>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaPassword</design:name>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaJndiName</design:name>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>OdaConnProfileName</design:name>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>OdaConnProfileStorePath</design:name>
+              </design:nameValue>
+            </design:properties>
+          </design:publicProperties>
+        </design:dataSourceDesign>
+        <design:query>
+          <design:queryText>select city
+from CLASSICMODELS.OFFICES
+where officecode like ?</design:queryText>
+        </design:query>
+        <design:resultSets>
+          <design:resultSetDefinitions>
+            <design:resultSetColumns>
+              <design:resultColumnDefinitions>
+                <design:attributes>
+                  <design:identifier>
+                    <design:name>CITY</design:name>
+                    <design:position>1</design:position>
+                  </design:identifier>
+                  <design:nativeDataTypeCode>12</design:nativeDataTypeCode>
+                  <design:uiHints>
+                    <design:displayName>CITY</design:displayName>
+                  </design:uiHints>
+                </design:attributes>
+              </design:resultColumnDefinitions>
+            </design:resultSetColumns>
+          </design:resultSetDefinitions>
+        </design:resultSets>
+        <design:parameters>
+          <design:parameterDefinitions>
+            <design:inOutMode>In</design:inOutMode>
+            <design:attributes>
+              <design:identifier>
+                <design:name></design:name>
+                <design:position>1</design:position>
+              </design:identifier>
+              <design:nativeDataTypeCode>12</design:nativeDataTypeCode>
+              <design:nullability>Nullable</design:nullability>
+              <design:uiHints/>
+            </design:attributes>
+            <design:inputAttributes>
+              <design:elementAttributes>
+                <design:optional>true</design:optional>
+                <design:masksValue>false</design:masksValue>
+                <design:uiHints>
+                  <design:promptStyle>SelectableListWithTextField</design:promptStyle>
+                </design:uiHints>
+              </design:elementAttributes>
+            </design:inputAttributes>
+          </design:parameterDefinitions>
+        </design:parameters>
+      </design:dataSetDesign>
+    </design:dataAccessDesign>
+    <design:sessionLocale>
+      <design:language>en</design:language>
+      <design:country>US</design:country>
+    </design:sessionLocale>
+  </design:request>
+  <design:response>
+    <design:sessionStatus>Ok</design:sessionStatus>
+    <design:dataAccessDesign>
+      <design:dataSetDesign>
+        <design:name>sampledb Data Set</design:name>
+        <design:odaExtensionDataSetId>org.eclipse.birt.report.data.oda.jdbc.JdbcSelectDataSet</design:odaExtensionDataSetId>
+        <design:dataSourceDesign>
+          <design:name>sampledb Data Source</design:name>
+          <design:odaExtensionId>org.eclipse.birt.report.data.oda.jdbc</design:odaExtensionId>
+          <design:publicProperties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaDriverClass</design:name>
+                <design:value>org.eclipse.birt.report.data.oda.sampledb.Driver</design:value>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaURL</design:name>
+                <design:value>jdbc:classicmodels:sampledb</design:value>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaUser</design:name>
+                <design:value>ClassicModels</design:value>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaPassword</design:name>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>odaJndiName</design:name>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>OdaConnProfileName</design:name>
+              </design:nameValue>
+            </design:properties>
+            <design:properties>
+              <design:nameValue>
+                <design:name>OdaConnProfileStorePath</design:name>
+              </design:nameValue>
+            </design:properties>
+          </design:publicProperties>
+        </design:dataSourceDesign>
+        <design:query>
+          <design:queryText>select city
+from CLASSICMODELS.OFFICES
+where officecode like ?</design:queryText>
+        </design:query>
+        <design:resultSets>
+          <design:resultSetDefinitions>
+            <design:resultSetColumns>
+              <design:resultColumnDefinitions>
+                <design:attributes>
+                  <design:identifier>
+                    <design:name>CITY</design:name>
+                    <design:position>1</design:position>
+                  </design:identifier>
+                  <design:nativeDataTypeCode>12</design:nativeDataTypeCode>
+                  <design:uiHints>
+                    <design:displayName>CITY</design:displayName>
+                  </design:uiHints>
+                </design:attributes>
+              </design:resultColumnDefinitions>
+            </design:resultSetColumns>
+          </design:resultSetDefinitions>
+        </design:resultSets>
+        <design:parameters>
+          <design:parameterDefinitions>
+            <design:inOutMode>In</design:inOutMode>
+            <design:attributes>
+              <design:identifier>
+                <design:name></design:name>
+                <design:position>1</design:position>
+              </design:identifier>
+              <design:nativeDataTypeCode>12</design:nativeDataTypeCode>
+              <design:nullability>Nullable</design:nullability>
+              <design:uiHints/>
+            </design:attributes>
+            <design:inputAttributes>
+              <design:elementAttributes>
+                <design:defaultValues>
+                  <design:values>my default value</design:values>
+                  <design:values>Tue Jun 01 00:00:00 PDT 2010</design:values>
+                  <design:values>3</design:values>
+                  <design:values>CustomData value: Tue Jun 01 00:00:00 PDT 2010, displayValue: June 1, 2010</design:values>
+                  <design:values>Tue Jun 01 00:00:00 PDT 2010</design:values>
+                  <design:values>3</design:values>
+                  <design:values>CustomData value: Tue Jun 01 00:00:00 PDT 2010, displayValue: June 1, 2010</design:values>
+                </design:defaultValues>
+                <design:optional>true</design:optional>
+                <design:masksValue>false</design:masksValue>
+                <design:uiHints>
+                  <design:promptStyle>SelectableListWithTextField</design:promptStyle>
+                </design:uiHints>
+              </design:elementAttributes>
+            </design:inputAttributes>
+          </design:parameterDefinitions>
+        </design:parameters>
+      </design:dataSetDesign>
+    </design:dataAccessDesign>
+  </design:response>
+</design:odaDesignSession>
\ No newline at end of file
diff --git a/tests/org.eclipse.datatools.connectivity.oda.profile.tests/.classpath b/tests/org.eclipse.datatools.connectivity.oda.profile.tests/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.profile.tests/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/tests/org.eclipse.datatools.connectivity.oda.profile.tests/.gitignore b/tests/org.eclipse.datatools.connectivity.oda.profile.tests/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.profile.tests/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/tests/org.eclipse.datatools.connectivity.oda.profile.tests/.project b/tests/org.eclipse.datatools.connectivity.oda.profile.tests/.project
new file mode 100644
index 0000000..e1406be
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.profile.tests/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.oda.profile.tests</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/tests/org.eclipse.datatools.connectivity.oda.profile.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.datatools.connectivity.oda.profile.tests/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..fa47c01
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.profile.tests/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: DTP ODA Profile Tests Suite
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.oda.profile.tests
+Bundle-Version: 3.0.6.200801141
+Bundle-Localization: plugin
+Require-Bundle: org.junit;bundle-version="[3.8.1,4.0.0)",
+ org.eclipse.datatools.connectivity.oda.profile;bundle-version="[3.0.6,4.0.0)",
+ org.eclipse.datatools.connectivity.oda.consumer;bundle-version="[3.0.4,4.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)"
+Bundle-Vendor: Eclipse.org
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/tests/org.eclipse.datatools.connectivity.oda.profile.tests/about.html b/tests/org.eclipse.datatools.connectivity.oda.profile.tests/about.html
new file mode 100644
index 0000000..1b7d275
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.profile.tests/about.html
@@ -0,0 +1,28 @@
+<html>
+<head>
+<title>About This Content</title>
+</head>
+<body>
+<div>
+<h3>About This Content</h3>
+<p>May 2, 2006</p>
+<h3>License</h3>
+<p>The Eclipse Foundation makes available all content in this plug-in
+(&quot;Content&quot;). Unless otherwise indicated below, the Content is
+provided to you under the terms and conditions of the Eclipse Public License
+Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available at <a
+href="http://www.eclipse.org/org/documents/epl-v10.php">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation,
+the Content is being redistributed by another party (&quot;Redistributor&quot;)
+and different terms and conditions may apply to your use of any object code in
+the Content. Check the RedistributorÂ’s license that was provided with the
+Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source
+code in the Content and such source code may be obtained at <a
+href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+<p>&nbsp;</p>
+</div>
+</body>
+</html>
diff --git a/tests/org.eclipse.datatools.connectivity.oda.profile.tests/build.properties b/tests/org.eclipse.datatools.connectivity.oda.profile.tests/build.properties
new file mode 100644
index 0000000..08373bf
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.profile.tests/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+bin.includes = META-INF/,\
+               .,\
+               about.html
diff --git a/tests/org.eclipse.datatools.connectivity.oda.profile.tests/src/org/eclipse/datatools/connectivity/oda/profile/tests/ConnProfilePropProviderTest.java b/tests/org.eclipse.datatools.connectivity.oda.profile.tests/src/org/eclipse/datatools/connectivity/oda/profile/tests/ConnProfilePropProviderTest.java
new file mode 100644
index 0000000..d98ecab
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.profile.tests/src/org/eclipse/datatools/connectivity/oda/profile/tests/ConnProfilePropProviderTest.java
@@ -0,0 +1,256 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.profile.tests;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Properties;
+
+import junit.framework.TestCase;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileMgmt;
+import org.eclipse.datatools.connectivity.oda.IConnection;
+import org.eclipse.datatools.connectivity.oda.IDriver;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.consumer.helper.OdaDriver;
+import org.eclipse.datatools.connectivity.oda.consumer.services.IPropertyProvider;
+import org.eclipse.datatools.connectivity.oda.profile.Constants;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ConnectionProfileProperty;
+
+/**
+ * Plugin Test cases of the ODA Connection Profile's Property Provider Service.
+ */
+public class ConnProfilePropProviderTest extends TestCase
+{
+    private static final String TEST_DRIVER_ID = 
+        "org.eclipse.datatools.connectivity.oda.flatfile";
+    private static final String FlatFileProfileName = 
+        "MyFFProfile1wDesc";
+
+    private IPath m_testStoreLocation = null;
+    private File m_testFileStore;
+    private IDriver m_driver = null;
+    private IConnection m_connection;
+
+    /* (non-Javadoc)
+     * @see junit.framework.TestCase#setUp()
+     */
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+        if( m_testStoreLocation == null )
+            m_testStoreLocation = new Path( TestUtil.getPluginTestDirectory() );
+        m_testFileStore = TestUtil.copyTestStoreFileFromTemplate( 
+                m_testStoreLocation, 
+                ConnectionProfileMgmt.FILENAME );
+
+        m_connection = getDriver().getConnection( null );
+        assertNotNull( m_connection );
+    }
+
+    /* (non-Javadoc)
+     * @see junit.framework.TestCase#tearDown()
+     */
+    protected void tearDown() throws Exception
+    {
+        if ( m_connection.isOpen() )
+            m_connection.close( );
+        m_connection = null;
+
+        ConnectionProfileMgmt.setStorageLocation( null );
+        m_testFileStore.delete();
+        m_testFileStore = null;
+        super.tearDown();
+    }
+    
+    private IDriver getDriver() throws OdaException
+    {
+        if( m_driver == null )
+            m_driver = new OdaDriver( TEST_DRIVER_ID );        
+        return m_driver;
+    }
+    
+    private HashMap getAppContextForCPProviderService()
+    {
+        HashMap connAppContext = new HashMap();
+        connAppContext.put( IPropertyProvider.ODA_CONSUMER_ID, 
+                            Constants.CONN_PROFILE_APPL_ID );
+        return connAppContext;
+    }
+    
+    public final void testGetProfileByProperties() throws OdaException
+    {
+        m_connection.setAppContext( getAppContextForCPProviderService() );
+
+        Properties connProperties = new Properties();
+        connProperties.put( ConnectionProfileProperty.PROFILE_NAME_PROP_KEY, 
+                            FlatFileProfileName );
+        connProperties.put( ConnectionProfileProperty.PROFILE_STORE_FILE_PATH_PROP_KEY, 
+                            m_testFileStore.toString() );
+        
+        // open should succeed to load properties from profile info in properties
+        m_connection.open( connProperties );
+        assertTrue( m_connection.isOpen() );    
+    }
+    
+    public final void testGetProfileInFileObject() throws OdaException
+    {
+        // specify the profile store file object in a property context
+        HashMap connPropsContext = new HashMap();
+        connPropsContext.put( ConnectionProfileProperty.PROFILE_STORE_FILE_PROP_KEY , 
+                                m_testFileStore );
+        
+        HashMap connAppContext = getAppContextForCPProviderService();
+        connAppContext.put( IPropertyProvider.ODA_CONN_PROP_CONTEXT, connPropsContext );
+
+        m_connection.setAppContext( connAppContext );
+
+        Properties connProperties = new Properties();
+        connProperties.put( ConnectionProfileProperty.PROFILE_NAME_PROP_KEY, 
+                            FlatFileProfileName );
+        connProperties.put( ConnectionProfileProperty.PROFILE_STORE_FILE_PATH_PROP_KEY, 
+                            "dummyFilePath" );
+
+        // open should succeed to load properties from profile file object in context
+        m_connection.open( connProperties );
+        assertTrue( m_connection.isOpen() );    
+    }
+    
+    public final void testGetProfileFallbackToFilePath() throws OdaException
+    {
+        // expects to see warnings in log
+        
+        // specify an invalid profile store file object in the property context
+        HashMap connPropsContext = new HashMap();
+        File nonExistFile = new File( "dummy" );
+        connPropsContext.put( ConnectionProfileProperty.PROFILE_STORE_FILE_PROP_KEY , 
+                            nonExistFile );
+        
+        HashMap connAppContext = getAppContextForCPProviderService();
+        connAppContext.put( IPropertyProvider.ODA_CONN_PROP_CONTEXT, connPropsContext );
+
+        m_connection.setAppContext( connAppContext );
+
+        Properties connProperties = new Properties();
+        connProperties.put( ConnectionProfileProperty.PROFILE_NAME_PROP_KEY, 
+                            FlatFileProfileName );
+        // specify a valid file path to fallback on
+        connProperties.put( ConnectionProfileProperty.PROFILE_STORE_FILE_PATH_PROP_KEY, 
+                            m_testFileStore.toString() );
+
+        // open should succeed to load properties from profile file path
+        m_connection.open( connProperties );
+        assertTrue( m_connection.isOpen() );    
+    }
+    
+    public final void testGetProfileFallbackToDefaultStore() throws OdaException
+    {
+        // expects to see warnings in log
+
+        // specify the default store to fallback to
+        ConnectionProfileMgmt.setStorageLocation( m_testStoreLocation );
+        
+        // specify an invalid profile store file object in the property context
+        HashMap connPropsContext = new HashMap();
+        File nonExistFile = new File( "dummy" );
+        connPropsContext.put( ConnectionProfileProperty.PROFILE_STORE_FILE_PROP_KEY , 
+                            nonExistFile );
+        
+        HashMap connAppContext = getAppContextForCPProviderService();
+        connAppContext.put( IPropertyProvider.ODA_CONN_PROP_CONTEXT, connPropsContext );
+
+        m_connection.setAppContext( connAppContext );
+
+        Properties connProperties = new Properties();
+        connProperties.put( ConnectionProfileProperty.PROFILE_NAME_PROP_KEY, 
+                            FlatFileProfileName );
+        // specify an invalid profile store file path in the property context
+        connProperties.put( ConnectionProfileProperty.PROFILE_STORE_FILE_PATH_PROP_KEY, 
+                            "dummyFilePath" );
+
+        // open should succeed to load properties from profile file in default location
+        m_connection.open( connProperties );
+        assertTrue( m_connection.isOpen() );    
+    }
+    
+    public final void testInvalidProfileStore() throws OdaException
+    {
+        // expects to see warnings in log
+
+        // specify an invalid profile store file object in the property context
+        HashMap connPropsContext = new HashMap();
+        File nonExistFile = new File( "dummy" );
+        connPropsContext.put( ConnectionProfileProperty.PROFILE_STORE_FILE_PROP_KEY , 
+                            nonExistFile );
+        
+        HashMap connAppContext = getAppContextForCPProviderService();
+        connAppContext.put( IPropertyProvider.ODA_CONN_PROP_CONTEXT, connPropsContext );
+
+        m_connection.setAppContext( connAppContext );
+
+        Properties connProperties = new Properties();
+        connProperties.put( ConnectionProfileProperty.PROFILE_NAME_PROP_KEY, 
+                            FlatFileProfileName );
+        // specify an invalid profile store file path in the property context
+        connProperties.put( ConnectionProfileProperty.PROFILE_STORE_FILE_PATH_PROP_KEY, 
+                            "dummyFilePath" );
+
+        // open should fail since no valid profile file object or file path is specified
+        // this would fall back to the default profile store file in workspace
+        try
+        {
+            m_connection.open( connProperties );
+        }
+        catch( OdaException ex )
+        {
+            
+        }
+        assertFalse( m_connection.isOpen() );    
+    }
+    
+    public final void testInvalidProfileName() throws OdaException
+    {
+        // expects to see warnings in log
+
+        // specify the profile store file object in a property context
+        HashMap connPropsContext = new HashMap();
+        connPropsContext.put( ConnectionProfileProperty.PROFILE_STORE_FILE_PROP_KEY , 
+                                m_testFileStore );
+        
+        HashMap connAppContext = getAppContextForCPProviderService();
+        connAppContext.put( IPropertyProvider.ODA_CONN_PROP_CONTEXT, connPropsContext );
+
+        m_connection.setAppContext( connAppContext );
+
+        // specify an invalid profile name
+        Properties connProperties = new Properties();
+        connProperties.put( ConnectionProfileProperty.PROFILE_NAME_PROP_KEY, 
+                            "dummyProfileName" );
+
+        // open should fail since no valid profile name is specified
+        try
+        {
+            m_connection.open( connProperties );
+        }
+        catch( OdaException ex )
+        {
+            
+        }
+        assertFalse( m_connection.isOpen() );    
+    }
+
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.profile.tests/src/org/eclipse/datatools/connectivity/oda/profile/tests/ProfileExplorerPluginTest.java b/tests/org.eclipse.datatools.connectivity.oda.profile.tests/src/org/eclipse/datatools/connectivity/oda/profile/tests/ProfileExplorerPluginTest.java
new file mode 100644
index 0000000..13e476c
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.profile.tests/src/org/eclipse/datatools/connectivity/oda/profile/tests/ProfileExplorerPluginTest.java
@@ -0,0 +1,185 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2005, 2008 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.profile.tests;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Properties;
+
+import junit.framework.TestCase;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.internal.ConnectionProfileMgmt;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.profile.OdaProfileExplorer;
+
+/**
+ * Plugin Test cases of the Oda Profile Explorer.
+ */
+public class ProfileExplorerPluginTest extends TestCase
+{
+    private static final String OdaFlatFileId = 
+        "org.eclipse.datatools.connectivity.oda.flatfile";
+    private static final String FlatFileProfileName = 
+        "My Flat File Profile 1";
+    private static final String MixedEntryStoreName = "DtpProfiles_encrpt.dat";
+
+    private OdaProfileExplorer m_profileExplorer = null;
+    private IPath m_testStoreLocation = null;
+ //       "G:/connectivity/plugins/org.eclipse.datatools.connectivity.oda.profile.tests/src";
+    private File m_testFileStore;
+    
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+        if( m_profileExplorer == null )
+            m_profileExplorer = OdaProfileExplorer.getInstance();
+
+        if( m_testStoreLocation == null )
+            m_testStoreLocation = new Path( TestUtil.getPluginTestDirectory() );
+        
+        if ( getName().equals( "testGetProfiles" ) )
+            ConnectionProfileMgmt.setStorageLocation( m_testStoreLocation );
+
+        if ( getName().equals( "testGetProfilesFromFile" ) )
+            m_testFileStore = TestUtil.copyTestStoreFileFromTemplate( 
+                    m_testStoreLocation, 
+                    MixedEntryStoreName );
+        else
+            m_testFileStore = TestUtil.copyTestStoreFileFromTemplate( 
+                    m_testStoreLocation, 
+                    ConnectionProfileMgmt.FILENAME );
+    }
+    
+    protected void tearDown() throws Exception
+    {
+        ConnectionProfileMgmt.setStorageLocation( null );
+        m_testFileStore.delete();
+        m_testFileStore = null;
+        super.tearDown();
+    }
+
+    /*
+     * Test method for 'org.eclipse.datatools.connectivity.oda.profile.tests.OdaProfileExplorer.getProfiles(String)'
+     */
+    public void testGetProfiles() throws Exception
+    {
+        Map profiles = null;
+        try
+        {
+            // use profile store in path specified in setup by ConnectionProfileMgmt.setStorageLocation
+            profiles = m_profileExplorer.getProfileIdentifiersByOdaProviderId( 
+                    OdaFlatFileId, null );  
+        }
+        catch( OdaException e )
+        {
+            fail( e.toString() );
+        }
+
+        assertNotNull( profiles );
+        assertEquals( 1, profiles.size() );
+    }
+
+    /*
+     * Test method for 'org.eclipse.datatools.connectivity.oda.profile.tests.OdaProfileExplorer.getProfiles(String, File)'
+     */
+    public void testGetProfilesFromFile() throws Exception
+    {
+        File storeFilePath = m_testStoreLocation.append( MixedEntryStoreName ).toFile();
+        Map profiles;
+        try
+        {
+            profiles = m_profileExplorer.getProfileIdentifiersByOdaProviderId( 
+                    OdaFlatFileId, storeFilePath );
+        }
+        catch( OdaException e )
+        {
+            e.printStackTrace();
+            throw e;
+        }
+        assertEquals( 2, profiles.size() );
+    }
+
+    /*
+     * Test method for 'org.eclipse.datatools.connectivity.oda.profile.tests.OdaProfileExplorer.getProfileProperties(String)'
+     */
+    public void testGetProfileProperties() throws Exception
+    {       
+        String profileInstId = getFlatFileProfileInstanceId();
+        Properties connProps = m_profileExplorer.getProfileProperties( 
+                profileInstId, m_testFileStore );
+        assertNotNull( connProps );
+        // FlatFile has 5 custom properties
+        assertEquals( 5, connProps.size() );
+    }
+
+    /*
+     * Test method for 'org.eclipse.datatools.connectivity.oda.profile.tests.OdaProfileExplorer.getProfileByName(String)'
+     */
+    public void testGetProfileByName() throws Exception
+    {
+        // test that either approach finds the same profile instance
+        String profileInstId = getFlatFileProfileInstanceId( FlatFileProfileName );
+        IConnectionProfile profile = 
+            m_profileExplorer.getProfileById( profileInstId, m_testFileStore );
+        String profileInstName = profile.getName();
+        IConnectionProfile namedProfile = 
+            m_profileExplorer.getProfileByName( profileInstName, m_testFileStore );
+        assertEquals( profile.getInstanceID(), namedProfile.getInstanceID() );
+    }
+    
+    /*
+     * TODO - move to oda.design.ui.profile.wizards tests
+     */
+/*    public void testGetCustomWizard() throws Exception
+    {
+        String profileInstId = getFlatFileProfileInstanceId();
+        NewDataSourceWizard wizard = m_profileExplorer.getCustomWizard( profileInstId );
+        assertNotNull( wizard );
+    }
+*/
+    
+    private String getFlatFileProfileInstanceId() throws OdaException
+    {
+        return getFlatFileProfileInstanceId( FlatFileProfileName );
+    }
+    
+    private String getFlatFileProfileInstanceId( String profileName ) throws OdaException
+    {
+        Map profiles = m_profileExplorer.getProfileIdentifiersByOdaProviderId( 
+                OdaFlatFileId, m_testFileStore );
+        Collection profileInstanceIds = profiles.keySet();
+        assertNotNull( profileInstanceIds );
+        assertTrue( profileInstanceIds.size() > 0 );
+
+        Iterator iter = profileInstanceIds.iterator();
+        while( iter.hasNext() )
+        {
+            String instanceId = (String) iter.next();
+            if( OdaFlatFileId.equals( m_profileExplorer.getProfileById( 
+                    instanceId, m_testFileStore ).getProviderId() ))
+            {     
+                assertEquals( profileName, (String) profiles.get( instanceId ) );
+                return instanceId;
+            }
+        }
+        fail( "No Flat File profiles found" );
+        return null;
+    }
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.profile.tests/src/org/eclipse/datatools/connectivity/oda/profile/tests/TestUtil.java b/tests/org.eclipse.datatools.connectivity.oda.profile.tests/src/org/eclipse/datatools/connectivity/oda/profile/tests/TestUtil.java
new file mode 100644
index 0000000..fdc0ce8
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.profile.tests/src/org/eclipse/datatools/connectivity/oda/profile/tests/TestUtil.java
@@ -0,0 +1,67 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.profile.tests;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.nio.channels.FileChannel;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Platform;
+import org.osgi.framework.Bundle;
+
+/**
+ * Common test utility methods used in test package.
+ */
+public class TestUtil
+{
+    
+    static String getPluginTestDirectory() throws Exception
+    {
+        Bundle bundle = Platform.getBundle( TestUtil.class.getPackage().getName() );
+        URL url = bundle.getEntry( "src" );
+        return FileLocator.toFileURL( url ).getPath();
+    }
+
+    static File copyTestStoreFileFromTemplate( IPath storeLocation, String storeFilename )
+        throws IOException
+    {
+        // getting profile has the side effect of adding to 
+        // the profiles cache, which updates the profiles store.
+        // So use a temporary store file copied from a template
+        // for use in tests
+        File profileStoreTemplate = storeLocation.append( 
+                "tmplt_" + storeFilename ).toFile();
+        if ( ! profileStoreTemplate.exists() )
+            throw new IOException( profileStoreTemplate.getPath() + " template store file does not exist." );
+
+        File testFile = storeLocation.append( storeFilename ).toFile();
+        if ( testFile.exists() )
+            testFile.delete();
+        testFile.createNewFile();
+        
+        FileChannel sourceChan = new FileInputStream( profileStoreTemplate ).getChannel();
+        FileChannel destChan = new FileOutputStream( testFile ).getChannel();
+        destChan.transferFrom( sourceChan, 0, sourceChan.size() );
+        sourceChan.close();
+        destChan.close();
+        return testFile;
+    }
+
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.profile.tests/src/tmplt_DtpProfiles_encrpt.dat b/tests/org.eclipse.datatools.connectivity.oda.profile.tests/src/tmplt_DtpProfiles_encrpt.dat
new file mode 100644
index 0000000..7a08fa6
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.profile.tests/src/tmplt_DtpProfiles_encrpt.dat
Binary files differ
diff --git a/tests/org.eclipse.datatools.connectivity.oda.profile.tests/src/tmplt_ServerProfiles.dat b/tests/org.eclipse.datatools.connectivity.oda.profile.tests/src/tmplt_ServerProfiles.dat
new file mode 100644
index 0000000..e37eaa4
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.profile.tests/src/tmplt_ServerProfiles.dat
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><DataTools.ServerProfiles version="1.0"><profile autoconnect="No" desc="My Flat File Profile 1" id="29f4d170-bb11-11db-9489-c4a61d6dc2f4" name="MyFFProfile1wDesc" providerID="org.eclipse.datatools.connectivity.oda.flatfile"><baseproperties><property name="HOME" value="C:/Documents and Settings"/><property name="INCLCOLUMNNAME" value="YES"/><property name="INCLTYPELINE" value="NO"/><property name="DELIMTYPE" value="COMMA"/><property name="CHARSET" value="UTF-8"/></baseproperties></profile></DataTools.ServerProfiles>
\ No newline at end of file
diff --git a/tests/org.eclipse.datatools.connectivity.oda.tests/.classpath b/tests/org.eclipse.datatools.connectivity.oda.tests/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.tests/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/tests/org.eclipse.datatools.connectivity.oda.tests/.gitignore b/tests/org.eclipse.datatools.connectivity.oda.tests/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.tests/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/tests/org.eclipse.datatools.connectivity.oda.tests/.project b/tests/org.eclipse.datatools.connectivity.oda.tests/.project
new file mode 100644
index 0000000..43e01a9
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.tests/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.oda.tests</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/tests/org.eclipse.datatools.connectivity.oda.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.datatools.connectivity.oda.tests/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..7a1872a
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.tests/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: DTP ODA Tests Suite
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.oda.tests;singleton:=true
+Bundle-Version: 3.2.1.qualifier
+Bundle-Localization: plugin
+Bundle-Vendor: Eclipse.org
+Require-Bundle: org.eclipse.datatools.connectivity.oda;bundle-version="[3.2.1,4.0.0)",
+ org.junit;bundle-version="[3.8.1,4.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/tests/org.eclipse.datatools.connectivity.oda.tests/about.html b/tests/org.eclipse.datatools.connectivity.oda.tests/about.html
new file mode 100644
index 0000000..a49e344
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.tests/about.html
@@ -0,0 +1,28 @@
+<html>
+<head>
+<title>About This Content</title>
+</head>
+<body>
+<div>
+<h3>About This Content</h3>
+<p>August 2, 2006</p>
+<h3>License</h3>
+<p>The Eclipse Foundation makes available all content in this plug-in
+(&quot;Content&quot;). Unless otherwise indicated below, the Content is
+provided to you under the terms and conditions of the Eclipse Public License
+Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available at <a
+href="http://www.eclipse.org/org/documents/epl-v10.php">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation,
+the Content is being redistributed by another party (&quot;Redistributor&quot;)
+and different terms and conditions may apply to your use of any object code in
+the Content. Check the RedistributorÂ’s license that was provided with the
+Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source
+code in the Content and such source code may be obtained at <a
+href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+<p>&nbsp;</p>
+</div>
+</body>
+</html>
diff --git a/tests/org.eclipse.datatools.connectivity.oda.tests/build.properties b/tests/org.eclipse.datatools.connectivity.oda.tests/build.properties
new file mode 100644
index 0000000..08373bf
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.tests/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+bin.includes = META-INF/,\
+               .,\
+               about.html
diff --git a/tests/org.eclipse.datatools.connectivity.oda.tests/src/org/eclipse/datatools/connectivity/oda/impl/tests/BlobTest.java b/tests/org.eclipse.datatools.connectivity.oda.tests/src/org/eclipse/datatools/connectivity/oda/impl/tests/BlobTest.java
new file mode 100644
index 0000000..88bdb8d
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.tests/src/org/eclipse/datatools/connectivity/oda/impl/tests/BlobTest.java
@@ -0,0 +1,63 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.impl.tests;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import junit.framework.TestCase;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.impl.Blob;
+
+/**
+ *
+ */
+public class BlobTest extends TestCase
+{
+
+    /*
+     * @see TestCase#setUp()
+     */
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+    }
+
+    /*
+     * @see TestCase#tearDown()
+     */
+    protected void tearDown() throws Exception
+    {
+        super.tearDown();
+    }
+
+    public void testBlob() throws OdaException, IOException
+    {
+        byte[] bytes = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 
+                0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf };
+        
+        Blob blob = new Blob( bytes );
+        InputStream stream = blob.getBinaryStream();
+        
+        assertEquals( 16, blob.length() );
+        for ( int i = 0; i < blob.length(); i += 1 )
+        {
+            assertEquals( i, stream.read() );
+        }
+        
+    }
+    
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.tests/src/org/eclipse/datatools/connectivity/oda/impl/tests/ClobTest.java b/tests/org.eclipse.datatools.connectivity.oda.tests/src/org/eclipse/datatools/connectivity/oda/impl/tests/ClobTest.java
new file mode 100644
index 0000000..ba9c8e3
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.tests/src/org/eclipse/datatools/connectivity/oda/impl/tests/ClobTest.java
@@ -0,0 +1,61 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2004, 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation  - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.impl.tests;
+
+import java.io.IOException;
+import java.io.Reader;
+
+import junit.framework.TestCase;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.impl.Clob;
+
+/**
+ *
+ */
+public class ClobTest extends TestCase
+{
+
+    /*
+     * @see TestCase#setUp()
+     */
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+    }
+
+    /*
+     * @see TestCase#tearDown()
+     */
+    protected void tearDown() throws Exception
+    {
+        super.tearDown();
+    }
+    
+    public void testClob() throws OdaException, IOException
+    {
+        String alphabet = "abcdefghijklmnopqrstuvwxyz";
+        
+        Clob clob = new Clob( alphabet );
+        Reader reader = clob.getCharacterStream();
+        
+        assertEquals( 26, clob.length() );
+        for ( int i = 0; i < clob.length(); i += 1)
+        {
+            assertEquals( 'a' + i, reader.read() );
+        }
+    }
+
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.tests/src/org/eclipse/datatools/connectivity/oda/spec/tests/AggregateTest.java b/tests/org.eclipse.datatools.connectivity.oda.tests/src/org/eclipse/datatools/connectivity/oda/spec/tests/AggregateTest.java
new file mode 100644
index 0000000..52d60f4
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.tests/src/org/eclipse/datatools/connectivity/oda/spec/tests/AggregateTest.java
@@ -0,0 +1,108 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.tests;
+
+import java.sql.Types;
+
+import junit.framework.TestCase;
+
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionVariable.VariableType;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.AggregateDefinition;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.ExtensionContributor;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.ResultExtensionExplorer;
+import org.eclipse.datatools.connectivity.oda.spec.result.CustomAggregate;
+import org.eclipse.datatools.connectivity.oda.spec.util.ExpressionFactory;
+
+@SuppressWarnings("restriction")
+public class AggregateTest extends TestCase
+{
+    private static final String DBPROFILE_DATA_SOURCE_ID = QuerySpecTest.TARGET_DATA_SOURCE_ID;
+    private static final String DBPROFILE_DATA_SET_ID = QuerySpecTest.TARGET_DATA_SET_ID;
+    private static final String TEST_EXTENSION_ID = QuerySpecTest.TEST_EXTENSION_ID;
+
+    private static final String COUNT_AGGRG_ID = "COUNT"; //$NON-NLS-1$
+    private static final String AVG_AGGRG_ID = "WtAvg"; //$NON-NLS-1$
+    private static final String STD_DEV_AGGRG_ID = "StdDev"; //$NON-NLS-1$
+    private static final String RESTRICTED_CLASS_NAME = "org.eclipse.datatools.connectivity.oda.consumer.testdriver.Mortgage"; //$NON-NLS-1$
+
+    public void testGetAggregateDefinition() throws Exception
+    {
+        ExtensionContributor[] contributors =
+            ResultExtensionExplorer.getInstance().getContributorsOfDataSet( DBPROFILE_DATA_SOURCE_ID, DBPROFILE_DATA_SET_ID  );
+        assertTrue( contributors.length > 0 );
+        ExtensionContributor contributor = contributors[0];
+
+        AggregateDefinition countDefn =
+            ResultExtensionExplorer.getInstance().getContributedAggregateDefinition( contributor, COUNT_AGGRG_ID );
+        assertEquals( COUNT_AGGRG_ID, countDefn.getId() );
+        assertEquals( countDefn.getId(), countDefn.getDisplayName() );  // no display name specified; use id as display name
+        assertTrue( countDefn.canIgnoreDuplicateValues() );
+        assertTrue( countDefn.canIgnoreNullValues() );
+        assertEquals( contributor, countDefn.getContributor() );
+        assertEquals( 0, countDefn.getMinInputVariables().intValue() );
+        assertEquals( 1, countDefn.getMaxInputVariables().intValue() ); // no value specified; use default value
+
+        AggregateDefinition wtAvgDefn =
+            ResultExtensionExplorer.getInstance().getExtensionAggregateDefinition( contributor.getDeclaringExtensionId(), AVG_AGGRG_ID );
+        assertEquals( AVG_AGGRG_ID, wtAvgDefn.getId() );
+        assertEquals( contributor.getDeclaringExtensionId(), wtAvgDefn.getDeclaringExtensionId() );
+        assertFalse( wtAvgDefn.canIgnoreDuplicateValues() );
+        assertTrue( wtAvgDefn.canIgnoreNullValues() );
+        assertEquals( 2, wtAvgDefn.getMinInputVariables().intValue() );
+        assertEquals( 2, wtAvgDefn.getMaxInputVariables().intValue() );
+        
+        // test the content of variableRestriction elements
+        assertEquals( 1, wtAvgDefn.getVariableRestrictions().getRestrictedVariableTypes().length );
+        assertTrue( wtAvgDefn.getVariableRestrictions().supportsVariableType( VariableType.RESULT_SET_COLUMN ));
+        assertTrue( wtAvgDefn.getVariableRestrictions().hasDataTypeRestrictions( VariableType.RESULT_SET_COLUMN ) );
+        assertTrue( wtAvgDefn.getVariableRestrictions().getResultColumnRestrictedOdaDataTypes().length >= 3 );
+        assertTrue( wtAvgDefn.getVariableRestrictions().supportsOdaDataType( VariableType.RESULT_SET_COLUMN, Types.DECIMAL ) );
+        
+        assertFalse( wtAvgDefn.getVariableRestrictions().supportsVariableType( VariableType.INSTANCE_OF ));
+        assertFalse( wtAvgDefn.getVariableRestrictions().hasDataTypeRestrictions( VariableType.INSTANCE_OF ) );
+        assertEquals( 0, wtAvgDefn.getVariableRestrictions().getInstanceRestrictedTypes().length );
+        assertFalse( wtAvgDefn.getVariableRestrictions().supportsClassType( VariableType.INSTANCE_OF, RESTRICTED_CLASS_NAME ) );
+        
+        // test type with class type restriction
+        AggregateDefinition isInstanceDefn =
+            ResultExtensionExplorer.getInstance().getExtensionAggregateDefinition( contributor.getDeclaringExtensionId(), STD_DEV_AGGRG_ID );
+
+        assertEquals( 1, isInstanceDefn.getVariableRestrictions().getRestrictedVariableTypes().length );
+        assertTrue( isInstanceDefn.getVariableRestrictions().supportsVariableType( VariableType.INSTANCE_OF ));
+        assertTrue( isInstanceDefn.getVariableRestrictions().hasDataTypeRestrictions( VariableType.INSTANCE_OF ) );
+        assertTrue( isInstanceDefn.getVariableRestrictions().getInstanceRestrictedTypes().length >= 1 );
+        assertTrue( isInstanceDefn.getVariableRestrictions().supportsClassType( VariableType.INSTANCE_OF, RESTRICTED_CLASS_NAME ) );
+        
+        assertFalse( isInstanceDefn.getVariableRestrictions().supportsVariableType( VariableType.RESULT_SET_COLUMN ));
+        assertFalse( isInstanceDefn.getVariableRestrictions().hasDataTypeRestrictions( VariableType.RESULT_SET_COLUMN ) );
+        assertEquals( 0, isInstanceDefn.getVariableRestrictions().getResultColumnRestrictedOdaDataTypes().length );
+        assertFalse( isInstanceDefn.getVariableRestrictions().supportsOdaDataType( VariableType.RESULT_SET_COLUMN, Types.CHAR ) );
+    }
+    
+    public void testCreateExpression() throws Exception
+    {
+        CustomAggregate countExpr = ExpressionFactory.createCustomAggregate( TEST_EXTENSION_ID, COUNT_AGGRG_ID );
+        assertEquals( TEST_EXTENSION_ID, countExpr.getDeclaringExtensionId() );
+        assertEquals( COUNT_AGGRG_ID, countExpr.getId() );
+        assertTrue( countExpr.canIgnoreDuplicateValues() );
+        assertNotNull( countExpr.getDefinition() );
+        
+        String testKey = "test"; //$NON-NLS-1$
+        String testValue = "testValue"; //$NON-NLS-1$
+        countExpr.setData( testKey, testValue );
+        assertEquals( testValue, countExpr.getData( testKey ) );
+    }
+    
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.tests/src/org/eclipse/datatools/connectivity/oda/spec/tests/FilterExtensionsTest.java b/tests/org.eclipse.datatools.connectivity.oda.tests/src/org/eclipse/datatools/connectivity/oda/spec/tests/FilterExtensionsTest.java
new file mode 100644
index 0000000..9e68ca0
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.tests/src/org/eclipse/datatools/connectivity/oda/spec/tests/FilterExtensionsTest.java
@@ -0,0 +1,197 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.tests;
+
+import java.sql.Types;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionArguments;
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionVariable;
+import org.eclipse.datatools.connectivity.oda.spec.IValidator;
+import org.eclipse.datatools.connectivity.oda.spec.ValidationContext;
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionVariable.VariableType;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.ExtensionContributor;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.FilterExpressionDefinition;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.ResultExtensionExplorer;
+import org.eclipse.datatools.connectivity.oda.spec.result.filter.AndExpression;
+import org.eclipse.datatools.connectivity.oda.spec.result.filter.CompositeExpression;
+import org.eclipse.datatools.connectivity.oda.spec.result.filter.CustomExpression;
+import org.eclipse.datatools.connectivity.oda.spec.result.filter.NotExpression;
+import org.eclipse.datatools.connectivity.oda.spec.result.filter.OrExpression;
+import org.eclipse.datatools.connectivity.oda.spec.util.ExpressionFactory;
+
+
+
+import junit.framework.TestCase;
+
+@SuppressWarnings("restriction")
+public class FilterExtensionsTest extends TestCase
+{
+    private static final String TEST_EXTENSION_ID = QuerySpecTest.TEST_EXTENSION_ID;
+    private static final String TARGET_DATA_SOURCE_ID = QuerySpecTest.TARGET_DATA_SOURCE_ID;
+    private static final String TARGET_DATA_SET_ID = QuerySpecTest.TARGET_DATA_SET_ID;
+
+    private static final String EQUAL_EXPR_ID = "0"; //$NON-NLS-1$
+    private static final String BETWEEN_EXPR_ID = "1001"; //$NON-NLS-1$
+    private static final String ISNULL_EXPR_ID = "1005"; //$NON-NLS-1$
+    private static final String INSTANCE_EXPR_ID = "instanceOf"; //$NON-NLS-1$
+    private static final String RESTRICTED_CLASS_NAME = "org.eclipse.datatools.connectivity.oda.consumer.testdriver.OrderItem"; //$NON-NLS-1$
+    
+    public void testContributorManifest() throws Exception
+    {
+        ExtensionContributor[] contributors =
+            ResultExtensionExplorer.getInstance().getContributorsOfDataSet( TARGET_DATA_SOURCE_ID, TARGET_DATA_SET_ID  );
+        assertTrue( contributors.length > 0 );
+
+        ExtensionContributor contributor = contributors[0];
+
+        FilterExpressionDefinition[] contributorDefns = ResultExtensionExplorer.getInstance().getContributedFilterDefinitions( contributor );
+        assertTrue( contributorDefns.length >= 5 );
+
+        // test that the 2 explorer entry points found the same set of definitions
+        FilterExpressionDefinition[] extensionDefns = ResultExtensionExplorer.getInstance().getExtensionFilterDefinitions( TEST_EXTENSION_ID );
+        if( contributor.getDeclaringExtensionId().equalsIgnoreCase( TEST_EXTENSION_ID ) )
+            assertTrue( contributorDefns.length == extensionDefns.length ); 
+        
+        assertTrue( contributor.supportsOdaFilterExpression( AndExpression.class.getSimpleName() ));
+        assertTrue( contributor.supportsOdaFilterExpression( OrExpression.class.getSimpleName() ));
+        assertTrue( contributor.supportsOdaFilterExpression( NotExpression.class.getSimpleName() ));
+        
+        assertTrue( contributor.supportsDataSetType( TARGET_DATA_SOURCE_ID, TARGET_DATA_SET_ID ));
+    }
+    
+    public void testGetExpressionDefinition() throws Exception
+    {
+        ExtensionContributor[] contributors =
+            ResultExtensionExplorer.getInstance().getContributorsOfDataSet( TARGET_DATA_SOURCE_ID, TARGET_DATA_SET_ID  );
+        assertTrue( contributors.length > 0 );
+        ExtensionContributor contributor = contributors[0];
+
+        FilterExpressionDefinition equalDefn =
+            ResultExtensionExplorer.getInstance().getContributedFilterDefinition( contributor, EQUAL_EXPR_ID );
+        assertEquals( EQUAL_EXPR_ID, equalDefn.getId() );
+        assertEquals( contributor, equalDefn.getContributor() );
+        assertTrue( equalDefn.getValidator() instanceof IValidator );
+
+        FilterExpressionDefinition betweenDefn =
+            ResultExtensionExplorer.getInstance().getExtensionFilterDefinition( contributor.getDeclaringExtensionId(), BETWEEN_EXPR_ID );
+        assertEquals( BETWEEN_EXPR_ID, betweenDefn.getId() );
+        assertEquals( contributor.getDeclaringExtensionId(), betweenDefn.getDeclaringExtensionId() );
+        assertEquals( 1, betweenDefn.getMinArguments().intValue() );
+        assertEquals( 2, betweenDefn.getMaxArguments().intValue() );
+        assertFalse( betweenDefn.supportsUnboundedMaxArguments() );
+
+        FilterExpressionDefinition isInstanceDefn =
+            ResultExtensionExplorer.getInstance().getExtensionFilterDefinition( contributor.getDeclaringExtensionId(), INSTANCE_EXPR_ID );
+        assertTrue( isInstanceDefn.isNegatable() );
+        assertFalse( isInstanceDefn.isOptionable() );
+    }
+    
+    public void testVariableRestrictions() throws Exception
+    {
+        FilterExpressionDefinition betweenDefn =
+            ResultExtensionExplorer.getInstance().getExtensionFilterDefinition( TEST_EXTENSION_ID, BETWEEN_EXPR_ID );
+        
+        // test the content of variableRestriction elements
+        assertEquals( 1, betweenDefn.getVariableRestrictions().getRestrictedVariableTypes().length );
+        assertTrue( betweenDefn.getVariableRestrictions().supportsVariableType( VariableType.RESULT_SET_COLUMN ));
+        assertTrue( betweenDefn.getVariableRestrictions().hasDataTypeRestrictions( VariableType.RESULT_SET_COLUMN ) );
+        assertTrue( betweenDefn.getVariableRestrictions().getResultColumnRestrictedOdaDataTypes().length >= 7 );
+        assertTrue( betweenDefn.getVariableRestrictions().supportsOdaDataType( VariableType.RESULT_SET_COLUMN, Types.CHAR ) );
+        
+        assertFalse( betweenDefn.getVariableRestrictions().supportsVariableType( VariableType.INSTANCE_OF ));
+        assertFalse( betweenDefn.getVariableRestrictions().hasDataTypeRestrictions( VariableType.INSTANCE_OF ) );
+        assertEquals( 0, betweenDefn.getVariableRestrictions().getInstanceRestrictedTypes().length );
+        assertFalse( betweenDefn.getVariableRestrictions().supportsClassType( VariableType.INSTANCE_OF, RESTRICTED_CLASS_NAME ) );
+
+        FilterExpressionDefinition isInstanceDefn =
+            ResultExtensionExplorer.getInstance().getExtensionFilterDefinition( TEST_EXTENSION_ID, INSTANCE_EXPR_ID );
+
+        assertEquals( 1, isInstanceDefn.getVariableRestrictions().getRestrictedVariableTypes().length );
+        assertTrue( isInstanceDefn.getVariableRestrictions().supportsVariableType( VariableType.INSTANCE_OF ));
+        assertTrue( isInstanceDefn.getVariableRestrictions().hasDataTypeRestrictions( VariableType.INSTANCE_OF ) );
+        assertTrue( isInstanceDefn.getVariableRestrictions().getInstanceRestrictedTypes().length >= 1 );
+        assertTrue( isInstanceDefn.getVariableRestrictions().supportsClassType( VariableType.INSTANCE_OF, RESTRICTED_CLASS_NAME ) );
+        
+        assertFalse( isInstanceDefn.getVariableRestrictions().supportsVariableType( VariableType.RESULT_SET_COLUMN ));
+        assertFalse( isInstanceDefn.getVariableRestrictions().hasDataTypeRestrictions( VariableType.RESULT_SET_COLUMN ) );
+        assertEquals( 0, isInstanceDefn.getVariableRestrictions().getResultColumnRestrictedOdaDataTypes().length );
+        assertFalse( isInstanceDefn.getVariableRestrictions().supportsOdaDataType( VariableType.RESULT_SET_COLUMN, Types.CHAR ) );
+
+        FilterExpressionDefinition idEqDefn =
+            ResultExtensionExplorer.getInstance().getExtensionFilterDefinition( TEST_EXTENSION_ID, "IdentityEq" ); //$NON-NLS-1$
+        assertTrue( idEqDefn.getVariableRestrictions().supportsOdaDataType( VariableType.RESULT_SET_COLUMN, Types.JAVA_OBJECT ) );
+    }
+
+    public void testCreateExpression() throws Exception
+    {
+        CustomExpression betweenExpr = ExpressionFactory.createCustomExpression( TEST_EXTENSION_ID, BETWEEN_EXPR_ID );
+        assertEquals( "org.eclipse.datatools.connectivity.oda.consumer.testdriver.spec.impl.MyCustomExpression",  //$NON-NLS-1$
+                    betweenExpr.getClass().getName() );
+        
+        betweenExpr.setVariable( new ExpressionVariable( "(CREDITLIMIT / 100)" ) ); //$NON-NLS-1$
+        ExpressionArguments betweenArgs = new ExpressionArguments();
+        betweenArgs.addValue( 100.0 )
+            .addValue( 700.0 );
+        betweenExpr.setArguments( betweenArgs );
+
+        CustomExpression isNullExpr = ExpressionFactory.createCustomExpression( TEST_EXTENSION_ID, ISNULL_EXPR_ID,
+                new ExpressionVariable( "VIP" ), null ); //$NON-NLS-1$
+
+        FilterExpressionDefinition equalDefn =
+            ResultExtensionExplorer.getInstance().getExtensionFilterDefinition( TEST_EXTENSION_ID, EQUAL_EXPR_ID );
+        CustomExpression equalExpr = equalDefn.createExpression();
+        equalExpr.setVariable( new ExpressionVariable( "ORDERNUMBER" ) ); //$NON-NLS-1$
+        equalExpr.setArguments( new ExpressionArguments( 10199 ) );
+
+        String testKey = "test"; //$NON-NLS-1$
+        String testValue = "testValue"; //$NON-NLS-1$
+        equalExpr.setData( testKey, testValue );
+        assertEquals( testValue, equalExpr.getData( testKey ) );
+
+        CustomExpression equalExpr2 = equalDefn.createExpression( 
+                new ExpressionVariable( "STATE" ),  //$NON-NLS-1$
+                new ExpressionArguments( "NY" ) ); //$NON-NLS-1$
+
+        NotExpression notExpr = new NotExpression( equalExpr2 );
+        
+        CompositeExpression andExpr1 = new AndExpression()
+            .add( equalExpr )
+            .add( notExpr )
+            .add( betweenExpr ); 
+
+        CompositeExpression rootExpr = new OrExpression()
+            .add( andExpr1 )
+            .add( new NotExpression( isNullExpr ) );
+        
+        assertEquals( 2, rootExpr.childCount() );
+        assertEquals( 2, rootExpr.getChildren().length );
+        // test sequence of children is expected to be kept in order added
+        assertTrue( rootExpr.getChildren()[0] instanceof AndExpression );   
+        assertEquals( 3, ((AndExpression)rootExpr.getChildren()[0]).childCount() );       
+        
+        // TODO - enrich the custom tester in test extension
+        ValidationContext context = new ValidationContext( equalDefn.getContributor() );
+        try
+        {
+            rootExpr.validate( context );
+        }
+        catch( OdaException ex )
+        {
+            fail();
+        }        
+    }
+
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.tests/src/org/eclipse/datatools/connectivity/oda/spec/tests/QuerySpecTest.java b/tests/org.eclipse.datatools.connectivity.oda.tests/src/org/eclipse/datatools/connectivity/oda/spec/tests/QuerySpecTest.java
new file mode 100644
index 0000000..fbdfda8
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.tests/src/org/eclipse/datatools/connectivity/oda/spec/tests/QuerySpecTest.java
@@ -0,0 +1,234 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.tests;
+
+import junit.framework.TestCase;
+
+import org.eclipse.datatools.connectivity.oda.IDataSetMetaData;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionVariable;
+import org.eclipse.datatools.connectivity.oda.spec.IValidator;
+import org.eclipse.datatools.connectivity.oda.spec.QuerySpecification;
+import org.eclipse.datatools.connectivity.oda.spec.ValidationContext;
+import org.eclipse.datatools.connectivity.oda.spec.QuerySpecification.ParameterIdentifier;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.ExtensionContributor;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.ResultExtensionExplorer;
+import org.eclipse.datatools.connectivity.oda.spec.result.ColumnIdentifier;
+import org.eclipse.datatools.connectivity.oda.spec.result.CustomAggregate;
+import org.eclipse.datatools.connectivity.oda.spec.result.ResultProjection;
+import org.eclipse.datatools.connectivity.oda.spec.result.SortSpecification;
+import org.eclipse.datatools.connectivity.oda.spec.util.ExpressionFactory;
+import org.eclipse.datatools.connectivity.oda.spec.util.QuerySpecificationHelper;
+
+@SuppressWarnings("restriction")
+public class QuerySpecTest extends TestCase
+{
+    static final String TEST_EXTENSION_ID = "org.eclipse.datatools.connectivity.oda.consumer.testdriver.dynamicResultSetExtension"; //$NON-NLS-1$
+    static final String TARGET_DATA_SOURCE_ID = "org.eclipse.datatools.connectivity.oda.consumer.testdriver"; //$NON-NLS-1$
+    static final String TARGET_DATA_SET_ID = "org.eclipse.datatools.connectivity.oda.consumer.testdriver.dataSet"; //$NON-NLS-1$
+
+    public void testCreateQuerySpec() throws Exception
+    {
+        QuerySpecificationHelper specHelper = new QuerySpecificationHelper( TEST_EXTENSION_ID );
+        QuerySpecification querySpec = specHelper.createQuerySpecification();
+        querySpec.setProperty( "prop1", Integer.valueOf( 1 ) );
+        querySpec.setProperty( "prop2", Integer.valueOf( 2 ) );
+        assertEquals( 2, querySpec.getProperties().size() );
+        assertEquals( Integer.valueOf( 1 ), querySpec.getProperty( "prop1" ));
+        assertEquals( Integer.valueOf( 2 ), querySpec.getProperties().get( "prop2" ));
+        
+        // test setting parameter value by name only
+        String paramName = "param1";
+        String paramValue = "paramValue1";
+        querySpec.setParameterValue( paramName, paramValue );
+        assertEquals( 1, querySpec.getParameterValues().size() );
+        assertEquals( paramValue, querySpec.getParameterValue( paramName ) );
+        assertEquals( paramValue, querySpec.getParameterValue( querySpec.new ParameterIdentifier( paramName, 100 )) );
+        assertEquals( paramValue, querySpec.getParameterValues().get( querySpec.new ParameterIdentifier( paramName )) );
+        
+        // test case sensitive parameter name comparison
+        assertNotSame( paramValue, querySpec.getParameterValue( "Param1" ) );
+      
+        // test setting parameter value by position only
+        int paramId = 2;
+        querySpec.setParameterValue( paramId, "paramValue2" );
+        querySpec.setParameterValue( querySpec.new ParameterIdentifier( paramId ), "overrideParamValue"  );
+        assertEquals( 2, querySpec.getParameterValues().size() );
+        assertEquals( "overrideParamValue", querySpec.getParameterValue( paramId ) );
+        assertEquals( "overrideParamValue", querySpec.getParameterValue( querySpec.new ParameterIdentifier( "dummyName", paramId ) ) );
+        assertEquals( "overrideParamValue", querySpec.getParameterValues().get( querySpec.new ParameterIdentifier( paramId ) ) );
+
+        // test setting parameter value by name and position
+        paramName = "param3";
+        paramId = 3;
+        paramValue = "paramValue3";
+        ParameterIdentifier paramIdentifier = querySpec.new ParameterIdentifier( paramName, paramId );
+        querySpec.setParameterValue( paramIdentifier, paramValue );
+        assertEquals( paramValue, querySpec.getParameterValue( paramName ) );
+        assertEquals( paramValue, querySpec.getParameterValue( paramId ) );
+        assertEquals( paramValue, querySpec.getParameterValue( paramIdentifier ) );
+        assertEquals( paramValue, querySpec.getParameterValue( querySpec.new ParameterIdentifier( paramName, paramId ) ) );
+        
+        Object actualValue = querySpec.getParameterValue( "param1" );
+        assertNotNull( actualValue );
+        assertNotSame( paramValue, actualValue );
+        
+        actualValue = querySpec.getParameterValue( 2 );
+        assertNotNull( actualValue );
+        assertNotSame( paramValue, actualValue );
+        
+        // formatting of querySpec content
+        String contentStr = QuerySpecificationHelper.getContentAsString( querySpec );
+        assertTrue( contentStr.length() > 390); // not very useful testing; more for manual visualization
+}
+    
+    public void testCreateResultProjectionAggregates() throws Exception
+    {
+        // setup aggregate expression projection
+        CustomAggregate orderNumAggr = ExpressionFactory.createCustomAggregate( TEST_EXTENSION_ID, "COUNT",
+                                                new ExpressionVariable( "ORDERNUMBER" ) );
+        orderNumAggr.setIgnoreDuplicateValues( true );
+    
+        CustomAggregate creditLimitAggr = ExpressionFactory.createCustomAggregate( TEST_EXTENSION_ID, "COUNT",
+                                                new ExpressionVariable( "CREDITLIMIT" ) );
+        
+        QuerySpecificationHelper specHelper = new QuerySpecificationHelper( TEST_EXTENSION_ID );
+        ResultProjection resultProj = specHelper.createResultProjection();
+        resultProj.setProjection( new ColumnIdentifier( 2 ), orderNumAggr );
+        resultProj.setProjection( new ColumnIdentifier( 4 ), creditLimitAggr );
+               
+        ExpressionVariable newColumnVar = new ExpressionVariable( "NEWCREDITLIMIT" );
+        resultProj.addResultColumn( newColumnVar );
+        resultProj.setProjection( new ColumnIdentifier( newColumnVar.getAlias() ), creditLimitAggr );
+        
+        // test aggregate getters of ResultProjection
+        assertEquals( 3, resultProj.getAggregatedColumns().size() );
+        assertNull( resultProj.getAggregateProjection( new ColumnIdentifier( 1 )));
+        assertEquals( orderNumAggr, resultProj.getAggregateProjection( new ColumnIdentifier( 2 )));
+        assertEquals( creditLimitAggr, resultProj.getAggregateProjection( new ColumnIdentifier( 4 )));
+        assertEquals( creditLimitAggr, resultProj.getAggregateProjection( new ColumnIdentifier( newColumnVar.getAlias() )));
+
+        assertEquals( 1, resultProj.getAddedResultColumns().size() );
+       
+        // test hiding a new projected aggregate column
+        resultProj.hideResultColumn( new ColumnIdentifier( newColumnVar.getAlias() ) );
+        assertEquals( 2, resultProj.getAggregatedColumns().size() );
+        assertEquals( 0, resultProj.getAddedResultColumns().size() );
+        assertEquals( 0, resultProj.getHiddenResultColumns().size() );        
+        
+        // test accessing ResultProjection from a QuerySpecification
+        QuerySpecification querySpec = specHelper.createQuerySpecification( resultProj );       
+        ResultProjection resultProjOut = querySpec.getResultSetSpecification().getResultProjection();
+        assertEquals( resultProj, resultProjOut );
+        
+        // formatting of querySpec content
+        String contentStr = QuerySpecificationHelper.getContentAsString( querySpec );
+        assertTrue( contentStr.length() > 850);
+    }
+    
+    public void testCreateResultProjectionColumns() throws Exception
+    {
+        QuerySpecificationHelper specHelper = new QuerySpecificationHelper( TEST_EXTENSION_ID );
+        ResultProjection resultProj = specHelper.createResultProjection();
+        
+        resultProj.addResultColumn( new ExpressionVariable( "compute column 1") );
+        ExpressionVariable exprVar2 = new ExpressionVariable( "compute column 2" );
+        resultProj.addResultColumn( exprVar2 );
+        
+        assertEquals( 2, resultProj.getAddedResultColumns().size() );
+        assertEquals( exprVar2, resultProj.getAddedResultColumns().get( new ColumnIdentifier( exprVar2.getAlias() ) ));
+        
+        // test hiding a dynamcially added column
+        resultProj.hideResultColumn( new ColumnIdentifier(  "compute column 2" ));  // should be same as var2.getAlias()
+        assertEquals( 1, resultProj.getAddedResultColumns().size() );
+        assertEquals( 0, resultProj.getHiddenResultColumns().size() );
+        
+        // test hiding a predefined result column
+        resultProj.hideResultColumn( new ColumnIdentifier( "result column 3" ));
+        assertEquals( 1, resultProj.getHiddenResultColumns().size() );
+    }
+    
+    public void testCreateAndValidateSortSpec() throws Exception
+    {
+        ExtensionContributor contributor =
+            ResultExtensionExplorer.getInstance().getExtensionContributor( TEST_EXTENSION_ID );
+        assertTrue( contributor.supportsDynamicRowOrdering() );
+        assertFalse( contributor.supportsNullValueOrdering() );
+        
+        QuerySpecificationHelper specHelper = new QuerySpecificationHelper( TEST_EXTENSION_ID );
+        SortSpecification sortSpec = specHelper.createSortSpecification();
+        sortSpec.addSortKey( new ColumnIdentifier("Column1"), SortSpecification.ORDERING_DESC );
+        sortSpec.addSortKey( new ColumnIdentifier(2), SortSpecification.ORDERING_ASC, 
+                SortSpecification.NULL_ORDERING_NONE );
+        
+        ValidationContext context = new ValidationContext( contributor );
+        context.setQueryText( "test query text" );
+        
+        QuerySpecification querySpec = specHelper.createQuerySpecification( sortSpec );
+
+        // setup test property values used by test driver to validate sort keys
+        querySpec.setProperty( "Column1", Integer.valueOf( SortSpecification.ORDERING_DESC ) );
+        querySpec.setProperty( "2", Integer.valueOf( SortSpecification.ORDERING_ASC ) );
+        querySpec.setProperty( "TESTER_EXPECTED_QUERY", "test query text" );
+        
+        IValidator validator = context.getValidator();
+        try
+        {
+            validator.validate( querySpec.getResultSetSpecification(), context );
+        }
+        catch( OdaException e )
+        {
+            fail();     // test failed; expected test driver to pass validation
+        }
+        
+        // formatting of querySpec content
+        String contentStr = QuerySpecificationHelper.getContentAsString( querySpec );
+        assertTrue( contentStr.length() > 440); // not very useful testing; more for manual visualization
+    }
+ 
+    public void testCreateCustomSortSpec() throws Exception
+    {
+        // test use of extended factory
+        QuerySpecificationHelper specHelper = new QuerySpecificationHelper( TEST_EXTENSION_ID );
+        SortSpecification sortSpec = specHelper.createSortSpecification();
+        assertEquals( "MySortSpecification", sortSpec.getClass().getSimpleName() ); //$NON-NLS-1$
+        
+        // test use of default factory
+        specHelper = new QuerySpecificationHelper( (String) null );
+        sortSpec = specHelper.createSortSpecification();
+        assertEquals( "SortSpecification", sortSpec.getClass().getSimpleName() ); //$NON-NLS-1$
+    }
+
+    public void testSortSpecMode() throws Exception
+    {
+        SortSpecification sortSpec = new QuerySpecificationHelper( (String) null ).createSortSpecification();
+        
+        // no sort keys
+        assertEquals( IDataSetMetaData.sortModeNone, sortSpec.getSortMode() );
+        
+        // single sort key
+        sortSpec.addSortKey( new ColumnIdentifier( "A" ), SortSpecification.ORDERING_ASC ); //$NON-NLS-1$
+        assertEquals( IDataSetMetaData.sortModeSingleColumn, sortSpec.getSortMode() );
+        
+        // multiple sort keys with same sort direction
+        sortSpec.addSortKey( new ColumnIdentifier( "B" ), SortSpecification.ORDERING_ASC ); //$NON-NLS-1$
+        assertEquals( IDataSetMetaData.sortModeSingleOrder, sortSpec.getSortMode() );
+        
+        // additional sort key with different sort direction
+        sortSpec.addSortKey( new ColumnIdentifier( "C" ), SortSpecification.ORDERING_DESC ); //$NON-NLS-1$
+        assertEquals( IDataSetMetaData.sortModeColumnOrder, sortSpec.getSortMode() );
+    }
+
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.tests/src/org/eclipse/datatools/connectivity/oda/spec/tests/ValueExpressionTest.java b/tests/org.eclipse.datatools.connectivity.oda.tests/src/org/eclipse/datatools/connectivity/oda/spec/tests/ValueExpressionTest.java
new file mode 100644
index 0000000..3ca7d6b
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.tests/src/org/eclipse/datatools/connectivity/oda/spec/tests/ValueExpressionTest.java
@@ -0,0 +1,294 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.spec.tests;
+
+import junit.framework.TestCase;
+
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionArguments;
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionVariable;
+import org.eclipse.datatools.connectivity.oda.spec.ExpressionVariable.VariableType;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.CombinedExpressionOperatorDefinition;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.ExtensionContributor;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.FunctionExpressionDefinition;
+import org.eclipse.datatools.connectivity.oda.spec.manifest.ResultExtensionExplorer;
+import org.eclipse.datatools.connectivity.oda.spec.result.ColumnIdentifier;
+import org.eclipse.datatools.connectivity.oda.spec.util.ExpressionFactory;
+import org.eclipse.datatools.connectivity.oda.spec.valueexpr.ColumnValueExpression;
+import org.eclipse.datatools.connectivity.oda.spec.valueexpr.CombinedValueExpression;
+import org.eclipse.datatools.connectivity.oda.spec.valueexpr.CombinedValueExpressionOperator;
+import org.eclipse.datatools.connectivity.oda.spec.valueexpr.CustomFunction;
+import org.eclipse.datatools.connectivity.oda.spec.valueexpr.FunctionValueExpression;
+import org.eclipse.datatools.connectivity.oda.spec.valueexpr.NestedValueExpression;
+import org.eclipse.datatools.connectivity.oda.spec.valueexpr.SimpleValueExpression;
+
+@SuppressWarnings("restriction")
+public class ValueExpressionTest extends TestCase
+{
+    private static final String TEST_EXTENSION_ID = QuerySpecTest.TEST_EXTENSION_ID;
+    private static final String TARGET_DATA_SOURCE_ID = QuerySpecTest.TARGET_DATA_SOURCE_ID;
+    private static final String TARGET_DATA_SET_ID = QuerySpecTest.TARGET_DATA_SET_ID;
+
+    private static final String CUSTOM_DOT_OP_ID = "org.eclipse.datatools.connectivity.oda.consumer.testdriver.combinedOperator.dot"; //$NON-NLS-1$
+    private static final String CUSTOM_AT_OP_ID = "org.eclipse.datatools.connectivity.oda.consumer.testdriver.combinedOperator.at"; //$NON-NLS-1$
+    
+    public void testGetCombinedOperatorDefinitions() throws Exception
+    {
+        CombinedExpressionOperatorDefinition[] combinedOpDefns =
+            ResultExtensionExplorer.getInstance().getExtensionCombinedOperatorDefinitions( TEST_EXTENSION_ID );
+        assertTrue( combinedOpDefns.length >= 5 );
+
+        ExtensionContributor contributor = getTestContributor();
+        assertFalse( contributor.supportsOdaCombinedOperator( CombinedValueExpressionOperator.DIVIDE ));
+        assertTrue( contributor.supportsCombinedValueExpressionType() );
+
+        // "Add" operator type
+        assertTrue( contributor.supportsOdaCombinedOperator( CombinedValueExpressionOperator.ADD ));
+        CombinedExpressionOperatorDefinition opDefn =
+            ResultExtensionExplorer.getInstance().getExtensionCombinedOperatorDefinition( TEST_EXTENSION_ID, 
+                    CombinedValueExpressionOperator.ADD );
+        assertEquals( CombinedValueExpressionOperator.ADD, opDefn.getDisplayName() );
+        assertTrue( opDefn.isBuiltInOperator() );
+        
+        CombinedValueExpressionOperator opInstanceFromFactory = 
+            ExpressionFactory.getCombinedOperator( TEST_EXTENSION_ID, CombinedValueExpressionOperator.ADD );
+        CombinedValueExpressionOperator opInstance = opDefn.getOperator();
+        assertEquals( opInstanceFromFactory, opInstance );
+        assertEquals( "+", opInstance.getLiteral() );
+        assertNull( opInstance.get( CUSTOM_DOT_OP_ID ) );
+        
+        // Concatenate operator type with overridden literal representation
+        assertTrue( contributor.supportsOdaCombinedOperator( CombinedValueExpressionOperator.CONCATENATE ));
+        opDefn = ResultExtensionExplorer.getInstance().getExtensionCombinedOperatorDefinition( TEST_EXTENSION_ID, 
+                    CombinedValueExpressionOperator.CONCATENATE );
+        assertTrue( opDefn.isBuiltInOperator() );
+
+        opInstanceFromFactory = 
+            ExpressionFactory.getCombinedOperator( TEST_EXTENSION_ID, CombinedValueExpressionOperator.CONCATENATE );
+        opInstance = opDefn.getOperator();
+        assertEquals( opInstanceFromFactory, opInstance );
+        assertEquals( opInstance, opDefn.getOperator() );    // same instance should be returned
+        assertEquals( "||", opInstance.getLiteral() );   // overriden literal by custom class
+            // custom concatenate operator overrides the default literal symbol '+'
+        assertFalse( CombinedValueExpressionOperator.CONCATENATE_LITERAL.getLiteral().equals( opInstance.getLiteral() ));
+        
+        // custom combined operator type - Dot
+        assertFalse( contributor.supportsOdaCombinedOperator( CUSTOM_DOT_OP_ID )); // not a built-in operator
+        opDefn = ResultExtensionExplorer.getInstance().getExtensionCombinedOperatorDefinition( TEST_EXTENSION_ID, CUSTOM_DOT_OP_ID );
+        assertEquals( "Dot", opDefn.getDisplayName() );
+        assertFalse( opDefn.isBuiltInOperator() );
+
+        opInstanceFromFactory = 
+            ExpressionFactory.getCombinedOperator( TEST_EXTENSION_ID, CUSTOM_DOT_OP_ID );
+        opInstance = opDefn.getOperator();
+        assertEquals( opInstanceFromFactory, opInstance );
+        assertEquals( opInstance, opDefn.getOperator() );    // same instance should be returned
+        assertEquals( ".", opDefn.getOperator().getLiteral() );  
+        
+        // custom combined operator type - At
+        assertFalse( contributor.supportsOdaCombinedOperator( CUSTOM_AT_OP_ID )); // not a built-in operator
+        opDefn = ResultExtensionExplorer.getInstance().getExtensionCombinedOperatorDefinition( TEST_EXTENSION_ID, CUSTOM_AT_OP_ID );
+        assertEquals( "At", opDefn.getDisplayName() );
+        assertFalse( opDefn.isBuiltInOperator() );
+
+        opInstanceFromFactory = 
+            ExpressionFactory.getCombinedOperator( TEST_EXTENSION_ID, CUSTOM_AT_OP_ID );
+        opInstance = opDefn.getOperator();
+        assertEquals( opInstanceFromFactory, opInstance );
+        assertEquals( opInstance, opDefn.getOperator() );    // same instance should be returned
+        assertEquals( "@", opDefn.getOperator().getLiteral() );  
+    }
+    
+    public void testGetFunctionDefinitions() throws Exception
+    {
+        FunctionExpressionDefinition[] funcDefns =
+            ResultExtensionExplorer.getInstance().getExtensionFunctionDefinitions( TEST_EXTENSION_ID );
+        assertTrue( funcDefns.length >= 10 );
+
+        ExtensionContributor contributor = getTestContributor();
+        assertTrue( contributor.supportsFunctionValueExpressionType() );
+        
+        // MOD function
+        FunctionExpressionDefinition funcDefn =
+            ResultExtensionExplorer.getInstance().getExtensionFunctionDefinition( TEST_EXTENSION_ID, "MOD" );
+        assertNotNull( funcDefn );
+        assertEquals( funcDefn.getId(), funcDefn.getName() );   // name is not specified, default to id
+        assertTrue( funcDefn.getDisplayName().startsWith( "Modulo" ) );
+        assertTrue( funcDefn.getDescription().startsWith( "Returns the remainder" ) );
+        assertEquals( Integer.valueOf( 2 ), funcDefn.getMinArguments() );
+        assertEquals( Integer.valueOf( 2 ), funcDefn.getMaxArguments() );
+        assertFalse( funcDefn.canIgnoreDuplicateValues() );
+        
+        assertTrue( funcDefn.getVariableRestrictions().supportsOdaNumericDataTypes( VariableType.QUERY_EXPRESSION ));
+        // implied support of ResultSetColumn if QUERY_EXPRESSION is supported
+        assertTrue( funcDefn.getVariableRestrictions().supportsVariableType( VariableType.RESULT_SET_COLUMN ));
+        assertTrue( funcDefn.getVariableRestrictions().supportsOdaNumericDataTypes( VariableType.RESULT_SET_COLUMN ));
+        
+        // LOWER function
+        funcDefn =
+            ResultExtensionExplorer.getInstance().getExtensionFunctionDefinition( TEST_EXTENSION_ID, "LOWER" );
+        assertNotNull( funcDefn );
+        assertTrue( funcDefn.getDisplayName().startsWith( "Lower" ) );
+        assertEquals( Integer.valueOf( 1 ), funcDefn.getMinArguments() );   // default value
+        assertEquals( Integer.valueOf( 1 ), funcDefn.getMaxArguments() );
+        assertTrue( funcDefn.getVariableRestrictions().supportsVariableType( VariableType.RESULT_SET_COLUMN ));
+        assertTrue( funcDefn.getVariableRestrictions().supportsOdaStringDataTypes( VariableType.RESULT_SET_COLUMN ));
+        
+        // MONTH function
+        funcDefn =
+            ResultExtensionExplorer.getInstance().getExtensionFunctionDefinition( TEST_EXTENSION_ID, "MONTH" );
+        assertNotNull( funcDefn );
+        assertTrue( funcDefn.getDisplayName().startsWith( "Month" ) );
+        assertEquals( Integer.valueOf( 1 ), funcDefn.getMinArguments() );
+        assertEquals( Integer.valueOf( 1 ), funcDefn.getMaxArguments() );
+        assertTrue( funcDefn.getVariableRestrictions().supportsVariableType( VariableType.RESULT_SET_COLUMN ));
+        assertTrue( funcDefn.getVariableRestrictions().supportsOdaDatetimeDataTypes( VariableType.RESULT_SET_COLUMN ));
+        
+        assertFalse( funcDefn.getVariableRestrictions().supportsOdaStringDataTypes( VariableType.QUERY_EXPRESSION ));
+        assertFalse( funcDefn.getVariableRestrictions().supportsOdaNumericDataTypes( VariableType.RESULT_SET_COLUMN ));
+        assertFalse( funcDefn.getVariableRestrictions().supportsOdaBooleanDataTypes( VariableType.QUERY_EXPRESSION ));
+        
+        // CURRENT_DATE function
+        funcDefn =
+            ResultExtensionExplorer.getInstance().getExtensionFunctionDefinition( TEST_EXTENSION_ID, "CURRENT_DATE" );
+        assertNotNull( funcDefn );
+        assertEquals( Integer.valueOf( 0 ), funcDefn.getMinArguments() );
+        assertEquals( Integer.valueOf( 0 ), funcDefn.getMaxArguments() );
+        
+        // no explicit variableRestriction; default to support RESULT_SET_COLUMN type
+        assertTrue( funcDefn.getVariableRestrictions().supportsVariableType( VariableType.RESULT_SET_COLUMN ));
+        assertFalse( funcDefn.getVariableRestrictions().hasDataTypeRestrictions( VariableType.RESULT_SET_COLUMN ));
+
+        assertTrue( funcDefn.getVariableRestrictions().supportsOdaDatetimeDataTypes( VariableType.RESULT_SET_COLUMN ));        
+        assertTrue( funcDefn.getVariableRestrictions().supportsOdaStringDataTypes( VariableType.RESULT_SET_COLUMN ));
+        assertTrue( funcDefn.getVariableRestrictions().supportsOdaNumericDataTypes( VariableType.RESULT_SET_COLUMN ));
+        assertTrue( funcDefn.getVariableRestrictions().supportsOdaBooleanDataTypes( VariableType.RESULT_SET_COLUMN ));
+    }
+    
+    public void testCreateCustomFunction() throws Exception
+    {
+        CustomFunction customFunc =
+            ExpressionFactory.createCustomFunction( TEST_EXTENSION_ID, "100" ); //$NON-NLS-1$
+        assertNotNull( customFunc );
+        assertEquals( "MyCustomFunction", customFunc.getClass().getSimpleName() );
+        assertTrue( customFunc.getDefinition().getName().equals( "CustomFunc" ) );
+        assertTrue( customFunc.getName().equals( "MyCustomFunc" ) );    // overriden by extended class
+        assertTrue( customFunc.getDefinition().getDisplayName().equals( "Custom Function" ) );        
+    }
+    
+    public void testCreateSimpleValueExpressionVariables() throws Exception
+    {
+        // simple Column value expression with name
+        String identifierText = "simple column 1";
+        ExpressionVariable exprVar = new ExpressionVariable( identifierText );
+        String varString = exprVar.toString();
+        assertEquals( VariableType.RESULT_SET_COLUMN, exprVar.getType() );
+        assertEquals( identifierText, exprVar.getIdentifier() );
+        
+        // simple Column value expression with name and pos
+        identifierText = "column 2";
+        exprVar = new ExpressionVariable( new ColumnIdentifier( 2, identifierText ) );
+        varString = exprVar.toString();
+        assertEquals( VariableType.RESULT_SET_COLUMN, exprVar.getType() );
+        assertEquals( identifierText, exprVar.getIdentifier() );
+        assertTrue( exprVar.getValueExpression() instanceof ColumnValueExpression );
+        assertEquals( 2, ((ColumnValueExpression) exprVar.getValueExpression()).getColumnNumber().intValue() );
+    }
+    
+    public void testCreateComplexValueExpressions() throws Exception
+    {
+        // CustomFunction with arguments
+        CustomFunction func = ExpressionFactory.createCustomFunction( TEST_EXTENSION_ID, "MOD" );
+        func.setArguments( (new ExpressionArguments()).addValue( new SimpleValueExpression( "Col") )
+                .addValue( 3 ));
+        ExpressionVariable exprVar = new ExpressionVariable( func );
+        String varString = exprVar.toString();
+        assertEquals( VariableType.QUERY_EXPRESSION, exprVar.getType() );
+        ExpressionArguments funcArgs = ((FunctionValueExpression) exprVar.getValueExpression()).getArguments();
+        assertEquals( 2, funcArgs.valueCount() );
+        assertEquals( "MOD", exprVar.getValueExpression().getName() );
+        assertEquals( "Col", funcArgs.getValueExpression( 0 ).getName() );
+        assertEquals( "3", funcArgs.getValueExpression( 1 ).getName() );
+
+        // test this extension supports the various complex expression types
+        ExtensionContributor contributor = getTestContributor();
+        assertTrue( contributor.supportsCombinedValueExpressionType() );
+        assertTrue( contributor.supportsNestedValueExpressionType() );
+        assertTrue( contributor.supportsFunctionValueExpressionType() );
+        
+        //  col1 * (1 + col2)
+        String complexExprText1 = "col1 * (1 + col2)"; //$NON-NLS-1$
+        CombinedValueExpressionOperator customAddOp = 
+            ExpressionFactory.getCombinedOperator( TEST_EXTENSION_ID, CombinedValueExpressionOperator.ADD );
+        CombinedValueExpressionOperator customMultiplyOp = 
+            ExpressionFactory.getCombinedOperator( TEST_EXTENSION_ID, CombinedValueExpressionOperator.MULTIPLY );
+
+        CombinedValueExpression complexExpr1 = new CombinedValueExpression( 
+                new ColumnValueExpression( new ColumnIdentifier( 1, "col1") ), 
+                customMultiplyOp, 
+                new NestedValueExpression(
+                        new CombinedValueExpression(
+                                new SimpleValueExpression( Integer.valueOf(1) ),
+                                customAddOp,
+                                new ColumnValueExpression( new ColumnIdentifier( 2, "col2") )) ) );
+        exprVar = new ExpressionVariable( complexExpr1 );
+        varString = exprVar.toString();
+        exprVar.getValueExpression().validate();
+        
+        //  (colA || UPPER( CustomerName || State )) + col1
+        String complexExprText2 = "(colA || UPPER( CustomerName || State )) + col1"; //$NON-NLS-1$
+            // custom concatenate operator overrides the default symbol '+'
+        CombinedValueExpressionOperator customConcatOp = 
+            ExpressionFactory.getCombinedOperator( TEST_EXTENSION_ID, CombinedValueExpressionOperator.CONCATENATE );
+        func = ExpressionFactory.createCustomFunction( TEST_EXTENSION_ID, "UPPER" );
+        
+        CombinedValueExpression customerNameState = new CombinedValueExpression(
+                new ColumnValueExpression( new ColumnIdentifier("CustomerName") ),
+                customConcatOp,
+                new ColumnValueExpression( new ColumnIdentifier("State") ));
+
+        func.setArguments( (new ExpressionArguments()).addValue( customerNameState ));
+        
+        CombinedValueExpression complexExpr2 = new CombinedValueExpression( 
+                new NestedValueExpression(
+                        new CombinedValueExpression(
+                                new SimpleValueExpression( "colA" ),
+                                customConcatOp,
+                                func ) ),
+                customAddOp, 
+                new ColumnValueExpression( new ColumnIdentifier( 1, "col1") ) );
+        exprVar = new ExpressionVariable( complexExpr2 );
+        varString = exprVar.toString();
+        exprVar.getValueExpression().validate();
+        
+        // test complex value expression in ExpressionArguments
+        ExpressionArguments args3 =
+            (new ExpressionArguments()).addValue( complexExpr1 ).addValue( 1 ).addValue( complexExpr2 );
+        assertEquals( 3, args3.valueCount() );
+        assertTrue( args3.getValueExpression(0) instanceof CombinedValueExpression );
+        assertTrue( args3.getValueExpression(1) instanceof SimpleValueExpression );
+        assertEquals( Integer.valueOf("1"), ((SimpleValueExpression)args3.getValueExpression(1)).getValue() );
+        assertTrue( args3.getValueExpression(2) instanceof CombinedValueExpression );        
+    }
+
+    private ExtensionContributor getTestContributor() throws OdaException
+    {
+        ExtensionContributor[] contributors =
+            ResultExtensionExplorer.getInstance().getContributorsOfDataSet( TARGET_DATA_SOURCE_ID, TARGET_DATA_SET_ID  );
+        assertTrue( contributors.length > 0 );
+        ExtensionContributor contributor = contributors[0];
+        return contributor;
+    }
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.tests/src/org/eclipse/datatools/connectivity/oda/util/manifest/tests/DataTypeMappingTest.java b/tests/org.eclipse.datatools.connectivity.oda.tests/src/org/eclipse/datatools/connectivity/oda/util/manifest/tests/DataTypeMappingTest.java
new file mode 100644
index 0000000..693f490
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.tests/src/org/eclipse/datatools/connectivity/oda/util/manifest/tests/DataTypeMappingTest.java
@@ -0,0 +1,71 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.util.manifest.tests;
+
+import java.sql.Types;
+import junit.framework.TestCase;
+import org.eclipse.datatools.connectivity.oda.util.manifest.DataTypeMapping;
+
+public class DataTypeMappingTest extends TestCase
+{
+
+    /**
+     * Test DataTypeMapping.toOdaDataTypeCode( String );
+     */
+    public void testToOdaDataTypeCode( )
+    {
+        assertEquals( Types.CHAR, 
+                DataTypeMapping.toOdaDataTypeCode( "String" ) );
+        assertEquals( Types.CHAR, 
+                DataTypeMapping.toOdaDataTypeCode( "STRING" ) );
+        assertEquals( Types.INTEGER, 
+                DataTypeMapping.toOdaDataTypeCode( "Integer" ) );
+        assertEquals( Types.INTEGER, 
+                DataTypeMapping.toOdaDataTypeCode( "integer" ) );
+        assertEquals( Types.DOUBLE, 
+                DataTypeMapping.toOdaDataTypeCode( "Double" ) );
+        assertEquals( Types.DOUBLE, 
+                DataTypeMapping.toOdaDataTypeCode( "DOUBLE" ) );
+        assertEquals( Types.DECIMAL, 
+                DataTypeMapping.toOdaDataTypeCode( "Decimal" ) );
+        assertEquals( Types.DATE, 
+                DataTypeMapping.toOdaDataTypeCode( "Date" ) );
+        assertEquals( Types.TIME, 
+                DataTypeMapping.toOdaDataTypeCode( "Time" ) );
+        assertEquals( Types.TIMESTAMP, 
+                DataTypeMapping.toOdaDataTypeCode( "Timestamp" ) );
+        assertEquals( Types.BLOB, 
+                DataTypeMapping.toOdaDataTypeCode( "Blob" ) );
+        assertEquals( Types.CLOB, 
+                DataTypeMapping.toOdaDataTypeCode( "Clob" ) );
+    }
+    
+    /**
+     * Test DataTypeMapping.toOdaDataTypeCode( String )
+     * handling of invalid input value.
+     */
+    public void testInvalidOdaDataTypeLiteral( )
+    {
+        assertEquals( Types.NULL, 
+                DataTypeMapping.toOdaDataTypeCode( null ) );
+        assertEquals( Types.NULL, 
+                DataTypeMapping.toOdaDataTypeCode( "" ) );
+        assertEquals( Types.NULL, 
+                DataTypeMapping.toOdaDataTypeCode( "  " ) );
+        assertEquals( Types.NULL, 
+                DataTypeMapping.toOdaDataTypeCode( "invalid" ) );
+    }
+
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.tests/src/org/eclipse/datatools/connectivity/oda/util/manifest/tests/ManifestExplorerTest.java b/tests/org.eclipse.datatools.connectivity.oda.tests/src/org/eclipse/datatools/connectivity/oda/util/manifest/tests/ManifestExplorerTest.java
new file mode 100644
index 0000000..a83a2fb
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.tests/src/org/eclipse/datatools/connectivity/oda/util/manifest/tests/ManifestExplorerTest.java
@@ -0,0 +1,214 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2006, 2007 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.util.manifest.tests;
+
+import java.sql.Types;
+import java.util.Hashtable;
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.oda.util.manifest.DataSetType;
+import org.eclipse.datatools.connectivity.oda.util.manifest.DataTypeMapping;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ExtensionManifest;
+import org.eclipse.datatools.connectivity.oda.util.manifest.JavaRuntimeInterface;
+import org.eclipse.datatools.connectivity.oda.util.manifest.ManifestExplorer;
+import org.eclipse.datatools.connectivity.oda.util.manifest.Property;
+import org.eclipse.datatools.connectivity.oda.util.manifest.RuntimeInterface;
+import org.eclipse.datatools.connectivity.oda.util.manifest.TraceLogging;
+
+import junit.framework.TestCase;
+
+/**
+ * JUnit Plugin Test of the oda.util.manifest package.
+ */
+public class ManifestExplorerTest extends TestCase
+{
+    private final String m_dtpFlatFileId = "org.eclipse.datatools.connectivity.oda.flatfile";
+    private final String m_expectedFFDataSetId = "org.eclipse.datatools.connectivity.oda.flatfile.dataSet";
+    
+    public void testGetDataSourceNames() throws Exception
+    {
+        Properties names = ManifestExplorer.getInstance().getDataSourceIdentifiers();
+        
+        assertEquals( "Flat File Data Source", names.getProperty( m_dtpFlatFileId ) );
+    }
+    
+    public void testGetExtensionConfigs() throws Exception
+    {
+        ExtensionManifest[] configs = 
+            ManifestExplorer.getInstance().getExtensionManifests();
+        verifyExtensionConfigs( configs, m_dtpFlatFileId );
+    }
+    
+    void verifyExtensionConfigs( ExtensionManifest[] configs, String driverId )
+    {
+        boolean isFound = false;
+        for( int i = 0; i < configs.length; i++ )
+        {
+            ExtensionManifest config = configs[i];
+            if( config.getDataSourceElementID().equals( driverId ) )
+            {
+                isFound = true;
+                break;
+            }
+        }
+        assertTrue( isFound );
+    }
+
+    public void testGetExtensionConfig() throws Exception
+    {
+        ExtensionManifest config = 
+            ManifestExplorer.getInstance().getExtensionManifest( m_dtpFlatFileId );
+        verifyFlatfileExtensionConfig( config );
+    }
+    
+    void verifyFlatfileExtensionConfig( ExtensionManifest config )
+        throws Exception
+    {
+        assertNotNull( config );
+        assertEquals( m_dtpFlatFileId, config.getDataSourceElementID() );
+        assertEquals( "Flat File Data Source", config.getDataSourceDisplayName() );
+        assertEquals( "3.0", config.getOdaVersion() );
+        
+        RuntimeInterface runtime = config.getRuntimeInterface();
+        assertTrue( runtime instanceof JavaRuntimeInterface );
+        JavaRuntimeInterface javaRuntime = (JavaRuntimeInterface) runtime;
+        assertEquals( "org.eclipse.datatools.connectivity.oda.flatfile.FlatFileDriver",
+                      javaRuntime.getDriverClass() );
+        assertFalse( javaRuntime.needSetThreadContextClassLoader() );
+        assertEquals( RuntimeInterface.JAVA_TYPE, javaRuntime.getInterfaceType() );
+        assertTrue( javaRuntime.getLibraryLocation().toString()
+                .endsWith( "org.eclipse.datatools.connectivity.oda.flatfile/" ) );
+        
+        TraceLogging traceLogging = config.getTraceLogging();
+        assertNull( traceLogging );
+        
+        myTestFFGetExtensionProperties( config );
+        
+        String[] dataSetTypeIds = config.getDataSetTypeIDs();
+        assertTrue( dataSetTypeIds.length == 1 );
+        
+        assertEquals( m_expectedFFDataSetId, dataSetTypeIds[0] );
+        myTestFFGetDataSetTypes( config );
+    }
+    
+    void myTestFFGetExtensionProperties( ExtensionManifest config )
+    {
+        Property[] dataSourceProps = config.getProperties();
+        assertTrue( dataSourceProps.length >= 3 );
+        
+        Hashtable propsList = new Hashtable( dataSourceProps.length );
+        for( int i = 0; i < dataSourceProps.length; i++ )
+        {
+            Property prop = dataSourceProps[i];
+            propsList.put( prop.getName(), prop );
+        }
+        
+        String expectedGroupName = null;
+        String expectedGroupDisplayName = null;
+        
+        Property aProp = (Property) propsList.get( "HOME" );
+        myTestPropertyAttributes( aProp,
+                                "Home &Folder",
+                                expectedGroupName,
+                                expectedGroupDisplayName,
+                                "string",
+                                true, null, false );
+        aProp = (Property) propsList.get( "CHARSET" );
+        myTestPropertyAttributes( aProp,
+                                "&Character Set",
+                                expectedGroupName,
+                                expectedGroupDisplayName,
+                                "string",
+                                true, null, false );
+        aProp = (Property) propsList.get( "INCLTYPELINE" );
+        myTestPropertyAttributes( aProp,
+                                "Use Second Line as &Data Type Indicator",
+                                expectedGroupName,
+                                expectedGroupDisplayName,
+                                "choice",
+                                true, "YES", false );
+    }
+    
+    void myTestPropertyAttributes( Property aProp,
+                                String expectedDisplayName,
+                                String expectedGroupName,
+                                String expectedGroupDisplayName,
+                                String expectedType,
+                                boolean expectedInheritability,
+                                String expectedDefaultValue,
+                                boolean expectedIsEncryptable )
+    {
+        assertNotNull( aProp );
+        assertEquals( expectedDisplayName, aProp.getDisplayName() );
+        if( expectedGroupName == null )
+            assertNull( aProp.getGroupName() );
+        else
+            assertEquals( expectedGroupName, aProp.getGroupName() );
+        if( expectedGroupDisplayName == null )
+            assertNull( aProp.getGroupDisplayName() );
+        else
+            assertEquals( expectedGroupDisplayName, aProp.getGroupDisplayName() );
+        assertEquals( expectedType, aProp.getType() );
+        assertEquals( expectedInheritability, aProp.canInherit() );
+        assertEquals( expectedDefaultValue, aProp.getDefaultValue() );
+        assertEquals( expectedIsEncryptable, aProp.isEncryptable() );
+    }
+    
+    void myTestFFGetDataSetTypes( ExtensionManifest config ) throws Exception
+    {
+        DataSetType[] dataSetTypes = config.getDataSetTypes();
+        assertTrue( dataSetTypes.length == 1 );
+        
+        DataSetType dataSetType = config.getDataSetType( m_expectedFFDataSetId );
+        assertEquals( m_expectedFFDataSetId, dataSetType.getID() );
+        assertEquals( "Flat File Data Set", dataSetType.getDisplayName() );
+                
+        for( int i = 0, n = sm_mappings.length; i < n; i++ )
+        {
+            Integer s = (Integer) sm_mappings[i][0];
+            DataTypeMapping mapping = dataSetType.getDataTypeMapping( s.shortValue() );
+            assertNotNull( mapping );
+            assertEquals( s.intValue(), mapping.getNativeTypeCode() );
+            assertEquals( sm_mappings[i][1], mapping.getNativeType() );
+            assertEquals( sm_mappings[i][2], mapping.getOdaScalarDataType() );
+            
+            int mappedOdaTypeCode = ((Integer) sm_mappings[i][3]).intValue();
+            assertEquals( mappedOdaTypeCode, mapping.getOdaScalarDataTypeCode() );
+            assertTrue( mapping.canConvertToOdaType( mappedOdaTypeCode ));
+            assertFalse( mapping.canConvertToOdaType( mappedOdaTypeCode + 1 ));
+
+            assertTrue( mapping.getAlternativeOdaDataTypes().length == 0 );
+            assertTrue( mapping.getAlternativeOdaDataTypeCodes().length == 0 );
+        }
+        
+        Property[] dataSetProps = dataSetType.getProperties();
+        assertEquals( 0, dataSetProps.length );        
+    }
+    
+    private static Object[][] sm_mappings = 
+    {
+        // native type code, native type name, primary oda type name, oda type code
+        { new Integer( (int) 4 ), "INT", "Integer", new Integer( Types.INTEGER ) },
+        { new Integer( (int) 8 ), "DOUBLE", "Double", new Integer( Types.DOUBLE ) },
+        { new Integer( (int) 12 ), "STRING", "String", new Integer( Types.CHAR ) },
+        { new Integer( (int) 91 ), "DATE", "Date", new Integer( Types.DATE ) },
+        { new Integer( (int) 92 ), "TIME", "Time", new Integer( Types.TIME ) },
+        { new Integer( (int) 93 ), "TIMESTAMP", "Timestamp", new Integer( Types.TIMESTAMP ) },
+        { new Integer( (int) 2004 ), "BLOB", "String", new Integer( Types.CHAR ) },
+        { new Integer( (int) 2005 ), "CLOB", "String", new Integer( Types.CHAR ) },
+        { new Integer( (int) 2 ), "BIGDECIMAL", "Decimal", new Integer( Types.DECIMAL ) }
+    };
+
+}
diff --git a/tests/org.eclipse.datatools.connectivity.oda.tests/src/org/eclipse/datatools/connectivity/oda/util/tests/ResourceIdentifiersTest.java b/tests/org.eclipse.datatools.connectivity.oda.tests/src/org/eclipse/datatools/connectivity/oda/util/tests/ResourceIdentifiersTest.java
new file mode 100644
index 0000000..c3153a5
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.oda.tests/src/org/eclipse/datatools/connectivity/oda/util/tests/ResourceIdentifiersTest.java
@@ -0,0 +1,102 @@
+/*
+ *************************************************************************
+ * Copyright (c) 2008, 2009 Actuate Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Actuate Corporation - initial API and implementation
+ *  
+ *************************************************************************
+ */
+
+package org.eclipse.datatools.connectivity.oda.util.tests;
+
+import java.io.IOException;
+import java.net.URI;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.oda.util.ResourceIdentifiers;
+import org.eclipse.datatools.connectivity.oda.util.ResourceIdentifiers.URILocator;
+import org.osgi.framework.Bundle;
+
+import junit.framework.TestCase;
+
+/**
+ * Test cases of the {@link ResourceIdentifiers} class.
+ */
+public class ResourceIdentifiersTest extends TestCase
+{
+
+    private static final String TEST_BUNDLE_NAME = "org.eclipse.datatools.connectivity.oda.tests"; //$NON-NLS-1$
+    
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+    }
+
+    protected void tearDown() throws Exception
+    {
+        super.tearDown();
+    }
+
+    public void testDefaultURILocators() throws Exception
+    {
+        URI baseURI = new URI( getPluginTestFilePath() );
+        ResourceIdentifiers ids = new ResourceIdentifiers();
+        ids.registerApplResourceURILocator( ids.new URILocator( baseURI ) );    // register the default URILocator
+        assertEquals( baseURI, ids.getApplResourceBaseURI() );
+        
+        URI expectedResource = new URI( getPluginTestFilePath() + "dummy" ); //$NON-NLS-1$
+        assertEquals( expectedResource, ids.getApplResourceURILocator().resolve( new URI( "dummy") ) ); //$NON-NLS-1$
+        assertEquals( expectedResource, ids.resolveApplResource(  new URI( "dummy") ) ); //$NON-NLS-1$
+        
+        // test that a default URILocator is automatically registered
+        ids.setDesignResourceBaseURI( baseURI );
+        assertTrue( ids.getDesignResourceURILocator() instanceof URILocator );
+        assertEquals( expectedResource, ids.getDesignResourceURILocator().resolve( new URI( "dummy") ) ); //$NON-NLS-1$
+        assertEquals( expectedResource, ids.resolveDesignResource( new URI( "dummy") ) ); //$NON-NLS-1$
+    }
+  
+    public void testCustomURILocators() throws Exception
+    {
+        URI baseURI = new URI( getPluginTestFilePath() );
+        ResourceIdentifiers ids = new ResourceIdentifiers();
+        ids.registerDesignResourceURILocator( new CustomURILocator( ids, baseURI ) );  // CustomURILocator always resolves to the baseURI
+        
+        assertEquals( baseURI, ids.getDesignResourceBaseURI() );
+        assertEquals( baseURI, ids.getDesignResourceURILocator().resolve( new URI( "dummy") ) ); //$NON-NLS-1$
+        assertEquals( baseURI, ids.resolveDesignResource( new URI( "dummy") ) ); //$NON-NLS-1$
+    }
+    
+    private String getPluginTestFilePath()
+        throws IOException
+    {       
+        Bundle bundle = Platform.getBundle( TEST_BUNDLE_NAME );
+        String testFilePath = FileLocator.getBundleFile( bundle ).toURL().toString();
+        return testFilePath;
+    }
+    
+    private class CustomURILocator extends URILocator
+    {
+
+        public CustomURILocator( ResourceIdentifiers identifiers,
+                URI baseURI )
+        {
+            identifiers.super( baseURI );
+        }
+
+        /* (non-Javadoc)
+         * @see org.eclipse.datatools.connectivity.oda.consumer.services.impl.ResourceIdentifiers.URILocator#locate(java.net.URI)
+         */
+        public URI resolve( URI uri )
+        {
+            // always resolves to the baseURI
+            return super.getBaseURI();
+        }
+        
+    }
+}
diff --git a/tests/org.eclipse.datatools.connectivity.test/.classpath b/tests/org.eclipse.datatools.connectivity.test/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.test/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/tests/org.eclipse.datatools.connectivity.test/.gitignore b/tests/org.eclipse.datatools.connectivity.test/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.test/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/tests/org.eclipse.datatools.connectivity.test/.project b/tests/org.eclipse.datatools.connectivity.test/.project
new file mode 100644
index 0000000..718658d
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.test/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.connectivity.test</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/tests/org.eclipse.datatools.connectivity.test/.settings/org.eclipse.jdt.core.prefs b/tests/org.eclipse.datatools.connectivity.test/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..73f4382
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.test/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Fri Apr 13 14:14:14 PDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.4
diff --git a/tests/org.eclipse.datatools.connectivity.test/META-INF/MANIFEST.MF b/tests/org.eclipse.datatools.connectivity.test/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..ac52512
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.test/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Plugin.Name
+Bundle-SymbolicName: org.eclipse.datatools.connectivity.test;singleton:=true
+Bundle-Version: 1.0.1.200802251
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.datatools.connectivity,
+ org.eclipse.core.runtime,
+ org.eclipse.core.resources,
+ org.eclipse.ui,
+ org.eclipse.jdt.junit,
+ org.eclipse.jdt.junit.runtime,
+ org.junit,
+ org.eclipse.ui.ide,
+ org.eclipse.datatools.connectivity.ui
+Bundle-Vendor: %Plugin.ProviderName
diff --git a/tests/org.eclipse.datatools.connectivity.test/about.html b/tests/org.eclipse.datatools.connectivity.test/about.html
new file mode 100644
index 0000000..1b7d275
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.test/about.html
@@ -0,0 +1,28 @@
+<html>
+<head>
+<title>About This Content</title>
+</head>
+<body>
+<div>
+<h3>About This Content</h3>
+<p>May 2, 2006</p>
+<h3>License</h3>
+<p>The Eclipse Foundation makes available all content in this plug-in
+(&quot;Content&quot;). Unless otherwise indicated below, the Content is
+provided to you under the terms and conditions of the Eclipse Public License
+Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available at <a
+href="http://www.eclipse.org/org/documents/epl-v10.php">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation,
+the Content is being redistributed by another party (&quot;Redistributor&quot;)
+and different terms and conditions may apply to your use of any object code in
+the Content. Check the RedistributorÂ’s license that was provided with the
+Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source
+code in the Content and such source code may be obtained at <a
+href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+<p>&nbsp;</p>
+</div>
+</body>
+</html>
diff --git a/tests/org.eclipse.datatools.connectivity.test/build.properties b/tests/org.eclipse.datatools.connectivity.test/build.properties
new file mode 100644
index 0000000..84a6e66
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.test/build.properties
@@ -0,0 +1,9 @@
+bin.includes = META-INF/,\
+               plugin.xml,\
+               test_files/,\
+               about.html,\
+               connectivityTest.jar
+jars.compile.order = connectivityTest.jar
+source.connectivityTest.jar = src/
+output.connectivityTest.jar = bin/
+src.includes = 
diff --git a/tests/org.eclipse.datatools.connectivity.test/build.xml b/tests/org.eclipse.datatools.connectivity.test/build.xml
new file mode 100644
index 0000000..0f595a4
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.test/build.xml
@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.datatools.connectivity.test" default="build.jars" basedir=".">
+
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${java.home}/lib">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins">
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.datatools.connectivity.test">
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.datatools.connectivity.test for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<zip destfile="${plugin.destination}/org.eclipse.datatools.connectivity.test_1.0.0.jar" basedir="${temp.folder}/org.eclipse.datatools.connectivity.test_1.0.0" filesonly="false" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="connectivityTest.jar" depends="init" unless="connectivityTest.jar" description="Create jar: org.eclipse.datatools.connectivity.test connectivityTest.jar.">
+		<delete dir="${temp.folder}/connectivityTest.jar.bin"/>
+		<mkdir dir="${temp.folder}/connectivityTest.jar.bin"/>
+		<path id="connectivityTest.jar.classpath">
+			<pathelement path="../org.eclipse.datatools.connectivity/bin/"/>
+			<pathelement path="../org.eclipse.datatools.connectivity/connectivity.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.core.runtime_3.2.0.v20060511.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.osgi_3.2.0.v20060510.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.equinox.common_3.2.0.v20060512.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.core.jobs_3.2.0.v20060511.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.core.runtime.compatibility.registry_3.2.0.v20060426/runtime_registry_compatibility.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.core.runtime.compatibility.registry_3.2.0.v20060426"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.equinox.registry_3.2.0.v20060511.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.equinox.preferences_3.2.0.v20060511.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.core.runtime.compatibility.registry_3.2.0.v20060426/@dot"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.core.contenttype_3.2.0.v20060511.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.core.runtime.compatibility.auth_3.2.0.v20060511.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.core.resources_3.2.0.v20060512.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.core.resources.compatibility_3.2.0.v20060510.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.core.resources.win32_3.2.0.v20060510.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.core.runtime.compatibility_3.1.100.v20060511.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.update.configurator_3.2.0.v20060511.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.ant.core_3.1.100.v20060511.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.core.variables_3.1.100.v20060517.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.core.expressions_3.2.0.v20060518-0800.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.core.filesystem_1.0.0.v20060510.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.core.filesystem.win32.x86_1.0.0.v20060510.jar"/>
+			<pathelement path="../../eclipse/plugins/com.ibm.icu_3.4.4.1.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.ui_3.2.0.I20060526-0010.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.swt_3.2.0.v3232k.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.swt.win32.win32.x86_3.2.0.v3232g.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.jface_3.2.0.I20060526-0010a.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.core.commands_3.2.0.I20060511-0800a.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.ui.workbench_3.2.0.I20060526-0010.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.ui.workbench.compatibility_3.2.0.I20060511-2000/@dot"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.ui.workbench.compatibility_3.2.0.I20060511-2000/compatibility.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.help_3.2.0.v20060518.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.jdt.junit_3.2.0.v20060518-0800/junitsupport.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.ui.ide_3.2.0.I20060519-0010.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.ui.win32_3.2.0.I20060511-2000.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.ui.views_3.2.0.I20060511-2000.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.update.core_3.2.0.v20060511.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.update.core.win32_3.2.0.v20060511.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.update.ui_3.2.0.v20060511.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.ui.forms_3.2.0.v20060510.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.jface.text_3.2.0.v20060518-0800.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.text_3.2.0.v20060518-0800.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.ui.workbench.texteditor_3.2.0.v20060526-0010.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.ui.editors_3.2.0.v20060518-0800.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.core.filebuffers_3.2.0.v20060518-0800.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.debug.core_3.2.0.v20060525.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.debug.ui_3.2.0.v20060525a.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.ui.console_3.1.100.v20060518.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.jdt.core_3.2.0.v_668.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.team.core_3.2.0.I200605181830.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.jdt.ui_3.2.0.v20060526-0010.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.search_3.2.0.v20060526-0010.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.jdt.launching_3.2.0.v20060525.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.jdt.debug_3.2.0.v20060518/jdi.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.jdt.debug_3.2.0.v20060518/jdimodel.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.jdt.debug_3.2.0.v20060518/tools.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.compare_3.2.0.v20060525.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.team.ui_3.2.0.I200605181830.jar"/>
+			<pathelement path="../org.eclipse.ui.navigator/bin"/>
+			<pathelement path="../org.eclipse.ui.navigator/@dot"/>
+			<pathelement path="../org.eclipse.ui.navigator.resources/bin"/>
+			<pathelement path="../org.eclipse.ui.navigator.resources/@dot"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.ui.views.properties.tabbed_3.2.0.I20060511-0800a.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.ltk.core.refactoring_3.2.0.v20060526-0010.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.ltk.ui.refactoring_3.2.0.v20060526-0010.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.jdt.core.manipulation_1.0.0.v20060518-0800.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.jdt.debug.ui_3.2.0.v20060517.jar"/>
+			<pathelement path="../../eclipse/plugins/org.eclipse.jdt.junit.runtime_3.2.0.v20060526-0010/junitruntime.jar"/>
+			<pathelement path="../../eclipse/plugins/org.junit_3.8.1/junit.jar"/>
+			<pathelement path="../org.eclipse.datatools.connectivity.ui/bin/"/>
+			<pathelement path="../org.eclipse.datatools.connectivity.ui/connectivityui.jar"/>
+			<pathelement path="@dot"/>
+			<pathelement path="${build.result.folder}/../org.eclipse.datatools.connectivity.test/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${temp.folder}/connectivityTest.jar.bin" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="connectivityTest.jar.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler.connectivityTest.jar.args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+			<compilerarg line="-log '${temp.folder}/connectivityTest.jar.bin${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+		</javac>
+		<!-- Copy necessary resources -->
+		<copy todir="${temp.folder}/connectivityTest.jar.bin" failonerror="true" overwrite="false">
+			<fileset dir="src/" excludes="**/*.java, **/package.htm*"			/>
+		</copy>
+		<mkdir dir="${build.result.folder}"/>
+		<jar destfile="${build.result.folder}/connectivityTest.jar" basedir="${temp.folder}/connectivityTest.jar.bin"/>
+		<delete dir="${temp.folder}/connectivityTest.jar.bin"/>
+	</target>
+
+	<target name="connectivityTestsrc.zip" depends="init" unless="connectivityTestsrc.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<zip destfile="${build.result.folder}/connectivityTestsrc.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/" includes="**/*.java"			/>
+		</zip>
+	</target>
+
+	<target name="build.jars" depends="init" description="Build all the jars for the plug-in: org.eclipse.datatools.connectivity.test.">
+		<available property="connectivityTest.jar" file="${build.result.folder}/connectivityTest.jar"/>
+		<antcall target="connectivityTest.jar"/>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="connectivityTestsrc.zip" file="${build.result.folder}/connectivityTestsrc.zip"/>
+		<antcall target="connectivityTestsrc.zip"/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.datatools.connectivity.test_1.0.0"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.datatools.connectivity.test_1.0.0" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}" includes="connectivityTest.jar"			/>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.datatools.connectivity.test_1.0.0" failonerror="true" overwrite="false">
+			<fileset dir="${basedir}" includes="META-INF/,plugin.xml,test_files/,about.html,connectivityTest.jar"			/>
+		</copy>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.datatools.connectivity.test_1.0.0"/>
+		<copy file="${build.result.folder}/connectivityTestsrc.zip" todir="${destination.temp.folder}/org.eclipse.datatools.connectivity.test_1.0.0" failonerror="false" overwrite="false"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.datatools.connectivity.test_1.0.0" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}" includes=""			/>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.datatools.connectivity.test_1.0.0"/>
+		<copy file="${temp.folder}/connectivityTest.jar.bin${logExtension}" todir="${destination.temp.folder}/org.eclipse.datatools.connectivity.test_1.0.0" failonerror="false" overwrite="false"/>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.datatools.connectivity.test of all the zips, jars and logs created.">
+		<delete file="${build.result.folder}/connectivityTest.jar"/>
+		<delete file="${build.result.folder}/connectivityTestsrc.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.datatools.connectivity.test_1.0.0.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.datatools.connectivity.test_1.0.0.zip"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="F:/Eclipse3.2RC6/workspace/org.eclipse.datatools.connectivity.test" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.datatools.connectivity.test.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}" includes="**/*.bin${logExtension}"			/>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.datatools.connectivity.test_1.0.0.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+</project>
diff --git a/tests/org.eclipse.datatools.connectivity.test/plugin.properties b/tests/org.eclipse.datatools.connectivity.test/plugin.properties
new file mode 100644
index 0000000..1691b33
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.test/plugin.properties
@@ -0,0 +1,12 @@
+################################################################################
+## Copyright (c) 2006 Sybase, Inc.
+## All rights reserved. This program and the accompanying materials
+## are made available under the terms of the Eclipse Public License v1.0
+## which accompanies this distribution, and is available at
+## http://www.eclipse.org/legal/epl-v10.html
+##
+## Contributors:
+##    Sybase, Inc. - initial API and implementation
+################################################################################ 
+Plugin.Name = Eclipse Data Tools Platform Test Plug-in
+Plugin.ProviderName = Eclipse.org
diff --git a/tests/org.eclipse.datatools.connectivity.test/plugin.xml b/tests/org.eclipse.datatools.connectivity.test/plugin.xml
new file mode 100644
index 0000000..c3ecd33
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.test/plugin.xml
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+	<extension
+	      id="com.sybase.stf.servers.drivers.test"
+	      name="Test Drivers"
+	      point="org.eclipse.datatools.connectivity.driverExtension">
+	   <category
+	         name="Test"
+	         id="org.eclipse.datatools.connectivity.drivers.test.category"
+	         description="Test Drivers">
+	   </category>
+	   <driverTemplate
+	         id="org.eclipse.datatools.connectivity.drivers.test.driver1"
+	         name="Driver 1"
+	         parentCategory="org.eclipse.datatools.connectivity.drivers.test.category"
+	         description="Test Driver 1"
+	         jarList="[PLUGIN]\test_files\dummy1.jar">
+	         <properties>
+	         	<property
+	         		id="org.eclipse.datatools.connectivity.drivers.test.driver1.prop1"
+	         		name="Property1"
+	         		visible="false"
+	         		value="Some Value"/>
+	         	<property
+	         		id="org.eclipse.datatools.connectivity.test.driver1.prop2"
+	         		name="Property2"
+	         		value="Some sample value"
+	         		visible="true"
+	         		description="Property 2"/>	
+	         </properties>
+	   </driverTemplate>
+	   <driverTemplate
+	         id="org.eclipse.datatools.connectivity.drivers.test.driver2"
+	         name="Driver 2"
+	         parentCategory="org.eclipse.datatools.connectivity.drivers.test.category"
+	         description="Test Driver 2"
+	         createDefault="false"
+	         jarList="dummy2.jar">
+	         <properties>
+	         	<property
+	         		id="org.eclipse.datatools.connectivity.drivers.test.driver1.prop3"
+	         		name="Property3"
+	         		visible="false"
+	         		value="Some Value"/>
+	         	<property
+	         		id="org.eclipse.datatools.connectivity.drivers.test.driver1.prop4"
+	         		name="Property4"
+	         		value="Some sample value"
+	         		visible="true"
+	         		description="Property 4"/>
+           <property
+                 description="Property5"
+                 generated="false"
+                 id="org.eclipse.datatools.connectivity.test.property5"
+                 name="Property5"
+                 required="true"
+                 value="some value for property 5"
+                 visible="true">
+           </property>	
+	         </properties>
+	   </driverTemplate>
+	   <driverTemplate
+	         id="org.eclipse.datatools.connectivity.drivers.test.driver3"
+	         name="Old Driver 3"
+	         parentCategory="org.eclipse.datatools.connectivity.drivers.test.category"
+	         description="Test Driver 3"
+	         createDefault="false"
+	         jarList="[PLUGIN]\test_files\dummy1.jar">
+	         <properties>
+	         	<property
+	         		id="org.eclipse.datatools.connectivity.drivers.test.driver3.prop1"
+	         		name="OldProperty1"
+	         		visible="true"
+	         		value="Some Value 1 for Migration Test Driver 3"/>
+	         	<property
+	         		id="org.eclipse.datatools.connectivity.drivers.test.driver3.prop2"
+	         		name="OldProperty2"
+	         		value="Some Value 2 for Migration Test Driver 3"
+	         		visible="true"
+	         		description="Property 2"/>	
+	         </properties>
+             <migration
+                newDriverTemplateID="org.eclipse.datatools.connectivity.drivers.test.driver4">
+             <propertyMigration
+                   oldPropertyKey="org.eclipse.datatools.connectivity.drivers.test.driver3.prop1"
+                   newPropertyKey="org.eclipse.datatools.connectivity.drivers.test.driver4.prop3"
+                   newValue="some migrated value 1">
+             </propertyMigration>
+             <propertyMigration
+                   oldPropertyKey="org.eclipse.datatools.connectivity.drivers.test.driver3.prop2"
+                   newPropertyKey="org.eclipse.datatools.connectivity.drivers.test.driver4.prop4"
+                   newValue="some migrated value 2">
+             </propertyMigration>
+          </migration>
+	   </driverTemplate>
+	   <driverTemplate
+	         id="org.eclipse.datatools.connectivity.drivers.test.driver4"
+	         name="New Driver 4"
+	         parentCategory="org.eclipse.datatools.connectivity.drivers.test.category"
+	         description="Test Driver 4"
+	         createDefault="false"
+	         jarList="[PLUGIN]\test_files\dummy1.jar">
+	         <properties>
+	         	<property
+	         		id="org.eclipse.datatools.connectivity.drivers.test.driver4.prop3"
+	         		name="NewProperty3"
+	         		visible="true"
+	         		value="Some Value 3 for Migration Test Driver 4"/>
+	         	<property
+	         		id="org.eclipse.datatools.connectivity.drivers.test.driver4.prop4"
+	         		name="NewProperty4"
+	         		value="Some Value 4 for Migration Test Driver 4"
+	         		visible="true"
+	         		description="Property 4"/>	
+	         	<property
+	         		id="org.eclipse.datatools.connectivity.drivers.test.driver4.prop5"
+	         		name="NewProperty5"
+	         		value="Some Value 5 for Migration Test Driver 4"
+	         		visible="true"
+	         		description="Property 5"/>	
+	         </properties>
+	   </driverTemplate>
+	</extension>
+ <extension
+       point="org.eclipse.datatools.connectivity.driverExtension">
+    <driverTemplateOverride
+          id="org.eclipse.datatools.connectivity.drivers.test.override1"
+          jarList="[PLUGIN]\test_files\dummy2.jar"
+          name="Override Driver"
+          targetId="org.eclipse.datatools.connectivity.drivers.test.driver2">
+       <propertyOverrides>
+          <propertyOverride
+                name="Property6"
+                targetId="org.eclipse.datatools.connectivity.drivers.test.driver1.prop4"
+                >
+          </propertyOverride>
+          <propertyOverride
+                remove="true"
+                targetId="org.eclipse.datatools.connectivity.test.property5">
+          </propertyOverride>
+       </propertyOverrides>
+    </driverTemplateOverride>
+    <driverTemplateOverride
+          name="Overridden Override Driver"
+          targetId="org.eclipse.datatools.connectivity.drivers.test.override1">
+       <propertyOverrides>
+          <propertyOverride
+                targetId="org.eclipse.datatools.connectivity.drivers.test.driver1.prop4"
+                value="Override Value">
+          </propertyOverride>
+       </propertyOverrides>
+    </driverTemplateOverride>
+ </extension>
+</plugin>
diff --git a/tests/org.eclipse.datatools.connectivity.test/src/org/eclipse/datatools/connectivity/drivers/models/test/CategoryDescriptorTest.java b/tests/org.eclipse.datatools.connectivity.test/src/org/eclipse/datatools/connectivity/drivers/models/test/CategoryDescriptorTest.java
new file mode 100644
index 0000000..67ea95d
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.test/src/org/eclipse/datatools/connectivity/drivers/models/test/CategoryDescriptorTest.java
@@ -0,0 +1,179 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.drivers.models.test;
+
+import java.util.List;
+
+import org.eclipse.datatools.connectivity.drivers.models.CategoryDescriptor;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+/**
+ * Tests the Driver category extension
+ * 
+ * @author brianf
+ *
+ */
+public class CategoryDescriptorTest extends TestCase {
+
+	private static String stashCategoryID = null;
+	
+	public final void testGetCategoryDescriptors() {
+		CategoryDescriptor[] descriptors =
+				CategoryDescriptor.getCategoryDescriptors();
+		Assert.assertNotNull(descriptors);
+		Assert.assertTrue(descriptors.length > 0);
+	}
+
+	public final void testGetCategoryDescriptor() {
+		CategoryDescriptor[] descriptors =
+			CategoryDescriptor.getCategoryDescriptors();
+		stashCategoryID = descriptors[0].getId();
+		
+		CategoryDescriptor cd = CategoryDescriptor.getCategoryDescriptor(stashCategoryID);
+		Assert.assertNotNull(cd);
+	}
+
+	public final void testGetRootCategories() {
+		CategoryDescriptor[] descriptors =
+			CategoryDescriptor.getRootCategories();
+		Assert.assertNotNull(descriptors);
+		Assert.assertTrue(descriptors.length > 0);
+	}
+
+	public final void testGetParent() {
+		CategoryDescriptor[] descriptors =
+			CategoryDescriptor.getCategoryDescriptors();
+		for (int i = 0; i < descriptors.length; i++) {
+			CategoryDescriptor cd = descriptors[i];
+			if ( cd.getParent() != null) {
+				Assert.assertNotNull(cd.getParent());
+				break;
+			}
+		}
+	}
+
+	public final void testGetChildCategories() {
+		CategoryDescriptor[] descriptors =
+			CategoryDescriptor.getRootCategories();
+		for (int i = 0; i < descriptors.length; i++) {
+			CategoryDescriptor cd = descriptors[i];
+			List children = cd.getChildCategories();
+			if (children != null && children.size() > 0) {
+				Assert.assertNotNull(children);
+				Assert.assertTrue(children.size() > 0);
+				break;
+			}
+		}
+	}
+
+	public final void testGetAssociatedDriverTypes() {
+		CategoryDescriptor[] descriptors =
+			CategoryDescriptor.getRootCategories();
+		for (int i = 0; i < descriptors.length; i++) {
+			CategoryDescriptor cd = descriptors[i];
+			List driverTypes = cd.getAssociatedDriverTypes();
+			if (driverTypes != null && driverTypes.size() > 0) {
+				Assert.assertNotNull(driverTypes);
+				Assert.assertTrue(driverTypes.size() > 0);
+				break;
+			}
+		}
+	}
+
+	public final void testGetId() {
+		CategoryDescriptor[] descriptors =
+			CategoryDescriptor.getCategoryDescriptors();
+		for (int i = 0; i < descriptors.length; i++) {
+			CategoryDescriptor cd = descriptors[i];
+			Assert.assertTrue(cd.getId() != null);
+			Assert.assertTrue(cd.getId().length() > 0);
+		}
+	}
+
+	public final void testGetParentCategory() {
+		CategoryDescriptor[] descriptors =
+			CategoryDescriptor.getRootCategories();
+		for (int i = 0; i < descriptors.length; i++) {
+			CategoryDescriptor cd = descriptors[i];
+			List children = cd.getChildCategories();
+			if (children != null && children.size() > 0) {
+				CategoryDescriptor child = (CategoryDescriptor) children.get(0);
+				String parent = child.getParentCategory();
+				Assert.assertNotNull(parent);
+				Assert.assertTrue(cd.getId().equals(parent));
+				break;
+			}
+		}
+	}
+
+	public final void testGetElement() {
+		CategoryDescriptor[] descriptors =
+			CategoryDescriptor.getRootCategories();
+		for (int i = 0; i < descriptors.length; i++) {
+			CategoryDescriptor cd = descriptors[i];
+			Assert.assertNotNull(cd.getElement());
+		}
+	}
+
+	public final void testGetName() {
+		CategoryDescriptor[] descriptors =
+			CategoryDescriptor.getRootCategories();
+		for (int i = 0; i < descriptors.length; i++) {
+			CategoryDescriptor cd = descriptors[i];
+			Assert.assertNotNull(cd.getName());
+			Assert.assertTrue(cd.getName().length() > 0);
+		}
+	}
+
+	public final void testGetDescription() {
+		CategoryDescriptor[] descriptors =
+			CategoryDescriptor.getRootCategories();
+		for (int i = 0; i < descriptors.length; i++) {
+			CategoryDescriptor cd = descriptors[i];
+			if (cd.getDescription() != null &&
+					cd.getDescription().length() > 0) {
+				Assert.assertNotNull(cd.getDescription());
+				Assert.assertTrue(cd.getDescription().length() > 0);
+				break;
+			}
+		}
+	}
+
+	public final void testCompareTo() {
+		CategoryDescriptor[] descriptors =
+			CategoryDescriptor.getRootCategories();
+		for (int i = 0; i < descriptors.length; i++) {
+			CategoryDescriptor cd = descriptors[i];
+			List children = cd.getChildCategories();
+			if (children != null && children.size() > 0) {
+				CategoryDescriptor child = (CategoryDescriptor) children.get(0);
+				int result = child.compareTo(cd);
+				Assert.assertTrue(result < 0 || result == 0 || result > 0);
+				break;
+			}
+		}
+	}
+
+	public final void testToString() {
+		CategoryDescriptor[] descriptors =
+			CategoryDescriptor.getRootCategories();
+		for (int i = 0; i < descriptors.length; i++) {
+			CategoryDescriptor cd = descriptors[i];
+			String toString = cd.toString();
+			Assert.assertNotNull(toString);
+			Assert.assertTrue(toString.length() > 0);
+			break;
+		}
+	}
+
+}
diff --git a/tests/org.eclipse.datatools.connectivity.test/src/org/eclipse/datatools/connectivity/drivers/models/test/OverrideTemplateDescriptorTest.java b/tests/org.eclipse.datatools.connectivity.test/src/org/eclipse/datatools/connectivity/drivers/models/test/OverrideTemplateDescriptorTest.java
new file mode 100644
index 0000000..1256b31
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.test/src/org/eclipse/datatools/connectivity/drivers/models/test/OverrideTemplateDescriptorTest.java
@@ -0,0 +1,199 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.drivers.models.test;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.datatools.connectivity.drivers.models.CategoryDescriptor;
+import org.eclipse.datatools.connectivity.drivers.models.OverrideTemplateDescriptor;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+/**
+ * Tests the driver template extension
+ * 
+ * @author brianf
+ *
+ */
+public class OverrideTemplateDescriptorTest extends TestCase {
+
+	public final void testGetDriverTemplateDescriptors() {
+		OverrideTemplateDescriptor[] descriptors = 
+			OverrideTemplateDescriptor.getOverrideDriverTemplateDescriptors();
+		Assert.assertNotNull(descriptors);
+		Assert.assertTrue(descriptors.length > 0);
+	}
+
+	public final void testGetDriverTemplateDescriptor() {
+		OverrideTemplateDescriptor[] descriptors = 
+			OverrideTemplateDescriptor.getOverrideDriverTemplateDescriptors();
+		String id = descriptors[0].getTargetId();
+		OverrideTemplateDescriptor[] descriptor = 
+			OverrideTemplateDescriptor.getByDriverTemplate(id);
+		Assert.assertNotNull(descriptor);
+	}
+
+	public final void testGetId() {
+		OverrideTemplateDescriptor[] descriptors = 
+			OverrideTemplateDescriptor.getOverrideDriverTemplateDescriptors();
+		String id = descriptors[0].getTargetId();
+		Assert.assertNotNull(id);
+		Assert.assertTrue(id.length() > 0);
+	}
+
+	public final void testGetParentCategory() {
+		OverrideTemplateDescriptor[] descriptors = 
+			OverrideTemplateDescriptor.getOverrideDriverTemplateDescriptors();
+		String category = descriptors[0].getParentCategory();
+		Assert.assertNotNull(category);
+		Assert.assertTrue(category.length() > 0);
+		
+		CategoryDescriptor cd =
+			CategoryDescriptor.getCategoryDescriptor(category);
+		Assert.assertNotNull(cd);
+	}
+
+	public final void testGetJarList() {
+		OverrideTemplateDescriptor[] descriptors = 
+			OverrideTemplateDescriptor.getOverrideDriverTemplateDescriptors();
+		for (int i = 0; i < descriptors.length; i++) {
+			OverrideTemplateDescriptor td = descriptors[i];
+			String jarList = td.getJarList();
+			if (jarList != null && jarList.length() > 0) {
+				Assert.assertNotNull(jarList);
+				Assert.assertTrue(jarList.length() > 0);
+				break;
+			}
+		}
+	}
+
+	public final void testGetCreateDefaultFlag() {
+		OverrideTemplateDescriptor[] descriptors = 
+			OverrideTemplateDescriptor.getOverrideDriverTemplateDescriptors();
+		String temp = descriptors[0].getCreateDefaultFlag();
+		boolean flag = false;
+		if (temp != null && temp.length() > 0)
+			flag = Boolean.getBoolean(temp.toLowerCase());
+		if (flag)
+			Assert.assertTrue(flag);
+		else
+			Assert.assertFalse(flag);
+	}
+
+	public final void testGetEmptyJarListIsOKFlag() {
+		OverrideTemplateDescriptor[] descriptors = 
+			OverrideTemplateDescriptor.getOverrideDriverTemplateDescriptors();
+		String temp = descriptors[0].getEmptyJarListIsOKFlag();
+		boolean flag = false;
+		if (temp != null && temp.length() > 0)
+			flag = Boolean.getBoolean(temp.toLowerCase());
+		if (flag)
+			Assert.assertTrue(flag);
+		else
+			Assert.assertFalse(flag);
+	}
+
+	public final void testGetElement() {
+		OverrideTemplateDescriptor[] descriptors = 
+			OverrideTemplateDescriptor.getOverrideDriverTemplateDescriptors();
+		Assert.assertNotNull(descriptors[0].getElement());
+	}
+
+	public final void testGetName() {
+		OverrideTemplateDescriptor[] descriptors = 
+			OverrideTemplateDescriptor.getOverrideDriverTemplateDescriptors();
+		String name = descriptors[0].getName();
+		Assert.assertNotNull(name);
+		Assert.assertTrue(name.length() > 0);
+	}
+
+	public final void testGetProperties() {
+		OverrideTemplateDescriptor[] descriptors = 
+			OverrideTemplateDescriptor.getOverrideDriverTemplateDescriptors();
+		for (int i = 0; i < descriptors.length; i++) {
+			IConfigurationElement[] elements = 
+				descriptors[i].getOverrideProperties();
+			if (elements != null && elements.length > 0) {
+				Assert.assertNotNull(elements);
+				Assert.assertTrue(elements.length > 0);
+				break;
+			}
+		}
+	}
+
+	public final void testGetPropertyValue() {
+		OverrideTemplateDescriptor[] descriptors = 
+			OverrideTemplateDescriptor.getOverrideDriverTemplateDescriptors();
+		for (int i = 0; i < descriptors.length; i++) {
+			IConfigurationElement[] elements = 
+				descriptors[i].getOverrideProperties();
+			if (elements != null && elements.length > 0) {
+				String propId = elements[0].getAttribute("id");
+				String value =
+					descriptors[i].getPropertyValueFromId(propId);
+				Assert.assertNotNull(value);
+				Assert.assertTrue(value.length() > 0);
+				break;
+			}
+		}
+	}
+
+	public final void testGetPropertyIDFromName() {
+		OverrideTemplateDescriptor[] descriptors = 
+			OverrideTemplateDescriptor.getOverrideDriverTemplateDescriptors();
+		for (int i = 0; i < descriptors.length; i++) {
+			IConfigurationElement[] elements = 
+				descriptors[i].getOverrideProperties();
+			if (elements != null && elements.length > 0) {
+				String propName = elements[0].getAttribute("name");
+				String id =
+					descriptors[i].getPropertyIDFromName(propName);
+				Assert.assertNotNull(id);
+				Assert.assertTrue(id.length() > 0);
+				break;
+			}
+		}
+	}
+
+	public final void testGetDescription() {
+		OverrideTemplateDescriptor[] descriptors = 
+			OverrideTemplateDescriptor.getOverrideDriverTemplateDescriptors();
+		for (int i = 0; i < descriptors.length; i++) {
+			String description = descriptors[i].getDescription();
+			if (description != null &&
+					description.length() > 0) {
+				Assert.assertNotNull(description);
+				Assert.assertTrue(description.length() > 0);
+				break;
+			}
+		}
+	}
+
+	public final void testCompareTo() {
+		OverrideTemplateDescriptor[] descriptors = 
+			OverrideTemplateDescriptor.getOverrideDriverTemplateDescriptors();
+		OverrideTemplateDescriptor td1 = descriptors[0];
+		OverrideTemplateDescriptor td2 = descriptors[1];
+		int result = td1.compareTo(td2);
+		Assert.assertTrue(result < 0 || result == 0 || result > 0);
+	}
+
+	public final void testHasVisibleProperties() {
+		OverrideTemplateDescriptor[] descriptors = 
+			OverrideTemplateDescriptor.getOverrideDriverTemplateDescriptors();
+		boolean flag = descriptors[0].hasVisibleProperties();
+		if (flag)
+			Assert.assertTrue(flag);
+		else
+			Assert.assertFalse(flag);
+	}
+
+}
diff --git a/tests/org.eclipse.datatools.connectivity.test/src/org/eclipse/datatools/connectivity/drivers/models/test/TemplateDescriptorTest.java b/tests/org.eclipse.datatools.connectivity.test/src/org/eclipse/datatools/connectivity/drivers/models/test/TemplateDescriptorTest.java
new file mode 100644
index 0000000..324fb3b
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.test/src/org/eclipse/datatools/connectivity/drivers/models/test/TemplateDescriptorTest.java
@@ -0,0 +1,200 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.drivers.models.test;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.datatools.connectivity.drivers.models.CategoryDescriptor;
+import org.eclipse.datatools.connectivity.drivers.models.TemplateDescriptor;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+/**
+ * Tests the driver template extension
+ * 
+ * @author brianf
+ *
+ */
+public class TemplateDescriptorTest extends TestCase {
+
+	public final void testGetDriverTemplateDescriptors() {
+		TemplateDescriptor[] descriptors = 
+			TemplateDescriptor.getDriverTemplateDescriptors();
+		Assert.assertNotNull(descriptors);
+		Assert.assertTrue(descriptors.length > 0);
+	}
+
+	public final void testGetDriverTemplateDescriptor() {
+		TemplateDescriptor[] descriptors = 
+			TemplateDescriptor.getDriverTemplateDescriptors();
+		String id = descriptors[0].getId();
+		TemplateDescriptor descriptor = 
+			TemplateDescriptor.getDriverTemplateDescriptor(id);
+		Assert.assertNotNull(descriptor);
+	}
+
+	public final void testGetParent() {
+		TemplateDescriptor[] descriptors = 
+			TemplateDescriptor.getDriverTemplateDescriptors();
+		CategoryDescriptor cd = descriptors[0].getParent();
+		Assert.assertNotNull(cd);
+	}
+
+	public final void testGetId() {
+		TemplateDescriptor[] descriptors = 
+			TemplateDescriptor.getDriverTemplateDescriptors();
+		String id = descriptors[0].getId();
+		Assert.assertNotNull(id);
+		Assert.assertTrue(id.length() > 0);
+	}
+
+	public final void testGetParentCategory() {
+		TemplateDescriptor[] descriptors = 
+			TemplateDescriptor.getDriverTemplateDescriptors();
+		String category = descriptors[0].getParentCategory();
+		Assert.assertNotNull(category);
+		Assert.assertTrue(category.length() > 0);
+		
+		CategoryDescriptor cd =
+			CategoryDescriptor.getCategoryDescriptor(category);
+		Assert.assertNotNull(cd);
+	}
+
+	public final void testGetJarList() {
+		TemplateDescriptor[] descriptors = 
+			TemplateDescriptor.getDriverTemplateDescriptors();
+		for (int i = 0; i < descriptors.length; i++) {
+			TemplateDescriptor td = descriptors[i];
+			String jarList = td.getJarList();
+			if (jarList != null && jarList.length() > 0) {
+				Assert.assertNotNull(jarList);
+				Assert.assertTrue(jarList.length() > 0);
+				break;
+			}
+		}
+	}
+
+	public final void testGetCreateDefaultFlag() {
+		TemplateDescriptor[] descriptors = 
+			TemplateDescriptor.getDriverTemplateDescriptors();
+		boolean flag = descriptors[0].getCreateDefaultFlag();
+		if (flag)
+			Assert.assertTrue(flag);
+		else
+			Assert.assertFalse(flag);
+	}
+
+	public final void testGetEmptyJarListIsOKFlag() {
+		TemplateDescriptor[] descriptors = 
+			TemplateDescriptor.getDriverTemplateDescriptors();
+		boolean flag = descriptors[0].getEmptyJarListIsOKFlag();
+		if (flag)
+			Assert.assertTrue(flag);
+		else
+			Assert.assertFalse(flag);
+	}
+
+	public final void testGetElement() {
+		TemplateDescriptor[] descriptors = 
+			TemplateDescriptor.getDriverTemplateDescriptors();
+		Assert.assertNotNull(descriptors[0].getElement());
+	}
+
+	public final void testGetName() {
+		TemplateDescriptor[] descriptors = 
+			TemplateDescriptor.getDriverTemplateDescriptors();
+		String name = descriptors[0].getName();
+		Assert.assertNotNull(name);
+		Assert.assertTrue(name.length() > 0);
+	}
+
+	public final void testGetProperties() {
+		TemplateDescriptor[] descriptors = 
+			TemplateDescriptor.getDriverTemplateDescriptors();
+		for (int i = 0; i < descriptors.length; i++) {
+			IConfigurationElement[] elements = 
+				descriptors[i].getProperties();
+			if (elements != null && elements.length > 0) {
+				Assert.assertNotNull(elements);
+				Assert.assertTrue(elements.length > 0);
+				break;
+			}
+		}
+	}
+
+	public final void testGetPropertyValue() {
+		TemplateDescriptor[] descriptors = 
+			TemplateDescriptor.getDriverTemplateDescriptors();
+		for (int i = 0; i < descriptors.length; i++) {
+			IConfigurationElement[] elements = 
+				descriptors[i].getProperties();
+			if (elements != null && elements.length > 0) {
+				String propName = elements[0].getAttribute("name");
+				String value =
+					descriptors[i].getPropertyValue(propName);
+				Assert.assertNotNull(value);
+				Assert.assertTrue(value.length() > 0);
+				break;
+			}
+		}
+	}
+
+	public final void testGetPropertyIDFromName() {
+		TemplateDescriptor[] descriptors = 
+			TemplateDescriptor.getDriverTemplateDescriptors();
+		for (int i = 0; i < descriptors.length; i++) {
+			IConfigurationElement[] elements = 
+				descriptors[i].getProperties();
+			if (elements != null && elements.length > 0) {
+				String propName = elements[0].getAttribute("name");
+				String id =
+					descriptors[i].getPropertyIDFromName(propName);
+				Assert.assertNotNull(id);
+				Assert.assertTrue(id.length() > 0);
+				break;
+			}
+		}
+	}
+
+	public final void testGetDescription() {
+		TemplateDescriptor[] descriptors = 
+			TemplateDescriptor.getDriverTemplateDescriptors();
+		for (int i = 0; i < descriptors.length; i++) {
+			String description = descriptors[i].getDescription();
+			if (description != null &&
+					description.length() > 0) {
+				Assert.assertNotNull(description);
+				Assert.assertTrue(description.length() > 0);
+				break;
+			}
+		}
+	}
+
+	public final void testCompareTo() {
+		TemplateDescriptor[] descriptors = 
+			TemplateDescriptor.getDriverTemplateDescriptors();
+		TemplateDescriptor td1 = descriptors[0];
+		TemplateDescriptor td2 = descriptors[1];
+		int result = td1.compareTo(td2);
+		Assert.assertTrue(result < 0 || result == 0 || result > 0);
+	}
+
+	public final void testHasVisibleProperties() {
+		TemplateDescriptor[] descriptors = 
+			TemplateDescriptor.getDriverTemplateDescriptors();
+		boolean flag = descriptors[0].hasVisibleProperties();
+		if (flag)
+			Assert.assertTrue(flag);
+		else
+			Assert.assertFalse(flag);
+	}
+
+}
diff --git a/tests/org.eclipse.datatools.connectivity.test/src/org/eclipse/datatools/connectivity/drivers/test/DriverManagerTest.java b/tests/org.eclipse.datatools.connectivity.test/src/org/eclipse/datatools/connectivity/drivers/test/DriverManagerTest.java
new file mode 100644
index 0000000..ef6083b
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.test/src/org/eclipse/datatools/connectivity/drivers/test/DriverManagerTest.java
@@ -0,0 +1,191 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2005 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.drivers.test;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.drivers.DriverInstance;
+import org.eclipse.datatools.connectivity.drivers.DriverManager;
+import org.eclipse.datatools.connectivity.drivers.DriverMgmtMessages;
+
+/**
+ * This tests the driver management framework
+ * 
+ * @author brianf
+ */
+public class DriverManagerTest extends TestCase {
+
+	private static String TEST_DRIVER_1_TEMPLATE_ID = "org.eclipse.datatools.connectivity.drivers.test.driver1"; //$NON-NLS-1$
+	private static String TEST_DRIVER_2_TEMPLATE_ID = "org.eclipse.datatools.connectivity.drivers.test.driver2"; //$NON-NLS-1$
+	private static String TEST_DRIVER_1_INSTANCE_NAME = "DriverTest.TestDriver1Instance"; //$NON-NLS-1$
+	private static String TEST_DRIVER_2_INSTANCE_NAME = "DriverTest.TestDriver21Instance"; //$NON-NLS-1$
+	private static String ID_PREFIX = DriverMgmtMessages.getString("NewDriverDialog.text.id_prefix"); //$NON-NLS-1$
+	private static String TEST_DRIVER_1_INSTANCE_ID = ID_PREFIX + TEST_DRIVER_1_TEMPLATE_ID;
+	private static String TEST_DRIVER_1_INSTANCE_ID2 = ID_PREFIX + TEST_DRIVER_1_INSTANCE_NAME;
+	private static String TEST_DRIVER_2_INSTANCE_ID = ID_PREFIX + TEST_DRIVER_2_INSTANCE_NAME;
+	
+	public static void createDriverInstance2() {
+		Assert.assertNull(DriverManager.getInstance().getDriverInstanceByID(TEST_DRIVER_2_TEMPLATE_ID));
+
+		String jarList;
+		IPath path = filePathFromPlugin("org.eclipse.datatools.connectivity.test", "test_files/dummy2.jar");  //$NON-NLS-1$//$NON-NLS-2$
+		jarList = path.toString();
+		
+		File file = new File(jarList);
+		
+		Assert.assertTrue(file.exists());
+		System.out.println("Found DUMMY2.JAR: " + file.exists());//$NON-NLS-1$
+		
+		DriverInstance driverInstance = DriverManager.getInstance().createNewDriverInstance(TEST_DRIVER_2_TEMPLATE_ID, TEST_DRIVER_2_INSTANCE_NAME, jarList);
+		Assert.assertNotNull(DriverManager.getInstance().getDriverInstanceByID(TEST_DRIVER_2_INSTANCE_ID));
+		System.out.println("Test Driver 2 Instance Created: " + driverInstance.getName()); //$NON-NLS-1$
+	}
+	
+	public static IPath filePathFromPlugin(String pluginId, String filePath) {
+		if (pluginId == null || filePath == null) {
+			throw new IllegalArgumentException();
+		}
+		
+		 URL url = Platform.getBundle(pluginId).getEntry(File.separator + filePath + File.separator); 
+		 try {
+			url = FileLocator.toFileURL(url);
+			
+			IPath path = new Path(url.getFile());
+			return path;
+		} catch (IOException e) {
+			// do nothing
+		} 
+		 
+		return null;
+	}
+
+	public void testCreateNewDriverInstance() {
+		
+		DriverManager.getInstance().resetDefaultInstances();
+		
+		String jarList;
+		IPath path = filePathFromPlugin("org.eclipse.datatools.connectivity.test", "test_files/dummy2.jar");  //$NON-NLS-1$//$NON-NLS-2$
+		jarList = path.toString();
+		
+		File file = new File(jarList);
+		
+		Assert.assertTrue(file.exists());
+		System.out.println("Found DUMMY2.JAR: " + file.exists());//$NON-NLS-1$
+		
+		DriverInstance driverInstance = DriverManager.getInstance().createNewDriverInstance(TEST_DRIVER_2_TEMPLATE_ID, TEST_DRIVER_2_INSTANCE_NAME, jarList);
+		Assert.assertNotNull(DriverManager.getInstance().getDriverInstanceByID(TEST_DRIVER_2_INSTANCE_ID));
+		System.out.println("Test Driver 2 Instance Created: " + driverInstance.getName()); //$NON-NLS-1$
+		
+		DriverManager.getInstance().removeDriverInstance(TEST_DRIVER_1_INSTANCE_ID);
+		Assert.assertNull(DriverManager.getInstance().getDriverInstanceByID(TEST_DRIVER_1_INSTANCE_ID));
+		System.out.println("Default Test Driver 1 Instance Removed"); //$NON-NLS-1$
+		
+		path = filePathFromPlugin("org.eclipse.datatools.connectivity.test", "test_files/dummy1.jar");  //$NON-NLS-1$//$NON-NLS-2$
+		jarList = path.toString();
+
+		file = new File(jarList);
+		
+		Assert.assertTrue(file.exists());
+		System.out.println("Found DUMMY1.JAR: " + file.exists());//$NON-NLS-1$
+
+		driverInstance = DriverManager.getInstance().createNewDriverInstance(TEST_DRIVER_1_TEMPLATE_ID, TEST_DRIVER_1_INSTANCE_NAME, jarList);
+		Assert.assertNotNull(DriverManager.getInstance().getDriverInstanceByID(TEST_DRIVER_1_INSTANCE_ID2));
+		System.out.println("Test Driver 1 Instance Created: " + driverInstance.getName()); //$NON-NLS-1$
+	}
+
+	public void testCreateNewDriverInstanceNullNullNull() {
+		
+		DriverManager.getInstance().resetDefaultInstances();
+		
+		DriverInstance driverInstance = DriverManager.getInstance().createNewDriverInstance(null, null, null);
+		Assert.assertNull(driverInstance);
+
+		DriverInstance driverInstance2 = DriverManager.getInstance().createNewDriverInstance(TEST_DRIVER_1_TEMPLATE_ID, null, null);
+		Assert.assertNull(driverInstance2);
+
+		DriverInstance driverInstance3 = DriverManager.getInstance().createNewDriverInstance(TEST_DRIVER_1_TEMPLATE_ID, TEST_DRIVER_1_INSTANCE_NAME, null);
+		Assert.assertNull(driverInstance3);
+
+		DriverInstance driverInstance4 = DriverManager.getInstance().createNewDriverInstance(TEST_DRIVER_1_TEMPLATE_ID, TEST_DRIVER_1_INSTANCE_NAME, "");
+		Assert.assertNotNull(driverInstance4);
+	}
+
+	public void testGetDriverInstanceByID() {
+		if (DriverManager.getInstance().getDriverInstanceByID(TEST_DRIVER_2_INSTANCE_ID) != null) {
+			DriverInstance driverInstance = DriverManager.getInstance().getDriverInstanceByID(TEST_DRIVER_2_INSTANCE_ID);
+			Assert.assertNotNull(driverInstance);
+		}
+	}
+
+	public void testGetFullJarList() {
+		if (DriverManager.getInstance().getDriverInstanceByID(TEST_DRIVER_1_INSTANCE_ID2) == null) {
+			testCreateNewDriverInstance();
+		}
+		else {
+			DriverManager.getInstance().removeDriverInstance(TEST_DRIVER_1_INSTANCE_ID2);
+			testCreateNewDriverInstance();
+		}
+		Assert.assertNotNull(DriverManager.getInstance().getDriverInstanceByID(TEST_DRIVER_1_INSTANCE_ID2));
+		Assert.assertTrue(DriverManager.getInstance().getFullJarList().indexOf("dummy1.jar") > -1); //$NON-NLS-1$
+		Assert.assertTrue(DriverManager.getInstance().getFullJarList().indexOf("dummy2.jar") > -1); //$NON-NLS-1$
+		System.out.println("Full driver list: " + DriverManager.getInstance().getFullJarList()); //$NON-NLS-1$
+	}
+
+	public void testGetFullJarListAsArray() {
+		if (DriverManager.getInstance().getDriverInstanceByID(TEST_DRIVER_1_INSTANCE_ID2) == null) {
+			testCreateNewDriverInstance();
+		}
+		String[] array = DriverManager.getInstance().getFullJarListAsArray();
+		DriverInstance[] diarray = DriverManager.getInstance().getValidDriverInstances();
+		ArrayList list = new ArrayList();
+		for (int i = 0; i < diarray.length; i++) {
+			DriverInstance di = diarray[i];
+			if (di.getJarList() != null && di.getJarList().length() > 0 ) {
+				for (int j = 0; j < di.getJarListAsArray().length; j++) {
+					if (!list.contains(di.getJarListAsArray()[j]))
+						list.add(di.getJarListAsArray()[j]);
+				}
+			}
+		}
+		Assert.assertTrue(array.length == list.size());
+	}
+
+	public void testRemoveDriverInstance() {
+		if (DriverManager.getInstance().getDriverInstanceByID(TEST_DRIVER_1_INSTANCE_ID2) == null) {
+			testCreateNewDriverInstance();
+		}
+		boolean flag = DriverManager.getInstance().removeDriverInstance(TEST_DRIVER_1_INSTANCE_ID2);
+		assertTrue(flag);
+		System.out.println("Test Driver 1 Instance Removed: " + flag); //$NON-NLS-1$
+	}
+
+	public void testResetDriverInstances() {
+		DriverManager.getInstance().removeDriverInstance(TEST_DRIVER_1_INSTANCE_ID);
+		Assert.assertNull(DriverManager.getInstance().getDriverInstanceByID(TEST_DRIVER_1_INSTANCE_ID));
+		DriverManager.getInstance().resetDefaultInstances();
+		Assert.assertNotNull(DriverManager.getInstance().getDriverInstanceByID(TEST_DRIVER_1_INSTANCE_ID));
+	}
+
+	public void testGetInstance() {
+		DriverManager dm = DriverManager.getInstance();
+		assertNotNull(dm);
+	}
+}
diff --git a/tests/org.eclipse.datatools.connectivity.test/src/org/eclipse/datatools/connectivity/internal/ActivationTest.java b/tests/org.eclipse.datatools.connectivity.test/src/org/eclipse/datatools/connectivity/internal/ActivationTest.java
new file mode 100644
index 0000000..38501da
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.test/src/org/eclipse/datatools/connectivity/internal/ActivationTest.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.eclipse.datatools.connectivity.internal.ConnectivityPlugin;
+import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
+import org.osgi.framework.Bundle;
+
+
+/**
+ * This class tests the plug-in activation for the connectivity plugins.
+ * 
+ * @author brianf
+ */
+public class ActivationTest extends TestCase {
+
+	public void testConnectivityPluginActivation() {
+		
+		Assert.assertNotNull(ConnectivityPlugin.getDefault());
+		
+		int pluginState = ConnectivityPlugin.getDefault().getBundle()
+				.getState();
+		Assert
+				.assertTrue(
+						"Error: org.eclipse.datatools.connectivity plugin cannot be loaded.", //$NON-NLS-1$
+						pluginState == Bundle.ACTIVE
+								|| pluginState == Bundle.RESOLVED);
+	}
+
+	public void testConnectivityUIPluginActivation() {
+		
+		Assert.assertNotNull(ConnectivityUIPlugin.getDefault());
+		
+		int pluginState = ConnectivityUIPlugin.getDefault().getBundle()
+				.getState();
+		Assert
+				.assertTrue(
+						"Error: org.eclipse.datatools.connectivity.ui plugin cannot be loaded.", //$NON-NLS-1$
+						pluginState == Bundle.ACTIVE
+								|| pluginState == Bundle.RESOLVED);
+	}
+}
\ No newline at end of file
diff --git a/tests/org.eclipse.datatools.connectivity.test/src/org/eclipse/datatools/connectivity/internal/ui/test/ConnectionProfileManagerUITests.java b/tests/org.eclipse.datatools.connectivity.test/src/org/eclipse/datatools/connectivity/internal/ui/test/ConnectionProfileManagerUITests.java
new file mode 100644
index 0000000..402aaf7
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.test/src/org/eclipse/datatools/connectivity/internal/ui/test/ConnectionProfileManagerUITests.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.internal.ui.test;
+
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.datatools.connectivity.internal.ui.ConnectionProfileManagerUI;
+import org.eclipse.datatools.connectivity.ui.wizards.IWizardCategoryProvider;
+import org.eclipse.jface.wizard.IWizard;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+/**
+ * This tests the ConnectionProfileManagerUI class.
+ * 
+ * @author brianf
+ *
+ */
+public class ConnectionProfileManagerUITests extends TestCase {
+
+	public final void testGetInstance() {
+		ConnectionProfileManagerUI cpmui = ConnectionProfileManagerUI.getInstance();
+		Assert.assertNotNull(cpmui);
+	}
+
+	public final void testGetWizardCategories() {
+		ConnectionProfileManagerUI cpmui = ConnectionProfileManagerUI.getInstance();
+		Map wizCategories = cpmui.getWizardCategories();
+		Assert.assertNotNull(wizCategories);
+	}
+
+	public final void testGetNewWizards() {
+		ConnectionProfileManagerUI cpmui = ConnectionProfileManagerUI.getInstance();
+		Map newWizards = cpmui.getNewWizards();
+		Assert.assertNotNull(newWizards);
+		Assert.assertTrue(!newWizards.isEmpty());
+	}
+
+	public final void testGetWizardCategory() {
+		ConnectionProfileManagerUI cpmui = ConnectionProfileManagerUI.getInstance();
+		Map wizCategories = cpmui.getWizardCategories();
+		Set keys = wizCategories.keySet();
+		if (keys.size() > 0) {
+			Object[] keysArray = keys.toArray();
+			String keys1 = (String) keysArray[0];
+			IWizardCategoryProvider iwcp = cpmui.getWizardCategory(keys1);
+			Assert.assertNotNull(iwcp);
+		}
+	}
+
+	/*
+	 * Test method for 'org.eclipse.datatools.connectivity.internal.ConnectionProfileManager.getNewWizard(String)'
+	 * 
+	 * Added to test BZ 129425
+	 */
+	public final void testGetNewWizard() {
+		String dataSourceId = "bogusValue";
+		IWizard wizard = ConnectionProfileManagerUI.getInstance().getNewWizard( dataSourceId );
+		Assert.assertNull("Found bogus wizard", wizard);
+		Map wizMap = ConnectionProfileManagerUI.getInstance().getNewWizards();
+		Set keys = wizMap.keySet();
+		if (keys.size() > 0) {
+			Object[] keysArray = keys.toArray();
+			String keys1 = (String) keysArray[0];
+			IWizard wizard2 = ConnectionProfileManagerUI.getInstance().getNewWizard( keys1 );
+			Assert.assertNotNull("Didn't find valid wizard", wizard2);
+		}
+	}
+
+}
diff --git a/tests/org.eclipse.datatools.connectivity.test/src/org/eclipse/datatools/connectivity/test/ProfileManagerAdapterFactory.java b/tests/org.eclipse.datatools.connectivity.test/src/org/eclipse/datatools/connectivity/test/ProfileManagerAdapterFactory.java
new file mode 100644
index 0000000..1aa6758
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.test/src/org/eclipse/datatools/connectivity/test/ProfileManagerAdapterFactory.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.test;
+
+import org.eclipse.core.runtime.IAdapterFactory;
+import org.eclipse.datatools.connectivity.ProfileManager;
+
+/**
+ * This class helps tests the getAdapter() method of the ProfileManager class.
+ * 
+ * @author brianf
+ *
+ */
+public class ProfileManagerAdapterFactory implements IAdapterFactory {
+
+	public Object getAdapter(Object adaptableObject, Class adapterType) {
+		if (adapterType.equals(String.class)) {
+			if (adaptableObject instanceof ProfileManager) {
+				ProfileManager pm = (ProfileManager) adaptableObject;
+				return pm.toString();
+			}
+		}
+		return null;
+	}
+
+	public Class[] getAdapterList() {
+		return new Class[] {String.class};
+	}
+
+}
diff --git a/tests/org.eclipse.datatools.connectivity.test/src/org/eclipse/datatools/connectivity/test/ProfileManagerTests.java b/tests/org.eclipse.datatools.connectivity.test/src/org/eclipse/datatools/connectivity/test/ProfileManagerTests.java
new file mode 100644
index 0000000..eedcbfc
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.test/src/org/eclipse/datatools/connectivity/test/ProfileManagerTests.java
@@ -0,0 +1,361 @@
+/*******************************************************************************
+ * Copyright (c) 2004-2006 Sybase, Inc.
+ * 
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: brianf - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.datatools.connectivity.test;
+
+import java.util.Properties;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.ConnectionProfileException;
+import org.eclipse.datatools.connectivity.ICategory;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
+import org.eclipse.datatools.connectivity.IProfileListener;
+import org.eclipse.datatools.connectivity.ProfileManager;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+/**
+ * These tests are for the ProfileManager class.
+ * 
+ * @author brianf
+ *
+ */
+public class ProfileManagerTests extends TestCase {
+
+	private final String GenericJDBC_DummyName = "Dummy JDBC Profile";
+	private final String GenericJDBC_DummyName2 = "Dummy JDBC Profile 2";
+	private final String GenericJDBC_DummyName3 = "Dummy JDBC Profile 3";
+	private final String GenericJDBC_DummyDescription = "Dummy JDBC Profile Description";
+	private final String GenericJDBC_DummyDescription2 = "Modified description";
+	private final String GenericJDBC_ProfileID = "org.eclipse.datatools.connectivity.db.generic.connectionProfile";
+	private final String Databases_CategoryID = "org.eclipse.datatools.connectivity.db.category";
+	private static String GenericJDBC_InstanceID = null;
+	private static IProfileListener GenericJDBC_Listener = null;
+	
+	public final void testGetInstance() {
+		ProfileManager pm = ProfileManager.getInstance();
+		Assert.assertNotNull(pm);
+	}
+
+	public final void createDummyProfile() throws ConnectionProfileException {
+		ProfileManager pm = ProfileManager.getInstance();
+		IConnectionProfile dummy = pm.getProfileByName(GenericJDBC_DummyName);
+		if (dummy == null) {
+			ProfileManager.getInstance().createProfile(GenericJDBC_DummyName, 
+					GenericJDBC_DummyDescription, 
+					GenericJDBC_ProfileID, 
+					new Properties());
+			dummy = pm.getProfileByName(GenericJDBC_DummyName);
+			Assert.assertNotNull(dummy);
+			GenericJDBC_InstanceID = dummy.getInstanceID();
+		}
+	}
+	
+	public final void deleteAllProfiles() throws ConnectionProfileException {
+		ProfileManager pm = ProfileManager.getInstance();
+		IConnectionProfile[] profiles = pm.getProfiles();
+		if (profiles != null && profiles.length > 0) {
+			for (int i = 0; i < profiles.length; i++) {
+				IConnectionProfile icp = profiles[i];
+				pm.deleteProfile(icp);
+			}
+		}
+	}
+	
+	public final void testGetProfiles() throws ConnectionProfileException {
+		ProfileManager pm = ProfileManager.getInstance();
+		createDummyProfile();
+
+		IConnectionProfile[] profiles = pm.getProfiles();
+		Assert.assertNotNull(profiles);
+		Assert.assertTrue(profiles.length > 0);
+		Assert.assertTrue(profiles[0].getName().equals(GenericJDBC_DummyName));
+	}
+
+	public final void testGetCategory() {
+		ProfileManager pm = ProfileManager.getInstance();
+		ICategory category = pm.getCategory(Databases_CategoryID);
+		Assert.assertNotNull(category);
+	}
+
+	public final void testGetRootCategories() {
+		ProfileManager pm = ProfileManager.getInstance();
+		ICategory[] categories = pm.getRootCategories();
+		Assert.assertNotNull(categories);
+		Assert.assertTrue(categories.length > 0);
+	}
+
+	public final void testGetProfilesByCategory() throws ConnectionProfileException {
+		ProfileManager pm = ProfileManager.getInstance();
+		createDummyProfile();
+
+		IConnectionProfile[] profiles = pm.getProfilesByCategory(Databases_CategoryID);
+		Assert.assertNotNull(profiles);
+		Assert.assertTrue(profiles.length > 0);
+		Assert.assertTrue(profiles[0].getName().equals(GenericJDBC_DummyName));
+	}
+
+	public final void testGetProfileByName() throws ConnectionProfileException {
+		ProfileManager pm = ProfileManager.getInstance();
+		createDummyProfile();
+		
+		IConnectionProfile dummy = pm.getProfileByName(GenericJDBC_DummyName);
+		Assert.assertNotNull(dummy);
+	}
+
+	public final void testGetProfileByInstanceID() throws ConnectionProfileException {
+		ProfileManager pm = ProfileManager.getInstance();
+		createDummyProfile();
+		
+		IConnectionProfile dummy = pm.getProfileByInstanceID(GenericJDBC_InstanceID);
+		Assert.assertNotNull(dummy);
+	}
+
+	public final void testGetProfileByProviderID() throws ConnectionProfileException {
+		ProfileManager pm = ProfileManager.getInstance();
+		createDummyProfile();
+		
+		IConnectionProfile[] profiles = pm.getProfileByProviderID(GenericJDBC_ProfileID);
+		Assert.assertNotNull(profiles);
+		Assert.assertTrue(profiles.length > 0);
+		Assert.assertTrue(profiles[0].getName().equals(GenericJDBC_DummyName));
+	}
+
+	public final void testCreateProfileStringStringStringProperties() throws ConnectionProfileException {
+		ProfileManager pm = ProfileManager.getInstance();
+		IConnectionProfile dummy = pm.getProfileByName(GenericJDBC_DummyName);
+		if (dummy != null)
+			pm.deleteProfile(dummy);
+		createDummyProfile();
+	}
+
+	public final void testCreateProfileStringStringStringPropertiesString() throws ConnectionProfileException {
+		ProfileManager pm = ProfileManager.getInstance();
+		createDummyProfile();
+		pm.createProfile(GenericJDBC_DummyName2, 
+				GenericJDBC_DummyDescription, 
+				GenericJDBC_ProfileID, 
+				new Properties(), 
+				GenericJDBC_DummyName);
+
+		IConnectionProfile dummy2 = pm.getProfileByName(GenericJDBC_DummyName2);
+		Assert.assertNotNull(dummy2);
+	}
+
+	public final void testCreateProfileStringStringStringPropertiesStringBoolean() throws ConnectionProfileException {
+		ProfileManager pm = ProfileManager.getInstance();
+		createDummyProfile();
+		pm.createProfile(GenericJDBC_DummyName3, 
+				GenericJDBC_DummyDescription, 
+				GenericJDBC_ProfileID, 
+				new Properties(), 
+				GenericJDBC_DummyName,
+				true);
+
+		IConnectionProfile dummy3 = pm.getProfileByName(GenericJDBC_DummyName3);
+		Assert.assertNotNull(dummy3);
+		Assert.assertTrue(dummy3.isAutoConnect());
+	}
+
+	public final void testDuplicateProfile() throws ConnectionProfileException {
+		ProfileManager pm = ProfileManager.getInstance();
+		createDummyProfile();
+		
+		IConnectionProfile dummy = pm.getProfileByName(GenericJDBC_DummyName);
+		Assert.assertNotNull(dummy);
+		
+		String duplicateName = pm.duplicateProfile(dummy);
+		IConnectionProfile duplicate = pm.getProfileByName(duplicateName);
+		Assert.assertNotNull(duplicate);
+	}
+
+	public final void testAddProfileIConnectionProfile() throws ConnectionProfileException {
+		ProfileManager pm = ProfileManager.getInstance();
+		createDummyProfile();
+		
+		IConnectionProfile dummy = pm.getProfileByName(GenericJDBC_DummyName);
+		Assert.assertNotNull(dummy);
+		
+		boolean flaggedAlreadyExists = false;
+		try {
+			pm.addProfile(dummy);
+		} catch (ConnectionProfileException e) {
+			// success
+			flaggedAlreadyExists = true;
+		}
+		Assert.assertTrue(flaggedAlreadyExists);
+		
+		if (dummy != null)
+			pm.deleteProfile(dummy);
+		
+		IConnectionProfile test = pm.getProfileByName(GenericJDBC_DummyName);
+		Assert.assertNull(test);
+		
+		pm.addProfile(dummy);
+
+		test = pm.getProfileByName(GenericJDBC_DummyName);
+		Assert.assertNotNull(test);
+}
+
+	public final void testAddProfileIConnectionProfileBoolean() throws ConnectionProfileException {
+		ProfileManager pm = ProfileManager.getInstance();
+		createDummyProfile();
+		
+		IConnectionProfile dummy = pm.getProfileByName(GenericJDBC_DummyName);
+		Assert.assertNotNull(dummy);
+		
+		boolean flaggedAlreadyExists = false;
+		try {
+			pm.addProfile(dummy);
+		} catch (ConnectionProfileException e) {
+			// success
+			flaggedAlreadyExists = true;
+		}
+		Assert.assertTrue(flaggedAlreadyExists);
+		
+		Properties props = dummy.getBaseProperties();
+		String bogusvalue = props.getProperty("mydummykey");
+		Assert.assertNull(bogusvalue);
+
+		props.setProperty("mydummykey", "mydummyvalue");
+		dummy.setBaseProperties(props);
+		
+		pm.addProfile(dummy, true);
+
+		IConnectionProfile test = pm.getProfileByName(GenericJDBC_DummyName);
+		Assert.assertNotNull(test);
+		
+	}
+
+	public final void testDeleteProfile() throws ConnectionProfileException {
+		ProfileManager pm = ProfileManager.getInstance();
+		createDummyProfile();
+		
+		IConnectionProfile dummy = pm.getProfileByName(GenericJDBC_DummyName);
+		Assert.assertNotNull(dummy);
+		
+		pm.deleteProfile(dummy);
+		
+		IConnectionProfile test = pm.getProfileByName(GenericJDBC_DummyName);
+		Assert.assertNull(test);
+	}
+
+	public final void testModifyProfileIConnectionProfile() throws ConnectionProfileException {
+		ProfileManager pm = ProfileManager.getInstance();
+		deleteAllProfiles();
+		createDummyProfile();
+		
+		IConnectionProfile dummy = pm.getProfileByName(GenericJDBC_DummyName);
+		Assert.assertNotNull(dummy);
+		
+		Properties testProps = dummy.getBaseProperties();
+		testProps.setProperty("george", GenericJDBC_DummyDescription2);
+		dummy.setBaseProperties(testProps);
+
+		pm.modifyProfile(dummy);
+		
+		IConnectionProfile test = pm.getProfileByName(GenericJDBC_DummyName);
+		Assert.assertNotNull(test);
+		
+		testProps = test.getBaseProperties();
+		String value = testProps.getProperty("george");
+		Assert.assertNotNull(value);
+		Assert.assertTrue(value.equals(GenericJDBC_DummyDescription2));
+	}
+
+	public final void testModifyProfileIConnectionProfileStringString() throws ConnectionProfileException {
+		ProfileManager pm = ProfileManager.getInstance();
+		deleteAllProfiles();
+		createDummyProfile();
+		
+		IConnectionProfile dummy = pm.getProfileByName(GenericJDBC_DummyName);
+		Assert.assertNotNull(dummy);
+		
+		pm.modifyProfile(dummy, GenericJDBC_DummyName2, GenericJDBC_DummyDescription2);
+		
+		IConnectionProfile test1 = pm.getProfileByName(GenericJDBC_DummyName);
+		Assert.assertNull(test1);
+		
+		IConnectionProfile test2 = pm.getProfileByName(GenericJDBC_DummyName2);
+		Assert.assertNotNull(test2);
+		Assert.assertTrue(test2.getDescription().equals(GenericJDBC_DummyDescription2));
+	}
+
+	public final void testModifyProfileIConnectionProfileStringStringBoolean() throws ConnectionProfileException {
+		ProfileManager pm = ProfileManager.getInstance();
+		deleteAllProfiles();
+		createDummyProfile();
+		
+		IConnectionProfile dummy = pm.getProfileByName(GenericJDBC_DummyName);
+		Assert.assertNotNull(dummy);
+		Assert.assertFalse(dummy.isAutoConnect());
+		
+		pm.modifyProfile(dummy, GenericJDBC_DummyName2, GenericJDBC_DummyDescription2, Boolean.TRUE);
+		
+		IConnectionProfile test1 = pm.getProfileByName(GenericJDBC_DummyName);
+		Assert.assertNull(test1);
+		
+		IConnectionProfile test2 = pm.getProfileByName(GenericJDBC_DummyName2);
+		Assert.assertNotNull(test2);
+		Assert.assertTrue(test2.getDescription().equals(GenericJDBC_DummyDescription2));
+		Assert.assertTrue(test2.isAutoConnect());
+	}
+
+	public final void testAddProfileListener() throws ConnectionProfileException {
+		ProfileManager pm = ProfileManager.getInstance();
+		deleteAllProfiles();
+		createDummyProfile();
+		
+		IConnectionProfile dummy = pm.getProfileByName(GenericJDBC_DummyName);
+		Assert.assertNotNull(dummy);
+		
+		GenericJDBC_Listener = new IProfileListener() {
+
+			public void profileAdded(IConnectionProfile profile) {
+				Assert.assertTrue(profile.getName().equals(GenericJDBC_DummyName));
+			}
+
+			public void profileChanged(IConnectionProfile profile) {
+				Assert.assertTrue(profile.getName().equals(GenericJDBC_DummyName2));
+			}
+
+			public void profileDeleted(IConnectionProfile profile) {
+				Assert.assertTrue(profile.getName().equals(GenericJDBC_DummyName));
+			}
+		};
+		pm.addProfileListener(GenericJDBC_Listener);
+		
+		if (dummy != null)
+			pm.deleteProfile(dummy);
+
+		pm.addProfile(dummy);
+		
+		pm.modifyProfile(dummy, GenericJDBC_DummyName2, GenericJDBC_DummyDescription2);
+	}
+
+	public final void testRemoveProfileListener() throws ConnectionProfileException {
+		ProfileManager pm = ProfileManager.getInstance();
+		pm.removeProfileListener(GenericJDBC_Listener);
+	}
+
+	public final void testGetAdapter() throws ConnectionProfileException {
+		ProfileManager pm = ProfileManager.getInstance();
+		Object adapted = pm.getAdapter(ProfileManager.class);
+		Assert.assertTrue(adapted instanceof ProfileManager);
+		
+		ProfileManagerAdapterFactory factory = new ProfileManagerAdapterFactory();
+		Platform.getAdapterManager().registerAdapters(factory, ProfileManager.class);
+		Object adapted2 = pm.getAdapter(String.class);
+		Assert.assertTrue(adapted2 instanceof String);
+		Platform.getAdapterManager().unregisterAdapters(factory);
+	}
+
+}
diff --git a/tests/org.eclipse.datatools.connectivity.test/test_files/dummy1.jar b/tests/org.eclipse.datatools.connectivity.test/test_files/dummy1.jar
new file mode 100644
index 0000000..6be1603
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.test/test_files/dummy1.jar
@@ -0,0 +1 @@
+This is a dummy jar to test if the file is loaded properly.
\ No newline at end of file
diff --git a/tests/org.eclipse.datatools.connectivity.test/test_files/dummy2.jar b/tests/org.eclipse.datatools.connectivity.test/test_files/dummy2.jar
new file mode 100644
index 0000000..6be1603
--- /dev/null
+++ b/tests/org.eclipse.datatools.connectivity.test/test_files/dummy2.jar
@@ -0,0 +1 @@
+This is a dummy jar to test if the file is loaded properly.
\ No newline at end of file
diff --git a/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/.classpath b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/.gitignore b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/.gitignore
new file mode 100644
index 0000000..c5e82d7
--- /dev/null
+++ b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/.gitignore
@@ -0,0 +1 @@
+bin
\ No newline at end of file
diff --git a/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/.project b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/.project
new file mode 100644
index 0000000..2c27f63
--- /dev/null
+++ b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.enablement.dbdefinition.junittest</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/META-INF/MANIFEST.MF b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..ccc4d1d
--- /dev/null
+++ b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: org.eclipse.datatools.enablement.dbdefinition.junittest
+Bundle-SymbolicName: org.eclipse.datatools.enablement.dbdefinition.junittest
+Bundle-Version: 1.0.0.qualifier
+Bundle-Localization: plugin
+Require-Bundle: org.junit,
+ org.eclipse.datatools.connectivity.sqm.core,
+ org.eclipse.datatools.modelbase.sql,
+ org.eclipse.datatools.modelbase.dbdefinition
diff --git a/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/build.properties b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/build.properties
new file mode 100644
index 0000000..ab6f903
--- /dev/null
+++ b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/build.properties
@@ -0,0 +1,9 @@
+bin.includes = .classpath,\
+               .cvsignore,\
+               .project,\
+               bin/,\
+               build.properties,\
+               META-INF/,\
+               readme.txt,\
+               src/,\
+               test.xml
diff --git a/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/readme.txt b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/readme.txt
new file mode 100644
index 0000000..9358962
--- /dev/null
+++ b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/readme.txt
@@ -0,0 +1,3 @@
+To run the JUnit test:
+Right Click on AllTests and go to Run As
+Choose JUnit Plug-in test in the context menu
\ No newline at end of file
diff --git a/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/AllTests.java b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/AllTests.java
new file mode 100644
index 0000000..40ec371
--- /dev/null
+++ b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/AllTests.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.dbdefinition.junittest;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class AllTests {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite(
+				"Test for org.eclipse.datatools.enablement.dbdefinition.junittest");
+		//$JUnit-BEGIN$
+		suite.addTestSuite(DB2LUWTest.class);
+		suite.addTestSuite(DB2zSeriesTest.class);
+		suite.addTestSuite(DB2iSeriesTest.class);
+		suite.addTestSuite(OracleTest.class);
+		suite.addTestSuite(SQLServerTest.class);
+		suite.addTestSuite(InformixTest.class);
+		suite.addTestSuite(SybaseTest.class);
+		suite.addTestSuite(DerbyTest.class);
+		suite.addTestSuite(MySQLTest.class);
+		suite.addTestSuite(CloudscapeTest.class);
+		suite.addTestSuite(IBMCloudscapeTest.class);
+		suite.addTestSuite(PostgreSQLTest.class);
+		suite.addTestSuite(DatabaseDefinitionGenericTest.class);
+		suite.addTestSuite(PredefinedDataTypeDefinitionGenericTest.class);
+		
+		
+		//$JUnit-END$
+		return suite;
+	}
+
+}
diff --git a/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/CloudscapeTest.java b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/CloudscapeTest.java
new file mode 100644
index 0000000..5f6de95
--- /dev/null
+++ b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/CloudscapeTest.java
@@ -0,0 +1,309 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.dbdefinition.junittest;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.dbdefinition.DatabaseVendorDefinition;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.datatypes.DataType;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+
+
+public class CloudscapeTest extends TestCase {
+	
+	//=========================Version 5.1=======================================
+	private final int MAXIMUM_LENGTH_CHAR_51 = 2147483647;
+	private final int MAXIMUM_LENGTH_NCHAR_51 = 2147483647;
+	private final int MAXIMUM_LENGTH_NVARCHAR_51 = 2147483647;
+	private final int MAXIMUM_LENGTH_VARCHAR_51 = 2147483647;
+	
+	private final int MAXIMUM_PRECISION_FLOAT_51 = 53;
+	
+//=============================================================================
+	
+	private final String strProduct = "Cloudscape";
+	private final String PACKAGE_NAME = "org.eclipse.datatools.enablement.dbdefinition.junittest";
+	
+	private int expectedMaxPrecision = 0;
+	private int expectedMaxLength = 0;
+	private int expectedIdentifierLength = 0;
+	private int actualIdentifierLength = 0;
+
+	
+	private Iterator productVersion = null;
+	private Iterator dataType;
+	private List dataTypeList;
+	private ArrayList definitionCollection = new ArrayList();
+	private ArrayList dbInformationCollection = new ArrayList();
+	
+	private String strProductVersion = null;
+
+	private DatabaseVendorDefinition databaseVendorDefinition = null;
+	private DatabaseDefinition definition = null;
+	private PredefinedDataTypeDefinition typeDefinition = null;
+	private DataType type = null;
+	private Procedure procedure = null;
+	
+	public void setUp(){
+		
+		try{	
+			productVersion = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getVersions(strProduct);
+			assertNotNull("\nMethod: getVersions()" +
+						  "\nError: The method returns a NULL value in startUp()", productVersion);
+					
+			while(productVersion.hasNext())
+			{
+				strProductVersion = productVersion.next().toString();
+				definition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(strProduct, strProductVersion);
+				assertNotNull("\nMethod: getDefinition()" +
+							  "\nError: The method returns a NULL value in startUp()", definition);
+					
+				dbInformationCollection.add(strProductVersion);
+				definitionCollection.add(definition);
+			}
+		}
+		catch(Exception e){
+			fail("\nMethod: setUp()" +
+				 "\nException: " + e.toString() +
+			     "\nDescription: The set up is incomplete");
+		}
+	}
+	
+//==========================================Version 5.1==============================================	
+	
+	public void testGetMaximumPrecision_FLOAT_51(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("5.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_FLOAT_51;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("FLOAT"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "FLOAT"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CHAR_51(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("5.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CHAR_51;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARCHAR_51(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("5.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARCHAR_51;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARCHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_NCHAR_51(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("5.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_LENGTH_NCHAR_51;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NCHAR"))
+							{								
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "NCHAR"),
+										expectedMaxPrecision, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_NVARCHAR_51(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("5.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_LENGTH_NVARCHAR_51;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NVARCHAR"))
+							{								
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "NVARCHAR"),
+										expectedMaxPrecision, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+		
+	private String getAssertionFailureMessage(String methodName, Object versionName, String dataName){
+		
+		String temp = "\nData type: ";
+		
+		if(dataName.equals(""))
+		{
+			temp = "";
+		}
+		
+		return ("\nPackage: " + PACKAGE_NAME +
+				"\nMethod: " + methodName +
+			    "\nProduct: " + strProduct +
+		        "\nVersion: " + versionName +
+		        temp + dataName +
+		        "\nResult: The actual value does not agree with vendor doc. ");
+	}
+	
+	private String getExceptionMessage(String methodName, Object versionName, Exception e){
+		
+		return ("\nMethod: " + methodName + 
+				"\nProduct: " + strProduct + 
+			    "\nVersion: " + versionName +
+		        "\nException: " + e.toString() +
+		        "\nDescription: The exception is thrown in the test case");
+	}
+	
+	private int getProperIndex(int rawIndex){
+		
+		if(rawIndex == 0)
+			return 1;
+		else if(rawIndex == 1)
+			return 2;
+		else
+			return 0;
+	}
+	
+	public void tearDown(){
+		
+		expectedMaxPrecision = 0;
+		expectedMaxLength = 0;
+		expectedIdentifierLength = 0;
+		actualIdentifierLength = 0;
+		
+		productVersion = null;
+		dataType = null;
+		dataTypeList = null;
+		definitionCollection = new ArrayList();
+		dbInformationCollection = new ArrayList();
+		
+		strProductVersion = null;
+
+		definition = null;
+		typeDefinition = null;
+		procedure = null;
+	}
+}
diff --git a/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/DB2LUWTest.java b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/DB2LUWTest.java
new file mode 100644
index 0000000..e9e4173
--- /dev/null
+++ b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/DB2LUWTest.java
@@ -0,0 +1,2595 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.dbdefinition.junittest;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.dbdefinition.DatabaseVendorDefinition;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.datatypes.DataType;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesFactory;
+
+
+public class DB2LUWTest extends TestCase {
+	
+	//=========================Version 7.2=======================================
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_V72 = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_DATABASE_V72 = 8;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_V72 = 18;
+
+	private final int MAXIMUM_LENGTH_BINARY_V72 = 254;
+	private final int MAXIMUM_LENGTH_BLOB_V72 = 2147483647;
+	private final int MAXIMUM_LENGTH_CHAR_V72 = 254;
+	private final int MAXIMUM_LENGTH_DATALINK_V72 = 200;
+	private final int MAXIMUM_LENGTH_DBCLOB_V72 = 1073741823;
+	private final int MAXIMUM_LENGTH_GRAPHIC_V72 = 127;
+	private final int MAXIMUM_LENGTH_VARBINARY_V72 = 32672;
+	private final int MAXIMUM_LENGTH_VARCHAR_V72 = 32672;
+	private final int MAXIMUM_LENGTH_VARGRAPHIC_V72 = 16336;
+	
+	private final int MAXIMUM_PRECISION_DECIMAL_V72 = 31;
+	private final int MAXIMUM_PRECISION_FLOAT_V72 = 53;
+	private final int MAXIMUM_PRECISION_NUMERIC_V72 = 31;
+	
+	//=========================Version 8.1=======================================
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_V81 = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_DATABASE_V81 = 8;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_NICKNAME_V81 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_V81 = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_V81 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLE_V81 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLESPACE_V81 = 18;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_V81 = 18;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_UDT_V81 = 18;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_VIEW_V81 = 128;
+	
+	private final int MAXIMUM_LENGTH_BINARY_V81 = 254;
+	private final int MAXIMUM_LENGTH_BLOB_V81 = 2147483647;
+	private final int MAXIMUM_LENGTH_CLOB_V81 = 2147483647;
+	private final int MAXIMUM_LENGTH_CHAR_V81 = 254;
+	private final int MAXIMUM_LENGTH_DATALINK_V81 = 200;
+	private final int MAXIMUM_LENGTH_DBCLOB_V81 = 1073741823;
+	private final int MAXIMUM_LENGTH_GRAPHIC_V81 = 127;
+	private final int MAXIMUM_LENGTH_VARBINARY_V81 = 32672;
+	private final int MAXIMUM_LENGTH_VARCHAR_V81 = 32672;
+	private final int MAXIMUM_LENGTH_VARGRAPHIC_V81 = 16336;
+	
+	private final int MAXIMUM_PRECISION_DECIMAL_V81 = 31;
+	private final int MAXIMUM_PRECISION_FLOAT_V81 = 53;
+	private final int MAXIMUM_PRECISION_NUMERIC_V81 = 31;	
+	
+    //=========================Version 8.2=======================================
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_V82 = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_DATABASE_V82 = 8;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_NICKNAME_V82 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_V82 = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_V82 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLE_V82 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLESPACE_V82 = 18;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_V82 = 18;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_UDT_V82 = 18;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_VIEW_V82 = 128;
+	
+	private final int MAXIMUM_LENGTH_BINARY_V82 = 254;
+	private final int MAXIMUM_LENGTH_BLOB_V82 = 2147483647;
+	private final int MAXIMUM_LENGTH_CLOB_V82 = 2147483647;
+	private final int MAXIMUM_LENGTH_CHAR_V82 = 254;
+	private final int MAXIMUM_LENGTH_DATALINK_V82 = 200;
+	private final int MAXIMUM_LENGTH_DBCLOB_V82 = 1073741823;
+	private final int MAXIMUM_LENGTH_GRAPHIC_V82 = 127;
+	private final int MAXIMUM_LENGTH_VARBINARY_V82 = 32672;
+	private final int MAXIMUM_LENGTH_VARCHAR_V82 = 32672;
+	private final int MAXIMUM_LENGTH_VARGRAPHIC_V82 = 16336;
+	
+	private final int MAXIMUM_PRECISION_DECIMAL_V82 = 31;
+	private final int MAXIMUM_PRECISION_FLOAT_V82 = 53;
+	private final int MAXIMUM_PRECISION_NUMERIC_V82 = 31;
+	
+	//=========================Version 9.1==========================================
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_V91 = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_DATABASE_V91 = 8;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_NICKNAME_V91 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_V91 = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_V91 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLE_V91 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLESPACE_V91 = 18;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_V91 = 18;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_UDT_V91 = 18;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_VIEW_V91 = 128;
+	
+	private final int MAXIMUM_LENGTH_BINARY_V91 = 254;
+	private final int MAXIMUM_LENGTH_BLOB_V91 = 2147483647;
+	private final int MAXIMUM_LENGTH_CLOB_V91 = 2147483647;
+	private final int MAXIMUM_LENGTH_CHAR_V91 = 254;
+	private final int MAXIMUM_LENGTH_DATALINK_V91 = 200;
+	private final int MAXIMUM_LENGTH_DBCLOB_V91 = 1073741823;
+	private final int MAXIMUM_LENGTH_GRAPHIC_V91 = 127;
+	private final int MAXIMUM_LENGTH_VARBINARY_V91 = 32672;
+	private final int MAXIMUM_LENGTH_VARCHAR_V91 = 32672;
+	private final int MAXIMUM_LENGTH_VARGRAPHIC_V91 = 16336;
+	
+	private final int MAXIMUM_PRECISION_DECIMAL_V91 = 31;
+	private final int MAXIMUM_PRECISION_FLOAT_V91 = 53;
+	private final int MAXIMUM_PRECISION_NUMERIC_V91 = 31;
+	//==========================================================================================
+	
+	private final String strProduct = "DB2 UDB";
+	private final String PACKAGE_NAME = "org.eclipse.datatools.enablement.dbdefinition.junittest";
+	
+	private int expectedMaxPrecision = 0;
+	private int expectedMaxLength = 0;
+	private int expectedIdentifierLength = 0;
+	private int actualIdentifierLength = 0;
+
+	
+	private Iterator productVersion = null;
+	private Iterator dataType;
+	private List dataTypeList;
+	private ArrayList definitionCollection = new ArrayList();
+	private ArrayList dbInformationCollection = new ArrayList();
+	
+	private String strProductVersion = null;
+
+	private DatabaseVendorDefinition databaseVendorDefinition = null;
+	private DatabaseDefinition definition = null;
+	private PredefinedDataTypeDefinition typeDefinition = null;
+	private DataType type = null;
+	private Procedure procedure = null;
+	
+	public void setUp(){
+		
+		try{	
+			productVersion = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getVersions(strProduct);
+			assertNotNull("\nMethod: getVersions()" +
+						  "\nError: The method returns a NULL value in startUp()", productVersion);
+					
+			while(productVersion.hasNext())
+			{
+				strProductVersion = productVersion.next().toString();
+				definition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(strProduct, strProductVersion);
+				assertNotNull("\nMethod: getDefinition()" +
+							  "\nError: The method returns a NULL value in startUp()", definition);
+					
+				dbInformationCollection.add(strProductVersion);
+				definitionCollection.add(definition);
+			}
+		}
+		catch(Exception e){
+			fail("\nMethod: setUp()" +
+				 "\nException: " + e.toString() +
+			     "\nDescription: The set up is incomplete");
+		}
+	}
+	
+//==========================================Version 7.2==============================================	
+	
+
+	public void testGetMaximumPrecision_DECIMAL_V72(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V7.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_DECIMAL_V72;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DECIMAL"))
+							{								
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "DECIMAL"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_NUMERIC_V72(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V7.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_NUMERIC_V72;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMERIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "NUMERIC"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+								
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_FLOAT_V72(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V7.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_FLOAT_V72;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("FLOAT"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "FLOAT"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CHAR_V72(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V7.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CHAR_V72;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_GRAPHIC_V72(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V7.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_GRAPHIC_V72;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("GRAPHIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "GRAPHIC"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARCHAR_V72(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V7.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARCHAR_V72;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARCHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_BINARY_V72(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V7.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_BINARY_V72;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHAR FOR BIT DATA"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "BINARY"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARBINARY_V72(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V7.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARBINARY_V72;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR FOR BIT DATA"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARBINARY"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_BLOB_V72(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V7.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_BLOB_V72;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("BLOB"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "BLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_DATALINK_V72(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V7.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_DATALINK_V72;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DATALINK"))
+							{								
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "DATALINK"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_DBCLOB_V72(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V7.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_DBCLOB_V72;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DBCLOB"))
+							{		
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "DBCLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARGRAPHIC_V72(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V7.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARGRAPHIC_V72;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARGRAPHIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARGRAPHIC"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetDatabaseMaximumIdentifierLength_V72(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V7.2"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getDatabaseMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_DATABASE_V72;
+				
+					assertEquals(getAssertionFailureMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+//==========================================Version 8.1==============================================
+	
+	public void testGetMaximumPrecision_DECIMAL_V81(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_DECIMAL_V81;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DECIMAL"))
+							{								
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "DECIMAL"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_NUMERIC_V81(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_NUMERIC_V81;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMERIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "NUMERIC"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+								
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_FLOAT_V81(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_FLOAT_V81;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("FLOAT"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "FLOAT"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CHAR_V81(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CHAR_V81;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_GRAPHIC_V81(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_GRAPHIC_V81;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("GRAPHIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "GRAPHIC"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARCHAR_V81(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARCHAR_V81;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARCHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_BINARY_V81(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_BINARY_V81;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHAR FOR BIT DATA"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "BINARY"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARBINARY_V81(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARBINARY_V81;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR FOR BIT DATA"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARBINARY"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CLOB_V81(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CLOB_V81;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CLOB"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_BLOB_V81(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_BLOB_V81;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("BLOB"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "BLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_DATALINK_V81(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_DATALINK_V81;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DATALINK"))
+							{								
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "DATALINK"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_DBCLOB_V81(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_DBCLOB_V81;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DBCLOB"))
+							{		
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "DBCLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARGRAPHIC_V81(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARGRAPHIC_V81;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARGRAPHIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARGRAPHIC"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetDatabaseMaximumIdentifierLength_V81(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8.1"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getDatabaseMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_DATABASE_V81;
+				
+					assertEquals(getAssertionFailureMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetSchemaMaximumIdentifierLength_V81(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8.1"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getSchemaMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_V81;
+				
+					assertEquals(getAssertionFailureMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetTableMaximumIdentifierLength_V81(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8.1"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTableMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TABLE_V81;
+				
+					assertEquals(getAssertionFailureMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetViewMaximumIdentifierLength_V81(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8.1"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getViewMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_VIEW_V81;
+				
+					assertEquals(getAssertionFailureMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetNicknameMaximumIdentifierLength_V81(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8.1"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getNicknameMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_NICKNAME_V81;
+				
+					assertEquals(getAssertionFailureMessage("getNicknameMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getNicknameMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetColumnMaximumIdentifierLength_V81(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8.1"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getColumnMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_COLUMN_V81;
+				
+					assertEquals(getAssertionFailureMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetUDTMaximumIdentifierLength_V81(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8.1"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getUserDefinedTypeMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_UDT_V81;
+				
+					assertEquals(getAssertionFailureMessage("getUserDefinedTypeMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getUserDefinedTypeMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetTriggerMaximumIdentifierLength_V81(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8.1"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTriggerMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_V81;
+				
+					assertEquals(getAssertionFailureMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetTablespaceMaximumIdentifierLength_V81(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8.1"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTablespaceMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TABLESPACE_V81;
+				
+					assertEquals(getAssertionFailureMessage("getTablespaceMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getTablespaceMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetStoredProcedureMaximumIdentifierLength_V81(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				
+				if((dbInformationCollection.get(i).toString()).equals("V8.1"))
+				{
+					procedure = SQLRoutinesFactory.eINSTANCE.createProcedure();
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getMaximumIdentifierLength(procedure);
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_V81;
+				
+					assertEquals(getAssertionFailureMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+//==========================================Version 8.2==============================================
+	
+	public void testGetMaximumPrecision_DECIMAL_V82(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_DECIMAL_V82;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DECIMAL"))
+							{		
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "DECIMAL"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_NUMERIC_V82(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_NUMERIC_V82;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMERIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "NUMERIC"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_FLOAT_V82(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_FLOAT_V82;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("FLOAT"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "FLOAT"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CHAR_V82(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CHAR_V82;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_GRAPHIC_V82(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_GRAPHIC_V82;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("GRAPHIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "GRAPHIC"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARCHAR_V82(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARCHAR_V82;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARCHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_BINARY_V82(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_BINARY_V82;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHAR FOR BIT DATA"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "BINARY"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARBINARY_V82(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARBINARY_V82;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR FOR BIT DATA"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARBINARY"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CLOB_V82(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CLOB_V82;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CLOB"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_BLOB_V82(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_BLOB_V82;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("BLOB"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "BLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_DATALINK_V82(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_DATALINK_V82;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DATALINK"))
+							{								
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "DATALINK"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_DBCLOB_V82(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_DBCLOB_V82;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DBCLOB"))
+							{		
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "DBCLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARGRAPHIC_V82(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARGRAPHIC_V82;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARGRAPHIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARGRAPHIC"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetDatabaseMaximumIdentifierLength_V82(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8.2"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getDatabaseMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_DATABASE_V82;
+				
+					assertEquals(getAssertionFailureMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetSchemaMaximumIdentifierLength_V82(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8.2"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getSchemaMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_V82;
+				
+					assertEquals(getAssertionFailureMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetTableMaximumIdentifierLength_V82(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8.2"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTableMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TABLE_V82;
+				
+					assertEquals(getAssertionFailureMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetViewMaximumIdentifierLength_V82(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8.2"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getViewMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_VIEW_V82;
+				
+					assertEquals(getAssertionFailureMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetNicknameMaximumIdentifierLength_V82(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8.2"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getNicknameMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_NICKNAME_V82;
+				
+					assertEquals(getAssertionFailureMessage("getNicknameMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getNicknameMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetColumnMaximumIdentifierLength_V82(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8.2"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getColumnMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_COLUMN_V82;
+				
+					assertEquals(getAssertionFailureMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetUDTMaximumIdentifierLength_V82(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8.2"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getUserDefinedTypeMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_UDT_V82;
+				
+					assertEquals(getAssertionFailureMessage("getUserDefinedTypeMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getUserDefinedTypeMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetTriggerMaximumIdentifierLength_V82(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8.2"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTriggerMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_V82;
+				
+					assertEquals(getAssertionFailureMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetTablespaceMaximumIdentifierLength_V82(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8.2"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTablespaceMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TABLESPACE_V82;
+				
+					assertEquals(getAssertionFailureMessage("getTablespaceMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getTablespaceMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetStoredProcedureMaximumIdentifierLength_V82(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				
+				if((dbInformationCollection.get(i).toString()).equals("V8.2"))
+				{
+					procedure = SQLRoutinesFactory.eINSTANCE.createProcedure();
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getMaximumIdentifierLength(procedure);
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_V82;
+				
+					assertEquals(getAssertionFailureMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+//==========================================Version 9.1==============================================
+	
+	public void testGetMaximumPrecision_DECIMAL_V91(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V9.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_DECIMAL_V91;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DECIMAL"))
+							{		
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "DECIMAL"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_NUMERIC_V91(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V9.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_NUMERIC_V91;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMERIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "NUMERIC"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_FLOAT_V91(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V9.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_FLOAT_V91;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("FLOAT"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "FLOAT"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CHAR_V91(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V9.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CHAR_V91;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHAR"))
+							{								
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_GRAPHIC_V91(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V9.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_GRAPHIC_V91;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("GRAPHIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "GRAPHIC"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARCHAR_V91(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V9.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARCHAR_V91;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARCHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_BINARY_V91(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V9.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_BINARY_V91;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHAR FOR BIT DATA"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "BINARY"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARBINARY_V91(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V9.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARBINARY_V91;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR FOR BIT DATA"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARBINARY"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CLOB_V91(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V9.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CLOB_V91;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CLOB"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_BLOB_V91(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V9.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_BLOB_V91;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("BLOB"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "BLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_DATALINK_V91(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V9.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_DATALINK_V91;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DATALINK"))
+							{								
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "DATALINK"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_DBCLOB_V91(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V9.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_DBCLOB_V91;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DBCLOB"))
+							{		
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "DBCLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARGRAPHIC_V91(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V9.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARGRAPHIC_V91;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARGRAPHIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARGRAPHIC"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetDatabaseMaximumIdentifierLength_V91(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V9.1"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getDatabaseMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_DATABASE_V91;
+				
+					assertEquals(getAssertionFailureMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetSchemaMaximumIdentifierLength_V91(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V9.1"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getSchemaMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_V91;
+				
+					assertEquals(getAssertionFailureMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetTableMaximumIdentifierLength_V91(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V9.1"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTableMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TABLE_V91;
+				
+					assertEquals(getAssertionFailureMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetViewMaximumIdentifierLength_V91(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V9.1"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getViewMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_VIEW_V91;
+				
+					assertEquals(getAssertionFailureMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetNicknameMaximumIdentifierLength_V91(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V9.1"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getNicknameMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_NICKNAME_V91;
+				
+					assertEquals(getAssertionFailureMessage("getNicknameMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getNicknameMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetColumnMaximumIdentifierLength_V91(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V9.1"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getColumnMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_COLUMN_V91;
+				
+					assertEquals(getAssertionFailureMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetUDTMaximumIdentifierLength_V91(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V9.1"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getUserDefinedTypeMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_UDT_V91;
+				
+					assertEquals(getAssertionFailureMessage("getUserDefinedTypeMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getUserDefinedTypeMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetTriggerMaximumIdentifierLength_V91(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V9.1"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTriggerMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_V91;
+				
+					assertEquals(getAssertionFailureMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetTablespaceMaximumIdentifierLength_V91(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V9.1"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTablespaceMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TABLESPACE_V91;
+				
+					assertEquals(getAssertionFailureMessage("getTablespaceMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getTablespaceMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetStoredProcedureMaximumIdentifierLength_V91(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				
+				if((dbInformationCollection.get(i).toString()).equals("V9.1"))
+				{
+					procedure = SQLRoutinesFactory.eINSTANCE.createProcedure();
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getMaximumIdentifierLength(procedure);
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_V91;
+				
+					assertEquals(getAssertionFailureMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	/*
+	 System.out.println("Version: " + dbInformationCollection.get(i).toString() + "\n");
+	 System.out.println("Actual: " + typeDefinition.getMaximumPrecision() + "\n");
+	 
+	 System.out.println("Product: " + (dataTypeList.get(j)));
+	 System.out.println("Version: " + dbInformationCollection.get(i).toString());
+	 System.out.println("Expected: " + expectedMaxPrecision);
+	 System.out.println("Actual: " + typeDefinition.getMaximumPrecision() + "\n");
+	 
+	 System.out.println("Product: " + (dataTypeList.get(j)));
+	 System.out.println("Version: " + dbInformationCollection.get(i).toString());
+	 System.out.println("Expected: " + expectedMaxLength);
+	 System.out.println("Actual: " + typeDefinition.getMaximumLength() + "\n");
+	 
+	 System.out.println("Expected: " + expectedIdentifierLength);
+	 System.out.println("Actual: " + actualIdentifierLength + "\n");
+	 
+	 
+	 
+	 System.out.println("Product: " + (dataTypeList.get(j)));
+	 System.out.println("Version: " + dbInformationCollection.get(i).toString());
+	 System.out.println("Expected: " + expectedValue);
+	 System.out.println("Actual: " + typeDefinition.getMaximumPrecision() + "\n");
+	 
+	 System.out.println("Product: " + (dataTypeList.get(j)));
+	 System.out.println("Version: " + dbInformationCollection.get(i).toString());
+	 System.out.println("Expected: " + expectedValue);
+	 System.out.println("Actual: " + typeDefinition.getMaximumLength() + "\n");
+	 
+	 System.out.println("Product: " + (dataTypeList.get(j)));
+	 System.out.println("Version: " + dbInformationCollection.get(i).toString());
+	 System.out.println("Expected: " + expectedValue);
+	 System.out.println("Actual: " + typeDefinition.getMinimumScale() + "\n");
+	 
+	 System.out.println("Product: " + (dataTypeList.get(j)));
+	 System.out.println("Version: " + dbInformationCollection.get(i).toString());
+	 System.out.println("Expected: " + expectedValue);
+	 System.out.println("Actual: " + typeDefinition.getMaximumScale() + "\n");
+	 
+	 System.out.println("Expected: " + expectedValue);
+	 System.out.println("Actual: " + actualValue + "\n");
+	 */
+	
+	private String getAssertionFailureMessage(String methodName, Object versionName, String dataName){
+		
+		String temp = "\nData type: ";
+		
+		if(dataName.equals(""))
+		{
+			temp = "";
+		}
+		
+		return ("\nPackage: " + PACKAGE_NAME +
+				"\nMethod: " + methodName +
+			    "\nProduct: " + strProduct + " LUW" +
+		        "\nVersion: " + versionName +
+		        temp + dataName +
+		        "\nResult: The actual value does not agree with vendor doc. ");
+	}
+	
+	private String getExceptionMessage(String methodName, Object versionName, Exception e){
+		
+		return ("\nMethod: " + methodName + 
+				"\nProduct: " + strProduct + 
+			    "\nVersion: " + versionName +
+		        "\nException: " + e.toString() +
+		        "\nDescription: The exception is thrown in the test case");
+	}
+	
+	private int getProperIndex(int rawIndex){
+		
+		if(rawIndex == 0)
+			return 1;
+		else if(rawIndex == 1)
+			return 2;
+		else
+			return 0;
+	}
+	
+	public void tearDown(){
+		
+		expectedMaxPrecision = 0;
+		expectedMaxLength = 0;
+		expectedIdentifierLength = 0;
+		actualIdentifierLength = 0;
+		
+		productVersion = null;
+		dataType = null;
+		dataTypeList = null;
+		definitionCollection = new ArrayList();
+		dbInformationCollection = new ArrayList();
+		
+		strProductVersion = null;
+
+		definition = null;
+		typeDefinition = null;
+		procedure = null;
+	}
+}
diff --git a/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/DB2iSeriesTest.java b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/DB2iSeriesTest.java
new file mode 100644
index 0000000..93376c7
--- /dev/null
+++ b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/DB2iSeriesTest.java
@@ -0,0 +1,1778 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.dbdefinition.junittest;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesFactory;
+
+public class DB2iSeriesTest extends TestCase {
+	
+	//=========================V5R2=======================================
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_V5R2 = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_DATABASE_V5R2 = 18;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_V5R2 = 10;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_V5R2 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLE_V5R2 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_V5R2 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_VIEW_V5R2 = 128;
+	
+	private final int MAXIMUM_LENGTH_BLOB_V5R2 = 2147483647;
+	private final int MAXIMUM_LENGTH_CLOB_V5R2 = 2147483647;
+	private final int MAXIMUM_LENGTH_CHAR_V5R2 = 32766;
+	private final int MAXIMUM_LENGTH_DATALINK_V5R2 = 32717;
+	private final int MAXIMUM_LENGTH_DBCLOB_V5R2 = 1073741823;
+	private final int MAXIMUM_LENGTH_GRAPHIC_V5R2 = 16383;
+	private final int MAXIMUM_LENGTH_VARCHAR_V5R2 = 32740;
+	private final int MAXIMUM_LENGTH_VARGRAPHIC_V5R2 = 16370;
+	
+	private final int MAXIMUM_PRECISION_DECIMAL_V5R2 = 31;
+	private final int MAXIMUM_PRECISION_FLOAT_V5R2 = 53;
+	private final int MAXIMUM_PRECISION_NUMERIC_V5R2 = 31;	
+	
+    //=========================V5R3=======================================
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_V5R3 = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_DATABASE_V5R3 = 18;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_V5R3 = 10;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_V5R3 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLE_V5R3 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_V5R3 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_VIEW_V5R3 = 128;
+	
+	private final int MAXIMUM_LENGTH_BLOB_V5R3 = 2147483647;
+	private final int MAXIMUM_LENGTH_CLOB_V5R3 = 2147483647;
+	private final int MAXIMUM_LENGTH_CHAR_V5R3 = 32766;
+	private final int MAXIMUM_LENGTH_DATALINK_V5R3 = 32717;
+	private final int MAXIMUM_LENGTH_DBCLOB_V5R3 = 1073741823;
+	private final int MAXIMUM_LENGTH_GRAPHIC_V5R3 = 16383;
+	private final int MAXIMUM_LENGTH_VARBINARY_V5R3 = 32740;
+	private final int MAXIMUM_LENGTH_VARCHAR_V5R3 = 32740;
+	private final int MAXIMUM_LENGTH_VARGRAPHIC_V5R3 = 16370;
+	
+	private final int MAXIMUM_PRECISION_DECIMAL_V5R3 = 63;
+	private final int MAXIMUM_PRECISION_FLOAT_V5R3 = 53;
+	private final int MAXIMUM_PRECISION_NUMERIC_V5R3 = 63;	
+	
+//	=========================V5R4=======================================
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_V5R4 = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_DATABASE_V5R4 = 18;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_V5R4 = 10;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_V5R4 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLE_V5R4 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_V5R4 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_VIEW_V5R4 = 128;
+	
+	private final int MAXIMUM_LENGTH_BLOB_V5R4 = 2147483647;
+	private final int MAXIMUM_LENGTH_CLOB_V5R4 = 2147483647;
+	private final int MAXIMUM_LENGTH_CHAR_V5R4 = 32766;
+	private final int MAXIMUM_LENGTH_DATALINK_V5R4 = 32717;
+	private final int MAXIMUM_LENGTH_DBCLOB_V5R4 = 1073741823;
+	private final int MAXIMUM_LENGTH_GRAPHIC_V5R4 = 16383;
+	private final int MAXIMUM_LENGTH_VARBINARY_V5R4 = 32740;
+	private final int MAXIMUM_LENGTH_VARCHAR_V5R4 = 32740;
+	private final int MAXIMUM_LENGTH_VARGRAPHIC_V5R4 = 16370;
+	
+	private final int MAXIMUM_PRECISION_DECIMAL_V5R4 = 63;
+	private final int MAXIMUM_PRECISION_FLOAT_V5R4 = 53;
+	private final int MAXIMUM_PRECISION_NUMERIC_V5R4 = 63;	
+	
+	//==========================================================================================
+	
+	private final String strProduct = "DB2 UDB iSeries";
+	private final String PACKAGE_NAME = "org.eclipse.datatools.enablement.dbdefinition.junittest";
+	
+	private int expectedMaxPrecision = 0;
+	private int expectedMaxLength = 0;
+	private int expectedIdentifierLength = 0;
+	private int actualIdentifierLength = 0;
+
+	
+	private Iterator productVersion = null;
+	private Iterator dataType;
+	private List dataTypeList;
+	private ArrayList definitionCollection = new ArrayList();
+	private ArrayList dbInformationCollection = new ArrayList();
+	
+	private String strProductVersion = null;
+
+	private DatabaseDefinition definition = null;
+	private PredefinedDataTypeDefinition typeDefinition = null;
+	private Procedure procedure = null;
+	
+	public void setUp(){
+		
+		try{	
+			productVersion = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getVersions(strProduct);
+			assertNotNull("\nMethod: getVersions()" +
+						  "\nError: The method returns a NULL value in startUp()", productVersion);
+					
+			while(productVersion.hasNext())
+			{
+				strProductVersion = productVersion.next().toString();
+				definition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(strProduct, strProductVersion);
+				assertNotNull("\nMethod: getDefinition()" +
+							  "\nError: The method returns a NULL value in startUp()", definition);
+					
+				dbInformationCollection.add(strProductVersion);
+				definitionCollection.add(definition);
+			}
+		}
+		catch(Exception e){
+			fail("\nMethod: setUp()" +
+				 "\nException: " + e.toString() +
+			     "\nDescription: The set up is incomplete");
+		}
+	}
+	
+//==========================================V5R2==============================================
+	
+	public void testGetMaximumPrecision_DECIMAL_V5R2(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_DECIMAL_V5R2;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DECIMAL"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "DECIMAL"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_NUMERIC_V5R2(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_NUMERIC_V5R2;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMERIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "NUMERIC"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_FLOAT_V5R2(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_FLOAT_V5R2;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("FLOAT"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "FLOAT"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CHAR_V5R2(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CHAR_V5R2;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_GRAPHIC_V5R2(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_GRAPHIC_V5R2;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("GRAPHIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "GRAPHIC"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARCHAR_V5R2(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARCHAR_V5R2;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARCHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CLOB_V5R2(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CLOB_V5R2;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CLOB"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_BLOB_V5R2(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_BLOB_V5R2;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("BLOB"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "BLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_DATALINK_V5R2(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_DATALINK_V5R2;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DATALINK"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "DATALINK"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_DBCLOB_V5R2(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_DBCLOB_V5R2;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DBCLOB"))
+							{				
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "DBCLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+		
+	public void testGetMaximumLength_VARGRAPHIC_V5R2(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARGRAPHIC_V5R2;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARGRAPHIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARGRAPHIC"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetDatabaseMaximumIdentifierLength_V5R2(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V5R2"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getDatabaseMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_DATABASE_V5R2;
+				
+					assertEquals(getAssertionFailureMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetSchemaMaximumIdentifierLength_V5R2(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V5R2"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getSchemaMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_V5R2;
+				
+					assertEquals(getAssertionFailureMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetTableMaximumIdentifierLength_V5R2(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V5R2"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTableMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TABLE_V5R2;
+				
+					assertEquals(getAssertionFailureMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetViewMaximumIdentifierLength_V5R2(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V5R2"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getViewMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_VIEW_V5R2;
+				
+					assertEquals(getAssertionFailureMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetColumnMaximumIdentifierLength_V5R2(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V5R2"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getColumnMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_COLUMN_V5R2;
+				
+					assertEquals(getAssertionFailureMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetTriggerMaximumIdentifierLength_V5R2(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V5R2"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTriggerMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_V5R2;
+				
+					assertEquals(getAssertionFailureMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetStoredProcedureMaximumIdentifierLength_V5R2(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				
+				if((dbInformationCollection.get(i).toString()).equals("V5R2"))
+				{
+					procedure = SQLRoutinesFactory.eINSTANCE.createProcedure();
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getMaximumIdentifierLength(procedure);
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_V5R2;
+				
+					assertEquals(getAssertionFailureMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+//==========================================V5R3==============================================
+	
+	public void testGetMaximumPrecision_DECIMAL_V5R3(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R3"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_DECIMAL_V5R3;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DECIMAL"))
+							{
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "DECIMAL"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_NUMERIC_V5R3(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R3"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_NUMERIC_V5R3;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMERIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "NUMERIC"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_FLOAT_V5R3(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R3"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_FLOAT_V5R3;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("FLOAT"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "FLOAT"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CHAR_V5R3(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R3"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CHAR_V5R3;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_GRAPHIC_V5R3(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R3"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_GRAPHIC_V5R3;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("GRAPHIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "GRAPHIC"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARCHAR_V5R3(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R3"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARCHAR_V5R3;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARCHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARBINARY_V5R3(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R3"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARBINARY_V5R3;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR FOR BIT DATA"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARBINARY"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CLOB_V5R3(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R3"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CLOB_V5R3;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CLOB"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_BLOB_V5R3(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R3"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_BLOB_V5R3;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("BLOB"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "BLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_DATALINK_V5R3(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R3"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_DATALINK_V5R3;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DATALINK"))
+							{							
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "DATALINK"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_DBCLOB_V5R3(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R3"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_DBCLOB_V5R3;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DBCLOB"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "DBCLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARGRAPHIC_V5R3(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R3"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARGRAPHIC_V5R3;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARGRAPHIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARGRAPHIC"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetDatabaseMaximumIdentifierLength_V5R3(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V5R3"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getDatabaseMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_DATABASE_V5R3;
+				
+					assertEquals(getAssertionFailureMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetSchemaMaximumIdentifierLength_V5R3(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V5R3"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getSchemaMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_V5R3;
+				
+					assertEquals(getAssertionFailureMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetTableMaximumIdentifierLength_V5R3(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V5R3"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTableMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TABLE_V5R3;
+				
+					assertEquals(getAssertionFailureMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetViewMaximumIdentifierLength_V5R3(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V5R3"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getViewMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_VIEW_V5R3;
+				
+					assertEquals(getAssertionFailureMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetColumnMaximumIdentifierLength_V5R3(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V5R3"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getColumnMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_COLUMN_V5R3;
+				
+					assertEquals(getAssertionFailureMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetTriggerMaximumIdentifierLength_V5R3(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V5R3"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTriggerMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_V5R3;
+				
+					assertEquals(getAssertionFailureMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetStoredProcedureMaximumIdentifierLength_V5R3(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				
+				if((dbInformationCollection.get(i).toString()).equals("V5R3"))
+				{
+					procedure = SQLRoutinesFactory.eINSTANCE.createProcedure();
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getMaximumIdentifierLength(procedure);
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_V5R3;
+				
+					assertEquals(getAssertionFailureMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+//==========================================V5R4==============================================
+	
+	public void testGetMaximumPrecision_DECIMAL_V5R4(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R4"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_DECIMAL_V5R4;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DECIMAL"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "DECIMAL"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_NUMERIC_V5R4(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R4"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_NUMERIC_V5R4;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMERIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "NUMERIC"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_FLOAT_V5R4(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R4"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_FLOAT_V5R4;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("FLOAT"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "FLOAT"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CHAR_V5R4(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R4"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CHAR_V5R4;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_GRAPHIC_V5R4(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R4"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_GRAPHIC_V5R4;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("GRAPHIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "GRAPHIC"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARCHAR_V5R4(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R4"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARCHAR_V5R4;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARCHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARBINARY_V5R4(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R4"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARBINARY_V5R4;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR FOR BIT DATA"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARBINARY"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CLOB_V5R4(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R4"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CLOB_V5R4;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CLOB"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_BLOB_V5R4(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R4"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_BLOB_V5R4;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("BLOB"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "BLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_DATALINK_V5R4(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R4"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_DATALINK_V5R4;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DATALINK"))
+							{							
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "DATALINK"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_DBCLOB_V5R4(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R4"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_DBCLOB_V5R4;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DBCLOB"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "DBCLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARGRAPHIC_V5R4(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V5R4"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARGRAPHIC_V5R4;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARGRAPHIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARGRAPHIC"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetDatabaseMaximumIdentifierLength_V5R4(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V5R4"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getDatabaseMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_DATABASE_V5R4;
+				
+					assertEquals(getAssertionFailureMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetSchemaMaximumIdentifierLength_V5R4(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V5R4"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getSchemaMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_V5R4;
+				
+					assertEquals(getAssertionFailureMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetTableMaximumIdentifierLength_V5R4(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V5R4"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTableMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TABLE_V5R4;
+				
+					assertEquals(getAssertionFailureMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetViewMaximumIdentifierLength_V5R4(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V5R4"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getViewMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_VIEW_V5R4;
+				
+					assertEquals(getAssertionFailureMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetColumnMaximumIdentifierLength_V5R4(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V5R4"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getColumnMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_COLUMN_V5R4;
+				
+					assertEquals(getAssertionFailureMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetTriggerMaximumIdentifierLength_V5R4(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V5R4"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTriggerMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_V5R4;
+				
+					assertEquals(getAssertionFailureMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetStoredProcedureMaximumIdentifierLength_V5R4(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				
+				if((dbInformationCollection.get(i).toString()).equals("V5R4"))
+				{
+					procedure = SQLRoutinesFactory.eINSTANCE.createProcedure();
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getMaximumIdentifierLength(procedure);
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_V5R4;
+				
+					assertEquals(getAssertionFailureMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+
+
+	
+	private String getAssertionFailureMessage(String methodName, Object versionName, String dataName){
+		
+		String temp = "\nData type: ";
+		
+		if(dataName.equals(""))
+		{
+			temp = "";
+		}
+		
+		return ("\nPackage: " + PACKAGE_NAME +
+				"\nMethod: " + methodName +
+			    "\nProduct: " + strProduct +
+		        "\nVersion: " + versionName +
+		        temp + dataName +
+		        "\nResult: The actual value does not agree with vendor doc. ");
+	}
+	
+	private String getExceptionMessage(String methodName, Object versionName, Exception e){
+		
+		return ("\nMethod: " + methodName + 
+				"\nProduct: " + strProduct + 
+			    "\nVersion: " + versionName +
+		        "\nException: " + e.toString() +
+		        "\nDescription: The exception is thrown in the test case");
+	}
+	
+	public void tearDown(){
+		
+		expectedMaxPrecision = 0;
+		expectedMaxLength = 0;
+		expectedIdentifierLength = 0;
+		actualIdentifierLength = 0;
+		
+		productVersion = null;
+		dataType = null;
+		dataTypeList = null;
+		definitionCollection = new ArrayList();
+		dbInformationCollection = new ArrayList();
+		
+		strProductVersion = null;
+
+		definition = null;
+		typeDefinition = null;
+		procedure = null;
+	}
+
+}
diff --git a/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/DB2zSeriesTest.java b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/DB2zSeriesTest.java
new file mode 100644
index 0000000..92ba78a
--- /dev/null
+++ b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/DB2zSeriesTest.java
@@ -0,0 +1,2618 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.dbdefinition.junittest;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesFactory;
+
+public class DB2zSeriesTest extends TestCase {
+	
+	//=========================Version 7=======================================
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_V7 = 18;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_DATABASE_V7 = 8;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_V7 = 8;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_V7 = 18;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLE_V7 = 18;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLESPACE_V7 = 8;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_V7 = 8;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_VIEW_V7 = 18;
+	
+	private final int MAXIMUM_LENGTH_BLOB_V7 = 2147483647;
+	private final int MAXIMUM_LENGTH_CLOB_V7 = 2147483647;
+	private final int MAXIMUM_LENGTH_CHAR_V7 = 255;
+	private final int MAXIMUM_LENGTH_DBCLOB_V7 = 1073741823;
+	private final int MAXIMUM_LENGTH_GRAPHIC_V7 = 127;
+	private final int MAXIMUM_LENGTH_VARCHAR_V7 = 32704;
+	private final int MAXIMUM_LENGTH_VARGRAPHIC_V7 = 16352;
+	
+	private final int MAXIMUM_PRECISION_DECIMAL_V7 = 31;
+	private final int MAXIMUM_PRECISION_FLOAT_V7 = 53;
+	private final int MAXIMUM_PRECISION_NUMERIC_V7 = 31;	
+	
+    //=========================Version 8 Compatibility====================================
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_V8_COMPATIBILITY = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_DATABASE_V8_COMPATIBILITY = 8;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_V8_COMPATIBILITY = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_V8_COMPATIBILITY = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLE_V8_COMPATIBILITY = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLESPACE_V8_COMPATIBILITY = 8;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_V8_COMPATIBILITY = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_VIEW_V8_COMPATIBILITY = 128;
+	
+	private final int MAXIMUM_LENGTH_BLOB_V8_COMPATIBILITY = 2147483647;
+	private final int MAXIMUM_LENGTH_CLOB_V8_COMPATIBILITY = 2147483647;
+	private final int MAXIMUM_LENGTH_CHAR_V8_COMPATIBILITY = 255;
+	private final int MAXIMUM_LENGTH_DBCLOB_V8_COMPATIBILITY = 1073741823;
+	private final int MAXIMUM_LENGTH_GRAPHIC_V8_COMPATIBILITY = 127;
+	private final int MAXIMUM_LENGTH_VARCHAR_V8_COMPATIBILITY = 32704;
+	private final int MAXIMUM_LENGTH_VARGRAPHIC_V8_COMPATIBILITY = 16352;
+	
+	private final int MAXIMUM_PRECISION_DECIMAL_V8_COMPATIBILITY = 31;
+	private final int MAXIMUM_PRECISION_FLOAT_V8_COMPATIBILITY = 53;
+	private final int MAXIMUM_PRECISION_NUMERIC_V8_COMPATIBILITY = 31;
+	
+	//=========================Version 8 New Function=====================================
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_V8_NEW_FUNCTION = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_DATABASE_V8_NEW_FUNCTION = 8;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_V8_NEW_FUNCTION = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_V8_NEW_FUNCTION = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLE_V8_NEW_FUNCTION = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLESPACE_V8_NEW_FUNCTION = 8;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_V8_NEW_FUNCTION = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_VIEW_V8_NEW_FUNCTION = 128;
+	
+	private final int MAXIMUM_LENGTH_BLOB_V8_NEW_FUNCTION = 2147483647;
+	private final int MAXIMUM_LENGTH_CLOB_V8_NEW_FUNCTION = 2147483647;
+	private final int MAXIMUM_LENGTH_CHAR_V8_NEW_FUNCTION = 255;
+	private final int MAXIMUM_LENGTH_DBCLOB_V8_NEW_FUNCTION = 1073741823;
+	private final int MAXIMUM_LENGTH_GRAPHIC_V8_NEW_FUNCTION = 127;
+	private final int MAXIMUM_LENGTH_VARCHAR_V8_NEW_FUNCTION = 32704;
+	private final int MAXIMUM_LENGTH_VARGRAPHIC_V8_NEW_FUNCTION = 16352;
+	
+	private final int MAXIMUM_PRECISION_DECIMAL_V8_NEW_FUNCTION = 31;
+	private final int MAXIMUM_PRECISION_FLOAT_V8_NEW_FUNCTION = 53;
+	private final int MAXIMUM_PRECISION_NUMERIC_V8_NEW_FUNCTION = 31;
+	
+//	=========================Version 9 Compatibility====================================
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_V9_COMPATIBILITY = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_DATABASE_V9_COMPATIBILITY = 8;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_V9_COMPATIBILITY = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_V9_COMPATIBILITY = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLE_V9_COMPATIBILITY = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLESPACE_V9_COMPATIBILITY = 8;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_V9_COMPATIBILITY = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_VIEW_V9_COMPATIBILITY = 128;
+	
+	private final int MAXIMUM_LENGTH_BLOB_V9_COMPATIBILITY = 2147483647;
+	private final int MAXIMUM_LENGTH_CLOB_V9_COMPATIBILITY = 2147483647;
+	private final int MAXIMUM_LENGTH_CHAR_V9_COMPATIBILITY = 255;
+	private final int MAXIMUM_LENGTH_DBCLOB_V9_COMPATIBILITY = 1073741823;
+	private final int MAXIMUM_LENGTH_GRAPHIC_V9_COMPATIBILITY = 127;
+	private final int MAXIMUM_LENGTH_VARCHAR_V9_COMPATIBILITY = 32704;
+	private final int MAXIMUM_LENGTH_VARGRAPHIC_V9_COMPATIBILITY = 16352;
+	
+	private final int MAXIMUM_PRECISION_DECIMAL_V9_COMPATIBILITY = 31;
+	private final int MAXIMUM_PRECISION_FLOAT_V9_COMPATIBILITY = 53;
+	private final int MAXIMUM_PRECISION_NUMERIC_V9_COMPATIBILITY = 31;
+	
+	//=========================Version 9 New Function=====================================
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_V9_NEW_FUNCTION = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_DATABASE_V9_NEW_FUNCTION = 8;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_V9_NEW_FUNCTION = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_V9_NEW_FUNCTION = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLE_V9_NEW_FUNCTION = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLESPACE_V9_NEW_FUNCTION = 8;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_V9_NEW_FUNCTION = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_VIEW_V9_NEW_FUNCTION = 128;
+	
+	private final int MAXIMUM_LENGTH_BLOB_V9_NEW_FUNCTION = 2147483647;
+	private final int MAXIMUM_LENGTH_CLOB_V9_NEW_FUNCTION = 2147483647;
+	private final int MAXIMUM_LENGTH_CHAR_V9_NEW_FUNCTION = 255;
+	private final int MAXIMUM_LENGTH_DBCLOB_V9_NEW_FUNCTION = 1073741823;
+	private final int MAXIMUM_LENGTH_GRAPHIC_V9_NEW_FUNCTION = 127;
+	private final int MAXIMUM_LENGTH_VARCHAR_V9_NEW_FUNCTION = 32704;
+	private final int MAXIMUM_LENGTH_VARGRAPHIC_V9_NEW_FUNCTION = 16352;
+	
+	private final int MAXIMUM_PRECISION_DECIMAL_V9_NEW_FUNCTION = 31;
+	private final int MAXIMUM_PRECISION_FLOAT_V9_NEW_FUNCTION = 53;
+	private final int MAXIMUM_PRECISION_NUMERIC_V9_NEW_FUNCTION = 31;
+	//==========================================================================================
+	
+	private final String strProduct = "DB2 UDB zSeries";
+	private final String PACKAGE_NAME = "org.eclipse.datatools.enablement.dbdefinition.junittest";
+	
+	private int expectedMaxPrecision = 0;
+	private int expectedMaxLength = 0;
+	private int expectedIdentifierLength = 0;
+	private int actualIdentifierLength = 0;
+
+	
+	private Iterator productVersion = null;
+	private Iterator dataType;
+	private List dataTypeList;
+	private ArrayList definitionCollection = new ArrayList();
+	private ArrayList dbInformationCollection = new ArrayList();
+	
+	private String strProductVersion = null;
+
+	private DatabaseDefinition definition = null;
+	private PredefinedDataTypeDefinition typeDefinition = null;
+	private Procedure procedure = null;
+
+	
+	public void setUp(){
+		
+		try{	
+			productVersion = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getVersions(strProduct);
+			assertNotNull("\nMethod: getVersions()" +
+						  "\nError: The method returns a NULL value in startUp()", productVersion);
+					
+			while(productVersion.hasNext())
+			{
+				strProductVersion = productVersion.next().toString();
+				definition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(strProduct, strProductVersion);
+				assertNotNull("\nMethod: getDefinition()" +
+							  "\nError: The method returns a NULL value in startUp()", definition);
+					
+				dbInformationCollection.add(strProductVersion);
+				definitionCollection.add(definition);
+			}
+		}
+		catch(Exception e){
+			fail("\nMethod: setUp()" +
+				 "\nException: " + e.toString() +
+			     "\nDescription: The set up is incomplete");
+		}
+	}
+	
+//==========================================Version 7==============================================
+	
+	public void testGetMaximumPrecision_DECIMAL_V7(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V7"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_DECIMAL_V7;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DECIMAL"))
+							{								
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "DECIMAL"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_NUMERIC_V7(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V7"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_NUMERIC_V7;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMERIC"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "NUMERIC"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_FLOAT_V7(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V7"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_FLOAT_V7;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("FLOAT"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "FLOAT"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CHAR_V7(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V7"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CHAR_V7;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_GRAPHIC_V7(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V7"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_GRAPHIC_V7;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("GRAPHIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "GRAPHIC"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARCHAR_V7(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V7"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARCHAR_V7;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARCHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CLOB_V7(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V7"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CLOB_V7;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CLOB"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_BLOB_V7(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V7"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_BLOB_V7;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("BLOB"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "BLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_DBCLOB_V7(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V7"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_DBCLOB_V7;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DBCLOB"))
+							{		
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "DBCLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARGRAPHIC_V7(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V7"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARGRAPHIC_V7;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARGRAPHIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARGRAPHIC"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetDatabaseMaximumIdentifierLength_V7(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V7"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getDatabaseMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_DATABASE_V7;
+					
+					assertEquals(getAssertionFailureMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetSchemaMaximumIdentifierLength_V7(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V7"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getSchemaMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_V7;
+					
+					assertEquals(getAssertionFailureMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetTableMaximumIdentifierLength_V7(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V7"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTableMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TABLE_V7;
+					
+					assertEquals(getAssertionFailureMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetViewMaximumIdentifierLength_V7(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V7"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getViewMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_VIEW_V7;
+
+					assertEquals(getAssertionFailureMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetColumnMaximumIdentifierLength_V7(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V7"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getColumnMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_COLUMN_V7;
+		
+					assertEquals(getAssertionFailureMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetTriggerMaximumIdentifierLength_V7(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V7"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTriggerMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_V7;
+
+					assertEquals(getAssertionFailureMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetTablespaceMaximumIdentifierLength_V7(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V7"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTablespaceMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TABLESPACE_V7;
+		
+					assertEquals(getAssertionFailureMessage("getTablespaceMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getTablespaceMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetStoredProcedureMaximumIdentifierLength_V7(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				
+				if((dbInformationCollection.get(i).toString()).equals("V7"))
+				{
+					procedure = SQLRoutinesFactory.eINSTANCE.createProcedure();
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getMaximumIdentifierLength(procedure);
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_V7;
+				
+					assertEquals(getAssertionFailureMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+//===================================Version 8 Compatibility==============================
+	
+	public void testGetMaximumPrecision_DECIMAL_V8Compatibility(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8 (Compatibility Mode)"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_DECIMAL_V8_COMPATIBILITY;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DECIMAL"))
+							{								
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "DECIMAL"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_NUMERIC_V8Compatibility(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8 (Compatibility Mode)"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_NUMERIC_V8_COMPATIBILITY;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMERIC"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "NUMERIC"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_FLOAT_V8Compatibility(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8 (Compatibility Mode)"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_FLOAT_V8_COMPATIBILITY;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("FLOAT"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "FLOAT"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CHAR_V8Compatibility(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8 (Compatibility Mode)"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CHAR_V8_COMPATIBILITY;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_GRAPHIC_V8Compatibility(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8 (Compatibility Mode)"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_GRAPHIC_V8_COMPATIBILITY;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("GRAPHIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "GRAPHIC"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARCHAR_V8Compatibility(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8 (Compatibility Mode)"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARCHAR_V8_COMPATIBILITY;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARCHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CLOB_V8Compatibility(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8 (Compatibility Mode)"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CLOB_V8_COMPATIBILITY;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CLOB"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_BLOB_V8Compatibility(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8 (Compatibility Mode)"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_BLOB_V8_COMPATIBILITY;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("BLOB"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "BLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_DBCLOB_V8Compatibility(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8 (Compatibility Mode)"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_DBCLOB_V8_COMPATIBILITY;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DBCLOB"))
+							{		
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "DBCLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARGRAPHIC_V8Compatibility(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8 (Compatibility Mode)"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARGRAPHIC_V8_COMPATIBILITY;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARGRAPHIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARGRAPHIC"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetDatabaseMaximumIdentifierLength_V8Compatibility(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8 (Compatibility Mode)"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getDatabaseMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_DATABASE_V8_COMPATIBILITY;
+							
+					assertEquals(getAssertionFailureMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetSchemaMaximumIdentifierLength_V8Compatibility(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8 (Compatibility Mode)"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getSchemaMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_V8_COMPATIBILITY;
+					
+					assertEquals(getAssertionFailureMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetTableMaximumIdentifierLength_V8Compatibility(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8 (Compatibility Mode)"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTableMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TABLE_V8_COMPATIBILITY;
+				
+					assertEquals(getAssertionFailureMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetViewMaximumIdentifierLength_V8Compatibility(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8 (Compatibility Mode)"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getViewMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_VIEW_V8_COMPATIBILITY;
+				
+					assertEquals(getAssertionFailureMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetColumnMaximumIdentifierLength_V8Compatibility(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8 (Compatibility Mode)"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getColumnMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_COLUMN_V8_COMPATIBILITY;
+				
+					assertEquals(getAssertionFailureMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetTriggerMaximumIdentifierLength_V8Compatibility(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8 (Compatibility Mode)"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTriggerMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_V8_COMPATIBILITY;
+				
+					assertEquals(getAssertionFailureMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetTablespaceMaximumIdentifierLength_V8Compatibility(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8 (Compatibility Mode)"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTablespaceMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TABLESPACE_V8_COMPATIBILITY;
+
+					assertEquals(getAssertionFailureMessage("getTablespaceMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getTablespaceMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetStoredProcedureMaximumIdentifierLength_V8Compatibility(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				
+				if((dbInformationCollection.get(i).toString()).equals("V8 (Compatibility Mode)"))
+				{
+					procedure = SQLRoutinesFactory.eINSTANCE.createProcedure();
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getMaximumIdentifierLength(procedure);
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_V8_COMPATIBILITY;
+				
+					assertEquals(getAssertionFailureMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+//====================================Version 8 New Function==============================
+	
+	public void testGetMaximumPrecision_DECIMAL_V8NewFunction(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8 (New-Function Mode)"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_DECIMAL_V8_NEW_FUNCTION;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DECIMAL"))
+							{								
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "DECIMAL"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_NUMERIC_V8NewFunction(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8 (New-Function Mode)"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_NUMERIC_V8_NEW_FUNCTION;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMERIC"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "NUMERIC"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_FLOAT_V8NewFunction(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8 (New-Function Mode)"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_FLOAT_V8_NEW_FUNCTION;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("FLOAT"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "FLOAT"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CHAR_V8NewFunction(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8 (New-Function Mode)"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CHAR_V8_NEW_FUNCTION;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_GRAPHIC_V8NewFunction(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8 (New-Function Mode)"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_GRAPHIC_V8_NEW_FUNCTION;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("GRAPHIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "GRAPHIC"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARCHAR_V8NewFunction(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8 (New-Function Mode)"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARCHAR_V8_NEW_FUNCTION;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARCHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CLOB_V8NewFunction(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8 (New-Function Mode)"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CLOB_V8_NEW_FUNCTION;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CLOB"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_BLOB_V8NewFunction(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8 (New-Function Mode)"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_BLOB_V8_NEW_FUNCTION;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("BLOB"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "BLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_DBCLOB_V8NewFunction(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8 (New-Function Mode)"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_DBCLOB_V8_NEW_FUNCTION;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DBCLOB"))
+							{		
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "DBCLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARGRAPHIC_V8NewFunction(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("V8 (New-Function Mode)"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARGRAPHIC_V8_NEW_FUNCTION;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARGRAPHIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARGRAPHIC"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetDatabaseMaximumIdentifierLength_V8NewFunction(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8 (New-Function Mode)"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getDatabaseMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_DATABASE_V8_NEW_FUNCTION;
+					
+					assertEquals(getAssertionFailureMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetSchemaMaximumIdentifierLength_V8NewFunction(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8 (New-Function Mode)"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getSchemaMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_V8_NEW_FUNCTION;
+					
+					assertEquals(getAssertionFailureMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetTableMaximumIdentifierLength_V8NewFunction(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8 (New-Function Mode)"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTableMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TABLE_V8_NEW_FUNCTION;
+					
+					assertEquals(getAssertionFailureMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetViewMaximumIdentifierLength_V8NewFunction(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8 (New-Function Mode)"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getViewMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_VIEW_V8_NEW_FUNCTION;
+					
+					assertEquals(getAssertionFailureMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetColumnMaximumIdentifierLength_V8NewFunction(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8 (New-Function Mode)"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getColumnMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_COLUMN_V8_NEW_FUNCTION;
+					
+					assertEquals(getAssertionFailureMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetTriggerMaximumIdentifierLength_V8NewFunction(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8 (New-Function Mode)"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTriggerMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_V8_NEW_FUNCTION;
+					
+					assertEquals(getAssertionFailureMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetTablespaceMaximumIdentifierLength_V8NewFunction(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("V8 (New-Function Mode)"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTablespaceMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TABLESPACE_V8_NEW_FUNCTION;
+					
+					assertEquals(getAssertionFailureMessage("getTablespaceMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getTablespaceMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetStoredProcedureMaximumIdentifierLength_V8NewFunction(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				
+				if((dbInformationCollection.get(i).toString()).equals("V8 (New-Function Mode)"))
+				{
+					procedure = SQLRoutinesFactory.eINSTANCE.createProcedure();
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getMaximumIdentifierLength(procedure);
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_V8_NEW_FUNCTION;
+				
+					assertEquals(getAssertionFailureMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	
+//	===================================Version 9 Compatibility==============================
+		
+		public void testGetMaximumPrecision_DECIMAL_V9Compatibility(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+					
+					while(dataType.hasNext())
+					{
+						typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+						
+						if((dbInformationCollection.get(i).toString()).equals("V9 (Compatibility Mode)"))
+						{
+							dataTypeList = typeDefinition.getName();
+							expectedMaxPrecision = MAXIMUM_PRECISION_DECIMAL_V9_COMPATIBILITY;
+							
+							for(int j = 0; j < dataTypeList.size(); j++)
+							{
+								if((dataTypeList.get(j)).equals("DECIMAL"))
+								{								
+									assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "DECIMAL"),
+											expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+								}
+							}
+						}
+					}
+
+				}catch(Exception e){
+					fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(3), e));
+				}
+			}
+		}
+		
+		public void testGetMaximumPrecision_NUMERIC_V9Compatibility(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+					
+					while(dataType.hasNext())
+					{
+						typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+						
+						if((dbInformationCollection.get(i).toString()).equals("V9 (Compatibility Mode)"))
+						{
+							dataTypeList = typeDefinition.getName();
+							expectedMaxPrecision = MAXIMUM_PRECISION_NUMERIC_V9_COMPATIBILITY;
+							
+							for(int j = 0; j < dataTypeList.size(); j++)
+							{
+								if((dataTypeList.get(j)).equals("NUMERIC"))
+								{									
+									assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "NUMERIC"),
+											expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+								}
+							}
+						}
+					}
+
+				}catch(Exception e){
+					fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(3), e));
+				}
+			}
+		}
+		
+		public void testGetMaximumPrecision_FLOAT_V9Compatibility(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+					
+					while(dataType.hasNext())
+					{
+						typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+						
+						if((dbInformationCollection.get(i).toString()).equals("V9 (Compatibility Mode)"))
+						{
+							dataTypeList = typeDefinition.getName();
+							expectedMaxPrecision = MAXIMUM_PRECISION_FLOAT_V9_COMPATIBILITY;
+							
+							for(int j = 0; j < dataTypeList.size(); j++)
+							{
+								if((dataTypeList.get(j)).equals("FLOAT"))
+								{	
+									assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "FLOAT"),
+											expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+								}
+							}
+						}
+					}
+
+				}catch(Exception e){
+					fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(3), e));
+				}
+			}
+		}
+		
+		public void testGetMaximumLength_CHAR_V9Compatibility(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+					
+					while(dataType.hasNext())
+					{
+						typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+						
+						if((dbInformationCollection.get(i).toString()).equals("V9 (Compatibility Mode)"))
+						{
+							dataTypeList = typeDefinition.getName();
+							expectedMaxLength = MAXIMUM_LENGTH_CHAR_V9_COMPATIBILITY;
+							
+							for(int j = 0; j < dataTypeList.size(); j++)
+							{
+								if((dataTypeList.get(j)).equals("CHAR"))
+								{	
+									assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CHAR"),
+											expectedMaxLength, typeDefinition.getMaximumLength());
+								}
+							}
+						}
+					}
+
+				}catch(Exception e){
+					fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(3), e));
+				}
+			}
+		}
+		
+		public void testGetMaximumLength_GRAPHIC_V9Compatibility(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+					
+					while(dataType.hasNext())
+					{
+						typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+						
+						if((dbInformationCollection.get(i).toString()).equals("V9 (Compatibility Mode)"))
+						{
+							dataTypeList = typeDefinition.getName();
+							expectedMaxLength = MAXIMUM_LENGTH_GRAPHIC_V9_COMPATIBILITY;
+							
+							for(int j = 0; j < dataTypeList.size(); j++)
+							{
+								if((dataTypeList.get(j)).equals("GRAPHIC"))
+								{	
+									assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "GRAPHIC"),
+											expectedMaxLength, typeDefinition.getMaximumLength());
+								}
+							}
+						}
+					}
+
+				}catch(Exception e){
+					fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(3), e));
+				}
+			}
+		}
+		
+		public void testGetMaximumLength_VARCHAR_V9Compatibility(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+					
+					while(dataType.hasNext())
+					{
+						typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+						
+						if((dbInformationCollection.get(i).toString()).equals("V9 (Compatibility Mode)"))
+						{
+							dataTypeList = typeDefinition.getName();
+							expectedMaxLength = MAXIMUM_LENGTH_VARCHAR_V9_COMPATIBILITY;
+							
+							for(int j = 0; j < dataTypeList.size(); j++)
+							{
+								if((dataTypeList.get(j)).equals("VARCHAR"))
+								{	
+									assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARCHAR"),
+											expectedMaxLength, typeDefinition.getMaximumLength());
+								}
+							}
+						}
+					}
+
+				}catch(Exception e){
+					fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(3), e));
+				}
+			}
+		}
+		
+		public void testGetMaximumLength_CLOB_V9Compatibility(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+					
+					while(dataType.hasNext())
+					{
+						typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+						
+						if((dbInformationCollection.get(i).toString()).equals("V9 (Compatibility Mode)"))
+						{
+							dataTypeList = typeDefinition.getName();
+							expectedMaxLength = MAXIMUM_LENGTH_CLOB_V9_COMPATIBILITY;
+							
+							for(int j = 0; j < dataTypeList.size(); j++)
+							{
+								if((dataTypeList.get(j)).equals("CLOB"))
+								{	
+									assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CLOB"),
+											expectedMaxLength, typeDefinition.getMaximumLength());
+								}
+							}
+						}
+					}
+
+				}catch(Exception e){
+					fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(3), e));
+				}
+			}
+		}
+		
+		public void testGetMaximumLength_BLOB_V9Compatibility(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+					
+					while(dataType.hasNext())
+					{
+						typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+						
+						if((dbInformationCollection.get(i).toString()).equals("V9 (Compatibility Mode)"))
+						{
+							dataTypeList = typeDefinition.getName();
+							expectedMaxLength = MAXIMUM_LENGTH_BLOB_V9_COMPATIBILITY;
+							
+							for(int j = 0; j < dataTypeList.size(); j++)
+							{
+								if((dataTypeList.get(j)).equals("BLOB"))
+								{	
+									assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "BLOB"),
+											expectedMaxLength, typeDefinition.getMaximumLength());
+								}
+							}
+						}
+					}
+
+				}catch(Exception e){
+					fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(3), e));
+				}
+			}
+		}
+		
+		public void testGetMaximumLength_DBCLOB_V9Compatibility(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+					
+					while(dataType.hasNext())
+					{
+						typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+						
+						if((dbInformationCollection.get(i).toString()).equals("V9 (Compatibility Mode)"))
+						{
+							dataTypeList = typeDefinition.getName();
+							expectedMaxLength = MAXIMUM_LENGTH_DBCLOB_V9_COMPATIBILITY;
+							
+							for(int j = 0; j < dataTypeList.size(); j++)
+							{
+								if((dataTypeList.get(j)).equals("DBCLOB"))
+								{		
+									assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "DBCLOB"),
+											expectedMaxLength, typeDefinition.getMaximumLength());
+								}
+							}
+						}
+					}
+
+				}catch(Exception e){
+					fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(3), e));
+				}
+			}
+		}
+		
+		public void testGetMaximumLength_VARGRAPHIC_V9Compatibility(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+					
+					while(dataType.hasNext())
+					{
+						typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+						
+						if((dbInformationCollection.get(i).toString()).equals("V9 (Compatibility Mode)"))
+						{
+							dataTypeList = typeDefinition.getName();
+							expectedMaxLength = MAXIMUM_LENGTH_VARGRAPHIC_V9_COMPATIBILITY;
+							
+							for(int j = 0; j < dataTypeList.size(); j++)
+							{
+								if((dataTypeList.get(j)).equals("VARGRAPHIC"))
+								{	
+									assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARGRAPHIC"),
+											expectedMaxLength, typeDefinition.getMaximumLength());
+								}
+							}
+						}
+					}
+
+				}catch(Exception e){
+					fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(3), e));
+				}
+			}
+		}
+		
+		public void testGetSchemaMaximumIdentifierLength_V9Compatibility(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					if((dbInformationCollection.get(i).toString()).equals("V9 (Compatibility Mode)"))
+					{
+						actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getSchemaMaximumIdentifierLength();
+						expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_V9_COMPATIBILITY;
+						
+						assertEquals(getAssertionFailureMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+								expectedIdentifierLength, actualIdentifierLength);
+					}
+
+				}catch(Exception e){
+					fail(getExceptionMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(3), e));
+				}
+			}
+		}
+		
+		public void testGetTableMaximumIdentifierLength_V9Compatibility(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					if((dbInformationCollection.get(i).toString()).equals("V9 (Compatibility Mode)"))
+					{
+						actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTableMaximumIdentifierLength();
+						expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TABLE_V9_COMPATIBILITY;
+					
+						assertEquals(getAssertionFailureMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+								expectedIdentifierLength, actualIdentifierLength);
+					}
+					
+				}catch(Exception e){
+					fail(getExceptionMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(3), e));
+				}
+			}
+		}
+		
+		public void testGetViewMaximumIdentifierLength_V9Compatibility(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					if((dbInformationCollection.get(i).toString()).equals("V9 (Compatibility Mode)"))
+					{
+						actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getViewMaximumIdentifierLength();
+						expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_VIEW_V9_COMPATIBILITY;
+					
+						assertEquals(getAssertionFailureMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+								expectedIdentifierLength, actualIdentifierLength);
+					}
+					
+				}catch(Exception e){
+					fail(getExceptionMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(3), e));
+				}
+			}
+		}
+		
+		public void testGetColumnMaximumIdentifierLength_V9Compatibility(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					if((dbInformationCollection.get(i).toString()).equals("V9 (Compatibility Mode)"))
+					{
+						actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getColumnMaximumIdentifierLength();
+						expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_COLUMN_V9_COMPATIBILITY;
+					
+						assertEquals(getAssertionFailureMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+								expectedIdentifierLength, actualIdentifierLength);
+					}
+					
+				}catch(Exception e){
+					fail(getExceptionMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(3), e));
+				}
+			}
+		}
+		
+		public void testGetTriggerMaximumIdentifierLength_V9Compatibility(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					if((dbInformationCollection.get(i).toString()).equals("V9 (Compatibility Mode)"))
+					{
+						actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTriggerMaximumIdentifierLength();
+						expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_V9_COMPATIBILITY;
+					
+						assertEquals(getAssertionFailureMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+								expectedIdentifierLength, actualIdentifierLength);
+					}
+					
+				}catch(Exception e){
+					fail(getExceptionMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(3), e));
+				}
+			}
+		}
+		
+		public void testGetTablespaceMaximumIdentifierLength_V9Compatibility(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					if((dbInformationCollection.get(i).toString()).equals("V9 (Compatibility Mode)"))
+					{
+						actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTablespaceMaximumIdentifierLength();
+						expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TABLESPACE_V9_COMPATIBILITY;
+
+						assertEquals(getAssertionFailureMessage("getTablespaceMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+								expectedIdentifierLength, actualIdentifierLength);
+					}
+
+				}catch(Exception e){
+					fail(getExceptionMessage("getTablespaceMaximumIdentifierLength()", dbInformationCollection.get(3), e));
+				}
+			}
+		}
+				
+//	====================================Version 9 New Function==============================
+		
+		public void testGetMaximumPrecision_DECIMAL_V9NewFunction(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+					
+					while(dataType.hasNext())
+					{
+						typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+						
+						if((dbInformationCollection.get(i).toString()).equals("V9 (New-Function Mode)"))
+						{
+							dataTypeList = typeDefinition.getName();
+							expectedMaxPrecision = MAXIMUM_PRECISION_DECIMAL_V9_NEW_FUNCTION;
+							
+							for(int j = 0; j < dataTypeList.size(); j++)
+							{
+								if((dataTypeList.get(j)).equals("DECIMAL"))
+								{								
+									assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "DECIMAL"),
+											expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+								}
+							}
+						}
+					}
+
+				}catch(Exception e){
+					fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(4), e));
+				}
+			}
+		}
+		
+		public void testGetMaximumPrecision_NUMERIC_V9NewFunction(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+					
+					while(dataType.hasNext())
+					{
+						typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+						
+						if((dbInformationCollection.get(i).toString()).equals("V9 (New-Function Mode)"))
+						{
+							dataTypeList = typeDefinition.getName();
+							expectedMaxPrecision = MAXIMUM_PRECISION_NUMERIC_V9_NEW_FUNCTION;
+							
+							for(int j = 0; j < dataTypeList.size(); j++)
+							{
+								if((dataTypeList.get(j)).equals("NUMERIC"))
+								{									
+									assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "NUMERIC"),
+											expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+								}
+							}
+						}
+					}
+
+				}catch(Exception e){
+					fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(4), e));
+				}
+			}
+		}
+		
+		public void testGetMaximumPrecision_FLOAT_V9NewFunction(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+					
+					while(dataType.hasNext())
+					{
+						typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+						
+						if((dbInformationCollection.get(i).toString()).equals("V9 (New-Function Mode)"))
+						{
+							dataTypeList = typeDefinition.getName();
+							expectedMaxPrecision = MAXIMUM_PRECISION_FLOAT_V9_NEW_FUNCTION;
+							
+							for(int j = 0; j < dataTypeList.size(); j++)
+							{
+								if((dataTypeList.get(j)).equals("FLOAT"))
+								{	
+									assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "FLOAT"),
+											expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+								}
+							}
+						}
+					}
+
+				}catch(Exception e){
+					fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(4), e));
+				}
+			}
+		}
+		
+		public void testGetMaximumLength_CHAR_V9NewFunction(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+					
+					while(dataType.hasNext())
+					{
+						typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+						
+						if((dbInformationCollection.get(i).toString()).equals("V9 (New-Function Mode)"))
+						{
+							dataTypeList = typeDefinition.getName();
+							expectedMaxLength = MAXIMUM_LENGTH_CHAR_V9_NEW_FUNCTION;
+							
+							for(int j = 0; j < dataTypeList.size(); j++)
+							{
+								if((dataTypeList.get(j)).equals("CHAR"))
+								{	
+									assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CHAR"),
+											expectedMaxLength, typeDefinition.getMaximumLength());
+								}
+							}
+						}
+					}
+
+				}catch(Exception e){
+					fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(4), e));
+				}
+			}
+		}
+		
+		public void testGetMaximumLength_GRAPHIC_V9NewFunction(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+					
+					while(dataType.hasNext())
+					{
+						typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+						
+						if((dbInformationCollection.get(i).toString()).equals("V9 (New-Function Mode)"))
+						{
+							dataTypeList = typeDefinition.getName();
+							expectedMaxLength = MAXIMUM_LENGTH_GRAPHIC_V9_NEW_FUNCTION;
+							
+							for(int j = 0; j < dataTypeList.size(); j++)
+							{
+								if((dataTypeList.get(j)).equals("GRAPHIC"))
+								{	
+									assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "GRAPHIC"),
+											expectedMaxLength, typeDefinition.getMaximumLength());
+								}
+							}
+						}
+					}
+
+				}catch(Exception e){
+					fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(4), e));
+				}
+			}
+		}
+		
+		public void testGetMaximumLength_VARCHAR_V9NewFunction(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+					
+					while(dataType.hasNext())
+					{
+						typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+						
+						if((dbInformationCollection.get(i).toString()).equals("V9 (New-Function Mode)"))
+						{
+							dataTypeList = typeDefinition.getName();
+							expectedMaxLength = MAXIMUM_LENGTH_VARCHAR_V9_NEW_FUNCTION;
+							
+							for(int j = 0; j < dataTypeList.size(); j++)
+							{
+								if((dataTypeList.get(j)).equals("VARCHAR"))
+								{	
+									assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARCHAR"),
+											expectedMaxLength, typeDefinition.getMaximumLength());
+								}
+							}
+						}
+					}
+
+				}catch(Exception e){
+					fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(4), e));
+				}
+			}
+		}
+		
+		public void testGetMaximumLength_CLOB_V9NewFunction(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+					
+					while(dataType.hasNext())
+					{
+						typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+						
+						if((dbInformationCollection.get(i).toString()).equals("V9 (New-Function Mode)"))
+						{
+							dataTypeList = typeDefinition.getName();
+							expectedMaxLength = MAXIMUM_LENGTH_CLOB_V9_NEW_FUNCTION;
+							
+							for(int j = 0; j < dataTypeList.size(); j++)
+							{
+								if((dataTypeList.get(j)).equals("CLOB"))
+								{	
+									assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CLOB"),
+											expectedMaxLength, typeDefinition.getMaximumLength());
+								}
+							}
+						}
+					}
+
+				}catch(Exception e){
+					fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(4), e));
+				}
+			}
+		}
+		
+		public void testGetMaximumLength_BLOB_V9NewFunction(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+					
+					while(dataType.hasNext())
+					{
+						typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+						
+						if((dbInformationCollection.get(i).toString()).equals("V9 (New-Function Mode)"))
+						{
+							dataTypeList = typeDefinition.getName();
+							expectedMaxLength = MAXIMUM_LENGTH_BLOB_V9_NEW_FUNCTION;
+							
+							for(int j = 0; j < dataTypeList.size(); j++)
+							{
+								if((dataTypeList.get(j)).equals("BLOB"))
+								{	
+									assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "BLOB"),
+											expectedMaxLength, typeDefinition.getMaximumLength());
+								}
+							}
+						}
+					}
+
+				}catch(Exception e){
+					fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(4), e));
+				}
+			}
+		}
+		
+		public void testGetMaximumLength_DBCLOB_V9NewFunction(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+					
+					while(dataType.hasNext())
+					{
+						typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+						
+						if((dbInformationCollection.get(i).toString()).equals("V9 (New-Function Mode)"))
+						{
+							dataTypeList = typeDefinition.getName();
+							expectedMaxLength = MAXIMUM_LENGTH_DBCLOB_V9_NEW_FUNCTION;
+							
+							for(int j = 0; j < dataTypeList.size(); j++)
+							{
+								if((dataTypeList.get(j)).equals("DBCLOB"))
+								{		
+									assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "DBCLOB"),
+											expectedMaxLength, typeDefinition.getMaximumLength());
+								}
+							}
+						}
+					}
+
+				}catch(Exception e){
+					fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(4), e));
+				}
+			}
+		}
+		
+		public void testGetMaximumLength_VARGRAPHIC_V9NewFunction(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+					
+					while(dataType.hasNext())
+					{
+						typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+						
+						if((dbInformationCollection.get(i).toString()).equals("V9 (New-Function Mode)"))
+						{
+							dataTypeList = typeDefinition.getName();
+							expectedMaxLength = MAXIMUM_LENGTH_VARGRAPHIC_V9_NEW_FUNCTION;
+							
+							for(int j = 0; j < dataTypeList.size(); j++)
+							{
+								if((dataTypeList.get(j)).equals("VARGRAPHIC"))
+								{	
+									assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARGRAPHIC"),
+											expectedMaxLength, typeDefinition.getMaximumLength());
+								}
+							}
+						}
+					}
+
+				}catch(Exception e){
+					fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(4), e));
+				}
+			}
+		}
+		
+		public void testGetSchemaMaximumIdentifierLength_V9NewFunction(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					if((dbInformationCollection.get(i).toString()).equals("V9 (New-Function Mode)"))
+					{
+						actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getSchemaMaximumIdentifierLength();
+						expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_V9_NEW_FUNCTION;
+						
+						assertEquals(getAssertionFailureMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+								expectedIdentifierLength, actualIdentifierLength);
+					}
+
+				}catch(Exception e){
+					fail(getExceptionMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(4), e));
+				}
+			}
+		}
+		
+		public void testGetTableMaximumIdentifierLength_V9NewFunction(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					if((dbInformationCollection.get(i).toString()).equals("V9 (New-Function Mode)"))
+					{
+						actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTableMaximumIdentifierLength();
+						expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TABLE_V9_NEW_FUNCTION;
+						
+						assertEquals(getAssertionFailureMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+								expectedIdentifierLength, actualIdentifierLength);
+					}
+
+				}catch(Exception e){
+					fail(getExceptionMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(4), e));
+				}
+			}
+		}
+		
+		public void testGetViewMaximumIdentifierLength_V9NewFunction(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					if((dbInformationCollection.get(i).toString()).equals("V9 (New-Function Mode)"))
+					{
+						actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getViewMaximumIdentifierLength();
+						expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_VIEW_V9_NEW_FUNCTION;
+						
+						assertEquals(getAssertionFailureMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+								expectedIdentifierLength, actualIdentifierLength);
+					}
+
+				}catch(Exception e){
+					fail(getExceptionMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(4), e));
+				}
+			}
+		}
+		
+		public void testGetColumnMaximumIdentifierLength_V9NewFunction(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					if((dbInformationCollection.get(i).toString()).equals("V9 (New-Function Mode)"))
+					{
+						actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getColumnMaximumIdentifierLength();
+						expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_COLUMN_V9_NEW_FUNCTION;
+						
+						assertEquals(getAssertionFailureMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+								expectedIdentifierLength, actualIdentifierLength);
+					}
+
+				}catch(Exception e){
+					fail(getExceptionMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(4), e));
+				}
+			}
+		}
+		
+		public void testGetTriggerMaximumIdentifierLength_V9NewFunction(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					if((dbInformationCollection.get(i).toString()).equals("V9 (New-Function Mode)"))
+					{
+						actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTriggerMaximumIdentifierLength();
+						expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_V9_NEW_FUNCTION;
+						
+						assertEquals(getAssertionFailureMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+								expectedIdentifierLength, actualIdentifierLength);
+					}
+
+				}catch(Exception e){
+					fail(getExceptionMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(4), e));
+				}
+			}
+		}
+		
+		public void testGetTablespaceMaximumIdentifierLength_V9NewFunction(){
+			
+			for(int i = 0; i < definitionCollection.size(); i++)
+			{
+				try{
+					if((dbInformationCollection.get(i).toString()).equals("V9 (New-Function Mode)"))
+					{
+						actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTablespaceMaximumIdentifierLength();
+						expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TABLESPACE_V9_NEW_FUNCTION;
+						
+						assertEquals(getAssertionFailureMessage("getTablespaceMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+								expectedIdentifierLength, actualIdentifierLength);
+					}
+
+				}catch(Exception e){
+					fail(getExceptionMessage("getTablespaceMaximumIdentifierLength()", dbInformationCollection.get(4), e));
+				}
+			}
+		}
+	
+	private String getAssertionFailureMessage(String methodName, Object versionName, String dataName){
+		
+		String temp = "\nData type: ";
+		
+		if(dataName.equals(""))
+		{
+			temp = "";
+		}
+		
+		return ("\nPackage: " + PACKAGE_NAME +
+				"\nMethod: " + methodName +
+			    "\nProduct: " + strProduct +
+		        "\nVersion: " + versionName +
+		        temp + dataName +
+		        "\nResult: The actual value does not agree with vendor doc. ");
+	}
+	
+	private String getExceptionMessage(String methodName, Object versionName, Exception e){
+		
+		return ("\nMethod: " + methodName + 
+				"\nProduct: " + strProduct + 
+			    "\nVersion: " + versionName +
+		        "\nException: " + e.toString() +
+		        "\nDescription: The exception is thrown in the test case");
+	}
+	
+	public void tearDown(){
+		
+		expectedMaxPrecision = 0;
+		expectedMaxLength = 0;
+		expectedIdentifierLength = 0;
+		actualIdentifierLength = 0;
+		
+		productVersion = null;
+		dataType = null;
+		dataTypeList = null;
+		definitionCollection = new ArrayList();
+		dbInformationCollection = new ArrayList();
+		
+		strProductVersion = null;
+
+		definition = null;
+		typeDefinition = null;
+		procedure = null;
+	}
+
+}
diff --git a/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/DatabaseDefinitionGenericTest.java b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/DatabaseDefinitionGenericTest.java
new file mode 100644
index 0000000..1382885
--- /dev/null
+++ b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/DatabaseDefinitionGenericTest.java
@@ -0,0 +1,1359 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.dbdefinition.junittest;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import junit.framework.TestCase;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.datatypes.DataType;
+import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
+
+public class DatabaseDefinitionGenericTest extends TestCase {
+	
+	private final String PACKAGE_NAME = "org.eclipse.datatools.enablement.dbdefinition.junittest";
+	private final String FILE_NAME = "DatabaseDefinition.java";
+	private DatabaseDefinition definition = null;
+	private Iterator product = null;
+	private Iterator productVersion = null;
+	private ArrayList definitionCollection = new ArrayList();
+	private ArrayList dbInformationCollection = new ArrayList();
+	private String strProduct = null;
+	private String strProductVersion = null;
+	private String strException = null;
+	private Iterator dataType;
+	private PredefinedDataTypeDefinition typeDefinition = null;
+	private DataType type = null;
+	private PredefinedDataType predefDataType = null;
+	
+	public void setUp(){
+		
+		try{
+			product = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getProducts();
+			assertNotNull("\nMethod: getProducts()" +
+					      "\nError: The method returns a NULL value in startUp()!", product);
+
+			while(product.hasNext())
+			{
+				strProduct = product.next().toString();
+				productVersion = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getVersions(strProduct);
+				assertNotNull("\nMethod: getVersions()" +
+						      "\nError: The method returns a NULL value in startUp()", productVersion);
+					
+				while(productVersion.hasNext())
+				{
+					strProductVersion = productVersion.next().toString();
+					definition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(strProduct, strProductVersion);
+					assertNotNull("\nMethod: getDefinition()" +
+							      "\nError: The method returns a NULL value in startUp()", definition);
+					
+					dbInformationCollection.add(strProduct);
+					dbInformationCollection.add(strProductVersion);
+					definitionCollection.add(definition);
+				}
+			}
+		}
+		catch(Exception e){
+			fail("\nMethod: setUp()" +
+				 "\nException: " + e.toString() +
+			     "\nDescription: The set up is incomplete");
+		}
+	}
+	
+	public void testGetProduct(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{	
+				assertNotNull(getAssertionFailureMessage("getProduct()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)), 
+					((DatabaseDefinition)definitionCollection.get(i)).getProduct());
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getProduct()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetProductDisplayString(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{	
+			try{
+				assertNotNull(getAssertionFailureMessage("getProductDisplayString()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+					((DatabaseDefinition)definitionCollection.get(i)).getProductDisplayString());
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getProductDisplayString()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetVersion(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{	
+				assertNotNull(getAssertionFailureMessage("getVersion()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+					((DatabaseDefinition)definitionCollection.get(i)).getVersion());
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getVersion()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+
+	public void testGetVersionDisplayString()throws IOException{
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				assertNotNull(getAssertionFailureMessage("getVersionDisplayString()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+					((DatabaseDefinition)definitionCollection.get(i)).getVersionDisplayString());
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getVersionDisplayString()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetDescription(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).getDescription();
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getDescription()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetDataModelElementFactory(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{	
+			try{
+				assertNotNull(getAssertionFailureMessage("getDataModelElementFactory()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+					((DatabaseDefinition)definitionCollection.get(i)).getDataModelElementFactory());
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getDataModelElementFactory()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetPredefinedDataTypes(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{	
+			try{
+				assertNotNull(getAssertionFailureMessage("getPredefinedDataTypes()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+					((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes());
+	
+			}catch(Exception e){
+				fail(getExceptionMessage("getPredefinedDataTypes()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetSequenceSupportedPredefinedDataTypes(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				assertNotNull(getAssertionFailureMessage("getSequenceSupportedPredefinedDataTypes()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)), 
+					((DatabaseDefinition)definitionCollection.get(i)).getSequenceSupportedPredefinedDataTypes());
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getSequenceSupportedPredefinedDataTypes()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetIdentityColumnSupportedPredefinedDataTypes(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{	
+			try{
+				assertNotNull(getAssertionFailureMessage("getIdentityColumnSupportedPredefinedDataTypes()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+					((DatabaseDefinition)definitionCollection.get(i)).getIdentityColumnSupportedPredefinedDataTypes());
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getIdentityColumnSupportedPredefinedDataTypes()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsSchema(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsSchema();
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsSchema()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsIdentityColumns(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsIdentityColumns();
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsIdentityColumns()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsComputedColumns(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsComputedColumns();
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsComputedColumns()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsSequence(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsSequence();
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsSequence()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsMQT(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsMQT();
+					
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsMQT()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsMQTIndex(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsMQTIndex();
+
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsMQTIndex()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsDeferrableConstraints(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsDeferrableConstraints();
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsDeferrableConstraints()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsInformationalConstraints(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsInformationalConstraints();
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsInformationalConstraints()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsClusteredIndexes(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsClusteredIndexes();
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsClusteredIndexes()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testIsUniqueKeyNullable(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).isUniqueKeyNullable();
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("isUniqueKeyNullable()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetParentDeleteDRIRules(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				assertNotNull(getAssertionFailureMessage("getParentDeleteDRIRules()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+					((DatabaseDefinition)definitionCollection.get(i)).getParentDeleteDRIRules());
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getParentDeleteDRIRules()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetParentUpdateDRIRules(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				assertNotNull(getAssertionFailureMessage("getParentUpdateDRIRules()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+					((DatabaseDefinition)definitionCollection.get(i)).getParentUpdateDRIRules());
+					
+			}catch(Exception e){
+				fail(getExceptionMessage("getParentUpdateDRIRules()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsConstraints(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsConstraints();
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsConstraints()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testQueryMaxCommentLength(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).queryMaxCommentLength();
+					
+			}catch(Exception e){
+				fail(getExceptionMessage("queryMaxCommentLength()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testQueryMaxIdentifierLength(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).queryMaxIdentifierLength();
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("queryMaxIdentifierLength()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testQueryMaxCheckExpression(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).queryMaxCheckExpression();
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("queryMaxCheckExpression()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testQueryTriggerMaxReferencePartLength(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).queryTriggerMaxReferencePartLength();
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("queryTriggerMaxReferencePartLength()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testQueryTriggerMaxActionBodyLength(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).queryTriggerMaxActionBodyLength();
+							
+			}catch(Exception e){
+				fail(getExceptionMessage("queryTriggerMaxActionBodyLength()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testQueryStoredProcedureMaxActionBodyLength(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).queryStoredProcedureMaxActionBodyLength();
+						
+			}catch(Exception e){
+				fail(getExceptionMessage("queryStoredProcedureMaxActionBodyLength()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsStoredProcedureNullInputAction(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsStoredProcedureNullInputAction();
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsStoredProcedureNullInputAction()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsNicknames(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsNicknames();
+					
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsNicknames()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsNicknameConstraints(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsNicknameConstraints();
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsNicknameConstraints()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsNicknameIndex(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsNicknameIndex();
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsNicknameIndex()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsQuotedDML(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsQuotedDML();
+					
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsQuotedDML()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsQuotedDDL(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsQuotedDDL();
+					
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsQuotedDDL()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsAlias(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsAlias();
+					
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsAlias()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsSynonym(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsSynonym();
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsSynonym()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsTriggers(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsTriggers();
+					
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsTriggers()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsTriggerTypes(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try
+			{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsTriggerTypes();
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsTriggerTypes()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsInsteadOfTrigger(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsInsteadOfTrigger();
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsInsteadOfTrigger()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsPerColumnUpdateTrigger(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsPerColumnUpdateTrigger();
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsPerColumnUpdateTrigger()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsTriggerReferencesClause(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsTriggerReferencesClause();
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsTriggerReferencesClause()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsRowTriggerReference(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsRowTriggerReference();
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsRowTriggerReference()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsTableTriggerReference(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsTableTriggerReference();
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsTableTriggerReference()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportTriggerWhenClause(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportTriggerWhenClause();
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("supportTriggerWhenClause()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsTriggerGranularity(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsTriggerGranularity();
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsTriggerGranularity()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsUserDefinedType(){
+			
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsUserDefinedType();
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsUserDefinedType()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsSnapshotViews(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsSnapshotViews();
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsSnapshotViews()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsViewTriggers(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsViewTriggers();
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsViewTriggers()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testIsKeyConstraintSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					type = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataType(typeDefinition);
+					
+					((DatabaseDefinition)definitionCollection.get(i)).isKeyConstraintSupported(type);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("isKeyConstraintSupported(DataType dataType)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetIdentifierQuoteString(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				assertNotNull(getAssertionFailureMessage("getIdentifierQuoteString()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+					((DatabaseDefinition)definitionCollection.get(i)).getIdentifierQuoteString());
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getIdentifierQuoteString()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetHostVariableMarker(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				assertNotNull(getAssertionFailureMessage("getHostVariableMarker()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+					((DatabaseDefinition)definitionCollection.get(i)).getHostVariableMarker());
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getHostVariableMarker()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsHostVariableMarker(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsHostVariableMarker();
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsHostVariableMarker()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsCastExpression(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsCastExpression();
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsCastExpression()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsDefaultKeywordForInsertValue(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsDefaultKeywordForInsertValue();
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsDefaultKeywordForInsertValue()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsExtendedGrouping(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsExtendedGrouping();
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsExtendedGrouping()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsTableAliasInDelete(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsTableAliasInDelete();
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsTableAliasInDelete()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetProcedureLanguageType(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				assertNotNull(getAssertionFailureMessage("getProcedureLanguageType()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+					((DatabaseDefinition)definitionCollection.get(i)).getProcedureLanguageType());
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getProcedureLanguageType()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetFunctionLanguageType(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				assertNotNull(getAssertionFailureMessage("getFunctionLanguageType()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+					((DatabaseDefinition)definitionCollection.get(i)).getFunctionLanguageType());
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getFunctionLanguageType()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsSQLStatement(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsSQLStatement();
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsSQLStatement()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetSQLKeywords(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				assertNotNull(getAssertionFailureMessage("getSQLKeywords()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+					((DatabaseDefinition)definitionCollection.get(i)).getSQLKeywords());
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getSQLKeywords()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetSQLOperators(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				assertNotNull(getAssertionFailureMessage("getSQLOperators()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+					((DatabaseDefinition)definitionCollection.get(i)).getSQLOperators());
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getSQLOperators()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testIsSQLKeyword(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).isSQLKeyword("AND");
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("isSQLKeyword(String word)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testIsSQLOperator(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).isSQLOperator("+");
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("isSQLOperator(String word)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetSQLTerminationCharacter(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				assertNotNull(getAssertionFailureMessage("getSQLTerminationCharacter()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+					((DatabaseDefinition)definitionCollection.get(i)).getSQLTerminationCharacter());
+					
+			}catch(Exception e){
+				fail(getExceptionMessage("getSQLTerminationCharacter()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumIdentifierLength(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).getMaximumIdentifierLength();
+					
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumIdentifierLength()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumIdentifierLengthBySQLObject(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					type = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataType(typeDefinition);
+					
+					((DatabaseDefinition)definitionCollection.get(i)).getMaximumIdentifierLength(type);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetDatabaseMaximumIdentifierLength(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).getDatabaseMaximumIdentifierLength();
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetSchemaMaximumIdentifierLength(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).getSchemaMaximumIdentifierLength();
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetTableMaximumIdentifierLength(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).getTableMaximumIdentifierLength();
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetViewMaximumIdentifierLength(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).getViewMaximumIdentifierLength();
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetColumnMaximumIdentifierLength(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).getColumnMaximumIdentifierLength();
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetTriggerMaximumIdentifierLength(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).getTriggerMaximumIdentifierLength();
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetPrimarykeyIdentifierLength(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).getPrimarykeyIdentifierLength();
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getPrimarykeyIdentifierLength()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetForeignKeyMaximumIdentifierLength(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).getForeignKeyMaximumIdentifierLength();
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getForeignKeyMaximumIdentifierLength()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetCheckConstraintMaximumIdentifierLength(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).getCheckConstraintMaximumIdentifierLength();
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getCheckConstraintMaximumIdentifierLength()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetNicknameMaximumIdentifierLength(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).getNicknameMaximumIdentifierLength();
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getNicknameMaximumIdentifierLength()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetUserDefinedTypeMaximumIdentifierLength(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).getUserDefinedTypeMaximumIdentifierLength();
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getUserDefinedTypeMaximumIdentifierLength()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetTablespaceMaximumIdentifierLength(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).getTablespaceMaximumIdentifierLength();
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getTablespaceMaximumIdentifierLength()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetPredefinedDataTypeDefinitionsByJDBCEnumType(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				assertNotNull(getAssertionFailureMessage("getPredefinedDataTypeDefinitionsByJDBCEnumType(int jdbcEnumType)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+					((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypeDefinitionsByJDBCEnumType(1));
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getPredefinedDataTypeDefinitionsByJDBCEnumType(int jdbcEnumType)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetPredefinedDataTypesByJDBCEnumType(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				assertNotNull(getAssertionFailureMessage("getPredefinedDataTypesByJDBCEnumType(int jdbcEnumType)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+					((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypesByJDBCEnumType(1));
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getPredefinedDataTypesByJDBCEnumType(int jdbcEnumType)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetPredefinedDataType(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				assertNotNull(getAssertionFailureMessage("getPredefinedDataType(String dataTypeName)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+					((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataType("numeric"));
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getPredefinedDataType(String dataTypeName)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetPredefinedDataTypeDefinition(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				assertNotNull(getAssertionFailureMessage("getPredefinedDataTypeDefinition(String dataTypeName)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+					((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypeDefinition("numeric"));
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getPredefinedDataTypeDefinition(String dataTypeName)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+
+	public void testGetPredefinedDataTypeByPredefinedDataTypeDefinition(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					assertNotNull(getAssertionFailureMessage("getPredefinedDataType(PredefinedDataTypeDefinition predefinedDataTypeDefinition)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+						((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataType(typeDefinition));
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getPredefinedDataType(PredefinedDataTypeDefinition predefinedDataTypeDefinition)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetPredefinedDataTypeDefinitionByNameAndJDBCEnumType(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypeDefinitionByNameAndJDBCEnumType("int", 1);
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getPredefinedDataTypeDefinitionByNameAndJDBCEnumType(String dataTypeName, int jdbcEnumType)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+
+	public void testGetPredefinedDataTypeByNameAndJDBCEnumType(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypeByNameAndJDBCEnumType("int", 1);
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getPredefinedDataTypeByNameAndJDBCEnumType(String dataTypeName, int jdbcEnumType)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetPredefinedDataTypeFormattedName(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				predefDataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataType("numeric");
+				
+				assertNotNull(getAssertionFailureMessage("getPredefinedDataTypeFormattedName(PredefinedDataType predefinedDataType)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+					((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypeFormattedName(predefDataType));
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getPredefinedDataTypeFormattedName(PredefinedDataType predefinedDataType)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetDdlParser(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).getDdlParser();
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDdlParser()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetDatabaseCatalogProvider(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				assertNotNull(getAssertionFailureMessage("getDatabaseCatalogProvider()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+					((DatabaseDefinition)definitionCollection.get(i)).getDatabaseCatalogProvider());
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getDatabaseCatalogProvider()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetDDLGenerator(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				/**
+				 * MySqlDdlGenerator.java in org.eclipse.datatools.enablement.mysql
+				 * is disabled; therefore, if the product is MySql, an exception will be thrown.
+				 * Remove the line: String product = ((DatabaseDefinition)definitionCollection.get(i)).getProduct();
+				 * and the if statement after MySqlDdlGenerator code is enabled.
+				 */ 
+				
+				String product = ((DatabaseDefinition)definitionCollection.get(i)).getProduct();
+				
+				if(!product.equals("MySql"))
+				{
+					assertNotNull(getAssertionFailureMessage("getDDLGenerator()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+						((DatabaseDefinition)definitionCollection.get(i)).getDDLGenerator());
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDDLGenerator()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetDeltaDDLGenerator(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				assertNotNull(getAssertionFailureMessage("getDeltaDDLGenerator()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+					((DatabaseDefinition)definitionCollection.get(i)).getDeltaDDLGenerator());
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getDeltaDDLGenerator()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSupportsXML(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				((DatabaseDefinition)definitionCollection.get(i)).supportsXML();
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("supportsXML()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	private String getAssertionFailureMessage(String methodName, Object productName, Object versionName){
+		
+		return ("\nPackage: " + PACKAGE_NAME +
+				"\nFile: " + FILE_NAME +
+				"\nMethod: " + methodName +
+			    "\nProduct: " + productName + 
+		        "\nVersion: " + versionName +
+	            "\nAssertion Failure: The assertion condtion fails in the try block");
+	}
+	
+	private String getExceptionMessage(String methodName, Object productName, Object versionName, Exception e){
+		
+		return ("\nPackage: " + PACKAGE_NAME +
+				"\nFile: " + FILE_NAME +
+				"\nMethod: " + methodName + 
+				"\nProduct: " + productName + 
+			    "\nVersion: " + versionName +
+		        "\nException: " + e.toString() +
+		        "\nDescription: The exception is thrown in the test case");
+	}
+	
+	public void tearDown(){
+		
+		definition = null;
+		product = null;
+		productVersion = null;
+		definitionCollection = new ArrayList();
+		dbInformationCollection = new ArrayList();
+		strProduct = null;
+		strProductVersion = null;
+		strException = null;
+		dataType = null;
+		typeDefinition = null;
+		type = null;
+		predefDataType = null;
+	}
+}
diff --git a/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/DerbyTest.java b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/DerbyTest.java
new file mode 100644
index 0000000..cb10f9d
--- /dev/null
+++ b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/DerbyTest.java
@@ -0,0 +1,907 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.dbdefinition.junittest;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesFactory;
+
+public class DerbyTest extends TestCase {
+	
+	//=========================Version 10.0=======================================
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_10 = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_DATABASE_10 = 8;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_10 = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_10 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLE_10 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_10 = 18;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_VIEW_10 = 128;
+	
+	private final int MAXIMUM_LENGTH_BLOB_10 = 2147483647;
+	private final int MAXIMUM_LENGTH_CLOB_10 = 2147483647;
+	private final int MAXIMUM_LENGTH_CHAR_10 = 254;
+	private final int MAXIMUM_LENGTH_VARCHAR_10 = 32672;
+	
+	private final int MAXIMUM_PRECISION_DECIMAL_10 = 31;
+	private final int MAXIMUM_PRECISION_FLOAT_10 = 53;
+	private final int MAXIMUM_PRECISION_NUMERIC_10 = 31;	
+	
+    //=========================Version 10.1=======================================
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_101 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_DATABASE_101 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_101 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_101 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLE_101 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_101 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_VIEW_101 = 128;
+	
+	private final int MAXIMUM_LENGTH_BLOB_101 = 2147483647;
+	private final int MAXIMUM_LENGTH_CLOB_101 = 2147483647;
+	private final int MAXIMUM_LENGTH_CHAR_101 = 254;
+	private final int MAXIMUM_LENGTH_VARCHAR_101 = 32672;
+	
+	private final int MAXIMUM_PRECISION_DECIMAL_101 = 31;
+	private final int MAXIMUM_PRECISION_FLOAT_101 = 53;
+	private final int MAXIMUM_PRECISION_NUMERIC_101 = 31;
+	//==========================================================================================
+	
+	private final String strProduct = "Derby";
+	private final String PACKAGE_NAME = "org.eclipse.datatools.enablement.dbdefinition.junittest";
+	
+	private int expectedMaxPrecision = 0;
+	private int expectedMaxLength = 0;
+	private int expectedIdentifierLength = 0;
+	private int actualIdentifierLength = 0;
+
+	
+	private Iterator productVersion = null;
+	private Iterator dataType;
+	private List dataTypeList;
+	private ArrayList definitionCollection = new ArrayList();
+	private ArrayList dbInformationCollection = new ArrayList();
+	
+	private String strProductVersion = null;
+
+	private DatabaseDefinition definition = null;
+	private PredefinedDataTypeDefinition typeDefinition = null;
+	private Procedure procedure = null;
+
+	
+	public void setUp(){
+		
+		try{	
+			productVersion = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getVersions(strProduct);
+			assertNotNull("\nMethod: getVersions()" +
+						  "\nError: The method returns a NULL value in startUp()", productVersion);
+					
+			while(productVersion.hasNext())
+			{
+				strProductVersion = productVersion.next().toString();
+				definition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(strProduct, strProductVersion);
+				assertNotNull("\nMethod: getDefinition()" +
+							  "\nError: The method returns a NULL value in startUp()", definition);
+					
+				dbInformationCollection.add(strProductVersion);
+				definitionCollection.add(definition);
+			}
+		}
+		catch(Exception e){
+			fail("\nMethod: setUp()" +
+				 "\nException: " + e.toString() +
+			     "\nDescription: The set up is incomplete");
+		}
+	}
+	
+//==========================================Version 10.0==============================================
+	
+	public void testGetMaximumPrecision_DECIMAL_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_DECIMAL_10;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DECIMAL"))
+							{								
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "DECIMAL"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_NUMERIC_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_NUMERIC_10;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMERIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "NUMERIC"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_FLOAT_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_FLOAT_10;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("FLOAT"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "FLOAT"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CHAR_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CHAR_10;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARCHAR_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARCHAR_10;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARCHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CLOB_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CLOB_10;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CLOB"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_BLOB_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_BLOB_10;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("BLOB"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "BLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetDatabaseMaximumIdentifierLength_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("10.0"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getDatabaseMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_DATABASE_10;
+				
+					assertEquals(getAssertionFailureMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetSchemaMaximumIdentifierLength_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("10.0"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getSchemaMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_10;
+				
+					assertEquals(getAssertionFailureMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetTableMaximumIdentifierLength_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("10.0"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTableMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TABLE_10;
+				
+					assertEquals(getAssertionFailureMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetViewMaximumIdentifierLength_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("10.0"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getViewMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_VIEW_10;
+				
+					assertEquals(getAssertionFailureMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetColumnMaximumIdentifierLength_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("10.0"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getColumnMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_COLUMN_10;
+				
+					assertEquals(getAssertionFailureMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetTriggerMaximumIdentifierLength_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("10.0"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTriggerMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_10;
+				
+					assertEquals(getAssertionFailureMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetStoredProcedureMaximumIdentifierLength_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				
+				if((dbInformationCollection.get(i).toString()).equals("10.0"))
+				{
+					procedure = SQLRoutinesFactory.eINSTANCE.createProcedure();
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getMaximumIdentifierLength(procedure);
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_10;
+				
+					assertEquals(getAssertionFailureMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+//==========================================Version 10.1==============================================
+	
+	public void testGetMaximumPrecision_DECIMAL_101(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_DECIMAL_101;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DECIMAL"))
+							{								
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "DECIMAL"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_NUMERIC_101(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_NUMERIC_101;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMERIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "NUMERIC"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_FLOAT_101(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_FLOAT_101;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("FLOAT"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "FLOAT"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CHAR_101(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CHAR_101;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARCHAR_101(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARCHAR_101;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARCHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CLOB_101(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CLOB_101;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CLOB"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_BLOB_101(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_BLOB_101;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("BLOB"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "BLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetDatabaseMaximumIdentifierLength_101(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("10.1"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getDatabaseMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_DATABASE_101;
+				
+					assertEquals(getAssertionFailureMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetSchemaMaximumIdentifierLength_101(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("10.1"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getSchemaMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_101;
+				
+					assertEquals(getAssertionFailureMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetTableMaximumIdentifierLength_101(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("10.1"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTableMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TABLE_101;
+				
+					assertEquals(getAssertionFailureMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetViewMaximumIdentifierLength_101(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("10.1"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getViewMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_VIEW_101;
+				
+					assertEquals(getAssertionFailureMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetColumnMaximumIdentifierLength_101(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("10.1"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getColumnMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_COLUMN_101;
+				
+					assertEquals(getAssertionFailureMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetTriggerMaximumIdentifierLength_101(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("10.1"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTriggerMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_101;
+				
+					assertEquals(getAssertionFailureMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetStoredProcedureMaximumIdentifierLength_101(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				
+				if((dbInformationCollection.get(i).toString()).equals("10.1"))
+				{
+					procedure = SQLRoutinesFactory.eINSTANCE.createProcedure();
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getMaximumIdentifierLength(procedure);
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_101;
+				
+					assertEquals(getAssertionFailureMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	private String getAssertionFailureMessage(String methodName, Object versionName, String dataName){
+		
+		String temp = "\nData type: ";
+		
+		if(dataName.equals(""))
+		{
+			temp = "";
+		}
+		
+		return ("\nPackage: " + PACKAGE_NAME +
+				"\nMethod: " + methodName +
+			    "\nProduct: " + strProduct +
+		        "\nVersion: " + versionName +
+		        temp + dataName +
+		        "\nResult: The actual value does not agree with vendor doc. ");
+	}
+	
+	private String getExceptionMessage(String methodName, Object versionName, Exception e){
+		
+		return ("\nMethod: " + methodName + 
+				"\nProduct: " + strProduct + 
+			    "\nVersion: " + versionName +
+		        "\nException: " + e.toString() +
+		        "\nDescription: The exception is thrown in the test case");
+	}
+	
+	public void tearDown(){
+		
+		expectedMaxPrecision = 0;
+		expectedMaxLength = 0;
+		expectedIdentifierLength = 0;
+		actualIdentifierLength = 0;
+		
+		productVersion = null;
+		dataType = null;
+		dataTypeList = null;
+		definitionCollection = new ArrayList();
+		dbInformationCollection = new ArrayList();
+		
+		strProductVersion = null;
+
+		definition = null;
+		typeDefinition = null;
+		procedure = null;
+	}
+
+}
diff --git a/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/IBMCloudscapeTest.java b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/IBMCloudscapeTest.java
new file mode 100644
index 0000000..0e001cb
--- /dev/null
+++ b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/IBMCloudscapeTest.java
@@ -0,0 +1,244 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.dbdefinition.junittest;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.dbdefinition.DatabaseVendorDefinition;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.datatypes.DataType;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+
+
+public class IBMCloudscapeTest extends TestCase {
+	
+	//=========================Version 10.0=======================================
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_10 = 30;
+	
+	private final int MAXIMUM_LENGTH_CHAR_10 = 254;
+	private final int MAXIMUM_LENGTH_VARCHAR_10 = 32672;
+	
+	private final int MAXIMUM_PRECISION_DECIMAL_10 = 31;
+	private final int MAXIMUM_PRECISION_FLOAT_10 = 53;
+	private final int MAXIMUM_PRECISION_NUMERIC_10 = 31;	
+//=============================================================================
+	
+	private final String strProduct = "IBM Cloudscape";
+	private final String PACKAGE_NAME = "org.eclipse.datatools.enablement.dbdefinition.junittest";
+	
+	private int expectedMaxPrecision = 0;
+	private int expectedMaxLength = 0;
+	private int expectedIdentifierLength = 0;
+	private int actualIdentifierLength = 0;
+
+	
+	private Iterator productVersion = null;
+	private Iterator dataType;
+	private List dataTypeList;
+	private ArrayList definitionCollection = new ArrayList();
+	private ArrayList dbInformationCollection = new ArrayList();
+	
+	private String strProductVersion = null;
+
+	private DatabaseVendorDefinition databaseVendorDefinition = null;
+	private DatabaseDefinition definition = null;
+	private PredefinedDataTypeDefinition typeDefinition = null;
+	private DataType type = null;
+	private Procedure procedure = null;
+	
+	public void setUp(){
+		
+		try{	
+			productVersion = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getVersions(strProduct);
+			assertNotNull("\nMethod: getVersions()" +
+						  "\nError: The method returns a NULL value in startUp()", productVersion);
+					
+			while(productVersion.hasNext())
+			{
+				strProductVersion = productVersion.next().toString();
+				definition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(strProduct, strProductVersion);
+				assertNotNull("\nMethod: getDefinition()" +
+							  "\nError: The method returns a NULL value in startUp()", definition);
+					
+				dbInformationCollection.add(strProductVersion);
+				definitionCollection.add(definition);
+			}
+		}
+		catch(Exception e){
+			fail("\nMethod: setUp()" +
+				 "\nException: " + e.toString() +
+			     "\nDescription: The set up is incomplete");
+		}
+	}
+	
+//==========================================Version 10.0==============================================	
+	
+	public void testGetMaximumPrecision_FLOAT_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_FLOAT_10;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("FLOAT"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "FLOAT"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CHAR_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CHAR_10;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARCHAR_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARCHAR_10;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARCHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+		
+	private String getAssertionFailureMessage(String methodName, Object versionName, String dataName){
+		
+		String temp = "\nData type: ";
+		
+		if(dataName.equals(""))
+		{
+			temp = "";
+		}
+		
+		return ("\nPackage: " + PACKAGE_NAME +
+				"\nMethod: " + methodName +
+			    "\nProduct: " + strProduct +
+		        "\nVersion: " + versionName +
+		        temp + dataName +
+		        "\nResult: The actual value does not agree with vendor doc. ");
+	}
+	
+	private String getExceptionMessage(String methodName, Object versionName, Exception e){
+		
+		return ("\nMethod: " + methodName + 
+				"\nProduct: " + strProduct + 
+			    "\nVersion: " + versionName +
+		        "\nException: " + e.toString() +
+		        "\nDescription: The exception is thrown in the test case");
+	}
+	
+	private int getProperIndex(int rawIndex){
+		
+		if(rawIndex == 0)
+			return 1;
+		else if(rawIndex == 1)
+			return 2;
+		else
+			return 0;
+	}
+	
+	public void tearDown(){
+		
+		expectedMaxPrecision = 0;
+		expectedMaxLength = 0;
+		expectedIdentifierLength = 0;
+		actualIdentifierLength = 0;
+		
+		productVersion = null;
+		dataType = null;
+		dataTypeList = null;
+		definitionCollection = new ArrayList();
+		dbInformationCollection = new ArrayList();
+		
+		strProductVersion = null;
+
+		definition = null;
+		typeDefinition = null;
+		procedure = null;
+	}
+}
diff --git a/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/InformixTest.java b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/InformixTest.java
new file mode 100644
index 0000000..300eb68
--- /dev/null
+++ b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/InformixTest.java
@@ -0,0 +1,1552 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.dbdefinition.junittest;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesFactory;
+
+public class InformixTest extends TestCase {
+	
+	//=========================Version 9.2=======================================
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_92 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_DATABASE_92 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_92 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_92 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLE_92 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_VIEW_92 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_92 = 128;
+	
+	private final int MAXIMUM_LENGTH_CHAR_92 = 32767;
+	private final int MAXIMUM_LENGTH_LVARCHAR_92 = 32739;
+	private final int MAXIMUM_LENGTH_NCHAR_92 = 32767;
+	private final int MAXIMUM_LENGTH_VARCHAR_92 = 255;
+	
+	private final int MAXIMUM_PRECISION_DECIMAL_92 = 32;
+	private final int MAXIMUM_PRECISION_MONEY_92 = 32;
+	
+    //=========================Version 9.3=======================================
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_93 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_DATABASE_93 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_93 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_93 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLE_93 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_VIEW_93 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_93 = 128;
+	
+	private final int MAXIMUM_LENGTH_CHAR_93 = 32767;
+	private final int MAXIMUM_LENGTH_LVARCHAR_93 = 32739;
+	private final int MAXIMUM_LENGTH_NCHAR_93 = 32767;
+	private final int MAXIMUM_LENGTH_VARCHAR_93 = 255;
+	
+	private final int MAXIMUM_PRECISION_DECIMAL_93 = 32;
+	private final int MAXIMUM_PRECISION_MONEY_93 = 32;
+	
+	//=========================Version 9.4=======================================
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_94 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_DATABASE_94 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_94 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_94 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLE_94 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_VIEW_94 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_94 = 128;
+	
+	private final int MAXIMUM_LENGTH_CHAR_94 = 32767;
+	private final int MAXIMUM_LENGTH_LVARCHAR_94 = 32739;
+	private final int MAXIMUM_LENGTH_NCHAR_94 = 32767;
+	private final int MAXIMUM_LENGTH_VARCHAR_94 = 255;
+	
+	private final int MAXIMUM_PRECISION_DECIMAL_94 = 32;
+	private final int MAXIMUM_PRECISION_MONEY_94 = 32;
+	
+	//=========================Version 10==========================================
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_10 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_DATABASE_10 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_10 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_10 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLE_10 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_VIEW_10 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_10 = 128;
+	
+	private final int MAXIMUM_LENGTH_CHAR_10 = 32767;
+	private final int MAXIMUM_LENGTH_LVARCHAR_10 = 32739;
+	private final int MAXIMUM_LENGTH_NCHAR_10 = 32767;
+	private final int MAXIMUM_LENGTH_VARCHAR_10 = 255;
+	
+	private final int MAXIMUM_PRECISION_DECIMAL_10 = 32;
+	private final int MAXIMUM_PRECISION_MONEY_10 = 32;
+
+	
+	//==========================================================================================
+	
+	private final String strProduct = "Informix";
+	private final String PACKAGE_NAME = "org.eclipse.datatools.enablement.dbdefinition.junittest";
+	
+	private int expectedValue = 0;
+	private int actualValue = 0;
+	
+	private Iterator productVersion = null;
+	private Iterator dataType;
+	private List dataTypeList;
+	private ArrayList definitionCollection = new ArrayList();
+	private ArrayList dbInformationCollection = new ArrayList();
+	
+	private String strProductVersion = null;
+
+	private DatabaseDefinition definition = null;
+	private PredefinedDataTypeDefinition typeDefinition = null;
+	private Procedure procedure = null;
+
+	
+	public void setUp(){
+		
+		try{	
+			productVersion = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getVersions(strProduct);
+			assertNotNull("\nMethod: getVersions()" +
+						  "\nError: The method returns a NULL value in startUp()", productVersion);
+					
+			while(productVersion.hasNext())
+			{
+				strProductVersion = productVersion.next().toString();
+				definition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(strProduct, strProductVersion);
+				assertNotNull("\nMethod: getDefinition()" +
+							  "\nError: The method returns a NULL value in startUp()", definition);
+					
+				dbInformationCollection.add(strProductVersion);
+				definitionCollection.add(definition);
+			}
+		}
+		catch(Exception e){
+			fail("\nMethod: setUp()" +
+				 "\nException: " + e.toString() +
+			     "\nDescription: The set up is incomplete");
+		}
+	}
+	
+//==========================================Version 9.2==============================================
+	
+	public void testGetMaximumPrecision_DECIMAL_92(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_PRECISION_DECIMAL_92;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DECIMAL"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "DECIMAL"),
+										expectedValue, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_MONEY_92(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_PRECISION_MONEY_92;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("MONEY"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "MONEY"),
+										expectedValue, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CHAR_92(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_CHAR_92;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CHAR"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_NCHAR_92(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_NCHAR_92;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "NCHAR"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARCHAR_92(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_VARCHAR_92;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARCHAR"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_LVARCHAR_92(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9.2"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_LVARCHAR_92;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("LVARCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "LVARCHAR"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetDatabaseMaximumIdentifierLength_92(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("9.2"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getDatabaseMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_DATABASE_92;
+				
+					assertEquals(getAssertionFailureMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetSchemaMaximumIdentifierLength_92(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("9.2"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getSchemaMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_92;
+				
+					assertEquals(getAssertionFailureMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							actualValue, expectedValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetTableMaximumIdentifierLength_92(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("9.2"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getTableMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_TABLE_92;
+				
+					assertEquals(getAssertionFailureMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetViewMaximumIdentifierLength_92(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("9.2"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getViewMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_VIEW_92;
+				
+					assertEquals(getAssertionFailureMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+		
+	public void testGetColumnMaximumIdentifierLength_92(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("9.2"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getColumnMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_COLUMN_92;
+				
+					assertEquals(getAssertionFailureMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetTriggerMaximumIdentifierLength_92(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("9.2"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getTriggerMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_92;
+				
+					assertEquals(getAssertionFailureMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetStoredProcedureMaximumIdentifierLength_92(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				
+				if((dbInformationCollection.get(i).toString()).equals("9.2"))
+				{
+					procedure = SQLRoutinesFactory.eINSTANCE.createProcedure();
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getMaximumIdentifierLength(procedure);
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_92;
+				
+					assertEquals(getAssertionFailureMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+//==========================================Version 9.3==============================================
+
+	public void testGetMaximumPrecision_DECIMAL_93(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9.3"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_PRECISION_DECIMAL_93;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DECIMAL"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "DECIMAL"),
+										expectedValue, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_MONEY_93(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9.3"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_PRECISION_MONEY_93;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("MONEY"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "MONEY"),
+										expectedValue, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CHAR_93(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9.3"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_CHAR_93;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CHAR"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_NCHAR_93(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9.3"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_NCHAR_93;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "NCHAR"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARCHAR_93(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9.3"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_VARCHAR_93;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARCHAR"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_LVARCHAR_93(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9.3"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_LVARCHAR_93;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("LVARCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "LVARCHAR"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetDatabaseMaximumIdentifierLength_93(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("9.3"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getDatabaseMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_DATABASE_93;
+				
+					assertEquals(getAssertionFailureMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetSchemaMaximumIdentifierLength_93(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("9.3"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getSchemaMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_93;
+				
+					assertEquals(getAssertionFailureMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							actualValue, expectedValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetTableMaximumIdentifierLength_93(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("9.3"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getTableMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_TABLE_93;
+				
+					assertEquals(getAssertionFailureMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetViewMaximumIdentifierLength_93(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("9.3"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getViewMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_VIEW_93;
+				
+					assertEquals(getAssertionFailureMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+		
+	public void testGetColumnMaximumIdentifierLength_93(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("9.3"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getColumnMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_COLUMN_93;
+				
+					assertEquals(getAssertionFailureMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetTriggerMaximumIdentifierLength_93(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("9.3"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getTriggerMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_93;
+				
+					assertEquals(getAssertionFailureMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetStoredProcedureMaximumIdentifierLength_93(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				
+				if((dbInformationCollection.get(i).toString()).equals("9.3"))
+				{
+					procedure = SQLRoutinesFactory.eINSTANCE.createProcedure();
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getMaximumIdentifierLength(procedure);
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_93;
+				
+					assertEquals(getAssertionFailureMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+//==========================================Version 9.4==============================================	
+
+	public void testGetMaximumPrecision_DECIMAL_94(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9.4"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_PRECISION_DECIMAL_94;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DECIMAL"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "DECIMAL"),
+										expectedValue, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(3), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_MONEY_94(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9.4"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_PRECISION_MONEY_94;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("MONEY"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "MONEY"),
+										expectedValue, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(3), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CHAR_94(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9.4"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_CHAR_94;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CHAR"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(3), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_NCHAR_94(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9.4"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_NCHAR_94;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "NCHAR"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(3), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARCHAR_94(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9.4"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_VARCHAR_94;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARCHAR"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(3), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_LVARCHAR_94(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9.4"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_LVARCHAR_94;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("LVARCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "LVARCHAR"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(3), e));
+			}
+		}
+	}
+	
+	public void testGetDatabaseMaximumIdentifierLength_94(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("9.4"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getDatabaseMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_DATABASE_94;
+				
+					assertEquals(getAssertionFailureMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(3), e));
+			}
+		}
+	}
+	
+	public void testGetSchemaMaximumIdentifierLength_94(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("9.4"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getSchemaMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_94;
+				
+					assertEquals(getAssertionFailureMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							actualValue, expectedValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(3), e));
+			}
+		}
+	}
+	
+	public void testGetTableMaximumIdentifierLength_94(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("9.4"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getTableMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_TABLE_94;
+				
+					assertEquals(getAssertionFailureMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(3), e));
+			}
+		}
+	}
+	
+	public void testGetViewMaximumIdentifierLength_94(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("9.4"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getViewMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_VIEW_94;
+				
+					assertEquals(getAssertionFailureMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(3), e));
+			}
+		}
+	}
+		
+	public void testGetColumnMaximumIdentifierLength_94(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("9.4"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getColumnMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_COLUMN_94;
+				
+					assertEquals(getAssertionFailureMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(3), e));
+			}
+		}
+	}
+	
+	public void testGetTriggerMaximumIdentifierLength_94(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("9.4"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getTriggerMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_94;
+				
+					assertEquals(getAssertionFailureMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(3), e));
+			}
+		}
+	}
+	
+	public void testGetStoredProcedureMaximumIdentifierLength_94(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				
+				if((dbInformationCollection.get(i).toString()).equals("9.4"))
+				{
+					procedure = SQLRoutinesFactory.eINSTANCE.createProcedure();
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getMaximumIdentifierLength(procedure);
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_94;
+				
+					assertEquals(getAssertionFailureMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(3), e));
+			}
+		}
+	}
+	
+//==========================================Version 10==============================================
+	public void testGetMaximumPrecision_DECIMAL_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_PRECISION_DECIMAL_10;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DECIMAL"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "DECIMAL"),
+										expectedValue, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_MONEY_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_PRECISION_MONEY_10;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("MONEY"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "MONEY"),
+										expectedValue, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CHAR_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_CHAR_10;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CHAR"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_NCHAR_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_NCHAR_10;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "NCHAR"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARCHAR_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_VARCHAR_10;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARCHAR"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_LVARCHAR_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_LVARCHAR_10;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("LVARCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "LVARCHAR"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetDatabaseMaximumIdentifierLength_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("10.0"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getDatabaseMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_DATABASE_10;
+				
+					assertEquals(getAssertionFailureMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetSchemaMaximumIdentifierLength_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("10.0"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getSchemaMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_10;
+				
+					assertEquals(getAssertionFailureMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							actualValue, expectedValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetTableMaximumIdentifierLength_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("10.0"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getTableMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_TABLE_10;
+				
+					assertEquals(getAssertionFailureMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetViewMaximumIdentifierLength_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("10.0"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getViewMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_VIEW_10;
+				
+					assertEquals(getAssertionFailureMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+		
+	public void testGetColumnMaximumIdentifierLength_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("10.0"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getColumnMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_COLUMN_10;
+				
+					assertEquals(getAssertionFailureMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetTriggerMaximumIdentifierLength_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("10.0"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getTriggerMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_10;
+				
+					assertEquals(getAssertionFailureMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetStoredProcedureMaximumIdentifierLength_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				
+				if((dbInformationCollection.get(i).toString()).equals("10.0"))
+				{
+					procedure = SQLRoutinesFactory.eINSTANCE.createProcedure();
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getMaximumIdentifierLength(procedure);
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_10;
+				
+					assertEquals(getAssertionFailureMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	private String getAssertionFailureMessage(String methodName, Object versionName, String dataName){
+		
+		String temp = "\nData type: ";
+		
+		if(dataName.equals(""))
+		{
+			temp = "";
+		}
+		
+		return ("\nPackage: " + PACKAGE_NAME +
+				"\nMethod: " + methodName +
+			    "\nProduct: " + strProduct +
+		        "\nVersion: " + versionName +
+		        temp + dataName +
+		        "\nResult: The actual value does not agree with vendor doc. ");
+	}
+	
+	private String getExceptionMessage(String methodName, Object versionName, Exception e){
+		
+		return ("\nMethod: " + methodName + 
+				"\nProduct: " + strProduct + 
+			    "\nVersion: " + versionName +
+		        "\nException: " + e.toString() +
+		        "\nDescription: The exception is thrown in the test case");
+	}
+	
+	public void tearDown(){
+		
+		expectedValue = 0;
+		actualValue = 0;
+		
+		productVersion = null;
+		dataType = null;
+		dataTypeList = null;
+		definitionCollection = new ArrayList();
+		dbInformationCollection = new ArrayList();
+		
+		strProductVersion = null;
+
+		definition = null;
+		typeDefinition = null;
+		procedure = null;
+	}
+
+}
diff --git a/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/MySQLTest.java b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/MySQLTest.java
new file mode 100644
index 0000000..7266b56
--- /dev/null
+++ b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/MySQLTest.java
@@ -0,0 +1,596 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.dbdefinition.junittest;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+
+public class MySQLTest extends TestCase {
+	
+	//=========================Version 4.0=======================================
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_4 = 64;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_DATABASE_4 = 64;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLE_4 = 64;
+	
+	private final int MAXIMUM_LENGTH_BLOB_4 = 65536;
+	private final int MAXIMUM_LENGTH_CHAR_4 = 255;
+	private final int MAXIMUM_LENGTH_VARCHAR_4 = 255;
+	
+	private final int MAXIMUM_PRECISION_DECIMAL_4 = 64;
+	private final int MAXIMUM_PRECISION_NUMERIC_4 = 64;	
+	
+    //=========================Version 4.1=======================================
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_41 = 64;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_DATABASE_41 = 64;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLE_41 = 64;
+	
+	private final int MAXIMUM_LENGTH_BLOB_41 = 65536;
+	private final int MAXIMUM_LENGTH_CHAR_41 = 255;
+	private final int MAXIMUM_LENGTH_VARCHAR_41 = 255;
+	
+	private final int MAXIMUM_PRECISION_DECIMAL_41 = 64;
+	private final int MAXIMUM_PRECISION_NUMERIC_41 = 64;
+	//==========================================================================================
+	
+	private final String strProduct = "MySql";
+	private final String PACKAGE_NAME = "org.eclipse.datatools.enablement.dbdefinition.junittest";
+	
+	private int expectedMaxPrecision = 0;
+	private int expectedMaxLength = 0;
+	private int expectedIdentifierLength = 0;
+	private int actualIdentifierLength = 0;
+
+	
+	private Iterator productVersion = null;
+	private Iterator dataType;
+	private List dataTypeList;
+	private ArrayList definitionCollection = new ArrayList();
+	private ArrayList dbInformationCollection = new ArrayList();
+	
+	private String strProductVersion = null;
+
+	private DatabaseDefinition definition = null;
+	private PredefinedDataTypeDefinition typeDefinition = null;
+
+	
+	public void setUp(){
+		
+		try{	
+			productVersion = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getVersions(strProduct);
+			assertNotNull("\nMethod: getVersions()" +
+						  "\nError: The method returns a NULL value in startUp()", productVersion);
+					
+			while(productVersion.hasNext())
+			{
+				strProductVersion = productVersion.next().toString();
+				definition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(strProduct, strProductVersion);
+				assertNotNull("\nMethod: getDefinition()" +
+							  "\nError: The method returns a NULL value in startUp()", definition);
+					
+				dbInformationCollection.add(strProductVersion);
+				definitionCollection.add(definition);
+			}
+		}
+		catch(Exception e){
+			fail("\nMethod: setUp()" +
+				 "\nException: " + e.toString() +
+			     "\nDescription: The set up is incomplete");
+		}
+	}
+	
+//==========================================Version 4.0==============================================
+		
+	public void testGetMaximumPrecision_DECIMAL_4(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("4.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_DECIMAL_4;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DECIMAL"))
+							{								
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "DECIMAL"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_NUMERIC_4(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("4.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_NUMERIC_4;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMERIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "NUMERIC"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+								
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CHAR_4(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("4.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CHAR_4;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARCHAR_4(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("4.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARCHAR_4;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR"))
+							{
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARCHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_BLOB_4(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("4.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_BLOB_4;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("BLOB"))
+							{
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "BLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetDatabaseMaximumIdentifierLength_4(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("4.0"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getDatabaseMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_DATABASE_4;
+				
+					assertEquals(getAssertionFailureMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetTableMaximumIdentifierLength_4(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("4.0"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTableMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TABLE_4;
+				
+					assertEquals(getAssertionFailureMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetColumnMaximumIdentifierLength_4(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("4.0"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getColumnMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_COLUMN_4;
+				
+					assertEquals(getAssertionFailureMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+//==========================================Version 4.1==============================================
+	
+	public void testGetMaximumPrecision_DECIMAL_41(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("4.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_DECIMAL_41;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DECIMAL"))
+							{								
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "DECIMAL"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_NUMERIC_41(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("4.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_NUMERIC_41;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMERIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "NUMERIC"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+								
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CHAR_41(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("4.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CHAR_41;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHAR"))
+							{
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARCHAR_41(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("4.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARCHAR_41;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR"))
+							{
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARCHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_BLOB_41(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("4.1"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_BLOB_41;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("BLOB"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "BLOB"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetDatabaseMaximumIdentifierLength_41(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("4.1"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getDatabaseMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_DATABASE_41;
+				
+					assertEquals(getAssertionFailureMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetTableMaximumIdentifierLength_41(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("4.1"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTableMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TABLE_41;
+				
+					assertEquals(getAssertionFailureMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetColumnMaximumIdentifierLength_41(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("4.1"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getColumnMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_COLUMN_41;
+				
+					assertEquals(getAssertionFailureMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	private String getAssertionFailureMessage(String methodName, Object versionName, String dataName){
+		
+		String temp = "\nData type: ";
+		
+		if(dataName.equals(""))
+		{
+			temp = "";
+		}
+		
+		return ("\nPackage: " + PACKAGE_NAME +
+				"\nMethod: " + methodName +
+			    "\nProduct: " + strProduct +
+		        "\nVersion: " + versionName +
+		        temp + dataName +
+		        "\nResult: The actual value does not agree with vendor doc. ");
+	}
+	
+	private String getExceptionMessage(String methodName, Object versionName, Exception e){
+		
+		return ("\nMethod: " + methodName + 
+				"\nProduct: " + strProduct + 
+			    "\nVersion: " + versionName +
+		        "\nException: " + e.toString() +
+		        "\nDescription: The exception is thrown in the test case");
+	}
+	
+	public void tearDown(){
+		
+		expectedMaxPrecision = 0;
+		expectedMaxLength = 0;
+		expectedIdentifierLength = 0;
+		actualIdentifierLength = 0;
+		
+		productVersion = null;
+		dataType = null;
+		dataTypeList = null;
+		definitionCollection = new ArrayList();
+		dbInformationCollection = new ArrayList();
+		
+		strProductVersion = null;
+
+		
+		definition = null;
+		typeDefinition = null;
+	}
+
+}
diff --git a/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/OracleTest.java b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/OracleTest.java
new file mode 100644
index 0000000..32700f5
--- /dev/null
+++ b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/OracleTest.java
@@ -0,0 +1,1724 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.dbdefinition.junittest;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesFactory;
+
+public class OracleTest extends TestCase {
+	
+	//=========================Version 8=======================================
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_8 = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_DATABASE_8 = 8;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_8 = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_8 = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLE_8 = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLESPACE_8 = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_VIEW_8 = 30;
+	
+	private final int MAXIMUM_LENGTH_CHAR_8 = 2000;
+	private final int MAXIMUM_LENGTH_NCHAR_8 = 2000;
+	private final int MAXIMUM_LENGTH_NVARCHAR2_8 = 4000;
+	private final int MAXIMUM_LENGTH_RAW_8 = 2000;
+	private final int MAXIMUM_LENGTH_VARCHAR2_8 = 4000;
+	
+	private final int MAXIMUM_PRECISION_FLOAT_8 = 38;
+	private final int MAXIMUM_PRECISION_NUMBER_8 = 38;
+	
+	private final int MAXIMUM_SCALE_NUMBER_8 = 127;
+	private final int MINIMUM_SCALE_NUMBER_8 = -84;
+	
+    //=========================Version 9=======================================
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_9 = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_DATABASE_9 = 8;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_9 = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_9 = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLE_9 = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLESPACE_9 = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_VIEW_9 = 30;
+	
+	private final int MAXIMUM_LENGTH_CHAR_9 = 2000;
+	private final int MAXIMUM_LENGTH_NCHAR_9 = 2000;
+	private final int MAXIMUM_LENGTH_NVARCHAR2_9 = 4000;
+	private final int MAXIMUM_LENGTH_RAW_9 = 2000;
+	private final int MAXIMUM_LENGTH_VARCHAR2_9 = 4000;
+	
+	private final int MAXIMUM_PRECISION_FLOAT_9 = 38;
+	private final int MAXIMUM_PRECISION_NUMBER_9 = 38;
+	private final int MAXIMUM_PRECISION_TIMESTAMP_9 = 9;
+	private final int MAXIMUM_PRECISION_TIMESTAMP_WITH_LOCAL_TIME_ZONE_9 = 9;
+	private final int MAXIMUM_PRECISION_TIMESTAMP_WITH_TIME_ZONE_9 = 9;
+	
+	private final int MAXIMUM_SCALE_NUMBER_9 = 127;
+	private final int MINIMUM_SCALE_NUMBER_9 = -84;
+	
+	//=========================Version 10==========================================
+
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_10 = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_DATABASE_10 = 8;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_10 = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_10 = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLE_10 = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLESPACE_10 = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_VIEW_10 = 30;
+	
+	private final int MAXIMUM_LENGTH_CHAR_10 = 2000;
+	private final int MAXIMUM_LENGTH_NCHAR_10 = 2000;
+	private final int MAXIMUM_LENGTH_NVARCHAR2_10 = 4000;
+	private final int MAXIMUM_LENGTH_RAW_10 = 2000;
+	private final int MAXIMUM_LENGTH_VARCHAR2_10 = 4000;
+	
+	private final int MAXIMUM_PRECISION_FLOAT_10 = 38;
+	private final int MAXIMUM_PRECISION_NUMBER_10 = 38;
+	private final int MAXIMUM_PRECISION_TIMESTAMP_10 = 9;
+	private final int MAXIMUM_PRECISION_TIMESTAMP_WITH_LOCAL_TIME_ZONE_10 = 9;
+	private final int MAXIMUM_PRECISION_TIMESTAMP_WITH_TIME_ZONE_10 = 9;
+	
+	private final int MAXIMUM_SCALE_NUMBER_10 = 127;
+	private final int MINIMUM_SCALE_NUMBER_10 = -84;
+	
+	//==========================================================================================
+	
+	private final String strProduct = "Oracle";
+	private final String PACKAGE_NAME = "org.eclipse.datatools.enablement.dbdefinition.junittest";
+	
+	private int expectedValue = 0;
+	private int actualValue = 0;
+	
+	private Iterator productVersion = null;
+	private Iterator dataType;
+	private List dataTypeList;
+	private ArrayList definitionCollection = new ArrayList();
+	private ArrayList dbInformationCollection = new ArrayList();
+	
+	private String strProductVersion = null;
+
+	private DatabaseDefinition definition = null;
+	private PredefinedDataTypeDefinition typeDefinition = null;
+	private Procedure procedure = null;
+
+	
+	public void setUp(){
+		
+		try{	
+			productVersion = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getVersions(strProduct);
+			assertNotNull("\nMethod: getVersions()" +
+						  "\nError: The method returns a NULL value in startUp()", productVersion);
+					
+			while(productVersion.hasNext())
+			{
+				strProductVersion = productVersion.next().toString();
+				definition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(strProduct, strProductVersion);
+				assertNotNull("\nMethod: getDefinition()" +
+							  "\nError: The method returns a NULL value in startUp()", definition);
+					
+				dbInformationCollection.add(strProductVersion);
+				definitionCollection.add(definition);
+			}
+		}
+		catch(Exception e){
+			fail("\nMethod: setUp()" +
+				 "\nException: " + e.toString() +
+			     "\nDescription: The set up is incomplete");
+		}
+	}
+	
+//==========================================Version 8==============================================
+	
+	public void testGetMaximumPrecision_NUMBER_8(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("8"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_PRECISION_NUMBER_8;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMBER"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "NUMBER"),
+										expectedValue, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMinumumScale_NUMBER_8(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("8"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MINIMUM_SCALE_NUMBER_8;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMBER"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMinimumScale()", dbInformationCollection.get(i), "NUMBER"),
+										expectedValue, typeDefinition.getMinimumScale());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMinimumScale()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumScale_NUMBER_8(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("8"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_SCALE_NUMBER_8;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMBER"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumScale()", dbInformationCollection.get(i), "NUMBER"),
+										expectedValue, typeDefinition.getMaximumScale());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumScale()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_FLOAT_8(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("8"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_PRECISION_FLOAT_8;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("FLOAT"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "FLOAT"),
+										expectedValue, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CHAR_8(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("8"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_CHAR_8;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CHAR"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_NCHAR_8(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("8"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_NCHAR_8;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "NCHAR"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARCHAR2_8(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("8"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_VARCHAR2_8;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR2"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARCHAR2"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_NVARCHAR2_8(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("8"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_NVARCHAR2_8;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NVARCHAR2"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "NVARCHAR2"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_RAW_8(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("8"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_RAW_8;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("RAW"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "RAW"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+		
+	public void testGetDatabaseMaximumIdentifierLength_8(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("8"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getDatabaseMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_DATABASE_8;
+				
+					assertEquals(getAssertionFailureMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetSchemaMaximumIdentifierLength_8(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("8"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getSchemaMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_8;
+				
+					assertEquals(getAssertionFailureMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							actualValue, expectedValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetTableMaximumIdentifierLength_8(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("8"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getTableMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_TABLE_8;
+				
+					assertEquals(getAssertionFailureMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetViewMaximumIdentifierLength_8(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("8"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getViewMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_VIEW_8;
+				
+					assertEquals(getAssertionFailureMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+		
+	public void testGetColumnMaximumIdentifierLength_8(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("8"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getColumnMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_COLUMN_8;
+				
+					assertEquals(getAssertionFailureMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetTablespaceMaximumIdentifierLength_8(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("8"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getTablespaceMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_TABLESPACE_8;
+				
+					assertEquals(getAssertionFailureMessage("getTablespaceMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTablespaceMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetStoredProcedureMaximumIdentifierLength_8(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				
+				if((dbInformationCollection.get(i).toString()).equals("8"))
+				{
+					procedure = SQLRoutinesFactory.eINSTANCE.createProcedure();
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getMaximumIdentifierLength(procedure);
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_8;
+				
+					assertEquals(getAssertionFailureMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	
+	
+//==========================================Version 9==============================================
+	
+	public void testGetMaximumPrecision_NUMBER_9(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_PRECISION_NUMBER_9;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMBER"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "NUMBER"),
+										expectedValue, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMinumumScale_NUMBER_9(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MINIMUM_SCALE_NUMBER_9;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMBER"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMinimumScale()", dbInformationCollection.get(i), "NUMBER"),
+										expectedValue, typeDefinition.getMinimumScale());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				
+				fail(getExceptionMessage("getMinimumScale()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumScale_NUMBER_9(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_SCALE_NUMBER_9;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMBER"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumScale()", dbInformationCollection.get(i), "NUMBER"),
+										expectedValue, typeDefinition.getMaximumScale());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				
+				fail(getExceptionMessage("getMaximumScale()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_FLOAT_9(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_PRECISION_FLOAT_9;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("FLOAT"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "FLOAT"),
+										expectedValue, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CHAR_9(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_CHAR_9;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CHAR"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_NCHAR_9(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_NCHAR_9;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "NCHAR"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARCHAR2_9(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_VARCHAR2_9;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR2"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARCHAR2"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_NVARCHAR2_9(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_NVARCHAR2_9;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NVARCHAR2"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "NVARCHAR2"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_RAW_9(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_RAW_9;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("RAW"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "RAW"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_TIMESTAMP_WITH_TIME_ZONE_9(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_PRECISION_TIMESTAMP_WITH_TIME_ZONE_9;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("TIMESTAMP WITH TIME ZONE"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "TIMESTAMP WITH TIME ZONE"),
+										expectedValue, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_TIMESTAMP_WITH_LOCAL_TIME_ZONE_9(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_PRECISION_TIMESTAMP_WITH_LOCAL_TIME_ZONE_9;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("TIMESTAMP WITH LOCAL TIME ZONE"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "TIMESTAMP WITH LOCAL TIME ZONE"),
+										expectedValue, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_TIMESTAMP_9(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("9"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_PRECISION_TIMESTAMP_9;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("TIMESTAMP"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "TIMESTAMP"),
+										expectedValue, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetDatabaseMaximumIdentifierLength_9(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("9"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getDatabaseMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_DATABASE_9;
+				
+					assertEquals(getAssertionFailureMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetSchemaMaximumIdentifierLength_9(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("9"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getSchemaMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_9;
+				
+					assertEquals(getAssertionFailureMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							actualValue, expectedValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetTableMaximumIdentifierLength_9(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("9"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getTableMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_TABLE_9;
+				
+					assertEquals(getAssertionFailureMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetViewMaximumIdentifierLength_9(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("9"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getViewMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_VIEW_9;
+				
+					assertEquals(getAssertionFailureMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+		
+	public void testGetColumnMaximumIdentifierLength_9(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("9"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getColumnMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_COLUMN_9;
+				
+					assertEquals(getAssertionFailureMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetTablespaceMaximumIdentifierLength_9(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("9"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getTablespaceMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_TABLESPACE_9;
+				
+					assertEquals(getAssertionFailureMessage("getTablespaceMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTablespaceMaximumIdentifierLength()", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+	public void testGetStoredProcedureMaximumIdentifierLength_9(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				
+				if((dbInformationCollection.get(i).toString()).equals("9"))
+				{
+					procedure = SQLRoutinesFactory.eINSTANCE.createProcedure();
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getMaximumIdentifierLength(procedure);
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_9;
+				
+					assertEquals(getAssertionFailureMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(2), e));
+			}
+		}
+	}
+	
+//==========================================Version 10==============================================
+		
+public void testGetMaximumPrecision_NUMBER_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_PRECISION_NUMBER_10;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMBER"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "NUMBER"),
+										expectedValue, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMinumumScale_NUMBER_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MINIMUM_SCALE_NUMBER_10;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMBER"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMinimumScale()", dbInformationCollection.get(i), "NUMBER"),
+										expectedValue, typeDefinition.getMinimumScale());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMinimumScale()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumScale_NUMBER_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_SCALE_NUMBER_10;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMBER"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumScale()", dbInformationCollection.get(i), "NUMBER"),
+										expectedValue, typeDefinition.getMaximumScale());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumScale()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_FLOAT_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_PRECISION_FLOAT_10;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("FLOAT"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "FLOAT"),
+										expectedValue, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CHAR_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_CHAR_10;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CHAR"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_NCHAR_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_NCHAR_10;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "NCHAR"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARCHAR2_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_VARCHAR2_10;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR2"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARCHAR2"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_NVARCHAR2_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_NVARCHAR2_10;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NVARCHAR2"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "NVARCHAR2"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_RAW_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_LENGTH_RAW_10;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("RAW"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "RAW"),
+										expectedValue, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_TIMESTAMP_WITH_TIME_ZONE_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_PRECISION_TIMESTAMP_WITH_TIME_ZONE_10;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("TIMESTAMP WITH TIME ZONE"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "TIMESTAMP WITH TIME ZONE"),
+										expectedValue, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_TIMESTAMP_WITH_LOCAL_TIME_ZONE_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_PRECISION_TIMESTAMP_WITH_LOCAL_TIME_ZONE_10;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("TIMESTAMP WITH LOCAL TIME ZONE"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "TIMESTAMP WITH LOCAL TIME ZONE"),
+										expectedValue, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_TIMESTAMP_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("10"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedValue = MAXIMUM_PRECISION_TIMESTAMP_10;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("TIMESTAMP"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "TIMESTAMP"),
+										expectedValue, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetDatabaseMaximumIdentifierLength_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("10"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getDatabaseMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_DATABASE_10;
+				
+					assertEquals(getAssertionFailureMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetSchemaMaximumIdentifierLength_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("10"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getSchemaMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_10;
+				
+					assertEquals(getAssertionFailureMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							actualValue, expectedValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetTableMaximumIdentifierLength_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("10"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getTableMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_TABLE_10;
+				
+					assertEquals(getAssertionFailureMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetViewMaximumIdentifierLength_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("10"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getViewMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_VIEW_10;
+				
+					assertEquals(getAssertionFailureMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+		
+	public void testGetColumnMaximumIdentifierLength_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("10"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getColumnMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_COLUMN_10;
+				
+					assertEquals(getAssertionFailureMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetTablespaceMaximumIdentifierLength_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("10"))
+				{
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getTablespaceMaximumIdentifierLength();
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_TABLESPACE_10;
+				
+					assertEquals(getAssertionFailureMessage("getTablespaceMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTablespaceMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetStoredProcedureMaximumIdentifierLength_10(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				
+				if((dbInformationCollection.get(i).toString()).equals("10"))
+				{
+					procedure = SQLRoutinesFactory.eINSTANCE.createProcedure();
+					actualValue = ((DatabaseDefinition)definitionCollection.get(i)).getMaximumIdentifierLength(procedure);
+					expectedValue = MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_10;
+				
+					assertEquals(getAssertionFailureMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(i), ""),
+							expectedValue, actualValue);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	private String getAssertionFailureMessage(String methodName, Object versionName, String dataName){
+		
+		String temp = "\nData type: ";
+		
+		if(dataName.equals(""))
+		{
+			temp = "";
+		}
+		
+		return ("\nPackage: " + PACKAGE_NAME +
+				"\nMethod: " + methodName +
+			    "\nProduct: " + strProduct +
+		        "\nVersion: " + versionName +
+		        temp + dataName +
+		        "\nResult: The actual value does not agree with vendor doc. ");
+	}
+	
+	private String getExceptionMessage(String methodName, Object versionName, Exception e){
+		
+		return ("\nMethod: " + methodName + 
+				"\nProduct: " + strProduct + 
+			    "\nVersion: " + versionName +
+		        "\nException: " + e.toString() +
+		        "\nDescription: The exception is thrown in the test case");
+	}
+	
+	private int getProperIndex(int rawIndex){
+		
+		if(rawIndex == 0)
+			return 1;
+		else if(rawIndex == 1)
+			return 2;
+		else
+			return 0;
+	}
+	
+	public void tearDown(){
+		
+		expectedValue = 0;
+		actualValue = 0;
+		
+		productVersion = null;
+		dataType = null;
+		dataTypeList = null;
+		definitionCollection = new ArrayList();
+		dbInformationCollection = new ArrayList();
+		
+		strProductVersion = null;
+
+		definition = null;
+		typeDefinition = null;
+		procedure = null;
+	}
+
+}
diff --git a/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/PostgreSQLTest.java b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/PostgreSQLTest.java
new file mode 100644
index 0000000..b9a8bd5
--- /dev/null
+++ b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/PostgreSQLTest.java
@@ -0,0 +1,639 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.dbdefinition.junittest;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesFactory;
+
+public class PostgreSQLTest extends TestCase {
+	
+	//=========================Version 12.x=======================================
+
+	private final int MAXIMUM_LENGTH_BPCHAR_8X = 32672;
+	private final int MAXIMUM_LENGTH_BPCHAR_ARRAY_8X = 32672;
+	private final int MAXIMUM_LENGTH_BYTEA_8X = 254;
+	private final int MAXIMUM_LENGTH_CIDR_8X = 32;
+	private final int MAXIMUM_LENGTH_INET_8X = 15;
+	private final int MAXIMUM_LENGTH_INFO_SCHEMA_CHARACTER_DATA_8X = 32672;
+	private final int MAXIMUM_LENGTH_INFO_SCHEMA_SQL_IDENTIFIER_8X = 32672;
+	private final int MAXIMUM_LENGTH_MACADDR_8X = 128;
+	private final int MAXIMUM_LENGTH_NAME_ARRAY_8X = 32672;
+	private final int MAXIMUM_LENGTH_TEXT_8X = 32672;
+	private final int MAXIMUM_LENGTH_TEXT_ARRAY_8X = 32672;
+	private final int MAXIMUM_LENGTH_UNKNOWN_8X = 32672;
+	private final int MAXIMUM_LENGTH_VARCHAR_8X = 32672;
+	private final int MAXIMUM_LENGTH_VARCHAR_ARRAY_8X = 32672;
+	
+	private final int MAXIMUM_PRECISION_NUMERIC_8X = 31;
+			
+	
+	//==========================================================================================
+	
+	private final String strProduct = "postgres";
+	private final String PACKAGE_NAME = "org.eclipse.datatools.enablement.dbdefinition.junittest";
+	
+	private int expectedMaxPrecision = 0;
+	private int expectedMaxLength = 0;
+	private int expectedIdentifierLength = 0;
+	private int actualIdentifierLength = 0;
+
+	
+	private Iterator productVersion = null;
+	private Iterator dataType;
+	private List dataTypeList;
+	private ArrayList definitionCollection = new ArrayList();
+	private ArrayList dbInformationCollection = new ArrayList();
+	
+	private String strProductVersion = null;
+
+	private DatabaseDefinition definition = null;
+	private PredefinedDataTypeDefinition typeDefinition = null;
+	private Procedure procedure = null;
+
+	
+	public void setUp(){
+		
+		try{	
+			productVersion = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getVersions(strProduct);
+			assertNotNull("\nMethod: getVersions()" +
+						  "\nError: The method returns a NULL value in startUp()", productVersion);
+					
+			while(productVersion.hasNext())
+			{
+				strProductVersion = productVersion.next().toString();
+				definition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(strProduct, strProductVersion);
+				assertNotNull("\nMethod: getDefinition()" +
+							  "\nError: The method returns a NULL value in startUp()", definition);
+					
+				dbInformationCollection.add(strProductVersion);
+				definitionCollection.add(definition);
+			}
+		}
+		catch(Exception e){
+			fail("\nMethod: setUp()" +
+				 "\nException: " + e.toString() +
+			     "\nDescription: The set up is incomplete");
+		}
+	}
+	
+//==========================================Version 8.x==============================================
+	
+	public void testGetMaximumPrecision_NUMERIC_8X(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("8.x"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_NUMERIC_8X;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMERIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "NUMERIC"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+
+	public void testGetMaximumLength_BPCHAR_8X(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("8.x"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_BPCHAR_8X;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("BPCHAR"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "BPCHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_BPCHAR_ARRAY_8X(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("8.x"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_BPCHAR_ARRAY_8X;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("_BPCHAR"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "BPCHAR_ARRAY"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_BYTEA_8X(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("8.x"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_BYTEA_8X;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("BYTEA"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "BYTEA"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CIDR_8X(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("8.x"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CIDR_8X;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CIDR"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CIDR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_INET_8X(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("8.x"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_INET_8X;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("INET"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "INET"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_INFO_SCHEMA_CHARACTER_DATA_8X(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("8.x"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_INFO_SCHEMA_CHARACTER_DATA_8X;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHARACTER_DATA"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "INFO_SCHEMA_CHARACTER_DATA"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_INFO_SCHEMA_SQL_IDENTIFIER_8X(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("8.x"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_INFO_SCHEMA_SQL_IDENTIFIER_8X;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("SQL_IDENTIFIER"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "INFO_SCHEMA_SQL_IDENTIFIER"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_MACADDR_8X(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("8.x"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_MACADDR_8X;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("MACADDR"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "MACADDR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_NAME_ARRAY_8X(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("8.x"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_NAME_ARRAY_8X;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("_NAME"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "NAME_ARRAY"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_TEXT_8X(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("8.x"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_TEXT_8X;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("TEXT"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "TEXT"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_TEXT_ARRAY_8X(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("8.x"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_TEXT_ARRAY_8X;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("_TEXT"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "TEXT_ARRAY"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_UNKNOWN_8X(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("8.x"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_UNKNOWN_8X;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("UNKNOWN"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "UNKNOWN"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARCHAR_8X(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("8.x"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARCHAR_8X;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARCHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARCHAR_ARRAY_8X(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("8.x"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARCHAR_ARRAY_8X;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("_VARCHAR"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARCHAR_ARRAY"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	private String getAssertionFailureMessage(String methodName, Object versionName, String dataName){
+		
+		String temp = "\nData type: ";
+		
+		if(dataName.equals(""))
+		{
+			temp = "";
+		}
+		
+		return ("\nPackage: " + PACKAGE_NAME +
+				"\nMethod: " + methodName +
+			    "\nProduct: " + strProduct + 
+		        "\nVersion: " + versionName +
+		        temp + dataName +
+		        "\nResult: The actual value does not agree with vendor doc. ");
+	}
+	
+	private String getExceptionMessage(String methodName, Object versionName, Exception e){
+		
+		return ("\nMethod: " + methodName + 
+				"\nProduct: " + strProduct + 
+			    "\nVersion: " + versionName +
+		        "\nException: " + e.toString() +
+		        "\nDescription: The exception is thrown in the test case");
+	}
+	
+	public void tearDown(){
+		
+		expectedMaxPrecision = 0;
+		expectedMaxLength = 0;
+		expectedIdentifierLength = 0;
+		actualIdentifierLength = 0;
+		
+		productVersion = null;
+		dataType = null;
+		dataTypeList = null;
+		definitionCollection = new ArrayList();
+		dbInformationCollection = new ArrayList();
+		
+		strProductVersion = null;
+
+		definition = null;
+		typeDefinition = null;
+		procedure = null;
+	}
+
+}
diff --git a/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/PredefinedDataTypeDefinitionGenericTest.java b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/PredefinedDataTypeDefinitionGenericTest.java
new file mode 100644
index 0000000..d820da6
--- /dev/null
+++ b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/PredefinedDataTypeDefinitionGenericTest.java
@@ -0,0 +1,1602 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.dbdefinition.junittest;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import junit.framework.TestCase;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.datatypes.DataType;
+
+public class PredefinedDataTypeDefinitionGenericTest extends TestCase {
+	
+	private final String PACKAGE_NAME = "org.eclipse.datatools.enablement.dbdefinition.junittest";
+	private final String FILE_NAME = "PredefinedDataTypeDefinition.java";
+	private ArrayList definitionCollection = new ArrayList();
+	private ArrayList dbInformationCollection = new ArrayList();
+	private ArrayList dataTypeCollection = new ArrayList();
+	private Iterator dataType;
+	private Iterator product = null;
+	private Iterator productVersion = null;
+	private PredefinedDataTypeDefinition typeDefinition = null;
+	private DataType type = null;
+	private String strProduct = null;
+	private String strProductVersion = null;
+	private DatabaseDefinition definition = null;
+	
+	public void setUp(){
+		
+		try{
+			product = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getProducts();
+			assertNotNull("\nMethod: getProducts()" +
+					      "\nError: The method returns a NULL value in startUp()!", product);
+
+			while(product.hasNext())
+			{
+				strProduct = product.next().toString();
+				productVersion = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getVersions(strProduct);
+				assertNotNull("\nMethod: getVersions()" +
+						      "\nError: The method returns a NULL value in startUp()", productVersion);
+					
+				while(productVersion.hasNext())
+				{
+					strProductVersion = productVersion.next().toString();
+					definition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(strProduct, strProductVersion);
+					assertNotNull("\nMethod: getDefinition()" +
+							      "\nError: The method returns a NULL value in startUp()", definition);
+					
+					dbInformationCollection.add(strProduct);
+					dbInformationCollection.add(strProductVersion);
+					definitionCollection.add(definition);
+				}
+			}
+		}
+		catch(Exception e){
+			fail("\nMethod: setUp()" +
+				 "\nException: " + e.toString() +
+			     "\nDescription: The set up is incomplete");
+		}
+	}
+	
+	public void testGetLeadingFieldQualifierDefinition(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					assertNotNull(getAssertionFailureMessage("getLeadingFieldQualifierDefinition()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+						typeDefinition.getLeadingFieldQualifierDefinition());
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getLeadingFieldQualifierDefinition()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetTrailingFieldQualifierDefinition(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					assertNotNull(getAssertionFailureMessage("getTrailingFieldQualifierDefinition()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+						typeDefinition.getTrailingFieldQualifierDefinition());
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getTrailingFieldQualifierDefinition()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetDefaultTrailingFieldQualifierDefinition(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.getDefaultTrailingFieldQualifierDefinition();
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDefaultTrailingFieldQualifierDefinition()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetDefaultTrailingFieldQualifierDefinition(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setDefaultTrailingFieldQualifierDefinition(null);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("setDefaultTrailingFieldQualifierDefinition(FieldQualifierDefinition value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetDefaultLeadingFieldQualifierDefinition(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.getDefaultLeadingFieldQualifierDefinition();
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDefaultLeadingFieldQualifierDefinition()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetDefaultLeadingFieldQualifierDefinition(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setDefaultLeadingFieldQualifierDefinition(null);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("setDefaultLeadingFieldQualifierDefinition(FieldQualifierDefinition value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+
+	public void testIsLengthSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.isLengthSupported();
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("isLengthSupported()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetLengthSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setLengthSupported(true);
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("setLengthSupported(boolean value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testIsScaleSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.isScaleSupported();
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("isScaleSupported()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetScaleSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setScaleSupported(true);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("setScaleSupported(boolean value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testIsPrecisionSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.isPrecisionSupported();
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("isPrecisionSupported()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetPrecisionSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setPrecisionSupported(true);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("setPrecisionSupported(boolean value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testIsKeyConstraintSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.isKeyConstraintSupported();
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("isKeyConstraintSupported()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetKeyConstraintSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setKeyConstraintSupported(true);
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("setKeyConstraintSupported(boolean value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testIsIdentitySupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.isIdentitySupported();
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("isIdentitySupported()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetIdentitySupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setIdentitySupported(true);
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("setIdentitySupported(boolean value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testIsMultipleColumnsSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.isMultipleColumnsSupported();
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("isMultipleColumnsSupported()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetMultipleColumnsSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setMultipleColumnsSupported(true);
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("setMultipleColumnsSupported(boolean value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testIsNullableSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.isNullableSupported();
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("isNullableSupported()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetNullableSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setNullableSupported(true);
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("setNullableSupported(boolean value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testIsDefaultSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.isDefaultSupported();
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("isDefaultSupported()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetDefaultSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setDefaultSupported(true);
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("setDefaultSupported(boolean value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testIsClusteringSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.isClusteringSupported();
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("isClusteringSupported()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetClusteringSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setClusteringSupported(true);
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("setClusteringSupported(boolean value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testIsFillFactorSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.isFillFactorSupported();
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("isFillFactorSupported()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetFillFactorSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setFillFactorSupported(true);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("setFillFactorSupported(boolean value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testIsBitDataSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.isBitDataSupported();
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("isBitDataSupported()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetBitDataSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setBitDataSupported(true);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("setBitDataSupported(boolean value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumValue(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.getMaximumValue();
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumValue()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetMaximumValue(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setMaximumValue(10);
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("setMaximumValue(long value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetMinimumValue(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.getMinimumValue();
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMinimumValue()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetMinimumValue(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setMinimumValue(10);
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("setMinimumValue(long value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.getMaximumLength();
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetMaximumLength(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setMaximumLength(10);
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("setMaximumLength(int value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.getMaximumPrecision();
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetMaximumPrecision(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setMaximumPrecision(10);
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("setMaximumPrecision(int value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumScale(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.getMaximumScale();
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumScale()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetMaximumScale(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setMaximumScale(10);
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("setMaximumScale(int value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetMinimumScale(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.getMinimumScale();
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getMinimumScale()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetMinimumScale(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setMinimumScale(10);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("setMinimumScale(int value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetDefaultValueTypes(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					assertNotNull(getAssertionFailureMessage("getDefaultValueTypes()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+						typeDefinition.getDefaultValueTypes());
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getDefaultValueTypes()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetPrimitiveType(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					assertNotNull(getAssertionFailureMessage("getPrimitiveType()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+						typeDefinition.getPrimitiveType());
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getPrimitiveType()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetPrimitiveType(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setPrimitiveType(typeDefinition.getPrimitiveType());
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("setPrimitiveType(PrimitiveType value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetName(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					assertNotNull(getAssertionFailureMessage("getName()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+						typeDefinition.getName());
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getName()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetJdbcEnumType(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.getJdbcEnumType();
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getJdbcEnumType()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetJdbcEnumType(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setJdbcEnumType((1));
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("setJdbcEnumType(int value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetCharacterSet(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					assertNotNull(getAssertionFailureMessage("getCharacterSet()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+						typeDefinition.getCharacterSet());
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getCharacterSet()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetEncodingScheme(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					assertNotNull(getAssertionFailureMessage("getEncodingScheme()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+						typeDefinition.getEncodingScheme());
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getEncodingScheme()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetCharacterSetSuffix(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					assertNotNull(getAssertionFailureMessage("getCharacterSetSuffix()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+						typeDefinition.getCharacterSetSuffix());
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getCharacterSetSuffix()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetCharacterSetSuffix(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setCharacterSetSuffix(typeDefinition.getCharacterSetSuffix());
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("setCharacterSetSuffix(String value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetEncodingSchemeSuffix(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					assertNotNull(getAssertionFailureMessage("getEncodingSchemeSuffix()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+						typeDefinition.getEncodingSchemeSuffix());
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getEncodingSchemeSuffix()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetEncodingSchemeSuffix(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setEncodingSchemeSuffix(typeDefinition.getEncodingSchemeSuffix());
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("setEncodingSchemeSuffix(String value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetJavaClassName(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.getJavaClassName();
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getJavaClassName()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetJavaClassName(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setJavaClassName("java.lang.String");
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("setJavaClassName(String value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetDefaultLength(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.getDefaultLength();
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDefaultLength()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetDefaultLength(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setDefaultLength(1);
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("setDefaultLength(int value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetDefaultPrecision(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.getDefaultPrecision();
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getDefaultPrecision()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetDefaultPrecision(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setDefaultPrecision(1);
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("setDefaultPrecision(int value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetDefaultScale(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.getDefaultScale();
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getDefaultScale()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetDefaultScale(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setDefaultScale(1);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("setDefaultScale(int value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetCutoffPrecision(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.getCutoffPrecision();
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getCutoffPrecision()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetCutoffPrecision(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setCutoffPrecision(1);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("setCutoffPrecision(int value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetLengthUnit(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					assertNotNull(getAssertionFailureMessage("getLengthUnit()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1)),
+						typeDefinition.getLengthUnit());
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getLengthUnit()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetLengthUnit(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setLengthUnit(typeDefinition.getLengthUnit());
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("setLengthUnit(LengthUnit value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testIsOrderingSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.isOrderingSupported();
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("isOrderingSupported()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetOrderingSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setOrderingSupported(true);
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("setOrderingSupported(boolean value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testIsGroupingSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.isGroupingSupported();
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("isGroupingSupported()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetGroupingSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setGroupingSupported(true);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("setGroupingSupported(boolean value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetDisplayName(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.getDisplayName();
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDisplayName()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetDisplayName(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setDisplayName("Display Name");
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("setDisplayName(String value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testIsDisplayNameSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.isDisplayNameSupported();
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("isDisplayNameSupported()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetDisplayNameSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setDisplayNameSupported(true);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("setDisplayNameSupported(boolean value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testIsLeadingFieldQualifierSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.isLeadingFieldQualifierSupported();
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("isLeadingFieldQualifierSupported()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetLeadingFieldQualifierSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setLeadingFieldQualifierSupported(true);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("setLeadingFieldQualifierSupported(boolean value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testIsTrailingFieldQualifierSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.isTrailingFieldQualifierSupported();
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("isTrailingFieldQualifierSupported()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetTrailingFieldQualifierSupported(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setTrailingFieldQualifierSupported(true);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("setTrailingFieldQualifierSupported(boolean value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testGetFieldQualifierSeparator(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.getFieldQualifierSeparator();
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("getFieldQualifierSeparator()", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+	public void testSetFieldQualifierSeparator(){
+		
+		for(int i = 0, j = 0; i < definitionCollection.size(); i++, j += 2)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					typeDefinition.setFieldQualifierSeparator("Separator");
+				}
+			
+			}catch(Exception e){
+				fail(getExceptionMessage("setFieldQualifierSeparator(String value)", dbInformationCollection.get(j), dbInformationCollection.get(j + 1), e));
+			}
+		}
+	}
+	
+
+	private String getAssertionFailureMessage(String methodName, Object productName, Object versionName){
+		
+		return ("\nPackage: " + PACKAGE_NAME +
+				"\nFile: " + FILE_NAME +
+				"\nMethod: " + methodName +
+			    "\nProduct: " + productName + 
+		        "\nVersion: " + versionName +
+	            "\nAssertion Failure: The assertion condtion fails in the try block");
+	}
+	
+	private String getExceptionMessage(String methodName, Object productName, Object versionName, Exception e){
+		
+		return ("\nPackage: " + PACKAGE_NAME +
+				"\nFile: " + FILE_NAME +
+				"\nMethod: " + methodName + 
+				"\nProduct: " + productName + 
+			    "\nVersion: " + versionName +
+		        "\nException: " + e.toString() +
+		        "\nDescription: The exception is thrown in the test case");
+	}
+	
+	public void tearDown(){
+		
+		definitionCollection = new ArrayList();
+		dbInformationCollection = new ArrayList();
+		dataTypeCollection = new ArrayList();
+		dataType = null;
+		product = null;
+		productVersion = null;
+		typeDefinition = null;
+		type = null;
+		strProduct = null;
+		strProductVersion = null;
+		definition = null;
+	}
+
+}
diff --git a/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/SQLServerTest.java b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/SQLServerTest.java
new file mode 100644
index 0000000..8aad599
--- /dev/null
+++ b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/SQLServerTest.java
@@ -0,0 +1,976 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.dbdefinition.junittest;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesFactory;
+
+public class SQLServerTest extends TestCase {
+	
+	//=========================Version 2000=======================================
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_2000 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_DATABASE_2000 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_2000 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_2000 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLE_2000 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_2000 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_VIEW_2000 = 128;
+	
+	private final int MAXIMUM_LENGTH_BINARY_2000 = 8000;
+	private final int MAXIMUM_LENGTH_CHAR_2000 = 8000;
+	private final int MAXIMUM_LENGTH_NCHAR_2000 = 4000;
+	private final int MAXIMUM_LENGTH_VARBINARY_2000 = 8000;
+	private final int MAXIMUM_LENGTH_VARCHAR_2000 = 8000;
+	
+	private final int MAXIMUM_PRECISION_DECIMAL_2000 = 38;
+	private final int MAXIMUM_PRECISION_FLOAT_2000 = 53;
+	private final int MAXIMUM_PRECISION_NUMERIC_2000 = 38;	
+	
+    //=========================Version 2005=======================================
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_2005 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_DATABASE_2005 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_2005 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_2005 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLE_2005 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_2005 = 128;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_VIEW_2005 = 128;
+	
+	private final int MAXIMUM_LENGTH_BINARY_2005 = 8000;
+	private final int MAXIMUM_LENGTH_CHAR_2005 = 8000;
+	private final int MAXIMUM_LENGTH_NCHAR_2005 = 4000;
+	private final int MAXIMUM_LENGTH_VARBINARY_2005 = 8000;
+	private final int MAXIMUM_LENGTH_VARCHAR_2005 = 8000;
+	
+	private final int MAXIMUM_PRECISION_DECIMAL_2005 = 38;
+	private final int MAXIMUM_PRECISION_FLOAT_2005 = 53;
+	private final int MAXIMUM_PRECISION_NUMERIC_2005 = 38;
+	
+	
+	//==========================================================================================
+	
+	private final String strProduct = "SQL Server";
+	private final String PACKAGE_NAME = "org.eclipse.datatools.enablement.dbdefinition.junittest";
+	
+	private int expectedMaxPrecision = 0;
+	private int expectedMaxLength = 0;
+	private int expectedIdentifierLength = 0;
+	private int actualIdentifierLength = 0;
+
+	
+	private Iterator productVersion = null;
+	private Iterator dataType;
+	private List dataTypeList;
+	private ArrayList definitionCollection = new ArrayList();
+	private ArrayList dbInformationCollection = new ArrayList();
+	
+	private String strProductVersion = null;
+
+	private DatabaseDefinition definition = null;
+	private PredefinedDataTypeDefinition typeDefinition = null;
+	private Procedure procedure = null;
+	
+	public void setUp(){
+		
+		try{	
+			productVersion = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getVersions(strProduct);
+			assertNotNull("\nMethod: getVersions()" +
+						  "\nError: The method returns a NULL value in startUp()", productVersion);
+					
+			while(productVersion.hasNext())
+			{
+				strProductVersion = productVersion.next().toString();
+				definition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(strProduct, strProductVersion);
+				assertNotNull("\nMethod: getDefinition()" +
+							  "\nError: The method returns a NULL value in startUp()", definition);
+					
+				dbInformationCollection.add(strProductVersion);
+				definitionCollection.add(definition);
+			}
+		}
+		catch(Exception e){
+			fail("\nMethod: setUp()" +
+				 "\nException: " + e.toString() +
+			     "\nDescription: The set up is incomplete");
+		}
+	}
+	
+//==========================================Version 2000==============================================
+	
+	public void testGetMaximumPrecision_DECIMAL_2000(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("2000"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_DECIMAL_2000;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DECIMAL"))
+							{								
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "DECIMAL"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_NUMERIC_2000(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("2000"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_NUMERIC_2000;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMERIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "NUMERIC"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_FLOAT_2000(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("2000"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_FLOAT_2000;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("FLOAT"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "FLOAT"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CHAR_2000(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("2000"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CHAR_2000;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_NCHAR_2000(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("2000"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_NCHAR_2000;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "NCHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARCHAR_2000(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("2000"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARCHAR_2000;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARCHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_BINARY_2000(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("2000"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_BINARY_2000;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("BINARY"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "BINARY"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARBINARY_2000(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("2000"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARBINARY_2000;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARBINARY"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARBINARY"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetDatabaseMaximumIdentifierLength_2000(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("2000"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getDatabaseMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_DATABASE_2000;
+				
+					assertEquals(getAssertionFailureMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetSchemaMaximumIdentifierLength_2000(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("2000"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getSchemaMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_2000;
+				
+					assertEquals(getAssertionFailureMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetTableMaximumIdentifierLength_2000(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("2000"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTableMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TABLE_2000;
+				
+					assertEquals(getAssertionFailureMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetViewMaximumIdentifierLength_2000(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("2000"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getViewMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_VIEW_2000;
+				
+					assertEquals(getAssertionFailureMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetColumnMaximumIdentifierLength_2000(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("2000"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getColumnMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_COLUMN_2000;
+				
+					assertEquals(getAssertionFailureMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetTriggerMaximumIdentifierLength_2000(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("2000"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTriggerMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_2000;
+				
+					assertEquals(getAssertionFailureMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetStoredProcedureMaximumIdentifierLength_2000(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				
+				if((dbInformationCollection.get(i).toString()).equals("2000"))
+				{
+					procedure = SQLRoutinesFactory.eINSTANCE.createProcedure();
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getMaximumIdentifierLength(procedure);
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_2000;
+				
+					assertEquals(getAssertionFailureMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+//	==========================================Version 2005==============================================
+	
+	public void testGetMaximumPrecision_DECIMAL_2005(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("2005"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_DECIMAL_2005;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DECIMAL"))
+							{								
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "DECIMAL"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_NUMERIC_2005(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("2005"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_NUMERIC_2005;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMERIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "NUMERIC"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_FLOAT_2005(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("2005"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_FLOAT_2005;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("FLOAT"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "FLOAT"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_CHAR_2005(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("2005"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_CHAR_2005;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("CHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "CHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_NCHAR_2005(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("2005"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_NCHAR_2005;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "NCHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARCHAR_2005(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("2005"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARCHAR_2005;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARCHAR"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARCHAR"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_BINARY_2005(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("2005"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_BINARY_2005;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("BINARY"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "BINARY"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARBINARY_2005(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("2005"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARBINARY_2005;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARBINARY"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARBINARY"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetDatabaseMaximumIdentifierLength_2005(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("2005"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getDatabaseMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_DATABASE_2005;
+				
+					assertEquals(getAssertionFailureMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetSchemaMaximumIdentifierLength_2005(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("2005"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getSchemaMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_2005;
+				
+					assertEquals(getAssertionFailureMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetTableMaximumIdentifierLength_2005(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("2005"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTableMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TABLE_2005;
+				
+					assertEquals(getAssertionFailureMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetViewMaximumIdentifierLength_2005(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("2005"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getViewMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_VIEW_2005;
+				
+					assertEquals(getAssertionFailureMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetColumnMaximumIdentifierLength_2005(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("2005"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getColumnMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_COLUMN_2005;
+				
+					assertEquals(getAssertionFailureMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetTriggerMaximumIdentifierLength_2005(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("2005"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTriggerMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_2005;
+				
+					assertEquals(getAssertionFailureMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetStoredProcedureMaximumIdentifierLength_2005(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				
+				if((dbInformationCollection.get(i).toString()).equals("2005"))
+				{
+					procedure = SQLRoutinesFactory.eINSTANCE.createProcedure();
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getMaximumIdentifierLength(procedure);
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_2005;
+				
+					assertEquals(getAssertionFailureMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	private String getAssertionFailureMessage(String methodName, Object versionName, String dataName){
+		
+		String temp = "\nData type: ";
+		
+		if(dataName.equals(""))
+		{
+			temp = "";
+		}
+		
+		return ("\nPackage: " + PACKAGE_NAME +
+				"\nMethod: " + methodName +
+			    "\nProduct: " + strProduct +
+		        "\nVersion: " + versionName +
+		        temp + dataName +
+		        "\nResult: The actual value does not agree with vendor doc. ");
+	}
+	
+	private String getExceptionMessage(String methodName, Object versionName, Exception e){
+		
+		return ("\nMethod: " + methodName + 
+				"\nProduct: " + strProduct + 
+			    "\nVersion: " + versionName +
+		        "\nException: " + e.toString() +
+		        "\nDescription: The exception is thrown in the test case");
+	}
+	
+	public void tearDown(){
+		
+		expectedMaxPrecision = 0;
+		expectedMaxLength = 0;
+		expectedIdentifierLength = 0;
+		actualIdentifierLength = 0;
+		
+		productVersion = null;
+		dataType = null;
+		dataTypeList = null;
+		definitionCollection = new ArrayList();
+		dbInformationCollection = new ArrayList();
+		
+		strProductVersion = null;
+
+		definition = null;
+		typeDefinition = null;
+		procedure = null;
+	}
+
+}
diff --git a/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/SybaseTest.java b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/SybaseTest.java
new file mode 100644
index 0000000..9325778
--- /dev/null
+++ b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/src/org/eclipse/datatools/enablement/dbdefinition/junittest/SybaseTest.java
@@ -0,0 +1,1441 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.enablement.dbdefinition.junittest;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.eclipse.datatools.connectivity.sqm.core.definition.DatabaseDefinition;
+import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
+import org.eclipse.datatools.modelbase.dbdefinition.PredefinedDataTypeDefinition;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.datatools.modelbase.sql.routines.SQLRoutinesFactory;
+
+public class SybaseTest extends TestCase {
+	
+	//=========================Version 12.x=======================================
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_12X = 28;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_DATABASE_12X = 28;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_12X = 28;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_12X = 28;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLE_12X = 28;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_12X = 28;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_VIEW_12X = 28;
+	
+	private final int MAXIMUM_LENGTH_BINARY_12X = 255;
+	private final int MAXIMUM_LENGTH_VARBINARY_12X = 255;
+	
+	private final int MAXIMUM_PRECISION_DECIMAL_12X = 38;
+	private final int MAXIMUM_PRECISION_FLOAT_12X = 48;
+	private final int MAXIMUM_PRECISION_NUMERIC_12X = 38;	
+	
+//	=========================Version 12.0=======================================
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_12 = 28;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_DATABASE_12 = 28;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_12 = 28;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_12 = 28;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLE_12 = 28;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_12 = 28;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_VIEW_12 = 28;
+	
+	private final int MAXIMUM_LENGTH_BINARY_12 = 255;
+	private final int MAXIMUM_LENGTH_VARBINARY_12 = 255;
+	
+	private final int MAXIMUM_PRECISION_DECIMAL_12 = 38;
+	private final int MAXIMUM_PRECISION_FLOAT_12 = 48;
+	private final int MAXIMUM_PRECISION_NUMERIC_12 = 38;	
+	
+//	=========================Version 12.5=======================================
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_125 = 28;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_DATABASE_125 = 28;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_125 = 28;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_125 = 28;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLE_125 = 28;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_125 = 28;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_VIEW_125 = 28;
+	
+	private final int MAXIMUM_LENGTH_BINARY_125 = 255;
+	private final int MAXIMUM_LENGTH_VARBINARY_125 = 255;
+	
+	private final int MAXIMUM_PRECISION_DECIMAL_125 = 38;
+	private final int MAXIMUM_PRECISION_FLOAT_125 = 48;
+	private final int MAXIMUM_PRECISION_NUMERIC_125 = 38;	
+	
+    //=========================Version 15=======================================
+	private final int MAXIMUM_IDENTIFIER_LENGTH_COLUMN_15 = 255;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_DATABASE_15 = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_15 = 30;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_15 = 255;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TABLE_15 = 255;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_15 = 255;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_UDT_15 = 255;
+	private final int MAXIMUM_IDENTIFIER_LENGTH_VIEW_15 = 255;
+	
+	private final int MAXIMUM_LENGTH_BINARY_15 = 255;
+	private final int MAXIMUM_LENGTH_VARBINARY_15 = 255;
+	
+	private final int MAXIMUM_PRECISION_DECIMAL_15 = 38;
+	private final int MAXIMUM_PRECISION_FLOAT_15 = 48;
+	private final int MAXIMUM_PRECISION_NUMERIC_15 = 38;
+	//==========================================================================================
+	
+	private final String strProduct = "Sybase";
+	private final String PACKAGE_NAME = "org.eclipse.datatools.enablement.dbdefinition.junittest";
+	
+	private int expectedMaxPrecision = 0;
+	private int expectedMaxLength = 0;
+	private int expectedIdentifierLength = 0;
+	private int actualIdentifierLength = 0;
+
+	
+	private Iterator productVersion = null;
+	private Iterator dataType;
+	private List dataTypeList;
+	private ArrayList definitionCollection = new ArrayList();
+	private ArrayList dbInformationCollection = new ArrayList();
+	
+	private String strProductVersion = null;
+
+	private DatabaseDefinition definition = null;
+	private PredefinedDataTypeDefinition typeDefinition = null;
+	private Procedure procedure = null;
+
+	
+	public void setUp(){
+		
+		try{	
+			productVersion = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getVersions(strProduct);
+			assertNotNull("\nMethod: getVersions()" +
+						  "\nError: The method returns a NULL value in startUp()", productVersion);
+					
+			while(productVersion.hasNext())
+			{
+				strProductVersion = productVersion.next().toString();
+				definition = RDBCorePlugin.getDefault().getDatabaseDefinitionRegistry().getDefinition(strProduct, strProductVersion);
+				assertNotNull("\nMethod: getDefinition()" +
+							  "\nError: The method returns a NULL value in startUp()", definition);
+					
+				dbInformationCollection.add(strProductVersion);
+				definitionCollection.add(definition);
+			}
+		}
+		catch(Exception e){
+			fail("\nMethod: setUp()" +
+				 "\nException: " + e.toString() +
+			     "\nDescription: The set up is incomplete");
+		}
+	}
+	
+//==========================================Version 12.x==============================================
+	
+	public void testGetMaximumPrecision_DECIMAL_12X(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("12.x"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_DECIMAL_12X;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DECIMAL"))
+							{								
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "DECIMAL"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_NUMERIC_12X(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("12.x"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_NUMERIC_12X;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMERIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "NUMERIC"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_FLOAT_12X(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("12.x"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_FLOAT_12X;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("FLOAT"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "FLOAT"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_BINARY_12X(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("12.x"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_BINARY_12X;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("BINARY"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "BINARY"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARBINARY_12X(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("12.x"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARBINARY_12X;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARBINARY"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARBINARY"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetDatabaseMaximumIdentifierLength_12X(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("12.x"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getDatabaseMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_DATABASE_12X;
+				
+					assertEquals(getAssertionFailureMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetSchemaMaximumIdentifierLength_12X(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("12.x"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getSchemaMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_12X;
+				
+					assertEquals(getAssertionFailureMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetTableMaximumIdentifierLength_12X(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("12.x"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTableMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TABLE_12X;
+				
+					assertEquals(getAssertionFailureMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetViewMaximumIdentifierLength_12X(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("12.x"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getViewMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_VIEW_12X;
+				
+					assertEquals(getAssertionFailureMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetColumnMaximumIdentifierLength_12X(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("12.x"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getColumnMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_COLUMN_12X;
+				
+					assertEquals(getAssertionFailureMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetTriggerMaximumIdentifierLength_12X(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("12.x"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTriggerMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_12X;
+				
+					assertEquals(getAssertionFailureMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetStoredProcedureMaximumIdentifierLength_12X(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				
+				if((dbInformationCollection.get(i).toString()).equals("12.x"))
+				{
+					procedure = SQLRoutinesFactory.eINSTANCE.createProcedure();
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getMaximumIdentifierLength(procedure);
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_12X;
+				
+					assertEquals(getAssertionFailureMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+//==========================================Version 12==============================================
+	
+	public void testGetMaximumPrecision_DECIMAL_12(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("12.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_DECIMAL_12;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DECIMAL"))
+							{								
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "DECIMAL"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_NUMERIC_12(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("12.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_NUMERIC_12;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMERIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "NUMERIC"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_FLOAT_12(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("12.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_FLOAT_12;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("FLOAT"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "FLOAT"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_BINARY_12(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("12.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_BINARY_12;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("BINARY"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "BINARY"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARBINARY_12(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("12.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARBINARY_12;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARBINARY"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARBINARY"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetDatabaseMaximumIdentifierLength_12(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("12.0"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getDatabaseMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_DATABASE_12;
+				
+					assertEquals(getAssertionFailureMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetSchemaMaximumIdentifierLength_12(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("12.0"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getSchemaMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_12;
+				
+					assertEquals(getAssertionFailureMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetTableMaximumIdentifierLength_12(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("12.0"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTableMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TABLE_12;
+				
+					assertEquals(getAssertionFailureMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetViewMaximumIdentifierLength_12(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("12.0"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getViewMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_VIEW_12;
+				
+					assertEquals(getAssertionFailureMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetColumnMaximumIdentifierLength_12(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("12.0"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getColumnMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_COLUMN_12;
+				
+					assertEquals(getAssertionFailureMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetTriggerMaximumIdentifierLength_12(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("12.0"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTriggerMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_12;
+				
+					assertEquals(getAssertionFailureMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetStoredProcedureMaximumIdentifierLength_12(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				
+				if((dbInformationCollection.get(i).toString()).equals("12.0"))
+				{
+					procedure = SQLRoutinesFactory.eINSTANCE.createProcedure();
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getMaximumIdentifierLength(procedure);
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_12;
+				
+					assertEquals(getAssertionFailureMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+//==========================================Version 12.5==============================================
+	
+	public void testGetMaximumPrecision_DECIMAL_125(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("12.5"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_DECIMAL_125;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DECIMAL"))
+							{								
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "DECIMAL"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_NUMERIC_125(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("12.5"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_NUMERIC_125;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMERIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "NUMERIC"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_FLOAT_125(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("12.5"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_FLOAT_125;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("FLOAT"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "FLOAT"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_BINARY_125(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("12.5"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_BINARY_125;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("BINARY"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "BINARY"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARBINARY_125(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("12.5"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARBINARY_125;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARBINARY"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARBINARY"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetDatabaseMaximumIdentifierLength_125(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("12.5"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getDatabaseMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_DATABASE_125;
+				
+					assertEquals(getAssertionFailureMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetSchemaMaximumIdentifierLength_125(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("12.5"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getSchemaMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_125;
+				
+					assertEquals(getAssertionFailureMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetTableMaximumIdentifierLength_125(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("12.5"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTableMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TABLE_125;
+				
+					assertEquals(getAssertionFailureMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetViewMaximumIdentifierLength_125(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("12.5"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getViewMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_VIEW_125;
+				
+					assertEquals(getAssertionFailureMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetColumnMaximumIdentifierLength_125(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("12.5"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getColumnMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_COLUMN_125;
+				
+					assertEquals(getAssertionFailureMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetTriggerMaximumIdentifierLength_125(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("12.5"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTriggerMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_125;
+				
+					assertEquals(getAssertionFailureMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+	public void testGetStoredProcedureMaximumIdentifierLength_125(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				
+				if((dbInformationCollection.get(i).toString()).equals("12.5"))
+				{
+					procedure = SQLRoutinesFactory.eINSTANCE.createProcedure();
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getMaximumIdentifierLength(procedure);
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_125;
+				
+					assertEquals(getAssertionFailureMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(0), e));
+			}
+		}
+	}
+	
+//==========================================Version 15==============================================
+	public void testGetMaximumPrecision_DECIMAL_15(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("15.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_DECIMAL_15;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("DECIMAL"))
+							{								
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "DECIMAL"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_NUMERIC_15(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("15.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_NUMERIC_15;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("NUMERIC"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "NUMERIC"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumPrecision_FLOAT_15(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("15.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxPrecision = MAXIMUM_PRECISION_FLOAT_15;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("FLOAT"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumPrecision()", dbInformationCollection.get(i), "FLOAT"),
+										expectedMaxPrecision, typeDefinition.getMaximumPrecision());
+							}
+						}
+					}
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumPrecision()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_BINARY_15(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("15.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_BINARY_15;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("BINARY"))
+							{	
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "BINARY"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetMaximumLength_VARBINARY_15(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				dataType = ((DatabaseDefinition)definitionCollection.get(i)).getPredefinedDataTypes();
+				
+				while(dataType.hasNext())
+				{
+					typeDefinition = (PredefinedDataTypeDefinition) dataType.next();
+					
+					if((dbInformationCollection.get(i).toString()).equals("15.0"))
+					{
+						dataTypeList = typeDefinition.getName();
+						expectedMaxLength = MAXIMUM_LENGTH_VARBINARY_15;
+						
+						for(int j = 0; j < dataTypeList.size(); j++)
+						{
+							if((dataTypeList.get(j)).equals("VARBINARY"))
+							{									
+								assertEquals(getAssertionFailureMessage("getMaximumLength()", dbInformationCollection.get(i), "VARBINARY"),
+										expectedMaxLength, typeDefinition.getMaximumLength());
+							}
+						}
+					}
+				}
+
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetDatabaseMaximumIdentifierLength_15(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("15.0"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getDatabaseMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_DATABASE_15;
+				
+					assertEquals(getAssertionFailureMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getDatabaseMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetSchemaMaximumIdentifierLength_15(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("15.0"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getSchemaMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_SCHEMA_15;
+				
+					assertEquals(getAssertionFailureMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getSchemaMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetTableMaximumIdentifierLength_15(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("15.0"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTableMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TABLE_15;
+				
+					assertEquals(getAssertionFailureMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTableMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetViewMaximumIdentifierLength_15(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("15.0"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getViewMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_VIEW_15;
+				
+					assertEquals(getAssertionFailureMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getViewMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetColumnMaximumIdentifierLength_15(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("15.0"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getColumnMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_COLUMN_15;
+				
+					assertEquals(getAssertionFailureMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getColumnMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetUDTMaximumIdentifierLength_15(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("15.0"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getUserDefinedTypeMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_UDT_15;
+				
+					assertEquals(getAssertionFailureMessage("getUserDefinedTypeMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getUserDefinedTypeMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetTriggerMaximumIdentifierLength_15(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				if((dbInformationCollection.get(i).toString()).equals("15.0"))
+				{
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getTriggerMaximumIdentifierLength();
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_TRIGGER_15;
+				
+					assertEquals(getAssertionFailureMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+		
+			}catch(Exception e){
+				fail(getExceptionMessage("getTriggerMaximumIdentifierLength()", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	public void testGetStoredProcedureMaximumIdentifierLength_15(){
+		
+		for(int i = 0; i < definitionCollection.size(); i++)
+		{
+			try{
+				
+				if((dbInformationCollection.get(i).toString()).equals("15.0"))
+				{
+					procedure = SQLRoutinesFactory.eINSTANCE.createProcedure();
+					actualIdentifierLength = ((DatabaseDefinition)definitionCollection.get(i)).getMaximumIdentifierLength(procedure);
+					expectedIdentifierLength = MAXIMUM_IDENTIFIER_LENGTH_STORED_PROCEDURE_15;
+				
+					assertEquals(getAssertionFailureMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(i), ""),
+							expectedIdentifierLength, actualIdentifierLength);
+				}
+				
+			}catch(Exception e){
+				fail(getExceptionMessage("getMaximumIdentifierLength(SQLObject sqlObject)", dbInformationCollection.get(1), e));
+			}
+		}
+	}
+	
+	private String getAssertionFailureMessage(String methodName, Object versionName, String dataName){
+		
+		String temp = "\nData type: ";
+		
+		if(dataName.equals(""))
+		{
+			temp = "";
+		}
+		
+		return ("\nPackage: " + PACKAGE_NAME +
+				"\nMethod: " + methodName +
+			    "\nProduct: " + strProduct + 
+		        "\nVersion: " + versionName +
+		        temp + dataName +
+		        "\nResult: The actual value does not agree with vendor doc. ");
+	}
+	
+	private String getExceptionMessage(String methodName, Object versionName, Exception e){
+		
+		return ("\nMethod: " + methodName + 
+				"\nProduct: " + strProduct + 
+			    "\nVersion: " + versionName +
+		        "\nException: " + e.toString() +
+		        "\nDescription: The exception is thrown in the test case");
+	}
+	
+	public void tearDown(){
+		
+		expectedMaxPrecision = 0;
+		expectedMaxLength = 0;
+		expectedIdentifierLength = 0;
+		actualIdentifierLength = 0;
+		
+		productVersion = null;
+		dataType = null;
+		dataTypeList = null;
+		definitionCollection = new ArrayList();
+		dbInformationCollection = new ArrayList();
+		
+		strProductVersion = null;
+
+		definition = null;
+		typeDefinition = null;
+		procedure = null;
+	}
+
+}
diff --git a/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/test.xml b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/test.xml
new file mode 100644
index 0000000..4c0216f
--- /dev/null
+++ b/tests/org.eclipse.datatools.enablement.dbdefinition.junittest/test.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<project
+    name="testsuite"
+    default="run"
+    basedir=".">
+
+    <!-- The property ${eclipse-home} should be passed into this script -->
+
+    <echo message="basedir ${basedir}" />
+    <echo message="eclipse place ${eclipse-home}" />
+
+    <!-- sets the plugin name -->
+    <property
+        name="plugin-name"
+        value="org.eclipse.datatools.enablement.dbdefinition.junittest" />
+
+    <!-- sets the library-file -->
+    <property
+        name="library-file"
+        value="${eclipse-home}/plugins/org.eclipse.test_3.1.0/library.xml" />
+
+    <!-- 
+        This target holds all initialization code that needs to be done for 
+        all tests that are to be run. Initialization for individual tests 
+        should be done within the body of the suite target. 
+    -->
+    <target name="init">
+        <tstamp />
+        <delete>
+            <fileset
+                dir="${eclipse-home}"
+                includes="org*.xml" />
+        </delete>
+    </target>
+
+    <!-- This target defines the tests that need to be run. -->
+    <target name="suite">
+        <property
+            name="test-workspace"
+            value="${eclipse-home}/${plugin-name}-workspace" />
+        <delete
+            dir="${test-workspace}"
+            quiet="true" />
+        <ant
+            target="core-test"
+            antfile="${library-file}"
+            dir="${eclipse-home}">
+            <property
+                name="data-dir"
+                value="${test-workspace}" />
+            <property
+                name="plugin-name"
+                value="${plugin-name}" />
+            <property
+                name="classname"
+                value="org.eclipse.datatools.enablement.dbdefinition.junittest.AllTests" />
+            <property
+                name="plugin-path"
+                value="${eclipse-home}/plugins/${plugin-name}" />
+            <!-- <property name="extraVMargs" value="${extraVMargs}"/> -->
+        </ant>
+    </target>
+    
+    
+    <!-- 
+        This target holds code to cleanup the testing environment after 
+        after all of the tests have been run. You can use this target to 
+        delete temporary files that have been created, though usually not 
+        needed, if every test has their own clean workspace 
+    -->
+    <target name="cleanup">
+    </target>
+    
+    
+    <!-- This target runs the test suite. Any actions that need to happen -->
+    <!-- after all the tests have been run should go here. -->
+    <target
+        name="run"
+        depends="init,suite,cleanup">
+        <ant
+            target="collect"
+            antfile="${library-file}"
+            dir="${eclipse-home}">
+            <property
+                name="includes"
+                value="org*.xml" />
+            <property
+                name="output-file"
+                value="${plugin-name}.xml" />
+        </ant>
+    </target>
+</project>